spoko-design-system 1.9.1 → 1.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/.husky/pre-commit +17 -1
  2. package/.prettierrc +8 -4
  3. package/CHANGELOG.md +6 -0
  4. package/package.json +1 -1
  5. package/src/components/Badge.vue +1 -4
  6. package/src/components/Badges.vue +1 -4
  7. package/src/components/Breadcrumbs.vue +10 -44
  8. package/src/components/Button.vue +1 -5
  9. package/src/components/ButtonCopy.astro +2 -7
  10. package/src/components/ButtonCopy.vue +2 -9
  11. package/src/components/Card.astro +1 -4
  12. package/src/components/Category/CategoriesCarousel.astro +3 -11
  13. package/src/components/Category/CategoryDetails.astro +7 -32
  14. package/src/components/Category/CategoryLink.vue +1 -5
  15. package/src/components/Category/CategorySidebarToggler.vue +1 -5
  16. package/src/components/Category/CategoryTile.astro +2 -9
  17. package/src/components/Category/CategoryViewToggler.astro +3 -16
  18. package/src/components/Copyright.astro +1 -4
  19. package/src/components/Date.astro +1 -4
  20. package/src/components/Faq.astro +1 -5
  21. package/src/components/FaqItem.astro +3 -14
  22. package/src/components/FeaturesList.vue +2 -9
  23. package/src/components/FuckRussia.vue +9 -36
  24. package/src/components/HandDrive.astro +2 -12
  25. package/src/components/Header/Header.astro +3 -14
  26. package/src/components/Header/SkipToContent.astro +1 -5
  27. package/src/components/Input.vue +19 -31
  28. package/src/components/Jumbotron/index.astro +7 -41
  29. package/src/components/Jumbotron/variants/Default.astro +2 -17
  30. package/src/components/Jumbotron/variants/Hero.astro +3 -17
  31. package/src/components/Jumbotron/variants/Post.astro +3 -13
  32. package/src/components/Jumbotron/variants/PostSplit.astro +3 -13
  33. package/src/components/Jumbotron.astro +3 -12
  34. package/src/components/LanguageSuggestion.astro +3 -14
  35. package/src/components/MainColors.vue +7 -25
  36. package/src/components/MainInput.vue +2 -1
  37. package/src/components/Modal.astro +43 -41
  38. package/src/components/PageContent.astro +1 -4
  39. package/src/components/PartNumber.vue +1 -4
  40. package/src/components/PostHeader.astro +3 -13
  41. package/src/components/PrCode.vue +2 -2
  42. package/src/components/Product/ProductButton.vue +1 -4
  43. package/src/components/Product/ProductDetailName.vue +1 -4
  44. package/src/components/Product/ProductDetails.vue +19 -65
  45. package/src/components/Product/ProductDoc.vue +1 -4
  46. package/src/components/Product/ProductEngine.astro +27 -27
  47. package/src/components/Product/ProductEngineType.vue +1 -4
  48. package/src/components/Product/ProductEngines.astro +4 -4
  49. package/src/components/Product/ProductLink.astro +8 -32
  50. package/src/components/Product/ProductLink.vue +8 -36
  51. package/src/components/Product/ProductLinkInfo.astro +4 -19
  52. package/src/components/Product/ProductModel.vue +3 -5
  53. package/src/components/Product/ProductModels.vue +2 -10
  54. package/src/components/Product/ProductNumber.astro +6 -26
  55. package/src/components/Product/ProductPositions.vue +1 -5
  56. package/src/components/ProductCodes.vue +6 -14
  57. package/src/components/ProductDetailName.vue +2 -7
  58. package/src/components/ProductDetailsList.vue +7 -33
  59. package/src/components/ProductTile.astro +3 -13
  60. package/src/components/ReloadPrompt.astro +1 -5
  61. package/src/components/SlimBanner.vue +10 -15
  62. package/src/components/Table.vue +3 -15
  63. package/src/components/Translations.vue +1 -4
  64. package/src/components/layout/CallToAction.astro +2 -7
  65. package/src/components/layout/Container.astro +1 -3
  66. package/src/components/layout/Header.astro +2 -12
  67. package/src/layouts/Layout.astro +2 -9
  68. package/src/layouts/MainLayout.astro +4 -17
  69. package/src/layouts/partials/HeadCommon.astro +7 -24
  70. package/src/layouts/partials/HeadSEO.astro +12 -48
  71. package/src/pages/components/icons.astro +1 -4
  72. package/src/pages/core/typography.astro +2 -6
  73. package/src/pages/index.astro +16 -63
  74. package/src/styles/tippy-theme.css +4 -2
  75. package/src/utils/product/getEngineTooltipContent.ts +2 -7
  76. package/src/utils/product/getPriceFormatted.ts +2 -6
  77. package/src/utils/product/useFormatProductNumber.ts +1 -4
  78. package/src/utils/seo/getShorterDescription.ts +1 -4
package/.husky/pre-commit CHANGED
@@ -1,11 +1,27 @@
1
1
  echo "🔍 Running pre-commit checks..."
2
2
 
3
+ # Run format check
4
+ echo "🎨 Checking code formatting..."
5
+ pnpm run format:check
6
+ if [ $? -ne 0 ]; then
7
+ echo "❌ Format check failed! Run 'pnpm run format' to fix."
8
+ exit 1
9
+ fi
10
+
11
+ # Run linting
12
+ echo "🔍 Running linter..."
13
+ pnpm run lint
14
+ if [ $? -ne 0 ]; then
15
+ echo "❌ Lint check failed! Run 'pnpm run lint:fix' to fix."
16
+ exit 1
17
+ fi
18
+
3
19
  # Run Astro build to catch MDX and component errors
4
20
  echo "🏗️ Building project..."
5
21
  pnpm run build
6
22
 
7
23
  if [ $? -eq 0 ]; then
8
- echo "✅ Build successful! Proceeding with commit..."
24
+ echo "✅ All checks passed! Proceeding with commit..."
9
25
  else
10
26
  echo "❌ Build failed! Please fix errors before committing."
11
27
  exit 1
package/.prettierrc CHANGED
@@ -3,13 +3,15 @@
3
3
  "singleQuote": true,
4
4
  "tabWidth": 2,
5
5
  "trailingComma": "es5",
6
- "printWidth": 100,
6
+ "printWidth": 110,
7
7
  "useTabs": false,
8
8
  "bracketSpacing": true,
9
9
  "arrowParens": "avoid",
10
10
  "endOfLine": "lf",
11
- "singleAttributePerLine": true,
12
- "plugins": ["prettier-plugin-astro"],
11
+ "singleAttributePerLine": false,
12
+ "plugins": [
13
+ "prettier-plugin-astro"
14
+ ],
13
15
  "overrides": [
14
16
  {
15
17
  "files": "*.astro",
@@ -20,7 +22,9 @@
20
22
  {
21
23
  "files": "*.vue",
22
24
  "options": {
23
- "parser": "vue"
25
+ "parser": "vue",
26
+ "vueIndentScriptAndStyle": false,
27
+ "htmlWhitespaceSensitivity": "ignore"
24
28
  }
25
29
  }
26
30
  ]
package/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [1.9.2](https://github.com/polo-blue/sds/compare/v1.9.1...v1.9.2) (2025-10-30)
2
+
3
+ ### Bug Fixes
4
+
5
+ * improve prettier config and add comprehensive pre-commit checks ([847641e](https://github.com/polo-blue/sds/commit/847641e17566fa85a1fa5466b87a7028ae3287bb))
6
+
1
7
  ## [1.9.1](https://github.com/polo-blue/sds/compare/v1.9.0...v1.9.1) (2025-10-30)
2
8
 
3
9
  ### ⚠ BREAKING CHANGES
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spoko-design-system",
3
- "version": "1.9.1",
3
+ "version": "1.9.2",
4
4
  "private": false,
5
5
  "main": "./index.ts",
6
6
  "module": "./index.ts",
@@ -14,10 +14,7 @@ const props = defineProps({
14
14
  </script>
15
15
 
16
16
  <template>
17
- <div
18
- class="badge"
19
- :class="props.class"
20
- >
17
+ <div class="badge" :class="props.class">
21
18
  {{ props.badge }}
22
19
  </div>
23
20
  </template>
@@ -47,10 +47,7 @@ const getBadgeColor = (badge: string | BadgeObject): string => {
47
47
  </script>
48
48
 
49
49
  <template>
50
- <div
51
- v-if="props.badges && props.badges.length > 0"
52
- class="absolute z-2"
53
- >
50
+ <div v-if="props.badges && props.badges.length > 0" class="absolute z-2">
54
51
  <Badge
55
52
  v-for="(badge, index) in props.badges"
56
53
  :key="index"
@@ -39,19 +39,9 @@ const isLast = (index: number) => {
39
39
  <template>
40
40
  <nav>
41
41
  <ul class="breadcrumbs-base">
42
- <li
43
- v-if="props.showBack"
44
- class="breadcrumb-item"
45
- >
46
- <button
47
- class="breadcrumb-back-btn"
48
- :title="props.textBack"
49
- onclick="history.back()"
50
- >
51
- <span
52
- class="block px-3"
53
- i-bx-bx-arrow-back
54
- />
42
+ <li v-if="props.showBack" class="breadcrumb-item">
43
+ <button class="breadcrumb-back-btn" :title="props.textBack" onclick="history.back()">
44
+ <span class="block px-3" i-bx-bx-arrow-back />
55
45
  </button>
56
46
  </li>
57
47
  </ul>
@@ -60,10 +50,7 @@ const isLast = (index: number) => {
60
50
  itemscope
61
51
  itemtype="https://schema.org/BreadcrumbList"
62
52
  >
63
- <li
64
- v-if="props.showHome"
65
- class="breadcrumb-item"
66
- >
53
+ <li v-if="props.showHome" class="breadcrumb-item">
67
54
  <a
68
55
  href="/"
69
56
  class="breadcrumb-link flex items-center px-3 sm:px-0 py-4.25 sm:py-1 hover:text-brand-secondary whitespace-nowrap translate-y-0 text-sm my-auto"
@@ -71,10 +58,7 @@ const isLast = (index: number) => {
71
58
  itemprop="item"
72
59
  i-carbon-home
73
60
  />
74
- <meta
75
- itemprop="position"
76
- content="1"
77
- />
61
+ <meta itemprop="position" content="1" />
78
62
  </li>
79
63
  <li
80
64
  v-for="(crumb, index) in breadcrumbs"
@@ -84,11 +68,7 @@ const isLast = (index: number) => {
84
68
  itemscope
85
69
  itemtype="https://schema.org/ListItem"
86
70
  >
87
- <span
88
- v-if="index > 0 || props.showHome"
89
- class="text-gray-400 px-1 py-4.25 sm:py-1"
90
- >/</span
91
- >
71
+ <span v-if="index > 0 || props.showHome" class="text-gray-400 px-1 py-4.25 sm:py-1">/</span>
92
72
 
93
73
  <a
94
74
  v-if="!isLast(index)"
@@ -97,11 +77,7 @@ const isLast = (index: number) => {
97
77
  itemprop="item"
98
78
  :title="`Polo 6R ${crumb.name}`"
99
79
  >
100
- <strong
101
- class="font-normal"
102
- itemprop="name"
103
- >{{ crumb.name }}</strong
104
- >
80
+ <strong class="font-normal" itemprop="name">{{ crumb.name }}</strong>
105
81
  </a>
106
82
  <a
107
83
  v-else
@@ -110,23 +86,13 @@ const isLast = (index: number) => {
110
86
  :title="`Polo 6R ${crumb.name} ${productNumber}`"
111
87
  itemprop="item"
112
88
  >
113
- <span
114
- class="font-normal"
115
- itemprop="name"
116
- >
89
+ <span class="font-normal" itemprop="name">
117
90
  <span v-html="crumb.name" />
118
- <b
119
- v-if="productNumber"
120
- class="hidden sm:inline font-normal ml-1"
121
- >&nbsp;{{ productNumber }}</b
122
- >
91
+ <b v-if="productNumber" class="hidden sm:inline font-normal ml-1">&nbsp;{{ productNumber }}</b>
123
92
  </span>
124
93
  </a>
125
94
 
126
- <meta
127
- itemprop="position"
128
- :content="String(props.showHome ? index + 2 : index + 1)"
129
- />
95
+ <meta itemprop="position" :content="String(props.showHome ? index + 2 : index + 1)" />
130
96
  </li>
131
97
  </ul>
132
98
  </nav>
@@ -28,11 +28,7 @@ const props = defineProps<ButtonProps>();
28
28
  // Check if we should add a default mediumHover for tertiary
29
29
  const shouldAddDefaultMediumHover =
30
30
  props.tertiary ||
31
- (props.tertiaryOutline &&
32
- !props.whiteHover &&
33
- !props.lightHover &&
34
- !props.mediumHover &&
35
- !props.darkHover);
31
+ (props.tertiaryOutline && !props.whiteHover && !props.lightHover && !props.mediumHover && !props.darkHover);
36
32
 
37
33
  const tag = props.href && props.href.length ? 'a' : 'button';
38
34
  const classes = {
@@ -25,13 +25,8 @@ const COPY_ICON = `url("data:image/svg+xml;utf8,${encodeURIComponent(
25
25
  <span
26
26
  class:list={['tooltip rounded-full btn-copy-text', tooltipClasses]}
27
27
  data-text={texts.copy}
28
- data-copied-text={texts.copied}
29
- ></span>
30
- <span
31
- class="copy-icon"
32
- role="img"
33
- aria-hidden="true"
34
- ></span>
28
+ data-copied-text={texts.copied}></span>
29
+ <span class="copy-icon" role="img" aria-hidden="true"></span>
35
30
  </button>
36
31
 
37
32
  <script>
@@ -27,18 +27,11 @@ const { copy, copied } = useClipboard({ source, legacy: true });
27
27
  </script>
28
28
 
29
29
  <template>
30
- <button
31
- :aria-label="texts.copy"
32
- class="btn-copy has-tooltip"
33
- @click="copy()"
34
- >
30
+ <button :aria-label="texts.copy" class="btn-copy has-tooltip" @click="copy()">
35
31
  <span
36
32
  :class="`tooltip rounded-full btn-copy-text ${tooltipClasses}`"
37
33
  :data-text="!copied ? texts.copy : texts.copied"
38
34
  />
39
- <span
40
- i-ph-copy-simple-light
41
- class="leading-none w-full h-full"
42
- />
35
+ <span i-ph-copy-simple-light class="leading-none w-full h-full" />
43
36
  </button>
44
37
  </template>
@@ -5,10 +5,7 @@ import Image from '../components/Image.astro';
5
5
  ---
6
6
 
7
7
  <div class="bg-white border border-gray-200 rounded-lg shadow overflow-hidden">
8
- <a
9
- href={href}
10
- class="aspect-ratio-video block relative"
11
- >
8
+ <a href={href} class="aspect-ratio-video block relative">
12
9
  {
13
10
  imgSrc && (
14
11
  <Image
@@ -9,9 +9,7 @@ const categories = await getMainCategoryList();
9
9
  const imgDomain = 'https://api.polo.blue/img/';
10
10
 
11
11
  const activeIndex =
12
- activeCategorySlug && categories
13
- ? categories.map(a => a.slug).findIndex(e => e === activeCategorySlug)
14
- : 0;
12
+ activeCategorySlug && categories ? categories.map(a => a.slug).findIndex(e => e === activeCategorySlug) : 0;
15
13
  ---
16
14
 
17
15
  <!-- <div class={`cat-menu ${className ? className : ''}`}
@@ -45,10 +43,7 @@ const activeIndex =
45
43
  role="presentation"
46
44
  class={`swiper-slide cats-slide group ${category.slug === activeCategorySlug ? 'active' : ''}`}
47
45
  >
48
- <a
49
- href={getTranslatedLink(`/${category.slug}/`)}
50
- class="carousel-item"
51
- >
46
+ <a href={getTranslatedLink(`/${category.slug}/`)} class="carousel-item">
52
47
  {
53
48
  // itemprop="url"
54
49
  // role="menuitem"
@@ -67,10 +62,7 @@ const activeIndex =
67
62
  />
68
63
  <div class="swiper-lazy-preloader" />
69
64
 
70
- <div
71
- class="cat-name"
72
- itemprop="name"
73
- >
65
+ <div class="cat-name" itemprop="name">
74
66
  {category.name}
75
67
  </div>
76
68
  </a>
@@ -3,16 +3,8 @@ import CategorySidebarToggler from './CategorySidebarToggler.vue';
3
3
  import CategoryViewToggler from './CategoryViewToggler.astro';
4
4
  import { Icon } from 'astro-icon/components';
5
5
 
6
- const {
7
- category,
8
- subcategory,
9
- subtitle,
10
- subsubtitle,
11
- titleSmall,
12
- showViewToggler,
13
- viewerLabels,
14
- locale,
15
- } = Astro.props;
6
+ const { category, subcategory, subtitle, subsubtitle, titleSmall, showViewToggler, viewerLabels } =
7
+ Astro.props;
16
8
 
17
9
  // Use paths directly from API - they already include locale and proper slashes
18
10
  const categoryPath = category?.path || `/${category.slug}/`;
@@ -24,16 +16,9 @@ const subcategoryPath = subcategory?.path || `/${category.slug}/${subcategory?.s
24
16
  transition:name="category-details"
25
17
  transition:animate="fade"
26
18
  >
27
- <CategorySidebarToggler
28
- class="category-sidebar-toggler w-12 md:w-8"
29
- data-state="desktop"
30
- >
19
+ <CategorySidebarToggler class="category-sidebar-toggler w-12 md:w-8" data-state="desktop">
31
20
  <div class="desktop-icons hidden md:block">
32
- <Icon
33
- name="ant-design:menu-fold-outlined"
34
- class="toggler-btn w-6 expanded-icon"
35
- aria-hidden="true"
36
- />
21
+ <Icon name="ant-design:menu-fold-outlined" class="toggler-btn w-6 expanded-icon" aria-hidden="true" />
37
22
  <Icon
38
23
  name="ant-design:menu-unfold-outlined"
39
24
  class="toggler-btn w-6 collapsed-icon hidden"
@@ -41,11 +26,7 @@ const subcategoryPath = subcategory?.path || `/${category.slug}/${subcategory?.s
41
26
  />
42
27
  </div>
43
28
  <div class="mobile-icon block md:hidden">
44
- <Icon
45
- name="ant-design:menu-outlined"
46
- class="toggler-btn w-6"
47
- aria-hidden="true"
48
- />
29
+ <Icon name="ant-design:menu-outlined" class="toggler-btn w-6" aria-hidden="true" />
49
30
  </div>
50
31
  </CategorySidebarToggler>
51
32
 
@@ -53,10 +34,7 @@ const subcategoryPath = subcategory?.path || `/${category.slug}/${subcategory?.s
53
34
  {
54
35
  subtitle ? (
55
36
  <>
56
- <a
57
- class="text-lg font-vw-headregular whitespace-nowrap block"
58
- href={categoryPath}
59
- >
37
+ <a class="text-lg font-vw-headregular whitespace-nowrap block" href={categoryPath}>
60
38
  {category.name}
61
39
  {titleSmall && <small>{titleSmall}</small>}
62
40
  </a>
@@ -89,10 +67,7 @@ const subcategoryPath = subcategory?.path || `/${category.slug}/${subcategory?.s
89
67
 
90
68
  {
91
69
  showViewToggler && (
92
- <CategoryViewToggler
93
- {...viewerLabels}
94
- class="hidden lg:flex items-center gap-2 ml-auto"
95
- />
70
+ <CategoryViewToggler {...viewerLabels} class="hidden lg:flex items-center gap-2 ml-auto" />
96
71
  )
97
72
  }
98
73
  </div>
@@ -1,9 +1,5 @@
1
1
  <template>
2
- <a
3
- :href="href"
4
- class="category-link"
5
- :class="{ active: active }"
6
- >
2
+ <a :href="href" class="category-link" :class="{ active: active }">
7
3
  {{ text }}
8
4
  </a>
9
5
  </template>
@@ -1,9 +1,5 @@
1
1
  <template>
2
- <button
3
- class="category-toggler md:w-8"
4
- type="button"
5
- aria-label="toggle menu"
6
- >
2
+ <button class="category-toggler md:w-8" type="button" aria-label="toggle menu">
7
3
  <slot />
8
4
  </button>
9
5
  </template>
@@ -22,11 +22,7 @@ const prefix = locale === 'en' ? '' : `${locale}/`;
22
22
  const href = `/${prefix}${CategoryObject.slug}/`;
23
23
  ---
24
24
 
25
- <a
26
- href={href}
27
- class="carousel-item"
28
- data-astro-prefetch
29
- >
25
+ <a href={href} class="carousel-item" data-astro-prefetch>
30
26
  <Image
31
27
  src={CategoryObject.photo}
32
28
  alt={CategoryObject.alt}
@@ -38,10 +34,7 @@ const href = `/${prefix}${CategoryObject.slug}/`;
38
34
  class="cats-img"
39
35
  />
40
36
  <div class="swiper-lazy-preloader"></div>
41
- <div
42
- class="cat-name"
43
- itemprop="name"
44
- >
37
+ <div class="cat-name" itemprop="name">
45
38
  {CategoryObject.name}
46
39
  </div>
47
40
  </a>
@@ -10,14 +10,7 @@ interface Props {
10
10
  class?: string;
11
11
  }
12
12
 
13
- const {
14
- showText,
15
- listText,
16
- gridText,
17
- listAriaLabel,
18
- gridAriaLabel,
19
- class: className,
20
- } = Astro.props;
13
+ const { showText, listText, gridText, listAriaLabel, gridAriaLabel, class: className } = Astro.props;
21
14
  ---
22
15
 
23
16
  <div class:list={[className]}>
@@ -29,10 +22,7 @@ const {
29
22
  class="view-toggle flex items-center gap-1 px-3 py-0.5 transition-colors"
30
23
  aria-label={listAriaLabel}
31
24
  >
32
- <Icon
33
- name="ant-design:bars-outlined"
34
- class="w-4 h-4"
35
- />
25
+ <Icon name="ant-design:bars-outlined" class="w-4 h-4" />
36
26
  <span class="text-sm">{listText}</span>
37
27
  </button>
38
28
  <button
@@ -41,10 +31,7 @@ const {
41
31
  class="view-toggle flex items-center gap-1 px-3 py-0.5 transition-colors"
42
32
  aria-label={gridAriaLabel}
43
33
  >
44
- <Icon
45
- name="ant-design:appstore-outlined"
46
- class="w-4 h-4"
47
- />
34
+ <Icon name="ant-design:appstore-outlined" class="w-4 h-4" />
48
35
  <span class="text-sm">{gridText}</span>
49
36
  </button>
50
37
  </div>
@@ -2,10 +2,7 @@
2
2
  const { class: className } = Astro.props;
3
3
  ---
4
4
 
5
- <div
6
- class="bg-vw h-11 flex items-center font-headlight justify-between px-4"
7
- class:list={[className]}
8
- >
5
+ <div class="bg-vw h-11 flex items-center font-headlight justify-between px-4" class:list={[className]}>
9
6
  <slot name="left-item" />
10
7
  <slot name="middle-item" />
11
8
  <slot name="right-item" />
@@ -2,9 +2,6 @@
2
2
  const { date } = Astro.props;
3
3
  ---
4
4
 
5
- <time
6
- class="text-sm flex items-center mr-2"
7
- datetime={date}
8
- >
5
+ <time class="text-sm flex items-center mr-2" datetime={date}>
9
6
  {new Date(date).toLocaleDateString()}
10
7
  </time>
@@ -17,11 +17,7 @@ interface Props {
17
17
  const { questions } = Astro.props;
18
18
  ---
19
19
 
20
- <div
21
- class="flex flex-col mt-6 mb-4 w-full px-4 md:px-0"
22
- itemscope
23
- itemtype="https://schema.org/FAQPage"
24
- >
20
+ <div class="flex flex-col mt-6 mb-4 w-full px-4 md:px-0" itemscope itemtype="https://schema.org/FAQPage">
25
21
  <div class="mb-6 text-4xl font-headbold sm:text-4xl text-blue-802 faq-heading">
26
22
  Frequently Asked Questions
27
23
  </div>
@@ -23,21 +23,10 @@ const { data } = Astro.props;
23
23
  class="py-2 outline-none cursor-pointer focus:underline text-xl font-500 relative items-center flex justify-between list-none
24
24
  after:(block duration-200 content-empty bg-[url(/arrow-bottom.svg)] bg-contain bg-center bg-no-repeat h-3 w-4 min-w-4 my-auto ml-4 opacity-60)"
25
25
  >
26
- <h2
27
- itemprop="name"
28
- class="font-headbold"
29
- set:html={data.question}
30
- />
26
+ <h2 itemprop="name" class="font-headbold" set:html={data.question} />
31
27
  </summary>
32
- <div
33
- itemscope
34
- itemprop="acceptedAnswer"
35
- itemtype="https://schema.org/Answer"
36
- >
37
- <div
38
- itemprop="text"
39
- class="px-0 pb-4"
40
- >
28
+ <div itemscope itemprop="acceptedAnswer" itemtype="https://schema.org/Answer">
29
+ <div itemprop="text" class="px-0 pb-4">
41
30
  <Markdown content={data.answer} />
42
31
  </div>
43
32
  </div>
@@ -16,18 +16,11 @@ const props = defineProps({
16
16
  </script>
17
17
 
18
18
  <template>
19
- <h2
20
- v-if="props.caption"
21
- class="features-list-caption"
22
- >
19
+ <h2 v-if="props.caption" class="features-list-caption">
23
20
  {{ props.caption }}
24
21
  </h2>
25
22
  <ul class="features-list-ul">
26
- <li
27
- v-for="(item, index) in props.items"
28
- :key="index"
29
- class="features-list-item"
30
- >
23
+ <li v-for="(item, index) in props.items" :key="index" class="features-list-item">
31
24
  {{ item }}
32
25
  </li>
33
26
  </ul>
@@ -1,47 +1,20 @@
1
1
  <template>
2
- <div
3
- class="relative flex"
4
- title="FUCK PUTIN! FUCK RUZZIA!"
5
- >
6
- <div
7
- i-mdi:tank
8
- class="inline-block bg-ukraine mr-1 mt-0.5"
9
- />
10
- <div
11
- i-mdi:tank
12
- class="inline-block bg-ukraine mr-1 mt-0.5"
13
- />
14
- <div
15
- i-mdi:tank
16
- class="inline-block bg-ukraine mr-5 mt-0.5"
17
- />
2
+ <div class="relative flex" title="FUCK PUTIN! FUCK RUZZIA!">
3
+ <div i-mdi:tank class="inline-block bg-ukraine mr-1 mt-0.5" />
4
+ <div i-mdi:tank class="inline-block bg-ukraine mr-1 mt-0.5" />
5
+ <div i-mdi:tank class="inline-block bg-ukraine mr-5 mt-0.5" />
18
6
  <div class="relative">
19
- <div
20
- class="inline-block absolute"
21
- i-noto-v1:flag-for-flag-russia
22
- />
23
- <div
24
- i-emojione:fire
25
- class="inline-block absolute -mt-1 animate-ping animate-pulseR"
26
- />
7
+ <div class="inline-block absolute" i-noto-v1:flag-for-flag-russia />
8
+ <div i-emojione:fire class="inline-block absolute -mt-1 animate-ping animate-pulseR" />
27
9
  </div>
28
10
  <div class="absolute left-0 animate-bull animate-bull--1 -mt-1">
29
- <div
30
- i-mdi:bullet
31
- class="rotate-90 inline-block bg-yellow"
32
- />
11
+ <div i-mdi:bullet class="rotate-90 inline-block bg-yellow" />
33
12
  </div>
34
13
  <div class="absolute left-0 animate-bull animate-bull animate-bull--2 -mt-1">
35
- <div
36
- i-mdi:bullet
37
- class="rotate-90 inline-block bg-yellow"
38
- />
14
+ <div i-mdi:bullet class="rotate-90 inline-block bg-yellow" />
39
15
  </div>
40
16
  <div class="absolute left-0 animate-bull animate-bull--3 -mt-1">
41
- <div
42
- i-mdi:bullet
43
- class="rotate-90 inline-block bg-yellow"
44
- />
17
+ <div i-mdi:bullet class="rotate-90 inline-block bg-yellow" />
45
18
  </div>
46
19
  </div>
47
20
  </template>
@@ -28,11 +28,7 @@ if (!handDrive || (handDrive !== 'lhd' && handDrive !== 'rhd')) {
28
28
  const titleText = title || handDrive.toUpperCase();
29
29
  ---
30
30
 
31
- <div
32
- title={titleText}
33
- class="flex items-center"
34
- class:list={className}
35
- >
31
+ <div title={titleText} class="flex items-center" class:list={className}>
36
32
  <Image
37
33
  src={handDriveImage}
38
34
  alt={`${handDrive.toUpperCase()} hand drive`}
@@ -40,13 +36,7 @@ const titleText = title || handDrive.toUpperCase();
40
36
  height={34}
41
37
  class={handDrive}
42
38
  />
43
- {
44
- text && (
45
- <div class={`ml-2 ${biggerText ? 'text-sm md:text-base' : 'text-xxs md:text-xs'}`}>
46
- {text}
47
- </div>
48
- )
49
- }
39
+ {text && <div class={`ml-2 ${biggerText ? 'text-sm md:text-base' : 'text-xxs md:text-xs'}`}>{text}</div>}
50
40
  </div>
51
41
 
52
42
  <style>