vitepress 1.0.0-draft.2 → 1.0.0-draft.5

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 (127) hide show
  1. package/README.md +3 -1
  2. package/bin/vitepress.js +1 -1
  3. package/dist/client/app/composables/head.js +2 -2
  4. package/dist/client/app/data.js +2 -4
  5. package/dist/client/app/index.js +1 -5
  6. package/dist/client/index.d.ts +123 -134
  7. package/dist/client/index.js +1 -2
  8. package/dist/client/shared.js +21 -0
  9. package/dist/client/theme-default/Layout.vue +7 -0
  10. package/dist/client/theme-default/NotFound.vue +74 -14
  11. package/dist/client/theme-default/components/VPBox.vue +1 -5
  12. package/dist/client/theme-default/components/VPCarbonAds.vue +90 -0
  13. package/dist/client/theme-default/components/VPContent.vue +14 -10
  14. package/dist/client/theme-default/components/VPDoc.vue +73 -58
  15. package/dist/client/theme-default/components/VPDocAside.vue +34 -0
  16. package/dist/client/theme-default/components/VPDocAsideCarbonAds.vue +13 -0
  17. package/dist/client/theme-default/components/{VPDocOutline.vue → VPDocAsideOutline.vue} +14 -3
  18. package/dist/client/theme-default/components/VPDocAsideSponsors.vue +32 -0
  19. package/dist/client/theme-default/components/VPDocFooter.vue +1 -1
  20. package/dist/client/theme-default/components/VPFlyout.vue +2 -3
  21. package/dist/client/theme-default/components/VPFooter.vue +1 -1
  22. package/dist/client/theme-default/components/VPHero.vue +3 -3
  23. package/dist/client/theme-default/components/VPHomeSponsors.vue +3 -7
  24. package/dist/client/theme-default/components/VPLink.vue +2 -1
  25. package/dist/client/theme-default/components/VPLocalNav.vue +1 -1
  26. package/dist/client/theme-default/components/VPMenu.vue +8 -13
  27. package/dist/client/theme-default/components/VPMenuLink.vue +10 -4
  28. package/dist/client/theme-default/components/VPNav.vue +18 -1
  29. package/dist/client/theme-default/components/VPNavBar.vue +20 -8
  30. package/dist/client/theme-default/components/VPNavBarExtra.vue +20 -41
  31. package/dist/client/theme-default/components/VPNavBarMenuGroup.vue +2 -8
  32. package/dist/client/theme-default/components/VPNavBarMenuLink.vue +3 -3
  33. package/dist/client/theme-default/components/VPNavBarSearch.vue +6 -6
  34. package/dist/client/theme-default/components/VPNavBarTitle.vue +4 -2
  35. package/dist/client/theme-default/components/VPNavBarTranslations.vue +10 -39
  36. package/dist/client/theme-default/components/VPNavScreenMenuGroup.vue +1 -2
  37. package/dist/client/theme-default/components/VPNavScreenMenuGroupSection.vue +1 -1
  38. package/dist/client/theme-default/components/VPSidebar.vue +12 -6
  39. package/dist/client/theme-default/components/VPSidebarGroup.vue +80 -17
  40. package/dist/client/theme-default/components/VPSidebarLink.vue +2 -9
  41. package/dist/client/theme-default/components/VPSocialLink.vue +2 -2
  42. package/dist/client/theme-default/components/VPSocialLinks.vue +1 -1
  43. package/dist/client/theme-default/components/VPSponsors.vue +15 -40
  44. package/dist/client/theme-default/components/VPSponsorsGrid.vue +2 -2
  45. package/dist/client/theme-default/components/icons/VPIconMinus.vue +5 -0
  46. package/dist/client/theme-default/components/icons/VPIconMinusSquare.vue +6 -0
  47. package/dist/client/theme-default/components/icons/VPIconPlusSquare.vue +6 -0
  48. package/dist/client/theme-default/composables/aside.js +17 -0
  49. package/dist/client/theme-default/composables/copy-code.js +33 -0
  50. package/dist/client/theme-default/composables/outline.js +14 -4
  51. package/dist/client/theme-default/composables/sponsor-grid.js +8 -6
  52. package/dist/client/theme-default/index.js +4 -2
  53. package/dist/client/theme-default/styles/base.css +9 -1
  54. package/dist/client/theme-default/styles/components/custom-block.css +90 -0
  55. package/dist/client/theme-default/styles/{vp-doc.css → components/vp-doc.css} +152 -115
  56. package/dist/client/theme-default/styles/{vp-sponsor.css → components/vp-sponsor.css} +51 -7
  57. package/dist/client/theme-default/styles/vars.css +109 -58
  58. package/dist/node/cli.js +295 -37
  59. package/dist/node/index.d.ts +371 -361
  60. package/dist/node/index.js +22 -22
  61. package/dist/node/serve-f7c10936.js +64795 -0
  62. package/dist/node-cjs/cli.cjs +304 -0
  63. package/dist/node-cjs/index.cjs +38 -0
  64. package/dist/{node/serve-b5dc02b2.js → node-cjs/serve-c220f0a8.cjs} +27511 -28708
  65. package/package.json +47 -40
  66. package/theme.d.ts +7 -2
  67. package/types/default-theme.d.ts +15 -2
  68. package/types/shared.d.ts +3 -0
  69. package/dist/client/theme-default/composables/sponsor.js +0 -87
  70. package/dist/node/alias.js +0 -60
  71. package/dist/node/alias.js.map +0 -1
  72. package/dist/node/build/build.js +0 -57
  73. package/dist/node/build/build.js.map +0 -1
  74. package/dist/node/build/buildMPAClient.js +0 -44
  75. package/dist/node/build/buildMPAClient.js.map +0 -1
  76. package/dist/node/build/bundle.js +0 -163
  77. package/dist/node/build/bundle.js.map +0 -1
  78. package/dist/node/build/render.js +0 -185
  79. package/dist/node/build/render.js.map +0 -1
  80. package/dist/node/cli.js.map +0 -1
  81. package/dist/node/config.js +0 -176
  82. package/dist/node/config.js.map +0 -1
  83. package/dist/node/index.js.map +0 -1
  84. package/dist/node/markdown/markdown.js +0 -75
  85. package/dist/node/markdown/markdown.js.map +0 -1
  86. package/dist/node/markdown/plugins/component.js +0 -86
  87. package/dist/node/markdown/plugins/component.js.map +0 -1
  88. package/dist/node/markdown/plugins/containers.js +0 -41
  89. package/dist/node/markdown/plugins/containers.js.map +0 -1
  90. package/dist/node/markdown/plugins/headings.js +0 -25
  91. package/dist/node/markdown/plugins/headings.js.map +0 -1
  92. package/dist/node/markdown/plugins/highlight.js +0 -53
  93. package/dist/node/markdown/plugins/highlight.js.map +0 -1
  94. package/dist/node/markdown/plugins/highlightLines.js +0 -48
  95. package/dist/node/markdown/plugins/highlightLines.js.map +0 -1
  96. package/dist/node/markdown/plugins/hoist.js +0 -22
  97. package/dist/node/markdown/plugins/hoist.js.map +0 -1
  98. package/dist/node/markdown/plugins/image.js +0 -17
  99. package/dist/node/markdown/plugins/image.js.map +0 -1
  100. package/dist/node/markdown/plugins/lineNumbers.js +0 -23
  101. package/dist/node/markdown/plugins/lineNumbers.js.map +0 -1
  102. package/dist/node/markdown/plugins/link.js +0 -85
  103. package/dist/node/markdown/plugins/link.js.map +0 -1
  104. package/dist/node/markdown/plugins/preWrapper.js +0 -22
  105. package/dist/node/markdown/plugins/preWrapper.js.map +0 -1
  106. package/dist/node/markdown/plugins/slugify.js +0 -26
  107. package/dist/node/markdown/plugins/slugify.js.map +0 -1
  108. package/dist/node/markdown/plugins/snippet.js +0 -146
  109. package/dist/node/markdown/plugins/snippet.js.map +0 -1
  110. package/dist/node/markdownToVue.js +0 -166
  111. package/dist/node/markdownToVue.js.map +0 -1
  112. package/dist/node/plugin.js +0 -227
  113. package/dist/node/plugin.js.map +0 -1
  114. package/dist/node/serve/serve.js +0 -59
  115. package/dist/node/serve/serve.js.map +0 -1
  116. package/dist/node/server.js +0 -18
  117. package/dist/node/server.js.map +0 -1
  118. package/dist/node/shared.js +0 -72
  119. package/dist/node/shared.js.map +0 -1
  120. package/dist/node/staticDataPlugin.js +0 -99
  121. package/dist/node/staticDataPlugin.js.map +0 -1
  122. package/dist/node/utils/getGitTimestamp.js +0 -17
  123. package/dist/node/utils/getGitTimestamp.js.map +0 -1
  124. package/dist/node/utils/parseHeader.js +0 -57
  125. package/dist/node/utils/parseHeader.js.map +0 -1
  126. package/dist/node/utils/slash.js +0 -8
  127. package/dist/node/utils/slash.js.map +0 -1
@@ -0,0 +1,33 @@
1
+ import { nextTick, watch } from 'vue';
2
+ import { inBrowser, useData } from 'vitepress';
3
+ export function useCopyCode() {
4
+ const { page } = useData();
5
+ if (inBrowser)
6
+ watch(() => page.value.relativePath, () => {
7
+ nextTick(() => {
8
+ document
9
+ .querySelectorAll('.vp-doc div[class*="language-"]>span.copy')
10
+ .forEach(handleElement);
11
+ });
12
+ }, { immediate: true, flush: 'post' });
13
+ }
14
+ function handleElement(el) {
15
+ el.onclick = () => {
16
+ const parent = el.parentElement;
17
+ if (!parent) {
18
+ return;
19
+ }
20
+ const isShell = parent.classList.contains('language-sh') ||
21
+ parent.classList.contains('language-bash');
22
+ let { innerText: text = '' } = parent;
23
+ if (isShell) {
24
+ text = text.replace(/^ *\$ /gm, '');
25
+ }
26
+ navigator.clipboard.writeText(text).then(() => {
27
+ el.classList.add('copied');
28
+ setTimeout(() => {
29
+ el.classList.remove('copied');
30
+ }, 3000);
31
+ });
32
+ };
33
+ }
@@ -1,8 +1,18 @@
1
- import { onMounted, onUpdated, onUnmounted } from 'vue';
2
- import { useMediaQuery } from '@vueuse/core';
1
+ import { computed, onMounted, onUpdated, onUnmounted } from 'vue';
2
+ import { useData } from 'vitepress';
3
+ import { useAside } from '../composables/aside';
3
4
  import { throttleAndDebounce } from '../support/utils';
4
5
  // magic number to avoid repeated retrieval
5
6
  const PAGE_OFFSET = 56;
7
+ export function useOutline() {
8
+ const { page } = useData();
9
+ const hasOutline = computed(() => {
10
+ return page.value.headers.length > 0;
11
+ });
12
+ return {
13
+ hasOutline
14
+ };
15
+ }
6
16
  export function resolveHeaders(headers) {
7
17
  return mapHeaders(groupHeaders(headers));
8
18
  }
@@ -29,7 +39,7 @@ function mapHeaders(headers) {
29
39
  }));
30
40
  }
31
41
  export function useActiveAnchor(container, marker) {
32
- const isOutlineEnabled = useMediaQuery('(min-width: 1280px)');
42
+ const { isAsideEnabled } = useAside();
33
43
  const onScroll = throttleAndDebounce(setActiveLink, 100);
34
44
  let prevActiveLink = null;
35
45
  onMounted(() => {
@@ -44,7 +54,7 @@ export function useActiveAnchor(container, marker) {
44
54
  window.removeEventListener('scroll', onScroll);
45
55
  });
46
56
  function setActiveLink() {
47
- if (!isOutlineEnabled.value) {
57
+ if (!isAsideEnabled.value) {
48
58
  return;
49
59
  }
50
60
  const links = [].slice.call(container.value.querySelectorAll('.outline-link'));
@@ -5,14 +5,16 @@ import { throttleAndDebounce } from '../support/utils';
5
5
  *
6
6
  * [Screen widh, Column size]
7
7
  *
8
- * It sets grid size on matching screen size. For example, `[768, 5]` will set
9
- * 5 columns when screen size is bigger or equal to 768px.
8
+ * It sets grid size on matching screen size. For example, `[768, 5]` will
9
+ * set 5 columns when screen size is bigger or equal to 768px.
10
10
  *
11
11
  * Column will set only when item size is bigger than the column size. For
12
- * example, even we want 5 columns, if we only have 1 sponsor yet, we would
13
- * like to show it in 1 column.
12
+ * example, even we define 5 columns, if we only have 1 sponsor yet, we would
13
+ * like to show it in 1 column to make it stand out.
14
14
  */
15
15
  const GridSettings = {
16
+ xmini: [[0, 2]],
17
+ mini: [],
16
18
  small: [
17
19
  [920, 6],
18
20
  [768, 5],
@@ -31,7 +33,7 @@ const GridSettings = {
31
33
  [640, 2]
32
34
  ]
33
35
  };
34
- export function useSponsorsGrid(options) {
36
+ export function useSponsorsGrid({ el, size = 'medium' }) {
35
37
  const onResize = throttleAndDebounce(manage, 100);
36
38
  onMounted(() => {
37
39
  manage();
@@ -41,7 +43,7 @@ export function useSponsorsGrid(options) {
41
43
  window.removeEventListener('resize', onResize);
42
44
  });
43
45
  function manage() {
44
- adjustSlots(options.el.value, options.size);
46
+ adjustSlots(el.value, size);
45
47
  }
46
48
  }
47
49
  function adjustSlots(el, size) {
@@ -2,13 +2,15 @@ import './styles/fonts.css';
2
2
  import './styles/vars.css';
3
3
  import './styles/base.css';
4
4
  import './styles/utils.css';
5
- import './styles/vp-doc.css';
6
- import './styles/vp-sponsor.css';
5
+ import './styles/components/custom-block.css';
6
+ import './styles/components/vp-doc.css';
7
+ import './styles/components/vp-sponsor.css';
7
8
  import Layout from './Layout.vue';
8
9
  import NotFound from './NotFound.vue';
9
10
  export { default as VPHomeHero } from './components/VPHomeHero.vue';
10
11
  export { default as VPHomeFeatures } from './components/VPHomeFeatures.vue';
11
12
  export { default as VPHomeSponsors } from './components/VPHomeSponsors.vue';
13
+ export { default as VPDocAsideSponsors } from './components/VPDocAsideSponsors.vue';
12
14
  const theme = {
13
15
  Layout,
14
16
  NotFound
@@ -10,6 +10,10 @@ html {
10
10
  -webkit-text-size-adjust: 100%;
11
11
  }
12
12
 
13
+ html.dark {
14
+ color-scheme: dark;
15
+ }
16
+
13
17
  body {
14
18
  margin: 0;
15
19
  width: 100%;
@@ -20,7 +24,7 @@ body {
20
24
  font-size: 16px;
21
25
  font-weight: 400;
22
26
  color: var(--vp-c-text-1);
23
- background-color: var(--vp-c-bg-content);
27
+ background-color: var(--vp-c-bg);
24
28
  direction: ltr;
25
29
  font-synthesis: none;
26
30
  text-rendering: optimizeLegibility;
@@ -92,6 +96,10 @@ ul {
92
96
  padding: 0;
93
97
  }
94
98
 
99
+ blockquote {
100
+ margin: 0;
101
+ }
102
+
95
103
  pre,
96
104
  code,
97
105
  kbd,
@@ -0,0 +1,90 @@
1
+ .custom-block {
2
+ border: 1px solid transparent;
3
+ border-radius: 8px;
4
+ padding: 16px 16px 8px;
5
+ line-height: 24px;
6
+ font-size: 14px;
7
+ color: var(--vp-c-text-2);
8
+ }
9
+
10
+ .custom-block.info {
11
+ border-color: var(--vp-custom-block-info-border);
12
+ color: var(--vp-custom-block-info-text);
13
+ background-color: var(--vp-custom-block-info-bg);
14
+ }
15
+
16
+ .custom-block.info code {
17
+ background-color: var(--vp-custom-block-info-code-bg);
18
+ }
19
+
20
+ .custom-block.tip {
21
+ border-color: var(--vp-custom-block-tip-border);
22
+ color: var(--vp-custom-block-tip-text);
23
+ background-color: var(--vp-custom-block-tip-bg);
24
+ }
25
+
26
+ .custom-block.tip code {
27
+ background-color: var(--vp-custom-block-tip-code-bg);
28
+ }
29
+
30
+ .custom-block.warning {
31
+ border-color: var(--vp-custom-block-warning-border);
32
+ color: var(--vp-custom-block-warning-text);
33
+ background-color: var(--vp-custom-block-warning-bg);
34
+ }
35
+
36
+ .custom-block.warning code {
37
+ background-color: var(--vp-custom-block-warning-code-bg);
38
+ }
39
+
40
+ .custom-block.danger {
41
+ border-color: var(--vp-custom-block-danger-border);
42
+ color: var(--vp-custom-block-danger-text);
43
+ background-color: var(--vp-custom-block-danger-bg);
44
+ }
45
+
46
+ .custom-block.danger code {
47
+ background-color: var(--vp-custom-block-danger-code-bg);
48
+ }
49
+
50
+ .custom-block.details {
51
+ border-color: var(--vp-custom-block-details-border);
52
+ color: var(--vp-custom-block-details-text);
53
+ background-color: var(--vp-custom-block-details-bg);
54
+ }
55
+
56
+ .custom-block.details code {
57
+ background-color: var(--vp-custom-block-details-code-bg);
58
+ }
59
+
60
+ .custom-block-title {
61
+ font-weight: 700;
62
+ }
63
+
64
+ .custom-block p + p {
65
+ margin: 8px 0;
66
+ }
67
+
68
+ .custom-block.details summary {
69
+ margin: 0 0 8px;
70
+ font-weight: 700;
71
+ }
72
+
73
+ .custom-block.details summary + p {
74
+ margin: 8px 0;
75
+ }
76
+
77
+ .custom-block a {
78
+ color: inherit;
79
+ font-weight: 600;
80
+ text-decoration: underline;
81
+ transition: opacity 0.25s;
82
+ }
83
+
84
+ .custom-block a:hover {
85
+ opacity: 0.6;
86
+ }
87
+
88
+ .custom-block code {
89
+ font-size: var(--vp-custom-block-code-font-size);
90
+ }
@@ -115,18 +115,27 @@
115
115
 
116
116
  .vp-doc ul,
117
117
  .vp-doc ol {
118
+ padding-left: 1.25rem;
118
119
  margin: 16px 0;
119
120
  }
120
121
 
121
122
  .vp-doc ul {
122
- padding-left: 1.25rem;
123
123
  list-style: disc;
124
124
  }
125
125
 
126
+ .vp-doc ol {
127
+ list-style: decimal;
128
+ }
129
+
126
130
  .vp-doc li + li {
127
131
  margin-top: 8px;
128
132
  }
129
133
 
134
+ .vp-doc li > ol,
135
+ .vp-doc li > ul {
136
+ margin: 8px 0 0;
137
+ }
138
+
130
139
  /**
131
140
  * Table
132
141
  * -------------------------------------------------------------------------- */
@@ -147,10 +156,6 @@
147
156
  background-color: var(--vp-c-bg-soft);
148
157
  }
149
158
 
150
- .dark .vp-doc tr:nth-child(2n) {
151
- background-color: var(--vp-c-bg-mute);
152
- }
153
-
154
159
  .vp-doc th,
155
160
  .vp-doc td {
156
161
  border: 1px solid var(--vp-c-divider);
@@ -177,6 +182,49 @@
177
182
  border-top: 1px solid var(--vp-c-divider-light);
178
183
  }
179
184
 
185
+ /**
186
+ * Custom Block
187
+ * -------------------------------------------------------------------------- */
188
+
189
+ .vp-doc .custom-block {
190
+ margin: 16px 0;
191
+ }
192
+
193
+ .vp-doc .custom-block p {
194
+ margin: 8px 0;
195
+ line-height: 24px;
196
+ }
197
+
198
+ .vp-doc .custom-block p:first-child {
199
+ margin: 0;
200
+ }
201
+
202
+ .vp-doc .custom-block a {
203
+ color: inherit;
204
+ font-weight: 600;
205
+ text-decoration: underline;
206
+ transition: opacity .25s;
207
+ }
208
+
209
+ .vp-doc .custom-block a:hover {
210
+ opacity: 0.6;
211
+ }
212
+
213
+ .vp-doc .custom-block code {
214
+ font-size: var(--vp-custom-block-code-font-size);
215
+ font-weight: 700;
216
+ color: inherit;
217
+ }
218
+
219
+ .vp-doc .custom-block div[class*='language-'] {
220
+ margin: 8px 0;
221
+ }
222
+
223
+ .vp-doc .custom-block div[class*='language-'] code {
224
+ font-weight: 400;
225
+ background-color: var(--vp-code-block-bg);
226
+ }
227
+
180
228
  /**
181
229
  * Code
182
230
  * -------------------------------------------------------------------------- */
@@ -200,19 +248,18 @@
200
248
  font-size: 0.9em;
201
249
  }
202
250
 
203
- @media (min-width: 768px) {
204
- .vp-doc :not(pre) > code {
205
- white-space: nowrap;
206
- }
251
+ .vp-doc a > code {
252
+ color: var(--vp-c-brand);
253
+ transition: color 0.25s;
207
254
  }
208
255
 
209
- .vp-doc a > code {
256
+ .vp-doc a:hover > code {
210
257
  color: var(--vp-c-brand-dark);
211
258
  }
212
259
 
213
260
  .vp-doc div[class*='language-'] {
214
261
  position: relative;
215
- margin: 20px -24px;
262
+ margin: 16px -24px;
216
263
  background-color: var(--vp-code-block-bg);
217
264
  overflow-x: auto;
218
265
  transition: background-color 0.5s;
@@ -221,7 +268,7 @@
221
268
  @media (min-width: 640px) {
222
269
  .vp-doc div[class*='language-'] {
223
270
  border-radius: 8px;
224
- margin: 24px 0;
271
+ margin: 16px 0;
225
272
  }
226
273
  }
227
274
 
@@ -234,7 +281,7 @@
234
281
  .vp-doc div[class*='language-'] + div[class*='language-'],
235
282
  .vp-doc div[class$='-api'] + div[class*='language-'],
236
283
  .vp-doc div[class*='language-'] + div[class$='-api'] > div[class*='language-'] {
237
- margin-top: -12px;
284
+ margin-top: -8px;
238
285
  }
239
286
 
240
287
  .vp-doc [class*='language-'] pre,
@@ -276,150 +323,140 @@
276
323
  top: 0;
277
324
  bottom: 0;
278
325
  left: 0;
279
- padding: 13px 0 11px;
326
+ padding-top: 16px;
280
327
  width: 100%;
281
- font-family: var(--vp-font-family-mono);
282
328
  line-height: var(--vp-code-line-height);
329
+ font-family: var(--vp-font-family-mono);
283
330
  font-size: var(--vp-code-font-size);
284
331
  user-select: none;
285
332
  overflow: hidden;
286
333
  }
287
334
 
288
335
  .vp-doc .highlight-lines .highlighted {
289
- background-color: rgba(0, 0, 0, 0.3);
336
+ background-color: var(--vp-code-line-highlight-color);
290
337
  transition: background-color 0.5s;
291
338
  }
292
339
 
293
- .dark .vp-doc .highlight-lines .highlighted {
294
- background-color: rgba(255, 255, 255, 0.05);
295
- }
296
-
297
340
  .vp-doc div[class*='language-'].line-numbers-mode {
298
341
  padding-left: 32px;
299
342
  }
300
343
 
344
+ .vp-doc div[class*='language-'].line-numbers-mode pre {
345
+ padding-left: 16px;
346
+ }
347
+
301
348
  .vp-doc .line-numbers-wrapper {
302
349
  position: absolute;
303
350
  top: 0;
304
351
  bottom: 0;
305
352
  left: 0;
306
353
  z-index: 3;
307
- border-right: 1px solid var(--vp-c-divider-light);
308
- padding: 13px 0 11px;
354
+ border-right: 1px solid var(--vp-c-divider-dark-2);
355
+ padding-top: 16px;
309
356
  width: 32px;
310
357
  text-align: center;
311
358
  font-family: var(--vp-font-family-mono);
312
359
  line-height: var(--vp-code-line-height);
313
360
  font-size: var(--vp-code-font-size);
314
- color: var(--vp-c-text-3);
361
+ color: var(--vp-code-line-number-color);
315
362
  transition: border-color 0.5s, color 0.5s;
316
363
  }
317
364
 
318
- .vp-doc [class*='language-']:before {
365
+ .vp-doc [class*='language-'] > span.copy {
319
366
  position: absolute;
320
- top: 4px;
321
- right: 10px;
367
+ top: 8px;
368
+ right: 8px;
322
369
  z-index: 2;
323
- font-size: 12px;
324
- font-weight: 500;
325
- color: var(--vp-c-text-dark-3);
326
- transition: color 0.5s;
327
- }
328
-
329
- .vp-doc [class~='language-vue']:before { content: 'vue'; }
330
- .vp-doc [class~='language-html']:before { content: 'html'; }
331
- .vp-doc [class~='language-vue-html']:before { content: 'template'; }
332
- .vp-doc [class~='language-css']:before { content: 'css'; }
333
- .vp-doc [class~='language-js']:before { content: 'js'; }
334
- .vp-doc [class~='language-jsx']:before { content: 'jsx'; }
335
- .vp-doc [class~='language-ts']:before { content: 'ts'; }
336
- .vp-doc [class~='language-tsx']:before { content: 'tsx'; }
337
- .vp-doc [class~='language-json']:before { content: 'json'; }
338
- .vp-doc [class~='language-yaml']:before { content: 'yaml'; }
339
- .vp-doc [class~='language-yml']:before { content: 'yaml'; }
340
- .vp-doc [class~='language-sh']:before { content: 'sh'; }
341
- .vp-doc [class~='language-bash']:before { content: 'sh'; }
342
-
343
- /**
344
- * Code: Highlight
345
- *
346
- * prism.js tomorrow night eighties theme.
347
- * https://github.com/chriskempson/tomorrow-theme
348
- *
349
- * @author Rose Pritchard
350
- * -------------------------------------------------------------------------- */
351
-
352
- .token.comment,
353
- .token.block-comment,
354
- .token.prolog,
355
- .token.doctype,
356
- .token.cdata {
357
- color: #999;
358
- }
359
-
360
- .token.punctuation {
361
- color: #ccc;
362
- }
363
-
364
- .token.tag,
365
- .token.attr-name,
366
- .token.namespace,
367
- .token.deleted {
368
- color: #e2777a;
369
- }
370
-
371
- .token.function-name {
372
- color: #6196cc;
373
- }
374
-
375
- .token.boolean,
376
- .token.number,
377
- .token.function {
378
- color: #f08d49;
379
- }
380
-
381
- .token.property,
382
- .token.class-name,
383
- .token.constant,
384
- .token.symbol {
385
- color: #f8c555;
370
+ display: block;
371
+ justify-content: center;
372
+ align-items: center;
373
+ border-radius: 4px;
374
+ width: 40px;
375
+ height: 40px;
376
+ background-color: var(--vp-code-block-bg);
377
+ opacity: 0;
378
+ cursor: pointer;
379
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(235,235,235,0.38)' stroke-width='2' class='h-6 w-6' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2'/%3E%3C/svg%3E");
380
+ background-position: 50%;
381
+ background-size: 20px;
382
+ background-repeat: no-repeat;
383
+ transition: opacity 0.25s;
386
384
  }
387
385
 
388
- .token.selector,
389
- .token.important,
390
- .token.atrule,
391
- .token.keyword,
392
- .token.builtin {
393
- color: #cc99cd;
386
+ .vp-doc [class*='language-']:hover > span.copy {
387
+ opacity: 1;
394
388
  }
395
389
 
396
- .token.string,
397
- .token.char,
398
- .token.attr-value,
399
- .token.regex,
400
- .token.variable {
401
- color: #7ec699;
390
+ .vp-doc [class*='language-'] > span.copy:hover {
391
+ background-color: var(--vp-code-copy-code-hover-bg);
402
392
  }
403
393
 
404
- .token.operator,
405
- .token.entity,
406
- .token.url {
407
- color: #67cdcc;
394
+ .vp-doc [class*='language-'] > span.copy.copied,
395
+ .vp-doc [class*='language-'] > span.copy:hover.copied {
396
+ border-radius: 0 4px 4px 0;
397
+ background-color: var(--vp-code-copy-code-hover-bg);
398
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(235,235,235,0.5)' stroke-width='2' class='h-6 w-6' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m-6 9 2 2 4-4'/%3E%3C/svg%3E");
408
399
  }
409
400
 
410
- .token.important,
411
- .token.bold {
412
- font-weight: bold;
401
+ .vp-doc [class*='language-'] > span.copy.copied::before,
402
+ .vp-doc [class*='language-'] > span.copy:hover.copied::before {
403
+ position: relative;
404
+ left: -65px;
405
+ display: block;
406
+ border-radius: 4px 0 0 4px;
407
+ padding-top: 8px;
408
+ width: 64px;
409
+ height: 40px;
410
+ text-align: center;
411
+ font-size: 12px;
412
+ font-weight: 500;
413
+ color: var(--vp-c-text-dark-2);
414
+ background-color: var(--vp-code-copy-code-hover-bg);
415
+ white-space: nowrap;
416
+ content: "Copied";
413
417
  }
414
418
 
415
- .token.italic {
416
- font-style: italic;
419
+ .vp-doc [class*='language-']:before {
420
+ position: absolute;
421
+ top: 6px;
422
+ right: 12px;
423
+ z-index: 2;
424
+ font-size: 12px;
425
+ font-weight: 500;
426
+ color: var(--vp-c-text-dark-3);
427
+ transition: color 0.5s, opacity 0.5s;
417
428
  }
418
429
 
419
- .token.entity {
420
- cursor: help;
430
+ .vp-doc [class*='language-']:hover:before {
431
+ opacity: 0;
421
432
  }
422
433
 
423
- .token.inserted {
424
- color: green;
425
- }
434
+ .vp-doc [class~='language-c']:before { content: 'c'; }
435
+ .vp-doc [class~='language-css']:before { content: 'css'; }
436
+ .vp-doc [class~='language-go']:before { content: 'go'; }
437
+ .vp-doc [class~='language-html']:before { content: 'html'; }
438
+ .vp-doc [class~='language-java']:before { content: 'java'; }
439
+ .vp-doc [class~='language-javascript']:before { content: 'js'; }
440
+ .vp-doc [class~='language-js']:before { content: 'js'; }
441
+ .vp-doc [class~='language-json']:before { content: 'json'; }
442
+ .vp-doc [class~='language-jsx']:before { content: 'jsx'; }
443
+ .vp-doc [class~='language-less']:before { content: 'less'; }
444
+ .vp-doc [class~='language-markdown']:before { content: 'md'; }
445
+ .vp-doc [class~='language-md']:before { content: 'md' }
446
+ .vp-doc [class~='language-php']:before { content: 'php'; }
447
+ .vp-doc [class~='language-python']:before { content: 'py'; }
448
+ .vp-doc [class~='language-py']:before { content: 'py'; }
449
+ .vp-doc [class~='language-rb']:before { content: 'rb'; }
450
+ .vp-doc [class~='language-ruby']:before { content: 'rb'; }
451
+ .vp-doc [class~='language-rust']:before { content: 'rust'; }
452
+ .vp-doc [class~='language-sass']:before { content: 'sass'; }
453
+ .vp-doc [class~='language-scss']:before { content: 'scss'; }
454
+ .vp-doc [class~='language-sh']:before { content: 'sh'; }
455
+ .vp-doc [class~='language-bash']:before { content: 'sh'; }
456
+ .vp-doc [class~='language-stylus']:before { content: 'styl'; }
457
+ .vp-doc [class~='language-vue-html']:before { content: 'template'; }
458
+ .vp-doc [class~='language-typescript']:before { content: 'ts'; }
459
+ .vp-doc [class~='language-ts']:before { content: 'ts'; }
460
+ .vp-doc [class~='language-tsx']:before { content: 'tsx'; }
461
+ .vp-doc [class~='language-vue']:before { content: 'vue'; }
462
+ .vp-doc [class~='language-yaml']:before { content: 'yaml'; }