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,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>
@@ -1,244 +0,0 @@
1
- <template>
2
- <div>
3
- <NuxtLayout name="default">
4
- <template #layout-content>
5
- <div>
6
- <h1 class="header-1">Checkbox/Radio panels</h1>
7
- </div>
8
- <LayoutGridByCols>
9
- <template #item-0>
10
- <FormWrapper width="medium">
11
- <template #default>
12
- <ClientOnly>
13
- <form ref="formRef" class="form-wrapper" @submit.stop.prevent="submitForm()">
14
- <div id="aria-live-message" aria-live="assertive"></div>
15
-
16
- <FormField v-if="limitedTags !== null" width="wide" :has-gutter="false">
17
- <template #default>
18
- <MultipleCheckboxes
19
- v-model="state.tags"
20
- v-model:field-data="limitedTags"
21
- name="tags"
22
- legend="Choose tags (MultipleCheckboxes)"
23
- :required="true"
24
- label="Check between 3 and 8 tags"
25
- placeholder="eg. Type something here"
26
- :is-button="true"
27
- :error-message="formErrors?.tags?._errors[0] ?? ''"
28
- :field-has-error="Boolean(zodFormControl.submitAttempted && formErrors?.tags)"
29
- options-layout="inline"
30
- :theme
31
- :display-as-disc="false"
32
- :display-as-lozenge="false"
33
- >
34
- <template #descriptionText>MultipleCheckboxes description: optionsLayout = 'inline'</template>
35
- <template #itemIcon>
36
- <Icon name="material-symbols:bookmark-add-outline" class="icon" />
37
- </template>
38
- </MultipleCheckboxes>
39
- </template>
40
- </FormField>
41
-
42
- <FormField v-if="limitedTags !== null" width="wide" :has-gutter="false">
43
- <template #default>
44
- <MultipleRadiobuttons
45
- v-model="state.tagsRadio"
46
- v-model:field-data="limitedTags"
47
- name="tagsRadio"
48
- legend="Choose tags (as radiobuttons)"
49
- :required="true"
50
- label="Check between 3 and 8 tags"
51
- placeholder="eg. Type something here"
52
- :is-button="true"
53
- :error-message="formErrors?.tagsRadio?._errors[0] ?? ''"
54
- :field-has-error="Boolean(zodFormControl.submitAttempted && formErrors?.tagsRadio)"
55
- options-layout="inline"
56
- :theme
57
- direction="row-reverse"
58
- :display-as-lozenge="true"
59
- >
60
- <template #description>
61
- <p class="label-description">This is description: optionsLayout = 'inline'</p>
62
- </template>
63
- <template #checkedIcon>
64
- <Icon name="material-symbols:check-circle-rounded" class="icon" />
65
- </template>
66
- </MultipleRadiobuttons>
67
- </template>
68
- </FormField>
69
-
70
- <FormField width="wide" :has-gutter="false">
71
- <template #default>
72
- <InputButtonCore
73
- type="button"
74
- :is-pending="false"
75
- :readonly="zodFormControl.submitDisabled"
76
- button-text="Submit"
77
- :theme
78
- @click.stop.prevent="submitForm()"
79
- />
80
- </template>
81
- </FormField>
82
- </form>
83
- </ClientOnly>
84
- </template>
85
- </FormWrapper>
86
- </template>
87
- </LayoutGridByCols>
88
- </template>
89
- </NuxtLayout>
90
- </div>
91
- </template>
92
-
93
- <script setup lang="ts">
94
- import { z } from "zod";
95
- import type { IFormMultipleOptions, FormUiTheme } from "~/types/forms/types.forms";
96
-
97
- definePageMeta({
98
- layout: false,
99
- });
100
-
101
- useHead({
102
- title: "Text Field Example",
103
- meta: [{ name: "description", content: "Homepage" }],
104
- bodyAttrs: {
105
- class: "checkbox-radio-panels-page",
106
- },
107
- });
108
-
109
- const theme = ref<FormUiTheme>("default");
110
-
111
- /*
112
- * Fetch some sample data
113
- **/
114
- const { data: tagsData } = await useFetch<IFormMultipleOptions>("/api/recipes/tags");
115
-
116
- // 1st 3 items from tagsData
117
- const limitedTags = computed(() => {
118
- if (!tagsData.value) return null;
119
-
120
- const count = 3;
121
- const tags: IFormMultipleOptions = {
122
- data: tagsData.value.data.slice(0, count),
123
- total: count,
124
- skip: 0,
125
- limit: 3,
126
- };
127
-
128
- return tags;
129
- });
130
-
131
- /*
132
- * Setup forms
133
- */
134
- const formSchema = reactive(
135
- z
136
- .object({
137
- tags: z.array(z.string()).min(3, "Please select at least 3 tags").max(8, "Please select no more than 8 tags"),
138
- tagsRadio: z.string().min(1, { error: "Please choose a tag" }),
139
- })
140
- .required({
141
- tags: true,
142
- tagsRadio: true,
143
- })
144
- );
145
-
146
- type formSchema = z.infer<typeof formSchema>;
147
- const formErrors = computed<z.ZodFormattedError<formSchema> | null>(() => zodErrorObj.value);
148
-
149
- const state = reactive({
150
- tags: ["pizza"],
151
- tagsRadio: "italian",
152
- });
153
-
154
- const formRef = ref<HTMLFormElement | null>(null);
155
-
156
- const {
157
- initZodForm,
158
- zodFormControl,
159
- zodErrorObj,
160
- // formErrors,
161
- pushCustomErrors,
162
- doZodValidate,
163
- // fieldMaxLength,
164
- scrollToFirstError,
165
- // scrollToFormHead,
166
- } = useZodValidation(formSchema, formRef);
167
-
168
- initZodForm();
169
-
170
- const submitForm = async () => {
171
- zodFormControl.submitAttempted = true;
172
- if (!(await doZodValidate(state))) {
173
- scrollToFirstError();
174
- return;
175
- }
176
- zodFormControl.displayLoader = true;
177
- try {
178
- console.log("Form valid - post it");
179
- const data = await $fetch("/api/textFields", {
180
- method: "post",
181
- body: state,
182
- async onResponse({ response }) {
183
- if (response.status === 400) {
184
- console.log("onResponse", response);
185
- console.log(response.status);
186
-
187
- // useApiErrors(response._data.data.errors);
188
- // for (const [key, message] of Object.entries(response._data.data.errors)) {
189
- // console.log(`${key}: ${message}`);
190
- // updateErrorMessages(key, message);
191
- // }
192
-
193
- // if (error instanceof Error) {
194
- await pushCustomErrors(response._data, state);
195
- // zodFormControl.formIsValid = false;
196
- // }
197
- // zodFormControl.submitAttempted = false;
198
- }
199
- if (response.status === 200) {
200
- zodFormControl.submitSuccessful = true;
201
- }
202
- },
203
- });
204
- console.log("3: Finished data", data);
205
- // return data;
206
- } catch (error) {
207
- console.warn("2: An error occured posting form data", error);
208
- } finally {
209
- zodFormControl.displayLoader = false;
210
- }
211
- };
212
-
213
- watch(
214
- () => state,
215
- () => {
216
- // console.log('Watching state');
217
- doZodValidate(state);
218
- },
219
- { deep: true }
220
- );
221
- </script>
222
-
223
- <style lang="css">
224
- .checkbox-radio-panels-page {
225
- }
226
-
227
- .flex-group {
228
- align-items: flex-start;
229
- display: flex;
230
- flex-wrap: wrap;
231
- gap: 2.4rem;
232
- margin-bottom: 3.2rem;
233
- }
234
-
235
- ul.flex-group {
236
- list-style-type: none;
237
- padding: 0;
238
- }
239
-
240
- .header-1 {
241
- font-family: var(--font-family);
242
- color: var(--brand-success-text-text);
243
- }
244
- </style>
@@ -1,60 +0,0 @@
1
- <template>
2
- <div>
3
- <i a></i>
4
- <i b></i>
5
- <i c></i>
6
- </div>
7
- </template>
8
- <script setup lang="ts">
9
- definePageMeta({
10
- layout: false,
11
- });
12
-
13
- useHead({
14
- title: 'CSS Battle',
15
- meta: [{ name: 'description', content: 'CSS Battle' }],
16
- bodyAttrs: {
17
- class: '',
18
- },
19
- });
20
- </script>
21
-
22
- <style scoped lang="css">
23
- html * {
24
- margin: 0;
25
- padding: 0;
26
- }
27
- div {
28
- height: 300px;
29
- width: 400px;
30
- background: #0b2429;
31
- display: grid;
32
- grid-template-areas: stack;
33
- place-content: center;
34
-
35
- i {
36
- grid-area: stack;
37
- margin: auto;
38
- }
39
-
40
- i[a] {
41
- background: #998235;
42
- height: 300px;
43
- width: 90px;
44
- }
45
-
46
- i[b] {
47
- background: #0b2429;
48
- height: 130px;
49
- width: 100%;
50
- }
51
-
52
- i[c] {
53
- background: #f3ac3c;
54
- height: 90px;
55
- width: 130px;
56
- border-radius: 5rem;
57
- outline: 1rem solid #0b2429;
58
- }
59
- }
60
- </style>