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,328 +0,0 @@
1
- <template>
2
- <div>
3
- <NuxtLayout name="default">
4
- <template #layout-content>
5
- <PageRow tag="div" variant="full" :style-class-passthrough="['mbe-32']">
6
- <h1 class="page-heading-1">AutoGrid</h1>
7
- <p class="page-body-normal">
8
- Responsive auto-fit CSS grid wrapper. Columns auto-fit to a minimum width; when
9
- <code>is-responsive</code>
10
- is enabled, the minimum shifts at container breakpoints via
11
- <code>@container</code>
12
- queries.
13
- </p>
14
- </PageRow>
15
-
16
- <div v-if="isDev" class="qa-panel">
17
- <details class="qa-panel__details">
18
- <summary class="qa-panel__summary">
19
- <span class="qa-panel__title">QA — AutoGrid</span>
20
- <code class="qa-panel__status">
21
- tag:{{ qaTag }} · responsive:{{ qaIsResponsive ? "on" : "off" }} · small:{{ qaMinColSizeSmall }} ·
22
- default:{{ qaMinColSizeDefault }} · large:{{ qaMinColSizeLarge }} · gap:{{ qaGap }}
23
- </code>
24
- </summary>
25
- <div class="qa-panel__body">
26
- <div class="qa-panel__group">
27
- <span class="qa-panel__label">tag</span>
28
- <div class="qa-panel__chips">
29
- <button
30
- v-for="opt in tagOptions"
31
- :key="opt"
32
- class="qa-panel__chip"
33
- :class="{ 'is-active': qaTag === opt }"
34
- @click="qaTag = opt"
35
- >
36
- {{ opt }}
37
- </button>
38
- </div>
39
- </div>
40
-
41
- <div class="qa-panel__group">
42
- <span class="qa-panel__label">is-responsive</span>
43
- <div class="qa-panel__chips">
44
- <button
45
- v-for="opt in [true, false]"
46
- :key="String(opt)"
47
- class="qa-panel__chip"
48
- :class="{ 'is-active': qaIsResponsive === opt }"
49
- @click="qaIsResponsive = opt"
50
- >
51
- {{ opt ? "on" : "off" }}
52
- </button>
53
- </div>
54
- </div>
55
-
56
- <div class="qa-panel__group">
57
- <span class="qa-panel__label">min-col-size-small</span>
58
- <div class="qa-panel__chips">
59
- <button
60
- v-for="preset in sizePresets"
61
- :key="preset"
62
- class="qa-panel__chip"
63
- :class="{ 'is-active': qaMinColSizeSmall === preset }"
64
- @click="qaMinColSizeSmall = preset"
65
- >
66
- {{ preset }}
67
- </button>
68
- </div>
69
- <input v-model="qaMinColSizeSmall" placeholder="e.g. 200px" class="qa-panel__input" />
70
- </div>
71
-
72
- <div class="qa-panel__group">
73
- <span class="qa-panel__label">min-col-size-default</span>
74
- <div class="qa-panel__chips">
75
- <button
76
- v-for="preset in sizePresets"
77
- :key="preset"
78
- class="qa-panel__chip"
79
- :class="{ 'is-active': qaMinColSizeDefault === preset }"
80
- @click="qaMinColSizeDefault = preset"
81
- >
82
- {{ preset }}
83
- </button>
84
- </div>
85
- <input v-model="qaMinColSizeDefault" placeholder="e.g. 300px" class="qa-panel__input" />
86
- </div>
87
-
88
- <div class="qa-panel__group">
89
- <span class="qa-panel__label">min-col-size-large</span>
90
- <div class="qa-panel__chips">
91
- <button
92
- v-for="preset in sizePresets"
93
- :key="preset"
94
- class="qa-panel__chip"
95
- :class="{ 'is-active': qaMinColSizeLarge === preset }"
96
- @click="qaMinColSizeLarge = preset"
97
- >
98
- {{ preset }}
99
- </button>
100
- </div>
101
- <input v-model="qaMinColSizeLarge" placeholder="e.g. 350px" class="qa-panel__input" />
102
- </div>
103
-
104
- <div class="qa-panel__group">
105
- <span class="qa-panel__label">gap</span>
106
- <div class="qa-panel__chips">
107
- <button
108
- v-for="preset in gapPresets"
109
- :key="preset"
110
- class="qa-panel__chip"
111
- :class="{ 'is-active': qaGap === preset }"
112
- @click="qaGap = preset"
113
- >
114
- {{ preset }}
115
- </button>
116
- </div>
117
- <input v-model="qaGap" placeholder="e.g. 2rem" class="qa-panel__input" />
118
- </div>
119
- </div>
120
- </details>
121
- </div>
122
-
123
- <PageRow tag="div" variant="full" :style-class-passthrough="['mbe-32']">
124
- <div class="auto-grid-demo-container">
125
- <AutoGrid
126
- :tag="qaTag"
127
- :is-responsive="qaIsResponsive"
128
- :min-col-size-small="qaMinColSizeSmall"
129
- :min-col-size-default="qaMinColSizeDefault"
130
- :min-col-size-large="qaMinColSizeLarge"
131
- :style="qaStyle"
132
- >
133
- <template v-for="card in statCards" #[card.id] :key="card.id">
134
- <div class="stat-card">
135
- <span class="stat-card__label">{{ card.label }}</span>
136
- <span class="stat-card__value">{{ card.value }}</span>
137
- </div>
138
- </template>
139
- </AutoGrid>
140
- </div>
141
- </PageRow>
142
- </template>
143
- </NuxtLayout>
144
- </div>
145
- </template>
146
-
147
- <script setup lang="ts">
148
- definePageMeta({ layout: false });
149
-
150
- useHead({
151
- title: "AutoGrid",
152
- meta: [{ name: "description", content: "AutoGrid component demo" }],
153
- bodyAttrs: { class: "auto-grid-page" },
154
- });
155
-
156
- const isDev = import.meta.dev;
157
-
158
- const tagOptions = ["div", "section", "article", "main"] as const;
159
- const qaTag = ref<"div" | "section" | "article" | "main">("div");
160
- const qaIsResponsive = ref(false);
161
- const qaMinColSizeSmall = ref("250px");
162
- const qaMinColSizeDefault = ref("300px");
163
- const qaMinColSizeLarge = ref("350px");
164
- const qaGap = ref("1rem");
165
-
166
- const sizePresets = ["150px", "200px", "250px", "300px", "350px", "400px"];
167
- const gapPresets = ["0.5rem", "1rem", "1.6rem", "2.4rem", "3.2rem"];
168
-
169
- const qaStyle = computed(() => ({
170
- "--auto-grid-min-col-size-small": qaMinColSizeSmall.value,
171
- "--auto-grid-min-col-size-default": qaMinColSizeDefault.value,
172
- "--auto-grid-min-col-size-large": qaMinColSizeLarge.value,
173
- "--auto-grid-gap": qaGap.value,
174
- }));
175
-
176
- const statCards = [
177
- { id: "item-1", label: "Revenue", value: "£24,500" },
178
- { id: "item-2", label: "Clients", value: "142" },
179
- { id: "item-3", label: "Bookings", value: "38" },
180
- { id: "item-4", label: "Avg. Rating", value: "4.9" },
181
- { id: "item-5", label: "New Users", value: "76" },
182
- { id: "item-6", label: "Retention", value: "91%" },
183
- ];
184
- </script>
185
-
186
- <style lang="css">
187
- .auto-grid-page {
188
- code {
189
- font-family: monospace;
190
- font-size: 0.9em;
191
- background: var(--slate-02);
192
- padding: 0.1em 0.4em;
193
- border-radius: 0.3rem;
194
- }
195
-
196
- .auto-grid-demo-container {
197
- container-type: inline-size;
198
- }
199
-
200
- .stat-card {
201
- display: flex;
202
- flex-direction: column;
203
- gap: 0.8rem;
204
- padding: 2.4rem;
205
- background: white;
206
- border-radius: 0.8rem;
207
- box-shadow: 0 2px 8px oklch(0% 0 0 / 0.08);
208
- }
209
-
210
- .stat-card__label {
211
- font-size: 1.2rem;
212
- font-weight: 600;
213
- text-transform: uppercase;
214
- letter-spacing: 0.05em;
215
- color: var(--slate-08, #6b7280);
216
- }
217
-
218
- .stat-card__value {
219
- font-size: 2.4rem;
220
- font-weight: 700;
221
- color: var(--slate-12, #111827);
222
- }
223
-
224
- /* ── QA Panel ──────────────────────────────────────────────────── */
225
-
226
- .qa-panel {
227
- background: oklch(15% 0 0);
228
- color: white;
229
- font-size: 1.3rem;
230
- }
231
-
232
- .qa-panel__details {
233
- padding: 1rem 2rem;
234
- }
235
-
236
- .qa-panel__summary {
237
- cursor: pointer;
238
- display: flex;
239
- align-items: center;
240
- gap: 1.6rem;
241
- list-style: none;
242
- user-select: none;
243
-
244
- &::-webkit-details-marker {
245
- display: none;
246
- }
247
- }
248
-
249
- .qa-panel__title {
250
- font-weight: 600;
251
- font-size: 1.1rem;
252
- text-transform: uppercase;
253
- letter-spacing: 0.08em;
254
- }
255
-
256
- .qa-panel__status {
257
- font-family: monospace;
258
- font-size: 1.2rem;
259
- background: oklch(0% 0 0 / 0.3);
260
- padding: 0.2rem 0.8rem;
261
- border-radius: 0.4rem;
262
- user-select: text;
263
- cursor: text;
264
- }
265
-
266
- .qa-panel__body {
267
- display: flex;
268
- flex-wrap: wrap;
269
- gap: 2.4rem;
270
- padding-block: 1.2rem 0.4rem;
271
- }
272
-
273
- .qa-panel__group {
274
- display: flex;
275
- flex-direction: column;
276
- gap: 0.6rem;
277
- }
278
-
279
- .qa-panel__label {
280
- font-size: 1.1rem;
281
- text-transform: uppercase;
282
- letter-spacing: 0.08em;
283
- opacity: 0.55;
284
- }
285
-
286
- .qa-panel__chips {
287
- display: flex;
288
- flex-wrap: wrap;
289
- gap: 0.4rem;
290
- }
291
-
292
- .qa-panel__chip {
293
- font-family: monospace;
294
- font-size: 1.2rem;
295
- color: white;
296
- background: oklch(0% 0 0 / 0.25);
297
- border: 1px solid oklch(100% 0 0 / 0.18);
298
- padding: 0.3rem 1rem;
299
- border-radius: 0.4rem;
300
- cursor: pointer;
301
- transition: background 0.15s;
302
-
303
- &:hover {
304
- background: oklch(0% 0 0 / 0.4);
305
- }
306
-
307
- &.is-active {
308
- background: oklch(55% 0.18 240);
309
- border-color: oklch(55% 0.18 240);
310
- }
311
- }
312
-
313
- .qa-panel__input {
314
- font-family: monospace;
315
- font-size: 1.2rem;
316
- color: white;
317
- background: oklch(0% 0 0 / 0.25);
318
- border: 1px solid oklch(100% 0 0 / 0.18);
319
- padding: 0.3rem 1rem;
320
- border-radius: 0.4rem;
321
- width: 18rem;
322
-
323
- &::placeholder {
324
- opacity: 0.45;
325
- }
326
- }
327
- }
328
- </style>
@@ -1,238 +0,0 @@
1
- <template>
2
- <div>
3
- <NuxtLayout name="default">
4
- <template #layout-content>
5
- <BannerVideo
6
- src="/images/banners/video/lake-banner.mp4"
7
- poster="/images/banners/video/lake-banner.jpg"
8
- alt="A serene lake landscape"
9
- :depth="depth"
10
- :aspect-ratio="aspectRatio"
11
- :tag="tag"
12
- :object-fit="objectFit"
13
- :vertical-position="verticalPosition"
14
- :horizontal-position="horizontalPosition"
15
- :style-class-passthrough="['mbe-32']"
16
- />
17
-
18
- <PageRow tag="div" variant="full">
19
- <div class="banner-video-demo-controls">
20
- <p class="demo-controls__heading">Props</p>
21
-
22
- <div class="demo-controls__row">
23
- <MultipleRadiobuttons
24
- v-model="depth"
25
- v-model:field-data="depthData"
26
- name="depth"
27
- label="depth"
28
- legend="depth"
29
- error-message=""
30
- :is-button="true"
31
- :is-pill="true"
32
- :field-has-error="false"
33
- options-layout="inline"
34
- />
35
- </div>
36
-
37
- <div class="demo-controls__row">
38
- <MultipleRadiobuttons
39
- v-model="aspectRatio"
40
- v-model:field-data="aspectRatioData"
41
- name="aspectRatio"
42
- label="aspectRatio"
43
- legend="aspectRatio"
44
- error-message=""
45
- :is-button="true"
46
- :is-pill="true"
47
- :field-has-error="false"
48
- options-layout="inline"
49
- />
50
- </div>
51
-
52
- <div class="demo-controls__row">
53
- <MultipleRadiobuttons
54
- v-model="objectFit"
55
- v-model:field-data="objectFitData"
56
- name="objectFit"
57
- label="objectFit"
58
- legend="objectFit"
59
- error-message=""
60
- :is-button="true"
61
- :is-pill="true"
62
- :field-has-error="false"
63
- options-layout="inline"
64
- />
65
- </div>
66
-
67
- <div class="demo-controls__row">
68
- <MultipleRadiobuttons
69
- v-model="verticalPosition"
70
- v-model:field-data="verticalPositionData"
71
- name="verticalPosition"
72
- label="verticalPosition"
73
- legend="verticalPosition"
74
- error-message=""
75
- :is-button="true"
76
- :is-pill="true"
77
- :field-has-error="false"
78
- options-layout="inline"
79
- />
80
- </div>
81
-
82
- <div class="demo-controls__row">
83
- <MultipleRadiobuttons
84
- v-model="horizontalPosition"
85
- v-model:field-data="horizontalPositionData"
86
- name="horizontalPosition"
87
- label="horizontalPosition"
88
- legend="horizontalPosition"
89
- error-message=""
90
- :is-button="true"
91
- :is-pill="true"
92
- :field-has-error="false"
93
- options-layout="inline"
94
- />
95
- </div>
96
-
97
- <div class="demo-controls__row">
98
- <MultipleRadiobuttons
99
- v-model="tag"
100
- v-model:field-data="tagData"
101
- name="tag"
102
- label="tag"
103
- legend="tag"
104
- error-message=""
105
- :is-button="true"
106
- :is-pill="true"
107
- :field-has-error="false"
108
- options-layout="inline"
109
- />
110
- </div>
111
- </div>
112
- </PageRow>
113
- </template>
114
- </NuxtLayout>
115
- </div>
116
- </template>
117
-
118
- <script setup lang="ts">
119
- import type { IFormMultipleOptions } from "~/types/forms/types.forms";
120
-
121
- definePageMeta({
122
- layout: false,
123
- });
124
-
125
- useHead({
126
- title: "BannerVideo",
127
- meta: [{ name: "description", content: "BannerVideo component demo" }],
128
- bodyAttrs: { class: "banner-video-page" },
129
- });
130
-
131
- const depth = ref<"xs" | "sm" | "md" | "lg" | "xl">("md");
132
- const aspectRatio = ref("21/9");
133
- const tag = ref<"section" | "div" | "header" | "main" | "article">("section");
134
- const objectFit = ref<"cover" | "contain" | "fill" | "none" | "scale-down">("cover");
135
- const verticalPosition = ref<"start" | "center" | "end">("center");
136
- const horizontalPosition = ref<"start" | "center" | "end">("center");
137
-
138
- const depthData = ref<IFormMultipleOptions>({
139
- data: [
140
- { id: "depth-xs", name: "depth", value: "xs", label: "xs" },
141
- { id: "depth-sm", name: "depth", value: "sm", label: "sm" },
142
- { id: "depth-md", name: "depth", value: "md", label: "md" },
143
- { id: "depth-lg", name: "depth", value: "lg", label: "lg" },
144
- { id: "depth-xl", name: "depth", value: "xl", label: "xl" },
145
- ],
146
- total: 5,
147
- skip: 0,
148
- limit: 5,
149
- });
150
-
151
- const aspectRatioData = ref<IFormMultipleOptions>({
152
- data: [
153
- { id: "ar-16-9", name: "aspectRatio", value: "16/9", label: "16/9" },
154
- { id: "ar-21-9", name: "aspectRatio", value: "21/9", label: "21/9" },
155
- { id: "ar-4-3", name: "aspectRatio", value: "4/3", label: "4/3" },
156
- { id: "ar-1-1", name: "aspectRatio", value: "1/1", label: "1/1" },
157
- ],
158
- total: 4,
159
- skip: 0,
160
- limit: 4,
161
- });
162
-
163
- const tagData = ref<IFormMultipleOptions>({
164
- data: [
165
- { id: "tag-section", name: "tag", value: "section", label: "section" },
166
- { id: "tag-div", name: "tag", value: "div", label: "div" },
167
- { id: "tag-header", name: "tag", value: "header", label: "header" },
168
- { id: "tag-main", name: "tag", value: "main", label: "main" },
169
- { id: "tag-article", name: "tag", value: "article", label: "article" },
170
- ],
171
- total: 5,
172
- skip: 0,
173
- limit: 5,
174
- });
175
-
176
- const objectFitData = ref<IFormMultipleOptions>({
177
- data: [
178
- { id: "fit-cover", name: "objectFit", value: "cover", label: "cover" },
179
- { id: "fit-contain", name: "objectFit", value: "contain", label: "contain" },
180
- { id: "fit-fill", name: "objectFit", value: "fill", label: "fill" },
181
- { id: "fit-none", name: "objectFit", value: "none", label: "none" },
182
- { id: "fit-scale-down", name: "objectFit", value: "scale-down", label: "scale-down" },
183
- ],
184
- total: 5,
185
- skip: 0,
186
- limit: 5,
187
- });
188
-
189
- const verticalPositionData = ref<IFormMultipleOptions>({
190
- data: [
191
- { id: "vp-start", name: "verticalPosition", value: "start", label: "start (top)" },
192
- { id: "vp-center", name: "verticalPosition", value: "center", label: "center" },
193
- { id: "vp-end", name: "verticalPosition", value: "end", label: "end (bottom)" },
194
- ],
195
- total: 3,
196
- skip: 0,
197
- limit: 3,
198
- });
199
-
200
- const horizontalPositionData = ref<IFormMultipleOptions>({
201
- data: [
202
- { id: "hp-start", name: "horizontalPosition", value: "start", label: "start (left)" },
203
- { id: "hp-center", name: "horizontalPosition", value: "center", label: "center" },
204
- { id: "hp-end", name: "horizontalPosition", value: "end", label: "end (right)" },
205
- ],
206
- total: 3,
207
- skip: 0,
208
- limit: 3,
209
- });
210
- </script>
211
-
212
- <style lang="css">
213
- .banner-video-page {
214
- .banner-video-demo-controls {
215
- padding: 1.6rem;
216
- border: 1px solid var(--slate-06);
217
- border-radius: 0.8rem;
218
- /* background: var(--slate-01); */
219
-
220
- .demo-controls__heading {
221
- font-size: 1.1rem;
222
- font-weight: 600;
223
- text-transform: uppercase;
224
- letter-spacing: 0.08em;
225
- color: var(--slate-08);
226
- margin-block-end: 1.2rem;
227
- }
228
-
229
- .demo-controls__row {
230
- margin-block-end: 1.2rem;
231
-
232
- &:last-child {
233
- margin-block-end: 0;
234
- }
235
- }
236
- }
237
- }
238
- </style>