valaxy-theme-yun 0.20.0-beta.8 → 0.20.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/components/YunAside.vue +1 -1
- package/components/YunLayoutPostTag.vue +1 -0
- package/components/YunNotice.vue +6 -5
- package/components/YunOverview.vue +0 -5
- package/components/YunPagination.vue +12 -5
- package/components/YunPostCard.vue +2 -2
- package/components/YunPostList.vue +8 -7
- package/components/YunPrologue.vue +1 -1
- package/components/animation/LineBurstEffects.vue +8 -5
- package/components/author/YunAuthorAvatar.vue +2 -1
- package/components/prologue/PrologueSquare.vue +83 -91
- package/components/prologue/YunAEFrame.vue +68 -85
- package/components/site/YunSiteDescription.vue +11 -0
- package/components/site/YunSiteLinkItem.vue +1 -1
- package/components/site/YunSiteSubtitle.vue +14 -0
- package/components/ui/YunDivider.vue +3 -0
- package/components/ui/YunExcerptBottomGradient.vue +6 -0
- package/composables/animation.ts +5 -1
- package/layouts/home.vue +2 -2
- package/package.json +12 -11
- package/styles/animations/index.scss +8 -0
- package/styles/css-vars.scss +1 -1
- package/utils/animation.ts +3 -2
- package/valaxy.config.ts +1 -0
package/components/YunAside.vue
CHANGED
@@ -38,7 +38,7 @@ watch(() => [yun.rightSidebar.isOpen, yun.size.isXl], async () => {
|
|
38
38
|
overflow="auto"
|
39
39
|
>
|
40
40
|
<Transition name="fade" :delay="100">
|
41
|
-
<div v-show="show" class="w-full" flex="~ col">
|
41
|
+
<div v-show="show" class="w-full" flex="~ col" pb-2>
|
42
42
|
<template v-if="showToc">
|
43
43
|
<h2
|
44
44
|
m="t-6 b-2"
|
package/components/YunNotice.vue
CHANGED
@@ -5,16 +5,17 @@ defineProps<{
|
|
5
5
|
</script>
|
6
6
|
|
7
7
|
<template>
|
8
|
-
<div class="
|
9
|
-
<
|
10
|
-
|
8
|
+
<div class="w-full px-4 flex-center">
|
9
|
+
<div class="yun-notice w-full">
|
10
|
+
<span v-html="content" />
|
11
|
+
<slot />
|
12
|
+
</div>
|
11
13
|
</div>
|
12
14
|
</template>
|
13
15
|
|
14
16
|
<style>
|
15
17
|
.yun-notice {
|
16
18
|
border: 1px solid var(--va-c-text);
|
17
|
-
width: calc(100% - 2rem);
|
18
19
|
display: flex;
|
19
20
|
flex-direction: column;
|
20
21
|
justify-content: center;
|
@@ -23,6 +24,6 @@ defineProps<{
|
|
23
24
|
font-weight: bold;
|
24
25
|
padding: 1rem;
|
25
26
|
max-width: var(--yun-post-card-max-width);
|
26
|
-
background-color:
|
27
|
+
background-color: rgb(200 200 200 / 0.1);
|
27
28
|
}
|
28
29
|
</style>
|
@@ -16,6 +16,10 @@ const { curPage, totalPages, showPage, getTo, surLen, prevTo, nextTo, showPrev,
|
|
16
16
|
total: props.total,
|
17
17
|
pageSize: props.pageSize,
|
18
18
|
})
|
19
|
+
|
20
|
+
defineExpose({
|
21
|
+
curPage,
|
22
|
+
})
|
19
23
|
</script>
|
20
24
|
|
21
25
|
<template>
|
@@ -48,7 +52,7 @@ const { curPage, totalPages, showPage, getTo, surLen, prevTo, nextTo, showPrev,
|
|
48
52
|
|
49
53
|
<style lang="scss">
|
50
54
|
:root {
|
51
|
-
--page-btn-bg-color:
|
55
|
+
--page-btn-bg-color: rgb(255 255 255 / 0.5);
|
52
56
|
--page-btn-hover-bg-color: var(--va-c-primary-lighter);
|
53
57
|
--page-btn-active-bg-color: var(--va-c-primary-light);
|
54
58
|
}
|
@@ -69,10 +73,10 @@ const { curPage, totalPages, showPage, getTo, surLen, prevTo, nextTo, showPrev,
|
|
69
73
|
width: 2rem;
|
70
74
|
height: 2rem;
|
71
75
|
margin: 0;
|
72
|
-
transition: background-color var(--va-transition-duration) ease;
|
73
76
|
|
74
77
|
// disabled attr
|
75
78
|
&[disabled] {
|
79
|
+
color: var(--va-c-text-light);
|
76
80
|
background-color: var(--va-c-bg-mute);
|
77
81
|
}
|
78
82
|
}
|
@@ -84,19 +88,22 @@ const { curPage, totalPages, showPage, getTo, surLen, prevTo, nextTo, showPrev,
|
|
84
88
|
background-color: var(--page-btn-bg-color);
|
85
89
|
|
86
90
|
&:hover {
|
87
|
-
color: var(--va-c-bg);
|
91
|
+
// color: var(--va-c-bg);
|
92
|
+
color: white;
|
88
93
|
background: var(--page-btn-hover-bg-color);
|
89
94
|
}
|
90
95
|
|
91
96
|
&:active {
|
92
|
-
color: var(--va-c-bg);
|
97
|
+
// color: var(--va-c-bg);
|
98
|
+
color: white;
|
93
99
|
background: var(--page-btn-active-bg-color);
|
94
100
|
}
|
95
101
|
|
96
102
|
&.active {
|
103
|
+
// color: var(--va-c-bg);
|
104
|
+
color: white;
|
97
105
|
font-weight: normal;
|
98
106
|
background: var(--page-btn-active-bg-color);
|
99
|
-
color: var(--va-c-bg);
|
100
107
|
cursor: default;
|
101
108
|
}
|
102
109
|
|
@@ -52,12 +52,12 @@ const { icon, styles } = usePostProperty(props.post.type)
|
|
52
52
|
</div>
|
53
53
|
<!-- <div m="b-5" /> -->
|
54
54
|
|
55
|
-
<
|
55
|
+
<YunExcerptBottomGradient v-if="post.excerpt" />
|
56
56
|
|
57
57
|
<a
|
58
58
|
v-if="post.url"
|
59
59
|
:href="post.url"
|
60
|
-
class="post-link-btn shadow hover:shadow-md"
|
60
|
+
class="post-link-btn shadow hover:shadow-md z-2"
|
61
61
|
rounded
|
62
62
|
target="_blank"
|
63
63
|
m="b-4"
|
@@ -1,15 +1,15 @@
|
|
1
1
|
<script setup lang="ts">
|
2
|
-
import { computed } from 'vue'
|
2
|
+
import { computed, ref } from 'vue'
|
3
3
|
import { useSiteConfig, useSiteStore } from 'valaxy'
|
4
4
|
import type { Post } from 'valaxy/types'
|
5
5
|
|
6
6
|
const props = withDefaults(defineProps<{
|
7
7
|
type?: string
|
8
8
|
posts?: Post[]
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
}>(), {})
|
10
|
+
|
11
|
+
const paginationRef = ref()
|
12
|
+
const curPage = computed(() => paginationRef.value?.curPage || 1)
|
13
13
|
|
14
14
|
const site = useSiteStore()
|
15
15
|
const siteConfig = useSiteConfig()
|
@@ -21,8 +21,8 @@ const posts = computed(() => (
|
|
21
21
|
|
22
22
|
const displayedPosts = computed(() =>
|
23
23
|
posts.value.slice(
|
24
|
-
(
|
25
|
-
|
24
|
+
(curPage.value - 1) * pageSize.value,
|
25
|
+
curPage.value * pageSize.value,
|
26
26
|
),
|
27
27
|
)
|
28
28
|
</script>
|
@@ -39,6 +39,7 @@ const displayedPosts = computed(() =>
|
|
39
39
|
</div>
|
40
40
|
|
41
41
|
<YunPagination
|
42
|
+
ref="paginationRef"
|
42
43
|
class="mt-5"
|
43
44
|
:total="posts.length" :page-size="pageSize"
|
44
45
|
/>
|
@@ -1,16 +1,19 @@
|
|
1
1
|
<script setup lang="ts">
|
2
2
|
// 播放完销毁 css 动画
|
3
|
+
import { sleep } from 'valaxy'
|
3
4
|
import { onMounted, ref } from 'vue'
|
4
5
|
|
5
6
|
const props = defineProps<{
|
7
|
+
delay: number
|
6
8
|
duration: number
|
7
9
|
}>()
|
8
10
|
|
9
|
-
const destroy = ref(
|
10
|
-
onMounted(() => {
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
const destroy = ref(true)
|
12
|
+
onMounted(async () => {
|
13
|
+
await sleep(props.delay)
|
14
|
+
destroy.value = false
|
15
|
+
await sleep(props.duration)
|
16
|
+
destroy.value = true
|
14
17
|
})
|
15
18
|
</script>
|
16
19
|
|
@@ -1,122 +1,73 @@
|
|
1
1
|
<script setup lang="ts">
|
2
|
-
import { useMotion } from '@vueuse/motion'
|
3
2
|
import { ref } from 'vue'
|
4
|
-
import { useSiteConfig } from 'valaxy'
|
5
|
-
import { cubicBezier } from '../../client/constants'
|
6
3
|
import { useThemeConfig } from '../../composables'
|
7
4
|
|
8
|
-
const siteConfig = useSiteConfig()
|
9
5
|
const themeConfig = useThemeConfig()
|
10
6
|
|
11
7
|
const showContent = ref(false)
|
12
|
-
const avatarRef = ref<HTMLElement>()
|
13
|
-
const motionInstance = useMotion(avatarRef, {
|
14
|
-
initial: {
|
15
|
-
borderRadius: '0%',
|
16
|
-
width: 'var(--total-char-height)',
|
17
|
-
height: 'var(--total-char-height)',
|
18
|
-
rotate: 135,
|
19
|
-
y: '0%',
|
20
|
-
},
|
21
|
-
enter: {
|
22
|
-
borderRadius: '50%',
|
23
|
-
rotate: 0,
|
24
|
-
y: '0%',
|
25
|
-
width: '120px',
|
26
|
-
height: '120px',
|
27
|
-
boxShadow: 'none',
|
28
|
-
transition: {
|
29
|
-
type: 'keyframes',
|
30
|
-
ease: cubicBezier.easeIn,
|
31
|
-
duration: 800,
|
32
|
-
onComplete: () => {
|
33
|
-
motionInstance.variant.value = 'leave'
|
34
|
-
showContent.value = true
|
35
|
-
},
|
36
|
-
},
|
37
|
-
},
|
38
|
-
leave: {
|
39
|
-
// y: '-50%',
|
40
|
-
boxShadow: '0 5px 100px rgba(0, 0, 0, 0.15)',
|
41
|
-
transition: {
|
42
|
-
type: 'keyframes',
|
43
|
-
ease: cubicBezier.easeInOut,
|
44
|
-
duration: 500,
|
45
|
-
},
|
46
|
-
},
|
47
|
-
})
|
48
|
-
|
49
|
-
const introRef = ref<HTMLElement>()
|
50
|
-
useMotion(introRef, {
|
51
|
-
initial: {
|
52
|
-
y: '0%',
|
53
|
-
},
|
54
|
-
enter: {
|
55
|
-
y: 'calc(-50%)',
|
56
|
-
transition: {
|
57
|
-
delay: 800,
|
58
|
-
type: 'keyframes',
|
59
|
-
ease: cubicBezier.easeInOut,
|
60
|
-
duration: 400,
|
61
|
-
},
|
62
|
-
},
|
63
|
-
})
|
64
8
|
</script>
|
65
9
|
|
66
10
|
<template>
|
67
11
|
<div
|
68
12
|
flex="~ col"
|
69
|
-
class="yun-square-container items-center justify-center text-center"
|
70
|
-
:class="{
|
71
|
-
'size-$total-char-height': !showContent,
|
72
|
-
}"
|
13
|
+
class="yun-square-container items-center justify-center text-center size-$total-char-height"
|
73
14
|
>
|
74
15
|
<slot />
|
75
16
|
|
76
17
|
<div
|
77
|
-
ref="introRef"
|
78
18
|
flex="~ col center"
|
79
|
-
class="info relative"
|
19
|
+
class="info-with-avatar relative duration-800 transition-cubic-bezier-ease-in"
|
20
|
+
:class="{
|
21
|
+
show: showContent,
|
22
|
+
}"
|
80
23
|
>
|
81
|
-
<
|
82
|
-
|
24
|
+
<Transition
|
25
|
+
enter-from-class="enter-from"
|
26
|
+
enter-to-class="enter-to"
|
27
|
+
appear
|
28
|
+
@after-appear="showContent = true"
|
83
29
|
>
|
84
|
-
<
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
30
|
+
<div
|
31
|
+
flex="~ col"
|
32
|
+
class="absolute yun-square bg-$va-c-text square-rotate z-1"
|
33
|
+
>
|
34
|
+
<LineBurstEffects
|
35
|
+
class="absolute top-0 left-0 right-0 bottom-0 size-full scale-200"
|
36
|
+
:delay="200"
|
37
|
+
:duration="400"
|
38
|
+
/>
|
39
|
+
<Transition
|
40
|
+
enter-from-class="op-0"
|
41
|
+
enter-to-class="op-100"
|
42
|
+
enter-active-class="transition-400 delay-400"
|
43
|
+
appear
|
44
|
+
>
|
45
|
+
<YunAuthorAvatar />
|
46
|
+
</Transition>
|
47
|
+
</div>
|
48
|
+
</Transition>
|
90
49
|
|
91
50
|
<div
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
opacity: 0,
|
96
|
-
y: '0',
|
97
|
-
}"
|
98
|
-
:enter="{
|
99
|
-
opacity: 1,
|
100
|
-
y: 'calc(50% + 60px)',
|
101
|
-
transition: {
|
102
|
-
type: 'keyframes',
|
103
|
-
ease: cubicBezier.easeInOut,
|
104
|
-
duration: 400,
|
105
|
-
},
|
51
|
+
class="info"
|
52
|
+
:class="{
|
53
|
+
show: showContent,
|
106
54
|
}"
|
107
55
|
>
|
108
56
|
<YunAuthorName class="mt-3" />
|
109
57
|
<YunAuthorIntro />
|
110
|
-
|
111
|
-
<
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
58
|
+
|
59
|
+
<YunDivider />
|
60
|
+
|
61
|
+
<div flex="~ col" class="gap-2 items-center justify-center">
|
62
|
+
<YunSiteTitle />
|
63
|
+
<YunSiteSubtitle />
|
64
|
+
<YunSiteDescription />
|
116
65
|
</div>
|
117
66
|
|
67
|
+
<YunDivider />
|
68
|
+
|
118
69
|
<div
|
119
|
-
class="mt-4 flex-center w-
|
70
|
+
class="mt-4 flex-center w-64 md:w-100 m-auto gap-2"
|
120
71
|
flex="~ wrap"
|
121
72
|
p="x-$rect-margin"
|
122
73
|
>
|
@@ -141,4 +92,45 @@ useMotion(introRef, {
|
|
141
92
|
<style lang="scss">
|
142
93
|
@use 'sass:map';
|
143
94
|
@use 'valaxy-theme-yun/styles/vars.scss' as *;
|
95
|
+
|
96
|
+
.yun-square {
|
97
|
+
transition: all 0.8s map.get($cubic-bezier, 'ease-in');
|
98
|
+
border-radius: 50%;
|
99
|
+
transform: rotate(0deg) translateY(0%);
|
100
|
+
width: var(--avatar-size);
|
101
|
+
height: var(--avatar-size);
|
102
|
+
box-shadow: 0 5px 100px rgb(0 0 0 / 0.15);
|
103
|
+
|
104
|
+
&.enter-from {
|
105
|
+
border-radius: 0%;
|
106
|
+
width: var(--total-char-height);
|
107
|
+
height: var(--total-char-height);
|
108
|
+
transform: rotate(135deg) translateY(0%);
|
109
|
+
box-shadow: none;
|
110
|
+
}
|
111
|
+
}
|
112
|
+
|
113
|
+
.yun-square-container {
|
114
|
+
--avatar-size: 100px;
|
115
|
+
|
116
|
+
.info-with-avatar {
|
117
|
+
position: relative;
|
118
|
+
|
119
|
+
&.show {
|
120
|
+
transform: translateY(-50%);
|
121
|
+
}
|
122
|
+
}
|
123
|
+
|
124
|
+
.info {
|
125
|
+
position: relative;
|
126
|
+
opacity: 0;
|
127
|
+
transform: translateY(0);
|
128
|
+
transition: all 0.8s map.get($cubic-bezier, 'ease-in');
|
129
|
+
|
130
|
+
&.show {
|
131
|
+
opacity: 1;
|
132
|
+
transform: translateY(calc(50% + var(--avatar-size) / 2));
|
133
|
+
}
|
134
|
+
}
|
135
|
+
}
|
144
136
|
</style>
|
@@ -1,100 +1,44 @@
|
|
1
1
|
<script setup lang="ts">
|
2
|
-
import
|
3
|
-
import { useMotion } from '@vueuse/motion'
|
4
|
-
import { useAppStore } from 'valaxy'
|
5
|
-
import { computed, ref } from 'vue'
|
6
|
-
|
7
|
-
const tlRef = ref<HTMLElement>()
|
8
|
-
const trRef = ref<HTMLElement>()
|
9
|
-
const blRef = ref<HTMLElement>()
|
10
|
-
const brRef = ref<HTMLElement>()
|
11
|
-
|
12
|
-
const app = useAppStore()
|
13
|
-
const cornerSize = computed(() => {
|
14
|
-
return app.isMobile ? 40 : 50
|
15
|
-
})
|
16
|
-
const cornerMargin = computed(() => {
|
17
|
-
return app.isMobile ? 10 : 30
|
18
|
-
})
|
19
|
-
const cornerBorderSize = computed(() => {
|
20
|
-
return app.isMobile ? 3 : 5
|
21
|
-
})
|
22
|
-
|
23
|
-
const cornerTransitionProps: PopmotionTransitionProps = {
|
24
|
-
type: 'spring',
|
25
|
-
duration: 600,
|
26
|
-
}
|
2
|
+
import { onMounted, ref } from 'vue'
|
27
3
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
y: -cornerMargin.value,
|
32
|
-
},
|
33
|
-
enter: {
|
34
|
-
x: 0,
|
35
|
-
y: 0,
|
36
|
-
transition: cornerTransitionProps,
|
37
|
-
},
|
38
|
-
})
|
39
|
-
|
40
|
-
useMotion(trRef, {
|
41
|
-
initial: {
|
42
|
-
x: cornerMargin.value,
|
43
|
-
y: -cornerMargin.value,
|
44
|
-
},
|
45
|
-
enter: {
|
46
|
-
x: 0,
|
47
|
-
y: 0,
|
48
|
-
transition: cornerTransitionProps,
|
49
|
-
},
|
50
|
-
})
|
51
|
-
|
52
|
-
useMotion(blRef, {
|
53
|
-
initial: {
|
54
|
-
x: -cornerMargin.value,
|
55
|
-
y: cornerMargin.value,
|
56
|
-
},
|
57
|
-
enter: {
|
58
|
-
x: 0,
|
59
|
-
y: 0,
|
60
|
-
transition: cornerTransitionProps,
|
61
|
-
},
|
62
|
-
})
|
63
|
-
|
64
|
-
useMotion(brRef, {
|
65
|
-
initial: {
|
66
|
-
x: cornerMargin.value,
|
67
|
-
y: cornerMargin.value,
|
68
|
-
},
|
69
|
-
enter: {
|
70
|
-
x: 0,
|
71
|
-
y: 0,
|
72
|
-
transition: cornerTransitionProps,
|
73
|
-
},
|
74
|
-
})
|
75
|
-
|
76
|
-
const cssVarStyles = computed(() => {
|
77
|
-
return {
|
78
|
-
'--corner-size': `${cornerSize.value}px`,
|
79
|
-
'--corner-margin': `${cornerMargin.value}px`,
|
80
|
-
'--corner-border-size': `${cornerBorderSize.value}px`,
|
81
|
-
}
|
4
|
+
const playAnim = ref(false)
|
5
|
+
onMounted(() => {
|
6
|
+
playAnim.value = true
|
82
7
|
})
|
83
8
|
</script>
|
84
9
|
|
85
10
|
<template>
|
86
11
|
<div
|
87
|
-
class="ae-frame"
|
12
|
+
class="yun-ae-frame"
|
13
|
+
:class="{
|
14
|
+
play: playAnim,
|
15
|
+
}"
|
88
16
|
>
|
89
|
-
<div
|
90
|
-
<div
|
91
|
-
<div
|
92
|
-
<div
|
17
|
+
<div class="tl absolute" />
|
18
|
+
<div class="tr absolute" />
|
19
|
+
<div class="bl absolute" />
|
20
|
+
<div class="br absolute" />
|
93
21
|
</div>
|
94
22
|
</template>
|
95
23
|
|
96
24
|
<style lang="scss">
|
97
|
-
|
25
|
+
@use 'sass:map';
|
26
|
+
@use 'valaxy/client/styles/mixins/index.scss' as *;
|
27
|
+
@use 'valaxy-theme-yun/styles/vars.scss' as *;
|
28
|
+
|
29
|
+
@include screen('md') {
|
30
|
+
.yun-ae-frame {
|
31
|
+
--corner-size: 50px;
|
32
|
+
--corner-margin: 30px;
|
33
|
+
--corner-border-size: 5px;
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
37
|
+
.yun-ae-frame {
|
38
|
+
--corner-size: 40px;
|
39
|
+
--corner-margin: 8px;
|
40
|
+
--corner-border-size: 3px;
|
41
|
+
|
98
42
|
div {
|
99
43
|
width: var(--corner-size);
|
100
44
|
height: var(--corner-size);
|
@@ -151,5 +95,44 @@ const cssVarStyles = computed(() => {
|
|
151
95
|
}
|
152
96
|
}
|
153
97
|
}
|
98
|
+
|
99
|
+
.tl, .tr, .bl, .br {
|
100
|
+
position: absolute;
|
101
|
+
transition: transform 0.6s map.get($cubic-bezier, 'ease-in');
|
102
|
+
}
|
103
|
+
|
104
|
+
.tl {
|
105
|
+
transform: translate(calc(var(--corner-margin) * -1), calc(var(--corner-margin) * -1));
|
106
|
+
}
|
107
|
+
|
108
|
+
.tr {
|
109
|
+
transform: translate(calc(var(--corner-margin)), calc(var(--corner-margin) * -1));
|
110
|
+
}
|
111
|
+
|
112
|
+
.bl {
|
113
|
+
transform: translate(calc(var(--corner-margin) * -1), calc(var(--corner-margin)));
|
114
|
+
}
|
115
|
+
|
116
|
+
.br {
|
117
|
+
transform: translate(calc(var(--corner-margin)), calc(var(--corner-margin)));
|
118
|
+
}
|
119
|
+
|
120
|
+
&.play {
|
121
|
+
.tl {
|
122
|
+
transform: translate(0, 0);
|
123
|
+
}
|
124
|
+
|
125
|
+
.tr {
|
126
|
+
transform: translate(0, 0);
|
127
|
+
}
|
128
|
+
|
129
|
+
.bl {
|
130
|
+
transform: translate(0, 0);
|
131
|
+
}
|
132
|
+
|
133
|
+
.br {
|
134
|
+
transform: translate(0, 0);
|
135
|
+
}
|
136
|
+
}
|
154
137
|
}
|
155
138
|
</style>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<script setup lang="ts">
|
2
|
+
import { useSiteConfig } from 'valaxy'
|
3
|
+
|
4
|
+
const siteConfig = useSiteConfig()
|
5
|
+
</script>
|
6
|
+
|
7
|
+
<template>
|
8
|
+
<div v-if="siteConfig.description" class="site-description text-$va-c-text text-sm">
|
9
|
+
{{ siteConfig.description }}
|
10
|
+
</div>
|
11
|
+
</template>
|
@@ -15,7 +15,7 @@ const yunApp = useYunAppStore()
|
|
15
15
|
inline-flex
|
16
16
|
:to="page.url" :title="page.name"
|
17
17
|
:style="`color:${page.color}`"
|
18
|
-
hover="bg-
|
18
|
+
hover="bg-white/80 dark:bg-black/80"
|
19
19
|
@click="yunApp.fullscreenMenu.isOpen = false"
|
20
20
|
>
|
21
21
|
<div :class="page.icon" class="icon" />
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<script setup lang="ts">
|
2
|
+
import { useSiteConfig } from 'valaxy'
|
3
|
+
|
4
|
+
const siteConfig = useSiteConfig()
|
5
|
+
</script>
|
6
|
+
|
7
|
+
<template>
|
8
|
+
<h4
|
9
|
+
v-if="siteConfig.subtitle"
|
10
|
+
class="site-subtitle block text-$va-c-text op-80" text="sm"
|
11
|
+
>
|
12
|
+
{{ siteConfig.subtitle }}
|
13
|
+
</h4>
|
14
|
+
</template>
|
package/composables/animation.ts
CHANGED
@@ -12,6 +12,10 @@ export function useYunSpringAnimation(target: MaybeRef<HTMLElement | undefined>,
|
|
12
12
|
i: number
|
13
13
|
y?: number
|
14
14
|
duration?: number
|
15
|
+
/**
|
16
|
+
* delay in ms
|
17
|
+
*/
|
18
|
+
delay?: number
|
15
19
|
}) {
|
16
20
|
useMotion(target, {
|
17
21
|
initial: {
|
@@ -22,7 +26,7 @@ export function useYunSpringAnimation(target: MaybeRef<HTMLElement | undefined>,
|
|
22
26
|
opacity: 1,
|
23
27
|
y: 0,
|
24
28
|
transition: {
|
25
|
-
delay: options.i * 50,
|
29
|
+
delay: options.i * (options.delay || 50),
|
26
30
|
type: 'spring',
|
27
31
|
ease: cubicBezier.easeIn,
|
28
32
|
damping: 8,
|
package/layouts/home.vue
CHANGED
@@ -16,7 +16,7 @@ const showNotice = computed(() => {
|
|
16
16
|
|
17
17
|
<template>
|
18
18
|
<YunLayoutWrapper
|
19
|
-
class="items-center
|
19
|
+
class="items-center flex-col"
|
20
20
|
:class="{
|
21
21
|
'mt-0!': !isPage,
|
22
22
|
}"
|
@@ -29,7 +29,7 @@ const showNotice = computed(() => {
|
|
29
29
|
|
30
30
|
<YunNotice
|
31
31
|
v-if="showNotice"
|
32
|
-
class="mb-
|
32
|
+
class="mb-2 md:mb-6"
|
33
33
|
:class="{
|
34
34
|
'mt-4': !isPage,
|
35
35
|
}"
|
package/package.json
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "valaxy-theme-yun",
|
3
|
-
"
|
3
|
+
"type": "module",
|
4
|
+
"version": "0.20.0",
|
4
5
|
"author": {
|
5
6
|
"email": "me@yunyoujun.cn",
|
6
7
|
"name": "YunYouJun",
|
@@ -19,23 +20,23 @@
|
|
19
20
|
},
|
20
21
|
"main": "index.ts",
|
21
22
|
"module": "index.ts",
|
22
|
-
"scripts": {
|
23
|
-
"release": "bumpp && npm publish"
|
24
|
-
},
|
25
23
|
"dependencies": {
|
26
24
|
"@ctrl/tinycolor": "^4.1.0",
|
27
25
|
"@explosions/fireworks": "^0.1.0",
|
28
|
-
"@iconify-json/ant-design": "^1.2.
|
29
|
-
"@iconify-json/simple-icons": "^1.2.
|
26
|
+
"@iconify-json/ant-design": "^1.2.2",
|
27
|
+
"@iconify-json/simple-icons": "^1.2.7",
|
30
28
|
"@vueuse/motion": "^2.2.5",
|
31
29
|
"animejs": "^3.2.2",
|
32
30
|
"gsap": "^3.12.5",
|
33
|
-
"primevue": "^4.0
|
34
|
-
"radix-vue": "^1.9.
|
31
|
+
"primevue": "^4.1.0",
|
32
|
+
"radix-vue": "^1.9.7"
|
35
33
|
},
|
36
34
|
"devDependencies": {
|
37
35
|
"@types/animejs": "^3.1.12",
|
38
|
-
"valaxy": "
|
39
|
-
"valaxy
|
36
|
+
"valaxy-addon-waline": "0.2.0",
|
37
|
+
"valaxy": "0.20.0"
|
38
|
+
},
|
39
|
+
"scripts": {
|
40
|
+
"release": "bumpp && npm publish"
|
40
41
|
}
|
41
|
-
}
|
42
|
+
}
|
@@ -4,6 +4,14 @@
|
|
4
4
|
@use 'sass:map';
|
5
5
|
@use '../vars.scss' as *;
|
6
6
|
|
7
|
+
.transition-cubic-bezier-ease-in {
|
8
|
+
transition-timing-function: map.get($cubic-bezier, 'ease-in');
|
9
|
+
}
|
10
|
+
|
11
|
+
.transition-cubic-bezier-ease-in-out {
|
12
|
+
transition-timing-function: map.get($cubic-bezier, 'ease-in-out');
|
13
|
+
}
|
14
|
+
|
7
15
|
.v-enter-active,
|
8
16
|
.v-leave-active {
|
9
17
|
transition: opacity .2s map.get($cubic-bezier, 'ease-in');
|
package/styles/css-vars.scss
CHANGED
package/utils/animation.ts
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
import { gsap } from 'gsap'
|
2
|
-
//
|
3
|
-
|
2
|
+
// gsap/ScrollToPlugin is ESM, but gsap not include 'type:module' in package.json
|
3
|
+
// use cjs for vite-ssg, optimizeDeps for ESM
|
4
|
+
import ScrollToPlugin from 'gsap/dist/ScrollToPlugin'
|
4
5
|
|
5
6
|
gsap.registerPlugin(ScrollToPlugin)
|
6
7
|
|