spoko-design-system 0.5.7 → 0.5.8
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 +278 -278
- package/index.ts +65 -65
- package/package.json +10 -10
- 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/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/Input.vue +171 -0
- 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 +37 -37
- package/src/components/Post/PostCategories.vue +38 -38
- 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 +84 -84
- package/src/pages/components/jumbotron.mdx +359 -359
- package/src/pages/components/modal.mdx +64 -64
- package/src/pages/components/post-header.mdx +60 -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 +130 -130
- 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 +114 -61
- 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 -18
- package/uno-config/theme/shortcuts/inputs.ts +44 -0
- package/uno-config/theme/shortcuts/layout.ts +64 -64
- package/uno-config/theme/typography.ts +29 -29
- package/uno.config.ts +2 -2
- package/src/components/Input.astro +0 -86
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// shortcuts/inputs.ts
|
|
2
|
+
|
|
3
|
+
export const inputShortcuts = [
|
|
4
|
+
// Base input styles
|
|
5
|
+
['input-base', 'block w-full text-4.5 text-blue-medium border-0 border-b-1 border-neutral-light appearance-none dark:text-white dark:border-gray-600 dark:focus:border-blue-lightest focus:outline-none focus:ring-0 focus:border-blue-medium'],
|
|
6
|
+
|
|
7
|
+
// Base label styles with optimized transform settings
|
|
8
|
+
['input-label-base', 'absolute text-sm text-slate-light dark:text-neutral-default origin-top-left transform-gpu transition-all duration-300 ease-in-out'],
|
|
9
|
+
|
|
10
|
+
// We're going back to direct arbitrary selectors in the input component
|
|
11
|
+
// since the grouped selectors seem to be causing issues with the focus behavior
|
|
12
|
+
|
|
13
|
+
// Variant styles for labels - position only, no transforms
|
|
14
|
+
['input-label-standard', 'top-3 -z-10'],
|
|
15
|
+
['input-label-filled', 'top-4 z-10 start-2.5'],
|
|
16
|
+
|
|
17
|
+
// Container styles
|
|
18
|
+
['input-wrapper-standard', 'relative z-0'],
|
|
19
|
+
['input-wrapper-filled', 'relative'],
|
|
20
|
+
|
|
21
|
+
// Input variant styles
|
|
22
|
+
['input-standard', 'py-2.5 px-0 bg-transparent'],
|
|
23
|
+
['input-filled', 'rounded-t-lg px-2.5 pb-2.5 pt-5 bg-gray-50 dark:bg-gray-700'],
|
|
24
|
+
|
|
25
|
+
// Special input types
|
|
26
|
+
['input-textarea', 'resize-none'],
|
|
27
|
+
|
|
28
|
+
// Size variants
|
|
29
|
+
['input-sm', 'text-sm'],
|
|
30
|
+
['input-md', 'text-base'],
|
|
31
|
+
['input-lg', 'text-lg py-3'],
|
|
32
|
+
['input-label-sm', 'text-xs'],
|
|
33
|
+
['input-label-md', 'text-sm'],
|
|
34
|
+
['input-label-lg', 'text-base'],
|
|
35
|
+
|
|
36
|
+
// Status styles - grouped logically
|
|
37
|
+
['input-error', 'border-red-500 focus:border-red-500 dark:border-red-400 dark:focus:border-red-400'],
|
|
38
|
+
['input-label-error', 'text-red-500 dark:text-red-400'],
|
|
39
|
+
['input-error-message', 'mt-1 text-xs text-red-500 dark:text-red-400'],
|
|
40
|
+
|
|
41
|
+
['input-success', 'border-green-500 focus:border-green-500 dark:border-green-400 dark:focus:border-green-400'],
|
|
42
|
+
['input-label-success', 'text-green-500 dark:text-green-400'],
|
|
43
|
+
['input-success-message', 'mt-1 text-xs text-green-500 dark:text-green-400'],
|
|
44
|
+
];
|
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
// shortcuts/layout.ts
|
|
2
|
-
import {
|
|
3
|
-
COLORS,
|
|
4
|
-
LAYOUT,
|
|
5
|
-
IMAGE_STYLES,
|
|
6
|
-
TYPOGRAPHY,
|
|
7
|
-
TRANSITIONS,
|
|
8
|
-
aspectRatios
|
|
9
|
-
} from './constants'
|
|
10
|
-
|
|
11
|
-
// Generate image shortcuts dynamically
|
|
12
|
-
const imageShortcuts = Object.entries(aspectRatios).map(([ratio, aspect]) => [
|
|
13
|
-
`img--${ratio}`,
|
|
14
|
-
`${aspect} ${IMAGE_STYLES.base}`
|
|
15
|
-
])
|
|
16
|
-
|
|
17
|
-
export const layoutShortcuts = [
|
|
18
|
-
// Main Layout
|
|
19
|
-
['l-main', `text-slate-dark ${LAYOUT.spacing.topPadding} ${COLORS.bgWhite}`],
|
|
20
|
-
['main', `text-slate-dark ${COLORS.textNeutralLight} ${COLORS.bgDark} ${LAYOUT.spacing.topPadding} ${LAYOUT.position.relative}`],
|
|
21
|
-
['nav', `${COLORS.bgWhite} ${COLORS.bgDark} ${LAYOUT.position.absolute} sm:fixed w-full top-0 z-41 mx-auto ${LAYOUT.spacing.containerPadding} pt-1 h-24 ${LAYOUT.flex.between} flex-wrap sm:(flex-nowrap pt-0 h-14) max-w-screen print-hidden`],
|
|
22
|
-
|
|
23
|
-
// View Toggles
|
|
24
|
-
['view-grid', 'lg:flex-wrap'],
|
|
25
|
-
['view-list', 'lg:flex-col divide-y-1 divide-solid divide-neutral-lighter'],
|
|
26
|
-
|
|
27
|
-
// Containers
|
|
28
|
-
['products-container', 'products-wrapper'],
|
|
29
|
-
['products-wrapper', `${LAYOUT.flex.wrap} ${COLORS.bgWhite} mb-4 w-full mb-auto md:(pl-4 px-2 -mt-3)`],
|
|
30
|
-
['product-list', 'sm:block products-wrapper'],
|
|
31
|
-
['products-grid', `${LAYOUT.flex.alignCenter} w-full flex-nowrap pr-4 md:grid grid-rows-1 overflow-hidden ${LAYOUT.grid.cols2} lg:grid-cols-3 2xl:grid-cols-4 3xl:grid-cols-5 max-h-[6rem]`],
|
|
32
|
-
['similar-products', `${LAYOUT.flex.center} space-y-4 gap-8 flex-wrap px-4 md:grid ${LAYOUT.grid.cols2} lg:grid-cols-3 2xl:grid-cols-4 3xl:grid-cols-5`],
|
|
33
|
-
['similar-section', `${COLORS.bgWhite} w-full drop-shadow-xl`],
|
|
34
|
-
['search-container', 'mb-2 sm:mb-0'],
|
|
35
|
-
|
|
36
|
-
// Category Menu
|
|
37
|
-
['cat-menu', `fixed h-21 bottom-[-6px] w-full z-10 border-t-1 border-neutral-light ${COLORS.bgWhite} dark:bg-blue-darkest text-center sm:(static z-auto border-t-none h-28)`],
|
|
38
|
-
['cat-card', 'p-4 text-base break-inside-avoid-column'],
|
|
39
|
-
['cat-name', 'mt-2 h-[2em] text-xs leading-none group-hover:filter-invert 3xl:text-3.25'],
|
|
40
|
-
['cats-slide', `${TRANSITIONS.base} mb-0.5 min-h-tile-mobile sm:(min-h-tile h-tile mb-2 p-3) text-black ${COLORS.textNeutralLight} hover:(text-white even:bg-blue-medium odd:bg-accent-light) cursor-pointer ${LAYOUT.flex.colCenter} px-1.5 cursor-grab active:cursor-grabbing overflow-hidden`],
|
|
41
|
-
['cats-img', `max-w-full h-8 md:h-icon ${IMAGE_STYLES.objectContain} w-full left-0 right-0 top-0 bottom-0`],
|
|
42
|
-
|
|
43
|
-
// Sidebars and Navigation
|
|
44
|
-
['sidebar-title', `font-headregular text-accent-light text-xl md:(text-2xl px-4) mb-2 px-14 sm:px-3 ${LAYOUT.flex.center} sm:justify-start py-3`],
|
|
45
|
-
['subcat', 'text-3.75 block cursor-pointer text-blue-darker hover:(text-accent-default underline) md:mb-1 py-2 md:py-0'],
|
|
46
|
-
['subsubcat', 'pl-2'],
|
|
47
|
-
|
|
48
|
-
// Headers and Banners
|
|
49
|
-
['headline', TYPOGRAPHY.headline.bold],
|
|
50
|
-
['headline-light', TYPOGRAPHY.headline.light],
|
|
51
|
-
['slimbanner', `px-4 sm:px-8 ${LAYOUT.flex.center} text-xs sm:text-base leading-none ${LAYOUT.position.relative} bg-gray-50 z-2 px-4 py-3 sm:(text-base px-8) text-blue-darker print-hidden`],
|
|
52
|
-
|
|
53
|
-
// Image Shortcuts
|
|
54
|
-
...imageShortcuts,
|
|
55
|
-
['img--small', `h-full w-60 sm:(w-22) xl:(w-30) ${IMAGE_STYLES.base}`],
|
|
56
|
-
['img--medium', `h-full w-60 ${IMAGE_STYLES.base}`],
|
|
57
|
-
|
|
58
|
-
// Utility Classes
|
|
59
|
-
['close-light', 'before:bg-white after:bg-white'],
|
|
60
|
-
['close-dark', 'before:bg-black after:bg-black'],
|
|
61
|
-
['colon-after', 'after:content-[":"]'],
|
|
62
|
-
['adsbygoogle', 'w-full text-center'],
|
|
63
|
-
['underline-on-hover', `${LAYOUT.position.relative} ${LAYOUT.flex.base} w-full ${COLORS.bgWhite} pb-1 after:absolute after:w-[calc(100%-1rem)] after:left-0 after:h-px after:top-[calc(100%-1px)] after:bottom-1 after:content-empty after:scale-x-0 after:transition-transform-300 after:origin-top-right hover:after:origin-top-left hover:after:scale-x-100`],
|
|
64
|
-
['cat-link', `cursor-pointer text-accent-deepBlue ${COLORS.textNeutralLight} hover:(text-brand-secondary underline) uppercase py-2 md:py-0`],
|
|
1
|
+
// shortcuts/layout.ts
|
|
2
|
+
import {
|
|
3
|
+
COLORS,
|
|
4
|
+
LAYOUT,
|
|
5
|
+
IMAGE_STYLES,
|
|
6
|
+
TYPOGRAPHY,
|
|
7
|
+
TRANSITIONS,
|
|
8
|
+
aspectRatios
|
|
9
|
+
} from './constants'
|
|
10
|
+
|
|
11
|
+
// Generate image shortcuts dynamically
|
|
12
|
+
const imageShortcuts = Object.entries(aspectRatios).map(([ratio, aspect]) => [
|
|
13
|
+
`img--${ratio}`,
|
|
14
|
+
`${aspect} ${IMAGE_STYLES.base}`
|
|
15
|
+
])
|
|
16
|
+
|
|
17
|
+
export const layoutShortcuts = [
|
|
18
|
+
// Main Layout
|
|
19
|
+
['l-main', `text-slate-dark ${LAYOUT.spacing.topPadding} ${COLORS.bgWhite}`],
|
|
20
|
+
['main', `text-slate-dark ${COLORS.textNeutralLight} ${COLORS.bgDark} ${LAYOUT.spacing.topPadding} ${LAYOUT.position.relative}`],
|
|
21
|
+
['nav', `${COLORS.bgWhite} ${COLORS.bgDark} ${LAYOUT.position.absolute} sm:fixed w-full top-0 z-41 mx-auto ${LAYOUT.spacing.containerPadding} pt-1 h-24 ${LAYOUT.flex.between} flex-wrap sm:(flex-nowrap pt-0 h-14) max-w-screen print-hidden`],
|
|
22
|
+
|
|
23
|
+
// View Toggles
|
|
24
|
+
['view-grid', 'lg:flex-wrap'],
|
|
25
|
+
['view-list', 'lg:flex-col divide-y-1 divide-solid divide-neutral-lighter'],
|
|
26
|
+
|
|
27
|
+
// Containers
|
|
28
|
+
['products-container', 'products-wrapper'],
|
|
29
|
+
['products-wrapper', `${LAYOUT.flex.wrap} ${COLORS.bgWhite} mb-4 w-full mb-auto md:(pl-4 px-2 -mt-3)`],
|
|
30
|
+
['product-list', 'sm:block products-wrapper'],
|
|
31
|
+
['products-grid', `${LAYOUT.flex.alignCenter} w-full flex-nowrap pr-4 md:grid grid-rows-1 overflow-hidden ${LAYOUT.grid.cols2} lg:grid-cols-3 2xl:grid-cols-4 3xl:grid-cols-5 max-h-[6rem]`],
|
|
32
|
+
['similar-products', `${LAYOUT.flex.center} space-y-4 gap-8 flex-wrap px-4 md:grid ${LAYOUT.grid.cols2} lg:grid-cols-3 2xl:grid-cols-4 3xl:grid-cols-5`],
|
|
33
|
+
['similar-section', `${COLORS.bgWhite} w-full drop-shadow-xl`],
|
|
34
|
+
['search-container', 'mb-2 sm:mb-0'],
|
|
35
|
+
|
|
36
|
+
// Category Menu
|
|
37
|
+
['cat-menu', `fixed h-21 bottom-[-6px] w-full z-10 border-t-1 border-neutral-light ${COLORS.bgWhite} dark:bg-blue-darkest text-center sm:(static z-auto border-t-none h-28)`],
|
|
38
|
+
['cat-card', 'p-4 text-base break-inside-avoid-column'],
|
|
39
|
+
['cat-name', 'mt-2 h-[2em] text-xs leading-none group-hover:filter-invert 3xl:text-3.25'],
|
|
40
|
+
['cats-slide', `${TRANSITIONS.base} mb-0.5 min-h-tile-mobile sm:(min-h-tile h-tile mb-2 p-3) text-black ${COLORS.textNeutralLight} hover:(text-white even:bg-blue-medium odd:bg-accent-light) cursor-pointer ${LAYOUT.flex.colCenter} px-1.5 cursor-grab active:cursor-grabbing overflow-hidden`],
|
|
41
|
+
['cats-img', `max-w-full h-8 md:h-icon ${IMAGE_STYLES.objectContain} w-full left-0 right-0 top-0 bottom-0`],
|
|
42
|
+
|
|
43
|
+
// Sidebars and Navigation
|
|
44
|
+
['sidebar-title', `font-headregular text-accent-light text-xl md:(text-2xl px-4) mb-2 px-14 sm:px-3 ${LAYOUT.flex.center} sm:justify-start py-3`],
|
|
45
|
+
['subcat', 'text-3.75 block cursor-pointer text-blue-darker hover:(text-accent-default underline) md:mb-1 py-2 md:py-0'],
|
|
46
|
+
['subsubcat', 'pl-2'],
|
|
47
|
+
|
|
48
|
+
// Headers and Banners
|
|
49
|
+
['headline', TYPOGRAPHY.headline.bold],
|
|
50
|
+
['headline-light', TYPOGRAPHY.headline.light],
|
|
51
|
+
['slimbanner', `px-4 sm:px-8 ${LAYOUT.flex.center} text-xs sm:text-base leading-none ${LAYOUT.position.relative} bg-gray-50 z-2 px-4 py-3 sm:(text-base px-8) text-blue-darker print-hidden`],
|
|
52
|
+
|
|
53
|
+
// Image Shortcuts
|
|
54
|
+
...imageShortcuts,
|
|
55
|
+
['img--small', `h-full w-60 sm:(w-22) xl:(w-30) ${IMAGE_STYLES.base}`],
|
|
56
|
+
['img--medium', `h-full w-60 ${IMAGE_STYLES.base}`],
|
|
57
|
+
|
|
58
|
+
// Utility Classes
|
|
59
|
+
['close-light', 'before:bg-white after:bg-white'],
|
|
60
|
+
['close-dark', 'before:bg-black after:bg-black'],
|
|
61
|
+
['colon-after', 'after:content-[":"]'],
|
|
62
|
+
['adsbygoogle', 'w-full text-center'],
|
|
63
|
+
['underline-on-hover', `${LAYOUT.position.relative} ${LAYOUT.flex.base} w-full ${COLORS.bgWhite} pb-1 after:absolute after:w-[calc(100%-1rem)] after:left-0 after:h-px after:top-[calc(100%-1px)] after:bottom-1 after:content-empty after:scale-x-0 after:transition-transform-300 after:origin-top-right hover:after:origin-top-left hover:after:scale-x-100`],
|
|
64
|
+
['cat-link', `cursor-pointer text-accent-deepBlue ${COLORS.textNeutralLight} hover:(text-brand-secondary underline) uppercase py-2 md:py-0`],
|
|
65
65
|
];
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
// theme/typography.ts
|
|
2
|
-
interface FontFamily {
|
|
3
|
-
[key: string]: string[];
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
interface FontSize {
|
|
7
|
-
[key: string]: string;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
interface Typography {
|
|
11
|
-
fontFamily: FontFamily;
|
|
12
|
-
fontSize: FontSize;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export const typography: Typography = {
|
|
16
|
-
fontFamily: {
|
|
17
|
-
sans: ['vw_textregular', 'system-ui', 'ui-sans-serif'],
|
|
18
|
-
novamono: ['Nova Mono'],
|
|
19
|
-
mono: ['Nova Mono'],
|
|
20
|
-
headlight: ['vw_headlight', 'system-ui'],
|
|
21
|
-
headregular: ['vw_headregular'],
|
|
22
|
-
headbold: ['vw_headbold'],
|
|
23
|
-
textlight: ['vw_textlight'],
|
|
24
|
-
textregular: ['vw_textregular'],
|
|
25
|
-
textbold: ['vw_textbold']
|
|
26
|
-
},
|
|
27
|
-
fontSize: {
|
|
28
|
-
xxs: '.625rem',
|
|
29
|
-
}
|
|
1
|
+
// theme/typography.ts
|
|
2
|
+
interface FontFamily {
|
|
3
|
+
[key: string]: string[];
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
interface FontSize {
|
|
7
|
+
[key: string]: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
interface Typography {
|
|
11
|
+
fontFamily: FontFamily;
|
|
12
|
+
fontSize: FontSize;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const typography: Typography = {
|
|
16
|
+
fontFamily: {
|
|
17
|
+
sans: ['vw_textregular', 'system-ui', 'ui-sans-serif'],
|
|
18
|
+
novamono: ['Nova Mono'],
|
|
19
|
+
mono: ['Nova Mono'],
|
|
20
|
+
headlight: ['vw_headlight', 'system-ui'],
|
|
21
|
+
headregular: ['vw_headregular'],
|
|
22
|
+
headbold: ['vw_headbold'],
|
|
23
|
+
textlight: ['vw_textlight'],
|
|
24
|
+
textregular: ['vw_textregular'],
|
|
25
|
+
textbold: ['vw_textbold']
|
|
26
|
+
},
|
|
27
|
+
fontSize: {
|
|
28
|
+
xxs: '.625rem',
|
|
29
|
+
}
|
|
30
30
|
};
|
package/uno.config.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { createSdsConfig } from './uno-config';
|
|
2
|
-
|
|
1
|
+
import { createSdsConfig } from './uno-config';
|
|
2
|
+
|
|
3
3
|
export default createSdsConfig();
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
// Input.astro
|
|
3
|
-
interface Props {
|
|
4
|
-
id: string;
|
|
5
|
-
name?: string;
|
|
6
|
-
label: string;
|
|
7
|
-
variant?: 'filled' | 'standard';
|
|
8
|
-
type?: HTMLInputElement['type'] | 'textarea'; // support textarea
|
|
9
|
-
value?: string;
|
|
10
|
-
required?: boolean;
|
|
11
|
-
rows?: number; // rows for textarea
|
|
12
|
-
placeholder?: string;
|
|
13
|
-
class?: string; // additional classes
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const {
|
|
17
|
-
id,
|
|
18
|
-
name,
|
|
19
|
-
label,
|
|
20
|
-
variant = 'standard',
|
|
21
|
-
type = 'text',
|
|
22
|
-
value = '',
|
|
23
|
-
required = false,
|
|
24
|
-
rows = 3,
|
|
25
|
-
placeholder = " ", //space for "floating label")
|
|
26
|
-
class: additionalClasses = "",
|
|
27
|
-
...restProps
|
|
28
|
-
} = Astro.props;
|
|
29
|
-
|
|
30
|
-
// Common classes for both variants
|
|
31
|
-
const baseInputClasses = "block w-full text-4.5 text-blue-medium border-0 border-b-1 border-neutral-light appearance-none dark:text-white dark:border-gray-600 dark:focus:border-blue-lightest focus:outline-none focus:ring-0 focus:border-blue-medium peer";
|
|
32
|
-
|
|
33
|
-
const baseLabelClasses = "absolute text-sm text-slate-medium dark:text-neutral-default transform scale-75 origin-[0] peer-focus:text-blue-medium peer-focus:dark:text-blue-lightest peer-placeholder-shown:scale-100 peer-focus:scale-75 rtl:peer-focus:translate-x-1/4 rtl:peer-focus:left-auto transition-all duration-300 ease-in-out";
|
|
34
|
-
|
|
35
|
-
// Variant specific classes
|
|
36
|
-
const variantClasses = {
|
|
37
|
-
filled: {
|
|
38
|
-
wrapper: "relative",
|
|
39
|
-
input: `${baseInputClasses} rounded-t-lg px-2.5 pb-2.5 pt-5 bg-gray-50 dark:bg-gray-700 ${additionalClasses}`,
|
|
40
|
-
label: `${baseLabelClasses} -translate-y-4 top-4 z-10 start-2.5 peer-placeholder-shown:translate-y-0 peer-focus:-translate-y-4`
|
|
41
|
-
},
|
|
42
|
-
standard: {
|
|
43
|
-
wrapper: "relative z-0",
|
|
44
|
-
input: `${baseInputClasses} py-2.5 px-0 bg-transparent ${additionalClasses}`,
|
|
45
|
-
label: `${baseLabelClasses} -translate-y-6 top-3 -z-10 peer-focus:start-0 peer-placeholder-shown:translate-y-0 peer-focus:-translate-y-6`
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
const classes = variantClasses[variant];
|
|
50
|
-
|
|
51
|
-
// Keep border-b-1 for textarea but add resize-none
|
|
52
|
-
const textareaClasses = type === 'textarea'
|
|
53
|
-
? `${classes.input} resize-none`
|
|
54
|
-
: classes.input;
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
<div class={classes.wrapper}>
|
|
58
|
-
{type === 'textarea' ? (
|
|
59
|
-
<textarea
|
|
60
|
-
name={name}
|
|
61
|
-
id={id}
|
|
62
|
-
rows={rows}
|
|
63
|
-
required={required}
|
|
64
|
-
class={textareaClasses}
|
|
65
|
-
placeholder={placeholder}
|
|
66
|
-
{...restProps}
|
|
67
|
-
>{value}</textarea>
|
|
68
|
-
) : (
|
|
69
|
-
<input
|
|
70
|
-
type={type}
|
|
71
|
-
name={name}
|
|
72
|
-
id={id}
|
|
73
|
-
value={value}
|
|
74
|
-
required={required}
|
|
75
|
-
class={classes.input}
|
|
76
|
-
placeholder={placeholder}
|
|
77
|
-
{...restProps}
|
|
78
|
-
/>
|
|
79
|
-
)}
|
|
80
|
-
<label
|
|
81
|
-
for={id}
|
|
82
|
-
class={classes.label}
|
|
83
|
-
>
|
|
84
|
-
{label}
|
|
85
|
-
</label>
|
|
86
|
-
</div>
|