spoko-design-system 0.4.9 → 0.5.1

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 (173) hide show
  1. package/.astro/data-store.json +1 -1
  2. package/.astro/settings.json +4 -4
  3. package/.github/dependabot.yml +11 -11
  4. package/.github/todo.yml +3 -3
  5. package/.github/workflows/deploy.yml +39 -39
  6. package/.stackblitzrc +5 -5
  7. package/.vscode/extensions.json +5 -5
  8. package/.vscode/launch.json +11 -11
  9. package/.vscode/settings.json +5 -5
  10. package/LICENSE +21 -21
  11. package/README.md +114 -114
  12. package/astro-i18next.config.mjs +17 -17
  13. package/astro-i18next.config.ts +10 -10
  14. package/astro.config.mjs +86 -86
  15. package/dev-dist/sw.js +91 -91
  16. package/dev-dist/workbox-c676b6d3.js +3391 -3391
  17. package/icon.config.ts +278 -278
  18. package/index.ts +65 -65
  19. package/package.json +124 -124
  20. package/public/fonts/lg.svg +53 -53
  21. package/public/fonts/vwhead-bold-demo.html +549 -549
  22. package/public/fonts/vwhead-regular-demo.html +549 -549
  23. package/public/fonts/vwtext-bold-demo.html +549 -549
  24. package/public/fonts/vwtext-regular-demo.html +549 -549
  25. package/public/github.svg +3 -3
  26. package/public/grid_dot.svg +4 -4
  27. package/public/linkedin.svg +44 -44
  28. package/public/locales/en/translation.json +8 -8
  29. package/public/locales/pl/translation.json +8 -8
  30. package/public/make-scrollable-code-focusable.js +3 -3
  31. package/public/pagefind.yml +3 -3
  32. package/public/polo.blue.svg +29 -29
  33. package/public/spoko.space.svg +71 -71
  34. package/public/twitter.svg +46 -46
  35. package/renovate.json +6 -6
  36. package/sandbox.config.json +11 -11
  37. package/src/MyComponent.astro +8 -8
  38. package/src/components/Badge.vue +19 -19
  39. package/src/components/Badges.vue +21 -21
  40. package/src/components/Breadcrumbs.vue +107 -107
  41. package/src/components/Button.vue +87 -87
  42. package/src/components/ButtonCopy.astro +183 -183
  43. package/src/components/ButtonCopy.vue +36 -36
  44. package/src/components/Card.astro +27 -27
  45. package/src/components/Carousel.astro +26 -26
  46. package/src/components/Category/CategoriesCarousel.astro +101 -101
  47. package/src/components/Category/CategoryDetails.astro +169 -169
  48. package/src/components/Category/CategoryLink.vue +23 -23
  49. package/src/components/Category/CategorySidebarToggler.vue +9 -9
  50. package/src/components/Category/CategoryTile.astro +38 -38
  51. package/src/components/Category/CategoryViewToggler.astro +89 -89
  52. package/src/components/Category/SubCategoryLink.vue +19 -19
  53. package/src/components/CategoryLink.astro +18 -18
  54. package/src/components/Copyright.astro +12 -12
  55. package/src/components/Date.astro +7 -7
  56. package/src/components/Faq.astro +33 -33
  57. package/src/components/FaqItem.astro +80 -80
  58. package/src/components/FeaturesList.vue +41 -41
  59. package/src/components/FuckRussia.vue +62 -62
  60. package/src/components/HandDrive.astro +29 -29
  61. package/src/components/Header/Header.astro +210 -210
  62. package/src/components/Header/SkipToContent.astro +1 -1
  63. package/src/components/Headline.vue +48 -48
  64. package/src/components/Image.astro +30 -30
  65. package/src/components/Input.astro +2 -2
  66. package/src/components/Jumbotron/variants/PostSplit.astro +9 -1
  67. package/src/components/LeftSidebar.astro +53 -53
  68. package/src/components/MainColors.vue +22 -22
  69. package/src/components/MainInput.vue +15 -15
  70. package/src/components/Modal.astro +27 -27
  71. package/src/components/PageContent.astro +5 -5
  72. package/src/components/PartNumber.vue +27 -27
  73. package/src/components/PostHeader.astro +103 -103
  74. package/src/components/PrCode.vue +141 -141
  75. package/src/components/Product/ProductButton.vue +18 -18
  76. package/src/components/Product/ProductCarousel.astro +35 -35
  77. package/src/components/Product/ProductCodes.vue +174 -174
  78. package/src/components/Product/ProductEngineType.vue +42 -42
  79. package/src/components/Product/ProductImage.astro +40 -40
  80. package/src/components/Product/ProductLink.astro +101 -101
  81. package/src/components/Product/ProductLink.vue +59 -59
  82. package/src/components/Product/ProductLinkInfo.astro +37 -37
  83. package/src/components/Product/ProductNumber.astro +60 -60
  84. package/src/components/ProductCarousel.astro +38 -38
  85. package/src/components/ProductCodes.vue +39 -39
  86. package/src/components/ProductDetailName.vue +52 -52
  87. package/src/components/ProductDetailsList.vue +65 -65
  88. package/src/components/ProductTile.astro +48 -48
  89. package/src/components/Quote.vue +23 -23
  90. package/src/components/ReloadPrompt.astro +50 -50
  91. package/src/components/SlimBanner.vue +72 -72
  92. package/src/components/Table.vue +32 -32
  93. package/src/components/TableOfContents.astro +15 -15
  94. package/src/components/Translations.vue +23 -23
  95. package/src/components/flags/FlagPL.vue +3 -3
  96. package/src/components/flags/FlagUA.vue +2 -2
  97. package/src/components/layout/Container.astro +7 -7
  98. package/src/components/layout/Header.astro +80 -80
  99. package/src/config.ts +56 -56
  100. package/src/design.config.ts +98 -98
  101. package/src/env.d.ts +6 -6
  102. package/src/layouts/Layout.astro +61 -61
  103. package/src/layouts/MainLayout.astro +81 -81
  104. package/src/layouts/partials/FooterCommon.astro +4 -4
  105. package/src/layouts/partials/HeadCommon.astro +44 -44
  106. package/src/layouts/partials/HeadSEO.astro +41 -41
  107. package/src/pages/components/badges.mdx +57 -57
  108. package/src/pages/components/breadcrumbs.mdx +139 -139
  109. package/src/pages/components/buttons.mdx +360 -360
  110. package/src/pages/components/card.mdx +294 -294
  111. package/src/pages/components/carousel.mdx +62 -62
  112. package/src/pages/components/copyright.mdx +42 -42
  113. package/src/pages/components/details-list.mdx +115 -115
  114. package/src/pages/components/features-list.mdx +37 -37
  115. package/src/pages/components/flags.mdx +49 -49
  116. package/src/pages/components/fuck-russia.mdx +39 -39
  117. package/src/pages/components/hand-drive.mdx +38 -38
  118. package/src/pages/components/headline.mdx +152 -152
  119. package/src/pages/components/icons.astro +135 -135
  120. package/src/pages/components/image.mdx +513 -513
  121. package/src/pages/components/input.mdx +47 -47
  122. package/src/pages/components/jumbotron.mdx +359 -359
  123. package/src/pages/components/modal.mdx +64 -64
  124. package/src/pages/components/post-header.mdx +60 -60
  125. package/src/pages/components/pr-code.mdx +65 -65
  126. package/src/pages/components/product-number.mdx +58 -58
  127. package/src/pages/components/product-tile.mdx +51 -51
  128. package/src/pages/components/quote.mdx +33 -33
  129. package/src/pages/components/slimbanner.mdx +35 -35
  130. package/src/pages/components/table.mdx +108 -108
  131. package/src/pages/core/colors.mdx +10 -10
  132. package/src/pages/core/grid.mdx +89 -89
  133. package/src/pages/core/introduction.mdx +77 -77
  134. package/src/pages/core/shadows.astro +20 -20
  135. package/src/pages/core/typography.astro +49 -49
  136. package/src/pages/index.astro +130 -130
  137. package/src/pages/patterns/introduction.mdx +60 -60
  138. package/src/pwa.ts +12 -12
  139. package/src/styles/_variables.scss +70 -70
  140. package/src/styles/base/base.css +184 -184
  141. package/src/styles/base/grid.css +92 -92
  142. package/src/styles/base/typography.css +70 -70
  143. package/src/styles/content.css +73 -73
  144. package/src/styles/main.css +7 -7
  145. package/src/types/Product.ts +31 -31
  146. package/src/types/astro.d.ts +3 -3
  147. package/src/utils/product/getPriceFormatted.ts +15 -15
  148. package/src/utils/product/getProductChecklist.ts +17 -17
  149. package/src/utils/product/useFormatProductNumber.ts +41 -41
  150. package/src/utils/seo/getShorterDescription.ts +14 -14
  151. package/src/utils/text/formatDate.ts +5 -5
  152. package/src/utils/text/formatLocaleNumber.ts +6 -6
  153. package/src/utils/text/formatPad.ts +12 -12
  154. package/src/utils/text/getNumberFormatted.ts +33 -33
  155. package/src/utils/text/getTranslatedLink.ts +5 -5
  156. package/src/utils/text.ts +19 -19
  157. package/tailwind.config.cjs +8 -8
  158. package/tsconfig.json +28 -28
  159. package/uno-config/index.ts +61 -61
  160. package/uno-config/theme/breakpoints.ts +9 -9
  161. package/uno-config/theme/colors.ts +64 -64
  162. package/uno-config/theme/container.ts +8 -7
  163. package/uno-config/theme/dimensions.ts +17 -17
  164. package/uno-config/theme/effects.ts +14 -14
  165. package/uno-config/theme/grid.ts +10 -10
  166. package/uno-config/theme/index.ts +28 -28
  167. package/uno-config/theme/shortcuts/buttons.ts +42 -42
  168. package/uno-config/theme/shortcuts/components.ts +92 -92
  169. package/uno-config/theme/shortcuts/index.ts +18 -18
  170. package/uno-config/theme/shortcuts/jumbotron.ts +8 -4
  171. package/uno-config/theme/shortcuts/layout.ts +64 -64
  172. package/uno-config/theme/typography.ts +29 -29
  173. package/uno.config.ts +2 -2
@@ -1 +1 @@
1
- <a href="#article" class="sr-only focus:not-sr-only skiplink"><span>Skip to Content</span></a>
1
+ <a href="#article" class="sr-only focus:not-sr-only skiplink"><span>Skip to Content</span></a>
@@ -1,48 +1,48 @@
1
- <script setup lang="ts">
2
- import type { PropType } from 'vue'
3
-
4
- const props = defineProps({
5
- as: {
6
- type: String as PropType<'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'div' | 'span'>,
7
- default: 'span',
8
- required: true,
9
- },
10
- textSize: {
11
- type: String as PropType<'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl' | '7xl' | '8xl' | '9xl'>,
12
- required: false,
13
- default: null
14
- },
15
- underline: {
16
- type: Boolean,
17
- required: false,
18
- default: false
19
- }
20
- })
21
- </script>
22
-
23
- <template>
24
- <component :is="props.as" class="mb-2.5 flex sm:block md:flex items-center leading-none"
25
- :class="`headline ${props.textSize ? `text-${props.textSize}` : 'text-xl'} ${props.underline ? 'headline--underline' : ''}`">
26
- <slot />
27
- </component>
28
- </template>
29
-
30
- <style>
31
- .headline--underline {
32
- @apply relative pb-4;
33
-
34
- &:after {
35
- @apply content-empty absolute left-0 bottom-0;
36
- height: 3px;
37
- width: 55px;
38
- background-color: var(--clr-primary-400);
39
- }
40
-
41
- &:before {
42
- @apply content-empty absolute left-0 bottom-px h-px;
43
- width: 95%;
44
- max-width: 255px;
45
- background-color: #64748b
46
- }
47
- }
48
- </style>
1
+ <script setup lang="ts">
2
+ import type { PropType } from 'vue'
3
+
4
+ const props = defineProps({
5
+ as: {
6
+ type: String as PropType<'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'div' | 'span'>,
7
+ default: 'span',
8
+ required: true,
9
+ },
10
+ textSize: {
11
+ type: String as PropType<'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl' | '7xl' | '8xl' | '9xl'>,
12
+ required: false,
13
+ default: null
14
+ },
15
+ underline: {
16
+ type: Boolean,
17
+ required: false,
18
+ default: false
19
+ }
20
+ })
21
+ </script>
22
+
23
+ <template>
24
+ <component :is="props.as" class="mb-2.5 flex sm:block md:flex items-center leading-none"
25
+ :class="`headline ${props.textSize ? `text-${props.textSize}` : 'text-xl'} ${props.underline ? 'headline--underline' : ''}`">
26
+ <slot />
27
+ </component>
28
+ </template>
29
+
30
+ <style>
31
+ .headline--underline {
32
+ @apply relative pb-4;
33
+
34
+ &:after {
35
+ @apply content-empty absolute left-0 bottom-0;
36
+ height: 3px;
37
+ width: 55px;
38
+ background-color: var(--clr-primary-400);
39
+ }
40
+
41
+ &:before {
42
+ @apply content-empty absolute left-0 bottom-px h-px;
43
+ width: 95%;
44
+ max-width: 255px;
45
+ background-color: #64748b
46
+ }
47
+ }
48
+ </style>
@@ -1,30 +1,30 @@
1
- ---
2
- import { Image } from "astro:assets";
3
-
4
- const { imageObject } = Astro.props;
5
- let inputProps = {};
6
-
7
- if (imageObject.index && imageObject.index === 1) {
8
- inputProps["data-pagefind-meta"] = "image[src], image_alt[alt]";
9
- inputProps["loading"] = "eager";
10
- }
11
-
12
- if (imageObject.srcset && imageObject.srcset.length) {
13
- inputProps["widths"] = imageObject.srcset;
14
- }
15
- ---
16
-
17
- <Image
18
- src={imageObject.src}
19
- alt={imageObject.alt}
20
- height={imageObject.height}
21
- width={imageObject.width}
22
- itemprop="image"
23
- format="avif"
24
- data-pagefind-index-attrs="alt"
25
- onerror="this.style.display='none';"
26
- class={`h-full w-full select-none pointer-none ${
27
- imageObject.class || "object-cover"
28
- }`}
29
- {...inputProps}
30
- />
1
+ ---
2
+ import { Image } from "astro:assets";
3
+
4
+ const { imageObject } = Astro.props;
5
+ let inputProps = {};
6
+
7
+ if (imageObject.index && imageObject.index === 1) {
8
+ inputProps["data-pagefind-meta"] = "image[src], image_alt[alt]";
9
+ inputProps["loading"] = "eager";
10
+ }
11
+
12
+ if (imageObject.srcset && imageObject.srcset.length) {
13
+ inputProps["widths"] = imageObject.srcset;
14
+ }
15
+ ---
16
+
17
+ <Image
18
+ src={imageObject.src}
19
+ alt={imageObject.alt}
20
+ height={imageObject.height}
21
+ width={imageObject.width}
22
+ itemprop="image"
23
+ format="avif"
24
+ data-pagefind-index-attrs="alt"
25
+ onerror="this.style.display='none';"
26
+ class={`h-full w-full select-none pointer-none ${
27
+ imageObject.class || "object-cover"
28
+ }`}
29
+ {...inputProps}
30
+ />
@@ -5,7 +5,7 @@ interface Props {
5
5
  name?: string;
6
6
  label: string;
7
7
  variant?: 'filled' | 'standard';
8
- type?: string;
8
+ type?: HTMLInputElement['type'];
9
9
  value?: string;
10
10
  required?: boolean;
11
11
  }
@@ -23,7 +23,7 @@ const {
23
23
  // Common classes for both variants
24
24
  const baseInputClasses = "block w-full text-sm text-blue-medium border-0 border-b-2 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";
25
25
 
26
- const baseLabelClasses = "absolute text-sm text-slate-medium dark:text-neutral-defaultduration-300 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";
26
+ 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";
27
27
 
28
28
  // Variant specific classes
29
29
  const variantClasses = {
@@ -23,6 +23,14 @@ const {
23
23
  hasMetadata,
24
24
  hasCategories,
25
25
  } = Astro.props;
26
+
27
+ // Helper function to remove HTML tags
28
+ const stripHtml = (html: string) => {
29
+ return html.replace(/<[^>]*>/g, '');
30
+ };
31
+
32
+ // Get clean title for alt attribute
33
+ const cleanTitle = stripHtml(title);
26
34
  ---
27
35
 
28
36
  <div class="jumbotron-split-wrapper bg-blue-900 bg-vw">
@@ -58,7 +66,7 @@ const {
58
66
  <Image
59
67
  class="jumbotron-split-img"
60
68
  src={image}
61
- alt={title}
69
+ alt={cleanTitle}
62
70
  width={768}
63
71
  height={432}
64
72
  loading="eager"
@@ -1,53 +1,53 @@
1
- ---
2
- import { SIDEBAR } from "../config";
3
- import { Astronav, MenuItems } from "astro-navbar";
4
- const { currentPage } = Astro.props;
5
- const currentPageMatch = currentPage.slice(1);
6
-
7
- const isCurrentPage = (item) => {
8
- if (item.link) {
9
- return item.link.includes(currentPageMatch);
10
- }
11
- return false;
12
- };
13
-
14
- const getLinkClasses = (link) => {
15
- const baseClasses =
16
- "block py-1.5 px-6 my-1 transition-colors border-l hover:border-slate-400 text-slate-500 hover:text-slate-900";
17
-
18
- if (isCurrentPage(link)) {
19
- return baseClasses + " border-slate-500 text-slate-900";
20
- } else {
21
- return baseClasses;
22
- }
23
- };
24
- ---
25
-
26
- <Astronav>
27
- <MenuItems
28
- class="hidden z-20 bg-blue-gray-100 w-64 h-full overflow-y-auto px-4 border-r pb-3 absolute lg:(relative bg-blue-lightest bg-opacity-5 flex)"
29
- >
30
- <ul class="mt-0 mb-auto">
31
- {
32
- SIDEBAR.map((item) =>
33
- item.header ? (
34
- <h2 class="mt-4 font-semibold text-slate-700">{item.text}</h2>
35
- ) : (
36
- <li class={getLinkClasses(item)}>
37
- <a href={item.link}>{item.text}</a>
38
- </li>
39
- ),
40
- )
41
- }
42
- </ul>
43
- </MenuItems>
44
- </Astronav>
45
-
46
- <script is:inline>
47
- window.addEventListener("DOMContentLoaded", (event) => {
48
- var target = document.querySelector('[aria-current="page"]');
49
- if (target && target.offsetTop > window.innerHeight - 100) {
50
- document.querySelector(".nav-groups").scrollTop = target.offsetTop;
51
- }
52
- });
53
- </script>
1
+ ---
2
+ import { SIDEBAR } from "../config";
3
+ import { Astronav, MenuItems } from "astro-navbar";
4
+ const { currentPage } = Astro.props;
5
+ const currentPageMatch = currentPage.slice(1);
6
+
7
+ const isCurrentPage = (item) => {
8
+ if (item.link) {
9
+ return item.link.includes(currentPageMatch);
10
+ }
11
+ return false;
12
+ };
13
+
14
+ const getLinkClasses = (link) => {
15
+ const baseClasses =
16
+ "block py-1.5 px-6 my-1 transition-colors border-l hover:border-slate-400 text-slate-500 hover:text-slate-900";
17
+
18
+ if (isCurrentPage(link)) {
19
+ return baseClasses + " border-slate-500 text-slate-900";
20
+ } else {
21
+ return baseClasses;
22
+ }
23
+ };
24
+ ---
25
+
26
+ <Astronav>
27
+ <MenuItems
28
+ class="hidden z-20 bg-blue-gray-100 w-64 h-full overflow-y-auto px-4 border-r pb-3 absolute lg:(relative bg-blue-lightest bg-opacity-5 flex)"
29
+ >
30
+ <ul class="mt-0 mb-auto">
31
+ {
32
+ SIDEBAR.map((item) =>
33
+ item.header ? (
34
+ <h2 class="mt-4 font-semibold text-slate-700">{item.text}</h2>
35
+ ) : (
36
+ <li class={getLinkClasses(item)}>
37
+ <a href={item.link}>{item.text}</a>
38
+ </li>
39
+ ),
40
+ )
41
+ }
42
+ </ul>
43
+ </MenuItems>
44
+ </Astronav>
45
+
46
+ <script is:inline>
47
+ window.addEventListener("DOMContentLoaded", (event) => {
48
+ var target = document.querySelector('[aria-current="page"]');
49
+ if (target && target.offsetTop > window.innerHeight - 100) {
50
+ document.querySelector(".nav-groups").scrollTop = target.offsetTop;
51
+ }
52
+ });
53
+ </script>
@@ -1,23 +1,23 @@
1
- <script setup lang="ts">
2
- import { colors } from "./../../uno-config/theme/colors";
3
-
4
- // Get color categories
5
- const colorCategories = Object.entries(colors);
6
- </script>
7
-
8
- <template>
9
- <div class="flex flex-col space-y-12">
10
- <div v-for="[category, shades] in colorCategories" :key="category">
11
- <h3 class="capitalize">{{ category }}</h3>
12
- <div class="grid grid-cols-3 md:grid-cols-9">
13
- <div v-for="(value, name) in shades" :key="name" class="mb-6">
14
- <div class="h-12 transition-all" :style="`background: ${value}`"></div>
15
- <div class="text-sm flex flex-col text-center font-mono text-slate-500">
16
- <span>{{ name }}</span>
17
- <span class="uppercase text-xs">{{ value }}</span>
18
- </div>
19
- </div>
20
- </div>
21
- </div>
22
- </div>
1
+ <script setup lang="ts">
2
+ import { colors } from "./../../uno-config/theme/colors";
3
+
4
+ // Get color categories
5
+ const colorCategories = Object.entries(colors);
6
+ </script>
7
+
8
+ <template>
9
+ <div class="flex flex-col space-y-12">
10
+ <div v-for="[category, shades] in colorCategories" :key="category">
11
+ <h3 class="capitalize">{{ category }}</h3>
12
+ <div class="grid grid-cols-3 md:grid-cols-9">
13
+ <div v-for="(value, name) in shades" :key="name" class="mb-6">
14
+ <div class="h-12 transition-all" :style="`background: ${value}`"></div>
15
+ <div class="text-sm flex flex-col text-center font-mono text-slate-500">
16
+ <span>{{ name }}</span>
17
+ <span class="uppercase text-xs">{{ value }}</span>
18
+ </div>
19
+ </div>
20
+ </div>
21
+ </div>
22
+ </div>
23
23
  </template>
@@ -1,15 +1,15 @@
1
- <script setup lang="ts">
2
- const props = defineProps<{
3
- label: string;
4
- }>();
5
- </script>
6
-
7
- <template>
8
- <label class="group text-left w-full max-w-xs flex flex-col">
9
- <span class="group-hover:text-blue-medium ml-2 text-slate-600 text-sm group-focus-within:text-blue-medium">{{ label
10
- }}</span>
11
- <input
12
- class="group-hover:border-blue-lightest border px-4 py-2 transition-colors rounded-md w-full focus:ring focus:outline-none focus:border-blue-medium"
13
- type="text" />
14
- </label>
15
- </template>
1
+ <script setup lang="ts">
2
+ const props = defineProps<{
3
+ label: string;
4
+ }>();
5
+ </script>
6
+
7
+ <template>
8
+ <label class="group text-left w-full max-w-xs flex flex-col">
9
+ <span class="group-hover:text-blue-medium ml-2 text-slate-600 text-sm group-focus-within:text-blue-medium">{{ label
10
+ }}</span>
11
+ <input
12
+ class="group-hover:border-blue-lightest border px-4 py-2 transition-colors rounded-md w-full focus:ring focus:outline-none focus:border-blue-medium"
13
+ type="text" />
14
+ </label>
15
+ </template>
@@ -1,27 +1,27 @@
1
- ---
2
- const { id, open } = Astro.props;
3
- import Button from "../components/Button.vue";
4
- ---
5
-
6
- <style >
7
- dialog {
8
- @apply fixed top-0 left-0 right-0 bottom-0;
9
-
10
- &::backdrop {
11
- @apply bg-slate-medium/50 fixed;
12
- top: 0px;
13
- right: 0px;
14
- bottom: 0px;
15
- left: 0px;
16
- }
17
- }
18
- </style>
19
-
20
- <Button primary onclick={`window.${id}.showModal()`}>{open}</Button>
21
-
22
- <dialog id={id} class="p-6">
23
- <slot name="main" />
24
- <form method="dialog">
25
- <slot name="close" />
26
- </form>
27
- </dialog>
1
+ ---
2
+ const { id, open } = Astro.props;
3
+ import Button from "../components/Button.vue";
4
+ ---
5
+
6
+ <style >
7
+ dialog {
8
+ @apply fixed top-0 left-0 right-0 bottom-0;
9
+
10
+ &::backdrop {
11
+ @apply bg-slate-medium/50 fixed;
12
+ top: 0px;
13
+ right: 0px;
14
+ bottom: 0px;
15
+ left: 0px;
16
+ }
17
+ }
18
+ </style>
19
+
20
+ <Button primary onclick={`window.${id}.showModal()`}>{open}</Button>
21
+
22
+ <dialog id={id} class="p-6">
23
+ <slot name="main" />
24
+ <form method="dialog">
25
+ <slot name="close" />
26
+ </form>
27
+ </dialog>
@@ -1,5 +1,5 @@
1
- <article id="article" class="content">
2
- <section class="main-section">
3
- <slot />
4
- </section>
5
- </article>
1
+ <article id="article" class="content">
2
+ <section class="main-section">
3
+ <slot />
4
+ </section>
5
+ </article>
@@ -1,28 +1,28 @@
1
- <script lang="ts" setup>
2
- import { PropType } from 'vue';
3
-
4
- const props = defineProps({
5
- as: {
6
- type: String as PropType<'div' | 'td' | 'span' | 'h1' | 'h2' | 'h3'>,
7
- default: 'div',
8
- required: true,
9
- },
10
- number: {
11
- type: String,
12
- default: '',
13
- required: true,
14
- },
15
- class: {
16
- type: String,
17
- default: '',
18
- required: false,
19
- },
20
- })
21
-
22
- </script>
23
-
24
- <template>
25
- <component :is="props.as" :class="props.class">
26
- {{ props.number }}
27
- </component>
1
+ <script lang="ts" setup>
2
+ import { PropType } from 'vue';
3
+
4
+ const props = defineProps({
5
+ as: {
6
+ type: String as PropType<'div' | 'td' | 'span' | 'h1' | 'h2' | 'h3'>,
7
+ default: 'div',
8
+ required: true,
9
+ },
10
+ number: {
11
+ type: String,
12
+ default: '',
13
+ required: true,
14
+ },
15
+ class: {
16
+ type: String,
17
+ default: '',
18
+ required: false,
19
+ },
20
+ })
21
+
22
+ </script>
23
+
24
+ <template>
25
+ <component :is="props.as" :class="props.class">
26
+ {{ props.number }}
27
+ </component>
28
28
  </template>