@melt-js/demo-vue2 0.0.0-stage → 2026.11.7

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 CHANGED
@@ -1,3 +1,107 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
1
+ # @melt-js/demo-vue2
2
+
3
+ Vue 2 的 hel 宿主(消费方)示例:`preFetchLib` 从 unpkg 加载 [`@melt-js/comps-vue2`](../comps-vue2),页面里同时直接复用 `tpl-vue2-admin-ele` 的本地源码,并用 `preFetchLib` 演示 [`@melt-js/libs-utils`](../libs-utils) / [`@melt-js/libs-lodash`](../libs-lodash) 两个远程库的方法。
4
+
5
+ 本包由 [`demo-vue2-ele`](../demo-vue2-ele) 拷贝而来,只把消费的远程组件换成 `comps-vue2`、端口改为 `30040`,页面结构与示例保持不变。
6
+
7
+ 页面使用 **vue-router(hash 模式)** 把示例拆成六个可切换的页面,顶部导航栏同时显示当前示例的简介,示例区右上角有**全屏按钮**(只放大当前示例的组件预览区,基于 `vue-fullscreen` 的 `pageOnly + teleport` 模式)。
8
+
9
+ | 项 | 值 |
10
+ | --- | --- |
11
+ | npm 包名 | `@melt-js/demo-vue2` |
12
+ | unpkg 入口 | `https://unpkg.com/@melt-js/demo-vue2/dist/index.html` |
13
+ | 端口 | `30040` |
14
+ | 消费的远程组件 | `comps-vue2`(`https://unpkg.com/@melt-js/comps-vue2/hel_dist/hel-meta.json`) |
15
+ | 消费的远程库 | `libs-utils`、`libs-lodash`(线上同样指向 unpkg 的 `hel-meta.json`) |
16
+ | 路由 | `vue-router@3.6.5`,hash 模式 |
17
+ | 全屏 | `vue-fullscreen@4.1.2`(legacy),`pageOnly` + `teleport`(不调用浏览器原生全屏) |
18
+
19
+ ## 示例路由
20
+
21
+ | 路由 | 导航文案 | 内容 |
22
+ | --- | --- | --- |
23
+ | `#/` | 简介 | demo 概览:远程依赖、端口、远端地址与示例入口 |
24
+ | `#/remote-comp` | 远程组件 | `comps-vue2` 的 `App`(内部再依赖 `HelloWorld`),红色边框区域内渲染 |
25
+ | `#/ranking` | 排行榜 | `comps-vue2` 的 `TierRanking` 排行榜:拖拽排序、上传图片、评级编辑、IndexedDB 持久化、导出图片 |
26
+ | `#/butterfly` | 蝴蝶 3D | `comps-vue2` 的 `Butterflies3d`:CSS 3D 天空盒 + 七只蝴蝶的扇翅 / 飘动 / 绕圈动画,`paused` / `speed` 可控制 |
27
+ | `#/libs` | 远程 libs | `libs-utils` / `libs-lodash` 的调用结果 |
28
+ | `#/tpl-comp` | tpl 源码 | 通过 workspace 链接直接复用 `tpl-vue2-admin-ele` 的 `Hamburger` |
29
+
30
+ 约定:
31
+
32
+ - **hash 模式**:demo 的构建产物会通过 unpkg 上的 `dist/index.html` 打开,history 模式在那种静态文件路径下会 404。
33
+ - 路由清单在 `src/router/index.js`,每条路由的 `meta.title` / `meta.description` 同时驱动导航栏 tab 与下方那行简介;新增示例只要加一条路由。
34
+ - 全屏按钮只把当前示例标记为 `data-demo-preview` 的组件预览区送进全屏,页面标题、简介、说明与页脚都留在屏幕外;全屏借用 `vue-fullscreen` 4.x legacy 的 `pageOnly + teleport` 模式:预览区临时挂到 body、用 fixed 铺满视口,退出时还原到页面原位置,不调用浏览器原生 Fullscreen API(iframe 内也可用)。预览区右下角提供「退出全屏」浮层按钮,Esc 也可退出;切换路由时会自动退出并还原。
35
+ - 需要全屏的示例在组件预览区外包一层 `<demo-preview>`;简介页没有预览区,在路由 `meta` 里标记 `fullscreen: false`,工具栏不显示全屏按钮。
36
+
37
+ ## 文件结构
38
+
39
+ ```
40
+ demo-vue2/src
41
+ ├── App.vue # demo 外壳:导航栏 + 示例舞台(含全屏按钮)+ router-view
42
+ ├── components/
43
+ │ ├── DemoNavbar.vue # 顶部导航栏:示例 tab + 当前示例简介
44
+ │ ├── DemoPreview.vue # 组件预览区:全屏目标 + 「退出全屏」浮层按钮
45
+ │ └── ScreenfullButton.vue # 示例区全屏按钮(无 UI 组件库依赖)
46
+ ├── configs/app.js # demo 展示信息(名称 / 端口 / 远端地址 / 仓库链接)
47
+ ├── router/index.js # 示例路由(hash 模式)
48
+ ├── styles/ # base.css(变量与重置)+ demo-shell.css(外壳样式)
49
+ ├── views/ # OverviewView / RemoteCompView / RankingView / ButterflyView / LibsView / TplCompView
50
+ └── libs/remoteLibs.js # 两个远程 libs 的预加载(Promise 复用)
51
+ ```
52
+
53
+ ## 关键流程
54
+
55
+ 1. `src/main.js`:`bindVueRuntime({ Vue })` 把宿主 vue 挂到 `window.Vue`,远程组件 external 的 `vue` 会复用这一份。
56
+ 2. `src/main.js`:`preFetchLib('comps-vue2', { custom: { host } })` 预加载远程组件;hel 组名(`comps-vue2`)与 scoped npm 包名(`@melt-js/comps-vue2`)解耦,因此用 `custom.host` 指向 unpkg 上的 `hel_dist/hel-meta.json`。`host` 按 `process.env.NODE_ENV` 分支:生产走 unpkg,开发走 `http://localhost:20040`。
57
+ 3. `src/main.js` + `src/libs/remoteLibs.js`:入口处和远程组件一起并行预加载两个远程库(`loadRemoteLibs()` 内部是 `Promise.all` + `preFetchLib`,重复调用复用同一个 Promise)。页面里直接调用它们的方法展示结果:
58
+ - `libs-utils`:`num.canBeNum` / `num.random`、`regs.en` / `regs.enSnake`、`myMod.sayHelloToHel`
59
+ - `libs-lodash`:`chunk` / `uniq` / `camelCase` / `orderBy`、`myUtils.regs.enOrNum`、`VERSION`
60
+
61
+ 两个库都不在宿主的 `package.json` 依赖里(lodash 也没有安装),全部来自远程产物。host 同样按环境切换:生产指向 unpkg 的 `hel-meta.json`,开发指向各自 dev server(`http://localhost:10010` / `http://localhost:10020`),并用 `skipFetchHelMeta` 跳过 dev server 上不存在的 `hel-meta.json`、直接解析 `index.html` 里的入口脚本。
62
+ 4. `src/router/index.js`:`#/libs` 路由的组件工厂先 `await loadRemoteLibs()`(复用入口预加载的同一个 Promise,通常已 resolve),再动态 `import` 示例组件,组件内直接读 `getRemoteLibs()` 的已加载结果;其余示例同样按路由懒加载。
63
+ 5. `src/App.vue`:导航栏 + 示例舞台;示例舞台持有 `router-view` 与全屏按钮,`ScreenfullButton` 的目标是当前页面 `DemoPreview` 渲染的 `[data-demo-preview]`。
64
+ 6. `src/views/RemoteCompView.vue` / `RankingView.vue` / `ButterflyView.vue`:渲染远程组件 `comps.App` / `comps.TierRanking` / `comps.Butterflies3d`(静态导入只拿到 hel-lib-proxy 的空壳代理,真正的组件代码由入口的 `preFetchLib` 载入)。
65
+
66
+ ## 排行榜远程组件(TierRanking)
67
+
68
+ - 组件源码在 [`comps-vue2/src/components/TierRanking`](../comps-vue2/src/components/TierRanking),由 `src/components/index.js` 与 `libProperties` 一起导出,宿主只需 `preFetchLib` 后挂载,不打包它的代码与样式。
69
+ - 组件能力:拖拽排序 / 跨评级拖动 / 拖到删除区删除、上传图片(自动压缩)、评级改名 / 改色 / 增删、显示图片名、固定评级高度、导出图片(按需加载 html2canvas)、IndexedDB 持久化(`persist` / `storageKey` 可关可换)。
70
+ - 本地联调:`pnpm comps-vue2:dev`(20040)的产物直接可用,打开 <http://localhost:30040/#/ranking>。
71
+ - 线上:远端 `hel-meta.json` 会同时下发排行榜所在的 chunk(webpack 把组件拆成了独立 chunk),因此生产构建(远端走 unpkg)同样能渲染 `#/ranking`;只有远端版本早于排行榜组件时,页面才会显示「远端产物没有导出 TierRanking」的提示。
72
+ - 排行榜状态存在 IndexedDB(库名 `tier-ranking-db`,`storageKey=demo-vue2-ranking`),用组件自带的「重置排行榜」即可恢复默认评级。
73
+
74
+ ## 3D 蝴蝶远程组件(Butterflies3d)
75
+
76
+ - 组件源码在 [`comps-vue2/src/components/Butterflies3d`](../comps-vue2/src/components/Butterflies3d),抽取自一个 CodePen 的 SVG 3D 蝴蝶 demo;原始 HTML / CSS 放在该目录的 `source/`。
77
+ - 组件能力:CSS 3D 天空盒 + 七只蝴蝶的公转 / 飘动 / 扇翅动画,纯 CSS 关键帧驱动;`paused` 暂停、`speed` 倍速、`butterflies` 逐只调整参数、`wingTexture` 换翅膀纹理。组件不修改宿主 `body`,自己裁剪场景,放在任意高度的容器里即可。
78
+ - 本地联调:`pnpm comps-vue2:dev`(20040)直接可用,打开 <http://localhost:30040/#/butterfly>;页面上的「暂停动画」「0.5× / 1× / 2×」分别演示 `paused` 与 `speed` 两个 prop。
79
+ - 线上:远端 `hel-meta.json` 会带上蝴蝶组件所在的 JS / CSS 产物,生产构建(远端走 unpkg)同样可渲染;只有远端版本早于该组件时,页面才显示「远端产物没有导出 Butterflies3d」的提示。
80
+ - 全屏按钮只放大 `Butterflies3d` 的舞台(`<demo-preview>` 内),暂停 / 倍速控件和说明文字留在舞台外。
81
+
82
+ ## 本地开发
83
+
84
+ ```bash
85
+ # 终端 1:起远程组件(20040)
86
+ pnpm comps-vue2:dev
87
+
88
+ # 终端 2、3:起两个远程库(10010 / 10020,页面上的 libs 演示区需要)
89
+ pnpm libs-utils:dev
90
+ pnpm libs-lodash:dev
91
+
92
+ # 终端 4:起宿主(30040)
93
+ pnpm demo-vue2:dev
94
+ ```
95
+
96
+ 打开 <http://localhost:30040> 。libs 的预加载在入口处 `Promise.all` 里,和远程组件一起完成,所以三个 dev server 都要先起好;缺任意一个都会在控制台打印 `loadApp err`,页面不会挂载。
97
+
98
+ ## 构建 / 发布
99
+
100
+ ```bash
101
+ pnpm demo-vue2:build # 产出 dist/
102
+ pnpm --filter @melt-js/demo-vue2 run publish:stage # build → npm stage 暂存,等待 2FA 审批
103
+ ```
104
+
105
+ - `vue.config.js` 在生产构建时使用相对 `publicPath`,发布后 unpkg 上的 `dist/index.html` 可直接加载同目录资源;hash 路由同样可用。
106
+ - `process.env.NODE_ENV` 由 vue-cli 静态注入,生产包里只会保留 unpkg 的地址;线上从 unpkg 加载 libs 的前提是 `@melt-js/libs-utils` / `@melt-js/libs-lodash` 已发布。
107
+ - `files` 白名单只发布 `dist/` 与 README。
@@ -0,0 +1 @@
1
+ .ranking-shell[data-v-695b4bdb]{overflow:hidden;border-radius:12px;border:1px solid var(--demo-border)}.ranking-preview.is-demo-fullscreen[data-v-695b4bdb]{padding:0;background:#1a1a1a}.ranking-preview.is-demo-fullscreen .ranking-shell[data-v-695b4bdb]{min-height:100%;border:0;border-radius:0}
@@ -0,0 +1 @@
1
+ .remote-box[data-v-cba10148]{padding:20px;border:2px solid #e74c3c;border-radius:12px;background:#fff8f7}.remote-box__title[data-v-cba10148]{margin:0;color:#c0392b;font-size:14px;font-weight:600}.remote-preview.is-demo-fullscreen[data-v-cba10148]{display:flex;padding:24px;background:#fff8f7}.remote-preview.is-demo-fullscreen .remote-box[data-v-cba10148]{width:100%;max-width:1100px;margin:auto}
@@ -0,0 +1 @@
1
+ .butterfly-controls[data-v-aa2aa1f8]{display:flex;flex-wrap:wrap;gap:12px 16px;align-items:center}.butterfly-speed[data-v-aa2aa1f8]{display:inline-flex;padding:3px;border:1px solid var(--demo-border);border-radius:999px;background:var(--demo-surface-alt)}.butterfly-speed__btn[data-v-aa2aa1f8]{padding:6px 12px;border:0;border-radius:999px;background:transparent;color:var(--demo-muted);font-family:inherit;font-size:12px;font-weight:600;line-height:1;cursor:pointer;transition:color .2s,background-color .2s}.butterfly-speed__btn[data-v-aa2aa1f8]:hover{color:var(--demo-accent)}.butterfly-speed__btn.is-active[data-v-aa2aa1f8]{background:var(--demo-surface);box-shadow:0 1px 2px rgba(16,24,40,.12);color:var(--demo-accent)}.butterfly-controls__hint[data-v-aa2aa1f8]{color:var(--demo-muted);font-size:12px}.butterfly-stage[data-v-aa2aa1f8]{height:560px;overflow:hidden;border:1px solid var(--demo-border);border-radius:12px;background:#0b1220}.demo-preview.butterfly-preview.is-demo-fullscreen[data-v-aa2aa1f8]{padding:0;background:#0b1220}.demo-preview.butterfly-preview.is-demo-fullscreen .butterfly-stage[data-v-aa2aa1f8]{height:100%;border:0;border-radius:0}@media (max-width:720px){.butterfly-stage[data-v-aa2aa1f8]{height:420px}.butterfly-controls__hint[data-v-aa2aa1f8]{display:none}}
@@ -0,0 +1 @@
1
+ .libs-preview[data-v-cc75e042]{display:flex;flex-direction:column;gap:16px}.libs-preview.is-demo-fullscreen[data-v-cc75e042]{padding:24px;background:var(--demo-bg)}.libs-panels[data-v-cc75e042]{display:flex;flex-wrap:wrap;gap:16px}.libs-panel[data-v-cc75e042]{flex:1 1 320px;min-width:0;padding:14px 16px;border:1px solid var(--demo-border);border-radius:12px;background:var(--demo-surface-alt)}.libs-panel__title[data-v-cc75e042]{margin:0 0 8px;color:var(--demo-text);font-size:14px}.libs-panel__group[data-v-cc75e042]{margin-left:8px;padding:2px 6px;border-radius:6px;background:#f0f2f5;color:#c7254e;font-size:12px;font-weight:400;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.libs-table[data-v-cc75e042]{width:100%;border-collapse:collapse;font-size:13px}.libs-table tr+tr[data-v-cc75e042]{border-top:1px solid var(--demo-border)}.libs-table td[data-v-cc75e042]{padding:6px 0;vertical-align:top}.libs-table__code[data-v-cc75e042]{width:60%;padding-right:8px;overflow-wrap:anywhere}.libs-table__code code[data-v-cc75e042]{padding:2px 6px;border-radius:4px;background:#f0f2f5;color:#c7254e;font-size:12.5px}.libs-table__value[data-v-cc75e042]{color:var(--demo-text);font-weight:600;overflow-wrap:anywhere}
@@ -0,0 +1 @@
1
+ :root{color-scheme:light;--demo-accent:#42b983;--demo-accent-soft:rgba(66,185,131,0.1);--demo-accent-border:#b7e4cd;--demo-text:#1f2933;--demo-muted:#64748b;--demo-border:#e5e7eb;--demo-bg:#f5f7fa;--demo-surface:#fff;--demo-surface-alt:#fafbfc}html{-webkit-text-size-adjust:100%}body{margin:0;min-width:320px;min-height:100vh;background:var(--demo-bg);color:var(--demo-text);font-family:system-ui,-apple-system,Segoe UI,Avenir,Helvetica,Arial,sans-serif;line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{color:var(--demo-accent)}img{max-width:100%}html body{display:block;text-align:start}html #app{width:100%;max-width:none;margin:0;padding:0;text-align:start}*,:after,:before{box-sizing:border-box}.demo-app{display:flex;flex-direction:column;min-height:100vh}.demo-navbar{position:sticky;top:0;z-index:30;border-bottom:1px solid var(--demo-border);background:hsla(0,0%,100%,.92);backdrop-filter:blur(12px)}.demo-navbar__inner{display:flex;flex-wrap:wrap;gap:14px 28px;align-items:center;justify-content:space-between;width:100%;max-width:1180px;margin:0 auto;padding:14px 24px 10px}.demo-navbar__brand{display:flex;align-items:center;gap:12px;min-width:0}.demo-navbar__badge{flex:none;padding:5px 10px;border-radius:999px;background:var(--demo-accent-soft);color:var(--demo-accent);font-size:12px;font-weight:700;letter-spacing:.04em;line-height:1.2}.demo-navbar__title{margin:0;color:var(--demo-text);font-size:16px;font-weight:700;line-height:1.3}.demo-navbar__sub{margin:2px 0 0;color:var(--demo-muted);font-size:12px;line-height:1.4}.demo-navbar__nav{display:flex;flex-wrap:wrap;gap:6px}.demo-nav__link{padding:7px 14px;border:1px solid transparent;border-radius:999px;color:var(--demo-muted);font-size:13px;font-weight:600;text-decoration:none;transition:color .2s,background-color .2s,border-color .2s}.demo-nav__link.is-active,.demo-nav__link:hover{background:var(--demo-accent-soft);color:var(--demo-accent)}.demo-nav__link.is-active{border-color:var(--demo-accent-border)}.demo-navbar__intro{display:flex;align-items:center;gap:10px;width:100%;max-width:1180px;margin:0 auto;padding:0 24px 12px;color:var(--demo-muted);font-size:12.5px;line-height:1.5}.demo-navbar__intro-tag{flex:none;padding:2px 8px;border:1px solid var(--demo-border);border-radius:999px;background:var(--demo-surface);color:var(--demo-text);font-size:11px;font-weight:600;line-height:1.6}.demo-navbar__intro-text{min-width:0;margin:0}.demo-stage{flex:1 0 auto;width:100%;max-width:1180px;margin:0 auto;padding:20px 24px 40px}.demo-stage__toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.demo-stage__hint{color:var(--demo-muted);font-size:12px;font-weight:600;letter-spacing:.08em}.demo-stage__hint em{color:var(--demo-accent);font-style:normal}.demo-stage__page{padding:28px 32px;border:1px solid var(--demo-border);border-radius:16px;background:var(--demo-surface);box-shadow:0 1px 2px rgba(16,24,40,.04),0 12px 32px -24px rgba(16,24,40,.35)}.demo-preview{position:relative;min-width:0}.demo-preview.is-demo-fullscreen{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2147482000;width:100%;height:100%;margin:0;padding:24px;overflow:auto;overscroll-behavior:contain;background:var(--demo-bg)}.demo-preview__exit{display:none}.demo-preview.is-demo-fullscreen .demo-preview__exit{position:fixed;right:20px;bottom:20px;z-index:2147483000;display:inline-flex;gap:6px;align-items:center;padding:8px 14px;border:1px solid var(--demo-border);border-radius:999px;background:hsla(0,0%,100%,.94);box-shadow:0 8px 24px rgba(16,24,40,.18);color:var(--demo-text);font-family:inherit;font-size:13px;font-weight:600;line-height:1;cursor:pointer;backdrop-filter:blur(8px);-webkit-tap-highlight-color:transparent}.demo-preview__exit:hover{border-color:var(--demo-accent-border);background:var(--demo-surface);color:var(--demo-accent)}.demo-preview__exit:focus-visible{outline:2px solid var(--demo-accent);outline-offset:2px}.demo-preview__exit-icon{flex:none;width:15px;height:15px}.screenfull-btn{display:inline-flex;flex:none;gap:6px;align-items:center;padding:7px 14px;border:1px solid var(--demo-border);border-radius:999px;background:var(--demo-surface);color:var(--demo-text);font-family:inherit;font-size:13px;font-weight:600;line-height:1;cursor:pointer;transition:color .2s,background-color .2s,border-color .2s;-webkit-tap-highlight-color:transparent}.screenfull-btn:hover{border-color:var(--demo-accent-border);background:var(--demo-accent-soft);color:var(--demo-accent)}.screenfull-btn:focus-visible{outline:2px solid var(--demo-accent);outline-offset:2px}.screenfull-btn.is-fullscreen{border-color:var(--demo-accent-border);background:var(--demo-accent-soft);color:var(--demo-accent)}.screenfull-btn.is-disabled{cursor:not-allowed;opacity:.5}.screenfull-btn__icon{flex:none;width:15px;height:15px}.demo-footer{display:flex;flex-wrap:wrap;gap:10px 20px;align-items:center;justify-content:space-between;width:100%;max-width:1180px;margin:0 auto;padding:16px 24px 28px;color:var(--demo-muted);font-size:12px}.demo-footer a{color:var(--demo-accent);text-decoration:none}.demo-footer a:hover{text-decoration:underline}.demo-page{display:flex;flex-direction:column;gap:22px}.demo-page__eyebrow{margin:0 0 8px;color:var(--demo-accent);font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}.demo-page__title{margin:0 0 12px;color:var(--demo-text);font-size:26px;line-height:1.25}.demo-page__lead{max-width:72ch;margin:0;color:var(--demo-muted);font-size:14px;line-height:1.8}.demo-page__section-title{margin:0 0 12px;color:var(--demo-text);font-size:16px}.demo-code,.demo-page code{padding:2px 6px;border-radius:6px;background:#f0f2f5;color:#c7254e;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px}.demo-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:14px}.demo-card{padding:16px 18px;border:1px solid var(--demo-border);border-radius:12px;background:var(--demo-surface-alt)}.demo-card__title{margin:0 0 6px;color:var(--demo-text);font-size:14px}.demo-card__text{margin:0;color:var(--demo-muted);font-size:13px;line-height:1.7}.demo-card--link{display:block;color:inherit;text-decoration:none;transition:border-color .2s,background-color .2s,transform .2s}.demo-card--link:hover{border-color:var(--demo-accent-border);background:var(--demo-accent-soft);transform:translateY(-1px)}.demo-card__action{display:inline-block;margin-top:8px;color:var(--demo-accent);font-size:12px;font-weight:600}.demo-table{width:100%;border-collapse:collapse;font-size:13px}.demo-table td,.demo-table th{padding:9px 12px;border-bottom:1px solid var(--demo-border);text-align:left;vertical-align:top}.demo-table tr:last-child td,.demo-table tr:last-child th{border-bottom:0}.demo-table th{width:32%;color:var(--demo-muted);font-weight:600;white-space:nowrap}.demo-table td{color:var(--demo-text);overflow-wrap:anywhere}.demo-table td>div+div{margin-top:4px}.demo-note{display:flex;gap:10px;margin:0;padding:12px 16px;border-left:3px solid var(--demo-accent);border-radius:0 10px 10px 0;background:var(--demo-accent-soft);color:var(--demo-text);font-size:13px;line-height:1.7}.demo-btn{display:inline-flex;gap:6px;align-items:center;padding:9px 18px;border:1px solid var(--demo-accent);border-radius:8px;background:var(--demo-accent);color:#fff;font-family:inherit;font-size:14px;font-weight:600;line-height:1.4;cursor:pointer;transition:filter .2s,transform .2s}.demo-btn:hover{filter:brightness(1.06)}.demo-btn:active{transform:translateY(1px)}.demo-btn--ghost{background:transparent;color:var(--demo-accent)}.demo-links{display:flex;flex-wrap:wrap;gap:10px}.demo-links a{padding:8px 14px;border:1px solid var(--demo-border);border-radius:8px;background:var(--demo-surface);color:var(--demo-text);font-size:13px;text-decoration:none;transition:color .2s,background-color .2s,border-color .2s}.demo-links a:hover{border-color:var(--demo-accent-border);color:var(--demo-accent)}.demo-links a:hover,.demo-remote{background:var(--demo-accent-soft)}.demo-remote{padding:18px;border:2px dashed var(--demo-accent-border);border-radius:12px}.demo-fade-enter-active,.demo-fade-leave-active{transition:opacity .18s ease,transform .18s ease}.demo-fade-enter,.demo-fade-enter-from,.demo-fade-leave-to{opacity:0;transform:translateY(4px)}@media (max-width:720px){.demo-footer,.demo-navbar__inner,.demo-navbar__intro,.demo-stage{padding-right:16px;padding-left:16px}.demo-stage__page{padding:20px 18px}.demo-page__title{font-size:22px}.demo-preview__exit-text,.screenfull-btn__text{display:none}}
@@ -0,0 +1 @@
1
+ .svg-icon[data-v-1395a76c]{width:1em;height:1em;vertical-align:-.15em;fill:currentColor;overflow:hidden}.svg-external-icon[data-v-1395a76c]{background-color:currentColor;-webkit-mask-size:cover!important;mask-size:cover!important;display:inline-block}.hamburger[data-v-349d62b0]{display:inline-block;vertical-align:middle;width:20px;height:20px}.hamburger.is-active[data-v-349d62b0]{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.screenfull-btn[data-v-287b0b20]{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin:0;padding:0;border:0;background:transparent;color:inherit;font:inherit;line-height:1;cursor:pointer;outline:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-transition:background-color .3s;transition:background-color .3s}.screenfull-btn[data-v-287b0b20]:hover{background:rgba(0,0,0,.025)}.screenfull-btn[data-v-287b0b20]:focus-visible{outline:2px solid #409eff;outline-offset:-2px}.screenfull-btn.is-disabled[data-v-287b0b20]{cursor:not-allowed;opacity:.4}.screenfull-icon[data-v-287b0b20]{-webkit-box-flex:0;-ms-flex:none;flex:none;width:20px;height:20px}.screenfull-text[data-v-287b0b20]{margin-left:6px;font-size:14px;line-height:1;white-space:nowrap}.demo-card__text code[data-v-129f5b93]{padding:2px 6px;border-radius:6px;background:#f0f2f5;color:#c7254e;font-size:12.5px}.tpl-hamburger[data-v-129f5b93]{display:flex;gap:12px;align-items:center;margin-top:12px}.tpl-hamburger__btn[data-v-129f5b93]{display:inline-flex;align-items:center;justify-content:center;padding:6px;border:1px solid var(--demo-border);border-radius:8px;background:var(--demo-surface);color:var(--demo-text);cursor:pointer}.tpl-hamburger__btn[data-v-129f5b93]:hover{border-color:var(--demo-accent-border);background:var(--demo-accent-soft);color:var(--demo-accent)}.tpl-preview.is-demo-fullscreen[data-v-129f5b93]{display:flex;align-items:center;justify-content:center;background:var(--demo-surface)}.tpl-preview.is-demo-fullscreen .tpl-hamburger[data-v-129f5b93]{gap:16px;margin-top:0;padding:28px 36px;border:1px solid var(--demo-border);border-radius:16px;background:var(--demo-surface-alt);box-shadow:0 12px 32px -24px rgba(16,24,40,.35)}
Binary file
@@ -0,0 +1 @@
1
+ <!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>@melt-js/demo-vue2</title><script src="https://cdn.staticfile.org/vue/2.7.16/vue.min.js"></script><link href="css/chunk-0d7d93f4.58c32c0d.css" rel="prefetch"><link href="css/chunk-5bd3b03a.0a3b895e.css" rel="prefetch"><link href="css/chunk-70591058.602a4fbd.css" rel="prefetch"><link href="css/chunk-7962e576.acc02aa5.css" rel="prefetch"><link href="css/chunk-7a0c737c.32814fbd.css" rel="prefetch"><link href="css/chunk-83847dde.25b9a5b8.css" rel="prefetch"><link href="js/chunk-0d7d93f4.5b879380.js" rel="prefetch"><link href="js/chunk-2d221fe7.04713cdf.js" rel="prefetch"><link href="js/chunk-5bd3b03a.43d62d68.js" rel="prefetch"><link href="js/chunk-70591058.90a25ef0.js" rel="prefetch"><link href="js/chunk-7962e576.1ca7789d.js" rel="prefetch"><link href="js/chunk-7a0c737c.0feac8ff.js" rel="prefetch"><link href="js/chunk-83847dde.e5add923.js" rel="prefetch"><link href="js/app.c3a75c32.js" rel="preload" as="script"><link href="js/chunk-vendors.043cff34.js" rel="preload" as="script"></head><body><noscript><strong>We're sorry but @melt-js/demo-vue2 doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="js/chunk-vendors.043cff34.js"></script><script src="js/app.c3a75c32.js"></script></body></html>
@@ -0,0 +1,2 @@
1
+ (function(e){function t(t){for(var r,o,a=t[0],s=t[1],l=t[2],i=0,d=[];i<a.length;i++)o=a[i],Object.prototype.hasOwnProperty.call(c,o)&&c[o]&&d.push(c[o][0]),c[o]=0;for(r in s)Object.prototype.hasOwnProperty.call(s,r)&&(e[r]=s[r]);h&&h(t);while(d.length)d.shift()();return u.push.apply(u,l||[]),n()}function n(){for(var e,t=0;t<u.length;t++){for(var n=u[t],r=!0,o=1;o<n.length;o++){var a=n[o];0!==c[a]&&(r=!1)}r&&(u.splice(t--,1),e=s(s.s=n[0]))}return e}var r={},o={app:0},c={app:0},u=[];function a(e){return s.p+"js/"+({}[e]||e)+"."+{"chunk-7a0c737c":"0feac8ff","chunk-0d7d93f4":"5b879380","chunk-2d221fe7":"04713cdf","chunk-5bd3b03a":"43d62d68","chunk-70591058":"90a25ef0","chunk-7962e576":"1ca7789d","chunk-83847dde":"e5add923"}[e]+".js"}function s(t){if(r[t])return r[t].exports;var n=r[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,s),n.l=!0,n.exports}s.e=function(e){var t=[],n={"chunk-7a0c737c":1,"chunk-0d7d93f4":1,"chunk-5bd3b03a":1,"chunk-70591058":1,"chunk-7962e576":1,"chunk-83847dde":1};o[e]?t.push(o[e]):0!==o[e]&&n[e]&&t.push(o[e]=new Promise((function(t,n){for(var r="css/"+({}[e]||e)+"."+{"chunk-7a0c737c":"32814fbd","chunk-0d7d93f4":"58c32c0d","chunk-2d221fe7":"31d6cfe0","chunk-5bd3b03a":"0a3b895e","chunk-70591058":"602a4fbd","chunk-7962e576":"acc02aa5","chunk-83847dde":"25b9a5b8"}[e]+".css",c=s.p+r,u=document.getElementsByTagName("link"),a=0;a<u.length;a++){var l=u[a],i=l.getAttribute("data-href")||l.getAttribute("href");if("stylesheet"===l.rel&&(i===r||i===c))return t()}var d=document.getElementsByTagName("style");for(a=0;a<d.length;a++){l=d[a],i=l.getAttribute("data-href");if(i===r||i===c)return t()}var h=document.createElement("link");h.rel="stylesheet",h.type="text/css",h.onload=t,h.onerror=function(t){var r=t&&t.target&&t.target.src||c,u=new Error("Loading CSS chunk "+e+" failed.\n("+r+")");u.code="CSS_CHUNK_LOAD_FAILED",u.request=r,delete o[e],h.parentNode.removeChild(h),n(u)},h.href=c;var f=document.getElementsByTagName("head")[0];f.appendChild(h)})).then((function(){o[e]=0})));var r=c[e];if(0!==r)if(r)t.push(r[2]);else{var u=new Promise((function(t,n){r=c[e]=[t,n]}));t.push(r[2]=u);var l,i=document.createElement("script");i.charset="utf-8",i.timeout=120,s.nc&&i.setAttribute("nonce",s.nc),i.src=a(e);var d=new Error;l=function(t){i.onerror=i.onload=null,clearTimeout(h);var n=c[e];if(0!==n){if(n){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;d.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",d.name="ChunkLoadError",d.type=r,d.request=o,n[1](d)}c[e]=void 0}};var h=setTimeout((function(){l({type:"timeout",target:i})}),12e4);i.onerror=i.onload=l,document.head.appendChild(i)}return Promise.all(t)},s.m=e,s.c=r,s.d=function(e,t,n){s.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},s.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(s.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)s.d(n,r,function(t){return e[t]}.bind(null,r));return n},s.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return s.d(t,"a",t),t},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.p="",s.oe=function(e){throw console.error(e),e};var l=window["webpackJsonp"]=window["webpackJsonp"]||[],i=l.push.bind(l);l.push=t,l=l.slice();for(var d=0;d<l.length;d++)t(l[d]);var h=i;u.push([0,"chunk-vendors"]),n()})({0:function(e,t,n){e.exports=n("56d7")},"56d7":function(e,t,n){"use strict";n.r(t);var r=n("3964"),o=n("8bbf"),c=n.n(o),u=n("58c8"),a=n("cb87");c.a.use(u["a"]),Object(r["a"])({Vue:c()}),async function(){const e=!0,t=e?"https://unpkg.com/@melt-js/comps-vue2/hel_dist/hel-meta.json":"http://localhost:20040";await Promise.all([Object(r["b"])("comps-vue2",{custom:{host:t,skipFetchHelMeta:!t.endsWith("hel-meta.json")}}),Object(a["c"])()]),await n.e("chunk-7a0c737c").then(n.bind(null,"a581"))}().catch(e=>{console.error("loadApp err: ",e)})},"8bbf":function(e,t){e.exports=Vue},cb87:function(e,t,n){"use strict";n.d(t,"a",(function(){return u})),n.d(t,"c",(function(){return i})),n.d(t,"b",(function(){return d}));var r=n("3964");const o=[{name:"libs-utils",npmName:"@melt-js/libs-utils",devPort:10010},{name:"libs-lodash",npmName:"@melt-js/libs-lodash",devPort:10020}],c=!0,u=c?"production:从 unpkg 上的 hel-meta.json 加载":"development:从本地 dev server 加载(10010 / 10020)";function a({npmName:e,devPort:t}){return c?{host:`https://unpkg.com/${e}/hel_dist/hel-meta.json`}:{host:"http://localhost:"+t,skipFetchHelMeta:!0}}let s=null,l=null;function i(){return s||(s=Promise.all(o.map(e=>{const t=a(e);return console.log(`[demo-vue2] preFetchLib('${e.name}') from ${t.host}`),Object(r["b"])(e.name,{custom:t})})).then(([e,t])=>(l={libsUtils:e,libsLodash:t},l))),s}function d(){return l}}});
2
+ //# sourceMappingURL=app.c3a75c32.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/main.js","webpack:///external \"Vue\"","webpack:///./src/libs/remoteLibs.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","Vue","use","VueFullscreen","bindVueRuntime","isProd","process","host","preFetchLib","custom","skipFetchHelMeta","endsWith","loadRemoteLibs","catch","REMOTE_LIBS","npmName","devPort","ENV_LABEL","getCustom","remoteLibsPromise","remoteLibs","map","item","log","libsUtils","libsLodash","getRemoteLibs"],"mappings":"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","file":"js/app.c3a75c32.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-7a0c737c\":\"0feac8ff\",\"chunk-0d7d93f4\":\"5b879380\",\"chunk-2d221fe7\":\"04713cdf\",\"chunk-5bd3b03a\":\"43d62d68\",\"chunk-70591058\":\"90a25ef0\",\"chunk-7962e576\":\"1ca7789d\",\"chunk-83847dde\":\"e5add923\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"chunk-7a0c737c\":1,\"chunk-0d7d93f4\":1,\"chunk-5bd3b03a\":1,\"chunk-70591058\":1,\"chunk-7962e576\":1,\"chunk-83847dde\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-7a0c737c\":\"32814fbd\",\"chunk-0d7d93f4\":\"58c32c0d\",\"chunk-2d221fe7\":\"31d6cfe0\",\"chunk-5bd3b03a\":\"0a3b895e\",\"chunk-70591058\":\"602a4fbd\",\"chunk-7962e576\":\"acc02aa5\",\"chunk-83847dde\":\"25b9a5b8\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","/* eslint-disable */\r\nimport { preFetchLib, bindVueRuntime } from 'hel-micro';\r\nimport Vue from 'vue';\r\nimport VueFullscreen from 'vue-fullscreen';\r\nimport { loadRemoteLibs } from './libs/remoteLibs';\r\n\r\n// vue-fullscreen 4.x 是 Vue 2 的 legacy 版本:注册 <fullscreen> / v-fullscreen / $fullscreen\r\nVue.use(VueFullscreen);\r\n\r\nbindVueRuntime({ Vue });\r\n\r\n(async function () {\r\n // comps 的 hel 组名是 comps-vue2,npm 包名是 @melt-js/comps-vue2,两者不一致,\r\n // 所以这里用组名调用 preFetchLib,并把 custom.host 指向该包的产物\r\n // (hel-micro 的 name 参数同时是包名和组名,只有 custom 模式能把两者分开)\r\n // - 生产:unpkg 上该包的 hel-meta.json\r\n // - 开发:pnpm comps-vue2:dev 起的 20040 端口(web-dev-server 实时生成的产物,没有 hel-meta.json)\r\n const isProd = process.env.NODE_ENV === 'production';\r\n const host = isProd\r\n ? 'https://unpkg.com/@melt-js/comps-vue2/hel_dist/hel-meta.json'\r\n : 'http://localhost:20040';\r\n\r\n // 入口处统一预加载:远程组件 + 两个远程 libs(libs 的预加载逻辑在 libs/remoteLibs.js)\r\n await Promise.all([\r\n preFetchLib('comps-vue2', {\r\n custom: {\r\n host,\r\n // dev server 没有 hel-meta.json,直接解析远端 index.html\r\n skipFetchHelMeta: !host.endsWith('hel-meta.json'),\r\n },\r\n }),\r\n loadRemoteLibs(),\r\n ]);\r\n\r\n await import('./loadApp');\r\n})().catch(err => {\r\n console.error('loadApp err: ', err);\r\n});\r\n","module.exports = Vue;","/* eslint-disable */\r\nimport { preFetchLib } from 'hel-micro';\r\n\r\n/**\r\n * 两个远程 libs 包\r\n * - name:hel 组名(appGroupName / LIB_NAME),preFetchLib 用它加载\r\n * - npmName:scoped npm 包名,只用于拼 unpkg 上的 hel-meta.json 地址\r\n * - devPort:本地 dev server 端口,登记见仓库根目录 ports.json(libs = 100xx)\r\n */\r\nconst REMOTE_LIBS = [\r\n { name: 'libs-utils', npmName: '@melt-js/libs-utils', devPort: 10010 },\r\n { name: 'libs-lodash', npmName: '@melt-js/libs-lodash', devPort: 10020 },\r\n];\r\n\r\nexport const isProd = process.env.NODE_ENV === 'production';\r\n\r\nexport const ENV_LABEL = isProd\r\n ? 'production:从 unpkg 上的 hel-meta.json 加载'\r\n : 'development:从本地 dev server 加载(10010 / 10020)';\r\n\r\n/**\r\n * 按环境生成 custom 配置\r\n * - 生产:unpkg 上的 hel-meta.json(前提是这些包已发布到 npm)\r\n * - 开发:libs 各自的 vite dev server。dev server 没有 hel-meta.json,\r\n * 用 skipFetchHelMeta 跳过该请求,直接解析 index.html 里的入口脚本\r\n */\r\nfunction getCustom({ npmName, devPort }) {\r\n if (isProd) {\r\n return { host: `https://unpkg.com/${npmName}/hel_dist/hel-meta.json` };\r\n }\r\n\r\n return {\r\n host: `http://localhost:${devPort}`,\r\n skipFetchHelMeta: true,\r\n };\r\n}\r\n\r\nlet remoteLibsPromise = null;\r\nlet remoteLibs = null;\r\n\r\n/**\r\n * 入口处(main.js)调用一次,并行加载两个远程库;\r\n * 重复调用复用同一个 Promise,异步组件里 await 它即可。\r\n * resolve 值:\r\n * - libsUtils:{ regs, num, myMod }\r\n * - libsLodash:{ ...lodash, myUtils }\r\n */\r\nexport function loadRemoteLibs() {\r\n if (!remoteLibsPromise) {\r\n remoteLibsPromise = Promise.all(\r\n REMOTE_LIBS.map(item => {\r\n const custom = getCustom(item);\r\n console.log(`[demo-vue2] preFetchLib('${item.name}') from ${custom.host}`);\r\n return preFetchLib(item.name, { custom });\r\n }),\r\n ).then(([libsUtils, libsLodash]) => {\r\n remoteLibs = { libsUtils, libsLodash };\r\n return remoteLibs;\r\n });\r\n }\r\n\r\n return remoteLibsPromise;\r\n}\r\n\r\n/** 已加载完成的远程库(入口处 await 过 loadRemoteLibs 后才有值) */\r\nexport function getRemoteLibs() {\r\n return remoteLibs;\r\n}\r\n"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-0d7d93f4"],{"27b8":function(e,t,a){"use strict";a("4565")},4565:function(e,t,a){},"8d6b":function(e,t,a){"use strict";a.d(t,"a",(function(){return i}));var n=a("fc8e");const s="comps-vue2";var i=Object(n["exposeLib"])(s)},"9b61":function(e,t,a){"use strict";a.r(t);var n=function(){var e=this,t=e._self._c;return t("div",{staticClass:"demo-page"},[e._m(0),e.rankingComp?t("demo-preview",{staticClass:"ranking-preview"},[t("div",{staticClass:"ranking-shell"},[t(e.rankingComp,{tag:"component",attrs:{"storage-key":"demo-vue2-ranking"}})],1)]):t("p",{staticClass:"demo-note"},[e._v(" 当前远端产物没有导出 "),t("code",[e._v("TierRanking")]),e._v("(远端版本可能早于排行榜组件)。 本地联调请先执行 "),t("code",[e._v("pnpm comps-vue2:dev")]),e._v("(20040),或发布包含排行榜的新版 comps-vue2 后再看线上效果。 ")]),e._m(1),t("div",{staticClass:"demo-links"},[t("a",{attrs:{href:"https://github.com/hel-eco/hel-tpl-remote-vue-comp",target:"_blank",rel:"noopener"}},[e._v(" 远程组件仓库 ")]),t("router-link",{attrs:{to:"/remote-comp"}},[e._v("对比普通远程组件示例 →")])],1)],1)},s=[function(){var e=this,t=e._self._c;return t("header",[t("p",{staticClass:"demo-page__eyebrow"},[e._v("远程组件 · 排行榜")]),t("h1",{staticClass:"demo-page__title"},[e._v("TierRanking 从夯到拉排行榜")]),t("p",{staticClass:"demo-page__lead"},[e._v(" 排行榜也是 comps-vue2 暴露的远程组件("),t("code",[e._v("TierRanking")]),e._v("): 组件代码与样式都随远端产物下发,宿主只负责挂载。支持拖拽排序、跨评级拖动、 上传图片(自动压缩)、评级改名 / 改色 / 增删,状态默认存 IndexedDB、刷新不丢。 排行榜比较占地方,建议先点右上角「全屏」再玩。 ")])])},function(){var e=this,t=e._self._c;return t("p",{staticClass:"demo-note"},[e._v(" 状态存在 IndexedDB(库名 "),t("code",[e._v("tier-ranking-db")]),e._v("),用组件自带的 「重置排行榜」可恢复默认评级;导出图片时组件会按需从 CDN 加载 html2canvas。 组件内已经包含上传、拖拽、删除等交互,宿主不需要再写任何逻辑。 ")])}],i=a("8d6b"),o=a("afbc"),r={name:"RankingView",components:{DemoPreview:o["a"]},computed:{rankingComp(){return i["a"].TierRanking}}},c=r,l=(a("27b8"),a("a6c2")),u=Object(l["a"])(c,n,s,!1,null,"695b4bdb",null);t["default"]=u.exports},afbc:function(e,t,a){"use strict";var n=function(){var e=this,t=e._self._c;return t("div",{staticClass:"demo-preview",attrs:{"data-demo-preview":""}},[t("button",{staticClass:"demo-preview__exit",attrs:{type:"button",title:"退出全屏(Esc)","aria-label":"退出全屏"},on:{click:function(t){return t.stopPropagation(),e.exitFullscreen.apply(null,arguments)}}},[t("svg",{staticClass:"demo-preview__exit-icon",attrs:{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true",focusable:"false"}},[t("path",{attrs:{d:"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3"}})]),t("span",{staticClass:"demo-preview__exit-text"},[e._v("退出全屏")])]),e._t("default")],2)},s=[],i={name:"DemoPreview",methods:{exitFullscreen(){this.$fullscreen.exit().catch(e=>{console.warn("[Fullscreen] Failed to exit fullscreen:",e)})}}},o=i,r=a("a6c2"),c=Object(r["a"])(o,n,s,!1,null,null,null);t["a"]=c.exports}}]);
2
+ //# sourceMappingURL=chunk-0d7d93f4.5b879380.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack:///./src/views/RankingView.vue?0065","webpack:///../comps-vue2/hel_proxy_es/entry.js","webpack:///./src/views/RankingView.vue","webpack:///src/views/RankingView.vue","webpack:///./src/views/RankingView.vue?8bf5","webpack:///./src/views/RankingView.vue?693a","webpack:///./src/components/DemoPreview.vue","webpack:///src/components/DemoPreview.vue","webpack:///./src/components/DemoPreview.vue?f524","webpack:///./src/components/DemoPreview.vue?7d16"],"names":["LIB_NAME","dtlib","exposeLib","render","_vm","this","_c","_self","staticClass","_m","rankingComp","tag","attrs","_v","staticRenderFns","name","components","DemoPreview","computed","comps","TierRanking","component","on","$event","stopPropagation","exitFullscreen","apply","arguments","_t","methods","$fullscreen","exit","catch","error","console","warn"],"mappings":"kHAAA,W,2DCAA,kDAUA,MAAMA,EAAW,aAejB,IAAIC,EAAQC,uBAAUF,I,2CCzBtB,IAAIG,EAAS,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,MAAM,CAACE,YAAY,aAAa,CAACJ,EAAIK,GAAG,GAAIL,EAAIM,YAAaJ,EAAG,eAAe,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,iBAAiB,CAACF,EAAGF,EAAIM,YAAY,CAACC,IAAI,YAAYC,MAAM,CAAC,cAAc,wBAAwB,KAAKN,EAAG,IAAI,CAACE,YAAY,aAAa,CAACJ,EAAIS,GAAG,gBAAgBP,EAAG,OAAO,CAACF,EAAIS,GAAG,iBAAiBT,EAAIS,GAAG,8BAA8BP,EAAG,OAAO,CAACF,EAAIS,GAAG,yBAAyBT,EAAIS,GAAG,8CAA8CT,EAAIK,GAAG,GAAGH,EAAG,MAAM,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACM,MAAM,CAAC,KAAO,qDAAqD,OAAS,SAAS,IAAM,aAAa,CAACR,EAAIS,GAAG,cAAcP,EAAG,cAAc,CAACM,MAAM,CAAC,GAAK,iBAAiB,CAACR,EAAIS,GAAG,mBAAmB,IAAI,IAEpxBC,EAAkB,CAAC,WAAY,IAAIV,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,SAAS,CAACA,EAAG,IAAI,CAACE,YAAY,sBAAsB,CAACJ,EAAIS,GAAG,gBAAgBP,EAAG,KAAK,CAACE,YAAY,oBAAoB,CAACJ,EAAIS,GAAG,yBAAyBP,EAAG,IAAI,CAACE,YAAY,mBAAmB,CAACJ,EAAIS,GAAG,8BAA8BP,EAAG,OAAO,CAACF,EAAIS,GAAG,iBAAiBT,EAAIS,GAAG,0HACrV,WAAY,IAAIT,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,IAAI,CAACE,YAAY,aAAa,CAACJ,EAAIS,GAAG,uBAAuBP,EAAG,OAAO,CAACF,EAAIS,GAAG,qBAAqBT,EAAIS,GAAG,gG,wBC4CjJ,GACfE,KAAA,cACAC,WAAA,CACAC,oBAEAC,SAAA,CAEAR,cACA,OAAAS,OAAAC,eCvDsY,I,wBCQlYC,EAAY,eACd,EACAlB,EACAW,GACA,EACA,KACA,WACA,MAIa,aAAAO,E,2CCnBf,IAAIlB,EAAS,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,MAAM,CAACE,YAAY,eAAeI,MAAM,CAAC,oBAAoB,KAAK,CAACN,EAAG,SAAS,CAACE,YAAY,qBAAqBI,MAAM,CAAC,KAAO,SAAS,MAAQ,YAAY,aAAa,QAAQU,GAAG,CAAC,MAAQ,SAASC,GAAiC,OAAzBA,EAAOC,kBAAyBpB,EAAIqB,eAAeC,MAAM,KAAMC,cAAc,CAACrB,EAAG,MAAM,CAACE,YAAY,0BAA0BI,MAAM,CAAC,QAAU,YAAY,KAAO,OAAO,OAAS,eAAe,eAAe,IAAI,iBAAiB,QAAQ,kBAAkB,QAAQ,cAAc,OAAO,UAAY,UAAU,CAACN,EAAG,OAAO,CAACM,MAAM,CAAC,EAAI,qGAAqGN,EAAG,OAAO,CAACE,YAAY,2BAA2B,CAACJ,EAAIS,GAAG,YAAYT,EAAIwB,GAAG,YAAY,IAEvxBd,EAAkB,GCoCP,GACfC,KAAA,cACAc,QAAA,CACAJ,iBACA,KAAAK,YAAAC,OAAAC,MAAAC,IACAC,QAAAC,KAAA,0CAAAF,QC3CsY,I,YCOlYZ,EAAY,eACd,EACAlB,EACAW,GACA,EACA,KACA,KACA,MAIa,OAAAO,E","file":"js/chunk-0d7d93f4.5b879380.js","sourcesContent":["export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RankingView.vue?vue&type=style&index=0&id=695b4bdb&prod&scoped=true&lang=css\"","import { exposeLib } from 'hel-lib-proxy';\n\n/*\r\n|--------------------------------------------------------------------------\r\n|\r\n| 对应 package.json/appGroupName\r\n|\r\n|--------------------------------------------------------------------------\r\n*/\r\n\r\nconst LIB_NAME = 'comps-vue2';\n\n/*\r\n|--------------------------------------------------------------------------\r\n|\r\n| 组件类型导出文件,同时也作为 rollup 的打包入口文件,因只提供类型,rollup 打包后是一个\r\n| 仅包含 hel-lib-proxy 的空壳文件,对模块使用方的包体构建大小无影响\r\n| 模块使用方 通过 npm i xxx-lib 后,只要在头文件处执行过 preFetchLib\r\n| 则整个项目项使用本地模块一样载入提供方的组件,并可以点击到 node_modules 查看源码\r\n|\r\n|--------------------------------------------------------------------------\r\n*/\r\n/**\r\n * 将提供给用户的lib暴露出去(同时也暴露了类型)\r\n */\r\nvar dtlib = exposeLib(LIB_NAME);\n\nexport { dtlib as default, dtlib };\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"demo-page\"},[_vm._m(0),(_vm.rankingComp)?_c('demo-preview',{staticClass:\"ranking-preview\"},[_c('div',{staticClass:\"ranking-shell\"},[_c(_vm.rankingComp,{tag:\"component\",attrs:{\"storage-key\":\"demo-vue2-ranking\"}})],1)]):_c('p',{staticClass:\"demo-note\"},[_vm._v(\" 当前远端产物没有导出 \"),_c('code',[_vm._v(\"TierRanking\")]),_vm._v(\"(远端版本可能早于排行榜组件)。 本地联调请先执行 \"),_c('code',[_vm._v(\"pnpm comps-vue2:dev\")]),_vm._v(\"(20040),或发布包含排行榜的新版 comps-vue2 后再看线上效果。 \")]),_vm._m(1),_c('div',{staticClass:\"demo-links\"},[_c('a',{attrs:{\"href\":\"https://github.com/hel-eco/hel-tpl-remote-vue-comp\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\" 远程组件仓库 \")]),_c('router-link',{attrs:{\"to\":\"/remote-comp\"}},[_vm._v(\"对比普通远程组件示例 →\")])],1)],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('header',[_c('p',{staticClass:\"demo-page__eyebrow\"},[_vm._v(\"远程组件 · 排行榜\")]),_c('h1',{staticClass:\"demo-page__title\"},[_vm._v(\"TierRanking 从夯到拉排行榜\")]),_c('p',{staticClass:\"demo-page__lead\"},[_vm._v(\" 排行榜也是 comps-vue2 暴露的远程组件(\"),_c('code',[_vm._v(\"TierRanking\")]),_vm._v(\"): 组件代码与样式都随远端产物下发,宿主只负责挂载。支持拖拽排序、跨评级拖动、 上传图片(自动压缩)、评级改名 / 改色 / 增删,状态默认存 IndexedDB、刷新不丢。 排行榜比较占地方,建议先点右上角「全屏」再玩。 \")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('p',{staticClass:\"demo-note\"},[_vm._v(\" 状态存在 IndexedDB(库名 \"),_c('code',[_vm._v(\"tier-ranking-db\")]),_vm._v(\"),用组件自带的 「重置排行榜」可恢复默认评级;导出图片时组件会按需从 CDN 加载 html2canvas。 组件内已经包含上传、拖拽、删除等交互,宿主不需要再写任何逻辑。 \")])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n <div class=\"demo-page\">\r\n <header>\r\n <p class=\"demo-page__eyebrow\">远程组件 · 排行榜</p>\r\n <h1 class=\"demo-page__title\">TierRanking 从夯到拉排行榜</h1>\r\n <p class=\"demo-page__lead\">\r\n 排行榜也是 comps-vue2 暴露的远程组件(<code>TierRanking</code>):\r\n 组件代码与样式都随远端产物下发,宿主只负责挂载。支持拖拽排序、跨评级拖动、\r\n 上传图片(自动压缩)、评级改名 / 改色 / 增删,状态默认存 IndexedDB、刷新不丢。\r\n 排行榜比较占地方,建议先点右上角「全屏」再玩。\r\n </p>\r\n </header>\r\n\r\n <demo-preview v-if=\"rankingComp\" class=\"ranking-preview\">\r\n <div class=\"ranking-shell\">\r\n <component :is=\"rankingComp\" storage-key=\"demo-vue2-ranking\" />\r\n </div>\r\n </demo-preview>\r\n\r\n <p v-else class=\"demo-note\">\r\n 当前远端产物没有导出 <code>TierRanking</code>(远端版本可能早于排行榜组件)。\r\n 本地联调请先执行 <code>pnpm comps-vue2:dev</code>(20040),或发布包含排行榜的新版\r\n comps-vue2 后再看线上效果。\r\n </p>\r\n\r\n <p class=\"demo-note\">\r\n 状态存在 IndexedDB(库名 <code>tier-ranking-db</code>),用组件自带的\r\n 「重置排行榜」可恢复默认评级;导出图片时组件会按需从 CDN 加载 html2canvas。\r\n 组件内已经包含上传、拖拽、删除等交互,宿主不需要再写任何逻辑。\r\n </p>\r\n\r\n <div class=\"demo-links\">\r\n <a href=\"https://github.com/hel-eco/hel-tpl-remote-vue-comp\" target=\"_blank\" rel=\"noopener\">\r\n 远程组件仓库\r\n </a>\r\n <router-link to=\"/remote-comp\">对比普通远程组件示例 →</router-link>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\n/* eslint-disable */\r\n// comps 的 hel 组名是 comps-vue2,静态导入只拿到代理壳,\r\n// 真正的 TierRanking 由 main.js 里的 preFetchLib 从远端载入\r\nimport comps from '@melt-js/comps-vue2';\r\nimport DemoPreview from '../components/DemoPreview.vue';\r\n\r\nexport default {\r\n name: 'RankingView',\r\n components: {\r\n DemoPreview,\r\n },\r\n computed: {\r\n // 远端产物版本较旧时可能没有 TierRanking,这里取到 undefined 就展示提示\r\n rankingComp() {\r\n return comps.TierRanking;\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.ranking-shell {\r\n overflow: hidden;\r\n border-radius: 12px;\r\n border: 1px solid var(--demo-border);\r\n}\r\n\r\n/* 全屏时让排行榜铺满屏幕,黑色背景与组件自身配色连续 */\r\n.ranking-preview.is-demo-fullscreen {\r\n padding: 0;\r\n background: #1a1a1a;\r\n}\r\n\r\n.ranking-preview.is-demo-fullscreen .ranking-shell {\r\n min-height: 100%;\r\n border: 0;\r\n border-radius: 0;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RankingView.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RankingView.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./RankingView.vue?vue&type=template&id=695b4bdb&scoped=true\"\nimport script from \"./RankingView.vue?vue&type=script&lang=js\"\nexport * from \"./RankingView.vue?vue&type=script&lang=js\"\nimport style0 from \"./RankingView.vue?vue&type=style&index=0&id=695b4bdb&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"695b4bdb\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"demo-preview\",attrs:{\"data-demo-preview\":\"\"}},[_c('button',{staticClass:\"demo-preview__exit\",attrs:{\"type\":\"button\",\"title\":\"退出全屏(Esc)\",\"aria-label\":\"退出全屏\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.exitFullscreen.apply(null, arguments)}}},[_c('svg',{staticClass:\"demo-preview__exit-icon\",attrs:{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"stroke-width\":\"2\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",\"aria-hidden\":\"true\",\"focusable\":\"false\"}},[_c('path',{attrs:{\"d\":\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3\"}})]),_c('span',{staticClass:\"demo-preview__exit-text\"},[_vm._v(\"退出全屏\")])]),_vm._t(\"default\")],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div class=\"demo-preview\" data-demo-preview>\r\n <button\r\n type=\"button\"\r\n class=\"demo-preview__exit\"\r\n title=\"退出全屏(Esc)\"\r\n aria-label=\"退出全屏\"\r\n @click.stop=\"exitFullscreen\"\r\n >\r\n <svg\r\n class=\"demo-preview__exit-icon\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n aria-hidden=\"true\"\r\n focusable=\"false\"\r\n >\r\n <path\r\n d=\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3\"\r\n />\r\n </svg>\r\n <span class=\"demo-preview__exit-text\">退出全屏</span>\r\n </button>\r\n <slot />\r\n </div>\r\n</template>\r\n\r\n<script>\r\n/**\r\n * 组件预览区:全屏按钮的唯一目标。\r\n *\r\n * 普通模式下它只是页面里的一个普通容器;进入全屏后由 vue-fullscreen 给根节点\r\n * 加上 is-demo-fullscreen 类,只保留插槽里的组件内容,页面标题、简介、说明与\r\n * 页脚都不会进入全屏。右下角的「退出全屏」按钮也只在全屏时出现。\r\n */\r\nexport default {\r\n name: 'DemoPreview',\r\n methods: {\r\n exitFullscreen() {\r\n this.$fullscreen.exit().catch(error => {\r\n console.warn('[Fullscreen] Failed to exit fullscreen:', error)\r\n })\r\n }\r\n }\r\n}\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DemoPreview.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DemoPreview.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./DemoPreview.vue?vue&type=template&id=538ff717\"\nimport script from \"./DemoPreview.vue?vue&type=script&lang=js\"\nexport * from \"./DemoPreview.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d221fe7"],{cd5e:function(e,t,a){"use strict";a.r(t);var _=function(){var e=this,t=e._self._c;return t("div",{staticClass:"demo-page"},[t("header",[t("p",{staticClass:"demo-page__eyebrow"},[e._v("Vue 2 · hel 宿主")]),t("h1",{staticClass:"demo-page__title"},[e._v(e._s(e.meta.name)+" 简介")]),e._m(0)]),t("table",{staticClass:"demo-table"},[t("tbody",[e._m(1),t("tr",[t("th",[e._v("unpkg 入口")]),t("td",[t("a",{attrs:{href:e.meta.unpkgEntry,target:"_blank",rel:"noopener"}},[e._v(e._s(e.meta.unpkgEntry))])])]),t("tr",[t("th",[e._v("本地端口")]),t("td",[e._v(e._s(e.meta.port))])]),t("tr",[t("th",[e._v("远程组件")]),t("td",[t("div",[t("code",[e._v(e._s(e.meta.remote.name))])]),t("div",[e._v("开发:"),t("code",[e._v(e._s(e.meta.remote.dev))])]),t("div",[e._v("生产:"),t("code",[e._v(e._s(e.meta.remote.prod))])])])]),e._m(2),t("tr",[t("th",[e._v("远程库")]),t("td",e._l(e.meta.libs,(function(a){return t("div",{key:a.name},[t("code",[e._v(e._s(a.name))]),e._v(" · "),t("code",[e._v(e._s(a.dev))])])})),0)]),e._m(3)])]),t("section",[t("h2",{staticClass:"demo-page__section-title"},[e._v("示例导航")]),t("div",{staticClass:"demo-grid"},e._l(e.examples,(function(a){return t("router-link",{key:a.path,staticClass:"demo-card demo-card--link",attrs:{to:a.path}},[t("h3",{staticClass:"demo-card__title"},[e._v(e._s(a.meta.title))]),t("p",{staticClass:"demo-card__text"},[e._v(e._s(a.meta.description))]),t("span",{staticClass:"demo-card__action"},[e._v("进入示例 →")])])})),1)]),e._m(4),t("div",{staticClass:"demo-links"},[e._l(e.meta.repos,(function(a){return t("a",{key:a.url,attrs:{href:a.url,target:"_blank",rel:"noopener"}},[e._v(" "+e._s(a.label)+" ")])})),t("a",{attrs:{href:e.meta.unpkgEntry,target:"_blank",rel:"noopener"}},[e._v("unpkg 线上入口")])],2)])},s=[function(){var e=this,t=e._self._c;return t("p",{staticClass:"demo-page__lead"},[e._v(" Vue 2 的 hel 宿主(消费方)示例:入口处用 "),t("code",[e._v("preFetchLib")]),e._v(" 预加载远程组件 "),t("code",[e._v("comps-vue2")]),e._v(" 与两个远程库,页面同时直接复用 tpl-vue2-admin-ele 的本地源码。顶部导航栏用于切换示例,示例页右上角的「全屏」按钮 只把组件预览区放大到全屏,简介与说明文字不会进入全屏。 ")])},function(){var e=this,t=e._self._c;return t("tr",[t("th",[e._v("npm 包名")]),t("td",[t("code",[e._v("@melt-js/demo-vue2")])])])},function(){var e=this,t=e._self._c;return t("tr",[t("th",[e._v("远端导出")]),t("td",[e._v(" 组件:"),t("code",[e._v("App")]),e._v("、"),t("code",[e._v("HelloWorld")]),e._v("、"),t("code",[e._v("TierRanking")]),e._v("(排行榜)、 "),t("code",[e._v("Butterflies3d")]),e._v("(3D 蝴蝶) ")])])},function(){var e=this,t=e._self._c;return t("tr",[t("th",[e._v("路由模式")]),t("td",[e._v(" hash("),t("code",[e._v("#/remote-comp")]),e._v("),保证从 unpkg 的 "),t("code",[e._v("dist/index.html")]),e._v(" 直接打开也能切换示例 ")])])},function(){var e=this,t=e._self._c;return t("p",{staticClass:"demo-note"},[e._v(" 本地开发先起远程产物:"),t("code",[e._v("pnpm comps-vue2:dev")]),e._v("(20040)、 "),t("code",[e._v("pnpm libs-utils:dev")]),e._v("(10010)、"),t("code",[e._v("pnpm libs-lodash:dev")]),e._v("(10020), 再执行 "),t("code",[e._v("pnpm demo-vue2:dev")]),e._v(" 打开 http://localhost:30040。 ")])}],r=(a("58ff"),a("a33d"),a("31fd")),v=a("a18c"),n={name:"OverviewView",data(){return{meta:r["a"],examples:v["b"].filter(e=>e.name&&"overview"!==e.name)}}},o=n,d=a("a6c2"),c=Object(d["a"])(o,_,s,!1,null,null,null);t["default"]=c.exports}}]);
2
+ //# sourceMappingURL=chunk-2d221fe7.04713cdf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack:///./src/views/OverviewView.vue","webpack:///src/views/OverviewView.vue","webpack:///./src/views/OverviewView.vue?0a98","webpack:///./src/views/OverviewView.vue?c85b"],"names":["render","_vm","this","_c","_self","staticClass","_v","_s","meta","name","_m","attrs","unpkgEntry","port","remote","dev","prod","_l","libs","lib","key","examples","item","path","title","description","repos","repo","url","label","staticRenderFns","data","APP_META","demoRoutes","filter","route","component"],"mappings":"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","file":"js/chunk-2d221fe7.04713cdf.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"demo-page\"},[_c('header',[_c('p',{staticClass:\"demo-page__eyebrow\"},[_vm._v(\"Vue 2 · hel 宿主\")]),_c('h1',{staticClass:\"demo-page__title\"},[_vm._v(_vm._s(_vm.meta.name)+\" 简介\")]),_vm._m(0)]),_c('table',{staticClass:\"demo-table\"},[_c('tbody',[_vm._m(1),_c('tr',[_c('th',[_vm._v(\"unpkg 入口\")]),_c('td',[_c('a',{attrs:{\"href\":_vm.meta.unpkgEntry,\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(_vm._s(_vm.meta.unpkgEntry))])])]),_c('tr',[_c('th',[_vm._v(\"本地端口\")]),_c('td',[_vm._v(_vm._s(_vm.meta.port))])]),_c('tr',[_c('th',[_vm._v(\"远程组件\")]),_c('td',[_c('div',[_c('code',[_vm._v(_vm._s(_vm.meta.remote.name))])]),_c('div',[_vm._v(\"开发:\"),_c('code',[_vm._v(_vm._s(_vm.meta.remote.dev))])]),_c('div',[_vm._v(\"生产:\"),_c('code',[_vm._v(_vm._s(_vm.meta.remote.prod))])])])]),_vm._m(2),_c('tr',[_c('th',[_vm._v(\"远程库\")]),_c('td',_vm._l((_vm.meta.libs),function(lib){return _c('div',{key:lib.name},[_c('code',[_vm._v(_vm._s(lib.name))]),_vm._v(\" · \"),_c('code',[_vm._v(_vm._s(lib.dev))])])}),0)]),_vm._m(3)])]),_c('section',[_c('h2',{staticClass:\"demo-page__section-title\"},[_vm._v(\"示例导航\")]),_c('div',{staticClass:\"demo-grid\"},_vm._l((_vm.examples),function(item){return _c('router-link',{key:item.path,staticClass:\"demo-card demo-card--link\",attrs:{\"to\":item.path}},[_c('h3',{staticClass:\"demo-card__title\"},[_vm._v(_vm._s(item.meta.title))]),_c('p',{staticClass:\"demo-card__text\"},[_vm._v(_vm._s(item.meta.description))]),_c('span',{staticClass:\"demo-card__action\"},[_vm._v(\"进入示例 →\")])])}),1)]),_vm._m(4),_c('div',{staticClass:\"demo-links\"},[_vm._l((_vm.meta.repos),function(repo){return _c('a',{key:repo.url,attrs:{\"href\":repo.url,\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\" \"+_vm._s(repo.label)+\" \")])}),_c('a',{attrs:{\"href\":_vm.meta.unpkgEntry,\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"unpkg 线上入口\")])],2)])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('p',{staticClass:\"demo-page__lead\"},[_vm._v(\" Vue 2 的 hel 宿主(消费方)示例:入口处用 \"),_c('code',[_vm._v(\"preFetchLib\")]),_vm._v(\" 预加载远程组件 \"),_c('code',[_vm._v(\"comps-vue2\")]),_vm._v(\" 与两个远程库,页面同时直接复用 tpl-vue2-admin-ele 的本地源码。顶部导航栏用于切换示例,示例页右上角的「全屏」按钮 只把组件预览区放大到全屏,简介与说明文字不会进入全屏。 \")])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('th',[_vm._v(\"npm 包名\")]),_c('td',[_c('code',[_vm._v(\"@melt-js/demo-vue2\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('th',[_vm._v(\"远端导出\")]),_c('td',[_vm._v(\" 组件:\"),_c('code',[_vm._v(\"App\")]),_vm._v(\"、\"),_c('code',[_vm._v(\"HelloWorld\")]),_vm._v(\"、\"),_c('code',[_vm._v(\"TierRanking\")]),_vm._v(\"(排行榜)、 \"),_c('code',[_vm._v(\"Butterflies3d\")]),_vm._v(\"(3D 蝴蝶) \")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('tr',[_c('th',[_vm._v(\"路由模式\")]),_c('td',[_vm._v(\" hash(\"),_c('code',[_vm._v(\"#/remote-comp\")]),_vm._v(\"),保证从 unpkg 的 \"),_c('code',[_vm._v(\"dist/index.html\")]),_vm._v(\" 直接打开也能切换示例 \")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('p',{staticClass:\"demo-note\"},[_vm._v(\" 本地开发先起远程产物:\"),_c('code',[_vm._v(\"pnpm comps-vue2:dev\")]),_vm._v(\"(20040)、 \"),_c('code',[_vm._v(\"pnpm libs-utils:dev\")]),_vm._v(\"(10010)、\"),_c('code',[_vm._v(\"pnpm libs-lodash:dev\")]),_vm._v(\"(10020), 再执行 \"),_c('code',[_vm._v(\"pnpm demo-vue2:dev\")]),_vm._v(\" 打开 http://localhost:30040。 \")])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n <div class=\"demo-page\">\r\n <header>\r\n <p class=\"demo-page__eyebrow\">Vue 2 · hel 宿主</p>\r\n <h1 class=\"demo-page__title\">{{ meta.name }} 简介</h1>\r\n <p class=\"demo-page__lead\">\r\n Vue 2 的 hel 宿主(消费方)示例:入口处用\r\n <code>preFetchLib</code> 预加载远程组件 <code>comps-vue2</code> 与两个远程库,页面同时直接复用\r\n tpl-vue2-admin-ele 的本地源码。顶部导航栏用于切换示例,示例页右上角的「全屏」按钮\r\n 只把组件预览区放大到全屏,简介与说明文字不会进入全屏。\r\n </p>\r\n </header>\r\n\r\n <table class=\"demo-table\">\r\n <tbody>\r\n <tr>\r\n <th>npm 包名</th>\r\n <td><code>@melt-js/demo-vue2</code></td>\r\n </tr>\r\n <tr>\r\n <th>unpkg 入口</th>\r\n <td>\r\n <a :href=\"meta.unpkgEntry\" target=\"_blank\" rel=\"noopener\">{{ meta.unpkgEntry }}</a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <th>本地端口</th>\r\n <td>{{ meta.port }}</td>\r\n </tr>\r\n <tr>\r\n <th>远程组件</th>\r\n <td>\r\n <div><code>{{ meta.remote.name }}</code></div>\r\n <div>开发:<code>{{ meta.remote.dev }}</code></div>\r\n <div>生产:<code>{{ meta.remote.prod }}</code></div>\r\n </td>\r\n </tr>\r\n <tr>\r\n <th>远端导出</th>\r\n <td>\r\n 组件:<code>App</code>、<code>HelloWorld</code>、<code>TierRanking</code>(排行榜)、\r\n <code>Butterflies3d</code>(3D 蝴蝶)\r\n </td>\r\n </tr>\r\n <tr>\r\n <th>远程库</th>\r\n <td>\r\n <div v-for=\"lib in meta.libs\" :key=\"lib.name\">\r\n <code>{{ lib.name }}</code> · <code>{{ lib.dev }}</code>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr>\r\n <th>路由模式</th>\r\n <td>\r\n hash(<code>#/remote-comp</code>),保证从 unpkg 的 <code>dist/index.html</code>\r\n 直接打开也能切换示例\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <section>\r\n <h2 class=\"demo-page__section-title\">示例导航</h2>\r\n <div class=\"demo-grid\">\r\n <router-link\r\n v-for=\"item in examples\"\r\n :key=\"item.path\"\r\n :to=\"item.path\"\r\n class=\"demo-card demo-card--link\"\r\n >\r\n <h3 class=\"demo-card__title\">{{ item.meta.title }}</h3>\r\n <p class=\"demo-card__text\">{{ item.meta.description }}</p>\r\n <span class=\"demo-card__action\">进入示例 →</span>\r\n </router-link>\r\n </div>\r\n </section>\r\n\r\n <p class=\"demo-note\">\r\n 本地开发先起远程产物:<code>pnpm comps-vue2:dev</code>(20040)、\r\n <code>pnpm libs-utils:dev</code>(10010)、<code>pnpm libs-lodash:dev</code>(10020),\r\n 再执行 <code>pnpm demo-vue2:dev</code> 打开 http://localhost:30040。\r\n </p>\r\n\r\n <div class=\"demo-links\">\r\n <a\r\n v-for=\"repo in meta.repos\"\r\n :key=\"repo.url\"\r\n :href=\"repo.url\"\r\n target=\"_blank\"\r\n rel=\"noopener\"\r\n >\r\n {{ repo.label }}\r\n </a>\r\n <a :href=\"meta.unpkgEntry\" target=\"_blank\" rel=\"noopener\">unpkg 线上入口</a>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { APP_META } from '../configs/app'\r\nimport { demoRoutes } from '../router'\r\n\r\nexport default {\r\n name: 'OverviewView',\r\n data() {\r\n return {\r\n meta: APP_META,\r\n // 简介页也列出其余示例,方便直接跳转\r\n examples: demoRoutes.filter(route => route.name && route.name !== 'overview')\r\n }\r\n }\r\n}\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OverviewView.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OverviewView.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./OverviewView.vue?vue&type=template&id=4d9233d0\"\nimport script from \"./OverviewView.vue?vue&type=script&lang=js\"\nexport * from \"./OverviewView.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-5bd3b03a"],{"1d56":function(e,t,s){"use strict";s.r(t);var o=function(){var e=this,t=e._self._c;return t("div",{staticClass:"demo-page"},[e._m(0),t("p",{staticClass:"remote-box__title"},[e._v("红色区域内是一个远程组件,该组件内部依赖了另一个远程组件")]),t("demo-preview",{staticClass:"remote-preview"},[t("div",{staticClass:"remote-box"},[t("remote-comp",{attrs:{msg:"Welcome to use hel remote vue comp"}})],1)]),e._m(1),t("div",{staticClass:"demo-links"},[t("a",{attrs:{href:"https://github.com/hel-eco/hel-tpl-remote-vue-comp",target:"_blank",rel:"noopener"}},[e._v(" 远程组件仓库 ")]),t("router-link",{attrs:{to:"/libs"}},[e._v("继续看远程 libs 示例 →")])],1)],1)},a=[function(){var e=this,t=e._self._c;return t("header",[t("p",{staticClass:"demo-page__eyebrow"},[e._v("远程组件")]),t("h1",{staticClass:"demo-page__title"},[e._v("comps-vue2 远程组件")]),t("p",{staticClass:"demo-page__lead"},[e._v(" 下面红色区域里的内容是 "),t("code",[e._v("preFetchLib('comps-vue2')")]),e._v(" 从远端拉取的组件, 它内部又依赖了另一个远程组件(HelloWorld);宿主产物里没有这些代码。 ")])])},function(){var e=this,t=e._self._c;return t("p",{staticClass:"demo-note"},[e._v(" 远端地址按环境切换:开发 "),t("code",[e._v("http://localhost:20040")]),e._v("(先执行 "),t("code",[e._v("pnpm comps-vue2:dev")]),e._v("),生产 "),t("code",[e._v("unpkg")]),e._v(" 上的 "),t("code",[e._v("hel-meta.json")]),e._v("。 ")])}],i=s("8d6b"),c=s("afbc"),r={name:"RemoteCompView",components:{DemoPreview:c["a"],RemoteComp:i["a"].App}},l=r,n=(s("6358"),s("a6c2")),u=Object(n["a"])(l,o,a,!1,null,"cba10148",null);t["default"]=u.exports},6358:function(e,t,s){"use strict";s("b3b5")},"8d6b":function(e,t,s){"use strict";s.d(t,"a",(function(){return i}));var o=s("fc8e");const a="comps-vue2";var i=Object(o["exposeLib"])(a)},afbc:function(e,t,s){"use strict";var o=function(){var e=this,t=e._self._c;return t("div",{staticClass:"demo-preview",attrs:{"data-demo-preview":""}},[t("button",{staticClass:"demo-preview__exit",attrs:{type:"button",title:"退出全屏(Esc)","aria-label":"退出全屏"},on:{click:function(t){return t.stopPropagation(),e.exitFullscreen.apply(null,arguments)}}},[t("svg",{staticClass:"demo-preview__exit-icon",attrs:{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true",focusable:"false"}},[t("path",{attrs:{d:"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3"}})]),t("span",{staticClass:"demo-preview__exit-text"},[e._v("退出全屏")])]),e._t("default")],2)},a=[],i={name:"DemoPreview",methods:{exitFullscreen(){this.$fullscreen.exit().catch(e=>{console.warn("[Fullscreen] Failed to exit fullscreen:",e)})}}},c=i,r=s("a6c2"),l=Object(r["a"])(c,o,a,!1,null,null,null);t["a"]=l.exports},b3b5:function(e,t,s){}}]);
2
+ //# sourceMappingURL=chunk-5bd3b03a.43d62d68.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack:///./src/views/RemoteCompView.vue","webpack:///src/views/RemoteCompView.vue","webpack:///./src/views/RemoteCompView.vue?6453","webpack:///./src/views/RemoteCompView.vue?b6e5","webpack:///./src/views/RemoteCompView.vue?7800","webpack:///../comps-vue2/hel_proxy_es/entry.js","webpack:///./src/components/DemoPreview.vue","webpack:///src/components/DemoPreview.vue","webpack:///./src/components/DemoPreview.vue?f524","webpack:///./src/components/DemoPreview.vue?7d16"],"names":["render","_vm","this","_c","_self","staticClass","_m","_v","attrs","staticRenderFns","name","components","DemoPreview","RemoteComp","comps","App","component","LIB_NAME","dtlib","exposeLib","on","$event","stopPropagation","exitFullscreen","apply","arguments","_t","methods","$fullscreen","exit","catch","error","console","warn"],"mappings":"yHAAA,IAAIA,EAAS,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,MAAM,CAACE,YAAY,aAAa,CAACJ,EAAIK,GAAG,GAAGH,EAAG,IAAI,CAACE,YAAY,qBAAqB,CAACJ,EAAIM,GAAG,kCAAkCJ,EAAG,eAAe,CAACE,YAAY,kBAAkB,CAACF,EAAG,MAAM,CAACE,YAAY,cAAc,CAACF,EAAG,cAAc,CAACK,MAAM,CAAC,IAAM,yCAAyC,KAAKP,EAAIK,GAAG,GAAGH,EAAG,MAAM,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACK,MAAM,CAAC,KAAO,qDAAqD,OAAS,SAAS,IAAM,aAAa,CAACP,EAAIM,GAAG,cAAcJ,EAAG,cAAc,CAACK,MAAM,CAAC,GAAK,UAAU,CAACP,EAAIM,GAAG,sBAAsB,IAAI,IAEnmBE,EAAkB,CAAC,WAAY,IAAIR,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,SAAS,CAACA,EAAG,IAAI,CAACE,YAAY,sBAAsB,CAACJ,EAAIM,GAAG,UAAUJ,EAAG,KAAK,CAACE,YAAY,oBAAoB,CAACJ,EAAIM,GAAG,qBAAqBJ,EAAG,IAAI,CAACE,YAAY,mBAAmB,CAACJ,EAAIM,GAAG,iBAAiBJ,EAAG,OAAO,CAACF,EAAIM,GAAG,+BAA+BN,EAAIM,GAAG,4DAC5U,WAAY,IAAIN,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,IAAI,CAACE,YAAY,aAAa,CAACJ,EAAIM,GAAG,kBAAkBJ,EAAG,OAAO,CAACF,EAAIM,GAAG,4BAA4BN,EAAIM,GAAG,SAASJ,EAAG,OAAO,CAACF,EAAIM,GAAG,yBAAyBN,EAAIM,GAAG,SAASJ,EAAG,OAAO,CAACF,EAAIM,GAAG,WAAWN,EAAIM,GAAG,QAAQJ,EAAG,OAAO,CAACF,EAAIM,GAAG,mBAAmBN,EAAIM,GAAG,U,wBCuC/S,GACfG,KAAA,iBACAC,WAAA,CACAC,mBACAC,WAAAC,OAAAC,MC9CyY,I,wBCQrYC,EAAY,eACd,EACAhB,EACAS,GACA,EACA,KACA,WACA,MAIa,aAAAO,E,2CCnBf,W,oCCAA,kDAUA,MAAMC,EAAW,aAejB,IAAIC,EAAQC,uBAAUF,I,kCCzBtB,IAAIjB,EAAS,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,MAAM,CAACE,YAAY,eAAeG,MAAM,CAAC,oBAAoB,KAAK,CAACL,EAAG,SAAS,CAACE,YAAY,qBAAqBG,MAAM,CAAC,KAAO,SAAS,MAAQ,YAAY,aAAa,QAAQY,GAAG,CAAC,MAAQ,SAASC,GAAiC,OAAzBA,EAAOC,kBAAyBrB,EAAIsB,eAAeC,MAAM,KAAMC,cAAc,CAACtB,EAAG,MAAM,CAACE,YAAY,0BAA0BG,MAAM,CAAC,QAAU,YAAY,KAAO,OAAO,OAAS,eAAe,eAAe,IAAI,iBAAiB,QAAQ,kBAAkB,QAAQ,cAAc,OAAO,UAAY,UAAU,CAACL,EAAG,OAAO,CAACK,MAAM,CAAC,EAAI,qGAAqGL,EAAG,OAAO,CAACE,YAAY,2BAA2B,CAACJ,EAAIM,GAAG,YAAYN,EAAIyB,GAAG,YAAY,IAEvxBjB,EAAkB,GCoCP,GACfC,KAAA,cACAiB,QAAA,CACAJ,iBACA,KAAAK,YAAAC,OAAAC,MAAAC,IACAC,QAAAC,KAAA,0CAAAF,QC3CsY,I,YCOlYf,EAAY,eACd,EACAhB,EACAS,GACA,EACA,KACA,KACA,MAIa,OAAAO,E","file":"js/chunk-5bd3b03a.43d62d68.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"demo-page\"},[_vm._m(0),_c('p',{staticClass:\"remote-box__title\"},[_vm._v(\"红色区域内是一个远程组件,该组件内部依赖了另一个远程组件\")]),_c('demo-preview',{staticClass:\"remote-preview\"},[_c('div',{staticClass:\"remote-box\"},[_c('remote-comp',{attrs:{\"msg\":\"Welcome to use hel remote vue comp\"}})],1)]),_vm._m(1),_c('div',{staticClass:\"demo-links\"},[_c('a',{attrs:{\"href\":\"https://github.com/hel-eco/hel-tpl-remote-vue-comp\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\" 远程组件仓库 \")]),_c('router-link',{attrs:{\"to\":\"/libs\"}},[_vm._v(\"继续看远程 libs 示例 →\")])],1)],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('header',[_c('p',{staticClass:\"demo-page__eyebrow\"},[_vm._v(\"远程组件\")]),_c('h1',{staticClass:\"demo-page__title\"},[_vm._v(\"comps-vue2 远程组件\")]),_c('p',{staticClass:\"demo-page__lead\"},[_vm._v(\" 下面红色区域里的内容是 \"),_c('code',[_vm._v(\"preFetchLib('comps-vue2')\")]),_vm._v(\" 从远端拉取的组件, 它内部又依赖了另一个远程组件(HelloWorld);宿主产物里没有这些代码。 \")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('p',{staticClass:\"demo-note\"},[_vm._v(\" 远端地址按环境切换:开发 \"),_c('code',[_vm._v(\"http://localhost:20040\")]),_vm._v(\"(先执行 \"),_c('code',[_vm._v(\"pnpm comps-vue2:dev\")]),_vm._v(\"),生产 \"),_c('code',[_vm._v(\"unpkg\")]),_vm._v(\" 上的 \"),_c('code',[_vm._v(\"hel-meta.json\")]),_vm._v(\"。 \")])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n <div class=\"demo-page\">\r\n <header>\r\n <p class=\"demo-page__eyebrow\">远程组件</p>\r\n <h1 class=\"demo-page__title\">comps-vue2 远程组件</h1>\r\n <p class=\"demo-page__lead\">\r\n 下面红色区域里的内容是 <code>preFetchLib('comps-vue2')</code> 从远端拉取的组件,\r\n 它内部又依赖了另一个远程组件(HelloWorld);宿主产物里没有这些代码。\r\n </p>\r\n </header>\r\n\r\n <p class=\"remote-box__title\">红色区域内是一个远程组件,该组件内部依赖了另一个远程组件</p>\r\n\r\n <demo-preview class=\"remote-preview\">\r\n <div class=\"remote-box\">\r\n <remote-comp msg=\"Welcome to use hel remote vue comp\" />\r\n </div>\r\n </demo-preview>\r\n\r\n <p class=\"demo-note\">\r\n 远端地址按环境切换:开发 <code>http://localhost:20040</code>(先执行\r\n <code>pnpm comps-vue2:dev</code>),生产 <code>unpkg</code> 上的\r\n <code>hel-meta.json</code>。\r\n </p>\r\n\r\n <div class=\"demo-links\">\r\n <a href=\"https://github.com/hel-eco/hel-tpl-remote-vue-comp\" target=\"_blank\" rel=\"noopener\">\r\n 远程组件仓库\r\n </a>\r\n <router-link to=\"/libs\">继续看远程 libs 示例 →</router-link>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\n/* eslint-disable */\r\n// https://github.com/hel-eco/hel-tpl-remote-vue-comp\r\n// 静态导入只拿到 hel-lib-proxy 的空壳代理,真正的组件代码由 main.js 里\r\n// 的 preFetchLib 从远端载入\r\nimport comps from '@melt-js/comps-vue2';\r\nimport DemoPreview from '../components/DemoPreview.vue';\r\n\r\nexport default {\r\n name: 'RemoteCompView',\r\n components: {\r\n DemoPreview,\r\n RemoteComp: comps.App, // hi, remote component\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.remote-box {\r\n padding: 20px;\r\n border: 2px solid #e74c3c;\r\n border-radius: 12px;\r\n background: #fff8f7;\r\n}\r\n\r\n.remote-box__title {\r\n margin: 0;\r\n color: #c0392b;\r\n font-size: 14px;\r\n font-weight: 600;\r\n}\r\n\r\n/* 全屏时只保留红框里的远程组件,标题与说明留在屏幕外 */\r\n.remote-preview.is-demo-fullscreen {\r\n display: flex;\r\n padding: 24px;\r\n background: #fff8f7;\r\n}\r\n\r\n.remote-preview.is-demo-fullscreen .remote-box {\r\n width: 100%;\r\n max-width: 1100px;\r\n margin: auto;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RemoteCompView.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RemoteCompView.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./RemoteCompView.vue?vue&type=template&id=cba10148&scoped=true\"\nimport script from \"./RemoteCompView.vue?vue&type=script&lang=js\"\nexport * from \"./RemoteCompView.vue?vue&type=script&lang=js\"\nimport style0 from \"./RemoteCompView.vue?vue&type=style&index=0&id=cba10148&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"cba10148\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RemoteCompView.vue?vue&type=style&index=0&id=cba10148&prod&scoped=true&lang=css\"","import { exposeLib } from 'hel-lib-proxy';\n\n/*\r\n|--------------------------------------------------------------------------\r\n|\r\n| 对应 package.json/appGroupName\r\n|\r\n|--------------------------------------------------------------------------\r\n*/\r\n\r\nconst LIB_NAME = 'comps-vue2';\n\n/*\r\n|--------------------------------------------------------------------------\r\n|\r\n| 组件类型导出文件,同时也作为 rollup 的打包入口文件,因只提供类型,rollup 打包后是一个\r\n| 仅包含 hel-lib-proxy 的空壳文件,对模块使用方的包体构建大小无影响\r\n| 模块使用方 通过 npm i xxx-lib 后,只要在头文件处执行过 preFetchLib\r\n| 则整个项目项使用本地模块一样载入提供方的组件,并可以点击到 node_modules 查看源码\r\n|\r\n|--------------------------------------------------------------------------\r\n*/\r\n/**\r\n * 将提供给用户的lib暴露出去(同时也暴露了类型)\r\n */\r\nvar dtlib = exposeLib(LIB_NAME);\n\nexport { dtlib as default, dtlib };\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"demo-preview\",attrs:{\"data-demo-preview\":\"\"}},[_c('button',{staticClass:\"demo-preview__exit\",attrs:{\"type\":\"button\",\"title\":\"退出全屏(Esc)\",\"aria-label\":\"退出全屏\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.exitFullscreen.apply(null, arguments)}}},[_c('svg',{staticClass:\"demo-preview__exit-icon\",attrs:{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"stroke-width\":\"2\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",\"aria-hidden\":\"true\",\"focusable\":\"false\"}},[_c('path',{attrs:{\"d\":\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3\"}})]),_c('span',{staticClass:\"demo-preview__exit-text\"},[_vm._v(\"退出全屏\")])]),_vm._t(\"default\")],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div class=\"demo-preview\" data-demo-preview>\r\n <button\r\n type=\"button\"\r\n class=\"demo-preview__exit\"\r\n title=\"退出全屏(Esc)\"\r\n aria-label=\"退出全屏\"\r\n @click.stop=\"exitFullscreen\"\r\n >\r\n <svg\r\n class=\"demo-preview__exit-icon\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n aria-hidden=\"true\"\r\n focusable=\"false\"\r\n >\r\n <path\r\n d=\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3\"\r\n />\r\n </svg>\r\n <span class=\"demo-preview__exit-text\">退出全屏</span>\r\n </button>\r\n <slot />\r\n </div>\r\n</template>\r\n\r\n<script>\r\n/**\r\n * 组件预览区:全屏按钮的唯一目标。\r\n *\r\n * 普通模式下它只是页面里的一个普通容器;进入全屏后由 vue-fullscreen 给根节点\r\n * 加上 is-demo-fullscreen 类,只保留插槽里的组件内容,页面标题、简介、说明与\r\n * 页脚都不会进入全屏。右下角的「退出全屏」按钮也只在全屏时出现。\r\n */\r\nexport default {\r\n name: 'DemoPreview',\r\n methods: {\r\n exitFullscreen() {\r\n this.$fullscreen.exit().catch(error => {\r\n console.warn('[Fullscreen] Failed to exit fullscreen:', error)\r\n })\r\n }\r\n }\r\n}\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DemoPreview.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DemoPreview.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./DemoPreview.vue?vue&type=template&id=538ff717\"\nimport script from \"./DemoPreview.vue?vue&type=script&lang=js\"\nexport * from \"./DemoPreview.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-70591058"],{"6c03":function(e,t,s){"use strict";s("7ae0")},"7ae0":function(e,t,s){},"8d6b":function(e,t,s){"use strict";s.d(t,"a",(function(){return l}));var a=s("fc8e");const o="comps-vue2";var l=Object(a["exposeLib"])(o)},afbc:function(e,t,s){"use strict";var a=function(){var e=this,t=e._self._c;return t("div",{staticClass:"demo-preview",attrs:{"data-demo-preview":""}},[t("button",{staticClass:"demo-preview__exit",attrs:{type:"button",title:"退出全屏(Esc)","aria-label":"退出全屏"},on:{click:function(t){return t.stopPropagation(),e.exitFullscreen.apply(null,arguments)}}},[t("svg",{staticClass:"demo-preview__exit-icon",attrs:{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true",focusable:"false"}},[t("path",{attrs:{d:"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3"}})]),t("span",{staticClass:"demo-preview__exit-text"},[e._v("退出全屏")])]),e._t("default")],2)},o=[],l={name:"DemoPreview",methods:{exitFullscreen(){this.$fullscreen.exit().catch(e=>{console.warn("[Fullscreen] Failed to exit fullscreen:",e)})}}},n=l,r=s("a6c2"),i=Object(r["a"])(n,a,o,!1,null,null,null);t["a"]=i.exports},b85c:function(e,t,s){"use strict";s.r(t);var a=function(){var e=this,t=e._self._c;return t("div",{staticClass:"demo-page"},[e._m(0),t("div",{staticClass:"butterfly-controls"},[t("button",{staticClass:"demo-btn",attrs:{type:"button"},on:{click:function(t){e.paused=!e.paused}}},[e._v(" "+e._s(e.paused?"继续飞舞":"暂停动画")+" ")]),t("div",{staticClass:"butterfly-speed",attrs:{role:"group","aria-label":"动画速度"}},e._l(e.speedOptions,(function(s){return t("button",{key:s.value,staticClass:"butterfly-speed__btn",class:{"is-active":e.speed===s.value},attrs:{type:"button","aria-pressed":e.speed===s.value},on:{click:function(t){e.speed=s.value}}},[e._v(" "+e._s(s.label)+" ")])})),0),t("span",{staticClass:"butterfly-controls__hint"},[e._v(" 纯 CSS 动画,无定时器,暂停后动画帧不再推进 ")])]),e.butterflyComp?t("demo-preview",{staticClass:"butterfly-preview"},[t("div",{staticClass:"butterfly-stage"},[t(e.butterflyComp,{tag:"component",attrs:{paused:e.paused,speed:e.speed}})],1)]):t("p",{staticClass:"demo-note"},[t("span",[e._v(" 当前远端产物没有导出 "),t("code",[e._v("Butterflies3d")]),e._v("(远端版本可能早于蝴蝶组件)。 本地联调请先执行 "),t("code",[e._v("pnpm comps-vue2:dev")]),e._v("(20040),或发布包含该组件的新版 comps-vue2 后再看线上效果。 ")])]),e._m(1),t("div",{staticClass:"demo-links"},[t("a",{attrs:{href:"https://github.com/luo0412/night-demo-codepen-gulp-2019/blob/master/gulp3-jquery-melt-ie8-mpa/_melt/ch2-effects/03-animal/butterflies-3d/index.html",target:"_blank",rel:"noopener"}},[e._v(" 原始 demo 源码 ")]),t("router-link",{attrs:{to:"/ranking"}},[e._v("对比排行榜远程组件 →")])],1)],1)},o=[function(){var e=this,t=e._self._c;return t("header",[t("p",{staticClass:"demo-page__eyebrow"},[e._v("远程组件 · 3D 场景")]),t("h1",{staticClass:"demo-page__title"},[e._v("3D 蝴蝶飞舞")]),t("p",{staticClass:"demo-page__lead"},[e._v(" 这个场景同样来自 comps-vue2 的远程产物("),t("code",[e._v("Butterflies3d")]),e._v("): 从 CodePen 的 SVG 3D 蝴蝶 demo 抽取而来,用 CSS 3D 天空盒 + "),t("code",[e._v("rotate3d")]),e._v(" 摆出云层里的七只蝴蝶,扇翅、飘动、绕圈全部由 CSS 关键帧驱动,组件里没有定时器。 宿主只负责摆一个舞台,并通过 "),t("code",[e._v("paused")]),e._v(" / "),t("code",[e._v("speed")]),e._v(" 两个 prop 控制动画。 ")])])},function(){var e=this,t=e._self._c;return t("p",{staticClass:"demo-note"},[t("span",[e._v(" 组件源码在 "),t("code",[e._v("comps-vue2/src/components/Butterflies3d")]),e._v(", 原始 HTML / CSS 保留在 "),t("code",[e._v("source/")]),e._v(",天空盒贴图与翅膀纹理放在 "),t("code",[e._v("assets/")]),e._v(";"),t("code",[e._v("butterflies")]),e._v(" prop 可以逐只调整尺寸、公转周期、 扇翅周期与偏移,"),t("code",[e._v("wingTexture")]),e._v(" 可以换一套翅膀纹理。 右上角「全屏」只放大这块舞台,页面说明文字不会进入全屏。 ")])])}],l=s("8d6b"),n=s("afbc"),r={name:"ButterflyView",components:{DemoPreview:n["a"]},data(){return{paused:!1,speed:1,speedOptions:[{label:"0.5×",value:.5},{label:"1×",value:1},{label:"2×",value:2}]}},computed:{butterflyComp(){return l["a"].Butterflies3d}}},i=r,c=(s("6c03"),s("a6c2")),u=Object(c["a"])(i,a,o,!1,null,"aa2aa1f8",null);t["default"]=u.exports}}]);
2
+ //# sourceMappingURL=chunk-70591058.90a25ef0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack:///./src/views/ButterflyView.vue?b017","webpack:///../comps-vue2/hel_proxy_es/entry.js","webpack:///./src/components/DemoPreview.vue","webpack:///src/components/DemoPreview.vue","webpack:///./src/components/DemoPreview.vue?f524","webpack:///./src/components/DemoPreview.vue?7d16","webpack:///./src/views/ButterflyView.vue","webpack:///src/views/ButterflyView.vue","webpack:///./src/views/ButterflyView.vue?d823","webpack:///./src/views/ButterflyView.vue?281d"],"names":["LIB_NAME","dtlib","exposeLib","render","_vm","this","_c","_self","staticClass","attrs","on","$event","stopPropagation","exitFullscreen","apply","arguments","_v","_t","staticRenderFns","name","methods","$fullscreen","exit","catch","error","console","warn","component","_m","paused","_s","_l","speedOptions","option","key","value","class","speed","label","butterflyComp","tag","components","DemoPreview","data","computed","comps","Butterflies3d"],"mappings":"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","file":"js/chunk-70591058.90a25ef0.js","sourcesContent":["export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ButterflyView.vue?vue&type=style&index=0&id=aa2aa1f8&prod&scoped=true&lang=css\"","import { exposeLib } from 'hel-lib-proxy';\n\n/*\r\n|--------------------------------------------------------------------------\r\n|\r\n| 对应 package.json/appGroupName\r\n|\r\n|--------------------------------------------------------------------------\r\n*/\r\n\r\nconst LIB_NAME = 'comps-vue2';\n\n/*\r\n|--------------------------------------------------------------------------\r\n|\r\n| 组件类型导出文件,同时也作为 rollup 的打包入口文件,因只提供类型,rollup 打包后是一个\r\n| 仅包含 hel-lib-proxy 的空壳文件,对模块使用方的包体构建大小无影响\r\n| 模块使用方 通过 npm i xxx-lib 后,只要在头文件处执行过 preFetchLib\r\n| 则整个项目项使用本地模块一样载入提供方的组件,并可以点击到 node_modules 查看源码\r\n|\r\n|--------------------------------------------------------------------------\r\n*/\r\n/**\r\n * 将提供给用户的lib暴露出去(同时也暴露了类型)\r\n */\r\nvar dtlib = exposeLib(LIB_NAME);\n\nexport { dtlib as default, dtlib };\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"demo-preview\",attrs:{\"data-demo-preview\":\"\"}},[_c('button',{staticClass:\"demo-preview__exit\",attrs:{\"type\":\"button\",\"title\":\"退出全屏(Esc)\",\"aria-label\":\"退出全屏\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.exitFullscreen.apply(null, arguments)}}},[_c('svg',{staticClass:\"demo-preview__exit-icon\",attrs:{\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"stroke-width\":\"2\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",\"aria-hidden\":\"true\",\"focusable\":\"false\"}},[_c('path',{attrs:{\"d\":\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3\"}})]),_c('span',{staticClass:\"demo-preview__exit-text\"},[_vm._v(\"退出全屏\")])]),_vm._t(\"default\")],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div class=\"demo-preview\" data-demo-preview>\r\n <button\r\n type=\"button\"\r\n class=\"demo-preview__exit\"\r\n title=\"退出全屏(Esc)\"\r\n aria-label=\"退出全屏\"\r\n @click.stop=\"exitFullscreen\"\r\n >\r\n <svg\r\n class=\"demo-preview__exit-icon\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n aria-hidden=\"true\"\r\n focusable=\"false\"\r\n >\r\n <path\r\n d=\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3\"\r\n />\r\n </svg>\r\n <span class=\"demo-preview__exit-text\">退出全屏</span>\r\n </button>\r\n <slot />\r\n </div>\r\n</template>\r\n\r\n<script>\r\n/**\r\n * 组件预览区:全屏按钮的唯一目标。\r\n *\r\n * 普通模式下它只是页面里的一个普通容器;进入全屏后由 vue-fullscreen 给根节点\r\n * 加上 is-demo-fullscreen 类,只保留插槽里的组件内容,页面标题、简介、说明与\r\n * 页脚都不会进入全屏。右下角的「退出全屏」按钮也只在全屏时出现。\r\n */\r\nexport default {\r\n name: 'DemoPreview',\r\n methods: {\r\n exitFullscreen() {\r\n this.$fullscreen.exit().catch(error => {\r\n console.warn('[Fullscreen] Failed to exit fullscreen:', error)\r\n })\r\n }\r\n }\r\n}\r\n</script>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DemoPreview.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DemoPreview.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./DemoPreview.vue?vue&type=template&id=538ff717\"\nimport script from \"./DemoPreview.vue?vue&type=script&lang=js\"\nexport * from \"./DemoPreview.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"demo-page\"},[_vm._m(0),_c('div',{staticClass:\"butterfly-controls\"},[_c('button',{staticClass:\"demo-btn\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){_vm.paused = !_vm.paused}}},[_vm._v(\" \"+_vm._s(_vm.paused ? '继续飞舞' : '暂停动画')+\" \")]),_c('div',{staticClass:\"butterfly-speed\",attrs:{\"role\":\"group\",\"aria-label\":\"动画速度\"}},_vm._l((_vm.speedOptions),function(option){return _c('button',{key:option.value,staticClass:\"butterfly-speed__btn\",class:{ 'is-active': _vm.speed === option.value },attrs:{\"type\":\"button\",\"aria-pressed\":_vm.speed === option.value},on:{\"click\":function($event){_vm.speed = option.value}}},[_vm._v(\" \"+_vm._s(option.label)+\" \")])}),0),_c('span',{staticClass:\"butterfly-controls__hint\"},[_vm._v(\" 纯 CSS 动画,无定时器,暂停后动画帧不再推进 \")])]),(_vm.butterflyComp)?_c('demo-preview',{staticClass:\"butterfly-preview\"},[_c('div',{staticClass:\"butterfly-stage\"},[_c(_vm.butterflyComp,{tag:\"component\",attrs:{\"paused\":_vm.paused,\"speed\":_vm.speed}})],1)]):_c('p',{staticClass:\"demo-note\"},[_c('span',[_vm._v(\" 当前远端产物没有导出 \"),_c('code',[_vm._v(\"Butterflies3d\")]),_vm._v(\"(远端版本可能早于蝴蝶组件)。 本地联调请先执行 \"),_c('code',[_vm._v(\"pnpm comps-vue2:dev\")]),_vm._v(\"(20040),或发布包含该组件的新版 comps-vue2 后再看线上效果。 \")])]),_vm._m(1),_c('div',{staticClass:\"demo-links\"},[_c('a',{attrs:{\"href\":\"https://github.com/luo0412/night-demo-codepen-gulp-2019/blob/master/gulp3-jquery-melt-ie8-mpa/_melt/ch2-effects/03-animal/butterflies-3d/index.html\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\" 原始 demo 源码 \")]),_c('router-link',{attrs:{\"to\":\"/ranking\"}},[_vm._v(\"对比排行榜远程组件 →\")])],1)],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('header',[_c('p',{staticClass:\"demo-page__eyebrow\"},[_vm._v(\"远程组件 · 3D 场景\")]),_c('h1',{staticClass:\"demo-page__title\"},[_vm._v(\"3D 蝴蝶飞舞\")]),_c('p',{staticClass:\"demo-page__lead\"},[_vm._v(\" 这个场景同样来自 comps-vue2 的远程产物(\"),_c('code',[_vm._v(\"Butterflies3d\")]),_vm._v(\"): 从 CodePen 的 SVG 3D 蝴蝶 demo 抽取而来,用 CSS 3D 天空盒 + \"),_c('code',[_vm._v(\"rotate3d\")]),_vm._v(\" 摆出云层里的七只蝴蝶,扇翅、飘动、绕圈全部由 CSS 关键帧驱动,组件里没有定时器。 宿主只负责摆一个舞台,并通过 \"),_c('code',[_vm._v(\"paused\")]),_vm._v(\" / \"),_c('code',[_vm._v(\"speed\")]),_vm._v(\" 两个 prop 控制动画。 \")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('p',{staticClass:\"demo-note\"},[_c('span',[_vm._v(\" 组件源码在 \"),_c('code',[_vm._v(\"comps-vue2/src/components/Butterflies3d\")]),_vm._v(\", 原始 HTML / CSS 保留在 \"),_c('code',[_vm._v(\"source/\")]),_vm._v(\",天空盒贴图与翅膀纹理放在 \"),_c('code',[_vm._v(\"assets/\")]),_vm._v(\";\"),_c('code',[_vm._v(\"butterflies\")]),_vm._v(\" prop 可以逐只调整尺寸、公转周期、 扇翅周期与偏移,\"),_c('code',[_vm._v(\"wingTexture\")]),_vm._v(\" 可以换一套翅膀纹理。 右上角「全屏」只放大这块舞台,页面说明文字不会进入全屏。 \")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n <div class=\"demo-page\">\n <header>\n <p class=\"demo-page__eyebrow\">远程组件 · 3D 场景</p>\n <h1 class=\"demo-page__title\">3D 蝴蝶飞舞</h1>\n <p class=\"demo-page__lead\">\n 这个场景同样来自 comps-vue2 的远程产物(<code>Butterflies3d</code>):\n 从 CodePen 的 SVG 3D 蝴蝶 demo 抽取而来,用 CSS 3D 天空盒 + <code>rotate3d</code>\n 摆出云层里的七只蝴蝶,扇翅、飘动、绕圈全部由 CSS 关键帧驱动,组件里没有定时器。\n 宿主只负责摆一个舞台,并通过 <code>paused</code> / <code>speed</code> 两个 prop\n 控制动画。\n </p>\n </header>\n\n <div class=\"butterfly-controls\">\n <button class=\"demo-btn\" type=\"button\" @click=\"paused = !paused\">\n {{ paused ? '继续飞舞' : '暂停动画' }}\n </button>\n\n <div class=\"butterfly-speed\" role=\"group\" aria-label=\"动画速度\">\n <button\n v-for=\"option in speedOptions\"\n :key=\"option.value\"\n type=\"button\"\n class=\"butterfly-speed__btn\"\n :class=\"{ 'is-active': speed === option.value }\"\n :aria-pressed=\"speed === option.value\"\n @click=\"speed = option.value\"\n >\n {{ option.label }}\n </button>\n </div>\n\n <span class=\"butterfly-controls__hint\">\n 纯 CSS 动画,无定时器,暂停后动画帧不再推进\n </span>\n </div>\n\n <demo-preview v-if=\"butterflyComp\" class=\"butterfly-preview\">\n <div class=\"butterfly-stage\">\n <component :is=\"butterflyComp\" :paused=\"paused\" :speed=\"speed\" />\n </div>\n </demo-preview>\n\n <p v-else class=\"demo-note\">\n <span>\n 当前远端产物没有导出 <code>Butterflies3d</code>(远端版本可能早于蝴蝶组件)。\n 本地联调请先执行 <code>pnpm comps-vue2:dev</code>(20040),或发布包含该组件的新版\n comps-vue2 后再看线上效果。\n </span>\n </p>\n\n <p class=\"demo-note\">\n <span>\n 组件源码在 <code>comps-vue2/src/components/Butterflies3d</code>,\n 原始 HTML / CSS 保留在 <code>source/</code>,天空盒贴图与翅膀纹理放在\n <code>assets/</code>;<code>butterflies</code> prop 可以逐只调整尺寸、公转周期、\n 扇翅周期与偏移,<code>wingTexture</code> 可以换一套翅膀纹理。\n 右上角「全屏」只放大这块舞台,页面说明文字不会进入全屏。\n </span>\n </p>\n\n <div class=\"demo-links\">\n <a\n href=\"https://github.com/luo0412/night-demo-codepen-gulp-2019/blob/master/gulp3-jquery-melt-ie8-mpa/_melt/ch2-effects/03-animal/butterflies-3d/index.html\"\n target=\"_blank\"\n rel=\"noopener\"\n >\n 原始 demo 源码\n </a>\n <router-link to=\"/ranking\">对比排行榜远程组件 →</router-link>\n </div>\n </div>\n</template>\n\n<script>\n/* eslint-disable */\n// comps 的 hel 组名是 comps-vue2,静态导入只拿到代理壳,\n// 真正的 Butterflies3d 由 main.js 里的 preFetchLib 从远端载入\nimport comps from '@melt-js/comps-vue2';\nimport DemoPreview from '../components/DemoPreview.vue';\n\nexport default {\n name: 'ButterflyView',\n components: {\n DemoPreview\n },\n data() {\n return {\n paused: false,\n speed: 1,\n speedOptions: [\n { label: '0.5×', value: 0.5 },\n { label: '1×', value: 1 },\n { label: '2×', value: 2 }\n ]\n };\n },\n computed: {\n // 远端产物版本较旧时可能没有 Butterflies3d,取到 undefined 就展示提示\n butterflyComp() {\n return comps.Butterflies3d;\n }\n }\n};\n</script>\n\n<style scoped>\n.butterfly-controls {\n display: flex;\n flex-wrap: wrap;\n gap: 12px 16px;\n align-items: center;\n}\n\n.butterfly-speed {\n display: inline-flex;\n padding: 3px;\n border: 1px solid var(--demo-border);\n border-radius: 999px;\n background: var(--demo-surface-alt);\n}\n\n.butterfly-speed__btn {\n padding: 6px 12px;\n border: 0;\n border-radius: 999px;\n background: transparent;\n color: var(--demo-muted);\n font-family: inherit;\n font-size: 12px;\n font-weight: 600;\n line-height: 1;\n cursor: pointer;\n transition: color 0.2s, background-color 0.2s;\n}\n\n.butterfly-speed__btn:hover {\n color: var(--demo-accent);\n}\n\n.butterfly-speed__btn.is-active {\n background: var(--demo-surface);\n box-shadow: 0 1px 2px rgba(16, 24, 40, 0.12);\n color: var(--demo-accent);\n}\n\n.butterfly-controls__hint {\n color: var(--demo-muted);\n font-size: 12px;\n}\n\n/* 预览区:普通模式固定高度,全屏时铺满整个预览区 */\n.butterfly-stage {\n height: 560px;\n overflow: hidden;\n border: 1px solid var(--demo-border);\n border-radius: 12px;\n background: #0b1220;\n}\n\n.demo-preview.butterfly-preview.is-demo-fullscreen {\n padding: 0;\n background: #0b1220;\n}\n\n.demo-preview.butterfly-preview.is-demo-fullscreen .butterfly-stage {\n height: 100%;\n border: 0;\n border-radius: 0;\n}\n\n@media (max-width: 720px) {\n .butterfly-stage {\n height: 420px;\n }\n\n .butterfly-controls__hint {\n display: none;\n }\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ButterflyView.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ButterflyView.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ButterflyView.vue?vue&type=template&id=aa2aa1f8&scoped=true\"\nimport script from \"./ButterflyView.vue?vue&type=script&lang=js\"\nexport * from \"./ButterflyView.vue?vue&type=script&lang=js\"\nimport style0 from \"./ButterflyView.vue?vue&type=style&index=0&id=aa2aa1f8&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"aa2aa1f8\",\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-7962e576"],{"02f1":function(e,t,n){"use strict";var r=n("7ec8"),i=String;e.exports=function(e){if("Symbol"===r(e))throw new TypeError("Cannot convert a Symbol value to a string");return i(e)}},"110d":function(e,t,n){"use strict";var r=n("2513"),i=n("3b34"),a=n("b0ae"),s=n("8036"),o=n("c3fc"),u=n("6584"),c=n("ed83"),l=n("c278"),f=n("eb30"),d=n("89b4"),v=n("3c2a"),b=!v&&!f("map",(function(){})),h=!v&&!b&&d("map",TypeError),p=v||b||h,m=u((function(){var e=this.iterator,t=s(i(this.next,e)),n=this.done=!!t.done;if(!n)return c(e,this.mapper,[t.value,this.counter++],!0)}));r({target:"Iterator",proto:!0,real:!0,forced:p},{map:function(e){s(this);try{a(e)}catch(t){l(this,"throw",t)}return h?i(h,this,e):new m(o(this),{mapper:e})}})},"141e":function(e,t,n){"use strict";n("b9be")},"42d8":function(e,t,n){"use strict";var r=n("5860");e.exports=r(1.1.valueOf)},"57e7":function(e,t,n){"use strict";var r=n("7d3f"),i=n("4a41").get;e.exports=function(e){if(!r(e))return!1;var t=i(e);return!!t&&"RawJSON"===t.type}},"7ec8":function(e,t,n){"use strict";var r=n("9363"),i=n("3c61"),a=n("7d22"),s=n("1877"),o=s("toStringTag"),u=Object,c="Arguments"===a(function(){return arguments}()),l=function(e,t){try{return e[t]}catch(n){}};e.exports=r?a:function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=l(t=u(e),o))?n:c?a(t):"Object"===(r=a(t))&&i(t.callee)?"Arguments":r}},8472:function(e,t,n){"use strict";var r=n("5860"),i=n("8cfd"),a=SyntaxError,s=parseInt,o=String.fromCharCode,u=r("".charAt),c=r("".slice),l=r(/./.exec),f={'\\"':'"',"\\\\":"\\","\\/":"/","\\b":"\b","\\f":"\f","\\n":"\n","\\r":"\r","\\t":"\t"},d=/^[\da-f]{4}$/i,v=/^[\u0000-\u001F]$/;e.exports=function(e,t){var n=!0,r="";while(t<e.length){var b=u(e,t);if("\\"===b){var h=c(e,t,t+2);if(i(f,h))r+=f[h],t+=2;else{if("\\u"!==h)throw new a('Unknown escape sequence: "'+h+'"');t+=2;var p=c(e,t,t+4);if(!l(d,p))throw new a("Bad Unicode escape at: "+t);r+=o(s(p,16)),t+=4}}else{if('"'===b){n=!1,t++;break}if(l(v,b))throw new a("Bad control character in string literal at: "+t);r+=b,t++}}if(n)throw new a("Unterminated string at: "+t);return{value:r,end:t}}},"87f3":function(e,t,n){"use strict";var r=n("7d22");e.exports=Array.isArray||function(e){return"Array"===r(e)}},9363:function(e,t,n){"use strict";var r=n("1877"),i=r("toStringTag"),a={};a[i]="z",e.exports="[object z]"===String(a)},"9b4e":function(e,t,n){"use strict";var r=n("fa22");e.exports=!r((function(){var e="9007199254740993",t=JSON.rawJSON(e);return!JSON.isRawJSON(t)||JSON.stringify(t)!==e}))},a277:function(e,t,n){"use strict";var r=n("2513"),i=n("5157"),a=n("3b34"),s=n("5860"),o=n("fa22"),u=n("87f3"),c=n("3c61"),l=n("7d3f"),f=n("c3f2"),d=n("57e7"),v=n("bb9a"),b=n("7d22"),h=n("42d8"),p=n("90c3").includes,m=n("8cfd"),g=n("02f1"),_=n("8472"),w=n("9eb7"),y=n("e514"),S=n("9b4e"),O=String,C=TypeError,N=i("JSON","stringify"),x=i("BigInt"),J=s("".valueOf),k=s((!0).valueOf),F=x&&s(x.prototype.valueOf),B=s(/./.exec),j=s("".charAt),A=s("".charCodeAt),D=s("".replace),U=s("".slice),E=s([].push),L=s([].pop),T=s(1.1.toString),I=/[\uD800-\uDFFF]/g,$=/^[\uD800-\uDBFF]$/,H=/^[\uDC00-\uDFFF]$/,R=/^\d+$/,M=w(),V=w(),q=w(),P=M.length,z=V.length,G=!y||o((function(){var e=i("Symbol")("stringify detection");return"[null]"!==N([e])||"{}"!==N({a:e})||"{}"!==N(Object(e))})),K=o((function(){return'"\\udf06\\ud834"'!==N("\udf06\ud834")||'"\\udead"'!==N("\udead")})),Q=S?i("JSON","isRawJSON"):d,W=G?function(e,t,n){return N(e,(function(e,n){var r=a(t,this,e,n);if(!v(r))return r}),n)}:N,X=function(e,t,n){var r=j(n,t-1),i=j(n,t+1);return B($,e)&&!B(H,i)||B(H,e)&&!B($,r)?"\\u"+T(A(e,0),16):e},Y=function(e){if(u(e)){for(var t=e.length,n=[],r=f(null),i=0;i<t;i++){var a,s=e[i];if("string"==typeof s)a=s;else{if("number"!=typeof s&&"Number"!==b(s)&&"String"!==b(s))continue;a=g(s)}m(r,a)||(r[a]=!0,E(n,a))}return n}},Z=function(e,t){try{return e(t),!0}catch(n){return!1}},ee=function(e){var t=b(e);return"Number"===t&&Z(h,e)||"String"===t&&Z(J,e)||"Boolean"===t&&Z(k,e)||!!F&&"BigInt"===t&&Z(F,e)},te=function(e){if(!l(e)||c(e)||u(e))return!1;try{return!ee(e)}catch(t){return!0}},ne=function(e,t){return{toJSON:function(){var n=e[t];if(l(n)||"bigint"==typeof n){var r=n.toJSON;c(r)&&(n=a(r,n,t))}return n}}},re=function(e){for(var t=0,n=e.length;t<n;t++)if(B(R,e[t]))return V;return""},ie=function(e,t,n){for(var r=f(null),i=0,a=t.length;i<a;i++){var s=t[i];r[n+s]=ne(e,s)}return r[q]=null,r};N&&r({target:"JSON",stat:!0,arity:3,forced:G||K||!S},{stringify:function(e,t,n){var r,i=c(t)?t:void 0,s=i?void 0:Y(t),o=s&&re(s),l=[],f=[],d=[],v=!1,b=!0,h=W(e,(function(e,t){if(e=O(e),s){if(e===q)return L(f),void(r=L(d));if(b)b=!1;else if(this!==r&&!u(this)&&!p(s,e))return}else i&&(t=a(i,this,e,t));if(Q(t))return S?t:(v=!0,M+(E(l,t.rawJSON)-1));if(s&&te(t)){if(p(f,t))throw new C("Converting circular structure to JSON");var n=ie(t,s,o);return E(f,t),E(d,r),r=n,o&&(v=!0),n}return t}),n);if("string"!=typeof h)return h;if(K&&(h=D(h,I,X)),!v)return h;for(var m="",g=h.length,w=0;w<g;w++){var y=j(h,w);if('"'===y){var N=_(h,++w).end-1,x=U(h,w,N);U(x,0,P)===M?m+=l[U(x,P)]:U(x,0,z)===V?m+='"'+U(x,z)+'"':m+='"'+x+'"',w=N}else m+=y}return m}})},afbc:function(e,t,n){"use strict";var r=function(){var e=this,t=e._self._c;return t("div",{staticClass:"demo-preview",attrs:{"data-demo-preview":""}},[t("button",{staticClass:"demo-preview__exit",attrs:{type:"button",title:"退出全屏(Esc)","aria-label":"退出全屏"},on:{click:function(t){return t.stopPropagation(),e.exitFullscreen.apply(null,arguments)}}},[t("svg",{staticClass:"demo-preview__exit-icon",attrs:{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true",focusable:"false"}},[t("path",{attrs:{d:"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3"}})]),t("span",{staticClass:"demo-preview__exit-text"},[e._v("退出全屏")])]),e._t("default")],2)},i=[],a={name:"DemoPreview",methods:{exitFullscreen(){this.$fullscreen.exit().catch(e=>{console.warn("[Fullscreen] Failed to exit fullscreen:",e)})}}},s=a,o=n("a6c2"),u=Object(o["a"])(s,r,i,!1,null,null,null);t["a"]=u.exports},b9be:function(e,t,n){},e2fd:function(e,t,n){"use strict";n.r(t);var r=function(){var e=this,t=e._self._c;return t("div",{staticClass:"demo-page"},[t("header",[t("p",{staticClass:"demo-page__eyebrow"},[e._v("远程 libs")]),t("h1",{staticClass:"demo-page__title"},[e._v("远程 libs 演示")]),t("p",{staticClass:"demo-page__lead"},[e._v(" 下面两个库都是 hel 远程库,由入口 "),t("code",[e._v("main.js")]),e._v(" 通过 "),t("code",[e._v("preFetchLib")]),e._v(" 统一预加载,本示例只负责展示调用结果, 宿主既没有安装也没有打包它们:"),t("code",[e._v("libs-utils")]),e._v("、"),t("code",[e._v("libs-lodash")]),e._v(" (lodash 完整打进远程产物)。当前 "+e._s(e.envLabel)+"。 ")])]),e.panels.length?t("demo-preview",{staticClass:"libs-preview"},[t("div",{staticClass:"libs-panels"},e._l(e.panels,(function(n){return t("section",{key:n.name,staticClass:"libs-panel"},[t("h2",{staticClass:"libs-panel__title"},[e._v(" "+e._s(n.name)+" "),t("span",{staticClass:"libs-panel__group"},[e._v("preFetchLib('"+e._s(n.name)+"')")])]),t("table",{staticClass:"libs-table"},[t("tbody",e._l(n.rows,(function(n){return t("tr",{key:n.code},[t("td",{staticClass:"libs-table__code"},[t("code",[e._v(e._s(n.code))])]),t("td",{staticClass:"libs-table__value"},[e._v(e._s(n.value))])])})),0)])])})),0),t("div",{staticClass:"libs-actions"},[t("button",{staticClass:"demo-btn demo-btn--ghost",attrs:{type:"button"},on:{click:e.refresh}},[e._v(" 重新执行 ")])])]):t("p",{staticClass:"demo-note"},[e._v("远程库尚未加载…")])],1)},i=[],a=(n("58ff"),n("110d"),n("a277"),n("cb87")),s=n("afbc");function o(e,t){const{num:n,regs:r,myMod:i}=e,a=t;return[{name:"libs-utils",rows:[{code:"num.canBeNum('22.1')",value:String(n.canBeNum("22.1"))},{code:"num.canBeNum('22.s')",value:String(n.canBeNum("22.s"))},{code:"num.random(100)",value:String(n.random(100))},{code:"regs.en.test('hel-micro')",value:String(r.en.test("hel-micro"))},{code:"regs.enSnake.test('hel_demo')",value:String(r.enSnake.test("hel_demo"))},{code:"myMod.sayHelloToHel('demo-vue2')",value:i.sayHelloToHel("demo-vue2")}]},{name:"libs-lodash",rows:[{code:"chunk([1, 2, 3, 4, 5], 2)",value:JSON.stringify(a.chunk([1,2,3,4,5],2))},{code:"uniq([2, 1, 2, 3])",value:JSON.stringify(a.uniq([2,1,2,3]))},{code:"camelCase('hel remote libs')",value:a.camelCase("hel remote libs")},{code:"orderBy([{ n: 3 }, { n: 1 }, { n: 2 }], 'n')",value:JSON.stringify(a.orderBy([{n:3},{n:1},{n:2}],"n").map(e=>e.n))},{code:"myUtils.regs.enOrNum.test('hel2026')",value:String(a.myUtils.regs.enOrNum.test("hel2026"))},{code:"VERSION",value:String(a.VERSION)}]}]}var u={name:"LibsView",components:{DemoPreview:s["a"]},data(){const e=Object(a["b"])();return{envLabel:a["a"],panels:e?o(e.libsUtils,e.libsLodash):[]}},methods:{refresh(){const e=Object(a["b"])();e&&(this.panels=o(e.libsUtils,e.libsLodash))}}},c=u,l=(n("141e"),n("a6c2")),f=Object(l["a"])(c,r,i,!1,null,"cc75e042",null);t["default"]=f.exports}}]);
2
+ //# sourceMappingURL=chunk-7962e576.1ca7789d.js.map