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,367 +0,0 @@
1
- <template>
2
- <div>
3
- <NuxtLayout name="default">
4
- <template #layout-content>
5
- <PageRow tag="div" variant="popout">
6
- <h1 class="page-heading-2">Display Chip</h1>
7
-
8
- <!-- ── QA Panel (dev only) ───────────────────────────────── -->
9
- <div v-if="isDev" class="qa-panel">
10
- <details class="qa-panel__details">
11
- <summary class="qa-panel__summary">
12
- <span class="qa-panel__title">QA — DisplayChip</span>
13
- <code class="qa-panel__status">
14
- size:{{ qaSize }}px · mask:{{ qaMaskWidth }}px · offset:{{ qaOffset }}px · angle:{{ qaAngle }}deg
15
- </code>
16
- </summary>
17
- <div class="qa-panel__body">
18
- <div class="qa-panel__group">
19
- <span class="qa-panel__label">Size</span>
20
- <div class="qa-panel__chips">
21
- <button
22
- v-for="preset in sizePresets"
23
- :key="preset"
24
- class="qa-panel__chip"
25
- :class="{ 'is-active': qaSize === preset }"
26
- @click="qaSize = preset"
27
- >
28
- {{ preset }}px
29
- </button>
30
- </div>
31
- </div>
32
-
33
- <div class="qa-panel__group">
34
- <span class="qa-panel__label">Mask Width</span>
35
- <div class="qa-panel__chips">
36
- <button
37
- v-for="preset in maskWidthPresets"
38
- :key="preset"
39
- class="qa-panel__chip"
40
- :class="{ 'is-active': qaMaskWidth === preset }"
41
- @click="qaMaskWidth = preset"
42
- >
43
- {{ preset }}px
44
- </button>
45
- </div>
46
- </div>
47
-
48
- <div class="qa-panel__group">
49
- <span class="qa-panel__label">Offset</span>
50
- <div class="qa-panel__chips">
51
- <button
52
- v-for="preset in offsetPresets"
53
- :key="preset"
54
- class="qa-panel__chip"
55
- :class="{ 'is-active': qaOffset === preset }"
56
- @click="qaOffset = preset"
57
- >
58
- {{ preset }}px
59
- </button>
60
- </div>
61
- </div>
62
-
63
- <div class="qa-panel__group">
64
- <span class="qa-panel__label">Angle — {{ qaAngle }}deg</span>
65
- <input v-model.number="qaAngle" type="range" min="0" max="360" step="1" class="qa-panel__range" />
66
- </div>
67
- </div>
68
- </details>
69
- </div>
70
-
71
- <section>
72
- <div class="dl">
73
- <div class="dt">Round</div>
74
- <div class="dd">
75
- <DisplayChip shape="circle" :config="chipConfig" :style-class-passthrough="['online']">
76
- <div class="demo-content round">
77
- <Icon name="akar-icons:info" class="icon" />
78
- </div>
79
- </DisplayChip>
80
- </div>
81
-
82
- <div class="dt">Round + Icon</div>
83
- <div class="dd">
84
- <DisplayChip
85
- shape="circle"
86
- :config="{ ...chipConfig, icon: 'material-symbols:star-outline' }"
87
- :style-class-passthrough="['online']"
88
- >
89
- <div class="demo-content round">
90
- <p class="page-body-normal">SRC</p>
91
- </div>
92
- </DisplayChip>
93
- </div>
94
-
95
- <div class="dt">Round + Text (1 character)</div>
96
- <div class="dd">
97
- <DisplayChip
98
- shape="circle"
99
- :config="{ ...chipConfig, label: '2' }"
100
- :style-class-passthrough="['online']"
101
- >
102
- <div class="demo-content round">
103
- <p class="page-body-normal">SRC</p>
104
- </div>
105
- </DisplayChip>
106
- </div>
107
-
108
- <div class="dt">Round + Text (2 character)</div>
109
- <div class="dd">
110
- <DisplayChip
111
- shape="circle"
112
- :config="{ ...chipConfig, label: '+2' }"
113
- :style-class-passthrough="['online']"
114
- >
115
- <div class="demo-content round">
116
- <p class="page-body-normal">SRC</p>
117
- </div>
118
- </DisplayChip>
119
- </div>
120
-
121
- <div class="dt">Round + Text (3 character)</div>
122
- <div class="dd">
123
- <DisplayChip
124
- shape="circle"
125
- :config="{ ...chipConfig, label: '314' }"
126
- :style-class-passthrough="['online']"
127
- >
128
- <div class="demo-content round">
129
- <p class="page-body-normal">SRC</p>
130
- </div>
131
- </DisplayChip>
132
- </div>
133
-
134
- <div class="dt">Square</div>
135
- <div class="dd">
136
- <DisplayChip shape="square" :config="chipConfig" :style-class-passthrough="['idle']">
137
- <div class="demo-content square">
138
- <Icon name="akar-icons:info" class="icon" />
139
- </div>
140
- </DisplayChip>
141
- </div>
142
- </div>
143
- </section>
144
- </PageRow>
145
- </template>
146
- </NuxtLayout>
147
- </div>
148
- </template>
149
-
150
- <script setup lang="ts">
151
- import type { DisplayChipConfig } from "~/types/components";
152
-
153
- definePageMeta({
154
- layout: false,
155
- });
156
-
157
- useHead({
158
- title: "UI Display Chips",
159
- meta: [{ name: "description", content: "Examples of UI Display Chips" }],
160
- bodyAttrs: {
161
- class: "ui-display-chip-page",
162
- },
163
- });
164
-
165
- // ── QA controls (dev only) ────────────────────────────────────────
166
- const isDev = import.meta.dev;
167
-
168
- const qaSize = ref(12);
169
- const qaMaskWidth = ref(4);
170
- const qaOffset = ref(2);
171
- const qaAngle = ref(45);
172
-
173
- const sizePresets = [8, 10, 12, 16, 20, 24];
174
- const maskWidthPresets = [0, 2, 4, 6, 8];
175
- const offsetPresets = [-4, 0, 2, 4, 8];
176
-
177
- const chipConfig = computed(
178
- (): DisplayChipConfig => ({
179
- size: `${qaSize.value}px`,
180
- maskWidth: `${qaMaskWidth.value}px`,
181
- offset: `${qaOffset.value}px`,
182
- angle: `${qaAngle.value}deg`,
183
- })
184
- );
185
- </script>
186
-
187
- <style lang="css">
188
- .ui-display-chip-page {
189
- /* ── QA Panel ──────────────────────────────────────────────────── */
190
-
191
- .qa-panel {
192
- background: oklch(15% 0 0);
193
- color: white;
194
- font-size: 1.3rem;
195
- }
196
-
197
- .qa-panel__details {
198
- padding: 1rem 2rem;
199
- }
200
-
201
- .qa-panel__summary {
202
- cursor: pointer;
203
- display: flex;
204
- align-items: center;
205
- gap: 1.6rem;
206
- list-style: none;
207
- user-select: none;
208
-
209
- &::-webkit-details-marker {
210
- display: none;
211
- }
212
- }
213
-
214
- .qa-panel__title {
215
- font-weight: 600;
216
- font-size: 1.1rem;
217
- text-transform: uppercase;
218
- letter-spacing: 0.08em;
219
- }
220
-
221
- .qa-panel__status {
222
- font-family: monospace;
223
- font-size: 1.2rem;
224
- background: oklch(0% 0 0 / 0.3);
225
- padding: 0.2rem 0.8rem;
226
- border-radius: 0.4rem;
227
- user-select: text;
228
- cursor: text;
229
- }
230
-
231
- .qa-panel__body {
232
- display: flex;
233
- flex-wrap: wrap;
234
- gap: 2.4rem;
235
- padding-block: 1.2rem 0.4rem;
236
- }
237
-
238
- .qa-panel__group {
239
- display: flex;
240
- flex-direction: column;
241
- gap: 0.6rem;
242
- }
243
-
244
- .qa-panel__label {
245
- font-size: 1.1rem;
246
- text-transform: uppercase;
247
- letter-spacing: 0.08em;
248
- opacity: 0.55;
249
- }
250
-
251
- .qa-panel__chips {
252
- display: flex;
253
- flex-wrap: wrap;
254
- gap: 0.4rem;
255
- }
256
-
257
- .qa-panel__chip {
258
- font-family: monospace;
259
- font-size: 1.2rem;
260
- color: white;
261
- background: oklch(0% 0 0 / 0.25);
262
- border: 1px solid oklch(100% 0 0 / 0.18);
263
- padding: 0.3rem 1rem;
264
- border-radius: 0.4rem;
265
- cursor: pointer;
266
- transition: background 0.15s;
267
-
268
- &:hover {
269
- background: oklch(0% 0 0 / 0.4);
270
- }
271
-
272
- &.is-active {
273
- background: oklch(55% 0.18 240);
274
- border-color: oklch(55% 0.18 240);
275
- }
276
- }
277
-
278
- .qa-panel__range {
279
- appearance: none;
280
- width: 18rem;
281
- height: 0.4rem;
282
- background: oklch(100% 0 0 / 0.18);
283
- border-radius: 0.4rem;
284
- outline: none;
285
- cursor: pointer;
286
-
287
- &::-webkit-slider-thumb {
288
- appearance: none;
289
- width: 1.4rem;
290
- height: 1.4rem;
291
- border-radius: 50%;
292
- background: oklch(55% 0.18 240);
293
- cursor: pointer;
294
- transition: background 0.15s;
295
- }
296
-
297
- &::-moz-range-thumb {
298
- width: 1.4rem;
299
- height: 1.4rem;
300
- border: none;
301
- border-radius: 50%;
302
- background: oklch(55% 0.18 240);
303
- cursor: pointer;
304
- transition: background 0.15s;
305
- }
306
-
307
- &:hover::-webkit-slider-thumb {
308
- background: oklch(62% 0.18 240);
309
- }
310
- &:hover::-moz-range-thumb {
311
- background: oklch(62% 0.18 240);
312
- }
313
- }
314
-
315
- /* ── Demo grid ─────────────────────────────────────────────────── */
316
-
317
- section {
318
- margin-top: 2rem;
319
-
320
- .dl {
321
- display: grid;
322
- grid-template-columns: auto auto;
323
- gap: 2rem;
324
- align-items: center;
325
- justify-content: start;
326
-
327
- .dt {
328
- font-weight: bold;
329
- }
330
-
331
- .dd {
332
- margin: 0;
333
-
334
- .demo-content {
335
- display: flex;
336
- align-items: center;
337
- justify-content: center;
338
-
339
- .page-body-normal {
340
- color: light-dark(var(--slate-10), var(--slate-10));
341
- }
342
-
343
- .icon {
344
- width: 24px;
345
- height: 24px;
346
- color: light-dark(var(--slate-10), var(--slate-10));
347
- }
348
-
349
- &.round {
350
- width: 50px;
351
- height: 50px;
352
- background-color: light-dark(var(--slate-03), var(--slate-04));
353
- border-radius: 50%;
354
- }
355
-
356
- &.square {
357
- width: 50px;
358
- height: 50px;
359
- background-color: light-dark(var(--slate-03), var(--slate-04));
360
- border-radius: 4px;
361
- }
362
- }
363
- }
364
- }
365
- }
366
- }
367
- </style>
@@ -1,171 +0,0 @@
1
- <template>
2
- <div>
3
- <NuxtLayout name="default">
4
- <template #layout-content>
5
- <PageRow tag="div" variant="full" :style-class-passthrough="['display-details-section', 'mbe-20']">
6
- <h1 class="page-heading-2">Details element - Unlinked</h1>
7
- <p class="mbe-12">Following 2 details block behave independantly.</p>
8
-
9
- <DisplayDetailsCore
10
- id="details-1"
11
- name="details-1"
12
- :animation-duration="200"
13
- icon-size="medium"
14
- :style-class-passthrough="['custom-style-1']"
15
- >
16
- <template #summary>
17
- <h3 class="page-heading-3 m-8">Details header 1 (Fast)</h3>
18
- </template>
19
- <template #summaryIcon>
20
- <Icon name="bi:caret-down-fill" class="icon mi-12" />
21
- </template>
22
- <template #details-content>
23
- <div>
24
- <p class="mt-0">Details content</p>
25
- <p>Details content</p>
26
- <p>Details content</p>
27
- <p>Details content</p>
28
- <p>Details content</p>
29
- </div>
30
- </template>
31
- </DisplayDetailsCore>
32
-
33
- <DisplayDetailsCore
34
- id="details-2"
35
- name="details-2"
36
- :animation-duration="2000"
37
- icon-size="medium"
38
- :style-class-passthrough="['custom-style-2']"
39
- >
40
- <template #summary>
41
- <h3 class="page-heading-3 m-8">Details header 2 (Slow)</h3>
42
- </template>
43
- <template #summaryIcon>
44
- <Icon name="bi:caret-down-fill" class="icon mi-12" />
45
- </template>
46
- <template #details-content>
47
- <div>
48
- <p class="mt-0">Details content</p>
49
- <p>Details content</p>
50
- <p>Details content</p>
51
- <p>Details content</p>
52
- <p>Details content</p>
53
- </div>
54
- </template>
55
- </DisplayDetailsCore>
56
- </PageRow>
57
-
58
- <PageRow tag="div" variant="full" :style-class-passthrough="['display-details-section', 'mbe-20', 'hidden']">
59
- <h2 class="page-heading-2">Details element - Linked</h2>
60
- <p class="mbe-12">Details panels are linked, only 1 can be open at a time.</p>
61
-
62
- <DisplayDetailsCore
63
- :id="useId()"
64
- name="details-linked"
65
- icon-size="medium"
66
- :style-class-passthrough="['linked']"
67
- >
68
- <template #summary>
69
- <h3 class="page-heading-3 m-8">Details header 1</h3>
70
- </template>
71
- <template #summaryIcon>
72
- <Icon name="bi:caret-down-fill" class="icon mi-12" />
73
- </template>
74
- <template #details-content>
75
- <div>
76
- <p class="mt-0">Details content</p>
77
- <p>Details content</p>
78
- <p>Details content</p>
79
- <p>Details content</p>
80
- <p>Details content</p>
81
- </div>
82
- </template>
83
- </DisplayDetailsCore>
84
-
85
- <DisplayDetailsCore
86
- :id="useId()"
87
- name="details-linked"
88
- icon-size="medium"
89
- :style-class-passthrough="['linked']"
90
- >
91
- <template #summary>
92
- <h3 class="page-heading-3 m-8">Details header 2</h3>
93
- </template>
94
- <template #summaryIcon>
95
- <Icon name="bi:caret-down-fill" class="icon mi-12" />
96
- </template>
97
- <template #details-content>
98
- <div>
99
- <p class="mt-0">Details content</p>
100
- <p>Details content</p>
101
- <p>Details content</p>
102
- <p>Details content</p>
103
- <p>Details content</p>
104
- </div>
105
- </template>
106
- </DisplayDetailsCore>
107
- </PageRow>
108
- </template>
109
- </NuxtLayout>
110
- </div>
111
- </template>
112
-
113
- <script setup lang="ts">
114
- definePageMeta({
115
- layout: false,
116
- });
117
-
118
- useHead({
119
- title: "Browser title tag",
120
- meta: [
121
- {
122
- name: "description",
123
- content: "Meta description content",
124
- },
125
- ],
126
- });
127
- </script>
128
-
129
- <style lang="css">
130
- .display-details-section {
131
- .display-details {
132
- &.custom-style-1 {
133
- border: 1px solid blue;
134
- outline: 1px solid green;
135
- box-shadow: 2px 2px 2px light-dark(#000, #fff);
136
- border-radius: 10px;
137
- --_display-details-mbe: 1em;
138
-
139
- .display-details-summary {
140
- gap: 0;
141
- flex-direction: row-reverse;
142
- }
143
- }
144
-
145
- &.custom-style-2 {
146
- border: 1px solid pink;
147
- outline: 1px solid yellow;
148
- box-shadow: 2px 2px 2px light-dark(#000, #fff);
149
- border-radius: 10px;
150
- --_display-details-mbe: 1em;
151
-
152
- .display-details-summary {
153
- gap: 0;
154
- flex-direction: row-reverse;
155
- }
156
- }
157
- &.linked {
158
- border: 1px solid blue;
159
- outline: 1px solid grey;
160
- box-shadow: 2px 2px 2px light-dark(#000, #fff);
161
- border-radius: 10px;
162
- --_display-details-mbe: 1em;
163
-
164
- .display-details-summary {
165
- gap: 0;
166
- flex-direction: row;
167
- }
168
- }
169
- }
170
- }
171
- </style>