@deot/docs-playground 1.1.3 → 1.1.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.
- package/README.md +1 -0
- package/dist/{compile-DSMuM8zl.cjs → compile-29EUKPOy.cjs} +29 -40
- package/dist/{compile-Bw7v7QE-.js → compile-CM_OyqYN.js} +21 -32
- package/dist/css-DleINdoA.js +580 -0
- package/dist/css-DpqJBQ5c.cjs +786 -0
- package/dist/index.cjs +1925 -101
- package/dist/index.js +1879 -47
- package/dist/index.style.css +1 -1
- package/package.json +21 -20
- package/dist/cdn-Czve5_9b.cjs +0 -94
- package/dist/cdn-DEvdGJu2.js +0 -53
- package/dist/files-C5UMzYxA.js +0 -178
- package/dist/files-D5LNOtjp.cjs +0 -192
- package/dist/linker-B--sjERT.cjs +0 -167
- package/dist/linker-JHdz37DK.js +0 -166
- package/dist/local-sandbox-B8IJ5jWb.js +0 -431
- package/dist/local-sandbox-DnkKrBhf.cjs +0 -428
- package/dist/modules-CInmL-8h.cjs +0 -217
- package/dist/modules-DlLJF_vd.js +0 -211
- package/dist/remote-CKMzn1J3.cjs +0 -106
- package/dist/remote-DfXAsO9n.js +0 -106
- package/dist/rolldown-runtime-C0BPl7ul.cjs +0 -43
- package/dist/script-5Xzzx7u5.cjs +0 -57
- package/dist/script-xKUjE8pf.js +0 -46
- package/dist/scss-Co2it4vB.js +0 -215
- package/dist/scss-DaIqB_qT.cjs +0 -233
- package/dist/store-BF7z-oaO.cjs +0 -964
- package/dist/store-D8vwi-HV.js +0 -767
|
@@ -1,431 +0,0 @@
|
|
|
1
|
-
import { j as PREVIEW_SCROLL_CONTENT_CLASS, r as createRuntimeImports } from "./store-D8vwi-HV.js";
|
|
2
|
-
import * as Vue from "vue";
|
|
3
|
-
import { createElementBlock, createElementVNode, defineComponent, h, nextTick, onBeforeUnmount, onErrorCaptured, onMounted, openBlock, provide, ref, shallowRef, unref, watch } from "vue";
|
|
4
|
-
import { Scroller } from "@deot/vc";
|
|
5
|
-
import * as VueRouter from "vue-router";
|
|
6
|
-
//#region \0rolldown/runtime.js
|
|
7
|
-
var __defProp = Object.defineProperty;
|
|
8
|
-
var __exportAll = (all, no_symbols) => {
|
|
9
|
-
let target = {};
|
|
10
|
-
for (var name in all) __defProp(target, name, {
|
|
11
|
-
get: all[name],
|
|
12
|
-
enumerable: true
|
|
13
|
-
});
|
|
14
|
-
if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
15
|
-
return target;
|
|
16
|
-
};
|
|
17
|
-
//#endregion
|
|
18
|
-
//#region packages/playground/src/core/runtime/local/compile/css.ts
|
|
19
|
-
var collectCss = (chunks) => {
|
|
20
|
-
const result = [];
|
|
21
|
-
chunks.forEach((chunk) => {
|
|
22
|
-
const css = String(chunk || "").trim();
|
|
23
|
-
if (css) result.push(css);
|
|
24
|
-
});
|
|
25
|
-
return result;
|
|
26
|
-
};
|
|
27
|
-
var injectStyle = (id, cssList) => {
|
|
28
|
-
/* istanbul ignore if -- 仅浏览器注入样式 */
|
|
29
|
-
if (typeof document === "undefined") return null;
|
|
30
|
-
document.querySelector(`style[data-playground-id="${id}"]`)?.remove();
|
|
31
|
-
const css = cssList.filter(Boolean).join("\n");
|
|
32
|
-
if (!css) return null;
|
|
33
|
-
const style = document.createElement("style");
|
|
34
|
-
style.setAttribute("data-playground-id", id);
|
|
35
|
-
style.textContent = css;
|
|
36
|
-
document.head.appendChild(style);
|
|
37
|
-
return style;
|
|
38
|
-
};
|
|
39
|
-
var removeStyle = (id) => {
|
|
40
|
-
/* istanbul ignore if -- 仅浏览器注入样式 */
|
|
41
|
-
if (typeof document === "undefined") return;
|
|
42
|
-
document.querySelector(`style[data-playground-id="${id}"]`)?.remove();
|
|
43
|
-
};
|
|
44
|
-
//#endregion
|
|
45
|
-
//#region packages/playground/src/core/runtime/local/playground.ts
|
|
46
|
-
/**
|
|
47
|
-
* 直接渲染与页面同文档,弹层不需要临时撑高。
|
|
48
|
-
* `run` 仍返回可调用函数,但不会申请高度,也不会改动预览尺寸。
|
|
49
|
-
* @param vue 宿主 Vue,只用其中的 `isRef`。
|
|
50
|
-
* @returns 注入给预览的 `docs:playground`。
|
|
51
|
-
*/
|
|
52
|
-
var createLocalPlayground = (vue) => {
|
|
53
|
-
const run = (_height, optionsOrHandler, lastHandler) => {
|
|
54
|
-
const visible = (typeof optionsOrHandler === "function" || optionsOrHandler == null ? {} : optionsOrHandler).visible;
|
|
55
|
-
const handler = typeof optionsOrHandler === "function" ? optionsOrHandler : typeof lastHandler === "function" ? lastHandler : vue.isRef(visible) ? () => {
|
|
56
|
-
visible.value = true;
|
|
57
|
-
} : void 0;
|
|
58
|
-
return (...args) => {
|
|
59
|
-
if (typeof handler !== "function") return void 0;
|
|
60
|
-
return handler(...args);
|
|
61
|
-
};
|
|
62
|
-
};
|
|
63
|
-
return {
|
|
64
|
-
enable: () => Promise.resolve(true),
|
|
65
|
-
disable() {},
|
|
66
|
-
dispose() {},
|
|
67
|
-
run
|
|
68
|
-
};
|
|
69
|
-
};
|
|
70
|
-
//#endregion
|
|
71
|
-
//#region packages/playground/src/core/runtime/local/port.ts
|
|
72
|
-
/** 只在桥接 iframe 内部转发,保证父页面收到的 source 是该 iframe。 */
|
|
73
|
-
var LOCAL_BRIDGE_CHANNEL = "docs:local-out";
|
|
74
|
-
var BRIDGE_INSTALLER = `
|
|
75
|
-
if (!window.__docsLocalBridge) {
|
|
76
|
-
window.__docsLocalBridge = true;
|
|
77
|
-
window.addEventListener('message', function (event) {
|
|
78
|
-
var data = event.data;
|
|
79
|
-
if (!data || data.channel !== ${JSON.stringify(LOCAL_BRIDGE_CHANNEL)}) return;
|
|
80
|
-
window.parent.postMessage(data.payload, '*');
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
`;
|
|
84
|
-
var LOCAL_BRIDGE_SRCDOC = `<!doctype html><html><head></head><body><script>${BRIDGE_INSTALLER}<\/script></body></html>`;
|
|
85
|
-
/**
|
|
86
|
-
* 在同源空白 iframe 里安装转发脚本。调用发生在 iframe realm,父页面看到的 source 才是它。
|
|
87
|
-
* @param iframe 用作消息身份的空白 iframe。
|
|
88
|
-
* @returns 脚本是否已经装上。
|
|
89
|
-
*/
|
|
90
|
-
var installLocalBridge = (iframe) => {
|
|
91
|
-
const win = iframe.contentWindow;
|
|
92
|
-
if (!win || win.__docsLocalBridge) return Boolean(win?.__docsLocalBridge);
|
|
93
|
-
win.eval(BRIDGE_INSTALLER);
|
|
94
|
-
return Boolean(win.__docsLocalBridge);
|
|
95
|
-
};
|
|
96
|
-
/**
|
|
97
|
-
* 满足 PlaygroundService 现有 Window 调用的预览窗口。
|
|
98
|
-
* 出站消息经 iframe 转发,入站回复再交回服务,协议仍是 docs:height / docs:navigate。
|
|
99
|
-
*/
|
|
100
|
-
var LocalPreviewPort = class {
|
|
101
|
-
iframe;
|
|
102
|
-
parent;
|
|
103
|
-
listeners = /* @__PURE__ */ new Map();
|
|
104
|
-
constructor(iframe) {
|
|
105
|
-
this.iframe = iframe;
|
|
106
|
-
this.parent = { postMessage: (data) => {
|
|
107
|
-
this.iframe.contentWindow?.postMessage({
|
|
108
|
-
channel: LOCAL_BRIDGE_CHANNEL,
|
|
109
|
-
payload: data
|
|
110
|
-
}, "*");
|
|
111
|
-
} };
|
|
112
|
-
}
|
|
113
|
-
get contentWindow() {
|
|
114
|
-
return this.iframe.contentWindow;
|
|
115
|
-
}
|
|
116
|
-
get innerHeight() {
|
|
117
|
-
const fromWindow = this.iframe.contentWindow?.innerHeight ?? 0;
|
|
118
|
-
if (fromWindow > 0) return fromWindow;
|
|
119
|
-
return this.iframe.clientHeight || this.iframe.parentElement?.clientHeight || 0;
|
|
120
|
-
}
|
|
121
|
-
addEventListener(type, listener) {
|
|
122
|
-
const win = this.iframe.contentWindow;
|
|
123
|
-
if (!win) return;
|
|
124
|
-
if (type !== "message") {
|
|
125
|
-
win.addEventListener(type, listener);
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
const wrapped = (event) => {
|
|
129
|
-
const message = event;
|
|
130
|
-
const data = message.data;
|
|
131
|
-
if (data && data.channel === "docs:local-out") return;
|
|
132
|
-
listener({
|
|
133
|
-
data: message.data,
|
|
134
|
-
source: this.parent
|
|
135
|
-
});
|
|
136
|
-
};
|
|
137
|
-
this.listeners.set(listener, wrapped);
|
|
138
|
-
win.addEventListener("message", wrapped);
|
|
139
|
-
}
|
|
140
|
-
removeEventListener(type, listener) {
|
|
141
|
-
const win = this.iframe.contentWindow;
|
|
142
|
-
if (!win) return;
|
|
143
|
-
const wrapped = this.listeners.get(listener);
|
|
144
|
-
if (wrapped) {
|
|
145
|
-
this.listeners.delete(listener);
|
|
146
|
-
win.removeEventListener(type, wrapped);
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
win.removeEventListener(type, listener);
|
|
150
|
-
}
|
|
151
|
-
requestAnimationFrame(callback) {
|
|
152
|
-
return window.requestAnimationFrame(callback);
|
|
153
|
-
}
|
|
154
|
-
cancelAnimationFrame(handle) {
|
|
155
|
-
window.cancelAnimationFrame(handle);
|
|
156
|
-
}
|
|
157
|
-
setTimeout(handler, timeout, ...args) {
|
|
158
|
-
return window.setTimeout(handler, timeout, ...args);
|
|
159
|
-
}
|
|
160
|
-
clearTimeout(handle) {
|
|
161
|
-
window.clearTimeout(handle);
|
|
162
|
-
}
|
|
163
|
-
};
|
|
164
|
-
//#endregion
|
|
165
|
-
//#region packages/playground/src/core/runtime/local/format-error.ts
|
|
166
|
-
/**
|
|
167
|
-
* 空 reject(例如弹层取消)不要渲染成红条。
|
|
168
|
-
* @param error 运行时抛出的值。
|
|
169
|
-
* @returns 可展示的错误文本;空取消返回空字符串。
|
|
170
|
-
*/
|
|
171
|
-
var formatPlaygroundRuntimeError = (error) => {
|
|
172
|
-
if (error == null) return "";
|
|
173
|
-
const raw = typeof error === "object" && "message" in error ? error.message : error;
|
|
174
|
-
if (raw == null || raw === "") return "";
|
|
175
|
-
const text = String(raw);
|
|
176
|
-
if (text === "undefined" || text === "null") return "";
|
|
177
|
-
return text;
|
|
178
|
-
};
|
|
179
|
-
//#endregion
|
|
180
|
-
//#region packages/playground/src/core/runtime/local/local-sandbox.vue?vue&type=script&setup=true&lang.ts
|
|
181
|
-
var _hoisted_1 = ["srcdoc"];
|
|
182
|
-
var local_sandbox_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
183
|
-
__name: "local-sandbox",
|
|
184
|
-
props: {
|
|
185
|
-
files: {},
|
|
186
|
-
entry: {},
|
|
187
|
-
options: {},
|
|
188
|
-
previewScroller: {
|
|
189
|
-
type: Boolean,
|
|
190
|
-
default: false
|
|
191
|
-
},
|
|
192
|
-
clearConsole: {
|
|
193
|
-
type: Boolean,
|
|
194
|
-
default: false
|
|
195
|
-
}
|
|
196
|
-
},
|
|
197
|
-
emits: ["error"],
|
|
198
|
-
setup(__props, { expose: __expose, emit: __emit }) {
|
|
199
|
-
const props = __props;
|
|
200
|
-
const emit = __emit;
|
|
201
|
-
const bridgeSrcdoc = LOCAL_BRIDGE_SRCDOC;
|
|
202
|
-
const containerEl = ref(null);
|
|
203
|
-
const bridgeEl = ref(null);
|
|
204
|
-
const mountEl = ref(null);
|
|
205
|
-
const compileError = ref("");
|
|
206
|
-
const runtimeError = ref("");
|
|
207
|
-
const messageSource = shallowRef(null);
|
|
208
|
-
let port = null;
|
|
209
|
-
let previewApp = null;
|
|
210
|
-
let version = 0;
|
|
211
|
-
let pendingMount = null;
|
|
212
|
-
const styleId = `docs-local-${Math.random().toString(36).slice(2, 10)}`;
|
|
213
|
-
const publishError = () => {
|
|
214
|
-
emit("error", {
|
|
215
|
-
compile: compileError.value,
|
|
216
|
-
runtime: runtimeError.value
|
|
217
|
-
});
|
|
218
|
-
};
|
|
219
|
-
watch([compileError, runtimeError], publishError);
|
|
220
|
-
const createDocsLink = (preview) => defineComponent({
|
|
221
|
-
name: "DocsLink",
|
|
222
|
-
props: { to: {
|
|
223
|
-
type: String,
|
|
224
|
-
default: ""
|
|
225
|
-
} },
|
|
226
|
-
setup(linkProps, { slots }) {
|
|
227
|
-
return () => h("a", {
|
|
228
|
-
href: linkProps.to,
|
|
229
|
-
style: {
|
|
230
|
-
color: "inherit",
|
|
231
|
-
textDecoration: "none"
|
|
232
|
-
},
|
|
233
|
-
onClick(event) {
|
|
234
|
-
event.preventDefault();
|
|
235
|
-
preview.parent.postMessage({
|
|
236
|
-
action: "docs:navigate",
|
|
237
|
-
to: linkProps.to
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
}, slots.default?.());
|
|
241
|
-
}
|
|
242
|
-
});
|
|
243
|
-
const destroyPreview = () => {
|
|
244
|
-
previewApp?.unmount();
|
|
245
|
-
previewApp = null;
|
|
246
|
-
removeStyle(styleId);
|
|
247
|
-
};
|
|
248
|
-
const mountPreview = (component, preview, css) => {
|
|
249
|
-
if (!mountEl.value) return;
|
|
250
|
-
destroyPreview();
|
|
251
|
-
injectStyle(styleId, css);
|
|
252
|
-
if (props.clearConsole) console.clear();
|
|
253
|
-
const useScroller = props.previewScroller === true;
|
|
254
|
-
const app = Vue.createApp({
|
|
255
|
-
name: "LocalSandboxRoot",
|
|
256
|
-
setup() {
|
|
257
|
-
const service = createLocalPlayground(Vue);
|
|
258
|
-
provide("docs:playground", service);
|
|
259
|
-
onErrorCaptured((error) => {
|
|
260
|
-
const message = formatPlaygroundRuntimeError(error);
|
|
261
|
-
if (message) runtimeError.value = message;
|
|
262
|
-
return false;
|
|
263
|
-
});
|
|
264
|
-
onBeforeUnmount(() => service.dispose());
|
|
265
|
-
return () => {
|
|
266
|
-
const content = h(component);
|
|
267
|
-
if (!useScroller) return content;
|
|
268
|
-
return h(Scroller, {
|
|
269
|
-
height: "100%",
|
|
270
|
-
native: false,
|
|
271
|
-
autoResize: true,
|
|
272
|
-
showBar: true,
|
|
273
|
-
contentClass: PREVIEW_SCROLL_CONTENT_CLASS
|
|
274
|
-
}, { default: () => content });
|
|
275
|
-
};
|
|
276
|
-
}
|
|
277
|
-
});
|
|
278
|
-
app.component("DocsLink", createDocsLink(preview));
|
|
279
|
-
app.config.errorHandler = (error) => {
|
|
280
|
-
const message = formatPlaygroundRuntimeError(error);
|
|
281
|
-
if (message) runtimeError.value = message;
|
|
282
|
-
};
|
|
283
|
-
app.mount(mountEl.value);
|
|
284
|
-
previewApp = app;
|
|
285
|
-
};
|
|
286
|
-
const ensurePort = () => {
|
|
287
|
-
const iframe = bridgeEl.value;
|
|
288
|
-
if (!iframe?.contentWindow) return null;
|
|
289
|
-
try {
|
|
290
|
-
if (!installLocalBridge(iframe)) return null;
|
|
291
|
-
} catch {
|
|
292
|
-
return null;
|
|
293
|
-
}
|
|
294
|
-
port ??= new LocalPreviewPort(iframe);
|
|
295
|
-
messageSource.value = iframe.contentWindow;
|
|
296
|
-
return port;
|
|
297
|
-
};
|
|
298
|
-
const tryMount = async () => {
|
|
299
|
-
const job = pendingMount;
|
|
300
|
-
/* istanbul ignore if -- 桥接 iframe 尚未就绪或编译已被取代 */
|
|
301
|
-
if (!job || job.version !== version) return;
|
|
302
|
-
const preview = ensurePort();
|
|
303
|
-
/* istanbul ignore if -- 挂载点在编译完成时已经存在 */
|
|
304
|
-
if (!preview || !mountEl.value) return;
|
|
305
|
-
await nextTick();
|
|
306
|
-
/* istanbul ignore if -- 桥接 iframe 尚未就绪或编译已被取代 */
|
|
307
|
-
if (pendingMount !== job || !mountEl.value) return;
|
|
308
|
-
pendingMount = null;
|
|
309
|
-
mountPreview(job.component, preview, job.css);
|
|
310
|
-
};
|
|
311
|
-
const run = async () => {
|
|
312
|
-
const current = ++version;
|
|
313
|
-
pendingMount = null;
|
|
314
|
-
compileError.value = "";
|
|
315
|
-
runtimeError.value = "";
|
|
316
|
-
publishError();
|
|
317
|
-
destroyPreview();
|
|
318
|
-
try {
|
|
319
|
-
const [{ compilePlayground }, { linkPlayground }, modulesApi, fileApi] = await Promise.all([
|
|
320
|
-
import("./compile-Bw7v7QE-.js"),
|
|
321
|
-
import("./linker-JHdz37DK.js"),
|
|
322
|
-
import("./modules-DlLJF_vd.js"),
|
|
323
|
-
import("./files-C5UMzYxA.js")
|
|
324
|
-
]);
|
|
325
|
-
/* istanbul ignore if -- 并发编译时只保留最后一次 */
|
|
326
|
-
if (current !== version) return;
|
|
327
|
-
const compiled = await compilePlayground(props.files, { entry: props.entry });
|
|
328
|
-
/* istanbul ignore if -- 并发编译时只保留最后一次 */
|
|
329
|
-
if (current !== version) return;
|
|
330
|
-
if (compiled.errors.length || !compiled.entry) {
|
|
331
|
-
compileError.value = compiled.errors.join("\n") || "[Playground] 未能确定入口";
|
|
332
|
-
publishError();
|
|
333
|
-
return;
|
|
334
|
-
}
|
|
335
|
-
const imports = createRuntimeImports(props.options.cdnURL, props.options.builtinImportMap);
|
|
336
|
-
const specifiers = fileApi.collectBareSpecifiers(props.files, fileApi.collectReachableFilenames(props.files, compiled.entry));
|
|
337
|
-
const { createRemoteLoader } = await import("./remote-DfXAsO9n.js");
|
|
338
|
-
const remote = createRemoteLoader(imports, {
|
|
339
|
-
vue: Vue,
|
|
340
|
-
vueRouter: VueRouter
|
|
341
|
-
}, props.options.cdnURL);
|
|
342
|
-
const loaded = await modulesApi.loadLocalModules(specifiers, imports, {
|
|
343
|
-
vue: Vue,
|
|
344
|
-
vueRouter: VueRouter
|
|
345
|
-
}, (url) => remote.load(url), props.options.cdnURL);
|
|
346
|
-
/* istanbul ignore if -- 并发编译时只保留最后一次 */
|
|
347
|
-
if (current !== version) return;
|
|
348
|
-
if (loaded.errors.length) {
|
|
349
|
-
compileError.value = loaded.errors.join("\n");
|
|
350
|
-
publishError();
|
|
351
|
-
return;
|
|
352
|
-
}
|
|
353
|
-
const linked = linkPlayground(compiled, props.files, { modules: loaded.modules });
|
|
354
|
-
/* istanbul ignore if -- 并发编译时只保留最后一次 */
|
|
355
|
-
if (current !== version) return;
|
|
356
|
-
if (linked.errors.length || !linked.component) {
|
|
357
|
-
compileError.value = (linked.errors.length ? linked.errors : ["[Playground] 未能解析入口组件"]).join("\n");
|
|
358
|
-
publishError();
|
|
359
|
-
return;
|
|
360
|
-
}
|
|
361
|
-
pendingMount = {
|
|
362
|
-
component: linked.component,
|
|
363
|
-
css: linked.css,
|
|
364
|
-
version: current
|
|
365
|
-
};
|
|
366
|
-
await tryMount();
|
|
367
|
-
} catch (error) {
|
|
368
|
-
/* istanbul ignore next -- 编译器自身异常才进入,普通错误走结果里的 errors */
|
|
369
|
-
if (current !== version) return;
|
|
370
|
-
/* istanbul ignore next -- 同上,只兜底编译器抛错 */
|
|
371
|
-
compileError.value = error instanceof Error ? error.message : String(error);
|
|
372
|
-
/* istanbul ignore next -- 同上,只兜底编译器抛错 */
|
|
373
|
-
publishError();
|
|
374
|
-
}
|
|
375
|
-
};
|
|
376
|
-
const handleBridgeLoad = () => {
|
|
377
|
-
tryMount();
|
|
378
|
-
};
|
|
379
|
-
onMounted(() => {
|
|
380
|
-
run();
|
|
381
|
-
});
|
|
382
|
-
watch(() => [
|
|
383
|
-
props.files,
|
|
384
|
-
props.entry,
|
|
385
|
-
props.options,
|
|
386
|
-
props.previewScroller
|
|
387
|
-
], () => {
|
|
388
|
-
if (!containerEl.value) return;
|
|
389
|
-
run();
|
|
390
|
-
}, { deep: true });
|
|
391
|
-
onBeforeUnmount(() => {
|
|
392
|
-
version += 1;
|
|
393
|
-
pendingMount = null;
|
|
394
|
-
destroyPreview();
|
|
395
|
-
});
|
|
396
|
-
__expose({
|
|
397
|
-
container: containerEl,
|
|
398
|
-
messageSource,
|
|
399
|
-
local: true,
|
|
400
|
-
refresh: () => {
|
|
401
|
-
run();
|
|
402
|
-
}
|
|
403
|
-
});
|
|
404
|
-
return (_ctx, _cache) => {
|
|
405
|
-
return openBlock(), createElementBlock("div", {
|
|
406
|
-
ref_key: "containerEl",
|
|
407
|
-
ref: containerEl,
|
|
408
|
-
class: "docs-playground-local"
|
|
409
|
-
}, [createElementVNode("iframe", {
|
|
410
|
-
ref_key: "bridgeEl",
|
|
411
|
-
ref: bridgeEl,
|
|
412
|
-
class: "docs-playground-local__bridge",
|
|
413
|
-
tabindex: "-1",
|
|
414
|
-
"aria-hidden": "true",
|
|
415
|
-
title: "",
|
|
416
|
-
srcdoc: unref(bridgeSrcdoc),
|
|
417
|
-
onLoad: handleBridgeLoad
|
|
418
|
-
}, null, 40, _hoisted_1), createElementVNode("div", {
|
|
419
|
-
ref_key: "mountEl",
|
|
420
|
-
ref: mountEl,
|
|
421
|
-
class: "docs-playground-local__mount"
|
|
422
|
-
}, null, 512)], 512);
|
|
423
|
-
};
|
|
424
|
-
}
|
|
425
|
-
});
|
|
426
|
-
//#endregion
|
|
427
|
-
//#region packages/playground/src/core/runtime/local/local-sandbox.vue
|
|
428
|
-
var local_sandbox_exports = /* @__PURE__ */ __exportAll({ default: () => local_sandbox_default });
|
|
429
|
-
var local_sandbox_default = local_sandbox_vue_vue_type_script_setup_true_lang_default;
|
|
430
|
-
//#endregion
|
|
431
|
-
export { local_sandbox_default as default, collectCss as n, local_sandbox_exports as t };
|