@cdx-ui/components 0.0.1-alpha.2 → 0.0.1-alpha.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/lib/commonjs/components/Avatar/index.js +156 -0
- package/lib/commonjs/components/Avatar/index.js.map +1 -0
- package/lib/commonjs/components/Avatar/styles.js +80 -0
- package/lib/commonjs/components/Avatar/styles.js.map +1 -0
- package/lib/commonjs/components/Box/Box.js +1 -0
- package/lib/commonjs/components/Box/Box.js.map +1 -1
- package/lib/commonjs/components/Button/index.js +28 -13
- package/lib/commonjs/components/Button/index.js.map +1 -1
- package/lib/commonjs/components/Button/styles.js +323 -139
- package/lib/commonjs/components/Button/styles.js.map +1 -1
- package/lib/commonjs/components/Card/index.js +104 -0
- package/lib/commonjs/components/Card/index.js.map +1 -0
- package/lib/commonjs/components/Card/styles.js +28 -0
- package/lib/commonjs/components/Card/styles.js.map +1 -0
- package/lib/commonjs/components/Checkbox/index.js +180 -0
- package/lib/commonjs/components/Checkbox/index.js.map +1 -0
- package/lib/commonjs/components/Checkbox/styles.js +68 -0
- package/lib/commonjs/components/Checkbox/styles.js.map +1 -0
- package/lib/commonjs/components/Chip/index.js +103 -0
- package/lib/commonjs/components/Chip/index.js.map +1 -0
- package/lib/commonjs/components/Chip/styles.js +50 -0
- package/lib/commonjs/components/Chip/styles.js.map +1 -0
- package/lib/commonjs/components/Heading/index.js +35 -0
- package/lib/commonjs/components/Heading/index.js.map +1 -0
- package/lib/commonjs/components/Heading/styles.js +24 -0
- package/lib/commonjs/components/Heading/styles.js.map +1 -0
- package/lib/commonjs/components/Icon/index.js +61 -0
- package/lib/commonjs/components/Icon/index.js.map +1 -0
- package/lib/commonjs/components/Input/index.js +10 -16
- package/lib/commonjs/components/Input/index.js.map +1 -1
- package/lib/commonjs/components/Input/styles.js +16 -30
- package/lib/commonjs/components/Input/styles.js.map +1 -1
- package/lib/commonjs/components/Link/index.js +38 -0
- package/lib/commonjs/components/Link/index.js.map +1 -0
- package/lib/commonjs/components/Link/styles.js +14 -0
- package/lib/commonjs/components/Link/styles.js.map +1 -0
- package/lib/commonjs/components/Select/index.js +11 -12
- package/lib/commonjs/components/Select/index.js.map +1 -1
- package/lib/commonjs/components/Select/styles.js +29 -53
- package/lib/commonjs/components/Select/styles.js.map +1 -1
- package/lib/commonjs/components/Stack/HStack.js +8 -21
- package/lib/commonjs/components/Stack/HStack.js.map +1 -1
- package/lib/commonjs/components/Stack/VStack.js +8 -21
- package/lib/commonjs/components/Stack/VStack.js.map +1 -1
- package/lib/commonjs/components/Stack/styles.js +39 -0
- package/lib/commonjs/components/Stack/styles.js.map +1 -0
- package/lib/commonjs/components/Switch/BaseSwitch.js +46 -0
- package/lib/commonjs/components/Switch/BaseSwitch.js.map +1 -0
- package/lib/commonjs/components/Switch/BaseSwitch.web.js +56 -0
- package/lib/commonjs/components/Switch/BaseSwitch.web.js.map +1 -0
- package/lib/commonjs/components/Switch/index.js +13 -0
- package/lib/commonjs/components/Switch/index.js.map +1 -0
- package/lib/commonjs/components/Switch/styles.js +128 -0
- package/lib/commonjs/components/Switch/styles.js.map +1 -0
- package/lib/commonjs/components/Text/index.js +18 -9
- package/lib/commonjs/components/Text/index.js.map +1 -1
- package/lib/commonjs/components/Text/styles.js +24 -0
- package/lib/commonjs/components/Text/styles.js.map +1 -0
- package/lib/commonjs/components/VirtualizedList/index.js +19 -0
- package/lib/commonjs/components/VirtualizedList/index.js.map +1 -0
- package/lib/commonjs/components/index.js +108 -0
- package/lib/commonjs/components/index.js.map +1 -1
- package/lib/commonjs/metro/withCdxMetroConfig.js +24 -0
- package/lib/commonjs/metro/withCdxMetroConfig.js.map +1 -0
- package/lib/commonjs/styles/index.js +17 -0
- package/lib/commonjs/styles/index.js.map +1 -0
- package/lib/commonjs/styles/primitives.js +123 -0
- package/lib/commonjs/styles/primitives.js.map +1 -0
- package/lib/module/components/Avatar/index.js +152 -0
- package/lib/module/components/Avatar/index.js.map +1 -0
- package/lib/module/components/Avatar/styles.js +77 -0
- package/lib/module/components/Avatar/styles.js.map +1 -0
- package/lib/module/components/Box/Box.js +1 -0
- package/lib/module/components/Box/Box.js.map +1 -1
- package/lib/module/components/Button/index.js +29 -14
- package/lib/module/components/Button/index.js.map +1 -1
- package/lib/module/components/Button/styles.js +322 -138
- package/lib/module/components/Button/styles.js.map +1 -1
- package/lib/module/components/Card/index.js +100 -0
- package/lib/module/components/Card/index.js.map +1 -0
- package/lib/module/components/Card/styles.js +25 -0
- package/lib/module/components/Card/styles.js.map +1 -0
- package/lib/module/components/Checkbox/index.js +176 -0
- package/lib/module/components/Checkbox/index.js.map +1 -0
- package/lib/module/components/Checkbox/styles.js +64 -0
- package/lib/module/components/Checkbox/styles.js.map +1 -0
- package/lib/module/components/Chip/index.js +99 -0
- package/lib/module/components/Chip/index.js.map +1 -0
- package/lib/module/components/Chip/styles.js +46 -0
- package/lib/module/components/Chip/styles.js.map +1 -0
- package/lib/module/components/Heading/index.js +31 -0
- package/lib/module/components/Heading/index.js.map +1 -0
- package/lib/module/components/Heading/styles.js +20 -0
- package/lib/module/components/Heading/styles.js.map +1 -0
- package/lib/module/components/Icon/index.js +57 -0
- package/lib/module/components/Icon/index.js.map +1 -0
- package/lib/module/components/Input/index.js +10 -16
- package/lib/module/components/Input/index.js.map +1 -1
- package/lib/module/components/Input/styles.js +16 -30
- package/lib/module/components/Input/styles.js.map +1 -1
- package/lib/module/components/Link/index.js +29 -0
- package/lib/module/components/Link/index.js.map +1 -0
- package/lib/module/components/Link/styles.js +10 -0
- package/lib/module/components/Link/styles.js.map +1 -0
- package/lib/module/components/Select/index.js +12 -13
- package/lib/module/components/Select/index.js.map +1 -1
- package/lib/module/components/Select/styles.js +29 -53
- package/lib/module/components/Select/styles.js.map +1 -1
- package/lib/module/components/Stack/HStack.js +8 -21
- package/lib/module/components/Stack/HStack.js.map +1 -1
- package/lib/module/components/Stack/VStack.js +8 -21
- package/lib/module/components/Stack/VStack.js.map +1 -1
- package/lib/module/components/Stack/styles.js +35 -0
- package/lib/module/components/Stack/styles.js.map +1 -0
- package/lib/module/components/Switch/BaseSwitch.js +42 -0
- package/lib/module/components/Switch/BaseSwitch.js.map +1 -0
- package/lib/module/components/Switch/BaseSwitch.web.js +52 -0
- package/lib/module/components/Switch/BaseSwitch.web.js.map +1 -0
- package/lib/module/components/Switch/index.js +9 -0
- package/lib/module/components/Switch/index.js.map +1 -0
- package/lib/module/components/Switch/styles.js +125 -0
- package/lib/module/components/Switch/styles.js.map +1 -0
- package/lib/module/components/Text/index.js +19 -1
- package/lib/module/components/Text/index.js.map +1 -1
- package/lib/module/components/Text/styles.js +20 -0
- package/lib/module/components/Text/styles.js.map +1 -0
- package/lib/module/components/VirtualizedList/index.js +15 -0
- package/lib/module/components/VirtualizedList/index.js.map +1 -0
- package/lib/module/components/index.js +9 -0
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/metro/withCdxMetroConfig.js +20 -0
- package/lib/module/metro/withCdxMetroConfig.js.map +1 -0
- package/lib/module/styles/index.js +4 -0
- package/lib/module/styles/index.js.map +1 -0
- package/lib/module/styles/primitives.js +119 -0
- package/lib/module/styles/primitives.js.map +1 -0
- package/lib/typescript/components/Avatar/index.d.ts +40 -0
- package/lib/typescript/components/Avatar/index.d.ts.map +1 -0
- package/lib/typescript/components/Avatar/styles.d.ts +16 -0
- package/lib/typescript/components/Avatar/styles.d.ts.map +1 -0
- package/lib/typescript/components/Box/Box.d.ts +1 -0
- package/lib/typescript/components/Box/Box.d.ts.map +1 -1
- package/lib/typescript/components/Button/index.d.ts +6 -3
- package/lib/typescript/components/Button/index.d.ts.map +1 -1
- package/lib/typescript/components/Button/styles.d.ts +14 -8
- package/lib/typescript/components/Button/styles.d.ts.map +1 -1
- package/lib/typescript/components/Card/index.d.ts +30 -0
- package/lib/typescript/components/Card/index.d.ts.map +1 -0
- package/lib/typescript/components/Card/styles.d.ts +6 -0
- package/lib/typescript/components/Card/styles.d.ts.map +1 -0
- package/lib/typescript/components/Checkbox/index.d.ts +46 -0
- package/lib/typescript/components/Checkbox/index.d.ts.map +1 -0
- package/lib/typescript/components/Checkbox/styles.d.ts +18 -0
- package/lib/typescript/components/Checkbox/styles.d.ts.map +1 -0
- package/lib/typescript/components/Chip/index.d.ts +27 -0
- package/lib/typescript/components/Chip/index.d.ts.map +1 -0
- package/lib/typescript/components/Chip/styles.d.ts +12 -0
- package/lib/typescript/components/Chip/styles.d.ts.map +1 -0
- package/lib/typescript/components/Heading/index.d.ts +10 -0
- package/lib/typescript/components/Heading/index.d.ts.map +1 -0
- package/lib/typescript/components/Heading/styles.d.ts +6 -0
- package/lib/typescript/components/Heading/styles.d.ts.map +1 -0
- package/lib/typescript/components/Icon/index.d.ts +27 -0
- package/lib/typescript/components/Icon/index.d.ts.map +1 -0
- package/lib/typescript/components/Input/index.d.ts +6 -4
- package/lib/typescript/components/Input/index.d.ts.map +1 -1
- package/lib/typescript/components/Input/styles.d.ts +5 -7
- package/lib/typescript/components/Input/styles.d.ts.map +1 -1
- package/lib/typescript/components/Link/index.d.ts +8 -0
- package/lib/typescript/components/Link/index.d.ts.map +1 -0
- package/lib/typescript/components/Link/styles.d.ts +2 -0
- package/lib/typescript/components/Link/styles.d.ts.map +1 -0
- package/lib/typescript/components/Select/index.d.ts +6 -3
- package/lib/typescript/components/Select/index.d.ts.map +1 -1
- package/lib/typescript/components/Select/styles.d.ts +6 -8
- package/lib/typescript/components/Select/styles.d.ts.map +1 -1
- package/lib/typescript/components/Stack/HStack.d.ts +1 -12
- package/lib/typescript/components/Stack/HStack.d.ts.map +1 -1
- package/lib/typescript/components/Stack/VStack.d.ts +1 -12
- package/lib/typescript/components/Stack/VStack.d.ts.map +1 -1
- package/lib/typescript/components/Stack/styles.d.ts +10 -0
- package/lib/typescript/components/Stack/styles.d.ts.map +1 -0
- package/lib/typescript/components/Switch/BaseSwitch.d.ts +9 -0
- package/lib/typescript/components/Switch/BaseSwitch.d.ts.map +1 -0
- package/lib/typescript/components/Switch/BaseSwitch.web.d.ts +15 -0
- package/lib/typescript/components/Switch/BaseSwitch.web.d.ts.map +1 -0
- package/lib/typescript/components/Switch/index.d.ts +8 -0
- package/lib/typescript/components/Switch/index.d.ts.map +1 -0
- package/lib/typescript/components/Switch/styles.d.ts +26 -0
- package/lib/typescript/components/Switch/styles.d.ts.map +1 -0
- package/lib/typescript/components/Text/index.d.ts +9 -1
- package/lib/typescript/components/Text/index.d.ts.map +1 -1
- package/lib/typescript/components/Text/styles.d.ts +6 -0
- package/lib/typescript/components/Text/styles.d.ts.map +1 -0
- package/lib/typescript/components/VirtualizedList/index.d.ts +8 -0
- package/lib/typescript/components/VirtualizedList/index.d.ts.map +1 -0
- package/lib/typescript/components/index.d.ts +9 -0
- package/lib/typescript/components/index.d.ts.map +1 -1
- package/lib/typescript/metro/withCdxMetroConfig.d.ts +19 -0
- package/lib/typescript/metro/withCdxMetroConfig.d.ts.map +1 -0
- package/lib/typescript/styles/index.d.ts +2 -0
- package/lib/typescript/styles/index.d.ts.map +1 -0
- package/lib/typescript/styles/primitives.d.ts +85 -0
- package/lib/typescript/styles/primitives.d.ts.map +1 -0
- package/package.json +21 -13
- package/src/components/Avatar/index.tsx +174 -0
- package/src/components/Avatar/styles.ts +83 -0
- package/src/components/Box/Box.tsx +1 -0
- package/src/components/Button/index.tsx +23 -15
- package/src/components/Button/styles.ts +353 -144
- package/src/components/Card/index.tsx +115 -0
- package/src/components/Card/styles.ts +41 -0
- package/src/components/Checkbox/index.tsx +209 -0
- package/src/components/Checkbox/styles.ts +103 -0
- package/src/components/Chip/index.tsx +91 -0
- package/src/components/Chip/styles.ts +51 -0
- package/src/components/Heading/index.tsx +36 -0
- package/src/components/Heading/styles.tsx +26 -0
- package/src/components/Icon/index.tsx +54 -0
- package/src/components/Input/index.tsx +9 -20
- package/src/components/Input/styles.ts +42 -37
- package/src/components/Link/index.tsx +27 -0
- package/src/components/Link/styles.ts +16 -0
- package/src/components/Select/index.tsx +12 -11
- package/src/components/Select/styles.ts +63 -74
- package/src/components/Stack/HStack.tsx +8 -19
- package/src/components/Stack/VStack.tsx +8 -23
- package/src/components/Stack/styles.ts +37 -0
- package/src/components/Switch/BaseSwitch.tsx +38 -0
- package/src/components/Switch/BaseSwitch.web.tsx +69 -0
- package/src/components/Switch/index.tsx +13 -0
- package/src/components/Switch/styles.ts +120 -0
- package/src/components/Text/index.tsx +16 -0
- package/src/components/Text/styles.tsx +26 -0
- package/src/components/VirtualizedList/index.tsx +19 -0
- package/src/components/index.ts +9 -0
- package/src/metro/withCdxMetroConfig.ts +29 -0
- package/src/styles/index.ts +1 -0
- package/src/styles/primitives.ts +107 -0
- package/lib/commonjs/components/Text/Text.js +0 -30
- package/lib/commonjs/components/Text/Text.js.map +0 -1
- package/lib/module/components/Text/Text.js +0 -26
- package/lib/module/components/Text/Text.js.map +0 -1
- package/lib/typescript/components/Text/Text.d.ts +0 -11
- package/lib/typescript/components/Text/Text.d.ts.map +0 -1
- package/src/components/Text/Text.tsx +0 -58
- package/src/components/Text/index.ts +0 -1
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { withUniwind } from 'uniwind';
|
|
2
|
+
import { cn } from '@cdx-ui/utils';
|
|
3
|
+
import type { CdxIcon, CdxIconProps } from '@cdx-ui/icons';
|
|
4
|
+
import { COLOR_TEXT_PRIMARY } from '../../styles/primitives';
|
|
5
|
+
|
|
6
|
+
export type IconProps = CdxIconProps & {
|
|
7
|
+
className?: string; // TODO: Why does this need to specified manually?
|
|
8
|
+
as: CdxIcon;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
function IconImpl({ as: IconComponent, ...props }: IconProps) {
|
|
12
|
+
return <IconComponent {...props} />;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const StyledIcon = withUniwind(IconImpl, {
|
|
16
|
+
size: {
|
|
17
|
+
fromClassName: 'className',
|
|
18
|
+
styleProperty: 'width',
|
|
19
|
+
},
|
|
20
|
+
color: {
|
|
21
|
+
fromClassName: 'className',
|
|
22
|
+
styleProperty: 'color',
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* A wrapper component for CDX icons with Uniwind `className` support via `withUniwind`.
|
|
28
|
+
*
|
|
29
|
+
* This component allows you to render any CDX icon while applying utility classes
|
|
30
|
+
* using `uniwind`. It avoids the need to wrap or configure each icon individually.
|
|
31
|
+
*
|
|
32
|
+
* @component
|
|
33
|
+
* @example
|
|
34
|
+
* ```tsx
|
|
35
|
+
* import { Icon } from '@cdx-ui/components';
|
|
36
|
+
* import { ArrowRight } from '@cdx-ui/icons';
|
|
37
|
+
*
|
|
38
|
+
* <Icon as={ArrowRight} className="text-red-500 size-4" />
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @param {CdxIcon} as - The CDX icon component to render.
|
|
42
|
+
* @param {string} className - Utility classes to style the icon using Uniwind.
|
|
43
|
+
* @param {number} size - Icon size (overrides the size class).
|
|
44
|
+
* @param {...CdxIconProps} ...props - Additional icon props passed to the "as" icon.
|
|
45
|
+
*/
|
|
46
|
+
export function Icon({ as: IconComponent, className, ...props }: IconProps) {
|
|
47
|
+
return (
|
|
48
|
+
<StyledIcon
|
|
49
|
+
as={IconComponent}
|
|
50
|
+
className={cn(COLOR_TEXT_PRIMARY, 'size-5', className)}
|
|
51
|
+
{...props}
|
|
52
|
+
/>
|
|
53
|
+
);
|
|
54
|
+
}
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
type IInputSlotProps,
|
|
8
8
|
} from '@cdx-ui/primitives';
|
|
9
9
|
import { cn, useStyleContext, withStyleContext } from '@cdx-ui/utils';
|
|
10
|
+
import { Icon, IconProps } from '../Icon';
|
|
10
11
|
import { BaseInput } from './BaseInput';
|
|
11
12
|
import {
|
|
12
13
|
type InputVariantProps,
|
|
@@ -25,7 +26,6 @@ const useInputStyleContext = () => useStyleContext(SCOPE) as InputVariantProps;
|
|
|
25
26
|
|
|
26
27
|
const InputPrimitive = createInput({
|
|
27
28
|
Root,
|
|
28
|
-
Icon: View,
|
|
29
29
|
Slot: View,
|
|
30
30
|
Field: BaseInput,
|
|
31
31
|
});
|
|
@@ -40,7 +40,7 @@ export interface InputProps extends ViewProps, IInputFieldProps, InputVariantPro
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
const InputRoot = forwardRef<View, InputProps>(
|
|
43
|
-
({ variant = 'outline', size = '
|
|
43
|
+
({ variant = 'outline', size = 'default', className, children, style, ...props }, ref) => {
|
|
44
44
|
const computedClassName = cn(inputRootVariants({ variant, size }), className);
|
|
45
45
|
|
|
46
46
|
return (
|
|
@@ -103,9 +103,7 @@ export interface InputSlotProps extends ViewProps, IInputSlotProps {
|
|
|
103
103
|
|
|
104
104
|
const InputSlot = forwardRef<View, InputSlotProps>(
|
|
105
105
|
({ className, children, style, ...props }, ref) => {
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
const computedClassName = cn(inputSlotVariants({ size }), className);
|
|
106
|
+
const computedClassName = cn(inputSlotVariants(), className);
|
|
109
107
|
|
|
110
108
|
return (
|
|
111
109
|
<InputPrimitive.Slot ref={ref} className={computedClassName} style={style} {...props}>
|
|
@@ -121,24 +119,15 @@ InputSlot.displayName = 'Input.Slot';
|
|
|
121
119
|
// INPUT ICON
|
|
122
120
|
// =============================================================================
|
|
123
121
|
|
|
124
|
-
export interface InputIconProps extends
|
|
125
|
-
className?: string;
|
|
126
|
-
children?: ReactNode;
|
|
127
|
-
}
|
|
122
|
+
export interface InputIconProps extends Omit<IconProps, 'children'> {}
|
|
128
123
|
|
|
129
|
-
const InputIcon =
|
|
130
|
-
|
|
131
|
-
const { size } = useInputStyleContext();
|
|
124
|
+
const InputIcon = ({ className, style, as, ...props }: InputIconProps) => {
|
|
125
|
+
const { size } = useInputStyleContext();
|
|
132
126
|
|
|
133
|
-
|
|
127
|
+
const computedClassName = cn(inputIconVariants({ size }), className);
|
|
134
128
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
{children}
|
|
138
|
-
</InputPrimitive.Icon>
|
|
139
|
-
);
|
|
140
|
-
},
|
|
141
|
-
);
|
|
129
|
+
return <Icon as={as} className={computedClassName} style={style} {...props} />;
|
|
130
|
+
};
|
|
142
131
|
|
|
143
132
|
InputIcon.displayName = 'Input.Icon';
|
|
144
133
|
|
|
@@ -1,83 +1,88 @@
|
|
|
1
1
|
import { cva, type VariantProps } from 'class-variance-authority';
|
|
2
|
+
import {
|
|
3
|
+
COLOR_BG_PRIMARY,
|
|
4
|
+
COLOR_BORDER_DEFAULT,
|
|
5
|
+
COLOR_TEXT_MUTED,
|
|
6
|
+
COLOR_TEXT_PRIMARY,
|
|
7
|
+
DISABLED_CURSOR,
|
|
8
|
+
DISABLED_OPACITY,
|
|
9
|
+
RADIUS_SM,
|
|
10
|
+
SHADOW_SM,
|
|
11
|
+
SIZE_SCALE,
|
|
12
|
+
TRANSITION_COLORS,
|
|
13
|
+
} from '../../styles/primitives';
|
|
2
14
|
|
|
3
15
|
export const inputRootVariants = cva(
|
|
4
16
|
[
|
|
5
|
-
'w-full flex-row items-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
17
|
+
'w-full flex-row items-stretch border',
|
|
18
|
+
COLOR_BG_PRIMARY,
|
|
19
|
+
COLOR_BORDER_DEFAULT,
|
|
20
|
+
RADIUS_SM,
|
|
21
|
+
SHADOW_SM,
|
|
22
|
+
TRANSITION_COLORS,
|
|
23
|
+
DISABLED_OPACITY,
|
|
24
|
+
DISABLED_CURSOR,
|
|
25
|
+
'data-[disabled=true]:bg-slate-50 data-[disabled=true]:border-slate-300',
|
|
26
|
+
'data-[readonly=true]:cursor-default',
|
|
27
|
+
'data-[readonly=true]:bg-slate-50',
|
|
28
|
+
'web:data-[hover=true]:data-[active=false]:border-slate-300',
|
|
29
|
+
'data-[focus=true]:border-slate-900',
|
|
9
30
|
'data-[invalid=true]:border-red-500',
|
|
10
31
|
],
|
|
11
32
|
{
|
|
12
33
|
variants: {
|
|
13
34
|
variant: {
|
|
14
35
|
outline: [
|
|
15
|
-
'
|
|
16
|
-
'web:focus-within:border-
|
|
17
|
-
'web:data-[invalid=true]:focus-within:border-red-500 web:data-[invalid=true]:focus-within:ring-red-300/50',
|
|
36
|
+
'web:focus-within:border-slate-900 web:focus-within:ring-2 web:focus-within:ring-slate-400/50 web:focus-within:ring-offset-0',
|
|
37
|
+
'web:data-[invalid=true]:focus-within:border-red-500 web:data-[invalid=true]:focus-within:ring-2 web:data-[invalid=true]:focus-within:ring-red-400/50',
|
|
18
38
|
],
|
|
19
|
-
underlined:
|
|
20
|
-
'rounded-none border-t-0 border-l-0 border-r-0 border-b-neutral-border data-[focus=true]:border-b-interactive-focus shadow-none',
|
|
21
39
|
},
|
|
22
40
|
size: {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
lg: 'h-12 py-2',
|
|
41
|
+
default: `${SIZE_SCALE.default.height} ${SIZE_SCALE.default.px} py-2 ${SIZE_SCALE.default.gap}`,
|
|
42
|
+
small: `${SIZE_SCALE.small.height} ${SIZE_SCALE.small.px} py-1.5 ${SIZE_SCALE.small.gap}`,
|
|
26
43
|
},
|
|
27
44
|
},
|
|
28
45
|
defaultVariants: {
|
|
29
46
|
variant: 'outline',
|
|
30
|
-
size: '
|
|
47
|
+
size: 'default',
|
|
31
48
|
},
|
|
32
49
|
},
|
|
33
50
|
);
|
|
34
51
|
|
|
35
52
|
export const inputFieldVariants = cva(
|
|
36
53
|
[
|
|
37
|
-
'flex-1 bg-transparent
|
|
38
|
-
|
|
54
|
+
'flex-1 justify-center bg-transparent',
|
|
55
|
+
COLOR_TEXT_PRIMARY,
|
|
56
|
+
'placeholder:text-slate-400',
|
|
39
57
|
'web:outline-none',
|
|
40
58
|
],
|
|
41
59
|
{
|
|
42
60
|
variants: {
|
|
43
61
|
size: {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
lg: 'text-lg leading-none',
|
|
62
|
+
default: 'text-[1rem]',
|
|
63
|
+
small: 'text-[0.875rem]',
|
|
47
64
|
},
|
|
48
65
|
},
|
|
49
66
|
defaultVariants: {
|
|
50
|
-
size: '
|
|
67
|
+
size: 'default',
|
|
51
68
|
},
|
|
52
69
|
},
|
|
53
70
|
);
|
|
54
71
|
|
|
55
|
-
export const inputSlotVariants = cva(['items-center justify-center']
|
|
56
|
-
variants: {
|
|
57
|
-
size: {
|
|
58
|
-
sm: 'h-4 w-4',
|
|
59
|
-
md: 'h-5 w-5',
|
|
60
|
-
lg: 'h-6 w-6',
|
|
61
|
-
},
|
|
62
|
-
},
|
|
63
|
-
defaultVariants: {
|
|
64
|
-
size: 'sm',
|
|
65
|
-
},
|
|
66
|
-
});
|
|
72
|
+
export const inputSlotVariants = cva(['items-center justify-center self-center']);
|
|
67
73
|
|
|
68
|
-
export const inputIconVariants = cva([
|
|
74
|
+
export const inputIconVariants = cva([COLOR_TEXT_MUTED], {
|
|
69
75
|
variants: {
|
|
70
76
|
size: {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
lg: 'h-5 w-5',
|
|
77
|
+
default: 'size-5',
|
|
78
|
+
small: 'size-4',
|
|
74
79
|
},
|
|
75
80
|
},
|
|
76
81
|
defaultVariants: {
|
|
77
|
-
size: '
|
|
82
|
+
size: 'default',
|
|
78
83
|
},
|
|
79
84
|
});
|
|
80
85
|
|
|
81
|
-
export const inputFieldPlaceholderVariants = cva(['accent-
|
|
86
|
+
export const inputFieldPlaceholderVariants = cva(['accent-slate-400']);
|
|
82
87
|
|
|
83
88
|
export type InputVariantProps = VariantProps<typeof inputRootVariants>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { forwardRef } from 'react';
|
|
2
|
+
import { Pressable, type View } from 'react-native';
|
|
3
|
+
import { createLink, type ILinkProps } from '@cdx-ui/primitives';
|
|
4
|
+
import { cn } from '@cdx-ui/utils';
|
|
5
|
+
import { linkRootVariants } from './styles';
|
|
6
|
+
|
|
7
|
+
export { LinkProvider, type LinkConfig, type LinkAction } from '@cdx-ui/primitives';
|
|
8
|
+
|
|
9
|
+
const LinkPrimitive = createLink({
|
|
10
|
+
Root: Pressable,
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
export interface LinkProps extends ILinkProps {
|
|
14
|
+
className?: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const Link = forwardRef<View, LinkProps>(({ className, children, style, ...props }, ref) => {
|
|
18
|
+
const rootClassName = cn(linkRootVariants(), className);
|
|
19
|
+
|
|
20
|
+
return (
|
|
21
|
+
<LinkPrimitive ref={ref} className={rootClassName} style={style} {...props}>
|
|
22
|
+
{children}
|
|
23
|
+
</LinkPrimitive>
|
|
24
|
+
);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
Link.displayName = 'Link';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Platform } from 'react-native';
|
|
2
|
+
import { cva } from 'class-variance-authority';
|
|
3
|
+
import { COLOR_TEXT_PRIMARY, TRANSITION_COLORS } from '../../styles/primitives';
|
|
4
|
+
|
|
5
|
+
export const linkRootVariants = cva([
|
|
6
|
+
'flex-row items-center',
|
|
7
|
+
'web:outline-none web:focus:outline-none web:focus-visible:outline-none',
|
|
8
|
+
COLOR_TEXT_PRIMARY,
|
|
9
|
+
'underline decoration-slate-300 underline-offset-4',
|
|
10
|
+
TRANSITION_COLORS,
|
|
11
|
+
Platform.select({
|
|
12
|
+
web: 'data-[hover=true]:decoration-slate-900',
|
|
13
|
+
default: '',
|
|
14
|
+
}),
|
|
15
|
+
'web:data-[focus-visible=true]:ring-2 web:data-[focus-visible=true]:ring-slate-400/50 web:data-[focus-visible=true]:ring-offset-2',
|
|
16
|
+
]);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { forwardRef, type ReactNode } from 'react';
|
|
2
2
|
import { Pressable, Text, type TextProps, View, type ViewProps } from 'react-native';
|
|
3
|
+
import { ArrowDropDown } from '@cdx-ui/icons';
|
|
3
4
|
import {
|
|
4
5
|
createSelect,
|
|
5
6
|
type ISelectContentProps,
|
|
@@ -10,6 +11,7 @@ import {
|
|
|
10
11
|
type ISelectValueProps,
|
|
11
12
|
} from '@cdx-ui/primitives';
|
|
12
13
|
import { cn, useStyleContext, withStyleContext } from '@cdx-ui/utils';
|
|
14
|
+
import { Icon, IconProps } from '../Icon';
|
|
13
15
|
import {
|
|
14
16
|
type SelectVariantProps,
|
|
15
17
|
selectContentVariants,
|
|
@@ -45,7 +47,7 @@ export interface SelectProps extends ViewProps, ISelectProps, SelectVariantProps
|
|
|
45
47
|
}
|
|
46
48
|
|
|
47
49
|
const SelectRoot = forwardRef<View, SelectProps>(
|
|
48
|
-
({ variant = 'outline', size = '
|
|
50
|
+
({ variant = 'outline', size = 'default', className, children, style, ...props }, ref) => {
|
|
49
51
|
return (
|
|
50
52
|
<SelectPrimitive
|
|
51
53
|
ref={ref}
|
|
@@ -80,6 +82,7 @@ const SelectTrigger = forwardRef<View, SelectTriggerProps>(
|
|
|
80
82
|
return (
|
|
81
83
|
<SelectPrimitive.Trigger ref={ref} className={computedClassName} style={style} {...props}>
|
|
82
84
|
{children}
|
|
85
|
+
<SelectIcon as={ArrowDropDown} />
|
|
83
86
|
</SelectPrimitive.Trigger>
|
|
84
87
|
);
|
|
85
88
|
},
|
|
@@ -96,9 +99,9 @@ export interface SelectValueProps extends TextProps, ISelectValueProps {
|
|
|
96
99
|
}
|
|
97
100
|
|
|
98
101
|
const SelectValue = forwardRef<Text, SelectValueProps>(({ className, style, ...props }, ref) => {
|
|
99
|
-
const {
|
|
102
|
+
const { size } = useSelectStyleContext();
|
|
100
103
|
|
|
101
|
-
const computedClassName = cn(selectValueVariants({
|
|
104
|
+
const computedClassName = cn(selectValueVariants({ size }), className);
|
|
102
105
|
|
|
103
106
|
return <SelectPrimitive.Value ref={ref} className={computedClassName} style={style} {...props} />;
|
|
104
107
|
});
|
|
@@ -109,17 +112,15 @@ SelectValue.displayName = 'Select.Value';
|
|
|
109
112
|
// STYLED ICON COMPONENT
|
|
110
113
|
// =============================================================================
|
|
111
114
|
|
|
112
|
-
export interface SelectIconProps extends
|
|
113
|
-
className?: string;
|
|
114
|
-
}
|
|
115
|
+
export interface SelectIconProps extends Omit<IconProps, 'children'> {}
|
|
115
116
|
|
|
116
|
-
const SelectIcon =
|
|
117
|
-
const {
|
|
117
|
+
const SelectIcon = ({ className, style, ...props }: SelectIconProps) => {
|
|
118
|
+
const { size } = useSelectStyleContext();
|
|
118
119
|
|
|
119
|
-
const computedClassName = cn(selectIconVariants({
|
|
120
|
+
const computedClassName = cn(selectIconVariants({ size }), className);
|
|
120
121
|
|
|
121
|
-
return <
|
|
122
|
-
}
|
|
122
|
+
return <Icon className={computedClassName} style={style} {...props} />;
|
|
123
|
+
};
|
|
123
124
|
|
|
124
125
|
SelectIcon.displayName = 'Select.Icon';
|
|
125
126
|
|
|
@@ -1,58 +1,58 @@
|
|
|
1
1
|
import { Platform } from 'react-native';
|
|
2
2
|
import { cva, type VariantProps } from 'class-variance-authority';
|
|
3
|
+
import {
|
|
4
|
+
COLOR_BG_PRIMARY,
|
|
5
|
+
COLOR_BORDER_DEFAULT,
|
|
6
|
+
COLOR_TEXT_MUTED,
|
|
7
|
+
COLOR_TEXT_PRIMARY,
|
|
8
|
+
DISABLED_CURSOR,
|
|
9
|
+
DISABLED_OPACITY,
|
|
10
|
+
RADIUS_SM,
|
|
11
|
+
RADIUS_MD,
|
|
12
|
+
SHADOW_SM,
|
|
13
|
+
SHADOW_MD,
|
|
14
|
+
SIZE_SCALE,
|
|
15
|
+
TRANSITION_COLORS,
|
|
16
|
+
} from '../../styles/primitives';
|
|
3
17
|
|
|
4
18
|
// ── Trigger ─────────────────────────────────────────────────
|
|
5
19
|
|
|
6
20
|
export const selectTriggerVariants = cva(
|
|
7
21
|
[
|
|
8
22
|
'flex-row items-center justify-between',
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
23
|
+
RADIUS_SM,
|
|
24
|
+
SHADOW_SM,
|
|
25
|
+
TRANSITION_COLORS,
|
|
26
|
+
COLOR_BG_PRIMARY,
|
|
27
|
+
`border ${COLOR_BORDER_DEFAULT}`,
|
|
28
|
+
DISABLED_OPACITY,
|
|
29
|
+
DISABLED_CURSOR,
|
|
12
30
|
'data-[readonly=true]:cursor-default',
|
|
13
|
-
'data-[
|
|
31
|
+
'data-[state=open]:border-slate-900',
|
|
32
|
+
'data-[invalid=true]:border-red-500',
|
|
33
|
+
'data-[readonly=true]:bg-slate-50',
|
|
34
|
+
Platform.select({
|
|
35
|
+
default: 'data-[active=true]:border-slate-300',
|
|
36
|
+
web: [
|
|
37
|
+
'data-[hover=true]:border-slate-300 data-[active=true]:data-[hover=true]:border-slate-400',
|
|
38
|
+
'data-[focus-visible=true]:ring-2 data-[focus-visible=true]:ring-slate-400/50 data-[focus-visible=true]:ring-offset-2',
|
|
39
|
+
'data-[state=open]:ring-2 data-[state=open]:ring-slate-400/50',
|
|
40
|
+
].join(' '),
|
|
41
|
+
}),
|
|
14
42
|
],
|
|
15
43
|
{
|
|
16
44
|
variants: {
|
|
17
45
|
variant: {
|
|
18
|
-
outline: [
|
|
19
|
-
'bg-white border border-gray-300',
|
|
20
|
-
Platform.select({
|
|
21
|
-
default: 'data-[active=true]:border-gray-400',
|
|
22
|
-
web: 'data-[hover=true]:border-gray-400 data-[active=true]:data-[hover=true]:border-gray-500',
|
|
23
|
-
}),
|
|
24
|
-
'data-[state=open]:data-[invalid=false]:border-blue-500',
|
|
25
|
-
'data-[invalid=true]:border-red-500',
|
|
26
|
-
'data-[readonly=true]:bg-gray-50',
|
|
27
|
-
],
|
|
28
|
-
filled: [
|
|
29
|
-
'bg-gray-100 border border-transparent',
|
|
30
|
-
Platform.select({
|
|
31
|
-
default: 'data-[active=true]:bg-gray-200',
|
|
32
|
-
web: 'data-[hover=true]:bg-gray-200 data-[active=true]:data-[hover=true]:bg-gray-300',
|
|
33
|
-
}),
|
|
34
|
-
'data-[state=open]:border-blue-500',
|
|
35
|
-
'data-[invalid=true]:border-red-500 data-[invalid=true]:border',
|
|
36
|
-
'data-[readonly=true]:bg-gray-200',
|
|
37
|
-
],
|
|
38
|
-
ghost: [
|
|
39
|
-
'bg-transparent border border-transparent',
|
|
40
|
-
Platform.select({
|
|
41
|
-
default: 'data-[active=true]:bg-gray-100',
|
|
42
|
-
web: 'data-[hover=true]:bg-gray-50 data-[active=true]:data-[hover=true]:bg-gray-100',
|
|
43
|
-
}),
|
|
44
|
-
'data-[invalid=true]:border-red-500 data-[invalid=true]:border',
|
|
45
|
-
],
|
|
46
|
+
outline: [],
|
|
46
47
|
},
|
|
47
48
|
size: {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
lg: 'h-12 px-4 gap-2.5',
|
|
49
|
+
default: `${SIZE_SCALE.default.height} ${SIZE_SCALE.default.px} ${SIZE_SCALE.default.gap}`,
|
|
50
|
+
small: `${SIZE_SCALE.small.height} ${SIZE_SCALE.small.px} ${SIZE_SCALE.small.gap}`,
|
|
51
51
|
},
|
|
52
52
|
},
|
|
53
53
|
defaultVariants: {
|
|
54
54
|
variant: 'outline',
|
|
55
|
-
size: '
|
|
55
|
+
size: 'default',
|
|
56
56
|
},
|
|
57
57
|
},
|
|
58
58
|
);
|
|
@@ -60,23 +60,21 @@ export const selectTriggerVariants = cva(
|
|
|
60
60
|
// ── Value ───────────────────────────────────────────────────
|
|
61
61
|
|
|
62
62
|
export const selectValueVariants = cva(
|
|
63
|
-
[
|
|
63
|
+
[
|
|
64
|
+
'flex-1',
|
|
65
|
+
'data-[placeholder=true]:text-slate-400',
|
|
66
|
+
'data-[invalid=true]:text-red-600',
|
|
67
|
+
COLOR_TEXT_PRIMARY,
|
|
68
|
+
],
|
|
64
69
|
{
|
|
65
70
|
variants: {
|
|
66
|
-
variant: {
|
|
67
|
-
outline: 'text-gray-900',
|
|
68
|
-
filled: 'text-gray-900',
|
|
69
|
-
ghost: 'text-gray-900',
|
|
70
|
-
},
|
|
71
71
|
size: {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
lg: 'text-lg',
|
|
72
|
+
default: SIZE_SCALE.default.text,
|
|
73
|
+
small: SIZE_SCALE.small.text,
|
|
75
74
|
},
|
|
76
75
|
},
|
|
77
76
|
defaultVariants: {
|
|
78
|
-
|
|
79
|
-
size: 'md',
|
|
77
|
+
size: 'default',
|
|
80
78
|
},
|
|
81
79
|
},
|
|
82
80
|
);
|
|
@@ -84,23 +82,16 @@ export const selectValueVariants = cva(
|
|
|
84
82
|
// ── Icon ────────────────────────────────────────────────────
|
|
85
83
|
|
|
86
84
|
export const selectIconVariants = cva(
|
|
87
|
-
['items-center justify-center', 'data-[invalid=true]:text-red-500'],
|
|
85
|
+
['items-center justify-center', COLOR_TEXT_MUTED, 'data-[invalid=true]:text-red-500'],
|
|
88
86
|
{
|
|
89
87
|
variants: {
|
|
90
|
-
variant: {
|
|
91
|
-
outline: 'text-gray-500',
|
|
92
|
-
filled: 'text-gray-500',
|
|
93
|
-
ghost: 'text-gray-400',
|
|
94
|
-
},
|
|
95
88
|
size: {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
lg: 'h-6 w-6',
|
|
89
|
+
default: 'h-5 w-5',
|
|
90
|
+
small: 'h-4 w-4',
|
|
99
91
|
},
|
|
100
92
|
},
|
|
101
93
|
defaultVariants: {
|
|
102
|
-
|
|
103
|
-
size: 'md',
|
|
94
|
+
size: 'default',
|
|
104
95
|
},
|
|
105
96
|
},
|
|
106
97
|
);
|
|
@@ -108,12 +99,12 @@ export const selectIconVariants = cva(
|
|
|
108
99
|
// ── Content ─────────────────────────────────────────────────
|
|
109
100
|
|
|
110
101
|
export const selectContentVariants = cva([
|
|
111
|
-
|
|
112
|
-
|
|
102
|
+
COLOR_BG_PRIMARY,
|
|
103
|
+
`border ${COLOR_BORDER_DEFAULT}`,
|
|
113
104
|
'overflow-hidden',
|
|
114
|
-
|
|
105
|
+
RADIUS_MD,
|
|
115
106
|
Platform.select({
|
|
116
|
-
web:
|
|
107
|
+
web: SHADOW_MD,
|
|
117
108
|
default: '',
|
|
118
109
|
}),
|
|
119
110
|
'max-h-60',
|
|
@@ -127,22 +118,21 @@ export const selectItemVariants = cva(
|
|
|
127
118
|
'flex-row items-center',
|
|
128
119
|
'transition-colors duration-100',
|
|
129
120
|
'data-[disabled=true]:opacity-50 data-[disabled=true]:pointer-events-none',
|
|
130
|
-
'data-[state=checked]:bg-
|
|
121
|
+
'data-[state=checked]:bg-slate-50 data-[state=checked]:font-medium',
|
|
131
122
|
Platform.select({
|
|
132
|
-
default: 'data-[active=true]:bg-
|
|
133
|
-
web: 'data-[hover=true]:bg-
|
|
123
|
+
default: 'data-[active=true]:bg-slate-100',
|
|
124
|
+
web: 'data-[hover=true]:bg-slate-50 data-[active=true]:data-[hover=true]:bg-slate-100 data-[highlighted=true]:bg-slate-50',
|
|
134
125
|
}),
|
|
135
126
|
],
|
|
136
127
|
{
|
|
137
128
|
variants: {
|
|
138
129
|
size: {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
lg: 'px-4 py-2.5',
|
|
130
|
+
default: 'px-3 py-2',
|
|
131
|
+
small: 'px-2.5 py-1.5',
|
|
142
132
|
},
|
|
143
133
|
},
|
|
144
134
|
defaultVariants: {
|
|
145
|
-
size: '
|
|
135
|
+
size: 'default',
|
|
146
136
|
},
|
|
147
137
|
},
|
|
148
138
|
);
|
|
@@ -150,17 +140,16 @@ export const selectItemVariants = cva(
|
|
|
150
140
|
// ── ItemLabel ───────────────────────────────────────────────
|
|
151
141
|
|
|
152
142
|
export const selectItemLabelVariants = cva(
|
|
153
|
-
[
|
|
143
|
+
[COLOR_TEXT_PRIMARY, 'data-[state=checked]:font-medium'],
|
|
154
144
|
{
|
|
155
145
|
variants: {
|
|
156
146
|
size: {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
lg: 'text-lg',
|
|
147
|
+
default: SIZE_SCALE.default.text,
|
|
148
|
+
small: SIZE_SCALE.small.text,
|
|
160
149
|
},
|
|
161
150
|
},
|
|
162
151
|
defaultVariants: {
|
|
163
|
-
size: '
|
|
152
|
+
size: 'default',
|
|
164
153
|
},
|
|
165
154
|
},
|
|
166
155
|
);
|
|
@@ -1,21 +1,8 @@
|
|
|
1
1
|
import type { ForwardedRef } from 'react';
|
|
2
2
|
import { forwardRef } from 'react';
|
|
3
3
|
import { View, type ViewProps } from 'react-native';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
// TODO: Integrate with tokens (multiply by spacing)
|
|
7
|
-
const spaceScale = {
|
|
8
|
-
xs: 1,
|
|
9
|
-
sm: 2,
|
|
10
|
-
md: 3,
|
|
11
|
-
lg: 4,
|
|
12
|
-
xl: 5,
|
|
13
|
-
'2xl': 6,
|
|
14
|
-
'3xl': 7,
|
|
15
|
-
'4xl': 8,
|
|
16
|
-
} as const;
|
|
17
|
-
|
|
18
|
-
type StackSpace = keyof typeof spaceScale;
|
|
4
|
+
import { cn } from '@cdx-ui/utils';
|
|
5
|
+
import { hStackRootVariants, type StackSpace } from './styles';
|
|
19
6
|
|
|
20
7
|
export interface HStackProps extends ViewProps {
|
|
21
8
|
className?: string;
|
|
@@ -24,13 +11,15 @@ export interface HStackProps extends ViewProps {
|
|
|
24
11
|
}
|
|
25
12
|
|
|
26
13
|
export const HStack = forwardRef<View, HStackProps>(
|
|
27
|
-
(
|
|
28
|
-
|
|
14
|
+
(
|
|
15
|
+
{ reversed = false, space, style, className, children, ...restProps },
|
|
16
|
+
ref: ForwardedRef<View>,
|
|
17
|
+
) => {
|
|
29
18
|
return (
|
|
30
19
|
<View
|
|
31
20
|
ref={ref}
|
|
32
|
-
className={className}
|
|
33
|
-
style={
|
|
21
|
+
className={cn(hStackRootVariants({ reversed, space }), className)}
|
|
22
|
+
style={style}
|
|
34
23
|
{...restProps}
|
|
35
24
|
>
|
|
36
25
|
{children}
|
|
@@ -1,21 +1,8 @@
|
|
|
1
1
|
import type { ForwardedRef } from 'react';
|
|
2
2
|
import { forwardRef } from 'react';
|
|
3
3
|
import { View, type ViewProps } from 'react-native';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
// TODO: Integrate with tokens (multiply by spacing)
|
|
7
|
-
const spaceScale = {
|
|
8
|
-
xs: 1,
|
|
9
|
-
sm: 2,
|
|
10
|
-
md: 3,
|
|
11
|
-
lg: 4,
|
|
12
|
-
xl: 5,
|
|
13
|
-
'2xl': 6,
|
|
14
|
-
'3xl': 7,
|
|
15
|
-
'4xl': 8,
|
|
16
|
-
} as const;
|
|
17
|
-
|
|
18
|
-
type StackSpace = keyof typeof spaceScale;
|
|
4
|
+
import { cn } from '@cdx-ui/utils';
|
|
5
|
+
import { vStackRootVariants, type StackSpace } from './styles';
|
|
19
6
|
|
|
20
7
|
export interface VStackProps extends ViewProps {
|
|
21
8
|
className?: string;
|
|
@@ -24,17 +11,15 @@ export interface VStackProps extends ViewProps {
|
|
|
24
11
|
}
|
|
25
12
|
|
|
26
13
|
export const VStack = forwardRef<View, VStackProps>(
|
|
27
|
-
(
|
|
28
|
-
|
|
14
|
+
(
|
|
15
|
+
{ reversed = false, space, style, className, children, ...restProps },
|
|
16
|
+
ref: ForwardedRef<View>,
|
|
17
|
+
) => {
|
|
29
18
|
return (
|
|
30
19
|
<View
|
|
31
20
|
ref={ref}
|
|
32
|
-
className={className}
|
|
33
|
-
style={
|
|
34
|
-
{ flexDirection: reversed ? 'column-reverse' : 'column' },
|
|
35
|
-
gap ? { gap } : null,
|
|
36
|
-
style,
|
|
37
|
-
]}
|
|
21
|
+
className={cn(vStackRootVariants({ reversed, space }), className)}
|
|
22
|
+
style={style}
|
|
38
23
|
{...restProps}
|
|
39
24
|
>
|
|
40
25
|
{children}
|