zignal-stencil-library 1.1.148 → 1.1.150

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 (191) hide show
  1. package/dist/cjs/autocomplete-address_44.cjs.entry.js +221 -57
  2. package/dist/cjs/{dayjs-BSEUEjDP.js → dayjs-C-Yh2o_8.js} +1 -1
  3. package/dist/cjs/{index-BcqF7VoK.js → index-BXiJqJvp.js} +14 -2
  4. package/dist/cjs/index.cjs.js +1 -1
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/quick-message-app.cjs.entry.js +3 -3
  7. package/dist/cjs/zignal-stencil-library.cjs.js +1 -1
  8. package/dist/collection/api/index.js +11 -0
  9. package/dist/collection/components/autocomplete-address/autocomplete-address.css +1 -1
  10. package/dist/collection/components/autocomplete-multiple-select/autocomplete-multiple-select.css +1 -1
  11. package/dist/collection/components/autocomplete-select/autocomplete-select.css +1 -1
  12. package/dist/collection/components/channel-box/channel-box.css +1 -1
  13. package/dist/collection/components/chat-app/chat-app.css +1 -1
  14. package/dist/collection/components/chat-header/chat-header.css +1 -1
  15. package/dist/collection/components/chat-input/chat-input.css +1 -1
  16. package/dist/collection/components/chat-input/chat-input.js +3 -2
  17. package/dist/collection/components/checkbox-list/checkbox-list.css +1 -1
  18. package/dist/collection/components/dialog-bill-editor/dialog-bill-editor.css +1 -1
  19. package/dist/collection/components/dialog-custom-filter/dialog-custom-filter.css +1 -1
  20. package/dist/collection/components/dialog-editor/dialog-editor.css +1 -1
  21. package/dist/collection/components/dialog-preview-media/dialog-preview-media.css +1 -1
  22. package/dist/collection/components/dialog-search/dialog-search.css +1 -1
  23. package/dist/collection/components/internal-component/chat-item.js +2 -2
  24. package/dist/collection/components/menu-chat-channel/menu-chat-channel.css +1 -1
  25. package/dist/collection/components/menu-chat-type/menu-chat-type.css +1 -1
  26. package/dist/collection/components/menu-list/menu-list.css +1 -1
  27. package/dist/collection/components/message-box/message-box.css +1 -1
  28. package/dist/collection/components/message-box/message-box.js +41 -10
  29. package/dist/collection/components/message-content/message-content.css +1 -1
  30. package/dist/collection/components/message-item/message-item.css +1 -1
  31. package/dist/collection/components/message-media/message-media.css +1 -1
  32. package/dist/collection/components/message-media/message-media.js +17 -3
  33. package/dist/collection/components/profile-history/profile-history.css +1 -1
  34. package/dist/collection/components/profile-info/profile-info.css +1 -1
  35. package/dist/collection/components/profile-media/profile-media.css +1 -1
  36. package/dist/collection/components/profile-tabs/profile-tabs.css +1 -1
  37. package/dist/collection/components/quick-message-add-template/quick-message-add-template.css +1 -1
  38. package/dist/collection/components/quick-message-app/quick-message-app.css +1 -1
  39. package/dist/collection/components/quick-message-file/quick-message-file.css +1 -1
  40. package/dist/collection/components/quick-message-image/quick-message-image.css +1 -1
  41. package/dist/collection/components/quick-message-modal/quick-message-modal.css +1 -1
  42. package/dist/collection/components/quick-message-template/quick-message-template.css +1 -1
  43. package/dist/collection/components/search-box/search-box.css +1 -1
  44. package/dist/collection/components/status-badge/status-badge.css +1 -1
  45. package/dist/collection/components/tag-list/tag-list.css +1 -1
  46. package/dist/collection/components/tag-or-status-item/tag-or-status-item.css +1 -1
  47. package/dist/collection/components/tag-popper/tag-popper.css +1 -1
  48. package/dist/collection/components/typography-clamp/typography-clamp.css +1 -1
  49. package/dist/collection/components/z-avatar/z-avatar.css +1 -1
  50. package/dist/collection/components/z-dialog/z-dialog.css +1 -1
  51. package/dist/collection/utils/blobCache.js +109 -0
  52. package/dist/components/autocomplete-address.js +1 -1
  53. package/dist/components/autocomplete-multiple-select.js +1 -1
  54. package/dist/components/autocomplete-select.js +1 -1
  55. package/dist/components/channel-box.js +1 -1
  56. package/dist/components/chat-app.js +40 -40
  57. package/dist/components/chat-header.js +1 -1
  58. package/dist/components/chat-input.js +1 -1
  59. package/dist/components/checkbox-list.js +1 -1
  60. package/dist/components/dialog-bill-editor.js +1 -1
  61. package/dist/components/dialog-custom-filter.js +1 -1
  62. package/dist/components/dialog-editor.js +1 -1
  63. package/dist/components/dialog-preview-media.js +1 -1
  64. package/dist/components/dialog-search.js +1 -1
  65. package/dist/components/index.js +14 -2
  66. package/dist/components/menu-chat-channel.js +1 -1
  67. package/dist/components/menu-chat-type.js +1 -1
  68. package/dist/components/menu-list.js +1 -1
  69. package/dist/components/message-box.js +1 -1
  70. package/dist/components/message-content.js +1 -1
  71. package/dist/components/message-item.js +1 -1
  72. package/dist/components/message-media.js +1 -1
  73. package/dist/components/p-AyYQKLI0.js +231 -0
  74. package/dist/components/p-B66-WNwG.js +98 -0
  75. package/dist/components/p-B6dHsqyR.js +76 -0
  76. package/dist/components/p-B843hMpP.js +119 -0
  77. package/dist/components/{p-BVODBsHX.js → p-BAsEobFc.js} +121 -1
  78. package/dist/components/p-BENlobr4.js +108 -0
  79. package/dist/components/p-BJJG8i6C.js +554 -0
  80. package/dist/components/p-BShNVOgM.js +57 -0
  81. package/dist/components/p-BWanhohD.js +154 -0
  82. package/dist/components/p-BkeS5LHN.js +609 -0
  83. package/dist/components/p-BuyPb_t1.js +156 -0
  84. package/dist/components/p-C0b0zlyo.js +178 -0
  85. package/dist/components/p-C8Ntmizr.js +155 -0
  86. package/dist/components/p-CO_B5VHF.js +65 -0
  87. package/dist/components/p-CPC8hyVm.js +266 -0
  88. package/dist/components/p-CSQPmBsx.js +74 -0
  89. package/dist/components/{p-BGX1kvIy.js → p-CYqQU3So.js} +1 -1
  90. package/dist/components/p-CaLyTqBV.js +312 -0
  91. package/dist/components/p-Ckm-fbd_.js +32 -0
  92. package/dist/components/p-ClHLqP0h.js +129 -0
  93. package/dist/components/p-CsIlvYNu.js +171 -0
  94. package/dist/components/p-CyM1Sr7_.js +102 -0
  95. package/dist/components/p-D-gJvbYE.js +230 -0
  96. package/dist/components/p-D0wz1AiC.js +599 -0
  97. package/dist/components/p-D5-EhWJT.js +214 -0
  98. package/dist/components/p-D9Idg2sX.js +515 -0
  99. package/dist/components/p-DDW6jLHI.js +158 -0
  100. package/dist/components/p-DTzm41EI.js +135 -0
  101. package/dist/components/p-D_6MzfZc.js +107 -0
  102. package/dist/components/p-DbT3MOzx.js +51 -0
  103. package/dist/components/p-DcAbqztq.js +684 -0
  104. package/dist/components/p-DdF4cRot.js +166 -0
  105. package/dist/components/p-DddCDmUy.js +161 -0
  106. package/dist/components/p-Dj-S0Fp7.js +128 -0
  107. package/dist/components/{p-npI27bK4.js → p-DqfGjzaR.js} +1 -1
  108. package/dist/components/p-DwMML6GC.js +96 -0
  109. package/dist/components/p-Ig_9PoO8.js +122 -0
  110. package/dist/components/p-NTP3_A_K.js +223 -0
  111. package/dist/components/p-ZBdYfF6D.js +563 -0
  112. package/dist/components/p-i9WV69gi.js +168 -0
  113. package/dist/components/p-lsy2POLt.js +138 -0
  114. package/dist/components/profile-history.js +1 -1
  115. package/dist/components/profile-info.js +1 -1
  116. package/dist/components/profile-media.js +1 -1
  117. package/dist/components/profile-tabs.js +1 -1
  118. package/dist/components/quick-message-add-template.js +1 -1
  119. package/dist/components/quick-message-app.js +6 -6
  120. package/dist/components/quick-message-file.js +1 -1
  121. package/dist/components/quick-message-image.js +1 -1
  122. package/dist/components/quick-message-modal.js +1 -1
  123. package/dist/components/quick-message-template.js +1 -1
  124. package/dist/components/search-box.js +1 -1
  125. package/dist/components/status-badge.js +1 -1
  126. package/dist/components/summarize-message-section.js +1 -1
  127. package/dist/components/tag-list.js +1 -1
  128. package/dist/components/tag-or-status-item.js +1 -1
  129. package/dist/components/tag-popper.js +1 -1
  130. package/dist/components/typography-clamp.js +1 -1
  131. package/dist/components/user-info-section.js +1 -1
  132. package/dist/components/z-avatar.js +1 -1
  133. package/dist/components/z-dialog.js +1 -1
  134. package/dist/esm/autocomplete-address_44.entry.js +221 -57
  135. package/dist/esm/{dayjs-CudFbPUo.js → dayjs-BzCDyqMN.js} +1 -1
  136. package/dist/esm/{index-B3nb31xy.js → index-DPOSmdTJ.js} +14 -2
  137. package/dist/esm/index.js +1 -1
  138. package/dist/esm/loader.js +1 -1
  139. package/dist/esm/quick-message-app.entry.js +3 -3
  140. package/dist/esm/zignal-stencil-library.js +1 -1
  141. package/dist/types/components/message-box/message-box.d.ts +4 -0
  142. package/dist/types/components/message-media/message-media.d.ts +1 -0
  143. package/dist/types/utils/blobCache.d.ts +43 -0
  144. package/dist/zignal-stencil-library/index.esm.js +1 -1
  145. package/dist/zignal-stencil-library/p-DPOSmdTJ.js +1 -0
  146. package/dist/zignal-stencil-library/{p-QJh7p40E.js → p-DPcrmSvN.js} +1 -1
  147. package/dist/zignal-stencil-library/p-b1536b7a.entry.js +1 -0
  148. package/dist/zignal-stencil-library/p-ca840739.entry.js +2 -0
  149. package/dist/zignal-stencil-library/zignal-stencil-library.esm.js +1 -1
  150. package/package.json +1 -1
  151. package/dist/components/p-21Qk-BoJ.js +0 -266
  152. package/dist/components/p-B69r1-0H.js +0 -148
  153. package/dist/components/p-BAI86-4s.js +0 -214
  154. package/dist/components/p-BHDuHbLy.js +0 -76
  155. package/dist/components/p-BMhuvIaF.js +0 -223
  156. package/dist/components/p-BPFyT5uM.js +0 -102
  157. package/dist/components/p-BS0oMOB8.js +0 -96
  158. package/dist/components/p-BWWg8SvO.js +0 -51
  159. package/dist/components/p-BZl8T2Tz.js +0 -107
  160. package/dist/components/p-BkegTZZZ.js +0 -166
  161. package/dist/components/p-C6m4Z8Xp.js +0 -57
  162. package/dist/components/p-C9QH7UXl.js +0 -156
  163. package/dist/components/p-CC2CPgQg.js +0 -168
  164. package/dist/components/p-CDq5Z8Ud.js +0 -155
  165. package/dist/components/p-CFjzeok2.js +0 -598
  166. package/dist/components/p-CGru_XIv.js +0 -122
  167. package/dist/components/p-CRqau0So.js +0 -563
  168. package/dist/components/p-CTtE-KJM.js +0 -154
  169. package/dist/components/p-CVG65nYO.js +0 -684
  170. package/dist/components/p-Ca3Toi_4.js +0 -98
  171. package/dist/components/p-CavEi7iy.js +0 -119
  172. package/dist/components/p-CcHuEbS7.js +0 -554
  173. package/dist/components/p-CgmA90r7.js +0 -312
  174. package/dist/components/p-CiH5pBNK.js +0 -32
  175. package/dist/components/p-Cj5OTlrT.js +0 -230
  176. package/dist/components/p-CqFbSyha.js +0 -178
  177. package/dist/components/p-CuGtrBjV.js +0 -515
  178. package/dist/components/p-Dd3T03Sb.js +0 -129
  179. package/dist/components/p-EBfzBL-l.js +0 -171
  180. package/dist/components/p-HWiCVHvh.js +0 -578
  181. package/dist/components/p-VVAEXFxN.js +0 -138
  182. package/dist/components/p-ZOA0731B.js +0 -65
  183. package/dist/components/p-ezBsYubN.js +0 -74
  184. package/dist/components/p-g3ud0W_e.js +0 -135
  185. package/dist/components/p-m0adz7AB.js +0 -128
  186. package/dist/components/p-myvwzgA_.js +0 -108
  187. package/dist/components/p-tUWn2rrj.js +0 -158
  188. package/dist/components/p-vv4kootE.js +0 -231
  189. package/dist/zignal-stencil-library/p-47a5491a.entry.js +0 -1
  190. package/dist/zignal-stencil-library/p-51ea94e6.entry.js +0 -2
  191. package/dist/zignal-stencil-library/p-B3nb31xy.js +0 -1
@@ -0,0 +1,563 @@
1
+ import { p as proxyCustomElement, H, c as createEvent, h, a as Host } from './p-CspQEuuq.js';
2
+ import { d as dayjs } from './p-B_5_ahYE.js';
3
+ import { a as updateQuickMessageLibraryFileName, u as uploadFile, c as createQuickMessageLibraryFiles, d as deleteQuickMessageLibraryFile, g as getQuickMessageLibraryFiles } from './p-Br7G1klJ.js';
4
+ import { c as configStore } from './p-g5ZX6XGs.js';
5
+ import { u as useTranslation } from './p-CjxHbUhu.js';
6
+ import { I as Icon } from './p-Sf5NNGh3.js';
7
+ import { o as openDialog, h as handleError } from './p-uDTLu3vv.js';
8
+
9
+ const quickMessageFileCss = "@layer base{*,::backdrop,:after,:before{--tw-space-y-reverse:0;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-space-x-reverse:0;--tw-shadow:0 0 #0000;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-alpha:100%;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-offset-width:0;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-drop-shadow-alpha:100%;border:0 solid;box-sizing:border-box;margin:0;padding:0}}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-space-x-reverse:0;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-space-y-reverse:0;--tw-leading:initial}}}@layer theme{:host,:root{--container-xl:36rem;--text-xl:1.25rem;--text-xl--line-height:1.4;--color-yellow-500:oklch(79.5% .184 86.047);--container-3xs:16rem;--container-sm:24rem;--color-yellow-300:oklch(90.5% .182 98.111);--color-red-50:oklch(97.1% .013 17.38);--color-red-200:oklch(88.5% .062 18.334);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-900:oklch(20.8% .042 265.755);--container-xs:20rem;--container-md:28rem;--text-2xl:1.5rem;--text-2xl--line-height:1.33333;--color-slate-500:oklch(55.4% .046 257.417);--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--color-red-700:oklch(50.5% .213 27.518);--color-green-500:oklch(72.3% .219 149.579);--color-green-700:oklch(52.7% .154 150.069);--color-blue-500:oklch(62.3% .214 259.815);--color-pink-100:oklch(94.8% .028 342.258);--font-weight-bold:700;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-red-500:oklch(63.7% .237 25.331);--color-blue-600:oklch(54.6% .245 262.881);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:1.33333;--text-sm:.875rem;--text-sm--line-height:1.42857;--text-base:1rem;--text-base--line-height:1.5;--text-lg:1.125rem;--text-lg--line-height:1.55556;--font-weight-medium:500;--font-weight-semibold:600;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:\"Kanit\",var(--default-font);--default-mono-font-family:var(--font-mono);--default-font:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--color-primary:#e02848;--color-secondary:#023761;--color-background:#fff;--color-surface:#000;--color-paper:#f3f4f6;--color-divider:#e5e7eb;--color-theme-gray:#6b7280;--color-overlay:#0000004d;--color-selected:#fdeef1}}@layer base{::file-selector-button{appearance:button;background-color:#0000;border:0 solid;border-radius:0;box-sizing:border-box;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;margin:0;margin-inline-end:4px;opacity:1;padding:0}:host,html{-webkit-text-size-adjust:100%;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);tab-size:4;-webkit-tap-highlight-color:transparent;line-height:1.5}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-size:1em;font-variation-settings:var(--default-mono-font-variation-settings,normal)}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}button,input,optgroup,select,textarea{background-color:#0000;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field{padding-block:0;padding-bottom:0;padding-top:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field{padding-block:0;padding-bottom:0;padding-top:0}::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field{padding-block:0;padding-bottom:0;padding-top:0}::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-second-field{padding-block:0;padding-bottom:0;padding-top:0}::-webkit-datetime-edit-meridiem-field{padding-block:0;padding-bottom:0;padding-top:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],input:where(:not([type])),select,textarea{appearance:none;--tw-shadow:0 0 #0000;background-color:#fff;border-color:oklch(55.1% .027 264.364);border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}:is([type=text],input:where(:not([type])),[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select):focus{outline-offset:2px;--tw-ring-inset:var(--tw-empty, );--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:oklch(54.6% .245 262.881);--tw-ring-offset-shadow:var(--tw-ring-inset)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color);border-color:oklch(54.6% .245 262.881);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000}input::placeholder,textarea::placeholder{color:oklch(55.1% .027 264.364);opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}select{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='oklch(55.1%25 0.027 264.364)' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E\");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;print-color-adjust:exact}[multiple],[size]:where(select:not([size=\"1\"])){background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;print-color-adjust:unset}[type=checkbox],[type=radio]{appearance:none;color:oklch(54.6% .245 262.881);print-color-adjust:exact;-webkit-user-select:none;user-select:none;vertical-align:middle;--tw-shadow:0 0 #0000;background-color:#fff;background-origin:border-box;border-color:oklch(55.1% .027 264.364);border-width:1px;display:inline-block;flex-shrink:0;height:1rem;padding:0;width:1rem}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline-offset:2px;--tw-ring-inset:var(--tw-empty, );--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:oklch(54.6% .245 262.881);--tw-ring-offset-shadow:var(--tw-ring-inset)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000}[type=checkbox]:checked,[type=radio]:checked{background-color:currentColor;background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:#0000}[type=checkbox]:checked{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0'/%3E%3C/svg%3E\")}[type=radio]:checked{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E\")}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=radio]:checked:focus,[type=radio]:checked:hover{background-color:currentColor;border-color:#0000}[type=checkbox]:indeterminate{background-color:currentColor;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E\");background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:#0000}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:#0000}[type=file]{background:unset;border-color:inherit;border-radius:0;border-width:0;font-size:unset;line-height:inherit;padding:0}[type=file]:focus{outline:1px solid buttontext;outline:1px auto -webkit-focus-ring-color}}@layer components{.dialog-backdrop{align-items:center;background-color:#0006;display:flex;inset:calc(var(--spacing)*0);justify-content:center;position:fixed;z-index:50}@supports (color:color-mix(in lab,red,red)){.dialog-backdrop{background-color:color-mix(in oklab,var(--color-black)40%,transparent);background-color:color-mix(in srgb,#00040%,transparent)}}.chat-item{border-radius:var(--radius-xl);cursor:pointer;margin-block:calc(var(--spacing)*1);margin-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);align-items:flex-start;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);display:flex;position:relative}:where(.chat-item>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*4*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*4*var(--tw-space-x-reverse))}.chat-item .chat-item-pin{position:absolute;right:calc(var(--spacing)*-3);top:calc(var(--spacing)*1)}.chat-item .chat-item-pin-icon{fill:currentColor;height:calc(var(--spacing)*3);rotate:45deg;width:calc(var(--spacing)*3)}.chat-item .chat-item-content-container{display:flex;flex-direction:row;width:100%}:where(.chat-item .chat-item-content-container>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*4*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*4*var(--tw-space-x-reverse))}.chat-item .chat-item-avatar-wrapper{align-self:center;flex-shrink:0;position:relative}.chat-item .chat-item-avatar-badge{bottom:calc(var(--spacing)*-.5);position:absolute;right:calc(var(--spacing)*-.5)}.chat-item .chat-item-content-wrapper{min-height:calc(var(--spacing)*18);width:100%}.chat-item .chat-item-content-main{align-items:center;display:flex}:where(.chat-item .chat-item-content-main>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*1*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*1*var(--tw-space-x-reverse))}.chat-item .chat-item-content-main-image{border-radius:3.40282e+38px;height:calc(var(--spacing)*4);width:calc(var(--spacing)*4)}.chat-item .chat-item-content-main-name{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.chat-item .chat-item-content-main-name,.chat-item .chat-item-content-main-time{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.chat-item .chat-item-content-main-time{color:var(--color-gray-500);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));margin-left:auto}.chat-item .chat-item-content-secondary{align-items:flex-start;display:flex;flex-direction:row;width:100%}.chat-item .chat-item-content-secondary-nickname{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.chat-item .chat-item-content-secondary-message,.chat-item .chat-item-content-secondary-nickname{color:var(--color-surface);-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.chat-item .chat-item-content-secondary-message{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.chat-item .chat-item-content-unread{background-color:var(--color-primary);border-radius:3.40282e+38px;color:var(--color-white);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));margin-left:auto}.chat-item .chat-item-content-unread-mark{display:inline-block;height:calc(var(--spacing)*2.5);width:calc(var(--spacing)*2.5)}.chat-item .chat-item-content-unread-count{padding-block:calc(var(--spacing)*.5);padding-inline:calc(var(--spacing)*2)}.z-icon-button{cursor:pointer;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);align-items:center;border-radius:3.40282e+38px;display:inline-flex;font-weight:var(--font-weight-medium);justify-content:center;transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.z-icon-button:focus{--tw-outline-style:none;outline-style:none}.z-icon-button-primary{background-color:var(--color-primary);color:var(--color-white)}.z-icon-button-outlined{border-color:var(--color-primary);border-style:var(--tw-border-style);border-width:1px}.z-icon-button-outlined,.z-icon-button-text{color:var(--color-primary)}.z-icon-button-disabled{cursor:not-allowed;opacity:.5}.z-button{cursor:pointer;--tw-font-weight:var(--font-weight-medium);align-items:center;border-radius:3.40282e+38px;display:inline-flex;font-weight:var(--font-weight-medium);justify-content:center;transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.z-button:focus{--tw-outline-style:none;outline-style:none}.z-button-small{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));padding-block:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*2)}.z-button-medium{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3)}.z-button-large{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));padding-block:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4)}.z-button-primary{background-color:var(--color-primary);color:var(--color-white)}.z-button-outlined{border-color:var(--color-primary);border-style:var(--tw-border-style);border-width:1px;color:var(--color-primary)}.z-button-disabled{cursor:not-allowed;opacity:.5}.z-button-text{margin-inline:calc(var(--spacing)*2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.z-input-area-label{margin-bottom:calc(var(--spacing)*1);--tw-font-weight:var(--font-weight-medium);display:block;font-weight:var(--font-weight-medium)}.z-input-area-input,.z-input-area-label{color:var(--color-surface);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.z-input-area-input{background-color:var(--color-paper);border-color:var(--color-surface);border-radius:var(--radius-lg);border-style:var(--tw-border-style);padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*4);--tw-ring-color:var(--color-primary);border-width:1px;width:100%}.z-input-area-input:focus{border-color:var(--color-primary);--tw-outline-style:none;outline-style:none}.z-input-area-error{color:var(--color-red-500);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));margin-top:calc(var(--spacing)*1)}.z-input-label{margin-bottom:calc(var(--spacing)*1);--tw-font-weight:var(--font-weight-medium);display:block;font-weight:var(--font-weight-medium)}.z-input,.z-input-label{color:var(--color-surface);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.z-input{background-color:var(--color-background);border-color:var(--color-divider);border-radius:var(--radius-md);border-style:var(--tw-border-style);padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*4);--tw-ring-color:var(--color-primary);border-width:1px;width:100%}.z-input:focus{border-color:var(--color-primary);--tw-outline-style:none;outline-style:none}.z-input-error{color:var(--color-red-500);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));margin-top:calc(var(--spacing)*1)}.z-select-input-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));margin-bottom:calc(var(--spacing)*1);--tw-font-weight:var(--font-weight-medium);display:block;font-weight:var(--font-weight-medium)}.z-tag-or-status-item{align-items:center;border-radius:var(--radius-2xl);gap:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*3);--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);display:inline-flex}.z-tag-or-status-item .z-tag-or-status-item-name{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));max-width:calc(var(--spacing)*20)}.z-tag-or-status-item .z-tag-or-status-item-icon{border-radius:3.40282e+38px;height:calc(var(--spacing)*4);width:calc(var(--spacing)*4)}.z-context-input{align-items:stretch;display:flex;flex-direction:row;margin-block:calc(var(--spacing)*1)}.z-context-input-key{background-color:var(--color-background);border-bottom-left-radius:var(--radius-3xl);border-color:var(--color-divider);border-style:var(--tw-border-style);border-top-left-radius:var(--radius-3xl);border-width:1px;color:var(--color-surface);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));max-height:6.4rem;min-height:2.4rem;padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*4);resize:none;width:100%;--tw-ring-color:var(--color-primary);flex:1}.z-context-input-key:focus{border-color:var(--color-primary);--tw-outline-style:none;outline-style:none}.z-context-input-value{background-color:var(--color-background);border-bottom-right-radius:var(--radius-3xl);border-color:var(--color-primary);border-style:var(--tw-border-style);border-top-right-radius:var(--radius-3xl);border-width:1px;color:var(--color-surface);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));max-height:6.4rem;min-height:2.4rem;padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*4);resize:none;width:100%;--tw-ring-color:var(--color-primary);flex:1}.z-context-input-value:focus{border-color:var(--color-primary);--tw-outline-style:none;outline-style:none}.z-text-with-link{color:var(--color-blue-600);text-decoration-line:underline}.z-button-group{display:inline-flex}.z-button-group-tab{border-radius:var(--radius-md);display:flex;gap:calc(var(--spacing)*1);padding:calc(var(--spacing)*.5)!important}.z-button-group-tab-overlay{background-color:var(--color-overlay)}.z-button-group-item{border-style:var(--tw-border-style);cursor:pointer;--tw-font-weight:var(--font-weight-medium);align-items:center;border-width:1px;display:inline-flex;font-weight:var(--font-weight-medium);justify-content:center;transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.z-button-group-item:focus{--tw-outline-style:none;outline-style:none}.z-button-group-item-tab{align-items:center;border-radius:var(--radius-sm);border-style:var(--tw-border-style)!important;border-width:0!important;display:flex;flex:1;flex-direction:column;gap:calc(var(--spacing)*2);justify-content:center;padding:calc(var(--spacing)*1)!important}.z-button-group-item-tab-selected{background-color:var(--color-white);--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.z-button-group-item-tab-selected,.z-button-group-item-tab-unselected{border-style:var(--tw-border-style)!important;border-width:0!important}.z-button-group-small{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));padding-block:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*2)}.z-button-group-medium{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*3)}.z-button-group-large{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));padding-block:calc(var(--spacing)*3);padding-inline:calc(var(--spacing)*4)}.z-button-group-item-first{border-bottom-left-radius:3.40282e+38px;border-top-left-radius:3.40282e+38px}.z-button-group-item-last{border-bottom-right-radius:3.40282e+38px;border-top-right-radius:3.40282e+38px}.z-button-group-item-middle{border-radius:0}.z-button-group-item-primary-selected{background-color:var(--color-primary);border-color:var(--color-primary);color:var(--color-white)}.z-button-group-item-primary-unselected{background-color:var(--color-white);border-color:var(--color-primary);color:var(--color-primary)}.z-button-group-item-outlined-selected{background-color:var(--color-primary);border-color:var(--color-primary);color:var(--color-white)}.z-button-group-item-outlined-unselected{background-color:#0000;border-color:var(--color-primary);color:var(--color-primary)}.z-button-group-item-disabled{cursor:not-allowed;opacity:.5}.z-button-group-item:not(:first-child){margin-left:-1px}.z-avatar-error{align-items:center;display:flex;justify-content:center}.z-avatar-2x-small{height:calc(var(--spacing)*3);min-height:calc(var(--spacing)*3);min-width:calc(var(--spacing)*3);width:calc(var(--spacing)*3)}.z-avatar-x-small{height:calc(var(--spacing)*4);min-height:calc(var(--spacing)*4);min-width:calc(var(--spacing)*4);width:calc(var(--spacing)*4)}.z-avatar-small{height:calc(var(--spacing)*8);min-height:calc(var(--spacing)*8);min-width:calc(var(--spacing)*8);width:calc(var(--spacing)*8)}.z-avatar-medium{height:calc(var(--spacing)*16);min-height:calc(var(--spacing)*16);min-width:calc(var(--spacing)*16);width:calc(var(--spacing)*16)}.z-avatar-large{height:calc(var(--spacing)*32);min-height:calc(var(--spacing)*32);min-width:calc(var(--spacing)*32);width:calc(var(--spacing)*32)}.z-avatar-full{height:100%;width:100%}.z-avatar-group{background-color:#023761;border-radius:3.40282e+38px}}@layer utilities{.contents{display:contents}.bg-background{background-color:var(--color-background)}.px-4{padding-inline:calc(var(--spacing)*4)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-surface{color:var(--color-surface)}}[data-theme=light]{--color-primary:#e02848;--color-secondary:#023761;--color-background:#fff;--color-surface:#000;--color-paper:#f3f4f6;--color-divider:#e5e7eb;--color-theme-gray:#6b7280;--color-overlay:#0000004d;--color-selected:#fdeef1}[data-theme=dark]{--color-primary:#b50f30;--color-secondary:#fff;--color-background:#23292d;--color-surface:#fff;--color-paper:#374151;--color-divider:#4b5563;--color-theme-gray:#d1d5db;--color-overlay:#ffffff4d;--color-selected:#3a242e}.scroll-container::-webkit-scrollbar{background:#0000001a;height:8px;width:8px}.scroll-container:active::-webkit-scrollbar,.scroll-container:hover::-webkit-scrollbar{background:#0003}.scroll-container:active::-webkit-scrollbar-thumb,.scroll-container:hover::-webkit-scrollbar-thumb{background:#0006;border-radius:4px}.bg-time-badge{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-time-badge{background-color:color-mix(in srgb,var(--color-surface)30%,transparent);background-color:color-mix(in srgb,#00030%,transparent)}}.placeholder-surface::placeholder{color:var(--color-text-gray)}.z-width-100{width:100%}.z-width-90{width:90%}.z-width-75{width:75%}.z-width-50{width:50%}.z-width-25{width:25%}.z-width-0{width:0}.z-animate-width{transition-duration:.5s;transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1)}.z-animate-grid-template-cols{transition:grid-template-rows .5s}[type=checkbox]{background-color:var(--color-gray-300);border-color:var(--color-gray-300);border-radius:4px;cursor:pointer}[type=checkbox]:checked,[type=checkbox]:indeterminate{background-color:var(--color-primary);border-color:var(--color-primary);border-radius:4px;cursor:pointer}[type=checkbox]:focus{offset:0;outline-offset:0;--tw-ring-color:var(--color-primary);outline:none}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.grid-cols-1{grid-template-columns:1fr}.grid-cols-1_3{grid-template-columns:1fr 3fr}.grid-cols-1_2_1{grid-template-columns:1fr 2fr 1fr}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing)*0)}.top-3{top:calc(var(--spacing)*3)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.bottom-3{bottom:calc(var(--spacing)*3)}.left-3{left:calc(var(--spacing)*3)}.z-10{z-index:10}.z-80{z-index:80}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1}.size-4{height:calc(var(--spacing)*4);width:calc(var(--spacing)*4)}.size-6{height:calc(var(--spacing)*6);width:calc(var(--spacing)*6)}.size-8{height:calc(var(--spacing)*8);width:calc(var(--spacing)*8)}.size-12{height:calc(var(--spacing)*12);width:calc(var(--spacing)*12)}.size-14{height:calc(var(--spacing)*14);width:calc(var(--spacing)*14)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-\\[180px\\]{height:180px}.h-\\[220px\\]{height:220px}.h-\\[280px\\]{height:280px}.h-full{height:100%}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-\\[200px\\]{width:200px}.w-\\[250px\\]{width:250px}.w-full{width:100%}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-xs{max-width:var(--container-xs)}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.animate-spin{animation:var(--animate-spin)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\\[18px\\]{border-radius:18px}.rounded-full{border-radius:3.40282e+38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-\\[1\\.5px\\]{border-style:var(--tw-border-style);border-width:1.5px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-b-\\[1\\.5px\\]{border-bottom-style:var(--tw-border-style);border-bottom-width:1.5px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-current{border-color:currentColor}.border-primary{border-color:var(--color-primary)}.border-red-500{border-color:var(--color-red-500)}.bg-slate-900\\/40{background-color:#0f172b66}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\\/40{background-color:color-mix(in oklab,var(--color-slate-900)40%,transparent)}}.bg-slate-900\\/60{background-color:#0f172b99}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\\/60{background-color:color-mix(in oklab,var(--color-slate-900)60%,transparent)}}.bg-surface{background-color:var(--color-surface)}.bg-transparent{background-color:#0000}.bg-white\\/90{background-color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.bg-white\\/90{background-color:color-mix(in srgb,#fff90%,transparent);background-color:color-mix(in oklab,var(--color-white)90%,transparent)}}.object-cover{object-fit:cover}.p-1{padding:calc(var(--spacing)*1)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-12{padding-block:calc(var(--spacing)*12)}.pr-16{padding-right:calc(var(--spacing)*16)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pl-2{padding-left:calc(var(--spacing)*2)}.text-center{text-align:center}.text-right{text-align:right}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[13px\\]{font-size:13px}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-primary{color:var(--color-primary)}.text-red-500{color:var(--color-red-500)}.text-slate-700{color:var(--color-slate-700)}.text-theme-gray{color:var(--color-theme-gray)}.text-white{color:var(--color-white)}.placeholder-surface::placeholder{color:var(--color-surface)}.opacity-0{opacity:0}.opacity-60{opacity:.6}.opacity-80{opacity:.8}.shadow,.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)}.shadow,.shadow-sm,.shadow-xl{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a)}.ring-primary{--tw-ring-color:var(--color-primary)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-all,.transition-colors{transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-opacity{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.focus\\:border-red-500:focus{border-color:var(--color-red-500)}.focus\\:ring-0:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)}.focus\\:ring-0:focus,.focus\\:ring-2:focus{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)}.focus\\:ring-red-200:focus{--tw-ring-color:var(--color-red-200)}.focus\\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\\:ring-slate-200:focus{--tw-ring-color:var(--color-slate-200)}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}}@keyframes spin{to{transform:rotate(1turn)}}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{.top-1\\/2{top:50%}.right-2{right:calc(var(--spacing)*2)}.col-span-full{grid-column:1/-1}.mt-auto{margin-top:auto}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.size-3{height:calc(var(--spacing)*3);width:calc(var(--spacing)*3)}.h-16{height:calc(var(--spacing)*16)}.min-h-0{min-height:calc(var(--spacing)*0)}.w-16{width:calc(var(--spacing)*16)}.min-w-0{min-width:calc(var(--spacing)*0)}.-translate-y-1\\/2{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.auto-rows-auto{grid-auto-rows:auto}.content-start{align-content:flex-start}.gap-2\\.5{gap:calc(var(--spacing)*2.5)}.overflow-y-auto{overflow-y:auto}.border-divider{border-color:var(--color-divider)}.border-transparent{border-color:#0000}.bg-primary{background-color:var(--color-primary)}.p-1\\.5{padding:calc(var(--spacing)*1.5)}.py-2\\.5{padding-block:calc(var(--spacing)*2.5)}.pt-2{padding-top:calc(var(--spacing)*2)}.pr-9{padding-right:calc(var(--spacing)*9)}.text-gray-400{color:var(--color-gray-400)}.focus\\:border-primary:focus{border-color:var(--color-primary)}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-40:disabled{opacity:.4}.h-10{height:calc(var(--spacing)*10)}.w-10{width:calc(var(--spacing)*10)}.break-words{overflow-wrap:break-word}.inset-y-0{inset-block:calc(var(--spacing)*0)}.container{width:100%}.mb-2{margin-bottom:calc(var(--spacing)*2)}.size-5{height:calc(var(--spacing)*5);width:calc(var(--spacing)*5)}.size-10{height:calc(var(--spacing)*10);width:calc(var(--spacing)*10)}.h-40{height:calc(var(--spacing)*40)}.h-\\[200px\\]{height:200px}.w-60{width:calc(var(--spacing)*60)}.shrink-0{flex-shrink:0}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.self-end{align-self:flex-end}.border-surface{border-color:var(--color-surface)}.py-1{padding-block:calc(var(--spacing)*1)}.py-10{padding-block:calc(var(--spacing)*10)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.whitespace-pre-line{white-space:pre-line}.text-slate-500{color:var(--color-slate-500)}.opacity-70{opacity:.7}.shadow-\\[0_8px_24px_rgba\\(15\\,23\\,42\\,0\\.08\\)\\]{--tw-shadow:0 8px 24px var(--tw-shadow-color,#0f172a14)}.shadow-\\[0_8px_24px_rgba\\(15\\,23\\,42\\,0\\.08\\)\\],.shadow-sm{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)}.max-w-sm{max-width:var(--container-sm)}.text-green-500{color:var(--color-green-500)}.text-yellow-500{color:var(--color-yellow-500)}.hidden\\!{display:none!important}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.bg-paper{background-color:var(--color-paper)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.visible{visibility:visible}.mx-auto{margin-inline:auto}.size-18{height:calc(var(--spacing)*18);width:calc(var(--spacing)*18)}}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*2*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*2*var(--tw-space-y-reverse))}}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{.mb-auto{margin-bottom:auto}.px-1{padding-inline:calc(var(--spacing)*1)}.text-black{color:var(--color-black)}.col-span-2{grid-column:span 2/span 2}.my-2{margin-block:calc(var(--spacing)*2)}.w-xl{width:var(--container-xl)}.w-xs{width:var(--container-xs)}.mr-2{margin-right:calc(var(--spacing)*2)}.bg-primary\\/10{background-color:#e028481a}}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{@supports (color:color-mix(in lab,red,red)){.bg-primary\\/10{background-color:color-mix(in srgb,#e0284810%,transparent);background-color:color-mix(in oklab,var(--color-primary)10%,transparent)}}.underline{text-decoration-line:underline}.mb-1{margin-bottom:calc(var(--spacing)*1)}.ml-1{margin-left:calc(var(--spacing)*1)}.size-1\\.5{height:calc(var(--spacing)*1.5);width:calc(var(--spacing)*1.5)}.h-\\[40px\\]{height:40px}.w-1\\/4{width:25%}.rotate-0{rotate:none}.rotate-180{rotate:180deg}.fill-current{fill:currentColor}.m-auto{margin:auto}.size-32{height:calc(var(--spacing)*32);width:calc(var(--spacing)*32)}.-top-12{top:calc(var(--spacing)*-12)}.-top-24{top:calc(var(--spacing)*-24)}.mt-10{margin-top:calc(var(--spacing)*10)}.mb-10{margin-bottom:calc(var(--spacing)*10)}.inline-block{display:inline-block}.pt-4{padding-top:calc(var(--spacing)*4)}.size-2{height:calc(var(--spacing)*2);width:calc(var(--spacing)*2)}.bg-pink-100{background-color:var(--color-pink-100)}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.max-w-3xs{max-width:var(--container-3xs)}.resize{resize:both}.rounded-br-\\[0\\]{border-bottom-right-radius:0}.rounded-bl-\\[0\\]{border-bottom-left-radius:0}.bg-black{background-color:var(--color-black)}.bg-white{background-color:var(--color-white)}.p-2{padding:calc(var(--spacing)*2)}.rotate-45{rotate:45deg}.text-blue-500{color:var(--color-blue-500)}.m-0\\.5{margin:calc(var(--spacing)*.5)}.size-42{height:calc(var(--spacing)*42);width:calc(var(--spacing)*42)}.h-20{height:calc(var(--spacing)*20)}.w-42{width:calc(var(--spacing)*42)}.right-full{right:100%}.-bottom-2{bottom:calc(var(--spacing)*-2)}.left-full{left:100%}.mb-0\\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-2\\.5{margin-bottom:calc(var(--spacing)*2.5)}.ml-2{margin-left:calc(var(--spacing)*2)}.justify-start{justify-content:flex-start}.bg-yellow-300{background-color:var(--color-yellow-300)}.pl-10{padding-left:calc(var(--spacing)*10)}.text-left{text-align:left}.-right-0\\.5{right:calc(var(--spacing)*-.5)}.-bottom-0\\.5{bottom:calc(var(--spacing)*-.5)}.col-span-3{grid-column:span 3/span 3}.gap-y-1{row-gap:calc(var(--spacing)*1)}.border-b-\\[0\\.5px\\]{border-bottom-style:var(--tw-border-style);border-bottom-width:.5px}.whitespace-nowrap{white-space:nowrap}.text-background{color:var(--color-background)}.size-16{height:calc(var(--spacing)*16);width:calc(var(--spacing)*16)}.size-\\[8px\\]{height:8px;width:8px}.size-\\[10px\\]{height:10px;width:10px}.col-span-1{grid-column:span 1/span 1}.m-2{margin:calc(var(--spacing)*2)}.mx-4{margin-inline:calc(var(--spacing)*4)}.ml-0\\.5{margin-left:calc(var(--spacing)*.5)}.w-1\\/2{width:50%}.max-w-32{max-width:calc(var(--spacing)*32)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0)}.translate-y-0,.translate-y-full{translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-full{--tw-translate-y:100%}.bg-selected{background-color:var(--color-selected)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.text-green-700{color:var(--color-green-700)}.text-red-700{color:var(--color-red-700)}.capitalize{text-transform:capitalize}.opacity-100{opacity:1}}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities;/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer components{.chat-item .chat-item-content-main-name,.chat-item .chat-item-content-main-time{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.chat-item .chat-item-content-secondary-message,.chat-item .chat-item-content-secondary-nickname{color:var(--color-surface);-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.z-icon-button-outlined,.z-icon-button-text{color:var(--color-primary)}.z-input,.z-input-area-input,.z-input-area-label,.z-input-label{color:var(--color-surface);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.z-button-group-item-tab,.z-button-group-item-tab-selected{border-style:var(--tw-border-style)!important;border-width:0!important}}@layer utilities{.focus\\:ring-0:focus,.focus\\:ring-2:focus,.shadow,.shadow-\\[0_8px_24px_rgba\\(15\\,23\\,42\\,0\\.08\\)\\],.shadow-sm,.shadow-xl{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.translate-y-0,.translate-y-full{translate:var(--tw-translate-x)var(--tw-translate-y)}}@property --tw-space-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-leading{syntax:\"*\";inherits:false}:host{position:relative}.quick-message-file__icon{background:var(--quick-modal-primary-ghost);color:var(--quick-modal-primary)}.quick-message-file__action-button{background:0 0;border:1px solid #94a3b866}.quick-message-file__send{background:var(--quick-modal-primary);border:none;color:#fff}.quick-message-file__list-more-button{align-items:center;background:0 0;border:none;border-radius:.5rem;color:inherit;cursor:pointer;display:inline-flex;justify-content:center;margin-left:auto;padding:.25rem}.quick-message-file__list-more-button:hover{background:#94a3b81f}.quick-message-file__menu-wrapper{align-items:center;display:inline-flex;justify-content:center;margin-left:auto;position:relative}.quick-message-file__menu{border:1px solid #94a3b82e;border-radius:.75rem;box-shadow:0 16px 30px #0f172a33;display:flex;flex-direction:column;min-width:8rem;overflow:hidden;padding:.25rem 0;position:absolute;right:0;top:calc(100% + .5rem);z-index:40}.quick-message-file__menu-item{align-items:center;background:0 0;border:none;color:inherit;cursor:pointer;display:flex;font-size:.8125rem;gap:.5rem;justify-content:flex-start;line-height:1.2;padding:.5rem .9rem;text-align:left;transition:background-color .2s;width:100%}.quick-message-file__menu-item:hover{background:#94a3b824}.quick-message-file__menu-item--danger{color:#ef4444}.quick-message-file__menu-item--danger:hover{background:#ef44441f}.quick-message-file__rename-overlay{align-items:center;background:#0f172a73;display:flex;inset:0;justify-content:center;padding:1.5rem;position:absolute;z-index:20}.quick-message-file__rename-modal{border-radius:.75rem;box-shadow:0 20px 45px #0f172a40;max-width:22rem;padding:1.5rem;width:100%}.quick-message-file__rename-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:1rem}.quick-message-file__rename-close{align-items:center;background:0 0;border:none;border-radius:.5rem;color:inherit;cursor:pointer;display:inline-flex;justify-content:center;padding:.25rem}.quick-message-file__rename-close:disabled{cursor:not-allowed;opacity:.5}.quick-message-file__rename-cancel,.quick-message-file__rename-save{align-items:center;border:none;border-radius:9999px;cursor:pointer;display:inline-flex;justify-content:center;padding:.35rem .9rem;transition:opacity .2s}.quick-message-file__rename-cancel{background:0 0;border:1px solid #94a3b866;color:inherit}.quick-message-file__rename-save{background:var(--quick-modal-primary);color:#fff}.quick-message-file__rename-cancel:disabled,.quick-message-file__rename-save:disabled{cursor:not-allowed;opacity:.45}.quick-message-file__rename-input-row{align-items:center;border-radius:.75rem;display:flex;gap:.5rem;padding:.35rem .75rem;transition:border-color .2s,box-shadow .2s}.quick-message-file__rename-input-row:focus-within{border-color:var(--quick-modal-primary);box-shadow:0 0 0 1px var(--quick-modal-primary)}.quick-message-file__rename-input{background:0 0;border:none;color:inherit;flex:1;font-size:.875rem;padding:.35rem 0}.quick-message-file__rename-input:focus{outline:none}.quick-message-file__rename-extension{color:inherit;font-size:.875rem;font-weight:500;opacity:.75;white-space:nowrap}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-space-x-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:\"*\";inherits:false}@property --tw-brightness{syntax:\"*\";inherits:false}@property --tw-contrast{syntax:\"*\";inherits:false}@property --tw-grayscale{syntax:\"*\";inherits:false}@property --tw-hue-rotate{syntax:\"*\";inherits:false}@property --tw-invert{syntax:\"*\";inherits:false}@property --tw-opacity{syntax:\"*\";inherits:false}@property --tw-saturate{syntax:\"*\";inherits:false}@property --tw-sepia{syntax:\"*\";inherits:false}@property --tw-drop-shadow{syntax:\"*\";inherits:false}@property --tw-drop-shadow-color{syntax:\"*\";inherits:false}@property --tw-drop-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:\"*\";inherits:false}@media (forced-colors:active){[type=checkbox]:checked,[type=radio]:checked{appearance:auto}[type=checkbox]:indeterminate{appearance:auto}[type=checkbox]:checked,[type=checkbox]:indeterminate,[type=radio]:checked{appearance:auto}}@media (hover:hover){.z-button-outlined:hover,.z-button-primary:hover,.z-icon-button-outlined:hover,.z-icon-button-primary:hover,.z-icon-button-text:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.z-button-group-item-tab:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.z-button-group-item-tab-unselected:hover{background-color:var(--color-white)}.z-button-group-item-primary-unselected:hover{--tw-brightness:brightness(95%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.z-button-group-item-outlined-unselected:hover{background-color:#e028481a}@supports (color:color-mix(in lab,red,red)){.z-button-group-item-outlined-unselected:hover{background-color:color-mix(in oklab,var(--color-primary)10%,transparent);background-color:color-mix(in srgb,#e0284810%,transparent)}}.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}.hover\\:bg-background:hover{background-color:var(--color-background)}.hover\\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\\:bg-white:hover{background-color:var(--color-white)}.hover\\:text-gray-600:hover{color:var(--color-gray-600)}.hover\\:opacity-100:hover{opacity:1}.hover\\:brightness-110:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.hover\\:bg-primary\\/10:hover{background-color:#e028481a}@supports (color:color-mix(in lab,red,red)){.hover\\:bg-primary\\/10:hover{background-color:color-mix(in srgb,#e0284810%,transparent);background-color:color-mix(in oklab,var(--color-primary)10%,transparent)}}.hover\\:text-primary:hover{color:var(--color-primary)}.z-button-outlined:hover,.z-button-primary:hover,.z-icon-button-outlined:hover,.z-icon-button-primary:hover,.z-icon-button-text:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}@media screen and (min-width:0){.z-max-height{height:calc(100vh - 56px)}}@media screen and (min-width:600px){.z-max-height{height:calc(100vh - 64px)}}@media not all and (min-width:40rem){.max-sm\\:hidden{display:none}}@media (min-width:40rem){.sm\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.container{max-width:40rem}.sm\\:min-w-0{min-width:calc(var(--spacing)*0)}.sm\\:flex-row{flex-direction:row}}@media (min-width:48rem){.md\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.container{max-width:48rem}}@media (min-width:64rem){.lg\\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}";
10
+
11
+ const QuickMessageFileComponent = /*@__PURE__*/ proxyCustomElement(class QuickMessageFileComponent extends H {
12
+ constructor(registerHost) {
13
+ super();
14
+ if (registerHost !== false) {
15
+ this.__registerHost();
16
+ }
17
+ this.filesChange = createEvent(this, "filesChange");
18
+ this.sendFiles = createEvent(this, "sendFiles");
19
+ }
20
+ handleClose;
21
+ value;
22
+ isMaster = false;
23
+ searchFile = '';
24
+ files = [];
25
+ isLoading = false;
26
+ isLoadingMore = false;
27
+ isUploading = false;
28
+ isDeleting = false;
29
+ totalFiles = 0;
30
+ totalPages = 0;
31
+ renameTargetId = null;
32
+ renameName = '';
33
+ renameExtension = '';
34
+ isRenaming = false;
35
+ openMenuId = null;
36
+ allowedFileExtensions = ['pdf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt', 'csv', 'zip', 'rar', '7z'];
37
+ pageSize = 15;
38
+ localUploadPrefix = 'uploaded-file-';
39
+ page = 1;
40
+ currentSearch = '';
41
+ fileInput;
42
+ filesChange;
43
+ sendFiles;
44
+ pendingDeleteFileIds = [];
45
+ // Memoization cache for filtered files
46
+ cachedFilteredFiles = null;
47
+ cachedSearchTerm = '';
48
+ cachedFilesLength = 0;
49
+ handleDocumentClick(event) {
50
+ const target = event.target;
51
+ if (target?.closest('[data-quick-message-file-menu-root]')) {
52
+ return;
53
+ }
54
+ this.openMenuId = null;
55
+ }
56
+ componentWillLoad() {
57
+ this.syncFilesFromProp(this.value);
58
+ }
59
+ async componentDidLoad() {
60
+ await this.fetchFiles({ reset: true });
61
+ }
62
+ handleValueChange(newValue) {
63
+ this.syncFilesFromProp(newValue);
64
+ }
65
+ syncFilesFromProp(value) {
66
+ if (value === undefined || value === null) {
67
+ this.setFiles([], false);
68
+ return;
69
+ }
70
+ const parsed = this.parseFilesValue(value);
71
+ this.setFiles(parsed, false);
72
+ }
73
+ parseFilesValue(value) {
74
+ if (typeof value === 'string') {
75
+ try {
76
+ const deserialized = JSON.parse(value);
77
+ return this.cloneFiles(deserialized);
78
+ }
79
+ catch (error) {
80
+ console.warn('[quick-message-file] Failed to parse files value', error);
81
+ return [];
82
+ }
83
+ }
84
+ return this.cloneFiles(value);
85
+ }
86
+ cloneFiles(files) {
87
+ return (files || []).map(file => ({
88
+ ...file,
89
+ isSelected: file.isSelected ?? false,
90
+ }));
91
+ }
92
+ setFiles(next, shouldEmit = true) {
93
+ this.files = next;
94
+ if (shouldEmit) {
95
+ const payload = this.cloneFiles(next);
96
+ this.filesChange.emit(payload);
97
+ }
98
+ }
99
+ isLocalUpload(file) {
100
+ return file.id.startsWith(this.localUploadPrefix);
101
+ }
102
+ getRemoteFileCount() {
103
+ return this.files.filter(file => !this.isLocalUpload(file)).length;
104
+ }
105
+ mergeFetchedFiles(fetched, reset) {
106
+ const localUploads = this.files.filter(file => this.isLocalUpload(file));
107
+ const selectionMap = new Map(this.files.map(file => [file.id, file.isSelected ?? false]));
108
+ const normalizedFetched = fetched.map(file => ({
109
+ ...file,
110
+ isSelected: selectionMap.get(file.id) ?? file.isSelected ?? false,
111
+ }));
112
+ if (reset) {
113
+ return [...localUploads, ...normalizedFetched];
114
+ }
115
+ const existingRemote = this.files.filter(file => !this.isLocalUpload(file));
116
+ const remoteIndexMap = new Map();
117
+ existingRemote.forEach((file, index) => {
118
+ remoteIndexMap.set(file.id, index);
119
+ });
120
+ const nextRemote = [...existingRemote];
121
+ normalizedFetched.forEach(file => {
122
+ const existingIndex = remoteIndexMap.get(file.id);
123
+ if (existingIndex !== undefined) {
124
+ nextRemote[existingIndex] = file;
125
+ }
126
+ else {
127
+ remoteIndexMap.set(file.id, nextRemote.length);
128
+ nextRemote.push(file);
129
+ }
130
+ });
131
+ return [...localUploads, ...nextRemote];
132
+ }
133
+ /**
134
+ * Memoized file filtering - only recalculates when search term or files change
135
+ * Performance: Reduces operations from 60fps to only when user types
136
+ */
137
+ filterFiles() {
138
+ const search = this.searchFile.trim().toLowerCase();
139
+ // Quick return for no search
140
+ if (!search)
141
+ return this.files;
142
+ // Check if we can use cached results
143
+ if (this.cachedFilteredFiles && search === this.cachedSearchTerm && this.files.length === this.cachedFilesLength) {
144
+ return this.cachedFilteredFiles;
145
+ }
146
+ // Recalculate filtered results
147
+ const filtered = this.files.filter(file => file.name.toLowerCase().includes(search));
148
+ // Update cache
149
+ this.cachedFilteredFiles = filtered;
150
+ this.cachedSearchTerm = search;
151
+ this.cachedFilesLength = this.files.length;
152
+ return filtered;
153
+ }
154
+ splitFileName(name) {
155
+ const lastDotIndex = name.lastIndexOf('.');
156
+ if (lastDotIndex <= 0 || lastDotIndex === name.length - 1) {
157
+ return { base: name, extension: '' };
158
+ }
159
+ return {
160
+ base: name.slice(0, lastDotIndex),
161
+ extension: name.slice(lastDotIndex),
162
+ };
163
+ }
164
+ getRenameTarget() {
165
+ if (!this.renameTargetId) {
166
+ return undefined;
167
+ }
168
+ return this.files.find(file => file.id === this.renameTargetId);
169
+ }
170
+ openRenameModal(file, event) {
171
+ event?.preventDefault();
172
+ event?.stopPropagation();
173
+ const { base, extension } = this.splitFileName(file.name);
174
+ this.renameTargetId = file.id;
175
+ this.renameName = base;
176
+ this.renameExtension = extension;
177
+ }
178
+ closeRenameModal(force = false) {
179
+ if (this.isRenaming && !force) {
180
+ return;
181
+ }
182
+ this.renameTargetId = null;
183
+ this.renameName = '';
184
+ this.renameExtension = '';
185
+ }
186
+ toggleMenu(fileId, event) {
187
+ event.preventDefault();
188
+ event.stopPropagation();
189
+ this.openMenuId = this.openMenuId === fileId ? null : fileId;
190
+ }
191
+ closeMenu() {
192
+ this.openMenuId = null;
193
+ }
194
+ handleMenuRename(file, event) {
195
+ event.preventDefault();
196
+ event.stopPropagation();
197
+ this.closeMenu();
198
+ this.openRenameModal(file, event);
199
+ }
200
+ requestDeleteFile(file, event) {
201
+ event.preventDefault();
202
+ event.stopPropagation();
203
+ if (this.isDeleting) {
204
+ return;
205
+ }
206
+ this.pendingDeleteFileIds = [file.id];
207
+ this.closeMenu();
208
+ const t = useTranslation();
209
+ openDialog({
210
+ open: true,
211
+ type: "WARNING" /* DIALOG_TYPE.WARNING */,
212
+ title: t('quick_message.delete_item_confirmation'),
213
+ buttonName: t('confirm'),
214
+ cancelButtonName: t('cancel'),
215
+ onSubmitDialog: () => {
216
+ void this.confirmDeleteSelectedFiles();
217
+ },
218
+ onCloseDialog: () => {
219
+ this.pendingDeleteFileIds = [];
220
+ },
221
+ });
222
+ }
223
+ handleRenameInput(event) {
224
+ const value = event.target.value;
225
+ if (this.renameExtension && value.toLowerCase().endsWith(this.renameExtension.toLowerCase())) {
226
+ this.renameName = value.slice(0, -this.renameExtension.length);
227
+ return;
228
+ }
229
+ this.renameName = value;
230
+ }
231
+ async handleRenameSubmit(event) {
232
+ event.preventDefault();
233
+ const target = this.getRenameTarget();
234
+ if (!target) {
235
+ return;
236
+ }
237
+ const trimmedBase = this.renameName.trim();
238
+ if (!trimmedBase) {
239
+ return;
240
+ }
241
+ const nextName = this.renameExtension ? `${trimmedBase}${this.renameExtension}` : trimmedBase;
242
+ if (nextName === target.name) {
243
+ this.closeRenameModal(true);
244
+ return;
245
+ }
246
+ if (this.isLocalUpload(target)) {
247
+ this.setFiles(this.files.map(file => file.id === target.id
248
+ ? {
249
+ ...file,
250
+ name: nextName,
251
+ }
252
+ : file));
253
+ this.closeRenameModal(true);
254
+ return;
255
+ }
256
+ this.isRenaming = true;
257
+ try {
258
+ const updated = await updateQuickMessageLibraryFileName({ id: target.id, name: nextName });
259
+ this.setFiles(this.files.map(file => file.id === target.id
260
+ ? {
261
+ ...file,
262
+ name: updated.name,
263
+ last_updated_at: updated.last_updated_at,
264
+ last_updated_by: updated.last_updated_by,
265
+ }
266
+ : file));
267
+ this.closeRenameModal(true);
268
+ }
269
+ catch (error) {
270
+ handleError(error, '[quick-message-file] Failed to rename file');
271
+ }
272
+ finally {
273
+ this.isRenaming = false;
274
+ }
275
+ }
276
+ toggleFileSelection(id) {
277
+ this.setFiles(this.files.map(file => (file.id === id ? { ...file, isSelected: !file.isSelected } : file)));
278
+ }
279
+ toggleSelectAllFiles() {
280
+ const isAllSelected = this.files.length > 0 && this.files.every(file => file.isSelected);
281
+ this.setFiles(this.files.map(file => ({ ...file, isSelected: !isAllSelected })));
282
+ }
283
+ triggerFileUpload() {
284
+ this.fileInput?.click();
285
+ }
286
+ handleFileSelection(event) {
287
+ const input = event.target;
288
+ if (!input.files || input.files.length === 0)
289
+ return;
290
+ const validFiles = Array.from(input.files).filter(file => {
291
+ const extension = file.name.split('.').pop()?.toLowerCase();
292
+ return extension && this.allowedFileExtensions.includes(extension);
293
+ });
294
+ input.value = '';
295
+ if (validFiles.length === 0) {
296
+ return;
297
+ }
298
+ void this.uploadAndCreateFiles(validFiles);
299
+ }
300
+ async uploadAndCreateFiles(files) {
301
+ if (files.length === 0) {
302
+ return;
303
+ }
304
+ this.isUploading = true;
305
+ try {
306
+ const payload = [];
307
+ for (const file of files) {
308
+ const uploadUrl = await uploadFile({
309
+ file,
310
+ filename: file.name.replaceAll(' ', '-'),
311
+ folder: 'zignal/quick-message-library/file',
312
+ });
313
+ if (!uploadUrl) {
314
+ continue;
315
+ }
316
+ payload.push({
317
+ file_type: 'file',
318
+ name: file.name,
319
+ url: uploadUrl,
320
+ size: file.size,
321
+ });
322
+ }
323
+ if (payload.length > 0) {
324
+ await createQuickMessageLibraryFiles({ files: payload });
325
+ await this.fetchFiles({ reset: true });
326
+ }
327
+ }
328
+ catch (error) {
329
+ handleError(error, '[quick-message-file] Failed to upload files');
330
+ }
331
+ finally {
332
+ this.isUploading = false;
333
+ }
334
+ }
335
+ renderFileMeta(size, createdAt, t) {
336
+ const sizeKb = Math.round(size / 1024);
337
+ return `${sizeKb} KB · ${t('quick_message.created_at').replace('{date}', dayjs(createdAt).tz().format('DD/MM/YYYY HH:mm'))}`;
338
+ }
339
+ handleSendFiles() {
340
+ const selected = this.files.filter(file => file.isSelected);
341
+ if (selected.length === 0)
342
+ return;
343
+ const payload = this.cloneFiles(selected);
344
+ this.sendFiles.emit(payload);
345
+ this.handleClose?.();
346
+ }
347
+ requestDeleteSelectedFiles() {
348
+ if (this.isDeleting) {
349
+ return;
350
+ }
351
+ const selectedIds = this.files.filter(file => file.isSelected).map(file => file.id);
352
+ if (selectedIds.length === 0) {
353
+ return;
354
+ }
355
+ this.pendingDeleteFileIds = selectedIds;
356
+ const t = useTranslation();
357
+ openDialog({
358
+ open: true,
359
+ type: "WARNING" /* DIALOG_TYPE.WARNING */,
360
+ title: t('quick_message.delete_selected_items_confirmation'),
361
+ buttonName: t('confirm'),
362
+ cancelButtonName: t('cancel'),
363
+ onSubmitDialog: () => {
364
+ void this.confirmDeleteSelectedFiles();
365
+ },
366
+ onCloseDialog: () => {
367
+ this.pendingDeleteFileIds = [];
368
+ },
369
+ });
370
+ }
371
+ async confirmDeleteSelectedFiles() {
372
+ if (this.isDeleting) {
373
+ return;
374
+ }
375
+ const pendingIds = [...this.pendingDeleteFileIds];
376
+ this.pendingDeleteFileIds = [];
377
+ if (pendingIds.length === 0) {
378
+ return;
379
+ }
380
+ const pendingSet = new Set(pendingIds);
381
+ const remoteIds = this.files.filter(file => pendingSet.has(file.id) && !this.isLocalUpload(file)).map(file => file.id);
382
+ this.isDeleting = true;
383
+ try {
384
+ if (remoteIds.length > 0) {
385
+ await deleteQuickMessageLibraryFile({ ids: remoteIds });
386
+ }
387
+ const remaining = this.files.filter(file => !pendingSet.has(file.id));
388
+ this.setFiles(remaining);
389
+ if (remoteIds.length > 0) {
390
+ this.totalFiles = Math.max(0, this.totalFiles - remoteIds.length);
391
+ await this.fetchFiles({ reset: true });
392
+ }
393
+ }
394
+ catch (error) {
395
+ handleError(error, '[quick-message-file] Failed to delete files');
396
+ }
397
+ finally {
398
+ this.isDeleting = false;
399
+ }
400
+ }
401
+ async fetchFiles({ search, reset = true } = {}) {
402
+ const businessId = configStore.get('businessId');
403
+ const shopId = configStore.get('shopId');
404
+ if (!businessId || !shopId) {
405
+ return;
406
+ }
407
+ if (reset ? this.isLoading : this.isLoadingMore) {
408
+ return;
409
+ }
410
+ const searchSource = search !== undefined ? search : reset ? this.searchFile : this.currentSearch;
411
+ const trimmedSearch = searchSource?.trim() ?? '';
412
+ const nextPage = reset ? 1 : this.page + 1;
413
+ if (search !== undefined) {
414
+ this.searchFile = searchSource ?? '';
415
+ }
416
+ if (reset) {
417
+ this.isLoading = true;
418
+ }
419
+ else {
420
+ this.isLoadingMore = true;
421
+ }
422
+ try {
423
+ const response = await getQuickMessageLibraryFiles({
424
+ fileType: 'file',
425
+ search: trimmedSearch ? trimmedSearch : undefined,
426
+ page: nextPage,
427
+ limit: this.pageSize,
428
+ });
429
+ const fetched = this.cloneFiles(response.files || []);
430
+ const merged = this.mergeFetchedFiles(fetched, reset);
431
+ this.page = response.page > 0 ? response.page : nextPage;
432
+ const resolvedTotalPages = response.total_pages > 0 ? response.total_pages : fetched.length > 0 ? 1 : 0;
433
+ this.totalPages = resolvedTotalPages;
434
+ this.totalFiles = typeof response.total === 'number' ? response.total : fetched.length;
435
+ this.currentSearch = trimmedSearch;
436
+ this.setFiles(merged);
437
+ }
438
+ catch (error) {
439
+ console.error('[quick-message-file] Failed to fetch files', error);
440
+ }
441
+ finally {
442
+ if (reset) {
443
+ this.isLoading = false;
444
+ }
445
+ else {
446
+ this.isLoadingMore = false;
447
+ }
448
+ }
449
+ }
450
+ async loadMoreFiles() {
451
+ if (this.isLoading || this.isLoadingMore) {
452
+ return;
453
+ }
454
+ if (this.totalPages === 0 || this.page >= this.totalPages) {
455
+ return;
456
+ }
457
+ if (this.totalFiles > 0) {
458
+ const remoteCount = this.getRemoteFileCount();
459
+ if (remoteCount >= this.totalFiles) {
460
+ return;
461
+ }
462
+ }
463
+ await this.fetchFiles({ reset: false });
464
+ }
465
+ handleScroll(event) {
466
+ const target = event.target;
467
+ if (!target) {
468
+ return;
469
+ }
470
+ const remaining = target.scrollHeight - target.scrollTop - target.clientHeight;
471
+ if (remaining < 160) {
472
+ void this.loadMoreFiles();
473
+ }
474
+ }
475
+ handleSearchInput(event) {
476
+ const value = event.target.value;
477
+ this.searchFile = value;
478
+ if (!value.trim() && this.currentSearch && !this.isLoading && !this.isLoadingMore) {
479
+ void this.fetchFiles({ search: '', reset: true });
480
+ }
481
+ }
482
+ async handleSearchSubmit(event) {
483
+ event?.preventDefault();
484
+ await this.fetchFiles({ search: this.searchFile, reset: true });
485
+ }
486
+ clearSearch() {
487
+ if (!this.searchFile) {
488
+ return;
489
+ }
490
+ this.searchFile = '';
491
+ if (this.currentSearch) {
492
+ void this.fetchFiles({ search: '', reset: true });
493
+ }
494
+ }
495
+ renderRenameModal(labels) {
496
+ const target = this.getRenameTarget();
497
+ if (!this.renameTargetId || !target) {
498
+ return null;
499
+ }
500
+ const trimmedBase = this.renameName.trim();
501
+ const nextName = this.renameExtension ? `${trimmedBase}${this.renameExtension}` : trimmedBase;
502
+ const isSaveDisabled = this.isRenaming || trimmedBase.length === 0 || nextName === target.name;
503
+ const inputId = `quick-message-file-rename-${target.id}`;
504
+ return (h("div", { class: "quick-message-file__rename-overlay", role: "dialog", "aria-modal": "true", "aria-labelledby": "quick-message-file-rename-title", onClick: () => this.closeRenameModal() }, h("div", { class: "quick-message-file__rename-modal bg-background text-surface", onClick: event => event.stopPropagation() }, h("div", { class: "quick-message-file__rename-header" }, h("h3", { id: "quick-message-file-rename-title", class: "text-base font-semibold" }, labels.renameLabel), h("button", { type: "button", class: "quick-message-file__rename-close", onClick: () => this.closeRenameModal(), "aria-label": labels.closeLabel, disabled: this.isRenaming }, h(Icon, { name: "X" }))), h("form", { class: "flex flex-col gap-4", onSubmit: event => this.handleRenameSubmit(event) }, h("label", { class: "flex flex-col gap-2 text-sm", htmlFor: inputId }, h("span", { class: "font-medium" }, labels.nameLabel), h("div", { class: `quick-message-file__rename-input-row border border-divider bg-background` }, h("input", { id: inputId, type: "text", class: "quick-message-file__rename-input text-surface", value: this.renameName, onInput: event => this.handleRenameInput(event) }), this.renameExtension && h("span", { class: "quick-message-file__rename-extension" }, this.renameExtension))), h("div", { class: "flex justify-end gap-2 text-sm" }, h("button", { type: "button", class: "quick-message-file__rename-cancel", onClick: () => this.closeRenameModal(), disabled: this.isRenaming }, labels.cancelLabel), h("button", { type: "submit", class: "quick-message-file__rename-save", disabled: isSaveDisabled }, this.isRenaming ? h(Icon, { name: "Loader2", addClass: "size-4 animate-spin" }) : labels.saveLabel))))));
505
+ }
506
+ disconnectedCallback() {
507
+ // this.objectUrls.forEach((url) => URL.revokeObjectURL(url));
508
+ // this.objectUrls = [];
509
+ }
510
+ render() {
511
+ const theme = configStore.get('theme');
512
+ const t = useTranslation();
513
+ const filteredFiles = this.filterFiles();
514
+ const isInitialLoading = this.isLoading && this.files.length === 0;
515
+ const hasSelection = this.files.some(file => file.isSelected);
516
+ const renameLabel = t('quick_message.rename_item');
517
+ const deleteLabel = t('remove');
518
+ const nameLabel = t('quick_message.name');
519
+ const saveLabel = t('save');
520
+ const cancelLabel = t('cancel');
521
+ const closeLabel = t('close');
522
+ return (h(Host, { key: 'fbbdadba2f3e0c1d3a448aca4a553bf76e331876', class: "flex min-h-0 flex-1 flex-col gap-4", "data-theme": theme }, h("form", { key: '736bca1d8760d45e39b465ec551575edff2905c5', class: "w-full", onSubmit: event => this.handleSearchSubmit(event) }, h("div", { key: 'c2bf7233ba4a4c61af500d1fda5a4b58f427c93c', class: "relative" }, h("input", { key: '1383c92c018a3f39b586196427a76b404daed4ab', type: "text", 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", placeholder: t('quick_message.search_file'), value: this.searchFile, onInput: event => this.handleSearchInput(event) }), this.searchFile && (h("button", { key: '69942b517ca4dead0ceddd33ef18996458774126', type: "button", class: "absolute right-2 top-1/2 -translate-y-1/2 text-xs text-gray-400 hover:text-gray-600", onClick: () => this.clearSearch(), "aria-label": t('clear') || 'Clear' }, h(Icon, { key: 'ba847d94aeac92263eb6f1a67a5dd6f524f8ac12', name: "X" }))))), h("div", { key: '355aba2c25d8ec835087d6da03b86a2edd5d9cc1', class: "flex items-center justify-between" }, this.files.length > 0 ? (h("label", { class: "inline-flex items-center gap-2 text-sm" }, h("input", { type: "checkbox", checked: this.files.length > 0 && this.files.every(file => file.isSelected), onChange: () => this.toggleSelectAllFiles() }), h("span", null, t('select_all')))) : (h("span", null)), h("div", { key: '5e79504385980f9090acb8ecc919a717d44d5dbb', class: "flex items-center gap-2" }, h("input", { key: '237e4c88cf6d173b5a530b8296d4cfaf202ba1a1', class: "hidden", type: "file", multiple: true, accept: this.allowedFileExtensions.map(extension => `.${extension}`).join(','), ref: el => (this.fileInput = el), onChange: event => this.handleFileSelection(event) }), h("button", { key: 'be5d46671dff2c8ed2678930b96fd01d33b23ad8', type: "button", class: "quick-message-file__action-button inline-flex h-9 w-9 items-center justify-center rounded-lg cursor-pointer", onClick: () => !this.isUploading && this.triggerFileUpload(), "aria-label": t('quick_message.add_file'), disabled: this.isUploading }, this.isUploading ? h(Icon, { name: "Loader2", addClass: "size-4 animate-spin" }) : h(Icon, { name: "Plus" })))), this.isUploading && (h("div", { key: 'f181e6362ae9467ffa9a28db03144d5813cf7414', class: "flex items-center gap-2 text-xs text-primary" }, h(Icon, { key: '3fb1992dfd4a6ba7781943da6782011809edb5a7', name: "Loader2", addClass: "size-4 animate-spin" }), h("span", { key: 'bb2581127baac20c13b71f382da7e2e81d0fa441' }, t('quick_message.uploading') || 'Uploading...'))), isInitialLoading ? (h("div", { class: `flex flex-1 items-center justify-center text-sm text-theme-gray` }, "Loading...")) : filteredFiles.length === 0 ? (h("div", { class: `flex flex-1 items-center justify-center text-sm text-theme-gray` }, t('quick_message.file_empty'))) : (h("div", { class: "flex flex-1 flex-col gap-2.5 overflow-y-auto", onScroll: event => this.handleScroll(event) }, filteredFiles.map(file => (h("label", { class: "flex items-center gap-3 rounded-xl px-3 py-2.5", key: file.id }, h("input", { type: "checkbox", checked: !!file.isSelected, onChange: () => this.toggleFileSelection(file.id) }), h("div", { class: "quick-message-file__icon flex h-10 w-10 items-center justify-center rounded-xl" }, h(Icon, { name: "File" })), h("div", { class: "flex flex-1 items-center gap-3 min-w-0" }, h("div", { class: "flex min-w-0 flex-col gap-1" }, h("div", { class: "text-sm font-semibold line-clamp-2 break-words" }, file.name), h("div", { class: `text-xs text-theme-gray` }, this.renderFileMeta(file.size, file.created_at, t))), h("div", { class: "quick-message-file__menu-wrapper", "data-quick-message-file-menu-root": "" }, h("button", { type: "button", class: "quick-message-file__list-more-button", onClick: event => this.toggleMenu(file.id, event), "aria-haspopup": "menu", "aria-expanded": this.openMenuId === file.id ? 'true' : 'false', "aria-label": renameLabel, "data-quick-message-file-menu-root": "" }, h(Icon, { name: "MoreVertical", addClass: "size-4" })), this.openMenuId === file.id && (h("div", { class: "quick-message-file__menu bg-background text-surface", role: "menu", "data-quick-message-file-menu-root": "" }, h("button", { type: "button", class: "quick-message-file__menu-item", role: "menuitem", onClick: event => this.handleMenuRename(file, event) }, renameLabel), h("button", { type: "button", class: "quick-message-file__menu-item quick-message-file__menu-item--danger", role: "menuitem", onClick: event => this.requestDeleteFile(file, event) }, deleteLabel)))))))), this.isLoadingMore && h("div", { class: `py-3 text-center text-xs text-theme-gray` }, "Loading..."))), h("div", { key: '06406bafa7fb6c27100f73093ba8f63f9170c48b', class: `mt-auto flex items-center gap-2 pt-2` }, hasSelection && (h("button", { key: '9edc6a12baca4e62b5cc4d8236d04299251a4bc0', type: "button", 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`, onClick: () => this.requestDeleteSelectedFiles(), "aria-label": t('remove'), disabled: this.isDeleting }, this.isDeleting ? h(Icon, { name: "Loader2", addClass: "size-4 animate-spin" }) : h(Icon, { name: "Trash2" }))), !this.isMaster && (h("button", { key: 'a67b420af19529d2e219388d16a803670407c4dc', type: "button", disabled: !hasSelection, class: `quick-message-file__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`, onClick: () => this.handleSendFiles() }, t('quick_message.send_files')))), this.renderRenameModal({ renameLabel, nameLabel, saveLabel, cancelLabel, closeLabel })));
523
+ }
524
+ static get watchers() { return {
525
+ "value": ["handleValueChange"]
526
+ }; }
527
+ static get style() { return quickMessageFileCss; }
528
+ }, [768, "quick-message-file", {
529
+ "handleClose": [16],
530
+ "value": [1],
531
+ "isMaster": [4, "is-master"],
532
+ "searchFile": [32],
533
+ "files": [32],
534
+ "isLoading": [32],
535
+ "isLoadingMore": [32],
536
+ "isUploading": [32],
537
+ "isDeleting": [32],
538
+ "totalFiles": [32],
539
+ "totalPages": [32],
540
+ "renameTargetId": [32],
541
+ "renameName": [32],
542
+ "renameExtension": [32],
543
+ "isRenaming": [32],
544
+ "openMenuId": [32]
545
+ }, [[4, "click", "handleDocumentClick"]], {
546
+ "value": ["handleValueChange"]
547
+ }]);
548
+ function defineCustomElement() {
549
+ if (typeof customElements === "undefined") {
550
+ return;
551
+ }
552
+ const components = ["quick-message-file"];
553
+ components.forEach(tagName => { switch (tagName) {
554
+ case "quick-message-file":
555
+ if (!customElements.get(tagName)) {
556
+ customElements.define(tagName, QuickMessageFileComponent);
557
+ }
558
+ break;
559
+ } });
560
+ }
561
+ defineCustomElement();
562
+
563
+ export { QuickMessageFileComponent as Q, defineCustomElement as d };