srcdev-nuxt-components 9.3.7 → 9.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/hooks/check-component-update.sh +30 -1
- package/.claude/skills/components/breadcrumb.md +49 -0
- package/.claude/skills/components/content-docs.md +1 -1
- package/.claude/skills/components/service-detail.md +156 -0
- package/.claude/skills/components/services-card-grid.md +9 -9
- package/.claude/skills/components/services-card.md +82 -30
- package/.claude/skills/index.md +3 -1
- package/.claude/skills/qa-panel.md +2 -2
- package/.vscode/srcdev-component-breadcrumb.code-snippets +14 -0
- package/.vscode/srcdev-component-service-detail.code-snippets +49 -0
- package/.vscode/srcdev-component-services-card.code-snippets +108 -0
- package/app/components/01.atoms/navigation/breadcrumb/Breadcrumb.vue +94 -0
- package/app/components/01.atoms/navigation/breadcrumb/CONSUMER-STYLING.md +32 -0
- package/app/components/01.atoms/navigation/breadcrumb/stories/Breadcrumb.stories.ts +87 -0
- package/app/components/01.atoms/navigation/breadcrumb/tests/Breadcrumb.spec.ts +87 -0
- package/app/components/01.atoms/navigation/breadcrumb/tests/__snapshots__/Breadcrumb.spec.ts.snap +13 -0
- package/app/components/03.organisms/services/service-detail/CONSUMER-STYLING.md +181 -0
- package/app/components/03.organisms/services/service-detail/ServiceDetail.vue +480 -0
- package/app/components/03.organisms/services/service-detail/stories/ServiceDetail.stories.ts +282 -0
- package/app/components/03.organisms/services/service-detail/tests/ServiceDetail.spec.ts +270 -0
- package/app/components/03.organisms/services/service-detail/tests/__snapshots__/ServiceDetail.spec.ts.snap +99 -0
- package/app/components/03.organisms/services/services-card/CONSUMER-STYLING.md +129 -0
- package/app/components/03.organisms/services/services-card/ServicesCard.vue +153 -39
- package/app/components/03.organisms/services/services-card/stories/ServicesCard.stories.ts +65 -0
- package/app/components/03.organisms/services/services-card/tests/ServicesCard.spec.ts +82 -0
- package/app/components/03.organisms/services/services-card/tests/__snapshots__/ServicesCard.spec.ts.snap +13 -5
- package/app/components/03.organisms/services/services-grids/ServicesCardGrid.vue +3 -7
- package/app/components/03.organisms/services/services-grids/stories/ServicesCardGrid.stories.ts +126 -2
- package/app/components/03.organisms/services/services-grids/stories/ServicesSectionGrid.stories.ts +6 -0
- package/app/components/03.organisms/services/services-grids/tests/__snapshots__/ServicesCardGrid.spec.ts.snap +51 -27
- package/app/types/components/breadcrumb.ts +4 -0
- package/app/types/components/index.ts +1 -0
- package/package.json +2 -2
- package/app/pages/auto-grid.vue +0 -328
- package/app/pages/banner-video.vue +0 -238
- package/app/pages/forms/examples/buttons/index.vue +0 -259
- package/app/pages/forms/examples/material/checkbox-radio-panels.vue +0 -244
- package/app/pages/forms/examples/material/cssbattle.vue +0 -60
- package/app/pages/forms/examples/material/text-fields.vue +0 -910
- package/app/pages/grid-stack.vue +0 -252
- package/app/pages/index.vue +0 -127
- package/app/pages/page-hero-highlights.vue +0 -204
- package/app/pages/samaritan.vue +0 -327
- package/app/pages/typography/hero-text.vue +0 -97
- package/app/pages/typography/index.vue +0 -39
- package/app/pages/typography/page-body.vue +0 -171
- package/app/pages/typography/page-heading.vue +0 -76
- package/app/pages/typography/page-link.vue +0 -103
- package/app/pages/ui/accordian.vue +0 -211
- package/app/pages/ui/anchor-scroll-tab-navigation.vue +0 -191
- package/app/pages/ui/anchor-scroll.vue +0 -367
- package/app/pages/ui/animated-svg-text.vue +0 -85
- package/app/pages/ui/block-decorators.vue +0 -142
- package/app/pages/ui/card-core.vue +0 -82
- package/app/pages/ui/carousel-basic.vue +0 -292
- package/app/pages/ui/carousel-flip.vue +0 -449
- package/app/pages/ui/carousel-infinite.vue +0 -260
- package/app/pages/ui/clipped-panels.vue +0 -101
- package/app/pages/ui/contact-section.vue +0 -323
- package/app/pages/ui/container-glow.vue +0 -106
- package/app/pages/ui/content-width.vue +0 -126
- package/app/pages/ui/deep-expanding-menu.vue +0 -138
- package/app/pages/ui/display-avatar.vue +0 -253
- package/app/pages/ui/display-banner.vue +0 -78
- package/app/pages/ui/display-chip.vue +0 -367
- package/app/pages/ui/display-details.vue +0 -171
- package/app/pages/ui/display-dialog.vue +0 -344
- package/app/pages/ui/display-pill.vue +0 -396
- package/app/pages/ui/display-prompt.vue +0 -284
- package/app/pages/ui/display-toast.vue +0 -311
- package/app/pages/ui/expanding-panel.vue +0 -326
- package/app/pages/ui/glowing-border.vue +0 -111
- package/app/pages/ui/layout-content-docs.vue +0 -72
- package/app/pages/ui/layout-grid-a.vue +0 -96
- package/app/pages/ui/layout-grid-b.vue +0 -132
- package/app/pages/ui/magnetic-navigation.vue +0 -50
- package/app/pages/ui/marquee-scroller.vue +0 -99
- package/app/pages/ui/mask-element.vue +0 -104
- package/app/pages/ui/masonry-columns.vue +0 -55
- package/app/pages/ui/masonry-grid-ordered-experiment.vue +0 -79
- package/app/pages/ui/masonry-grid-ordered.vue +0 -56
- package/app/pages/ui/masonry-grid-sorted.vue +0 -55
- package/app/pages/ui/masonry-grid.vue +0 -55
- package/app/pages/ui/navigation/navigation-horizontal.vue +0 -484
- package/app/pages/ui/navigation/site-navigation/about.vue +0 -36
- package/app/pages/ui/navigation/site-navigation/contact.vue +0 -39
- package/app/pages/ui/navigation/site-navigation/index.vue +0 -38
- package/app/pages/ui/navigation/site-navigation/portfolio.vue +0 -43
- package/app/pages/ui/navigation/site-navigation/services.vue +0 -42
- package/app/pages/ui/navigation/tab-navigation.vue +0 -493
- package/app/pages/ui/page-row.vue +0 -127
- package/app/pages/ui/price-list.vue +0 -65
- package/app/pages/ui/profile-section.vue +0 -142
- package/app/pages/ui/qr-code/[componentName].vue +0 -218
- package/app/pages/ui/rotating-carousel.vue +0 -154
- package/app/pages/ui/scroll-reveal-image.vue +0 -483
- package/app/pages/ui/section-parallax.vue +0 -54
- package/app/pages/ui/services/colour-finder.vue +0 -43
- package/app/pages/ui/services/services-cards.vue +0 -57
- package/app/pages/ui/services/services-section/[slug].vue +0 -61
- package/app/pages/ui/services/services-sections-compact.vue +0 -64
- package/app/pages/ui/settings.vue +0 -54
- package/app/pages/ui/simple-grid.vue +0 -55
- package/app/pages/ui/slider-gallery.vue +0 -261
- package/app/pages/ui/tabs-y.vue +0 -107
- package/app/pages/ui/tabs.vue +0 -189
- package/app/pages/ui/tooltips.vue +0 -104
- package/app/pages/ui/wipe-away-vertical.vue +0 -129
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<NuxtLayout name="default">
|
|
4
|
-
<template #layout-content>
|
|
5
|
-
<PageRow tag="div" variant="content" :style-class-passthrough="['mbe-20']">
|
|
6
|
-
<EyebrowText font-size="large" text-content="Services" />
|
|
7
|
-
|
|
8
|
-
<HeroText
|
|
9
|
-
tag="h1"
|
|
10
|
-
axis="vertical"
|
|
11
|
-
font-size="display"
|
|
12
|
-
:text-content="[
|
|
13
|
-
{ text: 'Expert colour & ', styleClass: 'normal' },
|
|
14
|
-
{ text: 'styling', styleClass: 'accent' },
|
|
15
|
-
{ text: 'at your door', styleClass: 'normal' },
|
|
16
|
-
]"
|
|
17
|
-
:style-class-passthrough="['mb-20']"
|
|
18
|
-
/>
|
|
19
|
-
|
|
20
|
-
<p class="page-body-normal">
|
|
21
|
-
<NuxtLink to="/ui/services/services-cards" class="page-link-normal">Back to Services</NuxtLink>
|
|
22
|
-
</p>
|
|
23
|
-
</PageRow>
|
|
24
|
-
|
|
25
|
-
<PageRow tag="div" variant="content" :style-class-passthrough="['mbe-20']">
|
|
26
|
-
<ServicesSection v-if="servicesData.length > 0 && serviceData" :service-data="serviceData!" />
|
|
27
|
-
</PageRow>
|
|
28
|
-
</template>
|
|
29
|
-
</NuxtLayout>
|
|
30
|
-
</div>
|
|
31
|
-
</template>
|
|
32
|
-
|
|
33
|
-
<script setup lang="ts">
|
|
34
|
-
definePageMeta({
|
|
35
|
-
layout: false,
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
useHead({
|
|
39
|
-
title: "Services Section",
|
|
40
|
-
meta: [{ name: "description", content: "Services Section" }],
|
|
41
|
-
bodyAttrs: {
|
|
42
|
-
class: "page-services-section",
|
|
43
|
-
},
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
const route = useRoute();
|
|
47
|
-
const slug = route.params.slug as string;
|
|
48
|
-
|
|
49
|
-
const store = useServicesStore();
|
|
50
|
-
const { servicesData } = storeToRefs(store);
|
|
51
|
-
|
|
52
|
-
if (servicesData.value.length === 0) {
|
|
53
|
-
await store.fetchServicesData();
|
|
54
|
-
}
|
|
55
|
-
const serviceData = store.serviceDataBySlug(slug);
|
|
56
|
-
</script>
|
|
57
|
-
|
|
58
|
-
<style lang="css">
|
|
59
|
-
.page-services-section {
|
|
60
|
-
}
|
|
61
|
-
</style>
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<NuxtLayout name="default">
|
|
4
|
-
<template #layout-content>
|
|
5
|
-
<PageRow tag="div" variant="content" :style-class-passthrough="['mbe-20']">
|
|
6
|
-
<EyebrowText font-size="large" text-content="Services" />
|
|
7
|
-
<HeroText
|
|
8
|
-
:tag="'h1'"
|
|
9
|
-
font-size="display"
|
|
10
|
-
axis="horizontal"
|
|
11
|
-
:text-content="[
|
|
12
|
-
{ text: 'Expert colour & ' },
|
|
13
|
-
{ text: 'styling', styleClass: 'accent' },
|
|
14
|
-
{ text: ' at your door' },
|
|
15
|
-
]"
|
|
16
|
-
:style-class-passthrough="['mbe-20']"
|
|
17
|
-
/>
|
|
18
|
-
</PageRow>
|
|
19
|
-
|
|
20
|
-
<PageRow tag="div" variant="content" :style-class-passthrough="['mbe-20']">
|
|
21
|
-
<p class="page-body-medium">
|
|
22
|
-
I'm a mobile hair artist bringing bold, custom hair transformations straight to your doorstep in Bath. From
|
|
23
|
-
lived-in balayage and dimensional lowlights to face-framing highlights and precision cuts — salon-quality
|
|
24
|
-
results, zero hassle.
|
|
25
|
-
</p>
|
|
26
|
-
</PageRow>
|
|
27
|
-
|
|
28
|
-
<PageRow tag="div" variant="content" :style-class-passthrough="['mbe-20']">
|
|
29
|
-
<ServicesSectionGrid
|
|
30
|
-
:services-data="servicesData ?? []"
|
|
31
|
-
:use-alternate-reverse="true"
|
|
32
|
-
summary-alignment="center"
|
|
33
|
-
/>
|
|
34
|
-
</PageRow>
|
|
35
|
-
</template>
|
|
36
|
-
</NuxtLayout>
|
|
37
|
-
</div>
|
|
38
|
-
</template>
|
|
39
|
-
|
|
40
|
-
<script setup lang="ts">
|
|
41
|
-
definePageMeta({
|
|
42
|
-
layout: false,
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
useHead({
|
|
46
|
-
title: "Services Section Grid",
|
|
47
|
-
meta: [{ name: "description", content: "Services Section Grid" }],
|
|
48
|
-
bodyAttrs: {
|
|
49
|
-
class: "page-services-section-grid",
|
|
50
|
-
},
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
const store = useServicesStore();
|
|
54
|
-
const { servicesData } = storeToRefs(store);
|
|
55
|
-
|
|
56
|
-
if (servicesData.value.length === 0) {
|
|
57
|
-
await store.fetchServicesData();
|
|
58
|
-
}
|
|
59
|
-
</script>
|
|
60
|
-
|
|
61
|
-
<style lang="css">
|
|
62
|
-
.page-services-section-grid {
|
|
63
|
-
}
|
|
64
|
-
</style>
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<NuxtLayout name="default">
|
|
4
|
-
<template #layout-content>
|
|
5
|
-
<PageRow tag="div" variant="popout" :style-class-passthrough="['mbe-20']">
|
|
6
|
-
<h1 class="page-heading-1 mbe-18">Settings</h1>
|
|
7
|
-
<h2 class="page-heading-2 mbe-18">Theme Switcher</h2>
|
|
8
|
-
|
|
9
|
-
<DisplayThemeSwitch />
|
|
10
|
-
</PageRow>
|
|
11
|
-
|
|
12
|
-
<PageRow tag="div" variant="popout" :style-class-passthrough="['mbe-20']">
|
|
13
|
-
<div class="theme-test" data-theme="error">
|
|
14
|
-
<h2 class="page-heading-2 mbe-18">Theme test (error)</h2>
|
|
15
|
-
|
|
16
|
-
<div class="mb-12">
|
|
17
|
-
<p class="page-body-normal mbe-12">This is test text</p>
|
|
18
|
-
</div>
|
|
19
|
-
</div>
|
|
20
|
-
</PageRow>
|
|
21
|
-
</template>
|
|
22
|
-
</NuxtLayout>
|
|
23
|
-
</div>
|
|
24
|
-
</template>
|
|
25
|
-
|
|
26
|
-
<script setup lang="ts">
|
|
27
|
-
definePageMeta({
|
|
28
|
-
layout: false,
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
useHead({
|
|
32
|
-
title: "Settings",
|
|
33
|
-
meta: [{ name: "description", content: "Settings Page" }],
|
|
34
|
-
bodyAttrs: {
|
|
35
|
-
class: "settings-page",
|
|
36
|
-
},
|
|
37
|
-
});
|
|
38
|
-
</script>
|
|
39
|
-
|
|
40
|
-
<style lang="css">
|
|
41
|
-
.settings-page {
|
|
42
|
-
.theme-test {
|
|
43
|
-
margin: 2rem;
|
|
44
|
-
padding: 0.6rem 1.2rem;
|
|
45
|
-
|
|
46
|
-
border: var(--colour-theme-10) solid 1px;
|
|
47
|
-
outline: var(--colour-theme-10) solid 1px;
|
|
48
|
-
outline-offset: 3px;
|
|
49
|
-
background-color: var(--colour-theme-1);
|
|
50
|
-
color: var(--colour-theme-7);
|
|
51
|
-
border-radius: 0.4rem;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
</style>
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<NuxtLayout name="default">
|
|
4
|
-
<template #layout-content>
|
|
5
|
-
<PageRow tag="div" variant="popout" :style-class-passthrough="['mbe-20']">
|
|
6
|
-
<h1 class="page-heading-3">Simple Grid</h1>
|
|
7
|
-
<p class="page-body-normal">Simple grid displaying dummy posts data</p>
|
|
8
|
-
|
|
9
|
-
<LayoutGridByWidth v-if="status === 'success'" column-width="300px" gap="2rem">
|
|
10
|
-
<template v-for="(item, index) in postsData?.posts.slice(0, displayCount)" :key="item.id" #[item.id]>
|
|
11
|
-
<div class="display-post-item">
|
|
12
|
-
<div>Views: {{ item.views }}</div>
|
|
13
|
-
<div>{{ index + 1 }}: {{ item.title }}</div>
|
|
14
|
-
<div>{{ item.body }}</div>
|
|
15
|
-
</div>
|
|
16
|
-
</template>
|
|
17
|
-
</LayoutGridByWidth>
|
|
18
|
-
|
|
19
|
-
<p v-else class="page-body-normal">…Loading</p>
|
|
20
|
-
</PageRow>
|
|
21
|
-
</template>
|
|
22
|
-
</NuxtLayout>
|
|
23
|
-
</div>
|
|
24
|
-
</template>
|
|
25
|
-
|
|
26
|
-
<script setup lang="ts">
|
|
27
|
-
import type { Posts } from "~/types/types.posts";
|
|
28
|
-
|
|
29
|
-
definePageMeta({
|
|
30
|
-
layout: false,
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
useHead({
|
|
34
|
-
title: "Simple Grid",
|
|
35
|
-
meta: [{ name: "description", content: "Simple Grid" }],
|
|
36
|
-
bodyAttrs: {
|
|
37
|
-
class: "",
|
|
38
|
-
},
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
const displayCount = 12;
|
|
42
|
-
const { data: postsData, status } = await useFetch<Posts>("https://dummyjson.com/posts");
|
|
43
|
-
</script>
|
|
44
|
-
|
|
45
|
-
<style lang="css">
|
|
46
|
-
.display-post-item {
|
|
47
|
-
display: grid;
|
|
48
|
-
grid-template-rows: subgrid;
|
|
49
|
-
grid-row: span 3;
|
|
50
|
-
gap: 1.2rem;
|
|
51
|
-
outline: 0.1rem solid green;
|
|
52
|
-
border-radius: 0.4rem;
|
|
53
|
-
padding: 1.2rem;
|
|
54
|
-
}
|
|
55
|
-
</style>
|
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<NuxtLayout name="default">
|
|
4
|
-
<template #layout-content>
|
|
5
|
-
<PageRow tag="div" variant="full" :style-class-passthrough="['display-details-section', 'mbe-20']">
|
|
6
|
-
<h1 class="page-heading-2">Slider Gallery Component</h1>
|
|
7
|
-
|
|
8
|
-
<SliderGallery v-model:gallery-data="galleryData" :auto-run="false" />
|
|
9
|
-
</PageRow>
|
|
10
|
-
</template>
|
|
11
|
-
</NuxtLayout>
|
|
12
|
-
</div>
|
|
13
|
-
</template>
|
|
14
|
-
|
|
15
|
-
<script setup lang="ts">
|
|
16
|
-
definePageMeta({
|
|
17
|
-
layout: false,
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
useHead({
|
|
21
|
-
title: "Slider Gallery Component",
|
|
22
|
-
meta: [
|
|
23
|
-
{
|
|
24
|
-
name: "description",
|
|
25
|
-
content: "Slider Gallery Component",
|
|
26
|
-
},
|
|
27
|
-
],
|
|
28
|
-
bodyAttrs: {
|
|
29
|
-
class: "slider-gallery-page",
|
|
30
|
-
},
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
const galleryData = ref([
|
|
34
|
-
{
|
|
35
|
-
src: "/images/rotating-carousel/image-4.webp",
|
|
36
|
-
alt: "Balayage highlights",
|
|
37
|
-
stylist: "Luxury Locs",
|
|
38
|
-
title: "Balayage Highlights",
|
|
39
|
-
category: "Hair Colouring",
|
|
40
|
-
description:
|
|
41
|
-
"Balayage highlights are a hair coloring technique where color is painted onto the hair in a sweeping motion, creating a natural, sun-kissed look. This method allows for a soft gradation of color, typically lighter towards the ends, and can be used on various hair shades, not just blondes.",
|
|
42
|
-
thumbnail: {
|
|
43
|
-
title: "Balayage",
|
|
44
|
-
description: "Heighlights",
|
|
45
|
-
},
|
|
46
|
-
textBrightness: "light",
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
src: "/images/rotating-carousel/spanish-green-stripe.webp",
|
|
50
|
-
alt: "Lowlights with a green tinge",
|
|
51
|
-
stylist: "Luxury Locs",
|
|
52
|
-
title: "Lowlights with a green tinge",
|
|
53
|
-
category: "Hair Colouring",
|
|
54
|
-
description: "Get into the party mood with striking temporary colours and some lowlights.",
|
|
55
|
-
thumbnail: {
|
|
56
|
-
title: "Hair Colouring",
|
|
57
|
-
description: "Striking Lime",
|
|
58
|
-
},
|
|
59
|
-
textBrightness: "light",
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
src: "/images/rotating-carousel/image-1.webp",
|
|
63
|
-
alt: "Image 1",
|
|
64
|
-
stylist: "Luxury Locs",
|
|
65
|
-
title: "Highlights",
|
|
66
|
-
category: "Hair",
|
|
67
|
-
description: "This is some description text about the image and the hair shown in the image.",
|
|
68
|
-
thumbnail: {
|
|
69
|
-
title: "",
|
|
70
|
-
description: "",
|
|
71
|
-
},
|
|
72
|
-
textBrightness: "light",
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
src: "/images/rotating-carousel/image-2.webp",
|
|
76
|
-
alt: "Image 2",
|
|
77
|
-
stylist: "Luxury Locs",
|
|
78
|
-
title: "Highlights",
|
|
79
|
-
category: "Hair",
|
|
80
|
-
description: "This is some description text about the image and the hair shown in the image.",
|
|
81
|
-
thumbnail: {
|
|
82
|
-
title: "",
|
|
83
|
-
description: "",
|
|
84
|
-
},
|
|
85
|
-
textBrightness: "light",
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
src: "/images/rotating-carousel/55-woman-garden-backdrop.webp",
|
|
89
|
-
alt: "Image 3",
|
|
90
|
-
stylist: "Luxury Locs",
|
|
91
|
-
title: "Any Age",
|
|
92
|
-
category: "Hair",
|
|
93
|
-
description: "Cut and style.",
|
|
94
|
-
thumbnail: {
|
|
95
|
-
title: "",
|
|
96
|
-
description: "",
|
|
97
|
-
},
|
|
98
|
-
textBrightness: "light",
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
src: "/images/rotating-carousel/35-light-brown-highlights.webp",
|
|
102
|
-
alt: "Image 4",
|
|
103
|
-
stylist: "Luxury Locs",
|
|
104
|
-
title: "Any Age",
|
|
105
|
-
category: "Hair",
|
|
106
|
-
description: "Cut and style.",
|
|
107
|
-
thumbnail: {
|
|
108
|
-
title: "",
|
|
109
|
-
description: "",
|
|
110
|
-
},
|
|
111
|
-
textBrightness: "light",
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
src: "/images/rotating-carousel/image-3.webp",
|
|
115
|
-
alt: "Image 3",
|
|
116
|
-
stylist: "Luxury Locs",
|
|
117
|
-
title: "Highlights",
|
|
118
|
-
category: "Hair",
|
|
119
|
-
description: "This is some description text about the image and the hair shown in the image.",
|
|
120
|
-
thumbnail: {
|
|
121
|
-
title: "",
|
|
122
|
-
description: "",
|
|
123
|
-
},
|
|
124
|
-
textBrightness: "light",
|
|
125
|
-
},
|
|
126
|
-
{
|
|
127
|
-
src: "/images/rotating-carousel/image-5.webp",
|
|
128
|
-
alt: "Image 5",
|
|
129
|
-
stylist: "Luxury Locs",
|
|
130
|
-
title: "Highlights",
|
|
131
|
-
category: "Hair",
|
|
132
|
-
description: "This is some description text about the image and the hair shown in the image.",
|
|
133
|
-
thumbnail: {
|
|
134
|
-
title: "",
|
|
135
|
-
description: "",
|
|
136
|
-
},
|
|
137
|
-
textBrightness: "light",
|
|
138
|
-
},
|
|
139
|
-
{
|
|
140
|
-
src: "/images/rotating-carousel/indian-pink-stripe.webp",
|
|
141
|
-
alt: "Pink stripe",
|
|
142
|
-
stylist: "Luxury Locs",
|
|
143
|
-
title: "Party colouring, pink stripe",
|
|
144
|
-
category: "Hair Colouring",
|
|
145
|
-
description: "Get into the party mood with striking temporary colours.",
|
|
146
|
-
thumbnail: {
|
|
147
|
-
title: "",
|
|
148
|
-
description: "",
|
|
149
|
-
},
|
|
150
|
-
textBrightness: "light",
|
|
151
|
-
},
|
|
152
|
-
{
|
|
153
|
-
src: "/images/rotating-carousel/image-6.webp",
|
|
154
|
-
alt: "Image 6",
|
|
155
|
-
stylist: "Luxury Locs",
|
|
156
|
-
title: "Low lights",
|
|
157
|
-
category: "Hair",
|
|
158
|
-
description: "This is some description text about the image and the hair shown in the image.",
|
|
159
|
-
thumbnail: {
|
|
160
|
-
title: "",
|
|
161
|
-
description: "",
|
|
162
|
-
},
|
|
163
|
-
textBrightness: "light",
|
|
164
|
-
},
|
|
165
|
-
{
|
|
166
|
-
src: "/images/rotating-carousel/image-7.webp",
|
|
167
|
-
alt: "Image 7",
|
|
168
|
-
stylist: "Luxury Locs",
|
|
169
|
-
title: "Highlights",
|
|
170
|
-
category: "Hair",
|
|
171
|
-
description: "This is some description text about the image and the hair shown in the image.",
|
|
172
|
-
thumbnail: {
|
|
173
|
-
title: "",
|
|
174
|
-
description: "",
|
|
175
|
-
},
|
|
176
|
-
textBrightness: "light",
|
|
177
|
-
},
|
|
178
|
-
{
|
|
179
|
-
src: "/images/rotating-carousel/image-8.webp",
|
|
180
|
-
alt: "Image 8",
|
|
181
|
-
stylist: "Luxury Locs",
|
|
182
|
-
title: "Highlights",
|
|
183
|
-
category: "Hair",
|
|
184
|
-
description: "This is some description text about the image and the hair shown in the image.",
|
|
185
|
-
thumbnail: {
|
|
186
|
-
title: "",
|
|
187
|
-
description: "",
|
|
188
|
-
},
|
|
189
|
-
textBrightness: "light",
|
|
190
|
-
},
|
|
191
|
-
{
|
|
192
|
-
src: "/images/rotating-carousel/image-9.webp",
|
|
193
|
-
alt: "Image 9",
|
|
194
|
-
stylist: "Luxury Locs",
|
|
195
|
-
title: "Highlights",
|
|
196
|
-
category: "Hair",
|
|
197
|
-
description: "This is some description text about the image and the hair shown in the image.",
|
|
198
|
-
thumbnail: {
|
|
199
|
-
title: "",
|
|
200
|
-
description: "",
|
|
201
|
-
},
|
|
202
|
-
textBrightness: "light",
|
|
203
|
-
},
|
|
204
|
-
]);
|
|
205
|
-
</script>
|
|
206
|
-
|
|
207
|
-
<style lang="css">
|
|
208
|
-
.slider-gallery-page {
|
|
209
|
-
.slider-gallery {
|
|
210
|
-
--_thumbnailBorder: 1px solid light-dark(white, dark);
|
|
211
|
-
--_thumbnailOutline: 1px solid light-dark(black, white);
|
|
212
|
-
--_thumbnailBorderRadius: 20px;
|
|
213
|
-
|
|
214
|
-
/* Thumbnail sizes */
|
|
215
|
-
--_thumbnailMobileWidth: 100px;
|
|
216
|
-
--_thumbnailMobileHeight: 165px;
|
|
217
|
-
|
|
218
|
-
--_thumbnailDesktopWidth: 150px;
|
|
219
|
-
--_thumbnailDesktopHeight: 220px;
|
|
220
|
-
|
|
221
|
-
.list {
|
|
222
|
-
.item {
|
|
223
|
-
.content {
|
|
224
|
-
/* Placeholder for author styles */
|
|
225
|
-
.author {
|
|
226
|
-
}
|
|
227
|
-
/* Placeholder for title styles */
|
|
228
|
-
.title {
|
|
229
|
-
font-size: var(--step-8);
|
|
230
|
-
margin-block: var(--step-3);
|
|
231
|
-
}
|
|
232
|
-
/* Placeholder for topic styles */
|
|
233
|
-
.topic {
|
|
234
|
-
color: white;
|
|
235
|
-
font-size: var(--step-6);
|
|
236
|
-
margin-block: var(--step-3);
|
|
237
|
-
mix-blend-mode: difference;
|
|
238
|
-
}
|
|
239
|
-
/* Placeholder for description styles */
|
|
240
|
-
.description {
|
|
241
|
-
line-height: 1.5;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
.thumbnail {
|
|
248
|
-
.item {
|
|
249
|
-
.content {
|
|
250
|
-
/* Placeholder for title styles */
|
|
251
|
-
.title {
|
|
252
|
-
}
|
|
253
|
-
/* Placeholder for description styles */
|
|
254
|
-
.description {
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
</style>
|
package/app/pages/ui/tabs-y.vue
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<NuxtLayout name="default">
|
|
4
|
-
<template #layout-content>
|
|
5
|
-
<PageRow tag="div" variant="popout" :style-class-passthrough="['mbs-32']">
|
|
6
|
-
<h1 class="page-heading-2">Tabs #3</h1>
|
|
7
|
-
<p>Data driven accordian navigation with custom content</p>
|
|
8
|
-
|
|
9
|
-
<TabsCore axis="y" :nav-items="navLinks6" :style-class-passthrough="['class-modifier']">
|
|
10
|
-
<template v-for="(item, key) in navLinks6" #[`tab-${key}-trigger`]>{{ item.name }}</template>
|
|
11
|
-
<template #[`tab-0-content`]>
|
|
12
|
-
<p class="p-24">This is content slot 0</p>
|
|
13
|
-
</template>
|
|
14
|
-
<template #[`tab-1-content`]>
|
|
15
|
-
<p class="p-24">This is content slot 1</p>
|
|
16
|
-
</template>
|
|
17
|
-
<template #[`tab-2-content`]>
|
|
18
|
-
<p class="p-24">This is content slot 2</p>
|
|
19
|
-
</template>
|
|
20
|
-
<template #[`tab-3-content`]>
|
|
21
|
-
<p class="p-24">This is content slot 3</p>
|
|
22
|
-
</template>
|
|
23
|
-
<template #[`tab-4-content`]>
|
|
24
|
-
<p class="p-24">This is content slot 4</p>
|
|
25
|
-
</template>
|
|
26
|
-
<template #[`tab-5-content`]>
|
|
27
|
-
<p class="p-24">This is content slot 5</p>
|
|
28
|
-
</template>
|
|
29
|
-
</TabsCore>
|
|
30
|
-
</PageRow>
|
|
31
|
-
</template>
|
|
32
|
-
</NuxtLayout>
|
|
33
|
-
</div>
|
|
34
|
-
</template>
|
|
35
|
-
|
|
36
|
-
<script setup lang="ts">
|
|
37
|
-
import type { ITabNav } from "~/types/components";
|
|
38
|
-
definePageMeta({
|
|
39
|
-
layout: false,
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
useHead({
|
|
43
|
-
title: "UI Tabs",
|
|
44
|
-
meta: [{ name: "description", content: "Examples of UI Component Tabs" }],
|
|
45
|
-
bodyAttrs: {
|
|
46
|
-
class: "home",
|
|
47
|
-
},
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
const navLinks6: ITabNav[] = [
|
|
51
|
-
{ name: "Home", path: "/" },
|
|
52
|
-
{ name: "Dialogs", path: "/ui/dialog" },
|
|
53
|
-
{ name: "Tabs", path: "/ui/tabs" },
|
|
54
|
-
{ name: "Something Else", path: "/ui/something" },
|
|
55
|
-
{ name: "Home Again", path: "/" },
|
|
56
|
-
];
|
|
57
|
-
</script>
|
|
58
|
-
|
|
59
|
-
<style lang="css">
|
|
60
|
-
.tabs-list.colour-test {
|
|
61
|
-
--_default-text: light-dark(var(--green-04), var(--green-05));
|
|
62
|
-
--_active-bg: light-dark(var(--red-10), var(--red-00));
|
|
63
|
-
--_active-text: light-dark(var(--sunset-03), var(--sunset-06));
|
|
64
|
-
--_active-indicator: light-dark(var(--orange-06), var(--orange-07));
|
|
65
|
-
--_hovered-bg: light-dark(var(--blue-07), var(--blue-03));
|
|
66
|
-
--_hovered-text: light-dark(var(--blue-04), var(--blue-10));
|
|
67
|
-
--_border-bottom: light-dark(var(--red-07), var(--red-06));
|
|
68
|
-
|
|
69
|
-
border-bottom: 0.1rem solid var(--_border-bottom);
|
|
70
|
-
margin-block: 3rem;
|
|
71
|
-
|
|
72
|
-
.nav__hovered {
|
|
73
|
-
background: var(--_hovered-bg);
|
|
74
|
-
color: var(--_hovered-text);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
.nav__active {
|
|
78
|
-
background: var(--_active-bg);
|
|
79
|
-
color: var(--_active-text);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
.nav__active-indicator {
|
|
83
|
-
background: var(--_active-indicator);
|
|
84
|
-
height: 0.4rem;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
.tabs-list-item {
|
|
88
|
-
background: transparent;
|
|
89
|
-
border: 0;
|
|
90
|
-
color: var(--_default-text);
|
|
91
|
-
cursor: pointer;
|
|
92
|
-
font: inherit;
|
|
93
|
-
text-transform: uppercase;
|
|
94
|
-
font-weight: 500;
|
|
95
|
-
margin: 0;
|
|
96
|
-
padding: 1em 2em;
|
|
97
|
-
|
|
98
|
-
&:hover {
|
|
99
|
-
color: var(--_hovered-text);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
&[aria-selected="true"] {
|
|
103
|
-
color: var(--_active-text);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
</style>
|