@m11g/library 0.0.0
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/.editorconfig +8 -0
- package/.gitattributes +1 -0
- package/.oxfmtrc.json +5 -0
- package/.oxlintrc.json +10 -0
- package/.stylelintrc +33 -0
- package/.vscode/extensions.json +8 -0
- package/README.md +48 -0
- package/env.d.ts +1 -0
- package/eslint.config.ts +35 -0
- package/index.html +13 -0
- package/package.json +61 -0
- package/postcss.config.ts +23 -0
- package/public/favicon.ico +0 -0
- package/src/App.vue +28 -0
- package/src/assets/css/base.css +2 -0
- package/src/assets/css/elements/_base.css +5 -0
- package/src/assets/css/elements/buttons.css +23 -0
- package/src/assets/css/elements/form.css +75 -0
- package/src/assets/css/elements/scaffolding.css +62 -0
- package/src/assets/css/elements/transition.css +4 -0
- package/src/assets/css/elements/typography.css +80 -0
- package/src/assets/css/media-queries/media-queries.css +3 -0
- package/src/assets/css/mixins/list-reset.css +5 -0
- package/src/assets/css/variables/_base.css +7 -0
- package/src/assets/css/variables/chakra.css +160 -0
- package/src/assets/css/variables/colors.css +205 -0
- package/src/assets/css/variables/grid.css +6 -0
- package/src/assets/css/variables/spacings.css +10 -0
- package/src/assets/css/variables/transitions.css +10 -0
- package/src/assets/css/variables/typography.css +17 -0
- package/src/components/AppBreadcrumb.vue +63 -0
- package/src/components/AppButton.vue +105 -0
- package/src/components/AppCarousel.vue +145 -0
- package/src/components/AppDialog.vue +126 -0
- package/src/components/AppNotification.vue +68 -0
- package/src/components/AppPagination.vue +127 -0
- package/src/components/AppPopover.vue +57 -0
- package/src/components/AppTabs.vue +176 -0
- package/src/components/CenterWrapper.vue +50 -0
- package/src/components/ClickableWrapper.vue +48 -0
- package/src/components/Forms/AppForm.vue +61 -0
- package/src/components/Forms/FormErrorMessage.vue +17 -0
- package/src/components/Forms/FormField.vue +30 -0
- package/src/components/Forms/FormFieldset.vue +28 -0
- package/src/components/Forms/RadioGroup.vue +85 -0
- package/src/components/Forms/SearchField.vue +38 -0
- package/src/components/Forms/SelectField.vue +125 -0
- package/src/components/Forms/TextField.vue +41 -0
- package/src/components/Forms/TextareaField.vue +32 -0
- package/src/components/ScrollSpy.vue +111 -0
- package/src/components/SummaryDetails.vue +83 -0
- package/src/composables/useTheme.ts +20 -0
- package/src/index.ts +48 -0
- package/src/main.ts +10 -0
- package/src/router/index.ts +26 -0
- package/src/types/Theme.ts +11 -0
- package/src/views/CarouselView.vue +27 -0
- package/src/views/FormView.vue +111 -0
- package/src/views/HomeView.vue +100 -0
- package/src/views/ScrollSpyView.vue +58 -0
- package/theme-dark +117 -0
- package/theme-light +191 -0
- package/tsconfig.app.json +18 -0
- package/tsconfig.json +11 -0
- package/tsconfig.node.json +28 -0
- package/vite.config.ts +26 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
defineProps<{
|
|
3
|
+
title: string;
|
|
4
|
+
/**
|
|
5
|
+
* The **`open`** property of the HTMLDetailsElement interface is a boolean value reflecting the open HTML attribute, indicating whether the <details>'s contents (not counting the <summary>) is to be shown to the user.
|
|
6
|
+
*
|
|
7
|
+
* [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLDetailsElement/open)
|
|
8
|
+
*/
|
|
9
|
+
open?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* The **`name`** property of the HTMLDetailsElement interface reflects the name attribute of <details> elements. It enables multiple <details> elements to be connected together, where only one for the <details> elements can be open at once. This allows developers to easily create UI features such as accordions without scripting.
|
|
12
|
+
*
|
|
13
|
+
* [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLDetailsElement/name)
|
|
14
|
+
*/
|
|
15
|
+
name?: string;
|
|
16
|
+
}>();
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<template>
|
|
20
|
+
<details :open :name>
|
|
21
|
+
<summary>{{ title }}</summary>
|
|
22
|
+
<slot />
|
|
23
|
+
</details>
|
|
24
|
+
</template>
|
|
25
|
+
|
|
26
|
+
<style lang="css">
|
|
27
|
+
details {
|
|
28
|
+
cursor: pointer;
|
|
29
|
+
border-block-end: 2px solid var(--color-black);
|
|
30
|
+
|
|
31
|
+
&:first-of-type {
|
|
32
|
+
border-block-start: 2px solid var(--color-black);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
&::details-content {
|
|
36
|
+
block-size: 0;
|
|
37
|
+
overflow: clip;
|
|
38
|
+
border-block-start: 1px solid var(--color-black);
|
|
39
|
+
opacity: 0;
|
|
40
|
+
transition:
|
|
41
|
+
padding var(--transition),
|
|
42
|
+
opacity var(--transition),
|
|
43
|
+
height var(--transition),
|
|
44
|
+
content-visibility var(--transition) allow-discrete;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
&[open]::details-content {
|
|
48
|
+
block-size: max-content;
|
|
49
|
+
padding-block: var(--spacing-2) var(--spacing-4);
|
|
50
|
+
opacity: 1;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
::marker {
|
|
54
|
+
inline-size: 2em;
|
|
55
|
+
block-size: 1em;
|
|
56
|
+
aspect-ratio: 1;
|
|
57
|
+
content: "";
|
|
58
|
+
background-color: var(--color-black);
|
|
59
|
+
|
|
60
|
+
/* border-shape:
|
|
61
|
+
shape(
|
|
62
|
+
from 96.34% 44.96%,
|
|
63
|
+
curve by 0% 10.11% with 4.88% 2.79% / 4.88% 7.32%,
|
|
64
|
+
line by -74.99% 42.84%,
|
|
65
|
+
curve by -17.69% 0% with -4.88% 2.79% / -12.81% 2.79%,
|
|
66
|
+
smooth by 0% -10.11% with -4.88% -7.32%,
|
|
67
|
+
line to 69.82% 50%,
|
|
68
|
+
line to 3.7% 12.2%,
|
|
69
|
+
curve by 0% -10.11% with -4.88% -2.79%/-4.88% -7.32%,
|
|
70
|
+
smooth by 17.69% 0% with 12.81% -2.79%,
|
|
71
|
+
line by 74.99% 42.84%,
|
|
72
|
+
close
|
|
73
|
+
); */
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
summary {
|
|
78
|
+
padding-block: var(--spacing-2);
|
|
79
|
+
|
|
80
|
+
/* display: flex; */
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
</style>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Theme } from '@/types/Theme';
|
|
2
|
+
import { ref } from 'vue';
|
|
3
|
+
|
|
4
|
+
export default (theme: Theme = 'primary') => {
|
|
5
|
+
|
|
6
|
+
const colors = ref({
|
|
7
|
+
emphasized: `var(--color-${theme}-emphasized)`,
|
|
8
|
+
contrast: `var(--color-${theme}-contrast)`,
|
|
9
|
+
fg: `var(--color-${theme}-fg)`,
|
|
10
|
+
subtle: `var(--color-${theme}-subtle)`,
|
|
11
|
+
muted: `var(--color-${theme}-muted)`,
|
|
12
|
+
solid: `var(--color-${theme}-solid)`,
|
|
13
|
+
focusRing: `var(--color-${theme}-focus-ring)`,
|
|
14
|
+
border: `var(--color-${theme}-border)`,
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
return {
|
|
18
|
+
colors
|
|
19
|
+
}
|
|
20
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import '@/assets/css/base.css'
|
|
2
|
+
|
|
3
|
+
import AppButton from '@/components/AppButton.vue'
|
|
4
|
+
import AppNotification from '@/components/AppNotification.vue'
|
|
5
|
+
import AppTabs from '@/components/AppTabs.vue'
|
|
6
|
+
import AppCarousel from '@/components/AppCarousel.vue'
|
|
7
|
+
// import AppPagination from '@/components/AppPagination.vue'
|
|
8
|
+
import CenterWrapper from '@/components/CenterWrapper.vue'
|
|
9
|
+
import ScrollSpy from '@/components/ScrollSpy.vue'
|
|
10
|
+
import AppBreadcrumb from '@/components/AppBreadcrumb.vue'
|
|
11
|
+
import AppDialog from '@/components/AppDialog.vue'
|
|
12
|
+
import AppPopover from '@/components/AppPopover.vue'
|
|
13
|
+
import ClickableWrapper from '@/components/ClickableWrapper.vue'
|
|
14
|
+
import SummaryDetails from '@/components/SummaryDetails.vue'
|
|
15
|
+
import AppForm from '@/components/Forms/AppForm.vue';
|
|
16
|
+
import FormField from '@/components/Forms/FormField.vue';
|
|
17
|
+
import RadioGroup from '@/components/Forms/RadioGroup.vue';
|
|
18
|
+
import SelectField from '@/components/Forms/SelectField.vue';
|
|
19
|
+
import TextareaField from '@/components/Forms/TextareaField.vue';
|
|
20
|
+
import FormErrorMessage from '@/components/Forms/FormErrorMessage.vue';
|
|
21
|
+
import FormFieldset from '@/components/Forms/FormFieldset.vue';
|
|
22
|
+
import SearchField from '@/components/Forms/SearchField.vue';
|
|
23
|
+
import TextField from '@/components/Forms/TextField.vue';
|
|
24
|
+
|
|
25
|
+
export {
|
|
26
|
+
AppButton,
|
|
27
|
+
AppNotification,
|
|
28
|
+
AppTabs,
|
|
29
|
+
AppCarousel,
|
|
30
|
+
// AppPagination,
|
|
31
|
+
CenterWrapper,
|
|
32
|
+
ScrollSpy,
|
|
33
|
+
AppBreadcrumb,
|
|
34
|
+
AppDialog,
|
|
35
|
+
AppPopover,
|
|
36
|
+
ClickableWrapper,
|
|
37
|
+
SummaryDetails,
|
|
38
|
+
|
|
39
|
+
AppForm,
|
|
40
|
+
FormField,
|
|
41
|
+
RadioGroup,
|
|
42
|
+
SelectField,
|
|
43
|
+
TextareaField,
|
|
44
|
+
FormErrorMessage,
|
|
45
|
+
FormFieldset,
|
|
46
|
+
SearchField,
|
|
47
|
+
TextField,
|
|
48
|
+
}
|
package/src/main.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import HomeView from "@/views/HomeView.vue";
|
|
2
|
+
import { createRouter, createWebHistory } from "vue-router";
|
|
3
|
+
|
|
4
|
+
const router = createRouter({
|
|
5
|
+
history: createWebHistory(import.meta.env.BASE_URL),
|
|
6
|
+
routes: [
|
|
7
|
+
{
|
|
8
|
+
path: "/",
|
|
9
|
+
component: HomeView,
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
path: "/scroll-spy",
|
|
13
|
+
component: () => import("@/views/ScrollSpyView.vue"),
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
path: "/form",
|
|
17
|
+
component: () => import("@/views/FormView.vue"),
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
path: "/carousel",
|
|
21
|
+
component: () => import("@/views/CarouselView.vue"),
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
export default router;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import AppCarousel from "@/components/AppCarousel.vue";
|
|
3
|
+
import CenterWrapper from "@/components/CenterWrapper.vue";
|
|
4
|
+
|
|
5
|
+
const entries = [
|
|
6
|
+
"https://images.pexels.com/photos/8081419/pexels-photo-8081419.jpeg",
|
|
7
|
+
"https://images.pexels.com/photos/20066093/pexels-photo-20066093.jpeg",
|
|
8
|
+
"https://images.pexels.com/photos/799706/pexels-photo-799706.jpeg",
|
|
9
|
+
];
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<template>
|
|
13
|
+
<center-wrapper>
|
|
14
|
+
<app-carousel :items="entries">
|
|
15
|
+
<template v-for="image in entries" #[image] :key="image">
|
|
16
|
+
<img :src="image" />
|
|
17
|
+
</template>
|
|
18
|
+
</app-carousel>
|
|
19
|
+
</center-wrapper>
|
|
20
|
+
</template>
|
|
21
|
+
|
|
22
|
+
<style lang="css" scoped>
|
|
23
|
+
img {
|
|
24
|
+
display: block;
|
|
25
|
+
margin: 0;
|
|
26
|
+
}
|
|
27
|
+
</style>
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import CenterWrapper from "@/components/CenterWrapper.vue";
|
|
3
|
+
import AppForm from "@/components/Forms/AppForm.vue";
|
|
4
|
+
import FormFieldset from "@/components/Forms/FormFieldset.vue";
|
|
5
|
+
import SelectField from "@/components/Forms/SelectField.vue";
|
|
6
|
+
import TextareaField from "@/components/Forms/TextareaField.vue";
|
|
7
|
+
import TextField from "@/components/Forms/TextField.vue";
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
import { toTypedSchema } from "@vee-validate/zod";
|
|
10
|
+
import { useForm } from "vee-validate";
|
|
11
|
+
import { ref, type Ref } from "vue";
|
|
12
|
+
import RadioGroup from "@/components/Forms/RadioGroup.vue";
|
|
13
|
+
|
|
14
|
+
const { handleSubmit, errors, values } = useForm({
|
|
15
|
+
name: "form",
|
|
16
|
+
validationSchema: toTypedSchema(
|
|
17
|
+
z.object({
|
|
18
|
+
name: z.string().min(1, "Het veld naam is verplicht"),
|
|
19
|
+
comment: z.string(),
|
|
20
|
+
email: z.email({
|
|
21
|
+
error: "Het veld email is niet correct",
|
|
22
|
+
}),
|
|
23
|
+
select: z.enum(["option 1", "option 2", "option 3", ""]).refine((val) => val !== "", {
|
|
24
|
+
error: "Het veld select is verplicht",
|
|
25
|
+
}),
|
|
26
|
+
radio: z.enum(["option 1", "option 2", "option 3", ""]).refine((val) => val !== "", {
|
|
27
|
+
error: "Het veld radio is verplicht",
|
|
28
|
+
}),
|
|
29
|
+
}),
|
|
30
|
+
),
|
|
31
|
+
initialValues: {
|
|
32
|
+
name: "",
|
|
33
|
+
comment: "",
|
|
34
|
+
select: "",
|
|
35
|
+
email: "",
|
|
36
|
+
radio: "option 2",
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
const status: Ref<"idle" | "pending" | "success" | "error"> = ref("idle");
|
|
41
|
+
|
|
42
|
+
const submit = handleSubmit(() => {
|
|
43
|
+
status.value = "pending";
|
|
44
|
+
setTimeout(() => {
|
|
45
|
+
status.value = "success";
|
|
46
|
+
}, 2000);
|
|
47
|
+
});
|
|
48
|
+
</script>
|
|
49
|
+
|
|
50
|
+
<template>
|
|
51
|
+
<center-wrapper>
|
|
52
|
+
<app-form
|
|
53
|
+
:errors
|
|
54
|
+
button-title="Reactie plaatsen"
|
|
55
|
+
success-text="success"
|
|
56
|
+
:status
|
|
57
|
+
@submit-form="submit"
|
|
58
|
+
>
|
|
59
|
+
<form-fieldset title="Adres" :columns="3">
|
|
60
|
+
<text-field name="name" title="Name" autocomplete="name" />
|
|
61
|
+
<text-field name="email" title="Email" type="email" autocomplete="email" />
|
|
62
|
+
<select-field
|
|
63
|
+
:options="[
|
|
64
|
+
{
|
|
65
|
+
title: 'Option 1',
|
|
66
|
+
value: 'option 1',
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
title: 'Option 2',
|
|
70
|
+
value: 'option 2',
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
title: 'Option 3',
|
|
74
|
+
value: 'option 3',
|
|
75
|
+
},
|
|
76
|
+
]"
|
|
77
|
+
name="select"
|
|
78
|
+
title="Opties"
|
|
79
|
+
/>
|
|
80
|
+
<textarea-field name="comment" title="Reactie" class="comment" />
|
|
81
|
+
</form-fieldset>
|
|
82
|
+
<radio-group
|
|
83
|
+
class="options"
|
|
84
|
+
:options="[
|
|
85
|
+
{
|
|
86
|
+
title: 'Option 1',
|
|
87
|
+
value: 'option 1',
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
title: 'Option 2',
|
|
91
|
+
value: 'option 2',
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
title: 'Option 3',
|
|
95
|
+
value: 'option 3',
|
|
96
|
+
},
|
|
97
|
+
]"
|
|
98
|
+
name="radio"
|
|
99
|
+
title="Radio opties"
|
|
100
|
+
/>
|
|
101
|
+
</app-form>
|
|
102
|
+
<pre>{{ values }}</pre>
|
|
103
|
+
</center-wrapper>
|
|
104
|
+
</template>
|
|
105
|
+
|
|
106
|
+
<style lang="css" scoped>
|
|
107
|
+
.options,
|
|
108
|
+
.comment {
|
|
109
|
+
grid-column: span 3;
|
|
110
|
+
}
|
|
111
|
+
</style>
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import SummaryDetails from "@/components/SummaryDetails.vue";
|
|
3
|
+
import CenterWrapper from "@/components/CenterWrapper.vue";
|
|
4
|
+
import AppNotification from "@/components/AppNotification.vue";
|
|
5
|
+
import AppTabs from "@/components/AppTabs.vue";
|
|
6
|
+
import AppDialog from "@/components/AppDialog.vue";
|
|
7
|
+
import AppBreadcrumb from "@/components/AppBreadcrumb.vue";
|
|
8
|
+
import AppPopover from "@/components/AppPopover.vue";
|
|
9
|
+
import { Icon } from "@iconify/vue";
|
|
10
|
+
import AppButton from "@/components/AppButton.vue";
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<template>
|
|
14
|
+
<center-wrapper>
|
|
15
|
+
<app-popover>
|
|
16
|
+
<template #anchor><icon icon="solar:info-circle-bold" /></template>
|
|
17
|
+
Greetings, one and all!
|
|
18
|
+
</app-popover>
|
|
19
|
+
<app-breadcrumb
|
|
20
|
+
:pages="[
|
|
21
|
+
{
|
|
22
|
+
title: 'home',
|
|
23
|
+
to: '/',
|
|
24
|
+
},
|
|
25
|
+
|
|
26
|
+
{
|
|
27
|
+
title: 'about',
|
|
28
|
+
to: '/',
|
|
29
|
+
},
|
|
30
|
+
]"
|
|
31
|
+
/>
|
|
32
|
+
<app-dialog id="dialog" title="test">
|
|
33
|
+
<p>
|
|
34
|
+
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Hic eos, libero iste asperiores
|
|
35
|
+
quisquam inventore? Hic quaerat id recusandae, esse cumque omnis officia, debitis amet
|
|
36
|
+
obcaecati suscipit exercitationem nisi? Possimus!
|
|
37
|
+
</p>
|
|
38
|
+
</app-dialog>
|
|
39
|
+
<button commandfor="dialog" command="show-modal">Open Dialog</button>
|
|
40
|
+
<summary-details title="Hic eos, libero iste asperiores" style="margin-bottom: 1em;">
|
|
41
|
+
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Hic eos, libero iste asperiores
|
|
42
|
+
quisquam inventore? Hic quaerat id recusandae, esse cumque omnis officia, debitis amet
|
|
43
|
+
obcaecati suscipit exercitationem nisi? Possimus!
|
|
44
|
+
</summary-details>
|
|
45
|
+
|
|
46
|
+
<app-notification variant="error">error</app-notification>
|
|
47
|
+
<app-notification variant="success">success</app-notification>
|
|
48
|
+
<app-notification variant="warning">warning</app-notification>
|
|
49
|
+
<app-notification variant="info">info</app-notification>
|
|
50
|
+
|
|
51
|
+
<app-tabs
|
|
52
|
+
:tabs="[
|
|
53
|
+
{
|
|
54
|
+
id: 'apple',
|
|
55
|
+
title: 'Apple',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
id: 'apricot',
|
|
59
|
+
title: 'Apricot',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
id: 'advocado',
|
|
63
|
+
title: 'Avocado',
|
|
64
|
+
},
|
|
65
|
+
]"
|
|
66
|
+
>
|
|
67
|
+
<template #advocado>
|
|
68
|
+
<p>
|
|
69
|
+
Lorem ipsum dolor, sit amet consectetur adipisicing elit. Aperiam voluptatum vitae fugiat
|
|
70
|
+
dolor amet rem ab tempore aspernatur, dolore nostrum laboriosam ratione sequi quidem autem
|
|
71
|
+
libero. Molestias placeat omnis explicabo. Lorem ipsum dolor sit amet consectetur
|
|
72
|
+
adipisicing elit. Asperiores veniam sint quidem, ut corporis fuga impedit, obcaecati
|
|
73
|
+
neque, dolor earum unde maiores nesciunt atque. Atque adipisci nemo temporibus optio est!
|
|
74
|
+
</p>
|
|
75
|
+
</template>
|
|
76
|
+
<template #apple>
|
|
77
|
+
<p>
|
|
78
|
+
Lorem ipsum dolor sit amet consectetur adipisicing elit. Ipsa, accusantium ullam quo
|
|
79
|
+
dolores id voluptatem dignissimos, quas rem, dolore excepturi eius? Voluptatem libero quis
|
|
80
|
+
sit! Beatae libero adipisci eius praesentium. Lorem ipsum dolor sit, amet consectetur
|
|
81
|
+
adipisicing elit. Vel facilis tempore cum modi quam dolorum eaque expedita, doloremque
|
|
82
|
+
delectus? Odio sint iste nam nobis laboriosam illo blanditiis voluptatibus alias autem?
|
|
83
|
+
Lorem ipsum dolor sit amet consectetur adipisicing elit. Nulla delectus autem, esse
|
|
84
|
+
asperiores consectetur illum? Perferendis numquam, dicta cupiditate dolorem, rem aliquid
|
|
85
|
+
culpa perspiciatis alias quam laborum hic. Exercitationem, placeat.
|
|
86
|
+
</p>
|
|
87
|
+
</template>
|
|
88
|
+
<template #apricot>
|
|
89
|
+
<p>
|
|
90
|
+
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Illum, eum sequi assumenda
|
|
91
|
+
laudantium excepturi earum enim repudiandae, esse nobis temporibus numquam ut commodi.
|
|
92
|
+
Recusandae perferendis temporibus dicta deleniti blanditiis aliquid?
|
|
93
|
+
</p>
|
|
94
|
+
</template>
|
|
95
|
+
</app-tabs>
|
|
96
|
+
|
|
97
|
+
<app-button title="Button" />
|
|
98
|
+
<app-button title="Button" variant="ghost" />
|
|
99
|
+
</center-wrapper>
|
|
100
|
+
</template>
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import CenterWrapper from "@/components/CenterWrapper.vue";
|
|
3
|
+
import ScrollSpy from "@/components/ScrollSpy.vue";
|
|
4
|
+
|
|
5
|
+
const pages = [
|
|
6
|
+
{
|
|
7
|
+
id: "section-1",
|
|
8
|
+
title: "Section 1",
|
|
9
|
+
},
|
|
10
|
+
|
|
11
|
+
{
|
|
12
|
+
id: "section-2",
|
|
13
|
+
title: "Section 2",
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "section-3",
|
|
17
|
+
title: "Section 3",
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
id: "section-4",
|
|
21
|
+
title: "Section 4",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
id: "section-5",
|
|
25
|
+
title: "Section 5",
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
</script>
|
|
29
|
+
|
|
30
|
+
<template>
|
|
31
|
+
<center-wrapper>
|
|
32
|
+
<scroll-spy :pages>
|
|
33
|
+
<template v-for="page in pages" #[page.id] :key="page.id">
|
|
34
|
+
<p>
|
|
35
|
+
Lorem ipsum dolor, sit amet consectetur adipisicing elit. Aperiam voluptatum vitae fugiat
|
|
36
|
+
dolor amet rem ab tempore aspernatur, dolore nostrum laboriosam ratione sequi quidem autem
|
|
37
|
+
libero. Molestias placeat omnis explicabo. Lorem ipsum dolor sit amet consectetur
|
|
38
|
+
adipisicing elit. Asperiores veniam sint quidem, ut corporis fuga impedit, obcaecati
|
|
39
|
+
neque, dolor earum unde maiores nesciunt atque. Atque adipisci nemo temporibus optio est!
|
|
40
|
+
</p>
|
|
41
|
+
<p>
|
|
42
|
+
Lorem ipsum dolor, sit amet consectetur adipisicing elit. Aperiam voluptatum vitae fugiat
|
|
43
|
+
dolor amet rem ab tempore aspernatur, dolore nostrum laboriosam ratione sequi quidem autem
|
|
44
|
+
libero. Molestias placeat omnis explicabo. Lorem ipsum dolor sit amet consectetur
|
|
45
|
+
adipisicing elit. Asperiores veniam sint quidem, ut corporis fuga impedit, obcaecati
|
|
46
|
+
neque, dolor earum unde maiores nesciunt atque. Atque adipisci nemo temporibus optio est!
|
|
47
|
+
</p>
|
|
48
|
+
<p>
|
|
49
|
+
Lorem ipsum dolor, sit amet consectetur adipisicing elit. Aperiam voluptatum vitae fugiat
|
|
50
|
+
dolor amet rem ab tempore aspernatur, dolore nostrum laboriosam ratione sequi quidem autem
|
|
51
|
+
libero. Molestias placeat omnis explicabo. Lorem ipsum dolor sit amet consectetur
|
|
52
|
+
adipisicing elit. Asperiores veniam sint quidem, ut corporis fuga impedit, obcaecati
|
|
53
|
+
neque, dolor earum unde maiores nesciunt atque. Atque adipisci nemo temporibus optio est!
|
|
54
|
+
</p>
|
|
55
|
+
</template>
|
|
56
|
+
</scroll-spy>
|
|
57
|
+
</center-wrapper>
|
|
58
|
+
</template>
|
package/theme-dark
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
[data-bs-theme=dark] {
|
|
2
|
+
color-scheme: dark;
|
|
3
|
+
--bs-body-color: #ced4da;
|
|
4
|
+
--bs-body-color-rgb: 206, 212, 218;
|
|
5
|
+
--bs-body-bg: #16191d;
|
|
6
|
+
--bs-body-bg-rgb: 22, 25, 29;
|
|
7
|
+
--bs-surface-color: #dee2e6;
|
|
8
|
+
--bs-surface-color-rgb: 222, 226, 230;
|
|
9
|
+
--bs-surface-bg: #212529;
|
|
10
|
+
--bs-surface-bg-rgb: 33, 37, 41;
|
|
11
|
+
--bs-surface-bg-hover: #25292d;
|
|
12
|
+
--bs-emphasis-color: #fff;
|
|
13
|
+
--bs-emphasis-color-rgb: 255, 255, 255;
|
|
14
|
+
--bs-muted-color: #868e96;
|
|
15
|
+
--bs-primary: #62a1fe;
|
|
16
|
+
--bs-primary-rgb: 98, 161, 254;
|
|
17
|
+
--bs-primary-hover: #81b4fe;
|
|
18
|
+
--bs-primary-active: #91bdfe;
|
|
19
|
+
--bs-primary-subtle: #052c65;
|
|
20
|
+
--bs-primary-subtle-hover: #063272;
|
|
21
|
+
--bs-primary-subtle-active: #084298;
|
|
22
|
+
--bs-primary-emphasis: #92befe;
|
|
23
|
+
--bs-primary-emphasis-hover: #86b7fe;
|
|
24
|
+
--bs-text-on-primary: #000;
|
|
25
|
+
--bs-primary-border-subtle: #084298;
|
|
26
|
+
--bs-secondary: #a3a6a9;
|
|
27
|
+
--bs-secondary-rgb: 163, 166, 169;
|
|
28
|
+
--bs-secondary-hover: #b5b8ba;
|
|
29
|
+
--bs-secondary-active: #bfc1c3;
|
|
30
|
+
--bs-secondary-subtle: #2d2f31;
|
|
31
|
+
--bs-secondary-subtle-hover: #333537;
|
|
32
|
+
--bs-secondary-subtle-active: #44474a;
|
|
33
|
+
--bs-secondary-emphasis: #bfc1c4;
|
|
34
|
+
--bs-secondary-emphasis-hover: #b8bbbd;
|
|
35
|
+
--bs-text-on-secondary: #000;
|
|
36
|
+
--bs-secondary-border-subtle: #44474a;
|
|
37
|
+
--bs-tertiary: #e47aaf;
|
|
38
|
+
--bs-tertiary-rgb: 228, 122, 175;
|
|
39
|
+
--bs-tertiary-hover: #e995bf;
|
|
40
|
+
--bs-tertiary-active: #eca2c7;
|
|
41
|
+
--bs-tertiary-subtle: #561435;
|
|
42
|
+
--bs-tertiary-subtle-hover: #60173b;
|
|
43
|
+
--bs-tertiary-subtle-active: #801f4f;
|
|
44
|
+
--bs-tertiary-emphasis: #eda3c8;
|
|
45
|
+
--bs-tertiary-emphasis-hover: #eb99c2;
|
|
46
|
+
--bs-text-on-tertiary: #000;
|
|
47
|
+
--bs-tertiary-border-subtle: #801f4f;
|
|
48
|
+
--bs-success: #6ab190;
|
|
49
|
+
--bs-success-rgb: 106, 177, 144;
|
|
50
|
+
--bs-success-hover: #88c1a6;
|
|
51
|
+
--bs-success-active: #97c8b1;
|
|
52
|
+
--bs-success-subtle: #0a3622;
|
|
53
|
+
--bs-success-subtle-hover: #0b3d26;
|
|
54
|
+
--bs-success-subtle-active: #0f5132;
|
|
55
|
+
--bs-success-emphasis: #98c9b2;
|
|
56
|
+
--bs-success-emphasis-hover: #8cc3aa;
|
|
57
|
+
--bs-text-on-success: #000;
|
|
58
|
+
--bs-success-border-subtle: #0f5132;
|
|
59
|
+
--bs-info: #62ddf5;
|
|
60
|
+
--bs-info-rgb: 98, 221, 245;
|
|
61
|
+
--bs-info-hover: #81e4f7;
|
|
62
|
+
--bs-info-active: #91e7f8;
|
|
63
|
+
--bs-info-subtle: #055160;
|
|
64
|
+
--bs-info-subtle-hover: #065b6c;
|
|
65
|
+
--bs-info-subtle-active: #087990;
|
|
66
|
+
--bs-info-emphasis: #92e7f8;
|
|
67
|
+
--bs-info-emphasis-hover: #86e5f8;
|
|
68
|
+
--bs-text-on-info: #000;
|
|
69
|
+
--bs-info-border-subtle: #087990;
|
|
70
|
+
--bs-warning: #ffd75e;
|
|
71
|
+
--bs-warning-rgb: 255, 215, 94;
|
|
72
|
+
--bs-warning-hover: #ffdf7e;
|
|
73
|
+
--bs-warning-active: #ffe38e;
|
|
74
|
+
--bs-warning-subtle: #664d03;
|
|
75
|
+
--bs-warning-subtle-hover: #735703;
|
|
76
|
+
--bs-warning-subtle-active: #997404;
|
|
77
|
+
--bs-warning-emphasis: #ffe38f;
|
|
78
|
+
--bs-warning-emphasis-hover: #ffe083;
|
|
79
|
+
--bs-text-on-warning: #000;
|
|
80
|
+
--bs-warning-border-subtle: #997404;
|
|
81
|
+
--bs-danger: #e87c86;
|
|
82
|
+
--bs-danger-rgb: 232, 124, 134;
|
|
83
|
+
--bs-danger-hover: #ed969e;
|
|
84
|
+
--bs-danger-active: #efa3aa;
|
|
85
|
+
--bs-danger-subtle: #58151c;
|
|
86
|
+
--bs-danger-subtle-hover: #63181f;
|
|
87
|
+
--bs-danger-subtle-active: #842029;
|
|
88
|
+
--bs-danger-emphasis: #efa4ab;
|
|
89
|
+
--bs-danger-emphasis-hover: #ee9aa2;
|
|
90
|
+
--bs-text-on-danger: #000;
|
|
91
|
+
--bs-danger-border-subtle: #842029;
|
|
92
|
+
--bs-light: #fafbfc;
|
|
93
|
+
--bs-light-rgb: 250, 251, 252;
|
|
94
|
+
--bs-light-hover: #fbfcfd;
|
|
95
|
+
--bs-light-active: #fcfcfd;
|
|
96
|
+
--bs-light-subtle: #636464;
|
|
97
|
+
--bs-light-subtle-hover: #707071;
|
|
98
|
+
--bs-light-subtle-active: #959596;
|
|
99
|
+
--bs-light-emphasis: #fcfcfd;
|
|
100
|
+
--bs-light-emphasis-hover: #fcfcfd;
|
|
101
|
+
--bs-text-on-light: #000;
|
|
102
|
+
--bs-light-border-subtle: #959596;
|
|
103
|
+
--bs-dark: #6f7174;
|
|
104
|
+
--bs-dark-rgb: 111, 113, 116;
|
|
105
|
+
--bs-dark-hover: #595a5d;
|
|
106
|
+
--bs-dark-active: #4e4f51;
|
|
107
|
+
--bs-dark-subtle: #0d0f10;
|
|
108
|
+
--bs-dark-subtle-hover: #0f1112;
|
|
109
|
+
--bs-dark-subtle-active: #141619;
|
|
110
|
+
--bs-dark-emphasis: #9b9d9f;
|
|
111
|
+
--bs-dark-emphasis-hover: #909294;
|
|
112
|
+
--bs-text-on-dark: #fff;
|
|
113
|
+
--bs-dark-border-subtle: #141619;
|
|
114
|
+
--bs-heading-color: #fff;
|
|
115
|
+
--bs-border-color: #495057;
|
|
116
|
+
--bs-border-color-translucent: rgba(255, 255, 255, 0.15);
|
|
117
|
+
}
|