spoko-design-system 0.5.5 → 0.5.7

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 (171) hide show
  1. package/.astro/data-store.json +1 -1
  2. package/.astro/settings.json +4 -4
  3. package/.github/dependabot.yml +11 -11
  4. package/.github/todo.yml +3 -3
  5. package/.github/workflows/deploy.yml +39 -39
  6. package/.stackblitzrc +5 -5
  7. package/.vscode/extensions.json +5 -5
  8. package/.vscode/launch.json +11 -11
  9. package/.vscode/settings.json +5 -5
  10. package/LICENSE +21 -21
  11. package/README.md +114 -114
  12. package/astro-i18next.config.mjs +17 -17
  13. package/astro-i18next.config.ts +10 -10
  14. package/astro.config.mjs +86 -86
  15. package/dev-dist/sw.js +91 -91
  16. package/dev-dist/workbox-c676b6d3.js +3391 -3391
  17. package/icon.config.ts +278 -278
  18. package/index.ts +65 -65
  19. package/package.json +2 -2
  20. package/public/fonts/lg.svg +53 -53
  21. package/public/fonts/vwhead-bold-demo.html +549 -549
  22. package/public/fonts/vwhead-regular-demo.html +549 -549
  23. package/public/fonts/vwtext-bold-demo.html +549 -549
  24. package/public/fonts/vwtext-regular-demo.html +549 -549
  25. package/public/github.svg +3 -3
  26. package/public/grid_dot.svg +4 -4
  27. package/public/linkedin.svg +44 -44
  28. package/public/locales/en/translation.json +8 -8
  29. package/public/locales/pl/translation.json +8 -8
  30. package/public/make-scrollable-code-focusable.js +3 -3
  31. package/public/pagefind.yml +3 -3
  32. package/public/polo.blue.svg +29 -29
  33. package/public/spoko.space.svg +71 -71
  34. package/public/twitter.svg +46 -46
  35. package/renovate.json +6 -6
  36. package/sandbox.config.json +11 -11
  37. package/src/MyComponent.astro +8 -8
  38. package/src/components/Badge.vue +19 -19
  39. package/src/components/Badges.vue +21 -21
  40. package/src/components/Breadcrumbs.vue +107 -107
  41. package/src/components/Button.vue +101 -101
  42. package/src/components/ButtonCopy.astro +183 -183
  43. package/src/components/ButtonCopy.vue +36 -36
  44. package/src/components/Card.astro +27 -27
  45. package/src/components/Carousel.astro +26 -26
  46. package/src/components/Category/CategoriesCarousel.astro +101 -101
  47. package/src/components/Category/CategoryDetails.astro +169 -169
  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/Input.astro +38 -13
  64. package/src/components/Jumbotron/variants/Hero.astro +0 -1
  65. package/src/components/LeftSidebar.astro +53 -53
  66. package/src/components/MainColors.vue +22 -22
  67. package/src/components/MainInput.vue +15 -15
  68. package/src/components/Modal.astro +27 -27
  69. package/src/components/PageContent.astro +5 -5
  70. package/src/components/PartNumber.vue +27 -27
  71. package/src/components/Post/PostCategories.astro +37 -37
  72. package/src/components/Post/PostCategories.vue +38 -38
  73. package/src/components/PostHeader.astro +103 -103
  74. package/src/components/PrCode.vue +141 -141
  75. package/src/components/Product/ProductButton.vue +18 -18
  76. package/src/components/Product/ProductCarousel.astro +35 -35
  77. package/src/components/Product/ProductCodes.vue +174 -174
  78. package/src/components/Product/ProductEngineType.vue +42 -42
  79. package/src/components/Product/ProductImage.astro +40 -40
  80. package/src/components/Product/ProductLink.astro +101 -101
  81. package/src/components/Product/ProductLink.vue +59 -59
  82. package/src/components/Product/ProductLinkInfo.astro +37 -37
  83. package/src/components/Product/ProductNumber.astro +60 -60
  84. package/src/components/ProductCarousel.astro +38 -38
  85. package/src/components/ProductCodes.vue +39 -39
  86. package/src/components/ProductDetailName.vue +52 -52
  87. package/src/components/ProductDetailsList.vue +65 -65
  88. package/src/components/ProductTile.astro +48 -48
  89. package/src/components/Quote.vue +23 -23
  90. package/src/components/ReloadPrompt.astro +50 -50
  91. package/src/components/SlimBanner.vue +72 -72
  92. package/src/components/Table.vue +32 -32
  93. package/src/components/TableOfContents.astro +15 -15
  94. package/src/components/Translations.vue +23 -23
  95. package/src/components/flags/FlagPL.vue +3 -3
  96. package/src/components/flags/FlagUA.vue +2 -2
  97. package/src/components/layout/Container.astro +7 -7
  98. package/src/components/layout/Header.astro +80 -80
  99. package/src/config.ts +56 -56
  100. package/src/design.config.ts +98 -98
  101. package/src/env.d.ts +6 -6
  102. package/src/layouts/Layout.astro +61 -61
  103. package/src/layouts/MainLayout.astro +81 -81
  104. package/src/layouts/partials/FooterCommon.astro +4 -4
  105. package/src/layouts/partials/HeadCommon.astro +44 -44
  106. package/src/layouts/partials/HeadSEO.astro +41 -41
  107. package/src/pages/components/badges.mdx +57 -57
  108. package/src/pages/components/breadcrumbs.mdx +139 -139
  109. package/src/pages/components/buttons.mdx +360 -360
  110. package/src/pages/components/card.mdx +294 -294
  111. package/src/pages/components/carousel.mdx +62 -62
  112. package/src/pages/components/copyright.mdx +42 -42
  113. package/src/pages/components/details-list.mdx +115 -115
  114. package/src/pages/components/features-list.mdx +37 -37
  115. package/src/pages/components/flags.mdx +49 -49
  116. package/src/pages/components/fuck-russia.mdx +39 -39
  117. package/src/pages/components/hand-drive.mdx +38 -38
  118. package/src/pages/components/headline.mdx +152 -152
  119. package/src/pages/components/icons.astro +135 -135
  120. package/src/pages/components/image.mdx +513 -513
  121. package/src/pages/components/input.mdx +84 -47
  122. package/src/pages/components/jumbotron.mdx +359 -359
  123. package/src/pages/components/modal.mdx +64 -64
  124. package/src/pages/components/post-header.mdx +60 -60
  125. package/src/pages/components/pr-code.mdx +65 -65
  126. package/src/pages/components/product-number.mdx +58 -58
  127. package/src/pages/components/product-tile.mdx +51 -51
  128. package/src/pages/components/quote.mdx +33 -33
  129. package/src/pages/components/slimbanner.mdx +35 -35
  130. package/src/pages/components/table.mdx +108 -108
  131. package/src/pages/core/colors.mdx +10 -10
  132. package/src/pages/core/grid.mdx +89 -89
  133. package/src/pages/core/introduction.mdx +77 -77
  134. package/src/pages/core/shadows.astro +20 -20
  135. package/src/pages/core/typography.astro +49 -49
  136. package/src/pages/index.astro +130 -130
  137. package/src/pages/patterns/introduction.mdx +60 -60
  138. package/src/pwa.ts +12 -12
  139. package/src/styles/_variables.scss +70 -70
  140. package/src/styles/base/base.css +184 -184
  141. package/src/styles/base/grid.css +92 -92
  142. package/src/styles/base/typography.css +70 -70
  143. package/src/styles/content.css +73 -73
  144. package/src/styles/main.css +7 -7
  145. package/src/types/Product.ts +31 -31
  146. package/src/types/astro.d.ts +3 -3
  147. package/src/utils/product/getPriceFormatted.ts +15 -15
  148. package/src/utils/product/getProductChecklist.ts +17 -17
  149. package/src/utils/product/useFormatProductNumber.ts +41 -41
  150. package/src/utils/seo/getShorterDescription.ts +14 -14
  151. package/src/utils/text/formatDate.ts +5 -5
  152. package/src/utils/text/formatLocaleNumber.ts +6 -6
  153. package/src/utils/text/formatPad.ts +12 -12
  154. package/src/utils/text/getNumberFormatted.ts +33 -33
  155. package/src/utils/text/getTranslatedLink.ts +5 -5
  156. package/src/utils/text.ts +19 -19
  157. package/tailwind.config.cjs +8 -8
  158. package/tsconfig.json +28 -28
  159. package/uno-config/index.ts +61 -61
  160. package/uno-config/theme/breakpoints.ts +9 -9
  161. package/uno-config/theme/colors.ts +64 -64
  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 -53
  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/layout.ts +64 -64
  170. package/uno-config/theme/typography.ts +29 -29
  171. 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;