@robot-admin/naive-ui-components 0.16.0 → 0.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +12 -9
  3. package/README_EN.md +12 -9
  4. package/dist/C_ActionBar.css +56 -48
  5. package/dist/C_ActionBar2.cjs +1 -1
  6. package/dist/C_ActionBar2.js +1 -1
  7. package/dist/C_AntV2.cjs +1 -1
  8. package/dist/C_AntV2.js +3 -3
  9. package/dist/C_Barcode.css +6 -6
  10. package/dist/C_Barcode2.cjs +1 -1
  11. package/dist/C_Barcode2.js +1 -1
  12. package/dist/C_Chat.css +269 -185
  13. package/dist/C_Chat2.cjs +1 -1
  14. package/dist/C_Chat2.js +1 -1
  15. package/dist/C_Code.css +26 -26
  16. package/dist/C_Code2.cjs +1 -1
  17. package/dist/C_Code2.js +1 -1
  18. package/dist/C_Draggable2.cjs +1 -1
  19. package/dist/C_Draggable2.js +1 -1
  20. package/dist/C_FilePreview.css +96 -57
  21. package/dist/C_FilePreview2.cjs +1 -1
  22. package/dist/C_FilePreview2.js +1 -1
  23. package/dist/C_Form.base.css +295 -277
  24. package/dist/C_Form.css +295 -277
  25. package/dist/C_Form.d.cts +2 -1
  26. package/dist/C_Form.d.ts +2 -1
  27. package/dist/C_FormModal.css +10 -10
  28. package/dist/C_FormModal2.cjs +1 -1
  29. package/dist/C_FormModal2.js +1 -1
  30. package/dist/C_FormSearch.css +67 -68
  31. package/dist/C_FormSearch.d.cts +2 -1
  32. package/dist/C_FormSearch.d.ts +2 -1
  33. package/dist/C_FormSearch2.cjs +1 -1
  34. package/dist/C_FormSearch2.js +1 -1
  35. package/dist/C_FullCalendar2.cjs +1 -1
  36. package/dist/C_FullCalendar2.js +1 -1
  37. package/dist/C_GlobalSearch.css +140 -118
  38. package/dist/C_GlobalSearch2.cjs +1 -1
  39. package/dist/C_GlobalSearch2.js +1 -1
  40. package/dist/C_ImageCropper.css +12 -10
  41. package/dist/C_ImageCropper2.cjs +1 -1
  42. package/dist/C_ImageCropper2.js +1 -1
  43. package/dist/C_Login.css +79 -79
  44. package/dist/C_Login2.cjs +1 -1
  45. package/dist/C_Login2.js +1 -1
  46. package/dist/C_Map.css +10 -10
  47. package/dist/C_Map2.cjs +1 -1
  48. package/dist/C_Map2.js +1 -1
  49. package/dist/C_OrgChart.css +28 -4
  50. package/dist/C_OrgChart2.cjs +1 -1
  51. package/dist/C_OrgChart2.js +1 -1
  52. package/dist/C_QRCode2.cjs +1 -1
  53. package/dist/C_QRCode2.js +1 -1
  54. package/dist/C_Signature.css +15 -15
  55. package/dist/C_Signature2.cjs +1 -1
  56. package/dist/C_Signature2.js +1 -1
  57. package/dist/C_SplitPane.cjs +1 -1
  58. package/dist/C_SplitPane.css +251 -109
  59. package/dist/C_SplitPane.js +1 -1
  60. package/dist/C_SplitPane2.cjs +1 -1
  61. package/dist/C_SplitPane2.js +1 -1
  62. package/dist/C_Table.base.css +491 -563
  63. package/dist/C_Table.cjs +1 -1
  64. package/dist/C_Table.css +491 -563
  65. package/dist/C_Table.d.cts +3 -2
  66. package/dist/C_Table.d.ts +4 -2
  67. package/dist/C_Table.js +1 -1
  68. package/dist/C_TagsView2.cjs +1 -1
  69. package/dist/C_TagsView2.js +1 -1
  70. package/dist/C_Transfer.css +93 -84
  71. package/dist/C_Transfer2.cjs +1 -1
  72. package/dist/C_Transfer2.js +1 -1
  73. package/dist/C_Tree.css +72 -125
  74. package/dist/C_Tree.d.cts +3 -2
  75. package/dist/C_Tree.d.ts +15 -2
  76. package/dist/C_Tree2.cjs +1 -1
  77. package/dist/C_Tree2.js +1 -1
  78. package/dist/C_Upload.css +5 -5
  79. package/dist/C_Upload2.cjs +1 -1
  80. package/dist/C_Upload2.js +1 -1
  81. package/dist/C_VideoPlayer2.cjs +4 -3
  82. package/dist/C_VideoPlayer2.js +4 -3
  83. package/dist/C_VtableGantt.css +29 -28
  84. package/dist/C_VtableGantt2.cjs +1 -1
  85. package/dist/C_VtableGantt2.js +1 -1
  86. package/dist/C_WaterFall.css +29 -29
  87. package/dist/C_WaterFall2.cjs +1 -1
  88. package/dist/C_WaterFall2.js +1 -1
  89. package/dist/C_WorkFlow2.cjs +1 -1
  90. package/dist/C_WorkFlow2.js +1 -1
  91. package/dist/Card.cjs +1 -1
  92. package/dist/Card.js +1 -1
  93. package/dist/Custom.cjs +1 -1
  94. package/dist/Custom.js +1 -1
  95. package/dist/Dynamic.cjs +1 -1
  96. package/dist/Dynamic.js +1 -1
  97. package/dist/Steps.cjs +1 -1
  98. package/dist/Steps.js +1 -1
  99. package/dist/Tabs.cjs +1 -1
  100. package/dist/Tabs.js +1 -1
  101. package/dist/constants.d.cts +2 -2
  102. package/dist/constants.d.ts +2 -2
  103. package/dist/constants2.d.cts +2 -2
  104. package/dist/constants2.d.ts +2 -2
  105. package/dist/constants3.d.cts +2 -2
  106. package/dist/constants3.d.ts +2 -2
  107. package/dist/constants4.d.cts +4 -4
  108. package/dist/constants4.d.ts +4 -4
  109. package/dist/constants5.d.cts +3 -7
  110. package/dist/constants5.d.ts +3 -7
  111. package/dist/data.d.cts +10 -10
  112. package/dist/data.d.ts +10 -10
  113. package/dist/density.cjs +1 -0
  114. package/dist/density.d.cts +15 -0
  115. package/dist/density.d.ts +15 -0
  116. package/dist/density.js +1 -0
  117. package/dist/helpers.cjs +1 -1
  118. package/dist/helpers.js +1 -1
  119. package/dist/index.cjs +1 -1
  120. package/dist/index.d.cts +3 -3
  121. package/dist/index.d.ts +5 -3
  122. package/dist/index.js +1 -1
  123. package/dist/index.vue.d.cts +5 -5
  124. package/dist/index.vue.d.ts +5 -5
  125. package/dist/index10.vue.d.cts +5 -5
  126. package/dist/index10.vue.d.ts +3 -3
  127. package/dist/index11.vue.d.cts +3 -3
  128. package/dist/index11.vue.d.ts +5 -5
  129. package/dist/index12.vue.d.cts +5 -5
  130. package/dist/index13.vue.d.ts +5 -5
  131. package/dist/index14.vue.d.cts +5 -5
  132. package/dist/index14.vue.d.ts +9 -9
  133. package/dist/index15.vue.d.cts +9 -9
  134. package/dist/index15.vue.d.ts +3 -3
  135. package/dist/index16.vue.d.cts +3 -3
  136. package/dist/index17.vue.d.ts +1 -1
  137. package/dist/index18.vue.d.cts +1 -1
  138. package/dist/index18.vue.d.ts +7 -7
  139. package/dist/index19.vue.d.cts +7 -7
  140. package/dist/index19.vue.d.ts +5 -5
  141. package/dist/index2.vue.d.cts +2 -2
  142. package/dist/index2.vue.d.ts +2 -2
  143. package/dist/index20.vue.d.cts +6 -2
  144. package/dist/index20.vue.d.ts +6 -2
  145. package/dist/index21.vue.d.cts +2 -2
  146. package/dist/index21.vue.d.ts +2 -2
  147. package/dist/index22.vue.d.cts +2 -2
  148. package/dist/index22.vue.d.ts +2 -2
  149. package/dist/index23.vue.d.cts +2 -2
  150. package/dist/index23.vue.d.ts +2 -2
  151. package/dist/index25.vue.d.cts +5 -5
  152. package/dist/index25.vue.d.ts +5 -5
  153. package/dist/index27.vue.d.cts +2 -2
  154. package/dist/index27.vue.d.ts +2 -2
  155. package/dist/index28.vue.d.cts +7 -3
  156. package/dist/index28.vue.d.ts +7 -3
  157. package/dist/index3.vue.d.cts +3 -3
  158. package/dist/index3.vue.d.ts +3 -3
  159. package/dist/index4.vue.d.cts +5 -5
  160. package/dist/index5.vue.d.ts +2 -2
  161. package/dist/index6.vue.d.cts +2 -2
  162. package/dist/index6.vue.d.ts +7 -4
  163. package/dist/index7.vue.d.cts +7 -4
  164. package/dist/index7.vue.d.ts +2 -2
  165. package/dist/index8.vue.d.cts +2 -2
  166. package/dist/index8.vue.d.ts +4 -6
  167. package/dist/index9.vue.d.cts +4 -6
  168. package/dist/index9.vue.d.ts +5 -5
  169. package/dist/mapUtils.d.cts +4 -4
  170. package/dist/mapUtils.d.ts +4 -4
  171. package/dist/presets.d.cts +4 -1
  172. package/dist/presets.d.ts +4 -1
  173. package/dist/style.css +1763 -1566
  174. package/dist/useCalendarEvents.d.cts +10 -9
  175. package/dist/useCalendarEvents.d.ts +10 -9
  176. package/dist/useCollapsePanel.d.cts +3 -3
  177. package/dist/useCollapsePanel.d.ts +3 -3
  178. package/dist/useCropperCore.d.cts +9 -9
  179. package/dist/useCropperCore.d.ts +9 -9
  180. package/dist/useDraggableLayout.d.cts +15 -13
  181. package/dist/useDraggableLayout.d.ts +15 -13
  182. package/dist/useDynamicFormState.d.cts +5 -2
  183. package/dist/useDynamicFormState.d.ts +5 -2
  184. package/dist/useEdgeInteraction.d.cts +3 -3
  185. package/dist/useEdgeInteraction.d.ts +3 -3
  186. package/dist/useFullscreen.d.cts +4 -0
  187. package/dist/useFullscreen.d.ts +4 -0
  188. package/dist/useGlobalSearch.d.cts +9 -4
  189. package/dist/useGlobalSearch.d.ts +9 -4
  190. package/dist/useInfiniteScroll.d.cts +4 -1
  191. package/dist/useInfiniteScroll.d.ts +4 -1
  192. package/dist/useQRCode.d.cts +3 -3
  193. package/dist/useQRCode.d.ts +3 -3
  194. package/dist/useSearchState.d.cts +8 -6
  195. package/dist/useSearchState.d.ts +8 -6
  196. package/dist/useSignatureHistory.d.cts +7 -7
  197. package/dist/useSignatureHistory.d.ts +7 -7
  198. package/dist/useSplitResize.d.cts +50 -61
  199. package/dist/useSplitResize.d.ts +50 -61
  200. package/dist/useTableQuery.cjs +3 -3
  201. package/dist/useTableQuery.d.cts +237 -13
  202. package/dist/useTableQuery.d.ts +237 -13
  203. package/dist/useTableQuery.js +3 -3
  204. package/dist/useTimeSelection.d.cts +2 -2
  205. package/dist/useTimeSelection.d.ts +2 -2
  206. package/dist/useWorkflowValidation.d.cts +3 -3
  207. package/dist/useWorkflowValidation.d.ts +3 -3
  208. package/dist/verification.d.cts +5 -5
  209. package/dist/verification.d.ts +5 -5
  210. package/docs/component-review-20261019.md +55 -0
  211. package/docs/guides/form-density.en.md +42 -0
  212. package/docs/guides/form-density.md +59 -0
  213. package/docs/guides/runtime-performance.md +38 -0
  214. package/docs/guides/split-pane.en.md +103 -0
  215. package/docs/guides/split-pane.md +126 -0
  216. package/docs/guides/table-density.md +87 -0
  217. package/docs/guides/transfer.md +11 -0
  218. package/docs/guides/tree.md +157 -0
  219. package/docs/guides/usage.en.md +2 -0
  220. package/docs/guides/usage.md +2 -0
  221. package/docs/runtime-review-20261019.md +41 -0
  222. package/docs/wl-ui-produce-coverage.md +62 -0
  223. package/package.json +4 -2
  224. package/dist/useTreeOperations.d.cts +0 -185
  225. package/dist/useTreeOperations.d.ts +0 -185
package/dist/C_Chat2.cjs CHANGED
@@ -1 +1 @@
1
- require(`./chunk.cjs`);const e=require(`./C_Icon2.cjs`),t=require(`./export-helper.cjs`);let n=require(`vue`),r=require(`naive-ui`);const i={placeholder:`输入消息...`,showContacts:!0,showTimestamp:!0,showSendBtn:!0,loadingHistory:!1,title:`聊天`},a={class:`c-chat`},o={key:0,class:`c-chat__sidebar`},s={class:`c-chat__sidebar-header`},c={class:`c-chat__search`},l={class:`c-chat__contact-list`},u=[`onClick`],d={class:`c-chat__contact-avatar`},f=[`src`,`alt`],p={key:1,class:`c-chat__avatar-fallback`},m={key:2,class:`c-chat__online-dot`},ee={class:`c-chat__contact-info`},te={class:`c-chat__contact-name`},ne={key:0,class:`c-chat__contact-time`},re={key:0,class:`c-chat__contact-last`},h={key:0,class:`c-chat__unread`},ie={key:1,class:`c-chat__main`},ae={class:`c-chat__header`},oe={key:0,class:`c-chat__header-status`},g={key:0,class:`c-chat__load-more`},_={key:1,class:`c-chat__empty`},v={key:0,class:`c-chat__time-divider`},y={key:0,class:`c-chat__msg-avatar`},b=[`src`],x={key:1,class:`c-chat__avatar-fallback`},S={class:`c-chat__msg-body`},C={key:0,class:`c-chat__msg-username`},w={key:1,class:`c-chat__bubble`},T=[`aria-label`,`onClick`],E=[`src`,`alt`],D=[`onClick`],O={class:`c-chat__file-info`},k={class:`c-chat__file-name`},A={key:0,class:`c-chat__file-size`},j={key:4,class:`c-chat__msg-time`},M=[`onClick`],N={key:6,class:`c-chat__msg-status is-sending`},P={class:`c-chat__input-area`},F={class:`c-chat__input-actions`},I={class:`c-chat__input-wrap`},L={class:`c-chat__main c-chat__no-chat`},R=(0,n.defineComponent)({__name:`index`,props:{contacts:{default:()=>[]},messages:{default:()=>[]},currentContactId:{default:``},placeholder:{default:i.placeholder},showContacts:{type:Boolean,default:i.showContacts},showTimestamp:{type:Boolean,default:i.showTimestamp},selfAvatar:{default:``},selfName:{default:``},showSendBtn:{type:Boolean,default:i.showSendBtn},loadingHistory:{type:Boolean,default:i.loadingHistory},title:{default:i.title}},emits:[`send`,`select-contact`,`load-more`,`image-preview`,`file-click`,`file-upload`,`emoji-click`,`resend`],setup(t,{expose:R,emit:z}){let B=t,V=z,H=(0,n.computed)(()=>({...i,...B})),U=(0,n.ref)(``),W=(0,n.ref)(``),G=(0,n.ref)(null),K=(0,n.computed)(()=>B.contacts??[]),q=(0,n.computed)(()=>B.messages??[]),J=(0,n.computed)(()=>B.currentContactId||K.value[0]?.id||``),Y=(0,n.computed)(()=>K.value.find(e=>e.id===J.value)),se=(0,n.computed)(()=>{if(!W.value)return K.value;let e=W.value.toLowerCase();return K.value.filter(t=>t.name.toLowerCase().includes(e))}),ce=e=>{V(`select-contact`,e)},X=()=>{let e=U.value.trim();e&&(V(`send`,e),U.value=``)},Z=()=>{(0,n.nextTick)(()=>{G.value&&(G.value.scrollTop=G.value.scrollHeight)})};(0,n.watch)(()=>B.messages?.length,()=>Z(),{flush:`post`});let le=()=>{G.value&&G.value.scrollTop===0&&!H.value.loadingHistory&&V(`load-more`)},Q=e=>e.sender===`self`&&B.selfAvatar||e.avatar,ue=e=>e.sender===`self`?B.selfName||e.username||`Me`:e.username||`未知`,$=e=>{let t=new Date(e);return`${t.getHours().toString().padStart(2,`0`)}:${t.getMinutes().toString().padStart(2,`0`)}`},de=e=>{let t=new Date(e),n=new Date;return t.getFullYear()===n.getFullYear()&&t.getMonth()===n.getMonth()&&t.getDate()===n.getDate()?$(e):`${t.getMonth()+1}/${t.getDate()} ${$(e)}`},fe=e=>{let t=new Date(e),n=new Date().getTime()-t.getTime();return n<6e4?`刚刚`:n<36e5?`${Math.floor(n/6e4)}分钟前`:n<864e5?$(e):`${t.getMonth()+1}/${t.getDate()}`},pe=e=>e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`,me=(e,t)=>{if(t===0)return!0;let n=q.value[t-1];return new Date(e.timestamp).getTime()-new Date(n.timestamp).getTime()>300*1e3};return R({scrollToBottom:Z}),(t,i)=>{let R=r.NInput,z=r.NSpin,B=r.NButton;return(0,n.openBlock)(),(0,n.createElementBlock)(`div`,a,[(0,n.createCommentVNode)(` ===== 联系人侧栏 ===== `),H.value.showContacts&&K.value.length?((0,n.openBlock)(),(0,n.createElementBlock)(`aside`,o,[(0,n.createElementVNode)(`div`,s,[(0,n.createVNode)(e.t,{name:`mdi:chat-outline`,size:20}),i[4]||=(0,n.createTextVNode)(` 会话 `,-1)]),(0,n.createCommentVNode)(` 搜索框 `),(0,n.createElementVNode)(`div`,c,[(0,n.createVNode)(R,{value:W.value,"onUpdate:value":i[0]||=e=>W.value=e,placeholder:`搜索联系人`,clearable:``,size:`small`},{prefix:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:magnify`,size:16})]),_:1},8,[`value`])]),(0,n.createCommentVNode)(` 联系人列表 `),(0,n.createElementVNode)(`div`,l,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(se.value,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:e.id,class:(0,n.normalizeClass)([`c-chat__contact`,{"is-active":e.id===J.value}]),onClick:t=>ce(e.id)},[(0,n.createElementVNode)(`div`,d,[e.avatar?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:e.avatar,alt:e.name,class:`c-chat__avatar`},null,8,f)):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,p,(0,n.toDisplayString)(e.name.charAt(0)),1)),e.online?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,m)):(0,n.createCommentVNode)(`v-if`,!0)]),(0,n.createElementVNode)(`div`,ee,[(0,n.createElementVNode)(`div`,te,[(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(e.name),1),e.lastTime?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,ne,(0,n.toDisplayString)(fe(e.lastTime)),1)):(0,n.createCommentVNode)(`v-if`,!0)]),e.lastMessage?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,re,(0,n.toDisplayString)(e.lastMessage),1)):(0,n.createCommentVNode)(`v-if`,!0)]),e.unread?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,h,(0,n.toDisplayString)(e.unread>99?`99+`:e.unread),1)):(0,n.createCommentVNode)(`v-if`,!0)],10,u))),128))])])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` ===== 主聊天区域 ===== `),Y.value||!H.value.showContacts?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,ie,[(0,n.createCommentVNode)(` 顶栏 `),(0,n.createElementVNode)(`div`,ae,[(0,n.renderSlot)(t.$slots,`header`,{},()=>[(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(Y.value?.name||H.value.title),1),Y.value?.online?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,oe,` 在线 `)):(0,n.createCommentVNode)(`v-if`,!0)],!0)]),(0,n.createCommentVNode)(` 消息列表 `),(0,n.createElementVNode)(`div`,{ref_key:`messagesRef`,ref:G,class:`c-chat__messages`,onScroll:le},[(0,n.createCommentVNode)(` 加载更多 `),H.value.loadingHistory?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,g,[(0,n.createVNode)(z,{size:`small`})])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 消息为空 `),!q.value.length&&!H.value.loadingHistory?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,_,` 暂无消息,发送第一条吧 `)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 消息列表 `),((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(q.value,(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:t.id},[(0,n.createCommentVNode)(` 时间分割 `),me(t,r)?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,v,(0,n.toDisplayString)(de(t.timestamp)),1)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 消息条目 `),(0,n.createElementVNode)(`div`,{class:(0,n.normalizeClass)([`c-chat__msg`,`is-${t.sender}`])},[(0,n.createCommentVNode)(` 头像 `),t.sender===`system`?(0,n.createCommentVNode)(`v-if`,!0):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,y,[Q(t)?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:Q(t),class:`c-chat__avatar`},null,8,b)):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,x,(0,n.toDisplayString)(ue(t).charAt(0)),1))])),(0,n.createCommentVNode)(` 消息体 `),(0,n.createElementVNode)(`div`,S,[t.sender===`other`&&t.username?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,C,(0,n.toDisplayString)(t.username),1)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 文本消息 `),t.type===`text`||t.type===`system`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,w,(0,n.toDisplayString)(t.content),1)):t.type===`image`?((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:2},[(0,n.createCommentVNode)(` 图片消息 `),(0,n.createElementVNode)(`button`,{type:`button`,class:`c-chat__msg-image-button`,"aria-label":`预览${t.username||`聊天`}的图片`,onClick:e=>V(`image-preview`,t.content)},[(0,n.createElementVNode)(`img`,{src:t.content,alt:t.fileName||`聊天图片`,class:`c-chat__msg-image`},null,8,E)],8,T)],2112)):t.type===`file`?((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:3},[(0,n.createCommentVNode)(` 文件消息 `),(0,n.createElementVNode)(`button`,{type:`button`,class:`c-chat__msg-file`,onClick:e=>V(`file-click`,t)},[(0,n.createVNode)(e.t,{name:`mdi:file-document-outline`,size:28}),(0,n.createElementVNode)(`div`,O,[(0,n.createElementVNode)(`span`,k,(0,n.toDisplayString)(t.fileName||`文件`),1),t.fileSize?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,A,(0,n.toDisplayString)(pe(t.fileSize)),1)):(0,n.createCommentVNode)(`v-if`,!0)])],8,D)],2112)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 时间戳 `),H.value.showTimestamp&&t.sender!==`system`?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,j,(0,n.toDisplayString)($(t.timestamp)),1)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 发送状态 `),t.sender===`self`&&t.status===`failed`?((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:5,type:`button`,class:`c-chat__msg-status is-failed`,onClick:e=>V(`resend`,t)},` 发送失败,点击重试 `,8,M)):t.sender===`self`&&t.status===`sending`?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,N,`发送中...`)):(0,n.createCommentVNode)(`v-if`,!0)])],2)],64))),128))],544),(0,n.createCommentVNode)(` 输入区域 `),(0,n.createElementVNode)(`div`,P,[(0,n.createElementVNode)(`div`,F,[(0,n.renderSlot)(t.$slots,`input-actions`,{},()=>[(0,n.createVNode)(B,{quaternary:``,circle:``,size:`small`,onClick:i[1]||=e=>V(`emoji-click`)},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:emoticon-happy-outline`,size:18})]),_:1}),(0,n.createVNode)(B,{quaternary:``,circle:``,size:`small`,onClick:i[2]||=e=>V(`file-upload`)},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:paperclip`,size:18})]),_:1})],!0)]),(0,n.createElementVNode)(`div`,I,[(0,n.createVNode)(R,{value:U.value,"onUpdate:value":i[3]||=e=>U.value=e,placeholder:H.value.placeholder,type:`textarea`,autosize:{minRows:1,maxRows:4},onKeydown:(0,n.withKeys)((0,n.withModifiers)(X,[`exact`,`prevent`]),[`enter`])},null,8,[`value`,`placeholder`,`onKeydown`])]),H.value.showSendBtn?((0,n.openBlock)(),(0,n.createBlock)(B,{key:0,type:`primary`,disabled:!U.value.trim(),class:`c-chat__send-btn`,onClick:X},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:send`,size:16})]),_:1},8,[`disabled`])):(0,n.createCommentVNode)(`v-if`,!0)])])):((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:2},[(0,n.createCommentVNode)(` ===== 未选中联系人空态 ===== `),(0,n.createElementVNode)(`div`,L,[(0,n.createVNode)(e.t,{name:`mdi:chat-processing-outline`,size:48,class:`c-chat__no-chat-icon`}),i[5]||=(0,n.createElementVNode)(`span`,null,`选择一个会话开始聊天`,-1)])],2112))])}}});var z=t.t(R,[[`__scopeId`,`data-v-281bb0dd`]]);Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return z}});
1
+ require(`./chunk.cjs`);const e=require(`./C_Icon2.cjs`),t=require(`./export-helper.cjs`);let n=require(`vue`),r=require(`naive-ui`),i=require(`vueuc`);const a=[`data-message-id`],o={key:0,class:`c-chat__time-divider`},s={key:0,class:`c-chat__msg-avatar`},c=[`src`],l={key:1,class:`c-chat__avatar-fallback`},u={class:`c-chat__msg-body`},d={key:0,class:`c-chat__msg-username`},f={key:1,class:`c-chat__bubble`},p=[`aria-label`],m=[`src`,`alt`],h={class:`c-chat__file-info`},g={class:`c-chat__file-name`},_={key:0,class:`c-chat__file-size`},v={key:4,class:`c-chat__msg-time`},y={key:6,class:`c-chat__msg-status is-sending`},b=(0,n.defineComponent)({__name:`ChatMessageItem`,props:{msg:{},previous:{},selfAvatar:{},selfName:{},showTimestamp:{type:Boolean}},emits:[`image-preview`,`file-click`,`resend`],setup(t,{emit:r}){let i=t,b=r,x=(0,n.computed)(()=>!i.previous||new Date(i.msg.timestamp).getTime()-new Date(i.previous.timestamp).getTime()>3e5),S=e=>e.sender===`self`&&i.selfAvatar||e.avatar,C=e=>e.sender===`self`?i.selfName||e.username||`Me`:e.username||`未知`;function w(e){let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`}function T(e){let t=new Date(e),n=new Date;return t.toDateString()===n.toDateString()?w(e):`${t.getMonth()+1}/${t.getDate()} ${w(e)}`}function E(e){return e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`}return(r,i)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{class:`c-chat__message-row`,"data-message-id":t.msg.id},[(0,n.createCommentVNode)(` 时间分割 `),x.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,o,(0,n.toDisplayString)(T(t.msg.timestamp)),1)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 消息条目 `),(0,n.createElementVNode)(`div`,{class:(0,n.normalizeClass)([`c-chat__msg`,`is-${t.msg.sender}`])},[(0,n.createCommentVNode)(` 头像 `),t.msg.sender===`system`?(0,n.createCommentVNode)(`v-if`,!0):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,s,[S(t.msg)?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:S(t.msg),class:`c-chat__avatar`},null,8,c)):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,l,(0,n.toDisplayString)(C(t.msg).charAt(0)),1))])),(0,n.createCommentVNode)(` 消息体 `),(0,n.createElementVNode)(`div`,u,[t.msg.sender===`other`&&t.msg.username?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,d,(0,n.toDisplayString)(t.msg.username),1)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 文本消息 `),t.msg.type===`text`||t.msg.type===`system`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,f,(0,n.toDisplayString)(t.msg.content),1)):t.msg.type===`image`?((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:2},[(0,n.createCommentVNode)(` 图片消息 `),(0,n.createElementVNode)(`button`,{type:`button`,class:`c-chat__msg-image-button`,"aria-label":`预览${t.msg.username||`聊天`}的图片`,onClick:i[0]||=e=>b(`image-preview`,t.msg.content)},[(0,n.createElementVNode)(`img`,{src:t.msg.content,alt:t.msg.fileName||`聊天图片`,class:`c-chat__msg-image`},null,8,m)],8,p)],2112)):t.msg.type===`file`?((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:3},[(0,n.createCommentVNode)(` 文件消息 `),(0,n.createElementVNode)(`button`,{type:`button`,class:`c-chat__msg-file`,onClick:i[1]||=e=>b(`file-click`,t.msg)},[(0,n.createVNode)(e.t,{name:`mdi:file-document-outline`,size:28}),(0,n.createElementVNode)(`div`,h,[(0,n.createElementVNode)(`span`,g,(0,n.toDisplayString)(t.msg.fileName||`文件`),1),t.msg.fileSize?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,_,(0,n.toDisplayString)(E(t.msg.fileSize)),1)):(0,n.createCommentVNode)(`v-if`,!0)])])],2112)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 时间戳 `),t.showTimestamp&&t.msg.sender!==`system`?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,v,(0,n.toDisplayString)(w(t.msg.timestamp)),1)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 发送状态 `),t.msg.sender===`self`&&t.msg.status===`failed`?((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:5,type:`button`,class:`c-chat__msg-status is-failed`,onClick:i[2]||=e=>b(`resend`,t.msg)},` 发送失败,点击重试 `)):t.msg.sender===`self`&&t.msg.status===`sending`?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,y,`发送中...`)):(0,n.createCommentVNode)(`v-if`,!0)])],2)],8,a))}});var x=t.t(b,[[`__scopeId`,`data-v-f86c73f0`]]);const S=[`data-contact-id`],C={class:`c-chat__contact-avatar`},w=[`src`,`alt`],T={key:1,class:`c-chat__avatar-fallback`},E={key:2,class:`c-chat__online-dot`},D={class:`c-chat__contact-info`},O={class:`c-chat__contact-name`},k={key:0,class:`c-chat__contact-time`},A={key:0,class:`c-chat__contact-last`},j={key:0,class:`c-chat__unread`},M=(0,n.defineComponent)({__name:`ChatContactItem`,props:{contact:{},active:{type:Boolean}},emits:[`select`],setup(e,{emit:t}){let r=t;function i(e){let t=new Date(e),n=Date.now()-t.getTime();if(n<6e4)return`刚刚`;if(n<36e5)return`${Math.floor(n/6e4)}分钟前`;let r=`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`;return n<864e5?r:`${t.getMonth()+1}/${t.getDate()} ${r}`}return(t,a)=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{type:`button`,class:(0,n.normalizeClass)([`c-chat__contact`,{"is-active":e.active}]),"data-contact-id":e.contact.id,onClick:a[0]||=t=>r(`select`,e.contact.id)},[(0,n.createElementVNode)(`div`,C,[e.contact.avatar?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:e.contact.avatar,alt:e.contact.name,class:`c-chat__avatar`},null,8,w)):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,T,(0,n.toDisplayString)(e.contact.name.charAt(0)),1)),e.contact.online?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,E)):(0,n.createCommentVNode)(`v-if`,!0)]),(0,n.createElementVNode)(`div`,D,[(0,n.createElementVNode)(`div`,O,[(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(e.contact.name),1),e.contact.lastTime?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,k,(0,n.toDisplayString)(i(e.contact.lastTime)),1)):(0,n.createCommentVNode)(`v-if`,!0)]),e.contact.lastMessage?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,A,(0,n.toDisplayString)(e.contact.lastMessage),1)):(0,n.createCommentVNode)(`v-if`,!0)]),e.contact.unread?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,j,(0,n.toDisplayString)(e.contact.unread>99?`99+`:e.contact.unread),1)):(0,n.createCommentVNode)(`v-if`,!0)],10,S))}});var N=t.t(M,[[`__scopeId`,`data-v-de62a9e6`]]);function P(e){let t=!1,r=0,i,a,o,s=!0,c=!1,l=!1,u=0,d=0,f,p=()=>e.virtualRef.value?.listElRef??e.normalRef.value,m=e=>e.scrollHeight-e.scrollTop-e.clientHeight<=64,h=e=>Array.from(e.querySelectorAll(`[data-message-id]`));function g(){i!==void 0&&cancelAnimationFrame(i),i=void 0}function _(e,n){if(g(),typeof requestAnimationFrame>`u`){n();return}i=requestAnimationFrame(()=>{i=void 0,!t&&e===r&&n()})}function v(e){let i=++r;g(),(0,n.nextTick)(()=>{!t&&i===r&&e(i)})}function y(t){let n=e.virtualRef.value;n?n.scrollTo({top:t,debounce:!1}):e.normalRef.value&&(e.normalRef.value.scrollTop=t)}function b(){let t=e.virtualRef.value;t?t.scrollTo({position:`bottom`}):e.normalRef.value&&(e.normalRef.value.scrollTop=e.normalRef.value.scrollHeight)}function x(){s=!0,l=!1,c=!0,f=void 0,v(e=>{b(),_(e,()=>{b(),c=!1})})}function S(e){let{top:t}=e.getBoundingClientRect(),n=h(e).find(e=>e.getBoundingClientRect().bottom>t);return n?.dataset.messageId?{id:n.dataset.messageId,offset:n.getBoundingClientRect().top-t}:void 0}function C(e,t){let n=p();if(!n||!f)return;let r=h(n).find(e=>e.dataset.messageId===f?.id);if(r){let e=r.getBoundingClientRect().top-n.getBoundingClientRect().top;y(Math.max(0,n.scrollTop+e-f.offset))}t>0?_(e,()=>C(e,t-1)):f=void 0}function w(t){f=t,s=!1,c=!1,v(n=>{e.virtualRef.value?.scrollTo({key:t.id,debounce:!1}),C(n,3)})}function T(e,t){s=!1,c=!1,f=void 0,v(()=>{let n=p();n&&y(Math.max(0,e+n.scrollHeight-t))})}function E(){s=!1,c=!1,r++,g()}function D(){l=!0,f=void 0,E(),a!==void 0&&cancelAnimationFrame(a),a=requestAnimationFrame(()=>{if(a=void 0,t||!l)return;l=!1;let e=p();e&&!f&&(s=m(e))})}function O(e){return u>0&&(u!==e.scrollHeight||d!==e.clientHeight)}function k(e){let t=O(e);if(u=e.scrollHeight,d=e.clientHeight,!(c||f)){if(s&&t&&!l){x();return}l=!1,s=m(e)}}function A(){let t=p();t&&(k(t),t.scrollTop===0&&!e.loadingHistory.value&&e.onLoadMore())}function j(){if(!t)if(f){let e=r;_(e,()=>C(e,1))}else s&&x()}(0,n.watch)(()=>e.virtualRef.value?.itemsElRef??e.normalRef.value?.firstElementChild,e=>{if(o?.disconnect(),o=void 0,e&&typeof ResizeObserver<`u`){o=new ResizeObserver(j),o.observe(e);let t=p();t&&t!==e&&o.observe(t)}},{flush:`post`});let M=()=>{let t=e.messages.value;return[e.contactId.value,t.length,t[0]?.id,t[t.length-1]?.id,t[t.length-1]?.content,e.loadingHistory.value,e.virtual.value]},N=(t,n)=>t[1]>n[1]&&n[1]>0&&t[2]!==n[2]&&(t[3]===n[3]||e.messages.value.some(e=>e.id===n[2])),P=(e,t)=>e[1]>0&&t[1]>0&&e[2]!==t[2]&&e[3]!==t[3];function F(e,t,n){let r=e[6]||t[6]?S(n):void 0;r?w(r):T(n.scrollTop,n.scrollHeight)}let I=(e,t,n)=>P(e,t)||t[1]===0||!l&&(m(n)||s&&O(n));function L(e,t,n){I(e,t,n)?x():F(e,t,n)}return(0,n.watch)(M,(e,t)=>{let n=p();if(!t||e[0]!==t[0]||!n){x();return}N(e,t)||e[5]!==t[5]?F(e,t,n):e[6]===t[6]?I(e,t,n)?x():f||E():L(e,t,n)},{immediate:!0,flush:`pre`}),(0,n.onBeforeUnmount)(()=>{t=!0,r++,g(),a!==void 0&&cancelAnimationFrame(a),o?.disconnect()}),{scrollToBottom:x,handleMessagesScroll:A,handleScrollIntent:D}}const F={placeholder:`输入消息...`,showContacts:!0,showTimestamp:!0,showSendBtn:!0,loadingHistory:!1,title:`聊天`},I={class:`c-chat`},L={key:0,class:`c-chat__sidebar`},R={class:`c-chat__sidebar-header`},z={class:`c-chat__search`},B={key:1,class:`c-chat__contact-list`},V={key:1,class:`c-chat__main`},H={class:`c-chat__header`},U={key:0,class:`c-chat__header-status`},W={key:0,class:`c-chat__load-more`},G={class:`c-chat__message-items`},K={key:0,class:`c-chat__load-more`},q={key:1,class:`c-chat__empty`},J={class:`c-chat__input-area`},Y={class:`c-chat__input-actions`},X={class:`c-chat__input-wrap`},Z={class:`c-chat__main c-chat__no-chat`},Q=(0,n.defineComponent)({__name:`index`,props:{contacts:{default:()=>[]},messages:{default:()=>[]},currentContactId:{default:``},placeholder:{default:F.placeholder},showContacts:{type:Boolean,default:F.showContacts},showTimestamp:{type:Boolean,default:F.showTimestamp},selfAvatar:{default:``},selfName:{default:``},showSendBtn:{type:Boolean,default:F.showSendBtn},loadingHistory:{type:Boolean,default:F.loadingHistory},virtualScroll:{type:Boolean,default:!0},title:{default:F.title}},emits:[`send`,`select-contact`,`load-more`,`image-preview`,`file-click`,`file-upload`,`emoji-click`,`resend`],setup(t,{expose:a,emit:o}){let s=t,c=o,l=(0,n.computed)(()=>({...F,...s})),u=(0,n.ref)(``),d=(0,n.ref)(``),f=(0,n.ref)(null),p=(0,n.ref)(null),m=(0,n.computed)(()=>s.contacts??[]),h=(0,n.computed)(()=>s.messages??[]),g=(0,n.computed)(()=>s.currentContactId||m.value[0]?.id||``),_=(0,n.computed)(()=>m.value.find(e=>e.id===g.value)),v=(0,n.computed)(()=>{if(!d.value)return m.value;let e=d.value.toLowerCase();return m.value.filter(t=>t.name.toLowerCase().includes(e))}),y=(0,n.computed)(()=>s.virtualScroll&&h.value.length>=200),b=(0,n.computed)(()=>s.virtualScroll&&v.value.length>=100),S=e=>{c(`select-contact`,e)},C=e=>{if(e instanceof KeyboardEvent&&(e.isComposing||e.keyCode===229))return;e?.preventDefault();let t=u.value.trim();t&&(c(`send`,t),u.value=``)},{scrollToBottom:w,handleMessagesScroll:T,handleScrollIntent:E}=P({messages:h,contactId:g,virtual:y,loadingHistory:(0,n.computed)(()=>l.value.loadingHistory),normalRef:f,virtualRef:p,onLoadMore:()=>c(`load-more`)});return a({scrollToBottom:w}),(a,o)=>{let s=r.NInput,w=r.NSpin,D=r.NButton;return(0,n.openBlock)(),(0,n.createElementBlock)(`div`,I,[(0,n.createCommentVNode)(` ===== 联系人侧栏 ===== `),l.value.showContacts&&m.value.length?((0,n.openBlock)(),(0,n.createElementBlock)(`aside`,L,[(0,n.createElementVNode)(`div`,R,[(0,n.createVNode)(e.t,{name:`mdi:chat-outline`,size:20}),o[14]||=(0,n.createTextVNode)(` 会话 `,-1)]),(0,n.createCommentVNode)(` 搜索框 `),(0,n.createElementVNode)(`div`,z,[(0,n.createVNode)(s,{value:d.value,"onUpdate:value":o[0]||=e=>d.value=e,placeholder:`搜索联系人`,clearable:``,size:`small`},{prefix:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:magnify`,size:16})]),_:1},8,[`value`])]),b.value?((0,n.openBlock)(),(0,n.createBlock)((0,n.unref)(i.VVirtualList),{key:0,class:`c-chat__contact-list`,items:v.value,"key-field":`id`,"item-size":56,"item-resizable":``},{default:(0,n.withCtx)(({index:e})=>[(0,n.createVNode)(N,{contact:v.value[e],active:v.value[e].id===g.value,onSelect:S},null,8,[`contact`,`active`])]),_:1},8,[`items`])):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,B,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(v.value,e=>((0,n.openBlock)(),(0,n.createBlock)(N,{key:e.id,contact:e,active:e.id===g.value,onSelect:S},null,8,[`contact`,`active`]))),128))]))])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` ===== 主聊天区域 ===== `),_.value||!l.value.showContacts?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,V,[(0,n.createCommentVNode)(` 顶栏 `),(0,n.createElementVNode)(`div`,H,[(0,n.renderSlot)(a.$slots,`header`,{},()=>[(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(_.value?.name||l.value.title),1),_.value?.online?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,U,` 在线 `)):(0,n.createCommentVNode)(`v-if`,!0)],!0)]),y.value?((0,n.openBlock)(),(0,n.createBlock)((0,n.unref)(i.VVirtualList),{key:g.value,ref_key:`virtualMessagesRef`,ref:p,class:`c-chat__messages c-chat__messages--virtual`,items:h.value,"key-field":`id`,"item-size":32,"item-resizable":``,"padding-top":16,"padding-bottom":16,"items-style":{paddingLeft:`20px`,paddingRight:`20px`},onScroll:(0,n.unref)(T),onWheel:(0,n.unref)(E),onPointerdown:(0,n.unref)(E),onKeydown:(0,n.unref)(E)},{default:(0,n.withCtx)(({index:e})=>[(0,n.createElementVNode)(`div`,null,[e===0&&l.value.loadingHistory?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,W,[(0,n.createVNode)(w,{size:`small`})])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createVNode)(x,{msg:h.value[e],previous:h.value[e-1],"self-avatar":t.selfAvatar,"self-name":t.selfName,"show-timestamp":l.value.showTimestamp,onImagePreview:o[1]||=e=>c(`image-preview`,e),onFileClick:o[2]||=e=>c(`file-click`,e),onResend:o[3]||=e=>c(`resend`,e)},null,8,[`msg`,`previous`,`self-avatar`,`self-name`,`show-timestamp`])])]),_:1},8,[`items`,`onScroll`,`onWheel`,`onPointerdown`,`onKeydown`])):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:1,ref_key:`messagesRef`,ref:f,class:`c-chat__messages`,onScroll:o[7]||=(...e)=>(0,n.unref)(T)&&(0,n.unref)(T)(...e),onWheel:o[8]||=(...e)=>(0,n.unref)(E)&&(0,n.unref)(E)(...e),onPointerdown:o[9]||=(...e)=>(0,n.unref)(E)&&(0,n.unref)(E)(...e),onKeydown:o[10]||=(...e)=>(0,n.unref)(E)&&(0,n.unref)(E)(...e)},[(0,n.createElementVNode)(`div`,G,[l.value.loadingHistory?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,K,[(0,n.createVNode)(w,{size:`small`})])):(0,n.createCommentVNode)(`v-if`,!0),!h.value.length&&!l.value.loadingHistory?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,q,`暂无消息,发送第一条吧`)):(0,n.createCommentVNode)(`v-if`,!0),((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(h.value,(e,r)=>((0,n.openBlock)(),(0,n.createBlock)(x,{key:e.id,msg:e,previous:h.value[r-1],"self-avatar":t.selfAvatar,"self-name":t.selfName,"show-timestamp":l.value.showTimestamp,onImagePreview:o[4]||=e=>c(`image-preview`,e),onFileClick:o[5]||=e=>c(`file-click`,e),onResend:o[6]||=e=>c(`resend`,e)},null,8,[`msg`,`previous`,`self-avatar`,`self-name`,`show-timestamp`]))),128))])],544)),(0,n.createCommentVNode)(` 输入区域 `),(0,n.createElementVNode)(`div`,J,[(0,n.createElementVNode)(`div`,Y,[(0,n.renderSlot)(a.$slots,`input-actions`,{},()=>[(0,n.createVNode)(D,{quaternary:``,circle:``,size:`small`,onClick:o[11]||=e=>c(`emoji-click`)},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:emoticon-happy-outline`,size:18})]),_:1}),(0,n.createVNode)(D,{quaternary:``,circle:``,size:`small`,onClick:o[12]||=e=>c(`file-upload`)},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:paperclip`,size:18})]),_:1})],!0)]),(0,n.createElementVNode)(`div`,X,[(0,n.createVNode)(s,{value:u.value,"onUpdate:value":o[13]||=e=>u.value=e,placeholder:l.value.placeholder,type:`textarea`,autosize:{minRows:1,maxRows:4},onKeydown:(0,n.withKeys)((0,n.withModifiers)(C,[`exact`]),[`enter`])},null,8,[`value`,`placeholder`,`onKeydown`])]),l.value.showSendBtn?((0,n.openBlock)(),(0,n.createBlock)(D,{key:0,type:`primary`,disabled:!u.value.trim(),class:`c-chat__send-btn`,onClick:C},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:send`,size:16})]),_:1},8,[`disabled`])):(0,n.createCommentVNode)(`v-if`,!0)])])):((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:2},[(0,n.createCommentVNode)(` ===== 未选中联系人空态 ===== `),(0,n.createElementVNode)(`div`,Z,[(0,n.createVNode)(e.t,{name:`mdi:chat-processing-outline`,size:48,class:`c-chat__no-chat-icon`}),o[15]||=(0,n.createElementVNode)(`span`,null,`选择一个会话开始聊天`,-1)])],2112))])}}});var $=t.t(Q,[[`__scopeId`,`data-v-4e22902a`]]);Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return $}});
package/dist/C_Chat2.js CHANGED
@@ -1 +1 @@
1
- import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{Fragment as n,computed as r,createBlock as ee,createCommentVNode as i,createElementBlock as a,createElementVNode as o,createTextVNode as te,createVNode as s,defineComponent as c,nextTick as l,normalizeClass as u,openBlock as d,ref as f,renderList as p,renderSlot as m,resolveComponent as ne,toDisplayString as h,watch as re,withCtx as g,withKeys as ie,withModifiers as ae}from"vue";import{NButton as oe,NInput as se,NSpin as ce}from"naive-ui";const _={placeholder:`输入消息...`,showContacts:!0,showTimestamp:!0,showSendBtn:!0,loadingHistory:!1,title:`聊天`},le={class:`c-chat`},ue={key:0,class:`c-chat__sidebar`},de={class:`c-chat__sidebar-header`},fe={class:`c-chat__search`},pe={class:`c-chat__contact-list`},me=[`onClick`],he={class:`c-chat__contact-avatar`},v=[`src`,`alt`],y={key:1,class:`c-chat__avatar-fallback`},b={key:2,class:`c-chat__online-dot`},x={class:`c-chat__contact-info`},S={class:`c-chat__contact-name`},C={key:0,class:`c-chat__contact-time`},w={key:0,class:`c-chat__contact-last`},T={key:0,class:`c-chat__unread`},E={key:1,class:`c-chat__main`},D={class:`c-chat__header`},O={key:0,class:`c-chat__header-status`},k={key:0,class:`c-chat__load-more`},A={key:1,class:`c-chat__empty`},j={key:0,class:`c-chat__time-divider`},M={key:0,class:`c-chat__msg-avatar`},N=[`src`],P={key:1,class:`c-chat__avatar-fallback`},F={class:`c-chat__msg-body`},I={key:0,class:`c-chat__msg-username`},L={key:1,class:`c-chat__bubble`},R=[`aria-label`,`onClick`],ge=[`src`,`alt`],_e=[`onClick`],ve={class:`c-chat__file-info`},ye={class:`c-chat__file-name`},be={key:0,class:`c-chat__file-size`},xe={key:4,class:`c-chat__msg-time`},Se=[`onClick`],Ce={key:6,class:`c-chat__msg-status is-sending`},we={class:`c-chat__input-area`},Te={class:`c-chat__input-actions`},Ee={class:`c-chat__input-wrap`},De={class:`c-chat__main c-chat__no-chat`};var z=t(c({__name:`index`,props:{contacts:{default:()=>[]},messages:{default:()=>[]},currentContactId:{default:``},placeholder:{default:_.placeholder},showContacts:{type:Boolean,default:_.showContacts},showTimestamp:{type:Boolean,default:_.showTimestamp},selfAvatar:{default:``},selfName:{default:``},showSendBtn:{type:Boolean,default:_.showSendBtn},loadingHistory:{type:Boolean,default:_.loadingHistory},title:{default:_.title}},emits:[`send`,`select-contact`,`load-more`,`image-preview`,`file-click`,`file-upload`,`emoji-click`,`resend`],setup(t,{expose:c,emit:ne}){let z=t,B=ne,V=r(()=>({..._,...z})),H=f(``),U=f(``),W=f(null),G=r(()=>z.contacts??[]),K=r(()=>z.messages??[]),q=r(()=>z.currentContactId||G.value[0]?.id||``),J=r(()=>G.value.find(e=>e.id===q.value)),Oe=r(()=>{if(!U.value)return G.value;let e=U.value.toLowerCase();return G.value.filter(t=>t.name.toLowerCase().includes(e))}),ke=e=>{B(`select-contact`,e)},Y=()=>{let e=H.value.trim();e&&(B(`send`,e),H.value=``)},X=()=>{l(()=>{W.value&&(W.value.scrollTop=W.value.scrollHeight)})};re(()=>z.messages?.length,()=>X(),{flush:`post`});let Z=()=>{W.value&&W.value.scrollTop===0&&!V.value.loadingHistory&&B(`load-more`)},Q=e=>e.sender===`self`&&z.selfAvatar||e.avatar,Ae=e=>e.sender===`self`?z.selfName||e.username||`Me`:e.username||`未知`,$=e=>{let t=new Date(e);return`${t.getHours().toString().padStart(2,`0`)}:${t.getMinutes().toString().padStart(2,`0`)}`},je=e=>{let t=new Date(e),n=new Date;return t.getFullYear()===n.getFullYear()&&t.getMonth()===n.getMonth()&&t.getDate()===n.getDate()?$(e):`${t.getMonth()+1}/${t.getDate()} ${$(e)}`},Me=e=>{let t=new Date(e),n=new Date().getTime()-t.getTime();return n<6e4?`刚刚`:n<36e5?`${Math.floor(n/6e4)}分钟前`:n<864e5?$(e):`${t.getMonth()+1}/${t.getDate()}`},Ne=e=>e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`,Pe=(e,t)=>{if(t===0)return!0;let n=K.value[t-1];return new Date(e.timestamp).getTime()-new Date(n.timestamp).getTime()>300*1e3};return c({scrollToBottom:X}),(t,r)=>{let c=se,l=ce,f=oe;return d(),a(`div`,le,[i(` ===== 联系人侧栏 ===== `),V.value.showContacts&&G.value.length?(d(),a(`aside`,ue,[o(`div`,de,[s(e,{name:`mdi:chat-outline`,size:20}),r[4]||=te(` 会话 `,-1)]),i(` 搜索框 `),o(`div`,fe,[s(c,{value:U.value,"onUpdate:value":r[0]||=e=>U.value=e,placeholder:`搜索联系人`,clearable:``,size:`small`},{prefix:g(()=>[s(e,{name:`mdi:magnify`,size:16})]),_:1},8,[`value`])]),i(` 联系人列表 `),o(`div`,pe,[(d(!0),a(n,null,p(Oe.value,e=>(d(),a(`div`,{key:e.id,class:u([`c-chat__contact`,{"is-active":e.id===q.value}]),onClick:t=>ke(e.id)},[o(`div`,he,[e.avatar?(d(),a(`img`,{key:0,src:e.avatar,alt:e.name,class:`c-chat__avatar`},null,8,v)):(d(),a(`div`,y,h(e.name.charAt(0)),1)),e.online?(d(),a(`span`,b)):i(`v-if`,!0)]),o(`div`,x,[o(`div`,S,[o(`span`,null,h(e.name),1),e.lastTime?(d(),a(`span`,C,h(Me(e.lastTime)),1)):i(`v-if`,!0)]),e.lastMessage?(d(),a(`div`,w,h(e.lastMessage),1)):i(`v-if`,!0)]),e.unread?(d(),a(`span`,T,h(e.unread>99?`99+`:e.unread),1)):i(`v-if`,!0)],10,me))),128))])])):i(`v-if`,!0),i(` ===== 主聊天区域 ===== `),J.value||!V.value.showContacts?(d(),a(`div`,E,[i(` 顶栏 `),o(`div`,D,[m(t.$slots,`header`,{},()=>[o(`span`,null,h(J.value?.name||V.value.title),1),J.value?.online?(d(),a(`span`,O,` 在线 `)):i(`v-if`,!0)],!0)]),i(` 消息列表 `),o(`div`,{ref_key:`messagesRef`,ref:W,class:`c-chat__messages`,onScroll:Z},[i(` 加载更多 `),V.value.loadingHistory?(d(),a(`div`,k,[s(l,{size:`small`})])):i(`v-if`,!0),i(` 消息为空 `),!K.value.length&&!V.value.loadingHistory?(d(),a(`div`,A,` 暂无消息,发送第一条吧 `)):i(`v-if`,!0),i(` 消息列表 `),(d(!0),a(n,null,p(K.value,(t,r)=>(d(),a(n,{key:t.id},[i(` 时间分割 `),Pe(t,r)?(d(),a(`div`,j,h(je(t.timestamp)),1)):i(`v-if`,!0),i(` 消息条目 `),o(`div`,{class:u([`c-chat__msg`,`is-${t.sender}`])},[i(` 头像 `),t.sender===`system`?i(`v-if`,!0):(d(),a(`div`,M,[Q(t)?(d(),a(`img`,{key:0,src:Q(t),class:`c-chat__avatar`},null,8,N)):(d(),a(`div`,P,h(Ae(t).charAt(0)),1))])),i(` 消息体 `),o(`div`,F,[t.sender===`other`&&t.username?(d(),a(`span`,I,h(t.username),1)):i(`v-if`,!0),i(` 文本消息 `),t.type===`text`||t.type===`system`?(d(),a(`div`,L,h(t.content),1)):t.type===`image`?(d(),a(n,{key:2},[i(` 图片消息 `),o(`button`,{type:`button`,class:`c-chat__msg-image-button`,"aria-label":`预览${t.username||`聊天`}的图片`,onClick:e=>B(`image-preview`,t.content)},[o(`img`,{src:t.content,alt:t.fileName||`聊天图片`,class:`c-chat__msg-image`},null,8,ge)],8,R)],2112)):t.type===`file`?(d(),a(n,{key:3},[i(` 文件消息 `),o(`button`,{type:`button`,class:`c-chat__msg-file`,onClick:e=>B(`file-click`,t)},[s(e,{name:`mdi:file-document-outline`,size:28}),o(`div`,ve,[o(`span`,ye,h(t.fileName||`文件`),1),t.fileSize?(d(),a(`span`,be,h(Ne(t.fileSize)),1)):i(`v-if`,!0)])],8,_e)],2112)):i(`v-if`,!0),i(` 时间戳 `),V.value.showTimestamp&&t.sender!==`system`?(d(),a(`span`,xe,h($(t.timestamp)),1)):i(`v-if`,!0),i(` 发送状态 `),t.sender===`self`&&t.status===`failed`?(d(),a(`button`,{key:5,type:`button`,class:`c-chat__msg-status is-failed`,onClick:e=>B(`resend`,t)},` 发送失败,点击重试 `,8,Se)):t.sender===`self`&&t.status===`sending`?(d(),a(`span`,Ce,`发送中...`)):i(`v-if`,!0)])],2)],64))),128))],544),i(` 输入区域 `),o(`div`,we,[o(`div`,Te,[m(t.$slots,`input-actions`,{},()=>[s(f,{quaternary:``,circle:``,size:`small`,onClick:r[1]||=e=>B(`emoji-click`)},{icon:g(()=>[s(e,{name:`mdi:emoticon-happy-outline`,size:18})]),_:1}),s(f,{quaternary:``,circle:``,size:`small`,onClick:r[2]||=e=>B(`file-upload`)},{icon:g(()=>[s(e,{name:`mdi:paperclip`,size:18})]),_:1})],!0)]),o(`div`,Ee,[s(c,{value:H.value,"onUpdate:value":r[3]||=e=>H.value=e,placeholder:V.value.placeholder,type:`textarea`,autosize:{minRows:1,maxRows:4},onKeydown:ie(ae(Y,[`exact`,`prevent`]),[`enter`])},null,8,[`value`,`placeholder`,`onKeydown`])]),V.value.showSendBtn?(d(),ee(f,{key:0,type:`primary`,disabled:!H.value.trim(),class:`c-chat__send-btn`,onClick:Y},{icon:g(()=>[s(e,{name:`mdi:send`,size:16})]),_:1},8,[`disabled`])):i(`v-if`,!0)])])):(d(),a(n,{key:2},[i(` ===== 未选中联系人空态 ===== `),o(`div`,De,[s(e,{name:`mdi:chat-processing-outline`,size:48,class:`c-chat__no-chat-icon`}),r[5]||=o(`span`,null,`选择一个会话开始聊天`,-1)])],2112))])}}}),[[`__scopeId`,`data-v-281bb0dd`]]);export{_ as n,z as t};
1
+ import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{Fragment as n,computed as r,createBlock as i,createCommentVNode as a,createElementBlock as o,createElementVNode as s,createTextVNode as c,createVNode as l,defineComponent as u,nextTick as d,normalizeClass as f,onBeforeUnmount as p,openBlock as m,ref as h,renderList as g,renderSlot as _,resolveComponent as v,toDisplayString as y,unref as b,watch as x,withCtx as S,withKeys as C,withModifiers as w}from"vue";import{NButton as T,NInput as E,NSpin as D}from"naive-ui";import{VVirtualList as O}from"vueuc";const k=[`data-message-id`],A={key:0,class:`c-chat__time-divider`},j={key:0,class:`c-chat__msg-avatar`},M=[`src`],N={key:1,class:`c-chat__avatar-fallback`},P={class:`c-chat__msg-body`},F={key:0,class:`c-chat__msg-username`},I={key:1,class:`c-chat__bubble`},L=[`aria-label`],R=[`src`,`alt`],z={class:`c-chat__file-info`},B={class:`c-chat__file-name`},V={key:0,class:`c-chat__file-size`},H={key:4,class:`c-chat__msg-time`},U={key:6,class:`c-chat__msg-status is-sending`};var W=t(u({__name:`ChatMessageItem`,props:{msg:{},previous:{},selfAvatar:{},selfName:{},showTimestamp:{type:Boolean}},emits:[`image-preview`,`file-click`,`resend`],setup(t,{emit:i}){let c=t,u=i,d=r(()=>!c.previous||new Date(c.msg.timestamp).getTime()-new Date(c.previous.timestamp).getTime()>3e5),p=e=>e.sender===`self`&&c.selfAvatar||e.avatar,h=e=>e.sender===`self`?c.selfName||e.username||`Me`:e.username||`未知`;function g(e){let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`}function _(e){let t=new Date(e),n=new Date;return t.toDateString()===n.toDateString()?g(e):`${t.getMonth()+1}/${t.getDate()} ${g(e)}`}function v(e){return e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`}return(r,i)=>(m(),o(`div`,{class:`c-chat__message-row`,"data-message-id":t.msg.id},[a(` 时间分割 `),d.value?(m(),o(`div`,A,y(_(t.msg.timestamp)),1)):a(`v-if`,!0),a(` 消息条目 `),s(`div`,{class:f([`c-chat__msg`,`is-${t.msg.sender}`])},[a(` 头像 `),t.msg.sender===`system`?a(`v-if`,!0):(m(),o(`div`,j,[p(t.msg)?(m(),o(`img`,{key:0,src:p(t.msg),class:`c-chat__avatar`},null,8,M)):(m(),o(`div`,N,y(h(t.msg).charAt(0)),1))])),a(` 消息体 `),s(`div`,P,[t.msg.sender===`other`&&t.msg.username?(m(),o(`span`,F,y(t.msg.username),1)):a(`v-if`,!0),a(` 文本消息 `),t.msg.type===`text`||t.msg.type===`system`?(m(),o(`div`,I,y(t.msg.content),1)):t.msg.type===`image`?(m(),o(n,{key:2},[a(` 图片消息 `),s(`button`,{type:`button`,class:`c-chat__msg-image-button`,"aria-label":`预览${t.msg.username||`聊天`}的图片`,onClick:i[0]||=e=>u(`image-preview`,t.msg.content)},[s(`img`,{src:t.msg.content,alt:t.msg.fileName||`聊天图片`,class:`c-chat__msg-image`},null,8,R)],8,L)],2112)):t.msg.type===`file`?(m(),o(n,{key:3},[a(` 文件消息 `),s(`button`,{type:`button`,class:`c-chat__msg-file`,onClick:i[1]||=e=>u(`file-click`,t.msg)},[l(e,{name:`mdi:file-document-outline`,size:28}),s(`div`,z,[s(`span`,B,y(t.msg.fileName||`文件`),1),t.msg.fileSize?(m(),o(`span`,V,y(v(t.msg.fileSize)),1)):a(`v-if`,!0)])])],2112)):a(`v-if`,!0),a(` 时间戳 `),t.showTimestamp&&t.msg.sender!==`system`?(m(),o(`span`,H,y(g(t.msg.timestamp)),1)):a(`v-if`,!0),a(` 发送状态 `),t.msg.sender===`self`&&t.msg.status===`failed`?(m(),o(`button`,{key:5,type:`button`,class:`c-chat__msg-status is-failed`,onClick:i[2]||=e=>u(`resend`,t.msg)},` 发送失败,点击重试 `)):t.msg.sender===`self`&&t.msg.status===`sending`?(m(),o(`span`,U,`发送中...`)):a(`v-if`,!0)])],2)],8,k))}}),[[`__scopeId`,`data-v-f86c73f0`]]);const ee=[`data-contact-id`],te={class:`c-chat__contact-avatar`},ne=[`src`,`alt`],G={key:1,class:`c-chat__avatar-fallback`},K={key:2,class:`c-chat__online-dot`},q={class:`c-chat__contact-info`},J={class:`c-chat__contact-name`},Y={key:0,class:`c-chat__contact-time`},X={key:0,class:`c-chat__contact-last`},re={key:0,class:`c-chat__unread`};var Z=t(u({__name:`ChatContactItem`,props:{contact:{},active:{type:Boolean}},emits:[`select`],setup(e,{emit:t}){let n=t;function r(e){let t=new Date(e),n=Date.now()-t.getTime();if(n<6e4)return`刚刚`;if(n<36e5)return`${Math.floor(n/6e4)}分钟前`;let r=`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`;return n<864e5?r:`${t.getMonth()+1}/${t.getDate()} ${r}`}return(t,i)=>(m(),o(`button`,{type:`button`,class:f([`c-chat__contact`,{"is-active":e.active}]),"data-contact-id":e.contact.id,onClick:i[0]||=t=>n(`select`,e.contact.id)},[s(`div`,te,[e.contact.avatar?(m(),o(`img`,{key:0,src:e.contact.avatar,alt:e.contact.name,class:`c-chat__avatar`},null,8,ne)):(m(),o(`div`,G,y(e.contact.name.charAt(0)),1)),e.contact.online?(m(),o(`span`,K)):a(`v-if`,!0)]),s(`div`,q,[s(`div`,J,[s(`span`,null,y(e.contact.name),1),e.contact.lastTime?(m(),o(`span`,Y,y(r(e.contact.lastTime)),1)):a(`v-if`,!0)]),e.contact.lastMessage?(m(),o(`div`,X,y(e.contact.lastMessage),1)):a(`v-if`,!0)]),e.contact.unread?(m(),o(`span`,re,y(e.contact.unread>99?`99+`:e.contact.unread),1)):a(`v-if`,!0)],10,ee))}}),[[`__scopeId`,`data-v-de62a9e6`]]);function ie(e){let t=!1,n=0,r,i,a,o=!0,s=!1,c=!1,l=0,u=0,f,m=()=>e.virtualRef.value?.listElRef??e.normalRef.value,h=e=>e.scrollHeight-e.scrollTop-e.clientHeight<=64,g=e=>Array.from(e.querySelectorAll(`[data-message-id]`));function _(){r!==void 0&&cancelAnimationFrame(r),r=void 0}function v(e,i){if(_(),typeof requestAnimationFrame>`u`){i();return}r=requestAnimationFrame(()=>{r=void 0,!t&&e===n&&i()})}function y(e){let r=++n;_(),d(()=>{!t&&r===n&&e(r)})}function b(t){let n=e.virtualRef.value;n?n.scrollTo({top:t,debounce:!1}):e.normalRef.value&&(e.normalRef.value.scrollTop=t)}function S(){let t=e.virtualRef.value;t?t.scrollTo({position:`bottom`}):e.normalRef.value&&(e.normalRef.value.scrollTop=e.normalRef.value.scrollHeight)}function C(){o=!0,c=!1,s=!0,f=void 0,y(e=>{S(),v(e,()=>{S(),s=!1})})}function w(e){let{top:t}=e.getBoundingClientRect(),n=g(e).find(e=>e.getBoundingClientRect().bottom>t);return n?.dataset.messageId?{id:n.dataset.messageId,offset:n.getBoundingClientRect().top-t}:void 0}function T(e,t){let n=m();if(!n||!f)return;let r=g(n).find(e=>e.dataset.messageId===f?.id);if(r){let e=r.getBoundingClientRect().top-n.getBoundingClientRect().top;b(Math.max(0,n.scrollTop+e-f.offset))}t>0?v(e,()=>T(e,t-1)):f=void 0}function E(t){f=t,o=!1,s=!1,y(n=>{e.virtualRef.value?.scrollTo({key:t.id,debounce:!1}),T(n,3)})}function D(e,t){o=!1,s=!1,f=void 0,y(()=>{let n=m();n&&b(Math.max(0,e+n.scrollHeight-t))})}function O(){o=!1,s=!1,n++,_()}function k(){c=!0,f=void 0,O(),i!==void 0&&cancelAnimationFrame(i),i=requestAnimationFrame(()=>{if(i=void 0,t||!c)return;c=!1;let e=m();e&&!f&&(o=h(e))})}function A(e){return l>0&&(l!==e.scrollHeight||u!==e.clientHeight)}function j(e){let t=A(e);if(l=e.scrollHeight,u=e.clientHeight,!(s||f)){if(o&&t&&!c){C();return}c=!1,o=h(e)}}function M(){let t=m();t&&(j(t),t.scrollTop===0&&!e.loadingHistory.value&&e.onLoadMore())}function N(){if(!t)if(f){let e=n;v(e,()=>T(e,1))}else o&&C()}x(()=>e.virtualRef.value?.itemsElRef??e.normalRef.value?.firstElementChild,e=>{if(a?.disconnect(),a=void 0,e&&typeof ResizeObserver<`u`){a=new ResizeObserver(N),a.observe(e);let t=m();t&&t!==e&&a.observe(t)}},{flush:`post`});let P=()=>{let t=e.messages.value;return[e.contactId.value,t.length,t[0]?.id,t[t.length-1]?.id,t[t.length-1]?.content,e.loadingHistory.value,e.virtual.value]},F=(t,n)=>t[1]>n[1]&&n[1]>0&&t[2]!==n[2]&&(t[3]===n[3]||e.messages.value.some(e=>e.id===n[2])),I=(e,t)=>e[1]>0&&t[1]>0&&e[2]!==t[2]&&e[3]!==t[3];function L(e,t,n){let r=e[6]||t[6]?w(n):void 0;r?E(r):D(n.scrollTop,n.scrollHeight)}let R=(e,t,n)=>I(e,t)||t[1]===0||!c&&(h(n)||o&&A(n));function z(e,t,n){R(e,t,n)?C():L(e,t,n)}return x(P,(e,t)=>{let n=m();if(!t||e[0]!==t[0]||!n){C();return}F(e,t)||e[5]!==t[5]?L(e,t,n):e[6]===t[6]?R(e,t,n)?C():f||O():z(e,t,n)},{immediate:!0,flush:`pre`}),p(()=>{t=!0,n++,_(),i!==void 0&&cancelAnimationFrame(i),a?.disconnect()}),{scrollToBottom:C,handleMessagesScroll:M,handleScrollIntent:k}}const Q={placeholder:`输入消息...`,showContacts:!0,showTimestamp:!0,showSendBtn:!0,loadingHistory:!1,title:`聊天`},ae={class:`c-chat`},oe={key:0,class:`c-chat__sidebar`},se={class:`c-chat__sidebar-header`},ce={class:`c-chat__search`},le={key:1,class:`c-chat__contact-list`},ue={key:1,class:`c-chat__main`},de={class:`c-chat__header`},$={key:0,class:`c-chat__header-status`},fe={key:0,class:`c-chat__load-more`},pe={class:`c-chat__message-items`},me={key:0,class:`c-chat__load-more`},he={key:1,class:`c-chat__empty`},ge={class:`c-chat__input-area`},_e={class:`c-chat__input-actions`},ve={class:`c-chat__input-wrap`},ye={class:`c-chat__main c-chat__no-chat`};var be=t(u({__name:`index`,props:{contacts:{default:()=>[]},messages:{default:()=>[]},currentContactId:{default:``},placeholder:{default:Q.placeholder},showContacts:{type:Boolean,default:Q.showContacts},showTimestamp:{type:Boolean,default:Q.showTimestamp},selfAvatar:{default:``},selfName:{default:``},showSendBtn:{type:Boolean,default:Q.showSendBtn},loadingHistory:{type:Boolean,default:Q.loadingHistory},virtualScroll:{type:Boolean,default:!0},title:{default:Q.title}},emits:[`send`,`select-contact`,`load-more`,`image-preview`,`file-click`,`file-upload`,`emoji-click`,`resend`],setup(t,{expose:u,emit:d}){let f=t,p=d,v=r(()=>({...Q,...f})),x=h(``),k=h(``),A=h(null),j=h(null),M=r(()=>f.contacts??[]),N=r(()=>f.messages??[]),P=r(()=>f.currentContactId||M.value[0]?.id||``),F=r(()=>M.value.find(e=>e.id===P.value)),I=r(()=>{if(!k.value)return M.value;let e=k.value.toLowerCase();return M.value.filter(t=>t.name.toLowerCase().includes(e))}),L=r(()=>f.virtualScroll&&N.value.length>=200),R=r(()=>f.virtualScroll&&I.value.length>=100),z=e=>{p(`select-contact`,e)},B=e=>{if(e instanceof KeyboardEvent&&(e.isComposing||e.keyCode===229))return;e?.preventDefault();let t=x.value.trim();t&&(p(`send`,t),x.value=``)},{scrollToBottom:V,handleMessagesScroll:H,handleScrollIntent:U}=ie({messages:N,contactId:P,virtual:L,loadingHistory:r(()=>v.value.loadingHistory),normalRef:A,virtualRef:j,onLoadMore:()=>p(`load-more`)});return u({scrollToBottom:V}),(r,u)=>{let d=E,f=D,h=T;return m(),o(`div`,ae,[a(` ===== 联系人侧栏 ===== `),v.value.showContacts&&M.value.length?(m(),o(`aside`,oe,[s(`div`,se,[l(e,{name:`mdi:chat-outline`,size:20}),u[14]||=c(` 会话 `,-1)]),a(` 搜索框 `),s(`div`,ce,[l(d,{value:k.value,"onUpdate:value":u[0]||=e=>k.value=e,placeholder:`搜索联系人`,clearable:``,size:`small`},{prefix:S(()=>[l(e,{name:`mdi:magnify`,size:16})]),_:1},8,[`value`])]),R.value?(m(),i(b(O),{key:0,class:`c-chat__contact-list`,items:I.value,"key-field":`id`,"item-size":56,"item-resizable":``},{default:S(({index:e})=>[l(Z,{contact:I.value[e],active:I.value[e].id===P.value,onSelect:z},null,8,[`contact`,`active`])]),_:1},8,[`items`])):(m(),o(`div`,le,[(m(!0),o(n,null,g(I.value,e=>(m(),i(Z,{key:e.id,contact:e,active:e.id===P.value,onSelect:z},null,8,[`contact`,`active`]))),128))]))])):a(`v-if`,!0),a(` ===== 主聊天区域 ===== `),F.value||!v.value.showContacts?(m(),o(`div`,ue,[a(` 顶栏 `),s(`div`,de,[_(r.$slots,`header`,{},()=>[s(`span`,null,y(F.value?.name||v.value.title),1),F.value?.online?(m(),o(`span`,$,` 在线 `)):a(`v-if`,!0)],!0)]),L.value?(m(),i(b(O),{key:P.value,ref_key:`virtualMessagesRef`,ref:j,class:`c-chat__messages c-chat__messages--virtual`,items:N.value,"key-field":`id`,"item-size":32,"item-resizable":``,"padding-top":16,"padding-bottom":16,"items-style":{paddingLeft:`20px`,paddingRight:`20px`},onScroll:b(H),onWheel:b(U),onPointerdown:b(U),onKeydown:b(U)},{default:S(({index:e})=>[s(`div`,null,[e===0&&v.value.loadingHistory?(m(),o(`div`,fe,[l(f,{size:`small`})])):a(`v-if`,!0),l(W,{msg:N.value[e],previous:N.value[e-1],"self-avatar":t.selfAvatar,"self-name":t.selfName,"show-timestamp":v.value.showTimestamp,onImagePreview:u[1]||=e=>p(`image-preview`,e),onFileClick:u[2]||=e=>p(`file-click`,e),onResend:u[3]||=e=>p(`resend`,e)},null,8,[`msg`,`previous`,`self-avatar`,`self-name`,`show-timestamp`])])]),_:1},8,[`items`,`onScroll`,`onWheel`,`onPointerdown`,`onKeydown`])):(m(),o(`div`,{key:1,ref_key:`messagesRef`,ref:A,class:`c-chat__messages`,onScroll:u[7]||=(...e)=>b(H)&&b(H)(...e),onWheel:u[8]||=(...e)=>b(U)&&b(U)(...e),onPointerdown:u[9]||=(...e)=>b(U)&&b(U)(...e),onKeydown:u[10]||=(...e)=>b(U)&&b(U)(...e)},[s(`div`,pe,[v.value.loadingHistory?(m(),o(`div`,me,[l(f,{size:`small`})])):a(`v-if`,!0),!N.value.length&&!v.value.loadingHistory?(m(),o(`div`,he,`暂无消息,发送第一条吧`)):a(`v-if`,!0),(m(!0),o(n,null,g(N.value,(e,n)=>(m(),i(W,{key:e.id,msg:e,previous:N.value[n-1],"self-avatar":t.selfAvatar,"self-name":t.selfName,"show-timestamp":v.value.showTimestamp,onImagePreview:u[4]||=e=>p(`image-preview`,e),onFileClick:u[5]||=e=>p(`file-click`,e),onResend:u[6]||=e=>p(`resend`,e)},null,8,[`msg`,`previous`,`self-avatar`,`self-name`,`show-timestamp`]))),128))])],544)),a(` 输入区域 `),s(`div`,ge,[s(`div`,_e,[_(r.$slots,`input-actions`,{},()=>[l(h,{quaternary:``,circle:``,size:`small`,onClick:u[11]||=e=>p(`emoji-click`)},{icon:S(()=>[l(e,{name:`mdi:emoticon-happy-outline`,size:18})]),_:1}),l(h,{quaternary:``,circle:``,size:`small`,onClick:u[12]||=e=>p(`file-upload`)},{icon:S(()=>[l(e,{name:`mdi:paperclip`,size:18})]),_:1})],!0)]),s(`div`,ve,[l(d,{value:x.value,"onUpdate:value":u[13]||=e=>x.value=e,placeholder:v.value.placeholder,type:`textarea`,autosize:{minRows:1,maxRows:4},onKeydown:C(w(B,[`exact`]),[`enter`])},null,8,[`value`,`placeholder`,`onKeydown`])]),v.value.showSendBtn?(m(),i(h,{key:0,type:`primary`,disabled:!x.value.trim(),class:`c-chat__send-btn`,onClick:B},{icon:S(()=>[l(e,{name:`mdi:send`,size:16})]),_:1},8,[`disabled`])):a(`v-if`,!0)])])):(m(),o(n,{key:2},[a(` ===== 未选中联系人空态 ===== `),s(`div`,ye,[l(e,{name:`mdi:chat-processing-outline`,size:48,class:`c-chat__no-chat-icon`}),u[15]||=s(`span`,null,`选择一个会话开始聊天`,-1)])],2112))])}}}),[[`__scopeId`,`data-v-4e22902a`]]);export{Q as n,be as t};
package/dist/C_Code.css CHANGED
@@ -183,7 +183,7 @@ code.hljs {
183
183
  /* purposely ignored */
184
184
 
185
185
  }
186
- .c-code-wrapper[data-v-9e3bbbe0] {
186
+ .c-code-wrapper[data-v-a34bb36b] {
187
187
  --c-code-copy-bg: rgba(255, 255, 255, 0.9);
188
188
  --c-code-copy-shadow: rgba(0, 0, 0, 0.1);
189
189
  --c-code-loading-bg: rgba(255, 255, 255, 0.8);
@@ -193,7 +193,7 @@ code.hljs {
193
193
  overflow: hidden;
194
194
  background: transparent;
195
195
  }
196
- .c-code-header[data-v-9e3bbbe0] {
196
+ .c-code-header[data-v-a34bb36b] {
197
197
  display: flex;
198
198
  justify-content: space-between;
199
199
  align-items: center;
@@ -202,11 +202,11 @@ code.hljs {
202
202
  border-bottom: 1px solid var(--n-border-color);
203
203
  }
204
204
  @media (max-width: 768px) {
205
- .c-code-header[data-v-9e3bbbe0] {
205
+ .c-code-header[data-v-a34bb36b] {
206
206
  padding: 6px 12px;
207
207
  }
208
208
  }
209
- .c-code-title[data-v-9e3bbbe0] {
209
+ .c-code-title[data-v-a34bb36b] {
210
210
  display: flex;
211
211
  align-items: center;
212
212
  font-size: 14px;
@@ -214,22 +214,22 @@ code.hljs {
214
214
  color: var(--n-text-color);
215
215
  }
216
216
  @media (max-width: 768px) {
217
- .c-code-title[data-v-9e3bbbe0] {
217
+ .c-code-title[data-v-a34bb36b] {
218
218
  font-size: 13px;
219
219
  }
220
220
  }
221
- .c-code-actions[data-v-9e3bbbe0] {
221
+ .c-code-actions[data-v-a34bb36b] {
222
222
  display: flex;
223
223
  gap: 4px;
224
224
  }
225
- .c-code-content[data-v-9e3bbbe0] {
225
+ .c-code-content[data-v-a34bb36b] {
226
226
  position: relative;
227
227
  background: transparent;
228
228
  }
229
- .code-wrapper[data-v-9e3bbbe0] {
229
+ .code-wrapper[data-v-a34bb36b] {
230
230
  position: relative;
231
231
  }
232
- .floating-copy-btn[data-v-9e3bbbe0] {
232
+ .floating-copy-btn[data-v-a34bb36b] {
233
233
  position: absolute;
234
234
  top: 8px;
235
235
  right: 8px;
@@ -238,24 +238,24 @@ code.hljs {
238
238
  pointer-events: none;
239
239
  transition: opacity 0.2s ease;
240
240
  }
241
- .code-wrapper:hover .floating-copy-btn[data-v-9e3bbbe0],
242
- .code-wrapper:focus-within .floating-copy-btn[data-v-9e3bbbe0] {
241
+ .code-wrapper:hover .floating-copy-btn[data-v-a34bb36b],
242
+ .code-wrapper:focus-within .floating-copy-btn[data-v-a34bb36b] {
243
243
  opacity: 1;
244
244
  pointer-events: auto;
245
245
  }
246
246
  @media (hover: none) {
247
- .floating-copy-btn[data-v-9e3bbbe0] {
247
+ .floating-copy-btn[data-v-a34bb36b] {
248
248
  opacity: 1;
249
249
  pointer-events: auto;
250
250
  }
251
251
  }
252
- .copy-floating[data-v-9e3bbbe0] {
252
+ .copy-floating[data-v-a34bb36b] {
253
253
  background: var(--c-code-copy-bg);
254
254
  backdrop-filter: blur(4px);
255
255
  border: 1px solid var(--n-border-color);
256
256
  box-shadow: 0 2px 8px var(--c-code-copy-shadow);
257
257
  }
258
- .c-code-loading[data-v-9e3bbbe0] {
258
+ .c-code-loading[data-v-a34bb36b] {
259
259
  position: absolute;
260
260
  top: 0;
261
261
  left: 0;
@@ -268,14 +268,14 @@ code.hljs {
268
268
  font-size: 12px;
269
269
  color: var(--n-text-color);
270
270
  }
271
- .fullscreen-content[data-v-9e3bbbe0] {
271
+ .fullscreen-content[data-v-a34bb36b] {
272
272
  width: 100%;
273
273
  height: 100%;
274
274
  display: flex;
275
275
  flex-direction: column;
276
276
  background: var(--n-color-modal);
277
277
  }
278
- .fullscreen-header[data-v-9e3bbbe0] {
278
+ .fullscreen-header[data-v-a34bb36b] {
279
279
  display: flex;
280
280
  justify-content: space-between;
281
281
  align-items: center;
@@ -286,38 +286,38 @@ code.hljs {
286
286
  flex-shrink: 0;
287
287
  }
288
288
  @media (max-width: 768px) {
289
- .fullscreen-header[data-v-9e3bbbe0] {
289
+ .fullscreen-header[data-v-a34bb36b] {
290
290
  padding: 12px 16px;
291
291
  font-size: 14px;
292
292
  }
293
293
  }
294
- .fullscreen-title[data-v-9e3bbbe0] {
294
+ .fullscreen-title[data-v-a34bb36b] {
295
295
  display: flex;
296
296
  align-items: center;
297
297
  }
298
- .fullscreen-body[data-v-9e3bbbe0] {
298
+ .fullscreen-body[data-v-a34bb36b] {
299
299
  flex: 1;
300
300
  overflow: auto;
301
301
  background-color: var(--c-code-fullscreen-bg);
302
302
  }
303
- [data-v-9e3bbbe0] .n-code {
303
+ [data-v-a34bb36b] .n-code {
304
304
  background: transparent !important;
305
305
  border: none !important;
306
306
  margin: 0;
307
307
  overflow: auto !important;
308
308
  }
309
- [data-v-9e3bbbe0] .n-code .hljs {
309
+ [data-v-a34bb36b] .n-code .hljs {
310
310
  background: transparent !important;
311
311
  padding: 16px !important;
312
312
  }
313
- .mr-2[data-v-9e3bbbe0] {
313
+ .mr-2[data-v-a34bb36b] {
314
314
  margin-right: 0.5rem;
315
315
  }
316
- .ml-2[data-v-9e3bbbe0] {
316
+ .ml-2[data-v-a34bb36b] {
317
317
  margin-left: 0.5rem;
318
318
  }
319
319
 
320
320
  /* layer: default */
321
- .ml-2[data-v-9e3bbbe0]{margin-left:0.5rem;}
322
- .mr-2[data-v-9e3bbbe0]{margin-right:0.5rem;}
323
- .px[data-v-9e3bbbe0]{padding-left:1rem;padding-right:1rem;}
321
+ .ml-2[data-v-a34bb36b]{margin-left:0.5rem;}
322
+ .mr-2[data-v-a34bb36b]{margin-right:0.5rem;}
323
+ .px[data-v-a34bb36b]{padding-left:1rem;padding-right:1rem;}
package/dist/C_Code2.cjs CHANGED
@@ -1 +1 @@
1
- require(`./chunk.cjs`);const e=require(`./C_Icon2.cjs`),t=require(`./export-helper.cjs`);let n=require(`vue`),r=require(`naive-ui`);const i={class:`c-code-wrapper`},a={key:0,class:`c-code-header`},o={class:`c-code-title`},s={class:`c-code-actions`},c={class:`c-code-content`},l={class:`code-wrapper`},u={key:0,class:`floating-copy-btn`},d={key:0,class:`c-code-loading`},f={class:`ml-2`},p={class:`fullscreen-content`},m={class:`fullscreen-header`},h={class:`fullscreen-title`},g={class:`fullscreen-body`},_=(0,n.defineComponent)({name:`CCode`,__name:`index`,props:{code:{default:``},language:{default:`text`},title:{},showHeader:{type:Boolean,default:!0},showLineNumbers:{type:Boolean,default:!0},wordWrap:{type:Boolean,default:!1},trim:{type:Boolean,default:!0},showFullscreen:{type:Boolean,default:!1},maxHeight:{},autoLoadLanguage:{type:Boolean,default:!0}},emits:[`copy`,`click`,`fullscreen`],setup(t,{expose:_,emit:v}){let y=t,b=v,x=(0,n.inject)(`highlightManager`,null),S=(0,n.ref)(!1),C=(0,n.ref)(!1),w=(0,n.ref)(!1),T=(0,n.computed)(()=>{try{return x?.getHljs?.()||null}catch(e){return console.warn(`Highlight.js not available:`,e),null}}),E=(0,n.computed)(()=>({javascript:`mdi:language-javascript`,typescript:`mdi:language-typescript`,python:`mdi:language-python`,html:`mdi:language-html5`,css:`mdi:language-css3`,vue:`mdi:vuejs`,react:`mdi:react`,json:`mdi:code-json`,java:`mdi:language-java`,cpp:`mdi:language-cpp`,go:`mdi:language-go`,rust:`mdi:language-rust`,php:`mdi:language-php`,csharp:`mdi:language-csharp`,sql:`mdi:database`,yaml:`mdi:file-code`,xml:`mdi:xml`,markdown:`mdi:language-markdown`,bash:`mdi:bash`,shell:`mdi:console`,powershell:`mdi:powershell`,swift:`mdi:language-swift`,kotlin:`mdi:language-kotlin`,ruby:`mdi:language-ruby`})[y.language.toLowerCase()]||`mdi:code-braces`),D=(0,n.computed)(()=>y.maxHeight?{maxHeight:typeof y.maxHeight==`number`?`${y.maxHeight}px`:y.maxHeight}:{});(0,n.watch)(()=>y.language,async e=>{if(!(!y.autoLoadLanguage||e===`text`||!x)&&!(x.getLoadedLanguages?.()||[]).includes(e)){w.value=!0;try{await x.loadLanguage?.(e),await(0,n.nextTick)()}catch(t){console.warn(`Failed to load language: ${e}`,t)}finally{w.value=!1}}},{immediate:!0});async function O(){if(!S.value){S.value=!0;try{await navigator.clipboard.writeText(y.code),b(`copy`,y.code)}catch(e){console.error(`Copy failed:`,e)}finally{S.value=!1}}}function k(){A(!C.value)}function A(e){e!==C.value&&(C.value=e,b(`fullscreen`,e))}function j(e){return{javascript:`JavaScript`,typescript:`TypeScript`,python:`Python`,java:`Java`,cpp:`C++`,csharp:`C#`,php:`PHP`,go:`Go`,rust:`Rust`,html:`HTML`,css:`CSS`,json:`JSON`,bash:`Bash`,shell:`Shell`,yaml:`YAML`,xml:`XML`,markdown:`Markdown`,sql:`SQL`,powershell:`PowerShell`,swift:`Swift`,kotlin:`Kotlin`,ruby:`Ruby`,vue:`Vue`,react:`React`}[e.toLowerCase()]||e.toUpperCase()}return _({copyCode:O,toggleFullscreen:k}),(_,v)=>{let y=r.NButton,x=r.NTooltip,M=r.NCode,N=r.NSpin,P=r.NModal;return(0,n.openBlock)(),(0,n.createElementBlock)(`div`,i,[(0,n.createCommentVNode)(` 代码标题栏 `),t.showHeader?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,a,[(0,n.createElementVNode)(`div`,o,[E.value?((0,n.openBlock)(),(0,n.createBlock)(e.t,{key:0,name:E.value,size:16,class:`mr-2`},null,8,[`name`])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(t.title||j(t.language)),1)]),(0,n.createElementVNode)(`div`,s,[(0,n.createVNode)(x,{trigger:`hover`},{trigger:(0,n.withCtx)(()=>[(0,n.createVNode)(y,{size:`tiny`,quaternary:``,"aria-label":`复制代码`,onClick:O,loading:S.value},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:S.value?`mdi:loading`:`mdi:content-copy`,loading:S.value},null,8,[`name`,`loading`])]),_:1},8,[`loading`])]),default:(0,n.withCtx)(()=>[v[1]||=(0,n.createTextVNode)(` 复制代码 `,-1)]),_:1}),t.showFullscreen?((0,n.openBlock)(),(0,n.createBlock)(x,{key:0,trigger:`hover`},{trigger:(0,n.withCtx)(()=>[(0,n.createVNode)(y,{size:`tiny`,quaternary:``,"aria-label":C.value?`退出全屏`:`全屏查看`,onClick:k},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:C.value?`mdi:fullscreen-exit`:`mdi:fullscreen`},null,8,[`name`])]),_:1},8,[`aria-label`])]),default:(0,n.withCtx)(()=>[(0,n.createTextVNode)(` `+(0,n.toDisplayString)(C.value?`退出全屏`:`全屏查看`),1)]),_:1})):(0,n.createCommentVNode)(`v-if`,!0)])])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 代码内容区域 `),(0,n.createElementVNode)(`div`,c,[(0,n.createElementVNode)(`div`,l,[(0,n.createVNode)(M,{code:t.code,language:t.language,hljs:T.value,"show-line-numbers":t.showLineNumbers,"word-wrap":t.wordWrap,trim:t.trim,style:(0,n.normalizeStyle)(D.value),onClick:v[0]||=e=>b(`click`,e)},null,8,[`code`,`language`,`hljs`,`show-line-numbers`,`word-wrap`,`trim`,`style`]),(0,n.createCommentVNode)(` 悬浮复制按钮 `),t.showHeader?(0,n.createCommentVNode)(`v-if`,!0):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,u,[(0,n.createVNode)(x,{trigger:`hover`},{trigger:(0,n.withCtx)(()=>[(0,n.createVNode)(y,{size:`small`,quaternary:``,"aria-label":`复制代码`,onClick:O,loading:S.value,class:`copy-floating`},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:S.value?`mdi:loading`:`mdi:content-copy`,loading:S.value},null,8,[`name`,`loading`])]),_:1},8,[`loading`])]),default:(0,n.withCtx)(()=>[v[2]||=(0,n.createTextVNode)(` 复制代码 `,-1)]),_:1})]))]),(0,n.createCommentVNode)(` 语言加载状态 `),w.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,d,[(0,n.createVNode)(N,{size:`small`}),(0,n.createElementVNode)(`span`,f,`正在加载 `+(0,n.toDisplayString)(t.language)+` 语言包...`,1)])):(0,n.createCommentVNode)(`v-if`,!0)]),(0,n.createCommentVNode)(` 全屏模态框 `),(0,n.createVNode)(P,{show:C.value,"onUpdate:show":A,"mask-closable":!1,"show-icon":!1,bordered:!1,style:{width:`100vw`,height:`100vh`,margin:`0`,padding:`0`}},{default:(0,n.withCtx)(()=>[(0,n.createElementVNode)(`div`,p,[(0,n.createElementVNode)(`div`,m,[(0,n.createElementVNode)(`div`,h,[E.value?((0,n.openBlock)(),(0,n.createBlock)(e.t,{key:0,name:E.value,size:16,class:`mr-2`},null,8,[`name`])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(t.title||j(t.language)),1)]),(0,n.createVNode)(y,{size:`small`,quaternary:``,"aria-label":`退出全屏`,onClick:k},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:close`})]),_:1})]),(0,n.createElementVNode)(`div`,g,[(0,n.createVNode)(M,{code:t.code,language:t.language,hljs:T.value,"show-line-numbers":t.showLineNumbers,"word-wrap":t.wordWrap,trim:t.trim},null,8,[`code`,`language`,`hljs`,`show-line-numbers`,`word-wrap`,`trim`])])])]),_:1},8,[`show`])])}}});var v=t.t(_,[[`__scopeId`,`data-v-9e3bbbe0`]]);Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return v}});
1
+ require(`./chunk.cjs`);const e=require(`./C_Icon2.cjs`),t=require(`./export-helper.cjs`);let n=require(`vue`),r=require(`naive-ui`);const i={class:`c-code-wrapper`},a={key:0,class:`c-code-header`},o={class:`c-code-title`},s={class:`c-code-actions`},c={class:`c-code-content`},l={class:`code-wrapper`},u={key:0,class:`floating-copy-btn`},d={key:0,class:`c-code-loading`},f={class:`ml-2`},p={class:`fullscreen-content`},m={class:`fullscreen-header`},h={class:`fullscreen-title`},g={class:`fullscreen-body`},_=(0,n.defineComponent)({name:`CCode`,__name:`index`,props:{code:{default:``},language:{default:`text`},title:{},showHeader:{type:Boolean,default:!0},showLineNumbers:{type:Boolean,default:!0},wordWrap:{type:Boolean,default:!1},trim:{type:Boolean,default:!0},showFullscreen:{type:Boolean,default:!1},maxHeight:{},autoLoadLanguage:{type:Boolean,default:!0}},emits:[`copy`,`click`,`fullscreen`],setup(t,{expose:_,emit:v}){let y=t,b=v,x=(0,n.inject)(`highlightManager`,null),S=(0,n.ref)(!1),C=(0,n.ref)(!1),w=(0,n.ref)(!1),T=!1,E=(0,n.shallowRef)();function D(){try{let e=x?.getHljs?.();E.value=e?{highlight:e.highlight.bind(e),getLanguage:e.getLanguage.bind(e)}:void 0}catch(e){console.warn(`Highlight.js not available:`,e),E.value=void 0}}D();let O=(0,n.computed)(()=>({javascript:`mdi:language-javascript`,typescript:`mdi:language-typescript`,python:`mdi:language-python`,html:`mdi:language-html5`,css:`mdi:language-css3`,vue:`mdi:vuejs`,react:`mdi:react`,json:`mdi:code-json`,java:`mdi:language-java`,cpp:`mdi:language-cpp`,go:`mdi:language-go`,rust:`mdi:language-rust`,php:`mdi:language-php`,csharp:`mdi:language-csharp`,sql:`mdi:database`,yaml:`mdi:file-code`,xml:`mdi:xml`,markdown:`mdi:language-markdown`,bash:`mdi:bash`,shell:`mdi:console`,powershell:`mdi:powershell`,swift:`mdi:language-swift`,kotlin:`mdi:language-kotlin`,ruby:`mdi:language-ruby`})[y.language.toLowerCase()]||`mdi:code-braces`),k=(0,n.computed)(()=>y.maxHeight?{maxHeight:typeof y.maxHeight==`number`?`${y.maxHeight}px`:y.maxHeight}:{});function A(e,t){if(!t||e.toLowerCase()===`text`)return;let n=x;if(n?.loadLanguage)return{load:n.loadLanguage.bind(n),loaded:n.getLoadedLanguages?.bind(n)}}(0,n.watch)([()=>y.language,()=>y.autoLoadLanguage],async([e,t],n,r)=>{let i=!0,a=()=>i&&!T;r(()=>{i=!1}),w.value=!1;let o=A(e,t);if(o)try{if((o.loaded?.()??[]).includes(e.toLowerCase())){D();return}w.value=!0,await o.load(e),a()&&D()}catch(t){a()&&console.warn(`Failed to load language: ${e}`,t)}finally{a()&&(w.value=!1)}},{immediate:!0});async function j(){if(S.value||T)return;let{code:e}=y;S.value=!0;try{await navigator.clipboard.writeText(e),T||b(`copy`,e)}catch(e){T||console.error(`Copy failed:`,e)}finally{T||(S.value=!1)}}(0,n.onBeforeUnmount)(()=>{T=!0,S.value=!1,w.value=!1});function M(){N(!C.value)}function N(e){e!==C.value&&(C.value=e,b(`fullscreen`,e))}function P(e){return{javascript:`JavaScript`,typescript:`TypeScript`,python:`Python`,java:`Java`,cpp:`C++`,csharp:`C#`,php:`PHP`,go:`Go`,rust:`Rust`,html:`HTML`,css:`CSS`,json:`JSON`,bash:`Bash`,shell:`Shell`,yaml:`YAML`,xml:`XML`,markdown:`Markdown`,sql:`SQL`,powershell:`PowerShell`,swift:`Swift`,kotlin:`Kotlin`,ruby:`Ruby`,vue:`Vue`,react:`React`}[e.toLowerCase()]||e.toUpperCase()}return _({copyCode:j,toggleFullscreen:M}),(_,v)=>{let y=r.NButton,x=r.NTooltip,T=r.NCode,D=r.NSpin,A=r.NModal;return(0,n.openBlock)(),(0,n.createElementBlock)(`div`,i,[(0,n.createCommentVNode)(` 代码标题栏 `),t.showHeader?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,a,[(0,n.createElementVNode)(`div`,o,[O.value?((0,n.openBlock)(),(0,n.createBlock)(e.t,{key:0,name:O.value,size:16,class:`mr-2`},null,8,[`name`])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(t.title||P(t.language)),1)]),(0,n.createElementVNode)(`div`,s,[(0,n.createVNode)(x,{trigger:`hover`},{trigger:(0,n.withCtx)(()=>[(0,n.createVNode)(y,{size:`tiny`,quaternary:``,"aria-label":`复制代码`,onClick:j,loading:S.value},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:S.value?`mdi:loading`:`mdi:content-copy`,loading:S.value},null,8,[`name`,`loading`])]),_:1},8,[`loading`])]),default:(0,n.withCtx)(()=>[v[1]||=(0,n.createTextVNode)(` 复制代码 `,-1)]),_:1}),t.showFullscreen?((0,n.openBlock)(),(0,n.createBlock)(x,{key:0,trigger:`hover`},{trigger:(0,n.withCtx)(()=>[(0,n.createVNode)(y,{size:`tiny`,quaternary:``,"aria-label":C.value?`退出全屏`:`全屏查看`,onClick:M},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:C.value?`mdi:fullscreen-exit`:`mdi:fullscreen`},null,8,[`name`])]),_:1},8,[`aria-label`])]),default:(0,n.withCtx)(()=>[(0,n.createTextVNode)(` `+(0,n.toDisplayString)(C.value?`退出全屏`:`全屏查看`),1)]),_:1})):(0,n.createCommentVNode)(`v-if`,!0)])])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 代码内容区域 `),(0,n.createElementVNode)(`div`,c,[(0,n.createElementVNode)(`div`,l,[(0,n.createVNode)(T,{code:t.code,language:t.language,hljs:E.value,"show-line-numbers":t.showLineNumbers,"word-wrap":t.wordWrap,trim:t.trim,style:(0,n.normalizeStyle)(k.value),onClick:v[0]||=e=>b(`click`,e)},null,8,[`code`,`language`,`hljs`,`show-line-numbers`,`word-wrap`,`trim`,`style`]),(0,n.createCommentVNode)(` 悬浮复制按钮 `),t.showHeader?(0,n.createCommentVNode)(`v-if`,!0):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,u,[(0,n.createVNode)(x,{trigger:`hover`},{trigger:(0,n.withCtx)(()=>[(0,n.createVNode)(y,{size:`small`,quaternary:``,"aria-label":`复制代码`,onClick:j,loading:S.value,class:`copy-floating`},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:S.value?`mdi:loading`:`mdi:content-copy`,loading:S.value},null,8,[`name`,`loading`])]),_:1},8,[`loading`])]),default:(0,n.withCtx)(()=>[v[2]||=(0,n.createTextVNode)(` 复制代码 `,-1)]),_:1})]))]),(0,n.createCommentVNode)(` 语言加载状态 `),w.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,d,[(0,n.createVNode)(D,{size:`small`}),(0,n.createElementVNode)(`span`,f,`正在加载 `+(0,n.toDisplayString)(t.language)+` 语言包...`,1)])):(0,n.createCommentVNode)(`v-if`,!0)]),(0,n.createCommentVNode)(` 全屏模态框 `),(0,n.createVNode)(A,{show:C.value,"onUpdate:show":N,"mask-closable":!1,"show-icon":!1,bordered:!1,style:{width:`100vw`,height:`100vh`,margin:`0`,padding:`0`}},{default:(0,n.withCtx)(()=>[(0,n.createElementVNode)(`div`,p,[(0,n.createElementVNode)(`div`,m,[(0,n.createElementVNode)(`div`,h,[O.value?((0,n.openBlock)(),(0,n.createBlock)(e.t,{key:0,name:O.value,size:16,class:`mr-2`},null,8,[`name`])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(t.title||P(t.language)),1)]),(0,n.createVNode)(y,{size:`small`,quaternary:``,"aria-label":`退出全屏`,onClick:M},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:`mdi:close`})]),_:1})]),(0,n.createElementVNode)(`div`,g,[(0,n.createVNode)(T,{code:t.code,language:t.language,hljs:E.value,"show-line-numbers":t.showLineNumbers,"word-wrap":t.wordWrap,trim:t.trim},null,8,[`code`,`language`,`hljs`,`show-line-numbers`,`word-wrap`,`trim`])])])]),_:1},8,[`show`])])}}});var v=t.t(_,[[`__scopeId`,`data-v-a34bb36b`]]);Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return v}});
package/dist/C_Code2.js CHANGED
@@ -1 +1 @@
1
- import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{computed as n,createBlock as r,createCommentVNode as i,createElementBlock as a,createElementVNode as o,createTextVNode as s,createVNode as c,defineComponent as l,inject as u,nextTick as d,normalizeStyle as f,openBlock as p,ref as m,resolveComponent as h,toDisplayString as g,watch as _,withCtx as v}from"vue";import{NButton as y,NCode as b,NModal as x,NSpin as S,NTooltip as C}from"naive-ui";const w={class:`c-code-wrapper`},T={key:0,class:`c-code-header`},E={class:`c-code-title`},D={class:`c-code-actions`},O={class:`c-code-content`},k={class:`code-wrapper`},A={key:0,class:`floating-copy-btn`},j={key:0,class:`c-code-loading`},M={class:`ml-2`},N={class:`fullscreen-content`},P={class:`fullscreen-header`},F={class:`fullscreen-title`},I={class:`fullscreen-body`};var L=t(l({name:`CCode`,__name:`index`,props:{code:{default:``},language:{default:`text`},title:{},showHeader:{type:Boolean,default:!0},showLineNumbers:{type:Boolean,default:!0},wordWrap:{type:Boolean,default:!1},trim:{type:Boolean,default:!0},showFullscreen:{type:Boolean,default:!1},maxHeight:{},autoLoadLanguage:{type:Boolean,default:!0}},emits:[`copy`,`click`,`fullscreen`],setup(t,{expose:l,emit:h}){let L=t,R=h,z=u(`highlightManager`,null),B=m(!1),V=m(!1),H=m(!1),U=n(()=>{try{return z?.getHljs?.()||null}catch(e){return console.warn(`Highlight.js not available:`,e),null}}),W=n(()=>({javascript:`mdi:language-javascript`,typescript:`mdi:language-typescript`,python:`mdi:language-python`,html:`mdi:language-html5`,css:`mdi:language-css3`,vue:`mdi:vuejs`,react:`mdi:react`,json:`mdi:code-json`,java:`mdi:language-java`,cpp:`mdi:language-cpp`,go:`mdi:language-go`,rust:`mdi:language-rust`,php:`mdi:language-php`,csharp:`mdi:language-csharp`,sql:`mdi:database`,yaml:`mdi:file-code`,xml:`mdi:xml`,markdown:`mdi:language-markdown`,bash:`mdi:bash`,shell:`mdi:console`,powershell:`mdi:powershell`,swift:`mdi:language-swift`,kotlin:`mdi:language-kotlin`,ruby:`mdi:language-ruby`})[L.language.toLowerCase()]||`mdi:code-braces`),G=n(()=>L.maxHeight?{maxHeight:typeof L.maxHeight==`number`?`${L.maxHeight}px`:L.maxHeight}:{});_(()=>L.language,async e=>{if(!(!L.autoLoadLanguage||e===`text`||!z)&&!(z.getLoadedLanguages?.()||[]).includes(e)){H.value=!0;try{await z.loadLanguage?.(e),await d()}catch(t){console.warn(`Failed to load language: ${e}`,t)}finally{H.value=!1}}},{immediate:!0});async function K(){if(!B.value){B.value=!0;try{await navigator.clipboard.writeText(L.code),R(`copy`,L.code)}catch(e){console.error(`Copy failed:`,e)}finally{B.value=!1}}}function q(){J(!V.value)}function J(e){e!==V.value&&(V.value=e,R(`fullscreen`,e))}function Y(e){return{javascript:`JavaScript`,typescript:`TypeScript`,python:`Python`,java:`Java`,cpp:`C++`,csharp:`C#`,php:`PHP`,go:`Go`,rust:`Rust`,html:`HTML`,css:`CSS`,json:`JSON`,bash:`Bash`,shell:`Shell`,yaml:`YAML`,xml:`XML`,markdown:`Markdown`,sql:`SQL`,powershell:`PowerShell`,swift:`Swift`,kotlin:`Kotlin`,ruby:`Ruby`,vue:`Vue`,react:`React`}[e.toLowerCase()]||e.toUpperCase()}return l({copyCode:K,toggleFullscreen:q}),(n,l)=>{let u=y,d=C,m=b,h=S,_=x;return p(),a(`div`,w,[i(` 代码标题栏 `),t.showHeader?(p(),a(`div`,T,[o(`div`,E,[W.value?(p(),r(e,{key:0,name:W.value,size:16,class:`mr-2`},null,8,[`name`])):i(`v-if`,!0),o(`span`,null,g(t.title||Y(t.language)),1)]),o(`div`,D,[c(d,{trigger:`hover`},{trigger:v(()=>[c(u,{size:`tiny`,quaternary:``,"aria-label":`复制代码`,onClick:K,loading:B.value},{icon:v(()=>[c(e,{name:B.value?`mdi:loading`:`mdi:content-copy`,loading:B.value},null,8,[`name`,`loading`])]),_:1},8,[`loading`])]),default:v(()=>[l[1]||=s(` 复制代码 `,-1)]),_:1}),t.showFullscreen?(p(),r(d,{key:0,trigger:`hover`},{trigger:v(()=>[c(u,{size:`tiny`,quaternary:``,"aria-label":V.value?`退出全屏`:`全屏查看`,onClick:q},{icon:v(()=>[c(e,{name:V.value?`mdi:fullscreen-exit`:`mdi:fullscreen`},null,8,[`name`])]),_:1},8,[`aria-label`])]),default:v(()=>[s(` `+g(V.value?`退出全屏`:`全屏查看`),1)]),_:1})):i(`v-if`,!0)])])):i(`v-if`,!0),i(` 代码内容区域 `),o(`div`,O,[o(`div`,k,[c(m,{code:t.code,language:t.language,hljs:U.value,"show-line-numbers":t.showLineNumbers,"word-wrap":t.wordWrap,trim:t.trim,style:f(G.value),onClick:l[0]||=e=>R(`click`,e)},null,8,[`code`,`language`,`hljs`,`show-line-numbers`,`word-wrap`,`trim`,`style`]),i(` 悬浮复制按钮 `),t.showHeader?i(`v-if`,!0):(p(),a(`div`,A,[c(d,{trigger:`hover`},{trigger:v(()=>[c(u,{size:`small`,quaternary:``,"aria-label":`复制代码`,onClick:K,loading:B.value,class:`copy-floating`},{icon:v(()=>[c(e,{name:B.value?`mdi:loading`:`mdi:content-copy`,loading:B.value},null,8,[`name`,`loading`])]),_:1},8,[`loading`])]),default:v(()=>[l[2]||=s(` 复制代码 `,-1)]),_:1})]))]),i(` 语言加载状态 `),H.value?(p(),a(`div`,j,[c(h,{size:`small`}),o(`span`,M,`正在加载 `+g(t.language)+` 语言包...`,1)])):i(`v-if`,!0)]),i(` 全屏模态框 `),c(_,{show:V.value,"onUpdate:show":J,"mask-closable":!1,"show-icon":!1,bordered:!1,style:{width:`100vw`,height:`100vh`,margin:`0`,padding:`0`}},{default:v(()=>[o(`div`,N,[o(`div`,P,[o(`div`,F,[W.value?(p(),r(e,{key:0,name:W.value,size:16,class:`mr-2`},null,8,[`name`])):i(`v-if`,!0),o(`span`,null,g(t.title||Y(t.language)),1)]),c(u,{size:`small`,quaternary:``,"aria-label":`退出全屏`,onClick:q},{icon:v(()=>[c(e,{name:`mdi:close`})]),_:1})]),o(`div`,I,[c(m,{code:t.code,language:t.language,hljs:U.value,"show-line-numbers":t.showLineNumbers,"word-wrap":t.wordWrap,trim:t.trim},null,8,[`code`,`language`,`hljs`,`show-line-numbers`,`word-wrap`,`trim`])])])]),_:1},8,[`show`])])}}}),[[`__scopeId`,`data-v-9e3bbbe0`]]);export{L as t};
1
+ import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{computed as n,createBlock as r,createCommentVNode as i,createElementBlock as a,createElementVNode as o,createTextVNode as s,createVNode as c,defineComponent as l,inject as u,normalizeStyle as d,onBeforeUnmount as f,openBlock as p,ref as m,resolveComponent as h,shallowRef as g,toDisplayString as _,watch as v,withCtx as y}from"vue";import{NButton as b,NCode as x,NModal as S,NSpin as C,NTooltip as w}from"naive-ui";const T={class:`c-code-wrapper`},E={key:0,class:`c-code-header`},D={class:`c-code-title`},O={class:`c-code-actions`},k={class:`c-code-content`},A={class:`code-wrapper`},j={key:0,class:`floating-copy-btn`},M={key:0,class:`c-code-loading`},N={class:`ml-2`},P={class:`fullscreen-content`},F={class:`fullscreen-header`},I={class:`fullscreen-title`},L={class:`fullscreen-body`};var R=t(l({name:`CCode`,__name:`index`,props:{code:{default:``},language:{default:`text`},title:{},showHeader:{type:Boolean,default:!0},showLineNumbers:{type:Boolean,default:!0},wordWrap:{type:Boolean,default:!1},trim:{type:Boolean,default:!0},showFullscreen:{type:Boolean,default:!1},maxHeight:{},autoLoadLanguage:{type:Boolean,default:!0}},emits:[`copy`,`click`,`fullscreen`],setup(t,{expose:l,emit:h}){let R=t,z=h,B=u(`highlightManager`,null),V=m(!1),H=m(!1),U=m(!1),W=!1,G=g();function K(){try{let e=B?.getHljs?.();G.value=e?{highlight:e.highlight.bind(e),getLanguage:e.getLanguage.bind(e)}:void 0}catch(e){console.warn(`Highlight.js not available:`,e),G.value=void 0}}K();let q=n(()=>({javascript:`mdi:language-javascript`,typescript:`mdi:language-typescript`,python:`mdi:language-python`,html:`mdi:language-html5`,css:`mdi:language-css3`,vue:`mdi:vuejs`,react:`mdi:react`,json:`mdi:code-json`,java:`mdi:language-java`,cpp:`mdi:language-cpp`,go:`mdi:language-go`,rust:`mdi:language-rust`,php:`mdi:language-php`,csharp:`mdi:language-csharp`,sql:`mdi:database`,yaml:`mdi:file-code`,xml:`mdi:xml`,markdown:`mdi:language-markdown`,bash:`mdi:bash`,shell:`mdi:console`,powershell:`mdi:powershell`,swift:`mdi:language-swift`,kotlin:`mdi:language-kotlin`,ruby:`mdi:language-ruby`})[R.language.toLowerCase()]||`mdi:code-braces`),J=n(()=>R.maxHeight?{maxHeight:typeof R.maxHeight==`number`?`${R.maxHeight}px`:R.maxHeight}:{});function Y(e,t){if(!t||e.toLowerCase()===`text`)return;let n=B;if(n?.loadLanguage)return{load:n.loadLanguage.bind(n),loaded:n.getLoadedLanguages?.bind(n)}}v([()=>R.language,()=>R.autoLoadLanguage],async([e,t],n,r)=>{let i=!0,a=()=>i&&!W;r(()=>{i=!1}),U.value=!1;let o=Y(e,t);if(o)try{if((o.loaded?.()??[]).includes(e.toLowerCase())){K();return}U.value=!0,await o.load(e),a()&&K()}catch(t){a()&&console.warn(`Failed to load language: ${e}`,t)}finally{a()&&(U.value=!1)}},{immediate:!0});async function X(){if(V.value||W)return;let{code:e}=R;V.value=!0;try{await navigator.clipboard.writeText(e),W||z(`copy`,e)}catch(e){W||console.error(`Copy failed:`,e)}finally{W||(V.value=!1)}}f(()=>{W=!0,V.value=!1,U.value=!1});function Z(){Q(!H.value)}function Q(e){e!==H.value&&(H.value=e,z(`fullscreen`,e))}function $(e){return{javascript:`JavaScript`,typescript:`TypeScript`,python:`Python`,java:`Java`,cpp:`C++`,csharp:`C#`,php:`PHP`,go:`Go`,rust:`Rust`,html:`HTML`,css:`CSS`,json:`JSON`,bash:`Bash`,shell:`Shell`,yaml:`YAML`,xml:`XML`,markdown:`Markdown`,sql:`SQL`,powershell:`PowerShell`,swift:`Swift`,kotlin:`Kotlin`,ruby:`Ruby`,vue:`Vue`,react:`React`}[e.toLowerCase()]||e.toUpperCase()}return l({copyCode:X,toggleFullscreen:Z}),(n,l)=>{let u=b,f=w,m=x,h=C,g=S;return p(),a(`div`,T,[i(` 代码标题栏 `),t.showHeader?(p(),a(`div`,E,[o(`div`,D,[q.value?(p(),r(e,{key:0,name:q.value,size:16,class:`mr-2`},null,8,[`name`])):i(`v-if`,!0),o(`span`,null,_(t.title||$(t.language)),1)]),o(`div`,O,[c(f,{trigger:`hover`},{trigger:y(()=>[c(u,{size:`tiny`,quaternary:``,"aria-label":`复制代码`,onClick:X,loading:V.value},{icon:y(()=>[c(e,{name:V.value?`mdi:loading`:`mdi:content-copy`,loading:V.value},null,8,[`name`,`loading`])]),_:1},8,[`loading`])]),default:y(()=>[l[1]||=s(` 复制代码 `,-1)]),_:1}),t.showFullscreen?(p(),r(f,{key:0,trigger:`hover`},{trigger:y(()=>[c(u,{size:`tiny`,quaternary:``,"aria-label":H.value?`退出全屏`:`全屏查看`,onClick:Z},{icon:y(()=>[c(e,{name:H.value?`mdi:fullscreen-exit`:`mdi:fullscreen`},null,8,[`name`])]),_:1},8,[`aria-label`])]),default:y(()=>[s(` `+_(H.value?`退出全屏`:`全屏查看`),1)]),_:1})):i(`v-if`,!0)])])):i(`v-if`,!0),i(` 代码内容区域 `),o(`div`,k,[o(`div`,A,[c(m,{code:t.code,language:t.language,hljs:G.value,"show-line-numbers":t.showLineNumbers,"word-wrap":t.wordWrap,trim:t.trim,style:d(J.value),onClick:l[0]||=e=>z(`click`,e)},null,8,[`code`,`language`,`hljs`,`show-line-numbers`,`word-wrap`,`trim`,`style`]),i(` 悬浮复制按钮 `),t.showHeader?i(`v-if`,!0):(p(),a(`div`,j,[c(f,{trigger:`hover`},{trigger:y(()=>[c(u,{size:`small`,quaternary:``,"aria-label":`复制代码`,onClick:X,loading:V.value,class:`copy-floating`},{icon:y(()=>[c(e,{name:V.value?`mdi:loading`:`mdi:content-copy`,loading:V.value},null,8,[`name`,`loading`])]),_:1},8,[`loading`])]),default:y(()=>[l[2]||=s(` 复制代码 `,-1)]),_:1})]))]),i(` 语言加载状态 `),U.value?(p(),a(`div`,M,[c(h,{size:`small`}),o(`span`,N,`正在加载 `+_(t.language)+` 语言包...`,1)])):i(`v-if`,!0)]),i(` 全屏模态框 `),c(g,{show:H.value,"onUpdate:show":Q,"mask-closable":!1,"show-icon":!1,bordered:!1,style:{width:`100vw`,height:`100vh`,margin:`0`,padding:`0`}},{default:y(()=>[o(`div`,P,[o(`div`,F,[o(`div`,I,[q.value?(p(),r(e,{key:0,name:q.value,size:16,class:`mr-2`},null,8,[`name`])):i(`v-if`,!0),o(`span`,null,_(t.title||$(t.language)),1)]),c(u,{size:`small`,quaternary:``,"aria-label":`退出全屏`,onClick:Z},{icon:y(()=>[c(e,{name:`mdi:close`})]),_:1})]),o(`div`,L,[c(m,{code:t.code,language:t.language,hljs:G.value,"show-line-numbers":t.showLineNumbers,"word-wrap":t.wordWrap,trim:t.trim},null,8,[`code`,`language`,`hljs`,`show-line-numbers`,`word-wrap`,`trim`])])])]),_:1},8,[`show`])])}}}),[[`__scopeId`,`data-v-a34bb36b`]]);export{R as t};
@@ -1 +1 @@
1
- require(`./chunk.cjs`);const e=require(`./export-helper.cjs`);let t=require(`vue`),n=require(`vue-draggable-plus`);function r(e,n){let r=(0,t.ref)(!1),i=(0,t.computed)({get:()=>e.modelValue??[],set:e=>{n(`update:modelValue`,e),n(`list-change`,e)}});return{isDragging:r,internalList:i,isEmpty:(0,t.computed)(()=>(e.modelValue??[]).length===0),listClasses:(0,t.computed)(()=>[`c-draggable-list`,e.listClass,`layout-${e.layout}`,{"flex-wrap":e.flexWrap&&(e.layout===`horizontal`||e.layout===`flex-wrap`)}]),listStyles:(0,t.computed)(()=>{let t={"--gap":typeof e.gap==`number`?`${e.gap}px`:e.gap??`8px`,"--grid-columns":e.gridColumns??4,"--justify-content":e.justifyContent??`flex-start`,"--align-items":e.alignItems??`stretch`,...e.customStyles};return e.gridRows&&(t[`--grid-rows`]=e.gridRows),t}),draggableOptions:(0,t.computed)(()=>{let t={disabled:e.disabled,group:e.group,sort:e.sort,animation:e.animation,delay:e.delay,ghostClass:e.ghostClass,chosenClass:e.chosenClass,dragClass:e.dragClass,swapThreshold:e.swapThreshold,invertSwap:e.invertSwap,direction:e.direction,forceFallback:!1};return e.handle?t.handle=e.handle:e.showHandle&&(t.handle=`.drag-handle`),t}),getItemKey:(t,n)=>e.itemKey?e.itemKey(t,n):t.id??n,getItemTitle:t=>e.itemTitle?e.itemTitle(t):t.title||t.name||t.label||String(t.id)||`未命名项目`,getItemDescription:t=>e.itemDescription?e.itemDescription(t):t.description||``,getItemClass:()=>[`c-draggable-item`,e.itemClass,{"is-disabled":e.disabled}],handleStart:e=>{r.value=!0;let t=i.value[e.oldIndex];t&&n(`drag-start`,{oldIndex:e.oldIndex,newIndex:e.oldIndex,item:t})},handleEnd:e=>{let a=i.value[e.newIndex];a&&n(`drag-end`,{oldIndex:e.oldIndex,newIndex:e.newIndex,item:a}),(0,t.nextTick)(()=>{r.value=!1})},handleAdd:e=>{let t=i.value[e.newIndex];t&&n(`item-add`,t,e.newIndex)},handleRemove:e=>{e.item&&n(`item-remove`,e.item,e.oldIndex)},handleUpdate:()=>{},addItem:(e,t)=>{let n=[...i.value];typeof t==`number`&&t>=0&&t<=n.length?n.splice(t,0,e):n.push(e),i.value=n},removeItem:e=>{if(e>=0&&e<i.value.length){let t=[...i.value],[n]=t.splice(e,1);return i.value=t,n}return null},moveItem:(e,t)=>{let n=i.value;if(e>=0&&e<n.length&&t>=0&&t<n.length&&e!==t){let r=[...n],[a]=r.splice(e,1);return r.splice(t,0,a),i.value=r,!0}return!1},updateList:e=>{i.value=[...e]},clear:()=>{i.value=[]},getItem:e=>i.value[e],findIndex:e=>i.value.findIndex(e)}}const i=[`data-index`],a={class:`default-item`},o={key:0,class:`drag-handle`},s={class:`item-content`},c={class:`item-title`},l={key:0,class:`item-description`},u={key:0,class:`empty-state`},d={class:`default-empty`},f={class:`empty-text`},p=(0,t.defineComponent)({name:`C_Draggable`,__name:`index`,props:{modelValue:{default:()=>[]},disabled:{type:Boolean,default:!1},group:{default:`default`},sort:{type:Boolean,default:!0},animation:{default:200},delay:{default:0},handle:{default:``},showHandle:{type:Boolean,default:!1},ghostClass:{default:`c-draggable-ghost`},chosenClass:{default:`c-draggable-chosen`},dragClass:{default:`c-draggable-drag`},wrapperClass:{default:``},listClass:{default:``},itemClass:{default:``},showEmptyState:{type:Boolean,default:!0},emptyText:{default:`暂无数据`},itemKey:{},itemTitle:{},itemDescription:{},swapThreshold:{default:1},invertSwap:{type:Boolean,default:!1},direction:{default:`vertical`},layout:{default:`vertical`},gridColumns:{default:4},gridRows:{default:void 0},gap:{default:`8px`},flexWrap:{type:Boolean,default:!1},justifyContent:{default:`flex-start`},alignItems:{default:`stretch`},customStyles:{default:()=>({})}},emits:[`update:modelValue`,`drag-start`,`drag-end`,`item-add`,`item-remove`,`list-change`],setup(e,{expose:p,emit:m}){let{isDragging:h,internalList:g,isEmpty:_,listClasses:v,listStyles:y,draggableOptions:b,getItemKey:x,getItemTitle:S,getItemDescription:C,getItemClass:w,handleStart:T,handleEnd:E,handleAdd:D,handleRemove:O,handleUpdate:k,addItem:A,removeItem:j,moveItem:M,updateList:N,clear:P,getItem:F,findIndex:I}=r(e,m);return p({isDragging:(0,t.readonly)(h),list:(0,t.readonly)(g),isEmpty:(0,t.readonly)(_),addItem:A,removeItem:j,moveItem:M,updateList:N,clear:P,getItem:F,findIndex:I}),(r,p)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{class:(0,t.normalizeClass)([`c-draggable-wrapper`,e.wrapperClass])},[(0,t.createVNode)((0,t.unref)(n.VueDraggable),(0,t.mergeProps)({modelValue:(0,t.unref)(g),"onUpdate:modelValue":p[0]||=e=>(0,t.isRef)(g)?g.value=e:null},(0,t.unref)(b),{class:(0,t.unref)(v),style:(0,t.unref)(y),onStart:(0,t.unref)(T),onEnd:(0,t.unref)(E),onAdd:(0,t.unref)(D),onRemove:(0,t.unref)(O),onUpdate:(0,t.unref)(k)}),{default:(0,t.withCtx)(()=>[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)((0,t.unref)(g),(n,u)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:(0,t.unref)(x)(n,u),class:(0,t.normalizeClass)((0,t.unref)(w)()),"data-index":u},[(0,t.renderSlot)(r.$slots,`default`,{item:n,index:u,isDragging:(0,t.unref)(h),isDisabled:e.disabled},()=>[(0,t.createElementVNode)(`div`,a,[e.showHandle?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,o,[...p[1]||=[(0,t.createElementVNode)(`div`,{class:`i-mdi:drag-vertical`},null,-1)]])):(0,t.createCommentVNode)(`v-if`,!0),(0,t.createElementVNode)(`div`,s,[(0,t.createElementVNode)(`div`,c,(0,t.toDisplayString)((0,t.unref)(S)(n)),1),(0,t.unref)(C)(n)?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,l,(0,t.toDisplayString)((0,t.unref)(C)(n)),1)):(0,t.createCommentVNode)(`v-if`,!0)])])],!0)],10,i))),128))]),_:3},16,[`modelValue`,`class`,`style`,`onStart`,`onEnd`,`onAdd`,`onRemove`,`onUpdate`]),(0,t.unref)(_)&&e.showEmptyState?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,u,[(0,t.renderSlot)(r.$slots,`empty`,{},()=>[(0,t.createElementVNode)(`div`,d,[p[2]||=(0,t.createElementVNode)(`div`,{class:`empty-icon i-mdi:inbox-outline`},null,-1),(0,t.createElementVNode)(`p`,f,(0,t.toDisplayString)(e.emptyText),1)])],!0)])):(0,t.createCommentVNode)(`v-if`,!0)],2))}});var m=e.t(p,[[`__scopeId`,`data-v-3abe32c6`]]);Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return m}});
1
+ require(`./chunk.cjs`);const e=require(`./export-helper.cjs`);let t=require(`vue`),n=require(`vue-draggable-plus`);function r(e,n){let r=(0,t.ref)(!1),i,a=!1;(0,t.onBeforeUnmount)(()=>{a=!0,r.value=!1,i=void 0});let o=(0,t.computed)({get:()=>e.modelValue??[],set:e=>{n(`update:modelValue`,e),n(`list-change`,e)}}),s=(0,t.computed)(()=>(e.modelValue??[]).length===0),c=(0,t.computed)(()=>[`c-draggable-list`,e.listClass,`layout-${e.layout}`,{"flex-wrap":e.flexWrap&&(e.layout===`horizontal`||e.layout===`flex-wrap`)}]),l=(0,t.computed)(()=>{let t={"--gap":typeof e.gap==`number`?`${e.gap}px`:e.gap??`8px`,"--grid-columns":e.gridColumns??4,"--justify-content":e.justifyContent??`flex-start`,"--align-items":e.alignItems??`stretch`,...e.customStyles};return e.gridRows&&(t[`--grid-rows`]=e.gridRows),t}),u=(0,t.computed)(()=>{let t={disabled:e.disabled,group:e.group,sort:e.sort,animation:e.animation,delay:e.delay,ghostClass:e.ghostClass,chosenClass:e.chosenClass,dragClass:e.dragClass,swapThreshold:e.swapThreshold,invertSwap:e.invertSwap,direction:e.direction,forceFallback:!1};return e.handle?t.handle=e.handle:e.showHandle&&(t.handle=`.drag-handle`),t}),d=(t,n)=>e.itemKey?e.itemKey(t,n):t.id??n,f=t=>e.itemTitle?e.itemTitle(t):t.title||t.name||t.label||String(t.id)||`未命名项目`,p=t=>e.itemDescription?e.itemDescription(t):t.description||``,m=()=>[`c-draggable-item`,e.itemClass,{"is-disabled":e.disabled}],h=e=>e!==void 0&&Number.isInteger(e)&&e>=0;return{isDragging:r,internalList:o,isEmpty:s,listClasses:c,listStyles:l,draggableOptions:u,getItemKey:d,getItemTitle:f,getItemDescription:p,getItemClass:m,handleStart:e=>{r.value=!0;let t=e.oldDraggableIndex??e.oldIndex;i=e.data??(h(t)?o.value[t]:void 0),i&&h(t)&&n(`drag-start`,{oldIndex:t,newIndex:t,item:i})},handleEnd:e=>{let o=e.oldDraggableIndex??e.oldIndex,s=e.newDraggableIndex??e.newIndex,c=e.data??i;i=void 0,c&&h(o)&&h(s)&&n(`drag-end`,{oldIndex:o,newIndex:s,item:c}),(0,t.nextTick)(()=>{a||(r.value=!1)})},handleAdd:e=>{let t=e.newDraggableIndex??e.newIndex,r=e.clonedData??e.data;r&&h(t)&&n(`item-add`,r,t)},handleRemove:e=>{if(e.pullMode===`clone`)return;let t=e.oldDraggableIndex??e.oldIndex,r=e.data??i;r&&h(t)&&n(`item-remove`,r,t)},handleUpdate:()=>{},addItem:(e,t)=>{let n=[...o.value];typeof t==`number`&&t>=0&&t<=n.length?n.splice(t,0,e):n.push(e),o.value=n},removeItem:e=>{if(e>=0&&e<o.value.length){let t=[...o.value],[n]=t.splice(e,1);return o.value=t,n}return null},moveItem:(e,t)=>{let n=o.value;if(e>=0&&e<n.length&&t>=0&&t<n.length&&e!==t){let r=[...n],[i]=r.splice(e,1);return r.splice(t,0,i),o.value=r,!0}return!1},updateList:e=>{o.value=[...e]},clear:()=>{o.value=[]},getItem:e=>o.value[e],findIndex:e=>o.value.findIndex(e)}}const i=[`data-index`],a={class:`default-item`},o={key:0,class:`drag-handle`},s={class:`item-content`},c={class:`item-title`},l={key:0,class:`item-description`},u={key:0,class:`empty-state`},d={class:`default-empty`},f={class:`empty-text`},p=(0,t.defineComponent)({name:`C_Draggable`,__name:`index`,props:{modelValue:{default:()=>[]},disabled:{type:Boolean,default:!1},group:{default:`default`},sort:{type:Boolean,default:!0},animation:{default:200},delay:{default:0},handle:{default:``},showHandle:{type:Boolean,default:!1},ghostClass:{default:`c-draggable-ghost`},chosenClass:{default:`c-draggable-chosen`},dragClass:{default:`c-draggable-drag`},wrapperClass:{default:``},listClass:{default:``},itemClass:{default:``},showEmptyState:{type:Boolean,default:!0},emptyText:{default:`暂无数据`},itemKey:{},itemTitle:{},itemDescription:{},swapThreshold:{default:1},invertSwap:{type:Boolean,default:!1},direction:{default:`vertical`},layout:{default:`vertical`},gridColumns:{default:4},gridRows:{default:void 0},gap:{default:`8px`},flexWrap:{type:Boolean,default:!1},justifyContent:{default:`flex-start`},alignItems:{default:`stretch`},customStyles:{default:()=>({})}},emits:[`update:modelValue`,`drag-start`,`drag-end`,`item-add`,`item-remove`,`list-change`],setup(e,{expose:p,emit:m}){let{isDragging:h,internalList:g,isEmpty:_,listClasses:v,listStyles:y,draggableOptions:b,getItemKey:x,getItemTitle:S,getItemDescription:C,getItemClass:w,handleStart:T,handleEnd:E,handleAdd:D,handleRemove:O,handleUpdate:k,addItem:A,removeItem:j,moveItem:M,updateList:N,clear:P,getItem:F,findIndex:I}=r(e,m);return p({isDragging:(0,t.readonly)(h),list:(0,t.readonly)(g),isEmpty:(0,t.readonly)(_),addItem:A,removeItem:j,moveItem:M,updateList:N,clear:P,getItem:F,findIndex:I}),(r,p)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{class:(0,t.normalizeClass)([`c-draggable-wrapper`,e.wrapperClass])},[(0,t.createVNode)((0,t.unref)(n.VueDraggable),(0,t.mergeProps)({modelValue:(0,t.unref)(g),"onUpdate:modelValue":p[0]||=e=>(0,t.isRef)(g)?g.value=e:null},(0,t.unref)(b),{class:(0,t.unref)(v),style:(0,t.unref)(y),onStart:(0,t.unref)(T),onEnd:(0,t.unref)(E),onAdd:(0,t.unref)(D),onRemove:(0,t.unref)(O),onUpdate:(0,t.unref)(k)}),{default:(0,t.withCtx)(()=>[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)((0,t.unref)(g),(n,u)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:(0,t.unref)(x)(n,u),class:(0,t.normalizeClass)((0,t.unref)(w)()),"data-index":u},[(0,t.renderSlot)(r.$slots,`default`,{item:n,index:u,isDragging:(0,t.unref)(h),isDisabled:e.disabled},()=>[(0,t.createElementVNode)(`div`,a,[e.showHandle?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,o,[...p[1]||=[(0,t.createElementVNode)(`div`,{class:`i-mdi:drag-vertical`},null,-1)]])):(0,t.createCommentVNode)(`v-if`,!0),(0,t.createElementVNode)(`div`,s,[(0,t.createElementVNode)(`div`,c,(0,t.toDisplayString)((0,t.unref)(S)(n)),1),(0,t.unref)(C)(n)?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,l,(0,t.toDisplayString)((0,t.unref)(C)(n)),1)):(0,t.createCommentVNode)(`v-if`,!0)])])],!0)],10,i))),128))]),_:3},16,[`modelValue`,`class`,`style`,`onStart`,`onEnd`,`onAdd`,`onRemove`,`onUpdate`]),(0,t.unref)(_)&&e.showEmptyState?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,u,[(0,t.renderSlot)(r.$slots,`empty`,{},()=>[(0,t.createElementVNode)(`div`,d,[p[2]||=(0,t.createElementVNode)(`div`,{class:`empty-icon i-mdi:inbox-outline`},null,-1),(0,t.createElementVNode)(`p`,f,(0,t.toDisplayString)(e.emptyText),1)])],!0)])):(0,t.createCommentVNode)(`v-if`,!0)],2))}});var m=e.t(p,[[`__scopeId`,`data-v-3abe32c6`]]);Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return m}});
@@ -1 +1 @@
1
- import{t as e}from"./export-helper.js";import{Fragment as t,computed as n,createCommentVNode as r,createElementBlock as i,createElementVNode as a,createVNode as o,defineComponent as s,isRef as c,mergeProps as l,nextTick as u,normalizeClass as d,openBlock as f,readonly as p,ref as m,renderList as h,renderSlot as g,toDisplayString as _,unref as v,withCtx as y}from"vue";import{VueDraggable as b}from"vue-draggable-plus";function x(e,t){let r=m(!1),i=n({get:()=>e.modelValue??[],set:e=>{t(`update:modelValue`,e),t(`list-change`,e)}});return{isDragging:r,internalList:i,isEmpty:n(()=>(e.modelValue??[]).length===0),listClasses:n(()=>[`c-draggable-list`,e.listClass,`layout-${e.layout}`,{"flex-wrap":e.flexWrap&&(e.layout===`horizontal`||e.layout===`flex-wrap`)}]),listStyles:n(()=>{let t={"--gap":typeof e.gap==`number`?`${e.gap}px`:e.gap??`8px`,"--grid-columns":e.gridColumns??4,"--justify-content":e.justifyContent??`flex-start`,"--align-items":e.alignItems??`stretch`,...e.customStyles};return e.gridRows&&(t[`--grid-rows`]=e.gridRows),t}),draggableOptions:n(()=>{let t={disabled:e.disabled,group:e.group,sort:e.sort,animation:e.animation,delay:e.delay,ghostClass:e.ghostClass,chosenClass:e.chosenClass,dragClass:e.dragClass,swapThreshold:e.swapThreshold,invertSwap:e.invertSwap,direction:e.direction,forceFallback:!1};return e.handle?t.handle=e.handle:e.showHandle&&(t.handle=`.drag-handle`),t}),getItemKey:(t,n)=>e.itemKey?e.itemKey(t,n):t.id??n,getItemTitle:t=>e.itemTitle?e.itemTitle(t):t.title||t.name||t.label||String(t.id)||`未命名项目`,getItemDescription:t=>e.itemDescription?e.itemDescription(t):t.description||``,getItemClass:()=>[`c-draggable-item`,e.itemClass,{"is-disabled":e.disabled}],handleStart:e=>{r.value=!0;let n=i.value[e.oldIndex];n&&t(`drag-start`,{oldIndex:e.oldIndex,newIndex:e.oldIndex,item:n})},handleEnd:e=>{let n=i.value[e.newIndex];n&&t(`drag-end`,{oldIndex:e.oldIndex,newIndex:e.newIndex,item:n}),u(()=>{r.value=!1})},handleAdd:e=>{let n=i.value[e.newIndex];n&&t(`item-add`,n,e.newIndex)},handleRemove:e=>{e.item&&t(`item-remove`,e.item,e.oldIndex)},handleUpdate:()=>{},addItem:(e,t)=>{let n=[...i.value];typeof t==`number`&&t>=0&&t<=n.length?n.splice(t,0,e):n.push(e),i.value=n},removeItem:e=>{if(e>=0&&e<i.value.length){let t=[...i.value],[n]=t.splice(e,1);return i.value=t,n}return null},moveItem:(e,t)=>{let n=i.value;if(e>=0&&e<n.length&&t>=0&&t<n.length&&e!==t){let r=[...n],[a]=r.splice(e,1);return r.splice(t,0,a),i.value=r,!0}return!1},updateList:e=>{i.value=[...e]},clear:()=>{i.value=[]},getItem:e=>i.value[e],findIndex:e=>i.value.findIndex(e)}}const S=[`data-index`],C={class:`default-item`},w={key:0,class:`drag-handle`},T={class:`item-content`},E={class:`item-title`},D={key:0,class:`item-description`},O={key:0,class:`empty-state`},k={class:`default-empty`},A={class:`empty-text`};var j=e(s({name:`C_Draggable`,__name:`index`,props:{modelValue:{default:()=>[]},disabled:{type:Boolean,default:!1},group:{default:`default`},sort:{type:Boolean,default:!0},animation:{default:200},delay:{default:0},handle:{default:``},showHandle:{type:Boolean,default:!1},ghostClass:{default:`c-draggable-ghost`},chosenClass:{default:`c-draggable-chosen`},dragClass:{default:`c-draggable-drag`},wrapperClass:{default:``},listClass:{default:``},itemClass:{default:``},showEmptyState:{type:Boolean,default:!0},emptyText:{default:`暂无数据`},itemKey:{},itemTitle:{},itemDescription:{},swapThreshold:{default:1},invertSwap:{type:Boolean,default:!1},direction:{default:`vertical`},layout:{default:`vertical`},gridColumns:{default:4},gridRows:{default:void 0},gap:{default:`8px`},flexWrap:{type:Boolean,default:!1},justifyContent:{default:`flex-start`},alignItems:{default:`stretch`},customStyles:{default:()=>({})}},emits:[`update:modelValue`,`drag-start`,`drag-end`,`item-add`,`item-remove`,`list-change`],setup(e,{expose:n,emit:s}){let{isDragging:u,internalList:m,isEmpty:j,listClasses:M,listStyles:N,draggableOptions:P,getItemKey:F,getItemTitle:I,getItemDescription:L,getItemClass:R,handleStart:z,handleEnd:B,handleAdd:V,handleRemove:H,handleUpdate:U,addItem:W,removeItem:G,moveItem:K,updateList:q,clear:J,getItem:Y,findIndex:X}=x(e,s);return n({isDragging:p(u),list:p(m),isEmpty:p(j),addItem:W,removeItem:G,moveItem:K,updateList:q,clear:J,getItem:Y,findIndex:X}),(n,s)=>(f(),i(`div`,{class:d([`c-draggable-wrapper`,e.wrapperClass])},[o(v(b),l({modelValue:v(m),"onUpdate:modelValue":s[0]||=e=>c(m)?m.value=e:null},v(P),{class:v(M),style:v(N),onStart:v(z),onEnd:v(B),onAdd:v(V),onRemove:v(H),onUpdate:v(U)}),{default:y(()=>[(f(!0),i(t,null,h(v(m),(t,o)=>(f(),i(`div`,{key:v(F)(t,o),class:d(v(R)()),"data-index":o},[g(n.$slots,`default`,{item:t,index:o,isDragging:v(u),isDisabled:e.disabled},()=>[a(`div`,C,[e.showHandle?(f(),i(`div`,w,[...s[1]||=[a(`div`,{class:`i-mdi:drag-vertical`},null,-1)]])):r(`v-if`,!0),a(`div`,T,[a(`div`,E,_(v(I)(t)),1),v(L)(t)?(f(),i(`div`,D,_(v(L)(t)),1)):r(`v-if`,!0)])])],!0)],10,S))),128))]),_:3},16,[`modelValue`,`class`,`style`,`onStart`,`onEnd`,`onAdd`,`onRemove`,`onUpdate`]),v(j)&&e.showEmptyState?(f(),i(`div`,O,[g(n.$slots,`empty`,{},()=>[a(`div`,k,[s[2]||=a(`div`,{class:`empty-icon i-mdi:inbox-outline`},null,-1),a(`p`,A,_(e.emptyText),1)])],!0)])):r(`v-if`,!0)],2))}}),[[`__scopeId`,`data-v-3abe32c6`]]);export{x as n,j as t};
1
+ import{t as e}from"./export-helper.js";import{Fragment as t,computed as n,createCommentVNode as r,createElementBlock as i,createElementVNode as a,createVNode as o,defineComponent as s,isRef as c,mergeProps as l,nextTick as u,normalizeClass as d,onBeforeUnmount as f,openBlock as p,readonly as m,ref as h,renderList as g,renderSlot as _,toDisplayString as v,unref as y,withCtx as b}from"vue";import{VueDraggable as x}from"vue-draggable-plus";function S(e,t){let r=h(!1),i,a=!1;f(()=>{a=!0,r.value=!1,i=void 0});let o=n({get:()=>e.modelValue??[],set:e=>{t(`update:modelValue`,e),t(`list-change`,e)}}),s=n(()=>(e.modelValue??[]).length===0),c=n(()=>[`c-draggable-list`,e.listClass,`layout-${e.layout}`,{"flex-wrap":e.flexWrap&&(e.layout===`horizontal`||e.layout===`flex-wrap`)}]),l=n(()=>{let t={"--gap":typeof e.gap==`number`?`${e.gap}px`:e.gap??`8px`,"--grid-columns":e.gridColumns??4,"--justify-content":e.justifyContent??`flex-start`,"--align-items":e.alignItems??`stretch`,...e.customStyles};return e.gridRows&&(t[`--grid-rows`]=e.gridRows),t}),d=n(()=>{let t={disabled:e.disabled,group:e.group,sort:e.sort,animation:e.animation,delay:e.delay,ghostClass:e.ghostClass,chosenClass:e.chosenClass,dragClass:e.dragClass,swapThreshold:e.swapThreshold,invertSwap:e.invertSwap,direction:e.direction,forceFallback:!1};return e.handle?t.handle=e.handle:e.showHandle&&(t.handle=`.drag-handle`),t}),p=(t,n)=>e.itemKey?e.itemKey(t,n):t.id??n,m=t=>e.itemTitle?e.itemTitle(t):t.title||t.name||t.label||String(t.id)||`未命名项目`,g=t=>e.itemDescription?e.itemDescription(t):t.description||``,_=()=>[`c-draggable-item`,e.itemClass,{"is-disabled":e.disabled}],v=e=>e!==void 0&&Number.isInteger(e)&&e>=0;return{isDragging:r,internalList:o,isEmpty:s,listClasses:c,listStyles:l,draggableOptions:d,getItemKey:p,getItemTitle:m,getItemDescription:g,getItemClass:_,handleStart:e=>{r.value=!0;let n=e.oldDraggableIndex??e.oldIndex;i=e.data??(v(n)?o.value[n]:void 0),i&&v(n)&&t(`drag-start`,{oldIndex:n,newIndex:n,item:i})},handleEnd:e=>{let n=e.oldDraggableIndex??e.oldIndex,o=e.newDraggableIndex??e.newIndex,s=e.data??i;i=void 0,s&&v(n)&&v(o)&&t(`drag-end`,{oldIndex:n,newIndex:o,item:s}),u(()=>{a||(r.value=!1)})},handleAdd:e=>{let n=e.newDraggableIndex??e.newIndex,r=e.clonedData??e.data;r&&v(n)&&t(`item-add`,r,n)},handleRemove:e=>{if(e.pullMode===`clone`)return;let n=e.oldDraggableIndex??e.oldIndex,r=e.data??i;r&&v(n)&&t(`item-remove`,r,n)},handleUpdate:()=>{},addItem:(e,t)=>{let n=[...o.value];typeof t==`number`&&t>=0&&t<=n.length?n.splice(t,0,e):n.push(e),o.value=n},removeItem:e=>{if(e>=0&&e<o.value.length){let t=[...o.value],[n]=t.splice(e,1);return o.value=t,n}return null},moveItem:(e,t)=>{let n=o.value;if(e>=0&&e<n.length&&t>=0&&t<n.length&&e!==t){let r=[...n],[i]=r.splice(e,1);return r.splice(t,0,i),o.value=r,!0}return!1},updateList:e=>{o.value=[...e]},clear:()=>{o.value=[]},getItem:e=>o.value[e],findIndex:e=>o.value.findIndex(e)}}const C=[`data-index`],w={class:`default-item`},T={key:0,class:`drag-handle`},E={class:`item-content`},D={class:`item-title`},O={key:0,class:`item-description`},k={key:0,class:`empty-state`},A={class:`default-empty`},j={class:`empty-text`};var M=e(s({name:`C_Draggable`,__name:`index`,props:{modelValue:{default:()=>[]},disabled:{type:Boolean,default:!1},group:{default:`default`},sort:{type:Boolean,default:!0},animation:{default:200},delay:{default:0},handle:{default:``},showHandle:{type:Boolean,default:!1},ghostClass:{default:`c-draggable-ghost`},chosenClass:{default:`c-draggable-chosen`},dragClass:{default:`c-draggable-drag`},wrapperClass:{default:``},listClass:{default:``},itemClass:{default:``},showEmptyState:{type:Boolean,default:!0},emptyText:{default:`暂无数据`},itemKey:{},itemTitle:{},itemDescription:{},swapThreshold:{default:1},invertSwap:{type:Boolean,default:!1},direction:{default:`vertical`},layout:{default:`vertical`},gridColumns:{default:4},gridRows:{default:void 0},gap:{default:`8px`},flexWrap:{type:Boolean,default:!1},justifyContent:{default:`flex-start`},alignItems:{default:`stretch`},customStyles:{default:()=>({})}},emits:[`update:modelValue`,`drag-start`,`drag-end`,`item-add`,`item-remove`,`list-change`],setup(e,{expose:n,emit:s}){let{isDragging:u,internalList:f,isEmpty:h,listClasses:M,listStyles:N,draggableOptions:P,getItemKey:F,getItemTitle:I,getItemDescription:L,getItemClass:R,handleStart:z,handleEnd:B,handleAdd:V,handleRemove:H,handleUpdate:U,addItem:W,removeItem:G,moveItem:K,updateList:q,clear:J,getItem:Y,findIndex:X}=S(e,s);return n({isDragging:m(u),list:m(f),isEmpty:m(h),addItem:W,removeItem:G,moveItem:K,updateList:q,clear:J,getItem:Y,findIndex:X}),(n,s)=>(p(),i(`div`,{class:d([`c-draggable-wrapper`,e.wrapperClass])},[o(y(x),l({modelValue:y(f),"onUpdate:modelValue":s[0]||=e=>c(f)?f.value=e:null},y(P),{class:y(M),style:y(N),onStart:y(z),onEnd:y(B),onAdd:y(V),onRemove:y(H),onUpdate:y(U)}),{default:b(()=>[(p(!0),i(t,null,g(y(f),(t,o)=>(p(),i(`div`,{key:y(F)(t,o),class:d(y(R)()),"data-index":o},[_(n.$slots,`default`,{item:t,index:o,isDragging:y(u),isDisabled:e.disabled},()=>[a(`div`,w,[e.showHandle?(p(),i(`div`,T,[...s[1]||=[a(`div`,{class:`i-mdi:drag-vertical`},null,-1)]])):r(`v-if`,!0),a(`div`,E,[a(`div`,D,v(y(I)(t)),1),y(L)(t)?(p(),i(`div`,O,v(y(L)(t)),1)):r(`v-if`,!0)])])],!0)],10,C))),128))]),_:3},16,[`modelValue`,`class`,`style`,`onStart`,`onEnd`,`onAdd`,`onRemove`,`onUpdate`]),y(h)&&e.showEmptyState?(p(),i(`div`,k,[_(n.$slots,`empty`,{},()=>[a(`div`,A,[s[2]||=a(`div`,{class:`empty-icon i-mdi:inbox-outline`},null,-1),a(`p`,j,v(e.emptyText),1)])],!0)])):r(`v-if`,!0)],2))}}),[[`__scopeId`,`data-v-3abe32c6`]]);export{S as n,M as t};