spoko-design-system 0.0.1 → 0.0.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.
Files changed (113) hide show
  1. package/.astro/icon.d.ts +8109 -10
  2. package/.github/workflows/deploy.yml +39 -39
  3. package/.stackblitzrc +5 -5
  4. package/.vscode/extensions.json +5 -4
  5. package/.vscode/launch.json +11 -11
  6. package/.vscode/settings.json +6 -0
  7. package/LICENSE +21 -21
  8. package/Layout/Header.astro +111 -89
  9. package/README.md +94 -69
  10. package/astro-i18next.config.mjs +17 -17
  11. package/astro-i18next.config.ts +10 -10
  12. package/astro.config.mjs +51 -42
  13. package/index.ts +6 -6
  14. package/package.json +25 -17
  15. package/public/astro-design-system-logo.svg +10 -10
  16. package/public/favicon.ico +0 -0
  17. package/public/favicon.svg +0 -0
  18. package/public/fonts/lg.svg +53 -53
  19. package/public/fonts/vwhead-bold-demo.html +549 -549
  20. package/public/fonts/vwhead-regular-demo.html +549 -549
  21. package/public/fonts/vwtext-bold-demo.html +549 -549
  22. package/public/fonts/vwtext-regular-demo.html +549 -549
  23. package/public/github.svg +3 -3
  24. package/public/grid_dot.svg +4 -4
  25. package/public/linkedin.svg +44 -44
  26. package/public/locales/en/translation.json +8 -5
  27. package/public/locales/pl/translation.json +8 -5
  28. package/public/make-scrollable-code-focusable.js +3 -3
  29. package/public/polo.blue.svg +29 -0
  30. package/public/spoko.space.svg +71 -0
  31. package/public/twitter.svg +46 -46
  32. package/sandbox.config.json +11 -11
  33. package/src/MyComponent.astro +8 -8
  34. package/src/components/Badge.vue +19 -19
  35. package/src/components/Badges.vue +24 -23
  36. package/src/components/Breadcrumbs.vue +108 -111
  37. package/src/components/Button.vue +37 -0
  38. package/src/components/ButtonCopy.vue +52 -0
  39. package/src/components/Card.astro +25 -0
  40. package/src/components/CategoryLink.astro +18 -0
  41. package/src/components/Copyright.astro +11 -11
  42. package/src/components/Date.astro +7 -0
  43. package/src/components/FuckRussia.vue +65 -65
  44. package/src/components/HandDrive.astro +29 -30
  45. package/src/components/HeadCommon.astro +40 -40
  46. package/src/components/HeadSEO.astro +41 -41
  47. package/src/components/Header/AstroLogo.astro +7 -27
  48. package/src/components/Header/Header.astro +44 -48
  49. package/src/components/Header/SkipToContent.astro +1 -1
  50. package/src/components/Headline.vue +60 -0
  51. package/src/components/Image.astro +30 -0
  52. package/src/components/Jumbatron.vue +46 -31
  53. package/src/components/LeftSidebar.astro +45 -44
  54. package/src/components/MainColors.vue +29 -29
  55. package/src/components/MainInput.vue +18 -18
  56. package/src/components/MainTable.vue +40 -45
  57. package/src/components/Modal.astro +30 -0
  58. package/src/components/PageContent.astro +14 -14
  59. package/src/components/PostHeader.astro +104 -0
  60. package/src/components/PrCode.vue +156 -0
  61. package/src/components/ProductNumber.astro +117 -0
  62. package/src/components/ProductTile.astro +54 -0
  63. package/src/components/RightSidebar.astro +15 -11
  64. package/src/components/SlimBanner.vue +59 -59
  65. package/src/components/TableOfContents.astro +11 -11
  66. package/src/components/Translations.vue +27 -0
  67. package/src/components/flags/FlagPL.vue +2 -2
  68. package/src/components/flags/FlagUA.vue +2 -2
  69. package/src/components/layout/Header.astro +50 -69
  70. package/src/config.ts +51 -42
  71. package/src/design.config.ts +73 -92
  72. package/src/env.d.ts +1 -1
  73. package/src/flag-poland.svg +1 -0
  74. package/src/flag-uk.svg +1 -0
  75. package/src/layouts/Layout.astro +43 -0
  76. package/src/layouts/MainLayout.astro +60 -50
  77. package/src/pages/components/badges.mdx +69 -35
  78. package/src/pages/components/breadcrumbs.mdx +136 -103
  79. package/src/pages/components/buttons.mdx +143 -60
  80. package/src/pages/components/card.mdx +40 -0
  81. package/src/pages/components/copyright.mdx +41 -24
  82. package/src/pages/components/flags.mdx +40 -26
  83. package/src/pages/components/fuck-russia.mdx +39 -16
  84. package/src/pages/components/hand-drive.mdx +38 -27
  85. package/src/pages/components/headline.mdx +148 -0
  86. package/src/pages/components/icons.astro +54 -45
  87. package/src/pages/components/image.mdx +502 -0
  88. package/src/pages/components/input.mdx +45 -14
  89. package/src/pages/components/jumbatron.mdx +71 -48
  90. package/src/pages/components/modal.mdx +64 -0
  91. package/src/pages/components/post-header.mdx +58 -0
  92. package/src/pages/components/pr-code.mdx +41 -0
  93. package/src/pages/components/product-number.mdx +65 -0
  94. package/src/pages/components/product-tile.mdx +39 -0
  95. package/src/pages/components/slimbanner.mdx +29 -27
  96. package/src/pages/components/table.mdx +39 -20
  97. package/src/pages/core/colors.mdx +8 -8
  98. package/src/pages/core/introduction.mdx +74 -68
  99. package/src/pages/core/shadows.astro +20 -20
  100. package/src/pages/core/typography.astro +46 -46
  101. package/src/pages/index.astro +70 -52
  102. package/src/pages/patterns/introduction.mdx +60 -61
  103. package/src/styles/_variables.scss +75 -75
  104. package/src/styles/base/_base.scss +166 -158
  105. package/src/styles/base/_typography.scss +147 -147
  106. package/src/styles/content.scss +66 -71
  107. package/src/styles/main.scss +22 -22
  108. package/tailwind.config.cjs +8 -8
  109. package/tsconfig.json +11 -11
  110. package/uno.config.ts +246 -227
  111. package/src/components/MainButton.vue +0 -26
  112. package/src/components/MainStatusPill.vue +0 -32
  113. package/src/pages/components/status-pill.mdx +0 -22
@@ -1,18 +1,18 @@
1
- <template>
2
- <label class="group text-left w-full max-w-xs flex flex-col">
3
- <span
4
- class="group-hover:text-blue-600 ml-2 text-slate-600 text-sm group-focus-within:text-blue-600"
5
- >{{ label }}</span
6
- >
7
- <input
8
- class="group-hover:border-blue-500 border px-4 py-2 transition-colors rounded-md w-full focus:ring focus:outline-none focus:border-blue-600"
9
- type="text"
10
- />
11
- </label>
12
- </template>
13
-
14
- <script setup lang="ts">
15
- const props = defineProps<{
16
- label: string;
17
- }>();
18
- </script>
1
+ <template>
2
+ <label class="group text-left w-full max-w-xs flex flex-col">
3
+ <span
4
+ class="group-hover:text-blue-600 ml-2 text-slate-600 text-sm group-focus-within:text-blue-600"
5
+ >{{ label }}</span
6
+ >
7
+ <input
8
+ class="group-hover:border-blue-500 border px-4 py-2 transition-colors rounded-md w-full focus:ring focus:outline-none focus:border-blue-600"
9
+ type="text"
10
+ />
11
+ </label>
12
+ </template>
13
+
14
+ <script setup lang="ts">
15
+ const props = defineProps<{
16
+ label: string;
17
+ }>();
18
+ </script>
@@ -1,45 +1,40 @@
1
- <template>
2
- <table class="table-auto text-left border bg-white shadow-md">
3
- <thead class="bg-slate-800 text-white">
4
- <tr class="border">
5
- <th class="px-4 py-2">id</th>
6
- <th class="px-4 py-2">Name</th>
7
- <th class="px-4 py-2">Email</th>
8
- </tr>
9
- </thead>
10
- <tbody>
11
- <tr class="border" v-for="row in tableData" :key="row">
12
- <td class="px-4 py-2" v-for="key in Object.keys(row)" :key="key">
13
- {{ row[key] }}
14
- </td>
15
- </tr>
16
- </tbody>
17
- </table>
18
- </template>
19
-
20
- <script setup lang="ts">
21
- const tableData = [
22
- {
23
- id: 1,
24
- name: "John Doe",
25
- email: "john@email.com",
26
- },
27
- {
28
- id: 2,
29
- name: "Jane Doe",
30
- email: "jane@email.com",
31
- },
32
- {
33
- id: 3,
34
- name: "Jack Doe",
35
- email: "jack@email.com",
36
- },
37
- {
38
- id: 4,
39
- name: "Jill Doe",
40
- email: "jill@email.com",
41
- },
42
- ];
43
- </script>
44
-
45
- <style scoped></style>
1
+ <template>
2
+ <table class="table-auto text-left border bg-white shadow-md">
3
+ <thead class="bg-slate-800 text-white">
4
+ <tr class="border">
5
+ <th class="px-4 py-2">id</th>
6
+ <th class="px-4 py-2">Name</th>
7
+ <th class="px-4 py-2">Email</th>
8
+ </tr>
9
+ </thead>
10
+ <tbody>
11
+ <tr class="border" v-for="row in tableData" :key="row">
12
+ <td class="px-4 py-2" v-for="key in Object.keys(row)" :key="key">
13
+ {{ row[key] }}
14
+ </td>
15
+ </tr>
16
+ </tbody>
17
+ </table>
18
+ </template>
19
+
20
+ <script setup lang="ts">
21
+ const tableData = [
22
+ {
23
+ id: 1,
24
+ name: "Lorem Ipsum",
25
+ email: "lorem@email.com",
26
+ },
27
+ {
28
+ id: 2,
29
+ name: "Chuck Norris",
30
+ email: "ipsum@email.com",
31
+ },
32
+ {
33
+ id: 3,
34
+ name: "Ipsum Lorem",
35
+ email: "lorem@email.com",
36
+ }
37
+ ];
38
+ </script>
39
+
40
+ <style scoped></style>
@@ -0,0 +1,30 @@
1
+ ---
2
+ const {id, open} = Astro.props;
3
+ import Button from '../components/Button.vue'
4
+ ---
5
+ <style lang="scss">
6
+ dialog {
7
+ @apply fixed top-0 left-0 right-0 bottom-0;
8
+ // position: fixed;
9
+ // left: 50%;
10
+ // top: 50%;
11
+ // transform: translate(-50%, -50%);
12
+ &::backdrop {
13
+ @apply bg-gray-500/50 fixed;
14
+ top: 0px;
15
+ right: 0px;
16
+ bottom: 0px;
17
+ left: 0px;
18
+
19
+ }
20
+ }
21
+ </style>
22
+
23
+ <Button primary onclick={`window.${id}.showModal()`}>{open}</Button>
24
+
25
+ <dialog id={id} class="p-6">
26
+ <slot name="main" />
27
+ <form method="dialog">
28
+ <slot name="close" />
29
+ </form>
30
+ </dialog>
@@ -1,14 +1,14 @@
1
- ---
2
- const { content, githubEditUrl } = Astro.props;
3
- const title = content.title;
4
- // const headers = content.astro.headers;
5
- ---
6
-
7
- <article id="article" class="content">
8
- <section class="main-section">
9
- <nav class="block sm:hidden">
10
- </nav>
11
- <slot />
12
- </section>
13
- </article>
14
-
1
+ ---
2
+ const { content, githubEditUrl } = Astro.props;
3
+ const title = content.title;
4
+ // const headers = content.astro.headers;
5
+ ---
6
+
7
+ <article id="article" class="content">
8
+ <section class="main-section">
9
+ <nav class="block sm:hidden">
10
+ </nav>
11
+ <slot />
12
+ </section>
13
+ </article>
14
+
@@ -0,0 +1,104 @@
1
+ ---
2
+ interface Props {
3
+ title: string;
4
+ image: string;
5
+ date?: string | null;
6
+ lang: string;
7
+
8
+ author: {
9
+ firstName: string;
10
+ name: string;
11
+ } | null;
12
+
13
+ categories: {
14
+ name: string;
15
+ uri: string;
16
+ }[];
17
+ }
18
+
19
+ const { image, title, categories, date, author } =
20
+ Astro.props;
21
+ import CategoryLink from "./CategoryLink.astro";
22
+ import Date from "./Date.astro";
23
+ ---
24
+
25
+ <header
26
+ class="post-header pt-11 w-full justify-center text-white z-2 bg-blue-900"
27
+ >
28
+ <div class="heading flex flex-wrap">
29
+ <div
30
+ class="w-full sm:max-w-[640px] md:max-w-3xl lg:max-w-5xl xl:max-w-7xl 2xl:max-w-[1536px] px-4 py-5 flex flex-col flex-wrap"
31
+ >
32
+ <h1
33
+ class="font-textbold text-2xl mb-1 sm:text-3xl md:(text-4xl mb-3) xl:text-6xl mt-1 order-2 line-clamp-3 pb-1"
34
+ >
35
+ {title}
36
+ </h1>
37
+ <CategoryLink categories={categories} />
38
+ <div class="order-3 flex items-center text-gray-1 00">
39
+ {
40
+ author && (
41
+ <span class="text-sm" title={author.firstName} data-pagefind-ignore>
42
+ {author.name}
43
+ </span>
44
+ )
45
+ }
46
+ {author && date && <span class="mx-1">-</span>}
47
+ {date && <Date date={date} />}
48
+ </div>
49
+ </div>
50
+ </div>
51
+ <div class="featured-image">
52
+ <img src={image} alt={title} />
53
+ </div>
54
+ </header>
55
+
56
+ <style lang="scss">
57
+ .post-header {
58
+ @apply flex relative items-center;
59
+ min-height: 19vw;
60
+ }
61
+
62
+ .heading {
63
+ @apply text-white relative flex items-center justify-center mt-auto w-full pt-11 z-[2];
64
+ }
65
+
66
+ .featured-image {
67
+ @apply absolute top-0 bottom-0 left-0 right-0 overflow-hidden w-full bg-gray-100 z-1;
68
+
69
+ &:before,
70
+ &:after {
71
+ @apply content-empty top-0 bottom-0 left-0 right-0 absolute;
72
+ }
73
+
74
+ &:before {
75
+ z-index: 5;
76
+ background: linear-gradient(
77
+ 0deg,
78
+ rgba(0, 0, 0, 0.95),
79
+ transparent 30%,
80
+ transparent 70%,
81
+ rgba(0, 0, 0, 0.95)
82
+ );
83
+ opacity: 0.5;
84
+ }
85
+
86
+ &:after {
87
+ background: radial-gradient(circle at 50% 85%, #00437a 0, #001e50 100%);
88
+ opacity: 0.8;
89
+ }
90
+
91
+ img {
92
+ @apply w-full h-full object-cover block max-w-full;
93
+ }
94
+ }
95
+ </style>
96
+
97
+ <style is:global>
98
+ .icon {
99
+ @apply text-lightBlue-400 mr-2;
100
+ width: 1em;
101
+ height: 1em;
102
+ fill: currentcolor;
103
+ }
104
+ </style>
@@ -0,0 +1,156 @@
1
+ <script lang="ts" setup>
2
+ /*
3
+ VAG group (VW/Audi/Skoda/Seat/Porsche/Bentley/Lamborghini/Ducati/Cupra/Scania/MAN) manufacturer PR-Code
4
+ */
5
+
6
+ import type { PropType } from 'vue'
7
+
8
+ const props = defineProps({
9
+ prcode: {
10
+ type: Object as PropType<string[] | null>,
11
+ default: null,
12
+ required: true,
13
+ },
14
+ isPdp: {
15
+ type: Boolean,
16
+ default: false,
17
+ required: false,
18
+ },
19
+ })
20
+ </script>
21
+
22
+ <template>
23
+ <span data-pagefind-filter="PR-Code" class="btn-prcode " :class="`btn-prcode--${props.prcode} ${props.isPdp ? ' btn-prcode--pdp' : ''}`">
24
+ {{ props.prcode }}
25
+ </span>
26
+ </template>
27
+
28
+ <style lang="scss" scoped>
29
+ .btn-prcode {
30
+
31
+ &--pdp {
32
+ @apply mb-1
33
+ }
34
+
35
+ &:before {
36
+ @apply rounded-2 shadow-sm py-0.5 px-2 bg-gray-100 whitespace-nowrap text-xs dark:text-black dark:bg-lightBlue-500 text-center z-50;
37
+
38
+ display: none;
39
+ position: absolute;
40
+ top: -10px;
41
+ transform: translateY(-50%) translateX(-50%);
42
+ left: 50%;
43
+ }
44
+
45
+ &:hover:before {
46
+ display: block;
47
+ }
48
+
49
+ &--2JK {
50
+ color: #f3881d;
51
+
52
+ &:before {
53
+ content: 'CROSS';
54
+ }
55
+ }
56
+
57
+ &--1LR,
58
+ &--1ZG,
59
+ &--1ZJ {
60
+ &:before {
61
+ content: '⌀ 256 mm';
62
+ }
63
+ }
64
+
65
+ &--1KD,
66
+ &--1ZP,
67
+ &--1ZR {
68
+ &:before {
69
+ content: '⌀ 310 mm';
70
+ }
71
+ }
72
+
73
+ &--1ZD,
74
+ &--1ZC,
75
+ &--1LN {
76
+ &:before {
77
+ content: '⌀ 288 mm; LUCAS';
78
+ }
79
+ }
80
+
81
+ &--2JZ {
82
+ @apply: text-lightBlue-500;
83
+
84
+ &:before {
85
+ content: 'Bluemotion';
86
+ }
87
+ }
88
+
89
+ &--7L6 {
90
+ @apply: text-lightBlue-500;
91
+
92
+ &:before {
93
+ content: 'Bluemotion (CFWA + start-stop)';
94
+ }
95
+ }
96
+
97
+ &--1KK,
98
+ &--1KT,
99
+ &--1KV,
100
+ &--1LV,
101
+ &--2EJ {
102
+ &:before {
103
+ content: '⌀ 230 mm';
104
+ }
105
+ }
106
+
107
+ &--2JE {
108
+ @apply text-lightBlue-700;
109
+
110
+ &:before {
111
+ content: 'BlueGT';
112
+ }
113
+ }
114
+
115
+ &--2JP {
116
+ &:before {
117
+ content: 'R-Line';
118
+ }
119
+ }
120
+
121
+ // WRC Street R
122
+ &--E5M,
123
+
124
+ // emblems/stickers
125
+ &--1KD,
126
+
127
+ //brakes
128
+ &--1ZP,
129
+
130
+ //brakes
131
+ &--2JQ,
132
+
133
+ //bumpers / engine parts
134
+ &--TA2 {
135
+ color: blue;
136
+
137
+ &:before {
138
+ content: 'R WRC Street';
139
+ }
140
+ }
141
+
142
+ // GTI
143
+ &--1KV,
144
+ &--1ZD,
145
+ &--1ZR,
146
+ &--0NH,
147
+ &--2JD {
148
+ color: red;
149
+
150
+ &:before {
151
+ content: 'GTI';
152
+ }
153
+ }
154
+
155
+ }
156
+ </style>
@@ -0,0 +1,117 @@
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
+
98
+ </div>
99
+
100
+ <div
101
+ class={`code-formatted ${small ? "tracking-wide" : "tracking-tight"}`}
102
+ >
103
+ <div class="relative inset-0" data-pagefind-ignore>
104
+ {niceName(productNumber, ".")}
105
+ </div>
106
+ <div class="absolute inset-0" data-pagefind-ignore>
107
+ {niceName(productNumber, "-")}
108
+ </div>
109
+ {isPdp ? (
110
+ <h3 class="number-secondary">{niceName(productNumber)}</h3>
111
+ ) : (
112
+ <div class="number-secondary">{niceName(productNumber)}</div>
113
+ )}
114
+ </div>
115
+ </div>
116
+ )
117
+ }
@@ -0,0 +1,54 @@
1
+ ---
2
+ const { productObject, locale, index } = Astro.props;
3
+ import i18next, { t } from "i18next";
4
+ import Image from "./Image.astro"
5
+ import ProductNumber from "./ProductNumber.astro"
6
+
7
+ ---
8
+
9
+ { productObject &&
10
+ (
11
+
12
+ <div class="flex flex-wrap sm:flex-nowrap content-between w-64 md:(w-96 min-w-96) ml-1 lg:ml-1.5 relative bg-white mb-4">
13
+ <!-- product image -->
14
+ <div>
15
+ { productObject.photo !== null ?
16
+ <div class="img--4/3 img--small">
17
+ <Image
18
+ imageObject={
19
+ {
20
+ src: 'https://img.freepik.com/darmowe-wektory/tlo-retro-modeli-geometrycznych_52683-17902.jpg?w=1380&t=st=1706311337',
21
+ alt: 'Image Alt',
22
+ height: '180',
23
+ width: '240',
24
+ class: 'img--overlay object-cover'
25
+ }
26
+ }
27
+ />
28
+ </div>
29
+ :
30
+ <img src="/1x1.png" class="bg-gray-100/70" alt={productObject.name} />
31
+ }
32
+ </div>
33
+
34
+ <!-- product deails -->
35
+ <div class="sm:pl-4 flex flex-col" >
36
+ <a class="font-light leading-none mb-2 pr-4 line-clamp-2 h-[2em] before:(content-empty absolute left-0 right-4 h-full top-0)"
37
+ href={productObject.url} itemprop="url"
38
+ title={productObject.number}
39
+ >
40
+ { productObject.name }
41
+ </a>
42
+
43
+ <ProductNumber productNumber={productObject.number} copyDisabled={true} />
44
+
45
+ { index !== null &&
46
+ ( <meta itemprop="position" content={String(index)} />
47
+ <meta itemprop="name" content={productObject.name} /> )
48
+ }
49
+ </div>
50
+
51
+ </div>
52
+
53
+ )}
54
+
@@ -1,11 +1,15 @@
1
- ---
2
- import TableOfContents from './TableOfContents.astro';
3
- const { content } = Astro.props;
4
- const headers = content.astro?.headers || [];
5
- ---
6
-
7
- <nav aria-labelledby="grid-right">
8
- <div class="px-8">
9
- <TableOfContents headers={headers} />
10
- </div>
11
- </nav>
1
+ ---
2
+ import TableOfContents from './TableOfContents.astro';
3
+ const { content } = Astro.props;
4
+ const headers = content.astro?.headers || [];
5
+ ---
6
+
7
+ <nav aria-labelledby="grid-right">
8
+ <div class="px-8">
9
+ <TableOfContents headers={headers} />
10
+ <pre>{JSON.stringify(content)}</pre>
11
+ </div>
12
+ </nav>
13
+
14
+
15
+ <!-- {"title":"Introduction","description":"Docs intro","file":"C:/www/2024/elements/src/pages/core/introduction.mdx","url":"/core/introduction"} -->