srcdev-nuxt-components 9.4.9 → 9.4.11
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.
- package/.claude/commands/migrate-component.md +38 -6
- package/.claude/component-ledger/audit.json +1 -1
- package/.claude/component-ledger/build.mjs +26 -0
- package/.claude/component-ledger/output.html +8 -3
- package/.claude/component-ledger/template.html +7 -2
- package/.claude/skills/component-dynamic-slots.md +1 -1
- package/.claude/skills/components/alert-mask-core.md +84 -0
- package/.claude/skills/components/canvas-switcher.md +1 -1
- package/.claude/skills/components/carousel-flip.md +112 -168
- package/.claude/skills/components/container-glow.md +123 -0
- package/.claude/skills/components/dashboard-quad-grid.md +98 -0
- package/.claude/skills/components/dashboard-stats-grid.md +103 -0
- package/.claude/skills/components/display-theme-switch.md +60 -0
- package/.claude/skills/components/glowing-border.md +66 -0
- package/.claude/skills/components/input-number-core.md +214 -0
- package/.claude/skills/components/input-range-core.md +142 -0
- package/.claude/skills/components/input-select-core.md +151 -0
- package/.claude/skills/components/input-text-core.md +16 -0
- package/.claude/skills/components/input-textarea-core.md +154 -0
- package/.claude/skills/components/section-parallax.md +32 -10
- package/.claude/skills/components/select-menu.md +195 -0
- package/.claude/skills/components/toggle-switch-core.md +150 -0
- package/.claude/skills/components/ui-block-decorated.md +56 -0
- package/.claude/skills/components/wipe-away-vertical.md +98 -0
- package/.claude/skills/icon-sets.md +1 -1
- package/.claude/skills/index.md +15 -1
- package/.vscode/css-custom-data.json +38 -0
- package/.vscode/settings.json +3 -0
- package/.vscode/srcdev-component-alert-mask-core.code-snippets +31 -0
- package/.vscode/srcdev-component-carousel-flip.code-snippets +41 -0
- package/.vscode/srcdev-component-container-glow.code-snippets +33 -0
- package/.vscode/srcdev-component-dashboard-quad-grid.code-snippets +36 -0
- package/.vscode/srcdev-component-dashboard-stats-grid.code-snippets +35 -0
- package/.vscode/srcdev-component-display-theme-switch.code-snippets +27 -0
- package/.vscode/srcdev-component-glowing-border.code-snippets +23 -0
- package/.vscode/srcdev-component-input-number.code-snippets +65 -0
- package/.vscode/srcdev-component-input-range.code-snippets +85 -0
- package/.vscode/srcdev-component-input-select.code-snippets +42 -0
- package/.vscode/srcdev-component-input-textarea.code-snippets +40 -0
- package/.vscode/srcdev-component-section-parallax.code-snippets +27 -0
- package/.vscode/srcdev-component-select-menu.code-snippets +65 -0
- package/.vscode/srcdev-component-toggle-switch.code-snippets +49 -0
- package/.vscode/srcdev-component-ui-block-decorated.code-snippets +24 -0
- package/.vscode/srcdev-component-wipe-away-vertical.code-snippets +25 -0
- package/README.md +18 -37
- package/app/components/{alert-mask → 01.atoms/alert-mask}/AlertMaskCore.vue +16 -17
- package/app/components/01.atoms/alert-mask/CONSUMER-STYLING.md +46 -0
- package/app/components/01.atoms/alert-mask/stories/AlertMaskCore.stories.ts +79 -0
- package/app/components/{alert-mask → 01.atoms/alert-mask}/tests/AlertMaskCore.spec.ts +10 -10
- package/app/components/01.atoms/animations/container-glow/CONSUMER-STYLING.md +86 -0
- package/app/components/01.atoms/animations/container-glow/ContainerGlow.vue +299 -0
- package/app/components/01.atoms/animations/container-glow/stories/ContainerGlow.stories.ts +175 -0
- package/app/components/01.atoms/animations/container-glow/tests/ContainerGlow.spec.ts +131 -0
- package/app/components/01.atoms/animations/container-glow/tests/__snapshots__/ContainerGlow.spec.ts.snap +14 -0
- package/app/components/01.atoms/animations/glowing-border/CONSUMER-STYLING.md +61 -0
- package/app/components/01.atoms/animations/glowing-border/GlowingBorder.vue +132 -0
- package/app/components/01.atoms/animations/glowing-border/stories/GlowingBorder.stories.ts +165 -0
- package/app/components/01.atoms/animations/glowing-border/tests/GlowingBorder.spec.ts +94 -0
- package/app/components/01.atoms/animations/glowing-border/tests/__snapshots__/GlowingBorder.spec.ts.snap +3 -0
- package/app/components/01.atoms/animations/marquee-scroller/CONSUMER-STYLING.md +1 -1
- package/app/components/01.atoms/animations/marquee-scroller/MarqueeScroller.vue +1 -1
- package/app/components/01.atoms/animations/marquee-scroller/stories/MarqueeScroller.stories.ts +1 -1
- package/app/components/01.atoms/animations/section-parallax/CONSUMER-STYLING.md +44 -0
- package/app/components/{parallax → 01.atoms/animations/section-parallax}/SectionParallax.vue +11 -10
- package/app/components/01.atoms/animations/section-parallax/stories/SectionParallax.stories.ts +98 -0
- package/app/components/01.atoms/animations/section-parallax/tests/SectionParallax.spec.ts +102 -0
- package/app/components/01.atoms/animations/section-parallax/tests/__snapshots__/SectionParallax.spec.ts.snap +9 -0
- package/app/components/01.atoms/animations/view-timeline/CONSUMER-STYLING.md +70 -0
- package/app/components/01.atoms/animations/view-timeline/WipeAwayVertical.vue +181 -0
- package/app/components/01.atoms/animations/view-timeline/stories/WipeAwayVertical.stories.ts +269 -0
- package/app/components/01.atoms/animations/view-timeline/tests/WipeAwayVertical.spec.ts +127 -0
- package/app/components/01.atoms/canvas-switcher/CONSUMER-STYLING.md +3 -3
- package/app/components/01.atoms/canvas-switcher/CanvasSwitcher.vue +2 -2
- package/app/components/01.atoms/canvas-switcher/stories/CanvasSwitcher.stories.ts +1 -1
- package/app/components/01.atoms/card/CardCore.vue +4 -4
- package/app/components/01.atoms/clipped-panel/CONSUMER-STYLING.md +2 -2
- package/app/components/01.atoms/clipped-panel/ClippedPanel.vue +2 -2
- package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-quad-grid/CONSUMER-STYLING.md +42 -0
- package/app/components/{layout-grids/LayoutGridA.vue → 01.atoms/content-wrappers/layout-grid/dashboard-quad-grid/DashboardQuadGrid.vue} +23 -13
- package/app/components/{layout-grids/stories/LayoutGridA.stories.ts → 01.atoms/content-wrappers/layout-grid/dashboard-quad-grid/stories/DashboardQuadGrid.stories.ts} +151 -23
- package/app/components/{layout-grids/tests/LayoutGridA.spec.ts → 01.atoms/content-wrappers/layout-grid/dashboard-quad-grid/tests/DashboardQuadGrid.spec.ts} +25 -25
- package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-stats-grid/CONSUMER-STYLING.md +41 -0
- package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-stats-grid/DashboardStatsGrid.vue +133 -0
- package/app/components/{layout-grids/stories/LayoutGridB.stories.ts → 01.atoms/content-wrappers/layout-grid/dashboard-stats-grid/stories/DashboardStatsGrid.stories.ts} +24 -24
- package/app/components/{layout-grids/tests/LayoutGridB.spec.ts → 01.atoms/content-wrappers/layout-grid/dashboard-stats-grid/tests/DashboardStatsGrid.spec.ts} +23 -23
- package/app/components/01.atoms/display-tooltip/CONSUMER-STYLING.md +8 -8
- package/app/components/01.atoms/display-tooltip/DisplayTooltip.vue +8 -8
- package/app/components/01.atoms/pop-over/CONSUMER-STYLING.md +6 -6
- package/app/components/01.atoms/pop-over/PopOver.vue +6 -6
- package/app/components/01.atoms/ui-block-decorated/CONSUMER-STYLING.md +39 -0
- package/app/components/01.atoms/ui-block-decorated/UiBlockDecorated.vue +141 -0
- package/app/components/01.atoms/ui-block-decorated/stories/UiBlockDecorated.stories.ts +148 -0
- package/app/components/01.atoms/ui-block-decorated/tests/UiBlockDecorated.spec.ts +80 -0
- package/app/components/01.atoms/ui-block-decorated/tests/__snapshots__/UiBlockDecorated.spec.ts.snap +3 -0
- package/app/components/02.molecules/alert-masked-content/tests/AlertMaskedContent.spec.ts +6 -6
- package/app/components/02.molecules/display-theme-switch/CONSUMER-STYLING.md +34 -0
- package/app/components/02.molecules/display-theme-switch/DisplayThemeSwitch.vue +102 -0
- package/app/components/02.molecules/display-theme-switch/stories/DisplayThemeSwitch.stories.ts +115 -0
- package/app/components/02.molecules/display-theme-switch/tests/DisplayThemeSwitch.spec.ts +86 -0
- package/app/components/02.molecules/navigation/deep-expanding-menu/CONSUMER-STYLING.md +1 -1
- package/app/components/02.molecules/navigation/deep-expanding-menu/DeepExpandingMenu.vue +1 -1
- package/app/components/02.molecules/navigation/deep-expanding-menu-classic/CONSUMER-STYLING.md +1 -1
- package/app/components/02.molecules/navigation/deep-expanding-menu-classic/DeepExpandingMenuClassic.vue +1 -1
- package/app/components/02.molecules/select-menu/CONSUMER-STYLING.md +168 -0
- package/app/components/02.molecules/select-menu/SelectMenu.vue +384 -0
- package/app/components/02.molecules/select-menu/stories/SelectMenu.stories.ts +359 -0
- package/app/components/02.molecules/select-menu/tests/SelectMenu.spec.ts +476 -0
- package/app/components/02.molecules/select-menu/tests/__snapshots__/SelectMenu.spec.ts.snap +42 -0
- package/app/components/03.organisms/image-galleries/carousel-flip/CONSUMER-STYLING.md +46 -0
- package/app/components/{carousels → 03.organisms/image-galleries/carousel-flip}/CarouselFlip.vue +63 -42
- package/app/components/{carousels → 03.organisms/image-galleries/carousel-flip}/stories/CarouselFlip.stories.ts +114 -29
- package/app/components/{carousels → 03.organisms/image-galleries/carousel-flip}/tests/CarouselFlip.spec.ts +80 -0
- package/app/components/05.forms/form-field/FormField.vue +1 -1
- package/app/components/05.forms/form-wrapper/FormWrapper.vue +1 -1
- package/app/components/05.forms/input-button/CONSUMER-STYLING.md +2 -7
- package/app/components/05.forms/input-button/InputButtonCore.vue +1 -5
- package/app/components/05.forms/input-number/CONSUMER-STYLING.md +26 -6
- package/app/components/05.forms/input-number/InputNumberCore.vue +125 -85
- package/app/components/05.forms/input-number/stories/InputNumberCore.stories.ts +92 -0
- package/app/components/05.forms/input-number/tests/InputNumberCore.spec.ts +119 -0
- package/app/components/05.forms/input-number/variants/InputNumberDefault.vue +30 -22
- package/app/components/05.forms/input-number/variants/stories/InputNumberDefault.stories.ts +123 -0
- package/app/components/05.forms/input-number/variants/tests/InputNumberDefault.spec.ts +143 -0
- package/app/components/05.forms/input-range/CONSUMER-STYLING.md +45 -0
- package/app/components/05.forms/input-range/InputRangeCore.vue +79 -143
- package/app/components/05.forms/input-range/stories/InputRangeCore.stories.ts +126 -0
- package/app/components/05.forms/input-range/tests/InputRangeCore.spec.ts +124 -0
- package/app/components/05.forms/input-range/variants/InputRangeDefault.vue +9 -32
- package/app/components/05.forms/input-range/variants/stories/InputRangeDefault.stories.ts +108 -0
- package/app/components/05.forms/input-range/variants/tests/InputRangeDefault.spec.ts +140 -0
- package/app/components/05.forms/input-select/InputSelectCore.vue +23 -30
- package/app/components/05.forms/input-select/stories/InputSelectCore.stories.ts +2 -2
- package/app/components/05.forms/input-select/stories/InputSelectWithLabel.stories.ts +115 -0
- package/app/components/05.forms/input-select/tests/InputSelectCore.spec.ts +129 -0
- package/app/components/05.forms/input-select/variants/InputSelectWithLabel.vue +1 -1
- package/app/components/05.forms/input-select/variants/tests/InputSelectWithLabel.spec.ts +87 -0
- package/app/components/05.forms/input-text/tests/InputTextAsNumberWithLabel.spec.ts +14 -0
- package/app/components/05.forms/input-text/variants/InputTextAsNumberWithLabel.vue +1 -1
- package/app/components/05.forms/input-textarea/CONSUMER-STYLING.md +55 -0
- package/app/components/05.forms/input-textarea/InputTextareaCore.vue +24 -16
- package/app/components/05.forms/input-textarea/stories/InputTextareaWithLabel.stories.ts +1 -1
- package/app/components/05.forms/input-textarea/tests/InputTextareaCore.spec.ts +119 -0
- package/app/components/05.forms/input-textarea/variants/InputTextareaWithLabel.vue +3 -13
- package/app/components/05.forms/input-textarea/variants/tests/InputTextareaWithLabel.spec.ts +93 -0
- package/app/components/05.forms/patterns/stories/MigratedFieldsForm.stories.ts +220 -0
- package/app/components/05.forms/toggle-switch/CONSUMER-STYLING.md +29 -0
- package/app/components/05.forms/toggle-switch/ToggleSwitchCore.vue +120 -119
- package/app/components/05.forms/toggle-switch/stories/ToggleSwitchCore.stories.ts +1 -1
- package/app/components/05.forms/toggle-switch/stories/ToggleSwitchWithLabel.stories.ts +1 -1
- package/app/components/05.forms/toggle-switch/stories/ToggleSwitchWithLabelInline.stories.ts +2 -2
- package/app/components/05.forms/toggle-switch/tests/ToggleSwitchCore.spec.ts +101 -0
- package/app/components/05.forms/toggle-switch/variants/ToggleSwitchWithLabel.vue +3 -5
- package/app/components/05.forms/toggle-switch/variants/ToggleSwitchWithLabelInline.vue +1 -2
- package/app/components/05.forms/toggle-switch/variants/tests/ToggleSwitchWithLabel.spec.ts +77 -0
- package/app/components/05.forms/toggle-switch/variants/tests/ToggleSwitchWithLabelInline.spec.ts +66 -0
- package/app/components/05.forms/triple-toggle-switch/CONSUMER-STYLING.md +20 -6
- package/app/components/05.forms/triple-toggle-switch/TripleToggleSwitchCore.vue +12 -10
- package/app/types/components/container-glow.d.ts +8 -0
- package/app/types/components/index.ts +2 -1
- package/app/types/components/select-menu.d.ts +5 -0
- package/package.json +3 -2
- package/.vscode/srcdev-component-toggle-switch-core.code-snippets +0 -13
- package/app/components/05.forms/input-range-fancy/InputRangeFancyCore.vue +0 -426
- package/app/components/05.forms/input-range-fancy/InputRangeFancyWithLabel.vue +0 -94
- package/app/components/carousels/CarouselBasic.vue +0 -317
- package/app/components/carousels/CarouselInfinite.vue +0 -358
- package/app/components/container-glow/ContainerGlowCore.vue +0 -296
- package/app/components/container-glow/stories/ContainerGlowCore.stories.ts +0 -337
- package/app/components/display-theme-switch/DisplayThemeSwitch.vue +0 -189
- package/app/components/display-theme-switch/stories/DisplayThemeSwitch.stories.ts +0 -154
- package/app/components/glowing-border/GlowingBorder.vue +0 -142
- package/app/components/glowing-border/stories/GlowingBorder.stories.ts +0 -141
- package/app/components/layout-grids/LayoutGridB.vue +0 -134
- package/app/components/test-storybook/TestStorybook.vue +0 -49
- package/app/components/test-storybook/stories/TestStorybook.stories.ts +0 -28
- package/app/components/ui-block-decorated/UiBlockDecorated.vue +0 -167
- package/app/components/view-timeline/WipeAwayVertical.vue +0 -180
- package/app/types/components/carousel-basic.d.ts +0 -19
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<ClientOnly>
|
|
3
|
-
<TripleToggleSwitchCore
|
|
4
|
-
v-model="colorModeVal"
|
|
5
|
-
v-model:field-data="sampleFieldData"
|
|
6
|
-
:style-class-passthrough="[`colour-scheme-select`, elementClasses]"
|
|
7
|
-
/>
|
|
8
|
-
</ClientOnly>
|
|
9
|
-
</template>
|
|
10
|
-
|
|
11
|
-
<script setup lang="ts">
|
|
12
|
-
import type { IFormMultipleOptions } from "~/types/forms/types.forms";
|
|
13
|
-
interface Props {
|
|
14
|
-
styleClassPassthrough?: string | string[];
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const props = withDefaults(defineProps<Props>(), {
|
|
18
|
-
styleClassPassthrough: () => [],
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
const { elementClasses } = useStyleClassPassthrough(props.styleClassPassthrough);
|
|
22
|
-
// updateElementClasses(["colour-scheme-select"]);
|
|
23
|
-
|
|
24
|
-
const sampleFieldData = ref<IFormMultipleOptions>({
|
|
25
|
-
data: [
|
|
26
|
-
{
|
|
27
|
-
id: "system",
|
|
28
|
-
name: "colorModeVal",
|
|
29
|
-
value: "system",
|
|
30
|
-
label: "System",
|
|
31
|
-
icon: "material-symbols:night-sight-auto-sharp",
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
id: "light",
|
|
35
|
-
name: "colorModeVal",
|
|
36
|
-
value: "light",
|
|
37
|
-
label: "Light",
|
|
38
|
-
icon: "radix-icons:sun",
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
id: "dark",
|
|
42
|
-
name: "colorModeVal",
|
|
43
|
-
value: "dark",
|
|
44
|
-
label: "Dark",
|
|
45
|
-
icon: "radix-icons:moon",
|
|
46
|
-
},
|
|
47
|
-
],
|
|
48
|
-
total: 3,
|
|
49
|
-
skip: 0,
|
|
50
|
-
limit: 3,
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
const { colourScheme, setColourScheme } = useSettingsStore();
|
|
54
|
-
|
|
55
|
-
const colorModeVal = ref(colourScheme);
|
|
56
|
-
watch(colorModeVal, (val) => {
|
|
57
|
-
setColourScheme(val);
|
|
58
|
-
});
|
|
59
|
-
</script>
|
|
60
|
-
|
|
61
|
-
<style lang="css">
|
|
62
|
-
@layer components {
|
|
63
|
-
.colour-scheme-select {
|
|
64
|
-
&.triple-toggle-switch {
|
|
65
|
-
/* --_form-border-colour/--_form-outline-colour used to sit here referencing
|
|
66
|
-
--theme-form-radio-border/-outline — dead tokens declared nowhere in the layer, and
|
|
67
|
-
neither local var was itself ever read by any property below either; removed rather than
|
|
68
|
-
migrated. --_select-scheme-group-background-color below is repointed at the new public
|
|
69
|
-
--triple-toggle-switch-marker-surface token instead of the other dead reference it used
|
|
70
|
-
to carry (--theme-form-checkbox-bg) — see TripleToggleSwitchCore.vue and
|
|
71
|
-
theming-component-token-pattern.md. */
|
|
72
|
-
--_form-items-gap: 0.4rem;
|
|
73
|
-
--_form-padding: 0.4rem;
|
|
74
|
-
--_select-scheme-group-padding: 0.4rem;
|
|
75
|
-
--_scheme-icon-font-size: 2rem;
|
|
76
|
-
|
|
77
|
-
&.small {
|
|
78
|
-
--_form-items-gap: 0.2rem;
|
|
79
|
-
--_form-padding: 0.2rem;
|
|
80
|
-
--_select-scheme-group-padding: 0.2rem;
|
|
81
|
-
--_scheme-icon-font-size: 1.6rem;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
--_select-scheme-group-background-color: var(--triple-toggle-switch-marker-surface, var(--theme-input-surface));
|
|
85
|
-
--_select-scheme-group-background-image: none;
|
|
86
|
-
|
|
87
|
-
/* "system", matching sampleFieldData's actual id/value below — was "auto" here, which never
|
|
88
|
-
matched (this component's own data never used it), so this gradient never fired for the
|
|
89
|
-
system option in practice. */
|
|
90
|
-
&:has(input[value="system"]:checked) {
|
|
91
|
-
--_select-scheme-group-background-color: transparent;
|
|
92
|
-
--_select-scheme-group-background-image: radial-gradient(
|
|
93
|
-
circle,
|
|
94
|
-
rgb(66, 180, 58) 0%,
|
|
95
|
-
rgb(17, 199, 0) 27%,
|
|
96
|
-
rgb(8, 117, 3) 100%
|
|
97
|
-
);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
&:has(input[value="light"]:checked) {
|
|
101
|
-
--_select-scheme-group-background-color: transparent;
|
|
102
|
-
--_select-scheme-group-background-image: radial-gradient(
|
|
103
|
-
circle,
|
|
104
|
-
rgba(180, 58, 91, 1) 0%,
|
|
105
|
-
rgba(253, 29, 29, 1) 27%,
|
|
106
|
-
rgba(252, 176, 69, 1) 100%
|
|
107
|
-
);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
&:has(input[value="dark"]:checked) {
|
|
111
|
-
--_select-scheme-group-background-color: transparent;
|
|
112
|
-
--_select-scheme-group-background-image: radial-gradient(
|
|
113
|
-
circle,
|
|
114
|
-
rgb(50, 20, 25) 0%,
|
|
115
|
-
rgb(0, 0, 0) 27%,
|
|
116
|
-
rgb(100, 100, 100) 100%
|
|
117
|
-
);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
.triple-toggle-switch-wrapper {
|
|
121
|
-
background-color: var(--theme-input-surface);
|
|
122
|
-
border: var(--form-element-border-width) solid var(--theme-border);
|
|
123
|
-
outline: var(--form-element-outline-width) solid transparent;
|
|
124
|
-
padding: var(--_form-padding);
|
|
125
|
-
|
|
126
|
-
&:has(input:focus-visible) {
|
|
127
|
-
outline: var(--form-element-outline-width) solid var(--theme-ring);
|
|
128
|
-
outline-offset: 0.2rem;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
.selected-option-marker-wrapper {
|
|
132
|
-
.selected-option-marker {
|
|
133
|
-
background-color: var(--_select-scheme-group-background-color);
|
|
134
|
-
background-image: var(--_select-scheme-group-background-image);
|
|
135
|
-
border: var(--form-element-border-width) solid light-dark(var(--slate-10), var(--slate-00));
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
.option-group-wrapper {
|
|
140
|
-
gap: var(--_form-items-gap);
|
|
141
|
-
position: relative;
|
|
142
|
-
|
|
143
|
-
.option-group {
|
|
144
|
-
border: var(--form-element-border-width) solid light-dark(#00000025, #ffffff50);
|
|
145
|
-
outline: var(--form-element-outline-width) solid transparent;
|
|
146
|
-
border-radius: 50%;
|
|
147
|
-
padding: var(--_select-scheme-group-padding);
|
|
148
|
-
|
|
149
|
-
&:has(.option-icon:hover) {
|
|
150
|
-
outline: var(--form-element-outline-width) solid light-dark(var(--slate-10), var(--slate-00));
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
&:has(input:focus-visible) {
|
|
154
|
-
outline: var(--form-element-outline-width) solid var(--theme-ring);
|
|
155
|
-
outline-offset: 0.2rem;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
.option-icon {
|
|
159
|
-
&.system {
|
|
160
|
-
color: light-dark(var(--slate-10), var(--slate-03));
|
|
161
|
-
|
|
162
|
-
&.active {
|
|
163
|
-
color: var(--slate-00);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
&.light {
|
|
168
|
-
color: light-dark(var(--slate-10), var(--slate-03));
|
|
169
|
-
|
|
170
|
-
&.active {
|
|
171
|
-
color: var(--slate-00);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
&.dark {
|
|
176
|
-
color: light-dark(var(--slate-10), var(--slate-03));
|
|
177
|
-
|
|
178
|
-
&.active {
|
|
179
|
-
color: var(--slate-00);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
</style>
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryFn } from "@nuxtjs/storybook";
|
|
2
|
-
import StorybookComponent from "../DisplayThemeSwitch.vue";
|
|
3
|
-
|
|
4
|
-
interface DisplayThemeSwitchStoryArgs {
|
|
5
|
-
styleClassPassthrough: string[];
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export default {
|
|
9
|
-
title: "Components/Display/DisplayThemeSwitch",
|
|
10
|
-
component: StorybookComponent,
|
|
11
|
-
argTypes: {
|
|
12
|
-
// Styling
|
|
13
|
-
styleClassPassthrough: {
|
|
14
|
-
control: "object",
|
|
15
|
-
description: "Additional CSS classes to pass through",
|
|
16
|
-
table: {
|
|
17
|
-
category: "Styling",
|
|
18
|
-
},
|
|
19
|
-
},
|
|
20
|
-
},
|
|
21
|
-
parameters: {
|
|
22
|
-
docs: {
|
|
23
|
-
description: {
|
|
24
|
-
component:
|
|
25
|
-
"A theme switching component that allows users to toggle between system, light, and dark color schemes. This component integrates with the app's color scheme settings and provides a smooth animated toggle interface.",
|
|
26
|
-
},
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
|
-
} as Meta<DisplayThemeSwitchStoryArgs>;
|
|
30
|
-
|
|
31
|
-
const Template: StoryFn<DisplayThemeSwitchStoryArgs> = (_args, { argTypes }) => ({
|
|
32
|
-
components: { StorybookComponent },
|
|
33
|
-
props: Object.keys(argTypes),
|
|
34
|
-
setup() {
|
|
35
|
-
return { args: _args };
|
|
36
|
-
},
|
|
37
|
-
template: `
|
|
38
|
-
<div style="padding: 2rem;">
|
|
39
|
-
<div style="margin-bottom: 1.5rem;">
|
|
40
|
-
<h3 style="margin: 0 0 0.5rem 0; font-size: 1.8rem;">Theme Selector</h3>
|
|
41
|
-
<p style="margin: 0; color: #666; font-size: 1.4rem;">
|
|
42
|
-
Choose your preferred color scheme. system mode follows your system preference.
|
|
43
|
-
</p>
|
|
44
|
-
</div>
|
|
45
|
-
|
|
46
|
-
<StorybookComponent
|
|
47
|
-
:style-class-passthrough="args.styleClassPassthrough"
|
|
48
|
-
/>
|
|
49
|
-
|
|
50
|
-
<div style="margin-top: 1.5rem; padding: 1rem; background: var(--theme-surface); border-radius: 8px; border: 1px solid var(--theme-border);">
|
|
51
|
-
<h4 style="margin: 0 0 0.5rem 0; font-size: 1.6rem;">Theme Preview</h4>
|
|
52
|
-
<p style="margin: 0 0 1rem 0; color: var(--theme-text-secondary); font-size: 1.6rem;">
|
|
53
|
-
This area demonstrates how the theme affects content appearance:
|
|
54
|
-
</p>
|
|
55
|
-
<div style="display: flex; gap: 1rem; flex-wrap: wrap;">
|
|
56
|
-
<div style="padding: 0.75rem; background: var(--theme-primary); color: var(--theme-primary-text); border-radius: 4px; font-size: 1.4rem;">
|
|
57
|
-
Primary Color
|
|
58
|
-
</div>
|
|
59
|
-
<div style="padding: 0.75rem; background: var(--theme-secondary); color: var(--theme-secondary-text); border-radius: 4px; font-size: 1.4rem;">
|
|
60
|
-
Secondary Color
|
|
61
|
-
</div>
|
|
62
|
-
<div style="padding: 0.75rem; background: var(--theme-surface-variant); color: var(--theme-text); border-radius: 4px; border: 1px solid var(--theme-border); font-size: 1.4rem;">
|
|
63
|
-
Surface Variant
|
|
64
|
-
</div>
|
|
65
|
-
</div>
|
|
66
|
-
</div>
|
|
67
|
-
|
|
68
|
-
<div style="margin-top: 1.5rem; font-size: 1.2rem; color: #666;">
|
|
69
|
-
<strong>Usage:</strong> This component automatically syncs with your app's theme settings. Changes are persisted and applied globally.
|
|
70
|
-
</div>
|
|
71
|
-
</div>
|
|
72
|
-
`,
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
export const Default = Template.bind({});
|
|
76
|
-
Default.args = {
|
|
77
|
-
styleClassPassthrough: [],
|
|
78
|
-
};
|
|
79
|
-
Default.parameters = {
|
|
80
|
-
docs: {
|
|
81
|
-
description: {
|
|
82
|
-
story:
|
|
83
|
-
"The default theme switch with system, light, and dark mode options. The component features smooth animations and integrates with the application's global theme state.",
|
|
84
|
-
},
|
|
85
|
-
},
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
export const WithCustomStyling = Template.bind({});
|
|
89
|
-
WithCustomStyling.args = {
|
|
90
|
-
styleClassPassthrough: ["small"],
|
|
91
|
-
};
|
|
92
|
-
WithCustomStyling.parameters = {
|
|
93
|
-
docs: {
|
|
94
|
-
description: {
|
|
95
|
-
story:
|
|
96
|
-
'Theme switch with custom styling classes applied. The "small" class provides specialized styling for enhanced visual appearance.',
|
|
97
|
-
},
|
|
98
|
-
},
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
export const InNavigation = Template.bind({});
|
|
102
|
-
InNavigation.args = {
|
|
103
|
-
styleClassPassthrough: ["small"],
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
// Custom template for navigation context
|
|
107
|
-
InNavigation.render = (args, { argTypes }) => ({
|
|
108
|
-
components: { StorybookComponent },
|
|
109
|
-
props: Object.keys(argTypes),
|
|
110
|
-
setup() {
|
|
111
|
-
return { args };
|
|
112
|
-
},
|
|
113
|
-
template: `
|
|
114
|
-
<div style="background: var(--theme-surface); padding: 1rem;">
|
|
115
|
-
<nav style="display: flex; align-items: center; justify-content: space-between; padding: 1rem 1.5rem; background: var(--theme-surface-variant); border-radius: 8px; border: 1px solid var(--theme-border);">
|
|
116
|
-
<div style="display: flex; align-items: center; gap: 1rem;">
|
|
117
|
-
<div style="font-weight: 600; color: var(--theme-text); font-size: 1.125rem;">
|
|
118
|
-
My App
|
|
119
|
-
</div>
|
|
120
|
-
<div style="display: flex; gap: 0.5rem;">
|
|
121
|
-
<a href="#" style="color: var(--theme-text-secondary); text-decoration: none; padding: 0.5rem; border-radius: 4px; font-size: 0.875rem;">Home</a>
|
|
122
|
-
<a href="#" style="color: var(--theme-text-secondary); text-decoration: none; padding: 0.5rem; border-radius: 4px; font-size: 0.875rem;">About</a>
|
|
123
|
-
<a href="#" style="color: var(--theme-text-secondary); text-decoration: none; padding: 0.5rem; border-radius: 4px; font-size: 0.875rem;">Contact</a>
|
|
124
|
-
</div>
|
|
125
|
-
</div>
|
|
126
|
-
|
|
127
|
-
<div style="display: flex; align-items: center; gap: 1rem;">
|
|
128
|
-
<span style="color: var(--theme-text-secondary); font-size: 0.875rem;">Theme:</span>
|
|
129
|
-
<StorybookComponent :style-class-passthrough="args.styleClassPassthrough" />
|
|
130
|
-
</div>
|
|
131
|
-
</nav>
|
|
132
|
-
|
|
133
|
-
<div style="margin-top: 1.5rem; padding: 1.5rem; background: var(--theme-surface-variant); border-radius: 8px; border: 1px solid var(--theme-border);">
|
|
134
|
-
<h2 style="margin: 0 0 1rem 0; color: var(--theme-text);">Page Content</h2>
|
|
135
|
-
<p style="margin: 0 0 1rem 0; color: var(--theme-text-secondary); line-height: 1.5;">
|
|
136
|
-
This demonstrates how the theme switch works in a typical navigation context.
|
|
137
|
-
The theme changes are applied immediately across all interface elements.
|
|
138
|
-
</p>
|
|
139
|
-
<div style="display: inline-flex; align-items: center; gap: 0.5rem; padding: 0.75rem 1rem; background: var(--theme-primary); color: var(--theme-primary-text); border-radius: 6px; font-size: 0.875rem; font-weight: 500;">
|
|
140
|
-
<span>🎨</span>
|
|
141
|
-
Dynamic Theming Active
|
|
142
|
-
</div>
|
|
143
|
-
</div>
|
|
144
|
-
</div>
|
|
145
|
-
`,
|
|
146
|
-
});
|
|
147
|
-
InNavigation.parameters = {
|
|
148
|
-
docs: {
|
|
149
|
-
description: {
|
|
150
|
-
story:
|
|
151
|
-
"Example of the theme switch integrated into a navigation bar context, showing how it works alongside other UI elements and how theme changes affect the entire interface.",
|
|
152
|
-
},
|
|
153
|
-
},
|
|
154
|
-
};
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<component :is="tag" class="glowing-border" :class="[elementClasses, variant]">
|
|
3
|
-
<slot></slot>
|
|
4
|
-
</component>
|
|
5
|
-
</template>
|
|
6
|
-
|
|
7
|
-
<script setup lang="ts">
|
|
8
|
-
const props = defineProps({
|
|
9
|
-
tag: {
|
|
10
|
-
type: String,
|
|
11
|
-
default: "div",
|
|
12
|
-
validator(value: string) {
|
|
13
|
-
return [
|
|
14
|
-
"div",
|
|
15
|
-
"p",
|
|
16
|
-
"span",
|
|
17
|
-
"section",
|
|
18
|
-
"article",
|
|
19
|
-
"aside",
|
|
20
|
-
"header",
|
|
21
|
-
"footer",
|
|
22
|
-
"main",
|
|
23
|
-
"nav",
|
|
24
|
-
"ul",
|
|
25
|
-
"ol",
|
|
26
|
-
].includes(value)
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
|
-
variant: {
|
|
30
|
-
type: String,
|
|
31
|
-
default: "subtle",
|
|
32
|
-
validator(value: string) {
|
|
33
|
-
return ["subtle", "vivid", "silver", "steel"].includes(value)
|
|
34
|
-
},
|
|
35
|
-
},
|
|
36
|
-
styleClassPassthrough: {
|
|
37
|
-
type: [String, Array] as PropType<string | string[]>,
|
|
38
|
-
default: () => [],
|
|
39
|
-
},
|
|
40
|
-
})
|
|
41
|
-
|
|
42
|
-
const { elementClasses, resetElementClasses } = useStyleClassPassthrough(props.styleClassPassthrough)
|
|
43
|
-
|
|
44
|
-
watch(
|
|
45
|
-
() => props.styleClassPassthrough,
|
|
46
|
-
() => {
|
|
47
|
-
resetElementClasses(props.styleClassPassthrough)
|
|
48
|
-
}
|
|
49
|
-
)
|
|
50
|
-
</script>
|
|
51
|
-
|
|
52
|
-
<style scoped lang="css">
|
|
53
|
-
@layer components {
|
|
54
|
-
@property --glow-deg {
|
|
55
|
-
syntax: "<angle>";
|
|
56
|
-
inherits: true;
|
|
57
|
-
initial-value: -90deg;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/* the colors don't need to be registed */
|
|
61
|
-
@property --clr-1 {
|
|
62
|
-
syntax: "<color>";
|
|
63
|
-
inherits: true;
|
|
64
|
-
initial-value: red;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
@property --clr-2 {
|
|
68
|
-
syntax: "<color>";
|
|
69
|
-
inherits: true;
|
|
70
|
-
initial-value: yellow;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
@property --clr-3 {
|
|
74
|
-
syntax: "<color>";
|
|
75
|
-
inherits: true;
|
|
76
|
-
initial-value: green;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
@property --clr-4 {
|
|
80
|
-
syntax: "<color>";
|
|
81
|
-
inherits: true;
|
|
82
|
-
initial-value: blue;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
@property --clr-5 {
|
|
86
|
-
syntax: "<color>";
|
|
87
|
-
inherits: true;
|
|
88
|
-
initial-value: purple;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
.glowing-border {
|
|
92
|
-
&.vivid {
|
|
93
|
-
--clr-1: #ff0000;
|
|
94
|
-
--clr-2: #ffa500;
|
|
95
|
-
--clr-3: #ffff00;
|
|
96
|
-
--clr-4: #008000;
|
|
97
|
-
--clr-5: #0000ff;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
&.subtle {
|
|
101
|
-
--clr-1: #ff9a9e;
|
|
102
|
-
--clr-2: #fad0c4;
|
|
103
|
-
--clr-3: #fad0c4;
|
|
104
|
-
--clr-4: #fbc2eb;
|
|
105
|
-
--clr-5: #a18cd1;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
&.silver {
|
|
109
|
-
--clr-1: #d4d4d4;
|
|
110
|
-
--clr-2: #e4e4e4;
|
|
111
|
-
--clr-3: #f5f5f5;
|
|
112
|
-
--clr-4: #e4e4e4;
|
|
113
|
-
--clr-5: #d4d4d4;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
&.steel {
|
|
117
|
-
--clr-1: #434343;
|
|
118
|
-
--clr-2: #5a5a5a;
|
|
119
|
-
--clr-3: #6e6e6e;
|
|
120
|
-
--clr-4: #5a5a5a;
|
|
121
|
-
--clr-5: #434343;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
--gradient-glow: var(--clr-1), var(--clr-2), var(--clr-3), var(--clr-4), var(--clr-5), var(--clr-1);
|
|
125
|
-
|
|
126
|
-
border: var(--border-width, 3px) solid transparent;
|
|
127
|
-
border-radius: 30px;
|
|
128
|
-
background: linear-gradient(var(--surface, canvas) 0 0) padding-box,
|
|
129
|
-
conic-gradient(from var(--glow-deg), var(--gradient-glow)) border-box;
|
|
130
|
-
|
|
131
|
-
animation: glow 10s infinite linear;
|
|
132
|
-
|
|
133
|
-
overflow: hidden;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
@keyframes glow {
|
|
137
|
-
100% {
|
|
138
|
-
--glow-deg: 270deg;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
</style>
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryFn } from "@nuxtjs/storybook";
|
|
2
|
-
import StorybookComponent from "../GlowingBorder.vue";
|
|
3
|
-
|
|
4
|
-
// Custom interface for story args
|
|
5
|
-
interface GlowingBorderStoryArgs {
|
|
6
|
-
variant: "vivid" | "subtle" | "silver" | "steel";
|
|
7
|
-
content: string;
|
|
8
|
-
showCardCore: boolean;
|
|
9
|
-
cardCoreVariant: "solid" | "subtle" | "soft" | "outline";
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export default {
|
|
13
|
-
title: "Components/Effects/GlowingBorder",
|
|
14
|
-
component: StorybookComponent,
|
|
15
|
-
argTypes: {
|
|
16
|
-
variant: {
|
|
17
|
-
control: { type: "select" },
|
|
18
|
-
options: ["vivid", "subtle", "silver", "steel"],
|
|
19
|
-
description: "GlowingBorder visual variant",
|
|
20
|
-
table: {
|
|
21
|
-
category: "Appearance",
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
content: {
|
|
25
|
-
control: { type: "text" },
|
|
26
|
-
description: "Content to display inside the glowing border",
|
|
27
|
-
table: {
|
|
28
|
-
category: "Content",
|
|
29
|
-
},
|
|
30
|
-
},
|
|
31
|
-
showCardCore: {
|
|
32
|
-
control: { type: "boolean" },
|
|
33
|
-
description: "Show content wrapped in a CardCore component",
|
|
34
|
-
table: {
|
|
35
|
-
category: "Content",
|
|
36
|
-
},
|
|
37
|
-
},
|
|
38
|
-
cardCoreVariant: {
|
|
39
|
-
control: { type: "select" },
|
|
40
|
-
options: ["solid", "subtle", "soft", "outline"],
|
|
41
|
-
description: "CardCore variant when showCardCore is true",
|
|
42
|
-
table: {
|
|
43
|
-
category: "Content",
|
|
44
|
-
},
|
|
45
|
-
},
|
|
46
|
-
// Hide internal props
|
|
47
|
-
styleClassPassthrough: {
|
|
48
|
-
table: {
|
|
49
|
-
disable: true,
|
|
50
|
-
},
|
|
51
|
-
},
|
|
52
|
-
},
|
|
53
|
-
args: {
|
|
54
|
-
variant: "vivid",
|
|
55
|
-
content:
|
|
56
|
-
"This is default slot content for the GlowingBorder component. As it's a slot, any HTML content can be placed here.",
|
|
57
|
-
showCardCore: false,
|
|
58
|
-
cardCoreVariant: "solid",
|
|
59
|
-
},
|
|
60
|
-
} as Meta<GlowingBorderStoryArgs>;
|
|
61
|
-
|
|
62
|
-
const Template: StoryFn<GlowingBorderStoryArgs> = (args) => ({
|
|
63
|
-
components: { StorybookComponent },
|
|
64
|
-
setup() {
|
|
65
|
-
return { args };
|
|
66
|
-
},
|
|
67
|
-
template: `
|
|
68
|
-
<div style="padding: 40px; background-color: var(--slate-10);">
|
|
69
|
-
<StorybookComponent
|
|
70
|
-
:variant="args.variant"
|
|
71
|
-
:style-class-passthrough="['storybook-demo']"
|
|
72
|
-
>
|
|
73
|
-
<div v-if="!args.showCardCore" style="padding: 20px; color: var(--slate-02);">
|
|
74
|
-
<h3 style="margin: 0 0 12px 0; font-size: 1.5rem; font-weight: 600;">GlowingBorder Header</h3>
|
|
75
|
-
<h4 style="margin: 0 0 16px 0; font-size: 1.25rem; font-weight: 500;">GlowingBorder Content</h4>
|
|
76
|
-
<p style="margin: 0 0 12px 0; line-height: 1.6;">{{ args.content }}</p>
|
|
77
|
-
<p style="margin: 0; font-size: 0.875rem; color: var(--slate-09);">GlowingBorder Footer</p>
|
|
78
|
-
</div>
|
|
79
|
-
|
|
80
|
-
<!-- CardCore version -->
|
|
81
|
-
<CardCore
|
|
82
|
-
v-else
|
|
83
|
-
:variant="args.cardCoreVariant"
|
|
84
|
-
:has-dividers="true"
|
|
85
|
-
:no-outline="false"
|
|
86
|
-
>
|
|
87
|
-
<template #header>
|
|
88
|
-
<h2 style="margin: 0; font-size: 1.5rem; font-weight: 600;">CardCore Header</h2>
|
|
89
|
-
</template>
|
|
90
|
-
<template #default>
|
|
91
|
-
<h3 style="margin: 0 0 12px 0; font-size: 1.25rem; font-weight: 500; color: var(--slate-02);">CardCore Content</h3>
|
|
92
|
-
<p style="margin: 0 0 12px 0; line-height: 1.6; color: var(--slate-02);">{{ args.content }}</p>
|
|
93
|
-
<p style="margin: 0; line-height: 1.6; color: var(--slate-02);">This demonstrates how GlowingBorder can wrap other components.</p>
|
|
94
|
-
</template>
|
|
95
|
-
<template #footer>
|
|
96
|
-
<p style="margin: 0; font-size: 0.875rem; color: var(--slate-02);">CardCore Footer</p>
|
|
97
|
-
</template>
|
|
98
|
-
</CardCore>
|
|
99
|
-
</StorybookComponent>
|
|
100
|
-
</div>
|
|
101
|
-
`,
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
export const Default = Template.bind({});
|
|
105
|
-
|
|
106
|
-
export const Vivid = Template.bind({});
|
|
107
|
-
Vivid.args = {
|
|
108
|
-
variant: "vivid",
|
|
109
|
-
content:
|
|
110
|
-
"Vivid variant creates a bright, attention-grabbing glow effect perfect for highlighting important content or call-to-action elements.",
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
export const Subtle = Template.bind({});
|
|
114
|
-
Subtle.args = {
|
|
115
|
-
variant: "subtle",
|
|
116
|
-
content:
|
|
117
|
-
"Subtle variant provides a gentle glow that adds visual interest without being overwhelming, ideal for elegant content presentation.",
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
export const Silver = Template.bind({});
|
|
121
|
-
Silver.args = {
|
|
122
|
-
variant: "silver",
|
|
123
|
-
content:
|
|
124
|
-
"Silver variant offers a metallic, sophisticated glow that works well in professional or modern design contexts.",
|
|
125
|
-
};
|
|
126
|
-
|
|
127
|
-
export const Steel = Template.bind({});
|
|
128
|
-
Steel.args = {
|
|
129
|
-
variant: "steel",
|
|
130
|
-
content:
|
|
131
|
-
"Steel variant provides a cool, industrial glow effect that's perfect for technical or utilitarian design themes.",
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
export const WithCardCore = Template.bind({});
|
|
135
|
-
WithCardCore.args = {
|
|
136
|
-
variant: "vivid",
|
|
137
|
-
content:
|
|
138
|
-
"This example shows how GlowingBorder can enhance other components like CardCore, creating layered visual effects.",
|
|
139
|
-
showCardCore: true,
|
|
140
|
-
cardCoreVariant: "solid",
|
|
141
|
-
};
|