@onewelcome/react-lib-components 8.5.0 → 8.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 (334) hide show
  1. package/dist/cjs/Button/BaseButton.cjs.js +1 -1
  2. package/dist/cjs/Button/BaseButton.cjs.js.map +1 -1
  3. package/dist/cjs/ContextMenu/ContextMenu.cjs.js +1 -1
  4. package/dist/cjs/ContextMenu/ContextMenu.cjs.js.map +1 -1
  5. package/dist/cjs/DataGrid/DataGridFilters/DataGridDateFilter.cjs.js +2 -0
  6. package/dist/cjs/DataGrid/DataGridFilters/DataGridDateFilter.cjs.js.map +1 -0
  7. package/dist/cjs/DataGrid/DataGridFilters/DataGridFilterTag.cjs.js +1 -1
  8. package/dist/cjs/DataGrid/DataGridFilters/DataGridFilterTag.cjs.js.map +1 -1
  9. package/dist/cjs/DataGrid/DataGridFilters/DataGridFilters.interfaces.cjs.js.map +1 -1
  10. package/dist/cjs/DataGrid/DataGridFilters/DataGridToolbar.cjs.js +1 -1
  11. package/dist/cjs/DataGrid/DataGridFilters/DataGridToolbar.cjs.js.map +1 -1
  12. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.cjs.js +2 -0
  13. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.cjs.js.map +1 -0
  14. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.module.scss.cjs.js +2 -0
  15. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.module.scss.cjs.js.map +1 -0
  16. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.cjs.js +2 -0
  17. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.cjs.js.map +1 -0
  18. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.cjs.js +2 -0
  19. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.cjs.js.map +1 -0
  20. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.cjs.js +2 -0
  21. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.cjs.js.map +1 -0
  22. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/SideMenu.cjs.js +2 -0
  23. package/dist/cjs/DataGrid/DataGridFilters/DateTimePicker/SideMenu.cjs.js.map +1 -0
  24. package/dist/cjs/DatePicker/DatePicker.cjs.js +1 -1
  25. package/dist/cjs/DatePicker/DatePicker.cjs.js.map +1 -1
  26. package/dist/cjs/DatePicker/DatePicker.module.scss.cjs.js +1 -1
  27. package/dist/cjs/Form/Checkbox/Checkbox.cjs.js +1 -1
  28. package/dist/cjs/Form/Checkbox/Checkbox.cjs.js.map +1 -1
  29. package/dist/cjs/Form/Checkbox/Checkbox.module.scss.cjs.js +1 -1
  30. package/dist/cjs/Form/Fieldset/Fieldset.cjs.js +1 -1
  31. package/dist/cjs/Form/Fieldset/Fieldset.cjs.js.map +1 -1
  32. package/dist/cjs/Form/FileUpload/FileItem/FileItem.cjs.js +1 -1
  33. package/dist/cjs/Form/FileUpload/FileItem/FileItem.cjs.js.map +1 -1
  34. package/dist/cjs/Form/FileUpload/FileItem/FileItem.module.scss.cjs.js +1 -1
  35. package/dist/cjs/Form/FileUpload/FileUpload.cjs.js +1 -1
  36. package/dist/cjs/Form/FileUpload/FileUpload.cjs.js.map +1 -1
  37. package/dist/cjs/Form/FileUpload/FileUpload.module.scss.cjs.js +1 -1
  38. package/dist/cjs/Form/FormGroup/FormGroup.cjs.js +1 -1
  39. package/dist/cjs/Form/FormGroup/FormGroup.cjs.js.map +1 -1
  40. package/dist/cjs/Form/FormHelperText/FormHelperText.module.scss.cjs.js +1 -1
  41. package/dist/cjs/Form/FormSelectorWrapper/FormSelectorWrapper.cjs.js +1 -1
  42. package/dist/cjs/Form/FormSelectorWrapper/FormSelectorWrapper.cjs.js.map +1 -1
  43. package/dist/cjs/Form/Input/Input.cjs.js +1 -1
  44. package/dist/cjs/Form/Input/Input.cjs.js.map +1 -1
  45. package/dist/cjs/Form/Input/Input.module.scss.cjs.js +1 -1
  46. package/dist/cjs/Form/Radio/Radio.cjs.js +1 -1
  47. package/dist/cjs/Form/Radio/Radio.cjs.js.map +1 -1
  48. package/dist/cjs/Form/Radio/Radio.module.scss.cjs.js +1 -1
  49. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.cjs.js +1 -1
  50. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.cjs.js.map +1 -1
  51. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.module.scss.cjs.js +1 -1
  52. package/dist/cjs/Form/Select/MultiSelect/SelectedOptions.module.scss.cjs.js +1 -1
  53. package/dist/cjs/Form/Select/MultiSelect/useArrowNavigation.cjs.js +1 -1
  54. package/dist/cjs/Form/Select/MultiSelect/useArrowNavigation.cjs.js.map +1 -1
  55. package/dist/cjs/Form/Select/MultiSelect/useMultiSelect.cjs.js +2 -0
  56. package/dist/cjs/Form/Select/MultiSelect/useMultiSelect.cjs.js.map +1 -0
  57. package/dist/cjs/Form/Select/Select.interfaces.cjs.js +2 -0
  58. package/dist/cjs/Form/Select/Select.interfaces.cjs.js.map +1 -0
  59. package/dist/cjs/Form/Select/SingleSelect/Select.cjs.js +1 -1
  60. package/dist/cjs/Form/Select/SingleSelect/Select.cjs.js.map +1 -1
  61. package/dist/cjs/Form/Select/SingleSelect/Select.module.scss.cjs.js +1 -1
  62. package/dist/cjs/Form/Select/SingleSelect/useArrowNavigation.cjs.js +1 -1
  63. package/dist/cjs/Form/Select/SingleSelect/useArrowNavigation.cjs.js.map +1 -1
  64. package/dist/cjs/Form/Select/useSelectPositionList.cjs.js +1 -1
  65. package/dist/cjs/Form/Select/useSelectPositionList.cjs.js.map +1 -1
  66. package/dist/cjs/Form/Textarea/Textarea.cjs.js +1 -1
  67. package/dist/cjs/Form/Textarea/Textarea.cjs.js.map +1 -1
  68. package/dist/cjs/Form/Textarea/Textarea.module.scss.cjs.js +1 -1
  69. package/dist/cjs/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.cjs.js +1 -1
  70. package/dist/cjs/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.cjs.js.map +1 -1
  71. package/dist/cjs/Form/Wrapper/InputWrapper/InputWrapper.cjs.js +1 -1
  72. package/dist/cjs/Form/Wrapper/InputWrapper/InputWrapper.cjs.js.map +1 -1
  73. package/dist/cjs/Form/Wrapper/InputWrapper/InputWrapper.module.scss.cjs.js +1 -1
  74. package/dist/cjs/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.cjs.js +1 -1
  75. package/dist/cjs/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.cjs.js.map +1 -1
  76. package/dist/cjs/Form/Wrapper/RadioWrapper/RadioWrapper.cjs.js +1 -1
  77. package/dist/cjs/Form/Wrapper/RadioWrapper/RadioWrapper.cjs.js.map +1 -1
  78. package/dist/cjs/Form/Wrapper/SelectWrapper/SelectWrapper.cjs.js +1 -1
  79. package/dist/cjs/Form/Wrapper/SelectWrapper/SelectWrapper.cjs.js.map +1 -1
  80. package/dist/cjs/Form/Wrapper/TextareaWrapper/TextareaWrapper.cjs.js +1 -1
  81. package/dist/cjs/Form/Wrapper/TextareaWrapper/TextareaWrapper.cjs.js.map +1 -1
  82. package/dist/cjs/Form/Wrapper/TextareaWrapper/TextareaWrapper.module.scss.cjs.js +1 -1
  83. package/dist/cjs/Form/Wrapper/Wrapper/Wrapper.cjs.js +1 -1
  84. package/dist/cjs/Form/Wrapper/Wrapper/Wrapper.cjs.js.map +1 -1
  85. package/dist/cjs/Form/Wrapper/Wrapper/Wrapper.module.scss.cjs.js +1 -1
  86. package/dist/cjs/_BaseStyling_/BaseStyling.cjs.js +1 -1
  87. package/dist/cjs/_BaseStyling_/BaseStyling.cjs.js.map +1 -1
  88. package/dist/cjs/src/components/DataGrid/DataGridFilters/DataGridDateFilter.d.ts +9 -0
  89. package/dist/cjs/src/components/DataGrid/DataGridFilters/DataGridFilterTag.d.ts +2 -1
  90. package/dist/cjs/src/components/DataGrid/DataGridFilters/DataGridFilters.interfaces.d.ts +10 -1
  91. package/dist/cjs/src/components/DataGrid/DataGridFilters/DataGridToolbar.d.ts +5 -3
  92. package/dist/cjs/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.d.ts +31 -0
  93. package/dist/cjs/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.d.ts +15 -0
  94. package/dist/cjs/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.d.ts +18 -0
  95. package/dist/cjs/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.d.ts +10 -0
  96. package/dist/cjs/src/components/DataGrid/DataGridFilters/DateTimePicker/SideMenu.d.ts +10 -0
  97. package/dist/cjs/src/components/DataGrid/testUtils.d.ts +7 -1
  98. package/dist/cjs/src/components/DatePicker/DatePicker.d.ts +4 -1
  99. package/dist/cjs/src/components/Form/Checkbox/Checkbox.d.ts +1 -1
  100. package/dist/cjs/src/components/Form/Fieldset/Fieldset.d.ts +1 -1
  101. package/dist/cjs/src/components/Form/FileUpload/FileItem/FileItem.d.ts +1 -1
  102. package/dist/cjs/src/components/Form/FileUpload/FileUpload.d.ts +6 -1
  103. package/dist/cjs/src/components/Form/FormGroup/FormGroup.d.ts +1 -0
  104. package/dist/cjs/src/components/Form/Input/Input.d.ts +2 -1
  105. package/dist/cjs/src/components/Form/Radio/Radio.d.ts +1 -1
  106. package/dist/cjs/src/components/Form/Select/MultiSelect/MultiSelect.d.ts +1 -1
  107. package/dist/cjs/src/components/Form/Select/MultiSelect/useArrowNavigation.d.ts +2 -1
  108. package/dist/cjs/src/components/Form/Select/MultiSelect/useMultiSelect.d.ts +16 -0
  109. package/dist/cjs/src/components/Form/Select/Select.interfaces.d.ts +6 -4
  110. package/dist/cjs/src/components/Form/Select/SingleSelect/Select.d.ts +1 -1
  111. package/dist/cjs/src/components/Form/Select/SingleSelect/useArrowNavigation.d.ts +1 -1
  112. package/dist/cjs/src/components/Form/Select/useSelectPositionList.d.ts +2 -2
  113. package/dist/cjs/src/components/Form/Textarea/Textarea.d.ts +2 -1
  114. package/dist/cjs/src/components/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.d.ts +1 -1
  115. package/dist/cjs/src/components/Form/Wrapper/InputWrapper/InputWrapper.d.ts +1 -1
  116. package/dist/cjs/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.d.ts +1 -1
  117. package/dist/cjs/src/components/Form/Wrapper/RadioWrapper/RadioWrapper.d.ts +1 -1
  118. package/dist/cjs/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.d.ts +1 -1
  119. package/dist/cjs/src/components/Form/Wrapper/TextareaWrapper/TextareaWrapper.d.ts +2 -1
  120. package/dist/cjs/src/components/Form/Wrapper/Wrapper/Wrapper.d.ts +1 -0
  121. package/dist/cjs/src/components/_BaseStyling_/BaseStyling.d.ts +2 -0
  122. package/dist/cjs/src/components/withReadOnly.d.ts +8 -0
  123. package/dist/cjs/src/hooks/useClickOutside.cjs.js +2 -0
  124. package/dist/cjs/src/hooks/useClickOutside.cjs.js.map +1 -0
  125. package/dist/cjs/src/hooks/useClickOutside.d.ts +2 -0
  126. package/dist/cjs/src/hooks/useClickOutside.test.d.ts +1 -0
  127. package/dist/cjs/src/index.cjs.js +1 -1
  128. package/dist/cjs/src/index.d.ts +2 -0
  129. package/dist/cjs/src/util/unitTestUtils.d.ts +12 -0
  130. package/dist/cjs/withReadOnly.cjs.js +2 -0
  131. package/dist/cjs/withReadOnly.cjs.js.map +1 -0
  132. package/dist/esm/Button/BaseButton.esm.js +5 -2
  133. package/dist/esm/Button/BaseButton.esm.js.map +1 -1
  134. package/dist/esm/ContextMenu/ContextMenu.esm.js +6 -8
  135. package/dist/esm/ContextMenu/ContextMenu.esm.js.map +1 -1
  136. package/dist/esm/ContextMenu/ContextMenuItem.esm.js +3 -3
  137. package/dist/esm/ContextMenu/ContextMenuItem.esm.js.map +1 -1
  138. package/dist/esm/ContextMenu/ContextMenuItem.module.scss.esm.js +2 -2
  139. package/dist/esm/DataGrid/DataGridFilters/DataGridDateFilter.esm.js +35 -0
  140. package/dist/esm/DataGrid/DataGridFilters/DataGridDateFilter.esm.js.map +1 -0
  141. package/dist/esm/DataGrid/DataGridFilters/DataGridFilterTag.esm.js +16 -7
  142. package/dist/esm/DataGrid/DataGridFilters/DataGridFilterTag.esm.js.map +1 -1
  143. package/dist/esm/DataGrid/DataGridFilters/DataGridFilters.interfaces.esm.js.map +1 -1
  144. package/dist/esm/DataGrid/DataGridFilters/DataGridToolbar.esm.js +15 -12
  145. package/dist/esm/DataGrid/DataGridFilters/DataGridToolbar.esm.js.map +1 -1
  146. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.esm.js +138 -0
  147. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.esm.js.map +1 -0
  148. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.module.scss.esm.js +8 -0
  149. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.module.scss.esm.js.map +1 -0
  150. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.esm.js +54 -0
  151. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.esm.js.map +1 -0
  152. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.esm.js +51 -0
  153. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.esm.js.map +1 -0
  154. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.esm.js +29 -0
  155. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.esm.js.map +1 -0
  156. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/SideMenu.esm.js +26 -0
  157. package/dist/esm/DataGrid/DataGridFilters/DateTimePicker/SideMenu.esm.js.map +1 -0
  158. package/dist/esm/DatePicker/DatePicker.esm.js +3 -1
  159. package/dist/esm/DatePicker/DatePicker.esm.js.map +1 -1
  160. package/dist/esm/DatePicker/DatePicker.module.scss.esm.js +2 -2
  161. package/dist/esm/Form/Checkbox/Checkbox.esm.js +2 -1
  162. package/dist/esm/Form/Checkbox/Checkbox.esm.js.map +1 -1
  163. package/dist/esm/Form/Checkbox/Checkbox.module.scss.esm.js +1 -1
  164. package/dist/esm/Form/Fieldset/Fieldset.esm.js +2 -1
  165. package/dist/esm/Form/Fieldset/Fieldset.esm.js.map +1 -1
  166. package/dist/esm/Form/FileUpload/FileItem/FileItem.esm.js +10 -3
  167. package/dist/esm/Form/FileUpload/FileItem/FileItem.esm.js.map +1 -1
  168. package/dist/esm/Form/FileUpload/FileItem/FileItem.module.scss.esm.js +1 -1
  169. package/dist/esm/Form/FileUpload/FileUpload.esm.js +9 -6
  170. package/dist/esm/Form/FileUpload/FileUpload.esm.js.map +1 -1
  171. package/dist/esm/Form/FileUpload/FileUpload.module.scss.esm.js +2 -2
  172. package/dist/esm/Form/FormGroup/FormGroup.esm.js +2 -2
  173. package/dist/esm/Form/FormGroup/FormGroup.esm.js.map +1 -1
  174. package/dist/esm/Form/FormHelperText/FormHelperText.module.scss.esm.js +1 -1
  175. package/dist/esm/Form/FormSelectorWrapper/FormSelectorWrapper.esm.js +1 -1
  176. package/dist/esm/Form/FormSelectorWrapper/FormSelectorWrapper.esm.js.map +1 -1
  177. package/dist/esm/Form/Input/Input.esm.js +7 -5
  178. package/dist/esm/Form/Input/Input.esm.js.map +1 -1
  179. package/dist/esm/Form/Input/Input.module.scss.esm.js +2 -2
  180. package/dist/esm/Form/Radio/Radio.esm.js +2 -1
  181. package/dist/esm/Form/Radio/Radio.esm.js.map +1 -1
  182. package/dist/esm/Form/Radio/Radio.module.scss.esm.js +1 -1
  183. package/dist/esm/Form/Select/MultiSelect/MultiSelect.esm.js +33 -18
  184. package/dist/esm/Form/Select/MultiSelect/MultiSelect.esm.js.map +1 -1
  185. package/dist/esm/Form/Select/MultiSelect/MultiSelect.module.scss.esm.js +2 -2
  186. package/dist/esm/Form/Select/MultiSelect/SelectedOptions.module.scss.esm.js +1 -1
  187. package/dist/esm/Form/Select/MultiSelect/useArrowNavigation.esm.js +4 -1
  188. package/dist/esm/Form/Select/MultiSelect/useArrowNavigation.esm.js.map +1 -1
  189. package/dist/esm/Form/Select/MultiSelect/useMultiSelect.esm.js +63 -0
  190. package/dist/esm/Form/Select/MultiSelect/useMultiSelect.esm.js.map +1 -0
  191. package/dist/esm/Form/Select/Select.interfaces.esm.js +23 -0
  192. package/dist/esm/Form/Select/Select.interfaces.esm.js.map +1 -0
  193. package/dist/esm/Form/Select/SingleSelect/Select.esm.js +29 -20
  194. package/dist/esm/Form/Select/SingleSelect/Select.esm.js.map +1 -1
  195. package/dist/esm/Form/Select/SingleSelect/Select.module.scss.esm.js +2 -2
  196. package/dist/esm/Form/Select/SingleSelect/useArrowNavigation.esm.js +4 -1
  197. package/dist/esm/Form/Select/SingleSelect/useArrowNavigation.esm.js.map +1 -1
  198. package/dist/esm/Form/Select/useSelectPositionList.esm.js +11 -13
  199. package/dist/esm/Form/Select/useSelectPositionList.esm.js.map +1 -1
  200. package/dist/esm/Form/Textarea/Textarea.esm.js +12 -5
  201. package/dist/esm/Form/Textarea/Textarea.esm.js.map +1 -1
  202. package/dist/esm/Form/Textarea/Textarea.module.scss.esm.js +1 -1
  203. package/dist/esm/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.esm.js +4 -1
  204. package/dist/esm/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.esm.js.map +1 -1
  205. package/dist/esm/Form/Wrapper/InputWrapper/InputWrapper.esm.js +6 -4
  206. package/dist/esm/Form/Wrapper/InputWrapper/InputWrapper.esm.js.map +1 -1
  207. package/dist/esm/Form/Wrapper/InputWrapper/InputWrapper.module.scss.esm.js +1 -1
  208. package/dist/esm/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.esm.js +3 -2
  209. package/dist/esm/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.esm.js.map +1 -1
  210. package/dist/esm/Form/Wrapper/RadioWrapper/RadioWrapper.esm.js +17 -10
  211. package/dist/esm/Form/Wrapper/RadioWrapper/RadioWrapper.esm.js.map +1 -1
  212. package/dist/esm/Form/Wrapper/SelectWrapper/SelectWrapper.esm.js +5 -2
  213. package/dist/esm/Form/Wrapper/SelectWrapper/SelectWrapper.esm.js.map +1 -1
  214. package/dist/esm/Form/Wrapper/TextareaWrapper/TextareaWrapper.esm.js +20 -10
  215. package/dist/esm/Form/Wrapper/TextareaWrapper/TextareaWrapper.esm.js.map +1 -1
  216. package/dist/esm/Form/Wrapper/TextareaWrapper/TextareaWrapper.module.scss.esm.js +2 -2
  217. package/dist/esm/Form/Wrapper/Wrapper/Wrapper.esm.js +2 -2
  218. package/dist/esm/Form/Wrapper/Wrapper/Wrapper.esm.js.map +1 -1
  219. package/dist/esm/Form/Wrapper/Wrapper/Wrapper.module.scss.esm.js +1 -1
  220. package/dist/esm/_BaseStyling_/BaseStyling.esm.js +2 -0
  221. package/dist/esm/_BaseStyling_/BaseStyling.esm.js.map +1 -1
  222. package/dist/esm/src/components/DataGrid/DataGridFilters/DataGridDateFilter.d.ts +9 -0
  223. package/dist/esm/src/components/DataGrid/DataGridFilters/DataGridFilterTag.d.ts +2 -1
  224. package/dist/esm/src/components/DataGrid/DataGridFilters/DataGridFilters.interfaces.d.ts +10 -1
  225. package/dist/esm/src/components/DataGrid/DataGridFilters/DataGridToolbar.d.ts +5 -3
  226. package/dist/esm/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.d.ts +31 -0
  227. package/dist/esm/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.d.ts +15 -0
  228. package/dist/esm/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.d.ts +18 -0
  229. package/dist/esm/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.d.ts +10 -0
  230. package/dist/esm/src/components/DataGrid/DataGridFilters/DateTimePicker/SideMenu.d.ts +10 -0
  231. package/dist/esm/src/components/DataGrid/testUtils.d.ts +7 -1
  232. package/dist/esm/src/components/DatePicker/DatePicker.d.ts +4 -1
  233. package/dist/esm/src/components/Form/Checkbox/Checkbox.d.ts +1 -1
  234. package/dist/esm/src/components/Form/Fieldset/Fieldset.d.ts +1 -1
  235. package/dist/esm/src/components/Form/FileUpload/FileItem/FileItem.d.ts +1 -1
  236. package/dist/esm/src/components/Form/FileUpload/FileUpload.d.ts +6 -1
  237. package/dist/esm/src/components/Form/FormGroup/FormGroup.d.ts +1 -0
  238. package/dist/esm/src/components/Form/Input/Input.d.ts +2 -1
  239. package/dist/esm/src/components/Form/Radio/Radio.d.ts +1 -1
  240. package/dist/esm/src/components/Form/Select/MultiSelect/MultiSelect.d.ts +1 -1
  241. package/dist/esm/src/components/Form/Select/MultiSelect/useArrowNavigation.d.ts +2 -1
  242. package/dist/esm/src/components/Form/Select/MultiSelect/useMultiSelect.d.ts +16 -0
  243. package/dist/esm/src/components/Form/Select/MultiSelect/useMultiSelect.test.d.ts +1 -0
  244. package/dist/esm/src/components/Form/Select/Select.interfaces.d.ts +6 -4
  245. package/dist/esm/src/components/Form/Select/SingleSelect/Select.d.ts +1 -1
  246. package/dist/esm/src/components/Form/Select/SingleSelect/useArrowNavigation.d.ts +1 -1
  247. package/dist/esm/src/components/Form/Select/useSelectPositionList.d.ts +2 -2
  248. package/dist/esm/src/components/Form/Textarea/Textarea.d.ts +2 -1
  249. package/dist/esm/src/components/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.d.ts +1 -1
  250. package/dist/esm/src/components/Form/Wrapper/InputWrapper/InputWrapper.d.ts +1 -1
  251. package/dist/esm/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.d.ts +1 -1
  252. package/dist/esm/src/components/Form/Wrapper/RadioWrapper/RadioWrapper.d.ts +1 -1
  253. package/dist/esm/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.d.ts +1 -1
  254. package/dist/esm/src/components/Form/Wrapper/TextareaWrapper/TextareaWrapper.d.ts +2 -1
  255. package/dist/esm/src/components/Form/Wrapper/Wrapper/Wrapper.d.ts +1 -0
  256. package/dist/esm/src/components/_BaseStyling_/BaseStyling.d.ts +2 -0
  257. package/dist/esm/src/components/withReadOnly.d.ts +8 -0
  258. package/dist/esm/src/components/withReadOnly.test.d.ts +1 -0
  259. package/dist/esm/src/hooks/useClickOutside.d.ts +2 -0
  260. package/dist/esm/src/hooks/useClickOutside.esm.js +38 -0
  261. package/dist/esm/src/hooks/useClickOutside.esm.js.map +1 -0
  262. package/dist/esm/src/hooks/useClickOutside.test.d.ts +1 -0
  263. package/dist/esm/src/index.d.ts +2 -0
  264. package/dist/esm/src/index.esm.js +2 -0
  265. package/dist/esm/src/index.esm.js.map +1 -1
  266. package/dist/esm/src/util/unitTestUtils.d.ts +12 -0
  267. package/dist/esm/withReadOnly.esm.js +70 -0
  268. package/dist/esm/withReadOnly.esm.js.map +1 -0
  269. package/package.json +21 -17
  270. package/src/components/Button/BaseButton.tsx +7 -4
  271. package/src/components/ContextMenu/ContextMenu.tsx +5 -13
  272. package/src/components/DataGrid/DataGridBody/__snapshots__/DataGridBody.test.tsx.snap +4 -4
  273. package/src/components/DataGrid/DataGridFilters/DataGridDateFilter.tsx +65 -0
  274. package/src/components/DataGrid/DataGridFilters/DataGridFilterTag.tsx +25 -5
  275. package/src/components/DataGrid/DataGridFilters/DataGridFilters.interfaces.ts +18 -1
  276. package/src/components/DataGrid/DataGridFilters/DataGridToolbar.tsx +53 -33
  277. package/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.module.scss +134 -0
  278. package/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePicker.tsx +267 -0
  279. package/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerCalendarSection.tsx +103 -0
  280. package/src/components/DataGrid/DataGridFilters/DateTimePicker/DateTimePickerInputSection.tsx +121 -0
  281. package/src/{hooks/useBodyClick.ts → components/DataGrid/DataGridFilters/DateTimePicker/DateTimeService.ts} +12 -18
  282. package/src/components/DataGrid/DataGridFilters/DateTimePicker/SideMenu.tsx +50 -0
  283. package/src/components/DataGrid/testUtils.ts +48 -15
  284. package/src/components/DatePicker/DatePicker.module.scss +32 -9
  285. package/src/components/DatePicker/DatePicker.tsx +15 -1
  286. package/src/components/Form/Checkbox/Checkbox.module.scss +70 -0
  287. package/src/components/Form/Checkbox/Checkbox.tsx +2 -1
  288. package/src/components/Form/Fieldset/Fieldset.tsx +2 -1
  289. package/src/components/Form/FileUpload/FileItem/FileItem.module.scss +16 -0
  290. package/src/components/Form/FileUpload/FileItem/FileItem.tsx +17 -3
  291. package/src/components/Form/FileUpload/FileUpload.module.scss +57 -1
  292. package/src/components/Form/FileUpload/FileUpload.tsx +16 -6
  293. package/src/components/Form/FormGroup/FormGroup.tsx +6 -1
  294. package/src/components/Form/FormHelperText/FormHelperText.module.scss +4 -0
  295. package/src/components/Form/FormSelectorWrapper/FormSelectorWrapper.tsx +2 -2
  296. package/src/components/Form/Input/Input.module.scss +26 -0
  297. package/src/components/Form/Input/Input.tsx +10 -1
  298. package/src/components/Form/Radio/Radio.module.scss +46 -0
  299. package/src/components/Form/Radio/Radio.tsx +2 -1
  300. package/src/components/Form/Select/MultiSelect/MultiSelect.module.scss +35 -1
  301. package/src/components/Form/Select/MultiSelect/MultiSelect.tsx +53 -38
  302. package/src/components/Form/Select/MultiSelect/SelectedOptions.module.scss +8 -0
  303. package/src/components/Form/Select/MultiSelect/useArrowNavigation.ts +6 -1
  304. package/src/components/Form/Select/MultiSelect/useMultiSelect.tsx +98 -0
  305. package/src/components/Form/Select/Select.interfaces.ts +6 -4
  306. package/src/components/Form/Select/SingleSelect/Select.module.scss +60 -1
  307. package/src/components/Form/Select/SingleSelect/Select.tsx +42 -37
  308. package/src/components/Form/Select/SingleSelect/useArrowNavigation.ts +6 -1
  309. package/src/components/Form/Select/useSelectPositionList.ts +10 -14
  310. package/src/components/Form/Textarea/Textarea.module.scss +24 -0
  311. package/src/components/Form/Textarea/Textarea.tsx +24 -3
  312. package/src/components/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.tsx +4 -1
  313. package/src/components/Form/Wrapper/InputWrapper/InputWrapper.module.scss +14 -0
  314. package/src/components/Form/Wrapper/InputWrapper/InputWrapper.tsx +6 -2
  315. package/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.tsx +3 -1
  316. package/src/components/Form/Wrapper/RadioWrapper/RadioWrapper.tsx +17 -12
  317. package/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.tsx +6 -1
  318. package/src/components/Form/Wrapper/TextareaWrapper/TextareaWrapper.module.scss +43 -0
  319. package/src/components/Form/Wrapper/TextareaWrapper/TextareaWrapper.tsx +45 -20
  320. package/src/components/Form/Wrapper/Wrapper/Wrapper.module.scss +6 -0
  321. package/src/components/Form/Wrapper/Wrapper/Wrapper.tsx +3 -0
  322. package/src/components/_BaseStyling_/BaseStyling.tsx +4 -0
  323. package/src/components/withReadOnly.tsx +112 -0
  324. package/src/hooks/useClickOutside.ts +42 -0
  325. package/src/index.ts +2 -0
  326. package/src/mixins.module.scss +6 -0
  327. package/{dist/esm/src/hooks/useBodyClick.esm.js → src/util/unitTestUtils.ts} +16 -17
  328. package/dist/cjs/src/hooks/useBodyClick.cjs.js +0 -2
  329. package/dist/cjs/src/hooks/useBodyClick.cjs.js.map +0 -1
  330. package/dist/cjs/src/hooks/useBodyClick.d.ts +0 -1
  331. package/dist/esm/src/hooks/useBodyClick.d.ts +0 -1
  332. package/dist/esm/src/hooks/useBodyClick.esm.js.map +0 -1
  333. /package/dist/cjs/src/{hooks/useBodyClick.test.d.ts → components/Form/Select/MultiSelect/useMultiSelect.test.d.ts} +0 -0
  334. /package/dist/{esm/src/hooks/useBodyClick.test.d.ts → cjs/src/components/withReadOnly.test.d.ts} +0 -0
@@ -28,6 +28,7 @@ import readyclasses from "../../../readyclasses.module.scss";
28
28
  import { FormElement } from "../form.interfaces";
29
29
  import { useDetermineStatusIcon } from "../../../hooks/useDetermineStatusIcon";
30
30
  import { MergeElementProps } from "../../../interfaces";
31
+ import { withReadOnly } from "../../withReadOnly";
31
32
 
32
33
  export const dateTypes = ["date", "time", "datetime-local"] as const;
33
34
 
@@ -51,6 +52,7 @@ export type Props = MergeElementProps<
51
52
  type: Type;
52
53
  suffix?: ReactNode;
53
54
  prefix?: ReactNode;
55
+ readOnlyView?: boolean;
54
56
  }
55
57
  >;
56
58
 
@@ -69,6 +71,7 @@ const InputComponent: ForwardRefRenderFunction<HTMLInputElement, Props> = (
69
71
  disabled,
70
72
  onFocus,
71
73
  onBlur,
74
+ readOnlyView,
72
75
  ...rest
73
76
  }: Props,
74
77
  ref: Ref<HTMLInputElement>
@@ -106,13 +109,16 @@ const InputComponent: ForwardRefRenderFunction<HTMLInputElement, Props> = (
106
109
  success && wrapperClasses.push(classes["success"]);
107
110
 
108
111
  const icon = useDetermineStatusIcon({ success, error });
112
+ const readOnlyMode = rest["data-readonlyview"] as boolean;
109
113
 
110
114
  return (
111
115
  <div
112
116
  ref={inputWrapperRef}
113
117
  {...wrapperProps}
114
118
  style={{ ...style }}
119
+ data-readonlyview={readOnlyMode}
115
120
  className={`${classes["input-wrapper"]} ${wrapperClasses.join(" ")}`}
121
+ tabIndex={readOnlyMode ? 0 : -1}
116
122
  >
117
123
  {prefix && (
118
124
  <div data-prefix className={classes["prefix"]}>
@@ -122,6 +128,8 @@ const InputComponent: ForwardRefRenderFunction<HTMLInputElement, Props> = (
122
128
  <input
123
129
  {...rest}
124
130
  ref={ref}
131
+ aria-readonly={readOnlyMode}
132
+ readOnly={readOnlyMode}
125
133
  onFocus={event => {
126
134
  setFocus(true);
127
135
  onFocus?.(event);
@@ -136,6 +144,7 @@ const InputComponent: ForwardRefRenderFunction<HTMLInputElement, Props> = (
136
144
  disabled={disabled}
137
145
  className={inputClassNames.join(" ")}
138
146
  spellCheck={rest.spellCheck ?? false}
147
+ tabIndex={readOnlyMode ? -1 : 0}
139
148
  />
140
149
  {icon}
141
150
  {suffix && (
@@ -149,4 +158,4 @@ const InputComponent: ForwardRefRenderFunction<HTMLInputElement, Props> = (
149
158
  );
150
159
  };
151
160
 
152
- export const Input = React.forwardRef(InputComponent);
161
+ export const Input = withReadOnly(React.forwardRef(InputComponent));
@@ -143,3 +143,49 @@
143
143
  color: var(--disabled);
144
144
  pointer-events: none;
145
145
  }
146
+
147
+ [data-readonlyview="true"] {
148
+ & .radio-wrapper {
149
+ color: var(--read-only-text-color);
150
+
151
+ & span.input {
152
+ color: var(--read-only-text-color);
153
+ cursor: not-allowed;
154
+
155
+ &:before {
156
+ outline: 1px solid var(--read-only-border-color);
157
+ outline-offset: -1px;
158
+ border-radius: 50%;
159
+ }
160
+ }
161
+ }
162
+
163
+ label {
164
+ user-select: text;
165
+ }
166
+ }
167
+
168
+ input[type="radio"] {
169
+ &[data-readonlyview="true"] {
170
+ & ~ span.input {
171
+ color: var(--read-only-text-color);
172
+ cursor: not-allowed;
173
+
174
+ &:before {
175
+ outline: 1px solid var(--read-only-border-color);
176
+ outline-offset: -1px;
177
+ border-radius: 50%;
178
+ }
179
+ }
180
+
181
+ & ~ label {
182
+ user-select: text;
183
+ pointer-events: none;
184
+ }
185
+
186
+ & :focus-visible {
187
+ outline: 2px solid var(--color-focus);
188
+ outline-offset: 2px;
189
+ }
190
+ }
191
+ }
@@ -24,6 +24,7 @@ import {
24
24
  FormSelectorWrapper,
25
25
  Props as FormSelectorWrapperProps
26
26
  } from "../FormSelectorWrapper/FormSelectorWrapper";
27
+ import { withReadOnly } from "../../withReadOnly";
27
28
 
28
29
  export interface Props extends ComponentPropsWithRef<"input">, Omit<FormSelector, "success"> {
29
30
  children: string;
@@ -127,4 +128,4 @@ const RadioComponent: ForwardRefRenderFunction<HTMLInputElement, Props> = (
127
128
  );
128
129
  };
129
130
 
130
- export const Radio = React.forwardRef(RadioComponent);
131
+ export const Radio = withReadOnly(React.forwardRef(RadioComponent));
@@ -96,6 +96,10 @@ $listItemHeight: 2.5rem;
96
96
  }
97
97
  }
98
98
 
99
+ .list-wrapper-container {
100
+ position: relative;
101
+ }
102
+
99
103
  .list-wrapper {
100
104
  border-color: var(--light-grey-border);
101
105
  border-style: var(--input-border-style);
@@ -106,7 +110,6 @@ $listItemHeight: 2.5rem;
106
110
  box-shadow: 0px 8px 10px 0px #01053224;
107
111
  position: absolute;
108
112
  z-index: variables.$select-z-index;
109
- top: 44px;
110
113
  left: 0;
111
114
  width: 100%;
112
115
  overflow: auto;
@@ -255,3 +258,34 @@ $listItemHeight: 2.5rem;
255
258
  }
256
259
  }
257
260
  }
261
+
262
+ [data-readonlyview="true"] {
263
+ & .custom-select {
264
+ color: var(--read-only-text-color);
265
+ border-color: var(--read-only-border-color);
266
+ background-color: var(--color-white);
267
+
268
+ &.error,
269
+ &.success {
270
+ border-color: var(--read-only-border-color);
271
+ }
272
+
273
+ button {
274
+ pointer-events: none;
275
+ }
276
+ }
277
+
278
+ & .status {
279
+ .chevron-icon {
280
+ visibility: hidden;
281
+ }
282
+ }
283
+
284
+ &:hover:not(.disabled):not(.expanded):not(.error) {
285
+ .custom-select:not(:focus) {
286
+ color: var(--read-only-text-color);
287
+ border-color: var(--read-only-border-color);
288
+ background-color: var(--color-white);
289
+ }
290
+ }
291
+ }
@@ -18,25 +18,25 @@ import classes from "./MultiSelect.module.scss";
18
18
 
19
19
  import React, {
20
20
  ForwardRefRenderFunction,
21
- Fragment,
22
21
  ReactElement,
23
22
  createRef,
24
23
  useEffect,
25
24
  useRef,
26
25
  useState
27
26
  } from "react";
28
- import { useBodyClick } from "../../../../hooks/useBodyClick";
27
+ import { useClickOutside } from "../../../../hooks/useClickOutside";
29
28
  import { useDetermineStatusIcon } from "../../../../hooks/useDetermineStatusIcon";
30
29
  import readyclasses from "../../../../readyclasses.module.scss";
31
30
  import { escapeRegExp, filterProps, generateID } from "../../../../util/helper";
32
31
  import { Icon, Icons } from "../../../Icon/Icon";
33
- import { MultiSelectProps } from "../Select.interfaces";
32
+ import { MultiSelectProps, Position } from "../Select.interfaces";
34
33
  import { useAddNewBtn } from "../useAddNewBtn";
35
34
  import { useSelectPositionList } from "../useSelectPositionList";
36
35
  import { SelectButton } from "./SelectButton";
37
36
  import { Display, SelectedOptions } from "./SelectedOptions";
38
37
  import { useArrowNavigation } from "./useArrowNavigation";
39
38
  import { useSearch } from "./useSearch";
39
+ import { withReadOnly } from "../../../withReadOnly";
40
40
 
41
41
  const getOptionId = (multiSelectId: string, optionIndex: number) =>
42
42
  `${multiSelectId}_option${optionIndex}`;
@@ -62,6 +62,7 @@ const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSel
62
62
  onChange,
63
63
  addNew,
64
64
  search = { enabled: true, renderThreshold: 0, searchPlaceholder: "Search item" },
65
+ isReadOnlyView,
65
66
  ...rest
66
67
  }: MultiSelectProps,
67
68
  ref
@@ -135,6 +136,7 @@ const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSel
135
136
  };
136
137
 
137
138
  const customSelectButtonRef = useRef<HTMLButtonElement>(null);
139
+ const readOnlyView = !!rest["data-readonlyview"] || isReadOnlyView;
138
140
  const { onArrowNavigation } = useArrowNavigation({
139
141
  expanded,
140
142
  setExpanded,
@@ -144,7 +146,8 @@ const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSel
144
146
  addBtnRef,
145
147
  searchInputRef,
146
148
  customSelectButtonRef,
147
- onClose: resetSearchState
149
+ onClose: resetSearchState,
150
+ isReadOnlyView: readOnlyView
148
151
  });
149
152
 
150
153
  const { listPosition, opacity, optionsListMaxHeight, setListPosition, setOpacity } =
@@ -270,15 +273,16 @@ const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSel
270
273
  syncSelectedOption(value);
271
274
  }, [value]);
272
275
 
273
- useBodyClick(
274
- (event: MouseEvent) => !(event.target as Element).closest(".custom-select") && expanded,
275
- () => {
276
- setExpanded(false);
277
- setListPosition({ top: 0, bottom: "initial" });
278
- setOpacity(0);
279
- },
280
- expanded
281
- );
276
+ const myElementRef = useRef<HTMLDivElement>(null);
277
+
278
+ useClickOutside(myElementRef, () => {
279
+ if (!expanded) {
280
+ return;
281
+ }
282
+ setExpanded(false);
283
+ setListPosition(Position.Below);
284
+ setOpacity(0);
285
+ }, [expanded]);
282
286
 
283
287
  const additionalClasses = [];
284
288
  expanded && additionalClasses.push(classes.expanded);
@@ -288,13 +292,44 @@ const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSel
288
292
  success && additionalClasses.push(classes.success);
289
293
 
290
294
  const onSelectButtonClick = () => {
295
+ if (rest["data-readonlyview"] || isReadOnlyView) {
296
+ return;
297
+ }
291
298
  setExpanded(expanded => !expanded);
292
299
  setShouldClick(false);
293
300
  };
294
301
 
302
+ const optionsElement = (
303
+ <div className={`list-wrapper-container ${classes["list-wrapper-container"]}`}>
304
+ <div
305
+ ref={optionListReference}
306
+ className={`list-wrapper ${classes["list-wrapper"]}`}
307
+ style={{
308
+ display: expanded ? "block" : "none",
309
+ opacity: opacity,
310
+ maxHeight: optionsListMaxHeight.wrapper,
311
+ pointerEvents: expanded ? "auto" : "none",
312
+ top: listPosition === Position.Below ? "4px" : "initial",
313
+ bottom: listPosition === Position.Above ? "4px" : "initial"
314
+ }}
315
+ >
316
+ <ul
317
+ id={getListboxId(multiSelectId.current)}
318
+ className={addNewBtnOptionsContainerClassName}
319
+ role="listbox"
320
+ aria-multiselectable="true"
321
+ style={{ maxHeight: optionsListMaxHeight.list }}
322
+ >
323
+ {renderOptions()}
324
+ </ul>
325
+ {renderAddNew()}
326
+ </div>
327
+ </div>
328
+ );
329
+
295
330
  /** 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. */
296
331
  return (
297
- <Fragment>
332
+ <div ref={myElementRef}>
298
333
  <select
299
334
  {...filterProps(rest, /^data-/, false)}
300
335
  tabIndex={-1}
@@ -317,6 +352,7 @@ const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSel
317
352
  onKeyDown={onArrowNavigation}
318
353
  className={`custom-select ${classes.select} ${additionalClasses.join(" ")}`}
319
354
  >
355
+ {listPosition === Position.Above ? optionsElement : undefined}
320
356
  <div
321
357
  className={`${classes["custom-select"]} ${additionalClasses.join(" ")} `}
322
358
  style={{ display: "flex" }}
@@ -350,31 +386,10 @@ const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSel
350
386
  </div>
351
387
  <div className={classes["status"]}>{icon || renderChevronIcon()}</div>
352
388
  </div>
353
- <div
354
- ref={optionListReference}
355
- className={`list-wrapper ${classes["list-wrapper"]}`}
356
- style={{
357
- display: expanded ? "block" : "none",
358
- opacity: opacity,
359
- maxHeight: optionsListMaxHeight.wrapper,
360
- pointerEvents: expanded ? "auto" : "none",
361
- ...listPosition
362
- }}
363
- >
364
- <ul
365
- id={getListboxId(multiSelectId.current)}
366
- className={addNewBtnOptionsContainerClassName}
367
- role="listbox"
368
- aria-multiselectable="true"
369
- style={{ maxHeight: optionsListMaxHeight.list }}
370
- >
371
- {renderOptions()}
372
- </ul>
373
- {renderAddNew()}
374
- </div>
389
+ {listPosition === Position.Below ? optionsElement : undefined}
375
390
  </div>
376
- </Fragment>
391
+ </div>
377
392
  );
378
393
  };
379
394
 
380
- export const MultiSelect = React.forwardRef(MultiSelectComponent);
395
+ export const MultiSelect = withReadOnly(React.forwardRef(MultiSelectComponent));
@@ -29,3 +29,11 @@
29
29
  cursor: pointer;
30
30
  }
31
31
  }
32
+
33
+ [data-readonlyview="true"] {
34
+ .tag {
35
+ .remove-btn {
36
+ display: none;
37
+ }
38
+ }
39
+ }
@@ -24,6 +24,7 @@ interface UseArrowNavigationParams {
24
24
  searchInputRef: React.RefObject<HTMLInputElement>;
25
25
  customSelectButtonRef: React.RefObject<HTMLButtonElement>;
26
26
  onClose: () => void;
27
+ isReadOnlyView?: boolean;
27
28
  }
28
29
 
29
30
  /** @scope .*/
@@ -36,9 +37,13 @@ export const useArrowNavigation = ({
36
37
  addBtnRef,
37
38
  searchInputRef,
38
39
  customSelectButtonRef,
39
- onClose
40
+ onClose,
41
+ isReadOnlyView = false
40
42
  }: UseArrowNavigationParams) => {
41
43
  const onArrowNavigation = (event: React.KeyboardEvent) => {
44
+ if (isReadOnlyView) {
45
+ return;
46
+ }
42
47
  const codesToPreventDefault = ["ArrowDown", "ArrowUp", "Escape", "End", "Home"];
43
48
  const hasAddBtn = !!addBtnRef?.current;
44
49
  const childrenCountWithAddButton = childrenCount + (hasAddBtn ? 1 : 0);
@@ -0,0 +1,98 @@
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 from "react";
18
+ import { MultiOption } from "./MultiOption";
19
+
20
+ export interface UseMultiSelectArgs {
21
+ initialOptions?: string[];
22
+ allOptions?: string[];
23
+ setAllOptions?: (options: string[]) => void;
24
+ pickedOptions: string[];
25
+ setPickedOptions: (options: string[]) => void;
26
+ onAddNew?: (newOption: string) => void;
27
+ }
28
+
29
+ export interface UseMultiSelectResult {
30
+ handleOptionChange: (e: React.ChangeEvent<HTMLSelectElement>) => void;
31
+ onAddNew: (newValue: string) => void;
32
+ optionElements: React.JSX.Element[];
33
+ }
34
+
35
+ export type UseMultiSelect = (args: UseMultiSelectArgs) => UseMultiSelectResult;
36
+
37
+ export const useMultiSelect: UseMultiSelect = ({
38
+ initialOptions,
39
+ pickedOptions,
40
+ allOptions = pickedOptions,
41
+ setPickedOptions,
42
+ setAllOptions = setPickedOptions,
43
+ onAddNew
44
+ }) => {
45
+ const handleOptionChange = (e: React.ChangeEvent<HTMLSelectElement>) => {
46
+ const htmlOptions = e.target.options;
47
+
48
+ const newPickedOptions = [...pickedOptions];
49
+ Array.from(htmlOptions).forEach(option => {
50
+ const selected = option.selected;
51
+ const exists = pickedOptions.includes(option.value);
52
+
53
+ const shouldAdd = !exists && selected;
54
+ const shouldRemove = exists && !selected;
55
+
56
+ if (shouldAdd) {
57
+ newPickedOptions.push(option.value);
58
+ } else if (shouldRemove) {
59
+ const index = newPickedOptions.indexOf(option.value);
60
+ newPickedOptions.splice(index, 1);
61
+
62
+ if (initialOptions && !initialOptions.includes(option.value)) {
63
+ setAllOptions?.(allOptions.filter(value => value !== option.value));
64
+ }
65
+ }
66
+ });
67
+ setPickedOptions(newPickedOptions);
68
+ };
69
+
70
+ const onAddNewWrapper = (value: string) => {
71
+ if (value == undefined || value.length === 0) {
72
+ onAddNew?.("");
73
+ return;
74
+ }
75
+
76
+ const trimmedValue = value.trim();
77
+ if (trimmedValue.length === 0 || allOptions.includes(trimmedValue)) {
78
+ return;
79
+ }
80
+
81
+ setAllOptions?.([...allOptions, trimmedValue]);
82
+ setPickedOptions([...pickedOptions, trimmedValue]);
83
+
84
+ onAddNew?.(trimmedValue);
85
+ };
86
+
87
+ const optionElements = allOptions.map(option => (
88
+ <MultiOption key={option} value={option}>
89
+ {option}
90
+ </MultiOption>
91
+ ));
92
+
93
+ return {
94
+ handleOptionChange,
95
+ onAddNew: onAddNewWrapper,
96
+ optionElements
97
+ };
98
+ };
@@ -50,15 +50,16 @@ export interface SelectProps<V extends string | readonly string[] | undefined>
50
50
  noResultsLabel?: string;
51
51
  onChange?: (event: React.ChangeEvent<HTMLSelectElement>, child?: ReactElement) => void;
52
52
  addNew?: AddNewProps;
53
+ isReadOnlyView?: boolean;
53
54
  }
54
55
 
55
56
  export type SingleSelectProps = SelectProps<string>;
56
57
  export type MultiSelectProps = SelectProps<string[]>;
57
58
 
58
- export type Position = {
59
- top: number | `${number}rem` | "initial";
60
- bottom: number | `${number}rem` | "initial";
61
- };
59
+ export enum Position {
60
+ Above = "Above",
61
+ Below = "Below"
62
+ }
62
63
 
63
64
  export interface UseArrowNavigationParams {
64
65
  expanded: boolean;
@@ -72,6 +73,7 @@ export interface UseArrowNavigationParams {
72
73
  searchInputRef: React.RefObject<HTMLInputElement>;
73
74
  addBtnRef?: React.RefObject<HTMLButtonElement>;
74
75
  renderThreshold: number;
76
+ isReadOnlyView?: boolean;
75
77
  }
76
78
 
77
79
  export interface UseSelectPositionListParams {
@@ -88,6 +88,10 @@ $listItemHeight: 2.5rem;
88
88
  }
89
89
  }
90
90
 
91
+ .list-wrapper-container {
92
+ position: relative;
93
+ }
94
+
91
95
  .list-wrapper {
92
96
  border-color: var(--light-grey-border);
93
97
  border-style: var(--input-border-style);
@@ -96,7 +100,6 @@ $listItemHeight: 2.5rem;
96
100
  box-shadow: 0 8px 10px 0 #01053224;
97
101
  position: absolute;
98
102
  z-index: variables.$select-z-index;
99
- top: 44px;
100
103
  left: 0;
101
104
  width: 100%;
102
105
  overflow: auto;
@@ -157,6 +160,43 @@ $listItemHeight: 2.5rem;
157
160
  }
158
161
  }
159
162
  }
163
+
164
+ &[data-readonlyview="true"] {
165
+ user-select: text;
166
+ pointer-events: none;
167
+
168
+ & button[type="button"] {
169
+ background-color: var(--color-white);
170
+ color: var(--read-only-text-color);
171
+ border-color: var(--read-only-border-color);
172
+
173
+ & .selected {
174
+ color: var(--read-only-text-color);
175
+ }
176
+
177
+ &.error,
178
+ &.success {
179
+ border-color: var(--read-only-border-color);
180
+ color: var(--read-only-text-color);
181
+
182
+ & .status {
183
+ visibility: visible;
184
+ }
185
+ }
186
+
187
+ & .status {
188
+ & .chevron-icon {
189
+ visibility: hidden;
190
+ }
191
+ }
192
+ }
193
+ & .list-wrapper {
194
+ visibility: hidden;
195
+ & ul {
196
+ display: none;
197
+ }
198
+ }
199
+ }
160
200
  }
161
201
 
162
202
  .selected-option {
@@ -243,3 +283,22 @@ $listItemHeight: 2.5rem;
243
283
  }
244
284
  }
245
285
  }
286
+
287
+ [data-readonlyview="true"] {
288
+ [data-readonlyview] {
289
+ & button {
290
+ border-color: var(--read-only-border-color);
291
+
292
+ & .status {
293
+ & .chevron-icon {
294
+ visibility: hidden;
295
+ }
296
+ }
297
+
298
+ &.error {
299
+ border-color: var(--read-only-border-color);
300
+ color: var(--read-only-text-color);
301
+ }
302
+ }
303
+ }
304
+ }