valaxy-theme-hairy 1.0.0 → 1.0.1
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/HairyContainer.vue +4 -0
- package/components/HairyDrawer.vue +2 -3
- package/components/HairyImage.vue +1 -1
- package/components/HairyPageArchives.vue +59 -0
- package/components/HairyPageTags.vue +48 -0
- package/components/HairyTabbar.vue +2 -2
- package/components/parts/HairyBreadcrumb.vue +1 -1
- package/components/parts/HairyImageViewer.vue +1 -1
- package/components/parts/HairyUserNav.vue +3 -3
- package/layouts/{archive.vue → archives.vue} +1 -1
- package/layouts/default.vue +5 -0
- package/layouts/post.vue +1 -1
- package/layouts/tags.vue +2 -1
- package/package.json +1 -1
- package/pages/archives/[year]/[month]/index.vue +0 -2
- package/pages/archives/[year]/index.vue +0 -2
- package/pages/archives/index.vue +2 -57
- package/pages/categories/[...its].vue +0 -2
- package/pages/tags/[tag]/index.vue +0 -2
- package/pages/tags/index.vue +1 -43
@@ -2,6 +2,10 @@
|
|
2
2
|
import { onMounted } from 'vue'
|
3
3
|
import { setupDefaultDark } from '../composables'
|
4
4
|
|
5
|
+
import 'element-plus/theme-chalk/base.css'
|
6
|
+
import 'element-plus/theme-chalk/el-timeline.css'
|
7
|
+
import 'element-plus/theme-chalk/el-timeline-item.css'
|
8
|
+
|
5
9
|
onMounted(setupDefaultDark)
|
6
10
|
</script>
|
7
11
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<script lang="ts" setup>
|
2
|
-
import 'element-plus/
|
2
|
+
import 'element-plus/theme-chalk/el-dialog.css'
|
3
3
|
import { ElDrawer } from 'element-plus/es/components/drawer/index'
|
4
4
|
import { useRoute } from 'vue-router'
|
5
5
|
import { watch } from 'vue'
|
@@ -24,11 +24,10 @@ watch(() => route.fullPath, () => showDrawer.value = false)
|
|
24
24
|
|
25
25
|
<style lang="scss">
|
26
26
|
.el-drawer {
|
27
|
+
background-color: transparent;
|
27
28
|
.el-drawer__header {
|
28
29
|
display: none;
|
29
30
|
}
|
30
|
-
|
31
|
-
background-color: transparent;
|
32
31
|
.el-icon.el-drawer__close {
|
33
32
|
font-size: 24px;
|
34
33
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<script lang="ts" setup>
|
2
2
|
import { ElImage, imageProps } from 'element-plus/es/components/image/index'
|
3
|
-
import 'element-plus/
|
3
|
+
import 'element-plus/theme-chalk/el-image.css'
|
4
4
|
import { inject } from 'vue'
|
5
5
|
|
6
6
|
const props = defineProps(imageProps)
|
@@ -0,0 +1,59 @@
|
|
1
|
+
<script lang="ts" setup>
|
2
|
+
import { ElTimeline, ElTimelineItem } from 'element-plus/es/components/timeline/index'
|
3
|
+
import { usePostList } from 'valaxy'
|
4
|
+
|
5
|
+
import { getArchiveLink } from '../utils'
|
6
|
+
import { useYearArchives } from '../composables'
|
7
|
+
|
8
|
+
const activities = useYearArchives()
|
9
|
+
const posts = usePostList()
|
10
|
+
</script>
|
11
|
+
|
12
|
+
<template>
|
13
|
+
<HairyBreadcrumb class="mb-5" size="large" after="归档">
|
14
|
+
<HairyBreadcrumbItem to="/">
|
15
|
+
首页
|
16
|
+
</HairyBreadcrumbItem>
|
17
|
+
<HairyBreadcrumbItem>
|
18
|
+
目前共计 {{ posts.length }} 篇文章
|
19
|
+
</HairyBreadcrumbItem>
|
20
|
+
</HairyBreadcrumb>
|
21
|
+
<ElTimeline>
|
22
|
+
<ElTimelineItem
|
23
|
+
v-for="(activity, index) in activities"
|
24
|
+
:key="index"
|
25
|
+
size="large"
|
26
|
+
hollow
|
27
|
+
>
|
28
|
+
<div class="activity inline-flex items-center">
|
29
|
+
<HairyLink class="text-size-8" @click="$router.push(getArchiveLink(activity.year))">
|
30
|
+
{{ activity.year }}
|
31
|
+
</HairyLink>
|
32
|
+
<span class="text-gray-5 mx-2">/</span>
|
33
|
+
<HairyLink class="text-size-8" @click="$router.push(getArchiveLink(activity.year, activity.month))">
|
34
|
+
{{ activity.month }}
|
35
|
+
</HairyLink>
|
36
|
+
<span class="text-gray-5 text-size-5 ml-1">({{ activity.count }}篇)</span>
|
37
|
+
</div>
|
38
|
+
<HairyTimelineContent v-for="(item, index) in activity.posts.slice(0, 2)" :key="index" :post="item" />
|
39
|
+
<div v-if="activity.posts.length > 2">
|
40
|
+
<HairyLink @click="$router.push(getArchiveLink(activity.year))">
|
41
|
+
....
|
42
|
+
</HairyLink>
|
43
|
+
</div>
|
44
|
+
</ElTimelineItem>
|
45
|
+
</ElTimeline>
|
46
|
+
</template>
|
47
|
+
|
48
|
+
<route lang="yaml">
|
49
|
+
meta:
|
50
|
+
layout: archive
|
51
|
+
</route>
|
52
|
+
|
53
|
+
<style lang="scss" scoped>
|
54
|
+
.activity:hover {
|
55
|
+
.HairyLink {
|
56
|
+
color: var(--hy-c-primary);
|
57
|
+
}
|
58
|
+
}
|
59
|
+
</style>
|
@@ -0,0 +1,48 @@
|
|
1
|
+
<script lang="ts" setup>
|
2
|
+
import { useRouter } from 'vue-router'
|
3
|
+
import { useHairyTags } from '../composables'
|
4
|
+
|
5
|
+
const router = useRouter()
|
6
|
+
|
7
|
+
const { getTagStyle, tags } = useHairyTags({
|
8
|
+
primary: '#1bc9a6',
|
9
|
+
})
|
10
|
+
|
11
|
+
function displayTag(tag: string) {
|
12
|
+
router.push(`/tags/${tag}`)
|
13
|
+
}
|
14
|
+
</script>
|
15
|
+
|
16
|
+
<template>
|
17
|
+
<div class="min-h-59vh flex-center flex-col">
|
18
|
+
<div text="center" class="text-size-2.5em pt-10 mb-5">
|
19
|
+
目前共计 {{ Array.from(tags).length }} 个标签
|
20
|
+
</div>
|
21
|
+
<div text="center" class="max-w-7xl flex flex-wrap justify-center items-center gap-2">
|
22
|
+
<a
|
23
|
+
v-for="[key, tag] in Array.from(tags).sort()"
|
24
|
+
:key="key" class="post-tag cursor-pointer"
|
25
|
+
:style="getTagStyle(tag.count)"
|
26
|
+
p="1"
|
27
|
+
@click="displayTag(key.toString())"
|
28
|
+
>
|
29
|
+
{{ key }}
|
30
|
+
</a>
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
</template>
|
34
|
+
|
35
|
+
<route lang="yaml">
|
36
|
+
meta:
|
37
|
+
layout: tags
|
38
|
+
</route>
|
39
|
+
|
40
|
+
<style lang="scss" scoped>
|
41
|
+
a {
|
42
|
+
color: var(--yun-tag-color);
|
43
|
+
&:hover {
|
44
|
+
--un-text-opacity: 1;
|
45
|
+
color: var(--hy-c-primary-dark);
|
46
|
+
}
|
47
|
+
}
|
48
|
+
</style>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<script lang="ts" setup>
|
2
2
|
import { ElTabPane, ElTabs } from 'element-plus/es/components/tabs/index'
|
3
|
-
import 'element-plus/
|
4
|
-
import 'element-plus/
|
3
|
+
import 'element-plus/theme-chalk/el-tabs.css'
|
4
|
+
import 'element-plus/theme-chalk/el-tab-pane.css'
|
5
5
|
import { computed, provide, ref } from 'vue'
|
6
6
|
|
7
7
|
import type { DefaultTheme } from 'valaxy/types'
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<script lang="ts" setup>
|
2
2
|
import { ElBreadcrumb, breadcrumbProps } from 'element-plus/es/components/breadcrumb/index'
|
3
|
-
import 'element-plus/
|
3
|
+
import 'element-plus/theme-chalk/el-breadcrumb.css'
|
4
4
|
import type { PropType } from 'vue'
|
5
5
|
import { computed } from 'vue'
|
6
6
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<script lang="ts" setup>
|
2
2
|
import { usePrograms } from '@overlastic/vue'
|
3
3
|
import { ElImageViewer, imageViewerProps } from 'element-plus/es/components/image-viewer/index'
|
4
|
-
import 'element-plus/
|
4
|
+
import 'element-plus/theme-chalk/el-image-viewer.css'
|
5
5
|
import { onMounted, onUnmounted } from 'vue'
|
6
6
|
|
7
7
|
const props = defineProps(imageViewerProps)
|
@@ -59,13 +59,13 @@ async function navigation(path: string) {
|
|
59
59
|
padding: 2px;
|
60
60
|
width: 100%;
|
61
61
|
border: 1px solid transparent;
|
62
|
-
> div {
|
63
|
-
justify-content: center;
|
64
|
-
}
|
65
62
|
border-radius: 10px;
|
66
63
|
transition: all 0.2s;
|
67
64
|
background-color: transparent;
|
68
65
|
user-select: none;
|
66
|
+
> div {
|
67
|
+
justify-content: center;
|
68
|
+
}
|
69
69
|
}
|
70
70
|
|
71
71
|
.HairyMenuItem:hover,
|
package/layouts/default.vue
CHANGED
package/layouts/post.vue
CHANGED
@@ -3,7 +3,7 @@ import { dayjs } from 'element-plus'
|
|
3
3
|
import { useFrontmatter } from 'valaxy'
|
4
4
|
import { useRouter } from 'vue-router'
|
5
5
|
import { ElTag } from 'element-plus/es/components/tag/index'
|
6
|
-
import 'element-plus/
|
6
|
+
import 'element-plus/theme-chalk/el-tag.css'
|
7
7
|
|
8
8
|
defineProps<{
|
9
9
|
header?: {
|
package/layouts/tags.vue
CHANGED
package/package.json
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
<script lang="ts" setup>
|
2
2
|
import { ElTimeline, ElTimelineItem } from 'element-plus/es/components/timeline/index'
|
3
|
-
import 'element-plus/es/components/timeline/style/index'
|
4
|
-
import 'element-plus/es/components/timeline-item/style/index'
|
5
3
|
import { computed } from 'vue'
|
6
4
|
import { useRoute } from 'vue-router'
|
7
5
|
import { useYearArchives } from '../../../../composables'
|
@@ -1,7 +1,5 @@
|
|
1
1
|
<script lang="ts" setup>
|
2
2
|
import { ElTimeline, ElTimelineItem } from 'element-plus/es/components/timeline/index'
|
3
|
-
import 'element-plus/es/components/timeline/style/index'
|
4
|
-
import 'element-plus/es/components/timeline-item/style/index'
|
5
3
|
import { computed } from 'vue'
|
6
4
|
import type { Post } from 'valaxy'
|
7
5
|
import { useRoute } from 'vue-router'
|
package/pages/archives/index.vue
CHANGED
@@ -1,61 +1,6 @@
|
|
1
|
-
<
|
2
|
-
import { ElTimeline, ElTimelineItem } from 'element-plus/es/components/timeline/index'
|
3
|
-
import { usePostList } from 'valaxy'
|
4
|
-
import 'element-plus/es/components/timeline/style/index'
|
5
|
-
import 'element-plus/es/components/timeline-item/style/index'
|
6
|
-
|
7
|
-
import { getArchiveLink } from '../../utils'
|
8
|
-
import { useYearArchives } from '../../composables'
|
9
|
-
|
10
|
-
const activities = useYearArchives()
|
11
|
-
const posts = usePostList()
|
12
|
-
</script>
|
13
|
-
|
14
|
-
<template>
|
15
|
-
<HairyBreadcrumb class="mb-5" size="large" after="归档">
|
16
|
-
<HairyBreadcrumbItem to="/">
|
17
|
-
首页
|
18
|
-
</HairyBreadcrumbItem>
|
19
|
-
<HairyBreadcrumbItem>
|
20
|
-
目前共计 {{ posts.length }} 篇文章
|
21
|
-
</HairyBreadcrumbItem>
|
22
|
-
</HairyBreadcrumb>
|
23
|
-
<ElTimeline>
|
24
|
-
<ElTimelineItem
|
25
|
-
v-for="(activity, index) in activities"
|
26
|
-
:key="index"
|
27
|
-
size="large"
|
28
|
-
hollow
|
29
|
-
>
|
30
|
-
<div class="activity inline-flex items-center">
|
31
|
-
<HairyLink class="text-size-8" @click="$router.push(getArchiveLink(activity.year))">
|
32
|
-
{{ activity.year }}
|
33
|
-
</HairyLink>
|
34
|
-
<span class="text-gray-5 mx-2">/</span>
|
35
|
-
<HairyLink class="text-size-8" @click="$router.push(getArchiveLink(activity.year, activity.month))">
|
36
|
-
{{ activity.month }}
|
37
|
-
</HairyLink>
|
38
|
-
<span class="text-gray-5 text-size-5 ml-1">({{ activity.count }}篇)</span>
|
39
|
-
</div>
|
40
|
-
<HairyTimelineContent v-for="(item, index) in activity.posts.slice(0, 2)" :key="index" :post="item" />
|
41
|
-
<div v-if="activity.posts.length > 2">
|
42
|
-
<HairyLink @click="$router.push(getArchiveLink(activity.year))">
|
43
|
-
....
|
44
|
-
</HairyLink>
|
45
|
-
</div>
|
46
|
-
</ElTimelineItem>
|
47
|
-
</ElTimeline>
|
48
|
-
</template>
|
1
|
+
<template></template>
|
49
2
|
|
50
3
|
<route lang="yaml">
|
51
4
|
meta:
|
52
|
-
layout:
|
5
|
+
layout: archives
|
53
6
|
</route>
|
54
|
-
|
55
|
-
<style lang="scss" scoped>
|
56
|
-
.activity:hover {
|
57
|
-
.HairyLink {
|
58
|
-
color: var(--hy-c-primary);
|
59
|
-
}
|
60
|
-
}
|
61
|
-
</style>
|
@@ -6,8 +6,6 @@ import { useThemeConfig } from 'valaxy'
|
|
6
6
|
import { ElTimeline, ElTimelineItem } from 'element-plus/es/components/timeline/index'
|
7
7
|
|
8
8
|
import type { HairyTheme } from '../..'
|
9
|
-
import 'element-plus/es/components/timeline/style/index'
|
10
|
-
import 'element-plus/es/components/timeline-item/style/index'
|
11
9
|
import { useCategory, useCategoryPost } from '../../composables'
|
12
10
|
|
13
11
|
const themeConfig = useThemeConfig<HairyTheme.Config>()
|
@@ -2,8 +2,6 @@
|
|
2
2
|
import { computed } from 'vue'
|
3
3
|
import { usePostList } from 'valaxy'
|
4
4
|
import { ElTimeline, ElTimelineItem } from 'element-plus/es/components/timeline/index'
|
5
|
-
import 'element-plus/es/components/timeline/style/index'
|
6
|
-
import 'element-plus/es/components/timeline-item/style/index'
|
7
5
|
import { useRoute } from 'vue-router'
|
8
6
|
|
9
7
|
const tag = computed(() => useRoute().params.tag)
|
package/pages/tags/index.vue
CHANGED
@@ -1,48 +1,6 @@
|
|
1
|
-
<
|
2
|
-
import { useRouter } from 'vue-router'
|
3
|
-
import { useHairyTags } from '../../composables'
|
4
|
-
|
5
|
-
const router = useRouter()
|
6
|
-
|
7
|
-
const { getTagStyle, tags } = useHairyTags({
|
8
|
-
primary: '#1bc9a6',
|
9
|
-
})
|
10
|
-
|
11
|
-
function displayTag(tag: string) {
|
12
|
-
router.push(`/tags/${tag}`)
|
13
|
-
}
|
14
|
-
</script>
|
15
|
-
|
16
|
-
<template>
|
17
|
-
<div class="min-h-59vh flex-center flex-col">
|
18
|
-
<div text="center" class="text-size-2.5em pt-10 mb-5">
|
19
|
-
目前共计 {{ Array.from(tags).length }} 个标签
|
20
|
-
</div>
|
21
|
-
<div text="center" class="max-w-7xl flex flex-wrap justify-center items-center gap-2">
|
22
|
-
<a
|
23
|
-
v-for="[key, tag] in Array.from(tags).sort()"
|
24
|
-
:key="key" class="post-tag cursor-pointer"
|
25
|
-
:style="getTagStyle(tag.count)"
|
26
|
-
p="1"
|
27
|
-
@click="displayTag(key.toString())"
|
28
|
-
>
|
29
|
-
{{ key }}
|
30
|
-
</a>
|
31
|
-
</div>
|
32
|
-
</div>
|
33
|
-
</template>
|
1
|
+
<template></template>
|
34
2
|
|
35
3
|
<route lang="yaml">
|
36
4
|
meta:
|
37
5
|
layout: tags
|
38
6
|
</route>
|
39
|
-
|
40
|
-
<style lang="scss" scoped>
|
41
|
-
a {
|
42
|
-
color: var(--yun-tag-color);
|
43
|
-
&:hover {
|
44
|
-
--un-text-opacity: 1;
|
45
|
-
color: var(--hy-c-primary-dark);
|
46
|
-
}
|
47
|
-
}
|
48
|
-
</style>
|