vitepress 0.22.4 → 1.0.0-draft.1

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 (132) hide show
  1. package/client.d.ts +2 -3
  2. package/dist/client/app/components/ClientOnly.js +1 -1
  3. package/dist/client/app/index.js +1 -1
  4. package/dist/client/theme-default/Layout.vue +25 -183
  5. package/dist/client/theme-default/NotFound.vue +9 -8
  6. package/dist/client/theme-default/components/VPAlgoliaSearchBox.vue +127 -0
  7. package/dist/client/theme-default/components/VPBackdrop.vue +39 -0
  8. package/dist/client/theme-default/components/VPContent.vue +44 -0
  9. package/dist/client/theme-default/components/VPContentDoc.vue +173 -0
  10. package/dist/client/theme-default/components/VPContentDocFooter.vue +140 -0
  11. package/dist/client/theme-default/components/VPContentDocOutline.vue +108 -0
  12. package/dist/client/theme-default/components/VPFlyout.vue +149 -0
  13. package/dist/client/theme-default/components/VPLink.vue +37 -0
  14. package/dist/client/theme-default/components/VPLocalNav.vue +106 -0
  15. package/dist/client/theme-default/components/VPMenu.vue +79 -0
  16. package/dist/client/theme-default/components/VPMenuGroup.vue +35 -0
  17. package/dist/client/theme-default/components/VPMenuLink.vue +30 -0
  18. package/dist/client/theme-default/components/VPNav.vue +33 -0
  19. package/dist/client/theme-default/components/VPNavBar.vue +109 -0
  20. package/dist/client/theme-default/components/VPNavBarAppearance.vue +22 -0
  21. package/dist/client/theme-default/components/VPNavBarExtra.vue +107 -0
  22. package/dist/client/theme-default/components/VPNavBarHamburger.vue +79 -0
  23. package/dist/client/theme-default/components/VPNavBarMenu.vue +29 -0
  24. package/dist/client/theme-default/components/VPNavBarMenuGroup.vue +18 -0
  25. package/dist/client/theme-default/components/VPNavBarMenuLink.vue +56 -0
  26. package/dist/client/theme-default/components/VPNavBarSearch.vue +269 -0
  27. package/dist/client/theme-default/components/VPNavBarSocialLinks.vue +27 -0
  28. package/dist/client/theme-default/components/VPNavBarTitle.vue +44 -0
  29. package/dist/client/theme-default/components/VPNavBarTranslations.vue +74 -0
  30. package/dist/client/theme-default/components/VPNavScreen.vue +100 -0
  31. package/dist/client/theme-default/components/VPNavScreenAppearance.vue +30 -0
  32. package/dist/client/theme-default/components/VPNavScreenMenu.vue +24 -0
  33. package/dist/client/theme-default/components/VPNavScreenMenuGroup.vue +118 -0
  34. package/dist/client/theme-default/components/VPNavScreenMenuGroupLink.vue +33 -0
  35. package/dist/client/theme-default/components/VPNavScreenMenuGroupSection.vue +35 -0
  36. package/dist/client/theme-default/components/VPNavScreenMenuLink.vue +34 -0
  37. package/dist/client/theme-default/components/VPNavScreenSocialLinks.vue +14 -0
  38. package/dist/client/theme-default/components/VPNavScreenTranslations.vue +73 -0
  39. package/dist/client/theme-default/components/VPSidebar.vue +118 -0
  40. package/dist/client/theme-default/components/VPSidebarGroup.vue +44 -0
  41. package/dist/client/theme-default/components/VPSidebarLink.vue +57 -0
  42. package/dist/client/theme-default/components/VPSkipLink.vue +72 -0
  43. package/dist/client/theme-default/components/VPSocialLink.vue +63 -0
  44. package/dist/client/theme-default/components/VPSocialLinks.vue +27 -0
  45. package/dist/client/theme-default/components/VPSwitch.vue +66 -0
  46. package/dist/client/theme-default/components/VPSwitchAppearance.vue +74 -0
  47. package/dist/client/theme-default/components/icons/VPIconAlignJustify.vue +8 -0
  48. package/dist/client/theme-default/components/icons/VPIconAlignLeft.vue +8 -0
  49. package/dist/client/theme-default/components/icons/VPIconAlignRight.vue +8 -0
  50. package/dist/client/theme-default/components/icons/{ArrowLeft.vue → VPIconArrowLeft.vue} +0 -0
  51. package/dist/client/theme-default/components/icons/{ArrowRight.vue → VPIconArrowRight.vue} +0 -0
  52. package/dist/client/theme-default/components/icons/VPIconChevronDown.vue +5 -0
  53. package/dist/client/theme-default/components/icons/VPIconChevronLeft.vue +5 -0
  54. package/dist/client/theme-default/components/icons/VPIconChevronRight.vue +5 -0
  55. package/dist/client/theme-default/components/icons/VPIconChevronUp.vue +5 -0
  56. package/dist/client/theme-default/components/icons/VPIconDiscord.vue +5 -0
  57. package/dist/client/theme-default/components/icons/VPIconEdit.vue +6 -0
  58. package/dist/client/theme-default/components/icons/VPIconExternalLink.vue +13 -0
  59. package/dist/client/theme-default/components/icons/VPIconFacebook.vue +5 -0
  60. package/dist/client/theme-default/components/icons/VPIconGitHub.vue +5 -0
  61. package/dist/client/theme-default/components/icons/VPIconInstagram.vue +5 -0
  62. package/dist/client/theme-default/components/icons/VPIconLanguages.vue +9 -0
  63. package/dist/client/theme-default/components/icons/VPIconLinkedIn.vue +5 -0
  64. package/dist/client/theme-default/components/icons/VPIconMoon.vue +5 -0
  65. package/dist/client/theme-default/components/icons/VPIconMoreHorizontal.vue +7 -0
  66. package/dist/client/theme-default/components/icons/VPIconPlus.vue +5 -0
  67. package/dist/client/theme-default/components/icons/VPIconSlack.vue +5 -0
  68. package/dist/client/theme-default/components/icons/VPIconSun.vue +13 -0
  69. package/dist/client/theme-default/components/icons/VPIconTwitter.vue +5 -0
  70. package/dist/client/theme-default/components/icons/VPIconYouTube.vue +5 -0
  71. package/dist/client/theme-default/composables/edit-link.js +22 -0
  72. package/dist/client/theme-default/composables/flyout.js +40 -0
  73. package/dist/client/theme-default/composables/nav.js +27 -1
  74. package/dist/client/theme-default/composables/outline.js +130 -0
  75. package/dist/client/theme-default/composables/prev-next.js +18 -0
  76. package/dist/client/theme-default/composables/sidebar.js +57 -0
  77. package/dist/client/theme-default/fonts/inter-cyrillic-ext.woff2 +0 -0
  78. package/dist/client/theme-default/fonts/inter-cyrillic.woff2 +0 -0
  79. package/dist/client/theme-default/fonts/inter-greek-ext.woff2 +0 -0
  80. package/dist/client/theme-default/fonts/inter-greek.woff2 +0 -0
  81. package/dist/client/theme-default/fonts/inter-latin-ext.woff2 +0 -0
  82. package/dist/client/theme-default/fonts/inter-latin.woff2 +0 -0
  83. package/dist/client/theme-default/fonts/inter-vietnamese.woff2 +0 -0
  84. package/dist/client/theme-default/index.js +4 -4
  85. package/dist/client/theme-default/styles/base.css +200 -0
  86. package/dist/client/theme-default/styles/fonts.css +67 -0
  87. package/dist/client/theme-default/styles/utils.css +9 -0
  88. package/dist/client/theme-default/styles/vars.css +206 -66
  89. package/dist/client/theme-default/styles/vp-doc.css +419 -0
  90. package/dist/client/theme-default/support/sidebar.js +29 -0
  91. package/dist/client/theme-default/support/utils.js +43 -0
  92. package/dist/node/cli.js +3 -8
  93. package/dist/node/index.d.ts +104 -79
  94. package/dist/node/index.js +1 -1
  95. package/dist/node/{serve-3035f99b.js → serve-428d4610.js} +11418 -1415
  96. package/package.json +24 -20
  97. package/types/default-theme.d.ts +104 -79
  98. package/dist/client/theme-default/components/AlgoliaSearchBox.vue +0 -188
  99. package/dist/client/theme-default/components/BuySellAds.vue +0 -152
  100. package/dist/client/theme-default/components/CarbonAds.vue +0 -99
  101. package/dist/client/theme-default/components/EditLink.vue +0 -38
  102. package/dist/client/theme-default/components/Home.vue +0 -31
  103. package/dist/client/theme-default/components/HomeFeatures.vue +0 -143
  104. package/dist/client/theme-default/components/HomeFooter.vue +0 -50
  105. package/dist/client/theme-default/components/HomeHero.vue +0 -161
  106. package/dist/client/theme-default/components/LastUpdated.vue +0 -60
  107. package/dist/client/theme-default/components/NavBar.vue +0 -60
  108. package/dist/client/theme-default/components/NavBarTitle.vue +0 -41
  109. package/dist/client/theme-default/components/NavDropdownLink.vue +0 -135
  110. package/dist/client/theme-default/components/NavDropdownLinkItem.vue +0 -76
  111. package/dist/client/theme-default/components/NavLink.vue +0 -61
  112. package/dist/client/theme-default/components/NavLinks.vue +0 -52
  113. package/dist/client/theme-default/components/NextAndPrevLinks.vue +0 -88
  114. package/dist/client/theme-default/components/Page.vue +0 -53
  115. package/dist/client/theme-default/components/PageFooter.vue +0 -44
  116. package/dist/client/theme-default/components/SideBar.vue +0 -60
  117. package/dist/client/theme-default/components/SideBarLink.js +0 -68
  118. package/dist/client/theme-default/components/SideBarLinks.vue +0 -12
  119. package/dist/client/theme-default/components/ToggleSideBarButton.vue +0 -46
  120. package/dist/client/theme-default/components/icons/OutboundLink.vue +0 -31
  121. package/dist/client/theme-default/composables/activeSidebarLink.js +0 -99
  122. package/dist/client/theme-default/composables/editLink.js +0 -49
  123. package/dist/client/theme-default/composables/navLink.js +0 -42
  124. package/dist/client/theme-default/composables/nextAndPrevLinks.js +0 -37
  125. package/dist/client/theme-default/composables/repo.js +0 -38
  126. package/dist/client/theme-default/composables/sideBar.js +0 -57
  127. package/dist/client/theme-default/styles/code.css +0 -299
  128. package/dist/client/theme-default/styles/custom-blocks.css +0 -76
  129. package/dist/client/theme-default/styles/layout.css +0 -236
  130. package/dist/client/theme-default/styles/sidebar-links.css +0 -107
  131. package/dist/client/theme-default/support/sideBar.js +0 -46
  132. package/dist/client/theme-default/utils.js +0 -63
@@ -1,135 +0,0 @@
1
- <script setup lang="ts">
2
- import { ref, watch } from 'vue'
3
- import { useRoute } from 'vitepress'
4
- import type { DefaultTheme } from '../config'
5
- import NavDropdownLinkItem from './NavDropdownLinkItem.vue'
6
-
7
- defineProps<{
8
- item: DefaultTheme.NavItemWithChildren
9
- }>()
10
-
11
- const route = useRoute()
12
-
13
- const open = ref(false)
14
-
15
- watch(
16
- () => route.path,
17
- () => {
18
- open.value = false
19
- }
20
- )
21
-
22
- function toggle() {
23
- open.value = !open.value
24
- }
25
- </script>
26
-
27
- <template>
28
- <div class="nav-dropdown-link" :class="{ open }">
29
- <button class="button" :aria-label="item.ariaLabel" @click="toggle">
30
- <span class="button-text">{{ item.text }}</span>
31
- <span class="button-arrow" :class="open ? 'down' : 'right'" />
32
- </button>
33
-
34
- <ul class="dialog">
35
- <li v-for="item in item.items" :key="item.text" class="dialog-item">
36
- <NavDropdownLinkItem :item="item" />
37
- </li>
38
- </ul>
39
- </div>
40
- </template>
41
-
42
- <style scoped>
43
- .nav-dropdown-link {
44
- position: relative;
45
- height: 36px;
46
- overflow: hidden;
47
- cursor: pointer;
48
- }
49
-
50
- @media (min-width: 720px) {
51
- .nav-dropdown-link {
52
- height: auto;
53
- overflow: visible;
54
- }
55
-
56
- .nav-dropdown-link:hover .dialog {
57
- display: block;
58
- }
59
- }
60
-
61
- .nav-dropdown-link.open {
62
- height: auto;
63
- }
64
-
65
- .button {
66
- display: block;
67
- border: 0;
68
- padding: 0 1.5rem;
69
- width: 100%;
70
- text-align: left;
71
- line-height: 36px;
72
- font-family: var(--font-family-base);
73
- font-size: 1rem;
74
- font-weight: 600;
75
- color: var(--c-text);
76
- white-space: nowrap;
77
- background-color: transparent;
78
- cursor: pointer;
79
- }
80
-
81
- .button:focus {
82
- outline: 0;
83
- }
84
-
85
- @media (min-width: 720px) {
86
- .button {
87
- border-bottom: 2px solid transparent;
88
- padding: 0;
89
- line-height: 24px;
90
- font-size: 0.9rem;
91
- font-weight: 500;
92
- }
93
- }
94
-
95
- .button-arrow {
96
- display: inline-block;
97
- margin-top: -1px;
98
- margin-left: 8px;
99
- border-top: 6px solid #ccc;
100
- border-right: 4px solid transparent;
101
- border-bottom: 0;
102
- border-left: 4px solid transparent;
103
- vertical-align: middle;
104
- }
105
-
106
- .button-arrow.right {
107
- transform: rotate(-90deg);
108
- }
109
-
110
- @media (min-width: 720px) {
111
- .button-arrow.right {
112
- transform: rotate(0);
113
- }
114
- }
115
-
116
- .dialog {
117
- margin: 0;
118
- padding: 0;
119
- list-style: none;
120
- }
121
-
122
- @media (min-width: 720px) {
123
- .dialog {
124
- display: none;
125
- position: absolute;
126
- top: 26px;
127
- right: -8px;
128
- border-radius: 6px;
129
- padding: 12px 0;
130
- min-width: 128px;
131
- background-color: var(--c-bg);
132
- box-shadow: var(--shadow-3);
133
- }
134
- }
135
- </style>
@@ -1,76 +0,0 @@
1
- <script setup lang="ts">
2
- import { toRefs } from 'vue'
3
- import type { DefaultTheme } from '../config'
4
- import { useNavLink } from '../composables/navLink'
5
- import OutboundLink from './icons/OutboundLink.vue'
6
-
7
- const props = defineProps<{
8
- item: DefaultTheme.NavItemWithLink
9
- }>()
10
-
11
- const propsRefs = toRefs(props)
12
-
13
- const { props: linkProps, isExternal } = useNavLink(propsRefs.item)
14
- </script>
15
-
16
- <template>
17
- <div class="nav-dropdown-link-item">
18
- <a class="item" v-bind="linkProps">
19
- <span class="arrow" />
20
- <span class="text">{{ item.text }}</span>
21
- <span class="icon"><OutboundLink v-if="isExternal" /></span>
22
- </a>
23
- </div>
24
- </template>
25
-
26
- <style scoped>
27
- .item {
28
- display: block;
29
- padding: 0 1.5rem 0 2.5rem;
30
- line-height: 32px;
31
- font-size: 0.9rem;
32
- font-weight: 500;
33
- color: var(--c-text);
34
- white-space: nowrap;
35
- }
36
-
37
- @media (min-width: 720px) {
38
- .item {
39
- padding: 0 24px 0 12px;
40
- line-height: 32px;
41
- font-size: 0.85rem;
42
- font-weight: 500;
43
- color: var(--c-text);
44
- white-space: nowrap;
45
- }
46
-
47
- .item.active .arrow {
48
- opacity: 1;
49
- }
50
- }
51
-
52
- .item:hover,
53
- .item.active {
54
- text-decoration: none;
55
- color: var(--c-brand);
56
- }
57
-
58
- .item.external:hover {
59
- border-bottom-color: transparent;
60
- color: var(--c-text);
61
- }
62
-
63
- @media (min-width: 720px) {
64
- .arrow {
65
- display: inline-block;
66
- margin-right: 8px;
67
- border-top: 6px solid #ccc;
68
- border-right: 4px solid transparent;
69
- border-bottom: 0;
70
- border-left: 4px solid transparent;
71
- vertical-align: middle;
72
- opacity: 0;
73
- transform: translateY(-2px) rotate(-90deg);
74
- }
75
- }
76
- </style>
@@ -1,61 +0,0 @@
1
- <script setup lang="ts">
2
- import { toRefs } from 'vue'
3
- import type { DefaultTheme } from '../config'
4
- import { useNavLink } from '../composables/navLink'
5
- import OutboundLink from './icons/OutboundLink.vue'
6
-
7
- const props = defineProps<{
8
- item: DefaultTheme.NavItemWithLink
9
- }>()
10
-
11
- const propsRefs = toRefs(props)
12
-
13
- const { props: linkProps, isExternal } = useNavLink(propsRefs.item)
14
- </script>
15
-
16
- <template>
17
- <div class="nav-link">
18
- <a class="item" v-bind="linkProps">
19
- {{ item.text }} <OutboundLink v-if="isExternal" />
20
- </a>
21
- </div>
22
- </template>
23
-
24
- <style scoped>
25
- .item {
26
- display: block;
27
- padding: 0 1.5rem;
28
- line-height: 36px;
29
- font-size: 1rem;
30
- font-weight: 600;
31
- color: var(--c-text);
32
- white-space: nowrap;
33
- }
34
-
35
- .item:hover,
36
- .item.active {
37
- text-decoration: none;
38
- color: var(--c-brand);
39
- }
40
-
41
- .item.external:hover {
42
- border-bottom-color: transparent;
43
- color: var(--c-text);
44
- }
45
-
46
- @media (min-width: 720px) {
47
- .item {
48
- border-bottom: 2px solid transparent;
49
- padding: 0;
50
- line-height: 24px;
51
- font-size: 0.9rem;
52
- font-weight: 500;
53
- }
54
-
55
- .item:hover,
56
- .item.active {
57
- border-bottom-color: var(--c-brand);
58
- color: var(--c-text);
59
- }
60
- }
61
- </style>
@@ -1,52 +0,0 @@
1
- <script setup lang="ts">
2
- import { computed } from 'vue'
3
- import { useData } from 'vitepress'
4
- import { useLanguageLinks } from '../composables/nav'
5
- import { useRepo } from '../composables/repo'
6
- import NavLink from './NavLink.vue'
7
- import NavDropdownLink from './NavDropdownLink.vue'
8
-
9
- const { theme } = useData()
10
- const localeLinks = useLanguageLinks()
11
- const repo = useRepo()
12
- const show = computed(() => theme.value.nav || repo.value || localeLinks.value)
13
- </script>
14
-
15
- <template>
16
- <nav v-if="show" class="nav-links">
17
- <template v-if="theme.nav">
18
- <div v-for="item in theme.nav" :key="item.text" class="item">
19
- <NavDropdownLink v-if="item.items" :item="item" />
20
- <NavLink v-else :item="item" />
21
- </div>
22
- </template>
23
-
24
- <div v-if="localeLinks" class="item">
25
- <NavDropdownLink :item="localeLinks" />
26
- </div>
27
-
28
- <div v-if="repo" class="item">
29
- <NavLink :item="repo" />
30
- </div>
31
- </nav>
32
- </template>
33
-
34
- <style scoped>
35
- .nav-links {
36
- padding: 0.75rem 0;
37
- border-bottom: 1px solid var(--c-divider);
38
- }
39
-
40
- @media (min-width: 720px) {
41
- .nav-links {
42
- display: flex;
43
- padding: 6px 0 0;
44
- align-items: center;
45
- border-bottom: 0;
46
- }
47
-
48
- .item + .item {
49
- padding-left: 24px;
50
- }
51
- }
52
- </style>
@@ -1,88 +0,0 @@
1
- <script setup lang="ts">
2
- import { withBase } from 'vitepress'
3
- import { useNextAndPrevLinks } from '../composables/nextAndPrevLinks'
4
- import ArrowLeft from './icons/ArrowLeft.vue'
5
- import ArrowRight from './icons/ArrowRight.vue'
6
-
7
- const { hasLinks, prev, next } = useNextAndPrevLinks()
8
- </script>
9
-
10
- <template>
11
- <div v-if="hasLinks" class="next-and-prev-link">
12
- <div class="container">
13
- <div class="prev">
14
- <a v-if="prev" class="link" :href="withBase(prev.link)">
15
- <ArrowLeft class="icon icon-prev" />
16
- <span class="text">{{ prev.text }}</span>
17
- </a>
18
- </div>
19
- <div class="next">
20
- <a v-if="next" class="link" :href="withBase(next.link)">
21
- <span class="text">{{ next.text }}</span>
22
- <ArrowRight class="icon icon-next" />
23
- </a>
24
- </div>
25
- </div>
26
- </div>
27
- </template>
28
-
29
- <style scoped>
30
- .next-and-prev-link {
31
- padding-top: 1rem;
32
- }
33
-
34
- .container {
35
- display: flex;
36
- justify-content: space-between;
37
- border-top: 1px solid var(--c-divider);
38
- padding-top: 1rem;
39
- }
40
-
41
- .prev,
42
- .next {
43
- display: flex;
44
- flex-shrink: 0;
45
- width: 50%;
46
- }
47
-
48
- .prev {
49
- justify-content: flex-start;
50
- padding-right: 12px;
51
- }
52
-
53
- .next {
54
- justify-content: flex-end;
55
- padding-left: 12px;
56
- }
57
-
58
- .link {
59
- display: inline-flex;
60
- align-items: center;
61
- max-width: 100%;
62
- font-size: 1rem;
63
- font-weight: 500;
64
- }
65
-
66
- .text {
67
- display: block;
68
- white-space: nowrap;
69
- overflow: hidden;
70
- text-overflow: ellipsis;
71
- }
72
-
73
- .icon {
74
- display: block;
75
- flex-shrink: 0;
76
- width: 16px;
77
- height: 16px;
78
- fill: var(--c-text);
79
- transform: translateY(1px);
80
- }
81
-
82
- .icon-prev {
83
- margin-right: 8px;
84
- }
85
- .icon-next {
86
- margin-left: 8px;
87
- }
88
- </style>
@@ -1,53 +0,0 @@
1
- <script setup lang="ts">
2
- import PageFooter from './PageFooter.vue'
3
- import NextAndPrevLinks from './NextAndPrevLinks.vue'
4
- </script>
5
-
6
- <template>
7
- <main class="page">
8
- <div class="container">
9
- <slot name="top" />
10
-
11
- <Content class="content" />
12
- <PageFooter />
13
- <NextAndPrevLinks />
14
-
15
- <slot name="bottom" />
16
- </div>
17
- </main>
18
- </template>
19
-
20
- <style scoped>
21
- .page {
22
- padding-top: var(--header-height);
23
- }
24
-
25
- @media (min-width: 720px) {
26
- .page {
27
- margin-left: 16.4rem;
28
- }
29
- }
30
-
31
- @media (min-width: 960px) {
32
- .page {
33
- margin-left: 20rem;
34
- }
35
- }
36
-
37
- .container {
38
- margin: 0 auto;
39
- padding: 0 1.5rem 4rem;
40
- max-width: 48rem;
41
- }
42
-
43
- .content {
44
- padding-bottom: 1.5rem;
45
- }
46
-
47
- @media (max-width: 420px) {
48
- .content {
49
- /* fix carbon ads display */
50
- clear: both;
51
- }
52
- }
53
- </style>
@@ -1,44 +0,0 @@
1
- <script setup lang="ts">
2
- import EditLink from './EditLink.vue'
3
- import LastUpdated from './LastUpdated.vue'
4
- import { useData } from 'vitepress'
5
-
6
- const { page } = useData()
7
- </script>
8
-
9
- <template>
10
- <footer class="page-footer">
11
- <div class="edit">
12
- <EditLink />
13
- </div>
14
- <div class="updated">
15
- <LastUpdated v-if="page.lastUpdated" />
16
- </div>
17
- </footer>
18
- </template>
19
-
20
- <style scoped>
21
- .page-footer {
22
- padding-top: 1rem;
23
- padding-bottom: 1rem;
24
- overflow: auto;
25
- }
26
-
27
- @media (min-width: 960px) {
28
- .page-footer {
29
- display: flex;
30
- justify-content: space-between;
31
- align-items: center;
32
- }
33
- }
34
-
35
- .updated {
36
- padding-top: 4px;
37
- }
38
-
39
- @media (min-width: 960px) {
40
- .updated {
41
- padding-top: 0;
42
- }
43
- }
44
- </style>
@@ -1,60 +0,0 @@
1
- <script setup lang="ts">
2
- import NavLinks from './NavLinks.vue'
3
- import SideBarLinks from './SideBarLinks.vue'
4
-
5
- defineProps<{ open: boolean }>()
6
- </script>
7
-
8
- <template>
9
- <aside class="sidebar" :class="{ open }">
10
- <NavLinks class="nav" />
11
-
12
- <slot name="sidebar-top" />
13
-
14
- <SideBarLinks />
15
-
16
- <slot name="sidebar-bottom" />
17
- </aside>
18
- </template>
19
-
20
- <style scoped>
21
- .sidebar {
22
- position: fixed;
23
- top: var(--header-height);
24
- bottom: 0;
25
- left: 0;
26
- z-index: var(--z-index-sidebar);
27
- border-right: 1px solid var(--c-divider);
28
- width: 16.4rem;
29
- background-color: var(--c-bg);
30
- overflow-y: auto;
31
- transform: translateX(-100%);
32
- transition: transform 0.25s ease;
33
- }
34
-
35
- @media (min-width: 720px) {
36
- .sidebar {
37
- transform: translateX(0);
38
- }
39
- }
40
-
41
- @media (min-width: 960px) {
42
- .sidebar {
43
- width: 20rem;
44
- }
45
- }
46
-
47
- .sidebar.open {
48
- transform: translateX(0);
49
- }
50
-
51
- .nav {
52
- display: block;
53
- }
54
-
55
- @media (min-width: 720px) {
56
- .nav {
57
- display: none;
58
- }
59
- }
60
- </style>
@@ -1,68 +0,0 @@
1
- import { h } from 'vue';
2
- import { useRoute, useData } from 'vitepress';
3
- import { joinUrl, isActive } from '../utils';
4
- export const SideBarLink = (props) => {
5
- const route = useRoute();
6
- const { site, frontmatter } = useData();
7
- const depth = props.depth || 1;
8
- const maxDepth = frontmatter.value.sidebarDepth || Infinity;
9
- const headers = route.data.headers;
10
- const text = props.item.text;
11
- const link = resolveLink(site.value.base, props.item.link);
12
- const children = props.item.children;
13
- const active = isActive(route, props.item.link);
14
- const childItems = depth < maxDepth
15
- ? createChildren(active, children, headers, depth + 1)
16
- : null;
17
- return h('li', { class: 'sidebar-link' }, [
18
- h(link ? 'a' : 'p', {
19
- class: { 'sidebar-link-item': true, active },
20
- href: link
21
- }, text),
22
- childItems
23
- ]);
24
- };
25
- function resolveLink(base, path) {
26
- if (path === undefined) {
27
- return path;
28
- }
29
- // keep relative hash to the same page
30
- if (path.startsWith('#')) {
31
- return path;
32
- }
33
- return joinUrl(base, path);
34
- }
35
- function createChildren(active, children, headers, depth = 1) {
36
- if (children && children.length > 0) {
37
- return h('ul', { class: 'sidebar-links' }, children.map((c) => {
38
- return h(SideBarLink, { item: c, depth });
39
- }));
40
- }
41
- return active && headers
42
- ? createChildren(false, resolveHeaders(headers), undefined, depth)
43
- : null;
44
- }
45
- function resolveHeaders(headers) {
46
- return mapHeaders(groupHeaders(headers));
47
- }
48
- function groupHeaders(headers) {
49
- headers = headers.map((h) => Object.assign({}, h));
50
- let lastH2;
51
- headers.forEach((h) => {
52
- if (h.level === 2) {
53
- lastH2 = h;
54
- }
55
- else if (lastH2) {
56
- ;
57
- (lastH2.children || (lastH2.children = [])).push(h);
58
- }
59
- });
60
- return headers.filter((h) => h.level === 2);
61
- }
62
- function mapHeaders(headers) {
63
- return headers.map((header) => ({
64
- text: header.title,
65
- link: `#${header.slug}`,
66
- children: header.children ? mapHeaders(header.children) : undefined
67
- }));
68
- }
@@ -1,12 +0,0 @@
1
- <script setup lang="ts">
2
- import { useSideBar } from '../composables/sideBar'
3
- import { SideBarLink } from './SideBarLink'
4
-
5
- const items = useSideBar()
6
- </script>
7
-
8
- <template>
9
- <ul v-if="items.length > 0" class="sidebar-links">
10
- <SideBarLink v-for="item of items" :item="item" />
11
- </ul>
12
- </template>
@@ -1,46 +0,0 @@
1
- <script lang="ts">
2
- export default {
3
- emits: ['toggle']
4
- }
5
- </script>
6
-
7
- <template>
8
- <div class="sidebar-button" @click="$emit('toggle')">
9
- <svg
10
- class="icon"
11
- xmlns="http://www.w3.org/2000/svg"
12
- aria-hidden="true"
13
- role="img"
14
- viewBox="0 0 448 512"
15
- >
16
- <path
17
- fill="currentColor"
18
- d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"
19
- class
20
- />
21
- </svg>
22
- </div>
23
- </template>
24
-
25
- <style>
26
- .sidebar-button {
27
- position: absolute;
28
- top: 0.6rem;
29
- left: 1rem;
30
- display: none;
31
- padding: 0.6rem;
32
- cursor: pointer;
33
- }
34
-
35
- .sidebar-button .icon {
36
- display: block;
37
- width: 1.25rem;
38
- height: 1.25rem;
39
- }
40
-
41
- @media screen and (max-width: 719px) {
42
- .sidebar-button {
43
- display: block;
44
- }
45
- }
46
- </style>