@latte-macchiat-io/latte-vanilla-components 0.0.175 → 0.0.176

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/css/index.cjs +1 -0
  2. package/dist/css/index.js +34 -0
  3. package/dist/index.cjs.js +2 -2
  4. package/dist/index.es.js +3195 -6145
  5. package/dist/theme.css-CNjMk-g_.cjs +1 -0
  6. package/dist/theme.css-Dj6kL9o0.js +3020 -0
  7. package/dist/types/css/index.d.ts +28 -0
  8. package/dist/types/styles/mediaqueries.d.ts +16 -0
  9. package/dist/types/styles/sprinkles.css.d.ts +3423 -0
  10. package/dist/types/theme/baseThemeValues.d.ts +158 -0
  11. package/dist/types/theme/contract.css.d.ts +79 -0
  12. package/dist/types/theme/index.d.ts +3 -0
  13. package/dist/types/theme/utils.d.ts +86 -0
  14. package/package.json +17 -13
  15. package/src/assets/styles/default-theme.ts +312 -0
  16. package/src/components/Button/stories.ts +127 -0
  17. package/src/components/Columns/stories.ts +35 -0
  18. package/src/components/Icon/path.ts +36 -0
  19. package/src/components/Icon/stories.ts +29 -0
  20. package/src/components/Main/stories.ts +33 -0
  21. package/src/components/Section/stories.ts +64 -0
  22. package/src/css/index.ts +33 -0
  23. package/src/index.ts +96 -0
  24. package/src/styles/mediaqueries.ts +17 -0
  25. package/src/theme/baseThemeValues.ts +160 -0
  26. package/src/theme/index.ts +6 -0
  27. package/src/theme/utils.ts +76 -0
  28. package/src/themes/dark.ts +3 -0
  29. package/src/themes/index.ts +5 -0
  30. package/src/themes/light.ts +3 -0
  31. package/src/types/theme.ts +295 -0
  32. package/src/types/withClassName.ts +3 -0
  33. package/src/utils/cookie.ts +24 -0
  34. package/src/utils/deep-merge-objects.ts +15 -0
  35. package/src/utils/use-breakpoint-key.ts +30 -0
  36. package/src/utils/use-window-size.ts +37 -0
@@ -0,0 +1,158 @@
1
+ export declare const baseLightTheme: {
2
+ colors: {
3
+ primary: string;
4
+ secondary: string;
5
+ accent: string;
6
+ background: string;
7
+ surface: string;
8
+ text: string;
9
+ textSecondary: string;
10
+ textLight: string;
11
+ border: string;
12
+ error: string;
13
+ warning: string;
14
+ success: string;
15
+ info: string;
16
+ };
17
+ space: {
18
+ none: string;
19
+ xs: string;
20
+ sm: string;
21
+ md: string;
22
+ lg: string;
23
+ xl: string;
24
+ '2xl': string;
25
+ };
26
+ radii: {
27
+ none: string;
28
+ sm: string;
29
+ md: string;
30
+ lg: string;
31
+ xl: string;
32
+ full: string;
33
+ };
34
+ fonts: {
35
+ body: string;
36
+ heading: string;
37
+ mono: string;
38
+ };
39
+ fontSizes: {
40
+ xs: string;
41
+ sm: string;
42
+ md: string;
43
+ lg: string;
44
+ xl: string;
45
+ '2xl': string;
46
+ '3xl': string;
47
+ '4xl': string;
48
+ };
49
+ fontWeights: {
50
+ light: string;
51
+ normal: string;
52
+ medium: string;
53
+ semibold: string;
54
+ bold: string;
55
+ };
56
+ lineHeights: {
57
+ tight: string;
58
+ normal: string;
59
+ relaxed: string;
60
+ };
61
+ shadows: {
62
+ none: string;
63
+ sm: string;
64
+ md: string;
65
+ lg: string;
66
+ xl: string;
67
+ };
68
+ maxWidth: string;
69
+ section: {
70
+ paddingTop: string;
71
+ paddingBottom: string;
72
+ };
73
+ header: {
74
+ height: string;
75
+ };
76
+ footer: {
77
+ height: string;
78
+ };
79
+ };
80
+ export declare const baseDarkTheme: {
81
+ colors: {
82
+ primary: string;
83
+ secondary: string;
84
+ accent: string;
85
+ background: string;
86
+ surface: string;
87
+ text: string;
88
+ textSecondary: string;
89
+ textLight: string;
90
+ border: string;
91
+ error: string;
92
+ warning: string;
93
+ success: string;
94
+ info: string;
95
+ };
96
+ space: {
97
+ none: string;
98
+ xs: string;
99
+ sm: string;
100
+ md: string;
101
+ lg: string;
102
+ xl: string;
103
+ '2xl': string;
104
+ };
105
+ radii: {
106
+ none: string;
107
+ sm: string;
108
+ md: string;
109
+ lg: string;
110
+ xl: string;
111
+ full: string;
112
+ };
113
+ fonts: {
114
+ body: string;
115
+ heading: string;
116
+ mono: string;
117
+ };
118
+ fontSizes: {
119
+ xs: string;
120
+ sm: string;
121
+ md: string;
122
+ lg: string;
123
+ xl: string;
124
+ '2xl': string;
125
+ '3xl': string;
126
+ '4xl': string;
127
+ };
128
+ fontWeights: {
129
+ light: string;
130
+ normal: string;
131
+ medium: string;
132
+ semibold: string;
133
+ bold: string;
134
+ };
135
+ lineHeights: {
136
+ tight: string;
137
+ normal: string;
138
+ relaxed: string;
139
+ };
140
+ shadows: {
141
+ none: string;
142
+ sm: string;
143
+ md: string;
144
+ lg: string;
145
+ xl: string;
146
+ };
147
+ maxWidth: string;
148
+ section: {
149
+ paddingTop: string;
150
+ paddingBottom: string;
151
+ };
152
+ header: {
153
+ height: string;
154
+ };
155
+ footer: {
156
+ height: string;
157
+ };
158
+ };
@@ -0,0 +1,79 @@
1
+ export declare const themeContract: {
2
+ colors: {
3
+ primary: `var(--${string})`;
4
+ secondary: `var(--${string})`;
5
+ accent: `var(--${string})`;
6
+ background: `var(--${string})`;
7
+ surface: `var(--${string})`;
8
+ text: `var(--${string})`;
9
+ textSecondary: `var(--${string})`;
10
+ textLight: `var(--${string})`;
11
+ border: `var(--${string})`;
12
+ error: `var(--${string})`;
13
+ warning: `var(--${string})`;
14
+ success: `var(--${string})`;
15
+ info: `var(--${string})`;
16
+ };
17
+ space: {
18
+ none: `var(--${string})`;
19
+ xs: `var(--${string})`;
20
+ sm: `var(--${string})`;
21
+ md: `var(--${string})`;
22
+ lg: `var(--${string})`;
23
+ xl: `var(--${string})`;
24
+ '2xl': `var(--${string})`;
25
+ };
26
+ radii: {
27
+ none: `var(--${string})`;
28
+ sm: `var(--${string})`;
29
+ md: `var(--${string})`;
30
+ lg: `var(--${string})`;
31
+ xl: `var(--${string})`;
32
+ full: `var(--${string})`;
33
+ };
34
+ fonts: {
35
+ body: `var(--${string})`;
36
+ heading: `var(--${string})`;
37
+ mono: `var(--${string})`;
38
+ };
39
+ fontSizes: {
40
+ xs: `var(--${string})`;
41
+ sm: `var(--${string})`;
42
+ md: `var(--${string})`;
43
+ lg: `var(--${string})`;
44
+ xl: `var(--${string})`;
45
+ '2xl': `var(--${string})`;
46
+ '3xl': `var(--${string})`;
47
+ '4xl': `var(--${string})`;
48
+ };
49
+ fontWeights: {
50
+ light: `var(--${string})`;
51
+ normal: `var(--${string})`;
52
+ medium: `var(--${string})`;
53
+ semibold: `var(--${string})`;
54
+ bold: `var(--${string})`;
55
+ };
56
+ lineHeights: {
57
+ tight: `var(--${string})`;
58
+ normal: `var(--${string})`;
59
+ relaxed: `var(--${string})`;
60
+ };
61
+ shadows: {
62
+ none: `var(--${string})`;
63
+ sm: `var(--${string})`;
64
+ md: `var(--${string})`;
65
+ lg: `var(--${string})`;
66
+ xl: `var(--${string})`;
67
+ };
68
+ maxWidth: `var(--${string})`;
69
+ section: {
70
+ paddingTop: `var(--${string})`;
71
+ paddingBottom: `var(--${string})`;
72
+ };
73
+ header: {
74
+ height: `var(--${string})`;
75
+ };
76
+ footer: {
77
+ height: `var(--${string})`;
78
+ };
79
+ };
@@ -0,0 +1,3 @@
1
+ export { themeContract } from './contract.css';
2
+ export { baseLightTheme, baseDarkTheme } from './baseThemeValues';
3
+ export { createThemeOverride, getThemeContract, getThemeValues, toggleTheme, setTheme, getCurrentTheme, type ThemeValues } from './utils';
@@ -0,0 +1,86 @@
1
+ import { baseLightTheme } from './baseThemeValues';
2
+ export type ThemeValues = typeof baseLightTheme;
3
+ export declare const createThemeOverride: (overrides: Partial<ThemeValues>) => ThemeValues;
4
+ export declare const getThemeContract: () => {
5
+ colors: {
6
+ primary: `var(--${string})`;
7
+ secondary: `var(--${string})`;
8
+ accent: `var(--${string})`;
9
+ background: `var(--${string})`;
10
+ surface: `var(--${string})`;
11
+ text: `var(--${string})`;
12
+ textSecondary: `var(--${string})`;
13
+ textLight: `var(--${string})`;
14
+ border: `var(--${string})`;
15
+ error: `var(--${string})`;
16
+ warning: `var(--${string})`;
17
+ success: `var(--${string})`;
18
+ info: `var(--${string})`;
19
+ };
20
+ space: {
21
+ none: `var(--${string})`;
22
+ xs: `var(--${string})`;
23
+ sm: `var(--${string})`;
24
+ md: `var(--${string})`;
25
+ lg: `var(--${string})`;
26
+ xl: `var(--${string})`;
27
+ '2xl': `var(--${string})`;
28
+ };
29
+ radii: {
30
+ none: `var(--${string})`;
31
+ sm: `var(--${string})`;
32
+ md: `var(--${string})`;
33
+ lg: `var(--${string})`;
34
+ xl: `var(--${string})`;
35
+ full: `var(--${string})`;
36
+ };
37
+ fonts: {
38
+ body: `var(--${string})`;
39
+ heading: `var(--${string})`;
40
+ mono: `var(--${string})`;
41
+ };
42
+ fontSizes: {
43
+ xs: `var(--${string})`;
44
+ sm: `var(--${string})`;
45
+ md: `var(--${string})`;
46
+ lg: `var(--${string})`;
47
+ xl: `var(--${string})`;
48
+ '2xl': `var(--${string})`;
49
+ '3xl': `var(--${string})`;
50
+ '4xl': `var(--${string})`;
51
+ };
52
+ fontWeights: {
53
+ light: `var(--${string})`;
54
+ normal: `var(--${string})`;
55
+ medium: `var(--${string})`;
56
+ semibold: `var(--${string})`;
57
+ bold: `var(--${string})`;
58
+ };
59
+ lineHeights: {
60
+ tight: `var(--${string})`;
61
+ normal: `var(--${string})`;
62
+ relaxed: `var(--${string})`;
63
+ };
64
+ shadows: {
65
+ none: `var(--${string})`;
66
+ sm: `var(--${string})`;
67
+ md: `var(--${string})`;
68
+ lg: `var(--${string})`;
69
+ xl: `var(--${string})`;
70
+ };
71
+ maxWidth: `var(--${string})`;
72
+ section: {
73
+ paddingTop: `var(--${string})`;
74
+ paddingBottom: `var(--${string})`;
75
+ };
76
+ header: {
77
+ height: `var(--${string})`;
78
+ };
79
+ footer: {
80
+ height: `var(--${string})`;
81
+ };
82
+ };
83
+ export declare const getThemeValues: (isDark?: boolean) => ThemeValues;
84
+ export declare const toggleTheme: () => boolean;
85
+ export declare const setTheme: (theme: "light" | "dark") => void;
86
+ export declare const getCurrentTheme: () => "light" | "dark";
package/package.json CHANGED
@@ -1,29 +1,33 @@
1
1
  {
2
2
  "name": "@latte-macchiat-io/latte-vanilla-components",
3
- "version": "0.0.175",
3
+ "version": "0.0.176",
4
4
  "description": "Beautiful components for amazing projects, with a touch of Vanilla 🥤",
5
5
  "type": "module",
6
- "main": "./dist/index.js",
7
- "types": "./dist/index.d.ts",
6
+ "main": "./dist/index.cjs.js",
7
+ "module": "./dist/index.es.js",
8
+ "types": "./dist/types/index.d.ts",
8
9
  "sideEffects": false,
9
10
  "exports": {
10
11
  ".": {
11
- "types": "./dist/index.d.ts",
12
- "import": "./dist/index.js"
12
+ "types": "./dist/types/index.d.ts",
13
+ "import": "./dist/index.es.js",
14
+ "require": "./dist/index.cjs.js"
13
15
  },
14
16
  "./css": {
15
- "types": "./dist/css/index.d.ts",
16
- "import": "./dist/css/index.js"
17
+ "types": "./dist/types/css/index.d.ts",
18
+ "import": "./dist/css/index.js",
19
+ "require": "./dist/css/index.cjs"
17
20
  },
18
- "./themes/*": {
19
- "types": "./dist/themes/*.d.ts",
20
- "import": "./dist/themes/*.js"
21
- },
22
- "./*.css.ts": "./src/*.css.ts"
21
+ "./*.css.ts": "./src/*.css.ts",
22
+ "./src/*": "./src/*",
23
+ "./dist/*": "./dist/*"
23
24
  },
24
25
  "files": [
25
26
  "dist",
26
- "src/**/*.css.ts"
27
+ "src/**/*.css.ts",
28
+ "src/**/*.ts",
29
+ "!src/**/*.stories.ts",
30
+ "!src/**/*.test.ts"
27
31
  ],
28
32
  "peerDependencies": {
29
33
  "@vanilla-extract/css": "^1.17.4",
@@ -0,0 +1,312 @@
1
+ import { Theme } from '@/types/theme';
2
+
3
+ const brandFont = '"Goudy Bookletter 1911", sans-serif';
4
+ const defaultFont = '"Gill Sans", sans-serif';
5
+
6
+ const brandColorTerracotta = '#FF7377';
7
+
8
+ const brandColorBeigeDark = '#C8AE96';
9
+ const brandColorBeigeLight = '#FCEFE6';
10
+
11
+ const brandColorGrey = '#2E2E2E';
12
+ const brandColorGreyLight = '#CCCCCC';
13
+ const brandColorGreyMedium = ' #888888';
14
+ const brandColorBlack = '#000000';
15
+
16
+ const brandColor = brandColorTerracotta;
17
+
18
+ export const defaultTheme: Theme = {
19
+ global: {
20
+ maxWidth: 1200,
21
+ paddingLeft: [15, 15, 30, 30],
22
+ paddingRight: [15, 15, 30, 30],
23
+
24
+ brandFont: brandFont,
25
+ defaultFont: defaultFont,
26
+ },
27
+
28
+ colors: {
29
+ defaultText: brandColorBlack,
30
+ defaultLightText: brandColorBeigeLight,
31
+ defaultTitle: '',
32
+ defaultLink: brandColorBlack,
33
+ defaultIcon: brandColorBlack,
34
+ },
35
+
36
+ backgroundColors: {
37
+ modal: brandColorBeigeLight,
38
+ modalOverlay: 'rgba(0, 0, 0, 0.6)',
39
+ cookieConsent: brandColorBeigeLight,
40
+ },
41
+
42
+ borders: {
43
+ hr: `1px solid ${brandColorBeigeDark}`,
44
+ cookieConsent: `2px solid ${brandColorBlack}`,
45
+ },
46
+
47
+ borderRadius: {
48
+ modal: 30,
49
+ input: 30,
50
+ cookieConsent: 30,
51
+ },
52
+
53
+ widthSizes: {
54
+ modal: 600,
55
+ cookieConsent: 500,
56
+ },
57
+
58
+ transitions: {
59
+ global: 'all 0.3s ease-in-out',
60
+ },
61
+
62
+ actions: {
63
+ gap: [15, 15, 30, 30],
64
+ paddingTop: [15, 15, 30, 30],
65
+ paddingBottom: [15, 15, 30, 30],
66
+ },
67
+
68
+ button: {
69
+ minWidth: 80,
70
+ fontWeight: 400,
71
+ letterSpacing: 0.1,
72
+ color: {
73
+ primary: brandColorBeigeLight,
74
+ secondary: brandColorGrey,
75
+ disabled: brandColorGreyMedium,
76
+ },
77
+ backgroundColor: {
78
+ primary: brandColor,
79
+ secondary: brandColorBeigeDark,
80
+ disabled: brandColorGreyLight,
81
+ },
82
+ border: {
83
+ width: 2,
84
+ style: 'solid',
85
+ color: {
86
+ primary: brandColor,
87
+ secondary: brandColorBeigeDark,
88
+ disabled: brandColorGreyLight,
89
+ },
90
+ },
91
+ borderRadius: 50,
92
+ paddingTop: {
93
+ small: [5, 5, 10, 10, 15, 15],
94
+ medium: [10, 10, 15, 15, 20, 20],
95
+ large: [15, 15, 20, 20, 25, 25],
96
+ },
97
+ paddingBottom: {
98
+ small: [5, 5, 10, 10, 15, 15],
99
+ medium: [10, 10, 15, 15, 20, 20],
100
+ large: [15, 15, 20, 20, 25, 25],
101
+ },
102
+ paddingLeft: {
103
+ small: [5, 5, 10, 10, 15, 15],
104
+ medium: [10, 10, 15, 15, 20, 20],
105
+ large: [15, 15, 20, 20, 25, 25],
106
+ },
107
+ paddingRight: {
108
+ small: [5, 5, 10, 10, 15, 15],
109
+ medium: [10, 10, 15, 15, 20, 20],
110
+ large: [15, 15, 20, 20, 25, 25],
111
+ },
112
+ transition: 'all 0.3s ease-in-out',
113
+ },
114
+
115
+ columns: {
116
+ gap: 30,
117
+ },
118
+
119
+ keyNumber: {
120
+ paddingBottom: [5, 5, 10, 10, 15, 15],
121
+ },
122
+
123
+ form: {
124
+ width: 800,
125
+ padding: ['15px', '30px'],
126
+ backgroundColor: '',
127
+
128
+ row: {
129
+ gap: [30, 60],
130
+ padding: ['15px', '30px'],
131
+ },
132
+
133
+ label: {
134
+ font: brandFont,
135
+ fontWeight: 500,
136
+ color: brandColor,
137
+ paddingBottom: 5,
138
+ },
139
+
140
+ input: {
141
+ color: '',
142
+ borderRadius: 0,
143
+ padding: [5, 10],
144
+ font: defaultFont,
145
+ backgroundColor: '',
146
+ placeholder: {
147
+ color: '',
148
+ opacity: 1,
149
+ },
150
+ border: `2px solid ${brandColorBlack}`,
151
+ },
152
+
153
+ textarea: {
154
+ color: '',
155
+ borderRadius: 0,
156
+ padding: [5, 10],
157
+ font: defaultFont,
158
+ backgroundColor: '',
159
+ placeholder: {
160
+ color: '',
161
+ opacity: 1,
162
+ },
163
+ border: `2px solid ${brandColorBlack}`,
164
+ },
165
+
166
+ error: {
167
+ color: brandColorTerracotta,
168
+ },
169
+ },
170
+
171
+ header: {
172
+ gap: [15, 15, 15, 15],
173
+ height: [60, 60, 120, 120],
174
+ backgroundColor: brandColorBeigeLight,
175
+
176
+ paddingTop: [15, 30, 50, 100],
177
+ paddingLeft: [15, 30, 50, 100],
178
+ paddingRight: [15, 30, 50, 100],
179
+ paddingBottom: [15, 30, 50, 100],
180
+
181
+ overlayGap: [15, 15, 15, 15],
182
+ overlayBackgroundColor: brandColorBeigeLight,
183
+
184
+ toggleNavColor: brandColorBlack,
185
+ toggleNavOpenColor: brandColorBlack,
186
+ toggleNavBorderRadius: 5,
187
+ },
188
+
189
+ main: {
190
+ minHeight: '45vh',
191
+ backgroundColor: brandColorBeigeLight,
192
+ },
193
+
194
+ section: {
195
+ paddingTop: [15, 30, 50, 100],
196
+ paddingBottom: [15, 30, 50, 100],
197
+ },
198
+
199
+ footer: {
200
+ gap: [15, 15, 15, 15],
201
+ height: [60, 60, 120, 120],
202
+ backgroundColor: brandColorBeigeLight,
203
+
204
+ paddingTop: [15, 30, 50, 100],
205
+ paddingBottom: [15, 30, 50, 100],
206
+ },
207
+
208
+ modal: {
209
+ border: '',
210
+ borderRadius: 0,
211
+ width: [50, 50, 75, 75],
212
+ backgroundColor: brandColorBeigeLight,
213
+
214
+ overlayBlur: 0,
215
+ overlayOpacity: 0.5,
216
+ overlayBackgroundColor: brandColorBlack,
217
+
218
+ paddingTop: [15, 30, 50, 100],
219
+ paddingLeft: [15, 30, 50, 100],
220
+ paddingRight: [15, 30, 50, 100],
221
+ paddingBottom: [15, 30, 50, 100],
222
+ },
223
+
224
+ languageSwitcher: {
225
+ border: '',
226
+ borderRadius: 0,
227
+ color: brandColorBlack,
228
+ width: [150, 150, 200, 200],
229
+ backgroundColor: brandColorBeigeLight,
230
+
231
+ paddingTop: [15, 30, 50, 100],
232
+ paddingLeft: [15, 30, 50, 100],
233
+ paddingRight: [15, 30, 50, 100],
234
+ paddingBottom: [15, 30, 50, 100],
235
+ },
236
+
237
+ carousel: {
238
+ gap: [0, 0, 30, 60],
239
+ bullet: {
240
+ borderRadius: 0,
241
+ width: [12, 12, 12, 12],
242
+ height: [12, 12, 12, 12],
243
+ backgroundColor: brandColorBeigeLight,
244
+ },
245
+ },
246
+
247
+ video: {
248
+ playButton: {
249
+ border: '',
250
+ borderRadius: 0,
251
+ width: [50, 50, 75, 75],
252
+ height: [50, 50, 75, 75],
253
+ color: brandColorBlack,
254
+ backgroundColor: brandColorBeigeLight,
255
+ },
256
+ pauseButton: {
257
+ border: '',
258
+ borderRadius: 0,
259
+ width: [40, 40, 50, 50],
260
+ height: [40, 40, 50, 50],
261
+ color: brandColorBlack,
262
+ backgroundColor: brandColorBeigeLight,
263
+ },
264
+ soundButton: {
265
+ border: '',
266
+ borderRadius: 0,
267
+ width: [40, 40, 50, 50],
268
+ height: [40, 40, 50, 50],
269
+ color: brandColorBlack,
270
+ backgroundColor: brandColorBeigeLight,
271
+ },
272
+ closeButton: {
273
+ border: '',
274
+ borderRadius: 0,
275
+ width: [40, 40, 50, 50],
276
+ height: [40, 40, 50, 50],
277
+ color: brandColorBlack,
278
+ backgroundColor: brandColorBeigeLight,
279
+ },
280
+ },
281
+
282
+ consentCookie: {
283
+ borders: 0,
284
+ borderRadius: 0,
285
+ width: [50, 50, 75, 75],
286
+ backgroundColor: brandColorBeigeLight,
287
+
288
+ overlayBlur: 0,
289
+ overlayOpacity: 0.5,
290
+ overlayBackgroundColor: brandColorBlack,
291
+
292
+ paddingTop: [15, 30, 50, 100],
293
+ paddingLeft: [15, 30, 50, 100],
294
+ paddingRight: [15, 30, 50, 100],
295
+ paddingBottom: [15, 30, 50, 100],
296
+
297
+ actionsGap: 30,
298
+ actionsPaddingTop: [15, 100, 100, 100],
299
+ },
300
+
301
+ nav: {
302
+ gap: [15, 15, 15, 15],
303
+ },
304
+
305
+ navSocial: {
306
+ gap: [15, 15, 15, 15],
307
+ },
308
+
309
+ navLegal: {
310
+ gap: [15, 15, 15, 15],
311
+ },
312
+ };