@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.
- package/package.json +3 -3
- package/src/Accordion/Accordion.native.tsx +2 -1
- package/src/Accordion/Accordion.web.tsx +2 -1
- package/src/ActivityIndicator/ActivityIndicator.native.tsx +2 -0
- package/src/ActivityIndicator/ActivityIndicator.web.tsx +2 -1
- package/src/ActivityIndicator/types.ts +2 -1
- package/src/Alert/Alert.native.tsx +2 -0
- package/src/Alert/Alert.web.tsx +2 -0
- package/src/Alert/types.ts +2 -1
- package/src/Avatar/Avatar.native.tsx +2 -1
- package/src/Avatar/Avatar.web.tsx +2 -1
- package/src/Avatar/types.ts +2 -1
- package/src/Badge/Badge.native.tsx +3 -0
- package/src/Badge/Badge.web.tsx +3 -0
- package/src/Badge/types.ts +2 -1
- package/src/Breadcrumb/Breadcrumb.native.tsx +2 -0
- package/src/Breadcrumb/Breadcrumb.web.tsx +2 -1
- package/src/Breadcrumb/types.ts +2 -1
- package/src/Button/Button.native.tsx +17 -12
- package/src/Button/Button.styles.tsx +2 -2
- package/src/Button/Button.web.tsx +2 -0
- package/src/Button/types.ts +2 -1
- package/src/Card/Card.native.tsx +2 -0
- package/src/Card/Card.web.tsx +2 -0
- package/src/Checkbox/Checkbox.native.tsx +2 -1
- package/src/Checkbox/Checkbox.web.tsx +2 -1
- package/src/Chip/Chip.native.tsx +3 -1
- package/src/Chip/Chip.web.tsx +2 -0
- package/src/Chip/types.ts +2 -1
- package/src/Dialog/Dialog.native.tsx +2 -0
- package/src/Dialog/Dialog.web.tsx +2 -0
- package/src/Dialog/types.ts +2 -1
- package/src/Divider/Divider.native.tsx +4 -0
- package/src/Divider/Divider.web.tsx +3 -0
- package/src/Divider/types.ts +2 -1
- package/src/Icon/Icon.native.tsx +2 -0
- package/src/Icon/Icon.web.tsx +3 -1
- package/src/Icon/types.ts +2 -1
- package/src/Image/Image.native.tsx +2 -1
- package/src/Image/Image.web.tsx +2 -0
- package/src/Image/types.ts +2 -1
- package/src/Input/Input.native.tsx +2 -1
- package/src/Input/Input.web.tsx +2 -1
- package/src/Link/Link.native.tsx +2 -0
- package/src/Link/Link.web.tsx +2 -0
- package/src/Link/types.ts +2 -1
- package/src/List/List.native.tsx +3 -1
- package/src/List/List.web.tsx +2 -0
- package/src/Menu/Menu.native.tsx +2 -1
- package/src/Menu/Menu.web.tsx +2 -0
- package/src/Menu/types.ts +2 -1
- package/src/Popover/Popover.native.tsx +2 -0
- package/src/Popover/Popover.web.tsx +2 -1
- package/src/Popover/types.ts +2 -1
- package/src/Pressable/Pressable.native.tsx +2 -1
- package/src/Pressable/Pressable.web.tsx +2 -0
- package/src/Progress/Progress.native.tsx +3 -2
- package/src/Progress/Progress.web.tsx +3 -2
- package/src/Progress/types.ts +2 -1
- package/src/RadioButton/RadioButton.native.tsx +2 -0
- package/src/RadioButton/RadioButton.web.tsx +2 -0
- package/src/RadioButton/RadioGroup.native.tsx +2 -0
- package/src/RadioButton/RadioGroup.web.tsx +2 -0
- package/src/RadioButton/types.ts +2 -2
- package/src/SVGImage/SVGImage.native.tsx +3 -2
- package/src/SVGImage/SVGImage.web.tsx +3 -2
- package/src/SVGImage/types.ts +2 -1
- package/src/Screen/Screen.native.tsx +3 -1
- package/src/Screen/Screen.web.tsx +2 -0
- package/src/Select/Select.native.tsx +2 -1
- package/src/Select/Select.web.tsx +2 -1
- package/src/Skeleton/Skeleton.native.tsx +4 -0
- package/src/Skeleton/Skeleton.web.tsx +4 -0
- package/src/Skeleton/types.ts +3 -2
- package/src/Slider/Slider.native.tsx +2 -1
- package/src/Slider/Slider.web.tsx +2 -1
- package/src/Switch/Switch.native.tsx +3 -0
- package/src/Switch/Switch.web.tsx +2 -0
- package/src/TabBar/TabBar.native.tsx +2 -1
- package/src/TabBar/TabBar.web.tsx +2 -0
- package/src/Table/Table.native.tsx +2 -0
- package/src/Table/Table.web.tsx +2 -1
- package/src/Text/Text.native.tsx +2 -0
- package/src/Text/Text.web.tsx +2 -0
- package/src/TextArea/TextArea.native.tsx +2 -1
- package/src/TextArea/TextArea.web.tsx +2 -1
- package/src/Tooltip/Tooltip.native.tsx +2 -1
- package/src/Tooltip/Tooltip.web.tsx +2 -0
- package/src/Tooltip/types.ts +2 -1
- package/src/Video/Video.native.tsx +3 -2
- package/src/Video/Video.web.tsx +2 -0
- package/src/Video/types.ts +2 -1
- package/src/View/View.native.tsx +3 -1
- package/src/View/View.web.tsx +2 -0
- 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) => (
|
package/src/Skeleton/types.ts
CHANGED
|
@@ -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}
|
package/src/Table/Table.web.tsx
CHANGED
|
@@ -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>
|
package/src/Text/Text.native.tsx
CHANGED
|
@@ -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,
|
package/src/Text/Text.web.tsx
CHANGED
|
@@ -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}
|
package/src/Tooltip/types.ts
CHANGED
|
@@ -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}
|
package/src/Video/Video.web.tsx
CHANGED
|
@@ -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
|
package/src/Video/types.ts
CHANGED
|
@@ -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;
|
package/src/View/View.native.tsx
CHANGED
|
@@ -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
|
);
|
package/src/View/View.web.tsx
CHANGED
|
@@ -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 {}
|