hexo-theme-stellar 1.44.0 → 2.0.0-rc.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 (377) hide show
  1. package/CHANGELOG.md +63 -5
  2. package/CONTRIBUTING.md +29 -120
  3. package/README.md +66 -73
  4. package/README_EN.md +66 -73
  5. package/_config.yml +890 -743
  6. package/_data/icons.yml +43 -171
  7. package/_data/widgets.yml +1 -1
  8. package/assets/icon-v2-x512.webp +0 -0
  9. package/languages/en.yml +59 -2
  10. package/languages/zh-CN.yml +59 -2
  11. package/languages/zh-TW.yml +59 -2
  12. package/layout/404.ejs +7 -4
  13. package/layout/_partial/comments/artalk/layout.ejs +3 -2
  14. package/layout/_partial/comments/beaudar/layout.ejs +2 -2
  15. package/layout/_partial/comments/giscus/layout.ejs +2 -5
  16. package/layout/_partial/comments/layout.ejs +11 -40
  17. package/layout/_partial/comments/twikoo/layout.ejs +3 -2
  18. package/layout/_partial/comments/utterances/layout.ejs +2 -2
  19. package/layout/_partial/comments/waline/layout.ejs +3 -2
  20. package/layout/_partial/components/collection-item.ejs +30 -13
  21. package/layout/_partial/components/collection.ejs +2 -2
  22. package/layout/_partial/cover/index.ejs +5 -2
  23. package/layout/_partial/cover/wiki_cover.ejs +39 -28
  24. package/layout/_partial/dropdown.ejs +26 -14
  25. package/layout/_partial/head.ejs +96 -69
  26. package/layout/_partial/main/article/contributors.ejs +12 -9
  27. package/layout/_partial/main/article/post_footer.ejs +47 -0
  28. package/layout/_partial/main/article/post_read_next.ejs +22 -0
  29. package/layout/_partial/main/article/post_related.ejs +14 -0
  30. package/layout/_partial/main/article/post_tags.ejs +12 -0
  31. package/layout/_partial/main/article/share.ejs +55 -0
  32. package/layout/_partial/main/footer.ejs +11 -10
  33. package/layout/_partial/main/{navbar/nav_tabs_blog.ejs → listing_nav/blog.ejs} +21 -18
  34. package/layout/_partial/main/listing_nav/wiki.ejs +56 -0
  35. package/layout/_partial/main/navbar/article_banner.ejs +39 -35
  36. package/layout/_partial/main/navbar/breadcrumb/blog.ejs +15 -28
  37. package/layout/_partial/main/navbar/breadcrumb/note.ejs +12 -5
  38. package/layout/_partial/main/navbar/breadcrumb/wiki.ejs +15 -11
  39. package/layout/_partial/main/navbar/dateinfo.ejs +28 -12
  40. package/layout/_partial/main/navbar/ghinfo.ejs +5 -3
  41. package/layout/_partial/main/notebook/note_card.ejs +12 -17
  42. package/layout/_partial/main/notebook/note_tags.ejs +3 -4
  43. package/layout/_partial/main/notebook/notebook_card.ejs +11 -4
  44. package/layout/_partial/main/pin_slider.ejs +48 -43
  45. package/layout/_partial/main/post_list/archive_item.ejs +8 -4
  46. package/layout/_partial/main/post_list/latest_post_card.ejs +10 -4
  47. package/layout/_partial/main/post_list/post_card.ejs +39 -90
  48. package/layout/_partial/main/post_list/topic_card.ejs +7 -5
  49. package/layout/_partial/main/post_list/wiki_card.ejs +16 -13
  50. package/layout/_partial/menubtn.ejs +3 -3
  51. package/layout/_partial/primitives/item.ejs +8 -0
  52. package/layout/_partial/primitives/navigation.ejs +17 -0
  53. package/layout/_partial/primitives/region.ejs +16 -0
  54. package/layout/_partial/primitives/section.ejs +8 -0
  55. package/layout/_partial/primitives/shell.ejs +35 -0
  56. package/layout/_partial/regions/widgets.ejs +84 -0
  57. package/layout/_partial/scripts/defines.ejs +46 -76
  58. package/layout/_partial/scripts/runtime.ejs +55 -0
  59. package/layout/_partial/scripts.ejs +18 -42
  60. package/layout/_partial/search/dialog.ejs +33 -0
  61. package/layout/_partial/search/shortcut.ejs +1 -0
  62. package/layout/_partial/sidebar/brand.ejs +127 -0
  63. package/layout/_partial/sidebar/menu.ejs +59 -14
  64. package/layout/_partial/sidebar/search.ejs +58 -41
  65. package/layout/_partial/widgets/actions.ejs +25 -0
  66. package/layout/_partial/widgets/author.ejs +9 -5
  67. package/layout/_partial/widgets/components/linklist.ejs +1 -2
  68. package/layout/_partial/widgets/ghissues.ejs +7 -10
  69. package/layout/_partial/widgets/ghrepo.ejs +23 -16
  70. package/layout/_partial/widgets/ghuser.ejs +3 -3
  71. package/layout/_partial/widgets/recent.ejs +25 -21
  72. package/layout/_partial/widgets/related.ejs +25 -34
  73. package/layout/_partial/widgets/settings.ejs +17 -0
  74. package/layout/_partial/widgets/tagtree.ejs +18 -10
  75. package/layout/_partial/widgets/toc.ejs +17 -9
  76. package/layout/_partial/widgets/tree.ejs +12 -13
  77. package/layout/archive.ejs +20 -13
  78. package/layout/categories.ejs +4 -3
  79. package/layout/collection-preview.ejs +8 -9
  80. package/layout/index.ejs +32 -43
  81. package/layout/index_topic.ejs +6 -13
  82. package/layout/index_wiki.ejs +17 -34
  83. package/layout/layout.ejs +195 -65
  84. package/layout/notebooks.ejs +3 -3
  85. package/layout/notes.ejs +4 -4
  86. package/layout/page.ejs +95 -50
  87. package/layout/settings.ejs +109 -0
  88. package/layout/tags.ejs +4 -3
  89. package/{THIRD-PARTY-NOTICES.md → legal/THIRD-PARTY-NOTICES.md} +8 -4
  90. package/package.json +28 -6
  91. package/scripts/commands/stellar.js +55 -0
  92. package/scripts/events/index.js +15 -9
  93. package/scripts/events/lib/authors.js +9 -7
  94. package/scripts/events/lib/config-hot-reload.js +65 -0
  95. package/scripts/events/lib/config-schema.js +20 -0
  96. package/scripts/events/lib/config.js +22 -63
  97. package/scripts/events/lib/content-config.js +5 -0
  98. package/scripts/events/lib/doc_tree.js +99 -9
  99. package/scripts/events/lib/links.js +6 -3
  100. package/scripts/events/lib/notebooks.js +200 -8
  101. package/scripts/events/lib/utils.js +4 -4
  102. package/scripts/events/lib/version-check.js +57 -3
  103. package/scripts/filters/index.js +2 -27
  104. package/scripts/filters/lib/img_lazyload.js +4 -126
  105. package/scripts/filters/lib/img_onerror.js +14 -17
  106. package/scripts/filters/lib/page-view-model.js +152 -0
  107. package/scripts/generators/404.js +13 -8
  108. package/scripts/generators/author.js +16 -11
  109. package/scripts/generators/notebooks.js +68 -39
  110. package/scripts/generators/search.js +62 -67
  111. package/scripts/generators/settings.js +43 -0
  112. package/scripts/generators/stellar-icons.js +13 -5
  113. package/scripts/generators/topic.js +24 -13
  114. package/scripts/generators/wiki.js +49 -21
  115. package/scripts/helpers/ai_label.js +6 -12
  116. package/scripts/helpers/brand.js +17 -0
  117. package/scripts/helpers/browser_runtime_manifest.js +12 -0
  118. package/scripts/helpers/caption.js +8 -0
  119. package/scripts/helpers/category_color.js +13 -13
  120. package/scripts/helpers/collection.js +18 -0
  121. package/scripts/helpers/comments_model.js +14 -0
  122. package/scripts/helpers/extension_assets.js +8 -0
  123. package/scripts/helpers/json_ld.js +16 -7
  124. package/scripts/helpers/mdrender.js +3 -9
  125. package/scripts/helpers/menu.js +9 -0
  126. package/scripts/helpers/post_view_model.js +23 -0
  127. package/scripts/helpers/regions.js +37 -0
  128. package/scripts/helpers/scrollreveal.js +7 -7
  129. package/scripts/helpers/search_domain.js +34 -0
  130. package/scripts/helpers/service_provider.js +9 -0
  131. package/scripts/helpers/settings.js +16 -0
  132. package/scripts/helpers/share_action.js +8 -0
  133. package/scripts/helpers/stellar_config.js +12 -0
  134. package/scripts/helpers/stellar_data.js +8 -0
  135. package/scripts/helpers/stellar_info.js +21 -16
  136. package/scripts/helpers/stellar_inject.js +9 -0
  137. package/scripts/helpers/ui_classes.js +12 -0
  138. package/scripts/lib/ai_label.js +14 -11
  139. package/scripts/lib/brand.js +41 -0
  140. package/scripts/lib/browser-runtime.js +115 -0
  141. package/scripts/lib/caption.js +21 -0
  142. package/scripts/lib/collection-pipeline/adapters/notebook.js +62 -0
  143. package/scripts/lib/collection-pipeline/adapters/post.js +20 -0
  144. package/scripts/lib/collection-pipeline/adapters/topic.js +82 -0
  145. package/scripts/lib/collection-pipeline/adapters/wiki.js +20 -0
  146. package/scripts/lib/collection-pipeline/index.js +169 -0
  147. package/scripts/lib/collection-pipeline/registry.js +27 -0
  148. package/scripts/lib/collection-pipeline/shared.js +164 -0
  149. package/scripts/lib/comments.js +60 -0
  150. package/scripts/lib/config-inject.js +20 -0
  151. package/scripts/lib/config-schema.js +1095 -0
  152. package/scripts/lib/content-config.js +157 -0
  153. package/scripts/lib/content-defaults.js +56 -0
  154. package/scripts/lib/content-membership.js +233 -0
  155. package/scripts/lib/contribution-contract.js +165 -0
  156. package/scripts/lib/contribution-registry.js +429 -0
  157. package/scripts/lib/doc_tree.js +46 -44
  158. package/scripts/lib/doctor.js +296 -0
  159. package/scripts/lib/front-matter.js +29 -0
  160. package/scripts/lib/hero-effect-registry.js +262 -0
  161. package/scripts/lib/html-images.js +128 -0
  162. package/scripts/lib/internal-constants.js +152 -0
  163. package/scripts/lib/layout-config.js +62 -0
  164. package/scripts/lib/mdrender_html.js +36 -23
  165. package/scripts/lib/menu.js +36 -0
  166. package/scripts/lib/model-schema.js +90 -0
  167. package/scripts/lib/models/index.js +1542 -0
  168. package/scripts/lib/new-note.js +172 -0
  169. package/scripts/lib/page-view-model-registry.js +103 -0
  170. package/scripts/lib/regions.js +132 -0
  171. package/scripts/lib/runtime-data.js +23 -0
  172. package/scripts/lib/safe-path.js +44 -0
  173. package/scripts/lib/search-domain.js +59 -0
  174. package/scripts/lib/seo.js +10 -10
  175. package/scripts/lib/service-provider.js +12 -0
  176. package/scripts/lib/settings.js +16 -0
  177. package/scripts/lib/share-services.js +96 -0
  178. package/scripts/lib/source-config.js +27 -0
  179. package/scripts/lib/theme-metadata.js +22 -0
  180. package/scripts/lib/ui-capabilities.js +32 -0
  181. package/scripts/lib/widget-registry.js +150 -0
  182. package/scripts/lib/wiki_readme.js +15 -11
  183. package/scripts/schema/config-rules.js +290 -0
  184. package/scripts/schema/config-schema.js +163 -0
  185. package/scripts/schema/content-config-rules.js +264 -0
  186. package/scripts/schema/content-config-schema.js +321 -0
  187. package/scripts/schema/model-schema.js +971 -0
  188. package/scripts/schema/schema-utils.js +48 -0
  189. package/scripts/tags/index.js +2 -3
  190. package/scripts/tags/lib/albums.js +6 -6
  191. package/scripts/tags/lib/banner.js +10 -4
  192. package/scripts/tags/lib/box.js +1 -1
  193. package/scripts/tags/lib/button.js +1 -1
  194. package/scripts/tags/lib/chat.js +9 -31
  195. package/scripts/tags/lib/checkbox.js +6 -1
  196. package/scripts/tags/lib/copy.js +4 -1
  197. package/scripts/tags/lib/dropdown.js +6 -4
  198. package/scripts/tags/lib/emoji.js +5 -10
  199. package/scripts/tags/lib/friends.js +4 -4
  200. package/scripts/tags/lib/gallery.js +7 -7
  201. package/scripts/tags/lib/ghcard.js +5 -3
  202. package/scripts/tags/lib/gist.js +16 -0
  203. package/scripts/tags/lib/grid.js +4 -2
  204. package/scripts/tags/lib/hashtag.js +1 -1
  205. package/scripts/tags/lib/icon.js +1 -1
  206. package/scripts/tags/lib/image.js +1 -1
  207. package/scripts/tags/lib/link.js +6 -3
  208. package/scripts/tags/lib/mark.js +8 -3
  209. package/scripts/tags/lib/md.js +1 -1
  210. package/scripts/tags/lib/note.js +1 -1
  211. package/scripts/tags/lib/okr.js +18 -1
  212. package/scripts/tags/lib/posters.js +6 -6
  213. package/scripts/tags/lib/quot.js +15 -5
  214. package/scripts/tags/lib/rating.js +7 -4
  215. package/scripts/tags/lib/sites.js +8 -6
  216. package/scripts/tags/lib/tip.js +6 -6
  217. package/scripts/tags/lib/toc.js +2 -2
  218. package/scripts/tags/lib/vote.js +8 -5
  219. package/source/css/_appearances/_mixins.styl +258 -0
  220. package/source/css/_appearances/card.styl +30 -0
  221. package/source/css/_appearances/flat.styl +44 -0
  222. package/source/css/_appearances/glass.styl +138 -0
  223. package/source/css/_appearances/minimal.styl +325 -0
  224. package/source/css/_common/base.styl +5 -9
  225. package/source/css/_common/blockquote.styl +0 -1
  226. package/source/css/_common/button.styl +1 -1
  227. package/source/css/_common/device.styl +24 -42
  228. package/source/css/_common/dropdown.styl +20 -14
  229. package/source/css/_common/highlight.styl +5 -12
  230. package/source/css/_common/icon.styl +38 -0
  231. package/source/css/_common/input.styl +33 -0
  232. package/source/css/_common/loading.styl +2 -2
  233. package/source/css/_common/svg.styl +0 -8
  234. package/source/css/_components/collection.styl +21 -64
  235. package/source/css/_components/layout.styl +524 -84
  236. package/source/css/_components/list.styl +36 -22
  237. package/source/css/_components/main.styl +16 -19
  238. package/source/css/_components/md.styl +8 -13
  239. package/source/css/_components/pages/article-indent.styl +1 -1
  240. package/source/css/_components/pages/article-story.styl +7 -6
  241. package/source/css/_components/pages/article-tech.styl +5 -5
  242. package/source/css/_components/pages/collection-preview.styl +1 -5
  243. package/source/css/_components/pages/settings.styl +184 -0
  244. package/source/css/_components/partial/article-banner.styl +2 -2
  245. package/source/css/_components/partial/article-footer.styl +0 -32
  246. package/source/css/_components/partial/article-share.styl +48 -0
  247. package/source/css/_components/partial/article-tags.styl +1 -1
  248. package/source/css/_components/partial/cover.styl +13 -13
  249. package/source/css/_components/partial/listing-nav.styl +68 -0
  250. package/source/css/_components/partial/paginator.styl +1 -1
  251. package/source/css/_components/pin-slider.styl +3 -3
  252. package/source/css/_components/sidebar/brand.styl +135 -0
  253. package/source/css/_components/sidebar/footer.styl +14 -31
  254. package/source/css/_components/sidebar/nav-area.styl +4 -0
  255. package/source/css/_components/sidebar/search.styl +176 -26
  256. package/source/css/_components/sidebar/sidebar.styl +76 -110
  257. package/source/css/_components/tag-plugins/banner.styl +16 -28
  258. package/source/css/_components/tag-plugins/checkbox.styl +7 -22
  259. package/source/css/_components/tag-plugins/copy.styl +3 -5
  260. package/source/css/_components/tag-plugins/gallery.styl +2 -2
  261. package/source/css/_components/tag-plugins/grid.styl +3 -0
  262. package/source/css/_components/tag-plugins/image.styl +2 -1
  263. package/source/css/_components/tag-plugins/link.styl +0 -1
  264. package/source/css/_components/tag-plugins/mark.styl +19 -4
  265. package/source/css/_components/tag-plugins/mdrender.styl +2 -2
  266. package/source/css/_components/tag-plugins/navbar.styl +23 -17
  267. package/source/css/_components/tag-plugins/note.styl +2 -2
  268. package/source/css/_components/tag-plugins/okr.styl +1 -2
  269. package/source/css/_components/tag-plugins/quot.styl +5 -0
  270. package/source/css/_components/tag-plugins/rating.styl +3 -2
  271. package/source/css/_components/tag-plugins/timeline.styl +1 -1
  272. package/source/css/_components/tag-plugins/tip.styl +1 -1
  273. package/source/css/_components/tag-plugins/vote.styl +3 -2
  274. package/source/css/_components/widgets/ghrepo.styl +2 -1
  275. package/source/css/_components/widgets/ghuser.styl +4 -6
  276. package/source/css/_components/widgets/settings.styl +49 -0
  277. package/source/css/_components/widgets/timeline.styl +2 -2
  278. package/source/css/_components/widgets/toc.styl +12 -33
  279. package/source/css/_components/widgets/widgets.styl +14 -19
  280. package/source/css/_components/wiki-card.styl +2 -2
  281. package/source/css/_custom.styl +26 -32
  282. package/source/css/_defines/func.styl +47 -37
  283. package/source/css/_defines/theme_base.styl +8 -10
  284. package/source/css/_plugins/card-hover.styl +1 -1
  285. package/source/css/_plugins/copycode.styl +16 -19
  286. package/source/css/_plugins/index.styl +3 -8
  287. package/source/css/_plugins/lazyload.styl +1 -1
  288. package/source/css/main.styl +12 -0
  289. package/source/js/main.js +302 -59
  290. package/source/js/plugins/adaptive-text.js +33 -16
  291. package/source/js/plugins/card-hover.js +2 -24
  292. package/source/js/plugins/copycode.js +10 -16
  293. package/source/js/plugins/voice.js +51 -48
  294. package/source/js/profile.js +316 -0
  295. package/source/js/runtime/asset-loader.js +61 -0
  296. package/source/js/runtime/extension-registry.js +149 -0
  297. package/source/js/runtime/extensions/card-hover.js +5 -0
  298. package/source/js/runtime/extensions/color-scheme-switch.js +101 -0
  299. package/source/js/runtime/extensions/comments.js +200 -0
  300. package/source/js/runtime/extensions/deferred-icons.js +53 -0
  301. package/source/js/{plugins → runtime/extensions}/dropdown.js +69 -30
  302. package/source/js/runtime/extensions/feature.js +200 -0
  303. package/source/js/runtime/extensions/hero-effect.js +179 -0
  304. package/source/js/runtime/extensions/reveal.js +80 -0
  305. package/source/js/runtime/extensions/search.js +23 -0
  306. package/source/js/{services.js → runtime/extensions/services.js} +67 -54
  307. package/source/js/runtime/extensions/settings.js +235 -0
  308. package/source/js/runtime/hero-effects/ferrofluid.js +385 -0
  309. package/source/js/{plugins → runtime/hero-effects}/galaxy.js +53 -177
  310. package/source/js/runtime/hero-effects/light-rays.js +293 -0
  311. package/source/js/runtime/index.js +75 -0
  312. package/source/js/runtime/legacy-request-adapter.js +47 -0
  313. package/source/js/runtime/request-cache.js +219 -0
  314. package/source/js/search/algolia-search.js +76 -51
  315. package/source/js/search/highlight.js +1 -1
  316. package/source/js/search/local-search.js +96 -57
  317. package/source/js/search/shortcut.js +31 -20
  318. package/source/js/services/friends_and_posts.js +6 -1
  319. package/source/js/services/rating.js +14 -6
  320. package/source/js/services/siteinfo.js +3 -7
  321. package/source/js/services/timeline.js +1 -1
  322. package/source/js/services/vote.js +7 -5
  323. package/source/js/services/weibo.js +1 -1
  324. package/source/js/utils.js +19 -444
  325. package/.claude/skills/stellar-theme-dev/SKILL.md +0 -51
  326. package/_data/chat_users.yml +0 -0
  327. package/layout/_partial/comments/artalk/script.ejs +0 -76
  328. package/layout/_partial/comments/beaudar/script.ejs +0 -33
  329. package/layout/_partial/comments/giscus/script.ejs +0 -31
  330. package/layout/_partial/comments/script.ejs +0 -3
  331. package/layout/_partial/comments/twikoo/script.ejs +0 -25
  332. package/layout/_partial/comments/utterances/script.ejs +0 -33
  333. package/layout/_partial/comments/waline/script.ejs +0 -43
  334. package/layout/_partial/main/article/article_footer.ejs +0 -164
  335. package/layout/_partial/main/article/article_tags.ejs +0 -16
  336. package/layout/_partial/main/article/read_next.ejs +0 -63
  337. package/layout/_partial/main/article/related_posts.ejs +0 -16
  338. package/layout/_partial/main/navbar/nav_tabs_wiki.ejs +0 -52
  339. package/layout/_partial/scripts/bootstrap.ejs +0 -37
  340. package/layout/_partial/scripts/lazyload.ejs +0 -89
  341. package/layout/_partial/sidebar/grad-def.ejs +0 -26
  342. package/layout/_partial/sidebar/index_leftbar.ejs +0 -191
  343. package/layout/_partial/sidebar/index_rightbar.ejs +0 -94
  344. package/layout/_partial/sidebar/logo.ejs +0 -99
  345. package/layout/_plugins/adaptive_text.ejs +0 -11
  346. package/layout/_plugins/card_hover.ejs +0 -32
  347. package/layout/_plugins/copycode.ejs +0 -17
  348. package/layout/_plugins/fancybox.ejs +0 -53
  349. package/layout/_plugins/heti.ejs +0 -21
  350. package/layout/_plugins/index.ejs +0 -50
  351. package/layout/_plugins/mathjax.ejs +0 -49
  352. package/layout/_plugins/mermaid.ejs +0 -33
  353. package/layout/_plugins/preload.ejs +0 -9
  354. package/layout/_plugins/scrollreveal.ejs +0 -102
  355. package/layout/_plugins/search/algolia_search.ejs +0 -12
  356. package/layout/_plugins/search/local_search.ejs +0 -9
  357. package/layout/_plugins/swiper.ejs +0 -27
  358. package/layout/_plugins/tianli_gpt.ejs +0 -14
  359. package/scripts/commands/new-note.js +0 -49
  360. package/scripts/events/lib/merge_posts.js +0 -48
  361. package/scripts/events/lib/topic_tree.js +0 -48
  362. package/scripts/helpers/related_posts.js +0 -51
  363. package/scripts/helpers/subtitle.js +0 -8
  364. package/scripts/lib/notebooks.js +0 -181
  365. package/scripts/lib/subtitle.js +0 -28
  366. package/scripts/tags/lib/about.js +0 -48
  367. package/source/css/_components/page-transition.styl +0 -22
  368. package/source/css/_components/partial/navbar.styl +0 -51
  369. package/source/css/_components/sidebar/logo.styl +0 -111
  370. package/source/css/_components/tag-plugins/about.styl +0 -56
  371. package/source/css/_components/widgets/tree.styl +0 -0
  372. package/source/css/_plugins/scrollreveal.styl +0 -6
  373. package/source/css/_plugins/tianli_gpt.styl +0 -213
  374. package/source/css/plugins/mermaid.styl +0 -137
  375. package/source/js/icons.js +0 -60
  376. package/source/js/services/fcircle.js +0 -35
  377. package/source/js/theme.js +0 -61
@@ -1,100 +1,540 @@
1
- .l_body
2
- display: grid
3
- grid-template-columns: 1fr minmax(200px,var(--width-main)) 1fr
4
- grid-gap: calc(var(--gap-page) * 1)
5
- margin: auto
1
+ .site-shell
2
+ --leftbar-width: calc(var(--gap-base) * 4 + var(--side-content-width))
3
+ --leftbar-rail-width: 64px
4
+ --leftbar-gap: 1rem
5
+ --rightbar-width: calc(var(--leftbar-width) + var(--rightbar-width-extra))
6
+ --shell-gap: 0px
7
+ --shell-edge-inset: 0px
8
+ --shell-topbar-top: var(--shell-edge-inset)
9
+ --shell-topbar-content-inset: 8px
10
+ --shell-topbar-height: 64px
11
+ --shell-topbar-content-height: calc(var(--shell-topbar-height) - var(--shell-topbar-content-inset) - var(--shell-topbar-content-inset))
12
+ --shell-topbar-content-center-offset: calc(var(--shell-topbar-height) / 2 - var(--shell-topbar-content-inset))
13
+ --shell-topbar-bottom: 0px
14
+ --leftbar-sticky-offset: calc(var(--shell-topbar-bottom) + var(--leftbar-gap))
15
+ --leftbar-panel-height: calc(100vh - var(--leftbar-sticky-offset) - var(--leftbar-gap))
16
+ --leftbar-panel-height: calc(100dvh - var(--leftbar-sticky-offset) - var(--leftbar-gap))
17
+ --shell-left-gap: 0px
18
+ --shell-left-reserve: 0px
19
+ --shell-right-reserve: 0px
20
+ --shell-side-reserve: unquote('max(var(--shell-left-reserve), var(--shell-right-reserve))')
21
+ --shell-side-gap: 0px
22
+ --shell-content-top-gap: var(--gap-base)
23
+ --shell-sticky-offset: var(--shell-edge-inset)
24
+ --rightbar-sticky-offset: calc(var(--shell-sticky-offset) + var(--gap-base))
25
+ --shell-panel-height: calc(100vh - var(--shell-sticky-offset) - var(--shell-edge-inset))
26
+ --shell-panel-height: calc(100dvh - var(--shell-sticky-offset) - var(--shell-edge-inset))
27
+ --rightbar-panel-height: calc(100vh - var(--shell-sticky-offset) - var(--shell-edge-inset) - var(--shell-content-top-gap))
28
+ --rightbar-panel-height: calc(100dvh - var(--shell-sticky-offset) - var(--shell-edge-inset) - var(--shell-content-top-gap))
29
+ position: relative
30
+ margin: 0 auto
6
31
  font-size: var(--fs-content)
7
32
 
8
- .l_body aside
33
+ .site-shell[data-regions~='topbar']
34
+ --shell-sticky-offset: calc(var(--shell-edge-inset) + var(--shell-topbar-height))
35
+ --shell-topbar-bottom: calc(var(--shell-edge-inset) + var(--shell-topbar-height))
36
+ padding-top: var(--shell-topbar-top)
37
+
38
+ .site-shell[data-regions~='leftbar']
39
+ --shell-left-gap: var(--leftbar-gap)
40
+ --shell-left-reserve: calc(var(--leftbar-width) + var(--shell-left-gap))
41
+ --shell-side-gap: unquote('max(var(--gap-page), var(--shell-gap), var(--shell-left-gap))')
42
+
43
+ .site-shell[data-regions~='rightbar']
44
+ --shell-right-reserve: var(--rightbar-width)
45
+ --shell-side-gap: unquote('max(var(--gap-page), var(--shell-gap), var(--shell-left-gap))')
46
+
47
+ html[data-leftbar-state='collapsed'] .site-shell[data-regions~='leftbar']
48
+ --shell-left-reserve: calc(var(--leftbar-rail-width) + var(--shell-left-gap))
49
+
50
+ .site-workspace
51
+ box-sizing: border-box
52
+ position: relative
53
+ display: grid
54
+ grid-template-columns: minmax(var(--rightbar-width), 1fr) minmax(0, max(var(--width-main-article), var(--width-main-wiki-list))) minmax(var(--rightbar-width), 1fr)
55
+ column-gap: var(--shell-side-gap)
56
+ width: 100%
57
+ min-height: calc(100vh - var(--shell-sticky-offset))
58
+ min-height: calc(100dvh - var(--shell-sticky-offset))
59
+ margin: 0 auto
60
+
61
+ .site-region,
62
+ .site-main
63
+ box-sizing: border-box
64
+ min-width: 0
65
+
66
+ .site-main
67
+ grid-column: 2
68
+ width: 100%
69
+ max-width: var(--width-main)
70
+ margin-inline: auto
71
+
72
+ .site-region--leftbar,
73
+ .site-region--rightbar
74
+ position: relative
75
+ top: 0
9
76
  z-index: 8
10
- flex-shrink: 0
77
+
78
+ .site-region__surface
79
+ box-sizing: border-box
80
+ position: sticky
81
+ top: var(--shell-sticky-offset)
82
+ width: 100%
83
+ height: var(--shell-panel-height)
84
+ overflow: visible
85
+
86
+ .site-region__surface > .site-region__viewport
87
+ box-sizing: border-box
88
+ height: 100%
89
+ max-height: 100%
90
+ overflow-x: hidden
91
+ overflow-y: auto
92
+ overscroll-behavior: contain
93
+ scrollbar(0, 0)
94
+ border-radius: inherit
95
+
96
+ .site-region--leftbar
97
+ grid-column: 1
98
+ justify-self: end
99
+ top: var(--leftbar-gap)
100
+ width: var(--leftbar-width)
101
+ .site-region__surface
102
+ top: var(--leftbar-sticky-offset)
103
+ height: var(--leftbar-panel-height)
104
+
105
+ .site-region--rightbar
106
+ grid-column: 3
107
+ justify-self: start
108
+ top: var(--shell-content-top-gap)
109
+ width: var(--rightbar-width)
110
+ .site-region__surface
111
+ top: var(--rightbar-sticky-offset)
112
+ height: auto
113
+ max-height: var(--rightbar-panel-height)
114
+ .site-region__viewport
115
+ height: auto
116
+ max-height: var(--rightbar-panel-height)
117
+ .widget-stack--rightbar
118
+ height: auto
119
+ min-height: 0
120
+ overflow: visible
121
+
122
+ .site-region--topbar
11
123
  position: sticky
12
- position: -webkit-sticky
13
- // 侧边栏容器宽度
14
- --width-sidebar: calc(var(--gap-base) * 4 + var(--side-content-width))
15
- width: var(--width-sidebar)
16
-
17
- .l_body .l_left
18
- justify-self: right
19
- top: var(--gap-page)
20
- .l_body .l_right
21
- justify-self: left
22
- width: calc(var(--width-sidebar) + var(--rightbar-width-extra))
23
- max-height: calc(100% - var(--gap-page) * 2)
24
- .widgets
124
+ top: var(--shell-edge-inset)
125
+ z-index: 12
126
+ box-sizing: border-box
127
+ width: calc(100% - var(--shell-edge-inset) - var(--shell-edge-inset))
128
+ height: var(--shell-topbar-height)
129
+ min-height: var(--shell-topbar-height)
130
+ max-height: var(--shell-topbar-height)
131
+ margin: 0 auto
132
+ padding: var(--shell-topbar-content-inset) var(--gap-page)
133
+ .widget-stack
25
134
  height: 100%
26
- overflow visible
135
+ min-height: 0
136
+ display: flex
137
+ flex-direction: row
138
+ align-items: center
139
+ gap: 8px
140
+ flex-wrap: nowrap
141
+ margin: 0
142
+ padding: 0
143
+ .widget-instance--brand
144
+ flex: 0 0 auto
145
+ .widget-instance--spacer
146
+ flex: 1 1 0
147
+ min-width: 0
148
+ .topbar-spacer
149
+ display: block
150
+ width: 100%
151
+ height: 1px
152
+ .brand-header, .brand-wrap, .nav-area, .menu
153
+ margin: 0
154
+ .brand-tagline
155
+ display: none
156
+ .ui-collection__indicator
157
+ display: none
158
+ .widget-instance--menu
159
+ min-width: 0
160
+ .menu .ui-collection
161
+ display: flex
162
+ align-items: center
163
+ gap: 4px
164
+ .ui-collection__item
165
+ flex: 0 0 auto
166
+ width: auto
167
+ min-width: 40px
168
+ min-height: 40px
169
+ padding: 4px 10px
170
+ .widget-instance--search
171
+ flex: 0 0 auto
172
+ .ui-collection__item
173
+ width: 40px
174
+ min-width: 40px
175
+ height: 40px
176
+ min-height: 40px
177
+ padding: 8px
178
+ .topbar-toc
179
+ position: relative
180
+ > summary
181
+ list-style: none
182
+ &::-webkit-details-marker
183
+ display: none
184
+ .region-compact-action
185
+ box-sizing: border-box
186
+ display: flex
187
+ align-items: center
188
+ justify-content: center
189
+ width: 40px
190
+ min-width: 40px
191
+ height: 40px
192
+ min-height: 40px
193
+ padding: 8px
194
+ border: 0
195
+ border-radius: $border-bar
196
+ color: var(--text-p2)
197
+ cursor: pointer
198
+ .topbar-toc-popover
199
+ position: absolute
200
+ top: calc(100% + 8px)
201
+ right: 0
202
+ width: min(22rem, 80vw)
203
+ max-height: min(70vh, 36rem)
204
+ overflow: auto
205
+ padding: 12px
206
+ border-radius: 12px
207
+ background: var(--card)
208
+ box-shadow: $boxshadow-card-float
27
209
 
28
- // 平板布局
29
- @media screen and (max-width: $device-laptop)
30
- .laptop-only
31
- display: block !important
32
- .l_body
33
- .l_right
34
- position: fixed
35
- transform: translateX(calc(100% + var(--inset) * 2))
36
- transition: transform .38s ease-out
37
- margin: 0
38
- --inset: 8px
39
- right: var(--inset)
40
- top: var(--gap-page)
41
- max-height: calc(100vh - var(--gap-page) * 2)
42
- box-shadow: $boxshadow-card-float
43
- z-index: 10
44
- background: var(--background)
45
- overflow: auto
46
- scrollbar(0, 0)
47
- --blur-bg: var(--bg-a60)
48
- --blur-px: 50px
49
- .l_body[rightbar]
50
- .l_right
51
- transform: translateX(0px)
52
- .main-mask
53
- // opacity 1
54
- pointer-events: inherit
55
-
56
- // 手机布局
57
- @media screen and (max-width: $device-mobile-max)
58
- .mobile-only
59
- display: block !important
60
- .l_body
210
+ .site-region,
211
+ .site-region__surface
212
+ box-sizing: border-box
213
+
214
+ .site-region--topbar > .site-region__viewport
215
+ display: flex
216
+ align-items: center
217
+ height: var(--shell-topbar-content-height)
218
+ border: 0
219
+ border-radius: 0
220
+ background: transparent
221
+ box-shadow: none
222
+ backdrop-filter: none
223
+ -webkit-backdrop-filter: none
224
+
225
+ // 桌面 Rightbar 不绘制整块表面;Drawer 视觉由语义能力类在断点内启用。
226
+ .site-region--rightbar .site-region__viewport
227
+ border: 0
228
+ background: transparent
229
+ box-shadow: none
230
+ backdrop-filter: none
231
+ -webkit-backdrop-filter: none
232
+
233
+ // Region 外层只负责 Shell 定位,视觉表面由 Topbar 自身或 Side Surface 承载。
234
+ .site-region--leftbar,
235
+ .site-region--rightbar
236
+ border: 0
237
+ background: transparent
238
+ box-shadow: none
239
+
240
+ .leftbar-state-toggle
241
+ position: static
242
+ flex: 0 0 32px
243
+ width: 32px
244
+ height: 32px
245
+ min-height: 32px
246
+ padding: 4px
247
+ display: flex
248
+ align-items: center
249
+ justify-content: center
250
+ border: 0
251
+ border-radius: 999px
252
+ font-size: 24px
253
+ line-height: 0
254
+ cursor: pointer
255
+
256
+ leftbar-rail()
257
+ width: var(--leftbar-rail-width)
258
+ .site-region__zone,
259
+ .site-region__footer,
260
+ .site-region__system
261
+ width: 48px
262
+ margin-inline: auto
263
+ .widget-stack--leftbar
264
+ width: 48px
265
+ margin: 0
61
266
  padding: 0
267
+ overflow: hidden
268
+ .widget-instance
269
+ width: 48px
270
+ .widget-instance:not([data-leftbar-rail])
271
+ display: none
272
+ .widget-instance[data-leftbar-rail]
273
+ .brand-title, .menu .text, .search-trigger .ui-collection__content, .region-actions .social-spacer
274
+ display: none
275
+ .widget-instance--brand
276
+ .brand-header
277
+ margin: 0
278
+ .brand-navigation
279
+ display: none
280
+ margin: 0 0 4px
281
+ .brand-navigation__back
282
+ width: 40px
283
+ height: 40px
284
+ margin: 0 auto
285
+ padding: 8px
286
+ justify-content: center
287
+ box-sizing: border-box
288
+ > span:not(.ui-icon)
289
+ display: none
290
+ .ui-icon
291
+ margin: 0
292
+ .brand-search .search-trigger
293
+ width: 40px
294
+ min-width: 40px
295
+ height: 40px
296
+ min-height: 40px
297
+ margin: 4px auto
298
+ padding: 8px
299
+ justify-content: center
300
+ .brand-wrap
301
+ justify-content: center
302
+ .brand-image
303
+ width: 40px
304
+ height: 40px
305
+ margin: 0
306
+ .brand-stats
307
+ display: none
308
+ .widget-instance--menu
309
+ .menu .ui-collection
310
+ display: block
311
+ .menu .ui-collection__item
312
+ width: 40px
313
+ min-width: 40px
314
+ height: 40px
315
+ min-height: 40px
316
+ margin: 4px auto
317
+ padding: 8px
318
+ .ui-collection__content, .ui-collection__indicator
319
+ display: none
320
+ .widget-instance--search
321
+ .search-trigger
322
+ width: 40px
323
+ min-width: 40px
324
+ height: 40px
325
+ margin: 4px auto
326
+ padding: 8px
327
+ justify-content: center
328
+ .region-actions
329
+ width: 40px
330
+ margin: 4px auto
331
+ justify-content: center
332
+ .site-region__viewport
333
+ padding-left: 8px
334
+ padding-right: 8px
335
+ .site-region__system
336
+ flex-direction: column
337
+ align-items: center
338
+ gap: 4px
339
+ padding: 4px 0 8px
340
+ .site-region__settings
341
+ flex: 0 0 32px
342
+ width: 32px
343
+ margin-inline: auto
344
+ .widget-instance--settings
345
+ width: 32px
346
+ .leftbar-state-toggle
347
+ margin-inline: auto
348
+ .site-region__project-toolbar
349
+ flex-direction: column
350
+ align-items: center
351
+ .site-region__project-home,
352
+ .site-region__project-search
353
+ width: 40px
354
+ .settings-widget__name
355
+ display: none
356
+
357
+ html[data-leftbar-state='collapsed'] .site-shell:not([data-drawer='leftbar']) .site-region--leftbar
358
+ leftbar-rail()
359
+
360
+ @media screen and (max-width: $device-laptop)
361
+ .site-workspace
62
362
  display: block
63
- .l_left
64
- position: fixed
65
- transform: translateX(calc(-100% - var(--inset) * 2))
66
- transition: transform .38s ease-out
363
+ .site-shell
364
+ --shell-right-reserve: 0px
365
+ --rightbar-drawer-top: var(--leftbar-gap)
366
+ --rightbar-drawer-bottom: var(--leftbar-gap)
367
+ --rightbar-drawer-max-height: calc(100vh - var(--rightbar-drawer-top) - var(--rightbar-drawer-bottom))
368
+ --rightbar-drawer-max-height: calc(100dvh - var(--rightbar-drawer-top) - var(--rightbar-drawer-bottom))
369
+ .site-shell[data-regions~='leftbar']
370
+ --shell-side-reserve: var(--shell-left-reserve)
371
+ --shell-side-gap: unquote('max(var(--gap-page), var(--shell-gap), var(--shell-left-gap))')
372
+ .site-shell:not([data-regions~='leftbar'])
373
+ --shell-left-reserve: 0px
374
+ --shell-side-reserve: 0px
375
+ --shell-side-gap: 0px
376
+ .site-region--leftbar
377
+ position: absolute
378
+ inset-inline-start: var(--leftbar-gap)
379
+ bottom: 0
380
+ .site-region--rightbar
381
+ position: fixed
382
+ transform: translateX(calc(100% + 16px))
383
+ transition: transform .38s ease-out
384
+ inset-inline-end: 8px
385
+ top: var(--rightbar-drawer-top)
386
+ width: var(--rightbar-width)
387
+ height: auto
388
+ max-height: var(--rightbar-drawer-max-height)
389
+ bottom: auto
390
+ z-index: 10
391
+ .site-region__surface
392
+ position: relative
393
+ top: auto
394
+ height: auto
395
+ max-height: var(--rightbar-drawer-max-height)
396
+ .site-region__viewport
397
+ position: relative
398
+ z-index: 0
399
+ height: auto
400
+ max-height: var(--rightbar-drawer-max-height)
401
+ .site-region__surface.ui-drawer-surface
402
+ isolation: isolate
403
+ border: 0
404
+ border-radius: $border-card-l
405
+ corner-shape: $corner-shape
406
+ background: transparent
407
+ box-shadow: none
408
+ backdrop-filter: none
409
+ -webkit-backdrop-filter: none
410
+ &:before
411
+ content: ''
412
+ position: absolute
413
+ pointer-events: none
414
+ z-index: -1
415
+ inset: 0
416
+ border-radius: inherit
417
+ corner-shape: inherit
418
+ background: var(--bg-a50)
419
+ backdrop-filter: saturate(300%) blur(16px)
420
+ -webkit-backdrop-filter: saturate(300%) blur(16px)
421
+ .site-shell[data-drawer='rightbar'] .site-region--rightbar
422
+ transform: translateX(0)
423
+ .site-shell[data-drawer='leftbar'] .site-region--leftbar
424
+ position: fixed
425
+ transform: translateX(0)
426
+ transition: transform .38s ease-out
427
+ inset-inline-start: 8px
428
+ top: var(--gap-page)
429
+ bottom: auto
430
+ height: calc(100vh - var(--gap-page) * 2)
431
+ height: calc(100dvh - var(--gap-page) * 2)
432
+ z-index: 10
433
+ .site-region__surface
434
+ position: relative
435
+ top: auto
436
+ height: 100%
437
+
438
+ @media screen and (min-width: ($device-tablet + 1px)) and (max-width: $device-laptop)
439
+ .site-shell[data-regions~='leftbar'] .site-main
440
+ width: unquote('min(var(--width-main), max(0px, calc(100% - var(--shell-left-reserve) - var(--shell-side-gap) - var(--shell-side-gap))))')
441
+ margin-inline: 0
442
+ margin-inline-start: unquote('calc(var(--shell-left-reserve) + max(var(--shell-side-gap), (100% - var(--shell-left-reserve) - var(--width-main)) / 2))')
443
+
444
+ @media screen and (max-width: $device-tablet)
445
+ .site-shell,
446
+ .site-shell[data-regions~='leftbar'],
447
+ .site-shell:not([data-regions~='leftbar'])
448
+ --shell-left-reserve: 0px
449
+ --shell-right-reserve: 0px
450
+ --shell-side-reserve: 0px
451
+ --shell-side-gap: 0px
452
+ --rightbar-drawer-top: 8px
453
+ --rightbar-drawer-bottom: 64px
454
+ --rightbar-drawer-max-height: calc(100vh - var(--rightbar-drawer-top) - var(--rightbar-drawer-bottom))
455
+ --rightbar-drawer-max-height: calc(100dvh - var(--rightbar-drawer-top) - var(--rightbar-drawer-bottom))
456
+ .site-main
457
+ width: 100%
458
+ max-width: none
459
+ margin-inline: 0
460
+ .site-region--leftbar
461
+ position: fixed
462
+ transform: translateX(calc(-100% - 16px))
463
+ transition: transform .38s ease-out
464
+ inset-inline-start: 8px
465
+ top: 8px
466
+ bottom: 64px
467
+ height: auto
468
+ z-index: 10
469
+ .site-region__surface
470
+ position: relative
471
+ top: auto
472
+ height: 100%
473
+ overflow: hidden
474
+ .site-shell[data-drawer='leftbar'] .site-region--leftbar
475
+ top: 8px
476
+ bottom: 64px
477
+ height: auto
478
+ transform: translateX(0)
479
+ .site-shell[data-regions~='topbar'] .site-region--leftbar
480
+ top: calc(var(--shell-topbar-height) + 8px)
481
+ .site-shell[data-regions~='topbar']
482
+ --rightbar-drawer-top: calc(var(--shell-topbar-height) + 8px)
483
+ .site-region--topbar
484
+ box-sizing: border-box
485
+ padding: var(--shell-topbar-content-inset)
486
+ .widget-stack
487
+ width: 100%
488
+ gap: 4px
67
489
  margin: 0
68
- --inset: 8px
69
- left: var(--inset)
70
- top: 8pt
71
- max-height: 'calc(%s - 8pt - %s)' % (100vh $leftbar-bottom-margin-mobile)
72
- .leftbar-container
73
- --inset: 8px
74
- height: 'calc(%s - 8pt - %s)' % (100vh $leftbar-bottom-margin-mobile)
75
- box-shadow: $boxshadow-card-float
76
- z-index: 10
77
- .l_right
78
- top: 8pt
79
- max-height: 'calc(%s - 8pt - %s)' % (100vh $rightbar-bottom-margin-mobile)
80
- .l_main
81
- max-width: 100%
82
- .l_body[leftbar]
83
- .l_left
84
- transform: translateX(0px)
85
- .main-mask
86
- // opacity 1
87
- pointer-events: inherit
88
-
89
-
90
- .main-mask
490
+ overflow: hidden
491
+ .widget-instance--brand
492
+ margin-right: 0
493
+ .brand-image
494
+ width: 32px
495
+ height: 32px
496
+ margin: 0
497
+ .widget-instance--menu
498
+ flex: 1 1 auto
499
+ overflow-x: auto
500
+ scrollbar-width: none
501
+ .menu .ui-collection
502
+ gap: 0
503
+ .ui-collection__content, .ui-collection__indicator
504
+ display: none
505
+ .widget-instance--search
506
+ flex: 0 0 40px
507
+ .search-trigger
508
+ width: 40px
509
+ min-width: 40px
510
+ height: 40px
511
+ padding: 8px
512
+ justify-content: center
513
+ box-sizing: border-box
514
+ .ui-collection__content
515
+ display: none
516
+ .widget-instance--actions
517
+ flex-shrink: 0
518
+ .region-actions
519
+ flex-wrap: nowrap
520
+
521
+ @media (prefers-reduced-motion: reduce)
522
+ .site-region--leftbar,
523
+ .site-region--rightbar
524
+ transition: none
525
+
526
+ .site-scrim
91
527
  position: fixed
92
528
  pointer-events: none
93
- top: 0
94
- left: 0
529
+ inset: 0
95
530
  width: 100%
96
531
  height: 100%
532
+ border: 0
97
533
  background: rgba(black, 0.1)
98
534
  z-index: 9
99
- opacity 0
535
+ opacity: 0
100
536
  trans1 opacity
537
+
538
+ .site-shell[data-drawer] .site-scrim
539
+ pointer-events: auto
540
+ opacity: 1