djm-ui 0.0.0-stage → 0.67.2

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 (242) hide show
  1. package/CHANGELOG.md +715 -0
  2. package/LICENSE +21 -0
  3. package/README.md +183 -2
  4. package/dist/djm-ui.cjs +15521 -0
  5. package/dist/djm-ui.cjs.map +7 -0
  6. package/dist/djm-ui.css +11817 -0
  7. package/dist/djm-ui.esm.js +15371 -0
  8. package/dist/djm-ui.esm.js.map +7 -0
  9. package/dist/djm-ui.esm.min.js +4059 -0
  10. package/dist/djm-ui.min.cjs +4059 -0
  11. package/dist/djm-ui.min.css +2 -0
  12. package/dist/djm-ui.umd.js +15331 -0
  13. package/dist/djm-ui.umd.min.js +4059 -0
  14. package/package.json +90 -4
  15. package/src/components/affix/index.js +98 -0
  16. package/src/components/alert/index.js +43 -0
  17. package/src/components/anchor/index.js +107 -0
  18. package/src/components/approval-flow/index.js +96 -0
  19. package/src/components/attachment-list/index.js +155 -0
  20. package/src/components/autocomplete/index.js +187 -0
  21. package/src/components/avatar/group.js +22 -0
  22. package/src/components/avatar/index.js +47 -0
  23. package/src/components/backtop/index.js +82 -0
  24. package/src/components/badge/index.js +43 -0
  25. package/src/components/batch-bar/index.js +52 -0
  26. package/src/components/breadcrumb/index.js +45 -0
  27. package/src/components/button/index.js +45 -0
  28. package/src/components/calendar/index.js +180 -0
  29. package/src/components/card/index.js +24 -0
  30. package/src/components/carousel/index.js +136 -0
  31. package/src/components/cascader/index.js +157 -0
  32. package/src/components/chat/index.js +157 -0
  33. package/src/components/checkbox/index.js +109 -0
  34. package/src/components/collapse/index.js +55 -0
  35. package/src/components/color-picker/index.js +133 -0
  36. package/src/components/command-palette/index.js +182 -0
  37. package/src/components/comment/index.js +149 -0
  38. package/src/components/config-provider/index.js +41 -0
  39. package/src/components/confirm-dialog/index.js +66 -0
  40. package/src/components/context-menu/index.js +148 -0
  41. package/src/components/date-picker/index.js +448 -0
  42. package/src/components/date-time-picker/index.js +376 -0
  43. package/src/components/descriptions/index.js +47 -0
  44. package/src/components/diff/index.js +172 -0
  45. package/src/components/divider/index.js +25 -0
  46. package/src/components/drawer/index.js +131 -0
  47. package/src/components/dropdown/index.js +236 -0
  48. package/src/components/editable-table/index.js +264 -0
  49. package/src/components/empty/index.js +31 -0
  50. package/src/components/field-list/index.js +221 -0
  51. package/src/components/filter-tags/index.js +33 -0
  52. package/src/components/float-button/index.js +97 -0
  53. package/src/components/floating-window/index.js +171 -0
  54. package/src/components/form/index.js +130 -0
  55. package/src/components/form-item/index.js +71 -0
  56. package/src/components/gantt/index.js +192 -0
  57. package/src/components/grid/col.js +21 -0
  58. package/src/components/grid/row.js +16 -0
  59. package/src/components/icon/index.js +87 -0
  60. package/src/components/image/index.js +110 -0
  61. package/src/components/import-wizard/index.js +306 -0
  62. package/src/components/input/index.js +117 -0
  63. package/src/components/input-number/index.js +106 -0
  64. package/src/components/input-tag/index.js +117 -0
  65. package/src/components/kanban/index.js +223 -0
  66. package/src/components/layout/content.js +5 -0
  67. package/src/components/layout/footer.js +5 -0
  68. package/src/components/layout/header.js +5 -0
  69. package/src/components/layout/index.js +15 -0
  70. package/src/components/layout/sider.js +13 -0
  71. package/src/components/list/index.js +31 -0
  72. package/src/components/media-picker/index.js +206 -0
  73. package/src/components/mentions/index.js +193 -0
  74. package/src/components/menu/index.js +248 -0
  75. package/src/components/message/index.js +56 -0
  76. package/src/components/modal/index.js +132 -0
  77. package/src/components/notification/index.js +140 -0
  78. package/src/components/org-chart/index.js +190 -0
  79. package/src/components/org-picker/index.js +414 -0
  80. package/src/components/page-header/index.js +24 -0
  81. package/src/components/page-tabs/index.js +80 -0
  82. package/src/components/pagination/index.js +124 -0
  83. package/src/components/password/index.js +92 -0
  84. package/src/components/popconfirm/index.js +161 -0
  85. package/src/components/popover/index.js +142 -0
  86. package/src/components/print/index.js +101 -0
  87. package/src/components/progress/index.js +37 -0
  88. package/src/components/qrcode/index.js +75 -0
  89. package/src/components/query-filter/index.js +171 -0
  90. package/src/components/radio/index.js +83 -0
  91. package/src/components/rate/index.js +84 -0
  92. package/src/components/result/index.js +52 -0
  93. package/src/components/rich-editor/index.js +235 -0
  94. package/src/components/schedule/index.js +287 -0
  95. package/src/components/schema-form/index.js +222 -0
  96. package/src/components/segmented/index.js +40 -0
  97. package/src/components/select/index.js +614 -0
  98. package/src/components/signature/index.js +243 -0
  99. package/src/components/skeleton/index.js +35 -0
  100. package/src/components/slider/index.js +166 -0
  101. package/src/components/space/index.js +32 -0
  102. package/src/components/spin/index.js +42 -0
  103. package/src/components/splitter/index.js +110 -0
  104. package/src/components/statistic/index.js +41 -0
  105. package/src/components/status/index.js +31 -0
  106. package/src/components/steps/index.js +49 -0
  107. package/src/components/switch/index.js +40 -0
  108. package/src/components/table/index.js +847 -0
  109. package/src/components/tabs/index.js +136 -0
  110. package/src/components/tag/index.js +56 -0
  111. package/src/components/time-picker/index.js +165 -0
  112. package/src/components/timeline/index.js +24 -0
  113. package/src/components/tooltip/index.js +129 -0
  114. package/src/components/tour/index.js +144 -0
  115. package/src/components/transfer/index.js +145 -0
  116. package/src/components/tree/index.js +485 -0
  117. package/src/components/tree-select/index.js +406 -0
  118. package/src/components/tree-table/index.js +318 -0
  119. package/src/components/upload/index.js +407 -0
  120. package/src/components/virtual-list/index.js +178 -0
  121. package/src/components/watermark/index.js +82 -0
  122. package/src/index.js +356 -0
  123. package/src/locale/en-US.js +254 -0
  124. package/src/locale/index.js +32 -0
  125. package/src/locale/zh-CN.js +254 -0
  126. package/src/styles/base.css +101 -0
  127. package/src/styles/components/account.css +230 -0
  128. package/src/styles/components/affix.css +11 -0
  129. package/src/styles/components/anchor.css +56 -0
  130. package/src/styles/components/approval-flow.css +196 -0
  131. package/src/styles/components/attachment-list.css +172 -0
  132. package/src/styles/components/autocomplete.css +42 -0
  133. package/src/styles/components/avatar.css +42 -0
  134. package/src/styles/components/backtop.css +33 -0
  135. package/src/styles/components/badge.css +72 -0
  136. package/src/styles/components/batch-bar.css +51 -0
  137. package/src/styles/components/breadcrumb.css +74 -0
  138. package/src/styles/components/button.css +237 -0
  139. package/src/styles/components/calendar.css +99 -0
  140. package/src/styles/components/card.css +74 -0
  141. package/src/styles/components/carousel.css +119 -0
  142. package/src/styles/components/cascader.css +118 -0
  143. package/src/styles/components/charts.css +173 -0
  144. package/src/styles/components/chat.css +162 -0
  145. package/src/styles/components/color-picker.css +93 -0
  146. package/src/styles/components/command-palette.css +97 -0
  147. package/src/styles/components/comment.css +164 -0
  148. package/src/styles/components/composite.css +353 -0
  149. package/src/styles/components/console.css +288 -0
  150. package/src/styles/components/context-menu.css +98 -0
  151. package/src/styles/components/dashboard.css +245 -0
  152. package/src/styles/components/date-picker.css +258 -0
  153. package/src/styles/components/date-time-picker.css +239 -0
  154. package/src/styles/components/demo.css +432 -0
  155. package/src/styles/components/descriptions.css +45 -0
  156. package/src/styles/components/diff.css +178 -0
  157. package/src/styles/components/divider.css +32 -0
  158. package/src/styles/components/drawer.css +82 -0
  159. package/src/styles/components/dropdown.css +97 -0
  160. package/src/styles/components/feedback.css +270 -0
  161. package/src/styles/components/field-list.css +132 -0
  162. package/src/styles/components/filter-tags.css +60 -0
  163. package/src/styles/components/float-button.css +80 -0
  164. package/src/styles/components/form.css +688 -0
  165. package/src/styles/components/frame.css +193 -0
  166. package/src/styles/components/gantt.css +241 -0
  167. package/src/styles/components/grid.css +161 -0
  168. package/src/styles/components/image.css +107 -0
  169. package/src/styles/components/import-wizard.css +262 -0
  170. package/src/styles/components/input-number.css +58 -0
  171. package/src/styles/components/input-tag.css +73 -0
  172. package/src/styles/components/kanban.css +181 -0
  173. package/src/styles/components/layout-container.css +59 -0
  174. package/src/styles/components/layout.css +765 -0
  175. package/src/styles/components/list.css +73 -0
  176. package/src/styles/components/lookup.css +142 -0
  177. package/src/styles/components/media-picker.css +154 -0
  178. package/src/styles/components/mentions.css +50 -0
  179. package/src/styles/components/menu.css +200 -0
  180. package/src/styles/components/modal.css +97 -0
  181. package/src/styles/components/motion.css +62 -0
  182. package/src/styles/components/notification.css +179 -0
  183. package/src/styles/components/org-chart.css +131 -0
  184. package/src/styles/components/org-picker.css +341 -0
  185. package/src/styles/components/overlay.css +234 -0
  186. package/src/styles/components/page-tabs.css +101 -0
  187. package/src/styles/components/pagination.css +113 -0
  188. package/src/styles/components/panel.css +99 -0
  189. package/src/styles/components/password.css +74 -0
  190. package/src/styles/components/permission.css +118 -0
  191. package/src/styles/components/placeholder.css +90 -0
  192. package/src/styles/components/popconfirm.css +51 -0
  193. package/src/styles/components/popover.css +134 -0
  194. package/src/styles/components/print.css +20 -0
  195. package/src/styles/components/qrcode.css +23 -0
  196. package/src/styles/components/query-filter.css +82 -0
  197. package/src/styles/components/rate.css +41 -0
  198. package/src/styles/components/responsive.css +599 -0
  199. package/src/styles/components/result.css +62 -0
  200. package/src/styles/components/rich-editor.css +216 -0
  201. package/src/styles/components/schedule.css +243 -0
  202. package/src/styles/components/schema-form.css +18 -0
  203. package/src/styles/components/signature.css +46 -0
  204. package/src/styles/components/skin.css +108 -0
  205. package/src/styles/components/slider.css +77 -0
  206. package/src/styles/components/sort.css +93 -0
  207. package/src/styles/components/space.css +35 -0
  208. package/src/styles/components/spin.css +44 -0
  209. package/src/styles/components/splitter.css +66 -0
  210. package/src/styles/components/statistic.css +53 -0
  211. package/src/styles/components/steps.css +123 -0
  212. package/src/styles/components/table.css +852 -0
  213. package/src/styles/components/tabs.css +192 -0
  214. package/src/styles/components/tag.css +74 -0
  215. package/src/styles/components/template.css +409 -0
  216. package/src/styles/components/time-picker.css +100 -0
  217. package/src/styles/components/timeline.css +78 -0
  218. package/src/styles/components/toast.css +52 -0
  219. package/src/styles/components/tooltip.css +60 -0
  220. package/src/styles/components/tour.css +86 -0
  221. package/src/styles/components/transfer.css +104 -0
  222. package/src/styles/components/tree-table.css +78 -0
  223. package/src/styles/components/tree.css +568 -0
  224. package/src/styles/components/upload.css +274 -0
  225. package/src/styles/components/virtual-list.css +56 -0
  226. package/src/styles/components/watermark.css +13 -0
  227. package/src/styles/index.css +109 -0
  228. package/src/styles/theme-dark.css +78 -0
  229. package/src/styles/tokens.css +110 -0
  230. package/src/theme/index.js +186 -0
  231. package/src/utils/export.js +14 -0
  232. package/src/utils/focus-trap.js +45 -0
  233. package/src/utils/panel.js +73 -0
  234. package/src/utils/permission.js +52 -0
  235. package/src/utils/row-move.js +26 -0
  236. package/src/utils/sanitize-html.js +92 -0
  237. package/src/utils/scroll-lock.js +39 -0
  238. package/src/utils/text-diff.js +62 -0
  239. package/src/utils/tree-move.js +51 -0
  240. package/types/index.d.ts +1714 -0
  241. package/types/usage-check.ts +50 -0
  242. package/vendor/qrcode.esm.js +8 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../vendor/qrcode.esm.js", "../src/index.js", "../src/components/icon/index.js", "../src/components/button/index.js", "../src/components/input/index.js", "../src/components/select/index.js", "../src/locale/index.js", "../src/locale/zh-CN.js", "../src/locale/en-US.js", "../src/utils/panel.js", "../src/components/checkbox/index.js", "../src/components/radio/index.js", "../src/components/switch/index.js", "../src/components/form/index.js", "../src/components/form-item/index.js", "../src/components/empty/index.js", "../src/components/table/index.js", "../src/components/page-header/index.js", "../src/components/breadcrumb/index.js", "../src/components/avatar/index.js", "../src/components/avatar/group.js", "../src/components/badge/index.js", "../src/components/popover/index.js", "../src/components/menu/index.js", "../src/components/tag/index.js", "../src/components/card/index.js", "../src/components/progress/index.js", "../src/components/skeleton/index.js", "../src/components/result/index.js", "../src/components/timeline/index.js", "../src/components/collapse/index.js", "../src/components/statistic/index.js", "../src/components/steps/index.js", "../src/components/input-number/index.js", "../src/components/rate/index.js", "../src/components/slider/index.js", "../src/components/time-picker/index.js", "../src/components/color-picker/index.js", "../src/components/cascader/index.js", "../src/components/transfer/index.js", "../src/components/alert/index.js", "../src/components/spin/index.js", "../src/components/popconfirm/index.js", "../src/components/anchor/index.js", "../src/components/backtop/index.js", "../src/components/divider/index.js", "../src/components/space/index.js", "../src/components/affix/index.js", "../src/components/segmented/index.js", "../src/components/image/index.js", "../src/utils/scroll-lock.js", "../src/components/watermark/index.js", "../src/theme/index.js", "../src/components/autocomplete/index.js", "../src/components/splitter/index.js", "../src/components/carousel/index.js", "../src/components/tour/index.js", "../src/components/calendar/index.js", "../src/components/float-button/index.js", "../src/components/mentions/index.js", "../src/components/grid/row.js", "../src/components/grid/col.js", "../src/components/layout/index.js", "../src/components/layout/header.js", "../src/components/layout/sider.js", "../src/components/layout/content.js", "../src/components/layout/footer.js", "../src/components/list/index.js", "../src/components/input-tag/index.js", "../src/components/password/index.js", "../src/components/command-palette/index.js", "../src/utils/focus-trap.js", "../src/components/qrcode/index.js", "../src/components/status/index.js", "../src/components/tooltip/index.js", "../src/components/dropdown/index.js", "../src/components/drawer/index.js", "../src/components/modal/index.js", "../src/components/confirm-dialog/index.js", "../src/components/pagination/index.js", "../src/components/tabs/index.js", "../src/components/context-menu/index.js", "../src/components/date-picker/index.js", "../src/components/tree-select/index.js", "../src/components/rich-editor/index.js", "../src/utils/sanitize-html.js", "../src/components/floating-window/index.js", "../src/components/upload/index.js", "../src/components/tree/index.js", "../src/components/editable-table/index.js", "../src/components/descriptions/index.js", "../src/components/message/index.js", "../src/components/org-picker/index.js", "../src/components/schema-form/index.js", "../src/components/approval-flow/index.js", "../src/components/query-filter/index.js", "../src/components/filter-tags/index.js", "../src/components/media-picker/index.js", "../src/components/kanban/index.js", "../src/components/attachment-list/index.js", "../src/components/notification/index.js", "../src/components/config-provider/index.js", "../src/components/date-time-picker/index.js", "../src/components/virtual-list/index.js", "../src/components/batch-bar/index.js", "../src/components/import-wizard/index.js", "../src/components/diff/index.js", "../src/utils/text-diff.js", "../src/components/tree-table/index.js", "../src/components/schedule/index.js", "../src/components/comment/index.js", "../src/components/signature/index.js", "../src/components/print/index.js", "../src/components/gantt/index.js", "../src/components/field-list/index.js", "../src/components/chat/index.js", "../src/components/org-chart/index.js", "../src/components/page-tabs/index.js", "../src/utils/tree-move.js", "../src/utils/row-move.js", "../src/utils/permission.js"],
4
+ "sourcesContent": ["var g=(n,t)=>()=>{try{return t||n((t={exports:{}}).exports,t),t.exports}catch(e){throw t=0,e}};var _t=g((Sn,Lt)=>{Lt.exports=function(){return typeof Promise==\"function\"&&Promise.prototype&&Promise.prototype.then}});var I=g(P=>{var st,Le=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];P.getSymbolSize=function(t){if(!t)throw new Error('\"version\" cannot be null or undefined');if(t<1||t>40)throw new Error('\"version\" should be in range from 1 to 40');return t*4+17};P.getSymbolTotalCodewords=function(t){return Le[t]};P.getBCHDigit=function(n){let t=0;for(;n!==0;)t++,n>>>=1;return t};P.setToSJISFunction=function(t){if(typeof t!=\"function\")throw new Error('\"toSJISFunc\" is not a valid function.');st=t};P.isKanjiModeEnabled=function(){return typeof st<\"u\"};P.toSJIS=function(t){return st(t)}});var j=g(m=>{m.L={bit:1};m.M={bit:0};m.Q={bit:3};m.H={bit:2};function _e(n){if(typeof n!=\"string\")throw new Error(\"Param is not a string\");switch(n.toLowerCase()){case\"l\":case\"low\":return m.L;case\"m\":case\"medium\":return m.M;case\"q\":case\"quartile\":return m.Q;case\"h\":case\"high\":return m.H;default:throw new Error(\"Unknown EC Level: \"+n)}}m.isValid=function(t){return t&&typeof t.bit<\"u\"&&t.bit>=0&&t.bit<4};m.from=function(t,e){if(m.isValid(t))return t;try{return _e(t)}catch{return e}}});var qt=g((Rn,Ut)=>{function xt(){this.buffer=[],this.length=0}xt.prototype={get:function(n){let t=Math.floor(n/8);return(this.buffer[t]>>>7-n%8&1)===1},put:function(n,t){for(let e=0;e<t;e++)this.putBit((n>>>t-e-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(n){let t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),n&&(this.buffer[t]|=128>>>this.length%8),this.length++}};Ut.exports=xt});var Ft=g((Ln,Dt)=>{function k(n){if(!n||n<1)throw new Error(\"BitMatrix size must be defined and greater than 0\");this.size=n,this.data=new Uint8Array(n*n),this.reservedBit=new Uint8Array(n*n)}k.prototype.set=function(n,t,e,r){let o=n*this.size+t;this.data[o]=e,r&&(this.reservedBit[o]=!0)};k.prototype.get=function(n,t){return this.data[n*this.size+t]};k.prototype.xor=function(n,t,e){this.data[n*this.size+t]^=e};k.prototype.isReserved=function(n,t){return this.reservedBit[n*this.size+t]};Dt.exports=k});var kt=g(G=>{var xe=I().getSymbolSize;G.getRowColCoords=function(t){if(t===1)return[];let e=Math.floor(t/7)+2,r=xe(t),o=r===145?26:Math.ceil((r-13)/(2*e-2))*2,i=[r-7];for(let s=1;s<e-1;s++)i[s]=i[s-1]-o;return i.push(6),i.reverse()};G.getPositions=function(t){let e=[],r=G.getRowColCoords(t),o=r.length;for(let i=0;i<o;i++)for(let s=0;s<o;s++)i===0&&s===0||i===0&&s===o-1||i===o-1&&s===0||e.push([r[i],r[s]]);return e}});var Ht=g(Vt=>{var Ue=I().getSymbolSize,zt=7;Vt.getPositions=function(t){let e=Ue(t);return[[0,0],[e-zt,0],[0,e-zt]]}});var Kt=g(d=>{d.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var b={N1:3,N2:3,N3:40,N4:10};d.isValid=function(t){return t!=null&&t!==\"\"&&!isNaN(t)&&t>=0&&t<=7};d.from=function(t){return d.isValid(t)?parseInt(t,10):void 0};d.getPenaltyN1=function(t){let e=t.size,r=0,o=0,i=0,s=null,u=null;for(let c=0;c<e;c++){o=i=0,s=u=null;for(let l=0;l<e;l++){let a=t.get(c,l);a===s?o++:(o>=5&&(r+=b.N1+(o-5)),s=a,o=1),a=t.get(l,c),a===u?i++:(i>=5&&(r+=b.N1+(i-5)),u=a,i=1)}o>=5&&(r+=b.N1+(o-5)),i>=5&&(r+=b.N1+(i-5))}return r};d.getPenaltyN2=function(t){let e=t.size,r=0;for(let o=0;o<e-1;o++)for(let i=0;i<e-1;i++){let s=t.get(o,i)+t.get(o,i+1)+t.get(o+1,i)+t.get(o+1,i+1);(s===4||s===0)&&r++}return r*b.N2};d.getPenaltyN3=function(t){let e=t.size,r=0,o=0,i=0;for(let s=0;s<e;s++){o=i=0;for(let u=0;u<e;u++)o=o<<1&2047|t.get(s,u),u>=10&&(o===1488||o===93)&&r++,i=i<<1&2047|t.get(u,s),u>=10&&(i===1488||i===93)&&r++}return r*b.N3};d.getPenaltyN4=function(t){let e=0,r=t.data.length;for(let i=0;i<r;i++)e+=t.data[i];return Math.abs(Math.ceil(e*100/r/5)-10)*b.N4};function qe(n,t,e){switch(n){case d.Patterns.PATTERN000:return(t+e)%2===0;case d.Patterns.PATTERN001:return t%2===0;case d.Patterns.PATTERN010:return e%3===0;case d.Patterns.PATTERN011:return(t+e)%3===0;case d.Patterns.PATTERN100:return(Math.floor(t/2)+Math.floor(e/3))%2===0;case d.Patterns.PATTERN101:return t*e%2+t*e%3===0;case d.Patterns.PATTERN110:return(t*e%2+t*e%3)%2===0;case d.Patterns.PATTERN111:return(t*e%3+(t+e)%2)%2===0;default:throw new Error(\"bad maskPattern:\"+n)}}d.applyMask=function(t,e){let r=e.size;for(let o=0;o<r;o++)for(let i=0;i<r;i++)e.isReserved(i,o)||e.xor(i,o,qe(t,i,o))};d.getBestMask=function(t,e){let r=Object.keys(d.Patterns).length,o=0,i=1/0;for(let s=0;s<r;s++){e(s),d.applyMask(s,t);let u=d.getPenaltyN1(t)+d.getPenaltyN2(t)+d.getPenaltyN3(t)+d.getPenaltyN4(t);d.applyMask(s,t),u<i&&(i=u,o=s)}return o}});var ct=g(ut=>{var N=j(),Q=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],$=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];ut.getBlocksCount=function(t,e){switch(e){case N.L:return Q[(t-1)*4+0];case N.M:return Q[(t-1)*4+1];case N.Q:return Q[(t-1)*4+2];case N.H:return Q[(t-1)*4+3];default:return}};ut.getTotalCodewordsCount=function(t,e){switch(e){case N.L:return $[(t-1)*4+0];case N.M:return $[(t-1)*4+1];case N.Q:return $[(t-1)*4+2];case N.H:return $[(t-1)*4+3];default:return}}});var Jt=g(Z=>{var z=new Uint8Array(512),W=new Uint8Array(256);(function(){let t=1;for(let e=0;e<255;e++)z[e]=t,W[t]=e,t<<=1,t&256&&(t^=285);for(let e=255;e<512;e++)z[e]=z[e-255]})();Z.log=function(t){if(t<1)throw new Error(\"log(\"+t+\")\");return W[t]};Z.exp=function(t){return z[t]};Z.mul=function(t,e){return t===0||e===0?0:z[W[t]+W[e]]}});var Yt=g(V=>{var lt=Jt();V.mul=function(t,e){let r=new Uint8Array(t.length+e.length-1);for(let o=0;o<t.length;o++)for(let i=0;i<e.length;i++)r[o+i]^=lt.mul(t[o],e[i]);return r};V.mod=function(t,e){let r=new Uint8Array(t);for(;r.length-e.length>=0;){let o=r[0];for(let s=0;s<e.length;s++)r[s]^=lt.mul(e[s],o);let i=0;for(;i<r.length&&r[i]===0;)i++;r=r.slice(i)}return r};V.generateECPolynomial=function(t){let e=new Uint8Array([1]);for(let r=0;r<t;r++)e=V.mul(e,new Uint8Array([1,lt.exp(r)]));return e}});var Gt=g((kn,jt)=>{var Ot=Yt();function at(n){this.genPoly=void 0,this.degree=n,this.degree&&this.initialize(this.degree)}at.prototype.initialize=function(t){this.degree=t,this.genPoly=Ot.generateECPolynomial(this.degree)};at.prototype.encode=function(t){if(!this.genPoly)throw new Error(\"Encoder not initialized\");let e=new Uint8Array(t.length+this.degree);e.set(t);let r=Ot.mod(e,this.genPoly),o=this.degree-r.length;if(o>0){let i=new Uint8Array(this.degree);return i.set(r,o),i}return r};jt.exports=at});var ft=g(Qt=>{Qt.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40}});var gt=g(B=>{var $t=\"[0-9]+\",De=\"[A-Z $%*+\\\\-./:]+\",H=\"(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+\";H=H.replace(/u/g,\"\\\\u\");var Fe=\"(?:(?![A-Z0-9 $%*+\\\\-./:]|\"+H+`)(?:.|[\\r\n]))+`;B.KANJI=new RegExp(H,\"g\");B.BYTE_KANJI=new RegExp(\"[^A-Z0-9 $%*+\\\\-./:]+\",\"g\");B.BYTE=new RegExp(Fe,\"g\");B.NUMERIC=new RegExp($t,\"g\");B.ALPHANUMERIC=new RegExp(De,\"g\");var ke=new RegExp(\"^\"+H+\"$\"),ze=new RegExp(\"^\"+$t+\"$\"),Ve=new RegExp(\"^[A-Z0-9 $%*+\\\\-./:]+$\");B.testKanji=function(t){return ke.test(t)};B.testNumeric=function(t){return ze.test(t)};B.testAlphanumeric=function(t){return Ve.test(t)}});var M=g(p=>{var He=ft(),dt=gt();p.NUMERIC={id:\"Numeric\",bit:1,ccBits:[10,12,14]};p.ALPHANUMERIC={id:\"Alphanumeric\",bit:2,ccBits:[9,11,13]};p.BYTE={id:\"Byte\",bit:4,ccBits:[8,16,16]};p.KANJI={id:\"Kanji\",bit:8,ccBits:[8,10,12]};p.MIXED={bit:-1};p.getCharCountIndicator=function(t,e){if(!t.ccBits)throw new Error(\"Invalid mode: \"+t);if(!He.isValid(e))throw new Error(\"Invalid version: \"+e);return e>=1&&e<10?t.ccBits[0]:e<27?t.ccBits[1]:t.ccBits[2]};p.getBestModeForData=function(t){return dt.testNumeric(t)?p.NUMERIC:dt.testAlphanumeric(t)?p.ALPHANUMERIC:dt.testKanji(t)?p.KANJI:p.BYTE};p.toString=function(t){if(t&&t.id)return t.id;throw new Error(\"Invalid mode\")};p.isValid=function(t){return t&&t.bit&&t.ccBits};function Ke(n){if(typeof n!=\"string\")throw new Error(\"Param is not a string\");switch(n.toLowerCase()){case\"numeric\":return p.NUMERIC;case\"alphanumeric\":return p.ALPHANUMERIC;case\"kanji\":return p.KANJI;case\"byte\":return p.BYTE;default:throw new Error(\"Unknown mode: \"+n)}}p.from=function(t,e){if(p.isValid(t))return t;try{return Ke(t)}catch{return e}}});var te=g(R=>{var X=I(),Je=ct(),Wt=j(),S=M(),ht=ft(),Xt=7973,Zt=X.getBCHDigit(Xt);function Ye(n,t,e){for(let r=1;r<=40;r++)if(t<=R.getCapacity(r,e,n))return r}function vt(n,t){return S.getCharCountIndicator(n,t)+4}function Oe(n,t){let e=0;return n.forEach(function(r){let o=vt(r.mode,t);e+=o+r.getBitsLength()}),e}function je(n,t){for(let e=1;e<=40;e++)if(Oe(n,e)<=R.getCapacity(e,t,S.MIXED))return e}R.from=function(t,e){return ht.isValid(t)?parseInt(t,10):e};R.getCapacity=function(t,e,r){if(!ht.isValid(t))throw new Error(\"Invalid QR Code version\");typeof r>\"u\"&&(r=S.BYTE);let o=X.getSymbolTotalCodewords(t),i=Je.getTotalCodewordsCount(t,e),s=(o-i)*8;if(r===S.MIXED)return s;let u=s-vt(r,t);switch(r){case S.NUMERIC:return Math.floor(u/10*3);case S.ALPHANUMERIC:return Math.floor(u/11*2);case S.KANJI:return Math.floor(u/13);case S.BYTE:default:return Math.floor(u/8)}};R.getBestVersionForData=function(t,e){let r,o=Wt.from(e,Wt.M);if(Array.isArray(t)){if(t.length>1)return je(t,o);if(t.length===0)return 1;r=t[0]}else r=t;return Ye(r.mode,r.getLength(),o)};R.getEncodedBits=function(t){if(!ht.isValid(t)||t<7)throw new Error(\"Invalid QR Code version\");let e=t<<12;for(;X.getBCHDigit(e)-Zt>=0;)e^=Xt<<X.getBCHDigit(e)-Zt;return t<<12|e}});var oe=g(re=>{var pt=I(),ne=1335,Ge=21522,ee=pt.getBCHDigit(ne);re.getEncodedBits=function(t,e){let r=t.bit<<3|e,o=r<<10;for(;pt.getBCHDigit(o)-ee>=0;)o^=ne<<pt.getBCHDigit(o)-ee;return(r<<10|o)^Ge}});var se=g((Yn,ie)=>{var Qe=M();function x(n){this.mode=Qe.NUMERIC,this.data=n.toString()}x.getBitsLength=function(t){return 10*Math.floor(t/3)+(t%3?t%3*3+1:0)};x.prototype.getLength=function(){return this.data.length};x.prototype.getBitsLength=function(){return x.getBitsLength(this.data.length)};x.prototype.write=function(t){let e,r,o;for(e=0;e+3<=this.data.length;e+=3)r=this.data.substr(e,3),o=parseInt(r,10),t.put(o,10);let i=this.data.length-e;i>0&&(r=this.data.substr(e),o=parseInt(r,10),t.put(o,i*3+1))};ie.exports=x});var ce=g((On,ue)=>{var $e=M(),wt=[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\" \",\"$\",\"%\",\"*\",\"+\",\"-\",\".\",\"/\",\":\"];function U(n){this.mode=$e.ALPHANUMERIC,this.data=n}U.getBitsLength=function(t){return 11*Math.floor(t/2)+6*(t%2)};U.prototype.getLength=function(){return this.data.length};U.prototype.getBitsLength=function(){return U.getBitsLength(this.data.length)};U.prototype.write=function(t){let e;for(e=0;e+2<=this.data.length;e+=2){let r=wt.indexOf(this.data[e])*45;r+=wt.indexOf(this.data[e+1]),t.put(r,11)}this.data.length%2&&t.put(wt.indexOf(this.data[e]),6)};ue.exports=U});var ae=g((jn,le)=>{var We=M();function q(n){this.mode=We.BYTE,typeof n==\"string\"?this.data=new TextEncoder().encode(n):this.data=new Uint8Array(n)}q.getBitsLength=function(t){return t*8};q.prototype.getLength=function(){return this.data.length};q.prototype.getBitsLength=function(){return q.getBitsLength(this.data.length)};q.prototype.write=function(n){for(let t=0,e=this.data.length;t<e;t++)n.put(this.data[t],8)};le.exports=q});var ge=g((Gn,fe)=>{var Ze=M(),Xe=I();function D(n){this.mode=Ze.KANJI,this.data=n}D.getBitsLength=function(t){return t*13};D.prototype.getLength=function(){return this.data.length};D.prototype.getBitsLength=function(){return D.getBitsLength(this.data.length)};D.prototype.write=function(n){let t;for(t=0;t<this.data.length;t++){let e=Xe.toSJIS(this.data[t]);if(e>=33088&&e<=40956)e-=33088;else if(e>=57408&&e<=60351)e-=49472;else throw new Error(\"Invalid SJIS character: \"+this.data[t]+`\nMake sure your charset is UTF-8`);e=(e>>>8&255)*192+(e&255),n.put(e,13)}};fe.exports=D});var de=g((Qn,mt)=>{\"use strict\";var K={single_source_shortest_paths:function(n,t,e){var r={},o={};o[t]=0;var i=K.PriorityQueue.make();i.push(t,0);for(var s,u,c,l,a,w,h,y,A;!i.empty();){s=i.pop(),u=s.value,l=s.cost,a=n[u]||{};for(c in a)a.hasOwnProperty(c)&&(w=a[c],h=l+w,y=o[c],A=typeof o[c]>\"u\",(A||y>h)&&(o[c]=h,i.push(c,h),r[c]=u))}if(typeof e<\"u\"&&typeof o[e]>\"u\"){var T=[\"Could not find a path from \",t,\" to \",e,\".\"].join(\"\");throw new Error(T)}return r},extract_shortest_path_from_predecessor_list:function(n,t){for(var e=[],r=t,o;r;)e.push(r),o=n[r],r=n[r];return e.reverse(),e},find_path:function(n,t,e){var r=K.single_source_shortest_paths(n,t,e);return K.extract_shortest_path_from_predecessor_list(r,e)},PriorityQueue:{make:function(n){var t=K.PriorityQueue,e={},r;n=n||{};for(r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);return e.queue=[],e.sorter=n.sorter||t.default_sorter,e},default_sorter:function(n,t){return n.cost-t.cost},push:function(n,t){var e={value:n,cost:t};this.queue.push(e),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};typeof mt<\"u\"&&(mt.exports=K)});var Be=g(F=>{var f=M(),we=se(),me=ce(),ye=ae(),Ee=ge(),J=gt(),v=I(),ve=de();function he(n){return unescape(encodeURIComponent(n)).length}function Y(n,t,e){let r=[],o;for(;(o=n.exec(e))!==null;)r.push({data:o[0],index:o.index,mode:t,length:o[0].length});return r}function Ce(n){let t=Y(J.NUMERIC,f.NUMERIC,n),e=Y(J.ALPHANUMERIC,f.ALPHANUMERIC,n),r,o;return v.isKanjiModeEnabled()?(r=Y(J.BYTE,f.BYTE,n),o=Y(J.KANJI,f.KANJI,n)):(r=Y(J.BYTE_KANJI,f.BYTE,n),o=[]),t.concat(e,r,o).sort(function(s,u){return s.index-u.index}).map(function(s){return{data:s.data,mode:s.mode,length:s.length}})}function yt(n,t){switch(t){case f.NUMERIC:return we.getBitsLength(n);case f.ALPHANUMERIC:return me.getBitsLength(n);case f.KANJI:return Ee.getBitsLength(n);case f.BYTE:return ye.getBitsLength(n)}}function tn(n){return n.reduce(function(t,e){let r=t.length-1>=0?t[t.length-1]:null;return r&&r.mode===e.mode?(t[t.length-1].data+=e.data,t):(t.push(e),t)},[])}function en(n){let t=[];for(let e=0;e<n.length;e++){let r=n[e];switch(r.mode){case f.NUMERIC:t.push([r,{data:r.data,mode:f.ALPHANUMERIC,length:r.length},{data:r.data,mode:f.BYTE,length:r.length}]);break;case f.ALPHANUMERIC:t.push([r,{data:r.data,mode:f.BYTE,length:r.length}]);break;case f.KANJI:t.push([r,{data:r.data,mode:f.BYTE,length:he(r.data)}]);break;case f.BYTE:t.push([{data:r.data,mode:f.BYTE,length:he(r.data)}])}}return t}function nn(n,t){let e={},r={start:{}},o=[\"start\"];for(let i=0;i<n.length;i++){let s=n[i],u=[];for(let c=0;c<s.length;c++){let l=s[c],a=\"\"+i+c;u.push(a),e[a]={node:l,lastCount:0},r[a]={};for(let w=0;w<o.length;w++){let h=o[w];e[h]&&e[h].node.mode===l.mode?(r[h][a]=yt(e[h].lastCount+l.length,l.mode)-yt(e[h].lastCount,l.mode),e[h].lastCount+=l.length):(e[h]&&(e[h].lastCount=l.length),r[h][a]=yt(l.length,l.mode)+4+f.getCharCountIndicator(l.mode,t))}}o=u}for(let i=0;i<o.length;i++)r[o[i]].end=0;return{map:r,table:e}}function pe(n,t){let e,r=f.getBestModeForData(n);if(e=f.from(t,r),e!==f.BYTE&&e.bit<r.bit)throw new Error('\"'+n+'\" cannot be encoded with mode '+f.toString(e)+`.\n Suggested mode is: `+f.toString(r));switch(e===f.KANJI&&!v.isKanjiModeEnabled()&&(e=f.BYTE),e){case f.NUMERIC:return new we(n);case f.ALPHANUMERIC:return new me(n);case f.KANJI:return new Ee(n);case f.BYTE:return new ye(n)}}F.fromArray=function(t){return t.reduce(function(e,r){return typeof r==\"string\"?e.push(pe(r,null)):r.data&&e.push(pe(r.data,r.mode)),e},[])};F.fromString=function(t,e){let r=Ce(t,v.isKanjiModeEnabled()),o=en(r),i=nn(o,e),s=ve.find_path(i.map,\"start\",\"end\"),u=[];for(let c=1;c<s.length-1;c++)u.push(i.table[s[c]].node);return F.fromArray(tn(u))};F.rawSplit=function(t){return F.fromArray(Ce(t,v.isKanjiModeEnabled()))}});var Te=g(Ae=>{var et=I(),Et=j(),rn=qt(),on=Ft(),sn=kt(),un=Ht(),At=Kt(),Tt=ct(),cn=Gt(),tt=te(),ln=oe(),an=M(),Ct=Be();function fn(n,t){let e=n.size,r=un.getPositions(t);for(let o=0;o<r.length;o++){let i=r[o][0],s=r[o][1];for(let u=-1;u<=7;u++)if(!(i+u<=-1||e<=i+u))for(let c=-1;c<=7;c++)s+c<=-1||e<=s+c||(u>=0&&u<=6&&(c===0||c===6)||c>=0&&c<=6&&(u===0||u===6)||u>=2&&u<=4&&c>=2&&c<=4?n.set(i+u,s+c,!0,!0):n.set(i+u,s+c,!1,!0))}}function gn(n){let t=n.size;for(let e=8;e<t-8;e++){let r=e%2===0;n.set(e,6,r,!0),n.set(6,e,r,!0)}}function dn(n,t){let e=sn.getPositions(t);for(let r=0;r<e.length;r++){let o=e[r][0],i=e[r][1];for(let s=-2;s<=2;s++)for(let u=-2;u<=2;u++)s===-2||s===2||u===-2||u===2||s===0&&u===0?n.set(o+s,i+u,!0,!0):n.set(o+s,i+u,!1,!0)}}function hn(n,t){let e=n.size,r=tt.getEncodedBits(t),o,i,s;for(let u=0;u<18;u++)o=Math.floor(u/3),i=u%3+e-8-3,s=(r>>u&1)===1,n.set(o,i,s,!0),n.set(i,o,s,!0)}function Bt(n,t,e){let r=n.size,o=ln.getEncodedBits(t,e),i,s;for(i=0;i<15;i++)s=(o>>i&1)===1,i<6?n.set(i,8,s,!0):i<8?n.set(i+1,8,s,!0):n.set(r-15+i,8,s,!0),i<8?n.set(8,r-i-1,s,!0):i<9?n.set(8,15-i-1+1,s,!0):n.set(8,15-i-1,s,!0);n.set(r-8,8,1,!0)}function pn(n,t){let e=n.size,r=-1,o=e-1,i=7,s=0;for(let u=e-1;u>0;u-=2)for(u===6&&u--;;){for(let c=0;c<2;c++)if(!n.isReserved(o,u-c)){let l=!1;s<t.length&&(l=(t[s]>>>i&1)===1),n.set(o,u-c,l),i--,i===-1&&(s++,i=7)}if(o+=r,o<0||e<=o){o-=r,r=-r;break}}}function wn(n,t,e){let r=new rn;e.forEach(function(c){r.put(c.mode.bit,4),r.put(c.getLength(),an.getCharCountIndicator(c.mode,n)),c.write(r)});let o=et.getSymbolTotalCodewords(n),i=Tt.getTotalCodewordsCount(n,t),s=(o-i)*8;for(r.getLengthInBits()+4<=s&&r.put(0,4);r.getLengthInBits()%8!==0;)r.putBit(0);let u=(s-r.getLengthInBits())/8;for(let c=0;c<u;c++)r.put(c%2?17:236,8);return mn(r,n,t)}function mn(n,t,e){let r=et.getSymbolTotalCodewords(t),o=Tt.getTotalCodewordsCount(t,e),i=r-o,s=Tt.getBlocksCount(t,e),u=r%s,c=s-u,l=Math.floor(r/s),a=Math.floor(i/s),w=a+1,h=l-a,y=new cn(h),A=0,T=new Array(s),bt=new Array(s),rt=0,Re=new Uint8Array(n.buffer);for(let _=0;_<s;_++){let it=_<c?a:w;T[_]=Re.slice(A,A+it),bt[_]=y.encode(T[_]),A+=it,rt=Math.max(rt,it)}let ot=new Uint8Array(r),Rt=0,E,C;for(E=0;E<rt;E++)for(C=0;C<s;C++)E<T[C].length&&(ot[Rt++]=T[C][E]);for(E=0;E<h;E++)for(C=0;C<s;C++)ot[Rt++]=bt[C][E];return ot}function yn(n,t,e,r){let o;if(Array.isArray(n))o=Ct.fromArray(n);else if(typeof n==\"string\"){let l=t;if(!l){let a=Ct.rawSplit(n);l=tt.getBestVersionForData(a,e)}o=Ct.fromString(n,l||40)}else throw new Error(\"Invalid data\");let i=tt.getBestVersionForData(o,e);if(!i)throw new Error(\"The amount of data is too big to be stored in a QR Code\");if(!t)t=i;else if(t<i)throw new Error(`\nThe chosen QR Code version cannot contain this amount of data.\nMinimum version required to store current data is: `+i+`.\n`);let s=wn(t,e,o),u=et.getSymbolSize(t),c=new on(u);return fn(c,t),gn(c),dn(c,t),Bt(c,e,0),t>=7&&hn(c,t),pn(c,s),isNaN(r)&&(r=At.getBestMask(c,Bt.bind(null,c,e))),At.applyMask(r,c),Bt(c,e,r),{modules:c,version:t,errorCorrectionLevel:e,maskPattern:r,segments:o}}Ae.create=function(t,e){if(typeof t>\"u\"||t===\"\")throw new Error(\"No input text\");let r=Et.M,o,i;return typeof e<\"u\"&&(r=Et.from(e.errorCorrectionLevel,Et.M),o=tt.from(e.version),i=At.from(e.maskPattern),e.toSJISFunc&&et.setToSJISFunction(e.toSJISFunc)),yn(t,o,r,i)}});var It=g(L=>{function Ie(n){if(typeof n==\"number\"&&(n=n.toString()),typeof n!=\"string\")throw new Error(\"Color should be defined as hex string\");let t=n.slice().replace(\"#\",\"\").split(\"\");if(t.length<3||t.length===5||t.length>8)throw new Error(\"Invalid hex color: \"+n);(t.length===3||t.length===4)&&(t=Array.prototype.concat.apply([],t.map(function(r){return[r,r]}))),t.length===6&&t.push(\"F\",\"F\");let e=parseInt(t.join(\"\"),16);return{r:e>>24&255,g:e>>16&255,b:e>>8&255,a:e&255,hex:\"#\"+t.slice(0,6).join(\"\")}}L.getOptions=function(t){t||(t={}),t.color||(t.color={});let e=typeof t.margin>\"u\"||t.margin===null||t.margin<0?4:t.margin,r=t.width&&t.width>=21?t.width:void 0,o=t.scale||4;return{width:r,scale:r?4:o,margin:e,color:{dark:Ie(t.color.dark||\"#000000ff\"),light:Ie(t.color.light||\"#ffffffff\")},type:t.type,rendererOpts:t.rendererOpts||{}}};L.getScale=function(t,e){return e.width&&e.width>=t+e.margin*2?e.width/(t+e.margin*2):e.scale};L.getImageWidth=function(t,e){let r=L.getScale(t,e);return Math.floor((t+e.margin*2)*r)};L.qrToImageData=function(t,e,r){let o=e.modules.size,i=e.modules.data,s=L.getScale(o,r),u=Math.floor((o+r.margin*2)*s),c=r.margin*s,l=[r.color.light,r.color.dark];for(let a=0;a<u;a++)for(let w=0;w<u;w++){let h=(a*u+w)*4,y=r.color.light;if(a>=c&&w>=c&&a<u-c&&w<u-c){let A=Math.floor((a-c)/s),T=Math.floor((w-c)/s);y=l[i[A*o+T]?1:0]}t[h++]=y.r,t[h++]=y.g,t[h++]=y.b,t[h]=y.a}}});var Ne=g(nt=>{var Nt=It();function En(n,t,e){n.clearRect(0,0,t.width,t.height),t.style||(t.style={}),t.height=e,t.width=e,t.style.height=e+\"px\",t.style.width=e+\"px\"}function Cn(){try{return document.createElement(\"canvas\")}catch{throw new Error(\"You need to specify a canvas element\")}}nt.render=function(t,e,r){let o=r,i=e;typeof o>\"u\"&&(!e||!e.getContext)&&(o=e,e=void 0),e||(i=Cn()),o=Nt.getOptions(o);let s=Nt.getImageWidth(t.modules.size,o),u=i.getContext(\"2d\"),c=u.createImageData(s,s);return Nt.qrToImageData(c.data,t,o),En(u,i,s),u.putImageData(c,0,0),i};nt.renderToDataURL=function(t,e,r){let o=r;typeof o>\"u\"&&(!e||!e.getContext)&&(o=e,e=void 0),o||(o={});let i=nt.render(t,e,o),s=o.type||\"image/png\",u=o.rendererOpts||{};return i.toDataURL(s,u.quality)}});var Pe=g(Se=>{var Bn=It();function Me(n,t){let e=n.a/255,r=t+'=\"'+n.hex+'\"';return e<1?r+\" \"+t+'-opacity=\"'+e.toFixed(2).slice(1)+'\"':r}function Mt(n,t,e){let r=n+t;return typeof e<\"u\"&&(r+=\" \"+e),r}function An(n,t,e){let r=\"\",o=0,i=!1,s=0;for(let u=0;u<n.length;u++){let c=Math.floor(u%t),l=Math.floor(u/t);!c&&!i&&(i=!0),n[u]?(s++,u>0&&c>0&&n[u-1]||(r+=i?Mt(\"M\",c+e,.5+l+e):Mt(\"m\",o,0),o=0,i=!1),c+1<t&&n[u+1]||(r+=Mt(\"h\",s),s=0)):o++}return r}Se.render=function(t,e,r){let o=Bn.getOptions(e),i=t.modules.size,s=t.modules.data,u=i+o.margin*2,c=o.color.light.a?\"<path \"+Me(o.color.light,\"fill\")+' d=\"M0 0h'+u+\"v\"+u+'H0z\"/>':\"\",l=\"<path \"+Me(o.color.dark,\"stroke\")+' d=\"'+An(s,i,o.margin)+'\"/>',a='viewBox=\"0 0 '+u+\" \"+u+'\"',h='<svg xmlns=\"http://www.w3.org/2000/svg\" '+(o.width?'width=\"'+o.width+'\" height=\"'+o.width+'\" ':\"\")+a+' shape-rendering=\"crispEdges\">'+c+l+`</svg>\n`;return typeof r==\"function\"&&r(null,h),h}});var Nn=g(O=>{var Tn=_t(),St=Te(),be=Ne(),In=Pe();function Pt(n,t,e,r,o){let i=[].slice.call(arguments,1),s=i.length,u=typeof i[s-1]==\"function\";if(!u&&!Tn())throw new Error(\"Callback required as last argument\");if(u){if(s<2)throw new Error(\"Too few arguments provided\");s===2?(o=e,e=t,t=r=void 0):s===3&&(t.getContext&&typeof o>\"u\"?(o=r,r=void 0):(o=r,r=e,e=t,t=void 0))}else{if(s<1)throw new Error(\"Too few arguments provided\");return s===1?(e=t,t=r=void 0):s===2&&!t.getContext&&(r=e,e=t,t=void 0),new Promise(function(c,l){try{let a=St.create(e,r);c(n(a,t,r))}catch(a){l(a)}})}try{let c=St.create(e,r);o(null,n(c,t,r))}catch(c){o(c)}}O.create=St.create;O.toCanvas=Pt.bind(null,be.render);O.toDataURL=Pt.bind(null,be.renderToDataURL);O.toString=Pt.bind(null,function(n,t,e){return In.render(n,e)})});export default Nn();\n", "/**\n * DJM UI \u7EDF\u4E00\u5165\u53E3\n * \u5168\u91CF\u6CE8\u518C\uFF1Aimport DjmUI from './src/index.js'; app.use(DjmUI)\n * \u6309\u9700\u5F15\u5165\uFF1Aimport DjmButton from './src/components/button/index.js'\n */\nimport DjmButton from './components/button/index.js'\nimport DjmInput from './components/input/index.js'\nimport DjmSelect from './components/select/index.js'\nimport DjmCheckbox from './components/checkbox/index.js'\nimport DjmRadio from './components/radio/index.js'\nimport DjmSwitch from './components/switch/index.js'\nimport DjmForm from './components/form/index.js'\nimport DjmFormItem from './components/form-item/index.js'\nimport DjmTable from './components/table/index.js'\nimport DjmEmpty from './components/empty/index.js'\nimport DjmPageHeader from './components/page-header/index.js'\nimport DjmBreadcrumb from './components/breadcrumb/index.js'\nimport DjmAvatar from './components/avatar/index.js'\nimport DjmAvatarGroup from './components/avatar/group.js'\nimport DjmBadge from './components/badge/index.js'\nimport DjmPopover from './components/popover/index.js'\nimport DjmMenu from './components/menu/index.js'\nimport DjmTag from './components/tag/index.js'\nimport DjmCard from './components/card/index.js'\nimport DjmProgress from './components/progress/index.js'\nimport DjmSkeleton from './components/skeleton/index.js'\nimport DjmResult from './components/result/index.js'\nimport DjmTimeline from './components/timeline/index.js'\nimport DjmCollapse from './components/collapse/index.js'\nimport DjmStatistic from './components/statistic/index.js'\nimport DjmSteps from './components/steps/index.js'\nimport DjmInputNumber from './components/input-number/index.js'\nimport DjmRate from './components/rate/index.js'\nimport DjmSlider from './components/slider/index.js'\nimport DjmTimePicker from './components/time-picker/index.js'\nimport DjmColorPicker from './components/color-picker/index.js'\nimport DjmCascader from './components/cascader/index.js'\nimport DjmTransfer from './components/transfer/index.js'\nimport DjmAlert from './components/alert/index.js'\nimport DjmSpin from './components/spin/index.js'\nimport DjmPopconfirm from './components/popconfirm/index.js'\nimport DjmAnchor from './components/anchor/index.js'\nimport DjmBacktop from './components/backtop/index.js'\nimport DjmDivider from './components/divider/index.js'\nimport DjmSpace from './components/space/index.js'\nimport DjmAffix from './components/affix/index.js'\nimport DjmSegmented from './components/segmented/index.js'\nimport DjmImage from './components/image/index.js'\nimport DjmWatermark from './components/watermark/index.js'\nimport DjmAutoComplete from './components/autocomplete/index.js'\nimport DjmSplitter from './components/splitter/index.js'\nimport DjmCarousel from './components/carousel/index.js'\nimport DjmTour from './components/tour/index.js'\nimport DjmCalendar from './components/calendar/index.js'\nimport DjmFloatButton from './components/float-button/index.js'\nimport DjmMentions from './components/mentions/index.js'\nimport DjmRow from './components/grid/row.js'\nimport DjmCol from './components/grid/col.js'\nimport DjmLayout from './components/layout/index.js'\nimport DjmLayoutHeader from './components/layout/header.js'\nimport DjmLayoutSider from './components/layout/sider.js'\nimport DjmLayoutContent from './components/layout/content.js'\nimport DjmLayoutFooter from './components/layout/footer.js'\nimport DjmList from './components/list/index.js'\nimport DjmInputTag from './components/input-tag/index.js'\nimport DjmPassword from './components/password/index.js'\nimport DjmCommandPalette from './components/command-palette/index.js'\nimport DjmQRCode from './components/qrcode/index.js'\nimport DjmStatus from './components/status/index.js'\nimport DjmTooltip from './components/tooltip/index.js'\nimport DjmDropdown from './components/dropdown/index.js'\nimport DjmDrawer from './components/drawer/index.js'\nimport DjmIcon from './components/icon/index.js'\nimport DjmModal from './components/modal/index.js'\nimport DjmConfirmDialog from './components/confirm-dialog/index.js'\nimport DjmPagination from './components/pagination/index.js'\nimport DjmTabs from './components/tabs/index.js'\nimport DjmContextMenu from './components/context-menu/index.js'\nimport DjmDatePicker from './components/date-picker/index.js'\nimport DjmTreeSelect from './components/tree-select/index.js'\nimport DjmRichEditor from './components/rich-editor/index.js'\nimport DjmFloatingWindow from './components/floating-window/index.js'\nimport DjmUpload from './components/upload/index.js'\nimport DjmTree from './components/tree/index.js'\nimport DjmEditableTable from './components/editable-table/index.js'\nimport DjmDescriptions from './components/descriptions/index.js'\nimport DjmMessageHost from './components/message/index.js'\nimport DjmOrgPicker from './components/org-picker/index.js'\nimport DjmSchemaForm from './components/schema-form/index.js'\nimport DjmApprovalFlow from './components/approval-flow/index.js'\nimport DjmQueryFilter from './components/query-filter/index.js'\nimport DjmFilterTags from './components/filter-tags/index.js'\nimport DjmMediaPicker from './components/media-picker/index.js'\nimport DjmKanban from './components/kanban/index.js'\nimport DjmAttachmentList from './components/attachment-list/index.js'\nimport DjmNotification from './components/notification/index.js'\nimport DjmConfigProvider from './components/config-provider/index.js'\nimport DjmDateTimePicker from './components/date-time-picker/index.js'\nimport DjmVirtualList from './components/virtual-list/index.js'\nimport DjmBatchBar from './components/batch-bar/index.js'\nimport DjmImportWizard from './components/import-wizard/index.js'\nimport DjmDiff from './components/diff/index.js'\nimport DjmTreeTable from './components/tree-table/index.js'\nimport DjmSchedule from './components/schedule/index.js'\nimport DjmComment from './components/comment/index.js'\nimport DjmSignature from './components/signature/index.js'\nimport DjmPrint from './components/print/index.js'\nimport DjmGantt from './components/gantt/index.js'\nimport DjmFieldList from './components/field-list/index.js'\nimport DjmChat from './components/chat/index.js'\nimport DjmOrgChart from './components/org-chart/index.js'\nimport DjmPageTabs from './components/page-tabs/index.js'\n\nexport {\n DjmButton,\n DjmInput,\n DjmSelect,\n DjmCheckbox,\n DjmRadio,\n DjmSwitch,\n DjmForm,\n DjmFormItem,\n DjmTable,\n DjmEmpty,\n DjmPageHeader,\n DjmBreadcrumb,\n DjmAvatar,\n DjmAvatarGroup,\n DjmBadge,\n DjmPopover,\n DjmMenu,\n DjmTag,\n DjmCard,\n DjmProgress,\n DjmSkeleton,\n DjmResult,\n DjmTimeline,\n DjmCollapse,\n DjmStatistic,\n DjmSteps,\n DjmInputNumber,\n DjmRate,\n DjmSlider,\n DjmTimePicker,\n DjmColorPicker,\n DjmCascader,\n DjmTransfer,\n DjmAlert,\n DjmSpin,\n DjmPopconfirm,\n DjmAnchor,\n DjmBacktop,\n DjmDivider,\n DjmSpace,\n DjmAffix,\n DjmSegmented,\n DjmImage,\n DjmWatermark,\n DjmAutoComplete,\n DjmSplitter,\n DjmCarousel,\n DjmTour,\n DjmCalendar,\n DjmFloatButton,\n DjmMentions,\n DjmRow,\n DjmCol,\n DjmLayout,\n DjmLayoutHeader,\n DjmLayoutSider,\n DjmLayoutContent,\n DjmLayoutFooter,\n DjmList,\n DjmInputTag,\n DjmPassword,\n DjmCommandPalette,\n DjmQRCode,\n DjmStatus,\n DjmTooltip,\n DjmDropdown,\n DjmDrawer,\n DjmIcon,\n DjmModal,\n DjmConfirmDialog,\n DjmPagination,\n DjmTabs,\n DjmContextMenu,\n DjmDatePicker,\n DjmTreeSelect,\n DjmRichEditor,\n DjmFloatingWindow,\n DjmUpload,\n DjmTree,\n DjmEditableTable,\n DjmDescriptions,\n DjmMessageHost,\n DjmOrgPicker,\n DjmSchemaForm,\n DjmApprovalFlow,\n DjmQueryFilter,\n DjmFilterTags,\n DjmMediaPicker,\n DjmKanban,\n DjmAttachmentList,\n DjmNotification,\n DjmConfigProvider,\n DjmDateTimePicker,\n DjmVirtualList,\n DjmBatchBar,\n DjmImportWizard,\n DjmDiff,\n DjmTreeTable,\n DjmSchedule,\n DjmComment,\n DjmSignature,\n DjmPrint,\n DjmGantt,\n DjmFieldList,\n DjmChat,\n DjmOrgChart,\n DjmPageTabs\n}\n\nexport { djmMessage, djmMessages } from './components/message/index.js'\nexport { sanitizeHtml } from './utils/sanitize-html.js'\nexport { moveTreeNode } from './utils/tree-move.js'\nexport { moveRows } from './utils/row-move.js'\nexport { setLocale, getLocale, t, localeState } from './locale/index.js'\nexport {\n theme, setTheme, toggleTheme, initTheme,\n primaryColor, PRESET_COLORS, setPrimaryColor, resetPrimaryColor\n} from './theme/index.js'\nexport { setPermissions, addPermissions, clearPermissions, hasPermission, vPermission } from './utils/permission.js'\n\nimport { setLocale } from './locale/index.js'\nimport { vPermission } from './utils/permission.js'\n\nconst components = [\n DjmButton,\n DjmInput,\n DjmSelect,\n DjmCheckbox,\n DjmRadio,\n DjmSwitch,\n DjmForm,\n DjmFormItem,\n DjmTable,\n DjmEmpty,\n DjmPageHeader,\n DjmBreadcrumb,\n DjmAvatar,\n DjmAvatarGroup,\n DjmBadge,\n DjmPopover,\n DjmMenu,\n DjmTag,\n DjmCard,\n DjmProgress,\n DjmSkeleton,\n DjmResult,\n DjmTimeline,\n DjmCollapse,\n DjmStatistic,\n DjmSteps,\n DjmInputNumber,\n DjmRate,\n DjmSlider,\n DjmTimePicker,\n DjmColorPicker,\n DjmCascader,\n DjmTransfer,\n DjmAlert,\n DjmSpin,\n DjmPopconfirm,\n DjmAnchor,\n DjmBacktop,\n DjmDivider,\n DjmSpace,\n DjmAffix,\n DjmSegmented,\n DjmImage,\n DjmWatermark,\n DjmAutoComplete,\n DjmSplitter,\n DjmCarousel,\n DjmTour,\n DjmCalendar,\n DjmFloatButton,\n DjmMentions,\n DjmRow,\n DjmCol,\n DjmLayout,\n DjmLayoutHeader,\n DjmLayoutSider,\n DjmLayoutContent,\n DjmLayoutFooter,\n DjmList,\n DjmInputTag,\n DjmPassword,\n DjmCommandPalette,\n DjmQRCode,\n DjmStatus,\n DjmTooltip,\n DjmDropdown,\n DjmDrawer,\n DjmIcon,\n DjmModal,\n DjmConfirmDialog,\n DjmPagination,\n DjmTabs,\n DjmContextMenu,\n DjmDatePicker,\n DjmTreeSelect,\n DjmRichEditor,\n DjmFloatingWindow,\n DjmUpload,\n DjmTree,\n DjmEditableTable,\n DjmDescriptions,\n DjmMessageHost,\n DjmOrgPicker,\n DjmSchemaForm,\n DjmApprovalFlow,\n DjmQueryFilter,\n DjmFilterTags,\n DjmMediaPicker,\n DjmKanban,\n DjmAttachmentList,\n DjmNotification,\n DjmConfigProvider,\n DjmDateTimePicker,\n DjmVirtualList,\n DjmBatchBar,\n DjmImportWizard,\n DjmDiff,\n DjmTreeTable,\n DjmSchedule,\n DjmComment,\n DjmSignature,\n DjmPrint,\n DjmGantt,\n DjmFieldList,\n DjmChat,\n DjmOrgChart,\n DjmPageTabs\n]\n\nexport const version = '0.67.2'\n\nexport function install (app, options = {}) {\n if (options.locale) setLocale(options.locale)\n components.forEach((component) => app.component(component.name, component))\n app.directive('permission', vPermission)\n}\n\nexport default { install, version }\n", "const PATHS = {\n grid: 'M3 3h7v7H3zM14 3h7v7h-7zM14 14h7v7h-7zM3 14h7v7H3z',\n users: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2M13 7a4 4 0 1 1-8 0 4 4 0 0 1 8 0M22 21v-2a4 4 0 0 0-3-3.87M16 3.13a4 4 0 0 1 0 7.75',\n shield: 'M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10zM9 12l2 2 4-4',\n search: 'M19 11a8 8 0 1 1-16 0 8 8 0 0 1 16 0zM21 21l-4.35-4.35',\n bell: 'M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9M13.73 21a2 2 0 0 1-3.46 0',\n 'chevron-down': 'M6 9l6 6 6-6',\n 'chevron-up': 'M6 15l6-6 6 6',\n 'chevron-right': 'M9 18l6-6-6-6',\n 'chevron-left': 'M15 18l-6-6 6-6',\n 'chevrons-left': 'M11 17l-5-5 5-5M18 17l-5-5 5-5',\n 'chevrons-right': 'M13 17l5-5-5-5M6 17l5-5-5-5',\n menu: 'M3 6h18M3 12h18M3 18h18',\n plus: 'M12 5v14M5 12h14',\n minus: 'M5 12h14',\n download: 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M7 10l5 5 5-5M12 15V3',\n upload: 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M17 8l-5-5-5 5M12 3v12',\n trash: 'M3 6h18M8 6V4a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6M10 11v6M14 11v6',\n refresh: 'M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15',\n sliders: 'M4 21v-7M4 10V3M12 21v-9M12 8V3M20 21v-5M20 12V3M1 14h6M9 8h6M17 16h6',\n x: 'M18 6L6 18M6 6l12 12',\n edit: 'M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7M18.5 2.5a2.12 2.12 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z',\n lock: 'M5 11h14v10H5zM8 11V7a4 4 0 1 1 8 0v4',\n 'log-out': 'M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4M16 17l5-5-5-5M21 12H9',\n clock: 'M12 22a10 10 0 1 1 0-20 10 10 0 0 1 0 20zM12 6v6l4 2',\n filter: 'M22 3H2l8 9.46V19l4 2v-8.54L22 3z',\n check: 'M20 6L9 17l-5-5',\n info: 'M12 22a10 10 0 1 0 0-20 10 10 0 0 0 0 20M12 16v-5M12 8h.01',\n alert: 'M12 9v4M12 17h.01M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z',\n 'arrow-up': 'M12 19V5M5 12l7-7 7 7',\n 'arrow-down': 'M12 5v14M19 12l-7 7-7-7',\n layers: 'M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5',\n clipboard: 'M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2M9 4h6v3H9zM8 12h8M8 16h5',\n table: 'M3 4h18v16H3zM3 10h18M3 16h18M9 4v16M15 4v16',\n message: 'M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z',\n calendar: 'M4 5h16v16H4zM8 3v4M16 3v4M4 10h16',\n image: 'M3 5h18v14H3zM8.5 11a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0M21 15l-5-5L5 21',\n file: 'M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8zM14 2v6h6',\n grip: 'M9 5h.01M15 5h.01M9 12h.01M15 12h.01M9 19h.01M15 19h.01',\n printer: 'M6 9V3h12v6M6 18H4a2 2 0 0 1-2-2v-4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-2M6 14h12v7H6z',\n code: 'M16 18l6-6-6-6M8 6l-6 6 6 6',\n eye: 'M1 12s4-7 11-7 11 7 11 7-4 7-11 7S1 12 1 12zM15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0',\n 'eye-off': 'M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19M14.12 14.12a3 3 0 1 1-4.24-4.24M1 1l22 22',\n link: 'M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07L12 4.5M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07L14 19.5',\n folder: 'M3 5h6l2 2h10v12H3z',\n layout: 'M3 3h18v18H3zM3 9h18M9 9v12',\n 'bar-chart': 'M4 20V10M10 20V4M16 20v-6M22 20H2',\n maximize: 'M8 3H5a2 2 0 0 0-2 2v3M16 3h3a2 2 0 0 1 2 2v3M8 21H5a2 2 0 0 1-2-2v-3M16 21h3a2 2 0 0 0 2-2v-3',\n minimize: 'M5 12h14',\n columns: 'M3 4h18v16H3zM9 4v16M15 4v16',\n monitor: 'M3 4h18v12H3zM8 20h8M12 16v4',\n mail: 'M4 5h16v14H4zM4 7l8 6 8-6',\n phone: 'M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.91.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92z',\n 'user-plus': 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2M13 7a4 4 0 1 1-8 0 4 4 0 0 1 8 0M19 8v6M22 11h-6',\n 'shield-off': 'M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10zM4 4l16 16',\n activity: 'M22 12h-4l-3 9L9 3l-3 9H2',\n database: 'M12 8c4.42 0 8-1.34 8-3s-3.58-3-8-3-8 1.34-8 3 3.58 3 8 3zM4 5v14c0 1.66 3.58 3 8 3s8-1.34 8-3V5M4 12c0 1.66 3.58 3 8 3s8-1.34 8-3',\n sun: 'M12 17a5 5 0 1 0 0-10 5 5 0 0 0 0 10zM12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42',\n moon: 'M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z'\n}\n\nexport default {\n name: 'DjmIcon',\n props: {\n name: { type: String, required: true },\n size: { type: [Number, String], default: 16 }\n },\n computed: {\n d () {\n return PATHS[this.name] || ''\n }\n },\n template: `\n <svg\n class=\"djm-icon\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.7\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n ><path :d=\"d\" /></svg>\n `\n}\n", "import Icon from '../icon/index.js'\n\n/**\n * \u6309\u94AE\uFF1A\u590D\u7528 djm-btn \u6837\u5F0F\uFF0C\u7EDF\u4E00\u53D8\u4F53\u3001\u5C3A\u5BF8\u4E0E\u52A0\u8F7D\u6001\n * \u7528\u6CD5\uFF1A<DjmButton variant=\"primary\" icon=\"plus\" @click=\"save\">\u4FDD\u5B58</DjmButton>\n */\nexport default {\n name: 'DjmButton',\n components: { DjmIcon: Icon },\n props: {\n // \u53D8\u4F53\uFF1Aprimary | success | danger | danger-ghost\n variant: { type: String, default: '' },\n // \u5C3A\u5BF8\uFF1Axs | sm | lg\n size: { type: String, default: '' },\n icon: { type: String, default: '' },\n loading: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n // \u4EC5\u56FE\u6807\u65F6\u7684\u65E0\u969C\u788D\u540D\u79F0\n ariaLabel: { type: String, default: '' },\n nativeType: { type: String, default: 'button' }\n },\n emits: ['click'],\n computed: {\n classes () {\n return [\n 'djm-btn',\n this.variant ? 'djm-btn-' + this.variant : '',\n this.size ? 'djm-btn-' + this.size : ''\n ].filter(Boolean)\n }\n },\n template: `\n <button\n :class=\"classes\"\n :type=\"nativeType\"\n :disabled=\"disabled || loading\"\n :aria-label=\"ariaLabel || undefined\"\n @click=\"$emit('click', $event)\"\n >\n <span v-if=\"loading\" class=\"djm-spinner djm-spinner-light\"></span>\n <DjmIcon v-else-if=\"icon\" :name=\"icon\" />\n <slot></slot>\n </button>\n `\n}\n", "/**\n * \u8F93\u5165\u6846\uFF1A\u652F\u6301 v-model\u3001\u6E05\u7A7A\u6309\u94AE\u3001\u5B57\u6570\u7EDF\u8BA1\u3001\u9519\u8BEF\u6001\u4E0E\u56DE\u8F66\u4E8B\u4EF6\n * \u7528\u6CD5\uFF1A<DjmInput v-model=\"keyword\" placeholder=\"\u8BF7\u8F93\u5165\" clearable @enter=\"search\" />\n */\nimport Icon from '../icon/index.js'\n\nexport default {\n name: 'DjmInput',\n components: { DjmIcon: Icon },\n props: {\n modelValue: { type: [String, Number], default: '' },\n type: { type: String, default: 'text' },\n placeholder: { type: String, default: '' },\n disabled: { type: Boolean, default: false },\n readonly: { type: Boolean, default: false },\n invalid: { type: Boolean, default: false },\n autocomplete: { type: String, default: 'off' },\n clearable: { type: Boolean, default: false },\n // \u6700\u5927\u8F93\u5165\u957F\u5EA6\uFF0C0 \u8868\u793A\u4E0D\u9650\u5236\n maxlength: { type: Number, default: 0 },\n showWordLimit: { type: Boolean, default: false },\n // \u65E0\u53EF\u89C1\u6807\u7B7E\u65F6\u7684\u65E0\u969C\u788D\u540D\u79F0\n ariaLabel: { type: String, default: '' }\n },\n emits: ['update:modelValue', 'input', 'change', 'enter', 'focus', 'blur', 'clear'],\n computed: {\n classes () {\n return ['djm-input', { 'djm-is-invalid': this.invalid, 'djm-has-affix': this.hasAffix }]\n },\n // \u9700\u8981\u53F3\u4FA7\u6302\u4E1C\u897F\u65F6\u624D\u5957\u4E00\u5C42\u5BB9\u5668\uFF0C\u9ED8\u8BA4\u7ED3\u6784\u4E0E\u65E7\u7248\u4E00\u81F4\n hasAffix () {\n return this.clearable || (this.maxlength > 0 && this.showWordLimit)\n },\n showClear () {\n return this.clearable && !this.disabled && !this.readonly && String(this.modelValue ?? '').length > 0\n },\n showCount () {\n // \u6E05\u7A7A\u6309\u94AE\u4E0E\u5B57\u6570\u5360\u540C\u4E00\u4E2A\u4F4D\u7F6E\uFF0C\u4F18\u5148\u5C55\u793A\u6E05\u7A7A\n return this.maxlength > 0 && this.showWordLimit && !this.showClear\n },\n wordCount () {\n return String(this.modelValue ?? '').length\n },\n maxlengthAttr () {\n return this.maxlength > 0 ? this.maxlength : undefined\n }\n },\n methods: {\n onInput (event) {\n this.$emit('update:modelValue', event.target.value)\n this.$emit('input', event)\n },\n clear () {\n this.$emit('update:modelValue', '')\n this.$emit('clear')\n this.$emit('change', '')\n this.focus()\n },\n focus () {\n if (this.$refs.input) this.$refs.input.focus()\n },\n blur () {\n if (this.$refs.input) this.$refs.input.blur()\n }\n },\n template: `\n <div v-if=\"hasAffix\" class=\"djm-input-wrap\">\n <input\n ref=\"input\"\n :class=\"classes\"\n :type=\"type\"\n :value=\"modelValue\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :autocomplete=\"autocomplete\"\n :maxlength=\"maxlengthAttr\"\n :aria-label=\"ariaLabel || undefined\"\n :aria-invalid=\"invalid ? 'true' : undefined\"\n @input=\"onInput\"\n @change=\"$emit('change', $event)\"\n @keyup.enter=\"$emit('enter', $event)\"\n @focus=\"$emit('focus', $event)\"\n @blur=\"$emit('blur', $event)\"\n />\n <button\n v-if=\"showClear\"\n class=\"djm-input-clear\"\n type=\"button\"\n aria-label=\"\u6E05\u7A7A\u8F93\u5165\"\n @click=\"clear\"\n >\n <DjmIcon name=\"x\" :size=\"12\" />\n </button>\n <span v-else-if=\"showCount\" class=\"djm-input-count\">{{ wordCount }}/{{ maxlength }}</span>\n </div>\n <input\n v-else\n ref=\"input\"\n :class=\"classes\"\n :type=\"type\"\n :value=\"modelValue\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :autocomplete=\"autocomplete\"\n :maxlength=\"maxlengthAttr\"\n :aria-label=\"ariaLabel || undefined\"\n :aria-invalid=\"invalid ? 'true' : undefined\"\n @input=\"onInput\"\n @change=\"$emit('change', $event)\"\n @keyup.enter=\"$emit('enter', $event)\"\n @focus=\"$emit('focus', $event)\"\n @blur=\"$emit('blur', $event)\"\n />\n `\n}\n", "import { computed, nextTick, onBeforeUnmount, ref, watch } from 'vue'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\nimport { bindPanelListeners } from '../../utils/panel.js'\n\nlet uidSeed = 0\n\n/**\n * \u4E0B\u62C9\u9009\u62E9\n *\n * \u5355\u503C\uFF1Av-model=\"dept\"\uFF1B\u591A\u503C\uFF1Amultiple + v-model \u7ED1\u5B9A\u6570\u7EC4\n * options: ['\u5317\u4EAC'] \u6216 [{ label: '\u5317\u4EAC', value: 'bj', disabled: true }]\n * \u5206\u7EC4\uFF1Aoptions \u5143\u7D20\u4E3A { label, options: [...] } \u65F6\u6309\u5206\u7EC4\u6E32\u67D3\uFF08\u5206\u7EC4\u65F6\u4E0D\u652F\u6301\u865A\u62DF\u6EDA\u52A8\uFF09\n * \u53EF\u641C\u7D22\uFF1Afilterable\uFF1B\u53EF\u6E05\u7A7A\uFF1Aclearable\n */\nexport default {\n name: 'DjmSelect',\n components: { DjmIcon: Icon },\n props: {\n modelValue: { type: [String, Number, Boolean, Array], default: '' },\n options: { type: Array, default: () => [] },\n placeholder: { type: String, default: '' },\n disabled: { type: Boolean, default: false },\n invalid: { type: Boolean, default: false },\n clearable: { type: Boolean, default: false },\n multiple: { type: Boolean, default: false },\n filterable: { type: Boolean, default: false },\n // \u591A\u9009\u65F6\u6700\u591A\u5C55\u793A\u51E0\u4E2A\u6807\u7B7E\uFF0C0 \u8868\u793A\u5168\u90E8\u5C55\u793A\n maxTagCount: { type: Number, default: 0 },\n emptyText: { type: String, default: '' },\n // \u865A\u62DF\u6EDA\u52A8\uFF1A\u9009\u9879\u5F88\u591A\u65F6\u53EA\u6E32\u67D3\u53EF\u89C6\u533A\uFF08\u5206\u7EC4\u6A21\u5F0F\u4E0B\u81EA\u52A8\u5931\u6548\uFF09\n virtual: { type: Boolean, default: false },\n // \u5355\u4E2A\u9009\u9879\u9AD8\u5EA6\uFF0C\u9700\u4E0E\u6837\u5F0F\u4E00\u81F4\uFF08\u9ED8\u8BA4 30px\uFF09\n optionHeight: { type: Number, default: 30 },\n overscan: { type: Number, default: 5 }\n },\n emits: ['update:modelValue', 'change', 'clear', 'visible-change', 'focus', 'blur'],\n setup (props, { emit }) {\n const instanceId = 'djm-select-' + (++uidSeed)\n const root = ref(null)\n const panel = ref(null)\n const searchRef = ref(null)\n const open = ref(false)\n const query = ref('')\n const activeIndex = ref(-1)\n // \u9762\u677F\u6302\u5230 body\uFF0C\u7528 fixed \u5B9A\u4F4D\u907F\u5F00\u7236\u7EA7 overflow \u88C1\u526A\n const panelStyle = ref({})\n // \u865A\u62DF\u6EDA\u52A8\u72B6\u6001\n const panelScrollTop = ref(0)\n const panelHeight = ref(0)\n // \u6D6E\u5C42\u5168\u5C40\u76D1\u542C\u7684\u89E3\u7ED1\u53E5\u67C4\n let detachPanel = null\n\n // \u5355\u4E2A\u9009\u9879\u5F52\u4E00\u5316\uFF1A\u5B57\u7B26\u4E32\u8F6C { label, value }\n function normalizeOption (item) {\n if (item && typeof item === 'object') {\n return { label: item.label, value: item.value, disabled: Boolean(item.disabled) }\n }\n return { label: item, value: item, disabled: false }\n }\n\n // \u662F\u5426\u5206\u7EC4\u6A21\u5F0F\uFF1A\u4EFB\u4E00\u9879\u5E26 options \u6570\u7EC4\u5373\u89C6\u4E3A\u5206\u7EC4\n const isGrouped = computed(() =>\n props.options.some((item) => item && typeof item === 'object' && Array.isArray(item.options))\n )\n\n // \u5E73\u94FA\u540E\u7684\u5168\u90E8\u9009\u9879\uFF1A\u53D6\u503C\u3001\u56DE\u663E\u3001\u8FC7\u6EE4\u90FD\u57FA\u4E8E\u5B83\n const normalized = computed(() => {\n const flat = []\n props.options.forEach((item) => {\n if (item && typeof item === 'object' && Array.isArray(item.options)) {\n item.options.forEach((child) => flat.push(normalizeOption(child)))\n } else {\n flat.push(normalizeOption(item))\n }\n })\n return flat\n })\n\n // \u8FC7\u6EE4\u540E\u7684\u9009\u9879\uFF0CactiveIndex \u4EE5\u8BE5\u6570\u7EC4\u4E3A\u57FA\u51C6\n const visibleOptions = computed(() => {\n const keyword = query.value.trim().toLowerCase()\n if (!keyword) return normalized.value\n return normalized.value.filter((item) => String(item.label).toLowerCase().includes(keyword))\n })\n\n // \u5206\u7EC4\u6E32\u67D3\u7ED3\u6784\uFF1A\u6BCF\u9879 { label, items: [{ option, index }] }\uFF0Cindex \u4E0E visibleOptions \u5BF9\u9F50\n const visibleGroups = computed(() => {\n const keyword = query.value.trim().toLowerCase()\n const match = (option) => !keyword || String(option.label).toLowerCase().includes(keyword)\n const groups = []\n let index = 0\n props.options.forEach((item) => {\n if (item && typeof item === 'object' && Array.isArray(item.options)) {\n const items = []\n item.options.forEach((child) => {\n const option = normalizeOption(child)\n if (match(option)) items.push({ option, index: index++ })\n })\n // \u7EC4\u5185\u5168\u90E8\u8FC7\u6EE4\u6389\u65F6\u6574\u7EC4\u9690\u85CF\n if (items.length) groups.push({ label: item.label, items })\n } else {\n const option = normalizeOption(item)\n if (match(option)) groups.push({ label: null, items: [{ option, index: index++ }] })\n }\n })\n return groups\n })\n\n const values = computed(() => {\n if (props.multiple) return Array.isArray(props.modelValue) ? props.modelValue : []\n if (props.modelValue === '' || props.modelValue === null || props.modelValue === undefined) return []\n return [props.modelValue]\n })\n\n const hasValue = computed(() => values.value.length > 0)\n\n const selectedOptions = computed(() =>\n values.value.map((value) => normalized.value.find((item) => item.value === value) || { label: String(value), value })\n )\n\n const visibleTags = computed(() => {\n if (!props.maxTagCount || props.maxTagCount <= 0) return selectedOptions.value\n return selectedOptions.value.slice(0, props.maxTagCount)\n })\n\n const restTagCount = computed(() => Math.max(0, selectedOptions.value.length - visibleTags.value.length))\n\n const displayText = computed(() => {\n if (!selectedOptions.value.length) return ''\n if (props.multiple) return selectedOptions.value.map((item) => item.label).join('\u3001')\n return selectedOptions.value[0].label\n })\n\n const placeholderText = computed(() => props.placeholder || t('select.placeholder'))\n const emptyLabel = computed(() => props.emptyText || t('select.empty'))\n\n /* ---------------- \u865A\u62DF\u6EDA\u52A8 ---------------- */\n\n // \u5206\u7EC4\u6A21\u5F0F\u4E0B\u884C\u9AD8\u4E0D\u56FA\u5B9A\uFF0C\u865A\u62DF\u6EDA\u52A8\u81EA\u52A8\u5931\u6548\n const virtualEnabled = computed(() => props.virtual && !isGrouped.value && visibleOptions.value.length > 0)\n const effectiveOptionHeight = computed(() => Math.max(16, props.optionHeight))\n\n // \u53EF\u89C6\u533A\u5185\u7684\u9009\u9879\uFF0Cindex \u4ECD\u662F\u8FC7\u6EE4\u540E\u5217\u8868\u7684\u7EDD\u5BF9\u4F4D\u7F6E\n const renderedOptions = computed(() => {\n const list = visibleOptions.value\n if (!virtualEnabled.value) return list.map((option, index) => ({ option, index }))\n const height = effectiveOptionHeight.value\n const viewHeight = panelHeight.value || 220\n const start = Math.max(0, Math.floor(panelScrollTop.value / height) - props.overscan)\n const end = Math.min(list.length, Math.ceil((panelScrollTop.value + viewHeight) / height) + props.overscan)\n return list.slice(start, end).map((option, offset) => ({ option, index: start + offset }))\n })\n\n const optionPadTop = computed(() => {\n if (!virtualEnabled.value || !renderedOptions.value.length) return 0\n return renderedOptions.value[0].index * effectiveOptionHeight.value\n })\n\n const optionPadBottom = computed(() => {\n if (!virtualEnabled.value || !renderedOptions.value.length) return 0\n const last = renderedOptions.value[renderedOptions.value.length - 1].index\n return Math.max(0, (visibleOptions.value.length - last - 1) * effectiveOptionHeight.value)\n })\n\n function onPanelScroll (event) {\n if (!virtualEnabled.value) return\n const el = event.target\n panelScrollTop.value = el.scrollTop\n panelHeight.value = el.clientHeight\n }\n\n const activeDescendant = computed(() => {\n if (!open.value || activeIndex.value < 0) return undefined\n return instanceId + '-opt-' + activeIndex.value\n })\n\n function isSelected (option) {\n return values.value.includes(option.value)\n }\n\n function firstEnabledIndex () {\n const list = visibleOptions.value\n if (!list.length) return -1\n const selected = list.findIndex((item) => isSelected(item) && !item.disabled)\n if (selected !== -1) return selected\n return list.findIndex((item) => !item.disabled)\n }\n\n function openPanel () {\n if (props.disabled || open.value) return\n open.value = true\n activeIndex.value = firstEnabledIndex()\n emit('visible-change', true)\n // Esc \u5728\u7EC4\u4EF6 keydown \u91CC\u5904\u7406\uFF0C\u8FD9\u91CC\u4E0D\u91CD\u590D\u7ED1\n detachPanel = bindPanelListeners({\n root: () => root.value,\n panel: () => panel.value,\n onClose: () => closePanel(),\n onReposition: updatePosition,\n esc: false\n })\n nextTick(() => {\n if (props.filterable && searchRef.value) searchRef.value.focus()\n updatePosition()\n // \u6BCF\u6B21\u6253\u5F00\u56DE\u5230\u9876\u90E8\uFF0C\u518D\u6309\u5F53\u524D\u9AD8\u4EAE\u9879\u5B9A\u4F4D\n if (panel.value) {\n panel.value.scrollTop = 0\n panelHeight.value = panel.value.clientHeight\n panelScrollTop.value = 0\n }\n scrollActiveIntoView()\n })\n }\n\n function closePanel (resetQuery = true) {\n if (!open.value) return\n open.value = false\n if (resetQuery) query.value = ''\n panelStyle.value = {}\n if (detachPanel) {\n detachPanel()\n detachPanel = null\n }\n emit('visible-change', false)\n }\n\n // \u8BA1\u7B97\u9762\u677F\u4F4D\u7F6E\uFF1A\u4E0B\u65B9\u7A7A\u95F4\u4E0D\u8DB3\u65F6\u5411\u4E0A\u5C55\u5F00\n function updatePosition () {\n if (!open.value || !root.value) return\n const rect = root.value.getBoundingClientRect()\n const height = panel.value ? panel.value.offsetHeight : 220\n const spaceBelow = window.innerHeight - rect.bottom - 8\n const flip = spaceBelow < Math.min(height, 160) && rect.top > spaceBelow\n const limit = Math.max(120, flip ? rect.top - 12 : spaceBelow)\n panelStyle.value = {\n position: 'fixed',\n left: rect.left + 'px',\n width: rect.width + 'px',\n top: flip ? 'auto' : rect.bottom + 4 + 'px',\n bottom: flip ? window.innerHeight - rect.top + 4 + 'px' : 'auto',\n maxHeight: Math.min(220, limit) + 'px'\n }\n }\n\n function toggle () {\n if (props.disabled) return\n if (open.value) closePanel()\n else openPanel()\n }\n\n // \u9632\u6B62\u70B9\u51FB\u8F93\u5165\u6846\u65F6\u7126\u70B9\u4E22\u5931\uFF0C\u540C\u65F6\u8BA9\u70B9\u51FB\u6587\u5B57\u533A\u57DF\u4E5F\u80FD\u5F00\u5173\u9762\u677F\n function onTriggerMousedown (event) {\n if (props.disabled) return\n if (event.target.closest('.djm-select-clear') || event.target.closest('.djm-select-tag-close')) return\n // \u53EF\u641C\u7D22\u65F6\u5DF2\u5C55\u5F00\u518D\u70B9\u8F93\u5165\u6846\u53EA\u662F\u79FB\u52A8\u5149\u6807\uFF0C\u4E0D\u6536\u8D77\u9762\u677F\n if (props.filterable && open.value && event.target.tagName === 'INPUT') return\n if (!props.filterable) event.preventDefault()\n toggle()\n }\n\n function commit (next) {\n emit('update:modelValue', next)\n emit('change', next)\n }\n\n function selectOption (option) {\n if (!option || option.disabled) return\n if (props.multiple) {\n const current = values.value.slice()\n const index = current.indexOf(option.value)\n if (index === -1) current.push(option.value)\n else current.splice(index, 1)\n commit(current)\n // \u591A\u9009\u4FDD\u6301\u5C55\u5F00\uFF0C\u65B9\u4FBF\u8FDE\u7EED\u52FE\u9009\n void nextTick(scrollActiveIntoView)\n } else {\n commit(option.value)\n closePanel()\n if (props.filterable && searchRef.value) searchRef.value.blur()\n }\n }\n\n function removeTag (value) {\n if (props.disabled) return\n commit(values.value.filter((item) => item !== value))\n }\n\n function clear () {\n if (props.disabled) return\n commit(props.multiple ? [] : '')\n emit('clear')\n closePanel()\n }\n\n // \u53EA\u6EDA\u9762\u677F\u81EA\u8EAB\uFF0C\u907F\u514D scrollIntoView \u8FDE\u5E26\u6EDA\u52A8\u9875\u9762\n function scrollActiveIntoView () {\n if (!panel.value || activeIndex.value < 0) return\n\n // \u865A\u62DF\u6EDA\u52A8\u4E0B\u76EE\u6807\u884C\u53EF\u80FD\u8FD8\u6CA1\u6E32\u67D3\uFF0C\u76F4\u63A5\u6309\u884C\u9AD8\u8BA1\u7B97\u6EDA\u52A8\u4F4D\u7F6E\n if (virtualEnabled.value) {\n const height = effectiveOptionHeight.value\n const top = activeIndex.value * height\n const view = panel.value.clientHeight\n if (top < panel.value.scrollTop) {\n panel.value.scrollTop = top\n } else if (top + height > panel.value.scrollTop + view) {\n panel.value.scrollTop = top + height - view\n }\n panelScrollTop.value = panel.value.scrollTop\n return\n }\n\n const el = panel.value.querySelector('[data-index=\"' + activeIndex.value + '\"]')\n if (!el) return\n const top = el.offsetTop\n const bottom = top + el.offsetHeight\n if (top < panel.value.scrollTop) {\n panel.value.scrollTop = top\n } else if (bottom > panel.value.scrollTop + panel.value.clientHeight) {\n panel.value.scrollTop = bottom - panel.value.clientHeight\n }\n }\n\n function moveActive (step) {\n const list = visibleOptions.value\n if (!list.length) return\n if (props.disabled) return\n if (!open.value) {\n openPanel()\n return\n }\n let index = activeIndex.value\n for (let i = 0; i < list.length; i++) {\n index = (index + step + list.length) % list.length\n if (!list[index].disabled) break\n }\n activeIndex.value = index\n nextTick(scrollActiveIntoView)\n }\n\n function onInput (event) {\n query.value = event.target.value\n if (!open.value) openPanel()\n // \u641C\u7D22\u6761\u4EF6\u53D8\u5316\u540E\u56DE\u5230\u9876\u90E8\n if (panel.value) {\n panel.value.scrollTop = 0\n panelScrollTop.value = 0\n }\n activeIndex.value = firstEnabledIndex()\n nextTick(scrollActiveIntoView)\n }\n\n function onKeydown (event) {\n if (props.disabled) return\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n moveActive(1)\n break\n case 'ArrowUp':\n event.preventDefault()\n moveActive(-1)\n break\n case 'Enter':\n event.preventDefault()\n if (!open.value) openPanel()\n else selectOption(visibleOptions.value[activeIndex.value])\n break\n case 'Escape':\n if (open.value) {\n event.preventDefault()\n closePanel()\n }\n break\n case 'Tab':\n closePanel()\n break\n case 'Backspace':\n // \u591A\u9009\u4E14\u641C\u7D22\u4E3A\u7A7A\u65F6\uFF0C\u9000\u683C\u5220\u9664\u6700\u540E\u4E00\u4E2A\u6807\u7B7E\n if (props.multiple && props.filterable && !query.value && values.value.length) {\n event.preventDefault()\n removeTag(values.value[values.value.length - 1])\n }\n break\n default:\n break\n }\n }\n\n // \u7126\u70B9\u8FDB\u5165\u7EC4\u4EF6\uFF08focusin \u5192\u6CE1\uFF0Ctrigger \u4E0E\u5185\u90E8\u641C\u7D22\u6846\u90FD\u4F1A\u7ECF\u8FC7\u8FD9\u91CC\uFF1B\u5185\u90E8\u8F6C\u79FB\u4E0D\u91CD\u590D\u629B\uFF09\n function onFocusIn (event) {\n if (props.disabled) return\n const prev = event.relatedTarget\n if (prev && root.value && root.value.contains(prev)) return\n if (prev && panel.value && panel.value.contains(prev)) return\n emit('focus', event)\n }\n\n // \u7126\u70B9\u79BB\u5F00\uFF1A\u4ECD\u5728\u7EC4\u4EF6\u6216 teleport \u9762\u677F\u5185\u8F6C\u79FB\u65F6\u4E0D\u7B97 blur\n function onFocusOut (event) {\n const next = event.relatedTarget\n if (next && root.value && root.value.contains(next)) return\n if (next && panel.value && panel.value.contains(next)) return\n emit('blur', event)\n }\n\n // \u5916\u90E8\u6539\u503C\u65F6\u540C\u6B65\u9AD8\u4EAE\u9879\n watch(() => props.modelValue, () => {\n if (!open.value) activeIndex.value = -1\n })\n\n onBeforeUnmount(() => {\n if (detachPanel) {\n detachPanel()\n detachPanel = null\n }\n })\n\n return {\n instanceId,\n root,\n panel,\n panelStyle,\n searchRef,\n open,\n query,\n activeIndex,\n isGrouped,\n visibleOptions,\n visibleGroups,\n virtualEnabled,\n renderedOptions,\n optionPadTop,\n optionPadBottom,\n onPanelScroll,\n selectedOptions,\n visibleTags,\n restTagCount,\n displayText,\n placeholderText,\n emptyLabel,\n activeDescendant,\n hasValue,\n isSelected,\n toggle,\n openPanel,\n closePanel,\n onTriggerMousedown,\n selectOption,\n removeTag,\n clear,\n onInput,\n onKeydown,\n onFocusIn,\n onFocusOut,\n t\n }\n },\n template: `\n <div\n ref=\"root\"\n class=\"djm-select djm-select-custom\"\n :class=\"{\n 'djm-is-open': open,\n 'djm-is-invalid': invalid,\n 'djm-is-disabled': disabled,\n 'djm-is-multiple': multiple\n }\"\n >\n <div\n class=\"djm-select-trigger\"\n role=\"combobox\"\n :tabindex=\"disabled ? -1 : 0\"\n :aria-expanded=\"open\"\n :aria-controls=\"instanceId + '-panel'\"\n :aria-activedescendant=\"activeDescendant\"\n :aria-label=\"displayText || placeholderText\"\n aria-haspopup=\"listbox\"\n :aria-disabled=\"disabled\"\n @mousedown=\"onTriggerMousedown\"\n @keydown=\"onKeydown\"\n @focusin=\"onFocusIn\"\n @focusout=\"onFocusOut\"\n >\n <span class=\"djm-select-tags\" v-if=\"multiple && visibleTags.length\">\n <span class=\"djm-select-tag\" v-for=\"item in visibleTags\" :key=\"item.value\">\n {{ item.label }}\n <button class=\"djm-select-tag-close\" type=\"button\" :disabled=\"disabled\" :aria-label=\"'\u79FB\u9664 ' + item.label\" @click.stop=\"removeTag(item.value)\">\n <DjmIcon name=\"x\" :size=\"10\" />\n </button>\n </span>\n <span class=\"djm-select-tag djm-select-tag-more\" v-if=\"restTagCount\">+{{ restTagCount }}</span>\n </span>\n\n <input\n v-if=\"filterable\"\n ref=\"searchRef\"\n class=\"djm-select-input\"\n type=\"text\"\n autocomplete=\"off\"\n :id=\"instanceId + '-input'\"\n :name=\"instanceId\"\n :aria-label=\"placeholderText\"\n aria-autocomplete=\"list\"\n :value=\"open ? query : (multiple ? '' : displayText)\"\n :placeholder=\"visibleTags.length ? '' : placeholderText\"\n :disabled=\"disabled\"\n :readonly=\"!open\"\n autocomplete=\"off\"\n @input=\"onInput\"\n @focus=\"openPanel\"\n />\n <span\n v-else-if=\"!multiple\"\n class=\"djm-select-text\"\n :class=\"{ 'djm-select-placeholder': !displayText }\"\n >{{ displayText || placeholderText }}</span>\n <span\n v-else-if=\"!visibleTags.length\"\n class=\"djm-select-text djm-select-placeholder\"\n >{{ placeholderText }}</span>\n\n <button\n v-if=\"hasValue && clearable && !disabled && !open\"\n class=\"djm-select-clear\"\n type=\"button\"\n :title=\"t('select.clear')\"\n :aria-label=\"t('select.clear')\"\n @click.stop=\"clear\"\n >\n <DjmIcon name=\"x\" :size=\"11\" />\n </button>\n <DjmIcon v-else class=\"djm-select-arrow\" name=\"chevron-down\" :size=\"12\" />\n </div>\n\n <Teleport to=\"body\">\n <div\n v-if=\"open\"\n :id=\"instanceId + '-panel'\"\n ref=\"panel\"\n class=\"djm-select-panel\"\n :class=\"{ 'djm-is-virtual': virtualEnabled }\"\n :style=\"panelStyle\"\n role=\"listbox\"\n :aria-multiselectable=\"multiple || undefined\"\n @scroll=\"onPanelScroll\"\n >\n <!-- \u865A\u62DF\u6EDA\u52A8\u5360\u4F4D\uFF1A\u6491\u8D77\u603B\u9AD8\u5EA6\uFF0C\u8BA9\u6EDA\u52A8\u6761\u6BD4\u4F8B\u6B63\u786E -->\n <div v-if=\"optionPadTop > 0\" class=\"djm-select-pad\" :style=\"{ height: optionPadTop + 'px' }\" aria-hidden=\"true\"></div>\n\n <!-- \u5E73\u94FA\u6A21\u5F0F\uFF1A\u4FDD\u6301\u539F\u7ED3\u6784 -->\n <template v-if=\"!isGrouped\">\n <div\n v-for=\"item in renderedOptions\"\n :key=\"item.option.value\"\n class=\"djm-select-option\"\n :class=\"{\n 'djm-is-active': item.index === activeIndex,\n 'djm-is-selected': isSelected(item.option),\n 'djm-is-disabled': item.option.disabled\n }\"\n :id=\"instanceId + '-opt-' + item.index\"\n :data-index=\"item.index\"\n role=\"option\"\n :aria-selected=\"isSelected(item.option)\"\n :aria-disabled=\"item.option.disabled || undefined\"\n @click.stop=\"selectOption(item.option)\"\n @mouseenter=\"activeIndex = item.index\"\n >\n <slot name=\"option\" :option=\"item.option\" :selected=\"isSelected(item.option)\" :active=\"item.index === activeIndex\">\n <span class=\"djm-select-option-label\">{{ item.option.label }}</span>\n <DjmIcon v-if=\"isSelected(item.option)\" class=\"djm-select-option-check\" name=\"check\" :size=\"12\" />\n </slot>\n </div>\n </template>\n\n <!-- \u5206\u7EC4\u6A21\u5F0F\uFF1A\u7EC4\u5934\u4E0D\u53C2\u4E0E\u952E\u76D8\u5BFC\u822A\uFF0Cindex \u4ECD\u6309\u5E73\u94FA\u9009\u9879\u5BF9\u9F50 -->\n <template v-else>\n <div v-for=\"(group, groupIndex) in visibleGroups\" :key=\"group.label === null ? groupIndex : group.label\" class=\"djm-select-group\">\n <div v-if=\"group.label !== null\" class=\"djm-select-group-label\">{{ group.label }}</div>\n <div\n v-for=\"item in group.items\"\n :key=\"item.option.value\"\n class=\"djm-select-option\"\n :class=\"{\n 'djm-is-active': item.index === activeIndex,\n 'djm-is-selected': isSelected(item.option),\n 'djm-is-disabled': item.option.disabled\n }\"\n :id=\"instanceId + '-opt-' + item.index\"\n :data-index=\"item.index\"\n role=\"option\"\n :aria-selected=\"isSelected(item.option)\"\n :aria-disabled=\"item.option.disabled || undefined\"\n @click.stop=\"selectOption(item.option)\"\n @mouseenter=\"activeIndex = item.index\"\n >\n <slot name=\"option\" :option=\"item.option\" :selected=\"isSelected(item.option)\" :active=\"item.index === activeIndex\">\n <span class=\"djm-select-option-label\">{{ item.option.label }}</span>\n <DjmIcon v-if=\"isSelected(item.option)\" class=\"djm-select-option-check\" name=\"check\" :size=\"12\" />\n </slot>\n </div>\n </div>\n </template>\n\n <div v-if=\"optionPadBottom > 0\" class=\"djm-select-pad\" :style=\"{ height: optionPadBottom + 'px' }\" aria-hidden=\"true\"></div>\n\n <div v-if=\"!visibleOptions.length\" class=\"djm-select-empty\">{{ emptyLabel }}</div>\n </div>\n </Teleport>\n </div>\n `\n}\n", "import { reactive } from 'vue'\nimport zhCN from './zh-CN.js'\nimport enUS from './en-US.js'\n\nconst state = reactive({\n code: 'zh-CN',\n messages: { 'zh-CN': zhCN, 'en-US': enUS }\n})\n\n/** \u5207\u6362\u8BED\u8A00\uFF1Azh-CN / en-US */\nexport function setLocale (code) {\n if (state.messages[code]) state.code = code\n}\n\nexport function getLocale () {\n return state.code\n}\n\n/** \u53D6\u6587\u6848\u5E76\u505A {name} \u63D2\u503C\uFF0C\u6A21\u677F\u4E2D\u8C03\u7528\u4F1A\u81EA\u52A8\u8DDF\u968F\u8BED\u8A00\u5207\u6362 */\nexport function t (key, params) {\n const dict = state.messages[state.code] || zhCN\n // \u5141\u8BB8\u7A7A\u5B57\u7B26\u4E32\u4F5C\u4E3A\u5408\u6CD5\u8BD1\u6587\uFF0C\u4E0D\u80FD\u7528 || \u56DE\u9000\n let text = key in dict ? dict[key] : (key in zhCN ? zhCN[key] : key)\n if (params) {\n Object.keys(params).forEach((name) => {\n text = text.split('{' + name + '}').join(params[name])\n })\n }\n return text\n}\n\nexport { state as localeState }\n", "export default {\n 'common.close': '\u5173\u95ED',\n 'common.cancel': '\u53D6\u6D88',\n 'common.confirm': '\u786E\u5B9A',\n 'common.selected': '\u5DF2\u9009 {count} \u9879',\n 'common.dialog': '\u5BF9\u8BDD\u6846',\n 'common.noOptions': '\u6682\u65E0\u9009\u9879',\n 'common.removeTag': '\u79FB\u9664\u6807\u7B7E',\n\n 'pagination.total': '\u5171 {total} \u6761',\n 'pagination.pageSize': '\u6BCF\u9875 {size} \u6761',\n 'pagination.jump': '\u8DF3\u81F3',\n 'pagination.pageUnit': '\u9875',\n 'pagination.first': '\u9996\u9875',\n 'pagination.prev': '\u4E0A\u4E00\u9875',\n 'pagination.next': '\u4E0B\u4E00\u9875',\n 'pagination.last': '\u672B\u9875',\n 'pagination.page': '\u7B2C {page} \u9875',\n 'pagination.pageSizeLabel': '\u6BCF\u9875\u6761\u6570',\n 'pagination.jumpLabel': '\u8DF3\u81F3\u9875\u7801',\n\n 'table.loading': '\u6B63\u5728\u52A0\u8F7D\u6570\u636E\u2026',\n 'table.empty': '\u6682\u65E0\u6570\u636E',\n 'table.selectAll': '\u5168\u9009\u5F53\u524D\u9875',\n 'table.selectRow': '\u9009\u62E9\u8BE5\u884C',\n 'table.scrollRegion': '\u8868\u683C\u6570\u636E\u533A',\n\n 'empty.title': '\u6682\u65E0\u6570\u636E',\n\n 'datePicker.placeholder': '\u9009\u62E9\u65E5\u671F',\n 'datePicker.rangePlaceholder': '\u9009\u62E9\u65E5\u671F\u8303\u56F4',\n 'datePicker.rangeEnd': '\u7ED3\u675F\u65E5\u671F',\n 'datePicker.today': '\u4ECA\u5929',\n 'datePicker.clear': '\u6E05\u7A7A',\n 'datePicker.title': '{year} \u5E74 {month} \u6708',\n 'datePicker.weeks': '\u4E00,\u4E8C,\u4E09,\u56DB,\u4E94,\u516D,\u65E5',\n\n 'calendar.title': '{year} \u5E74 {month} \u6708',\n 'calendar.prevMonth': '\u4E0A\u4E00\u6708',\n 'calendar.nextMonth': '\u4E0B\u4E00\u6708',\n 'calendar.grid': '\u65E5\u671F',\n\n 'treeSelect.placeholder': '\u8BF7\u9009\u62E9',\n 'treeSelect.search': '\u641C\u7D22\u8282\u70B9',\n 'treeSelect.empty': '\u6CA1\u6709\u5339\u914D\u7684\u8282\u70B9',\n 'treeSelect.clear': '\u6E05\u7A7A',\n 'treeSelect.clearSearch': '\u6E05\u7A7A\u641C\u7D22',\n 'treeSelect.remove': '\u79FB\u9664 {label}',\n 'treeSelect.expand': '\u5C55\u5F00',\n 'treeSelect.collapse': '\u6536\u8D77',\n 'cascader.empty': '\u6682\u65E0\u9009\u9879',\n 'steps.order': '\u7B2C {index} \u6B65',\n\n 'password.aria': '\u5BC6\u7801',\n 'password.show': '\u663E\u793A\u5BC6\u7801',\n 'password.hide': '\u9690\u85CF\u5BC6\u7801',\n 'password.weak': '\u5F31',\n 'password.medium': '\u4E2D',\n 'password.strong': '\u5F3A',\n 'password.hint': '\u81F3\u5C11 8 \u4F4D\uFF0C\u5EFA\u8BAE\u6DF7\u5408\u5927\u5C0F\u5199\u4E0E\u7B26\u53F7',\n 'password.strength': '\u5BC6\u7801\u5F3A\u5EA6\uFF1A{level}',\n\n 'contextMenu.empty': '\u6CA1\u6709\u53EF\u6267\u884C\u7684\u64CD\u4F5C',\n\n 'tree.empty': '\u6682\u65E0\u8282\u70B9',\n\n 'confirm.title': '\u64CD\u4F5C\u786E\u8BA4',\n 'confirm.confirm': '\u786E\u5B9A',\n 'confirm.cancel': '\u53D6\u6D88',\n\n 'upload.dropText': '\u62D6\u62FD\u6587\u4EF6\u5230\u8FD9\u91CC\uFF0C\u6216\u70B9\u51FB\u9009\u62E9',\n 'upload.dropHint': '\u652F\u6301\u591A\u9009\uFF0C\u53EF\u62D6\u62FD\u6216\u70B9\u51FB\u4E0A\u4F20',\n 'upload.select': '\u9009\u62E9\u6587\u4EF6',\n 'upload.count': '\u5DF2\u6DFB\u52A0 {count} \u4E2A\u6587\u4EF6',\n 'upload.clear': '\u5168\u90E8\u79FB\u9664',\n 'upload.empty': '\u5C1A\u672A\u9009\u62E9\u6587\u4EF6',\n 'upload.uploading': '\u4E0A\u4F20\u4E2D {percent}%',\n 'upload.done': '\u4E0A\u4F20\u5B8C\u6210',\n 'upload.ready': '\u5F85\u4E0A\u4F20',\n 'upload.failed': '\u4E0A\u4F20\u5931\u8D25',\n 'upload.retry': '\u91CD\u8BD5',\n 'upload.start': '\u4E0A\u4F20',\n 'upload.remove': '\u79FB\u9664',\n 'upload.limitHint': '\u6700\u591A {count} \u4E2A\u6587\u4EF6',\n 'upload.sizeHint': '\u5355\u4E2A\u4E0D\u8D85\u8FC7 {size}',\n\n 'select.placeholder': '\u8BF7\u9009\u62E9',\n 'select.empty': '\u65E0\u5339\u914D\u9879',\n 'select.clear': '\u6E05\u7A7A',\n\n 'orgPicker.placeholder': '\u9009\u62E9\u4EBA\u5458',\n 'orgPicker.title': '\u9009\u62E9\u4EBA\u5458',\n 'orgPicker.search': '\u641C\u7D22\u59D3\u540D\u6216\u804C\u4F4D',\n 'orgPicker.deptTree': '\u90E8\u95E8',\n 'orgPicker.allStaff': '\u5168\u90E8\u4EBA\u5458',\n 'orgPicker.expand': '\u5C55\u5F00\u6216\u6536\u8D77\u90E8\u95E8',\n 'orgPicker.selected': '\u5DF2\u9009 {count} \u4EBA',\n 'orgPicker.clearSelected': '\u6E05\u7A7A\u5DF2\u9009',\n 'orgPicker.clear': '\u6E05\u7A7A',\n 'orgPicker.empty': '\u6CA1\u6709\u5339\u914D\u7684\u4EBA\u5458',\n\n 'queryFilter.search': '\u67E5\u8BE2',\n 'queryFilter.reset': '\u91CD\u7F6E',\n 'queryFilter.expand': '\u5C55\u5F00',\n 'queryFilter.collapse': '\u6536\u8D77',\n\n 'mediaPicker.select': '\u9009\u62E9\u7D20\u6750',\n 'mediaPicker.title': '\u5A92\u4F53\u5E93',\n 'mediaPicker.search': '\u641C\u7D22\u7D20\u6750\u540D\u79F0',\n 'mediaPicker.empty': '\u6CA1\u6709\u5339\u914D\u7684\u7D20\u6750',\n 'mediaPicker.total': '\u5171 {total} \u4E2A\u7D20\u6750',\n 'mediaPicker.limit': '\u6700\u591A\u9009 {limit} \u4E2A',\n\n 'image.preview': '\u9884\u89C8\u56FE\u7247',\n 'image.close': '\u5173\u95ED\u9884\u89C8',\n 'image.dialog': '\u56FE\u7247\u9884\u89C8',\n 'image.failed': '\u56FE\u7247\u52A0\u8F7D\u5931\u8D25',\n\n 'tour.label': '\u64CD\u4F5C\u5F15\u5BFC',\n 'tour.close': '\u5173\u95ED\u5F15\u5BFC',\n 'tour.prev': '\u4E0A\u4E00\u6B65',\n 'tour.next': '\u4E0B\u4E00\u6B65',\n 'tour.finish': '\u5B8C\u6210',\n\n 'richEditor.aria': '\u5BCC\u6587\u672C\u7F16\u8F91\u5668',\n 'richEditor.placeholder': '\u8BF7\u8F93\u5165\u5185\u5BB9\u2026',\n 'richEditor.bold': '\u52A0\u7C97',\n 'richEditor.italic': '\u659C\u4F53',\n 'richEditor.underline': '\u4E0B\u5212\u7EBF',\n 'richEditor.strike': '\u5220\u9664\u7EBF',\n 'richEditor.heading': '\u4E8C\u7EA7\u6807\u9898',\n 'richEditor.paragraph': '\u6B63\u6587',\n 'richEditor.bulletList': '\u65E0\u5E8F\u5217\u8868',\n 'richEditor.numberList': '\u6709\u5E8F\u5217\u8868',\n 'richEditor.link': '\u63D2\u5165\u94FE\u63A5',\n 'richEditor.linkPrompt': '\u8BF7\u8F93\u5165\u94FE\u63A5\u5730\u5740',\n 'richEditor.clearFormat': '\u6E05\u9664',\n 'richEditor.undo': '\u64A4\u9500',\n 'richEditor.redo': '\u91CD\u505A',\n 'richEditor.source': '\u6E90\u7801',\n 'richEditor.visual': '\u53EF\u89C6\u5316',\n\n 'approval.start': '\u53D1\u8D77',\n 'approval.cc': '\u6284\u9001',\n 'approval.approved': '\u5DF2\u901A\u8FC7',\n 'approval.rejected': '\u5DF2\u9A73\u56DE',\n 'approval.pending': '\u5BA1\u6279\u4E2D',\n 'approval.waiting': '\u5F85\u5904\u7406',\n 'approval.empty': '\u6682\u65E0\u5BA1\u6279\u8BB0\u5F55',\n\n 'kanban.board': '\u770B\u677F',\n 'kanban.empty': '\u6682\u65E0\u5361\u7247',\n 'kanban.addCard': '\u65B0\u5EFA\u5361\u7247',\n\n 'attachment.empty': '\u6682\u65E0\u9644\u4EF6',\n 'attachment.preview': '\u9884\u89C8',\n 'attachment.download': '\u4E0B\u8F7D',\n 'attachment.remove': '\u5220\u9664',\n\n 'notification.unread': '\u672A\u8BFB {count} \u6761',\n 'notification.readAll': '\u5168\u90E8\u5DF2\u8BFB',\n 'notification.clear': '\u6E05\u7A7A',\n 'notification.clearConfirm': '\u786E\u8BA4\u6E05\u7A7A',\n 'notification.empty': '\u6682\u65E0\u901A\u77E5',\n\n 'dateTimePicker.placeholder': '\u9009\u62E9\u65E5\u671F\u65F6\u95F4',\n 'dateTimePicker.now': '\u6B64\u523B',\n 'dateTimePicker.clear': '\u6E05\u7A7A',\n 'dateTimePicker.prevMonth': '\u4E0A\u4E2A\u6708',\n 'dateTimePicker.nextMonth': '\u4E0B\u4E2A\u6708',\n\n 'virtualList.empty': '\u6682\u65E0\u6570\u636E',\n\n 'batchBar.selected': '\u5DF2\u9009 {count} \u9879',\n 'batchBar.selectAll': '\u5168\u9009 {total} \u9879',\n 'batchBar.clear': '\u53D6\u6D88\u9009\u62E9',\n\n 'importWizard.stepFile': '\u9009\u62E9\u6587\u4EF6',\n 'importWizard.stepMapping': '\u5B57\u6BB5\u6620\u5C04',\n 'importWizard.stepResult': '\u5BFC\u5165\u7ED3\u679C',\n 'importWizard.pick': '\u9009\u62E9\u6587\u4EF6',\n 'importWizard.dragTip': '\u628A\u6587\u4EF6\u62D6\u5230\u8FD9\u91CC\uFF0C\u6216\u70B9\u51FB\u9009\u62E9\uFF08{accept}\uFF09',\n 'importWizard.acceptError': '\u4EC5\u652F\u6301 {accept} \u683C\u5F0F',\n 'importWizard.sizeError': '\u6587\u4EF6\u4E0D\u80FD\u8D85\u8FC7 {size} MB',\n 'importWizard.reselect': '\u91CD\u65B0\u9009\u62E9',\n 'importWizard.sourcePlaceholder': '\u8BF7\u9009\u62E9\u5BF9\u5E94\u7684\u6587\u4EF6\u5B57\u6BB5',\n 'importWizard.missingRequired': '\u5FC5\u586B\u5B57\u6BB5\u672A\u6620\u5C04\uFF1A{fields}',\n 'importWizard.prev': '\u4E0A\u4E00\u6B65',\n 'importWizard.submit': '\u5F00\u59CB\u5BFC\u5165',\n 'importWizard.importing': '\u5BFC\u5165\u4E2D\u2026',\n 'importWizard.statTotal': '\u603B\u6761\u6570',\n 'importWizard.statSuccess': '\u6210\u529F',\n 'importWizard.statFailed': '\u5931\u8D25',\n 'importWizard.rowNo': '\u7B2C {row} \u884C',\n 'importWizard.retry': '\u8FD4\u56DE\u4FEE\u6539',\n 'importWizard.restart': '\u91CD\u65B0\u5BFC\u5165',\n\n 'diff.before': '\u4FEE\u6539\u524D',\n 'diff.after': '\u4FEE\u6539\u540E',\n 'diff.same': '\u5185\u5BB9\u4E00\u81F4',\n 'diff.expand': '\u5C55\u5F00 {count} \u884C\u672A\u53D8\u66F4\u5185\u5BB9',\n\n 'treeTable.empty': '\u6682\u65E0\u6570\u636E',\n 'treeTable.loading': '\u6B63\u5728\u52A0\u8F7D\u2026',\n 'treeTable.selectAll': '\u5168\u9009',\n 'treeTable.expand': '\u5C55\u5F00',\n 'treeTable.collapse': '\u6536\u8D77',\n\n 'schedule.title': '\u65E5\u7A0B',\n 'schedule.weekdays': '\u5468\u4E00,\u5468\u4E8C,\u5468\u4E09,\u5468\u56DB,\u5468\u4E94,\u5468\u516D,\u5468\u65E5',\n 'schedule.prevWeek': '\u4E0A\u4E00\u5468',\n 'schedule.nextWeek': '\u4E0B\u4E00\u5468',\n 'schedule.today': '\u672C\u5468',\n\n 'comment.placeholder': '\u8BF4\u70B9\u4EC0\u4E48\u2026',\n 'comment.replyPlaceholder': '\u56DE\u590D {name}',\n 'comment.replyingTo': '\u6B63\u5728\u56DE\u590D {name}',\n 'comment.cancelReply': '\u53D6\u6D88\u56DE\u590D',\n 'comment.submit': '\u53D1\u5E03',\n 'comment.submitting': '\u53D1\u5E03\u4E2D\u2026',\n 'comment.reply': '\u56DE\u590D',\n 'comment.remove': '\u5220\u9664',\n 'comment.empty': '\u8FD8\u6CA1\u6709\u8BC4\u8BBA',\n\n 'signature.label': '\u624B\u5199\u7B7E\u540D',\n 'signature.hint': '\u8BF7\u5728\u6B64\u5904\u7B7E\u540D',\n 'signature.clear': '\u6E05\u7A7A',\n\n 'print.button': '\u6253\u5370',\n\n 'gantt.task': '\u4EFB\u52A1',\n 'gantt.empty': '\u6682\u65E0\u4EFB\u52A1',\n\n 'fieldList.add': '\u6DFB\u52A0\u4E00\u884C',\n 'fieldList.remove': '\u5220\u9664\u8FD9\u4E00\u884C',\n 'fieldList.empty': '\u6682\u65E0\u6570\u636E',\n 'fieldList.select': '\u8BF7\u9009\u62E9',\n 'fieldList.required': '{label}\u4E0D\u80FD\u4E3A\u7A7A',\n\n 'chat.label': '\u6D88\u606F\u5217\u8868',\n 'chat.placeholder': '\u8F93\u5165\u6D88\u606F\uFF0CEnter \u53D1\u9001',\n 'chat.send': '\u53D1\u9001',\n 'chat.sending': '\u53D1\u9001\u4E2D\u2026',\n 'chat.failed': '\u53D1\u9001\u5931\u8D25',\n 'chat.empty': '\u6682\u65E0\u6D88\u606F',\n 'chat.image': '\u56FE\u7247\u6D88\u606F',\n 'chat.me': '\u6211',\n\n 'orgChart.empty': '\u6682\u65E0\u7EC4\u7EC7\u6570\u636E',\n 'orgChart.toggle': '\u5C55\u5F00\u6216\u6536\u8D77',\n\n 'pageTabs.label': '\u9875\u9762\u6807\u7B7E',\n 'pageTabs.close': '\u5173\u95ED'\n}\n", "export default {\n 'common.close': 'Close',\n 'common.cancel': 'Cancel',\n 'common.confirm': 'OK',\n 'common.selected': '{count} selected',\n 'common.dialog': 'Dialog',\n 'common.noOptions': 'No options',\n 'common.removeTag': 'Remove tag',\n\n 'pagination.total': '{total} items',\n 'pagination.pageSize': '{size} / page',\n 'pagination.jump': 'Go to',\n 'pagination.pageUnit': '',\n 'pagination.first': 'First',\n 'pagination.prev': 'Previous',\n 'pagination.next': 'Next',\n 'pagination.last': 'Last',\n 'pagination.page': 'Page {page}',\n 'pagination.pageSizeLabel': 'Rows per page',\n 'pagination.jumpLabel': 'Go to page',\n\n 'table.loading': 'Loading\u2026',\n 'table.empty': 'No data',\n 'table.selectAll': 'Select all rows',\n 'table.selectRow': 'Select row',\n 'table.scrollRegion': 'Table data',\n\n 'empty.title': 'No data',\n\n 'datePicker.placeholder': 'Select date',\n 'datePicker.rangePlaceholder': 'Select date range',\n 'datePicker.rangeEnd': 'End date',\n 'datePicker.today': 'Today',\n 'datePicker.clear': 'Clear',\n 'datePicker.title': '{month}/{year}',\n 'datePicker.weeks': 'Mo,Tu,We,Th,Fr,Sa,Su',\n\n 'calendar.title': '{month}/{year}',\n 'calendar.prevMonth': 'Previous month',\n 'calendar.nextMonth': 'Next month',\n 'calendar.grid': 'Dates',\n\n 'treeSelect.placeholder': 'Please select',\n 'treeSelect.search': 'Search',\n 'treeSelect.empty': 'No matching nodes',\n 'treeSelect.clear': 'Clear',\n 'treeSelect.clearSearch': 'Clear search',\n 'treeSelect.remove': 'Remove {label}',\n 'treeSelect.expand': 'Expand',\n 'treeSelect.collapse': 'Collapse',\n 'cascader.empty': 'No options',\n 'steps.order': 'Step {index}',\n\n 'password.aria': 'Password',\n 'password.show': 'Show password',\n 'password.hide': 'Hide password',\n 'password.weak': 'Weak',\n 'password.medium': 'Medium',\n 'password.strong': 'Strong',\n 'password.hint': 'At least 8 characters, mix upper and lower case with symbols',\n 'password.strength': 'Password strength: {level}',\n\n 'contextMenu.empty': 'No actions available',\n\n 'tree.empty': 'No nodes',\n\n 'confirm.title': 'Confirm',\n 'confirm.confirm': 'OK',\n 'confirm.cancel': 'Cancel',\n\n 'upload.dropText': 'Drop files here, or click to select',\n 'upload.dropHint': 'Multiple files supported',\n 'upload.select': 'Select files',\n 'upload.count': '{count} files added',\n 'upload.clear': 'Remove all',\n 'upload.empty': 'No files selected',\n 'upload.uploading': 'Uploading {percent}%',\n 'upload.done': 'Uploaded',\n 'upload.ready': 'Pending',\n 'upload.failed': 'Upload failed',\n 'upload.retry': 'Retry',\n 'upload.start': 'Upload',\n 'upload.remove': 'Remove',\n 'upload.limitHint': 'Up to {count} files',\n 'upload.sizeHint': 'Max {size} each',\n\n 'select.placeholder': 'Please select',\n 'select.empty': 'No matches',\n 'select.clear': 'Clear',\n\n 'orgPicker.placeholder': 'Select people',\n 'orgPicker.title': 'Select people',\n 'orgPicker.search': 'Search name or title',\n 'orgPicker.deptTree': 'Departments',\n 'orgPicker.allStaff': 'All people',\n 'orgPicker.expand': 'Expand or collapse department',\n 'orgPicker.selected': '{count} selected',\n 'orgPicker.clearSelected': 'Clear',\n 'orgPicker.clear': 'Clear',\n 'orgPicker.empty': 'No matching people',\n\n 'queryFilter.search': 'Search',\n 'queryFilter.reset': 'Reset',\n 'queryFilter.expand': 'More',\n 'queryFilter.collapse': 'Less',\n\n 'mediaPicker.select': 'Choose asset',\n 'mediaPicker.title': 'Media library',\n 'mediaPicker.search': 'Search assets',\n 'mediaPicker.empty': 'No matching assets',\n 'mediaPicker.total': '{total} assets',\n 'mediaPicker.limit': 'up to {limit}',\n\n 'image.preview': 'Preview image',\n 'image.close': 'Close preview',\n 'image.dialog': 'Image preview',\n 'image.failed': 'Failed to load image',\n\n 'tour.label': 'Guided tour',\n 'tour.close': 'Close tour',\n 'tour.prev': 'Previous',\n 'tour.next': 'Next',\n 'tour.finish': 'Done',\n\n 'richEditor.aria': 'Rich text editor',\n 'richEditor.placeholder': 'Type something\u2026',\n 'richEditor.bold': 'Bold',\n 'richEditor.italic': 'Italic',\n 'richEditor.underline': 'Underline',\n 'richEditor.strike': 'Strikethrough',\n 'richEditor.heading': 'Heading 2',\n 'richEditor.paragraph': 'Paragraph',\n 'richEditor.bulletList': 'Bullet list',\n 'richEditor.numberList': 'Numbered list',\n 'richEditor.link': 'Insert link',\n 'richEditor.linkPrompt': 'Enter link URL',\n 'richEditor.clearFormat': 'Clear',\n 'richEditor.undo': 'Undo',\n 'richEditor.redo': 'Redo',\n 'richEditor.source': 'Source',\n 'richEditor.visual': 'Visual',\n\n 'approval.start': 'Started',\n 'approval.cc': 'CC',\n 'approval.approved': 'Approved',\n 'approval.rejected': 'Rejected',\n 'approval.pending': 'In review',\n 'approval.waiting': 'Waiting',\n 'approval.empty': 'No approval records',\n\n 'kanban.board': 'Kanban board',\n 'kanban.empty': 'No cards',\n 'kanban.addCard': 'Add card',\n\n 'attachment.empty': 'No attachments',\n 'attachment.preview': 'Preview',\n 'attachment.download': 'Download',\n 'attachment.remove': 'Remove',\n\n 'notification.unread': '{count} unread',\n 'notification.readAll': 'Mark all read',\n 'notification.clear': 'Clear all',\n 'notification.clearConfirm': 'Confirm clear',\n 'notification.empty': 'No notifications',\n\n 'dateTimePicker.placeholder': 'Select date and time',\n 'dateTimePicker.now': 'Now',\n 'dateTimePicker.clear': 'Clear',\n 'dateTimePicker.prevMonth': 'Previous month',\n 'dateTimePicker.nextMonth': 'Next month',\n\n 'virtualList.empty': 'No data',\n\n 'batchBar.selected': '{count} selected',\n 'batchBar.selectAll': 'Select all {total}',\n 'batchBar.clear': 'Clear selection',\n\n 'importWizard.stepFile': 'Choose file',\n 'importWizard.stepMapping': 'Map fields',\n 'importWizard.stepResult': 'Result',\n 'importWizard.pick': 'Choose a file',\n 'importWizard.dragTip': 'Drop a file here or click to choose ({accept})',\n 'importWizard.acceptError': 'Only {accept} files are allowed',\n 'importWizard.sizeError': 'File must be under {size} MB',\n 'importWizard.reselect': 'Choose another',\n 'importWizard.sourcePlaceholder': 'Select a source column',\n 'importWizard.missingRequired': 'Required fields not mapped: {fields}',\n 'importWizard.prev': 'Back',\n 'importWizard.submit': 'Start import',\n 'importWizard.importing': 'Importing\u2026',\n 'importWizard.statTotal': 'Total',\n 'importWizard.statSuccess': 'Succeeded',\n 'importWizard.statFailed': 'Failed',\n 'importWizard.rowNo': 'Row {row}',\n 'importWizard.retry': 'Back to edit',\n 'importWizard.restart': 'Import again',\n\n 'diff.before': 'Before',\n 'diff.after': 'After',\n 'diff.same': 'No changes',\n 'diff.expand': 'Show {count} unchanged lines',\n\n 'treeTable.empty': 'No data',\n 'treeTable.loading': 'Loading\u2026',\n 'treeTable.selectAll': 'Select all',\n 'treeTable.expand': 'Expand',\n 'treeTable.collapse': 'Collapse',\n\n 'schedule.title': 'Schedule',\n 'schedule.weekdays': 'Mon,Tue,Wed,Thu,Fri,Sat,Sun',\n 'schedule.prevWeek': 'Previous week',\n 'schedule.nextWeek': 'Next week',\n 'schedule.today': 'This week',\n\n 'comment.placeholder': 'Write a comment\u2026',\n 'comment.replyPlaceholder': 'Reply to {name}',\n 'comment.replyingTo': 'Replying to {name}',\n 'comment.cancelReply': 'Cancel reply',\n 'comment.submit': 'Post',\n 'comment.submitting': 'Posting\u2026',\n 'comment.reply': 'Reply',\n 'comment.remove': 'Delete',\n 'comment.empty': 'No comments yet',\n\n 'signature.label': 'Signature',\n 'signature.hint': 'Sign here',\n 'signature.clear': 'Clear',\n\n 'print.button': 'Print',\n\n 'gantt.task': 'Task',\n 'gantt.empty': 'No tasks',\n\n 'fieldList.add': 'Add row',\n 'fieldList.remove': 'Remove row',\n 'fieldList.empty': 'No rows',\n 'fieldList.select': 'Select',\n 'fieldList.required': '{label} is required',\n\n 'chat.label': 'Messages',\n 'chat.placeholder': 'Type a message, Enter to send',\n 'chat.send': 'Send',\n 'chat.sending': 'Sending\u2026',\n 'chat.failed': 'Failed',\n 'chat.empty': 'No messages',\n 'chat.image': 'Image message',\n 'chat.me': 'Me',\n\n 'orgChart.empty': 'No organization data',\n 'orgChart.toggle': 'Expand or collapse',\n\n 'pageTabs.label': 'Page tabs',\n 'pageTabs.close': 'Close'\n}\n", "/**\n * \u6D6E\u5C42\u9762\u677F\u516C\u5171\u903B\u8F91\n * \u4F9B Select / Cascader / TimePicker / ColorPicker / AutoComplete / Mentions\n * / Popover / Popconfirm / Dropdown / TreeSelect \u7B49\u5E26\u6D6E\u5C42\u7684\u7EC4\u4EF6\u5171\u7528\uFF1A\n * - bindPanelListeners\uFF1A\u6253\u5F00\u65F6\u6302\u5168\u5C40\u76D1\u542C\uFF08\u5916\u90E8\u70B9\u51FB / Esc / resize / scroll\uFF09\uFF0C\u8FD4\u56DE\u89E3\u7ED1\u51FD\u6570\n * - shouldFlipUp + dropdownPanelStyle\uFF1Afixed \u5B9A\u4F4D\u4E0E\u4E0A\u4E0B\u7FFB\u8F6C\n * \u5404\u7EC4\u4EF6\u7684 open \u72B6\u6001\u4E0E\u4E1A\u52A1\u5DEE\u5F02\u4ECD\u7531\u7EC4\u4EF6\u81EA\u5DF1\u7BA1\u7406\n */\n\n// \u9762\u677F\u5173\u95ED\u540E\u7684\u5360\u4F4D\u6837\u5F0F\uFF1A\u79FB\u51FA\u89C6\u53E3\u5E76\u9690\u85CF\uFF0C\u907F\u514D\u4E0B\u6B21\u6253\u5F00\u65F6\u4F4D\u7F6E\u95EA\u70C1\nexport const PANEL_HIDDEN_STYLE = { position: 'fixed', left: '0px', top: '0px', visibility: 'hidden' }\n\n/**\n * \u7ED1\u5B9A\u6D6E\u5C42\u5168\u5C40\u76D1\u542C\uFF0C\u8FD4\u56DE\u89E3\u7ED1\u51FD\u6570\n * root / panel \u4F20\u5143\u7D20\u6216 getter \u51FD\u6570\uFF08\u517C\u5BB9 Options API \u7684 $refs \u52A8\u6001\u89E3\u6790\uFF09\n * \u70B9\u51FB root \u6216 panel \u5185\u90E8\u4E0D\u7B97\u5916\u90E8\u70B9\u51FB\uFF1Besc \u4E3A false \u65F6\u4E0D\u6302 keydown\uFF08\u7EC4\u4EF6\u81EA\u884C\u5904\u7406 Esc\uFF09\n */\nexport function bindPanelListeners ({ root, panel, onClose, onReposition, esc = true }) {\n const el = (ref) => (typeof ref === 'function' ? ref() : ref)\n function onDocumentMousedown (event) {\n const rootEl = el(root)\n const panelEl = el(panel)\n if (rootEl && rootEl.contains(event.target)) return\n if (panelEl && panelEl.contains(event.target)) return\n onClose()\n }\n function onKeydown (event) {\n if (event.key === 'Escape') onClose()\n }\n document.addEventListener('mousedown', onDocumentMousedown, true)\n if (esc) document.addEventListener('keydown', onKeydown)\n if (onReposition) {\n window.addEventListener('resize', onReposition)\n window.addEventListener('scroll', onReposition, true)\n }\n return function detachPanelListeners () {\n document.removeEventListener('mousedown', onDocumentMousedown, true)\n if (esc) document.removeEventListener('keydown', onKeydown)\n if (onReposition) {\n window.removeEventListener('resize', onReposition)\n window.removeEventListener('scroll', onReposition, true)\n }\n }\n}\n\n/**\n * \u7FFB\u8F6C\u5224\u5B9A\uFF1A\u4E0B\u65B9\u653E\u4E0D\u4E0B\uFF08\u9762\u677F\u9AD8 + \u95F4\u8DDD\uFF09\u4E14\u4E0A\u65B9\u7A7A\u95F4\u8DB3\u591F\u65F6\u5411\u4E0A\u5C55\u5F00\n */\nexport function shouldFlipUp (rect, panelHeight) {\n return window.innerHeight - rect.bottom < panelHeight + 8 && rect.top > panelHeight\n}\n\n/**\n * \u7EC4\u88C5 fixed \u9762\u677F\u6837\u5F0F\n * flip \u5411\u4E0A\u5C55\u5F00\uFF1Bgap \u4E0E\u89E6\u53D1\u5668\u95F4\u8DDD\uFF1Bwidth \u56FA\u5B9A\u9762\u677F\u5BBD\u5EA6\uFF1B\n * clampWidth \u63D0\u4F9B\u65F6\u628A left \u6536\u8FDB\u89C6\u53E3\uFF08\u5DE6\u53F3\u5404\u7559 8px\uFF09\n */\nexport function dropdownPanelStyle ({ rect, flip, gap = 4, width, clampWidth, maxHeight }) {\n const style = { position: 'fixed', visibility: 'visible' }\n let left = rect.left\n if (clampWidth != null) left = Math.max(8, Math.min(rect.left, window.innerWidth - clampWidth - 8))\n style.left = left + 'px'\n if (width != null) style.width = width + 'px'\n if (flip) {\n style.bottom = window.innerHeight - rect.top + gap + 'px'\n style.top = 'auto'\n } else {\n style.top = rect.bottom + gap + 'px'\n style.bottom = 'auto'\n }\n if (maxHeight != null) style.maxHeight = maxHeight + 'px'\n return style\n}\n", "/**\n * \u590D\u9009\u6846\uFF1A\u590D\u7528 djm-check \u6837\u5F0F\n * - \u5355\u4E2A\u4F7F\u7528\uFF1Av-model \u4E3A Boolean\n * - \u7EC4\u5408\u4F7F\u7528\uFF1Av-model \u4E3A Array\uFF0C\u914D\u5408 value \u4F7F\u7528\n * - \u9009\u9879\u7EC4\uFF1A\u4F20 options\uFF0C\u4E00\u6B21\u6E32\u67D3\u591A\u4E2A\uFF0C\u652F\u6301 min / max \u9650\u5236\n * \u7528\u6CD5\uFF1A<DjmCheckbox v-model=\"checked\" label=\"\u8BB0\u4F4F\u6211\" />\n * <DjmCheckbox v-model=\"list\" :options=\"['\u90AE\u4EF6', '\u77ED\u4FE1']\" :max=\"2\" />\n */\nexport default {\n name: 'DjmCheckbox',\n props: {\n modelValue: { type: [Boolean, Array], default: false },\n value: { type: [String, Number, Boolean], default: undefined },\n label: { type: String, default: '' },\n disabled: { type: Boolean, default: false },\n // \u9009\u9879\u7EC4\uFF1A['\u9009\u9879'] \u6216 [{ label, value, disabled }]\n options: { type: Array, default: () => [] },\n // \u6392\u5217\u65B9\u5411\uFF1Ahorizontal | vertical\n direction: { type: String, default: 'horizontal' },\n // \u7EC4\u6A21\u5F0F\u4E0B\u7684\u6700\u5C11 / \u6700\u591A\u9009\u4E2D\u6570\uFF0C0 \u8868\u793A\u4E0D\u9650\u5236\n min: { type: Number, default: 0 },\n max: { type: Number, default: 0 }\n },\n emits: ['update:modelValue', 'change', 'exceed'],\n computed: {\n isGroup () {\n return Array.isArray(this.modelValue)\n },\n current () {\n return this.isGroup ? this.modelValue : []\n },\n checked () {\n return this.isGroup ? this.modelValue.includes(this.value) : this.modelValue\n },\n normalizedOptions () {\n return this.options.map((item) => {\n if (item && typeof item === 'object') {\n return { label: item.label, value: item.value, disabled: Boolean(item.disabled) }\n }\n return { label: item, value: item, disabled: false }\n })\n }\n },\n methods: {\n update (next) {\n this.$emit('update:modelValue', next)\n this.$emit('change', next)\n },\n onChange (event) {\n if (this.isGroup) {\n const next = event.target.checked\n ? [...this.modelValue, this.value]\n : this.modelValue.filter((item) => item !== this.value)\n this.update(next)\n } else {\n this.update(event.target.checked)\n }\n },\n isChecked (optionValue) {\n return this.current.includes(optionValue)\n },\n toggleOption (option, event) {\n const next = event.target.checked\n ? [...this.current, option.value]\n : this.current.filter((item) => item !== option.value)\n\n // \u8D85\u51FA\u4E0A\u9650\u6216\u4F4E\u4E8E\u4E0B\u9650\u65F6\u56DE\u6EDA\u52FE\u9009\u72B6\u6001\uFF0C\u5E76\u629B\u51FA exceed\n if (event.target.checked && this.max > 0 && next.length > this.max) {\n event.target.checked = false\n this.$emit('exceed', { type: 'max', max: this.max, value: option.value })\n return\n }\n if (!event.target.checked && this.min > 0 && next.length < this.min) {\n event.target.checked = true\n this.$emit('exceed', { type: 'min', min: this.min, value: option.value })\n return\n }\n this.update(next)\n }\n },\n template: `\n <div v-if=\"options.length\" class=\"djm-check-group\" :class=\"'djm-is-' + direction\" role=\"group\">\n <label\n v-for=\"option in normalizedOptions\"\n :key=\"option.value\"\n class=\"djm-check\"\n :class=\"{ 'djm-is-disabled': disabled || option.disabled }\"\n >\n <input\n type=\"checkbox\"\n :checked=\"isChecked(option.value)\"\n :disabled=\"disabled || option.disabled\"\n @change=\"toggleOption(option, $event)\"\n />\n <span>{{ option.label }}</span>\n </label>\n </div>\n\n <label v-else class=\"djm-check\">\n <input\n type=\"checkbox\"\n :checked=\"checked\"\n :disabled=\"disabled\"\n @change=\"onChange\"\n />\n <span><slot>{{ label }}</slot></span>\n </label>\n `\n}\n", "let uid = 0\n\n/**\n * \u5355\u9009\u6846\uFF1A\u590D\u7528 djm-radio \u6837\u5F0F\uFF0C\u540C\u4E00\u7EC4\u5171\u7528\u540C\u4E00\u4E2A v-model\n * - \u5355\u4E2A\uFF1A<DjmRadio v-model=\"type\" value=\"a\" label=\"\u9009\u9879 A\" />\n * - \u9009\u9879\u7EC4\uFF1A<DjmRadio v-model=\"type\" :options=\"['A', 'B']\" />\n * name \u7528\u4E8E\u539F\u751F\u5206\u7EC4\uFF0C\u540C\u4E00\u9875\u9762\u591A\u7EC4\u5355\u9009\u65F6\u5EFA\u8BAE\u663E\u5F0F\u4F20\u5165\n */\nexport default {\n name: 'DjmRadio',\n props: {\n modelValue: { type: [String, Number, Boolean], default: '' },\n value: { type: [String, Number, Boolean], default: undefined },\n label: { type: String, default: '' },\n disabled: { type: Boolean, default: false },\n // \u9009\u9879\u7EC4\uFF1A['\u9009\u9879'] \u6216 [{ label, value, disabled }]\n options: { type: Array, default: () => [] },\n // \u6392\u5217\u65B9\u5411\uFF1Ahorizontal | vertical\n direction: { type: String, default: 'horizontal' },\n // \u539F\u751F name\uFF0C\u4E0D\u4F20\u5219\u81EA\u52A8\u751F\u6210\n name: { type: String, default: '' }\n },\n emits: ['update:modelValue', 'change'],\n data () {\n // \u6BCF\u4E2A\u5B9E\u4F8B\u4E00\u4E2A\u5206\u7EC4\u540D\uFF0C\u907F\u514D\u540C\u9875\u591A\u7EC4\u5355\u9009\u4E92\u76F8\u53D6\u6D88\n uid += 1\n return { radioUid: uid }\n },\n computed: {\n groupName () {\n return this.name || 'djm-radio-' + this.radioUid\n },\n normalizedOptions () {\n return this.options.map((item) => {\n if (item && typeof item === 'object') {\n return { label: item.label, value: item.value, disabled: Boolean(item.disabled) }\n }\n return { label: item, value: item, disabled: false }\n })\n }\n },\n methods: {\n select (value, event) {\n this.$emit('update:modelValue', value)\n this.$emit('change', event)\n },\n onChange (event) {\n this.select(this.value, event)\n }\n },\n template: `\n <div v-if=\"options.length\" class=\"djm-radio-group\" :class=\"'djm-is-' + direction\" role=\"radiogroup\">\n <label\n v-for=\"option in normalizedOptions\"\n :key=\"option.value\"\n class=\"djm-radio\"\n :class=\"{ 'djm-is-disabled': disabled || option.disabled }\"\n >\n <input\n type=\"radio\"\n :name=\"groupName\"\n :value=\"option.value\"\n :checked=\"modelValue === option.value\"\n :disabled=\"disabled || option.disabled\"\n @change=\"select(option.value, $event)\"\n />\n <span>{{ option.label }}</span>\n </label>\n </div>\n\n <label v-else class=\"djm-radio\">\n <input\n type=\"radio\"\n :name=\"groupName\"\n :value=\"value\"\n :checked=\"modelValue === value\"\n :disabled=\"disabled\"\n @change=\"onChange\"\n />\n <span><slot>{{ label }}</slot></span>\n </label>\n `\n}\n", "/**\n * \u5F00\u5173\uFF1A\u590D\u7528 djm-switch \u6837\u5F0F\uFF0C\u53F3\u4FA7\u53EF\u663E\u793A\u72B6\u6001\u6587\u6848\n * \u7528\u6CD5\uFF1A<DjmSwitch v-model=\"enabled\" label=\"\u542F\u7528\u72B6\u6001\" />\n * \u8868\u683C\u7B49\u65E0\u53EF\u89C1\u6587\u6848\u7684\u573A\u666F\u7528 aria-label \u8865\u9F50\u65E0\u969C\u788D\u540D\u79F0\n */\nexport default {\n name: 'DjmSwitch',\n props: {\n modelValue: { type: Boolean, default: false },\n label: { type: String, default: '' },\n // \u65E0\u53EF\u89C1\u6587\u6848\u65F6\u7684\u65E0\u969C\u788D\u540D\u79F0\n ariaLabel: { type: String, default: '' },\n disabled: { type: Boolean, default: false }\n },\n emits: ['update:modelValue', 'change'],\n methods: {\n onChange (event) {\n this.$emit('update:modelValue', event.target.checked)\n this.$emit('change', event)\n }\n },\n computed: {\n hasLabel () {\n return Boolean(this.label) || Boolean(this.$slots.default)\n }\n },\n template: `\n <label class=\"djm-switch\" :class=\"{ 'djm-is-disabled': disabled }\">\n <input\n type=\"checkbox\"\n :checked=\"modelValue\"\n :disabled=\"disabled\"\n :aria-label=\"hasLabel ? undefined : (ariaLabel || undefined)\"\n @change=\"onChange\"\n />\n <span class=\"djm-switch-track\"><i></i></span>\n <em v-if=\"hasLabel\"><slot>{{ label }}</slot></em>\n </label>\n `\n}\n", "import { computed, reactive, provide } from 'vue'\n\n/**\n * \u8868\u5355\u5BB9\u5668\uFF1A\u7EDF\u4E00\u7F51\u683C\u3001\u63D0\u4EA4\u4E0E\u6821\u9A8C\n * \u7528\u6CD5\uFF1A\n * <DjmForm ref=\"formRef\" :model=\"model\" :rules=\"rules\" @submit=\"save\">\n * <DjmFormItem label=\"\u59D3\u540D\" prop=\"name\"><DjmInput v-model=\"model.name\" /></DjmFormItem>\n * </DjmForm>\n */\nexport default {\n name: 'DjmForm',\n props: {\n model: { type: Object, default: () => ({}) },\n // rules: { name: [{ required: true, message: '\u8BF7\u8F93\u5165\u59D3\u540D' }] }\n rules: { type: Object, default: () => ({}) },\n // \u6807\u7B7E\u5728\u5DE6\u4FA7\u65F6\u7684\u5BBD\u5EA6\uFF0C\u8BBE\u7F6E\u540E\u8868\u5355\u9879\u53D8\u4E3A\u5DE6\u53F3\u5E03\u5C40\n labelWidth: { type: [String, Number], default: '' },\n // \u884C\u5185\u8868\u5355\uFF0C\u9002\u5408\u7B5B\u9009\u680F\n inline: { type: Boolean, default: false }\n },\n emits: ['submit'],\n setup (props, { emit }) {\n const errors = reactive({})\n const fields = new Map()\n // \u8BB0\u5F55\u521D\u59CB\u503C\uFF0CresetFields \u65F6\u8FD8\u539F\n let initialModel = {}\n\n function snapshot () {\n try {\n initialModel = JSON.parse(JSON.stringify(props.model || {}))\n } catch (error) {\n initialModel = { ...props.model }\n }\n }\n\n snapshot()\n\n function register (prop, validate) {\n if (prop) fields.set(prop, validate)\n }\n\n function unregister (prop) {\n fields.delete(prop)\n }\n\n async function validateField (prop) {\n const runner = fields.get(prop)\n const message = runner ? await runner() : ''\n if (message) errors[prop] = message\n else delete errors[prop]\n return !message\n }\n\n async function validate () {\n const propsList = [...fields.keys()]\n const results = await Promise.all(propsList.map((prop) => validateField(prop)))\n return results.every(Boolean)\n }\n\n function clearValidate (propsList) {\n const list = propsList ? [].concat(propsList) : [...fields.keys()]\n list.forEach((prop) => {\n delete errors[prop]\n })\n }\n\n function resetFields () {\n // \u5FEB\u7167\u4E4B\u540E\u5F02\u6B65\u65B0\u589E\u7684\u5B57\u6BB5\u4E5F\u8981\u6E05\u6389\uFF0C\u5426\u5219\u4F1A\u6B8B\u7559\u4E0A\u4E00\u6B21\u7684\u8F93\u5165\n Object.keys(props.model || {}).forEach((key) => {\n if (!(key in initialModel)) delete props.model[key]\n })\n Object.keys(initialModel).forEach((key) => {\n const value = initialModel[key]\n props.model[key] = value && typeof value === 'object' ? JSON.parse(JSON.stringify(value)) : value\n })\n clearValidate()\n }\n\n // \u6570\u636E\u5F02\u6B65\u52A0\u8F7D\u540E\uFF0C\u53EF\u91CD\u65B0\u8BB0\u5F55\u521D\u59CB\u503C\uFF0C\u4F9B resetFields \u4F7F\u7528\n function setInitial () {\n snapshot()\n }\n\n async function onSubmit (event) {\n const valid = await validate()\n emit('submit', event, valid)\n }\n\n provide('djmForm', {\n get model () {\n return props.model\n },\n get rules () {\n return props.rules\n },\n get horizontal () {\n return Boolean(props.labelWidth) || props.inline\n },\n errors,\n register,\n unregister\n })\n\n return {\n onSubmit,\n validate,\n validateField,\n clearValidate,\n resetFields,\n setInitial,\n errors,\n formClass: computed(() => ({\n 'djm-is-inline': props.inline,\n 'djm-is-horizontal': Boolean(props.labelWidth)\n })),\n formStyle: computed(() => {\n const raw = props.labelWidth\n if (!raw) return {}\n // \u6570\u5B57\u4E0E\u7EAF\u6570\u5B57\u5B57\u7B26\u4E32\u90FD\u6309 px \u5904\u7406\n const width = typeof raw === 'number' || /^\\d+(\\.\\d+)?$/.test(raw) ? raw + 'px' : raw\n return { '--djm-form-label-width': width }\n })\n }\n },\n template: `\n <form class=\"djm-form-grid\" :class=\"formClass\" :style=\"formStyle\" @submit.prevent=\"onSubmit\">\n <slot></slot>\n </form>\n `\n}\n", "import { computed, inject, onMounted, onBeforeUnmount } from 'vue'\n\n/**\n * \u8868\u5355\u9879\uFF1A\u6807\u7B7E\u3001\u5FC5\u586B\u6807\u8BB0\u3001\u6821\u9A8C\u9519\u8BEF\u4E0E\u5360\u6EE1\u6574\u884C\n * \u914D\u5408 DjmForm \u4F7F\u7528\u65F6\u4F20 prop\uFF0C\u89C4\u5219\u91CC\u7528\u540C\u540D\u7684 key\n */\nexport default {\n name: 'DjmFormItem',\n props: {\n label: { type: String, default: '' },\n // \u5BF9\u5E94 model \u4E0E rules \u7684\u5B57\u6BB5\u540D\n prop: { type: String, default: '' },\n required: { type: Boolean, default: false },\n // \u5916\u90E8\u76F4\u63A5\u6307\u5B9A\u9519\u8BEF\uFF0C\u4F18\u5148\u7EA7\u9AD8\u4E8E\u8868\u5355\u6821\u9A8C\n error: { type: String, default: '' },\n hint: { type: String, default: '' },\n full: { type: Boolean, default: false },\n // \u8868\u5355\u7EC4\uFF08\u5355\u9009/\u590D\u9009\uFF09\u5EFA\u8BAE\u7528 div\uFF0C\u907F\u514D label \u5305\u88F9\u6574\u7EC4\u63A7\u4EF6\n tag: { type: String, default: 'label' }\n },\n setup (props) {\n const form = inject('djmForm', null)\n\n async function runRules () {\n if (!form || !props.prop) return ''\n const rules = (form.rules && form.rules[props.prop]) || []\n const value = form.model ? form.model[props.prop] : undefined\n const text = value === undefined || value === null ? '' : String(value)\n\n for (const rule of rules) {\n if (rule.required && text.trim() === '') {\n return rule.message || `${props.label || props.prop} \u4E3A\u5FC5\u586B\u9879`\n }\n // \u7A7A\u503C\u4EA4\u7ED9 required \u5224\u65AD\uFF0Cpattern \u53EA\u6821\u9A8C\u5DF2\u586B\u5199\u7684\u5185\u5BB9\n if (rule.pattern && text !== '' && !rule.pattern.test(text)) {\n return rule.message || '\u683C\u5F0F\u4E0D\u6B63\u786E'\n }\n if (typeof rule.validator === 'function') {\n const result = await rule.validator(value, form.model)\n if (result === false) return rule.message || '\u6821\u9A8C\u672A\u901A\u8FC7'\n if (typeof result === 'string' && result) return result\n }\n }\n return ''\n }\n\n onMounted(() => {\n if (form && props.prop) form.register(props.prop, runRules)\n })\n\n onBeforeUnmount(() => {\n if (form && props.prop) form.unregister(props.prop)\n })\n\n const errorText = computed(() => {\n if (props.error) return props.error\n if (form && props.prop) return form.errors[props.prop] || ''\n return ''\n })\n\n return { errorText }\n },\n template: `\n <component :is=\"tag\" class=\"djm-form-item\" :class=\"{ 'djm-full': full, 'djm-has-label': !!label }\">\n <span v-if=\"label\" class=\"djm-form-label\">{{ label }} <i v-if=\"required\">*</i></span>\n <slot></slot>\n <em v-if=\"errorText\" class=\"djm-form-error\" role=\"alert\">{{ errorText }}</em>\n <span v-else-if=\"hint\" class=\"djm-form-hint\">{{ hint }}</span>\n </component>\n `\n}\n", "import Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\n\n/**\n * \u7A7A\u72B6\u6001\uFF1A\u7EDF\u4E00\u65E0\u6570\u636E\u63D0\u793A\u7684\u6392\u7248\u4E0E\u64CD\u4F5C\u533A\n * \u7528\u6CD5\uFF1A<DjmEmpty icon=\"search\" title=\"\u6CA1\u6709\u5339\u914D\u7684\u8BB0\u5F55\" description=\"\u8C03\u6574\u5173\u952E\u8BCD\u540E\u91CD\u8BD5\">\n * <DjmButton size=\"sm\" @click=\"reset\">\u6E05\u7A7A\u7B5B\u9009</DjmButton>\n * </DjmEmpty>\n */\nexport default {\n name: 'DjmEmpty',\n components: { DjmIcon: Icon },\n props: {\n icon: { type: String, default: 'clipboard' },\n title: { type: String, default: '' },\n description: { type: String, default: '' }\n },\n computed: {\n label () {\n return this.title || t('empty.title')\n }\n },\n template: `\n <div class=\"djm-empty\">\n <span class=\"djm-empty-icon\"><DjmIcon :name=\"icon\" :size=\"22\" /></span>\n <strong>{{ label }}</strong>\n <span v-if=\"description\">{{ description }}</span>\n <slot></slot>\n </div>\n `\n}\n", "import Empty from '../empty/index.js'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\n\n/**\n * \u6570\u636E\u8868\u683C\uFF1A\u5217\u914D\u7F6E + \u5177\u540D\u63D2\u69FD\uFF0C\u66FF\u4EE3\u5404\u9875\u9762\u624B\u5199\u7684\u8868\u5934/\u7A7A\u72B6\u6001/\u52A0\u8F7D\u906E\u7F69\n *\n * columns: [{ key, label, width, align, class, headerClass, cellClass, sortable, sorter, fixed, children }]\n * children \u7528\u4E8E\u591A\u7EA7\u8868\u5934\uFF0C\u5206\u7EC4\u672C\u8EAB\u4E0D\u53C2\u4E0E\u6392\u5E8F\u4E0E\u5355\u5143\u683C\u6E32\u67D3\n * \u5355\u5143\u683C\u63D2\u69FD\uFF1A<template #cell-user=\"{ row, value, index }\">...</template>\n * \u9009\u62E9\uFF1Av-model:selected=\"selected\"\uFF08\u503C\u4E3A row[rowKey]\uFF09\n */\n\n// \u662F\u5426\u914D\u7F6E\u4E86\u5B50\u5217\uFF08\u7A7A\u6570\u7EC4\u6309\u666E\u901A\u5217\u5904\u7406\uFF09\nfunction hasChildren (column) {\n return Array.isArray(column.children) && column.children.length > 0\n}\n\n// \u4E00\u4E2A\u8282\u70B9\u4E0B\u6709\u591A\u5C11\u53F6\u5B50\u5217\uFF0C\u7528\u4E8E\u5206\u7EC4\u8868\u5934\u7684 colspan\nfunction leafCount (node) {\n if (!hasChildren(node)) return 1\n return node.children.reduce((sum, child) => sum + leafCount(child), 0)\n}\n\nexport default {\n name: 'DjmTable',\n components: { DjmEmpty: Empty, DjmIcon: Icon },\n props: {\n columns: { type: Array, required: true },\n rows: { type: Array, default: () => [] },\n rowKey: { type: String, default: 'id' },\n selected: { type: Array, default: () => [] },\n selectable: { type: Boolean, default: false },\n showIndex: { type: Boolean, default: false },\n // \u5206\u9875\u573A\u666F\u4E0B\u7528\u4E8E\u8BA9\u5E8F\u53F7\u8DE8\u9875\u8FDE\u7EED\n indexOffset: { type: Number, default: 0 },\n loading: { type: Boolean, default: false },\n loadingText: { type: String, default: '' },\n striped: { type: Boolean, default: false },\n compact: { type: Boolean, default: false },\n emptyText: { type: String, default: '' },\n emptyHint: { type: String, default: '' },\n emptyIcon: { type: String, default: 'clipboard' },\n // \u6392\u5E8F\u53D7\u63A7\u503C\uFF1A\u5217\u8BBE\u7F6E sortable \u540E\u7531\u7EC4\u4EF6\u56DE\u4F20\uFF0C\u4E1A\u52A1\u4FA7\u53EF v-model \u7ED1\u5B9A\n sortKey: { type: String, default: '' },\n sortDir: { type: String, default: '' },\n // \u5C55\u5F00\u884C\uFF1Atrue \u6216 (row) => boolean\n expandable: { type: [Boolean, Function], default: false },\n expanded: { type: Array, default: () => [] },\n // \u884C\u6837\u5F0F\uFF1A\u5B57\u7B26\u4E32\u6216 (row, index) => string\n rowClass: { type: [String, Function], default: '' },\n // \u6EDA\u52A8\u533A\u57DF\u9AD8\u5EA6\uFF1A\u8BBE\u7F6E\u540E\u8868\u5934\u5438\u9876\uFF0C\u914D\u5408\u5217 fixed \u4F7F\u7528\n maxHeight: { type: [Number, String], default: '' },\n // \u663E\u793A\u5217\u8BBE\u7F6E\u6309\u94AE\uFF0C\u53EF\u52FE\u9009\u8981\u5C55\u793A\u7684\u5217\n columnSetting: { type: Boolean, default: false },\n // \u663E\u793A\u5BFC\u51FA\u6309\u94AE\uFF0C\u5BFC\u51FA\u5F53\u524D\u6392\u5E8F\u540E\u7684\u5168\u90E8\u884C\n exportable: { type: Boolean, default: false },\n // \u5BFC\u51FA\u6587\u4EF6\u540D\u524D\u7F00\uFF0C\u6700\u7EC8\u4E3A \u524D\u7F00-YYYY-MM-DD.csv\n exportName: { type: String, default: 'export' },\n // \u8868\u5934\u53F3\u4FA7\u62D6\u62FD\u8C03\u6574\u5217\u5BBD\uFF0C\u53CC\u51FB\u5206\u5272\u7EBF\u6062\u590D\u914D\u7F6E\u5BBD\u5EA6\n resizable: { type: Boolean, default: false },\n // \u62D6\u62FD\u65F6\u7684\u6700\u5C0F\u5217\u5BBD\n minColumnWidth: { type: Number, default: 60 },\n // \u8868\u683C\u6700\u5C0F\u5BBD\u5EA6\uFF0C\u9ED8\u8BA4\u8D70\u6837\u5F0F\u91CC\u7684 900px\uFF1B\u5217\u5C11\u6216\u5BB9\u5668\u7A84\u65F6\u53EF\u8C03\u5C0F\u907F\u514D\u6A2A\u5411\u6EDA\u52A8\n minWidth: { type: [Number, String], default: '' },\n // \u884C\u62D6\u62FD\u6392\u5E8F\uFF1A\u884C\u9996\u51FA\u73B0\u624B\u67C4\uFF0C\u62D6\u653E\u540E\u629B row-drop \u7531\u4E1A\u52A1\u91CD\u6392\u6570\u636E\n rowDraggable: { type: Boolean, default: false },\n // \u5355\u884C\u662F\u5426\u5141\u8BB8\u62D6\u52A8\uFF0C(row, index) => boolean\n allowRowDrag: { type: Function, default: null },\n // \u865A\u62DF\u6EDA\u52A8\uFF1A\u53EA\u6E32\u67D3\u53EF\u89C6\u533A\u884C\uFF0C\u9700\u8981\u540C\u65F6\u8BBE\u7F6E max-height\uFF1B\u5C55\u5F00\u884C\u6A21\u5F0F\u4E0D\u652F\u6301\n virtual: { type: Boolean, default: false },\n // \u865A\u62DF\u6EDA\u52A8\u7684\u884C\u9AD8\uFF0C\u9700\u4E0E\u5B9E\u9645\u6E32\u67D3\u9AD8\u5EA6\u4E00\u81F4\uFF0C\u5426\u5219\u6EDA\u52A8\u4F4D\u7F6E\u4F1A\u6F02\u79FB\n rowHeight: { type: Number, default: 44 },\n // \u53EF\u89C6\u533A\u4E0A\u4E0B\u591A\u6E32\u67D3\u51E0\u884C\uFF0C\u907F\u514D\u5FEB\u901F\u6EDA\u52A8\u51FA\u73B0\u7A7A\u767D\n overscan: { type: Number, default: 6 }\n },\n emits: [\n 'update:selected',\n 'row-click',\n 'row-dblclick',\n 'update:sortKey',\n 'update:sortDir',\n 'sort-change',\n 'update:expanded',\n 'export',\n 'column-resize',\n 'column-resize-end',\n 'row-drop'\n ],\n data () {\n return {\n hiddenColumns: [],\n settingOpen: false,\n // \u62D6\u62FD\u540E\u7684\u5217\u5BBD\uFF1Akey -> px\uFF0C\u672A\u62D6\u62FD\u7684\u5217\u6CBF\u7528 column.width\n colWidths: {},\n // \u62D6\u62FD\u4E2D\u7684\u5217\uFF0C\u7528\u4E8E\u9AD8\u4EAE\u5206\u5272\u7EBF\n resizeState: null,\n // \u884C\u62D6\u62FD\uFF1A\u8D77\u59CB\u884C\u4E0E\u5F53\u524D\u843D\u70B9\n rowDragState: null,\n rowDropState: null,\n // \u865A\u62DF\u6EDA\u52A8\u72B6\u6001\n scrollTop: 0,\n viewportHeight: 0\n }\n },\n computed: {\n // \u53BB\u6389\u5206\u7EC4\u5C42\u7EA7\uFF0C\u6309\u94AE\u53F6\u5B50\u5217\u987A\u5E8F\u94FA\u5E73\uFF1B\u5355\u5143\u683C\u3001\u6392\u5E8F\u3001\u5BFC\u51FA\u4E00\u5F8B\u6309\u53F6\u5B50\u5904\u7406\n leafColumns () {\n const flat = []\n const walk = (list, parent) => {\n list.forEach((column) => {\n if (hasChildren(column)) {\n walk(column.children, column)\n return\n }\n // \u5E26\u4E0A\u5206\u7EC4\u4FE1\u606F\uFF0C\u5217\u8BBE\u7F6E\u91CC\u80FD\u770B\u51FA\u5F52\u5C5E\n flat.push(parent ? { ...column, groupKey: parent.key, groupLabel: parent.label } : column)\n })\n }\n walk(this.columns, null)\n return flat\n },\n // \u5217\u8BBE\u7F6E\u9690\u85CF\u540E\u7684\u53EF\u89C1\u5217\uFF08\u53F6\u5B50\uFF09\n visibleColumns () {\n return this.leafColumns.filter((column) => !this.hiddenColumns.includes(column.key))\n },\n // \u8868\u5934\u6811\uFF1A\u4FDD\u7559\u5206\u7EC4\u7ED3\u6784\uFF0C\u9690\u85CF\u7684\u53F6\u5B50\u8FDE\u540C\u7A7A\u5206\u7EC4\u4E00\u8D77\u53BB\u6389\n headerTree () {\n const strip = (list) =>\n list\n .map((column) => (hasChildren(column) ? { ...column, children: strip(column.children) } : { ...column }))\n .filter((column) => (hasChildren(column) ? column.children.length > 0 : !this.hiddenColumns.includes(column.key)))\n return strip(this.columns)\n },\n // \u8868\u5934\u6309\u5C42\u94FA\u5F00\uFF0C\u5206\u7EC4\u7528 colspan\uFF0C\u65E0\u5B50\u8282\u70B9\u7684\u5217\u7528 rowspan \u8865\u9F50\u5269\u4F59\u884C\n headerRows () {\n const rows = []\n const depthOf = (node) => (hasChildren(node) ? 1 + Math.max(...node.children.map(depthOf)) : 1)\n const maxDepth = this.headerTree.reduce((max, node) => Math.max(max, depthOf(node)), 1)\n\n const collect = (nodes, depth) => {\n if (!rows[depth]) rows[depth] = []\n nodes.forEach((node) => {\n if (hasChildren(node)) {\n rows[depth].push({ node, colspan: leafCount(node), rowspan: 1, group: true })\n collect(node.children, depth + 1)\n } else {\n rows[depth].push({ node, colspan: 1, rowspan: maxDepth - depth, group: false })\n }\n })\n }\n\n collect(this.headerTree, 0)\n return rows\n },\n colSpan () {\n return this.visibleColumns.length +\n (this.selectable ? 1 : 0) +\n (this.showIndex ? 1 : 0) +\n (this.expandable ? 1 : 0) +\n (this.rowDraggable ? 1 : 0)\n },\n // \u662F\u5426\u5B58\u5728\u5DE6\u53F3\u56FA\u5B9A\u5217\n hasFixed () {\n return this.visibleColumns.some((column) => column.fixed === 'left' || column.fixed === 'right')\n },\n // \u524D\u7F6E\u5217\uFF08\u62D6\u62FD\u624B\u67C4 / \u5C55\u5F00 / \u9009\u62E9 / \u5E8F\u53F7\uFF09\u7684\u5DE6\u4FA7\u504F\u79FB\uFF1A\u6709\u56FA\u5B9A\u5217\u65F6\u4E00\u5E76\u5438\u8FB9\n prependOffsets () {\n if (!this.hasFixed) return null\n const offsets = { drag: null, expand: null, select: null, index: null, base: 0 }\n let left = 0\n if (this.rowDraggable) {\n offsets.drag = left\n left += 36\n }\n if (this.expandable) {\n offsets.expand = left\n left += 38\n }\n if (this.selectable) {\n offsets.select = left\n left += 42\n }\n if (this.showIndex) {\n offsets.index = left\n left += 52\n }\n offsets.base = left\n return offsets\n },\n // \u56FA\u5B9A\u5217\u504F\u79FB\u8868\uFF1Akey -> { side, offset, edge }\n stickyMap () {\n if (!this.hasFixed) return {}\n const columns = this.visibleColumns\n const map = {}\n let left = this.prependOffsets ? this.prependOffsets.base : 0\n columns.forEach((column) => {\n if (column.fixed !== 'left') return\n map[column.key] = { side: 'left', offset: left, edge: false }\n left += this.columnWidth(column)\n })\n let right = 0\n for (let i = columns.length - 1; i >= 0; i--) {\n const column = columns[i]\n if (column.fixed !== 'right') continue\n map[column.key] = { side: 'right', offset: right, edge: false }\n right += this.columnWidth(column)\n }\n // \u6807\u8BB0\u8D34\u8FB9\u5217\uFF0C\u7528\u4E8E\u6295\u5F71\u5206\u9694\n const leftKeys = columns.filter((column) => column.fixed === 'left').map((column) => column.key)\n const rightKeys = columns.filter((column) => column.fixed === 'right').map((column) => column.key)\n if (leftKeys.length) map[leftKeys[leftKeys.length - 1]].edge = true\n if (rightKeys.length) map[rightKeys[0]].edge = true\n return map\n },\n scrollStyle () {\n if (!this.maxHeight) return {}\n const value = this.maxHeight\n // \u6570\u5B57\u4E0E\u7EAF\u6570\u5B57\u5B57\u7B26\u4E32\u90FD\u6309 px \u5904\u7406\uFF0C\u5176\u4F59\uFF08\u5982 60vh\uFF09\u539F\u6837\u900F\u4F20\n if (typeof value === 'number' || /^\\d+(\\.\\d+)?$/.test(value)) {\n return { maxHeight: value + 'px' }\n }\n return { maxHeight: value }\n },\n // \u6700\u5C0F\u5BBD\u5EA6\uFF1A\u8986\u76D6\u6837\u5F0F\u91CC\u7684 900px\uFF0C\u5217\u5C11\u7684\u7A84\u5BB9\u5668\u4E0D\u518D\u88AB\u8FEB\u6A2A\u5411\u6EDA\u52A8\n tableStyle () {\n const value = this.minWidth\n if (value === '' || value === null || value === undefined) return {}\n if (typeof value === 'number' || /^\\d+(\\.\\d+)?$/.test(value)) {\n return { minWidth: value + 'px' }\n }\n return { minWidth: value }\n },\n loadingLabel () {\n return this.loadingText || t('table.loading')\n },\n emptyLabel () {\n return this.emptyText || t('table.empty')\n },\n selectAllLabel () {\n return t('table.selectAll')\n },\n selectRowLabel () {\n return t('table.selectRow')\n },\n scrollRegionLabel () {\n return t('table.scrollRegion')\n },\n allChecked () {\n return this.rows.length > 0 && this.rows.every((row) => this.isSelected(row))\n },\n someChecked () {\n return !this.allChecked && this.rows.some((row) => this.isSelected(row))\n },\n // \u6392\u5E8F\u53EA\u5F71\u54CD\u5C55\u793A\u987A\u5E8F\uFF0C\u4E0D\u6539\u53D8\u539F\u59CB rows\n displayRows () {\n if (!this.sortKey || !this.sortDir) return this.rows\n // \u591A\u7EA7\u8868\u5934\u7684\u5B50\u5217\u4E5F\u80FD\u6392\u5E8F\uFF0C\u6309\u53F6\u5B50\u5217\u67E5\u627E\n const column = this.leafColumns.find((item) => item.key === this.sortKey)\n if (!column) return this.rows\n const dir = this.sortDir === 'asc' ? 1 : -1\n const list = this.rows.slice()\n if (typeof column.sorter === 'function') {\n return list.sort((a, b) => column.sorter(a, b) * dir)\n }\n return list.sort((a, b) => {\n const left = a[this.sortKey]\n const right = b[this.sortKey]\n if (typeof left === 'number' && typeof right === 'number') return (left - right) * dir\n return String(left === undefined || left === null ? '' : left)\n .localeCompare(String(right === undefined || right === null ? '' : right), 'zh-Hans-CN') * dir\n })\n },\n\n /* ---------------- \u865A\u62DF\u6EDA\u52A8 ---------------- */\n\n // \u9700\u8981 maxHeight \u63D0\u4F9B\u6EDA\u52A8\u5BB9\u5668\uFF1B\u5C55\u5F00\u884C\u9AD8\u5EA6\u4E0D\u56FA\u5B9A\uFF0C\u6682\u4E0D\u53C2\u4E0E\u865A\u62DF\u6EDA\u52A8\n virtualEnabled () {\n return Boolean(this.virtual && this.maxHeight && !this.expandable)\n },\n // \u515C\u5E95\u884C\u9AD8\uFF0C\u907F\u514D\u914D\u7F6E\u8FC7\u5C0F\u5BFC\u81F4\u8BA1\u7B97\u51FA\u8D1F\u6570\u533A\u95F4\n effectiveRowHeight () {\n return Math.max(16, this.rowHeight)\n },\n // \u53EF\u89C6\u533A\u8D77\u6B62\u884C\uFF08\u542B overscan\uFF09\n visibleRange () {\n const total = this.displayRows.length\n if (!this.virtualEnabled || !total) return { start: 0, end: total }\n const rowHeight = this.effectiveRowHeight\n const viewHeight = this.viewportHeight || rowHeight * 10\n const start = Math.max(0, Math.floor(this.scrollTop / rowHeight) - this.overscan)\n const end = Math.min(total, Math.ceil((this.scrollTop + viewHeight) / rowHeight) + this.overscan)\n return { start, end }\n },\n // \u5B9E\u9645\u6E32\u67D3\u7684\u884C\uFF0C\u5E26\u539F\u59CB\u4E0B\u6807\uFF08\u5E8F\u53F7\u3001\u63D2\u69FD\u90FD\u7528\u7EDD\u5BF9\u4F4D\u7F6E\uFF09\n bodyRows () {\n const { start, end } = this.visibleRange\n return this.displayRows.slice(start, end).map((row, offset) => ({ row, index: start + offset }))\n },\n topPad () {\n return this.virtualEnabled ? this.visibleRange.start * this.effectiveRowHeight : 0\n },\n bottomPad () {\n if (!this.virtualEnabled) return 0\n const total = this.displayRows.length\n return Math.max(0, (total - this.visibleRange.end) * this.effectiveRowHeight)\n }\n },\n mounted () {\n document.addEventListener('mousedown', this.onDocumentMousedown, true)\n this.measureViewport()\n },\n beforeUnmount () {\n document.removeEventListener('mousedown', this.onDocumentMousedown, true)\n document.removeEventListener('mousemove', this.onResizeMove)\n document.removeEventListener('mouseup', this.onResizeEnd)\n },\n methods: {\n // \u8BB0\u5F55\u53EF\u89C6\u533A\u9AD8\u5EA6\uFF1A\u865A\u62DF\u6EDA\u52A8\u7528\u5B83\u7B97\u9700\u8981\u6E32\u67D3\u591A\u5C11\u884C\n measureViewport () {\n const el = this.$refs.wrap\n if (!el || !this.virtualEnabled) return\n this.viewportHeight = el.clientHeight\n this.scrollTop = el.scrollTop\n },\n onScroll (event) {\n if (!this.virtualEnabled) return\n const el = event.target\n this.scrollTop = el.scrollTop\n this.viewportHeight = el.clientHeight\n },\n // \u5217\u8BBE\u7F6E\uFF1A\u81F3\u5C11\u4FDD\u7559\u4E00\u5217\n toggleColumn (key) {\n if (this.hiddenColumns.includes(key)) {\n this.hiddenColumns = this.hiddenColumns.filter((item) => item !== key)\n return\n }\n if (this.visibleColumns.length <= 1) return\n this.hiddenColumns = [...this.hiddenColumns, key]\n },\n resetColumns () {\n this.hiddenColumns = []\n },\n onDocumentMousedown (event) {\n if (!this.$refs.root || this.$refs.root.contains(event.target)) return\n this.settingOpen = false\n },\n // \u5BFC\u51FA\u5F53\u524D\u6392\u5E8F\u540E\u7684\u5168\u90E8\u884C\uFF0C\u64CD\u4F5C\u5217\u53EF\u901A\u8FC7 exportable: false \u6392\u9664\n exportCsv () {\n const columns = this.visibleColumns.filter((column) => column.exportable !== false)\n if (!columns.length) return\n const header = columns.map((column) => column.label || column.key)\n const lines = this.displayRows.map((row) =>\n columns.map((column) => {\n const raw = typeof column.exportValue === 'function' ? column.exportValue(row) : row[column.key]\n return String(raw === undefined || raw === null ? '' : raw).replace(/\"/g, '\"\"')\n })\n )\n const csv = '\\uFEFF' + [header, ...lines]\n .map((cols) => cols.map((cell) => `\"${cell}\"`).join(','))\n .join('\\n')\n\n this.$emit('export', { rows: this.displayRows.slice(), csv })\n this.downloadCsv(csv)\n },\n downloadCsv (csv) {\n const now = new Date()\n // \u6587\u4EF6\u540D\u7528\u672C\u5730\u65E5\u671F\uFF0C\u907F\u514D toISOString \u7684 UTC \u8DE8\u5929\n const day = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')}`\n const url = URL.createObjectURL(new Blob([csv], { type: 'text/csv;charset=utf-8' }))\n const link = document.createElement('a')\n link.href = url\n link.download = `${this.exportName}-${day}.csv`\n link.click()\n URL.revokeObjectURL(url)\n },\n isSelected (row) {\n return this.selected.includes(row[this.rowKey])\n },\n canExpand (row) {\n if (typeof this.expandable === 'function') return Boolean(this.expandable(row))\n return Boolean(this.expandable)\n },\n isExpanded (row) {\n return this.expanded.includes(row[this.rowKey])\n },\n toggleExpand (row) {\n const id = row[this.rowKey]\n const next = this.expanded.includes(id)\n ? this.expanded.filter((item) => item !== id)\n : [...this.expanded, id]\n this.$emit('update:expanded', next)\n },\n rowClassOf (row, index) {\n return typeof this.rowClass === 'function' ? this.rowClass(row, index) : this.rowClass\n },\n // \u56FA\u5B9A\u5217\u5BBD\u5EA6\uFF1A\u62D6\u62FD\u503C\u4F18\u5148\uFF0C\u672A\u914D\u7F6E\u5BBD\u5EA6\u65F6\u7ED9\u4E00\u4E2A\u515C\u5E95\u503C\uFF0C\u4FDD\u8BC1\u76F8\u90BB\u5217\u504F\u79FB\u4E0D\u91CD\u53E0\n columnWidth (column) {\n const custom = this.colWidths[column.key]\n if (typeof custom === 'number') return custom\n return typeof column.width === 'number' ? column.width : 120\n },\n stickyClassOf (column) {\n const item = this.stickyMap[column.key]\n if (!item) return ''\n return [\n item.side === 'left' ? 'djm-sticky-left' : 'djm-sticky-right',\n item.edge ? 'djm-sticky-edge' : ''\n ]\n },\n stickyStyleOf (column) {\n const item = this.stickyMap[column.key]\n if (!item) return {}\n return item.side === 'left' ? { left: item.offset + 'px' } : { right: item.offset + 'px' }\n },\n // \u591A\u884C\u8868\u5934\u5438\u9876\u65F6\u9010\u884C\u4E0B\u79FB\uFF0C\u907F\u514D\u7B2C\u4E8C\u884C\u76D6\u4F4F\u7B2C\u4E00\u884C\n stickyTop (rowIndex) {\n if (this.headerRows.length <= 1) return {}\n return { top: rowIndex * (this.compact ? 32 : 38) + 'px' }\n },\n // \u524D\u7F6E\u5217\u7684\u5438\u8FB9\u7C7B\u540D\u4E0E\u504F\u79FB\n prependClass (key) {\n if (!this.prependOffsets) return ''\n const offset = this.prependOffsets[key]\n if (offset === null || offset === undefined) return ''\n const order = ['drag', 'expand', 'select', 'index'].filter((name) => this.prependOffsets[name] !== null)\n // \u540E\u9762\u8FD8\u6709\u5DE6\u56FA\u5B9A\u6570\u636E\u5217\u65F6\uFF0C\u6295\u5F71\u7531\u6570\u636E\u5217\u627F\u62C5\n const last = order[order.length - 1] === key\n const hasLeftFixed = this.visibleColumns.some((column) => column.fixed === 'left')\n return ['djm-sticky-left', last && !hasLeftFixed ? 'djm-sticky-edge' : '']\n },\n prependStyle (key) {\n if (!this.prependOffsets) return {}\n const offset = this.prependOffsets[key]\n if (offset === null || offset === undefined) return {}\n return { left: offset + 'px' }\n },\n ariaSort (column) {\n if (!column.sortable) return undefined\n if (this.sortKey !== column.key) return 'none'\n return this.sortDir === 'asc' ? 'ascending' : 'descending'\n },\n toggleSort (column) {\n if (!column.sortable) return\n let key = column.key\n let dir = 'asc'\n if (this.sortKey === column.key && this.sortDir === 'asc') {\n dir = 'desc'\n } else if (this.sortKey === column.key && this.sortDir === 'desc') {\n key = ''\n dir = ''\n }\n this.$emit('update:sortKey', key)\n this.$emit('update:sortDir', dir)\n this.$emit('sort-change', { key, dir })\n },\n toggleAll (event) {\n const ids = this.rows.map((row) => row[this.rowKey])\n if (event.target.checked) {\n const merged = new Set(this.selected)\n ids.forEach((id) => merged.add(id))\n this.$emit('update:selected', [...merged])\n } else {\n const current = new Set(ids)\n this.$emit('update:selected', this.selected.filter((id) => !current.has(id)))\n }\n },\n toggleRow (row) {\n const id = row[this.rowKey]\n const next = this.selected.includes(id)\n ? this.selected.filter((item) => item !== id)\n : [...this.selected, id]\n this.$emit('update:selected', next)\n },\n cellStyle (column) {\n // \u62D6\u62FD\u8FC7\u7684\u5217\u56FA\u5B9A px\uFF0C\u5176\u4F59\u4FDD\u6301\u5217\u914D\u7F6E\uFF08\u652F\u6301\u6570\u5B57\u4E0E '20%' \u8FD9\u7C7B\u5B57\u7B26\u4E32\uFF09\n const custom = this.colWidths[column.key]\n let width = ''\n if (typeof custom === 'number') width = custom + 'px'\n else if (typeof column.width === 'number') width = column.width + 'px'\n else if (column.width) width = String(column.width)\n return {\n width,\n minWidth: width,\n // \u56FA\u5B9A\u5217\u9501\u6B7B\u5BBD\u5EA6\uFF0C\u5426\u5219\u81EA\u52A8\u5E03\u5C40\u6491\u5F00\u4F1A\u8BA9\u504F\u79FB\u91CF\u9519\u4F4D\n maxWidth: column.fixed ? width : '',\n textAlign: column.align || ''\n }\n },\n\n /* ---------------- \u5217\u5BBD\u62D6\u62FD ---------------- */\n\n // \u5F00\u59CB\u62D6\u62FD\uFF1A\u8BB0\u5F55\u8D77\u70B9\u4E0E\u5F53\u524D\u5B9E\u9645\u5BBD\u5EA6\n startResize (event, column) {\n if (!this.resizable || column.resizable === false) return\n const th = event.currentTarget.parentNode\n this.resizeState = {\n key: column.key,\n startX: event.clientX,\n startWidth: th.getBoundingClientRect().width\n }\n document.addEventListener('mousemove', this.onResizeMove)\n document.addEventListener('mouseup', this.onResizeEnd)\n },\n onResizeMove (event) {\n const state = this.resizeState\n if (!state) return\n const min = Math.max(40, this.minColumnWidth)\n const width = Math.round(Math.max(min, state.startWidth + event.clientX - state.startX))\n this.colWidths = { ...this.colWidths, [state.key]: width }\n this.$emit('column-resize', { key: state.key, width })\n },\n onResizeEnd () {\n if (!this.resizeState) return\n const { key } = this.resizeState\n this.resizeState = null\n document.removeEventListener('mousemove', this.onResizeMove)\n document.removeEventListener('mouseup', this.onResizeEnd)\n this.$emit('column-resize-end', { key, width: this.colWidths[key] })\n },\n // \u53CC\u51FB\u5206\u5272\u7EBF\u6062\u590D\u8BE5\u5217\u7684\u914D\u7F6E\u5BBD\u5EA6\n resetColumnWidth (key) {\n if (!this.colWidths[key]) return\n const next = { ...this.colWidths }\n delete next[key]\n this.colWidths = next\n },\n\n /* ---------------- \u884C\u62D6\u62FD\u6392\u5E8F ---------------- */\n\n canDragRow (row, index) {\n if (!this.rowDraggable) return false\n if (typeof this.allowRowDrag === 'function') return this.allowRowDrag(row, index) !== false\n return true\n },\n isRowDragging (item) {\n return Boolean(this.rowDragState && this.rowDragState.key === item.row[this.rowKey])\n },\n rowDropClassOf (item) {\n const state = this.rowDropState\n if (!state || state.key !== item.row[this.rowKey]) return ''\n return 'djm-is-row-drop-' + state.position\n },\n onRowDragStart (item, event) {\n if (!this.canDragRow(item.row, item.index)) {\n event.preventDefault()\n return\n }\n this.rowDragState = { key: item.row[this.rowKey], index: item.index }\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move'\n event.dataTransfer.setData('text/plain', String(item.index))\n }\n },\n // \u843D\u70B9\u6309\u884C\u9AD8\u5BF9\u534A\u5206\uFF1A\u4E0A\u534A\u63D2\u5230\u524D\u9762\uFF0C\u4E0B\u534A\u63D2\u5230\u540E\u9762\n dropPositionOf (event) {\n const rect = event.currentTarget.getBoundingClientRect()\n const ratio = rect.height ? (event.clientY - rect.top) / rect.height : 0.5\n return ratio < 0.5 ? 'before' : 'after'\n },\n onRowDragOver (item, event) {\n if (!this.rowDragState) return\n event.preventDefault()\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'move'\n this.rowDropState = {\n key: item.row[this.rowKey],\n index: item.index,\n position: this.dropPositionOf(event)\n }\n },\n onRowDragLeave (item, event) {\n const current = event.currentTarget\n // \u884C\u5185\u5355\u5143\u683C\u4E4B\u95F4\u79FB\u52A8\u4E5F\u4F1A\u89E6\u53D1 dragleave\uFF0C\u6307\u9488\u4ECD\u5728\u884C\u5185\u65F6\u4E0D\u6E05\u843D\u70B9\n if (current && event.relatedTarget && current.contains(event.relatedTarget)) return\n if (this.rowDropState && this.rowDropState.key === item.row[this.rowKey]) this.rowDropState = null\n },\n onRowDrop (item, event) {\n const drag = this.rowDragState\n if (!drag) return\n event.preventDefault()\n const state = this.rowDropState\n const position = state && state.key === item.row[this.rowKey] ? state.position : this.dropPositionOf(event)\n this.resetRowDrag()\n if (this.isNoopDrop(drag.index, item.index, position)) return\n this.$emit('row-drop', {\n dragIndex: drag.index,\n dropIndex: item.index,\n position,\n dragKey: drag.key,\n dropKey: item.row[this.rowKey]\n })\n },\n // \u62D6\u5230\u81EA\u8EAB\u3001\u6216\u7D27\u90BB\u4F4D\u7F6E\uFF08\u7ED3\u679C\u4E0D\u53D8\uFF09\u65F6\u4E0D\u629B\u4E8B\u4EF6\n isNoopDrop (from, to, position) {\n if (from === to) return true\n if (position === 'after' && to === from - 1) return true\n if (position === 'before' && to === from + 1) return true\n return false\n },\n onRowDragEnd () {\n this.resetRowDrag()\n },\n resetRowDrag () {\n this.rowDragState = null\n this.rowDropState = null\n }\n },\n template: `\n <div class=\"djm-table-root\" :class=\"{ 'djm-is-resizing': !!resizeState }\" ref=\"root\">\n <div\n v-if=\"columnSetting || exportable || $slots.toolbar || $slots['toolbar-extra']\"\n class=\"djm-table-tools\"\n >\n <div class=\"djm-table-tools-left\">\n <slot name=\"toolbar\" :rows=\"displayRows\"></slot>\n </div>\n <div class=\"djm-table-tools-right\">\n <slot name=\"toolbar-extra\"></slot>\n <button v-if=\"exportable\" class=\"djm-btn djm-btn-sm\" type=\"button\" @click=\"exportCsv\">\n <DjmIcon name=\"download\" :size=\"13\" />\u5BFC\u51FA\n </button>\n <div v-if=\"columnSetting\" class=\"djm-table-col-setting\">\n <button class=\"djm-btn djm-btn-sm\" type=\"button\" @click.stop=\"settingOpen = !settingOpen\">\n <DjmIcon name=\"sliders\" :size=\"13\" />\u5217\u8BBE\u7F6E\n </button>\n <div v-if=\"settingOpen\" class=\"djm-table-col-panel\">\n <div class=\"djm-table-col-head\">\n <span>\u663E\u793A\u5217</span>\n <button class=\"djm-link-btn\" type=\"button\" @click=\"resetColumns\">\u91CD\u7F6E</button>\n </div>\n <!-- \u591A\u7EA7\u8868\u5934\u6309\u53F6\u5B50\u5217\u52FE\u9009\uFF0C\u5E26\u4E0A\u5206\u7EC4\u540D\u4FBF\u4E8E\u8BC6\u522B -->\n <label v-for=\"column in leafColumns\" :key=\"column.key\" class=\"djm-table-col-item\">\n <input\n type=\"checkbox\"\n :checked=\"!hiddenColumns.includes(column.key)\"\n :disabled=\"visibleColumns.length <= 1 && !hiddenColumns.includes(column.key)\"\n @change=\"toggleColumn(column.key)\"\n />\n <span>{{ column.groupLabel ? column.groupLabel + ' / ' + (column.label || column.key) : (column.label || column.key) }}</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"djm-table-wrap\"\n ref=\"wrap\"\n :class=\"{ 'djm-is-scrollable': !!maxHeight, 'djm-has-fixed': hasFixed, 'djm-is-virtual': virtualEnabled }\"\n :style=\"scrollStyle\"\n role=\"region\"\n :aria-label=\"scrollRegionLabel\"\n tabindex=\"0\"\n @scroll=\"onScroll\"\n >\n <table class=\"djm-data-table\" :class=\"{ 'djm-is-striped': striped, 'djm-is-compact': compact, 'djm-is-resizable': resizable }\" :style=\"tableStyle\">\n <thead>\n <tr v-for=\"(row, rowIndex) in headerRows\" :key=\"rowIndex\">\n <!-- \u524D\u7F6E\u5217\u53EA\u5728\u7B2C\u4E00\u884C\u6E32\u67D3\uFF0C\u5E76\u8DE8\u5168\u90E8\u8868\u5934\u884C -->\n <th\n v-if=\"rowDraggable && rowIndex === 0\"\n :class=\"['djm-col-drag', prependClass('drag')]\"\n :style=\"[prependStyle('drag'), stickyTop(rowIndex)]\"\n :rowspan=\"headerRows.length > 1 ? headerRows.length : undefined\"\n scope=\"col\"\n aria-label=\"\u62D6\u52A8\u6392\u5E8F\"\n ></th>\n <th\n v-if=\"expandable && rowIndex === 0\"\n :class=\"['djm-col-expand', prependClass('expand')]\"\n :style=\"[prependStyle('expand'), stickyTop(rowIndex)]\"\n :rowspan=\"headerRows.length > 1 ? headerRows.length : undefined\"\n scope=\"col\"\n ></th>\n <th\n v-if=\"selectable && rowIndex === 0\"\n :class=\"['djm-col-check', prependClass('select')]\"\n :style=\"[prependStyle('select'), stickyTop(rowIndex)]\"\n :rowspan=\"headerRows.length > 1 ? headerRows.length : undefined\"\n scope=\"col\"\n >\n <input type=\"checkbox\" :checked=\"allChecked\" :indeterminate=\"someChecked\" :aria-label=\"selectAllLabel\" @change=\"toggleAll\" />\n </th>\n <th\n v-if=\"showIndex && rowIndex === 0\"\n :class=\"['djm-col-index', prependClass('index')]\"\n :style=\"[prependStyle('index'), stickyTop(rowIndex)]\"\n :rowspan=\"headerRows.length > 1 ? headerRows.length : undefined\"\n scope=\"col\"\n >#</th>\n\n <th\n v-for=\"cell in row\"\n :key=\"cell.node.key\"\n :colspan=\"cell.colspan > 1 ? cell.colspan : undefined\"\n :rowspan=\"cell.rowspan > 1 ? cell.rowspan : undefined\"\n :class=\"[\n cell.node.class,\n cell.node.headerClass,\n cell.group ? 'djm-col-group' : stickyClassOf(cell.node),\n {\n 'djm-is-sortable': !cell.group && cell.node.sortable,\n 'djm-has-resizer': !cell.group && resizable && cell.node.resizable !== false\n }\n ]\"\n :style=\"[cell.group ? {} : cellStyle(cell.node), cell.group ? {} : stickyStyleOf(cell.node), stickyTop(rowIndex)]\"\n :aria-sort=\"cell.group ? undefined : ariaSort(cell.node)\"\n :scope=\"cell.group ? 'colgroup' : 'col'\"\n :tabindex=\"!cell.group && cell.node.sortable ? 0 : undefined\"\n @click=\"!cell.group && toggleSort(cell.node)\"\n @keydown.enter.prevent=\"!cell.group && toggleSort(cell.node)\"\n @keydown.space.prevent=\"!cell.group && toggleSort(cell.node)\"\n >\n <span class=\"djm-table-sort\">\n <slot :name=\"'header-' + cell.node.key\" :column=\"cell.node\">{{ cell.node.label }}</slot>\n <span v-if=\"!cell.group && cell.node.sortable\" class=\"djm-table-sorter\">\n <i class=\"djm-table-sort-up\" :class=\"{ 'djm-is-on': sortKey === cell.node.key && sortDir === 'asc' }\"></i>\n <i class=\"djm-table-sort-down\" :class=\"{ 'djm-is-on': sortKey === cell.node.key && sortDir === 'desc' }\"></i>\n </span>\n </span>\n <!-- \u5217\u5BBD\u62D6\u62FD\u5206\u5272\u7EBF\uFF1A\u53EA\u6302\u5728\u53F6\u5B50\u5217\uFF0C\u963B\u6B62\u5192\u6CE1\u907F\u514D\u89E6\u53D1\u6392\u5E8F -->\n <span\n v-if=\"!cell.group && resizable && cell.node.resizable !== false\"\n class=\"djm-table-resizer\"\n :class=\"{ 'djm-is-active': resizeState && resizeState.key === cell.node.key }\"\n aria-hidden=\"true\"\n @mousedown.prevent.stop=\"startResize($event, cell.node)\"\n @click.stop\n @dblclick.stop=\"resetColumnWidth(cell.node.key)\"\n ></span>\n </th>\n </tr>\n </thead>\n <tbody>\n <!-- \u865A\u62DF\u6EDA\u52A8\uFF1A\u4E0A\u65B9\u5360\u4F4D\u884C\uFF0C\u4FDD\u8BC1\u6EDA\u52A8\u6761\u957F\u5EA6\u4E0E\u771F\u5B9E\u884C\u6570\u4E00\u81F4 -->\n <tr v-if=\"topPad > 0\" class=\"djm-table-spacer\" aria-hidden=\"true\">\n <td :colspan=\"colSpan\" :style=\"{ height: topPad + 'px' }\"></td>\n </tr>\n\n <template v-for=\"item in bodyRows\" :key=\"item.row[rowKey]\">\n <tr\n :class=\"[\n rowClassOf(item.row, item.index),\n rowDropClassOf(item),\n { 'djm-is-selected': isSelected(item.row), 'djm-is-row-dragging': isRowDragging(item) }\n ]\"\n :style=\"virtualEnabled ? { height: effectiveRowHeight + 'px' } : null\"\n @click=\"$emit('row-click', item.row, item.index)\"\n @dblclick=\"$emit('row-dblclick', item.row, item.index)\"\n @dragover=\"onRowDragOver(item, $event)\"\n @dragleave=\"onRowDragLeave(item, $event)\"\n @drop=\"onRowDrop(item, $event)\"\n >\n <!-- \u62D6\u62FD\u624B\u67C4\uFF1A\u53EA\u6709\u624B\u67C4\u53EF\u62D6\uFF0C\u907F\u514D\u548C\u9009\u4E2D\u6587\u672C\u3001\u884C\u70B9\u51FB\u51B2\u7A81 -->\n <td\n v-if=\"rowDraggable\"\n :class=\"['djm-col-drag', prependClass('drag')]\"\n :style=\"prependStyle('drag')\"\n >\n <span\n class=\"djm-row-handle\"\n :class=\"{ 'djm-is-disabled': !canDragRow(item.row, item.index) }\"\n :draggable=\"canDragRow(item.row, item.index) ? 'true' : 'false'\"\n :title=\"canDragRow(item.row, item.index) ? '\u62D6\u52A8\u6392\u5E8F' : '\u8BE5\u884C\u4E0D\u53EF\u62D6\u52A8'\"\n aria-hidden=\"true\"\n @dragstart.stop=\"onRowDragStart(item, $event)\"\n @dragend.stop=\"onRowDragEnd\"\n @click.stop\n >\n <DjmIcon name=\"grip\" :size=\"13\" />\n </span>\n </td>\n <td\n v-if=\"expandable\"\n :class=\"['djm-col-expand', prependClass('expand')]\"\n :style=\"prependStyle('expand')\"\n >\n <button\n v-if=\"canExpand(item.row)\"\n class=\"djm-table-expand-btn\"\n type=\"button\"\n :aria-expanded=\"isExpanded(item.row)\"\n :aria-label=\"isExpanded(item.row) ? '\u6536\u8D77' : '\u5C55\u5F00'\"\n @click.stop=\"toggleExpand(item.row)\"\n >\n <DjmIcon :name=\"isExpanded(item.row) ? 'chevron-down' : 'chevron-right'\" :size=\"12\" />\n </button>\n </td>\n <td\n v-if=\"selectable\"\n :class=\"['djm-col-check', prependClass('select')]\"\n :style=\"prependStyle('select')\"\n >\n <input type=\"checkbox\" :checked=\"isSelected(item.row)\" :aria-label=\"selectRowLabel\" @change=\"toggleRow(item.row)\" @click.stop />\n </td>\n <td\n v-if=\"showIndex\"\n :class=\"['djm-col-index', prependClass('index')]\"\n :style=\"prependStyle('index')\"\n >{{ indexOffset + item.index + 1 }}</td>\n <td\n v-for=\"column in visibleColumns\"\n :key=\"column.key\"\n :class=\"[column.class, column.cellClass, stickyClassOf(column)]\"\n :style=\"[cellStyle(column), stickyStyleOf(column)]\"\n >\n <slot\n :name=\"'cell-' + column.key\"\n :row=\"item.row\"\n :value=\"item.row[column.key]\"\n :index=\"item.index\"\n :column=\"column\"\n >{{ item.row[column.key] }}</slot>\n </td>\n </tr>\n\n <tr v-if=\"isExpanded(item.row)\" class=\"djm-table-expand-row\">\n <td :colspan=\"colSpan\">\n <div class=\"djm-table-expand-body\">\n <slot name=\"expand\" :row=\"item.row\" :index=\"item.index\"></slot>\n </div>\n </td>\n </tr>\n </template>\n\n <!-- \u865A\u62DF\u6EDA\u52A8\uFF1A\u4E0B\u65B9\u5360\u4F4D\u884C -->\n <tr v-if=\"bottomPad > 0\" class=\"djm-table-spacer\" aria-hidden=\"true\">\n <td :colspan=\"colSpan\" :style=\"{ height: bottomPad + 'px' }\"></td>\n </tr>\n\n <tr v-if=\"!displayRows.length\">\n <td :colspan=\"colSpan\">\n <slot name=\"empty\">\n <DjmEmpty :icon=\"emptyIcon\" :title=\"emptyLabel\" :description=\"emptyHint\" />\n </slot>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div v-if=\"loading\" class=\"djm-table-loading\">\n <span class=\"djm-spinner\"></span>{{ loadingLabel }}\n </div>\n </div>\n </div>\n `\n}\n", "/**\n * \u9875\u5934\uFF1A\u6807\u9898 + \u8BF4\u660E + \u53F3\u4FA7\u64CD\u4F5C\u533A\uFF0C\u7EDF\u4E00\u540E\u53F0\u9875\u9762\u7B2C\u4E00\u5C4F\u7ED3\u6784\n * \u7528\u6CD5\uFF1A<DjmPageHeader title=\"\u7528\u6237\u7BA1\u7406\" description=\"\u7EF4\u62A4\u7CFB\u7EDF\u8D26\u53F7\">\n * <template #actions><DjmButton variant=\"primary\">\u65B0\u589E</DjmButton></template>\n * </DjmPageHeader>\n */\nexport default {\n name: 'DjmPageHeader',\n props: {\n title: { type: String, required: true },\n description: { type: String, default: '' }\n },\n template: `\n <header class=\"djm-page-head\">\n <div>\n <h1>{{ title }}</h1>\n <p v-if=\"description\">{{ description }}</p>\n </div>\n <div v-if=\"$slots.actions\" class=\"djm-page-actions\">\n <slot name=\"actions\"></slot>\n </div>\n </header>\n `\n}\n", "/**\n * \u9762\u5305\u5C51\uFF1A\u5C55\u793A\u5F53\u524D\u4F4D\u7F6E\u7684\u5C42\u7EA7\u8DEF\u5F84\uFF0C\u6700\u540E\u4E00\u9879\u4E3A\u5F53\u524D\u9875\uFF08\u4E0D\u5E26\u94FE\u63A5\uFF09\n * \u7528\u6CD5\uFF1A<DjmBreadcrumb :items=\"[{ label: '\u9996\u9875', href: '#/' }, { label: '\u7528\u6237\u7BA1\u7406' }]\" />\n * \u65E0 href \u7684\u9879\u6E32\u67D3\u6210\u6309\u94AE\uFF0C\u70B9\u51FB\u629B navigate\uFF0C\u65B9\u4FBF SPA \u81EA\u5DF1\u63A5\u7BA1\u8DEF\u7531\n */\nimport Icon from '../icon/index.js'\n\nexport default {\n name: 'DjmBreadcrumb',\n components: { Icon },\n props: {\n // [{ label, href?, key? }]\uFF0C\u6700\u540E\u4E00\u9879\u81EA\u52A8\u4F5C\u4E3A\u5F53\u524D\u9875\n items: { type: Array, required: true },\n // \u5206\u9694\u7B26\uFF1A\u6587\u5B57\u6216\u56FE\u6807\u4E8C\u9009\u4E00\uFF0C\u56FE\u6807\u4F18\u5148\n separator: { type: String, default: '/' },\n separatorIcon: { type: String, default: '' },\n ariaLabel: { type: String, default: '\u9762\u5305\u5C51' }\n },\n emits: ['navigate'],\n methods: {\n isLast (index) {\n return index === this.items.length - 1\n }\n },\n template: `\n <nav class=\"djm-breadcrumb\" :aria-label=\"ariaLabel\">\n <ol class=\"djm-breadcrumb-list\">\n <li v-for=\"(item, index) in items\" :key=\"item.key || item.label\" class=\"djm-breadcrumb-item\">\n <span v-if=\"index > 0\" class=\"djm-breadcrumb-sep\" aria-hidden=\"true\">\n <Icon v-if=\"separatorIcon\" :name=\"separatorIcon\" :size=\"12\" />\n <template v-else>{{ separator }}</template>\n </span>\n <span v-if=\"isLast(index)\" class=\"djm-breadcrumb-text djm-is-current\" aria-current=\"page\">{{ item.label }}</span>\n <a v-else-if=\"item.href\" class=\"djm-breadcrumb-text djm-breadcrumb-link\" :href=\"item.href\">{{ item.label }}</a>\n <button\n v-else\n class=\"djm-breadcrumb-text djm-breadcrumb-link\"\n type=\"button\"\n @click=\"$emit('navigate', item)\"\n >{{ item.label }}</button>\n </li>\n </ol>\n </nav>\n `\n}\n", "/**\n * \u5934\u50CF\uFF1A\u4F18\u5148\u5C55\u793A\u56FE\u7247\uFF0C\u6CA1\u6709\u56FE\u7247\u6216\u52A0\u8F7D\u5931\u8D25\u65F6\u56DE\u843D\u5230\u6587\u5B57\u9996\u5B57\n * \u7528\u6CD5\uFF1A<DjmAvatar text=\"\u5F20\u4F1F\" /> / <DjmAvatar src=\"/a.png\" size=\"lg\" shape=\"square\" />\n */\nexport default {\n name: 'DjmAvatar',\n props: {\n src: { type: String, default: '' },\n alt: { type: String, default: '' },\n // \u6587\u5B57\u515C\u5E95\uFF0C\u53D6\u9996\u5B57\u4F5C\u4E3A\u5934\u50CF\u5185\u5BB9\n text: { type: String, default: '' },\n size: { type: String, default: 'md' }, // sm | md | lg\n shape: { type: String, default: 'circle' }, // circle | square\n // \u81EA\u5B9A\u4E49\u5E95\u8272\uFF0C\u4E0D\u4F20\u7528\u54C1\u724C\u8272\n tone: { type: String, default: '' }\n },\n data () {\n return { failed: false }\n },\n computed: {\n initial () {\n const raw = (this.text || this.alt || '').trim()\n if (!raw) return ''\n // \u59D3\u540D\u53D6\u9996\u5B57\uFF1B\u300C+3\u300D\u300C99+\u300D\u8FD9\u7C7B\u8BA1\u6570\u539F\u6837\u5C55\u793A\n return /^[+\\d]/.test(raw) ? raw : raw.slice(0, 1)\n },\n showImage () {\n return Boolean(this.src) && !this.failed\n }\n },\n watch: {\n // \u6362\u56FE\u65F6\u91CD\u7F6E\u5931\u8D25\u72B6\u6001\uFF0C\u907F\u514D\u4E00\u6B21\u5931\u8D25\u540E\u6C38\u4E45\u4E0D\u663E\u793A\u56FE\u7247\n src () {\n this.failed = false\n }\n },\n template: `\n <span\n class=\"djm-avatar\"\n :class=\"['djm-avatar-' + size, { 'djm-is-square': shape === 'square' }]\"\n :style=\"tone ? { background: tone } : null\"\n >\n <img v-if=\"showImage\" :src=\"src\" :alt=\"alt || text\" @error=\"failed = true\" />\n <template v-else>{{ initial }}</template>\n </span>\n `\n}\n", "/**\n * \u5934\u50CF\u7EC4\uFF1A\u53E0\u653E\u591A\u4E2A\u5934\u50CF\uFF0C\u7528\u4E8E\u6210\u5458\u5217\u8868\u3001\u534F\u4F5C\u4EBA\u5C55\u793A\n * \u7528\u6CD5\uFF1A<DjmAvatarGroup><DjmAvatar text=\"\u5F20\" />\u2026</DjmAvatarGroup>\n */\nexport default {\n name: 'DjmAvatarGroup',\n props: {\n // \u5934\u50CF\u95F4\u8DDD\uFF0C\u8D1F\u6570\u8D8A\u5927\u8D8A\u7D27\u51D1\n gap: { type: [Number, String], default: -8 }\n },\n computed: {\n groupStyle () {\n const gap = typeof this.gap === 'number' ? this.gap + 'px' : this.gap\n return { '--djm-avatar-gap': gap }\n }\n },\n template: `\n <div class=\"djm-avatar-group\" :style=\"groupStyle\">\n <slot></slot>\n </div>\n `\n}\n", "/**\n * \u5FBD\u6807\uFF1A\u6302\u5728\u5185\u5BB9\u53F3\u4E0A\u89D2\u7684\u8BA1\u6570\u6216\u7EA2\u70B9\n * \u7528\u6CD5\uFF1A<DjmBadge :count=\"5\"><DjmIcon name=\"bell\" /></DjmBadge>\n * <DjmBadge dot><DjmIcon name=\"bell\" /></DjmBadge>\n */\nexport default {\n name: 'DjmBadge',\n props: {\n count: { type: [Number, String], default: 0 },\n // \u8D85\u8FC7\u4E0A\u9650\u663E\u793A 99+\n max: { type: Number, default: 99 },\n dot: { type: Boolean, default: false },\n // \u989C\u8272\u8BED\u4E49\uFF1Adanger / brand / green / amber\n tone: { type: String, default: 'danger' },\n // \u65E0\u5185\u5BB9\u65F6\u662F\u5426\u9690\u85CF\uFF08dot \u6A21\u5F0F\u53EA\u770B dot\uFF09\n hidden: { type: Boolean, default: false }\n },\n computed: {\n display () {\n const value = Number(this.count)\n if (!Number.isFinite(value)) return String(this.count)\n return value > this.max ? this.max + '+' : String(value)\n },\n show () {\n if (this.hidden) return false\n if (this.dot) return true\n const text = String(this.count === null || this.count === undefined ? '' : this.count).trim()\n if (text === '') return false\n // \u6570\u5B57 0 \u4E0E\u5B57\u7B26\u4E32 \"0\" \u90FD\u89C6\u4E3A\u65E0\u5185\u5BB9\n return Number.isFinite(Number(text)) ? Number(text) !== 0 : true\n }\n },\n template: `\n <span class=\"djm-badge-anchor\">\n <slot></slot>\n <i\n v-if=\"show\"\n class=\"djm-badge-mark\"\n :class=\"[dot ? 'djm-is-dot' : 'djm-badge-count', 'djm-' + tone]\"\n >{{ dot ? '' : display }}</i>\n </span>\n `\n}\n", "/**\n * \u6D6E\u5C42\uFF1A\u89E6\u53D1\u5668 + \u81EA\u5B9A\u4E49\u5185\u5BB9\u9762\u677F\uFF0C\u7528\u4E8E\u901A\u77E5\u4E2D\u5FC3\u3001\u8D26\u53F7\u83DC\u5355\u8FD9\u7C7B\u975E\u5217\u8868\u578B\u5F39\u5C42\n * \u7528\u6CD5\uFF1A<DjmPopover><template #panel>...</template><DjmButton>\u66F4\u591A</DjmButton></DjmPopover>\n * \u6CE8\u610F\uFF1A\u9762\u677F\u5185\u5BB9\u7531\u8C03\u7528\u65B9\u51B3\u5B9A\uFF0C\u7EC4\u4EF6\u53EA\u8D1F\u8D23\u5B9A\u4F4D\u3001\u70B9\u51FB\u5916\u90E8\u5173\u95ED\u4E0E Esc \u5173\u95ED\n */\nimport { nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport { bindPanelListeners } from '../../utils/panel.js'\n\nexport default {\n name: 'DjmPopover',\n props: {\n placement: { type: String, default: 'bottom-end' },\n width: { type: [Number, String], default: '' },\n trigger: { type: String, default: 'click' }, // click | hover\n disabled: { type: Boolean, default: false }\n },\n emits: ['visible-change'],\n setup (props, { emit }) {\n const open = ref(false)\n const root = ref(null)\n const panelEl = ref(null)\n // \u9762\u677F\u6302\u5230 body\uFF0C\u7528 fixed \u5B9A\u4F4D\u907F\u514D\u88AB\u7236\u7EA7 overflow \u88C1\u526A\n const panelStyle = ref({})\n // \u6D6E\u5C42\u5168\u5C40\u76D1\u542C\u7684\u89E3\u7ED1\u53E5\u67C4\n let detachPanel = null\n\n // \u628A\u5C55\u5F00\u72B6\u6001\u5199\u5230\u63D2\u69FD\u91CC\u7684\u771F\u5B9E\u63A7\u4EF6\u4E0A\n function syncTriggerA11y () {\n const wrapper = root.value && root.value.querySelector('.djm-popover-trigger')\n if (!wrapper) return\n const inner = wrapper.querySelector('button, a[href], [role=\"button\"]')\n const target = inner || wrapper\n if (!inner) {\n target.setAttribute('role', 'button')\n // \u63D2\u69FD\u91CC\u6CA1\u6709\u771F\u5B9E\u6309\u94AE\u65F6\uFF0C\u8BA9\u5916\u5C42\u5BB9\u5668\u53EF\u805A\u7126\u3001\u53EF\u952E\u76D8\u89E6\u53D1\n target.setAttribute('tabindex', '0')\n }\n target.setAttribute('aria-haspopup', 'dialog')\n target.setAttribute('aria-expanded', String(open.value))\n }\n\n onMounted(() => nextTick(syncTriggerA11y))\n watch(open, () => nextTick(syncTriggerA11y))\n\n function updatePosition () {\n if (!open.value || !root.value) return\n const rect = root.value.getBoundingClientRect()\n const style = { position: 'fixed' }\n if (props.width) {\n style.width = typeof props.width === 'number' ? props.width + 'px' : props.width\n }\n // \u4E0B\u65B9\u7A7A\u95F4\u4E0D\u8DB3\u4E14\u4E0A\u65B9\u66F4\u5BBD\u88D5\u65F6\u5411\u4E0A\u5C55\u5F00\n const below = window.innerHeight - rect.bottom\n const up = props.placement.indexOf('top') === 0 || (below < 220 && rect.top > below)\n if (up) style.bottom = window.innerHeight - rect.top + 8 + 'px'\n else style.top = rect.bottom + 8 + 'px'\n if (props.placement.indexOf('end') > -1) style.right = window.innerWidth - rect.right + 'px'\n else style.left = rect.left + 'px'\n panelStyle.value = style\n }\n\n function openPanel () {\n if (props.disabled || open.value) return\n open.value = true\n emit('visible-change', true)\n // \u6D6E\u5C42\u5168\u5C40\u76D1\u542C\uFF1A\u5916\u90E8\u70B9\u51FB / Esc \u5173\u95ED\uFF0Cresize / scroll \u91CD\u5B9A\u4F4D\n detachPanel = bindPanelListeners({\n root: () => root.value,\n panel: () => panelEl.value,\n onClose: close,\n onReposition: updatePosition\n })\n // \u7B49 DOM \u6E32\u67D3\u540E\u518D\u6D4B\u91CF\u4F4D\u7F6E\n requestAnimationFrame(updatePosition)\n }\n\n function close () {\n if (!open.value) return\n open.value = false\n panelStyle.value = {}\n emit('visible-change', false)\n if (detachPanel) {\n detachPanel()\n detachPanel = null\n }\n }\n\n function toggle () {\n if (props.disabled) return\n if (open.value) close()\n else openPanel()\n }\n\n // \u60AC\u6D6E\u89E6\u53D1\uFF1A\u79FB\u51FA\u540E\u5EF6\u8FDF\u5173\u95ED\uFF0C\u4FBF\u4E8E\u4ECE\u89E6\u53D1\u5668\u79FB\u5230\u9762\u677F\n let hoverTimer = null\n\n function onHoverIn () {\n if (props.trigger !== 'hover') return\n window.clearTimeout(hoverTimer)\n openPanel()\n }\n\n function onHoverOut () {\n if (props.trigger !== 'hover') return\n window.clearTimeout(hoverTimer)\n hoverTimer = window.setTimeout(close, 120)\n }\n\n onBeforeUnmount(() => {\n window.clearTimeout(hoverTimer)\n close()\n })\n\n return { open, root, panelEl, panelStyle, toggle, close, onHoverIn, onHoverOut }\n },\n template: `\n <span class=\"djm-popover\" ref=\"root\" @mouseenter=\"onHoverIn\" @mouseleave=\"onHoverOut\">\n <span\n class=\"djm-popover-trigger\"\n @click=\"toggle\"\n @keydown.enter.self.prevent=\"toggle\"\n @keydown.space.self.prevent=\"toggle\"\n >\n <slot :open=\"open\"></slot>\n </span>\n <Teleport to=\"body\">\n <Transition name=\"djm-pop\">\n <div\n v-if=\"open\"\n ref=\"panelEl\"\n class=\"djm-popover-panel\"\n :style=\"panelStyle\"\n @mouseenter=\"onHoverIn\"\n @mouseleave=\"onHoverOut\"\n >\n <slot name=\"panel\" :close=\"close\"></slot>\n </div>\n </Transition>\n </Teleport>\n </span>\n `\n}\n", "/**\n * \u83DC\u5355\uFF1A\u4FA7\u8FB9\u7AD6\u5411\u5BFC\u822A\u4E0E\u9876\u90E8\u6A2A\u5411\u5BFC\u822A\u5171\u7528\u4E00\u5957\u6570\u636E\n * items: [{ key, label, icon, badge, disabled, children: [...] }]\n * \u7528\u6CD5\uFF1A<DjmMenu :items=\"items\" v-model:active-key=\"active\" @select=\"onSelect\" />\n * \u8BF4\u660E\uFF1A\u5185\u5D4C\u5C55\u5F00\uFF08\u7AD6\u5411\uFF09\u4E3A\u4E24\u7EA7\uFF1B\u6D6E\u51FA\u9762\u677F\uFF08\u6A2A\u5411 / \u6536\u8D77\u6001\uFF09\u652F\u6301\u4EFB\u610F\u5C42\u7EA7\n */\nimport { reactive } from 'vue'\nimport Icon from '../icon/index.js'\n\n/**\n * \u6D6E\u51FA\u9762\u677F\u7684\u5217\u8868\uFF1A\u5C42\u7EA7\u9012\u5F52\u6E32\u67D3\n * \u5D4C\u5957\u5C42\u7528 fixed \u5B9A\u4F4D\uFF0C\u907F\u514D\u88AB\u4E0A\u7EA7\u9762\u677F\u7684\u6EDA\u52A8\u5BB9\u5668\u88C1\u526A\n */\nconst MenuSubList = {\n name: 'DjmMenuSubList',\n components: { DjmIcon: Icon },\n props: {\n items: { type: Array, default: () => [] },\n activeKey: { type: String, default: '' },\n level: { type: Number, default: 1 }\n },\n emits: ['pick'],\n setup (props, { emit }) {\n // \u5F53\u524D\u5C55\u5F00\u7684\u4E0B\u4E00\u7EA7\u53CA\u5176\u89C6\u53E3\u5750\u6807\n const nested = reactive({ key: null, top: 0, left: 0 })\n\n function hasChildren (item) {\n return Array.isArray(item.children) && item.children.length > 0\n }\n\n function place (item, event) {\n if (!hasChildren(item)) return\n const rect = event.currentTarget.getBoundingClientRect()\n // \u6309\u6761\u76EE\u6570\u4F30\u7B97\u9AD8\u5EA6\uFF0C\u5E95\u90E8\u653E\u4E0D\u4E0B\u65F6\u5411\u4E0A\u6536\n const height = Math.min(item.children.length * 34 + 10, 420)\n nested.key = item.key\n nested.top = Math.max(8, Math.min(rect.top - 5, window.innerHeight - height - 8))\n nested.left = rect.right\n }\n\n function clear () {\n nested.key = null\n }\n\n // \u7126\u70B9\u79FB\u51FA\u6574\u9879\u65F6\u624D\u6536\u8D77\uFF0C\u907F\u514D\u4ECE\u4E8C\u7EA7\u79FB\u5230\u4E09\u7EA7\u65F6\u95EA\u65AD\n function onFocusOut (event) {\n if (!event.currentTarget.contains(event.relatedTarget)) clear()\n }\n\n function onClick (item) {\n if (item.disabled || hasChildren(item)) return\n emit('pick', item)\n }\n\n function isActive (item) {\n if (item.key === props.activeKey) return true\n return hasChildren(item) && item.children.some((child) => child.key === props.activeKey)\n }\n\n return { nested, hasChildren, place, clear, onFocusOut, onClick, isActive }\n },\n template: `\n <ul class=\"djm-menu-sub djm-menu-pop\" @scroll=\"clear\">\n <li\n v-for=\"item in items\"\n :key=\"item.key\"\n class=\"djm-menu-sub-item\"\n :class=\"{ 'djm-has-sub': hasChildren(item) }\"\n @mouseenter=\"place(item, $event)\"\n @mouseleave=\"clear\"\n @focusout=\"onFocusOut\"\n >\n <button\n class=\"djm-menu-sub-link\"\n type=\"button\"\n :class=\"{ 'djm-is-active': isActive(item), 'djm-is-parent': hasChildren(item) }\"\n :aria-current=\"item.key === activeKey ? 'page' : null\"\n :disabled=\"item.disabled\"\n @click=\"onClick(item)\"\n @focus=\"place(item, $event)\"\n >\n <DjmIcon v-if=\"item.icon\" :name=\"item.icon\" :size=\"14\" class=\"djm-menu-icon\" />\n <span class=\"djm-menu-label\">{{ item.label }}</span>\n <i v-if=\"item.badge\" class=\"djm-menu-count\">{{ item.badge }}</i>\n <DjmIcon v-if=\"hasChildren(item)\" name=\"chevron-right\" :size=\"12\" class=\"djm-menu-arrow\" />\n </button>\n\n <DjmMenuSubList\n v-if=\"hasChildren(item) && nested.key === item.key\"\n class=\"djm-menu-pop-nested\"\n :items=\"item.children\"\n :active-key=\"activeKey\"\n :level=\"level + 1\"\n :style=\"{ position: 'fixed', top: nested.top + 'px', left: nested.left + 'px' }\"\n @pick=\"$emit('pick', $event)\"\n />\n </li>\n </ul>\n `\n}\n\nexport default {\n name: 'DjmMenu',\n components: { DjmIcon: Icon, MenuSubList },\n props: {\n items: { type: Array, default: () => [] },\n // vertical \u4FA7\u8FB9 / horizontal \u9876\u90E8\n mode: { type: String, default: 'vertical' },\n activeKey: { type: String, default: '' },\n // \u4EC5\u7AD6\u5411\uFF1A\u6536\u8D77\u6210\u56FE\u6807\u6761\uFF0C\u5B50\u9879\u6539\u4E3A\u60AC\u6D6E\u98DE\u51FA\n collapsed: { type: Boolean, default: false },\n defaultOpenKeys: { type: Array, default: () => [] },\n // \u4EC5\u7AD6\u5411\u5185\u5D4C\u6A21\u5F0F\uFF1A\u624B\u98CE\u7434\uFF0C\u5C55\u5F00\u4E00\u7EC4\u65F6\u6536\u8D77\u5176\u4ED6\u7EC4\n accordion: { type: Boolean, default: false },\n // \u5B50\u9879\u9009\u4E2D\u65F6\u7236\u9879\u4E5F\u9AD8\u4EAE\uFF0C\u9876\u90E8\u6A2A\u5411\u5BFC\u822A\u5E38\u7528\n highlightGroup: { type: Boolean, default: false }\n },\n emits: ['select', 'update:activeKey'],\n data () {\n return { openKeys: this.defaultOpenKeys.slice() }\n },\n computed: {\n isHorizontal () {\n return this.mode === 'horizontal'\n },\n // \u6A2A\u5411\u4E0E\u6536\u8D77\u6001\u7528\u6D6E\u51FA\u9762\u677F\uFF0C\u5176\u4F59\u7528\u5185\u5D4C\u5C55\u5F00\n isPopMode () {\n return this.isHorizontal || this.collapsed\n },\n menuClass () {\n return [\n 'djm-menu',\n this.isHorizontal ? 'djm-menu-horizontal' : 'djm-menu-vertical',\n { 'djm-is-collapsed': this.collapsed && !this.isHorizontal }\n ]\n }\n },\n methods: {\n hasChildren (item) {\n return Array.isArray(item.children) && item.children.length > 0\n },\n isOpen (item) {\n return this.openKeys.indexOf(item.key) > -1\n },\n open (item) {\n if (this.isOpen(item)) return\n // \u624B\u98CE\u7434\u53EA\u5728\u5185\u5D4C\u5C55\u5F00\u65F6\u751F\u6548\uFF1B\u6A2A\u5411\u4E0E\u6536\u8D77\u6001\u7531 hover \u7BA1\u7406\uFF0C\u4E0D\u505A\u4E92\u65A5\n if (this.accordion && !this.isPopMode) this.openKeys = []\n this.openKeys.push(item.key)\n },\n close (item) {\n const index = this.openKeys.indexOf(item.key)\n if (index > -1) this.openKeys.splice(index, 1)\n },\n toggle (item) {\n if (this.isOpen(item)) this.close(item)\n else this.open(item)\n },\n // \u4E3B\u9879\u70B9\u51FB\uFF1A\u6709\u5B50\u7EA7\u5C31\u5C55\u5F00\uFF0C\u6CA1\u6709\u5C31\u76F4\u63A5\u9009\u4E2D\n onItemClick (item) {\n if (item.disabled) return\n if (this.hasChildren(item)) {\n this.toggle(item)\n return\n }\n this.pick(item)\n },\n // \u5B50\u9879\u70B9\u51FB\n pick (item) {\n if (item.disabled) return\n this.$emit('update:activeKey', item.key)\n this.$emit('select', item)\n if (this.isHorizontal) this.openKeys = []\n },\n isActive (item) {\n if (item.key === this.activeKey) return true\n if (!this.highlightGroup) return false\n return this.hasChildren(item) && item.children.some((child) => child.key === this.activeKey)\n },\n // \u6536\u8D77\u6001\u7528\u539F\u751F title \u515C\u5E95\u63D0\u793A\n itemTitle (item) {\n return this.collapsed && !this.isHorizontal ? item.label : null\n }\n },\n template: `\n <nav :class=\"menuClass\">\n <ul class=\"djm-menu-list\">\n <li\n v-for=\"item in items\"\n :key=\"item.key\"\n class=\"djm-menu-item\"\n :class=\"{ 'djm-is-active': isActive(item), 'djm-is-open': isOpen(item), 'djm-is-disabled': item.disabled }\"\n @mouseenter=\"isHorizontal && hasChildren(item) && open(item)\"\n @mouseleave=\"isHorizontal && hasChildren(item) && close(item)\"\n >\n <button\n class=\"djm-menu-link\"\n type=\"button\"\n :title=\"itemTitle(item)\"\n :aria-current=\"isActive(item) ? 'page' : null\"\n :aria-expanded=\"hasChildren(item) ? String(isOpen(item)) : null\"\n :disabled=\"item.disabled\"\n @click=\"onItemClick(item)\"\n >\n <DjmIcon v-if=\"item.icon\" :name=\"item.icon\" :size=\"15\" class=\"djm-menu-icon\" />\n <span class=\"djm-menu-label\">{{ item.label }}</span>\n <i v-if=\"item.badge\" class=\"djm-menu-count\">{{ item.badge }}</i>\n <DjmIcon\n v-if=\"hasChildren(item)\"\n name=\"chevron-down\"\n :size=\"13\"\n class=\"djm-menu-arrow\"\n />\n </button>\n\n <!-- \u5B50\u9879\uFF1A\u7AD6\u5411\u7528\u5185\u5D4C\u5C55\u5F00\uFF0C\u6A2A\u5411\u4E0E\u6536\u8D77\u6001\u7528\u6D6E\u51FA\u9762\u677F -->\n <ul\n v-if=\"hasChildren(item) && !isPopMode\"\n v-show=\"isOpen(item)\"\n class=\"djm-menu-sub\"\n >\n <li v-for=\"child in item.children\" :key=\"child.key\" class=\"djm-menu-sub-item\">\n <button\n class=\"djm-menu-sub-link\"\n type=\"button\"\n :class=\"{ 'djm-is-active': isActive(child) }\"\n :aria-current=\"isActive(child) ? 'page' : null\"\n :disabled=\"child.disabled\"\n @click=\"pick(child)\"\n >\n <DjmIcon v-if=\"child.icon\" :name=\"child.icon\" :size=\"14\" class=\"djm-menu-icon\" />\n <span class=\"djm-menu-label\">{{ child.label }}</span>\n <i v-if=\"child.badge\" class=\"djm-menu-count\">{{ child.badge }}</i>\n </button>\n </li>\n </ul>\n\n <MenuSubList\n v-if=\"hasChildren(item) && isPopMode\"\n :items=\"item.children\"\n :active-key=\"activeKey\"\n @pick=\"pick\"\n />\n </li>\n </ul>\n </nav>\n `\n}\n", "/**\n * \u6807\u7B7E\uFF1A\u884C\u5185\u72B6\u6001\u6807\u8BB0\uFF0C\u652F\u6301\u8BED\u4E49\u8272\u4E0E\u53EF\u5173\u95ED\n * \u7528\u6CD5\uFF1A<DjmTag>\u5DF2\u542F\u7528</DjmTag> / <DjmTag type=\"success\" closable @close=\"onClose\">\u6210\u529F</DjmTag>\n *\n * tone \u4E0E type \u90FD\u53EF\u7528\uFF0C\u53D6\u503C\u4E8C\u9009\u4E00\uFF1B\u7EDF\u4E00\u8BED\u4E49\u503C\u662F success / warning / danger / info\uFF0C\n * \u4E5F\u517C\u5BB9 tone \u7684\u5386\u53F2\u53D6\u503C brand / green / amber / red\u3002\n */\nimport { t } from '../../locale/index.js'\n\nconst TONE_ALIAS = {\n success: 'green',\n warning: 'amber',\n warn: 'amber',\n danger: 'red',\n error: 'red',\n info: 'brand',\n ok: 'green',\n off: 'default'\n}\n\nexport default {\n name: 'DjmTag',\n props: {\n // default / brand / green / amber / red\n tone: { type: String, default: '' },\n // success / warning / danger / info\n type: { type: String, default: '' },\n size: { type: String, default: 'md' }, // sm | md\n closable: { type: Boolean, default: false }\n },\n emits: ['close'],\n computed: {\n toneClass () {\n const raw = this.tone || this.type || 'default'\n return 'djm-tag-' + (TONE_ALIAS[raw] || raw)\n }\n },\n methods: {\n onClose () {\n this.$emit('close')\n },\n t\n },\n template: `\n <span class=\"djm-tag\" :class=\"[toneClass, size === 'sm' ? 'djm-tag-sm' : '']\">\n <slot></slot>\n <button\n v-if=\"closable\"\n class=\"djm-tag-close\"\n type=\"button\"\n :aria-label=\"t('common.removeTag')\"\n @click.stop=\"onClose\"\n >\u00D7</button>\n </span>\n `\n}\n", "/**\n * \u5361\u7247\uFF1A\u5E26\u6807\u9898\u680F\u4E0E\u9875\u811A\u7684\u5185\u5BB9\u5BB9\u5668\n * \u7528\u6CD5\uFF1A<DjmCard title=\"\u6700\u8FD1\u53D8\u66F4\"><template #extra>\u2026</template>\u5185\u5BB9</DjmCard>\n */\nexport default {\n name: 'DjmCard',\n props: {\n title: { type: String, default: '' },\n // \u60AC\u6D6E\u65F6\u8FB9\u6846\u548C\u9634\u5F71\u53D8\u5316\uFF0C\u8868\u793A\u6574\u5361\u53EF\u70B9\n hoverable: { type: Boolean, default: false },\n // \u53BB\u6389\u5185\u8FB9\u8DDD\uFF0C\u9002\u5408\u5185\u5D4C\u8868\u683C\n flush: { type: Boolean, default: false }\n },\n template: `\n <section class=\"djm-card\" :class=\"{ 'djm-is-hoverable': hoverable, 'djm-is-flush': flush }\">\n <header v-if=\"title || $slots.extra\" class=\"djm-card-head\">\n <div class=\"djm-card-title\">{{ title }}<slot name=\"title\"></slot></div>\n <div v-if=\"$slots.extra\" class=\"djm-card-extra\"><slot name=\"extra\"></slot></div>\n </header>\n <div class=\"djm-card-body\"><slot></slot></div>\n <footer v-if=\"$slots.footer\" class=\"djm-card-foot\"><slot name=\"footer\"></slot></footer>\n </section>\n `\n}\n", "/**\n * \u8FDB\u5EA6\u6761\uFF1A\u6A2A\u5411\u8FDB\u5EA6\uFF0C\u652F\u6301\u8BED\u4E49\u72B6\u6001\u4E0E\u81EA\u5B9A\u4E49\u9AD8\u5EA6\n * \u7528\u6CD5\uFF1A<DjmProgress :percent=\"60\" status=\"success\" />\n */\nexport default {\n name: 'DjmProgress',\n props: {\n percent: { type: Number, default: 0 },\n // '' / success / error / warning\n status: { type: String, default: '' },\n showText: { type: Boolean, default: true },\n strokeWidth: { type: Number, default: 6 },\n // \u81EA\u5B9A\u4E49\u8FDB\u5EA6\u8272\uFF0C\u4E0D\u4F20\u7531\u72B6\u6001\u51B3\u5B9A\n color: { type: String, default: '' }\n },\n computed: {\n safePercent () {\n return Math.min(100, Math.max(0, Number(this.percent) || 0))\n },\n barStyle () {\n const style = { width: this.safePercent + '%' }\n if (this.color) style.background = this.color\n return style\n },\n trackStyle () {\n return { height: this.strokeWidth + 'px' }\n }\n },\n template: `\n <div class=\"djm-progress-line\" :class=\"status ? 'djm-is-' + status : ''\">\n <div class=\"djm-progress\" :style=\"trackStyle\">\n <div class=\"djm-progress-bar\" :style=\"barStyle\"></div>\n </div>\n <span v-if=\"showText\" class=\"djm-progress-label\">{{ safePercent }}%</span>\n </div>\n `\n}\n", "/**\n * \u9AA8\u67B6\u5C4F\uFF1A\u52A0\u8F7D\u4E2D\u7684\u5360\u4F4D\u7ED3\u6784\uFF0Cloading \u4E3A false \u65F6\u6E32\u67D3\u771F\u5B9E\u5185\u5BB9\n * \u7528\u6CD5\uFF1A<DjmSkeleton :loading=\"loading\" avatar :rows=\"3\"><UserCard /></DjmSkeleton>\n */\nexport default {\n name: 'DjmSkeleton',\n props: {\n loading: { type: Boolean, default: true },\n // \u6B63\u6587\u884C\u6570\uFF0C\u6700\u540E\u4E00\u884C\u81EA\u52A8\u7F29\u77ED\n rows: { type: Number, default: 3 },\n title: { type: Boolean, default: true },\n avatar: { type: Boolean, default: false },\n animated: { type: Boolean, default: true }\n },\n computed: {\n rowStyle () {\n return (index) => ({ width: index === this.rows ? '60%' : '100%' })\n }\n },\n template: `\n <div v-if=\"loading\" class=\"djm-skeleton-block\" :class=\"{ 'djm-is-static': !animated }\" aria-busy=\"true\">\n <div v-if=\"avatar\" class=\"djm-skeleton-avatar\"></div>\n <div class=\"djm-skeleton-main\">\n <div v-if=\"title\" class=\"djm-skeleton djm-skeleton-title\"></div>\n <div\n v-for=\"index in rows\"\n :key=\"index\"\n class=\"djm-skeleton\"\n :style=\"rowStyle(index)\"\n ></div>\n </div>\n </div>\n <slot v-else></slot>\n `\n}\n", "/**\n * \u7ED3\u679C\u9875\uFF1A\u64CD\u4F5C\u7ED3\u679C\u6216\u7A7A\u9875\u7684\u6574\u5757\u63D0\u793A\n * \u7528\u6CD5\uFF1A<DjmResult status=\"success\" title=\"\u63D0\u4EA4\u6210\u529F\" description=\"\u5BA1\u6838\u7ED3\u679C\u4F1A\u901A\u8FC7\u7AD9\u5185\u4FE1\u901A\u77E5\">\n * <DjmButton>\u8FD4\u56DE\u5217\u8868</DjmButton>\n * </DjmResult>\n *\n * status \u4E0E type \u7B49\u4EF7\uFF0C\u53D6\u7EDF\u4E00\u8BED\u4E49\u503C success / warning / danger / info\uFF0Cdanger \u89C6\u4F5C error\u3002\n */\nimport Icon from '../icon/index.js'\n\nconst ICONS = {\n success: 'check',\n warning: 'alert',\n error: 'x',\n info: 'info'\n}\n\nconst STATUS_ALIAS = {\n danger: 'error'\n}\n\nexport default {\n name: 'DjmResult',\n components: { DjmIcon: Icon },\n props: {\n status: { type: String, default: '' }, // success / warning / error / info\n type: { type: String, default: '' },\n title: { type: String, default: '' },\n description: { type: String, default: '' }\n },\n computed: {\n actualStatus () {\n const raw = this.status || this.type || 'info'\n return STATUS_ALIAS[raw] || raw\n },\n iconName () {\n return ICONS[this.actualStatus] || ICONS.info\n }\n },\n template: `\n <div class=\"djm-result\" :class=\"'djm-result-' + actualStatus\" role=\"status\">\n <div class=\"djm-result-icon\">\n <slot name=\"icon\">\n <DjmIcon :name=\"iconName\" :size=\"26\" />\n </slot>\n </div>\n <div class=\"djm-result-title\">{{ title }}</div>\n <div v-if=\"description\" class=\"djm-result-desc\">{{ description }}</div>\n <div v-if=\"$slots.default\" class=\"djm-result-extra\"><slot></slot></div>\n </div>\n `\n}\n", "/**\n * \u65F6\u95F4\u7EBF\uFF1A\u6309\u65F6\u95F4\u987A\u5E8F\u5C55\u793A\u4E8B\u4EF6\uFF0C\u652F\u6301\u8BED\u4E49\u8272\u5706\u70B9\n * \u7528\u6CD5\uFF1A<DjmTimeline :items=\"[{ time: '09:26', title: '\u63D0\u4EA4\u7533\u8BF7', description: '\u2026', tone: 'green' }]\" />\n */\nexport default {\n name: 'DjmTimeline',\n props: {\n // tone: default / brand / green / amber / red\n items: { type: Array, default: () => [] }\n },\n template: `\n <ul class=\"djm-timeline\">\n <li v-for=\"(item, index) in items\" :key=\"item.key || index\">\n <i class=\"djm-timeline-dot\" :class=\"item.tone ? 'djm-tone-' + item.tone : ''\"></i>\n <div class=\"djm-timeline-head\">\n <strong>{{ item.title }}</strong>\n <span v-if=\"item.time\">{{ item.time }}</span>\n </div>\n <p v-if=\"item.description\">{{ item.description }}</p>\n <slot name=\"item\" :item=\"item\"></slot>\n </li>\n </ul>\n `\n}\n", "/**\n * \u6298\u53E0\u9762\u677F\uFF1A\u590D\u7528 accordion \u65E2\u6709\u6837\u5F0F\uFF0C\u652F\u6301\u624B\u98CE\u7434\u6A21\u5F0F\n * \u7528\u6CD5\uFF1A<DjmCollapse v-model=\"active\" :items=\"[{ key: 'a', title: '\u6807\u9898', content: '\u5185\u5BB9' }]\" />\n * \u5185\u5BB9\u4E5F\u53EF\u7528\u63D2\u69FD item \u81EA\u5B9A\u4E49\uFF1A<template #item=\"{ item }\">\u2026</template>\n */\nimport Icon from '../icon/index.js'\n\nexport default {\n name: 'DjmCollapse',\n components: { DjmIcon: Icon },\n props: {\n items: { type: Array, default: () => [] },\n modelValue: { type: Array, default: () => [] },\n // \u624B\u98CE\u7434\uFF1A\u540C\u65F6\u53EA\u5C55\u5F00\u4E00\u9879\n accordion: { type: Boolean, default: false }\n },\n emits: ['update:modelValue', 'change'],\n methods: {\n isOpen (item) {\n return this.modelValue.indexOf(item.key) > -1\n },\n toggle (item) {\n if (item.disabled) return\n let next\n if (this.accordion) {\n next = this.isOpen(item) ? [] : [item.key]\n } else if (this.isOpen(item)) {\n next = this.modelValue.filter((key) => key !== item.key)\n } else {\n next = this.modelValue.concat(item.key)\n }\n this.$emit('update:modelValue', next)\n this.$emit('change', next)\n }\n },\n template: `\n <div class=\"djm-accordion\">\n <div v-for=\"item in items\" :key=\"item.key\" class=\"djm-accordion-item\">\n <button\n class=\"djm-accordion-head\"\n type=\"button\"\n :aria-expanded=\"String(isOpen(item))\"\n :disabled=\"item.disabled\"\n @click=\"toggle(item)\"\n >\n <span>{{ item.title }}</span>\n <DjmIcon :name=\"isOpen(item) ? 'chevron-up' : 'chevron-down'\" :size=\"14\" />\n </button>\n <div v-show=\"isOpen(item)\" class=\"djm-accordion-body\">\n <slot name=\"item\" :item=\"item\">{{ item.content }}</slot>\n </div>\n </div>\n </div>\n `\n}\n", "/**\n * \u7EDF\u8BA1\u6570\u503C\uFF1A\u6807\u9898 + \u6570\u503C + \u540C\u6BD4\uFF0C\u7528\u4E8E\u770B\u677F\u6307\u6807\n * \u7528\u6CD5\uFF1A<DjmStatistic title=\"\u4ECA\u65E5\u6D3B\u8DC3\" :value=\"86\" :precision=\"0\" suffix=\"\u4EBA\" :trend=\"12.4\" />\n */\nexport default {\n name: 'DjmStatistic',\n props: {\n title: { type: String, default: '' },\n value: { type: [Number, String], default: 0 },\n // \u5C0F\u6570\u4F4D\uFF0C\u4EC5\u5728\u6570\u503C\u578B\u65F6\u751F\u6548\n precision: { type: Number, default: 0 },\n prefix: { type: String, default: '' },\n suffix: { type: String, default: '' },\n // \u540C\u6BD4\u767E\u5206\u6BD4\uFF1A\u6B63\u6570\u5411\u4E0A\u3001\u8D1F\u6570\u5411\u4E0B\uFF0C0 \u4E0D\u663E\u793A\n trend: { type: Number, default: 0 },\n trendLabel: { type: String, default: '\u8F83\u4E0A\u671F' }\n },\n computed: {\n display () {\n const num = Number(this.value)\n if (!Number.isFinite(num)) return this.value\n // toFixed \u53EA\u63A5\u53D7 0-100\uFF0C\u8D85\u51FA\u4F1A\u76F4\u63A5\u629B\u9519\n const precision = Math.min(100, Math.max(0, Math.floor(Number(this.precision)) || 0))\n return num.toFixed(precision)\n }\n },\n template: `\n <div class=\"djm-stat\">\n <div class=\"djm-stat-title\">{{ title }}</div>\n <div class=\"djm-stat-value\">\n <span v-if=\"prefix\" class=\"djm-stat-affix\">{{ prefix }}</span>\n <strong>{{ display }}</strong>\n <span v-if=\"suffix\" class=\"djm-stat-affix\">{{ suffix }}</span>\n </div>\n <div v-if=\"trend\" class=\"djm-stat-trend\" :class=\"trend > 0 ? 'djm-is-up' : 'djm-is-down'\">\n <span class=\"djm-stat-trend-label\">{{ trendLabel }}</span>\n {{ trend > 0 ? '+' : '' }}{{ trend }}%\n </div>\n </div>\n `\n}\n", "/**\n * \u6B65\u9AA4\u6761\uFF1A\u5C55\u793A\u6D41\u7A0B\u8FDB\u5EA6\uFF0C\u652F\u6301\u6A2A\u5411\u4E0E\u7EB5\u5411\n * \u7528\u6CD5\uFF1A<DjmSteps :items=\"[{ title: '\u586B\u5199', description: '\u2026' }]\" :current=\"1\" />\n */\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\n\nexport default {\n name: 'DjmSteps',\n components: { DjmIcon: Icon },\n props: {\n items: { type: Array, default: () => [] },\n // \u5F53\u524D\u8FDB\u884C\u5230\u7B2C\u51E0\u6B65\uFF0C\u4ECE 0 \u5F00\u59CB\n current: { type: Number, default: 0 },\n direction: { type: String, default: 'horizontal' }, // horizontal / vertical\n // \u5F53\u524D\u6B65\u9AA4\u72B6\u6001\uFF1A'' \u6B63\u5E38 / error \u5931\u8D25\n status: { type: String, default: '' }\n },\n methods: {\n stepState (index) {\n if (index < this.current) return 'finish'\n if (index === this.current) return this.status === 'error' ? 'error' : 'process'\n return 'wait'\n },\n t\n },\n template: `\n <div class=\"djm-steps\" :class=\"'djm-steps-' + direction\">\n <div\n v-for=\"(item, index) in items\"\n :key=\"item.key || index\"\n class=\"djm-step\"\n :class=\"'djm-is-' + stepState(index)\"\n :aria-current=\"index === current ? 'step' : undefined\"\n >\n <div class=\"djm-step-head\">\n <span class=\"djm-step-icon\" aria-hidden=\"true\">\n <DjmIcon v-if=\"index < current\" name=\"check\" :size=\"12\" />\n <template v-else>{{ index + 1 }}</template>\n </span>\n <span class=\"djm-sr-only\">{{ t('steps.order', { index: index + 1 }) }}</span>\n <span class=\"djm-step-title\">{{ item.title }}</span>\n <span v-if=\"index < items.length - 1\" class=\"djm-step-line\" aria-hidden=\"true\"></span>\n </div>\n <div v-if=\"item.description\" class=\"djm-step-desc\">{{ item.description }}</div>\n </div>\n </div>\n `\n}\n", "/**\n * \u6570\u5B57\u8F93\u5165\uFF1A\u5E26\u52A0\u51CF\u6309\u94AE\uFF0C\u8F93\u5165\u65F6\u6309 min/max/precision \u6536\u655B\n * \u7528\u6CD5\uFF1A<DjmInputNumber v-model=\"num\" :min=\"0\" :max=\"999\" :step=\"10\" />\n */\nexport default {\n name: 'DjmInputNumber',\n props: {\n modelValue: { type: Number, default: null },\n min: { type: Number, default: -Infinity },\n max: { type: Number, default: Infinity },\n step: { type: Number, default: 1 },\n precision: { type: Number, default: 0 },\n disabled: { type: Boolean, default: false },\n placeholder: { type: String, default: '' },\n ariaLabel: { type: String, default: '\u6570\u5B57\u8F93\u5165' }\n },\n emits: ['update:modelValue', 'change', 'focus', 'blur'],\n data () {\n return { draft: this.displayOf(this.modelValue) }\n },\n watch: {\n modelValue (value) {\n this.draft = this.displayOf(value)\n }\n },\n computed: {\n canDecrease () {\n return !this.disabled && Number(this.modelValue) > this.min\n },\n canIncrease () {\n return !this.disabled && Number(this.modelValue) < this.max\n }\n },\n methods: {\n displayOf (value) {\n if (value === null || value === undefined || value === '') return ''\n const num = Number(value)\n return Number.isFinite(num) ? num.toFixed(this.precision) : ''\n },\n // \u6536\u655B\u5230 min/max \u5E76\u4FDD\u7559\u6307\u5B9A\u5C0F\u6570\u4F4D\uFF1B\u7A7A\u503C\u4FDD\u6301 null\uFF0C\u4E0D\u8981\u88AB Number(null) \u53D8\u6210 0\n normalize (value) {\n if (value === null || value === undefined || value === '') return null\n let num = Number(value)\n if (!Number.isFinite(num)) return null\n num = Math.min(this.max, Math.max(this.min, num))\n return Number(num.toFixed(this.precision))\n },\n commit (value) {\n const next = this.normalize(value)\n this.draft = this.displayOf(next)\n if (next !== this.modelValue) {\n this.$emit('update:modelValue', next)\n this.$emit('change', next)\n }\n },\n stepBy (delta) {\n if (this.disabled) return\n const base = Number(this.modelValue)\n this.commit((Number.isFinite(base) ? base : 0) + delta)\n },\n onInput (event) {\n this.draft = event.target.value\n },\n onBlur (event) {\n if (this.draft === '') this.commit(null)\n else this.commit(this.draft)\n this.$emit('blur', event)\n },\n onKeydown (event) {\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n this.stepBy(this.step)\n } else if (event.key === 'ArrowDown') {\n event.preventDefault()\n this.stepBy(-this.step)\n }\n }\n },\n template: `\n <div class=\"djm-input-number\" :class=\"{ 'djm-is-disabled': disabled }\">\n <input\n class=\"djm-input\"\n type=\"text\"\n autocomplete=\"off\"\n inputmode=\"decimal\"\n :value=\"draft\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :aria-label=\"ariaLabel\"\n @input=\"onInput\"\n @blur=\"onBlur\"\n @focus=\"$emit('focus', $event)\"\n @keydown=\"onKeydown\"\n @keyup.enter=\"$event.target.blur()\"\n />\n <span class=\"djm-input-number-step\">\n <button type=\"button\" tabindex=\"-1\" aria-label=\"\u589E\u52A0\" :disabled=\"!canIncrease\" @click=\"stepBy(step)\">\n <svg viewBox=\"0 0 12 8\" width=\"9\" height=\"6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"><path d=\"M1 6l5-4 5 4\" /></svg>\n </button>\n <button type=\"button\" tabindex=\"-1\" aria-label=\"\u51CF\u5C11\" :disabled=\"!canDecrease\" @click=\"stepBy(-step)\">\n <svg viewBox=\"0 0 12 8\" width=\"9\" height=\"6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"><path d=\"M1 2l5 4 5-4\" /></svg>\n </button>\n </span>\n </div>\n `\n}\n", "/**\n * \u8BC4\u5206\uFF1A\u70B9\u9009\u661F\u7EA7\uFF0C\u652F\u6301\u534A\u661F\u5173\u95ED\u3001\u53EA\u8BFB\u4E0E\u6E05\u7A7A\n * \u7528\u6CD5\uFF1A<DjmRate v-model=\"score\" :count=\"5\" />\n */\nexport default {\n name: 'DjmRate',\n props: {\n modelValue: { type: Number, default: 0 },\n count: { type: Number, default: 5 },\n disabled: { type: Boolean, default: false },\n readonly: { type: Boolean, default: false },\n // \u518D\u6B21\u70B9\u51FB\u540C\u4E00\u9897\u661F\u6E05\u96F6\n clearable: { type: Boolean, default: true }\n },\n emits: ['update:modelValue', 'change'],\n data () {\n return { hovered: 0 }\n },\n computed: {\n // \u9F20\u6807\u60AC\u505C\u65F6\u9884\u89C8\uFF0C\u79FB\u51FA\u540E\u56DE\u5230\u771F\u5B9E\u503C\n activeCount () {\n return this.hovered || this.modelValue\n }\n },\n methods: {\n pick (index) {\n if (this.disabled || this.readonly) return\n const next = this.clearable && this.modelValue === index ? 0 : index\n this.$emit('update:modelValue', next)\n this.$emit('change', next)\n },\n // \u5355\u9009\u7EC4\u8BED\u4E49\uFF1A\u65B9\u5411\u952E\u5207\u6362\u5E76\u805A\u7126\u5230\u76EE\u6807\u661F\uFF0CTab \u53EA\u505C\u7559\u5728\u5F53\u524D\u503C\u4E0A\n onKey (index, event) {\n if (this.disabled || this.readonly) return\n const step = event.key === 'ArrowRight' || event.key === 'ArrowUp'\n ? 1\n : event.key === 'ArrowLeft' || event.key === 'ArrowDown' ? -1 : 0\n let next = 0\n if (step) next = Math.min(this.count, Math.max(1, index + step))\n else if (event.key === 'Home') next = 1\n else if (event.key === 'End') next = this.count\n if (!next) return\n event.preventDefault()\n this.pick(next)\n this.$nextTick(() => {\n const stars = this.$refs.stars || []\n const target = stars[next - 1]\n if (target) target.focus()\n })\n }\n },\n template: `\n <div\n class=\"djm-rate\"\n :class=\"{ 'djm-is-disabled': disabled || readonly }\"\n role=\"radiogroup\"\n :aria-label=\"'\u8BC4\u5206 ' + modelValue + ' \u5206'\"\n @mouseleave=\"hovered = 0\"\n >\n <button\n v-for=\"index in count\"\n ref=\"stars\"\n :key=\"index\"\n class=\"djm-rate-star\"\n :class=\"{ 'djm-is-on': index <= activeCount }\"\n type=\"button\"\n role=\"radio\"\n :aria-checked=\"String(index === modelValue)\"\n :aria-label=\"index + ' \u5206'\"\n :tabindex=\"index === (modelValue || 1) ? 0 : -1\"\n :disabled=\"disabled || readonly\"\n @mouseenter=\"hovered = index\"\n @focus=\"hovered = index\"\n @blur=\"hovered = 0\"\n @click=\"pick(index)\"\n @keydown=\"onKey(index, $event)\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M12 2.6l2.9 5.9 6.5.9-4.7 4.6 1.1 6.4L12 17.4l-5.8 3 1.1-6.4L2.6 9.4l6.5-.9z\" />\n </svg>\n </button>\n </div>\n `\n}\n", "/**\n * \u6ED1\u5757\uFF1A\u4F20\u6570\u5B57\u4E3A\u5355\u503C\uFF0C\u4F20\u6570\u7EC4\u81EA\u52A8\u53D8\u6210\u533A\u95F4\u9009\u62E9\n * \u7528\u6CD5\uFF1A<DjmSlider v-model=\"value\" :min=\"0\" :max=\"100\" />\n * <DjmSlider v-model=\"range\" :min=\"0\" :max=\"1000\" :step=\"50\" />\n */\nexport default {\n name: 'DjmSlider',\n props: {\n modelValue: { type: [Number, Array], default: 0 },\n min: { type: Number, default: 0 },\n max: { type: Number, default: 100 },\n step: { type: Number, default: 1 },\n disabled: { type: Boolean, default: false },\n // { 25: '\u4F4E', 75: '\u9AD8' }\uFF0C\u6309\u6570\u503C\u5B9A\u4F4D\n marks: { type: Object, default: () => ({}) }\n },\n emits: ['update:modelValue', 'change'],\n data () {\n return { dragging: -1 }\n },\n computed: {\n // \u6B65\u957F\u975E\u6CD5\uFF080 / \u8D1F\u6570 / \u975E\u6570\u5B57\uFF09\u65F6\u6309 1 \u5904\u7406\uFF0C\u907F\u514D\u9664\u4EE5 0 \u5F97\u5230 NaN\n stepSize () {\n return Math.abs(Number(this.step)) || 1\n },\n isRange () {\n return Array.isArray(this.modelValue)\n },\n values () {\n const list = this.isRange ? this.modelValue : [this.modelValue]\n return list.map((item) => this.clamp(Number(item) || 0))\n },\n barStyle () {\n const first = this.percentOf(this.values[0])\n const last = this.percentOf(this.values[this.values.length - 1])\n return { left: first + '%', width: last - first + '%' }\n },\n markList () {\n return Object.keys(this.marks).map((key) => ({\n value: Number(key),\n label: this.marks[key],\n percent: this.percentOf(Number(key))\n }))\n }\n },\n methods: {\n clamp (value) {\n const low = this.isRange ? this.min : this.min\n return Math.min(this.max, Math.max(low, value))\n },\n percentOf (value) {\n if (this.max === this.min) return 0\n return ((value - this.min) / (this.max - this.min)) * 100\n },\n // \u6309\u6B65\u957F\u53D6\u6574\uFF0C\u907F\u514D\u62D6\u51FA 33.333 \u8FD9\u79CD\u503C\n quantize (value) {\n const steps = Math.round((value - this.min) / this.stepSize)\n return Number((this.min + steps * this.stepSize).toFixed(6))\n },\n valueAt (clientX) {\n const rect = this.$refs.track.getBoundingClientRect()\n if (!rect.width) return this.min\n const ratio = Math.min(1, Math.max(0, (clientX - rect.left) / rect.width))\n return this.quantize(this.min + ratio * (this.max - this.min))\n },\n emitValue (next) {\n const value = this.isRange ? next : next[0]\n this.$emit('update:modelValue', value)\n },\n startDrag (index, event) {\n if (this.disabled) return\n event.preventDefault()\n event.stopPropagation()\n this.dragging = index\n // \u6307\u9488\u6355\u83B7\uFF1A\u62D6\u51FA\u6ED1\u5757\u8303\u56F4\u4E5F\u80FD\u7EE7\u7EED\u8DDF\u968F\n window.addEventListener('pointermove', this.onMove)\n window.addEventListener('pointerup', this.onUp)\n this.$refs.track.setPointerCapture && this.$refs.track.setPointerCapture(event.pointerId)\n },\n onTrackDown (event) {\n if (this.disabled) return\n const value = this.valueAt(event.clientX)\n const next = this.values.slice()\n if (!this.isRange) {\n this.emitValue([value])\n this.startDrag(0, event)\n return\n }\n // \u533A\u95F4\u6A21\u5F0F\uFF1A\u6309\u70B9\u51FB\u4F4D\u7F6E\u9009\u66F4\u8FD1\u7684\u4E00\u7AEF\u62D6\u52A8\n const index = Math.abs(value - next[0]) <= Math.abs(value - next[1]) ? 0 : 1\n next[index] = value\n next.sort((a, b) => a - b)\n this.emitValue(next)\n this.startDrag(index, event)\n },\n onMove (event) {\n if (this.dragging < 0) return\n const value = this.valueAt(event.clientX)\n const next = this.values.slice()\n if (this.isRange) {\n // \u4E24\u7AEF\u4E0D\u80FD\u4EA4\u53C9\n const other = next[1 - this.dragging]\n next[this.dragging] = this.dragging === 0 ? Math.min(value, other) : Math.max(value, other)\n } else {\n next[0] = value\n }\n this.emitValue(next)\n },\n onUp () {\n if (this.dragging < 0) return\n this.dragging = -1\n window.removeEventListener('pointermove', this.onMove)\n window.removeEventListener('pointerup', this.onUp)\n this.$emit('change', this.isRange ? this.values.slice() : this.values[0])\n },\n onKey (index, event) {\n if (this.disabled) return\n const delta = event.key === 'ArrowRight' || event.key === 'ArrowUp'\n ? this.stepSize\n : event.key === 'ArrowLeft' || event.key === 'ArrowDown' ? -this.stepSize : 0\n if (!delta) return\n event.preventDefault()\n const next = this.values.slice()\n next[index] = Math.min(this.max, Math.max(this.min, next[index] + delta))\n if (this.isRange && index === 0 && next[0] > next[1]) next[0] = next[1]\n if (this.isRange && index === 1 && next[1] < next[0]) next[1] = next[0]\n this.emitValue(next)\n this.$emit('change', this.isRange ? next : next[0])\n }\n },\n beforeUnmount () {\n window.removeEventListener('pointermove', this.onMove)\n window.removeEventListener('pointerup', this.onUp)\n },\n template: `\n <div class=\"djm-slider\" :class=\"{ 'djm-is-disabled': disabled, 'djm-has-marks': markList.length }\">\n <div class=\"djm-slider-track\" ref=\"track\" @pointerdown=\"onTrackDown\">\n <div class=\"djm-slider-rail\"></div>\n <div class=\"djm-slider-bar\" :style=\"barStyle\"></div>\n <button\n v-for=\"(value, index) in values\"\n :key=\"index\"\n class=\"djm-slider-thumb\"\n type=\"button\"\n role=\"slider\"\n :aria-valuemin=\"min\"\n :aria-valuemax=\"max\"\n :aria-valuenow=\"value\"\n :aria-label=\"isRange ? (index === 0 ? '\u8D77\u59CB\u503C' : '\u7ED3\u675F\u503C') : '\u5F53\u524D\u503C'\"\n :style=\"{ left: percentOf(value) + '%' }\"\n :disabled=\"disabled\"\n @pointerdown=\"startDrag(index, $event)\"\n @keydown=\"onKey(index, $event)\"\n ></button>\n </div>\n <div v-if=\"markList.length\" class=\"djm-slider-marks\">\n <span\n v-for=\"mark in markList\"\n :key=\"mark.value\"\n class=\"djm-slider-mark\"\n :style=\"{ left: mark.percent + '%' }\"\n >{{ mark.label }}</span>\n </div>\n </div>\n `\n}\n", "/**\n * \u65F6\u95F4\u9009\u62E9\uFF1A\u65F6/\u5206\uFF08\u53EF\u9009\u79D2\uFF09\u4E09\u5217\u70B9\u9009\uFF0C\u8FD4\u56DE HH:mm \u6216 HH:mm:ss\n * \u7528\u6CD5\uFF1A<DjmTimePicker v-model=\"time\" /> / <DjmTimePicker v-model=\"time\" format=\"HH:mm:ss\" />\n */\nimport Icon from '../icon/index.js'\nimport { bindPanelListeners, shouldFlipUp, dropdownPanelStyle, PANEL_HIDDEN_STYLE } from '../../utils/panel.js'\n\nconst pad = (num) => String(num).padStart(2, '0')\n\nexport default {\n name: 'DjmTimePicker',\n components: { DjmIcon: Icon },\n props: {\n modelValue: { type: String, default: '' },\n format: { type: String, default: 'HH:mm' },\n // \u5206\u949F\u5217\u6B65\u957F\uFF0C\u6BD4\u5982 5 \u8868\u793A 00/05/10\u2026\n minuteStep: { type: Number, default: 1 },\n disabled: { type: Boolean, default: false },\n placeholder: { type: String, default: '\u9009\u62E9\u65F6\u95F4' },\n clearable: { type: Boolean, default: true }\n },\n emits: ['update:modelValue', 'change', 'visible-change'],\n watch: {\n open (value) {\n this.$emit('visible-change', value)\n }\n },\n data () {\n return { open: false, draft: { h: '00', m: '00', s: '00' }, panelStyle: { ...PANEL_HIDDEN_STYLE } }\n },\n computed: {\n hasSeconds () {\n return this.format.indexOf('ss') > -1\n },\n hours () {\n return Array.from({ length: 24 }, (item, index) => pad(index))\n },\n minutes () {\n // \u6B65\u957F\u975E\u6CD5\u65F6\u6309 1 \u5904\u7406\uFF0C\u907F\u514D\u6B7B\u5FAA\u73AF\n const step = Math.max(1, Math.floor(Number(this.minuteStep)) || 1)\n const list = []\n for (let value = 0; value < 60; value += step) list.push(pad(value))\n return list\n },\n seconds () {\n return Array.from({ length: 60 }, (item, index) => pad(index))\n },\n // \u53EA\u6709 format \u5305\u542B\u79D2\u65F6\u624D\u51FA\u7B2C\u4E09\u5217\n columnDefs () {\n const cols = [\n { key: 'h', list: this.hours },\n { key: 'm', list: this.minutes }\n ]\n if (this.hasSeconds) cols.push({ key: 's', list: this.seconds })\n return cols\n }\n },\n methods: {\n openPanel () {\n if (this.disabled) return\n const parts = (this.modelValue || '00:00:00').split(':')\n this.draft = { h: parts[0] || '00', m: parts[1] || '00', s: parts[2] || '00' }\n this.open = true\n // \u6D6E\u5C42\u5168\u5C40\u76D1\u542C\uFF1A\u5916\u90E8\u70B9\u51FB / Esc \u5173\u95ED\uFF0Cresize / scroll \u91CD\u5B9A\u4F4D\n this._detachPanel = bindPanelListeners({\n root: () => this.$refs.root,\n panel: () => this.$refs.panel,\n onClose: this.closePanel,\n onReposition: this.updatePosition\n })\n requestAnimationFrame(this.updatePosition)\n },\n updatePosition () {\n if (!this.open || !this.$refs.root) return\n const rect = this.$refs.root.getBoundingClientRect()\n const panel = this.$refs.panel\n // \u4E0B\u65B9\u653E\u4E0D\u4E0B\u5C31\u5411\u4E0A\u5C55\u5F00\n this.panelStyle = dropdownPanelStyle({\n rect,\n flip: shouldFlipUp(rect, panel ? panel.offsetHeight : 240),\n clampWidth: panel ? panel.offsetWidth : 180\n })\n },\n closePanel () {\n if (!this.open) return\n this.open = false\n this.panelStyle = { ...PANEL_HIDDEN_STYLE }\n if (this._detachPanel) {\n this._detachPanel()\n this._detachPanel = null\n }\n },\n // \u70B9\u9009\u5373\u751F\u6548\uFF0C\u548C\u539F\u751F\u65F6\u95F4\u63A7\u4EF6\u4E00\u81F4\n pick (unit, value) {\n this.draft = { ...this.draft, [unit]: value }\n const text = this.hasSeconds\n ? this.draft.h + ':' + this.draft.m + ':' + this.draft.s\n : this.draft.h + ':' + this.draft.m\n this.$emit('update:modelValue', text)\n this.$emit('change', text)\n },\n clear () {\n this.$emit('update:modelValue', '')\n this.$emit('change', '')\n }\n },\n beforeUnmount () {\n this.closePanel()\n },\n template: `\n <div class=\"djm-time-picker\" ref=\"root\" :class=\"{ 'djm-is-disabled': disabled }\">\n <!-- \u7528 div \u627F\u8F7D combobox\uFF0C\u6E05\u7A7A\u6309\u94AE\u4F5C\u4E3A\u5176\u5B50\u5143\u7D20\uFF0C\u907F\u514D\u6309\u94AE\u5D4C\u5957\u6309\u94AE -->\n <div\n class=\"djm-input djm-time-trigger\"\n role=\"combobox\"\n :tabindex=\"disabled ? -1 : 0\"\n :aria-expanded=\"String(open)\"\n :aria-disabled=\"String(disabled)\"\n :aria-label=\"modelValue || placeholder\"\n aria-haspopup=\"dialog\"\n @click=\"open ? closePanel() : openPanel()\"\n @keydown.enter.prevent=\"open ? closePanel() : openPanel()\"\n @keydown.space.prevent=\"open ? closePanel() : openPanel()\"\n >\n <span :class=\"{ 'djm-muted': !modelValue }\">{{ modelValue || placeholder }}</span>\n <button\n v-if=\"clearable && modelValue && !disabled\"\n class=\"djm-time-clear\"\n type=\"button\"\n aria-label=\"\u6E05\u7A7A\u65F6\u95F4\"\n @click.stop=\"clear\"\n >\u00D7</button>\n <DjmIcon v-else name=\"clock\" :size=\"13\" class=\"djm-time-icon\" />\n </div>\n\n <Teleport to=\"body\">\n <div\n v-if=\"open\"\n ref=\"panel\"\n class=\"djm-time-panel\"\n :style=\"panelStyle\"\n role=\"dialog\"\n aria-label=\"\u9009\u62E9\u65F6\u95F4\"\n >\n <div\n v-for=\"col in columnDefs\"\n :key=\"col.key\"\n class=\"djm-time-col\"\n >\n <div class=\"djm-time-scroll\">\n <button\n v-for=\"item in col.list\"\n :key=\"item\"\n class=\"djm-time-cell\"\n :class=\"{ 'djm-is-active': draft[col.key] === item }\"\n type=\"button\"\n @click=\"pick(col.key, item)\"\n >{{ item }}</button>\n </div>\n </div>\n </div>\n </Teleport>\n </div>\n `\n}\n", "/**\n * \u989C\u8272\u9009\u62E9\uFF1A\u9884\u8BBE\u8272\u677F\u70B9\u9009 + \u624B\u52A8\u8F93\u5165\u5341\u516D\u8FDB\u5236\n * \u7528\u6CD5\uFF1A<DjmColorPicker v-model=\"color\" />\n */\nimport { bindPanelListeners, shouldFlipUp, dropdownPanelStyle, PANEL_HIDDEN_STYLE } from '../../utils/panel.js'\n\nexport default {\n name: 'DjmColorPicker',\n props: {\n modelValue: { type: String, default: '' },\n presets: {\n type: Array,\n default: () => [\n '#145a9f', '#2b86d9', '#4ec98d', '#178050', '#e3b45f',\n '#966215', '#ef8071', '#c0392b', '#805ad5', '#4a5568',\n '#1e2b3a', '#f1f4f9'\n ]\n },\n disabled: { type: Boolean, default: false }\n },\n emits: ['update:modelValue', 'change', 'visible-change'],\n data () {\n return { open: false, draft: this.modelValue, panelStyle: { ...PANEL_HIDDEN_STYLE } }\n },\n watch: {\n modelValue (value) {\n this.draft = value\n },\n open (value) {\n this.$emit('visible-change', value)\n }\n },\n methods: {\n openPanel () {\n if (this.disabled) return\n this.draft = this.modelValue\n this.open = true\n // \u6D6E\u5C42\u5168\u5C40\u76D1\u542C\uFF1A\u5916\u90E8\u70B9\u51FB / Esc \u5173\u95ED\uFF0Cresize / scroll \u91CD\u5B9A\u4F4D\n this._detachPanel = bindPanelListeners({\n root: () => this.$refs.root,\n panel: () => this.$refs.panel,\n onClose: this.closePanel,\n onReposition: this.updatePosition\n })\n requestAnimationFrame(this.updatePosition)\n },\n updatePosition () {\n if (!this.open || !this.$refs.root) return\n const rect = this.$refs.root.getBoundingClientRect()\n const panel = this.$refs.panel\n // \u4E0B\u65B9\u653E\u4E0D\u4E0B\u5C31\u5411\u4E0A\u5C55\u5F00\n this.panelStyle = dropdownPanelStyle({\n rect,\n flip: shouldFlipUp(rect, panel ? panel.offsetHeight : 220),\n clampWidth: panel ? panel.offsetWidth : 220\n })\n },\n closePanel () {\n if (!this.open) return\n this.open = false\n this.panelStyle = { ...PANEL_HIDDEN_STYLE }\n if (this._detachPanel) {\n this._detachPanel()\n this._detachPanel = null\n }\n },\n emitColor (color) {\n this.$emit('update:modelValue', color)\n this.$emit('change', color)\n },\n pick (color) {\n this.draft = color\n this.emitColor(color)\n },\n // \u53EA\u63A5\u53D7 #rgb / #rrggbb\uFF0C\u8F93\u5165\u4E0D\u5408\u6CD5\u65F6\u4E0D\u56DE\u4F20\n commitInput () {\n const value = this.draft.trim()\n if (!/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(value)) {\n this.draft = this.modelValue\n return\n }\n this.emitColor(value.toLowerCase())\n }\n },\n beforeUnmount () {\n this.closePanel()\n },\n template: `\n <div class=\"djm-color-picker\" ref=\"root\" :class=\"{ 'djm-is-disabled': disabled }\">\n <button\n class=\"djm-input djm-color-trigger\"\n type=\"button\"\n :disabled=\"disabled\"\n :aria-expanded=\"String(open)\"\n aria-haspopup=\"dialog\"\n aria-label=\"\u9009\u62E9\u989C\u8272\"\n @click=\"open ? closePanel() : openPanel()\"\n >\n <span class=\"djm-color-swatch\" :style=\"{ background: modelValue || 'transparent' }\"></span>\n <span class=\"djm-color-text\" :class=\"{ 'djm-muted': !modelValue }\">{{ modelValue || '\u9009\u62E9\u989C\u8272' }}</span>\n </button>\n\n <Teleport to=\"body\">\n <div v-if=\"open\" ref=\"panel\" class=\"djm-color-panel\" :style=\"panelStyle\" role=\"dialog\" aria-label=\"\u989C\u8272\u9762\u677F\">\n <div class=\"djm-color-grid\">\n <button\n v-for=\"color in presets\"\n :key=\"color\"\n class=\"djm-color-cell\"\n :class=\"{ 'djm-is-active': color.toLowerCase() === (modelValue || '').toLowerCase() }\"\n type=\"button\"\n :style=\"{ background: color }\"\n :aria-label=\"color\"\n @click=\"pick(color)\"\n ></button>\n </div>\n <div class=\"djm-color-input-row\">\n <span class=\"djm-color-preview\" :style=\"{ background: draft || 'transparent' }\"></span>\n <input\n v-model=\"draft\"\n class=\"djm-input\"\n autocomplete=\"off\"\n placeholder=\"#145a9f\"\n aria-label=\"\u989C\u8272\u503C\"\n @keyup.enter=\"commitInput\"\n @blur=\"commitInput\"\n />\n </div>\n </div>\n </Teleport>\n </div>\n `\n}\n", "/**\n * \u7EA7\u8054\u9009\u62E9\uFF1A\u6309\u5C42\u7EA7\u5C55\u5F00\u5217\uFF0C\u9009\u4E2D\u53F6\u5B50\u540E\u8FD4\u56DE\u5B8C\u6574\u8DEF\u5F84\n * \u7528\u6CD5\uFF1A<DjmCascader v-model=\"path\" :options=\"options\" />\n * options: [{ value, label, children }]\uFF0C\u652F\u6301\u4EFB\u610F\u5C42\n */\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\nimport { bindPanelListeners, shouldFlipUp, dropdownPanelStyle, PANEL_HIDDEN_STYLE } from '../../utils/panel.js'\n\nexport default {\n name: 'DjmCascader',\n components: { DjmIcon: Icon },\n props: {\n modelValue: { type: Array, default: () => [] },\n options: { type: Array, default: () => [] },\n placeholder: { type: String, default: '\u8BF7\u9009\u62E9' },\n disabled: { type: Boolean, default: false },\n clearable: { type: Boolean, default: true }\n },\n emits: ['update:modelValue', 'change', 'visible-change'],\n watch: {\n // \u9762\u677F\u5F00\u5408\u540C\u6B65\u7ED9\u5916\u5C42\uFF0C\u4FBF\u4E8E\u8054\u52A8\u57CB\u70B9\u6216\u6536\u8D77\u6821\u9A8C\u63D0\u793A\n open (value) {\n this.$emit('visible-change', value)\n }\n },\n data () {\n return { open: false, activePath: [], panelStyle: { ...PANEL_HIDDEN_STYLE } }\n },\n computed: {\n // \u89E6\u53D1\u5668\u4E0A\u5C55\u793A\u300C\u4E00\u7EA7 / \u4E8C\u7EA7 / \u4E09\u7EA7\u300D\n selectedLabels () {\n const labels = []\n let list = this.options\n for (const value of this.modelValue) {\n const node = (list || []).find((item) => item.value === value)\n if (!node) break\n labels.push(node.label)\n list = node.children\n }\n return labels\n },\n // \u5F53\u524D\u5C55\u5F00\u8DEF\u5F84\u51B3\u5B9A\u663E\u793A\u51E0\u5217\n columns () {\n const cols = [this.options]\n let list = this.options\n for (let index = 0; index < this.activePath.length; index++) {\n const node = (list || []).find((item) => item.value === this.activePath[index])\n if (!node || !node.children || !node.children.length) break\n cols.push(node.children)\n list = node.children\n }\n return cols\n }\n },\n methods: {\n t,\n openPanel () {\n if (this.disabled) return\n this.activePath = this.modelValue.slice()\n this.open = true\n // \u6D6E\u5C42\u5168\u5C40\u76D1\u542C\uFF1A\u5916\u90E8\u70B9\u51FB / Esc \u5173\u95ED\uFF0Cresize / scroll \u91CD\u5B9A\u4F4D\n this._detachPanel = bindPanelListeners({\n root: () => this.$refs.root,\n panel: () => this.$refs.panel,\n onClose: this.closePanel,\n onReposition: this.updatePosition\n })\n requestAnimationFrame(this.updatePosition)\n },\n updatePosition () {\n if (!this.open || !this.$refs.root) return\n const rect = this.$refs.root.getBoundingClientRect()\n const panel = this.$refs.panel\n this.panelStyle = dropdownPanelStyle({\n rect,\n flip: shouldFlipUp(rect, panel ? panel.offsetHeight : 240),\n clampWidth: panel ? panel.offsetWidth : 320\n })\n },\n closePanel () {\n if (!this.open) return\n this.open = false\n this.panelStyle = { ...PANEL_HIDDEN_STYLE }\n if (this._detachPanel) {\n this._detachPanel()\n this._detachPanel = null\n }\n },\n // \u6709\u5B50\u7EA7\u5C31\u5F80\u4E0B\u5C55\u5F00\uFF0C\u53F6\u5B50\u8282\u70B9\u76F4\u63A5\u56DE\u4F20\u5B8C\u6574\u8DEF\u5F84\n pick (node, depth) {\n this.activePath = this.activePath.slice(0, depth).concat(node.value)\n if (!node.children || !node.children.length) {\n this.$emit('update:modelValue', this.activePath.slice())\n this.$emit('change', this.activePath.slice())\n this.closePanel()\n }\n },\n isActive (node, depth) {\n return this.activePath[depth] === node.value\n },\n clear () {\n this.$emit('update:modelValue', [])\n this.$emit('change', [])\n }\n },\n beforeUnmount () {\n this.closePanel()\n },\n template: `\n <div class=\"djm-cascader\" ref=\"root\" :class=\"{ 'djm-is-disabled': disabled }\">\n <!-- \u7528 div \u627F\u8F7D combobox\uFF0C\u6E05\u7A7A\u6309\u94AE\u4F5C\u4E3A\u5176\u5B50\u5143\u7D20\uFF0C\u907F\u514D\u6309\u94AE\u5D4C\u5957\u6309\u94AE -->\n <div\n class=\"djm-input djm-cascader-trigger\"\n role=\"combobox\"\n :tabindex=\"disabled ? -1 : 0\"\n :aria-expanded=\"String(open)\"\n :aria-disabled=\"String(disabled)\"\n :aria-label=\"selectedLabels.length ? selectedLabels.join(' / ') : placeholder\"\n aria-haspopup=\"dialog\"\n @click=\"open ? closePanel() : openPanel()\"\n @keydown.enter.prevent=\"open ? closePanel() : openPanel()\"\n @keydown.space.prevent=\"open ? closePanel() : openPanel()\"\n >\n <span v-if=\"selectedLabels.length\" class=\"djm-cascader-text\">{{ selectedLabels.join(' / ') }}</span>\n <span v-else class=\"djm-cascader-text djm-muted\">{{ placeholder }}</span>\n <button\n v-if=\"clearable && selectedLabels.length && !disabled\"\n class=\"djm-cascader-clear\"\n type=\"button\"\n aria-label=\"\u6E05\u7A7A\u9009\u62E9\"\n @click.stop=\"clear\"\n >\u00D7</button>\n <DjmIcon v-else name=\"chevron-down\" :size=\"13\" class=\"djm-cascader-arrow\" />\n </div>\n\n <Teleport to=\"body\">\n <div v-if=\"open\" ref=\"panel\" class=\"djm-cascader-panel\" :style=\"panelStyle\" role=\"dialog\" aria-label=\"\u7EA7\u8054\u9009\u62E9\">\n <div v-if=\"!options.length\" class=\"djm-cascader-empty\">{{ t('cascader.empty') }}</div>\n <div v-for=\"(column, depth) in columns\" :key=\"depth\" class=\"djm-cascader-col\">\n <button\n v-for=\"node in column\"\n :key=\"node.value\"\n class=\"djm-cascader-cell\"\n :class=\"{ 'djm-is-active': isActive(node, depth) }\"\n type=\"button\"\n @click=\"pick(node, depth)\"\n >\n <span>{{ node.label }}</span>\n <DjmIcon v-if=\"node.children && node.children.length\" name=\"chevron-right\" :size=\"12\" />\n </button>\n </div>\n </div>\n </Teleport>\n </div>\n `\n}\n", "/**\n * \u7A7F\u68AD\u6846\uFF1A\u5DE6\u53F3\u4E24\u680F\u52FE\u9009\u79FB\u52A8\uFF0Cv-model \u7ED1\u5B9A\u53F3\u4FA7\uFF08\u5DF2\u9009\uFF09\u7684\u503C\u6570\u7EC4\n * \u7528\u6CD5\uFF1A<DjmTransfer v-model=\"selected\" :data=\"[{ value, label }]\" />\n */\nexport default {\n name: 'DjmTransfer',\n props: {\n modelValue: { type: Array, default: () => [] },\n data: { type: Array, default: () => [] },\n titles: { type: Array, default: () => ['\u5F85\u9009', '\u5DF2\u9009'] },\n searchable: { type: Boolean, default: true },\n disabled: { type: Boolean, default: false }\n },\n emits: ['update:modelValue', 'change'],\n data () {\n return { checkedLeft: [], checkedRight: [], leftKeyword: '', rightKeyword: '' }\n },\n watch: {\n // \u641C\u7D22\u540E\u53EA\u4FDD\u7559\u5F53\u524D\u53EF\u89C1\u9879\u7684\u52FE\u9009\uFF0C\u907F\u514D\u79FB\u52A8\u88AB\u9690\u85CF\u7684\u9879\n leftKeyword () {\n this.checkedLeft = this.checkedLeft.filter((value) => this.leftList.some((item) => item.value === value))\n },\n rightKeyword () {\n this.checkedRight = this.checkedRight.filter((value) => this.rightList.some((item) => item.value === value))\n }\n },\n computed: {\n leftList () {\n return this.filtered(this.data.filter((item) => this.modelValue.indexOf(item.value) === -1), this.leftKeyword)\n },\n rightList () {\n return this.filtered(this.data.filter((item) => this.modelValue.indexOf(item.value) > -1), this.rightKeyword)\n },\n leftAllChecked () {\n return this.leftList.length > 0 && this.leftList.every((item) => this.checkedLeft.indexOf(item.value) > -1)\n },\n rightAllChecked () {\n return this.rightList.length > 0 && this.rightList.every((item) => this.checkedRight.indexOf(item.value) > -1)\n }\n },\n methods: {\n filtered (list, keyword) {\n const text = keyword.trim().toLowerCase()\n if (!text) return list\n return list.filter((item) => item.label.toLowerCase().indexOf(text) > -1)\n },\n toggleLeft (item) {\n if (item.disabled || this.disabled) return\n this.checkedLeft = this.toggleValue(this.checkedLeft, item.value)\n },\n toggleRight (item) {\n if (item.disabled || this.disabled) return\n this.checkedRight = this.toggleValue(this.checkedRight, item.value)\n },\n toggleValue (list, value) {\n return list.indexOf(value) > -1 ? list.filter((item) => item !== value) : list.concat(value)\n },\n toggleAll (side) {\n if (this.disabled) return\n if (side === 'left') {\n const values = this.leftList.filter((item) => !item.disabled).map((item) => item.value)\n this.checkedLeft = this.leftAllChecked ? [] : values\n } else {\n const values = this.rightList.filter((item) => !item.disabled).map((item) => item.value)\n this.checkedRight = this.rightAllChecked ? [] : values\n }\n },\n move (direction) {\n if (this.disabled) return\n let next\n if (direction === 'right') {\n // \u7981\u7528\u9879\u5373\u4F7F\u88AB\u52FE\u9009\u4E5F\u4E0D\u79FB\u52A8\n const allowed = this.checkedLeft.filter((value) => {\n const item = this.data.find((row) => row.value === value)\n return item && !item.disabled\n })\n next = this.modelValue.concat(allowed)\n this.checkedLeft = []\n } else {\n next = this.modelValue.filter((value) => this.checkedRight.indexOf(value) === -1)\n this.checkedRight = []\n }\n this.$emit('update:modelValue', next)\n this.$emit('change', next)\n }\n },\n template: `\n <div class=\"djm-transfer\" :class=\"{ 'djm-is-disabled': disabled }\">\n <div class=\"djm-transfer-panel\">\n <div class=\"djm-transfer-head\">\n <label class=\"djm-transfer-all\">\n <input type=\"checkbox\" :checked=\"leftAllChecked\" :aria-label=\"'\u5168\u9009' + titles[0]\" @change=\"toggleAll('left')\" />\n <span>{{ titles[0] }}</span>\n </label>\n <span class=\"djm-transfer-count\">{{ checkedLeft.length }}/{{ leftList.length }}</span>\n </div>\n <div v-if=\"searchable\" class=\"djm-transfer-search\">\n <input v-model=\"leftKeyword\" class=\"djm-input\" autocomplete=\"off\" :aria-label=\"'\u641C\u7D22' + titles[0]\" placeholder=\"\u641C\u7D22\" />\n </div>\n <div class=\"djm-transfer-list\">\n <label v-for=\"item in leftList\" :key=\"item.value\" class=\"djm-transfer-item\" :class=\"{ 'djm-is-disabled': item.disabled }\">\n <input\n type=\"checkbox\"\n :checked=\"checkedLeft.indexOf(item.value) > -1\"\n :disabled=\"item.disabled || disabled\"\n @change=\"toggleLeft(item)\"\n />\n <span>{{ item.label }}</span>\n </label>\n <div v-if=\"!leftList.length\" class=\"djm-transfer-empty\">\u6CA1\u6709\u5339\u914D\u9879</div>\n </div>\n </div>\n\n <div class=\"djm-transfer-actions\">\n <button class=\"djm-btn djm-btn-sm\" type=\"button\" :disabled=\"!checkedLeft.length || disabled\" @click=\"move('right')\">\u2192</button>\n <button class=\"djm-btn djm-btn-sm\" type=\"button\" :disabled=\"!checkedRight.length || disabled\" @click=\"move('left')\">\u2190</button>\n </div>\n\n <div class=\"djm-transfer-panel\">\n <div class=\"djm-transfer-head\">\n <label class=\"djm-transfer-all\">\n <input type=\"checkbox\" :checked=\"rightAllChecked\" :aria-label=\"'\u5168\u9009' + titles[1]\" @change=\"toggleAll('right')\" />\n <span>{{ titles[1] }}</span>\n </label>\n <span class=\"djm-transfer-count\">{{ checkedRight.length }}/{{ rightList.length }}</span>\n </div>\n <div v-if=\"searchable\" class=\"djm-transfer-search\">\n <input v-model=\"rightKeyword\" class=\"djm-input\" autocomplete=\"off\" :aria-label=\"'\u641C\u7D22' + titles[1]\" placeholder=\"\u641C\u7D22\" />\n </div>\n <div class=\"djm-transfer-list\">\n <label v-for=\"item in rightList\" :key=\"item.value\" class=\"djm-transfer-item\" :class=\"{ 'djm-is-disabled': item.disabled }\">\n <input\n type=\"checkbox\"\n :checked=\"checkedRight.indexOf(item.value) > -1\"\n :disabled=\"item.disabled || disabled\"\n @change=\"toggleRight(item)\"\n />\n <span>{{ item.label }}</span>\n </label>\n <div v-if=\"!rightList.length\" class=\"djm-transfer-empty\">\u8FD8\u6CA1\u6709\u9009\u62E9</div>\n </div>\n </div>\n </div>\n `\n}\n", "/**\n * \u63D0\u793A\u6761\uFF1A\u56DB\u79CD\u8BED\u4E49\u8272\uFF0C\u53EF\u9009\u6807\u9898\u3001\u56FE\u6807\u4E0E\u5173\u95ED\u6309\u94AE\n * \u7528\u6CD5\uFF1A<DjmAlert tone=\"warning\" title=\"\u6CE8\u610F\" closable @close=\"visible = false\">\u63CF\u8FF0\u6587\u5B57</DjmAlert>\n */\nimport Icon from '../icon/index.js'\n\n// \u8BED\u4E49\u8272\u5BF9\u5E94\u7684\u56FE\u6807\nconst ICONS = { info: 'info', success: 'check', warning: 'alert', danger: 'alert' }\n\nexport default {\n name: 'DjmAlert',\n components: { DjmIcon: Icon },\n props: {\n tone: { type: String, default: 'info' }, // info | success | warning | danger\n title: { type: String, default: '' },\n closable: { type: Boolean, default: false },\n showIcon: { type: Boolean, default: true }\n },\n emits: ['close'],\n computed: {\n iconName () {\n return ICONS[this.tone] || 'info'\n }\n },\n template: `\n <div class=\"djm-alert\" :class=\"'djm-alert-' + tone\" role=\"alert\">\n <DjmIcon v-if=\"showIcon\" :name=\"iconName\" :size=\"14\" />\n <div class=\"djm-alert-body\">\n <strong v-if=\"title || $slots.title\"><slot name=\"title\">{{ title }}</slot></strong>\n <p v-if=\"$slots.default\"><slot /></p>\n </div>\n <button\n v-if=\"closable\"\n class=\"djm-alert-close\"\n type=\"button\"\n aria-label=\"\u5173\u95ED\u63D0\u793A\"\n @click=\"$emit('close')\"\n >\n <DjmIcon name=\"x\" :size=\"12\" />\n </button>\n </div>\n `\n}\n", "/**\n * \u52A0\u8F7D\u4E2D\uFF1A\u5355\u72EC\u4F7F\u7528\u662F\u8F6C\u5708\u63D0\u793A\uFF1B\u5305\u88F9\u5185\u5BB9\u65F6\u5728\u5185\u5BB9\u4E0A\u76D6\u4E00\u5C42\u906E\u7F69\n * \u7528\u6CD5\uFF1A<DjmSpin /> / <DjmSpin :spinning=\"loading\" tip=\"\u52A0\u8F7D\u4E2D\"><Table /></DjmSpin>\n */\nexport default {\n name: 'DjmSpin',\n props: {\n spinning: { type: Boolean, default: true },\n size: { type: String, default: 'md' }, // sm | md | lg\n tip: { type: String, default: '' }\n },\n computed: {\n // \u6709\u9ED8\u8BA4\u63D2\u69FD\u5373\u4E3A\u5305\u88F9\u6A21\u5F0F\n wrapped () {\n return !!this.$slots.default\n }\n },\n template: `\n <div\n v-if=\"wrapped\"\n class=\"djm-spin-wrap\"\n :class=\"'djm-spin-' + size\"\n :aria-busy=\"String(spinning)\"\n >\n <slot />\n <div v-if=\"spinning\" class=\"djm-spin-mask\" role=\"status\">\n <span class=\"djm-spinner\"></span>\n <span v-if=\"tip\" class=\"djm-spin-tip\">{{ tip }}</span>\n </div>\n </div>\n <span\n v-else\n class=\"djm-spin-inline\"\n :class=\"'djm-spin-' + size\"\n role=\"status\"\n :aria-label=\"tip ? undefined : '\u52A0\u8F7D\u4E2D'\"\n >\n <span class=\"djm-spinner\"></span>\n <span v-if=\"tip\" class=\"djm-spin-tip\">{{ tip }}</span>\n </span>\n `\n}\n", "/**\n * \u6C14\u6CE1\u786E\u8BA4\uFF1A\u70B9\u89E6\u53D1\u5668\u5F39\u5C0F\u9762\u677F\uFF0C\u7528\u4E8E\u5220\u9664\u8FD9\u7C7B\u4E8C\u6B21\u786E\u8BA4\n * \u7528\u6CD5\uFF1A<DjmPopconfirm content=\"\u786E\u5B9A\u5220\u9664\u8BE5\u7528\u6237\uFF1F\" @confirm=\"remove\">\n * <DjmButton tone=\"danger\">\u5220\u9664</DjmButton>\n * </DjmPopconfirm>\n */\nimport { nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport Icon from '../icon/index.js'\nimport { bindPanelListeners } from '../../utils/panel.js'\n\nexport default {\n name: 'DjmPopconfirm',\n components: { DjmIcon: Icon },\n props: {\n content: { type: String, default: '' },\n confirmText: { type: String, default: '\u786E\u5B9A' },\n cancelText: { type: String, default: '\u53D6\u6D88' },\n tone: { type: String, default: 'danger' }, // danger | brand\n placement: { type: String, default: 'top' }, // top | bottom\n disabled: { type: Boolean, default: false }\n },\n emits: ['confirm', 'cancel', 'visible-change'],\n setup (props, { emit }) {\n const open = ref(false)\n const root = ref(null)\n const panelEl = ref(null)\n // \u9762\u677F\u6302\u5230 body\uFF0C\u907F\u514D\u88AB\u7236\u7EA7 overflow \u88C1\u526A\n const panelStyle = ref({})\n const PANEL_WIDTH = 244\n // \u6D6E\u5C42\u5168\u5C40\u76D1\u542C\u7684\u89E3\u7ED1\u53E5\u67C4\n let detachPanel = null\n\n // \u628A\u5C55\u5F00\u72B6\u6001\u5199\u5230\u63D2\u69FD\u91CC\u7684\u771F\u5B9E\u63A7\u4EF6\u4E0A\n function syncTriggerA11y () {\n const wrapper = root.value && root.value.querySelector('.djm-popconfirm-trigger')\n if (!wrapper) return\n const inner = wrapper.querySelector('button, a[href], [role=\"button\"]')\n const target = inner || wrapper\n if (!inner) {\n target.setAttribute('role', 'button')\n // \u63D2\u69FD\u91CC\u6CA1\u6709\u771F\u5B9E\u6309\u94AE\u65F6\uFF0C\u8BA9\u5916\u5C42\u5BB9\u5668\u53EF\u805A\u7126\u3001\u53EF\u952E\u76D8\u89E6\u53D1\n target.setAttribute('tabindex', '0')\n }\n target.setAttribute('aria-haspopup', 'dialog')\n target.setAttribute('aria-expanded', String(open.value))\n }\n\n onMounted(() => nextTick(syncTriggerA11y))\n watch(open, () => nextTick(syncTriggerA11y))\n\n function updatePosition () {\n if (!open.value || !root.value) return\n const rect = root.value.getBoundingClientRect()\n const style = { position: 'fixed', width: PANEL_WIDTH + 'px' }\n // \u9ED8\u8BA4\u5728\u4E0A\u65B9\uFF0C\u7A7A\u95F4\u4E0D\u591F\u65F6\u7FFB\u5230\u4E0B\u65B9\n const wantTop = props.placement === 'top'\n const up = wantTop ? rect.top > 120 : window.innerHeight - rect.bottom < 120 && rect.top > 120\n if (up) style.bottom = window.innerHeight - rect.top + 8 + 'px'\n else style.top = rect.bottom + 8 + 'px'\n style.left = Math.max(8, Math.min(rect.left, window.innerWidth - PANEL_WIDTH - 8)) + 'px'\n panelStyle.value = style\n }\n\n function openPanel () {\n if (props.disabled || open.value) return\n open.value = true\n emit('visible-change', true)\n // \u6D6E\u5C42\u5168\u5C40\u76D1\u542C\uFF1A\u5916\u90E8\u70B9\u51FB / Esc \u5173\u95ED\uFF0Cresize / scroll \u91CD\u5B9A\u4F4D\n detachPanel = bindPanelListeners({\n root: () => root.value,\n panel: () => panelEl.value,\n onClose: close,\n onReposition: updatePosition\n })\n requestAnimationFrame(updatePosition)\n // \u9762\u677F\u6253\u5F00\u540E\u805A\u7126\u300C\u53D6\u6D88\u300D\uFF0C\u952E\u76D8\u7528\u6237\u53EF\u76F4\u63A5\u64CD\u4F5C\n nextTick(() => {\n const first = panelEl.value && panelEl.value.querySelector('button')\n if (first) first.focus()\n })\n }\n\n function close () {\n if (!open.value) return\n const hadFocus = panelEl.value && panelEl.value.contains(document.activeElement)\n open.value = false\n panelStyle.value = {}\n emit('visible-change', false)\n if (detachPanel) {\n detachPanel()\n detachPanel = null\n }\n // \u7126\u70B9\u5728\u9762\u677F\u91CC\u65F6\uFF0C\u5173\u95ED\u540E\u56DE\u5230\u89E6\u53D1\u5668\n if (hadFocus) {\n nextTick(() => {\n const wrapper = root.value && root.value.querySelector('.djm-popconfirm-trigger')\n const target = wrapper && (wrapper.querySelector('button, a[href], [role=\"button\"]') || wrapper)\n if (target) target.focus()\n })\n }\n }\n\n function toggle () {\n if (props.disabled) return\n if (open.value) close()\n else openPanel()\n }\n\n function confirm () {\n emit('confirm')\n close()\n }\n\n function cancel () {\n emit('cancel')\n close()\n }\n\n onBeforeUnmount(close)\n\n return { open, root, panelEl, panelStyle, toggle, close, confirm, cancel }\n },\n template: `\n <span class=\"djm-popconfirm\" ref=\"root\">\n <span\n class=\"djm-popconfirm-trigger\"\n @click=\"toggle\"\n @keydown.enter.self.prevent=\"toggle\"\n @keydown.space.self.prevent=\"toggle\"\n >\n <slot :open=\"open\"></slot>\n </span>\n <Teleport to=\"body\">\n <Transition name=\"djm-pop\">\n <div\n v-if=\"open\"\n ref=\"panelEl\"\n class=\"djm-popconfirm-panel\"\n :style=\"panelStyle\"\n role=\"dialog\"\n aria-label=\"\u64CD\u4F5C\u786E\u8BA4\"\n >\n <div class=\"djm-popconfirm-body\">\n <DjmIcon name=\"alert\" :size=\"14\" class=\"djm-popconfirm-icon\" />\n <span class=\"djm-popconfirm-text\"><slot name=\"content\">{{ content }}</slot></span>\n </div>\n <div class=\"djm-popconfirm-actions\">\n <button class=\"djm-btn djm-btn-sm\" type=\"button\" @click=\"cancel\">{{ cancelText }}</button>\n <button\n class=\"djm-btn djm-btn-sm\"\n :class=\"tone === 'danger' ? 'djm-btn-danger' : 'djm-btn-primary'\"\n type=\"button\"\n @click=\"confirm\"\n >{{ confirmText }}</button>\n </div>\n </div>\n </Transition>\n </Teleport>\n </span>\n `\n}\n", "/**\n * \u951A\u70B9\u5BFC\u822A\uFF1A\u6309\u9875\u9762\u4E2D\u7684 id \u751F\u6210\u4FA7\u8FB9\u5217\u8868\uFF0C\u6EDA\u52A8\u65F6\u9AD8\u4EAE\u5F53\u524D\u533A\u5757\n * \u7528\u6CD5\uFF1A<DjmAnchor :items=\"[{ href: '#basic', label: '\u57FA\u7840\u4FE1\u606F' }]\" />\n * \u6EDA\u52A8\u5BB9\u5668\u9ED8\u8BA4\u53D6\u6700\u8FD1\u7684 .djm-content\uFF0C\u4E5F\u53EF\u7528 container \u6307\u5B9A\u9009\u62E9\u5668\n */\nimport { onBeforeUnmount, onMounted, ref, watch } from 'vue'\n\nexport default {\n name: 'DjmAnchor',\n props: {\n items: { type: Array, default: () => [] },\n // \u533A\u5757\u9876\u90E8\u4E0E\u5BB9\u5668\u9876\u8FB9\u7684\u8DDD\u79BB\uFF0C\u7559\u51FA\u56FA\u5B9A\u5934\u90E8\u7684\u4F4D\u7F6E\n offset: { type: Number, default: 12 },\n container: { type: String, default: '' },\n title: { type: String, default: '' },\n smooth: { type: Boolean, default: true }\n },\n emits: ['change'],\n setup (props, { emit }) {\n const root = ref(null)\n const activeKey = ref('')\n let scrollEl = null\n let target = null\n\n function resolveContainer () {\n if (props.container) return document.querySelector(props.container)\n return (root.value && root.value.closest('.djm-content')) || window\n }\n\n function scrollTopOf (el) {\n return el === window ? window.scrollY : el.scrollTop\n }\n\n function baseTopOf (el) {\n return el === window ? 0 : el.getBoundingClientRect().top\n }\n\n // \u5F53\u524D\u6EDA\u52A8\u4F4D\u7F6E\u843D\u5728\u54EA\u4E2A\u533A\u5757\u5185\uFF0C\u6CA1\u8FDB\u7B2C\u4E00\u5757\u65F6\u9ED8\u8BA4\u9AD8\u4EAE\u9996\u9879\n function updateActive () {\n if (!target) return\n const current = scrollTopOf(target) + props.offset\n let key = props.items.length ? props.items[0].href : ''\n for (const item of props.items) {\n const el = document.querySelector(item.href)\n if (!el) continue\n const top = el.getBoundingClientRect().top - baseTopOf(target) + scrollTopOf(target)\n if (top <= current) key = item.href\n }\n if (key && key !== activeKey.value) {\n activeKey.value = key\n emit('change', key)\n }\n }\n\n function bind () {\n unbind()\n target = resolveContainer()\n if (!target) return\n scrollEl = target === window ? window : target\n scrollEl.addEventListener('scroll', updateActive, { passive: true })\n window.addEventListener('resize', updateActive)\n updateActive()\n }\n\n function unbind () {\n if (!scrollEl) return\n scrollEl.removeEventListener('scroll', updateActive)\n window.removeEventListener('resize', updateActive)\n scrollEl = null\n target = null\n }\n\n // \u70B9\u951A\u70B9\u6EDA\u5230\u5BF9\u5E94\u533A\u5757\n function go (item) {\n const el = document.querySelector(item.href)\n if (!el || !target) return\n const delta = el.getBoundingClientRect().top - baseTopOf(target) + scrollTopOf(target) - props.offset\n const behavior = props.smooth ? 'smooth' : 'auto'\n if (target === window) window.scrollTo({ top: Math.max(0, delta), behavior })\n else target.scrollTo({ top: Math.max(0, delta), behavior })\n activeKey.value = item.href\n emit('change', item.href)\n }\n\n onMounted(bind)\n watch(() => props.container, bind)\n onBeforeUnmount(unbind)\n\n return { root, activeKey, go }\n },\n template: `\n <nav ref=\"root\" class=\"djm-anchor\" aria-label=\"\u9875\u5185\u5BFC\u822A\">\n <div v-if=\"title\" class=\"djm-anchor-title\">{{ title }}</div>\n <ul class=\"djm-anchor-list\">\n <li v-for=\"item in items\" :key=\"item.href\">\n <a\n class=\"djm-anchor-link\"\n :href=\"item.href\"\n :class=\"{ 'djm-is-active': activeKey === item.href }\"\n :aria-current=\"activeKey === item.href ? 'location' : undefined\"\n @click.prevent=\"go(item)\"\n >{{ item.label }}</a>\n </li>\n </ul>\n </nav>\n `\n}\n", "/**\n * \u56DE\u5230\u9876\u90E8\uFF1A\u6EDA\u52A8\u8D85\u8FC7\u9608\u503C\u540E\u51FA\u73B0\uFF0C\u70B9\u4E00\u4E0B\u56DE\u5230\u5BB9\u5668\u9876\u90E8\n * \u7528\u6CD5\uFF1A<DjmBacktop />\n * \u6EDA\u52A8\u5BB9\u5668\u9ED8\u8BA4\u53D6\u6700\u8FD1\u7684 .djm-content\uFF0C\u4E5F\u53EF\u7528 container \u6307\u5B9A\u9009\u62E9\u5668\n */\nimport { onBeforeUnmount, onMounted, ref } from 'vue'\nimport Icon from '../icon/index.js'\n\nexport default {\n name: 'DjmBacktop',\n components: { DjmIcon: Icon },\n props: {\n visibilityHeight: { type: Number, default: 320 },\n container: { type: String, default: '' },\n right: { type: Number, default: 24 },\n bottom: { type: Number, default: 24 },\n smooth: { type: Boolean, default: true }\n },\n emits: ['click'],\n setup (props, { emit }) {\n const visible = ref(false)\n const root = ref(null)\n let target = null\n let scrollEl = null\n\n function resolveContainer () {\n if (props.container) return document.querySelector(props.container)\n return (root.value && root.value.closest('.djm-content')) || window\n }\n\n function update () {\n if (!target) return\n const top = target === window ? window.scrollY : target.scrollTop\n visible.value = top > props.visibilityHeight\n }\n\n function bind () {\n unbind()\n target = resolveContainer()\n if (!target) return\n scrollEl = target === window ? window : target\n scrollEl.addEventListener('scroll', update, { passive: true })\n update()\n }\n\n function unbind () {\n if (!scrollEl) return\n scrollEl.removeEventListener('scroll', update)\n scrollEl = null\n target = null\n }\n\n function toTop () {\n if (!target) return\n const behavior = props.smooth ? 'smooth' : 'auto'\n if (target === window) window.scrollTo({ top: 0, behavior })\n else target.scrollTo({ top: 0, behavior })\n emit('click')\n }\n\n onMounted(bind)\n onBeforeUnmount(unbind)\n\n return { visible, root, toTop }\n },\n template: `\n <span ref=\"root\" class=\"djm-backtop-host\">\n <Transition name=\"djm-fade\">\n <button\n v-if=\"visible\"\n class=\"djm-backtop\"\n type=\"button\"\n aria-label=\"\u56DE\u5230\u9876\u90E8\"\n :style=\"{ right: right + 'px', bottom: bottom + 'px' }\"\n @click=\"toTop\"\n >\n <DjmIcon name=\"arrow-up\" :size=\"15\" />\n </button>\n </Transition>\n </span>\n `\n}\n", "/**\n * \u5206\u5272\u7EBF\uFF1A\u9ED8\u8BA4\u6A2A\u5411\u4E00\u6761\u7EBF\uFF0C\u5E26\u9ED8\u8BA4\u63D2\u69FD\u65F6\u4E2D\u95F4\u663E\u793A\u6587\u5B57\n * \u7528\u6CD5\uFF1A<DjmDivider /> / <DjmDivider>\u5206\u7EC4\u6807\u9898</DjmDivider> / <DjmDivider vertical />\n */\nexport default {\n name: 'DjmDivider',\n props: {\n vertical: { type: Boolean, default: false }\n },\n computed: {\n withText () {\n return !this.vertical && !!this.$slots.default\n }\n },\n template: `\n <div\n class=\"djm-divider\"\n :class=\"vertical ? 'djm-is-vertical' : ['djm-is-horizontal', { 'djm-is-text': withText }]\"\n role=\"separator\"\n :aria-orientation=\"vertical ? 'vertical' : 'horizontal'\"\n >\n <span v-if=\"withText\" class=\"djm-divider-text\"><slot /></span>\n </div>\n `\n}\n", "/**\n * \u95F4\u8DDD\uFF1A\u7ED9\u4E00\u7EC4\u5143\u7D20\u4E4B\u95F4\u7EDF\u4E00\u52A0\u95F4\u8DDD\uFF0C\u7701\u6389\u9010\u4E2A\u5199 margin\n * \u7528\u6CD5\uFF1A<DjmSpace :size=\"12\"><DjmButton>\u53D6\u6D88</DjmButton><DjmButton>\u4FDD\u5B58</DjmButton></DjmSpace>\n */\nexport default {\n name: 'DjmSpace',\n props: {\n // \u6570\u5B57\u6309 px \u5904\u7406\uFF0C\u4E5F\u63A5\u53D7 '8px' / '1rem' \u8FD9\u7C7B\u5B57\u7B26\u4E32\n size: { type: [Number, String], default: 8 },\n direction: { type: String, default: 'horizontal' }, // horizontal | vertical\n align: { type: String, default: 'center' }, // start | center | end | baseline\n wrap: { type: Boolean, default: false }\n },\n computed: {\n gap () {\n return typeof this.size === 'number' ? this.size + 'px' : this.size\n }\n },\n template: `\n <div\n class=\"djm-space\"\n :class=\"[\n 'djm-space-' + direction,\n 'djm-is-align-' + align,\n { 'djm-is-wrap': wrap }\n ]\"\n :style=\"{ gap }\"\n >\n <slot />\n </div>\n `\n}\n", "/**\n * \u56FA\u9489\uFF1A\u6EDA\u52A8\u5230\u6307\u5B9A\u4F4D\u7F6E\u540E\u628A\u5185\u5BB9\u56FA\u5B9A\u5728\u89C6\u53E3\u9876\u90E8\uFF08\u6216\u5E95\u90E8\uFF09\n * \u7528\u6CD5\uFF1A<DjmAffix :offset-top=\"12\"><div>\u5DE5\u5177\u6761</div></DjmAffix>\n * \u6EDA\u52A8\u5BB9\u5668\u9ED8\u8BA4\u53D6\u6700\u8FD1\u7684 .djm-content\uFF0C\u4E5F\u53EF\u7528 container \u6307\u5B9A\u9009\u62E9\u5668\n */\nimport { onBeforeUnmount, onMounted, ref } from 'vue'\n\nexport default {\n name: 'DjmAffix',\n props: {\n offsetTop: { type: Number, default: 0 },\n // \u4F20\u6570\u5B57\u5373\u542F\u7528\u5E95\u90E8\u5438\u9644\n offsetBottom: { type: Number, default: null },\n container: { type: String, default: '' },\n zIndex: { type: Number, default: 900 }\n },\n setup (props) {\n const root = ref(null)\n const fixed = ref(false)\n const affixStyle = ref({})\n // \u56FA\u5B9A\u540E\u5360\u4F4D\u9AD8\u5EA6\uFF0C\u907F\u514D\u540E\u9762\u7684\u5185\u5BB9\u5F80\u4E0A\u8DF3\n const holderStyle = ref({})\n let target = null\n let scrollEl = null\n\n function resolveContainer () {\n if (props.container) return document.querySelector(props.container)\n return (root.value && root.value.closest('.djm-content')) || window\n }\n\n function stick (edge, rect) {\n if (!fixed.value) {\n holderStyle.value = { height: rect.height + 'px' }\n fixed.value = true\n }\n affixStyle.value = {\n position: 'fixed',\n left: rect.left + 'px',\n width: rect.width + 'px',\n zIndex: props.zIndex,\n ...edge\n }\n }\n\n function reset () {\n if (!fixed.value) return\n fixed.value = false\n affixStyle.value = {}\n holderStyle.value = {}\n }\n\n function update () {\n if (!target || !root.value) return\n const rect = root.value.getBoundingClientRect()\n const targetTop = target === window ? 0 : target.getBoundingClientRect().top\n\n if (typeof props.offsetBottom === 'number') {\n const bottomLimit = window.innerHeight - props.offsetBottom\n if (rect.bottom >= bottomLimit) stick({ bottom: props.offsetBottom + 'px' }, rect)\n else reset()\n return\n }\n\n if (rect.top < targetTop + props.offsetTop) stick({ top: props.offsetTop + 'px' }, rect)\n else reset()\n }\n\n function bind () {\n unbind()\n target = resolveContainer()\n if (!target) return\n scrollEl = target === window ? window : target\n scrollEl.addEventListener('scroll', update, { passive: true })\n window.addEventListener('resize', update)\n update()\n }\n\n function unbind () {\n if (!scrollEl) return\n scrollEl.removeEventListener('scroll', update)\n window.removeEventListener('resize', update)\n scrollEl = null\n target = null\n }\n\n onMounted(bind)\n onBeforeUnmount(unbind)\n\n return { root, fixed, affixStyle, holderStyle }\n },\n template: `\n <div ref=\"root\" class=\"djm-affix\" :style=\"holderStyle\">\n <div class=\"djm-affix-inner\" :class=\"{ 'djm-is-fixed': fixed }\" :style=\"affixStyle\">\n <slot />\n </div>\n </div>\n `\n}\n", "/**\n * \u5206\u6BB5\u5207\u6362\uFF1A\u4E00\u7EC4\u4E92\u65A5\u9009\u9879\uFF0C\u9009\u4E2D\u9879\u9AD8\u4EAE\uFF0C\u6570\u5B57\u9009\u9879\u53EF\u5E26\u5FBD\u6807\n * \u7528\u6CD5\uFF1A<DjmSegmented v-model=\"tab\" :options=\"[{ value: 'a', label: '\u5217\u8868', badge: 12 }]\" />\n */\nexport default {\n name: 'DjmSegmented',\n props: {\n modelValue: { type: [String, Number], default: '' },\n options: { type: Array, default: () => [] },\n ariaLabel: { type: String, default: '\u5206\u6BB5\u5207\u6362' }\n },\n emits: ['update:modelValue', 'change'],\n methods: {\n isActive (item) {\n return item.value === this.modelValue\n },\n select (item) {\n if (item.disabled || this.isActive(item)) return\n this.$emit('update:modelValue', item.value)\n this.$emit('change', item.value)\n }\n },\n template: `\n <div class=\"djm-segmented\" role=\"group\" :aria-label=\"ariaLabel\">\n <button\n v-for=\"item in options\"\n :key=\"item.value\"\n class=\"djm-segmented-item\"\n type=\"button\"\n :class=\"{ 'djm-is-active': isActive(item) }\"\n :disabled=\"item.disabled\"\n :aria-pressed=\"String(isActive(item))\"\n @click=\"select(item)\"\n >\n {{ item.label }}\n <span v-if=\"item.badge !== undefined && item.badge !== null\" class=\"djm-segmented-badge\">{{ item.badge }}</span>\n </button>\n </div>\n `\n}\n", "/**\n * \u56FE\u7247\uFF1A\u56FA\u5B9A\u5C3A\u5BF8\u5C55\u793A\uFF0C\u52A0\u8F7D\u5931\u8D25\u56DE\u843D\u5230\u6587\u5B57\u5360\u4F4D\uFF0C\u53EF\u70B9\u51FB\u653E\u5927\u9884\u89C8\n * \u7528\u6CD5\uFF1A<DjmImage src=\"/a.png\" alt=\"\u5C01\u9762\" :width=\"240\" :height=\"160\" />\n */\nimport { nextTick, onBeforeUnmount, ref, watch } from 'vue'\nimport Icon from '../icon/index.js'\nimport { lockScroll, unlockScroll } from '../../utils/scroll-lock.js'\nimport { t } from '../../locale/index.js'\n\nexport default {\n name: 'DjmImage',\n components: { DjmIcon: Icon },\n props: {\n src: { type: String, default: '' },\n alt: { type: String, default: '' },\n width: { type: [Number, String], default: '' },\n height: { type: [Number, String], default: '' },\n fit: { type: String, default: 'cover' }, // cover | contain | fill\n preview: { type: Boolean, default: true }\n },\n setup (props) {\n const failed = ref(false)\n const open = ref(false)\n const zoomRef = ref(null)\n const closeRef = ref(null)\n\n // \u6362\u56FE\u65F6\u91CD\u7F6E\u5931\u8D25\u72B6\u6001\uFF0C\u907F\u514D\u4E00\u6B21\u5931\u8D25\u540E\u4E00\u76F4\u663E\u793A\u5360\u4F4D\n watch(() => props.src, () => { failed.value = false })\n\n function toSize (value) {\n return typeof value === 'number' ? value + 'px' : value\n }\n\n function onKeydown (event) {\n if (event.key === 'Escape') closePreview()\n }\n\n async function openPreview () {\n if (failed.value || !props.src) return\n open.value = true\n lockScroll()\n document.addEventListener('keydown', onKeydown)\n // \u7126\u70B9\u79FB\u5230\u5173\u95ED\u6309\u94AE\uFF0C\u8BFB\u5C4F\u80FD\u7ACB\u523B\u611F\u77E5\u5230\u9884\u89C8\u5C42\n await nextTick()\n if (closeRef.value) closeRef.value.focus()\n }\n\n function closePreview () {\n if (!open.value) return\n open.value = false\n unlockScroll()\n document.removeEventListener('keydown', onKeydown)\n // \u5173\u95ED\u540E\u7126\u70B9\u56DE\u5230\u653E\u5927\u6309\u94AE\n if (zoomRef.value) zoomRef.value.focus()\n }\n\n onBeforeUnmount(closePreview)\n\n return { failed, open, zoomRef, closeRef, toSize, openPreview, closePreview, t }\n },\n template: `\n <div\n class=\"djm-image\"\n :style=\"{ width: toSize(width), height: toSize(height) }\"\n >\n <img\n v-if=\"!failed\"\n class=\"djm-image-img\"\n :src=\"src\"\n :alt=\"alt\"\n :style=\"{ objectFit: fit }\"\n @error=\"failed = true\"\n />\n <div v-else class=\"djm-image-fallback\">{{ alt || t('image.failed') }}</div>\n\n <button\n v-if=\"preview && !failed && src\"\n ref=\"zoomRef\"\n class=\"djm-image-zoom\"\n type=\"button\"\n :aria-label=\"t('image.preview')\"\n @click=\"openPreview\"\n >\n <DjmIcon name=\"eye\" :size=\"14\" />\n </button>\n\n <Teleport to=\"body\">\n <div\n v-if=\"open\"\n class=\"djm-image-viewer\"\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-label=\"t('image.dialog')\"\n @click.self=\"closePreview\"\n >\n <button\n ref=\"closeRef\"\n class=\"djm-image-viewer-close\"\n type=\"button\"\n :aria-label=\"t('image.close')\"\n @click=\"closePreview\"\n >\n <DjmIcon name=\"x\" :size=\"16\" />\n </button>\n <img class=\"djm-image-viewer-img\" :src=\"src\" :alt=\"alt\" />\n </div>\n </Teleport>\n </div>\n `\n}\n", "/**\n * \u5168\u5C40\u6EDA\u52A8\u9501\uFF1A\u591A\u4E2A\u5F39\u5C42\u53E0\u52A0\u65F6\u53EA\u9501\u5B9A\u4E00\u6B21\uFF0C\u907F\u514D\u4E92\u76F8\u89E3\u9501\n * \u7528\u6CD5\uFF1AlockScroll() / unlockScroll()\n *\n * \u9501\u5B9A\u65F6\u9875\u9762\u6EDA\u52A8\u6761\u4F1A\u6D88\u5931\uFF0C\u8FD9\u91CC\u6309\u6EDA\u52A8\u6761\u5BBD\u5EA6\u8865\u4E00\u6BB5\u53F3\u5185\u8FB9\u8DDD\uFF0C\n * \u4FDD\u8BC1\u5185\u5BB9\u4E0D\u4F1A\u6A2A\u5411\u8DF3\u4E00\u4E0B\uFF1B\u89E3\u9501\u65F6\u8FD8\u539F\u539F\u6765\u7684\u5185\u8054\u6837\u5F0F\u3002\n */\nlet count = 0\nlet savedPaddingRight = ''\nlet padded = false\n\nfunction scrollbarWidth () {\n return Math.max(0, window.innerWidth - document.documentElement.clientWidth)\n}\n\nexport function lockScroll () {\n if (count === 0) {\n const gap = scrollbarWidth()\n if (gap > 0) {\n savedPaddingRight = document.body.style.paddingRight\n const current = parseFloat(window.getComputedStyle(document.body).paddingRight) || 0\n document.body.style.paddingRight = current + gap + 'px'\n padded = true\n }\n document.body.classList.add('djm-no-scroll')\n }\n count += 1\n}\n\nexport function unlockScroll () {\n if (count === 0) return\n count -= 1\n if (count > 0) return\n document.body.classList.remove('djm-no-scroll')\n if (padded) {\n document.body.style.paddingRight = savedPaddingRight\n padded = false\n }\n}\n", "/**\n * \u6C34\u5370\uFF1A\u5728\u5185\u5BB9\u4E0A\u8986\u76D6\u4E00\u5C42\u659C\u5411\u6587\u5B57\uFF0C\u7528\u4E8E\u654F\u611F\u9875\u9762\u9632\u622A\u5C4F\u5916\u4F20\n * \u7528\u6CD5\uFF1A<DjmWatermark content=\"\u5185\u90E8\u8D44\u6599\"><div>\u9875\u9762\u5185\u5BB9</div></DjmWatermark>\n * \u5185\u5BB9\u53EF\u4F20\u6570\u7EC4\uFF0C\u591A\u884C\u6587\u5B57\u4F1A\u4E00\u8D77\u753B\u5728\u540C\u4E00\u4E2A\u56FE\u5757\u91CC\n */\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport { theme } from '../../theme/index.js'\n\nexport default {\n name: 'DjmWatermark',\n props: {\n content: { type: [String, Array], default: '\u5185\u90E8\u8D44\u6599' },\n gap: { type: Number, default: 80 },\n fontSize: { type: Number, default: 14 },\n // \u4E0D\u4F20\u65F6\u8DDF\u968F\u4E3B\u9898\u7684\u6C34\u5370\u8272\n color: { type: String, default: '' },\n rotate: { type: Number, default: -20 },\n zIndex: { type: Number, default: 10 }\n },\n setup (props) {\n const dataUrl = ref('')\n let canvasEl = null\n\n function build () {\n const lines = (Array.isArray(props.content) ? props.content : [props.content]).filter(Boolean)\n if (!lines.length) {\n dataUrl.value = ''\n return\n }\n if (!canvasEl) canvasEl = document.createElement('canvas')\n const ctx = canvasEl.getContext('2d')\n const ratio = window.devicePixelRatio || 1\n const lineHeight = Math.round(props.fontSize * 1.6)\n const font = props.fontSize + 'px -apple-system, \"PingFang SC\", sans-serif'\n\n ctx.font = font\n const textWidth = Math.max(...lines.map((line) => ctx.measureText(line).width))\n const textHeight = lineHeight * lines.length\n\n // \u6309\u65CB\u8F6C\u540E\u7684\u5305\u56F4\u76D2\u7B97\u56FE\u5757\uFF0C\u907F\u514D\u659C\u5411\u6587\u5B57\u88AB\u56FE\u5757\u8FB9\u7F18\u88C1\u6389\n const rad = (props.rotate * Math.PI) / 180\n const cos = Math.abs(Math.cos(rad))\n const sin = Math.abs(Math.sin(rad))\n const tileWidth = Math.ceil(textWidth * cos + textHeight * sin + props.gap)\n const tileHeight = Math.ceil(textWidth * sin + textHeight * cos + props.gap)\n\n canvasEl.width = tileWidth * ratio\n canvasEl.height = tileHeight * ratio\n ctx.scale(ratio, ratio)\n ctx.clearRect(0, 0, tileWidth, tileHeight)\n ctx.translate(tileWidth / 2, tileHeight / 2)\n ctx.rotate((props.rotate * Math.PI) / 180)\n ctx.fillStyle = props.color || getComputedStyle(document.documentElement).getPropertyValue('--djm-watermark').trim() || 'rgba(0, 0, 0, 0.08)'\n ctx.font = font\n ctx.textAlign = 'center'\n ctx.textBaseline = 'middle'\n lines.forEach((line, index) => {\n const offset = (index - (lines.length - 1) / 2) * lineHeight\n ctx.fillText(line, 0, offset)\n })\n dataUrl.value = canvasEl.toDataURL('image/png')\n }\n\n const layerStyle = computed(() => ({\n backgroundImage: dataUrl.value ? 'url(' + dataUrl.value + ')' : 'none',\n zIndex: props.zIndex\n }))\n\n onMounted(build)\n // \u4E3B\u9898\u5207\u6362\u540E\u6C34\u5370\u8272\u8981\u91CD\u7B97\n watch(() => [props.content, props.gap, props.fontSize, props.color, props.rotate, theme.value], build, { deep: true })\n onBeforeUnmount(() => { canvasEl = null })\n\n return { layerStyle }\n },\n template: `\n <div class=\"djm-watermark\">\n <slot />\n <div class=\"djm-watermark-layer\" :style=\"layerStyle\" aria-hidden=\"true\"></div>\n </div>\n `\n}\n", "import { ref } from 'vue'\n\nconst KEY = 'djm-theme'\nconst COLOR_KEY = 'djm-primary'\n\nexport const theme = ref('light')\n\n/** \u9884\u8BBE\u4E3B\u9898\u8272\uFF1A\u8272\u503C\u53D6\u81EA\u5E38\u89C1\u540E\u53F0\u54C1\u724C\u8272 */\nexport const PRESET_COLORS = [\n { name: '\u9ED8\u8BA4\u84DD', value: '#1a6fc4' },\n { name: '\u79D1\u6280\u84DD', value: '#2563eb' },\n { name: '\u9752\u78A7', value: '#0f8b8d' },\n { name: '\u7FE1\u7FE0\u7EFF', value: '#12855a' },\n { name: '\u5178\u96C5\u7D2B', value: '#6d4ad8' },\n { name: '\u7425\u73C0\u6A59', value: '#b8620f' },\n { name: '\u6731\u7802\u7EA2', value: '#c0392b' },\n { name: '\u77F3\u58A8\u7070', value: '#4b5b6b' }\n]\n\n// \u5F53\u524D\u81EA\u5B9A\u4E49\u4E3B\u8272\uFF0C\u7A7A\u5B57\u7B26\u4E32\u8868\u793A\u4F7F\u7528 tokens.css \u7684\u9ED8\u8BA4\u84DD\nexport const primaryColor = ref('')\n\n// \u54C1\u724C\u8272\u9636\u6D89\u53CA\u7684\u53D8\u91CF\u540D\uFF0C\u6062\u590D\u9ED8\u8BA4\u65F6\u9010\u4E2A\u6E05\u6389\u5185\u8054\u8986\u76D6\nconst BRAND_VARS = [\n '--djm-brand-50', '--djm-brand-100', '--djm-brand-200',\n '--djm-brand-500', '--djm-brand-600', '--djm-brand-700', '--djm-brand-800',\n '--djm-brand-solid', '--djm-brand-solid-hover',\n '--djm-brand-soft', '--djm-info', '--djm-info-bg', '--djm-info-border'\n]\n\n/* ---------------- \u989C\u8272\u6362\u7B97 ---------------- */\n\nfunction hexToHsl (hex) {\n const text = String(hex || '').replace('#', '')\n const full = text.length === 3 ? text.split('').map((ch) => ch + ch).join('') : text\n if (!/^[0-9a-fA-F]{6}$/.test(full)) return { h: 206, s: 76, l: 44 }\n const r = parseInt(full.slice(0, 2), 16) / 255\n const g = parseInt(full.slice(2, 4), 16) / 255\n const b = parseInt(full.slice(4, 6), 16) / 255\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n const l = (max + min) / 2\n if (max === min) return { h: 0, s: 0, l: Math.round(l * 100) }\n\n const d = max - min\n const s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n let h\n if (max === r) h = ((g - b) / d + (g < b ? 6 : 0)) * 60\n else if (max === g) h = ((b - r) / d + 2) * 60\n else h = ((r - g) / d + 4) * 60\n return { h: Math.round(h), s: Math.round(s * 100), l: Math.round(l * 100) }\n}\n\nfunction hslToHex (h, s, l) {\n const sat = Math.min(100, Math.max(0, s)) / 100\n const light = Math.min(100, Math.max(0, l)) / 100\n const c = (1 - Math.abs(2 * light - 1)) * sat\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1))\n const m = light - c / 2\n let rgb\n if (h < 60) rgb = [c, x, 0]\n else if (h < 120) rgb = [x, c, 0]\n else if (h < 180) rgb = [0, c, x]\n else if (h < 240) rgb = [0, x, c]\n else if (h < 300) rgb = [x, 0, c]\n else rgb = [c, 0, x]\n return '#' + rgb\n .map((value) => Math.round((value + m) * 255).toString(16).padStart(2, '0'))\n .join('')\n}\n\n/**\n * \u7531\u4E3B\u8272\u63A8\u5BFC\u6574\u5957\u54C1\u724C\u8272\u9636\n * \u660E\u8272\u4E0E\u6697\u8272\u5404\u4E00\u5957\uFF1A\u6697\u8272\u4E0B\u6D45\u8272\u6863\u6539\u6210\u6DF1\u5E95\u3001\u6DF1\u8272\u6863\u6539\u6210\u4EAE\u5B57\n */\nfunction buildShades (hex, dark) {\n const { h, s, l } = hexToHsl(hex)\n // \u4FDD\u6301\u6240\u9009\u7684\u8272\u76F8\u4E0E\u9971\u548C\u5EA6\uFF0C\u660E\u5EA6\u5728\u6240\u9009\u8272\u57FA\u7840\u4E0A\u52A0\u51CF\uFF0C\u4FDD\u8BC1 600 \u5C31\u662F\u7528\u6237\u9009\u7684\u989C\u8272\n const sat = Math.min(Math.max(s, 20), 92)\n const clamp = (value) => Math.min(97, Math.max(8, value))\n if (dark) {\n // \u6697\u8272\u4E0B\u6574\u4F53\u63D0\u4EAE\uFF1A600 \u7528\u4E8E\u5F3A\u8C03\uFF0C700/800 \u7528\u4E8E\u6587\u5B57\n // \u5B9E\u5E95\u4E0D\u80FD\u8DDF\u7740\u63D0\u4EAE\uFF0C\u5426\u5219\u767D\u5B57\u8BFB\u4E0D\u6E05\uFF0C\u660E\u5EA6\u538B\u5230 36 \u4EE5\u4E0B\n const solid = Math.min(36, l)\n return {\n '--djm-brand-50': hslToHex(h, Math.min(40, sat * 0.5), 14),\n '--djm-brand-100': hslToHex(h, Math.min(42, sat * 0.55), 19),\n '--djm-brand-200': hslToHex(h, Math.min(46, sat * 0.6), 27),\n '--djm-brand-500': hslToHex(h, sat, clamp(l + 18)),\n '--djm-brand-600': hslToHex(h, sat, clamp(l + 12)),\n '--djm-brand-700': hslToHex(h, sat * 0.95, clamp(l + 30)),\n '--djm-brand-800': hslToHex(h, sat * 0.9, clamp(l + 40)),\n '--djm-brand-solid': hslToHex(h, sat, solid),\n '--djm-brand-solid-hover': hslToHex(h, sat, Math.max(10, solid - 6)),\n '--djm-brand-soft': hslToHex(h, Math.min(40, sat * 0.5), 18),\n '--djm-info': hslToHex(h, sat * 0.95, clamp(l + 34)),\n '--djm-info-bg': hslToHex(h, Math.min(38, sat * 0.48), 16),\n '--djm-info-border': hslToHex(h, Math.min(44, sat * 0.58), 26)\n }\n }\n return {\n // \u6D45\u8272\u4E09\u6863\u7528\u56FA\u5B9A\u9AD8\u4EAE\u5EA6\uFF0C\u4FDD\u8BC1\u662F\u300C\u5E95\u300D\u800C\u4E0D\u662F\u4E2D\u95F4\u8272\n '--djm-brand-50': hslToHex(h, Math.min(95, sat * 1.05), 96),\n '--djm-brand-100': hslToHex(h, Math.min(92, sat), 92),\n '--djm-brand-200': hslToHex(h, Math.min(88, sat * 0.95), 84),\n '--djm-brand-500': hslToHex(h, sat, clamp(l + 7)),\n '--djm-brand-600': hslToHex(h, sat, clamp(l)),\n '--djm-brand-700': hslToHex(h, sat, clamp(l - 7)),\n '--djm-brand-800': hslToHex(h, sat, clamp(l - 14)),\n '--djm-brand-solid': hslToHex(h, sat, clamp(l)),\n '--djm-brand-solid-hover': hslToHex(h, sat, clamp(l - 7)),\n '--djm-brand-soft': hslToHex(h, Math.min(90, sat * 1.05), 96),\n '--djm-info': hslToHex(h, sat, clamp(l - 7)),\n '--djm-info-bg': hslToHex(h, Math.min(90, sat * 1.05), 96),\n '--djm-info-border': hslToHex(h, Math.min(85, sat * 0.9), 86)\n }\n}\n\n/** \u628A\u4E3B\u8272\u5199\u5230\u6839\u5143\u7D20\uFF1B\u4F20\u7A7A\u503C\u5219\u6E05\u6389\u5185\u8054\u8986\u76D6\uFF0C\u56DE\u5230\u6837\u5F0F\u8868\u9ED8\u8BA4\u503C */\nfunction applyPrimary (hex) {\n const root = document.documentElement\n if (!hex) {\n BRAND_VARS.forEach((name) => root.style.removeProperty(name))\n return\n }\n const vars = buildShades(hex, theme.value === 'dark')\n Object.keys(vars).forEach((name) => root.style.setProperty(name, vars[name]))\n}\n\n/** \u8BBE\u7F6E\u4E3B\u9898\u8272\uFF0C\u540C\u65F6\u6309\u5F53\u524D\u660E\u6697\u751F\u6210\u8272\u9636\u5E76\u6301\u4E45\u5316 */\nexport function setPrimaryColor (hex) {\n primaryColor.value = hex || ''\n applyPrimary(hex || '')\n try {\n if (hex) localStorage.setItem(COLOR_KEY, hex)\n else localStorage.removeItem(COLOR_KEY)\n } catch (error) {\n // localStorage \u4E0D\u53EF\u7528\u65F6\u53EA\u5F71\u54CD\u6301\u4E45\u5316\n }\n}\n\nexport function resetPrimaryColor () {\n setPrimaryColor('')\n}\n\n/** \u8BBE\u7F6E\u4E3B\u9898\uFF1Alight / dark\uFF0C\u5199\u5165 data-djm-theme \u5E76\u6301\u4E45\u5316 */\nexport function setTheme (name) {\n theme.value = name === 'dark' ? 'dark' : 'light'\n document.documentElement.dataset.djmTheme = theme.value\n // \u660E\u6697\u5207\u6362\u540E\u54C1\u724C\u8272\u9636\u8981\u91CD\u65B0\u751F\u6210\n applyPrimary(primaryColor.value)\n try {\n localStorage.setItem(KEY, theme.value)\n } catch (error) {\n // \u9690\u79C1\u6A21\u5F0F\u4E0B localStorage \u4E0D\u53EF\u7528\uFF0C\u5FFD\u7565\u5373\u53EF\n }\n}\n\nexport function toggleTheme () {\n setTheme(theme.value === 'dark' ? 'light' : 'dark')\n}\n\n/** \u5E94\u7528\u542F\u52A8\u65F6\u6062\u590D\u4E0A\u6B21\u9009\u62E9\uFF1B?theme=dark \u53EF\u4E34\u65F6\u8986\u76D6\uFF0C\u65B9\u4FBF\u622A\u56FE\u4E0E\u5206\u4EAB */\nexport function initTheme () {\n let saved = ''\n try {\n saved = localStorage.getItem(KEY) || ''\n } catch (error) {\n saved = ''\n }\n let param = ''\n try {\n param = new URLSearchParams(window.location.search).get('theme') || ''\n } catch (error) {\n param = ''\n }\n let color = ''\n try {\n color = localStorage.getItem(COLOR_KEY) || ''\n } catch (error) {\n color = ''\n }\n if (color) primaryColor.value = color\n const next = param === 'dark' || param === 'light' ? param : saved || 'light'\n setTheme(next)\n}\n", "/**\n * \u81EA\u52A8\u5B8C\u6210\uFF1A\u8F93\u5165\u65F6\u6309\u5173\u952E\u5B57\u8FC7\u6EE4\u5019\u9009\uFF0C\u652F\u6301\u4E0A\u4E0B\u952E\u4E0E\u56DE\u8F66\u9009\u62E9\n * \u7528\u6CD5\uFF1A<DjmAutoComplete v-model=\"keyword\" :options=\"['\u7814\u53D1\u90E8', '\u5E02\u573A\u90E8']\" @select=\"onSelect\" />\n */\nimport { bindPanelListeners, shouldFlipUp, dropdownPanelStyle, PANEL_HIDDEN_STYLE } from '../../utils/panel.js'\n\nlet uidSeed = 0\n\nexport default {\n name: 'DjmAutoComplete',\n props: {\n modelValue: { type: String, default: '' },\n // \u652F\u6301\u5B57\u7B26\u4E32\u6570\u7EC4\uFF0C\u6216 [{ value, label }]\n options: { type: Array, default: () => [] },\n placeholder: { type: String, default: '' },\n disabled: { type: Boolean, default: false },\n // \u8F93\u5165\u51E0\u4E2A\u5B57\u7B26\u540E\u5F00\u59CB\u63D0\u793A\uFF0C0 \u8868\u793A\u805A\u7126\u5373\u5C55\u793A\u5168\u90E8\n minChars: { type: Number, default: 1 },\n ariaLabel: { type: String, default: '\u81EA\u52A8\u5B8C\u6210' }\n },\n emits: ['update:modelValue', 'input', 'select', 'focus', 'blur'],\n data () {\n return {\n // \u5185\u90E8\u8F93\u5165\u503C\uFF1Aprops \u66F4\u65B0\u662F\u5F02\u6B65\u7684\uFF0C\u8F93\u5165\u65F6\u5148\u7528\u81EA\u5DF1\u7684\u503C\u8FC7\u6EE4\n query: this.modelValue,\n open: false,\n activeIndex: -1,\n listId: 'djm-autocomplete-' + (++uidSeed),\n panelStyle: { ...PANEL_HIDDEN_STYLE }\n }\n },\n watch: {\n modelValue (value) {\n this.query = value\n }\n },\n computed: {\n normalized () {\n return this.options.map((item) => (typeof item === 'string' ? { value: item, label: item } : item))\n },\n filtered () {\n const keyword = (this.query || '').trim().toLowerCase()\n if (keyword.length < this.minChars) return []\n const list = keyword\n ? this.normalized.filter((item) => String(item.label).toLowerCase().indexOf(keyword) > -1)\n : this.normalized\n return list.slice(0, 8)\n },\n activeId () {\n return this.activeIndex > -1 ? this.listId + '-' + this.activeIndex : undefined\n }\n },\n methods: {\n onInput (event) {\n this.query = event.target.value\n this.$emit('update:modelValue', event.target.value)\n this.$emit('input', event)\n this.activeIndex = -1\n if (this.filtered.length) this.openPanel()\n else this.closePanel()\n },\n onFocus (event) {\n this.activeIndex = -1\n if (this.filtered.length) this.openPanel()\n this.$emit('focus', event)\n },\n onBlur (event) {\n this.closePanel()\n this.$emit('blur', event)\n },\n onKeydown (event) {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n if (!this.open) {\n if (!this.filtered.length) return\n this.openPanel()\n }\n event.preventDefault()\n const step = event.key === 'ArrowDown' ? 1 : -1\n const total = this.filtered.length\n this.activeIndex = (this.activeIndex + step + total) % total\n return\n }\n if (event.key === 'Enter') {\n // \u6CA1\u6709\u9AD8\u4EAE\u9879\u65F6\u9ED8\u8BA4\u9009\u7B2C\u4E00\u6761\n const item = this.filtered[this.activeIndex] || this.filtered[0]\n if (this.open && item) {\n event.preventDefault()\n this.choose(item)\n }\n return\n }\n if (event.key === 'Escape') this.closePanel()\n },\n choose (item) {\n this.query = item.value\n this.$emit('update:modelValue', item.value)\n this.$emit('select', item)\n this.closePanel()\n },\n openPanel () {\n // \u5DF2\u6253\u5F00\u65F6\u76D1\u542C\u8FD8\u5728\uFF0C\u53EA\u9700\u91CD\u5B9A\u4F4D\n if (this.open) {\n this.$nextTick(this.updatePosition)\n return\n }\n this.open = true\n // Esc \u5728\u8F93\u5165\u6846 keydown \u91CC\u5904\u7406\uFF0C\u8FD9\u91CC\u4E0D\u518D\u7ED1 document \u7EA7 keydown\n this._detachPanel = bindPanelListeners({\n root: () => this.$refs.root,\n panel: () => this.$refs.panel,\n onClose: this.closePanel,\n onReposition: this.updatePosition,\n esc: false\n })\n this.$nextTick(this.updatePosition)\n },\n closePanel () {\n if (!this.open) return\n this.open = false\n this.activeIndex = -1\n this.panelStyle = { ...PANEL_HIDDEN_STYLE }\n if (this._detachPanel) {\n this._detachPanel()\n this._detachPanel = null\n }\n },\n updatePosition () {\n if (!this.open || !this.$refs.root) return\n const rect = this.$refs.root.getBoundingClientRect()\n const panel = this.$refs.panel\n // \u9762\u677F\u5BBD\u5EA6\u8DDF\u968F\u8F93\u5165\u6846\uFF0C\u4E0B\u65B9\u653E\u4E0D\u4E0B\u5C31\u5411\u4E0A\u5C55\u5F00\n this.panelStyle = dropdownPanelStyle({\n rect,\n flip: shouldFlipUp(rect, panel ? panel.offsetHeight : 240),\n width: rect.width,\n clampWidth: rect.width\n })\n }\n },\n beforeUnmount () {\n this.closePanel()\n },\n template: `\n <div class=\"djm-autocomplete\" ref=\"root\" :class=\"{ 'djm-is-disabled': disabled }\">\n <input\n class=\"djm-input djm-autocomplete-input\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n :value=\"query\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :aria-label=\"ariaLabel\"\n :aria-expanded=\"String(open)\"\n :aria-controls=\"listId\"\n :aria-activedescendant=\"activeId\"\n aria-autocomplete=\"list\"\n @input=\"onInput\"\n @focus=\"onFocus\"\n @keydown=\"onKeydown\"\n @blur=\"onBlur\"\n />\n <Teleport to=\"body\">\n <div\n v-if=\"open\"\n ref=\"panel\"\n :id=\"listId\"\n class=\"djm-autocomplete-panel\"\n :style=\"panelStyle\"\n role=\"listbox\"\n >\n <div\n v-for=\"(item, index) in filtered\"\n :id=\"listId + '-' + index\"\n :key=\"item.value\"\n class=\"djm-autocomplete-option\"\n :class=\"{ 'djm-is-active': index === activeIndex }\"\n role=\"option\"\n :aria-selected=\"String(index === activeIndex)\"\n @mousedown.prevent=\"choose(item)\"\n @mousemove=\"activeIndex = index\"\n >{{ item.label }}</div>\n </div>\n </Teleport>\n </div>\n `\n}\n", "/**\n * \u5206\u9694\u9762\u677F\uFF1A\u5DE6\u53F3\uFF08\u6216\u4E0A\u4E0B\uFF09\u4E24\u680F\uFF0C\u62D6\u52A8\u4E2D\u95F4\u5206\u9694\u6761\u8C03\u6574\u5360\u6BD4\n * \u7528\u6CD5\uFF1A<DjmSplitter v-model=\"size\">\n * <template #first>\u5DE6\u4FA7</template>\n * <template #second>\u53F3\u4FA7</template>\n * </DjmSplitter>\n */\nimport { computed, onBeforeUnmount, ref } from 'vue'\n\nexport default {\n name: 'DjmSplitter',\n props: {\n // \u7B2C\u4E00\u680F\u5360\u6BD4\uFF0C\u767E\u5206\u6BD4\n modelValue: { type: Number, default: 50 },\n direction: { type: String, default: 'horizontal' }, // horizontal | vertical\n min: { type: Number, default: 15 },\n max: { type: Number, default: 85 }\n },\n emits: ['update:modelValue', 'change'],\n setup (props, { emit }) {\n const root = ref(null)\n const dragging = ref(false)\n\n const ratio = computed(() => {\n const value = Number(props.modelValue)\n const safe = Number.isFinite(value) ? value : 50\n return Math.min(props.max, Math.max(props.min, safe))\n })\n\n function commit (value) {\n const next = Math.min(props.max, Math.max(props.min, Math.round(value * 10) / 10))\n if (next === ratio.value) return\n emit('update:modelValue', next)\n emit('change', next)\n }\n\n function onPointerMove (event) {\n if (!root.value) return\n const rect = root.value.getBoundingClientRect()\n const vertical = props.direction === 'vertical'\n const offset = vertical ? event.clientY - rect.top : event.clientX - rect.left\n const total = vertical ? rect.height : rect.width\n if (!total) return\n commit((offset / total) * 100)\n }\n\n function stopDrag () {\n if (!dragging.value) return\n dragging.value = false\n window.removeEventListener('pointermove', onPointerMove)\n window.removeEventListener('pointerup', stopDrag)\n }\n\n function startDrag () {\n dragging.value = true\n window.addEventListener('pointermove', onPointerMove)\n window.addEventListener('pointerup', stopDrag)\n }\n\n // \u65B9\u5411\u952E\u5FAE\u8C03\uFF0C\u6309\u4F4F Shift \u4E00\u6B21 10%\n function onKeydown (event) {\n const vertical = props.direction === 'vertical'\n const back = vertical ? 'ArrowUp' : 'ArrowLeft'\n const forward = vertical ? 'ArrowDown' : 'ArrowRight'\n const step = event.shiftKey ? 10 : 2\n if (event.key === back) {\n event.preventDefault()\n commit(ratio.value - step)\n } else if (event.key === forward) {\n event.preventDefault()\n commit(ratio.value + step)\n }\n }\n\n onBeforeUnmount(stopDrag)\n\n return { root, dragging, ratio, startDrag, onKeydown }\n },\n template: `\n <div\n ref=\"root\"\n class=\"djm-splitter\"\n :class=\"['djm-splitter-' + direction, { 'djm-is-dragging': dragging }]\"\n >\n <div\n class=\"djm-splitter-pane\"\n :style=\"direction === 'vertical' ? { height: ratio + '%' } : { width: ratio + '%' }\"\n >\n <slot name=\"first\" />\n </div>\n <div\n class=\"djm-splitter-bar\"\n role=\"separator\"\n tabindex=\"0\"\n aria-label=\"\u62D6\u52A8\u8C03\u6574\u5927\u5C0F\"\n :aria-orientation=\"direction === 'vertical' ? 'horizontal' : 'vertical'\"\n :aria-valuemin=\"min\"\n :aria-valuemax=\"max\"\n :aria-valuenow=\"Math.round(ratio)\"\n @pointerdown.prevent=\"startDrag\"\n @keydown=\"onKeydown\"\n >\n <span class=\"djm-splitter-grip\"></span>\n </div>\n <div class=\"djm-splitter-pane\">\n <slot name=\"second\" />\n </div>\n </div>\n `\n}\n", "/**\n * \u8F6E\u64AD\uFF1A\u6309 items \u6E32\u67D3\u5E7B\u706F\u7247\uFF0C\u652F\u6301\u81EA\u52A8\u64AD\u653E\u3001\u5DE6\u53F3\u5207\u6362\u4E0E\u5706\u70B9\u6307\u793A\n * \u7528\u6CD5\uFF1A<DjmCarousel :items=\"[{ image, title, desc }]\" />\n * \u81EA\u5B9A\u4E49\u5185\u5BB9\u7528 #slide \u63D2\u69FD\uFF0C\u53C2\u6570\u4E3A { item, index }\n */\nimport { onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport Icon from '../icon/index.js'\n\nexport default {\n name: 'DjmCarousel',\n components: { DjmIcon: Icon },\n props: {\n items: { type: Array, default: () => [] },\n height: { type: [Number, String], default: 180 },\n autoplay: { type: Boolean, default: false },\n interval: { type: Number, default: 4000 },\n arrows: { type: Boolean, default: true },\n dots: { type: Boolean, default: true }\n },\n emits: ['change'],\n setup (props, { emit }) {\n const index = ref(0)\n let timer = null\n\n const boxStyle = () => ({\n height: typeof props.height === 'number' ? props.height + 'px' : props.height\n })\n\n function go (next) {\n const total = props.items.length\n if (!total) return\n const safe = (next + total) % total\n if (safe === index.value) return\n index.value = safe\n emit('change', safe)\n }\n\n function next () {\n go(index.value + 1)\n }\n\n function prev () {\n go(index.value - 1)\n }\n\n function stop () {\n window.clearInterval(timer)\n timer = null\n }\n\n function start () {\n stop()\n if (!props.autoplay || props.items.length < 2) return\n timer = window.setInterval(next, Math.max(1200, props.interval))\n }\n\n function onKeydown (event) {\n if (event.key === 'ArrowLeft') {\n event.preventDefault()\n prev()\n } else if (event.key === 'ArrowRight') {\n event.preventDefault()\n next()\n }\n }\n\n onMounted(start)\n watch(() => [props.autoplay, props.interval, props.items.length], start)\n // \u9F20\u6807\u79FB\u5165\u6216\u952E\u76D8\u8FDB\u5165\u65F6\u5148\u505C\u4E0B\uFF0C\u907F\u514D\u770B\u5185\u5BB9\u65F6\u88AB\u7FFB\u9875\u6253\u65AD\n function pause () {\n if (props.autoplay) stop()\n }\n\n function resume () {\n if (props.autoplay) start()\n }\n\n onBeforeUnmount(stop)\n\n return { index, boxStyle, go, next, prev, onKeydown, pause, resume }\n },\n template: `\n <div\n class=\"djm-carousel\"\n role=\"region\"\n aria-roledescription=\"\u8F6E\u64AD\"\n aria-label=\"\u8F6E\u64AD\"\n tabindex=\"0\"\n :style=\"boxStyle()\"\n @mouseenter=\"pause\"\n @mouseleave=\"resume\"\n @focusin=\"pause\"\n @focusout=\"resume\"\n @keydown=\"onKeydown\"\n >\n <div class=\"djm-carousel-track\" :style=\"{ transform: 'translateX(-' + index * 100 + '%)' }\">\n <div\n v-for=\"(item, i) in items\"\n :key=\"i\"\n class=\"djm-carousel-slide\"\n role=\"group\"\n :aria-roledescription=\"'\u5E7B\u706F\u7247 ' + (i + 1) + ' / ' + items.length\"\n :aria-hidden=\"String(i !== index)\"\n >\n <slot name=\"slide\" :item=\"item\" :index=\"i\">\n <img v-if=\"item.image\" class=\"djm-carousel-img\" :src=\"item.image\" :alt=\"item.title || ''\" />\n <div v-if=\"item.title || item.desc\" class=\"djm-carousel-caption\">\n <strong v-if=\"item.title\">{{ item.title }}</strong>\n <span v-if=\"item.desc\">{{ item.desc }}</span>\n </div>\n </slot>\n </div>\n </div>\n\n <button v-if=\"arrows && items.length > 1\" class=\"djm-carousel-arrow djm-is-prev\" type=\"button\" aria-label=\"\u4E0A\u4E00\u5F20\" @click.stop=\"prev\">\n <DjmIcon name=\"chevron-left\" :size=\"16\" />\n </button>\n <button v-if=\"arrows && items.length > 1\" class=\"djm-carousel-arrow djm-is-next\" type=\"button\" aria-label=\"\u4E0B\u4E00\u5F20\" @click.stop=\"next\">\n <DjmIcon name=\"chevron-right\" :size=\"16\" />\n </button>\n\n <div v-if=\"dots && items.length > 1\" class=\"djm-carousel-dots\">\n <button\n v-for=\"(item, i) in items\"\n :key=\"i\"\n class=\"djm-carousel-dot\"\n type=\"button\"\n :class=\"{ 'djm-is-active': i === index }\"\n :aria-label=\"'\u7B2C ' + (i + 1) + ' \u5F20'\"\n :aria-current=\"i === index ? 'true' : undefined\"\n @click.stop=\"go(i)\"\n ></button>\n </div>\n </div>\n `\n}\n", "/**\n * \u5F15\u5BFC\uFF1A\u6309\u6B65\u9AA4\u9AD8\u4EAE\u76EE\u6807\u5143\u7D20\uFF0C\u65C1\u8FB9\u663E\u793A\u8BF4\u660E\u5361\u7247\n * \u7528\u6CD5\uFF1A<DjmTour v-model=\"open\" :steps=\"[{ target: '#search', title: '\u641C\u7D22', desc: '\u652F\u6301 K \u5524\u8D77' }]\" @finish=\"open = false\" />\n */\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\n\nexport default {\n name: 'DjmTour',\n components: { DjmIcon: Icon },\n props: {\n modelValue: { type: Boolean, default: false },\n // \u6BCF\u4E00\u6B65\uFF1A{ target: '#id', title, desc }\n steps: { type: Array, default: () => [] },\n offset: { type: Number, default: 10 }\n },\n emits: ['update:modelValue', 'change', 'finish'],\n setup (props, { emit }) {\n const current = ref(0)\n const highlight = ref({ top: '0px', left: '0px', width: '0px', height: '0px' })\n const cardStyle = ref({ position: 'fixed', left: '0px', top: '0px', visibility: 'hidden' })\n const card = ref(null)\n\n const step = computed(() => props.steps[current.value] || null)\n\n // \u76EE\u6807\u5143\u7D20\u4F4D\u7F6E\u53D8\u4E86\u5C31\u8DDF\u7740\u8D70\uFF0C\u6EDA\u52A8\u4E0E\u7A97\u53E3\u53D8\u5316\u90FD\u91CD\u65B0\u7B97\n function update () {\n const scene = step.value\n if (!scene) return\n const el = scene.target ? document.querySelector(scene.target) : null\n const rect = el\n ? el.getBoundingClientRect()\n : { top: 80, left: 80, width: 220, height: 40, bottom: 120 }\n\n highlight.value = {\n top: rect.top - 4 + 'px',\n left: rect.left - 4 + 'px',\n width: rect.width + 8 + 'px',\n height: rect.height + 8 + 'px'\n }\n\n // \u5361\u7247\u4F18\u5148\u653E\u9AD8\u4EAE\u4E0B\u65B9\uFF0C\u7A7A\u95F4\u4E0D\u591F\u653E\u4E0A\u65B9\uFF0C\u5DE6\u53F3\u505A\u89C6\u53E3\u6536\u655B\n const cardHeight = card.value ? card.value.offsetHeight : 160\n const width = card.value ? card.value.offsetWidth : 280\n const below = window.innerHeight - rect.bottom > cardHeight + props.offset + 12\n const top = below ? rect.bottom + props.offset : Math.max(12, rect.top - cardHeight - props.offset)\n const left = Math.max(12, Math.min(rect.left, window.innerWidth - width - 12))\n cardStyle.value = { position: 'fixed', top: top + 'px', left: left + 'px', visibility: 'visible' }\n }\n\n function onKeydown (event) {\n if (event.key === 'Escape') close()\n // \u5F15\u5BFC\u4E0D\u9501\u7126\u70B9\uFF08\u8981\u5141\u8BB8\u64CD\u4F5C\u9AD8\u4EAE\u76EE\u6807\uFF09\uFF0C\u53EA\u63A5\u7BA1\u5DE6\u53F3\u65B9\u5411\u952E\u7FFB\u6B65\n else if (event.key === 'ArrowRight' && card.value && card.value.contains(document.activeElement)) next()\n else if (event.key === 'ArrowLeft' && card.value && card.value.contains(document.activeElement)) prev()\n }\n\n function startScene () {\n current.value = 0\n emit('change', 0)\n document.addEventListener('keydown', onKeydown)\n window.addEventListener('resize', update)\n window.addEventListener('scroll', update, true)\n nextTick(() => {\n update()\n if (card.value) card.value.focus({ preventScroll: true })\n })\n }\n\n function stopScene () {\n document.removeEventListener('keydown', onKeydown)\n window.removeEventListener('resize', update)\n window.removeEventListener('scroll', update, true)\n }\n\n function close () {\n if (!props.modelValue) return\n emit('update:modelValue', false)\n }\n\n function next () {\n if (current.value >= props.steps.length - 1) {\n emit('finish')\n close()\n return\n }\n current.value += 1\n emit('change', current.value)\n nextTick(update)\n }\n\n function prev () {\n if (current.value === 0) return\n current.value -= 1\n emit('change', current.value)\n nextTick(update)\n }\n\n watch(() => props.modelValue, (value) => {\n if (value) startScene()\n else stopScene()\n })\n\n onMounted(() => {\n if (props.modelValue) startScene()\n })\n onBeforeUnmount(stopScene)\n\n return { current, step, highlight, cardStyle, card, close, next, prev, t }\n },\n template: `\n <Teleport to=\"body\">\n <div v-if=\"modelValue && step\" class=\"djm-tour\">\n <div class=\"djm-tour-highlight\" :style=\"highlight\"></div>\n <div\n ref=\"card\"\n class=\"djm-tour-card\"\n :style=\"cardStyle\"\n role=\"dialog\"\n :aria-label=\"t('tour.label')\"\n tabindex=\"-1\"\n >\n <div class=\"djm-tour-head\">\n <strong>{{ step.title }}</strong>\n <button class=\"djm-tour-close\" type=\"button\" :aria-label=\"t('tour.close')\" @click=\"close\">\n <DjmIcon name=\"x\" :size=\"12\" />\n </button>\n </div>\n <p class=\"djm-tour-desc\">{{ step.desc }}</p>\n <div class=\"djm-tour-foot\">\n <span class=\"djm-tour-count\">{{ current + 1 }} / {{ steps.length }}</span>\n <div class=\"djm-tour-actions\">\n <button v-if=\"current > 0\" class=\"djm-btn djm-btn-sm\" type=\"button\" @click=\"prev\">{{ t('tour.prev') }}</button>\n <button class=\"djm-btn djm-btn-sm djm-btn-primary\" type=\"button\" @click=\"next\">\n {{ current === steps.length - 1 ? t('tour.finish') : t('tour.next') }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </Teleport>\n `\n}\n", "/**\n * \u65E5\u5386\uFF1A\u6708\u89C6\u56FE\uFF0C\u70B9\u9009\u65E5\u671F\uFF0C\u53EF\u6807\u8BB0\u6709\u65E5\u7A0B\u7684\u65E5\u671F\n * \u7528\u6CD5\uFF1A<DjmCalendar v-model=\"date\" :marks=\"['2026-10-24']\" />\n * first-day \u63A7\u5236\u6BCF\u5468\u4ECE\u5468\u51E0\u5F00\u59CB\uFF0C1 \u4E3A\u5468\u4E00\u30010 \u4E3A\u5468\u65E5\n */\nimport { computed, ref, watch } from 'vue'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\n\nfunction pad (num) {\n return String(num).padStart(2, '0')\n}\n\nfunction toKey (year, month, day) {\n return `${year}-${pad(month + 1)}-${pad(day)}`\n}\n\nfunction parse (value) {\n if (!value) return null\n const parts = String(value).split('-').map(Number)\n if (parts.length !== 3 || parts.some((item) => !Number.isFinite(item))) return null\n const [year, month, day] = parts\n // \u6708\u4EFD\u4E0E\u65E5\u671F\u8981\u771F\u5B9E\u5B58\u5728\uFF0C\u907F\u514D 2026-13-01 \u8FD9\u7C7B\u503C\u628A\u6807\u9898\u7B97\u9519\n const date = new Date(year, month - 1, day)\n if (\n month < 1 || month > 12 || day < 1 ||\n date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day\n ) return null\n return { year, month: month - 1, day }\n}\n\nexport default {\n name: 'DjmCalendar',\n components: { DjmIcon: Icon },\n props: {\n modelValue: { type: String, default: '' },\n // \u65E5\u671F\u5B57\u7B26\u4E32\uFF0C\u6216 [{ date: '2026-10-24' }]\n marks: { type: Array, default: () => [] },\n firstDay: { type: Number, default: 1 }\n },\n emits: ['update:modelValue', 'change', 'month-change'],\n setup (props, { emit }) {\n const today = new Date()\n const todayKey = toKey(today.getFullYear(), today.getMonth(), today.getDate())\n const initial = parse(props.modelValue)\n\n const viewYear = ref(initial ? initial.year : today.getFullYear())\n const viewMonth = ref(initial ? initial.month : today.getMonth())\n\n const weekNames = computed(() => {\n const base = ['\u65E5', '\u4E00', '\u4E8C', '\u4E09', '\u56DB', '\u4E94', '\u516D']\n return base.slice(props.firstDay).concat(base.slice(0, props.firstDay))\n })\n\n const markSet = computed(() => new Set(\n props.marks.map((item) => (typeof item === 'string' ? item : item.date)).filter(Boolean)\n ))\n\n // \u56FA\u5B9A 42 \u683C\uFF0C\u524D\u540E\u8865\u9F50\u76F8\u90BB\u6708\u4EFD\u7684\u65E5\u671F\uFF0C\u4FDD\u8BC1\u884C\u9AD8\u4E00\u81F4\n const cells = computed(() => {\n const first = new Date(viewYear.value, viewMonth.value, 1)\n const offset = (first.getDay() - props.firstDay + 7) % 7\n const start = new Date(viewYear.value, viewMonth.value, 1 - offset)\n const list = []\n for (let i = 0; i < 42; i++) {\n const date = new Date(start.getFullYear(), start.getMonth(), start.getDate() + i)\n list.push({\n key: toKey(date.getFullYear(), date.getMonth(), date.getDate()),\n day: date.getDate(),\n outside: date.getMonth() !== viewMonth.value\n })\n }\n return list\n })\n\n // \u6309 6 \u884C \u00D7 7 \u5217\u5206\u7EC4\uFF0C\u4F9B grid / row / gridcell \u8BED\u4E49\u4F7F\u7528\n const weeks = computed(() => {\n const list = cells.value\n return Array.from({ length: 6 }, (_, index) => list.slice(index * 7, index * 7 + 7))\n })\n\n function shift (delta) {\n const base = new Date(viewYear.value, viewMonth.value + delta, 1)\n viewYear.value = base.getFullYear()\n viewMonth.value = base.getMonth()\n emit('month-change', toKey(viewYear.value, viewMonth.value, 1))\n }\n\n function select (cell) {\n emit('update:modelValue', cell.key)\n emit('change', cell.key)\n // \u70B9\u5230\u4E0A\u4E0B\u6708\u7684\u65E5\u671F\u65F6\uFF0C\u987A\u624B\u628A\u89C6\u56FE\u5207\u8FC7\u53BB\n const parts = parse(cell.key)\n if (parts && (parts.year !== viewYear.value || parts.month !== viewMonth.value)) {\n viewYear.value = parts.year\n viewMonth.value = parts.month\n emit('month-change', toKey(parts.year, parts.month, 1))\n }\n }\n\n function goToday () {\n viewYear.value = today.getFullYear()\n viewMonth.value = today.getMonth()\n select({ key: todayKey })\n }\n\n // \u65B9\u5411\u952E\u5728\u65E5\u671F\u683C\u4E4B\u95F4\u79FB\u52A8\uFF0CHome / End \u8DF3\u5230\u672C\u5468\u9996\u5C3E\n function onGridKey (event) {\n const stepMap = { ArrowLeft: -1, ArrowRight: 1, ArrowUp: -7, ArrowDown: 7 }\n const list = [...event.currentTarget.querySelectorAll('.djm-date-picker-day')]\n const index = list.indexOf(document.activeElement)\n if (index < 0) return\n const step = stepMap[event.key]\n if (event.key === 'Home' || event.key === 'End') {\n event.preventDefault()\n const base = index - (index % 7)\n list[event.key === 'Home' ? base : Math.min(base + 6, list.length - 1)].focus()\n return\n }\n if (!step) return\n const next = index + step\n if (next < 0 || next >= list.length) return\n event.preventDefault()\n list[next].focus()\n }\n\n // \u5916\u90E8\u6539\u4E86\u503C\u5C31\u628A\u89C6\u56FE\u8DDF\u8FC7\u53BB\n watch(() => props.modelValue, (value) => {\n const parts = parse(value)\n if (parts && (parts.year !== viewYear.value || parts.month !== viewMonth.value)) {\n viewYear.value = parts.year\n viewMonth.value = parts.month\n }\n })\n\n return { todayKey, viewYear, viewMonth, weekNames, markSet, cells, weeks, shift, select, goToday, onGridKey, t }\n },\n template: `\n <div class=\"djm-calendar\">\n <div class=\"djm-calendar-head\">\n <div class=\"djm-calendar-title\" aria-live=\"polite\">{{ t('calendar.title', { year: viewYear, month: viewMonth + 1 }) }}</div>\n <div class=\"djm-calendar-navs\">\n <button class=\"djm-calendar-nav\" type=\"button\" :aria-label=\"t('calendar.prevMonth')\" @click=\"shift(-1)\">\n <DjmIcon name=\"chevron-left\" :size=\"14\" />\n </button>\n <button class=\"djm-calendar-today\" type=\"button\" @click=\"goToday\">{{ t('datePicker.today') }}</button>\n <button class=\"djm-calendar-nav\" type=\"button\" :aria-label=\"t('calendar.nextMonth')\" @click=\"shift(1)\">\n <DjmIcon name=\"chevron-right\" :size=\"14\" />\n </button>\n </div>\n </div>\n\n <div class=\"djm-date-picker-grid\" role=\"grid\" :aria-label=\"t('calendar.grid')\" @keydown=\"onGridKey\">\n <div class=\"djm-date-picker-weekrow\" role=\"row\">\n <div v-for=\"name in weekNames\" :key=\"name\" class=\"djm-date-picker-week\" role=\"columnheader\">{{ name }}</div>\n </div>\n <div v-for=\"(week, wi) in weeks\" :key=\"wi\" class=\"djm-date-picker-weekrow\" role=\"row\">\n <div v-for=\"cell in week\" :key=\"cell.key\" class=\"djm-date-picker-cell\" role=\"gridcell\">\n <button\n class=\"djm-date-picker-day\"\n :class=\"{\n 'djm-is-outside': cell.outside,\n 'djm-is-today': cell.key === todayKey,\n 'djm-is-selected': cell.key === modelValue\n }\"\n type=\"button\"\n :aria-label=\"cell.key\"\n :aria-pressed=\"cell.key === modelValue ? 'true' : 'false'\"\n :aria-current=\"cell.key === todayKey ? 'date' : undefined\"\n @click=\"select(cell)\"\n >\n {{ cell.day }}\n <span v-if=\"markSet.has(cell.key)\" class=\"djm-calendar-dot\"></span>\n </button>\n </div>\n </div>\n </div>\n </div>\n `\n}\n", "/**\n * \u60AC\u6D6E\u6309\u94AE\uFF1A\u5E38\u9A7B\u53F3\u4E0B\u89D2\u7684\u5FEB\u6377\u5165\u53E3\uFF0C\u4F20\u5165 items \u65F6\u70B9\u5F00\u5C55\u5F00\u4E00\u7EC4\u64CD\u4F5C\n * \u7528\u6CD5\uFF1A<DjmFloatButton label=\"\u5FEB\u6377\u64CD\u4F5C\" :items=\"[{ icon: 'plus', label: '\u65B0\u5EFA', onClick }]\" />\n */\nimport { onBeforeUnmount, ref } from 'vue'\nimport Icon from '../icon/index.js'\n\nexport default {\n name: 'DjmFloatButton',\n components: { DjmIcon: Icon },\n props: {\n icon: { type: String, default: 'plus' },\n label: { type: String, default: '\u5FEB\u6377\u64CD\u4F5C' },\n // \u5C55\u5F00\u540E\u7684\u64CD\u4F5C\u9879\uFF1A[{ icon, label, onClick }]\n items: { type: Array, default: () => [] },\n type: { type: String, default: 'primary' }, // primary | default\n right: { type: Number, default: 24 },\n bottom: { type: Number, default: 24 }\n },\n emits: ['click', 'select'],\n setup (props, { emit }) {\n const open = ref(false)\n\n function onKeydown (event) {\n if (event.key === 'Escape') close()\n }\n\n function onDocumentMousedown (event) {\n if (event.target.closest('.djm-float-button')) return\n close()\n }\n\n function close () {\n if (!open.value) return\n open.value = false\n document.removeEventListener('mousedown', onDocumentMousedown, true)\n document.removeEventListener('keydown', onKeydown)\n }\n\n function toggle () {\n open.value = !open.value\n if (open.value) {\n document.addEventListener('mousedown', onDocumentMousedown, true)\n document.addEventListener('keydown', onKeydown)\n } else {\n close()\n }\n }\n\n function onMainClick () {\n if (!props.items.length) {\n emit('click')\n return\n }\n toggle()\n }\n\n function choose (item) {\n close()\n emit('select', item)\n if (typeof item.onClick === 'function') item.onClick(item)\n }\n\n onBeforeUnmount(close)\n\n return { open, onMainClick, choose }\n },\n template: `\n <div class=\"djm-float-button\" :style=\"{ right: right + 'px', bottom: bottom + 'px' }\">\n <Transition name=\"djm-fade\">\n <div v-if=\"open && items.length\" class=\"djm-float-list\">\n <button\n v-for=\"item in items\"\n :key=\"item.label\"\n class=\"djm-float-item\"\n type=\"button\"\n @click=\"choose(item)\"\n >\n <DjmIcon :name=\"item.icon || 'plus'\" :size=\"14\" />\n <span>{{ item.label }}</span>\n </button>\n </div>\n </Transition>\n\n <button\n class=\"djm-float-main\"\n :class=\"{ 'djm-is-primary': type === 'primary' }\"\n type=\"button\"\n :aria-label=\"open ? '\u6536\u8D77\u64CD\u4F5C' : label\"\n :aria-expanded=\"items.length ? String(open) : undefined\"\n @click=\"onMainClick\"\n >\n <DjmIcon :name=\"open ? 'x' : icon\" :size=\"18\" />\n </button>\n </div>\n `\n}\n", "/**\n * \u63D0\u53CA\uFF1A\u8F93\u5165 @ \u540E\u5F39\u51FA\u5019\u9009\uFF0C\u9009\u4E2D\u540E\u628A\u300C@\u5173\u952E\u5B57\u300D\u66FF\u6362\u6210\u300C@\u540D\u5B57\u300D\n * \u7528\u6CD5\uFF1A<DjmMentions v-model=\"text\" :options=\"[{ value: 'zhang', label: '\u5F20\u4F1F' }]\" />\n */\nimport { computed, nextTick, onBeforeUnmount, ref, watch } from 'vue'\nimport { bindPanelListeners, shouldFlipUp, dropdownPanelStyle, PANEL_HIDDEN_STYLE } from '../../utils/panel.js'\n\nlet uidSeed = 0\n\nexport default {\n name: 'DjmMentions',\n props: {\n modelValue: { type: String, default: '' },\n // \u652F\u6301\u5B57\u7B26\u4E32\u6570\u7EC4\uFF0C\u6216 [{ value, label }]\n options: { type: Array, default: () => [] },\n placeholder: { type: String, default: '' },\n rows: { type: Number, default: 3 },\n disabled: { type: Boolean, default: false },\n ariaLabel: { type: String, default: '\u5185\u5BB9\u8F93\u5165' }\n },\n emits: ['update:modelValue', 'input', 'select'],\n setup (props, { emit }) {\n const root = ref(null)\n const input = ref(null)\n const text = ref(props.modelValue)\n const open = ref(false)\n const keyword = ref('')\n const activeIndex = ref(-1)\n const listId = 'djm-mentions-' + (++uidSeed)\n const panelStyle = ref({ ...PANEL_HIDDEN_STYLE })\n // @ \u7684\u8D77\u59CB\u4E0B\u6807\uFF0C\u9009\u4E2D\u540E\u4ECE\u8FD9\u91CC\u5F00\u59CB\u66FF\u6362\n let triggerIndex = -1\n let detachPanel = null\n\n watch(() => props.modelValue, (value) => {\n text.value = value\n })\n\n const normalized = computed(() => props.options.map((item) => (\n typeof item === 'string' ? { value: item, label: item } : item\n )))\n\n const filtered = computed(() => {\n const key = keyword.value.trim().toLowerCase()\n const list = key\n ? normalized.value.filter((item) => String(item.label).toLowerCase().indexOf(key) > -1)\n : normalized.value\n return list.slice(0, 6)\n })\n\n const activeId = computed(() => (\n activeIndex.value > -1 ? listId + '-' + activeIndex.value : undefined\n ))\n\n function updatePosition () {\n if (!open.value || !root.value) return\n const rect = root.value.getBoundingClientRect()\n const panel = document.getElementById(listId)\n // \u9762\u677F\u5BBD\u5EA6\u8DDF\u968F\u8F93\u5165\u6846\uFF0C\u4E0B\u65B9\u653E\u4E0D\u4E0B\u5C31\u5411\u4E0A\u5C55\u5F00\n panelStyle.value = dropdownPanelStyle({\n rect,\n flip: shouldFlipUp(rect, panel ? panel.offsetHeight : 200),\n width: rect.width\n })\n }\n\n function openPanel () {\n open.value = true\n // Esc \u5728\u8F93\u5165\u6846 keydown \u91CC\u5904\u7406\uFF0C\u8FD9\u91CC\u4E0D\u518D\u7ED1 document \u7EA7 keydown\n detachPanel = bindPanelListeners({\n root: () => root.value,\n panel: () => document.getElementById(listId),\n onClose: closePanel,\n onReposition: updatePosition,\n esc: false\n })\n nextTick(updatePosition)\n }\n\n function closePanel () {\n if (!open.value) return\n open.value = false\n activeIndex.value = -1\n panelStyle.value = { ...PANEL_HIDDEN_STYLE }\n if (detachPanel) {\n detachPanel()\n detachPanel = null\n }\n }\n\n function onInput (event) {\n const value = event.target.value\n text.value = value\n emit('update:modelValue', value)\n emit('input', event)\n\n // \u5149\u6807\u524D\u82E5\u662F\u4EE5 @ \u5F00\u5934\u7684\u8BCD\uFF0C\u5C31\u5F53\u6210\u89E6\u53D1\u5019\u9009\n const caret = event.target.selectionStart || 0\n const match = /@([^\\s@]*)$/.exec(value.slice(0, caret))\n if (!match) {\n closePanel()\n return\n }\n triggerIndex = caret - match[0].length\n keyword.value = match[1]\n activeIndex.value = -1\n if (!open.value) openPanel()\n else nextTick(updatePosition)\n }\n\n function onKeydown (event) {\n if (!open.value) return\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault()\n const step = event.key === 'ArrowDown' ? 1 : -1\n const total = filtered.value.length\n if (!total) return\n activeIndex.value = (activeIndex.value + step + total) % total\n return\n }\n if (event.key === 'Enter') {\n const item = filtered.value[activeIndex.value] || filtered.value[0]\n if (item) {\n event.preventDefault()\n choose(item)\n }\n return\n }\n if (event.key === 'Escape') closePanel()\n }\n\n function choose (item) {\n const value = text.value || ''\n const end = triggerIndex + 1 + keyword.value.length\n const next = value.slice(0, triggerIndex) + '@' + item.label + ' ' + value.slice(end)\n text.value = next\n emit('update:modelValue', next)\n emit('select', item)\n closePanel()\n // \u5149\u6807\u843D\u5728\u63D2\u5165\u5185\u5BB9\u4E4B\u540E\n nextTick(() => {\n if (!input.value) return\n const pos = triggerIndex + item.label.length + 2\n input.value.focus()\n input.value.setSelectionRange(pos, pos)\n })\n }\n\n onBeforeUnmount(closePanel)\n\n return {\n root, input, text, open, activeIndex, listId, panelStyle,\n filtered, activeId, onInput, onKeydown, choose\n }\n },\n template: `\n <div ref=\"root\" class=\"djm-mentions\">\n <textarea\n ref=\"input\"\n class=\"djm-input djm-mentions-input\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n :value=\"text\"\n :rows=\"rows\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :aria-label=\"ariaLabel\"\n :aria-expanded=\"String(open)\"\n :aria-controls=\"listId\"\n :aria-activedescendant=\"activeId\"\n @input=\"onInput\"\n @keydown=\"onKeydown\"\n ></textarea>\n\n <Teleport to=\"body\">\n <div v-if=\"open\" :id=\"listId\" class=\"djm-mentions-panel\" :style=\"panelStyle\" role=\"listbox\">\n <div\n v-for=\"(item, index) in filtered\"\n :id=\"listId + '-' + index\"\n :key=\"item.value\"\n class=\"djm-mentions-option\"\n :class=\"{ 'djm-is-active': index === activeIndex }\"\n role=\"option\"\n :aria-selected=\"String(index === activeIndex)\"\n @mousedown.prevent=\"choose(item)\"\n @mousemove=\"activeIndex = index\"\n >{{ item.label }}</div>\n <div v-if=\"!filtered.length\" class=\"djm-mentions-empty\">\u6CA1\u6709\u5339\u914D\u7684\u6210\u5458</div>\n </div>\n </Teleport>\n </div>\n `\n}\n", "/**\n * \u6805\u683C\u884C\uFF1A12 \u680F\u7F51\u683C\uFF0C\u914D\u5408 DjmCol \u4F7F\u7528\n * \u7528\u6CD5\uFF1A<DjmRow :gap=\"12\"><DjmCol :span=\"6\">\u5DE6</DjmCol><DjmCol :span=\"6\">\u53F3</DjmCol></DjmRow>\n */\nexport default {\n name: 'DjmRow',\n props: {\n gap: { type: [Number, String], default: 10 }\n },\n computed: {\n style () {\n return { gap: typeof this.gap === 'number' ? this.gap + 'px' : this.gap }\n }\n },\n template: '<div class=\"djm-grid-row\" :style=\"style\"><slot /></div>'\n}\n", "/**\n * \u6805\u683C\u5217\uFF1Aspan \u63A7\u5236\u8DE8\u51E0\u680F\uFF0Coffset \u63A7\u5236\u5DE6\u8FB9\u7A7A\u51E0\u680F\n * \u7528\u6CD5\uFF1A<DjmCol :span=\"8\" :offset=\"2\">\u5185\u5BB9</DjmCol>\n */\nexport default {\n name: 'DjmCol',\n props: {\n span: { type: Number, default: 12 },\n offset: { type: Number, default: 0 }\n },\n computed: {\n classes () {\n return 'djm-col-' + Math.min(12, Math.max(1, this.span))\n },\n style () {\n // \u6805\u683C\u8D77\u59CB\u7EBF\u4ECE 1 \u5F00\u59CB\uFF0Coffset \u8981\u52A0\u4E00\n return this.offset ? { gridColumnStart: this.offset + 1 } : null\n }\n },\n template: '<div :class=\"classes\" :style=\"style\"><slot /></div>'\n}\n", "/**\n * \u5E03\u5C40\u5BB9\u5668\uFF1A\u7EB5\u5411\u6392\u5217\uFF0C\u914D\u5408 Header / Sider / Content / Footer \u62FC\u9875\u9762\u9AA8\u67B6\n * \u7528\u6CD5\uFF1A\u89C1 DjmLayoutHeader / DjmLayoutSider / DjmLayoutContent / DjmLayoutFooter\n */\nexport default {\n name: 'DjmLayout',\n props: {\n direction: { type: String, default: 'vertical' } // vertical | horizontal\n },\n template: `\n <div class=\"djm-layout\" :class=\"'djm-layout-' + direction\">\n <slot />\n </div>\n `\n}\n", "/** \u5E03\u5C40\u5934\u90E8\uFF1A\u56FA\u5B9A\u9AD8\u5EA6\uFF0C\u5E38\u7528\u4E8E\u6807\u9898\u4E0E\u64CD\u4F5C\u533A */\nexport default {\n name: 'DjmLayoutHeader',\n template: '<header class=\"djm-layout-header\"><slot /></header>'\n}\n", "/** \u5E03\u5C40\u4FA7\u680F\uFF1A\u9ED8\u8BA4 200 \u5BBD\uFF0C\u5BBD\u5EA6\u53EF\u76F4\u63A5\u4F20\u6570\u5B57 */\nexport default {\n name: 'DjmLayoutSider',\n props: {\n width: { type: [Number, String], default: 200 }\n },\n computed: {\n style () {\n return { width: typeof this.width === 'number' ? this.width + 'px' : this.width }\n }\n },\n template: '<aside class=\"djm-layout-sider\" :style=\"style\"><slot /></aside>'\n}\n", "/** \u5E03\u5C40\u5185\u5BB9\u533A\uFF1A\u5360\u6EE1\u5269\u4F59\u7A7A\u95F4\u5E76\u72EC\u7ACB\u6EDA\u52A8 */\nexport default {\n name: 'DjmLayoutContent',\n template: '<main class=\"djm-layout-content\"><slot /></main>'\n}\n", "/** \u5E03\u5C40\u9875\u811A\uFF1A\u653E\u5728\u5185\u5BB9\u533A\u4E4B\u540E */\nexport default {\n name: 'DjmLayoutFooter',\n template: '<footer class=\"djm-layout-footer\"><slot /></footer>'\n}\n", "/**\n * \u5217\u8868\uFF1A\u6570\u636E\u7528 items \u4F20\u5165\uFF0C\u884C\u5185\u5BB9\u53EF\u7528 #item \u63D2\u69FD\u81EA\u5B9A\u4E49\n * \u7528\u6CD5\uFF1A<DjmList :items=\"rows\"><template #item=\"{ item }\">\u2026</template></DjmList>\n */\nexport default {\n name: 'DjmList',\n props: {\n items: { type: Array, default: () => [] },\n bordered: { type: Boolean, default: true },\n // \u7A7A\u6570\u636E\u6587\u6848\n emptyText: { type: String, default: '\u6682\u65E0\u6570\u636E' }\n },\n template: `\n <div class=\"djm-list\" :class=\"{ 'djm-is-bordered': bordered }\">\n <div v-if=\"$slots.header\" class=\"djm-list-header\"><slot name=\"header\" /></div>\n <ul v-if=\"items.length\" class=\"djm-list-body\">\n <li v-for=\"(item, index) in items\" :key=\"item.id !== undefined ? item.id : index\" class=\"djm-list-item\">\n <slot name=\"item\" :item=\"item\" :index=\"index\">\n <div class=\"djm-list-main\">\n <div class=\"djm-list-title\">{{ item.title }}</div>\n <div v-if=\"item.desc\" class=\"djm-list-desc\">{{ item.desc }}</div>\n </div>\n <div v-if=\"item.extra\" class=\"djm-list-extra\">{{ item.extra }}</div>\n </slot>\n </li>\n </ul>\n <div v-else class=\"djm-list-empty\">{{ emptyText }}</div>\n <div v-if=\"$slots.footer\" class=\"djm-list-footer\"><slot name=\"footer\" /></div>\n </div>\n `\n}\n", "/**\n * \u6807\u7B7E\u8F93\u5165\uFF1A\u56DE\u8F66\u6216\u9017\u53F7\u751F\u6210\u6807\u7B7E\uFF0C\u8F93\u5165\u6846\u4E3A\u7A7A\u65F6\u9000\u683C\u5220\u9664\u6700\u540E\u4E00\u4E2A\n * \u7528\u6CD5\uFF1A<DjmInputTag v-model=\"tags\" :max=\"5\" placeholder=\"\u56DE\u8F66\u6DFB\u52A0\" />\n */\nimport Icon from '../icon/index.js'\n\nexport default {\n name: 'DjmInputTag',\n components: { DjmIcon: Icon },\n props: {\n modelValue: { type: Array, default: () => [] },\n placeholder: { type: String, default: '' },\n // \u6700\u591A\u51E0\u4E2A\u6807\u7B7E\uFF0C0 \u8868\u793A\u4E0D\u9650\n max: { type: Number, default: 0 },\n disabled: { type: Boolean, default: false },\n allowDuplicate: { type: Boolean, default: false },\n ariaLabel: { type: String, default: '\u6807\u7B7E\u8F93\u5165' }\n },\n emits: ['update:modelValue', 'change', 'add', 'remove', 'focus', 'blur'],\n data () {\n return { draft: '' }\n },\n computed: {\n reachedMax () {\n return this.max > 0 && this.modelValue.length >= this.max\n },\n placeholderText () {\n if (this.modelValue.length) return ''\n return this.placeholder\n }\n },\n methods: {\n focusInput () {\n if (this.disabled || !this.$refs.input) return\n this.$refs.input.focus()\n },\n commit () {\n const value = this.draft.trim()\n if (!value) {\n this.draft = ''\n return\n }\n // \u5230\u8FBE\u4E0A\u9650\u6216\u91CD\u590D\u65F6\u4E0D\u6DFB\u52A0\uFF0C\u4F46\u8981\u628A\u8349\u7A3F\u6E05\u6389\uFF0C\u907F\u514D\u4E00\u76F4\u5360\u7740\u8F93\u5165\u6846\n if (this.reachedMax || (!this.allowDuplicate && this.modelValue.indexOf(value) > -1)) {\n this.draft = ''\n return\n }\n const next = this.modelValue.concat(value)\n this.draft = ''\n this.$emit('update:modelValue', next)\n this.$emit('change', next)\n this.$emit('add', value)\n },\n remove (index) {\n if (this.disabled) return\n const tag = this.modelValue[index]\n const next = this.modelValue.slice()\n next.splice(index, 1)\n this.$emit('update:modelValue', next)\n this.$emit('change', next)\n this.$emit('remove', tag)\n },\n onKeydown (event) {\n if (event.key === 'Enter' || event.key === ',') {\n event.preventDefault()\n this.commit()\n return\n }\n if (event.key === 'Backspace' && !this.draft && this.modelValue.length) {\n event.preventDefault()\n this.remove(this.modelValue.length - 1)\n }\n },\n onInput (event) {\n this.draft = event.target.value\n },\n onBlur (event) {\n this.commit()\n // \u7126\u70B9\u5728\u7EC4\u4EF6\u5185\u90E8\u79FB\u52A8\uFF08\u6BD4\u5982\u70B9\u5220\u9664\u6309\u94AE\uFF09\u4E0D\u7B97\u79BB\u5F00\n if (!this.$el.contains(event.relatedTarget)) this.$emit('blur', event)\n }\n },\n template: `\n <div\n class=\"djm-input djm-input-tag\"\n :class=\"{ 'djm-is-disabled': disabled, 'djm-is-full': reachedMax }\"\n @click=\"focusInput\"\n >\n <span v-for=\"(tag, index) in modelValue\" :key=\"tag\" class=\"djm-input-tag-item\">\n {{ tag }}\n <button\n class=\"djm-input-tag-close\"\n type=\"button\"\n :aria-label=\"'\u79FB\u9664 ' + tag\"\n :disabled=\"disabled\"\n @click.stop=\"remove(index)\"\n >\n <DjmIcon name=\"x\" :size=\"10\" />\n </button>\n </span>\n <input\n ref=\"input\"\n class=\"djm-input-tag-field\"\n type=\"text\"\n autocomplete=\"off\"\n :value=\"draft\"\n :placeholder=\"placeholderText\"\n :disabled=\"disabled || reachedMax\"\n :aria-label=\"ariaLabel\"\n @input=\"onInput\"\n @keydown=\"onKeydown\"\n @blur=\"onBlur\"\n @focus=\"$emit('focus', $event)\"\n />\n </div>\n `\n}\n", "/**\n * \u5BC6\u7801\u8F93\u5165\uFF1A\u53EF\u5207\u6362\u660E\u6587\uFF0C\u6309\u957F\u5EA6\u4E0E\u5B57\u7B26\u79CD\u7C7B\u7ED9\u5F3A\u5EA6\u63D0\u793A\n * \u7528\u6CD5\uFF1A<DjmPassword v-model=\"pwd\" placeholder=\"\u8BF7\u8F93\u5165\u5BC6\u7801\" />\n */\nimport { computed, ref } from 'vue'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\n\nexport default {\n name: 'DjmPassword',\n components: { DjmIcon: Icon },\n props: {\n modelValue: { type: String, default: '' },\n placeholder: { type: String, default: '' },\n disabled: { type: Boolean, default: false },\n showStrength: { type: Boolean, default: true },\n // \u9ED8\u8BA4\u8BFB i18n \u7684\u300C\u5BC6\u7801\u300D\uFF0C\u591A\u8BED\u8A00\u573A\u666F\u53EF\u81EA\u884C\u4F20\u5165\n ariaLabel: { type: String, default: '' }\n },\n emits: ['update:modelValue', 'input', 'change', 'enter', 'focus', 'blur'],\n setup (props, { emit }) {\n const visible = ref(false)\n\n // 0-4 \u5206\uFF1A\u957F\u5EA6 8 \u4F4D\u3001\u5927\u5C0F\u5199\u3001\u6570\u5B57\u3001\u7B26\u53F7\u5404\u52A0\u4E00\u5206\n const score = computed(() => {\n const value = props.modelValue || ''\n if (!value) return 0\n let total = 0\n if (value.length >= 8) total += 1\n if (/[a-z]/.test(value) && /[A-Z]/.test(value)) total += 1\n if (/\\d/.test(value)) total += 1\n if (/[^a-zA-Z\\d]/.test(value)) total += 1\n return total\n })\n\n // \u4E09\u683C\u8FDB\u5EA6\u6761\uFF1A\u4E24\u5206\u53CA\u4EE5\u4E0B\u7B97\u5F31\uFF0C\u4E09\u5206\u7B97\u4E2D\uFF0C\u56DB\u5206\u7B97\u5F3A\n const level = computed(() => {\n if (score.value <= 1) return 1\n if (score.value <= 3) return 2\n return 3\n })\n\n const label = computed(() => {\n const key = ['', 'password.weak', 'password.medium', 'password.strong'][level.value]\n return t(key)\n })\n\n function onInput (event) {\n emit('update:modelValue', event.target.value)\n emit('input', event)\n }\n\n return { visible, score, level, label, onInput, t }\n },\n template: `\n <div class=\"djm-password\">\n <div class=\"djm-password-field\">\n <input\n class=\"djm-input djm-password-input\"\n :type=\"visible ? 'text' : 'password'\"\n :value=\"modelValue\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :aria-label=\"ariaLabel || t('password.aria')\"\n autocomplete=\"off\"\n @input=\"onInput\"\n @change=\"$emit('change', $event)\"\n @keyup.enter=\"$emit('enter', $event)\"\n @focus=\"$emit('focus', $event)\"\n @blur=\"$emit('blur', $event)\"\n />\n <button\n class=\"djm-password-toggle\"\n type=\"button\"\n :aria-label=\"visible ? t('password.hide') : t('password.show')\"\n :aria-pressed=\"String(visible)\"\n :disabled=\"disabled\"\n @click=\"visible = !visible\"\n >\n <DjmIcon :name=\"visible ? 'eye-off' : 'eye'\" :size=\"14\" />\n </button>\n </div>\n\n <div v-if=\"showStrength\" class=\"djm-password-strength\" aria-live=\"polite\">\n <span class=\"djm-password-meter\" :aria-label=\"modelValue ? t('password.strength', { level: label }) : undefined\">\n <i v-for=\"step in 3\" :key=\"step\" :class=\"{ 'djm-is-on': level >= step, 'djm-is-strong': level >= 3 }\"></i>\n </span>\n <span class=\"djm-password-label\">{{ modelValue ? label : t('password.hint') }}</span>\n </div>\n </div>\n `\n}\n", "/**\n * \u547D\u4EE4\u9762\u677F\uFF1ACmd/Ctrl + K \u5524\u8D77\uFF0C\u8F93\u5165\u8FC7\u6EE4\uFF0C\u56DE\u8F66\u6267\u884C\n * \u7528\u6CD5\uFF1A<DjmCommandPalette :commands=\"[{ key: 'users', label: '\u7528\u6237\u7BA1\u7406', group: '\u5BFC\u822A', run: fn }]\" />\n */\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport { lockScroll, unlockScroll } from '../../utils/scroll-lock.js'\nimport { trapFocus } from '../../utils/focus-trap.js'\n\nlet uidSeed = 0\n\nexport default {\n name: 'DjmCommandPalette',\n props: {\n modelValue: { type: Boolean, default: false },\n // \u547D\u4EE4\u9879\uFF1A[{ key, label, group, hint, run }]\n commands: { type: Array, default: () => [] },\n placeholder: { type: String, default: '\u641C\u7D22\u547D\u4EE4' },\n // \u662F\u5426\u6CE8\u518C Cmd/Ctrl + K\n shortcut: { type: Boolean, default: true }\n },\n emits: ['update:modelValue', 'run'],\n setup (props, { emit }) {\n const open = ref(false)\n const keyword = ref('')\n const activeIndex = ref(-1)\n const searchInput = ref(null)\n const panelEl = ref(null)\n const listId = 'djm-command-list-' + (++uidSeed)\n // \u7126\u70B9\u9677\u9631\u7684\u89E3\u7ED1\u53E5\u67C4\n let releaseTrap = null\n\n const filtered = computed(() => {\n const key = keyword.value.trim().toLowerCase()\n if (!key) return props.commands\n return props.commands.filter((item) => {\n const text = [item.label, item.group, item.hint].filter(Boolean).join(' ').toLowerCase()\n return text.indexOf(key) > -1\n })\n })\n\n const activeId = computed(() => (\n activeIndex.value > -1 ? listId + '-' + activeIndex.value : undefined\n ))\n\n function show () {\n if (open.value) return\n open.value = true\n keyword.value = ''\n activeIndex.value = -1\n emit('update:modelValue', true)\n lockScroll()\n document.addEventListener('keydown', onDocumentKeydown)\n nextTick(() => {\n // Tab \u5FAA\u73AF\u9650\u5236\u5728\u9762\u677F\u5185\uFF0C\u5173\u95ED\u540E\u7126\u70B9\u56DE\u5230\u89E6\u53D1\u4F4D\u7F6E\n releaseTrap = trapFocus(panelEl.value)\n if (searchInput.value) searchInput.value.focus()\n })\n }\n\n function hide () {\n if (!open.value) return\n open.value = false\n emit('update:modelValue', false)\n unlockScroll()\n document.removeEventListener('keydown', onDocumentKeydown)\n if (releaseTrap) {\n releaseTrap()\n releaseTrap = null\n }\n }\n\n function toggle () {\n if (open.value) hide()\n else show()\n }\n\n function onDocumentKeydown (event) {\n if (event.key === 'Escape') hide()\n }\n\n function onGlobalKeydown (event) {\n if (!props.shortcut) return\n if ((event.metaKey || event.ctrlKey) && String(event.key).toLowerCase() === 'k') {\n event.preventDefault()\n toggle()\n }\n }\n\n function move (step) {\n const total = filtered.value.length\n if (!total) return\n activeIndex.value = (activeIndex.value + step + total) % total\n }\n\n function onInput (event) {\n keyword.value = event.target.value\n activeIndex.value = filtered.value.length ? 0 : -1\n }\n\n function onKeydown (event) {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n move(1)\n return\n }\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n move(-1)\n return\n }\n if (event.key === 'Enter') {\n const item = filtered.value[activeIndex.value] || filtered.value[0]\n if (item) {\n event.preventDefault()\n run(item)\n }\n }\n }\n\n function run (item) {\n emit('run', item)\n if (typeof item.run === 'function') item.run(item)\n hide()\n }\n\n watch(() => props.modelValue, (value) => {\n if (value) show()\n else hide()\n })\n\n onMounted(() => window.addEventListener('keydown', onGlobalKeydown))\n onBeforeUnmount(() => {\n window.removeEventListener('keydown', onGlobalKeydown)\n hide()\n })\n\n return { open, keyword, activeIndex, searchInput, panelEl, listId, filtered, activeId, hide, move, onInput, onKeydown, run }\n },\n template: `\n <Teleport to=\"body\">\n <div v-if=\"open\" class=\"djm-command-mask\" @mousedown.self=\"hide\">\n <div class=\"djm-command-panel\" ref=\"panelEl\" role=\"dialog\" aria-modal=\"true\" aria-label=\"\u547D\u4EE4\u9762\u677F\">\n <input\n ref=\"searchInput\"\n class=\"djm-command-search\"\n type=\"text\"\n autocomplete=\"off\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n :aria-label=\"placeholder\"\n :aria-controls=\"listId\"\n :aria-expanded=\"String(open)\"\n :aria-activedescendant=\"activeId\"\n :placeholder=\"placeholder\"\n :value=\"keyword\"\n autocomplete=\"off\"\n @input=\"onInput\"\n @keydown=\"onKeydown\"\n />\n <div :id=\"listId\" class=\"djm-command-list\" role=\"listbox\">\n <div\n v-for=\"(item, index) in filtered\"\n :id=\"listId + '-' + index\"\n :key=\"item.key || item.label\"\n class=\"djm-command-item\"\n :class=\"{ 'djm-is-active': index === activeIndex }\"\n role=\"option\"\n :aria-selected=\"String(index === activeIndex)\"\n @mousedown.prevent=\"run(item)\"\n @mousemove=\"activeIndex = index\"\n >\n <span class=\"djm-command-label\">{{ item.label }}</span>\n <span v-if=\"item.group\" class=\"djm-command-group\">{{ item.group }}</span>\n </div>\n <div v-if=\"!filtered.length\" class=\"djm-command-empty\">\u6CA1\u6709\u5339\u914D\u7684\u547D\u4EE4</div>\n </div>\n <div class=\"djm-command-foot\">\u2191\u2193 \u9009\u62E9 \u00B7 Enter \u6267\u884C \u00B7 Esc \u5173\u95ED</div>\n </div>\n </div>\n </Teleport>\n `\n}\n", "const FOCUSABLE = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])'\n].join(',')\n\n/**\n * \u7126\u70B9\u9677\u9631\uFF1A\u5F39\u5C42\u6253\u5F00\u65F6\u628A Tab \u5FAA\u73AF\u9650\u5236\u5728\u5BB9\u5668\u5185\uFF0C\u5173\u95ED\u540E\u628A\u7126\u70B9\u8FD8\u7ED9\u89E6\u53D1\u5143\u7D20\n * \u7528\u6CD5\uFF1Aconst release = trapFocus(panelEl); ... release()\n */\nexport function trapFocus (container) {\n if (!container) return () => {}\n\n const previous = document.activeElement\n const items = () => [...container.querySelectorAll(FOCUSABLE)].filter((el) => el.getClientRects().length > 0)\n\n const first = items()[0]\n if (first) first.focus()\n\n function onKeydown (event) {\n if (event.key !== 'Tab') return\n const list = items()\n if (!list.length) return\n const head = list[0]\n const tail = list[list.length - 1]\n\n if (event.shiftKey && (document.activeElement === head || !container.contains(document.activeElement))) {\n event.preventDefault()\n tail.focus()\n } else if (!event.shiftKey && document.activeElement === tail) {\n event.preventDefault()\n head.focus()\n }\n }\n\n container.addEventListener('keydown', onKeydown)\n\n return () => {\n container.removeEventListener('keydown', onKeydown)\n if (previous && typeof previous.focus === 'function') previous.focus()\n }\n}\n", "/**\n * \u4E8C\u7EF4\u7801\uFF1A\u628A\u6587\u672C\u7F16\u6210\u4E8C\u7EF4\u7801\uFF0C\u57FA\u4E8E qrcode \u5E93\u751F\u6210 SVG \u56FE\u7247\n * \u7528\u6CD5\uFF1A<DjmQRCode value=\"https://ui.duojumi.com\" :size=\"140\" />\n * \u5E93\u6587\u4EF6\u5728 vendor/qrcode.esm.js\uFF0C\u7531 npm \u5305\u6253\u5305\u800C\u6765\uFF0C\u9875\u9762\u4E0D\u4F9D\u8D56\u5916\u7F51\n */\nimport { onMounted, ref, watch } from 'vue'\n\nexport default {\n name: 'DjmQRCode',\n props: {\n value: { type: String, default: '' },\n size: { type: Number, default: 120 },\n // \u5BB9\u9519\u7B49\u7EA7\uFF1AL / M / Q / H\n level: { type: String, default: 'M' },\n // \u56DB\u5468\u7559\u767D\uFF08\u6A21\u5757\u6570\uFF09\n margin: { type: Number, default: 2 },\n dark: { type: String, default: '#000000' },\n light: { type: String, default: '#ffffff' },\n alt: { type: String, default: '\u4E8C\u7EF4\u7801' }\n },\n setup (props) {\n const src = ref('')\n const error = ref('')\n let lib = null\n // \u8FDE\u7EED\u6539\u52A8\u65F6\u53EA\u8BA4\u6700\u540E\u4E00\u6B21\u7ED3\u679C\n let seq = 0\n\n async function ensureLib () {\n if (!lib) {\n const mod = await import('../../../vendor/qrcode.esm.js')\n lib = mod.default || mod\n }\n return lib\n }\n\n async function render () {\n const text = props.value\n const current = ++seq\n if (!text) {\n src.value = ''\n error.value = ''\n return\n }\n try {\n const QRCode = await ensureLib()\n const svg = await QRCode.toString(text, {\n type: 'svg',\n margin: props.margin,\n width: props.size,\n errorCorrectionLevel: props.level,\n color: { dark: props.dark, light: props.light }\n })\n if (current !== seq) return\n src.value = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svg)\n error.value = ''\n } catch (err) {\n if (current !== seq) return\n src.value = ''\n error.value = '\u4E8C\u7EF4\u7801\u751F\u6210\u5931\u8D25'\n }\n }\n\n onMounted(render)\n watch(() => [props.value, props.size, props.level, props.margin, props.dark, props.light], render)\n\n return { src, error }\n },\n template: `\n <div class=\"djm-qrcode\" :style=\"{ width: size + 'px', height: size + 'px' }\">\n <img v-if=\"src\" class=\"djm-qrcode-img\" :src=\"src\" :alt=\"alt\" :width=\"size\" :height=\"size\" />\n <span v-else-if=\"error\" class=\"djm-qrcode-tip\">{{ error }}</span>\n <span v-else class=\"djm-qrcode-tip\">\u6682\u65E0\u5185\u5BB9</span>\n </div>\n `\n}\n", "/**\n * \u72B6\u6001\u5FBD\u6807\uFF1A\u7EDF\u4E00\u300C\u5706\u70B9 + \u6587\u6848\u300D\u7684\u72B6\u6001\u5C55\u793A\n * tone\uFF1Aok | off | warn | danger\uFF08\u5E26\u4E0D\u5E26 djm- \u524D\u7F00\u90FD\u53EF\u4EE5\uFF09\n * type\uFF1Asuccess | warning | danger | info\uFF0C\u4E0E Tag / Result \u7684\u8BED\u4E49\u503C\u4FDD\u6301\u4E00\u81F4\n * \u7528\u6CD5\uFF1A<DjmStatus type=\"success\" label=\"\u542F\u7528\" />\n */\nconst TONE_ALIAS = {\n success: 'ok',\n warning: 'warn',\n error: 'danger',\n info: 'brand',\n default: 'off'\n}\n\nexport default {\n name: 'DjmStatus',\n props: {\n tone: { type: String, default: '' },\n type: { type: String, default: '' },\n label: { type: String, default: '' }\n },\n computed: {\n classes () {\n const raw = (this.tone || this.type || 'off').replace(/^djm-/, '')\n return ['djm-status', 'djm-' + (TONE_ALIAS[raw] || raw)]\n }\n },\n template: `\n <span :class=\"classes\"><i></i><slot>{{ label }}</slot></span>\n `\n}\n", "import { ref, nextTick, onBeforeUnmount } from 'vue'\n\nlet uid = 0\n\n/**\n * \u6587\u5B57\u63D0\u793A\uFF1Ahover / focus \u51FA\u73B0\uFF0C\u652F\u6301\u4E0A\u4E0B\u5DE6\u53F3\u56DB\u4E2A\u65B9\u5411\n * \u9762\u677F\u7528 fixed \u5B9A\u4F4D\uFF08\u4E0D\u653E\u8FDB\u89E6\u53D1\u5143\u7D20\u7684\u6587\u6863\u6D41\uFF09\uFF0C\u907F\u514D\u88AB\u8868\u683C\u3001\u5361\u7247\u7B49\u5BB9\u5668\u88C1\u526A\n * \u7528\u6CD5\uFF1A<DjmTooltip content=\"\u5237\u65B0\" placement=\"top\"><DjmButton size=\"sm\">\u5237\u65B0</DjmButton></DjmTooltip>\n */\nexport default {\n name: 'DjmTooltip',\n props: {\n content: { type: String, default: '' },\n placement: { type: String, default: 'top' },\n disabled: { type: Boolean, default: false },\n delay: { type: Number, default: 80 }\n },\n setup (props) {\n const visible = ref(false)\n const rootRef = ref(null)\n const contentRef = ref(null)\n const actualPlacement = ref(props.placement)\n const panelStyle = ref({})\n const tipId = 'djm-tooltip-' + (++uid)\n let timer = null\n\n function triggerEl () {\n const root = rootRef.value\n return root && (root.firstElementChild || root)\n }\n\n // \u628A\u63D0\u793A\u6587\u5B57\u6302\u5230\u89E6\u53D1\u5143\u7D20\u4E0A\uFF0C\u8BFB\u5C4F\u80FD\u8BFB\u5230\n function bindTrigger (on) {\n const el = triggerEl()\n if (!el) return\n if (on) el.setAttribute('aria-describedby', tipId)\n else el.removeAttribute('aria-describedby')\n }\n\n // \u6309\u89E6\u53D1\u5143\u7D20\u4F4D\u7F6E\u7B97 fixed \u5750\u6807\uFF0C\u8D34\u8FB9\u65F6\u7FFB\u5230\u5BF9\u4FA7\uFF0C\u6700\u540E\u6536\u8FDB\u89C6\u53E3\n function position () {\n const el = triggerEl()\n const tip = contentRef.value\n if (!el || !tip) return\n const rect = el.getBoundingClientRect()\n const width = tip.offsetWidth\n const height = tip.offsetHeight\n const gap = 8\n\n let side = props.placement\n if (side === 'top' && rect.top - height - gap < 8) side = 'bottom'\n else if (side === 'bottom' && rect.bottom + height + gap > window.innerHeight - 8) side = 'top'\n else if (side === 'left' && rect.left - width - gap < 8) side = 'right'\n else if (side === 'right' && rect.right + width + gap > window.innerWidth - 8) side = 'left'\n actualPlacement.value = side\n\n let top\n let left\n if (side === 'top') {\n top = rect.top - height - gap\n left = rect.left + rect.width / 2 - width / 2\n } else if (side === 'bottom') {\n top = rect.bottom + gap\n left = rect.left + rect.width / 2 - width / 2\n } else if (side === 'left') {\n top = rect.top + rect.height / 2 - height / 2\n left = rect.left - width - gap\n } else {\n top = rect.top + rect.height / 2 - height / 2\n left = rect.right + gap\n }\n\n panelStyle.value = {\n position: 'fixed',\n top: Math.max(8, Math.min(top, window.innerHeight - height - 8)) + 'px',\n left: Math.max(8, Math.min(left, window.innerWidth - width - 8)) + 'px'\n }\n }\n\n function bindReposition (on) {\n const method = on ? 'addEventListener' : 'removeEventListener'\n window[method]('scroll', position, true)\n window[method]('resize', position)\n }\n\n function show () {\n if (props.disabled || !props.content) return\n window.clearTimeout(timer)\n timer = window.setTimeout(async () => {\n visible.value = true\n await nextTick()\n position()\n bindTrigger(true)\n bindReposition(true)\n }, props.delay)\n }\n\n function hide () {\n window.clearTimeout(timer)\n visible.value = false\n panelStyle.value = {}\n bindTrigger(false)\n bindReposition(false)\n }\n\n onBeforeUnmount(() => {\n window.clearTimeout(timer)\n bindReposition(false)\n })\n\n return { visible, rootRef, contentRef, actualPlacement, panelStyle, tipId, show, hide }\n },\n template: `\n <span ref=\"rootRef\" class=\"djm-tooltip\" @mouseenter=\"show\" @mouseleave=\"hide\" @focusin=\"show\" @focusout=\"hide\" @keydown.esc=\"hide\">\n <slot></slot>\n <Transition name=\"djm-fade\">\n <span\n v-if=\"visible && content\"\n :id=\"tipId\"\n ref=\"contentRef\"\n class=\"djm-tooltip-content\"\n :class=\"'djm-tooltip-' + actualPlacement\"\n :style=\"panelStyle\"\n role=\"tooltip\"\n >{{ content }}</span>\n </Transition>\n </span>\n `\n}\n", "import { nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport Icon from '../icon/index.js'\nimport { bindPanelListeners } from '../../utils/panel.js'\nimport { t } from '../../locale/index.js'\n\n/**\n * \u4E0B\u62C9\u83DC\u5355\uFF1A\u70B9\u51FB\u6216\u60AC\u6D6E\u89E6\u53D1\uFF0C\u70B9\u51FB\u5916\u90E8 / Esc \u5173\u95ED\n * items: [{ label, value, icon, description, disabled, danger, divider }]\n * \u7528\u6CD5\uFF1A<DjmDropdown :items=\"items\" @select=\"onSelect\"><DjmButton>\u66F4\u591A</DjmButton></DjmDropdown>\n */\nexport default {\n name: 'DjmDropdown',\n components: { DjmIcon: Icon },\n props: {\n items: { type: Array, default: () => [] },\n placement: { type: String, default: 'bottom-start' },\n width: { type: [Number, String], default: '' },\n maxHeight: { type: [Number, String], default: '' },\n disabled: { type: Boolean, default: false },\n // \u89E6\u53D1\u65B9\u5F0F\uFF1Aclick / hover\n trigger: { type: String, default: 'click' },\n // \u9009\u4E2D\u540E\u662F\u5426\u81EA\u52A8\u5173\u95ED\n closeOnSelect: { type: Boolean, default: true }\n },\n emits: ['select', 'visible-change'],\n setup (props, { emit }) {\n const open = ref(false)\n const root = ref(null)\n const menuEl = ref(null)\n // \u83DC\u5355\u6302\u5230 body\uFF0C\u7528 fixed \u5B9A\u4F4D\u907F\u514D\u88AB\u7236\u7EA7 overflow \u88C1\u526A\n const panelStyle = ref({})\n // \u6D6E\u5C42\u5168\u5C40\u76D1\u542C\u7684\u89E3\u7ED1\u53E5\u67C4\n let detachPanel = null\n\n // \u5F39\u51FA\u5C42\u8BED\u4E49\u5199\u8FDB\u63D2\u69FD\u91CC\u7684\u771F\u5B9E\u63A7\u4EF6\uFF1A\u5916\u5C42\u53EA\u662F\u5BB9\u5668\uFF0C\u4E0D\u80FD\u5192\u5145 button\n function syncTriggerA11y () {\n const wrapper = root.value && root.value.querySelector('.djm-dropdown-trigger')\n if (!wrapper) return\n const inner = wrapper.querySelector('button, a[href], input, [role=\"button\"]')\n const target = inner || wrapper\n if (!inner) target.setAttribute('role', 'button')\n target.setAttribute('aria-haspopup', 'menu')\n target.setAttribute('aria-expanded', String(open.value))\n if (props.disabled) target.setAttribute('aria-disabled', 'true')\n else target.removeAttribute('aria-disabled')\n }\n\n onMounted(() => nextTick(syncTriggerA11y))\n watch(open, () => nextTick(syncTriggerA11y))\n\n function updatePosition () {\n if (!open.value || !root.value) return\n const rect = root.value.getBoundingClientRect()\n const style = { position: 'fixed' }\n if (props.width) {\n style.minWidth = typeof props.width === 'number' ? props.width + 'px' : props.width\n }\n if (props.maxHeight) {\n style.maxHeight = typeof props.maxHeight === 'number' ? props.maxHeight + 'px' : props.maxHeight\n style.overflowY = 'auto'\n }\n // \u4E0B\u65B9\u7A7A\u95F4\u4E0D\u8DB3\u4E14\u4E0A\u65B9\u66F4\u5BBD\u88D5\u65F6\u5411\u4E0A\u5C55\u5F00\n const below = window.innerHeight - rect.bottom\n const up = props.placement.indexOf('top') === 0 || (below < 160 && rect.top > below)\n if (up) style.bottom = window.innerHeight - rect.top + 6 + 'px'\n else style.top = rect.bottom + 6 + 'px'\n if (props.placement.indexOf('end') > -1) style.right = window.innerWidth - rect.right + 'px'\n else style.left = rect.left + 'px'\n panelStyle.value = style\n }\n\n function openMenu () {\n if (props.disabled || open.value) return\n open.value = true\n emit('visible-change', true)\n // \u6D6E\u5C42\u5168\u5C40\u76D1\u542C\uFF1A\u5916\u90E8\u70B9\u51FB / Esc \u5173\u95ED\uFF0Cresize / scroll \u91CD\u5B9A\u4F4D\n detachPanel = bindPanelListeners({\n root: () => root.value,\n panel: () => menuEl.value,\n onClose: close,\n onReposition: updatePosition\n })\n // \u7B49 DOM \u6E32\u67D3\u540E\u518D\u6D4B\u91CF\u4F4D\u7F6E\n requestAnimationFrame(updatePosition)\n }\n\n function close () {\n if (!open.value) return\n open.value = false\n panelStyle.value = {}\n emit('visible-change', false)\n if (detachPanel) {\n detachPanel()\n detachPanel = null\n }\n // \u7126\u70B9\u8FD8\u5728\u83DC\u5355\u91CC\u5C31\u9000\u56DE\u89E6\u53D1\u5668\uFF0C\u952E\u76D8\u64CD\u4F5C\u4E0D\u4E22\u4F4D\u7F6E\n returnFocus()\n }\n\n function focusFirstItem () {\n nextTick(() => {\n const el = menuEl.value && menuEl.value.querySelector('.djm-dropdown-item:not(:disabled)')\n if (el) el.focus()\n })\n }\n\n function returnFocus () {\n const trigger = root.value && root.value.querySelector('.djm-dropdown-trigger')\n if (!trigger || !menuEl.value) return\n if (!menuEl.value.contains(document.activeElement)) return\n const inner = trigger.querySelector('button, a[href], input, [role=\"button\"]')\n ;(inner || trigger).focus()\n }\n\n // \u83DC\u5355\u5185\u65B9\u5411\u952E\u79FB\u52A8\uFF0CEsc \u5173\u95ED\n function onMenuKeydown (event) {\n if (event.key === 'Escape') {\n event.stopPropagation()\n close()\n return\n }\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return\n event.preventDefault()\n const list = [...(menuEl.value ? menuEl.value.querySelectorAll('.djm-dropdown-item:not(:disabled)') : [])]\n if (!list.length) return\n const current = list.indexOf(document.activeElement)\n let next = 0\n if (event.key === 'End') next = list.length - 1\n else if (event.key === 'ArrowDown') next = current < 0 ? 0 : (current + 1) % list.length\n else if (event.key === 'ArrowUp') next = current < 0 ? list.length - 1 : (current - 1 + list.length) % list.length\n list[next].focus()\n }\n\n function toggle (event) {\n if (props.disabled) return\n if (open.value) {\n close()\n return\n }\n openMenu()\n // \u952E\u76D8\u89E6\u53D1\uFF08Enter / \u7A7A\u683C\uFF09\u65F6\u628A\u7126\u70B9\u9001\u5230\u7B2C\u4E00\u9879\n if (event && event.detail === 0) focusFirstItem()\n }\n\n // \u89E6\u53D1\u5668\u4E0A\u6309\u4E0B\u65B9\u5411\u952E\u76F4\u63A5\u5C55\u5F00\u5E76\u805A\u7126\u9996\u9879\n function onTriggerDown () {\n if (props.disabled || open.value) return\n openMenu()\n focusFirstItem()\n }\n\n // \u60AC\u6D6E\u89E6\u53D1\uFF1A\u79FB\u51FA\u540E\u5EF6\u8FDF\u5173\u95ED\uFF0C\u4FBF\u4E8E\u4ECE\u89E6\u53D1\u5668\u79FB\u5230\u83DC\u5355\n let hoverTimer = null\n\n function onHoverIn () {\n if (props.trigger !== 'hover') return\n window.clearTimeout(hoverTimer)\n openMenu()\n }\n\n function onHoverOut () {\n if (props.trigger !== 'hover') return\n window.clearTimeout(hoverTimer)\n hoverTimer = window.setTimeout(close, 120)\n }\n\n function pick (item) {\n if (item.disabled || item.divider) return\n emit('select', item)\n if (props.closeOnSelect) close()\n }\n\n onBeforeUnmount(() => {\n window.clearTimeout(hoverTimer)\n close()\n })\n\n return { open, root, menuEl, panelStyle, toggle, close, pick, openMenu, onHoverIn, onHoverOut, onMenuKeydown, onTriggerDown, t }\n },\n template: `\n <div\n class=\"djm-dropdown\"\n :class=\"{ 'djm-is-disabled': disabled }\"\n ref=\"root\"\n @mouseenter=\"onHoverIn\"\n @mouseleave=\"onHoverOut\"\n >\n <!-- \u89E6\u53D1\u5668\u8BED\u4E49\u7531 syncTriggerA11y \u5199\u5230\u63D2\u69FD\u91CC\u7684\u771F\u5B9E\u63A7\u4EF6\u4E0A -->\n <span\n class=\"djm-dropdown-trigger\"\n @click=\"toggle\"\n @keydown.down.prevent=\"onTriggerDown\"\n >\n <slot :open=\"open\"></slot>\n </span>\n\n <Teleport to=\"body\">\n <Transition name=\"djm-pop\">\n <div\n v-if=\"open\"\n ref=\"menuEl\"\n class=\"djm-dropdown-menu\"\n :class=\"'djm-dropdown-' + placement\"\n :style=\"panelStyle\"\n role=\"menu\"\n @mouseenter=\"onHoverIn\"\n @mouseleave=\"onHoverOut\"\n @keydown=\"onMenuKeydown\"\n >\n <template v-for=\"(item, index) in items\" :key=\"index\">\n <div v-if=\"item.divider\" class=\"djm-dropdown-divider\"></div>\n <button\n v-else\n class=\"djm-dropdown-item\"\n :class=\"{ 'djm-is-danger': item.danger, 'djm-is-active': item.active }\"\n type=\"button\"\n role=\"menuitem\"\n :disabled=\"item.disabled\"\n @click=\"pick(item)\"\n >\n <slot name=\"item\" :item=\"item\">\n <DjmIcon v-if=\"item.icon\" :name=\"item.icon\" :size=\"14\" />\n <span class=\"djm-dropdown-item-main\">\n <span>{{ item.label }}</span>\n <em v-if=\"item.description\" class=\"djm-dropdown-item-desc\">{{ item.description }}</em>\n </span>\n </slot>\n </button>\n </template>\n <div v-if=\"!items.length\" class=\"djm-dropdown-empty\">{{ t('common.noOptions') }}</div>\n </div>\n </Transition>\n </Teleport>\n </div>\n `\n}\n", "import { ref, nextTick, watch, onMounted, onBeforeUnmount } from 'vue'\nimport Icon from '../icon/index.js'\nimport { lockScroll, unlockScroll } from '../../utils/scroll-lock.js'\nimport { trapFocus } from '../../utils/focus-trap.js'\nimport { t } from '../../locale/index.js'\n\nlet uid = 0\n\n/**\n * \u62BD\u5C49\uFF1A\u4ECE\u5DE6\u53F3\u4E24\u4FA7\u6ED1\u51FA\uFF0C\u9002\u5408\u627F\u8F7D\u8868\u5355\u4E0E\u8BE6\u60C5\n * \u7528\u6CD5\uFF1A<DjmDrawer v-model=\"open\" title=\"\u65B0\u589E\u7528\u6237\" placement=\"right\" :width=\"460\">\n * <template #footer>...</template>\n * </DjmDrawer>\n */\nexport default {\n name: 'DjmDrawer',\n components: { DjmIcon: Icon },\n props: {\n modelValue: { type: Boolean, default: false },\n title: { type: String, default: '' },\n placement: { type: String, default: 'right' },\n width: { type: [Number, String], default: 420 },\n // \u70B9\u51FB\u906E\u7F69\u5173\u95ED\n maskClosable: { type: Boolean, default: true },\n showClose: { type: Boolean, default: true },\n closeOnEsc: { type: Boolean, default: true }\n },\n emits: ['update:modelValue', 'open', 'close'],\n setup (props, { emit }) {\n const panelRef = ref(null)\n const titleId = `djm-drawer-title-${++uid}`\n let locked = false\n let releaseTrap = null\n\n function close () {\n emit('update:modelValue', false)\n }\n\n function onKeydown (event) {\n if (props.closeOnEsc && event.key === 'Escape') close()\n }\n\n function release () {\n if (releaseTrap) {\n releaseTrap()\n releaseTrap = null\n }\n }\n\n async function activate () {\n document.addEventListener('keydown', onKeydown)\n lockScroll()\n locked = true\n emit('open')\n await nextTick()\n releaseTrap = trapFocus(panelRef.value)\n }\n\n function deactivate () {\n document.removeEventListener('keydown', onKeydown)\n release()\n if (locked) {\n unlockScroll()\n locked = false\n }\n emit('close')\n }\n\n watch(() => props.modelValue, (open) => {\n if (open) activate()\n else deactivate()\n })\n\n // \u652F\u6301\u6302\u8F7D\u65F6\u5373\u4E3A\u6253\u5F00\u72B6\u6001\n onMounted(() => {\n if (props.modelValue) activate()\n })\n\n onBeforeUnmount(() => {\n document.removeEventListener('keydown', onKeydown)\n release()\n if (locked) unlockScroll()\n })\n\n return { close, panelRef, titleId, t }\n },\n computed: {\n panelStyle () {\n return { width: typeof this.width === 'number' ? this.width + 'px' : this.width }\n }\n },\n template: `\n <Teleport to=\"body\">\n <Transition name=\"djm-drawer\">\n <div v-if=\"modelValue\" class=\"djm-drawer-mask\" @mousedown.self=\"maskClosable && close()\">\n <aside\n ref=\"panelRef\"\n class=\"djm-drawer\"\n :class=\"'djm-drawer-' + placement\"\n :style=\"panelStyle\"\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-labelledby=\"title ? titleId : undefined\"\n :aria-label=\"title ? undefined : t('common.dialog')\"\n >\n <header class=\"djm-drawer-head\">\n <slot name=\"header\">\n <h3 :id=\"titleId\">{{ title }}</h3>\n </slot>\n <button\n v-if=\"showClose\"\n class=\"djm-icon-btn\"\n type=\"button\"\n :aria-label=\"t('common.close')\"\n @click=\"close\"\n >\n <DjmIcon name=\"x\" />\n </button>\n </header>\n <div class=\"djm-drawer-body\">\n <slot></slot>\n </div>\n <footer v-if=\"$slots.footer\" class=\"djm-drawer-foot\">\n <slot name=\"footer\"></slot>\n </footer>\n </aside>\n </div>\n </Transition>\n </Teleport>\n `\n}\n", "import { ref, nextTick, watch, computed, onMounted, onBeforeUnmount } from 'vue'\nimport Icon from '../icon/index.js'\nimport { lockScroll, unlockScroll } from '../../utils/scroll-lock.js'\nimport { trapFocus } from '../../utils/focus-trap.js'\nimport { t } from '../../locale/index.js'\n\nlet uid = 0\n\nexport default {\n name: 'DjmModal',\n components: { Icon },\n props: {\n modelValue: { type: Boolean, default: false },\n title: { type: String, default: '' },\n width: { type: String, default: '640px' },\n maskClosable: { type: Boolean, default: true },\n // \u662F\u5426\u663E\u793A\u53F3\u4E0A\u89D2\u5173\u95ED\u6309\u94AE\n showClose: { type: Boolean, default: true },\n // \u662F\u5426\u5141\u8BB8 Esc \u5173\u95ED\n closeOnEsc: { type: Boolean, default: true },\n // \u5168\u5C4F\u94FA\u6EE1\uFF0C\u9002\u5408\u914D\u7F6E\u7C7B\u5927\u8868\u5355\n fullscreen: { type: Boolean, default: false }\n },\n emits: ['update:modelValue', 'open', 'close'],\n setup (props, { emit }) {\n const dialogRef = ref(null)\n const titleId = `djm-modal-title-${++uid}`\n let locked = false\n let releaseTrap = null\n\n function close () {\n emit('update:modelValue', false)\n }\n\n function onKey (event) {\n if (props.closeOnEsc && event.key === 'Escape') close()\n }\n\n function release () {\n if (releaseTrap) {\n releaseTrap()\n releaseTrap = null\n }\n }\n\n async function activate () {\n document.addEventListener('keydown', onKey)\n lockScroll()\n locked = true\n emit('open')\n await nextTick()\n releaseTrap = trapFocus(dialogRef.value)\n }\n\n function deactivate () {\n document.removeEventListener('keydown', onKey)\n release()\n if (locked) {\n unlockScroll()\n locked = false\n }\n emit('close')\n }\n\n watch(() => props.modelValue, (open) => {\n if (open) activate()\n else deactivate()\n })\n\n // \u652F\u6301\u6302\u8F7D\u65F6\u5373\u4E3A\u6253\u5F00\u72B6\u6001\n onMounted(() => {\n if (props.modelValue) activate()\n })\n\n onBeforeUnmount(() => {\n document.removeEventListener('keydown', onKey)\n release()\n if (locked) unlockScroll()\n })\n\n return {\n close,\n dialogRef,\n titleId,\n t,\n dialogStyle: computed(() =>\n props.fullscreen\n ? { width: 'calc(100vw - 32px)', height: 'calc(100vh - 48px)' }\n : { width: props.width }\n )\n }\n },\n template: `\n <Teleport to=\"body\">\n <Transition name=\"djm-modal\">\n <div v-if=\"modelValue\" class=\"djm-modal-mask\" @mousedown.self=\"maskClosable && close()\">\n <div\n ref=\"dialogRef\"\n class=\"djm-modal\"\n :class=\"{ 'djm-is-fullscreen': fullscreen }\"\n :style=\"dialogStyle\"\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-labelledby=\"title ? titleId : undefined\"\n :aria-label=\"title ? undefined : t('common.dialog')\"\n >\n <div class=\"djm-modal-head\">\n <slot name=\"header\">\n <h3 :id=\"titleId\">{{ title }}</h3>\n </slot>\n <button\n v-if=\"showClose\"\n class=\"djm-icon-btn\"\n type=\"button\"\n :aria-label=\"t('common.close')\"\n @click=\"close\"\n >\n <Icon name=\"x\" />\n </button>\n </div>\n <div class=\"djm-modal-body\">\n <slot></slot>\n </div>\n <div class=\"djm-modal-foot\" v-if=\"$slots.footer\">\n <slot name=\"footer\"></slot>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n `\n}\n", "import AppModal from '../modal/index.js'\nimport { t } from '../../locale/index.js'\n\nexport default {\n name: 'DjmConfirmDialog',\n components: { AppModal },\n props: {\n modelValue: { type: Boolean, default: false },\n title: { type: String, default: '' },\n message: { type: String, default: '' },\n confirmText: { type: String, default: '' },\n cancelText: { type: String, default: '' },\n danger: { type: Boolean, default: false }\n },\n emits: ['update:modelValue', 'confirm'],\n computed: {\n titleText () {\n return this.title || t('confirm.title')\n },\n confirmLabel () {\n return this.confirmText || t('confirm.confirm')\n },\n cancelLabel () {\n return this.cancelText || t('confirm.cancel')\n }\n },\n setup (props, { emit }) {\n function close () {\n emit('update:modelValue', false)\n }\n\n function confirm () {\n emit('confirm')\n close()\n }\n\n return { close, confirm }\n },\n template: `\n <AppModal\n :model-value=\"modelValue\"\n :title=\"titleText\"\n width=\"440px\"\n @update:model-value=\"close\"\n >\n <div class=\"djm-confirm-body\">\n <div class=\"djm-confirm-icon\" :class=\"{ 'djm-danger': danger }\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M12 9v4M12 17h.01M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n </svg>\n </div>\n <p>{{ message }}</p>\n </div>\n\n <template #footer>\n <button class=\"djm-btn\" type=\"button\" @click=\"close\">{{ cancelLabel }}</button>\n <button\n class=\"djm-btn\"\n :class=\"danger ? 'djm-btn-danger' : 'djm-btn-primary'\"\n type=\"button\"\n @click=\"confirm\"\n >{{ confirmLabel }}</button>\n </template>\n </AppModal>\n `\n}\n", "import { computed, ref } from 'vue'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\n\nexport default {\n name: 'DjmPagination',\n components: { Icon },\n props: {\n total: { type: Number, default: 0 },\n page: { type: Number, default: 1 },\n pageSize: { type: Number, default: 10 },\n pageSizes: { type: Array, default: () => [10, 20, 50] }\n },\n emits: ['update:page', 'update:pageSize', 'change'],\n setup (props, { emit }) {\n const jumpText = ref('')\n\n const pageCount = computed(() => Math.max(1, Math.ceil(props.total / Math.max(1, props.pageSize))))\n\n // \u5916\u90E8\u9875\u7801\u53EF\u80FD\u56E0\u7B5B\u9009\u540E\u603B\u6570\u53D8\u5C11\u800C\u8D8A\u754C\uFF0C\u5C55\u793A\u65F6\u7EDF\u4E00\u6536\u655B\n const current = computed(() => Math.min(Math.max(1, props.page), pageCount.value))\n\n const pages = computed(() => {\n const count = pageCount.value\n const currentPage = current.value\n\n if (count <= 7) {\n return Array.from({ length: count }, (_, i) => i + 1)\n }\n\n let start = Math.max(2, currentPage - 1)\n let end = Math.min(count - 1, currentPage + 1)\n if (currentPage <= 3) {\n start = 2\n end = 4\n }\n if (currentPage >= count - 2) {\n start = count - 3\n end = count - 1\n }\n\n const result = [1]\n if (start > 2) result.push('...')\n for (let i = start; i <= end; i++) result.push(i)\n if (end < count - 1) result.push('...')\n result.push(count)\n return result\n })\n\n function go (target) {\n const next = Math.min(Math.max(1, target), pageCount.value)\n if (next !== props.page) {\n emit('update:page', next)\n emit('change', { page: next, pageSize: props.pageSize })\n }\n jumpText.value = ''\n }\n\n function changeSize (event) {\n const size = Number(event.target.value)\n emit('update:pageSize', size)\n emit('update:page', 1)\n emit('change', { page: 1, pageSize: size })\n }\n\n function doJump () {\n const value = Number(jumpText.value)\n if (!Number.isFinite(value) || value < 1) {\n jumpText.value = ''\n return\n }\n go(Math.floor(value))\n }\n\n return { jumpText, pageCount, current, pages, go, changeSize, doJump, t }\n },\n template: `\n <div class=\"djm-pagination\">\n <div class=\"djm-pagination-info\">\n {{ t('pagination.total', { total }) }}\n </div>\n <div class=\"djm-pagination-main\">\n <select class=\"djm-select djm-page-size\" :value=\"pageSize\" :aria-label=\"t('pagination.pageSizeLabel')\" @change=\"changeSize\">\n <option v-for=\"size in pageSizes\" :key=\"size\" :value=\"size\">{{ t('pagination.pageSize', { size }) }}</option>\n </select>\n\n <div class=\"djm-pager\" role=\"navigation\" aria-label=\"pagination\">\n <button class=\"djm-page-btn\" type=\"button\" :disabled=\"current <= 1\" :title=\"t('pagination.first')\" :aria-label=\"t('pagination.first')\" @click=\"go(1)\">\n <Icon name=\"chevrons-left\" :size=\"13\" />\n </button>\n <button class=\"djm-page-btn\" type=\"button\" :disabled=\"current <= 1\" :title=\"t('pagination.prev')\" :aria-label=\"t('pagination.prev')\" @click=\"go(current - 1)\">\n <Icon name=\"chevron-left\" :size=\"13\" />\n </button>\n\n <template v-for=\"(item, index) in pages\" :key=\"index\">\n <span v-if=\"item === '...'\" class=\"djm-page-ellipsis\">\u2026</span>\n <button\n v-else\n class=\"djm-page-btn\"\n type=\"button\"\n :class=\"{ 'djm-is-active': item === current }\"\n :aria-label=\"t('pagination.page', { page: item })\"\n :aria-current=\"item === current ? 'page' : undefined\"\n @click=\"go(item)\"\n >{{ item }}</button>\n </template>\n\n <button class=\"djm-page-btn\" type=\"button\" :disabled=\"current >= pageCount\" :title=\"t('pagination.next')\" :aria-label=\"t('pagination.next')\" @click=\"go(current + 1)\">\n <Icon name=\"chevron-right\" :size=\"13\" />\n </button>\n <button class=\"djm-page-btn\" type=\"button\" :disabled=\"current >= pageCount\" :title=\"t('pagination.last')\" :aria-label=\"t('pagination.last')\" @click=\"go(pageCount)\">\n <Icon name=\"chevrons-right\" :size=\"13\" />\n </button>\n </div>\n\n <div class=\"djm-page-jump\">\n {{ t('pagination.jump') }}\n <input v-model=\"jumpText\" class=\"djm-input djm-jump-input\" autocomplete=\"off\" inputmode=\"numeric\" :aria-label=\"t('pagination.jumpLabel')\" @keyup.enter=\"doJump\" />\n {{ t('pagination.pageUnit') }}\n </div>\n </div>\n </div>\n `\n}\n", "import { computed } from 'vue'\nimport Icon from '../icon/index.js'\n\nlet uid = 0\n\nexport default {\n name: 'DjmTabs',\n components: { Icon },\n props: {\n modelValue: { type: [String, Number], required: true },\n items: { type: Array, default: () => [] },\n variant: { type: String, default: 'line' },\n flush: { type: Boolean, default: false },\n // \u9762\u677F\u5E38\u9A7B\uFF1A\u6240\u6709\u9762\u677F\u90FD\u6E32\u67D3\uFF0C\u53EA\u5207\u6362\u663E\u9690\uFF0C\u9002\u5408\u8868\u5355\u8FD9\u7C7B\u9700\u8981\u4FDD\u7559\u72B6\u6001\u7684\u573A\u666F\n persist: { type: Boolean, default: false }\n },\n emits: ['update:modelValue', 'close'],\n setup (props, { emit }) {\n const panelId = `djm-tabs-panel-${++uid}`\n const activeItem = computed(\n () => props.items.find((item) => item.key === props.modelValue) || { label: String(props.modelValue) }\n )\n\n function tabId (item) {\n return `${panelId}-${item.key}`\n }\n\n function activate (item) {\n if (item.disabled || item.key === props.modelValue) return\n emit('update:modelValue', item.key)\n }\n\n function close (key) {\n emit('close', key)\n }\n\n // \u9762\u677F\u5E38\u9A7B\u65F6\u6BCF\u4E2A\u6807\u7B7E\u5BF9\u5E94\u72EC\u7ACB\u9762\u677F\uFF0C\u5426\u5219\u5171\u7528\u4E00\u4E2A\n function panelOf (item) {\n return props.persist ? `${panelId}-${item.key}` : panelId\n }\n\n // \u5FBD\u6807\u4E3A 0 / \u7A7A\u4E32\u65F6\u4E0D\u663E\u793A\uFF0C\u4E0E Badge \u7EC4\u4EF6\u4FDD\u6301\u4E00\u81F4\n function hasBadge (item) {\n const text = String(item.badge === null || item.badge === undefined ? '' : item.badge).trim()\n if (text === '') return false\n return Number.isFinite(Number(text)) ? Number(text) !== 0 : true\n }\n\n // \u952E\u76D8\u5173\u95ED\uFF1ADelete / Backspace\n function onDelete (item) {\n if (!item.closable || item.disabled) return\n close(item.key)\n }\n\n // \u5DE6\u53F3\u65B9\u5411\u952E\u5207\u6362\uFF0CHome/End \u8DF3\u5230\u9996\u5C3E\n function onKeydown (event) {\n const step = event.key === 'ArrowLeft' ? -1 : event.key === 'ArrowRight' ? 1 : 0\n const isHome = event.key === 'Home'\n const isEnd = event.key === 'End'\n if (!step && !isHome && !isEnd) return\n\n const head = event.currentTarget.closest('.djm-tabs-head')\n if (!head) return\n const all = [...head.querySelectorAll('[role=\"tab\"]')]\n const enabled = all.filter((el) => el.getAttribute('aria-disabled') !== 'true')\n if (!enabled.length) return\n\n event.preventDefault()\n let index = enabled.indexOf(event.currentTarget)\n if (isHome) index = 0\n else if (isEnd) index = enabled.length - 1\n else index = (index + step + enabled.length) % enabled.length\n\n const next = enabled[index]\n next.focus()\n next.click()\n }\n\n return { panelId, activeItem, tabId, panelOf, activate, close, onDelete, onKeydown, hasBadge }\n },\n template: `\n <div class=\"djm-tabs\" :class=\"[variant === 'line' ? '' : 'djm-tabs-' + variant, { 'djm-is-flush': flush }]\">\n <div class=\"djm-tabs-head\" role=\"tablist\">\n <div\n v-for=\"item in items\"\n :key=\"item.key\"\n class=\"djm-tabs-item\"\n :class=\"{ 'djm-is-active': item.key === modelValue, 'djm-is-disabled': item.disabled, 'djm-has-close': item.closable }\"\n role=\"tab\"\n :id=\"tabId(item)\"\n :aria-controls=\"panelOf(item)\"\n :aria-selected=\"item.key === modelValue\"\n :aria-disabled=\"item.disabled || undefined\"\n :tabindex=\"item.disabled ? -1 : (item.key === modelValue ? 0 : -1)\"\n @click=\"activate(item)\"\n @keydown=\"onKeydown\"\n @keydown.enter.prevent=\"activate(item)\"\n @keydown.space.prevent=\"activate(item)\"\n @keydown.delete.prevent=\"onDelete(item)\"\n >\n <Icon v-if=\"item.icon\" :name=\"item.icon\" :size=\"14\" />\n <span>{{ item.label }}</span>\n <span v-if=\"hasBadge(item)\" class=\"djm-tabs-item-badge\">{{ item.badge }}</span>\n <!-- \u5173\u95ED\u56FE\u6807\u53EA\u54CD\u5E94\u9F20\u6807\uFF0C\u952E\u76D8\u7528 Delete\uFF0C\u907F\u514D role=tab \u5185\u5D4C\u53EF\u4EA4\u4E92\u5143\u7D20 -->\n <span\n v-if=\"item.closable\"\n class=\"djm-tabs-item-close\"\n aria-hidden=\"true\"\n :title=\"'\u5173\u95ED\u6807\u7B7E\uFF08Delete\uFF09'\"\n @click.stop=\"close(item.key)\"\n >\n <Icon name=\"x\" :size=\"11\" />\n </span>\n </div>\n </div>\n <div v-if=\"persist\" class=\"djm-tabs-body\">\n <div\n v-for=\"item in items\"\n :key=\"item.key\"\n class=\"djm-tabs-pane\"\n role=\"tabpanel\"\n :id=\"panelOf(item)\"\n :aria-labelledby=\"tabId(item)\"\n :hidden=\"item.key !== modelValue\"\n >\n <slot :name=\"'panel-' + item.key\" />\n </div>\n </div>\n <div v-else class=\"djm-tabs-body\" :id=\"panelId\" role=\"tabpanel\" :aria-labelledby=\"tabId(activeItem)\">\n <slot :name=\"'panel-' + modelValue\">\n <slot :active=\"modelValue\" :item=\"activeItem\"></slot>\n </slot>\n </div>\n </div>\n `\n}\n", "import { ref, watch, nextTick, onBeforeUnmount } from 'vue'\nimport Icon from '../icon/index.js'\nimport { bindPanelListeners } from '../../utils/panel.js'\nimport { t } from '../../locale/index.js'\n\nexport default {\n name: 'DjmContextMenu',\n components: { Icon },\n props: {\n modelValue: { type: Boolean, default: false },\n x: { type: Number, default: 0 },\n y: { type: Number, default: 0 },\n items: { type: Array, default: () => [] }\n },\n emits: ['update:modelValue', 'select'],\n setup (props, { emit }) {\n const menuRef = ref(null)\n const pos = ref({ left: 0, top: 0 })\n const margin = 8\n\n function close () {\n emit('update:modelValue', false)\n }\n\n function place () {\n const width = menuRef.value ? menuRef.value.offsetWidth : 180\n const height = menuRef.value ? menuRef.value.offsetHeight : 220\n\n let left = props.x\n let top = props.y\n\n if (left + width + margin > window.innerWidth) {\n left = Math.max(margin, window.innerWidth - width - margin)\n }\n if (top + height + margin > window.innerHeight) {\n top = Math.max(margin, top - height)\n }\n\n pos.value = { left, top }\n }\n\n async function openAtCursor () {\n pos.value = { left: props.x, top: props.y }\n await nextTick()\n place()\n // \u6253\u5F00\u540E\u805A\u7126\u7B2C\u4E00\u9879\uFF0C\u952E\u76D8\u53EF\u76F4\u63A5\u4E0A\u4E0B\u9009\u62E9\n const first = menuRef.value && menuRef.value.querySelector('.djm-context-menu-item:not(:disabled)')\n if (first) first.focus()\n }\n\n function onSelect (item) {\n if (item.disabled || item.divider) return\n emit('select', item)\n close()\n }\n\n // \u4E0A\u4E0B\u65B9\u5411\u952E\u5728\u83DC\u5355\u9879\u4E4B\u95F4\u79FB\u52A8\uFF0CHome / End \u8DF3\u5230\u9996\u5C3E\n function onKeydown (event) {\n if (event.key === 'Escape') {\n event.stopPropagation()\n close()\n return\n }\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return\n event.preventDefault()\n const list = [...(menuRef.value ? menuRef.value.querySelectorAll('.djm-context-menu-item:not(:disabled)') : [])]\n if (!list.length) return\n const current = list.indexOf(document.activeElement)\n let next = 0\n if (event.key === 'End') next = list.length - 1\n else if (event.key === 'ArrowDown') next = current < 0 ? 0 : (current + 1) % list.length\n else if (event.key === 'ArrowUp') next = current < 0 ? list.length - 1 : (current - 1 + list.length) % list.length\n list[next].focus()\n }\n\n // \u89C6\u53E3\u6EDA\u52A8/\u7F29\u653E\u65F6\u76F4\u63A5\u5173\u95ED\u83DC\u5355\uFF0C\u4E0D\u505A\u8DDF\u968F\u5B9A\u4F4D\n let detach = null\n\n function bind () {\n detach = bindPanelListeners({\n root: () => null,\n panel: () => menuRef.value,\n onClose: close,\n onReposition: close\n })\n }\n\n function unbind () {\n if (detach) {\n detach()\n detach = null\n }\n }\n\n watch(\n () => props.modelValue,\n (open) => {\n if (open) {\n openAtCursor()\n bind()\n } else {\n unbind()\n }\n }\n )\n\n watch([() => props.x, () => props.y], () => {\n if (props.modelValue) openAtCursor()\n })\n\n onBeforeUnmount(unbind)\n\n return { menuRef, pos, close, onSelect, onKeydown, t }\n },\n template: `\n <Teleport to=\"body\">\n <Transition name=\"djm-context-menu\">\n <div\n v-if=\"modelValue\"\n ref=\"menuRef\"\n class=\"djm-context-menu\"\n role=\"menu\"\n :style=\"{ left: pos.left + 'px', top: pos.top + 'px' }\"\n @mousedown.stop\n @contextmenu.prevent\n @keydown=\"onKeydown\"\n >\n <p v-if=\"!items.length\" class=\"djm-context-menu-empty\">{{ t('contextMenu.empty') }}</p>\n <template v-for=\"(item, index) in items\" :key=\"index\">\n <div v-if=\"item.divider\" class=\"djm-context-menu-divider\" role=\"separator\"></div>\n <button\n v-else\n class=\"djm-context-menu-item\"\n type=\"button\"\n role=\"menuitem\"\n :class=\"{ 'djm-danger': item.danger }\"\n :disabled=\"item.disabled\"\n @click=\"onSelect(item)\"\n >\n <Icon :name=\"item.icon\" :size=\"14\" />\n <span class=\"djm-context-menu-label\">{{ item.label }}</span>\n </button>\n </template>\n </div>\n </Transition>\n </Teleport>\n `\n}\n", "import { ref, computed, onBeforeUnmount, watch } from 'vue'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\nimport { bindPanelListeners, PANEL_HIDDEN_STYLE } from '../../utils/panel.js'\n\nlet uidSeed = 0\n\nfunction pad (value) {\n return String(value).padStart(2, '0')\n}\n\nfunction toKey (year, month, day) {\n return `${year}-${pad(month + 1)}-${pad(day)}`\n}\n\nfunction parse (value) {\n if (!value) return null\n const parts = String(value).split('-').map(Number)\n if (parts.length !== 3 || parts.some((item) => !Number.isFinite(item))) return null\n return { year: parts[0], month: parts[1] - 1, day: parts[2] }\n}\n\n/**\n * \u65E5\u671F\u9009\u62E9\uFF1A\u5355\u65E5\u4E0E\u65E5\u671F\u8303\u56F4\u5171\u7528\u4E00\u5957\u9762\u677F\n * \u5355\u65E5\uFF1Av-model \u4E3A '2026-10-24'\n * \u8303\u56F4\uFF1Arange + v-model \u4E3A ['2026-10-01', '2026-10-24']\n */\nexport default {\n name: 'DjmDatePicker',\n components: { Icon },\n props: {\n modelValue: { type: [String, Array], default: '' },\n placeholder: { type: String, default: '' },\n min: { type: String, default: '' },\n max: { type: String, default: '' },\n clearable: { type: Boolean, default: true },\n disabled: { type: Boolean, default: false },\n // \u8303\u56F4\u6A21\u5F0F\uFF0C\u503C\u4E3A [start, end]\n range: { type: Boolean, default: false },\n // \u5FEB\u6377\u533A\u95F4\uFF1A[{ label: '\u8FD1 7 \u5929', value: ['2026-10-18','2026-10-24'] }]\uFF0Cvalue \u4E5F\u53EF\u4EE5\u662F\u51FD\u6570\n presets: { type: Array, default: () => [] },\n // \u81EA\u5B9A\u4E49\u7981\u7528\uFF1A\u8FD4\u56DE true \u7684\u65E5\u671F\u4E0D\u53EF\u9009\n disabledDate: { type: Function, default: null },\n // \u8303\u56F4\u6A21\u5F0F\u540C\u65F6\u663E\u793A\u51E0\u4E2A\u6708\uFF0C1 \u4E3A\u5355\u9762\u677F\n panels: { type: Number, default: 2 }\n },\n emits: ['update:modelValue', 'change', 'visible-change'],\n setup (props, { emit }) {\n const open = ref(false)\n watch(open, (value) => emit('visible-change', value))\n const root = ref(null)\n // \u9762\u677F\u6302\u5230 body\uFF0C\u907F\u514D\u88AB\u7236\u7EA7 overflow \u88C1\u526A\n const panel = ref(null)\n const panelId = 'djm-date-panel-' + (++uidSeed)\n // \u9996\u5E27\u5148\u9690\u85CF\uFF0C\u7B49\u7B97\u597D\u4F4D\u7F6E\u518D\u663E\u793A\uFF0C\u907F\u514D\u95EA\u4E00\u4E0B\n const panelStyle = ref({ ...PANEL_HIDDEN_STYLE })\n // \u6D6E\u5C42\u5168\u5C40\u76D1\u542C\u7684\u89E3\u7ED1\u53E5\u67C4\n let detachPanel = null\n const today = new Date()\n const todayKey = toKey(today.getFullYear(), today.getMonth(), today.getDate())\n\n // \u7EDF\u4E00\u6210\u6570\u7EC4\u5904\u7406\uFF0C\u5355\u9009\u957F\u5EA6\u4E3A 0 \u6216 1\n const values = computed(() => {\n if (props.range) return Array.isArray(props.modelValue) ? props.modelValue : []\n return props.modelValue ? [props.modelValue] : []\n })\n\n const displayText = computed(() => {\n if (!props.range) return values.value[0] || ''\n const [start, end] = values.value\n if (!start) return ''\n return end ? `${start} ~ ${end}` : `${start} ~ ${t('datePicker.rangeEnd')}`\n })\n\n const initial = parse(values.value[0])\n const viewYear = ref(initial ? initial.year : today.getFullYear())\n const viewMonth = ref(initial ? initial.month : today.getMonth())\n\n // \u8303\u56F4\u9009\u62E9\u4E2D\u7684\u4E34\u65F6\u8D77\u6B62\uFF0C\u7B2C\u4E8C\u6B21\u70B9\u51FB\u540E\u624D\u63D0\u4EA4\n const pendingStart = ref(values.value[0] || '')\n const pendingEnd = ref(values.value[1] || '')\n\n const placeholderText = computed(() => {\n if (props.placeholder) return props.placeholder\n return t(props.range ? 'datePicker.rangePlaceholder' : 'datePicker.placeholder')\n })\n const weeks = computed(() => t('datePicker.weeks').split(','))\n\n // \u7A84\u5C4F\u5E76\u6392\u4E24\u4E2A\u6708\u653E\u4E0D\u4E0B\uFF0C\u5F3A\u5236\u5355\u9762\u677F\n const narrow = ref(false)\n let media = null\n const onMediaChange = (event) => { narrow.value = event.matches }\n if (typeof window !== 'undefined' && window.matchMedia) {\n media = window.matchMedia('(max-width: 760px)')\n narrow.value = media.matches\n if (media.addEventListener) media.addEventListener('change', onMediaChange)\n else media.addListener(onMediaChange)\n }\n onBeforeUnmount(() => {\n if (!media) return\n if (media.removeEventListener) media.removeEventListener('change', onMediaChange)\n else media.removeListener(onMediaChange)\n })\n\n // \u8303\u56F4\u6A21\u5F0F\u9ED8\u8BA4\u5E76\u6392\u4E24\u4E2A\u6708\uFF0C\u53EF\u7528 panels \u4F20 1 \u9000\u56DE\u5355\u9762\u677F\n const panelCount = computed(() => (props.range ? Math.min(narrow.value ? 1 : 2, Math.max(1, props.panels)) : 1))\n // \u9009\u5B8C\u8D77\u70B9\u540E\uFF0C\u9F20\u6807\u79FB\u5230\u54EA\u5929\u5C31\u9884\u89C8\u5230\u54EA\u5929\n const hoverKey = ref('')\n\n const hoverRange = computed(() => {\n if (!props.range || !pendingStart.value || pendingEnd.value || !hoverKey.value) return null\n const a = pendingStart.value\n const b = hoverKey.value\n return a <= b ? [a, b] : [b, a]\n })\n\n function monthAt (offset) {\n const base = new Date(viewYear.value, viewMonth.value + offset, 1)\n return { year: base.getFullYear(), month: base.getMonth() }\n }\n\n function buildCells (year, month) {\n const first = new Date(year, month, 1)\n const offset = (first.getDay() + 6) % 7\n const start = new Date(year, month, 1 - offset)\n\n const startKey = props.range ? pendingStart.value : values.value[0]\n const endKey = props.range ? pendingEnd.value : ''\n // \u60AC\u505C\u9884\u89C8\u65F6\uFF0C\u628A\u8D77\u70B9\u5230\u9F20\u6807\u4F4D\u7F6E\u5F53\u4F5C\u4E34\u65F6\u533A\u95F4\n const hover = hoverRange.value\n const visualStart = hover ? hover[0] : (endKey ? startKey : '')\n const visualEnd = hover ? hover[1] : endKey\n\n return Array.from({ length: 42 }, (_, index) => {\n const date = new Date(start.getFullYear(), start.getMonth(), start.getDate() + index)\n const key = toKey(date.getFullYear(), date.getMonth(), date.getDate())\n return {\n key,\n day: date.getDate(),\n outside: date.getMonth() !== month,\n today: key === todayKey,\n selected: key === startKey || key === endKey || (visualEnd !== '' && (key === visualStart || key === visualEnd)),\n // \u533A\u95F4\u5185\uFF08\u4E0D\u542B\u9996\u5C3E\uFF09\n inRange: Boolean(visualStart && visualEnd && key > visualStart && key < visualEnd),\n edgeStart: Boolean(visualStart && visualEnd && key === visualStart),\n edgeEnd: Boolean(visualEnd && key === visualEnd),\n disabled: isDisabled(key)\n }\n })\n }\n\n const panels = computed(() =>\n Array.from({ length: panelCount.value }, (_, offset) => {\n const { year, month } = monthAt(offset)\n return {\n key: year * 100 + month,\n label: t('datePicker.title', { year, month: month + 1 }),\n cells: buildCells(year, month)\n }\n })\n )\n\n function isDisabled (key) {\n if (props.min && key < props.min) return true\n if (props.max && key > props.max) return true\n return typeof props.disabledDate === 'function' ? Boolean(props.disabledDate(key)) : false\n }\n\n // \u5FEB\u6377\u533A\u95F4\u53EA\u5BF9\u8303\u56F4\u6A21\u5F0F\u6709\u610F\u4E49\uFF1B\u7AEF\u70B9\u88AB\u7981\u7528\u65F6\u7F6E\u7070\uFF0C\u907F\u514D\u9009\u51FA\u975E\u6CD5\u533A\u95F4\n const presetList = computed(() => {\n if (!props.range) return []\n return (props.presets || []).map((preset) => {\n const value = typeof preset.value === 'function' ? preset.value() : preset.value\n const valid = Array.isArray(value) && value.length === 2 && value.every((key) => !isDisabled(key))\n return { ...preset, value, invalid: !valid }\n })\n })\n\n function commit (value) {\n emit('update:modelValue', value)\n emit('change', value)\n }\n\n function syncView () {\n const current = parse(values.value[0])\n if (current) {\n viewYear.value = current.year\n viewMonth.value = current.month\n }\n }\n\n function openPanel () {\n if (props.disabled) return\n syncView()\n pendingStart.value = values.value[0] || ''\n pendingEnd.value = values.value[1] || ''\n hoverKey.value = ''\n open.value = true\n // \u6D6E\u5C42\u5168\u5C40\u76D1\u542C\uFF1A\u5916\u90E8\u70B9\u51FB / Esc \u5173\u95ED\uFF0Cresize / scroll \u91CD\u5B9A\u4F4D\n detachPanel = bindPanelListeners({\n root: () => root.value,\n panel: () => panel.value,\n onClose: closePanel,\n onReposition: updatePosition\n })\n // \u7B49\u9762\u677F\u6E32\u67D3\u540E\u518D\u6309\u5B9E\u9645\u9AD8\u5EA6\u51B3\u5B9A\u5411\u4E0A\u8FD8\u662F\u5411\u4E0B\n requestAnimationFrame(updatePosition)\n }\n\n // \u4E0B\u65B9\u653E\u4E0D\u4E0B\u5C31\u5411\u4E0A\u7FFB\uFF0C\u518D\u6574\u4F53\u6536\u8FDB\u89C6\u53E3\uFF0C\u907F\u514D\u9762\u677F\u88AB\u5207\u6389\n function updatePosition () {\n if (!open.value || !root.value) return\n const rect = root.value.getBoundingClientRect()\n const height = panel.value ? panel.value.offsetHeight : 320\n const width = panel.value ? panel.value.offsetWidth : 300\n const left = Math.max(8, Math.min(rect.left, window.innerWidth - width - 8))\n const spaceBelow = window.innerHeight - rect.bottom - 8\n let top = spaceBelow >= height ? rect.bottom + 4 : rect.top - height - 4\n top = Math.max(8, Math.min(top, window.innerHeight - height - 8))\n panelStyle.value = { position: 'fixed', visibility: 'visible', left: left + 'px', top: top + 'px', bottom: 'auto' }\n }\n\n function closePanel () {\n open.value = false\n hoverKey.value = ''\n panelStyle.value = { ...PANEL_HIDDEN_STYLE }\n if (detachPanel) {\n detachPanel()\n detachPanel = null\n }\n }\n\n function toggle () {\n if (open.value) closePanel()\n else openPanel()\n }\n\n function prevMonth () {\n if (viewMonth.value === 0) {\n viewMonth.value = 11\n viewYear.value -= 1\n } else {\n viewMonth.value -= 1\n }\n }\n\n function nextMonth () {\n if (viewMonth.value === 11) {\n viewMonth.value = 0\n viewYear.value += 1\n } else {\n viewMonth.value += 1\n }\n }\n\n function prevYear () {\n viewYear.value -= 1\n }\n\n function nextYear () {\n viewYear.value += 1\n }\n\n function pick (cell) {\n if (cell.disabled) return\n\n if (!props.range) {\n commit(cell.key)\n closePanel()\n return\n }\n\n // \u5DF2\u7ECF\u9009\u8FC7\u4E00\u7AEF\u7684\u533A\u95F4\uFF0C\u518D\u70B9\u5373\u91CD\u65B0\u5F00\u59CB\n if (!pendingStart.value || pendingEnd.value) {\n pendingStart.value = cell.key\n pendingEnd.value = ''\n hoverKey.value = ''\n return\n }\n\n let start = pendingStart.value\n let end = cell.key\n if (end < start) {\n const swap = start\n start = end\n end = swap\n }\n pendingStart.value = start\n pendingEnd.value = end\n commit([start, end])\n closePanel()\n }\n\n function pickToday () {\n if (isDisabled(todayKey)) return\n if (props.range) {\n commit([todayKey, todayKey])\n } else {\n commit(todayKey)\n }\n closePanel()\n }\n\n // \u5FEB\u6377\u533A\u95F4\uFF1A\u503C\u53EF\u4EE5\u662F\u6570\u7EC4\uFF0C\u4E5F\u53EF\u4EE5\u662F\u8FD4\u56DE\u6570\u7EC4\u7684\u51FD\u6570\uFF08\u4FBF\u4E8E\u300C\u8FD1 7 \u5929\u300D\uFF09\n function pickPreset (preset) {\n if (preset.invalid) return\n const value = preset.value\n pendingStart.value = value[0]\n pendingEnd.value = value[1]\n commit([value[0], value[1]])\n closePanel()\n }\n\n function clear () {\n commit(props.range ? [] : '')\n pendingStart.value = ''\n pendingEnd.value = ''\n closePanel()\n }\n\n onBeforeUnmount(() => {\n if (detachPanel) {\n detachPanel()\n detachPanel = null\n }\n })\n\n return {\n open,\n root,\n panel,\n panelId,\n panelStyle,\n viewYear,\n viewMonth,\n placeholderText,\n weeks,\n t,\n panels,\n panelCount,\n hoverKey,\n presetList,\n displayText,\n values,\n toggle,\n closePanel,\n prevMonth,\n nextMonth,\n prevYear,\n nextYear,\n pick,\n pickToday,\n pickPreset,\n clear\n }\n },\n template: `\n <div class=\"djm-date-picker\" ref=\"root\" :class=\"{ 'djm-is-disabled': disabled }\">\n <button\n class=\"djm-input djm-date-trigger\"\n type=\"button\"\n :disabled=\"disabled\"\n aria-haspopup=\"dialog\"\n :aria-expanded=\"open\"\n :aria-controls=\"panelId\"\n @click=\"toggle\"\n >\n <Icon name=\"calendar\" :size=\"14\" />\n <span :class=\"{ 'djm-date-placeholder': !displayText }\">{{ displayText || placeholderText }}</span>\n <Icon name=\"chevron-down\" :size=\"12\" class=\"djm-date-caret\" />\n </button>\n\n <Teleport to=\"body\">\n <Transition name=\"djm-pop\">\n <div class=\"djm-date-picker-panel\" :id=\"panelId\" ref=\"panel\" :style=\"panelStyle\" v-if=\"open\" role=\"dialog\">\n <!-- \u5FEB\u6377\u533A\u95F4\uFF1A\u53EA\u5728\u8303\u56F4\u6A21\u5F0F\u4E0B\u51FA\u73B0 -->\n <div v-if=\"presetList.length\" class=\"djm-date-presets\">\n <button\n v-for=\"preset in presetList\"\n :key=\"preset.label\"\n class=\"djm-date-preset\"\n type=\"button\"\n :disabled=\"preset.invalid\"\n @click=\"pickPreset(preset)\"\n >{{ preset.label }}</button>\n </div>\n\n <div class=\"djm-date-picker-content\">\n <div class=\"djm-date-picker-panels\">\n <div class=\"djm-date-picker-main\" v-for=\"(item, index) in panels\" :key=\"item.key\">\n <div class=\"djm-date-picker-head\">\n <div class=\"djm-date-picker-navs\">\n <template v-if=\"index === 0\">\n <button class=\"djm-date-picker-nav\" type=\"button\" title=\"\u4E0A\u4E00\u5E74\" @click=\"prevYear\">\n <Icon name=\"chevrons-left\" :size=\"13\" />\n </button>\n <button class=\"djm-date-picker-nav\" type=\"button\" title=\"\u4E0A\u4E2A\u6708\" @click=\"prevMonth\">\n <Icon name=\"chevron-left\" :size=\"13\" />\n </button>\n </template>\n </div>\n <span class=\"djm-date-picker-title\">{{ item.label }}</span>\n <div class=\"djm-date-picker-navs djm-date-picker-navs-end\">\n <template v-if=\"index === panels.length - 1\">\n <button class=\"djm-date-picker-nav\" type=\"button\" title=\"\u4E0B\u4E2A\u6708\" @click=\"nextMonth\">\n <Icon name=\"chevron-right\" :size=\"13\" />\n </button>\n <button class=\"djm-date-picker-nav\" type=\"button\" title=\"\u4E0B\u4E00\u5E74\" @click=\"nextYear\">\n <Icon name=\"chevrons-right\" :size=\"13\" />\n </button>\n </template>\n </div>\n </div>\n\n <div class=\"djm-date-picker-grid\" @mouseleave=\"hoverKey = ''\">\n <span v-for=\"week in weeks\" :key=\"week\" class=\"djm-date-picker-week\">{{ week }}</span>\n <button\n v-for=\"cell in item.cells\"\n :key=\"cell.key\"\n class=\"djm-date-picker-day\"\n type=\"button\"\n :class=\"{\n 'djm-is-outside': cell.outside,\n 'djm-is-today': cell.today,\n 'djm-is-selected': cell.selected,\n 'djm-is-in-range': cell.inRange,\n 'djm-is-range-start': cell.edgeStart,\n 'djm-is-range-end': cell.edgeEnd\n }\"\n :disabled=\"cell.disabled\"\n @mouseenter=\"hoverKey = cell.key\"\n @click=\"pick(cell)\"\n >{{ cell.day }}</button>\n </div>\n </div>\n </div>\n\n <div class=\"djm-date-picker-foot\">\n <button class=\"djm-link-btn\" type=\"button\" @click=\"pickToday\">{{ t('datePicker.today') }}</button>\n <button v-if=\"clearable\" class=\"djm-link-btn djm-danger\" type=\"button\" @click=\"clear\">{{ t('datePicker.clear') }}</button>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n </div>\n `\n}\n", "import { ref, computed, nextTick, onBeforeUnmount, watch } from 'vue'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\nimport { bindPanelListeners, shouldFlipUp, dropdownPanelStyle, PANEL_HIDDEN_STYLE } from '../../utils/panel.js'\n\nfunction collectLeaves (node, keyOf, out = []) {\n if (node.children && node.children.length) {\n node.children.forEach((child) => collectLeaves(child, keyOf, out))\n } else {\n out.push(keyOf(node))\n }\n return out\n}\n\nfunction collectNodes (nodes, out = []) {\n nodes.forEach((node) => {\n out.push(node)\n if (node.children && node.children.length) collectNodes(node.children, out)\n })\n return out\n}\n\nexport default {\n name: 'DjmTreeSelect',\n components: { Icon },\n props: {\n modelValue: { type: Array, default: () => [] },\n options: { type: Array, default: () => [] },\n // \u8282\u70B9\u7684\u552F\u4E00\u952E\u4E0E\u663E\u793A\u5B57\u6BB5\uFF0C\u65B9\u4FBF\u76F4\u63A5\u4F7F\u7528\u540E\u7AEF\u8FD4\u56DE\u7684\u7ED3\u6784\n nodeKey: { type: String, default: 'id' },\n labelKey: { type: String, default: 'label' },\n placeholder: { type: String, default: '' },\n searchPlaceholder: { type: String, default: '' },\n disabled: { type: Boolean, default: false },\n clearable: { type: Boolean, default: false },\n // \u89E6\u53D1\u5668\u4E0A\u6700\u591A\u663E\u793A\u51E0\u4E2A\u6807\u7B7E\n maxTagCount: { type: Number, default: 2 },\n // \u662F\u5426\u663E\u793A\u53F3\u4FA7\u786E\u8BA4 / \u53D6\u6D88\u6309\u94AE\n showFooter: { type: Boolean, default: true }\n },\n emits: ['update:modelValue', 'change', 'visible-change'],\n setup (props, { emit }) {\n const open = ref(false)\n const root = ref(null)\n const panel = ref(null)\n const searchInput = ref(null)\n const search = ref('')\n const temp = ref([])\n // \u9762\u677F\u7528 fixed \u5B9A\u4F4D\uFF0C\u907F\u514D\u88AB\u5361\u7247\u3001\u8868\u683C\u7B49 overflow \u5BB9\u5668\u88C1\u526A\n const panelStyle = ref({ ...PANEL_HIDDEN_STYLE })\n // \u6D6E\u5C42\u5168\u5C40\u76D1\u542C\u7684\u89E3\u7ED1\u53E5\u67C4\n let detachPanel = null\n\n function keyOf (node) {\n return node ? node[props.nodeKey] : undefined\n }\n\n function labelOf (node) {\n const value = node ? node[props.labelKey] : ''\n return value === null || value === undefined ? '' : String(value)\n }\n\n const expandedIds = ref(\n new Set(\n collectNodes(props.options)\n .filter((node) => node.children && node.children.length)\n .map((node) => keyOf(node))\n )\n )\n\n const nodeMap = computed(() => {\n const map = new Map()\n collectNodes(props.options).forEach((node) => map.set(keyOf(node), node))\n return map\n })\n\n // \u9009\u9879\u5F02\u6B65\u5230\u8FBE\u65F6\u8865\u4E00\u6B21\u9ED8\u8BA4\u5C55\u5F00\uFF0C\u7528\u6237\u624B\u52A8\u6536\u8D77\u8FC7\u5C31\u4E0D\u518D\u8986\u76D6\n watch(() => props.options, (options) => {\n if (!options || !options.length || expandedIds.value.size) return\n expandedIds.value = new Set(\n collectNodes(options)\n .filter((node) => node.children && node.children.length)\n .map((node) => keyOf(node))\n )\n })\n\n // \u89E6\u53D1\u5668\u4E0A\u7684\u6807\u7B7E\u53EA\u9700\u8981 key \u4E0E\u6587\u6848\n const selectedNodes = computed(() =>\n props.modelValue\n .map((id) => nodeMap.value.get(id))\n .filter(Boolean)\n .map((node) => ({ key: keyOf(node), label: labelOf(node) }))\n )\n\n const searchState = computed(() => {\n const text = search.value.trim().toLowerCase()\n if (!text) return null\n\n const visible = new Set()\n const walk = (nodes) => {\n let matched = false\n nodes.forEach((node) => {\n const childMatched = node.children && node.children.length ? walk(node.children) : false\n const selfMatched = labelOf(node).toLowerCase().includes(text)\n if (selfMatched || childMatched) {\n visible.add(keyOf(node))\n matched = true\n }\n })\n return matched\n }\n walk(props.options)\n return visible\n })\n\n const rows = computed(() => {\n const result = []\n const walk = (nodes, depth) => {\n nodes.forEach((node) => {\n if (searchState.value && !searchState.value.has(keyOf(node))) return\n result.push({ node, depth, key: keyOf(node), label: labelOf(node) })\n const hasChildren = node.children && node.children.length\n const expanded = searchState.value ? true : expandedIds.value.has(keyOf(node))\n if (hasChildren && expanded) walk(node.children, depth + 1)\n })\n }\n walk(props.options, 0)\n return result\n })\n\n function hasChildren (node) {\n return Boolean(node.children && node.children.length)\n }\n\n function isExpanded (node) {\n if (searchState.value) return true\n return expandedIds.value.has(keyOf(node))\n }\n\n function isChecked (node) {\n const leaves = selectableLeaves(node)\n return leaves.length > 0 && leaves.every((id) => temp.value.includes(id))\n }\n\n function isIndeterminate (node) {\n const leaves = selectableLeaves(node)\n const count = leaves.filter((id) => temp.value.includes(id)).length\n return count > 0 && count < leaves.length\n }\n\n // \u7981\u7528\u8282\u70B9\u81EA\u8EAB\u53CA\u5176\u5B50\u6811\u4E0D\u53C2\u4E0E\u52FE\u9009\n function selectableLeaves (node) {\n return collectLeaves(node, keyOf).filter((id) => {\n const item = nodeMap.value.get(id)\n return item && !item.disabled\n })\n }\n\n function toggleNode (node) {\n if (node.disabled) return\n const leaves = selectableLeaves(node)\n if (!leaves.length) return\n const checked = leaves.every((id) => temp.value.includes(id))\n if (checked) {\n temp.value = temp.value.filter((id) => !leaves.includes(id))\n } else {\n temp.value = [...new Set([...temp.value, ...leaves])]\n }\n // \u4E0D\u663E\u793A\u5E95\u90E8\u6309\u94AE\u65F6\uFF0C\u52FE\u9009\u5373\u751F\u6548\n if (!props.showFooter) {\n emit('update:modelValue', [...temp.value])\n emit('change', [...temp.value])\n }\n }\n\n function toggleExpand (node) {\n if (!hasChildren(node)) return\n const key = keyOf(node)\n const next = new Set(expandedIds.value)\n if (next.has(key)) next.delete(key)\n else next.add(key)\n expandedIds.value = next\n }\n\n function onRowClick (node) {\n if (hasChildren(node)) toggleExpand(node)\n else toggleNode(node)\n }\n\n function openPanel () {\n if (open.value || props.disabled) return\n temp.value = [...props.modelValue]\n search.value = ''\n open.value = true\n emit('visible-change', true)\n detachPanel = bindPanelListeners({\n root: () => root.value,\n panel: () => panel.value,\n onClose: closePanel,\n onReposition: updatePosition\n })\n nextTick(() => {\n updatePosition()\n if (searchInput.value) searchInput.value.focus()\n })\n }\n\n // \u9762\u677F\u4F4D\u7F6E\uFF1A\u9ED8\u8BA4\u8D34\u5728\u89E6\u53D1\u5668\u4E0B\u65B9\uFF0C\u7A7A\u95F4\u4E0D\u8DB3\u5411\u4E0A\u5C55\u5F00\uFF0C\u5DE6\u53F3\u6536\u8FDB\u89C6\u53E3\n function updatePosition () {\n if (!open.value || !root.value) return\n const rect = root.value.getBoundingClientRect()\n const height = panel.value ? panel.value.offsetHeight : 320\n const width = Math.min(300, window.innerWidth - 16)\n panelStyle.value = dropdownPanelStyle({\n rect,\n flip: shouldFlipUp(rect, height),\n gap: 4,\n width,\n clampWidth: width\n })\n }\n\n function closePanel () {\n if (!open.value) return\n open.value = false\n panelStyle.value = { ...PANEL_HIDDEN_STYLE }\n emit('visible-change', false)\n if (detachPanel) {\n detachPanel()\n detachPanel = null\n }\n }\n\n function toggle () {\n if (props.disabled) return\n if (open.value) closePanel()\n else openPanel()\n }\n\n function confirm () {\n emit('update:modelValue', [...temp.value])\n emit('change', [...temp.value])\n closePanel()\n }\n\n function cancel () {\n closePanel()\n }\n\n function clearTemp () {\n temp.value = []\n }\n\n function removeTag (id) {\n const next = props.modelValue.filter((item) => item !== id)\n emit('update:modelValue', next)\n emit('change', next)\n temp.value = temp.value.filter((item) => item !== id)\n }\n\n // \u4E00\u952E\u6E05\u7A7A\u5DF2\u9009\n function clearAll () {\n if (props.disabled) return\n emit('update:modelValue', [])\n emit('change', [])\n temp.value = []\n }\n\n onBeforeUnmount(() => {\n if (detachPanel) {\n detachPanel()\n detachPanel = null\n }\n })\n\n return {\n open,\n root,\n panel,\n panelStyle,\n searchInput,\n search,\n temp,\n rows,\n selectedNodes,\n hasChildren,\n isExpanded,\n isChecked,\n isIndeterminate,\n toggleNode,\n onRowClick,\n toggle,\n confirm,\n cancel,\n clearTemp,\n clearAll,\n removeTag,\n t\n }\n },\n template: `\n <div class=\"djm-tree-select\" :class=\"{ 'djm-is-disabled': disabled }\" ref=\"root\">\n <div\n class=\"djm-tree-select-trigger djm-input\"\n :class=\"{ 'djm-is-open': open }\"\n role=\"combobox\"\n :tabindex=\"disabled ? -1 : 0\"\n :aria-expanded=\"open\"\n aria-haspopup=\"tree\"\n :aria-label=\"placeholder || t('treeSelect.placeholder')\"\n :aria-disabled=\"disabled || undefined\"\n @click=\"toggle\"\n @keydown.enter.prevent=\"toggle\"\n @keydown.space.prevent=\"toggle\"\n >\n <template v-if=\"selectedNodes.length\">\n <span v-for=\"node in selectedNodes.slice(0, maxTagCount)\" :key=\"node.key\" class=\"djm-tree-select-tag\">\n {{ node.label }}\n <button\n v-if=\"!disabled\"\n class=\"djm-tree-select-tag-close\"\n type=\"button\"\n :aria-label=\"t('treeSelect.remove', { label: node.label })\"\n @click.stop=\"removeTag(node.key)\"\n >\u00D7</button>\n </span>\n <span v-if=\"selectedNodes.length > maxTagCount\" class=\"djm-tree-select-more\">+{{ selectedNodes.length - maxTagCount }}</span>\n </template>\n <span v-else class=\"djm-date-placeholder\">{{ placeholder || t('treeSelect.placeholder') }}</span>\n <button\n v-if=\"clearable && selectedNodes.length && !disabled\"\n class=\"djm-tree-select-clear-btn\"\n type=\"button\"\n :title=\"t('treeSelect.clear')\"\n @click.stop=\"clearAll\"\n >\n <Icon name=\"x\" :size=\"11\" />\n </button>\n <Icon v-else name=\"chevron-down\" :size=\"12\" class=\"djm-tree-select-caret\" />\n </div>\n\n <Transition name=\"djm-pop\">\n <div class=\"djm-tree-select-panel\" ref=\"panel\" :style=\"panelStyle\" v-if=\"open\">\n <div class=\"djm-tree-select-search\">\n <Icon name=\"search\" :size=\"13\" />\n <input\n ref=\"searchInput\"\n v-model=\"search\"\n autocomplete=\"off\"\n :placeholder=\"searchPlaceholder || t('treeSelect.search')\"\n :aria-label=\"searchPlaceholder || t('treeSelect.search')\"\n />\n <button v-if=\"search\" class=\"djm-tree-select-clear\" type=\"button\" :aria-label=\"t('treeSelect.clearSearch')\" @click=\"search = ''\">\n <Icon name=\"x\" :size=\"11\" />\n </button>\n </div>\n\n <div class=\"djm-tree-select-body\">\n <div\n v-for=\"row in rows\"\n :key=\"row.key\"\n class=\"djm-tree-select-row\"\n :class=\"{ 'djm-is-disabled': row.node.disabled }\"\n :style=\"{ paddingLeft: (8 + row.depth * 14) + 'px' }\"\n @click=\"onRowClick(row.node)\"\n >\n <button\n v-if=\"hasChildren(row.node)\"\n class=\"djm-tree-select-arrow\"\n type=\"button\"\n :aria-label=\"isExpanded(row.node) ? t('treeSelect.collapse') : t('treeSelect.expand')\"\n @click.stop=\"toggleExpand(row.node)\"\n >\n <Icon :name=\"isExpanded(row.node) ? 'chevron-down' : 'chevron-right'\" :size=\"11\" />\n </button>\n <span v-else class=\"djm-tree-select-arrow-placeholder\"></span>\n\n <input\n type=\"checkbox\"\n :checked=\"isChecked(row.node)\"\n :indeterminate=\"isIndeterminate(row.node)\"\n :disabled=\"row.node.disabled\"\n @click.stop\n @change=\"toggleNode(row.node)\"\n />\n\n <Icon :name=\"hasChildren(row.node) ? 'folder' : 'file'\" :size=\"13\" class=\"djm-tree-select-icon\" />\n <span class=\"djm-tree-select-label\">{{ row.label }}</span>\n </div>\n\n <div v-if=\"!rows.length\" class=\"djm-tree-select-empty\">{{ t('treeSelect.empty') }}</div>\n </div>\n\n <div class=\"djm-tree-select-foot\" v-if=\"showFooter\">\n <span>{{ t('common.selected', { count: temp.length }) }}</span>\n <div class=\"djm-tree-select-foot-actions\">\n <button class=\"djm-link-btn\" type=\"button\" @click=\"clearTemp\">{{ t('treeSelect.clear') }}</button>\n <button class=\"djm-btn djm-btn-sm\" type=\"button\" @click=\"cancel\">{{ t('common.cancel') }}</button>\n <button class=\"djm-btn djm-btn-sm djm-btn-primary\" type=\"button\" @click=\"confirm\">{{ t('common.confirm') }}</button>\n </div>\n </div>\n </div>\n </Transition>\n </div>\n `\n}\n", "import { ref, watch, onMounted, onBeforeUnmount } from 'vue'\nimport Icon from '../icon/index.js'\nimport { sanitizeHtml } from '../../utils/sanitize-html.js'\nimport { t } from '../../locale/index.js'\n\nexport default {\n name: 'DjmRichEditor',\n components: { Icon },\n props: {\n modelValue: { type: String, default: '' },\n placeholder: { type: String, default: '' },\n minHeight: { type: Number, default: 200 },\n // \u5F00\u542F\u540E\u5BF9\u5916\u8F93\u51FA\u7684 HTML \u4F1A\u8D70\u767D\u540D\u5355\u6E05\u6D17\n sanitize: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false }\n },\n emits: ['update:modelValue'],\n setup (props, { emit }) {\n const editor = ref(null)\n const sourceMode = ref(false)\n const source = ref(props.modelValue)\n // \u5DE5\u5177\u680F\u7684\u6309\u4E0B\u6001\u8DDF\u968F\u5F53\u524D\u9009\u533A\n const formats = ref({ bold: false, italic: false, underline: false, strike: false })\n\n function clean (html) {\n return props.sanitize ? sanitizeHtml(html) : html\n }\n\n function syncFromDom () {\n if (!editor.value) return\n emit('update:modelValue', clean(editor.value.innerHTML))\n }\n\n // \u7C98\u8D34\u8FDB\u6765\u7684\u5916\u90E8 HTML \u4E00\u5F8B\u6E05\u6D17\uFF0C\u907F\u514D\u5E26\u5165\u811A\u672C\u6216\u4E8B\u4EF6\u5C5E\u6027\n function onPaste (event) {\n const data = event.clipboardData\n const html = data && data.getData('text/html')\n if (!html) return\n event.preventDefault()\n document.execCommand('insertHTML', false, sanitizeHtml(html))\n syncFromDom()\n }\n\n function exec (command, value = null) {\n if (props.disabled || sourceMode.value) return\n document.execCommand(command, false, value)\n if (editor.value) editor.value.focus()\n syncFromDom()\n syncFormats()\n }\n\n function formatBlock (tag) {\n exec('formatBlock', tag)\n }\n\n function addLink () {\n const url = window.prompt(t('richEditor.linkPrompt'), 'https://')\n if (url) exec('createLink', url)\n }\n\n function syncFormats () {\n if (props.disabled || sourceMode.value) return\n // \u5149\u6807\u4E0D\u5728\u7F16\u8F91\u5668\u91CC\u5C31\u4E0D\u6539\u5DE5\u5177\u680F\u72B6\u6001\n if (!editor.value || !editor.value.contains(document.activeElement)) return\n formats.value = {\n bold: document.queryCommandState('bold'),\n italic: document.queryCommandState('italic'),\n underline: document.queryCommandState('underline'),\n strike: document.queryCommandState('strikeThrough')\n }\n }\n\n function onSourceInput () {\n emit('update:modelValue', clean(source.value))\n }\n\n function toggleSource () {\n if (props.disabled) return\n if (sourceMode.value) {\n emit('update:modelValue', clean(source.value))\n sourceMode.value = false\n requestAnimationFrame(() => {\n if (editor.value) editor.value.innerHTML = clean(source.value)\n })\n } else {\n source.value = editor.value ? editor.value.innerHTML : props.modelValue\n sourceMode.value = true\n }\n }\n\n watch(\n () => props.modelValue,\n (value) => {\n if (sourceMode.value) {\n source.value = value\n return\n }\n const next = clean(value)\n if (editor.value && editor.value.innerHTML !== next) editor.value.innerHTML = next\n }\n )\n\n onMounted(() => {\n if (editor.value) editor.value.innerHTML = clean(props.modelValue)\n document.addEventListener('selectionchange', syncFormats)\n })\n\n onBeforeUnmount(() => document.removeEventListener('selectionchange', syncFormats))\n\n return {\n editor,\n sourceMode,\n source,\n formats,\n exec,\n formatBlock,\n addLink,\n onSourceInput,\n onPaste,\n toggleSource,\n syncFromDom,\n syncFormats,\n t\n }\n },\n template: `\n <div class=\"djm-rich-editor\" :class=\"{ 'djm-is-disabled': disabled }\">\n <div class=\"djm-rich-editor-toolbar\">\n <div class=\"djm-rich-editor-group\">\n <button\n class=\"djm-rich-editor-btn djm-rich-editor-btn-bold\"\n type=\"button\"\n :title=\"t('richEditor.bold')\"\n :aria-label=\"t('richEditor.bold')\"\n :aria-pressed=\"String(formats.bold)\"\n :disabled=\"disabled\"\n @mousedown.prevent\n @click=\"exec('bold')\"\n >B</button>\n <button\n class=\"djm-rich-editor-btn djm-rich-editor-btn-italic\"\n type=\"button\"\n :title=\"t('richEditor.italic')\"\n :aria-label=\"t('richEditor.italic')\"\n :aria-pressed=\"String(formats.italic)\"\n :disabled=\"disabled\"\n @mousedown.prevent\n @click=\"exec('italic')\"\n >I</button>\n <button\n class=\"djm-rich-editor-btn djm-rich-editor-btn-underline\"\n type=\"button\"\n :title=\"t('richEditor.underline')\"\n :aria-label=\"t('richEditor.underline')\"\n :aria-pressed=\"String(formats.underline)\"\n :disabled=\"disabled\"\n @mousedown.prevent\n @click=\"exec('underline')\"\n >U</button>\n <button\n class=\"djm-rich-editor-btn djm-rich-editor-btn-strike\"\n type=\"button\"\n :title=\"t('richEditor.strike')\"\n :aria-label=\"t('richEditor.strike')\"\n :aria-pressed=\"String(formats.strike)\"\n :disabled=\"disabled\"\n @mousedown.prevent\n @click=\"exec('strikeThrough')\"\n >S</button>\n </div>\n\n <div class=\"djm-rich-editor-group\">\n <button class=\"djm-rich-editor-btn\" type=\"button\" :title=\"t('richEditor.heading')\" :disabled=\"disabled\" @mousedown.prevent @click=\"formatBlock('h2')\">H2</button>\n <button class=\"djm-rich-editor-btn\" type=\"button\" :title=\"t('richEditor.paragraph')\" :disabled=\"disabled\" @mousedown.prevent @click=\"formatBlock('p')\">{{ t('richEditor.paragraph') }}</button>\n </div>\n\n <div class=\"djm-rich-editor-group\">\n <button class=\"djm-rich-editor-btn\" type=\"button\" :title=\"t('richEditor.bulletList')\" :disabled=\"disabled\" @mousedown.prevent @click=\"exec('insertUnorderedList')\">\n <span class=\"djm-rich-editor-glyph\">\u2022 \u2261</span>\n </button>\n <button class=\"djm-rich-editor-btn\" type=\"button\" :title=\"t('richEditor.numberList')\" :disabled=\"disabled\" @mousedown.prevent @click=\"exec('insertOrderedList')\">\n <span class=\"djm-rich-editor-glyph\">1. \u2261</span>\n </button>\n <button class=\"djm-rich-editor-btn\" type=\"button\" :title=\"t('richEditor.link')\" :aria-label=\"t('richEditor.link')\" :disabled=\"disabled\" @mousedown.prevent @click=\"addLink\">\n <Icon name=\"link\" :size=\"13\" />\n </button>\n </div>\n\n <div class=\"djm-rich-editor-group\">\n <button class=\"djm-rich-editor-btn\" type=\"button\" :title=\"t('richEditor.clearFormat')\" :disabled=\"disabled\" @mousedown.prevent @click=\"exec('removeFormat')\">{{ t('richEditor.clearFormat') }}</button>\n <button class=\"djm-rich-editor-btn\" type=\"button\" :title=\"t('richEditor.undo')\" :aria-label=\"t('richEditor.undo')\" :disabled=\"disabled\" @mousedown.prevent @click=\"exec('undo')\">\u21B6</button>\n <button class=\"djm-rich-editor-btn\" type=\"button\" :title=\"t('richEditor.redo')\" :aria-label=\"t('richEditor.redo')\" :disabled=\"disabled\" @mousedown.prevent @click=\"exec('redo')\">\u21B7</button>\n </div>\n\n <div class=\"djm-rich-editor-spacer\"></div>\n <button\n class=\"djm-rich-editor-btn\"\n :class=\"{ 'djm-is-active': sourceMode }\"\n type=\"button\"\n :aria-pressed=\"String(sourceMode)\"\n :disabled=\"disabled\"\n @click=\"toggleSource\"\n >\n <Icon name=\"code\" :size=\"13\" />{{ sourceMode ? t('richEditor.visual') : t('richEditor.source') }}\n </button>\n </div>\n\n <div\n v-show=\"!sourceMode\"\n ref=\"editor\"\n class=\"djm-rich-editor-content\"\n role=\"textbox\"\n aria-multiline=\"true\"\n :aria-label=\"t('richEditor.aria')\"\n :aria-disabled=\"disabled ? 'true' : undefined\"\n :contenteditable=\"disabled ? 'false' : 'true'\"\n :data-placeholder=\"placeholder || t('richEditor.placeholder')\"\n :style=\"{ minHeight: minHeight + 'px' }\"\n @input=\"syncFromDom\"\n @paste=\"onPaste\"\n ></div>\n\n <textarea\n v-show=\"sourceMode\"\n v-model=\"source\"\n class=\"djm-rich-editor-source\"\n :style=\"{ minHeight: minHeight + 'px' }\"\n :disabled=\"disabled\"\n :aria-label=\"t('richEditor.source')\"\n spellcheck=\"false\"\n @input=\"onSourceInput\"\n ></textarea>\n </div>\n `\n}\n", "/**\n * HTML \u767D\u540D\u5355\u6E05\u6D17\uFF1A\u5BCC\u6587\u672C\u9884\u89C8\u3001v-html \u6E32\u67D3\u524D\u8FC7\u6EE4\u811A\u672C\u7C7B\u5185\u5BB9\n *\n * \u53EA\u4FDD\u7559\u6392\u7248\u7C7B\u6807\u7B7E\u4E0E\u5B89\u5168\u5C5E\u6027\uFF1A\n * - \u79FB\u9664 script / style / iframe / object / embed / form \u7B49\u53EF\u6267\u884C\u6216\u53EF\u63D0\u4EA4\u8282\u70B9\n * - \u79FB\u9664 on* \u4E8B\u4EF6\u5C5E\u6027\u3001javascript: / vbscript: \u534F\u8BAE\uFF1Bdata: \u4EC5\u653E\u884C\u56FE\u7247\n * - \u5916\u94FE\u8865 rel=\"noopener noreferrer\"\n */\n\n// \u5141\u8BB8\u7684\u6807\u7B7E\nconst TAGS = new Set([\n 'p', 'br', 'div', 'span', 'strong', 'b', 'em', 'i', 'u', 's', 'del', 'sub', 'sup',\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n 'ul', 'ol', 'li', 'blockquote', 'pre', 'code', 'hr',\n 'a', 'img',\n 'table', 'thead', 'tbody', 'tfoot', 'tr', 'th', 'td'\n])\n\n// \u901A\u7528\u5C5E\u6027\nconst GLOBAL_ATTRS = new Set(['class', 'title'])\n\n// \u5404\u6807\u7B7E\u989D\u5916\u5141\u8BB8\u7684\u5C5E\u6027\nconst TAG_ATTRS = {\n a: new Set(['href', 'target', 'rel']),\n img: new Set(['src', 'alt', 'width', 'height']),\n ol: new Set(['start']),\n th: new Set(['colspan', 'rowspan', 'scope']),\n td: new Set(['colspan', 'rowspan'])\n}\n\nfunction safeUrl (value, tag) {\n // \u6D4F\u89C8\u5668\u89E3\u6790 URL \u65F6\u4F1A\u5FFD\u7565\u6362\u884C\u3001\u5236\u8868\u7B26\u7B49\u63A7\u5236\u5B57\u7B26\uFF0C\u5148\u53BB\u6389\u518D\u5224\u65AD\u534F\u8BAE\n const url = String(value || '').replace(/[\\u0000-\\u0020]+/g, '').toLowerCase()\n if (url.startsWith('javascript:') || url.startsWith('vbscript:')) return false\n // data: \u53EA\u5141\u8BB8\u56FE\u7247\uFF0C\u4E14\u53EA\u80FD\u7528\u4E8E img\uFF0C\u907F\u514D\u94FE\u63A5\u8DF3\u5230\u53EF\u6267\u884C\u7684 SVG\n if (url.startsWith('data:')) return tag === 'img' && url.startsWith('data:image/')\n return true\n}\n\nfunction cleanNode (node) {\n // \u5012\u5E8F\u904D\u5386\uFF0C\u5220\u9664\u8282\u70B9\u4E0D\u5F71\u54CD\u540E\u7EED\u7D22\u5F15\n const children = [...node.childNodes]\n children.forEach((child) => {\n // \u6CE8\u91CA\u76F4\u63A5\u4E22\u5F03\n if (child.nodeType === 8) {\n child.remove()\n return\n }\n if (child.nodeType !== 1) return\n\n const tag = child.tagName.toLowerCase()\n if (!TAGS.has(tag)) {\n // script / style \u7B49\u8FDE\u540C\u5185\u5BB9\u4E00\u8D77\u79FB\u9664\n child.remove()\n return\n }\n\n const allowed = TAG_ATTRS[tag]\n ;[...child.attributes].forEach((attr) => {\n const name = attr.name.toLowerCase()\n const keep = GLOBAL_ATTRS.has(name) || (allowed && allowed.has(name))\n if (!keep) {\n child.removeAttribute(attr.name)\n return\n }\n if ((name === 'href' || name === 'src') && !safeUrl(attr.value, tag)) {\n child.removeAttribute(attr.name)\n }\n })\n\n if (tag === 'a' && child.getAttribute('target') === '_blank') {\n child.setAttribute('rel', 'noopener noreferrer')\n }\n\n cleanNode(child)\n })\n}\n\n/**\n * @param {string} html \u539F\u59CB HTML\n * @returns {string} \u6E05\u6D17\u540E\u7684 HTML\n */\nexport function sanitizeHtml (html) {\n if (!html) return ''\n const doc = new DOMParser().parseFromString('<div id=\"djm-sanitize-root\">' + html + '</div>', 'text/html')\n const root = doc.getElementById('djm-sanitize-root')\n if (!root) return ''\n cleanNode(root)\n return root.innerHTML\n}\n\nexport default sanitizeHtml\n", "import { ref, onBeforeUnmount } from 'vue'\nimport Icon from '../icon/index.js'\n\nfunction clamp (value, min, max) {\n return Math.min(Math.max(value, min), Math.max(min, max))\n}\n\nexport default {\n name: 'DjmFloatingWindow',\n components: { Icon },\n props: {\n title: { type: String, default: '\u7A97\u53E3' },\n icon: { type: String, default: 'monitor' },\n initialX: { type: Number, default: 24 },\n initialY: { type: Number, default: 24 },\n width: { type: Number, default: 420 },\n height: { type: Number, default: 280 },\n zIndex: { type: Number, default: 1 }\n },\n emits: ['close', 'focus'],\n setup (props, { emit }) {\n const root = ref(null)\n const pos = ref({ x: props.initialX, y: props.initialY })\n const size = ref({ w: props.width, h: props.height })\n const minimized = ref(false)\n const maximized = ref(false)\n const saved = ref(null)\n let drag = null\n let resize = null\n\n function stage () {\n return root.value ? root.value.parentElement : null\n }\n\n function startDrag (event) {\n if (event.button !== 0 || minimized.value || maximized.value) return\n emit('focus')\n const box = stage()\n if (!box) return\n drag = {\n sx: event.clientX,\n sy: event.clientY,\n x: pos.value.x,\n y: pos.value.y,\n maxX: box.clientWidth - size.value.w,\n maxY: box.clientHeight - size.value.h\n }\n window.addEventListener('pointermove', onDrag)\n window.addEventListener('pointerup', endDrag)\n event.preventDefault()\n }\n\n function onDrag (event) {\n if (!drag) return\n pos.value = {\n x: clamp(drag.x + event.clientX - drag.sx, 0, drag.maxX),\n y: clamp(drag.y + event.clientY - drag.sy, 0, drag.maxY)\n }\n }\n\n function endDrag () {\n drag = null\n window.removeEventListener('pointermove', onDrag)\n window.removeEventListener('pointerup', endDrag)\n }\n\n function startResize (event) {\n if (minimized.value || maximized.value) return\n event.stopPropagation()\n emit('focus')\n const box = stage()\n if (!box) return\n resize = {\n sx: event.clientX,\n sy: event.clientY,\n w: size.value.w,\n h: size.value.h,\n maxW: box.clientWidth - pos.value.x,\n maxH: box.clientHeight - pos.value.y\n }\n window.addEventListener('pointermove', onResize)\n window.addEventListener('pointerup', endResize)\n event.preventDefault()\n }\n\n function onResize (event) {\n if (!resize) return\n const minW = Math.min(280, resize.maxW)\n const minH = Math.min(170, resize.maxH)\n size.value = {\n w: clamp(resize.w + event.clientX - resize.sx, minW, resize.maxW),\n h: clamp(resize.h + event.clientY - resize.sy, minH, resize.maxH)\n }\n }\n\n function endResize () {\n resize = null\n window.removeEventListener('pointermove', onResize)\n window.removeEventListener('pointerup', endResize)\n }\n\n function toggleMin () {\n minimized.value = !minimized.value\n emit('focus')\n }\n\n function toggleMax () {\n if (!maximized.value) {\n saved.value = { pos: { ...pos.value }, size: { ...size.value } }\n const box = stage()\n if (box) {\n pos.value = { x: 0, y: 0 }\n size.value = { w: box.clientWidth - 2, h: box.clientHeight - 2 }\n }\n maximized.value = true\n minimized.value = false\n } else if (saved.value) {\n pos.value = { ...saved.value.pos }\n size.value = { ...saved.value.size }\n maximized.value = false\n }\n emit('focus')\n }\n\n onBeforeUnmount(() => {\n window.removeEventListener('pointermove', onDrag)\n window.removeEventListener('pointerup', endDrag)\n window.removeEventListener('pointermove', onResize)\n window.removeEventListener('pointerup', endResize)\n })\n\n return { root, pos, size, minimized, maximized, startDrag, startResize, toggleMin, toggleMax }\n },\n template: `\n <div\n ref=\"root\"\n class=\"djm-float-window\"\n :class=\"{ 'djm-is-minimized': minimized, 'djm-is-maximized': maximized }\"\n :style=\"{\n left: pos.x + 'px',\n top: pos.y + 'px',\n width: size.w + 'px',\n height: (minimized ? 38 : size.h) + 'px',\n zIndex: zIndex\n }\"\n @pointerdown=\"$emit('focus')\"\n >\n <div class=\"djm-float-head\" @pointerdown=\"startDrag\" @dblclick=\"toggleMax\">\n <Icon :name=\"icon\" :size=\"14\" class=\"djm-float-icon\" />\n <span class=\"djm-float-title\">{{ title }}</span>\n <div class=\"djm-float-actions\" @pointerdown.stop>\n <button class=\"djm-float-btn\" type=\"button\" :title=\"minimized ? '\u8FD8\u539F' : '\u6700\u5C0F\u5316'\" @click=\"toggleMin\">\n <Icon :name=\"minimized ? 'maximize' : 'minimize'\" :size=\"12\" />\n </button>\n <button class=\"djm-float-btn\" type=\"button\" :title=\"maximized ? '\u8FD8\u539F' : '\u6700\u5927\u5316'\" @click=\"toggleMax\">\n <Icon :name=\"maximized ? 'minimize' : 'maximize'\" :size=\"12\" />\n </button>\n <button class=\"djm-float-btn djm-close\" type=\"button\" title=\"\u5173\u95ED\" @click=\"$emit('close')\">\n <Icon name=\"x\" :size=\"12\" />\n </button>\n </div>\n </div>\n\n <div class=\"djm-float-body\" v-show=\"!minimized\">\n <slot></slot>\n </div>\n\n <span class=\"djm-float-resize\" v-if=\"!minimized && !maximized\" @pointerdown=\"startResize\"></span>\n </div>\n `\n}\n", "import { reactive, ref, watch, onBeforeUnmount } from 'vue'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\n\nlet uidSeed = 0\n\n/** \u53D6\u6269\u5C55\u540D\uFF08\u5C0F\u5199\uFF0C\u4E0D\u542B\u70B9\uFF09 */\nfunction extension (name) {\n const index = name.lastIndexOf('.')\n return index === -1 ? '' : name.slice(index + 1).toLowerCase()\n}\n\n/** \u5B57\u8282\u6570\u8F6C\u53EF\u8BFB\u4F53\u79EF */\nexport function formatFileSize (bytes) {\n if (!bytes && bytes !== 0) return ''\n if (bytes < 1024) return bytes + ' B'\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB'\n return (bytes / 1024 / 1024).toFixed(1) + ' MB'\n}\n\n/**\n * accept \u5339\u914D\uFF1A\u652F\u6301 .png \u540E\u7F00\u3001image/* \u901A\u914D\u3001image/png \u5B8C\u6574 MIME\n * \u9010\u4E2A\u89C4\u5219\u5C1D\u8BD5\uFF0C\u53EA\u8981\u547D\u4E2D\u4E00\u6761\u5373\u53EF\n */\nfunction matchAccept (file, accept) {\n if (!accept) return true\n const name = (file.name || '').toLowerCase()\n const type = (file.type || '').toLowerCase()\n return accept\n .split(',')\n .map((rule) => rule.trim().toLowerCase())\n .filter(Boolean)\n .some((rule) => {\n if (rule.startsWith('.')) return name.endsWith(rule)\n if (rule.endsWith('/*')) return type.startsWith(rule.slice(0, -1))\n return type === rule\n })\n}\n\n/**\n * \u6587\u4EF6\u4E0A\u4F20\n *\n * \u53D7\u63A7\u5217\u8868\uFF1Av-model \u7ED1\u5B9A\u6587\u4EF6\u6570\u7EC4\uFF0C\u6BCF\u9879 { uid, name, size, ext, url, progress, status, response, message }\n * \u4E0A\u4F20\u52A8\u4F5C\u4EA4\u7ED9 request(file, { onProgress, onSuccess, onError })\uFF1A\n * - \u8FD4\u56DE\u503C\u662F\u51FD\u6570\u65F6\u4F5C\u4E3A\u53D6\u6D88\u65B9\u6CD5\n * - \u8FD4\u56DE\u503C\u662F Promise \u65F6\u4EE5\u5176 resolve/reject \u4F5C\u4E3A\u6210\u529F/\u5931\u8D25\n * \u4E0D\u4F20 request \u65F6\u53EA\u505A\u9009\u62E9\u4E0E\u6821\u9A8C\uFF0C\u6587\u4EF6\u505C\u7559\u5728 ready \u72B6\u6001\uFF0C\u7531\u4E1A\u52A1\u81EA\u884C\u63D0\u4EA4\n */\nexport default {\n name: 'DjmUpload',\n components: { DjmIcon: Icon },\n props: {\n modelValue: { type: Array, default: () => [] },\n // \u5141\u8BB8\u7684\u683C\u5F0F\uFF0C\u5982 '.png,.jpg' \u6216 'image/*'\n accept: { type: String, default: '' },\n // \u5355\u6587\u4EF6\u4F53\u79EF\u4E0A\u9650\uFF0C0 \u8868\u793A\u4E0D\u9650\u5236\n maxSize: { type: Number, default: 10 * 1024 * 1024 },\n // \u6587\u4EF6\u6570\u91CF\u4E0A\u9650\n limit: { type: Number, default: 6 },\n multiple: { type: Boolean, default: true },\n // \u662F\u5426\u663E\u793A\u62D6\u62FD\u533A\n drag: { type: Boolean, default: true },\n disabled: { type: Boolean, default: false },\n // text\uFF1A\u6587\u4EF6\u884C\uFF1Bpicture\uFF1A\u56FE\u7247\u5899\n listType: { type: String, default: 'text' },\n // \u9009\u62E9\u540E\u662F\u5426\u7ACB\u5373\u4E0A\u4F20\n autoUpload: { type: Boolean, default: true },\n request: { type: Function, default: null },\n // \u8FD4\u56DE false \u6216 reject \u65F6\u62E6\u622A\u8BE5\u6587\u4EF6\n beforeUpload: { type: Function, default: null },\n // \u62D6\u62FD\u533A\u8BF4\u660E\uFF0C\u9ED8\u8BA4\u6309\u4E0A\u4F20\u9650\u5236\u81EA\u52A8\u751F\u6210\n hint: { type: String, default: '' },\n showList: { type: Boolean, default: true }\n },\n emits: ['update:modelValue', 'change', 'success', 'error', 'remove', 'exceed'],\n setup (props, { emit }) {\n const files = ref([])\n const dragActive = ref(false)\n const inputRef = ref(null)\n // \u8BB0\u5F55\u53D6\u6D88\u65B9\u6CD5\uFF0C\u4FBF\u4E8E\u5916\u90E8\u4E2D\u65AD\n const tasks = new Map()\n\n watch(\n () => props.modelValue,\n (list) => {\n const next = list || []\n const current = files.value\n // \u5916\u90E8\u628A\u5217\u8868\u6574\u4F53\u6362\u6389\u65F6\u540C\u6B65\uFF1B\u540C\u4E00\u6279\u5BF9\u8C61\u5219\u5FFD\u7565\uFF0C\u907F\u514D\u6253\u65AD\u4E0A\u4F20\u8FDB\u5EA6\n const same = next.length === current.length && next.every((item, index) => item === current[index])\n if (!same) files.value = next.slice()\n }\n )\n\n function emitList () {\n emit('update:modelValue', files.value.slice())\n emit('change', files.value.slice())\n }\n\n function text (key, params) {\n return t(key, params)\n }\n\n function pick () {\n if (props.disabled) return\n if (inputRef.value) inputRef.value.click()\n }\n\n function finish (item, status, payload) {\n if (!files.value.includes(item)) return\n tasks.delete(item.uid)\n if (status === 'done') {\n item.status = 'done'\n item.progress = 100\n item.response = payload\n item.message = ''\n emit('success', item, payload)\n } else {\n item.status = 'error'\n item.message = payload && payload.message ? payload.message : text('upload.failed')\n emit('error', item, payload)\n }\n emitList()\n }\n\n function startUpload (item) {\n if (!props.request) {\n item.status = 'ready'\n return\n }\n item.status = 'uploading'\n item.progress = 0\n item.message = ''\n\n const result = props.request(item.raw, {\n onProgress (percent) {\n item.progress = Math.max(0, Math.min(100, Math.round(percent)))\n },\n onSuccess (response) {\n finish(item, 'done', response)\n },\n onError (error) {\n finish(item, 'error', error)\n }\n })\n\n if (result && typeof result.then === 'function') {\n result.then(\n (response) => finish(item, 'done', response),\n (error) => finish(item, 'error', error)\n )\n }\n if (typeof result === 'function') tasks.set(item.uid, result)\n }\n\n async function addFiles (list) {\n if (props.disabled) return []\n const incoming = Array.from(list || [])\n if (!incoming.length) return []\n\n const room = props.limit > 0 ? props.limit - files.value.length : incoming.length\n if (room <= 0) {\n emit('exceed', incoming)\n return []\n }\n const usable = incoming.slice(0, room)\n if (incoming.length > room) emit('exceed', incoming.slice(room))\n\n const added = []\n for (const raw of usable) {\n if (!matchAccept(raw, props.accept)) {\n emit('error', { file: raw, reason: 'accept' })\n continue\n }\n if (props.maxSize > 0 && raw.size > props.maxSize) {\n emit('error', { file: raw, reason: 'size' })\n continue\n }\n if (typeof props.beforeUpload === 'function') {\n let pass = true\n try {\n pass = await props.beforeUpload(raw)\n } catch (error) {\n pass = false\n }\n if (pass === false) continue\n }\n\n uidSeed += 1\n // \u7528 reactive \u5305\u88C5\uFF0C\u4FDD\u8BC1 request \u56DE\u8C03\u91CC\u6539\u8FDB\u5EA6\u80FD\u89E6\u53D1\u89C6\u56FE\u66F4\u65B0\n const item = reactive({\n uid: uidSeed,\n name: raw.name,\n size: raw.size,\n ext: extension(raw.name),\n type: raw.type,\n raw,\n url: raw.type && raw.type.startsWith('image/') ? URL.createObjectURL(raw) : '',\n progress: 0,\n status: props.autoUpload ? 'uploading' : 'ready',\n response: null,\n message: ''\n })\n files.value.push(item)\n added.push(item)\n }\n\n if (added.length) {\n emitList()\n added.forEach(startUpload)\n }\n return added\n }\n\n function onChange (event) {\n addFiles(event.target.files)\n // \u6E05\u7A7A value\uFF0C\u4FDD\u8BC1\u91CD\u590D\u9009\u62E9\u540C\u4E00\u6587\u4EF6\u4E5F\u80FD\u89E6\u53D1 change\n event.target.value = ''\n }\n\n function onDragOver () {\n if (props.disabled) return\n dragActive.value = true\n }\n\n function onDrop (event) {\n dragActive.value = false\n addFiles(event.dataTransfer.files)\n }\n\n function remove (item) {\n const task = tasks.get(item.uid)\n if (typeof task === 'function') task()\n tasks.delete(item.uid)\n if (item.url) URL.revokeObjectURL(item.url)\n files.value = files.value.filter((file) => file.uid !== item.uid)\n emit('remove', item)\n emitList()\n }\n\n function retry (item) {\n if (props.disabled) return\n startUpload(item)\n }\n\n // \u624B\u52A8\u63D0\u4EA4\uFF1AautoUpload \u4E3A false \u65F6\u7531\u5916\u90E8\u89E6\u53D1\n function submit () {\n files.value.filter((item) => item.status === 'ready' || item.status === 'error').forEach(startUpload)\n }\n\n function clear () {\n files.value.forEach((item) => {\n const task = tasks.get(item.uid)\n if (typeof task === 'function') task()\n if (item.url) URL.revokeObjectURL(item.url)\n })\n tasks.clear()\n files.value = []\n emitList()\n }\n\n onBeforeUnmount(() => {\n files.value.forEach((item) => {\n if (item.url) URL.revokeObjectURL(item.url)\n })\n tasks.clear()\n })\n\n return {\n files,\n dragActive,\n inputRef,\n pick,\n addFiles,\n onChange,\n onDragOver,\n onDrop,\n remove,\n retry,\n submit,\n clear,\n formatFileSize,\n statusLabel (item) {\n if (item.status === 'uploading') return text('upload.uploading', { percent: item.progress })\n if (item.status === 'done') return text('upload.done')\n if (item.status === 'error') return item.message || text('upload.failed')\n return text('upload.ready')\n },\n hintText () {\n if (props.hint) return props.hint\n const parts = []\n if (props.limit > 0) parts.push(text('upload.limitHint', { count: props.limit }))\n if (props.maxSize > 0) parts.push(text('upload.sizeHint', { size: formatFileSize(props.maxSize) }))\n return parts.join(' \u00B7 ') || text('upload.dropHint')\n },\n t: text\n }\n },\n template: `\n <div class=\"djm-upload\" :class=\"{ 'djm-is-disabled': disabled }\">\n <div\n v-if=\"drag\"\n class=\"djm-upload-zone\"\n :class=\"{ 'djm-is-active': dragActive }\"\n @click=\"pick\"\n @dragover.prevent=\"onDragOver\"\n @dragleave.prevent=\"dragActive = false\"\n @drop.prevent=\"onDrop\"\n >\n <slot :pick=\"pick\">\n <span class=\"djm-upload-icon\"><DjmIcon name=\"upload\" :size=\"22\" /></span>\n <strong>{{ t('upload.dropText') }}</strong>\n <span>{{ hintText() }}</span>\n <button class=\"djm-btn djm-btn-primary djm-btn-sm\" type=\"button\" :disabled=\"disabled\" @click.stop=\"pick\">\n <DjmIcon name=\"plus\" />{{ t('upload.select') }}\n </button>\n </slot>\n <input\n ref=\"inputRef\"\n class=\"djm-hidden-input\"\n type=\"file\"\n :accept=\"accept\"\n :multiple=\"multiple\"\n :disabled=\"disabled\"\n @change=\"onChange\"\n />\n </div>\n\n <input\n v-else\n ref=\"inputRef\"\n class=\"djm-hidden-input\"\n type=\"file\"\n :accept=\"accept\"\n :multiple=\"multiple\"\n :disabled=\"disabled\"\n @change=\"onChange\"\n />\n\n <template v-if=\"showList\">\n <div class=\"djm-upload-head\" v-if=\"files.length\">\n <span>{{ t('upload.count', { count: files.length }) }}</span>\n <button class=\"djm-link-btn djm-danger\" type=\"button\" @click=\"clear\">{{ t('upload.clear') }}</button>\n </div>\n\n <ul class=\"djm-upload-list\" v-if=\"files.length && listType === 'text'\">\n <li v-for=\"(file, index) in files\" :key=\"file.uid\">\n <slot name=\"file\" :file=\"file\" :index=\"index\">\n <span class=\"djm-file-thumb\" :class=\"{ image: file.url }\">\n <img v-if=\"file.url\" :src=\"file.url\" alt=\"\" />\n <DjmIcon v-else name=\"file\" :size=\"18\" />\n </span>\n\n <div class=\"djm-file-main\">\n <div class=\"djm-file-top\">\n <strong :title=\"file.name\">{{ file.name }}</strong>\n <span class=\"djm-file-size\">{{ formatFileSize(file.size) }}</span>\n </div>\n <div class=\"djm-progress djm-file-progress\">\n <div\n class=\"djm-progress-bar\"\n :class=\"{ 'djm-danger': file.status === 'error' }\"\n :style=\"{ width: file.progress + '%' }\"\n ></div>\n </div>\n <div class=\"djm-file-meta\">\n <span v-if=\"file.status === 'uploading'\">{{ statusLabel(file) }}</span>\n <span v-else-if=\"file.status === 'done'\" class=\"djm-status djm-ok\"><i></i>{{ statusLabel(file) }}</span>\n <span v-else-if=\"file.status === 'error'\" class=\"djm-status djm-danger\"><i></i>{{ statusLabel(file) }}</span>\n <span v-else>{{ statusLabel(file) }}</span>\n </div>\n </div>\n\n <div class=\"djm-file-actions\">\n <slot name=\"actions\" :file=\"file\" :index=\"index\">\n <button v-if=\"file.status === 'error'\" class=\"djm-link-btn\" type=\"button\" @click=\"retry(file)\">\n {{ t('upload.retry') }}\n </button>\n <button v-if=\"file.status === 'ready'\" class=\"djm-link-btn\" type=\"button\" @click=\"retry(file)\">\n {{ t('upload.start') }}\n </button>\n <button class=\"djm-link-btn djm-danger\" type=\"button\" @click=\"remove(file)\">\n {{ t('upload.remove') }}\n </button>\n </slot>\n </div>\n </slot>\n </li>\n </ul>\n\n <div class=\"djm-upload-picture\" v-else-if=\"files.length\">\n <div class=\"djm-upload-picture-item\" v-for=\"(file, index) in files\" :key=\"file.uid\">\n <img v-if=\"file.url\" :src=\"file.url\" :alt=\"file.name\" :title=\"file.name\" />\n <DjmIcon v-else name=\"file\" :size=\"20\" />\n <div class=\"djm-upload-picture-mask\">\n <span>{{ file.status === 'uploading' ? file.progress + '%' : statusLabel(file) }}</span>\n </div>\n <button class=\"djm-upload-picture-remove\" type=\"button\" :title=\"t('upload.remove')\" @click=\"remove(file)\">\n <DjmIcon name=\"x\" :size=\"11\" />\n </button>\n </div>\n </div>\n\n <div class=\"djm-upload-empty\" v-else>{{ t('upload.empty') }}</div>\n </template>\n </div>\n `\n}\n", "import { computed, ref, watch } from 'vue'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\n\n/**\n * \u6811\u5F62\u63A7\u4EF6\uFF1A\u5C55\u5F00 / \u6536\u8D77\u3001\u7236\u5B50\u8054\u52A8\u52FE\u9009\u3001\u61D2\u52A0\u8F7D\u4E0E\u5173\u952E\u5B57\u8FC7\u6EE4\n *\n * data: [{ id, label, children, isLeaf }]\uFF0C\u5B57\u6BB5\u540D\u53EF\u7528 nodeKey / labelKey \u8C03\u6574\n * \u52FE\u9009\uFF1Av-model:checked=\"keys\"\uFF1B\u5C55\u5F00\uFF1Av-model:expanded=\"keys\"\n * \u61D2\u52A0\u8F7D\uFF1Alazy + load(node) => Promise<children>\n */\nexport default {\n name: 'DjmTree',\n components: { Icon },\n props: {\n data: { type: Array, default: () => [] },\n nodeKey: { type: String, default: 'id' },\n labelKey: { type: String, default: 'label' },\n // \u52FE\u9009\u80FD\u529B\n checkable: { type: Boolean, default: false },\n // \u52FE\u9009\u503C\uFF0C\u7236\u5B50\u8054\u52A8\uFF1BcheckStrictly \u65F6\u53EA\u5F71\u54CD\u81EA\u8EAB\n checked: { type: Array, default: () => [] },\n checkStrictly: { type: Boolean, default: false },\n expanded: { type: Array, default: () => [] },\n defaultExpandAll: { type: Boolean, default: false },\n // \u61D2\u52A0\u8F7D\n lazy: { type: Boolean, default: false },\n load: { type: Function, default: null },\n // \u5173\u952E\u5B57\u8FC7\u6EE4\uFF1A\u547D\u4E2D\u8282\u70B9\u53CA\u5176\u7956\u5148\u53EF\u89C1\uFF0C\u5E76\u81EA\u52A8\u5C55\u5F00\n keyword: { type: String, default: '' },\n // \u5F53\u524D\u9009\u4E2D\u8282\u70B9\uFF0C\u7528\u4E8E\u9AD8\u4EAE\n activeKey: { type: [String, Number], default: '' },\n // \u884C\u9644\u52A0\u7C7B\u540D\uFF1A\u5B57\u7B26\u4E32\u6216 (node, level) => string\n rowClass: { type: [String, Function], default: '' },\n // \u62D6\u62FD\u6392\u5E8F\n draggable: { type: Boolean, default: false },\n // \u662F\u5426\u5141\u8BB8\u653E\u7F6E\uFF1A(dragNode, dropNode, position) => boolean\n allowDrop: { type: Function, default: null },\n emptyText: { type: String, default: '' }\n },\n emits: ['update:checked', 'update:expanded', 'node-click', 'check', 'node-drop', 'load-error'],\n setup (props, { emit }) {\n // \u61D2\u52A0\u8F7D\u56DE\u6765\u7684\u5B50\u8282\u70B9\u6309\u7236 id \u7F13\u5B58\uFF0C\u4E0D\u76F4\u63A5\u6539 props.data\n const lazyChildren = ref({})\n const loadingKeys = ref([])\n const innerExpanded = ref([...props.expanded])\n const innerChecked = ref([...props.checked])\n\n watch(\n () => props.expanded,\n (value) => {\n if (Array.isArray(value)) innerExpanded.value = value\n }\n )\n\n watch(\n () => props.checked,\n (value) => {\n if (Array.isArray(value)) innerChecked.value = value\n }\n )\n\n function childrenOf (node) {\n const id = node[props.nodeKey]\n if (lazyChildren.value[id]) return lazyChildren.value[id]\n return node.children || null\n }\n\n function hasChildren (node) {\n const children = childrenOf(node)\n if (children && children.length) return true\n // \u672A\u52A0\u8F7D\u4E14\u672A\u6807\u8BB0\u53F6\u5B50\uFF0C\u89C6\u4E3A\u61D2\u8282\u70B9\n return isLazy(node)\n }\n\n function isLazy (node) {\n const id = node[props.nodeKey]\n // \u5DF2\u7ECF\u52A0\u8F7D\u8FC7\uFF08\u5305\u62EC\u7A7A\u6570\u7EC4\uFF09\u5C31\u4E0D\u518D\u662F\u61D2\u8282\u70B9\n if (lazyChildren.value[id]) return false\n return props.lazy && typeof props.load === 'function' && !node.children && node.isLeaf !== true\n }\n\n function isExpanded (node) {\n if (props.keyword.trim()) return true\n return innerExpanded.value.includes(node[props.nodeKey])\n }\n\n function isLoading (node) {\n return loadingKeys.value.includes(node[props.nodeKey])\n }\n\n // \u9012\u5F52\u6536\u96C6\u6240\u6709\u542B\u5B50\u8282\u70B9\u7684 key\uFF0C\u4F9B\u9ED8\u8BA4\u5C55\u5F00\u4F7F\u7528\n function collectExpandable (nodes, out = []) {\n nodes.forEach((node) => {\n const children = childrenOf(node)\n if (children && children.length) {\n out.push(node[props.nodeKey])\n collectExpandable(children, out)\n }\n })\n return out\n }\n\n // \u9ED8\u8BA4\u5C55\u5F00\u5168\u90E8\uFF1A\u6570\u636E\u5F02\u6B65\u5230\u8FBE\u540E\u4E5F\u8981\u751F\u6548\n watch(\n () => props.data,\n () => {\n if (props.defaultExpandAll) innerExpanded.value = collectExpandable(props.data)\n },\n { immediate: true }\n )\n\n // \u5173\u952E\u5B57\u8FC7\u6EE4\uFF1A\u547D\u4E2D\u81EA\u8EAB\u6216\u540E\u4EE3\u624D\u5C55\u793A\n function matchSelf (node) {\n const label = String(node[props.labelKey] || '').toLowerCase()\n return label.includes(props.keyword.trim().toLowerCase())\n }\n\n function matchSubtree (node) {\n if (!props.keyword.trim()) return true\n if (matchSelf(node)) return true\n const children = childrenOf(node)\n return Boolean(children && children.some((child) => matchSubtree(child)))\n }\n\n const rows = computed(() => {\n const result = []\n const walk = (nodes, level) => {\n nodes.forEach((node) => {\n if (!matchSubtree(node)) return\n result.push({ node, level, index: result.length })\n const children = childrenOf(node)\n if (children && children.length && isExpanded(node)) walk(children, level + 1)\n })\n }\n walk(props.data, 0)\n return result\n })\n\n // \u9012\u5F52\u6536\u96C6\u53F6\u5B50 key\uFF0C\u7236\u5B50\u8054\u52A8\u4EE5\u53F6\u5B50\u4E3A\u51C6\n function collectLeaves (node, out = []) {\n const children = childrenOf(node)\n if (children && children.length) {\n children.forEach((child) => collectLeaves(child, out))\n } else {\n out.push(node[props.nodeKey])\n }\n return out\n }\n\n function isChecked (node) {\n const keys = props.checkStrictly ? [node[props.nodeKey]] : collectLeaves(node)\n return keys.length > 0 && keys.every((key) => innerChecked.value.includes(key))\n }\n\n function isIndeterminate (node) {\n if (props.checkStrictly) return false\n const leaves = collectLeaves(node)\n const count = leaves.filter((key) => innerChecked.value.includes(key)).length\n return count > 0 && count < leaves.length\n }\n\n function toggleCheck (node, event) {\n if (node.disabled) {\n // \u7981\u7528\u8282\u70B9\u56DE\u6EDA\u52FE\u9009\u72B6\u6001\n if (event) event.target.checked = isChecked(node)\n return\n }\n const keys = props.checkStrictly ? [node[props.nodeKey]] : collectLeaves(node)\n const checked = keys.every((key) => innerChecked.value.includes(key))\n const next = checked\n ? innerChecked.value.filter((key) => !keys.includes(key))\n : [...new Set([...innerChecked.value, ...keys])]\n\n innerChecked.value = next\n emit('update:checked', next)\n emit('check', { node, checked: !checked, keys: next })\n }\n\n async function toggleExpand (node) {\n const id = node[props.nodeKey]\n if (!hasChildren(node)) return\n\n if (isLazy(node) && !lazyChildren.value[id]) {\n loadingKeys.value = [...loadingKeys.value, id]\n try {\n const children = await props.load(node)\n lazyChildren.value = { ...lazyChildren.value, [id]: children || [] }\n } catch (error) {\n // \u52A0\u8F7D\u5931\u8D25\u4EA4\u7ED9\u4E1A\u52A1\u63D0\u793A\uFF0C\u7EC4\u4EF6\u4FDD\u6301\u5728\u53EF\u91CD\u8BD5\u72B6\u6001\n emit('load-error', node, error)\n return\n } finally {\n loadingKeys.value = loadingKeys.value.filter((key) => key !== id)\n }\n }\n\n const expanded = innerExpanded.value.includes(id)\n const next = expanded\n ? innerExpanded.value.filter((key) => key !== id)\n : [...innerExpanded.value, id]\n innerExpanded.value = next\n emit('update:expanded', next)\n }\n\n function onNodeClick (node) {\n if (node.disabled) return\n emit('node-click', node)\n }\n\n function isActive (node) {\n return props.activeKey !== '' && node[props.nodeKey] === props.activeKey\n }\n\n /* ---------- \u952E\u76D8\u64CD\u4F5C\uFF1A\u4E0A\u4E0B\u79FB\u52A8\u3001\u5DE6\u53F3\u5C55\u5F00\u6536\u8D77\u3001\u56DE\u8F66\u9009\u4E2D ---------- */\n\n const rootEl = ref(null)\n const focusIndex = ref(-1)\n\n // \u5F53\u524D\u5E94\u843D\u5230 tab \u5E8F\u5217\u91CC\u7684\u884C\uFF1A\u6CA1\u6709\u7126\u70B9\u65F6\u843D\u5230\u7B2C\u4E00\u884C\n function tabIndexOf (index) {\n return (focusIndex.value === -1 ? 0 : focusIndex.value) === index ? 0 : -1\n }\n\n function focusRow (index) {\n const nodes = rootEl.value ? rootEl.value.querySelectorAll('.djm-tree-node') : []\n const target = nodes[index]\n if (!target) return\n focusIndex.value = index\n target.focus()\n }\n\n function onKeydown (event) {\n const total = rows.value.length\n if (!total) return\n const current = focusIndex.value === -1 ? 0 : focusIndex.value\n const row = rows.value[current]\n const key = event.key\n\n if (key === 'ArrowDown' || key === 'ArrowUp') {\n event.preventDefault()\n focusRow(Math.min(total - 1, Math.max(0, current + (key === 'ArrowDown' ? 1 : -1))))\n return\n }\n\n if (key === 'Home' || key === 'End') {\n event.preventDefault()\n focusRow(key === 'Home' ? 0 : total - 1)\n return\n }\n\n if (key === 'ArrowRight') {\n event.preventDefault()\n if (row && hasChildren(row.node) && !isExpanded(row.node)) toggleExpand(row.node)\n else focusRow(Math.min(total - 1, current + 1))\n return\n }\n\n if (key === 'ArrowLeft') {\n event.preventDefault()\n if (row && hasChildren(row.node) && isExpanded(row.node)) {\n toggleExpand(row.node)\n return\n }\n // \u6536\u8D77\u72B6\u6001\u5219\u56DE\u5230\u7236\u8282\u70B9\n for (let i = current - 1; i >= 0; i--) {\n if (rows.value[i].level === row.level - 1) {\n focusRow(i)\n break\n }\n }\n return\n }\n\n if (key === 'Enter' || key === ' ') {\n if (!row) return\n event.preventDefault()\n if (key === ' ' && props.checkable) toggleCheck(row.node)\n else onNodeClick(row.node)\n }\n }\n\n function rowClassOf (node, level) {\n return typeof props.rowClass === 'function' ? props.rowClass(node, level) : props.rowClass\n }\n\n /* ---------- \u62D6\u62FD\u6392\u5E8F\uFF1A\u53EA\u8D1F\u8D23\u7B97\u843D\u70B9\u5E76\u629B\u4E8B\u4EF6\uFF0C\u6570\u636E\u53D8\u66F4\u4EA4\u4E1A\u52A1 ---------- */\n\n const dragKey = ref('')\n const dropKey = ref('')\n const dropPosition = ref('')\n\n function findNodeByKey (key, nodes = props.data) {\n for (const node of nodes) {\n if (node[props.nodeKey] === key) return node\n const children = childrenOf(node)\n if (children && children.length) {\n const found = findNodeByKey(key, children)\n if (found) return found\n }\n }\n return null\n }\n\n function containsNode (node, key) {\n if (node[props.nodeKey] === key) return true\n const children = childrenOf(node)\n return Boolean(children && children.some((child) => containsNode(child, key)))\n }\n\n // \u4E0A 28% \u843D\u5728\u524D\u9762\u3001\u4E0B 28% \u843D\u5728\u540E\u9762\uFF0C\u4E2D\u95F4\u662F\u6709\u5B50\u8282\u70B9\u65F6\u7684\u300C\u653E\u5165\u300D\n function dropPositionOf (event, node) {\n const rect = event.currentTarget.getBoundingClientRect()\n const ratio = rect.height ? (event.clientY - rect.top) / rect.height : 0.5\n if (ratio < 0.28) return 'before'\n if (ratio > 0.72) return 'after'\n return hasChildren(node) ? 'inside' : 'after'\n }\n\n function canDrop (dropNode, position) {\n if (!props.draggable || !dragKey.value) return false\n if (dropNode.disabled) return false\n const dragNode = findNodeByKey(dragKey.value)\n if (!dragNode || dragNode === dropNode) return false\n // \u4E0D\u80FD\u62D6\u8FDB\u81EA\u5DF1\u7684\u5B50\u6811\n if (containsNode(dragNode, dropNode[props.nodeKey])) return false\n if (typeof props.allowDrop === 'function' && props.allowDrop(dragNode, dropNode, position) === false) return false\n return true\n }\n\n function resetDrag () {\n dragKey.value = ''\n dropKey.value = ''\n dropPosition.value = ''\n }\n\n function onDragStart (node, event) {\n if (!props.draggable || node.disabled) return\n dragKey.value = node[props.nodeKey]\n dropKey.value = ''\n if (event.dataTransfer) {\n event.dataTransfer.setData('text/plain', String(dragKey.value))\n event.dataTransfer.effectAllowed = 'move'\n }\n }\n\n function onDragOver (node, event) {\n if (!props.draggable || !dragKey.value) return\n const position = dropPositionOf(event, node)\n if (!canDrop(node, position)) {\n if (dropKey.value === node[props.nodeKey]) resetDrag()\n return\n }\n event.preventDefault()\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'move'\n dropKey.value = node[props.nodeKey]\n dropPosition.value = position\n }\n\n function onDragLeave (node) {\n if (dropKey.value === node[props.nodeKey]) {\n dropKey.value = ''\n dropPosition.value = ''\n }\n }\n\n function onDrop (node, event) {\n if (!props.draggable || !dragKey.value) return\n event.preventDefault()\n const position = dropPosition.value || dropPositionOf(event, node)\n const dragNode = findNodeByKey(dragKey.value)\n const valid = dropKey.value === node[props.nodeKey] && canDrop(node, position)\n if (valid && dragNode) emit('node-drop', { dragNode, dropNode: node, position })\n resetDrag()\n }\n\n function onDragEnd () {\n resetDrag()\n }\n\n function dropClassOf (node) {\n if (dropKey.value !== node[props.nodeKey]) return ''\n return 'djm-is-drop-' + dropPosition.value\n }\n\n function isDragging (node) {\n return dragKey.value !== '' && node[props.nodeKey] === dragKey.value\n }\n\n function labelOf (node) {\n return node[props.labelKey]\n }\n\n return {\n rows,\n rootEl,\n focusIndex,\n tabIndexOf,\n onKeydown,\n childrenOf,\n hasChildren,\n isExpanded,\n isActive,\n isLoading,\n isChecked,\n isIndeterminate,\n toggleCheck,\n toggleExpand,\n onNodeClick,\n rowClassOf,\n dropClassOf,\n isDragging,\n onDragStart,\n onDragOver,\n onDragLeave,\n onDrop,\n onDragEnd,\n labelOf,\n emptyLabel: computed(() => props.emptyText || t('tree.empty')),\n t\n }\n },\n template: `\n <div class=\"djm-tree\" role=\"tree\" ref=\"rootEl\" @keydown=\"onKeydown\">\n <div\n v-for=\"row in rows\"\n :key=\"row.node[nodeKey]\"\n class=\"djm-tree-node\"\n :class=\"[rowClassOf(row.node, row.level), dropClassOf(row.node), {\n 'djm-is-disabled': row.node.disabled,\n 'djm-is-active': isActive(row.node),\n 'djm-is-draggable': draggable,\n 'djm-is-dragging': isDragging(row.node)\n }]\"\n :style=\"{ paddingLeft: 6 + row.level * 16 + 'px' }\"\n role=\"treeitem\"\n :tabindex=\"tabIndexOf(row.index)\"\n :aria-level=\"row.level + 1\"\n :aria-expanded=\"hasChildren(row.node) ? isExpanded(row.node) : undefined\"\n :aria-selected=\"activeKey !== '' ? isActive(row.node) : undefined\"\n :draggable=\"draggable ? 'true' : undefined\"\n @focus=\"focusIndex = row.index\"\n @click=\"onNodeClick(row.node)\"\n @dragstart=\"onDragStart(row.node, $event)\"\n @dragover=\"onDragOver(row.node, $event)\"\n @dragleave=\"onDragLeave(row.node)\"\n @drop=\"onDrop(row.node, $event)\"\n @dragend=\"onDragEnd\"\n >\n <button\n v-if=\"hasChildren(row.node)\"\n class=\"djm-tree-arrow\"\n :class=\"{ 'djm-is-loading': isLoading(row.node) }\"\n type=\"button\"\n tabindex=\"-1\"\n :aria-label=\"isExpanded(row.node) ? '\u6536\u8D77' : '\u5C55\u5F00'\"\n @click.stop=\"toggleExpand(row.node)\"\n >\n <span v-if=\"isLoading(row.node)\" class=\"djm-spinner\"></span>\n <Icon v-else :name=\"isExpanded(row.node) ? 'chevron-down' : 'chevron-right'\" :size=\"11\" />\n </button>\n <span v-else class=\"djm-tree-arrow-placeholder\"></span>\n\n <input\n v-if=\"checkable\"\n type=\"checkbox\"\n tabindex=\"-1\"\n :aria-label=\"labelOf(row.node)\"\n :checked=\"isChecked(row.node)\"\n :indeterminate=\"isIndeterminate(row.node)\"\n :disabled=\"row.node.disabled\"\n @click.stop\n @change=\"toggleCheck(row.node, $event)\"\n />\n\n <Icon v-if=\"row.node.icon\" :name=\"row.node.icon\" :size=\"13\" class=\"djm-tree-icon\" />\n <span class=\"djm-tree-label\">\n <slot name=\"node\" :node=\"row.node\" :level=\"row.level\" :active=\"isActive(row.node)\">{{ labelOf(row.node) }}</slot>\n </span>\n </div>\n\n <div v-if=\"!rows.length\" class=\"djm-tree-empty\">{{ emptyLabel }}</div>\n </div>\n `\n}\n", "import { computed, nextTick, reactive, ref, useSlots, watch } from 'vue'\nimport DjmTable from '../table/index.js'\nimport DjmInput from '../input/index.js'\nimport DjmSelect from '../select/index.js'\nimport DjmSwitch from '../switch/index.js'\nimport DjmDatePicker from '../date-picker/index.js'\n\nconst ACTIONS_KEY = '__editable_actions'\n\nfunction isEmpty (value) {\n if (value === '' || value === null || value === undefined) return true\n return Array.isArray(value) && value.length === 0\n}\n\n/**\n * \u53EF\u7F16\u8F91\u8868\u683C\uFF1A\u57FA\u4E8E DjmTable\uFF0C\u5217\u4E0A\u914D editor \u5373\u53EF\u884C\u5185\u7F16\u8F91\n *\n * columns: [{ key, label, editor: 'input'|'number'|'select'|'date'|'switch'|'textarea',\n * options, rules: [{ required, pattern, validator, message }] }]\n * \u4FDD\u5B58\uFF1A@save=\"({ row, changes }) => ...\"\uFF0C\u7EC4\u4EF6\u4E0D\u6539 rows\uFF0C\u53EA\u56DE\u4F20\u53D8\u66F4\n * \u5176\u5B83\u5C5E\u6027\uFF08selectable / max-height / column-setting \u2026\uFF09\u539F\u6837\u900F\u4F20\u7ED9 DjmTable\n */\nexport default {\n name: 'DjmEditableTable',\n components: { DjmTable, DjmInput, DjmSelect, DjmSwitch, DjmDatePicker },\n inheritAttrs: false,\n props: {\n columns: { type: Array, required: true },\n rows: { type: Array, default: () => [] },\n rowKey: { type: String, default: 'id' },\n // \u53F3\u4FA7\u64CD\u4F5C\u5217\n showActions: { type: Boolean, default: true },\n actionLabel: { type: String, default: '\u64CD\u4F5C' },\n actionWidth: { type: Number, default: 120 },\n // \u5355\u884C\u662F\u5426\u5141\u8BB8\u7F16\u8F91\n editable: { type: Function, default: null }\n },\n emits: ['edit', 'save', 'cancel'],\n setup (props, { emit }) {\n const slots = useSlots()\n const editingKey = ref('')\n const draft = reactive({})\n const errors = reactive({})\n const tableRef = ref(null)\n\n // \u914D\u4E86 editor \u7684\u5217\u624D\u8FDB\u5165\u7F16\u8F91\u6001\n const editableColumns = computed(() => props.columns.filter((column) => column.editor))\n\n const renderColumns = computed(() => {\n if (!props.showActions) return props.columns\n return props.columns.concat({\n key: ACTIONS_KEY,\n label: props.actionLabel,\n width: props.actionWidth,\n class: 'djm-col-actions',\n // \u64CD\u4F5C\u5217\u56FA\u5B9A\u5728\u53F3\u4FA7\uFF0C\u6A2A\u5411\u6EDA\u52A8\u65F6\u59CB\u7EC8\u53EF\u89C1\n fixed: 'right',\n exportable: false\n })\n })\n\n // \u900F\u4F20\u6D88\u8D39\u8005\u81EA\u5DF1\u7684\u63D2\u69FD\uFF1B\u53EF\u7F16\u8F91\u5217\u7684 cell \u63D2\u69FD\u7531\u7EC4\u4EF6\u63A5\u7BA1\n const forwardedSlotNames = computed(() => {\n const taken = new Set(editableColumns.value.map((column) => 'cell-' + column.key))\n taken.add('cell-' + ACTIONS_KEY)\n return Object.keys(slots).filter((name) => !taken.has(name))\n })\n\n function cellSlot (column) {\n return 'cell-' + column.key\n }\n\n const actionsSlot = 'cell-' + ACTIONS_KEY\n\n function clearErrors () {\n Object.keys(errors).forEach((key) => delete errors[key])\n }\n\n function isEditing (row) {\n return editingKey.value !== '' && row[props.rowKey] === editingKey.value\n }\n\n function rowEditable (row) {\n if (typeof props.editable === 'function') return Boolean(props.editable(row))\n return true\n }\n\n function startEdit (row) {\n if (!rowEditable(row)) return false\n editingKey.value = row[props.rowKey]\n editableColumns.value.forEach((column) => {\n draft[column.key] = row[column.key]\n })\n clearErrors()\n emit('edit', row)\n return true\n }\n\n function cancelEdit () {\n const row = findRow(editingKey.value)\n editingKey.value = ''\n clearErrors()\n if (row) emit('cancel', row)\n }\n\n function findRow (key) {\n if (key === '') return null\n return props.rows.find((row) => row[props.rowKey] === key) || null\n }\n\n function validate () {\n clearErrors()\n editableColumns.value.forEach((column) => {\n const value = draft[column.key]\n const rules = column.rules || []\n for (const rule of rules) {\n if (rule.required && isEmpty(value)) {\n errors[column.key] = rule.message || '\u8BE5\u9879\u4E3A\u5FC5\u586B'\n break\n }\n if (rule.pattern && !isEmpty(value) && !rule.pattern.test(String(value))) {\n errors[column.key] = rule.message || '\u683C\u5F0F\u4E0D\u6B63\u786E'\n break\n }\n if (typeof rule.validator === 'function') {\n const result = rule.validator(value, draft)\n if (result === false) {\n errors[column.key] = rule.message || '\u6821\u9A8C\u672A\u901A\u8FC7'\n break\n }\n if (typeof result === 'string') {\n errors[column.key] = result\n break\n }\n }\n }\n })\n return Object.keys(errors).length === 0\n }\n\n // \u6821\u9A8C\u901A\u8FC7\u624D\u629B save\uFF1B\u5931\u8D25\u4FDD\u6301\u7F16\u8F91\u6001\uFF0C\u65B9\u4FBF\u7EE7\u7EED\u6539\n function saveEdit () {\n const row = findRow(editingKey.value)\n if (!row) {\n editingKey.value = ''\n return false\n }\n if (!validate()) {\n nextTick(() => {\n const el = tableRef.value && tableRef.value.$el\n ? tableRef.value.$el.querySelector('.djm-cell-error')\n : null\n if (el) el.scrollIntoView({ block: 'nearest' })\n })\n return false\n }\n\n const changes = {}\n editableColumns.value.forEach((column) => {\n const raw = draft[column.key]\n if (column.editor === 'number') {\n changes[column.key] = isEmpty(raw) ? null : Number(raw)\n } else {\n changes[column.key] = typeof raw === 'string' ? raw.trim() : raw\n }\n })\n emit('save', { row, changes })\n editingKey.value = ''\n clearErrors()\n return true\n }\n\n // \u6B63\u5728\u7F16\u8F91\u7684\u884C\u88AB\u5916\u90E8\u5220\u9664\u65F6\u81EA\u52A8\u9000\u51FA\u7F16\u8F91\u6001\n watch(\n () => props.rows,\n () => {\n if (editingKey.value && !findRow(editingKey.value)) {\n editingKey.value = ''\n clearErrors()\n }\n }\n )\n\n return {\n tableRef,\n editingKey,\n draft,\n errors,\n editableColumns,\n renderColumns,\n forwardedSlotNames,\n cellSlot,\n actionsSlot,\n isEditing,\n rowEditable,\n startEdit,\n cancelEdit,\n saveEdit\n }\n },\n template: `\n <DjmTable\n ref=\"tableRef\"\n v-bind=\"$attrs\"\n :columns=\"renderColumns\"\n :rows=\"rows\"\n :row-key=\"rowKey\"\n >\n <!-- \u53EF\u7F16\u8F91\u5217\uFF1A\u7F16\u8F91\u6001\u6E32\u67D3\u63A7\u4EF6\uFF0C\u975E\u7F16\u8F91\u6001\u4ECD\u8D70\u4F7F\u7528\u65B9\u63D2\u69FD\u6216\u9ED8\u8BA4\u6587\u672C -->\n <template v-for=\"column in editableColumns\" :key=\"'edit-' + column.key\" #[cellSlot(column)]=\"scope\">\n <div v-if=\"isEditing(scope.row)\" class=\"djm-cell-editor\" @keydown.esc=\"cancelEdit\">\n <DjmSelect\n v-if=\"column.editor === 'select'\"\n v-model=\"draft[column.key]\"\n :options=\"column.options || []\"\n :aria-label=\"column.label\"\n />\n <DjmSwitch\n v-else-if=\"column.editor === 'switch'\"\n v-model=\"draft[column.key]\"\n :label=\"column.label\"\n />\n <DjmDatePicker\n v-else-if=\"column.editor === 'date'\"\n v-model=\"draft[column.key]\"\n :placeholder=\"column.label\"\n />\n <textarea\n v-else-if=\"column.editor === 'textarea'\"\n class=\"djm-input djm-textarea\"\n rows=\"2\"\n :aria-label=\"column.label\"\n v-model=\"draft[column.key]\"\n ></textarea>\n <DjmInput\n v-else\n v-model=\"draft[column.key]\"\n :type=\"column.editor === 'number' ? 'number' : 'text'\"\n :aria-label=\"column.label\"\n @enter=\"saveEdit\"\n />\n <em v-if=\"errors[column.key]\" class=\"djm-cell-error\">{{ errors[column.key] }}</em>\n </div>\n <slot v-else :name=\"cellSlot(column)\" v-bind=\"scope\">{{ scope.value }}</slot>\n </template>\n\n <!-- \u64CD\u4F5C\u5217\uFF1A\u7F16\u8F91 / \u4FDD\u5B58 / \u53D6\u6D88\uFF0C\u989D\u5916\u64CD\u4F5C\u7528 row-actions \u63D2\u69FD -->\n <template v-if=\"showActions\" #[actionsSlot]=\"{ row }\">\n <div v-if=\"isEditing(row)\" class=\"djm-row-actions\">\n <button class=\"djm-link-btn\" type=\"button\" @click=\"saveEdit\">\u4FDD\u5B58</button>\n <button class=\"djm-link-btn djm-muted\" type=\"button\" @click=\"cancelEdit\">\u53D6\u6D88</button>\n </div>\n <div v-else class=\"djm-row-actions\">\n <button class=\"djm-link-btn\" type=\"button\" :disabled=\"!rowEditable(row)\" @click=\"startEdit(row)\">\u7F16\u8F91</button>\n <slot name=\"row-actions\" :row=\"row\"></slot>\n </div>\n </template>\n\n <template v-for=\"name in forwardedSlotNames\" :key=\"'slot-' + name\" #[name]=\"scope\">\n <slot :name=\"name\" v-bind=\"scope || {}\"></slot>\n </template>\n </DjmTable>\n `\n}\n", "/**\n * \u63CF\u8FF0\u5217\u8868\uFF1A\u8BE6\u60C5\u9875 / \u62BD\u5C49\u91CC\u6210\u7EC4\u5C55\u793A\u300C\u6807\u7B7E - \u503C\u300D\n * \u7528\u6CD5\uFF1A<DjmDescriptions :items=\"[{ key: 'code', label: '\u7F16\u7801', value: 'DEV_FE' }]\" />\n * \u81EA\u5B9A\u4E49\u67D0\u4E00\u884C\uFF1A<template #value-code=\"{ item }\">...</template>\n */\nexport default {\n name: 'DjmDescriptions',\n props: {\n items: { type: Array, default: () => [] },\n // \u6BCF\u884C\u5217\u6570\uFF0C\u7A84\u5C4F\u81EA\u52A8\u964D\u4E3A 1 \u5217\n columns: { type: [Number, String], default: 2 },\n // \u6807\u7B7E\u5217\u5BBD\uFF0C\u6570\u5B57\u6309 px \u5904\u7406\n labelWidth: { type: [Number, String], default: 72 }\n },\n computed: {\n descStyle () {\n const columns = Math.max(1, Number(this.columns) || 1)\n const raw = this.labelWidth\n const label = typeof raw === 'number' || /^\\d+(\\.\\d+)?$/.test(raw) ? raw + 'px' : raw\n return {\n '--djm-desc-columns': columns,\n '--djm-desc-label-w': label\n }\n }\n },\n methods: {\n // \u63D2\u69FD\u540D\u7EDF\u4E00\u7528 key\uFF0C\u6CA1\u4F20 key \u65F6\u9000\u56DE label\n slotOf (item) {\n return 'value-' + (item.key || item.label)\n }\n },\n template: `\n <dl class=\"djm-descriptions\" :style=\"descStyle\">\n <div\n v-for=\"item in items\"\n :key=\"item.key || item.label\"\n class=\"djm-desc-item\"\n :style=\"{ gridColumn: item.span ? 'span ' + item.span : undefined }\"\n >\n <dt class=\"djm-desc-label\">{{ item.label }}</dt>\n <dd class=\"djm-desc-value\">\n <slot :name=\"slotOf(item)\" :item=\"item\">{{ item.value }}</slot>\n </dd>\n </div>\n </dl>\n `\n}\n", "import { reactive } from 'vue'\nimport Icon from '../icon/index.js'\n\n/** \u5168\u5C40\u6D88\u606F\u961F\u5217\uFF1A\u4EFB\u4F55\u7EC4\u4EF6\u6216\u4E1A\u52A1\u4EE3\u7801\u53EF\u76F4\u63A5\u8C03\u7528\uFF0C\u4E0D\u4F9D\u8D56\u5E94\u7528\u5916\u58F3 */\nexport const djmMessages = reactive([])\n\nlet seq = 0\n\nfunction close (id) {\n const index = djmMessages.findIndex((item) => item.id === id)\n if (index > -1) djmMessages.splice(index, 1)\n}\n\nfunction push (text, type = 'success', duration = 2600) {\n const id = ++seq\n djmMessages.push({ id, text, type })\n // duration \u4F20 0 \u8868\u793A\u5E38\u9A7B\uFF0C\u9700\u8981\u624B\u52A8 djmMessage.close(id) \u5173\u6389\n if (duration > 0) window.setTimeout(() => close(id), duration)\n return id\n}\n\n/** \u517C\u5BB9\u65E7\u8C03\u7528\uFF1AdjmMessage('\u5DF2\u4FDD\u5B58', 'info')\uFF0C\u8FD4\u56DE\u6D88\u606F id */\nexport function djmMessage (text, type = 'success', duration) {\n return push(text, type, duration)\n}\n\ndjmMessage.success = (text, duration) => push(text, 'success', duration)\ndjmMessage.info = (text, duration) => push(text, 'info', duration)\ndjmMessage.error = (text, duration) => push(text, 'error', duration)\ndjmMessage.close = close\ndjmMessage.clear = () => djmMessages.splice(0, djmMessages.length)\n\n/** \u6D88\u606F\u6E32\u67D3\u5BBF\u4E3B\uFF0C\u5728\u5E94\u7528\u6839\u8282\u70B9\u6302\u4E00\u6B21\u5373\u53EF */\nexport default {\n name: 'DjmMessageHost',\n components: { DjmIcon: Icon },\n setup () {\n return { messages: djmMessages }\n },\n template: `\n <Teleport to=\"body\">\n <TransitionGroup name=\"djm-toast\" tag=\"div\" class=\"djm-toast-stack\" role=\"status\" aria-live=\"polite\">\n <div\n v-for=\"item in messages\"\n :key=\"item.id\"\n class=\"djm-toast\"\n :class=\"'djm-toast-' + item.type\"\n :role=\"item.type === 'error' ? 'alert' : undefined\"\n >\n <DjmIcon :name=\"item.type === 'success' ? 'check' : 'alert'\" :size=\"14\" />\n <span>{{ item.text }}</span>\n </div>\n </TransitionGroup>\n </Teleport>\n `\n}\n", "/**\n * \u4EBA\u5458\u7EC4\u7EC7\u9009\u62E9\u5668\uFF1A\u5DE6\u4FA7\u90E8\u95E8\u6811 + \u53F3\u4FA7\u4EBA\u5458\u5217\u8868\uFF0C\u56DE\u4F20\u4EBA\u5458 id \u6570\u7EC4\n *\n * \u7528\u6CD5\uFF1A<DjmOrgPicker v-model=\"userIds\" :departments=\"depts\" :staff=\"staff\" />\n * departments: [{ id, label, children }]\n * staff: [{ id, name, deptId, title, avatar }]\n * \u8BF4\u660E\uFF1A\u53EA\u8D1F\u8D23\u9009\u62E9\uFF0C\u4E0D\u53D1\u8D77\u8BF7\u6C42\uFF1B\u6570\u636E\u7531\u4E1A\u52A1\u4FA7\u6309\u9700\u52A0\u8F7D\u540E\u4F20\u5165\n */\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\nimport { bindPanelListeners, shouldFlipUp, dropdownPanelStyle, PANEL_HIDDEN_STYLE } from '../../utils/panel.js'\n\nexport default {\n name: 'DjmOrgPicker',\n components: { DjmIcon: Icon },\n props: {\n modelValue: { type: Array, default: () => [] },\n departments: { type: Array, default: () => [] },\n staff: { type: Array, default: () => [] },\n placeholder: { type: String, default: '' },\n disabled: { type: Boolean, default: false },\n clearable: { type: Boolean, default: true },\n // \u89E6\u53D1\u5668\u4E0A\u6700\u591A\u5C55\u793A\u51E0\u4E2A\u4EBA\u5458\u6807\u7B7E\n maxTagCount: { type: Number, default: 3 },\n // \u663E\u793A\u5E95\u90E8\u786E\u5B9A / \u53D6\u6D88\uFF1B\u5173\u95ED\u65F6\u70B9\u9009\u5373\u751F\u6548\n showFooter: { type: Boolean, default: true },\n emptyText: { type: String, default: '' }\n },\n emits: ['update:modelValue', 'change', 'visible-change'],\n setup (props, { emit }) {\n const open = ref(false)\n const root = ref(null)\n const searchRef = ref(null)\n const keyword = ref('')\n // \u7A7A\u4E32\u8868\u793A\u300C\u5168\u90E8\u4EBA\u5458\u300D\n const activeDept = ref('')\n // \u9762\u677F\u5185\u7684\u4E34\u65F6\u9009\u62E9\uFF0C\u786E\u5B9A\u540E\u624D\u56DE\u4F20\n const temp = ref([])\n const expandedIds = ref(new Set())\n let detachPanel = null\n\n function collectDeptIds (nodes, out = []) {\n nodes.forEach((node) => {\n out.push(node.id)\n if (node.children && node.children.length) collectDeptIds(node.children, out)\n })\n return out\n }\n\n // \u90E8\u95E8 id -> \u8BE5\u90E8\u95E8\u53CA\u5176\u6240\u6709\u4E0B\u7EA7\u90E8\u95E8 id\n function deptScope (id) {\n const find = (nodes) => {\n for (const node of nodes) {\n if (node.id === id) return node\n if (node.children) {\n const hit = find(node.children)\n if (hit) return hit\n }\n }\n return null\n }\n const root = find(props.departments)\n if (!root) return new Set([id])\n const ids = new Set()\n const walk = (nodes) => nodes.forEach((node) => {\n ids.add(node.id)\n if (node.children) walk(node.children)\n })\n walk([root])\n return ids\n }\n\n const staffMap = computed(() => {\n const map = new Map()\n props.staff.forEach((item) => map.set(item.id, item))\n return map\n })\n\n // \u89E6\u53D1\u5668\u4E0A\u7684\u6807\u7B7E\uFF1A\u8DDF\u968F\u5DF2\u56DE\u4F20\u7684\u503C\n const appliedStaff = computed(() =>\n props.modelValue.map((id) => staffMap.value.get(id)).filter(Boolean)\n )\n\n const visibleTags = computed(() => {\n if (props.maxTagCount <= 0) return appliedStaff.value\n return appliedStaff.value.slice(0, props.maxTagCount)\n })\n\n const restTagCount = computed(() =>\n Math.max(0, appliedStaff.value.length - visibleTags.value.length)\n )\n\n // \u641C\u7D22\u4E0D\u53D7\u90E8\u95E8\u9650\u5236\uFF0C\u4FBF\u4E8E\u8DE8\u90E8\u95E8\u627E\u4EBA\n const visibleStaff = computed(() => {\n const key = keyword.value.trim().toLowerCase()\n if (key) {\n return props.staff.filter((item) =>\n (item.name + ' ' + (item.title || '')).toLowerCase().includes(key)\n )\n }\n if (!activeDept.value) return props.staff\n const scope = deptScope(activeDept.value)\n return props.staff.filter((item) => scope.has(item.deptId))\n })\n\n const deptRows = computed(() => {\n const rows = []\n const walk = (nodes, depth) => {\n nodes.forEach((node) => {\n const hasChildren = Array.isArray(node.children) && node.children.length > 0\n rows.push({ node, depth, hasChildren })\n if (hasChildren && expandedIds.value.has(node.id)) walk(node.children, depth + 1)\n })\n }\n walk(props.departments, 0)\n return rows\n })\n\n const selectedCount = computed(() => temp.value.length)\n const placeholderText = computed(() => props.placeholder || t('orgPicker.placeholder'))\n const emptyLabel = computed(() => props.emptyText || t('orgPicker.empty'))\n\n // \u9762\u677F\u6302\u5230 body\uFF0C\u7528 fixed \u5B9A\u4F4D\uFF0C\u907F\u514D\u88AB\u7236\u7EA7 overflow \u88C1\u526A\n const panel = ref(null)\n const panelStyle = ref({ ...PANEL_HIDDEN_STYLE })\n\n // \u9762\u677F\u56FA\u5B9A\u9AD8\u5EA6\uFF1A\u641C\u7D22 + \u5217\u8868\u533A + \u5E95\u90E8\u64CD\u4F5C\n const PANEL_HEIGHT = 342\n\n function updatePosition () {\n if (!open.value || !root.value) return\n const rect = root.value.getBoundingClientRect()\n // \u7A84\u5C4F\u65F6\u6536\u7A84\u5230\u89C6\u53E3\u5185\n const width = Math.min(520, window.innerWidth - 16)\n panelStyle.value = dropdownPanelStyle({\n rect,\n flip: shouldFlipUp(rect, PANEL_HEIGHT),\n width,\n clampWidth: width\n })\n }\n\n // \u90E8\u95E8\u6811\u9ED8\u8BA4\u5168\u5C55\u5F00\uFF1B\u5F02\u6B65\u4E0B\u53D1\u6570\u636E\u65F6\u628A\u65B0\u90E8\u95E8\u8865\u8FDB\u5C55\u5F00\u96C6\u5408\n function expandAll () {\n expandedIds.value = new Set(collectDeptIds(props.departments))\n }\n expandAll()\n watch(() => props.departments, () => {\n expandedIds.value = new Set([...expandedIds.value, ...collectDeptIds(props.departments)])\n })\n\n function initialOf (item) {\n return (item.name || '').slice(0, 1)\n }\n\n function isSelected (id) {\n return temp.value.includes(id)\n }\n\n function toggleStaff (item) {\n if (temp.value.includes(item.id)) {\n temp.value = temp.value.filter((id) => id !== item.id)\n } else {\n temp.value = [...temp.value, item.id]\n }\n // \u65E0\u5E95\u90E8\u6309\u94AE\u65F6\u70B9\u9009\u5373\u751F\u6548\n if (!props.showFooter) commit()\n }\n\n function pickDept (id) {\n activeDept.value = id\n keyword.value = ''\n }\n\n function toggleExpand (node) {\n const next = new Set(expandedIds.value)\n if (next.has(node.id)) next.delete(node.id)\n else next.add(node.id)\n expandedIds.value = next\n }\n\n function onSearchEnter () {\n // \u56DE\u8F66\u9009\u4E2D\u5F53\u524D\u8FC7\u6EE4\u7ED3\u679C\u91CC\u7684\u7B2C\u4E00\u4E2A\u672A\u9009\u9879\n const target = visibleStaff.value.find((item) => !temp.value.includes(item.id))\n if (target) toggleStaff(target)\n }\n\n function openPanel () {\n if (props.disabled || open.value) return\n temp.value = [...props.modelValue]\n keyword.value = ''\n activeDept.value = ''\n open.value = true\n emit('visible-change', true)\n detachPanel = bindPanelListeners({\n root: () => root.value,\n panel: () => panel.value,\n onClose: closePanel,\n onReposition: updatePosition\n })\n // \u6253\u5F00\u5373\u805A\u7126\u641C\u7D22\u6846\uFF0C\u952E\u76D8\u53EF\u76F4\u63A5\u627E\u4EBA\n requestAnimationFrame(() => {\n updatePosition()\n if (searchRef.value) searchRef.value.focus()\n })\n }\n\n function closePanel () {\n if (!open.value) return\n open.value = false\n panelStyle.value = { ...PANEL_HIDDEN_STYLE }\n emit('visible-change', false)\n if (detachPanel) {\n detachPanel()\n detachPanel = null\n }\n }\n\n function commit () {\n const next = [...temp.value]\n emit('update:modelValue', next)\n emit('change', next)\n if (props.showFooter) closePanel()\n }\n\n function cancel () {\n temp.value = [...props.modelValue]\n closePanel()\n }\n\n function toggle () {\n if (props.disabled) return\n if (open.value) cancel()\n else openPanel()\n }\n\n function removeTag (id) {\n const next = props.modelValue.filter((item) => item !== id)\n emit('update:modelValue', next)\n emit('change', next)\n temp.value = temp.value.filter((item) => item !== id)\n }\n\n function clearAll () {\n if (props.disabled) return\n emit('update:modelValue', [])\n emit('change', [])\n temp.value = []\n }\n\n function clearTemp () {\n temp.value = []\n }\n\n onBeforeUnmount(() => {\n if (detachPanel) {\n detachPanel()\n detachPanel = null\n }\n })\n\n return {\n open, root, panel, panelStyle, searchRef, keyword, activeDept, temp, expandedIds,\n appliedStaff, visibleTags, restTagCount, visibleStaff, deptRows,\n selectedCount, placeholderText, emptyLabel,\n initialOf, isSelected, toggleStaff, pickDept, toggleExpand, onSearchEnter,\n openPanel, closePanel, commit, cancel, toggle, removeTag, clearAll, clearTemp,\n t\n }\n },\n template: `\n <div class=\"djm-org-picker\" ref=\"root\" :class=\"{ 'djm-is-open': open, 'djm-is-disabled': disabled }\">\n <div\n class=\"djm-input djm-org-trigger\"\n role=\"combobox\"\n :tabindex=\"disabled ? -1 : 0\"\n :aria-expanded=\"String(open)\"\n :aria-disabled=\"String(disabled)\"\n :aria-label=\"appliedStaff.length ? appliedStaff.map((item) => item.name).join('\u3001') : placeholderText\"\n aria-haspopup=\"dialog\"\n @click=\"toggle\"\n @keydown.enter.prevent=\"toggle\"\n @keydown.space.prevent=\"toggle\"\n >\n <span v-if=\"visibleTags.length\" class=\"djm-org-tags\">\n <span v-for=\"item in visibleTags\" :key=\"item.id\" class=\"djm-org-tag\">\n {{ item.name }}\n <button\n v-if=\"!disabled\"\n class=\"djm-org-tag-close\"\n type=\"button\"\n :aria-label=\"'\u79FB\u9664 ' + item.name\"\n @click.stop=\"removeTag(item.id)\"\n >\u00D7</button>\n </span>\n <span v-if=\"restTagCount\" class=\"djm-org-tag djm-org-tag-more\">+{{ restTagCount }}</span>\n </span>\n <span v-else class=\"djm-org-placeholder\">{{ placeholderText }}</span>\n <span class=\"djm-org-suffix\">\n <DjmIcon name=\"users\" :size=\"13\" class=\"djm-org-icon\" />\n <button\n v-if=\"clearable && appliedStaff.length && !disabled\"\n class=\"djm-org-clear\"\n type=\"button\"\n :aria-label=\"t('orgPicker.clear')\"\n @click.stop=\"clearAll\"\n >\u00D7</button>\n </span>\n </div>\n\n <Teleport to=\"body\">\n <div\n v-if=\"open\"\n ref=\"panel\"\n class=\"djm-org-panel\"\n :style=\"panelStyle\"\n role=\"dialog\"\n :aria-label=\"t('orgPicker.title')\"\n >\n <div class=\"djm-org-search\">\n <DjmIcon name=\"search\" :size=\"13\" />\n <input\n ref=\"searchRef\"\n v-model=\"keyword\"\n class=\"djm-org-search-input\"\n type=\"text\"\n autocomplete=\"off\"\n :placeholder=\"t('orgPicker.search')\"\n :aria-label=\"t('orgPicker.search')\"\n @keydown.enter.prevent=\"onSearchEnter\"\n />\n </div>\n\n <div class=\"djm-org-body\">\n <div class=\"djm-org-depts\" :aria-label=\"t('orgPicker.deptTree')\">\n <button\n class=\"djm-org-dept\"\n :class=\"{ 'djm-is-active': !activeDept }\"\n type=\"button\"\n @click=\"pickDept('')\"\n >{{ t('orgPicker.allStaff') }}</button>\n <div v-for=\"row in deptRows\" :key=\"row.node.id\" class=\"djm-org-dept-row\">\n <button\n class=\"djm-org-dept-toggle\"\n type=\"button\"\n :aria-label=\"row.hasChildren ? t('orgPicker.expand') : ''\"\n :tabindex=\"row.hasChildren ? 0 : -1\"\n @click.stop=\"row.hasChildren && toggleExpand(row.node)\"\n >\n <DjmIcon\n v-if=\"row.hasChildren\"\n name=\"chevron-right\"\n :size=\"11\"\n class=\"djm-org-dept-arrow\"\n :class=\"{ 'djm-is-expanded': expandedIds.has(row.node.id) }\"\n />\n </button>\n <button\n class=\"djm-org-dept-name\"\n :class=\"{ 'djm-is-active': activeDept === row.node.id }\"\n type=\"button\"\n :aria-pressed=\"String(activeDept === row.node.id)\"\n :style=\"{ paddingLeft: 4 + row.depth * 14 + 'px' }\"\n @click=\"pickDept(row.node.id)\"\n >{{ row.node.label }}</button>\n </div>\n </div>\n\n <div class=\"djm-org-staff\" role=\"listbox\" aria-multiselectable=\"true\">\n <div\n v-for=\"item in visibleStaff\"\n :key=\"item.id\"\n class=\"djm-org-staff-item\"\n :class=\"{ 'djm-is-selected': isSelected(item.id) }\"\n role=\"option\"\n tabindex=\"0\"\n :aria-selected=\"String(isSelected(item.id))\"\n @click=\"toggleStaff(item)\"\n @keydown.enter.prevent=\"toggleStaff(item)\"\n @keydown.space.prevent=\"toggleStaff(item)\"\n >\n <span class=\"djm-org-avatar\">\n <img v-if=\"item.avatar\" :src=\"item.avatar\" :alt=\"item.name\" />\n <span v-else>{{ initialOf(item) }}</span>\n </span>\n <span class=\"djm-org-staff-main\">\n <span class=\"djm-org-staff-name\">{{ item.name }}</span>\n <em v-if=\"item.title\" class=\"djm-org-staff-title\">{{ item.title }}</em>\n </span>\n <DjmIcon v-if=\"isSelected(item.id)\" name=\"check\" :size=\"13\" class=\"djm-org-check\" />\n </div>\n <div v-if=\"!visibleStaff.length\" class=\"djm-org-empty\">{{ emptyLabel }}</div>\n </div>\n </div>\n\n <div class=\"djm-org-foot\">\n <span class=\"djm-org-count\">{{ t('orgPicker.selected', { count: selectedCount }) }}</span>\n <div class=\"djm-org-actions\">\n <button class=\"djm-btn djm-btn-sm\" type=\"button\" @click=\"clearTemp\">{{ t('orgPicker.clearSelected') }}</button>\n <button class=\"djm-btn djm-btn-sm\" type=\"button\" @click=\"cancel\">{{ t('common.cancel') }}</button>\n <button\n v-if=\"showFooter\"\n class=\"djm-btn djm-btn-sm djm-btn-primary\"\n type=\"button\"\n @click=\"commit\"\n >{{ t('common.confirm') }}</button>\n </div>\n </div>\n </div>\n </Teleport>\n </div>\n `\n}\n", "/**\n * \u52A8\u6001\u8868\u5355\uFF1A\u6309 fields \u914D\u7F6E\u6E32\u67D3\u8868\u5355\u9879\uFF0C\u6821\u9A8C\u4EA4\u7ED9 DjmForm\n *\n * fields: [{\n * key, label, type, span, required, rules, default, hint, placeholder, disabled,\n * options, // select / radio / checkbox\n * props, // \u989D\u5916\u900F\u4F20\u7ED9\u63A7\u4EF6\uFF0C\u5982 { min: 1, step: 100 }\n * visibleWhen, // (model) => boolean\uFF0Cfalse \u65F6\u4E0D\u6E32\u67D3\u4E5F\u4E0D\u53C2\u4E0E\u6821\u9A8C\n * rows, // textarea\n * }]\n * \u652F\u6301\u7C7B\u578B\uFF1Ainput / textarea / password / number / select / radio / checkbox / switch /\n * date / time / cascader / treeSelect / rate / slider / color / static / custom\n * custom \u7528 <template #field-\u5B57\u6BB5\u540D=\"{ value, setValue, field, model }\"> \u81EA\u5B9A\u4E49\u5185\u5BB9\n */\nimport { computed, reactive, ref, watch } from 'vue'\nimport Form from '../form/index.js'\nimport FormItem from '../form-item/index.js'\nimport Row from '../grid/row.js'\nimport Col from '../grid/col.js'\nimport Input from '../input/index.js'\nimport InputNumber from '../input-number/index.js'\nimport Select from '../select/index.js'\nimport Radio from '../radio/index.js'\nimport Checkbox from '../checkbox/index.js'\nimport Switch from '../switch/index.js'\nimport DatePicker from '../date-picker/index.js'\nimport TimePicker from '../time-picker/index.js'\nimport Cascader from '../cascader/index.js'\nimport TreeSelect from '../tree-select/index.js'\nimport Rate from '../rate/index.js'\nimport Slider from '../slider/index.js'\nimport ColorPicker from '../color-picker/index.js'\n\n// \u7C7B\u578B -> \u63A7\u4EF6\uFF1B\u672A\u547D\u4E2D\u7684\u6309\u666E\u901A\u8F93\u5165\u6846\u5904\u7406\nconst CONTROL_MAP = {\n input: Input,\n number: InputNumber,\n select: Select,\n radio: Radio,\n checkbox: Checkbox,\n switch: Switch,\n date: DatePicker,\n time: TimePicker,\n cascader: Cascader,\n treeSelect: TreeSelect,\n rate: Rate,\n slider: Slider,\n color: ColorPicker\n}\n\nexport default {\n name: 'DjmSchemaForm',\n components: {\n DjmForm: Form,\n DjmFormItem: FormItem,\n DjmRow: Row,\n DjmCol: Col\n },\n props: {\n modelValue: { type: Object, default: () => ({}) },\n fields: { type: Array, default: () => [] },\n // \u5916\u90E8\u89C4\u5219\uFF0C\u4E0E\u5B57\u6BB5\u91CC\u7684 rules \u5408\u5E76\n rules: { type: Object, default: () => ({}) },\n labelWidth: { type: [String, Number], default: '' },\n // \u6574\u8868\u7981\u7528\n disabled: { type: Boolean, default: false },\n gap: { type: [Number, String], default: 12 }\n },\n emits: ['update:modelValue', 'change'],\n setup (props, { emit }) {\n // \u5185\u90E8\u6301\u6709 DjmForm \u5B9E\u4F8B\uFF1B\u5BF9\u5916\u901A\u8FC7 setup \u8FD4\u56DE\u7684 validate \u7B49\u65B9\u6CD5\u4F7F\u7528\n const innerForm = ref(null)\n // \u672C\u5730\u526F\u672C\uFF1A\u63A7\u4EF6\u76F4\u63A5\u6539\u8FD9\u91CC\uFF0C\u518D\u6574\u4F53\u56DE\u4F20\uFF0C\u907F\u514D\u53D7\u63A7\u5BF9\u8C61\u88AB\u5C31\u5730\u4FEE\u6539\n const model = reactive({ ...props.modelValue })\n\n // \u8865\u9F50\u5B57\u6BB5\u9ED8\u8BA4\u503C\uFF0C\u5F02\u6B65\u4E0B\u53D1\u7684 fields \u4E5F\u80FD\u751F\u6548\n watch(() => props.fields, (fields) => {\n fields.forEach((field) => {\n if (model[field.key] === undefined && field.default !== undefined) {\n model[field.key] = typeof field.default === 'function' ? field.default() : field.default\n }\n })\n }, { immediate: true, deep: true })\n\n watch(() => props.modelValue, (value) => {\n if (!value) return\n Object.keys(value).forEach((key) => {\n if (model[key] !== value[key]) model[key] = value[key]\n })\n }, { deep: true })\n\n watch(model, () => {\n emit('update:modelValue', { ...model })\n emit('change', { ...model })\n }, { deep: true })\n\n // \u5B57\u6BB5 rules \u4E0E\u5916\u90E8 rules \u5408\u5E76\uFF1Brequired \u5FEB\u6377\u5199\u6CD5\u81EA\u52A8\u8F6C\u6210\u89C4\u5219\n const formRules = computed(() => {\n const merged = { ...props.rules }\n props.fields.forEach((field) => {\n if (!field.required && !field.rules) return\n const list = [...(merged[field.key] || [])]\n if (field.required && !list.some((rule) => rule.required)) {\n list.unshift({ required: true, message: field.requiredMessage || (field.label || field.key) + ' \u4E3A\u5FC5\u586B\u9879' })\n }\n if (field.rules) list.push(...field.rules)\n merged[field.key] = list\n })\n return merged\n })\n\n // \u6761\u4EF6\u663E\u793A\uFF1A\u9690\u85CF\u7684\u5B57\u6BB5\u4E0D\u6E32\u67D3\uFF0C\u4E5F\u4E0D\u4F1A\u6CE8\u518C\u6821\u9A8C\n const visibleFields = computed(() =>\n props.fields.filter((field) => {\n if (typeof field.visibleWhen !== 'function') return true\n return Boolean(field.visibleWhen(model))\n })\n )\n\n function controlOf (field) {\n return CONTROL_MAP[field.type] || Input\n }\n\n function controlProps (field) {\n const extra = { ...(field.props || {}) }\n return {\n ...extra,\n // select / radio / checkbox \u7684\u9009\u9879\u7531\u5B57\u6BB5\u7EA7 options \u63D0\u4F9B\n options: field.options !== undefined ? field.options : extra.options,\n placeholder: field.placeholder !== undefined ? field.placeholder : extra.placeholder,\n disabled: props.disabled || Boolean(field.disabled)\n }\n }\n\n function setValue (key, value) {\n model[key] = value\n }\n\n function getModel () {\n return { ...model }\n }\n\n // \u900F\u4F20 DjmForm \u7684\u6821\u9A8C\u80FD\u529B\n function validate () {\n return innerForm.value ? innerForm.value.validate() : Promise.resolve(true)\n }\n\n function validateField (key) {\n return innerForm.value ? innerForm.value.validateField(key) : Promise.resolve(true)\n }\n\n function clearValidate () {\n if (innerForm.value) innerForm.value.clearValidate()\n }\n\n function resetFields () {\n if (innerForm.value) innerForm.value.resetFields()\n }\n\n return {\n innerForm, model, formRules, visibleFields,\n controlOf, controlProps, setValue, getModel,\n validate, validateField, clearValidate, resetFields\n }\n },\n template: `\n <DjmForm ref=\"innerForm\" :model=\"model\" :rules=\"formRules\" :label-width=\"labelWidth\">\n <DjmRow :gap=\"gap\">\n <DjmCol v-for=\"field in visibleFields\" :key=\"field.key\" :span=\"field.span || 12\">\n <DjmFormItem\n :label=\"field.label\"\n :prop=\"field.key\"\n :required=\"Boolean(field.required)\"\n :hint=\"field.hint\"\n :tag=\"(field.type === 'radio' || field.type === 'checkbox') ? 'div' : 'label'\"\n >\n <slot\n v-if=\"field.type === 'custom'\"\n :name=\"'field-' + field.key\"\n :field=\"field\"\n :model=\"model\"\n :value=\"model[field.key]\"\n :set-value=\"setValue\"\n >\n <span class=\"djm-schema-empty\">\u672A\u63D0\u4F9B\u81EA\u5B9A\u4E49\u63D2\u69FD</span>\n </slot>\n\n <textarea\n v-else-if=\"field.type === 'textarea'\"\n class=\"djm-input djm-schema-textarea\"\n :rows=\"field.rows || 3\"\n :value=\"model[field.key]\"\n v-bind=\"controlProps(field)\"\n @input=\"setValue(field.key, $event.target.value)\"\n ></textarea>\n\n <input\n v-else-if=\"field.type === 'password'\"\n class=\"djm-input\"\n type=\"password\"\n autocomplete=\"new-password\"\n :value=\"model[field.key]\"\n v-bind=\"controlProps(field)\"\n @input=\"setValue(field.key, $event.target.value)\"\n />\n\n <span v-else-if=\"field.type === 'static'\" class=\"djm-schema-static\">\n {{ model[field.key] === undefined || model[field.key] === '' ? '\u2014' : model[field.key] }}\n </span>\n\n <component\n v-else\n :is=\"controlOf(field)\"\n v-model=\"model[field.key]\"\n v-bind=\"controlProps(field)\"\n />\n </DjmFormItem>\n </DjmCol>\n </DjmRow>\n </DjmForm>\n `\n}\n", "/**\n * \u5BA1\u6279\u6D41\uFF1A\u6309\u987A\u5E8F\u5C55\u793A\u5BA1\u6279\u8282\u70B9\u3001\u4F1A\u7B7E\u4EBA\u5458\u4E0E\u5BA1\u6279\u610F\u89C1\n *\n * nodes: [{\n * title, // \u8282\u70B9\u540D\u79F0\uFF0C\u5982\u300C\u90E8\u95E8\u8D1F\u8D23\u4EBA\u5BA1\u6279\u300D\n * type, // start \u53D1\u8D77 | approve \u5BA1\u6279 | cc \u6284\u9001\n * status, // approved \u901A\u8FC7 | rejected \u9A73\u56DE | pending \u5904\u7406\u4E2D | waiting \u5F85\u5904\u7406\n * approvers: [{ name, avatar, title, status }],\n * time, comment // \u5904\u7406\u65F6\u95F4\u4E0E\u610F\u89C1\n * }]\n * \u8BF4\u660E\uFF1A\u53EA\u8D1F\u8D23\u5C55\u793A\uFF0C\u5BA1\u6279\u52A8\u4F5C\u7531\u4E1A\u52A1\u4FA7\u5728\u63D2\u69FD\u91CC\u653E\u6309\u94AE\n */\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\n\nexport default {\n name: 'DjmApprovalFlow',\n components: { DjmIcon: Icon },\n props: {\n nodes: { type: Array, default: () => [] },\n // \u7D27\u51D1\u6A21\u5F0F\uFF1A\u51CF\u5C0F\u884C\u8DDD\uFF0C\u7528\u4E8E\u4FA7\u680F\u6216\u5F39\u7A97\n compact: { type: Boolean, default: false }\n },\n emits: ['node-click'],\n computed: {\n // \u5DF2\u901A\u8FC7\u7684\u8282\u70B9\u8FDE\u7EBF\u67D3\u6210\u7EFF\u8272\uFF0C\u5176\u4F59\u4FDD\u6301\u7070\u8272\n list () {\n return this.nodes.map((node, index) => ({ ...node, index }))\n }\n },\n methods: {\n statusText (status) {\n return t('approval.' + (status || 'waiting'))\n },\n iconOf (node) {\n if (node.status === 'approved') return 'check'\n if (node.status === 'rejected') return 'x'\n if (node.status === 'pending') return 'clock'\n return ''\n },\n initialOf (person) {\n return (person.name || '').slice(0, 1)\n },\n t\n },\n template: `\n <div class=\"djm-approval\" :class=\"{ 'djm-is-compact': compact }\">\n <div\n v-for=\"node in list\"\n :key=\"node.index\"\n class=\"djm-approval-node\"\n :class=\"'djm-is-' + (node.status || 'waiting')\"\n @click=\"$emit('node-click', node)\"\n >\n <div class=\"djm-approval-axis\">\n <span class=\"djm-approval-dot\">\n <DjmIcon v-if=\"iconOf(node)\" :name=\"iconOf(node)\" :size=\"11\" />\n </span>\n <span v-if=\"node.index < list.length - 1\" class=\"djm-approval-line\"></span>\n </div>\n\n <div class=\"djm-approval-main\">\n <div class=\"djm-approval-head\">\n <span class=\"djm-approval-title\">{{ node.title }}</span>\n <span v-if=\"node.type === 'start'\" class=\"djm-approval-type\">{{ t('approval.start') }}</span>\n <span v-else-if=\"node.type === 'cc'\" class=\"djm-approval-type\">{{ t('approval.cc') }}</span>\n <span class=\"djm-approval-status\">{{ statusText(node.status) }}</span>\n <span v-if=\"node.time\" class=\"djm-approval-time\">{{ node.time }}</span>\n </div>\n\n <div v-if=\"node.approvers && node.approvers.length\" class=\"djm-approval-people\">\n <span v-for=\"person in node.approvers\" :key=\"person.name\" class=\"djm-approval-person\">\n <span class=\"djm-approval-avatar\">\n <img v-if=\"person.avatar\" :src=\"person.avatar\" :alt=\"person.name\" />\n <span v-else>{{ initialOf(person) }}</span>\n </span>\n <span class=\"djm-approval-name\">{{ person.name }}</span>\n <em v-if=\"person.title\" class=\"djm-approval-role\">{{ person.title }}</em>\n <span\n v-if=\"person.status\"\n class=\"djm-approval-person-status\"\n :class=\"'djm-is-' + person.status\"\n >{{ statusText(person.status) }}</span>\n </span>\n </div>\n\n <div v-if=\"node.comment\" class=\"djm-approval-comment\">{{ node.comment }}</div>\n\n <slot name=\"node-extra\" :node=\"node\" :index=\"node.index\"></slot>\n </div>\n </div>\n\n <div v-if=\"!nodes.length\" class=\"djm-approval-empty\">{{ t('approval.empty') }}</div>\n </div>\n `\n}\n", "/**\n * \u67E5\u8BE2\u7B5B\u9009\u533A\uFF1A\u5B57\u6BB5\u914D\u7F6E\u9A71\u52A8\uFF0C\u652F\u6301\u6298\u53E0\u4E0E\u67E5\u8BE2 / \u91CD\u7F6E\n *\n * fields: [{ key, label, type, options, placeholder, default, props }]\n * \u7C7B\u578B\uFF1Ainput / number / select / date / dateRange / cascader / treeSelect / custom\n * custom \u7528 <template #field-\u5B57\u6BB5\u540D=\"{ value, setValue, field }\"> \u81EA\u5B9A\u4E49\n *\n * \u7528\u6CD5\uFF1A\n * <DjmQueryFilter v-model=\"query\" :fields=\"fields\" @search=\"load\" />\n */\nimport { computed, reactive, ref, watch } from 'vue'\nimport Input from '../input/index.js'\nimport InputNumber from '../input-number/index.js'\nimport Select from '../select/index.js'\nimport DatePicker from '../date-picker/index.js'\nimport Cascader from '../cascader/index.js'\nimport TreeSelect from '../tree-select/index.js'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\n\nconst CONTROL_MAP = {\n input: Input,\n number: InputNumber,\n select: Select,\n date: DatePicker,\n dateRange: DatePicker,\n cascader: Cascader,\n treeSelect: TreeSelect\n}\n\nexport default {\n name: 'DjmQueryFilter',\n components: { DjmIcon: Icon },\n props: {\n modelValue: { type: Object, default: () => ({}) },\n fields: { type: Array, default: () => [] },\n // \u6536\u8D77\u72B6\u6001\u4E0B\u663E\u793A\u51E0\u4E2A\u6761\u4EF6\n visibleCount: { type: Number, default: 3 },\n // \u662F\u5426\u663E\u793A\u64CD\u4F5C\u6309\u94AE\n showActions: { type: Boolean, default: true },\n searchText: { type: String, default: '' },\n resetText: { type: String, default: '' }\n },\n emits: ['update:modelValue', 'search', 'reset'],\n setup (props, { emit }) {\n const expanded = ref(false)\n const model = reactive({ ...props.modelValue })\n\n // \u8865\u9F50\u9ED8\u8BA4\u503C\uFF0C\u4FDD\u8BC1\u91CD\u7F6E\u65F6\u80FD\u56DE\u5230\u4E00\u81F4\u7684\u72B6\u6001\n watch(() => props.fields, (fields) => {\n fields.forEach((field) => {\n if (model[field.key] === undefined && field.default !== undefined) {\n model[field.key] = typeof field.default === 'function' ? field.default() : field.default\n }\n })\n }, { immediate: true, deep: true })\n\n watch(() => props.modelValue, (value) => {\n if (!value) return\n Object.keys(value).forEach((key) => {\n if (model[key] !== value[key]) model[key] = value[key]\n })\n }, { deep: true })\n\n watch(model, () => {\n emit('update:modelValue', { ...model })\n }, { deep: true })\n\n const collapsible = computed(() => props.fields.length > props.visibleCount)\n\n const visibleFields = computed(() => {\n if (!collapsible.value || expanded.value) return props.fields\n return props.fields.slice(0, props.visibleCount)\n })\n\n function controlOf (field) {\n return CONTROL_MAP[field.type] || Input\n }\n\n function controlProps (field) {\n const extra = { ...(field.props || {}) }\n if (field.type === 'dateRange') {\n // \u7B5B\u9009\u533A\u7A7A\u95F4\u6709\u9650\uFF0C\u8303\u56F4\u9009\u62E9\u53EA\u5F00\u4E00\u4E2A\u9762\u677F\n extra.range = true\n extra.panels = 1\n }\n return {\n ...extra,\n // select / cascader / treeSelect \u7684\u9009\u9879\u7531\u5B57\u6BB5\u7EA7 options \u63D0\u4F9B\n options: field.options !== undefined ? field.options : extra.options,\n placeholder: field.placeholder !== undefined ? field.placeholder : extra.placeholder\n }\n }\n\n function setValue (key, value) {\n model[key] = value\n }\n\n function search () {\n emit('search', { ...model })\n }\n\n // \u5728\u8F93\u5165\u6846\u91CC\u56DE\u8F66\u76F4\u63A5\u67E5\u8BE2\uFF0C\u4E0B\u62C9\u9762\u677F\u91CC\u7684\u56DE\u8F66\u7559\u7ED9\u9009\u9879\u786E\u8BA4\n function onEnter (event) {\n const tag = event.target && event.target.tagName\n if (tag !== 'INPUT' && tag !== 'TEXTAREA') return\n if (event.target.closest('.djm-select-panel, .djm-date-picker-panel, .djm-cascader-panel, .djm-tree-select-panel')) return\n search()\n }\n\n function reset () {\n props.fields.forEach((field) => {\n model[field.key] = field.default !== undefined\n ? (typeof field.default === 'function' ? field.default() : field.default)\n : (field.type === 'dateRange' ? [] : '')\n })\n emit('reset')\n emit('search', { ...model })\n }\n\n return {\n expanded, model, collapsible, visibleFields,\n controlOf, controlProps, setValue, search, reset, onEnter, t\n }\n },\n template: `\n <div class=\"djm-query-filter\" @keydown.enter=\"onEnter\">\n <div class=\"djm-query-fields\">\n <div v-for=\"field in visibleFields\" :key=\"field.key\" class=\"djm-query-field\">\n <label class=\"djm-query-label\" :for=\"'djm-query-' + field.key\">{{ field.label }}</label>\n <div class=\"djm-query-control\">\n <slot\n v-if=\"field.type === 'custom'\"\n :name=\"'field-' + field.key\"\n :field=\"field\"\n :model=\"model\"\n :value=\"model[field.key]\"\n :set-value=\"setValue\"\n ></slot>\n <component\n v-else\n :is=\"controlOf(field)\"\n :id=\"'djm-query-' + field.key\"\n v-model=\"model[field.key]\"\n v-bind=\"controlProps(field)\"\n />\n </div>\n </div>\n </div>\n\n <div class=\"djm-query-actions\">\n <button v-if=\"showActions\" class=\"djm-btn djm-btn-primary\" type=\"button\" @click=\"search\">\n {{ searchText || t('queryFilter.search') }}\n </button>\n <button v-if=\"showActions\" class=\"djm-btn\" type=\"button\" @click=\"reset\">\n {{ resetText || t('queryFilter.reset') }}\n </button>\n <button\n v-if=\"collapsible\"\n class=\"djm-query-more\"\n type=\"button\"\n :aria-expanded=\"String(expanded)\"\n @click=\"expanded = !expanded\"\n >\n {{ expanded ? t('queryFilter.collapse') : t('queryFilter.expand') }}\n <DjmIcon :name=\"expanded ? 'chevron-up' : 'chevron-down'\" :size=\"12\" />\n </button>\n </div>\n </div>\n `\n}\n", "/**\n * \u7B5B\u9009\u6807\u7B7E\uFF1A\u628A\u5F53\u524D\u751F\u6548\u7684\u7B5B\u9009\u6761\u4EF6\u6E32\u67D3\u6210\u53EF\u79FB\u9664\u7684\u6807\u7B7E\n *\n * items: [{ key, label, text }]\uFF0Ctext \u4E3A\u5C55\u793A\u503C\uFF0C\u7531\u4E1A\u52A1\u4FA7\u683C\u5F0F\u5316\n * \u7528\u6CD5\uFF1A<DjmFilterTags :items=\"tags\" @remove=\"onRemove\" @clear=\"onClear\" />\n */\nexport default {\n name: 'DjmFilterTags',\n props: {\n items: { type: Array, default: () => [] },\n // \u662F\u5426\u663E\u793A\u300C\u6E05\u7A7A\u5168\u90E8\u300D\n clearable: { type: Boolean, default: true },\n clearText: { type: String, default: '\u6E05\u7A7A\u7B5B\u9009' }\n },\n emits: ['remove', 'clear'],\n template: `\n <div v-if=\"items.length\" class=\"djm-filter-tags\">\n <span v-for=\"item in items\" :key=\"item.key\" class=\"djm-filter-tag\">\n <span class=\"djm-filter-tag-label\">{{ item.label }}</span>\n <span class=\"djm-filter-tag-value\">{{ item.text }}</span>\n <button\n class=\"djm-filter-tag-close\"\n type=\"button\"\n :aria-label=\"'\u79FB\u9664\u7B5B\u9009 ' + item.label\"\n @click=\"$emit('remove', item.key)\"\n >\u00D7</button>\n </span>\n <button v-if=\"clearable\" class=\"djm-filter-clear\" type=\"button\" @click=\"$emit('clear')\">\n {{ clearText }}\n </button>\n </div>\n `\n}\n", "/**\n * \u5A92\u4F53\u5E93\u9009\u62E9\u5668\uFF1A\u5F39\u7A97\u7F51\u683C\u9009\u7D20\u6750\uFF0C\u652F\u6301\u641C\u7D22\u3001\u5206\u9875\u3001\u5355\u9009 / \u591A\u9009\n *\n * items: [{ id, url, name, type: 'image' | 'file', size }]\n * v-model\uFF1A\u53EF\u591A\u4E3A id \u6570\u7EC4\uFF1B\u5355\u9009\u4E3A\u5355\u4E2A id\n * \u7528\u6CD5\uFF1A\n * <DjmMediaPicker v-model=\"cover\" :items=\"assets\" multiple @change=\"onPick\" />\n * \u4E0A\u4F20\u5165\u53E3\u653E\u5728 <template #toolbar> \u91CC\uFF0C\u7EC4\u4EF6\u4E0D\u5185\u7F6E\u4E0A\u4F20\u903B\u8F91\n */\nimport { computed, ref, watch } from 'vue'\nimport Modal from '../modal/index.js'\nimport Pagination from '../pagination/index.js'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\n\nexport default {\n name: 'DjmMediaPicker',\n components: { DjmModal: Modal, DjmPagination: Pagination, DjmIcon: Icon },\n props: {\n modelValue: { type: [Array, String, Number], default: '' },\n items: { type: Array, default: () => [] },\n multiple: { type: Boolean, default: false },\n // \u6700\u591A\u9009\u51E0\u4E2A\uFF0C0 \u8868\u793A\u4E0D\u9650\n limit: { type: Number, default: 0 },\n // image \u53EA\u663E\u793A\u56FE\u7247\uFF0Cfile \u53EA\u663E\u793A\u975E\u56FE\u7247\uFF0C\u7A7A\u4E32\u4E0D\u8FC7\u6EE4\n accept: { type: String, default: '' },\n title: { type: String, default: '' },\n triggerText: { type: String, default: '' },\n pageSize: { type: Number, default: 12 },\n disabled: { type: Boolean, default: false }\n },\n emits: ['update:modelValue', 'change'],\n setup (props, { emit }) {\n const open = ref(false)\n const keyword = ref('')\n const page = ref(1)\n // \u5F39\u7A97\u5185\u7684\u4E34\u65F6\u9009\u62E9\uFF0C\u786E\u5B9A\u540E\u624D\u56DE\u4F20\n const temp = ref([])\n\n const selectedIds = computed(() => {\n if (props.multiple) return Array.isArray(props.modelValue) ? props.modelValue : []\n if (props.modelValue === '' || props.modelValue === null || props.modelValue === undefined) return []\n return [props.modelValue]\n })\n\n function isImage (item) {\n if (item.type) return item.type === 'image'\n return /\\.(png|jpe?g|gif|webp|svg|avif)$/i.test(item.url || '')\n }\n\n const filtered = computed(() => {\n const key = keyword.value.trim().toLowerCase()\n return props.items.filter((item) => {\n if (props.accept === 'image' && !isImage(item)) return false\n if (props.accept === 'file' && isImage(item)) return false\n if (key && !String(item.name || '').toLowerCase().includes(key)) return false\n return true\n })\n })\n\n const paged = computed(() => {\n const start = (page.value - 1) * props.pageSize\n return filtered.value.slice(start, start + props.pageSize)\n })\n\n watch(keyword, () => {\n page.value = 1\n })\n\n // \u5220\u9664/\u4E0A\u4F20\u540E\u603B\u6570\u53D8\u5C11\uFF0C\u9875\u7801\u4E0D\u80FD\u505C\u5728\u8D8A\u754C\u4F4D\u7F6E\n watch(\n () => filtered.value.length,\n () => {\n const max = Math.max(1, Math.ceil(filtered.value.length / props.pageSize))\n if (page.value > max) page.value = max\n }\n )\n\n function isChecked (id) {\n return temp.value.includes(id)\n }\n\n function atLimit () {\n return props.limit > 0 && temp.value.length >= props.limit\n }\n\n function toggle (item) {\n if (props.multiple) {\n if (isChecked(item.id)) {\n temp.value = temp.value.filter((id) => id !== item.id)\n return\n }\n if (atLimit()) return\n temp.value = [...temp.value, item.id]\n return\n }\n temp.value = [item.id]\n }\n\n function openPanel () {\n if (props.disabled) return\n temp.value = [...selectedIds.value]\n keyword.value = ''\n page.value = 1\n open.value = true\n }\n\n function commit () {\n const next = props.multiple ? [...temp.value] : (temp.value[0] !== undefined ? temp.value[0] : '')\n emit('update:modelValue', next)\n emit('change', next)\n open.value = false\n }\n\n function cancel () {\n temp.value = [...selectedIds.value]\n open.value = false\n }\n\n return {\n open, keyword, page, temp, selectedIds, filtered, paged,\n isImage, isChecked, atLimit, toggle, openPanel, commit, cancel, t\n }\n },\n template: `\n <span class=\"djm-media-picker\">\n <slot name=\"trigger\" :open=\"openPanel\" :count=\"selectedIds.length\">\n <button\n class=\"djm-btn\"\n type=\"button\"\n :disabled=\"disabled\"\n @click=\"openPanel\"\n >{{ triggerText || t('mediaPicker.select') }}<span v-if=\"selectedIds.length\" class=\"djm-media-picker-count\">{{ selectedIds.length }}</span></button>\n </slot>\n\n <DjmModal\n :model-value=\"open\"\n :title=\"title || t('mediaPicker.title')\"\n width=\"760px\"\n @update:model-value=\"cancel\"\n >\n <div class=\"djm-media-toolbar\">\n <label class=\"djm-media-search\">\n <DjmIcon name=\"search\" :size=\"13\" />\n <input\n v-model=\"keyword\"\n class=\"djm-media-search-input\"\n type=\"text\"\n :placeholder=\"t('mediaPicker.search')\"\n :aria-label=\"t('mediaPicker.search')\"\n />\n </label>\n <span class=\"djm-media-toolbar-slot\">\n <slot name=\"toolbar\"></slot>\n </span>\n </div>\n\n <div class=\"djm-media-grid\" role=\"listbox\" :aria-multiselectable=\"multiple ? 'true' : 'false'\">\n <div\n v-for=\"item in paged\"\n :key=\"item.id\"\n class=\"djm-media-item\"\n :class=\"{\n 'djm-is-checked': isChecked(item.id),\n 'djm-is-disabled': multiple && atLimit() && !isChecked(item.id)\n }\"\n role=\"option\"\n tabindex=\"0\"\n :aria-selected=\"String(isChecked(item.id))\"\n @click=\"toggle(item)\"\n @keydown.enter.prevent=\"toggle(item)\"\n @keydown.space.prevent=\"toggle(item)\"\n >\n <div class=\"djm-media-thumb\">\n <img v-if=\"isImage(item)\" :src=\"item.url\" :alt=\"item.name\" loading=\"lazy\" />\n <DjmIcon v-else name=\"folder\" :size=\"26\" />\n <span v-if=\"isChecked(item.id)\" class=\"djm-media-check\">\n <DjmIcon name=\"check\" :size=\"11\" />\n </span>\n </div>\n <div class=\"djm-media-name\" :title=\"item.name\">{{ item.name }}</div>\n </div>\n <div v-if=\"!paged.length\" class=\"djm-media-empty\">{{ t('mediaPicker.empty') }}</div>\n </div>\n\n <div class=\"djm-media-foot\">\n <span class=\"djm-media-total\">\n {{ t('mediaPicker.total', { total: filtered.length }) }}\n <em v-if=\"multiple && limit > 0\">{{ t('mediaPicker.limit', { limit }) }}</em>\n </span>\n <DjmPagination\n v-if=\"filtered.length > pageSize\"\n v-model:page=\"page\"\n :page-size=\"pageSize\"\n :total=\"filtered.length\"\n />\n </div>\n\n <template #footer>\n <button class=\"djm-btn\" type=\"button\" @click=\"cancel\">{{ t('common.cancel') }}</button>\n <button class=\"djm-btn djm-btn-primary\" type=\"button\" @click=\"commit\">{{ t('common.confirm') }}</button>\n </template>\n </DjmModal>\n </span>\n `\n}\n", "import { ref, watch } from 'vue'\nimport Icon from '../icon/index.js'\nimport Avatar from '../avatar/index.js'\nimport { t } from '../../locale/index.js'\n\n/** \u514B\u9686\u5217\u7ED3\u6784\uFF1A\u5217\u4E0E\u5361\u7247\u6570\u7EC4\u6362\u65B0\u5F15\u7528\uFF0C\u5361\u7247\u5BF9\u8C61\u4FDD\u6301\u539F\u5F15\u7528 */\nfunction cloneColumns (list) {\n return (list || []).map((col) => ({ ...col, cards: (col.cards || []).slice() }))\n}\n\n/**\n * \u770B\u677F\uFF1A\u5217\u5F0F\u5361\u7247\u62D6\u62FD\uFF0CCRM \u7BA1\u7EBF / OA \u4EFB\u52A1\u6D41\u8F6C\u573A\u666F\n *\n * \u7528\u6CD5\uFF1A<DjmKanban v-model:columns=\"columns\" @card-move=\"onMove\" />\n * columns: [{ key, title, wipLimit, cards: [{ id, title, desc, tags, assignee, avatar }] }]\n * \u62D6\u62FD\u540E\u5185\u90E8\u7ACB\u5373\u66F4\u65B0\u5E76\u56DE\u4F20\u6574\u4EFD columns\uFF1Bcard-move \u643A\u5E26 { card, fromKey, toKey, toIndex }\n */\nexport default {\n name: 'DjmKanban',\n components: { DjmIcon: Icon, DjmAvatar: Avatar },\n props: {\n columns: { type: Array, default: () => [] },\n // \u5361\u7247\u53EF\u62D6\u62FD\n draggable: { type: Boolean, default: true },\n // \u5217\u5E95\u90E8\u300C\u65B0\u5EFA\u5361\u7247\u300D\u5165\u53E3\n showAddCard: { type: Boolean, default: true },\n addCardText: { type: String, default: '' }\n },\n emits: ['update:columns', 'change', 'card-move', 'card-click', 'card-add'],\n setup (props, { emit }) {\n // \u672C\u5730\u526F\u672C\uFF1A\u62D6\u62FD\u662F\u8FDE\u7EED\u4EA4\u4E92\uFF0C\u5148\u672C\u5730\u843D\u5730\u518D\u56DE\u4F20\uFF0C\u907F\u514D\u53D7\u63A7\u6E32\u67D3\u6253\u65AD\u624B\u611F\n const inner = ref(cloneColumns(props.columns))\n watch(\n () => props.columns,\n (list) => {\n inner.value = cloneColumns(list)\n }\n )\n\n // \u62D6\u62FD\u72B6\u6001\uFF1A\u6765\u6E90\u5361\u7247\u4E0E\u5F53\u524D\u63D2\u5165\u70B9\n const dragCard = ref(null)\n const dropTarget = ref(null)\n\n function columnOf (key) {\n return inner.value.find((col) => col.key === key)\n }\n\n function onDragStart (card, columnKey, event) {\n if (!props.draggable) return\n dragCard.value = { card, fromKey: columnKey }\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move'\n event.dataTransfer.setData('text/plain', String(card.id))\n }\n }\n\n // \u62D6\u5230\u67D0\u5F20\u5361\u7247\u4E0A = \u63D2\u5230\u5B83\u524D\u9762\uFF1B\u62D6\u5230\u5217\u7A7A\u767D\u533A = \u8FFD\u52A0\u5230\u672B\u5C3E\n function onCardDragOver (columnKey, index, event) {\n if (!dragCard.value) return\n event.preventDefault()\n event.stopPropagation()\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'move'\n dropTarget.value = { columnKey, index }\n }\n\n function onColumnDragOver (columnKey, event) {\n if (!dragCard.value) return\n event.preventDefault()\n if (event.dataTransfer) event.dataTransfer.dropEffect = 'move'\n const col = columnOf(columnKey)\n dropTarget.value = { columnKey, index: col ? col.cards.length : 0 }\n }\n\n function onDrop (event) {\n if (!dragCard.value || !dropTarget.value) return\n event.preventDefault()\n const { card, fromKey } = dragCard.value\n const { columnKey: toKey, index: toIndex } = dropTarget.value\n\n const from = columnOf(fromKey)\n const to = columnOf(toKey)\n if (!from || !to) {\n resetDrag()\n return\n }\n\n const fromIndex = from.cards.findIndex((item) => item === card || item.id === card.id)\n if (fromIndex === -1) {\n resetDrag()\n return\n }\n\n // \u540C\u4E00\u5217\u5185\u5F80\u540E\u632A\u65F6\uFF0C\u5148\u5220\u6389\u539F\u4F4D\u7F6E\u540E\u4E0B\u6807\u8981\u51CF\u4E00\n let target = toIndex\n if (fromKey === toKey && fromIndex < toIndex) target = toIndex - 1\n\n from.cards.splice(fromIndex, 1)\n to.cards.splice(target, 0, card)\n\n const next = inner.value.slice()\n emit('update:columns', next)\n emit('change', next)\n emit('card-move', { card, fromKey, toKey, toIndex: target })\n resetDrag()\n }\n\n function resetDrag () {\n dragCard.value = null\n dropTarget.value = null\n }\n\n function isDropBefore (columnKey, index) {\n const target = dropTarget.value\n return Boolean(target && target.columnKey === columnKey && target.index === index)\n }\n\n function isDropEnd (column) {\n const target = dropTarget.value\n return Boolean(target && target.columnKey === column.key && target.index === column.cards.length)\n }\n\n function isDragging (card) {\n return Boolean(dragCard.value && dragCard.value.card === card)\n }\n\n // \u5728\u5236\u6570\u91CF\u8D85\u9650\u63D0\u793A\n function wipOver (column) {\n return column.wipLimit > 0 && column.cards.length > column.wipLimit\n }\n\n function onCardClick (card, column) {\n emit('card-click', card, column)\n }\n\n function onCardAdd (column) {\n emit('card-add', column)\n }\n\n return {\n inner,\n dragCard,\n dropTarget,\n onDragStart,\n onCardDragOver,\n onColumnDragOver,\n onDrop,\n resetDrag,\n isDropBefore,\n isDropEnd,\n isDragging,\n wipOver,\n onCardClick,\n onCardAdd,\n t\n }\n },\n template: `\n <div class=\"djm-kanban\" role=\"list\" :aria-label=\"t('kanban.board')\">\n <section\n v-for=\"column in inner\"\n :key=\"column.key\"\n class=\"djm-kanban-col\"\n role=\"listitem\"\n @dragover=\"onColumnDragOver(column.key, $event)\"\n @drop=\"onDrop\"\n >\n <header class=\"djm-kanban-col-head\">\n <slot name=\"column-header\" :column=\"column\">\n <span class=\"djm-kanban-col-title\">{{ column.title }}</span>\n <span class=\"djm-kanban-col-count\" :class=\"{ 'djm-is-over': wipOver(column) }\">\n {{ column.cards.length }}<template v-if=\"column.wipLimit > 0\">/{{ column.wipLimit }}</template>\n </span>\n </slot>\n </header>\n\n <div class=\"djm-kanban-col-body\" :class=\"{ 'djm-is-drop-end': isDropEnd(column) }\">\n <template v-for=\"(card, index) in column.cards\" :key=\"card.id\">\n <div v-if=\"isDropBefore(column.key, index)\" class=\"djm-kanban-drop-line\"></div>\n <article\n class=\"djm-kanban-card\"\n :class=\"{ 'djm-is-dragging': isDragging(card) }\"\n :draggable=\"draggable ? 'true' : 'false'\"\n tabindex=\"0\"\n role=\"button\"\n @dragstart=\"onDragStart(card, column.key, $event)\"\n @dragover=\"onCardDragOver(column.key, index, $event)\"\n @drop=\"onDrop\"\n @dragend=\"resetDrag\"\n @click=\"onCardClick(card, column)\"\n @keydown.enter.prevent=\"onCardClick(card, column)\"\n @keydown.space.prevent=\"onCardClick(card, column)\"\n >\n <slot name=\"card\" :card=\"card\" :column=\"column\">\n <strong class=\"djm-kanban-card-title\">{{ card.title }}</strong>\n <p v-if=\"card.desc\" class=\"djm-kanban-card-desc\">{{ card.desc }}</p>\n <div v-if=\"(card.tags && card.tags.length) || card.assignee\" class=\"djm-kanban-card-foot\">\n <span v-if=\"card.tags && card.tags.length\" class=\"djm-kanban-card-tags\">\n <span v-for=\"tag in card.tags\" :key=\"tag\" class=\"djm-kanban-tag\">{{ tag }}</span>\n </span>\n <span v-if=\"card.assignee\" class=\"djm-kanban-card-user\">\n <DjmAvatar :src=\"card.avatar || ''\" :text=\"card.assignee\" size=\"sm\" />\n <span>{{ card.assignee }}</span>\n </span>\n </div>\n </slot>\n </article>\n </template>\n\n <div v-if=\"!column.cards.length\" class=\"djm-kanban-empty\">{{ t('kanban.empty') }}</div>\n <div v-if=\"isDropEnd(column)\" class=\"djm-kanban-drop-line\"></div>\n </div>\n\n <footer v-if=\"showAddCard\" class=\"djm-kanban-col-foot\">\n <slot name=\"column-footer\" :column=\"column\">\n <button class=\"djm-kanban-add\" type=\"button\" @click=\"onCardAdd(column)\">\n <DjmIcon name=\"plus\" :size=\"14\" />{{ addCardText || t('kanban.addCard') }}\n </button>\n </slot>\n </footer>\n </section>\n </div>\n `\n}\n", "import { computed } from 'vue'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\nimport { formatFileSize } from '../upload/index.js'\n\nconst IMAGE_EXTS = ['png', 'jpg', 'jpeg', 'gif', 'webp', 'bmp', 'svg']\n\n/** \u53D6\u6269\u5C55\u540D\uFF08\u5C0F\u5199\uFF0C\u4E0D\u542B\u70B9\uFF09 */\nfunction extOf (file) {\n if (file.ext) return String(file.ext).toLowerCase()\n const name = file.name || ''\n const index = name.lastIndexOf('.')\n return index === -1 ? '' : name.slice(index + 1).toLowerCase()\n}\n\n/**\n * \u9644\u4EF6\u5217\u8868\uFF1A\u5DF2\u4E0A\u4F20\u6587\u4EF6\u7684\u5C55\u793A\u4E0E\u64CD\u4F5C\uFF0COA \u5355\u636E / CMS \u5185\u5BB9\u901A\u7528\n *\n * \u7528\u6CD5\uFF1A<DjmAttachmentList :files=\"files\" @remove=\"onRemove\" />\n * files: [{ uid, name, size, ext, url, type, uploader, time }]\n * \u53EA\u8D1F\u8D23\u5C55\u793A\u4E0E\u629B\u51FA\u52A8\u4F5C\uFF0C\u5217\u8868\u589E\u5220\u7531\u4E1A\u52A1\u4FA7\u63A7\u5236\uFF1B\u4E0A\u4F20\u5165\u53E3\u7528 DjmUpload\n */\nexport default {\n name: 'DjmAttachmentList',\n components: { DjmIcon: Icon },\n props: {\n files: { type: Array, default: () => [] },\n // list\uFF1A\u884C\u5F0F\uFF1Bgrid\uFF1A\u56FE\u7247\u5899\n mode: { type: String, default: 'list' },\n removable: { type: Boolean, default: true },\n downloadable: { type: Boolean, default: true },\n previewable: { type: Boolean, default: true },\n // \u6709 url \u65F6\u70B9\u51FB\u4E0B\u8F7D\u76F4\u63A5\u89E6\u53D1\u6D4F\u89C8\u5668\u4E0B\u8F7D\uFF1B\u5173\u95ED\u540E\u4EC5\u629B\u4E8B\u4EF6\n autoDownload: { type: Boolean, default: true },\n emptyText: { type: String, default: '' }\n },\n emits: ['preview', 'download', 'remove'],\n setup (props, { emit }) {\n const list = computed(() =>\n props.files.map((file, index) => {\n const ext = extOf(file)\n const isImage = file.type === 'image' || IMAGE_EXTS.includes(ext)\n return { ...file, _key: file.uid !== undefined ? file.uid : index, _ext: ext, _isImage: isImage }\n })\n )\n\n const emptyLabel = computed(() => props.emptyText || t('attachment.empty'))\n\n function onPreview (file) {\n emit('preview', file)\n }\n\n function onDownload (file) {\n emit('download', file)\n // \u9ED8\u8BA4\u884C\u4E3A\uFF1A\u6709 url \u76F4\u63A5\u89E6\u53D1\u6D4F\u89C8\u5668\u4E0B\u8F7D\n if (props.autoDownload && file.url) {\n const a = document.createElement('a')\n a.href = file.url\n a.download = file.name || ''\n a.rel = 'noopener'\n document.body.appendChild(a)\n a.click()\n a.remove()\n }\n }\n\n function onRemove (file) {\n emit('remove', file)\n }\n\n return {\n list,\n emptyLabel,\n onPreview,\n onDownload,\n onRemove,\n formatFileSize,\n t\n }\n },\n template: `\n <div class=\"djm-attachment\" :class=\"'djm-attachment-' + mode\">\n <p v-if=\"!list.length\" class=\"djm-attachment-empty\">{{ emptyLabel }}</p>\n\n <ul v-else-if=\"mode === 'list'\" class=\"djm-attachment-list\">\n <li v-for=\"file in list\" :key=\"file._key\" class=\"djm-attachment-item\">\n <span class=\"djm-attachment-thumb\" :class=\"{ 'djm-is-image': file._isImage && file.url }\">\n <img v-if=\"file._isImage && file.url\" :src=\"file.url\" :alt=\"file.name\" />\n <DjmIcon v-else name=\"file\" :size=\"18\" />\n </span>\n\n <div class=\"djm-attachment-main\">\n <strong class=\"djm-attachment-name\" :title=\"file.name\">{{ file.name }}</strong>\n <span class=\"djm-attachment-meta\">\n {{ formatFileSize(file.size) }}<template v-if=\"file.uploader\"> \u00B7 {{ file.uploader }}</template><template v-if=\"file.time\"> \u00B7 {{ file.time }}</template>\n </span>\n </div>\n\n <div class=\"djm-attachment-actions\">\n <slot name=\"actions\" :file=\"file\">\n <button\n v-if=\"previewable && file._isImage\"\n class=\"djm-link-btn\"\n type=\"button\"\n @click=\"onPreview(file)\"\n >{{ t('attachment.preview') }}</button>\n <button\n v-if=\"downloadable\"\n class=\"djm-link-btn\"\n type=\"button\"\n @click=\"onDownload(file)\"\n >{{ t('attachment.download') }}</button>\n <button\n v-if=\"removable\"\n class=\"djm-link-btn djm-danger\"\n type=\"button\"\n @click=\"onRemove(file)\"\n >{{ t('attachment.remove') }}</button>\n </slot>\n </div>\n </li>\n </ul>\n\n <div v-else class=\"djm-attachment-grid\">\n <figure v-for=\"file in list\" :key=\"file._key\" class=\"djm-attachment-cell\">\n <span class=\"djm-attachment-cell-thumb\" :class=\"{ 'djm-is-image': file._isImage && file.url }\">\n <img v-if=\"file._isImage && file.url\" :src=\"file.url\" :alt=\"file.name\" />\n <DjmIcon v-else name=\"file\" :size=\"24\" />\n </span>\n <figcaption :title=\"file.name\">{{ file.name }}</figcaption>\n <span class=\"djm-attachment-cell-mask\">\n <button\n v-if=\"previewable && file._isImage\"\n type=\"button\"\n :aria-label=\"t('attachment.preview')\"\n @click=\"onPreview(file)\"\n ><DjmIcon name=\"eye\" :size=\"14\" /></button>\n <button\n v-if=\"downloadable\"\n type=\"button\"\n :aria-label=\"t('attachment.download')\"\n @click=\"onDownload(file)\"\n ><DjmIcon name=\"download\" :size=\"14\" /></button>\n <button\n v-if=\"removable\"\n type=\"button\"\n :aria-label=\"t('attachment.remove')\"\n @click=\"onRemove(file)\"\n ><DjmIcon name=\"trash\" :size=\"14\" /></button>\n </span>\n </figure>\n </div>\n </div>\n `\n}\n", "import { computed, onBeforeUnmount, ref } from 'vue'\nimport Icon from '../icon/index.js'\nimport Avatar from '../avatar/index.js'\nimport { t } from '../../locale/index.js'\n\n// \u7C7B\u578B \u2192 \u56FE\u6807\u4E0E\u8BED\u4E49\u8272\u7C7B\u540D\nconst TYPE_MAP = {\n info: { icon: 'info', cls: 'djm-is-info' },\n success: { icon: 'check', cls: 'djm-is-success' },\n warning: { icon: 'alert', cls: 'djm-is-warning' },\n error: { icon: 'alert', cls: 'djm-is-error' }\n}\n\n/**\n * \u901A\u77E5\u5217\u8868\uFF1A\u6D88\u606F\u4E2D\u5FC3\u6761\u76EE\u5C55\u793A\uFF0C\u652F\u6301\u5DF2\u8BFB/\u5220\u9664/\u6E05\u7A7A\n *\n * \u7528\u6CD5\uFF1A<DjmNotification :items=\"items\" @read-all=\"onReadAll\" />\n * items: [{ id, type: info|success|warning|error, title, content, time, read, avatar }]\n * time \u7531\u4E1A\u52A1\u4FA7\u683C\u5F0F\u5316\u6210\u5317\u4EAC\u65F6\u95F4\u5B57\u7B26\u4E32\u4F20\u5165\uFF0C\u7EC4\u4EF6\u53EA\u505A\u5C55\u793A\n */\nexport default {\n name: 'DjmNotification',\n components: { DjmIcon: Icon, DjmAvatar: Avatar },\n props: {\n items: { type: Array, default: () => [] },\n // \u9876\u90E8\u5DE5\u5177\u680F\uFF1A\u672A\u8BFB\u6570 + \u5168\u90E8\u5DF2\u8BFB + \u6E05\u7A7A\n showToolbar: { type: Boolean, default: true },\n // \u5355\u6761\u53EF\u79FB\u9664\n removable: { type: Boolean, default: true },\n emptyText: { type: String, default: '' }\n },\n emits: ['click', 'read', 'read-all', 'remove', 'clear'],\n setup (props, { emit }) {\n const unreadCount = computed(() => props.items.filter((item) => !item.read).length)\n const emptyLabel = computed(() => props.emptyText || t('notification.empty'))\n\n function typeOf (item) {\n return TYPE_MAP[item.type] || TYPE_MAP.info\n }\n\n function onClick (item) {\n emit('click', item)\n // \u70B9\u51FB\u672A\u8BFB\u6761\u76EE\u987A\u5E26\u629B\u51FA\u5DF2\u8BFB\uFF0C\u4E1A\u52A1\u4E00\u6B21\u5904\u7406\n if (!item.read) emit('read', item)\n }\n\n function onReadAll () {\n emit('read-all')\n }\n\n // \u6E05\u7A7A\u662F\u4E0D\u53EF\u64A4\u9500\u64CD\u4F5C\uFF0C\u70B9\u4E24\u6B21\u624D\u771F\u6B63\u89E6\u53D1\uFF0C3 \u79D2\u540E\u81EA\u52A8\u56DE\u5230\u521D\u59CB\u6587\u6848\n const clearing = ref(false)\n let clearTimer = null\n\n function onClear () {\n if (!clearing.value) {\n clearing.value = true\n clearTimer = window.setTimeout(() => { clearing.value = false }, 3000)\n return\n }\n window.clearTimeout(clearTimer)\n clearing.value = false\n emit('clear')\n }\n\n onBeforeUnmount(() => window.clearTimeout(clearTimer))\n\n function onRemove (item) {\n emit('remove', item)\n }\n\n return {\n unreadCount,\n emptyLabel,\n clearing,\n typeOf,\n onClick,\n onReadAll,\n onClear,\n onRemove,\n t\n }\n },\n template: `\n <div class=\"djm-notification\">\n <header v-if=\"showToolbar\" class=\"djm-notification-bar\">\n <span class=\"djm-notification-count\">\n <DjmIcon name=\"bell\" :size=\"14\" />\n {{ t('notification.unread', { count: unreadCount }) }}\n </span>\n <span class=\"djm-notification-tools\">\n <button class=\"djm-link-btn\" type=\"button\" :disabled=\"!unreadCount\" @click=\"onReadAll\">\n {{ t('notification.readAll') }}\n </button>\n <button class=\"djm-link-btn djm-danger\" type=\"button\" :disabled=\"!items.length\" @click=\"onClear\">\n {{ clearing ? t('notification.clearConfirm') : t('notification.clear') }}\n </button>\n </span>\n </header>\n\n <p v-if=\"!items.length\" class=\"djm-notification-empty\">{{ emptyLabel }}</p>\n\n <ul v-else class=\"djm-notification-list\">\n <li\n v-for=\"item in items\"\n :key=\"item.id\"\n class=\"djm-notification-item\"\n :class=\"{ 'djm-is-unread': !item.read }\"\n tabindex=\"0\"\n @click=\"onClick(item)\"\n @keydown.enter=\"onClick(item)\"\n >\n <slot name=\"icon\" :item=\"item\">\n <DjmAvatar v-if=\"item.avatar\" :src=\"item.avatar\" size=\"sm\" />\n <span v-else class=\"djm-notification-badge\" :class=\"typeOf(item).cls\">\n <DjmIcon :name=\"typeOf(item).icon\" :size=\"14\" />\n </span>\n </slot>\n\n <div class=\"djm-notification-main\">\n <div class=\"djm-notification-top\">\n <strong class=\"djm-notification-title\">{{ item.title }}</strong>\n <time v-if=\"item.time\" class=\"djm-notification-time\">{{ item.time }}</time>\n </div>\n <p v-if=\"item.content\" class=\"djm-notification-content\">{{ item.content }}</p>\n </div>\n\n <span v-if=\"!item.read\" class=\"djm-notification-dot\" aria-hidden=\"true\"></span>\n <button\n v-if=\"removable\"\n class=\"djm-notification-remove\"\n type=\"button\"\n :aria-label=\"t('common.close')\"\n @click.stop=\"onRemove(item)\"\n ><DjmIcon name=\"x\" :size=\"12\" /></button>\n </li>\n </ul>\n </div>\n `\n}\n", "import { watch } from 'vue'\nimport { setLocale } from '../../locale/index.js'\n\n// size \u6620\u5C04\u5230\u63A7\u4EF6\u9AD8\u5EA6\u53D8\u91CF\uFF0Cxs/sm/md/lg \u5BF9\u5E94 24/28/30/34\nconst SIZE_HEIGHT = { xs: '24px', sm: '28px', md: '30px', lg: '34px' }\n\n/**\n * \u5168\u5C40\u914D\u7F6E\uFF1A\u7EDF\u4E00\u8BED\u8A00\u4E0E\u63A7\u4EF6\u5C3A\u5BF8\n *\n * \u7528\u6CD5\uFF1A<DjmConfigProvider locale=\"zh-CN\" size=\"md\">\u2026\u5E94\u7528\u2026</DjmConfigProvider>\n * locale \u76F4\u63A5\u9A71\u52A8\u5168\u5C40\u8BED\u8A00\uFF1Bsize \u901A\u8FC7 --djm-control-h \u53D8\u91CF\u4F5C\u7528\u4E8E Button / Input / Select\uFF0C\n * \u7EC4\u4EF6\u81EA\u8EAB\u663E\u5F0F\u4F20\u5165\u7684 size \u4F18\u5148\u7EA7\u66F4\u9AD8\n */\nexport default {\n name: 'DjmConfigProvider',\n props: {\n locale: { type: String, default: '' },\n size: { type: String, default: '' }\n },\n setup (props) {\n if (props.locale) setLocale(props.locale)\n watch(\n () => props.locale,\n (code) => {\n if (code) setLocale(code)\n }\n )\n return {\n // \u5185\u8054\u53D8\u91CF\uFF0C\u53EA\u5F71\u54CD\u8BE5\u5BB9\u5668\u5B50\u6811\n providerStyle () {\n const height = SIZE_HEIGHT[props.size]\n return height ? { '--djm-control-h': height } : {}\n }\n }\n },\n template: `\n <div class=\"djm-config-provider\" :style=\"providerStyle()\">\n <slot></slot>\n </div>\n `\n}\n", "import { ref, computed, watch, onBeforeUnmount } from 'vue'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\nimport { bindPanelListeners, shouldFlipUp, dropdownPanelStyle, PANEL_HIDDEN_STYLE } from '../../utils/panel.js'\n\nlet uidSeed = 0\n\nconst pad = (value) => String(value).padStart(2, '0')\n\nfunction toDateKey (year, month, day) {\n return `${year}-${pad(month + 1)}-${pad(day)}`\n}\n\n/** \u62C6\u51FA\u65E5\u671F\u4E0E\u65F6\u95F4\u90E8\u5206\uFF0C\u975E\u6CD5\u8F93\u5165\u8FD4\u56DE\u7A7A */\nfunction parseValue (value) {\n if (!value) return { date: '', time: '' }\n const [date = '', time = ''] = String(value).split(' ')\n return { date, time }\n}\n\n/** \u65E5\u671F\u5B57\u7B26\u4E32 \u2192 { year, month, day } */\nfunction parseDate (date) {\n const parts = String(date || '').split('-').map(Number)\n if (parts.length !== 3 || parts.some((item) => !Number.isFinite(item))) return null\n return { year: parts[0], month: parts[1] - 1, day: parts[2] }\n}\n\n/**\n * \u65E5\u671F\u65F6\u95F4\u9009\u62E9\uFF1A\u5DE6\u4FA7\u6708\u5386 + \u53F3\u4FA7\u65F6\u5206\u79D2\u5217\uFF0C\u70B9\u9009\u540E\u70B9\u300C\u786E\u5B9A\u300D\u63D0\u4EA4\n *\n * \u7528\u6CD5\uFF1A<DjmDateTimePicker v-model=\"value\" />\n * value \u5F62\u5982 '2026-10-25 09:30'\uFF0Cformat \u542B ss \u65F6\u4E3A '2026-10-25 09:30:00'\n */\nexport default {\n name: 'DjmDateTimePicker',\n components: { DjmIcon: Icon },\n props: {\n modelValue: { type: String, default: '' },\n // \u53EA\u5F71\u54CD\u8F93\u51FA\u662F\u5426\u5E26\u79D2\u4E0E\u89E6\u53D1\u5668\u5C55\u793A\n format: { type: String, default: 'YYYY-MM-DD HH:mm' },\n placeholder: { type: String, default: '' },\n min: { type: String, default: '' },\n max: { type: String, default: '' },\n minuteStep: { type: Number, default: 1 },\n clearable: { type: Boolean, default: true },\n disabled: { type: Boolean, default: false },\n disabledDate: { type: Function, default: null }\n },\n emits: ['update:modelValue', 'change', 'visible-change'],\n setup (props, { emit }) {\n const open = ref(false)\n watch(open, (value) => emit('visible-change', value))\n\n const root = ref(null)\n const panel = ref(null)\n const panelId = 'djm-datetime-panel-' + (++uidSeed)\n const panelStyle = ref({ ...PANEL_HIDDEN_STYLE })\n let detachPanel = null\n\n const today = new Date()\n const todayKey = toDateKey(today.getFullYear(), today.getMonth(), today.getDate())\n\n const hasSeconds = computed(() => props.format.indexOf('ss') > -1)\n\n // \u9762\u677F\u5185\u6682\u5B58\u503C\uFF0C\u786E\u5B9A\u540E\u624D\u56DE\u4F20\n const draft = ref({ date: '', h: '00', m: '00', s: '00' })\n\n const initial = parseDate(parseValue(props.modelValue).date)\n const viewYear = ref(initial ? initial.year : today.getFullYear())\n const viewMonth = ref(initial ? initial.month : today.getMonth())\n\n const displayText = computed(() => props.modelValue || '')\n const placeholderText = computed(() => props.placeholder || t('dateTimePicker.placeholder'))\n const weeks = computed(() => t('datePicker.weeks').split(','))\n\n const hours = computed(() => Array.from({ length: 24 }, (_, index) => pad(index)))\n const minutes = computed(() => {\n const list = []\n for (let value = 0; value < 60; value += Math.max(1, props.minuteStep)) list.push(pad(value))\n return list\n })\n const seconds = computed(() => Array.from({ length: 60 }, (_, index) => pad(index)))\n\n const timeCols = computed(() => {\n const cols = [\n { key: 'h', list: hours.value },\n { key: 'm', list: minutes.value }\n ]\n if (hasSeconds.value) cols.push({ key: 's', list: seconds.value })\n return cols\n })\n\n const monthLabel = computed(() => t('datePicker.title', { year: viewYear.value, month: viewMonth.value + 1 }))\n\n // \u56FA\u5B9A 6 \u884C 42 \u683C\uFF0C\u6708\u521D\u6309\u5468\u4E00\u4E3A\u9996\u5217\u8865\u4F4D\n const cells = computed(() => {\n const first = new Date(viewYear.value, viewMonth.value, 1)\n const offset = (first.getDay() + 6) % 7\n const start = new Date(viewYear.value, viewMonth.value, 1 - offset)\n return Array.from({ length: 42 }, (_, index) => {\n const date = new Date(start.getFullYear(), start.getMonth(), start.getDate() + index)\n const key = toDateKey(date.getFullYear(), date.getMonth(), date.getDate())\n return {\n key,\n day: date.getDate(),\n outside: date.getMonth() !== viewMonth.value,\n today: key === todayKey,\n selected: key === draft.value.date,\n disabled: isDisabled(key)\n }\n })\n })\n\n function isDisabled (key) {\n if (props.min && key < props.min.slice(0, 10)) return true\n if (props.max && key > props.max.slice(0, 10)) return true\n return typeof props.disabledDate === 'function' ? Boolean(props.disabledDate(key)) : false\n }\n\n function resetDraft () {\n const { date, time } = parseValue(props.modelValue)\n // \u9ED8\u8BA4\u65E5\u671F\u82E5\u88AB\u7981\u7528\uFF0C\u987A\u5EF6\u5230\u6700\u8FD1\u7684\u53EF\u9009\u65E5\u671F\uFF0C\u907F\u514D\u76F4\u63A5\u786E\u5B9A\u65F6\u63D0\u4EA4\u975E\u6CD5\u503C\n const base = firstEnabled(date || todayKey)\n const [h = '00', m = '00', s = '00'] = (time || '00:00:00').split(':')\n draft.value = { date: base, h, m, s }\n const parsed = parseDate(base)\n if (parsed) {\n viewYear.value = parsed.year\n viewMonth.value = parsed.month\n }\n }\n\n function firstEnabled (base) {\n if (!isDisabled(base)) return base\n for (let offset = 1; offset <= 366; offset++) {\n const candidate = shiftDate(base, offset)\n if (!isDisabled(candidate)) return candidate\n }\n return base\n }\n\n function shiftDate (key, offset) {\n const parsed = parseDate(key)\n if (!parsed) return key\n const next = new Date(parsed.year, parsed.month, parsed.day + offset)\n return toDateKey(next.getFullYear(), next.getMonth(), next.getDate())\n }\n\n function openPanel () {\n if (props.disabled) return\n resetDraft()\n open.value = true\n detachPanel = bindPanelListeners({\n root: () => root.value,\n panel: () => panel.value,\n onClose: closePanel,\n onReposition: updatePosition\n })\n requestAnimationFrame(updatePosition)\n }\n\n function updatePosition () {\n if (!open.value || !root.value) return\n const rect = root.value.getBoundingClientRect()\n const height = panel.value ? panel.value.offsetHeight : 360\n const width = panel.value ? panel.value.offsetWidth : 480\n panelStyle.value = dropdownPanelStyle({\n rect,\n flip: shouldFlipUp(rect, height),\n clampWidth: width\n })\n }\n\n function closePanel () {\n if (!open.value) return\n open.value = false\n panelStyle.value = { ...PANEL_HIDDEN_STYLE }\n if (detachPanel) {\n detachPanel()\n detachPanel = null\n }\n }\n\n function toggle () {\n if (open.value) closePanel()\n else openPanel()\n }\n\n function prevMonth () {\n if (viewMonth.value === 0) {\n viewMonth.value = 11\n viewYear.value -= 1\n } else {\n viewMonth.value -= 1\n }\n }\n\n function nextMonth () {\n if (viewMonth.value === 11) {\n viewMonth.value = 0\n viewYear.value += 1\n } else {\n viewMonth.value += 1\n }\n }\n\n function pickDate (cell) {\n if (cell.disabled) return\n draft.value = { ...draft.value, date: cell.key }\n }\n\n function pickTime (key, value) {\n draft.value = { ...draft.value, [key]: value }\n }\n\n function buildText () {\n const time = hasSeconds.value\n ? `${draft.value.h}:${draft.value.m}:${draft.value.s}`\n : `${draft.value.h}:${draft.value.m}`\n return `${draft.value.date} ${time}`\n }\n\n function confirm () {\n if (isDisabled(draft.value.date)) return\n const text = buildText()\n emit('update:modelValue', text)\n emit('change', text)\n closePanel()\n }\n\n function pickNow () {\n const now = new Date()\n const today = toDateKey(now.getFullYear(), now.getMonth(), now.getDate())\n // \u4ECA\u5929\u88AB\u7981\u7528\u65F6\u300C\u6B64\u523B\u300D\u4E0D\u53EF\u7528\n if (isDisabled(today)) return\n draft.value = {\n date: today,\n h: pad(now.getHours()),\n m: pad(now.getMinutes()),\n s: pad(now.getSeconds())\n }\n const parsed = parseDate(draft.value.date)\n viewYear.value = parsed.year\n viewMonth.value = parsed.month\n }\n\n function clear () {\n emit('update:modelValue', '')\n emit('change', '')\n closePanel()\n }\n\n onBeforeUnmount(() => {\n if (detachPanel) {\n detachPanel()\n detachPanel = null\n }\n })\n\n return {\n open,\n root,\n panel,\n panelId,\n panelStyle,\n draft,\n hasSeconds,\n displayText,\n placeholderText,\n weeks,\n monthLabel,\n cells,\n timeCols,\n toggle,\n closePanel,\n prevMonth,\n nextMonth,\n pickDate,\n pickTime,\n confirm,\n pickNow,\n clear,\n t\n }\n },\n template: `\n <div class=\"djm-datetime\" ref=\"root\">\n <div\n class=\"djm-input djm-datetime-trigger\"\n :class=\"{ 'djm-is-disabled': disabled }\"\n role=\"combobox\"\n :tabindex=\"disabled ? -1 : 0\"\n aria-haspopup=\"dialog\"\n :aria-expanded=\"String(open)\"\n :aria-controls=\"panelId\"\n :aria-label=\"displayText || placeholderText\"\n @click=\"toggle\"\n @keydown.enter.prevent=\"toggle\"\n @keydown.space.prevent=\"toggle\"\n >\n <DjmIcon name=\"calendar\" :size=\"14\" />\n <span :class=\"{ 'djm-is-placeholder': !displayText }\">{{ displayText || placeholderText }}</span>\n <button\n v-if=\"clearable && displayText && !disabled\"\n class=\"djm-datetime-clear\"\n type=\"button\"\n :aria-label=\"t('dateTimePicker.clear')\"\n @click.stop=\"clear\"\n ><DjmIcon name=\"x\" :size=\"12\" /></button>\n <DjmIcon v-else name=\"chevron-down\" :size=\"12\" class=\"djm-datetime-caret\" />\n </div>\n\n <Teleport to=\"body\">\n <div\n v-if=\"open\"\n ref=\"panel\"\n class=\"djm-datetime-panel\"\n :id=\"panelId\"\n :style=\"panelStyle\"\n role=\"dialog\"\n :aria-label=\"placeholderText\"\n >\n <div class=\"djm-datetime-body\">\n <div class=\"djm-datetime-calendar\">\n <div class=\"djm-datetime-head\">\n <button class=\"djm-datetime-nav\" type=\"button\" :aria-label=\"t('dateTimePicker.prevMonth')\" @click=\"prevMonth\">\n <DjmIcon name=\"chevron-left\" :size=\"13\" />\n </button>\n <span class=\"djm-datetime-title\">{{ monthLabel }}</span>\n <button class=\"djm-datetime-nav\" type=\"button\" :aria-label=\"t('dateTimePicker.nextMonth')\" @click=\"nextMonth\">\n <DjmIcon name=\"chevron-right\" :size=\"13\" />\n </button>\n </div>\n <div class=\"djm-datetime-grid\">\n <span v-for=\"week in weeks\" :key=\"week\" class=\"djm-datetime-week\">{{ week }}</span>\n <button\n v-for=\"cell in cells\"\n :key=\"cell.key\"\n class=\"djm-datetime-day\"\n type=\"button\"\n :class=\"{\n 'djm-is-outside': cell.outside,\n 'djm-is-today': cell.today,\n 'djm-is-selected': cell.selected\n }\"\n :disabled=\"cell.disabled\"\n @click=\"pickDate(cell)\"\n >{{ cell.day }}</button>\n </div>\n </div>\n\n <div class=\"djm-datetime-times\">\n <div v-for=\"col in timeCols\" :key=\"col.key\" class=\"djm-datetime-col\">\n <button\n v-for=\"item in col.list\"\n :key=\"item\"\n class=\"djm-datetime-time\"\n type=\"button\"\n :class=\"{ 'djm-is-selected': draft[col.key] === item }\"\n @click=\"pickTime(col.key, item)\"\n >{{ item }}</button>\n </div>\n </div>\n </div>\n\n <div class=\"djm-datetime-foot\">\n <button class=\"djm-link-btn\" type=\"button\" @click=\"pickNow\">{{ t('dateTimePicker.now') }}</button>\n <span class=\"djm-datetime-preview\">{{ draft.date }} {{ draft.h }}:{{ draft.m }}<template v-if=\"hasSeconds\">:{{ draft.s }}</template></span>\n <button class=\"djm-link-btn djm-danger\" v-if=\"clearable\" type=\"button\" @click=\"clear\">{{ t('dateTimePicker.clear') }}</button>\n <button class=\"djm-btn djm-btn-primary djm-btn-sm\" type=\"button\" @click=\"confirm\">{{ t('common.confirm') }}</button>\n </div>\n </div>\n </Teleport>\n </div>\n `\n}\n", "import { ref, computed, watch, onMounted, onBeforeUnmount } from 'vue'\nimport { t } from '../../locale/index.js'\n\n/**\n * \u865A\u62DF\u6EDA\u52A8\u5217\u8868\uFF1A\u53EA\u6E32\u67D3\u53EF\u89C6\u533A\u5185\u7684\u884C\uFF0C\u9002\u5408\u4E07\u7EA7\u6570\u636E\u7684\u65E5\u5FD7\u3001\u6D88\u606F\u3001\u660E\u7EC6\u573A\u666F\n *\n * \u7528\u6CD5\uFF1A<DjmVirtualList :items=\"rows\" :height=\"360\" :item-height=\"44\" v-slot=\"{ item }\">\u2026</DjmVirtualList>\n * itemHeight \u4F20\u51FD\u6570\u53EF\u6309\u884C\u53D6\u4E0D\u540C\u9AD8\u5EA6\uFF1Bheight \u652F\u6301\u6570\u5B57\u6216 '60vh' \u8FD9\u7C7B\u5B57\u7B26\u4E32\n */\nexport default {\n name: 'DjmVirtualList',\n props: {\n items: { type: Array, default: () => [] },\n // \u884C\u9AD8\uFF1A\u6570\u5B57\u8868\u793A\u7EDF\u4E00\u884C\u9AD8\uFF0C\u51FD\u6570\u6309 (item, index) \u8FD4\u56DE\u6BCF\u884C\u9AD8\u5EA6\n itemHeight: { type: [Number, Function], default: 40 },\n height: { type: [Number, String], default: 320 },\n // \u4E0A\u4E0B\u5404\u591A\u6E32\u67D3\u51E0\u884C\uFF0C\u51CF\u5C11\u5FEB\u901F\u6EDA\u52A8\u65F6\u7684\u767D\u5C4F\n overscan: { type: Number, default: 4 },\n // \u8DDD\u5E95\u90E8\u591A\u5C11\u50CF\u7D20\u5185\u89E6\u53D1 reach-bottom\n bottomThreshold: { type: Number, default: 40 },\n // \u884C\u4E3B\u952E\u5B57\u6BB5\uFF0C\u7F3A\u7701\u7528\u7D22\u5F15\n keyField: { type: String, default: 'id' }\n },\n emits: ['scroll', 'reach-bottom', 'item-click'],\n setup (props, { emit, expose }) {\n const viewport = ref(null)\n const scrollTop = ref(0)\n const viewHeight = ref(typeof props.height === 'number' ? props.height : 320)\n // \u9632\u6B62\u505C\u5728\u5E95\u90E8\u65F6\u53CD\u590D\u89E6\u53D1\u89E6\u5E95\u4E8B\u4EF6\n let bottomFired = false\n\n function rowHeight (item, index) {\n return typeof props.itemHeight === 'function'\n ? Math.max(1, Number(props.itemHeight(item, index)) || 1)\n : Math.max(1, props.itemHeight)\n }\n\n // \u7D2F\u79EF\u504F\u79FB\u8868\uFF1Aoffsets[i] \u662F\u7B2C i \u884C\u7684 top\uFF0Coffsets[length] \u662F\u603B\u9AD8\n const offsets = computed(() => {\n const list = [0]\n let sum = 0\n props.items.forEach((item, index) => {\n sum += rowHeight(item, index)\n list.push(sum)\n })\n return list\n })\n\n const totalHeight = computed(() => offsets.value[offsets.value.length - 1])\n\n // \u4E8C\u5206\u627E\u7B2C\u4E00\u4E2A\u53EF\u89C1\u884C\uFF0C\u907F\u514D\u5927\u5217\u8868\u7EBF\u6027\u626B\u63CF\n function findStart (top) {\n const list = offsets.value\n let low = 0\n let high = list.length - 1\n while (low < high) {\n const mid = (low + high) >> 1\n if (list[mid] < top) low = mid + 1\n else high = mid\n }\n return Math.max(0, low - 1)\n }\n\n const range = computed(() => {\n const total = props.items.length\n if (!total) return { start: 0, end: 0 }\n const start = Math.max(0, findStart(scrollTop.value) - props.overscan)\n let end = start\n const limit = scrollTop.value + viewHeight.value + props.overscan * 40\n while (end < total && offsets.value[end] < limit) end += 1\n return { start, end: Math.min(total, end + props.overscan) }\n })\n\n const visibleRows = computed(() => {\n const { start, end } = range.value\n return props.items.slice(start, end).map((item, index) => {\n const realIndex = start + index\n return {\n item,\n index: realIndex,\n key: item && item[props.keyField] !== undefined ? item[props.keyField] : realIndex,\n top: offsets.value[realIndex],\n height: rowHeight(item, realIndex)\n }\n })\n })\n\n function onScroll (event) {\n const el = event.target\n scrollTop.value = el.scrollTop\n emit('scroll', { scrollTop: el.scrollTop })\n const nearBottom = el.scrollTop + el.clientHeight >= totalHeight.value - props.bottomThreshold\n if (nearBottom && !bottomFired) {\n bottomFired = true\n emit('reach-bottom')\n } else if (!nearBottom) {\n bottomFired = false\n }\n }\n\n function scrollToIndex (index, align = 'auto') {\n const el = viewport.value\n if (!el) return\n const start = offsets.value[Math.max(0, Math.min(index, props.items.length - 1))]\n const end = offsets.value[Math.min(index + 1, props.items.length)]\n if (align === 'top') el.scrollTop = start\n else if (align === 'bottom') el.scrollTop = end - el.clientHeight\n else if (start < el.scrollTop) el.scrollTop = start\n else if (end > el.scrollTop + el.clientHeight) el.scrollTop = end - el.clientHeight\n }\n\n // \u884C\u9AD8\u6216\u6570\u636E\u53D8\u5316\u540E\uFF0C\u91CD\u65B0\u6D4B\u91CF\u53EF\u89C6\u9AD8\u5EA6\n watch(\n () => props.height,\n () => {\n if (viewport.value) viewHeight.value = viewport.value.clientHeight\n }\n )\n\n function measure () {\n if (viewport.value) viewHeight.value = viewport.value.clientHeight\n }\n\n // \u5BB9\u5668\u968F\u7A97\u53E3\u6216\u7236\u7EA7\u53D8\u5316\u65F6\u91CD\u65B0\u6D4B\u91CF\uFF0C\u907F\u514D\u6E32\u67D3\u533A\u95F4\u5931\u6548\u9732\u767D\n let resizeObserver = null\n onMounted(() => {\n measure()\n if (window.ResizeObserver && viewport.value) {\n resizeObserver = new ResizeObserver(() => measure())\n resizeObserver.observe(viewport.value)\n }\n })\n onBeforeUnmount(() => {\n if (resizeObserver) resizeObserver.disconnect()\n })\n\n function onItemClick (row) {\n emit('item-click', row.item, row.index)\n }\n\n expose({ scrollToIndex, measure })\n\n return {\n viewport,\n totalHeight,\n visibleRows,\n onScroll,\n onItemClick,\n scrollToIndex,\n measure,\n t\n }\n },\n template: `\n <div\n class=\"djm-vlist\"\n ref=\"viewport\"\n :style=\"{ height: typeof height === 'number' ? height + 'px' : height }\"\n tabindex=\"0\"\n @scroll.passive=\"onScroll\"\n >\n <div class=\"djm-vlist-spacer\" :style=\"{ height: totalHeight + 'px' }\">\n <div\n v-for=\"row in visibleRows\"\n :key=\"row.key\"\n class=\"djm-vlist-row\"\n :style=\"{ transform: 'translateY(' + row.top + 'px)', height: row.height + 'px' }\"\n @click=\"onItemClick(row)\"\n >\n <slot :item=\"row.item\" :index=\"row.index\">{{ row.item }}</slot>\n </div>\n </div>\n <div v-if=\"!items.length\" class=\"djm-vlist-empty\">\n <slot name=\"empty\">{{ t('virtualList.empty') }}</slot>\n </div>\n </div>\n `\n}\n", "import { computed } from 'vue'\nimport { t } from '../../locale/index.js'\n\n/**\n * \u6279\u91CF\u64CD\u4F5C\u6761\uFF1A\u8868\u683C\u52FE\u9009\u540E\u6D6E\u51FA\u7684\u64CD\u4F5C\u680F\n *\n * \u7528\u6CD5\uFF1A<DjmBatchBar :count=\"selected.length\" :total=\"rows.length\" @clear=\"clear\" />\n * \u64CD\u4F5C\u6309\u94AE\u653E\u5728\u9ED8\u8BA4\u63D2\u69FD\uFF1Bfixed \u65F6\u56FA\u5B9A\u5728\u89C6\u53E3\u5E95\u90E8\n */\nexport default {\n name: 'DjmBatchBar',\n props: {\n count: { type: Number, default: 0 },\n // \u6570\u636E\u603B\u6570\uFF0C\u7528\u4E8E\u300C\u5168\u9009 N \u9879\u300D\uFF0C\u4F20 0 \u5219\u4E0D\u663E\u793A\n total: { type: Number, default: 0 },\n // \u81EA\u5B9A\u4E49\u5DF2\u9009\u6587\u6848\uFF0C\u7F3A\u7701\u7528 i18n\n label: { type: String, default: '' },\n clearable: { type: Boolean, default: true },\n // \u5438\u5E95\u663E\u793A\n fixed: { type: Boolean, default: false }\n },\n emits: ['clear', 'select-all'],\n setup (props, { emit }) {\n const text = computed(() => props.label || t('batchBar.selected', { count: props.count }))\n // \u8FD8\u6709\u672A\u9009\u4E2D\u9879\u65F6\u624D\u63D0\u793A\u5168\u9009\n const canSelectAll = computed(() => props.total > props.count)\n\n return {\n text,\n canSelectAll,\n onClear: () => emit('clear'),\n onSelectAll: () => emit('select-all'),\n t\n }\n },\n template: `\n <div v-if=\"count > 0\" class=\"djm-batch-bar\" :class=\"{ 'djm-is-fixed': fixed }\" role=\"region\" :aria-label=\"text\">\n <span class=\"djm-batch-info\">\n <strong class=\"djm-batch-count\">{{ text }}</strong>\n <button v-if=\"canSelectAll\" class=\"djm-link-btn\" type=\"button\" @click=\"onSelectAll\">\n {{ t('batchBar.selectAll', { total }) }}\n </button>\n </span>\n <span class=\"djm-batch-actions\">\n <slot></slot>\n </span>\n <button v-if=\"clearable\" class=\"djm-link-btn djm-batch-clear\" type=\"button\" @click=\"onClear\">\n {{ t('batchBar.clear') }}\n </button>\n </div>\n `\n}\n", "import { ref, computed, watch } from 'vue'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\nimport { formatFileSize } from '../upload/index.js'\n\n/** \u6269\u5C55\u540D\u662F\u5426\u5728 accept \u91CC\uFF08accept \u5F62\u5982 '.csv,.xlsx'\uFF09 */\nfunction matchAccept (name, accept) {\n if (!accept) return true\n const ext = '.' + String(name).split('.').pop().toLowerCase()\n return accept\n .split(',')\n .map((item) => item.trim().toLowerCase())\n .some((item) => item === ext || item === '*')\n}\n\n/**\n * \u5BFC\u5165\u5411\u5BFC\uFF1A\u9009\u62E9\u6587\u4EF6 \u2192 \u5B57\u6BB5\u6620\u5C04 \u2192 \u5BFC\u5165\u7ED3\u679C\n *\n * \u7528\u6CD5\uFF1A<DjmImportWizard :columns=\"columns\" :fields=\"fields\" :result=\"result\" @submit=\"doImport\" />\n * \u4E09\u4E2A\u6B65\u9AA4\u53EF\u5206\u522B\u4F7F\u7528\uFF0Cstep \u652F\u6301 v-model:step \u53D7\u63A7\uFF1B\u7EC4\u4EF6\u4E0D\u505A\u771F\u5B9E\u4E0A\u4F20\u4E0E\u89E3\u6790\uFF0C\u6587\u4EF6\u4EA4\u7ED9\u4E1A\u52A1\u5904\u7406\n */\nexport default {\n name: 'DjmImportWizard',\n components: { DjmIcon: Icon },\n props: {\n step: { type: Number, default: 1 },\n // \u5141\u8BB8\u7684\u6269\u5C55\u540D\n accept: { type: String, default: '.csv,.xlsx,.xls' },\n // \u6587\u4EF6\u5927\u5C0F\u4E0A\u9650\uFF08MB\uFF09\uFF0C0 \u8868\u793A\u4E0D\u9650\u5236\n maxSize: { type: Number, default: 10 },\n // \u76EE\u6807\u5B57\u6BB5\uFF1A[{ key, label, required }]\n columns: { type: Array, default: () => [] },\n // \u6587\u4EF6\u91CC\u7684\u5217\u540D\uFF0C\u7528\u4E8E\u6620\u5C04\u4E0B\u62C9\n fields: { type: Array, default: () => [] },\n // \u6620\u5C04\u7ED3\u679C\uFF1A{ \u76EE\u6807 key: \u6587\u4EF6\u5217\u540D }\n mapping: { type: Object, default: () => ({}) },\n // \u5BFC\u5165\u7ED3\u679C\uFF1A{ total, success, failed, errors: [{ row, message }] }\n result: { type: Object, default: () => ({}) },\n loading: { type: Boolean, default: false }\n },\n emits: ['update:step', 'update:mapping', 'file-change', 'submit', 'retry'],\n setup (props, { emit }) {\n // \u672A\u53D7\u63A7\u65F6\u7EC4\u4EF6\u81EA\u5DF1\u63A8\u8FDB\u6B65\u9AA4\n const innerStep = ref(props.step || 1)\n watch(\n () => props.step,\n (value) => {\n if (value) innerStep.value = value\n }\n )\n\n const file = ref(null)\n const fileError = ref('')\n const mappingError = ref('')\n const fileInput = ref(null)\n\n const innerMapping = ref({ ...props.mapping })\n watch(\n () => props.mapping,\n (value) => {\n innerMapping.value = { ...value }\n },\n { deep: true }\n )\n\n function goStep (next) {\n innerStep.value = next\n emit('update:step', next)\n }\n\n const steps = computed(() => [\n { index: 1, title: t('importWizard.stepFile') },\n { index: 2, title: t('importWizard.stepMapping') },\n { index: 3, title: t('importWizard.stepResult') }\n ])\n\n function pickFile () {\n if (fileInput.value) fileInput.value.click()\n }\n\n function validateFile (target) {\n if (!target) return false\n if (!matchAccept(target.name, props.accept)) {\n fileError.value = t('importWizard.acceptError', { accept: props.accept })\n return false\n }\n if (props.maxSize > 0 && target.size > props.maxSize * 1024 * 1024) {\n fileError.value = t('importWizard.sizeError', { size: props.maxSize })\n return false\n }\n fileError.value = ''\n return true\n }\n\n function useFile (target) {\n if (!validateFile(target)) return\n file.value = target\n emit('file-change', target)\n goStep(2)\n }\n\n function onFileChange (event) {\n useFile(event.target.files && event.target.files[0])\n // \u6E05\u7A7A value\uFF0C\u540C\u4E00\u4E2A\u6587\u4EF6\u518D\u9009\u4E00\u6B21\u4E5F\u80FD\u89E6\u53D1 change\n event.target.value = ''\n }\n\n function onDrop (event) {\n const target = event.dataTransfer && event.dataTransfer.files && event.dataTransfer.files[0]\n useFile(target)\n }\n\n function setMapping (key, value) {\n const next = { ...innerMapping.value, [key]: value }\n if (!value) delete next[key]\n innerMapping.value = next\n mappingError.value = ''\n emit('update:mapping', next)\n }\n\n // \u5FC5\u586B\u5B57\u6BB5\u5FC5\u987B\u5168\u90E8\u5B8C\u6210\u6620\u5C04\n const missingRequired = computed(() =>\n props.columns.filter((col) => col.required && !innerMapping.value[col.key])\n )\n\n function submit () {\n if (missingRequired.value.length) {\n mappingError.value = t('importWizard.missingRequired', {\n fields: missingRequired.value.map((col) => col.label || col.key).join('\u3001')\n })\n return\n }\n emit('submit', { ...innerMapping.value })\n }\n\n // \u4E1A\u52A1\u4FA7\u628A\u7ED3\u679C\u5199\u5165 result \u540E\u518D\u63A8\u8FDB\u5230\u7ED3\u679C\u9875\uFF0C\u907F\u514D\u51FA\u9519\u65F6\u505C\u5728\u6620\u5C04\u9875\n watch(\n () => props.result,\n (value) => {\n if (value && (value.total || value.success || value.failed || (value.errors && value.errors.length))) {\n goStep(3)\n }\n }\n )\n\n function reset () {\n file.value = null\n fileError.value = ''\n mappingError.value = ''\n innerMapping.value = {}\n // \u53D7\u63A7\u7528\u6CD5\u4E0B\u540C\u6B65\u6E05\u7A7A\u7236\u7EC4\u4EF6\u7684 mapping\n emit('update:mapping', {})\n if (fileInput.value) fileInput.value.value = ''\n goStep(1)\n }\n\n function retry () {\n emit('retry')\n goStep(2)\n }\n\n const stats = computed(() => {\n const data = props.result || {}\n return {\n total: data.total || 0,\n success: data.success || 0,\n failed: data.failed || 0,\n errors: data.errors || []\n }\n })\n\n return {\n innerStep,\n steps,\n file,\n fileError,\n mappingError,\n fileInput,\n innerMapping,\n missingRequired,\n stats,\n pickFile,\n onFileChange,\n onDrop,\n setMapping,\n submit,\n reset,\n retry,\n goStep,\n formatFileSize,\n t\n }\n },\n template: `\n <div class=\"djm-import-wizard\">\n <ol class=\"djm-import-steps\">\n <li\n v-for=\"item in steps\"\n :key=\"item.index\"\n class=\"djm-import-step\"\n :class=\"{ 'djm-is-active': innerStep === item.index, 'djm-is-done': innerStep > item.index }\"\n :aria-current=\"innerStep === item.index ? 'step' : null\"\n >\n <span class=\"djm-import-step-no\">{{ item.index }}</span>\n <span class=\"djm-import-step-title\">{{ item.title }}</span>\n </li>\n </ol>\n\n <!-- \u7B2C\u4E00\u6B65\uFF1A\u9009\u6587\u4EF6 -->\n <div v-if=\"innerStep === 1\" class=\"djm-import-body\">\n <div\n class=\"djm-import-drop\"\n role=\"button\"\n tabindex=\"0\"\n @click=\"pickFile\"\n @keydown.enter.prevent=\"pickFile\"\n @keydown.space.prevent=\"pickFile\"\n @dragover.prevent\n @drop.prevent=\"onDrop\"\n >\n <DjmIcon name=\"upload\" :size=\"26\" />\n <p class=\"djm-import-drop-title\">{{ t('importWizard.pick') }}</p>\n <p class=\"djm-import-drop-tip\">{{ t('importWizard.dragTip', { accept }) }}</p>\n </div>\n <input\n ref=\"fileInput\"\n class=\"djm-import-file\"\n type=\"file\"\n :accept=\"accept\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n @change=\"onFileChange\"\n />\n <p v-if=\"fileError\" class=\"djm-import-error\" role=\"alert\">{{ fileError }}</p>\n </div>\n\n <!-- \u7B2C\u4E8C\u6B65\uFF1A\u5B57\u6BB5\u6620\u5C04 -->\n <div v-else-if=\"innerStep === 2\" class=\"djm-import-body\">\n <div v-if=\"file\" class=\"djm-import-file-info\">\n <DjmIcon name=\"file\" :size=\"14\" />\n <span class=\"djm-import-file-name\">{{ file.name }}</span>\n <span class=\"djm-import-file-size\">{{ formatFileSize(file.size) }}</span>\n <button class=\"djm-link-btn\" type=\"button\" @click=\"reset\">{{ t('importWizard.reselect') }}</button>\n </div>\n\n <div class=\"djm-import-mapping\">\n <div v-for=\"col in columns\" :key=\"col.key\" class=\"djm-import-map-row\">\n <label class=\"djm-import-map-label\" :for=\"'djm-import-map-' + col.key\">\n {{ col.label || col.key }}\n <span v-if=\"col.required\" class=\"djm-import-required\" aria-hidden=\"true\">*</span>\n </label>\n <span class=\"djm-import-map-arrow\" aria-hidden=\"true\">\u2190</span>\n <select\n class=\"djm-import-map-select\"\n :id=\"'djm-import-map-' + col.key\"\n :value=\"innerMapping[col.key] || ''\"\n @change=\"setMapping(col.key, $event.target.value)\"\n >\n <option value=\"\">{{ t('importWizard.sourcePlaceholder') }}</option>\n <option v-for=\"field in fields\" :key=\"field\" :value=\"field\">{{ field }}</option>\n </select>\n </div>\n </div>\n\n <p v-if=\"mappingError\" class=\"djm-import-error\" role=\"alert\">{{ mappingError }}</p>\n\n <div class=\"djm-import-actions\">\n <button class=\"djm-btn\" type=\"button\" @click=\"goStep(1)\">{{ t('importWizard.prev') }}</button>\n <button class=\"djm-btn djm-btn-primary\" type=\"button\" :disabled=\"loading\" @click=\"submit\">\n {{ loading ? t('importWizard.importing') : t('importWizard.submit') }}\n </button>\n </div>\n </div>\n\n <!-- \u7B2C\u4E09\u6B65\uFF1A\u7ED3\u679C -->\n <div v-else class=\"djm-import-body\">\n <div class=\"djm-import-stats\">\n <div class=\"djm-import-stat\">\n <span class=\"djm-import-stat-value\">{{ stats.total }}</span>\n <span class=\"djm-import-stat-label\">{{ t('importWizard.statTotal') }}</span>\n </div>\n <div class=\"djm-import-stat djm-is-success\">\n <span class=\"djm-import-stat-value\">{{ stats.success }}</span>\n <span class=\"djm-import-stat-label\">{{ t('importWizard.statSuccess') }}</span>\n </div>\n <div class=\"djm-import-stat\" :class=\"{ 'djm-is-danger': stats.failed > 0 }\">\n <span class=\"djm-import-stat-value\">{{ stats.failed }}</span>\n <span class=\"djm-import-stat-label\">{{ t('importWizard.statFailed') }}</span>\n </div>\n </div>\n\n <ul v-if=\"stats.errors.length\" class=\"djm-import-errors\">\n <li v-for=\"item in stats.errors\" :key=\"item.row\" class=\"djm-import-error-row\">\n <span class=\"djm-import-error-row-no\">{{ t('importWizard.rowNo', { row: item.row }) }}</span>\n <span>{{ item.message }}</span>\n </li>\n </ul>\n\n <div class=\"djm-import-actions\">\n <button class=\"djm-btn\" type=\"button\" @click=\"retry\">{{ t('importWizard.retry') }}</button>\n <button class=\"djm-btn djm-btn-primary\" type=\"button\" @click=\"reset\">{{ t('importWizard.restart') }}</button>\n </div>\n </div>\n </div>\n `\n}\n", "import { ref, computed } from 'vue'\nimport { t } from '../../locale/index.js'\nimport { diffLines } from '../../utils/text-diff.js'\n\n/**\n * \u5DEE\u5F02\u5BF9\u6BD4\uFF1A\u884C\u7EA7\u6587\u672C\u6BD4\u5BF9\uFF0C\u7EDF\u4E00\u89C6\u56FE\u4E0E\u5E76\u6392\u89C6\u56FE\n *\n * \u7528\u6CD5\uFF1A<DjmDiff :before=\"oldText\" :after=\"newText\" />\n * context \u63A7\u5236\u53D8\u66F4\u524D\u540E\u5404\u4FDD\u7559\u51E0\u884C\u4E0A\u4E0B\u6587\uFF0C\u76F8\u540C\u533A\u57DF\u6298\u53E0\u6210\u4E00\u884C\u53EF\u70B9\u51FB\u5C55\u5F00\n */\nexport default {\n name: 'DjmDiff',\n props: {\n before: { type: String, default: '' },\n after: { type: String, default: '' },\n // unified \u7EDF\u4E00\u89C6\u56FE / split \u5E76\u6392\u89C6\u56FE\n mode: { type: String, default: 'unified' },\n context: { type: Number, default: 3 },\n showLineNumbers: { type: Boolean, default: true },\n beforeLabel: { type: String, default: '' },\n afterLabel: { type: String, default: '' }\n },\n setup (props) {\n const rows = computed(() => diffLines(props.before, props.after))\n\n const stats = computed(() => {\n let add = 0\n let remove = 0\n rows.value.forEach((row) => {\n if (row.type === 'add') add += 1\n if (row.type === 'remove') remove += 1\n })\n return { add, remove }\n })\n\n // \u88AB\u624B\u52A8\u5C55\u5F00\u7684\u76F8\u540C\u533A\u5757\u8D77\u59CB\u4E0B\u6807\n const expandedBlocks = ref([])\n\n function expand (index) {\n expandedBlocks.value = expandedBlocks.value.concat(index)\n }\n\n // \u6309 context \u6298\u53E0\u8FDE\u7EED\u672A\u53D8\u66F4\u533A\u5757\n const displayRows = computed(() => {\n const ctx = Math.max(0, props.context)\n const list = rows.value\n if (!ctx) return list\n\n const out = []\n let i = 0\n while (i < list.length) {\n if (list[i].type !== 'equal') {\n out.push(list[i])\n i += 1\n continue\n }\n let end = i\n while (end < list.length && list[end].type === 'equal') end += 1\n\n const block = list.slice(i, end)\n const isHead = i === 0\n const isTail = end === list.length\n // \u9996\u5C3E\u533A\u5757\u53EA\u9700\u5355\u4FA7\u7559\u4E0A\u4E0B\u6587\n const headCount = isHead ? 0 : ctx\n const tailCount = isTail ? 0 : ctx\n const keep = headCount + tailCount\n\n if (block.length <= keep + 1 || expandedBlocks.value.indexOf(i) > -1) {\n out.push(...block)\n } else {\n if (headCount) out.push(...block.slice(0, headCount))\n out.push({ type: 'skip', count: block.length - keep, blockIndex: i })\n if (tailCount) out.push(...block.slice(block.length - tailCount))\n }\n i = end\n }\n return out\n })\n\n // \u5E76\u6392\u89C6\u56FE\uFF1A\u628A\u8FDE\u7EED\u7684\u5220\u9664\u4E0E\u65B0\u589E\u914D\u5BF9\u6210\u5DE6\u53F3\u4E24\u884C\n const splitRows = computed(() => {\n const list = displayRows.value\n const out = []\n let i = 0\n while (i < list.length) {\n const row = list[i]\n if (row.type === 'equal' || row.type === 'skip') {\n out.push({ left: row, right: row })\n i += 1\n continue\n }\n const removes = []\n const adds = []\n while (i < list.length && (list[i].type === 'remove' || list[i].type === 'add')) {\n if (list[i].type === 'remove') removes.push(list[i])\n else adds.push(list[i])\n i += 1\n }\n const len = Math.max(removes.length, adds.length)\n for (let k = 0; k < len; k++) {\n out.push({ left: removes[k] || null, right: adds[k] || null })\n }\n }\n return out\n })\n\n const beforeLabelText = computed(() => props.beforeLabel || t('diff.before'))\n const afterLabelText = computed(() => props.afterLabel || t('diff.after'))\n\n return {\n stats,\n displayRows,\n splitRows,\n expand,\n beforeLabelText,\n afterLabelText,\n t\n }\n },\n template: `\n <div class=\"djm-diff\" :class=\"'djm-diff-' + mode\">\n <header class=\"djm-diff-bar\">\n <span class=\"djm-diff-stat djm-is-add\">+{{ stats.add }}</span>\n <span class=\"djm-diff-stat djm-is-remove\">\u2212{{ stats.remove }}</span>\n <span v-if=\"!stats.add && !stats.remove\" class=\"djm-diff-same\">{{ t('diff.same') }}</span>\n </header>\n\n <!-- \u7EDF\u4E00\u89C6\u56FE -->\n <div v-if=\"mode !== 'split'\" class=\"djm-diff-body\">\n <template v-for=\"(row, index) in displayRows\" :key=\"index\">\n <button\n v-if=\"row.type === 'skip'\"\n class=\"djm-diff-skip\"\n type=\"button\"\n @click=\"expand(row.blockIndex)\"\n >{{ t('diff.expand', { count: row.count }) }}</button>\n <div v-else class=\"djm-diff-line\" :class=\"'djm-is-' + row.type\">\n <span v-if=\"showLineNumbers\" class=\"djm-diff-no\">{{ row.oldLine || '' }}</span>\n <span v-if=\"showLineNumbers\" class=\"djm-diff-no\">{{ row.newLine || '' }}</span>\n <span class=\"djm-diff-sign\" aria-hidden=\"true\">{{ row.type === 'add' ? '+' : (row.type === 'remove' ? '\u2212' : ' ') }}</span>\n <code class=\"djm-diff-text\">{{ row.text }}</code>\n </div>\n </template>\n </div>\n\n <!-- \u5E76\u6392\u89C6\u56FE -->\n <div v-else class=\"djm-diff-split\">\n <div class=\"djm-diff-split-head\">\n <span>{{ beforeLabelText }}</span>\n <span>{{ afterLabelText }}</span>\n </div>\n <div v-for=\"(row, index) in splitRows\" :key=\"index\" class=\"djm-diff-split-row\">\n <template v-if=\"row.left && row.left.type === 'skip'\">\n <button class=\"djm-diff-skip djm-diff-split-skip\" type=\"button\" @click=\"expand(row.left.blockIndex)\">\n {{ t('diff.expand', { count: row.left.count }) }}\n </button>\n </template>\n <template v-else>\n <div class=\"djm-diff-side\" :class=\"row.left ? 'djm-is-' + row.left.type : 'djm-is-empty'\">\n <span v-if=\"showLineNumbers\" class=\"djm-diff-no\">{{ row.left ? (row.left.oldLine || '') : '' }}</span>\n <code class=\"djm-diff-text\">{{ row.left ? row.left.text : '' }}</code>\n </div>\n <div class=\"djm-diff-side\" :class=\"row.right ? 'djm-is-' + row.right.type : 'djm-is-empty'\">\n <span v-if=\"showLineNumbers\" class=\"djm-diff-no\">{{ row.right ? (row.right.newLine || '') : '' }}</span>\n <code class=\"djm-diff-text\">{{ row.right ? row.right.text : '' }}</code>\n </div>\n </template>\n </div>\n </div>\n </div>\n `\n}\n", "/** \u884C\u7EA7\u5DEE\u5F02\u6BD4\u5BF9\uFF1A\u57FA\u4E8E\u6700\u957F\u516C\u5171\u5B50\u5E8F\u5217\uFF0C\u8FD4\u56DE\u5E26\u884C\u53F7\u7684\u5DEE\u5F02\u884C */\n\n// \u8D85\u8FC7\u8FD9\u4E2A\u89C4\u6A21\u5C31\u4E0D\u505A LCS\uFF0C\u76F4\u63A5\u6574\u6BB5\u66FF\u6362\uFF0C\u907F\u514D O(n*m) \u5185\u5B58\u6253\u7206\nconst MAX_CELLS = 1000000\n\n/**\n * @param {string} before \u4FEE\u6539\u524D\u6587\u672C\n * @param {string} after \u4FEE\u6539\u540E\u6587\u672C\n * @returns {Array<{ type: 'equal'|'remove'|'add', text: string, oldLine: number, newLine: number }>}\n */\nexport function diffLines (before, after) {\n const a = before ? String(before).split('\\n') : []\n const b = after ? String(after).split('\\n') : []\n const result = []\n let oldLine = 0\n let newLine = 0\n\n if (a.length * b.length > MAX_CELLS) {\n a.forEach((text) => result.push({ type: 'remove', text, oldLine: ++oldLine, newLine: 0 }))\n b.forEach((text) => result.push({ type: 'add', text, oldLine: 0, newLine: ++newLine }))\n return result\n }\n\n const m = a.length\n const n = b.length\n const cols = n + 1\n // dp[i][j] = a[i..] \u4E0E b[j..] \u7684\u6700\u957F\u516C\u5171\u5B50\u5E8F\u5217\u957F\u5EA6\uFF0C\u5012\u5E8F\u586B\u8868\u4FBF\u4E8E\u6B63\u5411\u56DE\u6EAF\n const dp = new Int32Array((m + 1) * cols)\n for (let i = m - 1; i >= 0; i--) {\n for (let j = n - 1; j >= 0; j--) {\n dp[i * cols + j] = a[i] === b[j]\n ? dp[(i + 1) * cols + j + 1] + 1\n : Math.max(dp[(i + 1) * cols + j], dp[i * cols + j + 1])\n }\n }\n\n let i = 0\n let j = 0\n while (i < m && j < n) {\n if (a[i] === b[j]) {\n result.push({ type: 'equal', text: a[i], oldLine: ++oldLine, newLine: ++newLine })\n i += 1\n j += 1\n } else if (dp[(i + 1) * cols + j] >= dp[i * cols + j + 1]) {\n result.push({ type: 'remove', text: a[i], oldLine: ++oldLine, newLine: 0 })\n i += 1\n } else {\n result.push({ type: 'add', text: b[j], oldLine: 0, newLine: ++newLine })\n j += 1\n }\n }\n while (i < m) {\n result.push({ type: 'remove', text: a[i], oldLine: ++oldLine, newLine: 0 })\n i += 1\n }\n while (j < n) {\n result.push({ type: 'add', text: b[j], oldLine: 0, newLine: ++newLine })\n j += 1\n }\n\n return result\n}\n", "import { ref, computed, watch } from 'vue'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\n\n/** \u53D6\u8282\u70B9\u4E3B\u952E */\nfunction keyOf (row, rowKey) {\n return row && row[rowKey] !== undefined ? row[rowKey] : row && row.id\n}\n\n/**\n * \u6811\u5F62\u8868\u683C\uFF1A\u53EF\u5C55\u5F00\u7684\u5C42\u7EA7\u6570\u636E\uFF0C\u7B2C\u4E00\u5217\u81EA\u52A8\u5E26\u7F29\u8FDB\u4E0E\u5C55\u5F00\u7BAD\u5934\n *\n * \u7528\u6CD5\uFF1A<DjmTreeTable :data=\"rows\" :columns=\"columns\" v-model:checked-keys=\"checked\" />\n * data: [{ id, name, children }]\uFF0Ccolumns: [{ key, label, width, align }]\n */\nexport default {\n name: 'DjmTreeTable',\n components: { DjmIcon: Icon },\n props: {\n data: { type: Array, default: () => [] },\n columns: { type: Array, default: () => [] },\n rowKey: { type: String, default: 'id' },\n // \u53D7\u63A7\u5C55\u5F00\u9879\n expandedKeys: { type: Array, default: null },\n defaultExpandAll: { type: Boolean, default: false },\n selectable: { type: Boolean, default: false },\n // \u53D7\u63A7\u52FE\u9009\u9879\n checkedKeys: { type: Array, default: null },\n // true \u65F6\u7236\u5B50\u4E0D\u8054\u52A8\n checkStrictly: { type: Boolean, default: false },\n showHeader: { type: Boolean, default: true },\n maxHeight: { type: [Number, String], default: '' },\n striped: { type: Boolean, default: false },\n loading: { type: Boolean, default: false },\n emptyText: { type: String, default: '' }\n },\n emits: ['update:expandedKeys', 'update:checkedKeys', 'expand-change', 'check-change', 'row-click'],\n setup (props, { emit }) {\n // \u6536\u96C6\u6240\u6709\u8282\u70B9 key\uFF0C\u4FBF\u4E8E\u5168\u91CF\u4E0E\u9ED8\u8BA4\u5C55\u5F00\n function eachNode (list, fn, level = 1, parentKey = null) {\n ;(list || []).forEach((row) => {\n fn(row, level, parentKey)\n if (row.children && row.children.length) eachNode(row.children, fn, level + 1, keyOf(row, props.rowKey))\n })\n }\n\n function allKeys () {\n const keys = []\n eachNode(props.data, (row) => keys.push(keyOf(row, props.rowKey)))\n return keys\n }\n\n const innerExpanded = ref(\n props.expandedKeys ? props.expandedKeys.slice() : (props.defaultExpandAll ? allKeys() : [])\n )\n watch(\n () => props.expandedKeys,\n (value) => {\n if (value) innerExpanded.value = value.slice()\n }\n )\n\n const innerChecked = ref(props.checkedKeys ? props.checkedKeys.slice() : [])\n watch(\n () => props.checkedKeys,\n (value) => {\n if (value) innerChecked.value = value.slice()\n }\n )\n\n // \u5C55\u5F00\u540E\u7684\u884C\u5E8F\u5217\uFF0C\u5B50\u8282\u70B9\u4E0D\u53EF\u89C1\u65F6\u4E0D\u53C2\u4E0E\u6E32\u67D3\n const rows = computed(() => {\n const out = []\n function walk (list, level, parentKey) {\n ;(list || []).forEach((row) => {\n const key = keyOf(row, props.rowKey)\n const hasChildren = Boolean(row.children && row.children.length)\n const expanded = innerExpanded.value.indexOf(key) > -1\n out.push({ row, key, level, parentKey, hasChildren, expanded })\n if (hasChildren && expanded) walk(row.children, level + 1, key)\n })\n }\n walk(props.data, 1, null)\n return out\n })\n\n // \u6BCF\u4E2A\u8282\u70B9\u7684\u540E\u4EE3 key\uFF0C\u7528\u4E8E\u7236\u5B50\u8054\u52A8\n const descendantMap = computed(() => {\n const map = {}\n function collect (row) {\n const key = keyOf(row, props.rowKey)\n const list = []\n ;(row.children || []).forEach((child) => {\n list.push(keyOf(child, props.rowKey), ...collect(child))\n })\n map[key] = list\n return list\n }\n ;(props.data || []).forEach(collect)\n return map\n })\n\n const leafKeys = computed(() => {\n const keys = []\n eachNode(props.data, (row) => {\n if (!row.children || !row.children.length) keys.push(keyOf(row, props.rowKey))\n })\n return keys\n })\n\n const checkedSet = computed(() => new Set(innerChecked.value))\n const allChecked = computed(() => leafKeys.value.length > 0 && leafKeys.value.every((key) => checkedSet.value.has(key)))\n const someChecked = computed(() => !allChecked.value && leafKeys.value.some((key) => checkedSet.value.has(key)))\n\n /** \u67D0\u884C\u662F\u5426\u534A\u9009\uFF1A\u6709\u540E\u4EE3\u9009\u4E2D\u4F46\u4E0D\u662F\u5168\u90E8 */\n function isIndeterminate (row) {\n if (!props.selectable || props.checkStrictly) return false\n const desc = descendantMap.value[keyOf(row, props.rowKey)] || []\n if (!desc.length) return false\n const on = desc.filter((key) => checkedSet.value.has(key)).length\n return on > 0 && on < desc.length\n }\n\n function emitChecked (next) {\n innerChecked.value = next\n emit('update:checkedKeys', next)\n emit('check-change', next)\n }\n\n function toggleRowCheck (row) {\n const key = keyOf(row, props.rowKey)\n const on = !checkedSet.value.has(key)\n const set = new Set(innerChecked.value)\n\n if (props.checkStrictly) {\n if (on) set.add(key)\n else set.delete(key)\n } else {\n // \u7236\u5B50\u8054\u52A8\uFF1A\u6539\u81EA\u8EAB\u4E0E\u5168\u90E8\u540E\u4EE3\n const targets = [key, ...(descendantMap.value[key] || [])]\n targets.forEach((item) => (on ? set.add(item) : set.delete(item)))\n // \u9010\u5C42\u5411\u4E0A\u4FEE\u6B63\u7236\u8282\u70B9\uFF1A\u76F4\u5C5E\u5B50\u8282\u70B9\u5168\u9009\u5219\u9009\u4E2D\uFF0C\u5426\u5219\u53D6\u6D88\n let parentKey = parentOf(key)\n while (parentKey !== null && parentKey !== undefined) {\n const children = childrenOf(parentKey)\n const allOn = children.length > 0 && children.every((item) => set.has(item))\n if (allOn) set.add(parentKey)\n else set.delete(parentKey)\n parentKey = parentOf(parentKey)\n }\n }\n emitChecked(Array.from(set))\n }\n\n // key \u2192 \u8282\u70B9 / \u7236\u8282\u70B9 \u7684\u7D22\u5F15\uFF0C\u4F9B\u52FE\u9009\u8054\u52A8\u5411\u4E0A\u56DE\u6EAF\n const nodeMap = computed(() => {\n const map = {}\n eachNode(props.data, (row, level, parentKey) => {\n map[keyOf(row, props.rowKey)] = { row, parentKey }\n })\n return map\n })\n\n function parentOf (key) {\n const hit = nodeMap.value[key]\n return hit ? hit.parentKey : null\n }\n\n function childrenOf (key) {\n const hit = nodeMap.value[key]\n if (!hit) return []\n return (hit.row.children || []).map((child) => keyOf(child, props.rowKey))\n }\n\n function toggleAll () {\n emitChecked(allChecked.value || someChecked.value ? [] : leafKeys.value.slice())\n }\n\n // \u5165\u53C2\u662F\u6241\u5E73\u5316\u540E\u7684\u884C\uFF0C\u76F4\u63A5\u53D6\u5DF2\u7B97\u597D\u7684 key\n function toggleExpand (item) {\n const key = item.key\n const index = innerExpanded.value.indexOf(key)\n const next = innerExpanded.value.slice()\n if (index > -1) next.splice(index, 1)\n else next.push(key)\n innerExpanded.value = next\n emit('update:expandedKeys', next)\n emit('expand-change', key, index === -1)\n }\n\n function expandAll () {\n const next = allKeys()\n innerExpanded.value = next\n emit('update:expandedKeys', next)\n emit('expand-change', null, true)\n }\n\n function collapseAll () {\n innerExpanded.value = []\n emit('update:expandedKeys', [])\n emit('expand-change', null, false)\n }\n\n function valueOf (row, column) {\n const value = row[column.key]\n return value === undefined || value === null ? '' : value\n }\n\n function onRowClick (item) {\n emit('row-click', item.row, item)\n }\n\n const scrollStyle = computed(() => {\n if (!props.maxHeight) return null\n return { maxHeight: typeof props.maxHeight === 'number' ? props.maxHeight + 'px' : props.maxHeight }\n })\n\n const emptyLabel = computed(() => props.emptyText || t('treeTable.empty'))\n\n return {\n rows,\n innerExpanded,\n checkedSet,\n allChecked,\n someChecked,\n isIndeterminate,\n toggleRowCheck,\n toggleAll,\n toggleExpand,\n expandAll,\n collapseAll,\n valueOf,\n onRowClick,\n scrollStyle,\n emptyLabel,\n t\n }\n },\n template: `\n <div class=\"djm-tree-table\">\n <div\n class=\"djm-tree-table-wrap\"\n :class=\"{ 'djm-is-scrollable': !!maxHeight }\"\n :style=\"scrollStyle\"\n :tabindex=\"scrollStyle ? 0 : -1\"\n >\n <table class=\"djm-data-table djm-tree-table-inner\" :class=\"{ 'djm-is-striped': striped }\">\n <thead v-if=\"showHeader\">\n <tr>\n <th v-if=\"selectable\" class=\"djm-col-check\" scope=\"col\">\n <input\n type=\"checkbox\"\n :checked=\"allChecked\"\n :indeterminate=\"someChecked\"\n :aria-label=\"t('treeTable.selectAll')\"\n @change=\"toggleAll\"\n />\n </th>\n <th\n v-for=\"column in columns\"\n :key=\"column.key\"\n scope=\"col\"\n :style=\"{ width: column.width ? column.width + 'px' : undefined, textAlign: column.align || 'left' }\"\n >{{ column.label || column.key }}</th>\n </tr>\n </thead>\n <tbody>\n <tr\n v-for=\"item in rows\"\n :key=\"item.key\"\n :class=\"{ 'djm-is-selected': selectable && checkedSet.has(item.key) }\"\n @click=\"onRowClick(item)\"\n >\n <td v-if=\"selectable\" class=\"djm-col-check\" @click.stop>\n <input\n type=\"checkbox\"\n :checked=\"checkedSet.has(item.key)\"\n :indeterminate=\"isIndeterminate(item.row)\"\n :aria-label=\"String(valueOf(item.row, columns[0] || {}))\"\n @change=\"toggleRowCheck(item.row)\"\n />\n </td>\n <td\n v-for=\"(column, index) in columns\"\n :key=\"column.key\"\n :style=\"{ textAlign: column.align || 'left' }\"\n >\n <span v-if=\"index === 0\" class=\"djm-tree-table-cell\">\n <span class=\"djm-tree-table-indent\" :style=\"{ width: (item.level - 1) * 18 + 'px' }\"></span>\n <button\n v-if=\"item.hasChildren\"\n class=\"djm-tree-table-toggle\"\n type=\"button\"\n :aria-expanded=\"String(item.expanded)\"\n :aria-label=\"item.expanded ? t('treeTable.collapse') : t('treeTable.expand')\"\n @click.stop=\"toggleExpand(item)\"\n >\n <DjmIcon :name=\"item.expanded ? 'chevron-down' : 'chevron-right'\" :size=\"13\" />\n </button>\n <span v-else class=\"djm-tree-table-toggle djm-is-empty\"></span>\n <slot :name=\"'cell-' + column.key\" :row=\"item.row\" :column=\"column\" :value=\"valueOf(item.row, column)\" :level=\"item.level\">\n {{ valueOf(item.row, column) }}\n </slot>\n </span>\n <slot v-else :name=\"'cell-' + column.key\" :row=\"item.row\" :column=\"column\" :value=\"valueOf(item.row, column)\" :level=\"item.level\">\n {{ valueOf(item.row, column) }}\n </slot>\n </td>\n </tr>\n </tbody>\n </table>\n\n <p v-if=\"loading && !rows.length\" class=\"djm-tree-table-empty\" role=\"status\">{{ t('treeTable.loading') }}</p>\n <p v-else-if=\"!rows.length\" class=\"djm-tree-table-empty\">{{ emptyLabel }}</p>\n </div>\n </div>\n `\n}\n", "import { ref, computed, watch, onBeforeUnmount } from 'vue'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\n\nconst pad = (value) => String(value).padStart(2, '0')\n\nfunction toKey (date) {\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`\n}\n\nfunction parseDate (value) {\n const parts = String(value || '').split('-').map(Number)\n if (parts.length !== 3 || parts.some((item) => !Number.isFinite(item))) return null\n return new Date(parts[0], parts[1] - 1, parts[2])\n}\n\n/** 'HH:mm' \u2192 \u5F53\u5929\u5206\u949F\u6570 */\nfunction toMinutes (value, fallback) {\n const parts = String(value || '').split(':').map(Number)\n if (parts.length !== 2 || parts.some((item) => !Number.isFinite(item))) return fallback\n return parts[0] * 60 + parts[1]\n}\n\n/**\n * \u65E5\u7A0B\u8868\uFF1A\u6309\u5468\u5C55\u793A\u65F6\u95F4\u8F74\u4E0A\u7684\u4E8B\u4EF6\u5757\uFF0COA \u4F1A\u8BAE\u5BA4 / \u6392\u73ED / \u9879\u76EE\u6392\u671F\u901A\u7528\n *\n * \u7528\u6CD5\uFF1A<DjmSchedule v-model=\"weekAnchor\" :items=\"items\" @event-click=\"open\" />\n * items: [{ id, title, date: '2026-10-27', start: '09:00', end: '10:30', color? }]\n */\nexport default {\n name: 'DjmSchedule',\n components: { DjmIcon: Icon },\n props: {\n // \u5468\u951A\u70B9\u65E5\u671F\uFF0C\u53EA\u53D6\u6240\u5728\u5468\n modelValue: { type: String, default: '' },\n items: { type: Array, default: () => [] },\n // \u65F6\u95F4\u8F74\u663E\u793A\u8303\u56F4\n startHour: { type: Number, default: 8 },\n endHour: { type: Number, default: 20 },\n hourHeight: { type: Number, default: 48 },\n showWeekend: { type: Boolean, default: true },\n title: { type: String, default: '' }\n },\n emits: ['update:modelValue', 'event-click', 'slot-click', 'week-change'],\n setup (props, { emit }) {\n const todayKey = toKey(new Date())\n // \u6BCF\u5206\u949F\u5237\u65B0\u4E00\u6B21\u5F53\u524D\u65F6\u95F4\u7EBF\n const nowMinutes = ref(new Date().getHours() * 60 + new Date().getMinutes())\n const timer = window.setInterval(() => {\n const now = new Date()\n nowMinutes.value = now.getHours() * 60 + now.getMinutes()\n }, 60000)\n\n // \u5F53\u524D\u5C55\u793A\u5468\u7684\u8D77\u70B9\uFF08\u5468\u4E00\uFF09\n const anchor = ref(props.modelValue || todayKey)\n watch(\n () => props.modelValue,\n (value) => {\n if (value) anchor.value = value\n }\n )\n\n function startOfWeek (value) {\n const date = parseDate(value) || new Date()\n const day = date.getDay() // \u5468\u65E5\u4E3A 0\uFF0C\u6362\u6210\u5468\u4E00\u4E3A 0\n const offset = (day + 6) % 7\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() - offset)\n }\n\n const weekStartDate = computed(() => startOfWeek(anchor.value))\n\n const weekdays = computed(() => t('schedule.weekdays').split(','))\n\n // \u6BCF\u5929\u7684\u4E8B\u4EF6\u5757\uFF1A\u6309\u65F6\u95F4\u6392\u5E03\uFF0C\u91CD\u53E0\u65F6\u6A2A\u5411\u5E73\u5206\n function layoutDay (list) {\n const sorted = list\n .map((item) => {\n const startMin = toMinutes(item.start, props.startHour * 60)\n const endMin = Math.max(startMin + 30, toMinutes(item.end, startMin + 60))\n return { item, startMin, endMin }\n })\n .sort((a, b) => a.startMin - b.startMin)\n\n const laneEnds = []\n const placed = sorted.map((entry) => {\n let lane = laneEnds.findIndex((end) => end <= entry.startMin)\n if (lane === -1) {\n laneEnds.push(entry.endMin)\n lane = laneEnds.length - 1\n } else {\n laneEnds[lane] = entry.endMin\n }\n return { ...entry, lane }\n })\n\n const total = Math.max(1, laneEnds.length)\n const dayStart = props.startHour * 60\n return placed.map((entry) => {\n const top = ((entry.startMin - dayStart) / 60) * props.hourHeight\n const height = ((entry.endMin - entry.startMin) / 60) * props.hourHeight\n return {\n key: entry.item.id !== undefined ? entry.item.id : entry.item.title + entry.startMin,\n item: entry.item,\n top: Math.max(0, top),\n height: Math.max(18, height - 2),\n left: (entry.lane * 100) / total,\n width: 100 / total\n }\n })\n }\n\n const days = computed(() => {\n const start = weekStartDate.value\n const list = Array.from({ length: 7 }, (_, index) => {\n const date = new Date(start.getFullYear(), start.getMonth(), start.getDate() + index)\n const key = toKey(date)\n return {\n key,\n date,\n day: date.getDate(),\n month: date.getMonth() + 1,\n weekday: weekdays.value[index] || '',\n today: key === todayKey,\n weekend: index >= 5,\n blocks: layoutDay(props.items.filter((item) => item.date === key))\n }\n })\n return props.showWeekend ? list : list.slice(0, 5)\n })\n\n // \u53EA\u6807\u6574\u70B9\u8D77\u70B9\uFF0C\u7EC8\u70B9\u7531\u6700\u540E\u4E00\u6761\u7F51\u683C\u7EBF\u81EA\u7136\u95ED\u5408\n const hours = computed(() => {\n const list = []\n for (let hour = props.startHour; hour < props.endHour; hour++) list.push(hour)\n return list\n })\n\n const bodyHeight = computed(() => (props.endHour - props.startHour) * props.hourHeight)\n\n // \u5468\u672B\u9690\u85CF\u65F6\u5217\u6570\u4F1A\u53D8\u6210 5\uFF0C\u7F51\u683C\u5217\u5BBD\u8DDF\u7740\u6570\u636E\u8D70\n const gridStyle = computed(() => ({\n gridTemplateColumns: '56px repeat(' + Math.max(1, days.value.length) + ', minmax(0, 1fr))'\n }))\n\n // \u5F53\u524D\u65F6\u95F4\u7EBF\u4F4D\u7F6E\n const nowTop = computed(() => ((nowMinutes.value - props.startHour * 60) / 60) * props.hourHeight)\n const showNowLine = computed(() =>\n nowMinutes.value >= props.startHour * 60 &&\n nowMinutes.value <= props.endHour * 60 &&\n days.value.some((day) => day.today)\n )\n\n const rangeLabel = computed(() => {\n const list = days.value\n if (!list.length) return ''\n const first = list[0]\n const last = list[list.length - 1]\n return `${first.month}\u6708${first.day}\u65E5 - ${last.month}\u6708${last.day}\u65E5`\n })\n\n function shiftWeek (delta) {\n const start = weekStartDate.value\n const next = new Date(start.getFullYear(), start.getMonth(), start.getDate() + delta * 7)\n anchor.value = toKey(next)\n emit('update:modelValue', anchor.value)\n emit('week-change', anchor.value)\n }\n\n function goToday () {\n anchor.value = todayKey\n emit('update:modelValue', todayKey)\n emit('week-change', todayKey)\n }\n\n function onBlockClick (block, day) {\n emit('event-click', block.item, day.key)\n }\n\n // \u70B9\u7A7A\u767D\u5904\u6362\u7B97\u6210\u534A\u5C0F\u65F6\u7C92\u5EA6\u7684\u65F6\u95F4\n function onSlotClick (event, day) {\n const rect = event.currentTarget.getBoundingClientRect()\n const ratio = (event.clientY - rect.top) / rect.height\n const minutes = props.startHour * 60 + Math.round((ratio * (props.endHour - props.startHour) * 60) / 30) * 30\n const hour = Math.floor(minutes / 60)\n const minute = minutes % 60\n emit('slot-click', { date: day.key, time: `${pad(hour)}:${pad(minute)}` })\n }\n\n onBeforeUnmount(() => window.clearInterval(timer))\n\n return {\n days,\n hours,\n bodyHeight,\n gridStyle,\n nowTop,\n showNowLine,\n rangeLabel,\n shiftWeek,\n goToday,\n onBlockClick,\n onSlotClick,\n t\n }\n },\n template: `\n <div class=\"djm-schedule\">\n <header class=\"djm-schedule-bar\">\n <span class=\"djm-schedule-title\">{{ title || t('schedule.title') }}</span>\n <span class=\"djm-schedule-range\">{{ rangeLabel }}</span>\n <span class=\"djm-schedule-navs\">\n <button class=\"djm-schedule-nav\" type=\"button\" :aria-label=\"t('schedule.prevWeek')\" @click=\"shiftWeek(-1)\">\n <DjmIcon name=\"chevron-left\" :size=\"14\" />\n </button>\n <button class=\"djm-link-btn\" type=\"button\" @click=\"goToday\">{{ t('schedule.today') }}</button>\n <button class=\"djm-schedule-nav\" type=\"button\" :aria-label=\"t('schedule.nextWeek')\" @click=\"shiftWeek(1)\">\n <DjmIcon name=\"chevron-right\" :size=\"14\" />\n </button>\n </span>\n </header>\n\n <div class=\"djm-schedule-scroll\">\n <div class=\"djm-schedule-head\" :style=\"gridStyle\">\n <span class=\"djm-schedule-gutter\"></span>\n <div\n v-for=\"day in days\"\n :key=\"day.key\"\n class=\"djm-schedule-day\"\n :class=\"{ 'djm-is-today': day.today }\"\n >\n <span class=\"djm-schedule-weekday\">{{ day.weekday }}</span>\n <span class=\"djm-schedule-date\">{{ day.day }}</span>\n </div>\n </div>\n\n <div class=\"djm-schedule-body\" :style=\"[gridStyle, { height: bodyHeight + 'px' }]\">\n <div class=\"djm-schedule-gutter\">\n <span\n v-for=\"hour in hours\"\n :key=\"hour\"\n class=\"djm-schedule-hour\"\n :style=\"{ height: hourHeight + 'px' }\"\n >{{ String(hour).padStart(2, '0') }}:00</span>\n </div>\n\n <div\n v-for=\"day in days\"\n :key=\"day.key\"\n class=\"djm-schedule-col\"\n :class=\"{ 'djm-is-today': day.today, 'djm-is-weekend': day.weekend }\"\n @click=\"onSlotClick($event, day)\"\n >\n <span\n v-for=\"hour in hours\"\n :key=\"hour\"\n class=\"djm-schedule-line\"\n :style=\"{ height: hourHeight + 'px' }\"\n ></span>\n\n <button\n v-for=\"block in day.blocks\"\n :key=\"block.key\"\n class=\"djm-schedule-event\"\n :class=\"block.item.color ? 'djm-schedule-event-' + block.item.color : ''\"\n type=\"button\"\n :style=\"{ top: block.top + 'px', height: block.height + 'px', left: block.left + '%', width: 'calc(' + block.width + '% - 4px)' }\"\n :title=\"block.item.title\"\n @click.stop=\"onBlockClick(block, day)\"\n >\n <span class=\"djm-schedule-event-title\">{{ block.item.title }}</span>\n <span v-if=\"block.height > 40\" class=\"djm-schedule-event-time\">\n {{ block.item.start }}<template v-if=\"block.item.end\"> - {{ block.item.end }}</template>\n </span>\n </button>\n\n <span\n v-if=\"day.today && showNowLine\"\n class=\"djm-schedule-now\"\n :style=\"{ top: nowTop + 'px' }\"\n aria-hidden=\"true\"\n ></span>\n </div>\n </div>\n </div>\n </div>\n `\n}\n", "import { ref, computed } from 'vue'\nimport Avatar from '../avatar/index.js'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\n\n/**\n * \u8BC4\u8BBA\u533A\uFF1A\u7559\u8A00\u5217\u8868 + \u8F93\u5165\u6846\uFF0C\u652F\u6301\u4E00\u7EA7\u56DE\u590D\n *\n * \u7528\u6CD5\uFF1A<DjmComment :list=\"list\" @submit=\"(text, replyTo) => add(text, replyTo)\" />\n * list: [{ id, author, avatar, content, time, children: [{ ... }] }]\n * time \u7531\u4E1A\u52A1\u4FA7\u683C\u5F0F\u5316\u6210\u5317\u4EAC\u65F6\u95F4\u5B57\u7B26\u4E32\u4F20\u5165\uFF0C\u7EC4\u4EF6\u53EA\u505A\u5C55\u793A\n */\nexport default {\n name: 'DjmComment',\n components: { DjmAvatar: Avatar, DjmIcon: Icon },\n props: {\n list: { type: Array, default: () => [] },\n maxLength: { type: Number, default: 500 },\n placeholder: { type: String, default: '' },\n submitText: { type: String, default: '' },\n // \u5355\u6761\u53EF\u5220\u9664\n removable: { type: Boolean, default: true },\n disabled: { type: Boolean, default: false },\n loading: { type: Boolean, default: false },\n emptyText: { type: String, default: '' }\n },\n emits: ['submit', 'reply', 'remove'],\n setup (props, { emit }) {\n const content = ref('')\n // \u6B63\u5728\u56DE\u590D\u7684\u6761\u76EE\uFF0Cnull \u8868\u793A\u53D1\u65B0\u8BC4\u8BBA\n const replyTarget = ref(null)\n\n const placeholderText = computed(() => {\n if (replyTarget.value) return t('comment.replyPlaceholder', { name: replyTarget.value.author })\n return props.placeholder || t('comment.placeholder')\n })\n\n const submitLabel = computed(() => props.submitText || t('comment.submit'))\n const emptyLabel = computed(() => props.emptyText || t('comment.empty'))\n const overLimit = computed(() => content.value.length > props.maxLength)\n const canSubmit = computed(() => content.value.trim().length > 0 && !overLimit.value && !props.disabled && !props.loading)\n\n function onInput (event) {\n content.value = event.target.value\n }\n\n function submit () {\n if (!canSubmit.value) return\n emit('submit', content.value.trim(), replyTarget.value)\n content.value = ''\n replyTarget.value = null\n }\n\n function startReply (item) {\n replyTarget.value = item\n emit('reply', item)\n }\n\n function cancelReply () {\n replyTarget.value = null\n }\n\n function remove (item) {\n emit('remove', item)\n }\n\n return {\n content,\n replyTarget,\n placeholderText,\n submitLabel,\n emptyLabel,\n overLimit,\n canSubmit,\n onInput,\n submit,\n startReply,\n cancelReply,\n remove,\n t\n }\n },\n template: `\n <div class=\"djm-comment\">\n <div v-if=\"!list.length\" class=\"djm-comment-empty\">{{ emptyLabel }}</div>\n\n <ul v-else class=\"djm-comment-list\">\n <li v-for=\"item in list\" :key=\"item.id\" class=\"djm-comment-item\">\n <DjmAvatar :src=\"item.avatar || ''\" :text=\"item.author\" size=\"sm\" />\n <div class=\"djm-comment-main\">\n <div class=\"djm-comment-head\">\n <strong class=\"djm-comment-author\">{{ item.author }}</strong>\n <time v-if=\"item.time\" class=\"djm-comment-time\">{{ item.time }}</time>\n </div>\n <p class=\"djm-comment-content\">{{ item.content }}</p>\n <div class=\"djm-comment-actions\">\n <button class=\"djm-link-btn\" type=\"button\" :disabled=\"disabled\" @click=\"startReply(item)\">\n {{ t('comment.reply') }}\n </button>\n <button v-if=\"removable\" class=\"djm-link-btn djm-danger\" type=\"button\" :disabled=\"disabled\" @click=\"remove(item)\">\n {{ t('comment.remove') }}\n </button>\n </div>\n\n <!-- \u4E00\u7EA7\u56DE\u590D\uFF1A\u7F29\u8FDB\u5C55\u793A\uFF0C\u4E0D\u518D\u7EE7\u7EED\u5D4C\u5957 -->\n <ul v-if=\"item.children && item.children.length\" class=\"djm-comment-replies\">\n <li v-for=\"child in item.children\" :key=\"child.id\" class=\"djm-comment-reply\">\n <DjmAvatar :src=\"child.avatar || ''\" :text=\"child.author\" size=\"sm\" />\n <div class=\"djm-comment-main\">\n <div class=\"djm-comment-head\">\n <strong class=\"djm-comment-author\">{{ child.author }}</strong>\n <time v-if=\"child.time\" class=\"djm-comment-time\">{{ child.time }}</time>\n </div>\n <p class=\"djm-comment-content\">{{ child.content }}</p>\n </div>\n </li>\n </ul>\n </div>\n </li>\n </ul>\n\n <div class=\"djm-comment-editor\">\n <div v-if=\"replyTarget\" class=\"djm-comment-replying\">\n <span>{{ t('comment.replyingTo', { name: replyTarget.author }) }}</span>\n <button class=\"djm-comment-cancel\" type=\"button\" :aria-label=\"t('comment.cancelReply')\" @click=\"cancelReply\">\n <DjmIcon name=\"x\" :size=\"12\" />\n </button>\n </div>\n <textarea\n class=\"djm-comment-input\"\n rows=\"3\"\n :value=\"content\"\n :placeholder=\"placeholderText\"\n :disabled=\"disabled\"\n :aria-label=\"placeholderText\"\n @input=\"onInput\"\n ></textarea>\n <div class=\"djm-comment-foot\">\n <span class=\"djm-comment-count\" :class=\"{ 'djm-is-over': overLimit }\">\n {{ content.length }}/{{ maxLength }}\n </span>\n <button class=\"djm-btn djm-btn-primary\" type=\"button\" :disabled=\"!canSubmit\" @click=\"submit\">\n {{ loading ? t('comment.submitting') : submitLabel }}\n </button>\n </div>\n </div>\n </div>\n `\n}\n", "import { ref, onMounted, onBeforeUnmount, watch } from 'vue'\nimport { t } from '../../locale/index.js'\n\n/**\n * \u624B\u5199\u7B7E\u540D\uFF1Acanvas \u753B\u677F\uFF0C\u62AC\u624B\u540E\u628A\u56FE\u7247 dataURL \u56DE\u4F20\n *\n * \u7528\u6CD5\uFF1A<DjmSignature v-model=\"signature\" :height=\"180\" />\n * v-model \u4E3A dataURL\uFF0C\u53EF\u76F4\u63A5\u5B58\u5E93\u6216\u56DE\u663E\uFF1B\u652F\u6301\u9F20\u6807\u3001\u89E6\u63A7\u7B14\u4E0E\u624B\u6307\n */\nexport default {\n name: 'DjmSignature',\n props: {\n modelValue: { type: String, default: '' },\n height: { type: Number, default: 180 },\n lineWidth: { type: Number, default: 2.4 },\n // \u4E0D\u4F20\u65F6\u8DDF\u968F\u4E3B\u9898\u6587\u5B57\u8272\uFF0C\u6697\u8272\u4E0B\u4E5F\u80FD\u770B\u6E05\n color: { type: String, default: '' },\n disabled: { type: Boolean, default: false },\n placeholder: { type: String, default: '' }\n },\n emits: ['update:modelValue', 'change', 'start', 'end', 'clear'],\n setup (props, { emit }) {\n const canvas = ref(null)\n const root = ref(null)\n // \u6BCF\u7B14\u4E3A\u70B9\u6570\u7EC4\uFF0C\u5750\u6807\u662F CSS \u50CF\u7D20\uFF0Cresize \u540E\u636E\u6B64\u91CD\u7ED8\n const strokes = ref([])\n // \u662F\u5426\u5B58\u5728\u5916\u90E8\u56DE\u663E\u7684\u56FE\u7247\uFF08\u7528\u6237\u5F00\u59CB\u65B0\u7B14\u8FF9\u540E\u6E05\u6389\uFF09\n const hasImage = ref(false)\n let imageCache = null\n let drawing = false\n let current = null\n let lastEmitted = props.modelValue\n let observer = null\n\n function ctxOf () {\n return canvas.value ? canvas.value.getContext('2d') : null\n }\n\n function inkColor () {\n if (props.color) return props.color\n const value = getComputedStyle(document.documentElement).getPropertyValue('--djm-text').trim()\n return value || '#1e2b3a'\n }\n\n function applyPen (ctx) {\n ctx.lineWidth = props.lineWidth\n ctx.lineCap = 'round'\n ctx.lineJoin = 'round'\n ctx.strokeStyle = inkColor()\n }\n\n // \u6309\u8BBE\u5907\u50CF\u7D20\u6BD4\u653E\u5927\u753B\u5E03\uFF0C\u907F\u514D\u7EBF\u6761\u53D1\u865A\n function setupCanvas () {\n const el = canvas.value\n if (!el) return\n const width = el.parentElement ? el.parentElement.clientWidth : el.clientWidth\n const dpr = window.devicePixelRatio || 1\n el.width = Math.max(1, Math.round(width * dpr))\n el.height = Math.max(1, Math.round(props.height * dpr))\n el.style.width = '100%'\n el.style.height = props.height + 'px'\n const ctx = ctxOf()\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0)\n applyPen(ctx)\n redraw()\n }\n\n function redraw () {\n const ctx = ctxOf()\n if (!ctx) return\n const width = canvas.value.width / (window.devicePixelRatio || 1)\n ctx.clearRect(0, 0, width, props.height)\n if (imageCache) ctx.drawImage(imageCache, 0, 0, width, props.height)\n applyPen(ctx)\n strokes.value.forEach((points) => {\n if (points.length < 2) {\n // \u5355\u70B9\u4E5F\u8981\u7559\u4E2A\u5706\u70B9\uFF0C\u907F\u514D\u8F7B\u70B9\u6CA1\u53CD\u5E94\n ctx.beginPath()\n ctx.arc(points[0].x, points[0].y, props.lineWidth / 2, 0, Math.PI * 2)\n ctx.fillStyle = inkColor()\n ctx.fill()\n return\n }\n ctx.beginPath()\n ctx.moveTo(points[0].x, points[0].y)\n for (let i = 1; i < points.length; i++) ctx.lineTo(points[i].x, points[i].y)\n ctx.stroke()\n })\n }\n\n function pointOf (event) {\n const rect = canvas.value.getBoundingClientRect()\n return { x: event.clientX - rect.left, y: event.clientY - rect.top }\n }\n\n function onPointerDown (event) {\n if (props.disabled) return\n event.preventDefault()\n drawing = true\n // \u65B0\u7B14\u8FF9\u8986\u76D6\u5916\u90E8\u56DE\u663E\u7684\u56FE\u7247\n imageCache = null\n hasImage.value = false\n current = [pointOf(event)]\n strokes.value = strokes.value.concat([current])\n // \u5408\u6210\u4E8B\u4EF6\u6216\u5DF2\u91CA\u653E\u7684\u6307\u9488\u4F1A\u629B\u9519\uFF0C\u6355\u83B7\u540E\u4ECD\u53EF\u7EE7\u7EED\u7ED8\u5236\n try {\n if (canvas.value.setPointerCapture) canvas.value.setPointerCapture(event.pointerId)\n } catch (error) {\n // \u5FFD\u7565\u65E0\u6CD5\u6355\u83B7\u6307\u9488\u7684\u60C5\u51B5\n }\n emit('start')\n }\n\n function onPointerMove (event) {\n if (!drawing || !current) return\n event.preventDefault()\n const point = pointOf(event)\n const ctx = ctxOf()\n const prev = current[current.length - 1]\n // \u589E\u91CF\u7ED8\u5236\u5F53\u524D\u7EBF\u6BB5\uFF0C\u907F\u514D\u6BCF\u6B21\u6574\u5C4F\u91CD\u7ED8\n ctx.beginPath()\n ctx.moveTo(prev.x, prev.y)\n ctx.lineTo(point.x, point.y)\n ctx.stroke()\n current.push(point)\n }\n\n function onPointerUp () {\n if (!drawing) return\n drawing = false\n current = null\n emitValue()\n emit('end')\n }\n\n function emitValue () {\n if (!canvas.value) return\n const value = strokes.value.length ? canvas.value.toDataURL('image/png') : ''\n lastEmitted = value\n emit('update:modelValue', value)\n emit('change', value)\n }\n\n function clear () {\n strokes.value = []\n imageCache = null\n hasImage.value = false\n const ctx = ctxOf()\n const width = canvas.value.width / (window.devicePixelRatio || 1)\n if (ctx) ctx.clearRect(0, 0, width, props.height)\n lastEmitted = ''\n emit('update:modelValue', '')\n emit('change', '')\n emit('clear')\n }\n\n function toDataURL () {\n return canvas.value ? canvas.value.toDataURL('image/png') : ''\n }\n\n const isEmpty = () => strokes.value.length === 0 && !hasImage.value\n\n // \u5916\u90E8\u503C\u53D8\u5316\u65F6\u56DE\u663E\uFF08\u8DF3\u8FC7\u81EA\u5DF1\u521A emit \u7684\u503C\uFF0C\u907F\u514D\u91CD\u590D\u52A0\u8F7D\uFF09\n watch(\n () => props.modelValue,\n (value) => {\n if (value === lastEmitted) return\n lastEmitted = value || ''\n if (!value) {\n strokes.value = []\n imageCache = null\n hasImage.value = false\n redraw()\n return\n }\n const img = new Image()\n img.onload = () => {\n imageCache = img\n hasImage.value = true\n strokes.value = []\n redraw()\n }\n img.src = value\n }\n )\n\n onMounted(() => {\n setupCanvas()\n if (props.modelValue) {\n const img = new Image()\n img.onload = () => {\n imageCache = img\n hasImage.value = true\n redraw()\n }\n img.src = props.modelValue\n }\n // \u5BB9\u5668\u5BBD\u5EA6\u53D8\u5316\u65F6\u91CD\u8BBE\u753B\u5E03\u5E76\u91CD\u7ED8\uFF0C\u7B14\u8FF9\u4E0D\u4E22\n if (window.ResizeObserver) {\n observer = new ResizeObserver(() => setupCanvas())\n if (root.value) observer.observe(root.value)\n }\n })\n\n onBeforeUnmount(() => {\n if (observer) observer.disconnect()\n })\n\n return {\n canvas,\n root,\n isEmpty,\n clear,\n onPointerDown,\n onPointerMove,\n onPointerUp,\n t\n }\n },\n expose: ['clear', 'toDataURL', 'isEmpty'],\n template: `\n <div class=\"djm-signature\" ref=\"root\" :class=\"{ 'djm-is-disabled': disabled }\">\n <div class=\"djm-signature-canvas-wrap\">\n <canvas\n class=\"djm-signature-canvas\"\n ref=\"canvas\"\n role=\"img\"\n :aria-label=\"t('signature.label')\"\n @pointerdown=\"onPointerDown\"\n @pointermove=\"onPointerMove\"\n @pointerup=\"onPointerUp\"\n @pointerleave=\"onPointerUp\"\n ></canvas>\n <span v-if=\"isEmpty()\" class=\"djm-signature-hint\">{{ placeholder || t('signature.hint') }}</span>\n </div>\n <div class=\"djm-signature-foot\">\n <button class=\"djm-btn djm-btn-sm\" type=\"button\" :disabled=\"disabled\" @click=\"clear\">\n {{ t('signature.clear') }}\n </button>\n </div>\n </div>\n `\n}\n", "import { ref, computed } from 'vue'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\n\n/** \u6807\u9898\u63D2\u5230\u6587\u6863 title \u91CC\uFF0C\u505A\u6700\u5C0F\u8F6C\u4E49 */\nfunction escapeHtml (text) {\n return String(text).replace(/[&<>\"]/g, (ch) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' }[ch]))\n}\n\n/**\n * \u6253\u5370\uFF1A\u628A\u63D2\u69FD\u5185\u5BB9\u590D\u5236\u5230\u4E34\u65F6 iframe \u6253\u5370\uFF0C\u4E0D\u5F71\u54CD\u5F53\u524D\u9875\u9762\n *\n * \u7528\u6CD5\uFF1A<DjmPrint title=\"\u62A5\u9500\u5355\"><div>\u5355\u636E\u5185\u5BB9</div></DjmPrint>\n * \u6253\u5370\u65F6\u4F1A\u5E26\u4E0A\u5F53\u524D\u9875\u9762\u7684\u5168\u90E8\u6837\u5F0F\u8868\uFF1B\u9875\u5185\u6309\u94AE\u52A0 .djm-print-toolbar \u53EF\u5728\u6253\u5370\u65F6\u9690\u85CF\n */\nexport default {\n name: 'DjmPrint',\n components: { DjmIcon: Icon },\n props: {\n title: { type: String, default: '' },\n showButton: { type: Boolean, default: true },\n buttonText: { type: String, default: '' },\n landscape: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false }\n },\n emits: ['before-print', 'after-print'],\n setup (props, { emit }) {\n const content = ref(null)\n\n const label = computed(() => props.buttonText || t('print.button'))\n\n // \u6536\u96C6\u5F53\u524D\u9875\u9762\u7684\u6837\u5F0F\u8868\u4E0E\u5185\u8054\u6837\u5F0F\uFF0C\u514B\u9686\u8FDB\u6253\u5370\u6587\u6863\n function collectStyles () {\n return Array.from(document.querySelectorAll('link[rel=\"stylesheet\"], style'))\n .map((el) => el.outerHTML)\n .join('')\n }\n\n function print () {\n if (props.disabled || !content.value) return\n emit('before-print')\n\n const iframe = document.createElement('iframe')\n iframe.setAttribute('aria-hidden', 'true')\n iframe.style.cssText = 'position:fixed;right:0;bottom:0;width:0;height:0;border:0;'\n document.body.appendChild(iframe)\n\n const doc = iframe.contentWindow.document\n const titleHtml = props.title\n ? `<h1 class=\"djm-print-heading\">${escapeHtml(props.title)}</h1>`\n : ''\n doc.open()\n doc.write(\n '<!doctype html><html><head><meta charset=\"utf-8\">' +\n `<title>${escapeHtml(props.title || document.title)}</title>` +\n collectStyles() +\n '<style>' +\n `@page { size: ${props.landscape ? 'A4 landscape' : 'A4 portrait'}; margin: 12mm; }` +\n 'html, body { background: #fff; margin: 0; padding: 0; }' +\n 'body { color: #000; font-size: 12px; }' +\n '.djm-print-toolbar, .djm-no-print { display: none !important; }' +\n '.djm-print-heading { margin: 0 0 12px; font-size: 17px; font-weight: 600; text-align: center; }' +\n // \u8868\u683C\u5728\u6253\u5370\u65F6\u5206\u9875\u66F4\u53CB\u597D\n 'table { page-break-inside: auto; } tr, img { page-break-inside: avoid; } thead { display: table-header-group; }' +\n '</style></head><body>' +\n '<div class=\"djm-print-stage\">' + titleHtml + content.value.innerHTML + '</div>' +\n '</body></html>'\n )\n doc.close()\n\n // \u7B49 iframe \u5185\u6837\u5F0F\u5C31\u7EEA\u518D\u8C03\u8D77\u6253\u5370\uFF0C\u907F\u514D\u9996\u5E27\u7A7A\u767D\n window.setTimeout(() => {\n try {\n iframe.contentWindow.focus()\n iframe.contentWindow.print()\n } finally {\n window.setTimeout(() => {\n iframe.remove()\n emit('after-print')\n }, 300)\n }\n }, 120)\n }\n\n return { content, label, print, t }\n },\n expose: ['print'],\n template: `\n <div class=\"djm-print\">\n <div v-if=\"showButton\" class=\"djm-print-actions djm-print-toolbar\">\n <button class=\"djm-btn\" type=\"button\" :disabled=\"disabled\" @click=\"print\">\n <DjmIcon name=\"printer\" :size=\"14\" />{{ label }}\n </button>\n <slot name=\"actions\"></slot>\n </div>\n <div class=\"djm-print-content\" ref=\"content\">\n <slot></slot>\n </div>\n </div>\n `\n}\n", "import { computed } from 'vue'\nimport { t } from '../../locale/index.js'\n\nconst DAY = 86400000\nconst pad = (value) => String(value).padStart(2, '0')\n\nfunction parseDate (value) {\n const parts = String(value || '').split('-').map(Number)\n if (parts.length !== 3 || parts.some((item) => !Number.isFinite(item))) return null\n return new Date(parts[0], parts[1] - 1, parts[2])\n}\n\nfunction toKey (date) {\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`\n}\n\n/** a \u4E0E b \u76F8\u5DEE\u7684\u5929\u6570\uFF08a \u665A\u4E8E b \u4E3A\u6B63\uFF09 */\nfunction dayDiff (a, b) {\n const da = parseDate(a)\n const db = parseDate(b)\n if (!da || !db) return 0\n return Math.round((da.getTime() - db.getTime()) / DAY)\n}\n\n/**\n * \u7518\u7279\u56FE\uFF1A\u4EFB\u52A1\u6761\u6309\u65E5\u671F\u94FA\u5728\u65F6\u95F4\u8F74\u4E0A\uFF0C\u5C55\u793A\u8D77\u6B62\u4E0E\u5B8C\u6210\u8FDB\u5EA6\n *\n * \u7528\u6CD5\uFF1A<DjmGantt :tasks=\"tasks\" @task-click=\"open\" />\n * tasks: [{ id, title, start: '2026-10-26', end: '2026-11-02', progress: 40, color? }]\n */\nexport default {\n name: 'DjmGantt',\n props: {\n tasks: { type: Array, default: () => [] },\n // \u5DE6\u4FA7\u4EFB\u52A1\u540D\u5217\u5BBD\u5EA6\n nameWidth: { type: Number, default: 168 },\n dayWidth: { type: Number, default: 36 },\n rowHeight: { type: Number, default: 40 },\n // \u53EF\u6307\u5B9A\u65F6\u95F4\u8303\u56F4\uFF0C\u7F3A\u7701\u6309\u4EFB\u52A1\u6700\u65E9\u5F00\u59CB\u4E0E\u6700\u665A\u7ED3\u675F\u81EA\u52A8\u7B97\n startDate: { type: String, default: '' },\n endDate: { type: String, default: '' },\n // \u81EA\u52A8\u8303\u56F4\u81F3\u5C11\u663E\u793A\u591A\u5C11\u5929\n minDays: { type: Number, default: 14 },\n showToday: { type: Boolean, default: true },\n emptyText: { type: String, default: '' }\n },\n emits: ['task-click'],\n setup (props, { emit }) {\n const todayKey = toKey(new Date())\n\n const range = computed(() => {\n const starts = props.tasks.map((task) => task.start).filter(Boolean).sort()\n const ends = props.tasks.map((task) => task.end || task.start).filter(Boolean).sort()\n let start = props.startDate || starts[0] || todayKey\n let end = props.endDate || ends[ends.length - 1] || start\n // \u4FDD\u8BC1\u533A\u95F4\u6709\u6548\u4E14\u6709\u6700\u5C0F\u5BBD\u5EA6\n if (end < start) end = start\n const span = dayDiff(end, start) + 1\n if (span < props.minDays) {\n const base = parseDate(start)\n end = toKey(new Date(base.getFullYear(), base.getMonth(), base.getDate() + props.minDays - 1))\n }\n return { start, end }\n })\n\n const days = computed(() => {\n const total = dayDiff(range.value.end, range.value.start) + 1\n const base = parseDate(range.value.start)\n return Array.from({ length: total }, (_, index) => {\n const date = new Date(base.getFullYear(), base.getMonth(), base.getDate() + index)\n const key = toKey(date)\n return {\n key,\n day: date.getDate(),\n month: date.getMonth() + 1,\n // \u6BCF\u6708\u4E00\u53F7\u548C\u9996\u5217\u6807\u51FA\u6708\u4EFD\n monthStart: index === 0 || date.getDate() === 1,\n today: key === todayKey,\n weekend: date.getDay() === 0 || date.getDay() === 6\n }\n })\n })\n\n const trackWidth = computed(() => days.value.length * props.dayWidth)\n const innerWidth = computed(() => props.nameWidth + trackWidth.value)\n\n // \u4EFB\u52A1\u6761\u4F4D\u7F6E\uFF1A\u6309\u5929\u6298\u7B97\u6210\u50CF\u7D20\n const bars = computed(() =>\n props.tasks.map((task, index) => {\n const start = task.start || range.value.start\n const end = task.end || start\n const offset = Math.max(0, dayDiff(start, range.value.start))\n const span = Math.max(1, dayDiff(end, start) + 1)\n const progress = Math.min(100, Math.max(0, Number(task.progress) || 0))\n return {\n task,\n key: task.id !== undefined ? task.id : index,\n left: offset * props.dayWidth,\n width: span * props.dayWidth,\n progress\n }\n })\n )\n\n const todayLeft = computed(() => {\n const index = days.value.findIndex((day) => day.today)\n if (index === -1) return null\n return props.nameWidth + index * props.dayWidth + props.dayWidth / 2\n })\n\n const emptyLabel = computed(() => props.emptyText || t('gantt.empty'))\n\n function onClick (bar) {\n emit('task-click', bar.task)\n }\n\n return {\n days,\n bars,\n trackWidth,\n innerWidth,\n todayLeft,\n emptyLabel,\n onClick,\n t\n }\n },\n template: `\n <div class=\"djm-gantt\">\n <div class=\"djm-gantt-scroll\">\n <div class=\"djm-gantt-inner\" :style=\"{ width: innerWidth + 'px' }\">\n <div class=\"djm-gantt-head\">\n <div class=\"djm-gantt-th-name\" :style=\"{ width: nameWidth + 'px' }\">{{ t('gantt.task') }}</div>\n <div\n v-for=\"day in days\"\n :key=\"day.key\"\n class=\"djm-gantt-th-day\"\n :class=\"{ 'djm-is-today': day.today, 'djm-is-weekend': day.weekend }\"\n :style=\"{ width: dayWidth + 'px' }\"\n >\n <span v-if=\"day.monthStart\" class=\"djm-gantt-month\">{{ day.month }}\u6708</span>\n <span class=\"djm-gantt-date\">{{ day.day }}</span>\n </div>\n </div>\n\n <div v-if=\"!tasks.length\" class=\"djm-gantt-empty\">{{ emptyLabel }}</div>\n\n <div\n v-for=\"bar in bars\"\n :key=\"bar.key\"\n class=\"djm-gantt-row\"\n :style=\"{ height: rowHeight + 'px' }\"\n >\n <div class=\"djm-gantt-td-name\" :style=\"{ width: nameWidth + 'px' }\" :title=\"bar.task.title\">\n {{ bar.task.title }}\n </div>\n <div class=\"djm-gantt-track\" :style=\"{ width: trackWidth + 'px' }\">\n <span\n v-for=\"day in days\"\n :key=\"day.key\"\n class=\"djm-gantt-cell\"\n :class=\"{ 'djm-is-today': day.today, 'djm-is-weekend': day.weekend }\"\n :style=\"{ width: dayWidth + 'px' }\"\n ></span>\n <button\n class=\"djm-gantt-bar\"\n :class=\"bar.task.color ? 'djm-gantt-bar-' + bar.task.color : ''\"\n type=\"button\"\n :style=\"{ left: bar.left + 'px', width: bar.width + 'px', top: (rowHeight - 22) / 2 + 'px' }\"\n :title=\"bar.task.title + ' ' + bar.progress + '%'\"\n @click=\"onClick(bar)\"\n >\n <span class=\"djm-gantt-bar-progress\" :style=\"{ width: bar.progress + '%' }\"></span>\n <span class=\"djm-gantt-bar-text\">\n <span class=\"djm-gantt-bar-title\">{{ bar.task.title }}</span>\n <span v-if=\"bar.width >= 90\" class=\"djm-gantt-bar-pct\">{{ bar.progress }}%</span>\n </span>\n </button>\n </div>\n </div>\n\n <span\n v-if=\"showToday && todayLeft !== null && tasks.length\"\n class=\"djm-gantt-today\"\n :style=\"{ left: todayLeft + 'px' }\"\n aria-hidden=\"true\"\n ></span>\n </div>\n </div>\n </div>\n `\n}\n", "import { ref, computed, watch } from 'vue'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\n\nlet uidSeed = 0\n\n/**\n * \u52A8\u6001\u5B57\u6BB5\u5217\u8868\uFF1A\u4E00\u7EC4\u53EF\u589E\u5220\u7684\u8F93\u5165\u884C\uFF0C\u62A5\u9500\u660E\u7EC6\u3001\u5408\u540C\u6761\u6B3E\u3001\u591A\u8054\u7CFB\u4EBA\u7B49\u573A\u666F\n *\n * \u7528\u6CD5\uFF1A<DjmFieldList v-model=\"rows\" :fields=\"fields\" :min=\"1\" />\n * fields: [{ key, label, type: input|number|select|date, options, width, required }]\n */\nexport default {\n name: 'DjmFieldList',\n components: { DjmIcon: Icon },\n props: {\n modelValue: { type: Array, default: () => [] },\n fields: { type: Array, default: () => [] },\n addText: { type: String, default: '' },\n // \u884C\u6570\u9650\u5236\uFF0Cmin \u4E3A 1 \u65F6\u6700\u540E\u4E00\u884C\u4E0D\u53EF\u5220\u9664\n min: { type: Number, default: 0 },\n max: { type: Number, default: 0 },\n // \u65B0\u589E\u884C\u7684\u521D\u59CB\u503C\n defaultItem: { type: Object, default: null },\n showIndex: { type: Boolean, default: true },\n disabled: { type: Boolean, default: false },\n emptyText: { type: String, default: '' }\n },\n emits: ['update:modelValue', 'add', 'remove', 'change'],\n setup (props, { emit }) {\n // \u6BCF\u884C\u4E00\u4E2A\u7A33\u5B9A uid\uFF0C\u907F\u514D\u5220\u9664\u4E2D\u95F4\u884C\u65F6\u8F93\u5165\u6846\u4E32\u503C\n const uids = ref([])\n function syncUids () {\n const length = props.modelValue.length\n if (uids.value.length === length) return\n const next = uids.value.slice(0, length)\n while (next.length < length) next.push(++uidSeed)\n uids.value = next\n }\n syncUids()\n watch(() => props.modelValue.length, syncUids)\n\n // \u9519\u8BEF\u4FE1\u606F\uFF1A{ \u884C uid: { \u5B57\u6BB5 key: \u6587\u6848 } }\n const errors = ref({})\n\n const addLabel = computed(() => props.addText || t('fieldList.add'))\n const emptyLabel = computed(() => props.emptyText || t('fieldList.empty'))\n const canAdd = computed(() => !props.disabled && (!props.max || props.modelValue.length < props.max))\n const canRemove = computed(() => !props.disabled && props.modelValue.length > props.min)\n\n function commit (list) {\n emit('update:modelValue', list)\n emit('change', list)\n }\n\n function setValue (index, key, value) {\n const list = props.modelValue.map((row, i) => (i === index ? { ...row, [key]: value } : row))\n commit(list)\n // \u6709\u503C\u540E\u6E05\u6389\u8BE5\u5B57\u6BB5\u7684\u9519\u8BEF\n const uid = uids.value[index]\n if (errors.value[uid] && errors.value[uid][key]) {\n const rowErrors = { ...errors.value[uid] }\n delete rowErrors[key]\n errors.value = { ...errors.value, [uid]: rowErrors }\n }\n }\n\n function onInput (index, field, event) {\n const raw = event.target.value\n if (field.type !== 'number') {\n setValue(index, field.key, raw)\n return\n }\n // \u8F93\u5165\u4E2D\u7684 \"-\"\u3001\"1.\" \u7B49\u4E2D\u95F4\u6001\u5148\u4FDD\u7559\u539F\u6587\uFF0C\u8F6C\u6210\u6570\u5B57\u518D\u56DE\u5199\u4F1A\u51FA\u73B0 NaN\n const num = Number(raw)\n setValue(index, field.key, raw === '' || !Number.isFinite(num) ? raw : num)\n }\n\n function add () {\n if (!canAdd.value) return\n const item = props.defaultItem ? { ...props.defaultItem } : {}\n commit(props.modelValue.concat([item]))\n emit('add', item)\n }\n\n function remove (index) {\n if (!canRemove.value) return\n const list = props.modelValue.slice()\n const [removed] = list.splice(index, 1)\n commit(list)\n emit('remove', removed, index)\n }\n\n function onBlur (index, field) {\n if (!field.required) return\n const row = props.modelValue[index] || {}\n const value = row[field.key]\n const empty = value === '' || value === undefined || value === null\n if (!empty) return\n const uid = uids.value[index]\n errors.value = {\n ...errors.value,\n [uid]: { ...(errors.value[uid] || {}), [field.key]: t('fieldList.required', { label: field.label || field.key }) }\n }\n }\n\n function errorOf (index, field) {\n const uid = uids.value[index]\n return (errors.value[uid] && errors.value[uid][field.key]) || ''\n }\n\n /** \u6821\u9A8C\u5168\u90E8\u5FC5\u586B\uFF0C\u8FD4\u56DE\u662F\u5426\u901A\u8FC7 */\n function validate () {\n const next = {}\n props.modelValue.forEach((row, index) => {\n const uid = uids.value[index]\n const rowErrors = {}\n props.fields.forEach((field) => {\n if (!field.required) return\n const value = row[field.key]\n if (value === '' || value === undefined || value === null) {\n rowErrors[field.key] = t('fieldList.required', { label: field.label || field.key })\n }\n })\n if (Object.keys(rowErrors).length) next[uid] = rowErrors\n })\n errors.value = next\n return Object.keys(next).length === 0\n }\n\n function valueOf (row, key) {\n const value = row[key]\n return value === undefined || value === null ? '' : value\n }\n\n return {\n uids,\n errors,\n addLabel,\n emptyLabel,\n canAdd,\n canRemove,\n add,\n remove,\n onInput,\n onBlur,\n errorOf,\n validate,\n valueOf,\n t\n }\n },\n expose: ['validate'],\n template: `\n <div class=\"djm-field-list\">\n <div v-if=\"!modelValue.length\" class=\"djm-field-list-empty\">{{ emptyLabel }}</div>\n\n <div v-for=\"(row, index) in modelValue\" :key=\"uids[index]\" class=\"djm-field-list-row\">\n <span v-if=\"showIndex\" class=\"djm-field-list-index\">{{ index + 1 }}</span>\n\n <div\n v-for=\"field in fields\"\n :key=\"field.key\"\n class=\"djm-field-list-item\"\n :style=\"{ width: field.width ? field.width + 'px' : undefined, flex: field.width ? 'none' : '1 1 0' }\"\n >\n <label class=\"djm-field-list-label\" :for=\"'djm-fl-' + uids[index] + '-' + field.key\">\n {{ field.label || field.key }}\n <span v-if=\"field.required\" class=\"djm-field-list-required\" aria-hidden=\"true\">*</span>\n </label>\n\n <select\n v-if=\"field.type === 'select'\"\n class=\"djm-field-list-control\"\n :class=\"{ 'djm-is-error': !!errorOf(index, field) }\"\n :id=\"'djm-fl-' + uids[index] + '-' + field.key\"\n :value=\"valueOf(row, field.key)\"\n :disabled=\"disabled\"\n @change=\"onInput(index, field, $event)\"\n @blur=\"onBlur(index, field)\"\n >\n <option value=\"\">{{ field.placeholder || t('fieldList.select') }}</option>\n <option v-for=\"opt in (field.options || [])\" :key=\"opt.value !== undefined ? opt.value : opt\" :value=\"opt.value !== undefined ? opt.value : opt\">\n {{ opt.label !== undefined ? opt.label : opt }}\n </option>\n </select>\n\n <input\n v-else\n class=\"djm-field-list-control\"\n autocomplete=\"off\"\n :class=\"{ 'djm-is-error': !!errorOf(index, field) }\"\n :id=\"'djm-fl-' + uids[index] + '-' + field.key\"\n :type=\"field.type === 'number' ? 'number' : (field.type === 'date' ? 'date' : 'text')\"\n :value=\"valueOf(row, field.key)\"\n :placeholder=\"field.placeholder || ''\"\n :disabled=\"disabled\"\n @input=\"onInput(index, field, $event)\"\n @blur=\"onBlur(index, field)\"\n />\n\n <span v-if=\"errorOf(index, field)\" class=\"djm-field-list-error\">{{ errorOf(index, field) }}</span>\n </div>\n\n <button\n class=\"djm-field-list-remove\"\n type=\"button\"\n :disabled=\"!canRemove\"\n :aria-label=\"t('fieldList.remove')\"\n @click=\"remove(index)\"\n >\n <DjmIcon name=\"trash\" :size=\"14\" />\n </button>\n </div>\n\n <button v-if=\"canAdd\" class=\"djm-field-list-add\" type=\"button\" @click=\"add\">\n <DjmIcon name=\"plus\" :size=\"14\" />{{ addLabel }}\n </button>\n </div>\n `\n}\n", "import { ref, computed, watch, nextTick } from 'vue'\nimport Avatar from '../avatar/index.js'\nimport { t } from '../../locale/index.js'\n\n/**\n * \u5BF9\u8BDD\u6C14\u6CE1\uFF1A\u6D88\u606F\u6D41 + \u8F93\u5165\u533A\uFF0C\u5BA2\u670D\u3001\u534F\u4F5C\u8BC4\u8BBA\u3001\u5DE5\u5355\u6C9F\u901A\u901A\u7528\n *\n * \u7528\u6CD5\uFF1A<DjmChat :messages=\"messages\" @submit=\"send\" />\n * messages: [{ id, from: 'me' | 'other', name, avatar, content, time, type: 'text' | 'image' | 'system' }]\n */\nexport default {\n name: 'DjmChat',\n components: { DjmAvatar: Avatar },\n props: {\n messages: { type: Array, default: () => [] },\n placeholder: { type: String, default: '' },\n sendText: { type: String, default: '' },\n // \u5173\u95ED\u8F93\u5165\u533A\uFF0C\u53EA\u8BFB\u67E5\u770B\n readonly: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n loading: { type: Boolean, default: false },\n height: { type: [Number, String], default: 360 },\n emptyText: { type: String, default: '' }\n },\n emits: ['submit'],\n setup (props, { emit }) {\n const content = ref('')\n const listRef = ref(null)\n\n const placeholderText = computed(() => props.placeholder || t('chat.placeholder'))\n const sendLabel = computed(() => props.sendText || t('chat.send'))\n const emptyLabel = computed(() => props.emptyText || t('chat.empty'))\n const canSend = computed(() => content.value.trim().length > 0 && !props.disabled && !props.loading)\n\n function scrollToBottom () {\n const el = listRef.value\n if (el) el.scrollTop = el.scrollHeight\n }\n\n // \u65B0\u6D88\u606F\u8FDB\u6765\u76F4\u63A5\u6EDA\u5230\u5E95\uFF0C\u7B26\u5408\u804A\u5929\u4E60\u60EF\n watch(\n () => props.messages.length,\n () => nextTick(scrollToBottom)\n )\n\n function onInput (event) {\n content.value = event.target.value\n }\n\n function submit () {\n if (!canSend.value) return\n emit('submit', content.value.trim())\n content.value = ''\n }\n\n // Enter \u53D1\u9001\uFF0CShift + Enter \u6362\u884C\n function onKeydown (event) {\n if (event.key !== 'Enter' || event.shiftKey) return\n event.preventDefault()\n submit()\n }\n\n function isSelf (message) {\n return message.from === 'me'\n }\n\n return {\n content,\n listRef,\n placeholderText,\n sendLabel,\n emptyLabel,\n canSend,\n onInput,\n onKeydown,\n submit,\n isSelf,\n t\n }\n },\n mounted () {\n this.listRef.scrollTop = this.listRef.scrollHeight\n },\n template: `\n <div class=\"djm-chat\">\n <div\n class=\"djm-chat-list\"\n ref=\"listRef\"\n :style=\"{ height: typeof height === 'number' ? height + 'px' : height }\"\n tabindex=\"0\"\n role=\"log\"\n :aria-label=\"t('chat.label')\"\n >\n <p v-if=\"!messages.length\" class=\"djm-chat-empty\">{{ emptyLabel }}</p>\n\n <div\n v-for=\"message in messages\"\n :key=\"message.id\"\n class=\"djm-chat-line\"\n :class=\"{\n 'djm-is-self': isSelf(message) && message.type !== 'system',\n 'djm-is-system': message.type === 'system'\n }\"\n >\n <template v-if=\"message.type === 'system'\">\n <span class=\"djm-chat-system\">{{ message.content }}</span>\n </template>\n\n <template v-else>\n <DjmAvatar\n v-if=\"!isSelf(message)\"\n class=\"djm-chat-avatar\"\n :src=\"message.avatar || ''\"\n :text=\"message.name || ''\"\n size=\"sm\"\n />\n <div class=\"djm-chat-body\">\n <div v-if=\"!isSelf(message) && message.name\" class=\"djm-chat-name\">{{ message.name }}</div>\n <div class=\"djm-chat-bubble\" :class=\"{ 'djm-is-image': message.type === 'image' }\">\n <img v-if=\"message.type === 'image'\" :src=\"message.content\" :alt=\"t('chat.image')\" />\n <template v-else>{{ message.content }}</template>\n </div>\n <div class=\"djm-chat-meta\">\n <span v-if=\"message.time\" class=\"djm-chat-time\">{{ message.time }}</span>\n <span v-if=\"message.status === 'sending'\" class=\"djm-chat-status\">{{ t('chat.sending') }}</span>\n <span v-else-if=\"message.status === 'failed'\" class=\"djm-chat-status djm-is-failed\">{{ t('chat.failed') }}</span>\n </div>\n </div>\n <DjmAvatar\n v-if=\"isSelf(message)\"\n class=\"djm-chat-avatar\"\n :src=\"message.avatar || ''\"\n :text=\"message.name || t('chat.me')\"\n size=\"sm\"\n />\n </template>\n </div>\n </div>\n\n <div v-if=\"!readonly\" class=\"djm-chat-editor\">\n <textarea\n class=\"djm-chat-input\"\n rows=\"2\"\n :value=\"content\"\n :placeholder=\"placeholderText\"\n :disabled=\"disabled\"\n :aria-label=\"placeholderText\"\n @input=\"onInput\"\n @keydown=\"onKeydown\"\n ></textarea>\n <button class=\"djm-btn djm-btn-primary\" type=\"button\" :disabled=\"!canSend\" @click=\"submit\">\n {{ loading ? t('chat.sending') : sendLabel }}\n </button>\n </div>\n </div>\n `\n}\n", "import { ref, computed, watch } from 'vue'\nimport Avatar from '../avatar/index.js'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\n\n/**\n * \u7EC4\u7EC7\u67B6\u6784\u56FE\uFF1A\u5355\u6839\u6811\u5F62\u7ED3\u6784\uFF0C\u6B63\u4EA4\u8FDE\u7EBF\uFF0C\u8282\u70B9\u53EF\u6298\u53E0\n *\n * \u7528\u6CD5\uFF1A<DjmOrgChart :data=\"root\" @node-click=\"open\" />\n * data: { id, name, title, avatar, children: [] }\n */\nexport default {\n name: 'DjmOrgChart',\n components: { DjmAvatar: Avatar, DjmIcon: Icon },\n props: {\n data: { type: Object, default: null },\n nodeWidth: { type: Number, default: 168 },\n nodeHeight: { type: Number, default: 68 },\n // \u540C\u7EA7\u8282\u70B9\u6C34\u5E73\u95F4\u8DDD\n gap: { type: Number, default: 20 },\n // \u5C42\u4E0E\u5C42\u4E4B\u95F4\u7684\u5782\u76F4\u95F4\u8DDD\n verticalGap: { type: Number, default: 40 },\n collapsible: { type: Boolean, default: true },\n defaultExpandAll: { type: Boolean, default: true },\n emptyText: { type: String, default: '' }\n },\n emits: ['node-click'],\n setup (props, { emit }) {\n function keyOf (node) {\n return node && node.id !== undefined ? node.id : (node ? node.name : '')\n }\n\n // \u6298\u53E0\u7684\u8282\u70B9 key\uFF1A\u9ED8\u8BA4\u5168\u90E8\u5C55\u5F00\uFF0C\u5173\u95ED\u65F6\u628A\u6709\u4E0B\u7EA7\u7684\u8282\u70B9\u4E00\u6B21\u6536\u8D77\u6765\n function collapsedByDefault (node) {\n const keys = []\n function walk (item) {\n const kids = (item && item.children) || []\n if (kids.length) {\n keys.push(keyOf(item))\n kids.forEach(walk)\n }\n }\n walk(node)\n return keys\n }\n\n const collapsed = ref(props.defaultExpandAll ? [] : collapsedByDefault(props.data))\n\n // \u6570\u636E\u5F02\u6B65\u5230\u8FBE\u65F6\u91CD\u65B0\u6309\u9ED8\u8BA4\u7B56\u7565\u6536\u8D77\uFF0C\u9996\u5E27 data \u4E3A\u7A7A\u4E5F\u80FD\u6B63\u786E\u5C55\u5F00\n watch(() => props.data, (data) => {\n collapsed.value = props.defaultExpandAll ? [] : collapsedByDefault(data)\n })\n\n const layout = computed(() => {\n if (!props.data) return { nodes: [], links: [], width: 0, height: 0 }\n const rowH = props.nodeHeight + props.verticalGap\n let cursor = 0\n\n // \u5148\u9012\u5F52\u7B97\u597D\u6BCF\u884C\u7684 x / y\uFF1A\u53F6\u5B50\u987A\u5E8F\u5360\u4F4D\uFF0C\u7236\u8282\u70B9\u53D6\u5B50\u8282\u70B9\u4E2D\u70B9\n function build (node, depth) {\n const key = keyOf(node)\n const kids = node.children || []\n const isCollapsed = props.collapsible && collapsed.value.indexOf(key) > -1\n const visibleKids = isCollapsed ? [] : kids\n const childrenItems = visibleKids.map((child) => build(child, depth + 1))\n\n let x\n if (!childrenItems.length) {\n x = cursor\n cursor += props.nodeWidth + props.gap\n } else {\n x = (childrenItems[0].x + childrenItems[childrenItems.length - 1].x) / 2\n }\n\n return {\n key,\n node,\n depth,\n x,\n y: depth * rowH,\n collapsed: isCollapsed,\n hasChildren: kids.length > 0,\n childrenItems\n }\n }\n\n // \u518D\u524D\u5E8F\u5C55\u5F00\uFF0C\u4FDD\u8BC1 DOM \u987A\u5E8F\u4E0E\u89C6\u89C9\u987A\u5E8F\u4E00\u81F4\uFF08\u952E\u76D8 Tab \u4ECE\u4E0A\u5C42\u5F80\u4E0B\u8D70\uFF09\n const nodes = []\n const links = []\n function flatten (item, parent) {\n nodes.push(item)\n if (parent) links.push({ from: parent, to: item })\n item.childrenItems.forEach((child) => flatten(child, item))\n }\n const root = build(props.data, 0)\n flatten(root, null)\n\n const maxDepth = nodes.reduce((max, item) => Math.max(max, item.depth), 0)\n return {\n nodes,\n links,\n width: Math.max(cursor, props.nodeWidth),\n height: (maxDepth + 1) * props.nodeHeight + maxDepth * props.verticalGap,\n root\n }\n })\n\n function toggle (item) {\n if (!props.collapsible || !item.hasChildren) return\n const index = collapsed.value.indexOf(item.key)\n const next = collapsed.value.slice()\n if (index > -1) next.splice(index, 1)\n else next.push(item.key)\n collapsed.value = next\n }\n\n // \u6B63\u4EA4\u6298\u7EBF\uFF1A\u7236\u8282\u70B9\u5E95\u90E8 \u2192 \u4E2D\u95F4\u6A2A\u7EBF \u2192 \u5B50\u8282\u70B9\u9876\u90E8\n function linkPath (link) {\n const fx = link.from.x + props.nodeWidth / 2\n const fy = link.from.y + props.nodeHeight\n const tx = link.to.x + props.nodeWidth / 2\n const ty = link.to.y\n const mid = fy + (ty - fy) / 2\n return `M${fx} ${fy} V${mid} H${tx} V${ty}`\n }\n\n function onClick (item) {\n emit('node-click', item.node)\n }\n\n const emptyLabel = computed(() => props.emptyText || t('orgChart.empty'))\n\n return {\n layout,\n toggle,\n linkPath,\n onClick,\n emptyLabel,\n t\n }\n },\n template: `\n <div class=\"djm-org-chart\">\n <p v-if=\"!data\" class=\"djm-org-chart-empty\">{{ emptyLabel }}</p>\n\n <div v-else class=\"djm-org-chart-scroll\" tabindex=\"0\">\n <div\n class=\"djm-org-chart-canvas\"\n :style=\"{ width: layout.width + 'px', height: layout.height + 'px' }\"\n >\n <svg class=\"djm-org-chart-lines\" :width=\"layout.width\" :height=\"layout.height\" aria-hidden=\"true\">\n <path\n v-for=\"(link, index) in layout.links\"\n :key=\"index\"\n :d=\"linkPath(link)\"\n fill=\"none\"\n />\n </svg>\n\n <div\n v-for=\"item in layout.nodes\"\n :key=\"item.key\"\n class=\"djm-org-chart-node\"\n :class=\"{ 'djm-is-leaf': !item.hasChildren }\"\n :style=\"{ left: item.x + 'px', top: item.y + 'px', width: nodeWidth + 'px', height: nodeHeight + 'px' }\"\n >\n <button type=\"button\" class=\"djm-org-chart-hit\" @click=\"onClick(item)\">\n <DjmAvatar :src=\"item.node.avatar || ''\" :text=\"item.node.name\" size=\"sm\" />\n <span class=\"djm-org-chart-main\">\n <strong class=\"djm-org-chart-name\">{{ item.node.name }}</strong>\n <span v-if=\"item.node.title\" class=\"djm-org-chart-title\">{{ item.node.title }}</span>\n </span>\n </button>\n\n <button\n v-if=\"item.hasChildren && collapsible\"\n class=\"djm-org-chart-toggle\"\n type=\"button\"\n :aria-expanded=\"String(!item.collapsed)\"\n :aria-label=\"t('orgChart.toggle')\"\n @click=\"toggle(item)\"\n >\n <DjmIcon :name=\"item.collapsed ? 'plus' : 'minus'\" :size=\"10\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n `\n}\n", "import { computed } from 'vue'\nimport Icon from '../icon/index.js'\nimport { t } from '../../locale/index.js'\n\n/**\n * \u9875\u9762\u6807\u7B7E\u5BFC\u822A\uFF1A\u540E\u53F0\u591A\u9875\u7B7E\uFF0C\u53EF\u5173\u95ED\n *\n * \u7528\u6CD5\uFF1A<DjmPageTabs v-model=\"active\" :tabs=\"tabs\" @close=\"onClose\" />\n * tabs: [{ key, title, closable }]\uFF0Cclosable \u672A\u8BBE\u7F6E\u65F6\u53D6\u5168\u5C40 closable\n * \u5207\u6362\u4E0E\u5173\u95ED\u662F\u4E24\u4E2A\u5E76\u5217\u6309\u94AE\uFF0C\u907F\u514D\u4EA4\u4E92\u5143\u7D20\u5D4C\u5957\n */\nexport default {\n name: 'DjmPageTabs',\n components: { DjmIcon: Icon },\n props: {\n modelValue: { type: String, default: '' },\n tabs: { type: Array, default: () => [] },\n closable: { type: Boolean, default: true }\n },\n emits: ['update:modelValue', 'change', 'close'],\n setup (props, { emit }) {\n const label = computed(() => t('pageTabs.label'))\n\n function canClose (tab) {\n return tab.closable === undefined ? props.closable : tab.closable\n }\n\n function select (tab) {\n if (tab.key === props.modelValue) return\n emit('update:modelValue', tab.key)\n emit('change', tab.key, tab)\n }\n\n function close (tab) {\n emit('close', tab.key, tab)\n }\n\n // \u4E2D\u952E\u70B9\u51FB\u5173\u95ED\uFF0C\u4E0E\u6D4F\u89C8\u5668\u9875\u7B7E\u4E60\u60EF\u4E00\u81F4\n function onAuxClick (tab, event) {\n if (event.button !== 1 || !canClose(tab)) return\n event.preventDefault()\n close(tab)\n }\n\n return { label, canClose, select, close, onAuxClick, t }\n },\n template: `\n <div class=\"djm-page-tabs\">\n <nav class=\"djm-page-tabs-list\" :aria-label=\"label\">\n <div\n v-for=\"tab in tabs\"\n :key=\"tab.key\"\n class=\"djm-page-tabs-item\"\n :class=\"{ 'djm-is-active': tab.key === modelValue }\"\n >\n <button\n class=\"djm-page-tabs-title\"\n type=\"button\"\n :title=\"tab.title\"\n :aria-current=\"tab.key === modelValue ? 'page' : null\"\n @click=\"select(tab)\"\n @auxclick=\"onAuxClick(tab, $event)\"\n >{{ tab.title }}</button>\n <button\n v-if=\"canClose(tab)\"\n class=\"djm-page-tabs-close\"\n type=\"button\"\n :aria-label=\"t('pageTabs.close') + ' ' + tab.title\"\n @click=\"close(tab)\"\n >\n <DjmIcon name=\"x\" :size=\"11\" />\n </button>\n </div>\n </nav>\n <div v-if=\"$slots.extra\" class=\"djm-page-tabs-extra\">\n <slot name=\"extra\"></slot>\n </div>\n </div>\n `\n}\n", "/**\n * \u6811\u8282\u70B9\u79FB\u52A8\uFF1A\u4F9B Tree \u7684 node-drop \u4E8B\u4EF6\u914D\u5408\u4F7F\u7528\n * \u539F\u5730\u4FEE\u6539 data\uFF0C\u8FD4\u56DE\u662F\u5426\u79FB\u52A8\u6210\u529F\n *\n * position: before / after\uFF08\u540C\u7EA7\u63D2\u5165\uFF09| inside\uFF08\u6210\u4E3A\u5B50\u8282\u70B9\uFF09\n */\nfunction findEntry (nodes, key, nodeKey, parent = null) {\n for (let index = 0; index < nodes.length; index++) {\n const node = nodes[index]\n if (node[nodeKey] === key) return { node, list: nodes, index, parent }\n const children = node.children\n if (children && children.length) {\n const found = findEntry(children, key, nodeKey, node)\n if (found) return found\n }\n }\n return null\n}\n\nfunction containsKey (node, key, nodeKey) {\n if (node[nodeKey] === key) return true\n const children = node.children || []\n return children.some((child) => containsKey(child, key, nodeKey))\n}\n\nexport function moveTreeNode (data, dragKey, dropKey, position = 'before', nodeKey = 'id') {\n if (!Array.isArray(data) || dragKey === dropKey) return false\n\n const source = findEntry(data, dragKey, nodeKey)\n if (!source) return false\n // \u4E0D\u80FD\u628A\u8282\u70B9\u62D6\u8FDB\u81EA\u5DF1\u7684\u5B50\u6811\uFF0C\u5426\u5219\u6570\u636E\u4F1A\u65AD\u94FE\n if (containsKey(source.node, dropKey, nodeKey)) return false\n\n // \u5148\u6458\u51FA\uFF0C\u518D\u6309\u843D\u70B9\u63D2\u5165\uFF1B\u6458\u51FA\u540E\u91CD\u65B0\u67E5\u627E\uFF0C\u907F\u514D\u4E0B\u6807\u504F\u79FB\n source.list.splice(source.index, 1)\n const target = findEntry(data, dropKey, nodeKey)\n if (!target) {\n source.list.splice(source.index, 0, source.node)\n return false\n }\n\n if (position === 'inside') {\n if (!Array.isArray(target.node.children)) target.node.children = []\n target.node.children.push(source.node)\n return true\n }\n\n const insertAt = position === 'after' ? target.index + 1 : target.index\n target.list.splice(insertAt, 0, source.node)\n return true\n}\n", "/**\n * \u884C\u62D6\u62FD\u540E\u7684\u6570\u7EC4\u91CD\u6392\uFF08\u4E0D\u6539\u539F\u6570\u7EC4\uFF09\n * \u8FD4\u56DE\u65B0\u6570\u7EC4\uFF1B\u62D6\u5230\u539F\u4F4D\u6216\u76F8\u90BB\u4F4D\u7F6E\u5BFC\u81F4\u987A\u5E8F\u4E0D\u53D8\u65F6\u8FD4\u56DE null\n *\n * @param {Array} rows \u6570\u636E\u6570\u7EC4\n * @param {number} dragIndex \u88AB\u62D6\u52A8\u7684\u884C\u4E0B\u6807\n * @param {number} dropIndex \u843D\u70B9\u884C\u4E0B\u6807\n * @param {'before'|'after'} position \u843D\u5728\u843D\u70B9\u884C\u4E4B\u524D\u8FD8\u662F\u4E4B\u540E\n */\nexport function moveRows (rows, dragIndex, dropIndex, position = 'before') {\n if (!Array.isArray(rows)) return null\n if (!Number.isInteger(dragIndex) || !Number.isInteger(dropIndex)) return null\n if (dragIndex < 0 || dragIndex >= rows.length) return null\n if (dropIndex < 0 || dropIndex >= rows.length) return null\n if (dragIndex === dropIndex) return null\n\n const list = rows.slice()\n const [moved] = list.splice(dragIndex, 1)\n let insertAt = position === 'after' ? dropIndex + 1 : dropIndex\n // \u53D6\u51FA\u540E\u4E0B\u6807\u4F1A\u524D\u79FB\uFF0C\u9700\u8981\u8865\u507F\n if (dragIndex < insertAt) insertAt -= 1\n if (insertAt === dragIndex) return null\n\n list.splice(insertAt, 0, moved)\n return list\n}\n", "import { reactive } from 'vue'\n\n/**\n * \u6743\u9650\u7801\u96C6\u5408\uFF1A\u767B\u5F55\u540E\u7531\u4E1A\u52A1\u4FA7\u4E00\u6B21\u6027\u5199\u5165\uFF0Cv-permission \u6307\u4EE4\u636E\u6B64\u5224\u65AD\n * \u53EA\u505A\u754C\u9762\u663E\u9690\uFF0C\u771F\u6B63\u7684\u6743\u9650\u6821\u9A8C\u5FC5\u987B\u5728\u670D\u52A1\u7AEF\n */\nconst state = reactive({\n codes: new Set()\n})\n\n/** \u8986\u76D6\u5F0F\u5199\u5165\u6743\u9650\u7801\u5217\u8868 */\nexport function setPermissions (list) {\n state.codes = new Set(list || [])\n}\n\nexport function addPermissions (list) {\n ;(list || []).forEach((code) => state.codes.add(code))\n}\n\nexport function clearPermissions () {\n state.codes = new Set()\n}\n\n/** \u5355\u4E2A\u6216\u4EFB\u4E00\u547D\u4E2D\u5373\u653E\u884C\uFF1B\u7A7A\u503C\u89C6\u4E3A\u653E\u884C\uFF08\u672A\u914D\u7F6E\u6743\u9650\u7801\u7684\u573A\u666F\u4E0D\u62E6\u622A\uFF09 */\nexport function hasPermission (value) {\n if (!value || (Array.isArray(value) && !value.length)) return true\n const need = Array.isArray(value) ? value : [value]\n return need.some((code) => state.codes.has(code))\n}\n\n/**\n * v-permission \u6307\u4EE4\uFF1A\u65E0\u6743\u9650\u65F6\u79FB\u9664\u5143\u7D20\n * \u7528\u6CD5\uFF1Av-permission=\"'user:add'\" / v-permission=\"['a', 'b']\"\n * \u4FEE\u9970\u7B26 disable\uFF1A\u4E0D\u79FB\u9664\uFF0C\u4EC5\u7981\u7528\u5E76\u7F6E\u7070\uFF08v-permission.disable\uFF09\n * \u6CE8\u610F\uFF1A\u79FB\u9664\u540E\u6743\u9650\u53D8\u5316\u4E0D\u4F1A\u81EA\u52A8\u6062\u590D\uFF0C\u6743\u9650\u5E94\u5728\u767B\u5F55\u540E\u4E00\u6B21\u6027\u5199\u5165\n */\nexport const vPermission = {\n mounted (el, binding) {\n if (hasPermission(binding.value)) return\n if (binding.modifiers.disable) {\n el.setAttribute('disabled', 'disabled')\n el.classList.add('djm-is-no-permission')\n return\n }\n if (el.parentNode) {\n // \u6CE8\u91CA\u5360\u4F4D\uFF0C\u4FDD\u6301\u8282\u70B9\u4F4D\u7F6E\u8BED\u4E49\uFF0C\u4FBF\u4E8E\u8C03\u8BD5\u65F6\u770B\u51FA\u6B64\u5904\u88AB\u6743\u9650\u88C1\u6389\n el.parentNode.replaceChild(document.createComment('v-permission'), el)\n }\n }\n}\n\nexport { state as permissionState }\n"],
5
+ "mappings": "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",
6
+ "names": ["t", "import_vue", "ref", "top", "import_vue", "validate", "import_vue", "state", "import_vue", "close", "import_vue", "hasChildren", "ICONS", "import_vue", "close", "import_vue", "import_vue", "import_vue", "import_vue", "import_vue", "import_vue", "g", "clamp", "uidSeed", "import_vue", "import_vue", "next", "import_vue", "close", "import_vue", "pad", "import_vue", "close", "import_vue", "uidSeed", "import_vue", "import_vue", "uidSeed", "import_vue", "seq", "TONE_ALIAS", "import_vue", "uid", "import_vue", "close", "import_vue", "uid", "close", "import_vue", "uid", "close", "close", "import_vue", "count", "import_vue", "uid", "close", "import_vue", "close", "import_vue", "uidSeed", "pad", "toKey", "parse", "import_vue", "keyOf", "hasChildren", "count", "import_vue", "import_vue", "import_vue", "uidSeed", "import_vue", "hasChildren", "collectLeaves", "count", "import_vue", "import_vue", "import_vue", "root", "hasChildren", "import_vue", "import_vue", "CONTROL_MAP", "import_vue", "import_vue", "toKey", "import_vue", "import_vue", "import_vue", "import_vue", "uidSeed", "pad", "today", "import_vue", "import_vue", "import_vue", "matchAccept", "import_vue", "i", "j", "import_vue", "hasChildren", "import_vue", "pad", "toKey", "parseDate", "import_vue", "import_vue", "isEmpty", "import_vue", "import_vue", "pad", "parseDate", "toKey", "import_vue", "uidSeed", "uid", "import_vue", "import_vue", "keyOf", "import_vue", "close", "import_vue", "state"]
7
+ }