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,483 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<NuxtLayout name="default">
|
|
4
|
-
<template #layout-content>
|
|
5
|
-
<!-- ── Page header ──────────────────────────────────────────────── -->
|
|
6
|
-
<PageRow tag="div" variant="content" :style-class-passthrough="['mbe-48']">
|
|
7
|
-
<h1 class="page-heading-1">ScrollRevealImage / ScrollRevealFrame</h1>
|
|
8
|
-
<p class="page-body-normal">
|
|
9
|
-
A pure-CSS parallax reveal. No scroll listeners, no JS animation — driven entirely by
|
|
10
|
-
<code>animation-timeline: view()</code>
|
|
11
|
-
. Scroll down to see each variant in action.
|
|
12
|
-
</p>
|
|
13
|
-
<p class="page-body-normal">
|
|
14
|
-
<code>ScrollRevealFrame</code>
|
|
15
|
-
is the generic primitive — it accepts any slot content (images, grids, video).
|
|
16
|
-
<code>ScrollRevealImage</code>
|
|
17
|
-
is a convenience wrapper that adds
|
|
18
|
-
<code>NuxtImg</code>
|
|
19
|
-
optimisation and a horizontal focal-point prop.
|
|
20
|
-
</p>
|
|
21
|
-
</PageRow>
|
|
22
|
-
|
|
23
|
-
<!-- ── Interactive demo ──────────────────────────────────────────── -->
|
|
24
|
-
<PageRow tag="div" variant="content" :style-class-passthrough="['mbe-48']">
|
|
25
|
-
<h2 class="page-heading-2 mbe-8">Interactive demo</h2>
|
|
26
|
-
<p class="page-body-normal mbe-16">Adjust the props then scroll through the image on the right.</p>
|
|
27
|
-
<div class="demo-controls">
|
|
28
|
-
<p class="demo-controls__heading">Props</p>
|
|
29
|
-
<div class="demo-controls__fields">
|
|
30
|
-
<MultipleRadiobuttons
|
|
31
|
-
v-model="frameHeight"
|
|
32
|
-
v-model:field-data="frameHeightData"
|
|
33
|
-
name="frameHeight"
|
|
34
|
-
legend="frameHeight"
|
|
35
|
-
label="frameHeight"
|
|
36
|
-
error-message=""
|
|
37
|
-
:is-button="true"
|
|
38
|
-
:is-pill="true"
|
|
39
|
-
:field-has-error="false"
|
|
40
|
-
options-layout="inline"
|
|
41
|
-
/>
|
|
42
|
-
<MultipleRadiobuttons
|
|
43
|
-
v-model="parallaxOffset"
|
|
44
|
-
v-model:field-data="parallaxOffsetData"
|
|
45
|
-
name="parallaxOffset"
|
|
46
|
-
legend="parallaxOffset"
|
|
47
|
-
label="parallaxOffset"
|
|
48
|
-
error-message=""
|
|
49
|
-
:is-button="true"
|
|
50
|
-
:is-pill="true"
|
|
51
|
-
:field-has-error="false"
|
|
52
|
-
options-layout="inline"
|
|
53
|
-
/>
|
|
54
|
-
<MultipleRadiobuttons
|
|
55
|
-
v-model="focalX"
|
|
56
|
-
v-model:field-data="focalXData"
|
|
57
|
-
name="focalX"
|
|
58
|
-
legend="focalX"
|
|
59
|
-
label="focalX"
|
|
60
|
-
error-message=""
|
|
61
|
-
:is-button="true"
|
|
62
|
-
:is-pill="true"
|
|
63
|
-
:field-has-error="false"
|
|
64
|
-
options-layout="inline"
|
|
65
|
-
/>
|
|
66
|
-
<MultipleRadiobuttons
|
|
67
|
-
v-model="radius"
|
|
68
|
-
v-model:field-data="radiusData"
|
|
69
|
-
name="radius"
|
|
70
|
-
legend="radius"
|
|
71
|
-
label="radius"
|
|
72
|
-
error-message=""
|
|
73
|
-
:is-button="true"
|
|
74
|
-
:is-pill="true"
|
|
75
|
-
:field-has-error="false"
|
|
76
|
-
options-layout="inline"
|
|
77
|
-
/>
|
|
78
|
-
</div>
|
|
79
|
-
</div>
|
|
80
|
-
</PageRow>
|
|
81
|
-
|
|
82
|
-
<!-- ── Variants ──────────────────────────────────────────────────── -->
|
|
83
|
-
<PageRow tag="div" variant="content" :style-class-passthrough="['mbe-24']">
|
|
84
|
-
<h2 class="page-heading-2">Variants</h2>
|
|
85
|
-
</PageRow>
|
|
86
|
-
|
|
87
|
-
<!-- Default -->
|
|
88
|
-
<PageRow tag="div" variant="content" :style-class-passthrough="['mbe-32']">
|
|
89
|
-
<div class="sri-demo-row">
|
|
90
|
-
<div class="sri-demo-row__info">
|
|
91
|
-
<h3 class="page-heading-3 mbe-8">Default</h3>
|
|
92
|
-
<p class="page-body-normal mbe-12">
|
|
93
|
-
All props at their default values. A portrait image with a generous parallax offset panning from top to
|
|
94
|
-
bottom as the frame crosses the viewport.
|
|
95
|
-
</p>
|
|
96
|
-
<dl class="sri-props">
|
|
97
|
-
<dt>frameHeight</dt>
|
|
98
|
-
<dd>540px</dd>
|
|
99
|
-
<dt>parallaxOffset</dt>
|
|
100
|
-
<dd>36rem</dd>
|
|
101
|
-
<dt>focalX</dt>
|
|
102
|
-
<dd>50%</dd>
|
|
103
|
-
</dl>
|
|
104
|
-
</div>
|
|
105
|
-
<ScrollRevealImage
|
|
106
|
-
src="/images/page/hero/hero-blonde.jpg"
|
|
107
|
-
alt="Blonde hair portrait"
|
|
108
|
-
:img-width="1280"
|
|
109
|
-
:img-height="1920"
|
|
110
|
-
/>
|
|
111
|
-
</div>
|
|
112
|
-
</PageRow>
|
|
113
|
-
|
|
114
|
-
<!-- Short frame / banner -->
|
|
115
|
-
<PageRow tag="div" variant="content" :style-class-passthrough="['mbe-32']">
|
|
116
|
-
<div class="sri-demo-row">
|
|
117
|
-
<div class="sri-demo-row__info">
|
|
118
|
-
<h3 class="page-heading-3 mbe-8">Short frame — landscape image</h3>
|
|
119
|
-
<p class="page-body-normal mbe-12">
|
|
120
|
-
A shallow frame with a wide banner image. The reduced
|
|
121
|
-
<code>parallaxOffset</code>
|
|
122
|
-
is proportional to the shorter frame height.
|
|
123
|
-
</p>
|
|
124
|
-
<dl class="sri-props">
|
|
125
|
-
<dt>frameHeight</dt>
|
|
126
|
-
<dd>320px</dd>
|
|
127
|
-
<dt>parallaxOffset</dt>
|
|
128
|
-
<dd>24rem</dd>
|
|
129
|
-
</dl>
|
|
130
|
-
</div>
|
|
131
|
-
<ScrollRevealImage
|
|
132
|
-
src="/images/banners/banner-mid-brown.webp"
|
|
133
|
-
alt="Mid brown hair banner"
|
|
134
|
-
:img-width="1920"
|
|
135
|
-
:img-height="800"
|
|
136
|
-
frame-height="320px"
|
|
137
|
-
parallax-offset="24rem"
|
|
138
|
-
/>
|
|
139
|
-
</div>
|
|
140
|
-
</PageRow>
|
|
141
|
-
|
|
142
|
-
<!-- Rounded corners -->
|
|
143
|
-
<PageRow tag="div" variant="content" :style-class-passthrough="['mbe-32']">
|
|
144
|
-
<div class="sri-demo-row">
|
|
145
|
-
<div class="sri-demo-row__info">
|
|
146
|
-
<h3 class="page-heading-3 mbe-8">Rounded corners</h3>
|
|
147
|
-
<p class="page-body-normal mbe-12">
|
|
148
|
-
The
|
|
149
|
-
<code>radius</code>
|
|
150
|
-
prop applies
|
|
151
|
-
<code>border-radius</code>
|
|
152
|
-
to the clipping frame, so the image reveal stays contained within the rounded shape.
|
|
153
|
-
</p>
|
|
154
|
-
<dl class="sri-props">
|
|
155
|
-
<dt>frameHeight</dt>
|
|
156
|
-
<dd>480px</dd>
|
|
157
|
-
<dt>parallaxOffset</dt>
|
|
158
|
-
<dd>36rem</dd>
|
|
159
|
-
<dt>radius</dt>
|
|
160
|
-
<dd>2.4rem</dd>
|
|
161
|
-
</dl>
|
|
162
|
-
</div>
|
|
163
|
-
<ScrollRevealImage
|
|
164
|
-
src="/images/banners/banner-ginger.webp"
|
|
165
|
-
alt="Ginger hair banner"
|
|
166
|
-
:img-width="1920"
|
|
167
|
-
:img-height="800"
|
|
168
|
-
frame-height="480px"
|
|
169
|
-
radius="2.4rem"
|
|
170
|
-
/>
|
|
171
|
-
</div>
|
|
172
|
-
</PageRow>
|
|
173
|
-
|
|
174
|
-
<!-- Focal point -->
|
|
175
|
-
<PageRow tag="div" variant="content" :style-class-passthrough="['mbe-32']">
|
|
176
|
-
<div class="sri-demo-row">
|
|
177
|
-
<div class="sri-demo-row__info">
|
|
178
|
-
<h3 class="page-heading-3 mbe-8">Horizontal focal point</h3>
|
|
179
|
-
<p class="page-body-normal mbe-12">
|
|
180
|
-
<code>focalX</code>
|
|
181
|
-
pins the horizontal crop axis. Here it is pushed right so the subject stays centred in the narrower
|
|
182
|
-
right-hand column.
|
|
183
|
-
</p>
|
|
184
|
-
<dl class="sri-props">
|
|
185
|
-
<dt>frameHeight</dt>
|
|
186
|
-
<dd>540px</dd>
|
|
187
|
-
<dt>parallaxOffset</dt>
|
|
188
|
-
<dd>36rem</dd>
|
|
189
|
-
<dt>focalX</dt>
|
|
190
|
-
<dd>75%</dd>
|
|
191
|
-
</dl>
|
|
192
|
-
</div>
|
|
193
|
-
<ScrollRevealImage
|
|
194
|
-
src="/images/page/hero/hero-red.jpg"
|
|
195
|
-
alt="Red hair portrait"
|
|
196
|
-
:img-width="1280"
|
|
197
|
-
:img-height="1920"
|
|
198
|
-
focal-x="75%"
|
|
199
|
-
/>
|
|
200
|
-
</div>
|
|
201
|
-
</PageRow>
|
|
202
|
-
|
|
203
|
-
<!-- Tall frame -->
|
|
204
|
-
<PageRow tag="div" variant="content" :style-class-passthrough="['mbe-32']">
|
|
205
|
-
<div class="sri-demo-row">
|
|
206
|
-
<div class="sri-demo-row__info">
|
|
207
|
-
<h3 class="page-heading-3 mbe-8">Tall frame — maximum travel</h3>
|
|
208
|
-
<p class="page-body-normal mbe-12">
|
|
209
|
-
A tall frame combined with a large
|
|
210
|
-
<code>parallaxOffset</code>
|
|
211
|
-
creates the most dramatic reveal — nearly the full image height is traversed as you scroll.
|
|
212
|
-
</p>
|
|
213
|
-
<dl class="sri-props">
|
|
214
|
-
<dt>frameHeight</dt>
|
|
215
|
-
<dd>70vh</dd>
|
|
216
|
-
<dt>parallaxOffset</dt>
|
|
217
|
-
<dd>60rem</dd>
|
|
218
|
-
</dl>
|
|
219
|
-
</div>
|
|
220
|
-
<ScrollRevealImage
|
|
221
|
-
src="/images/page/hero/hero-hair.jpg"
|
|
222
|
-
alt="Hair portrait"
|
|
223
|
-
:img-width="1280"
|
|
224
|
-
:img-height="1920"
|
|
225
|
-
frame-height="70vh"
|
|
226
|
-
parallax-offset="60rem"
|
|
227
|
-
/>
|
|
228
|
-
</div>
|
|
229
|
-
</PageRow>
|
|
230
|
-
|
|
231
|
-
<!-- ScrollRevealFrame: image grid -->
|
|
232
|
-
<PageRow tag="div" variant="content" :style-class-passthrough="['mbe-48']">
|
|
233
|
-
<div class="sri-demo-row">
|
|
234
|
-
<div class="sri-demo-row__info">
|
|
235
|
-
<h3 class="page-heading-3 mbe-8">Image grid — ScrollRevealFrame</h3>
|
|
236
|
-
<p class="page-body-normal mbe-12">
|
|
237
|
-
<code>ScrollRevealFrame</code>
|
|
238
|
-
accepts arbitrary slot content. Here a six-image CSS grid scrolls as a single unit inside the clipping
|
|
239
|
-
frame — no
|
|
240
|
-
<code>focalX</code>
|
|
241
|
-
or
|
|
242
|
-
<code>NuxtImg</code>
|
|
243
|
-
wiring needed.
|
|
244
|
-
</p>
|
|
245
|
-
<dl class="sri-props">
|
|
246
|
-
<dt>component</dt>
|
|
247
|
-
<dd>ScrollRevealFrame</dd>
|
|
248
|
-
<dt>frameHeight</dt>
|
|
249
|
-
<dd>480px</dd>
|
|
250
|
-
<dt>parallaxOffset</dt>
|
|
251
|
-
<dd>36rem</dd>
|
|
252
|
-
</dl>
|
|
253
|
-
</div>
|
|
254
|
-
<ScrollRevealFrame frame-height="480px" parallax-offset="36rem">
|
|
255
|
-
<div class="sri-image-grid">
|
|
256
|
-
<div class="sri-image-grid__cell">
|
|
257
|
-
<NuxtImg
|
|
258
|
-
src="/images/services/service-balayage.jpg"
|
|
259
|
-
alt="Balayage service"
|
|
260
|
-
:width="800"
|
|
261
|
-
:height="800"
|
|
262
|
-
loading="lazy"
|
|
263
|
-
decoding="async"
|
|
264
|
-
class="sri-image-grid__img"
|
|
265
|
-
/>
|
|
266
|
-
</div>
|
|
267
|
-
<div class="sri-image-grid__cell">
|
|
268
|
-
<NuxtImg
|
|
269
|
-
src="/images/services/service-colour.jpg"
|
|
270
|
-
alt="Colour service"
|
|
271
|
-
:width="800"
|
|
272
|
-
:height="800"
|
|
273
|
-
loading="lazy"
|
|
274
|
-
decoding="async"
|
|
275
|
-
class="sri-image-grid__img"
|
|
276
|
-
/>
|
|
277
|
-
</div>
|
|
278
|
-
<div class="sri-image-grid__cell">
|
|
279
|
-
<NuxtImg
|
|
280
|
-
src="/images/services/service-cut.jpg"
|
|
281
|
-
alt="Cut service"
|
|
282
|
-
:width="800"
|
|
283
|
-
:height="800"
|
|
284
|
-
loading="lazy"
|
|
285
|
-
decoding="async"
|
|
286
|
-
class="sri-image-grid__img"
|
|
287
|
-
/>
|
|
288
|
-
</div>
|
|
289
|
-
<div class="sri-image-grid__cell">
|
|
290
|
-
<NuxtImg
|
|
291
|
-
src="/images/services/service-highlights.jpg"
|
|
292
|
-
alt="Highlights service"
|
|
293
|
-
:width="800"
|
|
294
|
-
:height="800"
|
|
295
|
-
loading="lazy"
|
|
296
|
-
decoding="async"
|
|
297
|
-
class="sri-image-grid__img"
|
|
298
|
-
/>
|
|
299
|
-
</div>
|
|
300
|
-
<div class="sri-image-grid__cell">
|
|
301
|
-
<NuxtImg
|
|
302
|
-
src="/images/services/service-lowlights.jpg"
|
|
303
|
-
alt="Lowlights service"
|
|
304
|
-
:width="800"
|
|
305
|
-
:height="800"
|
|
306
|
-
loading="lazy"
|
|
307
|
-
decoding="async"
|
|
308
|
-
class="sri-image-grid__img"
|
|
309
|
-
/>
|
|
310
|
-
</div>
|
|
311
|
-
<div class="sri-image-grid__cell">
|
|
312
|
-
<NuxtImg
|
|
313
|
-
src="/images/services/service-toner.jpg"
|
|
314
|
-
alt="Toner service"
|
|
315
|
-
:width="800"
|
|
316
|
-
:height="800"
|
|
317
|
-
loading="lazy"
|
|
318
|
-
decoding="async"
|
|
319
|
-
class="sri-image-grid__img"
|
|
320
|
-
/>
|
|
321
|
-
</div>
|
|
322
|
-
</div>
|
|
323
|
-
</ScrollRevealFrame>
|
|
324
|
-
</div>
|
|
325
|
-
</PageRow>
|
|
326
|
-
</template>
|
|
327
|
-
</NuxtLayout>
|
|
328
|
-
</div>
|
|
329
|
-
</template>
|
|
330
|
-
|
|
331
|
-
<script setup lang="ts">
|
|
332
|
-
import type { IFormMultipleOptions } from "~/types/forms/types.forms";
|
|
333
|
-
|
|
334
|
-
definePageMeta({
|
|
335
|
-
layout: false,
|
|
336
|
-
});
|
|
337
|
-
|
|
338
|
-
useHead({
|
|
339
|
-
title: "ScrollRevealImage / ScrollRevealFrame",
|
|
340
|
-
meta: [
|
|
341
|
-
{
|
|
342
|
-
name: "description",
|
|
343
|
-
content: "ScrollRevealImage and ScrollRevealFrame — pure-CSS parallax scroll reveal effect demo",
|
|
344
|
-
},
|
|
345
|
-
],
|
|
346
|
-
bodyAttrs: {
|
|
347
|
-
class: "scroll-reveal-image-page",
|
|
348
|
-
},
|
|
349
|
-
});
|
|
350
|
-
|
|
351
|
-
const frameHeight = ref("540px");
|
|
352
|
-
const parallaxOffset = ref("36rem");
|
|
353
|
-
const focalX = ref("50%");
|
|
354
|
-
const radius = ref("0px");
|
|
355
|
-
|
|
356
|
-
const frameHeightData = ref<IFormMultipleOptions>({
|
|
357
|
-
data: [
|
|
358
|
-
{ id: "fh-320", name: "frameHeight", value: "320px", label: "320px" },
|
|
359
|
-
{ id: "fh-540", name: "frameHeight", value: "540px", label: "540px" },
|
|
360
|
-
{ id: "fh-60vh", name: "frameHeight", value: "60vh", label: "60vh" },
|
|
361
|
-
{ id: "fh-80vh", name: "frameHeight", value: "80vh", label: "80vh" },
|
|
362
|
-
],
|
|
363
|
-
total: 4,
|
|
364
|
-
skip: 0,
|
|
365
|
-
limit: 4,
|
|
366
|
-
});
|
|
367
|
-
|
|
368
|
-
const parallaxOffsetData = ref<IFormMultipleOptions>({
|
|
369
|
-
data: [
|
|
370
|
-
{ id: "po-20", name: "parallaxOffset", value: "20rem", label: "20rem" },
|
|
371
|
-
{ id: "po-36", name: "parallaxOffset", value: "36rem", label: "36rem" },
|
|
372
|
-
{ id: "po-48", name: "parallaxOffset", value: "48rem", label: "48rem" },
|
|
373
|
-
{ id: "po-60", name: "parallaxOffset", value: "60rem", label: "60rem" },
|
|
374
|
-
],
|
|
375
|
-
total: 4,
|
|
376
|
-
skip: 0,
|
|
377
|
-
limit: 4,
|
|
378
|
-
});
|
|
379
|
-
|
|
380
|
-
const focalXData = ref<IFormMultipleOptions>({
|
|
381
|
-
data: [
|
|
382
|
-
{ id: "fx-left", name: "focalX", value: "20%", label: "left" },
|
|
383
|
-
{ id: "fx-center", name: "focalX", value: "50%", label: "center" },
|
|
384
|
-
{ id: "fx-right", name: "focalX", value: "80%", label: "right" },
|
|
385
|
-
],
|
|
386
|
-
total: 3,
|
|
387
|
-
skip: 0,
|
|
388
|
-
limit: 3,
|
|
389
|
-
});
|
|
390
|
-
|
|
391
|
-
const radiusData = ref<IFormMultipleOptions>({
|
|
392
|
-
data: [
|
|
393
|
-
{ id: "r-0", name: "radius", value: "0px", label: "none" },
|
|
394
|
-
{ id: "r-8", name: "radius", value: "0.8rem", label: "0.8rem" },
|
|
395
|
-
{ id: "r-16", name: "radius", value: "1.6rem", label: "1.6rem" },
|
|
396
|
-
{ id: "r-24", name: "radius", value: "2.4rem", label: "2.4rem" },
|
|
397
|
-
],
|
|
398
|
-
total: 4,
|
|
399
|
-
skip: 0,
|
|
400
|
-
limit: 4,
|
|
401
|
-
});
|
|
402
|
-
</script>
|
|
403
|
-
|
|
404
|
-
<style lang="css">
|
|
405
|
-
.scroll-reveal-image-page {
|
|
406
|
-
.sri-demo-row {
|
|
407
|
-
display: grid;
|
|
408
|
-
grid-template-columns: 1fr;
|
|
409
|
-
gap: 3.2rem;
|
|
410
|
-
align-items: start;
|
|
411
|
-
|
|
412
|
-
@media (width >= 768px) {
|
|
413
|
-
grid-template-columns: 1fr 2fr;
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
& .sri-demo-row__info {
|
|
417
|
-
position: sticky;
|
|
418
|
-
top: 2.4rem;
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
.sri-props {
|
|
423
|
-
display: grid;
|
|
424
|
-
grid-template-columns: auto 1fr;
|
|
425
|
-
gap: 0.4rem 1.2rem;
|
|
426
|
-
font-size: 1.3rem;
|
|
427
|
-
margin: 0;
|
|
428
|
-
|
|
429
|
-
dt {
|
|
430
|
-
color: var(--slate-07);
|
|
431
|
-
font-family: monospace;
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
dd {
|
|
435
|
-
margin: 0;
|
|
436
|
-
font-family: monospace;
|
|
437
|
-
color: var(--slate-10);
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
.sri-image-grid {
|
|
442
|
-
display: grid;
|
|
443
|
-
grid-template-columns: repeat(3, 1fr);
|
|
444
|
-
grid-template-rows: repeat(2, 1fr);
|
|
445
|
-
gap: 0.4rem;
|
|
446
|
-
height: 100%;
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
.sri-image-grid__cell {
|
|
450
|
-
overflow: hidden;
|
|
451
|
-
min-height: 0;
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
.sri-image-grid__img {
|
|
455
|
-
display: block;
|
|
456
|
-
width: 100%;
|
|
457
|
-
height: 100%;
|
|
458
|
-
object-fit: cover;
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
.demo-controls {
|
|
462
|
-
padding: 1.6rem;
|
|
463
|
-
border: 1px solid var(--slate-06);
|
|
464
|
-
border-radius: 0.8rem;
|
|
465
|
-
margin-block: 2.4rem;
|
|
466
|
-
|
|
467
|
-
& .demo-controls__heading {
|
|
468
|
-
font-size: 1.1rem;
|
|
469
|
-
font-weight: 600;
|
|
470
|
-
text-transform: uppercase;
|
|
471
|
-
letter-spacing: 0.08em;
|
|
472
|
-
color: var(--slate-08);
|
|
473
|
-
margin-block-end: 1.2rem;
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
& .demo-controls__fields {
|
|
477
|
-
display: flex;
|
|
478
|
-
flex-direction: column;
|
|
479
|
-
gap: 1.2rem;
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
</style>
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<NuxtLayout name="default">
|
|
4
|
-
<template #layout-content>
|
|
5
|
-
<PageRow tag="div" variant="full" :style-class-passthrough="['expanding-panel-section', 'mbe-20']">
|
|
6
|
-
<h1 class="page-heading-1">SectionParallax Component</h1>
|
|
7
|
-
<p class="mbe-12">Static image displayed as page scrolls through it.</p>
|
|
8
|
-
</PageRow>
|
|
9
|
-
<SectionParallax
|
|
10
|
-
background-image="/images/rotating-carousel/image-3.webp"
|
|
11
|
-
:style-class-passthrough="['mbe-20']"
|
|
12
|
-
>
|
|
13
|
-
<PageRow tag="div" variant="full" :style-class-passthrough="['expanding-panel-section', 'mbe-20']">
|
|
14
|
-
<h1 class="page-heading-1">SectionParallax Content</h1>
|
|
15
|
-
<p class="page-body-normal">This is default slot content for the SectionParallax component.</p>
|
|
16
|
-
<p class="page-body-normal">As it's a slot, any html content can be placed here.</p>
|
|
17
|
-
</PageRow>
|
|
18
|
-
</SectionParallax>
|
|
19
|
-
</template>
|
|
20
|
-
</NuxtLayout>
|
|
21
|
-
</div>
|
|
22
|
-
</template>
|
|
23
|
-
|
|
24
|
-
<script setup lang="ts">
|
|
25
|
-
definePageMeta({
|
|
26
|
-
layout: false,
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
useHead({
|
|
30
|
-
title: "SectionParallax Component",
|
|
31
|
-
meta: [
|
|
32
|
-
{
|
|
33
|
-
name: "description",
|
|
34
|
-
content: "SectionParallax Component description content",
|
|
35
|
-
},
|
|
36
|
-
],
|
|
37
|
-
bodyAttrs: {
|
|
38
|
-
class: "section-parallax-page",
|
|
39
|
-
},
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
const forceOpened = ref(false);
|
|
43
|
-
</script>
|
|
44
|
-
|
|
45
|
-
<style lang="css">
|
|
46
|
-
.section-parallax-page {
|
|
47
|
-
/* Page specific styles */
|
|
48
|
-
|
|
49
|
-
margin-block-end: 100vh;
|
|
50
|
-
|
|
51
|
-
.section-parallax {
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
</style>
|
|
@@ -1,43 +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
|
-
<h2 class="page-heading-2">ColourFinder</h2>
|
|
7
|
-
</PageRow>
|
|
8
|
-
|
|
9
|
-
<PageRow tag="div" variant="content" :style-class-passthrough="['mbe-20']">
|
|
10
|
-
<ColourFinder />
|
|
11
|
-
</PageRow>
|
|
12
|
-
</template>
|
|
13
|
-
</NuxtLayout>
|
|
14
|
-
</div>
|
|
15
|
-
</template>
|
|
16
|
-
|
|
17
|
-
<script setup lang="ts">
|
|
18
|
-
definePageMeta({
|
|
19
|
-
layout: false,
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
useHead({
|
|
23
|
-
title: "ColourFinder",
|
|
24
|
-
meta: [
|
|
25
|
-
{
|
|
26
|
-
name: "description",
|
|
27
|
-
content: "ColourFinder Meta description content",
|
|
28
|
-
},
|
|
29
|
-
],
|
|
30
|
-
bodyAttrs: {
|
|
31
|
-
class: "colour-finder-page",
|
|
32
|
-
},
|
|
33
|
-
});
|
|
34
|
-
</script>
|
|
35
|
-
|
|
36
|
-
<style lang="css">
|
|
37
|
-
.colour-finder-page {
|
|
38
|
-
.colour-finder {
|
|
39
|
-
max-inline-size: 800px;
|
|
40
|
-
margin-inline: auto;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
</style>
|
|
@@ -1,57 +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
|
-
<h1 class="page-heading-1">Services Card Grid</h1>
|
|
7
|
-
<p class="page-body-normal">Example of a services card grid component.</p>
|
|
8
|
-
</PageRow>
|
|
9
|
-
|
|
10
|
-
<PageRow tag="div" variant="content" :style-class-passthrough="['mbe-20']">
|
|
11
|
-
<ServicesCardGrid
|
|
12
|
-
:services-data="servicesData ?? []"
|
|
13
|
-
:eyebrow-config="{ fontSize: 'large' }"
|
|
14
|
-
:hero-config="{ tag: 'h2', fontSize: 'heading' }"
|
|
15
|
-
/>
|
|
16
|
-
</PageRow>
|
|
17
|
-
</template>
|
|
18
|
-
</NuxtLayout>
|
|
19
|
-
</div>
|
|
20
|
-
</template>
|
|
21
|
-
|
|
22
|
-
<script setup lang="ts">
|
|
23
|
-
definePageMeta({
|
|
24
|
-
layout: false,
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
useHead({
|
|
28
|
-
title: "Services Card Grid",
|
|
29
|
-
meta: [{ name: "description", content: "Services Card Grid" }],
|
|
30
|
-
bodyAttrs: {
|
|
31
|
-
class: "page-services-card-grid",
|
|
32
|
-
},
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
const store = useServicesStore();
|
|
36
|
-
const { servicesData } = storeToRefs(store);
|
|
37
|
-
|
|
38
|
-
if (servicesData.value.length === 0) {
|
|
39
|
-
await store.fetchServicesData();
|
|
40
|
-
}
|
|
41
|
-
</script>
|
|
42
|
-
|
|
43
|
-
<style lang="css">
|
|
44
|
-
.page-services-card-grid {
|
|
45
|
-
/* Page specific styles here */
|
|
46
|
-
.services-card-grid {
|
|
47
|
-
--_gap: 4rem;
|
|
48
|
-
--_column-min-width: 250px;
|
|
49
|
-
|
|
50
|
-
.services-card {
|
|
51
|
-
--_eyebrow-text-margin-block: 0.8rem 0;
|
|
52
|
-
--_hero-text-margin-block: 2rem 1rem;
|
|
53
|
-
--_description-text-colour: var(--colour-text-secondary);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
</style>
|