@conduction/components 2.2.11 → 2.2.13

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.
package/README.md CHANGED
@@ -4,6 +4,10 @@
4
4
 
5
5
  - **Version 2.2 (breaking changes from 2.1.x)**
6
6
 
7
+ - 2.2.13:
8
+ - Updated Textarea and all Input components to allow aria-label.
9
+ - Updated Select components.
10
+ - 2.2.12: Updated Select components to WCAG with aria-label and role.
7
11
  - 2.2.11: Updated Primary and Secondary topnav to NLDS.
8
12
  - 2.2.10: Added z-index to tooltip.
9
13
  - 2.2.9: Added CardWrapper, CardHeader, CardHeaderTitle, CardHeaderDate to index.
@@ -2,6 +2,7 @@ import * as React from "react";
2
2
  import { IReactHookFormProps } from "./types";
3
3
  export interface IInputProps {
4
4
  name: string;
5
+ ariaLabel?: string;
5
6
  disabled?: boolean;
6
7
  defaultValue?: string;
7
8
  icon?: JSX.Element;
@@ -1,12 +1,12 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Textbox } from "@utrecht/component-library-react/dist/css-module";
3
3
  import { ErrorMessage } from "./errorMessage/ErrorMessage";
4
- export const InputPassword = ({ disabled, name, validation, register, placeholder, errors, hideErrorMessage, }) => {
5
- return (_jsxs(_Fragment, { children: [_jsx(Textbox, { type: "password", ...{ disabled, placeholder }, ...register(name, { ...validation }), invalid: errors[name] }), errors[name] && !hideErrorMessage && _jsx(ErrorMessage, { message: errors[name].message })] }));
4
+ export const InputPassword = ({ disabled, name, validation, register, placeholder, errors, hideErrorMessage, ariaLabel, }) => {
5
+ return (_jsxs(_Fragment, { children: [_jsx(Textbox, { type: "password", ...{ disabled, placeholder }, ...register(name, { ...validation }), invalid: errors[name], "aria-label": ariaLabel }), errors[name] && !hideErrorMessage && _jsx(ErrorMessage, { message: errors[name].message })] }));
6
6
  };
7
- export const InputText = ({ disabled, name, defaultValue, validation, register, icon, placeholder, errors, hideErrorMessage, }) => (_jsxs(_Fragment, { children: [_jsx(Textbox, { type: "text", ...{ defaultValue, disabled, placeholder, icon }, ...register(name, { ...validation }), invalid: errors[name] }), errors[name] && !hideErrorMessage && _jsx(ErrorMessage, { message: errors[name].message })] }));
8
- export const InputEmail = ({ disabled, name, defaultValue, validation, register, icon, placeholder, errors, hideErrorMessage, }) => (_jsxs(_Fragment, { children: [_jsx(Textbox, { type: "email", required: !!validation?.required, ...{ defaultValue, disabled, placeholder, icon }, ...register(name, { ...validation }), invalid: errors[name] }), errors[name] && !hideErrorMessage && _jsx(ErrorMessage, { message: errors[name].message })] }));
9
- export const InputURL = ({ disabled, name, defaultValue, validation, register, icon, placeholder, errors, hideErrorMessage, }) => (_jsxs(_Fragment, { children: [_jsx(Textbox, { type: "url", ...{ defaultValue, disabled, placeholder, icon }, ...register(name, { ...validation }), invalid: errors[name] }), errors[name] && !hideErrorMessage && _jsx(ErrorMessage, { message: errors[name].message })] }));
10
- export const InputNumber = ({ disabled, name, defaultValue, validation, register, icon, placeholder, errors, hideErrorMessage, }) => (_jsxs(_Fragment, { children: [_jsx(Textbox, { type: "number", ...{ defaultValue, disabled, placeholder, icon }, ...register(name, { ...validation, valueAsNumber: true }), invalid: errors[name] }), errors[name] && !hideErrorMessage && _jsx(ErrorMessage, { message: errors[name].message })] }));
11
- export const InputFloat = ({ disabled, name, defaultValue, validation, register, icon, placeholder, errors, hideErrorMessage, }) => (_jsxs(_Fragment, { children: [_jsx(Textbox, { type: "number", step: ".01", ...{ disabled, placeholder, icon, defaultValue }, ...register(name, { ...validation, valueAsNumber: true }), invalid: errors[name] }), errors[name] && !hideErrorMessage && _jsx(ErrorMessage, { message: errors[name].message })] }));
12
- export const InputFile = ({ disabled, name, accept, defaultValue, validation, register, }) => (_jsx("input", { className: "denhaag-Textbox__input", type: "file", ...{ defaultValue, disabled, accept }, ...register(name, { ...validation }) }));
7
+ export const InputText = ({ disabled, name, defaultValue, validation, register, icon, placeholder, errors, hideErrorMessage, ariaLabel, }) => (_jsxs(_Fragment, { children: [_jsx(Textbox, { type: "text", ...{ defaultValue, disabled, placeholder, icon }, ...register(name, { ...validation }), invalid: errors[name], "aria-label": ariaLabel }), errors[name] && !hideErrorMessage && _jsx(ErrorMessage, { message: errors[name].message })] }));
8
+ export const InputEmail = ({ disabled, name, defaultValue, validation, register, icon, placeholder, errors, hideErrorMessage, ariaLabel, }) => (_jsxs(_Fragment, { children: [_jsx(Textbox, { type: "email", required: !!validation?.required, ...{ defaultValue, disabled, placeholder, icon }, ...register(name, { ...validation }), invalid: errors[name], "aria-label": ariaLabel }), errors[name] && !hideErrorMessage && _jsx(ErrorMessage, { message: errors[name].message })] }));
9
+ export const InputURL = ({ disabled, name, defaultValue, validation, register, icon, placeholder, errors, hideErrorMessage, ariaLabel, }) => (_jsxs(_Fragment, { children: [_jsx(Textbox, { type: "url", ...{ defaultValue, disabled, placeholder, icon }, ...register(name, { ...validation }), invalid: errors[name], "aria-label": ariaLabel }), errors[name] && !hideErrorMessage && _jsx(ErrorMessage, { message: errors[name].message })] }));
10
+ export const InputNumber = ({ disabled, name, defaultValue, validation, register, icon, placeholder, errors, hideErrorMessage, ariaLabel, }) => (_jsxs(_Fragment, { children: [_jsx(Textbox, { type: "number", ...{ defaultValue, disabled, placeholder, icon }, ...register(name, { ...validation, valueAsNumber: true }), invalid: errors[name], "aria-label": ariaLabel }), errors[name] && !hideErrorMessage && _jsx(ErrorMessage, { message: errors[name].message })] }));
11
+ export const InputFloat = ({ disabled, name, defaultValue, validation, register, icon, placeholder, errors, hideErrorMessage, ariaLabel, }) => (_jsxs(_Fragment, { children: [_jsx(Textbox, { type: "number", step: ".01", ...{ disabled, placeholder, icon, defaultValue }, ...register(name, { ...validation, valueAsNumber: true }), invalid: errors[name], "aria-label": ariaLabel }), errors[name] && !hideErrorMessage && _jsx(ErrorMessage, { message: errors[name].message })] }));
12
+ export const InputFile = ({ disabled, name, accept, defaultValue, validation, register, ariaLabel, }) => (_jsx("input", { className: "denhaag-Textbox__input", type: "file", ...{ defaultValue, disabled, accept }, ...register(name, { ...validation }), "aria-label": ariaLabel }));
@@ -9,6 +9,7 @@ interface ISelectProps {
9
9
  value: string;
10
10
  }[];
11
11
  name: string;
12
+ ariaLabel?: string;
12
13
  id?: string;
13
14
  defaultValue?: any;
14
15
  disabled?: boolean;
@@ -17,7 +18,7 @@ interface ISelectProps {
17
18
  menuPlacement?: MenuPlacement;
18
19
  placeholder?: string;
19
20
  }
20
- export declare const SelectMultiple: ({ id, name, options, errors, control, validation, defaultValue, disabled, hideErrorMessage, menuPlacement, placeholder, }: ISelectProps & IReactHookFormProps) => JSX.Element;
21
- export declare const SelectCreate: ({ id, name, options, errors, control, validation, defaultValue, disabled, hideErrorMessage, menuPlacement, placeholder, }: ISelectProps & IReactHookFormProps) => JSX.Element;
22
- export declare const SelectSingle: ({ id, name, options, errors, control, validation, isClearable, defaultValue, disabled, hideErrorMessage, menuPlacement, placeholder, }: ISelectProps & IReactHookFormProps) => JSX.Element;
21
+ export declare const SelectMultiple: ({ id, name, options, errors, control, validation, defaultValue, disabled, hideErrorMessage, menuPlacement, placeholder, ariaLabel, }: ISelectProps & IReactHookFormProps) => JSX.Element;
22
+ export declare const SelectCreate: ({ id, name, options, errors, control, validation, defaultValue, disabled, hideErrorMessage, menuPlacement, placeholder, ariaLabel, }: ISelectProps & IReactHookFormProps) => JSX.Element;
23
+ export declare const SelectSingle: ({ id, name, options, errors, control, validation, isClearable, defaultValue, disabled, hideErrorMessage, menuPlacement, placeholder, ariaLabel, }: ISelectProps & IReactHookFormProps) => JSX.Element;
23
24
  export {};
@@ -1,4 +1,5 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
2
3
  import * as styles from "./select.module.css";
3
4
  import { Controller } from "react-hook-form";
4
5
  import ReactSelect from "react-select";
@@ -41,18 +42,69 @@ const selectMultiStyles = {
41
42
  color: `var(--conduction-input-select-placeholder-color, var(--utrecht-form-input-placeholder-color, ${base.color}) )`,
42
43
  }),
43
44
  };
44
- export const SelectMultiple = ({ id, name, options, errors, control, validation, defaultValue, disabled, hideErrorMessage, menuPlacement, placeholder, }) => {
45
+ export const SelectMultiple = ({ id, name, options, errors, control, validation, defaultValue, disabled, hideErrorMessage, menuPlacement, placeholder, ariaLabel, }) => {
46
+ React.useEffect(() => {
47
+ document.querySelectorAll('[id*="live-region"]').forEach((element) => {
48
+ if (element?.role !== "presentation") {
49
+ element.setAttribute("role", "presentation");
50
+ }
51
+ });
52
+ document.querySelectorAll('[class*="indicatorSeparator"]').forEach((element) => {
53
+ if (element.role !== "presentation") {
54
+ element.setAttribute("role", "presentation");
55
+ }
56
+ });
57
+ document.querySelectorAll('[class*="a11yText-A11yText"]').forEach((element) => {
58
+ if (element.role !== "presentation") {
59
+ element.setAttribute("role", "presentation");
60
+ }
61
+ });
62
+ }, []);
45
63
  return (_jsx(Controller, { ...{ control, name, defaultValue }, rules: validation, render: ({ field: { onChange, value } }) => {
46
- return (_jsxs(_Fragment, { children: [_jsx(ReactSelect, { inputId: id, value: value ?? "", className: clsx(styles.select, errors[name] && styles.error), isMulti: true, isDisabled: disabled, ...{ options, onChange, errors }, menuPortalTarget: document.body, menuPlacement: menuPlacement, styles: selectStyles, placeholder: disabled ? "Disabled..." : placeholder ?? "Select one or more options..." }), errors[name] && !hideErrorMessage && _jsx(ErrorMessage, { message: errors[name].message })] }));
64
+ return (_jsxs(_Fragment, { children: [_jsx(ReactSelect, { "aria-label": ariaLabel, inputId: id, value: value ?? "", className: clsx(styles.select, errors[name] && styles.error), isMulti: true, isDisabled: disabled, ...{ options, onChange, errors }, menuPortalTarget: document.body, menuPlacement: menuPlacement, styles: selectStyles, placeholder: disabled ? "Disabled..." : placeholder ?? "Select one or more options..." }), errors[name] && !hideErrorMessage && _jsx(ErrorMessage, { message: errors[name].message })] }));
47
65
  } }));
48
66
  };
49
- export const SelectCreate = ({ id, name, options, errors, control, validation, defaultValue, disabled, hideErrorMessage, menuPlacement, placeholder, }) => {
67
+ export const SelectCreate = ({ id, name, options, errors, control, validation, defaultValue, disabled, hideErrorMessage, menuPlacement, placeholder, ariaLabel, }) => {
68
+ React.useEffect(() => {
69
+ document.querySelectorAll('[id*="live-region"]').forEach((element) => {
70
+ if (element.role !== "presentation") {
71
+ element.setAttribute("role", "presentation");
72
+ }
73
+ });
74
+ document.querySelectorAll('[class*="indicatorSeparator"]').forEach((element) => {
75
+ if (element.role !== "presentation") {
76
+ element.setAttribute("role", "presentation");
77
+ }
78
+ });
79
+ document.querySelectorAll('[class*="a11yText"]').forEach((element) => {
80
+ if (element.role !== "presentation") {
81
+ element.setAttribute("role", "presentation");
82
+ }
83
+ });
84
+ }, []);
50
85
  return (_jsx(Controller, { ...{ control, name, defaultValue }, rules: validation, render: ({ field: { onChange, value } }) => {
51
- return (_jsxs(_Fragment, { children: [_jsx(CreatableSelect, { inputId: id, value: value ?? "", placeholder: disabled ? "Disabled..." : placeholder ?? "Select one or more options...", className: clsx(styles.select, errors[name] && styles.error), isMulti: true, isDisabled: disabled, ...{ options, onChange, errors }, menuPortalTarget: document.body, menuPlacement: menuPlacement, styles: selectStyles }), errors[name] && !hideErrorMessage && _jsx(ErrorMessage, { message: errors[name].message })] }));
86
+ return (_jsxs(_Fragment, { children: [_jsx(CreatableSelect, { "aria-label": ariaLabel, inputId: id, value: value ?? "", placeholder: disabled ? "Disabled..." : placeholder ?? "Select one or more options...", className: clsx(styles.select, errors[name] && styles.error), isMulti: true, isDisabled: disabled, ...{ options, onChange, errors }, menuPortalTarget: document.body, menuPlacement: menuPlacement, styles: selectStyles }), errors[name] && !hideErrorMessage && _jsx(ErrorMessage, { message: errors[name].message })] }));
52
87
  } }));
53
88
  };
54
- export const SelectSingle = ({ id, name, options, errors, control, validation, isClearable, defaultValue, disabled, hideErrorMessage, menuPlacement, placeholder, }) => {
89
+ export const SelectSingle = ({ id, name, options, errors, control, validation, isClearable, defaultValue, disabled, hideErrorMessage, menuPlacement, placeholder, ariaLabel, }) => {
90
+ React.useEffect(() => {
91
+ document.querySelectorAll('[id*="live-region"]').forEach((element) => {
92
+ if (element.role !== "presentation") {
93
+ element.setAttribute("role", "presentation");
94
+ }
95
+ });
96
+ document.querySelectorAll('[class*="indicatorSeparator"]').forEach((element) => {
97
+ if (element.role !== "presentation") {
98
+ element.setAttribute("role", "presentation");
99
+ }
100
+ });
101
+ document.querySelectorAll('[class*="a11yText-A11yText"]').forEach((element) => {
102
+ if (element.role !== "presentation") {
103
+ element.setAttribute("role", "presentation");
104
+ }
105
+ });
106
+ }, []);
55
107
  return (_jsx(Controller, { ...{ control, name, defaultValue }, rules: validation, render: ({ field: { onChange, value } }) => {
56
- return (_jsxs(_Fragment, { children: [_jsx(ReactSelect, { inputId: id, value: value ?? "", className: clsx(styles.select, errors[name] && styles.error), isDisabled: disabled, ...{ options, onChange, errors, isClearable }, menuPortalTarget: document.body, menuPlacement: menuPlacement, styles: selectStyles, placeholder: disabled ? "Disabled..." : placeholder ?? "Select one or more options..." }), errors[name] && !hideErrorMessage && _jsx(ErrorMessage, { message: errors[name].message })] }));
108
+ return (_jsxs(_Fragment, { children: [_jsx(ReactSelect, { "aria-label": ariaLabel, inputId: id, value: value ?? "", className: clsx(styles.select, errors[name] && styles.error), isDisabled: disabled, ...{ options, onChange, errors, isClearable }, menuPortalTarget: document.body, menuPlacement: menuPlacement, styles: selectStyles, placeholder: disabled ? "Disabled..." : placeholder ?? "Select one or more options..." }), errors[name] && !hideErrorMessage && _jsx(ErrorMessage, { message: errors[name].message })] }));
57
109
  } }));
58
110
  };
@@ -2,8 +2,9 @@
2
2
  import { IReactHookFormProps } from "./types";
3
3
  export interface ITextAreaProps {
4
4
  name: string;
5
+ ariaLabel?: string;
5
6
  disabled?: boolean;
6
7
  defaultValue?: string;
7
8
  hideErrorMessage?: boolean;
8
9
  }
9
- export declare const Textarea: ({ name, validation, register, errors, disabled, defaultValue, hideErrorMessage, }: ITextAreaProps & IReactHookFormProps) => JSX.Element;
10
+ export declare const Textarea: ({ name, validation, register, errors, disabled, defaultValue, hideErrorMessage, ariaLabel, }: ITextAreaProps & IReactHookFormProps) => JSX.Element;
@@ -1,4 +1,4 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { ErrorMessage } from "./errorMessage/ErrorMessage";
3
3
  import { Textarea as UtrechtTextarea } from "@utrecht/component-library-react/dist/css-module";
4
- export const Textarea = ({ name, validation, register, errors, disabled, defaultValue, hideErrorMessage, }) => (_jsxs(_Fragment, { children: [_jsx(UtrechtTextarea, { ...register(name, { ...validation }), ...{ disabled, defaultValue }, invalid: errors[name] }), errors[name] && !hideErrorMessage && _jsx(ErrorMessage, { message: errors[name].message })] }));
4
+ export const Textarea = ({ name, validation, register, errors, disabled, defaultValue, hideErrorMessage, ariaLabel, }) => (_jsxs(_Fragment, { children: [_jsx(UtrechtTextarea, { ...register(name, { ...validation }), ...{ disabled, defaultValue }, invalid: errors[name], "aria-label": ariaLabel }), errors[name] && !hideErrorMessage && _jsx(ErrorMessage, { message: errors[name].message })] }));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@conduction/components",
3
- "version": "2.2.11",
3
+ "version": "2.2.13",
4
4
  "description": "React (Gatsby) components used within the Conduction Skeleton Application (and its implementations)",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -5,6 +5,7 @@ import { ErrorMessage } from "./errorMessage/ErrorMessage";
5
5
 
6
6
  export interface IInputProps {
7
7
  name: string;
8
+ ariaLabel?: string;
8
9
  disabled?: boolean;
9
10
  defaultValue?: string;
10
11
  icon?: JSX.Element;
@@ -20,6 +21,7 @@ export const InputPassword: React.FC<IInputProps & IReactHookFormProps> = ({
20
21
  placeholder,
21
22
  errors,
22
23
  hideErrorMessage,
24
+ ariaLabel,
23
25
  }) => {
24
26
  return (
25
27
  <>
@@ -28,6 +30,7 @@ export const InputPassword: React.FC<IInputProps & IReactHookFormProps> = ({
28
30
  {...{ disabled, placeholder }}
29
31
  {...register(name, { ...validation })}
30
32
  invalid={errors[name]}
33
+ aria-label={ariaLabel}
31
34
  />
32
35
  {errors[name] && !hideErrorMessage && <ErrorMessage message={errors[name].message} />}
33
36
  </>
@@ -44,6 +47,7 @@ export const InputText: React.FC<IInputProps & IReactHookFormProps> = ({
44
47
  placeholder,
45
48
  errors,
46
49
  hideErrorMessage,
50
+ ariaLabel,
47
51
  }) => (
48
52
  <>
49
53
  <Textbox
@@ -51,6 +55,7 @@ export const InputText: React.FC<IInputProps & IReactHookFormProps> = ({
51
55
  {...{ defaultValue, disabled, placeholder, icon }}
52
56
  {...register(name, { ...validation })}
53
57
  invalid={errors[name]}
58
+ aria-label={ariaLabel}
54
59
  />
55
60
  {errors[name] && !hideErrorMessage && <ErrorMessage message={errors[name].message} />}
56
61
  </>
@@ -66,6 +71,7 @@ export const InputEmail: React.FC<IInputProps & IReactHookFormProps> = ({
66
71
  placeholder,
67
72
  errors,
68
73
  hideErrorMessage,
74
+ ariaLabel,
69
75
  }) => (
70
76
  <>
71
77
  <Textbox
@@ -74,6 +80,7 @@ export const InputEmail: React.FC<IInputProps & IReactHookFormProps> = ({
74
80
  {...{ defaultValue, disabled, placeholder, icon }}
75
81
  {...register(name, { ...validation })}
76
82
  invalid={errors[name]}
83
+ aria-label={ariaLabel}
77
84
  />
78
85
  {errors[name] && !hideErrorMessage && <ErrorMessage message={errors[name].message} />}
79
86
  </>
@@ -89,6 +96,7 @@ export const InputURL: React.FC<IInputProps & IReactHookFormProps> = ({
89
96
  placeholder,
90
97
  errors,
91
98
  hideErrorMessage,
99
+ ariaLabel,
92
100
  }) => (
93
101
  <>
94
102
  <Textbox
@@ -96,6 +104,7 @@ export const InputURL: React.FC<IInputProps & IReactHookFormProps> = ({
96
104
  {...{ defaultValue, disabled, placeholder, icon }}
97
105
  {...register(name, { ...validation })}
98
106
  invalid={errors[name]}
107
+ aria-label={ariaLabel}
99
108
  />
100
109
  {errors[name] && !hideErrorMessage && <ErrorMessage message={errors[name].message} />}
101
110
  </>
@@ -111,6 +120,7 @@ export const InputNumber: React.FC<IInputProps & IReactHookFormProps> = ({
111
120
  placeholder,
112
121
  errors,
113
122
  hideErrorMessage,
123
+ ariaLabel,
114
124
  }) => (
115
125
  <>
116
126
  <Textbox
@@ -118,6 +128,7 @@ export const InputNumber: React.FC<IInputProps & IReactHookFormProps> = ({
118
128
  {...{ defaultValue, disabled, placeholder, icon }}
119
129
  {...register(name, { ...validation, valueAsNumber: true })}
120
130
  invalid={errors[name]}
131
+ aria-label={ariaLabel}
121
132
  />
122
133
  {errors[name] && !hideErrorMessage && <ErrorMessage message={errors[name].message} />}
123
134
  </>
@@ -133,6 +144,7 @@ export const InputFloat: React.FC<IInputProps & IReactHookFormProps> = ({
133
144
  placeholder,
134
145
  errors,
135
146
  hideErrorMessage,
147
+ ariaLabel,
136
148
  }) => (
137
149
  <>
138
150
  <Textbox
@@ -141,6 +153,7 @@ export const InputFloat: React.FC<IInputProps & IReactHookFormProps> = ({
141
153
  {...{ disabled, placeholder, icon, defaultValue }}
142
154
  {...register(name, { ...validation, valueAsNumber: true })}
143
155
  invalid={errors[name]}
156
+ aria-label={ariaLabel}
144
157
  />
145
158
  {errors[name] && !hideErrorMessage && <ErrorMessage message={errors[name].message} />}
146
159
  </>
@@ -157,11 +170,13 @@ export const InputFile: React.FC<IInputFileProps & IInputProps & IReactHookFormP
157
170
  defaultValue,
158
171
  validation,
159
172
  register,
173
+ ariaLabel,
160
174
  }) => (
161
175
  <input
162
176
  className="denhaag-Textbox__input"
163
177
  type="file"
164
178
  {...{ defaultValue, disabled, accept }}
165
179
  {...register(name, { ...validation })}
180
+ aria-label={ariaLabel}
166
181
  />
167
182
  );
@@ -11,6 +11,7 @@ interface ISelectProps {
11
11
  control: Control<FieldValues, any>;
12
12
  options: { label: string; value: string }[];
13
13
  name: string;
14
+ ariaLabel?: string;
14
15
  id?: string;
15
16
  defaultValue?: any;
16
17
  disabled?: boolean;
@@ -72,7 +73,25 @@ export const SelectMultiple = ({
72
73
  hideErrorMessage,
73
74
  menuPlacement,
74
75
  placeholder,
76
+ ariaLabel,
75
77
  }: ISelectProps & IReactHookFormProps): JSX.Element => {
78
+ React.useEffect(() => {
79
+ document.querySelectorAll('[id*="live-region"]').forEach((element: any) => {
80
+ if (element?.role !== "presentation") {
81
+ element.setAttribute("role", "presentation");
82
+ }
83
+ });
84
+ document.querySelectorAll('[class*="indicatorSeparator"]').forEach((element: any) => {
85
+ if (element.role !== "presentation") {
86
+ element.setAttribute("role", "presentation");
87
+ }
88
+ });
89
+ document.querySelectorAll('[class*="a11yText-A11yText"]').forEach((element: any) => {
90
+ if (element.role !== "presentation") {
91
+ element.setAttribute("role", "presentation");
92
+ }
93
+ });
94
+ }, []);
76
95
  return (
77
96
  <Controller
78
97
  {...{ control, name, defaultValue }}
@@ -81,6 +100,7 @@ export const SelectMultiple = ({
81
100
  return (
82
101
  <>
83
102
  <ReactSelect
103
+ aria-label={ariaLabel}
84
104
  inputId={id}
85
105
  value={value ?? ""}
86
106
  className={clsx(styles.select, errors[name] && styles.error)}
@@ -112,7 +132,25 @@ export const SelectCreate = ({
112
132
  hideErrorMessage,
113
133
  menuPlacement,
114
134
  placeholder,
135
+ ariaLabel,
115
136
  }: ISelectProps & IReactHookFormProps): JSX.Element => {
137
+ React.useEffect(() => {
138
+ document.querySelectorAll('[id*="live-region"]').forEach((element: any) => {
139
+ if (element.role !== "presentation") {
140
+ element.setAttribute("role", "presentation");
141
+ }
142
+ });
143
+ document.querySelectorAll('[class*="indicatorSeparator"]').forEach((element: any) => {
144
+ if (element.role !== "presentation") {
145
+ element.setAttribute("role", "presentation");
146
+ }
147
+ });
148
+ document.querySelectorAll('[class*="a11yText"]').forEach((element: any) => {
149
+ if (element.role !== "presentation") {
150
+ element.setAttribute("role", "presentation");
151
+ }
152
+ });
153
+ }, []);
116
154
  return (
117
155
  <Controller
118
156
  {...{ control, name, defaultValue }}
@@ -121,6 +159,7 @@ export const SelectCreate = ({
121
159
  return (
122
160
  <>
123
161
  <CreatableSelect
162
+ aria-label={ariaLabel}
124
163
  inputId={id}
125
164
  value={value ?? ""}
126
165
  placeholder={disabled ? "Disabled..." : placeholder ?? "Select one or more options..."}
@@ -153,7 +192,25 @@ export const SelectSingle = ({
153
192
  hideErrorMessage,
154
193
  menuPlacement,
155
194
  placeholder,
195
+ ariaLabel,
156
196
  }: ISelectProps & IReactHookFormProps): JSX.Element => {
197
+ React.useEffect(() => {
198
+ document.querySelectorAll('[id*="live-region"]').forEach((element: any) => {
199
+ if (element.role !== "presentation") {
200
+ element.setAttribute("role", "presentation");
201
+ }
202
+ });
203
+ document.querySelectorAll('[class*="indicatorSeparator"]').forEach((element: any) => {
204
+ if (element.role !== "presentation") {
205
+ element.setAttribute("role", "presentation");
206
+ }
207
+ });
208
+ document.querySelectorAll('[class*="a11yText-A11yText"]').forEach((element: any) => {
209
+ if (element.role !== "presentation") {
210
+ element.setAttribute("role", "presentation");
211
+ }
212
+ });
213
+ }, []);
157
214
  return (
158
215
  <Controller
159
216
  {...{ control, name, defaultValue }}
@@ -162,6 +219,7 @@ export const SelectSingle = ({
162
219
  return (
163
220
  <>
164
221
  <ReactSelect
222
+ aria-label={ariaLabel}
165
223
  inputId={id}
166
224
  value={value ?? ""}
167
225
  className={clsx(styles.select, errors[name] && styles.error)}
@@ -4,6 +4,7 @@ import { Textarea as UtrechtTextarea } from "@utrecht/component-library-react/di
4
4
 
5
5
  export interface ITextAreaProps {
6
6
  name: string;
7
+ ariaLabel?: string;
7
8
  disabled?: boolean;
8
9
  defaultValue?: string;
9
10
  hideErrorMessage?: boolean;
@@ -17,9 +18,15 @@ export const Textarea = ({
17
18
  disabled,
18
19
  defaultValue,
19
20
  hideErrorMessage,
21
+ ariaLabel,
20
22
  }: ITextAreaProps & IReactHookFormProps): JSX.Element => (
21
23
  <>
22
- <UtrechtTextarea {...register(name, { ...validation })} {...{ disabled, defaultValue }} invalid={errors[name]} />
24
+ <UtrechtTextarea
25
+ {...register(name, { ...validation })}
26
+ {...{ disabled, defaultValue }}
27
+ invalid={errors[name]}
28
+ aria-label={ariaLabel}
29
+ />
23
30
  {errors[name] && !hideErrorMessage && <ErrorMessage message={errors[name].message} />}
24
31
  </>
25
32
  );