spoko-design-system 0.1.3 → 0.1.5
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/package.json +16 -16
- package/src/components/FeaturesList.vue +41 -0
- package/src/components/Headline.vue +1 -1
- package/src/components/PartNumber.vue +28 -0
- package/src/components/PrCode.vue +1 -1
- package/src/components/ProductCodes.vue +39 -0
- package/src/components/ProductDetailName.vue +56 -0
- package/src/components/ProductDetailsList.vue +62 -0
- package/src/components/ProductNumber copy.astro +116 -0
- package/src/components/ProductNumber.astro +25 -34
- package/src/components/ProductTile.astro +1 -1
- package/src/components/SlimBanner.vue +2 -2
- package/src/config.ts +2 -0
- package/src/layouts/Layout.astro +1 -1
- package/src/pages/components/buttons.mdx +2 -2
- package/src/pages/components/card.mdx +30 -72
- package/src/pages/components/details-list.mdx +108 -0
- package/src/pages/components/features-list.mdx +38 -0
- package/src/pages/components/pr-code.mdx +30 -2
- package/src/pages/components/table.mdx +6 -6
- package/src/pages/index.astro +2 -2
- package/src/pages/patterns/introduction.mdx +3 -3
- package/src/styles/base/_typography.scss +1 -0
- package/src/styles/content.scss +1 -1
- package/uno.config.ts +6 -6
- /package/src/components/{MainTable.vue → Table.vue} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "spoko-design-system",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"private": false,
|
|
5
5
|
"scripts": {
|
|
6
6
|
"dev": "astro dev",
|
|
@@ -28,13 +28,13 @@
|
|
|
28
28
|
],
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@algolia/client-search": "^4.22.1",
|
|
31
|
-
"@astrojs/mdx": "^2.1.
|
|
31
|
+
"@astrojs/mdx": "^2.1.1",
|
|
32
32
|
"@astrojs/node": "^7.0.4",
|
|
33
33
|
"@astrojs/sitemap": "^3.0.5",
|
|
34
34
|
"@astrojs/vue": "^4.0.8",
|
|
35
35
|
"@docsearch/css": "^3.5.2",
|
|
36
36
|
"@docsearch/react": "^3.5.2",
|
|
37
|
-
"@iconify-json/ant-design": "^1.1.
|
|
37
|
+
"@iconify-json/ant-design": "^1.1.15",
|
|
38
38
|
"@iconify-json/bi": "^1.1.23",
|
|
39
39
|
"@iconify-json/bx": "^1.1.10",
|
|
40
40
|
"@iconify-json/carbon": "^1.1.28",
|
|
@@ -42,20 +42,20 @@
|
|
|
42
42
|
"@iconify-json/el": "^1.1.8",
|
|
43
43
|
"@iconify-json/eos-icons": "^1.1.10",
|
|
44
44
|
"@iconify-json/flowbite": "^1.1.0",
|
|
45
|
-
"@iconify-json/fluent": "^1.1.
|
|
45
|
+
"@iconify-json/fluent": "^1.1.47",
|
|
46
46
|
"@iconify-json/fluent-emoji": "1.1.18",
|
|
47
47
|
"@iconify-json/icon-park-outline": "^1.1.15",
|
|
48
48
|
"@iconify-json/la": "^1.1.8",
|
|
49
49
|
"@iconify-json/mdi": "^1.1.64",
|
|
50
50
|
"@iconify-json/noto-v1": "^1.1.11",
|
|
51
51
|
"@iconify-json/octicon": "^1.1.52",
|
|
52
|
-
"@iconify-json/ph": "^1.1.
|
|
53
|
-
"@iconify-json/simple-icons": "^1.
|
|
52
|
+
"@iconify-json/ph": "^1.1.11",
|
|
53
|
+
"@iconify-json/simple-icons": "^1.1.90",
|
|
54
54
|
"@iconify-json/uil": "^1.1.8",
|
|
55
|
-
"@iconify/json": "^2.2.
|
|
55
|
+
"@iconify/json": "^2.2.178",
|
|
56
56
|
"@iconify/vue": "^4.1.1",
|
|
57
|
-
"@types/node": "^20.11.
|
|
58
|
-
"@types/react": "^18.2.
|
|
57
|
+
"@types/node": "^20.11.16",
|
|
58
|
+
"@types/react": "^18.2.51",
|
|
59
59
|
"@unocss/astro": "^0.58.4",
|
|
60
60
|
"@unocss/preset-attributify": "^0.58.4",
|
|
61
61
|
"@unocss/preset-typography": "^0.58.4",
|
|
@@ -64,25 +64,25 @@
|
|
|
64
64
|
"@unocss/preset-wind": "^0.58.4",
|
|
65
65
|
"@unocss/reset": "^0.58.4",
|
|
66
66
|
"@vueuse/core": "^10.7.2",
|
|
67
|
-
"astro-compress": "^2.2.
|
|
67
|
+
"astro-compress": "^2.2.9",
|
|
68
68
|
"astro-i18next": "1.0.0-beta.21",
|
|
69
|
-
"astro-icon": "^1.0
|
|
69
|
+
"astro-icon": "^1.1.0",
|
|
70
70
|
"astro-navbar": "^2.3.0",
|
|
71
71
|
"astro-pagefind": "^1.4.0",
|
|
72
|
-
"i18next": "^23.
|
|
72
|
+
"i18next": "^23.8.2",
|
|
73
73
|
"i18next-browser-languagedetector": "^7.2.0",
|
|
74
74
|
"i18next-fs-backend": "^2.3.1",
|
|
75
|
-
"i18next-http-backend": "^2.4.
|
|
75
|
+
"i18next-http-backend": "^2.4.3",
|
|
76
76
|
"i18next-vue": "^3.0.0",
|
|
77
77
|
"sass": "^1.70.0",
|
|
78
|
+
"swiper": "^11.0.5",
|
|
78
79
|
"unocss": "^0.57.7",
|
|
79
80
|
"vite": "^5.0.12",
|
|
80
|
-
"vue": "^3.4.15"
|
|
81
|
-
"swiper": "^11.0.5"
|
|
81
|
+
"vue": "^3.4.15"
|
|
82
82
|
},
|
|
83
83
|
"devDependencies": {
|
|
84
84
|
"@unocss/transformer-variant-group": "^0.58.4",
|
|
85
|
-
"astro": "^4.2
|
|
85
|
+
"astro": "^4.3.2",
|
|
86
86
|
"unocss": "^0.58.3"
|
|
87
87
|
},
|
|
88
88
|
"pnpm": {
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
|
|
2
|
+
<script lang="ts" setup>
|
|
3
|
+
import { PropType } from 'vue';
|
|
4
|
+
|
|
5
|
+
const props = defineProps({
|
|
6
|
+
items: {
|
|
7
|
+
type: Object as PropType<String[] | null>,
|
|
8
|
+
default: null,
|
|
9
|
+
required: true,
|
|
10
|
+
},
|
|
11
|
+
caption: {
|
|
12
|
+
type: Object as PropType<String | null>,
|
|
13
|
+
default: null,
|
|
14
|
+
required: false,
|
|
15
|
+
}
|
|
16
|
+
})
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<template>
|
|
20
|
+
<h2 class="font-headregular mb-2 font-medium text-lg colon-after" v-if="props.caption">{{ props.caption }}</h2>
|
|
21
|
+
<ul class="">
|
|
22
|
+
<li v-for="item in props.items" class="leading-5">
|
|
23
|
+
{{ item }}
|
|
24
|
+
</li>
|
|
25
|
+
</ul>
|
|
26
|
+
</template>
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
<style lang="scss" scoped>
|
|
30
|
+
ul {
|
|
31
|
+
@apply list-square pl-5;
|
|
32
|
+
|
|
33
|
+
li {
|
|
34
|
+
@apply relative mb-2;
|
|
35
|
+
|
|
36
|
+
&::marker {
|
|
37
|
+
@apply text-blue-400;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
</style>
|
|
@@ -0,0 +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>
|
|
28
|
+
</template>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import type { PropType } from 'vue'
|
|
3
|
+
import PrCode from './PrCode.vue';
|
|
4
|
+
|
|
5
|
+
const props = defineProps({
|
|
6
|
+
prcodes: {
|
|
7
|
+
type: Object as PropType<string[] | null>,
|
|
8
|
+
default: null,
|
|
9
|
+
required: true,
|
|
10
|
+
},
|
|
11
|
+
isPdp: {
|
|
12
|
+
type: Boolean,
|
|
13
|
+
default: false,
|
|
14
|
+
required: false,
|
|
15
|
+
},
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
const codes = props.prcodes || []
|
|
19
|
+
const decodedCodes = codes ? codes.sort() : []
|
|
20
|
+
|
|
21
|
+
const settings = {
|
|
22
|
+
prcodes: decodedCodes,
|
|
23
|
+
}
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<template>
|
|
27
|
+
|
|
28
|
+
<span
|
|
29
|
+
v-for="(prcode, index) in settings.prcodes"
|
|
30
|
+
:key="index"
|
|
31
|
+
class="not-last:mr-1"
|
|
32
|
+
>
|
|
33
|
+
<PrCode :prcode="prcode" v-if="!String(prcode).includes('+')" />
|
|
34
|
+
<span v-else >
|
|
35
|
+
<PrCode v-for="(splittedCode, index2) in String(prcode).split('+')" :key="index2" :prcode="splittedCode" />
|
|
36
|
+
</span>
|
|
37
|
+
</span>
|
|
38
|
+
</template>
|
|
39
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { PropType } from 'vue';
|
|
3
|
+
|
|
4
|
+
const props = defineProps({
|
|
5
|
+
as: {
|
|
6
|
+
type: String as PropType< 'th'| 'td' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'div' | 'span'>,
|
|
7
|
+
default: 'div',
|
|
8
|
+
required: true,
|
|
9
|
+
},
|
|
10
|
+
text: {
|
|
11
|
+
type: String,
|
|
12
|
+
default: '',
|
|
13
|
+
required: true,
|
|
14
|
+
},
|
|
15
|
+
styles: {
|
|
16
|
+
type: String,
|
|
17
|
+
default: '',
|
|
18
|
+
required: false,
|
|
19
|
+
}
|
|
20
|
+
})
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<template>
|
|
24
|
+
<component :is="props.as" class="font-bold detail-name w-full sm:w-50 flex">
|
|
25
|
+
<span class="colon-after" :class="styles && styles.length ? styles : 'mt-auto'">
|
|
26
|
+
{{ props.text }}
|
|
27
|
+
</span>
|
|
28
|
+
</component>
|
|
29
|
+
</template>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<style lang="scss">
|
|
33
|
+
.detail-name {
|
|
34
|
+
@apply overflow-hidden relative;
|
|
35
|
+
|
|
36
|
+
span {
|
|
37
|
+
@apply block bg-white dark:bg-blue-901 relative z-10 pr-1.5 w-full;
|
|
38
|
+
|
|
39
|
+
&:before {
|
|
40
|
+
// order: 2;
|
|
41
|
+
@apply text-gray-300 absolute select-none border-b border-gray-200 dark:border-gray-600 w-full -z-1;
|
|
42
|
+
height: 1em;
|
|
43
|
+
white-space: nowrap;
|
|
44
|
+
font-weight: 100;
|
|
45
|
+
bottom: 3px;
|
|
46
|
+
left: 0;
|
|
47
|
+
flex: 1;
|
|
48
|
+
content: '';
|
|
49
|
+
position:absolute;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
</style>
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { PropType } from "vue";
|
|
3
|
+
import ProductDetailName from "./ProductDetailName.vue";
|
|
4
|
+
|
|
5
|
+
interface TableItem {
|
|
6
|
+
slug: string,
|
|
7
|
+
name: string
|
|
8
|
+
value: unknown
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const props = defineProps({
|
|
12
|
+
items: {type: Array as PropType<TableItem[]>, default: () => []},
|
|
13
|
+
caption: { type: String, default: null }
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<template>
|
|
19
|
+
<table class="details table-auto text-left bg-white">
|
|
20
|
+
<caption v-if="!!$slots.caption || caption">
|
|
21
|
+
<slot name="caption">{{ caption }}</slot>
|
|
22
|
+
</caption>
|
|
23
|
+
<colgroup>
|
|
24
|
+
<col>
|
|
25
|
+
<col>
|
|
26
|
+
</colgroup>
|
|
27
|
+
<tbody>
|
|
28
|
+
<tr class="border" v-for="row, index in props.items" :key="index">
|
|
29
|
+
<ProductDetailName as="th" :text="row.name" />
|
|
30
|
+
<td>
|
|
31
|
+
<slot
|
|
32
|
+
:name="row.slug"
|
|
33
|
+
>
|
|
34
|
+
{{ row.value }}
|
|
35
|
+
</slot>
|
|
36
|
+
</td>
|
|
37
|
+
</tr>
|
|
38
|
+
</tbody>
|
|
39
|
+
</table>
|
|
40
|
+
</template>
|
|
41
|
+
|
|
42
|
+
<style lang="scss">
|
|
43
|
+
.details {
|
|
44
|
+
border: none;
|
|
45
|
+
box-shadow: none;
|
|
46
|
+
|
|
47
|
+
td,
|
|
48
|
+
tr,
|
|
49
|
+
th {
|
|
50
|
+
border: none;
|
|
51
|
+
@apply leading-4 text-sm;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
th {
|
|
55
|
+
@apply pr-0
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
td {
|
|
59
|
+
@apply relative;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
</style>
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { t } from "i18next";
|
|
3
|
+
import ButtonCopy from "./ButtonCopy.vue";
|
|
4
|
+
|
|
5
|
+
const {
|
|
6
|
+
copyDisabled,
|
|
7
|
+
productNumber,
|
|
8
|
+
isPdp,
|
|
9
|
+
small,
|
|
10
|
+
big,
|
|
11
|
+
class: className,
|
|
12
|
+
} = Astro.props;
|
|
13
|
+
|
|
14
|
+
const butonTexts = {
|
|
15
|
+
copy: t("copy"),
|
|
16
|
+
copied: t("copied"),
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const isLetter = (string: string) => {
|
|
20
|
+
return string.toLowerCase() !== string.toUpperCase();
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const niceName = (string: string, separator = "\u00A0") => {
|
|
24
|
+
let word = string; //e.g. to 6Q0947106EY20 .split('+')
|
|
25
|
+
|
|
26
|
+
if (
|
|
27
|
+
isLetter(string[0]) === true &&
|
|
28
|
+
isLetter(string[1]) === false &&
|
|
29
|
+
string.length === 9
|
|
30
|
+
) {
|
|
31
|
+
// mainly liquids
|
|
32
|
+
word = string
|
|
33
|
+
.replace(
|
|
34
|
+
/^(\w{1})(\w{3})(\w{3})(.*)$/,
|
|
35
|
+
`$1${separator}$2${separator}$3${separator}$4`,
|
|
36
|
+
)
|
|
37
|
+
.replace(/(^\s+|\s+$)/, "");
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// wheels / emblems e.g. 6R0601025AK8Z8 --> 6R0 601 025 AB 8Z8 || 6C0601025DFZZ --> 6C0 601 025 D FZZ || 6R0853433ADA1 -> 6R0 853 433 A DA1
|
|
41
|
+
else if (string.length >= 13) {
|
|
42
|
+
// console.log('part number: wheels / emblems', word)
|
|
43
|
+
word = string
|
|
44
|
+
.replace(
|
|
45
|
+
/^(\w{3})(\w{3})(\w{3})(.*)(\w{3})$/,
|
|
46
|
+
`$1${separator}$2${separator}$3${separator}$4${separator}$5`,
|
|
47
|
+
)
|
|
48
|
+
.replace(/(^\s+|\s+$)/, "");
|
|
49
|
+
} else if (string.length > 12) {
|
|
50
|
+
// accessories / mats
|
|
51
|
+
word = string
|
|
52
|
+
.replace(
|
|
53
|
+
/^(\w{3})(\w{3})(\w{3})(\w{1})(.*)$/,
|
|
54
|
+
`$1${separator}$2${separator}$3${separator}$4${separator}$5`,
|
|
55
|
+
)
|
|
56
|
+
.replace(/(^\s+|\s+$)/, "");
|
|
57
|
+
} else {
|
|
58
|
+
// other parts
|
|
59
|
+
word = string
|
|
60
|
+
.replace(/(\w{3})/g, `$1${separator}`)
|
|
61
|
+
.replace(/(^\s+|\s+$)/, "");
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return word.replace(" ", separator);
|
|
65
|
+
};
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
{
|
|
69
|
+
productNumber !== null && (
|
|
70
|
+
<div
|
|
71
|
+
class={`product-number ${
|
|
72
|
+
big ? "text-lg" : `text-sm ${className ? className : "mt-2 sm:mt-0"}`
|
|
73
|
+
}`}
|
|
74
|
+
>
|
|
75
|
+
<div
|
|
76
|
+
class={`inline-flex leading-none relative ${small ? "w-full" : ""}`}
|
|
77
|
+
itemprop="identifier"
|
|
78
|
+
>
|
|
79
|
+
{isPdp ? (
|
|
80
|
+
<h2 id={productNumber} class="product-code">
|
|
81
|
+
{productNumber}
|
|
82
|
+
</h2>
|
|
83
|
+
) : (
|
|
84
|
+
<div id={productNumber} class="product-code">
|
|
85
|
+
{productNumber}
|
|
86
|
+
</div>
|
|
87
|
+
)}
|
|
88
|
+
|
|
89
|
+
{copyDisabled && (
|
|
90
|
+
<ButtonCopy
|
|
91
|
+
productNumber={String(productNumber)}
|
|
92
|
+
texts={butonTexts}
|
|
93
|
+
tooltipClasses=""
|
|
94
|
+
client:only
|
|
95
|
+
/>
|
|
96
|
+
)}
|
|
97
|
+
</div>
|
|
98
|
+
|
|
99
|
+
<div
|
|
100
|
+
class={`code-formatted ${small ? "tracking-wide" : "tracking-tight"}`}
|
|
101
|
+
>
|
|
102
|
+
<div class="relative inset-0" data-pagefind-ignore>
|
|
103
|
+
{niceName(productNumber, ".")}
|
|
104
|
+
</div>
|
|
105
|
+
<div class="absolute inset-0" data-pagefind-ignore>
|
|
106
|
+
{niceName(productNumber, "-")}
|
|
107
|
+
</div>
|
|
108
|
+
{isPdp ? (
|
|
109
|
+
<h3 class="number-secondary">{niceName(productNumber)}</h3>
|
|
110
|
+
) : (
|
|
111
|
+
<div class="number-secondary">{niceName(productNumber)}</div>
|
|
112
|
+
)}
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
)
|
|
116
|
+
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
import { t } from "i18next";
|
|
3
3
|
import ButtonCopy from "./ButtonCopy.vue";
|
|
4
|
+
import PartNumber from "./PartNumber.vue";
|
|
4
5
|
|
|
5
6
|
const {
|
|
6
7
|
copyDisabled,
|
|
7
8
|
productNumber,
|
|
9
|
+
as,
|
|
8
10
|
isPdp,
|
|
9
11
|
small,
|
|
10
12
|
big,
|
|
@@ -63,38 +65,20 @@ const niceName = (string: string, separator = "\u00A0") => {
|
|
|
63
65
|
|
|
64
66
|
return word.replace(" ", separator);
|
|
65
67
|
};
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
const classes = `product-number ${big ? "text-lg" : `text-sm ${className ? className : "mt-2 sm:mt-0"}` }`
|
|
71
|
+
|
|
66
72
|
---
|
|
67
73
|
|
|
74
|
+
<!-- <PartNumber number={productNumber} as="div"></PartNumber> -->
|
|
75
|
+
|
|
76
|
+
|
|
68
77
|
{
|
|
69
78
|
productNumber !== null && (
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}`}
|
|
74
|
-
>
|
|
75
|
-
<div
|
|
76
|
-
class={`inline-flex leading-none relative ${small ? "w-full" : ""}`}
|
|
77
|
-
itemprop="identifier"
|
|
78
|
-
>
|
|
79
|
-
{isPdp ? (
|
|
80
|
-
<h2 id={productNumber} class="product-code">
|
|
81
|
-
{productNumber}
|
|
82
|
-
</h2>
|
|
83
|
-
) : (
|
|
84
|
-
<div id={productNumber} class="product-code">
|
|
85
|
-
{productNumber}
|
|
86
|
-
</div>
|
|
87
|
-
)}
|
|
88
|
-
|
|
89
|
-
{copyDisabled && (
|
|
90
|
-
<ButtonCopy
|
|
91
|
-
productNumber={String(productNumber)}
|
|
92
|
-
texts={butonTexts}
|
|
93
|
-
tooltipClasses=""
|
|
94
|
-
client:only
|
|
95
|
-
/>
|
|
96
|
-
)}
|
|
97
|
-
</div>
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
<PartNumber class={`product-code ${classes}`} number={productNumber} as={isPdp ? 'h2' : 'div'} />
|
|
98
82
|
|
|
99
83
|
<div
|
|
100
84
|
class={`code-formatted ${small ? "tracking-wide" : "tracking-tight"}`}
|
|
@@ -105,12 +89,19 @@ const niceName = (string: string, separator = "\u00A0") => {
|
|
|
105
89
|
<div class="absolute inset-0" data-pagefind-ignore>
|
|
106
90
|
{niceName(productNumber, "-")}
|
|
107
91
|
</div>
|
|
108
|
-
{isPdp ?
|
|
109
|
-
<h3 class="number-secondary">{niceName(productNumber)}</h3>
|
|
110
|
-
) : (
|
|
111
|
-
<div class="number-secondary">{niceName(productNumber)}</div>
|
|
112
|
-
)}
|
|
92
|
+
<PartNumber class="number-secondary" number={niceName(productNumber)} as={isPdp ? 'h3' : 'div'} />
|
|
113
93
|
</div>
|
|
114
|
-
|
|
94
|
+
|
|
115
95
|
)
|
|
116
96
|
}
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
<!-- {!copyDisabled && ( -->
|
|
100
|
+
<ButtonCopy
|
|
101
|
+
class="top-3.5 right-0"
|
|
102
|
+
productNumber={String(productNumber)}
|
|
103
|
+
texts={butonTexts}
|
|
104
|
+
tooltipClasses=""
|
|
105
|
+
client:only
|
|
106
|
+
/>
|
|
107
|
+
<!-- )} -->
|
|
@@ -36,7 +36,7 @@ import ProductNumber from "./ProductNumber.astro"
|
|
|
36
36
|
{ productObject.name }
|
|
37
37
|
</a>
|
|
38
38
|
|
|
39
|
-
<ProductNumber productNumber={productObject.number} copyDisabled={
|
|
39
|
+
<ProductNumber productNumber={productObject.number} copyDisabled={false} />
|
|
40
40
|
|
|
41
41
|
{ index !== null &&
|
|
42
42
|
( <meta itemprop="position" content={String(index)} />
|
|
@@ -16,7 +16,7 @@ const toggleVisibility = () => {
|
|
|
16
16
|
|
|
17
17
|
<template>
|
|
18
18
|
<div v-if="isShow" data-pagefind-ignore
|
|
19
|
-
class="slimbanner bg-lightBlue-500 drop-shadow-md z-2 px-4
|
|
19
|
+
class="slimbanner bg-lightBlue-500 drop-shadow-md z-2 px-4 py-3 flex items-center justify-center text-xs sm:(text-base px-8) leading-none text-white relative print-hidden">
|
|
20
20
|
<span
|
|
21
21
|
class="inline-block text-4xl w-6 h-3.5 min-w-[1.25rem] mr-3 bg-gradient-to-b stops-[#0057b7_50%,50%,#ffd700_100%]" />
|
|
22
22
|
<span class="leading-none "><span
|
|
@@ -31,7 +31,7 @@ const toggleVisibility = () => {
|
|
|
31
31
|
</button>
|
|
32
32
|
</div>
|
|
33
33
|
<div v-else data-pagefind-ignore
|
|
34
|
-
class="px-4 sm:px-8 py-3 flex items-center justify-center text-xs sm:text-base leading-none text-white
|
|
34
|
+
class="px-4 sm:px-8 py-3 flex items-center justify-center text-xs sm:text-base leading-none text-white relative bg-black drop-shadow-md z-2 ">
|
|
35
35
|
<div class="tracking-widest leading-none">
|
|
36
36
|
<span data-text="RUSSIA IS A" /> <span class="underline decoration-red-600 decoration-1 underline-offset-3"
|
|
37
37
|
data-text="TERRORIST" /> <span data-text="STATE" />
|
package/src/config.ts
CHANGED
|
@@ -29,6 +29,8 @@ export const SIDEBAR = [
|
|
|
29
29
|
{ text: "Card", link: "/components/card/" },
|
|
30
30
|
{ text: "Carousel", link: "/components/carousel/" },
|
|
31
31
|
{ text: "Copyright", link: "/components/copyright/" },
|
|
32
|
+
{ text: "Details List", link: "/components/details-list/" },
|
|
33
|
+
{ text: "Features List", link: "/components/features-list/"},
|
|
32
34
|
{ text: "HandDrive", link: "/components/hand-drive/" },
|
|
33
35
|
{ text: "Headline", link: "/components/headline/" },
|
|
34
36
|
{ text: "Icons", link: "/components/icons/" },
|
package/src/layouts/Layout.astro
CHANGED
|
@@ -172,7 +172,7 @@ Rounded edges
|
|
|
172
172
|
<Button tertiary small rounded>Tertiary</Button>
|
|
173
173
|
|
|
174
174
|
<Button text medium small rounded>Text</Button>
|
|
175
|
-
<Button tag small
|
|
175
|
+
<Button tag small rounded>Tag Name</Button>
|
|
176
176
|
</div>
|
|
177
177
|
</div>
|
|
178
178
|
|
|
@@ -193,7 +193,7 @@ Rounded edges
|
|
|
193
193
|
<Button secondary small rounded>Secondary</Button>
|
|
194
194
|
<Button tertiary small rounded>Tertiary</Button>
|
|
195
195
|
<Button text medium small rounded>Text</Button>
|
|
196
|
-
<Button tag small
|
|
196
|
+
<Button tag small rounded>Tag Name</Button>
|
|
197
197
|
```
|
|
198
198
|
|
|
199
199
|
## Outline button
|
|
@@ -12,7 +12,7 @@ import Image from '../../components/Image.astro'
|
|
|
12
12
|
Card - product link component which can be used for carousels, section with related products, recently added etc.
|
|
13
13
|
|
|
14
14
|
<div class="component-preview">
|
|
15
|
-
<div class="grid grid-cols-3 gap-8 w-full" itemscope itemtype="https://schema.org/ItemList">
|
|
15
|
+
<div class="grid grid-cols-1 md:grid-cols-3 gap-8 w-full" itemscope itemtype="https://schema.org/ItemList">
|
|
16
16
|
<Card href="https://google.com" imgAlt="Image Alt" imgSrc="https://img.freepik.com/free-photo/beautiful-green-landscape-with-plantations-trees-cloudy-sky_181624-42918.jpg?w=826&t=st=1706315168~exp=1706315768~hmac=ed7872d0924dbda4322a3d346eef282edd77db3673fc209c933b02e37c29f9ac" >
|
|
17
17
|
<a href="#">
|
|
18
18
|
<h5 class="mb-2 text-2xl font-bold tracking-tight text-gray-900 dark:text-white leading-none">Lorem Ipsum</h5>
|
|
@@ -70,7 +70,7 @@ Card - product link component which can be used for carousels, section with rela
|
|
|
70
70
|
</div>
|
|
71
71
|
|
|
72
72
|
```html
|
|
73
|
-
<div class="grid grid-cols-3 gap-8 w-full" itemscope itemtype="https://schema.org/ItemList">
|
|
73
|
+
<div class="grid grid-cols-1 md:grid-cols-3 gap-8 w-full" itemscope itemtype="https://schema.org/ItemList">
|
|
74
74
|
<Card href="https://google.com" imgAlt="Image Alt" imgSrc="https://img.freepik.com/free-photo/beautiful-green-landscape-with-plantations-trees-cloudy-sky_181624-42918.jpg?w=826&t=st=1706315168~exp=1706315768~hmac=ed7872d0924dbda4322a3d346eef282edd77db3673fc209c933b02e37c29f9ac" >
|
|
75
75
|
<a href="#">
|
|
76
76
|
<h5 class="mb-2 text-2xl font-bold tracking-tight text-gray-900 dark:text-white leading-none">Lorem Ipsum</h5>
|
|
@@ -97,132 +97,96 @@ Card - product link component which can be used for carousels, section with rela
|
|
|
97
97
|
<div class="w-fit mx-auto grid grid-cols-1 lg:grid-cols-3 md:grid-cols-2 justify-items-center justify-center gap-y-20 gap-x-14 mt-10 mb-5 ">
|
|
98
98
|
<div class="w-72 bg-white shadow-md rounded-xl duration-500 hover:scale-105 hover:shadow-xl">
|
|
99
99
|
<a href="#">
|
|
100
|
-
<img src="https://picsum.photos/600/
|
|
100
|
+
<img src="https://picsum.photos/600/500/?random" alt="Product" class="img--1/1 rounded-t-xl" />
|
|
101
101
|
<div class="px-4 py-3 w-72">
|
|
102
102
|
<span class="text-gray-400 mr-3 uppercase text-xs">Brand</span>
|
|
103
103
|
<p class="text-lg font-bold text-black truncate block capitalize">Product Name</p>
|
|
104
104
|
<div class="flex items-center">
|
|
105
|
-
<p class="text-lg font-semibold text-black cursor-auto my-3"
|
|
105
|
+
<p class="text-lg font-semibold text-black cursor-auto my-3">€149</p>
|
|
106
106
|
<del>
|
|
107
|
-
<p class="text-sm text-gray-600 cursor-auto ml-2"
|
|
107
|
+
<p class="text-sm text-gray-600 cursor-auto ml-2">€199</p>
|
|
108
108
|
</del>
|
|
109
|
-
<
|
|
110
|
-
fill="currentColor" class="bi bi-bag-plus" viewBox="0 0 16 16">
|
|
111
|
-
<path fill-rule="evenodd"
|
|
112
|
-
d="M8 7.5a.5.5 0 0 1 .5.5v1.5H10a.5.5 0 0 1 0 1H8.5V12a.5.5 0 0 1-1 0v-1.5H6a.5.5 0 0 1 0-1h1.5V8a.5.5 0 0 1 .5-.5z" />
|
|
113
|
-
<path
|
|
114
|
-
d="M8 1a2.5 2.5 0 0 1 2.5 2.5V4h-5v-.5A2.5 2.5 0 0 1 8 1zm3.5 3v-.5a3.5 3.5 0 1 0-7 0V4H1v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4h-3.5zM2 5h12v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5z" />
|
|
115
|
-
</svg></div>
|
|
109
|
+
<Icon name="octicon:info-24" class="ml-auto" />
|
|
116
110
|
</div>
|
|
117
111
|
</div>
|
|
118
112
|
</a>
|
|
119
113
|
</div>
|
|
120
114
|
<div class="w-72 bg-white shadow-md rounded-xl duration-500 hover:scale-105 hover:shadow-xl">
|
|
121
115
|
<a href="#">
|
|
122
|
-
<img src="https://picsum.photos/600/
|
|
116
|
+
<img src="https://picsum.photos/600/500/?random" alt="Product" class="img--1/1 rounded-t-xl" />
|
|
123
117
|
<div class="px-4 py-3 w-72">
|
|
124
118
|
<span class="text-gray-400 mr-3 uppercase text-xs">Brand</span>
|
|
125
119
|
<p class="text-lg font-bold text-black truncate block capitalize">Product Name</p>
|
|
126
120
|
<div class="flex items-center">
|
|
127
|
-
<p class="text-lg font-semibold text-black cursor-auto my-3"
|
|
121
|
+
<p class="text-lg font-semibold text-black cursor-auto my-3">€149</p>
|
|
128
122
|
<del>
|
|
129
|
-
<p class="text-sm text-gray-600 cursor-auto ml-2"
|
|
123
|
+
<p class="text-sm text-gray-600 cursor-auto ml-2">€199</p>
|
|
130
124
|
</del>
|
|
131
|
-
<
|
|
132
|
-
fill="currentColor" class="bi bi-bag-plus" viewBox="0 0 16 16">
|
|
133
|
-
<path fill-rule="evenodd"
|
|
134
|
-
d="M8 7.5a.5.5 0 0 1 .5.5v1.5H10a.5.5 0 0 1 0 1H8.5V12a.5.5 0 0 1-1 0v-1.5H6a.5.5 0 0 1 0-1h1.5V8a.5.5 0 0 1 .5-.5z" />
|
|
135
|
-
<path
|
|
136
|
-
d="M8 1a2.5 2.5 0 0 1 2.5 2.5V4h-5v-.5A2.5 2.5 0 0 1 8 1zm3.5 3v-.5a3.5 3.5 0 1 0-7 0V4H1v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4h-3.5zM2 5h12v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5z" />
|
|
137
|
-
</svg></div>
|
|
125
|
+
<Icon name="octicon:info-24" class="ml-auto" />
|
|
138
126
|
</div>
|
|
139
127
|
</div>
|
|
140
128
|
</a>
|
|
141
129
|
</div>
|
|
142
130
|
<div class="w-72 bg-white shadow-md rounded-xl duration-500 hover:scale-105 hover:shadow-xl">
|
|
143
131
|
<a href="#">
|
|
144
|
-
<img src="https://picsum.photos/600/
|
|
132
|
+
<img src="https://picsum.photos/600/500/?random" alt="Product" class="img--1/1 rounded-t-xl" />
|
|
145
133
|
<div class="px-4 py-3 w-72">
|
|
146
134
|
<span class="text-gray-400 mr-3 uppercase text-xs">Brand</span>
|
|
147
135
|
<p class="text-lg font-bold text-black truncate block capitalize">Product Name</p>
|
|
148
136
|
<div class="flex items-center">
|
|
149
|
-
<p class="text-lg font-semibold text-black cursor-auto my-3"
|
|
137
|
+
<p class="text-lg font-semibold text-black cursor-auto my-3">€149</p>
|
|
150
138
|
<del>
|
|
151
|
-
<p class="text-sm text-gray-600 cursor-auto ml-2"
|
|
139
|
+
<p class="text-sm text-gray-600 cursor-auto ml-2">€199</p>
|
|
152
140
|
</del>
|
|
153
|
-
<
|
|
154
|
-
fill="currentColor" class="bi bi-bag-plus" viewBox="0 0 16 16">
|
|
155
|
-
<path fill-rule="evenodd"
|
|
156
|
-
d="M8 7.5a.5.5 0 0 1 .5.5v1.5H10a.5.5 0 0 1 0 1H8.5V12a.5.5 0 0 1-1 0v-1.5H6a.5.5 0 0 1 0-1h1.5V8a.5.5 0 0 1 .5-.5z" />
|
|
157
|
-
<path
|
|
158
|
-
d="M8 1a2.5 2.5 0 0 1 2.5 2.5V4h-5v-.5A2.5 2.5 0 0 1 8 1zm3.5 3v-.5a3.5 3.5 0 1 0-7 0V4H1v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4h-3.5zM2 5h12v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5z" />
|
|
159
|
-
</svg></div>
|
|
141
|
+
<Icon name="octicon:info-24" class="ml-auto" />
|
|
160
142
|
</div>
|
|
161
143
|
</div>
|
|
162
144
|
</a>
|
|
163
145
|
</div>
|
|
164
146
|
<div class="w-72 bg-white shadow-md rounded-xl duration-500 hover:scale-105 hover:shadow-xl">
|
|
165
147
|
<a href="#">
|
|
166
|
-
<img src="https://picsum.photos/600/
|
|
148
|
+
<img src="https://picsum.photos/600/500/?random" alt="Product" class="img--1/1 rounded-t-xl" />
|
|
167
149
|
<div class="px-4 py-3 w-72">
|
|
168
150
|
<span class="text-gray-400 mr-3 uppercase text-xs">Brand</span>
|
|
169
151
|
<p class="text-lg font-bold text-black truncate block capitalize">Product Name</p>
|
|
170
152
|
<div class="flex items-center">
|
|
171
|
-
<p class="text-lg font-semibold text-black cursor-auto my-3"
|
|
153
|
+
<p class="text-lg font-semibold text-black cursor-auto my-3">€149</p>
|
|
172
154
|
<del>
|
|
173
|
-
<p class="text-sm text-gray-600 cursor-auto ml-2"
|
|
155
|
+
<p class="text-sm text-gray-600 cursor-auto ml-2">€199</p>
|
|
174
156
|
</del>
|
|
175
|
-
<
|
|
176
|
-
fill="currentColor" class="bi bi-bag-plus" viewBox="0 0 16 16">
|
|
177
|
-
<path fill-rule="evenodd"
|
|
178
|
-
d="M8 7.5a.5.5 0 0 1 .5.5v1.5H10a.5.5 0 0 1 0 1H8.5V12a.5.5 0 0 1-1 0v-1.5H6a.5.5 0 0 1 0-1h1.5V8a.5.5 0 0 1 .5-.5z" />
|
|
179
|
-
<path
|
|
180
|
-
d="M8 1a2.5 2.5 0 0 1 2.5 2.5V4h-5v-.5A2.5 2.5 0 0 1 8 1zm3.5 3v-.5a3.5 3.5 0 1 0-7 0V4H1v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4h-3.5zM2 5h12v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5z" />
|
|
181
|
-
</svg></div>
|
|
157
|
+
<Icon name="octicon:info-24" class="ml-auto" />
|
|
182
158
|
</div>
|
|
183
159
|
</div>
|
|
184
160
|
</a>
|
|
185
161
|
</div>
|
|
186
162
|
<div class="w-72 bg-white shadow-md rounded-xl duration-500 hover:scale-105 hover:shadow-xl">
|
|
187
163
|
<a href="#">
|
|
188
|
-
<img src="https://picsum.photos/600/
|
|
164
|
+
<img src="https://picsum.photos/600/500/?random" alt="Product" class="img--1/1 rounded-t-xl" />
|
|
189
165
|
<div class="px-4 py-3 w-72">
|
|
190
166
|
<span class="text-gray-400 mr-3 uppercase text-xs">Brand</span>
|
|
191
167
|
<p class="text-lg font-bold text-black truncate block capitalize">Product Name</p>
|
|
192
168
|
<div class="flex items-center">
|
|
193
|
-
<p class="text-lg font-semibold text-black cursor-auto my-3"
|
|
169
|
+
<p class="text-lg font-semibold text-black cursor-auto my-3">€149</p>
|
|
194
170
|
<del>
|
|
195
|
-
<p class="text-sm text-gray-600 cursor-auto ml-2"
|
|
171
|
+
<p class="text-sm text-gray-600 cursor-auto ml-2">€199</p>
|
|
196
172
|
</del>
|
|
197
|
-
<
|
|
198
|
-
fill="currentColor" class="bi bi-bag-plus" viewBox="0 0 16 16">
|
|
199
|
-
<path fill-rule="evenodd"
|
|
200
|
-
d="M8 7.5a.5.5 0 0 1 .5.5v1.5H10a.5.5 0 0 1 0 1H8.5V12a.5.5 0 0 1-1 0v-1.5H6a.5.5 0 0 1 0-1h1.5V8a.5.5 0 0 1 .5-.5z" />
|
|
201
|
-
<path
|
|
202
|
-
d="M8 1a2.5 2.5 0 0 1 2.5 2.5V4h-5v-.5A2.5 2.5 0 0 1 8 1zm3.5 3v-.5a3.5 3.5 0 1 0-7 0V4H1v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4h-3.5zM2 5h12v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5z" />
|
|
203
|
-
</svg></div>
|
|
173
|
+
<Icon name="octicon:info-24" class="ml-auto" />
|
|
204
174
|
</div>
|
|
205
175
|
</div>
|
|
206
176
|
</a>
|
|
207
177
|
</div>
|
|
208
178
|
<div class="w-72 bg-white shadow-md rounded-xl duration-500 hover:scale-105 hover:shadow-xl">
|
|
209
179
|
<a href="#">
|
|
210
|
-
<img src="https://picsum.photos/600/
|
|
180
|
+
<img src="https://picsum.photos/600/500/?random" alt="Product" class="img--1/1 rounded-t-xl" />
|
|
211
181
|
<div class="px-4 py-3 w-72">
|
|
212
182
|
<span class="text-gray-400 mr-3 uppercase text-xs">Brand</span>
|
|
213
183
|
<p class="text-lg font-bold text-black truncate block capitalize">Product Name</p>
|
|
214
184
|
<div class="flex items-center">
|
|
215
|
-
<p class="text-lg font-semibold text-black cursor-auto my-3"
|
|
185
|
+
<p class="text-lg font-semibold text-black cursor-auto my-3">€149</p>
|
|
216
186
|
<del>
|
|
217
|
-
<p class="text-sm text-gray-600 cursor-auto ml-2"
|
|
187
|
+
<p class="text-sm text-gray-600 cursor-auto ml-2">€199</p>
|
|
218
188
|
</del>
|
|
219
|
-
<
|
|
220
|
-
fill="currentColor" class="bi bi-bag-plus" viewBox="0 0 16 16">
|
|
221
|
-
<path fill-rule="evenodd"
|
|
222
|
-
d="M8 7.5a.5.5 0 0 1 .5.5v1.5H10a.5.5 0 0 1 0 1H8.5V12a.5.5 0 0 1-1 0v-1.5H6a.5.5 0 0 1 0-1h1.5V8a.5.5 0 0 1 .5-.5z" />
|
|
223
|
-
<path
|
|
224
|
-
d="M8 1a2.5 2.5 0 0 1 2.5 2.5V4h-5v-.5A2.5 2.5 0 0 1 8 1zm3.5 3v-.5a3.5 3.5 0 1 0-7 0V4H1v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4h-3.5zM2 5h12v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5z" />
|
|
225
|
-
</svg></div>
|
|
189
|
+
<Icon name="octicon:info-24" class="ml-auto" />
|
|
226
190
|
</div>
|
|
227
191
|
</div>
|
|
228
192
|
</a>
|
|
@@ -233,22 +197,16 @@ Card - product link component which can be used for carousels, section with rela
|
|
|
233
197
|
<div class="w-fit mx-auto grid grid-cols-1 lg:grid-cols-3 md:grid-cols-2 justify-items-center justify-center gap-y-20 gap-x-14 mt-10 mb-5 ">
|
|
234
198
|
<div class="w-72 bg-white shadow-md rounded-xl duration-500 hover:scale-105 hover:shadow-xl">
|
|
235
199
|
<a href="#">
|
|
236
|
-
<img src="https://picsum.photos/600/
|
|
200
|
+
<img src="https://picsum.photos/600/500/?random" alt="Product" class="img--1/1 rounded-t-xl" />
|
|
237
201
|
<div class="px-4 py-3 w-72">
|
|
238
202
|
<span class="text-gray-400 mr-3 uppercase text-xs">Brand</span>
|
|
239
203
|
<p class="text-lg font-bold text-black truncate block capitalize">Product Name</p>
|
|
240
204
|
<div class="flex items-center">
|
|
241
|
-
<p class="text-lg font-semibold text-black cursor-auto my-3"
|
|
205
|
+
<p class="text-lg font-semibold text-black cursor-auto my-3">€149</p>
|
|
242
206
|
<del>
|
|
243
|
-
<p class="text-sm text-gray-600 cursor-auto ml-2"
|
|
207
|
+
<p class="text-sm text-gray-600 cursor-auto ml-2">€199</p>
|
|
244
208
|
</del>
|
|
245
|
-
<
|
|
246
|
-
fill="currentColor" class="bi bi-bag-plus" viewBox="0 0 16 16">
|
|
247
|
-
<path fill-rule="evenodd"
|
|
248
|
-
d="M8 7.5a.5.5 0 0 1 .5.5v1.5H10a.5.5 0 0 1 0 1H8.5V12a.5.5 0 0 1-1 0v-1.5H6a.5.5 0 0 1 0-1h1.5V8a.5.5 0 0 1 .5-.5z" />
|
|
249
|
-
<path
|
|
250
|
-
d="M8 1a2.5 2.5 0 0 1 2.5 2.5V4h-5v-.5A2.5 2.5 0 0 1 8 1zm3.5 3v-.5a3.5 3.5 0 1 0-7 0V4H1v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V4h-3.5zM2 5h12v9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5z" />
|
|
251
|
-
</svg></div>
|
|
209
|
+
<Icon name="octicon:info-24" class="ml-auto" />
|
|
252
210
|
</div>
|
|
253
211
|
</div>
|
|
254
212
|
</a>
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "DetailsList"
|
|
3
|
+
layout: "../../layouts/MainLayout.astro"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
import ProductDetailsList from '../../components/ProductDetailsList.vue'
|
|
7
|
+
import ProductNumber from "../../components/ProductNumber.astro"
|
|
8
|
+
import ProductCodes from '../../components/ProductCodes.vue'
|
|
9
|
+
|
|
10
|
+
export const prcodesArray = ["PJ4", "CA2", "C4E", "2JZ"]
|
|
11
|
+
|
|
12
|
+
export const tableItems = [
|
|
13
|
+
{
|
|
14
|
+
slug: "number",
|
|
15
|
+
name: "Part number",
|
|
16
|
+
value: "6R0071609GRU",
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
slug: "prcodes",
|
|
20
|
+
name: "PR-Codes",
|
|
21
|
+
value: ["PJ4", "CA2", "C4E", "2JZ"],
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
slug: "color",
|
|
25
|
+
name: "Color",
|
|
26
|
+
value: "Black",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
slug: "position",
|
|
30
|
+
name: "Fitting position",
|
|
31
|
+
value: "Front axle",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
slug: "brake-disck-thicnkess",
|
|
35
|
+
name: "Brake disc thicknes",
|
|
36
|
+
value: "22 mm",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
slug: "weight",
|
|
40
|
+
name: "Weight",
|
|
41
|
+
value: "5.185 kg"
|
|
42
|
+
}
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
# Product Details Table
|
|
46
|
+
|
|
47
|
+
<div class="component-preview flex-wrap">
|
|
48
|
+
<div class="bg-white rounded-lg p-8">
|
|
49
|
+
<ProductDetailsList items={tableItems}>
|
|
50
|
+
<ProductNumber slot="number" class="py-0" big isPdp productNumber="6R0071609GRU" copyDisabled={false} />
|
|
51
|
+
<ProductCodes slot="prcodes" prcodes={prcodesArray} />
|
|
52
|
+
</ProductDetailsList>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
```ts
|
|
57
|
+
const tableItems = [
|
|
58
|
+
{
|
|
59
|
+
slug: "number",
|
|
60
|
+
name: "Part number",
|
|
61
|
+
value: "6R0071609GRU",
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
slug: "prcodes",
|
|
65
|
+
name: "PR-Codes",
|
|
66
|
+
value: ["PJ4", "CA2", "C4E"]
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
slug: "color",
|
|
70
|
+
name: "Color",
|
|
71
|
+
value: "Black",
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
slug: "position",
|
|
75
|
+
name: "Fitting position",
|
|
76
|
+
value: "Front axle",
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
slug: "brake-disck-thicnkess",
|
|
80
|
+
name: "Brake disc thicknes",
|
|
81
|
+
value: "22 mm",
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
slug: "weight",
|
|
85
|
+
name: "Weight",
|
|
86
|
+
value: "5.185 kg"
|
|
87
|
+
}
|
|
88
|
+
];
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
### Astro:
|
|
92
|
+
```js
|
|
93
|
+
<ProductDetailsList items={tableItems}>
|
|
94
|
+
<ProductNumber slot="number" class="py-0" big isPdp productNumber="6R0071609GRU" copyDisabled={false} />
|
|
95
|
+
<ProductCodes slot="prcodes" prcodes={prcodesArray} />
|
|
96
|
+
</ProductDetailsList>
|
|
97
|
+
```
|
|
98
|
+
### Vue:
|
|
99
|
+
```js
|
|
100
|
+
<ProductDetailsList items={tableItems}>
|
|
101
|
+
<template #number >
|
|
102
|
+
<ProductNumber class="py-0" big isPdp productNumber="6R0071609GRU" copyDisabled={false} />
|
|
103
|
+
</template>
|
|
104
|
+
<template #prcodes >
|
|
105
|
+
<ProductCodes prcodes={prcodesArray} />
|
|
106
|
+
</template>
|
|
107
|
+
</ProductDetailsList>
|
|
108
|
+
```
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "DetailsList"
|
|
3
|
+
layout: "../../layouts/MainLayout.astro"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
import FeaturesList from '../../components/FeaturesList.vue'
|
|
7
|
+
|
|
8
|
+
export const items = [
|
|
9
|
+
"do ad dolor exercitation dolor eu eiusmod commodo dolor aliqua deserunt aliquip reprehenderit minim. Lorem fugiat deserunt reprehenderit non velit dolore voluptate nostrud aliquip consectetur minim. Labore dolore anim excepteur sit nostrud deserunt eu occaecat.",
|
|
10
|
+
"cillum dolore cupidatat ad mollit excepteur quis. Non nisi consequat deserunt dolore laboris est culpa. Elit eu aute magna sunt cupidatat officia do adipisicing quis velit. Consectetur deserunt et pariatur ea laborum occaecat veniam proident elit anim dolor eu nostrud voluptate. Do laboris nisi pariatur ipsum est ad anim ex quis officia est ut.",
|
|
11
|
+
"dolore cupidatat ad mollit excepteur quis"
|
|
12
|
+
];
|
|
13
|
+
|
|
14
|
+
# Product Details Table
|
|
15
|
+
|
|
16
|
+
<div class="component-preview flex-wrap">
|
|
17
|
+
<div class="bg-white rounded-lg p-8">
|
|
18
|
+
<p class="mb-4">Dolor amet excepteur id quis ut. Nisi incididunt occaecat est officia ea do voluptate deserunt aliqua cillum duis eiusmod. Officia veniam nisi mollit exercitation consequat ex fugiat ea veniam in culpa aliquip deserunt ea. Magna elit aliqua reprehenderit anim. Ullamco do nostrud nulla consectetur dolor fugiat adipisicing adipisicing. Reprehenderit est do culpa eu non quis. Veniam anim amet excepteur in sit et eiusmod. Id amet adipisicing amet ut eiusmod et. Tempor Lorem amet aute anim magna. Do ea aute consectetur fugiat nulla laboris pariatur ad enim anim. Dolor culpa veniam aliquip amet aute sunt excepteur consectetur sit excepteur excepteur Lorem. Ipsum esse ad aute nulla eu do incididunt eiusmod nulla sunt labore id cupidatat incididunt.</p>
|
|
19
|
+
<FeaturesList items={items} caption="Main features"/>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
const items = [
|
|
25
|
+
"do ad dolor exercitation dolor eu eiusmod commodo dolor aliqua deserunt aliquip reprehenderit minim. Lorem fugiat deserunt reprehenderit non velit dolore voluptate nostrud aliquip consectetur minim. Labore dolore anim excepteur sit nostrud deserunt eu occaecat.",
|
|
26
|
+
"cillum dolore cupidatat ad mollit excepteur quis. Non nisi consequat deserunt dolore laboris est culpa. Elit eu aute magna sunt cupidatat officia do adipisicing quis velit. Consectetur deserunt et pariatur ea laborum occaecat veniam proident elit anim dolor eu nostrud voluptate. Do laboris nisi pariatur ipsum est ad anim ex quis officia est ut.",
|
|
27
|
+
"dolore cupidatat ad mollit excepteur quis"
|
|
28
|
+
];
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
### Astro:
|
|
32
|
+
```html
|
|
33
|
+
<FeaturesList items={items} caption="Main features" />
|
|
34
|
+
```
|
|
35
|
+
### Vue:
|
|
36
|
+
```html
|
|
37
|
+
<FeaturesList :items="items" caption="Main features" />
|
|
38
|
+
```
|
|
@@ -3,7 +3,7 @@ title: "PrCode"
|
|
|
3
3
|
layout: "../../layouts/MainLayout.astro"
|
|
4
4
|
---
|
|
5
5
|
import PrCode from '../../components/PrCode.vue'
|
|
6
|
-
|
|
6
|
+
import ProductCodes from '../../components/ProductCodes.vue'
|
|
7
7
|
|
|
8
8
|
# PR-Code
|
|
9
9
|
|
|
@@ -17,6 +17,15 @@ They are important when purchasing spare parts as they provide information about
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
## PR-Code
|
|
20
|
+
Single PR-Code.
|
|
21
|
+
|
|
22
|
+
### import:
|
|
23
|
+
|
|
24
|
+
```js
|
|
25
|
+
import PrCode from 'spoko-design-system/src/components/PrCode.vue'
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
#
|
|
20
29
|
|
|
21
30
|
<div class="component-preview">
|
|
22
31
|
<div class="bg-white p-6 w-full">
|
|
@@ -30,8 +39,27 @@ They are important when purchasing spare parts as they provide information about
|
|
|
30
39
|
<PrCode prcode="1ZJ" />
|
|
31
40
|
```
|
|
32
41
|
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
## PR-Codes List
|
|
46
|
+
Component to display list of pr codes from array.
|
|
47
|
+
|
|
33
48
|
### import:
|
|
34
49
|
|
|
35
50
|
```js
|
|
36
|
-
import
|
|
51
|
+
import ProductCodes from 'spoko-design-system/src/components/ProductCodes.vue'
|
|
37
52
|
```
|
|
53
|
+
|
|
54
|
+
#
|
|
55
|
+
|
|
56
|
+
<div class="component-preview">
|
|
57
|
+
<div class="bg-white p-6 w-full">
|
|
58
|
+
<ProductCodes prcodes={["2JP", "1ZJ"]} />
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
```js
|
|
63
|
+
<ProductCodes prcodes={["2JP", "1ZJ"]} />
|
|
64
|
+
```
|
|
65
|
+
|
|
@@ -4,7 +4,7 @@ layout: "../../layouts/MainLayout.astro"
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import
|
|
7
|
+
import Table from '../../components/Table.vue'
|
|
8
8
|
export const tableData = [
|
|
9
9
|
{
|
|
10
10
|
id: 1,
|
|
@@ -44,7 +44,7 @@ export const tableDataSecondary = [
|
|
|
44
44
|
Simple table based on JSON data object.
|
|
45
45
|
|
|
46
46
|
<div class="component-preview">
|
|
47
|
-
<
|
|
47
|
+
<Table data={tableData}></Table>
|
|
48
48
|
</div>
|
|
49
49
|
|
|
50
50
|
## Code
|
|
@@ -72,10 +72,10 @@ const tableData = [
|
|
|
72
72
|
|
|
73
73
|
```html
|
|
74
74
|
<!-- Astro -->
|
|
75
|
-
<
|
|
75
|
+
<Table data={tableData} />
|
|
76
76
|
|
|
77
77
|
<!-- Vue -->
|
|
78
|
-
<
|
|
78
|
+
<Table :data="tableData" />
|
|
79
79
|
```
|
|
80
80
|
|
|
81
81
|
|
|
@@ -83,7 +83,7 @@ const tableData = [
|
|
|
83
83
|
# Table
|
|
84
84
|
|
|
85
85
|
<div class="component-preview">
|
|
86
|
-
<
|
|
86
|
+
<Table data={tableDataSecondary} />
|
|
87
87
|
</div>
|
|
88
88
|
|
|
89
89
|
## Code
|
|
@@ -105,5 +105,5 @@ const tableDataSecondary = [
|
|
|
105
105
|
];
|
|
106
106
|
|
|
107
107
|
|
|
108
|
-
<
|
|
108
|
+
<Table data={tableDataSecondary} />
|
|
109
109
|
```
|
package/src/pages/index.astro
CHANGED
|
@@ -49,7 +49,7 @@ const navItems = [
|
|
|
49
49
|
</Button>
|
|
50
50
|
</Jumbatron>
|
|
51
51
|
<nav>
|
|
52
|
-
<
|
|
52
|
+
<div class="px-4 flex-col flex flex-wrap md:flex-nowrap gap-4 max-w-5xl mx-auto text-left mt-12 md:(px-0 flex-row) ">
|
|
53
53
|
{
|
|
54
54
|
navItems.map(({ title, description, url, icon }) => (
|
|
55
55
|
<a
|
|
@@ -65,7 +65,7 @@ const navItems = [
|
|
|
65
65
|
</a>
|
|
66
66
|
))
|
|
67
67
|
}
|
|
68
|
-
</
|
|
68
|
+
</div>
|
|
69
69
|
</nav>
|
|
70
70
|
</div>
|
|
71
71
|
</Layout>
|
|
@@ -20,7 +20,7 @@ Common patterns for building interfaces.
|
|
|
20
20
|
|
|
21
21
|
### Code
|
|
22
22
|
|
|
23
|
-
```
|
|
23
|
+
```html
|
|
24
24
|
<Container class="bg-white">content</Container>
|
|
25
25
|
```
|
|
26
26
|
|
|
@@ -33,7 +33,7 @@ Common patterns for building interfaces.
|
|
|
33
33
|
|
|
34
34
|
### Code
|
|
35
35
|
|
|
36
|
-
```
|
|
36
|
+
```html
|
|
37
37
|
<Container class="bg-white" isFullWidth>content</Container>
|
|
38
38
|
```
|
|
39
39
|
|
|
@@ -50,7 +50,7 @@ Common patterns for building interfaces.
|
|
|
50
50
|
|
|
51
51
|
### Code
|
|
52
52
|
|
|
53
|
-
```
|
|
53
|
+
```html
|
|
54
54
|
<Header>
|
|
55
55
|
<div slot="logo" class="flex-shrink-0 flex items-center h-8">
|
|
56
56
|
<div class="bg-gray">LOGO</div>
|
package/src/styles/content.scss
CHANGED
package/uno.config.ts
CHANGED
|
@@ -38,11 +38,11 @@ export default defineConfig({
|
|
|
38
38
|
['img--2/3', 'aspect-[2/3] relative object-cover bg-gray-100 h-auto max-w-full'],
|
|
39
39
|
['img--3/1', 'aspect-[3/1] relative object-cover bg-gray-100 h-auto max-w-full'],
|
|
40
40
|
['img--16/9', 'aspect-video relative object-cover bg-gray-100 h-auto max-w-full'],
|
|
41
|
-
['img--small', 'w-60 sm:(w-22) xl:(w-30)'],
|
|
42
|
-
['img--medium', 'w-60'],
|
|
41
|
+
['img--small', 'h-full w-60 sm:(w-22) xl:(w-30)'],
|
|
42
|
+
['img--medium', 'h-full w-60'],
|
|
43
43
|
['underline-on-hover', 'relative flex w-full bg-white pb-1 dark:bg-blue-901 after:absolute after:bg-lightBlue-500 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'],
|
|
44
44
|
['carousel-product-tile', 'flex flex-wrap sm:flex-nowrap content-between w-64 min-w-64 lg:(w-28.57% min-w-28.57%) 2xl:(w-24.09% min-w-24.09%) relative'],
|
|
45
|
-
['btn-primary', 'bg-lightBlue-
|
|
45
|
+
['btn-primary', 'bg-lightBlue-400 border border-transparent font-medium hover:bg-lightBlue-500 inline-flex items-center justify-center shadow text-base text-blue-700'],
|
|
46
46
|
['btn-primary-outline', 'border-lightBlue-500 border font-medium inline-flex items-center justify-center shadow text-base text-lightBlue-500 transition-all hover:(bg-lightBlue-500 text-white)'],
|
|
47
47
|
['btn-secondary', 'bg-gray-500 border border-transparent font-medium hover:bg-gray-600 inline-flex items-center justify-center shadow text-base text-white'],
|
|
48
48
|
['btn-secondary-outline', 'border-gray-500 border text-gray-500 font-medium inline-flex items-center justify-center shadow text-base hover:(text-white bg-gray-500)'],
|
|
@@ -53,7 +53,7 @@ export default defineConfig({
|
|
|
53
53
|
['btn-normal', 'md:px-10 md:py-2 md:text-lg px-8 py-3 whitespace-nowrap'],
|
|
54
54
|
['btn-sm', 'px-6 py-2 text-sm whitespace-nowrap '],
|
|
55
55
|
['btn-xs', 'px-4 py-1 text-sm whitespace-nowrap '],
|
|
56
|
-
['product-number','font-
|
|
56
|
+
['product-number','font-novamono leading-none content-center flex flex-wrap flex-col content-start pr-5 bg-white'],
|
|
57
57
|
['main','text-gray-700 dark:text-gray-200 dark:bg-blue-700 pt-24 sm:pt-14 relative'],
|
|
58
58
|
['nav','bg-white dark:bg-black absolute sm:fixed w-full top-0 z-40 sm:z-30 max-w-screen'],
|
|
59
59
|
['cat-menu','fixed bottom-[-4px] w-full z-10 border-t-1 border-gray-300 bg-white dark:bg-blue-900 text-center sm:(static z-auto border-t-none) sm:min-h-32'],
|
|
@@ -91,8 +91,8 @@ export default defineConfig({
|
|
|
91
91
|
['cat-link','whitespace-nowrap cursor-pointer text-blue-901 dark:text-white hover:text-lightBlue-400 font-light uppercase py-2 md:py-0'],
|
|
92
92
|
['plp-name','flex items-center leading-none font-headregular cursor-pointer sm:pr-6 md:pr-12'],
|
|
93
93
|
['plp-replacements','col-span-3 md:col-span-1 md:col-start-2 text-xs mt-3 md:mt-4'],
|
|
94
|
-
['product-code','text-blue-500 dark:text-lightBlue-500 mr-1 leading-none tracking-wide select-all'],
|
|
95
|
-
['code-formatted','leading-none mt-0 relative text-xs'],
|
|
94
|
+
['product-code','text-blue-500 dark:text-lightBlue-500 mr-1 leading-none tracking-wide select-all '],
|
|
95
|
+
['code-formatted','font-novamono leading-none mt-0 relative text-xs'],
|
|
96
96
|
['btn-copy', 'leading-none opacity-10 hover:opacity-80 ml-auto w-6 h-6 -right-7 sm:(h-4 w-4 -right-5) absolute'],
|
|
97
97
|
['btn-copy-text','shadow-sm py-0.5 px-1 bg-gray-100 -ml-1 -mt-4 text-xxs whitespace-nowrap'],
|
|
98
98
|
['plp-icons','absolute top-0 -right-2 md:(top-0.5 right-0) w-12 bottom-auto flex justify-end text-sm'],
|
|
File without changes
|