@latte-macchiat-io/latte-vanilla-components 0.0.257 → 0.0.259

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@latte-macchiat-io/latte-vanilla-components",
3
- "version": "0.0.257",
3
+ "version": "0.0.259",
4
4
  "description": "Beautiful components for amazing projects, with a touch of Vanilla 🥤",
5
5
  "type": "module",
6
6
  "main": "./src/index.ts",
@@ -1,4 +1,4 @@
1
- import { style } from '@vanilla-extract/css';
1
+ import { globalStyle, style } from '@vanilla-extract/css';
2
2
 
3
3
  import { themeContract } from '../..';
4
4
  import { queries } from '../../styles/mediaqueries';
@@ -31,3 +31,7 @@ export const footerRecipe = style([
31
31
  },
32
32
  },
33
33
  ]);
34
+
35
+ globalStyle(`${footerRecipe} a `, {
36
+ color: themeContract.footer.linkColor,
37
+ });
@@ -39,6 +39,7 @@ const themeFooterBase = {
39
39
  export const themeFooterLight = {
40
40
  footer: {
41
41
  ...themeFooterBase.footer,
42
+ linkColor: '#FF7377',
42
43
  backgroundColor: '#FF7377',
43
44
  },
44
45
  };
@@ -46,6 +47,7 @@ export const themeFooterLight = {
46
47
  export const themeFooterDark = {
47
48
  footer: {
48
49
  ...themeFooterBase.footer,
50
+ linkColor: '#FF7377',
49
51
  backgroundColor: '#FF7377',
50
52
  },
51
53
  };
@@ -1,5 +1,4 @@
1
- export { Form, type FormProps } from './Form';
2
- export { type FormVariants } from './Form.css';
1
+ export { Form, type FormProps } from '.';
3
2
 
4
3
  export { Row, type RowProps } from '../Form/Row/Row';
5
4
  export { type RowVariants } from '../Form/Row/Row.css';
@@ -0,0 +1,11 @@
1
+ import { clsx } from 'clsx';
2
+ import { forwardRef } from 'react';
3
+ import { formRecipe } from './styles.css';
4
+
5
+ export type FormProps = React.HTMLAttributes<HTMLDivElement> & {
6
+ children: React.ReactNode;
7
+ };
8
+
9
+ export const Form = forwardRef<HTMLFormElement, FormProps>(({ children, className, ...rest }) => {
10
+ return <form className={clsx(formRecipe(), className)}>{children}</form>;
11
+ });
@@ -0,0 +1,27 @@
1
+ import { style } from '@vanilla-extract/css';
2
+ import { recipe } from '@vanilla-extract/recipes';
3
+
4
+ import { themeContract } from '../../theme/contract.css';
5
+ import { generateResponsiveMedia } from '../../utils/generateResponsiveMedia';
6
+
7
+ const formBase = style({
8
+ backgroundColor: themeContract.form.backgroundColor,
9
+
10
+ '@media': {
11
+ ...generateResponsiveMedia({
12
+ gap: themeContract.form.gap,
13
+ width: themeContract.form.width,
14
+ paddingTop: themeContract.form.paddingBottom,
15
+ paddingBottom: themeContract.form.paddingBottom,
16
+ paddingRight: themeContract.form.paddingRight,
17
+ paddingLeft: themeContract.form.paddingLeft,
18
+ }),
19
+ },
20
+ });
21
+
22
+ export const formRecipe = recipe(
23
+ {
24
+ base: formBase,
25
+ },
26
+ 'form'
27
+ );
@@ -0,0 +1,66 @@
1
+ const themeFormBase = {
2
+ form: {
3
+ width: {
4
+ mobile: '15px',
5
+ sm: '15px',
6
+ md: '30px',
7
+ lg: '30px',
8
+ xl: '50px',
9
+ '2xl': '50px',
10
+ },
11
+ gap: {
12
+ mobile: '15px',
13
+ sm: '15px',
14
+ md: '30px',
15
+ lg: '30px',
16
+ xl: '50px',
17
+ '2xl': '50px',
18
+ },
19
+ paddingTop: {
20
+ mobile: '15px',
21
+ sm: '15px',
22
+ md: '30px',
23
+ lg: '30px',
24
+ xl: '50px',
25
+ '2xl': '50px',
26
+ },
27
+ paddingBottom: {
28
+ mobile: '15px',
29
+ sm: '15px',
30
+ md: '30px',
31
+ lg: '30px',
32
+ xl: '50px',
33
+ '2xl': '50px',
34
+ },
35
+ paddingRight: {
36
+ mobile: '15px',
37
+ sm: '15px',
38
+ md: '30px',
39
+ lg: '30px',
40
+ xl: '50px',
41
+ '2xl': '50px',
42
+ },
43
+ paddingLeft: {
44
+ mobile: '15px',
45
+ sm: '15px',
46
+ md: '30px',
47
+ lg: '30px',
48
+ xl: '50px',
49
+ '2xl': '50px',
50
+ },
51
+ },
52
+ };
53
+
54
+ export const themeFormLight = {
55
+ form: {
56
+ ...themeFormBase.form,
57
+ backgroundColor: '#000000',
58
+ },
59
+ };
60
+
61
+ export const themeFormDark = {
62
+ form: {
63
+ ...themeFormBase.form,
64
+ backgroundColor: '#000000',
65
+ },
66
+ };
@@ -3,6 +3,7 @@ import { themeButtonDark, themeButtonLight } from '../components/Button/theme';
3
3
  import { themeCarouselDark, themeCarouselLight } from '../components/Carousel/theme';
4
4
  import { themeColumnsDark, themeColumnsLight } from '../components/Columns/theme';
5
5
  import { themeFooterDark, themeFooterLight } from '../components/Footer/theme';
6
+ import { themeFormDark, themeFormLight } from '../components/Form/theme';
6
7
  import { themeHeaderDark, themeHeaderLight } from '../components/Header/theme';
7
8
  import { themeHeadingDark, themeHeadingLight } from '../components/Heading/theme';
8
9
  import { themeIconDark, themeIconLight } from '../components/Icon/theme';
@@ -139,6 +140,7 @@ export const baseLightTheme = {
139
140
  ...themeNavSocialLight,
140
141
 
141
142
  ...themeVideoLight,
143
+ ...themeFormLight,
142
144
  };
143
145
 
144
146
  export const baseDarkTheme = {
@@ -266,4 +268,6 @@ export const baseDarkTheme = {
266
268
  ...themeNavSocialDark,
267
269
 
268
270
  ...themeVideoDark,
271
+
272
+ ...themeFormDark,
269
273
  };
@@ -189,6 +189,7 @@ export const themeContract = createGlobalThemeContract({
189
189
  },
190
190
  footer: {
191
191
  fontSize: 'latte-footer-fontSize',
192
+ linkColor: 'latte-footer-linkColor',
192
193
  backgroundColor: 'latte-footer-backgroundColor',
193
194
  height: {
194
195
  mobile: 'latte-footer-height-mobile',
@@ -853,4 +854,56 @@ export const themeContract = createGlobalThemeContract({
853
854
  },
854
855
  },
855
856
  },
857
+
858
+ form: {
859
+ backgroundColor: 'latte-form-backgroundColor',
860
+ width: {
861
+ mobile: 'latte-form-width-mobile',
862
+ sm: 'latte-form-width-sm',
863
+ md: 'latte-form-width-md',
864
+ lg: 'latte-form-width-lg',
865
+ xl: 'latte-form-width-xl',
866
+ '2xl': 'latte-form-width-2xl',
867
+ },
868
+ gap: {
869
+ mobile: 'latte-form-gap-mobile',
870
+ sm: 'latte-form-gap-sm',
871
+ md: 'latte-form-gap-md',
872
+ lg: 'latte-form-gap-lg',
873
+ xl: 'latte-form-gap-xl',
874
+ '2xl': 'latte-form-gap-2xl',
875
+ },
876
+ paddingTop: {
877
+ mobile: 'latte-form-paddingTop-mobile',
878
+ sm: 'latte-form-paddingTop-sm',
879
+ md: 'latte-form-paddingTop-md',
880
+ lg: 'latte-form-paddingTop-lg',
881
+ xl: 'latte-form-paddingTop-xl',
882
+ '2xl': 'latte-form-paddingTop-2xl',
883
+ },
884
+ paddingBottom: {
885
+ mobile: 'latte-form-paddingBottom-mobile',
886
+ sm: 'latte-form-paddingBottom-sm',
887
+ md: 'latte-form-paddingBottom-md',
888
+ lg: 'latte-form-paddingBottom-lg',
889
+ xl: 'latte-form-paddingBottom-xl',
890
+ '2xl': 'latte-form-paddingBottom-2xl',
891
+ },
892
+ paddingRight: {
893
+ mobile: 'latte-form-paddingRight-mobile',
894
+ sm: 'latte-form-paddingRight-sm',
895
+ md: 'latte-form-paddingRight-md',
896
+ lg: 'latte-form-paddingRight-lg',
897
+ xl: 'latte-form-paddingRight-xl',
898
+ '2xl': 'latte-form-paddingRight-2xl',
899
+ },
900
+ paddingLeft: {
901
+ mobile: 'latte-form-paddingLeft-mobile',
902
+ sm: 'latte-form-paddingLeft-sm',
903
+ md: 'latte-form-paddingLeft-md',
904
+ lg: 'latte-form-paddingLeft-lg',
905
+ xl: 'latte-form-paddingLeft-xl',
906
+ '2xl': 'latte-form-paddingLeft-2xl',
907
+ },
908
+ },
856
909
  });
@@ -30,6 +30,7 @@ export type ThemeOverrides = {
30
30
  navSocial?: Partial<typeof baseLightTheme.navSocial>;
31
31
  video?: Partial<typeof baseLightTheme.video>;
32
32
  carousel?: Partial<typeof baseLightTheme.carousel>;
33
+ form?: Partial<typeof baseLightTheme.form>;
33
34
  };
34
35
 
35
36
  // Utility to create a theme with partial overrides over light theme base
@@ -61,6 +62,7 @@ const createAppTheme = (selector: string, overrides: ThemeOverrides = {}) => {
61
62
  navSocial: { ...baseLightTheme.navSocial, ...overrides.navSocial },
62
63
  video: { ...baseLightTheme.video, ...overrides.video },
63
64
  carousel: { ...baseLightTheme.carousel, ...overrides.carousel },
65
+ form: { ...baseLightTheme.form, ...overrides.carousel },
64
66
  });
65
67
  };
66
68
 
@@ -93,6 +95,7 @@ const createAppDarkTheme = (selector: string, overrides: ThemeOverrides = {}) =>
93
95
  navSocial: { ...baseDarkTheme.navSocial, ...overrides.navSocial },
94
96
  video: { ...baseDarkTheme.video, ...overrides.video },
95
97
  carousel: { ...baseDarkTheme.carousel, ...overrides.carousel },
98
+ form: { ...baseDarkTheme.form, ...overrides.carousel },
96
99
  });
97
100
  };
98
101
 
@@ -1,67 +0,0 @@
1
- import { style } from '@vanilla-extract/css';
2
- import { recipe, RecipeVariants } from '@vanilla-extract/recipes';
3
- import { themeContract } from '../../theme/contract.css';
4
-
5
- const formBase = style({
6
- width: '100%',
7
- backgroundColor: 'transparent',
8
- });
9
-
10
- export const formRecipe = recipe(
11
- {
12
- base: formBase,
13
-
14
- variants: {
15
- spacing: {
16
- none: {
17
- gap: 0,
18
- },
19
- sm: {
20
- display: 'flex',
21
- flexDirection: 'column',
22
- gap: themeContract.space.sm,
23
- },
24
- md: {
25
- display: 'flex',
26
- flexDirection: 'column',
27
- gap: themeContract.space.md,
28
- },
29
- lg: {
30
- display: 'flex',
31
- flexDirection: 'column',
32
- gap: themeContract.space.lg,
33
- },
34
- xl: {
35
- display: 'flex',
36
- flexDirection: 'column',
37
- gap: themeContract.space.xl,
38
- },
39
- },
40
- layout: {
41
- stacked: {
42
- display: 'flex',
43
- flexDirection: 'column',
44
- },
45
- inline: {
46
- display: 'flex',
47
- flexDirection: 'row',
48
- flexWrap: 'wrap',
49
- alignItems: 'flex-end',
50
- },
51
- grid: {
52
- display: 'grid',
53
- gridTemplateColumns: 'repeat(auto-fit, minmax(250px, 1fr))',
54
- gap: themeContract.space.md,
55
- },
56
- },
57
- },
58
-
59
- defaultVariants: {
60
- spacing: 'md',
61
- layout: 'stacked',
62
- },
63
- },
64
- 'form'
65
- );
66
-
67
- export type FormVariants = RecipeVariants<typeof formRecipe>;
@@ -1,122 +0,0 @@
1
- import { clsx } from 'clsx';
2
- import { forwardRef } from 'react';
3
- import { formRecipe, type FormVariants } from './Form.css';
4
- import { sprinkles, type Sprinkles } from '../../styles/sprinkles.css';
5
-
6
- export interface FormProps extends Omit<React.FormHTMLAttributes<HTMLFormElement>, 'color'>, Sprinkles, NonNullable<FormVariants> {
7
- children: React.ReactNode;
8
- }
9
-
10
- export const Form = forwardRef<HTMLFormElement, FormProps>(
11
- (
12
- {
13
- children,
14
- spacing,
15
- layout,
16
- className,
17
- // Extract sprinkles props
18
- margin,
19
- marginTop,
20
- marginBottom,
21
- marginLeft,
22
- marginRight,
23
- padding,
24
- paddingTop,
25
- paddingBottom,
26
- paddingLeft,
27
- paddingRight,
28
- gap,
29
- display,
30
- flexDirection,
31
- justifyContent,
32
- flexWrap,
33
- flex,
34
- width,
35
- height,
36
- minWidth,
37
- maxWidth,
38
- minHeight,
39
- position,
40
- top,
41
- bottom,
42
- left,
43
- right,
44
- zIndex,
45
- fontSize,
46
- fontFamily,
47
- lineHeight,
48
- textAlign,
49
- fontWeight,
50
- color,
51
- backgroundColor,
52
- borderRadius,
53
- borderWidth,
54
- borderStyle,
55
- borderColor,
56
- boxShadow,
57
- opacity,
58
- overflow,
59
- overflowX,
60
- overflowY,
61
- ...htmlProps
62
- },
63
- ref
64
- ) => {
65
- return (
66
- <form
67
- ref={ref}
68
- className={clsx(
69
- formRecipe({ spacing, layout }),
70
- sprinkles({
71
- margin,
72
- marginTop,
73
- marginBottom,
74
- marginLeft,
75
- marginRight,
76
- padding,
77
- paddingTop,
78
- paddingBottom,
79
- paddingLeft,
80
- paddingRight,
81
- gap,
82
- display,
83
- flexDirection,
84
- justifyContent,
85
- flexWrap,
86
- flex,
87
- width,
88
- height,
89
- minWidth,
90
- maxWidth,
91
- minHeight,
92
- position,
93
- top,
94
- bottom,
95
- left,
96
- right,
97
- zIndex,
98
- fontSize,
99
- fontFamily,
100
- lineHeight,
101
- textAlign,
102
- fontWeight,
103
- color,
104
- backgroundColor,
105
- borderRadius,
106
- borderWidth,
107
- borderStyle,
108
- borderColor,
109
- boxShadow,
110
- opacity,
111
- overflow,
112
- overflowX,
113
- overflowY,
114
- }),
115
- className
116
- )}
117
- {...htmlProps}>
118
- {children}
119
- </form>
120
- );
121
- }
122
- );