@idealyst/components 1.1.1 → 1.1.2

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 (95) hide show
  1. package/package.json +3 -3
  2. package/src/Accordion/Accordion.native.tsx +2 -1
  3. package/src/Accordion/Accordion.web.tsx +2 -1
  4. package/src/ActivityIndicator/ActivityIndicator.native.tsx +2 -0
  5. package/src/ActivityIndicator/ActivityIndicator.web.tsx +2 -1
  6. package/src/ActivityIndicator/types.ts +2 -1
  7. package/src/Alert/Alert.native.tsx +2 -0
  8. package/src/Alert/Alert.web.tsx +2 -0
  9. package/src/Alert/types.ts +2 -1
  10. package/src/Avatar/Avatar.native.tsx +2 -1
  11. package/src/Avatar/Avatar.web.tsx +2 -1
  12. package/src/Avatar/types.ts +2 -1
  13. package/src/Badge/Badge.native.tsx +3 -0
  14. package/src/Badge/Badge.web.tsx +3 -0
  15. package/src/Badge/types.ts +2 -1
  16. package/src/Breadcrumb/Breadcrumb.native.tsx +2 -0
  17. package/src/Breadcrumb/Breadcrumb.web.tsx +2 -1
  18. package/src/Breadcrumb/types.ts +2 -1
  19. package/src/Button/Button.native.tsx +17 -12
  20. package/src/Button/Button.styles.tsx +2 -2
  21. package/src/Button/Button.web.tsx +2 -0
  22. package/src/Button/types.ts +2 -1
  23. package/src/Card/Card.native.tsx +2 -0
  24. package/src/Card/Card.web.tsx +2 -0
  25. package/src/Checkbox/Checkbox.native.tsx +2 -1
  26. package/src/Checkbox/Checkbox.web.tsx +2 -1
  27. package/src/Chip/Chip.native.tsx +3 -1
  28. package/src/Chip/Chip.web.tsx +2 -0
  29. package/src/Chip/types.ts +2 -1
  30. package/src/Dialog/Dialog.native.tsx +2 -0
  31. package/src/Dialog/Dialog.web.tsx +2 -0
  32. package/src/Dialog/types.ts +2 -1
  33. package/src/Divider/Divider.native.tsx +4 -0
  34. package/src/Divider/Divider.web.tsx +3 -0
  35. package/src/Divider/types.ts +2 -1
  36. package/src/Icon/Icon.native.tsx +2 -0
  37. package/src/Icon/Icon.web.tsx +3 -1
  38. package/src/Icon/types.ts +2 -1
  39. package/src/Image/Image.native.tsx +2 -1
  40. package/src/Image/Image.web.tsx +2 -0
  41. package/src/Image/types.ts +2 -1
  42. package/src/Input/Input.native.tsx +2 -1
  43. package/src/Input/Input.web.tsx +2 -1
  44. package/src/Link/Link.native.tsx +2 -0
  45. package/src/Link/Link.web.tsx +2 -0
  46. package/src/Link/types.ts +2 -1
  47. package/src/List/List.native.tsx +3 -1
  48. package/src/List/List.web.tsx +2 -0
  49. package/src/Menu/Menu.native.tsx +2 -1
  50. package/src/Menu/Menu.web.tsx +2 -0
  51. package/src/Menu/types.ts +2 -1
  52. package/src/Popover/Popover.native.tsx +2 -0
  53. package/src/Popover/Popover.web.tsx +2 -1
  54. package/src/Popover/types.ts +2 -1
  55. package/src/Pressable/Pressable.native.tsx +2 -1
  56. package/src/Pressable/Pressable.web.tsx +2 -0
  57. package/src/Progress/Progress.native.tsx +3 -2
  58. package/src/Progress/Progress.web.tsx +3 -2
  59. package/src/Progress/types.ts +2 -1
  60. package/src/RadioButton/RadioButton.native.tsx +2 -0
  61. package/src/RadioButton/RadioButton.web.tsx +2 -0
  62. package/src/RadioButton/RadioGroup.native.tsx +2 -0
  63. package/src/RadioButton/RadioGroup.web.tsx +2 -0
  64. package/src/RadioButton/types.ts +2 -2
  65. package/src/SVGImage/SVGImage.native.tsx +3 -2
  66. package/src/SVGImage/SVGImage.web.tsx +3 -2
  67. package/src/SVGImage/types.ts +2 -1
  68. package/src/Screen/Screen.native.tsx +3 -1
  69. package/src/Screen/Screen.web.tsx +2 -0
  70. package/src/Select/Select.native.tsx +2 -1
  71. package/src/Select/Select.web.tsx +2 -1
  72. package/src/Skeleton/Skeleton.native.tsx +4 -0
  73. package/src/Skeleton/Skeleton.web.tsx +4 -0
  74. package/src/Skeleton/types.ts +3 -2
  75. package/src/Slider/Slider.native.tsx +2 -1
  76. package/src/Slider/Slider.web.tsx +2 -1
  77. package/src/Switch/Switch.native.tsx +3 -0
  78. package/src/Switch/Switch.web.tsx +2 -0
  79. package/src/TabBar/TabBar.native.tsx +2 -1
  80. package/src/TabBar/TabBar.web.tsx +2 -0
  81. package/src/Table/Table.native.tsx +2 -0
  82. package/src/Table/Table.web.tsx +2 -1
  83. package/src/Text/Text.native.tsx +2 -0
  84. package/src/Text/Text.web.tsx +2 -0
  85. package/src/TextArea/TextArea.native.tsx +2 -1
  86. package/src/TextArea/TextArea.web.tsx +2 -1
  87. package/src/Tooltip/Tooltip.native.tsx +2 -1
  88. package/src/Tooltip/Tooltip.web.tsx +2 -0
  89. package/src/Tooltip/types.ts +2 -1
  90. package/src/Video/Video.native.tsx +3 -2
  91. package/src/Video/Video.web.tsx +2 -0
  92. package/src/Video/types.ts +2 -1
  93. package/src/View/View.native.tsx +3 -1
  94. package/src/View/View.web.tsx +2 -0
  95. package/src/utils/viewStyleProps.ts +12 -4
@@ -19,6 +19,7 @@ const Skeleton = forwardRef<View, SkeletonProps>(({
19
19
  animation = 'pulse',
20
20
  style,
21
21
  testID,
22
+ id,
22
23
  }, ref) => {
23
24
  skeletonStyles.useVariants({
24
25
  shape,
@@ -78,6 +79,7 @@ const Skeleton = forwardRef<View, SkeletonProps>(({
78
79
  return (
79
80
  <Animated.View
80
81
  ref={ref as any}
82
+ nativeID={id}
81
83
  style={[
82
84
  skeletonStyles.skeleton,
83
85
  customStyles,
@@ -113,11 +115,13 @@ export const SkeletonGroup: React.FC<SkeletonGroupProps> = ({
113
115
  skeletonProps,
114
116
  style,
115
117
  testID,
118
+ id,
116
119
  }) => {
117
120
  skeletonStyles.useVariants({});
118
121
 
119
122
  return (
120
123
  <View
124
+ nativeID={id}
121
125
  style={[
122
126
  skeletonStyles.group,
123
127
  { gap: spacing },
@@ -11,6 +11,7 @@ const Skeleton: React.FC<SkeletonProps> = ({
11
11
  animation = 'pulse',
12
12
  style,
13
13
  testID,
14
+ id,
14
15
  }) => {
15
16
  skeletonStyles.useVariants({
16
17
  shape,
@@ -60,6 +61,7 @@ const Skeleton: React.FC<SkeletonProps> = ({
60
61
  ...customStyles,
61
62
  ...animationStyles,
62
63
  }}
64
+ id={id}
63
65
  data-testid={testID}
64
66
  >
65
67
  {animation === 'wave' && (
@@ -86,6 +88,7 @@ export const SkeletonGroup: React.FC<SkeletonGroupProps> = ({
86
88
  skeletonProps,
87
89
  style,
88
90
  testID,
91
+ id,
89
92
  }) => {
90
93
  skeletonStyles.useVariants({});
91
94
  const groupProps = getWebProps([skeletonStyles.group, style as any]);
@@ -96,6 +99,7 @@ export const SkeletonGroup: React.FC<SkeletonGroupProps> = ({
96
99
  style={{
97
100
  gap: `${spacing}px`,
98
101
  }}
102
+ id={id}
99
103
  data-testid={testID}
100
104
  >
101
105
  {Array.from({ length: count }).map((_, index) => (
@@ -1,9 +1,10 @@
1
1
  import type { StyleProp, ViewStyle } from 'react-native';
2
+ import { BaseProps } from '../utils/viewStyleProps';
2
3
 
3
4
  export type SkeletonShape = 'rectangle' | 'circle' | 'rounded';
4
5
  export type SkeletonAnimation = 'pulse' | 'wave' | 'none';
5
6
 
6
- export interface SkeletonProps {
7
+ export interface SkeletonProps extends BaseProps {
7
8
  /**
8
9
  * Width of the skeleton (number in pixels or string with units)
9
10
  * @default '100%'
@@ -45,7 +46,7 @@ export interface SkeletonProps {
45
46
  testID?: string;
46
47
  }
47
48
 
48
- export interface SkeletonGroupProps {
49
+ export interface SkeletonGroupProps extends BaseProps {
49
50
  /**
50
51
  * Number of skeleton items to render
51
52
  * @default 3
@@ -29,6 +29,7 @@ const Slider = forwardRef<View, SliderProps>(({
29
29
  onValueCommit,
30
30
  style,
31
31
  testID,
32
+ id,
32
33
  }, ref) => {
33
34
  const [internalValue, setInternalValue] = useState(defaultValue);
34
35
  const [trackWidthState, setTrackWidthState] = useState(0);
@@ -166,7 +167,7 @@ const Slider = forwardRef<View, SliderProps>(({
166
167
  };
167
168
 
168
169
  return (
169
- <View ref={ref} style={[sliderStyles.container, style]} testID={testID}>
170
+ <View ref={ref} nativeID={id} style={[sliderStyles.container, style]} testID={testID}>
170
171
  {showValue && (
171
172
  <View style={sliderStyles.valueLabel as any}>
172
173
  <Text>{value}</Text>
@@ -27,6 +27,7 @@ const Slider = forwardRef<HTMLDivElement, SliderProps>(({
27
27
  onValueCommit,
28
28
  style,
29
29
  testID,
30
+ id,
30
31
  }, ref) => {
31
32
  const [internalValue, setInternalValue] = useState(defaultValue);
32
33
  const [isDragging, setIsDragging] = useState(false);
@@ -165,7 +166,7 @@ const Slider = forwardRef<HTMLDivElement, SliderProps>(({
165
166
  const mergedRef = useMergeRefs(ref, containerProps.ref);
166
167
 
167
168
  return (
168
- <div {...containerProps} ref={mergedRef} data-testid={testID}>
169
+ <div {...containerProps} ref={mergedRef} id={id} data-testid={testID}>
169
170
  {showValue && (
170
171
  <div {...valueLabelProps}>
171
172
  {value}
@@ -19,6 +19,7 @@ const Switch = forwardRef<ComponentRef<typeof Pressable>, SwitchProps>(({
19
19
  marginHorizontal,
20
20
  style,
21
21
  testID,
22
+ id,
22
23
  }, ref) => {
23
24
  switchStyles.useVariants({
24
25
  size,
@@ -81,6 +82,7 @@ const Switch = forwardRef<ComponentRef<typeof Pressable>, SwitchProps>(({
81
82
  const switchElement = (
82
83
  <Pressable
83
84
  ref={!label ? ref : undefined}
85
+ nativeID={!label ? id : undefined}
84
86
  onPress={handlePress}
85
87
  disabled={disabled}
86
88
  style={switchStyles.switchContainer}
@@ -115,6 +117,7 @@ const Switch = forwardRef<ComponentRef<typeof Pressable>, SwitchProps>(({
115
117
  return (
116
118
  <Pressable
117
119
  ref={ref}
120
+ nativeID={id}
118
121
  onPress={handlePress}
119
122
  disabled={disabled}
120
123
  style={[switchStyles.container, style]}
@@ -22,6 +22,7 @@ const Switch = forwardRef<HTMLDivElement | HTMLButtonElement, SwitchProps>(({
22
22
  marginHorizontal,
23
23
  style,
24
24
  testID,
25
+ id,
25
26
  }, ref) => {
26
27
  const handleClick = () => {
27
28
  if (!disabled && onCheckedChange) {
@@ -90,6 +91,7 @@ const Switch = forwardRef<HTMLDivElement | HTMLButtonElement, SwitchProps>(({
90
91
  ref={mergedButtonRef}
91
92
  onClick={handleClick}
92
93
  disabled={disabled}
94
+ id={id}
93
95
  data-testid={testID}
94
96
  role="switch"
95
97
  aria-checked={checked}
@@ -27,6 +27,7 @@ const TabBar = forwardRef<View, TabBarProps>(({
27
27
  marginHorizontal,
28
28
  style,
29
29
  testID,
30
+ id,
30
31
  }, ref) => {
31
32
  const firstItemValue = items[0]?.value || '';
32
33
  const [internalValue, setInternalValue] = useState(defaultValue || firstItemValue);
@@ -104,7 +105,7 @@ const TabBar = forwardRef<View, TabBarProps>(({
104
105
  showsHorizontalScrollIndicator={false}
105
106
  contentContainerStyle={{ position: 'relative' }}
106
107
  >
107
- <View ref={ref} style={[tabBarContainerStyles.container, style]} testID={testID}>
108
+ <View ref={ref} nativeID={id} style={[tabBarContainerStyles.container, style]} testID={testID}>
108
109
  {/* Animated indicator - render first so it's behind */}
109
110
  <Animated.View
110
111
  style={[
@@ -89,6 +89,7 @@ const TabBar: React.FC<TabBarProps> = ({
89
89
  marginHorizontal,
90
90
  style,
91
91
  testID,
92
+ id,
92
93
  }) => {
93
94
  const firstItemValue = items[0]?.value || '';
94
95
  const [internalValue, setInternalValue] = useState(defaultValue || firstItemValue);
@@ -186,6 +187,7 @@ const TabBar: React.FC<TabBarProps> = ({
186
187
  {...containerProps}
187
188
  ref={mergedContainerRef}
188
189
  role="tablist"
190
+ id={id}
189
191
  data-testid={testID}
190
192
  >
191
193
  {/* Sliding indicator */}
@@ -20,6 +20,7 @@ function TableInner<T = any>({
20
20
  marginHorizontal,
21
21
  style,
22
22
  testID,
23
+ id,
23
24
  }: TableProps<T>, ref: React.Ref<ScrollView>) {
24
25
  // Apply variants
25
26
  tableStyles.useVariants({
@@ -49,6 +50,7 @@ function TableInner<T = any>({
49
50
  return (
50
51
  <ScrollView
51
52
  ref={ref}
53
+ nativeID={id}
52
54
  horizontal
53
55
  style={[tableStyles.container, style]}
54
56
  testID={testID}
@@ -20,6 +20,7 @@ function Table<T = any>({
20
20
  marginHorizontal,
21
21
  style,
22
22
  testID,
23
+ id,
23
24
  }: TableProps<T>) {
24
25
  // Apply variants
25
26
  tableStyles.useVariants({
@@ -49,7 +50,7 @@ function Table<T = any>({
49
50
  const isClickable = !!onRowPress;
50
51
 
51
52
  return (
52
- <div {...containerProps} data-testid={testID}>
53
+ <div {...containerProps} id={id} data-testid={testID}>
53
54
  <table {...tableProps}>
54
55
  <thead {...getWebProps([tableStyles.thead])}>
55
56
  <tr>
@@ -17,6 +17,7 @@ const Text = forwardRef<RNText, TextProps>(({
17
17
  paddingHorizontal,
18
18
  style,
19
19
  testID,
20
+ id,
20
21
  }, ref) => {
21
22
  // When typography is set, it overrides size and weight (handled in styles)
22
23
  textStyles.useVariants({
@@ -32,6 +33,7 @@ const Text = forwardRef<RNText, TextProps>(({
32
33
  return (
33
34
  <RNText
34
35
  ref={ref}
36
+ nativeID={id}
35
37
  style={[
36
38
  textStyles.text({ color, typography }),
37
39
  style,
@@ -18,6 +18,7 @@ const Text = forwardRef<HTMLSpanElement, TextProps>(({
18
18
  paddingHorizontal,
19
19
  style,
20
20
  testID,
21
+ id,
21
22
  }, ref) => {
22
23
  // When typography is set, it overrides size and weight (handled in styles)
23
24
  textStyles.useVariants({
@@ -45,6 +46,7 @@ const Text = forwardRef<HTMLSpanElement, TextProps>(({
45
46
  <span
46
47
  {...webProps}
47
48
  ref={mergedRef}
49
+ id={id}
48
50
  data-testid={testID}
49
51
  >
50
52
  {children}
@@ -28,6 +28,7 @@ const TextArea = forwardRef<TextInput, TextAreaProps>(({
28
28
  style,
29
29
  textareaStyle,
30
30
  testID,
31
+ id,
31
32
  }, ref) => {
32
33
  const [internalValue, setInternalValue] = useState(defaultValue);
33
34
  const [contentHeight, setContentHeight] = useState<number | undefined>(undefined);
@@ -81,7 +82,7 @@ const TextArea = forwardRef<TextInput, TextAreaProps>(({
81
82
  const showFooter = (error || helperText) || (showCharacterCount && maxLength);
82
83
 
83
84
  return (
84
- <View style={[textAreaStyles.container, style]} testID={testID}>
85
+ <View nativeID={id} style={[textAreaStyles.container, style]} testID={testID}>
85
86
  {label && (
86
87
  <Text style={textAreaStyles.label}>{label}</Text>
87
88
  )}
@@ -29,6 +29,7 @@ const TextArea = forwardRef<HTMLDivElement, TextAreaProps>(({
29
29
  style,
30
30
  textareaStyle,
31
31
  testID,
32
+ id,
32
33
  }, ref) => {
33
34
  const [internalValue, setInternalValue] = useState(defaultValue);
34
35
  const textareaRef = useRef<HTMLTextAreaElement>(null);
@@ -112,7 +113,7 @@ const TextArea = forwardRef<HTMLDivElement, TextAreaProps>(({
112
113
  const mergedTextareaRef = useMergeRefs(textareaRef, computedTextareaProps.ref);
113
114
 
114
115
  return (
115
- <div {...containerProps} ref={mergedRef} data-testid={testID}>
116
+ <div {...containerProps} ref={mergedRef} id={id} data-testid={testID}>
116
117
  {label && (
117
118
  <label {...labelProps}>{label}</label>
118
119
  )}
@@ -12,6 +12,7 @@ const Tooltip = forwardRef<View, TooltipProps>(({
12
12
  size = 'md',
13
13
  style,
14
14
  testID,
15
+ id,
15
16
  }, ref) => {
16
17
  const [visible, setVisible] = useState(false);
17
18
  const [tooltipPosition, setTooltipPosition] = useState({ top: 0, left: 0, width: 0 });
@@ -126,7 +127,7 @@ const Tooltip = forwardRef<View, TooltipProps>(({
126
127
 
127
128
  return (
128
129
  <>
129
- <View ref={ref} collapsable={false} style={style}>
130
+ <View ref={ref} nativeID={id} collapsable={false} style={style}>
130
131
  {trigger}
131
132
  </View>
132
133
 
@@ -13,6 +13,7 @@ const Tooltip: React.FC<TooltipProps> = ({
13
13
  size = 'md',
14
14
  style,
15
15
  testID,
16
+ id,
16
17
  }) => {
17
18
  const [visible, setVisible] = useState(false);
18
19
  const timeoutRef = useRef<NodeJS.Timeout | null>(null);
@@ -60,6 +61,7 @@ const Tooltip: React.FC<TooltipProps> = ({
60
61
  {...containerProps}
61
62
  onMouseEnter={handleMouseEnter}
62
63
  onMouseLeave={handleMouseLeave}
64
+ id={id}
63
65
  data-testid={testID}
64
66
  >
65
67
  {children}
@@ -1,12 +1,13 @@
1
1
  import { Intent, Size } from '@idealyst/theme';
2
2
  import type { StyleProp, ViewStyle } from 'react-native';
3
+ import { BaseProps } from '../utils/viewStyleProps';
3
4
 
4
5
  // Component-specific type aliases for future extensibility
5
6
  export type TooltipIntentVariant = Intent;
6
7
  export type TooltipSizeVariant = Size;
7
8
  export type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';
8
9
 
9
- export interface TooltipProps {
10
+ export interface TooltipProps extends BaseProps {
10
11
  content: string | React.ReactNode;
11
12
  children: React.ReactNode;
12
13
  placement?: TooltipPlacement;
@@ -32,11 +32,12 @@ const Video = React.forwardRef<View, VideoProps>(({
32
32
  borderRadius,
33
33
  style,
34
34
  testID,
35
+ id,
35
36
  }, ref) => {
36
37
 
37
38
  if (!RNVideo) {
38
39
  return (
39
- <View ref={ref} style={[videoStyles.container, { aspectRatio, borderRadius }, style]} testID={testID}>
40
+ <View ref={ref} nativeID={id} style={[videoStyles.container, { aspectRatio, borderRadius }, style]} testID={testID}>
40
41
  <View style={videoStyles.fallback}>
41
42
  {/* Fallback when react-native-video is not installed */}
42
43
  </View>
@@ -79,7 +80,7 @@ const Video = React.forwardRef<View, VideoProps>(({
79
80
  };
80
81
 
81
82
  return (
82
- <View ref={ref} style={containerStyle} testID={testID}>
83
+ <View ref={ref} nativeID={id} style={containerStyle} testID={testID}>
83
84
  <RNVideo
84
85
  source={videoSource}
85
86
  poster={poster}
@@ -25,6 +25,7 @@ const Video: React.FC<VideoProps> = ({
25
25
  borderRadius,
26
26
  style,
27
27
  testID,
28
+ id,
28
29
  }) => {
29
30
  const videoRef = useRef<HTMLVideoElement>(null);
30
31
 
@@ -85,6 +86,7 @@ const Video: React.FC<VideoProps> = ({
85
86
  <div
86
87
  {...containerProps}
87
88
  style={containerStyle}
89
+ id={id}
88
90
  data-testid={testID}
89
91
  >
90
92
  <video
@@ -1,11 +1,12 @@
1
1
  import type { StyleProp, ViewStyle } from 'react-native';
2
+ import { BaseProps } from '../utils/viewStyleProps';
2
3
 
3
4
  export interface VideoSource {
4
5
  uri: string;
5
6
  type?: string;
6
7
  }
7
8
 
8
- export interface VideoProps {
9
+ export interface VideoProps extends BaseProps {
9
10
  source: VideoSource | string;
10
11
  poster?: string;
11
12
  width?: number | string;
@@ -24,6 +24,7 @@ const View = forwardRef<RNView | RNScrollView, ViewProps>(({
24
24
  scrollable = false,
25
25
  style,
26
26
  testID,
27
+ id,
27
28
  }, ref) => {
28
29
  viewStyles.useVariants({
29
30
  background,
@@ -56,6 +57,7 @@ const View = forwardRef<RNView | RNScrollView, ViewProps>(({
56
57
  style={[{ flex: 1 }, style]}
57
58
  contentContainerStyle={[viewStyles.view, getStyles()]}
58
59
  testID={testID}
60
+ nativeID={id}
59
61
  >
60
62
  {children}
61
63
  </RNScrollView>
@@ -63,7 +65,7 @@ const View = forwardRef<RNView | RNScrollView, ViewProps>(({
63
65
  }
64
66
 
65
67
  return (
66
- <RNView ref={ref as any} style={[viewStyles.view, getStyles(), style]} testID={testID}>
68
+ <RNView ref={ref as any} style={[viewStyles.view, getStyles(), style]} testID={testID} nativeID={id}>
67
69
  {children}
68
70
  </RNView>
69
71
  );
@@ -25,6 +25,7 @@ const View = forwardRef<HTMLDivElement, ViewProps>(({
25
25
  scrollable, // accepted but no-op on web - layout handles scrolling
26
26
  style,
27
27
  testID,
28
+ id,
28
29
  }, ref) => {
29
30
  viewStyles.useVariants({
30
31
  background,
@@ -56,6 +57,7 @@ const View = forwardRef<HTMLDivElement, ViewProps>(({
56
57
  <div
57
58
  {...webProps}
58
59
  ref={mergedRef}
60
+ id={id}
59
61
  data-testid={testID}
60
62
  >
61
63
  {children}
@@ -6,6 +6,14 @@ import { Size } from '@idealyst/theme';
6
6
  */
7
7
  export type ViewStyleSize = Size;
8
8
 
9
+ /**
10
+ * Base props shared by all components
11
+ */
12
+ export interface BaseProps {
13
+ /** Unique identifier for the element (maps to id on web, nativeID on native) */
14
+ id?: string;
15
+ }
16
+
9
17
  /**
10
18
  * Gap style props - for controlling gap/spacing between children
11
19
  */
@@ -42,22 +50,22 @@ export interface MarginStyleProps {
42
50
  * Full container style props - includes all spacing options
43
51
  * For: View, Card, Screen, List, Accordion, Table, TabBar
44
52
  */
45
- export interface ContainerStyleProps extends GapStyleProps, PaddingStyleProps, MarginStyleProps {}
53
+ export interface ContainerStyleProps extends BaseProps, GapStyleProps, PaddingStyleProps, MarginStyleProps {}
46
54
 
47
55
  /**
48
56
  * Text spacing style props - gap + padding only
49
57
  * For: Text (gap for inline elements, padding for block-level)
50
58
  */
51
- export interface TextSpacingStyleProps extends GapStyleProps, PaddingStyleProps {}
59
+ export interface TextSpacingStyleProps extends BaseProps, GapStyleProps, PaddingStyleProps {}
52
60
 
53
61
  /**
54
62
  * Pressable style props - padding only
55
63
  * For: Pressable
56
64
  */
57
- export interface PressableSpacingStyleProps extends PaddingStyleProps {}
65
+ export interface PressableSpacingStyleProps extends BaseProps, PaddingStyleProps {}
58
66
 
59
67
  /**
60
68
  * Form input style props - margin only
61
69
  * For: Input, Select, TextArea, Checkbox, RadioButton, Switch, Slider
62
70
  */
63
- export interface FormInputStyleProps extends MarginStyleProps {}
71
+ export interface FormInputStyleProps extends BaseProps, MarginStyleProps {}