spoko-design-system 0.5.0 → 0.5.2

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 (172) 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 +278 -278
  17. package/index.ts +65 -65
  18. package/package.json +124 -124
  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 +87 -87
  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 +23 -23
  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/CategoryLink.astro +18 -18
  53. package/src/components/Copyright.astro +12 -12
  54. package/src/components/Date.astro +7 -7
  55. package/src/components/Faq.astro +33 -33
  56. package/src/components/FaqItem.astro +80 -80
  57. package/src/components/FeaturesList.vue +41 -41
  58. package/src/components/FuckRussia.vue +62 -62
  59. package/src/components/HandDrive.astro +29 -29
  60. package/src/components/Header/Header.astro +210 -210
  61. package/src/components/Header/SkipToContent.astro +1 -1
  62. package/src/components/Headline.vue +48 -48
  63. package/src/components/Image.astro +30 -30
  64. package/src/components/Input.astro +2 -2
  65. package/src/components/Jumbotron/variants/PostSplit.astro +9 -1
  66. package/src/components/LeftSidebar.astro +53 -53
  67. package/src/components/MainColors.vue +22 -22
  68. package/src/components/MainInput.vue +15 -15
  69. package/src/components/Modal.astro +27 -27
  70. package/src/components/PageContent.astro +5 -5
  71. package/src/components/PartNumber.vue +27 -27
  72. package/src/components/PostHeader.astro +103 -103
  73. package/src/components/PrCode.vue +141 -141
  74. package/src/components/Product/ProductButton.vue +18 -18
  75. package/src/components/Product/ProductCarousel.astro +35 -35
  76. package/src/components/Product/ProductCodes.vue +174 -174
  77. package/src/components/Product/ProductEngineType.vue +42 -42
  78. package/src/components/Product/ProductImage.astro +40 -40
  79. package/src/components/Product/ProductLink.astro +101 -101
  80. package/src/components/Product/ProductLink.vue +59 -59
  81. package/src/components/Product/ProductLinkInfo.astro +37 -37
  82. package/src/components/Product/ProductNumber.astro +60 -60
  83. package/src/components/ProductCarousel.astro +38 -38
  84. package/src/components/ProductCodes.vue +39 -39
  85. package/src/components/ProductDetailName.vue +52 -52
  86. package/src/components/ProductDetailsList.vue +65 -65
  87. package/src/components/ProductTile.astro +48 -48
  88. package/src/components/Quote.vue +23 -23
  89. package/src/components/ReloadPrompt.astro +50 -50
  90. package/src/components/SlimBanner.vue +72 -72
  91. package/src/components/Table.vue +32 -32
  92. package/src/components/TableOfContents.astro +15 -15
  93. package/src/components/Translations.vue +23 -23
  94. package/src/components/flags/FlagPL.vue +3 -3
  95. package/src/components/flags/FlagUA.vue +2 -2
  96. package/src/components/layout/Container.astro +7 -7
  97. package/src/components/layout/Header.astro +80 -80
  98. package/src/config.ts +56 -56
  99. package/src/design.config.ts +98 -98
  100. package/src/env.d.ts +6 -6
  101. package/src/layouts/Layout.astro +61 -61
  102. package/src/layouts/MainLayout.astro +81 -81
  103. package/src/layouts/partials/FooterCommon.astro +4 -4
  104. package/src/layouts/partials/HeadCommon.astro +44 -44
  105. package/src/layouts/partials/HeadSEO.astro +41 -41
  106. package/src/pages/components/badges.mdx +57 -57
  107. package/src/pages/components/breadcrumbs.mdx +139 -139
  108. package/src/pages/components/buttons.mdx +360 -360
  109. package/src/pages/components/card.mdx +294 -294
  110. package/src/pages/components/carousel.mdx +62 -62
  111. package/src/pages/components/copyright.mdx +42 -42
  112. package/src/pages/components/details-list.mdx +115 -115
  113. package/src/pages/components/features-list.mdx +37 -37
  114. package/src/pages/components/flags.mdx +49 -49
  115. package/src/pages/components/fuck-russia.mdx +39 -39
  116. package/src/pages/components/hand-drive.mdx +38 -38
  117. package/src/pages/components/headline.mdx +152 -152
  118. package/src/pages/components/icons.astro +135 -135
  119. package/src/pages/components/image.mdx +513 -513
  120. package/src/pages/components/input.mdx +47 -47
  121. package/src/pages/components/jumbotron.mdx +359 -359
  122. package/src/pages/components/modal.mdx +64 -64
  123. package/src/pages/components/post-header.mdx +60 -60
  124. package/src/pages/components/pr-code.mdx +65 -65
  125. package/src/pages/components/product-number.mdx +58 -58
  126. package/src/pages/components/product-tile.mdx +51 -51
  127. package/src/pages/components/quote.mdx +33 -33
  128. package/src/pages/components/slimbanner.mdx +35 -35
  129. package/src/pages/components/table.mdx +108 -108
  130. package/src/pages/core/colors.mdx +10 -10
  131. package/src/pages/core/grid.mdx +89 -89
  132. package/src/pages/core/introduction.mdx +77 -77
  133. package/src/pages/core/shadows.astro +20 -20
  134. package/src/pages/core/typography.astro +49 -49
  135. package/src/pages/index.astro +130 -130
  136. package/src/pages/patterns/introduction.mdx +60 -60
  137. package/src/pwa.ts +12 -12
  138. package/src/styles/_variables.scss +70 -70
  139. package/src/styles/base/base.css +184 -184
  140. package/src/styles/base/grid.css +92 -92
  141. package/src/styles/base/typography.css +70 -70
  142. package/src/styles/content.css +73 -73
  143. package/src/styles/main.css +7 -7
  144. package/src/types/Product.ts +31 -31
  145. package/src/types/astro.d.ts +3 -3
  146. package/src/utils/product/getPriceFormatted.ts +15 -15
  147. package/src/utils/product/getProductChecklist.ts +17 -17
  148. package/src/utils/product/useFormatProductNumber.ts +41 -41
  149. package/src/utils/seo/getShorterDescription.ts +14 -14
  150. package/src/utils/text/formatDate.ts +5 -5
  151. package/src/utils/text/formatLocaleNumber.ts +6 -6
  152. package/src/utils/text/formatPad.ts +12 -12
  153. package/src/utils/text/getNumberFormatted.ts +33 -33
  154. package/src/utils/text/getTranslatedLink.ts +5 -5
  155. package/src/utils/text.ts +19 -19
  156. package/tailwind.config.cjs +8 -8
  157. package/tsconfig.json +28 -28
  158. package/uno-config/index.ts +61 -61
  159. package/uno-config/theme/breakpoints.ts +9 -9
  160. package/uno-config/theme/colors.ts +64 -64
  161. package/uno-config/theme/container.ts +8 -7
  162. package/uno-config/theme/dimensions.ts +17 -17
  163. package/uno-config/theme/effects.ts +14 -14
  164. package/uno-config/theme/grid.ts +10 -10
  165. package/uno-config/theme/index.ts +28 -28
  166. package/uno-config/theme/shortcuts/buttons.ts +53 -42
  167. package/uno-config/theme/shortcuts/components.ts +92 -92
  168. package/uno-config/theme/shortcuts/index.ts +18 -18
  169. package/uno-config/theme/shortcuts/jumbotron.ts +6 -2
  170. package/uno-config/theme/shortcuts/layout.ts +64 -64
  171. package/uno-config/theme/typography.ts +29 -29
  172. 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
  }
@@ -1,62 +1,62 @@
1
- // uno-config/index.ts
2
- import type { UserConfig, UserShortcuts } from 'unocss'
3
- import { defineConfig } from 'unocss';
4
- import {
5
- transformerDirectives,
6
- transformerVariantGroup,
7
- presetAttributify,
8
- presetIcons,
9
- presetTypography,
10
- presetUno,
11
- presetWebFonts,
12
- } from 'unocss';
13
-
14
- import { shortcuts } from './theme/shortcuts';
15
- import { theme } from './theme';
16
-
17
- interface CustomConfig extends Partial<UserConfig> {
18
- shortcuts?: UserShortcuts;
19
- theme?: Partial<typeof theme>;
20
- }
21
-
22
- export function createSdsConfig(customConfig: CustomConfig = {}) {
23
- return defineConfig({
24
- transformers: [
25
- transformerDirectives(),
26
- transformerVariantGroup(),
27
- ],
28
- shortcuts: {
29
- ...shortcuts,
30
- ...(customConfig.shortcuts || {})
31
- },
32
- theme: {
33
- ...theme,
34
- ...(customConfig.theme || {})
35
- },
36
- safelist: [
37
- 'md:grid-cols-product'
38
- ],
39
- presets: [
40
- presetUno(),
41
- presetAttributify(),
42
- presetIcons({
43
- scale: 1.2,
44
- warn: true,
45
- prefix: 'i-',
46
- extraProperties: {
47
- 'display': 'inline-block',
48
- 'vertical-align': 'middle',
49
- },
50
- }),
51
- presetTypography(),
52
- presetWebFonts({
53
- provider: 'none',
54
- fonts: theme.fontFamily
55
- })
56
- ],
57
- ...customConfig
58
- });
59
- }
60
-
61
- export * from './theme';
1
+ // uno-config/index.ts
2
+ import type { UserConfig, UserShortcuts } from 'unocss'
3
+ import { defineConfig } from 'unocss';
4
+ import {
5
+ transformerDirectives,
6
+ transformerVariantGroup,
7
+ presetAttributify,
8
+ presetIcons,
9
+ presetTypography,
10
+ presetUno,
11
+ presetWebFonts,
12
+ } from 'unocss';
13
+
14
+ import { shortcuts } from './theme/shortcuts';
15
+ import { theme } from './theme';
16
+
17
+ interface CustomConfig extends Partial<UserConfig> {
18
+ shortcuts?: UserShortcuts;
19
+ theme?: Partial<typeof theme>;
20
+ }
21
+
22
+ export function createSdsConfig(customConfig: CustomConfig = {}) {
23
+ return defineConfig({
24
+ transformers: [
25
+ transformerDirectives(),
26
+ transformerVariantGroup(),
27
+ ],
28
+ shortcuts: {
29
+ ...shortcuts,
30
+ ...(customConfig.shortcuts || {})
31
+ },
32
+ theme: {
33
+ ...theme,
34
+ ...(customConfig.theme || {})
35
+ },
36
+ safelist: [
37
+ 'md:grid-cols-product'
38
+ ],
39
+ presets: [
40
+ presetUno(),
41
+ presetAttributify(),
42
+ presetIcons({
43
+ scale: 1.2,
44
+ warn: true,
45
+ prefix: 'i-',
46
+ extraProperties: {
47
+ 'display': 'inline-block',
48
+ 'vertical-align': 'middle',
49
+ },
50
+ }),
51
+ presetTypography(),
52
+ presetWebFonts({
53
+ provider: 'none',
54
+ fonts: theme.fontFamily
55
+ })
56
+ ],
57
+ ...customConfig
58
+ });
59
+ }
60
+
61
+ export * from './theme';
62
62
  export * from './theme/shortcuts';
@@ -1,10 +1,10 @@
1
- // theme/breakpoints.ts
2
- export const breakpoints = {
3
- sm: '640px',
4
- md: '768px',
5
- lg: '1024px',
6
- xl: '1280px',
7
- '2xl': '1536px',
8
- '3xl': '1920px',
9
- '4xl': '2400px',
1
+ // theme/breakpoints.ts
2
+ export const breakpoints = {
3
+ sm: '640px',
4
+ md: '768px',
5
+ lg: '1024px',
6
+ xl: '1280px',
7
+ '2xl': '1536px',
8
+ '3xl': '1920px',
9
+ '4xl': '2400px',
10
10
  };
@@ -1,65 +1,65 @@
1
- // theme/colors.ts
2
- export const colors = {
3
- // Brand colors - core identity colors
4
- brand: {
5
- primary: '#0040c5', // Main brand color
6
- secondary: '#00b0f0', // Supporting brand color
7
- },
8
-
9
- // Primary blues - main blue palette
10
- blue: {
11
- ultralight: '#dbeafe',
12
- lightest: '#3b82f6', // Lightest shade
13
- light: '#0069ff',
14
- default: '#005ad7', // Default/base blue
15
- medium: '#02307d',
16
- darker: '#001e50',
17
- darkest: '#000f28', // Darkest shade
18
- wrc: '#0000c8', // Special WRC color
19
- },
20
-
21
- // Secondary colors - accent palette
22
- accent: {
23
- light: '#0099da',
24
- default: '#0087c1', // Default accent
25
- dark: '#006ea6',
26
- darker: '#00437a',
27
- deepBlue: '#0c1a32',
28
- },
29
-
30
- // Neutral colors - grayscale
31
- neutral: {
32
- lightest: '#f3f4f6', // Lightest gray
33
- lighter: '#e5e7eb',
34
- light: '#b5bbc5',
35
- default: '#9ca3af', // Base gray
36
- dark: '#6a767d',
37
- darker: '#4b5563',
38
- },
39
-
40
- // Slate colors - gray-blue palette
41
- slate: {
42
- light: '#64748B',
43
- default: '#475569',
44
- dark: '#334155',
45
- darkest: '#1e293b',
46
- },
47
-
48
- // System colors - functional colors
49
- system: {
50
- success: '#10B981', // Green - success state
51
- warning: '#FBBF24', // Yellow - warning state
52
- error: '#EF4444', // Red - error state
53
- info: '#3B82F6', // Blue - information state
54
- },
55
-
56
- // States - interaction states
57
- state: {
58
- overlay: 'rgb(0 0 0 / 0.06)', // Overlay & Hover state
59
- disabled: 'rgb(0 0 0 / 0.12)', // Disabled state
60
- }
61
- };
62
-
63
- // Export types for TypeScript
64
- export type Colors = typeof colors;
1
+ // theme/colors.ts
2
+ export const colors = {
3
+ // Brand colors - core identity colors
4
+ brand: {
5
+ primary: '#0040c5', // Main brand color
6
+ secondary: '#00b0f0', // Supporting brand color
7
+ },
8
+
9
+ // Primary blues - main blue palette
10
+ blue: {
11
+ ultralight: '#dbeafe',
12
+ lightest: '#3b82f6', // Lightest shade
13
+ light: '#0069ff',
14
+ default: '#005ad7', // Default/base blue
15
+ medium: '#02307d',
16
+ darker: '#001e50',
17
+ darkest: '#000f28', // Darkest shade
18
+ wrc: '#0000c8', // Special WRC color
19
+ },
20
+
21
+ // Secondary colors - accent palette
22
+ accent: {
23
+ light: '#0099da',
24
+ default: '#0087c1', // Default accent
25
+ dark: '#006ea6',
26
+ darker: '#00437a',
27
+ deepBlue: '#0c1a32',
28
+ },
29
+
30
+ // Neutral colors - grayscale
31
+ neutral: {
32
+ lightest: '#f3f4f6', // Lightest gray
33
+ lighter: '#e5e7eb',
34
+ light: '#b5bbc5',
35
+ default: '#9ca3af', // Base gray
36
+ dark: '#6a767d',
37
+ darker: '#4b5563',
38
+ },
39
+
40
+ // Slate colors - gray-blue palette
41
+ slate: {
42
+ light: '#64748B',
43
+ default: '#475569',
44
+ dark: '#334155',
45
+ darkest: '#1e293b',
46
+ },
47
+
48
+ // System colors - functional colors
49
+ system: {
50
+ success: '#10B981', // Green - success state
51
+ warning: '#FBBF24', // Yellow - warning state
52
+ error: '#EF4444', // Red - error state
53
+ info: '#3B82F6', // Blue - information state
54
+ },
55
+
56
+ // States - interaction states
57
+ state: {
58
+ overlay: 'rgb(0 0 0 / 0.06)', // Overlay & Hover state
59
+ disabled: 'rgb(0 0 0 / 0.12)', // Disabled state
60
+ }
61
+ };
62
+
63
+ // Export types for TypeScript
64
+ export type Colors = typeof colors;
65
65
  export type ColorShade = keyof typeof colors;