zignal-stencil-library 1.1.200 → 1.1.204

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 (234) hide show
  1. package/dist/cjs/{autocomplete-address_46.cjs.entry.js → autocomplete-address_47.cjs.entry.js} +219 -87
  2. package/dist/cjs/create-master-data-dialog_2.cjs.entry.js +6 -6
  3. package/dist/cjs/{icon-svg-BqYq756b.js → icon-svg-CGcEST80.js} +5 -3
  4. package/dist/{esm/icon-svg--8GeUz-y.js.map → cjs/icon-svg-CGcEST80.js.map} +1 -1
  5. package/dist/cjs/{index-tLvGuETS.js → index-DaHyy2aG.js} +21 -3
  6. package/dist/cjs/{index-tLvGuETS.js.map → index-DaHyy2aG.js.map} +1 -1
  7. package/dist/cjs/{index-B6QjP10w.js → index-GQ_IlGv9.js} +24 -4
  8. package/dist/cjs/{index-B6QjP10w.js.map → index-GQ_IlGv9.js.map} +1 -1
  9. package/dist/cjs/index.cjs.js +1 -1
  10. package/dist/cjs/loader.cjs.js +1 -1
  11. package/dist/cjs/master-status-app.cjs.entry.js +5 -5
  12. package/dist/cjs/master-tag-app.cjs.entry.js +5 -5
  13. package/dist/cjs/quick-message-app.cjs.entry.js +3 -3
  14. package/dist/cjs/{store-CqwN580I.js → store-BoPqQ7tN.js} +3 -3
  15. package/dist/cjs/{store-CqwN580I.js.map → store-BoPqQ7tN.js.map} +1 -1
  16. package/dist/cjs/{z-input-CBSYTeCa.js → z-input-TfBu5gkx.js} +58 -58
  17. package/dist/cjs/{z-input-CBSYTeCa.js.map → z-input-TfBu5gkx.js.map} +1 -1
  18. package/dist/cjs/zignal-stencil-library.cjs.js +1 -1
  19. package/dist/collection/api/index.js +16 -0
  20. package/dist/collection/api/index.js.map +1 -1
  21. package/dist/collection/api/type.js.map +1 -1
  22. package/dist/collection/collection-manifest.json +1 -0
  23. package/dist/collection/components/autocomplete-address/autocomplete-address.css +1 -1
  24. package/dist/collection/components/autocomplete-multiple-select/autocomplete-multiple-select.css +1 -1
  25. package/dist/collection/components/autocomplete-select/autocomplete-select.css +1 -1
  26. package/dist/collection/components/background-jobs/background-jobs.css +1 -1
  27. package/dist/collection/components/channel-box/channel-box.css +1 -1
  28. package/dist/collection/components/chat-app/chat-app.css +1 -1
  29. package/dist/collection/components/chat-header/chat-header.css +1 -1
  30. package/dist/collection/components/chat-input/chat-input.css +1 -1
  31. package/dist/collection/components/checkbox-list/checkbox-list.css +1 -1
  32. package/dist/collection/components/create-master-data-dialog/create-master-data-dialog.css +1 -1
  33. package/dist/collection/components/dialog-bill-editor/dialog-bill-editor.css +1 -1
  34. package/dist/collection/components/dialog-custom-filter/dialog-custom-filter.css +1 -1
  35. package/dist/collection/components/dialog-editor/dialog-editor.css +1 -1
  36. package/dist/collection/components/dialog-preview-media/dialog-preview-media.css +1 -1
  37. package/dist/collection/components/dialog-search/dialog-search.css +1 -1
  38. package/dist/collection/components/master-data-item/master-data-item.css +1 -1
  39. package/dist/collection/components/master-status-app/master-status-app.css +1 -1
  40. package/dist/collection/components/master-tag-app/master-tag-app.css +1 -1
  41. package/dist/collection/components/menu-chat-channel/menu-chat-channel.css +1 -1
  42. package/dist/collection/components/menu-chat-type/menu-chat-type.css +1 -1
  43. package/dist/collection/components/menu-list/menu-list.css +1 -1
  44. package/dist/collection/components/message-box/message-box.css +1 -1
  45. package/dist/collection/components/message-content/message-content.css +1 -1
  46. package/dist/collection/components/message-item/message-item.css +1 -1
  47. package/dist/collection/components/message-item/message-item.js +1 -1
  48. package/dist/collection/components/message-item/message-item.js.map +1 -1
  49. package/dist/collection/components/message-media/message-media.css +1 -1
  50. package/dist/collection/components/profile-cart-summary/profile-cart-summary.css +1 -0
  51. package/dist/collection/components/profile-cart-summary/profile-cart-summary.js +141 -0
  52. package/dist/collection/components/profile-cart-summary/profile-cart-summary.js.map +1 -0
  53. package/dist/collection/components/profile-history/profile-history.css +1 -1
  54. package/dist/collection/components/profile-history/profile-history.js +1 -1
  55. package/dist/collection/components/profile-info/profile-info.css +1 -1
  56. package/dist/collection/components/profile-info/user-info-section.js +5 -5
  57. package/dist/collection/components/profile-media/profile-media.css +1 -1
  58. package/dist/collection/components/profile-media/profile-media.js +1 -1
  59. package/dist/collection/components/profile-tabs/profile-tabs.css +1 -1
  60. package/dist/collection/components/profile-tabs/profile-tabs.js +20 -9
  61. package/dist/collection/components/profile-tabs/profile-tabs.js.map +1 -1
  62. package/dist/collection/components/quick-message-add-template/quick-message-add-template.css +1 -1
  63. package/dist/collection/components/quick-message-add-template/quick-message-add-template.js +3 -3
  64. package/dist/collection/components/quick-message-add-template/quick-message-text-content.js +1 -1
  65. package/dist/collection/components/quick-message-app/quick-message-app.js +1 -1
  66. package/dist/collection/components/quick-message-file/quick-message-file.css +1 -1
  67. package/dist/collection/components/quick-message-file/quick-message-file.js +1 -1
  68. package/dist/collection/components/quick-message-image/quick-message-image.css +1 -1
  69. package/dist/collection/components/quick-message-image/quick-message-image.js +1 -1
  70. package/dist/collection/components/quick-message-modal/quick-message-modal.css +1 -1
  71. package/dist/collection/components/quick-message-modal/quick-message-modal.js +1 -1
  72. package/dist/collection/components/quick-message-template/quick-message-template.css +1 -1
  73. package/dist/collection/components/quick-message-template/quick-message-template.js +3 -3
  74. package/dist/collection/components/search-box/search-box.css +1 -1
  75. package/dist/collection/components/search-box/search-box.js +5 -5
  76. package/dist/collection/components/status-badge/status-badge.css +1 -1
  77. package/dist/collection/components/status-badge/status-badge.js +2 -2
  78. package/dist/collection/components/tag-list/tag-list.css +1 -1
  79. package/dist/collection/components/tag-list/tag-list.js +1 -1
  80. package/dist/collection/components/tag-or-status-item/tag-or-status-item.css +1 -1
  81. package/dist/collection/components/tag-or-status-item/tag-or-status-item.js +2 -2
  82. package/dist/collection/components/tag-popper/tag-popper.css +1 -1
  83. package/dist/collection/components/tag-popper/tag-popper.js +2 -2
  84. package/dist/collection/components/typography-clamp/typography-clamp.css +1 -1
  85. package/dist/collection/components/typography-clamp/typography-clamp.js +2 -2
  86. package/dist/collection/components/z-avatar/z-avatar.css +1 -1
  87. package/dist/collection/components/z-dialog/z-dialog.css +1 -1
  88. package/dist/collection/components/z-tooltip/z-tooltip.css +1 -1
  89. package/dist/collection/utils/icon-svg.js +1 -0
  90. package/dist/collection/utils/icon-svg.js.map +1 -1
  91. package/dist/components/autocomplete-address2.js +1 -1
  92. package/dist/components/autocomplete-address2.js.map +1 -1
  93. package/dist/components/autocomplete-multiple-select2.js +1 -1
  94. package/dist/components/autocomplete-multiple-select2.js.map +1 -1
  95. package/dist/components/autocomplete-select2.js +1 -1
  96. package/dist/components/autocomplete-select2.js.map +1 -1
  97. package/dist/components/background-jobs2.js +3 -3
  98. package/dist/components/background-jobs2.js.map +1 -1
  99. package/dist/components/channel-box2.js +1 -1
  100. package/dist/components/channel-box2.js.map +1 -1
  101. package/dist/components/chat-app.js +47 -41
  102. package/dist/components/chat-app.js.map +1 -1
  103. package/dist/components/chat-header2.js +2 -2
  104. package/dist/components/chat-header2.js.map +1 -1
  105. package/dist/components/chat-input2.js +1 -1
  106. package/dist/components/chat-input2.js.map +1 -1
  107. package/dist/components/checkbox-list2.js +1 -1
  108. package/dist/components/checkbox-list2.js.map +1 -1
  109. package/dist/components/create-master-data-dialog2.js +1 -1
  110. package/dist/components/dialog-bill-editor2.js +1 -1
  111. package/dist/components/dialog-bill-editor2.js.map +1 -1
  112. package/dist/components/dialog-custom-filter2.js +1 -1
  113. package/dist/components/dialog-custom-filter2.js.map +1 -1
  114. package/dist/components/dialog-editor2.js +1 -1
  115. package/dist/components/dialog-editor2.js.map +1 -1
  116. package/dist/components/dialog-preview-media2.js +1 -1
  117. package/dist/components/dialog-preview-media2.js.map +1 -1
  118. package/dist/components/dialog-search2.js +1 -1
  119. package/dist/components/dialog-search2.js.map +1 -1
  120. package/dist/components/icon-svg.js +2 -1
  121. package/dist/components/icon-svg.js.map +1 -1
  122. package/dist/components/icon.js +55 -55
  123. package/dist/components/icon.js.map +1 -1
  124. package/dist/components/index.js +22 -2
  125. package/dist/components/index.js.map +1 -1
  126. package/dist/components/index3.js +17 -1
  127. package/dist/components/index3.js.map +1 -1
  128. package/dist/components/master-data-item2.js +1 -1
  129. package/dist/components/master-status-app.js +2 -2
  130. package/dist/components/master-tag-app.js +2 -2
  131. package/dist/components/menu-chat-channel2.js +1 -1
  132. package/dist/components/menu-chat-channel2.js.map +1 -1
  133. package/dist/components/menu-chat-type2.js +1 -1
  134. package/dist/components/menu-chat-type2.js.map +1 -1
  135. package/dist/components/menu-list2.js +1 -1
  136. package/dist/components/menu-list2.js.map +1 -1
  137. package/dist/components/message-box2.js +1 -1
  138. package/dist/components/message-box2.js.map +1 -1
  139. package/dist/components/message-content2.js +1 -1
  140. package/dist/components/message-content2.js.map +1 -1
  141. package/dist/components/message-item2.js +2 -2
  142. package/dist/components/message-item2.js.map +1 -1
  143. package/dist/components/message-media2.js +1 -1
  144. package/dist/components/message-media2.js.map +1 -1
  145. package/dist/components/message.js +1 -1
  146. package/dist/components/profile-cart-summary.d.ts +11 -0
  147. package/dist/components/profile-cart-summary.js +9 -0
  148. package/dist/components/profile-cart-summary.js.map +1 -0
  149. package/dist/components/profile-cart-summary2.js +154 -0
  150. package/dist/components/profile-cart-summary2.js.map +1 -0
  151. package/dist/components/profile-history2.js +3 -3
  152. package/dist/components/profile-history2.js.map +1 -1
  153. package/dist/components/profile-info2.js +2 -2
  154. package/dist/components/profile-info2.js.map +1 -1
  155. package/dist/components/profile-media2.js +2 -2
  156. package/dist/components/profile-media2.js.map +1 -1
  157. package/dist/components/profile-tabs2.js +35 -18
  158. package/dist/components/profile-tabs2.js.map +1 -1
  159. package/dist/components/quick-message-add-template2.js +4 -4
  160. package/dist/components/quick-message-add-template2.js.map +1 -1
  161. package/dist/components/quick-message-app.js +1 -1
  162. package/dist/components/quick-message-file2.js +2 -2
  163. package/dist/components/quick-message-file2.js.map +1 -1
  164. package/dist/components/quick-message-image2.js +2 -2
  165. package/dist/components/quick-message-image2.js.map +1 -1
  166. package/dist/components/quick-message-modal2.js +2 -2
  167. package/dist/components/quick-message-modal2.js.map +1 -1
  168. package/dist/components/quick-message-template2.js +4 -4
  169. package/dist/components/quick-message-template2.js.map +1 -1
  170. package/dist/components/quick-message-text-content2.js +1 -1
  171. package/dist/components/search-box2.js +6 -6
  172. package/dist/components/search-box2.js.map +1 -1
  173. package/dist/components/status-badge2.js +3 -3
  174. package/dist/components/status-badge2.js.map +1 -1
  175. package/dist/components/summarize-message-section2.js +1 -1
  176. package/dist/components/summarize-message-section2.js.map +1 -1
  177. package/dist/components/tag-list2.js +2 -2
  178. package/dist/components/tag-list2.js.map +1 -1
  179. package/dist/components/tag-or-status-item2.js +3 -3
  180. package/dist/components/tag-or-status-item2.js.map +1 -1
  181. package/dist/components/tag-popper2.js +3 -3
  182. package/dist/components/tag-popper2.js.map +1 -1
  183. package/dist/components/typography-clamp2.js +3 -3
  184. package/dist/components/typography-clamp2.js.map +1 -1
  185. package/dist/components/user-info-section2.js +7 -7
  186. package/dist/components/user-info-section2.js.map +1 -1
  187. package/dist/components/z-avatar2.js +1 -1
  188. package/dist/components/z-avatar2.js.map +1 -1
  189. package/dist/components/z-dialog2.js +1 -1
  190. package/dist/components/z-dialog2.js.map +1 -1
  191. package/dist/components/z-tooltip2.js +1 -1
  192. package/dist/components/z-tooltip2.js.map +1 -1
  193. package/dist/esm/{autocomplete-address_46.entry.js → autocomplete-address_47.entry.js} +219 -88
  194. package/dist/esm/create-master-data-dialog_2.entry.js +6 -6
  195. package/dist/{zignal-stencil-library/icon-svg--8GeUz-y.js → esm/icon-svg-CVIP7oOf.js} +5 -4
  196. package/dist/{zignal-stencil-library/icon-svg--8GeUz-y.js.map → esm/icon-svg-CVIP7oOf.js.map} +1 -1
  197. package/dist/esm/{index-Cx-o7KBa.js → index-BKcCAjDn.js} +20 -4
  198. package/dist/{zignal-stencil-library/index-Cx-o7KBa.js.map → esm/index-BKcCAjDn.js.map} +1 -1
  199. package/dist/esm/{index-D1QcrFnO.js → index-DQUcZi9F.js} +24 -4
  200. package/dist/esm/{index-D1QcrFnO.js.map → index-DQUcZi9F.js.map} +1 -1
  201. package/dist/esm/index.js +1 -1
  202. package/dist/esm/loader.js +1 -1
  203. package/dist/esm/master-status-app.entry.js +5 -5
  204. package/dist/esm/master-tag-app.entry.js +5 -5
  205. package/dist/esm/quick-message-app.entry.js +3 -3
  206. package/dist/{zignal-stencil-library/store-C3fWMAaY.js → esm/store-CROYTjew.js} +3 -3
  207. package/dist/esm/{store-C3fWMAaY.js.map → store-CROYTjew.js.map} +1 -1
  208. package/dist/esm/{z-input-CLVePWUU.js → z-input-A_SgwIim.js} +58 -58
  209. package/dist/esm/{z-input-CLVePWUU.js.map → z-input-A_SgwIim.js.map} +1 -1
  210. package/dist/esm/zignal-stencil-library.js +1 -1
  211. package/dist/types/api/index.d.ts +2 -0
  212. package/dist/types/api/type.d.ts +23 -0
  213. package/dist/types/components/profile-cart-summary/profile-cart-summary.d.ts +18 -0
  214. package/dist/types/components/profile-tabs/profile-tabs.d.ts +2 -1
  215. package/dist/types/components.d.ts +13 -0
  216. package/dist/types/utils/icon-svg.d.ts +1 -0
  217. package/dist/zignal-stencil-library/{autocomplete-address_46.entry.js → autocomplete-address_47.entry.js} +219 -88
  218. package/dist/zignal-stencil-library/create-master-data-dialog_2.entry.js +6 -6
  219. package/dist/{esm/icon-svg--8GeUz-y.js → zignal-stencil-library/icon-svg-CVIP7oOf.js} +5 -4
  220. package/dist/{cjs/icon-svg-BqYq756b.js.map → zignal-stencil-library/icon-svg-CVIP7oOf.js.map} +1 -1
  221. package/dist/zignal-stencil-library/{index-Cx-o7KBa.js → index-BKcCAjDn.js} +20 -4
  222. package/dist/{esm/index-Cx-o7KBa.js.map → zignal-stencil-library/index-BKcCAjDn.js.map} +1 -1
  223. package/dist/zignal-stencil-library/{index-D1QcrFnO.js → index-DQUcZi9F.js} +24 -4
  224. package/dist/zignal-stencil-library/{index-D1QcrFnO.js.map → index-DQUcZi9F.js.map} +1 -1
  225. package/dist/zignal-stencil-library/index.esm.js +1 -1
  226. package/dist/zignal-stencil-library/master-status-app.entry.js +5 -5
  227. package/dist/zignal-stencil-library/master-tag-app.entry.js +5 -5
  228. package/dist/zignal-stencil-library/quick-message-app.entry.js +3 -3
  229. package/dist/{esm/store-C3fWMAaY.js → zignal-stencil-library/store-CROYTjew.js} +3 -3
  230. package/dist/zignal-stencil-library/{store-C3fWMAaY.js.map → store-CROYTjew.js.map} +1 -1
  231. package/dist/zignal-stencil-library/{z-input-CLVePWUU.js → z-input-A_SgwIim.js} +58 -58
  232. package/dist/zignal-stencil-library/{z-input-CLVePWUU.js.map → z-input-A_SgwIim.js.map} +1 -1
  233. package/dist/zignal-stencil-library/zignal-stencil-library.esm.js +1 -1
  234. package/package.json +1 -1
@@ -1 +1 @@
1
- {"file":"quick-message-image2.js","mappings":"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","names":["__stencil_proxyCustomElement","HTMLElement","showErrorDialog"],"sources":["src/components/quick-message-image/quick-message-image.css?tag=quick-message-image","src/components/quick-message-image/quick-message-image.tsx"],"sourcesContent":[":host {\n position: relative;\n}\n\n.quick-message-image__action-button,\n.quick-message-image__display-switch {\n border: 1px solid rgba(148, 163, 184, 0.4);\n background: transparent;\n}\n\n.quick-message-image__send {\n background: var(--quick-modal-primary);\n color: #fff;\n border: none;\n}\n\n.quick-message-image__thumbnail {\n width: 100%;\n aspect-ratio: 1 / 1;\n border-radius: 0.75rem;\n overflow: hidden;\n background: rgba(148, 163, 184, 0.12);\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n}\n\n.quick-message-image__thumbnail-image {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.quick-message-image__selection-indicator {\n position: absolute;\n top: 0.4rem;\n left: 0.4rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.5rem;\n height: 1.5rem;\n border-radius: 0.5rem;\n color: #fff;\n box-shadow: 0 10px 30px rgba(15, 23, 42, 0.18);\n pointer-events: none;\n}\n\n.quick-message-image__grid-item {\n position: relative;\n}\n\n.quick-message-image__more-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0.25rem;\n border-radius: 9999px;\n background: rgba(15, 23, 42, 0.7);\n color: #fff;\n border: none;\n cursor: pointer;\n transition: opacity 0.2s ease;\n}\n\n.quick-message-image__more-button:hover {\n opacity: 0.85;\n}\n\n.quick-message-image__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-image__list-more-button:hover {\n background: rgba(148, 163, 184, 0.12);\n}\n\n.quick-message-image__menu-wrapper {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.quick-message-image__menu-wrapper:not(.quick-message-image__menu-wrapper--grid) {\n margin-left: auto;\n}\n\n.quick-message-image__menu-wrapper--grid {\n position: absolute;\n top: 0.4rem;\n right: 0.4rem;\n}\n\n.quick-message-image__menu {\n position: absolute;\n top: calc(100% + 0.35rem);\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 18px 35px rgba(15, 23, 42, 0.22);\n z-index: 40;\n overflow: hidden;\n}\n\n.quick-message-image__menu--list {\n top: calc(100% + 0.5rem);\n}\n\n.quick-message-image__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-image__menu-item:hover {\n background: rgba(148, 163, 184, 0.14);\n}\n\n.quick-message-image__menu-item--danger {\n color: #ef4444;\n}\n\n.quick-message-image__menu-item--danger:hover {\n background: rgba(239, 68, 68, 0.12);\n}\n\n.quick-message-image__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-image__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-image__rename-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 1rem;\n}\n\n.quick-message-image__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-image__rename-close:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.quick-message-image__rename-cancel,\n.quick-message-image__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-image__rename-cancel {\n background: transparent;\n color: inherit;\n border: 1px solid rgba(148, 163, 184, 0.4);\n}\n\n.quick-message-image__rename-save {\n background: var(--quick-modal-primary);\n color: #fff;\n}\n\n.quick-message-image__rename-save:disabled,\n.quick-message-image__rename-cancel:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n.quick-message-image__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-image__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-image__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-image__rename-input:focus {\n outline: none;\n}\n\n.quick-message-image__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-image',\n styleUrl: 'quick-message-image.css',\n})\nexport class QuickMessageImageComponent {\n @Prop() handleClose?: () => void;\n @Prop() value?: string | QuickMessageLibraryFile[];\n @Prop() isMaster: boolean = false;\n\n @State() private searchImage = '';\n @State() private images: QuickMessageLibraryFile[] = [];\n @State() private imageDisplayMode: 'grid' | 'list' = 'grid';\n @State() private isLoading = false;\n @State() private isLoadingMore = false;\n @State() private isUploading = false;\n @State() private isDeleting = false;\n @State() private totalImages = 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 pageSize = 15;\n private readonly localUploadPrefix = 'uploaded-image-';\n private page = 1;\n private currentSearch = '';\n\n private fileInput?: HTMLInputElement;\n @Event({ bubbles: true, composed: true }) imagesChange!: EventEmitter<QuickMessageLibraryFile[]>;\n @Event({ bubbles: true, composed: true }) sendImages!: EventEmitter<QuickMessageLibraryFile[]>;\n\n private pendingDeleteImageIds: string[] = [];\n\n // Memoization cache for filtered images\n private cachedFilteredImages: QuickMessageLibraryFile[] | null = null;\n private cachedSearchTerm: string = '';\n private cachedImagesLength: 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 && target.closest('[data-quick-message-image-menu-root]')) {\n return;\n }\n\n this.openMenuId = null;\n }\n\n componentWillLoad() {\n this.syncImagesFromProp(this.value);\n }\n\n async componentDidLoad() {\n await this.fetchImages({ reset: true });\n }\n\n @Watch('value')\n protected handleValueChange(newValue?: string | QuickMessageLibraryFile[]) {\n this.syncImagesFromProp(newValue);\n }\n\n private syncImagesFromProp(value?: string | QuickMessageLibraryFile[]) {\n if (value === undefined || value === null) {\n this.setImages([], false);\n return;\n }\n\n const parsed = this.parseImagesValue(value);\n this.setImages(parsed, false);\n }\n\n private parseImagesValue(value: string | QuickMessageLibraryFile[]): QuickMessageLibraryFile[] {\n if (typeof value === 'string') {\n try {\n const deserialized = JSON.parse(value) as QuickMessageLibraryFile[];\n return this.cloneImages(deserialized);\n } catch (error: unknown) {\n console.warn('[quick-message-image] Failed to parse images value', error);\n return [];\n }\n }\n\n return this.cloneImages(value);\n }\n\n private cloneImages(images: QuickMessageLibraryFile[]): QuickMessageLibraryFile[] {\n return (images || []).map(image => ({\n ...image,\n isSelected: image.isSelected || false,\n }));\n }\n\n private setImages(next: QuickMessageLibraryFile[], shouldEmit = true) {\n this.images = next;\n if (shouldEmit) {\n const payload = this.cloneImages(next);\n this.imagesChange.emit(payload);\n }\n }\n\n private isLocalUpload(image: QuickMessageLibraryFile): boolean {\n return image.id.startsWith(this.localUploadPrefix);\n }\n\n private getRemoteImageCount(): number {\n return this.images.filter(image => !this.isLocalUpload(image)).length;\n }\n\n private mergeFetchedImages(fetched: QuickMessageLibraryFile[], reset: boolean): QuickMessageLibraryFile[] {\n const localUploads = this.images.filter(image => this.isLocalUpload(image));\n const selectionMap = new Map(this.images.map(image => [image.id, image.isSelected || false]));\n\n const normalizedFetched = fetched.map(image => ({\n ...image,\n isSelected: selectionMap.get(image.id) || image.isSelected || false,\n }));\n\n if (reset) {\n return [...localUploads, ...normalizedFetched];\n }\n\n const existingRemote = this.images.filter(image => !this.isLocalUpload(image));\n const remoteIndexMap = new Map<string, number>();\n existingRemote.forEach((image, index) => {\n remoteIndexMap.set(image.id, index);\n });\n\n const nextRemote = [...existingRemote];\n normalizedFetched.forEach(image => {\n const existingIndex = remoteIndexMap.get(image.id);\n if (existingIndex !== undefined) {\n nextRemote[existingIndex] = image;\n } else {\n remoteIndexMap.set(image.id, nextRemote.length);\n nextRemote.push(image);\n }\n });\n\n return [...localUploads, ...nextRemote];\n }\n\n /**\n * Memoized image filtering - only recalculates when search term or images change\n * Performance: Reduces operations from 60fps to only when user types\n */\n private filterImages(): QuickMessageLibraryFile[] {\n const search = this.searchImage.trim().toLowerCase();\n\n // Quick return for no search\n if (!search) return this.images;\n\n // Check if we can use cached results\n if (this.cachedFilteredImages && search === this.cachedSearchTerm && this.images.length === this.cachedImagesLength) {\n return this.cachedFilteredImages;\n }\n\n // Recalculate filtered results\n const filtered = this.images.filter(image => image.name.toLowerCase().includes(search));\n\n // Update cache\n this.cachedFilteredImages = filtered;\n this.cachedSearchTerm = search;\n this.cachedImagesLength = this.images.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.images.find(image => image.id === this.renameTargetId);\n }\n\n private openRenameModal(image: QuickMessageLibraryFile, event?: Event) {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n const { base, extension } = this.splitFileName(image.name);\n this.renameTargetId = image.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(imageId: string, event: Event) {\n event.preventDefault();\n event.stopPropagation();\n\n this.openMenuId = this.openMenuId === imageId ? null : imageId;\n }\n\n private closeMenu() {\n this.openMenuId = null;\n }\n\n private handleMenuRename(image: QuickMessageLibraryFile, event: Event) {\n event.preventDefault();\n event.stopPropagation();\n\n this.closeMenu();\n this.openRenameModal(image, event);\n }\n\n private requestDeleteImage(image: QuickMessageLibraryFile, event: Event) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.isDeleting) {\n return;\n }\n\n this.pendingDeleteImageIds = [image.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.confirmDeleteSelectedImages();\n },\n onCloseDialog: () => {\n this.pendingDeleteImageIds = [];\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.setImages(\n this.images.map(image =>\n image.id === target.id\n ? {\n ...image,\n name: nextName,\n }\n : image,\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.setImages(\n this.images.map(image =>\n image.id === target.id\n ? {\n ...image,\n name: updated.name,\n last_updated_at: updated.last_updated_at,\n last_updated_by: updated.last_updated_by,\n }\n : image,\n ),\n );\n this.closeRenameModal(true);\n } catch (error: unknown) {\n showErrorDialog(error, '[quick-message-image] Failed to rename image');\n } finally {\n this.isRenaming = false;\n }\n }\n\n private toggleImageSelection(id: string) {\n this.setImages(this.images.map(image => (image.id === id ? { ...image, isSelected: !image.isSelected } : image)));\n }\n\n private toggleSelectAllImages() {\n const isAllSelected = this.images.length > 0 && this.images.every(image => image.isSelected);\n this.setImages(this.images.map(image => ({ ...image, isSelected: !isAllSelected })));\n }\n\n private triggerImageUpload() {\n if (this.fileInput) this.fileInput.click();\n }\n\n private handleImageSelection(event: Event) {\n const input = event.target as HTMLInputElement;\n if (!input.files || input.files.length === 0) return;\n\n const files = Array.from(input.files);\n input.value = '';\n\n void this.uploadAndCreateImages(files);\n }\n\n private async uploadAndCreateImages(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/image',\n });\n\n if (!uploadUrl) {\n continue;\n }\n\n payload.push({\n file_type: 'image',\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.fetchImages({ reset: true });\n }\n } catch (error: unknown) {\n showErrorDialog(error, '[quick-message-image] Failed to upload image');\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 handleSendImages() {\n const selected = this.images.filter(image => image.isSelected);\n if (selected.length === 0) return;\n const payload = this.cloneImages(selected);\n this.sendImages.emit(payload);\n if (this.handleClose) this.handleClose();\n }\n\n private requestDeleteSelectedImages() {\n if (this.isDeleting) {\n return;\n }\n\n const selectedIds = this.images.filter(image => image.isSelected).map(image => image.id);\n\n if (selectedIds.length === 0) {\n return;\n }\n\n this.pendingDeleteImageIds = 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.confirmDeleteSelectedImages();\n },\n onCloseDialog: () => {\n this.pendingDeleteImageIds = [];\n },\n });\n }\n\n private async confirmDeleteSelectedImages() {\n if (this.isDeleting) {\n return;\n }\n\n const pendingIds = [...this.pendingDeleteImageIds];\n this.pendingDeleteImageIds = [];\n\n if (pendingIds.length === 0) {\n return;\n }\n\n const pendingSet = new Set(pendingIds);\n const remoteIds = this.images.filter(image => pendingSet.has(image.id) && !this.isLocalUpload(image)).map(image => image.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.images.filter(image => !pendingSet.has(image.id));\n this.setImages(remaining);\n\n if (remoteIds.length > 0) {\n this.totalImages = Math.max(0, this.totalImages - remoteIds.length);\n await this.fetchImages({ reset: true });\n }\n } catch (error: unknown) {\n showErrorDialog(error, '[quick-message-image] Failed to delete images');\n } finally {\n this.isDeleting = false;\n }\n }\n\n private async fetchImages({ 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.searchImage : this.currentSearch;\n const trimmedSearch = searchSource ? searchSource.trim() : '';\n const nextPage = reset ? 1 : this.page + 1;\n\n if (search !== undefined) {\n this.searchImage = 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: 'image',\n search: trimmedSearch ? trimmedSearch : undefined,\n page: nextPage,\n limit: this.pageSize,\n });\n\n const fetched = this.cloneImages(response.files || []);\n const merged = this.mergeFetchedImages(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.totalImages = typeof response.total === 'number' ? response.total : fetched.length;\n this.currentSearch = trimmedSearch;\n\n this.setImages(merged);\n } catch (error: unknown) {\n console.error('[quick-message-image] Failed to fetch images', error);\n } finally {\n if (reset) {\n this.isLoading = false;\n } else {\n this.isLoadingMore = false;\n }\n }\n }\n\n private async loadMoreImages() {\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.totalImages > 0) {\n const remoteCount = this.getRemoteImageCount();\n if (remoteCount >= this.totalImages) {\n return;\n }\n }\n\n await this.fetchImages({ 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.loadMoreImages();\n }\n }\n\n private handleSearchInput(event: Event) {\n const value = (event.target as HTMLInputElement).value;\n this.searchImage = value;\n\n if (!value.trim() && this.currentSearch && !this.isLoading && !this.isLoadingMore) {\n void this.fetchImages({ search: '', reset: true });\n }\n }\n\n private async handleSearchSubmit(event?: Event) {\n if (event) event.preventDefault();\n await this.fetchImages({ search: this.searchImage, reset: true });\n }\n\n private clearSearch() {\n if (!this.searchImage) {\n return;\n }\n\n this.searchImage = '';\n if (this.currentSearch) {\n void this.fetchImages({ search: '', reset: true });\n }\n }\n\n private renderRenameModal(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-image-rename-${target.id}`;\n\n return (\n <div class=\"quick-message-image__rename-overlay\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"quick-message-image-rename-title\" onClick={() => this.closeRenameModal()}>\n <div class={`quick-message-image__rename-modal bg-background text-surface`} onClick={event => event.stopPropagation()}>\n <div class=\"quick-message-image__rename-header\">\n <h3 id=\"quick-message-image-rename-title\" class=\"text-base font-semibold\">\n {labels.renameLabel}\n </h3>\n <button type=\"button\" class=\"quick-message-image__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-image__rename-input-row border border-divider bg-background`}>\n <input\n id={inputId}\n type=\"text\"\n class=\"quick-message-image__rename-input text-surface\"\n value={this.renameName}\n onInput={event => this.handleRenameInput(event)}\n />\n {this.renameExtension && <span class=\"quick-message-image__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-image__rename-cancel\" onClick={() => this.closeRenameModal()} disabled={this.isRenaming}>\n {labels.cancelLabel}\n </button>\n <button type=\"submit\" class=\"quick-message-image__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 render() {\n const theme = configStore.get('theme');\n const t = useTranslation();\n const filteredImages = this.filterImages();\n const hasSelection = this.images.some(image => image.isSelected);\n const isInitialLoading = this.isLoading && this.images.length === 0;\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\" data-theme={theme}>\n <form class=\"w-full\" onSubmit={event => this.handleSearchSubmit(event)}>\n <div class=\"relative\">\n <input\n type=\"text\"\n class={`w-full border border-divider text-sm px-4 py-2 pr-9 rounded-lg ring-primary focus:outline-none focus:border-primary bg-background text-surface`}\n placeholder={t('quick_message.search_image')}\n value={this.searchImage}\n onInput={event => this.handleSearchInput(event)}\n />\n {this.searchImage && (\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.images.length > 0 ? (\n <label class=\"inline-flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" checked={this.images.length > 0 && this.images.every(image => image.isSelected)} onChange={() => this.toggleSelectAllImages()} />\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 accept=\"image/*\"\n multiple\n ref={el => (this.fileInput = el as HTMLInputElement)}\n onChange={event => this.handleImageSelection(event)}\n />\n <button\n type=\"button\"\n class=\"quick-message-image__action-button inline-flex h-9 w-9 items-center justify-center rounded-lg cursor-pointer\"\n onClick={() => !this.isUploading && this.triggerImageUpload()}\n aria-label={t('quick_message.add_image')}\n disabled={this.isUploading}\n >\n {this.isUploading ? <Icon name=\"Loader2\" addClass=\"size-4 animate-spin\" /> : <Icon name=\"Plus\" />}\n </button>\n {this.images.length > 0 && (\n <button\n class=\"quick-message-image__action-button quick-message-image__display-switch inline-flex h-9 w-9 items-center justify-center rounded-lg cursor-pointer\"\n type=\"button\"\n onClick={() => (this.imageDisplayMode = this.imageDisplayMode === 'grid' ? 'list' : 'grid')}\n aria-label={this.imageDisplayMode === 'grid' ? t('quick_message.display_list') : t('quick_message.display_grid')}\n >\n <Icon name={this.imageDisplayMode === 'grid' ? 'List' : 'Grid'} />\n </button>\n )}\n </div>\n </div>\n\n {this.isUploading && (\n <div class={`flex items-center gap-2 text-xs text-primary`}>\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 text-theme-gray`}>Loading...</div>\n ) : filteredImages.length === 0 ? (\n <div class={`flex flex-1 items-center justify-center text-sm text-theme-gray`}>{t('quick_message.image_empty')}</div>\n ) : this.imageDisplayMode === 'grid' ? (\n <div\n class=\"grid flex-1 grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 auto-rows-auto items-start content-start gap-3 overflow-y-auto\"\n onScroll={event => this.handleScroll(event)}\n >\n {filteredImages.map(image => (\n <div class=\"quick-message-image__grid-item\" key={image.id}>\n <button\n type=\"button\"\n class={`flex w-full flex-col items-center gap-2 rounded-xl border border-transparent bg-background p-1.5 cursor-pointer ${image.isSelected ? 'border-primary' : ''}`}\n onClick={() => this.toggleImageSelection(image.id)}\n >\n <div class=\"quick-message-image__thumbnail\">\n {image.isSelected && (\n <span class={`quick-message-image__selection-indicator bg-primary`} aria-hidden=\"true\">\n <Icon name=\"Check\" addClass=\"size-3 text-white\" />\n </span>\n )}\n <img src={image.url} alt={image.name} class=\"quick-message-image__thumbnail-image\" loading=\"lazy\" />\n </div>\n <div class={`text-center text-xs line-clamp-2 text-theme-gray`}>{image.name}</div>\n </button>\n <div class=\"quick-message-image__menu-wrapper quick-message-image__menu-wrapper--grid\" data-quick-message-image-menu-root=\"\">\n <button\n type=\"button\"\n class=\"quick-message-image__more-button\"\n onClick={event => this.toggleMenu(image.id, event)}\n aria-haspopup=\"menu\"\n aria-expanded={this.openMenuId === image.id ? 'true' : 'false'}\n aria-label={renameLabel}\n data-quick-message-image-menu-root=\"\"\n >\n <Icon name=\"MoreVertical\" addClass=\"size-4\" />\n </button>\n {this.openMenuId === image.id && (\n <div class={`quick-message-image__menu bg-background text-surface`} role=\"menu\" data-quick-message-image-menu-root=\"\">\n <button type=\"button\" class=\"quick-message-image__menu-item\" role=\"menuitem\" onClick={event => this.handleMenuRename(image, event)}>\n {renameLabel}\n </button>\n <button\n type=\"button\"\n class=\"quick-message-image__menu-item quick-message-image__menu-item--danger\"\n role=\"menuitem\"\n onClick={event => this.requestDeleteImage(image, event)}\n >\n {deleteLabel}\n </button>\n </div>\n )}\n </div>\n </div>\n ))}\n {this.isLoadingMore && <div class={`col-span-full py-3 text-center text-xs text-theme-gray`}>Loading...</div>}\n </div>\n ) : (\n <div class=\"flex flex-1 flex-col gap-2.5 overflow-y-auto\" onScroll={event => this.handleScroll(event)}>\n {filteredImages.map(image => (\n <label class={`flex items-center gap-3 rounded-xl bg-background px-3 py-2.5`} key={image.id}>\n <input type=\"checkbox\" checked={!!image.isSelected} onChange={() => this.toggleImageSelection(image.id)} />\n <img src={image.url} alt={image.name} class=\"h-16 w-16 rounded-xl object-cover\" loading=\"lazy\" />\n <div class=\"flex flex-1 items-center gap-3 min-w-0\">\n <div class={`flex min-w-0 flex-col gap-1 text-theme-gray`}>\n <div class=\"text-sm font-medium line-clamp-2 wrap-break-words\">{image.name}</div>\n <div class={`text-xs text-theme-gray`}>{this.renderFileMeta(image.size, image.created_at, t)}</div>\n </div>\n <div class=\"quick-message-image__menu-wrapper\" data-quick-message-image-menu-root=\"\">\n <button\n type=\"button\"\n class=\"quick-message-image__list-more-button\"\n onClick={event => this.toggleMenu(image.id, event)}\n aria-haspopup=\"menu\"\n aria-expanded={this.openMenuId === image.id ? 'true' : 'false'}\n aria-label={renameLabel}\n data-quick-message-image-menu-root=\"\"\n >\n <Icon name=\"MoreVertical\" addClass=\"size-4\" />\n </button>\n {this.openMenuId === image.id && (\n <div\n class={`quick-message-image__menu quick-message-image__menu--list bg-background text-surface`}\n role=\"menu\"\n data-quick-message-image-menu-root=\"\"\n >\n <button type=\"button\" class=\"quick-message-image__menu-item\" role=\"menuitem\" onClick={event => this.handleMenuRename(image, event)}>\n {renameLabel}\n </button>\n <button\n type=\"button\"\n class=\"quick-message-image__menu-item quick-message-image__menu-item--danger\"\n role=\"menuitem\"\n onClick={event => this.requestDeleteImage(image, 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 text-theme-gray`}>Loading...</div>}\n </div>\n )}\n\n <div class={`mt-auto flex items-center gap-2 pt-2 text-theme-gray`}>\n {hasSelection && (\n <button\n type=\"button\"\n class={`quick-message-image__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.requestDeleteSelectedImages()}\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-image__send ml-auto inline-flex items-center justify-center rounded-full px-4 py-2 text-xs font-semibold bg-primary text-white disabled:cursor-not-allowed disabled:opacity-40 cursor-pointer`}\n onClick={() => this.handleSendImages()}\n >\n {t('quick_message.send_images')}\n </button>\n )}\n </div>\n {this.renderRenameModal({ renameLabel, nameLabel, saveLabel, cancelLabel, closeLabel })}\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"quick-message-image2.js","mappings":"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","names":["__stencil_proxyCustomElement","HTMLElement","showErrorDialog"],"sources":["src/components/quick-message-image/quick-message-image.css?tag=quick-message-image","src/components/quick-message-image/quick-message-image.tsx"],"sourcesContent":[":host {\n position: relative;\n}\n\n.quick-message-image__action-button,\n.quick-message-image__display-switch {\n border: 1px solid rgba(148, 163, 184, 0.4);\n background: transparent;\n}\n\n.quick-message-image__send {\n background: var(--quick-modal-primary);\n color: #fff;\n border: none;\n}\n\n.quick-message-image__thumbnail {\n width: 100%;\n aspect-ratio: 1 / 1;\n border-radius: 0.75rem;\n overflow: hidden;\n background: rgba(148, 163, 184, 0.12);\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n}\n\n.quick-message-image__thumbnail-image {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.quick-message-image__selection-indicator {\n position: absolute;\n top: 0.4rem;\n left: 0.4rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.5rem;\n height: 1.5rem;\n border-radius: 0.5rem;\n color: #fff;\n box-shadow: 0 10px 30px rgba(15, 23, 42, 0.18);\n pointer-events: none;\n}\n\n.quick-message-image__grid-item {\n position: relative;\n}\n\n.quick-message-image__more-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0.25rem;\n border-radius: 9999px;\n background: rgba(15, 23, 42, 0.7);\n color: #fff;\n border: none;\n cursor: pointer;\n transition: opacity 0.2s ease;\n}\n\n.quick-message-image__more-button:hover {\n opacity: 0.85;\n}\n\n.quick-message-image__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-image__list-more-button:hover {\n background: rgba(148, 163, 184, 0.12);\n}\n\n.quick-message-image__menu-wrapper {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.quick-message-image__menu-wrapper:not(.quick-message-image__menu-wrapper--grid) {\n margin-left: auto;\n}\n\n.quick-message-image__menu-wrapper--grid {\n position: absolute;\n top: 0.4rem;\n right: 0.4rem;\n}\n\n.quick-message-image__menu {\n position: absolute;\n top: calc(100% + 0.35rem);\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 18px 35px rgba(15, 23, 42, 0.22);\n z-index: 40;\n overflow: hidden;\n}\n\n.quick-message-image__menu--list {\n top: calc(100% + 0.5rem);\n}\n\n.quick-message-image__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-image__menu-item:hover {\n background: rgba(148, 163, 184, 0.14);\n}\n\n.quick-message-image__menu-item--danger {\n color: #ef4444;\n}\n\n.quick-message-image__menu-item--danger:hover {\n background: rgba(239, 68, 68, 0.12);\n}\n\n.quick-message-image__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-image__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-image__rename-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 1rem;\n}\n\n.quick-message-image__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-image__rename-close:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.quick-message-image__rename-cancel,\n.quick-message-image__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-image__rename-cancel {\n background: transparent;\n color: inherit;\n border: 1px solid rgba(148, 163, 184, 0.4);\n}\n\n.quick-message-image__rename-save {\n background: var(--quick-modal-primary);\n color: #fff;\n}\n\n.quick-message-image__rename-save:disabled,\n.quick-message-image__rename-cancel:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n}\n\n.quick-message-image__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-image__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-image__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-image__rename-input:focus {\n outline: none;\n}\n\n.quick-message-image__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-image',\n styleUrl: 'quick-message-image.css',\n})\nexport class QuickMessageImageComponent {\n @Prop() handleClose?: () => void;\n @Prop() value?: string | QuickMessageLibraryFile[];\n @Prop() isMaster: boolean = false;\n\n @State() private searchImage = '';\n @State() private images: QuickMessageLibraryFile[] = [];\n @State() private imageDisplayMode: 'grid' | 'list' = 'grid';\n @State() private isLoading = false;\n @State() private isLoadingMore = false;\n @State() private isUploading = false;\n @State() private isDeleting = false;\n @State() private totalImages = 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 pageSize = 15;\n private readonly localUploadPrefix = 'uploaded-image-';\n private page = 1;\n private currentSearch = '';\n\n private fileInput?: HTMLInputElement;\n @Event({ bubbles: true, composed: true }) imagesChange!: EventEmitter<QuickMessageLibraryFile[]>;\n @Event({ bubbles: true, composed: true }) sendImages!: EventEmitter<QuickMessageLibraryFile[]>;\n\n private pendingDeleteImageIds: string[] = [];\n\n // Memoization cache for filtered images\n private cachedFilteredImages: QuickMessageLibraryFile[] | null = null;\n private cachedSearchTerm: string = '';\n private cachedImagesLength: 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 && target.closest('[data-quick-message-image-menu-root]')) {\n return;\n }\n\n this.openMenuId = null;\n }\n\n componentWillLoad() {\n this.syncImagesFromProp(this.value);\n }\n\n async componentDidLoad() {\n await this.fetchImages({ reset: true });\n }\n\n @Watch('value')\n protected handleValueChange(newValue?: string | QuickMessageLibraryFile[]) {\n this.syncImagesFromProp(newValue);\n }\n\n private syncImagesFromProp(value?: string | QuickMessageLibraryFile[]) {\n if (value === undefined || value === null) {\n this.setImages([], false);\n return;\n }\n\n const parsed = this.parseImagesValue(value);\n this.setImages(parsed, false);\n }\n\n private parseImagesValue(value: string | QuickMessageLibraryFile[]): QuickMessageLibraryFile[] {\n if (typeof value === 'string') {\n try {\n const deserialized = JSON.parse(value) as QuickMessageLibraryFile[];\n return this.cloneImages(deserialized);\n } catch (error: unknown) {\n console.warn('[quick-message-image] Failed to parse images value', error);\n return [];\n }\n }\n\n return this.cloneImages(value);\n }\n\n private cloneImages(images: QuickMessageLibraryFile[]): QuickMessageLibraryFile[] {\n return (images || []).map(image => ({\n ...image,\n isSelected: image.isSelected || false,\n }));\n }\n\n private setImages(next: QuickMessageLibraryFile[], shouldEmit = true) {\n this.images = next;\n if (shouldEmit) {\n const payload = this.cloneImages(next);\n this.imagesChange.emit(payload);\n }\n }\n\n private isLocalUpload(image: QuickMessageLibraryFile): boolean {\n return image.id.startsWith(this.localUploadPrefix);\n }\n\n private getRemoteImageCount(): number {\n return this.images.filter(image => !this.isLocalUpload(image)).length;\n }\n\n private mergeFetchedImages(fetched: QuickMessageLibraryFile[], reset: boolean): QuickMessageLibraryFile[] {\n const localUploads = this.images.filter(image => this.isLocalUpload(image));\n const selectionMap = new Map(this.images.map(image => [image.id, image.isSelected || false]));\n\n const normalizedFetched = fetched.map(image => ({\n ...image,\n isSelected: selectionMap.get(image.id) || image.isSelected || false,\n }));\n\n if (reset) {\n return [...localUploads, ...normalizedFetched];\n }\n\n const existingRemote = this.images.filter(image => !this.isLocalUpload(image));\n const remoteIndexMap = new Map<string, number>();\n existingRemote.forEach((image, index) => {\n remoteIndexMap.set(image.id, index);\n });\n\n const nextRemote = [...existingRemote];\n normalizedFetched.forEach(image => {\n const existingIndex = remoteIndexMap.get(image.id);\n if (existingIndex !== undefined) {\n nextRemote[existingIndex] = image;\n } else {\n remoteIndexMap.set(image.id, nextRemote.length);\n nextRemote.push(image);\n }\n });\n\n return [...localUploads, ...nextRemote];\n }\n\n /**\n * Memoized image filtering - only recalculates when search term or images change\n * Performance: Reduces operations from 60fps to only when user types\n */\n private filterImages(): QuickMessageLibraryFile[] {\n const search = this.searchImage.trim().toLowerCase();\n\n // Quick return for no search\n if (!search) return this.images;\n\n // Check if we can use cached results\n if (this.cachedFilteredImages && search === this.cachedSearchTerm && this.images.length === this.cachedImagesLength) {\n return this.cachedFilteredImages;\n }\n\n // Recalculate filtered results\n const filtered = this.images.filter(image => image.name.toLowerCase().includes(search));\n\n // Update cache\n this.cachedFilteredImages = filtered;\n this.cachedSearchTerm = search;\n this.cachedImagesLength = this.images.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.images.find(image => image.id === this.renameTargetId);\n }\n\n private openRenameModal(image: QuickMessageLibraryFile, event?: Event) {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n const { base, extension } = this.splitFileName(image.name);\n this.renameTargetId = image.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(imageId: string, event: Event) {\n event.preventDefault();\n event.stopPropagation();\n\n this.openMenuId = this.openMenuId === imageId ? null : imageId;\n }\n\n private closeMenu() {\n this.openMenuId = null;\n }\n\n private handleMenuRename(image: QuickMessageLibraryFile, event: Event) {\n event.preventDefault();\n event.stopPropagation();\n\n this.closeMenu();\n this.openRenameModal(image, event);\n }\n\n private requestDeleteImage(image: QuickMessageLibraryFile, event: Event) {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.isDeleting) {\n return;\n }\n\n this.pendingDeleteImageIds = [image.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.confirmDeleteSelectedImages();\n },\n onCloseDialog: () => {\n this.pendingDeleteImageIds = [];\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.setImages(\n this.images.map(image =>\n image.id === target.id\n ? {\n ...image,\n name: nextName,\n }\n : image,\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.setImages(\n this.images.map(image =>\n image.id === target.id\n ? {\n ...image,\n name: updated.name,\n last_updated_at: updated.last_updated_at,\n last_updated_by: updated.last_updated_by,\n }\n : image,\n ),\n );\n this.closeRenameModal(true);\n } catch (error: unknown) {\n showErrorDialog(error, '[quick-message-image] Failed to rename image');\n } finally {\n this.isRenaming = false;\n }\n }\n\n private toggleImageSelection(id: string) {\n this.setImages(this.images.map(image => (image.id === id ? { ...image, isSelected: !image.isSelected } : image)));\n }\n\n private toggleSelectAllImages() {\n const isAllSelected = this.images.length > 0 && this.images.every(image => image.isSelected);\n this.setImages(this.images.map(image => ({ ...image, isSelected: !isAllSelected })));\n }\n\n private triggerImageUpload() {\n if (this.fileInput) this.fileInput.click();\n }\n\n private handleImageSelection(event: Event) {\n const input = event.target as HTMLInputElement;\n if (!input.files || input.files.length === 0) return;\n\n const files = Array.from(input.files);\n input.value = '';\n\n void this.uploadAndCreateImages(files);\n }\n\n private async uploadAndCreateImages(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/image',\n });\n\n if (!uploadUrl) {\n continue;\n }\n\n payload.push({\n file_type: 'image',\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.fetchImages({ reset: true });\n }\n } catch (error: unknown) {\n showErrorDialog(error, '[quick-message-image] Failed to upload image');\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 handleSendImages() {\n const selected = this.images.filter(image => image.isSelected);\n if (selected.length === 0) return;\n const payload = this.cloneImages(selected);\n this.sendImages.emit(payload);\n if (this.handleClose) this.handleClose();\n }\n\n private requestDeleteSelectedImages() {\n if (this.isDeleting) {\n return;\n }\n\n const selectedIds = this.images.filter(image => image.isSelected).map(image => image.id);\n\n if (selectedIds.length === 0) {\n return;\n }\n\n this.pendingDeleteImageIds = 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.confirmDeleteSelectedImages();\n },\n onCloseDialog: () => {\n this.pendingDeleteImageIds = [];\n },\n });\n }\n\n private async confirmDeleteSelectedImages() {\n if (this.isDeleting) {\n return;\n }\n\n const pendingIds = [...this.pendingDeleteImageIds];\n this.pendingDeleteImageIds = [];\n\n if (pendingIds.length === 0) {\n return;\n }\n\n const pendingSet = new Set(pendingIds);\n const remoteIds = this.images.filter(image => pendingSet.has(image.id) && !this.isLocalUpload(image)).map(image => image.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.images.filter(image => !pendingSet.has(image.id));\n this.setImages(remaining);\n\n if (remoteIds.length > 0) {\n this.totalImages = Math.max(0, this.totalImages - remoteIds.length);\n await this.fetchImages({ reset: true });\n }\n } catch (error: unknown) {\n showErrorDialog(error, '[quick-message-image] Failed to delete images');\n } finally {\n this.isDeleting = false;\n }\n }\n\n private async fetchImages({ 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.searchImage : this.currentSearch;\n const trimmedSearch = searchSource ? searchSource.trim() : '';\n const nextPage = reset ? 1 : this.page + 1;\n\n if (search !== undefined) {\n this.searchImage = 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: 'image',\n search: trimmedSearch ? trimmedSearch : undefined,\n page: nextPage,\n limit: this.pageSize,\n });\n\n const fetched = this.cloneImages(response.files || []);\n const merged = this.mergeFetchedImages(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.totalImages = typeof response.total === 'number' ? response.total : fetched.length;\n this.currentSearch = trimmedSearch;\n\n this.setImages(merged);\n } catch (error: unknown) {\n console.error('[quick-message-image] Failed to fetch images', error);\n } finally {\n if (reset) {\n this.isLoading = false;\n } else {\n this.isLoadingMore = false;\n }\n }\n }\n\n private async loadMoreImages() {\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.totalImages > 0) {\n const remoteCount = this.getRemoteImageCount();\n if (remoteCount >= this.totalImages) {\n return;\n }\n }\n\n await this.fetchImages({ 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.loadMoreImages();\n }\n }\n\n private handleSearchInput(event: Event) {\n const value = (event.target as HTMLInputElement).value;\n this.searchImage = value;\n\n if (!value.trim() && this.currentSearch && !this.isLoading && !this.isLoadingMore) {\n void this.fetchImages({ search: '', reset: true });\n }\n }\n\n private async handleSearchSubmit(event?: Event) {\n if (event) event.preventDefault();\n await this.fetchImages({ search: this.searchImage, reset: true });\n }\n\n private clearSearch() {\n if (!this.searchImage) {\n return;\n }\n\n this.searchImage = '';\n if (this.currentSearch) {\n void this.fetchImages({ search: '', reset: true });\n }\n }\n\n private renderRenameModal(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-image-rename-${target.id}`;\n\n return (\n <div class=\"quick-message-image__rename-overlay\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"quick-message-image-rename-title\" onClick={() => this.closeRenameModal()}>\n <div class={`quick-message-image__rename-modal bg-background text-surface`} onClick={event => event.stopPropagation()}>\n <div class=\"quick-message-image__rename-header\">\n <h3 id=\"quick-message-image-rename-title\" class=\"text-base font-semibold\">\n {labels.renameLabel}\n </h3>\n <button type=\"button\" class=\"quick-message-image__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-image__rename-input-row border border-divider bg-background`}>\n <input\n id={inputId}\n type=\"text\"\n class=\"quick-message-image__rename-input text-surface\"\n value={this.renameName}\n onInput={event => this.handleRenameInput(event)}\n />\n {this.renameExtension && <span class=\"quick-message-image__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-image__rename-cancel\" onClick={() => this.closeRenameModal()} disabled={this.isRenaming}>\n {labels.cancelLabel}\n </button>\n <button type=\"submit\" class=\"quick-message-image__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 render() {\n const theme = configStore.get('theme');\n const t = useTranslation();\n const filteredImages = this.filterImages();\n const hasSelection = this.images.some(image => image.isSelected);\n const isInitialLoading = this.isLoading && this.images.length === 0;\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\" data-theme={theme}>\n <form class=\"w-full\" onSubmit={event => this.handleSearchSubmit(event)}>\n <div class=\"relative\">\n <input\n type=\"text\"\n class={`w-full border border-divider text-sm px-4 py-2 pr-9 rounded-lg ring-primary focus:outline-none focus:border-primary bg-background text-surface`}\n placeholder={t('quick_message.search_image')}\n value={this.searchImage}\n onInput={event => this.handleSearchInput(event)}\n />\n {this.searchImage && (\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.images.length > 0 ? (\n <label class=\"inline-flex items-center gap-2 text-sm\">\n <input type=\"checkbox\" checked={this.images.length > 0 && this.images.every(image => image.isSelected)} onChange={() => this.toggleSelectAllImages()} />\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 accept=\"image/*\"\n multiple\n ref={el => (this.fileInput = el as HTMLInputElement)}\n onChange={event => this.handleImageSelection(event)}\n />\n <button\n type=\"button\"\n class=\"quick-message-image__action-button inline-flex h-9 w-9 items-center justify-center rounded-lg cursor-pointer\"\n onClick={() => !this.isUploading && this.triggerImageUpload()}\n aria-label={t('quick_message.add_image')}\n disabled={this.isUploading}\n >\n {this.isUploading ? <Icon name=\"Loader2\" addClass=\"size-4 animate-spin\" /> : <Icon name=\"Plus\" />}\n </button>\n {this.images.length > 0 && (\n <button\n class=\"quick-message-image__action-button quick-message-image__display-switch inline-flex h-9 w-9 items-center justify-center rounded-lg cursor-pointer\"\n type=\"button\"\n onClick={() => (this.imageDisplayMode = this.imageDisplayMode === 'grid' ? 'list' : 'grid')}\n aria-label={this.imageDisplayMode === 'grid' ? t('quick_message.display_list') : t('quick_message.display_grid')}\n >\n <Icon name={this.imageDisplayMode === 'grid' ? 'List' : 'Grid'} />\n </button>\n )}\n </div>\n </div>\n\n {this.isUploading && (\n <div class={`flex items-center gap-2 text-xs text-primary`}>\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 text-theme-gray`}>Loading...</div>\n ) : filteredImages.length === 0 ? (\n <div class={`flex flex-1 items-center justify-center text-sm text-theme-gray`}>{t('quick_message.image_empty')}</div>\n ) : this.imageDisplayMode === 'grid' ? (\n <div\n class=\"grid flex-1 grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 auto-rows-auto items-start content-start gap-3 overflow-y-auto\"\n onScroll={event => this.handleScroll(event)}\n >\n {filteredImages.map(image => (\n <div class=\"quick-message-image__grid-item\" key={image.id}>\n <button\n type=\"button\"\n class={`flex w-full flex-col items-center gap-2 rounded-xl border border-transparent bg-background p-1.5 cursor-pointer ${image.isSelected ? 'border-primary' : ''}`}\n onClick={() => this.toggleImageSelection(image.id)}\n >\n <div class=\"quick-message-image__thumbnail\">\n {image.isSelected && (\n <span class={`quick-message-image__selection-indicator bg-primary`} aria-hidden=\"true\">\n <Icon name=\"Check\" addClass=\"size-3 text-white\" />\n </span>\n )}\n <img src={image.url} alt={image.name} class=\"quick-message-image__thumbnail-image\" loading=\"lazy\" />\n </div>\n <div class={`text-center text-xs line-clamp-2 text-theme-gray`}>{image.name}</div>\n </button>\n <div class=\"quick-message-image__menu-wrapper quick-message-image__menu-wrapper--grid\" data-quick-message-image-menu-root=\"\">\n <button\n type=\"button\"\n class=\"quick-message-image__more-button\"\n onClick={event => this.toggleMenu(image.id, event)}\n aria-haspopup=\"menu\"\n aria-expanded={this.openMenuId === image.id ? 'true' : 'false'}\n aria-label={renameLabel}\n data-quick-message-image-menu-root=\"\"\n >\n <Icon name=\"MoreVertical\" addClass=\"size-4\" />\n </button>\n {this.openMenuId === image.id && (\n <div class={`quick-message-image__menu bg-background text-surface`} role=\"menu\" data-quick-message-image-menu-root=\"\">\n <button type=\"button\" class=\"quick-message-image__menu-item\" role=\"menuitem\" onClick={event => this.handleMenuRename(image, event)}>\n {renameLabel}\n </button>\n <button\n type=\"button\"\n class=\"quick-message-image__menu-item quick-message-image__menu-item--danger\"\n role=\"menuitem\"\n onClick={event => this.requestDeleteImage(image, event)}\n >\n {deleteLabel}\n </button>\n </div>\n )}\n </div>\n </div>\n ))}\n {this.isLoadingMore && <div class={`col-span-full py-3 text-center text-xs text-theme-gray`}>Loading...</div>}\n </div>\n ) : (\n <div class=\"flex flex-1 flex-col gap-2.5 overflow-y-auto\" onScroll={event => this.handleScroll(event)}>\n {filteredImages.map(image => (\n <label class={`flex items-center gap-3 rounded-xl bg-background px-3 py-2.5`} key={image.id}>\n <input type=\"checkbox\" checked={!!image.isSelected} onChange={() => this.toggleImageSelection(image.id)} />\n <img src={image.url} alt={image.name} class=\"h-16 w-16 rounded-xl object-cover\" loading=\"lazy\" />\n <div class=\"flex flex-1 items-center gap-3 min-w-0\">\n <div class={`flex min-w-0 flex-col gap-1 text-theme-gray`}>\n <div class=\"text-sm font-medium line-clamp-2 wrap-break-words\">{image.name}</div>\n <div class={`text-xs text-theme-gray`}>{this.renderFileMeta(image.size, image.created_at, t)}</div>\n </div>\n <div class=\"quick-message-image__menu-wrapper\" data-quick-message-image-menu-root=\"\">\n <button\n type=\"button\"\n class=\"quick-message-image__list-more-button\"\n onClick={event => this.toggleMenu(image.id, event)}\n aria-haspopup=\"menu\"\n aria-expanded={this.openMenuId === image.id ? 'true' : 'false'}\n aria-label={renameLabel}\n data-quick-message-image-menu-root=\"\"\n >\n <Icon name=\"MoreVertical\" addClass=\"size-4\" />\n </button>\n {this.openMenuId === image.id && (\n <div\n class={`quick-message-image__menu quick-message-image__menu--list bg-background text-surface`}\n role=\"menu\"\n data-quick-message-image-menu-root=\"\"\n >\n <button type=\"button\" class=\"quick-message-image__menu-item\" role=\"menuitem\" onClick={event => this.handleMenuRename(image, event)}>\n {renameLabel}\n </button>\n <button\n type=\"button\"\n class=\"quick-message-image__menu-item quick-message-image__menu-item--danger\"\n role=\"menuitem\"\n onClick={event => this.requestDeleteImage(image, 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 text-theme-gray`}>Loading...</div>}\n </div>\n )}\n\n <div class={`mt-auto flex items-center gap-2 pt-2 text-theme-gray`}>\n {hasSelection && (\n <button\n type=\"button\"\n class={`quick-message-image__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.requestDeleteSelectedImages()}\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-image__send ml-auto inline-flex items-center justify-center rounded-full px-4 py-2 text-xs font-semibold bg-primary text-white disabled:cursor-not-allowed disabled:opacity-40 cursor-pointer`}\n onClick={() => this.handleSendImages()}\n >\n {t('quick_message.send_images')}\n </button>\n )}\n </div>\n {this.renderRenameModal({ renameLabel, nameLabel, saveLabel, cancelLabel, closeLabel })}\n </Host>\n );\n }\n}\n"],"version":3}