zignal-stencil-library 1.1.141 → 1.1.142

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 (166) hide show
  1. package/dist/cjs/autocomplete-address_44.cjs.entry.js +40 -40
  2. package/dist/cjs/quick-message-app.cjs.entry.js +1 -1
  3. package/dist/collection/components/autocomplete-address/autocomplete-address.css +1 -1
  4. package/dist/collection/components/autocomplete-multiple-select/autocomplete-multiple-select.css +1 -1
  5. package/dist/collection/components/autocomplete-select/autocomplete-select.css +1 -1
  6. package/dist/collection/components/channel-box/channel-box.css +1 -1
  7. package/dist/collection/components/chat-app/chat-app.css +1 -1
  8. package/dist/collection/components/chat-header/chat-header.css +1 -1
  9. package/dist/collection/components/chat-input/chat-input.css +1 -1
  10. package/dist/collection/components/checkbox-list/checkbox-list.css +1 -1
  11. package/dist/collection/components/dialog-bill-editor/dialog-bill-editor.css +1 -1
  12. package/dist/collection/components/dialog-custom-filter/dialog-custom-filter.css +1 -1
  13. package/dist/collection/components/dialog-editor/dialog-editor.css +1 -1
  14. package/dist/collection/components/dialog-preview-media/dialog-preview-media.css +1 -1
  15. package/dist/collection/components/dialog-search/dialog-search.css +1 -1
  16. package/dist/collection/components/menu-chat-channel/menu-chat-channel.css +1 -1
  17. package/dist/collection/components/menu-chat-type/menu-chat-type.css +1 -1
  18. package/dist/collection/components/menu-list/menu-list.css +1 -1
  19. package/dist/collection/components/message-box/message-box.css +1 -1
  20. package/dist/collection/components/message-content/message-content.css +1 -1
  21. package/dist/collection/components/message-item/message-item.css +1 -1
  22. package/dist/collection/components/message-media/message-media.css +1 -1
  23. package/dist/collection/components/profile-history/profile-history.css +1 -1
  24. package/dist/collection/components/profile-info/profile-info.css +1 -1
  25. package/dist/collection/components/profile-media/profile-media.css +1 -1
  26. package/dist/collection/components/profile-tabs/profile-tabs.css +1 -1
  27. package/dist/collection/components/quick-message-add-template/quick-message-add-template.css +1 -1
  28. package/dist/collection/components/quick-message-app/quick-message-app.css +1 -1
  29. package/dist/collection/components/quick-message-file/quick-message-file.css +1 -1
  30. package/dist/collection/components/quick-message-image/quick-message-image.css +1 -1
  31. package/dist/collection/components/quick-message-modal/quick-message-modal.css +1 -1
  32. package/dist/collection/components/quick-message-template/quick-message-template.css +1 -1
  33. package/dist/collection/components/search-box/search-box.css +1 -1
  34. package/dist/collection/components/status-badge/status-badge.css +1 -1
  35. package/dist/collection/components/tag-list/tag-list.css +1 -1
  36. package/dist/collection/components/tag-or-status-item/tag-or-status-item.css +1 -1
  37. package/dist/collection/components/tag-popper/tag-popper.css +1 -1
  38. package/dist/collection/components/typography-clamp/typography-clamp.css +1 -1
  39. package/dist/collection/components/z-avatar/z-avatar.css +1 -1
  40. package/dist/collection/components/z-dialog/z-dialog.css +1 -1
  41. package/dist/collection/store/chat.js +1 -1
  42. package/dist/components/autocomplete-address.js +1 -1
  43. package/dist/components/autocomplete-multiple-select.js +1 -1
  44. package/dist/components/autocomplete-select.js +1 -1
  45. package/dist/components/channel-box.js +1 -1
  46. package/dist/components/chat-app.js +40 -40
  47. package/dist/components/chat-header.js +1 -1
  48. package/dist/components/chat-input.js +1 -1
  49. package/dist/components/checkbox-list.js +1 -1
  50. package/dist/components/dialog-bill-editor.js +1 -1
  51. package/dist/components/dialog-custom-filter.js +1 -1
  52. package/dist/components/dialog-editor.js +1 -1
  53. package/dist/components/dialog-preview-media.js +1 -1
  54. package/dist/components/dialog-search.js +1 -1
  55. package/dist/components/menu-chat-channel.js +1 -1
  56. package/dist/components/menu-chat-type.js +1 -1
  57. package/dist/components/menu-list.js +1 -1
  58. package/dist/components/message-box.js +1 -1
  59. package/dist/components/message-content.js +1 -1
  60. package/dist/components/message-item.js +1 -1
  61. package/dist/components/message-media.js +1 -1
  62. package/dist/components/p-B-WRBqAg.js +57 -0
  63. package/dist/components/p-BIbW7C9K.js +231 -0
  64. package/dist/components/p-BJORogXV.js +265 -0
  65. package/dist/components/p-BazbhD8W.js +515 -0
  66. package/dist/components/p-BeJpDMVn.js +683 -0
  67. package/dist/components/p-BfnBmICG.js +32 -0
  68. package/dist/components/{p-C-41ZrcL.js → p-BhJF6W1c.js} +1 -1
  69. package/dist/components/p-BmjIfJyI.js +74 -0
  70. package/dist/components/p-ByTgR_r3.js +119 -0
  71. package/dist/components/p-C-3hiiyq.js +214 -0
  72. package/dist/components/p-C3bo4dlm.js +51 -0
  73. package/dist/components/p-C5RJyjEm.js +178 -0
  74. package/dist/components/p-C65N5Mgx.js +215 -0
  75. package/dist/components/p-C6sN6B1w.js +156 -0
  76. package/dist/components/p-CCdwcL98.js +171 -0
  77. package/dist/components/p-CG4eixf2.js +223 -0
  78. package/dist/components/p-CNPdomFn.js +138 -0
  79. package/dist/components/p-CQGx2115.js +155 -0
  80. package/dist/components/p-CScyXqIn.js +96 -0
  81. package/dist/components/p-CTgFg8tk.js +137 -0
  82. package/dist/components/p-CfedSggs.js +76 -0
  83. package/dist/components/p-CjgT7qSe.js +128 -0
  84. package/dist/components/p-CkUfOYdD.js +168 -0
  85. package/dist/components/p-CqengjnZ.js +129 -0
  86. package/dist/components/p-Cvsn3fkH.js +135 -0
  87. package/dist/components/p-CyH3HsO4.js +312 -0
  88. package/dist/components/p-D4VMa76j.js +554 -0
  89. package/dist/components/p-DFgL8whj.js +158 -0
  90. package/dist/components/p-DJ1RSdsi.js +166 -0
  91. package/dist/components/p-DJmexrNS.js +108 -0
  92. package/dist/components/p-DLbfVYOy.js +98 -0
  93. package/dist/components/p-D_PQCb7h.js +102 -0
  94. package/dist/components/p-DdkuCIPZ.js +107 -0
  95. package/dist/components/p-DfgxdNqj.js +599 -0
  96. package/dist/components/p-Dry0VUtN.js +65 -0
  97. package/dist/components/p-DsvORk0O.js +122 -0
  98. package/dist/components/p-F_9-l-Ha.js +578 -0
  99. package/dist/components/p-edDqt5wk.js +563 -0
  100. package/dist/components/p-p8cm3tzj.js +154 -0
  101. package/dist/components/profile-history.js +1 -1
  102. package/dist/components/profile-info.js +1 -1
  103. package/dist/components/profile-media.js +1 -1
  104. package/dist/components/profile-tabs.js +1 -1
  105. package/dist/components/quick-message-add-template.js +1 -1
  106. package/dist/components/quick-message-app.js +6 -6
  107. package/dist/components/quick-message-file.js +1 -1
  108. package/dist/components/quick-message-image.js +1 -1
  109. package/dist/components/quick-message-modal.js +1 -1
  110. package/dist/components/quick-message-template.js +1 -1
  111. package/dist/components/search-box.js +1 -1
  112. package/dist/components/status-badge.js +1 -1
  113. package/dist/components/summarize-message-section.js +1 -1
  114. package/dist/components/tag-list.js +1 -1
  115. package/dist/components/tag-or-status-item.js +1 -1
  116. package/dist/components/tag-popper.js +1 -1
  117. package/dist/components/typography-clamp.js +1 -1
  118. package/dist/components/user-info-section.js +1 -1
  119. package/dist/components/z-avatar.js +1 -1
  120. package/dist/components/z-dialog.js +1 -1
  121. package/dist/esm/autocomplete-address_44.entry.js +40 -40
  122. package/dist/esm/quick-message-app.entry.js +1 -1
  123. package/dist/types/store/type.d.ts +1 -0
  124. package/dist/zignal-stencil-library/p-059777fc.entry.js +2 -0
  125. package/dist/zignal-stencil-library/{p-b8e1f964.entry.js → p-7d6fa74e.entry.js} +1 -1
  126. package/dist/zignal-stencil-library/zignal-stencil-library.esm.js +1 -1
  127. package/package.json +1 -1
  128. package/dist/components/p-B2L8_jmE.js +0 -166
  129. package/dist/components/p-B3eHvIN9.js +0 -515
  130. package/dist/components/p-B3kO-HzW.js +0 -156
  131. package/dist/components/p-B7cQ6jGN.js +0 -168
  132. package/dist/components/p-B8ioc7j7.js +0 -108
  133. package/dist/components/p-BD0MuW8Q.js +0 -57
  134. package/dist/components/p-BFIn1ZrO.js +0 -65
  135. package/dist/components/p-BOWwR79g.js +0 -158
  136. package/dist/components/p-BUxAWYLq.js +0 -138
  137. package/dist/components/p-Bf4Bdg17.js +0 -128
  138. package/dist/components/p-BqtYdVSr.js +0 -122
  139. package/dist/components/p-BsNqQbHs.js +0 -171
  140. package/dist/components/p-C2a0n_WK.js +0 -578
  141. package/dist/components/p-CMUTXO2l.js +0 -554
  142. package/dist/components/p-C_GqKeK_.js +0 -154
  143. package/dist/components/p-CaugxlBL.js +0 -178
  144. package/dist/components/p-Ch7bAq5O.js +0 -265
  145. package/dist/components/p-CktTnn3h.js +0 -119
  146. package/dist/components/p-D2wWipBE.js +0 -102
  147. package/dist/components/p-D4AS0e6c.js +0 -107
  148. package/dist/components/p-DAR_G1kG.js +0 -96
  149. package/dist/components/p-DMeQ3fHN.js +0 -563
  150. package/dist/components/p-DVGtHbG7.js +0 -312
  151. package/dist/components/p-DY1eWfdP.js +0 -215
  152. package/dist/components/p-DZu7A3Zr.js +0 -129
  153. package/dist/components/p-DdHrQA9h.js +0 -223
  154. package/dist/components/p-Ddtk7GEi.js +0 -137
  155. package/dist/components/p-DnEf6QTm.js +0 -231
  156. package/dist/components/p-DpavkPvM.js +0 -155
  157. package/dist/components/p-DyIEfG7k.js +0 -32
  158. package/dist/components/p-ElNxnp4Y.js +0 -51
  159. package/dist/components/p-Li-81URn.js +0 -98
  160. package/dist/components/p-mTaGyPAU.js +0 -214
  161. package/dist/components/p-p8aRd2F9.js +0 -683
  162. package/dist/components/p-r7a3AW1u.js +0 -74
  163. package/dist/components/p-szMiIVUj.js +0 -599
  164. package/dist/components/p-w5M_ng6b.js +0 -135
  165. package/dist/components/p-zuK2BXno.js +0 -76
  166. package/dist/zignal-stencil-library/p-3873131a.entry.js +0 -2
@@ -0,0 +1,554 @@
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-C64Oh8a9.js';
4
+ import { c as configStore } from './p-g5ZX6XGs.js';
5
+ import { u as useTranslation } from './p-D93wPIC3.js';
6
+ import { I as Icon } from './p-Sf5NNGh3.js';
7
+ import { o as openDialog, h as handleError } from './p-Pm7T3Vt0.js';
8
+
9
+ const quickMessageImageCss = "@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{--text-xl:1.25rem;--text-xl--line-height:1.4;--container-3xs:16rem;--color-yellow-500:oklch(79.5% .184 86.047);--container-sm:24rem;--color-yellow-300:oklch(90.5% .182 98.111);--container-xl:36rem;--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}}@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);-webkit-line-clamp:1;line-height:var(--tw-leading,var(--text-base--line-height));-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.chat-item .chat-item-content-secondary-message{color:var(--color-gray-600);font-size:var(--text-sm);-webkit-line-clamp:1;line-height:var(--tw-leading,var(--text-sm--line-height));-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.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}[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}.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{.absolute{position:absolute}.relative{position:relative}.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}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.size-3{height:calc(var(--spacing)*3);width:calc(var(--spacing)*3)}.size-4{height:calc(var(--spacing)*4);width:calc(var(--spacing)*4)}.h-9{height:calc(var(--spacing)*9)}.h-16{height:calc(var(--spacing)*16)}.min-h-0{min-height:calc(var(--spacing)*0)}.w-9{width:calc(var(--spacing)*9)}.w-16{width:calc(var(--spacing)*16)}.w-full{width:100%}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.-translate-y-1\\/2{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.auto-rows-auto{grid-auto-rows:auto}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.content-start{align-content:flex-start}.items-center{align-items:center}.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-2\\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.overflow-y-auto{overflow-y:auto}.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-divider{border-color:var(--color-divider)}.border-primary{border-color:var(--color-primary)}.border-transparent{border-color:#0000}.bg-primary{background-color:var(--color-primary)}.object-cover{object-fit:cover}.p-1\\.5{padding:calc(var(--spacing)*1.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.pt-2{padding-top:calc(var(--spacing)*2)}.pr-9{padding-right:calc(var(--spacing)*9)}.text-center{text-align:center}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.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-gray-400{color:var(--color-gray-400)}.text-primary{color:var(--color-primary)}.text-theme-gray{color:var(--color-theme-gray)}.text-white{color:var(--color-white)}.ring-primary{--tw-ring-color:var(--color-primary)}.focus\\:border-primary:focus{border-color:var(--color-primary)}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-40:disabled{opacity:.4}}@keyframes spin{to{transform:rotate(1turn)}}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{.h-10{height:calc(var(--spacing)*10)}.w-10{width:calc(var(--spacing)*10)}.break-words{overflow-wrap:break-word}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.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)}.aspect-square{aspect-ratio:1}.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-\\[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-\\[200px\\]{width:200px}.w-\\[250px\\]{width:250px}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-xs{max-width:var(--container-xs)}.flex-shrink-0,.shrink-0{flex-shrink:0}.cursor-not-allowed{cursor:not-allowed}.resize-none{resize:none}.items-end{align-items:flex-end}.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}.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-red-500{border-color:var(--color-red-500)}.bg-slate-900\\/40{background-color:#0f172b66}}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{@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)}}.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-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-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-right{text-align:right}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--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)}.text-red-500{color:var(--color-red-500)}.text-slate-700{color:var(--color-slate-700)}.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)}.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)}.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,)}.mb-auto{margin-bottom:auto}.text-black{color:var(--color-black)}}/*! 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{}@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{: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{.rotate-45{rotate:45deg}.text-blue-500{color:var(--color-blue-500)}.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}.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)}.visible{visibility:visible}.-top-12{top:calc(var(--spacing)*-12)}.-top-24{top:calc(var(--spacing)*-24)}.mx-auto{margin-inline:auto}.mt-10{margin-top:calc(var(--spacing)*10)}.mb-10{margin-bottom:calc(var(--spacing)*10)}.inline-block{display:inline-block}.size-18{height:calc(var(--spacing)*18);width:calc(var(--spacing)*18)}.pt-4{padding-top:calc(var(--spacing)*4)}.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}.m-auto{margin:auto}.size-32{height:calc(var(--spacing)*32);width:calc(var(--spacing)*32)}.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}.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%}.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{}/*! 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{}@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{}/*! 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{}@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{}@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{}@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{}/*! 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}.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-image__action-button,.quick-message-image__display-switch{background:0 0;border:1px solid #94a3b866}.quick-message-image__send{background:var(--quick-modal-primary);border:none;color:#fff}.quick-message-image__thumbnail{align-items:center;aspect-ratio:1;background:#94a3b81f;border-radius:.75rem;display:flex;justify-content:center;overflow:hidden;position:relative;width:100%}.quick-message-image__thumbnail-image{height:100%;object-fit:cover;width:100%}.quick-message-image__selection-indicator{align-items:center;border-radius:.5rem;box-shadow:0 10px 30px #0f172a2e;color:#fff;display:inline-flex;height:1.5rem;justify-content:center;left:.4rem;pointer-events:none;position:absolute;top:.4rem;width:1.5rem}.quick-message-image__grid-item{position:relative}.quick-message-image__more-button{align-items:center;background:#0f172ab3;border:none;border-radius:9999px;color:#fff;cursor:pointer;display:inline-flex;justify-content:center;padding:.25rem;transition:opacity .2s}.quick-message-image__more-button:hover{opacity:.85}.quick-message-image__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-image__list-more-button:hover{background:#94a3b81f}.quick-message-image__menu-wrapper{align-items:center;display:inline-flex;justify-content:center;position:relative}.quick-message-image__menu-wrapper:not(.quick-message-image__menu-wrapper--grid){margin-left:auto}.quick-message-image__menu-wrapper--grid{position:absolute;right:.4rem;top:.4rem}.quick-message-image__menu{border:1px solid #94a3b82e;border-radius:.75rem;box-shadow:0 18px 35px #0f172a38;display:flex;flex-direction:column;min-width:8rem;overflow:hidden;padding:.25rem 0;position:absolute;right:0;top:calc(100% + .35rem);z-index:40}.quick-message-image__menu--list{top:calc(100% + .5rem)}.quick-message-image__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-image__menu-item:hover{background:#94a3b824}.quick-message-image__menu-item--danger{color:#ef4444}.quick-message-image__menu-item--danger:hover{background:#ef44441f}.quick-message-image__rename-overlay{align-items:center;background:#0f172a73;display:flex;inset:0;justify-content:center;padding:1.5rem;position:absolute;z-index:20}.quick-message-image__rename-modal{border-radius:.75rem;box-shadow:0 20px 45px #0f172a40;max-width:22rem;padding:1.5rem;width:100%}.quick-message-image__rename-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:1rem}.quick-message-image__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-image__rename-close:disabled{cursor:not-allowed;opacity:.5}.quick-message-image__rename-cancel,.quick-message-image__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-image__rename-cancel{background:0 0;border:1px solid #94a3b866;color:inherit}.quick-message-image__rename-save{background:var(--quick-modal-primary);color:#fff}.quick-message-image__rename-cancel:disabled,.quick-message-image__rename-save:disabled{cursor:not-allowed;opacity:.45}.quick-message-image__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-image__rename-input-row:focus-within{border-color:var(--quick-modal-primary);box-shadow:0 0 0 1px var(--quick-modal-primary)}.quick-message-image__rename-input{background:0 0;border:none;color:inherit;flex:1;font-size:.875rem;padding:.35rem 0}.quick-message-image__rename-input:focus{outline:none}.quick-message-image__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)}}.hover\\:text-gray-600:hover{color:var(--color-gray-600)}.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\\:opacity-100:hover{opacity:1}.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)}.hover\\:brightness-110: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,)}}@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 (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 not all and (min-width:40rem){.max-sm\\:hidden{display:none}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}";
10
+
11
+ const QuickMessageImageComponent = /*@__PURE__*/ proxyCustomElement(class QuickMessageImageComponent extends H {
12
+ constructor(registerHost) {
13
+ super();
14
+ if (registerHost !== false) {
15
+ this.__registerHost();
16
+ }
17
+ this.imagesChange = createEvent(this, "imagesChange");
18
+ this.sendImages = createEvent(this, "sendImages");
19
+ }
20
+ handleClose;
21
+ value;
22
+ isMaster = false;
23
+ searchImage = '';
24
+ images = [];
25
+ imageDisplayMode = 'grid';
26
+ isLoading = false;
27
+ isLoadingMore = false;
28
+ isUploading = false;
29
+ isDeleting = false;
30
+ totalImages = 0;
31
+ totalPages = 0;
32
+ renameTargetId = null;
33
+ renameName = '';
34
+ renameExtension = '';
35
+ isRenaming = false;
36
+ openMenuId = null;
37
+ pageSize = 15;
38
+ localUploadPrefix = 'uploaded-image-';
39
+ page = 1;
40
+ currentSearch = '';
41
+ fileInput;
42
+ imagesChange;
43
+ sendImages;
44
+ pendingDeleteImageIds = [];
45
+ // Memoization cache for filtered images
46
+ cachedFilteredImages = null;
47
+ cachedSearchTerm = '';
48
+ cachedImagesLength = 0;
49
+ handleDocumentClick(event) {
50
+ const target = event.target;
51
+ if (target?.closest('[data-quick-message-image-menu-root]')) {
52
+ return;
53
+ }
54
+ this.openMenuId = null;
55
+ }
56
+ componentWillLoad() {
57
+ this.syncImagesFromProp(this.value);
58
+ }
59
+ async componentDidLoad() {
60
+ await this.fetchImages({ reset: true });
61
+ }
62
+ handleValueChange(newValue) {
63
+ this.syncImagesFromProp(newValue);
64
+ }
65
+ syncImagesFromProp(value) {
66
+ if (value === undefined || value === null) {
67
+ this.setImages([], false);
68
+ return;
69
+ }
70
+ const parsed = this.parseImagesValue(value);
71
+ this.setImages(parsed, false);
72
+ }
73
+ parseImagesValue(value) {
74
+ if (typeof value === 'string') {
75
+ try {
76
+ const deserialized = JSON.parse(value);
77
+ return this.cloneImages(deserialized);
78
+ }
79
+ catch (error) {
80
+ console.warn('[quick-message-image] Failed to parse images value', error);
81
+ return [];
82
+ }
83
+ }
84
+ return this.cloneImages(value);
85
+ }
86
+ cloneImages(images) {
87
+ return (images || []).map(image => ({
88
+ ...image,
89
+ isSelected: image.isSelected ?? false,
90
+ }));
91
+ }
92
+ setImages(next, shouldEmit = true) {
93
+ this.images = next;
94
+ if (shouldEmit) {
95
+ const payload = this.cloneImages(next);
96
+ this.imagesChange.emit(payload);
97
+ }
98
+ }
99
+ isLocalUpload(image) {
100
+ return image.id.startsWith(this.localUploadPrefix);
101
+ }
102
+ getRemoteImageCount() {
103
+ return this.images.filter(image => !this.isLocalUpload(image)).length;
104
+ }
105
+ mergeFetchedImages(fetched, reset) {
106
+ const localUploads = this.images.filter(image => this.isLocalUpload(image));
107
+ const selectionMap = new Map(this.images.map(image => [image.id, image.isSelected ?? false]));
108
+ const normalizedFetched = fetched.map(image => ({
109
+ ...image,
110
+ isSelected: selectionMap.get(image.id) ?? image.isSelected ?? false,
111
+ }));
112
+ if (reset) {
113
+ return [...localUploads, ...normalizedFetched];
114
+ }
115
+ const existingRemote = this.images.filter(image => !this.isLocalUpload(image));
116
+ const remoteIndexMap = new Map();
117
+ existingRemote.forEach((image, index) => {
118
+ remoteIndexMap.set(image.id, index);
119
+ });
120
+ const nextRemote = [...existingRemote];
121
+ normalizedFetched.forEach(image => {
122
+ const existingIndex = remoteIndexMap.get(image.id);
123
+ if (existingIndex !== undefined) {
124
+ nextRemote[existingIndex] = image;
125
+ }
126
+ else {
127
+ remoteIndexMap.set(image.id, nextRemote.length);
128
+ nextRemote.push(image);
129
+ }
130
+ });
131
+ return [...localUploads, ...nextRemote];
132
+ }
133
+ /**
134
+ * Memoized image filtering - only recalculates when search term or images change
135
+ * Performance: Reduces operations from 60fps to only when user types
136
+ */
137
+ filterImages() {
138
+ const search = this.searchImage.trim().toLowerCase();
139
+ // Quick return for no search
140
+ if (!search)
141
+ return this.images;
142
+ // Check if we can use cached results
143
+ if (this.cachedFilteredImages && search === this.cachedSearchTerm && this.images.length === this.cachedImagesLength) {
144
+ return this.cachedFilteredImages;
145
+ }
146
+ // Recalculate filtered results
147
+ const filtered = this.images.filter(image => image.name.toLowerCase().includes(search));
148
+ // Update cache
149
+ this.cachedFilteredImages = filtered;
150
+ this.cachedSearchTerm = search;
151
+ this.cachedImagesLength = this.images.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.images.find(image => image.id === this.renameTargetId);
169
+ }
170
+ openRenameModal(image, event) {
171
+ event?.preventDefault();
172
+ event?.stopPropagation();
173
+ const { base, extension } = this.splitFileName(image.name);
174
+ this.renameTargetId = image.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(imageId, event) {
187
+ event.preventDefault();
188
+ event.stopPropagation();
189
+ this.openMenuId = this.openMenuId === imageId ? null : imageId;
190
+ }
191
+ closeMenu() {
192
+ this.openMenuId = null;
193
+ }
194
+ handleMenuRename(image, event) {
195
+ event.preventDefault();
196
+ event.stopPropagation();
197
+ this.closeMenu();
198
+ this.openRenameModal(image, event);
199
+ }
200
+ requestDeleteImage(image, event) {
201
+ event.preventDefault();
202
+ event.stopPropagation();
203
+ if (this.isDeleting) {
204
+ return;
205
+ }
206
+ this.pendingDeleteImageIds = [image.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.confirmDeleteSelectedImages();
217
+ },
218
+ onCloseDialog: () => {
219
+ this.pendingDeleteImageIds = [];
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.setImages(this.images.map(image => image.id === target.id
248
+ ? {
249
+ ...image,
250
+ name: nextName,
251
+ }
252
+ : image));
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.setImages(this.images.map(image => image.id === target.id
260
+ ? {
261
+ ...image,
262
+ name: updated.name,
263
+ last_updated_at: updated.last_updated_at,
264
+ last_updated_by: updated.last_updated_by,
265
+ }
266
+ : image));
267
+ this.closeRenameModal(true);
268
+ }
269
+ catch (error) {
270
+ handleError(error, '[quick-message-image] Failed to rename image');
271
+ }
272
+ finally {
273
+ this.isRenaming = false;
274
+ }
275
+ }
276
+ toggleImageSelection(id) {
277
+ this.setImages(this.images.map(image => (image.id === id ? { ...image, isSelected: !image.isSelected } : image)));
278
+ }
279
+ toggleSelectAllImages() {
280
+ const isAllSelected = this.images.length > 0 && this.images.every(image => image.isSelected);
281
+ this.setImages(this.images.map(image => ({ ...image, isSelected: !isAllSelected })));
282
+ }
283
+ triggerImageUpload() {
284
+ this.fileInput?.click();
285
+ }
286
+ handleImageSelection(event) {
287
+ const input = event.target;
288
+ if (!input.files || input.files.length === 0)
289
+ return;
290
+ const files = Array.from(input.files);
291
+ input.value = '';
292
+ void this.uploadAndCreateImages(files);
293
+ }
294
+ async uploadAndCreateImages(files) {
295
+ if (files.length === 0) {
296
+ return;
297
+ }
298
+ this.isUploading = true;
299
+ try {
300
+ const payload = [];
301
+ for (const file of files) {
302
+ const uploadUrl = await uploadFile({
303
+ file,
304
+ filename: file.name.replaceAll(' ', '-'),
305
+ folder: 'zignal/quick-message-library/image',
306
+ });
307
+ if (!uploadUrl) {
308
+ continue;
309
+ }
310
+ payload.push({
311
+ file_type: 'image',
312
+ name: file.name,
313
+ url: uploadUrl,
314
+ size: file.size,
315
+ });
316
+ }
317
+ if (payload.length > 0) {
318
+ await createQuickMessageLibraryFiles({ files: payload });
319
+ await this.fetchImages({ reset: true });
320
+ }
321
+ }
322
+ catch (error) {
323
+ handleError(error, '[quick-message-image] Failed to upload image');
324
+ }
325
+ finally {
326
+ this.isUploading = false;
327
+ }
328
+ }
329
+ renderFileMeta(size, createdAt, t) {
330
+ const sizeKb = Math.round(size / 1024);
331
+ return `${sizeKb} KB · ${t('quick_message.created_at').replace('{date}', dayjs(createdAt).tz().format('DD/MM/YYYY HH:mm'))}`;
332
+ }
333
+ handleSendImages() {
334
+ const selected = this.images.filter(image => image.isSelected);
335
+ if (selected.length === 0)
336
+ return;
337
+ const payload = this.cloneImages(selected);
338
+ this.sendImages.emit(payload);
339
+ this.handleClose?.();
340
+ }
341
+ requestDeleteSelectedImages() {
342
+ if (this.isDeleting) {
343
+ return;
344
+ }
345
+ const selectedIds = this.images.filter(image => image.isSelected).map(image => image.id);
346
+ if (selectedIds.length === 0) {
347
+ return;
348
+ }
349
+ this.pendingDeleteImageIds = selectedIds;
350
+ const t = useTranslation();
351
+ openDialog({
352
+ open: true,
353
+ type: "WARNING" /* DIALOG_TYPE.WARNING */,
354
+ title: t('quick_message.delete_selected_items_confirmation'),
355
+ buttonName: t('confirm'),
356
+ cancelButtonName: t('cancel'),
357
+ onSubmitDialog: () => {
358
+ void this.confirmDeleteSelectedImages();
359
+ },
360
+ onCloseDialog: () => {
361
+ this.pendingDeleteImageIds = [];
362
+ },
363
+ });
364
+ }
365
+ async confirmDeleteSelectedImages() {
366
+ if (this.isDeleting) {
367
+ return;
368
+ }
369
+ const pendingIds = [...this.pendingDeleteImageIds];
370
+ this.pendingDeleteImageIds = [];
371
+ if (pendingIds.length === 0) {
372
+ return;
373
+ }
374
+ const pendingSet = new Set(pendingIds);
375
+ const remoteIds = this.images.filter(image => pendingSet.has(image.id) && !this.isLocalUpload(image)).map(image => image.id);
376
+ this.isDeleting = true;
377
+ try {
378
+ if (remoteIds.length > 0) {
379
+ await deleteQuickMessageLibraryFile({ ids: remoteIds });
380
+ }
381
+ const remaining = this.images.filter(image => !pendingSet.has(image.id));
382
+ this.setImages(remaining);
383
+ if (remoteIds.length > 0) {
384
+ this.totalImages = Math.max(0, this.totalImages - remoteIds.length);
385
+ await this.fetchImages({ reset: true });
386
+ }
387
+ }
388
+ catch (error) {
389
+ handleError(error, '[quick-message-image] Failed to delete images');
390
+ }
391
+ finally {
392
+ this.isDeleting = false;
393
+ }
394
+ }
395
+ async fetchImages({ search, reset = true } = {}) {
396
+ const businessId = configStore.get('businessId');
397
+ const shopId = configStore.get('shopId');
398
+ if (!businessId || !shopId) {
399
+ return;
400
+ }
401
+ if (reset ? this.isLoading : this.isLoadingMore) {
402
+ return;
403
+ }
404
+ const searchSource = search !== undefined ? search : reset ? this.searchImage : this.currentSearch;
405
+ const trimmedSearch = searchSource?.trim() ?? '';
406
+ const nextPage = reset ? 1 : this.page + 1;
407
+ if (search !== undefined) {
408
+ this.searchImage = searchSource ?? '';
409
+ }
410
+ if (reset) {
411
+ this.isLoading = true;
412
+ }
413
+ else {
414
+ this.isLoadingMore = true;
415
+ }
416
+ try {
417
+ const response = await getQuickMessageLibraryFiles({
418
+ fileType: 'image',
419
+ search: trimmedSearch ? trimmedSearch : undefined,
420
+ page: nextPage,
421
+ limit: this.pageSize,
422
+ });
423
+ const fetched = this.cloneImages(response.files || []);
424
+ const merged = this.mergeFetchedImages(fetched, reset);
425
+ this.page = response.page > 0 ? response.page : nextPage;
426
+ const resolvedTotalPages = response.total_pages > 0 ? response.total_pages : fetched.length > 0 ? 1 : 0;
427
+ this.totalPages = resolvedTotalPages;
428
+ this.totalImages = typeof response.total === 'number' ? response.total : fetched.length;
429
+ this.currentSearch = trimmedSearch;
430
+ this.setImages(merged);
431
+ }
432
+ catch (error) {
433
+ console.error('[quick-message-image] Failed to fetch images', error);
434
+ }
435
+ finally {
436
+ if (reset) {
437
+ this.isLoading = false;
438
+ }
439
+ else {
440
+ this.isLoadingMore = false;
441
+ }
442
+ }
443
+ }
444
+ async loadMoreImages() {
445
+ if (this.isLoading || this.isLoadingMore) {
446
+ return;
447
+ }
448
+ if (this.totalPages === 0 || this.page >= this.totalPages) {
449
+ return;
450
+ }
451
+ if (this.totalImages > 0) {
452
+ const remoteCount = this.getRemoteImageCount();
453
+ if (remoteCount >= this.totalImages) {
454
+ return;
455
+ }
456
+ }
457
+ await this.fetchImages({ reset: false });
458
+ }
459
+ handleScroll(event) {
460
+ const target = event.target;
461
+ if (!target) {
462
+ return;
463
+ }
464
+ const remaining = target.scrollHeight - target.scrollTop - target.clientHeight;
465
+ if (remaining < 160) {
466
+ void this.loadMoreImages();
467
+ }
468
+ }
469
+ handleSearchInput(event) {
470
+ const value = event.target.value;
471
+ this.searchImage = value;
472
+ if (!value.trim() && this.currentSearch && !this.isLoading && !this.isLoadingMore) {
473
+ void this.fetchImages({ search: '', reset: true });
474
+ }
475
+ }
476
+ async handleSearchSubmit(event) {
477
+ event?.preventDefault();
478
+ await this.fetchImages({ search: this.searchImage, reset: true });
479
+ }
480
+ clearSearch() {
481
+ if (!this.searchImage) {
482
+ return;
483
+ }
484
+ this.searchImage = '';
485
+ if (this.currentSearch) {
486
+ void this.fetchImages({ search: '', reset: true });
487
+ }
488
+ }
489
+ renderRenameModal(labels) {
490
+ const target = this.getRenameTarget();
491
+ if (!this.renameTargetId || !target) {
492
+ return null;
493
+ }
494
+ const trimmedBase = this.renameName.trim();
495
+ const nextName = this.renameExtension ? `${trimmedBase}${this.renameExtension}` : trimmedBase;
496
+ const isSaveDisabled = this.isRenaming || trimmedBase.length === 0 || nextName === target.name;
497
+ const inputId = `quick-message-image-rename-${target.id}`;
498
+ return (h("div", { class: "quick-message-image__rename-overlay", role: "dialog", "aria-modal": "true", "aria-labelledby": "quick-message-image-rename-title", onClick: () => this.closeRenameModal() }, h("div", { class: `quick-message-image__rename-modal bg-background text-surface`, onClick: event => event.stopPropagation() }, h("div", { class: "quick-message-image__rename-header" }, h("h3", { id: "quick-message-image-rename-title", class: "text-base font-semibold" }, labels.renameLabel), h("button", { type: "button", class: "quick-message-image__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-image__rename-input-row border border-divider bg-background` }, h("input", { id: inputId, type: "text", class: "quick-message-image__rename-input text-surface", value: this.renameName, onInput: event => this.handleRenameInput(event) }), this.renameExtension && h("span", { class: "quick-message-image__rename-extension" }, this.renameExtension))), h("div", { class: "flex justify-end gap-2 text-sm" }, h("button", { type: "button", class: "quick-message-image__rename-cancel", onClick: () => this.closeRenameModal(), disabled: this.isRenaming }, labels.cancelLabel), h("button", { type: "submit", class: "quick-message-image__rename-save", disabled: isSaveDisabled }, this.isRenaming ? h(Icon, { name: "Loader2", addClass: "size-4 animate-spin" }) : labels.saveLabel))))));
499
+ }
500
+ render() {
501
+ const theme = configStore.get('theme');
502
+ const t = useTranslation();
503
+ const filteredImages = this.filterImages();
504
+ const hasSelection = this.images.some(image => image.isSelected);
505
+ const isInitialLoading = this.isLoading && this.images.length === 0;
506
+ const renameLabel = t('quick_message.rename_item');
507
+ const deleteLabel = t('remove');
508
+ const nameLabel = t('quick_message.name');
509
+ const saveLabel = t('save');
510
+ const cancelLabel = t('cancel');
511
+ const closeLabel = t('close');
512
+ return (h(Host, { key: '53cd81d175ac975604a2928f6ff07dfb1a8abf84', class: "flex min-h-0 flex-1 flex-col gap-4", "data-theme": theme }, h("form", { key: 'b0850339f38ec724ead6d1cd40eeea5baf4e4d11', class: "w-full", onSubmit: event => this.handleSearchSubmit(event) }, h("div", { key: '74b054dfa194d4230e354e29dcd0b081ce6278be', class: "relative" }, h("input", { key: '8db1b0b0af5028c3d4e52dec53957c1666e3289f', 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_image'), value: this.searchImage, onInput: event => this.handleSearchInput(event) }), this.searchImage && (h("button", { key: '0be9bcb7674103f9a7e051f79fdee705ea977b3f', 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: '65434bc16e576b3551eedcc41b81a18384cd0b20', name: "X" }))))), h("div", { key: 'a489c8670969e0018fbd64d0e5f92b8c8606c45d', class: "flex items-center justify-between" }, this.images.length > 0 ? (h("label", { class: "inline-flex items-center gap-2 text-sm" }, h("input", { type: "checkbox", checked: this.images.length > 0 && this.images.every(image => image.isSelected), onChange: () => this.toggleSelectAllImages() }), h("span", null, t('select_all')))) : (h("span", null)), h("div", { key: 'ca3e01ade93d9f65ea7aa14dd3516a908319567b', class: "flex items-center gap-2" }, h("input", { key: 'f9b2fbe45f1b7ca4dba1ed3db1b42a544be3748a', class: "hidden", type: "file", accept: "image/*", multiple: true, ref: el => (this.fileInput = el), onChange: event => this.handleImageSelection(event) }), h("button", { key: 'dbb8a6b4036f3ee1395ea44ac2b06f4d36880cc5', type: "button", class: "quick-message-image__action-button inline-flex h-9 w-9 items-center justify-center rounded-lg cursor-pointer", onClick: () => !this.isUploading && this.triggerImageUpload(), "aria-label": t('quick_message.add_image'), disabled: this.isUploading }, this.isUploading ? h(Icon, { name: "Loader2", addClass: "size-4 animate-spin" }) : h(Icon, { name: "Plus" })), this.images.length > 0 && (h("button", { key: '86103bebeb5d878348de03a5561be8d1c03c0a62', class: "quick-message-image__action-button quick-message-image__display-switch inline-flex h-9 w-9 items-center justify-center rounded-lg cursor-pointer", type: "button", onClick: () => (this.imageDisplayMode = this.imageDisplayMode === 'grid' ? 'list' : 'grid'), "aria-label": this.imageDisplayMode === 'grid' ? t('quick_message.display_list') : t('quick_message.display_grid') }, h(Icon, { key: '570f1a29d122bbec8ba16ee4c4c0fb9bc39a539b', name: this.imageDisplayMode === 'grid' ? 'List' : 'Grid' }))))), this.isUploading && (h("div", { key: '885fa4b84a4211310801e7f61848b94e99724976', class: `flex items-center gap-2 text-xs text-primary` }, h(Icon, { key: '6457c6a0cdb9ebcab8fe26a45f4aec5c3aef71bf', name: "Loader2", addClass: "size-4 animate-spin" }), h("span", { key: '84520a32e3d0b9fd5a9d85ef8b64e15141320624' }, t('quick_message.uploading') || 'Uploading...'))), isInitialLoading ? (h("div", { class: `flex flex-1 items-center justify-center text-sm text-theme-gray` }, "Loading...")) : filteredImages.length === 0 ? (h("div", { class: `flex flex-1 items-center justify-center text-sm text-theme-gray` }, t('quick_message.image_empty'))) : this.imageDisplayMode === 'grid' ? (h("div", { class: "grid flex-1 grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 auto-rows-auto items-start content-start gap-3 overflow-y-auto", onScroll: event => this.handleScroll(event) }, filteredImages.map(image => (h("div", { class: "quick-message-image__grid-item", key: image.id }, h("button", { type: "button", class: `flex w-full flex-col items-center gap-2 rounded-xl border border-transparent bg-background p-1.5 cursor-pointer ${image.isSelected ? 'border-primary' : ''}`, onClick: () => this.toggleImageSelection(image.id) }, h("div", { class: "quick-message-image__thumbnail" }, image.isSelected && (h("span", { class: `quick-message-image__selection-indicator bg-primary`, "aria-hidden": "true" }, h(Icon, { name: "Check", addClass: "size-3 text-white" }))), h("img", { src: image.url, alt: image.name, class: "quick-message-image__thumbnail-image", loading: "lazy" })), h("div", { class: `text-center text-xs line-clamp-2 text-theme-gray` }, image.name)), h("div", { class: "quick-message-image__menu-wrapper quick-message-image__menu-wrapper--grid", "data-quick-message-image-menu-root": "" }, h("button", { type: "button", class: "quick-message-image__more-button", onClick: event => this.toggleMenu(image.id, event), "aria-haspopup": "menu", "aria-expanded": this.openMenuId === image.id ? 'true' : 'false', "aria-label": renameLabel, "data-quick-message-image-menu-root": "" }, h(Icon, { name: "MoreVertical", addClass: "size-4" })), this.openMenuId === image.id && (h("div", { class: `quick-message-image__menu bg-background text-surface`, role: "menu", "data-quick-message-image-menu-root": "" }, h("button", { type: "button", class: "quick-message-image__menu-item", role: "menuitem", onClick: event => this.handleMenuRename(image, event) }, renameLabel), h("button", { type: "button", class: "quick-message-image__menu-item quick-message-image__menu-item--danger", role: "menuitem", onClick: event => this.requestDeleteImage(image, event) }, deleteLabel))))))), this.isLoadingMore && h("div", { class: `col-span-full py-3 text-center text-xs text-theme-gray` }, "Loading..."))) : (h("div", { class: "flex flex-1 flex-col gap-2.5 overflow-y-auto", onScroll: event => this.handleScroll(event) }, filteredImages.map(image => (h("label", { class: `flex items-center gap-3 rounded-xl bg-background px-3 py-2.5`, key: image.id }, h("input", { type: "checkbox", checked: !!image.isSelected, onChange: () => this.toggleImageSelection(image.id) }), h("img", { src: image.url, alt: image.name, class: "h-16 w-16 rounded-xl object-cover", loading: "lazy" }), h("div", { class: "flex flex-1 items-center gap-3 min-w-0" }, h("div", { class: `flex min-w-0 flex-col gap-1 text-theme-gray` }, h("div", { class: "text-sm font-medium line-clamp-2 wrap-break-words" }, image.name), h("div", { class: `text-xs text-theme-gray` }, this.renderFileMeta(image.size, image.created_at, t))), h("div", { class: "quick-message-image__menu-wrapper", "data-quick-message-image-menu-root": "" }, h("button", { type: "button", class: "quick-message-image__list-more-button", onClick: event => this.toggleMenu(image.id, event), "aria-haspopup": "menu", "aria-expanded": this.openMenuId === image.id ? 'true' : 'false', "aria-label": renameLabel, "data-quick-message-image-menu-root": "" }, h(Icon, { name: "MoreVertical", addClass: "size-4" })), this.openMenuId === image.id && (h("div", { class: `quick-message-image__menu quick-message-image__menu--list bg-background text-surface`, role: "menu", "data-quick-message-image-menu-root": "" }, h("button", { type: "button", class: "quick-message-image__menu-item", role: "menuitem", onClick: event => this.handleMenuRename(image, event) }, renameLabel), h("button", { type: "button", class: "quick-message-image__menu-item quick-message-image__menu-item--danger", role: "menuitem", onClick: event => this.requestDeleteImage(image, event) }, deleteLabel)))))))), this.isLoadingMore && h("div", { class: `py-3 text-center text-xs text-theme-gray` }, "Loading..."))), h("div", { key: '923e9a57257b8bdfb0fec48fcac73e221113c25f', class: `mt-auto flex items-center gap-2 pt-2 text-theme-gray` }, hasSelection && (h("button", { key: '346da9f0e4d847edfc6c08ac35aabcd691f2de43', type: "button", class: `quick-message-image__action-button inline-flex h-9 w-9 items-center justify-center rounded-lg cursor-pointer disabled:cursor-not-allowed disabled:opacity-40`, onClick: () => this.requestDeleteSelectedImages(), "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: '431636ba1a2dd09e3636d8e0f001c71f32a5047b', type: "button", disabled: !hasSelection, class: `quick-message-image__send ml-auto inline-flex items-center justify-center rounded-full px-4 py-2 text-xs font-semibold bg-primary text-white disabled:cursor-not-allowed disabled:opacity-40 cursor-pointer`, onClick: () => this.handleSendImages() }, t('quick_message.send_images')))), this.renderRenameModal({ renameLabel, nameLabel, saveLabel, cancelLabel, closeLabel })));
513
+ }
514
+ static get watchers() { return {
515
+ "value": ["handleValueChange"]
516
+ }; }
517
+ static get style() { return quickMessageImageCss; }
518
+ }, [768, "quick-message-image", {
519
+ "handleClose": [16],
520
+ "value": [1],
521
+ "isMaster": [4, "is-master"],
522
+ "searchImage": [32],
523
+ "images": [32],
524
+ "imageDisplayMode": [32],
525
+ "isLoading": [32],
526
+ "isLoadingMore": [32],
527
+ "isUploading": [32],
528
+ "isDeleting": [32],
529
+ "totalImages": [32],
530
+ "totalPages": [32],
531
+ "renameTargetId": [32],
532
+ "renameName": [32],
533
+ "renameExtension": [32],
534
+ "isRenaming": [32],
535
+ "openMenuId": [32]
536
+ }, [[4, "click", "handleDocumentClick"]], {
537
+ "value": ["handleValueChange"]
538
+ }]);
539
+ function defineCustomElement() {
540
+ if (typeof customElements === "undefined") {
541
+ return;
542
+ }
543
+ const components = ["quick-message-image"];
544
+ components.forEach(tagName => { switch (tagName) {
545
+ case "quick-message-image":
546
+ if (!customElements.get(tagName)) {
547
+ customElements.define(tagName, QuickMessageImageComponent);
548
+ }
549
+ break;
550
+ } });
551
+ }
552
+ defineCustomElement();
553
+
554
+ export { QuickMessageImageComponent as Q, defineCustomElement as d };