spoko-design-system 0.6.7 → 0.6.9

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 (169) hide show
  1. package/.astro/settings.json +4 -4
  2. package/.github/dependabot.yml +11 -11
  3. package/.github/todo.yml +3 -3
  4. package/.github/workflows/deploy.yml +39 -39
  5. package/.stackblitzrc +5 -5
  6. package/.vscode/extensions.json +5 -5
  7. package/.vscode/launch.json +11 -11
  8. package/.vscode/settings.json +5 -5
  9. package/LICENSE +21 -21
  10. package/README.md +114 -114
  11. package/astro-i18next.config.mjs +17 -17
  12. package/astro-i18next.config.ts +10 -10
  13. package/astro.config.mjs +86 -86
  14. package/dev-dist/sw.js +91 -91
  15. package/dev-dist/workbox-c676b6d3.js +3391 -3391
  16. package/icon.config.ts +290 -289
  17. package/index.ts +66 -66
  18. package/package.json +5 -5
  19. package/public/fonts/lg.svg +53 -53
  20. package/public/fonts/vwhead-bold-demo.html +549 -549
  21. package/public/fonts/vwhead-regular-demo.html +549 -549
  22. package/public/fonts/vwtext-bold-demo.html +549 -549
  23. package/public/fonts/vwtext-regular-demo.html +549 -549
  24. package/public/github.svg +3 -3
  25. package/public/grid_dot.svg +4 -4
  26. package/public/linkedin.svg +44 -44
  27. package/public/locales/en/translation.json +8 -8
  28. package/public/locales/pl/translation.json +8 -8
  29. package/public/make-scrollable-code-focusable.js +3 -3
  30. package/public/pagefind.yml +3 -3
  31. package/public/polo.blue.svg +29 -29
  32. package/public/spoko.space.svg +71 -71
  33. package/public/twitter.svg +46 -46
  34. package/renovate.json +6 -6
  35. package/sandbox.config.json +11 -11
  36. package/src/MyComponent.astro +8 -8
  37. package/src/components/Badge.vue +19 -19
  38. package/src/components/Badges.vue +21 -21
  39. package/src/components/Breadcrumbs.vue +107 -107
  40. package/src/components/Button.vue +101 -101
  41. package/src/components/ButtonCopy.astro +183 -183
  42. package/src/components/ButtonCopy.vue +36 -36
  43. package/src/components/Card.astro +27 -27
  44. package/src/components/Carousel.astro +26 -26
  45. package/src/components/Category/CategoriesCarousel.astro +101 -101
  46. package/src/components/Category/CategoryDetails.astro +169 -169
  47. package/src/components/Category/CategoryLink.vue +28 -28
  48. package/src/components/Category/CategorySidebarToggler.vue +9 -9
  49. package/src/components/Category/CategoryTile.astro +38 -38
  50. package/src/components/Category/CategoryViewToggler.astro +89 -89
  51. package/src/components/Category/SubCategoryLink.vue +19 -19
  52. package/src/components/Copyright.astro +12 -12
  53. package/src/components/Date.astro +7 -7
  54. package/src/components/Faq.astro +33 -33
  55. package/src/components/FaqItem.astro +80 -80
  56. package/src/components/FeaturesList.vue +41 -41
  57. package/src/components/FuckRussia.vue +62 -62
  58. package/src/components/HandDrive.astro +29 -29
  59. package/src/components/Header/Header.astro +210 -210
  60. package/src/components/Header/SkipToContent.astro +1 -1
  61. package/src/components/Headline.vue +48 -48
  62. package/src/components/Image.astro +30 -30
  63. package/src/components/LeftSidebar.astro +53 -53
  64. package/src/components/MainColors.vue +22 -22
  65. package/src/components/MainInput.vue +15 -15
  66. package/src/components/Modal.astro +27 -27
  67. package/src/components/PageContent.astro +5 -5
  68. package/src/components/PartNumber.vue +27 -27
  69. package/src/components/Post/PostCategories.astro +41 -41
  70. package/src/components/Post/PostCategories.vue +39 -39
  71. package/src/components/PostHeader.astro +103 -103
  72. package/src/components/PrCode.vue +141 -141
  73. package/src/components/Product/ProductButton.vue +18 -18
  74. package/src/components/Product/ProductCarousel.astro +35 -35
  75. package/src/components/Product/ProductCodes.vue +174 -174
  76. package/src/components/Product/ProductEngineType.vue +42 -42
  77. package/src/components/Product/ProductImage.astro +40 -40
  78. package/src/components/Product/ProductLink.astro +101 -101
  79. package/src/components/Product/ProductLink.vue +59 -59
  80. package/src/components/Product/ProductLinkInfo.astro +37 -37
  81. package/src/components/Product/ProductNumber.astro +60 -60
  82. package/src/components/ProductCarousel.astro +38 -38
  83. package/src/components/ProductCodes.vue +39 -39
  84. package/src/components/ProductDetailName.vue +52 -52
  85. package/src/components/ProductDetailsList.vue +65 -65
  86. package/src/components/ProductTile.astro +48 -48
  87. package/src/components/Quote.vue +23 -23
  88. package/src/components/ReloadPrompt.astro +50 -50
  89. package/src/components/SlimBanner.vue +72 -72
  90. package/src/components/Table.vue +32 -32
  91. package/src/components/TableOfContents.astro +15 -15
  92. package/src/components/Translations.vue +23 -23
  93. package/src/components/flags/FlagPL.vue +3 -3
  94. package/src/components/flags/FlagUA.vue +2 -2
  95. package/src/components/layout/Container.astro +7 -7
  96. package/src/components/layout/Header.astro +80 -80
  97. package/src/config.ts +56 -56
  98. package/src/design.config.ts +98 -98
  99. package/src/env.d.ts +6 -6
  100. package/src/layouts/Layout.astro +61 -61
  101. package/src/layouts/MainLayout.astro +81 -81
  102. package/src/layouts/partials/FooterCommon.astro +4 -4
  103. package/src/layouts/partials/HeadCommon.astro +44 -44
  104. package/src/layouts/partials/HeadSEO.astro +41 -41
  105. package/src/pages/components/badges.mdx +57 -57
  106. package/src/pages/components/breadcrumbs.mdx +139 -139
  107. package/src/pages/components/buttons.mdx +360 -360
  108. package/src/pages/components/card.mdx +294 -294
  109. package/src/pages/components/carousel.mdx +62 -62
  110. package/src/pages/components/copyright.mdx +42 -42
  111. package/src/pages/components/details-list.mdx +115 -115
  112. package/src/pages/components/features-list.mdx +37 -37
  113. package/src/pages/components/flags.mdx +49 -49
  114. package/src/pages/components/fuck-russia.mdx +39 -39
  115. package/src/pages/components/hand-drive.mdx +38 -38
  116. package/src/pages/components/headline.mdx +152 -152
  117. package/src/pages/components/icons.astro +135 -135
  118. package/src/pages/components/image.mdx +513 -513
  119. package/src/pages/components/input.mdx +367 -367
  120. package/src/pages/components/jumbotron.mdx +359 -359
  121. package/src/pages/components/modal.mdx +64 -64
  122. package/src/pages/components/post-header.mdx +64 -64
  123. package/src/pages/components/pr-code.mdx +65 -65
  124. package/src/pages/components/product-number.mdx +58 -58
  125. package/src/pages/components/product-tile.mdx +51 -51
  126. package/src/pages/components/quote.mdx +33 -33
  127. package/src/pages/components/slimbanner.mdx +35 -35
  128. package/src/pages/components/table.mdx +108 -108
  129. package/src/pages/core/colors.mdx +10 -10
  130. package/src/pages/core/grid.mdx +89 -89
  131. package/src/pages/core/introduction.mdx +77 -77
  132. package/src/pages/core/shadows.astro +20 -20
  133. package/src/pages/core/typography.astro +49 -49
  134. package/src/pages/index.astro +133 -133
  135. package/src/pages/patterns/introduction.mdx +60 -60
  136. package/src/pwa.ts +12 -12
  137. package/src/styles/_variables.scss +70 -70
  138. package/src/styles/base/base.css +184 -184
  139. package/src/styles/base/grid.css +92 -92
  140. package/src/styles/base/typography.css +70 -70
  141. package/src/styles/content.css +73 -73
  142. package/src/styles/main.css +7 -7
  143. package/src/types/Product.ts +31 -31
  144. package/src/types/astro.d.ts +3 -3
  145. package/src/utils/product/getPriceFormatted.ts +15 -15
  146. package/src/utils/product/getProductChecklist.ts +17 -17
  147. package/src/utils/product/useFormatProductNumber.ts +41 -41
  148. package/src/utils/seo/getShorterDescription.ts +14 -14
  149. package/src/utils/text/formatDate.ts +5 -5
  150. package/src/utils/text/formatLocaleNumber.ts +6 -6
  151. package/src/utils/text/formatPad.ts +12 -12
  152. package/src/utils/text/getNumberFormatted.ts +33 -33
  153. package/src/utils/text/getTranslatedLink.ts +5 -5
  154. package/src/utils/text.ts +19 -19
  155. package/tailwind.config.cjs +8 -8
  156. package/tsconfig.json +28 -28
  157. package/uno-config/index.ts +232 -232
  158. package/uno-config/theme/breakpoints.ts +9 -9
  159. package/uno-config/theme/colors.ts +64 -64
  160. package/uno-config/theme/dimensions.ts +17 -17
  161. package/uno-config/theme/effects.ts +14 -14
  162. package/uno-config/theme/grid.ts +10 -10
  163. package/uno-config/theme/index.ts +28 -28
  164. package/uno-config/theme/shortcuts/buttons.ts +53 -53
  165. package/uno-config/theme/shortcuts/components.ts +92 -92
  166. package/uno-config/theme/shortcuts/index.ts +20 -20
  167. package/uno-config/theme/shortcuts/layout.ts +64 -64
  168. package/uno-config/theme/typography.ts +29 -29
  169. package/uno.config.ts +2 -2
@@ -1,42 +1,42 @@
1
- const LIQUIDS_PATTERN = /^(\w{1})(\w{3})(\w{3})(.*)$/;
2
- const WHEELS_EMBLEMS_PATTERN = /^(\w{3})(\w{3})(\w{3})(.*)(\w{3})$/;
3
- const ACCESSORIES_MATS_PATTERN = /^(\w{3})(\w{3})(\w{3})(\w{1})(.*)$/;
4
- const OTHER_PARTS_PATTERN = /(\w{3})/g;
5
-
6
- const isLetter = (char: string): boolean => char.toLowerCase() !== char.toUpperCase();
7
-
8
- interface FormattedNumbers {
9
- standard: string;
10
- dot: string;
11
- dash: string;
12
- }
13
-
14
- export default function useFormatProductNumber(productNumber: string | null): { formattedNumbers: FormattedNumbers | null } {
15
- if (!productNumber) return { formattedNumbers: null };
16
-
17
- const formatProductNumber = (number: string, separator: string): string => {
18
- let formatted = number;
19
-
20
- if (isLetter(number[0]) && !isLetter(number[1]) && number.length === 9) {
21
- formatted = formatted.replace(LIQUIDS_PATTERN, `$1${separator}$2${separator}$3${separator}$4`);
22
- } else if (number.length >= 13) {
23
- formatted = formatted.replace(WHEELS_EMBLEMS_PATTERN, `$1${separator}$2${separator}$3${separator}$4${separator}$5`);
24
- } else if (number.length > 12) {
25
- formatted = formatted.replace(ACCESSORIES_MATS_PATTERN, `$1${separator}$2${separator}$3${separator}$4${separator}$5`);
26
- } else {
27
- formatted = formatted.replace(OTHER_PARTS_PATTERN, `$1${separator}`);
28
- }
29
-
30
- return formatted
31
- .replace(' ', separator)
32
- .replace(/[^a-zA-Z0-9]$/, ''); // Remove the end trailing separator
33
- };
34
-
35
- const formattedNumbers: FormattedNumbers = {
36
- standard: formatProductNumber(productNumber, '\u00A0'),
37
- dot: formatProductNumber(productNumber, '.'),
38
- dash: formatProductNumber(productNumber, '-')
39
- };
40
-
41
- return { formattedNumbers };
1
+ const LIQUIDS_PATTERN = /^(\w{1})(\w{3})(\w{3})(.*)$/;
2
+ const WHEELS_EMBLEMS_PATTERN = /^(\w{3})(\w{3})(\w{3})(.*)(\w{3})$/;
3
+ const ACCESSORIES_MATS_PATTERN = /^(\w{3})(\w{3})(\w{3})(\w{1})(.*)$/;
4
+ const OTHER_PARTS_PATTERN = /(\w{3})/g;
5
+
6
+ const isLetter = (char: string): boolean => char.toLowerCase() !== char.toUpperCase();
7
+
8
+ interface FormattedNumbers {
9
+ standard: string;
10
+ dot: string;
11
+ dash: string;
12
+ }
13
+
14
+ export default function useFormatProductNumber(productNumber: string | null): { formattedNumbers: FormattedNumbers | null } {
15
+ if (!productNumber) return { formattedNumbers: null };
16
+
17
+ const formatProductNumber = (number: string, separator: string): string => {
18
+ let formatted = number;
19
+
20
+ if (isLetter(number[0]) && !isLetter(number[1]) && number.length === 9) {
21
+ formatted = formatted.replace(LIQUIDS_PATTERN, `$1${separator}$2${separator}$3${separator}$4`);
22
+ } else if (number.length >= 13) {
23
+ formatted = formatted.replace(WHEELS_EMBLEMS_PATTERN, `$1${separator}$2${separator}$3${separator}$4${separator}$5`);
24
+ } else if (number.length > 12) {
25
+ formatted = formatted.replace(ACCESSORIES_MATS_PATTERN, `$1${separator}$2${separator}$3${separator}$4${separator}$5`);
26
+ } else {
27
+ formatted = formatted.replace(OTHER_PARTS_PATTERN, `$1${separator}`);
28
+ }
29
+
30
+ return formatted
31
+ .replace(' ', separator)
32
+ .replace(/[^a-zA-Z0-9]$/, ''); // Remove the end trailing separator
33
+ };
34
+
35
+ const formattedNumbers: FormattedNumbers = {
36
+ standard: formatProductNumber(productNumber, '\u00A0'),
37
+ dot: formatProductNumber(productNumber, '.'),
38
+ dash: formatProductNumber(productNumber, '-')
39
+ };
40
+
41
+ return { formattedNumbers };
42
42
  }
@@ -1,14 +1,14 @@
1
- const MAX_DESCRIPTION_LENGTH = 150;
2
-
3
- export const getShorterDescription = (description: string | null, limit = MAX_DESCRIPTION_LENGTH) => {
4
- function cutString(s: string, n: number) {
5
- const text = s.replace(/(\n)/g, " ");
6
- const cut = text.indexOf('. ', n);
7
- return cut === -1 ? text : `${text.substring(0, cut)}.`;
8
- }
9
-
10
- return description ? cutString(description, limit) || '' : '';
11
-
12
- }
13
-
14
- export default getShorterDescription;
1
+ const MAX_DESCRIPTION_LENGTH = 150;
2
+
3
+ export const getShorterDescription = (description: string | null, limit = MAX_DESCRIPTION_LENGTH) => {
4
+ function cutString(s: string, n: number) {
5
+ const text = s.replace(/(\n)/g, " ");
6
+ const cut = text.indexOf('. ', n);
7
+ return cut === -1 ? text : `${text.substring(0, cut)}.`;
8
+ }
9
+
10
+ return description ? cutString(description, limit) || '' : '';
11
+
12
+ }
13
+
14
+ export default getShorterDescription;
@@ -1,6 +1,6 @@
1
- /* Format date */
2
-
3
-
4
- export default function formatDate(date: Date ) {
5
- return new Date(date);
1
+ /* Format date */
2
+
3
+
4
+ export default function formatDate(date: Date ) {
5
+ return new Date(date);
6
6
  }
@@ -1,7 +1,7 @@
1
- /* Format numbers like details data: liters, measuring etc. */
2
-
3
- import i18next from "i18next";
4
-
5
- export default function formatLocaleNumber(number: number ) {
6
- return i18next.language === 'en' ? String(number).replace(/,/g, '.') : String(number);
1
+ /* Format numbers like details data: liters, measuring etc. */
2
+
3
+ import i18next from "i18next";
4
+
5
+ export default function formatLocaleNumber(number: number ) {
6
+ return i18next.language === 'en' ? String(number).replace(/,/g, '.') : String(number);
7
7
  }
@@ -1,13 +1,13 @@
1
- export const formatPad = (num: number, size: number) => {
2
- return String(num).padStart(size, '0');
3
- }
4
-
5
- export default formatPad;
6
- // export const formatPad = (num: number, size: number) => {
7
- // let productId = String(num)
8
-
9
- // if (size < 10)
10
- // while (productId.length < size) productId = `0${productId}`
11
-
12
- // return productId
1
+ export const formatPad = (num: number, size: number) => {
2
+ return String(num).padStart(size, '0');
3
+ }
4
+
5
+ export default formatPad;
6
+ // export const formatPad = (num: number, size: number) => {
7
+ // let productId = String(num)
8
+
9
+ // if (size < 10)
10
+ // while (productId.length < size) productId = `0${productId}`
11
+
12
+ // return productId
13
13
  // }
@@ -1,34 +1,34 @@
1
- export const getNumberFormatted = (num, digits) => {
2
- const lookup = [
3
- { value: 1e18, symbol: "E" },
4
- { value: 1e15, symbol: "P" },
5
- { value: 1e12, symbol: "T" },
6
- { value: 1e9, symbol: "G" },
7
- { value: 1e6, symbol: "M" },
8
- { value: 1e3, symbol: "k" },
9
- { value: 1, symbol: "" }
10
- ];
11
- const item = lookup.find(item => num >= item.value) || lookup[lookup.length - 1];
12
- return (num / item.value).toFixed(digits).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, "$1") + item.symbol;
13
- }
14
-
15
- export default getNumberFormatted;
16
- /*
17
- * Tests
18
- */
19
- // const tests = [
20
- // { num: 0, digits: 1 },
21
- // { num: 12, digits: 1 },
22
- // { num: 1234, digits: 1 },
23
- // { num: 100000000, digits: 1 },
24
- // { num: 299792458, digits: 1 },
25
- // { num: 759878, digits: 1 },
26
- // { num: 759878, digits: 0 },
27
- // { num: 123, digits: 1 },
28
- // { num: 123.456, digits: 1 },
29
- // { num: 123.456, digits: 2 },
30
- // { num: 123.456, digits: 4 }
31
- // ];
32
- // tests.forEach(test => {
33
- // console.log("getNumberFormatted(%f, %i) = %s", test.num, test.digits, getNumberFormatted(test.num, test.digits));
1
+ export const getNumberFormatted = (num, digits) => {
2
+ const lookup = [
3
+ { value: 1e18, symbol: "E" },
4
+ { value: 1e15, symbol: "P" },
5
+ { value: 1e12, symbol: "T" },
6
+ { value: 1e9, symbol: "G" },
7
+ { value: 1e6, symbol: "M" },
8
+ { value: 1e3, symbol: "k" },
9
+ { value: 1, symbol: "" }
10
+ ];
11
+ const item = lookup.find(item => num >= item.value) || lookup[lookup.length - 1];
12
+ return (num / item.value).toFixed(digits).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, "$1") + item.symbol;
13
+ }
14
+
15
+ export default getNumberFormatted;
16
+ /*
17
+ * Tests
18
+ */
19
+ // const tests = [
20
+ // { num: 0, digits: 1 },
21
+ // { num: 12, digits: 1 },
22
+ // { num: 1234, digits: 1 },
23
+ // { num: 100000000, digits: 1 },
24
+ // { num: 299792458, digits: 1 },
25
+ // { num: 759878, digits: 1 },
26
+ // { num: 759878, digits: 0 },
27
+ // { num: 123, digits: 1 },
28
+ // { num: 123.456, digits: 1 },
29
+ // { num: 123.456, digits: 2 },
30
+ // { num: 123.456, digits: 4 }
31
+ // ];
32
+ // tests.forEach(test => {
33
+ // console.log("getNumberFormatted(%f, %i) = %s", test.num, test.digits, getNumberFormatted(test.num, test.digits));
34
34
  // });
@@ -1,5 +1,5 @@
1
- export const getTranslatedLink = ( link:string, locale='en' ) => {
2
- return locale === 'en' ? link : `/${locale}${link}`
3
- }
4
-
5
- export default getTranslatedLink;
1
+ export const getTranslatedLink = ( link:string, locale='en' ) => {
2
+ return locale === 'en' ? link : `/${locale}${link}`
3
+ }
4
+
5
+ export default getTranslatedLink;
package/src/utils/text.ts CHANGED
@@ -1,19 +1,19 @@
1
- export const text2paragraphs = (text: string, firstLineBottomMargin: boolean = false) => {
2
- // return '<p class="mb-2">' + text.split(/[\n\r]+/g).join('</p><p>') + '</p>'
3
- let out = '<p' + (firstLineBottomMargin ? 'class="mb-3"' : '') + '>' + text.split("\n").join('</p><p>') + '<\/p>';
4
- return out.split('<p><\/p><p>').join('<p class="mt-3">');
5
- }
6
-
7
-
8
- export const countWords = (str: string) => {
9
- return str.trim().split(/\s+/).length;
10
- }
11
-
12
- export const firstSentence = (str: string) => {
13
- return str.split('\.');
14
- }
15
-
16
- export const removeSemicolon = (name: string) => {
17
- return name.replace(';', '')
18
- }
19
-
1
+ export const text2paragraphs = (text: string, firstLineBottomMargin: boolean = false) => {
2
+ // return '<p class="mb-2">' + text.split(/[\n\r]+/g).join('</p><p>') + '</p>'
3
+ let out = '<p' + (firstLineBottomMargin ? 'class="mb-3"' : '') + '>' + text.split("\n").join('</p><p>') + '<\/p>';
4
+ return out.split('<p><\/p><p>').join('<p class="mt-3">');
5
+ }
6
+
7
+
8
+ export const countWords = (str: string) => {
9
+ return str.trim().split(/\s+/).length;
10
+ }
11
+
12
+ export const firstSentence = (str: string) => {
13
+ return str.split('\.');
14
+ }
15
+
16
+ export const removeSemicolon = (name: string) => {
17
+ return name.replace(';', '')
18
+ }
19
+
@@ -1,8 +1,8 @@
1
- module.exports = {
2
- // darkMode: "class",
3
- content: ["./src/**/*.{astro,html,js,jsx,svelte,ts,tsx,vue}"],
4
- theme: {
5
- extend: {},
6
- },
7
- plugins: [],
8
- };
1
+ module.exports = {
2
+ // darkMode: "class",
3
+ content: ["./src/**/*.{astro,html,js,jsx,svelte,ts,tsx,vue}"],
4
+ theme: {
5
+ extend: {},
6
+ },
7
+ plugins: [],
8
+ };
package/tsconfig.json CHANGED
@@ -1,29 +1,29 @@
1
- {
2
- "include": ["env.d.ts", "src/**/*", "src/**/*.vue", "src/**/*.astro", "src/**/*.d.ts", "*.ts"],
3
- "compilerOptions": {
4
- "baseUrl": "src",
5
-
6
- // Enable JSON imports.
7
- "resolveJsonModule": true,
8
-
9
- // Enable stricter transpilation for better output.
10
- "isolatedModules": true,
11
-
12
- // Astro will directly run your TypeScript code, no transpilation needed.
13
- "noEmit": true,
14
-
15
- "target": "esnext",
16
- "useDefineForClassFields": true,
17
- "module": "esnext",
18
- "moduleResolution": "node",
19
- "jsx": "preserve",
20
- "allowJs": true,
21
- "types": ["vite/client", "vitest", "@vue/runtime-dom", "@astrojs/ts", "@astrojs/ts-plugin", "unplugin-vue-macros/macros-global", "unplugin-icons/types/astro"],
22
- "paths": {
23
- "@components/*": ["components/*"],
24
- "@utils/*": ["utils/*"],
25
- "@types/*": ["types/*"]
26
- }
27
- },
28
- "exclude": ["dist", "node_modules"]
1
+ {
2
+ "include": ["env.d.ts", "src/**/*", "src/**/*.vue", "src/**/*.astro", "src/**/*.d.ts", "*.ts"],
3
+ "compilerOptions": {
4
+ "baseUrl": "src",
5
+
6
+ // Enable JSON imports.
7
+ "resolveJsonModule": true,
8
+
9
+ // Enable stricter transpilation for better output.
10
+ "isolatedModules": true,
11
+
12
+ // Astro will directly run your TypeScript code, no transpilation needed.
13
+ "noEmit": true,
14
+
15
+ "target": "esnext",
16
+ "useDefineForClassFields": true,
17
+ "module": "esnext",
18
+ "moduleResolution": "node",
19
+ "jsx": "preserve",
20
+ "allowJs": true,
21
+ "types": ["vite/client", "vitest", "@vue/runtime-dom", "@astrojs/ts", "@astrojs/ts-plugin", "unplugin-vue-macros/macros-global", "unplugin-icons/types/astro"],
22
+ "paths": {
23
+ "@components/*": ["components/*"],
24
+ "@utils/*": ["utils/*"],
25
+ "@types/*": ["types/*"]
26
+ }
27
+ },
28
+ "exclude": ["dist", "node_modules"]
29
29
  }