@jet-w/astro-blog 0.2.0 → 0.2.2

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.
Files changed (121) hide show
  1. package/dist/{chunk-HVQKQN6B.js → chunk-6D3XRDNY.js} +1 -1
  2. package/dist/{chunk-ATRISB7B.js → chunk-A2E2VSAQ.js} +43 -3
  3. package/dist/chunk-DAH2XP4W.js +154 -0
  4. package/dist/{chunk-AZHCNNAC.js → chunk-PG43JO4O.js} +1 -153
  5. package/dist/chunk-PZICDGJG.js +69 -0
  6. package/dist/chunk-Z3O3JK56.js +186 -0
  7. package/dist/config/index.d.ts +2 -2
  8. package/dist/config/index.js +9 -7
  9. package/dist/{i18n-5H4W145i.d.ts → i18n-DYYPTq4o.d.ts} +21 -1
  10. package/dist/index.d.ts +10 -184
  11. package/dist/index.js +37 -210
  12. package/dist/integration.d.ts +2 -2
  13. package/dist/integration.js +2 -2
  14. package/dist/{sidebar-Da-W_4Lr.d.ts → sidebar-DNdiCKBw.d.ts} +1 -1
  15. package/dist/utils/i18n.d.ts +133 -0
  16. package/dist/utils/i18n.js +49 -0
  17. package/dist/utils/sidebar.d.ts +1 -1
  18. package/dist/utils/useI18n.d.ts +74 -0
  19. package/dist/utils/useI18n.js +15 -0
  20. package/package.json +9 -1
  21. package/src/components/blog/FloatingToc.vue +11 -3
  22. package/src/components/blog/Hero.astro +17 -2
  23. package/src/components/blog/NavigationTabs.vue +46 -15
  24. package/src/components/blog/PostCard.astro +28 -10
  25. package/src/components/blog/RelatedPosts.astro +23 -7
  26. package/src/components/blog/TableOfContents.astro +10 -4
  27. package/src/components/blog/TagCloud.astro +4 -3
  28. package/src/components/home/FeaturedPostsSection.astro +22 -6
  29. package/src/components/home/QuickNavSection.astro +33 -4
  30. package/src/components/home/RecentPostsSection.astro +22 -6
  31. package/src/components/home/StatsSection.astro +24 -6
  32. package/src/components/layout/Header.astro +9 -5
  33. package/src/components/layout/Sidebar.astro +14 -11
  34. package/src/components/ui/SearchBox.vue +13 -5
  35. package/src/components/ui/SearchInterface.vue +49 -25
  36. package/src/pages/archives/[year]/[month].astro +36 -17
  37. package/src/pages/archives/index.astro +36 -20
  38. package/src/pages/categories/[category].astro +33 -16
  39. package/src/pages/categories/index.astro +37 -14
  40. package/src/pages/posts/[...slug].astro +125 -18
  41. package/src/pages/posts/index.astro +59 -37
  42. package/src/pages/posts/page/[page].astro +65 -27
  43. package/src/pages/search.astro +50 -14
  44. package/src/pages/slides/index.astro +25 -6
  45. package/src/pages/tags/[tag].astro +32 -15
  46. package/src/pages/tags/index.astro +39 -16
  47. package/src/plugins/remark-containers.mjs +351 -322
  48. package/src/plugins/remark-protect-code.mjs +69 -0
  49. package/src/styles/global.css +35 -1
  50. package/templates/default/.claude/ralph-loop.local.md +48 -0
  51. package/templates/default/astro.config.mjs +13 -4
  52. package/templates/default/content/posts/blog_docs_en/{get-started → 01.get-started}/01-intro.md +1 -1
  53. package/templates/default/content/posts/blog_docs_en/{get-started → 01.get-started}/02-install.md +1 -1
  54. package/templates/default/content/posts/blog_docs_en/{get-started → 01.get-started}/03-create-post.md +1 -1
  55. package/templates/default/content/posts/blog_docs_en/{get-started → 01.get-started}/04-structure.md +1 -1
  56. package/templates/default/content/posts/blog_docs_en/01.get-started/05-deploy.md +208 -0
  57. package/templates/default/content/posts/blog_docs_en/{get-started → 01.get-started}/README.md +1 -1
  58. package/templates/default/content/posts/blog_docs_en/02.guide/02-containers.md +245 -0
  59. package/templates/default/content/posts/blog_docs_en/{guide/markdown → 02.guide}/03-code-blocks.md +2 -1
  60. package/templates/default/content/posts/blog_docs_en/{guide/features/01-mermaid.md → 02.guide/03-mermaid.md} +1 -1
  61. package/templates/default/content/posts/blog_docs_en/{guide/features → 02.guide}/04-icons.md +4 -2
  62. package/templates/default/content/posts/blog_docs_en/{guide/features/02-latex.md → 02.guide/06-latex.md} +1 -1
  63. package/templates/default/content/posts/blog_docs_en/{guide/features/03-video.md → 02.guide/07-video.md} +1 -1
  64. package/templates/default/content/posts/blog_docs_en/02.guide/08-slides.md +359 -0
  65. package/templates/default/content/posts/blog_docs_en/{guide/markdown → 02.guide}/README.md +22 -3
  66. package/templates/default/content/posts/blog_docs_en/{config → 03.config}/01-site.md +1 -1
  67. package/templates/default/content/posts/blog_docs_en/{config → 03.config}/02-sidebar.md +1 -1
  68. package/templates/default/content/posts/blog_docs_en/{config → 03.config}/03-i18n.md +88 -24
  69. package/templates/default/content/posts/blog_docs_en/{config → 03.config}/README.md +1 -1
  70. package/templates/default/content/posts/blog_docs_en/README.md +2 -1
  71. package/templates/default/content/posts/blog_docs_zh/01.get-started/01-intro.md +81 -0
  72. package/templates/default/content/posts/blog_docs_zh/01.get-started/02-install.md +137 -0
  73. package/templates/default/content/posts/blog_docs_zh/01.get-started/03-create-post.md +176 -0
  74. package/templates/default/content/posts/blog_docs_zh/01.get-started/04-structure.md +173 -0
  75. package/templates/default/content/posts/blog_docs_zh/01.get-started/05-deploy.md +208 -0
  76. package/templates/default/content/posts/blog_docs_zh/01.get-started/README.md +52 -0
  77. package/templates/default/content/posts/blog_docs_zh/02.guide/02-containers.md +245 -0
  78. package/templates/default/content/posts/blog_docs_zh/02.guide/03-code-blocks.md +206 -0
  79. package/templates/default/content/posts/blog_docs_zh/02.guide/03-mermaid.md +194 -0
  80. package/templates/default/content/posts/blog_docs_zh/02.guide/04-icons.md +229 -0
  81. package/templates/default/content/posts/blog_docs_zh/02.guide/06-latex.md +233 -0
  82. package/templates/default/content/posts/blog_docs_zh/02.guide/07-video.md +184 -0
  83. package/templates/default/content/posts/blog_docs_zh/02.guide/08-slides.md +359 -0
  84. package/templates/default/content/posts/blog_docs_zh/02.guide/README.md +213 -0
  85. package/templates/default/content/posts/blog_docs_zh/03.config/01-site.md +208 -0
  86. package/templates/default/content/posts/blog_docs_zh/03.config/02-sidebar.md +240 -0
  87. package/templates/default/content/posts/blog_docs_zh/03.config/03-i18n.md +348 -0
  88. package/templates/default/content/posts/blog_docs_zh/03.config/README.md +85 -0
  89. package/templates/default/content/posts/blog_docs_zh/README.md +78 -0
  90. package/templates/default/package.dev.json +31 -0
  91. package/templates/default/package.json +1 -1
  92. package/templates/default/src/config/locales/en/index.ts +5 -1
  93. package/templates/default/src/config/locales/en/menu.ts +3 -1
  94. package/templates/default/src/config/locales/en/sidebar.ts +18 -2
  95. package/templates/default/src/config/locales/en/site.ts +1 -1
  96. package/templates/default/src/config/locales/en/ui.ts +29 -0
  97. package/templates/default/src/config/locales/zh-CN/index.ts +5 -1
  98. package/templates/default/src/config/locales/zh-CN/menu.ts +7 -5
  99. package/templates/default/src/config/locales/zh-CN/sidebar.ts +22 -6
  100. package/templates/default/src/config/locales/zh-CN/site.ts +2 -2
  101. package/templates/default/src/config/locales/zh-CN/ui.ts +29 -0
  102. package/templates/default/src/config/site.ts +2 -2
  103. package/templates/default/src/content.config.ts +15 -3
  104. package/templates/default/content/posts/blog_docs/01-quick-start.md +0 -162
  105. package/templates/default/content/posts/blog_docs/02-frontmatter.md +0 -277
  106. package/templates/default/content/posts/blog_docs/03-markdown-basic.md +0 -350
  107. package/templates/default/content/posts/blog_docs/04-containers.md +0 -331
  108. package/templates/default/content/posts/blog_docs/05-code-blocks.md +0 -388
  109. package/templates/default/content/posts/blog_docs/06-mermaid.md +0 -431
  110. package/templates/default/content/posts/blog_docs/07-video.md +0 -243
  111. package/templates/default/content/posts/blog_docs/08-latex.md +0 -382
  112. package/templates/default/content/posts/blog_docs/09-icons.md +0 -326
  113. package/templates/default/content/posts/blog_docs/10-sidebar.md +0 -445
  114. package/templates/default/content/posts/blog_docs/11-config.md +0 -334
  115. package/templates/default/content/posts/blog_docs/12-i18n.md +0 -355
  116. package/templates/default/content/posts/blog_docs/12-slides.mdx +0 -552
  117. package/templates/default/content/posts/blog_docs/README.md +0 -152
  118. package/templates/default/content/posts/blog_docs_en/get-started/05-deploy.md +0 -197
  119. package/templates/default/content/posts/blog_docs_en/guide/README.md +0 -59
  120. package/templates/default/content/posts/blog_docs_en/guide/features/README.md +0 -51
  121. package/templates/default/content/posts/blog_docs_en/guide/markdown/02-containers.md +0 -226
@@ -0,0 +1,208 @@
1
+ ---
2
+ title: 站点设置
3
+ description: 配置站点的标题、描述和元数据
4
+ pubDate: 2025-01-01
5
+ author: jet-w
6
+ categories:
7
+ - 文档
8
+ tags:
9
+ - 配置
10
+ - 站点
11
+ ---
12
+
13
+ # 站点设置
14
+
15
+ 配置博客的基本信息和元数据。
16
+
17
+ ## 站点配置
18
+
19
+ ### 基本设置
20
+
21
+ 编辑 `src/config/site.ts`:
22
+
23
+ ```typescript
24
+ export const siteConfig = {
25
+ // 站点标题(显示在浏览器标签和头部)
26
+ title: '我的超棒博客',
27
+
28
+ // 站点描述(用于 SEO)
29
+ description: '一个关于 Web 开发和技术的博客',
30
+
31
+ // 作者名称
32
+ author: '张三',
33
+
34
+ // 作者头像(显示在头部和页脚)
35
+ avatar: '/images/avatar.jpg',
36
+
37
+ // 站点 URL(用于 SEO 和 RSS)
38
+ url: 'https://myblog.com',
39
+ };
40
+ ```
41
+
42
+ ### 多语言设置
43
+
44
+ 对于多语言站点,在语言文件夹中配置:
45
+
46
+ ```typescript
47
+ // src/config/locales/en/site.ts
48
+ export const site = {
49
+ title: 'My Blog',
50
+ description: 'A tech blog about web development',
51
+ };
52
+
53
+ // src/config/locales/zh-CN/site.ts
54
+ export const site = {
55
+ title: '我的博客',
56
+ description: '关于 Web 开发的技术博客',
57
+ };
58
+ ```
59
+
60
+ ## 导航菜单
61
+
62
+ ### 菜单配置
63
+
64
+ ```typescript
65
+ // src/config/locales/zh-CN/menu.ts
66
+ export const menu = [
67
+ { name: '首页', href: '/', icon: 'home' },
68
+ { name: '文章', href: '/posts', icon: 'posts' },
69
+ { name: '标签', href: '/tags', icon: 'tags' },
70
+ { name: '关于', href: '/about', icon: 'about' },
71
+ ];
72
+ ```
73
+
74
+ ### 可用图标
75
+
76
+ | 图标 | 名称 |
77
+ |------|------|
78
+ | 首页图标 | `home` |
79
+ | 文章图标 | `posts` |
80
+ | 标签图标 | `tags` |
81
+ | 分类图标 | `categories` |
82
+ | 归档图标 | `archives` |
83
+ | 幻灯片图标 | `slides` |
84
+ | 关于图标 | `about` |
85
+
86
+ ### 外部链接
87
+
88
+ ```typescript
89
+ {
90
+ name: 'GitHub',
91
+ href: 'https://github.com/username',
92
+ icon: 'github',
93
+ external: true // 在新标签页打开
94
+ }
95
+ ```
96
+
97
+ ## 社交链接
98
+
99
+ 在 `src/config/social.ts` 中配置社交媒体链接:
100
+
101
+ ```typescript
102
+ export const socialLinks = [
103
+ {
104
+ type: 'github',
105
+ url: 'https://github.com/username',
106
+ label: 'GitHub',
107
+ },
108
+ {
109
+ type: 'twitter',
110
+ url: 'https://twitter.com/username',
111
+ label: 'Twitter',
112
+ },
113
+ {
114
+ type: 'email',
115
+ url: 'mailto:hello@example.com',
116
+ label: '邮箱',
117
+ },
118
+ ];
119
+ ```
120
+
121
+ ### 支持的平台
122
+
123
+ | 类型 | 平台 |
124
+ |------|------|
125
+ | `github` | GitHub |
126
+ | `twitter` | Twitter/X |
127
+ | `linkedin` | LinkedIn |
128
+ | `email` | 邮箱 |
129
+ | `youtube` | YouTube |
130
+ | `discord` | Discord |
131
+ | `rss` | RSS 订阅 |
132
+
133
+ ## 页脚配置
134
+
135
+ ```typescript
136
+ // src/config/locales/zh-CN/footer.ts
137
+ export const footer = {
138
+ quickLinksTitle: '快速链接',
139
+ quickLinks: [
140
+ { name: '首页', href: '/' },
141
+ { name: '文章', href: '/posts' },
142
+ { name: '关于', href: '/about' },
143
+ ],
144
+ contactTitle: '联系方式',
145
+ };
146
+ ```
147
+
148
+ ## Astro 配置
149
+
150
+ `astro.config.mjs` 中的主要配置:
151
+
152
+ ```javascript
153
+ export default defineConfig({
154
+ // 你的站点 URL(RSS 和站点地图必需)
155
+ site: 'https://myblog.com',
156
+
157
+ // 如果不在根路径的基础路径
158
+ base: '/',
159
+
160
+ integrations: [
161
+ astroBlog({ i18n: i18nConfig }),
162
+ vue(),
163
+ tailwind(),
164
+ ],
165
+ });
166
+ ```
167
+
168
+ ## SEO 设置
169
+
170
+ SEO 通过以下方式配置:
171
+
172
+ 1. **站点配置** - 默认标题和描述
173
+ 2. **Frontmatter** - 每篇文章的标题和描述
174
+ 3. **自动生成** - Meta 标签、Open Graph、Twitter 卡片
175
+
176
+ ### 默认 SEO
177
+
178
+ ```typescript
179
+ // src/config/site.ts
180
+ export const defaultSEO = {
181
+ title: '我的博客',
182
+ description: '页面的默认描述',
183
+ image: '/images/og-default.jpg',
184
+ };
185
+ ```
186
+
187
+ ### 文章 SEO
188
+
189
+ ```yaml
190
+ ---
191
+ title: 文章标题
192
+ description: 搜索结果中显示的文章描述
193
+ image: /images/post-cover.jpg
194
+ ---
195
+ ```
196
+
197
+ ## 最佳实践
198
+
199
+ ::: tip 配置技巧
200
+ 1. **保持 URL 一致** - 使用或不使用尾部斜杠,但要保持一致
201
+ 2. **优化图片** - 头像和 OG 图片应该优化压缩
202
+ 3. **写好描述** - SEO 描述控制在 150-160 字符
203
+ 4. **更新社交链接** - 保持链接最新且有效
204
+ :::
205
+
206
+ ---
207
+
208
+ 下一步:[侧边栏配置](./02-sidebar)
@@ -0,0 +1,240 @@
1
+ ---
2
+ title: 侧边栏配置
3
+ description: 配置导航树和文档组织
4
+ pubDate: 2025-01-01
5
+ author: jet-w
6
+ categories:
7
+ - 文档
8
+ tags:
9
+ - 配置
10
+ - 侧边栏
11
+ ---
12
+
13
+ # 侧边栏配置
14
+
15
+ 侧边栏为你的博客提供导航和文档组织功能。
16
+
17
+ ## 基本配置
18
+
19
+ 编辑 `src/config/sidebar.ts`:
20
+
21
+ ```typescript
22
+ export const sidebarConfig = {
23
+ enabled: true,
24
+ showSearch: true,
25
+ showRecentPosts: true,
26
+ recentPostsCount: 5,
27
+ showPopularTags: true,
28
+ popularTagsCount: 8,
29
+ showArchives: true,
30
+ archivesCount: 6,
31
+ groups: [],
32
+ };
33
+ ```
34
+
35
+ ## 配置选项
36
+
37
+ | 选项 | 类型 | 默认值 | 描述 |
38
+ |------|------|--------|------|
39
+ | `enabled` | boolean | `true` | 显示/隐藏侧边栏 |
40
+ | `showSearch` | boolean | `true` | 显示搜索框 |
41
+ | `showRecentPosts` | boolean | `true` | 显示最近文章 |
42
+ | `recentPostsCount` | number | `5` | 最近文章数量 |
43
+ | `showPopularTags` | boolean | `true` | 显示标签云 |
44
+ | `popularTagsCount` | number | `8` | 标签数量 |
45
+ | `showArchives` | boolean | `true` | 显示归档 |
46
+ | `archivesCount` | number | `6` | 归档月份数 |
47
+ | `groups` | array | `[]` | 文档树分组 |
48
+
49
+ ## 文档树分组
50
+
51
+ 分组可以为特定区域创建有组织的导航。
52
+
53
+ ### 自动扫描分组
54
+
55
+ 从文件夹自动生成导航:
56
+
57
+ ```typescript
58
+ // src/config/locales/zh-CN/sidebar.ts
59
+ export const sidebar = {
60
+ groups: [
61
+ {
62
+ type: 'scan',
63
+ title: '文档',
64
+ icon: 'ri:book-open-line',
65
+ scanPath: 'blog_docs_zh',
66
+ collapsed: false,
67
+ showForPaths: ['/zh-CN/posts/blog_docs_zh/**'],
68
+ },
69
+ ],
70
+ };
71
+ ```
72
+
73
+ | 选项 | 描述 |
74
+ |------|------|
75
+ | `type` | `'scan'` 表示自动扫描 |
76
+ | `title` | 分组标题 |
77
+ | `icon` | Remix 图标名称 |
78
+ | `scanPath` | `content/posts/` 中要扫描的文件夹 |
79
+ | `collapsed` | 默认折叠 |
80
+ | `showForPaths` | 仅在匹配的 URL 显示 |
81
+
82
+ ### 手动分组
83
+
84
+ 手动定义导航:
85
+
86
+ ```typescript
87
+ {
88
+ type: 'manual',
89
+ title: '资源',
90
+ icon: 'ri:links-line',
91
+ items: [
92
+ { title: 'API 参考', slug: 'api-reference' },
93
+ { title: '示例', link: 'https://examples.com' },
94
+ ],
95
+ showForPaths: ['/posts/api/**'],
96
+ }
97
+ ```
98
+
99
+ ## 路径匹配
100
+
101
+ 使用 `showForPaths` 控制分组何时显示:
102
+
103
+ ```typescript
104
+ showForPaths: [
105
+ '/posts/docs/**', // 所有文档页面
106
+ '/posts/tutorials/*', // 仅直接子页面
107
+ '/about', // 精确匹配
108
+ ]
109
+ ```
110
+
111
+ ### 模式语法
112
+
113
+ | 模式 | 匹配 |
114
+ |------|------|
115
+ | `/posts/docs` | 精确路径 |
116
+ | `/posts/docs/*` | 直接子页面 |
117
+ | `/posts/docs/**` | 所有后代页面 |
118
+
119
+ ## 多语言侧边栏
120
+
121
+ 为每种语言配置不同的侧边栏:
122
+
123
+ ```typescript
124
+ // src/config/locales/en/sidebar.ts
125
+ export const sidebar = {
126
+ groups: [
127
+ {
128
+ type: 'scan',
129
+ title: 'Documentation', // 英文
130
+ scanPath: 'blog_docs_en',
131
+ showForPaths: ['/posts/blog_docs_en/**'],
132
+ },
133
+ ],
134
+ };
135
+
136
+ // src/config/locales/zh-CN/sidebar.ts
137
+ export const sidebar = {
138
+ groups: [
139
+ {
140
+ type: 'scan',
141
+ title: '文档', // 中文
142
+ scanPath: 'blog_docs_zh',
143
+ showForPaths: ['/zh-CN/posts/blog_docs_zh/**'],
144
+ },
145
+ ],
146
+ };
147
+ ```
148
+
149
+ ## 完整示例
150
+
151
+ ```typescript
152
+ // src/config/locales/zh-CN/sidebar.ts
153
+ export const sidebar = {
154
+ groups: [
155
+ // 文档区域
156
+ {
157
+ type: 'scan',
158
+ title: '文档',
159
+ icon: 'ri:book-open-line',
160
+ scanPath: 'blog_docs_zh',
161
+ collapsed: false,
162
+ showForPaths: ['/zh-CN/posts/blog_docs_zh/**'],
163
+ },
164
+ // 教程区域
165
+ {
166
+ type: 'scan',
167
+ title: '教程',
168
+ icon: 'ri:graduation-cap-line',
169
+ scanPath: 'tutorials',
170
+ collapsed: true,
171
+ showForPaths: ['/zh-CN/posts/tutorials/**'],
172
+ },
173
+ // 外部资源
174
+ {
175
+ type: 'manual',
176
+ title: '资源',
177
+ icon: 'ri:links-line',
178
+ items: [
179
+ { title: 'Astro 文档', link: 'https://docs.astro.build' },
180
+ { title: 'Tailwind CSS', link: 'https://tailwindcss.com' },
181
+ ],
182
+ },
183
+ ],
184
+ };
185
+ ```
186
+
187
+ ## 侧边栏小部件
188
+
189
+ 侧边栏还显示:
190
+
191
+ ### 最近文章
192
+
193
+ 显示最新发布的文章:
194
+
195
+ ```typescript
196
+ showRecentPosts: true,
197
+ recentPostsCount: 5,
198
+ ```
199
+
200
+ ### 热门标签
201
+
202
+ 显示使用最多的标签:
203
+
204
+ ```typescript
205
+ showPopularTags: true,
206
+ popularTagsCount: 8,
207
+ ```
208
+
209
+ ### 归档
210
+
211
+ 按月显示文章:
212
+
213
+ ```typescript
214
+ showArchives: true,
215
+ archivesCount: 6,
216
+ ```
217
+
218
+ ## 隐藏侧边栏
219
+
220
+ 在 frontmatter 中为特定页面禁用侧边栏:
221
+
222
+ ```yaml
223
+ ---
224
+ title: 全宽页面
225
+ showSidebar: false
226
+ ---
227
+ ```
228
+
229
+ 或全局禁用:
230
+
231
+ ```typescript
232
+ export const sidebarConfig = {
233
+ enabled: false,
234
+ // ...
235
+ };
236
+ ```
237
+
238
+ ---
239
+
240
+ 下一步:[多语言支持](./03-i18n)