@xingwangzhe/stalux 1.2.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.
Files changed (214) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +192 -0
  3. package/package.json +108 -0
  4. package/scripts/cli.mjs +103 -0
  5. package/src/assets/BiCcCircle.svg +1 -0
  6. package/src/assets/astro.svg +1 -0
  7. package/src/assets/background/README.md +3 -0
  8. package/src/assets/background/pattern-1.min.svg +1 -0
  9. package/src/assets/background/pattern-10.min.svg +1 -0
  10. package/src/assets/background/pattern-11.min.svg +1 -0
  11. package/src/assets/background/pattern-12.min.svg +1 -0
  12. package/src/assets/background/pattern-13.min.svg +1 -0
  13. package/src/assets/background/pattern-14.min.svg +1 -0
  14. package/src/assets/background/pattern-15.min.svg +1 -0
  15. package/src/assets/background/pattern-16.min.svg +1 -0
  16. package/src/assets/background/pattern-17.min.svg +1 -0
  17. package/src/assets/background/pattern-18.min.svg +1 -0
  18. package/src/assets/background/pattern-19.min.svg +1 -0
  19. package/src/assets/background/pattern-2.min.svg +1 -0
  20. package/src/assets/background/pattern-20.min.svg +1 -0
  21. package/src/assets/background/pattern-21.min.svg +1 -0
  22. package/src/assets/background/pattern-22.min.svg +1 -0
  23. package/src/assets/background/pattern-23.min.svg +1 -0
  24. package/src/assets/background/pattern-24.min.svg +1 -0
  25. package/src/assets/background/pattern-25.min.svg +1 -0
  26. package/src/assets/background/pattern-26.min.svg +1 -0
  27. package/src/assets/background/pattern-27.min.svg +1 -0
  28. package/src/assets/background/pattern-28.min.svg +1 -0
  29. package/src/assets/background/pattern-29.min.svg +1 -0
  30. package/src/assets/background/pattern-3.min.svg +1 -0
  31. package/src/assets/background/pattern-30.min.svg +1 -0
  32. package/src/assets/background/pattern-31.min.svg +1 -0
  33. package/src/assets/background/pattern-32.min.svg +1 -0
  34. package/src/assets/background/pattern-33.min.svg +1 -0
  35. package/src/assets/background/pattern-34.min.svg +1 -0
  36. package/src/assets/background/pattern-35.min.svg +1 -0
  37. package/src/assets/background/pattern-36.min.svg +1 -0
  38. package/src/assets/background/pattern-37.min.svg +1 -0
  39. package/src/assets/background/pattern-38.min.svg +1 -0
  40. package/src/assets/background/pattern-39.min.svg +1 -0
  41. package/src/assets/background/pattern-4.min.svg +1 -0
  42. package/src/assets/background/pattern-40.min.svg +1 -0
  43. package/src/assets/background/pattern-41.min.svg +1 -0
  44. package/src/assets/background/pattern-42.min.svg +1 -0
  45. package/src/assets/background/pattern-5.min.svg +1 -0
  46. package/src/assets/background/pattern-6.min.svg +1 -0
  47. package/src/assets/background/pattern-7.min.svg +1 -0
  48. package/src/assets/background/pattern-8.min.svg +1 -0
  49. package/src/assets/background/pattern-9.min.svg +1 -0
  50. package/src/assets/background.svg +1 -0
  51. package/src/assets/cc-icon.svg +4 -0
  52. package/src/assets/fonts/GoogleSansCode-Italic.woff2 +0 -0
  53. package/src/assets/fonts/GoogleSansCode.woff2 +0 -0
  54. package/src/assets/fonts/LXGWWenKai-Regular.ttf +0 -0
  55. package/src/assets/fonts/LXGWWenKai-Regular.woff2 +0 -0
  56. package/src/components/stalux/analytics/clarity.astro +25 -0
  57. package/src/components/stalux/analytics/google.astro +31 -0
  58. package/src/components/stalux/analytics/umami.astro +16 -0
  59. package/src/components/stalux/archives/archivesList.astro +116 -0
  60. package/src/components/stalux/archives/toArchive.astro +14 -0
  61. package/src/components/stalux/categories/categoriesCard.astro +49 -0
  62. package/src/components/stalux/categories/categoriesList.astro +17 -0
  63. package/src/components/stalux/common/author.astro +35 -0
  64. package/src/components/stalux/common/date.astro +59 -0
  65. package/src/components/stalux/common/search.astro +14 -0
  66. package/src/components/stalux/common/textType.astro +16 -0
  67. package/src/components/stalux/common/verCount.astro +10 -0
  68. package/src/components/stalux/footer/FooterBadges.astro +150 -0
  69. package/src/components/stalux/footer/FooterBeian.astro +91 -0
  70. package/src/components/stalux/footer/FooterCopyright.astro +40 -0
  71. package/src/components/stalux/footer/FooterStats.astro +108 -0
  72. package/src/components/stalux/footer/FooterThemeInfo.astro +67 -0
  73. package/src/components/stalux/layout/footer.astro +87 -0
  74. package/src/components/stalux/layout/head.astro +194 -0
  75. package/src/components/stalux/layout/listPage.astro +26 -0
  76. package/src/components/stalux/layout/navs.astro +174 -0
  77. package/src/components/stalux/links/linkCard.astro +50 -0
  78. package/src/components/stalux/links/linkList.astro +20 -0
  79. package/src/components/stalux/links/socialMedia.astro +102 -0
  80. package/src/components/stalux/posts/PhotoSwipeStyle.astro +3 -0
  81. package/src/components/stalux/posts/PostTaxonomy.astro +65 -0
  82. package/src/components/stalux/posts/WalineComment.astro +609 -0
  83. package/src/components/stalux/posts/postAuthor.astro +23 -0
  84. package/src/components/stalux/posts/postCC.astro +52 -0
  85. package/src/components/stalux/posts/postCard.astro +83 -0
  86. package/src/components/stalux/posts/postContent.astro +174 -0
  87. package/src/components/stalux/posts/postLeft.astro +41 -0
  88. package/src/components/stalux/posts/postList.astro +25 -0
  89. package/src/components/stalux/posts/postNavigation.astro +137 -0
  90. package/src/components/stalux/posts/postRight.astro +33 -0
  91. package/src/components/stalux/posts/postToc.astro +88 -0
  92. package/src/components/stalux/posts/randomPost.astro +134 -0
  93. package/src/components/stalux/tags/tagHeader.astro +50 -0
  94. package/src/components/stalux/tags/tagsCloud.astro +100 -0
  95. package/src/components/stalux/words/wordCard.astro +62 -0
  96. package/src/components/stalux/words/wordList.astro +70 -0
  97. package/src/config.ts +58 -0
  98. package/src/i18n/en.json +193 -0
  99. package/src/i18n/zh-CN.json +193 -0
  100. package/src/index.ts +215 -0
  101. package/src/internal/components-plugin.ts +54 -0
  102. package/src/internal/dev-toolbar.ts +33 -0
  103. package/src/internal/override.ts +99 -0
  104. package/src/internal/pagefind.ts +40 -0
  105. package/src/layouts/PostLayout.astro +90 -0
  106. package/src/layouts/Stalux.astro +91 -0
  107. package/src/pages/404.astro +103 -0
  108. package/src/pages/about.astro +59 -0
  109. package/src/pages/about.md.ts +15 -0
  110. package/src/pages/api/post.abbrlink.json.ts +20 -0
  111. package/src/pages/archives.astro +23 -0
  112. package/src/pages/archives.md.ts +24 -0
  113. package/src/pages/atom.xml.ts +29 -0
  114. package/src/pages/categories/[category].astro +35 -0
  115. package/src/pages/categories/[category].md.ts +34 -0
  116. package/src/pages/categories/index.astro +23 -0
  117. package/src/pages/categories/index.md.ts +27 -0
  118. package/src/pages/index.astro +30 -0
  119. package/src/pages/index.md.ts +18 -0
  120. package/src/pages/links.astro +23 -0
  121. package/src/pages/links.md.ts +18 -0
  122. package/src/pages/llms-full.txt.ts +25 -0
  123. package/src/pages/llms.txt.ts +26 -0
  124. package/src/pages/posts/[post].astro +69 -0
  125. package/src/pages/posts/[post].md.ts +109 -0
  126. package/src/pages/rss.xml.ts +29 -0
  127. package/src/pages/tags/[tag].astro +37 -0
  128. package/src/pages/tags/[tag].md.ts +34 -0
  129. package/src/pages/tags/index.astro +23 -0
  130. package/src/pages/tags/index.md.ts +27 -0
  131. package/src/pages/words.astro +24 -0
  132. package/src/pages/words.md.ts +14 -0
  133. package/src/plugins/feature-flags.ts +68 -0
  134. package/src/plugins/satteri-temml.ts +81 -0
  135. package/src/schemas/collections.ts +140 -0
  136. package/src/schemas/config.ts +226 -0
  137. package/src/scripts/background.ts +59 -0
  138. package/src/styles/base/init.css +286 -0
  139. package/src/styles/base/math.css +411 -0
  140. package/src/styles/components/archives/archivesList.module.css +378 -0
  141. package/src/styles/components/archives/toArchive.module.css +3 -0
  142. package/src/styles/components/categories/categoriesCard.module.css +87 -0
  143. package/src/styles/components/categories/categoriesList.module.css +27 -0
  144. package/src/styles/components/common/author.module.css +73 -0
  145. package/src/styles/components/common/date.module.css +15 -0
  146. package/src/styles/components/common/textType.module.css +10 -0
  147. package/src/styles/components/footer/footer.module.css +44 -0
  148. package/src/styles/components/layout/navs.module.css +250 -0
  149. package/src/styles/components/links/linkCard.module.css +99 -0
  150. package/src/styles/components/links/linkList.module.css +67 -0
  151. package/src/styles/components/links/socialLinks.module.css +22 -0
  152. package/src/styles/components/markdown.css +528 -0
  153. package/src/styles/components/posts/postAuthor.module.css +32 -0
  154. package/src/styles/components/posts/postCC.module.css +138 -0
  155. package/src/styles/components/posts/postCard.module.css +156 -0
  156. package/src/styles/components/posts/postCategories.module.css +50 -0
  157. package/src/styles/components/posts/postContent.module.css +230 -0
  158. package/src/styles/components/posts/postLayout.module.css +142 -0
  159. package/src/styles/components/posts/postLeft.module.css +38 -0
  160. package/src/styles/components/posts/postList.module.css +24 -0
  161. package/src/styles/components/posts/postNavigation.module.css +187 -0
  162. package/src/styles/components/posts/postRight.module.css +60 -0
  163. package/src/styles/components/posts/postSidebar.module.css +57 -0
  164. package/src/styles/components/posts/postTags.module.css +51 -0
  165. package/src/styles/components/posts/postTaxonomy.module.css +87 -0
  166. package/src/styles/components/posts/postToc.module.css +74 -0
  167. package/src/styles/components/posts/randomPost.module.css +131 -0
  168. package/src/styles/components/tags/tagHeader.module.css +44 -0
  169. package/src/styles/components/tags/tagsCloud.module.css +124 -0
  170. package/src/styles/components/words/wordCard.module.css +130 -0
  171. package/src/styles/components/words/wordList.module.css +39 -0
  172. package/src/styles/pages/archives.module.css +18 -0
  173. package/src/styles/pages/categories.module.css +13 -0
  174. package/src/styles/pages/home.module.css +51 -0
  175. package/src/styles/pages/listPage.module.css +13 -0
  176. package/src/styles/pages/tags.module.css +12 -0
  177. package/src/styles/pages/words.module.css +13 -0
  178. package/src/styles/shared/animations.css +87 -0
  179. package/src/styles/shared/stagger.css +20 -0
  180. package/src/utils/ai-discovery.ts +547 -0
  181. package/src/utils/badge-generator.ts +68 -0
  182. package/src/utils/cc.ts +46 -0
  183. package/src/utils/collections-stats.ts +48 -0
  184. package/src/utils/config-utils.ts +107 -0
  185. package/src/utils/count-words.ts +20 -0
  186. package/src/utils/dayjs.ts +106 -0
  187. package/src/utils/feed.ts +70 -0
  188. package/src/utils/i18n.ts +64 -0
  189. package/src/utils/lucide-icons.ts +52 -0
  190. package/src/utils/semantic-time.ts +11 -0
  191. package/src/utils/taxonomy.ts +44 -0
  192. package/src/utils/toc-scrollspy.ts +95 -0
  193. package/src/utils/waline.ts +27 -0
  194. package/src/utils/word-count-utils.ts +83 -0
  195. package/template/astro.config.mjs +51 -0
  196. package/template/package.json +27 -0
  197. package/template/public/robots.txt +3 -0
  198. package/template/src/content.config.ts +11 -0
  199. package/template/stalux/about/index.md +14 -0
  200. package/template/stalux/config/ai-discovery.yml +2 -0
  201. package/template/stalux/config/author.yml +4 -0
  202. package/template/stalux/config/comment.yml +5 -0
  203. package/template/stalux/config/footer.yml +13 -0
  204. package/template/stalux/config/head.yml +7 -0
  205. package/template/stalux/config/links.yml +4 -0
  206. package/template/stalux/config/media-links.yml +8 -0
  207. package/template/stalux/config/navs.yml +23 -0
  208. package/template/stalux/config/promote.yml +2 -0
  209. package/template/stalux/config/site.yml +7 -0
  210. package/template/stalux/config/typetexts.yml +5 -0
  211. package/template/stalux/posts/hello-stalux.md +47 -0
  212. package/template/stalux/words/_template.md +12 -0
  213. package/template/stalux/words/einstein-imagination.md +8 -0
  214. package/template/tsconfig.json +9 -0
@@ -0,0 +1,83 @@
1
+ /**
2
+ * 站点字数统计工具
3
+ *
4
+ * Astro 7.1 启用 deferRender 后,post.rendered 不再在 content sync 阶段预计算。
5
+ * 因此改为直接从 post.body(原始 markdown)统计字数,不再依赖 Sätteri 的渲染结果。
6
+ */
7
+ import { getCollection } from "astro:content";
8
+
9
+ // ---------------------------------------------------------------------------
10
+ // 字数统计算法(基于 W3C Intl.Segmenter,body-based)
11
+ // ---------------------------------------------------------------------------
12
+
13
+ const bodySegmenter = new Intl.Segmenter("zh", { granularity: "word" });
14
+
15
+ /**
16
+ * 从原始 markdown 正文估算字数。
17
+ * - 中文:`Intl.Segmenter` 逐字分割,每个汉字计 1
18
+ * - 英文:按词计 1
19
+ * - 纯数字序列:不计入(与旧正则行为一致)
20
+ * - 标点/空白不计
21
+ */
22
+ function countWordsFromBody(body: string | undefined | null): number {
23
+ if (!body) return 0;
24
+ let count = 0;
25
+ for (const { segment, isWordLike } of bodySegmenter.segment(body)) {
26
+ // 排除纯数字序列(如年份、代码行号等),与旧正则行为保持一致
27
+ if (isWordLike && !/^\d+$/.test(segment)) count++;
28
+ }
29
+ return count;
30
+ }
31
+
32
+ // ---------------------------------------------------------------------------
33
+ // 模块级缓存(整个构建周期只计算一次)
34
+ // ---------------------------------------------------------------------------
35
+
36
+ let _cachedTotal: number | null = null;
37
+
38
+ /**
39
+ * 获取所有已发布文章的总字数(从 body 估算)。
40
+ * 结果会被缓存,同一构建周期内重复调用不会重新计算。
41
+ */
42
+ export async function getTotalWordCount(): Promise<number> {
43
+ if (_cachedTotal !== null) return _cachedTotal;
44
+ try {
45
+ const posts = await getCollection("posts", ({ data }) => !data.draft);
46
+ _cachedTotal = posts.reduce((sum, post) => sum + countWordsFromBody(post.body), 0);
47
+ return _cachedTotal;
48
+ } catch (error) {
49
+ console.error("计算文章总字数时出错:", error);
50
+ return 0;
51
+ }
52
+ }
53
+
54
+ let _cachedDescriptions: Map<string, { desc: string; wordCount: number }> | null = null;
55
+
56
+ /**
57
+ * 获取所有已发布文章的描述和字数缓存,供 RSS/Atom/LLMs feed 共享。
58
+ * - desc :直接从 frontmatter 读取(post.data.desc)
59
+ * - wordCount:从 post.body 估算
60
+ */
61
+ export async function getPostDescriptions(): Promise<
62
+ Map<string, { desc: string; wordCount: number }>
63
+ > {
64
+ if (_cachedDescriptions !== null) return _cachedDescriptions;
65
+ const posts = await getCollection("posts", ({ data }) => !data.draft);
66
+ const results = posts.map((post) => ({
67
+ id: String(post.data.abbrlink ?? post.id),
68
+ desc: post.data.desc || "",
69
+ wordCount: countWordsFromBody(post.body),
70
+ }));
71
+ _cachedDescriptions = new Map(
72
+ results.map((r) => [r.id, { desc: r.desc, wordCount: r.wordCount }]),
73
+ );
74
+ return _cachedDescriptions;
75
+ }
76
+
77
+ export function formatWordCount(count: number, lang?: string): string {
78
+ const isZh = lang?.startsWith("zh");
79
+ // 中文用"万"做万级单位;其他语言统一用"k"(千)。
80
+ if (isZh && count >= 10000) return `${(count / 10000).toFixed(1)}万`;
81
+ if (count >= 1000) return `${(count / 1000).toFixed(1)}k`;
82
+ return String(count);
83
+ }
@@ -0,0 +1,51 @@
1
+ import { defineConfig } from "astro/config";
2
+ import { satteri } from "@astrojs/markdown-satteri";
3
+ import sitemap from "@astrojs/sitemap";
4
+ import expressiveCode from "astro-expressive-code";
5
+ import stalux from "stalux";
6
+ import { mermaidMdast, mermaidHast } from "@xingwangzhe/satteri-mermaid";
7
+ import { photoswipe } from "@xingwangzhe/satteri-photoswipe";
8
+
9
+ // https://astro.build/config
10
+ export default defineConfig({
11
+ output: "static",
12
+ site: "https://example.com",
13
+ prefetch: {
14
+ prefetchAll: false,
15
+ defaultStrategy: "hover",
16
+ },
17
+ integrations: [
18
+ // Stalux 主题集成 — 自动注入所有页面、组件、路由
19
+ stalux({
20
+ contentDir: "stalux",
21
+ }),
22
+ sitemap(),
23
+ expressiveCode({
24
+ themes: ["dark-plus", "github-light"],
25
+ styleOverrides: {
26
+ borderRadius: "0.5rem",
27
+ codeFontFamily:
28
+ '"JetBrains Mono", "Fira Code", "Consolas", "Courier New", monospace',
29
+ },
30
+ useDarkModeMediaQuery: true,
31
+ }),
32
+ ],
33
+ markdown: {
34
+ processor: satteri({
35
+ features: {
36
+ math: true,
37
+ smartPunctuation: true,
38
+ gfm: true,
39
+ frontmatter: true,
40
+ },
41
+ mdastPlugins: [],
42
+ hastPlugins: [
43
+ photoswipe(),
44
+ mermaidHast({
45
+ responsive: true,
46
+ theme: "dark",
47
+ }),
48
+ ],
49
+ }),
50
+ },
51
+ });
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "my-stalux-blog",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "scripts": {
6
+ "dev": "astro dev",
7
+ "build": "astro build",
8
+ "preview": "astro preview",
9
+ "astro": "astro"
10
+ },
11
+ "dependencies": {
12
+ "astro": "^7.0.0",
13
+ "stalux": "^2.0.0",
14
+ "@astrojs/markdown-satteri": "^1.0.0",
15
+ "astro-expressive-code": "^0.44.0",
16
+ "@xingwangzhe/satteri-mermaid": "^0.7.0",
17
+ "@xingwangzhe/satteri-photoswipe": "^0.2.0",
18
+ "@astrojs/sitemap": "^4.0.0",
19
+ "pagefind": "^1.5.0",
20
+ "@pagefind/component-ui": "^1.5.0"
21
+ },
22
+ "devDependencies": {
23
+ "@astrojs/rss": "^4.0.0",
24
+ "@lucide/astro": "^1.0.0",
25
+ "typescript": "^7.0.0"
26
+ }
27
+ }
@@ -0,0 +1,3 @@
1
+ User-agent: *
2
+ Allow: /
3
+ Sitemap: https://example.com/sitemap-index.xml
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Stalux 内容集合配置
3
+ *
4
+ * 使用 stalux 包提供的 defineCollections 快速配置。
5
+ * 如需自定义内容路径,修改 contentDir 参数即可。
6
+ */
7
+ import { defineCollections } from "stalux/schemas";
8
+
9
+ export const collections = defineCollections({
10
+ contentDir: "stalux",
11
+ });
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: About Me
3
+ description: About this blog and the author
4
+ ---
5
+
6
+ Hello! Welcome to my blog.
7
+
8
+ This is my personal space where I share technology, life, and thoughts.
9
+
10
+ ## About This Site
11
+
12
+ - Built with [Astro](https://astro.build) + [Stalux](https://stalux.needhelp.icu)
13
+ - Content licensed under CC-BY-NC-SA-4.0
14
+ - Source code hosted on GitHub
@@ -0,0 +1,2 @@
1
+ id: ai-discovery
2
+ conformance: "essential"
@@ -0,0 +1,4 @@
1
+ id: author
2
+ name: Your Name
3
+ avatar: /avatar.png
4
+ bio: A passionate developer and writer
@@ -0,0 +1,5 @@
1
+ id: comment
2
+ enabled: false
3
+ waline:
4
+ serverURL: ""
5
+ lang: en
@@ -0,0 +1,13 @@
1
+ id: footer
2
+ copyright:
3
+ enabled: true
4
+ startYear: 2026
5
+ theme:
6
+ showPoweredBy: true
7
+ showThemeInfo: true
8
+ beian:
9
+ icp:
10
+ enabled: false
11
+ security:
12
+ enabled: false
13
+ badges: []
@@ -0,0 +1,7 @@
1
+ id: head
2
+ # googleAnalyticsId: ""
3
+ # bingClarityId: ""
4
+ # umami:
5
+ # id: ""
6
+ # url: ""
7
+ anyhead: ""
@@ -0,0 +1,4 @@
1
+ id: links
2
+ title: Friends
3
+ description: Friendly neighbors sharing great content
4
+ sites: []
@@ -0,0 +1,8 @@
1
+ id: media-links
2
+ items:
3
+ - icon: github
4
+ link: https://github.com/
5
+ - icon: bilibili
6
+ link: https://bilibili.com/
7
+ - icon: maildotru
8
+ link: mailto:hello@example.com
@@ -0,0 +1,23 @@
1
+ id: navs
2
+ items:
3
+ - icon: home
4
+ link: /
5
+ title: Home
6
+ - icon: archive
7
+ link: /archives/
8
+ title: Archives
9
+ - icon: folder
10
+ link: /categories/
11
+ title: Categories
12
+ - icon: tag
13
+ link: /tags/
14
+ title: Tags
15
+ - icon: quote
16
+ link: /words/
17
+ title: Words
18
+ - icon: link
19
+ link: /links/
20
+ title: Links
21
+ - icon: user
22
+ link: /about/
23
+ title: About
@@ -0,0 +1,2 @@
1
+ id: promote
2
+ export_md: false
@@ -0,0 +1,7 @@
1
+ id: site
2
+ lang: en
3
+ title: My Blog
4
+ url: https://example.com
5
+ description: A personal blog powered by the Stalux theme
6
+ timezone: Asia/Shanghai
7
+ favicon: /favicon.ico
@@ -0,0 +1,5 @@
1
+ id: typetexts
2
+ items:
3
+ - "Hello World!"
4
+ - "Stay hungry, Stay foolish"
5
+ - "Hello Stalux!"
@@ -0,0 +1,47 @@
1
+ ---
2
+ title: Hello Stalux!
3
+ abbrlink: hello-stalux
4
+ date: 2026-07-27 10:00:00
5
+ tags: [Stalux, Getting Started]
6
+ categories: [Blog]
7
+ desc: Welcome to Stalux! This is your first blog post.
8
+ cc: CC-BY-NC-SA-4.0
9
+ ---
10
+
11
+ Welcome to my blog! This is the first post created with the **Stalux** theme.
12
+
13
+ ## About Stalux
14
+
15
+ Stalux is a modern, high-performance Astro blog theme featuring:
16
+
17
+ - 🌙 Dark mode with elegant glassmorphism design
18
+ - 🔍 Full-text search (Pagefind)
19
+ - 📡 RSS & Atom feeds
20
+ - 🤖 LLM discovery files (llms.txt)
21
+ - 💬 Comment system (Waline)
22
+ - 📊 Mermaid diagrams
23
+ - 📐 Math formula rendering
24
+ - 🖼️ PhotoSwipe lightbox
25
+ - 📱 Fully responsive
26
+
27
+ ## Markdown Examples
28
+
29
+ **Bold**, *italic*, ~~strikethrough~~, `inline code`
30
+
31
+ ```javascript
32
+ // Code block
33
+ function hello() {
34
+ console.log("Hello, Stalux!");
35
+ }
36
+ ```
37
+
38
+ > Blockquote example
39
+
40
+ - List item 1
41
+ - List item 2
42
+ - List item 3
43
+
44
+ 1. Ordered list 1
45
+ 2. Ordered list 2
46
+
47
+ For more features, check the [Stalux documentation](https://stalux.needhelp.icu).
@@ -0,0 +1,12 @@
1
+ ---
2
+ # source: "Source or Author"
3
+ # link: "https://source-link" # Optional; when present, source becomes clickable
4
+ # sourceDate: "1999" # Optional; source date
5
+ # date: "2026-07-27 20:45:00" # Optional; when recorded
6
+ # updated: "2026-07-27 21:00:00"
7
+ # draft: false # Optional; true hides the entry
8
+ # title: "Title" # Optional
9
+ # abbrlink: "custom-id" # Optional
10
+ # tags: [tag1, tag2] # Optional
11
+ ---
12
+ Write the quote body here. Supports **Markdown**, `inline code`, and code blocks.
@@ -0,0 +1,8 @@
1
+ ---
2
+ source: "Albert Einstein"
3
+ link: "https://example.com"
4
+ sourceDate: "1950"
5
+ date: "2026-07-27 10:00:00"
6
+ ---
7
+
8
+ Imagination is more important than knowledge.
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "astro/tsconfigs/strict",
3
+ "include": [".astro/types.d.ts", "**/*"],
4
+ "exclude": ["dist"],
5
+ "compilerOptions": {
6
+ "strictNullChecks": true,
7
+ "allowJs": true
8
+ }
9
+ }