cpk-ui 0.5.4 → 0.5.5
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/components/uis/Button/Button.d.ts +2 -1
- package/components/uis/Button/Button.d.ts.map +1 -1
- package/components/uis/Button/Button.js +2 -2
- package/components/uis/Checkbox/Checkbox.d.ts +2 -1
- package/components/uis/Checkbox/Checkbox.d.ts.map +1 -1
- package/components/uis/Checkbox/Checkbox.js +2 -2
- package/components/uis/EditText/EditText.d.ts +1 -0
- package/components/uis/EditText/EditText.d.ts.map +1 -1
- package/components/uis/EditText/EditText.js +2 -2
- package/components/uis/IconButton/IconButton.d.ts +2 -1
- package/components/uis/IconButton/IconButton.d.ts.map +1 -1
- package/components/uis/IconButton/IconButton.js +2 -2
- package/components/uis/RadioGroup/RadioButton.d.ts +2 -1
- package/components/uis/RadioGroup/RadioButton.d.ts.map +1 -1
- package/components/uis/RadioGroup/RadioButton.js +2 -2
- package/components/uis/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/components/uis/SegmentedControl/SegmentedControl.js +1 -1
- package/components/uis/SwitchToggle/SwitchToggle.d.ts +2 -1
- package/components/uis/SwitchToggle/SwitchToggle.d.ts.map +1 -1
- package/components/uis/SwitchToggle/SwitchToggle.js +2 -2
- package/package.json +1 -1
- package/src/components/uis/Button/Button.test.tsx +74 -0
- package/src/components/uis/Button/Button.tsx +4 -0
- package/src/components/uis/Checkbox/Checkbox.test.tsx +95 -1
- package/src/components/uis/Checkbox/Checkbox.tsx +5 -0
- package/src/components/uis/EditText/EditText.tsx +3 -0
- package/src/components/uis/IconButton/IconButton.test.tsx +39 -0
- package/src/components/uis/IconButton/IconButton.tsx +4 -0
- package/src/components/uis/RadioGroup/RadioButton.tsx +5 -0
- package/src/components/uis/RadioGroup/RadioGroup.test.tsx +67 -0
- package/src/components/uis/SegmentedControl/SegmentedControl.tsx +3 -0
- package/src/components/uis/SwitchToggle/SwitchToggle.test.tsx +44 -0
- package/src/components/uis/SwitchToggle/SwitchToggle.tsx +4 -0
|
@@ -24,6 +24,7 @@ export type Props = {
|
|
|
24
24
|
touchableHighlightProps?: Omit<TouchableHighlightProps, 'onPress' | 'activeOpacity' | 'style'>;
|
|
25
25
|
hitSlop?: null | Insets | number | undefined;
|
|
26
26
|
hapticFeedback?: Haptics.ImpactFeedbackStyle;
|
|
27
|
+
accessibilityLabel?: string;
|
|
27
28
|
};
|
|
28
29
|
type Styles = {
|
|
29
30
|
container?: StyleProp<ViewStyle>;
|
|
@@ -34,7 +35,7 @@ type Styles = {
|
|
|
34
35
|
disabledText?: StyleProp<TextStyle>;
|
|
35
36
|
hovered?: StyleProp<ViewStyle>;
|
|
36
37
|
};
|
|
37
|
-
export declare function Button({ testID, type, color, size, disabled, loading, loadingElement, text, startElement, endElement, style, styles, onPress, activeOpacity, touchableHighlightProps, borderRadius, loadingColor, hitSlop, hapticFeedback, }: Props): ReactElement;
|
|
38
|
+
export declare function Button({ testID, type, color, size, disabled, loading, loadingElement, text, startElement, endElement, style, styles, onPress, activeOpacity, touchableHighlightProps, borderRadius, loadingColor, hitSlop, hapticFeedback, accessibilityLabel, }: Props): ReactElement;
|
|
38
39
|
declare const _default: typeof Button;
|
|
39
40
|
export default _default;
|
|
40
41
|
//# sourceMappingURL=Button.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../../src/components/uis/Button/Button.tsx"],"names":[],"mappings":"AAAA,OAAc,EAA+B,KAAK,YAAY,EAAC,MAAM,OAAO,CAAC;AAC7E,OAAO,KAAK,EACV,MAAM,EACN,SAAS,EACT,SAAS,EACT,uBAAuB,EACvB,SAAS,EACV,MAAM,cAAc,CAAC;AAUtB,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AAExC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;AACvD,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,WAAW,GACX,SAAS,GACT,QAAQ,GACR,SAAS,GACT,MAAM,GACN,OAAO,CAAC;AACZ,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAEnE,MAAM,MAAM,KAAK,GAAG;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAC7C,aAAa,CAAC,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC;IACzD,uBAAuB,CAAC,EAAE,IAAI,CAC5B,uBAAuB,EACvB,SAAS,GAAG,eAAe,GAAG,OAAO,CACtC,CAAC;IACF,OAAO,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC7C,cAAc,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../../src/components/uis/Button/Button.tsx"],"names":[],"mappings":"AAAA,OAAc,EAA+B,KAAK,YAAY,EAAC,MAAM,OAAO,CAAC;AAC7E,OAAO,KAAK,EACV,MAAM,EACN,SAAS,EACT,SAAS,EACT,uBAAuB,EACvB,SAAS,EACV,MAAM,cAAc,CAAC;AAUtB,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AAExC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;AACvD,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,WAAW,GACX,SAAS,GACT,QAAQ,GACR,SAAS,GACT,MAAM,GACN,OAAO,CAAC;AACZ,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAEnE,MAAM,MAAM,KAAK,GAAG;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAC7C,aAAa,CAAC,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC;IACzD,uBAAuB,CAAC,EAAE,IAAI,CAC5B,uBAAuB,EACvB,SAAS,GAAG,eAAe,GAAG,OAAO,CACtC,CAAC;IACF,OAAO,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC7C,cAAc,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAC7C,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,KAAK,MAAM,GAAG;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACpC,OAAO,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAChC,CAAC;AAgKF,wBAAgB,MAAM,CAAC,EACrB,MAAM,EACN,IAAc,EACd,KAAiB,EACjB,IAAe,EACf,QAAQ,EACR,OAAe,EACf,cAAc,EACd,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,KAAK,EACL,MAAM,EACN,OAAO,EACP,aAAmB,EACnB,uBAAuB,EACvB,YAAgB,EAChB,YAAY,EACZ,OAAgD,EAChD,cAAc,EACd,kBAAkB,GACnB,EAAE,KAAK,GAAG,YAAY,CA+LtB;wBAGoC,OAAO,MAAM;AAAlD,wBAAmD"}
|
|
@@ -114,7 +114,7 @@ const useButtonState = ({ disabled, onPress, loading, }) => {
|
|
|
114
114
|
isLoading: loading,
|
|
115
115
|
}), [disabled, onPress, loading]);
|
|
116
116
|
};
|
|
117
|
-
export function Button({ testID, type = 'solid', color = 'primary', size = 'medium', disabled, loading = false, loadingElement, text, startElement, endElement, style, styles, onPress, activeOpacity = 0.8, touchableHighlightProps, borderRadius = 4, loadingColor, hitSlop = { top: 8, bottom: 8, left: 8, right: 8 }, hapticFeedback, }) {
|
|
117
|
+
export function Button({ testID, type = 'solid', color = 'primary', size = 'medium', disabled, loading = false, loadingElement, text, startElement, endElement, style, styles, onPress, activeOpacity = 0.8, touchableHighlightProps, borderRadius = 4, loadingColor, hitSlop = { top: 8, bottom: 8, left: 8, right: 8 }, hapticFeedback, accessibilityLabel, }) {
|
|
118
118
|
const ref = useRef(null);
|
|
119
119
|
const hovered = useHover(ref);
|
|
120
120
|
const { theme } = useTheme();
|
|
@@ -209,7 +209,7 @@ export function Button({ testID, type = 'solid', color = 'primary', size = 'medi
|
|
|
209
209
|
border-radius: ${borderRadius}px;
|
|
210
210
|
`,
|
|
211
211
|
], [style, borderRadius]);
|
|
212
|
-
return (_jsx(TouchableHighlight, { activeOpacity: activeOpacity, delayPressIn: 30, disabled: innerDisabled || loading || !onPress, hitSlop: hitSlop, onPress: handlePress, ref: Platform.select({
|
|
212
|
+
return (_jsx(TouchableHighlight, { accessibilityLabel: accessibilityLabel ?? (typeof text === 'string' ? text : undefined), accessibilityRole: "button", activeOpacity: activeOpacity, delayPressIn: 30, disabled: innerDisabled || loading || !onPress, hitSlop: hitSlop, onPress: handlePress, ref: Platform.select({
|
|
213
213
|
web: ref,
|
|
214
214
|
default: undefined,
|
|
215
215
|
}), style: buttonStyles, testID: testID, underlayColor: type === 'text' ? 'transparent' : theme.role.underlay, ...touchableHighlightProps, children: renderContainer({
|
|
@@ -18,8 +18,9 @@ export interface CheckboxProps {
|
|
|
18
18
|
checked?: boolean;
|
|
19
19
|
text?: string | ReactElement;
|
|
20
20
|
direction?: 'left' | 'right';
|
|
21
|
+
accessibilityLabel?: string;
|
|
21
22
|
}
|
|
22
|
-
export declare function Checkbox({ style, styles, text, direction, color, size, disabled, checked, onPress, }: CheckboxProps): ReactElement;
|
|
23
|
+
export declare function Checkbox({ style, styles, text, direction, color, size, disabled, checked, onPress, accessibilityLabel, }: CheckboxProps): ReactElement;
|
|
23
24
|
declare const _default: typeof Checkbox;
|
|
24
25
|
export default _default;
|
|
25
26
|
//# sourceMappingURL=Checkbox.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../../src/components/uis/Checkbox/Checkbox.tsx"],"names":[],"mappings":"AAAA,OAAc,EAA0C,KAAK,YAAY,EAAC,MAAM,OAAO,CAAC;AACxF,OAAO,KAAK,EAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAC,MAAM,cAAc,CAAC;AAYlE,KAAK,MAAM,GAAG;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,WAAW,GACX,SAAS,GACT,QAAQ,GACR,SAAS,GACT,MAAM,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../../src/components/uis/Checkbox/Checkbox.tsx"],"names":[],"mappings":"AAAA,OAAc,EAA0C,KAAK,YAAY,EAAC,MAAM,OAAO,CAAC;AACxF,OAAO,KAAK,EAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAC,MAAM,cAAc,CAAC;AAYlE,KAAK,MAAM,GAAG;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,WAAW,GACX,SAAS,GACT,QAAQ,GACR,SAAS,GACT,MAAM,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AA6BD,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,MAAM,EACN,IAAI,EACJ,SAAmB,EACnB,KAAiB,EACjB,IAAe,EACf,QAAgB,EAChB,OAAe,EACf,OAAO,EACP,kBAAkB,GACnB,EAAE,aAAa,GAAG,YAAY,CA4I9B;wBAGsC,OAAO,QAAQ;AAAtD,wBAAuD"}
|
|
@@ -29,7 +29,7 @@ const StyledCheck = styled(Icon) `
|
|
|
29
29
|
font-weight: bold;
|
|
30
30
|
color: ${({ theme, $checked }) => ($checked ? theme.bg.basic : 'transparent')};
|
|
31
31
|
`;
|
|
32
|
-
export function Checkbox({ style, styles, text, direction = 'right', color = 'primary', size = 'medium', disabled = false, checked = false, onPress, }) {
|
|
32
|
+
export function Checkbox({ style, styles, text, direction = 'right', color = 'primary', size = 'medium', disabled = false, checked = false, onPress, accessibilityLabel, }) {
|
|
33
33
|
const checkboxSize = typeof size === 'number'
|
|
34
34
|
? size
|
|
35
35
|
: size === 'small'
|
|
@@ -109,7 +109,7 @@ export function Checkbox({ style, styles, text, direction = 'right', color = 'pr
|
|
|
109
109
|
}
|
|
110
110
|
return text;
|
|
111
111
|
}, [text, textStyles]);
|
|
112
|
-
return (_jsx(Container, { activeOpacity: 0.9, disabled: disabled, onPress: onPress, style: style, children: _jsxs(View, { style: containerStyles, children: [_jsx(StyledCheckboxOutlined, { "$checked": checked, "$disabled": disabled, style: [checkboxSizeStyles, styles?.checkbox], testID: "cpk-ui-checkbox", "$type": color, children: _jsx(AnimatedCheckbox, { style: animatedStyles, children: _jsx(StyledCheck, { "$checked": checked, name: "Check", size: checkboxSize * 0.7, style: styles?.check }) }) }), TextElement] }) }));
|
|
112
|
+
return (_jsx(Container, { accessibilityLabel: accessibilityLabel ?? (typeof text === 'string' ? text : undefined), accessibilityRole: "checkbox", accessibilityState: { checked, disabled }, activeOpacity: 0.9, disabled: disabled, onPress: onPress, style: style, children: _jsxs(View, { style: containerStyles, children: [_jsx(StyledCheckboxOutlined, { "$checked": checked, "$disabled": disabled, style: [checkboxSizeStyles, styles?.checkbox], testID: "cpk-ui-checkbox", "$type": color, children: _jsx(AnimatedCheckbox, { style: animatedStyles, children: _jsx(StyledCheck, { "$checked": checked, name: "Check", size: checkboxSize * 0.7, style: styles?.check }) }) }), TextElement] }) }));
|
|
113
113
|
}
|
|
114
114
|
// Export memoized component for better performance
|
|
115
115
|
export default React.memo(Checkbox);
|
|
@@ -47,6 +47,7 @@ export type EditTextProps = {
|
|
|
47
47
|
numberOfLines?: TextInputProps['numberOfLines'];
|
|
48
48
|
maxLength?: TextInputProps['maxLength'];
|
|
49
49
|
hideCounter?: boolean;
|
|
50
|
+
accessibilityLabel?: string;
|
|
50
51
|
textInputProps?: Omit<TextInputProps, 'value' | 'onChange' | 'numberOfLines' | 'multiline' | 'onChange' | 'onChangeText' | 'placeholder' | 'placeholderTextColor' | 'onFocus' | 'onBlur' | 'editable' | 'autoComplete' | 'autoCapitalize' | 'secureTextEntry' | 'onSubmitEditing' | 'maxLength'>;
|
|
51
52
|
colors?: {
|
|
52
53
|
basic?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditText.d.ts","sourceRoot":"","sources":["../../../../src/components/uis/EditText/EditText.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAa,SAAS,EAAC,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,EAOZ,KAAK,YAAY,EAClB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,SAAS,EACT,SAAS,EACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAGL,SAAS,EAGV,MAAM,cAAc,CAAC;AAUtB,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACjC,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAErE,MAAM,MAAM,cAAc,GACtB,UAAU,GACV,OAAO,GACP,SAAS,GACT,SAAS,GACT,OAAO,CAAC;AAEZ,KAAK,UAAU,GAAG,CAAC,KAAK,EAAE,cAAc,KAAK,YAAY,CAAC;AAE1D,KAAK,gBAAgB,GACjB,CAAC,CAAC,EAAC,KAAK,EAAE,MAAM,EAAC,EAAE;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAC,KAAK,YAAY,CAAC,GAC5E,IAAI,CAAC;AAET,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,gBAAgB,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1E,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IAGxB,YAAY,CAAC,EAAE,YAAY,GAAG,gBAAgB,CAAC;IAC/C,UAAU,CAAC,EAAE,YAAY,GAAG,gBAAgB,CAAC;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAC7B,UAAU,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;IACnC,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACtC,YAAY,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;IAC9C,WAAW,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;IAC5C,gBAAgB,CAAC,EAAE,cAAc,CAAC,sBAAsB,CAAC,CAAC;IAC1D,OAAO,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IAChD,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACtC,YAAY,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;IAC9C,cAAc,CAAC,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAClD,eAAe,CAAC,EAAE,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACpD,eAAe,CAAC,EAAE,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACpD,aAAa,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IAChD,SAAS,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IACxC,WAAW,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"EditText.d.ts","sourceRoot":"","sources":["../../../../src/components/uis/EditText/EditText.tsx"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ import { cloneElemWithDefaultColors } from '../../../utils/guards';
|
|
|
8
8
|
import { useTheme } from '../../../providers/ThemeProvider';
|
|
9
9
|
import { Typography } from '../Typography/Typography';
|
|
10
10
|
import { isWeb, safePlatformSelect } from '../../../utils/platform';
|
|
11
|
-
export const EditText = forwardRef(({ testID, textInputProps, style, styles, size = 'medium', label, error, startElement, endElement, multiline = false, value = '', placeholder, placeholderColor, onChange, onChangeText, onFocus, onBlur, onSubmitEditing, numberOfLines, maxLength, hideCounter = false, autoComplete, autoCapitalize = 'none', secureTextEntry = false, editable = true, direction = 'column', decoration = 'underline', colors = {}, required = false, }, ref) => {
|
|
11
|
+
export const EditText = forwardRef(({ testID, textInputProps, style, styles, size = 'medium', label, error, startElement, endElement, multiline = false, value = '', placeholder, placeholderColor, onChange, onChangeText, onFocus, onBlur, onSubmitEditing, numberOfLines, maxLength, hideCounter = false, autoComplete, autoCapitalize = 'none', secureTextEntry = false, editable = true, direction = 'column', decoration = 'underline', colors = {}, required = false, accessibilityLabel, }, ref) => {
|
|
12
12
|
EditText.displayName = 'EditText';
|
|
13
13
|
const { theme } = useTheme();
|
|
14
14
|
// Calculate sizes based on size prop
|
|
@@ -215,7 +215,7 @@ export const EditText = forwardRef(({ testID, textInputProps, style, styles, siz
|
|
|
215
215
|
margin-right: 4px;
|
|
216
216
|
`,
|
|
217
217
|
})
|
|
218
|
-
: startElement, _jsx(TextInput, { autoCapitalize: autoCapitalize, autoComplete: autoComplete, editable: editable, maxLength: maxLength, multiline: multiline, numberOfLines: numberOfLines, onBlur: (e) => {
|
|
218
|
+
: startElement, _jsx(TextInput, { accessibilityLabel: accessibilityLabel ?? (typeof label === 'string' ? label : placeholder), autoCapitalize: autoCapitalize, autoComplete: autoComplete, editable: editable, maxLength: maxLength, multiline: multiline, numberOfLines: numberOfLines, onBlur: (e) => {
|
|
219
219
|
setFocused(false);
|
|
220
220
|
onBlur?.(e);
|
|
221
221
|
}, onChange: onChange, onChangeText: onChangeText, onFocus: (e) => {
|
|
@@ -27,8 +27,9 @@ export type IconButtonProps = {
|
|
|
27
27
|
activeOpacity?: number;
|
|
28
28
|
touchableHighlightProps?: Omit<TouchableHighlightProps, 'onPress' | 'style'>;
|
|
29
29
|
hapticFeedback?: Haptics.ImpactFeedbackStyle;
|
|
30
|
+
accessibilityLabel?: string;
|
|
30
31
|
};
|
|
31
|
-
export declare function IconButton({ testID, type, color, size, disabled, loading, loadingElement, icon, iconElement, style, styles, onPress, activeOpacity, touchableHighlightProps, hapticFeedback, }: IconButtonProps): ReactElement;
|
|
32
|
+
export declare function IconButton({ testID, type, color, size, disabled, loading, loadingElement, icon, iconElement, style, styles, onPress, activeOpacity, touchableHighlightProps, hapticFeedback, accessibilityLabel, }: IconButtonProps): ReactElement;
|
|
32
33
|
declare const _default: typeof IconButton;
|
|
33
34
|
export default _default;
|
|
34
35
|
//# sourceMappingURL=IconButton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IconButton.d.ts","sourceRoot":"","sources":["../../../../src/components/uis/IconButton/IconButton.tsx"],"names":[],"mappings":"AAAA,OAAc,EAA+B,KAAK,YAAY,EAAC,MAAM,OAAO,CAAC;AAC7E,OAAO,KAAK,EAAC,SAAS,EAAE,uBAAuB,EAAE,SAAS,EAAC,MAAM,cAAc,CAAC;AAKhF,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAC;AAK3C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AAExC,KAAK,MAAM,GAAG;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAChC,CAAC;AAEF,KAAK,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;AAEhD,KAAK,eAAe,GAChB,SAAS,GACT,WAAW,GACX,SAAS,GACT,QAAQ,GACR,SAAS,GACT,MAAM,GACN,OAAO,CAAC;AAEZ,KAAK,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAsD5D,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,IAAI,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uBAAuB,CAAC,EAAE,IAAI,CAAC,uBAAuB,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC;IAC7E,cAAc,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"IconButton.d.ts","sourceRoot":"","sources":["../../../../src/components/uis/IconButton/IconButton.tsx"],"names":[],"mappings":"AAAA,OAAc,EAA+B,KAAK,YAAY,EAAC,MAAM,OAAO,CAAC;AAC7E,OAAO,KAAK,EAAC,SAAS,EAAE,uBAAuB,EAAE,SAAS,EAAC,MAAM,cAAc,CAAC;AAKhF,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAC;AAK3C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AAExC,KAAK,MAAM,GAAG;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAChC,CAAC;AAEF,KAAK,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;AAEhD,KAAK,eAAe,GAChB,SAAS,GACT,WAAW,GACX,SAAS,GACT,QAAQ,GACR,SAAS,GACT,MAAM,GACN,OAAO,CAAC;AAEZ,KAAK,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAsD5D,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,IAAI,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uBAAuB,CAAC,EAAE,IAAI,CAAC,uBAAuB,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC;IAC7E,cAAc,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAC7C,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,IAAc,EACd,KAAiB,EACjB,IAAe,EACf,QAAQ,EACR,OAAe,EACf,cAAc,EACd,IAAI,EACJ,WAAW,EACX,KAAK,EACL,MAAM,EACN,OAAO,EACP,aAAoB,EACpB,uBAAuB,EACvB,cAAc,EACd,kBAAkB,GACnB,EAAE,eAAe,GAAG,YAAY,CA0JhC;wBAGwC,OAAO,UAAU;AAA1D,wBAA2D"}
|
|
@@ -40,7 +40,7 @@ const ButtonStyles = ({ theme, type, color, loading, disabled, }) => {
|
|
|
40
40
|
disabledTextColor: theme.button.disabled.text,
|
|
41
41
|
};
|
|
42
42
|
};
|
|
43
|
-
export function IconButton({ testID, type = 'solid', color = 'primary', size = 'medium', disabled, loading = false, loadingElement, icon, iconElement, style, styles, onPress, activeOpacity = 0.95, touchableHighlightProps, hapticFeedback, }) {
|
|
43
|
+
export function IconButton({ testID, type = 'solid', color = 'primary', size = 'medium', disabled, loading = false, loadingElement, icon, iconElement, style, styles, onPress, activeOpacity = 0.95, touchableHighlightProps, hapticFeedback, accessibilityLabel, }) {
|
|
44
44
|
const ref = useRef(null);
|
|
45
45
|
const hovered = useHover(ref);
|
|
46
46
|
const { theme } = useTheme();
|
|
@@ -136,7 +136,7 @@ export function IconButton({ testID, type = 'solid', color = 'primary', size = '
|
|
|
136
136
|
hovered && !disabled && compositeStyles.hovered,
|
|
137
137
|
disabled && compositeStyles.disabled,
|
|
138
138
|
], [borderRadiusStr, compositeStyles, hovered, disabled]);
|
|
139
|
-
return (_jsx(View, { style: containerStyles, children: _jsx(TouchableHighlight, { activeOpacity: activeOpacity, delayPressIn: 50, disabled: disabled || loading, onPress: handlePress, ref: Platform.select({
|
|
139
|
+
return (_jsx(View, { style: containerStyles, children: _jsx(TouchableHighlight, { accessibilityLabel: accessibilityLabel ?? icon, accessibilityRole: "button", activeOpacity: activeOpacity, delayPressIn: 50, disabled: disabled || loading, onPress: handlePress, ref: Platform.select({
|
|
140
140
|
web: ref,
|
|
141
141
|
default: undefined,
|
|
142
142
|
}), style: css `
|
|
@@ -21,8 +21,9 @@ export type RadioButtonProps = {
|
|
|
21
21
|
selected?: boolean;
|
|
22
22
|
endElement?: ReactElement;
|
|
23
23
|
startElement?: ReactElement;
|
|
24
|
+
accessibilityLabel?: string;
|
|
24
25
|
};
|
|
25
|
-
export default function RadioButton({ testID, style, styles, endElement, startElement, type, size, disabled, selected, onPress, label, labelPosition, }: RadioButtonProps): ReactElement;
|
|
26
|
+
export default function RadioButton({ testID, style, styles, endElement, startElement, type, size, disabled, selected, onPress, label, labelPosition, accessibilityLabel, }: RadioButtonProps): ReactElement;
|
|
26
27
|
declare const MemoizedRadioButton: React.MemoExoticComponent<typeof RadioButton>;
|
|
27
28
|
export { MemoizedRadioButton as RadioButton };
|
|
28
29
|
//# sourceMappingURL=RadioButton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioButton.d.ts","sourceRoot":"","sources":["../../../../src/components/uis/RadioGroup/RadioButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAoD,KAAK,YAAY,EAAC,MAAM,OAAO,CAAC;AAClG,OAAO,KAAK,EAEV,SAAS,EACT,SAAS,EACT,SAAS,EACV,MAAM,cAAc,CAAC;AAUtB,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,cAAc,CAAC;AAElD,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAExE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,aAAa,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACrC,MAAM,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,CAAC;AASF,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,MAAM,EACN,KAAK,EACL,MAAM,EACN,UAAU,EACV,YAAY,EACZ,IAAgB,EAChB,IAAe,EACf,QAAgB,EAChB,QAAQ,EACR,OAAO,EACP,KAAK,EACL,aAAuB,
|
|
1
|
+
{"version":3,"file":"RadioButton.d.ts","sourceRoot":"","sources":["../../../../src/components/uis/RadioGroup/RadioButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAoD,KAAK,YAAY,EAAC,MAAM,OAAO,CAAC;AAClG,OAAO,KAAK,EAEV,SAAS,EACT,SAAS,EACT,SAAS,EACV,MAAM,cAAc,CAAC;AAUtB,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,cAAc,CAAC;AAElD,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAExE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,aAAa,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACrC,MAAM,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AASF,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,MAAM,EACN,KAAK,EACL,MAAM,EACN,UAAU,EACV,YAAY,EACZ,IAAgB,EAChB,IAAe,EACf,QAAgB,EAChB,QAAQ,EACR,OAAO,EACP,KAAK,EACL,aAAuB,EACvB,kBAAkB,GACnB,EAAE,gBAAgB,GAAG,YAAY,CA4HjC;AAGD,QAAA,MAAM,mBAAmB,+CAA0B,CAAC;AACpD,OAAO,EAAC,mBAAmB,IAAI,WAAW,EAAC,CAAC"}
|
|
@@ -8,7 +8,7 @@ const Container = styled.TouchableOpacity `
|
|
|
8
8
|
align-items: center;
|
|
9
9
|
`;
|
|
10
10
|
const StyledRadioCircle = Animated.createAnimatedComponent(RadioWrapper);
|
|
11
|
-
export default function RadioButton({ testID, style, styles, endElement, startElement, type = 'primary', size = 'medium', disabled = false, selected, onPress, label, labelPosition = 'right', }) {
|
|
11
|
+
export default function RadioButton({ testID, style, styles, endElement, startElement, type = 'primary', size = 'medium', disabled = false, selected, onPress, label, labelPosition = 'right', accessibilityLabel, }) {
|
|
12
12
|
const [innerLayout, setInnerLayout] = useState();
|
|
13
13
|
const fadeAnim = useRef(new Animated.Value(selected ? 1 : 0)).current;
|
|
14
14
|
const scaleAnim = useRef(new Animated.Value(selected ? 1 : 0)).current;
|
|
@@ -62,7 +62,7 @@ export default function RadioButton({ testID, style, styles, endElement, startEl
|
|
|
62
62
|
transform: [{ scale: scaleAnim }],
|
|
63
63
|
},
|
|
64
64
|
], [innerLayout, styles?.circle, fadeAnim, scaleAnim]);
|
|
65
|
-
return (_jsx(Container, { activeOpacity: 0.9, disabled: disabled, onPress: onPress, style: style, testID: testID, children: _jsxs(View, { style: containerStyles, children: [startElement, label && labelPosition === 'left' ? (_jsx(ColoredText, { "$disabled": !!disabled, "$selected": !!selected, "$size": size, style: styles?.label, "$type": type, children: label })) : null, _jsx(RadioButtonWrapper, { "$disabled": disabled, "$selected": !!selected, "$size": size, style: styles?.circleWrapper, "$type": type, children: _jsx(StyledRadioCircle, { "$disabled": !!disabled, onLayout: handleLayout, "$selected": !!selected, style: animatedStyles, testID: `circle-${testID}`, "$type": type }) }), label && labelPosition === 'right' ? (_jsx(ColoredText, { "$disabled": !!disabled, "$selected": !!selected, "$size": size, style: styles?.label, "$type": type, children: label })) : null, endElement] }) }));
|
|
65
|
+
return (_jsx(Container, { accessibilityLabel: accessibilityLabel ?? label, accessibilityRole: "radio", accessibilityState: { selected, disabled }, activeOpacity: 0.9, disabled: disabled, onPress: onPress, style: style, testID: testID, children: _jsxs(View, { style: containerStyles, children: [startElement, label && labelPosition === 'left' ? (_jsx(ColoredText, { "$disabled": !!disabled, "$selected": !!selected, "$size": size, style: styles?.label, "$type": type, children: label })) : null, _jsx(RadioButtonWrapper, { "$disabled": disabled, "$selected": !!selected, "$size": size, style: styles?.circleWrapper, "$type": type, children: _jsx(StyledRadioCircle, { "$disabled": !!disabled, onLayout: handleLayout, "$selected": !!selected, style: animatedStyles, testID: `circle-${testID}`, "$type": type }) }), label && labelPosition === 'right' ? (_jsx(ColoredText, { "$disabled": !!disabled, "$selected": !!selected, "$size": size, style: styles?.label, "$type": type, children: label })) : null, endElement] }) }));
|
|
66
66
|
}
|
|
67
67
|
// Export memoized component for better performance
|
|
68
68
|
const MemoizedRadioButton = React.memo(RadioButton);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SegmentedControl.d.ts","sourceRoot":"","sources":["../../../../src/components/uis/SegmentedControl/SegmentedControl.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAuB,KAAK,YAAY,EAAC,MAAM,OAAO,CAAC;AACrE,OAAO,KAAK,EAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAC,MAAM,cAAc,CAAC;AAQlE,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAC7E,MAAM,MAAM,yBAAyB,GACjC,SAAS,GACT,WAAW,GACX,SAAS,GACT,QAAQ,GACR,SAAS,GACT,MAAM,GACN,OAAO,CAAC;AAEZ,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC;CAC7B,CAAC;AAEF,KAAK,MAAM,GAAG;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC/B,eAAe,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5B,YAAY,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACjD,KAAK,CAAC,EAAE,yBAAyB,CAAC;IAClC,IAAI,CAAC,EAAE,wBAAwB,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AA6EF,iBAAS,yBAAyB,CAAC,EACjC,MAAM,EACN,MAAM,EACN,aAAa,EACb,aAAa,EACb,KAAiB,EACjB,IAAe,EACf,QAAgB,EAChB,KAAK,EACL,MAAM,EACN,YAAgB,GACjB,EAAE,qBAAqB,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"SegmentedControl.d.ts","sourceRoot":"","sources":["../../../../src/components/uis/SegmentedControl/SegmentedControl.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAuB,KAAK,YAAY,EAAC,MAAM,OAAO,CAAC;AACrE,OAAO,KAAK,EAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAC,MAAM,cAAc,CAAC;AAQlE,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAC7E,MAAM,MAAM,yBAAyB,GACjC,SAAS,GACT,WAAW,GACX,SAAS,GACT,QAAQ,GACR,SAAS,GACT,MAAM,GACN,OAAO,CAAC;AAEZ,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC;CAC7B,CAAC;AAEF,KAAK,MAAM,GAAG;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC/B,eAAe,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5B,YAAY,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACjD,KAAK,CAAC,EAAE,yBAAyB,CAAC;IAClC,IAAI,CAAC,EAAE,wBAAwB,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AA6EF,iBAAS,yBAAyB,CAAC,EACjC,MAAM,EACN,MAAM,EACN,aAAa,EACb,aAAa,EACb,KAAiB,EACjB,IAAe,EACf,QAAgB,EAChB,KAAK,EACL,MAAM,EACN,YAAgB,GACjB,EAAE,qBAAqB,GAAG,YAAY,CA6FtC;AAGD,eAAO,MAAM,gBAAgB,6DAE5B,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -86,7 +86,7 @@ function SegmentedControlContainer({ testID, values, selectedValue, onValueChang
|
|
|
86
86
|
const isSelected = selectedValue === item.value;
|
|
87
87
|
const isFirst = index === 0;
|
|
88
88
|
const isLast = index === values.length - 1;
|
|
89
|
-
return (_jsx(TouchableOpacity, { testID: `segment-${index}`, activeOpacity: 0.7, disabled: disabled, onPress: () => handlePress(item.value), style: [
|
|
89
|
+
return (_jsx(TouchableOpacity, { testID: `segment-${index}`, accessibilityLabel: typeof item.text === 'string' ? item.text : undefined, accessibilityRole: "button", accessibilityState: { selected: isSelected }, activeOpacity: 0.7, disabled: disabled, onPress: () => handlePress(item.value), style: [
|
|
90
90
|
compositeStyles.segment,
|
|
91
91
|
isSelected && compositeStyles.selectedSegment,
|
|
92
92
|
{
|
|
@@ -22,8 +22,9 @@ type Props = {
|
|
|
22
22
|
onElement?: any;
|
|
23
23
|
offElement?: any;
|
|
24
24
|
onPress?: () => void;
|
|
25
|
+
accessibilityLabel?: string;
|
|
25
26
|
};
|
|
26
|
-
export declare function SwitchToggle({ testID, isOn, style, styles, duration, onElement, size, offElement, onPress, }: Props): ReactElement;
|
|
27
|
+
export declare function SwitchToggle({ testID, isOn, style, styles, duration, onElement, size, offElement, onPress, accessibilityLabel, }: Props): ReactElement;
|
|
27
28
|
declare const _default: typeof SwitchToggle;
|
|
28
29
|
export default _default;
|
|
29
30
|
//# sourceMappingURL=SwitchToggle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwitchToggle.d.ts","sourceRoot":"","sources":["../../../../src/components/uis/SwitchToggle/SwitchToggle.tsx"],"names":[],"mappings":"AAAA,OAAc,EAA4C,KAAK,YAAY,EAAC,MAAM,OAAO,CAAC;AAC1F,OAAO,KAAK,EAAC,SAAS,EAAE,SAAS,EAAC,MAAM,cAAc,CAAC;AAQvD,KAAK,MAAM,GAAG;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,kBAAkB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1C,mBAAmB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzE,KAAK,KAAK,GAAG;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"SwitchToggle.d.ts","sourceRoot":"","sources":["../../../../src/components/uis/SwitchToggle/SwitchToggle.tsx"],"names":[],"mappings":"AAAA,OAAc,EAA4C,KAAK,YAAY,EAAC,MAAM,OAAO,CAAC;AAC1F,OAAO,KAAK,EAAC,SAAS,EAAE,SAAS,EAAC,MAAM,cAAc,CAAC;AAQvD,KAAK,MAAM,GAAG;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,kBAAkB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1C,mBAAmB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzE,KAAK,KAAK,GAAG;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AA+CF,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,IAAI,EACJ,KAAK,EACL,MAAM,EACN,QAAc,EACd,SAAS,EACT,IAAe,EACf,UAAU,EACV,OAAO,EACP,kBAAkB,GACnB,EAAE,KAAK,GAAG,YAAY,CAqNtB;wBAG0C,OAAO,YAAY;AAA9D,wBAA+D"}
|
|
@@ -43,7 +43,7 @@ const largeCircle = {
|
|
|
43
43
|
height: 32,
|
|
44
44
|
borderRadius: 16,
|
|
45
45
|
};
|
|
46
|
-
export function SwitchToggle({ testID, isOn, style, styles, duration = 300, onElement, size = 'medium', offElement, onPress, }) {
|
|
46
|
+
export function SwitchToggle({ testID, isOn, style, styles, duration = 300, onElement, size = 'medium', offElement, onPress, accessibilityLabel, }) {
|
|
47
47
|
const { theme } = useTheme();
|
|
48
48
|
// Memoize size-based configurations
|
|
49
49
|
const sizeConfig = useMemo(() => {
|
|
@@ -181,7 +181,7 @@ export function SwitchToggle({ testID, isOn, style, styles, duration = 300, onEl
|
|
|
181
181
|
}),
|
|
182
182
|
},
|
|
183
183
|
], [switchStyles, padding, animXValue]);
|
|
184
|
-
return (_jsx(TouchableOpacity, { accessibilityRole: "switch", activeOpacity: 0.8, onPress: onPress, style: style, testID: testID, children: _jsxs(AnimatedContainer, { style: containerStyles, children: [isOn ? OnElement : OffElement, CircleButton] }) }));
|
|
184
|
+
return (_jsx(TouchableOpacity, { accessibilityLabel: accessibilityLabel, accessibilityRole: "switch", accessibilityState: { checked: isOn }, activeOpacity: 0.8, onPress: onPress, style: style, testID: testID, children: _jsxs(AnimatedContainer, { style: containerStyles, children: [isOn ? OnElement : OffElement, CircleButton] }) }));
|
|
185
185
|
}
|
|
186
186
|
// Export memoized component for better performance
|
|
187
187
|
export default React.memo(SwitchToggle);
|
package/package.json
CHANGED
|
@@ -545,6 +545,80 @@ describe('[Button]', () => {
|
|
|
545
545
|
});
|
|
546
546
|
});
|
|
547
547
|
|
|
548
|
+
describe('[Button] accessibility', () => {
|
|
549
|
+
it('should have accessibilityRole="button"', () => {
|
|
550
|
+
testingLib = render(
|
|
551
|
+
Component({
|
|
552
|
+
props: {
|
|
553
|
+
testID: 'a11y-button',
|
|
554
|
+
text: 'Click me',
|
|
555
|
+
},
|
|
556
|
+
}),
|
|
557
|
+
);
|
|
558
|
+
|
|
559
|
+
const button = testingLib.getByTestId('a11y-button');
|
|
560
|
+
expect(button.props.accessibilityRole).toBe('button');
|
|
561
|
+
});
|
|
562
|
+
|
|
563
|
+
it('should use text as default accessibilityLabel', () => {
|
|
564
|
+
testingLib = render(
|
|
565
|
+
Component({
|
|
566
|
+
props: {
|
|
567
|
+
testID: 'a11y-button',
|
|
568
|
+
text: 'Submit',
|
|
569
|
+
},
|
|
570
|
+
}),
|
|
571
|
+
);
|
|
572
|
+
|
|
573
|
+
const button = testingLib.getByTestId('a11y-button');
|
|
574
|
+
expect(button.props.accessibilityLabel).toBe('Submit');
|
|
575
|
+
});
|
|
576
|
+
|
|
577
|
+
it('should use custom accessibilityLabel when provided', () => {
|
|
578
|
+
testingLib = render(
|
|
579
|
+
Component({
|
|
580
|
+
props: {
|
|
581
|
+
testID: 'a11y-button',
|
|
582
|
+
text: 'Submit',
|
|
583
|
+
accessibilityLabel: 'Submit form',
|
|
584
|
+
},
|
|
585
|
+
}),
|
|
586
|
+
);
|
|
587
|
+
|
|
588
|
+
const button = testingLib.getByTestId('a11y-button');
|
|
589
|
+
expect(button.props.accessibilityLabel).toBe('Submit form');
|
|
590
|
+
});
|
|
591
|
+
|
|
592
|
+
it('should have undefined accessibilityLabel when text is ReactElement', () => {
|
|
593
|
+
testingLib = render(
|
|
594
|
+
Component({
|
|
595
|
+
props: {
|
|
596
|
+
testID: 'a11y-button',
|
|
597
|
+
text: <Text>Custom</Text>,
|
|
598
|
+
},
|
|
599
|
+
}),
|
|
600
|
+
);
|
|
601
|
+
|
|
602
|
+
const button = testingLib.getByTestId('a11y-button');
|
|
603
|
+
expect(button.props.accessibilityLabel).toBeUndefined();
|
|
604
|
+
});
|
|
605
|
+
|
|
606
|
+
it('should allow custom accessibilityLabel with ReactElement text', () => {
|
|
607
|
+
testingLib = render(
|
|
608
|
+
Component({
|
|
609
|
+
props: {
|
|
610
|
+
testID: 'a11y-button',
|
|
611
|
+
text: <Text>Custom</Text>,
|
|
612
|
+
accessibilityLabel: 'Custom button',
|
|
613
|
+
},
|
|
614
|
+
}),
|
|
615
|
+
);
|
|
616
|
+
|
|
617
|
+
const button = testingLib.getByTestId('a11y-button');
|
|
618
|
+
expect(button.props.accessibilityLabel).toBe('Custom button');
|
|
619
|
+
});
|
|
620
|
+
});
|
|
621
|
+
|
|
548
622
|
describe('[Button] custom theme', () => {
|
|
549
623
|
it('should render with custom primary color from theme', () => {
|
|
550
624
|
const customTheme = {
|
|
@@ -51,6 +51,7 @@ export type Props = {
|
|
|
51
51
|
>;
|
|
52
52
|
hitSlop?: null | Insets | number | undefined;
|
|
53
53
|
hapticFeedback?: Haptics.ImpactFeedbackStyle;
|
|
54
|
+
accessibilityLabel?: string;
|
|
54
55
|
};
|
|
55
56
|
|
|
56
57
|
type Styles = {
|
|
@@ -241,6 +242,7 @@ export function Button({
|
|
|
241
242
|
loadingColor,
|
|
242
243
|
hitSlop = {top: 8, bottom: 8, left: 8, right: 8},
|
|
243
244
|
hapticFeedback,
|
|
245
|
+
accessibilityLabel,
|
|
244
246
|
}: Props): ReactElement {
|
|
245
247
|
const ref = useRef<React.ElementRef<typeof TouchableHighlight>>(null);
|
|
246
248
|
const hovered = useHover(ref);
|
|
@@ -410,6 +412,8 @@ export function Button({
|
|
|
410
412
|
|
|
411
413
|
return (
|
|
412
414
|
<TouchableHighlight
|
|
415
|
+
accessibilityLabel={accessibilityLabel ?? (typeof text === 'string' ? text : undefined)}
|
|
416
|
+
accessibilityRole="button"
|
|
413
417
|
activeOpacity={activeOpacity}
|
|
414
418
|
delayPressIn={30}
|
|
415
419
|
disabled={innerDisabled || loading || !onPress}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, {type ReactElement} from 'react';
|
|
2
|
-
import {View} from 'react-native';
|
|
2
|
+
import {Text, View} from 'react-native';
|
|
3
3
|
import type {RenderAPI} from '@testing-library/react-native';
|
|
4
4
|
import {render} from '@testing-library/react-native';
|
|
5
5
|
|
|
@@ -170,4 +170,98 @@ describe('[Checkbox]', () => {
|
|
|
170
170
|
expect(checkbox).toBeTruthy();
|
|
171
171
|
});
|
|
172
172
|
});
|
|
173
|
+
|
|
174
|
+
describe('accessibility', () => {
|
|
175
|
+
it('should have accessibilityRole="checkbox"', () => {
|
|
176
|
+
testingLib = render(
|
|
177
|
+
Component({
|
|
178
|
+
text: 'Accept terms',
|
|
179
|
+
}),
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
const json = testingLib.toJSON();
|
|
183
|
+
expect(json).toBeTruthy();
|
|
184
|
+
// The root element should have accessibilityRole
|
|
185
|
+
expect((json as any).props.accessibilityRole).toBe('checkbox');
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
it('should use text as default accessibilityLabel', () => {
|
|
189
|
+
testingLib = render(
|
|
190
|
+
Component({
|
|
191
|
+
text: 'Accept terms',
|
|
192
|
+
}),
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
const json = testingLib.toJSON();
|
|
196
|
+
expect((json as any).props.accessibilityLabel).toBe('Accept terms');
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
it('should use custom accessibilityLabel when provided', () => {
|
|
200
|
+
testingLib = render(
|
|
201
|
+
Component({
|
|
202
|
+
text: 'Accept',
|
|
203
|
+
accessibilityLabel: 'Accept terms and conditions',
|
|
204
|
+
}),
|
|
205
|
+
);
|
|
206
|
+
|
|
207
|
+
const json = testingLib.toJSON();
|
|
208
|
+
expect((json as any).props.accessibilityLabel).toBe('Accept terms and conditions');
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
it('should have accessibilityState with checked=true when checked', () => {
|
|
212
|
+
testingLib = render(
|
|
213
|
+
Component({
|
|
214
|
+
text: 'Accept terms',
|
|
215
|
+
checked: true,
|
|
216
|
+
}),
|
|
217
|
+
);
|
|
218
|
+
|
|
219
|
+
const json = testingLib.toJSON();
|
|
220
|
+
expect((json as any).props.accessibilityState).toEqual({
|
|
221
|
+
checked: true,
|
|
222
|
+
disabled: false,
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
it('should have accessibilityState with checked=false when unchecked', () => {
|
|
227
|
+
testingLib = render(
|
|
228
|
+
Component({
|
|
229
|
+
text: 'Accept terms',
|
|
230
|
+
checked: false,
|
|
231
|
+
}),
|
|
232
|
+
);
|
|
233
|
+
|
|
234
|
+
const json = testingLib.toJSON();
|
|
235
|
+
expect((json as any).props.accessibilityState).toEqual({
|
|
236
|
+
checked: false,
|
|
237
|
+
disabled: false,
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
it('should have accessibilityState with disabled=true when disabled', () => {
|
|
242
|
+
testingLib = render(
|
|
243
|
+
Component({
|
|
244
|
+
text: 'Accept terms',
|
|
245
|
+
disabled: true,
|
|
246
|
+
}),
|
|
247
|
+
);
|
|
248
|
+
|
|
249
|
+
const json = testingLib.toJSON();
|
|
250
|
+
expect((json as any).props.accessibilityState).toEqual({
|
|
251
|
+
checked: false,
|
|
252
|
+
disabled: true,
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
it('should have undefined accessibilityLabel when text is ReactElement', () => {
|
|
257
|
+
testingLib = render(
|
|
258
|
+
Component({
|
|
259
|
+
text: <Text>Custom text</Text>,
|
|
260
|
+
}),
|
|
261
|
+
);
|
|
262
|
+
|
|
263
|
+
const json = testingLib.toJSON();
|
|
264
|
+
expect((json as any).props.accessibilityLabel).toBeUndefined();
|
|
265
|
+
});
|
|
266
|
+
});
|
|
173
267
|
});
|
|
@@ -38,6 +38,7 @@ export interface CheckboxProps {
|
|
|
38
38
|
checked?: boolean;
|
|
39
39
|
text?: string | ReactElement;
|
|
40
40
|
direction?: 'left' | 'right';
|
|
41
|
+
accessibilityLabel?: string;
|
|
41
42
|
}
|
|
42
43
|
|
|
43
44
|
const Container = styled(TouchableOpacity)`
|
|
@@ -77,6 +78,7 @@ export function Checkbox({
|
|
|
77
78
|
disabled = false,
|
|
78
79
|
checked = false,
|
|
79
80
|
onPress,
|
|
81
|
+
accessibilityLabel,
|
|
80
82
|
}: CheckboxProps): ReactElement {
|
|
81
83
|
const checkboxSize = typeof size === 'number'
|
|
82
84
|
? size
|
|
@@ -188,6 +190,9 @@ export function Checkbox({
|
|
|
188
190
|
|
|
189
191
|
return (
|
|
190
192
|
<Container
|
|
193
|
+
accessibilityLabel={accessibilityLabel ?? (typeof text === 'string' ? text : undefined)}
|
|
194
|
+
accessibilityRole="checkbox"
|
|
195
|
+
accessibilityState={{checked, disabled}}
|
|
191
196
|
activeOpacity={0.9}
|
|
192
197
|
disabled={disabled}
|
|
193
198
|
onPress={onPress}
|
|
@@ -86,6 +86,7 @@ export type EditTextProps = {
|
|
|
86
86
|
numberOfLines?: TextInputProps['numberOfLines'];
|
|
87
87
|
maxLength?: TextInputProps['maxLength'];
|
|
88
88
|
hideCounter?: boolean;
|
|
89
|
+
accessibilityLabel?: string;
|
|
89
90
|
|
|
90
91
|
textInputProps?: Omit<
|
|
91
92
|
TextInputProps,
|
|
@@ -149,6 +150,7 @@ export const EditText = forwardRef<TextInput, EditTextProps>(
|
|
|
149
150
|
decoration = 'underline',
|
|
150
151
|
colors = {},
|
|
151
152
|
required = false,
|
|
153
|
+
accessibilityLabel,
|
|
152
154
|
}: EditTextProps,
|
|
153
155
|
ref,
|
|
154
156
|
): ReactElement => {
|
|
@@ -410,6 +412,7 @@ export const EditText = forwardRef<TextInput, EditTextProps>(
|
|
|
410
412
|
})
|
|
411
413
|
: startElement}
|
|
412
414
|
<TextInput
|
|
415
|
+
accessibilityLabel={accessibilityLabel ?? (typeof label === 'string' ? label : placeholder)}
|
|
413
416
|
autoCapitalize={autoCapitalize}
|
|
414
417
|
autoComplete={autoComplete}
|
|
415
418
|
editable={editable}
|
|
@@ -162,4 +162,43 @@ describe('[IconButton]', () => {
|
|
|
162
162
|
|
|
163
163
|
expect(json).toBeTruthy();
|
|
164
164
|
});
|
|
165
|
+
|
|
166
|
+
describe('accessibility', () => {
|
|
167
|
+
it('should have accessibilityRole="button"', () => {
|
|
168
|
+
testingLib = render(
|
|
169
|
+
Component({
|
|
170
|
+
testID: 'a11y-icon-button',
|
|
171
|
+
icon: 'Plus',
|
|
172
|
+
}),
|
|
173
|
+
);
|
|
174
|
+
|
|
175
|
+
const button = testingLib.getByTestId('a11y-icon-button');
|
|
176
|
+
expect(button.props.accessibilityRole).toBe('button');
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
it('should use icon name as default accessibilityLabel', () => {
|
|
180
|
+
testingLib = render(
|
|
181
|
+
Component({
|
|
182
|
+
testID: 'a11y-icon-button',
|
|
183
|
+
icon: 'Plus',
|
|
184
|
+
}),
|
|
185
|
+
);
|
|
186
|
+
|
|
187
|
+
const button = testingLib.getByTestId('a11y-icon-button');
|
|
188
|
+
expect(button.props.accessibilityLabel).toBe('Plus');
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
it('should use custom accessibilityLabel when provided', () => {
|
|
192
|
+
testingLib = render(
|
|
193
|
+
Component({
|
|
194
|
+
testID: 'a11y-icon-button',
|
|
195
|
+
icon: 'Plus',
|
|
196
|
+
accessibilityLabel: 'Add new item',
|
|
197
|
+
}),
|
|
198
|
+
);
|
|
199
|
+
|
|
200
|
+
const button = testingLib.getByTestId('a11y-icon-button');
|
|
201
|
+
expect(button.props.accessibilityLabel).toBe('Add new item');
|
|
202
|
+
});
|
|
203
|
+
});
|
|
165
204
|
});
|
|
@@ -99,6 +99,7 @@ export type IconButtonProps = {
|
|
|
99
99
|
activeOpacity?: number;
|
|
100
100
|
touchableHighlightProps?: Omit<TouchableHighlightProps, 'onPress' | 'style'>;
|
|
101
101
|
hapticFeedback?: Haptics.ImpactFeedbackStyle;
|
|
102
|
+
accessibilityLabel?: string;
|
|
102
103
|
};
|
|
103
104
|
|
|
104
105
|
export function IconButton({
|
|
@@ -117,6 +118,7 @@ export function IconButton({
|
|
|
117
118
|
activeOpacity = 0.95,
|
|
118
119
|
touchableHighlightProps,
|
|
119
120
|
hapticFeedback,
|
|
121
|
+
accessibilityLabel,
|
|
120
122
|
}: IconButtonProps): ReactElement {
|
|
121
123
|
const ref = useRef<React.ElementRef<typeof TouchableHighlight>>(null);
|
|
122
124
|
const hovered = useHover(ref);
|
|
@@ -245,6 +247,8 @@ export function IconButton({
|
|
|
245
247
|
return (
|
|
246
248
|
<View style={containerStyles}>
|
|
247
249
|
<TouchableHighlight
|
|
250
|
+
accessibilityLabel={accessibilityLabel ?? icon}
|
|
251
|
+
accessibilityRole="button"
|
|
248
252
|
activeOpacity={activeOpacity}
|
|
249
253
|
delayPressIn={50}
|
|
250
254
|
disabled={disabled || loading}
|
|
@@ -38,6 +38,7 @@ export type RadioButtonProps = {
|
|
|
38
38
|
selected?: boolean;
|
|
39
39
|
endElement?: ReactElement;
|
|
40
40
|
startElement?: ReactElement;
|
|
41
|
+
accessibilityLabel?: string;
|
|
41
42
|
};
|
|
42
43
|
|
|
43
44
|
const Container = styled.TouchableOpacity`
|
|
@@ -60,6 +61,7 @@ export default function RadioButton({
|
|
|
60
61
|
onPress,
|
|
61
62
|
label,
|
|
62
63
|
labelPosition = 'right',
|
|
64
|
+
accessibilityLabel,
|
|
63
65
|
}: RadioButtonProps): ReactElement {
|
|
64
66
|
const [innerLayout, setInnerLayout] = useState<LayoutRectangle>();
|
|
65
67
|
const fadeAnim = useRef(new Animated.Value(selected ? 1 : 0)).current;
|
|
@@ -131,6 +133,9 @@ export default function RadioButton({
|
|
|
131
133
|
|
|
132
134
|
return (
|
|
133
135
|
<Container
|
|
136
|
+
accessibilityLabel={accessibilityLabel ?? label}
|
|
137
|
+
accessibilityRole="radio"
|
|
138
|
+
accessibilityState={{selected, disabled}}
|
|
134
139
|
activeOpacity={0.9}
|
|
135
140
|
disabled={disabled}
|
|
136
141
|
onPress={onPress}
|
|
@@ -284,4 +284,71 @@ describe('[RadioButton]', () => {
|
|
|
284
284
|
expect(baseElement).toBeTruthy();
|
|
285
285
|
});
|
|
286
286
|
});
|
|
287
|
+
|
|
288
|
+
describe('accessibility', () => {
|
|
289
|
+
it('should have accessibilityRole="radio" on RadioButton', async () => {
|
|
290
|
+
component = createComponent(
|
|
291
|
+
<RadioButton label="Option 1" testID="radio-a11y" />,
|
|
292
|
+
);
|
|
293
|
+
|
|
294
|
+
testingLib = render(component);
|
|
295
|
+
|
|
296
|
+
const radioButton = testingLib.getByTestId('radio-a11y');
|
|
297
|
+
expect(radioButton.props.accessibilityRole).toBe('radio');
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
it('should use label as default accessibilityLabel', async () => {
|
|
301
|
+
component = createComponent(
|
|
302
|
+
<RadioButton label="Option 1" testID="radio-a11y" />,
|
|
303
|
+
);
|
|
304
|
+
|
|
305
|
+
testingLib = render(component);
|
|
306
|
+
|
|
307
|
+
const radioButton = testingLib.getByTestId('radio-a11y');
|
|
308
|
+
expect(radioButton.props.accessibilityLabel).toBe('Option 1');
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
it('should use custom accessibilityLabel when provided', async () => {
|
|
312
|
+
component = createComponent(
|
|
313
|
+
<RadioButton
|
|
314
|
+
label="Option 1"
|
|
315
|
+
testID="radio-a11y"
|
|
316
|
+
accessibilityLabel="Select option one"
|
|
317
|
+
/>,
|
|
318
|
+
);
|
|
319
|
+
|
|
320
|
+
testingLib = render(component);
|
|
321
|
+
|
|
322
|
+
const radioButton = testingLib.getByTestId('radio-a11y');
|
|
323
|
+
expect(radioButton.props.accessibilityLabel).toBe('Select option one');
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
it('should have accessibilityState with selected=true when selected', async () => {
|
|
327
|
+
component = createComponent(
|
|
328
|
+
<RadioButton label="Option 1" testID="radio-a11y" selected={true} />,
|
|
329
|
+
);
|
|
330
|
+
|
|
331
|
+
testingLib = render(component);
|
|
332
|
+
|
|
333
|
+
const radioButton = testingLib.getByTestId('radio-a11y');
|
|
334
|
+
expect(radioButton.props.accessibilityState).toEqual({
|
|
335
|
+
selected: true,
|
|
336
|
+
disabled: false,
|
|
337
|
+
});
|
|
338
|
+
});
|
|
339
|
+
|
|
340
|
+
it('should have accessibilityState with disabled=true when disabled', async () => {
|
|
341
|
+
component = createComponent(
|
|
342
|
+
<RadioButton label="Option 1" testID="radio-a11y" disabled={true} />,
|
|
343
|
+
);
|
|
344
|
+
|
|
345
|
+
testingLib = render(component);
|
|
346
|
+
|
|
347
|
+
const radioButton = testingLib.getByTestId('radio-a11y');
|
|
348
|
+
expect(radioButton.props.accessibilityState).toEqual({
|
|
349
|
+
selected: undefined,
|
|
350
|
+
disabled: true,
|
|
351
|
+
});
|
|
352
|
+
});
|
|
353
|
+
});
|
|
287
354
|
});
|
|
@@ -169,6 +169,9 @@ function SegmentedControlContainer({
|
|
|
169
169
|
<TouchableOpacity
|
|
170
170
|
key={`segment-${index}`}
|
|
171
171
|
testID={`segment-${index}`}
|
|
172
|
+
accessibilityLabel={typeof item.text === 'string' ? item.text : undefined}
|
|
173
|
+
accessibilityRole="button"
|
|
174
|
+
accessibilityState={{selected: isSelected}}
|
|
172
175
|
activeOpacity={0.7}
|
|
173
176
|
disabled={disabled}
|
|
174
177
|
onPress={() => handlePress(item.value)}
|
|
@@ -102,4 +102,48 @@ describe('[SwitchToggle]', () => {
|
|
|
102
102
|
expect(baseElement).toBeTruthy();
|
|
103
103
|
});
|
|
104
104
|
});
|
|
105
|
+
|
|
106
|
+
describe('accessibility', () => {
|
|
107
|
+
it('should have accessibilityRole="switch"', () => {
|
|
108
|
+
testingLib = render(
|
|
109
|
+
createComponent(<SwitchToggle isOn={false} onPress={handlePress} />),
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
const switchElement = testingLib.getByRole('switch');
|
|
113
|
+
expect(switchElement).toBeTruthy();
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
it('should have accessibilityState with checked=true when isOn', () => {
|
|
117
|
+
testingLib = render(
|
|
118
|
+
createComponent(<SwitchToggle isOn={true} onPress={handlePress} />),
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
const json = testingLib.toJSON();
|
|
122
|
+
expect((json as any).props.accessibilityState).toEqual({checked: true});
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it('should have accessibilityState with checked=false when not isOn', () => {
|
|
126
|
+
testingLib = render(
|
|
127
|
+
createComponent(<SwitchToggle isOn={false} onPress={handlePress} />),
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
const json = testingLib.toJSON();
|
|
131
|
+
expect((json as any).props.accessibilityState).toEqual({checked: false});
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
it('should use custom accessibilityLabel when provided', () => {
|
|
135
|
+
testingLib = render(
|
|
136
|
+
createComponent(
|
|
137
|
+
<SwitchToggle
|
|
138
|
+
isOn={false}
|
|
139
|
+
onPress={handlePress}
|
|
140
|
+
accessibilityLabel="Toggle dark mode"
|
|
141
|
+
/>,
|
|
142
|
+
),
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
const json = testingLib.toJSON();
|
|
146
|
+
expect((json as any).props.accessibilityLabel).toBe('Toggle dark mode');
|
|
147
|
+
});
|
|
148
|
+
});
|
|
105
149
|
});
|
|
@@ -31,6 +31,7 @@ type Props = {
|
|
|
31
31
|
onElement?: any;
|
|
32
32
|
offElement?: any;
|
|
33
33
|
onPress?: () => void;
|
|
34
|
+
accessibilityLabel?: string;
|
|
34
35
|
};
|
|
35
36
|
|
|
36
37
|
// Using AnimatedView created above - functionally identical to styled(Animated.View)
|
|
@@ -88,6 +89,7 @@ export function SwitchToggle({
|
|
|
88
89
|
size = 'medium',
|
|
89
90
|
offElement,
|
|
90
91
|
onPress,
|
|
92
|
+
accessibilityLabel,
|
|
91
93
|
}: Props): ReactElement {
|
|
92
94
|
const {theme} = useTheme();
|
|
93
95
|
|
|
@@ -287,7 +289,9 @@ export function SwitchToggle({
|
|
|
287
289
|
|
|
288
290
|
return (
|
|
289
291
|
<TouchableOpacity
|
|
292
|
+
accessibilityLabel={accessibilityLabel}
|
|
290
293
|
accessibilityRole="switch"
|
|
294
|
+
accessibilityState={{checked: isOn}}
|
|
291
295
|
activeOpacity={0.8}
|
|
292
296
|
onPress={onPress}
|
|
293
297
|
style={style}
|