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
@@ -0,0 +1,31 @@
1
+ import { tokenizeSearchText } from "../../shared.js";
2
+ import MiniSearch from "minisearch";
3
+ //#region src/client/theme-default/support/local-search.ts
4
+ /**
5
+ * Loads a serialized local search index with the same options that were used
6
+ * to build it (functions are not serialized) plus the default search options.
7
+ */
8
+ function loadLocalSearchIndex(json, miniSearch) {
9
+ return MiniSearch.loadJSON(json, {
10
+ fields: [
11
+ "title",
12
+ "titles",
13
+ "text"
14
+ ],
15
+ storeFields: ["title", "titles"],
16
+ tokenize: tokenizeSearchText,
17
+ searchOptions: {
18
+ fuzzy: .2,
19
+ prefix: true,
20
+ boost: {
21
+ title: 4,
22
+ text: 2,
23
+ titles: 1
24
+ },
25
+ ...miniSearch?.searchOptions
26
+ },
27
+ ...miniSearch?.options
28
+ });
29
+ }
30
+ //#endregion
31
+ export { loadLocalSearchIndex };
@@ -0,0 +1,11 @@
1
+ //#region src/client/theme-default/support/lru.d.ts
2
+ export declare class LRUCache<K, V> {
3
+ private max;
4
+ private cache;
5
+ constructor(max?: number);
6
+ get(key: K): V | undefined;
7
+ set(key: K, val: V): void;
8
+ first(): K | undefined;
9
+ clear(): void;
10
+ }
11
+ //#endregion
@@ -1,33 +1,30 @@
1
- // adapted from https://stackoverflow.com/a/46432113/11613622
2
- export class LRUCache {
3
- max;
4
- cache;
5
- constructor(max = 10) {
6
- this.max = max;
7
- this.cache = new Map();
8
- }
9
- get(key) {
10
- let item = this.cache.get(key);
11
- if (item !== undefined) {
12
- // refresh key
13
- this.cache.delete(key);
14
- this.cache.set(key, item);
15
- }
16
- return item;
17
- }
18
- set(key, val) {
19
- // refresh key
20
- if (this.cache.has(key))
21
- this.cache.delete(key);
22
- // evict oldest
23
- else if (this.cache.size === this.max)
24
- this.cache.delete(this.first());
25
- this.cache.set(key, val);
26
- }
27
- first() {
28
- return this.cache.keys().next().value;
29
- }
30
- clear() {
31
- this.cache.clear();
32
- }
33
- }
1
+ //#region src/client/theme-default/support/lru.ts
2
+ var LRUCache = class {
3
+ max;
4
+ cache;
5
+ constructor(max = 10) {
6
+ this.max = max;
7
+ this.cache = /* @__PURE__ */ new Map();
8
+ }
9
+ get(key) {
10
+ let item = this.cache.get(key);
11
+ if (item !== void 0) {
12
+ this.cache.delete(key);
13
+ this.cache.set(key, item);
14
+ }
15
+ return item;
16
+ }
17
+ set(key, val) {
18
+ if (this.cache.has(key)) this.cache.delete(key);
19
+ else if (this.cache.size === this.max) this.cache.delete(this.first());
20
+ this.cache.set(key, val);
21
+ }
22
+ first() {
23
+ return this.cache.keys().next().value;
24
+ }
25
+ clear() {
26
+ this.cache.clear();
27
+ }
28
+ };
29
+ //#endregion
30
+ export { LRUCache };
@@ -0,0 +1,4 @@
1
+ import { ComputedRef } from "vue";
2
+ //#region src/client/theme-default/support/reactivity.d.ts
3
+ export declare function smartComputed<T>(getter: () => T, comparator?: (newValue: T, oldValue: T) => boolean): ComputedRef<T>;
4
+ //#endregion
@@ -0,0 +1,10 @@
1
+ import { computed } from "vue";
2
+ //#region src/client/theme-default/support/reactivity.ts
3
+ function smartComputed(getter, comparator = (newValue, oldValue) => JSON.stringify(newValue) === JSON.stringify(oldValue)) {
4
+ return computed((oldValue) => {
5
+ const newValue = getter();
6
+ return oldValue === void 0 || !comparator(newValue, oldValue) ? newValue : oldValue;
7
+ });
8
+ }
9
+ //#endregion
10
+ export { smartComputed };
@@ -0,0 +1,27 @@
1
+ import { DefaultTheme } from "vitepress/theme";
2
+ //#region src/client/theme-default/support/sidebar.d.ts
3
+ export interface SidebarLink {
4
+ text: string;
5
+ link: string;
6
+ docFooterText?: string;
7
+ rel?: string;
8
+ target?: string;
9
+ }
10
+ type SidebarItem = DefaultTheme.SidebarItem;
11
+ /**
12
+ * Get the `Sidebar` from sidebar option. This method will ensure to get correct
13
+ * sidebar config from `MultiSideBarConfig` with various path combinations such
14
+ * as matching `guide/` and `/guide/`. If no matching config was found, it will
15
+ * return empty array.
16
+ */
17
+ export declare function getSidebar(_sidebar: DefaultTheme.Sidebar | undefined, path: string): SidebarItem[];
18
+ /**
19
+ * Get or generate sidebar group from the given sidebar items.
20
+ */
21
+ export declare function getSidebarGroups(sidebar: SidebarItem[]): SidebarItem[];
22
+ export declare function getFlatSideBarLinks(sidebar: SidebarItem[]): SidebarLink[];
23
+ /**
24
+ * Check if the given sidebar item contains any active link.
25
+ */
26
+ export declare function hasActiveLink(path: string, hash: string, items: SidebarItem | SidebarItem[], skipHashCheck?: boolean): boolean;
27
+ //#endregion
@@ -1,89 +1,78 @@
1
- import { isActive } from '../../shared';
2
- import { ensureStartingSlash } from './utils';
1
+ import { isActive, isExternal } from "../../shared.js";
2
+ import { ensureStartingSlash } from "./utils.js";
3
+ //#region src/client/theme-default/support/sidebar.ts
3
4
  /**
4
- * Get the `Sidebar` from sidebar option. This method will ensure to get correct
5
- * sidebar config from `MultiSideBarConfig` with various path combinations such
6
- * as matching `guide/` and `/guide/`. If no matching config was found, it will
7
- * return empty array.
8
- */
9
- export function getSidebar(_sidebar, path) {
10
- if (Array.isArray(_sidebar))
11
- return addBase(_sidebar);
12
- if (_sidebar == null)
13
- return [];
14
- path = ensureStartingSlash(path);
15
- const dir = Object.keys(_sidebar)
16
- .sort((a, b) => {
17
- return b.split('/').length - a.split('/').length;
18
- })
19
- .find((dir) => {
20
- // make sure the multi sidebar key starts with slash too
21
- return path.startsWith(ensureStartingSlash(dir));
22
- });
23
- const sidebar = dir ? _sidebar[dir] : [];
24
- return Array.isArray(sidebar)
25
- ? addBase(sidebar)
26
- : addBase(sidebar.items, sidebar.base);
5
+ * Get the `Sidebar` from sidebar option. This method will ensure to get correct
6
+ * sidebar config from `MultiSideBarConfig` with various path combinations such
7
+ * as matching `guide/` and `/guide/`. If no matching config was found, it will
8
+ * return empty array.
9
+ */
10
+ function getSidebar(_sidebar, path) {
11
+ if (Array.isArray(_sidebar)) return addBase(_sidebar);
12
+ if (_sidebar == null) return [];
13
+ path = ensureStartingSlash(path);
14
+ const dir = Object.keys(_sidebar).sort((a, b) => {
15
+ return b.split("/").length - a.split("/").length;
16
+ }).find((dir) => {
17
+ return path.startsWith(ensureStartingSlash(dir));
18
+ });
19
+ const sidebar = dir ? _sidebar[dir] ?? [] : [];
20
+ return Array.isArray(sidebar) ? addBase(sidebar) : addBase(sidebar.items, sidebar.base);
27
21
  }
28
22
  /**
29
- * Get or generate sidebar group from the given sidebar items.
30
- */
31
- export function getSidebarGroups(sidebar) {
32
- const groups = [];
33
- let lastGroupIndex = 0;
34
- for (const index in sidebar) {
35
- const item = sidebar[index];
36
- if (item.items) {
37
- lastGroupIndex = groups.push(item);
38
- continue;
39
- }
40
- if (!groups[lastGroupIndex]) {
41
- groups.push({ items: [] });
42
- }
43
- groups[lastGroupIndex].items.push(item);
44
- }
45
- return groups;
23
+ * Get or generate sidebar group from the given sidebar items.
24
+ */
25
+ function getSidebarGroups(sidebar) {
26
+ const groups = [];
27
+ let lastGroupIndex = 0;
28
+ for (const item of sidebar) {
29
+ if (item.items) {
30
+ lastGroupIndex = groups.push(item);
31
+ continue;
32
+ }
33
+ let group = groups[lastGroupIndex];
34
+ if (!group) {
35
+ group = { items: [] };
36
+ groups.push(group);
37
+ }
38
+ group.items?.push(item);
39
+ }
40
+ return groups;
46
41
  }
47
- export function getFlatSideBarLinks(sidebar) {
48
- const links = [];
49
- function recursivelyExtractLinks(items) {
50
- for (const item of items) {
51
- if (item.text && item.link) {
52
- links.push({
53
- text: item.text,
54
- link: item.link,
55
- docFooterText: item.docFooterText
56
- });
57
- }
58
- if (item.items) {
59
- recursivelyExtractLinks(item.items);
60
- }
61
- }
62
- }
63
- recursivelyExtractLinks(sidebar);
64
- return links;
42
+ function getFlatSideBarLinks(sidebar) {
43
+ const links = [];
44
+ function recursivelyExtractLinks(items) {
45
+ for (const item of items) {
46
+ if (item.text && item.link) links.push({
47
+ text: item.text,
48
+ link: item.link,
49
+ docFooterText: item.docFooterText,
50
+ rel: item.rel,
51
+ target: item.target
52
+ });
53
+ if (item.items) recursivelyExtractLinks(item.items);
54
+ }
55
+ }
56
+ recursivelyExtractLinks(sidebar);
57
+ return links;
65
58
  }
66
59
  /**
67
- * Check if the given sidebar item contains any active link.
68
- */
69
- export function hasActiveLink(path, items) {
70
- if (Array.isArray(items)) {
71
- return items.some((item) => hasActiveLink(path, item));
72
- }
73
- return isActive(path, items.link)
74
- ? true
75
- : items.items
76
- ? hasActiveLink(path, items.items)
77
- : false;
60
+ * Check if the given sidebar item contains any active link.
61
+ */
62
+ function hasActiveLink(path, hash, items, skipHashCheck = false) {
63
+ if (Array.isArray(items)) return items.some((item) => hasActiveLink(path, hash, item, skipHashCheck));
64
+ if (items.link && isActive(path, hash, items.link, false, skipHashCheck)) return true;
65
+ if (items.items) return hasActiveLink(path, hash, items.items, skipHashCheck);
66
+ return false;
78
67
  }
79
68
  function addBase(items, _base) {
80
- return [...items].map((_item) => {
81
- const item = { ..._item };
82
- const base = item.base || _base;
83
- if (base && item.link)
84
- item.link = base + item.link;
85
- if (item.items)
86
- item.items = addBase(item.items, base);
87
- return item;
88
- });
69
+ return [...items].map((_item) => {
70
+ const item = { ..._item };
71
+ const base = item.base || _base;
72
+ if (base && item.link && !isExternal(item.link)) item.link = base + item.link.replace(/^\//, base.endsWith("/") ? "" : "/");
73
+ if (item.items) item.items = addBase(item.items, base);
74
+ return item;
75
+ });
89
76
  }
77
+ //#endregion
78
+ export { getFlatSideBarLinks, getSidebar, getSidebarGroups, hasActiveLink };
@@ -0,0 +1,6 @@
1
+ //#region src/client/theme-default/support/translation.d.ts
2
+ /**
3
+ * @param themeObject Can be an object with `translations` and `locales` properties
4
+ */
5
+ export declare function createSearchTranslate(defaultTranslations: Record<string, any>): (key: string) => string;
6
+ //#endregion
@@ -1,49 +1,35 @@
1
- import { useData } from '../composables/data';
1
+ import { useData } from "../composables/data.js";
2
+ //#region src/client/theme-default/support/translation.ts
2
3
  /**
3
- * @param themeObject Can be an object with `translations` and `locales` properties
4
- */
5
- export function createSearchTranslate(defaultTranslations) {
6
- const { localeIndex, theme } = useData();
7
- function translate(key) {
8
- const keyPath = key.split('.');
9
- const themeObject = theme.value.search?.options;
10
- const isObject = themeObject && typeof themeObject === 'object';
11
- const locales = (isObject && themeObject.locales?.[localeIndex.value]?.translations) ||
12
- null;
13
- const translations = (isObject && themeObject.translations) || null;
14
- let localeResult = locales;
15
- let translationResult = translations;
16
- let defaultResult = defaultTranslations;
17
- const lastKey = keyPath.pop();
18
- for (const k of keyPath) {
19
- let fallbackResult = null;
20
- const foundInFallback = defaultResult?.[k];
21
- if (foundInFallback) {
22
- fallbackResult = defaultResult = foundInFallback;
23
- }
24
- const foundInTranslation = translationResult?.[k];
25
- if (foundInTranslation) {
26
- fallbackResult = translationResult = foundInTranslation;
27
- }
28
- const foundInLocale = localeResult?.[k];
29
- if (foundInLocale) {
30
- fallbackResult = localeResult = foundInLocale;
31
- }
32
- // Put fallback into unresolved results
33
- if (!foundInFallback) {
34
- defaultResult = fallbackResult;
35
- }
36
- if (!foundInTranslation) {
37
- translationResult = fallbackResult;
38
- }
39
- if (!foundInLocale) {
40
- localeResult = fallbackResult;
41
- }
42
- }
43
- return (localeResult?.[lastKey] ??
44
- translationResult?.[lastKey] ??
45
- defaultResult?.[lastKey] ??
46
- '');
47
- }
48
- return translate;
4
+ * @param themeObject Can be an object with `translations` and `locales` properties
5
+ */
6
+ function createSearchTranslate(defaultTranslations) {
7
+ const { localeIndex, theme } = useData();
8
+ function translate(key) {
9
+ const keyPath = key.split(".");
10
+ const themeObject = theme.value.search?.options;
11
+ const isObject = themeObject && typeof themeObject === "object";
12
+ const locales = isObject && themeObject.locales?.[localeIndex.value]?.translations || null;
13
+ const translations = isObject && themeObject.translations || null;
14
+ let localeResult = locales;
15
+ let translationResult = translations;
16
+ let defaultResult = defaultTranslations;
17
+ const lastKey = keyPath.pop();
18
+ for (const k of keyPath) {
19
+ let fallbackResult = null;
20
+ const foundInFallback = defaultResult?.[k];
21
+ if (foundInFallback) fallbackResult = defaultResult = foundInFallback;
22
+ const foundInTranslation = translationResult?.[k];
23
+ if (foundInTranslation) fallbackResult = translationResult = foundInTranslation;
24
+ const foundInLocale = localeResult?.[k];
25
+ if (foundInLocale) fallbackResult = localeResult = foundInLocale;
26
+ if (!foundInFallback) defaultResult = fallbackResult;
27
+ if (!foundInTranslation) translationResult = fallbackResult;
28
+ if (!foundInLocale) localeResult = fallbackResult;
29
+ }
30
+ return localeResult?.[lastKey] ?? translationResult?.[lastKey] ?? defaultResult?.[lastKey] ?? "";
31
+ }
32
+ return translate;
49
33
  }
34
+ //#endregion
35
+ export { createSearchTranslate };
@@ -0,0 +1,7 @@
1
+ //#region src/client/theme-default/support/utils.d.ts
2
+ export declare function throttleAndDebounce(fn: () => void, delay: number): () => void;
3
+ export declare function ensureStartingSlash(path: string): string;
4
+ export declare function isLinkExternal(href?: string, target?: string, external?: boolean): boolean;
5
+ export declare function normalizeLink(url: string): string;
6
+ export declare function uniqBy<T>(array: T[], keyFn: (item: T) => any): T[];
7
+ //#endregion
@@ -1,33 +1,42 @@
1
- import { withBase } from 'vitepress';
2
- import { isExternal, treatAsHtml } from '../../shared';
3
- import { useData } from '../composables/data';
4
- export function throttleAndDebounce(fn, delay) {
5
- let timeoutId;
6
- let called = false;
7
- return () => {
8
- if (timeoutId)
9
- clearTimeout(timeoutId);
10
- if (!called) {
11
- fn();
12
- (called = true) && setTimeout(() => (called = false), delay);
13
- }
14
- else
15
- timeoutId = setTimeout(fn, delay);
16
- };
1
+ import { isExternal, isRelativeBase, treatAsHtml } from "../../shared.js";
2
+ import { useData as useData$1 } from "../composables/data.js";
3
+ import { withBase } from "vitepress";
4
+ //#region src/client/theme-default/support/utils.ts
5
+ function throttleAndDebounce(fn, delay) {
6
+ let timeoutId;
7
+ let called = false;
8
+ return () => {
9
+ if (timeoutId) clearTimeout(timeoutId);
10
+ if (!called) {
11
+ fn();
12
+ (called = true) && window.setTimeout(() => called = false, delay);
13
+ } else timeoutId = window.setTimeout(fn, delay);
14
+ };
17
15
  }
18
- export function ensureStartingSlash(path) {
19
- return path.startsWith('/') ? path : `/${path}`;
16
+ function ensureStartingSlash(path) {
17
+ return path.startsWith("/") ? path : `/${path}`;
20
18
  }
21
- export function normalizeLink(url) {
22
- const { pathname, search, hash, protocol } = new URL(url, 'http://a.com');
23
- if (isExternal(url) ||
24
- url.startsWith('#') ||
25
- !protocol.startsWith('http') ||
26
- !treatAsHtml(pathname))
27
- return url;
28
- const { site } = useData();
29
- const normalizedPath = pathname.endsWith('/') || pathname.endsWith('.html')
30
- ? url
31
- : url.replace(/(?:(^\.+)\/)?.*$/, `$1${pathname.replace(/(\.md)?$/, site.value.cleanUrls ? '' : '.html')}${search}${hash}`);
32
- return withBase(normalizedPath);
19
+ function isLinkExternal(href, target, external) {
20
+ if (external !== void 0) return external;
21
+ return !!href && isExternal(href) || target === "_blank";
33
22
  }
23
+ function normalizeLink(url) {
24
+ const { pathname, search, hash, protocol } = new URL(url, "http://a.com");
25
+ if (isExternal(url) || url.startsWith("#") || !protocol.startsWith("http") || !treatAsHtml(pathname)) return url;
26
+ const { site } = useData$1();
27
+ let normalizedPath = pathname.endsWith("/") || pathname.endsWith(".html") ? url : url.replace(/(?:(^\.+)\/)?.*$/, `$1${pathname.replace(/(\.md)?$/, site.value.cleanUrls ? "" : ".html")}${search}${hash}`);
28
+ if (isRelativeBase(site.value.base) && !site.value.cleanUrls) {
29
+ const pathPart = normalizedPath.replace(/[?#].*$/, "");
30
+ if (pathPart.endsWith("/")) normalizedPath = pathPart + "index.html" + normalizedPath.slice(pathPart.length);
31
+ }
32
+ return withBase(normalizedPath);
33
+ }
34
+ function uniqBy(array, keyFn) {
35
+ const seen = /* @__PURE__ */ new Set();
36
+ return array.filter((item) => {
37
+ const k = keyFn(item);
38
+ return seen.has(k) ? false : seen.add(k);
39
+ });
40
+ }
41
+ //#endregion
42
+ export { ensureStartingSlash, isLinkExternal, normalizeLink, throttleAndDebounce, uniqBy };
@@ -0,0 +1,25 @@
1
+ import { useLayout } from "./composables/layout.js";
2
+ import { Theme } from "vitepress";
3
+ import VPBadge from "./components/VPBadge.vue";
4
+ import VPButton from "./components/VPButton.vue";
5
+ import VPDocAsideSponsors from "./components/VPDocAsideSponsors.vue";
6
+ import VPFeatures from "./components/VPFeatures.vue";
7
+ import VPHomeContent from "./components/VPHomeContent.vue";
8
+ import VPHomeFeatures from "./components/VPHomeFeatures.vue";
9
+ import VPHomeHero from "./components/VPHomeHero.vue";
10
+ import VPHomeSponsors from "./components/VPHomeSponsors.vue";
11
+ import VPIcon from "./components/VPIcon.vue";
12
+ import VPImage from "./components/VPImage.vue";
13
+ import VPLink from "./components/VPLink.vue";
14
+ import VPNavBarSearch from "./components/VPNavBarSearch.vue";
15
+ import VPSocialLink from "./components/VPSocialLink.vue";
16
+ import VPSocialLinks from "./components/VPSocialLinks.vue";
17
+ import VPSponsors from "./components/VPSponsors.vue";
18
+ import VPTeamMembers from "./components/VPTeamMembers.vue";
19
+ import VPTeamPage from "./components/VPTeamPage.vue";
20
+ import VPTeamPageSection from "./components/VPTeamPageSection.vue";
21
+ import VPTeamPageTitle from "./components/VPTeamPageTitle.vue";
22
+ //#region src/client/theme-default/without-fonts.d.ts
23
+ declare const theme: Theme;
24
+ //#endregion
25
+ export { VPBadge, VPButton, VPDocAsideSponsors, VPFeatures, VPHomeContent, VPHomeFeatures, VPHomeHero, VPHomeSponsors, VPIcon, VPImage, VPLink, VPNavBarSearch, VPSocialLink, VPSocialLinks, VPSponsors, VPTeamMembers, VPTeamPage, VPTeamPageSection, VPTeamPageTitle, theme as default, useLayout };
@@ -1,38 +1,39 @@
1
- import './styles/vars.css';
2
- import './styles/base.css';
3
- import './styles/icons.css';
4
- import './styles/utils.css';
5
- import './styles/components/custom-block.css';
6
- import './styles/components/vp-code.css';
7
- import './styles/components/vp-code-group.css';
8
- import './styles/components/vp-doc.css';
9
- import './styles/components/vp-sponsor.css';
10
- import VPBadge from './components/VPBadge.vue';
11
- import Layout from './Layout.vue';
12
- export { default as VPBadge } from './components/VPBadge.vue';
13
- export { default as VPButton } from './components/VPButton.vue';
14
- export { default as VPDocAsideSponsors } from './components/VPDocAsideSponsors.vue';
15
- export { default as VPFeatures } from './components/VPFeatures.vue';
16
- export { default as VPHomeContent } from './components/VPHomeContent.vue';
17
- export { default as VPHomeFeatures } from './components/VPHomeFeatures.vue';
18
- export { default as VPHomeHero } from './components/VPHomeHero.vue';
19
- export { default as VPHomeSponsors } from './components/VPHomeSponsors.vue';
20
- export { default as VPImage } from './components/VPImage.vue';
21
- export { default as VPLink } from './components/VPLink.vue';
22
- export { default as VPNavBarSearch } from './components/VPNavBarSearch.vue';
23
- export { default as VPSocialLink } from './components/VPSocialLink.vue';
24
- export { default as VPSocialLinks } from './components/VPSocialLinks.vue';
25
- export { default as VPSponsors } from './components/VPSponsors.vue';
26
- export { default as VPTeamMembers } from './components/VPTeamMembers.vue';
27
- export { default as VPTeamPage } from './components/VPTeamPage.vue';
28
- export { default as VPTeamPageSection } from './components/VPTeamPageSection.vue';
29
- export { default as VPTeamPageTitle } from './components/VPTeamPageTitle.vue';
30
- export { useLocalNav } from './composables/local-nav';
31
- export { useSidebar } from './composables/sidebar';
1
+ import { useLayout } from "./composables/layout.js";
2
+ import "./styles/vars.css";
3
+ import "./styles/base.css";
4
+ import "./styles/icons.css";
5
+ import "./styles/utils.css";
6
+ import "./styles/components/custom-block.css";
7
+ import "./styles/components/vp-code.css";
8
+ import "./styles/components/vp-code-group.css";
9
+ import "./styles/components/vp-doc.css";
10
+ import "./styles/components/vp-sponsor.css";
11
+ import VPBadge, { default as VPBadge$1 } from "./components/VPBadge.vue";
12
+ import Layout from "./Layout.vue";
13
+ import VPButton from "./components/VPButton.vue";
14
+ import VPDocAsideSponsors from "./components/VPDocAsideSponsors.vue";
15
+ import VPFeatures from "./components/VPFeatures.vue";
16
+ import VPHomeContent from "./components/VPHomeContent.vue";
17
+ import VPHomeFeatures from "./components/VPHomeFeatures.vue";
18
+ import VPHomeHero from "./components/VPHomeHero.vue";
19
+ import VPHomeSponsors from "./components/VPHomeSponsors.vue";
20
+ import VPIcon from "./components/VPIcon.vue";
21
+ import VPImage from "./components/VPImage.vue";
22
+ import VPLink from "./components/VPLink.vue";
23
+ import VPNavBarSearch from "./components/VPNavBarSearch.vue";
24
+ import VPSocialLink from "./components/VPSocialLink.vue";
25
+ import VPSocialLinks from "./components/VPSocialLinks.vue";
26
+ import VPSponsors from "./components/VPSponsors.vue";
27
+ import VPTeamMembers from "./components/VPTeamMembers.vue";
28
+ import VPTeamPage from "./components/VPTeamPage.vue";
29
+ import VPTeamPageSection from "./components/VPTeamPageSection.vue";
30
+ import VPTeamPageTitle from "./components/VPTeamPageTitle.vue";
31
+ //#region src/client/theme-default/without-fonts.ts
32
32
  const theme = {
33
- Layout,
34
- enhanceApp: ({ app }) => {
35
- app.component('Badge', VPBadge);
36
- }
33
+ Layout,
34
+ enhanceApp: ({ app }) => {
35
+ app.component("Badge", VPBadge$1);
36
+ }
37
37
  };
38
- export default theme;
38
+ //#endregion
39
+ export { VPBadge, VPButton, VPDocAsideSponsors, VPFeatures, VPHomeContent, VPHomeFeatures, VPHomeHero, VPHomeSponsors, VPIcon, VPImage, VPLink, VPNavBarSearch, VPSocialLink, VPSocialLinks, VPSponsors, VPTeamMembers, VPTeamPage, VPTeamPageSection, VPTeamPageTitle, theme as default, useLayout };