@onewelcome/react-lib-components 8.4.0 → 8.6.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 (251) 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/Button/Spinner.cjs.js +1 -1
  4. package/dist/cjs/Button/Spinner.cjs.js.map +1 -1
  5. package/dist/cjs/Form/Checkbox/Checkbox.cjs.js +1 -1
  6. package/dist/cjs/Form/Checkbox/Checkbox.cjs.js.map +1 -1
  7. package/dist/cjs/Form/Checkbox/Checkbox.module.scss.cjs.js +1 -1
  8. package/dist/cjs/Form/Fieldset/Fieldset.cjs.js +1 -1
  9. package/dist/cjs/Form/Fieldset/Fieldset.cjs.js.map +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.scss.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.scss.cjs.js +1 -1
  16. package/dist/cjs/Form/FormHelperText/FormHelperText.module.scss.cjs.js +1 -1
  17. package/dist/cjs/Form/Input/Input.cjs.js +1 -1
  18. package/dist/cjs/Form/Input/Input.cjs.js.map +1 -1
  19. package/dist/cjs/Form/Input/Input.module.scss.cjs.js +1 -1
  20. package/dist/cjs/Form/Radio/Radio.cjs.js +1 -1
  21. package/dist/cjs/Form/Radio/Radio.cjs.js.map +1 -1
  22. package/dist/cjs/Form/Radio/Radio.module.scss.cjs.js +1 -1
  23. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.cjs.js +1 -1
  24. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.cjs.js.map +1 -1
  25. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.module.scss.cjs.js +1 -1
  26. package/dist/cjs/Form/Select/MultiSelect/SelectedOptions.module.scss.cjs.js +1 -1
  27. package/dist/cjs/Form/Select/MultiSelect/useArrowNavigation.cjs.js +1 -1
  28. package/dist/cjs/Form/Select/MultiSelect/useArrowNavigation.cjs.js.map +1 -1
  29. package/dist/cjs/Form/Select/MultiSelect/useMultiSelect.cjs.js +2 -0
  30. package/dist/cjs/Form/Select/MultiSelect/useMultiSelect.cjs.js.map +1 -0
  31. package/dist/cjs/Form/Select/Select.interfaces.cjs.js +2 -0
  32. package/dist/cjs/Form/Select/Select.interfaces.cjs.js.map +1 -0
  33. package/dist/cjs/Form/Select/SingleSelect/Select.cjs.js +1 -1
  34. package/dist/cjs/Form/Select/SingleSelect/Select.cjs.js.map +1 -1
  35. package/dist/cjs/Form/Select/SingleSelect/Select.module.scss.cjs.js +1 -1
  36. package/dist/cjs/Form/Select/SingleSelect/useArrowNavigation.cjs.js +1 -1
  37. package/dist/cjs/Form/Select/SingleSelect/useArrowNavigation.cjs.js.map +1 -1
  38. package/dist/cjs/Form/Select/useSelectPositionList.cjs.js +1 -1
  39. package/dist/cjs/Form/Select/useSelectPositionList.cjs.js.map +1 -1
  40. package/dist/cjs/Form/Textarea/Textarea.cjs.js +1 -1
  41. package/dist/cjs/Form/Textarea/Textarea.cjs.js.map +1 -1
  42. package/dist/cjs/Form/Textarea/Textarea.module.scss.cjs.js +1 -1
  43. package/dist/cjs/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.cjs.js +1 -1
  44. package/dist/cjs/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.cjs.js.map +1 -1
  45. package/dist/cjs/Form/Wrapper/InputWrapper/InputWrapper.cjs.js +1 -1
  46. package/dist/cjs/Form/Wrapper/InputWrapper/InputWrapper.cjs.js.map +1 -1
  47. package/dist/cjs/Form/Wrapper/InputWrapper/InputWrapper.module.scss.cjs.js +1 -1
  48. package/dist/cjs/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.cjs.js +1 -1
  49. package/dist/cjs/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.cjs.js.map +1 -1
  50. package/dist/cjs/Form/Wrapper/RadioWrapper/RadioWrapper.cjs.js +1 -1
  51. package/dist/cjs/Form/Wrapper/RadioWrapper/RadioWrapper.cjs.js.map +1 -1
  52. package/dist/cjs/Form/Wrapper/SelectWrapper/SelectWrapper.cjs.js +1 -1
  53. package/dist/cjs/Form/Wrapper/SelectWrapper/SelectWrapper.cjs.js.map +1 -1
  54. package/dist/cjs/Form/Wrapper/TextareaWrapper/TextareaWrapper.cjs.js +1 -1
  55. package/dist/cjs/Form/Wrapper/TextareaWrapper/TextareaWrapper.cjs.js.map +1 -1
  56. package/dist/cjs/Form/Wrapper/TextareaWrapper/TextareaWrapper.module.scss.cjs.js +1 -1
  57. package/dist/cjs/Form/Wrapper/Wrapper/Wrapper.module.scss.cjs.js +1 -1
  58. package/dist/cjs/Icon/Icon.cjs.js +1 -1
  59. package/dist/cjs/Icon/Icon.cjs.js.map +1 -1
  60. package/dist/cjs/Icon/Icon.module.scss.cjs.js +1 -1
  61. package/dist/cjs/Spinner/Spinner.cjs.js +2 -0
  62. package/dist/cjs/Spinner/Spinner.cjs.js.map +1 -0
  63. package/dist/cjs/Spinner/Spinner.module.scss.cjs.js +2 -0
  64. package/dist/cjs/Spinner/Spinner.module.scss.cjs.js.map +1 -0
  65. package/dist/cjs/_BaseStyling_/BaseStyling.cjs.js +1 -1
  66. package/dist/cjs/_BaseStyling_/BaseStyling.cjs.js.map +1 -1
  67. package/dist/cjs/src/components/Button/Spinner.d.ts +1 -1
  68. package/dist/cjs/src/components/Form/Checkbox/Checkbox.d.ts +1 -1
  69. package/dist/cjs/src/components/Form/Fieldset/Fieldset.d.ts +1 -1
  70. package/dist/cjs/src/components/Form/FileUpload/FileItem/FileItem.d.ts +1 -1
  71. package/dist/cjs/src/components/Form/FileUpload/FileUpload.d.ts +6 -1
  72. package/dist/cjs/src/components/Form/Input/Input.d.ts +2 -1
  73. package/dist/cjs/src/components/Form/Radio/Radio.d.ts +1 -1
  74. package/dist/cjs/src/components/Form/Select/MultiSelect/MultiSelect.d.ts +1 -1
  75. package/dist/cjs/src/components/Form/Select/MultiSelect/useArrowNavigation.d.ts +2 -1
  76. package/dist/cjs/src/components/Form/Select/MultiSelect/useMultiSelect.d.ts +16 -0
  77. package/dist/cjs/src/components/Form/Select/MultiSelect/useMultiSelect.test.d.ts +1 -0
  78. package/dist/cjs/src/components/Form/Select/Select.interfaces.d.ts +6 -4
  79. package/dist/cjs/src/components/Form/Select/SingleSelect/Select.d.ts +1 -1
  80. package/dist/cjs/src/components/Form/Select/SingleSelect/useArrowNavigation.d.ts +1 -1
  81. package/dist/cjs/src/components/Form/Select/useSelectPositionList.d.ts +2 -2
  82. package/dist/cjs/src/components/Form/Textarea/Textarea.d.ts +2 -1
  83. package/dist/cjs/src/components/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.d.ts +1 -1
  84. package/dist/cjs/src/components/Form/Wrapper/InputWrapper/InputWrapper.d.ts +1 -1
  85. package/dist/cjs/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.d.ts +1 -1
  86. package/dist/cjs/src/components/Form/Wrapper/RadioWrapper/RadioWrapper.d.ts +1 -1
  87. package/dist/cjs/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.d.ts +1 -1
  88. package/dist/cjs/src/components/Form/Wrapper/TextareaWrapper/TextareaWrapper.d.ts +2 -1
  89. package/dist/cjs/src/components/Icon/Icon.d.ts +3 -1
  90. package/dist/cjs/src/components/Spinner/Spinner.d.ts +6 -0
  91. package/dist/cjs/src/components/Spinner/Spinner.test.d.ts +1 -0
  92. package/dist/cjs/src/components/_BaseStyling_/BaseStyling.d.ts +2 -0
  93. package/dist/cjs/src/components/withReadOnly.d.ts +8 -0
  94. package/dist/cjs/src/components/withReadOnly.test.d.ts +1 -0
  95. package/dist/cjs/src/index.cjs.js +1 -1
  96. package/dist/cjs/src/index.d.ts +3 -0
  97. package/dist/cjs/src/util/unitTestUtils.d.ts +12 -0
  98. package/dist/cjs/withReadOnly.cjs.js +2 -0
  99. package/dist/cjs/withReadOnly.cjs.js.map +1 -0
  100. package/dist/esm/Button/BaseButton.esm.js +2 -2
  101. package/dist/esm/Button/BaseButton.esm.js.map +1 -1
  102. package/dist/esm/Button/Spinner.esm.js +2 -2
  103. package/dist/esm/Button/Spinner.esm.js.map +1 -1
  104. package/dist/esm/Form/Checkbox/Checkbox.esm.js +2 -1
  105. package/dist/esm/Form/Checkbox/Checkbox.esm.js.map +1 -1
  106. package/dist/esm/Form/Checkbox/Checkbox.module.scss.esm.js +1 -1
  107. package/dist/esm/Form/Fieldset/Fieldset.esm.js +2 -1
  108. package/dist/esm/Form/Fieldset/Fieldset.esm.js.map +1 -1
  109. package/dist/esm/Form/FileUpload/FileItem/FileItem.esm.js +10 -3
  110. package/dist/esm/Form/FileUpload/FileItem/FileItem.esm.js.map +1 -1
  111. package/dist/esm/Form/FileUpload/FileItem/FileItem.module.scss.esm.js +1 -1
  112. package/dist/esm/Form/FileUpload/FileUpload.esm.js +9 -6
  113. package/dist/esm/Form/FileUpload/FileUpload.esm.js.map +1 -1
  114. package/dist/esm/Form/FileUpload/FileUpload.module.scss.esm.js +2 -2
  115. package/dist/esm/Form/FormHelperText/FormHelperText.module.scss.esm.js +1 -1
  116. package/dist/esm/Form/Input/Input.esm.js +7 -5
  117. package/dist/esm/Form/Input/Input.esm.js.map +1 -1
  118. package/dist/esm/Form/Input/Input.module.scss.esm.js +2 -2
  119. package/dist/esm/Form/Radio/Radio.esm.js +2 -1
  120. package/dist/esm/Form/Radio/Radio.esm.js.map +1 -1
  121. package/dist/esm/Form/Radio/Radio.module.scss.esm.js +1 -1
  122. package/dist/esm/Form/Select/MultiSelect/MultiSelect.esm.js +24 -13
  123. package/dist/esm/Form/Select/MultiSelect/MultiSelect.esm.js.map +1 -1
  124. package/dist/esm/Form/Select/MultiSelect/MultiSelect.module.scss.esm.js +2 -2
  125. package/dist/esm/Form/Select/MultiSelect/SelectedOptions.module.scss.esm.js +1 -1
  126. package/dist/esm/Form/Select/MultiSelect/useArrowNavigation.esm.js +4 -1
  127. package/dist/esm/Form/Select/MultiSelect/useArrowNavigation.esm.js.map +1 -1
  128. package/dist/esm/Form/Select/MultiSelect/useMultiSelect.esm.js +63 -0
  129. package/dist/esm/Form/Select/MultiSelect/useMultiSelect.esm.js.map +1 -0
  130. package/dist/esm/Form/Select/Select.interfaces.esm.js +23 -0
  131. package/dist/esm/Form/Select/Select.interfaces.esm.js.map +1 -0
  132. package/dist/esm/Form/Select/SingleSelect/Select.esm.js +20 -15
  133. package/dist/esm/Form/Select/SingleSelect/Select.esm.js.map +1 -1
  134. package/dist/esm/Form/Select/SingleSelect/Select.module.scss.esm.js +2 -2
  135. package/dist/esm/Form/Select/SingleSelect/useArrowNavigation.esm.js +4 -1
  136. package/dist/esm/Form/Select/SingleSelect/useArrowNavigation.esm.js.map +1 -1
  137. package/dist/esm/Form/Select/useSelectPositionList.esm.js +5 -4
  138. package/dist/esm/Form/Select/useSelectPositionList.esm.js.map +1 -1
  139. package/dist/esm/Form/Textarea/Textarea.esm.js +12 -5
  140. package/dist/esm/Form/Textarea/Textarea.esm.js.map +1 -1
  141. package/dist/esm/Form/Textarea/Textarea.module.scss.esm.js +1 -1
  142. package/dist/esm/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.esm.js +4 -1
  143. package/dist/esm/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.esm.js.map +1 -1
  144. package/dist/esm/Form/Wrapper/InputWrapper/InputWrapper.esm.js +4 -2
  145. package/dist/esm/Form/Wrapper/InputWrapper/InputWrapper.esm.js.map +1 -1
  146. package/dist/esm/Form/Wrapper/InputWrapper/InputWrapper.module.scss.esm.js +1 -1
  147. package/dist/esm/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.esm.js +3 -2
  148. package/dist/esm/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.esm.js.map +1 -1
  149. package/dist/esm/Form/Wrapper/RadioWrapper/RadioWrapper.esm.js +17 -10
  150. package/dist/esm/Form/Wrapper/RadioWrapper/RadioWrapper.esm.js.map +1 -1
  151. package/dist/esm/Form/Wrapper/SelectWrapper/SelectWrapper.esm.js +5 -2
  152. package/dist/esm/Form/Wrapper/SelectWrapper/SelectWrapper.esm.js.map +1 -1
  153. package/dist/esm/Form/Wrapper/TextareaWrapper/TextareaWrapper.esm.js +20 -10
  154. package/dist/esm/Form/Wrapper/TextareaWrapper/TextareaWrapper.esm.js.map +1 -1
  155. package/dist/esm/Form/Wrapper/TextareaWrapper/TextareaWrapper.module.scss.esm.js +2 -2
  156. package/dist/esm/Form/Wrapper/Wrapper/Wrapper.module.scss.esm.js +1 -1
  157. package/dist/esm/Icon/Icon.esm.js +2 -0
  158. package/dist/esm/Icon/Icon.esm.js.map +1 -1
  159. package/dist/esm/Icon/Icon.module.scss.esm.js +2 -2
  160. package/dist/esm/Spinner/Spinner.esm.js +29 -0
  161. package/dist/esm/Spinner/Spinner.esm.js.map +1 -0
  162. package/dist/esm/Spinner/Spinner.module.scss.esm.js +8 -0
  163. package/dist/esm/Spinner/Spinner.module.scss.esm.js.map +1 -0
  164. package/dist/esm/_BaseStyling_/BaseStyling.esm.js +2 -0
  165. package/dist/esm/_BaseStyling_/BaseStyling.esm.js.map +1 -1
  166. package/dist/esm/src/components/Button/Spinner.d.ts +1 -1
  167. package/dist/esm/src/components/Form/Checkbox/Checkbox.d.ts +1 -1
  168. package/dist/esm/src/components/Form/Fieldset/Fieldset.d.ts +1 -1
  169. package/dist/esm/src/components/Form/FileUpload/FileItem/FileItem.d.ts +1 -1
  170. package/dist/esm/src/components/Form/FileUpload/FileUpload.d.ts +6 -1
  171. package/dist/esm/src/components/Form/Input/Input.d.ts +2 -1
  172. package/dist/esm/src/components/Form/Radio/Radio.d.ts +1 -1
  173. package/dist/esm/src/components/Form/Select/MultiSelect/MultiSelect.d.ts +1 -1
  174. package/dist/esm/src/components/Form/Select/MultiSelect/useArrowNavigation.d.ts +2 -1
  175. package/dist/esm/src/components/Form/Select/MultiSelect/useMultiSelect.d.ts +16 -0
  176. package/dist/esm/src/components/Form/Select/MultiSelect/useMultiSelect.test.d.ts +1 -0
  177. package/dist/esm/src/components/Form/Select/Select.interfaces.d.ts +6 -4
  178. package/dist/esm/src/components/Form/Select/SingleSelect/Select.d.ts +1 -1
  179. package/dist/esm/src/components/Form/Select/SingleSelect/useArrowNavigation.d.ts +1 -1
  180. package/dist/esm/src/components/Form/Select/useSelectPositionList.d.ts +2 -2
  181. package/dist/esm/src/components/Form/Textarea/Textarea.d.ts +2 -1
  182. package/dist/esm/src/components/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.d.ts +1 -1
  183. package/dist/esm/src/components/Form/Wrapper/InputWrapper/InputWrapper.d.ts +1 -1
  184. package/dist/esm/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.d.ts +1 -1
  185. package/dist/esm/src/components/Form/Wrapper/RadioWrapper/RadioWrapper.d.ts +1 -1
  186. package/dist/esm/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.d.ts +1 -1
  187. package/dist/esm/src/components/Form/Wrapper/TextareaWrapper/TextareaWrapper.d.ts +2 -1
  188. package/dist/esm/src/components/Icon/Icon.d.ts +3 -1
  189. package/dist/esm/src/components/Spinner/Spinner.d.ts +6 -0
  190. package/dist/esm/src/components/Spinner/Spinner.test.d.ts +1 -0
  191. package/dist/esm/src/components/_BaseStyling_/BaseStyling.d.ts +2 -0
  192. package/dist/esm/src/components/withReadOnly.d.ts +8 -0
  193. package/dist/esm/src/components/withReadOnly.test.d.ts +1 -0
  194. package/dist/esm/src/index.d.ts +3 -0
  195. package/dist/esm/src/index.esm.js +2 -0
  196. package/dist/esm/src/index.esm.js.map +1 -1
  197. package/dist/esm/src/util/unitTestUtils.d.ts +12 -0
  198. package/dist/esm/withReadOnly.esm.js +70 -0
  199. package/dist/esm/withReadOnly.esm.js.map +1 -0
  200. package/dist/lib/style-inject.js +48 -41
  201. package/dist/lib/style-inject.js.map +1 -1
  202. package/package.json +16 -16
  203. package/src/components/Button/BaseButton.tsx +2 -2
  204. package/src/components/Button/Spinner.tsx +1 -1
  205. package/src/components/Form/Checkbox/Checkbox.module.scss +70 -0
  206. package/src/components/Form/Checkbox/Checkbox.tsx +2 -1
  207. package/src/components/Form/Fieldset/Fieldset.tsx +2 -1
  208. package/src/components/Form/FileUpload/FileItem/FileItem.module.scss +16 -0
  209. package/src/components/Form/FileUpload/FileItem/FileItem.tsx +17 -3
  210. package/src/components/Form/FileUpload/FileUpload.module.scss +57 -1
  211. package/src/components/Form/FileUpload/FileUpload.tsx +16 -6
  212. package/src/components/Form/FormHelperText/FormHelperText.module.scss +4 -0
  213. package/src/components/Form/Input/Input.module.scss +26 -0
  214. package/src/components/Form/Input/Input.tsx +10 -1
  215. package/src/components/Form/Radio/Radio.module.scss +46 -0
  216. package/src/components/Form/Radio/Radio.tsx +2 -1
  217. package/src/components/Form/Select/MultiSelect/MultiSelect.module.scss +35 -1
  218. package/src/components/Form/Select/MultiSelect/MultiSelect.tsx +41 -26
  219. package/src/components/Form/Select/MultiSelect/SelectedOptions.module.scss +8 -0
  220. package/src/components/Form/Select/MultiSelect/useArrowNavigation.ts +6 -1
  221. package/src/components/Form/Select/MultiSelect/useMultiSelect.tsx +98 -0
  222. package/src/components/Form/Select/Select.interfaces.ts +6 -4
  223. package/src/components/Form/Select/SingleSelect/Select.module.scss +60 -1
  224. package/src/components/Form/Select/SingleSelect/Select.tsx +30 -25
  225. package/src/components/Form/Select/SingleSelect/useArrowNavigation.ts +6 -1
  226. package/src/components/Form/Select/useSelectPositionList.ts +4 -4
  227. package/src/components/Form/Textarea/Textarea.module.scss +24 -0
  228. package/src/components/Form/Textarea/Textarea.tsx +24 -3
  229. package/src/components/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.tsx +4 -1
  230. package/src/components/Form/Wrapper/InputWrapper/InputWrapper.module.scss +14 -0
  231. package/src/components/Form/Wrapper/InputWrapper/InputWrapper.tsx +4 -2
  232. package/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.tsx +3 -1
  233. package/src/components/Form/Wrapper/RadioWrapper/RadioWrapper.tsx +17 -12
  234. package/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.tsx +6 -1
  235. package/src/components/Form/Wrapper/TextareaWrapper/TextareaWrapper.module.scss +43 -0
  236. package/src/components/Form/Wrapper/TextareaWrapper/TextareaWrapper.tsx +45 -20
  237. package/src/components/Form/Wrapper/Wrapper/Wrapper.module.scss +6 -0
  238. package/src/components/Icon/Icon.module.scss +8 -1
  239. package/src/components/Icon/Icon.tsx +3 -1
  240. package/src/components/Spinner/Spinner.module.scss +33 -0
  241. package/src/components/Spinner/Spinner.tsx +61 -0
  242. package/src/components/_BaseStyling_/BaseStyling.tsx +4 -0
  243. package/src/components/withReadOnly.tsx +112 -0
  244. package/src/font/icomoon.eot +0 -0
  245. package/src/font/icomoon.svg +2 -0
  246. package/src/font/icomoon.ttf +0 -0
  247. package/src/font/icomoon.woff +0 -0
  248. package/src/font/selection.json +1 -1
  249. package/src/index.ts +3 -0
  250. package/src/mixins.module.scss +6 -0
  251. package/src/util/unitTestUtils.ts +32 -0
@@ -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
+ }
@@ -30,13 +30,14 @@ import { useDetermineStatusIcon } from "../../../../hooks/useDetermineStatusIcon
30
30
  import readyclasses from "../../../../readyclasses.module.scss";
31
31
  import { escapeRegExp, filterProps, generateID } from "../../../../util/helper";
32
32
  import { Icon, Icons } from "../../../Icon/Icon";
33
- import { MultiSelectProps } from "../Select.interfaces";
33
+ import { MultiSelectProps, Position } from "../Select.interfaces";
34
34
  import { useAddNewBtn } from "../useAddNewBtn";
35
35
  import { useSelectPositionList } from "../useSelectPositionList";
36
36
  import { SelectButton } from "./SelectButton";
37
37
  import { Display, SelectedOptions } from "./SelectedOptions";
38
38
  import { useArrowNavigation } from "./useArrowNavigation";
39
39
  import { useSearch } from "./useSearch";
40
+ import { withReadOnly } from "../../../withReadOnly";
40
41
 
41
42
  const getOptionId = (multiSelectId: string, optionIndex: number) =>
42
43
  `${multiSelectId}_option${optionIndex}`;
@@ -62,6 +63,7 @@ const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSel
62
63
  onChange,
63
64
  addNew,
64
65
  search = { enabled: true, renderThreshold: 0, searchPlaceholder: "Search item" },
66
+ isReadOnlyView,
65
67
  ...rest
66
68
  }: MultiSelectProps,
67
69
  ref
@@ -135,6 +137,7 @@ const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSel
135
137
  };
136
138
 
137
139
  const customSelectButtonRef = useRef<HTMLButtonElement>(null);
140
+ const readOnlyView = !!rest["data-readonlyview"] || isReadOnlyView;
138
141
  const { onArrowNavigation } = useArrowNavigation({
139
142
  expanded,
140
143
  setExpanded,
@@ -144,7 +147,8 @@ const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSel
144
147
  addBtnRef,
145
148
  searchInputRef,
146
149
  customSelectButtonRef,
147
- onClose: resetSearchState
150
+ onClose: resetSearchState,
151
+ isReadOnlyView: readOnlyView
148
152
  });
149
153
 
150
154
  const { listPosition, opacity, optionsListMaxHeight, setListPosition, setOpacity } =
@@ -274,7 +278,7 @@ const MultiSelectComponent: ForwardRefRenderFunction<HTMLSelectElement, MultiSel
274
278
  (event: MouseEvent) => !(event.target as Element).closest(".custom-select") && expanded,
275
279
  () => {
276
280
  setExpanded(false);
277
- setListPosition({ top: 0, bottom: "initial" });
281
+ setListPosition(Position.Below);
278
282
  setOpacity(0);
279
283
  },
280
284
  expanded
@@ -288,10 +292,41 @@ 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
332
  <Fragment>
@@ -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
391
  </Fragment>
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
+ }
@@ -30,11 +30,12 @@ import { useDetermineStatusIcon } from "../../../../hooks/useDetermineStatusIcon
30
30
  import readyclasses from "../../../../readyclasses.module.scss";
31
31
  import { filterProps } from "../../../../util/helper";
32
32
  import { Icon, Icons } from "../../../Icon/Icon";
33
- import { SingleSelectProps } from "../Select.interfaces";
33
+ import { Position, SingleSelectProps } from "../Select.interfaces";
34
34
  import { useSelectPositionList } from "../useSelectPositionList";
35
35
  import { useAddNewBtn } from "../useAddNewBtn";
36
36
  import { useSearch } from "./useSearch";
37
37
  import { useArrowNavigation } from "./useArrowNavigation";
38
+ import { withReadOnly } from "../../../withReadOnly";
38
39
 
39
40
  const SelectComponent: ForwardRefRenderFunction<HTMLSelectElement, SingleSelectProps> = (
40
41
  {
@@ -54,6 +55,7 @@ const SelectComponent: ForwardRefRenderFunction<HTMLSelectElement, SingleSelectP
54
55
  onChange,
55
56
  addNew,
56
57
  search,
58
+ isReadOnlyView,
57
59
  ...rest
58
60
  }: SingleSelectProps,
59
61
  ref
@@ -113,7 +115,8 @@ const SelectComponent: ForwardRefRenderFunction<HTMLSelectElement, SingleSelectP
113
115
  setShouldClick,
114
116
  searchInputRef,
115
117
  addBtnRef,
116
- renderThreshold: searchThreshold
118
+ renderThreshold: searchThreshold,
119
+ isReadOnlyView: isReadOnlyView || !!rest["data-readonlyview"]
117
120
  });
118
121
 
119
122
  const { listPosition, opacity, optionsListMaxHeight, setListPosition, setOpacity } =
@@ -205,7 +208,7 @@ const SelectComponent: ForwardRefRenderFunction<HTMLSelectElement, SingleSelectP
205
208
  (event: MouseEvent) => !(event.target as Element).closest(".custom-select") && expanded,
206
209
  () => {
207
210
  setExpanded(false);
208
- setListPosition({ top: 0, bottom: "initial" });
211
+ setListPosition(Position.Below);
209
212
  setOpacity(0);
210
213
  },
211
214
  expanded
@@ -245,13 +248,13 @@ const SelectComponent: ForwardRefRenderFunction<HTMLSelectElement, SingleSelectP
245
248
  <button
246
249
  {...selectButtonProps}
247
250
  onClick={() => {
248
- setExpanded(!expanded);
251
+ setExpanded(isReadOnlyView || rest["data-readonlyview"] ? false : !expanded);
249
252
  }}
250
253
  ref={customSelectButtonRef}
251
254
  type="button"
252
255
  name={name}
253
256
  className={`${classes["custom-select"]} ${additionalClasses.join(" ")} `}
254
- style={{ display: expanded && searchVisible ? "none" : "initial" }}
257
+ style={{ display: expanded && searchVisible ? "none" : "block" }}
255
258
  disabled={disabled}
256
259
  aria-disabled={disabled}
257
260
  aria-invalid={error}
@@ -266,29 +269,31 @@ const SelectComponent: ForwardRefRenderFunction<HTMLSelectElement, SingleSelectP
266
269
  </div>
267
270
  <div className={classes["status"]}>{icon || renderChevronIcon()}</div>
268
271
  </button>
269
-
270
- <div
271
- ref={optionListReference}
272
- className={`list-wrapper ${classes["list-wrapper"]}`}
273
- style={{
274
- display: expanded ? "block" : "none",
275
- opacity: opacity,
276
- maxHeight: optionsListMaxHeight.wrapper,
277
- pointerEvents: expanded ? "auto" : "none",
278
- ...listPosition
279
- }}
280
- >
281
- <ul
282
- className={addNewBtnOptionsContainerClassName}
283
- role="listbox"
284
- style={{ maxHeight: optionsListMaxHeight.list }}
272
+ <div className="list-wrapper-container">
273
+ <div
274
+ ref={optionListReference}
275
+ className={`list-wrapper ${classes["list-wrapper"]}`}
276
+ style={{
277
+ display: expanded ? "block" : "none",
278
+ opacity: opacity,
279
+ maxHeight: optionsListMaxHeight.wrapper,
280
+ pointerEvents: expanded ? "auto" : "none",
281
+ bottom: listPosition === Position.Above ? "2.85rem" : "initial",
282
+ marginTop: "4px"
283
+ }}
285
284
  >
286
- {renderOptions()}
287
- </ul>
288
- {renderAddNew()}
285
+ <ul
286
+ className={addNewBtnOptionsContainerClassName}
287
+ role="listbox"
288
+ style={{ maxHeight: optionsListMaxHeight.list }}
289
+ >
290
+ {renderOptions()}
291
+ </ul>
292
+ {renderAddNew()}
293
+ </div>
289
294
  </div>
290
295
  </div>
291
296
  </Fragment>
292
297
  );
293
298
  };
294
- export const Select = React.forwardRef(SelectComponent);
299
+ export const Select = withReadOnly(React.forwardRef(SelectComponent));
@@ -28,7 +28,8 @@ export const useArrowNavigation = ({
28
28
  setShouldClick,
29
29
  searchInputRef,
30
30
  addBtnRef,
31
- renderThreshold
31
+ renderThreshold,
32
+ isReadOnlyView
32
33
  }: UseArrowNavigationParams) => {
33
34
  const onArrowNavigation = (event: React.KeyboardEvent) => {
34
35
  const codesToPreventDefault = [
@@ -53,6 +54,10 @@ export const useArrowNavigation = ({
53
54
 
54
55
  const isAddBtnFocused = addBtnRef?.current === document.activeElement;
55
56
 
57
+ if (isReadOnlyView) {
58
+ return;
59
+ }
60
+
56
61
  if (expanded) {
57
62
  codesToPreventDefault.push("Tab");
58
63
  }
@@ -32,7 +32,7 @@ export const useSelectPositionList = ({
32
32
  list: undefined
33
33
  });
34
34
  const [opacity, setOpacity] = useState(0); // We set opacity because otherwise if we calculate the max height you see the list full height for a split second and then it shortens.
35
- const [listPosition, setListPosition] = useState<Partial<Position>>({});
35
+ const [listPosition, setListPosition] = useState<Position>(Position.Below);
36
36
 
37
37
  useEffect(() => {
38
38
  rePositionList();
@@ -52,11 +52,11 @@ export const useSelectPositionList = ({
52
52
  window.innerHeight - containerReference.current.getBoundingClientRect().top;
53
53
 
54
54
  // Set position as if there's more space on the bottom
55
- let position: Position = { top: "2.75rem", bottom: "initial" };
55
+ let position = Position.Below;
56
56
 
57
57
  // Set the position of the select
58
58
  if (spaceOnTopOfSelect > spaceOnBottomOfSelect) {
59
- position = { top: "initial", bottom: "2.75rem" };
59
+ position = Position.Above;
60
60
  }
61
61
 
62
62
  setListPosition(position);
@@ -72,7 +72,7 @@ export const useSelectPositionList = ({
72
72
  ? addBtnRef.current.getBoundingClientRect().height +
73
73
  parseInt(getComputedStyle(addBtnRef.current).marginBottom)
74
74
  : 0;
75
- const transformOrigin = position.top !== "initial" ? "top" : "bottom";
75
+ const transformOrigin = position === Position.Below ? "top" : "bottom";
76
76
 
77
77
  if (!containerReference.current) {
78
78
  console.error(