hexo-theme-stellar 1.42.0 → 1.43.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 (122) hide show
  1. package/.claude/skills/stellar-theme-dev/SKILL.md +2 -0
  2. package/CHANGELOG.md +42 -0
  3. package/THIRD-PARTY-NOTICES.md +28 -0
  4. package/_config.yml +20 -10
  5. package/_data/icons.yml +10 -9
  6. package/languages/en.yml +11 -0
  7. package/languages/zh-CN.yml +11 -0
  8. package/languages/zh-TW.yml +11 -0
  9. package/layout/_partial/comments/artalk/layout.ejs +1 -1
  10. package/layout/_partial/comments/beaudar/layout.ejs +1 -1
  11. package/layout/_partial/comments/giscus/layout.ejs +1 -1
  12. package/layout/_partial/comments/twikoo/layout.ejs +1 -1
  13. package/layout/_partial/comments/utterances/layout.ejs +1 -1
  14. package/layout/_partial/comments/waline/layout.ejs +1 -1
  15. package/layout/_partial/components/collection-item.ejs +44 -0
  16. package/layout/_partial/components/collection.ejs +26 -0
  17. package/layout/_partial/components/widget-frame.ejs +35 -0
  18. package/layout/_partial/cover/wiki_cover.ejs +82 -26
  19. package/layout/_partial/dropdown.ejs +62 -0
  20. package/layout/_partial/head.ejs +9 -0
  21. package/layout/_partial/main/navbar/breadcrumb/blog.ejs +1 -1
  22. package/layout/_partial/main/post_list/archive_item.ejs +12 -0
  23. package/layout/_partial/main/post_list/topic_card.ejs +21 -9
  24. package/layout/_partial/main/post_list/wiki_card.ejs +49 -10
  25. package/layout/_partial/scripts/bootstrap.ejs +3 -1
  26. package/layout/_partial/scripts/defines.ejs +2 -8
  27. package/layout/_partial/scripts/lazyload.ejs +0 -3
  28. package/layout/_partial/scripts.ejs +1 -0
  29. package/layout/_partial/sidebar/index_leftbar.ejs +12 -2
  30. package/layout/_partial/sidebar/logo.ejs +1 -1
  31. package/layout/_partial/sidebar/menu.ejs +21 -23
  32. package/layout/_partial/widgets/components/linklist.ejs +23 -21
  33. package/layout/_partial/widgets/linklist.ejs +7 -12
  34. package/layout/_partial/widgets/recent.ejs +52 -41
  35. package/layout/_partial/widgets/related.ejs +47 -36
  36. package/layout/_partial/widgets/tagtree.ejs +70 -54
  37. package/layout/_partial/widgets/toc.ejs +37 -62
  38. package/layout/_partial/widgets/tree.ejs +38 -51
  39. package/layout/_plugins/index.ejs +25 -0
  40. package/layout/_plugins/mermaid.ejs +3 -4
  41. package/layout/archive.ejs +11 -20
  42. package/layout/collection-preview.ejs +60 -0
  43. package/layout/index_topic.ejs +12 -6
  44. package/layout/index_wiki.ejs +49 -3
  45. package/layout/layout.ejs +4 -3
  46. package/package.json +1 -1
  47. package/scripts/events/index.js +0 -2
  48. package/scripts/filters/lib/img_lazyload.js +184 -40
  49. package/scripts/generators/stellar-icons.js +1 -1
  50. package/scripts/lib/subtitle.js +5 -1
  51. package/scripts/tags/index.js +1 -0
  52. package/scripts/tags/lib/about.js +1 -1
  53. package/scripts/tags/lib/albums.js +1 -1
  54. package/scripts/tags/lib/banner.js +1 -1
  55. package/scripts/tags/lib/dropdown.js +64 -0
  56. package/scripts/tags/lib/friends.js +1 -1
  57. package/scripts/tags/lib/gallery.js +3 -3
  58. package/scripts/tags/lib/image.js +1 -1
  59. package/scripts/tags/lib/posters.js +1 -1
  60. package/scripts/tags/lib/sites.js +8 -4
  61. package/source/css/_common/base.styl +4 -4
  62. package/source/css/_common/blockquote.styl +2 -2
  63. package/source/css/_common/dropdown.styl +132 -0
  64. package/source/css/_common/html.styl +1 -1
  65. package/source/css/_common/loading.styl +5 -2
  66. package/source/css/_common/title.styl +8 -8
  67. package/source/css/_components/collection.styl +188 -0
  68. package/source/css/_components/layout.styl +1 -1
  69. package/source/css/_components/list.styl +44 -46
  70. package/source/css/_components/md.styl +3 -3
  71. package/source/css/_components/page-transition.styl +22 -0
  72. package/source/css/_components/pages/archives.styl +19 -18
  73. package/source/css/_components/pages/article-indent.styl +2 -2
  74. package/source/css/_components/pages/article-story.styl +9 -5
  75. package/source/css/_components/pages/collection-preview.styl +68 -0
  76. package/source/css/_components/pages/notebook.styl +11 -9
  77. package/source/css/_components/partial/article-footer.styl +7 -4
  78. package/source/css/_components/partial/cover.styl +280 -1
  79. package/source/css/_components/partial/related.styl +10 -6
  80. package/source/css/_components/sidebar/footer.styl +65 -12
  81. package/source/css/_components/sidebar/nav-area.styl +6 -1
  82. package/source/css/_components/sidebar/search.styl +6 -2
  83. package/source/css/_components/tag-plugins/chat.styl +1 -1
  84. package/source/css/_components/tag-plugins/folders.styl +4 -4
  85. package/source/css/_components/tag-plugins/folding.styl +3 -3
  86. package/source/css/_components/tag-plugins/hashtag.styl +2 -3
  87. package/source/css/_components/tag-plugins/mdrender.styl +1 -1
  88. package/source/css/_components/tag-plugins/note.styl +4 -4
  89. package/source/css/_components/tag-plugins/poetry.styl +5 -5
  90. package/source/css/_components/tag-plugins/quot.styl +1 -2
  91. package/source/css/_components/tag-plugins/quote.styl +1 -1
  92. package/source/css/_components/tag-plugins/tabs.styl +2 -2
  93. package/source/css/_components/tag-plugins/timeline.styl +4 -4
  94. package/source/css/_components/widgets/ghrepo.styl +4 -0
  95. package/source/css/_components/widgets/markdown.styl +1 -14
  96. package/source/css/_components/widgets/timeline.styl +2 -2
  97. package/source/css/_components/widgets/toc.styl +22 -20
  98. package/source/css/_components/widgets/widgets.styl +13 -1
  99. package/source/css/_components/wiki-card.styl +209 -0
  100. package/source/css/_custom.styl +22 -20
  101. package/source/css/_plugins/lazyload.styl +8 -5
  102. package/source/css/comments/utterances.styl +2 -2
  103. package/source/css/comments/waline.styl +24 -0
  104. package/source/css/plugins/mermaid.styl +31 -12
  105. package/source/js/icons.js +1 -1
  106. package/source/js/main.js +62 -6
  107. package/source/js/plugins/adaptive-text.js +46 -2
  108. package/source/js/plugins/dropdown.js +435 -0
  109. package/source/js/plugins/galaxy.js +423 -0
  110. package/source/js/search/algolia-search.js +1 -1
  111. package/source/js/search/local-search.js +1 -1
  112. package/source/js/services/ghinfo.js +31 -3
  113. package/source/js/services/siteinfo.js +26 -0
  114. package/source/js/services/sites.js +6 -2
  115. package/source/js/services.js +5 -2
  116. package/source/js/tagtree.js +7 -7
  117. package/source/js/utils.js +1 -1
  118. package/layout/_partial/widgets/components/link.ejs +0 -21
  119. package/source/css/_components/sidebar/menu.styl +0 -77
  120. package/source/css/_components/widgets/components.styl +0 -68
  121. package/source/css/_components/widgets/list.styl +0 -46
  122. package/source/css/_components/widgets/related.styl +0 -40
@@ -14,6 +14,7 @@ description: 主题仓库(hexo-theme-stellar)开发全流程:方案 →
14
14
  - 先读 `AGENTS.md`「架构总览」(§6)与 `docs/knowledge/00-总览与安装配置/overview.md` 建立整体认知、定位改动范围。
15
15
  - 在 `docs/designs/{YYYY-MM-DD}-{功能简称}/` 下建方案文档(模板 `docs/designs/_template/`,含 `spec.md` / `plan.md` / `checklist.md`)。
16
16
  - 方案需写明:要解决的问题、技术方案与实现思路、影响范围、需同步的知识库页面与文档。
17
+ - 知识库文档遵循“设计语义、行为契约、修改依据”分层;新增具体数值时说明语义和作用范围,普通 CSS 实现值以源码为准,不在多个页面重复维护。
17
18
  - 完成条件:方案文档已就位;改动范围与受影响维度已确认。
18
19
 
19
20
  ### 2. 开发
@@ -38,6 +39,7 @@ description: 主题仓库(hexo-theme-stellar)开发全流程:方案 →
38
39
  - 任务完成后**不自动提交**:改动保留在工作区供用户审查。
39
40
  - 仅在用户明确要求提交时执行;提交前须通过第 3 步中应执行的验证。
40
41
  - 使用 Conventional Commits,一次提交对应一个需求点;如果几个需求任务逻辑相似,可以合并为一次提交;类型与格式见 `AGENTS.md`「Git 规范」(§7)。
42
+ - 合并代码时,把合并提交 / PR 标题改为 Conventional Commits 格式(见 `AGENTS.md`「Git 规范」§7),不保留默认的 `Merge branch ...` / `Merge pull request ...` 标题。
41
43
  - 改动只提交在本仓库(stellar);仅当用户明确要求时 push。
42
44
  - 完成条件:改动已通过应执行的验证并保留在工作区;如用户要求提交,提交符合规范;如用户要求 push,已推送且远端为最新。
43
45
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,47 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.43.0
4
+
5
+ > 发布日期:2026-08-20
6
+
7
+ ### 新功能
8
+ - Wiki 项目首页升级为完整 Hero:新增项目元信息、安装命令切换与复制、最新版本异步加载,并加入支持减弱动态效果的 WebGL 星河背景
9
+ - Wiki 项目卡片重构为项目预览布局,补充适用范围、版本与仓库信息展示
10
+ - Footer 新增通用下拉菜单、弹性占位项和自适应 social 布局;同时新增可复用的 `{% dropdown %}` 标签
11
+ - 同源整页导航默认启用原生 View Transition,旧浏览器自动回退普通导航
12
+ - 专栏列表按项目日期排序,文章列表超过阈值时以归档式折叠列表展示,可展开或收起其余文章
13
+
14
+ ### 修复
15
+ - Mermaid 的 `style_optimization` 开关恢复正确语义,关闭时使用 Mermaid 官方主题,开启时应用 Stellar 优化样式,并修复图中文字不可见(#693)
16
+ - `{% sites %}` 网站卡片缺少图标时复用 siteinfo 服务自动补全,请求失败时保留默认图标(#387)
17
+ - navbar 在无轮播区页面顶部保持卡片样式,实际滚动 2px 后再切换为玻璃效果
18
+ - 修复 linklist 激活圆点被标题样式覆盖,以及文章分享图标尺寸不一致的问题
19
+
20
+ ### 样式与重构
21
+ - 侧栏菜单、目录树、相关内容、Widget 与下拉菜单统一复用 collection 组件,收敛结构、密度、背景、暗色高亮和交互反馈
22
+ - Wiki Hero 调整版本标签布局、星河辉光与鼠标排斥效果
23
+ - 移动端根字号自动增加 2px,并统一正文、标题、列表与标签插件的响应式排版
24
+ - 评论区与异步数据服务统一使用自包含的三圆点 loading 动画,移除外部 loading 图标依赖
25
+
26
+ ### 升级注意(配置变更与破坏性改动)
27
+ - 新增 `style.page_transition.enable`,默认 `true`;不需要原生跨文档过渡时可设为 `false`
28
+ - 移除 `style.font-size.body`,正文与组件字号统一从 `style.font-size.root` 派生;移动端根字号会在配置值基础上增加 2px
29
+ - 移除 `default.loading` 配置,loading 动画改为主题内置 SVG
30
+ - `footer.social` 支持 `type: dropdown`、`items` 与 `spacer`;旧的普通链接配置继续兼容
31
+
32
+ Full Changelog: [1.42.1...1.43.0](https://github.com/xaoxuu/hexo-theme-stellar/compare/1.42.1...1.43.0)
33
+
34
+ ## 1.42.1
35
+
36
+ > 发布日期:2026-08-17
37
+
38
+ ### 修复
39
+ - 图片懒加载过滤器在 HTML 压缩器(如 hexo-minify `removeAttributeQuotes`)去除属性引号后,原正则跨标签越界,把页尾 bootstrap 内联脚本里的 `s.src = "/js/utils.js?v=..."` 误改写为「1×1 PNG 占位 + `data-src`」,导致 bootstrap 语法错误、`stellar is not defined` 连锁报错、scrollreveal 不初始化、`.slide-up` 文章列表延迟约 3 秒才显示;改为属性感知标签扫描并跳过 `<script>`/`<style>`/注释区域,同时兼容无引号 `src` 的图片懒加载
40
+ - bootstrap 的 utils 补载改用 `setAttribute('src')` 赋值,避免被基于 `s.src = "..."` 的朴素正则(图片懒加载 / 脚本延迟优化器)改写
41
+ - `layout/_plugins/index.ejs` 增加 `stellar.initPlugin` 兜底注册点:bootstrap 被第三方优化器改写/移除时不再产生 `stellar is not defined` 连锁报错,插件仍可注册运行
42
+
43
+ Full Changelog: [1.42.0...1.42.1](https://github.com/xaoxuu/hexo-theme-stellar/compare/1.42.0...1.42.1)
44
+
3
45
  ## 1.42.0
4
46
 
5
47
  > 发布日期:2026-08-16
@@ -0,0 +1,28 @@
1
+ # Third-Party Notices
2
+
3
+ ## React Bits
4
+
5
+ The Wiki Galaxy WebGL background is adapted from the Galaxy component in
6
+ [React Bits](https://github.com/DavidHDev/react-bits).
7
+
8
+ MIT License
9
+
10
+ Copyright (c) 2026 David Haz
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.
package/_config.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  ######## Stellar info ########
2
2
  stellar:
3
- version: '1.42.0'
3
+ version: '1.43.0'
4
4
  homepage: 'https://xaoxuu.com/wiki/stellar/'
5
5
  repo: 'https://github.com/xaoxuu/hexo-theme-stellar'
6
6
  main_css: /css/main.css
@@ -299,9 +299,9 @@ comments:
299
299
  # Waline
300
300
  # https://waline.js.org/
301
301
  waline:
302
- js: https://gcore.jsdelivr.net/npm/@waline/client@3.1/dist/waline.js
303
- css: https://gcore.jsdelivr.net/npm/@waline/client@3.1/dist/waline.css
304
- meta_css: https://gcore.jsdelivr.net/npm/@waline/client@3.1/dist/waline-meta.css
302
+ js: https://gcore.jsdelivr.net/npm/@waline/client@3.15.2/dist/waline.js
303
+ css: https://gcore.jsdelivr.net/npm/@waline/client@3.15.2/dist/waline.css
304
+ meta_css: https://gcore.jsdelivr.net/npm/@waline/client@3.15.2/dist/waline-meta.css
305
305
  # Waline server address url, you should set this to your own link
306
306
  serverURL: https://waline.vercel.app
307
307
  # If false, comment count will only be displayed in post page, not in home page
@@ -370,6 +370,18 @@ footer:
370
370
  # comments:
371
371
  # icon: '<img src="https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.12/social/942ebbf1a4b91.svg"/>'
372
372
  # url: /about/#comments
373
+ # spacer: # 弹性占位项:将其后的 social 按钮推至右侧
374
+ # links:
375
+ # type: dropdown
376
+ # icon: default:documents
377
+ # title: 更多链接
378
+ # items:
379
+ # - icon: default:documents
380
+ # title: 文档
381
+ # url: /wiki/
382
+ # - icon: default:github
383
+ # title: GitHub
384
+ # url: https://github.com/
373
385
  sitemap:
374
386
  # - title: 博客
375
387
  # items:
@@ -657,7 +669,7 @@ plugins:
657
669
  # ```
658
670
  mermaid:
659
671
  enable: # true # 可以在特定文章的 front-matter 中设置 mermaid: true 来开启,也可以在这里设置全局开启
660
- style_optimization: false # use custom style in stellar
672
+ style_optimization: false # true: use custom style in Stellar; false: use Mermaid official theme
661
673
  # js: https://unpkg.com/mermaid@11/dist/mermaid.min.js
662
674
  js: https://gcore.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js
663
675
  # Available themes: default | dark | forest | neutral
@@ -686,9 +698,10 @@ plugins:
686
698
 
687
699
  style:
688
700
  prefers_theme: auto # auto / light / dark
701
+ page_transition:
702
+ enable: true # 同源整页导航使用原生 View Transition;旧浏览器自动回退普通导航
689
703
  font-size:
690
- root: 16px # 改这个会影响全局所有文字的字号
691
- body: 17px # 影响正文区域的字号,如果改成 px 则不受 root 影响
704
+ root: 16px # 桌面端全局字号基准;移动端自动增加 2px
692
705
  code: 85% # 相较于其所在行的文本大小,建议用百分比
693
706
  codeblock: 0.8125rem # 13px
694
707
  font-family:
@@ -757,9 +770,6 @@ default:
757
770
  project: https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.12/image/2779789.png
758
771
  banner: https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.12/banner/books.jpg
759
772
  topic: https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.12/image/10433048.png
760
- # loading 兼容回退:新值位于 _data/icons.yml(default:loading-placeholder)
761
- loading: https://api.iconify.design/eos-icons:three-dots-loading.svg?color=%231cd0fd
762
- # loading: https://github.githubassets.com/images/mona-loading-dark.gif
763
773
  # image_onerror 兼容回退:新值位于 _data/icons.yml(image:onerror)
764
774
  image_onerror: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='2rem' height='2rem' viewBox='0 0 24 24'%3E%3C!-- Icon from Solar by 480 Design - https://creativecommons.org/licenses/by/4.0/ --%3E%3Cpath fill='%23F44336' d='M22 12.698c-.002 1.47-.013 2.718-.096 3.743c-.097 1.19-.296 2.184-.74 3.009a4.2 4.2 0 0 1-.73.983c-.833.833-1.893 1.21-3.237 1.39C15.884 22 14.2 22 12.053 22h-.106c-2.148 0-3.83 0-5.144-.177c-1.343-.18-2.404-.557-3.236-1.39c-.738-.738-1.12-1.656-1.322-2.795c-.2-1.12-.236-2.512-.243-4.241Q1.999 12.737 2 12v-.054c0-2.148 0-3.83.177-5.144c.18-1.343.557-2.404 1.39-3.236s1.893-1.21 3.236-1.39c1.168-.157 2.67-.175 4.499-.177a.697.697 0 1 1 0 1.396c-1.855.002-3.234.018-4.313.163c-1.189.16-1.906.464-2.436.994S3.72 5.8 3.56 6.99C3.397 8.2 3.395 9.788 3.395 12v.784l.932-.814a2.14 2.14 0 0 1 2.922.097l3.99 3.99a1.86 1.86 0 0 0 2.385.207l.278-.195a2.79 2.79 0 0 1 3.471.209l2.633 2.37c.265-.557.423-1.288.507-2.32c.079-.972.09-2.152.091-3.63a.698.698 0 0 1 1.396 0' opacity='.5'/%3E%3Cpath fill='%23F44336' fill-rule='evenodd' d='M17.5 11c-2.121 0-3.182 0-3.841-.659S13 8.621 13 6.5s0-3.182.659-3.841S15.379 2 17.5 2s3.182 0 3.841.659S22 4.379 22 6.5s0 3.182-.659 3.841S19.621 11 17.5 11m-1.47-7.03a.75.75 0 1 0-1.06 1.06l1.47 1.47l-1.47 1.47a.75.75 0 0 0 1.06 1.06l1.47-1.47l1.47 1.47a.75.75 0 1 0 1.06-1.06L18.56 6.5l1.47-1.47a.75.75 0 0 0-1.06-1.06L17.5 5.44z' clip-rule='evenodd'/%3E%3C/svg%3E"
765
775
 
package/_data/icons.yml CHANGED
@@ -14,7 +14,7 @@
14
14
  #
15
15
  # 读取方式:
16
16
  # 模板 / 标签脚本:icon('key') 或 ctx.utils.icon('key')
17
- # 首屏关键图标(搜索、菜单、leftbar/rightbar、goback)由模板调用处传第三参
17
+ # 首屏关键图标(搜索、菜单、leftbar/rightbar、arrow-left)由模板调用处传第三参
18
18
  # inline=true 保持内联;其余图标输出 <svg class="icon" data-icon="key"> 占位符,
19
19
  # 由 /js/icons.js 异步拉取构建期生成的 js/icons/{ns}.json 后原位替换为完整 SVG
20
20
  # (最终 DOM 与内联一致,CSS 钩子不受影响)。
@@ -45,14 +45,15 @@ default:search: <svg t="1705074644177" viewBox="0 0 1025 1024" version="1.1" xml
45
45
  default:leftbar: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-width="1.5"><path d="M2 11c0-3.771 0-5.657 1.172-6.828C4.343 3 6.229 3 10 3h4c3.771 0 5.657 0 6.828 1.172C22 5.343 22 7.229 22 11v2c0 3.771 0 5.657-1.172 6.828C19.657 21 17.771 21 14 21h-4c-3.771 0-5.657 0-6.828-1.172C2 18.657 2 16.771 2 13z"/><path id="sep" stroke-linecap="round" d="M5.5 10h6m-5 4h4m4.5 7V3"/></g></svg>
46
46
  # 打开右侧栏 / TOC(移动端悬浮按钮)——同上,与 leftbar 配套
47
47
  default:rightbar: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6h11m-11 6h11m-11 6h11M4 6h1v4m-1 0h2m0 8H4c0-1 2-2 2-3s-1-1.5-2-1"/></svg>
48
- # 异步数据加载动画(utils.onLoading,客户端注册表)——自带旋转动画,无 Solar 等价
49
- default:loading-spinner: <svg xmlns="http://www.w3.org/2000/svg" width="2em" height="2em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-width="2"><path stroke-dasharray="60" stroke-dashoffset="60" stroke-opacity=".3" d="M12 3C16.9706 3 21 7.02944 21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3Z"><animate fill="freeze" attributeName="stroke-dashoffset" dur="1.3s" values="60;0"/></path><path stroke-dasharray="15" stroke-dashoffset="15" d="M12 3C16.9706 3 21 7.02944 21 12"><animate fill="freeze" attributeName="stroke-dashoffset" dur="0.3s" values="15;0"/><animateTransform attributeName="transform" dur="1.5s" repeatCount="indefinite" type="rotate" values="0 12 12;360 12 12"/></path></g></svg>
50
- # 懒加载占位背景图 URL(iconData() 读取,兼容 default.loading)——外部服务 URL,非内联图标
51
- default:loading-placeholder: https://api.iconify.design/eos-icons:three-dots-loading.svg?color=%231cd0fd
48
+ # 加载动画(三圆点,SMIL 动画)——内联 SVG,fill 用 currentColor 跟随上下文颜色;经 head.ejs 生成 --icon-loading CSS 变量,用于图片懒加载、评论区与异步数据服务占位
49
+ default:loading: <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24"><circle cx="18" cy="12" r="0" fill="currentColor"><animate attributeName="r" begin=".67" calcMode="spline" dur="1.5s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" repeatCount="indefinite" values="0;2;0;0"/></circle><circle cx="12" cy="12" r="0" fill="currentColor"><animate attributeName="r" begin=".33" calcMode="spline" dur="1.5s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" repeatCount="indefinite" values="0;2;0;0"/></circle><circle cx="6" cy="12" r="0" fill="currentColor"><animate attributeName="r" begin="0" calcMode="spline" dur="1.5s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" repeatCount="indefinite" values="0;2;0;0"/></circle></svg>
52
50
 
53
51
 
54
52
  # ================ 主题基础功能 · default 内置图标 · 主视觉 ================
55
53
  # 来源:Solar by 480 Design(CC BY 4.0),24×24,fill 用 currentColor
54
+ # Wiki Hero:源码、复制与在线演示(Solar 风格,统一 default 命名空间)
55
+ default:github: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" d="M12 2a10 10 0 0 0-3.162 19.487c.5.093.683-.217.683-.483v-1.87c-2.782.605-3.369-1.181-3.369-1.181c-.455-1.156-1.11-1.464-1.11-1.464c-.908-.62.069-.608.069-.608c1.004.07 1.532 1.03 1.532 1.03c.892 1.528 2.341 1.087 2.91.831c.09-.646.349-1.087.635-1.337c-2.22-.252-4.555-1.11-4.555-4.944c0-1.093.39-1.987 1.03-2.687c-.103-.253-.447-1.272.098-2.65c0 0 .84-.269 2.75 1.027A9.55 9.55 0 0 1 12 6.8c.85.004 1.705.115 2.503.337c1.909-1.296 2.747-1.027 2.747-1.027c.546 1.378.202 2.397.1 2.65c.64.7 1.027 1.594 1.027 2.687c0 3.843-2.34 4.689-4.566 4.936c.359.31.679.92.679 1.854v2.748c0 .269.18.582.688.483A10.002 10.002 0 0 0 12 2"/></svg>
56
+ default:monitor: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" d="M3 7c0-1.886 0-2.828.586-3.414C4.172 3 5.114 3 7 3h10c1.886 0 2.828 0 3.414.586C21 4.172 21 5.114 21 7v6c0 1.886 0 2.828-.586 3.414C19.828 17 18.886 17 17 17H7c-1.886 0-2.828 0-3.414-.586C3 15.828 3 14.886 3 13z" opacity=".5"/><path fill="currentColor" d="M12.75 17.75h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V17h1.5zM7 6.25h10a.75.75 0 0 1 0 1.5H7a.75.75 0 0 1 0-1.5"/></svg>
56
57
  # 翻页 / 轮播导航(左)
57
58
  default:arrow-left: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Solar by 480 Design - https://creativecommons.org/licenses/by/4.0/ --><path fill="currentColor" d="M17.75 19a.75.75 0 0 1-1.32.488l-6-7a.75.75 0 0 1 0-.976l6-7A.75.75 0 0 1 17.75 5z" opacity=".5"/><path fill="currentColor" fill-rule="evenodd" d="M13.488 19.57a.75.75 0 0 0 .081-1.058L7.988 12l5.581-6.512a.75.75 0 1 0-1.138-.976l-6 7a.75.75 0 0 0 0 .976l6 7a.75.75 0 0 0 1.057.082" clip-rule="evenodd"/></svg>
58
59
  # 翻页 / 轮播导航(右)
@@ -82,8 +83,6 @@ example:planet: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" v
82
83
  example:notebook: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M14.25 4.48v3.057c0 .111 0 .27.02.406a.936.936 0 0 0 .445.683a.96.96 0 0 0 .783.072c.13-.04.272-.108.378-.159L17 8.005l1.124.534c.106.05.248.119.378.16a.958.958 0 0 0 .783-.073a.936.936 0 0 0 .444-.683c.021-.136.021-.295.021-.406V3.031c.113-.005.224-.01.332-.013C21.154 2.98 22 3.86 22 4.933v11.21c0 1.112-.906 2.01-2.015 2.08c-.97.06-2.108.179-2.985.41c-1.082.286-1.99 1.068-3.373 1.436c-.626.167-1.324.257-1.627.323V5.174c.32-.079 1.382-.203 1.674-.371c.184-.107.377-.216.576-.323m5.478 8.338a.75.75 0 0 1-.546.91l-4 1a.75.75 0 0 1-.364-1.456l4-1a.75.75 0 0 1 .91.546" clip-rule="evenodd"/><path fill="currentColor" d="M18.25 3.151c-.62.073-1.23.18-1.75.336a8.2 8.2 0 0 0-.75.27v3.182l.75-.356l.008-.005a1.13 1.13 0 0 1 .492-.13c.047 0 .094.004.138.01c.175.029.315.1.354.12l.009.005l.749.356V3.647z"/><path fill="currentColor" d="M12 5.214c-.334-.064-1.057-.161-1.718-.339C8.938 4.515 8.05 3.765 7 3.487c-.887-.234-2.041-.352-3.018-.412C2.886 3.007 2 3.9 2 4.998v11.146c0 1.11.906 2.01 2.015 2.079c.97.06 2.108.179 2.985.41c.486.129 1.216.431 1.873.726c1.005.451 2.052.797 3.127 1.034z" opacity=".5"/><path fill="currentColor" d="M4.273 12.818a.75.75 0 0 1 .91-.545l4 1a.75.75 0 1 1-.365 1.455l-4-1a.75.75 0 0 1-.545-.91m.909-4.545a.75.75 0 1 0-.364 1.455l4 1a.75.75 0 0 0 .364-1.455z"/></svg>
83
84
 
84
85
  # ================ 主题基础功能 · default 内置图标 · 界面控件与信息展示 ================
85
- # 返回按钮(侧边栏 logo;banner / about 标签插件复用)
86
- default:goback: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Solar by 480 Design - https://creativecommons.org/licenses/by/4.0/ --><g fill="currentColor"><path d="M11.5956 8.30273L8.16485 11.6296C7.94505 11.8428 7.94505 12.1573 8.16485 12.3704L14.7953 18.8001C15.2091 19.2013 16 18.9581 16 18.4297V12.7071L11.5956 8.30273Z"/><path d="M15.9999 11.2929L15.9999 5.5703C15.9999 5.04189 15.2089 4.79869 14.7952 5.1999L12.3135 7.60648L15.9999 11.2929Z" opacity=".5"/></g></svg>
87
86
  # 编辑本文(contributors)
88
87
  default:edit: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Solar by 480 Design - https://creativecommons.org/licenses/by/4.0/ --><g fill="currentColor"><circle cx="12" cy="12" r="10" opacity=".5"/><path d="M13.9261 14.3018C14.1711 14.1107 14.3933 13.8885 14.8377 13.4441L20.378 7.90374C20.512 7.7698 20.4507 7.53909 20.2717 7.477C19.6178 7.25011 18.767 6.82414 17.9713 6.02835C17.1755 5.23257 16.7495 4.38186 16.5226 3.72788C16.4605 3.54892 16.2298 3.48761 16.0959 3.62156L10.5555 9.16192C10.1111 9.60634 9.88888 9.82854 9.69778 10.0736C9.47235 10.3626 9.27908 10.6753 9.12139 11.0062C8.98771 11.2867 8.88834 11.5848 8.68959 12.181L8.43278 12.9515L8.02443 14.1765L7.64153 15.3252C7.54373 15.6186 7.6201 15.9421 7.8388 16.1608C8.0575 16.3795 8.38099 16.4559 8.67441 16.3581L9.82308 15.9752L11.0481 15.5668L11.8186 15.31L11.8186 15.31C12.4148 15.1113 12.7129 15.0119 12.9934 14.8782C13.3243 14.7205 13.637 14.5273 13.9261 14.3018Z"/><path d="M22.1127 6.16905C23.2952 4.98656 23.2952 3.06936 22.1127 1.88687C20.9302 0.704377 19.013 0.704377 17.8306 1.88687L17.6524 2.06499C17.4806 2.23687 17.4027 2.47695 17.4456 2.7162C17.4726 2.8667 17.5227 3.08674 17.6138 3.3493C17.796 3.87439 18.14 4.56368 18.788 5.21165C19.4359 5.85961 20.1252 6.20364 20.6503 6.38581C20.9129 6.4769 21.1329 6.52697 21.2834 6.55399C21.5227 6.59693 21.7627 6.51905 21.9346 6.34717L22.1127 6.16905Z"/></g></svg>
89
88
  # 主题切换按钮
@@ -100,10 +99,12 @@ default:category-open: <svg xmlns="http://www.w3.org/2000/svg" width="32" height
100
99
  # 置顶标记
101
100
  # 激活态图标,SVG 内必须包含 class="active-icon"
102
101
  default:bookmark.active: <svg class="active-icon" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Solar by 480 Design - https://creativecommons.org/licenses/by/4.0/ --><g fill="currentColor"><path d="M21 11.0975V16.0909C21 19.1875 21 20.7358 20.2659 21.4123C19.9158 21.735 19.4739 21.9377 19.0031 21.9915C18.016 22.1045 16.8633 21.0849 14.5578 19.0458C13.5388 18.1445 13.0292 17.6938 12.4397 17.5751C12.1494 17.5166 11.8506 17.5166 11.5603 17.5751C10.9708 17.6938 10.4612 18.1445 9.44216 19.0458C7.13673 21.0849 5.98402 22.1045 4.99692 21.9915C4.52615 21.9377 4.08421 21.735 3.73411 21.4123C3 20.7358 3 19.1875 3 16.0909V11.0975C3 6.80891 3 4.6646 4.31802 3.3323C5.63604 2 7.75736 2 12 2C16.2426 2 18.364 2 19.682 3.3323C21 4.6646 21 6.80891 21 11.0975Z" opacity=".5"/><path d="M9 5.25C8.58579 5.25 8.25 5.58579 8.25 6C8.25 6.41421 8.58579 6.75 9 6.75H15C15.4142 6.75 15.75 6.41421 15.75 6C15.75 5.58579 15.4142 5.25 15 5.25H9Z"/></g></svg>
103
- # 评论系统加载中,SVG 内必须包含 class="loading"
104
- default:loading: <svg class="loading" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Solar by 480 Design - https://creativecommons.org/licenses/by/4.0/ --><g fill="currentColor"><path d="M12.0789 2.25C7.2854 2.25 3.34478 5.913 2.96055 10.5833H2.00002C1.69614 10.5833 1.42229 10.7667 1.30655 11.0477C1.19081 11.3287 1.25606 11.6517 1.47178 11.8657L3.15159 13.5324C3.444 13.8225 3.91567 13.8225 4.20808 13.5324L5.88789 11.8657C6.10361 11.6517 6.16886 11.3287 6.05312 11.0477C5.93738 10.7667 5.66353 10.5833 5.35965 10.5833H4.4668C4.84652 6.75167 8.10479 3.75 12.0789 3.75C14.8484 3.75 17.2727 5.20845 18.6156 7.39279C18.8325 7.74565 19.2944 7.85585 19.6473 7.63892C20.0002 7.42199 20.1104 6.96007 19.8934 6.60721C18.2871 3.99427 15.3873 2.25 12.0789 2.25Z"/><path d="M20.8412 10.4666C20.5491 10.1778 20.0789 10.1778 19.7868 10.4666L18.1005 12.1333C17.8842 12.3471 17.8185 12.6703 17.934 12.9517C18.0496 13.233 18.3236 13.4167 18.6278 13.4167H19.5269C19.1456 17.2462 15.876 20.25 11.8828 20.25C9.10034 20.25 6.66595 18.7903 5.31804 16.6061C5.10051 16.2536 4.63841 16.1442 4.28591 16.3618C3.93342 16.5793 3.82401 17.0414 4.04154 17.3939C5.65416 20.007 8.56414 21.75 11.8828 21.75C16.6907 21.75 20.6476 18.0892 21.0332 13.4167H22.0002C22.3044 13.4167 22.5784 13.233 22.694 12.9517C22.8096 12.6703 22.7438 12.3471 22.5275 12.1333L20.8412 10.4666Z" opacity=".5"/></g></svg>
105
102
 
106
103
  # ================ 主题基础功能 · default 内置图标 · 数据服务与兜底 ================
104
+ # Wiki 卡片适用平台(Solar 多设备图标)
105
+ default:platforms: <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24"><!-- Icon from Solar by 480 Design - https://creativecommons.org/licenses/by/4.0/ --><g fill="currentColor"><path d="M14.0516 2C15.7318 1.99999 17.0627 1.99997 18.1043 2.14245C19.1762 2.28908 20.0438 2.59803 20.728 3.29418C21.4122 3.99033 21.7159 4.87308 21.86 5.9637C22 7.02342 22 8.37752 22 10.087V10.0871V13.913V13.913C22 15.6225 22 16.9766 21.86 18.0363C21.7159 19.1269 21.4122 20.0097 20.728 20.7058C20.0438 21.402 19.1762 21.7109 18.1043 21.8575C17.0627 22 15.7318 22 14.0517 22H14.0516H13.9484H13.9483C12.2681 22 10.9373 22 9.89575 21.8575C8.82382 21.7109 7.95621 21.402 7.27199 20.7058C6.58778 20.0097 6.28413 19.1269 6.14001 18.0363C5.99998 16.9766 5.99999 15.6225 6 13.913V13.9129V10.087V10.087C5.99999 8.3775 5.99998 7.02343 6.14001 5.9637C6.28413 4.87308 6.58778 3.99033 7.27199 3.29418C7.95621 2.59803 8.82382 2.28908 9.89575 2.14245C10.9373 1.99997 12.2682 1.99999 13.9484 2H13.9484H14.0516H14.0516Z" opacity=".5"/><path d="M12 18.25C11.5858 18.25 11.25 18.5858 11.25 19C11.25 19.4142 11.5858 19.75 12 19.75H17C17.4142 19.75 17.75 19.4142 17.75 19C17.75 18.5858 17.4142 18.25 17 18.25H12Z"/><path d="M2 14.5C2 13.0955 2 12.3933 2.33706 11.8889C2.48298 11.6705 2.67048 11.483 2.88886 11.3371C3.39331 11 4.09554 11 5.5 11C6.90446 11 7.60669 11 8.11114 11.3371C8.32952 11.483 8.51702 11.6705 8.66294 11.8889C9 12.3933 9 13.0955 9 14.5V18.5C9 19.9045 9 20.6067 8.66294 21.1111C8.51702 21.3295 8.32952 21.517 8.11114 21.6629C7.60669 22 6.90446 22 5.5 22C4.09554 22 3.39331 22 2.88886 21.6629C2.67048 21.517 2.48298 21.3295 2.33706 21.1111C2 20.6067 2 19.9045 2 18.5V14.5Z"/></g></svg>
106
+ # Wiki 卡片热度(Solar fire-bold-duotone;数值仍取 GitHub stargazers_count)
107
+ default:fire: <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24"><!-- Icon from Solar by 480 Design - https://creativecommons.org/licenses/by/4.0/ --><g fill="currentColor"><path d="M12.8324 21.8013C15.9583 21.1747 20 18.926 20 13.1112C20 7.8196 16.1267 4.29593 13.3415 2.67685C12.7235 2.31757 12 2.79006 12 3.50492V5.3334C12 6.77526 11.3938 9.40711 9.70932 10.5018C8.84932 11.0607 7.92052 10.2242 7.816 9.20388L7.73017 8.36604C7.6304 7.39203 6.63841 6.80075 5.85996 7.3946C4.46147 8.46144 3 10.3296 3 13.1112C3 20.2223 8.28889 22.0001 10.9333 22.0001C11.0871 22.0001 11.2488 21.9955 11.4171 21.9858C11.863 21.9296 11.4171 22.085 12.8324 21.8013Z" opacity=".5"/><path d="M8 18.4442C8 21.064 10.1113 21.8742 11.4171 21.9858C11.863 21.9296 11.4171 22.085 12.8324 21.8013C13.871 21.4343 15 20.4922 15 18.4442C15 17.1465 14.1814 16.3459 13.5401 15.9711C13.3439 15.8564 13.1161 16.0008 13.0985 16.2273C13.0429 16.9454 12.3534 17.5174 11.8836 16.9714C11.4685 16.4889 11.2941 15.784 11.2941 15.3331V14.7439C11.2941 14.3887 10.9365 14.1533 10.631 14.3346C9.49507 15.0085 8 16.3949 8 18.4442Z"/></g></svg>
107
108
  # weibo / timeline 评论数(客户端注册表)
108
109
  # 异步数据加载失败图标(utils.onLoadFailure,客户端注册表)
109
110
  default:warning: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Solar by 480 Design - https://creativecommons.org/licenses/by/4.0/ --><g fill="currentColor"><path d="M12 3C9.68925 3 8.23007 5.58716 5.31171 10.7615L4.94805 11.4063C2.52291 15.7061 1.31034 17.856 2.40626 19.428C3.50217 21 6.21356 21 11.6363 21H12.3637C17.7864 21 20.4978 21 21.5937 19.428C22.6897 17.856 21.4771 15.7061 19.0519 11.4063L18.6883 10.7615C15.7699 5.58716 14.3107 3 12 3Z" opacity=".5"/><path d="M12 7.25C12.4142 7.25 12.75 7.58579 12.75 8V13C12.75 13.4142 12.4142 13.75 12 13.75C11.5858 13.75 11.25 13.4142 11.25 13V8C11.25 7.58579 11.5858 7.25 12 7.25Z"/><path d="M12 17C12.5523 17 13 16.5523 13 16C13 15.4477 12.5523 15 12 15C11.4477 15 11 15.4477 11 16C11 16.5523 11.4477 17 12 17Z"/></g></svg>
package/languages/en.yml CHANGED
@@ -13,9 +13,14 @@ btn:
13
13
  archives: Archives
14
14
  all_posts: All Posts
15
15
  getting_started: Getting Started
16
+ docs: Documentation
17
+ source: Source
18
+ copy: Copy
16
19
  edit: Edit This Page
17
20
  top: Scroll to Top
18
21
  comments: Join Discussion
22
+ expand_posts: Show %s more posts
23
+ collapse_posts: Collapse
19
24
 
20
25
  meta:
21
26
  recent_update: Recent Update
@@ -37,6 +42,11 @@ meta:
37
42
  license: License
38
43
  share: Share
39
44
  contributors: Page Contributors
45
+ available: Available for
46
+ wiki_project: Wiki project
47
+ project_preview: Project preview
48
+ install_method: Installation method
49
+ command: Command %s
40
50
  word_count: '%s words'
41
51
  reading_time: '%s min read'
42
52
  ai_label:
@@ -64,6 +74,7 @@ search:
64
74
 
65
75
  message:
66
76
  copied: Copied!
77
+ fetching_latest_release: '%s is fetching the latest release…'
67
78
  theme_switched:
68
79
  light: Switched to Light Mode
69
80
  dark: Switched to Dark Mode
@@ -13,9 +13,14 @@ btn:
13
13
  archives: 归档
14
14
  all_posts: 所有文章
15
15
  getting_started: 开始使用
16
+ docs: 文档
17
+ source: 源码
18
+ copy: 复制
16
19
  edit: 编辑本文
17
20
  top: 回到顶部
18
21
  comments: 参与讨论
22
+ expand_posts: 展开其余 %s 篇
23
+ collapse_posts: 收起
19
24
 
20
25
  meta:
21
26
  recent_update: 最近更新
@@ -37,6 +42,11 @@ meta:
37
42
  license: 许可协议
38
43
  share: 分享文章
39
44
  contributors: 本文贡献者
45
+ available: 适用于
46
+ wiki_project: Wiki 项目
47
+ project_preview: 项目预览
48
+ install_method: 安装方式
49
+ command: 命令 %s
40
50
  word_count: '%s 字'
41
51
  reading_time: '预计阅读 %s 分钟'
42
52
  ai_label:
@@ -64,6 +74,7 @@ search:
64
74
 
65
75
  message:
66
76
  copied: 复制成功
77
+ fetching_latest_release: '%s 正在获取最新版本…'
67
78
  theme_switched:
68
79
  light: 切换到浅色模式
69
80
  dark: 切换到深色模式
@@ -13,9 +13,14 @@ btn:
13
13
  archives: 封存
14
14
  all_posts: 所有網誌
15
15
  getting_started: 開始使用
16
+ docs: 文件
17
+ source: 原始碼
18
+ copy: 複製
16
19
  edit: 編輯本文
17
20
  top: 回到頂部
18
21
  comments: 參與討論
22
+ expand_posts: 展開其餘 %s 篇
23
+ collapse_posts: 收起
19
24
 
20
25
  meta:
21
26
  recent_update: 最近更新
@@ -37,6 +42,11 @@ meta:
37
42
  license: 授權條款
38
43
  share: 分享文章
39
44
  contributors: 本文貢獻者
45
+ available: 適用於
46
+ wiki_project: Wiki 專案
47
+ project_preview: 專案預覽
48
+ install_method: 安裝方式
49
+ command: 指令 %s
40
50
  word_count: '%s 字'
41
51
  reading_time: '預計閱讀 %s 分鐘'
42
52
  ai_label:
@@ -64,6 +74,7 @@ search:
64
74
 
65
75
  message:
66
76
  copied: 複製成功
77
+ fetching_latest_release: '%s 正在取得最新版本…'
67
78
  theme_switched:
68
79
  light: 切換到淺色模式
69
80
  dark: 切換到深色模式
@@ -11,7 +11,7 @@ function layoutDiv() {
11
11
  el += ' ' + key + '="' + cfg[key] + '"';
12
12
  }
13
13
  }
14
- el += `>${icon('default:loading')}</div>`
14
+ el += '><div class="lazy-icon"></div></div>'
15
15
  return el;
16
16
  }
17
17
  %>
@@ -17,6 +17,6 @@ function layoutDiv() {
17
17
  }
18
18
  %>
19
19
 
20
- <%- icon('default:loading') %>
20
+ <div class="lazy-icon"></div>
21
21
 
22
22
  <%- layoutDiv() %>
@@ -20,6 +20,6 @@ function layoutDiv() {
20
20
  }
21
21
  %>
22
22
 
23
- <%- icon('default:loading') %>
23
+ <div class="lazy-icon"></div>
24
24
 
25
25
  <%- layoutDiv() %>
@@ -11,7 +11,7 @@ function layoutDiv() {
11
11
  el += ' ' + key + '="' + cfg[key] + '"';
12
12
  }
13
13
  }
14
- el += `>${icon('default:loading')}</div>`
14
+ el += '><div class="lazy-icon"></div></div>'
15
15
  return el;
16
16
  }
17
17
  %>
@@ -17,6 +17,6 @@ function layoutDiv() {
17
17
  }
18
18
  %>
19
19
 
20
- <%- icon('default:loading') %>
20
+ <div class="lazy-icon"></div>
21
21
 
22
22
  <%- layoutDiv() %>
@@ -11,7 +11,7 @@ function layoutDiv() {
11
11
  el += ' ' + key + '="' + cfg[key] + '"';
12
12
  }
13
13
  }
14
- el += `>${icon('default:loading')}</div>`
14
+ el += '><div class="lazy-icon"></div></div>'
15
15
  return el;
16
16
  }
17
17
  %>
@@ -0,0 +1,44 @@
1
+ <%
2
+ var entry = item || {}
3
+ var entryTitle = entry.title == null ? '' : String(entry.title)
4
+ var entryPrefix = entry.prefix == null ? '' : String(entry.prefix)
5
+ var entryDescription = entry.description == null ? '' : String(entry.description)
6
+ var entryMeta = entry.meta == null ? '' : String(entry.meta)
7
+ var entryClassName = typeof entry.className === 'string' ? entry.className.trim() : ''
8
+ var entryClasses = 'ui-collection__item'
9
+ if (entry.active) {
10
+ entryClasses += ' is-active'
11
+ }
12
+ if (entryClassName.length > 0) {
13
+ entryClasses += ' ' + entryClassName
14
+ }
15
+ var entryStyle = ''
16
+ if (entry.theme) {
17
+ entryStyle += '--item-theme:' + String(entry.theme) + ';'
18
+ }
19
+ if (entry.depth > 0) {
20
+ entryStyle += '--ui-item-depth:' + parseInt(entry.depth, 10) + ';'
21
+ }
22
+ var entryGradientId = entry.gradientId ? String(entry.gradientId).replace(/[^a-zA-Z0-9_-]/g, '-') : ''
23
+ var entryGradientRef = entry.gradientRef ? String(entry.gradientRef).replace(/[^a-zA-Z0-9_-]/g, '-') : ''
24
+ if (entryGradientId.length > 0 || entryGradientRef.length > 0) {
25
+ entryStyle += '--item-grad:url(#' + (entryGradientId || entryGradientRef) + ');'
26
+ }
27
+ var showTitle = entry.showTitle !== false
28
+ var hasContent = showTitle || entryPrefix.length > 0 || entryDescription.length > 0 || entryMeta.length > 0
29
+ %>
30
+ <a class="<%= entryClasses %>" href="<%= entry.href %>" title="<%= entryTitle %>"<% if (entry.active) { %> aria-current="page"<% } %><% if (entryStyle.length > 0) { %> style="<%= entryStyle %>"<% } %>>
31
+ <%- typeof entry.before === 'string' ? entry.before : '' %>
32
+ <% if (entry.icon) { %><span class="ui-collection__leading"><%- icon(entry.icon, 'no-lazy', true) %></span><% } %>
33
+ <% if (hasContent) { %>
34
+ <span class="ui-collection__content">
35
+ <% if (entryPrefix.length > 0) { %><span class="ui-collection__prefix"><%= entryPrefix %></span><% } %>
36
+ <% if (showTitle) { %><span class="ui-collection__title"><%= entryTitle %></span><% } %>
37
+ <% if (entryDescription.length > 0) { %><span class="ui-collection__description"><%= entryDescription %></span><% } %>
38
+ <% if (entryMeta.length > 0) { %><span class="ui-collection__meta"><%= entryMeta %></span><% } %>
39
+ </span>
40
+ <% } %>
41
+ <%- typeof entry.after === 'string' ? entry.after : '' %>
42
+ <% if (entry.active && entry.indicator !== false) { %><span class="ui-collection__indicator"></span><% } %>
43
+ <% if (entryGradientId.length > 0) { %><%- partial('_partial/sidebar/grad-def', {id: entryGradientId}) %><% } %>
44
+ </a>
@@ -0,0 +1,26 @@
1
+ <%
2
+ var collectionOptions = typeof options === 'object' && options ? options : {}
3
+ var collectionItems = Array.isArray(collectionOptions.items) ? collectionOptions.items.filter(function(entry) {
4
+ return entry && entry.href != null
5
+ }) : []
6
+ if (collectionItems.length > 0) {
7
+ var collectionLayout = collectionOptions.layout === 'grid' ? 'grid' : 'list'
8
+ var collectionVariant = ['nav', 'summary', 'icon'].includes(collectionOptions.variant) ? collectionOptions.variant : 'nav'
9
+ var collectionDensity = collectionOptions.density === 'compact' ? 'compact' : 'auto'
10
+ var collectionColumns = parseInt(collectionOptions.columns, 10)
11
+ if (!Number.isFinite(collectionColumns) || collectionColumns < 1) {
12
+ collectionColumns = 1
13
+ }
14
+ var collectionClassName = typeof collectionOptions.className === 'string' ? collectionOptions.className.trim() : ''
15
+ var collectionClasses = 'ui-collection'
16
+ if (collectionClassName.length > 0) {
17
+ collectionClasses += ' ' + collectionClassName
18
+ }
19
+ var collectionStyle = collectionLayout === 'grid' ? ' style="--ui-columns:' + collectionColumns + '"' : ''
20
+ %>
21
+ <div class="<%= collectionClasses %>" data-layout="<%= collectionLayout %>" data-variant="<%= collectionVariant %>" data-density="<%= collectionDensity %>"<%- collectionStyle %>>
22
+ <% collectionItems.forEach(function(entry) { %>
23
+ <%- partial('_partial/components/collection-item', {item: entry}) %>
24
+ <% }) %>
25
+ </div>
26
+ <% } %>
@@ -0,0 +1,35 @@
1
+ <%
2
+ var frameBody = typeof body === 'string' ? body.trim() : ''
3
+ var frameFooter = typeof footer === 'string' ? footer.trim() : ''
4
+ if (frameBody.length > 0 || frameFooter.length > 0) {
5
+ var frameClassName = typeof className === 'string' ? className.trim() : ''
6
+ var frameTitle = typeof title === 'undefined' || title == null ? '' : String(title)
7
+ var frameAction = typeof action === 'string' ? action : ''
8
+ var frameAttrs = typeof attrs === 'object' && attrs ? attrs : {}
9
+ var frameReveal = typeof reveal === 'undefined' || reveal !== false
10
+ var frameClasses = 'widget-wrapper'
11
+ if (frameReveal) {
12
+ frameClasses += scrollreveal(' ')
13
+ }
14
+ if (frameClassName.length > 0) {
15
+ frameClasses += ' ' + frameClassName
16
+ }
17
+ var attrHtml = ''
18
+ Object.keys(frameAttrs).forEach(function(key) {
19
+ if (frameAttrs[key] == null || frameAttrs[key] === false) {
20
+ return
21
+ }
22
+ attrHtml += ' ' + escape_html(key) + '="' + escape_html(frameAttrs[key]) + '"'
23
+ })
24
+ %>
25
+ <widget class="<%= frameClasses %>"<%- attrHtml %>>
26
+ <% if (frameTitle.length > 0 || frameAction.length > 0) { %>
27
+ <div class="widget-header dis-select">
28
+ <% if (frameTitle.length > 0) { %><span class="name"><%= frameTitle %></span><% } %>
29
+ <%- frameAction %>
30
+ </div>
31
+ <% } %>
32
+ <% if (frameBody.length > 0) { %><div class="widget-body"><%- frameBody %></div><% } %>
33
+ <%- frameFooter %>
34
+ </widget>
35
+ <% } %>