daleui 0.0.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.
Files changed (58) hide show
  1. package/.github/CODEOWNERS +1 -0
  2. package/.github/FUNDING.yml +1 -0
  3. package/.github/workflows/automation.yml +13 -0
  4. package/.github/workflows/chromatic.yml +19 -0
  5. package/.github/workflows/deployment.yml +32 -0
  6. package/.github/workflows/integration.yml +15 -0
  7. package/.github/workflows/storybook-tests.yml +17 -0
  8. package/.storybook/main.ts +18 -0
  9. package/.storybook/preview.ts +29 -0
  10. package/.storybook/test-runner.ts +33 -0
  11. package/LICENSE +21 -0
  12. package/README.md +10 -0
  13. package/bun.lock +9736 -0
  14. package/bun.lockb +0 -0
  15. package/chromatic.config.json +5 -0
  16. package/eslint.config.js +28 -0
  17. package/index.html +13 -0
  18. package/package.json +63 -0
  19. package/panda.config.ts +61 -0
  20. package/postcss.config.cjs +5 -0
  21. package/public/logo.svg +9 -0
  22. package/src/App.tsx +67 -0
  23. package/src/assets/Discord.svg +1 -0
  24. package/src/assets/GitHub.svg +1 -0
  25. package/src/assets/LinkedIn.svg +1 -0
  26. package/src/assets/Medium.svg +1 -0
  27. package/src/assets/YouTube.svg +1 -0
  28. package/src/components/Button/Button.stories.tsx +115 -0
  29. package/src/components/Button/Button.test.tsx +108 -0
  30. package/src/components/Button/Button.tsx +245 -0
  31. package/src/components/Button/index.tsx +1 -0
  32. package/src/components/Heading/Heading.stories.tsx +72 -0
  33. package/src/components/Heading/Heading.test.tsx +55 -0
  34. package/src/components/Heading/Heading.tsx +73 -0
  35. package/src/components/Heading/index.tsx +1 -0
  36. package/src/components/Icon/Icon.stories.tsx +106 -0
  37. package/src/components/Icon/Icon.test.tsx +44 -0
  38. package/src/components/Icon/Icon.tsx +116 -0
  39. package/src/components/Icon/index.tsx +1 -0
  40. package/src/components/Text/Text.stories.tsx +65 -0
  41. package/src/components/Text/Text.test.tsx +54 -0
  42. package/src/components/Text/Text.tsx +93 -0
  43. package/src/components/Text/index.tsx +1 -0
  44. package/src/index.css +2 -0
  45. package/src/main.tsx +10 -0
  46. package/src/setupTests.tsx +5 -0
  47. package/src/styles/globalCss.ts +43 -0
  48. package/src/tokens/colors.mdx +100 -0
  49. package/src/tokens/colors.ts +288 -0
  50. package/src/tokens/iconography.mdx +15 -0
  51. package/src/tokens/iconography.tsx +54 -0
  52. package/src/tokens/typography.mdx +38 -0
  53. package/src/tokens/typography.ts +132 -0
  54. package/src/vite-env.d.ts +2 -0
  55. package/tsconfig.app.json +25 -0
  56. package/tsconfig.json +7 -0
  57. package/tsconfig.node.json +22 -0
  58. package/vite.config.ts +16 -0
@@ -0,0 +1,288 @@
1
+ import type { Tokens, SemanticTokens } from "@pandacss/types";
2
+
3
+ export type Tone = "neutral" | "accent" | "danger" | "warning";
4
+
5
+ export const semanticColors: SemanticTokens["colors"] = {
6
+ current: { value: "currentColor" },
7
+ transparent: { value: "rgb(0 0 0 / 0)" },
8
+ base: {
9
+ value: { base: "{colors.gray.1}", _dark: "{colors.grayDark.1}" },
10
+ },
11
+ bg: {
12
+ DEFAULT: {
13
+ DEFAULT: {
14
+ value: { base: "{colors.gray.3}", _dark: "{colors.grayDark.3}" },
15
+ },
16
+ accent: {
17
+ value: { base: "{colors.teal.3}", _dark: "{colors.violetDark.3}" },
18
+ },
19
+ danger: {
20
+ value: { base: "{colors.red.3}", _dark: "{colors.redDark.3}" },
21
+ },
22
+ warning: {
23
+ value: { base: "{colors.yellow.3}", _dark: "{colors.yellowDark.3}" },
24
+ },
25
+ },
26
+ hover: {
27
+ DEFAULT: {
28
+ value: { base: "{colors.gray.4}", _dark: "{colors.grayDark.4}" },
29
+ },
30
+ accent: {
31
+ value: { base: "{colors.teal.4}", _dark: "{colors.violetDark.4}" },
32
+ },
33
+ danger: {
34
+ value: { base: "{colors.red.4}", _dark: "{colors.redDark.4}" },
35
+ },
36
+ warning: {
37
+ value: { base: "{colors.yellow.4}", _dark: "{colors.yellowDark.4}" },
38
+ },
39
+ },
40
+ active: {
41
+ DEFAULT: {
42
+ value: { base: "{colors.gray.5}", _dark: "{colors.grayDark.5}" },
43
+ },
44
+ accent: {
45
+ value: { base: "{colors.teal.5}", _dark: "{colors.violetDark.5}" },
46
+ },
47
+ danger: {
48
+ value: { base: "{colors.red.5}", _dark: "{colors.redDark.5}" },
49
+ },
50
+ warning: {
51
+ value: { base: "{colors.yellow.5}", _dark: "{colors.yellowDark.5}" },
52
+ },
53
+ },
54
+ },
55
+ border: {
56
+ DEFAULT: {
57
+ DEFAULT: {
58
+ value: { base: "{colors.gray.7}", _dark: "{colors.grayDark.7}" },
59
+ },
60
+ accent: {
61
+ value: { base: "{colors.teal.7}", _dark: "{colors.violetDark.7}" },
62
+ },
63
+ danger: {
64
+ value: { base: "{colors.red.7}", _dark: "{colors.redDark.7}" },
65
+ },
66
+ warning: {
67
+ value: { base: "{colors.yellow.7}", _dark: "{colors.yellowDark.7}" },
68
+ },
69
+ },
70
+ hover: {
71
+ DEFAULT: {
72
+ value: { base: "{colors.gray.8}", _dark: "{colors.grayDark.8}" },
73
+ },
74
+ accent: {
75
+ value: { base: "{colors.teal.8}", _dark: "{colors.violetDark.8}" },
76
+ },
77
+ danger: {
78
+ value: { base: "{colors.red.8}", _dark: "{colors.redDark.8}" },
79
+ },
80
+ warning: {
81
+ value: { base: "{colors.yellow.8}", _dark: "{colors.yellowDark.8}" },
82
+ },
83
+ },
84
+ },
85
+ solid: {
86
+ DEFAULT: {
87
+ DEFAULT: {
88
+ value: { base: "{colors.gray.9}", _dark: "{colors.grayDark.9}" },
89
+ },
90
+ accent: {
91
+ value: { base: "{colors.teal.9}", _dark: "{colors.violetDark.9}" },
92
+ },
93
+ danger: {
94
+ value: { base: "{colors.red.9}", _dark: "{colors.redDark.9}" },
95
+ },
96
+ warning: {
97
+ value: { base: "{colors.yellow.9}", _dark: "{colors.yellowDark.9}" },
98
+ },
99
+ },
100
+ hover: {
101
+ DEFAULT: {
102
+ value: { base: "{colors.gray.10}", _dark: "{colors.grayDark.10}" },
103
+ },
104
+ accent: {
105
+ value: { base: "{colors.teal.10}", _dark: "{colors.violetDark.10}" },
106
+ },
107
+ danger: {
108
+ value: { base: "{colors.red.10}", _dark: "{colors.redDark.10}" },
109
+ },
110
+ warning: {
111
+ value: { base: "{colors.yellow.10}", _dark: "{colors.yellowDark.10}" },
112
+ },
113
+ },
114
+ },
115
+ text: {
116
+ muted: {
117
+ DEFAULT: {
118
+ value: { base: "{colors.gray.11}", _dark: "{colors.grayDark.11}" },
119
+ },
120
+ accent: {
121
+ value: { base: "{colors.teal.11}", _dark: "{colors.violetDark.11}" },
122
+ },
123
+ danger: {
124
+ value: { base: "{colors.red.11}", _dark: "{colors.redDark.11}" },
125
+ },
126
+ warning: {
127
+ value: { base: "{colors.yellow.11}", _dark: "{colors.yellowDark.11}" },
128
+ },
129
+ },
130
+ DEFAULT: {
131
+ DEFAULT: {
132
+ value: { base: "{colors.gray.12}", _dark: "{colors.grayDark.12}" },
133
+ },
134
+ accent: {
135
+ value: { base: "{colors.teal.12}", _dark: "{colors.violetDark.12}" },
136
+ },
137
+ danger: {
138
+ value: { base: "{colors.red.12}", _dark: "{colors.redDark.12}" },
139
+ },
140
+ warning: {
141
+ value: { base: "{colors.yellow.12}", _dark: "{colors.yellowDark.12}" },
142
+ },
143
+ },
144
+ },
145
+ };
146
+
147
+ export const colors: Tokens["colors"] = {
148
+ teal: {
149
+ 1: { value: "#f7fffc" },
150
+ 2: { value: "#effdf9" },
151
+ 3: { value: "#d2fdf0" },
152
+ 4: { value: "#b4fae7" },
153
+ 5: { value: "#96f3dc" },
154
+ 6: { value: "#74e8cd" },
155
+ 7: { value: "#3fd9ba" },
156
+ 8: { value: "#00c4a2" },
157
+ 9: { value: "#27f5d1" },
158
+ 10: { value: "#00ebc7" },
159
+ 11: { value: "#007b64" },
160
+ 12: { value: "#004739" },
161
+ },
162
+ tealDark: {
163
+ 1: { value: "#0b1311" },
164
+ 2: { value: "#101c19" },
165
+ 3: { value: "#0d2e26" },
166
+ 4: { value: "#013b31" },
167
+ 5: { value: "#06493c" },
168
+ 6: { value: "#12584a" },
169
+ 7: { value: "#1a6a5a" },
170
+ 8: { value: "#1b806c" },
171
+ 9: { value: "#00ebc7" },
172
+ 10: { value: "#00e0bd" },
173
+ 11: { value: "#00dab7" },
174
+ 12: { value: "#a9f1de" },
175
+ },
176
+ violet: {
177
+ 1: { value: "#fcfcff" },
178
+ 2: { value: "#f9f8ff" },
179
+ 3: { value: "#f2f1ff" },
180
+ 4: { value: "#e8e5ff" },
181
+ 5: { value: "#ded9ff" },
182
+ 6: { value: "#d1c9ff" },
183
+ 7: { value: "#beb4ff" },
184
+ 8: { value: "#a797f9" },
185
+ 9: { value: "#815cf0" },
186
+ 10: { value: "#754ee0" },
187
+ 11: { value: "#6848c7" },
188
+ 12: { value: "#332166" },
189
+ },
190
+ violetDark: {
191
+ 1: { value: "#110e1e" },
192
+ 2: { value: "#181529" },
193
+ 3: { value: "#271d4b" },
194
+ 4: { value: "#322066" },
195
+ 5: { value: "#3c2974" },
196
+ 6: { value: "#463483" },
197
+ 7: { value: "#55419a" },
198
+ 8: { value: "#6951bd" },
199
+ 9: { value: "#815cf0" },
200
+ 10: { value: "#754ee1" },
201
+ 11: { value: "#b6a5ff" },
202
+ 12: { value: "#e0dcff" },
203
+ },
204
+ red: {
205
+ 1: { value: "#fffcfc" },
206
+ 2: { value: "#fff7f8" },
207
+ 3: { value: "#ffeaea" },
208
+ 4: { value: "#ffdcdd" },
209
+ 5: { value: "#ffced0" },
210
+ 6: { value: "#fbbec2" },
211
+ 7: { value: "#f3abaf" },
212
+ 8: { value: "#ea9198" },
213
+ 9: { value: "#ff526f" },
214
+ 10: { value: "#f14464" },
215
+ 11: { value: "#ce1948" },
216
+ 12: { value: "#671324" },
217
+ },
218
+ redDark: {
219
+ 1: { value: "#170e0f" },
220
+ 2: { value: "#1f1415" },
221
+ 3: { value: "#3d1117" },
222
+ 4: { value: "#530a1a" },
223
+ 5: { value: "#641022" },
224
+ 6: { value: "#761d2d" },
225
+ 7: { value: "#902b3c" },
226
+ 8: { value: "#bd384f" },
227
+ 9: { value: "#ff526f" },
228
+ 10: { value: "#f14464" },
229
+ 11: { value: "#ff8e9a" },
230
+ 12: { value: "#ffd0d3" },
231
+ },
232
+ yellow: {
233
+ 1: { value: "#fefdf8" },
234
+ 2: { value: "#fffce6" },
235
+ 3: { value: "#fff8ab" },
236
+ 4: { value: "#fff180" },
237
+ 5: { value: "#ffe753" },
238
+ 6: { value: "#f1d94e" },
239
+ 7: { value: "#e0ca53" },
240
+ 8: { value: "#ccb300" },
241
+ 9: { value: "#ffe700" },
242
+ 10: { value: "#fd0" },
243
+ 11: { value: "#8d7800" },
244
+ 12: { value: "#433d1a" },
245
+ },
246
+ yellowDark: {
247
+ 1: { value: "#12110b" },
248
+ 2: { value: "#1a180f" },
249
+ 3: { value: "#292406" },
250
+ 4: { value: "#352c00" },
251
+ 5: { value: "#403600" },
252
+ 6: { value: "#4e4406" },
253
+ 7: { value: "#61561a" },
254
+ 8: { value: "#7b6e25" },
255
+ 9: { value: "#fde34e" },
256
+ 10: { value: "#f3d941" },
257
+ 11: { value: "#f9df49" },
258
+ 12: { value: "#f7edb5" },
259
+ },
260
+ gray: {
261
+ 1: { value: "#fcfcfe" },
262
+ 2: { value: "#f8f9fb" },
263
+ 3: { value: "#eff0f3" },
264
+ 4: { value: "#e7e8eb" },
265
+ 5: { value: "#e0e1e5" },
266
+ 6: { value: "#d8d9dd" },
267
+ 7: { value: "#ccced3" },
268
+ 8: { value: "#b9bbc2" },
269
+ 9: { value: "#898c96" },
270
+ 10: { value: "#7f828b" },
271
+ 11: { value: "#61636b" },
272
+ 12: { value: "#1c1f28" },
273
+ },
274
+ grayDark: {
275
+ 1: { value: "#101113" },
276
+ 2: { value: "#18191b" },
277
+ 3: { value: "#222225" },
278
+ 4: { value: "#282a2d" },
279
+ 5: { value: "#2f3135" },
280
+ 6: { value: "#383a3f" },
281
+ 7: { value: "#45474d" },
282
+ 8: { value: "#5e6069" },
283
+ 9: { value: "#6b6e77" },
284
+ 10: { value: "#787b84" },
285
+ 11: { value: "#b1b3bb" },
286
+ 12: { value: "#edeef0" },
287
+ },
288
+ };
@@ -0,0 +1,15 @@
1
+ import { IconGallery, IconItem } from "@storybook/blocks";
2
+ import { icons } from "./iconography";
3
+
4
+ # Iconography
5
+
6
+ > 달레 UI는 [Lucide](https://lucide.dev/)와 [Simple Icons](https://simpleicons.org/)의 아이콘을 선별적으로 사용하고 있습니다.
7
+ > 번들 크기를 최적화하기 위해서 아이콘은 필요할 때 마다 요청을 받아서 추가됩니다.
8
+
9
+ <IconGallery>
10
+ {Object.entries(icons).map(([name, Icon]) => (
11
+ <IconItem name={name}>
12
+ <Icon />
13
+ </IconItem>
14
+ ))}
15
+ </IconGallery>
@@ -0,0 +1,54 @@
1
+ import {
2
+ Check,
3
+ ChevronDown,
4
+ ChevronLeft,
5
+ ChevronRight,
6
+ CircleAlert,
7
+ Clock,
8
+ Info,
9
+ MessageCircle,
10
+ Menu,
11
+ Moon,
12
+ Search,
13
+ Sun,
14
+ Star,
15
+ User,
16
+ X,
17
+ } from "lucide-react";
18
+ import type { FunctionComponent, ComponentProps, SVGProps } from "react";
19
+ import Discord from "../assets/Discord.svg?react";
20
+ import GitHub from "../assets/GitHub.svg?react";
21
+ import LinkedIn from "../assets/LinkedIn.svg?react";
22
+ import Medium from "../assets/Medium.svg?react";
23
+ import YouTube from "../assets/YouTube.svg?react";
24
+
25
+ function createBrandIcon(Icon: FunctionComponent<SVGProps<SVGSVGElement>>) {
26
+ return (args: ComponentProps<typeof Icon>) => (
27
+ <Icon {...args} fill="currentColor" />
28
+ );
29
+ }
30
+
31
+ export const icons = {
32
+ check: Check,
33
+ chevronDown: ChevronDown,
34
+ chevronLeft: ChevronLeft,
35
+ chevronRight: ChevronRight,
36
+ circleAlert: CircleAlert,
37
+ clock: Clock,
38
+ info: Info,
39
+ chat: MessageCircle,
40
+ menu: Menu,
41
+ moon: Moon,
42
+ search: Search,
43
+ sun: Sun,
44
+ star: Star,
45
+ user: User,
46
+ x: X,
47
+ Discord: createBrandIcon(Discord),
48
+ GitHub: createBrandIcon(GitHub),
49
+ LinkedIn: createBrandIcon(LinkedIn),
50
+ Medium: createBrandIcon(Medium),
51
+ YouTube: createBrandIcon(YouTube),
52
+ };
53
+
54
+ export type IconName = keyof typeof icons;
@@ -0,0 +1,38 @@
1
+ import { Typeset } from "@storybook/blocks";
2
+ import { fonts, fontWeights, fontSizes } from "./typography";
3
+
4
+ # Typography
5
+
6
+ > 달레 UI는 [스포카 한 산스 네오(Spoqa Han Sans Neo)](https://spoqa.github.io/spoqa-han-sans/) 웹폰트를 사용하고 있습니다.
7
+
8
+ ## 글꼴 크기
9
+
10
+ <p>
11
+ {Object.entries(fontSizes)
12
+ .map(([name, { value }]) => `${name}(${value})`)
13
+ .join(", ")}
14
+ </p>
15
+
16
+ <Typeset
17
+ fontSizes={Object.values(fontSizes).map(({ value }) => value)}
18
+ fontWeight={fontWeights.normal.value}
19
+ sampleText="달레 UI 디자인 System"
20
+ fontFamily={fonts.sans.value}
21
+ />
22
+
23
+ ## 글꼴 굵기
24
+
25
+ {Object.entries(fontWeights).map(([name, {value}]) => (
26
+
27
+ <>
28
+ <h3>
29
+ {name}({value})
30
+ </h3>
31
+ <Typeset
32
+ fontSizes={[fontSizes.md.value]}
33
+ fontWeight={value}
34
+ sampleText="달레 UI 디자인 System"
35
+ fontFamily={fonts.sans.value}
36
+ />
37
+ </>
38
+ ))}
@@ -0,0 +1,132 @@
1
+ export const textStyles = {
2
+ xs: {
3
+ value: {
4
+ fontSize: "0.75rem",
5
+ lineHeight: "1rem",
6
+ },
7
+ },
8
+ sm: {
9
+ value: {
10
+ fontSize: "0.875rem",
11
+ lineHeight: "1.25rem",
12
+ },
13
+ },
14
+ md: {
15
+ value: {
16
+ fontSize: "1rem",
17
+ lineHeight: "1.5rem",
18
+ },
19
+ },
20
+ lg: {
21
+ value: {
22
+ fontSize: "1.125rem",
23
+ lineHeight: "1.75rem",
24
+ },
25
+ },
26
+ xl: {
27
+ value: {
28
+ fontSize: "1.25rem",
29
+ lineHeight: "1.75rem",
30
+ },
31
+ },
32
+ "2xl": {
33
+ value: {
34
+ fontSize: "1.5rem",
35
+ lineHeight: "2rem",
36
+ },
37
+ },
38
+ "3xl": {
39
+ value: {
40
+ fontSize: "1.875rem",
41
+ lineHeight: "2.25rem",
42
+ },
43
+ },
44
+ "4xl": {
45
+ value: {
46
+ fontSize: "2.25rem",
47
+ lineHeight: "2.5rem",
48
+ },
49
+ },
50
+ "5xl": {
51
+ value: {
52
+ fontSize: "3rem",
53
+ lineHeight: "1",
54
+ },
55
+ },
56
+ "6xl": {
57
+ value: {
58
+ fontSize: "3.75rem",
59
+ lineHeight: "1",
60
+ },
61
+ },
62
+ "7xl": {
63
+ value: {
64
+ fontSize: "4.5rem",
65
+ lineHeight: "1",
66
+ },
67
+ },
68
+ "8xl": {
69
+ value: {
70
+ fontSize: "6rem",
71
+ lineHeight: "1",
72
+ },
73
+ },
74
+ "9xl": {
75
+ value: {
76
+ fontSize: "8rem",
77
+ lineHeight: "1",
78
+ },
79
+ },
80
+ };
81
+
82
+ export const fonts = {
83
+ sans: { value: '"Spoqa Han Sans Neo", "Noto Sans KR", sans-serif' },
84
+ // TODO customize serif and mono font styles when needed
85
+ };
86
+
87
+ export const fontWeights = {
88
+ thin: { value: "100" },
89
+ light: { value: "300" },
90
+ normal: { value: "400" },
91
+ medium: { value: "500" },
92
+ bold: { value: "700" },
93
+ };
94
+
95
+ export type FontWeight = keyof typeof fontWeights;
96
+
97
+ export const fontSizes = {
98
+ "2xs": { value: "0.5rem" },
99
+ xs: { value: "0.75rem" },
100
+ sm: { value: "0.875rem" },
101
+ md: { value: "1rem" },
102
+ lg: { value: "1.125rem" },
103
+ xl: { value: "1.25rem" },
104
+ "2xl": { value: "1.5rem" },
105
+ "3xl": { value: "1.875rem" },
106
+ "4xl": { value: "2.25rem" },
107
+ "5xl": { value: "3rem" },
108
+ "6xl": { value: "3.75rem" },
109
+ "7xl": { value: "4.5rem" },
110
+ "8xl": { value: "6rem" },
111
+ "9xl": { value: "8rem" },
112
+ };
113
+
114
+ export type FontSize = keyof typeof fontSizes;
115
+
116
+ export const letterSpacings = {
117
+ tighter: { value: "-0.05em" },
118
+ tight: { value: "-0.025em" },
119
+ normal: { value: "0em" },
120
+ wide: { value: "0.025em" },
121
+ wider: { value: "0.05em" },
122
+ widest: { value: "0.1em" },
123
+ };
124
+
125
+ export const lineHeights = {
126
+ none: { value: "1" },
127
+ tight: { value: "1.25" },
128
+ snug: { value: "1.375" },
129
+ normal: { value: "1.5" },
130
+ relaxed: { value: "1.625" },
131
+ loose: { value: "2" },
132
+ };
@@ -0,0 +1,2 @@
1
+ /// <reference types="vite/client" />
2
+ /// <reference types="vite-plugin-svgr/client" />
@@ -0,0 +1,25 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "useDefineForClassFields": true,
5
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
6
+ "module": "ESNext",
7
+ "skipLibCheck": true,
8
+
9
+ /* Bundler mode */
10
+ "moduleResolution": "bundler",
11
+ "allowImportingTsExtensions": true,
12
+ "isolatedModules": true,
13
+ "moduleDetection": "force",
14
+ "noEmit": true,
15
+ "jsx": "react-jsx",
16
+
17
+ /* Linting */
18
+ "strict": true,
19
+ "noUnusedLocals": true,
20
+ "noUnusedParameters": true,
21
+ "noFallthroughCasesInSwitch": true,
22
+ "verbatimModuleSyntax": true
23
+ },
24
+ "include": ["src", "styled-system"]
25
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,7 @@
1
+ {
2
+ "files": [],
3
+ "references": [
4
+ { "path": "./tsconfig.app.json" },
5
+ { "path": "./tsconfig.node.json" }
6
+ ]
7
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "lib": ["ES2023"],
5
+ "module": "ESNext",
6
+ "skipLibCheck": true,
7
+
8
+ /* Bundler mode */
9
+ "moduleResolution": "bundler",
10
+ "allowImportingTsExtensions": true,
11
+ "isolatedModules": true,
12
+ "moduleDetection": "force",
13
+ "noEmit": true,
14
+
15
+ /* Linting */
16
+ "strict": true,
17
+ "noUnusedLocals": true,
18
+ "noUnusedParameters": true,
19
+ "noFallthroughCasesInSwitch": true
20
+ },
21
+ "include": ["vite.config.ts"]
22
+ }
package/vite.config.ts ADDED
@@ -0,0 +1,16 @@
1
+ /// <reference types="vitest" />
2
+ import { defineConfig } from "vite";
3
+ import react from "@vitejs/plugin-react";
4
+ import svgr from "vite-plugin-svgr";
5
+
6
+ // https://vitejs.dev/config/
7
+ export default defineConfig({
8
+ plugins: [react(), svgr()],
9
+ test: {
10
+ environment: "happy-dom",
11
+ setupFiles: ["./src/setupTests.tsx"],
12
+ },
13
+ optimizeDeps: {
14
+ exclude: ["node_modules/.cache/storybook"],
15
+ },
16
+ });