zignal-stencil-library 1.1.109 → 1.1.111

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 (289) hide show
  1. package/dist/cjs/app-globals-V2Kpy_OQ.js.map +1 -1
  2. package/dist/cjs/autocomplete-address_43.cjs.entry.js +269 -163
  3. package/dist/cjs/{dayjs-Dssqvl2P.js → dayjs-Fs60i07x.js} +3 -3
  4. package/dist/cjs/dayjs-Fs60i07x.js.map +1 -0
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/quick-message-app.cjs.entry.js +3 -3
  7. package/dist/cjs/zignal-stencil-library.cjs.js +1 -1
  8. package/dist/collection/components/autocomplete-address/autocomplete-address.css +1 -1
  9. package/dist/collection/components/autocomplete-multiple-select/autocomplete-multiple-select.css +1 -1
  10. package/dist/collection/components/autocomplete-select/autocomplete-select.css +1 -1
  11. package/dist/collection/components/autocomplete-select/autocomplete-select.js +4 -3
  12. package/dist/collection/components/autocomplete-select/autocomplete-select.js.map +1 -1
  13. package/dist/collection/components/channel-box/channel-box.css +1 -1
  14. package/dist/collection/components/chat-app/chat-app.css +1 -1
  15. package/dist/collection/components/chat-header/chat-header.css +1 -1
  16. package/dist/collection/components/chat-input/chat-input.css +1 -1
  17. package/dist/collection/components/checkbox-list/checkbox-list.css +1 -1
  18. package/dist/collection/components/dialog-bill-editor/dialog-bill-editor.css +1 -1
  19. package/dist/collection/components/dialog-editor/dialog-editor.css +1 -1
  20. package/dist/collection/components/dialog-editor/dialog-editor.js +42 -25
  21. package/dist/collection/components/dialog-editor/dialog-editor.js.map +1 -1
  22. package/dist/collection/components/dialog-preview-media/dialog-preview-media.css +1 -1
  23. package/dist/collection/components/dialog-search/dialog-search.css +1 -1
  24. package/dist/collection/components/internal-component/merge-user-view.js +1 -1
  25. package/dist/collection/components/internal-component/merge-user-view.js.map +1 -1
  26. package/dist/collection/components/menu-chat-channel/menu-chat-channel.css +1 -1
  27. package/dist/collection/components/menu-chat-type/menu-chat-type.css +1 -1
  28. package/dist/collection/components/menu-list/menu-list.css +1 -1
  29. package/dist/collection/components/menu-list/menu-list.js +23 -2
  30. package/dist/collection/components/menu-list/menu-list.js.map +1 -1
  31. package/dist/collection/components/message-box/message-box.css +1 -1
  32. package/dist/collection/components/message-content/message-content.css +1 -1
  33. package/dist/collection/components/message-item/message-item.css +1 -1
  34. package/dist/collection/components/message-item/message-item.js +4 -2
  35. package/dist/collection/components/message-item/message-item.js.map +1 -1
  36. package/dist/collection/components/message-media/message-media.css +1 -1
  37. package/dist/collection/components/profile-history/profile-history.css +1 -1
  38. package/dist/collection/components/profile-history/profile-history.js +14 -22
  39. package/dist/collection/components/profile-history/profile-history.js.map +1 -1
  40. package/dist/collection/components/profile-info/profile-info.css +1 -1
  41. package/dist/collection/components/profile-info/profile-info.js +27 -42
  42. package/dist/collection/components/profile-info/profile-info.js.map +1 -1
  43. package/dist/collection/components/profile-info/user-info-section.js +42 -4
  44. package/dist/collection/components/profile-info/user-info-section.js.map +1 -1
  45. package/dist/collection/components/profile-media/profile-media.css +1 -1
  46. package/dist/collection/components/profile-media/profile-media.js +1 -1
  47. package/dist/collection/components/profile-tabs/profile-tabs.css +1 -1
  48. package/dist/collection/components/profile-tabs/profile-tabs.js +6 -6
  49. package/dist/collection/components/profile-tabs/profile-tabs.js.map +1 -1
  50. package/dist/collection/components/quick-message-add-template/quick-message-add-template.css +1 -1
  51. package/dist/collection/components/quick-message-add-template/quick-message-add-template.js +3 -3
  52. package/dist/collection/components/quick-message-add-template/quick-message-text-content.js +1 -1
  53. package/dist/collection/components/quick-message-app/quick-message-app.css +1 -1
  54. package/dist/collection/components/quick-message-app/quick-message-app.js +1 -1
  55. package/dist/collection/components/quick-message-file/quick-message-file.css +1 -1
  56. package/dist/collection/components/quick-message-file/quick-message-file.js +1 -1
  57. package/dist/collection/components/quick-message-image/quick-message-image.css +1 -1
  58. package/dist/collection/components/quick-message-image/quick-message-image.js +1 -1
  59. package/dist/collection/components/quick-message-modal/quick-message-modal.css +1 -1
  60. package/dist/collection/components/quick-message-modal/quick-message-modal.js +1 -1
  61. package/dist/collection/components/quick-message-template/quick-message-template.css +1 -1
  62. package/dist/collection/components/quick-message-template/quick-message-template.js +3 -3
  63. package/dist/collection/components/search-box/search-box.css +1 -1
  64. package/dist/collection/components/search-box/search-box.js +1 -1
  65. package/dist/collection/components/status-badge/status-badge.css +1 -1
  66. package/dist/collection/components/status-badge/status-badge.js +2 -2
  67. package/dist/collection/components/tag-list/tag-list.css +1 -1
  68. package/dist/collection/components/tag-list/tag-list.js +1 -1
  69. package/dist/collection/components/tag-or-status-item/tag-or-status-item.css +1 -1
  70. package/dist/collection/components/tag-or-status-item/tag-or-status-item.js +2 -2
  71. package/dist/collection/components/tag-popper/tag-popper.css +1 -1
  72. package/dist/collection/components/tag-popper/tag-popper.js +2 -2
  73. package/dist/collection/components/typography-clamp/typography-clamp.css +1 -1
  74. package/dist/collection/components/typography-clamp/typography-clamp.js +2 -2
  75. package/dist/collection/components/z-avatar/z-avatar.css +1 -1
  76. package/dist/collection/components/z-avatar/z-avatar.js +8 -2
  77. package/dist/collection/components/z-avatar/z-avatar.js.map +1 -1
  78. package/dist/collection/components/z-dialog/z-dialog.css +1 -1
  79. package/dist/collection/store/chat.js +6 -1
  80. package/dist/collection/store/chat.js.map +1 -1
  81. package/dist/collection/store/message.js +38 -6
  82. package/dist/collection/store/message.js.map +1 -1
  83. package/dist/collection/store/store.js +1 -1
  84. package/dist/collection/store/store.js.map +1 -1
  85. package/dist/components/autocomplete-address.js +1 -1
  86. package/dist/components/autocomplete-multiple-select.js +1 -1
  87. package/dist/components/autocomplete-select.js +1 -1
  88. package/dist/components/channel-box.js +1 -1
  89. package/dist/components/chat-app.js +47 -47
  90. package/dist/components/chat-app.js.map +1 -1
  91. package/dist/components/chat-header.js +1 -1
  92. package/dist/components/chat-input.js +1 -1
  93. package/dist/components/checkbox-list.js +1 -1
  94. package/dist/components/dialog-bill-editor.js +1 -1
  95. package/dist/components/dialog-editor.js +1 -1
  96. package/dist/components/dialog-preview-media.js +1 -1
  97. package/dist/components/dialog-search.js +1 -1
  98. package/dist/components/menu-chat-channel.js +1 -1
  99. package/dist/components/menu-chat-type.js +1 -1
  100. package/dist/components/menu-list.js +1 -1
  101. package/dist/components/message-box.js +1 -1
  102. package/dist/components/message-content.js +1 -1
  103. package/dist/components/message-item.js +1 -1
  104. package/dist/components/message-media.js +1 -1
  105. package/dist/components/{p-DGF1OMnC.js → p--gZqhhLL.js} +5 -5
  106. package/dist/components/{p-DGF1OMnC.js.map → p--gZqhhLL.js.map} +1 -1
  107. package/dist/components/{p-LUMkIl0L.js → p-3jt5iBgO.js} +7 -7
  108. package/dist/components/{p-LUMkIl0L.js.map → p-3jt5iBgO.js.map} +1 -1
  109. package/dist/components/{p-BAcE386V.js → p-5S7W_s42.js} +44 -12
  110. package/dist/components/p-5S7W_s42.js.map +1 -0
  111. package/dist/components/{p-7VwG3GTl.js → p-5z3Oz7nB.js} +4 -4
  112. package/dist/components/{p-7VwG3GTl.js.map → p-5z3Oz7nB.js.map} +1 -1
  113. package/dist/components/{p-Cq3trT50.js → p-8qMMsvE2.js} +6 -6
  114. package/dist/components/{p-Cq3trT50.js.map → p-8qMMsvE2.js.map} +1 -1
  115. package/dist/components/{p-Bb01kTl4.js → p-B6HiV-kQ.js} +3 -3
  116. package/dist/components/{p-Bb01kTl4.js.map → p-B6HiV-kQ.js.map} +1 -1
  117. package/dist/components/{p--O1ZEUbW.js → p-B7CuMj9y.js} +6 -6
  118. package/dist/components/{p--O1ZEUbW.js.map → p-B7CuMj9y.js.map} +1 -1
  119. package/dist/components/{p-DBulpvHu.js → p-BNblLfcs.js} +24 -32
  120. package/dist/components/p-BNblLfcs.js.map +1 -0
  121. package/dist/components/{p-BxtUL608.js → p-BOrhSlbo.js} +6 -6
  122. package/dist/components/p-BOrhSlbo.js.map +1 -0
  123. package/dist/components/{p-Cr7gI0aa.js → p-Bj6H7JrX.js} +4 -4
  124. package/dist/components/{p-Cr7gI0aa.js.map → p-Bj6H7JrX.js.map} +1 -1
  125. package/dist/components/{p-CAzwNTwH.js → p-Bo_qpOg-.js} +5 -5
  126. package/dist/components/{p-CAzwNTwH.js.map → p-Bo_qpOg-.js.map} +1 -1
  127. package/dist/components/{p-Db2KItIV.js → p-BrKDVlCP.js} +10 -4
  128. package/dist/components/p-BrKDVlCP.js.map +1 -0
  129. package/dist/components/{p-C0an_Y-_.js → p-C-YLmbpA.js} +4 -4
  130. package/dist/components/{p-C0an_Y-_.js.map → p-C-YLmbpA.js.map} +1 -1
  131. package/dist/components/{p-D3TCeN-_.js → p-C-hvo0Uo.js} +17 -15
  132. package/dist/components/p-C-hvo0Uo.js.map +1 -0
  133. package/dist/components/{p-DKZZLjoB.js → p-C0MuZqgR.js} +4 -4
  134. package/dist/components/{p-DKZZLjoB.js.map → p-C0MuZqgR.js.map} +1 -1
  135. package/dist/components/{p-Dhuf9YNy.js → p-C2YAe0Ke.js} +3 -3
  136. package/dist/components/{p-Dhuf9YNy.js.map → p-C2YAe0Ke.js.map} +1 -1
  137. package/dist/components/{p-Bfvlw-rF.js → p-C7MtMQaw.js} +3 -3
  138. package/dist/components/{p-Bfvlw-rF.js.map → p-C7MtMQaw.js.map} +1 -1
  139. package/dist/components/p-C7n7EjKD.js +61 -0
  140. package/dist/components/{p-V8jogkYH.js.map → p-C7n7EjKD.js.map} +1 -1
  141. package/dist/components/{p-BLIkH1Mo.js → p-C9OqpwzA.js} +49 -63
  142. package/dist/components/p-C9OqpwzA.js.map +1 -0
  143. package/dist/components/{p-Ca9LbW-0.js → p-CB09ePCJ.js} +7 -7
  144. package/dist/components/{p-Ca9LbW-0.js.map → p-CB09ePCJ.js.map} +1 -1
  145. package/dist/components/{p-DVnAr27s.js → p-CBGDhDhT.js} +6 -6
  146. package/dist/components/{p-DVnAr27s.js.map → p-CBGDhDhT.js.map} +1 -1
  147. package/dist/components/{p-BEYgWj6b.js → p-CDPdfHLJ.js} +3 -3
  148. package/dist/components/{p-BEYgWj6b.js.map → p-CDPdfHLJ.js.map} +1 -1
  149. package/dist/components/{p-CQYTqV0b.js → p-CH39HrFZ.js} +7 -7
  150. package/dist/components/{p-CQYTqV0b.js.map → p-CH39HrFZ.js.map} +1 -1
  151. package/dist/components/{p-a8Ave0b1.js → p-CZRPZKJ-.js} +11 -6
  152. package/dist/components/p-CZRPZKJ-.js.map +1 -0
  153. package/dist/components/{p-D5PoL4hp.js → p-CbjDD_ZV.js} +4 -4
  154. package/dist/components/{p-D5PoL4hp.js.map → p-CbjDD_ZV.js.map} +1 -1
  155. package/dist/components/{p-DeqB7qmW.js → p-CbwYwjdH.js} +3 -3
  156. package/dist/components/{p-DeqB7qmW.js.map → p-CbwYwjdH.js.map} +1 -1
  157. package/dist/components/{p-xDz70z-M.js → p-CeHDqun7.js} +5 -5
  158. package/dist/components/{p-xDz70z-M.js.map → p-CeHDqun7.js.map} +1 -1
  159. package/dist/components/{p-C6_QUEmP.js → p-CgTZtTmT.js} +25 -25
  160. package/dist/components/p-CgTZtTmT.js.map +1 -0
  161. package/dist/components/{p-lh6oIsdX.js → p-CjdpcyF4.js} +15 -15
  162. package/dist/components/{p-lh6oIsdX.js.map → p-CjdpcyF4.js.map} +1 -1
  163. package/dist/components/{p-CaKYRiqR.js → p-CtIwL686.js} +4 -4
  164. package/dist/components/{p-CaKYRiqR.js.map → p-CtIwL686.js.map} +1 -1
  165. package/dist/components/{p-fbMxRrBR.js → p-Cw5rK8nZ.js} +6 -6
  166. package/dist/components/{p-fbMxRrBR.js.map → p-Cw5rK8nZ.js.map} +1 -1
  167. package/dist/components/{p-Cl7hIV7X.js → p-Cy-sLMQG.js} +6 -6
  168. package/dist/components/{p-Cl7hIV7X.js.map → p-Cy-sLMQG.js.map} +1 -1
  169. package/dist/components/{p-Bz_ZwZP1.js → p-D-3sn9sH.js} +9 -8
  170. package/dist/components/p-D-3sn9sH.js.map +1 -0
  171. package/dist/components/{p-BVEUC5lT.js → p-D-75lLYc.js} +9 -7
  172. package/dist/components/p-D-75lLYc.js.map +1 -0
  173. package/dist/components/{p-BsAFeM-5.js → p-DCmuKByr.js} +12 -12
  174. package/dist/components/{p-BsAFeM-5.js.map → p-DCmuKByr.js.map} +1 -1
  175. package/dist/components/{p-DozNuTlX.js → p-DG0KCn3k.js} +45 -28
  176. package/dist/components/p-DG0KCn3k.js.map +1 -0
  177. package/dist/components/{p-DI7kfodM.js → p-DGC5KYEl.js} +19 -19
  178. package/dist/components/{p-DI7kfodM.js.map → p-DGC5KYEl.js.map} +1 -1
  179. package/dist/components/{p-D4jpzhhj.js → p-DHM0YbIt.js} +6 -6
  180. package/dist/components/{p-D4jpzhhj.js.map → p-DHM0YbIt.js.map} +1 -1
  181. package/dist/components/{p-C0WNBAqe.js → p-DRC94y7I.js} +5 -5
  182. package/dist/components/{p-C0WNBAqe.js.map → p-DRC94y7I.js.map} +1 -1
  183. package/dist/components/p-Dnb_md64.js +140 -0
  184. package/dist/components/p-Dnb_md64.js.map +1 -0
  185. package/dist/components/{p-Bi4p_UFq.js → p-Dv5lS2bl.js} +10 -10
  186. package/dist/components/{p-Bi4p_UFq.js.map → p-Dv5lS2bl.js.map} +1 -1
  187. package/dist/components/{p-DKrfS1S5.js → p-DwRMNFnU.js} +3 -3
  188. package/dist/components/{p-DKrfS1S5.js.map → p-DwRMNFnU.js.map} +1 -1
  189. package/dist/components/{p-DTALiLAZ.js → p-My1l3OBd.js} +4 -4
  190. package/dist/components/{p-DTALiLAZ.js.map → p-My1l3OBd.js.map} +1 -1
  191. package/dist/components/{p-Khnj_GHE.js → p-PLHiwThd.js} +3 -3
  192. package/dist/components/{p-Khnj_GHE.js.map → p-PLHiwThd.js.map} +1 -1
  193. package/dist/components/{p-BPSZx5dO.js → p-UWiH2uHw.js} +46 -3
  194. package/dist/components/p-UWiH2uHw.js.map +1 -0
  195. package/dist/components/{p-B8KaZkC1.js → p-XunATCgp.js} +13 -13
  196. package/dist/components/{p-B8KaZkC1.js.map → p-XunATCgp.js.map} +1 -1
  197. package/dist/components/{p-BvfI15a9.js → p-av8MQL9x.js} +8 -8
  198. package/dist/components/{p-BvfI15a9.js.map → p-av8MQL9x.js.map} +1 -1
  199. package/dist/components/{p-DagQghge.js → p-drInZwO0.js} +7 -7
  200. package/dist/components/{p-DagQghge.js.map → p-drInZwO0.js.map} +1 -1
  201. package/dist/components/{p-C2y4A6PK.js → p-htsjbc2A.js} +5 -5
  202. package/dist/components/{p-C2y4A6PK.js.map → p-htsjbc2A.js.map} +1 -1
  203. package/dist/components/{p-VAINz5I8.js → p-kbTcbS6Y.js} +29 -29
  204. package/dist/components/{p-VAINz5I8.js.map → p-kbTcbS6Y.js.map} +1 -1
  205. package/dist/components/{p-COEdIJkP.js → p-l6ffmvGW.js} +5 -5
  206. package/dist/components/{p-COEdIJkP.js.map → p-l6ffmvGW.js.map} +1 -1
  207. package/dist/components/{p-D1eldCje.js → p-m4eaolum.js} +4 -4
  208. package/dist/components/{p-D1eldCje.js.map → p-m4eaolum.js.map} +1 -1
  209. package/dist/components/p-mVYojO3m.js +161 -0
  210. package/dist/components/{p-DkAZFStQ.js.map → p-mVYojO3m.js.map} +1 -1
  211. package/dist/components/{p-Bfsq37ia.js → p-maYXfa3o.js} +6 -6
  212. package/dist/components/{p-Bfsq37ia.js.map → p-maYXfa3o.js.map} +1 -1
  213. package/dist/components/{p-CTSEDIyo.js → p-p3q1OJSb.js} +12 -12
  214. package/dist/components/{p-CTSEDIyo.js.map → p-p3q1OJSb.js.map} +1 -1
  215. package/dist/components/{p-BcvqaW9a.js → p-tkW40LmD.js} +9 -9
  216. package/dist/components/{p-BcvqaW9a.js.map → p-tkW40LmD.js.map} +1 -1
  217. package/dist/components/{p-LsQYRhK6.js → p-x8gJGTdZ.js} +3 -3
  218. package/dist/components/p-x8gJGTdZ.js.map +1 -0
  219. package/dist/components/profile-history.js +1 -1
  220. package/dist/components/profile-info.js +1 -1
  221. package/dist/components/profile-media.js +1 -1
  222. package/dist/components/profile-tabs.js +1 -1
  223. package/dist/components/quick-message-add-template.js +1 -1
  224. package/dist/components/quick-message-app.js +13 -13
  225. package/dist/components/quick-message-button-content.js +1 -1
  226. package/dist/components/quick-message-file.js +1 -1
  227. package/dist/components/quick-message-image-content.js +1 -1
  228. package/dist/components/quick-message-image.js +1 -1
  229. package/dist/components/quick-message-menu-list-content.js +1 -1
  230. package/dist/components/quick-message-modal.js +1 -1
  231. package/dist/components/quick-message-template.js +1 -1
  232. package/dist/components/quick-message-text-content.js +1 -1
  233. package/dist/components/quick-message-video-content.js +1 -1
  234. package/dist/components/search-box.js +1 -1
  235. package/dist/components/status-badge.js +1 -1
  236. package/dist/components/summarize-message-section.js +1 -1
  237. package/dist/components/tag-list.js +1 -1
  238. package/dist/components/tag-or-status-item.js +1 -1
  239. package/dist/components/tag-popper.js +1 -1
  240. package/dist/components/typography-clamp.js +1 -1
  241. package/dist/components/user-info-section.js +1 -1
  242. package/dist/components/z-avatar.js +1 -1
  243. package/dist/components/z-dialog.js +1 -1
  244. package/dist/esm/app-globals-DQuL1Twl.js.map +1 -1
  245. package/dist/esm/autocomplete-address_43.entry.js +269 -163
  246. package/dist/esm/{dayjs-9U43dXkE.js → dayjs-CBRfzh5w.js} +4 -4
  247. package/dist/esm/dayjs-CBRfzh5w.js.map +1 -0
  248. package/dist/esm/loader.js +1 -1
  249. package/dist/esm/quick-message-app.entry.js +3 -3
  250. package/dist/esm/zignal-stencil-library.js +1 -1
  251. package/dist/types/components/menu-list/menu-list.d.ts +3 -2
  252. package/dist/types/components/profile-history/profile-history.d.ts +1 -0
  253. package/dist/types/components/profile-info/profile-info.d.ts +2 -2
  254. package/dist/types/components/profile-info/user-info-section.d.ts +2 -0
  255. package/dist/types/components/z-avatar/z-avatar.d.ts +1 -1
  256. package/dist/types/components.d.ts +12 -2
  257. package/dist/types/store/store.d.ts +1 -1
  258. package/dist/zignal-stencil-library/{p-605cf9fb.entry.js → p-4976f186.entry.js} +2 -2
  259. package/dist/zignal-stencil-library/p-CZlSuaCa.js +2 -0
  260. package/dist/zignal-stencil-library/p-CZlSuaCa.js.map +1 -0
  261. package/dist/zignal-stencil-library/p-DQuL1Twl.js.map +1 -1
  262. package/dist/zignal-stencil-library/{p-d9b292e2.entry.js → p-c349823b.entry.js} +64 -64
  263. package/dist/zignal-stencil-library/p-c349823b.entry.js.map +1 -0
  264. package/dist/zignal-stencil-library/zignal-stencil-library.css +1 -1
  265. package/dist/zignal-stencil-library/zignal-stencil-library.esm.js +1 -1
  266. package/package.json +1 -1
  267. package/dist/cjs/dayjs-Dssqvl2P.js.map +0 -1
  268. package/dist/components/p-BAcE386V.js.map +0 -1
  269. package/dist/components/p-BLIkH1Mo.js.map +0 -1
  270. package/dist/components/p-BPSZx5dO.js.map +0 -1
  271. package/dist/components/p-BVEUC5lT.js.map +0 -1
  272. package/dist/components/p-BxtUL608.js.map +0 -1
  273. package/dist/components/p-Bz_ZwZP1.js.map +0 -1
  274. package/dist/components/p-C6_QUEmP.js.map +0 -1
  275. package/dist/components/p-D3TCeN-_.js.map +0 -1
  276. package/dist/components/p-DBulpvHu.js.map +0 -1
  277. package/dist/components/p-DE1veeiP.js +0 -116
  278. package/dist/components/p-DE1veeiP.js.map +0 -1
  279. package/dist/components/p-Db2KItIV.js.map +0 -1
  280. package/dist/components/p-DkAZFStQ.js +0 -161
  281. package/dist/components/p-DozNuTlX.js.map +0 -1
  282. package/dist/components/p-LsQYRhK6.js.map +0 -1
  283. package/dist/components/p-V8jogkYH.js +0 -61
  284. package/dist/components/p-a8Ave0b1.js.map +0 -1
  285. package/dist/esm/dayjs-9U43dXkE.js.map +0 -1
  286. package/dist/zignal-stencil-library/p-DO7BhE7i.js +0 -2
  287. package/dist/zignal-stencil-library/p-DO7BhE7i.js.map +0 -1
  288. package/dist/zignal-stencil-library/p-d9b292e2.entry.js.map +0 -1
  289. /package/dist/zignal-stencil-library/{p-605cf9fb.entry.js.map → p-4976f186.entry.js.map} +0 -0
@@ -1 +1 @@
1
- {"file":"p-CQYTqV0b.js","mappings":"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","names":["__stencil_proxyCustomElement","HTMLElement","showErrorDialog"],"sources":["src/components/quick-message-file/quick-message-file.css?tag=quick-message-file","src/components/quick-message-file/quick-message-file.tsx"],"sourcesContent":[":host {\n position: relative;\n}\n\n.quick-message-file__icon {\n background: var(--quick-modal-primary-ghost);\n color: var(--quick-modal-primary);\n}\n\n.quick-message-file__action-button {\n border: 1px solid rgba(148, 163, 184, 0.4);\n background: transparent;\n}\n\n.quick-message-file__send {\n background: var(--quick-modal-primary);\n color: #fff;\n border: none;\n}\n\n.quick-message-file__list-more-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0.25rem;\n border-radius: 0.5rem;\n border: none;\n background: transparent;\n color: inherit;\n cursor: pointer;\n margin-left: auto;\n}\n\n.quick-message-file__list-more-button:hover {\n background: rgba(148, 163, 184, 0.12);\n}\n\n.quick-message-file__menu-wrapper {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-left: auto;\n}\n\n.quick-message-file__menu {\n position: absolute;\n top: calc(100% + 0.5rem);\n right: 0;\n display: flex;\n flex-direction: column;\n min-width: 8rem;\n padding: 0.25rem 0;\n border-radius: 0.75rem;\n border: 1px solid rgba(148, 163, 184, 0.18);\n box-shadow: 0 16px 30px rgba(15, 23, 42, 0.2);\n z-index: 40;\n overflow: hidden;\n}\n\n.quick-message-file__menu-item {\n display: flex;\n width: 100%;\n align-items: center;\n justify-content: flex-start;\n gap: 0.5rem;\n padding: 0.5rem 0.9rem;\n border: none;\n background: transparent;\n color: inherit;\n font-size: 0.8125rem;\n line-height: 1.2;\n cursor: pointer;\n text-align: left;\n transition: background-color 0.2s ease;\n}\n\n.quick-message-file__menu-item:hover {\n background: rgba(148, 163, 184, 0.14);\n}\n\n.quick-message-file__menu-item--danger {\n color: #ef4444;\n}\n\n.quick-message-file__menu-item--danger:hover {\n background: rgba(239, 68, 68, 0.12);\n}\n\n.quick-message-file__rename-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(15, 23, 42, 0.45);\n padding: 1.5rem;\n z-index: 20;\n}\n\n.quick-message-file__rename-modal {\n width: 100%;\n max-width: 22rem;\n border-radius: 0.75rem;\n box-shadow: 0 20px 45px rgba(15, 23, 42, 0.25);\n padding: 1.5rem;\n}\n\n.quick-message-file__rename-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 1rem;\n}\n\n.quick-message-file__rename-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n color: inherit;\n border-radius: 0.5rem;\n padding: 0.25rem;\n cursor: pointer;\n}\n\n.quick-message-file__rename-close:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.quick-message-file__rename-cancel,\n.quick-message-file__rename-save {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 9999px;\n padding: 0.35rem 0.9rem;\n border: none;\n cursor: pointer;\n transition: opacity 0.2s ease;\n}\n\n.quick-message-file__rename-cancel {\n background: transparent;\n color: inherit;\n border: 1px solid rgba(148, 163, 184, 0.4);\n}\n\n.quick-message-file__rename-save {\n background: var(--quick-modal-primary);\n color: #fff;\n}\n\n.quick-message-file__rename-save:disabled,\n.quick-message-file__rename-cancel:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n.quick-message-file__rename-input-row {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.35rem 0.75rem;\n border-radius: 0.75rem;\n transition:\n border-color 0.2s ease,\n box-shadow 0.2s ease;\n}\n\n.quick-message-file__rename-input-row:focus-within {\n border-color: var(--quick-modal-primary);\n box-shadow: 0 0 0 1px var(--quick-modal-primary);\n}\n\n.quick-message-file__rename-input {\n flex: 1;\n border: none;\n background: transparent;\n padding: 0.35rem 0;\n font-size: 0.875rem;\n color: inherit;\n}\n\n.quick-message-file__rename-input:focus {\n outline: none;\n}\n\n.quick-message-file__rename-extension {\n font-size: 0.875rem;\n font-weight: 500;\n color: inherit;\n opacity: 0.75;\n white-space: nowrap;\n}\n","import { Component, Event, EventEmitter, Host, Listen, Prop, State, Watch, h } from '@stencil/core';\nimport dayjs from 'dayjs';\nimport { createQuickMessageLibraryFiles, deleteQuickMessageLibraryFile, getQuickMessageLibraryFiles, updateQuickMessageLibraryFileName } from '../../api/quick-message';\nimport type { QuickMessageLibraryFilePayload } from '../../api/type';\nimport { QuickMessageLibraryFile } from '../../store/type';\nimport { configStore } from '../../store/store';\nimport { useTranslation } from '../../utils/utils';\nimport { Icon } from '../internal-component/icon';\nimport { uploadFile } from '../../utils/upload';\nimport { DIALOG_TYPE, handleError as showErrorDialog, openDialog } from '../../store/dialog';\n\n@Component({\n tag: 'quick-message-file',\n styleUrl: 'quick-message-file.css',\n})\nexport class QuickMessageFileComponent {\n @Prop() handleClose?: () => void;\n @Prop() value?: string | QuickMessageLibraryFile[];\n @Prop() isMaster: boolean = false;\n\n @State() private searchFile = '';\n @State() private files: QuickMessageLibraryFile[] = [];\n @State() private isLoading = false;\n @State() private isLoadingMore = false;\n @State() private isUploading = false;\n @State() private isDeleting = false;\n @State() private totalFiles = 0;\n @State() private totalPages = 0;\n @State() private renameTargetId: string | null = null;\n @State() private renameName = '';\n @State() private renameExtension = '';\n @State() private isRenaming = false;\n @State() private openMenuId: string | null = null;\n\n private readonly allowedFileExtensions = ['pdf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt', 'csv', 'zip', 'rar', '7z'];\n private readonly pageSize = 15;\n private readonly localUploadPrefix = 'uploaded-file-';\n private page = 1;\n private currentSearch = '';\n\n private fileInput?: HTMLInputElement;\n @Event({ bubbles: true, composed: true }) filesChange!: EventEmitter<QuickMessageLibraryFile[]>;\n @Event({ bubbles: true, composed: true }) sendFiles!: EventEmitter<QuickMessageLibraryFile[]>;\n\n private pendingDeleteFileIds: string[] = [];\n\n // Memoization cache for filtered files\n private cachedFilteredFiles: QuickMessageLibraryFile[] | null = null;\n private cachedSearchTerm: string = '';\n private cachedFilesLength: number = 0;\n\n @Listen('click', { target: 'document' })\n protected handleDocumentClick(event: Event) {\n const target = event.target as HTMLElement | null;\n\n if (target?.closest('[data-quick-message-file-menu-root]')) {\n return;\n }\n\n this.openMenuId = null;\n }\n\n componentWillLoad() {\n this.syncFilesFromProp(this.value);\n }\n\n async componentDidLoad() {\n await this.fetchFiles({ reset: true });\n }\n\n @Watch('value')\n protected handleValueChange(newValue?: string | QuickMessageLibraryFile[]) {\n this.syncFilesFromProp(newValue);\n }\n\n private syncFilesFromProp(value?: string | QuickMessageLibraryFile[]) {\n if (value === undefined || value === null) {\n this.setFiles([], false);\n return;\n }\n\n const parsed = this.parseFilesValue(value);\n this.setFiles(parsed, false);\n }\n\n private parseFilesValue(value: string | QuickMessageLibraryFile[]): QuickMessageLibraryFile[] {\n if (typeof value === 'string') {\n try {\n const deserialized = JSON.parse(value) as QuickMessageLibraryFile[];\n return this.cloneFiles(deserialized);\n } catch (error: unknown) {\n console.warn('[quick-message-file] Failed to parse files value', error);\n return [];\n }\n }\n\n return this.cloneFiles(value);\n }\n\n private cloneFiles(files: QuickMessageLibraryFile[]): QuickMessageLibraryFile[] {\n return (files || []).map(file => ({\n ...file,\n isSelected: file.isSelected ?? false,\n }));\n }\n\n private setFiles(next: QuickMessageLibraryFile[], shouldEmit = true) {\n this.files = next;\n if (shouldEmit) {\n const payload = this.cloneFiles(next);\n this.filesChange.emit(payload);\n }\n }\n\n private isLocalUpload(file: QuickMessageLibraryFile): boolean {\n return file.id.startsWith(this.localUploadPrefix);\n }\n\n private getRemoteFileCount(): number {\n return this.files.filter(file => !this.isLocalUpload(file)).length;\n }\n\n private mergeFetchedFiles(fetched: QuickMessageLibraryFile[], reset: boolean): QuickMessageLibraryFile[] {\n const localUploads = this.files.filter(file => this.isLocalUpload(file));\n const selectionMap = new Map(this.files.map(file => [file.id, file.isSelected ?? false]));\n\n const normalizedFetched = fetched.map(file => ({\n ...file,\n isSelected: selectionMap.get(file.id) ?? file.isSelected ?? false,\n }));\n\n if (reset) {\n return [...localUploads, ...normalizedFetched];\n }\n\n const existingRemote = this.files.filter(file => !this.isLocalUpload(file));\n const remoteIndexMap = new Map<string, number>();\n existingRemote.forEach((file, index) => {\n remoteIndexMap.set(file.id, index);\n });\n\n const nextRemote = [...existingRemote];\n normalizedFetched.forEach(file => {\n const existingIndex = remoteIndexMap.get(file.id);\n if (existingIndex !== undefined) {\n nextRemote[existingIndex] = file;\n } else {\n remoteIndexMap.set(file.id, nextRemote.length);\n nextRemote.push(file);\n }\n });\n\n return [...localUploads, ...nextRemote];\n }\n\n /**\n * Memoized file filtering - only recalculates when search term or files change\n * Performance: Reduces operations from 60fps to only when user types\n */\n private filterFiles(): QuickMessageLibraryFile[] {\n const search = this.searchFile.trim().toLowerCase();\n\n // Quick return for no search\n if (!search) return this.files;\n\n // Check if we can use cached results\n if (this.cachedFilteredFiles && search === this.cachedSearchTerm && this.files.length === this.cachedFilesLength) {\n return this.cachedFilteredFiles;\n }\n\n // Recalculate filtered results\n const filtered = this.files.filter(file => file.name.toLowerCase().includes(search));\n\n // Update cache\n this.cachedFilteredFiles = filtered;\n this.cachedSearchTerm = search;\n this.cachedFilesLength = this.files.length;\n\n return filtered;\n }\n\n private splitFileName(name: string): { base: string; extension: string } {\n const lastDotIndex = name.lastIndexOf('.');\n if (lastDotIndex <= 0 || lastDotIndex === name.length - 1) {\n return { base: name, extension: '' };\n }\n\n return {\n base: name.slice(0, lastDotIndex),\n extension: name.slice(lastDotIndex),\n };\n }\n\n private getRenameTarget(): QuickMessageLibraryFile | undefined {\n if (!this.renameTargetId) {\n return undefined;\n }\n\n return this.files.find(file => file.id === this.renameTargetId);\n }\n\n private openRenameModal(file: QuickMessageLibraryFile, event?: Event) {\n event?.preventDefault();\n event?.stopPropagation();\n\n const { base, extension } = this.splitFileName(file.name);\n this.renameTargetId = file.id;\n this.renameName = base;\n this.renameExtension = extension;\n }\n\n private closeRenameModal(force = false) {\n if (this.isRenaming && !force) {\n return;\n }\n\n this.renameTargetId = null;\n this.renameName = '';\n this.renameExtension = '';\n }\n\n private toggleMenu(fileId: string, event: Event) {\n event.preventDefault();\n event.stopPropagation();\n\n this.openMenuId = this.openMenuId === fileId ? null : fileId;\n }\n\n private closeMenu() {\n this.openMenuId = null;\n }\n\n private handleMenuRename(file: QuickMessageLibraryFile, event: Event) {\n event.preventDefault();\n event.stopPropagation();\n\n this.closeMenu();\n this.openRenameModal(file, event);\n }\n\n private requestDeleteFile(file: QuickMessageLibraryFile, event: Event) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.isDeleting) {\n return;\n }\n\n this.pendingDeleteFileIds = [file.id];\n this.closeMenu();\n\n const t = useTranslation();\n\n openDialog({\n open: true,\n type: DIALOG_TYPE.WARNING,\n title: t('quick_message.delete_item_confirmation'),\n buttonName: t('confirm'),\n cancelButtonName: t('cancel'),\n onSubmitDialog: () => {\n void this.confirmDeleteSelectedFiles();\n },\n onCloseDialog: () => {\n this.pendingDeleteFileIds = [];\n },\n });\n }\n\n private handleRenameInput(event: Event) {\n const value = (event.target as HTMLInputElement).value;\n\n if (this.renameExtension && value.toLowerCase().endsWith(this.renameExtension.toLowerCase())) {\n this.renameName = value.slice(0, -this.renameExtension.length);\n return;\n }\n\n this.renameName = value;\n }\n\n private async handleRenameSubmit(event: Event) {\n event.preventDefault();\n\n const target = this.getRenameTarget();\n\n if (!target) {\n return;\n }\n\n const trimmedBase = this.renameName.trim();\n\n if (!trimmedBase) {\n return;\n }\n\n const nextName = this.renameExtension ? `${trimmedBase}${this.renameExtension}` : trimmedBase;\n\n if (nextName === target.name) {\n this.closeRenameModal(true);\n return;\n }\n\n if (this.isLocalUpload(target)) {\n this.setFiles(\n this.files.map(file =>\n file.id === target.id\n ? {\n ...file,\n name: nextName,\n }\n : file,\n ),\n );\n\n this.closeRenameModal(true);\n return;\n }\n\n this.isRenaming = true;\n\n try {\n const updated = await updateQuickMessageLibraryFileName({ id: target.id, name: nextName });\n this.setFiles(\n this.files.map(file =>\n file.id === target.id\n ? {\n ...file,\n name: updated.name,\n last_updated_at: updated.last_updated_at,\n last_updated_by: updated.last_updated_by,\n }\n : file,\n ),\n );\n this.closeRenameModal(true);\n } catch (error: unknown) {\n showErrorDialog(error, '[quick-message-file] Failed to rename file');\n } finally {\n this.isRenaming = false;\n }\n }\n\n private toggleFileSelection(id: string) {\n this.setFiles(this.files.map(file => (file.id === id ? { ...file, isSelected: !file.isSelected } : file)));\n }\n\n private toggleSelectAllFiles() {\n const isAllSelected = this.files.length > 0 && this.files.every(file => file.isSelected);\n this.setFiles(this.files.map(file => ({ ...file, isSelected: !isAllSelected })));\n }\n\n private triggerFileUpload() {\n this.fileInput?.click();\n }\n\n private handleFileSelection(event: Event) {\n const input = event.target as HTMLInputElement;\n if (!input.files || input.files.length === 0) return;\n\n const validFiles = Array.from(input.files).filter(file => {\n const extension = file.name.split('.').pop()?.toLowerCase();\n return extension && this.allowedFileExtensions.includes(extension);\n });\n\n input.value = '';\n\n if (validFiles.length === 0) {\n return;\n }\n\n void this.uploadAndCreateFiles(validFiles);\n }\n\n private async uploadAndCreateFiles(files: File[]) {\n if (files.length === 0) {\n return;\n }\n\n this.isUploading = true;\n\n try {\n const payload: QuickMessageLibraryFilePayload[] = [];\n\n for (const file of files) {\n const uploadUrl = await uploadFile({\n file,\n filename: file.name.replaceAll(' ', '-'),\n folder: 'zignal/quick-message-library/file',\n });\n\n if (!uploadUrl) {\n continue;\n }\n\n payload.push({\n file_type: 'file',\n name: file.name,\n url: uploadUrl,\n size: file.size,\n });\n }\n\n if (payload.length > 0) {\n await createQuickMessageLibraryFiles({ files: payload });\n await this.fetchFiles({ reset: true });\n }\n } catch (error: unknown) {\n showErrorDialog(error, '[quick-message-file] Failed to upload files');\n } finally {\n this.isUploading = false;\n }\n }\n\n private renderFileMeta(size: number, createdAt: string, t: (key: string, values?: Record<string, string>) => string) {\n const sizeKb = Math.round(size / 1024);\n return `${sizeKb} KB · ${t('quick_message.created_at').replace('{date}', dayjs(createdAt).tz().format('DD/MM/YYYY HH:mm'))}`;\n }\n\n private handleSendFiles() {\n const selected = this.files.filter(file => file.isSelected);\n if (selected.length === 0) return;\n const payload = this.cloneFiles(selected);\n this.sendFiles.emit(payload);\n this.handleClose?.();\n }\n\n private requestDeleteSelectedFiles() {\n if (this.isDeleting) {\n return;\n }\n\n const selectedIds = this.files.filter(file => file.isSelected).map(file => file.id);\n\n if (selectedIds.length === 0) {\n return;\n }\n\n this.pendingDeleteFileIds = selectedIds;\n\n const t = useTranslation();\n\n openDialog({\n open: true,\n type: DIALOG_TYPE.WARNING,\n title: t('quick_message.delete_selected_items_confirmation'),\n buttonName: t('confirm'),\n cancelButtonName: t('cancel'),\n onSubmitDialog: () => {\n void this.confirmDeleteSelectedFiles();\n },\n onCloseDialog: () => {\n this.pendingDeleteFileIds = [];\n },\n });\n }\n\n private async confirmDeleteSelectedFiles() {\n if (this.isDeleting) {\n return;\n }\n\n const pendingIds = [...this.pendingDeleteFileIds];\n this.pendingDeleteFileIds = [];\n\n if (pendingIds.length === 0) {\n return;\n }\n\n const pendingSet = new Set(pendingIds);\n const remoteIds = this.files.filter(file => pendingSet.has(file.id) && !this.isLocalUpload(file)).map(file => file.id);\n\n this.isDeleting = true;\n\n try {\n if (remoteIds.length > 0) {\n await deleteQuickMessageLibraryFile({ ids: remoteIds });\n }\n\n const remaining = this.files.filter(file => !pendingSet.has(file.id));\n this.setFiles(remaining);\n\n if (remoteIds.length > 0) {\n this.totalFiles = Math.max(0, this.totalFiles - remoteIds.length);\n await this.fetchFiles({ reset: true });\n }\n } catch (error: unknown) {\n showErrorDialog(error, '[quick-message-file] Failed to delete files');\n } finally {\n this.isDeleting = false;\n }\n }\n\n private async fetchFiles({ search, reset = true }: { search?: string; reset?: boolean } = {}) {\n const businessId = configStore.get('businessId');\n const shopId = configStore.get('shopId');\n\n if (!businessId || !shopId) {\n return;\n }\n\n if (reset ? this.isLoading : this.isLoadingMore) {\n return;\n }\n\n const searchSource = search !== undefined ? search : reset ? this.searchFile : this.currentSearch;\n const trimmedSearch = searchSource?.trim() ?? '';\n const nextPage = reset ? 1 : this.page + 1;\n\n if (search !== undefined) {\n this.searchFile = searchSource ?? '';\n }\n\n if (reset) {\n this.isLoading = true;\n } else {\n this.isLoadingMore = true;\n }\n\n try {\n const response = await getQuickMessageLibraryFiles({\n fileType: 'file',\n search: trimmedSearch ? trimmedSearch : undefined,\n page: nextPage,\n limit: this.pageSize,\n });\n\n const fetched = this.cloneFiles(response.files || []);\n const merged = this.mergeFetchedFiles(fetched, reset);\n\n this.page = response.page > 0 ? response.page : nextPage;\n const resolvedTotalPages = response.total_pages > 0 ? response.total_pages : fetched.length > 0 ? 1 : 0;\n this.totalPages = resolvedTotalPages;\n this.totalFiles = typeof response.total === 'number' ? response.total : fetched.length;\n this.currentSearch = trimmedSearch;\n\n this.setFiles(merged);\n } catch (error: unknown) {\n console.error('[quick-message-file] Failed to fetch files', error);\n } finally {\n if (reset) {\n this.isLoading = false;\n } else {\n this.isLoadingMore = false;\n }\n }\n }\n\n private async loadMoreFiles() {\n if (this.isLoading || this.isLoadingMore) {\n return;\n }\n\n if (this.totalPages === 0 || this.page >= this.totalPages) {\n return;\n }\n\n if (this.totalFiles > 0) {\n const remoteCount = this.getRemoteFileCount();\n if (remoteCount >= this.totalFiles) {\n return;\n }\n }\n\n await this.fetchFiles({ reset: false });\n }\n\n private handleScroll(event: Event) {\n const target = event.target as HTMLElement | null;\n if (!target) {\n return;\n }\n\n const remaining = target.scrollHeight - target.scrollTop - target.clientHeight;\n if (remaining < 160) {\n void this.loadMoreFiles();\n }\n }\n\n private handleSearchInput(event: Event) {\n const value = (event.target as HTMLInputElement).value;\n this.searchFile = value;\n\n if (!value.trim() && this.currentSearch && !this.isLoading && !this.isLoadingMore) {\n void this.fetchFiles({ search: '', reset: true });\n }\n }\n\n private async handleSearchSubmit(event?: Event) {\n event?.preventDefault();\n await this.fetchFiles({ search: this.searchFile, reset: true });\n }\n\n private clearSearch() {\n if (!this.searchFile) {\n return;\n }\n\n this.searchFile = '';\n if (this.currentSearch) {\n void this.fetchFiles({ search: '', reset: true });\n }\n }\n\n private renderRenameModal(theme: string, labels: { renameLabel: string; nameLabel: string; saveLabel: string; cancelLabel: string; closeLabel: string }) {\n const target = this.getRenameTarget();\n\n if (!this.renameTargetId || !target) {\n return null;\n }\n\n const trimmedBase = this.renameName.trim();\n const nextName = this.renameExtension ? `${trimmedBase}${this.renameExtension}` : trimmedBase;\n const isSaveDisabled = this.isRenaming || trimmedBase.length === 0 || nextName === target.name;\n const inputId = `quick-message-file-rename-${target.id}`;\n\n return (\n <div class=\"quick-message-file__rename-overlay\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"quick-message-file-rename-title\" onClick={() => this.closeRenameModal()}>\n <div class={`quick-message-file__rename-modal z-background-${theme} z-text-${theme}`} onClick={event => event.stopPropagation()}>\n <div class=\"quick-message-file__rename-header\">\n <h3 id=\"quick-message-file-rename-title\" class=\"text-base font-semibold\">\n {labels.renameLabel}\n </h3>\n <button type=\"button\" class=\"quick-message-file__rename-close\" onClick={() => this.closeRenameModal()} aria-label={labels.closeLabel} disabled={this.isRenaming}>\n <Icon name=\"X\" />\n </button>\n </div>\n <form class=\"flex flex-col gap-4\" onSubmit={event => this.handleRenameSubmit(event)}>\n <label class=\"flex flex-col gap-2 text-sm\" htmlFor={inputId}>\n <span class=\"font-medium\">{labels.nameLabel}</span>\n <div class={`quick-message-file__rename-input-row border z-border-divider-${theme} z-background-${theme}`}>\n <input\n id={inputId}\n type=\"text\"\n class={`quick-message-file__rename-input z-text-${theme}`}\n value={this.renameName}\n onInput={event => this.handleRenameInput(event)}\n />\n {this.renameExtension && <span class=\"quick-message-file__rename-extension\">{this.renameExtension}</span>}\n </div>\n </label>\n <div class=\"flex justify-end gap-2 text-sm\">\n <button type=\"button\" class=\"quick-message-file__rename-cancel\" onClick={() => this.closeRenameModal()} disabled={this.isRenaming}>\n {labels.cancelLabel}\n </button>\n <button type=\"submit\" class=\"quick-message-file__rename-save\" disabled={isSaveDisabled}>\n {this.isRenaming ? <Icon name=\"Loader2\" addClass=\"size-4 animate-spin\" /> : labels.saveLabel}\n </button>\n </div>\n </form>\n </div>\n </div>\n );\n }\n\n disconnectedCallback() {\n // this.objectUrls.forEach((url) => URL.revokeObjectURL(url));\n // this.objectUrls = [];\n }\n\n render() {\n const theme = configStore.get('theme');\n const t = useTranslation();\n const filteredFiles = this.filterFiles();\n const isInitialLoading = this.isLoading && this.files.length === 0;\n const hasSelection = this.files.some(file => file.isSelected);\n const renameLabel = t('quick_message.rename_item');\n const deleteLabel = t('remove');\n const nameLabel = t('quick_message.name');\n const saveLabel = t('save');\n const cancelLabel = t('cancel');\n const closeLabel = t('close');\n\n return (\n <Host class=\"flex min-h-0 flex-1 flex-col gap-4\">\n <form class=\"w-full\" onSubmit={event => this.handleSearchSubmit(event)}>\n <div class=\"relative\">\n <input\n type=\"text\"\n class={`w-full border z-border-divider-${theme} text-sm px-4 py-2 pr-9 rounded-lg ring-primary focus:outline-none focus:border-primary z-background-${theme} z-text-${theme}`}\n placeholder={t('quick_message.search_file')}\n value={this.searchFile}\n onInput={event => this.handleSearchInput(event)}\n />\n {this.searchFile && (\n <button\n type=\"button\"\n class=\"absolute right-2 top-1/2 -translate-y-1/2 text-xs text-gray-400 hover:text-gray-600\"\n onClick={() => this.clearSearch()}\n aria-label={t('clear') || 'Clear'}\n >\n <Icon name=\"X\" />\n </button>\n )}\n </div>\n </form>\n\n <div class=\"flex items-center justify-between\">\n {this.files.length > 0 ? (\n <label class=\"inline-flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" checked={this.files.length > 0 && this.files.every(file => file.isSelected)} onChange={() => this.toggleSelectAllFiles()} />\n <span>{t('select_all')}</span>\n </label>\n ) : (\n <span />\n )}\n <div class=\"flex items-center gap-2\">\n <input\n class=\"hidden\"\n type=\"file\"\n multiple\n accept={this.allowedFileExtensions.map(extension => `.${extension}`).join(',')}\n ref={el => (this.fileInput = el as HTMLInputElement)}\n onChange={event => this.handleFileSelection(event)}\n />\n <button\n type=\"button\"\n class=\"quick-message-file__action-button inline-flex h-9 w-9 items-center justify-center rounded-lg cursor-pointer\"\n onClick={() => !this.isUploading && this.triggerFileUpload()}\n aria-label={t('quick_message.add_file')}\n disabled={this.isUploading}\n >\n {this.isUploading ? <Icon name=\"Loader2\" addClass=\"size-4 animate-spin\" /> : <Icon name=\"Plus\" />}\n </button>\n </div>\n </div>\n\n {this.isUploading && (\n <div class={`flex items-center gap-2 text-xs z-text-primary-${theme}`}>\n <Icon name=\"Loader2\" addClass=\"size-4 animate-spin\" />\n <span>{t('quick_message.uploading') || 'Uploading...'}</span>\n </div>\n )}\n\n {isInitialLoading ? (\n <div class={`flex flex-1 items-center justify-center text-sm z-text-gray-${theme}`}>Loading...</div>\n ) : filteredFiles.length === 0 ? (\n <div class={`flex flex-1 items-center justify-center text-sm z-text-gray-${theme}`}>{t('quick_message.file_empty')}</div>\n ) : (\n <div class=\"flex flex-1 flex-col gap-2.5 overflow-y-auto\" onScroll={event => this.handleScroll(event)}>\n {filteredFiles.map(file => (\n <label class=\"flex items-center gap-3 rounded-xl px-3 py-2.5\" key={file.id}>\n <input type=\"checkbox\" checked={!!file.isSelected} onChange={() => this.toggleFileSelection(file.id)} />\n <div class=\"quick-message-file__icon flex h-10 w-10 items-center justify-center rounded-xl\">\n <Icon name=\"File\" />\n </div>\n <div class=\"flex flex-1 items-center gap-3 min-w-0\">\n <div class=\"flex min-w-0 flex-col gap-1\">\n <div class=\"text-sm font-semibold line-clamp-2 break-words\">{file.name}</div>\n <div class={`text-xs z-text-gray-${theme}`}>{this.renderFileMeta(file.size, file.created_at, t)}</div>\n </div>\n <div class=\"quick-message-file__menu-wrapper\" data-quick-message-file-menu-root=\"\">\n <button\n type=\"button\"\n class=\"quick-message-file__list-more-button\"\n onClick={event => this.toggleMenu(file.id, event)}\n aria-haspopup=\"menu\"\n aria-expanded={this.openMenuId === file.id ? 'true' : 'false'}\n aria-label={renameLabel}\n data-quick-message-file-menu-root=\"\"\n >\n <Icon name=\"MoreVertical\" addClass=\"size-4\" />\n </button>\n {this.openMenuId === file.id && (\n <div class={`quick-message-file__menu z-background-${theme} z-text-${theme}`} role=\"menu\" data-quick-message-file-menu-root=\"\">\n <button type=\"button\" class=\"quick-message-file__menu-item\" role=\"menuitem\" onClick={event => this.handleMenuRename(file, event)}>\n {renameLabel}\n </button>\n <button\n type=\"button\"\n class=\"quick-message-file__menu-item quick-message-file__menu-item--danger\"\n role=\"menuitem\"\n onClick={event => this.requestDeleteFile(file, event)}\n >\n {deleteLabel}\n </button>\n </div>\n )}\n </div>\n </div>\n </label>\n ))}\n {this.isLoadingMore && <div class={`py-3 text-center text-xs z-text-gray-${theme}`}>Loading...</div>}\n </div>\n )}\n\n <div class={`mt-auto flex items-center gap-2 pt-2`}>\n {hasSelection && (\n <button\n type=\"button\"\n class={`quick-message-file__action-button inline-flex h-9 w-9 items-center justify-center rounded-lg cursor-pointer disabled:cursor-not-allowed disabled:opacity-40`}\n onClick={() => this.requestDeleteSelectedFiles()}\n aria-label={t('remove')}\n disabled={this.isDeleting}\n >\n {this.isDeleting ? <Icon name=\"Loader2\" addClass=\"size-4 animate-spin\" /> : <Icon name=\"Trash2\" />}\n </button>\n )}\n {!this.isMaster && (\n <button\n type=\"button\"\n disabled={!hasSelection}\n class={`quick-message-file__send ml-auto inline-flex items-center justify-center rounded-full px-4 py-2 text-xs font-semibold z-background-primary-${theme} text-white disabled:cursor-not-allowed disabled:opacity-40 cursor-pointer`}\n onClick={() => this.handleSendFiles()}\n >\n {t('quick_message.send_files')}\n </button>\n )}\n </div>\n {this.renderRenameModal(theme, { renameLabel, nameLabel, saveLabel, cancelLabel, closeLabel })}\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"p-CH39HrFZ.js","mappings":";;;;;;;;AAAA,MAAM,mBAAmB,GAAG,qzqDAAqzqD;;MCep0qD,yBAAyB,iBAAAA,kBAAA,CAAA,MAAA,yBAAA,SAAAC,CAAA,CAAA;;;;;;;;;AAC5B,IAAA,WAAW;AACX,IAAA,KAAK;IACL,QAAQ,GAAY,KAAK;IAEhB,UAAU,GAAG,EAAE;IACf,KAAK,GAA8B,EAAE;IACrC,SAAS,GAAG,KAAK;IACjB,aAAa,GAAG,KAAK;IACrB,WAAW,GAAG,KAAK;IACnB,UAAU,GAAG,KAAK;IAClB,UAAU,GAAG,CAAC;IACd,UAAU,GAAG,CAAC;IACd,cAAc,GAAkB,IAAI;IACpC,UAAU,GAAG,EAAE;IACf,eAAe,GAAG,EAAE;IACpB,UAAU,GAAG,KAAK;IAClB,UAAU,GAAkB,IAAI;IAEhC,qBAAqB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;IAC9G,QAAQ,GAAG,EAAE;IACb,iBAAiB,GAAG,gBAAgB;IAC7C,IAAI,GAAG,CAAC;IACR,aAAa,GAAG,EAAE;AAElB,IAAA,SAAS;AACyB,IAAA,WAAW;AACX,IAAA,SAAS;IAE3C,oBAAoB,GAAa,EAAE;;IAGnC,mBAAmB,GAAqC,IAAI;IAC5D,gBAAgB,GAAW,EAAE;IAC7B,iBAAiB,GAAW,CAAC;AAG3B,IAAA,mBAAmB,CAAC,KAAY,EAAA;AACxC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA4B;AAEjD,QAAA,IAAI,MAAM,EAAE,OAAO,CAAC,qCAAqC,CAAC,EAAE;YAC1D;;AAGF,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;;IAGxB,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGpC,IAAA,MAAM,gBAAgB,GAAA;QACpB,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;;AAI9B,IAAA,iBAAiB,CAAC,QAA6C,EAAA;AACvE,QAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;;AAG1B,IAAA,iBAAiB,CAAC,KAA0C,EAAA;QAClE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AACzC,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;YACxB;;QAGF,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;;AAGtB,IAAA,eAAe,CAAC,KAAyC,EAAA;AAC/D,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,IAAI;gBACF,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAA8B;AACnE,gBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;;YACpC,OAAO,KAAc,EAAE;AACvB,gBAAA,OAAO,CAAC,IAAI,CAAC,kDAAkD,EAAE,KAAK,CAAC;AACvE,gBAAA,OAAO,EAAE;;;AAIb,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;;AAGvB,IAAA,UAAU,CAAC,KAAgC,EAAA;AACjD,QAAA,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,KAAK;AAChC,YAAA,GAAG,IAAI;AACP,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK;AACrC,SAAA,CAAC,CAAC;;AAGG,IAAA,QAAQ,CAAC,IAA+B,EAAE,UAAU,GAAG,IAAI,EAAA;AACjE,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACjB,IAAI,UAAU,EAAE;YACd,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACrC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;;;AAI1B,IAAA,aAAa,CAAC,IAA6B,EAAA;QACjD,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC;;IAG3C,kBAAkB,GAAA;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;;IAG5D,iBAAiB,CAAC,OAAkC,EAAE,KAAc,EAAA;AAC1E,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACxE,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC;QAEzF,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK;AAC7C,YAAA,GAAG,IAAI;AACP,YAAA,UAAU,EAAE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK;AAClE,SAAA,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE;AACT,YAAA,OAAO,CAAC,GAAG,YAAY,EAAE,GAAG,iBAAiB,CAAC;;QAGhD,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAC3E,QAAA,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB;QAChD,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;YACrC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC;AACpC,SAAC,CAAC;AAEF,QAAA,MAAM,UAAU,GAAG,CAAC,GAAG,cAAc,CAAC;AACtC,QAAA,iBAAiB,CAAC,OAAO,CAAC,IAAI,IAAG;YAC/B,MAAM,aAAa,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACjD,YAAA,IAAI,aAAa,KAAK,SAAS,EAAE;AAC/B,gBAAA,UAAU,CAAC,aAAa,CAAC,GAAG,IAAI;;iBAC3B;gBACL,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,MAAM,CAAC;AAC9C,gBAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEzB,SAAC,CAAC;AAEF,QAAA,OAAO,CAAC,GAAG,YAAY,EAAE,GAAG,UAAU,CAAC;;AAGzC;;;AAGG;IACK,WAAW,GAAA;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;;AAGnD,QAAA,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,KAAK;;QAG9B,IAAI,IAAI,CAAC,mBAAmB,IAAI,MAAM,KAAK,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,iBAAiB,EAAE;YAChH,OAAO,IAAI,CAAC,mBAAmB;;;QAIjC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;;AAGpF,QAAA,IAAI,CAAC,mBAAmB,GAAG,QAAQ;AACnC,QAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM;QAC9B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;AAE1C,QAAA,OAAO,QAAQ;;AAGT,IAAA,aAAa,CAAC,IAAY,EAAA;QAChC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AAC1C,QAAA,IAAI,YAAY,IAAI,CAAC,IAAI,YAAY,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACzD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;;QAGtC,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;AACjC,YAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;SACpC;;IAGK,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,OAAO,SAAS;;AAGlB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC;;IAGzD,eAAe,CAAC,IAA6B,EAAE,KAAa,EAAA;QAClE,KAAK,EAAE,cAAc,EAAE;QACvB,KAAK,EAAE,eAAe,EAAE;AAExB,QAAA,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AACzD,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE;AAC7B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,SAAS;;IAG1B,gBAAgB,CAAC,KAAK,GAAG,KAAK,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,EAAE;YAC7B;;AAGF,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;IAGnB,UAAU,CAAC,MAAc,EAAE,KAAY,EAAA;QAC7C,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,KAAK,MAAM,GAAG,IAAI,GAAG,MAAM;;IAGtD,SAAS,GAAA;AACf,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;;IAGhB,gBAAgB,CAAC,IAA6B,EAAE,KAAY,EAAA;QAClE,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;QAEvB,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC;;IAG3B,iBAAiB,CAAC,IAA6B,EAAE,KAAY,EAAA;QACnE,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB;;QAGF,IAAI,CAAC,oBAAoB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,SAAS,EAAE;AAEhB,QAAA,MAAM,CAAC,GAAG,cAAc,EAAE;AAE1B,QAAA,UAAU,CAAC;AACT,YAAA,IAAI,EAAE,IAAI;YACV,IAAI,EAAqB,SAAA;AACzB,YAAA,KAAK,EAAE,CAAC,CAAC,wCAAwC,CAAC;AAClD,YAAA,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC;AACxB,YAAA,gBAAgB,EAAE,CAAC,CAAC,QAAQ,CAAC;YAC7B,cAAc,EAAE,MAAK;AACnB,gBAAA,KAAK,IAAI,CAAC,0BAA0B,EAAE;aACvC;YACD,aAAa,EAAE,MAAK;AAClB,gBAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE;aAC/B;AACF,SAAA,CAAC;;AAGI,IAAA,iBAAiB,CAAC,KAAY,EAAA;AACpC,QAAA,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AAEtD,QAAA,IAAI,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,EAAE;AAC5F,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;YAC9D;;AAGF,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;IAGjB,MAAM,kBAAkB,CAAC,KAAY,EAAA;QAC3C,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;QAErC,IAAI,CAAC,MAAM,EAAE;YACX;;QAGF,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;QAE1C,IAAI,CAAC,WAAW,EAAE;YAChB;;AAGF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,GAAG,CAAA,EAAG,WAAW,CAAG,EAAA,IAAI,CAAC,eAAe,CAAA,CAAE,GAAG,WAAW;AAE7F,QAAA,IAAI,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE;AAC5B,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAC3B;;AAGF,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,QAAQ,CACX,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IACjB,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC;AACjB,kBAAE;AACA,oBAAA,GAAG,IAAI;AACP,oBAAA,IAAI,EAAE,QAAQ;AACf;AACD,kBAAE,IAAI,CACT,CACF;AAED,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAC3B;;AAGF,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AAEtB,QAAA,IAAI;AACF,YAAA,MAAM,OAAO,GAAG,MAAM,iCAAiC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC1F,YAAA,IAAI,CAAC,QAAQ,CACX,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IACjB,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC;AACjB,kBAAE;AACA,oBAAA,GAAG,IAAI;oBACP,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,eAAe,EAAE,OAAO,CAAC,eAAe;oBACxC,eAAe,EAAE,OAAO,CAAC,eAAe;AACzC;AACD,kBAAE,IAAI,CACT,CACF;AACD,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;;QAC3B,OAAO,KAAc,EAAE;AACvB,YAAAC,WAAe,CAAC,KAAK,EAAE,4CAA4C,CAAC;;gBAC5D;AACR,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;;AAInB,IAAA,mBAAmB,CAAC,EAAU,EAAA;AACpC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;;IAGpG,oBAAoB,GAAA;QAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC;QACxF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;;IAG1E,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE;;AAGjB,IAAA,mBAAmB,CAAC,KAAY,EAAA;AACtC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;QAC9C,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;AAE9C,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,IAAG;AACvD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE;YAC3D,OAAO,SAAS,IAAI,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC;AACpE,SAAC,CAAC;AAEF,QAAA,KAAK,CAAC,KAAK,GAAG,EAAE;AAEhB,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3B;;AAGF,QAAA,KAAK,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC;;IAGpC,MAAM,oBAAoB,CAAC,KAAa,EAAA;AAC9C,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB;;AAGF,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AAEvB,QAAA,IAAI;YACF,MAAM,OAAO,GAAqC,EAAE;AAEpD,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,gBAAA,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC;oBACjC,IAAI;oBACJ,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;AACxC,oBAAA,MAAM,EAAE,mCAAmC;AAC5C,iBAAA,CAAC;gBAEF,IAAI,CAAC,SAAS,EAAE;oBACd;;gBAGF,OAAO,CAAC,IAAI,CAAC;AACX,oBAAA,SAAS,EAAE,MAAM;oBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,oBAAA,GAAG,EAAE,SAAS;oBACd,IAAI,EAAE,IAAI,CAAC,IAAI;AAChB,iBAAA,CAAC;;AAGJ,YAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBACtB,MAAM,8BAA8B,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;gBACxD,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;;;QAExC,OAAO,KAAc,EAAE;AACvB,YAAAA,WAAe,CAAC,KAAK,EAAE,6CAA6C,CAAC;;gBAC7D;AACR,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;;;AAIpB,IAAA,cAAc,CAAC,IAAY,EAAE,SAAiB,EAAE,CAA2D,EAAA;QACjH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QACtC,OAAO,CAAA,EAAG,MAAM,CAAA,MAAA,EAAS,CAAC,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAA,CAAE;;IAGtH,eAAe,GAAA;AACrB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC;AAC3D,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,IAAI;;IAGd,0BAA0B,GAAA;AAChC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB;;QAGF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;AAEnF,QAAA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B;;AAGF,QAAA,IAAI,CAAC,oBAAoB,GAAG,WAAW;AAEvC,QAAA,MAAM,CAAC,GAAG,cAAc,EAAE;AAE1B,QAAA,UAAU,CAAC;AACT,YAAA,IAAI,EAAE,IAAI;YACV,IAAI,EAAqB,SAAA;AACzB,YAAA,KAAK,EAAE,CAAC,CAAC,kDAAkD,CAAC;AAC5D,YAAA,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC;AACxB,YAAA,gBAAgB,EAAE,CAAC,CAAC,QAAQ,CAAC;YAC7B,cAAc,EAAE,MAAK;AACnB,gBAAA,KAAK,IAAI,CAAC,0BAA0B,EAAE;aACvC;YACD,aAAa,EAAE,MAAK;AAClB,gBAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE;aAC/B;AACF,SAAA,CAAC;;AAGI,IAAA,MAAM,0BAA0B,GAAA;AACtC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB;;QAGF,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC;AACjD,QAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE;AAE9B,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3B;;AAGF,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC;AACtC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;AAEtH,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AAEtB,QAAA,IAAI;AACF,YAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gBACxB,MAAM,6BAA6B,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;;YAGzD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrE,YAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AAExB,YAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC;gBACjE,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;;;QAExC,OAAO,KAAc,EAAE;AACvB,YAAAA,WAAe,CAAC,KAAK,EAAE,6CAA6C,CAAC;;gBAC7D;AACR,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;;IAInB,MAAM,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,GAAG,IAAI,EAAA,GAA2C,EAAE,EAAA;QAC1F,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC;QAChD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;AAExC,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,EAAE;YAC1B;;AAGF,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;YAC/C;;QAGF,MAAM,YAAY,GAAG,MAAM,KAAK,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa;QACjG,MAAM,aAAa,GAAG,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE;AAChD,QAAA,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC;AAE1C,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,YAAA,IAAI,CAAC,UAAU,GAAG,YAAY,IAAI,EAAE;;QAGtC,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;;aAChB;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;AAG3B,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAAC;AACjD,gBAAA,QAAQ,EAAE,MAAM;gBAChB,MAAM,EAAE,aAAa,GAAG,aAAa,GAAG,SAAS;AACjD,gBAAA,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,IAAI,CAAC,QAAQ;AACrB,aAAA,CAAC;AAEF,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;YACrD,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC;AAErD,YAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,QAAQ;AACxD,YAAA,MAAM,kBAAkB,GAAG,QAAQ,CAAC,WAAW,GAAG,CAAC,GAAG,QAAQ,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AACvG,YAAA,IAAI,CAAC,UAAU,GAAG,kBAAkB;YACpC,IAAI,CAAC,UAAU,GAAG,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,GAAG,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM;AACtF,YAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AAElC,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;;QACrB,OAAO,KAAc,EAAE;AACvB,YAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC;;gBAC1D;YACR,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;iBACjB;AACL,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;;;;AAKxB,IAAA,MAAM,aAAa,GAAA;QACzB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,EAAE;YACxC;;AAGF,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;YACzD;;AAGF,QAAA,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE;AACvB,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE;AAC7C,YAAA,IAAI,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE;gBAClC;;;QAIJ,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;;AAGjC,IAAA,YAAY,CAAC,KAAY,EAAA;AAC/B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA4B;QACjD,IAAI,CAAC,MAAM,EAAE;YACX;;AAGF,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,YAAY;AAC9E,QAAA,IAAI,SAAS,GAAG,GAAG,EAAE;AACnB,YAAA,KAAK,IAAI,CAAC,aAAa,EAAE;;;AAIrB,IAAA,iBAAiB,CAAC,KAAY,EAAA;AACpC,QAAA,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AACtD,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QAEvB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACjF,YAAA,KAAK,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;;;IAI7C,MAAM,kBAAkB,CAAC,KAAa,EAAA;QAC5C,KAAK,EAAE,cAAc,EAAE;AACvB,QAAA,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;;IAGzD,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB;;AAGF,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,KAAK,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;;;IAI7C,iBAAiB,CAAC,KAAa,EAAE,MAA8G,EAAA;AACrJ,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;QAErC,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,MAAM,EAAE;AACnC,YAAA,OAAO,IAAI;;QAGb,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AAC1C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,GAAG,CAAA,EAAG,WAAW,CAAG,EAAA,IAAI,CAAC,eAAe,CAAA,CAAE,GAAG,WAAW;AAC7F,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,MAAM,CAAC,IAAI;AAC9F,QAAA,MAAM,OAAO,GAAG,CAAA,0BAAA,EAA6B,MAAM,CAAC,EAAE,EAAE;AAExD,QAAA,QACE,WAAK,KAAK,EAAC,oCAAoC,EAAC,IAAI,EAAC,QAAQ,EAAY,YAAA,EAAA,MAAM,qBAAiB,iCAAiC,EAAC,OAAO,EAAE,MAAM,IAAI,CAAC,gBAAgB,EAAE,EAAA,EACtK,CAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,iDAAiD,KAAK,CAAA,QAAA,EAAW,KAAK,CAAA,CAAE,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC,eAAe,EAAE,EAAA,EAC7H,CAAK,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,mCAAmC,EAAA,EAC5C,CAAI,CAAA,IAAA,EAAA,EAAA,EAAE,EAAC,iCAAiC,EAAC,KAAK,EAAC,yBAAyB,EACrE,EAAA,MAAM,CAAC,WAAW,CAChB,EACL,CAAQ,CAAA,QAAA,EAAA,EAAA,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,kCAAkC,EAAC,OAAO,EAAE,MAAM,IAAI,CAAC,gBAAgB,EAAE,EAAA,YAAA,EAAc,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAA,EAC7J,CAAA,CAAC,IAAI,EAAC,EAAA,IAAI,EAAC,GAAG,EAAA,CAAG,CACV,CACL,EACN,CAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAC,qBAAqB,EAAC,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAA,EACjF,CAAA,CAAA,OAAA,EAAA,EAAO,KAAK,EAAC,6BAA6B,EAAC,OAAO,EAAE,OAAO,EAAA,EACzD,CAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAC,aAAa,IAAE,MAAM,CAAC,SAAS,CAAQ,EACnD,CAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,gEAAgE,KAAK,CAAA,cAAA,EAAiB,KAAK,CAAE,CAAA,EAAA,EACvG,CAAA,CAAA,OAAA,EAAA,EACE,EAAE,EAAE,OAAO,EACX,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,CAAA,wCAAA,EAA2C,KAAK,CAAE,CAAA,EACzD,KAAK,EAAE,IAAI,CAAC,UAAU,EACtB,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAC/C,CAAA,EACD,IAAI,CAAC,eAAe,IAAI,CAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAC,sCAAsC,EAAA,EAAE,IAAI,CAAC,eAAe,CAAQ,CACrG,CACA,EACR,CAAK,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,gCAAgC,EAAA,EACzC,CAAQ,CAAA,QAAA,EAAA,EAAA,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,mCAAmC,EAAC,OAAO,EAAE,MAAM,IAAI,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,EAC9H,EAAA,MAAM,CAAC,WAAW,CACZ,EACT,CAAA,CAAA,QAAA,EAAA,EAAQ,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,iCAAiC,EAAC,QAAQ,EAAE,cAAc,IACnF,IAAI,CAAC,UAAU,GAAG,CAAC,CAAA,IAAI,EAAC,EAAA,IAAI,EAAC,SAAS,EAAC,QAAQ,EAAC,qBAAqB,GAAG,GAAG,MAAM,CAAC,SAAS,CACrF,CACL,CACD,CACH,CACF;;IAIV,oBAAoB,GAAA;;;;IAKpB,MAAM,GAAA;QACJ,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;AACtC,QAAA,MAAM,CAAC,GAAG,cAAc,EAAE;AAC1B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE;AACxC,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;AAClE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC;AAC7D,QAAA,MAAM,WAAW,GAAG,CAAC,CAAC,2BAA2B,CAAC;AAClD,QAAA,MAAM,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC;AAC/B,QAAA,MAAM,SAAS,GAAG,CAAC,CAAC,oBAAoB,CAAC;AACzC,QAAA,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;AAC3B,QAAA,MAAM,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC;AAC/B,QAAA,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC;AAE7B,QAAA,QACE,CAAC,CAAA,IAAI,EAAC,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,oCAAoC,EAAA,EAC9C,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAC,QAAQ,EAAC,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAA,EACpE,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,UAAU,EAAA,EACnB,CAAA,CAAA,OAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,CAAkC,+BAAA,EAAA,KAAK,CAAwG,qGAAA,EAAA,KAAK,CAAW,QAAA,EAAA,KAAK,CAAE,CAAA,EAC7K,WAAW,EAAE,CAAC,CAAC,2BAA2B,CAAC,EAC3C,KAAK,EAAE,IAAI,CAAC,UAAU,EACtB,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAC/C,CAAA,EACD,IAAI,CAAC,UAAU,KACd,CACE,CAAA,QAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,qFAAqF,EAC3F,OAAO,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE,EACrB,YAAA,EAAA,CAAC,CAAC,OAAO,CAAC,IAAI,OAAO,EAAA,EAEjC,CAAC,CAAA,IAAI,qDAAC,IAAI,EAAC,GAAG,EAAG,CAAA,CACV,CACV,CACG,CACD,EAEP,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,mCAAmC,EAAA,EAC3C,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IACpB,CAAO,CAAA,OAAA,EAAA,EAAA,KAAK,EAAC,wCAAwC,EAAA,EACnD,CAAA,CAAA,OAAA,EAAA,EAAO,IAAI,EAAC,UAAU,EAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC,oBAAoB,EAAE,EAAI,CAAA,EACnJ,CAAA,CAAA,MAAA,EAAA,IAAA,EAAO,CAAC,CAAC,YAAY,CAAC,CAAQ,CACxB,KAER,CAAA,CAAA,MAAA,EAAA,IAAA,CAAQ,CACT,EACD,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,yBAAyB,EAAA,EAClC,CACE,CAAA,OAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,QAAQ,EACd,IAAI,EAAC,MAAM,EACX,QAAQ,EACR,IAAA,EAAA,MAAM,EAAE,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,IAAI,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAC9E,GAAG,EAAE,EAAE,KAAK,IAAI,CAAC,SAAS,GAAG,EAAsB,CAAC,EACpD,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAClD,CAAA,EACF,CAAA,CAAA,QAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,6GAA6G,EACnH,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAChD,YAAA,EAAA,CAAC,CAAC,wBAAwB,CAAC,EACvC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAEzB,EAAA,IAAI,CAAC,WAAW,GAAG,CAAA,CAAC,IAAI,EAAA,EAAC,IAAI,EAAC,SAAS,EAAC,QAAQ,EAAC,qBAAqB,EAAG,CAAA,GAAG,CAAC,CAAA,IAAI,EAAC,EAAA,IAAI,EAAC,MAAM,EAAG,CAAA,CAC1F,CACL,CACF,EAEL,IAAI,CAAC,WAAW,KACf,4DAAK,KAAK,EAAE,CAAkD,+CAAA,EAAA,KAAK,CAAE,CAAA,EAAA,EACnE,CAAC,CAAA,IAAI,qDAAC,IAAI,EAAC,SAAS,EAAC,QAAQ,EAAC,qBAAqB,EAAG,CAAA,EACtD,CAAO,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EAAA,CAAC,CAAC,yBAAyB,CAAC,IAAI,cAAc,CAAQ,CACzD,CACP,EAEA,gBAAgB,IACf,CAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,CAAA,4DAAA,EAA+D,KAAK,CAAE,CAAA,EAAA,EAAA,YAAA,CAAkB,IAClG,aAAa,CAAC,MAAM,KAAK,CAAC,IAC5B,CAAK,CAAA,KAAA,EAAA,EAAA,KAAK,EAAE,+DAA+D,KAAK,CAAA,CAAE,EAAA,EAAG,CAAC,CAAC,0BAA0B,CAAC,CAAO,KAEzH,CAAK,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,8CAA8C,EAAC,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAA,EAClG,aAAa,CAAC,GAAG,CAAC,IAAI,KACrB,CAAO,CAAA,OAAA,EAAA,EAAA,KAAK,EAAC,gDAAgD,EAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAA,EACxE,CAAO,CAAA,OAAA,EAAA,EAAA,IAAI,EAAC,UAAU,EAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAI,CAAA,EACxG,CAAK,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,gFAAgF,EAAA,EACzF,CAAA,CAAC,IAAI,EAAC,EAAA,IAAI,EAAC,MAAM,GAAG,CAChB,EACN,CAAK,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,wCAAwC,EAAA,EACjD,CAAK,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,6BAA6B,EAAA,EACtC,CAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,gDAAgD,IAAE,IAAI,CAAC,IAAI,CAAO,EAC7E,CAAK,CAAA,KAAA,EAAA,EAAA,KAAK,EAAE,CAAA,oBAAA,EAAuB,KAAK,CAAA,CAAE,EAAG,EAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAO,CAClG,EACN,CAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,kCAAkC,EAAA,mCAAA,EAAmC,EAAE,EAAA,EAChF,CACE,CAAA,QAAA,EAAA,EAAA,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,sCAAsC,EAC5C,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,EAAA,eAAA,EACnC,MAAM,EACL,eAAA,EAAA,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,GAAG,MAAM,GAAG,OAAO,EAAA,YAAA,EACjD,WAAW,EAAA,mCAAA,EACW,EAAE,EAAA,EAEpC,CAAC,CAAA,IAAI,EAAC,EAAA,IAAI,EAAC,cAAc,EAAC,QAAQ,EAAC,QAAQ,EAAA,CAAG,CACvC,EACR,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,KAC1B,CAAK,CAAA,KAAA,EAAA,EAAA,KAAK,EAAE,CAAA,sCAAA,EAAyC,KAAK,CAAA,QAAA,EAAW,KAAK,CAAA,CAAE,EAAE,IAAI,EAAC,MAAM,EAAA,mCAAA,EAAmC,EAAE,EAAA,EAC5H,CAAA,CAAA,QAAA,EAAA,EAAQ,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,+BAA+B,EAAC,IAAI,EAAC,UAAU,EAAC,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,EAC7H,EAAA,WAAW,CACL,EACT,CAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,qEAAqE,EAC3E,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,EAAA,EAEpD,WAAW,CACL,CACL,CACP,CACG,CACF,CACA,CACT,CAAC,EACD,IAAI,CAAC,aAAa,IAAI,CAAK,CAAA,KAAA,EAAA,EAAA,KAAK,EAAE,CAAwC,qCAAA,EAAA,KAAK,CAAE,CAAA,EAAkB,EAAA,YAAA,CAAA,CAChG,CACP,EAED,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAE,CAAsC,oCAAA,CAAA,EAAA,EAC/C,YAAY,KACX,CACE,CAAA,QAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,CAAA,2JAAA,CAA6J,EACpK,OAAO,EAAE,MAAM,IAAI,CAAC,0BAA0B,EAAE,EACpC,YAAA,EAAA,CAAC,CAAC,QAAQ,CAAC,EACvB,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAA,EAExB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAA,IAAI,EAAC,EAAA,IAAI,EAAC,SAAS,EAAC,QAAQ,EAAC,qBAAqB,EAAG,CAAA,GAAG,CAAC,CAAA,IAAI,EAAC,EAAA,IAAI,EAAC,QAAQ,EAAG,CAAA,CAC3F,CACV,EACA,CAAC,IAAI,CAAC,QAAQ,KACb,+DACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,YAAY,EACvB,KAAK,EAAE,CAAA,2IAAA,EAA8I,KAAK,CAAA,0EAAA,CAA4E,EACtO,OAAO,EAAE,MAAM,IAAI,CAAC,eAAe,EAAE,IAEpC,CAAC,CAAC,0BAA0B,CAAC,CACvB,CACV,CACG,EACL,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CACzF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["__stencil_proxyCustomElement","HTMLElement","showErrorDialog"],"sources":["src/components/quick-message-file/quick-message-file.css?tag=quick-message-file","src/components/quick-message-file/quick-message-file.tsx"],"sourcesContent":[":host {\n position: relative;\n}\n\n.quick-message-file__icon {\n background: var(--quick-modal-primary-ghost);\n color: var(--quick-modal-primary);\n}\n\n.quick-message-file__action-button {\n border: 1px solid rgba(148, 163, 184, 0.4);\n background: transparent;\n}\n\n.quick-message-file__send {\n background: var(--quick-modal-primary);\n color: #fff;\n border: none;\n}\n\n.quick-message-file__list-more-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0.25rem;\n border-radius: 0.5rem;\n border: none;\n background: transparent;\n color: inherit;\n cursor: pointer;\n margin-left: auto;\n}\n\n.quick-message-file__list-more-button:hover {\n background: rgba(148, 163, 184, 0.12);\n}\n\n.quick-message-file__menu-wrapper {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-left: auto;\n}\n\n.quick-message-file__menu {\n position: absolute;\n top: calc(100% + 0.5rem);\n right: 0;\n display: flex;\n flex-direction: column;\n min-width: 8rem;\n padding: 0.25rem 0;\n border-radius: 0.75rem;\n border: 1px solid rgba(148, 163, 184, 0.18);\n box-shadow: 0 16px 30px rgba(15, 23, 42, 0.2);\n z-index: 40;\n overflow: hidden;\n}\n\n.quick-message-file__menu-item {\n display: flex;\n width: 100%;\n align-items: center;\n justify-content: flex-start;\n gap: 0.5rem;\n padding: 0.5rem 0.9rem;\n border: none;\n background: transparent;\n color: inherit;\n font-size: 0.8125rem;\n line-height: 1.2;\n cursor: pointer;\n text-align: left;\n transition: background-color 0.2s ease;\n}\n\n.quick-message-file__menu-item:hover {\n background: rgba(148, 163, 184, 0.14);\n}\n\n.quick-message-file__menu-item--danger {\n color: #ef4444;\n}\n\n.quick-message-file__menu-item--danger:hover {\n background: rgba(239, 68, 68, 0.12);\n}\n\n.quick-message-file__rename-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(15, 23, 42, 0.45);\n padding: 1.5rem;\n z-index: 20;\n}\n\n.quick-message-file__rename-modal {\n width: 100%;\n max-width: 22rem;\n border-radius: 0.75rem;\n box-shadow: 0 20px 45px rgba(15, 23, 42, 0.25);\n padding: 1.5rem;\n}\n\n.quick-message-file__rename-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 1rem;\n}\n\n.quick-message-file__rename-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n color: inherit;\n border-radius: 0.5rem;\n padding: 0.25rem;\n cursor: pointer;\n}\n\n.quick-message-file__rename-close:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.quick-message-file__rename-cancel,\n.quick-message-file__rename-save {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 9999px;\n padding: 0.35rem 0.9rem;\n border: none;\n cursor: pointer;\n transition: opacity 0.2s ease;\n}\n\n.quick-message-file__rename-cancel {\n background: transparent;\n color: inherit;\n border: 1px solid rgba(148, 163, 184, 0.4);\n}\n\n.quick-message-file__rename-save {\n background: var(--quick-modal-primary);\n color: #fff;\n}\n\n.quick-message-file__rename-save:disabled,\n.quick-message-file__rename-cancel:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n.quick-message-file__rename-input-row {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.35rem 0.75rem;\n border-radius: 0.75rem;\n transition:\n border-color 0.2s ease,\n box-shadow 0.2s ease;\n}\n\n.quick-message-file__rename-input-row:focus-within {\n border-color: var(--quick-modal-primary);\n box-shadow: 0 0 0 1px var(--quick-modal-primary);\n}\n\n.quick-message-file__rename-input {\n flex: 1;\n border: none;\n background: transparent;\n padding: 0.35rem 0;\n font-size: 0.875rem;\n color: inherit;\n}\n\n.quick-message-file__rename-input:focus {\n outline: none;\n}\n\n.quick-message-file__rename-extension {\n font-size: 0.875rem;\n font-weight: 500;\n color: inherit;\n opacity: 0.75;\n white-space: nowrap;\n}\n","import { Component, Event, EventEmitter, Host, Listen, Prop, State, Watch, h } from '@stencil/core';\nimport dayjs from 'dayjs';\nimport { createQuickMessageLibraryFiles, deleteQuickMessageLibraryFile, getQuickMessageLibraryFiles, updateQuickMessageLibraryFileName } from '../../api/quick-message';\nimport type { QuickMessageLibraryFilePayload } from '../../api/type';\nimport { QuickMessageLibraryFile } from '../../store/type';\nimport { configStore } from '../../store/store';\nimport { useTranslation } from '../../utils/utils';\nimport { Icon } from '../internal-component/icon';\nimport { uploadFile } from '../../utils/upload';\nimport { DIALOG_TYPE, handleError as showErrorDialog, openDialog } from '../../store/dialog';\n\n@Component({\n tag: 'quick-message-file',\n styleUrl: 'quick-message-file.css',\n})\nexport class QuickMessageFileComponent {\n @Prop() handleClose?: () => void;\n @Prop() value?: string | QuickMessageLibraryFile[];\n @Prop() isMaster: boolean = false;\n\n @State() private searchFile = '';\n @State() private files: QuickMessageLibraryFile[] = [];\n @State() private isLoading = false;\n @State() private isLoadingMore = false;\n @State() private isUploading = false;\n @State() private isDeleting = false;\n @State() private totalFiles = 0;\n @State() private totalPages = 0;\n @State() private renameTargetId: string | null = null;\n @State() private renameName = '';\n @State() private renameExtension = '';\n @State() private isRenaming = false;\n @State() private openMenuId: string | null = null;\n\n private readonly allowedFileExtensions = ['pdf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt', 'csv', 'zip', 'rar', '7z'];\n private readonly pageSize = 15;\n private readonly localUploadPrefix = 'uploaded-file-';\n private page = 1;\n private currentSearch = '';\n\n private fileInput?: HTMLInputElement;\n @Event({ bubbles: true, composed: true }) filesChange!: EventEmitter<QuickMessageLibraryFile[]>;\n @Event({ bubbles: true, composed: true }) sendFiles!: EventEmitter<QuickMessageLibraryFile[]>;\n\n private pendingDeleteFileIds: string[] = [];\n\n // Memoization cache for filtered files\n private cachedFilteredFiles: QuickMessageLibraryFile[] | null = null;\n private cachedSearchTerm: string = '';\n private cachedFilesLength: number = 0;\n\n @Listen('click', { target: 'document' })\n protected handleDocumentClick(event: Event) {\n const target = event.target as HTMLElement | null;\n\n if (target?.closest('[data-quick-message-file-menu-root]')) {\n return;\n }\n\n this.openMenuId = null;\n }\n\n componentWillLoad() {\n this.syncFilesFromProp(this.value);\n }\n\n async componentDidLoad() {\n await this.fetchFiles({ reset: true });\n }\n\n @Watch('value')\n protected handleValueChange(newValue?: string | QuickMessageLibraryFile[]) {\n this.syncFilesFromProp(newValue);\n }\n\n private syncFilesFromProp(value?: string | QuickMessageLibraryFile[]) {\n if (value === undefined || value === null) {\n this.setFiles([], false);\n return;\n }\n\n const parsed = this.parseFilesValue(value);\n this.setFiles(parsed, false);\n }\n\n private parseFilesValue(value: string | QuickMessageLibraryFile[]): QuickMessageLibraryFile[] {\n if (typeof value === 'string') {\n try {\n const deserialized = JSON.parse(value) as QuickMessageLibraryFile[];\n return this.cloneFiles(deserialized);\n } catch (error: unknown) {\n console.warn('[quick-message-file] Failed to parse files value', error);\n return [];\n }\n }\n\n return this.cloneFiles(value);\n }\n\n private cloneFiles(files: QuickMessageLibraryFile[]): QuickMessageLibraryFile[] {\n return (files || []).map(file => ({\n ...file,\n isSelected: file.isSelected ?? false,\n }));\n }\n\n private setFiles(next: QuickMessageLibraryFile[], shouldEmit = true) {\n this.files = next;\n if (shouldEmit) {\n const payload = this.cloneFiles(next);\n this.filesChange.emit(payload);\n }\n }\n\n private isLocalUpload(file: QuickMessageLibraryFile): boolean {\n return file.id.startsWith(this.localUploadPrefix);\n }\n\n private getRemoteFileCount(): number {\n return this.files.filter(file => !this.isLocalUpload(file)).length;\n }\n\n private mergeFetchedFiles(fetched: QuickMessageLibraryFile[], reset: boolean): QuickMessageLibraryFile[] {\n const localUploads = this.files.filter(file => this.isLocalUpload(file));\n const selectionMap = new Map(this.files.map(file => [file.id, file.isSelected ?? false]));\n\n const normalizedFetched = fetched.map(file => ({\n ...file,\n isSelected: selectionMap.get(file.id) ?? file.isSelected ?? false,\n }));\n\n if (reset) {\n return [...localUploads, ...normalizedFetched];\n }\n\n const existingRemote = this.files.filter(file => !this.isLocalUpload(file));\n const remoteIndexMap = new Map<string, number>();\n existingRemote.forEach((file, index) => {\n remoteIndexMap.set(file.id, index);\n });\n\n const nextRemote = [...existingRemote];\n normalizedFetched.forEach(file => {\n const existingIndex = remoteIndexMap.get(file.id);\n if (existingIndex !== undefined) {\n nextRemote[existingIndex] = file;\n } else {\n remoteIndexMap.set(file.id, nextRemote.length);\n nextRemote.push(file);\n }\n });\n\n return [...localUploads, ...nextRemote];\n }\n\n /**\n * Memoized file filtering - only recalculates when search term or files change\n * Performance: Reduces operations from 60fps to only when user types\n */\n private filterFiles(): QuickMessageLibraryFile[] {\n const search = this.searchFile.trim().toLowerCase();\n\n // Quick return for no search\n if (!search) return this.files;\n\n // Check if we can use cached results\n if (this.cachedFilteredFiles && search === this.cachedSearchTerm && this.files.length === this.cachedFilesLength) {\n return this.cachedFilteredFiles;\n }\n\n // Recalculate filtered results\n const filtered = this.files.filter(file => file.name.toLowerCase().includes(search));\n\n // Update cache\n this.cachedFilteredFiles = filtered;\n this.cachedSearchTerm = search;\n this.cachedFilesLength = this.files.length;\n\n return filtered;\n }\n\n private splitFileName(name: string): { base: string; extension: string } {\n const lastDotIndex = name.lastIndexOf('.');\n if (lastDotIndex <= 0 || lastDotIndex === name.length - 1) {\n return { base: name, extension: '' };\n }\n\n return {\n base: name.slice(0, lastDotIndex),\n extension: name.slice(lastDotIndex),\n };\n }\n\n private getRenameTarget(): QuickMessageLibraryFile | undefined {\n if (!this.renameTargetId) {\n return undefined;\n }\n\n return this.files.find(file => file.id === this.renameTargetId);\n }\n\n private openRenameModal(file: QuickMessageLibraryFile, event?: Event) {\n event?.preventDefault();\n event?.stopPropagation();\n\n const { base, extension } = this.splitFileName(file.name);\n this.renameTargetId = file.id;\n this.renameName = base;\n this.renameExtension = extension;\n }\n\n private closeRenameModal(force = false) {\n if (this.isRenaming && !force) {\n return;\n }\n\n this.renameTargetId = null;\n this.renameName = '';\n this.renameExtension = '';\n }\n\n private toggleMenu(fileId: string, event: Event) {\n event.preventDefault();\n event.stopPropagation();\n\n this.openMenuId = this.openMenuId === fileId ? null : fileId;\n }\n\n private closeMenu() {\n this.openMenuId = null;\n }\n\n private handleMenuRename(file: QuickMessageLibraryFile, event: Event) {\n event.preventDefault();\n event.stopPropagation();\n\n this.closeMenu();\n this.openRenameModal(file, event);\n }\n\n private requestDeleteFile(file: QuickMessageLibraryFile, event: Event) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.isDeleting) {\n return;\n }\n\n this.pendingDeleteFileIds = [file.id];\n this.closeMenu();\n\n const t = useTranslation();\n\n openDialog({\n open: true,\n type: DIALOG_TYPE.WARNING,\n title: t('quick_message.delete_item_confirmation'),\n buttonName: t('confirm'),\n cancelButtonName: t('cancel'),\n onSubmitDialog: () => {\n void this.confirmDeleteSelectedFiles();\n },\n onCloseDialog: () => {\n this.pendingDeleteFileIds = [];\n },\n });\n }\n\n private handleRenameInput(event: Event) {\n const value = (event.target as HTMLInputElement).value;\n\n if (this.renameExtension && value.toLowerCase().endsWith(this.renameExtension.toLowerCase())) {\n this.renameName = value.slice(0, -this.renameExtension.length);\n return;\n }\n\n this.renameName = value;\n }\n\n private async handleRenameSubmit(event: Event) {\n event.preventDefault();\n\n const target = this.getRenameTarget();\n\n if (!target) {\n return;\n }\n\n const trimmedBase = this.renameName.trim();\n\n if (!trimmedBase) {\n return;\n }\n\n const nextName = this.renameExtension ? `${trimmedBase}${this.renameExtension}` : trimmedBase;\n\n if (nextName === target.name) {\n this.closeRenameModal(true);\n return;\n }\n\n if (this.isLocalUpload(target)) {\n this.setFiles(\n this.files.map(file =>\n file.id === target.id\n ? {\n ...file,\n name: nextName,\n }\n : file,\n ),\n );\n\n this.closeRenameModal(true);\n return;\n }\n\n this.isRenaming = true;\n\n try {\n const updated = await updateQuickMessageLibraryFileName({ id: target.id, name: nextName });\n this.setFiles(\n this.files.map(file =>\n file.id === target.id\n ? {\n ...file,\n name: updated.name,\n last_updated_at: updated.last_updated_at,\n last_updated_by: updated.last_updated_by,\n }\n : file,\n ),\n );\n this.closeRenameModal(true);\n } catch (error: unknown) {\n showErrorDialog(error, '[quick-message-file] Failed to rename file');\n } finally {\n this.isRenaming = false;\n }\n }\n\n private toggleFileSelection(id: string) {\n this.setFiles(this.files.map(file => (file.id === id ? { ...file, isSelected: !file.isSelected } : file)));\n }\n\n private toggleSelectAllFiles() {\n const isAllSelected = this.files.length > 0 && this.files.every(file => file.isSelected);\n this.setFiles(this.files.map(file => ({ ...file, isSelected: !isAllSelected })));\n }\n\n private triggerFileUpload() {\n this.fileInput?.click();\n }\n\n private handleFileSelection(event: Event) {\n const input = event.target as HTMLInputElement;\n if (!input.files || input.files.length === 0) return;\n\n const validFiles = Array.from(input.files).filter(file => {\n const extension = file.name.split('.').pop()?.toLowerCase();\n return extension && this.allowedFileExtensions.includes(extension);\n });\n\n input.value = '';\n\n if (validFiles.length === 0) {\n return;\n }\n\n void this.uploadAndCreateFiles(validFiles);\n }\n\n private async uploadAndCreateFiles(files: File[]) {\n if (files.length === 0) {\n return;\n }\n\n this.isUploading = true;\n\n try {\n const payload: QuickMessageLibraryFilePayload[] = [];\n\n for (const file of files) {\n const uploadUrl = await uploadFile({\n file,\n filename: file.name.replaceAll(' ', '-'),\n folder: 'zignal/quick-message-library/file',\n });\n\n if (!uploadUrl) {\n continue;\n }\n\n payload.push({\n file_type: 'file',\n name: file.name,\n url: uploadUrl,\n size: file.size,\n });\n }\n\n if (payload.length > 0) {\n await createQuickMessageLibraryFiles({ files: payload });\n await this.fetchFiles({ reset: true });\n }\n } catch (error: unknown) {\n showErrorDialog(error, '[quick-message-file] Failed to upload files');\n } finally {\n this.isUploading = false;\n }\n }\n\n private renderFileMeta(size: number, createdAt: string, t: (key: string, values?: Record<string, string>) => string) {\n const sizeKb = Math.round(size / 1024);\n return `${sizeKb} KB · ${t('quick_message.created_at').replace('{date}', dayjs(createdAt).tz().format('DD/MM/YYYY HH:mm'))}`;\n }\n\n private handleSendFiles() {\n const selected = this.files.filter(file => file.isSelected);\n if (selected.length === 0) return;\n const payload = this.cloneFiles(selected);\n this.sendFiles.emit(payload);\n this.handleClose?.();\n }\n\n private requestDeleteSelectedFiles() {\n if (this.isDeleting) {\n return;\n }\n\n const selectedIds = this.files.filter(file => file.isSelected).map(file => file.id);\n\n if (selectedIds.length === 0) {\n return;\n }\n\n this.pendingDeleteFileIds = selectedIds;\n\n const t = useTranslation();\n\n openDialog({\n open: true,\n type: DIALOG_TYPE.WARNING,\n title: t('quick_message.delete_selected_items_confirmation'),\n buttonName: t('confirm'),\n cancelButtonName: t('cancel'),\n onSubmitDialog: () => {\n void this.confirmDeleteSelectedFiles();\n },\n onCloseDialog: () => {\n this.pendingDeleteFileIds = [];\n },\n });\n }\n\n private async confirmDeleteSelectedFiles() {\n if (this.isDeleting) {\n return;\n }\n\n const pendingIds = [...this.pendingDeleteFileIds];\n this.pendingDeleteFileIds = [];\n\n if (pendingIds.length === 0) {\n return;\n }\n\n const pendingSet = new Set(pendingIds);\n const remoteIds = this.files.filter(file => pendingSet.has(file.id) && !this.isLocalUpload(file)).map(file => file.id);\n\n this.isDeleting = true;\n\n try {\n if (remoteIds.length > 0) {\n await deleteQuickMessageLibraryFile({ ids: remoteIds });\n }\n\n const remaining = this.files.filter(file => !pendingSet.has(file.id));\n this.setFiles(remaining);\n\n if (remoteIds.length > 0) {\n this.totalFiles = Math.max(0, this.totalFiles - remoteIds.length);\n await this.fetchFiles({ reset: true });\n }\n } catch (error: unknown) {\n showErrorDialog(error, '[quick-message-file] Failed to delete files');\n } finally {\n this.isDeleting = false;\n }\n }\n\n private async fetchFiles({ search, reset = true }: { search?: string; reset?: boolean } = {}) {\n const businessId = configStore.get('businessId');\n const shopId = configStore.get('shopId');\n\n if (!businessId || !shopId) {\n return;\n }\n\n if (reset ? this.isLoading : this.isLoadingMore) {\n return;\n }\n\n const searchSource = search !== undefined ? search : reset ? this.searchFile : this.currentSearch;\n const trimmedSearch = searchSource?.trim() ?? '';\n const nextPage = reset ? 1 : this.page + 1;\n\n if (search !== undefined) {\n this.searchFile = searchSource ?? '';\n }\n\n if (reset) {\n this.isLoading = true;\n } else {\n this.isLoadingMore = true;\n }\n\n try {\n const response = await getQuickMessageLibraryFiles({\n fileType: 'file',\n search: trimmedSearch ? trimmedSearch : undefined,\n page: nextPage,\n limit: this.pageSize,\n });\n\n const fetched = this.cloneFiles(response.files || []);\n const merged = this.mergeFetchedFiles(fetched, reset);\n\n this.page = response.page > 0 ? response.page : nextPage;\n const resolvedTotalPages = response.total_pages > 0 ? response.total_pages : fetched.length > 0 ? 1 : 0;\n this.totalPages = resolvedTotalPages;\n this.totalFiles = typeof response.total === 'number' ? response.total : fetched.length;\n this.currentSearch = trimmedSearch;\n\n this.setFiles(merged);\n } catch (error: unknown) {\n console.error('[quick-message-file] Failed to fetch files', error);\n } finally {\n if (reset) {\n this.isLoading = false;\n } else {\n this.isLoadingMore = false;\n }\n }\n }\n\n private async loadMoreFiles() {\n if (this.isLoading || this.isLoadingMore) {\n return;\n }\n\n if (this.totalPages === 0 || this.page >= this.totalPages) {\n return;\n }\n\n if (this.totalFiles > 0) {\n const remoteCount = this.getRemoteFileCount();\n if (remoteCount >= this.totalFiles) {\n return;\n }\n }\n\n await this.fetchFiles({ reset: false });\n }\n\n private handleScroll(event: Event) {\n const target = event.target as HTMLElement | null;\n if (!target) {\n return;\n }\n\n const remaining = target.scrollHeight - target.scrollTop - target.clientHeight;\n if (remaining < 160) {\n void this.loadMoreFiles();\n }\n }\n\n private handleSearchInput(event: Event) {\n const value = (event.target as HTMLInputElement).value;\n this.searchFile = value;\n\n if (!value.trim() && this.currentSearch && !this.isLoading && !this.isLoadingMore) {\n void this.fetchFiles({ search: '', reset: true });\n }\n }\n\n private async handleSearchSubmit(event?: Event) {\n event?.preventDefault();\n await this.fetchFiles({ search: this.searchFile, reset: true });\n }\n\n private clearSearch() {\n if (!this.searchFile) {\n return;\n }\n\n this.searchFile = '';\n if (this.currentSearch) {\n void this.fetchFiles({ search: '', reset: true });\n }\n }\n\n private renderRenameModal(theme: string, labels: { renameLabel: string; nameLabel: string; saveLabel: string; cancelLabel: string; closeLabel: string }) {\n const target = this.getRenameTarget();\n\n if (!this.renameTargetId || !target) {\n return null;\n }\n\n const trimmedBase = this.renameName.trim();\n const nextName = this.renameExtension ? `${trimmedBase}${this.renameExtension}` : trimmedBase;\n const isSaveDisabled = this.isRenaming || trimmedBase.length === 0 || nextName === target.name;\n const inputId = `quick-message-file-rename-${target.id}`;\n\n return (\n <div class=\"quick-message-file__rename-overlay\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"quick-message-file-rename-title\" onClick={() => this.closeRenameModal()}>\n <div class={`quick-message-file__rename-modal z-background-${theme} z-text-${theme}`} onClick={event => event.stopPropagation()}>\n <div class=\"quick-message-file__rename-header\">\n <h3 id=\"quick-message-file-rename-title\" class=\"text-base font-semibold\">\n {labels.renameLabel}\n </h3>\n <button type=\"button\" class=\"quick-message-file__rename-close\" onClick={() => this.closeRenameModal()} aria-label={labels.closeLabel} disabled={this.isRenaming}>\n <Icon name=\"X\" />\n </button>\n </div>\n <form class=\"flex flex-col gap-4\" onSubmit={event => this.handleRenameSubmit(event)}>\n <label class=\"flex flex-col gap-2 text-sm\" htmlFor={inputId}>\n <span class=\"font-medium\">{labels.nameLabel}</span>\n <div class={`quick-message-file__rename-input-row border z-border-divider-${theme} z-background-${theme}`}>\n <input\n id={inputId}\n type=\"text\"\n class={`quick-message-file__rename-input z-text-${theme}`}\n value={this.renameName}\n onInput={event => this.handleRenameInput(event)}\n />\n {this.renameExtension && <span class=\"quick-message-file__rename-extension\">{this.renameExtension}</span>}\n </div>\n </label>\n <div class=\"flex justify-end gap-2 text-sm\">\n <button type=\"button\" class=\"quick-message-file__rename-cancel\" onClick={() => this.closeRenameModal()} disabled={this.isRenaming}>\n {labels.cancelLabel}\n </button>\n <button type=\"submit\" class=\"quick-message-file__rename-save\" disabled={isSaveDisabled}>\n {this.isRenaming ? <Icon name=\"Loader2\" addClass=\"size-4 animate-spin\" /> : labels.saveLabel}\n </button>\n </div>\n </form>\n </div>\n </div>\n );\n }\n\n disconnectedCallback() {\n // this.objectUrls.forEach((url) => URL.revokeObjectURL(url));\n // this.objectUrls = [];\n }\n\n render() {\n const theme = configStore.get('theme');\n const t = useTranslation();\n const filteredFiles = this.filterFiles();\n const isInitialLoading = this.isLoading && this.files.length === 0;\n const hasSelection = this.files.some(file => file.isSelected);\n const renameLabel = t('quick_message.rename_item');\n const deleteLabel = t('remove');\n const nameLabel = t('quick_message.name');\n const saveLabel = t('save');\n const cancelLabel = t('cancel');\n const closeLabel = t('close');\n\n return (\n <Host class=\"flex min-h-0 flex-1 flex-col gap-4\">\n <form class=\"w-full\" onSubmit={event => this.handleSearchSubmit(event)}>\n <div class=\"relative\">\n <input\n type=\"text\"\n class={`w-full border z-border-divider-${theme} text-sm px-4 py-2 pr-9 rounded-lg ring-primary focus:outline-none focus:border-primary z-background-${theme} z-text-${theme}`}\n placeholder={t('quick_message.search_file')}\n value={this.searchFile}\n onInput={event => this.handleSearchInput(event)}\n />\n {this.searchFile && (\n <button\n type=\"button\"\n class=\"absolute right-2 top-1/2 -translate-y-1/2 text-xs text-gray-400 hover:text-gray-600\"\n onClick={() => this.clearSearch()}\n aria-label={t('clear') || 'Clear'}\n >\n <Icon name=\"X\" />\n </button>\n )}\n </div>\n </form>\n\n <div class=\"flex items-center justify-between\">\n {this.files.length > 0 ? (\n <label class=\"inline-flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" checked={this.files.length > 0 && this.files.every(file => file.isSelected)} onChange={() => this.toggleSelectAllFiles()} />\n <span>{t('select_all')}</span>\n </label>\n ) : (\n <span />\n )}\n <div class=\"flex items-center gap-2\">\n <input\n class=\"hidden\"\n type=\"file\"\n multiple\n accept={this.allowedFileExtensions.map(extension => `.${extension}`).join(',')}\n ref={el => (this.fileInput = el as HTMLInputElement)}\n onChange={event => this.handleFileSelection(event)}\n />\n <button\n type=\"button\"\n class=\"quick-message-file__action-button inline-flex h-9 w-9 items-center justify-center rounded-lg cursor-pointer\"\n onClick={() => !this.isUploading && this.triggerFileUpload()}\n aria-label={t('quick_message.add_file')}\n disabled={this.isUploading}\n >\n {this.isUploading ? <Icon name=\"Loader2\" addClass=\"size-4 animate-spin\" /> : <Icon name=\"Plus\" />}\n </button>\n </div>\n </div>\n\n {this.isUploading && (\n <div class={`flex items-center gap-2 text-xs z-text-primary-${theme}`}>\n <Icon name=\"Loader2\" addClass=\"size-4 animate-spin\" />\n <span>{t('quick_message.uploading') || 'Uploading...'}</span>\n </div>\n )}\n\n {isInitialLoading ? (\n <div class={`flex flex-1 items-center justify-center text-sm z-text-gray-${theme}`}>Loading...</div>\n ) : filteredFiles.length === 0 ? (\n <div class={`flex flex-1 items-center justify-center text-sm z-text-gray-${theme}`}>{t('quick_message.file_empty')}</div>\n ) : (\n <div class=\"flex flex-1 flex-col gap-2.5 overflow-y-auto\" onScroll={event => this.handleScroll(event)}>\n {filteredFiles.map(file => (\n <label class=\"flex items-center gap-3 rounded-xl px-3 py-2.5\" key={file.id}>\n <input type=\"checkbox\" checked={!!file.isSelected} onChange={() => this.toggleFileSelection(file.id)} />\n <div class=\"quick-message-file__icon flex h-10 w-10 items-center justify-center rounded-xl\">\n <Icon name=\"File\" />\n </div>\n <div class=\"flex flex-1 items-center gap-3 min-w-0\">\n <div class=\"flex min-w-0 flex-col gap-1\">\n <div class=\"text-sm font-semibold line-clamp-2 break-words\">{file.name}</div>\n <div class={`text-xs z-text-gray-${theme}`}>{this.renderFileMeta(file.size, file.created_at, t)}</div>\n </div>\n <div class=\"quick-message-file__menu-wrapper\" data-quick-message-file-menu-root=\"\">\n <button\n type=\"button\"\n class=\"quick-message-file__list-more-button\"\n onClick={event => this.toggleMenu(file.id, event)}\n aria-haspopup=\"menu\"\n aria-expanded={this.openMenuId === file.id ? 'true' : 'false'}\n aria-label={renameLabel}\n data-quick-message-file-menu-root=\"\"\n >\n <Icon name=\"MoreVertical\" addClass=\"size-4\" />\n </button>\n {this.openMenuId === file.id && (\n <div class={`quick-message-file__menu z-background-${theme} z-text-${theme}`} role=\"menu\" data-quick-message-file-menu-root=\"\">\n <button type=\"button\" class=\"quick-message-file__menu-item\" role=\"menuitem\" onClick={event => this.handleMenuRename(file, event)}>\n {renameLabel}\n </button>\n <button\n type=\"button\"\n class=\"quick-message-file__menu-item quick-message-file__menu-item--danger\"\n role=\"menuitem\"\n onClick={event => this.requestDeleteFile(file, event)}\n >\n {deleteLabel}\n </button>\n </div>\n )}\n </div>\n </div>\n </label>\n ))}\n {this.isLoadingMore && <div class={`py-3 text-center text-xs z-text-gray-${theme}`}>Loading...</div>}\n </div>\n )}\n\n <div class={`mt-auto flex items-center gap-2 pt-2`}>\n {hasSelection && (\n <button\n type=\"button\"\n class={`quick-message-file__action-button inline-flex h-9 w-9 items-center justify-center rounded-lg cursor-pointer disabled:cursor-not-allowed disabled:opacity-40`}\n onClick={() => this.requestDeleteSelectedFiles()}\n aria-label={t('remove')}\n disabled={this.isDeleting}\n >\n {this.isDeleting ? <Icon name=\"Loader2\" addClass=\"size-4 animate-spin\" /> : <Icon name=\"Trash2\" />}\n </button>\n )}\n {!this.isMaster && (\n <button\n type=\"button\"\n disabled={!hasSelection}\n class={`quick-message-file__send ml-auto inline-flex items-center justify-center rounded-full px-4 py-2 text-xs font-semibold z-background-primary-${theme} text-white disabled:cursor-not-allowed disabled:opacity-40 cursor-pointer`}\n onClick={() => this.handleSendFiles()}\n >\n {t('quick_message.send_files')}\n </button>\n )}\n </div>\n {this.renderRenameModal(theme, { renameLabel, nameLabel, saveLabel, cancelLabel, closeLabel })}\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1,7 +1,7 @@
1
- import { g as getChat, a as getUserStatuses, b as getUserTags, c as getChats } from './p-Ca9LbW-0.js';
2
- import { C as CHAT_PAGE_LIMIT } from './p-DKrfS1S5.js';
3
- import { h as handleError } from './p-Dhuf9YNy.js';
4
- import { a as chatsStore, s as selectedChatStore, c as configStore, b as statusesStore, t as tagsStore } from './p-LsQYRhK6.js';
1
+ import { g as getChat, a as getUserStatuses, b as getUserTags, c as getChats } from './p-CB09ePCJ.js';
2
+ import { C as CHAT_PAGE_LIMIT } from './p-DwRMNFnU.js';
3
+ import { h as handleError } from './p-C2YAe0Ke.js';
4
+ import { f as filterChatsStore, a as chatsStore, s as selectedChatStore, c as configStore, b as statusesStore, t as tagsStore } from './p-x8gJGTdZ.js';
5
5
 
6
6
  async function handleGetChats(params) {
7
7
  const { start, spam, ...rest } = params;
@@ -33,6 +33,11 @@ async function handleGetChats(params) {
33
33
  async function handleGetChat(sessionId) {
34
34
  try {
35
35
  const { chat } = await getChat({ sessionId });
36
+ if (chat.spam) {
37
+ const filterChat = filterChatsStore.get('filterChat');
38
+ if (!filterChat?.spam)
39
+ return;
40
+ }
36
41
  let _chats = structuredClone(chatsStore.get('chats'));
37
42
  const existChatIndex = _chats.findIndex(item => item.id === sessionId);
38
43
  if (existChatIndex !== -1 && _chats[existChatIndex].pin === chat.pin && _chats[existChatIndex].last_message_at === chat.last_message_at) {
@@ -126,6 +131,6 @@ function getChatChannelPictureUrl(item) {
126
131
  }
127
132
 
128
133
  export { getChatName as a, getChatChannelPictureUrl as b, handleGetUserTags as c, handleGetChats as d, handleGetChat as e, getChatPicture as g, handleGetUserStatuses as h, isUnread as i };
129
- //# sourceMappingURL=p-a8Ave0b1.js.map
134
+ //# sourceMappingURL=p-CZRPZKJ-.js.map
130
135
 
131
- //# sourceMappingURL=p-a8Ave0b1.js.map
136
+ //# sourceMappingURL=p-CZRPZKJ-.js.map
@@ -0,0 +1 @@
1
+ {"file":"p-CZRPZKJ-.js","mappings":";;;;;AAOO,eAAe,cAAc,CAAC,MAAsB,EAAA;IACzD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM;IACvC,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC;AAC/C,IAAA,IAAI,KAAK,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE;IAEpC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC;AAC9C,QAAA,KAAK,EAAE,eAAe;QACtB,KAAK;AACL,QAAA,GAAG,IAAI;QACP,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,KAAA,CAAC;IAEF,IAAI,QAAQ,GAAgB,EAAE;IAE9B,IAAI,KAAK,EAAE;;AAET,QAAA,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC;;SAC5C;;QAEL,QAAQ,GAAG,KAAK;;AAGlB,IAAA,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AAE9E,IAAA,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC;AACpC,IAAA,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/B,IAAI,KAAK,EAAE;AACT,QAAA,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;;AAEjE;AAEO,eAAe,aAAa,CAAC,SAAiB,EAAA;AACnD,IAAA,IAAI;QACF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;AAC7C,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC;YACrD,IAAI,CAAC,UAAU,EAAE,IAAI;gBAAE;;QAGzB,IAAI,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACrD,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC;QAEtE,IAAI,cAAc,KAAK,EAAE,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,eAAe,KAAK,IAAI,CAAC,eAAe,EAAE;AACvI,YAAA,MAAM,CAAC,cAAc,CAAC,GAAG,IAAI;AAC7B,YAAA,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC;AAC/B,YAAA,OAAO,IAAI;;AAGb,QAAA,IAAI,cAAc,KAAK,EAAE,EAAE;AACzB,YAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,KAAK,cAAc,CAAC;;QAGhE,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;AACpF,QAAA,IAAI,WAAW,GAAG,MAAM,CAAC,MAAM;AAE/B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC;YAE7B,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;gBAChC,WAAW,GAAG,CAAC;gBACf;;YAGF,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE;gBAChC;;YAGF,MAAM,WAAW,GAAG,WAAW,CAAC,eAAe,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;AACrG,YAAA,IAAI,QAAQ,GAAG,WAAW,EAAE;gBAC1B,WAAW,GAAG,CAAC;gBACf;;;QAIJ,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC;AACnC,QAAA,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC;AAC/B,QAAA,OAAO,IAAI;;IACX,OAAO,KAAc,EAAE;AACvB,QAAA,WAAW,CAAC,KAAK,EAAE,qBAAqB,CAAC;;AAE7C;AAEO,eAAe,qBAAqB,GAAA;AACzC,IAAA,IAAI;AACF,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,eAAe,EAAE;AAC5C,QAAA,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC;AACvC,QAAA,OAAO,QAAQ;;IACf,OAAO,KAAc,EAAE;AACvB,QAAA,WAAW,CAAC,KAAK,EAAE,6BAA6B,CAAC;;AAErD;AAEO,eAAe,iBAAiB,GAAA;AACrC,IAAA,IAAI;AACF,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,WAAW,EAAE;AACpC,QAAA,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;AAC3B,QAAA,OAAO,IAAI;;IACX,OAAO,KAAc,EAAE;AACvB,QAAA,WAAW,CAAC,KAAK,EAAE,yBAAyB,CAAC;;AAEjD;SAEgB,QAAQ,GAAA;IACtB,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC;IAC1D,OAAO,YAAY,EAAE,YAAY,GAAG,CAAC,IAAI,YAAY,CAAC,cAAc;AACtE;AAEM,SAAU,WAAW,CAAC,IAAe,EAAA;AACzC,IAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE;;AAErD,IAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,QAAA,OAAO,IAAI,EAAE,KAAK,EAAE,IAAI;;AAE1B,IAAA,OAAO,EAAE;AACX;AAEM,SAAU,cAAc,CAAC,IAAe,EAAA;AAC5C,IAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE;;AAErC,IAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,QAAA,OAAO,IAAI,EAAE,KAAK,EAAE,WAAW,IAAI,EAAE;;AAEvC,IAAA,OAAO,EAAE;AACX;AAEM,SAAU,wBAAwB,CAAC,IAAe,EAAA;IACtD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;IACtC,IAAI,KAAK,GAAG,EAAE;AACd,IAAA,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;AAC7B,QAAA,KAAK,GAAG,CAAA,EAAG,KAAK,CAAA,OAAA,CAAS;;AACpB,SAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;QAChC,KAAK,GAAG,MAAM;;SACT;AACL,QAAA,KAAK,GAAG,IAAI,CAAC,OAAO;;IAEtB,OAAO,CAAA,uEAAA,EAA0E,KAAK,CAAA,IAAA,CAAM;AAC9F;;;;","names":[],"sources":["src/store/chat.ts"],"sourcesContent":["import { getChat, getChats, getUserStatuses, getUserTags } from '../api';\nimport { GetChatsParams } from '../api/type';\nimport { CHAT_PAGE_LIMIT } from '../utils/constant';\nimport { handleError } from './dialog';\nimport { chatsStore, configStore, filterChatsStore, selectedChatStore, statusesStore, tagsStore } from './store';\nimport { TChatItem } from './type';\n\nexport async function handleGetChats(params: GetChatsParams) {\n const { start, spam, ...rest } = params;\n const loadedKeys = chatsStore.get('loadedKeys');\n if (start && loadedKeys.has(start)) return;\n\n const { chats, next: nextKey } = await getChats({\n limit: CHAT_PAGE_LIMIT,\n start,\n ...rest,\n spam: spam ? spam : false,\n });\n\n let newChats: TChatItem[] = [];\n\n if (start) {\n // Scrolling Down\n newChats = [...chatsStore.get('chats'), ...chats];\n } else {\n // First load\n newChats = chats;\n }\n\n const uniqueChats = Array.from(new Map(newChats.map(m => [m.id, m])).values());\n\n chatsStore.set('chats', uniqueChats);\n chatsStore.set('next', nextKey);\n if (start) {\n chatsStore.set('loadedKeys', new Set([...loadedKeys, start]));\n }\n}\n\nexport async function handleGetChat(sessionId: string) {\n try {\n const { chat } = await getChat({ sessionId });\n if (chat.spam) {\n const filterChat = filterChatsStore.get('filterChat');\n if (!filterChat?.spam) return;\n }\n\n let _chats = structuredClone(chatsStore.get('chats'));\n const existChatIndex = _chats.findIndex(item => item.id === sessionId);\n\n if (existChatIndex !== -1 && _chats[existChatIndex].pin === chat.pin && _chats[existChatIndex].last_message_at === chat.last_message_at) {\n _chats[existChatIndex] = chat;\n chatsStore.set('chats', _chats);\n return chat;\n }\n\n if (existChatIndex !== -1) {\n _chats = _chats.filter((_, index) => index !== existChatIndex);\n }\n\n const chatTime = chat.last_message_at ? new Date(chat.last_message_at).getTime() : 0;\n let insertIndex = _chats.length;\n\n for (let i = 0; i < _chats.length; i++) {\n const currentChat = _chats[i];\n\n if (chat.pin && !currentChat.pin) {\n insertIndex = i;\n break;\n }\n\n if (!chat.pin && currentChat.pin) {\n continue;\n }\n\n const currentTime = currentChat.last_message_at ? new Date(currentChat.last_message_at).getTime() : 0;\n if (chatTime > currentTime) {\n insertIndex = i;\n break;\n }\n }\n\n _chats.splice(insertIndex, 0, chat);\n chatsStore.set('chats', _chats);\n return chat;\n } catch (error: unknown) {\n handleError(error, 'Failed to load Chat');\n }\n}\n\nexport async function handleGetUserStatuses() {\n try {\n const { statuses } = await getUserStatuses();\n statusesStore.set('statuses', statuses);\n return statuses;\n } catch (error: unknown) {\n handleError(error, 'Failed to load UserStatuses');\n }\n}\n\nexport async function handleGetUserTags() {\n try {\n const { tags } = await getUserTags();\n tagsStore.set('tags', tags);\n return tags;\n } catch (error: unknown) {\n handleError(error, 'Failed to load UserTags');\n }\n}\n\nexport function isUnread() {\n const selectedChat = selectedChatStore.get('selectedChat');\n return selectedChat?.unread_count > 0 || selectedChat.mark_as_unread;\n}\n\nexport function getChatName(item: TChatItem) {\n if (item.type === 'user') {\n return item.user?.nickname || item.user?.name || '';\n }\n if (item.type === 'group') {\n return item?.group?.name;\n }\n return '';\n}\n\nexport function getChatPicture(item: TChatItem) {\n if (item.type === 'user') {\n return item.user?.picture_url || '';\n }\n if (item.type === 'group') {\n return item?.group?.picture_url || '';\n }\n return '';\n}\n\nexport function getChatChannelPictureUrl(item: TChatItem) {\n const theme = configStore.get('theme');\n let image = '';\n if (item.channel === 'zignal') {\n image = `${theme}-zignal`;\n } else if (item.type === 'group') {\n image = 'line';\n } else {\n image = item.channel;\n }\n return `https://zwizai-platform.s3.ap-southeast-1.amazonaws.com/zignal-package/${image}.png`;\n}"],"version":3}
@@ -1,8 +1,8 @@
1
1
  import { p as proxyCustomElement, H, c as createEvent, h, F as Fragment } from './p-D_ltSEZy.js';
2
- import { c as configStore } from './p-LsQYRhK6.js';
2
+ import { c as configStore } from './p-x8gJGTdZ.js';
3
3
  import { u as useTranslation } from './p-GPPFvEYq.js';
4
4
  import { I as Icon } from './p-CErcZoEr.js';
5
- import { Z as ZButton } from './p-Khnj_GHE.js';
5
+ import { Z as ZButton } from './p-PLHiwThd.js';
6
6
  import { b as isValidVideoUrl } from './p-IgrOqwTQ.js';
7
7
 
8
8
  const QuickMessageVideoContentComponent = /*@__PURE__*/ proxyCustomElement(class QuickMessageVideoContentComponent extends H {
@@ -115,6 +115,6 @@ function defineCustomElement() {
115
115
  defineCustomElement();
116
116
 
117
117
  export { QuickMessageVideoContentComponent as Q, defineCustomElement as d };
118
- //# sourceMappingURL=p-D5PoL4hp.js.map
118
+ //# sourceMappingURL=p-CbjDD_ZV.js.map
119
119
 
120
- //# sourceMappingURL=p-D5PoL4hp.js.map
120
+ //# sourceMappingURL=p-CbjDD_ZV.js.map
@@ -1 +1 @@
1
- {"file":"p-D5PoL4hp.js","mappings":"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","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/quick-message-add-template/quick-message-video-content.tsx"],"sourcesContent":["import { Component, Event, EventEmitter, Fragment, Prop, State, h } from '@stencil/core';\nimport { QuickMessageTemplateContent } from '../../store/type';\nimport { configStore } from '../../store/store';\nimport { useTranslation } from '../../utils/utils';\nimport { Icon } from '../internal-component/icon';\nimport { ZButton } from '../internal-component/z-button';\nimport { isValidVideoUrl } from '../../utils/validators';\n\n@Component({\n tag: 'quick-message-video-content',\n})\nexport class QuickMessageVideoContentComponent {\n @Prop() content: QuickMessageTemplateContent;\n\n @Event({ bubbles: true, composed: true }) contentChange!: EventEmitter<QuickMessageTemplateContent>;\n\n @State() private videoUrl = '';\n @State() private isDialogOpen = false;\n @State() private errorMessage?: string;\n\n private emitContent(update: Partial<QuickMessageTemplateContent>) {\n if (!this.content) {\n return;\n }\n\n this.contentChange.emit({ ...this.content, ...update });\n }\n\n private openDialog() {\n this.videoUrl = this.content?.file_url || '';\n this.errorMessage = undefined;\n this.isDialogOpen = true;\n }\n\n private closeDialog() {\n this.isDialogOpen = false;\n }\n\n private handleUrlInput(event: Event) {\n this.videoUrl = (event.target as HTMLInputElement).value;\n if (this.errorMessage) {\n this.errorMessage = undefined;\n }\n }\n\n private validateVideoUrl(url: string, assignError = true): boolean {\n const t = useTranslation();\n if (!url.trim()) {\n if (assignError) {\n this.errorMessage = t('quick_message.video_link_required');\n }\n return false;\n }\n\n if (!isValidVideoUrl(url)) {\n if (assignError) {\n this.errorMessage = t('quick_message.video_link_invalid');\n }\n return false;\n }\n\n if (assignError) {\n this.errorMessage = undefined;\n }\n return true;\n }\n\n private handleSaveVideo() {\n const trimmed = this.videoUrl.trim();\n if (!this.validateVideoUrl(trimmed)) {\n return;\n }\n\n this.emitContent({ file_url: trimmed });\n this.closeDialog();\n }\n\n private buildVideoPreview(url: string): { type: 'video'; src: string } {\n try {\n const parsed = new URL(url);\n if (/\\.(mp4|webm|ogg)$/i.test(parsed.pathname)) {\n return { type: 'video', src: url };\n }\n } catch {\n // fall back below\n }\n\n return { type: 'video', src: url };\n }\n\n render() {\n if (!this.content) {\n return null;\n }\n\n const theme = configStore.get('theme');\n const t = useTranslation();\n const existingUrl = this.content.file_url;\n const hasVideo = !!existingUrl;\n const borderClass = `z-border-primary-${theme}`;\n const primaryTextClass = `z-text-primary-${theme}`;\n const previewData = hasVideo && existingUrl ? this.buildVideoPreview(existingUrl) : undefined;\n\n return (\n <div class=\"flex justify-end\">\n <div class=\"max-w-xs h-[220px] aspect-square\">\n <button\n type=\"button\"\n class={`group relative flex aspect-square w-full items-center justify-center overflow-hidden rounded-[18px] border-[1.5px] z-background-${theme} shadow-sm transition-colors cursor-pointer ${borderClass}`}\n onClick={() => this.openDialog()}\n >\n {previewData ? (\n <Fragment>\n <video src={previewData.src} class=\"h-[220px] object-cover\" controls>\n <track kind=\"captions\" src=\"\" label=\"English\" />\n </video>\n <div class=\"absolute inset-0 flex flex-col items-center justify-center gap-2 bg-slate-900/60 opacity-0 transition-opacity group-hover:opacity-100\">\n <Icon name=\"Edit\" addClass=\"size-6 text-white\" />\n <span class=\"text-sm font-semibold text-white\">{t('quick_message.change_video_link')}</span>\n </div>\n </Fragment>\n ) : (\n <div class=\"flex flex-col items-center gap-2 px-6 text-center\">\n <Icon name=\"Play\" addClass={`size-14 ${primaryTextClass}`} />\n <span class={`text-base font-semibold leading-tight ${primaryTextClass}`}>+ {t('quick_message.add_video')}</span>\n </div>\n )}\n </button>\n\n {this.isDialogOpen && this.renderDialog(theme, t, borderClass)}\n </div>\n </div>\n );\n }\n\n private renderDialog(theme: string, t: (key: string) => string, borderClass: string) {\n return (\n <div class=\"fixed inset-0 z-[80] flex items-center justify-center bg-slate-900/40 px-4\" onClick={() => this.closeDialog()}>\n <div class={`w-full max-w-md rounded-2xl border z-background-${theme} p-6 shadow-xl z-text-${theme} border-none`} onClick={event => event.stopPropagation()}>\n <div class=\"flex items-start justify-between\">\n <h3 class=\"text-base font-semibold\">{t('quick_message.add_video')}</h3>\n <button type=\"button\" class=\"inline-flex cursor-pointer items-center justify-center rounded-full p-1\" onClick={() => this.closeDialog()}>\n <Icon name=\"X\" />\n </button>\n </div>\n\n <div class=\"mt-4 flex flex-col gap-4\">\n <label class=\"flex flex-col gap-2 text-sm font-medium\">\n {t('quick_message.link_video')}\n <input\n type=\"url\"\n value={this.videoUrl}\n placeholder={t('quick_message.type_video_link_here')}\n class={`rounded-xl border px-3 py-2 text-sm focus:outline-none ring-primary ${borderClass} z-background-${theme}`}\n onInput={event => this.handleUrlInput(event)}\n />\n </label>\n {this.errorMessage && <p class=\"text-xs text-red-500\">{this.errorMessage}</p>}\n </div>\n\n <div class=\"mt-6 flex gap-3\">\n <ZButton variant=\"outlined\" onClick={() => this.closeDialog()} fullWidth label={t('cancel')} />\n <ZButton variant=\"primary\" onClick={() => this.handleSaveVideo()} fullWidth disabled={this.videoUrl.trim() === ''} label={t('save')} />\n </div>\n </div>\n </div>\n );\n }\n}\n"],"version":3}
1
+ {"file":"p-CbjDD_ZV.js","mappings":"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","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/quick-message-add-template/quick-message-video-content.tsx"],"sourcesContent":["import { Component, Event, EventEmitter, Fragment, Prop, State, h } from '@stencil/core';\nimport { QuickMessageTemplateContent } from '../../store/type';\nimport { configStore } from '../../store/store';\nimport { useTranslation } from '../../utils/utils';\nimport { Icon } from '../internal-component/icon';\nimport { ZButton } from '../internal-component/z-button';\nimport { isValidVideoUrl } from '../../utils/validators';\n\n@Component({\n tag: 'quick-message-video-content',\n})\nexport class QuickMessageVideoContentComponent {\n @Prop() content: QuickMessageTemplateContent;\n\n @Event({ bubbles: true, composed: true }) contentChange!: EventEmitter<QuickMessageTemplateContent>;\n\n @State() private videoUrl = '';\n @State() private isDialogOpen = false;\n @State() private errorMessage?: string;\n\n private emitContent(update: Partial<QuickMessageTemplateContent>) {\n if (!this.content) {\n return;\n }\n\n this.contentChange.emit({ ...this.content, ...update });\n }\n\n private openDialog() {\n this.videoUrl = this.content?.file_url || '';\n this.errorMessage = undefined;\n this.isDialogOpen = true;\n }\n\n private closeDialog() {\n this.isDialogOpen = false;\n }\n\n private handleUrlInput(event: Event) {\n this.videoUrl = (event.target as HTMLInputElement).value;\n if (this.errorMessage) {\n this.errorMessage = undefined;\n }\n }\n\n private validateVideoUrl(url: string, assignError = true): boolean {\n const t = useTranslation();\n if (!url.trim()) {\n if (assignError) {\n this.errorMessage = t('quick_message.video_link_required');\n }\n return false;\n }\n\n if (!isValidVideoUrl(url)) {\n if (assignError) {\n this.errorMessage = t('quick_message.video_link_invalid');\n }\n return false;\n }\n\n if (assignError) {\n this.errorMessage = undefined;\n }\n return true;\n }\n\n private handleSaveVideo() {\n const trimmed = this.videoUrl.trim();\n if (!this.validateVideoUrl(trimmed)) {\n return;\n }\n\n this.emitContent({ file_url: trimmed });\n this.closeDialog();\n }\n\n private buildVideoPreview(url: string): { type: 'video'; src: string } {\n try {\n const parsed = new URL(url);\n if (/\\.(mp4|webm|ogg)$/i.test(parsed.pathname)) {\n return { type: 'video', src: url };\n }\n } catch {\n // fall back below\n }\n\n return { type: 'video', src: url };\n }\n\n render() {\n if (!this.content) {\n return null;\n }\n\n const theme = configStore.get('theme');\n const t = useTranslation();\n const existingUrl = this.content.file_url;\n const hasVideo = !!existingUrl;\n const borderClass = `z-border-primary-${theme}`;\n const primaryTextClass = `z-text-primary-${theme}`;\n const previewData = hasVideo && existingUrl ? this.buildVideoPreview(existingUrl) : undefined;\n\n return (\n <div class=\"flex justify-end\">\n <div class=\"max-w-xs h-[220px] aspect-square\">\n <button\n type=\"button\"\n class={`group relative flex aspect-square w-full items-center justify-center overflow-hidden rounded-[18px] border-[1.5px] z-background-${theme} shadow-sm transition-colors cursor-pointer ${borderClass}`}\n onClick={() => this.openDialog()}\n >\n {previewData ? (\n <Fragment>\n <video src={previewData.src} class=\"h-[220px] object-cover\" controls>\n <track kind=\"captions\" src=\"\" label=\"English\" />\n </video>\n <div class=\"absolute inset-0 flex flex-col items-center justify-center gap-2 bg-slate-900/60 opacity-0 transition-opacity group-hover:opacity-100\">\n <Icon name=\"Edit\" addClass=\"size-6 text-white\" />\n <span class=\"text-sm font-semibold text-white\">{t('quick_message.change_video_link')}</span>\n </div>\n </Fragment>\n ) : (\n <div class=\"flex flex-col items-center gap-2 px-6 text-center\">\n <Icon name=\"Play\" addClass={`size-14 ${primaryTextClass}`} />\n <span class={`text-base font-semibold leading-tight ${primaryTextClass}`}>+ {t('quick_message.add_video')}</span>\n </div>\n )}\n </button>\n\n {this.isDialogOpen && this.renderDialog(theme, t, borderClass)}\n </div>\n </div>\n );\n }\n\n private renderDialog(theme: string, t: (key: string) => string, borderClass: string) {\n return (\n <div class=\"fixed inset-0 z-[80] flex items-center justify-center bg-slate-900/40 px-4\" onClick={() => this.closeDialog()}>\n <div class={`w-full max-w-md rounded-2xl border z-background-${theme} p-6 shadow-xl z-text-${theme} border-none`} onClick={event => event.stopPropagation()}>\n <div class=\"flex items-start justify-between\">\n <h3 class=\"text-base font-semibold\">{t('quick_message.add_video')}</h3>\n <button type=\"button\" class=\"inline-flex cursor-pointer items-center justify-center rounded-full p-1\" onClick={() => this.closeDialog()}>\n <Icon name=\"X\" />\n </button>\n </div>\n\n <div class=\"mt-4 flex flex-col gap-4\">\n <label class=\"flex flex-col gap-2 text-sm font-medium\">\n {t('quick_message.link_video')}\n <input\n type=\"url\"\n value={this.videoUrl}\n placeholder={t('quick_message.type_video_link_here')}\n class={`rounded-xl border px-3 py-2 text-sm focus:outline-none ring-primary ${borderClass} z-background-${theme}`}\n onInput={event => this.handleUrlInput(event)}\n />\n </label>\n {this.errorMessage && <p class=\"text-xs text-red-500\">{this.errorMessage}</p>}\n </div>\n\n <div class=\"mt-6 flex gap-3\">\n <ZButton variant=\"outlined\" onClick={() => this.closeDialog()} fullWidth label={t('cancel')} />\n <ZButton variant=\"primary\" onClick={() => this.handleSaveVideo()} fullWidth disabled={this.videoUrl.trim() === ''} label={t('save')} />\n </div>\n </div>\n </div>\n );\n }\n}\n"],"version":3}
@@ -2,7 +2,7 @@ import { h, F as Fragment } from './p-D_ltSEZy.js';
2
2
  import { I as Icon } from './p-CErcZoEr.js';
3
3
  import { u as useTranslation } from './p-GPPFvEYq.js';
4
4
  import { i as isValidUrl, a as isValidTelephoneNumber } from './p-IgrOqwTQ.js';
5
- import { Z as ZButton } from './p-Khnj_GHE.js';
5
+ import { Z as ZButton } from './p-PLHiwThd.js';
6
6
 
7
7
  const QuickMessageTemplateButtonList = ({ theme, buttons = [], maxButtonCount, addButtonLabel, onButtonClick, onAddButton, onReorderButton, listClass = 'flex flex-col gap-3', buttonClass = '', }) => {
8
8
  const buttonBaseClass = `flex w-full flex-col items-center gap-1 rounded-xl px-2 py-2 text-xs font-medium text-white shadow-sm transition-all cursor-pointer z-background-primary-${theme} truncate`;
@@ -53,6 +53,6 @@ const QuickMessageTemplateButtonDialog = ({ theme, isOpen, isEditing, label, act
53
53
  };
54
54
 
55
55
  export { QuickMessageTemplateButtonList as Q, QuickMessageTemplateButtonDialog as a };
56
- //# sourceMappingURL=p-DeqB7qmW.js.map
56
+ //# sourceMappingURL=p-CbwYwjdH.js.map
57
57
 
58
- //# sourceMappingURL=p-DeqB7qmW.js.map
58
+ //# sourceMappingURL=p-CbwYwjdH.js.map
@@ -1 +1 @@
1
- {"file":"p-DeqB7qmW.js","mappings":"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","names":[],"sources":["src/components/quick-message-add-template/quick-message-template-button-list.tsx","src/components/quick-message-add-template/quick-message-template-button-dialog.tsx"],"sourcesContent":["import { FunctionalComponent, h } from '@stencil/core';\nimport { QuickMessageTemplateButton } from '../../store/type';\nimport { Icon } from '../internal-component/icon';\nimport { useTranslation } from '../../utils/utils';\n\ninterface QuickMessageTemplateButtonListProps {\n theme: string;\n buttons?: QuickMessageTemplateButton[];\n maxButtonCount: number;\n addButtonLabel: string;\n onButtonClick?: (button: QuickMessageTemplateButton) => void;\n onAddButton?: () => void;\n onReorderButton?: (buttonId: string, direction: 'up' | 'down') => void;\n listClass?: string;\n buttonClass?: string;\n}\n\nexport const QuickMessageTemplateButtonList: FunctionalComponent<QuickMessageTemplateButtonListProps> = ({\n theme,\n buttons = [],\n maxButtonCount,\n addButtonLabel,\n onButtonClick,\n onAddButton,\n onReorderButton,\n listClass = 'flex flex-col gap-3',\n buttonClass = '',\n}) => {\n const buttonBaseClass = `flex w-full flex-col items-center gap-1 rounded-xl px-2 py-2 text-xs font-medium text-white shadow-sm transition-all cursor-pointer z-background-primary-${theme} truncate`;\n const addButtonClass = `flex w-full items-center justify-center gap-2 rounded-xl border-[1.5px] border-dashed px-4 py-3 text-sm font-medium z-border-primary-${theme} z-text-primary-${theme} focus:outline-none cursor-pointer`;\n const t = useTranslation();\n const showReorder = !!onReorderButton && buttons.length > 1;\n\n return (\n <div class={listClass}>\n {buttons.map((button, index) => {\n const isFirst = index === 0;\n const isLast = index === buttons.length - 1;\n\n return (\n <div class=\"flex items-center gap-2\" key={button.id}>\n {showReorder && (\n <div class=\"flex flex-col items-center gap-1\">\n {!isFirst && (\n <button\n type=\"button\"\n class={`inline-flex h-7 w-7 items-center justify-center rounded-full border-[1.5px] z-border-primary-${theme} z-text-primary-${theme} transition-colors hover:bg-slate-100 focus:outline-none focus:ring-2 focus:ring-slate-200 cursor-pointer`}\n aria-label={t('quick_message.move_up')}\n onClick={event => {\n event.stopPropagation();\n onReorderButton?.(button.id, 'up');\n }}\n >\n <Icon name=\"ChevronUp\" addClass=\"size-4\" />\n </button>\n )}\n {!isLast && (\n <button\n type=\"button\"\n class={`inline-flex h-7 w-7 items-center justify-center rounded-full border-[1.5px] z-border-primary-${theme} z-text-primary-${theme} transition-colors hover:bg-slate-100 focus:outline-none focus:ring-2 focus:ring-slate-200 cursor-pointer`}\n aria-label={t('quick_message.move_down')}\n onClick={event => {\n event.stopPropagation();\n onReorderButton?.(button.id, 'down');\n }}\n >\n <Icon name=\"ChevronDown\" addClass=\"size-4\" />\n </button>\n )}\n </div>\n )}\n <button type=\"button\" class={`${buttonBaseClass} ${buttonClass}`.trim()} onClick={() => onButtonClick?.(button)}>\n <span class=\"w-full text-center text-xs leading-tight truncate\">{button.text || '-'}</span>\n <span class=\"w-full text-center text-xs leading-tight opacity-80 truncate\">\n {button.action_type === 'text' ? '-' : button.action || '-'}\n </span>\n </button>\n </div>\n );\n })}\n {buttons.length < maxButtonCount && (\n <button type=\"button\" class={addButtonClass} onClick={() => onAddButton?.()}>\n <Icon name=\"Plus\" addClass=\"size-4\" />\n {addButtonLabel}\n </button>\n )}\n </div>\n );\n};\n","import { Fragment, FunctionalComponent, h } from '@stencil/core';\nimport { QuickMessageTemplateButtonAction } from '../../store/type';\nimport { useTranslation } from '../../utils/utils';\nimport { isValidTelephoneNumber, isValidUrl } from '../../utils/validators';\nimport { Icon } from '../internal-component/icon';\nimport { ZButton } from '../internal-component/z-button';\n\ninterface QuickMessageTemplateButtonDialogProps {\n theme: string;\n isOpen: boolean;\n isEditing: boolean;\n label: string;\n actionValue: string;\n actionType: QuickMessageTemplateButtonAction;\n maxButtonNameLength: number;\n onLabelInput: (value: string) => void;\n onActionInput: (value: string) => void;\n onActionTypeChange: (value: QuickMessageTemplateButtonAction) => void;\n onClose: () => void;\n onSave: () => void;\n onDelete?: () => void;\n}\n\nexport const QuickMessageTemplateButtonDialog: FunctionalComponent<QuickMessageTemplateButtonDialogProps> = ({\n theme,\n isOpen,\n isEditing,\n label,\n actionValue,\n actionType,\n maxButtonNameLength,\n onLabelInput,\n onActionInput,\n onActionTypeChange,\n onClose,\n onSave,\n onDelete,\n}) => {\n if (!isOpen) {\n return null;\n }\n\n const t = useTranslation();\n const requiresActionField = actionType !== 'text';\n const actionPlaceholder = actionType === 'url' ? t('quick_message.button_action_url_placeholder') : actionType === 'tel' ? t('quick_message.button_action_tel_placeholder') : '';\n\n const trimmedLabel = label.trim();\n const trimmedActionValue = actionValue.trim();\n\n let actionError: string | undefined;\n if (requiresActionField) {\n if (!trimmedActionValue) {\n actionError = t('quick_message.button_action_required');\n } else if (actionType === 'url' && !isValidUrl(trimmedActionValue)) {\n actionError = t('quick_message.button_action_url_invalid');\n } else if (actionType === 'tel' && !isValidTelephoneNumber(trimmedActionValue)) {\n actionError = t('quick_message.button_action_tel_invalid');\n }\n }\n\n const disableSave = !trimmedLabel || (requiresActionField && !!actionError);\n\n const actionTabs: Array<{ value: QuickMessageTemplateButtonAction; label: string }> = [\n { value: 'text', label: t('quick_message.button_action_text') },\n { value: 'url', label: t('quick_message.button_action_url') },\n { value: 'tel', label: t('quick_message.button_action_tel') },\n ];\n\n return (\n <div class=\"quick-message-button-content__dialog-backdrop\" onClick={() => onClose()}>\n <div\n class={`quick-message-button-content__dialog z-background-${theme} z-text-${theme} rounded-2xl p-5 shadow-xl`}\n role=\"dialog\"\n aria-modal=\"true\"\n onClick={event => event.stopPropagation()}\n >\n <div class=\"flex items-start justify-between\">\n <h3 class=\"text-base font-semibold\">{isEditing ? t('quick_message.edit_button') : t('quick_message.add_button')}</h3>\n <button type=\"button\" class=\"inline-flex cursor-pointer items-center justify-center rounded-full p-1\" onClick={() => onClose()}>\n <Icon name=\"X\" />\n </button>\n </div>\n\n <div class=\"quick-message-button-content__dialog-body mt-4 flex flex-col gap-4\">\n <div>\n <label class={`text-sm font-medium z-text-gray-${theme}`}>{t('quick_message.button_label')}</label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n value={label}\n maxLength={maxButtonNameLength}\n placeholder={t('quick_message.button_label_placeholder')}\n class={`w-full rounded-lg border px-3 py-2 text-sm focus:outline-none ring-primary z-border-primary-${theme} z-background-${theme}`}\n onInput={event => onLabelInput((event.target as HTMLInputElement).value)}\n />\n <div class={`mt-1 text-right text-xs z-text-gray-${theme}`}>\n {label.length}/{maxButtonNameLength}\n </div>\n </div>\n </div>\n\n <div class={`flex items-center justify-between border-b z-border-primary-${theme}`}>\n {actionTabs.map(tab => (\n <button\n type=\"button\"\n class={`quick-message-button-content__tab flex-1 cursor-pointer border-b-2 px-2 pb-2 text-center text-sm font-medium transition-colors ${actionType === tab.value ? `z-text-primary-${theme}` : `z-text-gray-${theme}`\n }`}\n style={{ borderColor: actionType === tab.value ? 'currentColor' : 'transparent' }}\n onClick={() => onActionTypeChange(tab.value)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n\n <div class={`quick-message-button-content__action ${requiresActionField ? '' : 'quick-message-button-content__action--empty'}`}>\n {requiresActionField && (\n <Fragment>\n <label class={`text-sm font-medium z-text-gray-${theme}`}>\n {actionType === 'url' ? t('quick_message.button_action_url') : t('quick_message.button_action_tel')}\n </label>\n <input\n type={actionType === 'tel' ? 'tel' : 'url'}\n value={actionValue}\n placeholder={actionPlaceholder}\n class={`mt-2 w-full rounded-lg border px-3 py-2 text-sm focus:outline-none ring-primary z-background-${theme} ${actionError ? 'border-red-500 focus:ring-red-500 focus:border-red-500' : `z-border-primary-${theme}`\n }`}\n onInput={event => onActionInput((event.target as HTMLInputElement).value)}\n />\n {actionError && <p class=\"mt-1 text-xs text-red-500\">{actionError}</p>}\n </Fragment>\n )}\n </div>\n </div>\n\n <div class=\"mt-6 flex gap-3\">\n {!isEditing && <ZButton variant=\"outlined\" label={t('cancel')} fullWidth onClick={() => onClose()} />}\n {isEditing && onDelete && <ZButton variant=\"outlined\" label={t('remove')} fullWidth onClick={() => onDelete()} />}\n <ZButton variant=\"primary\" label={t('save')} fullWidth disabled={disableSave} onClick={() => onSave()} />\n </div>\n </div>\n </div>\n );\n};\n"],"version":3}
1
+ {"file":"p-CbwYwjdH.js","mappings":"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","names":[],"sources":["src/components/quick-message-add-template/quick-message-template-button-list.tsx","src/components/quick-message-add-template/quick-message-template-button-dialog.tsx"],"sourcesContent":["import { FunctionalComponent, h } from '@stencil/core';\nimport { QuickMessageTemplateButton } from '../../store/type';\nimport { Icon } from '../internal-component/icon';\nimport { useTranslation } from '../../utils/utils';\n\ninterface QuickMessageTemplateButtonListProps {\n theme: string;\n buttons?: QuickMessageTemplateButton[];\n maxButtonCount: number;\n addButtonLabel: string;\n onButtonClick?: (button: QuickMessageTemplateButton) => void;\n onAddButton?: () => void;\n onReorderButton?: (buttonId: string, direction: 'up' | 'down') => void;\n listClass?: string;\n buttonClass?: string;\n}\n\nexport const QuickMessageTemplateButtonList: FunctionalComponent<QuickMessageTemplateButtonListProps> = ({\n theme,\n buttons = [],\n maxButtonCount,\n addButtonLabel,\n onButtonClick,\n onAddButton,\n onReorderButton,\n listClass = 'flex flex-col gap-3',\n buttonClass = '',\n}) => {\n const buttonBaseClass = `flex w-full flex-col items-center gap-1 rounded-xl px-2 py-2 text-xs font-medium text-white shadow-sm transition-all cursor-pointer z-background-primary-${theme} truncate`;\n const addButtonClass = `flex w-full items-center justify-center gap-2 rounded-xl border-[1.5px] border-dashed px-4 py-3 text-sm font-medium z-border-primary-${theme} z-text-primary-${theme} focus:outline-none cursor-pointer`;\n const t = useTranslation();\n const showReorder = !!onReorderButton && buttons.length > 1;\n\n return (\n <div class={listClass}>\n {buttons.map((button, index) => {\n const isFirst = index === 0;\n const isLast = index === buttons.length - 1;\n\n return (\n <div class=\"flex items-center gap-2\" key={button.id}>\n {showReorder && (\n <div class=\"flex flex-col items-center gap-1\">\n {!isFirst && (\n <button\n type=\"button\"\n class={`inline-flex h-7 w-7 items-center justify-center rounded-full border-[1.5px] z-border-primary-${theme} z-text-primary-${theme} transition-colors hover:bg-slate-100 focus:outline-none focus:ring-2 focus:ring-slate-200 cursor-pointer`}\n aria-label={t('quick_message.move_up')}\n onClick={event => {\n event.stopPropagation();\n onReorderButton?.(button.id, 'up');\n }}\n >\n <Icon name=\"ChevronUp\" addClass=\"size-4\" />\n </button>\n )}\n {!isLast && (\n <button\n type=\"button\"\n class={`inline-flex h-7 w-7 items-center justify-center rounded-full border-[1.5px] z-border-primary-${theme} z-text-primary-${theme} transition-colors hover:bg-slate-100 focus:outline-none focus:ring-2 focus:ring-slate-200 cursor-pointer`}\n aria-label={t('quick_message.move_down')}\n onClick={event => {\n event.stopPropagation();\n onReorderButton?.(button.id, 'down');\n }}\n >\n <Icon name=\"ChevronDown\" addClass=\"size-4\" />\n </button>\n )}\n </div>\n )}\n <button type=\"button\" class={`${buttonBaseClass} ${buttonClass}`.trim()} onClick={() => onButtonClick?.(button)}>\n <span class=\"w-full text-center text-xs leading-tight truncate\">{button.text || '-'}</span>\n <span class=\"w-full text-center text-xs leading-tight opacity-80 truncate\">\n {button.action_type === 'text' ? '-' : button.action || '-'}\n </span>\n </button>\n </div>\n );\n })}\n {buttons.length < maxButtonCount && (\n <button type=\"button\" class={addButtonClass} onClick={() => onAddButton?.()}>\n <Icon name=\"Plus\" addClass=\"size-4\" />\n {addButtonLabel}\n </button>\n )}\n </div>\n );\n};\n","import { Fragment, FunctionalComponent, h } from '@stencil/core';\nimport { QuickMessageTemplateButtonAction } from '../../store/type';\nimport { useTranslation } from '../../utils/utils';\nimport { isValidTelephoneNumber, isValidUrl } from '../../utils/validators';\nimport { Icon } from '../internal-component/icon';\nimport { ZButton } from '../internal-component/z-button';\n\ninterface QuickMessageTemplateButtonDialogProps {\n theme: string;\n isOpen: boolean;\n isEditing: boolean;\n label: string;\n actionValue: string;\n actionType: QuickMessageTemplateButtonAction;\n maxButtonNameLength: number;\n onLabelInput: (value: string) => void;\n onActionInput: (value: string) => void;\n onActionTypeChange: (value: QuickMessageTemplateButtonAction) => void;\n onClose: () => void;\n onSave: () => void;\n onDelete?: () => void;\n}\n\nexport const QuickMessageTemplateButtonDialog: FunctionalComponent<QuickMessageTemplateButtonDialogProps> = ({\n theme,\n isOpen,\n isEditing,\n label,\n actionValue,\n actionType,\n maxButtonNameLength,\n onLabelInput,\n onActionInput,\n onActionTypeChange,\n onClose,\n onSave,\n onDelete,\n}) => {\n if (!isOpen) {\n return null;\n }\n\n const t = useTranslation();\n const requiresActionField = actionType !== 'text';\n const actionPlaceholder = actionType === 'url' ? t('quick_message.button_action_url_placeholder') : actionType === 'tel' ? t('quick_message.button_action_tel_placeholder') : '';\n\n const trimmedLabel = label.trim();\n const trimmedActionValue = actionValue.trim();\n\n let actionError: string | undefined;\n if (requiresActionField) {\n if (!trimmedActionValue) {\n actionError = t('quick_message.button_action_required');\n } else if (actionType === 'url' && !isValidUrl(trimmedActionValue)) {\n actionError = t('quick_message.button_action_url_invalid');\n } else if (actionType === 'tel' && !isValidTelephoneNumber(trimmedActionValue)) {\n actionError = t('quick_message.button_action_tel_invalid');\n }\n }\n\n const disableSave = !trimmedLabel || (requiresActionField && !!actionError);\n\n const actionTabs: Array<{ value: QuickMessageTemplateButtonAction; label: string }> = [\n { value: 'text', label: t('quick_message.button_action_text') },\n { value: 'url', label: t('quick_message.button_action_url') },\n { value: 'tel', label: t('quick_message.button_action_tel') },\n ];\n\n return (\n <div class=\"quick-message-button-content__dialog-backdrop\" onClick={() => onClose()}>\n <div\n class={`quick-message-button-content__dialog z-background-${theme} z-text-${theme} rounded-2xl p-5 shadow-xl`}\n role=\"dialog\"\n aria-modal=\"true\"\n onClick={event => event.stopPropagation()}\n >\n <div class=\"flex items-start justify-between\">\n <h3 class=\"text-base font-semibold\">{isEditing ? t('quick_message.edit_button') : t('quick_message.add_button')}</h3>\n <button type=\"button\" class=\"inline-flex cursor-pointer items-center justify-center rounded-full p-1\" onClick={() => onClose()}>\n <Icon name=\"X\" />\n </button>\n </div>\n\n <div class=\"quick-message-button-content__dialog-body mt-4 flex flex-col gap-4\">\n <div>\n <label class={`text-sm font-medium z-text-gray-${theme}`}>{t('quick_message.button_label')}</label>\n <div class=\"mt-2\">\n <input\n type=\"text\"\n value={label}\n maxLength={maxButtonNameLength}\n placeholder={t('quick_message.button_label_placeholder')}\n class={`w-full rounded-lg border px-3 py-2 text-sm focus:outline-none ring-primary z-border-primary-${theme} z-background-${theme}`}\n onInput={event => onLabelInput((event.target as HTMLInputElement).value)}\n />\n <div class={`mt-1 text-right text-xs z-text-gray-${theme}`}>\n {label.length}/{maxButtonNameLength}\n </div>\n </div>\n </div>\n\n <div class={`flex items-center justify-between border-b z-border-primary-${theme}`}>\n {actionTabs.map(tab => (\n <button\n type=\"button\"\n class={`quick-message-button-content__tab flex-1 cursor-pointer border-b-2 px-2 pb-2 text-center text-sm font-medium transition-colors ${actionType === tab.value ? `z-text-primary-${theme}` : `z-text-gray-${theme}`\n }`}\n style={{ borderColor: actionType === tab.value ? 'currentColor' : 'transparent' }}\n onClick={() => onActionTypeChange(tab.value)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n\n <div class={`quick-message-button-content__action ${requiresActionField ? '' : 'quick-message-button-content__action--empty'}`}>\n {requiresActionField && (\n <Fragment>\n <label class={`text-sm font-medium z-text-gray-${theme}`}>\n {actionType === 'url' ? t('quick_message.button_action_url') : t('quick_message.button_action_tel')}\n </label>\n <input\n type={actionType === 'tel' ? 'tel' : 'url'}\n value={actionValue}\n placeholder={actionPlaceholder}\n class={`mt-2 w-full rounded-lg border px-3 py-2 text-sm focus:outline-none ring-primary z-background-${theme} ${actionError ? 'border-red-500 focus:ring-red-500 focus:border-red-500' : `z-border-primary-${theme}`\n }`}\n onInput={event => onActionInput((event.target as HTMLInputElement).value)}\n />\n {actionError && <p class=\"mt-1 text-xs text-red-500\">{actionError}</p>}\n </Fragment>\n )}\n </div>\n </div>\n\n <div class=\"mt-6 flex gap-3\">\n {!isEditing && <ZButton variant=\"outlined\" label={t('cancel')} fullWidth onClick={() => onClose()} />}\n {isEditing && onDelete && <ZButton variant=\"outlined\" label={t('remove')} fullWidth onClick={() => onDelete()} />}\n <ZButton variant=\"primary\" label={t('save')} fullWidth disabled={disableSave} onClick={() => onSave()} />\n </div>\n </div>\n </div>\n );\n};\n"],"version":3}