@kalink-ui/seedly 0.9.0 → 0.11.0
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/CHANGELOG.md +23 -0
- package/package.json +14 -6
- package/src/components/box/box.css.ts +2 -2
- package/src/components/button/button.css.ts +52 -50
- package/src/components/button/button.tsx +15 -12
- package/src/components/button/index.ts +1 -1
- package/src/components/button-icon/button-icon.css.ts +90 -0
- package/src/components/button-icon/button-icon.tsx +23 -0
- package/src/components/button-icon/index.ts +1 -0
- package/src/components/card/card.tsx +7 -4
- package/src/components/card/index.ts +1 -1
- package/src/components/center/center.tsx +2 -2
- package/src/components/center/index.ts +1 -1
- package/src/components/cluster/cluster.css.ts +17 -0
- package/src/components/command/command-empty.tsx +14 -0
- package/src/components/command/command-group.css.ts +34 -0
- package/src/components/command/command-group.tsx +19 -0
- package/src/components/command/command-input.css.ts +31 -0
- package/src/components/command/command-input.tsx +44 -0
- package/src/components/command/command-item.css.ts +27 -0
- package/src/components/command/command-item.tsx +35 -0
- package/src/components/command/command-list.css.ts +14 -0
- package/src/components/command/command-list.tsx +19 -0
- package/src/components/command/command-separator.tsx +29 -0
- package/src/components/command/command.tsx +24 -0
- package/src/components/command/index.ts +7 -0
- package/src/components/cover/index.ts +1 -1
- package/src/components/divider/divider.css.ts +11 -0
- package/src/components/divider/divider.tsx +11 -0
- package/src/components/divider/index.ts +1 -0
- package/src/components/form-field/form-field-context.ts +18 -0
- package/src/components/form-field/form-field-control.tsx +34 -0
- package/src/components/form-field/form-field-description.tsx +16 -0
- package/src/components/form-field/form-field-error.tsx +22 -0
- package/src/components/form-field/form-field-item-context.ts +6 -0
- package/src/components/form-field/form-field-item.tsx +28 -0
- package/src/components/form-field/form-field-label.tsx +27 -0
- package/src/components/form-field/form-field-message.tsx +33 -0
- package/src/components/form-field/form-field.css.ts +97 -0
- package/src/components/form-field/form-field.tsx +56 -0
- package/src/components/form-field/index.ts +9 -0
- package/src/components/frame/frame.css.ts +8 -8
- package/src/components/frame/frame.tsx +2 -6
- package/src/components/frame/index.ts +1 -1
- package/src/components/heading/heading.tsx +43 -8
- package/src/components/index.ts +29 -15
- package/src/components/input/index.ts +2 -0
- package/src/components/input/input-wrapper.tsx +58 -0
- package/src/components/input/input.css.ts +250 -0
- package/src/components/input/input.tsx +56 -0
- package/src/components/label/index.ts +1 -0
- package/src/components/label/label.css.ts +37 -0
- package/src/components/label/label.tsx +23 -0
- package/src/components/loader/index.ts +1 -0
- package/src/components/loader/loader.css.ts +109 -0
- package/src/components/loader/moon-loader.tsx +43 -0
- package/src/components/loader-overlay/index.ts +1 -0
- package/src/components/loader-overlay/loader-overlay.css.ts +35 -0
- package/src/components/loader-overlay/loader-overlay.tsx +28 -0
- package/src/components/menu/index.ts +2 -0
- package/src/components/menu/menu-item.css.ts +79 -0
- package/src/components/menu/menu-separator.css.ts +53 -0
- package/src/components/popover/index.ts +3 -0
- package/src/components/popover/popover-content.css.ts +107 -0
- package/src/components/popover/popover-content.tsx +82 -0
- package/src/components/popover/popover.tsx +6 -0
- package/src/components/scroll-area/index.ts +1 -0
- package/src/components/scroll-area/scroll-area.css.ts +72 -0
- package/src/components/scroll-area/scroll-area.tsx +39 -0
- package/src/components/scroll-area/scroll-bar.tsx +37 -0
- package/src/components/seed/seed.tsx +4 -4
- package/src/components/select/index.ts +5 -0
- package/src/components/select/select-content.css.ts +22 -0
- package/src/components/select/select-content.tsx +51 -0
- package/src/components/select/select-item.css.ts +24 -0
- package/src/components/select/select-item.tsx +24 -0
- package/src/components/select/select-root.tsx +14 -0
- package/src/components/select/select-trigger.css.ts +75 -0
- package/src/components/select/select-trigger.tsx +47 -0
- package/src/components/select/select.tsx +85 -0
- package/src/components/sheet/index.ts +5 -0
- package/src/components/sheet/sheet-content.css.ts +143 -0
- package/src/components/sheet/sheet-content.tsx +43 -0
- package/src/components/sheet/sheet-description.tsx +21 -0
- package/src/components/sheet/sheet-footer.tsx +15 -0
- package/src/components/sheet/sheet-header.css.ts +35 -0
- package/src/components/sheet/sheet-header.tsx +32 -0
- package/src/components/sheet/sheet-overlay.css.ts +43 -0
- package/src/components/sheet/sheet-overlay.tsx +14 -0
- package/src/components/sheet/sheet-title.tsx +31 -0
- package/src/components/sheet/sheet.tsx +8 -0
- package/src/components/stack/index.ts +1 -1
- package/src/components/stack/stack.css.ts +5 -1
- package/src/components/stack/stack.tsx +2 -2
- package/src/components/text/index.ts +6 -0
- package/src/components/text/text.css.ts +31 -4
- package/src/components/text-field/index.ts +1 -0
- package/src/components/text-field/text-field.css.ts +3 -0
- package/src/components/text-field/text-field.tsx +64 -0
- package/src/components/textarea/index.ts +1 -0
- package/src/components/textarea/textarea-input.tsx +20 -0
- package/src/components/textarea/textarea.css.ts +10 -0
- package/src/components/textarea/textarea.tsx +69 -0
- package/src/styles/define-responsive-properties.ts +242 -0
- package/src/styles/extract-sprinkles-props.ts +29 -35
- package/src/styles/index.ts +9 -0
- package/src/styles/reset.css.ts +1 -0
- package/src/styles/visually-hidden.css.ts +21 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ElementType, ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
import { Stack, StackProps } from '../stack';
|
|
4
|
+
|
|
5
|
+
import { SheetClose } from './sheet';
|
|
6
|
+
import { SheetContentVariants } from './sheet-content.css';
|
|
7
|
+
import { sheetHeader, sheetHeaderCloseBtn } from './sheet-header.css';
|
|
8
|
+
|
|
9
|
+
type SheetHeaderProps<TUse extends ElementType> = StackProps<TUse> & {
|
|
10
|
+
side: SheetContentVariants['side'];
|
|
11
|
+
closeBtn: ReactNode;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export function SheetHeader<TUse extends ElementType>({
|
|
15
|
+
ref,
|
|
16
|
+
spacing = 2,
|
|
17
|
+
children,
|
|
18
|
+
side,
|
|
19
|
+
closeBtn,
|
|
20
|
+
...props
|
|
21
|
+
}: SheetHeaderProps<TUse>) {
|
|
22
|
+
return (
|
|
23
|
+
<div ref={ref} className={sheetHeader({ side })}>
|
|
24
|
+
<Stack spacing={spacing} {...props}>
|
|
25
|
+
{children}
|
|
26
|
+
</Stack>
|
|
27
|
+
<SheetClose asChild className={sheetHeaderCloseBtn}>
|
|
28
|
+
{closeBtn}
|
|
29
|
+
</SheetClose>
|
|
30
|
+
</div>
|
|
31
|
+
);
|
|
32
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { keyframes, style } from '@vanilla-extract/css';
|
|
2
|
+
|
|
3
|
+
import { sys } from '../../styles';
|
|
4
|
+
|
|
5
|
+
const enterAnimation = keyframes({
|
|
6
|
+
'0%': {
|
|
7
|
+
opacity: 0,
|
|
8
|
+
},
|
|
9
|
+
'100%': {
|
|
10
|
+
opacity: 1,
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
const exitAnimation = keyframes({
|
|
15
|
+
'0%': {
|
|
16
|
+
opacity: 1,
|
|
17
|
+
},
|
|
18
|
+
'100%': {
|
|
19
|
+
opacity: 0,
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
export const sheetOverlay = style({
|
|
24
|
+
zIndex: 50,
|
|
25
|
+
|
|
26
|
+
position: 'fixed',
|
|
27
|
+
inset: 0,
|
|
28
|
+
|
|
29
|
+
backgroundColor: `color(from ${sys.color.background} srgb r g b / 0.5)`,
|
|
30
|
+
|
|
31
|
+
animationDuration: sys.motion.duration.medium[2],
|
|
32
|
+
animationTimingFunction: sys.motion.easing.standard,
|
|
33
|
+
backdropFilter: 'blur(4px)',
|
|
34
|
+
|
|
35
|
+
selectors: {
|
|
36
|
+
'&[data-state="open"]': {
|
|
37
|
+
animationName: enterAnimation,
|
|
38
|
+
},
|
|
39
|
+
'&[data-state="closed"]': {
|
|
40
|
+
animationName: exitAnimation,
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { Overlay } from '@radix-ui/react-dialog';
|
|
4
|
+
import { clsx } from 'clsx';
|
|
5
|
+
import { ComponentPropsWithoutRef } from 'react';
|
|
6
|
+
|
|
7
|
+
import { sheetOverlay } from './sheet-overlay.css';
|
|
8
|
+
|
|
9
|
+
export function SheetOverlay({
|
|
10
|
+
className,
|
|
11
|
+
...props
|
|
12
|
+
}: ComponentPropsWithoutRef<typeof Overlay>) {
|
|
13
|
+
return <Overlay className={clsx(sheetOverlay, className)} {...props} />;
|
|
14
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { Title } from '@radix-ui/react-dialog';
|
|
4
|
+
import { ComponentPropsWithRef } from 'react';
|
|
5
|
+
|
|
6
|
+
import { Heading, HeadingProps, HeadingTypes } from '../heading';
|
|
7
|
+
|
|
8
|
+
type SheetTitleProps<TUse extends HeadingTypes> = ComponentPropsWithRef<
|
|
9
|
+
typeof Title
|
|
10
|
+
> &
|
|
11
|
+
HeadingProps<TUse>;
|
|
12
|
+
|
|
13
|
+
export function SheetTitle<TUse extends HeadingTypes>(
|
|
14
|
+
props: SheetTitleProps<TUse>,
|
|
15
|
+
) {
|
|
16
|
+
const { use = 'h2', className, children, variant, size, ...rest } = props;
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
<Title asChild>
|
|
20
|
+
<Heading
|
|
21
|
+
use={use as HeadingProps<TUse>['use']}
|
|
22
|
+
variant={variant}
|
|
23
|
+
size={size}
|
|
24
|
+
className={className}
|
|
25
|
+
{...rest}
|
|
26
|
+
>
|
|
27
|
+
{children}
|
|
28
|
+
</Heading>
|
|
29
|
+
</Title>
|
|
30
|
+
);
|
|
31
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { Stack } from './stack';
|
|
1
|
+
export { Stack, type StackProps } from './stack';
|
|
2
2
|
export { stackRecipe, type StackVariants } from './stack.css';
|
|
@@ -4,7 +4,11 @@ import { recipe, type RecipeVariants } from '@vanilla-extract/recipes';
|
|
|
4
4
|
import { sys, mapContractVars } from '../../styles';
|
|
5
5
|
import { components } from '../../styles/layers.css';
|
|
6
6
|
|
|
7
|
-
const spacing = createVar(
|
|
7
|
+
const spacing = createVar({
|
|
8
|
+
syntax: '<length>',
|
|
9
|
+
initialValue: sys.spacing['0'],
|
|
10
|
+
inherits: false,
|
|
11
|
+
});
|
|
8
12
|
|
|
9
13
|
export const stackRecipe = recipe({
|
|
10
14
|
base: {
|
|
@@ -4,8 +4,8 @@ import { ElementType } from 'react';
|
|
|
4
4
|
|
|
5
5
|
import { stackRecipe, StackVariants } from './stack.css';
|
|
6
6
|
|
|
7
|
-
type StackProps<TUse extends ElementType> =
|
|
8
|
-
StackVariants;
|
|
7
|
+
export type StackProps<TUse extends ElementType> =
|
|
8
|
+
PolymorphicComponentProps<TUse> & StackVariants;
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* A custom element for injecting white space (margin) between flow
|
|
@@ -3,7 +3,8 @@ import { recipe, type RecipeVariants } from '@vanilla-extract/recipes';
|
|
|
3
3
|
|
|
4
4
|
import { components } from '../../styles/layers.css';
|
|
5
5
|
|
|
6
|
-
const lineClampNumber = createVar();
|
|
6
|
+
export const lineClampNumber = createVar();
|
|
7
|
+
export const textAlign = createVar();
|
|
7
8
|
|
|
8
9
|
const lineClamp = style({
|
|
9
10
|
'@layer': {
|
|
@@ -17,6 +18,17 @@ const lineClamp = style({
|
|
|
17
18
|
});
|
|
18
19
|
|
|
19
20
|
export const textRecipe = recipe({
|
|
21
|
+
base: {
|
|
22
|
+
'@layer': {
|
|
23
|
+
[components]: {
|
|
24
|
+
textAlign,
|
|
25
|
+
|
|
26
|
+
vars: {
|
|
27
|
+
[textAlign]: 'inherit',
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
20
32
|
variants: {
|
|
21
33
|
/**
|
|
22
34
|
* Controls the wrapping of the text.
|
|
@@ -131,21 +143,36 @@ export const textRecipe = recipe({
|
|
|
131
143
|
start: {
|
|
132
144
|
'@layer': {
|
|
133
145
|
[components]: {
|
|
134
|
-
|
|
146
|
+
vars: {
|
|
147
|
+
[textAlign]: 'start',
|
|
148
|
+
},
|
|
135
149
|
},
|
|
136
150
|
},
|
|
137
151
|
},
|
|
138
152
|
center: {
|
|
139
153
|
'@layer': {
|
|
140
154
|
[components]: {
|
|
141
|
-
|
|
155
|
+
vars: {
|
|
156
|
+
[textAlign]: 'center',
|
|
157
|
+
},
|
|
142
158
|
},
|
|
143
159
|
},
|
|
144
160
|
},
|
|
145
161
|
end: {
|
|
146
162
|
'@layer': {
|
|
147
163
|
[components]: {
|
|
148
|
-
|
|
164
|
+
vars: {
|
|
165
|
+
[textAlign]: 'end',
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
justify: {
|
|
171
|
+
'@layer': {
|
|
172
|
+
[components]: {
|
|
173
|
+
vars: {
|
|
174
|
+
[textAlign]: 'justify',
|
|
175
|
+
},
|
|
149
176
|
},
|
|
150
177
|
},
|
|
151
178
|
},
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { TextField } from './text-field';
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
FormField,
|
|
5
|
+
FormFieldControl,
|
|
6
|
+
FormFieldDescription,
|
|
7
|
+
FormFieldError,
|
|
8
|
+
FormFieldItem,
|
|
9
|
+
FormFieldLabel,
|
|
10
|
+
} from '../form-field';
|
|
11
|
+
import { Input, InputProps } from '../input';
|
|
12
|
+
|
|
13
|
+
export type TextFieldProps = InputProps & {
|
|
14
|
+
name: string;
|
|
15
|
+
label: string;
|
|
16
|
+
description?: string;
|
|
17
|
+
wrapperClassName?: string;
|
|
18
|
+
hideLabel?: boolean;
|
|
19
|
+
errors?: string | null;
|
|
20
|
+
hideErrorMessage?: boolean;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export function TextField({
|
|
24
|
+
description,
|
|
25
|
+
disabled,
|
|
26
|
+
label,
|
|
27
|
+
name,
|
|
28
|
+
hideLabel = false,
|
|
29
|
+
errors,
|
|
30
|
+
required,
|
|
31
|
+
hideErrorMessage = false,
|
|
32
|
+
size = 'md',
|
|
33
|
+
...rest
|
|
34
|
+
}: TextFieldProps) {
|
|
35
|
+
return (
|
|
36
|
+
<FormField
|
|
37
|
+
name={name}
|
|
38
|
+
label={label}
|
|
39
|
+
errors={errors}
|
|
40
|
+
hideErrorMessage={hideErrorMessage}
|
|
41
|
+
disabled={disabled}
|
|
42
|
+
hideLabel={hideLabel}
|
|
43
|
+
>
|
|
44
|
+
<FormFieldItem>
|
|
45
|
+
<FormFieldLabel required={required} disabled={disabled} size={size}>
|
|
46
|
+
{label}
|
|
47
|
+
</FormFieldLabel>
|
|
48
|
+
|
|
49
|
+
<FormFieldControl>
|
|
50
|
+
<Input
|
|
51
|
+
name={name}
|
|
52
|
+
disabled={disabled}
|
|
53
|
+
required={required}
|
|
54
|
+
size={size}
|
|
55
|
+
{...rest}
|
|
56
|
+
/>
|
|
57
|
+
</FormFieldControl>
|
|
58
|
+
|
|
59
|
+
<FormFieldDescription>{description}</FormFieldDescription>
|
|
60
|
+
<FormFieldError />
|
|
61
|
+
</FormFieldItem>
|
|
62
|
+
</FormField>
|
|
63
|
+
);
|
|
64
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Textarea } from './textarea';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { clsx } from 'clsx';
|
|
2
|
+
import { TextareaHTMLAttributes } from 'react';
|
|
3
|
+
|
|
4
|
+
import { useFormFieldContext } from '../form-field/form-field-context';
|
|
5
|
+
import { textarea } from '../textarea/textarea.css';
|
|
6
|
+
|
|
7
|
+
export function TextareaInput({
|
|
8
|
+
className,
|
|
9
|
+
...props
|
|
10
|
+
}: TextareaHTMLAttributes<HTMLTextAreaElement>) {
|
|
11
|
+
const { errors } = useFormFieldContext();
|
|
12
|
+
|
|
13
|
+
return (
|
|
14
|
+
<textarea
|
|
15
|
+
className={clsx(textarea, className)}
|
|
16
|
+
aria-invalid={errors ? 'true' : undefined}
|
|
17
|
+
{...props}
|
|
18
|
+
/>
|
|
19
|
+
);
|
|
20
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { TextareaHTMLAttributes } from 'react';
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
FormField,
|
|
7
|
+
FormFieldControl,
|
|
8
|
+
FormFieldDescription,
|
|
9
|
+
FormFieldError,
|
|
10
|
+
FormFieldItem,
|
|
11
|
+
FormFieldLabel,
|
|
12
|
+
} from '../form-field';
|
|
13
|
+
import { InputProps } from '../input';
|
|
14
|
+
|
|
15
|
+
import { TextareaInput } from './textarea-input';
|
|
16
|
+
|
|
17
|
+
export type TextareaProps = TextareaHTMLAttributes<HTMLTextAreaElement> &
|
|
18
|
+
InputProps & {
|
|
19
|
+
name: string;
|
|
20
|
+
label: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
hideLabel?: boolean;
|
|
23
|
+
errors: string;
|
|
24
|
+
hideErrorMessage?: boolean;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export function Textarea({
|
|
28
|
+
className,
|
|
29
|
+
description,
|
|
30
|
+
disabled,
|
|
31
|
+
label,
|
|
32
|
+
name,
|
|
33
|
+
hideLabel = false,
|
|
34
|
+
errors,
|
|
35
|
+
required,
|
|
36
|
+
hideErrorMessage = false,
|
|
37
|
+
size = 'md',
|
|
38
|
+
...rest
|
|
39
|
+
}: TextareaProps) {
|
|
40
|
+
return (
|
|
41
|
+
<FormField
|
|
42
|
+
name={name}
|
|
43
|
+
label={label}
|
|
44
|
+
errors={errors}
|
|
45
|
+
hideErrorMessage={hideErrorMessage}
|
|
46
|
+
disabled={disabled}
|
|
47
|
+
hideLabel={hideLabel}
|
|
48
|
+
>
|
|
49
|
+
<FormFieldItem>
|
|
50
|
+
<FormFieldLabel disabled={disabled} required={required} size={size}>
|
|
51
|
+
{label}
|
|
52
|
+
</FormFieldLabel>
|
|
53
|
+
|
|
54
|
+
<FormFieldControl>
|
|
55
|
+
<TextareaInput
|
|
56
|
+
name={name}
|
|
57
|
+
className={className}
|
|
58
|
+
disabled={disabled}
|
|
59
|
+
aria-label={hideLabel ? label : undefined}
|
|
60
|
+
{...rest}
|
|
61
|
+
/>
|
|
62
|
+
</FormFieldControl>
|
|
63
|
+
|
|
64
|
+
<FormFieldDescription>{description}</FormFieldDescription>
|
|
65
|
+
<FormFieldError />
|
|
66
|
+
</FormFieldItem>
|
|
67
|
+
</FormField>
|
|
68
|
+
);
|
|
69
|
+
}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type ConditionalValue,
|
|
3
|
+
defineProperties,
|
|
4
|
+
} from '@vanilla-extract/sprinkles';
|
|
5
|
+
|
|
6
|
+
import { utilities } from './layers.css';
|
|
7
|
+
import { sys } from './system-contract.css';
|
|
8
|
+
|
|
9
|
+
interface ScreenMediaQueries {
|
|
10
|
+
sm: `screen and (min-width: ${string}px)`;
|
|
11
|
+
md: `screen and (min-width: ${string}px)`;
|
|
12
|
+
lg: `screen and (min-width: ${string}px)`;
|
|
13
|
+
xl: `screen and (min-width: ${string}px)`;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface DefineResponsivePropertiesArgs {
|
|
17
|
+
screen: ScreenMediaQueries;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const defineResponsiveProperties = ({
|
|
21
|
+
screen,
|
|
22
|
+
}: DefineResponsivePropertiesArgs) =>
|
|
23
|
+
defineProperties({
|
|
24
|
+
'@layer': utilities,
|
|
25
|
+
|
|
26
|
+
conditions: {
|
|
27
|
+
xs: {},
|
|
28
|
+
sm: { '@media': screen.sm },
|
|
29
|
+
md: { '@media': screen.md },
|
|
30
|
+
lg: { '@media': screen.lg },
|
|
31
|
+
xl: { '@media': screen.xl },
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
defaultCondition: 'xs',
|
|
35
|
+
responsiveArray: ['xs', 'sm', 'md', 'lg', 'xl'],
|
|
36
|
+
|
|
37
|
+
properties: {
|
|
38
|
+
display: [
|
|
39
|
+
'none',
|
|
40
|
+
'block',
|
|
41
|
+
'inline',
|
|
42
|
+
'inline-block',
|
|
43
|
+
'flex',
|
|
44
|
+
'inline-flex',
|
|
45
|
+
'grid',
|
|
46
|
+
'list-item',
|
|
47
|
+
],
|
|
48
|
+
paddingBlockStart: sys.spacing,
|
|
49
|
+
paddingBlockEnd: sys.spacing,
|
|
50
|
+
paddingInlineStart: sys.spacing,
|
|
51
|
+
paddingInlineEnd: sys.spacing,
|
|
52
|
+
|
|
53
|
+
marginBlockStart: sys.spacing,
|
|
54
|
+
marginBlockEnd: sys.spacing,
|
|
55
|
+
marginInlineStart: sys.spacing,
|
|
56
|
+
marginInlineEnd: sys.spacing,
|
|
57
|
+
|
|
58
|
+
columnGap: sys.spacing,
|
|
59
|
+
rowGap: sys.spacing,
|
|
60
|
+
|
|
61
|
+
flexDirection: ['row', 'row-reverse', 'column', 'column-reverse'],
|
|
62
|
+
|
|
63
|
+
justifyContent: [
|
|
64
|
+
'flex-start',
|
|
65
|
+
'flex-end',
|
|
66
|
+
'center',
|
|
67
|
+
'space-between',
|
|
68
|
+
'space-around',
|
|
69
|
+
],
|
|
70
|
+
alignItems: ['flex-start', 'flex-end', 'center', 'baseline', 'stretch'],
|
|
71
|
+
alignSelf: ['flex-start', 'flex-end', 'center', 'baseline', 'stretch'],
|
|
72
|
+
|
|
73
|
+
position: [
|
|
74
|
+
'absolute',
|
|
75
|
+
'relative',
|
|
76
|
+
'fixed',
|
|
77
|
+
'sticky',
|
|
78
|
+
'static',
|
|
79
|
+
'inherit',
|
|
80
|
+
],
|
|
81
|
+
insetBlockStart: sys.spacing,
|
|
82
|
+
insetBlockEnd: sys.spacing,
|
|
83
|
+
insetInlineStart: sys.spacing,
|
|
84
|
+
insetInlineEnd: sys.spacing,
|
|
85
|
+
|
|
86
|
+
textAlign: ['start', 'end', 'center', 'justify'],
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
shorthands: {
|
|
90
|
+
padding: [
|
|
91
|
+
'paddingBlockStart',
|
|
92
|
+
'paddingInlineEnd',
|
|
93
|
+
'paddingBlockEnd',
|
|
94
|
+
'paddingInlineStart',
|
|
95
|
+
],
|
|
96
|
+
paddingBlock: ['paddingBlockStart', 'paddingBlockEnd'],
|
|
97
|
+
paddingInline: ['paddingInlineEnd', 'paddingInlineStart'],
|
|
98
|
+
|
|
99
|
+
margin: [
|
|
100
|
+
'marginBlockStart',
|
|
101
|
+
'marginInlineEnd',
|
|
102
|
+
'marginBlockEnd',
|
|
103
|
+
'marginInlineStart',
|
|
104
|
+
],
|
|
105
|
+
marginBlock: ['marginBlockStart', 'marginBlockEnd'],
|
|
106
|
+
marginInline: ['marginInlineEnd', 'marginInlineStart'],
|
|
107
|
+
|
|
108
|
+
gap: ['rowGap', 'columnGap'],
|
|
109
|
+
|
|
110
|
+
inset: [
|
|
111
|
+
'insetBlockStart',
|
|
112
|
+
'insetInlineEnd',
|
|
113
|
+
'insetBlockEnd',
|
|
114
|
+
'insetInlineStart',
|
|
115
|
+
],
|
|
116
|
+
insetBlock: ['insetBlockStart', 'insetBlockEnd'],
|
|
117
|
+
insetInline: ['insetInlineEnd', 'insetInlineStart'],
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
type DefineResponsiveProperties = ReturnType<typeof defineResponsiveProperties>;
|
|
122
|
+
|
|
123
|
+
export type ResponsiveValue<Value extends string | number> = ConditionalValue<
|
|
124
|
+
DefineResponsiveProperties,
|
|
125
|
+
Value
|
|
126
|
+
>;
|
|
127
|
+
|
|
128
|
+
export type DisplayValues =
|
|
129
|
+
keyof DefineResponsiveProperties['styles']['display']['values'];
|
|
130
|
+
export type JustifyContentValues =
|
|
131
|
+
keyof DefineResponsiveProperties['styles']['justifyContent']['values'];
|
|
132
|
+
export type AlignItemsValues =
|
|
133
|
+
keyof DefineResponsiveProperties['styles']['alignItems']['values'];
|
|
134
|
+
export type AlignSelfValues =
|
|
135
|
+
keyof DefineResponsiveProperties['styles']['alignSelf']['values'];
|
|
136
|
+
export type FlexDirectionValues =
|
|
137
|
+
keyof DefineResponsiveProperties['styles']['flexDirection']['values'];
|
|
138
|
+
export type ColumnGapValues =
|
|
139
|
+
keyof DefineResponsiveProperties['styles']['columnGap']['values'];
|
|
140
|
+
export type RowGapValues =
|
|
141
|
+
keyof DefineResponsiveProperties['styles']['rowGap']['values'];
|
|
142
|
+
|
|
143
|
+
export type PaddingBlockStartValues =
|
|
144
|
+
keyof DefineResponsiveProperties['styles']['paddingBlockStart']['values'];
|
|
145
|
+
export type PaddingBlockEndValues =
|
|
146
|
+
keyof DefineResponsiveProperties['styles']['paddingBlockEnd']['values'];
|
|
147
|
+
export type PaddingInlineStartValues =
|
|
148
|
+
keyof DefineResponsiveProperties['styles']['paddingInlineStart']['values'];
|
|
149
|
+
export type PaddingInlineEndValues =
|
|
150
|
+
keyof DefineResponsiveProperties['styles']['paddingInlineEnd']['values'];
|
|
151
|
+
export type MarginBlockStartValues =
|
|
152
|
+
keyof DefineResponsiveProperties['styles']['marginBlockStart']['values'];
|
|
153
|
+
export type MarginBlockEndValues =
|
|
154
|
+
keyof DefineResponsiveProperties['styles']['marginBlockEnd']['values'];
|
|
155
|
+
export type MarginInlineStartValues =
|
|
156
|
+
keyof DefineResponsiveProperties['styles']['marginInlineStart']['values'];
|
|
157
|
+
export type MarginInlineEndValues =
|
|
158
|
+
keyof DefineResponsiveProperties['styles']['marginInlineEnd']['values'];
|
|
159
|
+
|
|
160
|
+
export type PositionValues =
|
|
161
|
+
keyof DefineResponsiveProperties['styles']['position']['values'];
|
|
162
|
+
export type InsetBlockStartValues =
|
|
163
|
+
keyof DefineResponsiveProperties['styles']['insetBlockStart']['values'];
|
|
164
|
+
export type InsetBlockEndValues =
|
|
165
|
+
keyof DefineResponsiveProperties['styles']['insetBlockEnd']['values'];
|
|
166
|
+
export type InsetInlineStartValues =
|
|
167
|
+
keyof DefineResponsiveProperties['styles']['insetInlineStart']['values'];
|
|
168
|
+
export type InsetInlineEndValues =
|
|
169
|
+
keyof DefineResponsiveProperties['styles']['insetInlineEnd']['values'];
|
|
170
|
+
|
|
171
|
+
export type TextAlignValues =
|
|
172
|
+
keyof DefineResponsiveProperties['styles']['textAlign']['values'];
|
|
173
|
+
|
|
174
|
+
export interface ResponsiveProperties {
|
|
175
|
+
/** Mapped to `display` css property */
|
|
176
|
+
display?: ResponsiveValue<DisplayValues>;
|
|
177
|
+
/** Mapped to `flex-direction` css property */
|
|
178
|
+
flexDirection?: ResponsiveValue<FlexDirectionValues>;
|
|
179
|
+
/** Mapped to `justify-content` css property */
|
|
180
|
+
justifyContent?: ResponsiveValue<JustifyContentValues>;
|
|
181
|
+
/** Mapped to `align-items` css property */
|
|
182
|
+
alignItems?: ResponsiveValue<AlignItemsValues>;
|
|
183
|
+
/** Mapped to `align-self` css property */
|
|
184
|
+
alignSelf?: ResponsiveValue<AlignSelfValues>;
|
|
185
|
+
/** Mapped to `column-gap` css property */
|
|
186
|
+
columnGap?: ResponsiveValue<ColumnGapValues>;
|
|
187
|
+
/** Mapped to `row-gap` css property */
|
|
188
|
+
rowGap?: ResponsiveValue<RowGapValues>;
|
|
189
|
+
/** Mapped to `gap` css property */
|
|
190
|
+
gap?: ResponsiveValue<ColumnGapValues | RowGapValues>;
|
|
191
|
+
|
|
192
|
+
/** Mapped to `padding-block-start` css property */
|
|
193
|
+
paddingBlockStart?: ResponsiveValue<PaddingBlockStartValues>;
|
|
194
|
+
/** Mapped to `padding-block-end` css property */
|
|
195
|
+
paddingBlockEnd?: ResponsiveValue<PaddingBlockEndValues>;
|
|
196
|
+
/** Mapped to `padding-inline-start` css property */
|
|
197
|
+
paddingInlineStart?: ResponsiveValue<PaddingInlineStartValues>;
|
|
198
|
+
/** Mapped to `padding-inline-end` css property */
|
|
199
|
+
paddingInlineEnd?: ResponsiveValue<PaddingInlineEndValues>;
|
|
200
|
+
/** Mapped to `padding` css property */
|
|
201
|
+
padding?: ResponsiveValue<PaddingBlockStartValues | PaddingInlineStartValues>;
|
|
202
|
+
/** Mapped to `padding-block` css property */
|
|
203
|
+
paddingBlock?: ResponsiveValue<
|
|
204
|
+
PaddingBlockStartValues | PaddingBlockEndValues
|
|
205
|
+
>;
|
|
206
|
+
/** Mapped to `padding-inline` css property */
|
|
207
|
+
paddingInline?: ResponsiveValue<
|
|
208
|
+
PaddingInlineStartValues | PaddingInlineEndValues
|
|
209
|
+
>;
|
|
210
|
+
|
|
211
|
+
/** Mapped to `margin-block-start` css property */
|
|
212
|
+
marginBlockStart?: ResponsiveValue<MarginBlockStartValues>;
|
|
213
|
+
/** Mapped to `margin-block-end` css property */
|
|
214
|
+
marginBlockEnd?: ResponsiveValue<MarginBlockEndValues>;
|
|
215
|
+
/** Mapped to `margin-inline-start` css property */
|
|
216
|
+
marginInlineStart?: ResponsiveValue<MarginInlineStartValues>;
|
|
217
|
+
/** Mapped to `margin-inline-end` css property */
|
|
218
|
+
marginInlineEnd?: ResponsiveValue<MarginInlineEndValues>;
|
|
219
|
+
/** Mapped to `margin` css property */
|
|
220
|
+
margin?: ResponsiveValue<MarginBlockStartValues | MarginInlineStartValues>;
|
|
221
|
+
/** Mapped to `margin-block` css property */
|
|
222
|
+
marginBlock?: ResponsiveValue<MarginBlockStartValues | MarginBlockEndValues>;
|
|
223
|
+
/** Mapped to `margin-inline` css property */
|
|
224
|
+
marginInline?: ResponsiveValue<
|
|
225
|
+
MarginInlineStartValues | MarginInlineEndValues
|
|
226
|
+
>;
|
|
227
|
+
|
|
228
|
+
/** Mapped to `position` css property */
|
|
229
|
+
position?: ResponsiveValue<PositionValues>;
|
|
230
|
+
|
|
231
|
+
/** Mapped to `inset-block-start` css property */
|
|
232
|
+
insetBlockStart?: ResponsiveValue<InsetBlockStartValues>;
|
|
233
|
+
/** Mapped to `inset-block-end` css property */
|
|
234
|
+
insetBlockEnd?: ResponsiveValue<InsetBlockEndValues>;
|
|
235
|
+
/** Mapped to `inset-inline-start` css property */
|
|
236
|
+
insetInlineStart?: ResponsiveValue<InsetInlineStartValues>;
|
|
237
|
+
/** Mapped to `inset-inline-end` css property */
|
|
238
|
+
insetInlineEnd?: ResponsiveValue<InsetInlineEndValues>;
|
|
239
|
+
|
|
240
|
+
/** Mapped to `text-align` css property */
|
|
241
|
+
textAlign?: ResponsiveValue<TextAlignValues>;
|
|
242
|
+
}
|