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.
Files changed (33) hide show
  1. package/components/uis/Button/Button.d.ts +2 -1
  2. package/components/uis/Button/Button.d.ts.map +1 -1
  3. package/components/uis/Button/Button.js +2 -2
  4. package/components/uis/Checkbox/Checkbox.d.ts +2 -1
  5. package/components/uis/Checkbox/Checkbox.d.ts.map +1 -1
  6. package/components/uis/Checkbox/Checkbox.js +2 -2
  7. package/components/uis/EditText/EditText.d.ts +1 -0
  8. package/components/uis/EditText/EditText.d.ts.map +1 -1
  9. package/components/uis/EditText/EditText.js +2 -2
  10. package/components/uis/IconButton/IconButton.d.ts +2 -1
  11. package/components/uis/IconButton/IconButton.d.ts.map +1 -1
  12. package/components/uis/IconButton/IconButton.js +2 -2
  13. package/components/uis/RadioGroup/RadioButton.d.ts +2 -1
  14. package/components/uis/RadioGroup/RadioButton.d.ts.map +1 -1
  15. package/components/uis/RadioGroup/RadioButton.js +2 -2
  16. package/components/uis/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  17. package/components/uis/SegmentedControl/SegmentedControl.js +1 -1
  18. package/components/uis/SwitchToggle/SwitchToggle.d.ts +2 -1
  19. package/components/uis/SwitchToggle/SwitchToggle.d.ts.map +1 -1
  20. package/components/uis/SwitchToggle/SwitchToggle.js +2 -2
  21. package/package.json +1 -1
  22. package/src/components/uis/Button/Button.test.tsx +74 -0
  23. package/src/components/uis/Button/Button.tsx +4 -0
  24. package/src/components/uis/Checkbox/Checkbox.test.tsx +95 -1
  25. package/src/components/uis/Checkbox/Checkbox.tsx +5 -0
  26. package/src/components/uis/EditText/EditText.tsx +3 -0
  27. package/src/components/uis/IconButton/IconButton.test.tsx +39 -0
  28. package/src/components/uis/IconButton/IconButton.tsx +4 -0
  29. package/src/components/uis/RadioGroup/RadioButton.tsx +5 -0
  30. package/src/components/uis/RadioGroup/RadioGroup.test.tsx +67 -0
  31. package/src/components/uis/SegmentedControl/SegmentedControl.tsx +3 -0
  32. package/src/components/uis/SwitchToggle/SwitchToggle.test.tsx +44 -0
  33. 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;CAC9C,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,GACf,EAAE,KAAK,GAAG,YAAY,CA6LtB;wBAGoC,OAAO,MAAM;AAAlD,wBAAmD"}
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;CAC9B;AA6BD,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,MAAM,EACN,IAAI,EACJ,SAAmB,EACnB,KAAiB,EACjB,IAAe,EACf,QAAgB,EAChB,OAAe,EACf,OAAO,GACR,EAAE,aAAa,GAAG,YAAY,CAyI9B;wBAGsC,OAAO,QAAQ;AAAtD,wBAAuD"}
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":"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"}
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;CAC9C,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,GACf,EAAE,eAAe,GAAG,YAAY,CAwJhC;wBAGwC,OAAO,UAAU;AAA1D,wBAA2D"}
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,GACxB,EAAE,gBAAgB,GAAG,YAAY,CAyHjC;AAGD,QAAA,MAAM,mBAAmB,+CAA0B,CAAC;AACpD,OAAO,EAAC,mBAAmB,IAAI,WAAW,EAAC,CAAC"}
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,CA0FtC;AAGD,eAAO,MAAM,gBAAgB,6DAE5B,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
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;CACtB,CAAC;AA+CF,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,IAAI,EACJ,KAAK,EACL,MAAM,EACN,QAAc,EACd,SAAS,EACT,IAAe,EACf,UAAU,EACV,OAAO,GACR,EAAE,KAAK,GAAG,YAAY,CAmNtB;wBAG0C,OAAO,YAAY;AAA9D,wBAA+D"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cpk-ui",
3
- "version": "0.5.4",
3
+ "version": "0.5.5",
4
4
  "main": "index",
5
5
  "react-native": "index",
6
6
  "module": "index",
@@ -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}