@onewelcome/react-lib-components 8.5.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 (208) hide show
  1. package/dist/cjs/Form/Checkbox/Checkbox.cjs.js +1 -1
  2. package/dist/cjs/Form/Checkbox/Checkbox.cjs.js.map +1 -1
  3. package/dist/cjs/Form/Checkbox/Checkbox.module.scss.cjs.js +1 -1
  4. package/dist/cjs/Form/Fieldset/Fieldset.cjs.js +1 -1
  5. package/dist/cjs/Form/Fieldset/Fieldset.cjs.js.map +1 -1
  6. package/dist/cjs/Form/FileUpload/FileItem/FileItem.cjs.js +1 -1
  7. package/dist/cjs/Form/FileUpload/FileItem/FileItem.cjs.js.map +1 -1
  8. package/dist/cjs/Form/FileUpload/FileItem/FileItem.module.scss.cjs.js +1 -1
  9. package/dist/cjs/Form/FileUpload/FileUpload.cjs.js +1 -1
  10. package/dist/cjs/Form/FileUpload/FileUpload.cjs.js.map +1 -1
  11. package/dist/cjs/Form/FileUpload/FileUpload.module.scss.cjs.js +1 -1
  12. package/dist/cjs/Form/FormHelperText/FormHelperText.module.scss.cjs.js +1 -1
  13. package/dist/cjs/Form/Input/Input.cjs.js +1 -1
  14. package/dist/cjs/Form/Input/Input.cjs.js.map +1 -1
  15. package/dist/cjs/Form/Input/Input.module.scss.cjs.js +1 -1
  16. package/dist/cjs/Form/Radio/Radio.cjs.js +1 -1
  17. package/dist/cjs/Form/Radio/Radio.cjs.js.map +1 -1
  18. package/dist/cjs/Form/Radio/Radio.module.scss.cjs.js +1 -1
  19. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.cjs.js +1 -1
  20. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.cjs.js.map +1 -1
  21. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.module.scss.cjs.js +1 -1
  22. package/dist/cjs/Form/Select/MultiSelect/SelectedOptions.module.scss.cjs.js +1 -1
  23. package/dist/cjs/Form/Select/MultiSelect/useArrowNavigation.cjs.js +1 -1
  24. package/dist/cjs/Form/Select/MultiSelect/useArrowNavigation.cjs.js.map +1 -1
  25. package/dist/cjs/Form/Select/MultiSelect/useMultiSelect.cjs.js +2 -0
  26. package/dist/cjs/Form/Select/MultiSelect/useMultiSelect.cjs.js.map +1 -0
  27. package/dist/cjs/Form/Select/Select.interfaces.cjs.js +2 -0
  28. package/dist/cjs/Form/Select/Select.interfaces.cjs.js.map +1 -0
  29. package/dist/cjs/Form/Select/SingleSelect/Select.cjs.js +1 -1
  30. package/dist/cjs/Form/Select/SingleSelect/Select.cjs.js.map +1 -1
  31. package/dist/cjs/Form/Select/SingleSelect/Select.module.scss.cjs.js +1 -1
  32. package/dist/cjs/Form/Select/SingleSelect/useArrowNavigation.cjs.js +1 -1
  33. package/dist/cjs/Form/Select/SingleSelect/useArrowNavigation.cjs.js.map +1 -1
  34. package/dist/cjs/Form/Select/useSelectPositionList.cjs.js +1 -1
  35. package/dist/cjs/Form/Select/useSelectPositionList.cjs.js.map +1 -1
  36. package/dist/cjs/Form/Textarea/Textarea.cjs.js +1 -1
  37. package/dist/cjs/Form/Textarea/Textarea.cjs.js.map +1 -1
  38. package/dist/cjs/Form/Textarea/Textarea.module.scss.cjs.js +1 -1
  39. package/dist/cjs/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.cjs.js +1 -1
  40. package/dist/cjs/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.cjs.js.map +1 -1
  41. package/dist/cjs/Form/Wrapper/InputWrapper/InputWrapper.cjs.js +1 -1
  42. package/dist/cjs/Form/Wrapper/InputWrapper/InputWrapper.cjs.js.map +1 -1
  43. package/dist/cjs/Form/Wrapper/InputWrapper/InputWrapper.module.scss.cjs.js +1 -1
  44. package/dist/cjs/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.cjs.js +1 -1
  45. package/dist/cjs/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.cjs.js.map +1 -1
  46. package/dist/cjs/Form/Wrapper/RadioWrapper/RadioWrapper.cjs.js +1 -1
  47. package/dist/cjs/Form/Wrapper/RadioWrapper/RadioWrapper.cjs.js.map +1 -1
  48. package/dist/cjs/Form/Wrapper/SelectWrapper/SelectWrapper.cjs.js +1 -1
  49. package/dist/cjs/Form/Wrapper/SelectWrapper/SelectWrapper.cjs.js.map +1 -1
  50. package/dist/cjs/Form/Wrapper/TextareaWrapper/TextareaWrapper.cjs.js +1 -1
  51. package/dist/cjs/Form/Wrapper/TextareaWrapper/TextareaWrapper.cjs.js.map +1 -1
  52. package/dist/cjs/Form/Wrapper/TextareaWrapper/TextareaWrapper.module.scss.cjs.js +1 -1
  53. package/dist/cjs/Form/Wrapper/Wrapper/Wrapper.module.scss.cjs.js +1 -1
  54. package/dist/cjs/_BaseStyling_/BaseStyling.cjs.js +1 -1
  55. package/dist/cjs/_BaseStyling_/BaseStyling.cjs.js.map +1 -1
  56. package/dist/cjs/src/components/Form/Checkbox/Checkbox.d.ts +1 -1
  57. package/dist/cjs/src/components/Form/Fieldset/Fieldset.d.ts +1 -1
  58. package/dist/cjs/src/components/Form/FileUpload/FileItem/FileItem.d.ts +1 -1
  59. package/dist/cjs/src/components/Form/FileUpload/FileUpload.d.ts +6 -1
  60. package/dist/cjs/src/components/Form/Input/Input.d.ts +2 -1
  61. package/dist/cjs/src/components/Form/Radio/Radio.d.ts +1 -1
  62. package/dist/cjs/src/components/Form/Select/MultiSelect/MultiSelect.d.ts +1 -1
  63. package/dist/cjs/src/components/Form/Select/MultiSelect/useArrowNavigation.d.ts +2 -1
  64. package/dist/cjs/src/components/Form/Select/MultiSelect/useMultiSelect.d.ts +16 -0
  65. package/dist/cjs/src/components/Form/Select/MultiSelect/useMultiSelect.test.d.ts +1 -0
  66. package/dist/cjs/src/components/Form/Select/Select.interfaces.d.ts +6 -4
  67. package/dist/cjs/src/components/Form/Select/SingleSelect/Select.d.ts +1 -1
  68. package/dist/cjs/src/components/Form/Select/SingleSelect/useArrowNavigation.d.ts +1 -1
  69. package/dist/cjs/src/components/Form/Select/useSelectPositionList.d.ts +2 -2
  70. package/dist/cjs/src/components/Form/Textarea/Textarea.d.ts +2 -1
  71. package/dist/cjs/src/components/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.d.ts +1 -1
  72. package/dist/cjs/src/components/Form/Wrapper/InputWrapper/InputWrapper.d.ts +1 -1
  73. package/dist/cjs/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.d.ts +1 -1
  74. package/dist/cjs/src/components/Form/Wrapper/RadioWrapper/RadioWrapper.d.ts +1 -1
  75. package/dist/cjs/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.d.ts +1 -1
  76. package/dist/cjs/src/components/Form/Wrapper/TextareaWrapper/TextareaWrapper.d.ts +2 -1
  77. package/dist/cjs/src/components/_BaseStyling_/BaseStyling.d.ts +2 -0
  78. package/dist/cjs/src/components/withReadOnly.d.ts +8 -0
  79. package/dist/cjs/src/components/withReadOnly.test.d.ts +1 -0
  80. package/dist/cjs/src/index.cjs.js +1 -1
  81. package/dist/cjs/src/index.d.ts +1 -0
  82. package/dist/cjs/src/util/unitTestUtils.d.ts +12 -0
  83. package/dist/cjs/withReadOnly.cjs.js +2 -0
  84. package/dist/cjs/withReadOnly.cjs.js.map +1 -0
  85. package/dist/esm/Form/Checkbox/Checkbox.esm.js +2 -1
  86. package/dist/esm/Form/Checkbox/Checkbox.esm.js.map +1 -1
  87. package/dist/esm/Form/Checkbox/Checkbox.module.scss.esm.js +1 -1
  88. package/dist/esm/Form/Fieldset/Fieldset.esm.js +2 -1
  89. package/dist/esm/Form/Fieldset/Fieldset.esm.js.map +1 -1
  90. package/dist/esm/Form/FileUpload/FileItem/FileItem.esm.js +10 -3
  91. package/dist/esm/Form/FileUpload/FileItem/FileItem.esm.js.map +1 -1
  92. package/dist/esm/Form/FileUpload/FileItem/FileItem.module.scss.esm.js +1 -1
  93. package/dist/esm/Form/FileUpload/FileUpload.esm.js +9 -6
  94. package/dist/esm/Form/FileUpload/FileUpload.esm.js.map +1 -1
  95. package/dist/esm/Form/FileUpload/FileUpload.module.scss.esm.js +2 -2
  96. package/dist/esm/Form/FormHelperText/FormHelperText.module.scss.esm.js +1 -1
  97. package/dist/esm/Form/Input/Input.esm.js +7 -5
  98. package/dist/esm/Form/Input/Input.esm.js.map +1 -1
  99. package/dist/esm/Form/Input/Input.module.scss.esm.js +2 -2
  100. package/dist/esm/Form/Radio/Radio.esm.js +2 -1
  101. package/dist/esm/Form/Radio/Radio.esm.js.map +1 -1
  102. package/dist/esm/Form/Radio/Radio.module.scss.esm.js +1 -1
  103. package/dist/esm/Form/Select/MultiSelect/MultiSelect.esm.js +24 -13
  104. package/dist/esm/Form/Select/MultiSelect/MultiSelect.esm.js.map +1 -1
  105. package/dist/esm/Form/Select/MultiSelect/MultiSelect.module.scss.esm.js +2 -2
  106. package/dist/esm/Form/Select/MultiSelect/SelectedOptions.module.scss.esm.js +1 -1
  107. package/dist/esm/Form/Select/MultiSelect/useArrowNavigation.esm.js +4 -1
  108. package/dist/esm/Form/Select/MultiSelect/useArrowNavigation.esm.js.map +1 -1
  109. package/dist/esm/Form/Select/MultiSelect/useMultiSelect.esm.js +63 -0
  110. package/dist/esm/Form/Select/MultiSelect/useMultiSelect.esm.js.map +1 -0
  111. package/dist/esm/Form/Select/Select.interfaces.esm.js +23 -0
  112. package/dist/esm/Form/Select/Select.interfaces.esm.js.map +1 -0
  113. package/dist/esm/Form/Select/SingleSelect/Select.esm.js +20 -15
  114. package/dist/esm/Form/Select/SingleSelect/Select.esm.js.map +1 -1
  115. package/dist/esm/Form/Select/SingleSelect/Select.module.scss.esm.js +2 -2
  116. package/dist/esm/Form/Select/SingleSelect/useArrowNavigation.esm.js +4 -1
  117. package/dist/esm/Form/Select/SingleSelect/useArrowNavigation.esm.js.map +1 -1
  118. package/dist/esm/Form/Select/useSelectPositionList.esm.js +5 -4
  119. package/dist/esm/Form/Select/useSelectPositionList.esm.js.map +1 -1
  120. package/dist/esm/Form/Textarea/Textarea.esm.js +12 -5
  121. package/dist/esm/Form/Textarea/Textarea.esm.js.map +1 -1
  122. package/dist/esm/Form/Textarea/Textarea.module.scss.esm.js +1 -1
  123. package/dist/esm/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.esm.js +4 -1
  124. package/dist/esm/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.esm.js.map +1 -1
  125. package/dist/esm/Form/Wrapper/InputWrapper/InputWrapper.esm.js +4 -2
  126. package/dist/esm/Form/Wrapper/InputWrapper/InputWrapper.esm.js.map +1 -1
  127. package/dist/esm/Form/Wrapper/InputWrapper/InputWrapper.module.scss.esm.js +1 -1
  128. package/dist/esm/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.esm.js +3 -2
  129. package/dist/esm/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.esm.js.map +1 -1
  130. package/dist/esm/Form/Wrapper/RadioWrapper/RadioWrapper.esm.js +17 -10
  131. package/dist/esm/Form/Wrapper/RadioWrapper/RadioWrapper.esm.js.map +1 -1
  132. package/dist/esm/Form/Wrapper/SelectWrapper/SelectWrapper.esm.js +5 -2
  133. package/dist/esm/Form/Wrapper/SelectWrapper/SelectWrapper.esm.js.map +1 -1
  134. package/dist/esm/Form/Wrapper/TextareaWrapper/TextareaWrapper.esm.js +20 -10
  135. package/dist/esm/Form/Wrapper/TextareaWrapper/TextareaWrapper.esm.js.map +1 -1
  136. package/dist/esm/Form/Wrapper/TextareaWrapper/TextareaWrapper.module.scss.esm.js +2 -2
  137. package/dist/esm/Form/Wrapper/Wrapper/Wrapper.module.scss.esm.js +1 -1
  138. package/dist/esm/_BaseStyling_/BaseStyling.esm.js +2 -0
  139. package/dist/esm/_BaseStyling_/BaseStyling.esm.js.map +1 -1
  140. package/dist/esm/src/components/Form/Checkbox/Checkbox.d.ts +1 -1
  141. package/dist/esm/src/components/Form/Fieldset/Fieldset.d.ts +1 -1
  142. package/dist/esm/src/components/Form/FileUpload/FileItem/FileItem.d.ts +1 -1
  143. package/dist/esm/src/components/Form/FileUpload/FileUpload.d.ts +6 -1
  144. package/dist/esm/src/components/Form/Input/Input.d.ts +2 -1
  145. package/dist/esm/src/components/Form/Radio/Radio.d.ts +1 -1
  146. package/dist/esm/src/components/Form/Select/MultiSelect/MultiSelect.d.ts +1 -1
  147. package/dist/esm/src/components/Form/Select/MultiSelect/useArrowNavigation.d.ts +2 -1
  148. package/dist/esm/src/components/Form/Select/MultiSelect/useMultiSelect.d.ts +16 -0
  149. package/dist/esm/src/components/Form/Select/MultiSelect/useMultiSelect.test.d.ts +1 -0
  150. package/dist/esm/src/components/Form/Select/Select.interfaces.d.ts +6 -4
  151. package/dist/esm/src/components/Form/Select/SingleSelect/Select.d.ts +1 -1
  152. package/dist/esm/src/components/Form/Select/SingleSelect/useArrowNavigation.d.ts +1 -1
  153. package/dist/esm/src/components/Form/Select/useSelectPositionList.d.ts +2 -2
  154. package/dist/esm/src/components/Form/Textarea/Textarea.d.ts +2 -1
  155. package/dist/esm/src/components/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.d.ts +1 -1
  156. package/dist/esm/src/components/Form/Wrapper/InputWrapper/InputWrapper.d.ts +1 -1
  157. package/dist/esm/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.d.ts +1 -1
  158. package/dist/esm/src/components/Form/Wrapper/RadioWrapper/RadioWrapper.d.ts +1 -1
  159. package/dist/esm/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.d.ts +1 -1
  160. package/dist/esm/src/components/Form/Wrapper/TextareaWrapper/TextareaWrapper.d.ts +2 -1
  161. package/dist/esm/src/components/_BaseStyling_/BaseStyling.d.ts +2 -0
  162. package/dist/esm/src/components/withReadOnly.d.ts +8 -0
  163. package/dist/esm/src/components/withReadOnly.test.d.ts +1 -0
  164. package/dist/esm/src/index.d.ts +1 -0
  165. package/dist/esm/src/index.esm.js +1 -0
  166. package/dist/esm/src/index.esm.js.map +1 -1
  167. package/dist/esm/src/util/unitTestUtils.d.ts +12 -0
  168. package/dist/esm/withReadOnly.esm.js +70 -0
  169. package/dist/esm/withReadOnly.esm.js.map +1 -0
  170. package/package.json +15 -15
  171. package/src/components/Form/Checkbox/Checkbox.module.scss +70 -0
  172. package/src/components/Form/Checkbox/Checkbox.tsx +2 -1
  173. package/src/components/Form/Fieldset/Fieldset.tsx +2 -1
  174. package/src/components/Form/FileUpload/FileItem/FileItem.module.scss +16 -0
  175. package/src/components/Form/FileUpload/FileItem/FileItem.tsx +17 -3
  176. package/src/components/Form/FileUpload/FileUpload.module.scss +57 -1
  177. package/src/components/Form/FileUpload/FileUpload.tsx +16 -6
  178. package/src/components/Form/FormHelperText/FormHelperText.module.scss +4 -0
  179. package/src/components/Form/Input/Input.module.scss +26 -0
  180. package/src/components/Form/Input/Input.tsx +10 -1
  181. package/src/components/Form/Radio/Radio.module.scss +46 -0
  182. package/src/components/Form/Radio/Radio.tsx +2 -1
  183. package/src/components/Form/Select/MultiSelect/MultiSelect.module.scss +35 -1
  184. package/src/components/Form/Select/MultiSelect/MultiSelect.tsx +41 -26
  185. package/src/components/Form/Select/MultiSelect/SelectedOptions.module.scss +8 -0
  186. package/src/components/Form/Select/MultiSelect/useArrowNavigation.ts +6 -1
  187. package/src/components/Form/Select/MultiSelect/useMultiSelect.tsx +98 -0
  188. package/src/components/Form/Select/Select.interfaces.ts +6 -4
  189. package/src/components/Form/Select/SingleSelect/Select.module.scss +60 -1
  190. package/src/components/Form/Select/SingleSelect/Select.tsx +30 -25
  191. package/src/components/Form/Select/SingleSelect/useArrowNavigation.ts +6 -1
  192. package/src/components/Form/Select/useSelectPositionList.ts +4 -4
  193. package/src/components/Form/Textarea/Textarea.module.scss +24 -0
  194. package/src/components/Form/Textarea/Textarea.tsx +24 -3
  195. package/src/components/Form/Wrapper/CheckboxWrapper/CheckboxWrapper.tsx +4 -1
  196. package/src/components/Form/Wrapper/InputWrapper/InputWrapper.module.scss +14 -0
  197. package/src/components/Form/Wrapper/InputWrapper/InputWrapper.tsx +4 -2
  198. package/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.tsx +3 -1
  199. package/src/components/Form/Wrapper/RadioWrapper/RadioWrapper.tsx +17 -12
  200. package/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.tsx +6 -1
  201. package/src/components/Form/Wrapper/TextareaWrapper/TextareaWrapper.module.scss +43 -0
  202. package/src/components/Form/Wrapper/TextareaWrapper/TextareaWrapper.tsx +45 -20
  203. package/src/components/Form/Wrapper/Wrapper/Wrapper.module.scss +6 -0
  204. package/src/components/_BaseStyling_/BaseStyling.tsx +4 -0
  205. package/src/components/withReadOnly.tsx +112 -0
  206. package/src/index.ts +1 -0
  207. package/src/mixins.module.scss +6 -0
  208. package/src/util/unitTestUtils.ts +32 -0
@@ -48,9 +48,52 @@
48
48
  &:focus:not(:disabled) {
49
49
  outline: none;
50
50
  }
51
+
52
+ &:has([data-icon-status]) {
53
+ padding-right: 2.5rem;
54
+ }
51
55
  }
52
56
  }
53
57
 
54
58
  .textarea-helper-text {
55
59
  margin-top: 0.14rem;
56
60
  }
61
+
62
+ [data-readonlyview="true"] {
63
+ & ~ span.error {
64
+ background-color: var(--color-white);
65
+ }
66
+
67
+ & label + div:not(:has(input)) {
68
+ min-height: 4rem;
69
+ border: 1px solid var(--color-blue-grey100);
70
+ color: var(--read-only-text-color);
71
+ background-color: var(--color-white);
72
+ padding: 0.5rem 0.75rem;
73
+ font-family: var(--font-family);
74
+ font-size: var(--form-control-font-size);
75
+ position: relative;
76
+ border-radius: 0.125rem;
77
+
78
+ & [data-icon-status] {
79
+ position: absolute;
80
+ right: 1.25rem;
81
+ top: 0.8rem;
82
+ font-size: 1.125rem;
83
+ height: 1.25rem;
84
+ width: 1.25rem;
85
+ }
86
+
87
+ & [data-icon-status="error"] {
88
+ color: var(--error);
89
+ }
90
+
91
+ & [data-icon-status="success"] {
92
+ color: var(--success);
93
+ }
94
+
95
+ &:has([data-icon-status]) {
96
+ padding-right: 2.5rem;
97
+ }
98
+ }
99
+ }
@@ -19,6 +19,8 @@ import classes from "./TextareaWrapper.module.scss";
19
19
  import { Wrapper, WrapperProps } from "../Wrapper/Wrapper";
20
20
  import { Textarea, Props as TextareaProps } from "../../Textarea/Textarea";
21
21
  import { useWrapper } from "../../../../hooks/useWrapper";
22
+ import { withReadOnly } from "../../../withReadOnly";
23
+ import { useDetermineStatusIcon } from "../../../../hooks/useDetermineStatusIcon";
22
24
 
23
25
  export interface Props
24
26
  extends Omit<
@@ -35,6 +37,7 @@ export interface Props
35
37
  onMouseEnter?: (event: React.MouseEvent<HTMLTextAreaElement>) => void;
36
38
  onMouseLeave?: (event: React.MouseEvent<HTMLTextAreaElement>) => void;
37
39
  success?: boolean;
40
+ readOnlyView?: boolean;
38
41
  }
39
42
 
40
43
  const TextareaWrapperComponent: ForwardRefRenderFunction<HTMLDivElement, Props> = (
@@ -67,25 +70,24 @@ const TextareaWrapperComponent: ForwardRefRenderFunction<HTMLDivElement, Props>
67
70
  disabled && wrapperClasses.push(classes["disabled"]);
68
71
  error && wrapperClasses.push(classes["error"]);
69
72
 
70
- return (
71
- <Wrapper
72
- {...rest}
73
- ref={ref}
74
- disabled={disabled}
75
- labelProps={{
76
- id: labelId,
77
- className: `${classes["textarea-label"]} ${wrapperClasses.join(" ")}`
78
- }}
79
- name={name}
80
- label={label}
81
- helperId={helperId}
82
- helperProps={{
83
- ...helperProps,
84
- className: classes["textarea-helper-text"]
85
- }}
86
- error={error}
87
- errorId={errorId}
88
- >
73
+ const icon = useDetermineStatusIcon({ success, error });
74
+
75
+ const getTextareaWrapper = () => {
76
+ if (rest["data-readonlyview"]) {
77
+ return (
78
+ <div
79
+ aria-labelledby={label && labelId}
80
+ aria-describedby={error ? errorId : helperId}
81
+ id={name}
82
+ tabIndex={0}
83
+ className={`${error ? classes["error"] : ""} ${success ? classes["success"] : ""}`}
84
+ >
85
+ {icon}
86
+ {value}
87
+ </div>
88
+ );
89
+ }
90
+ return (
89
91
  <Textarea
90
92
  {...textareaProps}
91
93
  error={error}
@@ -118,8 +120,31 @@ const TextareaWrapperComponent: ForwardRefRenderFunction<HTMLDivElement, Props>
118
120
  className: `${wrapperClasses.join(" ")} ${classes["textarea-wrapper"]}`
119
121
  }}
120
122
  />
123
+ );
124
+ };
125
+
126
+ return (
127
+ <Wrapper
128
+ {...rest}
129
+ ref={ref}
130
+ disabled={disabled}
131
+ labelProps={{
132
+ id: labelId,
133
+ className: `${classes["textarea-label"]} ${wrapperClasses.join(" ")}`
134
+ }}
135
+ name={name}
136
+ label={label}
137
+ helperId={helperId}
138
+ helperProps={{
139
+ ...helperProps,
140
+ className: classes["textarea-helper-text"]
141
+ }}
142
+ error={error}
143
+ errorId={errorId}
144
+ >
145
+ {getTextareaWrapper()}
121
146
  </Wrapper>
122
147
  );
123
148
  };
124
149
 
125
- export const TextareaWrapper = React.forwardRef(TextareaWrapperComponent);
150
+ export const TextareaWrapper = withReadOnly(React.forwardRef(TextareaWrapperComponent));
@@ -66,6 +66,12 @@
66
66
  }
67
67
  }
68
68
 
69
+ [data-readonlyview="true"] {
70
+ & label {
71
+ color: var(--read-only-text-color);
72
+ }
73
+ }
74
+
69
75
  @media only screen and (min-width: 30em) {
70
76
  .floating-wrapper {
71
77
  .floating-label {
@@ -208,6 +208,8 @@ interface CSSProperties {
208
208
  fileUploadBorderWidth?: string;
209
209
  dragDropBorderStyle?: string;
210
210
  fontSizeDataGrid?: string;
211
+ readOnlyBorderColor?: string;
212
+ readOnlyTextColor?: string;
211
213
  }
212
214
 
213
215
  export interface Props extends HTMLAttributes<HTMLDivElement> {
@@ -403,6 +405,8 @@ export const BaseStyling = ({ children, properties = {} }: Props) => {
403
405
  fontSizeH4: "1.25rem",
404
406
  fontSizeSub: ".75rem",
405
407
  fontSizeCode: "1rem",
408
+ readOnlyBorderColor: "var(--color-blue-grey100)",
409
+ readOnlyTextColor: "var(--color-blue-grey900)",
406
410
  formControlFontSize: "0.875rem", //FIXME: UCL-395
407
411
  fontSizeDataGrid: "0.875rem" //FIXME: UCL-395
408
412
  };
@@ -0,0 +1,112 @@
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, { ComponentType, ForwardedRef, PropsWithChildren } from "react";
18
+
19
+ export interface WithReadOnlyProps {
20
+ readOnlyView?: boolean;
21
+ required?: boolean;
22
+ helperText?: string;
23
+ type?: string;
24
+ }
25
+
26
+ const componentsWithKeyEventsToPrevent: string[] = ["CheckboxWrapper"];
27
+
28
+ const getDisplayName = <P,>(WrappedComponent: ComponentType<P>) => {
29
+ return WrappedComponent.displayName ?? WrappedComponent.name ?? "Component";
30
+ };
31
+
32
+ const getConditionalProps = (readOnlyView: boolean, type: string, helperText?: string) => {
33
+ const props: Record<string, any> = {};
34
+
35
+ if (readOnlyView) {
36
+ props.style = { pointerEvents: "none", userSelect: "text" };
37
+ if (helperText) {
38
+ props.helperText = "";
39
+ }
40
+ } else {
41
+ props.helperText = helperText;
42
+ }
43
+
44
+ if (type) {
45
+ props.type = type;
46
+ }
47
+
48
+ return props;
49
+ };
50
+
51
+ export const withReadOnly = <P extends object>(WrappedComponent: ComponentType<P>) => {
52
+ const preventKeyUpAndKeyDownHandlerForSpecificComponents = (readOnlyView: boolean) => {
53
+ const preventSubmissionKeys = (e: KeyboardEvent) => {
54
+ const isEnterOrSpace = (e: KeyboardEvent) => e.key === "Enter" || e.key === " ";
55
+ if (isEnterOrSpace(e)) {
56
+ e.stopPropagation();
57
+ e.preventDefault();
58
+ }
59
+ };
60
+
61
+ if (
62
+ readOnlyView &&
63
+ componentsWithKeyEventsToPrevent.includes(
64
+ WrappedComponent.displayName || WrappedComponent.name
65
+ )
66
+ ) {
67
+ const props: Record<string, any> = {};
68
+
69
+ props.onKeyUp = (e: KeyboardEvent) => {
70
+ preventSubmissionKeys(e);
71
+ };
72
+
73
+ props.onKeyDown = (e: KeyboardEvent) => {
74
+ preventSubmissionKeys(e);
75
+ };
76
+
77
+ return props;
78
+ }
79
+
80
+ return {};
81
+ };
82
+
83
+ const WithReadOnlyComponent = React.forwardRef(
84
+ (props: PropsWithChildren<P & WithReadOnlyProps>, ref: ForwardedRef<any>) => {
85
+ const {
86
+ readOnlyView = false,
87
+ required,
88
+ children,
89
+ helperText,
90
+ type = "",
91
+ ...restProps
92
+ } = props;
93
+
94
+ return (
95
+ <WrappedComponent
96
+ ref={ref}
97
+ {...(restProps as P)}
98
+ data-readonlyview={readOnlyView}
99
+ aria-readonly={readOnlyView}
100
+ required={readOnlyView ? false : required}
101
+ {...getConditionalProps(readOnlyView, type, helperText)}
102
+ {...preventKeyUpAndKeyDownHandlerForSpecificComponents(readOnlyView)}
103
+ >
104
+ {children}
105
+ </WrappedComponent>
106
+ );
107
+ }
108
+ );
109
+
110
+ WithReadOnlyComponent.displayName = `withReadOnly_${getDisplayName(WrappedComponent)}`;
111
+ return WithReadOnlyComponent;
112
+ };
package/src/index.ts CHANGED
@@ -178,6 +178,7 @@ export { FILE_ACTION, ACTION_STATUS } from "./components/Form/FileUpload/FileIte
178
178
 
179
179
  export { MultiSelectWrapper } from "./components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper";
180
180
  export type { Props as MultiSelectWrapperProps } from "./components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper";
181
+ export { useMultiSelect } from "./components/Form/Select/MultiSelect/useMultiSelect";
181
182
  export { ContentHeader } from "./components/Layout/ContentHeader/ContentHeader";
182
183
  export type { Props as ContentHeaderProps } from "./components/Layout/ContentHeader/ContentHeader";
183
184
  export { FormStepper } from "./components/Layout/FormPage/FormWithStepper/FormStepper/FormStepper";
@@ -195,6 +195,12 @@
195
195
  $borderRadius: var(--input-border-radius),
196
196
  $backgroundColor: ""
197
197
  ) {
198
+ [data-readonlyview="true"] {
199
+ .outline {
200
+ border-color: var(--read-only-border-color);
201
+ }
202
+ }
203
+
198
204
  .outline {
199
205
  pointer-events: none;
200
206
  position: absolute;
@@ -0,0 +1,32 @@
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
+ export class MockDOMRect implements DOMRect {
18
+ constructor(
19
+ public x: number = 0,
20
+ public y: number = 0,
21
+ public width: number = 0,
22
+ public height: number = 0,
23
+ public top: number = y,
24
+ public right: number = x + width,
25
+ public bottom: number = y + height,
26
+ public left: number = x
27
+ ) {}
28
+
29
+ toJSON() {
30
+ return { ...this };
31
+ }
32
+ }