@@ -241,6 +241,104 @@ index 6746cc1..26954c0 100644
241241 }
242242 export function resolveHeaders(headers, range) {
243243 if (range === false) {
244+ diff --git a/node_modules/vitepress/dist/client/theme-default/styles/components/vp-doc.css b/node_modules/vitepress/dist/client/theme-default/styles/components/vp-doc.css
245+ index 8999118..893b9c0 100644
246+ --- a/node_modules/vitepress/dist/client/theme-default/styles/components/vp-doc.css
247+ +++ b/node_modules/vitepress/dist/client/theme-default/styles/components/vp-doc.css
248+ @@ -462,7 +462,31 @@
249+ opacity 0.25s;
250+ }
251+
252+ + .vp-doc [class*='language-'] > form.code-box-codepen {
253+ + position: absolute;
254+ + top: 12px;
255+ + right: 64px;
256+ + z-index: 3;
257+ +
258+ + display: flex;
259+ + align-items: center;
260+ + justify-content: center;
261+ +
262+ + width: 40px;
263+ + height: 40px;
264+ + border: 1px solid var(--vp-code-copy-code-border-color);
265+ +
266+ + opacity: 0;
267+ + border-radius: 4px;
268+ + background-color: var(--vp-code-copy-code-bg);
269+ +
270+ + cursor: pointer;
271+ +
272+ + transition: all 0.24s;
273+ + }
274+ +
275+ .vp-doc [class*='language-']:hover > button.copy,
276+ + .vp-doc [class*='language-']:hover > form.code-box-codepen,
277+ .vp-doc [class*='language-'] > button.copy:focus {
278+ opacity: 1;
279+ }
280+ diff --git a/node_modules/vitepress/dist/node/chunk-D3CUZ4fa.js b/node_modules/vitepress/dist/node/chunk-D3CUZ4fa.js
281+ index fcc35e8..a196fde 100644
282+ --- a/node_modules/vitepress/dist/node/chunk-D3CUZ4fa.js
283+ +++ b/node_modules/vitepress/dist/node/chunk-D3CUZ4fa.js
284+ @@ -35089,6 +35089,48 @@ function nanoid$1(size = 21) {
285+ }
286+
287+ function preWrapperPlugin(md, options) {
288+ + // FIXME: 部分内联执行脚本打开无法带出
289+ + const codepen = (code, lang) => {
290+ + const isHTML = lang === 'html'
291+ + const isCSS = ['css', 'scss', 'less'].includes(lang)
292+ + const isJS = ['js', 'ts', 'javascript', 'typescript'].includes(lang)
293+ + let value = JSON.stringify({
294+ + 'title': 'muzhidong blog demo',
295+ + 'editors': `${+(isHTML)}${+(isCSS)}${+(isJS)}`,
296+ + 'html': isHTML ? code : '',
297+ + 'css': isCSS ? code : '',
298+ + 'css_pre_processor': ['scss', 'less'].includes(lang) ? lang : '',
299+ + 'js': isJS ? code : '',
300+ + 'js_pre_processor': ['ts', 'typescript'].includes(lang) ? 'typescript' : '',
301+ + 'js_external': '',
302+ + })
303+ + // value = value.replaceAll(/\/\*\*.*(?=\*\/)/g, '').replaceAll(/\*\//g, '')
304+ + // .replaceAll(/\/\/.*(?=\n)/g, '')
305+ + // .replaceAll('"', '"').replaceAll("'", '"')
306+ + // .replaceAll('<', '<').replaceAll('>', '>')
307+ + // .replaceAll(/(\/|`)/g, '\\$1')
308+ + value = value.replaceAll('"', '"').replaceAll("'", '"').replaceAll('<', '<')
309+ + return `<form class="code-box-codepen"
310+ + action="https://codepen.io/pen/define"
311+ + method="POST"
312+ + target="_blank"
313+ + rel="noreferrer">
314+ + <input type="hidden"
315+ + name="data"
316+ + value="${value}">
317+ + <button type="submit">
318+ + <svg viewBox="0 0 15 15"
319+ + width="16"
320+ + height="16"
321+ + fill="currentColor">
322+ + <title>codepen icon</title>
323+ + <path
324+ + d="M14.777304,4.75062256 L7.77734505,0.0839936563 C7.60939924,-0.0279665065 7.39060662,-0.0279665065 7.22266081,0.0839936563 L0.222701813,4.75062256 C0.0836082937,4.84334851 5.66973453e-05,4.99945222 4.6875e-05,5.16662013 L4.6875e-05,9.83324903 C4.6875e-05,10.0004355 0.0836088906,10.1565596 0.222701812,10.2492466 L7.22266081,14.9158755 C7.30662908,14.9718752 7.403316,14.999875 7.50000292,14.999875 C7.59668984,14.999875 7.69337678,14.9718752 7.77734505,14.9158755 L14.777304,10.2492466 C14.9163976,10.1565206 14.9999492,10.0004169 14.999959,9.83324903 L14.999959,5.16662013 C14.9999492,4.99945222 14.9163976,4.84334851 14.777304,4.75062256 Z M7.50000292,9.23237755 L4.90139316,7.4999502 L7.50000292,5.76755409 L10.0986127,7.4999502 L7.50000292,9.23237755 Z M8,4.89905919 L8,1.43423573 L13.598561,5.16665138 L10.9999824,6.89904747 L8,4.89905919 Z M7.00000586,4.89905919 L4.00002344,6.89904747 L1.40141366,5.16665138 L7.00000586,1.43423573 L7.00000586,4.89905919 Z M3.09865372,7.4999502 L1.00004102,8.89903575 L1.00004102,6.10089589 L3.09865372,7.4999502 Z M4.00002344,8.10085292 L7.00000586,10.1008412 L7.00000586,13.5656334 L1.40141366,9.83328028 L4.00002344,8.10085292 Z M8,10.1008412 L10.9999824,8.10085292 L13.5985922,9.83328028 L8,13.5656647 L8,10.1008412 L8,10.1008412 Z M11.9013521,7.4999502 L13.9999648,6.10089589 L13.9999648,8.899067 L11.9013521,7.4999502 Z">
325+ + </path>
326+ + </svg>
327+ + </button>
328+ + </form>`
329+ + }
330+ const fence = md.renderer.rules.fence;
331+ md.renderer.rules.fence = (...args) => {
332+ const [tokens, idx] = args;
333+ @@ -35097,7 +35139,7 @@ function preWrapperPlugin(md, options) {
334+ const active = / active( |$)/.test(token.info) ? " active" : "";
335+ token.info = token.info.replace(/ active$/, "").replace(/ active /, " ");
336+ const lang = extractLang(token.info);
337+ - return `<div class="language-${lang}${getAdaptiveThemeMarker(options)}${active}"><button title="${options.codeCopyButtonTitle}" class="copy"></button><span class="lang">${lang}</span>` + fence(...args) + "</div>";
338+ + return `<div class="language-${lang}${getAdaptiveThemeMarker(options)}${active}">${codepen(token.content, lang.toLowerCase())}<button title="${options.codeCopyButtonTitle}" class="copy"></button><span class="lang">${lang}</span>` + fence(...args) + "</div>";
339+ };
340+ }
341+ function getAdaptiveThemeMarker(options) {
244342diff --git a/node_modules/vitepress/types/default-theme.d.ts b/node_modules/vitepress/types/default-theme.d.ts
245343index 10681a8..4c82c76 100644
246344--- a/node_modules/vitepress/types/default-theme.d.ts
0 commit comments