zignal-stencil-library 1.1.111 → 1.1.113

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 (196) hide show
  1. package/dist/cjs/autocomplete-address_43.cjs.entry.js +81 -77
  2. package/dist/cjs/quick-message-app.cjs.entry.js +1 -1
  3. package/dist/collection/components/autocomplete-address/autocomplete-address.css +1 -1
  4. package/dist/collection/components/autocomplete-multiple-select/autocomplete-multiple-select.css +1 -1
  5. package/dist/collection/components/autocomplete-select/autocomplete-select.css +1 -1
  6. package/dist/collection/components/channel-box/channel-box.css +1 -1
  7. package/dist/collection/components/chat-app/chat-app.css +1 -1
  8. package/dist/collection/components/chat-app/chat-app.js +1 -1
  9. package/dist/collection/components/chat-app/chat-app.js.map +1 -1
  10. package/dist/collection/components/chat-header/chat-header.css +1 -1
  11. package/dist/collection/components/chat-input/chat-input.css +1 -1
  12. package/dist/collection/components/checkbox-list/checkbox-list.css +1 -1
  13. package/dist/collection/components/dialog-bill-editor/dialog-bill-editor.css +1 -1
  14. package/dist/collection/components/dialog-editor/dialog-editor.css +1 -1
  15. package/dist/collection/components/dialog-preview-media/dialog-preview-media.css +1 -1
  16. package/dist/collection/components/dialog-search/dialog-search.css +1 -1
  17. package/dist/collection/components/menu-chat-channel/menu-chat-channel.css +1 -1
  18. package/dist/collection/components/menu-chat-type/menu-chat-type.css +1 -1
  19. package/dist/collection/components/menu-list/menu-list.css +1 -1
  20. package/dist/collection/components/message-box/message-box.css +1 -1
  21. package/dist/collection/components/message-content/message-content.css +1 -1
  22. package/dist/collection/components/message-item/message-item.css +1 -1
  23. package/dist/collection/components/message-media/message-media.css +1 -1
  24. package/dist/collection/components/profile-history/profile-history.css +1 -1
  25. package/dist/collection/components/profile-history/profile-history.js +3 -3
  26. package/dist/collection/components/profile-history/profile-history.js.map +1 -1
  27. package/dist/collection/components/profile-info/profile-info.css +1 -1
  28. package/dist/collection/components/profile-info/profile-info.js +2 -3
  29. package/dist/collection/components/profile-info/profile-info.js.map +1 -1
  30. package/dist/collection/components/profile-info/user-info-section.js +15 -10
  31. package/dist/collection/components/profile-info/user-info-section.js.map +1 -1
  32. package/dist/collection/components/profile-media/profile-media.css +1 -1
  33. package/dist/collection/components/profile-media/profile-media.js +1 -1
  34. package/dist/collection/components/profile-tabs/profile-tabs.css +1 -1
  35. package/dist/collection/components/profile-tabs/profile-tabs.js +2 -2
  36. package/dist/collection/components/quick-message-add-template/quick-message-add-template.css +1 -1
  37. package/dist/collection/components/quick-message-add-template/quick-message-add-template.js +3 -3
  38. package/dist/collection/components/quick-message-add-template/quick-message-text-content.js +1 -1
  39. package/dist/collection/components/quick-message-app/quick-message-app.js +1 -1
  40. package/dist/collection/components/quick-message-file/quick-message-file.css +1 -1
  41. package/dist/collection/components/quick-message-file/quick-message-file.js +1 -1
  42. package/dist/collection/components/quick-message-image/quick-message-image.css +1 -1
  43. package/dist/collection/components/quick-message-image/quick-message-image.js +1 -1
  44. package/dist/collection/components/quick-message-modal/quick-message-modal.css +1 -1
  45. package/dist/collection/components/quick-message-modal/quick-message-modal.js +1 -1
  46. package/dist/collection/components/quick-message-template/quick-message-template.css +1 -1
  47. package/dist/collection/components/quick-message-template/quick-message-template.js +3 -3
  48. package/dist/collection/components/search-box/search-box.css +1 -1
  49. package/dist/collection/components/search-box/search-box.js +1 -1
  50. package/dist/collection/components/status-badge/status-badge.css +1 -1
  51. package/dist/collection/components/status-badge/status-badge.js +2 -2
  52. package/dist/collection/components/tag-list/tag-list.css +1 -1
  53. package/dist/collection/components/tag-list/tag-list.js +1 -1
  54. package/dist/collection/components/tag-or-status-item/tag-or-status-item.css +1 -1
  55. package/dist/collection/components/tag-or-status-item/tag-or-status-item.js +2 -2
  56. package/dist/collection/components/tag-popper/tag-popper.css +1 -1
  57. package/dist/collection/components/tag-popper/tag-popper.js +2 -2
  58. package/dist/collection/components/typography-clamp/typography-clamp.css +1 -1
  59. package/dist/collection/components/typography-clamp/typography-clamp.js +2 -2
  60. package/dist/collection/components/z-avatar/z-avatar.css +1 -1
  61. package/dist/collection/components/z-dialog/z-dialog.css +1 -1
  62. package/dist/components/autocomplete-address.js +1 -1
  63. package/dist/components/autocomplete-multiple-select.js +1 -1
  64. package/dist/components/autocomplete-select.js +1 -1
  65. package/dist/components/channel-box.js +1 -1
  66. package/dist/components/chat-app.js +40 -40
  67. package/dist/components/chat-app.js.map +1 -1
  68. package/dist/components/chat-header.js +1 -1
  69. package/dist/components/chat-input.js +1 -1
  70. package/dist/components/checkbox-list.js +1 -1
  71. package/dist/components/dialog-bill-editor.js +1 -1
  72. package/dist/components/dialog-editor.js +1 -1
  73. package/dist/components/dialog-preview-media.js +1 -1
  74. package/dist/components/dialog-search.js +1 -1
  75. package/dist/components/menu-chat-channel.js +1 -1
  76. package/dist/components/menu-chat-type.js +1 -1
  77. package/dist/components/menu-list.js +1 -1
  78. package/dist/components/message-box.js +1 -1
  79. package/dist/components/message-content.js +1 -1
  80. package/dist/components/message-item.js +1 -1
  81. package/dist/components/message-media.js +1 -1
  82. package/dist/components/p-3XaRlwMZ.js +161 -0
  83. package/dist/components/p-3XaRlwMZ.js.map +1 -0
  84. package/dist/components/{p-CgTZtTmT.js → p-B19Afqpk.js} +19 -19
  85. package/dist/components/{p-CgTZtTmT.js.map → p-B19Afqpk.js.map} +1 -1
  86. package/dist/components/{p--gZqhhLL.js → p-B2ay8yxa.js} +3 -3
  87. package/dist/components/{p--gZqhhLL.js.map → p-B2ay8yxa.js.map} +1 -1
  88. package/dist/components/{p-tkW40LmD.js → p-BHr52dZJ.js} +4 -4
  89. package/dist/components/{p-tkW40LmD.js.map → p-BHr52dZJ.js.map} +1 -1
  90. package/dist/components/{p-DGC5KYEl.js → p-BVLGLAQM.js} +9 -9
  91. package/dist/components/{p-DGC5KYEl.js.map → p-BVLGLAQM.js.map} +1 -1
  92. package/dist/components/{p-C0MuZqgR.js → p-Baq4FLMS.js} +3 -3
  93. package/dist/components/{p-C0MuZqgR.js.map → p-Baq4FLMS.js.map} +1 -1
  94. package/dist/components/{p-BrKDVlCP.js → p-Be5X3t5w.js} +3 -3
  95. package/dist/components/{p-BrKDVlCP.js.map → p-Be5X3t5w.js.map} +1 -1
  96. package/dist/components/{p-kbTcbS6Y.js → p-BsV8XOdl.js} +18 -18
  97. package/dist/components/{p-kbTcbS6Y.js.map → p-BsV8XOdl.js.map} +1 -1
  98. package/dist/components/{p-Cy-sLMQG.js → p-Bt12179Z.js} +4 -4
  99. package/dist/components/{p-Cy-sLMQG.js.map → p-Bt12179Z.js.map} +1 -1
  100. package/dist/components/{p-htsjbc2A.js → p-BuZJtX19.js} +3 -3
  101. package/dist/components/{p-htsjbc2A.js.map → p-BuZJtX19.js.map} +1 -1
  102. package/dist/components/{p-3jt5iBgO.js → p-BzogxNIa.js} +3 -3
  103. package/dist/components/{p-3jt5iBgO.js.map → p-BzogxNIa.js.map} +1 -1
  104. package/dist/components/p-CJAs00I8.js +161 -0
  105. package/dist/components/{p-mVYojO3m.js.map → p-CJAs00I8.js.map} +1 -1
  106. package/dist/components/p-CS4KatwS.js +79 -0
  107. package/dist/components/{p-DHM0YbIt.js.map → p-CS4KatwS.js.map} +1 -1
  108. package/dist/components/{p-B7CuMj9y.js → p-C_rJguGq.js} +4 -4
  109. package/dist/components/{p-B7CuMj9y.js.map → p-C_rJguGq.js.map} +1 -1
  110. package/dist/components/p-CcPJkDzX.js +35 -0
  111. package/dist/components/{p-Bj6H7JrX.js.map → p-CcPJkDzX.js.map} +1 -1
  112. package/dist/components/{p-Cw5rK8nZ.js → p-ChfkflWC.js} +5 -5
  113. package/dist/components/{p-Cw5rK8nZ.js.map → p-ChfkflWC.js.map} +1 -1
  114. package/dist/components/{p-maYXfa3o.js → p-Ci1wlgXw.js} +5 -5
  115. package/dist/components/{p-maYXfa3o.js.map → p-Ci1wlgXw.js.map} +1 -1
  116. package/dist/components/{p-DG0KCn3k.js → p-CrvmYhih.js} +4 -4
  117. package/dist/components/{p-DG0KCn3k.js.map → p-CrvmYhih.js.map} +1 -1
  118. package/dist/components/p-CvyJbTb9.js +145 -0
  119. package/dist/components/p-CvyJbTb9.js.map +1 -0
  120. package/dist/components/{p-My1l3OBd.js → p-D0EnDE_o.js} +3 -3
  121. package/dist/components/{p-My1l3OBd.js.map → p-D0EnDE_o.js.map} +1 -1
  122. package/dist/components/{p-p3q1OJSb.js → p-D5h0nLE5.js} +9 -9
  123. package/dist/components/{p-p3q1OJSb.js.map → p-D5h0nLE5.js.map} +1 -1
  124. package/dist/components/{p-D-75lLYc.js → p-DN1ugCly.js} +3 -3
  125. package/dist/components/{p-D-75lLYc.js.map → p-DN1ugCly.js.map} +1 -1
  126. package/dist/components/{p-av8MQL9x.js → p-DW8sC5rc.js} +5 -5
  127. package/dist/components/{p-av8MQL9x.js.map → p-DW8sC5rc.js.map} +1 -1
  128. package/dist/components/{p-Dv5lS2bl.js → p-DkVyQai5.js} +7 -7
  129. package/dist/components/{p-Dv5lS2bl.js.map → p-DkVyQai5.js.map} +1 -1
  130. package/dist/components/{p-drInZwO0.js → p-DrW4vKrV.js} +4 -4
  131. package/dist/components/{p-drInZwO0.js.map → p-DrW4vKrV.js.map} +1 -1
  132. package/dist/components/{p-CBGDhDhT.js → p-DuPV1DzK.js} +6 -6
  133. package/dist/components/{p-CBGDhDhT.js.map → p-DuPV1DzK.js.map} +1 -1
  134. package/dist/components/{p-8qMMsvE2.js → p-Dvfar-8p.js} +5 -5
  135. package/dist/components/{p-8qMMsvE2.js.map → p-Dvfar-8p.js.map} +1 -1
  136. package/dist/components/{p-CjdpcyF4.js → p-Dx0yXDO_.js} +8 -8
  137. package/dist/components/{p-CjdpcyF4.js.map → p-Dx0yXDO_.js.map} +1 -1
  138. package/dist/components/{p-D-3sn9sH.js → p-Dz4G6Q1l.js} +3 -3
  139. package/dist/components/{p-D-3sn9sH.js.map → p-Dz4G6Q1l.js.map} +1 -1
  140. package/dist/components/p-EGKFhNRS.js +127 -0
  141. package/dist/components/{p-BOrhSlbo.js.map → p-EGKFhNRS.js.map} +1 -1
  142. package/dist/components/{p-C9OqpwzA.js → p-F1r0ydKy.js} +15 -16
  143. package/dist/components/p-F1r0ydKy.js.map +1 -0
  144. package/dist/components/{p-Bo_qpOg-.js → p-LQISNowV.js} +3 -3
  145. package/dist/components/{p-Bo_qpOg-.js.map → p-LQISNowV.js.map} +1 -1
  146. package/dist/components/{p-C7n7EjKD.js → p-ZXZKAhiz.js} +3 -3
  147. package/dist/components/{p-C7n7EjKD.js.map → p-ZXZKAhiz.js.map} +1 -1
  148. package/dist/components/{p-DCmuKByr.js → p-jGwKbBta.js} +5 -5
  149. package/dist/components/{p-DCmuKByr.js.map → p-jGwKbBta.js.map} +1 -1
  150. package/dist/components/{p-CH39HrFZ.js → p-nEOSV6qt.js} +4 -4
  151. package/dist/components/{p-CH39HrFZ.js.map → p-nEOSV6qt.js.map} +1 -1
  152. package/dist/components/{p-XunATCgp.js → p-sBGx8qre.js} +7 -7
  153. package/dist/components/{p-XunATCgp.js.map → p-sBGx8qre.js.map} +1 -1
  154. package/dist/components/{p-C-hvo0Uo.js → p-ufmeP0E5.js} +8 -8
  155. package/dist/components/{p-C-hvo0Uo.js.map → p-ufmeP0E5.js.map} +1 -1
  156. package/dist/components/{p-CeHDqun7.js → p-yhRJRzUn.js} +3 -3
  157. package/dist/components/{p-CeHDqun7.js.map → p-yhRJRzUn.js.map} +1 -1
  158. package/dist/components/profile-history.js +1 -1
  159. package/dist/components/profile-info.js +1 -1
  160. package/dist/components/profile-media.js +1 -1
  161. package/dist/components/profile-tabs.js +1 -1
  162. package/dist/components/quick-message-add-template.js +1 -1
  163. package/dist/components/quick-message-app.js +7 -7
  164. package/dist/components/quick-message-file.js +1 -1
  165. package/dist/components/quick-message-image.js +1 -1
  166. package/dist/components/quick-message-modal.js +1 -1
  167. package/dist/components/quick-message-template.js +1 -1
  168. package/dist/components/quick-message-text-content.js +1 -1
  169. package/dist/components/search-box.js +1 -1
  170. package/dist/components/status-badge.js +1 -1
  171. package/dist/components/summarize-message-section.js +1 -1
  172. package/dist/components/tag-list.js +1 -1
  173. package/dist/components/tag-or-status-item.js +1 -1
  174. package/dist/components/tag-popper.js +1 -1
  175. package/dist/components/typography-clamp.js +1 -1
  176. package/dist/components/user-info-section.js +1 -1
  177. package/dist/components/z-avatar.js +1 -1
  178. package/dist/components/z-dialog.js +1 -1
  179. package/dist/esm/autocomplete-address_43.entry.js +81 -77
  180. package/dist/esm/quick-message-app.entry.js +1 -1
  181. package/dist/zignal-stencil-library/{p-c349823b.entry.js → p-3cea211f.entry.js} +168 -168
  182. package/dist/zignal-stencil-library/p-3cea211f.entry.js.map +1 -0
  183. package/dist/zignal-stencil-library/{p-4976f186.entry.js → p-cdcb0c65.entry.js} +2 -2
  184. package/dist/zignal-stencil-library/zignal-stencil-library.esm.js +1 -1
  185. package/package.json +1 -1
  186. package/dist/components/p-BNblLfcs.js +0 -161
  187. package/dist/components/p-BNblLfcs.js.map +0 -1
  188. package/dist/components/p-BOrhSlbo.js +0 -127
  189. package/dist/components/p-Bj6H7JrX.js +0 -35
  190. package/dist/components/p-C9OqpwzA.js.map +0 -1
  191. package/dist/components/p-DHM0YbIt.js +0 -79
  192. package/dist/components/p-Dnb_md64.js +0 -140
  193. package/dist/components/p-Dnb_md64.js.map +0 -1
  194. package/dist/components/p-mVYojO3m.js +0 -161
  195. package/dist/zignal-stencil-library/p-c349823b.entry.js.map +0 -1
  196. /package/dist/zignal-stencil-library/{p-4976f186.entry.js.map → p-cdcb0c65.entry.js.map} +0 -0
@@ -1 +1 @@
1
- {"file":"p-CH39HrFZ.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-nEOSV6qt.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}