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,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>
@@ -1,259 +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 mbe-18">Settings</h1>
7
- <h2 class="page-heading-2 mbe-18">Theme Switcher</h2>
8
-
9
- <DisplayThemeSwitch />
10
- </PageRow>
11
-
12
- <PageRow tag="div" variant="content" :style-class-passthrough="['mbe-20']">
13
- <LayoutGridByCols>
14
- <template #item-0>
15
- <div>
16
- <h1>Example buttons</h1>
17
- <p>Primary submit</p>
18
-
19
- <p>Themes switcher</p>
20
- <ul class="flex-group">
21
- <li>
22
- <InputButtonCore
23
- type="button"
24
- :is-pending="false"
25
- button-text="Default"
26
- theme="default"
27
- @click.stop.prevent="swapTheme('default')"
28
- />
29
- </li>
30
- <li>
31
- <InputButtonCore
32
- type="button"
33
- :is-pending="false"
34
- button-text="Success"
35
- theme="success"
36
- @click.stop.prevent="swapTheme('success')"
37
- />
38
- </li>
39
- <li>
40
- <InputButtonCore
41
- type="button"
42
- :is-pending="false"
43
- button-text="Error"
44
- theme="error"
45
- @click.stop.prevent="swapTheme('error')"
46
- />
47
- </li>
48
- <li>
49
- <InputButtonCore
50
- type="button"
51
- :is-pending="false"
52
- button-text="Warning"
53
- theme="warning"
54
- @click.stop.prevent="swapTheme('warning')"
55
- />
56
- </li>
57
- </ul>
58
-
59
- <p>Variants switcher</p>
60
- <ul class="flex-group">
61
- <li>
62
- <InputButtonCore
63
- type="button"
64
- :is-pending="false"
65
- button-text="Primary"
66
- :theme
67
- variant="primary"
68
- @click.stop.prevent="swapVariant('primary')"
69
- />
70
- </li>
71
- <li>
72
- <InputButtonCore
73
- type="button"
74
- :is-pending="false"
75
- button-text="Secondary"
76
- :theme
77
- variant="secondary"
78
- @click.stop.prevent="swapVariant('secondary')"
79
- />
80
- </li>
81
- <li>
82
- <InputButtonCore
83
- type="button"
84
- :is-pending="false"
85
- button-text="Tertiary"
86
- :theme
87
- variant="tertiary"
88
- @click.stop.prevent="swapVariant('tertiary')"
89
- />
90
- </li>
91
- </ul>
92
-
93
- <p>Pending Settings</p>
94
- <ul class="flex-group">
95
- <li>
96
- <p>Toggle pending state</p>
97
- <InputButtonCore
98
- type="button"
99
- :button-text="`Pending is ${isPending}`"
100
- :theme
101
- variant="primary"
102
- @click.stop.prevent="isPending = !isPending"
103
- />
104
- </li>
105
- <li>
106
- <p>Toggle pending effect</p>
107
- <InputButtonCore
108
- type="button"
109
- :button-text="`Pending effect is ${hasPendingEffect}`"
110
- :theme
111
- :readonly="!isPending"
112
- variant="primary"
113
- @click.stop.prevent="hasPendingEffect = !hasPendingEffect"
114
- />
115
- </li>
116
- </ul>
117
- </div>
118
- </template>
119
- </LayoutGridByCols>
120
-
121
- <LayoutGridByCols>
122
- <template #item-0>
123
- <div>
124
- <h1>Example buttons</h1>
125
- <p>Currently displaying {{ buttonText }}</p>
126
- <ul class="flex-group">
127
- <li>
128
- <InputButtonCore
129
- type="button"
130
- :is-pending="isPending"
131
- :has-pending-effect="hasPendingEffect"
132
- button-text="Submit"
133
- :theme="theme"
134
- :variant="variant"
135
- />
136
- </li>
137
- <li>
138
- <InputButtonCore
139
- type="button"
140
- :is-pending="isPending"
141
- :has-pending-effect="hasPendingEffect"
142
- button-text="Submit"
143
- :theme="theme"
144
- :variant="variant"
145
- >
146
- <template #left>
147
- <Icon name="radix-icons:eye-none" class="icon" />
148
- </template>
149
- </InputButtonCore>
150
- </li>
151
- <li>
152
- <InputButtonCore
153
- type="button"
154
- :is-pending="isPending"
155
- :has-pending-effect="hasPendingEffect"
156
- button-text="Submit"
157
- :theme="theme"
158
- :variant="variant"
159
- >
160
- <template #right>
161
- <Icon name="radix-icons:eye-none" class="icon" />
162
- </template>
163
- </InputButtonCore>
164
- </li>
165
- <li>
166
- <InputButtonCore
167
- type="button"
168
- :is-pending="isPending"
169
- :has-pending-effect="hasPendingEffect"
170
- button-text="Submit"
171
- :theme="theme"
172
- :variant="variant"
173
- true;
174
- >
175
- <template #left>
176
- <Icon name="mdi:arrow-left" class="icon" />
177
- </template>
178
- <template #right>
179
- <Icon name="mdi:arrow-right" class="icon" />
180
- </template>
181
- </InputButtonCore>
182
- </li>
183
- <li>
184
- <InputButtonCore
185
- type="button"
186
- :is-pending="isPending"
187
- :has-pending-effect="hasPendingEffect"
188
- button-text="Submit"
189
- :theme="theme"
190
- :variant="variant"
191
- >
192
- <template #iconOnly>
193
- <Icon name="radix-icons:eye-none" class="icon" />
194
- </template>
195
- </InputButtonCore>
196
- </li>
197
- </ul>
198
- </div>
199
- </template>
200
- </LayoutGridByCols>
201
- </PageRow>
202
- </template>
203
- </NuxtLayout>
204
- </div>
205
- </template>
206
-
207
- <script setup lang="ts">
208
- definePageMeta({
209
- layout: false,
210
- });
211
-
212
- useHead({
213
- title: "Homepage",
214
- meta: [{ name: "description", content: "Homepage" }],
215
- bodyAttrs: {
216
- class: "buttons-examples-page",
217
- },
218
- });
219
-
220
- const theme = ref<"default" | "success" | "error" | "warning">("default");
221
- const swapTheme = (newTheme: "default" | "success" | "error" | "warning") => {
222
- theme.value = newTheme;
223
- };
224
-
225
- const variant = ref<"primary" | "secondary" | "tertiary">("primary");
226
- const swapVariant = (newVariant: "primary" | "secondary" | "tertiary") => {
227
- variant.value = newVariant;
228
- };
229
-
230
- const hasPendingEffect = ref(false);
231
- const isPending = ref(false);
232
-
233
- const buttonText = computed(() => {
234
- return `Theme: ${theme.value.charAt(0).toUpperCase() + theme.value.slice(1)} | Variant: ${variant.value.charAt(0).toUpperCase() + variant.value.slice(1)}`;
235
- });
236
- </script>
237
-
238
- <style lang="css">
239
- .buttons-examples-page {
240
- .page-row {
241
- .ui-content-grid {
242
- --_margin-inline: 12px;
243
- }
244
- }
245
-
246
- .flex-group {
247
- align-items: flex-start;
248
- display: flex;
249
- flex-wrap: wrap;
250
- gap: 2.4rem;
251
- margin-bottom: 3.2rem;
252
- }
253
-
254
- ul.flex-group {
255
- list-style-type: none;
256
- padding: 0;
257
- }
258
- }
259
- </style>