themekit-js 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +27 -0
  3. package/bin/themekit.js +2 -0
  4. package/client.d.ts +5 -0
  5. package/dist/client/app/components/ClientOnly.js +10 -0
  6. package/dist/client/app/components/Content.js +23 -0
  7. package/dist/client/app/composables/codeGroups.js +40 -0
  8. package/dist/client/app/composables/copyCode.js +73 -0
  9. package/dist/client/app/composables/head.js +81 -0
  10. package/dist/client/app/composables/preFetch.js +99 -0
  11. package/dist/client/app/data.js +59 -0
  12. package/dist/client/app/devtools.js +29 -0
  13. package/dist/client/app/index.js +140 -0
  14. package/dist/client/app/router.js +233 -0
  15. package/dist/client/app/ssr.js +10 -0
  16. package/dist/client/app/theme.js +1 -0
  17. package/dist/client/app/utils.js +119 -0
  18. package/dist/client/index.d.ts +1446 -0
  19. package/dist/client/index.js +9 -0
  20. package/dist/client/shared.js +139 -0
  21. package/dist/client/theme-default/Layout.vue +94 -0
  22. package/dist/client/theme-default/NotFound.vue +109 -0
  23. package/dist/client/theme-default/components/VPAlgoliaSearchBox.vue +99 -0
  24. package/dist/client/theme-default/components/VPBackdrop.vue +41 -0
  25. package/dist/client/theme-default/components/VPBadge.vue +86 -0
  26. package/dist/client/theme-default/components/VPButton.vue +123 -0
  27. package/dist/client/theme-default/components/VPCarbonAds.vue +109 -0
  28. package/dist/client/theme-default/components/VPContent.vue +98 -0
  29. package/dist/client/theme-default/components/VPDoc.vue +193 -0
  30. package/dist/client/theme-default/components/VPDocAside.vue +46 -0
  31. package/dist/client/theme-default/components/VPDocAsideCarbonAds.vue +18 -0
  32. package/dist/client/theme-default/components/VPDocAsideOutline.vue +87 -0
  33. package/dist/client/theme-default/components/VPDocAsideSponsors.vue +17 -0
  34. package/dist/client/theme-default/components/VPDocFooter.vue +145 -0
  35. package/dist/client/theme-default/components/VPDocFooterLastUpdated.vue +50 -0
  36. package/dist/client/theme-default/components/VPDocOutlineItem.vue +59 -0
  37. package/dist/client/theme-default/components/VPFeature.vue +123 -0
  38. package/dist/client/theme-default/components/VPFeatures.vue +121 -0
  39. package/dist/client/theme-default/components/VPFlyout.vue +136 -0
  40. package/dist/client/theme-default/components/VPFooter.vue +60 -0
  41. package/dist/client/theme-default/components/VPHero.vue +336 -0
  42. package/dist/client/theme-default/components/VPHome.vue +43 -0
  43. package/dist/client/theme-default/components/VPHomeContent.vue +52 -0
  44. package/dist/client/theme-default/components/VPHomeFeatures.vue +14 -0
  45. package/dist/client/theme-default/components/VPHomeHero.vue +24 -0
  46. package/dist/client/theme-default/components/VPHomeSponsors.vue +116 -0
  47. package/dist/client/theme-default/components/VPImage.vue +46 -0
  48. package/dist/client/theme-default/components/VPLink.vue +33 -0
  49. package/dist/client/theme-default/components/VPLocalNav.vue +171 -0
  50. package/dist/client/theme-default/components/VPLocalNavOutlineDropdown.vue +190 -0
  51. package/dist/client/theme-default/components/VPLocalSearchBox.vue +856 -0
  52. package/dist/client/theme-default/components/VPMenu.vue +72 -0
  53. package/dist/client/theme-default/components/VPMenuGroup.vue +47 -0
  54. package/dist/client/theme-default/components/VPMenuLink.vue +54 -0
  55. package/dist/client/theme-default/components/VPNav.vue +57 -0
  56. package/dist/client/theme-default/components/VPNavBar.vue +267 -0
  57. package/dist/client/theme-default/components/VPNavBarAppearance.vue +25 -0
  58. package/dist/client/theme-default/components/VPNavBarExtra.vue +94 -0
  59. package/dist/client/theme-default/components/VPNavBarHamburger.vue +79 -0
  60. package/dist/client/theme-default/components/VPNavBarMenu.vue +29 -0
  61. package/dist/client/theme-default/components/VPNavBarMenuGroup.vue +42 -0
  62. package/dist/client/theme-default/components/VPNavBarMenuLink.vue +53 -0
  63. package/dist/client/theme-default/components/VPNavBarSearch.vue +194 -0
  64. package/dist/client/theme-default/components/VPNavBarSearchButton.vue +208 -0
  65. package/dist/client/theme-default/components/VPNavBarSocialLinks.vue +27 -0
  66. package/dist/client/theme-default/components/VPNavBarTitle.vue +76 -0
  67. package/dist/client/theme-default/components/VPNavBarTranslations.vue +47 -0
  68. package/dist/client/theme-default/components/VPNavScreen.vue +99 -0
  69. package/dist/client/theme-default/components/VPNavScreenAppearance.vue +33 -0
  70. package/dist/client/theme-default/components/VPNavScreenMenu.vue +23 -0
  71. package/dist/client/theme-default/components/VPNavScreenMenuGroup.vue +111 -0
  72. package/dist/client/theme-default/components/VPNavScreenMenuGroupLink.vue +39 -0
  73. package/dist/client/theme-default/components/VPNavScreenMenuGroupSection.vue +34 -0
  74. package/dist/client/theme-default/components/VPNavScreenMenuLink.vue +39 -0
  75. package/dist/client/theme-default/components/VPNavScreenSocialLinks.vue +14 -0
  76. package/dist/client/theme-default/components/VPNavScreenTranslations.vue +73 -0
  77. package/dist/client/theme-default/components/VPPage.vue +7 -0
  78. package/dist/client/theme-default/components/VPSidebar.vue +137 -0
  79. package/dist/client/theme-default/components/VPSidebarItem.vue +250 -0
  80. package/dist/client/theme-default/components/VPSkipLink.vue +68 -0
  81. package/dist/client/theme-default/components/VPSocialLink.vue +50 -0
  82. package/dist/client/theme-default/components/VPSocialLinks.vue +27 -0
  83. package/dist/client/theme-default/components/VPSponsors.vue +48 -0
  84. package/dist/client/theme-default/components/VPSponsorsGrid.vue +48 -0
  85. package/dist/client/theme-default/components/VPSwitch.vue +63 -0
  86. package/dist/client/theme-default/components/VPSwitchAppearance.vue +52 -0
  87. package/dist/client/theme-default/components/VPTeamMembers.vue +66 -0
  88. package/dist/client/theme-default/components/VPTeamMembersItem.vue +225 -0
  89. package/dist/client/theme-default/components/VPTeamPage.vue +58 -0
  90. package/dist/client/theme-default/components/VPTeamPageSection.vue +77 -0
  91. package/dist/client/theme-default/components/VPTeamPageTitle.vue +63 -0
  92. package/dist/client/theme-default/components/icons/VPIconAlignJustify.vue +8 -0
  93. package/dist/client/theme-default/components/icons/VPIconAlignLeft.vue +8 -0
  94. package/dist/client/theme-default/components/icons/VPIconAlignRight.vue +8 -0
  95. package/dist/client/theme-default/components/icons/VPIconArrowLeft.vue +7 -0
  96. package/dist/client/theme-default/components/icons/VPIconArrowRight.vue +7 -0
  97. package/dist/client/theme-default/components/icons/VPIconChevronDown.vue +5 -0
  98. package/dist/client/theme-default/components/icons/VPIconChevronLeft.vue +5 -0
  99. package/dist/client/theme-default/components/icons/VPIconChevronRight.vue +5 -0
  100. package/dist/client/theme-default/components/icons/VPIconChevronUp.vue +5 -0
  101. package/dist/client/theme-default/components/icons/VPIconEdit.vue +6 -0
  102. package/dist/client/theme-default/components/icons/VPIconHeart.vue +5 -0
  103. package/dist/client/theme-default/components/icons/VPIconLanguages.vue +9 -0
  104. package/dist/client/theme-default/components/icons/VPIconMinus.vue +5 -0
  105. package/dist/client/theme-default/components/icons/VPIconMinusSquare.vue +6 -0
  106. package/dist/client/theme-default/components/icons/VPIconMoon.vue +5 -0
  107. package/dist/client/theme-default/components/icons/VPIconMoreHorizontal.vue +7 -0
  108. package/dist/client/theme-default/components/icons/VPIconPlus.vue +5 -0
  109. package/dist/client/theme-default/components/icons/VPIconPlusSquare.vue +6 -0
  110. package/dist/client/theme-default/components/icons/VPIconSun.vue +13 -0
  111. package/dist/client/theme-default/composables/aside.js +17 -0
  112. package/dist/client/theme-default/composables/data.js +2 -0
  113. package/dist/client/theme-default/composables/edit-link.js +16 -0
  114. package/dist/client/theme-default/composables/flyout.js +41 -0
  115. package/dist/client/theme-default/composables/langs.js +26 -0
  116. package/dist/client/theme-default/composables/local-nav.js +18 -0
  117. package/dist/client/theme-default/composables/nav.js +30 -0
  118. package/dist/client/theme-default/composables/outline.js +178 -0
  119. package/dist/client/theme-default/composables/prev-next.js +57 -0
  120. package/dist/client/theme-default/composables/sidebar.js +136 -0
  121. package/dist/client/theme-default/composables/sponsor-grid.js +94 -0
  122. package/dist/client/theme-default/fonts/inter-italic-cyrillic-ext.woff2 +0 -0
  123. package/dist/client/theme-default/fonts/inter-italic-cyrillic.woff2 +0 -0
  124. package/dist/client/theme-default/fonts/inter-italic-greek-ext.woff2 +0 -0
  125. package/dist/client/theme-default/fonts/inter-italic-greek.woff2 +0 -0
  126. package/dist/client/theme-default/fonts/inter-italic-latin-ext.woff2 +0 -0
  127. package/dist/client/theme-default/fonts/inter-italic-latin.woff2 +0 -0
  128. package/dist/client/theme-default/fonts/inter-italic-vietnamese.woff2 +0 -0
  129. package/dist/client/theme-default/fonts/inter-roman-cyrillic-ext.woff2 +0 -0
  130. package/dist/client/theme-default/fonts/inter-roman-cyrillic.woff2 +0 -0
  131. package/dist/client/theme-default/fonts/inter-roman-greek-ext.woff2 +0 -0
  132. package/dist/client/theme-default/fonts/inter-roman-greek.woff2 +0 -0
  133. package/dist/client/theme-default/fonts/inter-roman-latin-ext.woff2 +0 -0
  134. package/dist/client/theme-default/fonts/inter-roman-latin.woff2 +0 -0
  135. package/dist/client/theme-default/fonts/inter-roman-vietnamese.woff2 +0 -0
  136. package/dist/client/theme-default/index.js +3 -0
  137. package/dist/client/theme-default/styles/base.css +252 -0
  138. package/dist/client/theme-default/styles/components/custom-block.css +208 -0
  139. package/dist/client/theme-default/styles/components/vp-code-group.css +85 -0
  140. package/dist/client/theme-default/styles/components/vp-code.css +7 -0
  141. package/dist/client/theme-default/styles/components/vp-doc.css +570 -0
  142. package/dist/client/theme-default/styles/components/vp-sponsor.css +155 -0
  143. package/dist/client/theme-default/styles/fonts.css +157 -0
  144. package/dist/client/theme-default/styles/icons.css +123 -0
  145. package/dist/client/theme-default/styles/utils.css +9 -0
  146. package/dist/client/theme-default/styles/vars.css +563 -0
  147. package/dist/client/theme-default/support/lru.js +33 -0
  148. package/dist/client/theme-default/support/sidebar.js +89 -0
  149. package/dist/client/theme-default/support/translation.js +49 -0
  150. package/dist/client/theme-default/support/utils.js +33 -0
  151. package/dist/client/theme-default/without-fonts.js +32 -0
  152. package/dist/node/cli.js +444 -0
  153. package/dist/node/index.d.ts +4588 -0
  154. package/dist/node/index.js +198 -0
  155. package/dist/node/serve-BjvG349_.js +50301 -0
  156. package/lib/vue-demi.mjs +34 -0
  157. package/package.json +223 -0
  158. package/template/.vitepress/config.js +28 -0
  159. package/template/.vitepress/theme/Layout.vue +21 -0
  160. package/template/.vitepress/theme/index.js +29 -0
  161. package/template/.vitepress/theme/style.css +143 -0
  162. package/template/api-examples.md +49 -0
  163. package/template/index.md +28 -0
  164. package/template/markdown-examples.md +85 -0
  165. package/theme-without-fonts.d.ts +2 -0
  166. package/theme.d.ts +30 -0
  167. package/types/default-theme.d.ts +533 -0
  168. package/types/docsearch.d.ts +144 -0
  169. package/types/index.d.ts +3 -0
  170. package/types/local-search.d.ts +33 -0
  171. package/types/shared.d.ts +199 -0
@@ -0,0 +1,109 @@
1
+ <script setup lang="ts">
2
+ import type { DefaultTheme } from 'vitepress/theme'
3
+ import { ref, watch, onMounted } from 'vue'
4
+ import { useAside } from '../composables/aside'
5
+ import { useData } from '../composables/data'
6
+
7
+ const { page } = useData()
8
+ const props = defineProps<{
9
+ carbonAds: DefaultTheme.CarbonAdsOptions
10
+ }>()
11
+
12
+ const carbonOptions = props.carbonAds
13
+
14
+ const { isAsideEnabled } = useAside()
15
+ const container = ref()
16
+
17
+ let isInitialized = false
18
+
19
+ function init() {
20
+ if (!isInitialized) {
21
+ isInitialized = true
22
+ const s = document.createElement('script')
23
+ s.id = '_carbonads_js'
24
+ s.src = `//cdn.carbonads.com/carbon.js?serve=${carbonOptions.code}&placement=${carbonOptions.placement}`
25
+ s.async = true
26
+ container.value.appendChild(s)
27
+ }
28
+ }
29
+
30
+ watch(() => page.value.relativePath, () => {
31
+ if (isInitialized && isAsideEnabled.value) {
32
+ ;(window as any)._carbonads?.refresh()
33
+ }
34
+ })
35
+
36
+ // no need to account for option changes during dev, we can just
37
+ // refresh the page
38
+ if (carbonOptions) {
39
+ onMounted(() => {
40
+ // if the page is loaded when aside is active, load carbon directly.
41
+ // otherwise, only load it if the page resizes to wide enough. this avoids
42
+ // loading carbon at all on mobile where it's never shown
43
+ if (isAsideEnabled.value) {
44
+ init()
45
+ } else {
46
+ watch(isAsideEnabled, (wide) => wide && init())
47
+ }
48
+ })
49
+ }
50
+ </script>
51
+
52
+ <template>
53
+ <div class="VPCarbonAds" ref="container" />
54
+ </template>
55
+
56
+ <style scoped>
57
+ .VPCarbonAds {
58
+ display: flex;
59
+ justify-content: center;
60
+ align-items: center;
61
+ padding: 24px;
62
+ border-radius: 12px;
63
+ min-height: 256px;
64
+ text-align: center;
65
+ line-height: 18px;
66
+ font-size: 12px;
67
+ font-weight: 500;
68
+ background-color: var(--vp-carbon-ads-bg-color);
69
+ }
70
+
71
+ .VPCarbonAds :deep(img) {
72
+ margin: 0 auto;
73
+ border-radius: 6px;
74
+ }
75
+
76
+ .VPCarbonAds :deep(.carbon-text) {
77
+ display: block;
78
+ margin: 0 auto;
79
+ padding-top: 12px;
80
+ color: var(--vp-carbon-ads-text-color);
81
+ transition: color 0.25s;
82
+ }
83
+
84
+ .VPCarbonAds :deep(.carbon-text:hover) {
85
+ color: var(--vp-carbon-ads-hover-text-color);
86
+ }
87
+
88
+ .VPCarbonAds :deep(.carbon-poweredby) {
89
+ display: block;
90
+ padding-top: 6px;
91
+ font-size: 11px;
92
+ font-weight: 500;
93
+ color: var(--vp-carbon-ads-poweredby-color);
94
+ text-transform: uppercase;
95
+ transition: color 0.25s;
96
+ }
97
+
98
+ .VPCarbonAds :deep(.carbon-poweredby:hover) {
99
+ color: var(--vp-carbon-ads-hover-poweredby-color);
100
+ }
101
+
102
+ .VPCarbonAds :deep(> div) {
103
+ display: none;
104
+ }
105
+
106
+ .VPCarbonAds :deep(> div:first-of-type) {
107
+ display: block;
108
+ }
109
+ </style>
@@ -0,0 +1,98 @@
1
+ <script setup lang="ts">
2
+ import NotFound from '../NotFound.vue'
3
+ import { useData } from '../composables/data'
4
+ import { useSidebar } from '../composables/sidebar'
5
+ import VPDoc from './VPDoc.vue'
6
+ import VPHome from './VPHome.vue'
7
+ import VPPage from './VPPage.vue'
8
+
9
+ const { page, frontmatter } = useData()
10
+ const { hasSidebar } = useSidebar()
11
+ </script>
12
+
13
+ <template>
14
+ <div
15
+ class="VPContent"
16
+ id="VPContent"
17
+ :class="{
18
+ 'has-sidebar': hasSidebar,
19
+ 'is-home': frontmatter.layout === 'home'
20
+ }"
21
+ >
22
+ <slot name="not-found" v-if="page.isNotFound"><NotFound /></slot>
23
+
24
+ <VPPage v-else-if="frontmatter.layout === 'page'">
25
+ <template #page-top><slot name="page-top" /></template>
26
+ <template #page-bottom><slot name="page-bottom" /></template>
27
+ </VPPage>
28
+
29
+ <VPHome v-else-if="frontmatter.layout === 'home'">
30
+ <template #home-hero-before><slot name="home-hero-before" /></template>
31
+ <template #home-hero-info-before><slot name="home-hero-info-before" /></template>
32
+ <template #home-hero-info><slot name="home-hero-info" /></template>
33
+ <template #home-hero-info-after><slot name="home-hero-info-after" /></template>
34
+ <template #home-hero-actions-after><slot name="home-hero-actions-after" /></template>
35
+ <template #home-hero-image><slot name="home-hero-image" /></template>
36
+ <template #home-hero-after><slot name="home-hero-after" /></template>
37
+ <template #home-features-before><slot name="home-features-before" /></template>
38
+ <template #home-features-after><slot name="home-features-after" /></template>
39
+ </VPHome>
40
+
41
+ <component
42
+ v-else-if="frontmatter.layout && frontmatter.layout !== 'doc'"
43
+ :is="frontmatter.layout"
44
+ />
45
+
46
+ <VPDoc v-else>
47
+ <template #doc-top><slot name="doc-top" /></template>
48
+ <template #doc-bottom><slot name="doc-bottom" /></template>
49
+
50
+ <template #doc-footer-before><slot name="doc-footer-before" /></template>
51
+ <template #doc-before><slot name="doc-before" /></template>
52
+ <template #doc-after><slot name="doc-after" /></template>
53
+
54
+ <template #aside-top><slot name="aside-top" /></template>
55
+ <template #aside-outline-before><slot name="aside-outline-before" /></template>
56
+ <template #aside-outline-after><slot name="aside-outline-after" /></template>
57
+ <template #aside-ads-before><slot name="aside-ads-before" /></template>
58
+ <template #aside-ads-after><slot name="aside-ads-after" /></template>
59
+ <template #aside-bottom><slot name="aside-bottom" /></template>
60
+ </VPDoc>
61
+ </div>
62
+ </template>
63
+
64
+ <style scoped>
65
+ .VPContent {
66
+ flex-grow: 1;
67
+ flex-shrink: 0;
68
+ margin: var(--vp-layout-top-height, 0px) auto 0;
69
+ width: 100%;
70
+ }
71
+
72
+ .VPContent.is-home {
73
+ width: 100%;
74
+ max-width: 100%;
75
+ }
76
+
77
+ .VPContent.has-sidebar {
78
+ margin: 0;
79
+ }
80
+
81
+ @media (min-width: 960px) {
82
+ .VPContent {
83
+ padding-top: var(--vp-nav-height);
84
+ }
85
+
86
+ .VPContent.has-sidebar {
87
+ margin: var(--vp-layout-top-height, 0px) 0 0;
88
+ padding-left: var(--vp-sidebar-width);
89
+ }
90
+ }
91
+
92
+ @media (min-width: 1440px) {
93
+ .VPContent.has-sidebar {
94
+ padding-right: calc((100vw - var(--vp-layout-max-width)) / 2);
95
+ padding-left: calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width));
96
+ }
97
+ }
98
+ </style>
@@ -0,0 +1,193 @@
1
+ <script setup lang="ts">
2
+ import { useRoute } from 'vitepress'
3
+ import { computed } from 'vue'
4
+ import { useData } from '../composables/data'
5
+ import { useSidebar } from '../composables/sidebar'
6
+ import VPDocAside from './VPDocAside.vue'
7
+ import VPDocFooter from './VPDocFooter.vue'
8
+
9
+ const { theme } = useData()
10
+
11
+ const route = useRoute()
12
+ const { hasSidebar, hasAside, leftAside } = useSidebar()
13
+
14
+ const pageName = computed(() =>
15
+ route.path.replace(/[./]+/g, '_').replace(/_html$/, '')
16
+ )
17
+ </script>
18
+
19
+ <template>
20
+ <div
21
+ class="VPDoc"
22
+ :class="{ 'has-sidebar': hasSidebar, 'has-aside': hasAside }"
23
+ >
24
+ <slot name="doc-top" />
25
+ <div class="container">
26
+ <div v-if="hasAside" class="aside" :class="{'left-aside': leftAside}">
27
+ <div class="aside-curtain" />
28
+ <div class="aside-container">
29
+ <div class="aside-content">
30
+ <VPDocAside>
31
+ <template #aside-top><slot name="aside-top" /></template>
32
+ <template #aside-bottom><slot name="aside-bottom" /></template>
33
+ <template #aside-outline-before><slot name="aside-outline-before" /></template>
34
+ <template #aside-outline-after><slot name="aside-outline-after" /></template>
35
+ <template #aside-ads-before><slot name="aside-ads-before" /></template>
36
+ <template #aside-ads-after><slot name="aside-ads-after" /></template>
37
+ </VPDocAside>
38
+ </div>
39
+ </div>
40
+ </div>
41
+
42
+ <div class="content">
43
+ <div class="content-container">
44
+ <slot name="doc-before" />
45
+ <main class="main">
46
+ <Content
47
+ class="vp-doc"
48
+ :class="[
49
+ pageName,
50
+ theme.externalLinkIcon && 'external-link-icon-enabled'
51
+ ]"
52
+ />
53
+ </main>
54
+ <VPDocFooter>
55
+ <template #doc-footer-before><slot name="doc-footer-before" /></template>
56
+ </VPDocFooter>
57
+ <slot name="doc-after" />
58
+ </div>
59
+ </div>
60
+ </div>
61
+ <slot name="doc-bottom" />
62
+ </div>
63
+ </template>
64
+
65
+ <style scoped>
66
+ .VPDoc {
67
+ padding: 32px 24px 96px;
68
+ width: 100%;
69
+ }
70
+
71
+ @media (min-width: 768px) {
72
+ .VPDoc {
73
+ padding: 48px 32px 128px;
74
+ }
75
+ }
76
+
77
+ @media (min-width: 960px) {
78
+ .VPDoc {
79
+ padding: 48px 32px 0;
80
+ }
81
+
82
+ .VPDoc:not(.has-sidebar) .container {
83
+ display: flex;
84
+ justify-content: center;
85
+ max-width: 992px;
86
+ }
87
+
88
+ .VPDoc:not(.has-sidebar) .content {
89
+ max-width: 752px;
90
+ }
91
+ }
92
+
93
+ @media (min-width: 1280px) {
94
+ .VPDoc .container {
95
+ display: flex;
96
+ justify-content: center;
97
+ }
98
+
99
+ .VPDoc .aside {
100
+ display: block;
101
+ }
102
+ }
103
+
104
+ @media (min-width: 1440px) {
105
+ .VPDoc:not(.has-sidebar) .content {
106
+ max-width: 784px;
107
+ }
108
+
109
+ .VPDoc:not(.has-sidebar) .container {
110
+ max-width: 1104px;
111
+ }
112
+ }
113
+
114
+ .container {
115
+ margin: 0 auto;
116
+ width: 100%;
117
+ }
118
+
119
+ .aside {
120
+ position: relative;
121
+ display: none;
122
+ order: 2;
123
+ flex-grow: 1;
124
+ padding-left: 32px;
125
+ width: 100%;
126
+ max-width: 256px;
127
+ }
128
+
129
+ .left-aside {
130
+ order: 1;
131
+ padding-left: unset;
132
+ padding-right: 32px;
133
+ }
134
+
135
+ .aside-container {
136
+ position: fixed;
137
+ top: 0;
138
+ padding-top: calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);
139
+ width: 224px;
140
+ height: 100vh;
141
+ overflow-x: hidden;
142
+ overflow-y: auto;
143
+ scrollbar-width: none;
144
+ }
145
+
146
+ .aside-container::-webkit-scrollbar {
147
+ display: none;
148
+ }
149
+
150
+ .aside-curtain {
151
+ position: fixed;
152
+ bottom: 0;
153
+ z-index: 10;
154
+ width: 224px;
155
+ height: 32px;
156
+ background: linear-gradient(transparent, var(--vp-c-bg) 70%);
157
+ }
158
+
159
+ .aside-content {
160
+ display: flex;
161
+ flex-direction: column;
162
+ min-height: calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));
163
+ padding-bottom: 32px;
164
+ }
165
+
166
+ .content {
167
+ position: relative;
168
+ margin: 0 auto;
169
+ width: 100%;
170
+ }
171
+
172
+ @media (min-width: 960px) {
173
+ .content {
174
+ padding: 0 32px 128px;
175
+ }
176
+ }
177
+
178
+ @media (min-width: 1280px) {
179
+ .content {
180
+ order: 1;
181
+ margin: 0;
182
+ min-width: 640px;
183
+ }
184
+ }
185
+
186
+ .content-container {
187
+ margin: 0 auto;
188
+ }
189
+
190
+ .VPDoc.has-aside .content-container {
191
+ max-width: 688px;
192
+ }
193
+ </style>
@@ -0,0 +1,46 @@
1
+ <script setup lang="ts">
2
+ import { useData } from '../composables/data'
3
+ import VPDocAsideOutline from './VPDocAsideOutline.vue'
4
+ import VPDocAsideCarbonAds from './VPDocAsideCarbonAds.vue'
5
+
6
+ const { theme } = useData()
7
+ </script>
8
+
9
+ <template>
10
+ <div class="VPDocAside">
11
+ <slot name="aside-top" />
12
+
13
+ <slot name="aside-outline-before" />
14
+ <VPDocAsideOutline />
15
+ <slot name="aside-outline-after" />
16
+
17
+ <div class="spacer" />
18
+
19
+ <slot name="aside-ads-before" />
20
+ <VPDocAsideCarbonAds v-if="theme.carbonAds" :carbon-ads="theme.carbonAds" />
21
+ <slot name="aside-ads-after" />
22
+
23
+ <slot name="aside-bottom" />
24
+ </div>
25
+ </template>
26
+
27
+ <style scoped>
28
+ .VPDocAside {
29
+ display: flex;
30
+ flex-direction: column;
31
+ flex-grow: 1;
32
+ }
33
+
34
+ .spacer {
35
+ flex-grow: 1;
36
+ }
37
+
38
+ .VPDocAside :deep(.spacer + .VPDocAsideSponsors),
39
+ .VPDocAside :deep(.spacer + .VPDocAsideCarbonAds) {
40
+ margin-top: 24px;
41
+ }
42
+
43
+ .VPDocAside :deep(.VPDocAsideSponsors + .VPDocAsideCarbonAds) {
44
+ margin-top: 16px;
45
+ }
46
+ </style>
@@ -0,0 +1,18 @@
1
+ <script setup lang="ts">
2
+ import { defineAsyncComponent } from 'vue'
3
+ import type { DefaultTheme } from 'vitepress/theme'
4
+
5
+ defineProps<{
6
+ carbonAds: DefaultTheme.CarbonAdsOptions
7
+ }>()
8
+
9
+ const VPCarbonAds = __CARBON__
10
+ ? defineAsyncComponent(() => import('./VPCarbonAds.vue'))
11
+ : () => null
12
+ </script>
13
+
14
+ <template>
15
+ <div class="VPDocAsideCarbonAds">
16
+ <VPCarbonAds :carbon-ads="carbonAds" />
17
+ </div>
18
+ </template>
@@ -0,0 +1,87 @@
1
+ <script setup lang="ts">
2
+ import { onContentUpdated } from 'vitepress'
3
+ import { ref, shallowRef } from 'vue'
4
+ import { useData } from '../composables/data'
5
+ import {
6
+ getHeaders,
7
+ resolveTitle,
8
+ useActiveAnchor,
9
+ type MenuItem
10
+ } from '../composables/outline'
11
+ import VPDocOutlineItem from './VPDocOutlineItem.vue'
12
+
13
+ const { frontmatter, theme } = useData()
14
+
15
+ const headers = shallowRef<MenuItem[]>([])
16
+
17
+ onContentUpdated(() => {
18
+ headers.value = getHeaders(frontmatter.value.outline ?? theme.value.outline)
19
+ })
20
+
21
+ const container = ref()
22
+ const marker = ref()
23
+
24
+ useActiveAnchor(container, marker)
25
+ </script>
26
+
27
+ <template>
28
+ <div
29
+ class="VPDocAsideOutline"
30
+ :class="{ 'has-outline': headers.length > 0 }"
31
+ ref="container"
32
+ role="navigation"
33
+ >
34
+ <div class="content">
35
+ <div class="outline-marker" ref="marker" />
36
+
37
+ <div class="outline-title" role="heading" aria-level="2">{{ resolveTitle(theme) }}</div>
38
+
39
+ <nav aria-labelledby="doc-outline-aria-label">
40
+ <span class="visually-hidden" id="doc-outline-aria-label">
41
+ Table of Contents for current page
42
+ </span>
43
+ <VPDocOutlineItem :headers="headers" :root="true" />
44
+ </nav>
45
+ </div>
46
+ </div>
47
+ </template>
48
+
49
+ <style scoped>
50
+ .VPDocAsideOutline {
51
+ display: none;
52
+ }
53
+
54
+ .VPDocAsideOutline.has-outline {
55
+ display: block;
56
+ }
57
+
58
+ .content {
59
+ position: relative;
60
+ border-left: 1px solid var(--vp-c-divider);
61
+ padding-left: 16px;
62
+ font-size: 13px;
63
+ font-weight: 500;
64
+ }
65
+
66
+ .outline-marker {
67
+ position: absolute;
68
+ top: 32px;
69
+ left: -1px;
70
+ z-index: 0;
71
+ opacity: 0;
72
+ width: 2px;
73
+ border-radius: 2px;
74
+ height: 18px;
75
+ background-color: var(--vp-c-brand-1);
76
+ transition:
77
+ top 0.25s cubic-bezier(0, 1, 0.5, 1),
78
+ background-color 0.5s,
79
+ opacity 0.25s;
80
+ }
81
+
82
+ .outline-title {
83
+ line-height: 32px;
84
+ font-size: 14px;
85
+ font-weight: 600;
86
+ }
87
+ </style>
@@ -0,0 +1,17 @@
1
+ <script setup lang="ts">
2
+ import type { Sponsors } from './VPSponsors.vue'
3
+ import type { Sponsor } from './VPSponsorsGrid.vue'
4
+ import VPSponsors from './VPSponsors.vue'
5
+
6
+ defineProps<{
7
+ tier?: string
8
+ size?: 'xmini' | 'mini' | 'small'
9
+ data: Sponsors[] | Sponsor[]
10
+ }>()
11
+ </script>
12
+
13
+ <template>
14
+ <div class="VPDocAsideSponsors">
15
+ <VPSponsors mode="aside" :tier="tier" :size="size" :data="data" />
16
+ </div>
17
+ </template>