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