spoko-design-system 0.8.9 → 0.9.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 (169) hide show
  1. package/.github/dependabot.yml +11 -11
  2. package/.github/todo.yml +3 -3
  3. package/.github/workflows/deploy.yml +39 -39
  4. package/.stackblitzrc +5 -5
  5. package/.vscode/extensions.json +5 -5
  6. package/.vscode/launch.json +11 -11
  7. package/.vscode/settings.json +5 -5
  8. package/LICENSE +21 -21
  9. package/README.md +114 -114
  10. package/astro-i18next.config.mjs +17 -17
  11. package/astro-i18next.config.ts +10 -10
  12. package/astro.config.mjs +86 -86
  13. package/dev-dist/sw.js +91 -91
  14. package/dev-dist/workbox-c676b6d3.js +3391 -3391
  15. package/icon.config.ts +310 -310
  16. package/index.ts +70 -70
  17. package/package.json +41 -41
  18. package/public/arrow-bottom.svg +7 -7
  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 +80 -91
  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 +37 -37
  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 +37 -37
  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 +87 -87
  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 +30 -30
  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/ProductEngineType.vue +42 -42
  76. package/src/components/Product/ProductImage.astro +40 -40
  77. package/src/components/Product/ProductLink.astro +101 -101
  78. package/src/components/Product/ProductLink.vue +59 -59
  79. package/src/components/Product/ProductLinkInfo.astro +37 -37
  80. package/src/components/Product/ProductNumber.astro +60 -60
  81. package/src/components/ProductCarousel.astro +38 -38
  82. package/src/components/ProductCodes.vue +39 -39
  83. package/src/components/ProductDetailName.vue +52 -52
  84. package/src/components/ProductDetailsList.vue +216 -216
  85. package/src/components/ProductTile.astro +48 -48
  86. package/src/components/Quote.vue +23 -23
  87. package/src/components/ReloadPrompt.astro +50 -50
  88. package/src/components/SlimBanner.vue +72 -72
  89. package/src/components/Table.vue +32 -32
  90. package/src/components/TableOfContents.astro +15 -15
  91. package/src/components/Translations.vue +23 -23
  92. package/src/components/flags/FlagPL.vue +3 -3
  93. package/src/components/flags/FlagUA.vue +2 -2
  94. package/src/components/{Layout → layout}/CallToAction.astro +52 -52
  95. package/src/components/{Layout → layout}/Container.astro +7 -7
  96. package/src/components/{Layout → 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 +137 -137
  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 +259 -259
  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 +123 -123
  166. package/uno-config/theme/shortcuts/index.ts +20 -20
  167. package/uno-config/theme/shortcuts/layout.ts +74 -74
  168. package/uno-config/theme/typography.ts +29 -29
  169. package/uno.config.ts +2 -2
@@ -1,260 +1,260 @@
1
- // uno-config/index.ts
2
- import type { UserConfig, UserShortcuts } from 'unocss'
3
- import { defineConfig } from 'unocss';
4
-
5
- // REQUIRED IMPORTS: These imports are used in the createSdsConfig function
6
- // Removing or commenting out any of these will break the UnoCSS configuration
7
- import {
8
- transformerDirectives, // Used in transformers array
9
- transformerVariantGroup, // Used in transformers array
10
- presetAttributify, // Used in presets array
11
- presetIcons, // Used in presets array with specific configuration
12
- } from 'unocss';
13
-
14
- // These presets must be imported explicitly to be used in the configuration
15
- import presetUno from '@unocss/preset-uno'; // Primary UnoCSS preset
16
- import presetTypography from '@unocss/preset-typography'; // Typography preset
17
- import presetWebFonts from '@unocss/preset-web-fonts'; // Web fonts preset
18
-
19
- import { shortcuts } from './theme/shortcuts';
20
- import { theme } from './theme';
21
-
22
- // List of peer selectors we want to preserve during build
23
- const peerSelectorClasses = [
24
- // Focus state classes
25
- 'peer-focus:text-blue-light',
26
- 'peer-focus:dark:text-blue-lightest',
27
- 'peer-focus:scale-75',
28
- 'peer-focus:-translate-y-6',
29
- 'peer-focus:-translate-y-4',
30
- 'peer-focus:start-0',
31
-
32
- // Placeholder shown classes
33
- 'peer-placeholder-shown:scale-100',
34
- 'peer-placeholder-shown:translate-y-0',
35
-
36
- // Not placeholder shown classes
37
- 'peer-not-placeholder-shown:scale-75',
38
- 'peer-not-placeholder-shown:-translate-y-6',
39
- 'peer-not-placeholder-shown:-translate-y-4',
40
- ];
41
-
42
- interface CustomConfig extends Partial<UserConfig> {
43
- shortcuts?: UserShortcuts;
44
- theme?: Partial<typeof theme>;
45
- }
46
-
47
- /**
48
- * Creates a UnoCSS configuration with Spoko Design System defaults
49
- *
50
- * IMPORTANT: This function requires all the imported UnoCSS presets and transformers.
51
- * Do not remove any imports at the top of this file as they are necessary for
52
- * proper functioning of the UnoCSS configuration.
53
- *
54
- * @param customConfig - Optional custom configuration to merge with defaults
55
- * @returns Complete UnoCSS configuration
56
- */
57
- export function createSdsConfig(customConfig: CustomConfig = {}) {
58
- return defineConfig({
59
- // Transform directives and variant groups
60
- transformers: [
61
- transformerDirectives(),
62
- transformerVariantGroup(),
63
- ],
64
- shortcuts: {
65
- ...shortcuts,
66
- ...(customConfig.shortcuts || {})
67
- },
68
- theme: {
69
- ...theme,
70
- ...(customConfig.theme || {})
71
- },
72
- // Enhanced variants to better handle peer selectors
73
- variants: [
74
- // Add specific peer variant support
75
- (matcher) => {
76
- if (!matcher.startsWith('peer-'))
77
- return matcher;
78
-
79
- const peerVariant = matcher.slice(5);
80
- const selectorMap = {
81
- 'focus:': (s) => `.peer:focus ~ ${s}`,
82
- 'hover:': (s) => `.peer:hover ~ ${s}`,
83
- 'placeholder-shown:': (s) => `.peer:placeholder-shown ~ ${s}`,
84
- 'not-placeholder-shown:': (s) => `.peer:not(:placeholder-shown) ~ ${s}`,
85
- };
86
-
87
- // Check for nested variants like 'peer-focus:text-blue'
88
- for (const [key, selectorFn] of Object.entries(selectorMap)) {
89
- if (peerVariant.startsWith(key)) {
90
- return {
91
- matcher: peerVariant.slice(key.length),
92
- selector: selectorFn,
93
- };
94
- }
95
- }
96
-
97
- // Default peer handling
98
- return {
99
- matcher: peerVariant,
100
- selector: (s) => `.peer:${peerVariant} ~ ${s}`,
101
- };
102
- },
103
- ],
104
- // Comprehensive safelist with all needed classes
105
- safelist: [
106
- // Existing safelist items
107
- 'md:grid-cols-product',
108
-
109
- 'breadcrumb-link-disabled',
110
- 'breadcrumb-link',
111
- 'breadcrumb-item',
112
- 'features-list-caption',
113
- 'features-list-ul',
114
- 'features-list-item',
115
-
116
- 'category-link-base',
117
- 'category-link-active',
118
-
119
- // Base peer class
120
- 'peer',
121
-
122
- // All input component classes from shortcuts
123
- 'input-base',
124
- 'input-label-base',
125
- 'input-placeholder',
126
- 'input-standard',
127
- 'input-filled',
128
- 'input-wrapper-standard',
129
- 'input-wrapper-filled',
130
- 'input-label-standard',
131
- 'input-label-filled',
132
-
133
- // Label state shortcuts
134
- 'input-label-focus-color',
135
- 'input-label-focus-scale',
136
- 'input-label-focus-translate-standard',
137
- 'input-label-focus-translate-filled',
138
- 'input-label-placeholder',
139
- 'input-label-filled-standard',
140
- 'input-label-filled-filled',
141
- 'input-label-standard-state',
142
- 'input-label-filled-state',
143
-
144
- // Input types
145
- 'input-textarea',
146
- 'resize-none',
147
-
148
- // Size variants
149
- 'input-sm',
150
- 'input-md',
151
- 'input-lg',
152
- 'input-label-sm',
153
- 'input-label-md',
154
- 'input-label-lg',
155
-
156
- // Status classes
157
- 'input-error',
158
- 'input-label-error',
159
- 'input-error-message',
160
- 'input-success',
161
- 'input-label-success',
162
- 'input-success-message',
163
-
164
- // Transform related classes
165
- 'origin-top-left',
166
- 'transform-gpu',
167
- 'translate-y-0',
168
- '-translate-y-4',
169
- '-translate-y-6',
170
- 'scale-75',
171
- 'scale-100',
172
-
173
- // Every possible arbitrary selector used
174
- '[&:focus~label]:scale-75',
175
- '[&:focus~label]:-translate-y-4',
176
- '[&:focus~label]:-translate-y-6',
177
- '[&:focus~label]:text-blue-light',
178
- '[&:focus~label]:dark:text-blue-lightest',
179
- '[&:focus~label]:start-0',
180
- '[&:placeholder-shown~label]:scale-100',
181
- '[&:placeholder-shown~label]:translate-y-0',
182
- '[&:not(:placeholder-shown)~label]:scale-75',
183
- '[&:not(:placeholder-shown)~label]:-translate-y-4',
184
- '[&:not(:placeholder-shown)~label]:-translate-y-6',
185
-
186
- // Combinations of selectors
187
- 'peer:focus:text-blue-light',
188
- 'peer:focus:dark:text-blue-lightest',
189
- 'peer:focus:scale-75',
190
- 'peer:focus:-translate-y-4',
191
- 'peer:focus:-translate-y-6',
192
- 'peer:focus:start-0',
193
- 'peer-placeholder-shown:scale-100',
194
- 'peer-placeholder-shown:translate-y-0',
195
- 'peer-not-placeholder-shown:scale-75',
196
- 'peer-not-placeholder-shown:-translate-y-4',
197
- 'peer-not-placeholder-shown:-translate-y-6',
198
-
199
- // With !important for good measure
200
- '[&:focus~label]:!scale-75',
201
- '[&:focus~label]:!-translate-y-4',
202
- '[&:focus~label]:!-translate-y-6',
203
- '[&:not(:placeholder-shown)~label]:!scale-75',
204
- '[&:not(:placeholder-shown)~label]:!-translate-y-4',
205
- '[&:not(:placeholder-shown)~label]:!-translate-y-6',
206
-
207
- // Direct css vars that might be used
208
- '--un-scale-x',
209
- '--un-scale-y',
210
- '--un-translate-y',
211
-
212
- // All peer selectors from the list
213
- ...peerSelectorClasses,
214
- ],
215
- // Custom extractors to ensure peer classes are preserved
216
- extractors: [
217
- {
218
- name: 'vue-astro',
219
- extract({ code }) {
220
- const result = new Set();
221
-
222
- // Extract all peer selectors in the code
223
- const peerRegex = /peer-([a-zA-Z0-9-]+:[a-zA-Z0-9-]+)/g;
224
- const peerMatches = code.match(peerRegex);
225
- if (peerMatches) {
226
- peerMatches.forEach(match => result.add(match));
227
- }
228
-
229
- // Add all known peer selectors
230
- peerSelectorClasses.forEach(cls => result.add(cls));
231
-
232
- return result;
233
- },
234
- },
235
- ],
236
- // IMPORTANT: All of these presets are required for proper functioning
237
- presets: [
238
- presetUno(),
239
- presetAttributify(),
240
- presetIcons({
241
- scale: 1.2,
242
- warn: true,
243
- prefix: 'i-',
244
- extraProperties: {
245
- 'display': 'inline-block',
246
- 'vertical-align': 'middle',
247
- },
248
- }),
249
- presetTypography(),
250
- presetWebFonts({
251
- provider: 'none',
252
- fonts: theme.fontFamily
253
- })
254
- ],
255
- ...customConfig
256
- });
257
- }
258
-
259
- export * from './theme';
1
+ // uno-config/index.ts
2
+ import type { UserConfig, UserShortcuts } from 'unocss'
3
+ import { defineConfig } from 'unocss';
4
+
5
+ // REQUIRED IMPORTS: These imports are used in the createSdsConfig function
6
+ // Removing or commenting out any of these will break the UnoCSS configuration
7
+ import {
8
+ transformerDirectives, // Used in transformers array
9
+ transformerVariantGroup, // Used in transformers array
10
+ presetAttributify, // Used in presets array
11
+ presetIcons, // Used in presets array with specific configuration
12
+ } from 'unocss';
13
+
14
+ // These presets must be imported explicitly to be used in the configuration
15
+ import presetUno from '@unocss/preset-uno'; // Primary UnoCSS preset
16
+ import presetTypography from '@unocss/preset-typography'; // Typography preset
17
+ import presetWebFonts from '@unocss/preset-web-fonts'; // Web fonts preset
18
+
19
+ import { shortcuts } from './theme/shortcuts';
20
+ import { theme } from './theme';
21
+
22
+ // List of peer selectors we want to preserve during build
23
+ const peerSelectorClasses = [
24
+ // Focus state classes
25
+ 'peer-focus:text-blue-light',
26
+ 'peer-focus:dark:text-blue-lightest',
27
+ 'peer-focus:scale-75',
28
+ 'peer-focus:-translate-y-6',
29
+ 'peer-focus:-translate-y-4',
30
+ 'peer-focus:start-0',
31
+
32
+ // Placeholder shown classes
33
+ 'peer-placeholder-shown:scale-100',
34
+ 'peer-placeholder-shown:translate-y-0',
35
+
36
+ // Not placeholder shown classes
37
+ 'peer-not-placeholder-shown:scale-75',
38
+ 'peer-not-placeholder-shown:-translate-y-6',
39
+ 'peer-not-placeholder-shown:-translate-y-4',
40
+ ];
41
+
42
+ interface CustomConfig extends Partial<UserConfig> {
43
+ shortcuts?: UserShortcuts;
44
+ theme?: Partial<typeof theme>;
45
+ }
46
+
47
+ /**
48
+ * Creates a UnoCSS configuration with Spoko Design System defaults
49
+ *
50
+ * IMPORTANT: This function requires all the imported UnoCSS presets and transformers.
51
+ * Do not remove any imports at the top of this file as they are necessary for
52
+ * proper functioning of the UnoCSS configuration.
53
+ *
54
+ * @param customConfig - Optional custom configuration to merge with defaults
55
+ * @returns Complete UnoCSS configuration
56
+ */
57
+ export function createSdsConfig(customConfig: CustomConfig = {}) {
58
+ return defineConfig({
59
+ // Transform directives and variant groups
60
+ transformers: [
61
+ transformerDirectives(),
62
+ transformerVariantGroup(),
63
+ ],
64
+ shortcuts: {
65
+ ...shortcuts,
66
+ ...(customConfig.shortcuts || {})
67
+ },
68
+ theme: {
69
+ ...theme,
70
+ ...(customConfig.theme || {})
71
+ },
72
+ // Enhanced variants to better handle peer selectors
73
+ variants: [
74
+ // Add specific peer variant support
75
+ (matcher) => {
76
+ if (!matcher.startsWith('peer-'))
77
+ return matcher;
78
+
79
+ const peerVariant = matcher.slice(5);
80
+ const selectorMap = {
81
+ 'focus:': (s) => `.peer:focus ~ ${s}`,
82
+ 'hover:': (s) => `.peer:hover ~ ${s}`,
83
+ 'placeholder-shown:': (s) => `.peer:placeholder-shown ~ ${s}`,
84
+ 'not-placeholder-shown:': (s) => `.peer:not(:placeholder-shown) ~ ${s}`,
85
+ };
86
+
87
+ // Check for nested variants like 'peer-focus:text-blue'
88
+ for (const [key, selectorFn] of Object.entries(selectorMap)) {
89
+ if (peerVariant.startsWith(key)) {
90
+ return {
91
+ matcher: peerVariant.slice(key.length),
92
+ selector: selectorFn,
93
+ };
94
+ }
95
+ }
96
+
97
+ // Default peer handling
98
+ return {
99
+ matcher: peerVariant,
100
+ selector: (s) => `.peer:${peerVariant} ~ ${s}`,
101
+ };
102
+ },
103
+ ],
104
+ // Comprehensive safelist with all needed classes
105
+ safelist: [
106
+ // Existing safelist items
107
+ 'md:grid-cols-product',
108
+
109
+ 'breadcrumb-link-disabled',
110
+ 'breadcrumb-link',
111
+ 'breadcrumb-item',
112
+ 'features-list-caption',
113
+ 'features-list-ul',
114
+ 'features-list-item',
115
+
116
+ 'category-link-base',
117
+ 'category-link-active',
118
+
119
+ // Base peer class
120
+ 'peer',
121
+
122
+ // All input component classes from shortcuts
123
+ 'input-base',
124
+ 'input-label-base',
125
+ 'input-placeholder',
126
+ 'input-standard',
127
+ 'input-filled',
128
+ 'input-wrapper-standard',
129
+ 'input-wrapper-filled',
130
+ 'input-label-standard',
131
+ 'input-label-filled',
132
+
133
+ // Label state shortcuts
134
+ 'input-label-focus-color',
135
+ 'input-label-focus-scale',
136
+ 'input-label-focus-translate-standard',
137
+ 'input-label-focus-translate-filled',
138
+ 'input-label-placeholder',
139
+ 'input-label-filled-standard',
140
+ 'input-label-filled-filled',
141
+ 'input-label-standard-state',
142
+ 'input-label-filled-state',
143
+
144
+ // Input types
145
+ 'input-textarea',
146
+ 'resize-none',
147
+
148
+ // Size variants
149
+ 'input-sm',
150
+ 'input-md',
151
+ 'input-lg',
152
+ 'input-label-sm',
153
+ 'input-label-md',
154
+ 'input-label-lg',
155
+
156
+ // Status classes
157
+ 'input-error',
158
+ 'input-label-error',
159
+ 'input-error-message',
160
+ 'input-success',
161
+ 'input-label-success',
162
+ 'input-success-message',
163
+
164
+ // Transform related classes
165
+ 'origin-top-left',
166
+ 'transform-gpu',
167
+ 'translate-y-0',
168
+ '-translate-y-4',
169
+ '-translate-y-6',
170
+ 'scale-75',
171
+ 'scale-100',
172
+
173
+ // Every possible arbitrary selector used
174
+ '[&:focus~label]:scale-75',
175
+ '[&:focus~label]:-translate-y-4',
176
+ '[&:focus~label]:-translate-y-6',
177
+ '[&:focus~label]:text-blue-light',
178
+ '[&:focus~label]:dark:text-blue-lightest',
179
+ '[&:focus~label]:start-0',
180
+ '[&:placeholder-shown~label]:scale-100',
181
+ '[&:placeholder-shown~label]:translate-y-0',
182
+ '[&:not(:placeholder-shown)~label]:scale-75',
183
+ '[&:not(:placeholder-shown)~label]:-translate-y-4',
184
+ '[&:not(:placeholder-shown)~label]:-translate-y-6',
185
+
186
+ // Combinations of selectors
187
+ 'peer:focus:text-blue-light',
188
+ 'peer:focus:dark:text-blue-lightest',
189
+ 'peer:focus:scale-75',
190
+ 'peer:focus:-translate-y-4',
191
+ 'peer:focus:-translate-y-6',
192
+ 'peer:focus:start-0',
193
+ 'peer-placeholder-shown:scale-100',
194
+ 'peer-placeholder-shown:translate-y-0',
195
+ 'peer-not-placeholder-shown:scale-75',
196
+ 'peer-not-placeholder-shown:-translate-y-4',
197
+ 'peer-not-placeholder-shown:-translate-y-6',
198
+
199
+ // With !important for good measure
200
+ '[&:focus~label]:!scale-75',
201
+ '[&:focus~label]:!-translate-y-4',
202
+ '[&:focus~label]:!-translate-y-6',
203
+ '[&:not(:placeholder-shown)~label]:!scale-75',
204
+ '[&:not(:placeholder-shown)~label]:!-translate-y-4',
205
+ '[&:not(:placeholder-shown)~label]:!-translate-y-6',
206
+
207
+ // Direct css vars that might be used
208
+ '--un-scale-x',
209
+ '--un-scale-y',
210
+ '--un-translate-y',
211
+
212
+ // All peer selectors from the list
213
+ ...peerSelectorClasses,
214
+ ],
215
+ // Custom extractors to ensure peer classes are preserved
216
+ extractors: [
217
+ {
218
+ name: 'vue-astro',
219
+ extract({ code }) {
220
+ const result = new Set();
221
+
222
+ // Extract all peer selectors in the code
223
+ const peerRegex = /peer-([a-zA-Z0-9-]+:[a-zA-Z0-9-]+)/g;
224
+ const peerMatches = code.match(peerRegex);
225
+ if (peerMatches) {
226
+ peerMatches.forEach(match => result.add(match));
227
+ }
228
+
229
+ // Add all known peer selectors
230
+ peerSelectorClasses.forEach(cls => result.add(cls));
231
+
232
+ return result;
233
+ },
234
+ },
235
+ ],
236
+ // IMPORTANT: All of these presets are required for proper functioning
237
+ presets: [
238
+ presetUno(),
239
+ presetAttributify(),
240
+ presetIcons({
241
+ scale: 1.2,
242
+ warn: true,
243
+ prefix: 'i-',
244
+ extraProperties: {
245
+ 'display': 'inline-block',
246
+ 'vertical-align': 'middle',
247
+ },
248
+ }),
249
+ presetTypography(),
250
+ presetWebFonts({
251
+ provider: 'none',
252
+ fonts: theme.fontFamily
253
+ })
254
+ ],
255
+ ...customConfig
256
+ });
257
+ }
258
+
259
+ export * from './theme';
260
260
  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;