spoko-design-system 0.6.6 → 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.
- package/.astro/settings.json +4 -4
- package/.github/dependabot.yml +11 -11
- package/.github/todo.yml +3 -3
- package/.github/workflows/deploy.yml +39 -39
- package/.stackblitzrc +5 -5
- package/.vscode/extensions.json +5 -5
- package/.vscode/launch.json +11 -11
- package/.vscode/settings.json +5 -5
- package/LICENSE +21 -21
- package/README.md +114 -114
- package/astro-i18next.config.mjs +17 -17
- package/astro-i18next.config.ts +10 -10
- package/astro.config.mjs +86 -86
- package/dev-dist/sw.js +91 -91
- package/dev-dist/workbox-c676b6d3.js +3391 -3391
- package/icon.config.ts +290 -289
- package/index.ts +66 -66
- package/package.json +5 -5
- package/public/fonts/lg.svg +53 -53
- package/public/fonts/vwhead-bold-demo.html +549 -549
- package/public/fonts/vwhead-regular-demo.html +549 -549
- package/public/fonts/vwtext-bold-demo.html +549 -549
- package/public/fonts/vwtext-regular-demo.html +549 -549
- package/public/github.svg +3 -3
- package/public/grid_dot.svg +4 -4
- package/public/linkedin.svg +44 -44
- package/public/locales/en/translation.json +8 -8
- package/public/locales/pl/translation.json +8 -8
- package/public/make-scrollable-code-focusable.js +3 -3
- package/public/pagefind.yml +3 -3
- package/public/polo.blue.svg +29 -29
- package/public/spoko.space.svg +71 -71
- package/public/twitter.svg +46 -46
- package/renovate.json +6 -6
- package/sandbox.config.json +11 -11
- package/src/MyComponent.astro +8 -8
- package/src/components/Badge.vue +19 -19
- package/src/components/Badges.vue +21 -21
- package/src/components/Breadcrumbs.vue +107 -107
- package/src/components/Button.vue +101 -101
- package/src/components/ButtonCopy.astro +183 -183
- package/src/components/ButtonCopy.vue +36 -36
- package/src/components/Card.astro +27 -27
- package/src/components/Carousel.astro +26 -26
- package/src/components/Category/CategoriesCarousel.astro +101 -101
- package/src/components/Category/CategoryDetails.astro +169 -169
- package/src/components/Category/CategoryLink.vue +28 -28
- package/src/components/Category/CategorySidebarToggler.vue +9 -9
- package/src/components/Category/CategoryTile.astro +38 -38
- package/src/components/Category/CategoryViewToggler.astro +89 -89
- package/src/components/Category/SubCategoryLink.vue +19 -19
- package/src/components/Copyright.astro +12 -12
- package/src/components/Date.astro +7 -7
- package/src/components/Faq.astro +33 -33
- package/src/components/FaqItem.astro +80 -80
- package/src/components/FeaturesList.vue +41 -41
- package/src/components/FuckRussia.vue +62 -62
- package/src/components/HandDrive.astro +29 -29
- package/src/components/Header/Header.astro +210 -210
- package/src/components/Header/SkipToContent.astro +1 -1
- package/src/components/Headline.vue +48 -48
- package/src/components/Image.astro +30 -30
- package/src/components/Jumbotron/index.astro +4 -1
- package/src/components/Jumbotron/variants/Post.astro +3 -1
- package/src/components/Jumbotron/variants/PostSplit.astro +3 -1
- package/src/components/LeftSidebar.astro +53 -53
- package/src/components/MainColors.vue +22 -22
- package/src/components/MainInput.vue +15 -15
- package/src/components/Modal.astro +27 -27
- package/src/components/PageContent.astro +5 -5
- package/src/components/PartNumber.vue +27 -27
- package/src/components/Post/PostCategories.astro +41 -37
- package/src/components/Post/PostCategories.vue +39 -39
- package/src/components/PostHeader.astro +103 -103
- package/src/components/PrCode.vue +141 -141
- package/src/components/Product/ProductButton.vue +18 -18
- package/src/components/Product/ProductCarousel.astro +35 -35
- package/src/components/Product/ProductCodes.vue +174 -174
- package/src/components/Product/ProductEngineType.vue +42 -42
- package/src/components/Product/ProductImage.astro +40 -40
- package/src/components/Product/ProductLink.astro +101 -101
- package/src/components/Product/ProductLink.vue +59 -59
- package/src/components/Product/ProductLinkInfo.astro +37 -37
- package/src/components/Product/ProductNumber.astro +60 -60
- package/src/components/ProductCarousel.astro +38 -38
- package/src/components/ProductCodes.vue +39 -39
- package/src/components/ProductDetailName.vue +52 -52
- package/src/components/ProductDetailsList.vue +65 -65
- package/src/components/ProductTile.astro +48 -48
- package/src/components/Quote.vue +23 -23
- package/src/components/ReloadPrompt.astro +50 -50
- package/src/components/SlimBanner.vue +72 -72
- package/src/components/Table.vue +32 -32
- package/src/components/TableOfContents.astro +15 -15
- package/src/components/Translations.vue +23 -23
- package/src/components/flags/FlagPL.vue +3 -3
- package/src/components/flags/FlagUA.vue +2 -2
- package/src/components/layout/Container.astro +7 -7
- package/src/components/layout/Header.astro +80 -80
- package/src/config.ts +56 -56
- package/src/design.config.ts +98 -98
- package/src/env.d.ts +6 -6
- package/src/layouts/Layout.astro +61 -61
- package/src/layouts/MainLayout.astro +81 -81
- package/src/layouts/partials/FooterCommon.astro +4 -4
- package/src/layouts/partials/HeadCommon.astro +44 -44
- package/src/layouts/partials/HeadSEO.astro +41 -41
- package/src/pages/components/badges.mdx +57 -57
- package/src/pages/components/breadcrumbs.mdx +139 -139
- package/src/pages/components/buttons.mdx +360 -360
- package/src/pages/components/card.mdx +294 -294
- package/src/pages/components/carousel.mdx +62 -62
- package/src/pages/components/copyright.mdx +42 -42
- package/src/pages/components/details-list.mdx +115 -115
- package/src/pages/components/features-list.mdx +37 -37
- package/src/pages/components/flags.mdx +49 -49
- package/src/pages/components/fuck-russia.mdx +39 -39
- package/src/pages/components/hand-drive.mdx +38 -38
- package/src/pages/components/headline.mdx +152 -152
- package/src/pages/components/icons.astro +135 -135
- package/src/pages/components/image.mdx +513 -513
- package/src/pages/components/input.mdx +367 -367
- package/src/pages/components/jumbotron.mdx +359 -359
- package/src/pages/components/modal.mdx +64 -64
- package/src/pages/components/post-header.mdx +64 -60
- package/src/pages/components/pr-code.mdx +65 -65
- package/src/pages/components/product-number.mdx +58 -58
- package/src/pages/components/product-tile.mdx +51 -51
- package/src/pages/components/quote.mdx +33 -33
- package/src/pages/components/slimbanner.mdx +35 -35
- package/src/pages/components/table.mdx +108 -108
- package/src/pages/core/colors.mdx +10 -10
- package/src/pages/core/grid.mdx +89 -89
- package/src/pages/core/introduction.mdx +77 -77
- package/src/pages/core/shadows.astro +20 -20
- package/src/pages/core/typography.astro +49 -49
- package/src/pages/index.astro +133 -133
- package/src/pages/patterns/introduction.mdx +60 -60
- package/src/pwa.ts +12 -12
- package/src/styles/_variables.scss +70 -70
- package/src/styles/base/base.css +184 -184
- package/src/styles/base/grid.css +92 -92
- package/src/styles/base/typography.css +70 -70
- package/src/styles/content.css +73 -73
- package/src/styles/main.css +7 -7
- package/src/types/Product.ts +31 -31
- package/src/types/astro.d.ts +3 -3
- package/src/utils/product/getPriceFormatted.ts +15 -15
- package/src/utils/product/getProductChecklist.ts +17 -17
- package/src/utils/product/useFormatProductNumber.ts +41 -41
- package/src/utils/seo/getShorterDescription.ts +14 -14
- package/src/utils/text/formatDate.ts +5 -5
- package/src/utils/text/formatLocaleNumber.ts +6 -6
- package/src/utils/text/formatPad.ts +12 -12
- package/src/utils/text/getNumberFormatted.ts +33 -33
- package/src/utils/text/getTranslatedLink.ts +5 -5
- package/src/utils/text.ts +19 -19
- package/tailwind.config.cjs +8 -8
- package/tsconfig.json +28 -28
- package/uno-config/index.ts +232 -232
- package/uno-config/theme/breakpoints.ts +9 -9
- package/uno-config/theme/colors.ts +64 -64
- package/uno-config/theme/dimensions.ts +17 -17
- package/uno-config/theme/effects.ts +14 -14
- package/uno-config/theme/grid.ts +10 -10
- package/uno-config/theme/index.ts +28 -28
- package/uno-config/theme/shortcuts/buttons.ts +53 -53
- package/uno-config/theme/shortcuts/components.ts +92 -92
- package/uno-config/theme/shortcuts/index.ts +20 -20
- package/uno-config/theme/shortcuts/layout.ts +64 -64
- package/uno-config/theme/typography.ts +29 -29
- package/uno.config.ts +2 -2
package/uno-config/index.ts
CHANGED
|
@@ -1,233 +1,233 @@
|
|
|
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
|
-
// List of peer selectors we want to preserve during build
|
|
18
|
-
const peerSelectorClasses = [
|
|
19
|
-
// Focus state classes
|
|
20
|
-
'peer-focus:text-blue-light',
|
|
21
|
-
'peer-focus:dark:text-blue-lightest',
|
|
22
|
-
'peer-focus:scale-75',
|
|
23
|
-
'peer-focus:-translate-y-6',
|
|
24
|
-
'peer-focus:-translate-y-4',
|
|
25
|
-
'peer-focus:start-0',
|
|
26
|
-
|
|
27
|
-
// Placeholder shown classes
|
|
28
|
-
'peer-placeholder-shown:scale-100',
|
|
29
|
-
'peer-placeholder-shown:translate-y-0',
|
|
30
|
-
|
|
31
|
-
// Not placeholder shown classes
|
|
32
|
-
'peer-not-placeholder-shown:scale-75',
|
|
33
|
-
'peer-not-placeholder-shown:-translate-y-6',
|
|
34
|
-
'peer-not-placeholder-shown:-translate-y-4',
|
|
35
|
-
];
|
|
36
|
-
|
|
37
|
-
interface CustomConfig extends Partial<UserConfig> {
|
|
38
|
-
shortcuts?: UserShortcuts;
|
|
39
|
-
theme?: Partial<typeof theme>;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export function createSdsConfig(customConfig: CustomConfig = {}) {
|
|
43
|
-
return defineConfig({
|
|
44
|
-
transformers: [
|
|
45
|
-
transformerDirectives(),
|
|
46
|
-
transformerVariantGroup(),
|
|
47
|
-
],
|
|
48
|
-
shortcuts: {
|
|
49
|
-
...shortcuts,
|
|
50
|
-
...(customConfig.shortcuts || {})
|
|
51
|
-
},
|
|
52
|
-
theme: {
|
|
53
|
-
...theme,
|
|
54
|
-
...(customConfig.theme || {})
|
|
55
|
-
},
|
|
56
|
-
// Enhanced variants to better handle peer selectors
|
|
57
|
-
variants: [
|
|
58
|
-
// Add specific peer variant support
|
|
59
|
-
(matcher) => {
|
|
60
|
-
if (!matcher.startsWith('peer-'))
|
|
61
|
-
return matcher;
|
|
62
|
-
|
|
63
|
-
const peerVariant = matcher.slice(5);
|
|
64
|
-
const selectorMap = {
|
|
65
|
-
'focus:': (s) => `.peer:focus ~ ${s}`,
|
|
66
|
-
'hover:': (s) => `.peer:hover ~ ${s}`,
|
|
67
|
-
'placeholder-shown:': (s) => `.peer:placeholder-shown ~ ${s}`,
|
|
68
|
-
'not-placeholder-shown:': (s) => `.peer:not(:placeholder-shown) ~ ${s}`,
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
// Check for nested variants like 'peer-focus:text-blue'
|
|
72
|
-
for (const [key, selectorFn] of Object.entries(selectorMap)) {
|
|
73
|
-
if (peerVariant.startsWith(key)) {
|
|
74
|
-
return {
|
|
75
|
-
matcher: peerVariant.slice(key.length),
|
|
76
|
-
selector: selectorFn,
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// Default peer handling
|
|
82
|
-
return {
|
|
83
|
-
matcher: peerVariant,
|
|
84
|
-
selector: (s) => `.peer:${peerVariant} ~ ${s}`,
|
|
85
|
-
};
|
|
86
|
-
},
|
|
87
|
-
],
|
|
88
|
-
// Comprehensive safelist with all needed classes
|
|
89
|
-
safelist: [
|
|
90
|
-
// Existing safelist items
|
|
91
|
-
'md:grid-cols-product',
|
|
92
|
-
|
|
93
|
-
// Base peer class
|
|
94
|
-
'peer',
|
|
95
|
-
|
|
96
|
-
// All input component classes from shortcuts
|
|
97
|
-
'input-base',
|
|
98
|
-
'input-label-base',
|
|
99
|
-
'input-placeholder',
|
|
100
|
-
'input-standard',
|
|
101
|
-
'input-filled',
|
|
102
|
-
'input-wrapper-standard',
|
|
103
|
-
'input-wrapper-filled',
|
|
104
|
-
'input-label-standard',
|
|
105
|
-
'input-label-filled',
|
|
106
|
-
|
|
107
|
-
// Label state shortcuts
|
|
108
|
-
'input-label-focus-color',
|
|
109
|
-
'input-label-focus-scale',
|
|
110
|
-
'input-label-focus-translate-standard',
|
|
111
|
-
'input-label-focus-translate-filled',
|
|
112
|
-
'input-label-placeholder',
|
|
113
|
-
'input-label-filled-standard',
|
|
114
|
-
'input-label-filled-filled',
|
|
115
|
-
'input-label-standard-state',
|
|
116
|
-
'input-label-filled-state',
|
|
117
|
-
|
|
118
|
-
// Input types
|
|
119
|
-
'input-textarea',
|
|
120
|
-
'resize-none',
|
|
121
|
-
|
|
122
|
-
// Size variants
|
|
123
|
-
'input-sm',
|
|
124
|
-
'input-md',
|
|
125
|
-
'input-lg',
|
|
126
|
-
'input-label-sm',
|
|
127
|
-
'input-label-md',
|
|
128
|
-
'input-label-lg',
|
|
129
|
-
|
|
130
|
-
// Status classes
|
|
131
|
-
'input-error',
|
|
132
|
-
'input-label-error',
|
|
133
|
-
'input-error-message',
|
|
134
|
-
'input-success',
|
|
135
|
-
'input-label-success',
|
|
136
|
-
'input-success-message',
|
|
137
|
-
|
|
138
|
-
// Transform related classes
|
|
139
|
-
'origin-top-left',
|
|
140
|
-
'transform-gpu',
|
|
141
|
-
'translate-y-0',
|
|
142
|
-
'-translate-y-4',
|
|
143
|
-
'-translate-y-6',
|
|
144
|
-
'scale-75',
|
|
145
|
-
'scale-100',
|
|
146
|
-
|
|
147
|
-
// Every possible arbitrary selector used
|
|
148
|
-
'[&:focus~label]:scale-75',
|
|
149
|
-
'[&:focus~label]:-translate-y-4',
|
|
150
|
-
'[&:focus~label]:-translate-y-6',
|
|
151
|
-
'[&:focus~label]:text-blue-light',
|
|
152
|
-
'[&:focus~label]:dark:text-blue-lightest',
|
|
153
|
-
'[&:focus~label]:start-0',
|
|
154
|
-
'[&:placeholder-shown~label]:scale-100',
|
|
155
|
-
'[&:placeholder-shown~label]:translate-y-0',
|
|
156
|
-
'[&:not(:placeholder-shown)~label]:scale-75',
|
|
157
|
-
'[&:not(:placeholder-shown)~label]:-translate-y-4',
|
|
158
|
-
'[&:not(:placeholder-shown)~label]:-translate-y-6',
|
|
159
|
-
|
|
160
|
-
// Combinations of selectors
|
|
161
|
-
'peer:focus:text-blue-light',
|
|
162
|
-
'peer:focus:dark:text-blue-lightest',
|
|
163
|
-
'peer:focus:scale-75',
|
|
164
|
-
'peer:focus:-translate-y-4',
|
|
165
|
-
'peer:focus:-translate-y-6',
|
|
166
|
-
'peer:focus:start-0',
|
|
167
|
-
'peer-placeholder-shown:scale-100',
|
|
168
|
-
'peer-placeholder-shown:translate-y-0',
|
|
169
|
-
'peer-not-placeholder-shown:scale-75',
|
|
170
|
-
'peer-not-placeholder-shown:-translate-y-4',
|
|
171
|
-
'peer-not-placeholder-shown:-translate-y-6',
|
|
172
|
-
|
|
173
|
-
// With !important for good measure
|
|
174
|
-
'[&:focus~label]:!scale-75',
|
|
175
|
-
'[&:focus~label]:!-translate-y-4',
|
|
176
|
-
'[&:focus~label]:!-translate-y-6',
|
|
177
|
-
'[&:not(:placeholder-shown)~label]:!scale-75',
|
|
178
|
-
'[&:not(:placeholder-shown)~label]:!-translate-y-4',
|
|
179
|
-
'[&:not(:placeholder-shown)~label]:!-translate-y-6',
|
|
180
|
-
|
|
181
|
-
// Direct css vars that might be used
|
|
182
|
-
'--un-scale-x',
|
|
183
|
-
'--un-scale-y',
|
|
184
|
-
'--un-translate-y',
|
|
185
|
-
|
|
186
|
-
// All peer selectors from the list
|
|
187
|
-
...peerSelectorClasses,
|
|
188
|
-
],
|
|
189
|
-
// Custom extractors to ensure peer classes are preserved
|
|
190
|
-
extractors: [
|
|
191
|
-
{
|
|
192
|
-
name: 'vue-astro',
|
|
193
|
-
extract({ code }) {
|
|
194
|
-
const result = new Set();
|
|
195
|
-
|
|
196
|
-
// Extract all peer selectors in the code
|
|
197
|
-
const peerRegex = /peer-([a-zA-Z0-9-]+:[a-zA-Z0-9-]+)/g;
|
|
198
|
-
const peerMatches = code.match(peerRegex);
|
|
199
|
-
if (peerMatches) {
|
|
200
|
-
peerMatches.forEach(match => result.add(match));
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
// Add all known peer selectors
|
|
204
|
-
peerSelectorClasses.forEach(cls => result.add(cls));
|
|
205
|
-
|
|
206
|
-
return result;
|
|
207
|
-
},
|
|
208
|
-
},
|
|
209
|
-
],
|
|
210
|
-
presets: [
|
|
211
|
-
presetUno(),
|
|
212
|
-
presetAttributify(),
|
|
213
|
-
presetIcons({
|
|
214
|
-
scale: 1.2,
|
|
215
|
-
warn: true,
|
|
216
|
-
prefix: 'i-',
|
|
217
|
-
extraProperties: {
|
|
218
|
-
'display': 'inline-block',
|
|
219
|
-
'vertical-align': 'middle',
|
|
220
|
-
},
|
|
221
|
-
}),
|
|
222
|
-
presetTypography(),
|
|
223
|
-
presetWebFonts({
|
|
224
|
-
provider: 'none',
|
|
225
|
-
fonts: theme.fontFamily
|
|
226
|
-
})
|
|
227
|
-
],
|
|
228
|
-
...customConfig
|
|
229
|
-
});
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
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
|
+
// List of peer selectors we want to preserve during build
|
|
18
|
+
const peerSelectorClasses = [
|
|
19
|
+
// Focus state classes
|
|
20
|
+
'peer-focus:text-blue-light',
|
|
21
|
+
'peer-focus:dark:text-blue-lightest',
|
|
22
|
+
'peer-focus:scale-75',
|
|
23
|
+
'peer-focus:-translate-y-6',
|
|
24
|
+
'peer-focus:-translate-y-4',
|
|
25
|
+
'peer-focus:start-0',
|
|
26
|
+
|
|
27
|
+
// Placeholder shown classes
|
|
28
|
+
'peer-placeholder-shown:scale-100',
|
|
29
|
+
'peer-placeholder-shown:translate-y-0',
|
|
30
|
+
|
|
31
|
+
// Not placeholder shown classes
|
|
32
|
+
'peer-not-placeholder-shown:scale-75',
|
|
33
|
+
'peer-not-placeholder-shown:-translate-y-6',
|
|
34
|
+
'peer-not-placeholder-shown:-translate-y-4',
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
interface CustomConfig extends Partial<UserConfig> {
|
|
38
|
+
shortcuts?: UserShortcuts;
|
|
39
|
+
theme?: Partial<typeof theme>;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function createSdsConfig(customConfig: CustomConfig = {}) {
|
|
43
|
+
return defineConfig({
|
|
44
|
+
transformers: [
|
|
45
|
+
transformerDirectives(),
|
|
46
|
+
transformerVariantGroup(),
|
|
47
|
+
],
|
|
48
|
+
shortcuts: {
|
|
49
|
+
...shortcuts,
|
|
50
|
+
...(customConfig.shortcuts || {})
|
|
51
|
+
},
|
|
52
|
+
theme: {
|
|
53
|
+
...theme,
|
|
54
|
+
...(customConfig.theme || {})
|
|
55
|
+
},
|
|
56
|
+
// Enhanced variants to better handle peer selectors
|
|
57
|
+
variants: [
|
|
58
|
+
// Add specific peer variant support
|
|
59
|
+
(matcher) => {
|
|
60
|
+
if (!matcher.startsWith('peer-'))
|
|
61
|
+
return matcher;
|
|
62
|
+
|
|
63
|
+
const peerVariant = matcher.slice(5);
|
|
64
|
+
const selectorMap = {
|
|
65
|
+
'focus:': (s) => `.peer:focus ~ ${s}`,
|
|
66
|
+
'hover:': (s) => `.peer:hover ~ ${s}`,
|
|
67
|
+
'placeholder-shown:': (s) => `.peer:placeholder-shown ~ ${s}`,
|
|
68
|
+
'not-placeholder-shown:': (s) => `.peer:not(:placeholder-shown) ~ ${s}`,
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
// Check for nested variants like 'peer-focus:text-blue'
|
|
72
|
+
for (const [key, selectorFn] of Object.entries(selectorMap)) {
|
|
73
|
+
if (peerVariant.startsWith(key)) {
|
|
74
|
+
return {
|
|
75
|
+
matcher: peerVariant.slice(key.length),
|
|
76
|
+
selector: selectorFn,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Default peer handling
|
|
82
|
+
return {
|
|
83
|
+
matcher: peerVariant,
|
|
84
|
+
selector: (s) => `.peer:${peerVariant} ~ ${s}`,
|
|
85
|
+
};
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
// Comprehensive safelist with all needed classes
|
|
89
|
+
safelist: [
|
|
90
|
+
// Existing safelist items
|
|
91
|
+
'md:grid-cols-product',
|
|
92
|
+
|
|
93
|
+
// Base peer class
|
|
94
|
+
'peer',
|
|
95
|
+
|
|
96
|
+
// All input component classes from shortcuts
|
|
97
|
+
'input-base',
|
|
98
|
+
'input-label-base',
|
|
99
|
+
'input-placeholder',
|
|
100
|
+
'input-standard',
|
|
101
|
+
'input-filled',
|
|
102
|
+
'input-wrapper-standard',
|
|
103
|
+
'input-wrapper-filled',
|
|
104
|
+
'input-label-standard',
|
|
105
|
+
'input-label-filled',
|
|
106
|
+
|
|
107
|
+
// Label state shortcuts
|
|
108
|
+
'input-label-focus-color',
|
|
109
|
+
'input-label-focus-scale',
|
|
110
|
+
'input-label-focus-translate-standard',
|
|
111
|
+
'input-label-focus-translate-filled',
|
|
112
|
+
'input-label-placeholder',
|
|
113
|
+
'input-label-filled-standard',
|
|
114
|
+
'input-label-filled-filled',
|
|
115
|
+
'input-label-standard-state',
|
|
116
|
+
'input-label-filled-state',
|
|
117
|
+
|
|
118
|
+
// Input types
|
|
119
|
+
'input-textarea',
|
|
120
|
+
'resize-none',
|
|
121
|
+
|
|
122
|
+
// Size variants
|
|
123
|
+
'input-sm',
|
|
124
|
+
'input-md',
|
|
125
|
+
'input-lg',
|
|
126
|
+
'input-label-sm',
|
|
127
|
+
'input-label-md',
|
|
128
|
+
'input-label-lg',
|
|
129
|
+
|
|
130
|
+
// Status classes
|
|
131
|
+
'input-error',
|
|
132
|
+
'input-label-error',
|
|
133
|
+
'input-error-message',
|
|
134
|
+
'input-success',
|
|
135
|
+
'input-label-success',
|
|
136
|
+
'input-success-message',
|
|
137
|
+
|
|
138
|
+
// Transform related classes
|
|
139
|
+
'origin-top-left',
|
|
140
|
+
'transform-gpu',
|
|
141
|
+
'translate-y-0',
|
|
142
|
+
'-translate-y-4',
|
|
143
|
+
'-translate-y-6',
|
|
144
|
+
'scale-75',
|
|
145
|
+
'scale-100',
|
|
146
|
+
|
|
147
|
+
// Every possible arbitrary selector used
|
|
148
|
+
'[&:focus~label]:scale-75',
|
|
149
|
+
'[&:focus~label]:-translate-y-4',
|
|
150
|
+
'[&:focus~label]:-translate-y-6',
|
|
151
|
+
'[&:focus~label]:text-blue-light',
|
|
152
|
+
'[&:focus~label]:dark:text-blue-lightest',
|
|
153
|
+
'[&:focus~label]:start-0',
|
|
154
|
+
'[&:placeholder-shown~label]:scale-100',
|
|
155
|
+
'[&:placeholder-shown~label]:translate-y-0',
|
|
156
|
+
'[&:not(:placeholder-shown)~label]:scale-75',
|
|
157
|
+
'[&:not(:placeholder-shown)~label]:-translate-y-4',
|
|
158
|
+
'[&:not(:placeholder-shown)~label]:-translate-y-6',
|
|
159
|
+
|
|
160
|
+
// Combinations of selectors
|
|
161
|
+
'peer:focus:text-blue-light',
|
|
162
|
+
'peer:focus:dark:text-blue-lightest',
|
|
163
|
+
'peer:focus:scale-75',
|
|
164
|
+
'peer:focus:-translate-y-4',
|
|
165
|
+
'peer:focus:-translate-y-6',
|
|
166
|
+
'peer:focus:start-0',
|
|
167
|
+
'peer-placeholder-shown:scale-100',
|
|
168
|
+
'peer-placeholder-shown:translate-y-0',
|
|
169
|
+
'peer-not-placeholder-shown:scale-75',
|
|
170
|
+
'peer-not-placeholder-shown:-translate-y-4',
|
|
171
|
+
'peer-not-placeholder-shown:-translate-y-6',
|
|
172
|
+
|
|
173
|
+
// With !important for good measure
|
|
174
|
+
'[&:focus~label]:!scale-75',
|
|
175
|
+
'[&:focus~label]:!-translate-y-4',
|
|
176
|
+
'[&:focus~label]:!-translate-y-6',
|
|
177
|
+
'[&:not(:placeholder-shown)~label]:!scale-75',
|
|
178
|
+
'[&:not(:placeholder-shown)~label]:!-translate-y-4',
|
|
179
|
+
'[&:not(:placeholder-shown)~label]:!-translate-y-6',
|
|
180
|
+
|
|
181
|
+
// Direct css vars that might be used
|
|
182
|
+
'--un-scale-x',
|
|
183
|
+
'--un-scale-y',
|
|
184
|
+
'--un-translate-y',
|
|
185
|
+
|
|
186
|
+
// All peer selectors from the list
|
|
187
|
+
...peerSelectorClasses,
|
|
188
|
+
],
|
|
189
|
+
// Custom extractors to ensure peer classes are preserved
|
|
190
|
+
extractors: [
|
|
191
|
+
{
|
|
192
|
+
name: 'vue-astro',
|
|
193
|
+
extract({ code }) {
|
|
194
|
+
const result = new Set();
|
|
195
|
+
|
|
196
|
+
// Extract all peer selectors in the code
|
|
197
|
+
const peerRegex = /peer-([a-zA-Z0-9-]+:[a-zA-Z0-9-]+)/g;
|
|
198
|
+
const peerMatches = code.match(peerRegex);
|
|
199
|
+
if (peerMatches) {
|
|
200
|
+
peerMatches.forEach(match => result.add(match));
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// Add all known peer selectors
|
|
204
|
+
peerSelectorClasses.forEach(cls => result.add(cls));
|
|
205
|
+
|
|
206
|
+
return result;
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
],
|
|
210
|
+
presets: [
|
|
211
|
+
presetUno(),
|
|
212
|
+
presetAttributify(),
|
|
213
|
+
presetIcons({
|
|
214
|
+
scale: 1.2,
|
|
215
|
+
warn: true,
|
|
216
|
+
prefix: 'i-',
|
|
217
|
+
extraProperties: {
|
|
218
|
+
'display': 'inline-block',
|
|
219
|
+
'vertical-align': 'middle',
|
|
220
|
+
},
|
|
221
|
+
}),
|
|
222
|
+
presetTypography(),
|
|
223
|
+
presetWebFonts({
|
|
224
|
+
provider: 'none',
|
|
225
|
+
fonts: theme.fontFamily
|
|
226
|
+
})
|
|
227
|
+
],
|
|
228
|
+
...customConfig
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
export * from './theme';
|
|
233
233
|
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;
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
// theme/dimensions.ts
|
|
2
|
-
export const dimensions = {
|
|
3
|
-
height: {
|
|
4
|
-
'tile': '104px',
|
|
5
|
-
'tile-mobile': '78px',
|
|
6
|
-
'sidebar': 'calc(100vh - 5.125rem)',
|
|
7
|
-
'full-mobile': 'calc(var(--vh, 1vh) * 100)',
|
|
8
|
-
'icon': '46px',
|
|
9
|
-
},
|
|
10
|
-
maxHeight: {
|
|
11
|
-
'icon': '46px',
|
|
12
|
-
'sidebar': 'calc(100vh - 5.125rem)',
|
|
13
|
-
},
|
|
14
|
-
minHeight: {
|
|
15
|
-
'tile': '104px',
|
|
16
|
-
'tile-mobile': '78px',
|
|
17
|
-
}
|
|
1
|
+
// theme/dimensions.ts
|
|
2
|
+
export const dimensions = {
|
|
3
|
+
height: {
|
|
4
|
+
'tile': '104px',
|
|
5
|
+
'tile-mobile': '78px',
|
|
6
|
+
'sidebar': 'calc(100vh - 5.125rem)',
|
|
7
|
+
'full-mobile': 'calc(var(--vh, 1vh) * 100)',
|
|
8
|
+
'icon': '46px',
|
|
9
|
+
},
|
|
10
|
+
maxHeight: {
|
|
11
|
+
'icon': '46px',
|
|
12
|
+
'sidebar': 'calc(100vh - 5.125rem)',
|
|
13
|
+
},
|
|
14
|
+
minHeight: {
|
|
15
|
+
'tile': '104px',
|
|
16
|
+
'tile-mobile': '78px',
|
|
17
|
+
}
|
|
18
18
|
};
|