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.
Files changed (108) hide show
  1. package/.claude/hooks/check-component-update.sh +30 -1
  2. package/.claude/skills/components/breadcrumb.md +49 -0
  3. package/.claude/skills/components/content-docs.md +1 -1
  4. package/.claude/skills/components/service-detail.md +156 -0
  5. package/.claude/skills/components/services-card-grid.md +9 -9
  6. package/.claude/skills/components/services-card.md +82 -30
  7. package/.claude/skills/index.md +3 -1
  8. package/.claude/skills/qa-panel.md +2 -2
  9. package/.vscode/srcdev-component-breadcrumb.code-snippets +14 -0
  10. package/.vscode/srcdev-component-service-detail.code-snippets +49 -0
  11. package/.vscode/srcdev-component-services-card.code-snippets +108 -0
  12. package/app/components/01.atoms/navigation/breadcrumb/Breadcrumb.vue +94 -0
  13. package/app/components/01.atoms/navigation/breadcrumb/CONSUMER-STYLING.md +32 -0
  14. package/app/components/01.atoms/navigation/breadcrumb/stories/Breadcrumb.stories.ts +87 -0
  15. package/app/components/01.atoms/navigation/breadcrumb/tests/Breadcrumb.spec.ts +87 -0
  16. package/app/components/01.atoms/navigation/breadcrumb/tests/__snapshots__/Breadcrumb.spec.ts.snap +13 -0
  17. package/app/components/03.organisms/services/service-detail/CONSUMER-STYLING.md +181 -0
  18. package/app/components/03.organisms/services/service-detail/ServiceDetail.vue +480 -0
  19. package/app/components/03.organisms/services/service-detail/stories/ServiceDetail.stories.ts +282 -0
  20. package/app/components/03.organisms/services/service-detail/tests/ServiceDetail.spec.ts +270 -0
  21. package/app/components/03.organisms/services/service-detail/tests/__snapshots__/ServiceDetail.spec.ts.snap +99 -0
  22. package/app/components/03.organisms/services/services-card/CONSUMER-STYLING.md +129 -0
  23. package/app/components/03.organisms/services/services-card/ServicesCard.vue +153 -39
  24. package/app/components/03.organisms/services/services-card/stories/ServicesCard.stories.ts +65 -0
  25. package/app/components/03.organisms/services/services-card/tests/ServicesCard.spec.ts +82 -0
  26. package/app/components/03.organisms/services/services-card/tests/__snapshots__/ServicesCard.spec.ts.snap +13 -5
  27. package/app/components/03.organisms/services/services-grids/ServicesCardGrid.vue +3 -7
  28. package/app/components/03.organisms/services/services-grids/stories/ServicesCardGrid.stories.ts +126 -2
  29. package/app/components/03.organisms/services/services-grids/stories/ServicesSectionGrid.stories.ts +6 -0
  30. package/app/components/03.organisms/services/services-grids/tests/__snapshots__/ServicesCardGrid.spec.ts.snap +51 -27
  31. package/app/types/components/breadcrumb.ts +4 -0
  32. package/app/types/components/index.ts +1 -0
  33. package/package.json +2 -2
  34. package/app/pages/auto-grid.vue +0 -328
  35. package/app/pages/banner-video.vue +0 -238
  36. package/app/pages/forms/examples/buttons/index.vue +0 -259
  37. package/app/pages/forms/examples/material/checkbox-radio-panels.vue +0 -244
  38. package/app/pages/forms/examples/material/cssbattle.vue +0 -60
  39. package/app/pages/forms/examples/material/text-fields.vue +0 -910
  40. package/app/pages/grid-stack.vue +0 -252
  41. package/app/pages/index.vue +0 -127
  42. package/app/pages/page-hero-highlights.vue +0 -204
  43. package/app/pages/samaritan.vue +0 -327
  44. package/app/pages/typography/hero-text.vue +0 -97
  45. package/app/pages/typography/index.vue +0 -39
  46. package/app/pages/typography/page-body.vue +0 -171
  47. package/app/pages/typography/page-heading.vue +0 -76
  48. package/app/pages/typography/page-link.vue +0 -103
  49. package/app/pages/ui/accordian.vue +0 -211
  50. package/app/pages/ui/anchor-scroll-tab-navigation.vue +0 -191
  51. package/app/pages/ui/anchor-scroll.vue +0 -367
  52. package/app/pages/ui/animated-svg-text.vue +0 -85
  53. package/app/pages/ui/block-decorators.vue +0 -142
  54. package/app/pages/ui/card-core.vue +0 -82
  55. package/app/pages/ui/carousel-basic.vue +0 -292
  56. package/app/pages/ui/carousel-flip.vue +0 -449
  57. package/app/pages/ui/carousel-infinite.vue +0 -260
  58. package/app/pages/ui/clipped-panels.vue +0 -101
  59. package/app/pages/ui/contact-section.vue +0 -323
  60. package/app/pages/ui/container-glow.vue +0 -106
  61. package/app/pages/ui/content-width.vue +0 -126
  62. package/app/pages/ui/deep-expanding-menu.vue +0 -138
  63. package/app/pages/ui/display-avatar.vue +0 -253
  64. package/app/pages/ui/display-banner.vue +0 -78
  65. package/app/pages/ui/display-chip.vue +0 -367
  66. package/app/pages/ui/display-details.vue +0 -171
  67. package/app/pages/ui/display-dialog.vue +0 -344
  68. package/app/pages/ui/display-pill.vue +0 -396
  69. package/app/pages/ui/display-prompt.vue +0 -284
  70. package/app/pages/ui/display-toast.vue +0 -311
  71. package/app/pages/ui/expanding-panel.vue +0 -326
  72. package/app/pages/ui/glowing-border.vue +0 -111
  73. package/app/pages/ui/layout-content-docs.vue +0 -72
  74. package/app/pages/ui/layout-grid-a.vue +0 -96
  75. package/app/pages/ui/layout-grid-b.vue +0 -132
  76. package/app/pages/ui/magnetic-navigation.vue +0 -50
  77. package/app/pages/ui/marquee-scroller.vue +0 -99
  78. package/app/pages/ui/mask-element.vue +0 -104
  79. package/app/pages/ui/masonry-columns.vue +0 -55
  80. package/app/pages/ui/masonry-grid-ordered-experiment.vue +0 -79
  81. package/app/pages/ui/masonry-grid-ordered.vue +0 -56
  82. package/app/pages/ui/masonry-grid-sorted.vue +0 -55
  83. package/app/pages/ui/masonry-grid.vue +0 -55
  84. package/app/pages/ui/navigation/navigation-horizontal.vue +0 -484
  85. package/app/pages/ui/navigation/site-navigation/about.vue +0 -36
  86. package/app/pages/ui/navigation/site-navigation/contact.vue +0 -39
  87. package/app/pages/ui/navigation/site-navigation/index.vue +0 -38
  88. package/app/pages/ui/navigation/site-navigation/portfolio.vue +0 -43
  89. package/app/pages/ui/navigation/site-navigation/services.vue +0 -42
  90. package/app/pages/ui/navigation/tab-navigation.vue +0 -493
  91. package/app/pages/ui/page-row.vue +0 -127
  92. package/app/pages/ui/price-list.vue +0 -65
  93. package/app/pages/ui/profile-section.vue +0 -142
  94. package/app/pages/ui/qr-code/[componentName].vue +0 -218
  95. package/app/pages/ui/rotating-carousel.vue +0 -154
  96. package/app/pages/ui/scroll-reveal-image.vue +0 -483
  97. package/app/pages/ui/section-parallax.vue +0 -54
  98. package/app/pages/ui/services/colour-finder.vue +0 -43
  99. package/app/pages/ui/services/services-cards.vue +0 -57
  100. package/app/pages/ui/services/services-section/[slug].vue +0 -61
  101. package/app/pages/ui/services/services-sections-compact.vue +0 -64
  102. package/app/pages/ui/settings.vue +0 -54
  103. package/app/pages/ui/simple-grid.vue +0 -55
  104. package/app/pages/ui/slider-gallery.vue +0 -261
  105. package/app/pages/ui/tabs-y.vue +0 -107
  106. package/app/pages/ui/tabs.vue +0 -189
  107. package/app/pages/ui/tooltips.vue +0 -104
  108. 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>