@robot-admin/naive-ui-components 0.20.0 → 0.21.1

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 (179) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +5 -5
  3. package/README_EN.md +5 -5
  4. package/SECURITY.md +39 -0
  5. package/dist/C_AntV.css +31 -31
  6. package/dist/C_AntV2.cjs +1 -1
  7. package/dist/C_AntV2.js +1 -1
  8. package/dist/C_Chat.css +90 -90
  9. package/dist/C_Chat2.cjs +1 -1
  10. package/dist/C_Chat2.js +1 -1
  11. package/dist/C_CollapsePanel2.cjs +1 -1
  12. package/dist/C_CollapsePanel2.js +1 -1
  13. package/dist/C_Draggable.css +53 -53
  14. package/dist/C_Draggable2.cjs +1 -1
  15. package/dist/C_Draggable2.js +1 -1
  16. package/dist/C_FilePreview.css +98 -98
  17. package/dist/C_FilePreview.d.cts +2 -2
  18. package/dist/C_FilePreview.d.ts +2 -2
  19. package/dist/C_FilePreview2.cjs +1 -1
  20. package/dist/C_FilePreview2.js +1 -1
  21. package/dist/C_Form.base.css +9 -9
  22. package/dist/C_Form.css +9 -9
  23. package/dist/C_FormSearch.css +52 -52
  24. package/dist/C_FormSearch2.cjs +1 -1
  25. package/dist/C_FormSearch2.js +1 -1
  26. package/dist/C_Language.css +2 -2
  27. package/dist/C_Language2.cjs +1 -1
  28. package/dist/C_Language2.js +1 -1
  29. package/dist/C_Login.css +79 -79
  30. package/dist/C_Login2.cjs +1 -1
  31. package/dist/C_Login2.js +1 -1
  32. package/dist/C_Markdown.css +1 -2
  33. package/dist/C_Menu.css +1 -1
  34. package/dist/C_Menu.d.cts +2 -2
  35. package/dist/C_Menu.d.ts +2 -2
  36. package/dist/C_Menu2.cjs +1 -1
  37. package/dist/C_Menu2.js +1 -1
  38. package/dist/C_NotificationCenter.css +124 -124
  39. package/dist/C_NotificationCenter.d.cts +2 -2
  40. package/dist/C_NotificationCenter.d.ts +2 -2
  41. package/dist/C_NotificationCenter2.cjs +1 -1
  42. package/dist/C_NotificationCenter2.js +1 -1
  43. package/dist/C_Skeleton.css +2 -2
  44. package/dist/C_Skeleton2.cjs +1 -1
  45. package/dist/C_Skeleton2.js +1 -1
  46. package/dist/C_SplitPane.css +66 -66
  47. package/dist/C_SplitPane2.cjs +1 -1
  48. package/dist/C_SplitPane2.js +1 -1
  49. package/dist/C_Table.base.css +9 -9
  50. package/dist/C_Table.css +9 -9
  51. package/dist/C_Table.d.ts +1 -0
  52. package/dist/C_Theme2.cjs +1 -1
  53. package/dist/C_Theme2.js +1 -1
  54. package/dist/C_Timeline.css +46 -46
  55. package/dist/C_Timeline2.cjs +1 -1
  56. package/dist/C_Timeline2.js +1 -1
  57. package/dist/C_Transfer.css +26 -26
  58. package/dist/C_Transfer2.cjs +1 -1
  59. package/dist/C_Transfer2.js +1 -1
  60. package/dist/C_Tree.css +23 -23
  61. package/dist/C_Tree.d.ts +1 -0
  62. package/dist/C_Tree2.cjs +1 -1
  63. package/dist/C_Tree2.js +1 -1
  64. package/dist/C_Upload2.cjs +1 -1
  65. package/dist/C_Upload2.js +1 -1
  66. package/dist/C_VideoPlayer.d.cts +2 -2
  67. package/dist/C_VideoPlayer.d.ts +2 -2
  68. package/dist/C_VideoPlayer2.cjs +2 -2
  69. package/dist/C_VideoPlayer2.js +2 -2
  70. package/dist/C_WaterFall.css +31 -29
  71. package/dist/C_WaterFall2.cjs +1 -1
  72. package/dist/C_WaterFall2.js +1 -1
  73. package/dist/C_WorkFlow.css +112 -111
  74. package/dist/C_WorkFlow2.cjs +1 -1
  75. package/dist/C_WorkFlow2.js +1 -1
  76. package/dist/config.cjs +1 -0
  77. package/dist/config.d.cts +8 -0
  78. package/dist/config.d.ts +8 -0
  79. package/dist/config.js +1 -0
  80. package/dist/constants.d.cts +1 -1
  81. package/dist/constants.d.ts +1 -1
  82. package/dist/constants2.d.cts +1 -1
  83. package/dist/constants2.d.ts +1 -1
  84. package/dist/constants3.d.cts +32 -9
  85. package/dist/constants3.d.ts +32 -9
  86. package/dist/constants4.d.cts +16 -5
  87. package/dist/constants4.d.ts +16 -5
  88. package/dist/constants5.d.cts +22 -18
  89. package/dist/constants5.d.ts +22 -18
  90. package/dist/data.d.cts +6 -6
  91. package/dist/data.d.ts +6 -6
  92. package/dist/dateRange.d.cts +2 -0
  93. package/dist/dateRange.d.ts +2 -0
  94. package/dist/feedback.cjs +1 -1
  95. package/dist/feedback.js +1 -1
  96. package/dist/helpers.cjs +1 -1
  97. package/dist/helpers.js +1 -1
  98. package/dist/index.cjs +1 -1
  99. package/dist/index.d.cts +7 -6
  100. package/dist/index.d.ts +8 -6
  101. package/dist/index.js +1 -1
  102. package/dist/index.vue.d.cts +5 -5
  103. package/dist/index.vue.d.ts +5 -5
  104. package/dist/index10.vue.d.cts +3 -3
  105. package/dist/index10.vue.d.ts +2 -2
  106. package/dist/index11.vue.d.cts +2 -2
  107. package/dist/index11.vue.d.ts +2 -2
  108. package/dist/index12.vue.d.cts +2 -2
  109. package/dist/index12.vue.d.ts +3 -3
  110. package/dist/index13.vue.d.cts +3 -3
  111. package/dist/index13.vue.d.ts +8 -8
  112. package/dist/index14.vue.d.cts +8 -8
  113. package/dist/index14.vue.d.ts +0 -1
  114. package/dist/index15.vue.d.cts +0 -1
  115. package/dist/index15.vue.d.ts +1 -1
  116. package/dist/index16.vue.d.cts +1 -1
  117. package/dist/index16.vue.d.ts +1 -1
  118. package/dist/index17.vue.d.cts +1 -1
  119. package/dist/index17.vue.d.ts +2 -2
  120. package/dist/index18.vue.d.cts +2 -2
  121. package/dist/index18.vue.d.ts +44 -40
  122. package/dist/index19.vue.d.cts +3 -3
  123. package/dist/index19.vue.d.ts +3 -3
  124. package/dist/index20.vue.d.cts +3 -3
  125. package/dist/index20.vue.d.ts +3 -3
  126. package/dist/index21.vue.d.cts +2 -2
  127. package/dist/index21.vue.d.ts +2 -2
  128. package/dist/index25.vue.d.cts +0 -1
  129. package/dist/index25.vue.d.ts +0 -1
  130. package/dist/index26.vue.d.cts +3 -3
  131. package/dist/index26.vue.d.ts +3 -3
  132. package/dist/index3.vue.d.cts +3 -3
  133. package/dist/index3.vue.d.ts +3 -3
  134. package/dist/index4.vue.d.cts +44 -40
  135. package/dist/index6.vue.d.ts +0 -2
  136. package/dist/index7.vue.d.cts +0 -2
  137. package/dist/index8.vue.d.ts +3 -3
  138. package/dist/index9.vue.d.cts +3 -3
  139. package/dist/index9.vue.d.ts +3 -3
  140. package/dist/mapUtils.d.cts +2 -2
  141. package/dist/mapUtils.d.ts +2 -2
  142. package/dist/style.css +848 -846
  143. package/dist/useCalendarEvents.d.cts +1 -1
  144. package/dist/useCalendarEvents.d.ts +1 -1
  145. package/dist/useCollapsePanel.d.cts +3 -3
  146. package/dist/useCollapsePanel.d.ts +3 -3
  147. package/dist/useComponentLocale.cjs +1 -1
  148. package/dist/useComponentLocale.js +1 -1
  149. package/dist/useCropperCore.d.cts +8 -8
  150. package/dist/useCropperCore.d.ts +8 -8
  151. package/dist/useDraggableLayout.d.cts +1 -0
  152. package/dist/useDraggableLayout.d.ts +1 -0
  153. package/dist/useEdgeInteraction.d.cts +3 -3
  154. package/dist/useEdgeInteraction.d.ts +3 -3
  155. package/dist/useFullscreen.d.cts +41 -23
  156. package/dist/useFullscreen.d.ts +41 -23
  157. package/dist/useInfiniteScroll.d.cts +7 -5
  158. package/dist/useInfiniteScroll.d.ts +7 -5
  159. package/dist/useQRCode.d.cts +4 -4
  160. package/dist/useQRCode.d.ts +4 -4
  161. package/dist/useSignatureHistory.d.cts +4 -4
  162. package/dist/useSignatureHistory.d.ts +4 -4
  163. package/dist/useSplitResize.d.cts +3 -4
  164. package/dist/useSplitResize.d.ts +3 -4
  165. package/dist/useTableQuery.cjs +1 -1
  166. package/dist/useTableQuery.d.cts +8 -12
  167. package/dist/useTableQuery.d.ts +8 -12
  168. package/dist/useTableQuery.js +1 -1
  169. package/dist/useWorkflowValidation.d.cts +105 -97
  170. package/dist/useWorkflowValidation.d.ts +105 -97
  171. package/dist/verification.d.cts +6 -6
  172. package/dist/verification.d.ts +6 -6
  173. package/docs/architecture.en.md +3 -1
  174. package/docs/architecture.md +3 -1
  175. package/docs/guides/usage.en.md +16 -0
  176. package/docs/guides/usage.md +56 -0
  177. package/package.json +27 -10
  178. package/dist/context.cjs +0 -1
  179. package/dist/context.js +0 -1
package/dist/C_Tree.css CHANGED
@@ -1,6 +1,6 @@
1
1
  :root{--c-primary: var(--primary-color, #2080f0);--c-primary-hover: var(--primary-color-hover, #4098fc);--c-primary-pressed: var(--primary-color-pressed, #1060c9);--c-success: var(--success-color, #18a058);--c-warning: var(--warning-color, #f0a020);--c-error: var(--error-color, #d03050);--c-info: var(--info-color, #2080f0);--c-bg-body: var(--body-color, #ffffff);--c-bg-card: var(--card-color, #ffffff);--c-bg-surface: var(--popover-color, #ffffff);--c-text-1: var(--text-color-1, #262626);--c-text-2: var(--text-color-2, #525252);--c-text-3: var(--text-color-3, #a3a3a3);--c-text-4: var(--text-color-4, #c0c0c0);--c-border: var(--border-color, #e5e7eb);--c-radius-sm: var(--border-radius-small, 4px);--c-radius: var(--border-radius, 6px);--c-transition-fast: 0.15s cubic-bezier(0.4, 0, 0.2, 1);--c-transition-base: 0.3s cubic-bezier(0.4, 0, 0.2, 1);--c-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08);--c-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);--c-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1)}
2
2
 
3
- .c-tree[data-v-7a932d60] {
3
+ .c-tree[data-v-d71f9eac] {
4
4
  --c-tree-padding: 12px;
5
5
  --c-tree-gap: 10px;
6
6
  display: flex;
@@ -10,15 +10,15 @@
10
10
  height: 100%;
11
11
  gap: var(--c-tree-gap);
12
12
  }
13
- .c-tree--compact[data-v-7a932d60] {
13
+ .c-tree--compact[data-v-d71f9eac] {
14
14
  --c-tree-padding: 8px;
15
15
  --c-tree-gap: 8px;
16
16
  }
17
- .c-tree--comfortable[data-v-7a932d60] {
17
+ .c-tree--comfortable[data-v-d71f9eac] {
18
18
  --c-tree-padding: 16px;
19
19
  --c-tree-gap: 14px;
20
20
  }
21
- .c-tree .c-tree-toolbar[data-v-7a932d60] {
21
+ .c-tree .c-tree-toolbar[data-v-d71f9eac] {
22
22
  display: flex;
23
23
  flex-wrap: wrap;
24
24
  align-items: center;
@@ -28,21 +28,21 @@
28
28
  border-radius: var(--c-tree-radius);
29
29
  flex-shrink: 0;
30
30
  }
31
- .c-tree .toolbar-left[data-v-7a932d60] {
31
+ .c-tree .toolbar-left[data-v-d71f9eac] {
32
32
  flex: 1 1 140px;
33
33
  min-width: 0;
34
34
  }
35
- .c-tree .toolbar-left .search-input[data-v-7a932d60] {
35
+ .c-tree .toolbar-left .search-input[data-v-d71f9eac] {
36
36
  width: 100%;
37
37
  }
38
- .c-tree .toolbar-right[data-v-7a932d60] {
38
+ .c-tree .toolbar-right[data-v-d71f9eac] {
39
39
  display: flex;
40
40
  flex-wrap: wrap;
41
41
  align-items: center;
42
42
  gap: 6px;
43
43
  margin-left: auto;
44
44
  }
45
- .c-tree .c-tree-container[data-v-7a932d60] {
45
+ .c-tree .c-tree-container[data-v-d71f9eac] {
46
46
  flex: 1 1 auto;
47
47
  min-width: 0;
48
48
  min-height: 0;
@@ -52,33 +52,33 @@
52
52
  overflow: auto;
53
53
  scrollbar-width: thin;
54
54
  }
55
- .c-tree--virtual .c-tree-container[data-v-7a932d60] {
55
+ .c-tree--virtual .c-tree-container[data-v-d71f9eac] {
56
56
  overflow: hidden;
57
57
  }
58
- .c-tree--virtual .tree-instance[data-v-7a932d60] {
58
+ .c-tree--virtual .tree-instance[data-v-d71f9eac] {
59
59
  height: 100%;
60
60
  }
61
- .c-tree[data-v-7a932d60] .n-tree-node-content,
62
- .c-tree[data-v-7a932d60] .n-tree-node-content__text {
61
+ .c-tree[data-v-d71f9eac] .n-tree-node-content,
62
+ .c-tree[data-v-d71f9eac] .n-tree-node-content__text {
63
63
  min-width: 0;
64
64
  }
65
- .c-tree[data-v-7a932d60] .c-tree-node-label {
65
+ .c-tree[data-v-d71f9eac] .c-tree-node-label {
66
66
  display: flex;
67
67
  align-items: center;
68
68
  min-width: 0;
69
69
  width: 100%;
70
70
  gap: 6px;
71
71
  }
72
- .c-tree[data-v-7a932d60] .c-tree-node-title {
72
+ .c-tree[data-v-d71f9eac] .c-tree-node-title {
73
73
  overflow: hidden;
74
74
  white-space: nowrap;
75
75
  text-overflow: ellipsis;
76
76
  }
77
- .c-tree[data-v-7a932d60] .c-tree-node-status,
78
- .c-tree[data-v-7a932d60] .c-tree-node-icon {
77
+ .c-tree[data-v-d71f9eac] .c-tree-node-status,
78
+ .c-tree[data-v-d71f9eac] .c-tree-node-icon {
79
79
  flex-shrink: 0;
80
80
  }
81
- .c-tree[data-v-7a932d60] .tree-actions {
81
+ .c-tree[data-v-d71f9eac] .tree-actions {
82
82
  display: inline-flex;
83
83
  align-items: center;
84
84
  gap: 2px;
@@ -86,21 +86,21 @@
86
86
  opacity: 0;
87
87
  transition: opacity 0.15s ease;
88
88
  }
89
- .c-tree[data-v-7a932d60] .n-tree-node:hover .tree-actions,
90
- .c-tree[data-v-7a932d60] .n-tree-node:focus-within .tree-actions,
91
- .c-tree[data-v-7a932d60] .tree-actions:focus-within {
89
+ .c-tree[data-v-d71f9eac] .n-tree-node:hover .tree-actions,
90
+ .c-tree[data-v-d71f9eac] .n-tree-node:focus-within .tree-actions,
91
+ .c-tree[data-v-d71f9eac] .tree-actions:focus-within {
92
92
  opacity: 1;
93
93
  }
94
94
  @media (hover: none), (max-width: 640px) {
95
- .c-tree[data-v-7a932d60] .tree-actions {
95
+ .c-tree[data-v-d71f9eac] .tree-actions {
96
96
  opacity: 1;
97
97
  }
98
98
  }
99
99
  @media (prefers-reduced-motion: reduce) {
100
- .c-tree[data-v-7a932d60] .tree-actions {
100
+ .c-tree[data-v-d71f9eac] .tree-actions {
101
101
  transition: none;
102
102
  }
103
103
  }
104
104
 
105
105
  /* layer: default */
106
- .filter[data-v-7a932d60]{filter:var(--un-blur) var(--un-brightness) var(--un-contrast) var(--un-drop-shadow) var(--un-grayscale) var(--un-hue-rotate) var(--un-invert) var(--un-saturate) var(--un-sepia);}
106
+ .filter[data-v-d71f9eac]{filter:var(--un-blur) var(--un-brightness) var(--un-contrast) var(--un-drop-shadow) var(--un-grayscale) var(--un-hue-rotate) var(--un-invert) var(--un-saturate) var(--un-sepia);}
package/dist/C_Tree.d.ts CHANGED
@@ -11,5 +11,6 @@ import "./dateRange.js";
11
11
  import "./mapUtils.js";
12
12
  import "./index18.vue.js";
13
13
  import "./constants5.js";
14
+ import "./useWorkflowValidation.js";
14
15
  import "./index24.vue.js";
15
16
  export { type ActionConfig, type ButtonType, _default as C_Tree, type ComponentDensity, type DropInfo, type IconConfig, type StatusConfig, type StatusType, type TreeEmits, type TreeExpose, type TreeKey, type TreeMode, type TreeNativeProps, type TreeNodeData, type TreeOption, type TreeProps, type TreeRenderContext, type TreeSlots, type TreeUpdateMeta, presetConfigs as treePresetConfigs, useTreeOperations };
package/dist/C_Tree2.cjs CHANGED
@@ -1 +1 @@
1
- require(`./chunk.cjs`);const e=require(`./density.cjs`),t=require(`./C_Icon2.cjs`),n=require(`./export-helper.cjs`);let r=require(`vue`),i=require(`naive-ui`);const a={menu:{draggable:!0,showLine:!0,iconConfig:{typeMap:{directory:`mdi:folder`,menu:`mdi:file-document`,button:`mdi:button-cursor`}},actions:[{key:`add`,text:`新增子菜单`,icon:`mdi:plus`,type:`primary`},{key:`edit`,text:`编辑`,icon:`mdi:pencil`,type:`info`},{key:`delete`,text:`删除`,icon:`mdi:delete`,type:`error`,confirm:`确认删除该菜单吗?`}]},file:{draggable:!1,showLine:!1,iconConfig:{typeMap:{folder:`mdi:folder`,file:`mdi:file-document`,image:`mdi:file-image`,video:`mdi:file-video`,audio:`mdi:file-music`}},actions:[{key:`open`,text:`打开`,icon:`mdi:folder-open`,type:`primary`},{key:`rename`,text:`重命名`,icon:`mdi:rename-box`,type:`info`},{key:`delete`,text:`删除`,icon:`mdi:delete`,type:`error`,confirm:`确认删除该文件吗?`}]},org:{draggable:!1,showLine:!0,iconConfig:{typeMap:{department:`mdi:domain`,user:`mdi:account`,manager:`mdi:account-tie`}},actions:[{key:`add`,text:`新增下级`,icon:`mdi:plus`,type:`primary`},{key:`edit`,text:`编辑`,icon:`mdi:pencil`,type:`info`}]},custom:{}},o=e=>typeof e==`string`||typeof e==`number`,s=e=>!!e&&typeof e==`object`;function c(e,t,n,r){let i=new Map,a=new Set,c=new WeakSet,l=[],u=e=>{for(let t=e.length-1;t>=0;t--)l.push(e[t])};for(u(e);l.length;){let e=l.pop();if(!s(e)||c.has(e))continue;c.add(e);let d=Reflect.get(e,t),f=o(d);f&&!i.has(d)&&i.set(d,e);let p=r?r(e):Reflect.get(e,n);Array.isArray(p)&&p.length&&(f&&a.add(d),u(p))}return{nodes:i,expandableKeys:[...a]}}function l(n,o,s={}){let l=(0,r.computed)(()=>n.treeProps??{}),u=(0,r.computed)(()=>a[n.mode??`custom`]),d=(0,r.computed)(()=>n.draggable??l.value.draggable??u.value.draggable??!1),f=(0,r.computed)(()=>n.showLine??l.value.showLine??u.value.showLine??!0),p=(0,r.computed)(()=>n.actions??u.value.actions??[]),m=(0,r.computed)(()=>({...u.value,...n,draggable:d.value,showLine:f.value,iconConfig:{default:`mdi:circle-outline`,...u.value.iconConfig,...n.iconConfig,typeMap:{...u.value.iconConfig?.typeMap,...n.iconConfig?.typeMap},colorMap:{...u.value.iconConfig?.colorMap,...n.iconConfig?.colorMap}},actions:p.value})),h=(0,r.computed)(()=>n.keyField??l.value.keyField??`id`),g=(0,r.computed)(()=>n.labelField??l.value.labelField??`name`),_=(0,r.computed)(()=>n.childrenField??l.value.childrenField??`children`),v=(0,r.computed)(()=>c(n.data,h.value,_.value,l.value.getChildren)),y=()=>n.defaultExpandAll??l.value.defaultExpandAll??!1,b=(0,r.ref)(y()),x=e=>{let t=`default${e}Keys`;return[...n[t]??l.value[t]??[]]},S=(0,r.ref)(y()?v.value.expandableKeys:x(`Expanded`)),C=(0,r.ref)(x(`Selected`)),w=(0,r.ref)(x(`Checked`)),T=(0,r.computed)({get:()=>n.expandedKeys??l.value.expandedKeys??S.value,set:e=>N(e)}),E=(0,r.computed)({get:()=>n.selectedKeys??l.value.selectedKeys??C.value,set:e=>P(e)}),D=(0,r.computed)({get:()=>n.checkedKeys??l.value.checkedKeys??w.value,set:e=>F(e)}),O=(0,r.ref)(``),k=(0,r.computed)({get:()=>n.searchPattern??l.value.pattern??O.value,set:e=>{O.value=e,o(`update:searchPattern`,e)}}),A=(0,r.computed)(()=>{let e=v.value.expandableKeys,t=new Set(T.value);return e.length>0&&e.every(e=>t.has(e))});(0,r.watch)(()=>v.value.expandableKeys,e=>{b.value&&(S.value=[...e])}),(0,r.watch)(y,e=>{b.value=e,e&&(S.value=[...v.value.expandableKeys])});for(let[e,t]of[[`Expanded`,S],[`Selected`,C],[`Checked`,w]]){let i=`default${e}Keys`;(0,r.watch)(()=>n[i]??l.value[i],n=>{l.value.watchProps?.includes(i)&&(t.value=e===`Expanded`&&y()?[...v.value.expandableKeys]:[...n??[]])})}let j=e=>e.map(e=>v.value.nodes.get(e)??null),M=(e,t)=>{let n=l.value[e],r=Array.isArray(n)?n:[n];for(let e of r)typeof e==`function`&&e(...t)},N=(e,t=j(e),n={node:null,action:`expand`})=>{n.action!==`filter`&&(b.value=!1),S.value=[...e],o(`update:expandedKeys`,e,t,n),M(`onUpdateExpandedKeys`,[e,t,n]),M(`onUpdate:expandedKeys`,[e,t,n])},P=(e,t=j(e),n={node:t[0]??null,action:e.length?`select`:`unselect`})=>{C.value=[...e],o(`update:selectedKeys`,e,t,n),o(`node-select`,t[0]??null,e),M(`onUpdateSelectedKeys`,[e,t,n]),M(`onUpdate:selectedKeys`,[e,t,n])},F=(e,t=j(e),n={node:null,action:e.length?`check`:`uncheck`})=>{w.value=[...e],o(`update:checkedKeys`,e,t,n),M(`onUpdateCheckedKeys`,[e,t,n]),M(`onUpdate:checkedKeys`,[e,t,n])},I=(0,r.computed)(()=>v.value.nodes.get(E.value[0])??null),L=e=>{if(s.prefix)return s.prefix(e);if(l.value.renderPrefix)return l.value.renderPrefix(e);let i=Reflect.get(e.option,`prefix`);if(typeof i==`function`)return i();let a=e.option,o=m.value.iconConfig,c=Reflect.get(a,`type`),u=typeof c==`string`?c:``,d=Reflect.get(a,n.iconField??`icon`);return(0,r.h)(t.t,{name:typeof d==`string`?d:o.typeMap[u]??o.default,size:16,color:o.colorMap[u]??`currentColor`,class:`c-tree-node-icon`})},R=e=>{if(s.label)return s.label(e);if(l.value.renderLabel)return l.value.renderLabel(e);let t=String(Reflect.get(e.option,g.value)??``);return(0,r.h)(`span`,{class:`c-tree-node-label`},[(0,r.h)(`span`,{class:`c-tree-node-title`,title:t},t),...(n.statusConfigs??[]).flatMap(t=>{let n=Reflect.get(e.option,t.field),a=typeof n==`number`||typeof n==`string`?t.values[n]:void 0;return a?.text?[(0,r.h)(i.NTag,{type:a.type,size:`small`,class:`c-tree-node-status`},{default:()=>a.text})]:[]})])},z=(e,t)=>{e===`add`?o(`add`,t):o(`node-action`,e,t)},B=e=>{if(s.suffix)return s.suffix(e);if(l.value.renderSuffix)return l.value.renderSuffix(e);let n=Reflect.get(e.option,`suffix`);if(typeof n==`function`)return n();let a=e.option,o=m.value.actions.filter(e=>!e.show||e.show(a));return o.length?(0,r.h)(`span`,{class:`tree-actions`,onClick:e=>e.stopPropagation()},o.map(e=>{let n=n=>(0,r.h)(i.NButton,{size:`tiny`,type:e.type??`default`,quaternary:!0,disabled:!!(l.value.disabled||Reflect.get(a,l.value.disabledField??`disabled`)),"aria-label":e.text||e.key,title:e.text,onClick:t=>{t.stopPropagation(),n||z(e.key,a)}},{icon:()=>(0,r.h)(t.t,{name:e.icon,size:14})});return e.confirm?(0,r.h)(i.NPopconfirm,{onPositiveClick:()=>z(e.key,a)},{trigger:()=>n(!0),default:()=>e.confirm}):n(!1)})):null},V=!0;(0,r.getCurrentScope)()&&(0,r.onScopeDispose)(()=>{V=!1});let H=(0,r.computed)(()=>{let e=l.value.onLoad;if(e)return async t=>{try{return await e(t)}catch(e){let n=Reflect.get(t,h.value),i=typeof n==`string`||typeof n==`number`?v.value.nodes.get(n):void 0;return V&&i&&(0,r.toRaw)(i)===(0,r.toRaw)(t)&&o(`load-error`,e,t),!1}}}),U=(0,r.computed)(()=>{if(!n.data.length)return!1;let e=k.value;if(!l.value.virtualScroll||!e||l.value.showIrrelevantNodes!==!1)return!0;let t=e.toLowerCase(),r=l.value.filter??((e,n)=>{let r=Reflect.get(n,g.value);return typeof r==`string`&&r.toLowerCase().includes(t)});for(let t of v.value.nodes.values())if(r(e,t))return!0;return!1}),W=(0,r.shallowRef)(),G=(0,r.computed)(()=>e.t(n.density)),K=(0,r.computed)(()=>({...l.value,data:n.data,virtualScroll:!!(l.value.virtualScroll&&U.value),keyField:h.value,labelField:g.value,childrenField:_.value,draggable:m.value.draggable,showLine:m.value.showLine,blockLine:l.value.blockLine??!0,blockNode:l.value.blockNode??!0,pattern:k.value,expandedKeys:T.value,selectedKeys:E.value,checkedKeys:D.value,renderPrefix:L,renderLabel:R,renderSuffix:B,themeOverrides:{nodeHeight:n.density===`compact`?`28px`:n.density===`comfortable`?`40px`:`34px`,nodeWrapperPadding:`0`,...l.value.themeOverrides},onLoad:H.value,onUpdateExpandedKeys:void 0,onUpdateSelectedKeys:void 0,onUpdateCheckedKeys:void 0,"onUpdate:expandedKeys":N,"onUpdate:selectedKeys":P,"onUpdate:checkedKeys":F,onDrop:e=>{o(`node-drop`,e),M(`onDrop`,[e])}})),q=()=>A.value?Y():J(),J=()=>{N([...v.value.expandableKeys]),b.value=!0},Y=()=>N([],[],{node:null,action:`collapse`}),X=()=>o(`add`),Z=()=>o(`refresh`),Q={expandAll:J,collapseAll:Y,selectNode:e=>P([e]),clearSelection:()=>P([]),setCheckedKeys:e=>F([...e]),clearChecked:()=>F([]),getSelectedNode:()=>I.value,getCheckedData:()=>{let e=W.value?.getCheckedData();return e?{keys:e.keys,options:e.options}:{keys:[...D.value],options:j(D.value)}},getIndeterminateData:()=>{let e=W.value?.getIndeterminateData();return e?{keys:e.keys,options:e.options}:{keys:[],options:[]}},scrollTo:(...e)=>{let t=W.value?.scrollTo;t?.(...e)},expandedKeys:T,selectedKeys:E,checkedKeys:D};return{internalSearchPattern:O,expandedKeys:T,selectedKeys:E,checkedKeys:D,isAllExpanded:A,treeData:(0,r.computed)(()=>n.data),currentSearchPattern:k,renderPrefix:L,renderLabel:R,renderSuffix:B,treeBindings:K,treeRef:W,density:G,toggleExpandAll:q,handleExpandedKeysChange:N,handleSelectedKeysChange:P,handleCheckedKeysChange:F,handleDrop:e=>o(`node-drop`,e),handleAdd:X,handleRefresh:Z,expose:Q}}const u={key:0,class:`c-tree-toolbar`},d={class:`toolbar-left`},f={class:`toolbar-right`},p={class:`c-tree-container`},m=(0,r.defineComponent)({name:`C_Tree`,__name:`index`,props:{data:{},mode:{default:`custom`},treeProps:{},density:{default:`default`},keyField:{},labelField:{},childrenField:{},searchPattern:{},searchable:{type:Boolean,default:!0},searchPlaceholder:{default:`搜索...`},draggable:{type:Boolean,default:void 0},showLine:{type:Boolean,default:void 0},showToolbar:{type:Boolean,default:!0},addable:{type:Boolean,default:!0},addText:{default:`新增`},refreshable:{type:Boolean,default:!0},iconField:{},iconConfig:{},statusConfigs:{},actions:{},defaultExpandAll:{type:Boolean,default:void 0},defaultExpandedKeys:{},defaultSelectedKeys:{},defaultCheckedKeys:{},expandedKeys:{},selectedKeys:{},checkedKeys:{}},emits:[`update:searchPattern`,`update:expandedKeys`,`update:selectedKeys`,`update:checkedKeys`,`node-select`,`node-action`,`node-drop`,`load-error`,`add`,`refresh`],setup(e,{expose:n,emit:a}){let o=e,s=a,c=(0,r.useSlots)(),m=(0,i.useThemeVars)(),h=(0,r.computed)(()=>({"--c-tree-border":m.value.borderColor,"--c-tree-surface":m.value.actionColor,"--c-tree-radius":m.value.borderRadius})),{currentSearchPattern:g,isAllExpanded:_,treeBindings:v,treeRef:y,density:b,toggleExpandAll:x,handleAdd:S,handleRefresh:C,expose:w}=l(o,s,c);return n(w),(n,a)=>((0,r.openBlock)(),(0,r.createElementBlock)(`div`,{class:(0,r.normalizeClass)([`c-tree`,[`c-tree--${(0,r.unref)(b).density}`,{"c-tree--virtual":(0,r.unref)(v).virtualScroll}]]),style:(0,r.normalizeStyle)(h.value)},[e.showToolbar?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,u,[(0,r.createElementVNode)(`div`,d,[e.searchable?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(i.NInput),{key:0,value:(0,r.unref)(g),"onUpdate:value":a[0]||=e=>(0,r.isRef)(g)?g.value=e:null,size:(0,r.unref)(b).size,placeholder:e.searchPlaceholder,"input-props":{"aria-label":`搜索树节点`},clearable:``,class:`search-input`},{prefix:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:`mdi:magnify`,size:16})]),_:1},8,[`value`,`size`,`placeholder`])):(0,r.createCommentVNode)(`v-if`,!0)]),(0,r.createElementVNode)(`div`,f,[(0,r.renderSlot)(n.$slots,`toolbar-actions`,{},()=>[e.addable?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(i.NButton),{key:0,type:`primary`,size:(0,r.unref)(b).size,onClick:a[1]||=e=>(0,r.unref)(S)()},{icon:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:`mdi:plus`,size:16})]),default:(0,r.withCtx)(()=>[(0,r.createTextVNode)(` `+(0,r.toDisplayString)(e.addText),1)]),_:1},8,[`size`])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createVNode)((0,r.unref)(i.NButton),{size:(0,r.unref)(b).size,disabled:!e.data.length,"aria-pressed":(0,r.unref)(_),onClick:(0,r.unref)(x)},{icon:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:`mdi:file-tree`,size:16})]),default:(0,r.withCtx)(()=>[(0,r.createTextVNode)(` `+(0,r.toDisplayString)((0,r.unref)(_)?`收起全部`:`展开全部`),1)]),_:1},8,[`size`,`disabled`,`aria-pressed`,`onClick`]),e.refreshable?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(i.NButton),{key:1,size:(0,r.unref)(b).size,onClick:(0,r.unref)(C)},{icon:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:`mdi:refresh`,size:16})]),default:(0,r.withCtx)(()=>[a[2]||=(0,r.createTextVNode)(` 刷新 `,-1)]),_:1},8,[`size`,`onClick`])):(0,r.createCommentVNode)(`v-if`,!0)],!0)])])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createElementVNode)(`div`,p,[(0,r.createVNode)((0,r.unref)(i.NTree),(0,r.mergeProps)({ref_key:`treeRef`,ref:y},(0,r.unref)(v),{class:`tree-instance`}),(0,r.createSlots)({_:2},[n.$slots.empty?{name:`empty`,fn:(0,r.withCtx)(()=>[(0,r.renderSlot)(n.$slots,`empty`,{},void 0,!0)]),key:`0`}:void 0]),1040)])],6))}});var h=n.t(m,[[`__scopeId`,`data-v-7a932d60`]]);Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return h}});
1
+ require(`./chunk.cjs`);const e=require(`./density.cjs`),t=require(`./useComponentLocale.cjs`),n=require(`./C_Icon2.cjs`),r=require(`./export-helper.cjs`);let i=require(`vue`),a=require(`naive-ui`);const o={menu:{draggable:!0,showLine:!0,iconConfig:{typeMap:{directory:`mdi:folder`,menu:`mdi:file-document`,button:`mdi:button-cursor`}},actions:[{key:`add`,text:`新增子菜单`,icon:`mdi:plus`,type:`primary`},{key:`edit`,text:`编辑`,icon:`mdi:pencil`,type:`info`},{key:`delete`,text:`删除`,icon:`mdi:delete`,type:`error`,confirm:`确认删除该菜单吗?`}]},file:{draggable:!1,showLine:!1,iconConfig:{typeMap:{folder:`mdi:folder`,file:`mdi:file-document`,image:`mdi:file-image`,video:`mdi:file-video`,audio:`mdi:file-music`}},actions:[{key:`open`,text:`打开`,icon:`mdi:folder-open`,type:`primary`},{key:`rename`,text:`重命名`,icon:`mdi:rename-box`,type:`info`},{key:`delete`,text:`删除`,icon:`mdi:delete`,type:`error`,confirm:`确认删除该文件吗?`}]},org:{draggable:!1,showLine:!0,iconConfig:{typeMap:{department:`mdi:domain`,user:`mdi:account`,manager:`mdi:account-tie`}},actions:[{key:`add`,text:`新增下级`,icon:`mdi:plus`,type:`primary`},{key:`edit`,text:`编辑`,icon:`mdi:pencil`,type:`info`}]},custom:{}},s=e=>typeof e==`string`||typeof e==`number`,c=e=>!!e&&typeof e==`object`;function l(e,t,n,r){let i=new Map,a=new Set,o=new WeakSet,l=[],u=e=>{for(let t=e.length-1;t>=0;t--)l.push(e[t])};for(u(e);l.length;){let e=l.pop();if(!c(e)||o.has(e))continue;o.add(e);let d=Reflect.get(e,t),f=s(d);f&&!i.has(d)&&i.set(d,e);let p=r?r(e):Reflect.get(e,n);Array.isArray(p)&&p.length&&(f&&a.add(d),u(p))}return{nodes:i,expandableKeys:[...a]}}function u(r,s,c={}){let{t:u}=t.t(),d=(0,i.computed)(()=>r.treeProps??{}),f=(0,i.computed)(()=>o[r.mode??`custom`]),p=(0,i.computed)(()=>r.draggable??d.value.draggable??f.value.draggable??!1),m=(0,i.computed)(()=>r.showLine??d.value.showLine??f.value.showLine??!0),h=(0,i.computed)(()=>r.actions??(f.value.actions??[]).map(e=>({...e,text:u(e.key===`edit`||e.key===`delete`?`common.${e.key}`:`tree.${r.mode}.${e.key}`),confirm:e.confirm?u(`tree.${r.mode}.deleteConfirm`):void 0}))),g=(0,i.computed)(()=>({...f.value,...r,draggable:p.value,showLine:m.value,iconConfig:{default:`mdi:circle-outline`,...f.value.iconConfig,...r.iconConfig,typeMap:{...f.value.iconConfig?.typeMap,...r.iconConfig?.typeMap},colorMap:{...f.value.iconConfig?.colorMap,...r.iconConfig?.colorMap}},actions:h.value})),_=(0,i.computed)(()=>r.keyField??d.value.keyField??`id`),v=(0,i.computed)(()=>r.labelField??d.value.labelField??`name`),y=(0,i.computed)(()=>r.childrenField??d.value.childrenField??`children`),b=(0,i.computed)(()=>l(r.data,_.value,y.value,d.value.getChildren)),x=()=>r.defaultExpandAll??d.value.defaultExpandAll??!1,S=(0,i.ref)(x()),C=e=>{let t=`default${e}Keys`;return[...r[t]??d.value[t]??[]]},w=(0,i.ref)(x()?b.value.expandableKeys:C(`Expanded`)),T=(0,i.ref)(C(`Selected`)),E=(0,i.ref)(C(`Checked`)),D=(0,i.computed)({get:()=>r.expandedKeys??d.value.expandedKeys??w.value,set:e=>F(e)}),O=(0,i.computed)({get:()=>r.selectedKeys??d.value.selectedKeys??T.value,set:e=>I(e)}),k=(0,i.computed)({get:()=>r.checkedKeys??d.value.checkedKeys??E.value,set:e=>L(e)}),A=(0,i.ref)(``),j=(0,i.computed)({get:()=>r.searchPattern??d.value.pattern??A.value,set:e=>{A.value=e,s(`update:searchPattern`,e)}}),M=(0,i.computed)(()=>{let e=b.value.expandableKeys,t=new Set(D.value);return e.length>0&&e.every(e=>t.has(e))});(0,i.watch)(()=>b.value.expandableKeys,e=>{S.value&&(w.value=[...e])}),(0,i.watch)(x,e=>{S.value=e,e&&(w.value=[...b.value.expandableKeys])});for(let[e,t]of[[`Expanded`,w],[`Selected`,T],[`Checked`,E]]){let n=`default${e}Keys`;(0,i.watch)(()=>r[n]??d.value[n],r=>{d.value.watchProps?.includes(n)&&(t.value=e===`Expanded`&&x()?[...b.value.expandableKeys]:[...r??[]])})}let N=e=>e.map(e=>b.value.nodes.get(e)??null),P=(e,t)=>{let n=d.value[e],r=Array.isArray(n)?n:[n];for(let e of r)typeof e==`function`&&e(...t)},F=(e,t=N(e),n={node:null,action:`expand`})=>{n.action!==`filter`&&(S.value=!1),w.value=[...e],s(`update:expandedKeys`,e,t,n),P(`onUpdateExpandedKeys`,[e,t,n]),P(`onUpdate:expandedKeys`,[e,t,n])},I=(e,t=N(e),n={node:t[0]??null,action:e.length?`select`:`unselect`})=>{T.value=[...e],s(`update:selectedKeys`,e,t,n),s(`node-select`,t[0]??null,e),P(`onUpdateSelectedKeys`,[e,t,n]),P(`onUpdate:selectedKeys`,[e,t,n])},L=(e,t=N(e),n={node:null,action:e.length?`check`:`uncheck`})=>{E.value=[...e],s(`update:checkedKeys`,e,t,n),P(`onUpdateCheckedKeys`,[e,t,n]),P(`onUpdate:checkedKeys`,[e,t,n])},R=(0,i.computed)(()=>b.value.nodes.get(O.value[0])??null),z=e=>{if(c.prefix)return c.prefix(e);if(d.value.renderPrefix)return d.value.renderPrefix(e);let t=Reflect.get(e.option,`prefix`);if(typeof t==`function`)return t();let a=e.option,o=g.value.iconConfig,s=Reflect.get(a,`type`),l=typeof s==`string`?s:``,u=Reflect.get(a,r.iconField??`icon`);return(0,i.h)(n.t,{name:typeof u==`string`?u:o.typeMap[l]??o.default,size:16,color:o.colorMap[l]??`currentColor`,class:`c-tree-node-icon`})},B=e=>{if(c.label)return c.label(e);if(d.value.renderLabel)return d.value.renderLabel(e);let t=String(Reflect.get(e.option,v.value)??``);return(0,i.h)(`span`,{class:`c-tree-node-label`},[(0,i.h)(`span`,{class:`c-tree-node-title`,title:t},t),...(r.statusConfigs??[]).flatMap(t=>{let n=Reflect.get(e.option,t.field),r=typeof n==`number`||typeof n==`string`?t.values[n]:void 0;return r?.text?[(0,i.h)(a.NTag,{type:r.type,size:`small`,class:`c-tree-node-status`},{default:()=>r.text})]:[]})])},V=(e,t)=>{e===`add`?s(`add`,t):s(`node-action`,e,t)},H=e=>{if(c.suffix)return c.suffix(e);if(d.value.renderSuffix)return d.value.renderSuffix(e);let t=Reflect.get(e.option,`suffix`);if(typeof t==`function`)return t();let r=e.option,o=g.value.actions.filter(e=>!e.show||e.show(r));return o.length?(0,i.h)(`span`,{class:`tree-actions`,onClick:e=>e.stopPropagation()},o.map(e=>{let t=t=>(0,i.h)(a.NButton,{size:`tiny`,type:e.type??`default`,quaternary:!0,disabled:!!(d.value.disabled||Reflect.get(r,d.value.disabledField??`disabled`)),"aria-label":e.text||e.key,title:e.text,onClick:n=>{n.stopPropagation(),t||V(e.key,r)}},{icon:()=>(0,i.h)(n.t,{name:e.icon,size:14})});return e.confirm?(0,i.h)(a.NPopconfirm,{onPositiveClick:()=>V(e.key,r)},{trigger:()=>t(!0),default:()=>e.confirm}):t(!1)})):null},U=!0;(0,i.getCurrentScope)()&&(0,i.onScopeDispose)(()=>{U=!1});let W=(0,i.computed)(()=>{let e=d.value.onLoad;if(e)return async t=>{try{return await e(t)}catch(e){let n=Reflect.get(t,_.value),r=typeof n==`string`||typeof n==`number`?b.value.nodes.get(n):void 0;return U&&r&&(0,i.toRaw)(r)===(0,i.toRaw)(t)&&s(`load-error`,e,t),!1}}}),G=(0,i.computed)(()=>{if(!r.data.length)return!1;let e=j.value;if(!d.value.virtualScroll||!e||d.value.showIrrelevantNodes!==!1)return!0;let t=e.toLowerCase(),n=d.value.filter??((e,n)=>{let r=Reflect.get(n,v.value);return typeof r==`string`&&r.toLowerCase().includes(t)});for(let t of b.value.nodes.values())if(n(e,t))return!0;return!1}),K=(0,i.shallowRef)(),q=(0,i.computed)(()=>e.t(r.density)),J=(0,i.computed)(()=>({...d.value,data:r.data,virtualScroll:!!(d.value.virtualScroll&&G.value),keyField:_.value,labelField:v.value,childrenField:y.value,draggable:g.value.draggable,showLine:g.value.showLine,blockLine:d.value.blockLine??!0,blockNode:d.value.blockNode??!0,pattern:j.value,expandedKeys:D.value,selectedKeys:O.value,checkedKeys:k.value,renderPrefix:z,renderLabel:B,renderSuffix:H,themeOverrides:{nodeHeight:r.density===`compact`?`28px`:r.density===`comfortable`?`40px`:`34px`,nodeWrapperPadding:`0`,...d.value.themeOverrides},onLoad:W.value,onUpdateExpandedKeys:void 0,onUpdateSelectedKeys:void 0,onUpdateCheckedKeys:void 0,"onUpdate:expandedKeys":F,"onUpdate:selectedKeys":I,"onUpdate:checkedKeys":L,onDrop:e=>{s(`node-drop`,e),P(`onDrop`,[e])}})),Y=()=>M.value?Z():X(),X=()=>{F([...b.value.expandableKeys]),S.value=!0},Z=()=>F([],[],{node:null,action:`collapse`}),Q=()=>s(`add`),$=()=>s(`refresh`),ee={expandAll:X,collapseAll:Z,selectNode:e=>I([e]),clearSelection:()=>I([]),setCheckedKeys:e=>L([...e]),clearChecked:()=>L([]),getSelectedNode:()=>R.value,getCheckedData:()=>{let e=K.value?.getCheckedData();return e?{keys:e.keys,options:e.options}:{keys:[...k.value],options:N(k.value)}},getIndeterminateData:()=>{let e=K.value?.getIndeterminateData();return e?{keys:e.keys,options:e.options}:{keys:[],options:[]}},scrollTo:(...e)=>{let t=K.value?.scrollTo;t?.(...e)},expandedKeys:D,selectedKeys:O,checkedKeys:k};return{internalSearchPattern:A,expandedKeys:D,selectedKeys:O,checkedKeys:k,isAllExpanded:M,treeData:(0,i.computed)(()=>r.data),currentSearchPattern:j,renderPrefix:z,renderLabel:B,renderSuffix:H,treeBindings:J,treeRef:K,density:q,toggleExpandAll:Y,handleExpandedKeysChange:F,handleSelectedKeysChange:I,handleCheckedKeysChange:L,handleDrop:e=>s(`node-drop`,e),handleAdd:Q,handleRefresh:$,expose:ee}}const d={key:0,class:`c-tree-toolbar`},f={class:`toolbar-left`},p={class:`toolbar-right`},m={class:`c-tree-container`},h=(0,i.defineComponent)({name:`C_Tree`,__name:`index`,props:{data:{},mode:{default:`custom`},treeProps:{},density:{default:`default`},keyField:{},labelField:{},childrenField:{},searchPattern:{},searchable:{type:Boolean,default:!0},searchPlaceholder:{},draggable:{type:Boolean,default:void 0},showLine:{type:Boolean,default:void 0},showToolbar:{type:Boolean,default:!0},addable:{type:Boolean,default:!0},addText:{},refreshable:{type:Boolean,default:!0},iconField:{},iconConfig:{},statusConfigs:{},actions:{},defaultExpandAll:{type:Boolean,default:void 0},defaultExpandedKeys:{},defaultSelectedKeys:{},defaultCheckedKeys:{},expandedKeys:{},selectedKeys:{},checkedKeys:{}},emits:[`update:searchPattern`,`update:expandedKeys`,`update:selectedKeys`,`update:checkedKeys`,`node-select`,`node-action`,`node-drop`,`load-error`,`add`,`refresh`],setup(e,{expose:r,emit:o}){let{t:s}=t.t(),c=e,l=o,h=(0,i.useSlots)(),g=(0,a.useThemeVars)(),_=(0,i.computed)(()=>({"--c-tree-border":g.value.borderColor,"--c-tree-surface":g.value.actionColor,"--c-tree-radius":g.value.borderRadius})),{currentSearchPattern:v,isAllExpanded:y,treeBindings:b,treeRef:x,density:S,toggleExpandAll:C,handleAdd:w,handleRefresh:T,expose:E}=u(c,l,h);return r(E),(t,r)=>((0,i.openBlock)(),(0,i.createElementBlock)(`div`,{class:(0,i.normalizeClass)([`c-tree`,[`c-tree--${(0,i.unref)(S).density}`,{"c-tree--virtual":(0,i.unref)(b).virtualScroll}]]),style:(0,i.normalizeStyle)(_.value)},[e.showToolbar?((0,i.openBlock)(),(0,i.createElementBlock)(`div`,d,[(0,i.createElementVNode)(`div`,f,[e.searchable?((0,i.openBlock)(),(0,i.createBlock)((0,i.unref)(a.NInput),{key:0,value:(0,i.unref)(v),"onUpdate:value":r[0]||=e=>(0,i.isRef)(v)?v.value=e:null,size:(0,i.unref)(S).size,placeholder:e.searchPlaceholder??(0,i.unref)(s)(`common.search`),"input-props":{"aria-label":(0,i.unref)(s)(`tree.search`)},clearable:``,class:`search-input`},{prefix:(0,i.withCtx)(()=>[(0,i.createVNode)(n.t,{name:`mdi:magnify`,size:16})]),_:1},8,[`value`,`size`,`placeholder`,`input-props`])):(0,i.createCommentVNode)(`v-if`,!0)]),(0,i.createElementVNode)(`div`,p,[(0,i.renderSlot)(t.$slots,`toolbar-actions`,{},()=>[e.addable?((0,i.openBlock)(),(0,i.createBlock)((0,i.unref)(a.NButton),{key:0,type:`primary`,size:(0,i.unref)(S).size,onClick:r[1]||=e=>(0,i.unref)(w)()},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)(n.t,{name:`mdi:plus`,size:16})]),default:(0,i.withCtx)(()=>[(0,i.createTextVNode)(` `+(0,i.toDisplayString)(e.addText??(0,i.unref)(s)(`common.add`)),1)]),_:1},8,[`size`])):(0,i.createCommentVNode)(`v-if`,!0),(0,i.createVNode)((0,i.unref)(a.NButton),{size:(0,i.unref)(S).size,disabled:!e.data.length,"aria-pressed":(0,i.unref)(y),onClick:(0,i.unref)(C)},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)(n.t,{name:`mdi:file-tree`,size:16})]),default:(0,i.withCtx)(()=>[(0,i.createTextVNode)(` `+(0,i.toDisplayString)((0,i.unref)(y)?(0,i.unref)(s)(`tree.collapseAll`):(0,i.unref)(s)(`tree.expandAll`)),1)]),_:1},8,[`size`,`disabled`,`aria-pressed`,`onClick`]),e.refreshable?((0,i.openBlock)(),(0,i.createBlock)((0,i.unref)(a.NButton),{key:1,size:(0,i.unref)(S).size,onClick:(0,i.unref)(T)},{icon:(0,i.withCtx)(()=>[(0,i.createVNode)(n.t,{name:`mdi:refresh`,size:16})]),default:(0,i.withCtx)(()=>[(0,i.createTextVNode)(` `+(0,i.toDisplayString)((0,i.unref)(s)(`common.refresh`)),1)]),_:1},8,[`size`,`onClick`])):(0,i.createCommentVNode)(`v-if`,!0)],!0)])])):(0,i.createCommentVNode)(`v-if`,!0),(0,i.createElementVNode)(`div`,m,[(0,i.createVNode)((0,i.unref)(a.NTree),(0,i.mergeProps)({ref_key:`treeRef`,ref:x},(0,i.unref)(b),{class:`tree-instance`}),(0,i.createSlots)({_:2},[t.$slots.empty?{name:`empty`,fn:(0,i.withCtx)(()=>[(0,i.renderSlot)(t.$slots,`empty`,{},void 0,!0)]),key:`0`}:void 0]),1040)])],6))}});var g=r.t(h,[[`__scopeId`,`data-v-d71f9eac`]]);Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return g}});
package/dist/C_Tree2.js CHANGED
@@ -1 +1 @@
1
- import{t as e}from"./density.js";import{t}from"./C_Icon2.js";import{t as n}from"./export-helper.js";import{computed as r,createBlock as i,createCommentVNode as a,createElementBlock as o,createElementVNode as s,createSlots as c,createTextVNode as l,createVNode as u,defineComponent as d,getCurrentScope as f,h as p,isRef as m,mergeProps as h,normalizeClass as g,normalizeStyle as _,onScopeDispose as v,openBlock as y,ref as b,renderSlot as x,shallowRef as S,toDisplayString as C,toRaw as w,unref as T,useSlots as E,watch as D,withCtx as O}from"vue";import{NButton as k,NInput as A,NPopconfirm as j,NTag as M,NTree as N,useThemeVars as P}from"naive-ui";const F={menu:{draggable:!0,showLine:!0,iconConfig:{typeMap:{directory:`mdi:folder`,menu:`mdi:file-document`,button:`mdi:button-cursor`}},actions:[{key:`add`,text:`新增子菜单`,icon:`mdi:plus`,type:`primary`},{key:`edit`,text:`编辑`,icon:`mdi:pencil`,type:`info`},{key:`delete`,text:`删除`,icon:`mdi:delete`,type:`error`,confirm:`确认删除该菜单吗?`}]},file:{draggable:!1,showLine:!1,iconConfig:{typeMap:{folder:`mdi:folder`,file:`mdi:file-document`,image:`mdi:file-image`,video:`mdi:file-video`,audio:`mdi:file-music`}},actions:[{key:`open`,text:`打开`,icon:`mdi:folder-open`,type:`primary`},{key:`rename`,text:`重命名`,icon:`mdi:rename-box`,type:`info`},{key:`delete`,text:`删除`,icon:`mdi:delete`,type:`error`,confirm:`确认删除该文件吗?`}]},org:{draggable:!1,showLine:!0,iconConfig:{typeMap:{department:`mdi:domain`,user:`mdi:account`,manager:`mdi:account-tie`}},actions:[{key:`add`,text:`新增下级`,icon:`mdi:plus`,type:`primary`},{key:`edit`,text:`编辑`,icon:`mdi:pencil`,type:`info`}]},custom:{}},I=e=>typeof e==`string`||typeof e==`number`,L=e=>!!e&&typeof e==`object`;function R(e,t,n,r){let i=new Map,a=new Set,o=new WeakSet,s=[],c=e=>{for(let t=e.length-1;t>=0;t--)s.push(e[t])};for(c(e);s.length;){let e=s.pop();if(!L(e)||o.has(e))continue;o.add(e);let l=Reflect.get(e,t),u=I(l);u&&!i.has(l)&&i.set(l,e);let d=r?r(e):Reflect.get(e,n);Array.isArray(d)&&d.length&&(u&&a.add(l),c(d))}return{nodes:i,expandableKeys:[...a]}}function z(n,i,a={}){let o=r(()=>n.treeProps??{}),s=r(()=>F[n.mode??`custom`]),c=r(()=>n.draggable??o.value.draggable??s.value.draggable??!1),l=r(()=>n.showLine??o.value.showLine??s.value.showLine??!0),u=r(()=>n.actions??s.value.actions??[]),d=r(()=>({...s.value,...n,draggable:c.value,showLine:l.value,iconConfig:{default:`mdi:circle-outline`,...s.value.iconConfig,...n.iconConfig,typeMap:{...s.value.iconConfig?.typeMap,...n.iconConfig?.typeMap},colorMap:{...s.value.iconConfig?.colorMap,...n.iconConfig?.colorMap}},actions:u.value})),m=r(()=>n.keyField??o.value.keyField??`id`),h=r(()=>n.labelField??o.value.labelField??`name`),g=r(()=>n.childrenField??o.value.childrenField??`children`),_=r(()=>R(n.data,m.value,g.value,o.value.getChildren)),y=()=>n.defaultExpandAll??o.value.defaultExpandAll??!1,x=b(y()),C=e=>{let t=`default${e}Keys`;return[...n[t]??o.value[t]??[]]},T=b(y()?_.value.expandableKeys:C(`Expanded`)),E=b(C(`Selected`)),O=b(C(`Checked`)),A=r({get:()=>n.expandedKeys??o.value.expandedKeys??T.value,set:e=>H(e)}),N=r({get:()=>n.selectedKeys??o.value.selectedKeys??E.value,set:e=>U(e)}),P=r({get:()=>n.checkedKeys??o.value.checkedKeys??O.value,set:e=>W(e)}),I=b(``),L=r({get:()=>n.searchPattern??o.value.pattern??I.value,set:e=>{I.value=e,i(`update:searchPattern`,e)}}),z=r(()=>{let e=_.value.expandableKeys,t=new Set(A.value);return e.length>0&&e.every(e=>t.has(e))});D(()=>_.value.expandableKeys,e=>{x.value&&(T.value=[...e])}),D(y,e=>{x.value=e,e&&(T.value=[..._.value.expandableKeys])});for(let[e,t]of[[`Expanded`,T],[`Selected`,E],[`Checked`,O]]){let r=`default${e}Keys`;D(()=>n[r]??o.value[r],n=>{o.value.watchProps?.includes(r)&&(t.value=e===`Expanded`&&y()?[..._.value.expandableKeys]:[...n??[]])})}let B=e=>e.map(e=>_.value.nodes.get(e)??null),V=(e,t)=>{let n=o.value[e],r=Array.isArray(n)?n:[n];for(let e of r)typeof e==`function`&&e(...t)},H=(e,t=B(e),n={node:null,action:`expand`})=>{n.action!==`filter`&&(x.value=!1),T.value=[...e],i(`update:expandedKeys`,e,t,n),V(`onUpdateExpandedKeys`,[e,t,n]),V(`onUpdate:expandedKeys`,[e,t,n])},U=(e,t=B(e),n={node:t[0]??null,action:e.length?`select`:`unselect`})=>{E.value=[...e],i(`update:selectedKeys`,e,t,n),i(`node-select`,t[0]??null,e),V(`onUpdateSelectedKeys`,[e,t,n]),V(`onUpdate:selectedKeys`,[e,t,n])},W=(e,t=B(e),n={node:null,action:e.length?`check`:`uncheck`})=>{O.value=[...e],i(`update:checkedKeys`,e,t,n),V(`onUpdateCheckedKeys`,[e,t,n]),V(`onUpdate:checkedKeys`,[e,t,n])},G=r(()=>_.value.nodes.get(N.value[0])??null),K=e=>{if(a.prefix)return a.prefix(e);if(o.value.renderPrefix)return o.value.renderPrefix(e);let r=Reflect.get(e.option,`prefix`);if(typeof r==`function`)return r();let i=e.option,s=d.value.iconConfig,c=Reflect.get(i,`type`),l=typeof c==`string`?c:``,u=Reflect.get(i,n.iconField??`icon`);return p(t,{name:typeof u==`string`?u:s.typeMap[l]??s.default,size:16,color:s.colorMap[l]??`currentColor`,class:`c-tree-node-icon`})},q=e=>{if(a.label)return a.label(e);if(o.value.renderLabel)return o.value.renderLabel(e);let t=String(Reflect.get(e.option,h.value)??``);return p(`span`,{class:`c-tree-node-label`},[p(`span`,{class:`c-tree-node-title`,title:t},t),...(n.statusConfigs??[]).flatMap(t=>{let n=Reflect.get(e.option,t.field),r=typeof n==`number`||typeof n==`string`?t.values[n]:void 0;return r?.text?[p(M,{type:r.type,size:`small`,class:`c-tree-node-status`},{default:()=>r.text})]:[]})])},J=(e,t)=>{e===`add`?i(`add`,t):i(`node-action`,e,t)},Y=e=>{if(a.suffix)return a.suffix(e);if(o.value.renderSuffix)return o.value.renderSuffix(e);let n=Reflect.get(e.option,`suffix`);if(typeof n==`function`)return n();let r=e.option,i=d.value.actions.filter(e=>!e.show||e.show(r));return i.length?p(`span`,{class:`tree-actions`,onClick:e=>e.stopPropagation()},i.map(e=>{let n=n=>p(k,{size:`tiny`,type:e.type??`default`,quaternary:!0,disabled:!!(o.value.disabled||Reflect.get(r,o.value.disabledField??`disabled`)),"aria-label":e.text||e.key,title:e.text,onClick:t=>{t.stopPropagation(),n||J(e.key,r)}},{icon:()=>p(t,{name:e.icon,size:14})});return e.confirm?p(j,{onPositiveClick:()=>J(e.key,r)},{trigger:()=>n(!0),default:()=>e.confirm}):n(!1)})):null},X=!0;f()&&v(()=>{X=!1});let ee=r(()=>{let e=o.value.onLoad;if(e)return async t=>{try{return await e(t)}catch(e){let n=Reflect.get(t,m.value),r=typeof n==`string`||typeof n==`number`?_.value.nodes.get(n):void 0;return X&&r&&w(r)===w(t)&&i(`load-error`,e,t),!1}}}),te=r(()=>{if(!n.data.length)return!1;let e=L.value;if(!o.value.virtualScroll||!e||o.value.showIrrelevantNodes!==!1)return!0;let t=e.toLowerCase(),r=o.value.filter??((e,n)=>{let r=Reflect.get(n,h.value);return typeof r==`string`&&r.toLowerCase().includes(t)});for(let t of _.value.nodes.values())if(r(e,t))return!0;return!1}),Z=S(),ne=r(()=>e(n.density)),re=r(()=>({...o.value,data:n.data,virtualScroll:!!(o.value.virtualScroll&&te.value),keyField:m.value,labelField:h.value,childrenField:g.value,draggable:d.value.draggable,showLine:d.value.showLine,blockLine:o.value.blockLine??!0,blockNode:o.value.blockNode??!0,pattern:L.value,expandedKeys:A.value,selectedKeys:N.value,checkedKeys:P.value,renderPrefix:K,renderLabel:q,renderSuffix:Y,themeOverrides:{nodeHeight:n.density===`compact`?`28px`:n.density===`comfortable`?`40px`:`34px`,nodeWrapperPadding:`0`,...o.value.themeOverrides},onLoad:ee.value,onUpdateExpandedKeys:void 0,onUpdateSelectedKeys:void 0,onUpdateCheckedKeys:void 0,"onUpdate:expandedKeys":H,"onUpdate:selectedKeys":U,"onUpdate:checkedKeys":W,onDrop:e=>{i(`node-drop`,e),V(`onDrop`,[e])}})),ie=()=>z.value?$():Q(),Q=()=>{H([..._.value.expandableKeys]),x.value=!0},$=()=>H([],[],{node:null,action:`collapse`}),ae=()=>i(`add`),oe=()=>i(`refresh`),se={expandAll:Q,collapseAll:$,selectNode:e=>U([e]),clearSelection:()=>U([]),setCheckedKeys:e=>W([...e]),clearChecked:()=>W([]),getSelectedNode:()=>G.value,getCheckedData:()=>{let e=Z.value?.getCheckedData();return e?{keys:e.keys,options:e.options}:{keys:[...P.value],options:B(P.value)}},getIndeterminateData:()=>{let e=Z.value?.getIndeterminateData();return e?{keys:e.keys,options:e.options}:{keys:[],options:[]}},scrollTo:(...e)=>{let t=Z.value?.scrollTo;t?.(...e)},expandedKeys:A,selectedKeys:N,checkedKeys:P};return{internalSearchPattern:I,expandedKeys:A,selectedKeys:N,checkedKeys:P,isAllExpanded:z,treeData:r(()=>n.data),currentSearchPattern:L,renderPrefix:K,renderLabel:q,renderSuffix:Y,treeBindings:re,treeRef:Z,density:ne,toggleExpandAll:ie,handleExpandedKeysChange:H,handleSelectedKeysChange:U,handleCheckedKeysChange:W,handleDrop:e=>i(`node-drop`,e),handleAdd:ae,handleRefresh:oe,expose:se}}const B={key:0,class:`c-tree-toolbar`},V={class:`toolbar-left`},H={class:`toolbar-right`},U={class:`c-tree-container`};var W=n(d({name:`C_Tree`,__name:`index`,props:{data:{},mode:{default:`custom`},treeProps:{},density:{default:`default`},keyField:{},labelField:{},childrenField:{},searchPattern:{},searchable:{type:Boolean,default:!0},searchPlaceholder:{default:`搜索...`},draggable:{type:Boolean,default:void 0},showLine:{type:Boolean,default:void 0},showToolbar:{type:Boolean,default:!0},addable:{type:Boolean,default:!0},addText:{default:`新增`},refreshable:{type:Boolean,default:!0},iconField:{},iconConfig:{},statusConfigs:{},actions:{},defaultExpandAll:{type:Boolean,default:void 0},defaultExpandedKeys:{},defaultSelectedKeys:{},defaultCheckedKeys:{},expandedKeys:{},selectedKeys:{},checkedKeys:{}},emits:[`update:searchPattern`,`update:expandedKeys`,`update:selectedKeys`,`update:checkedKeys`,`node-select`,`node-action`,`node-drop`,`load-error`,`add`,`refresh`],setup(e,{expose:n,emit:d}){let f=e,p=d,v=E(),b=P(),S=r(()=>({"--c-tree-border":b.value.borderColor,"--c-tree-surface":b.value.actionColor,"--c-tree-radius":b.value.borderRadius})),{currentSearchPattern:w,isAllExpanded:D,treeBindings:j,treeRef:M,density:F,toggleExpandAll:I,handleAdd:L,handleRefresh:R,expose:W}=z(f,p,v);return n(W),(n,r)=>(y(),o(`div`,{class:g([`c-tree`,[`c-tree--${T(F).density}`,{"c-tree--virtual":T(j).virtualScroll}]]),style:_(S.value)},[e.showToolbar?(y(),o(`div`,B,[s(`div`,V,[e.searchable?(y(),i(T(A),{key:0,value:T(w),"onUpdate:value":r[0]||=e=>m(w)?w.value=e:null,size:T(F).size,placeholder:e.searchPlaceholder,"input-props":{"aria-label":`搜索树节点`},clearable:``,class:`search-input`},{prefix:O(()=>[u(t,{name:`mdi:magnify`,size:16})]),_:1},8,[`value`,`size`,`placeholder`])):a(`v-if`,!0)]),s(`div`,H,[x(n.$slots,`toolbar-actions`,{},()=>[e.addable?(y(),i(T(k),{key:0,type:`primary`,size:T(F).size,onClick:r[1]||=e=>T(L)()},{icon:O(()=>[u(t,{name:`mdi:plus`,size:16})]),default:O(()=>[l(` `+C(e.addText),1)]),_:1},8,[`size`])):a(`v-if`,!0),u(T(k),{size:T(F).size,disabled:!e.data.length,"aria-pressed":T(D),onClick:T(I)},{icon:O(()=>[u(t,{name:`mdi:file-tree`,size:16})]),default:O(()=>[l(` `+C(T(D)?`收起全部`:`展开全部`),1)]),_:1},8,[`size`,`disabled`,`aria-pressed`,`onClick`]),e.refreshable?(y(),i(T(k),{key:1,size:T(F).size,onClick:T(R)},{icon:O(()=>[u(t,{name:`mdi:refresh`,size:16})]),default:O(()=>[r[2]||=l(` 刷新 `,-1)]),_:1},8,[`size`,`onClick`])):a(`v-if`,!0)],!0)])])):a(`v-if`,!0),s(`div`,U,[u(T(N),h({ref_key:`treeRef`,ref:M},T(j),{class:`tree-instance`}),c({_:2},[n.$slots.empty?{name:`empty`,fn:O(()=>[x(n.$slots,`empty`,{},void 0,!0)]),key:`0`}:void 0]),1040)])],6))}}),[[`__scopeId`,`data-v-7a932d60`]]);export{z as n,F as r,W as t};
1
+ import{t as e}from"./density.js";import{t}from"./useComponentLocale.js";import{t as n}from"./C_Icon2.js";import{t as r}from"./export-helper.js";import{computed as i,createBlock as a,createCommentVNode as o,createElementBlock as s,createElementVNode as c,createSlots as l,createTextVNode as u,createVNode as d,defineComponent as f,getCurrentScope as p,h as m,isRef as h,mergeProps as g,normalizeClass as _,normalizeStyle as v,onScopeDispose as y,openBlock as b,ref as x,renderSlot as S,shallowRef as C,toDisplayString as w,toRaw as T,unref as E,useSlots as D,watch as O,withCtx as k}from"vue";import{NButton as A,NInput as j,NPopconfirm as M,NTag as N,NTree as P,useThemeVars as F}from"naive-ui";const I={menu:{draggable:!0,showLine:!0,iconConfig:{typeMap:{directory:`mdi:folder`,menu:`mdi:file-document`,button:`mdi:button-cursor`}},actions:[{key:`add`,text:`新增子菜单`,icon:`mdi:plus`,type:`primary`},{key:`edit`,text:`编辑`,icon:`mdi:pencil`,type:`info`},{key:`delete`,text:`删除`,icon:`mdi:delete`,type:`error`,confirm:`确认删除该菜单吗?`}]},file:{draggable:!1,showLine:!1,iconConfig:{typeMap:{folder:`mdi:folder`,file:`mdi:file-document`,image:`mdi:file-image`,video:`mdi:file-video`,audio:`mdi:file-music`}},actions:[{key:`open`,text:`打开`,icon:`mdi:folder-open`,type:`primary`},{key:`rename`,text:`重命名`,icon:`mdi:rename-box`,type:`info`},{key:`delete`,text:`删除`,icon:`mdi:delete`,type:`error`,confirm:`确认删除该文件吗?`}]},org:{draggable:!1,showLine:!0,iconConfig:{typeMap:{department:`mdi:domain`,user:`mdi:account`,manager:`mdi:account-tie`}},actions:[{key:`add`,text:`新增下级`,icon:`mdi:plus`,type:`primary`},{key:`edit`,text:`编辑`,icon:`mdi:pencil`,type:`info`}]},custom:{}},L=e=>typeof e==`string`||typeof e==`number`,R=e=>!!e&&typeof e==`object`;function z(e,t,n,r){let i=new Map,a=new Set,o=new WeakSet,s=[],c=e=>{for(let t=e.length-1;t>=0;t--)s.push(e[t])};for(c(e);s.length;){let e=s.pop();if(!R(e)||o.has(e))continue;o.add(e);let l=Reflect.get(e,t),u=L(l);u&&!i.has(l)&&i.set(l,e);let d=r?r(e):Reflect.get(e,n);Array.isArray(d)&&d.length&&(u&&a.add(l),c(d))}return{nodes:i,expandableKeys:[...a]}}function B(r,a,o={}){let{t:s}=t(),c=i(()=>r.treeProps??{}),l=i(()=>I[r.mode??`custom`]),u=i(()=>r.draggable??c.value.draggable??l.value.draggable??!1),d=i(()=>r.showLine??c.value.showLine??l.value.showLine??!0),f=i(()=>r.actions??(l.value.actions??[]).map(e=>({...e,text:s(e.key===`edit`||e.key===`delete`?`common.${e.key}`:`tree.${r.mode}.${e.key}`),confirm:e.confirm?s(`tree.${r.mode}.deleteConfirm`):void 0}))),h=i(()=>({...l.value,...r,draggable:u.value,showLine:d.value,iconConfig:{default:`mdi:circle-outline`,...l.value.iconConfig,...r.iconConfig,typeMap:{...l.value.iconConfig?.typeMap,...r.iconConfig?.typeMap},colorMap:{...l.value.iconConfig?.colorMap,...r.iconConfig?.colorMap}},actions:f.value})),g=i(()=>r.keyField??c.value.keyField??`id`),_=i(()=>r.labelField??c.value.labelField??`name`),v=i(()=>r.childrenField??c.value.childrenField??`children`),b=i(()=>z(r.data,g.value,v.value,c.value.getChildren)),S=()=>r.defaultExpandAll??c.value.defaultExpandAll??!1,w=x(S()),E=e=>{let t=`default${e}Keys`;return[...r[t]??c.value[t]??[]]},D=x(S()?b.value.expandableKeys:E(`Expanded`)),k=x(E(`Selected`)),j=x(E(`Checked`)),P=i({get:()=>r.expandedKeys??c.value.expandedKeys??D.value,set:e=>W(e)}),F=i({get:()=>r.selectedKeys??c.value.selectedKeys??k.value,set:e=>G(e)}),L=i({get:()=>r.checkedKeys??c.value.checkedKeys??j.value,set:e=>K(e)}),R=x(``),B=i({get:()=>r.searchPattern??c.value.pattern??R.value,set:e=>{R.value=e,a(`update:searchPattern`,e)}}),V=i(()=>{let e=b.value.expandableKeys,t=new Set(P.value);return e.length>0&&e.every(e=>t.has(e))});O(()=>b.value.expandableKeys,e=>{w.value&&(D.value=[...e])}),O(S,e=>{w.value=e,e&&(D.value=[...b.value.expandableKeys])});for(let[e,t]of[[`Expanded`,D],[`Selected`,k],[`Checked`,j]]){let n=`default${e}Keys`;O(()=>r[n]??c.value[n],r=>{c.value.watchProps?.includes(n)&&(t.value=e===`Expanded`&&S()?[...b.value.expandableKeys]:[...r??[]])})}let H=e=>e.map(e=>b.value.nodes.get(e)??null),U=(e,t)=>{let n=c.value[e],r=Array.isArray(n)?n:[n];for(let e of r)typeof e==`function`&&e(...t)},W=(e,t=H(e),n={node:null,action:`expand`})=>{n.action!==`filter`&&(w.value=!1),D.value=[...e],a(`update:expandedKeys`,e,t,n),U(`onUpdateExpandedKeys`,[e,t,n]),U(`onUpdate:expandedKeys`,[e,t,n])},G=(e,t=H(e),n={node:t[0]??null,action:e.length?`select`:`unselect`})=>{k.value=[...e],a(`update:selectedKeys`,e,t,n),a(`node-select`,t[0]??null,e),U(`onUpdateSelectedKeys`,[e,t,n]),U(`onUpdate:selectedKeys`,[e,t,n])},K=(e,t=H(e),n={node:null,action:e.length?`check`:`uncheck`})=>{j.value=[...e],a(`update:checkedKeys`,e,t,n),U(`onUpdateCheckedKeys`,[e,t,n]),U(`onUpdate:checkedKeys`,[e,t,n])},ee=i(()=>b.value.nodes.get(F.value[0])??null),q=e=>{if(o.prefix)return o.prefix(e);if(c.value.renderPrefix)return c.value.renderPrefix(e);let t=Reflect.get(e.option,`prefix`);if(typeof t==`function`)return t();let i=e.option,a=h.value.iconConfig,s=Reflect.get(i,`type`),l=typeof s==`string`?s:``,u=Reflect.get(i,r.iconField??`icon`);return m(n,{name:typeof u==`string`?u:a.typeMap[l]??a.default,size:16,color:a.colorMap[l]??`currentColor`,class:`c-tree-node-icon`})},J=e=>{if(o.label)return o.label(e);if(c.value.renderLabel)return c.value.renderLabel(e);let t=String(Reflect.get(e.option,_.value)??``);return m(`span`,{class:`c-tree-node-label`},[m(`span`,{class:`c-tree-node-title`,title:t},t),...(r.statusConfigs??[]).flatMap(t=>{let n=Reflect.get(e.option,t.field),r=typeof n==`number`||typeof n==`string`?t.values[n]:void 0;return r?.text?[m(N,{type:r.type,size:`small`,class:`c-tree-node-status`},{default:()=>r.text})]:[]})])},Y=(e,t)=>{e===`add`?a(`add`,t):a(`node-action`,e,t)},X=e=>{if(o.suffix)return o.suffix(e);if(c.value.renderSuffix)return c.value.renderSuffix(e);let t=Reflect.get(e.option,`suffix`);if(typeof t==`function`)return t();let r=e.option,i=h.value.actions.filter(e=>!e.show||e.show(r));return i.length?m(`span`,{class:`tree-actions`,onClick:e=>e.stopPropagation()},i.map(e=>{let t=t=>m(A,{size:`tiny`,type:e.type??`default`,quaternary:!0,disabled:!!(c.value.disabled||Reflect.get(r,c.value.disabledField??`disabled`)),"aria-label":e.text||e.key,title:e.text,onClick:n=>{n.stopPropagation(),t||Y(e.key,r)}},{icon:()=>m(n,{name:e.icon,size:14})});return e.confirm?m(M,{onPositiveClick:()=>Y(e.key,r)},{trigger:()=>t(!0),default:()=>e.confirm}):t(!1)})):null},Z=!0;p()&&y(()=>{Z=!1});let te=i(()=>{let e=c.value.onLoad;if(e)return async t=>{try{return await e(t)}catch(e){let n=Reflect.get(t,g.value),r=typeof n==`string`||typeof n==`number`?b.value.nodes.get(n):void 0;return Z&&r&&T(r)===T(t)&&a(`load-error`,e,t),!1}}}),ne=i(()=>{if(!r.data.length)return!1;let e=B.value;if(!c.value.virtualScroll||!e||c.value.showIrrelevantNodes!==!1)return!0;let t=e.toLowerCase(),n=c.value.filter??((e,n)=>{let r=Reflect.get(n,_.value);return typeof r==`string`&&r.toLowerCase().includes(t)});for(let t of b.value.nodes.values())if(n(e,t))return!0;return!1}),Q=C(),re=i(()=>e(r.density)),ie=i(()=>({...c.value,data:r.data,virtualScroll:!!(c.value.virtualScroll&&ne.value),keyField:g.value,labelField:_.value,childrenField:v.value,draggable:h.value.draggable,showLine:h.value.showLine,blockLine:c.value.blockLine??!0,blockNode:c.value.blockNode??!0,pattern:B.value,expandedKeys:P.value,selectedKeys:F.value,checkedKeys:L.value,renderPrefix:q,renderLabel:J,renderSuffix:X,themeOverrides:{nodeHeight:r.density===`compact`?`28px`:r.density===`comfortable`?`40px`:`34px`,nodeWrapperPadding:`0`,...c.value.themeOverrides},onLoad:te.value,onUpdateExpandedKeys:void 0,onUpdateSelectedKeys:void 0,onUpdateCheckedKeys:void 0,"onUpdate:expandedKeys":W,"onUpdate:selectedKeys":G,"onUpdate:checkedKeys":K,onDrop:e=>{a(`node-drop`,e),U(`onDrop`,[e])}})),ae=()=>V.value?oe():$(),$=()=>{W([...b.value.expandableKeys]),w.value=!0},oe=()=>W([],[],{node:null,action:`collapse`}),se=()=>a(`add`),ce=()=>a(`refresh`),le={expandAll:$,collapseAll:oe,selectNode:e=>G([e]),clearSelection:()=>G([]),setCheckedKeys:e=>K([...e]),clearChecked:()=>K([]),getSelectedNode:()=>ee.value,getCheckedData:()=>{let e=Q.value?.getCheckedData();return e?{keys:e.keys,options:e.options}:{keys:[...L.value],options:H(L.value)}},getIndeterminateData:()=>{let e=Q.value?.getIndeterminateData();return e?{keys:e.keys,options:e.options}:{keys:[],options:[]}},scrollTo:(...e)=>{let t=Q.value?.scrollTo;t?.(...e)},expandedKeys:P,selectedKeys:F,checkedKeys:L};return{internalSearchPattern:R,expandedKeys:P,selectedKeys:F,checkedKeys:L,isAllExpanded:V,treeData:i(()=>r.data),currentSearchPattern:B,renderPrefix:q,renderLabel:J,renderSuffix:X,treeBindings:ie,treeRef:Q,density:re,toggleExpandAll:ae,handleExpandedKeysChange:W,handleSelectedKeysChange:G,handleCheckedKeysChange:K,handleDrop:e=>a(`node-drop`,e),handleAdd:se,handleRefresh:ce,expose:le}}const V={key:0,class:`c-tree-toolbar`},H={class:`toolbar-left`},U={class:`toolbar-right`},W={class:`c-tree-container`};var G=r(f({name:`C_Tree`,__name:`index`,props:{data:{},mode:{default:`custom`},treeProps:{},density:{default:`default`},keyField:{},labelField:{},childrenField:{},searchPattern:{},searchable:{type:Boolean,default:!0},searchPlaceholder:{},draggable:{type:Boolean,default:void 0},showLine:{type:Boolean,default:void 0},showToolbar:{type:Boolean,default:!0},addable:{type:Boolean,default:!0},addText:{},refreshable:{type:Boolean,default:!0},iconField:{},iconConfig:{},statusConfigs:{},actions:{},defaultExpandAll:{type:Boolean,default:void 0},defaultExpandedKeys:{},defaultSelectedKeys:{},defaultCheckedKeys:{},expandedKeys:{},selectedKeys:{},checkedKeys:{}},emits:[`update:searchPattern`,`update:expandedKeys`,`update:selectedKeys`,`update:checkedKeys`,`node-select`,`node-action`,`node-drop`,`load-error`,`add`,`refresh`],setup(e,{expose:r,emit:f}){let{t:p}=t(),m=e,y=f,x=D(),C=F(),T=i(()=>({"--c-tree-border":C.value.borderColor,"--c-tree-surface":C.value.actionColor,"--c-tree-radius":C.value.borderRadius})),{currentSearchPattern:O,isAllExpanded:M,treeBindings:N,treeRef:I,density:L,toggleExpandAll:R,handleAdd:z,handleRefresh:G,expose:K}=B(m,y,x);return r(K),(t,r)=>(b(),s(`div`,{class:_([`c-tree`,[`c-tree--${E(L).density}`,{"c-tree--virtual":E(N).virtualScroll}]]),style:v(T.value)},[e.showToolbar?(b(),s(`div`,V,[c(`div`,H,[e.searchable?(b(),a(E(j),{key:0,value:E(O),"onUpdate:value":r[0]||=e=>h(O)?O.value=e:null,size:E(L).size,placeholder:e.searchPlaceholder??E(p)(`common.search`),"input-props":{"aria-label":E(p)(`tree.search`)},clearable:``,class:`search-input`},{prefix:k(()=>[d(n,{name:`mdi:magnify`,size:16})]),_:1},8,[`value`,`size`,`placeholder`,`input-props`])):o(`v-if`,!0)]),c(`div`,U,[S(t.$slots,`toolbar-actions`,{},()=>[e.addable?(b(),a(E(A),{key:0,type:`primary`,size:E(L).size,onClick:r[1]||=e=>E(z)()},{icon:k(()=>[d(n,{name:`mdi:plus`,size:16})]),default:k(()=>[u(` `+w(e.addText??E(p)(`common.add`)),1)]),_:1},8,[`size`])):o(`v-if`,!0),d(E(A),{size:E(L).size,disabled:!e.data.length,"aria-pressed":E(M),onClick:E(R)},{icon:k(()=>[d(n,{name:`mdi:file-tree`,size:16})]),default:k(()=>[u(` `+w(E(M)?E(p)(`tree.collapseAll`):E(p)(`tree.expandAll`)),1)]),_:1},8,[`size`,`disabled`,`aria-pressed`,`onClick`]),e.refreshable?(b(),a(E(A),{key:1,size:E(L).size,onClick:E(G)},{icon:k(()=>[d(n,{name:`mdi:refresh`,size:16})]),default:k(()=>[u(` `+w(E(p)(`common.refresh`)),1)]),_:1},8,[`size`,`onClick`])):o(`v-if`,!0)],!0)])])):o(`v-if`,!0),c(`div`,W,[d(E(P),g({ref_key:`treeRef`,ref:I},E(N),{class:`tree-instance`}),l({_:2},[t.$slots.empty?{name:`empty`,fn:k(()=>[S(t.$slots,`empty`,{},void 0,!0)]),key:`0`}:void 0]),1040)])],6))}}),[[`__scopeId`,`data-v-d71f9eac`]]);export{B as n,I as r,G as t};
@@ -1 +1 @@
1
- const e=require(`./chunk.cjs`),t=require(`./C_Icon2.cjs`),n=require(`./export-helper.cjs`);let r=require(`vue`),i=require(`naive-ui`),a=require(`spark-md5`);a=e.t(a);const o=2*1024*1024,s={pending:`等待上传`,validating:`校验文件…`,hashing:`计算校验…`,uploading:`上传中…`,success:`上传成功`,error:`上传失败`,paused:`已暂停`,instant:`秒传成功`},c={pending:`default`,validating:`info`,hashing:`info`,uploading:`info`,success:`success`,error:`error`,paused:`warning`,instant:`success`},l={"image/":`mdi:file-image-outline`,"video/":`mdi:file-video-outline`,"audio/":`mdi:file-music-outline`,"application/pdf":`mdi:file-pdf-box`,"application/zip":`mdi:folder-zip-outline`,"application/x-rar":`mdi:folder-zip-outline`,"application/vnd.ms-excel":`mdi:file-excel-outline`,"application/vnd.openxmlformats-officedocument.spreadsheetml":`mdi:file-excel-outline`,"application/msword":`mdi:file-word-outline`,"application/vnd.openxmlformats-officedocument.wordprocessingml":`mdi:file-word-outline`,"text/":`mdi:file-document-outline`,default:`mdi:file-outline`};function u(e){for(let[t,n]of Object.entries(l))if(t!==`default`&&e.startsWith(t))return n;return l.default}function d(e){if(e===0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`,`TB`],n=Math.floor(Math.log(e)/Math.log(1024));return`${(e/1024**n).toFixed(n>0?1:0)} ${t[n]}`}const f=()=>new Promise(e=>{typeof requestAnimationFrame==`function`?requestAnimationFrame(()=>e()):setTimeout(e,0)});function p(e){let t=(0,r.ref)(0),n=(0,r.ref)(0),i=(0,r.computed)(()=>t.value>0);async function o(r,i){t.value+=1,n.value=0,i?.(0);let o=new a.default.ArrayBuffer,s=Math.max(1,Math.trunc(Number(e.value)||1)),c=Math.max(1,Math.ceil(r.size/s));try{if(r.size===0)return o.append(new ArrayBuffer(0)),n.value=100,i?.(100),o.end();for(let e=0;e<c;e+=1){let t=e*s,a=await r.slice(t,t+s).arrayBuffer();o.append(a),n.value=Math.round((e+1)/c*100),i?.(n.value),await f()}return o.end()}finally{t.value=Math.max(0,t.value-1)}}return{hashing:i,hashProgress:(0,r.readonly)(n),calculateHash:o}}function m(e){let t=new Map,n=new Map;function r(t){let n=Math.max(1,Math.trunc(Number(e.chunkSize.value)||1)),r=[],i=0,a=0;for(;a<t.size;){let e=Math.min(a+n,t.size);r.push({index:i,blob:t.slice(a,e),size:e-a,uploaded:!1}),a=e,i++}return r}async function i(t,n){if(e.uploadedChunksQuery?.value)try{let r=await e.uploadedChunksQuery.value(t);for(let e of r){let t=n[e];t&&(t.uploaded=!0)}}catch{}}function a(t){return new Promise((n,r)=>{let i=!1,a=()=>{i||(i=!0,n())},o=e=>{i||(i=!0,t.setError(),r(e instanceof Error?e:Error(String(e))))},s={action:e.action.value,headers:e.headers.value,data:{...e.data.value,hash:t.hash,chunkIndex:t.chunk.index,totalChunks:t.totalChunks,filename:t.file.name},file:t.chunk.blob,filename:t.file.name,hash:t.hash,chunkIndex:t.chunk.index,totalChunks:t.totalChunks,onProgress:()=>{},onSuccess:()=>{if(!i){if(t.isCancelled()){a();return}t.chunk.uploaded=!0,t.setUploadedBytes(t.chunk.size),t.onProgress({uploadedChunks:t.chunks.filter(e=>e.uploaded).length,totalChunks:t.totalChunks,uploadedBytes:t.chunks.filter(e=>e.uploaded).reduce((e,t)=>e+t.size,0),totalBytes:t.totalBytes}),a()}},onError:o};try{let n=e.customRequest?.value?e.customRequest.value(s):h(s);t.abortControllers.push(()=>{try{n.abort()}catch{}finally{a()}})}catch(e){o(e)}})}async function o(o){let{uid:c,file:l,hash:u,onProgress:d,onSuccess:f,onError:p,isPaused:m}=o,h=Symbol(c);n.set(c,h);let g=()=>n.get(c)!==h,_=()=>{g()||n.delete(c)},v=r(l),y=v.length,b=l.size,x=0;if(await i(u,v),g()||m()){_();return}x=v.filter(e=>e.uploaded).reduce((e,t)=>e+t.size,0),d({uploadedChunks:v.filter(e=>e.uploaded).length,totalChunks:y,uploadedBytes:x,totalBytes:b});let S=v.filter(e=>!e.uploaded);if(S.length===0){try{g()||await s(u,l.name,y,f,p,g)}finally{_()}return}let C=[];t.set(c,C);let w=Math.max(1,Math.trunc(Number(e.concurrency.value)||1)),T=0,E=!1;async function D(){for(;T<S.length&&!E&&!m()&&!g();){let e=S[T++];await a({chunk:e,hash:u,file:l,totalChunks:y,chunks:v,totalBytes:b,abortControllers:C,onProgress:e=>{g()||d(e)},setUploadedBytes:e=>{x+=e},setError:()=>{E=!0},isCancelled:g})}}let O=Array.from({length:Math.min(w,S.length)},()=>D());try{let e=(await Promise.allSettled(O)).find(e=>e.status===`rejected`);e&&!g()?p(e.reason instanceof Error?e.reason:Error(String(e.reason))):!E&&!m()&&!g()&&await s(u,l.name,y,f,p,g)}finally{g()||t.delete(c),_()}}async function s(t,n,r,i,a,o){if(e.mergeChunks?.value)try{let a=await e.mergeChunks.value(t,n,r);o()||i(a)}catch(e){o()||a(e instanceof Error?e:Error(`分片合并失败`))}else o()||i({message:`分片上传完成(未配置合并函数)`})}function c(e){n.delete(e),t.get(e)?.forEach(e=>e()),t.delete(e)}function l(){n.clear(),t.forEach(e=>{e.forEach(e=>e())}),t.clear()}return{createChunks:r,uploadChunks:o,abortUpload:c,abortAll:l}}function h(e){let t=new XMLHttpRequest;t.open(`POST`,e.action),e.headers&&Object.entries(e.headers).forEach(([e,n])=>{t.setRequestHeader(e,n)}),t.upload.addEventListener(`progress`,t=>{t.lengthComputable&&e.onProgress?.(Math.round(t.loaded/t.total*100))}),t.addEventListener(`load`,()=>{if(t.status>=200&&t.status<300){let n;try{n=JSON.parse(t.responseText)}catch{n=t.responseText}e.onSuccess?.(n)}else e.onError?.(Error(`上传失败: HTTP ${t.status}`))}),t.addEventListener(`error`,()=>{e.onError?.(Error(`网络错误`))}),t.addEventListener(`abort`,()=>{e.onError?.(new DOMException(`上传已取消`,`AbortError`))});let n=new FormData;return n.append(`file`,e.file,e.filename),e.data&&Object.entries(e.data).forEach(([e,t])=>{n.append(e,String(t))}),t.send(n),{abort:()=>t.abort()}}function g(e){return e instanceof Error?e:Error(String(e))}function _(e){let t=[],n=(0,r.ref)(0),i=new Map,a=()=>{n.value=i.size},o=()=>Math.max(1,Math.trunc(Number(e.concurrency.value)||1));function s(){for(;i.size<o()&&t.length>0;){let n=t.shift(),{file:r}=n;if(!r.raw||i.has(r.uid))continue;let o=!1,c=e=>{o||(o=!0,i.delete(r.uid),a(),e?.error?n.onError(r.uid,e.error):e&&`response`in e&&n.onSuccess(r.uid,e.response),s())},l={action:e.action.value,headers:e.headers.value,data:e.data.value,file:r.raw,filename:r.name,onProgress:e=>n.onProgress(r.uid,e),onSuccess:e=>c({response:e}),onError:e=>c({error:e})};i.set(r.uid,{abort:()=>void 0,settle:c}),a();try{let t=e.customRequest?.value?e.customRequest.value(l):v(l),n=i.get(r.uid);n&&(n.abort=t.abort)}catch(e){c({error:g(e)})}}}function c(e,n,r,i){l(e.uid),t.push({file:e,onProgress:n,onSuccess:r,onError:i}),s()}function l(e){for(let n=t.length-1;n>=0;--n)t[n].file.uid===e&&t.splice(n,1);let n=i.get(e);if(n){n.settle();try{n.abort()}catch{}}}function u(){t.length=0;let e=[...i.values()];i.clear(),a(),e.forEach(e=>{e.settle();try{e.abort()}catch{}})}return(0,r.watch)(e.concurrency,s),{activeCount:(0,r.readonly)(n),enqueue:c,abort:l,abortAll:u}}function v(e){let t=new XMLHttpRequest;t.open(`POST`,e.action),Object.entries(e.headers??{}).forEach(([e,n])=>{t.setRequestHeader(e,n)}),t.upload.addEventListener(`progress`,t=>{t.lengthComputable&&e.onProgress?.(Math.round(t.loaded/t.total*100))}),t.addEventListener(`load`,()=>{if(t.status>=200&&t.status<300){let n=t.responseText;try{n=JSON.parse(t.responseText)}catch{}e.onSuccess?.(n)}else e.onError?.(Error(`上传失败: HTTP ${t.status}`))}),t.addEventListener(`error`,()=>e.onError?.(Error(`网络错误`)));let n=new FormData;return n.append(`file`,e.file,e.filename),Object.entries(e.data??{}).forEach(([e,t])=>{n.append(e,String(t))}),t.send(n),{abort:()=>t.abort()}}function y(e){let t=(0,r.computed)(()=>e.action??``),n=(0,r.computed)(()=>e.headers??{}),i=(0,r.computed)(()=>e.data??{}),a=(0,r.computed)(()=>{let t=Math.trunc(Number(e.chunkSize));return Number.isFinite(t)&&t>0?t:o}),s=(0,r.computed)(()=>{let t=Math.trunc(Number(e.concurrency));return Number.isFinite(t)&&t>0?t:3}),c=(0,r.computed)(()=>e.customRequest),l=(0,r.computed)(()=>e.instantCheck),u=(0,r.computed)(()=>e.uploadedChunksQuery),d=(0,r.computed)(()=>e.mergeChunks),f=(0,r.ref)((e.defaultFileList??[]).map(e=>({...e}))),h=(0,r.reactive)(new Set),g=new Map,v=new Set,{hashing:y,hashProgress:b,calculateHash:x}=p(a),S=m({chunkSize:a,concurrency:s,action:t,headers:n,data:i,customRequest:c,uploadedChunksQuery:u,mergeChunks:d}),C=_({concurrency:s,action:t,headers:n,data:i,customRequest:c}),w=(0,r.computed)(()=>{let e=f.value;if(e.length===0)return 0;let t=e.reduce((e,t)=>e+t.percent,0);return Math.round(t/e.length)});function T(){return typeof crypto<`u`&&`randomUUID`in crypto?`upload-${crypto.randomUUID()}`:`upload-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function E(e){if(e.type.startsWith(`image/`)){let t=URL.createObjectURL(e);return v.add(t),t}}function D(t){let n=[];for(let r of t){if(Number.isFinite(e.maxCount)&&(e.maxCount??0)>0&&f.value.length+n.length>=Math.trunc(e.maxCount))break;let t={uid:T(),name:r.name,size:r.size,type:r.type,status:`pending`,percent:0,raw:r,thumbUrl:E(r)};n.push(t)}return f.value.push(...n),n}function O(e,t){let n=f.value.find(t=>t.uid===e);n&&Object.assign(n,t)}function k(e){g.set(e,Symbol(e)),S.abortUpload(e),C.abort(e),h.delete(e);let t=f.value.findIndex(t=>t.uid===e);if(t!==-1){let e=f.value[t];M(e.thumbUrl),f.value.splice(t,1)}}function A(){S.abortAll(),C.abortAll(),h.clear(),f.value.forEach(e=>{M(e.thumbUrl)}),f.value=[],g.clear()}async function j(t){if((e.maxSize??0)>0&&t.size>e.maxSize)return null;if(e.beforeUpload){let n=await e.beforeUpload(t);if(n===!1)return null;if(n instanceof File)return(e.maxSize??0)>0&&n.size>e.maxSize?null:n}return t}function M(e){!e||!v.has(e)||(URL.revokeObjectURL(e),v.delete(e))}function N(e,t){return g.get(e)===t&&!h.has(e)&&f.value.some(t=>t.uid===e)}function P(e,t){return x(e.raw,n=>{N(e.uid,t)&&O(e.uid,{percent:n})})}async function F(n){if(!n.raw)return;let r=Symbol(n.uid);g.set(n.uid,r),O(n.uid,{status:`validating`,error:void 0});let i;try{i=await j(n.raw)}catch(e){N(n.uid,r)&&O(n.uid,{status:`error`,error:e instanceof Error?e.message:`文件校验失败`});return}if(N(n.uid,r)){if(!i){O(n.uid,{status:`error`,error:`文件校验未通过`});return}if(i!==n.raw&&(M(n.thumbUrl),Object.assign(n,{raw:i,name:i.name,size:i.size,type:i.type,hash:void 0,chunkProgress:void 0,thumbUrl:E(i)})),!c.value&&!t.value.trim()){O(n.uid,{status:`error`,error:`未配置上传地址`});return}if(l.value&&!n.hash){O(n.uid,{status:`hashing`});try{let e=await P(n,r);if(!N(n.uid,r))return;O(n.uid,{hash:e});let t=await l.value(e,n.raw.name);if(!N(n.uid,r))return;if(t.exists){O(n.uid,{status:`instant`,percent:100,url:t.url});return}}catch{if(!N(n.uid,r))return}}e.chunked&&n.raw.size>a.value?await I(n,r):L(n,r)}}async function I(e,t){let n=e.raw,{hash:r}=e;if(!r){O(e.uid,{status:`hashing`});try{if(r=await P(e,t),!N(e.uid,t))return;O(e.uid,{hash:r})}catch{N(e.uid,t)&&O(e.uid,{status:`error`,error:`Hash 计算失败`});return}}O(e.uid,{status:`uploading`,percent:0}),await S.uploadChunks({uid:e.uid,file:n,hash:r,onProgress:n=>{if(!N(e.uid,t))return;let r=Math.round(n.uploadedBytes/n.totalBytes*100);O(e.uid,{percent:r,chunkProgress:n})},onSuccess:n=>{N(e.uid,t)&&O(e.uid,{status:`success`,percent:100,response:n})},onError:n=>{N(e.uid,t)&&O(e.uid,{status:`error`,error:n.message})},isPaused:()=>h.has(e.uid)})}function L(e,t){O(e.uid,{status:`uploading`,percent:0}),C.enqueue(e,(e,n)=>{N(e,t)&&O(e,{percent:n})},(e,n)=>{N(e,t)&&O(e,{status:`success`,percent:100,response:n})},(e,n)=>{N(e,t)&&O(e,{status:`error`,error:n.message})})}function R(){f.value.filter(e=>e.status===`pending`).forEach(e=>void F(e))}function z(){f.value.forEach(e=>{(e.status===`uploading`||e.status===`hashing`||e.status===`validating`)&&(h.add(e.uid),g.set(e.uid,Symbol(e.uid)),S.abortUpload(e.uid),C.abort(e.uid),O(e.uid,{status:`paused`}))})}function B(){f.value.forEach(e=>{e.status===`paused`&&(h.delete(e.uid),O(e.uid,{status:`pending`}))}),R()}function V(e){let t=f.value.find(t=>t.uid===e);t&&t.status===`error`&&(O(e,{status:`pending`,percent:0,error:void 0}),F(t))}function H(){return f.value.filter(e=>e.status===`success`||e.status===`instant`)}return(0,r.onBeforeUnmount)(()=>{S.abortAll(),C.abortAll(),g.clear(),f.value.forEach(e=>{M(e.thumbUrl)})}),{fileList:f,totalPercent:w,hashing:y,hashProgress:b,addFiles:D,removeFile:k,clearAll:A,startUpload:R,pauseAll:z,resumeAll:B,retryFile:V,processFile:F,getSuccessList:H}}function b(e,t,n,i,a){let o=(0,r.ref)(!1),s=null,c=!1;function l(e){t.value&&(e.preventDefault(),o.value=!0)}function u(e){t.value&&(e.preventDefault(),o.value=!0)}function d(n){if(!t.value)return;n.preventDefault();let r=e.value;r&&!r.contains(n.relatedTarget)&&(o.value=!1)}async function f(e){if(!t.value)return;e.preventDefault(),o.value=!1;let n=e.dataTransfer?.items;if(!n)return;let r=await x(n,e.dataTransfer);if(c||!t.value)return;let s=C(r,i.value);s.length>0&&a(s)}function p(e){if(!n.value)return;let t=e.clipboardData?.items;if(!t)return;let r=[];for(let e=0;e<t.length;e++){let n=t[e];if(n.kind===`file`){let e=n.getAsFile();e&&r.push(e)}}let o=C(r,i.value);o.length>0&&(e.preventDefault(),a(o))}function m(){let t=e.value;!t||s===t||(s=t,t.addEventListener(`dragenter`,l),t.addEventListener(`dragover`,u),t.addEventListener(`dragleave`,d),t.addEventListener(`drop`,f),n.value&&t.addEventListener(`paste`,p))}function h(){let e=s;e&&(e.removeEventListener(`dragenter`,l),e.removeEventListener(`dragover`,u),e.removeEventListener(`dragleave`,d),e.removeEventListener(`drop`,f)),e?.removeEventListener(`paste`,p),s=null}return(0,r.onMounted)(()=>{c=!1,m()}),(0,r.onBeforeUnmount)(()=>{c=!0,h()}),(0,r.watch)([e,t,n],()=>{h(),m()}),{isDragOver:(0,r.readonly)(o)}}async function x(e,t){let n=[];for(let t=0;t<e.length;t++){let r=e[t].webkitGetAsEntry?.();r&&n.push(r)}if(n.length>0)return(await Promise.all(n.map(S))).flat();let r=[],i=t?.files;if(i)for(let e=0;e<i.length;e++)r.push(i[e]);return r}async function S(e){if(e.isFile)return new Promise(t=>{e.file(e=>t([e]),()=>t([]))});if(e.isDirectory){let t=e.createReader(),n=[];for(;;){let e=await new Promise(e=>{t.readEntries(t=>e(t),()=>e([]))});if(e.length===0)break;n.push(...e)}return(await Promise.all(n.map(S))).flat()}return[]}function C(e,t){if(!t)return e;let n=t.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean);return n.length===0?e:e.filter(e=>n.some(t=>{if(t.startsWith(`.`))return e.name.toLowerCase().endsWith(t);if(t.endsWith(`/*`)){let n=t.replace(`/*`,``);return e.type.toLowerCase().startsWith(`${n}/`)}return e.type.toLowerCase()===t}))}const w=[`tabindex`,`aria-disabled`,`onKeydown`],T=[`accept`,`multiple`,`webkitdirectory`,`disabled`],E={class:`upload-area__default`},D={class:`upload-area__text`},O={key:0},k={key:1},A={key:0,class:`upload-area__tip`},j=(0,r.defineComponent)({__name:`UploadArea`,props:{accept:{default:``},multiple:{type:Boolean,default:!1},directory:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},draggable:{type:Boolean,default:!0},pasteable:{type:Boolean,default:!1},tip:{default:``}},emits:[`files`],setup(e,{expose:n,emit:i}){let a=e,o=i,s=(0,r.ref)(),c=(0,r.ref)(),{isDragOver:l}=b(s,(0,r.computed)(()=>a.draggable&&!a.disabled),(0,r.computed)(()=>a.pasteable&&!a.disabled),(0,r.computed)(()=>a.accept),e=>o(`files`,e));function u(){a.disabled||c.value?.click()}function d(e){let t=e.target,n=a.disabled?[]:C(Array.from(t.files??[]),a.accept);n.length>0&&o(`files`,n),t.value=``}return n({triggerSelect:u}),(n,i)=>((0,r.openBlock)(),(0,r.createElementBlock)(`div`,{ref_key:`areaRef`,ref:s,class:(0,r.normalizeClass)([`upload-area`,{"upload-area--drag-over":(0,r.unref)(l),"upload-area--disabled":e.disabled}]),role:`button`,tabindex:e.disabled?-1:0,"aria-disabled":e.disabled,onClick:u,onKeydown:[(0,r.withKeys)((0,r.withModifiers)(u,[`prevent`]),[`enter`]),(0,r.withKeys)((0,r.withModifiers)(u,[`prevent`]),[`space`])]},[(0,r.createElementVNode)(`input`,{ref_key:`inputRef`,ref:c,type:`file`,class:`upload-area__input`,accept:e.accept,multiple:e.multiple,webkitdirectory:e.directory||void 0,disabled:e.disabled,onClick:i[0]||=(0,r.withModifiers)(()=>{},[`stop`]),onChange:d},null,40,T),(0,r.renderSlot)(n.$slots,`default`,{},()=>[(0,r.createElementVNode)(`div`,E,[(0,r.createVNode)(t.t,{name:(0,r.unref)(l)?`mdi:cloud-download-outline`:`mdi:cloud-upload-outline`,class:`upload-area__icon`},null,8,[`name`]),(0,r.createElementVNode)(`div`,D,[(0,r.unref)(l)?((0,r.openBlock)(),(0,r.createElementBlock)(`span`,O,`释放文件到此处`)):((0,r.openBlock)(),(0,r.createElementBlock)(`span`,k,[i[4]||=(0,r.createTextVNode)(` 点击或拖拽文件到此区域上传 `,-1),e.pasteable?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:0},[i[1]||=(0,r.createTextVNode)(` ,支持 `,-1),i[2]||=(0,r.createElementVNode)(`kbd`,null,`Ctrl+V`,-1),i[3]||=(0,r.createTextVNode)(` 粘贴 `,-1)],64)):(0,r.createCommentVNode)(`v-if`,!0)]))]),e.tip?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,A,(0,r.toDisplayString)(e.tip),1)):(0,r.createCommentVNode)(`v-if`,!0)])],!0)],42,w))}});var M=n.t(j,[[`__scopeId`,`data-v-705892ab`]]);const N={class:`file-list__thumb`},P=[`src`,`alt`],F={class:`file-list__info`},I={class:`file-list__name`},L={class:`file-list__meta`},R={class:`file-list__size`},z={key:0,class:`file-list__instant`},B={key:1,class:`file-list__chunk-info`},V={key:2,class:`file-list__error`},H={class:`file-list__actions`},U=(0,r.defineComponent)({__name:`FileList`,props:{fileList:{},showThumbnail:{type:Boolean}},emits:[`remove`,`retry`],setup(e,{emit:n}){let a=n;return(n,o)=>((0,r.openBlock)(),(0,r.createBlock)(r.TransitionGroup,{name:`file-list`,tag:`div`,class:`file-list`},{default:(0,r.withCtx)(()=>[((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)(e.fileList,n=>((0,r.openBlock)(),(0,r.createElementBlock)(`div`,{key:n.uid,class:(0,r.normalizeClass)([`file-list__item`,`file-list__item--${n.status}`])},[(0,r.createCommentVNode)(` 缩略图 / 图标 `),(0,r.createElementVNode)(`div`,N,[e.showThumbnail&&n.thumbUrl?((0,r.openBlock)(),(0,r.createElementBlock)(`img`,{key:0,src:n.thumbUrl,alt:n.name,class:`file-list__thumb-img`},null,8,P)):((0,r.openBlock)(),(0,r.createBlock)(t.t,{key:1,name:(0,r.unref)(u)(n.type),class:`file-list__thumb-icon`},null,8,[`name`]))]),(0,r.createCommentVNode)(` 文件信息 `),(0,r.createElementVNode)(`div`,F,[(0,r.createElementVNode)(`div`,I,[(0,r.createVNode)((0,r.unref)(i.NEllipsis),{"line-clamp":1},{default:(0,r.withCtx)(()=>[(0,r.createTextVNode)((0,r.toDisplayString)(n.name),1)]),_:2},1024)]),(0,r.createElementVNode)(`div`,L,[(0,r.createElementVNode)(`span`,R,(0,r.toDisplayString)((0,r.unref)(d)(n.size)),1),(0,r.createVNode)((0,r.unref)(i.NTag),{type:(0,r.unref)(c)[n.status]||`default`,size:`tiny`,bordered:!1},{default:(0,r.withCtx)(()=>[(0,r.createTextVNode)((0,r.toDisplayString)((0,r.unref)(s)[n.status]||n.status),1)]),_:2},1032,[`type`]),n.status===`instant`?((0,r.openBlock)(),(0,r.createElementBlock)(`span`,z,` ⚡ `)):(0,r.createCommentVNode)(`v-if`,!0)]),(0,r.createCommentVNode)(` 进度条 `),n.status===`uploading`||n.status===`hashing`?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(i.NProgress),{key:0,percentage:n.percent,height:4,"border-radius":2,"show-indicator":!1,status:n.status===`hashing`?`info`:`success`},null,8,[`percentage`,`status`])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 分片进度描述 `),n.chunkProgress&&n.status===`uploading`?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,B,` 分片 `+(0,r.toDisplayString)(n.chunkProgress.uploadedChunks)+`/`+(0,r.toDisplayString)(n.chunkProgress.totalChunks),1)):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 错误信息 `),n.status===`error`&&n.error?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,V,(0,r.toDisplayString)(n.error),1)):(0,r.createCommentVNode)(`v-if`,!0)]),(0,r.createCommentVNode)(` 操作按钮 `),(0,r.createElementVNode)(`div`,H,[n.status===`error`?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(i.NButton),{key:0,text:``,type:`warning`,size:`tiny`,"aria-label":`重试上传`,onClick:e=>a(`retry`,n.uid)},{icon:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:`mdi:refresh`})]),_:1},8,[`onClick`])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createVNode)((0,r.unref)(i.NButton),{text:``,type:`error`,size:`tiny`,"aria-label":`移除文件`,onClick:e=>a(`remove`,n.uid)},{icon:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:`mdi:close`})]),_:1},8,[`onClick`])])],2))),128))]),_:1}))}});var W=n.t(U,[[`__scopeId`,`data-v-04f26012`]]);const G={key:0,class:`image-preview`},K=[`src`,`alt`],q={class:`image-preview__overlay`},J={key:0,class:`image-preview__progress`},Y={class:`image-preview__actions`},X={class:`image-preview__name`},Z=(0,r.defineComponent)({__name:`ImagePreview`,props:{fileList:{}},emits:[`remove`,`retry`],setup(e,{emit:n}){let a=e,o=n,s=(0,r.computed)(()=>a.fileList.filter(e=>e.type?.startsWith(`image/`)));return(e,n)=>s.value.length>0?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,G,[((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)(s.value,e=>((0,r.openBlock)(),(0,r.createElementBlock)(`div`,{key:e.uid,class:(0,r.normalizeClass)([`image-preview__item`,`image-preview__item--${e.status}`])},[e.thumbUrl?((0,r.openBlock)(),(0,r.createElementBlock)(`img`,{key:0,src:e.thumbUrl,alt:e.name,class:`image-preview__img`},null,8,K)):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 遮罩层 `),(0,r.createElementVNode)(`div`,q,[(0,r.createCommentVNode)(` 上传中进度 `),e.status===`uploading`||e.status===`hashing`?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,J,[(0,r.createVNode)((0,r.unref)(i.NProgress),{type:`circle`,percentage:e.percent,"stroke-width":3,style:{width:`40px`}},null,8,[`percentage`])])):e.status===`success`||e.status===`instant`?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:1},[(0,r.createCommentVNode)(` 状态图标 `),(0,r.createVNode)(t.t,{name:`mdi:check-circle`,class:`image-preview__status-icon image-preview__status-icon--success`})],2112)):e.status===`error`?((0,r.openBlock)(),(0,r.createBlock)(t.t,{key:2,name:`mdi:alert-circle`,class:`image-preview__status-icon image-preview__status-icon--error`})):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 操作 `),(0,r.createElementVNode)(`div`,Y,[e.status===`error`?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(i.NButton),{key:0,circle:``,size:`tiny`,type:`warning`,"aria-label":`重试上传`,onClick:t=>o(`retry`,e.uid)},{icon:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:`mdi:refresh`})]),_:1},8,[`onClick`])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createVNode)((0,r.unref)(i.NButton),{circle:``,size:`tiny`,type:`error`,"aria-label":`移除文件`,onClick:t=>o(`remove`,e.uid)},{icon:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:`mdi:close`})]),_:1},8,[`onClick`])])]),(0,r.createCommentVNode)(` 文件名 `),(0,r.createElementVNode)(`div`,X,[(0,r.createVNode)((0,r.unref)(i.NEllipsis),{"line-clamp":1},{default:(0,r.withCtx)(()=>[(0,r.createTextVNode)((0,r.toDisplayString)(e.name),1)]),_:2},1024)])],2))),128))])):(0,r.createCommentVNode)(`v-if`,!0)}});var Q=n.t(Z,[[`__scopeId`,`data-v-32d39ae9`]]);const $={class:`c-upload`},ee={key:0,class:`c-upload__total-progress`},te={class:`c-upload__total-label`},ne=(0,r.defineComponent)({__name:`index`,props:{action:{default:``},headers:{default:()=>({})},data:{default:()=>({})},multiple:{type:Boolean,default:!1},directory:{type:Boolean,default:!1},accept:{default:``},maxSize:{default:0},maxCount:{default:0},disabled:{type:Boolean,default:!1},draggable:{type:Boolean,default:!0},pasteable:{type:Boolean,default:!1},chunked:{type:Boolean,default:!1},chunkSize:{default:o},concurrency:{default:3},showFileList:{type:Boolean,default:!0},listType:{default:`text`},showThumbnail:{type:Boolean,default:!0},customRequest:{},instantCheck:{},uploadedChunksQuery:{},mergeChunks:{},beforeUpload:{},tip:{default:``},defaultFileList:{default:()=>[]}},emits:[`change`,`success`,`error`,`progress`,`remove`,`finish`,`exceed`],setup(e,{expose:t,emit:n}){let a=e,o=n,s=(0,r.ref)(),{fileList:c,totalPercent:l,addFiles:u,removeFile:d,clearAll:f,startUpload:p,pauseAll:m,resumeAll:h,retryFile:g,processFile:_,getSuccessList:v}=y(a),b=(0,r.computed)(()=>c.value.some(e=>e.status===`uploading`||e.status===`hashing`||e.status===`validating`)),x=e=>({...e}),S=()=>c.value.map(x);function C(e){let t=Math.max(0,Math.trunc(Number(a.maxCount)||0));if(t>0&&c.value.length+e.length>t){o(`exceed`,e,S());let n=t-c.value.length;if(n<=0)return;e=e.slice(0,n)}let n=u(e);o(`change`,S()),n.forEach(e=>void _(e))}function w(e){let t=c.value.find(t=>t.uid===e);t&&(o(`remove`,x(t)),d(e),o(`change`,S()))}function T(e){g(e)}let E=new Map,D=!1;return(0,r.watch)(c,e=>{let t=new Set(e.map(e=>e.uid));E.forEach((e,n)=>{t.has(n)||E.delete(n)}),e.forEach(e=>{let t=E.get(e.uid);t&&t.percent!==e.percent&&o(`progress`,x(e),e.percent),t&&t.status!==e.status&&(e.status===`success`||e.status===`instant`)&&o(`success`,x(e),e.response),t&&t.status!==`error`&&e.status===`error`&&o(`error`,x(e),Error(e.error||`上传失败`)),E.set(e.uid,{status:e.status,percent:e.percent})}),e.length>0&&e.every(e=>e.status===`success`||e.status===`instant`||e.status===`error`)?(D||o(`finish`,S()),D=!0):D=!1,o(`change`,S())},{deep:!0}),t({selectFiles:()=>s.value?.triggerSelect(),startUpload:p,pauseAll:m,resumeAll:h,clearAll:()=>{f(),o(`change`,S())},removeFile:e=>{w(e)},retryFile:g,getFileList:S,getSuccessList:()=>v().map(x),get totalPercent(){return l.value}}),(e,t)=>((0,r.openBlock)(),(0,r.createElementBlock)(`div`,$,[(0,r.createCommentVNode)(` 上传区域 `),(0,r.createVNode)(M,{ref_key:`uploadAreaRef`,ref:s,accept:a.accept,multiple:a.multiple,directory:a.directory,disabled:a.disabled,draggable:a.draggable,pasteable:a.pasteable,tip:a.tip,onFiles:C},{default:(0,r.withCtx)(()=>[(0,r.renderSlot)(e.$slots,`area`,{},void 0,!0)]),_:3},8,[`accept`,`multiple`,`directory`,`disabled`,`draggable`,`pasteable`,`tip`]),(0,r.createCommentVNode)(` 总进度条 `),b.value?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,ee,[(0,r.createElementVNode)(`div`,te,[t[0]||=(0,r.createElementVNode)(`span`,null,`总进度`,-1),(0,r.createElementVNode)(`span`,null,(0,r.toDisplayString)((0,r.unref)(l))+`%`,1)]),(0,r.createVNode)((0,r.unref)(i.NProgress),{percentage:(0,r.unref)(l),height:6,"border-radius":3,"show-indicator":!1,status:`success`},null,8,[`percentage`])])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 图片预览模式 `),a.listType===`image`?((0,r.openBlock)(),(0,r.createBlock)(Q,{key:1,"file-list":(0,r.unref)(c),onRemove:w,onRetry:T},null,8,[`file-list`])):a.showFileList&&(0,r.unref)(c).length>0?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:2},[(0,r.createCommentVNode)(` 文件列表模式 `),(0,r.createVNode)(W,{"file-list":(0,r.unref)(c),"show-thumbnail":a.showThumbnail,onRemove:w,onRetry:T},null,8,[`file-list`,`show-thumbnail`])],2112)):(0,r.createCommentVNode)(`v-if`,!0)]))}});var re=n.t(ne,[[`__scopeId`,`data-v-58ca8e42`]]);Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return re}});
1
+ const e=require(`./chunk.cjs`),t=require(`./C_Icon2.cjs`),n=require(`./export-helper.cjs`);let r=require(`vue`),i=require(`naive-ui`),a=require(`spark-md5`);a=e.t(a);const o=2*1024*1024,s={pending:`等待上传`,validating:`校验文件…`,hashing:`计算校验…`,uploading:`上传中…`,success:`上传成功`,error:`上传失败`,paused:`已暂停`,instant:`秒传成功`},c={pending:`default`,validating:`info`,hashing:`info`,uploading:`info`,success:`success`,error:`error`,paused:`warning`,instant:`success`},l={"image/":`mdi:file-image-outline`,"video/":`mdi:file-video-outline`,"audio/":`mdi:file-music-outline`,"application/pdf":`mdi:file-pdf-box`,"application/zip":`mdi:folder-zip-outline`,"application/x-rar":`mdi:folder-zip-outline`,"application/vnd.ms-excel":`mdi:file-excel-outline`,"application/vnd.openxmlformats-officedocument.spreadsheetml":`mdi:file-excel-outline`,"application/msword":`mdi:file-word-outline`,"application/vnd.openxmlformats-officedocument.wordprocessingml":`mdi:file-word-outline`,"text/":`mdi:file-document-outline`,default:`mdi:file-outline`};function u(e){for(let[t,n]of Object.entries(l))if(t!==`default`&&e.startsWith(t))return n;return l.default}function d(e){if(e===0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`,`TB`],n=Math.floor(Math.log(e)/Math.log(1024));return`${(e/1024**n).toFixed(n>0?1:0)} ${t[n]}`}function f(e){let t=[],n=new Set,i=0,a=!1,o=()=>{if(!a){a=!0;try{let n=Math.max(1,Math.trunc(e.value)||1);for(;i<n&&t.length;)t.shift()()}finally{a=!1}}};return(0,r.watch)(e,o),Object.assign((e,r)=>{let a=!1,s=!1,c,l=(e=!0)=>a?!1:(a=!0,n.delete(d),s&&--i,e&&o(),!0),u=()=>{if(!a){s=!0,i+=1;try{c=e({...r,onProgress:e=>{a||r.onProgress?.(e)},onSuccess:e=>{l()&&r.onSuccess?.(e)},onError:e=>{l()&&r.onError?.(e)}})}catch(e){l()&&r.onError?.(e instanceof Error?e:Error(String(e)))}}},d=()=>{let e=t.indexOf(u);if(e>=0&&t.splice(e,1),l(!1))try{c?.abort()}catch{}finally{o()}};return n.add(d),t.push(u),o(),{abort:d}},{abortAll(){let e=a;a=!0,t.length=0;try{for(let e of n)e()}finally{a=e}}})}const p=e=>new Promise((t,n)=>{let r,i,a=()=>{e?.removeEventListener(`abort`,o),r!==void 0&&cancelAnimationFrame(r),i!==void 0&&clearTimeout(i)},o=()=>{a(),n(e?.reason??new DOMException(`Hash cancelled`,`AbortError`))},s=()=>{a(),t()};if(e?.addEventListener(`abort`,o,{once:!0}),e?.aborted){o();return}typeof requestAnimationFrame==`function`?r=requestAnimationFrame(s):i=setTimeout(s,0)});function m(e){let t=(0,r.ref)(0),n=(0,r.ref)(0),i=(0,r.computed)(()=>t.value>0),o=Promise.resolve();async function s(e,t,n){let r=o,i;o=new Promise(e=>{i=e}),await r;try{return await c(e,t,n)}finally{i()}}async function c(r,i,o){o?.throwIfAborted(),t.value+=1,n.value=0,i?.(0);let s=new a.default.ArrayBuffer,c=Math.max(1,Math.trunc(Number(e.value)||1)),l=Math.max(1,Math.ceil(r.size/c));try{for(let e=0;e<l;e+=1){o?.throwIfAborted();let t=e*c,a=await r.slice(t,t+c).arrayBuffer();o?.throwIfAborted(),s.append(a),n.value=Math.round((e+1)/l*100),i?.(n.value),await p(o)}return o?.throwIfAborted(),s.end()}finally{t.value=Math.max(0,t.value-1)}}return{hashing:i,hashProgress:(0,r.readonly)(n),calculateHash:s}}function h(e){let t=new Map,n=new Map;function r(t){let n=Math.max(1,Math.trunc(Number(e.chunkSize.value)||1)),r=[],i=0,a=0;for(;a<t.size;){let e=Math.min(a+n,t.size);r.push({index:i,blob:t.slice(a,e),size:e-a,uploaded:!1}),a=e,i++}return r}async function i(t,n){if(e.uploadedChunksQuery?.value)try{let r=await e.uploadedChunksQuery.value(t);for(let e of r){let t=n[e];t&&(t.uploaded=!0)}}catch{}}function a(t){return new Promise((n,r)=>{let i=!1,a=()=>{i||(i=!0,n())},o=e=>{i||(i=!0,t.setError(),r(e instanceof Error?e:Error(String(e))))},s={action:e.action.value,headers:e.headers.value,data:{...e.data.value,hash:t.hash,chunkIndex:t.chunk.index,totalChunks:t.totalChunks,filename:t.file.name},file:t.chunk.blob,filename:t.file.name,hash:t.hash,chunkIndex:t.chunk.index,totalChunks:t.totalChunks,onProgress:()=>{},onSuccess:()=>{if(!i){if(t.isCancelled()){a();return}t.chunk.uploaded=!0,t.setUploadedBytes(t.chunk.size),t.onProgress({uploadedChunks:t.chunks.filter(e=>e.uploaded).length,totalChunks:t.totalChunks,uploadedBytes:t.chunks.filter(e=>e.uploaded).reduce((e,t)=>e+t.size,0),totalBytes:t.totalBytes}),a()}},onError:o};try{let n=e.customRequest?.value??g,r=e.scheduler?e.scheduler(n,s):n(s);t.abortControllers.push(()=>{try{r.abort()}catch{}finally{a()}})}catch(e){o(e)}})}async function o(o){let{uid:c,file:l,hash:u,onProgress:d,onSuccess:f,onError:p,isPaused:m}=o,h=Symbol(c);n.set(c,h);let g=()=>n.get(c)!==h,_=()=>{g()||n.delete(c)},v=r(l),y=v.length,b=l.size,x=0;if(await i(u,v),g()||m()){_();return}x=v.filter(e=>e.uploaded).reduce((e,t)=>e+t.size,0),d({uploadedChunks:v.filter(e=>e.uploaded).length,totalChunks:y,uploadedBytes:x,totalBytes:b});let S=v.filter(e=>!e.uploaded);if(S.length===0){try{g()||await s(u,l.name,y,f,p,g)}finally{_()}return}let C=[];t.set(c,C);let w=Math.max(1,Math.trunc(Number(e.concurrency.value)||1)),T=0,E=!1;async function D(){for(;T<S.length&&!E&&!m()&&!g();){let e=S[T++];await a({chunk:e,hash:u,file:l,totalChunks:y,chunks:v,totalBytes:b,abortControllers:C,onProgress:e=>{g()||d(e)},setUploadedBytes:e=>{x+=e},setError:()=>{E=!0},isCancelled:g})}}let O=Array.from({length:Math.min(w,S.length)},()=>D());try{let e=(await Promise.allSettled(O)).find(e=>e.status===`rejected`);e&&!g()?p(e.reason instanceof Error?e.reason:Error(String(e.reason))):!E&&!m()&&!g()&&await s(u,l.name,y,f,p,g)}finally{g()||t.delete(c),_()}}async function s(t,n,r,i,a,o){if(e.mergeChunks?.value)try{let a=await e.mergeChunks.value(t,n,r);o()||i(a)}catch(e){o()||a(e instanceof Error?e:Error(`分片合并失败`))}else o()||i({message:`分片上传完成(未配置合并函数)`})}function c(e){n.delete(e),t.get(e)?.forEach(e=>e()),t.delete(e)}function l(){n.clear(),t.forEach(e=>{e.forEach(e=>e())}),t.clear()}return{createChunks:r,uploadChunks:o,abortUpload:c,abortAll:l}}function g(e){let t=new XMLHttpRequest;t.open(`POST`,e.action),e.headers&&Object.entries(e.headers).forEach(([e,n])=>{t.setRequestHeader(e,n)}),t.upload.addEventListener(`progress`,t=>{t.lengthComputable&&e.onProgress?.(Math.round(t.loaded/t.total*100))}),t.addEventListener(`load`,()=>{if(t.status>=200&&t.status<300){let n;try{n=JSON.parse(t.responseText)}catch{n=t.responseText}e.onSuccess?.(n)}else e.onError?.(Error(`上传失败: HTTP ${t.status}`))}),t.addEventListener(`error`,()=>{e.onError?.(Error(`网络错误`))}),t.addEventListener(`abort`,()=>{e.onError?.(new DOMException(`上传已取消`,`AbortError`))});let n=new FormData;return n.append(`file`,e.file,e.filename),e.data&&Object.entries(e.data).forEach(([e,t])=>{n.append(e,String(t))}),t.send(n),{abort:()=>t.abort()}}function _(e){return e instanceof Error?e:Error(String(e))}function v(e){let t=[],n=(0,r.ref)(0),i=new Map,a=()=>{n.value=i.size},o=()=>Math.max(1,Math.trunc(Number(e.concurrency.value)||1));function s(){for(;i.size<o()&&t.length>0;){let n=t.shift(),{file:r}=n;if(!r.raw||i.has(r.uid))continue;let o=!1,c=e=>{o||(o=!0,i.delete(r.uid),a(),e?.error?n.onError(r.uid,e.error):e&&`response`in e&&n.onSuccess(r.uid,e.response),s())},l={action:e.action.value,headers:e.headers.value,data:e.data.value,file:r.raw,filename:r.name,onProgress:e=>n.onProgress(r.uid,e),onSuccess:e=>c({response:e}),onError:e=>c({error:e})};i.set(r.uid,{abort:()=>void 0,settle:c}),a();try{let t=e.customRequest?.value??y,n=e.scheduler?e.scheduler(t,l):t(l),a=i.get(r.uid);a&&(a.abort=n.abort)}catch(e){c({error:_(e)})}}}function c(e,n,r,i){l(e.uid),t.push({file:e,onProgress:n,onSuccess:r,onError:i}),s()}function l(e){for(let n=t.length-1;n>=0;--n)t[n].file.uid===e&&t.splice(n,1);let n=i.get(e);if(n){n.settle();try{n.abort()}catch{}}}function u(){t.length=0;let e=[...i.values()];i.clear(),a(),e.forEach(e=>{e.settle();try{e.abort()}catch{}})}return(0,r.watch)(e.concurrency,s),{activeCount:(0,r.readonly)(n),enqueue:c,abort:l,abortAll:u}}function y(e){let t=new XMLHttpRequest;t.open(`POST`,e.action),Object.entries(e.headers??{}).forEach(([e,n])=>{t.setRequestHeader(e,n)}),t.upload.addEventListener(`progress`,t=>{t.lengthComputable&&e.onProgress?.(Math.round(t.loaded/t.total*100))}),t.addEventListener(`load`,()=>{if(t.status>=200&&t.status<300){let n=t.responseText;try{n=JSON.parse(t.responseText)}catch{}e.onSuccess?.(n)}else e.onError?.(Error(`上传失败: HTTP ${t.status}`))}),t.addEventListener(`error`,()=>e.onError?.(Error(`网络错误`)));let n=new FormData;return n.append(`file`,e.file,e.filename),Object.entries(e.data??{}).forEach(([e,t])=>{n.append(e,String(t))}),t.send(n),{abort:()=>t.abort()}}function b(e){let t=(0,r.computed)(()=>e.action??``),n=(0,r.computed)(()=>e.headers??{}),i=(0,r.computed)(()=>e.data??{}),a=(0,r.computed)(()=>{let t=Math.trunc(Number(e.chunkSize));return Number.isFinite(t)&&t>0?t:o}),s=(0,r.computed)(()=>{let t=Math.trunc(Number(e.concurrency));return Number.isFinite(t)&&t>0?t:3}),c=(0,r.computed)(()=>e.customRequest),l=(0,r.computed)(()=>e.instantCheck),u=(0,r.computed)(()=>e.uploadedChunksQuery),d=(0,r.computed)(()=>e.mergeChunks),p=(0,r.ref)((e.defaultFileList??[]).map(e=>({...e}))),g=(0,r.reactive)(new Set),_=new Map,y=new Set,{hashing:b,hashProgress:x,calculateHash:S}=m(a),C=f(s),w=new Map,T=e=>{w.get(e)?.abort(),w.delete(e)},E=()=>{w.forEach(e=>e.abort()),w.clear()},D=h({scheduler:C,chunkSize:a,concurrency:s,action:t,headers:n,data:i,customRequest:c,uploadedChunksQuery:u,mergeChunks:d}),O=v({scheduler:C,concurrency:s,action:t,headers:n,data:i,customRequest:c}),k=(0,r.computed)(()=>{let e=p.value;if(e.length===0)return 0;let t=e.reduce((e,t)=>e+t.percent,0);return Math.round(t/e.length)});function A(){return typeof crypto<`u`&&`randomUUID`in crypto?`upload-${crypto.randomUUID()}`:`upload-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function j(e){if(e.type.startsWith(`image/`)){let t=URL.createObjectURL(e);return y.add(t),t}}function M(t){let n=[];for(let r of t){if(Number.isFinite(e.maxCount)&&(e.maxCount??0)>0&&p.value.length+n.length>=Math.trunc(e.maxCount))break;let t={uid:A(),name:r.name,size:r.size,type:r.type,status:`pending`,percent:0,raw:r,thumbUrl:j(r)};n.push(t)}return p.value.push(...n),n}function N(e,t){let n=p.value.find(t=>t.uid===e);n&&Object.assign(n,t)}function P(e){T(e),_.set(e,Symbol(e)),D.abortUpload(e),O.abort(e),g.delete(e);let t=p.value.findIndex(t=>t.uid===e);if(t!==-1){let e=p.value[t];L(e.thumbUrl),p.value.splice(t,1)}}function F(){C.abortAll(),E(),D.abortAll(),O.abortAll(),g.clear(),p.value.forEach(e=>{L(e.thumbUrl)}),p.value=[],_.clear()}async function I(t){if((e.maxSize??0)>0&&t.size>e.maxSize)return null;if(e.beforeUpload){let n=await e.beforeUpload(t);if(n===!1)return null;if(n instanceof File)return(e.maxSize??0)>0&&n.size>e.maxSize?null:n}return t}function L(e){!e||!y.has(e)||(URL.revokeObjectURL(e),y.delete(e))}function R(e,t){return _.get(e)===t&&!g.has(e)&&p.value.some(t=>t.uid===e)}async function z(e,t){T(e.uid);let n=new AbortController;w.set(e.uid,n);try{return await S(e.raw,n=>{R(e.uid,t)&&N(e.uid,{percent:n})},n.signal)}finally{w.get(e.uid)===n&&w.delete(e.uid)}}async function B(n){if(!n.raw)return;let r=Symbol(n.uid);_.set(n.uid,r),N(n.uid,{status:`validating`,error:void 0});let i;try{i=await I(n.raw)}catch(e){R(n.uid,r)&&N(n.uid,{status:`error`,error:e instanceof Error?e.message:`文件校验失败`});return}if(R(n.uid,r)){if(!i){N(n.uid,{status:`error`,error:`文件校验未通过`});return}if(i!==n.raw&&(L(n.thumbUrl),Object.assign(n,{raw:i,name:i.name,size:i.size,type:i.type,hash:void 0,chunkProgress:void 0,thumbUrl:j(i)})),!c.value&&!t.value.trim()){N(n.uid,{status:`error`,error:`未配置上传地址`});return}if(l.value&&!n.hash){N(n.uid,{status:`hashing`});try{let e=await z(n,r);if(!R(n.uid,r))return;N(n.uid,{hash:e});let t=await l.value(e,n.raw.name);if(!R(n.uid,r))return;if(t.exists){N(n.uid,{status:`instant`,percent:100,url:t.url});return}}catch{if(!R(n.uid,r))return}}e.chunked&&n.raw.size>a.value?await V(n,r):H(n,r)}}async function V(e,t){let n=e.raw,{hash:r}=e;if(!r){N(e.uid,{status:`hashing`});try{if(r=await z(e,t),!R(e.uid,t))return;N(e.uid,{hash:r})}catch{R(e.uid,t)&&N(e.uid,{status:`error`,error:`Hash 计算失败`});return}}N(e.uid,{status:`uploading`,percent:0}),await D.uploadChunks({uid:e.uid,file:n,hash:r,onProgress:n=>{if(!R(e.uid,t))return;let r=Math.round(n.uploadedBytes/n.totalBytes*100);N(e.uid,{percent:r,chunkProgress:n})},onSuccess:n=>{R(e.uid,t)&&N(e.uid,{status:`success`,percent:100,response:n})},onError:n=>{R(e.uid,t)&&N(e.uid,{status:`error`,error:n.message})},isPaused:()=>g.has(e.uid)})}function H(e,t){N(e.uid,{status:`uploading`,percent:0}),O.enqueue(e,(e,n)=>{R(e,t)&&N(e,{percent:n})},(e,n)=>{R(e,t)&&N(e,{status:`success`,percent:100,response:n})},(e,n)=>{R(e,t)&&N(e,{status:`error`,error:n.message})})}function U(){p.value.filter(e=>e.status===`pending`).forEach(e=>void B(e))}function W(){C.abortAll(),p.value.forEach(e=>{(e.status===`uploading`||e.status===`hashing`||e.status===`validating`)&&(T(e.uid),g.add(e.uid),_.set(e.uid,Symbol(e.uid)),D.abortUpload(e.uid),O.abort(e.uid),N(e.uid,{status:`paused`}))})}function G(){p.value.forEach(e=>{e.status===`paused`&&(g.delete(e.uid),N(e.uid,{status:`pending`}))}),U()}function K(e){let t=p.value.find(t=>t.uid===e);t&&t.status===`error`&&(N(e,{status:`pending`,percent:0,error:void 0}),B(t))}function q(){return p.value.filter(e=>e.status===`success`||e.status===`instant`)}return(0,r.onBeforeUnmount)(()=>{C.abortAll(),E(),D.abortAll(),O.abortAll(),_.clear(),p.value.forEach(e=>{L(e.thumbUrl)})}),{fileList:p,totalPercent:k,hashing:b,hashProgress:x,addFiles:M,removeFile:P,clearAll:F,startUpload:U,pauseAll:W,resumeAll:G,retryFile:K,processFile:B,getSuccessList:q}}function x(e,t,n,i,a){let o=(0,r.ref)(!1),s=null,c=!1;function l(e){t.value&&(e.preventDefault(),o.value=!0)}function u(e){t.value&&(e.preventDefault(),o.value=!0)}function d(n){if(!t.value)return;n.preventDefault();let r=e.value;r&&!r.contains(n.relatedTarget)&&(o.value=!1)}async function f(e){if(!t.value)return;e.preventDefault(),o.value=!1;let n=e.dataTransfer?.items;if(!n)return;let r=await S(n,e.dataTransfer);if(c||!t.value)return;let s=w(r,i.value);s.length>0&&a(s)}function p(e){if(!n.value)return;let t=e.clipboardData?.items;if(!t)return;let r=[];for(let e=0;e<t.length;e++){let n=t[e];if(n.kind===`file`){let e=n.getAsFile();e&&r.push(e)}}let o=w(r,i.value);o.length>0&&(e.preventDefault(),a(o))}function m(){let t=e.value;!t||s===t||(s=t,t.addEventListener(`dragenter`,l),t.addEventListener(`dragover`,u),t.addEventListener(`dragleave`,d),t.addEventListener(`drop`,f),n.value&&t.addEventListener(`paste`,p))}function h(){let e=s;e&&(e.removeEventListener(`dragenter`,l),e.removeEventListener(`dragover`,u),e.removeEventListener(`dragleave`,d),e.removeEventListener(`drop`,f)),e?.removeEventListener(`paste`,p),s=null}return(0,r.onMounted)(()=>{c=!1,m()}),(0,r.onBeforeUnmount)(()=>{c=!0,h()}),(0,r.watch)([e,t,n],()=>{h(),m()}),{isDragOver:(0,r.readonly)(o)}}async function S(e,t){let n=[];for(let t=0;t<e.length;t++){let r=e[t].webkitGetAsEntry?.();r&&n.push(r)}if(n.length>0)return(await Promise.all(n.map(C))).flat();let r=[],i=t?.files;if(i)for(let e=0;e<i.length;e++)r.push(i[e]);return r}async function C(e){if(e.isFile)return new Promise(t=>{e.file(e=>t([e]),()=>t([]))});if(e.isDirectory){let t=e.createReader(),n=[];for(;;){let e=await new Promise(e=>{t.readEntries(t=>e(t),()=>e([]))});if(e.length===0)break;n.push(...e)}return(await Promise.all(n.map(C))).flat()}return[]}function w(e,t){if(!t)return e;let n=t.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean);return n.length===0?e:e.filter(e=>n.some(t=>{if(t.startsWith(`.`))return e.name.toLowerCase().endsWith(t);if(t.endsWith(`/*`)){let n=t.replace(`/*`,``);return e.type.toLowerCase().startsWith(`${n}/`)}return e.type.toLowerCase()===t}))}const T=[`tabindex`,`aria-disabled`,`onKeydown`],E=[`accept`,`multiple`,`webkitdirectory`,`disabled`],D={class:`upload-area__default`},O={class:`upload-area__text`},k={key:0},A={key:1},j={key:0,class:`upload-area__tip`},M=(0,r.defineComponent)({__name:`UploadArea`,props:{accept:{default:``},multiple:{type:Boolean,default:!1},directory:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},draggable:{type:Boolean,default:!0},pasteable:{type:Boolean,default:!1},tip:{default:``}},emits:[`files`],setup(e,{expose:n,emit:i}){let a=e,o=i,s=(0,r.ref)(),c=(0,r.ref)(),{isDragOver:l}=x(s,(0,r.computed)(()=>a.draggable&&!a.disabled),(0,r.computed)(()=>a.pasteable&&!a.disabled),(0,r.computed)(()=>a.accept),e=>o(`files`,e));function u(){a.disabled||c.value?.click()}function d(e){let t=e.target,n=a.disabled?[]:w(Array.from(t.files??[]),a.accept);n.length>0&&o(`files`,n),t.value=``}return n({triggerSelect:u}),(n,i)=>((0,r.openBlock)(),(0,r.createElementBlock)(`div`,{ref_key:`areaRef`,ref:s,class:(0,r.normalizeClass)([`upload-area`,{"upload-area--drag-over":(0,r.unref)(l),"upload-area--disabled":e.disabled}]),role:`button`,tabindex:e.disabled?-1:0,"aria-disabled":e.disabled,onClick:u,onKeydown:[(0,r.withKeys)((0,r.withModifiers)(u,[`prevent`]),[`enter`]),(0,r.withKeys)((0,r.withModifiers)(u,[`prevent`]),[`space`])]},[(0,r.createElementVNode)(`input`,{ref_key:`inputRef`,ref:c,type:`file`,class:`upload-area__input`,accept:e.accept,multiple:e.multiple,webkitdirectory:e.directory||void 0,disabled:e.disabled,onClick:i[0]||=(0,r.withModifiers)(()=>{},[`stop`]),onChange:d},null,40,E),(0,r.renderSlot)(n.$slots,`default`,{},()=>[(0,r.createElementVNode)(`div`,D,[(0,r.createVNode)(t.t,{name:(0,r.unref)(l)?`mdi:cloud-download-outline`:`mdi:cloud-upload-outline`,class:`upload-area__icon`},null,8,[`name`]),(0,r.createElementVNode)(`div`,O,[(0,r.unref)(l)?((0,r.openBlock)(),(0,r.createElementBlock)(`span`,k,`释放文件到此处`)):((0,r.openBlock)(),(0,r.createElementBlock)(`span`,A,[i[4]||=(0,r.createTextVNode)(` 点击或拖拽文件到此区域上传 `,-1),e.pasteable?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:0},[i[1]||=(0,r.createTextVNode)(` ,支持 `,-1),i[2]||=(0,r.createElementVNode)(`kbd`,null,`Ctrl+V`,-1),i[3]||=(0,r.createTextVNode)(` 粘贴 `,-1)],64)):(0,r.createCommentVNode)(`v-if`,!0)]))]),e.tip?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,j,(0,r.toDisplayString)(e.tip),1)):(0,r.createCommentVNode)(`v-if`,!0)])],!0)],42,T))}});var N=n.t(M,[[`__scopeId`,`data-v-705892ab`]]);const P={class:`file-list__thumb`},F=[`src`,`alt`],I={class:`file-list__info`},L={class:`file-list__name`},R={class:`file-list__meta`},z={class:`file-list__size`},B={key:0,class:`file-list__instant`},V={key:1,class:`file-list__chunk-info`},H={key:2,class:`file-list__error`},U={class:`file-list__actions`},W=(0,r.defineComponent)({__name:`FileList`,props:{fileList:{},showThumbnail:{type:Boolean}},emits:[`remove`,`retry`],setup(e,{emit:n}){let a=n;return(n,o)=>((0,r.openBlock)(),(0,r.createBlock)(r.TransitionGroup,{name:`file-list`,tag:`div`,class:`file-list`},{default:(0,r.withCtx)(()=>[((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)(e.fileList,n=>((0,r.openBlock)(),(0,r.createElementBlock)(`div`,{key:n.uid,class:(0,r.normalizeClass)([`file-list__item`,`file-list__item--${n.status}`])},[(0,r.createCommentVNode)(` 缩略图 / 图标 `),(0,r.createElementVNode)(`div`,P,[e.showThumbnail&&n.thumbUrl?((0,r.openBlock)(),(0,r.createElementBlock)(`img`,{key:0,src:n.thumbUrl,alt:n.name,class:`file-list__thumb-img`},null,8,F)):((0,r.openBlock)(),(0,r.createBlock)(t.t,{key:1,name:(0,r.unref)(u)(n.type),class:`file-list__thumb-icon`},null,8,[`name`]))]),(0,r.createCommentVNode)(` 文件信息 `),(0,r.createElementVNode)(`div`,I,[(0,r.createElementVNode)(`div`,L,[(0,r.createVNode)((0,r.unref)(i.NEllipsis),{"line-clamp":1},{default:(0,r.withCtx)(()=>[(0,r.createTextVNode)((0,r.toDisplayString)(n.name),1)]),_:2},1024)]),(0,r.createElementVNode)(`div`,R,[(0,r.createElementVNode)(`span`,z,(0,r.toDisplayString)((0,r.unref)(d)(n.size)),1),(0,r.createVNode)((0,r.unref)(i.NTag),{type:(0,r.unref)(c)[n.status]||`default`,size:`tiny`,bordered:!1},{default:(0,r.withCtx)(()=>[(0,r.createTextVNode)((0,r.toDisplayString)((0,r.unref)(s)[n.status]||n.status),1)]),_:2},1032,[`type`]),n.status===`instant`?((0,r.openBlock)(),(0,r.createElementBlock)(`span`,B,` ⚡ `)):(0,r.createCommentVNode)(`v-if`,!0)]),(0,r.createCommentVNode)(` 进度条 `),n.status===`uploading`||n.status===`hashing`?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(i.NProgress),{key:0,percentage:n.percent,height:4,"border-radius":2,"show-indicator":!1,status:n.status===`hashing`?`info`:`success`},null,8,[`percentage`,`status`])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 分片进度描述 `),n.chunkProgress&&n.status===`uploading`?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,V,` 分片 `+(0,r.toDisplayString)(n.chunkProgress.uploadedChunks)+`/`+(0,r.toDisplayString)(n.chunkProgress.totalChunks),1)):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 错误信息 `),n.status===`error`&&n.error?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,H,(0,r.toDisplayString)(n.error),1)):(0,r.createCommentVNode)(`v-if`,!0)]),(0,r.createCommentVNode)(` 操作按钮 `),(0,r.createElementVNode)(`div`,U,[n.status===`error`?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(i.NButton),{key:0,text:``,type:`warning`,size:`tiny`,"aria-label":`重试上传`,onClick:e=>a(`retry`,n.uid)},{icon:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:`mdi:refresh`})]),_:1},8,[`onClick`])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createVNode)((0,r.unref)(i.NButton),{text:``,type:`error`,size:`tiny`,"aria-label":`移除文件`,onClick:e=>a(`remove`,n.uid)},{icon:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:`mdi:close`})]),_:1},8,[`onClick`])])],2))),128))]),_:1}))}});var G=n.t(W,[[`__scopeId`,`data-v-04f26012`]]);const K={key:0,class:`image-preview`},q=[`src`,`alt`],J={class:`image-preview__overlay`},Y={key:0,class:`image-preview__progress`},X={class:`image-preview__actions`},Z={class:`image-preview__name`},Q=(0,r.defineComponent)({__name:`ImagePreview`,props:{fileList:{}},emits:[`remove`,`retry`],setup(e,{emit:n}){let a=e,o=n,s=(0,r.computed)(()=>a.fileList.filter(e=>e.type?.startsWith(`image/`)));return(e,n)=>s.value.length>0?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,K,[((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)(s.value,e=>((0,r.openBlock)(),(0,r.createElementBlock)(`div`,{key:e.uid,class:(0,r.normalizeClass)([`image-preview__item`,`image-preview__item--${e.status}`])},[e.thumbUrl?((0,r.openBlock)(),(0,r.createElementBlock)(`img`,{key:0,src:e.thumbUrl,alt:e.name,class:`image-preview__img`},null,8,q)):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 遮罩层 `),(0,r.createElementVNode)(`div`,J,[(0,r.createCommentVNode)(` 上传中进度 `),e.status===`uploading`||e.status===`hashing`?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,Y,[(0,r.createVNode)((0,r.unref)(i.NProgress),{type:`circle`,percentage:e.percent,"stroke-width":3,style:{width:`40px`}},null,8,[`percentage`])])):e.status===`success`||e.status===`instant`?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:1},[(0,r.createCommentVNode)(` 状态图标 `),(0,r.createVNode)(t.t,{name:`mdi:check-circle`,class:`image-preview__status-icon image-preview__status-icon--success`})],2112)):e.status===`error`?((0,r.openBlock)(),(0,r.createBlock)(t.t,{key:2,name:`mdi:alert-circle`,class:`image-preview__status-icon image-preview__status-icon--error`})):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 操作 `),(0,r.createElementVNode)(`div`,X,[e.status===`error`?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(i.NButton),{key:0,circle:``,size:`tiny`,type:`warning`,"aria-label":`重试上传`,onClick:t=>o(`retry`,e.uid)},{icon:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:`mdi:refresh`})]),_:1},8,[`onClick`])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createVNode)((0,r.unref)(i.NButton),{circle:``,size:`tiny`,type:`error`,"aria-label":`移除文件`,onClick:t=>o(`remove`,e.uid)},{icon:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:`mdi:close`})]),_:1},8,[`onClick`])])]),(0,r.createCommentVNode)(` 文件名 `),(0,r.createElementVNode)(`div`,Z,[(0,r.createVNode)((0,r.unref)(i.NEllipsis),{"line-clamp":1},{default:(0,r.withCtx)(()=>[(0,r.createTextVNode)((0,r.toDisplayString)(e.name),1)]),_:2},1024)])],2))),128))])):(0,r.createCommentVNode)(`v-if`,!0)}});var $=n.t(Q,[[`__scopeId`,`data-v-32d39ae9`]]);const ee={class:`c-upload`},te={key:0,class:`c-upload__total-progress`},ne={class:`c-upload__total-label`},re=(0,r.defineComponent)({__name:`index`,props:{action:{default:``},headers:{default:()=>({})},data:{default:()=>({})},multiple:{type:Boolean,default:!1},directory:{type:Boolean,default:!1},accept:{default:``},maxSize:{default:0},maxCount:{default:0},disabled:{type:Boolean,default:!1},draggable:{type:Boolean,default:!0},pasteable:{type:Boolean,default:!1},chunked:{type:Boolean,default:!1},chunkSize:{default:o},concurrency:{default:3},showFileList:{type:Boolean,default:!0},listType:{default:`text`},showThumbnail:{type:Boolean,default:!0},customRequest:{},instantCheck:{},uploadedChunksQuery:{},mergeChunks:{},beforeUpload:{},tip:{default:``},defaultFileList:{default:()=>[]}},emits:[`change`,`success`,`error`,`progress`,`remove`,`finish`,`exceed`],setup(e,{expose:t,emit:n}){let a=e,o=n,s=(0,r.ref)(),{fileList:c,totalPercent:l,addFiles:u,removeFile:d,clearAll:f,startUpload:p,pauseAll:m,resumeAll:h,retryFile:g,processFile:_,getSuccessList:v}=b(a),y=(0,r.computed)(()=>c.value.some(e=>e.status===`uploading`||e.status===`hashing`||e.status===`validating`)),x=e=>({...e}),S=()=>c.value.map(x);function C(e){let t=Math.max(0,Math.trunc(Number(a.maxCount)||0));if(t>0&&c.value.length+e.length>t){o(`exceed`,e,S());let n=t-c.value.length;if(n<=0)return;e=e.slice(0,n)}let n=u(e);o(`change`,S()),n.forEach(e=>void _(e))}function w(e){let t=c.value.find(t=>t.uid===e);t&&(o(`remove`,x(t)),d(e),o(`change`,S()))}function T(e){g(e)}let E=new Map,D=!1;return(0,r.watch)(c,e=>{let t=new Set(e.map(e=>e.uid));E.forEach((e,n)=>{t.has(n)||E.delete(n)}),e.forEach(e=>{let t=E.get(e.uid);t&&t.percent!==e.percent&&o(`progress`,x(e),e.percent),t&&t.status!==e.status&&(e.status===`success`||e.status===`instant`)&&o(`success`,x(e),e.response),t&&t.status!==`error`&&e.status===`error`&&o(`error`,x(e),Error(e.error||`上传失败`)),E.set(e.uid,{status:e.status,percent:e.percent})}),e.length>0&&e.every(e=>e.status===`success`||e.status===`instant`||e.status===`error`)?(D||o(`finish`,S()),D=!0):D=!1,o(`change`,S())},{deep:!0}),t({selectFiles:()=>s.value?.triggerSelect(),startUpload:p,pauseAll:m,resumeAll:h,clearAll:()=>{f(),o(`change`,S())},removeFile:e=>{w(e)},retryFile:g,getFileList:S,getSuccessList:()=>v().map(x),get totalPercent(){return l.value}}),(e,t)=>((0,r.openBlock)(),(0,r.createElementBlock)(`div`,ee,[(0,r.createCommentVNode)(` 上传区域 `),(0,r.createVNode)(N,{ref_key:`uploadAreaRef`,ref:s,accept:a.accept,multiple:a.multiple,directory:a.directory,disabled:a.disabled,draggable:a.draggable,pasteable:a.pasteable,tip:a.tip,onFiles:C},{default:(0,r.withCtx)(()=>[(0,r.renderSlot)(e.$slots,`area`,{},void 0,!0)]),_:3},8,[`accept`,`multiple`,`directory`,`disabled`,`draggable`,`pasteable`,`tip`]),(0,r.createCommentVNode)(` 总进度条 `),y.value?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,te,[(0,r.createElementVNode)(`div`,ne,[t[0]||=(0,r.createElementVNode)(`span`,null,`总进度`,-1),(0,r.createElementVNode)(`span`,null,(0,r.toDisplayString)((0,r.unref)(l))+`%`,1)]),(0,r.createVNode)((0,r.unref)(i.NProgress),{percentage:(0,r.unref)(l),height:6,"border-radius":3,"show-indicator":!1,status:`success`},null,8,[`percentage`])])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 图片预览模式 `),a.listType===`image`?((0,r.openBlock)(),(0,r.createBlock)($,{key:1,"file-list":(0,r.unref)(c),onRemove:w,onRetry:T},null,8,[`file-list`])):a.showFileList&&(0,r.unref)(c).length>0?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:2},[(0,r.createCommentVNode)(` 文件列表模式 `),(0,r.createVNode)(G,{"file-list":(0,r.unref)(c),"show-thumbnail":a.showThumbnail,onRemove:w,onRetry:T},null,8,[`file-list`,`show-thumbnail`])],2112)):(0,r.createCommentVNode)(`v-if`,!0)]))}});var ie=n.t(re,[[`__scopeId`,`data-v-58ca8e42`]]);Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return ie}});
package/dist/C_Upload2.js CHANGED
@@ -1 +1 @@
1
- import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{Fragment as n,TransitionGroup as r,computed as i,createBlock as a,createCommentVNode as o,createElementBlock as s,createElementVNode as c,createTextVNode as l,createVNode as u,defineComponent as d,normalizeClass as f,onBeforeUnmount as p,onMounted as m,openBlock as h,reactive as g,readonly as _,ref as v,renderList as y,renderSlot as b,toDisplayString as x,unref as S,watch as C,withCtx as w,withKeys as T,withModifiers as E}from"vue";import{NButton as D,NEllipsis as O,NProgress as k,NTag as A}from"naive-ui";import j from"spark-md5";const M=2*1024*1024,N={pending:`等待上传`,validating:`校验文件…`,hashing:`计算校验…`,uploading:`上传中…`,success:`上传成功`,error:`上传失败`,paused:`已暂停`,instant:`秒传成功`},P={pending:`default`,validating:`info`,hashing:`info`,uploading:`info`,success:`success`,error:`error`,paused:`warning`,instant:`success`},F={"image/":`mdi:file-image-outline`,"video/":`mdi:file-video-outline`,"audio/":`mdi:file-music-outline`,"application/pdf":`mdi:file-pdf-box`,"application/zip":`mdi:folder-zip-outline`,"application/x-rar":`mdi:folder-zip-outline`,"application/vnd.ms-excel":`mdi:file-excel-outline`,"application/vnd.openxmlformats-officedocument.spreadsheetml":`mdi:file-excel-outline`,"application/msword":`mdi:file-word-outline`,"application/vnd.openxmlformats-officedocument.wordprocessingml":`mdi:file-word-outline`,"text/":`mdi:file-document-outline`,default:`mdi:file-outline`};function I(e){for(let[t,n]of Object.entries(F))if(t!==`default`&&e.startsWith(t))return n;return F.default}function L(e){if(e===0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`,`TB`],n=Math.floor(Math.log(e)/Math.log(1024));return`${(e/1024**n).toFixed(n>0?1:0)} ${t[n]}`}const R=()=>new Promise(e=>{typeof requestAnimationFrame==`function`?requestAnimationFrame(()=>e()):setTimeout(e,0)});function z(e){let t=v(0),n=v(0),r=i(()=>t.value>0);async function a(r,i){t.value+=1,n.value=0,i?.(0);let a=new j.ArrayBuffer,o=Math.max(1,Math.trunc(Number(e.value)||1)),s=Math.max(1,Math.ceil(r.size/o));try{if(r.size===0)return a.append(new ArrayBuffer(0)),n.value=100,i?.(100),a.end();for(let e=0;e<s;e+=1){let t=e*o,c=await r.slice(t,t+o).arrayBuffer();a.append(c),n.value=Math.round((e+1)/s*100),i?.(n.value),await R()}return a.end()}finally{t.value=Math.max(0,t.value-1)}}return{hashing:r,hashProgress:_(n),calculateHash:a}}function B(e){let t=new Map,n=new Map;function r(t){let n=Math.max(1,Math.trunc(Number(e.chunkSize.value)||1)),r=[],i=0,a=0;for(;a<t.size;){let e=Math.min(a+n,t.size);r.push({index:i,blob:t.slice(a,e),size:e-a,uploaded:!1}),a=e,i++}return r}async function i(t,n){if(e.uploadedChunksQuery?.value)try{let r=await e.uploadedChunksQuery.value(t);for(let e of r){let t=n[e];t&&(t.uploaded=!0)}}catch{}}function a(t){return new Promise((n,r)=>{let i=!1,a=()=>{i||(i=!0,n())},o=e=>{i||(i=!0,t.setError(),r(e instanceof Error?e:Error(String(e))))},s={action:e.action.value,headers:e.headers.value,data:{...e.data.value,hash:t.hash,chunkIndex:t.chunk.index,totalChunks:t.totalChunks,filename:t.file.name},file:t.chunk.blob,filename:t.file.name,hash:t.hash,chunkIndex:t.chunk.index,totalChunks:t.totalChunks,onProgress:()=>{},onSuccess:()=>{if(!i){if(t.isCancelled()){a();return}t.chunk.uploaded=!0,t.setUploadedBytes(t.chunk.size),t.onProgress({uploadedChunks:t.chunks.filter(e=>e.uploaded).length,totalChunks:t.totalChunks,uploadedBytes:t.chunks.filter(e=>e.uploaded).reduce((e,t)=>e+t.size,0),totalBytes:t.totalBytes}),a()}},onError:o};try{let n=e.customRequest?.value?e.customRequest.value(s):V(s);t.abortControllers.push(()=>{try{n.abort()}catch{}finally{a()}})}catch(e){o(e)}})}async function o(o){let{uid:c,file:l,hash:u,onProgress:d,onSuccess:f,onError:p,isPaused:m}=o,h=Symbol(c);n.set(c,h);let g=()=>n.get(c)!==h,_=()=>{g()||n.delete(c)},v=r(l),y=v.length,b=l.size,x=0;if(await i(u,v),g()||m()){_();return}x=v.filter(e=>e.uploaded).reduce((e,t)=>e+t.size,0),d({uploadedChunks:v.filter(e=>e.uploaded).length,totalChunks:y,uploadedBytes:x,totalBytes:b});let S=v.filter(e=>!e.uploaded);if(S.length===0){try{g()||await s(u,l.name,y,f,p,g)}finally{_()}return}let C=[];t.set(c,C);let w=Math.max(1,Math.trunc(Number(e.concurrency.value)||1)),T=0,E=!1;async function D(){for(;T<S.length&&!E&&!m()&&!g();){let e=S[T++];await a({chunk:e,hash:u,file:l,totalChunks:y,chunks:v,totalBytes:b,abortControllers:C,onProgress:e=>{g()||d(e)},setUploadedBytes:e=>{x+=e},setError:()=>{E=!0},isCancelled:g})}}let O=Array.from({length:Math.min(w,S.length)},()=>D());try{let e=(await Promise.allSettled(O)).find(e=>e.status===`rejected`);e&&!g()?p(e.reason instanceof Error?e.reason:Error(String(e.reason))):!E&&!m()&&!g()&&await s(u,l.name,y,f,p,g)}finally{g()||t.delete(c),_()}}async function s(t,n,r,i,a,o){if(e.mergeChunks?.value)try{let a=await e.mergeChunks.value(t,n,r);o()||i(a)}catch(e){o()||a(e instanceof Error?e:Error(`分片合并失败`))}else o()||i({message:`分片上传完成(未配置合并函数)`})}function c(e){n.delete(e),t.get(e)?.forEach(e=>e()),t.delete(e)}function l(){n.clear(),t.forEach(e=>{e.forEach(e=>e())}),t.clear()}return{createChunks:r,uploadChunks:o,abortUpload:c,abortAll:l}}function V(e){let t=new XMLHttpRequest;t.open(`POST`,e.action),e.headers&&Object.entries(e.headers).forEach(([e,n])=>{t.setRequestHeader(e,n)}),t.upload.addEventListener(`progress`,t=>{t.lengthComputable&&e.onProgress?.(Math.round(t.loaded/t.total*100))}),t.addEventListener(`load`,()=>{if(t.status>=200&&t.status<300){let n;try{n=JSON.parse(t.responseText)}catch{n=t.responseText}e.onSuccess?.(n)}else e.onError?.(Error(`上传失败: HTTP ${t.status}`))}),t.addEventListener(`error`,()=>{e.onError?.(Error(`网络错误`))}),t.addEventListener(`abort`,()=>{e.onError?.(new DOMException(`上传已取消`,`AbortError`))});let n=new FormData;return n.append(`file`,e.file,e.filename),e.data&&Object.entries(e.data).forEach(([e,t])=>{n.append(e,String(t))}),t.send(n),{abort:()=>t.abort()}}function H(e){return e instanceof Error?e:Error(String(e))}function U(e){let t=[],n=v(0),r=new Map,i=()=>{n.value=r.size},a=()=>Math.max(1,Math.trunc(Number(e.concurrency.value)||1));function o(){for(;r.size<a()&&t.length>0;){let n=t.shift(),{file:a}=n;if(!a.raw||r.has(a.uid))continue;let s=!1,c=e=>{s||(s=!0,r.delete(a.uid),i(),e?.error?n.onError(a.uid,e.error):e&&`response`in e&&n.onSuccess(a.uid,e.response),o())},l={action:e.action.value,headers:e.headers.value,data:e.data.value,file:a.raw,filename:a.name,onProgress:e=>n.onProgress(a.uid,e),onSuccess:e=>c({response:e}),onError:e=>c({error:e})};r.set(a.uid,{abort:()=>void 0,settle:c}),i();try{let t=e.customRequest?.value?e.customRequest.value(l):W(l),n=r.get(a.uid);n&&(n.abort=t.abort)}catch(e){c({error:H(e)})}}}function s(e,n,r,i){c(e.uid),t.push({file:e,onProgress:n,onSuccess:r,onError:i}),o()}function c(e){for(let n=t.length-1;n>=0;--n)t[n].file.uid===e&&t.splice(n,1);let n=r.get(e);if(n){n.settle();try{n.abort()}catch{}}}function l(){t.length=0;let e=[...r.values()];r.clear(),i(),e.forEach(e=>{e.settle();try{e.abort()}catch{}})}return C(e.concurrency,o),{activeCount:_(n),enqueue:s,abort:c,abortAll:l}}function W(e){let t=new XMLHttpRequest;t.open(`POST`,e.action),Object.entries(e.headers??{}).forEach(([e,n])=>{t.setRequestHeader(e,n)}),t.upload.addEventListener(`progress`,t=>{t.lengthComputable&&e.onProgress?.(Math.round(t.loaded/t.total*100))}),t.addEventListener(`load`,()=>{if(t.status>=200&&t.status<300){let n=t.responseText;try{n=JSON.parse(t.responseText)}catch{}e.onSuccess?.(n)}else e.onError?.(Error(`上传失败: HTTP ${t.status}`))}),t.addEventListener(`error`,()=>e.onError?.(Error(`网络错误`)));let n=new FormData;return n.append(`file`,e.file,e.filename),Object.entries(e.data??{}).forEach(([e,t])=>{n.append(e,String(t))}),t.send(n),{abort:()=>t.abort()}}function G(e){let t=i(()=>e.action??``),n=i(()=>e.headers??{}),r=i(()=>e.data??{}),a=i(()=>{let t=Math.trunc(Number(e.chunkSize));return Number.isFinite(t)&&t>0?t:M}),o=i(()=>{let t=Math.trunc(Number(e.concurrency));return Number.isFinite(t)&&t>0?t:3}),s=i(()=>e.customRequest),c=i(()=>e.instantCheck),l=i(()=>e.uploadedChunksQuery),u=i(()=>e.mergeChunks),d=v((e.defaultFileList??[]).map(e=>({...e}))),f=g(new Set),m=new Map,h=new Set,{hashing:_,hashProgress:y,calculateHash:b}=z(a),x=B({chunkSize:a,concurrency:o,action:t,headers:n,data:r,customRequest:s,uploadedChunksQuery:l,mergeChunks:u}),S=U({concurrency:o,action:t,headers:n,data:r,customRequest:s}),C=i(()=>{let e=d.value;if(e.length===0)return 0;let t=e.reduce((e,t)=>e+t.percent,0);return Math.round(t/e.length)});function w(){return typeof crypto<`u`&&`randomUUID`in crypto?`upload-${crypto.randomUUID()}`:`upload-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function T(e){if(e.type.startsWith(`image/`)){let t=URL.createObjectURL(e);return h.add(t),t}}function E(t){let n=[];for(let r of t){if(Number.isFinite(e.maxCount)&&(e.maxCount??0)>0&&d.value.length+n.length>=Math.trunc(e.maxCount))break;let t={uid:w(),name:r.name,size:r.size,type:r.type,status:`pending`,percent:0,raw:r,thumbUrl:T(r)};n.push(t)}return d.value.push(...n),n}function D(e,t){let n=d.value.find(t=>t.uid===e);n&&Object.assign(n,t)}function O(e){m.set(e,Symbol(e)),x.abortUpload(e),S.abort(e),f.delete(e);let t=d.value.findIndex(t=>t.uid===e);if(t!==-1){let e=d.value[t];j(e.thumbUrl),d.value.splice(t,1)}}function k(){x.abortAll(),S.abortAll(),f.clear(),d.value.forEach(e=>{j(e.thumbUrl)}),d.value=[],m.clear()}async function A(t){if((e.maxSize??0)>0&&t.size>e.maxSize)return null;if(e.beforeUpload){let n=await e.beforeUpload(t);if(n===!1)return null;if(n instanceof File)return(e.maxSize??0)>0&&n.size>e.maxSize?null:n}return t}function j(e){!e||!h.has(e)||(URL.revokeObjectURL(e),h.delete(e))}function N(e,t){return m.get(e)===t&&!f.has(e)&&d.value.some(t=>t.uid===e)}function P(e,t){return b(e.raw,n=>{N(e.uid,t)&&D(e.uid,{percent:n})})}async function F(n){if(!n.raw)return;let r=Symbol(n.uid);m.set(n.uid,r),D(n.uid,{status:`validating`,error:void 0});let i;try{i=await A(n.raw)}catch(e){N(n.uid,r)&&D(n.uid,{status:`error`,error:e instanceof Error?e.message:`文件校验失败`});return}if(N(n.uid,r)){if(!i){D(n.uid,{status:`error`,error:`文件校验未通过`});return}if(i!==n.raw&&(j(n.thumbUrl),Object.assign(n,{raw:i,name:i.name,size:i.size,type:i.type,hash:void 0,chunkProgress:void 0,thumbUrl:T(i)})),!s.value&&!t.value.trim()){D(n.uid,{status:`error`,error:`未配置上传地址`});return}if(c.value&&!n.hash){D(n.uid,{status:`hashing`});try{let e=await P(n,r);if(!N(n.uid,r))return;D(n.uid,{hash:e});let t=await c.value(e,n.raw.name);if(!N(n.uid,r))return;if(t.exists){D(n.uid,{status:`instant`,percent:100,url:t.url});return}}catch{if(!N(n.uid,r))return}}e.chunked&&n.raw.size>a.value?await I(n,r):L(n,r)}}async function I(e,t){let n=e.raw,{hash:r}=e;if(!r){D(e.uid,{status:`hashing`});try{if(r=await P(e,t),!N(e.uid,t))return;D(e.uid,{hash:r})}catch{N(e.uid,t)&&D(e.uid,{status:`error`,error:`Hash 计算失败`});return}}D(e.uid,{status:`uploading`,percent:0}),await x.uploadChunks({uid:e.uid,file:n,hash:r,onProgress:n=>{if(!N(e.uid,t))return;let r=Math.round(n.uploadedBytes/n.totalBytes*100);D(e.uid,{percent:r,chunkProgress:n})},onSuccess:n=>{N(e.uid,t)&&D(e.uid,{status:`success`,percent:100,response:n})},onError:n=>{N(e.uid,t)&&D(e.uid,{status:`error`,error:n.message})},isPaused:()=>f.has(e.uid)})}function L(e,t){D(e.uid,{status:`uploading`,percent:0}),S.enqueue(e,(e,n)=>{N(e,t)&&D(e,{percent:n})},(e,n)=>{N(e,t)&&D(e,{status:`success`,percent:100,response:n})},(e,n)=>{N(e,t)&&D(e,{status:`error`,error:n.message})})}function R(){d.value.filter(e=>e.status===`pending`).forEach(e=>void F(e))}function V(){d.value.forEach(e=>{(e.status===`uploading`||e.status===`hashing`||e.status===`validating`)&&(f.add(e.uid),m.set(e.uid,Symbol(e.uid)),x.abortUpload(e.uid),S.abort(e.uid),D(e.uid,{status:`paused`}))})}function H(){d.value.forEach(e=>{e.status===`paused`&&(f.delete(e.uid),D(e.uid,{status:`pending`}))}),R()}function W(e){let t=d.value.find(t=>t.uid===e);t&&t.status===`error`&&(D(e,{status:`pending`,percent:0,error:void 0}),F(t))}function G(){return d.value.filter(e=>e.status===`success`||e.status===`instant`)}return p(()=>{x.abortAll(),S.abortAll(),m.clear(),d.value.forEach(e=>{j(e.thumbUrl)})}),{fileList:d,totalPercent:C,hashing:_,hashProgress:y,addFiles:E,removeFile:O,clearAll:k,startUpload:R,pauseAll:V,resumeAll:H,retryFile:W,processFile:F,getSuccessList:G}}function K(e,t,n,r,i){let a=v(!1),o=null,s=!1;function c(e){t.value&&(e.preventDefault(),a.value=!0)}function l(e){t.value&&(e.preventDefault(),a.value=!0)}function u(n){if(!t.value)return;n.preventDefault();let r=e.value;r&&!r.contains(n.relatedTarget)&&(a.value=!1)}async function d(e){if(!t.value)return;e.preventDefault(),a.value=!1;let n=e.dataTransfer?.items;if(!n)return;let o=await ee(n,e.dataTransfer);if(s||!t.value)return;let c=J(o,r.value);c.length>0&&i(c)}function f(e){if(!n.value)return;let t=e.clipboardData?.items;if(!t)return;let a=[];for(let e=0;e<t.length;e++){let n=t[e];if(n.kind===`file`){let e=n.getAsFile();e&&a.push(e)}}let o=J(a,r.value);o.length>0&&(e.preventDefault(),i(o))}function h(){let t=e.value;!t||o===t||(o=t,t.addEventListener(`dragenter`,c),t.addEventListener(`dragover`,l),t.addEventListener(`dragleave`,u),t.addEventListener(`drop`,d),n.value&&t.addEventListener(`paste`,f))}function g(){let e=o;e&&(e.removeEventListener(`dragenter`,c),e.removeEventListener(`dragover`,l),e.removeEventListener(`dragleave`,u),e.removeEventListener(`drop`,d)),e?.removeEventListener(`paste`,f),o=null}return m(()=>{s=!1,h()}),p(()=>{s=!0,g()}),C([e,t,n],()=>{g(),h()}),{isDragOver:_(a)}}async function ee(e,t){let n=[];for(let t=0;t<e.length;t++){let r=e[t].webkitGetAsEntry?.();r&&n.push(r)}if(n.length>0)return(await Promise.all(n.map(q))).flat();let r=[],i=t?.files;if(i)for(let e=0;e<i.length;e++)r.push(i[e]);return r}async function q(e){if(e.isFile)return new Promise(t=>{e.file(e=>t([e]),()=>t([]))});if(e.isDirectory){let t=e.createReader(),n=[];for(;;){let e=await new Promise(e=>{t.readEntries(t=>e(t),()=>e([]))});if(e.length===0)break;n.push(...e)}return(await Promise.all(n.map(q))).flat()}return[]}function J(e,t){if(!t)return e;let n=t.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean);return n.length===0?e:e.filter(e=>n.some(t=>{if(t.startsWith(`.`))return e.name.toLowerCase().endsWith(t);if(t.endsWith(`/*`)){let n=t.replace(`/*`,``);return e.type.toLowerCase().startsWith(`${n}/`)}return e.type.toLowerCase()===t}))}const Y=[`tabindex`,`aria-disabled`,`onKeydown`],X=[`accept`,`multiple`,`webkitdirectory`,`disabled`],Z={class:`upload-area__default`},Q={class:`upload-area__text`},te={key:0},ne={key:1},re={key:0,class:`upload-area__tip`};var ie=t(d({__name:`UploadArea`,props:{accept:{default:``},multiple:{type:Boolean,default:!1},directory:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},draggable:{type:Boolean,default:!0},pasteable:{type:Boolean,default:!1},tip:{default:``}},emits:[`files`],setup(t,{expose:r,emit:a}){let d=t,p=a,m=v(),g=v(),{isDragOver:_}=K(m,i(()=>d.draggable&&!d.disabled),i(()=>d.pasteable&&!d.disabled),i(()=>d.accept),e=>p(`files`,e));function y(){d.disabled||g.value?.click()}function C(e){let t=e.target,n=d.disabled?[]:J(Array.from(t.files??[]),d.accept);n.length>0&&p(`files`,n),t.value=``}return r({triggerSelect:y}),(r,i)=>(h(),s(`div`,{ref_key:`areaRef`,ref:m,class:f([`upload-area`,{"upload-area--drag-over":S(_),"upload-area--disabled":t.disabled}]),role:`button`,tabindex:t.disabled?-1:0,"aria-disabled":t.disabled,onClick:y,onKeydown:[T(E(y,[`prevent`]),[`enter`]),T(E(y,[`prevent`]),[`space`])]},[c(`input`,{ref_key:`inputRef`,ref:g,type:`file`,class:`upload-area__input`,accept:t.accept,multiple:t.multiple,webkitdirectory:t.directory||void 0,disabled:t.disabled,onClick:i[0]||=E(()=>{},[`stop`]),onChange:C},null,40,X),b(r.$slots,`default`,{},()=>[c(`div`,Z,[u(e,{name:S(_)?`mdi:cloud-download-outline`:`mdi:cloud-upload-outline`,class:`upload-area__icon`},null,8,[`name`]),c(`div`,Q,[S(_)?(h(),s(`span`,te,`释放文件到此处`)):(h(),s(`span`,ne,[i[4]||=l(` 点击或拖拽文件到此区域上传 `,-1),t.pasteable?(h(),s(n,{key:0},[i[1]||=l(` ,支持 `,-1),i[2]||=c(`kbd`,null,`Ctrl+V`,-1),i[3]||=l(` 粘贴 `,-1)],64)):o(`v-if`,!0)]))]),t.tip?(h(),s(`div`,re,x(t.tip),1)):o(`v-if`,!0)])],!0)],42,Y))}}),[[`__scopeId`,`data-v-705892ab`]]);const ae={class:`file-list__thumb`},oe=[`src`,`alt`],se={class:`file-list__info`},ce={class:`file-list__name`},le={class:`file-list__meta`},ue={class:`file-list__size`},de={key:0,class:`file-list__instant`},fe={key:1,class:`file-list__chunk-info`},pe={key:2,class:`file-list__error`},me={class:`file-list__actions`};var he=t(d({__name:`FileList`,props:{fileList:{},showThumbnail:{type:Boolean}},emits:[`remove`,`retry`],setup(t,{emit:i}){let d=i;return(i,p)=>(h(),a(r,{name:`file-list`,tag:`div`,class:`file-list`},{default:w(()=>[(h(!0),s(n,null,y(t.fileList,n=>(h(),s(`div`,{key:n.uid,class:f([`file-list__item`,`file-list__item--${n.status}`])},[o(` 缩略图 / 图标 `),c(`div`,ae,[t.showThumbnail&&n.thumbUrl?(h(),s(`img`,{key:0,src:n.thumbUrl,alt:n.name,class:`file-list__thumb-img`},null,8,oe)):(h(),a(e,{key:1,name:S(I)(n.type),class:`file-list__thumb-icon`},null,8,[`name`]))]),o(` 文件信息 `),c(`div`,se,[c(`div`,ce,[u(S(O),{"line-clamp":1},{default:w(()=>[l(x(n.name),1)]),_:2},1024)]),c(`div`,le,[c(`span`,ue,x(S(L)(n.size)),1),u(S(A),{type:S(P)[n.status]||`default`,size:`tiny`,bordered:!1},{default:w(()=>[l(x(S(N)[n.status]||n.status),1)]),_:2},1032,[`type`]),n.status===`instant`?(h(),s(`span`,de,` ⚡ `)):o(`v-if`,!0)]),o(` 进度条 `),n.status===`uploading`||n.status===`hashing`?(h(),a(S(k),{key:0,percentage:n.percent,height:4,"border-radius":2,"show-indicator":!1,status:n.status===`hashing`?`info`:`success`},null,8,[`percentage`,`status`])):o(`v-if`,!0),o(` 分片进度描述 `),n.chunkProgress&&n.status===`uploading`?(h(),s(`div`,fe,` 分片 `+x(n.chunkProgress.uploadedChunks)+`/`+x(n.chunkProgress.totalChunks),1)):o(`v-if`,!0),o(` 错误信息 `),n.status===`error`&&n.error?(h(),s(`div`,pe,x(n.error),1)):o(`v-if`,!0)]),o(` 操作按钮 `),c(`div`,me,[n.status===`error`?(h(),a(S(D),{key:0,text:``,type:`warning`,size:`tiny`,"aria-label":`重试上传`,onClick:e=>d(`retry`,n.uid)},{icon:w(()=>[u(e,{name:`mdi:refresh`})]),_:1},8,[`onClick`])):o(`v-if`,!0),u(S(D),{text:``,type:`error`,size:`tiny`,"aria-label":`移除文件`,onClick:e=>d(`remove`,n.uid)},{icon:w(()=>[u(e,{name:`mdi:close`})]),_:1},8,[`onClick`])])],2))),128))]),_:1}))}}),[[`__scopeId`,`data-v-04f26012`]]);const ge={key:0,class:`image-preview`},_e=[`src`,`alt`],$={class:`image-preview__overlay`},ve={key:0,class:`image-preview__progress`},ye={class:`image-preview__actions`},be={class:`image-preview__name`};var xe=t(d({__name:`ImagePreview`,props:{fileList:{}},emits:[`remove`,`retry`],setup(t,{emit:r}){let d=t,p=r,m=i(()=>d.fileList.filter(e=>e.type?.startsWith(`image/`)));return(t,r)=>m.value.length>0?(h(),s(`div`,ge,[(h(!0),s(n,null,y(m.value,t=>(h(),s(`div`,{key:t.uid,class:f([`image-preview__item`,`image-preview__item--${t.status}`])},[t.thumbUrl?(h(),s(`img`,{key:0,src:t.thumbUrl,alt:t.name,class:`image-preview__img`},null,8,_e)):o(`v-if`,!0),o(` 遮罩层 `),c(`div`,$,[o(` 上传中进度 `),t.status===`uploading`||t.status===`hashing`?(h(),s(`div`,ve,[u(S(k),{type:`circle`,percentage:t.percent,"stroke-width":3,style:{width:`40px`}},null,8,[`percentage`])])):t.status===`success`||t.status===`instant`?(h(),s(n,{key:1},[o(` 状态图标 `),u(e,{name:`mdi:check-circle`,class:`image-preview__status-icon image-preview__status-icon--success`})],2112)):t.status===`error`?(h(),a(e,{key:2,name:`mdi:alert-circle`,class:`image-preview__status-icon image-preview__status-icon--error`})):o(`v-if`,!0),o(` 操作 `),c(`div`,ye,[t.status===`error`?(h(),a(S(D),{key:0,circle:``,size:`tiny`,type:`warning`,"aria-label":`重试上传`,onClick:e=>p(`retry`,t.uid)},{icon:w(()=>[u(e,{name:`mdi:refresh`})]),_:1},8,[`onClick`])):o(`v-if`,!0),u(S(D),{circle:``,size:`tiny`,type:`error`,"aria-label":`移除文件`,onClick:e=>p(`remove`,t.uid)},{icon:w(()=>[u(e,{name:`mdi:close`})]),_:1},8,[`onClick`])])]),o(` 文件名 `),c(`div`,be,[u(S(O),{"line-clamp":1},{default:w(()=>[l(x(t.name),1)]),_:2},1024)])],2))),128))])):o(`v-if`,!0)}}),[[`__scopeId`,`data-v-32d39ae9`]]);const Se={class:`c-upload`},Ce={key:0,class:`c-upload__total-progress`},we={class:`c-upload__total-label`};var Te=t(d({__name:`index`,props:{action:{default:``},headers:{default:()=>({})},data:{default:()=>({})},multiple:{type:Boolean,default:!1},directory:{type:Boolean,default:!1},accept:{default:``},maxSize:{default:0},maxCount:{default:0},disabled:{type:Boolean,default:!1},draggable:{type:Boolean,default:!0},pasteable:{type:Boolean,default:!1},chunked:{type:Boolean,default:!1},chunkSize:{default:M},concurrency:{default:3},showFileList:{type:Boolean,default:!0},listType:{default:`text`},showThumbnail:{type:Boolean,default:!0},customRequest:{},instantCheck:{},uploadedChunksQuery:{},mergeChunks:{},beforeUpload:{},tip:{default:``},defaultFileList:{default:()=>[]}},emits:[`change`,`success`,`error`,`progress`,`remove`,`finish`,`exceed`],setup(e,{expose:t,emit:r}){let l=e,d=r,f=v(),{fileList:p,totalPercent:m,addFiles:g,removeFile:_,clearAll:y,startUpload:T,pauseAll:E,resumeAll:D,retryFile:O,processFile:A,getSuccessList:j}=G(l),M=i(()=>p.value.some(e=>e.status===`uploading`||e.status===`hashing`||e.status===`validating`)),N=e=>({...e}),P=()=>p.value.map(N);function F(e){let t=Math.max(0,Math.trunc(Number(l.maxCount)||0));if(t>0&&p.value.length+e.length>t){d(`exceed`,e,P());let n=t-p.value.length;if(n<=0)return;e=e.slice(0,n)}let n=g(e);d(`change`,P()),n.forEach(e=>void A(e))}function I(e){let t=p.value.find(t=>t.uid===e);t&&(d(`remove`,N(t)),_(e),d(`change`,P()))}function L(e){O(e)}let R=new Map,z=!1;return C(p,e=>{let t=new Set(e.map(e=>e.uid));R.forEach((e,n)=>{t.has(n)||R.delete(n)}),e.forEach(e=>{let t=R.get(e.uid);t&&t.percent!==e.percent&&d(`progress`,N(e),e.percent),t&&t.status!==e.status&&(e.status===`success`||e.status===`instant`)&&d(`success`,N(e),e.response),t&&t.status!==`error`&&e.status===`error`&&d(`error`,N(e),Error(e.error||`上传失败`)),R.set(e.uid,{status:e.status,percent:e.percent})}),e.length>0&&e.every(e=>e.status===`success`||e.status===`instant`||e.status===`error`)?(z||d(`finish`,P()),z=!0):z=!1,d(`change`,P())},{deep:!0}),t({selectFiles:()=>f.value?.triggerSelect(),startUpload:T,pauseAll:E,resumeAll:D,clearAll:()=>{y(),d(`change`,P())},removeFile:e=>{I(e)},retryFile:O,getFileList:P,getSuccessList:()=>j().map(N),get totalPercent(){return m.value}}),(e,t)=>(h(),s(`div`,Se,[o(` 上传区域 `),u(ie,{ref_key:`uploadAreaRef`,ref:f,accept:l.accept,multiple:l.multiple,directory:l.directory,disabled:l.disabled,draggable:l.draggable,pasteable:l.pasteable,tip:l.tip,onFiles:F},{default:w(()=>[b(e.$slots,`area`,{},void 0,!0)]),_:3},8,[`accept`,`multiple`,`directory`,`disabled`,`draggable`,`pasteable`,`tip`]),o(` 总进度条 `),M.value?(h(),s(`div`,Ce,[c(`div`,we,[t[0]||=c(`span`,null,`总进度`,-1),c(`span`,null,x(S(m))+`%`,1)]),u(S(k),{percentage:S(m),height:6,"border-radius":3,"show-indicator":!1,status:`success`},null,8,[`percentage`])])):o(`v-if`,!0),o(` 图片预览模式 `),l.listType===`image`?(h(),a(xe,{key:1,"file-list":S(p),onRemove:I,onRetry:L},null,8,[`file-list`])):l.showFileList&&S(p).length>0?(h(),s(n,{key:2},[o(` 文件列表模式 `),u(he,{"file-list":S(p),"show-thumbnail":l.showThumbnail,onRemove:I,onRetry:L},null,8,[`file-list`,`show-thumbnail`])],2112)):o(`v-if`,!0)]))}}),[[`__scopeId`,`data-v-58ca8e42`]]);export{B as a,I as c,U as i,K as n,z as o,G as r,L as s,Te as t};
1
+ import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{Fragment as n,TransitionGroup as r,computed as i,createBlock as a,createCommentVNode as o,createElementBlock as s,createElementVNode as c,createTextVNode as l,createVNode as u,defineComponent as d,normalizeClass as f,onBeforeUnmount as p,onMounted as m,openBlock as h,reactive as g,readonly as _,ref as v,renderList as y,renderSlot as b,toDisplayString as x,unref as S,watch as C,withCtx as w,withKeys as T,withModifiers as E}from"vue";import{NButton as D,NEllipsis as O,NProgress as k,NTag as A}from"naive-ui";import j from"spark-md5";const M=2*1024*1024,N={pending:`等待上传`,validating:`校验文件…`,hashing:`计算校验…`,uploading:`上传中…`,success:`上传成功`,error:`上传失败`,paused:`已暂停`,instant:`秒传成功`},P={pending:`default`,validating:`info`,hashing:`info`,uploading:`info`,success:`success`,error:`error`,paused:`warning`,instant:`success`},F={"image/":`mdi:file-image-outline`,"video/":`mdi:file-video-outline`,"audio/":`mdi:file-music-outline`,"application/pdf":`mdi:file-pdf-box`,"application/zip":`mdi:folder-zip-outline`,"application/x-rar":`mdi:folder-zip-outline`,"application/vnd.ms-excel":`mdi:file-excel-outline`,"application/vnd.openxmlformats-officedocument.spreadsheetml":`mdi:file-excel-outline`,"application/msword":`mdi:file-word-outline`,"application/vnd.openxmlformats-officedocument.wordprocessingml":`mdi:file-word-outline`,"text/":`mdi:file-document-outline`,default:`mdi:file-outline`};function I(e){for(let[t,n]of Object.entries(F))if(t!==`default`&&e.startsWith(t))return n;return F.default}function L(e){if(e===0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`,`TB`],n=Math.floor(Math.log(e)/Math.log(1024));return`${(e/1024**n).toFixed(n>0?1:0)} ${t[n]}`}function R(e){let t=[],n=new Set,r=0,i=!1,a=()=>{if(!i){i=!0;try{let n=Math.max(1,Math.trunc(e.value)||1);for(;r<n&&t.length;)t.shift()()}finally{i=!1}}};return C(e,a),Object.assign((e,i)=>{let o=!1,s=!1,c,l=(e=!0)=>o?!1:(o=!0,n.delete(d),s&&--r,e&&a(),!0),u=()=>{if(!o){s=!0,r+=1;try{c=e({...i,onProgress:e=>{o||i.onProgress?.(e)},onSuccess:e=>{l()&&i.onSuccess?.(e)},onError:e=>{l()&&i.onError?.(e)}})}catch(e){l()&&i.onError?.(e instanceof Error?e:Error(String(e)))}}},d=()=>{let e=t.indexOf(u);if(e>=0&&t.splice(e,1),l(!1))try{c?.abort()}catch{}finally{a()}};return n.add(d),t.push(u),a(),{abort:d}},{abortAll(){let e=i;i=!0,t.length=0;try{for(let e of n)e()}finally{i=e}}})}const z=e=>new Promise((t,n)=>{let r,i,a=()=>{e?.removeEventListener(`abort`,o),r!==void 0&&cancelAnimationFrame(r),i!==void 0&&clearTimeout(i)},o=()=>{a(),n(e?.reason??new DOMException(`Hash cancelled`,`AbortError`))},s=()=>{a(),t()};if(e?.addEventListener(`abort`,o,{once:!0}),e?.aborted){o();return}typeof requestAnimationFrame==`function`?r=requestAnimationFrame(s):i=setTimeout(s,0)});function B(e){let t=v(0),n=v(0),r=i(()=>t.value>0),a=Promise.resolve();async function o(e,t,n){let r=a,i;a=new Promise(e=>{i=e}),await r;try{return await s(e,t,n)}finally{i()}}async function s(r,i,a){a?.throwIfAborted(),t.value+=1,n.value=0,i?.(0);let o=new j.ArrayBuffer,s=Math.max(1,Math.trunc(Number(e.value)||1)),c=Math.max(1,Math.ceil(r.size/s));try{for(let e=0;e<c;e+=1){a?.throwIfAborted();let t=e*s,l=await r.slice(t,t+s).arrayBuffer();a?.throwIfAborted(),o.append(l),n.value=Math.round((e+1)/c*100),i?.(n.value),await z(a)}return a?.throwIfAborted(),o.end()}finally{t.value=Math.max(0,t.value-1)}}return{hashing:r,hashProgress:_(n),calculateHash:o}}function V(e){let t=new Map,n=new Map;function r(t){let n=Math.max(1,Math.trunc(Number(e.chunkSize.value)||1)),r=[],i=0,a=0;for(;a<t.size;){let e=Math.min(a+n,t.size);r.push({index:i,blob:t.slice(a,e),size:e-a,uploaded:!1}),a=e,i++}return r}async function i(t,n){if(e.uploadedChunksQuery?.value)try{let r=await e.uploadedChunksQuery.value(t);for(let e of r){let t=n[e];t&&(t.uploaded=!0)}}catch{}}function a(t){return new Promise((n,r)=>{let i=!1,a=()=>{i||(i=!0,n())},o=e=>{i||(i=!0,t.setError(),r(e instanceof Error?e:Error(String(e))))},s={action:e.action.value,headers:e.headers.value,data:{...e.data.value,hash:t.hash,chunkIndex:t.chunk.index,totalChunks:t.totalChunks,filename:t.file.name},file:t.chunk.blob,filename:t.file.name,hash:t.hash,chunkIndex:t.chunk.index,totalChunks:t.totalChunks,onProgress:()=>{},onSuccess:()=>{if(!i){if(t.isCancelled()){a();return}t.chunk.uploaded=!0,t.setUploadedBytes(t.chunk.size),t.onProgress({uploadedChunks:t.chunks.filter(e=>e.uploaded).length,totalChunks:t.totalChunks,uploadedBytes:t.chunks.filter(e=>e.uploaded).reduce((e,t)=>e+t.size,0),totalBytes:t.totalBytes}),a()}},onError:o};try{let n=e.customRequest?.value??H,r=e.scheduler?e.scheduler(n,s):n(s);t.abortControllers.push(()=>{try{r.abort()}catch{}finally{a()}})}catch(e){o(e)}})}async function o(o){let{uid:c,file:l,hash:u,onProgress:d,onSuccess:f,onError:p,isPaused:m}=o,h=Symbol(c);n.set(c,h);let g=()=>n.get(c)!==h,_=()=>{g()||n.delete(c)},v=r(l),y=v.length,b=l.size,x=0;if(await i(u,v),g()||m()){_();return}x=v.filter(e=>e.uploaded).reduce((e,t)=>e+t.size,0),d({uploadedChunks:v.filter(e=>e.uploaded).length,totalChunks:y,uploadedBytes:x,totalBytes:b});let S=v.filter(e=>!e.uploaded);if(S.length===0){try{g()||await s(u,l.name,y,f,p,g)}finally{_()}return}let C=[];t.set(c,C);let w=Math.max(1,Math.trunc(Number(e.concurrency.value)||1)),T=0,E=!1;async function D(){for(;T<S.length&&!E&&!m()&&!g();){let e=S[T++];await a({chunk:e,hash:u,file:l,totalChunks:y,chunks:v,totalBytes:b,abortControllers:C,onProgress:e=>{g()||d(e)},setUploadedBytes:e=>{x+=e},setError:()=>{E=!0},isCancelled:g})}}let O=Array.from({length:Math.min(w,S.length)},()=>D());try{let e=(await Promise.allSettled(O)).find(e=>e.status===`rejected`);e&&!g()?p(e.reason instanceof Error?e.reason:Error(String(e.reason))):!E&&!m()&&!g()&&await s(u,l.name,y,f,p,g)}finally{g()||t.delete(c),_()}}async function s(t,n,r,i,a,o){if(e.mergeChunks?.value)try{let a=await e.mergeChunks.value(t,n,r);o()||i(a)}catch(e){o()||a(e instanceof Error?e:Error(`分片合并失败`))}else o()||i({message:`分片上传完成(未配置合并函数)`})}function c(e){n.delete(e),t.get(e)?.forEach(e=>e()),t.delete(e)}function l(){n.clear(),t.forEach(e=>{e.forEach(e=>e())}),t.clear()}return{createChunks:r,uploadChunks:o,abortUpload:c,abortAll:l}}function H(e){let t=new XMLHttpRequest;t.open(`POST`,e.action),e.headers&&Object.entries(e.headers).forEach(([e,n])=>{t.setRequestHeader(e,n)}),t.upload.addEventListener(`progress`,t=>{t.lengthComputable&&e.onProgress?.(Math.round(t.loaded/t.total*100))}),t.addEventListener(`load`,()=>{if(t.status>=200&&t.status<300){let n;try{n=JSON.parse(t.responseText)}catch{n=t.responseText}e.onSuccess?.(n)}else e.onError?.(Error(`上传失败: HTTP ${t.status}`))}),t.addEventListener(`error`,()=>{e.onError?.(Error(`网络错误`))}),t.addEventListener(`abort`,()=>{e.onError?.(new DOMException(`上传已取消`,`AbortError`))});let n=new FormData;return n.append(`file`,e.file,e.filename),e.data&&Object.entries(e.data).forEach(([e,t])=>{n.append(e,String(t))}),t.send(n),{abort:()=>t.abort()}}function U(e){return e instanceof Error?e:Error(String(e))}function W(e){let t=[],n=v(0),r=new Map,i=()=>{n.value=r.size},a=()=>Math.max(1,Math.trunc(Number(e.concurrency.value)||1));function o(){for(;r.size<a()&&t.length>0;){let n=t.shift(),{file:a}=n;if(!a.raw||r.has(a.uid))continue;let s=!1,c=e=>{s||(s=!0,r.delete(a.uid),i(),e?.error?n.onError(a.uid,e.error):e&&`response`in e&&n.onSuccess(a.uid,e.response),o())},l={action:e.action.value,headers:e.headers.value,data:e.data.value,file:a.raw,filename:a.name,onProgress:e=>n.onProgress(a.uid,e),onSuccess:e=>c({response:e}),onError:e=>c({error:e})};r.set(a.uid,{abort:()=>void 0,settle:c}),i();try{let t=e.customRequest?.value??G,n=e.scheduler?e.scheduler(t,l):t(l),i=r.get(a.uid);i&&(i.abort=n.abort)}catch(e){c({error:U(e)})}}}function s(e,n,r,i){c(e.uid),t.push({file:e,onProgress:n,onSuccess:r,onError:i}),o()}function c(e){for(let n=t.length-1;n>=0;--n)t[n].file.uid===e&&t.splice(n,1);let n=r.get(e);if(n){n.settle();try{n.abort()}catch{}}}function l(){t.length=0;let e=[...r.values()];r.clear(),i(),e.forEach(e=>{e.settle();try{e.abort()}catch{}})}return C(e.concurrency,o),{activeCount:_(n),enqueue:s,abort:c,abortAll:l}}function G(e){let t=new XMLHttpRequest;t.open(`POST`,e.action),Object.entries(e.headers??{}).forEach(([e,n])=>{t.setRequestHeader(e,n)}),t.upload.addEventListener(`progress`,t=>{t.lengthComputable&&e.onProgress?.(Math.round(t.loaded/t.total*100))}),t.addEventListener(`load`,()=>{if(t.status>=200&&t.status<300){let n=t.responseText;try{n=JSON.parse(t.responseText)}catch{}e.onSuccess?.(n)}else e.onError?.(Error(`上传失败: HTTP ${t.status}`))}),t.addEventListener(`error`,()=>e.onError?.(Error(`网络错误`)));let n=new FormData;return n.append(`file`,e.file,e.filename),Object.entries(e.data??{}).forEach(([e,t])=>{n.append(e,String(t))}),t.send(n),{abort:()=>t.abort()}}function K(e){let t=i(()=>e.action??``),n=i(()=>e.headers??{}),r=i(()=>e.data??{}),a=i(()=>{let t=Math.trunc(Number(e.chunkSize));return Number.isFinite(t)&&t>0?t:M}),o=i(()=>{let t=Math.trunc(Number(e.concurrency));return Number.isFinite(t)&&t>0?t:3}),s=i(()=>e.customRequest),c=i(()=>e.instantCheck),l=i(()=>e.uploadedChunksQuery),u=i(()=>e.mergeChunks),d=v((e.defaultFileList??[]).map(e=>({...e}))),f=g(new Set),m=new Map,h=new Set,{hashing:_,hashProgress:y,calculateHash:b}=B(a),x=R(o),S=new Map,C=e=>{S.get(e)?.abort(),S.delete(e)},w=()=>{S.forEach(e=>e.abort()),S.clear()},T=V({scheduler:x,chunkSize:a,concurrency:o,action:t,headers:n,data:r,customRequest:s,uploadedChunksQuery:l,mergeChunks:u}),E=W({scheduler:x,concurrency:o,action:t,headers:n,data:r,customRequest:s}),D=i(()=>{let e=d.value;if(e.length===0)return 0;let t=e.reduce((e,t)=>e+t.percent,0);return Math.round(t/e.length)});function O(){return typeof crypto<`u`&&`randomUUID`in crypto?`upload-${crypto.randomUUID()}`:`upload-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function k(e){if(e.type.startsWith(`image/`)){let t=URL.createObjectURL(e);return h.add(t),t}}function A(t){let n=[];for(let r of t){if(Number.isFinite(e.maxCount)&&(e.maxCount??0)>0&&d.value.length+n.length>=Math.trunc(e.maxCount))break;let t={uid:O(),name:r.name,size:r.size,type:r.type,status:`pending`,percent:0,raw:r,thumbUrl:k(r)};n.push(t)}return d.value.push(...n),n}function j(e,t){let n=d.value.find(t=>t.uid===e);n&&Object.assign(n,t)}function N(e){C(e),m.set(e,Symbol(e)),T.abortUpload(e),E.abort(e),f.delete(e);let t=d.value.findIndex(t=>t.uid===e);if(t!==-1){let e=d.value[t];I(e.thumbUrl),d.value.splice(t,1)}}function P(){x.abortAll(),w(),T.abortAll(),E.abortAll(),f.clear(),d.value.forEach(e=>{I(e.thumbUrl)}),d.value=[],m.clear()}async function F(t){if((e.maxSize??0)>0&&t.size>e.maxSize)return null;if(e.beforeUpload){let n=await e.beforeUpload(t);if(n===!1)return null;if(n instanceof File)return(e.maxSize??0)>0&&n.size>e.maxSize?null:n}return t}function I(e){!e||!h.has(e)||(URL.revokeObjectURL(e),h.delete(e))}function L(e,t){return m.get(e)===t&&!f.has(e)&&d.value.some(t=>t.uid===e)}async function z(e,t){C(e.uid);let n=new AbortController;S.set(e.uid,n);try{return await b(e.raw,n=>{L(e.uid,t)&&j(e.uid,{percent:n})},n.signal)}finally{S.get(e.uid)===n&&S.delete(e.uid)}}async function H(n){if(!n.raw)return;let r=Symbol(n.uid);m.set(n.uid,r),j(n.uid,{status:`validating`,error:void 0});let i;try{i=await F(n.raw)}catch(e){L(n.uid,r)&&j(n.uid,{status:`error`,error:e instanceof Error?e.message:`文件校验失败`});return}if(L(n.uid,r)){if(!i){j(n.uid,{status:`error`,error:`文件校验未通过`});return}if(i!==n.raw&&(I(n.thumbUrl),Object.assign(n,{raw:i,name:i.name,size:i.size,type:i.type,hash:void 0,chunkProgress:void 0,thumbUrl:k(i)})),!s.value&&!t.value.trim()){j(n.uid,{status:`error`,error:`未配置上传地址`});return}if(c.value&&!n.hash){j(n.uid,{status:`hashing`});try{let e=await z(n,r);if(!L(n.uid,r))return;j(n.uid,{hash:e});let t=await c.value(e,n.raw.name);if(!L(n.uid,r))return;if(t.exists){j(n.uid,{status:`instant`,percent:100,url:t.url});return}}catch{if(!L(n.uid,r))return}}e.chunked&&n.raw.size>a.value?await U(n,r):G(n,r)}}async function U(e,t){let n=e.raw,{hash:r}=e;if(!r){j(e.uid,{status:`hashing`});try{if(r=await z(e,t),!L(e.uid,t))return;j(e.uid,{hash:r})}catch{L(e.uid,t)&&j(e.uid,{status:`error`,error:`Hash 计算失败`});return}}j(e.uid,{status:`uploading`,percent:0}),await T.uploadChunks({uid:e.uid,file:n,hash:r,onProgress:n=>{if(!L(e.uid,t))return;let r=Math.round(n.uploadedBytes/n.totalBytes*100);j(e.uid,{percent:r,chunkProgress:n})},onSuccess:n=>{L(e.uid,t)&&j(e.uid,{status:`success`,percent:100,response:n})},onError:n=>{L(e.uid,t)&&j(e.uid,{status:`error`,error:n.message})},isPaused:()=>f.has(e.uid)})}function G(e,t){j(e.uid,{status:`uploading`,percent:0}),E.enqueue(e,(e,n)=>{L(e,t)&&j(e,{percent:n})},(e,n)=>{L(e,t)&&j(e,{status:`success`,percent:100,response:n})},(e,n)=>{L(e,t)&&j(e,{status:`error`,error:n.message})})}function K(){d.value.filter(e=>e.status===`pending`).forEach(e=>void H(e))}function q(){x.abortAll(),d.value.forEach(e=>{(e.status===`uploading`||e.status===`hashing`||e.status===`validating`)&&(C(e.uid),f.add(e.uid),m.set(e.uid,Symbol(e.uid)),T.abortUpload(e.uid),E.abort(e.uid),j(e.uid,{status:`paused`}))})}function J(){d.value.forEach(e=>{e.status===`paused`&&(f.delete(e.uid),j(e.uid,{status:`pending`}))}),K()}function Y(e){let t=d.value.find(t=>t.uid===e);t&&t.status===`error`&&(j(e,{status:`pending`,percent:0,error:void 0}),H(t))}function X(){return d.value.filter(e=>e.status===`success`||e.status===`instant`)}return p(()=>{x.abortAll(),w(),T.abortAll(),E.abortAll(),m.clear(),d.value.forEach(e=>{I(e.thumbUrl)})}),{fileList:d,totalPercent:D,hashing:_,hashProgress:y,addFiles:A,removeFile:N,clearAll:P,startUpload:K,pauseAll:q,resumeAll:J,retryFile:Y,processFile:H,getSuccessList:X}}function q(e,t,n,r,i){let a=v(!1),o=null,s=!1;function c(e){t.value&&(e.preventDefault(),a.value=!0)}function l(e){t.value&&(e.preventDefault(),a.value=!0)}function u(n){if(!t.value)return;n.preventDefault();let r=e.value;r&&!r.contains(n.relatedTarget)&&(a.value=!1)}async function d(e){if(!t.value)return;e.preventDefault(),a.value=!1;let n=e.dataTransfer?.items;if(!n)return;let o=await J(n,e.dataTransfer);if(s||!t.value)return;let c=X(o,r.value);c.length>0&&i(c)}function f(e){if(!n.value)return;let t=e.clipboardData?.items;if(!t)return;let a=[];for(let e=0;e<t.length;e++){let n=t[e];if(n.kind===`file`){let e=n.getAsFile();e&&a.push(e)}}let o=X(a,r.value);o.length>0&&(e.preventDefault(),i(o))}function h(){let t=e.value;!t||o===t||(o=t,t.addEventListener(`dragenter`,c),t.addEventListener(`dragover`,l),t.addEventListener(`dragleave`,u),t.addEventListener(`drop`,d),n.value&&t.addEventListener(`paste`,f))}function g(){let e=o;e&&(e.removeEventListener(`dragenter`,c),e.removeEventListener(`dragover`,l),e.removeEventListener(`dragleave`,u),e.removeEventListener(`drop`,d)),e?.removeEventListener(`paste`,f),o=null}return m(()=>{s=!1,h()}),p(()=>{s=!0,g()}),C([e,t,n],()=>{g(),h()}),{isDragOver:_(a)}}async function J(e,t){let n=[];for(let t=0;t<e.length;t++){let r=e[t].webkitGetAsEntry?.();r&&n.push(r)}if(n.length>0)return(await Promise.all(n.map(Y))).flat();let r=[],i=t?.files;if(i)for(let e=0;e<i.length;e++)r.push(i[e]);return r}async function Y(e){if(e.isFile)return new Promise(t=>{e.file(e=>t([e]),()=>t([]))});if(e.isDirectory){let t=e.createReader(),n=[];for(;;){let e=await new Promise(e=>{t.readEntries(t=>e(t),()=>e([]))});if(e.length===0)break;n.push(...e)}return(await Promise.all(n.map(Y))).flat()}return[]}function X(e,t){if(!t)return e;let n=t.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean);return n.length===0?e:e.filter(e=>n.some(t=>{if(t.startsWith(`.`))return e.name.toLowerCase().endsWith(t);if(t.endsWith(`/*`)){let n=t.replace(`/*`,``);return e.type.toLowerCase().startsWith(`${n}/`)}return e.type.toLowerCase()===t}))}const ee=[`tabindex`,`aria-disabled`,`onKeydown`],Z=[`accept`,`multiple`,`webkitdirectory`,`disabled`],Q={class:`upload-area__default`},te={class:`upload-area__text`},ne={key:0},re={key:1},ie={key:0,class:`upload-area__tip`};var ae=t(d({__name:`UploadArea`,props:{accept:{default:``},multiple:{type:Boolean,default:!1},directory:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},draggable:{type:Boolean,default:!0},pasteable:{type:Boolean,default:!1},tip:{default:``}},emits:[`files`],setup(t,{expose:r,emit:a}){let d=t,p=a,m=v(),g=v(),{isDragOver:_}=q(m,i(()=>d.draggable&&!d.disabled),i(()=>d.pasteable&&!d.disabled),i(()=>d.accept),e=>p(`files`,e));function y(){d.disabled||g.value?.click()}function C(e){let t=e.target,n=d.disabled?[]:X(Array.from(t.files??[]),d.accept);n.length>0&&p(`files`,n),t.value=``}return r({triggerSelect:y}),(r,i)=>(h(),s(`div`,{ref_key:`areaRef`,ref:m,class:f([`upload-area`,{"upload-area--drag-over":S(_),"upload-area--disabled":t.disabled}]),role:`button`,tabindex:t.disabled?-1:0,"aria-disabled":t.disabled,onClick:y,onKeydown:[T(E(y,[`prevent`]),[`enter`]),T(E(y,[`prevent`]),[`space`])]},[c(`input`,{ref_key:`inputRef`,ref:g,type:`file`,class:`upload-area__input`,accept:t.accept,multiple:t.multiple,webkitdirectory:t.directory||void 0,disabled:t.disabled,onClick:i[0]||=E(()=>{},[`stop`]),onChange:C},null,40,Z),b(r.$slots,`default`,{},()=>[c(`div`,Q,[u(e,{name:S(_)?`mdi:cloud-download-outline`:`mdi:cloud-upload-outline`,class:`upload-area__icon`},null,8,[`name`]),c(`div`,te,[S(_)?(h(),s(`span`,ne,`释放文件到此处`)):(h(),s(`span`,re,[i[4]||=l(` 点击或拖拽文件到此区域上传 `,-1),t.pasteable?(h(),s(n,{key:0},[i[1]||=l(` ,支持 `,-1),i[2]||=c(`kbd`,null,`Ctrl+V`,-1),i[3]||=l(` 粘贴 `,-1)],64)):o(`v-if`,!0)]))]),t.tip?(h(),s(`div`,ie,x(t.tip),1)):o(`v-if`,!0)])],!0)],42,ee))}}),[[`__scopeId`,`data-v-705892ab`]]);const oe={class:`file-list__thumb`},se=[`src`,`alt`],ce={class:`file-list__info`},le={class:`file-list__name`},ue={class:`file-list__meta`},de={class:`file-list__size`},fe={key:0,class:`file-list__instant`},pe={key:1,class:`file-list__chunk-info`},me={key:2,class:`file-list__error`},he={class:`file-list__actions`};var ge=t(d({__name:`FileList`,props:{fileList:{},showThumbnail:{type:Boolean}},emits:[`remove`,`retry`],setup(t,{emit:i}){let d=i;return(i,p)=>(h(),a(r,{name:`file-list`,tag:`div`,class:`file-list`},{default:w(()=>[(h(!0),s(n,null,y(t.fileList,n=>(h(),s(`div`,{key:n.uid,class:f([`file-list__item`,`file-list__item--${n.status}`])},[o(` 缩略图 / 图标 `),c(`div`,oe,[t.showThumbnail&&n.thumbUrl?(h(),s(`img`,{key:0,src:n.thumbUrl,alt:n.name,class:`file-list__thumb-img`},null,8,se)):(h(),a(e,{key:1,name:S(I)(n.type),class:`file-list__thumb-icon`},null,8,[`name`]))]),o(` 文件信息 `),c(`div`,ce,[c(`div`,le,[u(S(O),{"line-clamp":1},{default:w(()=>[l(x(n.name),1)]),_:2},1024)]),c(`div`,ue,[c(`span`,de,x(S(L)(n.size)),1),u(S(A),{type:S(P)[n.status]||`default`,size:`tiny`,bordered:!1},{default:w(()=>[l(x(S(N)[n.status]||n.status),1)]),_:2},1032,[`type`]),n.status===`instant`?(h(),s(`span`,fe,` ⚡ `)):o(`v-if`,!0)]),o(` 进度条 `),n.status===`uploading`||n.status===`hashing`?(h(),a(S(k),{key:0,percentage:n.percent,height:4,"border-radius":2,"show-indicator":!1,status:n.status===`hashing`?`info`:`success`},null,8,[`percentage`,`status`])):o(`v-if`,!0),o(` 分片进度描述 `),n.chunkProgress&&n.status===`uploading`?(h(),s(`div`,pe,` 分片 `+x(n.chunkProgress.uploadedChunks)+`/`+x(n.chunkProgress.totalChunks),1)):o(`v-if`,!0),o(` 错误信息 `),n.status===`error`&&n.error?(h(),s(`div`,me,x(n.error),1)):o(`v-if`,!0)]),o(` 操作按钮 `),c(`div`,he,[n.status===`error`?(h(),a(S(D),{key:0,text:``,type:`warning`,size:`tiny`,"aria-label":`重试上传`,onClick:e=>d(`retry`,n.uid)},{icon:w(()=>[u(e,{name:`mdi:refresh`})]),_:1},8,[`onClick`])):o(`v-if`,!0),u(S(D),{text:``,type:`error`,size:`tiny`,"aria-label":`移除文件`,onClick:e=>d(`remove`,n.uid)},{icon:w(()=>[u(e,{name:`mdi:close`})]),_:1},8,[`onClick`])])],2))),128))]),_:1}))}}),[[`__scopeId`,`data-v-04f26012`]]);const _e={key:0,class:`image-preview`},ve=[`src`,`alt`],ye={class:`image-preview__overlay`},be={key:0,class:`image-preview__progress`},$={class:`image-preview__actions`},xe={class:`image-preview__name`};var Se=t(d({__name:`ImagePreview`,props:{fileList:{}},emits:[`remove`,`retry`],setup(t,{emit:r}){let d=t,p=r,m=i(()=>d.fileList.filter(e=>e.type?.startsWith(`image/`)));return(t,r)=>m.value.length>0?(h(),s(`div`,_e,[(h(!0),s(n,null,y(m.value,t=>(h(),s(`div`,{key:t.uid,class:f([`image-preview__item`,`image-preview__item--${t.status}`])},[t.thumbUrl?(h(),s(`img`,{key:0,src:t.thumbUrl,alt:t.name,class:`image-preview__img`},null,8,ve)):o(`v-if`,!0),o(` 遮罩层 `),c(`div`,ye,[o(` 上传中进度 `),t.status===`uploading`||t.status===`hashing`?(h(),s(`div`,be,[u(S(k),{type:`circle`,percentage:t.percent,"stroke-width":3,style:{width:`40px`}},null,8,[`percentage`])])):t.status===`success`||t.status===`instant`?(h(),s(n,{key:1},[o(` 状态图标 `),u(e,{name:`mdi:check-circle`,class:`image-preview__status-icon image-preview__status-icon--success`})],2112)):t.status===`error`?(h(),a(e,{key:2,name:`mdi:alert-circle`,class:`image-preview__status-icon image-preview__status-icon--error`})):o(`v-if`,!0),o(` 操作 `),c(`div`,$,[t.status===`error`?(h(),a(S(D),{key:0,circle:``,size:`tiny`,type:`warning`,"aria-label":`重试上传`,onClick:e=>p(`retry`,t.uid)},{icon:w(()=>[u(e,{name:`mdi:refresh`})]),_:1},8,[`onClick`])):o(`v-if`,!0),u(S(D),{circle:``,size:`tiny`,type:`error`,"aria-label":`移除文件`,onClick:e=>p(`remove`,t.uid)},{icon:w(()=>[u(e,{name:`mdi:close`})]),_:1},8,[`onClick`])])]),o(` 文件名 `),c(`div`,xe,[u(S(O),{"line-clamp":1},{default:w(()=>[l(x(t.name),1)]),_:2},1024)])],2))),128))])):o(`v-if`,!0)}}),[[`__scopeId`,`data-v-32d39ae9`]]);const Ce={class:`c-upload`},we={key:0,class:`c-upload__total-progress`},Te={class:`c-upload__total-label`};var Ee=t(d({__name:`index`,props:{action:{default:``},headers:{default:()=>({})},data:{default:()=>({})},multiple:{type:Boolean,default:!1},directory:{type:Boolean,default:!1},accept:{default:``},maxSize:{default:0},maxCount:{default:0},disabled:{type:Boolean,default:!1},draggable:{type:Boolean,default:!0},pasteable:{type:Boolean,default:!1},chunked:{type:Boolean,default:!1},chunkSize:{default:M},concurrency:{default:3},showFileList:{type:Boolean,default:!0},listType:{default:`text`},showThumbnail:{type:Boolean,default:!0},customRequest:{},instantCheck:{},uploadedChunksQuery:{},mergeChunks:{},beforeUpload:{},tip:{default:``},defaultFileList:{default:()=>[]}},emits:[`change`,`success`,`error`,`progress`,`remove`,`finish`,`exceed`],setup(e,{expose:t,emit:r}){let l=e,d=r,f=v(),{fileList:p,totalPercent:m,addFiles:g,removeFile:_,clearAll:y,startUpload:T,pauseAll:E,resumeAll:D,retryFile:O,processFile:A,getSuccessList:j}=K(l),M=i(()=>p.value.some(e=>e.status===`uploading`||e.status===`hashing`||e.status===`validating`)),N=e=>({...e}),P=()=>p.value.map(N);function F(e){let t=Math.max(0,Math.trunc(Number(l.maxCount)||0));if(t>0&&p.value.length+e.length>t){d(`exceed`,e,P());let n=t-p.value.length;if(n<=0)return;e=e.slice(0,n)}let n=g(e);d(`change`,P()),n.forEach(e=>void A(e))}function I(e){let t=p.value.find(t=>t.uid===e);t&&(d(`remove`,N(t)),_(e),d(`change`,P()))}function L(e){O(e)}let R=new Map,z=!1;return C(p,e=>{let t=new Set(e.map(e=>e.uid));R.forEach((e,n)=>{t.has(n)||R.delete(n)}),e.forEach(e=>{let t=R.get(e.uid);t&&t.percent!==e.percent&&d(`progress`,N(e),e.percent),t&&t.status!==e.status&&(e.status===`success`||e.status===`instant`)&&d(`success`,N(e),e.response),t&&t.status!==`error`&&e.status===`error`&&d(`error`,N(e),Error(e.error||`上传失败`)),R.set(e.uid,{status:e.status,percent:e.percent})}),e.length>0&&e.every(e=>e.status===`success`||e.status===`instant`||e.status===`error`)?(z||d(`finish`,P()),z=!0):z=!1,d(`change`,P())},{deep:!0}),t({selectFiles:()=>f.value?.triggerSelect(),startUpload:T,pauseAll:E,resumeAll:D,clearAll:()=>{y(),d(`change`,P())},removeFile:e=>{I(e)},retryFile:O,getFileList:P,getSuccessList:()=>j().map(N),get totalPercent(){return m.value}}),(e,t)=>(h(),s(`div`,Ce,[o(` 上传区域 `),u(ae,{ref_key:`uploadAreaRef`,ref:f,accept:l.accept,multiple:l.multiple,directory:l.directory,disabled:l.disabled,draggable:l.draggable,pasteable:l.pasteable,tip:l.tip,onFiles:F},{default:w(()=>[b(e.$slots,`area`,{},void 0,!0)]),_:3},8,[`accept`,`multiple`,`directory`,`disabled`,`draggable`,`pasteable`,`tip`]),o(` 总进度条 `),M.value?(h(),s(`div`,we,[c(`div`,Te,[t[0]||=c(`span`,null,`总进度`,-1),c(`span`,null,x(S(m))+`%`,1)]),u(S(k),{percentage:S(m),height:6,"border-radius":3,"show-indicator":!1,status:`success`},null,8,[`percentage`])])):o(`v-if`,!0),o(` 图片预览模式 `),l.listType===`image`?(h(),a(Se,{key:1,"file-list":S(p),onRemove:I,onRetry:L},null,8,[`file-list`])):l.showFileList&&S(p).length>0?(h(),s(n,{key:2},[o(` 文件列表模式 `),u(ge,{"file-list":S(p),"show-thumbnail":l.showThumbnail,onRemove:I,onRetry:L},null,8,[`file-list`,`show-thumbnail`])],2112)):o(`v-if`,!0)]))}}),[[`__scopeId`,`data-v-58ca8e42`]]);export{V as a,I as c,W as i,q as n,B as o,K as r,L as s,Ee as t};
@@ -1,2 +1,2 @@
1
- import { A as PlaybackRate, B as ThumbnailConfig, C as AnalyticsEventType, D as Chapter, E as Bookmark, F as QualityDefinition, G as VideoSourceType, H as VideoPlayerExpose, I as QualityLevel, L as QuizOption, M as PlayerState, N as ProgressData, O as IDefinition, P as ProgressReporter, R as QuizType, S as AnalyticsEvent, T as AntiCheatConfig, U as VideoPlayerProps, V as VideoPlayerEmits, W as VideoQuiz, _ as useChapters, a as KEYBOARD_SHORTCUTS, b as usePlayerCore, c as SEEK_STEP, d as STORAGE_PREFIX, f as VOLUME_STEP, g as useSubtitle, h as useProgressTracker, i as DEFAULT_VOLUME, j as PlayerInstance, k as IPlayerOptions, l as SOURCE_TYPE_MAP, m as XGPLAYER_EVENTS, n as DEFAULT_PLAYBACK_RATE, o as PROGRESS_THROTTLE_INTERVAL, p as WATERMARK_DEFAULT_STYLE, r as DEFAULT_PLAYBACK_RATES, s as QUALITY_LABEL_MAP, t as DEFAULT_HEARTBEAT_INTERVAL, u as STORAGE_KEYS, v as useBookmarks, w as AnalyticsReporter, x as _default, y as usePlaybackControl, z as SubtitleTrack } from "./constants5.cjs";
2
- export { type AnalyticsEvent, type AnalyticsEventType, type AnalyticsReporter, type AntiCheatConfig, type Bookmark, _default as C_VideoPlayer, type Chapter, DEFAULT_HEARTBEAT_INTERVAL, DEFAULT_PLAYBACK_RATE, DEFAULT_PLAYBACK_RATES, DEFAULT_VOLUME, type IDefinition, type IPlayerOptions, KEYBOARD_SHORTCUTS, PROGRESS_THROTTLE_INTERVAL, type PlaybackRate, type PlayerInstance, type PlayerState, type ProgressData, type ProgressReporter, QUALITY_LABEL_MAP, type QualityDefinition, type QualityLevel, type QuizOption, type QuizType, SEEK_STEP, SOURCE_TYPE_MAP, STORAGE_KEYS, STORAGE_PREFIX, type SubtitleTrack, type ThumbnailConfig, VOLUME_STEP, type VideoPlayerEmits, type VideoPlayerExpose, type VideoPlayerProps, type VideoQuiz, type VideoSourceType, WATERMARK_DEFAULT_STYLE, XGPLAYER_EVENTS, useBookmarks, useChapters, usePlaybackControl, usePlayerCore, useProgressTracker, useSubtitle };
1
+ import { A as PlaybackRate, B as ThumbnailConfig, C as AnalyticsEventType, D as Chapter, E as Bookmark, F as QualityDefinition, G as VideoSourceAdapter, H as VideoPlayerExpose, I as QualityLevel, K as VideoSourceType, L as QuizOption, M as PlayerState, N as ProgressData, O as IDefinition, P as ProgressReporter, R as QuizType, S as AnalyticsEvent, T as AntiCheatConfig, U as VideoPlayerProps, V as VideoPlayerEmits, W as VideoQuiz, _ as useChapters, a as KEYBOARD_SHORTCUTS, b as usePlayerCore, c as SEEK_STEP, d as STORAGE_PREFIX, f as VOLUME_STEP, g as useSubtitle, h as useProgressTracker, i as DEFAULT_VOLUME, j as PlayerInstance, k as IPlayerOptions, l as SOURCE_TYPE_MAP, m as XGPLAYER_EVENTS, n as DEFAULT_PLAYBACK_RATE, o as PROGRESS_THROTTLE_INTERVAL, p as WATERMARK_DEFAULT_STYLE, r as DEFAULT_PLAYBACK_RATES, s as QUALITY_LABEL_MAP, t as DEFAULT_HEARTBEAT_INTERVAL, u as STORAGE_KEYS, v as useBookmarks, w as AnalyticsReporter, x as _default, y as usePlaybackControl, z as SubtitleTrack } from "./constants5.cjs";
2
+ export { type AnalyticsEvent, type AnalyticsEventType, type AnalyticsReporter, type AntiCheatConfig, type Bookmark, _default as C_VideoPlayer, type Chapter, DEFAULT_HEARTBEAT_INTERVAL, DEFAULT_PLAYBACK_RATE, DEFAULT_PLAYBACK_RATES, DEFAULT_VOLUME, type IDefinition, type IPlayerOptions, KEYBOARD_SHORTCUTS, PROGRESS_THROTTLE_INTERVAL, type PlaybackRate, type PlayerInstance, type PlayerState, type ProgressData, type ProgressReporter, QUALITY_LABEL_MAP, type QualityDefinition, type QualityLevel, type QuizOption, type QuizType, SEEK_STEP, SOURCE_TYPE_MAP, STORAGE_KEYS, STORAGE_PREFIX, type SubtitleTrack, type ThumbnailConfig, VOLUME_STEP, type VideoPlayerEmits, type VideoPlayerExpose, type VideoPlayerProps, type VideoQuiz, type VideoSourceAdapter, type VideoSourceType, WATERMARK_DEFAULT_STYLE, XGPLAYER_EVENTS, useBookmarks, useChapters, usePlaybackControl, usePlayerCore, useProgressTracker, useSubtitle };
@@ -1,2 +1,2 @@
1
- import { A as PlaybackRate, B as ThumbnailConfig, C as AnalyticsEventType, D as Chapter, E as Bookmark, F as QualityDefinition, G as VideoSourceType, H as VideoPlayerExpose, I as QualityLevel, L as QuizOption, M as PlayerState, N as ProgressData, O as IDefinition, P as ProgressReporter, R as QuizType, S as AnalyticsEvent, T as AntiCheatConfig, U as VideoPlayerProps, V as VideoPlayerEmits, W as VideoQuiz, _ as useChapters, a as KEYBOARD_SHORTCUTS, b as usePlayerCore, c as SEEK_STEP, d as STORAGE_PREFIX, f as VOLUME_STEP, g as useSubtitle, h as useProgressTracker, i as DEFAULT_VOLUME, j as PlayerInstance, k as IPlayerOptions, l as SOURCE_TYPE_MAP, m as XGPLAYER_EVENTS, n as DEFAULT_PLAYBACK_RATE, o as PROGRESS_THROTTLE_INTERVAL, p as WATERMARK_DEFAULT_STYLE, r as DEFAULT_PLAYBACK_RATES, s as QUALITY_LABEL_MAP, t as DEFAULT_HEARTBEAT_INTERVAL, u as STORAGE_KEYS, v as useBookmarks, w as AnalyticsReporter, x as _default, y as usePlaybackControl, z as SubtitleTrack } from "./constants5.js";
2
- export { type AnalyticsEvent, type AnalyticsEventType, type AnalyticsReporter, type AntiCheatConfig, type Bookmark, _default as C_VideoPlayer, type Chapter, DEFAULT_HEARTBEAT_INTERVAL, DEFAULT_PLAYBACK_RATE, DEFAULT_PLAYBACK_RATES, DEFAULT_VOLUME, type IDefinition, type IPlayerOptions, KEYBOARD_SHORTCUTS, PROGRESS_THROTTLE_INTERVAL, type PlaybackRate, type PlayerInstance, type PlayerState, type ProgressData, type ProgressReporter, QUALITY_LABEL_MAP, type QualityDefinition, type QualityLevel, type QuizOption, type QuizType, SEEK_STEP, SOURCE_TYPE_MAP, STORAGE_KEYS, STORAGE_PREFIX, type SubtitleTrack, type ThumbnailConfig, VOLUME_STEP, type VideoPlayerEmits, type VideoPlayerExpose, type VideoPlayerProps, type VideoQuiz, type VideoSourceType, WATERMARK_DEFAULT_STYLE, XGPLAYER_EVENTS, useBookmarks, useChapters, usePlaybackControl, usePlayerCore, useProgressTracker, useSubtitle };
1
+ import { A as PlaybackRate, B as ThumbnailConfig, C as AnalyticsEventType, D as Chapter, E as Bookmark, F as QualityDefinition, G as VideoSourceAdapter, H as VideoPlayerExpose, I as QualityLevel, K as VideoSourceType, L as QuizOption, M as PlayerState, N as ProgressData, O as IDefinition, P as ProgressReporter, R as QuizType, S as AnalyticsEvent, T as AntiCheatConfig, U as VideoPlayerProps, V as VideoPlayerEmits, W as VideoQuiz, _ as useChapters, a as KEYBOARD_SHORTCUTS, b as usePlayerCore, c as SEEK_STEP, d as STORAGE_PREFIX, f as VOLUME_STEP, g as useSubtitle, h as useProgressTracker, i as DEFAULT_VOLUME, j as PlayerInstance, k as IPlayerOptions, l as SOURCE_TYPE_MAP, m as XGPLAYER_EVENTS, n as DEFAULT_PLAYBACK_RATE, o as PROGRESS_THROTTLE_INTERVAL, p as WATERMARK_DEFAULT_STYLE, r as DEFAULT_PLAYBACK_RATES, s as QUALITY_LABEL_MAP, t as DEFAULT_HEARTBEAT_INTERVAL, u as STORAGE_KEYS, v as useBookmarks, w as AnalyticsReporter, x as _default, y as usePlaybackControl, z as SubtitleTrack } from "./constants5.js";
2
+ export { type AnalyticsEvent, type AnalyticsEventType, type AnalyticsReporter, type AntiCheatConfig, type Bookmark, _default as C_VideoPlayer, type Chapter, DEFAULT_HEARTBEAT_INTERVAL, DEFAULT_PLAYBACK_RATE, DEFAULT_PLAYBACK_RATES, DEFAULT_VOLUME, type IDefinition, type IPlayerOptions, KEYBOARD_SHORTCUTS, PROGRESS_THROTTLE_INTERVAL, type PlaybackRate, type PlayerInstance, type PlayerState, type ProgressData, type ProgressReporter, QUALITY_LABEL_MAP, type QualityDefinition, type QualityLevel, type QuizOption, type QuizType, SEEK_STEP, SOURCE_TYPE_MAP, STORAGE_KEYS, STORAGE_PREFIX, type SubtitleTrack, type ThumbnailConfig, VOLUME_STEP, type VideoPlayerEmits, type VideoPlayerExpose, type VideoPlayerProps, type VideoQuiz, type VideoSourceAdapter, type VideoSourceType, WATERMARK_DEFAULT_STYLE, XGPLAYER_EVENTS, useBookmarks, useChapters, usePlaybackControl, usePlayerCore, useProgressTracker, useSubtitle };