@cjy0812/inspect-plus 0.0.1772240426360

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +148 -0
  2. package/dist/.nojekyll +1 -0
  3. package/dist/404.html +38 -0
  4. package/dist/_redirects +1 -0
  5. package/dist/assets/ActionCard.vue_vue_type_script_setup_true_lang-CzzwrEAn.js +17 -0
  6. package/dist/assets/ActionCard.vue_vue_type_script_setup_true_lang-CzzwrEAn.js.map +1 -0
  7. package/dist/assets/DevicePage-ClkEpwEg.js +2 -0
  8. package/dist/assets/DevicePage-ClkEpwEg.js.map +1 -0
  9. package/dist/assets/HomePage-DWBCu_RV.js +55 -0
  10. package/dist/assets/HomePage-DWBCu_RV.js.map +1 -0
  11. package/dist/assets/ImportPage-DNhXkQRM.js +2 -0
  12. package/dist/assets/ImportPage-DNhXkQRM.js.map +1 -0
  13. package/dist/assets/SelectorPage-BPf1NT6K.js +2 -0
  14. package/dist/assets/SelectorPage-BPf1NT6K.js.map +1 -0
  15. package/dist/assets/SettingsModal.vue_vue_type_script_setup_true_lang-Dzypo389.js +977 -0
  16. package/dist/assets/SettingsModal.vue_vue_type_script_setup_true_lang-Dzypo389.js.map +1 -0
  17. package/dist/assets/SnapshotPage-B6Jpif--.js +250 -0
  18. package/dist/assets/SnapshotPage-B6Jpif--.js.map +1 -0
  19. package/dist/assets/SnapshotPage-B_oz4RvQ.css +1 -0
  20. package/dist/assets/SvgPage-BgerzYLu.js +2 -0
  21. package/dist/assets/SvgPage-BgerzYLu.js.map +1 -0
  22. package/dist/assets/TrackGraph-BqCqbx5h.css +1 -0
  23. package/dist/assets/TrackGraph-CSZuKoTS.js +134 -0
  24. package/dist/assets/TrackGraph-CSZuKoTS.js.map +1 -0
  25. package/dist/assets/_404Page-Beb778B7.js +2 -0
  26. package/dist/assets/_404Page-Beb778B7.js.map +1 -0
  27. package/dist/assets/import-ohlNKANL.js +2 -0
  28. package/dist/assets/import-ohlNKANL.js.map +1 -0
  29. package/dist/assets/index-BlWrRSuL.js +18 -0
  30. package/dist/assets/index-BlWrRSuL.js.map +1 -0
  31. package/dist/assets/index-CFzr9cs0.css +1 -0
  32. package/dist/assets/index-DfAptoUr.js +1172 -0
  33. package/dist/assets/index-DfAptoUr.js.map +1 -0
  34. package/dist/assets/index-OOkxa8o-.css +1 -0
  35. package/dist/assets/jszip.min-DUXE_wq7.js +3 -0
  36. package/dist/assets/jszip.min-DUXE_wq7.js.map +1 -0
  37. package/dist/assets/mod-BHC4TAjm.wasm +0 -0
  38. package/dist/assets/node-TLy2IyRG.js +118 -0
  39. package/dist/assets/node-TLy2IyRG.js.map +1 -0
  40. package/dist/assets/polyfills-t8dO9Hxd.js +2 -0
  41. package/dist/assets/polyfills-t8dO9Hxd.js.map +1 -0
  42. package/dist/assets/snapshot-D02dgTNQ.js +4 -0
  43. package/dist/assets/snapshot-D02dgTNQ.js.map +1 -0
  44. package/dist/assets/snapshotGroup-DhERMZkD.js +2 -0
  45. package/dist/assets/snapshotGroup-DhERMZkD.js.map +1 -0
  46. package/dist/assets/svg-D9PkDGa0.js +2 -0
  47. package/dist/assets/svg-D9PkDGa0.js.map +1 -0
  48. package/dist/assets/worker-NxeETyFs.js +10 -0
  49. package/dist/assets/worker-NxeETyFs.js.map +1 -0
  50. package/dist/index.html +38 -0
  51. package/package.json +102 -0
package/README.md ADDED
@@ -0,0 +1,148 @@
1
+ # GKD快照审查工具Plus
2
+ #### 基于原版进行重构并增加一些功能与优化,以改善体验为主为目的,使用ai进行改造的项目,可能会有~~些许bug~~,欢迎指正~
3
+
4
+ ## 功能演示
5
+
6
+ ### 快速预览 & 快照树分类 & UI重构
7
+
8
+ ### 白天/夜间模式
9
+
10
+ <div align="center">
11
+ <table border="0">
12
+ <tr>
13
+ <td align="center" style="border: none;">
14
+ <b>☀️ 日间模式</b><br>
15
+ <img src="./images/00_Light.webp" />
16
+ <img src="./images/01_Light-2.webp" />
17
+ </td>
18
+ <td align="center" style="border: none;">
19
+ <b>🌚 夜间模式</b><br>
20
+ <img src="./images/02_Dark.webp" />
21
+ <img src="./images/03_Dark-2.webp" />
22
+ </td>
23
+ </tr>
24
+ </table>
25
+ </div>
26
+
27
+ ### 快照审查页-多种工具供你快速调用
28
+
29
+ ![快照审查页-工具](./images/04_Tools.webp)
30
+
31
+ ### 选择器实时语法检查
32
+
33
+ ![选择器实时语法检查](./images/05_Selector-check.webp)
34
+
35
+
36
+ ### 属性面板参数用途提示
37
+
38
+ ![属性参数用途提示](./images/06_Property-tip.webp)
39
+
40
+
41
+ ### 选择器路径视图UI无缝切换
42
+
43
+ <div align="center">
44
+ <table border="0">
45
+ <tr>
46
+ <td align="center" style="border: none;">
47
+ <b>☀️ 日间模式</b><br>
48
+ <img src="./images/07_Selector-path-light.webp" />
49
+ </td>
50
+ <td align="center" style="border: none;">
51
+ <b>🌚 夜间模式</b><br>
52
+ <img src="./images/08_Selector-path-dark.webp" />
53
+ </td>
54
+ </tr>
55
+ </table>
56
+ </div>
57
+
58
+
59
+ ### 设置面板
60
+
61
+ #### 你可以在里面自定义想要的喜好设置
62
+
63
+ ![设置面板](./images/09_settings.webp)
64
+
65
+ <details open>
66
+ <summary>示例: 实时执行点击选择器</summary>
67
+
68
+ ![实时执行点击选择器](./images/10_Click-selector.webp)
69
+
70
+ </details>
71
+
72
+ ## 使用方法
73
+
74
+ ### 需要使用重定向域名脚本把官方域名重定向至本项目的域名,否则无法实现无感切换,脚本源代码在本项目的[userscripts](./userscripts/url-redirect.user.js)目录下。
75
+
76
+ 1. 安装[油猴脚本管理器](https://www.tampermonkey.net/index.php?browser=chrome&locale=zh)扩展。
77
+ 2. 点击[这里](https://github.com/cjy0812/inspect-plus/raw/refs/heads/main/userscripts/url-redirect.user.js)打开脚本安装页面,点击安装。
78
+ 3. 刷新GKD快照审查工具页面,即可重定向生效。
79
+
80
+ #### 目前MIKU增强脚本已添加本项目作用域可直接使用
81
+
82
+ ## 快照示例
83
+
84
+ <details close>
85
+
86
+ - <https://i.gkd.li/i/14045424>
87
+ - <https://i.gkd.li/i/14039510>
88
+ - <https://i.gkd.li/i/14035418>
89
+ - <https://i.gkd.li/i/14034770>
90
+ - <https://i.gkd.li/i/14031920>
91
+ - <https://li.chenge.eu.org/i/14018243>
92
+ - <https://li.chenge.eu.org/i/14011298>
93
+ - <https://li.chenge.eu.org/i/13999908>
94
+
95
+ </details>
96
+
97
+ ## 项目进度
98
+
99
+ - 功能
100
+ - [x] 快照树分类
101
+ - [ ] 快照组备注(40%)
102
+ - [x] 更好的节点树快查显示方式
103
+ - [x] 打开前预览快照图片
104
+ - [x] 几乎~~完美~~支持夜间模式(99.8%)
105
+ - [x] `测试选择器`至快照页与搜索面板合并
106
+ - [x] `执行选择器` `修改内存订阅` 至快照审查页
107
+ - [ ] 更强大的`内存订阅管理器`(0%)
108
+ - [x] 属性面板参数停留可显示解释
109
+ - [x] 设置面板实现管理
110
+ - [ ] 同web页内快照审查快速切换快照(0%)
111
+ - [x] 快查节点特殊颜色标记
112
+ - [ ] 低内存模式(20%)
113
+ - [ ] 国际化支持(0%)
114
+ - [ ] 删除手机端快照管理(0%)
115
+ - [ ] 截图快速编辑打马赛克
116
+ - 优化
117
+ - [x] 界面样式UI重构优化
118
+ - [x] 完善图标
119
+ - [x] 点过快照标记**已查看**并有绿色遮罩
120
+ - [x] 快照图片时间戳难以辨识
121
+ - [x] 小放大图坐标难以辨识
122
+ - [x] 选择器查询输入框支持自动换行
123
+ - [ ] 选择器查询支持matches数组(60%)
124
+ - [ ] 支持查询参数可接受多个(0%)
125
+ - [x] 复制类名直接简写本身
126
+ - [x] 第6种关系操作符 -> 渲染崩溃
127
+
128
+ ## 源码运行
129
+
130
+ [查看源码运行指南](./docs/structure.md)
131
+
132
+ ## 🎉感谢以下项目
133
+
134
+ - [gkd-kit/inspect](https://github.com/gkd-kit/inspect) 原项目
135
+
136
+ ## 🥇感谢以下开发者的贡献
137
+
138
+ - [CodeX](https://chatgpt.com/codex) AI高阶构思项目
139
+ - [Trae](https:///www.trae.ai) AI重复性劳动
140
+ - [Gemini](https://gemini.google.com/) AI辅助指导
141
+ - [deepSeek](https://chat.deepseek.com/) 提供代码解释帮助
142
+ - [Doubao-Seed-Code] 自动化指令操作执行
143
+
144
+ ## 📈Star History
145
+
146
+ [![Star History Chart](https://api.star-history.com/svg?repos=cjy0812/inspect-plus&type=date&legend=top-left)](https://www.star-history.com/#cjy0812/inspect-plus&type=date&legend=top-left)
147
+
148
+
package/dist/.nojekyll ADDED
@@ -0,0 +1 @@
1
+
package/dist/404.html ADDED
@@ -0,0 +1,38 @@
1
+ <!doctype html>
2
+ <html lang="zh">
3
+ <head>
4
+ <script type="module" crossorigin src="https://registry.npmmirror.com/@gkd-kit/inspect/0.0.1772240426360/files/dist/assets/polyfills-t8dO9Hxd.js"></script>
5
+
6
+ <meta charset="UTF-8" />
7
+ <link
8
+ rel="icon"
9
+ type="image/svg+xml"
10
+ href="https://registry.npmmirror.com/@gkd-kit/inspect/0.0.1711546385152/files/dist/favicon.svg"
11
+ />
12
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
13
+ <meta name="referrer" content="no-referrer" />
14
+ <title>GKD</title>
15
+ <script>
16
+ (function () {
17
+ try {
18
+ var raw = localStorage.getItem('settings');
19
+ var mode = raw ? JSON.parse(raw).themeMode : 'auto';
20
+ var prefersDark = window.matchMedia(
21
+ '(prefers-color-scheme: dark)',
22
+ ).matches;
23
+ var isDark = mode === 'dark' || (mode !== 'light' && prefersDark);
24
+ var root = document.documentElement;
25
+ root.classList.toggle('dark-mode-active', isDark);
26
+ root.dataset.theme = isDark ? 'dark' : 'light';
27
+ root.style.colorScheme = isDark ? 'dark' : 'light';
28
+ } catch (e) {
29
+ // ignore
30
+ }
31
+ })();
32
+ </script>
33
+ <script type="module" crossorigin src="https://registry.npmmirror.com/@gkd-kit/inspect/0.0.1772240426360/files/dist/assets/index-DfAptoUr.js"></script>
34
+ <link rel="stylesheet" crossorigin href="https://registry.npmmirror.com/@gkd-kit/inspect/0.0.1772240426360/files/dist/assets/index-OOkxa8o-.css">
35
+ </head>
36
+ <body>
37
+ </body>
38
+ </html>
@@ -0,0 +1 @@
1
+ /* /index.html 200
@@ -0,0 +1,17 @@
1
+ import{af as ne,d as O,ar as R,h as g,B as N,b2 as se,aj as ie,b3 as ae,b4 as D,u as J,ag as re,g as le,ax as $,i as _,b5 as ce,a as A,a1 as B,c as E,b6 as pe,b7 as de,e as Q,b8 as ue,r as fe,ay as F,a4 as ve,aH as me,l as ge,q as he,t as I,z as l,x as c,y as n,H as S,D as y,F as k,O as V,X as xe,V as q,W as Z,aZ as H,C as h,Q as ke,Y as K,a$ as Ce}from"./index-DfAptoUr.js";import{u as b,a as Pe,A as _e,B as ye,w as L,o as we,s as M,p as Ie}from"./SettingsModal.vue_vue_type_script_setup_true_lang-Dzypo389.js";import{a as Se}from"./snapshot-D02dgTNQ.js";import{_ as X,p as be,a as Te}from"./node-TLy2IyRG.js";const Y=ne("n-popconfirm"),G={positiveText:String,negativeText:String,showIcon:{type:Boolean,default:!0},onPositiveClick:{type:Function,required:!0},onNegativeClick:{type:Function,required:!0}},W=ce(G),Be=O({name:"NPopconfirmPanel",props:G,setup(o){const{localeRef:e}=D("Popconfirm"),{inlineThemeDisabled:p}=J(),{mergedClsPrefixRef:a,mergedThemeRef:x,props:u}=re(Y),P=_(()=>{const{common:{cubicBezierEaseInOut:i},self:{fontSize:f,iconSize:v,iconColor:C}}=x.value;return{"--n-bezier":i,"--n-font-size":f,"--n-icon-size":v,"--n-icon-color":C}}),s=p?le("popconfirm-panel",void 0,P,u):void 0;return Object.assign(Object.assign({},D("Popconfirm")),{mergedClsPrefix:a,cssVars:p?void 0:P,localizedPositiveText:_(()=>o.positiveText||e.value.positiveText),localizedNegativeText:_(()=>o.negativeText||e.value.negativeText),positiveButtonProps:$(u,"positiveButtonProps"),negativeButtonProps:$(u,"negativeButtonProps"),handlePositiveClick(i){o.onPositiveClick(i)},handleNegativeClick(i){o.onNegativeClick(i)},themeClass:s==null?void 0:s.themeClass,onRender:s==null?void 0:s.onRender})},render(){var o;const{mergedClsPrefix:e,showIcon:p,$slots:a}=this,x=R(a.action,()=>this.negativeText===null&&this.positiveText===null?[]:[this.negativeText!==null&&g(N,Object.assign({size:"small",onClick:this.handleNegativeClick},this.negativeButtonProps),{default:()=>this.localizedNegativeText}),this.positiveText!==null&&g(N,Object.assign({size:"small",type:"primary",onClick:this.handlePositiveClick},this.positiveButtonProps),{default:()=>this.localizedPositiveText})]);return(o=this.onRender)===null||o===void 0||o.call(this),g("div",{class:[`${e}-popconfirm__panel`,this.themeClass],style:this.cssVars},se(a.default,u=>p||u?g("div",{class:`${e}-popconfirm__body`},p?g("div",{class:`${e}-popconfirm__icon`},R(a.icon,()=>[g(ie,{clsPrefix:e},{default:()=>g(ae,null)})])):null,u):null),x?g("div",{class:[`${e}-popconfirm__action`]},x):null)}}),Ne=A("popconfirm",[B("body",`
2
+ font-size: var(--n-font-size);
3
+ display: flex;
4
+ align-items: center;
5
+ flex-wrap: nowrap;
6
+ position: relative;
7
+ `,[B("icon",`
8
+ display: flex;
9
+ font-size: var(--n-icon-size);
10
+ color: var(--n-icon-color);
11
+ transition: color .3s var(--n-bezier);
12
+ margin: 0 8px 0 0;
13
+ `)]),B("action",`
14
+ display: flex;
15
+ justify-content: flex-end;
16
+ `,[E("&:not(:first-child)","margin-top: 8px"),A("button",[E("&:not(:last-child)","margin-right: 8px;")])])]),Oe=Object.assign(Object.assign(Object.assign({},Q.props),be),{positiveText:String,negativeText:String,showIcon:{type:Boolean,default:!0},trigger:{type:String,default:"click"},positiveButtonProps:Object,negativeButtonProps:Object,onPositiveClick:Function,onNegativeClick:Function}),ze=O({name:"Popconfirm",props:Oe,slots:Object,__popover__:!0,setup(o){const{mergedClsPrefixRef:e}=J(),p=Q("Popconfirm","-popconfirm",Ne,ue,o,e),a=fe(null);function x(s){var i;if(!(!((i=a.value)===null||i===void 0)&&i.getMergedShow()))return;const{onPositiveClick:f,"onUpdate:show":v}=o;Promise.resolve(f?f(s):!0).then(C=>{var d;C!==!1&&((d=a.value)===null||d===void 0||d.setShow(!1),v&&F(v,!1))})}function u(s){var i;if(!(!((i=a.value)===null||i===void 0)&&i.getMergedShow()))return;const{onNegativeClick:f,"onUpdate:show":v}=o;Promise.resolve(f?f(s):!0).then(C=>{var d;C!==!1&&((d=a.value)===null||d===void 0||d.setShow(!1),v&&F(v,!1))})}return ve(Y,{mergedThemeRef:p,mergedClsPrefixRef:e,props:o}),{setShow(s){var i;(i=a.value)===null||i===void 0||i.setShow(s)},syncPosition(){var s;(s=a.value)===null||s===void 0||s.syncPosition()},mergedTheme:p,popoverInstRef:a,handlePositiveClick:x,handleNegativeClick:u}},render(){const{$slots:o,$props:e,mergedTheme:p}=this;return g(X,Object.assign({},de(e,W),{theme:p.peers.Popover,themeOverrides:p.peerOverrides.Popover,internalExtraClass:["popconfirm"],ref:"popoverInstRef"}),{trigger:o.trigger,default:()=>{const a=pe(e,W);return g(Be,Object.assign({},a,{onPositiveClick:this.handlePositiveClick,onNegativeClick:this.handleNegativeClick}),o)}})}}),je={flex:"","gap-16px":""},Ue=["href"],Re=["href"],De=["href"],Ve=O({__name:"ActionCard",props:{snapshot:{},onDelete:{type:Function,default:me},showPreview:{type:Boolean,default:!0},showExport:{type:Boolean,default:!0},showDelete:{type:Boolean,default:!0},showShare:{type:Boolean,default:!0}},setup(o){const e=o,p=ge(),{settingsStore:a,snapshotImportId:x,snapshotImageId:u}=ke(),P=b(async()=>_e(e.snapshot)),s=b(async()=>ye(e.snapshot)),i=_(()=>p.resolve({name:"snapshot",params:{snapshotId:e.snapshot.id}}).href),f=b(async()=>{await L();const r=await we(e.snapshot);M({title:"分享链接",content:K(r)})}),v=b(async()=>{await L();const r=await Ie(e.snapshot);M({title:"分享链接",content:a.shareUseOfficialImportDomain?q(r):Z(r),extraContent:xe(r),quickPick:!0})}),C=async()=>{await Se.removeItem(e.snapshot.id),await Ce(500),e.onDelete()},d=_(()=>{const r=x[e.snapshot.id];return r?a.shareUseOfficialImportDomain?q(r):Z(r):""}),T=_(()=>{const r=u[e.snapshot.id];return r?K(r):""}),z=async r=>navigator.clipboard.writeText(r).then(()=>{H.success("复制成功")}).catch(()=>{H.success("复制失败")});return(r,t)=>{const w=he("SvgIcon"),m=N,j=Pe,U=X,ee=Te,te=ze;return h(),I("div",je,[o.showPreview?(h(),I("a",{key:0,flex:"",target:"_blank",href:l(i)},[c(m,{text:"",title:"查看"},{icon:n(()=>[c(w,{name:"code"})]),_:1})],8,Ue)):S("",!0),o.showExport?(h(),y(U,{key:1},{trigger:n(()=>[c(m,{text:""},{icon:n(()=>[c(w,{name:"export"})]),_:1})]),default:n(()=>[c(j,{vertical:""},{default:n(()=>[c(m,{loading:l(s).loading,onClick:l(s).invoke},{default:n(()=>[...t[4]||(t[4]=[k(" 下载-快照 ",-1)])]),_:1},8,["loading","onClick"]),c(m,{loading:l(P).loading,onClick:l(P).invoke},{default:n(()=>[...t[5]||(t[5]=[k(" 下载-图片 ",-1)])]),_:1},8,["loading","onClick"])]),_:1})]),_:1})):S("",!0),o.showShare?(h(),y(U,{key:2},{trigger:n(()=>[c(m,{text:""},{icon:n(()=>[c(w,{name:"share"})]),_:1})]),default:n(()=>[c(j,{vertical:""},{default:n(()=>[l(d)?(h(),I("a",{key:0,flex:"","decoration-none":"",href:l(d),onClick:t[1]||(t[1]=V(()=>{},["prevent"]))},[c(m,{onClick:t[0]||(t[0]=oe=>z(l(d)))},{default:n(()=>[...t[6]||(t[6]=[k(" 复制链接-快照 ",-1)])]),_:1})],8,Re)):(h(),y(m,{key:1,loading:l(v).loading,onClick:l(v).invoke},{default:n(()=>[...t[7]||(t[7]=[k(" 生成链接-快照 ",-1)])]),_:1},8,["loading","onClick"])),l(T)?(h(),I("a",{key:2,flex:"","decoration-none":"",href:l(T),onClick:t[3]||(t[3]=V(()=>{},["prevent"]))},[c(m,{onClick:t[2]||(t[2]=oe=>z(l(T)))},{default:n(()=>[...t[8]||(t[8]=[k(" 复制链接-图片 ",-1)])]),_:1})],8,De)):(h(),y(m,{key:3,loading:l(f).loading,onClick:l(f).invoke},{default:n(()=>[...t[9]||(t[9]=[k(" 生成链接-图片 ",-1)])]),_:1},8,["loading","onClick"]))]),_:1})]),_:1})):S("",!0),o.showDelete?(h(),y(te,{key:3,onPositiveClick:C},{trigger:n(()=>[c(ee,null,{trigger:n(()=>[c(m,{text:""},{icon:n(()=>[c(w,{name:"delete"})]),_:1})]),default:n(()=>[t[10]||(t[10]=k(" 删除快照 ",-1))]),_:1})]),default:n(()=>[t[11]||(t[11]=k(" 是否删除快照? ",-1))]),_:1})):S("",!0)])}}});export{Ve as _};
17
+ //# sourceMappingURL=ActionCard.vue_vue_type_script_setup_true_lang-CzzwrEAn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionCard.vue_vue_type_script_setup_true_lang-CzzwrEAn.js","sources":["../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/popconfirm/src/interface.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/popconfirm/src/PopconfirmPanel.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/popconfirm/src/styles/index.cssr.mjs","../../node_modules/.pnpm/naive-ui@2.43.2_vue@3.5.29_typescript@5.9.3_/node_modules/naive-ui/es/popconfirm/src/Popconfirm.mjs","../../src/components/ActionCard.vue"],"sourcesContent":["import { createInjectionKey } from \"../../_utils/index.mjs\";\nexport const popconfirmInjectionKey = createInjectionKey('n-popconfirm');","import { computed, defineComponent, h, inject, toRef } from 'vue';\nimport { NBaseIcon } from \"../../_internal/index.mjs\";\nimport { WarningIcon } from \"../../_internal/icons/index.mjs\";\nimport { useConfig, useLocale, useThemeClass } from \"../../_mixins/index.mjs\";\nimport { keysOf, resolveSlot, resolveWrappedSlot } from \"../../_utils/index.mjs\";\nimport { NButton } from \"../../button/index.mjs\";\nimport { popconfirmInjectionKey } from \"./interface.mjs\";\nexport const panelProps = {\n positiveText: String,\n negativeText: String,\n showIcon: {\n type: Boolean,\n default: true\n },\n onPositiveClick: {\n type: Function,\n required: true\n },\n onNegativeClick: {\n type: Function,\n required: true\n }\n};\nexport const panelPropKeys = keysOf(panelProps);\nexport default defineComponent({\n name: 'NPopconfirmPanel',\n props: panelProps,\n setup(props) {\n const {\n localeRef\n } = useLocale('Popconfirm');\n const {\n inlineThemeDisabled\n } = useConfig();\n const {\n mergedClsPrefixRef,\n mergedThemeRef,\n props: popconfirmProps\n } = inject(popconfirmInjectionKey);\n const cssVarsRef = computed(() => {\n const {\n common: {\n cubicBezierEaseInOut\n },\n self: {\n fontSize,\n iconSize,\n iconColor\n }\n } = mergedThemeRef.value;\n return {\n '--n-bezier': cubicBezierEaseInOut,\n '--n-font-size': fontSize,\n '--n-icon-size': iconSize,\n '--n-icon-color': iconColor\n };\n });\n const themeClassHandle = inlineThemeDisabled ? useThemeClass('popconfirm-panel', undefined, cssVarsRef, popconfirmProps) : undefined;\n return Object.assign(Object.assign({}, useLocale('Popconfirm')), {\n mergedClsPrefix: mergedClsPrefixRef,\n cssVars: inlineThemeDisabled ? undefined : cssVarsRef,\n localizedPositiveText: computed(() => {\n return props.positiveText || localeRef.value.positiveText;\n }),\n localizedNegativeText: computed(() => {\n return props.negativeText || localeRef.value.negativeText;\n }),\n positiveButtonProps: toRef(popconfirmProps, 'positiveButtonProps'),\n negativeButtonProps: toRef(popconfirmProps, 'negativeButtonProps'),\n handlePositiveClick(e) {\n props.onPositiveClick(e);\n },\n handleNegativeClick(e) {\n props.onNegativeClick(e);\n },\n themeClass: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.themeClass,\n onRender: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.onRender\n });\n },\n render() {\n var _a;\n const {\n mergedClsPrefix,\n showIcon,\n $slots\n } = this;\n const actionContentNode = resolveSlot($slots.action, () => this.negativeText === null && this.positiveText === null ? [] : [this.negativeText !== null && h(NButton, Object.assign({\n size: \"small\",\n onClick: this.handleNegativeClick\n }, this.negativeButtonProps), {\n default: () => this.localizedNegativeText\n }), this.positiveText !== null && h(NButton, Object.assign({\n size: \"small\",\n type: \"primary\",\n onClick: this.handlePositiveClick\n }, this.positiveButtonProps), {\n default: () => this.localizedPositiveText\n })]);\n (_a = this.onRender) === null || _a === void 0 ? void 0 : _a.call(this);\n return h(\"div\", {\n class: [`${mergedClsPrefix}-popconfirm__panel`, this.themeClass],\n style: this.cssVars\n }, resolveWrappedSlot($slots.default, children => showIcon || children ? h(\"div\", {\n class: `${mergedClsPrefix}-popconfirm__body`\n }, showIcon ? h(\"div\", {\n class: `${mergedClsPrefix}-popconfirm__icon`\n }, resolveSlot($slots.icon, () => [h(NBaseIcon, {\n clsPrefix: mergedClsPrefix\n }, {\n default: () => h(WarningIcon, null)\n })])) : null, children) : null), actionContentNode ? h(\"div\", {\n class: [`${mergedClsPrefix}-popconfirm__action`]\n }, actionContentNode) : null);\n }\n});","import { c, cB, cE } from \"../../../_utils/cssr/index.mjs\";\n// vars:\n// --n-font-size\n// --n-icon-size\n// --n-bezier\n// --n-icon-color\nexport default cB('popconfirm', [cE('body', `\n font-size: var(--n-font-size);\n display: flex;\n align-items: center;\n flex-wrap: nowrap;\n position: relative;\n `, [cE('icon', `\n display: flex;\n font-size: var(--n-icon-size);\n color: var(--n-icon-color);\n transition: color .3s var(--n-bezier);\n margin: 0 8px 0 0;\n `)]), cE('action', `\n display: flex;\n justify-content: flex-end;\n `, [c('&:not(:first-child)', 'margin-top: 8px'), cB('button', [c('&:not(:last-child)', 'margin-right: 8px;')])])]);","import { defineComponent, h, provide, ref } from 'vue';\nimport { useConfig, useTheme } from \"../../_mixins/index.mjs\";\nimport { call, keep, omit } from \"../../_utils/index.mjs\";\nimport { NPopover } from \"../../popover/index.mjs\";\nimport { popoverBaseProps } from \"../../popover/src/Popover.mjs\";\nimport { popconfirmLight } from \"../styles/index.mjs\";\nimport { popconfirmInjectionKey } from \"./interface.mjs\";\nimport PopconfirmPanel, { panelPropKeys } from \"./PopconfirmPanel.mjs\";\nimport style from \"./styles/index.cssr.mjs\";\nexport const popconfirmProps = Object.assign(Object.assign(Object.assign({}, useTheme.props), popoverBaseProps), {\n positiveText: String,\n negativeText: String,\n showIcon: {\n type: Boolean,\n default: true\n },\n trigger: {\n type: String,\n default: 'click'\n },\n positiveButtonProps: Object,\n negativeButtonProps: Object,\n onPositiveClick: Function,\n onNegativeClick: Function\n});\nexport default defineComponent({\n name: 'Popconfirm',\n props: popconfirmProps,\n slots: Object,\n __popover__: true,\n setup(props) {\n const {\n mergedClsPrefixRef\n } = useConfig();\n const themeRef = useTheme('Popconfirm', '-popconfirm', style, popconfirmLight, props, mergedClsPrefixRef);\n const popoverInstRef = ref(null);\n function handlePositiveClick(e) {\n var _a;\n if (!((_a = popoverInstRef.value) === null || _a === void 0 ? void 0 : _a.getMergedShow())) return;\n const {\n onPositiveClick,\n 'onUpdate:show': onUpdateShow\n } = props;\n void Promise.resolve(onPositiveClick ? onPositiveClick(e) : true).then(value => {\n var _a;\n if (value === false) return;\n (_a = popoverInstRef.value) === null || _a === void 0 ? void 0 : _a.setShow(false);\n if (onUpdateShow) call(onUpdateShow, false);\n });\n }\n function handleNegativeClick(e) {\n var _a;\n if (!((_a = popoverInstRef.value) === null || _a === void 0 ? void 0 : _a.getMergedShow())) return;\n const {\n onNegativeClick,\n 'onUpdate:show': onUpdateShow\n } = props;\n void Promise.resolve(onNegativeClick ? onNegativeClick(e) : true).then(value => {\n var _a;\n if (value === false) return;\n (_a = popoverInstRef.value) === null || _a === void 0 ? void 0 : _a.setShow(false);\n if (onUpdateShow) call(onUpdateShow, false);\n });\n }\n provide(popconfirmInjectionKey, {\n mergedThemeRef: themeRef,\n mergedClsPrefixRef,\n props\n });\n const returned = {\n setShow(value) {\n var _a;\n (_a = popoverInstRef.value) === null || _a === void 0 ? void 0 : _a.setShow(value);\n },\n syncPosition() {\n var _a;\n (_a = popoverInstRef.value) === null || _a === void 0 ? void 0 : _a.syncPosition();\n },\n mergedTheme: themeRef,\n popoverInstRef,\n handlePositiveClick,\n handleNegativeClick\n };\n return returned;\n },\n render() {\n const {\n $slots: slots,\n $props: props,\n mergedTheme\n } = this;\n return h(NPopover, Object.assign({}, omit(props, panelPropKeys), {\n theme: mergedTheme.peers.Popover,\n themeOverrides: mergedTheme.peerOverrides.Popover,\n internalExtraClass: ['popconfirm'],\n ref: \"popoverInstRef\"\n }), {\n trigger: slots.trigger,\n default: () => {\n const panelProps = keep(props, panelPropKeys);\n return h(PopconfirmPanel, Object.assign({}, panelProps, {\n onPositiveClick: this.handlePositiveClick,\n onNegativeClick: this.handleNegativeClick\n }), slots);\n }\n });\n }\n});","<script setup lang=\"tsx\">\nimport { showTextDLg, waitShareAgree } from '@/utils/dialog';\nimport { message } from '@/utils/discrete';\nimport {\n exportSnapshotAsImportId,\n exportSnapshotAsImage,\n exportSnapshotAsImageId,\n exportSnapshotAsZip,\n} from '@/utils/export';\nimport { buildEmptyFn, delay } from '@/utils/others';\nimport { snapshotStorage } from '@/utils/snapshot';\nimport { useTask } from '@/utils/task';\nimport {\n getCustomDomainImportUrl,\n getOfficialImportUrl,\n getImportUrl,\n getImagUrl,\n} from '@/utils/url';\n\nconst props = withDefaults(\n defineProps<{\n snapshot: Snapshot;\n onDelete?: () => void;\n showPreview?: boolean;\n showExport?: boolean;\n showDelete?: boolean;\n showShare?: boolean;\n }>(),\n {\n showPreview: true,\n showExport: true,\n showDelete: true,\n showShare: true,\n onDelete: buildEmptyFn,\n },\n);\n\nconst router = useRouter();\nconst { settingsStore, snapshotImportId, snapshotImageId } = useStorageStore();\n\nconst exportJpg = useTask(async () => exportSnapshotAsImage(props.snapshot));\nconst exportZip = useTask(async () => exportSnapshotAsZip(props.snapshot));\n\nconst previewUrl = computed(() => {\n return router.resolve({\n name: 'snapshot',\n params: { snapshotId: props.snapshot.id },\n }).href;\n});\n\nconst exportJpgUrl = useTask(async () => {\n await waitShareAgree();\n const imageId = await exportSnapshotAsImageId(props.snapshot);\n showTextDLg({\n title: `分享链接`,\n content: getImagUrl(imageId),\n });\n});\n\nconst exportZipUrl = useTask(async () => {\n await waitShareAgree();\n const importId = await exportSnapshotAsImportId(props.snapshot);\n showTextDLg({\n title: `分享链接`,\n content: settingsStore.shareUseOfficialImportDomain\n ? getOfficialImportUrl(importId)\n : getImportUrl(importId),\n extraContent: getCustomDomainImportUrl(importId),\n quickPick: true,\n });\n});\n\nconst deleteSnapshot = async () => {\n await snapshotStorage.removeItem(props.snapshot.id);\n await delay(500);\n props.onDelete();\n};\n\nconst snapshotImportUrl = computed(() => {\n const t = snapshotImportId[props.snapshot.id];\n if (!t) return '';\n return settingsStore.shareUseOfficialImportDomain\n ? getOfficialImportUrl(t)\n : getImportUrl(t);\n});\nconst snapshotImageUrl = computed(() => {\n const t = snapshotImageId[props.snapshot.id];\n if (!t) return '';\n return getImagUrl(t);\n});\n\nconst copy = async (content: string) => {\n return navigator.clipboard\n .writeText(content)\n .then(() => {\n message.success(`复制成功`);\n })\n .catch(() => {\n message.success(`复制失败`);\n });\n};\n</script>\n<template>\n <div flex gap-16px>\n <a v-if=\"showPreview\" flex target=\"_blank\" :href=\"previewUrl\">\n <NButton text title=\"查看\">\n <template #icon>\n <SvgIcon name=\"code\" />\n </template>\n </NButton>\n </a>\n\n <NPopover v-if=\"showExport\">\n <template #trigger>\n <NButton text>\n <template #icon>\n <SvgIcon name=\"export\" />\n </template>\n </NButton>\n </template>\n <NSpace vertical>\n <NButton :loading=\"exportZip.loading\" @click=\"exportZip.invoke\">\n 下载-快照\n </NButton>\n <NButton :loading=\"exportJpg.loading\" @click=\"exportJpg.invoke\">\n 下载-图片\n </NButton>\n </NSpace>\n </NPopover>\n\n <NPopover v-if=\"showShare\">\n <template #trigger>\n <NButton text>\n <template #icon>\n <SvgIcon name=\"share\" />\n </template>\n </NButton>\n </template>\n <NSpace vertical>\n <a\n v-if=\"snapshotImportUrl\"\n flex\n decoration-none\n :href=\"snapshotImportUrl\"\n @click.prevent\n >\n <NButton @click=\"copy(snapshotImportUrl)\"> 复制链接-快照 </NButton>\n </a>\n <NButton\n v-else\n :loading=\"exportZipUrl.loading\"\n @click=\"exportZipUrl.invoke\"\n >\n 生成链接-快照\n </NButton>\n <a\n v-if=\"snapshotImageUrl\"\n flex\n decoration-none\n :href=\"snapshotImageUrl\"\n @click.prevent\n >\n <NButton @click=\"copy(snapshotImageUrl)\"> 复制链接-图片 </NButton>\n </a>\n <NButton\n v-else\n :loading=\"exportJpgUrl.loading\"\n @click=\"exportJpgUrl.invoke\"\n >\n 生成链接-图片\n </NButton>\n </NSpace>\n </NPopover>\n\n <NPopconfirm v-if=\"showDelete\" @positiveClick=\"deleteSnapshot\">\n 是否删除快照?\n <template #trigger>\n <NTooltip>\n <template #trigger>\n <NButton text>\n <template #icon>\n <SvgIcon name=\"delete\" />\n </template>\n </NButton>\n </template>\n 删除快照\n </NTooltip>\n </template>\n </NPopconfirm>\n </div>\n</template>\n"],"names":["popconfirmInjectionKey","createInjectionKey","panelProps","panelPropKeys","keysOf","PopconfirmPanel","defineComponent","props","localeRef","useLocale","inlineThemeDisabled","useConfig","mergedClsPrefixRef","mergedThemeRef","popconfirmProps","inject","cssVarsRef","computed","cubicBezierEaseInOut","fontSize","iconSize","iconColor","themeClassHandle","useThemeClass","toRef","e","_a","mergedClsPrefix","showIcon","$slots","actionContentNode","resolveSlot","h","NButton","resolveWrappedSlot","children","NBaseIcon","WarningIcon","style","cB","cE","c","useTheme","popoverBaseProps","__unplugin_components_4","themeRef","popconfirmLight","popoverInstRef","ref","handlePositiveClick","onPositiveClick","onUpdateShow","value","call","handleNegativeClick","onNegativeClick","provide","slots","mergedTheme","NPopover","omit","keep","__props","router","useRouter","settingsStore","snapshotImportId","snapshotImageId","useStorageStore","exportJpg","useTask","exportSnapshotAsImage","snapshot","exportZip","exportSnapshotAsZip","previewUrl","resolve","name","params","snapshotId","id","href","exportJpgUrl","waitShareAgree","imageId","exportSnapshotAsImageId","showTextDLg","title","content","getImagUrl","exportZipUrl","importId","exportSnapshotAsImportId","shareUseOfficialImportDomain","getOfficialImportUrl","getImportUrl","extraContent","getCustomDomainImportUrl","quickPick","deleteSnapshot","snapshotStorage","removeItem","delay","onDelete","snapshotImportUrl","t","snapshotImageUrl","copy","navigator","clipboard","writeText","then","message","success","catch","_openBlock","_createElementBlock","_hoisted_1","showPreview","flex","target","_unref","_createVNode","_component_NButton","text","icon","_component_SvgIcon","showExport","_createBlock","_component_NPopover","key","trigger","_component_NSpace","vertical","loading","onClick","invoke","_cache","showShare","$event","showDelete","_component_NPopconfirm","_component_NTooltip"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
@@ -0,0 +1,2 @@
1
+ import{d as Ne,l as Ce,b1 as $e,o as De,a$ as ze,w as re,q as ce,t as v,v as i,x as n,y as a,B as Ae,_ as Me,A as Ue,z as s,J as M,F as c,C as m,G as u,H as G,I as $,D as U,K as Z,L as Te,M as F,Q as be,R as T,i as O,aZ as b,X as Le,V as Pe,W as Be,Y as Ye}from"./index-DfAptoUr.js";import{u as W,_ as He,b as Re,d as Ve,c as Ee,a as Ke,e as Ge,f as Ze,C as Fe,y as Oe,D,B as We,A as je,w as ue,p as qe,s as me,o as Je}from"./SettingsModal.vue_vue_type_script_setup_true_lang-Dzypo389.js";import{u as Qe,b as Xe}from"./snapshotGroup-DhERMZkD.js";import{a as et,_ as tt,g as j,b as ge}from"./node-TLy2IyRG.js";import{a as L,b as S,p as at}from"./snapshot-D02dgTNQ.js";const nt={"page-size":"",flex:"","flex-col":"","p-10px":"","gap-10px":""},st={flex:"","items-center":"","gap-24px":""},ot={key:0,gkd_code:"","pl-16px":"","whitespace-nowrap":"",flex:"","items-center":""},it={class:"flex-1 min-h-0 overflow-auto pr-6px"},lt={key:0,"py-40px":"","text-center":"","opacity-70":""},pt={flex:"","items-center":"","gap-8px":""},dt={flex:"","items-center":"","gap-8px":""},rt={flex:"","items-start":"","gap-10px":"","flex-wrap":""},ct=["onMouseenter"],ut={flex:"","items-center":"","gap-6px":"","leading-18px":""},mt={class:"truncate font-600"},gt={"text-12px":"","mt-2px":"",class:"font-600"},vt={"mt-4px":"","text-12px":"",class:"opacity-75"},ft={"mt-2px":"","text-12px":"",class:"opacity-70"},_t={class:"inline-block w-fit max-w-90vw"},xt=["src"],wt={key:1,"py-20px":"","text-center":"","opacity-70":""},ht={class:"inline-flex"},$t=Ne({__name:"DevicePage",setup(kt){const ve=Ce(),{api:g,origin:fe,serverInfo:f}=Fe(),{settingsStore:P,snapshotImportTime:q,snapshotViewedTime:B}=be(),h=$e("device_link",""),z=T(!1),J=e=>{const t=e.trim();if(!t)return null;const p=/^https?:\/\//i.test(t)?t:`http://${t}`;return Oe(()=>{const l=new URL(p);return l.port||(l.port="8888"),l.origin},()=>null)},A=W(async()=>{const e=J(h.value);if(!e){b.error("非法设备地址");return}fe.value=e,h.value=e,f.value=await g.getServerInfo()}),Q=O(()=>{if(!f.value)return"未连接设备";const e=f.value.device,t=f.value.gkdAppInfo;return`${e.manufacturer} Android${e.release} - GKD${t.versionName}`});De(async()=>{await ze(500),J(h.value)&&A.invoke()});const Y=T([]);re(async()=>{if(!f.value)return;document.title=Q.value;const e=await g.getSnapshots();e.sort((t,p)=>p.id-t.id),Y.value=e});const X=W(async()=>{const e=await g.captureSnapshot(),t=await g.getScreenshot({id:e.id});await L.setItem(e.id,e),await S.setItem(e.id,t),b.success("捕获并保存快照成功");const p=await g.getSnapshots();p.sort((l,_)=>_.id-l.id),Y.value=p}),ee=W(async()=>{const e=(await g.getSnapshots()).map(d=>d.id),t=new Set((await S.keys()).map(d=>parseInt(d))),p=e.filter(d=>!t.has(d));if(p.length==0){b.success("没有新记录可导入");return}let l=0;const _=at(3);await Promise.all(p.map(d=>_(async()=>{const[k,y]=await Promise.all([g.getSnapshot({id:d}),g.getScreenshot({id:d})]);k.nodes&&(await Promise.all([L.setItem(d,k),S.setItem(d,y)]),l++)}))),b.success(`导入${l}条新记录`)}),_e=async e=>{await L.hasItem(e.id)||await L.setItem(e.id,await g.getSnapshot({id:e.id}))},H=async e=>{await S.hasItem(e.id)||await S.setItem(e.id,await g.getScreenshot({id:e.id}))},R=async e=>{await Promise.all([_e(e),H(e)])},te=D(async e=>{await R(e),B[e.id]=Date.now(),window.open(ve.resolve({name:"snapshot",params:{snapshotId:e.id}}).href)},e=>e.id),xe=(e,t=4,p=3)=>{const l=e.slice(0,t).map(d=>d.packageName),_=e.slice(0,t).flatMap(d=>d.activities.slice(0,p).map(k=>`${d.packageName}::${k.activityId}`));return{packageNames:l,activityNames:_}},V=O(()=>Xe(Y.value,q)),we=e=>j(e).name||e.appId,he=e=>`${ge(e).manufacturer} Android ${ge(e).release||""}`,ke=e=>F(q[e.id]||e.id).format("YYYY-MM-DD HH:mm:ss"),ye=O(()=>P.lowMemoryMode?6:24),{previewUrlMap:ae,previewLoadingMap:Ie,previewErrorMap:Se,ensurePreview:ne}=Qe({getScreenshot:async e=>await S.getItem(e)||await g.getScreenshot({id:e}),cacheLimit:ye}),se=D(async e=>{await R(e),await We(e)},e=>e.id),oe=D(async e=>{await H(e),await je(e)},e=>e.id),ie=D(async e=>{await ue(),await R(e);const t=await qe(e);me({title:"分享链接",content:P.shareUseOfficialImportDomain?Pe(t):Be(t),extraContent:Le(t)})},e=>e.id),le=D(async e=>{await ue(),await H(e);const t=await Je(e);me({title:"分享链接",content:Ye(t)})},e=>e.id),N=T([]),C=T([]);return re(()=>{if(!P.autoExpandSnapshots){N.value=[],C.value=[];return}const{packageNames:e,activityNames:t}=xe(V.value,5,4);N.value=e,C.value=t}),(e,t)=>{const p=ce("SvgIcon"),l=Ae,_=ce("RouterLink"),d=Me,k=He,y=et,I=Ge,E=tt,K=Ke,pe=Ve,de=Ee;return m(),v($,null,[i("div",nt,[i("div",st,[n(_,{to:"/",class:"flex ml-12px",title:"首页"},{default:a(()=>[n(l,{text:"",style:{"--n-icon-size":"var(--app-icon-size)"}},{icon:a(()=>[n(p,{name:"home"})]),_:1})]),_:1}),n(k,null,{default:a(()=>[n(d,{value:s(h),"onUpdate:value":t[0]||(t[0]=r=>M(h)?h.value=r:null),placeholder:"请输入设备地址 默认端口:8888",class:"gkd_code",style:{width:"260px"},onKeyup:Ue(s(A).invoke,["enter"])},null,8,["value","onKeyup"]),n(l,{loading:s(A).loading,onClick:s(A).invoke},{default:a(()=>[...t[5]||(t[5]=[c("刷新连接",-1)])]),_:1},8,["loading","onClick"]),s(f)?(m(),v("div",ot,u(s(Q)),1)):G("",!0)]),_:1}),s(f)?(m(),v($,{key:0},[n(y,null,{trigger:a(()=>[n(l,{text:"",style:{"--n-icon-size":"var(--app-icon-size)"},class:"device-top-icon",loading:s(X).loading,onClick:s(X).invoke},{default:a(()=>[n(p,{name:"Snapshot"})]),_:1},8,["loading","onClick"])]),default:a(()=>[t[6]||(t[6]=c(" 捕获快照 ",-1))]),_:1}),n(Re),n(y,null,{trigger:a(()=>[n(l,{text:"",style:{"--n-icon-size":"var(--app-icon-size)"},class:"device-top-icon",loading:s(ee).loading,onClick:s(ee).invoke},{default:a(()=>[n(p,{name:"Down-all"})]),_:1},8,["loading","onClick"])]),default:a(()=>[t[7]||(t[7]=c(" 下载所有快照 ",-1))]),_:1}),n(y,null,{trigger:a(()=>[n(l,{text:"",style:{"--n-icon-size":"var(--app-icon-size)"},class:"device-top-icon",onClick:t[1]||(t[1]=r=>z.value=!0)},{default:a(()=>[n(p,{name:"settings"})]),_:1})]),default:a(()=>[t[8]||(t[8]=c(" 设置 ",-1))]),_:1})],64)):G("",!0)]),i("div",it,[s(V).length?(m(),U(de,{key:1,expandedNames:s(N),"onUpdate:expandedNames":t[3]||(t[3]=r=>M(N)?N.value=r:null),accordion:!1},{default:a(()=>[(m(!0),v($,null,Z(s(V),r=>(m(),U(pe,{key:r.packageName,name:r.packageName},{header:a(()=>[i("div",pt,[n(I,{type:"info",size:"small"},{default:a(()=>[...t[9]||(t[9]=[c("包名",-1)])]),_:1}),i("code",null,u(`${r.appName} (${r.packageName})`),1),n(I,{size:"small"},{default:a(()=>[c(u(r.activities.length)+" Activities",1)]),_:2},1024)])]),default:a(()=>[n(de,{expandedNames:s(C),"onUpdate:expandedNames":t[2]||(t[2]=x=>M(C)?C.value=x:null),accordion:!1},{default:a(()=>[(m(!0),v($,null,Z(r.activities,x=>(m(),U(pe,{key:`${r.packageName}::${x.activityId}`,name:`${r.packageName}::${x.activityId}`},{header:a(()=>[i("div",dt,[n(I,{type:"success",size:"small"},{default:a(()=>[...t[10]||(t[10]=[c("Activity",-1)])]),_:1}),i("code",null,u(x.activityId),1),n(I,{size:"small"},{default:a(()=>[c(u(x.snapshots.length)+" snapshots",1)]),_:2},1024)])]),default:a(()=>[n(K,{vertical:"",size:6},{default:a(()=>[(m(!0),v($,null,Z(x.snapshots,o=>(m(),v("div",{key:o.id,class:Te(["rounded-8px border border-solid px-10px py-6px transition-colors",[s(B)[o.id]?"snapshot-row-viewed":"surface-card"]])},[i("div",rt,[n(E,{trigger:"hover",placement:"right-start",flip:!0,shift:!0,"onUpdate:show":w=>{w&&s(ne)(o.id)}},{trigger:a(()=>[i("div",{class:"min-w-0 inline-flex max-w-full cursor-default select-text flex-col",onMouseenter:w=>s(ne)(o.id)},[i("div",ut,[n(I,{size:"small",type:"warning"},{default:a(()=>[c(u(s(F)(o.id).format("MM-DD HH:mm:ss")),1)]),_:2},1024),s(B)[o.id]?(m(),U(I,{key:0,size:"small",type:"success"},{default:a(()=>[...t[11]||(t[11]=[c(" 已查看 ",-1)])]),_:1})):G("",!0),i("span",mt,u(we(o)),1)]),i("div",gt," 界面ID: "+u(o.activityId||"(unknown)"),1),i("div",vt,[i("span",null,"创建时间: "+u(s(F)(o.id).format("YYYY-MM-DD HH:mm:ss")),1),t[12]||(t[12]=i("span",{class:"mx-6px opacity-45"},"|",-1)),i("span",null,"导入时间: "+u(ke(o)),1)]),i("div",ft,[i("span",null,"设备: "+u(he(o)),1),t[13]||(t[13]=i("span",{class:"mx-6px opacity-45"},"|",-1)),i("span",null,"应用ID: "+u(o.appId),1),t[14]||(t[14]=i("span",{class:"mx-6px opacity-45"},"|",-1)),i("span",null,"版本代码: "+u(s(j)(o).versionCode),1),t[15]||(t[15]=i("span",{class:"mx-6px opacity-45"},"|",-1)),i("span",null,"版本号: "+u(s(j)(o).versionName||"unknown"),1)])],40,ct)]),default:a(()=>[i("div",_t,[s(ae)[o.id]?(m(),v("img",{key:0,src:s(ae)[o.id],class:"block h-auto w-auto max-h-320px max-w-80vw rounded-6px",alt:"preview"},null,8,xt)):(m(),v("div",wt,u(s(Se)[o.id]||(s(Ie)[o.id]?"预览加载中...":"暂无预览")),1))])]),_:2},1032,["onUpdate:show"]),n(l,{text:"",size:"small",class:"ml-auto shrink-0",loading:s(te).loading[o.id],onClick:w=>s(te).invoke(o)},{icon:a(()=>[n(p,{name:"code"})]),_:1},8,["loading","onClick"]),n(E,null,{trigger:a(()=>[n(l,{text:""},{icon:a(()=>[n(p,{name:"export"})]),_:1})]),default:a(()=>[n(K,{vertical:""},{default:a(()=>[n(l,{loading:s(se).loading[o.id],onClick:w=>s(se).invoke(o)},{default:a(()=>[...t[16]||(t[16]=[c(" 下载-快照 ",-1)])]),_:1},8,["loading","onClick"]),n(l,{loading:s(oe).loading[o.id],onClick:w=>s(oe).invoke(o)},{default:a(()=>[...t[17]||(t[17]=[c(" 下载-图片 ",-1)])]),_:1},8,["loading","onClick"])]),_:2},1024)]),_:2},1024),n(E,null,{trigger:a(()=>[n(l,{text:""},{icon:a(()=>[n(p,{name:"share"})]),_:1})]),default:a(()=>[n(K,{vertical:""},{default:a(()=>[n(l,{loading:s(ie).loading[o.id],onClick:w=>s(ie).invoke(o)},{default:a(()=>[...t[18]||(t[18]=[c(" 生成链接-快照 ",-1)])]),_:1},8,["loading","onClick"]),n(l,{loading:s(le).loading[o.id],onClick:w=>s(le).invoke(o)},{default:a(()=>[...t[19]||(t[19]=[c(" 生成链接-图片 ",-1)])]),_:1},8,["loading","onClick"])]),_:2},1024)]),_:2},1024),n(y,null,{trigger:a(()=>[i("span",ht,[n(l,{text:"",disabled:""},{icon:a(()=>[n(p,{name:"delete"})]),_:1})])]),default:a(()=>[t[20]||(t[20]=c(" 远端删除尚未实现 ",-1))]),_:1})])],2))),128))]),_:2},1024)]),_:2},1032,["name"]))),128))]),_:2},1032,["expandedNames"])]),_:2},1032,["name"]))),128))]),_:1},8,["expandedNames"])):(m(),v("div",lt," 暂无快照 "))])]),n(Ze,{show:s(z),"onUpdate:show":t[4]||(t[4]=r=>M(z)?z.value=r:null)},null,8,["show"])],64)}}});export{$t as default};
2
+ //# sourceMappingURL=DevicePage-ClkEpwEg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DevicePage-ClkEpwEg.js","sources":["../../src/views/DevicePage.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport DeviceControlTools from '@/components/DeviceControlTools.vue';\nimport SettingsModal from '@/components/SettingsModal.vue';\nimport { usePreviewCache } from '@/composables/usePreviewCache';\nimport { showTextDLg, waitShareAgree } from '@/utils/dialog';\nimport { useDeviceApi } from '@/utils/api';\nimport { message } from '@/utils/discrete';\nimport { errorWrap } from '@/utils/error';\nimport {\n exportSnapshotAsImportId,\n exportSnapshotAsImage,\n exportSnapshotAsImageId,\n exportSnapshotAsZip,\n} from '@/utils/export';\nimport { getAppInfo, getDevice } from '@/utils/node';\nimport { delay } from '@/utils/others';\nimport { buildGroupedSnapshots } from '@/utils/snapshotGroup';\nimport { screenshotStorage, snapshotStorage } from '@/utils/snapshot';\nimport { useBatchTask, useTask } from '@/utils/task';\nimport {\n getCustomDomainImportUrl,\n getImagUrl,\n getImportUrl,\n getOfficialImportUrl,\n} from '@/utils/url';\nimport dayjs from 'dayjs';\nimport pLimit from 'p-limit';\n\nconst router = useRouter();\nconst { api, origin, serverInfo } = useDeviceApi();\nconst { settingsStore, snapshotImportTime, snapshotViewedTime } =\n useStorageStore();\nconst link = useStorage('device_link', '');\nconst settingsDlgShow = shallowRef(false);\n\nconst normalizeDeviceUrl = (input: string): string | null => {\n const raw = input.trim();\n if (!raw) return null;\n const withProtocol = /^https?:\\/\\//i.test(raw) ? raw : `http://${raw}`;\n return errorWrap(\n () => {\n const url = new URL(withProtocol);\n if (!url.port) url.port = '8888';\n return url.origin;\n },\n () => null,\n );\n};\n\nconst connect = useTask(async () => {\n const normalized = normalizeDeviceUrl(link.value);\n if (!normalized) {\n message.error('非法设备地址');\n return;\n }\n origin.value = normalized;\n link.value = normalized;\n serverInfo.value = await api.getServerInfo();\n});\n\nconst serverTitle = computed(() => {\n if (!serverInfo.value) return '未连接设备';\n const d = serverInfo.value.device;\n const g = serverInfo.value.gkdAppInfo;\n return `${d.manufacturer} Android${d.release} - GKD${g.versionName}`;\n});\n\nonMounted(async () => {\n await delay(500);\n if (normalizeDeviceUrl(link.value)) {\n connect.invoke();\n }\n});\n\nconst snapshots = shallowRef<Snapshot[]>([]);\nwatchEffect(async () => {\n if (!serverInfo.value) return;\n document.title = serverTitle.value;\n const result = await api.getSnapshots();\n result.sort((a, b) => b.id - a.id);\n snapshots.value = result;\n});\n\nconst captureSnapshot = useTask(async () => {\n const snapshot = await api.captureSnapshot();\n const screenshot = await api.getScreenshot({ id: snapshot.id });\n await snapshotStorage.setItem(snapshot.id, snapshot);\n await screenshotStorage.setItem(snapshot.id, screenshot);\n message.success('捕获并保存快照成功');\n const result = await api.getSnapshots();\n result.sort((a, b) => b.id - a.id);\n snapshots.value = result;\n});\n\nconst downloadAllSnapshot = useTask(async () => {\n const snapshotIds = (await api.getSnapshots()).map((s) => s.id);\n const existSnapshotIds = new Set(\n (await screenshotStorage.keys()).map((s) => parseInt(s)),\n );\n const unimportSnapshotIds = snapshotIds.filter(\n (k) => !existSnapshotIds.has(k),\n );\n if (unimportSnapshotIds.length == 0) {\n message.success('没有新记录可导入');\n return;\n }\n let okCount = 0;\n const limit = pLimit(3);\n await Promise.all(\n unimportSnapshotIds.map((snapshotId) =>\n limit(async () => {\n const [newSnapshot, newScreenshot] = await Promise.all([\n api.getSnapshot({ id: snapshotId }),\n api.getScreenshot({ id: snapshotId }),\n ] as const);\n if (!newSnapshot.nodes) return;\n await Promise.all([\n snapshotStorage.setItem(snapshotId, newSnapshot),\n screenshotStorage.setItem(snapshotId, newScreenshot),\n ]);\n okCount++;\n }),\n ),\n );\n message.success(`导入${okCount}条新记录`);\n});\n\nconst ensureSnapshotStored = async (row: Snapshot) => {\n if (!(await snapshotStorage.hasItem(row.id))) {\n await snapshotStorage.setItem(\n row.id,\n await api.getSnapshot({ id: row.id }),\n );\n }\n};\nconst ensureScreenshotStored = async (row: Snapshot) => {\n if (!(await screenshotStorage.hasItem(row.id))) {\n await screenshotStorage.setItem(\n row.id,\n await api.getScreenshot({ id: row.id }),\n );\n }\n};\nconst ensureLocalSnapshotData = async (row: Snapshot) => {\n await Promise.all([ensureSnapshotStored(row), ensureScreenshotStored(row)]);\n};\n\nconst previewSnapshot = useBatchTask(\n async (row: Snapshot) => {\n await ensureLocalSnapshotData(row);\n snapshotViewedTime[row.id] = Date.now();\n window.open(\n router.resolve({\n name: 'snapshot',\n params: { snapshotId: row.id },\n }).href,\n );\n },\n (r) => r.id,\n);\n\nconst getAutoExpandedNames = (\n groups: ReturnType<typeof buildGroupedSnapshots>,\n packageLimit = 4,\n activityLimit = 3,\n) => {\n const packageNames = groups.slice(0, packageLimit).map((g) => g.packageName);\n const activityNames = groups\n .slice(0, packageLimit)\n .flatMap((g) =>\n g.activities\n .slice(0, activityLimit)\n .map((a) => `${g.packageName}::${a.activityId}`),\n );\n return { packageNames, activityNames };\n};\n\nconst groupedSnapshots = computed(() => {\n return buildGroupedSnapshots(snapshots.value, snapshotImportTime);\n});\n\nconst getItemAppName = (item: Snapshot) => getAppInfo(item).name || item.appId;\nconst getItemDeviceText = (item: Snapshot) =>\n `${getDevice(item).manufacturer} Android ${getDevice(item).release || ''}`;\nconst getItemImportTimeText = (item: Snapshot) =>\n dayjs(snapshotImportTime[item.id] || item.id).format('YYYY-MM-DD HH:mm:ss');\n\nconst previewCacheLimit = computed(() =>\n settingsStore.lowMemoryMode ? 6 : 24,\n);\nconst { previewUrlMap, previewLoadingMap, previewErrorMap, ensurePreview } =\n usePreviewCache({\n getScreenshot: async (id) => {\n const local = await screenshotStorage.getItem(id);\n return local || (await api.getScreenshot({ id }));\n },\n cacheLimit: previewCacheLimit,\n });\n\nconst downloadSnapshotZip = useBatchTask(\n async (row: Snapshot) => {\n await ensureLocalSnapshotData(row);\n await exportSnapshotAsZip(row);\n },\n (r) => r.id,\n);\nconst downloadSnapshotImage = useBatchTask(\n async (row: Snapshot) => {\n await ensureScreenshotStored(row);\n await exportSnapshotAsImage(row);\n },\n (r) => r.id,\n);\nconst shareSnapshotZipUrl = useBatchTask(\n async (row: Snapshot) => {\n await waitShareAgree();\n await ensureLocalSnapshotData(row);\n const importId = await exportSnapshotAsImportId(row);\n showTextDLg({\n title: '分享链接',\n content: settingsStore.shareUseOfficialImportDomain\n ? getOfficialImportUrl(importId)\n : getImportUrl(importId),\n extraContent: getCustomDomainImportUrl(importId),\n });\n },\n (r) => r.id,\n);\nconst shareSnapshotImageUrl = useBatchTask(\n async (row: Snapshot) => {\n await waitShareAgree();\n await ensureScreenshotStored(row);\n const imageId = await exportSnapshotAsImageId(row);\n showTextDLg({\n title: '分享链接',\n content: getImagUrl(imageId),\n });\n },\n (r) => r.id,\n);\n\nconst expandedPackageNames = shallowRef<(string | number)[]>([]);\nconst expandedActivityNames = shallowRef<(string | number)[]>([]);\nwatchEffect(() => {\n if (!settingsStore.autoExpandSnapshots) {\n expandedPackageNames.value = [];\n expandedActivityNames.value = [];\n return;\n }\n const { packageNames, activityNames } = getAutoExpandedNames(\n groupedSnapshots.value,\n 5,\n 4,\n );\n expandedPackageNames.value = packageNames;\n expandedActivityNames.value = activityNames;\n});\n</script>\n\n<template>\n <div page-size flex flex-col p-10px gap-10px>\n <div flex items-center gap-24px>\n <RouterLink to=\"/\" class=\"flex ml-12px\" title=\"首页\">\n <NButton text style=\"--n-icon-size: var(--app-icon-size)\">\n <template #icon><SvgIcon name=\"home\" /></template>\n </NButton>\n </RouterLink>\n <NInputGroup>\n <NInput\n v-model:value=\"link\"\n placeholder=\"请输入设备地址 默认端口:8888\"\n class=\"gkd_code\"\n :style=\"{ width: '260px' }\"\n @keyup.enter=\"connect.invoke\"\n />\n <NButton :loading=\"connect.loading\" @click=\"connect.invoke\"\n >刷新连接</NButton\n >\n <div\n v-if=\"serverInfo\"\n gkd_code\n pl-16px\n whitespace-nowrap\n flex\n items-center\n >\n {{ serverTitle }}\n </div>\n </NInputGroup>\n <template v-if=\"serverInfo\">\n <NTooltip>\n <template #trigger>\n <NButton\n text\n style=\"--n-icon-size: var(--app-icon-size)\"\n class=\"device-top-icon\"\n :loading=\"captureSnapshot.loading\"\n @click=\"captureSnapshot.invoke\"\n >\n <SvgIcon name=\"Snapshot\" />\n </NButton>\n </template>\n 捕获快照\n </NTooltip>\n\n <DeviceControlTools />\n\n <NTooltip>\n <template #trigger>\n <NButton\n text\n style=\"--n-icon-size: var(--app-icon-size)\"\n class=\"device-top-icon\"\n :loading=\"downloadAllSnapshot.loading\"\n @click=\"downloadAllSnapshot.invoke\"\n >\n <SvgIcon name=\"Down-all\" />\n </NButton>\n </template>\n 下载所有快照\n </NTooltip>\n\n <NTooltip>\n <template #trigger>\n <NButton\n text\n style=\"--n-icon-size: var(--app-icon-size)\"\n class=\"device-top-icon\"\n @click=\"settingsDlgShow = true\"\n >\n <SvgIcon name=\"settings\" />\n </NButton>\n </template>\n 设置\n </NTooltip>\n </template>\n </div>\n\n <div class=\"flex-1 min-h-0 overflow-auto pr-6px\">\n <div v-if=\"!groupedSnapshots.length\" py-40px text-center opacity-70>\n 暂无快照\n </div>\n <NCollapse\n v-else\n v-model:expandedNames=\"expandedPackageNames\"\n :accordion=\"false\"\n >\n <NCollapseItem\n v-for=\"group in groupedSnapshots\"\n :key=\"group.packageName\"\n :name=\"group.packageName\"\n >\n <template #header>\n <div flex items-center gap-8px>\n <NTag type=\"info\" size=\"small\">包名</NTag>\n <code>{{ `${group.appName} (${group.packageName})` }}</code>\n <NTag size=\"small\">{{ group.activities.length }} Activities</NTag>\n </div>\n </template>\n <NCollapse\n v-model:expandedNames=\"expandedActivityNames\"\n :accordion=\"false\"\n >\n <NCollapseItem\n v-for=\"activity in group.activities\"\n :key=\"`${group.packageName}::${activity.activityId}`\"\n :name=\"`${group.packageName}::${activity.activityId}`\"\n >\n <template #header>\n <div flex items-center gap-8px>\n <NTag type=\"success\" size=\"small\">Activity</NTag>\n <code>{{ activity.activityId }}</code>\n <NTag size=\"small\"\n >{{ activity.snapshots.length }} snapshots</NTag\n >\n </div>\n </template>\n <NSpace vertical :size=\"6\">\n <div\n v-for=\"item in activity.snapshots\"\n :key=\"item.id\"\n class=\"rounded-8px border border-solid px-10px py-6px transition-colors\"\n :class=\"[\n snapshotViewedTime[item.id]\n ? 'snapshot-row-viewed'\n : 'surface-card',\n ]\"\n >\n <div flex items-start gap-10px flex-wrap>\n <NPopover\n trigger=\"hover\"\n placement=\"right-start\"\n :flip=\"true\"\n :shift=\"true\"\n @update:show=\"\n if ($event) {\n ensurePreview(item.id);\n }\n \"\n >\n <template #trigger>\n <div\n class=\"min-w-0 inline-flex max-w-full cursor-default select-text flex-col\"\n @mouseenter=\"ensurePreview(item.id)\"\n >\n <div flex items-center gap-6px leading-18px>\n <NTag size=\"small\" type=\"warning\">{{\n dayjs(item.id).format('MM-DD HH:mm:ss')\n }}</NTag>\n <NTag\n v-if=\"snapshotViewedTime[item.id]\"\n size=\"small\"\n type=\"success\"\n >\n 已查看\n </NTag>\n <span class=\"truncate font-600\">{{\n getItemAppName(item)\n }}</span>\n </div>\n <div text-12px mt-2px class=\"font-600\">\n 界面ID: {{ item.activityId || '(unknown)' }}\n </div>\n <div mt-4px text-12px class=\"opacity-75\">\n <span\n >创建时间:\n {{\n dayjs(item.id).format('YYYY-MM-DD HH:mm:ss')\n }}</span\n >\n <span class=\"mx-6px opacity-45\">|</span>\n <span\n >导入时间: {{ getItemImportTimeText(item) }}</span\n >\n </div>\n <div mt-2px text-12px class=\"opacity-70\">\n <span>设备: {{ getItemDeviceText(item) }}</span>\n <span class=\"mx-6px opacity-45\">|</span>\n <span>应用ID: {{ item.appId }}</span>\n <span class=\"mx-6px opacity-45\">|</span>\n <span\n >版本代码:\n {{ getAppInfo(item).versionCode }}</span\n >\n <span class=\"mx-6px opacity-45\">|</span>\n <span\n >版本号:\n {{\n getAppInfo(item).versionName || 'unknown'\n }}</span\n >\n </div>\n </div>\n </template>\n <div class=\"inline-block w-fit max-w-90vw\">\n <img\n v-if=\"previewUrlMap[item.id]\"\n :src=\"previewUrlMap[item.id]\"\n class=\"block h-auto w-auto max-h-320px max-w-80vw rounded-6px\"\n alt=\"preview\"\n />\n <div v-else py-20px text-center opacity-70>\n {{\n previewErrorMap[item.id] ||\n (previewLoadingMap[item.id]\n ? '预览加载中...'\n : '暂无预览')\n }}\n </div>\n </div>\n </NPopover>\n <NButton\n text\n size=\"small\"\n class=\"ml-auto shrink-0\"\n :loading=\"previewSnapshot.loading[item.id]\"\n @click=\"previewSnapshot.invoke(item)\"\n >\n <template #icon><SvgIcon name=\"code\" /></template>\n </NButton>\n <NPopover>\n <template #trigger>\n <NButton text>\n <template #icon><SvgIcon name=\"export\" /></template>\n </NButton>\n </template>\n <NSpace vertical>\n <NButton\n :loading=\"downloadSnapshotZip.loading[item.id]\"\n @click=\"downloadSnapshotZip.invoke(item)\"\n >\n 下载-快照\n </NButton>\n <NButton\n :loading=\"downloadSnapshotImage.loading[item.id]\"\n @click=\"downloadSnapshotImage.invoke(item)\"\n >\n 下载-图片\n </NButton>\n </NSpace>\n </NPopover>\n <NPopover>\n <template #trigger>\n <NButton text>\n <template #icon><SvgIcon name=\"share\" /></template>\n </NButton>\n </template>\n <NSpace vertical>\n <NButton\n :loading=\"shareSnapshotZipUrl.loading[item.id]\"\n @click=\"shareSnapshotZipUrl.invoke(item)\"\n >\n 生成链接-快照\n </NButton>\n <NButton\n :loading=\"shareSnapshotImageUrl.loading[item.id]\"\n @click=\"shareSnapshotImageUrl.invoke(item)\"\n >\n 生成链接-图片\n </NButton>\n </NSpace>\n </NPopover>\n <NTooltip>\n <template #trigger>\n <span class=\"inline-flex\">\n <NButton text disabled>\n <template #icon><SvgIcon name=\"delete\" /></template>\n </NButton>\n </span>\n </template>\n 远端删除尚未实现\n </NTooltip>\n </div>\n </div>\n </NSpace>\n </NCollapseItem>\n </NCollapse>\n </NCollapseItem>\n </NCollapse>\n </div>\n </div>\n\n <SettingsModal v-model:show=\"settingsDlgShow\" />\n</template>\n"],"names":["router","useRouter","api","origin","serverInfo","useDeviceApi","settingsStore","snapshotImportTime","snapshotViewedTime","useStorageStore","link","useStorage","settingsDlgShow","shallowRef","normalizeDeviceUrl","input","raw","withProtocol","errorWrap","url","connect","useTask","normalized","message","serverTitle","computed","d","g","onMounted","delay","snapshots","watchEffect","result","a","b","captureSnapshot","snapshot","screenshot","snapshotStorage","screenshotStorage","downloadAllSnapshot","snapshotIds","s","existSnapshotIds","unimportSnapshotIds","k","okCount","limit","pLimit","snapshotId","newSnapshot","newScreenshot","ensureSnapshotStored","row","ensureScreenshotStored","ensureLocalSnapshotData","previewSnapshot","useBatchTask","r","getAutoExpandedNames","groups","packageLimit","activityLimit","packageNames","activityNames","groupedSnapshots","buildGroupedSnapshots","getItemAppName","item","getAppInfo","getItemDeviceText","getDevice","getItemImportTimeText","dayjs","previewCacheLimit","previewUrlMap","previewLoadingMap","previewErrorMap","ensurePreview","usePreviewCache","id","downloadSnapshotZip","exportSnapshotAsZip","downloadSnapshotImage","exportSnapshotAsImage","shareSnapshotZipUrl","waitShareAgree","importId","exportSnapshotAsImportId","showTextDLg","getOfficialImportUrl","getImportUrl","getCustomDomainImportUrl","shareSnapshotImageUrl","imageId","exportSnapshotAsImageId","getImagUrl","expandedPackageNames","expandedActivityNames","_createElementVNode","_hoisted_1","_hoisted_2","_createVNode","_component_RouterLink","_component_NButton","_component_SvgIcon","_component_NInputGroup","_component_NInput","_unref","$event","_withKeys","_cache","_createElementBlock","_hoisted_3","_toDisplayString","_Fragment","_component_NTooltip","DeviceControlTools","_hoisted_4","_createBlock","_component_NCollapse","_renderList","group","_component_NCollapseItem","_hoisted_6","_component_NTag","_createTextVNode","_openBlock","activity","_hoisted_7","_component_NSpace","_hoisted_8","_component_NPopover","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_17","_hoisted_18","_hoisted_5","SettingsModal"],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import{c as Se,a as O,f as Ke,b as $e,d as Pe,h as R,N as Qe,T as qe,u as We,e as Le,g as Ze,i as M,w as Ee,s as Fe,r as Xe,p as Je,j as et,k as tt,l as nt,o as st,m as ce,n as at,q as ze,t as b,v as l,x as a,y as s,_ as ot,z as n,A as it,B as lt,C as k,D as E,E as rt,F as d,G as v,H as Q,I as q,J as me,K as fe,L as dt,M as ve,O as ne,P as ut,Q as pt,R as I,S as De,U as ct,V as mt,W as ft,X as vt,Y as gt,Z as ht,$ as kt}from"./index-DfAptoUr.js";import{_ as xt}from"./ActionCard.vue_vue_type_script_setup_true_lang-CzzwrEAn.js";import{u as B,_ as yt,a as _t,b as wt,c as Ct,d as bt,e as It,f as Nt,g as St,h as $t,w as Re,i as zt,s as Me,j as Dt}from"./SettingsModal.vue_vue_type_script_setup_true_lang-Dzypo389.js";import{u as Rt,b as Mt}from"./snapshotGroup-DhERMZkD.js";import{i as Tt,a as Ut}from"./import-ohlNKANL.js";import{u as Pt,_ as Lt,a as Et,g as se,b as Te}from"./node-TLy2IyRG.js";import{s as Bt,a as Ue,b as At}from"./snapshot-D02dgTNQ.js";const Vt=Se([Se("@keyframes spin-rotate",`
2
+ from {
3
+ transform: rotate(0);
4
+ }
5
+ to {
6
+ transform: rotate(360deg);
7
+ }
8
+ `),O("spin-container",`
9
+ position: relative;
10
+ `,[O("spin-body",`
11
+ position: absolute;
12
+ top: 50%;
13
+ left: 50%;
14
+ transform: translateX(-50%) translateY(-50%);
15
+ `,[Ke()])]),O("spin-body",`
16
+ display: inline-flex;
17
+ align-items: center;
18
+ justify-content: center;
19
+ flex-direction: column;
20
+ `),O("spin",`
21
+ display: inline-flex;
22
+ height: var(--n-size);
23
+ width: var(--n-size);
24
+ font-size: var(--n-size);
25
+ color: var(--n-color);
26
+ `,[$e("rotate",`
27
+ animation: spin-rotate 2s linear infinite;
28
+ `)]),O("spin-description",`
29
+ display: inline-block;
30
+ font-size: var(--n-font-size);
31
+ color: var(--n-text-color);
32
+ transition: color .3s var(--n-bezier);
33
+ margin-top: 8px;
34
+ `),O("spin-content",`
35
+ opacity: 1;
36
+ transition: opacity .3s var(--n-bezier);
37
+ pointer-events: all;
38
+ `,[$e("spinning",`
39
+ user-select: none;
40
+ -webkit-user-select: none;
41
+ pointer-events: none;
42
+ opacity: var(--n-opacity-spinning);
43
+ `)])]),Ht={small:20,medium:18,large:16},Ot=Object.assign(Object.assign({},Le.props),{contentClass:String,contentStyle:[Object,String],description:String,stroke:String,size:{type:[String,Number],default:"medium"},show:{type:Boolean,default:!0},strokeWidth:Number,rotate:{type:Boolean,default:!0},spinning:{type:Boolean,validator:()=>!0,default:void 0},delay:Number}),Yt=Pe({name:"Spin",props:Ot,slots:Object,setup(y){const{mergedClsPrefixRef:N,inlineThemeDisabled:x}=We(y),p=Le("Spin","-spin",Vt,Fe,y,N),S=M(()=>{const{size:f}=y,{common:{cubicBezierEaseInOut:g},self:z}=p.value,{opacitySpinning:A,color:T,textColor:U}=z,ae=typeof f=="number"?Je(f):z[et("size",f)];return{"--n-bezier":g,"--n-opacity-spinning":A,"--n-size":ae,"--n-color":T,"--n-text-color":U}}),w=x?Ze("spin",M(()=>{const{size:f}=y;return typeof f=="number"?String(f):f[0]}),S,y):void 0,$=Pt(y,["spinning","show"]),C=Xe(!1);return Ee(f=>{let g;if($.value){const{delay:z}=y;if(z){g=window.setTimeout(()=>{C.value=!0},z),f(()=>{clearTimeout(g)});return}}C.value=$.value}),{mergedClsPrefix:N,active:C,mergedStrokeWidth:M(()=>{const{strokeWidth:f}=y;if(f!==void 0)return f;const{size:g}=y;return Ht[typeof g=="number"?"medium":g]}),cssVars:x?void 0:S,themeClass:w==null?void 0:w.themeClass,onRender:w==null?void 0:w.onRender}},render(){var y,N;const{$slots:x,mergedClsPrefix:p,description:S}=this,w=x.icon&&this.rotate,$=(S||x.description)&&R("div",{class:`${p}-spin-description`},S||((y=x.description)===null||y===void 0?void 0:y.call(x))),C=x.icon?R("div",{class:[`${p}-spin-body`,this.themeClass]},R("div",{class:[`${p}-spin`,w&&`${p}-spin--rotate`],style:x.default?"":this.cssVars},x.icon()),$):R("div",{class:[`${p}-spin-body`,this.themeClass]},R(Qe,{clsPrefix:p,style:x.default?"":this.cssVars,stroke:this.stroke,"stroke-width":this.mergedStrokeWidth,class:`${p}-spin`}),$);return(N=this.onRender)===null||N===void 0||N.call(this),x.default?R("div",{class:[`${p}-spin-container`,this.themeClass],style:this.cssVars},R("div",{class:[`${p}-spin-content`,this.active&&`${p}-spin-content--spinning`,this.contentClass],style:this.contentStyle},x),R(qe,{name:"fade-in-transition"},{default:()=>this.active?C:null})):C}}),jt={flex:"","flex-col":"","p-10px":"","gap-10px":"","page-size":""},Gt={flex:""},Kt={"h-full":"",flex:"","flex-items-center":""},Qt={flex:"","gap-24px":"","items-center":"","pr-8px":"",class:"home-topbar-icons"},qt={flex:"",href:"https://github.com/orgs/gkd-kit/discussions",target:"_blank",rel:"noopener noreferrer"},Wt={flex:"",href:"https://github.com/cjy0812/inspect-plus",target:"_blank",rel:"noopener noreferrer"},Zt={class:"flex-1 min-h-0 overflow-auto pr-6px"},Ft={key:0,"py-40px":"","text-center":"","opacity-70":""},Xt={flex:"","items-center":"","gap-8px":""},Jt={flex:"","items-center":"","gap-8px":""},en={flex:"","items-start":"","gap-10px":"","flex-wrap":""},tn=["onMouseenter"],nn={flex:"","items-center":"","gap-6px":"","leading-18px":""},sn={class:"truncate font-600"},an={"text-12px":"","mt-2px":"",class:"font-600"},on={"text-11px":"","opacity-65":"","leading-18px":"",flex:"","flex-wrap":"","gap-x-10px":""},ln={"mr-10px":""},rn={"text-11px":"","opacity-65":"","leading-18px":"",flex:"","flex-wrap":"","gap-x-10px":""},dn={"mr-10px":""},un={"mr-10px":""},pn={"mr-10px":""},cn={class:"inline-block w-fit max-w-90vw"},mn=["src"],fn={key:1,"py-20px":"","text-center":"","opacity-70":""},wn=Pe({__name:"HomePage",setup(y){const N=tt(),x=nt(),{settingsStore:p,snapshotImportTime:S,snapshotViewedTime:w}=pt(),$=I([]),C=I(!0),f=async()=>{C.value=!0,$.value=(await Bt.getAllItems()).reverse(),h.value=[],C.value=!1};st(f);const g=De({query:"",actualQuery:"",updateQuery:()=>{g.actualQuery=g.query.trim(),h.value=[]}}),z=M(()=>{const t=g.actualQuery;return $.value.filter(e=>{var c;return t?(se(e).name||"").includes(t)||(e.appId||"").includes(t)||(((c=e.appInfo)==null?void 0:c.id)||"").includes(t)||(e.activityId||"").includes(t):!0})}),A=M(()=>Mt(z.value,S)),T=I([]),U=I([]);Ee(()=>{if(!p.autoExpandSnapshots){T.value=[],U.value=[];return}T.value=A.value.slice(0,4).map(t=>t.packageName),U.value=A.value.slice(0,4).flatMap(t=>t.activities.slice(0,3).map(e=>`${t.packageName}::${e.activityId}`))});const ae=t=>{x.push({name:"snapshot",params:{snapshotId:t},query:ct(N.query,["str","gkd"])})},oe=B(async t=>{await Tt(t)&&await f()});ce(document.body,"drop",async t=>{t.preventDefault(),await oe.invoke(at(t))}),ce(document.body,"dragover",t=>t.preventDefault());const P=I(!1),V=I(""),W=B(async()=>{const t=V.value.trim().split(`
44
+ `).map(c=>c.trim()).filter(c=>kt(c));t.length==0||!await Ut(t)||(await f(),V.value="")});ce(document.body,"paste",t=>{var J,L;if(P.value)return;const e=t.target,c=((J=e.getAttribute)==null?void 0:J.call(e,"class"))||(typeof e.className=="string"?e.className:"");if(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||(L=e.classList)!=null&&L.contains("input")||c.includes("input"))return;const u=t.clipboardData;if(!u)return;const r=(u.getData("text")||"").trim();(r.startsWith("https://")||r.startsWith("http://"))&&(P.value=!0,setTimeout(()=>{V.value=r}))});const h=I([]),ie=M(()=>new Set(h.value)),Y=M(()=>z.value.map(t=>t.id)),Z=t=>t.snapshots.map(e=>e.id),le=t=>t.activities.flatMap(e=>Z(e)),H=t=>{if(!t.length)return{checked:!1,indeterminate:!1};let e=0;return t.forEach(c=>{ie.value.has(c)&&e++}),{checked:e==t.length,indeterminate:e>0&&e<t.length}},re=(t,e)=>{if(e){const u=new Set(h.value);t.forEach(r=>u.add(r)),h.value=[...u];return}const c=new Set(t);h.value=h.value.filter(u=>!c.has(u))},Be=(t,e)=>{e?ie.value.has(t)||(h.value=[...h.value,t]):h.value=h.value.filter(c=>c!=t)},F=()=>Promise.all(h.value.map(t=>Ue.getItem(t))),Ae=B(async()=>{await new Promise((t,e)=>{ht.warning({title:"删除",content:`是否批量删除 ${h.value.length} 个快照`,negativeText:"取消",positiveText:"确认",onClose:e,onEsc:e,onMaskClick:e,onNegativeClick:e,onPositiveClick:t})}),await Promise.all(h.value.map(t=>Ue.removeItem(t))),await f()}),ge=B(async()=>{await $t(await F())}),he=B(async()=>{await St(await F())}),ke=B(async()=>{await Re();const t=await Dt(await F());Me({content:t.map(e=>gt(e)).join(`
45
+ `)+`
46
+ `})}),xe=B(async()=>{await Re();const t=await zt(await F()),e=t.map(u=>p.shareUseOfficialImportDomain?mt(u):ft(u)),c=t.map(u=>vt(u)).filter(u=>!!u);Me({content:e.join(`
47
+ `)+`
48
+ `,extraContent:c.length?c.join(`
49
+ `)+`
50
+ `:""})}),X=I(!1),ye=I(),_=De({show:!1,key:"",title:"",value:""}),de=()=>(p.groupRemarks||(p.groupRemarks={}),p.groupRemarks),j=t=>(de()[t]||"").trim(),ue=t=>`package:${t}`,pe=(t,e)=>`activity:${t}::${e}`,_e=(t,e)=>{_.show=!0,_.key=t,_.title=e,_.value=j(t)},Ve=()=>{const t=_.key;if(!t)return;const e=_.value.trim();e?de()[t]=e:delete de()[t],_.show=!1},He=M(()=>p.lowMemoryMode?6:24),{previewUrlMap:we,previewLoadingMap:Oe,previewErrorMap:Ye,ensurePreview:Ce}=Rt({getScreenshot:t=>At.getItem(t),cacheLimit:He});return(t,e)=>{const c=ot,u=ze("SvgIcon"),r=lt,J=yt,L=rt,G=_t,ee=Lt,te=Et,je=ze("RouterLink"),D=It,be=bt,Ie=Ct,Ge=Yt,Ne=ut;return k(),b(q,null,[l("div",jt,[l("div",Gt,[a(G,null,{default:s(()=>[a(J,null,{default:s(()=>[a(c,{value:n(g).query,"onUpdate:value":e[0]||(e[0]=o=>n(g).query=o),placeholder:"请输入应用名/应用ID/界面ID",clearable:"",class:"min-w-320px",onKeyup:it(n(g).updateQuery,["enter"]),onChange:n(g).updateQuery},null,8,["value","onKeyup","onChange"]),a(r,{onClick:n(g).updateQuery},{icon:s(()=>[a(u,{name:"search"})]),_:1},8,["onClick"])]),_:1}),n(Y).length?(k(),E(L,{key:0,checked:H(n(Y)).checked,indeterminate:H(n(Y)).indeterminate,"onUpdate:checked":e[1]||(e[1]=o=>re(n(Y),o))},{default:s(()=>[d(v(`全选当前结果 (${n(Y).length})`),1)]),_:1},8,["checked","indeterminate"])):Q("",!0),n(h).length?(k(),b(q,{key:1},[a(ee,null,{trigger:s(()=>[a(r,null,{default:s(()=>[...e[19]||(e[19]=[d("批量下载",-1)])]),_:1})]),default:s(()=>[a(G,{vertical:""},{default:s(()=>[a(r,{loading:n(he).loading,onClick:n(he).invoke},{default:s(()=>[...e[20]||(e[20]=[d("批量下载-快照",-1)])]),_:1},8,["loading","onClick"]),a(r,{loading:n(ge).loading,onClick:n(ge).invoke},{default:s(()=>[...e[21]||(e[21]=[d("批量下载-图片",-1)])]),_:1},8,["loading","onClick"])]),_:1})]),_:1}),a(ee,null,{trigger:s(()=>[a(r,null,{default:s(()=>[...e[22]||(e[22]=[d("批量分享",-1)])]),_:1})]),default:s(()=>[a(G,{vertical:""},{default:s(()=>[a(r,{loading:n(xe).loading,onClick:n(xe).invoke},{default:s(()=>[...e[23]||(e[23]=[d("批量生成链接-快照",-1)])]),_:1},8,["loading","onClick"]),a(r,{loading:n(ke).loading,onClick:n(ke).invoke},{default:s(()=>[...e[24]||(e[24]=[d("批量生成链接-图片",-1)])]),_:1},8,["loading","onClick"])]),_:1})]),_:1}),a(r,{onClick:n(Ae).invoke},{default:s(()=>[...e[25]||(e[25]=[d("批量删除",-1)])]),_:1},8,["onClick"]),l("div",Kt,v(`已选中 ${n(h).length} 个快照`),1)],64)):Q("",!0)]),_:1}),e[32]||(e[32]=l("div",{"flex-1":""},null,-1)),l("div",Qt,[a(te,null,{trigger:s(()=>[a(r,{text:"",onClick:e[2]||(e[2]=o=>X.value=!0)},{default:s(()=>[a(u,{name:"settings"})]),_:1})]),default:s(()=>[e[26]||(e[26]=d(" 设置 ",-1))]),_:1}),a(ee,null,{trigger:s(()=>[a(r,{text:""},{default:s(()=>[a(u,{name:"import"})]),_:1})]),default:s(()=>[a(G,{vertical:""},{default:s(()=>[a(r,{loading:n(oe).loading,onClick:e[3]||(e[3]=o=>n(oe).invoke())},{default:s(()=>[...e[27]||(e[27]=[d("导入本地文件",-1)])]),_:1},8,["loading"]),a(r,{loading:n(W).loading,onClick:e[4]||(e[4]=o=>P.value=!0)},{default:s(()=>[...e[28]||(e[28]=[d("导入网络文件",-1)])]),_:1},8,["loading"])]),_:1})]),_:1}),a(te,null,{trigger:s(()=>[a(je,{flex:"",to:"/device"},{default:s(()=>[a(r,{text:""},{default:s(()=>[a(u,{name:"device"})]),_:1})]),_:1})]),default:s(()=>[e[29]||(e[29]=d(" 连接设备 ",-1))]),_:1}),a(wt),a(te,null,{trigger:s(()=>[l("a",qt,[a(r,{text:""},{default:s(()=>[a(u,{name:"discussion"})]),_:1})])]),default:s(()=>[e[30]||(e[30]=d(" 讨论交流 ",-1))]),_:1}),a(te,null,{trigger:s(()=>[l("a",Wt,[a(r,{text:""},{default:s(()=>[a(u,{name:"github"})]),_:1})])]),default:s(()=>[e[31]||(e[31]=d(" Github ",-1))]),_:1})])]),l("div",Zt,[a(Ge,{show:n(C),class:"h-full"},{default:s(()=>[!n(C)&&!n(A).length?(k(),b("div",Ft," 未找到匹配快照 ")):(k(),E(Ie,{key:1,expandedNames:n(T),"onUpdate:expandedNames":e[8]||(e[8]=o=>me(T)?T.value=o:null),accordion:!1,displayDirective:n(p).lowMemoryMode?"if":"show"},{default:s(()=>[(k(!0),b(q,null,fe(n(A),o=>(k(),E(be,{key:o.packageName,name:o.packageName},{header:s(()=>[l("div",Xt,[a(L,{checked:H(le(o)).checked,indeterminate:H(le(o)).indeterminate,onClick:e[5]||(e[5]=ne(()=>{},["stop"])),"onUpdate:checked":m=>re(le(o),m)},null,8,["checked","indeterminate","onUpdate:checked"]),a(D,{type:"info",size:"small"},{default:s(()=>[...e[33]||(e[33]=[d("应用",-1)])]),_:1}),l("code",null,v(`${o.appName} (${o.packageName})`),1),a(D,{size:"small"},{default:s(()=>[d(v(o.activities.length)+" 个界面",1)]),_:2},1024),j(ue(o.packageName))?(k(),E(D,{key:0,size:"small",class:"max-w-240px"},{default:s(()=>[d(v(j(ue(o.packageName))),1)]),_:2},1024)):Q("",!0),a(r,{text:"",size:"tiny",onClick:ne(m=>_e(ue(o.packageName),`应用备注: ${o.packageName}`),["stop"])},{default:s(()=>[...e[34]||(e[34]=[d(" 备注 ",-1)])]),_:1},8,["onClick"])])]),default:s(()=>[a(Ie,{expandedNames:n(U),"onUpdate:expandedNames":e[7]||(e[7]=m=>me(U)?U.value=m:null),accordion:!1,displayDirective:n(p).lowMemoryMode?"if":"show"},{default:s(()=>[(k(!0),b(q,null,fe(o.activities,m=>(k(),E(be,{key:`${o.packageName}::${m.activityId}`,name:`${o.packageName}::${m.activityId}`},{header:s(()=>[l("div",Jt,[a(L,{checked:H(Z(m)).checked,indeterminate:H(Z(m)).indeterminate,onClick:e[6]||(e[6]=ne(()=>{},["stop"])),"onUpdate:checked":i=>re(Z(m),i)},null,8,["checked","indeterminate","onUpdate:checked"]),a(D,{type:"success",size:"small"},{default:s(()=>[...e[35]||(e[35]=[d("Activity",-1)])]),_:1}),l("code",null,v(m.activityId),1),a(D,{size:"small"},{default:s(()=>[d(v(m.snapshots.length)+" 个快照",1)]),_:2},1024),j(pe(o.packageName,m.activityId))?(k(),E(D,{key:0,size:"small",class:"max-w-240px"},{default:s(()=>[d(v(j(pe(o.packageName,m.activityId))),1)]),_:2},1024)):Q("",!0),a(r,{text:"",size:"tiny",onClick:ne(i=>_e(pe(o.packageName,m.activityId),`界面备注: ${m.activityId}`),["stop"])},{default:s(()=>[...e[36]||(e[36]=[d(" 备注 ",-1)])]),_:1},8,["onClick"])])]),default:s(()=>[a(G,{vertical:"",size:6},{default:s(()=>[(k(!0),b(q,null,fe(m.snapshots,i=>(k(),b("div",{key:i.id,class:dt(["rounded-8px border border-solid px-10px py-6px transition-colors",[n(w)[i.id]?"snapshot-row-viewed":"surface-card"]])},[l("div",en,[a(L,{checked:n(ie).has(i.id),"onUpdate:checked":K=>Be(i.id,K)},null,8,["checked","onUpdate:checked"]),a(ee,{trigger:"hover",placement:"right-start",flip:!0,shift:!0,"onUpdate:show":K=>{K&&n(Ce)(i.id)}},{trigger:s(()=>[l("div",{class:"min-w-0 inline-flex max-w-full cursor-default select-text flex-col",onMouseenter:K=>n(Ce)(i.id)},[l("div",nn,[a(D,{size:"small",type:"warning"},{default:s(()=>[d(v(n(ve)(i.id).format("MM-DD HH:mm:ss")),1)]),_:2},1024),n(w)[i.id]?(k(),E(D,{key:0,size:"small",type:"success"},{default:s(()=>[...e[37]||(e[37]=[d("已查看",-1)])]),_:1})):Q("",!0),l("span",sn,v(n(se)(i).name||i.appId),1)]),l("div",an," 界面ID: "+v(i.activityId||"(unknown)"),1),l("div",on,[l("span",ln,"创建: "+v(n(ve)(i.id).format("YYYY-MM-DD HH:mm:ss")),1),l("span",null,"导入: "+v(n(ve)(n(S)[i.id]||i.id).format("YYYY-MM-DD HH:mm:ss")),1)]),l("div",rn,[l("span",dn,"设备: "+v(`${n(Te)(i).manufacturer} Android ${n(Te)(i).release||""}`),1),l("span",un,"应用ID: "+v(i.appId),1),l("span",pn,"版本代码: "+v(n(se)(i).versionCode),1),l("span",null,"版本号: "+v(n(se)(i).versionName||"unknown"),1)])],40,tn)]),default:s(()=>[l("div",cn,[n(we)[i.id]?(k(),b("img",{key:0,src:n(we)[i.id],class:"block h-auto w-auto max-h-320px max-w-80vw rounded-6px",alt:"preview"},null,8,mn)):(k(),b("div",fn,v(n(Ye)[i.id]||(n(Oe)[i.id]?"预览加载中...":"暂无预览")),1))])]),_:2},1032,["onUpdate:show"]),a(r,{text:"",size:"small",class:"ml-auto shrink-0",onClick:K=>ae(i.id)},{icon:s(()=>[a(u,{name:"code"})]),_:1},8,["onClick"]),a(xt,{snapshot:i,showPreview:!1,onDelete:f},null,8,["snapshot"])])],2))),128))]),_:2},1024)]),_:2},1032,["name"]))),128))]),_:2},1032,["expandedNames","displayDirective"])]),_:2},1032,["name"]))),128))]),_:1},8,["expandedNames","displayDirective"]))]),_:1},8,["show"])])]),a(Ne,{show:n(P),preset:"dialog",title:"导入网络文件",showIcon:!1,positiveText:"确认",negativeText:"取消",style:{width:"800px"},loading:n(W).loading,onPositiveClick:n(W).invoke,onNegativeClick:e[10]||(e[10]=o=>P.value=!1),onClose:e[11]||(e[11]=o=>P.value=!1),onEsc:e[12]||(e[12]=o=>P.value=!1),onAfterEnter:e[13]||(e[13]=o=>{var m;return(m=n(ye))==null?void 0:m.focus()}),onAfterLeave:e[14]||(e[14]=o=>V.value="")},{default:s(()=>[a(c,{ref_key:"inputImportRef",ref:ye,value:n(V),type:"textarea",placeholder:`1.支持 ZIP 文件链接
51
+ 2.支持快照分享链接
52
+ 每行一个
53
+ 空白行自动忽略
54
+ 非法链接行自动忽略`,autosize:{minRows:8,maxRows:16},inputProps:{style:"white-space: nowrap;"},"onUpdate:value":e[9]||(e[9]=o=>{n(W).loading||(V.value=o)})},null,8,["value"])]),_:1},8,["show","loading","onPositiveClick"]),a(Nt,{show:n(X),"onUpdate:show":e[15]||(e[15]=o=>me(X)?X.value=o:null)},null,8,["show"]),a(Ne,{show:n(_).show,preset:"dialog",title:n(_).title||"分组备注",showIcon:!1,positiveText:"保存",negativeText:"取消",onPositiveClick:Ve,onNegativeClick:e[17]||(e[17]=o=>n(_).show=!1),onClose:e[18]||(e[18]=o=>n(_).show=!1)},{default:s(()=>[a(c,{value:n(_).value,"onUpdate:value":e[16]||(e[16]=o=>n(_).value=o),type:"textarea",maxlength:"160","show-count":"",autosize:{minRows:3,maxRows:6},placeholder:"请输入备注"},null,8,["value"])]),_:1},8,["show","title"])],64)}}});export{wn as default};
55
+ //# sourceMappingURL=HomePage-DWBCu_RV.js.map