vitepress 2.0.0-alpha.2 → 2.0.0-alpha.21

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 (286) hide show
  1. package/README.md +34 -2
  2. package/THIRD-PARTY-NOTICES.md +1736 -0
  3. package/bin/vitepress.js +14 -0
  4. package/client.d.ts +9 -0
  5. package/dist/client/app/components/ClientOnly.d.ts +5 -0
  6. package/dist/client/app/components/ClientOnly.js +11 -10
  7. package/dist/client/app/components/Content.d.ts +17 -0
  8. package/dist/client/app/components/Content.js +25 -22
  9. package/dist/client/app/composables/codeGroups.d.ts +3 -0
  10. package/dist/client/app/composables/codeGroups.js +36 -39
  11. package/dist/client/app/composables/copyCode.d.ts +3 -0
  12. package/dist/client/app/composables/copyCode.js +59 -70
  13. package/dist/client/app/composables/head.d.ts +5 -0
  14. package/dist/client/app/composables/head.js +56 -74
  15. package/dist/client/app/composables/icon.d.ts +12 -0
  16. package/dist/client/app/composables/icon.js +56 -0
  17. package/dist/client/app/composables/preFetch.d.ts +3 -0
  18. package/dist/client/app/composables/preFetch.js +64 -96
  19. package/dist/client/app/data.d.ts +9 -0
  20. package/dist/client/app/data.js +34 -59
  21. package/dist/client/app/devtools.d.ts +7 -0
  22. package/dist/client/app/devtools.js +29 -28
  23. package/dist/client/app/index.d.ts +11 -0
  24. package/dist/client/app/index.js +106 -131
  25. package/dist/client/app/router.d.ts +49 -0
  26. package/dist/client/app/router.js +198 -239
  27. package/dist/client/app/ssr.d.ts +4 -0
  28. package/dist/client/app/ssr.js +14 -9
  29. package/dist/client/app/theme.d.ts +24 -0
  30. package/dist/client/app/theme.js +0 -1
  31. package/dist/client/app/utils.d.ts +35 -0
  32. package/dist/client/app/utils.js +77 -110
  33. package/dist/client/index.d.ts +21 -137
  34. package/dist/client/index.js +8 -9
  35. package/dist/client/shared.d.ts +88 -0
  36. package/dist/client/shared.js +265 -141
  37. package/dist/client/theme-default/Layout.d.vue.ts +79 -0
  38. package/dist/client/theme-default/Layout.vue +33 -36
  39. package/dist/client/theme-default/NotFound.d.vue.ts +3 -0
  40. package/dist/client/theme-default/NotFound.vue +33 -35
  41. package/dist/client/theme-default/components/VPAlgoliaSearchBox.d.vue.ts +11 -0
  42. package/dist/client/theme-default/components/VPAlgoliaSearchBox.vue +202 -70
  43. package/dist/client/theme-default/components/VPBackdrop.d.vue.ts +6 -0
  44. package/dist/client/theme-default/components/VPBackdrop.vue +8 -12
  45. package/dist/client/theme-default/components/VPBadge.d.vue.ts +19 -0
  46. package/dist/client/theme-default/components/VPBadge.vue +49 -26
  47. package/dist/client/theme-default/components/VPButton.d.vue.ts +25 -0
  48. package/dist/client/theme-default/components/VPButton.vue +53 -36
  49. package/dist/client/theme-default/components/VPCarbonAds.d.vue.ts +7 -0
  50. package/dist/client/theme-default/components/VPCarbonAds.vue +51 -52
  51. package/dist/client/theme-default/components/VPContent.d.vue.ts +59 -0
  52. package/dist/client/theme-default/components/VPContent.vue +27 -26
  53. package/dist/client/theme-default/components/VPDoc.d.vue.ts +33 -0
  54. package/dist/client/theme-default/components/VPDoc.vue +52 -48
  55. package/dist/client/theme-default/components/VPDocAside.d.vue.ts +23 -0
  56. package/dist/client/theme-default/components/VPDocAside.vue +7 -8
  57. package/dist/client/theme-default/components/VPDocAsideCarbonAds.d.vue.ts +7 -0
  58. package/dist/client/theme-default/components/VPDocAsideCarbonAds.vue +7 -11
  59. package/dist/client/theme-default/components/VPDocAsideOutline.d.vue.ts +3 -0
  60. package/dist/client/theme-default/components/VPDocAsideOutline.vue +22 -38
  61. package/dist/client/theme-default/components/VPDocAsideSponsors.d.vue.ts +10 -0
  62. package/dist/client/theme-default/components/VPDocAsideSponsors.vue +17 -11
  63. package/dist/client/theme-default/components/VPDocFooter.d.vue.ts +13 -0
  64. package/dist/client/theme-default/components/VPDocFooter.vue +38 -45
  65. package/dist/client/theme-default/components/VPDocFooterLastUpdated.d.vue.ts +3 -0
  66. package/dist/client/theme-default/components/VPDocFooterLastUpdated.vue +30 -29
  67. package/dist/client/theme-default/components/VPDocOutlineItem.d.vue.ts +8 -0
  68. package/dist/client/theme-default/components/VPDocOutlineItem.vue +20 -19
  69. package/dist/client/theme-default/components/VPFeature.d.vue.ts +13 -0
  70. package/dist/client/theme-default/components/VPFeature.vue +62 -36
  71. package/dist/client/theme-default/components/VPFeatures.d.vue.ts +16 -0
  72. package/dist/client/theme-default/components/VPFeatures.vue +35 -48
  73. package/dist/client/theme-default/components/VPFlyout.d.vue.ts +26 -0
  74. package/dist/client/theme-default/components/VPFlyout.vue +111 -47
  75. package/dist/client/theme-default/components/VPFooter.d.vue.ts +3 -0
  76. package/dist/client/theme-default/components/VPFooter.vue +22 -15
  77. package/dist/client/theme-default/components/VPHero.d.vue.ts +38 -0
  78. package/dist/client/theme-default/components/VPHero.vue +109 -99
  79. package/dist/client/theme-default/components/VPHome.d.vue.ts +31 -0
  80. package/dist/client/theme-default/components/VPHome.vue +15 -15
  81. package/dist/client/theme-default/components/VPHomeContent.d.vue.ts +13 -0
  82. package/dist/client/theme-default/components/VPHomeContent.vue +9 -27
  83. package/dist/client/theme-default/components/VPHomeFeatures.d.vue.ts +3 -0
  84. package/dist/client/theme-default/components/VPHomeFeatures.vue +4 -5
  85. package/dist/client/theme-default/components/VPHomeHero.d.vue.ts +23 -0
  86. package/dist/client/theme-default/components/VPHomeHero.vue +5 -5
  87. package/dist/client/theme-default/components/VPHomeSponsors.d.vue.ts +21 -0
  88. package/dist/client/theme-default/components/VPHomeSponsors.vue +42 -43
  89. package/dist/client/theme-default/components/VPIcon.d.vue.ts +8 -0
  90. package/dist/client/theme-default/components/VPIcon.vue +29 -0
  91. package/dist/client/theme-default/components/VPImage.d.vue.ts +8 -0
  92. package/dist/client/theme-default/components/VPImage.vue +20 -14
  93. package/dist/client/theme-default/components/VPLink.d.vue.ts +23 -0
  94. package/dist/client/theme-default/components/VPLink.vue +42 -23
  95. package/dist/client/theme-default/components/VPLocalNav.d.vue.ts +10 -0
  96. package/dist/client/theme-default/components/VPLocalNav.vue +69 -86
  97. package/dist/client/theme-default/components/VPLocalNavOutlineDropdown.d.vue.ts +8 -0
  98. package/dist/client/theme-default/components/VPLocalNavOutlineDropdown.vue +98 -96
  99. package/dist/client/theme-default/components/VPLocalSearchBox.d.vue.ts +7 -0
  100. package/dist/client/theme-default/components/VPLocalSearchBox.vue +391 -454
  101. package/dist/client/theme-default/components/VPMenu.d.vue.ts +23 -0
  102. package/dist/client/theme-default/components/VPMenu.vue +19 -31
  103. package/dist/client/theme-default/components/VPMenuGroup.d.vue.ts +22 -0
  104. package/dist/client/theme-default/components/VPMenuGroup.vue +72 -18
  105. package/dist/client/theme-default/components/VPMenuLink.d.vue.ts +22 -0
  106. package/dist/client/theme-default/components/VPMenuLink.vue +65 -31
  107. package/dist/client/theme-default/components/VPNav.d.vue.ts +23 -0
  108. package/dist/client/theme-default/components/VPNav.vue +18 -24
  109. package/dist/client/theme-default/components/VPNavAppearance.d.vue.ts +9 -0
  110. package/dist/client/theme-default/components/VPNavAppearance.vue +88 -0
  111. package/dist/client/theme-default/components/VPNavBar.d.vue.ts +26 -0
  112. package/dist/client/theme-default/components/VPNavBar.vue +170 -142
  113. package/dist/client/theme-default/components/VPNavBarAskAiButton.d.vue.ts +3 -0
  114. package/dist/client/theme-default/components/VPNavBarAskAiButton.vue +31 -0
  115. package/dist/client/theme-default/components/VPNavBarExtra.d.vue.ts +3 -0
  116. package/dist/client/theme-default/components/VPNavBarExtra.vue +51 -73
  117. package/dist/client/theme-default/components/VPNavBarHamburger.d.vue.ts +10 -0
  118. package/dist/client/theme-default/components/VPNavBarHamburger.vue +38 -28
  119. package/dist/client/theme-default/components/VPNavBarSearch.d.vue.ts +3 -0
  120. package/dist/client/theme-default/components/VPNavBarSearch.vue +129 -160
  121. package/dist/client/theme-default/components/VPNavBarSearchButton.d.vue.ts +6 -0
  122. package/dist/client/theme-default/components/VPNavBarSearchButton.vue +48 -182
  123. package/dist/client/theme-default/components/VPNavBarTitle.d.vue.ts +15 -0
  124. package/dist/client/theme-default/components/VPNavBarTitle.vue +39 -38
  125. package/dist/client/theme-default/components/VPNavMenu.d.vue.ts +6 -0
  126. package/dist/client/theme-default/components/VPNavMenu.vue +76 -0
  127. package/dist/client/theme-default/components/VPNavMenuGroup.d.vue.ts +11 -0
  128. package/dist/client/theme-default/components/VPNavMenuGroup.vue +140 -0
  129. package/dist/client/theme-default/components/VPNavMenuLink.d.vue.ts +8 -0
  130. package/dist/client/theme-default/components/VPNavMenuLink.vue +69 -0
  131. package/dist/client/theme-default/components/VPNavScreen.d.vue.ts +18 -0
  132. package/dist/client/theme-default/components/VPNavScreen.vue +36 -34
  133. package/dist/client/theme-default/components/VPNavSocialLinks.d.vue.ts +6 -0
  134. package/dist/client/theme-default/components/VPNavSocialLinks.vue +36 -0
  135. package/dist/client/theme-default/components/VPNavTranslations.d.vue.ts +9 -0
  136. package/dist/client/theme-default/components/VPNavTranslations.vue +170 -0
  137. package/dist/client/theme-default/components/VPPage.d.vue.ts +15 -0
  138. package/dist/client/theme-default/components/VPSidebar.d.vue.ts +18 -0
  139. package/dist/client/theme-default/components/VPSidebar.vue +40 -53
  140. package/dist/client/theme-default/components/VPSidebarGroup.d.vue.ts +7 -0
  141. package/dist/client/theme-default/components/VPSidebarGroup.vue +24 -29
  142. package/dist/client/theme-default/components/VPSidebarItem.d.vue.ts +8 -0
  143. package/dist/client/theme-default/components/VPSidebarItem.vue +60 -93
  144. package/dist/client/theme-default/components/VPSkipLink.d.vue.ts +6 -0
  145. package/dist/client/theme-default/components/VPSkipLink.vue +23 -42
  146. package/dist/client/theme-default/components/VPSocialLink.d.vue.ts +11 -0
  147. package/dist/client/theme-default/components/VPSocialLink.vue +42 -49
  148. package/dist/client/theme-default/components/VPSocialLinks.d.vue.ts +10 -0
  149. package/dist/client/theme-default/components/VPSocialLinks.vue +26 -16
  150. package/dist/client/theme-default/components/VPSponsors.d.vue.ts +18 -0
  151. package/dist/client/theme-default/components/VPSponsors.vue +34 -33
  152. package/dist/client/theme-default/components/VPSponsorsGrid.d.vue.ts +15 -0
  153. package/dist/client/theme-default/components/VPSponsorsGrid.vue +23 -26
  154. package/dist/client/theme-default/components/VPSwitch.d.vue.ts +13 -0
  155. package/dist/client/theme-default/components/VPSwitch.vue +12 -13
  156. package/dist/client/theme-default/components/VPSwitchAppearance.d.vue.ts +3 -0
  157. package/dist/client/theme-default/components/VPSwitchAppearance.vue +16 -21
  158. package/dist/client/theme-default/components/VPTeamMembers.d.vue.ts +10 -0
  159. package/dist/client/theme-default/components/VPTeamMembers.vue +59 -32
  160. package/dist/client/theme-default/components/VPTeamMembersItem.d.vue.ts +10 -0
  161. package/dist/client/theme-default/components/VPTeamMembersItem.vue +62 -58
  162. package/dist/client/theme-default/components/VPTeamPage.d.vue.ts +13 -0
  163. package/dist/client/theme-default/components/VPTeamPage.vue +14 -14
  164. package/dist/client/theme-default/components/VPTeamPageSection.d.vue.ts +17 -0
  165. package/dist/client/theme-default/components/VPTeamPageSection.vue +20 -19
  166. package/dist/client/theme-default/components/VPTeamPageTitle.d.vue.ts +15 -0
  167. package/dist/client/theme-default/components/VPTeamPageTitle.vue +22 -22
  168. package/dist/client/theme-default/composables/data.d.ts +5 -0
  169. package/dist/client/theme-default/composables/data.js +5 -2
  170. package/dist/client/theme-default/composables/edit-link.d.ts +6 -0
  171. package/dist/client/theme-default/composables/edit-link.js +17 -15
  172. package/dist/client/theme-default/composables/flyout.d.ts +10 -0
  173. package/dist/client/theme-default/composables/flyout.js +33 -32
  174. package/dist/client/theme-default/composables/langs.d.ts +44 -0
  175. package/dist/client/theme-default/composables/langs.js +48 -24
  176. package/dist/client/theme-default/composables/layout.d.ts +13 -0
  177. package/dist/client/theme-default/composables/layout.js +68 -0
  178. package/dist/client/theme-default/composables/nav-overflow.d.ts +54 -0
  179. package/dist/client/theme-default/composables/nav-overflow.js +179 -0
  180. package/dist/client/theme-default/composables/nav.d.ts +25 -0
  181. package/dist/client/theme-default/composables/nav.js +58 -29
  182. package/dist/client/theme-default/composables/outline.d.ts +8 -0
  183. package/dist/client/theme-default/composables/outline.js +144 -166
  184. package/dist/client/theme-default/composables/prev-next.d.ts +16 -0
  185. package/dist/client/theme-default/composables/prev-next.js +34 -56
  186. package/dist/client/theme-default/composables/scroll-lock.d.ts +4 -0
  187. package/dist/client/theme-default/composables/scroll-lock.js +95 -0
  188. package/dist/client/theme-default/composables/sidebar.d.ts +25 -0
  189. package/dist/client/theme-default/composables/sidebar.js +96 -133
  190. package/dist/client/theme-default/composables/sponsor-grid.d.ts +10 -0
  191. package/dist/client/theme-default/composables/sponsor-grid.js +69 -76
  192. package/dist/client/theme-default/fonts/inter-italic-cyrillic-ext.woff2 +0 -0
  193. package/dist/client/theme-default/fonts/inter-italic-cyrillic.woff2 +0 -0
  194. package/dist/client/theme-default/fonts/inter-italic-greek-ext.woff2 +0 -0
  195. package/dist/client/theme-default/fonts/inter-italic-greek.woff2 +0 -0
  196. package/dist/client/theme-default/fonts/inter-italic-latin-ext.woff2 +0 -0
  197. package/dist/client/theme-default/fonts/inter-italic-latin.woff2 +0 -0
  198. package/dist/client/theme-default/fonts/inter-italic-symbols.woff2 +0 -0
  199. package/dist/client/theme-default/fonts/inter-italic-vietnamese.woff2 +0 -0
  200. package/dist/client/theme-default/fonts/inter-roman-cyrillic-ext.woff2 +0 -0
  201. package/dist/client/theme-default/fonts/inter-roman-cyrillic.woff2 +0 -0
  202. package/dist/client/theme-default/fonts/inter-roman-greek-ext.woff2 +0 -0
  203. package/dist/client/theme-default/fonts/inter-roman-greek.woff2 +0 -0
  204. package/dist/client/theme-default/fonts/inter-roman-latin-ext.woff2 +0 -0
  205. package/dist/client/theme-default/fonts/inter-roman-latin.woff2 +0 -0
  206. package/dist/client/theme-default/fonts/inter-roman-symbols.woff2 +0 -0
  207. package/dist/client/theme-default/fonts/inter-roman-vietnamese.woff2 +0 -0
  208. package/dist/client/theme-default/index.d.ts +3 -0
  209. package/dist/client/theme-default/index.js +4 -3
  210. package/dist/client/theme-default/styles/base.css +279 -211
  211. package/dist/client/theme-default/styles/components/custom-block.css +12 -7
  212. package/dist/client/theme-default/styles/components/vp-code-group.css +13 -16
  213. package/dist/client/theme-default/styles/components/vp-code.css +10 -2
  214. package/dist/client/theme-default/styles/components/vp-doc.css +188 -142
  215. package/dist/client/theme-default/styles/components/vp-sponsor.css +48 -37
  216. package/dist/client/theme-default/styles/docsearch.css +138 -0
  217. package/dist/client/theme-default/styles/fonts.css +216 -55
  218. package/dist/client/theme-default/styles/icons.css +42 -22
  219. package/dist/client/theme-default/styles/vars.css +111 -46
  220. package/dist/client/theme-default/support/docsearch.d.ts +57 -0
  221. package/dist/client/theme-default/support/docsearch.js +145 -0
  222. package/dist/client/theme-default/support/local-search.d.ts +9 -0
  223. package/dist/client/theme-default/support/local-search.js +31 -0
  224. package/dist/client/theme-default/support/lru.d.ts +11 -0
  225. package/dist/client/theme-default/support/lru.js +30 -33
  226. package/dist/client/theme-default/support/reactivity.d.ts +4 -0
  227. package/dist/client/theme-default/support/reactivity.js +10 -0
  228. package/dist/client/theme-default/support/sidebar.d.ts +27 -0
  229. package/dist/client/theme-default/support/sidebar.js +69 -80
  230. package/dist/client/theme-default/support/translation.d.ts +6 -0
  231. package/dist/client/theme-default/support/translation.js +33 -47
  232. package/dist/client/theme-default/support/utils.d.ts +7 -0
  233. package/dist/client/theme-default/support/utils.js +39 -30
  234. package/dist/client/theme-default/without-fonts.d.ts +25 -0
  235. package/dist/client/theme-default/without-fonts.js +37 -36
  236. package/dist/node/chunk-BjrVv9r8.js +28627 -0
  237. package/dist/node/cli.d.ts +1 -0
  238. package/dist/node/cli.js +160 -423
  239. package/dist/node/index.d.ts +1761 -2476
  240. package/dist/node/index.js +1 -121
  241. package/dist/web-types.json +75 -0
  242. package/package.json +89 -98
  243. package/template/.vitepress/config.js +3 -1
  244. package/template/.vitepress/theme/style.css +3 -11
  245. package/theme.d.ts +30 -23
  246. package/types/default-theme.d.ts +109 -113
  247. package/types/docsearch.d.ts +61 -142
  248. package/types/shared.d.ts +469 -50
  249. package/dist/client/theme-default/components/VPNavBarAppearance.vue +0 -32
  250. package/dist/client/theme-default/components/VPNavBarMenu.vue +0 -40
  251. package/dist/client/theme-default/components/VPNavBarMenuGroup.vue +0 -42
  252. package/dist/client/theme-default/components/VPNavBarMenuLink.vue +0 -53
  253. package/dist/client/theme-default/components/VPNavBarSocialLinks.vue +0 -27
  254. package/dist/client/theme-default/components/VPNavBarTranslations.vue +0 -47
  255. package/dist/client/theme-default/components/VPNavScreenAppearance.vue +0 -40
  256. package/dist/client/theme-default/components/VPNavScreenMenu.vue +0 -26
  257. package/dist/client/theme-default/components/VPNavScreenMenuGroup.vue +0 -112
  258. package/dist/client/theme-default/components/VPNavScreenMenuGroupLink.vue +0 -40
  259. package/dist/client/theme-default/components/VPNavScreenMenuGroupSection.vue +0 -34
  260. package/dist/client/theme-default/components/VPNavScreenMenuLink.vue +0 -43
  261. package/dist/client/theme-default/components/VPNavScreenSocialLinks.vue +0 -14
  262. package/dist/client/theme-default/components/VPNavScreenTranslations.vue +0 -73
  263. package/dist/client/theme-default/components/icons/VPIconAlignJustify.vue +0 -8
  264. package/dist/client/theme-default/components/icons/VPIconAlignLeft.vue +0 -8
  265. package/dist/client/theme-default/components/icons/VPIconAlignRight.vue +0 -8
  266. package/dist/client/theme-default/components/icons/VPIconArrowLeft.vue +0 -7
  267. package/dist/client/theme-default/components/icons/VPIconArrowRight.vue +0 -7
  268. package/dist/client/theme-default/components/icons/VPIconChevronDown.vue +0 -5
  269. package/dist/client/theme-default/components/icons/VPIconChevronLeft.vue +0 -5
  270. package/dist/client/theme-default/components/icons/VPIconChevronRight.vue +0 -5
  271. package/dist/client/theme-default/components/icons/VPIconChevronUp.vue +0 -5
  272. package/dist/client/theme-default/components/icons/VPIconEdit.vue +0 -6
  273. package/dist/client/theme-default/components/icons/VPIconHeart.vue +0 -5
  274. package/dist/client/theme-default/components/icons/VPIconLanguages.vue +0 -9
  275. package/dist/client/theme-default/components/icons/VPIconMinus.vue +0 -5
  276. package/dist/client/theme-default/components/icons/VPIconMinusSquare.vue +0 -6
  277. package/dist/client/theme-default/components/icons/VPIconMoon.vue +0 -5
  278. package/dist/client/theme-default/components/icons/VPIconMoreHorizontal.vue +0 -7
  279. package/dist/client/theme-default/components/icons/VPIconPlus.vue +0 -5
  280. package/dist/client/theme-default/components/icons/VPIconPlusSquare.vue +0 -6
  281. package/dist/client/theme-default/components/icons/VPIconSun.vue +0 -13
  282. package/dist/client/theme-default/composables/aside.js +0 -17
  283. package/dist/client/theme-default/composables/local-nav.js +0 -18
  284. package/dist/node/chunk-C-d2RJOW.js +0 -470
  285. package/dist/node/chunk-CxQfvv8o.js +0 -49065
  286. package/dist/node/worker_shikiResolveLang.js +0 -13
@@ -1,178 +1,156 @@
1
- import { getScrollOffset } from 'vitepress';
2
- import { onMounted, onUnmounted, onUpdated } from 'vue';
3
- import { throttleAndDebounce } from '../support/utils';
4
- import { useAside } from './aside';
1
+ import { throttleAndDebounce } from "../support/utils.js";
2
+ import { onMounted, onUnmounted, onUpdated } from "vue";
3
+ import { useMediaQuery } from "@vueuse/core";
4
+ //#region src/client/theme-default/composables/outline.ts
5
5
  const ignoreRE = /\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/;
6
- // cached list of anchor elements from resolveHeaders
7
6
  const resolvedHeaders = [];
8
- export function resolveTitle(theme) {
9
- return ((typeof theme.outline === 'object' &&
10
- !Array.isArray(theme.outline) &&
11
- theme.outline.label) ||
12
- theme.outlineTitle ||
13
- 'On this page');
7
+ function resolveTitle(theme) {
8
+ return typeof theme.outline === "object" && !Array.isArray(theme.outline) && theme.outline.label || "On this page";
14
9
  }
15
- export function getHeaders(range) {
16
- const headers = [
17
- ...document.querySelectorAll('.VPDoc :where(h1,h2,h3,h4,h5,h6)')
18
- ]
19
- .filter((el) => el.id && el.hasChildNodes())
20
- .map((el) => {
21
- const level = Number(el.tagName[1]);
22
- return {
23
- element: el,
24
- title: serializeHeader(el),
25
- link: '#' + el.id,
26
- level
27
- };
28
- });
29
- return resolveHeaders(headers, range);
10
+ function getHeaders(range) {
11
+ return resolveHeaders([...document.querySelectorAll(".VPDoc h1, .VPDoc h2, .VPDoc h3, .VPDoc h4, .VPDoc h5, .VPDoc h6")].filter((el) => el.id && el.hasChildNodes()).map((el) => {
12
+ const level = Number(el.tagName[1]);
13
+ return {
14
+ element: el,
15
+ title: serializeHeader(el),
16
+ link: "#" + el.id,
17
+ level
18
+ };
19
+ }), range);
30
20
  }
31
21
  function serializeHeader(h) {
32
- let ret = '';
33
- for (const node of h.childNodes) {
34
- if (node.nodeType === 1) {
35
- if (ignoreRE.test(node.className))
36
- continue;
37
- ret += node.textContent;
38
- }
39
- else if (node.nodeType === 3) {
40
- ret += node.textContent;
41
- }
42
- }
43
- return ret.trim();
22
+ let ret = "";
23
+ for (const node of h.childNodes) if (node.nodeType === 1) {
24
+ if (ignoreRE.test(node.className)) continue;
25
+ ret += node.textContent;
26
+ } else if (node.nodeType === 3) ret += node.textContent;
27
+ return ret.trim();
44
28
  }
45
- export function resolveHeaders(headers, range) {
46
- if (range === false) {
47
- return [];
48
- }
49
- const levelsRange = (typeof range === 'object' && !Array.isArray(range)
50
- ? range.level
51
- : range) || 2;
52
- const [high, low] = typeof levelsRange === 'number'
53
- ? [levelsRange, levelsRange]
54
- : levelsRange === 'deep'
55
- ? [2, 6]
56
- : levelsRange;
57
- return buildTree(headers, high, low);
29
+ function resolveHeaders(headers, range) {
30
+ if (range === false) return [];
31
+ const levelsRange = (typeof range === "object" && !Array.isArray(range) ? range.level : range) || 2;
32
+ const [high, low] = typeof levelsRange === "number" ? [levelsRange, levelsRange] : levelsRange === "deep" ? [2, 6] : levelsRange;
33
+ return buildTree(headers, high, low);
58
34
  }
59
- export function useActiveAnchor(container, marker) {
60
- const { isAsideEnabled } = useAside();
61
- const onScroll = throttleAndDebounce(setActiveLink, 100);
62
- let prevActiveLink = null;
63
- onMounted(() => {
64
- requestAnimationFrame(setActiveLink);
65
- window.addEventListener('scroll', onScroll);
66
- });
67
- onUpdated(() => {
68
- // sidebar update means a route change
69
- activateLink(location.hash);
70
- });
71
- onUnmounted(() => {
72
- window.removeEventListener('scroll', onScroll);
73
- });
74
- function setActiveLink() {
75
- if (!isAsideEnabled.value) {
76
- return;
77
- }
78
- const scrollY = window.scrollY;
79
- const innerHeight = window.innerHeight;
80
- const offsetHeight = document.body.offsetHeight;
81
- const isBottom = Math.abs(scrollY + innerHeight - offsetHeight) < 1;
82
- // resolvedHeaders may be repositioned, hidden or fix positioned
83
- const headers = resolvedHeaders
84
- .map(({ element, link }) => ({
85
- link,
86
- top: getAbsoluteTop(element)
87
- }))
88
- .filter(({ top }) => !Number.isNaN(top))
89
- .sort((a, b) => a.top - b.top);
90
- // no headers available for active link
91
- if (!headers.length) {
92
- activateLink(null);
93
- return;
94
- }
95
- // page top
96
- if (scrollY < 1) {
97
- activateLink(null);
98
- return;
99
- }
100
- // page bottom - highlight last link
101
- if (isBottom) {
102
- activateLink(headers[headers.length - 1].link);
103
- return;
104
- }
105
- // find the last header above the top of viewport
106
- let activeLink = null;
107
- for (const { link, top } of headers) {
108
- if (top > scrollY + getScrollOffset() + 4) {
109
- break;
110
- }
111
- activeLink = link;
112
- }
113
- activateLink(activeLink);
114
- }
115
- function activateLink(hash) {
116
- if (prevActiveLink) {
117
- prevActiveLink.classList.remove('active');
118
- }
119
- if (hash == null) {
120
- prevActiveLink = null;
121
- }
122
- else {
123
- prevActiveLink = container.value.querySelector(`a[href="${decodeURIComponent(hash)}"]`);
124
- }
125
- const activeLink = prevActiveLink;
126
- if (activeLink) {
127
- activeLink.classList.add('active');
128
- marker.value.style.top = activeLink.offsetTop + 39 + 'px';
129
- marker.value.style.opacity = '1';
130
- }
131
- else {
132
- marker.value.style.top = '33px';
133
- marker.value.style.opacity = '0';
134
- }
135
- }
35
+ function useActiveAnchor(container, marker) {
36
+ const isAsideVisible = useMediaQuery("(min-width: 80rem)");
37
+ const onScroll = throttleAndDebounce(setActiveLink, 100);
38
+ let prevActiveLink = null;
39
+ let ignoreScrollOnce = false;
40
+ onMounted(() => {
41
+ requestAnimationFrame(setActiveLink);
42
+ window.addEventListener("scroll", onScroll);
43
+ container.value?.addEventListener("click", onClick);
44
+ });
45
+ onUpdated(() => {
46
+ activateLink(location.hash);
47
+ });
48
+ onUnmounted(() => {
49
+ window.removeEventListener("scroll", onScroll);
50
+ });
51
+ function onClick(e) {
52
+ if (!isAsideVisible.value) return;
53
+ const hash = e.target instanceof Element ? e.target.closest("a")?.hash : null;
54
+ if (hash) {
55
+ ignoreScrollOnce = true;
56
+ activateLink(hash);
57
+ }
58
+ }
59
+ function setActiveLink() {
60
+ if (!isAsideVisible.value) return;
61
+ if (ignoreScrollOnce) {
62
+ ignoreScrollOnce = false;
63
+ return;
64
+ }
65
+ const scrollY = window.scrollY;
66
+ const innerHeight = window.innerHeight;
67
+ const offsetHeight = document.body.offsetHeight;
68
+ const isBottom = scrollY + innerHeight - offsetHeight >= 0;
69
+ const headers = resolvedHeaders.map(({ element, link }) => ({
70
+ link,
71
+ top: getAbsoluteTop(element),
72
+ scrollMarginTop: Number.parseFloat(getComputedStyle(element).scrollMarginTop) || 0
73
+ })).filter(({ top }) => !Number.isNaN(top)).sort((a, b) => a.top - b.top);
74
+ if (!headers.length) {
75
+ activateLink(null);
76
+ return;
77
+ }
78
+ if (scrollY < 1) {
79
+ activateLink(null);
80
+ return;
81
+ }
82
+ if (isBottom) {
83
+ activateLink(headers.at(-1)?.link ?? null);
84
+ return;
85
+ }
86
+ let activeLink = null;
87
+ for (const { link, top, scrollMarginTop } of headers) {
88
+ if (top > scrollY + scrollMarginTop + 4) break;
89
+ activeLink = link;
90
+ }
91
+ activateLink(activeLink);
92
+ }
93
+ function activateLink(hash) {
94
+ const activeLink = hash != null ? container.value?.querySelector(`a[href$="${decodeURIComponent(hash)}"]`) ?? null : null;
95
+ if (activeLink === prevActiveLink) return;
96
+ prevActiveLink?.classList.remove("active");
97
+ prevActiveLink = activeLink;
98
+ if (activeLink) {
99
+ activeLink.classList.add("active");
100
+ if (marker.value) {
101
+ marker.value.style.top = activeLink.offsetTop + (activeLink.offsetParent?.offsetTop ?? 0) + (activeLink.offsetHeight - marker.value.offsetHeight) / 2 + "px";
102
+ marker.value.style.opacity = "1";
103
+ }
104
+ activeLink.scrollIntoView({
105
+ block: "nearest",
106
+ behavior: "smooth"
107
+ });
108
+ } else if (marker.value) {
109
+ marker.value.style.top = "";
110
+ marker.value.style.opacity = "0";
111
+ }
112
+ }
136
113
  }
137
114
  function getAbsoluteTop(element) {
138
- let offsetTop = 0;
139
- while (element !== document.body) {
140
- if (element === null) {
141
- // child element is:
142
- // - not attached to the DOM (display: none)
143
- // - set to fixed position (not scrollable)
144
- // - body or html element (null offsetParent)
145
- return NaN;
146
- }
147
- offsetTop += element.offsetTop;
148
- element = element.offsetParent;
149
- }
150
- return offsetTop;
115
+ let offsetTop = 0;
116
+ while (element !== document.body) {
117
+ if (element === null) return NaN;
118
+ offsetTop += element.offsetTop;
119
+ element = element.offsetParent;
120
+ }
121
+ return offsetTop;
151
122
  }
152
123
  function buildTree(data, min, max) {
153
- resolvedHeaders.length = 0;
154
- const result = [];
155
- const stack = [];
156
- data.forEach((item) => {
157
- const node = { ...item, children: [] };
158
- let parent = stack[stack.length - 1];
159
- while (parent && parent.level >= node.level) {
160
- stack.pop();
161
- parent = stack[stack.length - 1];
162
- }
163
- if (node.element.classList.contains('ignore-header') ||
164
- (parent && 'shouldIgnore' in parent)) {
165
- stack.push({ level: node.level, shouldIgnore: true });
166
- return;
167
- }
168
- if (node.level > max || node.level < min)
169
- return;
170
- resolvedHeaders.push({ element: node.element, link: node.link });
171
- if (parent)
172
- parent.children.push(node);
173
- else
174
- result.push(node);
175
- stack.push(node);
176
- });
177
- return result;
124
+ resolvedHeaders.length = 0;
125
+ const result = [];
126
+ const stack = [];
127
+ data.forEach((item) => {
128
+ const node = {
129
+ ...item,
130
+ children: []
131
+ };
132
+ let parent = stack[stack.length - 1];
133
+ while (parent && parent.level >= node.level) {
134
+ stack.pop();
135
+ parent = stack[stack.length - 1];
136
+ }
137
+ if (node.element.classList.contains("ignore-header") || parent && "shouldIgnore" in parent) {
138
+ stack.push({
139
+ level: node.level,
140
+ shouldIgnore: true
141
+ });
142
+ return;
143
+ }
144
+ if (node.level > max || node.level < min) return;
145
+ resolvedHeaders.push({
146
+ element: node.element,
147
+ link: node.link
148
+ });
149
+ if (parent) parent.children.push(node);
150
+ else result.push(node);
151
+ stack.push(node);
152
+ });
153
+ return result;
178
154
  }
155
+ //#endregion
156
+ export { getHeaders, resolveHeaders, resolveTitle, useActiveAnchor };
@@ -0,0 +1,16 @@
1
+ //#region src/client/theme-default/composables/prev-next.d.ts
2
+ export declare function usePrevNext(): import("vue").ComputedRef<{
3
+ prev?: {
4
+ text?: string;
5
+ link?: string;
6
+ target?: string;
7
+ rel?: string;
8
+ };
9
+ next?: {
10
+ text?: string;
11
+ link?: string;
12
+ target?: string;
13
+ rel?: string;
14
+ };
15
+ }>;
16
+ //#endregion
@@ -1,57 +1,35 @@
1
- import { computed } from 'vue';
2
- import { isActive } from '../../shared';
3
- import { getFlatSideBarLinks, getSidebar } from '../support/sidebar';
4
- import { useData } from './data';
5
- export function usePrevNext() {
6
- const { page, theme, frontmatter } = useData();
7
- return computed(() => {
8
- const sidebar = getSidebar(theme.value.sidebar, page.value.relativePath);
9
- const links = getFlatSideBarLinks(sidebar);
10
- // ignore inner-page links with hashes
11
- const candidates = uniqBy(links, (link) => link.link.replace(/[?#].*$/, ''));
12
- const index = candidates.findIndex((link) => {
13
- return isActive(page.value.relativePath, link.link);
14
- });
15
- const hidePrev = (theme.value.docFooter?.prev === false && !frontmatter.value.prev) ||
16
- frontmatter.value.prev === false;
17
- const hideNext = (theme.value.docFooter?.next === false && !frontmatter.value.next) ||
18
- frontmatter.value.next === false;
19
- return {
20
- prev: hidePrev
21
- ? undefined
22
- : {
23
- text: (typeof frontmatter.value.prev === 'string'
24
- ? frontmatter.value.prev
25
- : typeof frontmatter.value.prev === 'object'
26
- ? frontmatter.value.prev.text
27
- : undefined) ??
28
- candidates[index - 1]?.docFooterText ??
29
- candidates[index - 1]?.text,
30
- link: (typeof frontmatter.value.prev === 'object'
31
- ? frontmatter.value.prev.link
32
- : undefined) ?? candidates[index - 1]?.link
33
- },
34
- next: hideNext
35
- ? undefined
36
- : {
37
- text: (typeof frontmatter.value.next === 'string'
38
- ? frontmatter.value.next
39
- : typeof frontmatter.value.next === 'object'
40
- ? frontmatter.value.next.text
41
- : undefined) ??
42
- candidates[index + 1]?.docFooterText ??
43
- candidates[index + 1]?.text,
44
- link: (typeof frontmatter.value.next === 'object'
45
- ? frontmatter.value.next.link
46
- : undefined) ?? candidates[index + 1]?.link
47
- }
48
- };
49
- });
50
- }
51
- function uniqBy(array, keyFn) {
52
- const seen = new Set();
53
- return array.filter((item) => {
54
- const k = keyFn(item);
55
- return seen.has(k) ? false : seen.add(k);
56
- });
1
+ import { isActive, normalize } from "../../shared.js";
2
+ import { useData } from "./data.js";
3
+ import { uniqBy } from "../support/utils.js";
4
+ import { getFlatSideBarLinks, getSidebar } from "../support/sidebar.js";
5
+ import { computed } from "vue";
6
+ //#region src/client/theme-default/composables/prev-next.ts
7
+ function usePrevNext() {
8
+ const { theme, page, frontmatter } = useData();
9
+ return computed(() => {
10
+ const sidebar = getSidebar(theme.value.sidebar, page.value.relativePath);
11
+ const links = getFlatSideBarLinks(sidebar);
12
+ const candidates = uniqBy(links, (link) => normalize(link.link));
13
+ const index = candidates.findIndex((link) => {
14
+ return isActive(page.value.relativePath, "", link.link, false, true);
15
+ });
16
+ const hidePrev = theme.value.docFooter?.prev === false && !frontmatter.value.prev || frontmatter.value.prev === false;
17
+ const hideNext = theme.value.docFooter?.next === false && !frontmatter.value.next || frontmatter.value.next === false;
18
+ return {
19
+ prev: hidePrev ? void 0 : {
20
+ text: (typeof frontmatter.value.prev === "string" ? frontmatter.value.prev : typeof frontmatter.value.prev === "object" ? frontmatter.value.prev.text : void 0) ?? candidates[index - 1]?.docFooterText ?? candidates[index - 1]?.text,
21
+ link: (typeof frontmatter.value.prev === "object" ? frontmatter.value.prev.link : void 0) ?? candidates[index - 1]?.link,
22
+ target: (typeof frontmatter.value.prev === "object" ? frontmatter.value.prev.target : void 0) ?? candidates[index - 1]?.target,
23
+ rel: (typeof frontmatter.value.prev === "object" ? frontmatter.value.prev.rel : void 0) ?? candidates[index - 1]?.rel
24
+ },
25
+ next: hideNext ? void 0 : {
26
+ text: (typeof frontmatter.value.next === "string" ? frontmatter.value.next : typeof frontmatter.value.next === "object" ? frontmatter.value.next.text : void 0) ?? candidates[index + 1]?.docFooterText ?? candidates[index + 1]?.text,
27
+ link: (typeof frontmatter.value.next === "object" ? frontmatter.value.next.link : void 0) ?? candidates[index + 1]?.link,
28
+ target: (typeof frontmatter.value.next === "object" ? frontmatter.value.next.target : void 0) ?? candidates[index + 1]?.target,
29
+ rel: (typeof frontmatter.value.next === "object" ? frontmatter.value.next.rel : void 0) ?? candidates[index + 1]?.rel
30
+ }
31
+ };
32
+ });
57
33
  }
34
+ //#endregion
35
+ export { usePrevNext };
@@ -0,0 +1,4 @@
1
+ import { WritableComputedRef } from "vue";
2
+ //#region src/client/theme-default/composables/scroll-lock.d.ts
3
+ export declare function useBodyScrollLock(): WritableComputedRef<boolean>;
4
+ //#endregion
@@ -0,0 +1,95 @@
1
+ import { computed, onScopeDispose, shallowRef } from "vue";
2
+ import { inBrowser } from "vitepress";
3
+ //#region src/client/theme-default/composables/scroll-lock.ts
4
+ const isIOS = inBrowser && (/iP(?:ad|hone|od)/.test(navigator.userAgent) || navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1);
5
+ const scrollKeys = /* @__PURE__ */ new Set([
6
+ " ",
7
+ "PageUp",
8
+ "PageDown",
9
+ "Home",
10
+ "End",
11
+ "ArrowUp",
12
+ "ArrowDown",
13
+ "ArrowLeft",
14
+ "ArrowRight"
15
+ ]);
16
+ const listenerOptions = {
17
+ capture: true,
18
+ passive: false
19
+ };
20
+ function isScrollable(target) {
21
+ let el = target instanceof Element ? target : null;
22
+ while (el && el !== document.body) {
23
+ const { overflowX, overflowY } = getComputedStyle(el);
24
+ if ((overflowY === "auto" || overflowY === "scroll") && el.scrollHeight > el.clientHeight || (overflowX === "auto" || overflowX === "scroll") && el.scrollWidth > el.clientWidth) return true;
25
+ el = el.parentElement;
26
+ }
27
+ return false;
28
+ }
29
+ function blockScroll(e) {
30
+ if ("touches" in e && e.touches.length > 1) return;
31
+ if (!isScrollable(e.target)) e.preventDefault();
32
+ }
33
+ function blockScrollKeys(e) {
34
+ if (e.metaKey || e.ctrlKey || e.altKey || !scrollKeys.has(e.key)) return;
35
+ const el = e.target;
36
+ if (el instanceof HTMLElement && (el.isContentEditable || el.matches("input, textarea, select"))) return;
37
+ blockScroll(e);
38
+ }
39
+ let overflowLockCount = 0;
40
+ let eventLockCount = 0;
41
+ let initialOverflow;
42
+ let initialGutter;
43
+ function lockOverflow(reserveGutter) {
44
+ if (++overflowLockCount > 1) return;
45
+ const html = document.documentElement;
46
+ if (reserveGutter && !getComputedStyle(html).scrollbarGutter.includes("stable")) {
47
+ initialGutter = html.style.scrollbarGutter;
48
+ html.style.scrollbarGutter = "stable";
49
+ }
50
+ initialOverflow = document.body.style.overflow;
51
+ document.body.style.overflow = "hidden";
52
+ if (isIOS) document.addEventListener("touchmove", blockScroll, listenerOptions);
53
+ }
54
+ function unlockOverflow() {
55
+ if (--overflowLockCount > 0) return;
56
+ if (isIOS) document.removeEventListener("touchmove", blockScroll, listenerOptions);
57
+ document.body.style.overflow = initialOverflow ?? "";
58
+ if (initialGutter !== void 0) document.documentElement.style.scrollbarGutter = initialGutter;
59
+ initialOverflow = initialGutter = void 0;
60
+ }
61
+ function lockEvents() {
62
+ if (++eventLockCount > 1) return;
63
+ document.addEventListener("wheel", blockScroll, listenerOptions);
64
+ document.addEventListener("touchmove", blockScroll, listenerOptions);
65
+ document.addEventListener("keydown", blockScrollKeys, listenerOptions);
66
+ }
67
+ function unlockEvents() {
68
+ if (--eventLockCount > 0) return;
69
+ document.removeEventListener("wheel", blockScroll, listenerOptions);
70
+ document.removeEventListener("touchmove", blockScroll, listenerOptions);
71
+ document.removeEventListener("keydown", blockScrollKeys, listenerOptions);
72
+ }
73
+ function useBodyScrollLock() {
74
+ const isLocked = shallowRef(false);
75
+ let useEvents = false;
76
+ function lock() {
77
+ if (isLocked.value) return;
78
+ const scrollbarTakesSpace = window.innerWidth > document.documentElement.clientWidth;
79
+ useEvents = scrollbarTakesSpace && !CSS.supports("scrollbar-gutter", "stable");
80
+ useEvents ? lockEvents() : lockOverflow(scrollbarTakesSpace);
81
+ isLocked.value = true;
82
+ }
83
+ function unlock() {
84
+ if (!isLocked.value) return;
85
+ useEvents ? unlockEvents() : unlockOverflow();
86
+ isLocked.value = false;
87
+ }
88
+ onScopeDispose(unlock);
89
+ return computed({
90
+ get: () => isLocked.value,
91
+ set: (value) => value ? lock() : unlock()
92
+ });
93
+ }
94
+ //#endregion
95
+ export { useBodyScrollLock };
@@ -0,0 +1,25 @@
1
+ import { ComputedRef } from "vue";
2
+ import { DefaultTheme } from "vitepress/theme";
3
+ //#region src/client/theme-default/composables/sidebar.d.ts
4
+ /**
5
+ * a11y: cache the element that opened the Sidebar (the menu button) then
6
+ * focus that button again when Menu is closed with Escape key.
7
+ */
8
+ export declare function useCloseSidebarOnEscape(close: () => void): void;
9
+ export declare function useSidebarControl(): {
10
+ isOpen: import("vue").Ref<boolean, boolean>;
11
+ open: () => void;
12
+ close: () => void;
13
+ toggle: () => void;
14
+ };
15
+ export declare function useSidebarItemControl(item: ComputedRef<DefaultTheme.SidebarItem>): {
16
+ collapsed: import("vue").Ref<boolean, boolean>;
17
+ collapsible: ComputedRef<boolean>;
18
+ isLink: ComputedRef<boolean>;
19
+ isActiveLink: ComputedRef<boolean>;
20
+ isCurrentLink: ComputedRef<boolean>;
21
+ hasActiveLink: ComputedRef<boolean>;
22
+ hasChildren: ComputedRef<boolean>;
23
+ toggle: () => void;
24
+ };
25
+ //#endregion