valaxy-theme-yun 0.5.0 → 0.6.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.
@@ -4,7 +4,7 @@ import docsearch from '@docsearch/js'
4
4
  import type { DocSearchHit } from '@docsearch/react/dist/esm/types'
5
5
  import { onMounted } from 'vue'
6
6
  import type { AlgoliaSearchOptions } from 'valaxy'
7
- import { useConfig } from 'valaxy/client'
7
+ import { useConfig } from 'valaxy'
8
8
  import { useRoute, useRouter } from 'vue-router'
9
9
 
10
10
  const router = useRouter()
@@ -87,7 +87,7 @@ function initialize(userOptions: AlgoliaSearchOptions) {
87
87
  if (route.path !== relativeHit)
88
88
  event.preventDefault()
89
89
 
90
- router.go(relativeHit)
90
+ router.push(relativeHit)
91
91
  },
92
92
  children,
93
93
  },
@@ -0,0 +1,74 @@
1
+ <script lang="ts" setup>
2
+ import { useI18n } from 'vue-i18n'
3
+ import type { Post } from 'valaxy'
4
+ import { useAppStore } from 'valaxy/client/stores/app'
5
+ defineProps<{ frontmatter: Post }>()
6
+ const { t } = useI18n()
7
+
8
+ const app = useAppStore()
9
+ </script>
10
+
11
+ <template>
12
+ <button
13
+ class="xl:hidden toc-btn shadow fixed yun-icon-btn z-350"
14
+ opacity="75" right="2" bottom="19"
15
+ @click="app.toggleRightSidebar()"
16
+ >
17
+ <div i-ri-file-list-line />
18
+ </button>
19
+
20
+ <ValaxyOverlay :show="app.isRightSidebarOpen" @click="app.toggleRightSidebar()" />
21
+
22
+ <aside class="right-sidebar fixed va-card" :class="app.isRightSidebarOpen && 'open'" m="l-4" text="center">
23
+ <h2 v-if="frontmatter.toc !== false" m="t-6 b-2" font="serif black">
24
+ {{ t('sidebar.toc') }}
25
+ </h2>
26
+
27
+ <div class="right-sidebar-container">
28
+ <!-- <ValaxyToc v-if="frontmatter.toc !== false" /> -->
29
+ <YunToc v-if="frontmatter.toc !== false" />
30
+
31
+ <div v-if="$slots.custom" class="custom-container">
32
+ <slot name="custom" />
33
+ </div>
34
+ </div>
35
+ </aside>
36
+ </template>
37
+
38
+ <style lang="scss">
39
+ @use '~/styles/mixins' as *;
40
+
41
+ @include xl {
42
+ .right-sidebar {
43
+ transform: translateX(0) !important;
44
+ }
45
+ }
46
+
47
+ .right-sidebar {
48
+ width: var(--va-sidebar-width-mobile);
49
+
50
+ position: fixed;
51
+ top: 0;
52
+ bottom: 0;
53
+ right: 0;
54
+
55
+ transform: translateX(100%);
56
+
57
+ transition: box-shadow var(--va-transition-duration),
58
+ background-color var(--va-transition-duration), opacity 0.25s,
59
+ transform var(--va-transition-duration) cubic-bezier(0.19, 1, 0.22, 1);
60
+
61
+ &.open {
62
+ z-index: 10;
63
+ transform: translateX(0);
64
+ }
65
+ }
66
+ .right-sidebar-container {
67
+ top: 1rem;
68
+ }
69
+
70
+ .toc-btn {
71
+ color: var(--va-c-primary);
72
+ background-color: white;
73
+ }
74
+ </style>
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import { CSSProperties, computed } from 'vue'
9
- import { useThemeConfig } from 'valaxy/client'
9
+ import { useThemeConfig } from 'valaxy'
10
10
  import { random } from '~/utils'
11
11
  const themeConfig = useThemeConfig()
12
12
 
@@ -1,6 +1,6 @@
1
1
  <script setup lang="ts">
2
2
  // export layouts/base.vue as components
3
- import { useThemeConfig } from 'valaxy/client'
3
+ import { useThemeConfig } from 'valaxy'
4
4
  import Base from '../layouts/base.vue'
5
5
 
6
6
  const themeConfig = useThemeConfig()
@@ -1,5 +1,11 @@
1
+ <script lang="ts" setup>
2
+ defineProps<{ cover?: string }>()
3
+ </script>
4
+
1
5
  <template>
2
6
  <div class="yun-card">
7
+ <img v-if="cover" class="object-cover" h="64 md:sm" w="full" :src="cover">
8
+
3
9
  <div v-if="$slots.header" class="yun-card-header">
4
10
  <header>
5
11
  <slot name="header" />
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" setup>
2
- import type { Categories } from 'valaxy/client'
2
+ import type { Categories } from 'valaxy'
3
3
  import { ref } from 'vue'
4
4
 
5
5
  const props = withDefaults(defineProps<{
@@ -1,8 +1,7 @@
1
1
  <script lang="ts" setup>
2
2
  import { ref } from 'vue'
3
- import type { Post } from 'valaxy'
4
- import type { Category } from 'valaxy/client'
5
- import { isParentCategory } from 'valaxy/client'
3
+ import type { Category, Post } from 'valaxy'
4
+ import { isParentCategory } from 'valaxy'
6
5
  import { useI18n } from 'vue-i18n'
7
6
 
8
7
  const props = withDefaults(defineProps<{
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" setup>
2
- import { useConfig } from 'valaxy/client'
2
+ import { useConfig } from 'valaxy'
3
3
  import { useRouter } from 'vue-router'
4
4
 
5
5
  const config = useConfig()
@@ -7,7 +7,7 @@ defineProps<{
7
7
  </script>
8
8
 
9
9
  <template>
10
- <header class="post-header">
10
+ <header class="post-header" m="t-4">
11
11
  <h1 class="post-title" p="2" text="2xl center" font="serif black" :style="`color:${color}`">
12
12
  <div v-if="icon" class="icon" m="r-1" inline-flex :class="icon" />
13
13
  <span>{{ title }}</span>
@@ -1,7 +1,7 @@
1
1
  <script lang="ts" setup>
2
2
  import { computed, ref, watch } from 'vue'
3
3
  import type { Post } from 'valaxy'
4
- import { formatDate, sortByDate } from 'valaxy/client'
4
+ import { formatDate, sortByDate } from 'valaxy'
5
5
  import { useI18n } from 'vue-i18n'
6
6
 
7
7
  const props = defineProps<{
@@ -1,7 +1,7 @@
1
1
  <script lang="ts" setup>
2
2
  import type { Post } from 'valaxy'
3
3
  import { useI18n } from 'vue-i18n'
4
- import { formatDate } from 'valaxy/client'
4
+ import { formatDate } from 'valaxy'
5
5
 
6
6
  defineProps<{
7
7
  frontmatter: Post
@@ -1,6 +1,6 @@
1
1
  <script lang="ts" setup>
2
2
  import { onMounted, ref } from 'vue'
3
- import { useThemeConfig } from 'valaxy/client'
3
+ import { useThemeConfig } from 'valaxy'
4
4
 
5
5
  const themeConfig = useThemeConfig()
6
6
 
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" setup>
2
- import { useThemeConfig } from 'valaxy/client'
2
+ import { useThemeConfig } from 'valaxy'
3
3
  const themeConfig = useThemeConfig()
4
4
  </script>
5
5
 
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" setup>
2
- import { useCategory, usePostList, useTag, useThemeConfig } from 'valaxy/client'
2
+ import { useCategory, usePostList, useTag, useThemeConfig } from 'valaxy'
3
3
  import { useI18n } from 'vue-i18n'
4
4
 
5
5
  const { t } = useI18n()
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" setup>
2
- import { useConfig } from 'valaxy/client'
2
+ import { useConfig } from 'valaxy'
3
3
 
4
4
  const config = useConfig()
5
5
  </script>
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" setup>
2
- import { useConfig } from 'valaxy/client'
2
+ import { useConfig } from 'valaxy'
3
3
  import { ref } from 'vue'
4
4
  import { useI18n } from 'vue-i18n'
5
5
  const { t } = useI18n()
@@ -0,0 +1,154 @@
1
+ <script setup lang="ts">
2
+ import { computed, ref } from 'vue'
3
+ import { useRoute } from 'vue-router'
4
+ import { useI18n } from 'vue-i18n'
5
+ import { useFrontmatter } from '~/composables'
6
+ import {
7
+ resolveHeaders,
8
+ useActiveAnchor,
9
+ useOutline,
10
+ } from '~/composables/outline'
11
+ import { useThemeConfig } from '~/config'
12
+
13
+ const route = useRoute()
14
+ const frontmatter = useFrontmatter()
15
+ const themeConfig = useThemeConfig()
16
+
17
+ const { hasOutline } = useOutline()
18
+
19
+ const { locale } = useI18n()
20
+ const container = ref()
21
+ const marker = ref()
22
+
23
+ useActiveAnchor(container, marker)
24
+
25
+ const resolvedHeaders = computed(() => {
26
+ return resolveHeaders(route.meta.headers || [])
27
+ })
28
+
29
+ function handleClick({ target: el }: Event) {
30
+ const id = `#${(el as HTMLAnchorElement).href!.split('#')[1]}`
31
+ const heading = document.querySelector(decodeURIComponent(id)) as HTMLAnchorElement
32
+ heading?.focus()
33
+ }
34
+ </script>
35
+
36
+ <template>
37
+ <div ref="container" class="VPDocAsideOutline" :class="{ 'has-outline': hasOutline }">
38
+ <div class="content">
39
+ <div class="outline-title">
40
+ {{ themeConfig.outlineTitle || 'On this page' }}
41
+ </div>
42
+
43
+ <div ref="marker" class="outline-marker" />
44
+
45
+ <nav aria-labelledby="doc-outline-aria-label">
46
+ <span id="doc-outline-aria-label" class="visually-hidden">
47
+ Table of Contents for current page
48
+ </span>
49
+
50
+ <ul class="root va-toc">
51
+ <li
52
+ v-for="{ text, link, children, hidden, lang } in resolvedHeaders"
53
+ v-show="!hidden"
54
+ :key="link"
55
+ class="va-toc-item"
56
+ :lang="lang || locale"
57
+ >
58
+ <a class="outline-link" :href="link" @click="handleClick">
59
+ {{ text }}
60
+ </a>
61
+ <ul v-if="children && frontmatter.outline === 'deep'">
62
+ <li v-for="{ text, link, hidden } in children" v-show="!hidden" :key="link" :lang="lang || locale">
63
+ <a class="outline-link nested" :href="link" @click="handleClick">
64
+ {{ text }}
65
+ </a>
66
+ </li>
67
+ </ul>
68
+ </li>
69
+ </ul>
70
+ </nav>
71
+ </div>
72
+ </div>
73
+ </template>
74
+
75
+ <style lang="scss" scoped>
76
+ .va-toc {
77
+ text-align: left;
78
+
79
+ .va-toc-item {
80
+ color: var(--va-c-text-light);
81
+ }
82
+ }
83
+
84
+ .VPDocAsideOutline {
85
+ display: none;
86
+ }
87
+
88
+ .VPDocAsideOutline.has-outline {
89
+ display: block;
90
+ }
91
+
92
+ .content {
93
+ position: relative;
94
+ padding-left: 16px;
95
+ font-size: 14px;
96
+ text-align: left;
97
+ }
98
+
99
+ .outline-marker {
100
+ position: absolute;
101
+ top: 32px;
102
+ left: -2px;
103
+ z-index: 0;
104
+ opacity: 0;
105
+ width: 4px;
106
+ height: 18px;
107
+ background-color: var(--va-c-brand);
108
+ transition: top 0.25s cubic-bezier(0, 1, 0.5, 1), background-color 0.5s, opacity 0.25s;
109
+ border-top-right-radius: 2px;
110
+ border-bottom-right-radius: 2px;
111
+ }
112
+
113
+ .outline-title {
114
+ letter-spacing: 0.4px;
115
+ line-height: 28px;
116
+ font-size: 14px;
117
+ font-weight: 600;
118
+ }
119
+
120
+ .outline-link {
121
+ display: block;
122
+ line-height: 28px;
123
+ color: var(--vp-c-text-2);
124
+ white-space: nowrap;
125
+ overflow: hidden;
126
+ text-overflow: ellipsis;
127
+ transition: color 0.5s;
128
+ }
129
+
130
+ .outline-link:hover,
131
+ .outline-link.active {
132
+ color: var(--va-c-brand);
133
+ transition: color 0.25s;
134
+ }
135
+
136
+ .outline-link.nested {
137
+ padding-left: 13px;
138
+ }
139
+
140
+ .root {
141
+ position: relative;
142
+ z-index: 1;
143
+ }
144
+
145
+ .visually-hidden {
146
+ position: absolute;
147
+ width: 1px;
148
+ height: 1px;
149
+ white-space: nowrap;
150
+ clip: rect(0 0 0 0);
151
+ clip-path: inset(50%);
152
+ overflow: hidden;
153
+ }
154
+ </style>
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" setup>
2
- import { useConfig, useTwikoo } from 'valaxy/client'
2
+ import { useConfig, useTwikoo } from 'valaxy'
3
3
 
4
4
  const config = useConfig()
5
5
  useTwikoo(config.value.comment.twikoo)
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" setup>
2
- import { useConfig, useWaline } from 'valaxy/client'
2
+ import { useConfig, useWaline } from 'valaxy'
3
3
 
4
4
  const config = useConfig()
5
5
  useWaline(config.value.comment.waline)
package/config/index.ts CHANGED
@@ -2,12 +2,19 @@ export const anonymousImage = 'https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/ava
2
2
 
3
3
  export namespace YunTheme {
4
4
  export type Config = ThemeConfig
5
+ export type Sidebar = any
5
6
  }
6
7
 
7
8
  /**
8
9
  * Theme Config
9
10
  */
10
11
  export interface ThemeConfig {
12
+ /**
13
+ * toc title
14
+ * @default 'On this page'
15
+ */
16
+ outlineTitle: string
17
+
11
18
  // for unocss
12
19
  safelist: string[]
13
20
  colors: {
@@ -56,6 +63,8 @@ export interface ThemeConfig {
56
63
  color: string
57
64
  }[]
58
65
 
66
+ sidebar: YunTheme.Sidebar
67
+
59
68
  /**
60
69
  * footer
61
70
  */
@@ -125,6 +134,7 @@ export type ThemeUserConfig = Partial<ThemeConfig>
125
134
  * Default Config
126
135
  */
127
136
  export const defaultThemeConfig: ThemeConfig = {
137
+ outlineTitle: 'On this page',
128
138
  safelist: ['i-ri-clipboard-line'],
129
139
  colors: {
130
140
  primary: '#0078E7',
@@ -151,6 +161,7 @@ export const defaultThemeConfig: ThemeConfig = {
151
161
 
152
162
  pages: [],
153
163
 
164
+ sidebar: null,
154
165
  footer: {
155
166
  since: 2022,
156
167
  icon: {
package/dist/index.d.ts CHANGED
@@ -3,11 +3,17 @@ import { Plugin } from 'vite';
3
3
  declare const anonymousImage = "https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/avatar/none.jpg";
4
4
  declare namespace YunTheme {
5
5
  type Config = ThemeConfig;
6
+ type Sidebar = any;
6
7
  }
7
8
  /**
8
9
  * Theme Config
9
10
  */
10
11
  interface ThemeConfig {
12
+ /**
13
+ * toc title
14
+ * @default 'On this page'
15
+ */
16
+ outlineTitle: string;
11
17
  safelist: string[];
12
18
  colors: {
13
19
  /**
@@ -50,6 +56,7 @@ interface ThemeConfig {
50
56
  icon: string;
51
57
  color: string;
52
58
  }[];
59
+ sidebar: YunTheme.Sidebar;
53
60
  /**
54
61
  * footer
55
62
  */
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var f="https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/avatar/none.jpg",n= exports.defaultThemeConfig ={safelist:["i-ri-clipboard-line"],colors:{primary:"#0078E7"},banner:{enable:!0,title:"\u4E91\u6E38\u541B\u7684\u5C0F\u7AD9"},bg_image:{enable:!0,url:"https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/bg/stars-timing-0-blur-30px.jpg",dark:"https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/bg/galaxy.jpg"},say:{enable:!0,api:"https://el-bot-api.vercel.app/api/words/young",hitokoto:{enable:!1,api:"https://v1.hitokoto.cn"}},pages:[],footer:{since:2022,icon:{name:"i-ri-cloud-line",animated:!0,color:"var(--va-c-primary)",url:"https://sponsors.yunyoujun.cn",title:"Sponsor YunYouJun"},powered:!0,beian:{enable:!1,icp:""}},types:{link:{color:"var(--va-c-primary)",icon:"i-ri-external-link-line"},bilibili:{color:"#FF8EB3",icon:"i-ri-bilibili-line"},douban:{color:"#007722",icon:"i-ri-douban-line"},github:{color:"var(--va-c-text)",icon:"i-ri-github-line"},"netease-cloud-music":{color:"#C10D0C",icon:"i-ri-netease-cloud-music-line"},notion:{color:"var(--va-c-text)",icon:"i-simple-icons-notion"},twitter:{color:"#1da1f2",icon:"i-ri-twitter-line"},wechat:{color:"#1AAD19",icon:"i-ri-wechat-2-line"},weibo:{color:"#E6162D",icon:"i-ri-weibo-line"},yuque:{color:"#25b864",icon:"i-ant-design-yuque-outlined"},zhihu:{color:"#0084FF",icon:"i-ri-zhihu-line"}},menu:{custom:{title:"button.about",icon:"i-ri-clipboard-line",url:"/about"}}};n.safelist=n.safelist.concat(m(n));function m(i){var t,r,a,l,s,c,u,p;let e=[],o=i.types;if(o)for(let g in o)e.push(o[g].icon);return(r=(t=i.footer)==null?void 0:t.icon)!=null&&r.name&&e.push((l=(a=i.footer)==null?void 0:a.icon)==null?void 0:l.name),(c=(s=i.menu)==null?void 0:s.custom)!=null&&c.icon&&e.push((p=(u=i.menu)==null?void 0:u.custom)==null?void 0:p.icon),e}function b(i=n){return{name:"valaxy-theme-yun",enforce:"pre",config(){var e;return{css:{preprocessorOptions:{scss:{additionalData:`$c-primary: ${((e=i.colors)==null?void 0:e.primary)||"#0078E7"} !default;`}}}}}}}var y=b;exports.anonymousImage = f; exports.default = y; exports.defaultThemeConfig = n; exports.generateSafelist = m; exports.yunPlugin = b;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var f="https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/avatar/none.jpg",n= exports.defaultThemeConfig ={outlineTitle:"On this page",safelist:["i-ri-clipboard-line"],colors:{primary:"#0078E7"},banner:{enable:!0,title:"\u4E91\u6E38\u541B\u7684\u5C0F\u7AD9"},bg_image:{enable:!0,url:"https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/bg/stars-timing-0-blur-30px.jpg",dark:"https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/bg/galaxy.jpg"},say:{enable:!0,api:"https://el-bot-api.vercel.app/api/words/young",hitokoto:{enable:!1,api:"https://v1.hitokoto.cn"}},pages:[],sidebar:null,footer:{since:2022,icon:{name:"i-ri-cloud-line",animated:!0,color:"var(--va-c-primary)",url:"https://sponsors.yunyoujun.cn",title:"Sponsor YunYouJun"},powered:!0,beian:{enable:!1,icp:""}},types:{link:{color:"var(--va-c-primary)",icon:"i-ri-external-link-line"},bilibili:{color:"#FF8EB3",icon:"i-ri-bilibili-line"},douban:{color:"#007722",icon:"i-ri-douban-line"},github:{color:"var(--va-c-text)",icon:"i-ri-github-line"},"netease-cloud-music":{color:"#C10D0C",icon:"i-ri-netease-cloud-music-line"},notion:{color:"var(--va-c-text)",icon:"i-simple-icons-notion"},twitter:{color:"#1da1f2",icon:"i-ri-twitter-line"},wechat:{color:"#1AAD19",icon:"i-ri-wechat-2-line"},weibo:{color:"#E6162D",icon:"i-ri-weibo-line"},yuque:{color:"#25b864",icon:"i-ant-design-yuque-outlined"},zhihu:{color:"#0084FF",icon:"i-ri-zhihu-line"}},menu:{custom:{title:"button.about",icon:"i-ri-clipboard-line",url:"/about"}}};n.safelist=n.safelist.concat(m(n));function m(e){var t,r,a,l,s,c,u,p;let i=[],o=e.types;if(o)for(let g in o)i.push(o[g].icon);return(r=(t=e.footer)==null?void 0:t.icon)!=null&&r.name&&i.push((l=(a=e.footer)==null?void 0:a.icon)==null?void 0:l.name),(c=(s=e.menu)==null?void 0:s.custom)!=null&&c.icon&&i.push((p=(u=e.menu)==null?void 0:u.custom)==null?void 0:p.icon),i}function b(e=n){return{name:"valaxy-theme-yun",enforce:"pre",config(){var i;return{css:{preprocessorOptions:{scss:{additionalData:`$c-primary: ${((i=e.colors)==null?void 0:i.primary)||"#0078E7"} !default;`}}}}}}}var y=b;exports.anonymousImage = f; exports.default = y; exports.defaultThemeConfig = n; exports.generateSafelist = m; exports.yunPlugin = b;
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- var f="https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/avatar/none.jpg",n={safelist:["i-ri-clipboard-line"],colors:{primary:"#0078E7"},banner:{enable:!0,title:"\u4E91\u6E38\u541B\u7684\u5C0F\u7AD9"},bg_image:{enable:!0,url:"https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/bg/stars-timing-0-blur-30px.jpg",dark:"https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/bg/galaxy.jpg"},say:{enable:!0,api:"https://el-bot-api.vercel.app/api/words/young",hitokoto:{enable:!1,api:"https://v1.hitokoto.cn"}},pages:[],footer:{since:2022,icon:{name:"i-ri-cloud-line",animated:!0,color:"var(--va-c-primary)",url:"https://sponsors.yunyoujun.cn",title:"Sponsor YunYouJun"},powered:!0,beian:{enable:!1,icp:""}},types:{link:{color:"var(--va-c-primary)",icon:"i-ri-external-link-line"},bilibili:{color:"#FF8EB3",icon:"i-ri-bilibili-line"},douban:{color:"#007722",icon:"i-ri-douban-line"},github:{color:"var(--va-c-text)",icon:"i-ri-github-line"},"netease-cloud-music":{color:"#C10D0C",icon:"i-ri-netease-cloud-music-line"},notion:{color:"var(--va-c-text)",icon:"i-simple-icons-notion"},twitter:{color:"#1da1f2",icon:"i-ri-twitter-line"},wechat:{color:"#1AAD19",icon:"i-ri-wechat-2-line"},weibo:{color:"#E6162D",icon:"i-ri-weibo-line"},yuque:{color:"#25b864",icon:"i-ant-design-yuque-outlined"},zhihu:{color:"#0084FF",icon:"i-ri-zhihu-line"}},menu:{custom:{title:"button.about",icon:"i-ri-clipboard-line",url:"/about"}}};n.safelist=n.safelist.concat(m(n));function m(i){var t,r,a,l,s,c,u,p;let e=[],o=i.types;if(o)for(let g in o)e.push(o[g].icon);return(r=(t=i.footer)==null?void 0:t.icon)!=null&&r.name&&e.push((l=(a=i.footer)==null?void 0:a.icon)==null?void 0:l.name),(c=(s=i.menu)==null?void 0:s.custom)!=null&&c.icon&&e.push((p=(u=i.menu)==null?void 0:u.custom)==null?void 0:p.icon),e}function b(i=n){return{name:"valaxy-theme-yun",enforce:"pre",config(){var e;return{css:{preprocessorOptions:{scss:{additionalData:`$c-primary: ${((e=i.colors)==null?void 0:e.primary)||"#0078E7"} !default;`}}}}}}}var y=b;export{f as anonymousImage,y as default,n as defaultThemeConfig,m as generateSafelist,b as yunPlugin};
1
+ var f="https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/avatar/none.jpg",n={outlineTitle:"On this page",safelist:["i-ri-clipboard-line"],colors:{primary:"#0078E7"},banner:{enable:!0,title:"\u4E91\u6E38\u541B\u7684\u5C0F\u7AD9"},bg_image:{enable:!0,url:"https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/bg/stars-timing-0-blur-30px.jpg",dark:"https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/bg/galaxy.jpg"},say:{enable:!0,api:"https://el-bot-api.vercel.app/api/words/young",hitokoto:{enable:!1,api:"https://v1.hitokoto.cn"}},pages:[],sidebar:null,footer:{since:2022,icon:{name:"i-ri-cloud-line",animated:!0,color:"var(--va-c-primary)",url:"https://sponsors.yunyoujun.cn",title:"Sponsor YunYouJun"},powered:!0,beian:{enable:!1,icp:""}},types:{link:{color:"var(--va-c-primary)",icon:"i-ri-external-link-line"},bilibili:{color:"#FF8EB3",icon:"i-ri-bilibili-line"},douban:{color:"#007722",icon:"i-ri-douban-line"},github:{color:"var(--va-c-text)",icon:"i-ri-github-line"},"netease-cloud-music":{color:"#C10D0C",icon:"i-ri-netease-cloud-music-line"},notion:{color:"var(--va-c-text)",icon:"i-simple-icons-notion"},twitter:{color:"#1da1f2",icon:"i-ri-twitter-line"},wechat:{color:"#1AAD19",icon:"i-ri-wechat-2-line"},weibo:{color:"#E6162D",icon:"i-ri-weibo-line"},yuque:{color:"#25b864",icon:"i-ant-design-yuque-outlined"},zhihu:{color:"#0084FF",icon:"i-ri-zhihu-line"}},menu:{custom:{title:"button.about",icon:"i-ri-clipboard-line",url:"/about"}}};n.safelist=n.safelist.concat(m(n));function m(e){var t,r,a,l,s,c,u,p;let i=[],o=e.types;if(o)for(let g in o)i.push(o[g].icon);return(r=(t=e.footer)==null?void 0:t.icon)!=null&&r.name&&i.push((l=(a=e.footer)==null?void 0:a.icon)==null?void 0:l.name),(c=(s=e.menu)==null?void 0:s.custom)!=null&&c.icon&&i.push((p=(u=e.menu)==null?void 0:u.custom)==null?void 0:p.icon),i}function b(e=n){return{name:"valaxy-theme-yun",enforce:"pre",config(){var i;return{css:{preprocessorOptions:{scss:{additionalData:`$c-primary: ${((i=e.colors)==null?void 0:i.primary)||"#0078E7"} !default;`}}}}}}}var y=b;export{f as anonymousImage,y as default,n as defaultThemeConfig,m as generateSafelist,b as yunPlugin};
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" setup>
2
- import { useFrontmatter, usePostList, usePostTitle } from 'valaxy/client'
2
+ import { useFrontmatter, usePostList, usePostTitle } from 'valaxy'
3
3
  import { useI18n } from 'vue-i18n'
4
4
 
5
5
  const { t } = useI18n()
package/layouts/base.vue CHANGED
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" setup>
2
- import { useConfig, useFrontmatter, usePostProperty, usePostTitle } from 'valaxy/client'
2
+ import { useConfig, useFrontmatter, usePostProperty, usePostTitle } from 'valaxy'
3
3
  const frontmatter = useFrontmatter()
4
4
 
5
5
  const config = useConfig()
@@ -20,14 +20,17 @@ const title = usePostTitle(frontmatter)
20
20
 
21
21
  <main class="yun-main flex lt-md:ml-0">
22
22
  <div flex="~ 1 col" w="full" p="l-4 lt-md:0" class="content">
23
- <YunCard m="0" p="4" class="relative sm:p-6 lg:px-12 xl:px-16" :style="styles">
23
+ <YunCard :cover="frontmatter.cover" m="0" class="relative" :style="styles">
24
24
  <slot name="header">
25
25
  <YunPageHeader :title="title" :icon="frontmatter.icon || icon" :color="frontmatter.color || color" :cover="frontmatter.cover" />
26
26
  </slot>
27
+
27
28
  <template #content>
28
- <slot name="content">
29
- <router-view />
30
- </slot>
29
+ <div p="x-4 b-8" class="sm:px-6 lg:px-12 xl:px-16">
30
+ <slot name="content">
31
+ <router-view />
32
+ </slot>
33
+ </div>
31
34
  </template>
32
35
  </YunCard>
33
36
 
@@ -50,11 +53,13 @@ const title = usePostTitle(frontmatter)
50
53
  </div>
51
54
 
52
55
  <slot name="right-sidebar">
53
- <ValaxyRightSidebar :frontmatter="frontmatter">
56
+ <!-- <ValaxyRightSidebar > -->
57
+ <YunAside :frontmatter="frontmatter">
54
58
  <template #custom>
55
59
  <slot name="right-custom" />
56
60
  </template>
57
- </ValaxyRightSidebar>
61
+ <!-- </ValaxyRightSidebar> -->
62
+ </YunAside>
58
63
  </slot>
59
64
  </main>
60
65
 
@@ -1,6 +1,6 @@
1
1
  <script lang="ts" setup>
2
2
  import { computed, ref } from 'vue'
3
- import { useCategory, useFrontmatter, useInvisibleElement, usePostList, usePostTitle } from 'valaxy/client'
3
+ import { useCategory, useFrontmatter, useInvisibleElement, usePostList, usePostTitle } from 'valaxy'
4
4
  import { useI18n } from 'vue-i18n'
5
5
  import { useRoute, useRouter } from 'vue-router'
6
6
 
@@ -63,7 +63,7 @@ const title = usePostTitle(frontmatter)
63
63
  </template>
64
64
 
65
65
  <YunCard v-if="curCategory" ref="collapse" m="t-4" w="full">
66
- <YunPageHeader m="t-4" :title="curCategory === 'Uncategorized' ? t('category.uncategorized') : curCategory" icon="i-ri-folder-open-line" />
66
+ <YunPageHeader :title="curCategory === 'Uncategorized' ? t('category.uncategorized') : curCategory" icon="i-ri-folder-open-line" />
67
67
  <YunPostCollapse w="full" m="b-4" p="x-20 lt-sm:x-5" :posts="posts" />
68
68
  </YunCard>
69
69
  </YunBase>
package/layouts/home.vue CHANGED
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" setup>
2
- import { useConfig } from 'valaxy/client'
2
+ import { useConfig } from 'valaxy'
3
3
  import { useLayout } from '~/composables'
4
4
 
5
5
  import { useAppStore } from '~/stores/app'
package/layouts/post.vue CHANGED
@@ -1,6 +1,6 @@
1
1
  <script lang="ts" setup>
2
2
  import { computed } from 'vue'
3
- import { useConfig, useFrontmatter, useFullUrl } from 'valaxy/client'
3
+ import { useConfig, useFrontmatter, useFullUrl } from 'valaxy'
4
4
 
5
5
  const config = useConfig()
6
6
  const frontmatter = useFrontmatter()
package/layouts/tags.vue CHANGED
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" setup>
2
- import { useFrontmatter, useInvisibleElement, usePostList, usePostTitle, useTags, useThemeConfig } from 'valaxy/client'
2
+ import { useFrontmatter, useInvisibleElement, usePostList, usePostTitle, useTags, useThemeConfig } from 'valaxy'
3
3
  import { useI18n } from 'vue-i18n'
4
4
  import { computed, ref } from 'vue'
5
5
  import { useRoute, useRouter } from 'vue-router'
@@ -71,7 +71,7 @@ const title = usePostTitle(frontmatter)
71
71
  </template>
72
72
 
73
73
  <YunCard v-if="curTag" ref="collapse" m="t-4" w="full">
74
- <YunPageHeader m="t-4" :title="curTag" icon="i-ri-hashtag" />
74
+ <YunPageHeader :title="curTag" icon="i-ri-hashtag" />
75
75
  <YunPostCollapse w="full" m="b-4" p="x-20 lt-sm:x-5" :posts="posts" />
76
76
  </YunCard>
77
77
  </YunBase>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "valaxy-theme-yun",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "author": {
5
5
  "email": "me@yunyoujun.cn",
6
6
  "name": "YunYouJun",
@@ -15,10 +15,10 @@
15
15
  "types": "dist/index.d.ts",
16
16
  "dependencies": {
17
17
  "@iconify-json/ant-design": "^1.1.2",
18
- "@iconify-json/simple-icons": "^1.1.15"
18
+ "@iconify-json/simple-icons": "^1.1.16"
19
19
  },
20
20
  "devDependencies": {
21
- "valaxy": "0.5.0"
21
+ "valaxy": "0.6.0"
22
22
  },
23
23
  "scripts": {
24
24
  "build": "tsup",