zignal-stencil-library 1.1.149 → 1.1.151

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 (183) hide show
  1. package/dist/cjs/autocomplete-address_44.cjs.entry.js +88 -55
  2. package/dist/cjs/{dayjs-BSEUEjDP.js → dayjs-C-Yh2o_8.js} +1 -1
  3. package/dist/cjs/{index-BcqF7VoK.js → index-BXiJqJvp.js} +14 -2
  4. package/dist/cjs/index.cjs.js +1 -1
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/quick-message-app.cjs.entry.js +3 -3
  7. package/dist/cjs/zignal-stencil-library.cjs.js +1 -1
  8. package/dist/collection/components/autocomplete-address/autocomplete-address.css +1 -1
  9. package/dist/collection/components/autocomplete-multiple-select/autocomplete-multiple-select.css +1 -1
  10. package/dist/collection/components/autocomplete-select/autocomplete-select.css +1 -1
  11. package/dist/collection/components/channel-box/channel-box.css +1 -1
  12. package/dist/collection/components/chat-app/chat-app.css +1 -1
  13. package/dist/collection/components/chat-header/chat-header.css +1 -1
  14. package/dist/collection/components/chat-input/chat-input.css +1 -1
  15. package/dist/collection/components/chat-input/chat-input.js +3 -2
  16. package/dist/collection/components/checkbox-list/checkbox-list.css +1 -1
  17. package/dist/collection/components/dialog-bill-editor/dialog-bill-editor.css +1 -1
  18. package/dist/collection/components/dialog-custom-filter/dialog-custom-filter.css +1 -1
  19. package/dist/collection/components/dialog-editor/dialog-editor.css +1 -1
  20. package/dist/collection/components/dialog-preview-media/dialog-preview-media.css +1 -1
  21. package/dist/collection/components/dialog-search/dialog-search.css +1 -1
  22. package/dist/collection/components/internal-component/chat-item.js +2 -2
  23. package/dist/collection/components/menu-chat-channel/menu-chat-channel.css +1 -1
  24. package/dist/collection/components/menu-chat-type/menu-chat-type.css +1 -1
  25. package/dist/collection/components/menu-list/menu-list.css +1 -1
  26. package/dist/collection/components/message-box/message-box.css +1 -1
  27. package/dist/collection/components/message-box/message-box.js +44 -11
  28. package/dist/collection/components/message-content/message-content.css +1 -1
  29. package/dist/collection/components/message-item/message-item.css +1 -1
  30. package/dist/collection/components/message-media/message-media.css +1 -1
  31. package/dist/collection/components/profile-history/profile-history.css +1 -1
  32. package/dist/collection/components/profile-info/profile-info.css +1 -1
  33. package/dist/collection/components/profile-media/profile-media.css +1 -1
  34. package/dist/collection/components/profile-tabs/profile-tabs.css +1 -1
  35. package/dist/collection/components/quick-message-add-template/quick-message-add-template.css +1 -1
  36. package/dist/collection/components/quick-message-app/quick-message-app.css +1 -1
  37. package/dist/collection/components/quick-message-file/quick-message-file.css +1 -1
  38. package/dist/collection/components/quick-message-image/quick-message-image.css +1 -1
  39. package/dist/collection/components/quick-message-modal/quick-message-modal.css +1 -1
  40. package/dist/collection/components/quick-message-template/quick-message-template.css +1 -1
  41. package/dist/collection/components/search-box/search-box.css +1 -1
  42. package/dist/collection/components/status-badge/status-badge.css +1 -1
  43. package/dist/collection/components/tag-list/tag-list.css +1 -1
  44. package/dist/collection/components/tag-or-status-item/tag-or-status-item.css +1 -1
  45. package/dist/collection/components/tag-popper/tag-popper.css +1 -1
  46. package/dist/collection/components/typography-clamp/typography-clamp.css +1 -1
  47. package/dist/collection/components/z-avatar/z-avatar.css +1 -1
  48. package/dist/collection/components/z-dialog/z-dialog.css +1 -1
  49. package/dist/components/autocomplete-address.js +1 -1
  50. package/dist/components/autocomplete-multiple-select.js +1 -1
  51. package/dist/components/autocomplete-select.js +1 -1
  52. package/dist/components/channel-box.js +1 -1
  53. package/dist/components/chat-app.js +39 -39
  54. package/dist/components/chat-header.js +1 -1
  55. package/dist/components/chat-input.js +1 -1
  56. package/dist/components/checkbox-list.js +1 -1
  57. package/dist/components/dialog-bill-editor.js +1 -1
  58. package/dist/components/dialog-custom-filter.js +1 -1
  59. package/dist/components/dialog-editor.js +1 -1
  60. package/dist/components/dialog-preview-media.js +1 -1
  61. package/dist/components/dialog-search.js +1 -1
  62. package/dist/components/index.js +14 -2
  63. package/dist/components/menu-chat-channel.js +1 -1
  64. package/dist/components/menu-chat-type.js +1 -1
  65. package/dist/components/menu-list.js +1 -1
  66. package/dist/components/message-box.js +1 -1
  67. package/dist/components/message-content.js +1 -1
  68. package/dist/components/message-item.js +1 -1
  69. package/dist/components/message-media.js +1 -1
  70. package/dist/components/p-9C7AwGvM.js +223 -0
  71. package/dist/components/p-BB9ah96y.js +554 -0
  72. package/dist/components/p-BRpYxO3M.js +119 -0
  73. package/dist/components/p-BTCmyW_D.js +98 -0
  74. package/dist/components/p-BYBimJCQ.js +312 -0
  75. package/dist/components/p-BZZk_Nhz.js +515 -0
  76. package/dist/components/p-BhBNwwRB.js +154 -0
  77. package/dist/components/p-Bmp0v9GX.js +51 -0
  78. package/dist/components/p-Bp0zz6Y6.js +135 -0
  79. package/dist/components/p-BsI1HZGG.js +266 -0
  80. package/dist/components/p-BzKx9Adn.js +611 -0
  81. package/dist/components/p-C5VvgOE9.js +599 -0
  82. package/dist/components/p-CE3c3IL-.js +128 -0
  83. package/dist/components/p-CNszmmDL.js +102 -0
  84. package/dist/components/p-COZKLVfW.js +168 -0
  85. package/dist/components/p-CYRSDtTf.js +57 -0
  86. package/dist/components/p-CZ3iEwuo.js +563 -0
  87. package/dist/components/p-C_PDZKGG.js +158 -0
  88. package/dist/components/p-CeBFtax1.js +166 -0
  89. package/dist/components/p-CimyVUlr.js +32 -0
  90. package/dist/components/p-Ck5c82Vm.js +74 -0
  91. package/dist/components/p-Cq4sFbGO.js +129 -0
  92. package/dist/components/p-CtoKbtXk.js +156 -0
  93. package/dist/components/p-D8oZapy4.js +230 -0
  94. package/dist/components/p-DKBK5jV_.js +122 -0
  95. package/dist/components/p-DOxk_wHY.js +107 -0
  96. package/dist/components/p-DQYxfaQG.js +108 -0
  97. package/dist/components/p-DSkVwgQ_.js +155 -0
  98. package/dist/components/p-DXAea_-R.js +96 -0
  99. package/dist/components/p-DfZBI89D.js +214 -0
  100. package/dist/components/p-Dt295Plo.js +178 -0
  101. package/dist/components/p-DtS5-nUS.js +231 -0
  102. package/dist/components/p-Dx2yZdeP.js +138 -0
  103. package/dist/components/p-MPfQpLuD.js +684 -0
  104. package/dist/components/p-_ZatmxBq.js +65 -0
  105. package/dist/components/p-vWZ6UOF3.js +161 -0
  106. package/dist/components/p-z4HeU4Nl.js +76 -0
  107. package/dist/components/p-zdFO-UlQ.js +171 -0
  108. package/dist/components/profile-history.js +1 -1
  109. package/dist/components/profile-info.js +1 -1
  110. package/dist/components/profile-media.js +1 -1
  111. package/dist/components/profile-tabs.js +1 -1
  112. package/dist/components/quick-message-add-template.js +1 -1
  113. package/dist/components/quick-message-app.js +6 -6
  114. package/dist/components/quick-message-file.js +1 -1
  115. package/dist/components/quick-message-image.js +1 -1
  116. package/dist/components/quick-message-modal.js +1 -1
  117. package/dist/components/quick-message-template.js +1 -1
  118. package/dist/components/search-box.js +1 -1
  119. package/dist/components/status-badge.js +1 -1
  120. package/dist/components/summarize-message-section.js +1 -1
  121. package/dist/components/tag-list.js +1 -1
  122. package/dist/components/tag-or-status-item.js +1 -1
  123. package/dist/components/tag-popper.js +1 -1
  124. package/dist/components/typography-clamp.js +1 -1
  125. package/dist/components/user-info-section.js +1 -1
  126. package/dist/components/z-avatar.js +1 -1
  127. package/dist/components/z-dialog.js +1 -1
  128. package/dist/esm/autocomplete-address_44.entry.js +88 -55
  129. package/dist/esm/{dayjs-CudFbPUo.js → dayjs-BzCDyqMN.js} +1 -1
  130. package/dist/esm/{index-B3nb31xy.js → index-DPOSmdTJ.js} +14 -2
  131. package/dist/esm/index.js +1 -1
  132. package/dist/esm/loader.js +1 -1
  133. package/dist/esm/quick-message-app.entry.js +3 -3
  134. package/dist/esm/zignal-stencil-library.js +1 -1
  135. package/dist/types/components/message-box/message-box.d.ts +4 -0
  136. package/dist/zignal-stencil-library/index.esm.js +1 -1
  137. package/dist/zignal-stencil-library/p-DPOSmdTJ.js +1 -0
  138. package/dist/zignal-stencil-library/{p-QJh7p40E.js → p-DPcrmSvN.js} +1 -1
  139. package/dist/zignal-stencil-library/p-e66b7102.entry.js +2 -0
  140. package/dist/zignal-stencil-library/p-f6779826.entry.js +1 -0
  141. package/dist/zignal-stencil-library/zignal-stencil-library.esm.js +1 -1
  142. package/package.json +1 -1
  143. package/dist/components/p-5FDU529Q.js +0 -129
  144. package/dist/components/p-B3sv8Cpm.js +0 -684
  145. package/dist/components/p-B9PRtKKm.js +0 -554
  146. package/dist/components/p-BWv8MbzZ.js +0 -158
  147. package/dist/components/p-BZ7KCncK.js +0 -178
  148. package/dist/components/p-BaATyWCh.js +0 -102
  149. package/dist/components/p-Bd28bEf_.js +0 -155
  150. package/dist/components/p-Bk2GvoAQ.js +0 -515
  151. package/dist/components/p-BmD78zPG.js +0 -161
  152. package/dist/components/p-BpHIg6Zj.js +0 -122
  153. package/dist/components/p-C-wUv6vx.js +0 -98
  154. package/dist/components/p-C9lpq3mD.js +0 -578
  155. package/dist/components/p-CTCAyv3Q.js +0 -51
  156. package/dist/components/p-CWAhjm33.js +0 -74
  157. package/dist/components/p-CXYv5DLC.js +0 -128
  158. package/dist/components/p-C_OxAbGN.js +0 -598
  159. package/dist/components/p-CdDmXJDZ.js +0 -168
  160. package/dist/components/p-CgbHzdYE.js +0 -214
  161. package/dist/components/p-CmgyIFb-.js +0 -266
  162. package/dist/components/p-CnsAVxMy.js +0 -65
  163. package/dist/components/p-CpA5hc_o.js +0 -312
  164. package/dist/components/p-CzfGejIm.js +0 -119
  165. package/dist/components/p-D6IxrcVY.js +0 -166
  166. package/dist/components/p-D7LdFiVw.js +0 -57
  167. package/dist/components/p-D8yzEuEG.js +0 -108
  168. package/dist/components/p-DC0UH_ws.js +0 -231
  169. package/dist/components/p-DS1y2tKg.js +0 -563
  170. package/dist/components/p-DTaNTSq8.js +0 -107
  171. package/dist/components/p-D_Jqalu2.js +0 -135
  172. package/dist/components/p-DcC5eHv4.js +0 -230
  173. package/dist/components/p-DfKJdTvJ.js +0 -32
  174. package/dist/components/p-DrueVuU5.js +0 -223
  175. package/dist/components/p-DsWfCgkk.js +0 -154
  176. package/dist/components/p-Du5YXEgv.js +0 -156
  177. package/dist/components/p-Kj4A18ko.js +0 -138
  178. package/dist/components/p-KkLF26TT.js +0 -76
  179. package/dist/components/p-Sc5G6hdD.js +0 -96
  180. package/dist/components/p-j1XqaFsN.js +0 -171
  181. package/dist/zignal-stencil-library/p-47a5491a.entry.js +0 -1
  182. package/dist/zignal-stencil-library/p-B3nb31xy.js +0 -1
  183. package/dist/zignal-stencil-library/p-efc109b8.entry.js +0 -2
@@ -1,563 +0,0 @@
1
- import { p as proxyCustomElement, H, c as createEvent, h, a as Host } from './p-CspQEuuq.js';
2
- import { d as dayjs } from './p-B_5_ahYE.js';
3
- import { a as updateQuickMessageLibraryFileName, u as uploadFile, c as createQuickMessageLibraryFiles, d as deleteQuickMessageLibraryFile, g as getQuickMessageLibraryFiles } from './p-Br7G1klJ.js';
4
- import { c as configStore } from './p-g5ZX6XGs.js';
5
- import { u as useTranslation } from './p-CjxHbUhu.js';
6
- import { I as Icon } from './p-Sf5NNGh3.js';
7
- import { o as openDialog, h as handleError } from './p-uDTLu3vv.js';
8
-
9
- const quickMessageFileCss = "@layer base{*,::backdrop,:after,:before{--tw-space-y-reverse:0;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-space-x-reverse:0;--tw-shadow:0 0 #0000;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-alpha:100%;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-offset-width:0;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-drop-shadow-alpha:100%;border:0 solid;box-sizing:border-box;margin:0;padding:0}}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-space-x-reverse:0;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-space-y-reverse:0;--tw-leading:initial}}}@layer theme{:host,:root{--container-xl:36rem;--text-xl:1.25rem;--text-xl--line-height:1.4;--color-yellow-500:oklch(79.5% .184 86.047);--container-3xs:16rem;--container-sm:24rem;--color-yellow-300:oklch(90.5% .182 98.111);--color-slate-500:oklch(55.4% .046 257.417);--leading-relaxed:1.625;--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;--leading-tight:1.25;--leading-snug:1.375;--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{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing)*0)}.top-3{top:calc(var(--spacing)*3)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.bottom-3{bottom:calc(var(--spacing)*3)}.left-3{left:calc(var(--spacing)*3)}.z-10{z-index:10}.z-80{z-index:80}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1}.size-4{height:calc(var(--spacing)*4);width:calc(var(--spacing)*4)}.size-6{height:calc(var(--spacing)*6);width:calc(var(--spacing)*6)}.size-8{height:calc(var(--spacing)*8);width:calc(var(--spacing)*8)}.size-12{height:calc(var(--spacing)*12);width:calc(var(--spacing)*12)}.size-14{height:calc(var(--spacing)*14);width:calc(var(--spacing)*14)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-\\[180px\\]{height:180px}.h-\\[220px\\]{height:220px}.h-\\[280px\\]{height:280px}.h-full{height:100%}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-\\[200px\\]{width:200px}.w-\\[250px\\]{width:250px}.w-full{width:100%}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-xs{max-width:var(--container-xs)}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.animate-spin{animation:var(--animate-spin)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\\[18px\\]{border-radius:18px}.rounded-full{border-radius:3.40282e+38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-\\[1\\.5px\\]{border-style:var(--tw-border-style);border-width:1.5px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-b-\\[1\\.5px\\]{border-bottom-style:var(--tw-border-style);border-bottom-width:1.5px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-current{border-color:currentColor}.border-primary{border-color:var(--color-primary)}.border-red-500{border-color:var(--color-red-500)}.bg-slate-900\\/40{background-color:#0f172b66}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\\/40{background-color:color-mix(in oklab,var(--color-slate-900)40%,transparent)}}.bg-slate-900\\/60{background-color:#0f172b99}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\\/60{background-color:color-mix(in oklab,var(--color-slate-900)60%,transparent)}}.bg-surface{background-color:var(--color-surface)}.bg-transparent{background-color:#0000}.bg-white\\/90{background-color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.bg-white\\/90{background-color:color-mix(in srgb,#fff90%,transparent);background-color:color-mix(in oklab,var(--color-white)90%,transparent)}}.object-cover{object-fit:cover}.p-1{padding:calc(var(--spacing)*1)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-12{padding-block:calc(var(--spacing)*12)}.pr-16{padding-right:calc(var(--spacing)*16)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pl-2{padding-left:calc(var(--spacing)*2)}.text-center{text-align:center}.text-right{text-align:right}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[13px\\]{font-size:13px}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-primary{color:var(--color-primary)}.text-red-500{color:var(--color-red-500)}.text-slate-700{color:var(--color-slate-700)}.text-theme-gray{color:var(--color-theme-gray)}.text-white{color:var(--color-white)}.placeholder-surface::placeholder{color:var(--color-surface)}.opacity-0{opacity:0}.opacity-60{opacity:.6}.opacity-80{opacity:.8}.shadow,.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)}.shadow,.shadow-sm,.shadow-xl{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a)}.ring-primary{--tw-ring-color:var(--color-primary)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-all,.transition-colors{transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-opacity{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.focus\\:border-red-500:focus{border-color:var(--color-red-500)}.focus\\:ring-0:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)}.focus\\:ring-0:focus,.focus\\:ring-2:focus{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)}.focus\\:ring-red-200:focus{--tw-ring-color:var(--color-red-200)}.focus\\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\\:ring-slate-200:focus{--tw-ring-color:var(--color-slate-200)}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}}@keyframes spin{to{transform:rotate(1turn)}}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{.top-1\\/2{top:50%}.right-2{right:calc(var(--spacing)*2)}.col-span-full{grid-column:1/-1}.mt-auto{margin-top:auto}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.size-3{height:calc(var(--spacing)*3);width:calc(var(--spacing)*3)}.h-16{height:calc(var(--spacing)*16)}.min-h-0{min-height:calc(var(--spacing)*0)}.w-16{width:calc(var(--spacing)*16)}.min-w-0{min-width:calc(var(--spacing)*0)}.-translate-y-1\\/2{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.auto-rows-auto{grid-auto-rows:auto}.content-start{align-content:flex-start}.gap-2\\.5{gap:calc(var(--spacing)*2.5)}.overflow-y-auto{overflow-y:auto}.border-divider{border-color:var(--color-divider)}.border-transparent{border-color:#0000}.bg-primary{background-color:var(--color-primary)}.p-1\\.5{padding:calc(var(--spacing)*1.5)}.py-2\\.5{padding-block:calc(var(--spacing)*2.5)}.pt-2{padding-top:calc(var(--spacing)*2)}.pr-9{padding-right:calc(var(--spacing)*9)}.text-gray-400{color:var(--color-gray-400)}.focus\\:border-primary:focus{border-color:var(--color-primary)}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-40:disabled{opacity:.4}.h-10{height:calc(var(--spacing)*10)}.w-10{width:calc(var(--spacing)*10)}.break-words{overflow-wrap:break-word}.inset-y-0{inset-block:calc(var(--spacing)*0)}.container{width:100%}.mb-2{margin-bottom:calc(var(--spacing)*2)}.size-5{height:calc(var(--spacing)*5);width:calc(var(--spacing)*5)}.size-10{height:calc(var(--spacing)*10);width:calc(var(--spacing)*10)}.h-40{height:calc(var(--spacing)*40)}.h-\\[200px\\]{height:200px}.w-60{width:calc(var(--spacing)*60)}.shrink-0{flex-shrink:0}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.self-end{align-self:flex-end}.border-surface{border-color:var(--color-surface)}.py-1{padding-block:calc(var(--spacing)*1)}.py-10{padding-block:calc(var(--spacing)*10)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.whitespace-pre-line{white-space:pre-line}.text-slate-500{color:var(--color-slate-500)}.opacity-70{opacity:.7}.shadow-\\[0_8px_24px_rgba\\(15\\,23\\,42\\,0\\.08\\)\\]{--tw-shadow:0 8px 24px var(--tw-shadow-color,#0f172a14)}.shadow-\\[0_8px_24px_rgba\\(15\\,23\\,42\\,0\\.08\\)\\],.shadow-sm{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)}.max-w-sm{max-width:var(--container-sm)}.text-green-500{color:var(--color-green-500)}.text-yellow-500{color:var(--color-yellow-500)}.mb-auto{margin-bottom:auto}.px-1{padding-inline:calc(var(--spacing)*1)}.text-black{color:var(--color-black)}.col-span-2{grid-column:span 2/span 2}.my-2{margin-block:calc(var(--spacing)*2)}.w-xl{width:var(--container-xl)}.w-xs{width:var(--container-xs)}.col-span-1{grid-column:span 1/span 1}.col-span-3{grid-column:span 3/span 3}.m-2{margin:calc(var(--spacing)*2)}.mx-4{margin-inline:calc(var(--spacing)*4)}.ml-0\\.5{margin-left:calc(var(--spacing)*.5)}.size-16{height:calc(var(--spacing)*16);width:calc(var(--spacing)*16)}.size-32{height:calc(var(--spacing)*32);width:calc(var(--spacing)*32)}.size-\\[8px\\]{height:8px;width:8px}.size-\\[10px\\]{height:10px;width:10px}.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%}.gap-y-1{row-gap:calc(var(--spacing)*1)}.border-b-\\[0\\.5px\\]{border-bottom-style:var(--tw-border-style);border-bottom-width:.5px}.bg-pink-100{background-color:var(--color-pink-100)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.whitespace-nowrap{white-space:nowrap}.text-background{color:var(--color-background)}.text-blue-500{color:var(--color-blue-500)}.text-green-700{color:var(--color-green-700)}.text-red-700{color:var(--color-red-700)}.capitalize{text-transform:capitalize}.underline{text-decoration-line:underline}.opacity-100{opacity:1}.resize{resize:both}.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,)}.m-auto{margin:auto}.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{}/*! 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{}/*! 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{@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)}}}/*! 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{.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}: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))}.fill-current{fill:currentColor}.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)}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.max-w-3xs{max-width:var(--container-3xs)}.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)}.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)}.size-2{height:calc(var(--spacing)*2);width:calc(var(--spacing)*2)}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}/*! 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{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@layer utilities;/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */@layer properties{}@layer base{}@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{}@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-file__icon{background:var(--quick-modal-primary-ghost);color:var(--quick-modal-primary)}.quick-message-file__action-button{background:0 0;border:1px solid #94a3b866}.quick-message-file__send{background:var(--quick-modal-primary);border:none;color:#fff}.quick-message-file__list-more-button{align-items:center;background:0 0;border:none;border-radius:.5rem;color:inherit;cursor:pointer;display:inline-flex;justify-content:center;margin-left:auto;padding:.25rem}.quick-message-file__list-more-button:hover{background:#94a3b81f}.quick-message-file__menu-wrapper{align-items:center;display:inline-flex;justify-content:center;margin-left:auto;position:relative}.quick-message-file__menu{border:1px solid #94a3b82e;border-radius:.75rem;box-shadow:0 16px 30px #0f172a33;display:flex;flex-direction:column;min-width:8rem;overflow:hidden;padding:.25rem 0;position:absolute;right:0;top:calc(100% + .5rem);z-index:40}.quick-message-file__menu-item{align-items:center;background:0 0;border:none;color:inherit;cursor:pointer;display:flex;font-size:.8125rem;gap:.5rem;justify-content:flex-start;line-height:1.2;padding:.5rem .9rem;text-align:left;transition:background-color .2s;width:100%}.quick-message-file__menu-item:hover{background:#94a3b824}.quick-message-file__menu-item--danger{color:#ef4444}.quick-message-file__menu-item--danger:hover{background:#ef44441f}.quick-message-file__rename-overlay{align-items:center;background:#0f172a73;display:flex;inset:0;justify-content:center;padding:1.5rem;position:absolute;z-index:20}.quick-message-file__rename-modal{border-radius:.75rem;box-shadow:0 20px 45px #0f172a40;max-width:22rem;padding:1.5rem;width:100%}.quick-message-file__rename-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:1rem}.quick-message-file__rename-close{align-items:center;background:0 0;border:none;border-radius:.5rem;color:inherit;cursor:pointer;display:inline-flex;justify-content:center;padding:.25rem}.quick-message-file__rename-close:disabled{cursor:not-allowed;opacity:.5}.quick-message-file__rename-cancel,.quick-message-file__rename-save{align-items:center;border:none;border-radius:9999px;cursor:pointer;display:inline-flex;justify-content:center;padding:.35rem .9rem;transition:opacity .2s}.quick-message-file__rename-cancel{background:0 0;border:1px solid #94a3b866;color:inherit}.quick-message-file__rename-save{background:var(--quick-modal-primary);color:#fff}.quick-message-file__rename-cancel:disabled,.quick-message-file__rename-save:disabled{cursor:not-allowed;opacity:.45}.quick-message-file__rename-input-row{align-items:center;border-radius:.75rem;display:flex;gap:.5rem;padding:.35rem .75rem;transition:border-color .2s,box-shadow .2s}.quick-message-file__rename-input-row:focus-within{border-color:var(--quick-modal-primary);box-shadow:0 0 0 1px var(--quick-modal-primary)}.quick-message-file__rename-input{background:0 0;border:none;color:inherit;flex:1;font-size:.875rem;padding:.35rem 0}.quick-message-file__rename-input:focus{outline:none}.quick-message-file__rename-extension{color:inherit;font-size:.875rem;font-weight:500;opacity:.75;white-space:nowrap}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-space-x-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:\"*\";inherits:false}@property --tw-brightness{syntax:\"*\";inherits:false}@property --tw-contrast{syntax:\"*\";inherits:false}@property --tw-grayscale{syntax:\"*\";inherits:false}@property --tw-hue-rotate{syntax:\"*\";inherits:false}@property --tw-invert{syntax:\"*\";inherits:false}@property --tw-opacity{syntax:\"*\";inherits:false}@property --tw-saturate{syntax:\"*\";inherits:false}@property --tw-sepia{syntax:\"*\";inherits:false}@property --tw-drop-shadow{syntax:\"*\";inherits:false}@property --tw-drop-shadow-color{syntax:\"*\";inherits:false}@property --tw-drop-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:\"*\";inherits:false}@media (forced-colors:active){[type=checkbox]:checked,[type=radio]:checked{appearance:auto}[type=checkbox]:indeterminate{appearance:auto}[type=checkbox]:checked,[type=checkbox]:indeterminate,[type=radio]:checked{appearance:auto}}@media (hover:hover){.z-button-outlined:hover,.z-button-primary:hover,.z-icon-button-outlined:hover,.z-icon-button-primary:hover,.z-icon-button-text:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.z-button-group-item-tab:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.z-button-group-item-tab-unselected:hover{background-color:var(--color-white)}.z-button-group-item-primary-unselected:hover{--tw-brightness:brightness(95%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.z-button-group-item-outlined-unselected:hover{background-color:#e028481a}@supports (color:color-mix(in lab,red,red)){.z-button-group-item-outlined-unselected:hover{background-color:color-mix(in oklab,var(--color-primary)10%,transparent);background-color:color-mix(in srgb,#e0284810%,transparent)}}.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}.hover\\:bg-background:hover{background-color:var(--color-background)}.hover\\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\\:bg-white:hover{background-color:var(--color-white)}.hover\\:text-gray-600:hover{color:var(--color-gray-600)}.hover\\:opacity-100:hover{opacity:1}.hover\\:brightness-110:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.hover\\:bg-primary\\/10:hover{background-color:#e028481a}@supports (color:color-mix(in lab,red,red)){.hover\\:bg-primary\\/10:hover{background-color:color-mix(in srgb,#e0284810%,transparent);background-color:color-mix(in oklab,var(--color-primary)10%,transparent)}}.hover\\:text-primary:hover{color:var(--color-primary)}.z-button-outlined:hover,.z-button-primary:hover,.z-icon-button-outlined:hover,.z-icon-button-primary:hover,.z-icon-button-text:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}@media screen and (min-width:0){.z-max-height{height:calc(100vh - 56px)}}@media screen and (min-width:600px){.z-max-height{height:calc(100vh - 64px)}}@media not all and (min-width:40rem){.max-sm\\:hidden{display:none}}@media (min-width:40rem){.sm\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.container{max-width:40rem}.sm\\:min-w-0{min-width:calc(var(--spacing)*0)}.sm\\:flex-row{flex-direction:row}}@media (min-width:48rem){.md\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.container{max-width:48rem}}@media (min-width:64rem){.lg\\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}";
10
-
11
- const QuickMessageFileComponent = /*@__PURE__*/ proxyCustomElement(class QuickMessageFileComponent extends H {
12
- constructor(registerHost) {
13
- super();
14
- if (registerHost !== false) {
15
- this.__registerHost();
16
- }
17
- this.filesChange = createEvent(this, "filesChange");
18
- this.sendFiles = createEvent(this, "sendFiles");
19
- }
20
- handleClose;
21
- value;
22
- isMaster = false;
23
- searchFile = '';
24
- files = [];
25
- isLoading = false;
26
- isLoadingMore = false;
27
- isUploading = false;
28
- isDeleting = false;
29
- totalFiles = 0;
30
- totalPages = 0;
31
- renameTargetId = null;
32
- renameName = '';
33
- renameExtension = '';
34
- isRenaming = false;
35
- openMenuId = null;
36
- allowedFileExtensions = ['pdf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt', 'csv', 'zip', 'rar', '7z'];
37
- pageSize = 15;
38
- localUploadPrefix = 'uploaded-file-';
39
- page = 1;
40
- currentSearch = '';
41
- fileInput;
42
- filesChange;
43
- sendFiles;
44
- pendingDeleteFileIds = [];
45
- // Memoization cache for filtered files
46
- cachedFilteredFiles = null;
47
- cachedSearchTerm = '';
48
- cachedFilesLength = 0;
49
- handleDocumentClick(event) {
50
- const target = event.target;
51
- if (target?.closest('[data-quick-message-file-menu-root]')) {
52
- return;
53
- }
54
- this.openMenuId = null;
55
- }
56
- componentWillLoad() {
57
- this.syncFilesFromProp(this.value);
58
- }
59
- async componentDidLoad() {
60
- await this.fetchFiles({ reset: true });
61
- }
62
- handleValueChange(newValue) {
63
- this.syncFilesFromProp(newValue);
64
- }
65
- syncFilesFromProp(value) {
66
- if (value === undefined || value === null) {
67
- this.setFiles([], false);
68
- return;
69
- }
70
- const parsed = this.parseFilesValue(value);
71
- this.setFiles(parsed, false);
72
- }
73
- parseFilesValue(value) {
74
- if (typeof value === 'string') {
75
- try {
76
- const deserialized = JSON.parse(value);
77
- return this.cloneFiles(deserialized);
78
- }
79
- catch (error) {
80
- console.warn('[quick-message-file] Failed to parse files value', error);
81
- return [];
82
- }
83
- }
84
- return this.cloneFiles(value);
85
- }
86
- cloneFiles(files) {
87
- return (files || []).map(file => ({
88
- ...file,
89
- isSelected: file.isSelected ?? false,
90
- }));
91
- }
92
- setFiles(next, shouldEmit = true) {
93
- this.files = next;
94
- if (shouldEmit) {
95
- const payload = this.cloneFiles(next);
96
- this.filesChange.emit(payload);
97
- }
98
- }
99
- isLocalUpload(file) {
100
- return file.id.startsWith(this.localUploadPrefix);
101
- }
102
- getRemoteFileCount() {
103
- return this.files.filter(file => !this.isLocalUpload(file)).length;
104
- }
105
- mergeFetchedFiles(fetched, reset) {
106
- const localUploads = this.files.filter(file => this.isLocalUpload(file));
107
- const selectionMap = new Map(this.files.map(file => [file.id, file.isSelected ?? false]));
108
- const normalizedFetched = fetched.map(file => ({
109
- ...file,
110
- isSelected: selectionMap.get(file.id) ?? file.isSelected ?? false,
111
- }));
112
- if (reset) {
113
- return [...localUploads, ...normalizedFetched];
114
- }
115
- const existingRemote = this.files.filter(file => !this.isLocalUpload(file));
116
- const remoteIndexMap = new Map();
117
- existingRemote.forEach((file, index) => {
118
- remoteIndexMap.set(file.id, index);
119
- });
120
- const nextRemote = [...existingRemote];
121
- normalizedFetched.forEach(file => {
122
- const existingIndex = remoteIndexMap.get(file.id);
123
- if (existingIndex !== undefined) {
124
- nextRemote[existingIndex] = file;
125
- }
126
- else {
127
- remoteIndexMap.set(file.id, nextRemote.length);
128
- nextRemote.push(file);
129
- }
130
- });
131
- return [...localUploads, ...nextRemote];
132
- }
133
- /**
134
- * Memoized file filtering - only recalculates when search term or files change
135
- * Performance: Reduces operations from 60fps to only when user types
136
- */
137
- filterFiles() {
138
- const search = this.searchFile.trim().toLowerCase();
139
- // Quick return for no search
140
- if (!search)
141
- return this.files;
142
- // Check if we can use cached results
143
- if (this.cachedFilteredFiles && search === this.cachedSearchTerm && this.files.length === this.cachedFilesLength) {
144
- return this.cachedFilteredFiles;
145
- }
146
- // Recalculate filtered results
147
- const filtered = this.files.filter(file => file.name.toLowerCase().includes(search));
148
- // Update cache
149
- this.cachedFilteredFiles = filtered;
150
- this.cachedSearchTerm = search;
151
- this.cachedFilesLength = this.files.length;
152
- return filtered;
153
- }
154
- splitFileName(name) {
155
- const lastDotIndex = name.lastIndexOf('.');
156
- if (lastDotIndex <= 0 || lastDotIndex === name.length - 1) {
157
- return { base: name, extension: '' };
158
- }
159
- return {
160
- base: name.slice(0, lastDotIndex),
161
- extension: name.slice(lastDotIndex),
162
- };
163
- }
164
- getRenameTarget() {
165
- if (!this.renameTargetId) {
166
- return undefined;
167
- }
168
- return this.files.find(file => file.id === this.renameTargetId);
169
- }
170
- openRenameModal(file, event) {
171
- event?.preventDefault();
172
- event?.stopPropagation();
173
- const { base, extension } = this.splitFileName(file.name);
174
- this.renameTargetId = file.id;
175
- this.renameName = base;
176
- this.renameExtension = extension;
177
- }
178
- closeRenameModal(force = false) {
179
- if (this.isRenaming && !force) {
180
- return;
181
- }
182
- this.renameTargetId = null;
183
- this.renameName = '';
184
- this.renameExtension = '';
185
- }
186
- toggleMenu(fileId, event) {
187
- event.preventDefault();
188
- event.stopPropagation();
189
- this.openMenuId = this.openMenuId === fileId ? null : fileId;
190
- }
191
- closeMenu() {
192
- this.openMenuId = null;
193
- }
194
- handleMenuRename(file, event) {
195
- event.preventDefault();
196
- event.stopPropagation();
197
- this.closeMenu();
198
- this.openRenameModal(file, event);
199
- }
200
- requestDeleteFile(file, event) {
201
- event.preventDefault();
202
- event.stopPropagation();
203
- if (this.isDeleting) {
204
- return;
205
- }
206
- this.pendingDeleteFileIds = [file.id];
207
- this.closeMenu();
208
- const t = useTranslation();
209
- openDialog({
210
- open: true,
211
- type: "WARNING" /* DIALOG_TYPE.WARNING */,
212
- title: t('quick_message.delete_item_confirmation'),
213
- buttonName: t('confirm'),
214
- cancelButtonName: t('cancel'),
215
- onSubmitDialog: () => {
216
- void this.confirmDeleteSelectedFiles();
217
- },
218
- onCloseDialog: () => {
219
- this.pendingDeleteFileIds = [];
220
- },
221
- });
222
- }
223
- handleRenameInput(event) {
224
- const value = event.target.value;
225
- if (this.renameExtension && value.toLowerCase().endsWith(this.renameExtension.toLowerCase())) {
226
- this.renameName = value.slice(0, -this.renameExtension.length);
227
- return;
228
- }
229
- this.renameName = value;
230
- }
231
- async handleRenameSubmit(event) {
232
- event.preventDefault();
233
- const target = this.getRenameTarget();
234
- if (!target) {
235
- return;
236
- }
237
- const trimmedBase = this.renameName.trim();
238
- if (!trimmedBase) {
239
- return;
240
- }
241
- const nextName = this.renameExtension ? `${trimmedBase}${this.renameExtension}` : trimmedBase;
242
- if (nextName === target.name) {
243
- this.closeRenameModal(true);
244
- return;
245
- }
246
- if (this.isLocalUpload(target)) {
247
- this.setFiles(this.files.map(file => file.id === target.id
248
- ? {
249
- ...file,
250
- name: nextName,
251
- }
252
- : file));
253
- this.closeRenameModal(true);
254
- return;
255
- }
256
- this.isRenaming = true;
257
- try {
258
- const updated = await updateQuickMessageLibraryFileName({ id: target.id, name: nextName });
259
- this.setFiles(this.files.map(file => file.id === target.id
260
- ? {
261
- ...file,
262
- name: updated.name,
263
- last_updated_at: updated.last_updated_at,
264
- last_updated_by: updated.last_updated_by,
265
- }
266
- : file));
267
- this.closeRenameModal(true);
268
- }
269
- catch (error) {
270
- handleError(error, '[quick-message-file] Failed to rename file');
271
- }
272
- finally {
273
- this.isRenaming = false;
274
- }
275
- }
276
- toggleFileSelection(id) {
277
- this.setFiles(this.files.map(file => (file.id === id ? { ...file, isSelected: !file.isSelected } : file)));
278
- }
279
- toggleSelectAllFiles() {
280
- const isAllSelected = this.files.length > 0 && this.files.every(file => file.isSelected);
281
- this.setFiles(this.files.map(file => ({ ...file, isSelected: !isAllSelected })));
282
- }
283
- triggerFileUpload() {
284
- this.fileInput?.click();
285
- }
286
- handleFileSelection(event) {
287
- const input = event.target;
288
- if (!input.files || input.files.length === 0)
289
- return;
290
- const validFiles = Array.from(input.files).filter(file => {
291
- const extension = file.name.split('.').pop()?.toLowerCase();
292
- return extension && this.allowedFileExtensions.includes(extension);
293
- });
294
- input.value = '';
295
- if (validFiles.length === 0) {
296
- return;
297
- }
298
- void this.uploadAndCreateFiles(validFiles);
299
- }
300
- async uploadAndCreateFiles(files) {
301
- if (files.length === 0) {
302
- return;
303
- }
304
- this.isUploading = true;
305
- try {
306
- const payload = [];
307
- for (const file of files) {
308
- const uploadUrl = await uploadFile({
309
- file,
310
- filename: file.name.replaceAll(' ', '-'),
311
- folder: 'zignal/quick-message-library/file',
312
- });
313
- if (!uploadUrl) {
314
- continue;
315
- }
316
- payload.push({
317
- file_type: 'file',
318
- name: file.name,
319
- url: uploadUrl,
320
- size: file.size,
321
- });
322
- }
323
- if (payload.length > 0) {
324
- await createQuickMessageLibraryFiles({ files: payload });
325
- await this.fetchFiles({ reset: true });
326
- }
327
- }
328
- catch (error) {
329
- handleError(error, '[quick-message-file] Failed to upload files');
330
- }
331
- finally {
332
- this.isUploading = false;
333
- }
334
- }
335
- renderFileMeta(size, createdAt, t) {
336
- const sizeKb = Math.round(size / 1024);
337
- return `${sizeKb} KB · ${t('quick_message.created_at').replace('{date}', dayjs(createdAt).tz().format('DD/MM/YYYY HH:mm'))}`;
338
- }
339
- handleSendFiles() {
340
- const selected = this.files.filter(file => file.isSelected);
341
- if (selected.length === 0)
342
- return;
343
- const payload = this.cloneFiles(selected);
344
- this.sendFiles.emit(payload);
345
- this.handleClose?.();
346
- }
347
- requestDeleteSelectedFiles() {
348
- if (this.isDeleting) {
349
- return;
350
- }
351
- const selectedIds = this.files.filter(file => file.isSelected).map(file => file.id);
352
- if (selectedIds.length === 0) {
353
- return;
354
- }
355
- this.pendingDeleteFileIds = selectedIds;
356
- const t = useTranslation();
357
- openDialog({
358
- open: true,
359
- type: "WARNING" /* DIALOG_TYPE.WARNING */,
360
- title: t('quick_message.delete_selected_items_confirmation'),
361
- buttonName: t('confirm'),
362
- cancelButtonName: t('cancel'),
363
- onSubmitDialog: () => {
364
- void this.confirmDeleteSelectedFiles();
365
- },
366
- onCloseDialog: () => {
367
- this.pendingDeleteFileIds = [];
368
- },
369
- });
370
- }
371
- async confirmDeleteSelectedFiles() {
372
- if (this.isDeleting) {
373
- return;
374
- }
375
- const pendingIds = [...this.pendingDeleteFileIds];
376
- this.pendingDeleteFileIds = [];
377
- if (pendingIds.length === 0) {
378
- return;
379
- }
380
- const pendingSet = new Set(pendingIds);
381
- const remoteIds = this.files.filter(file => pendingSet.has(file.id) && !this.isLocalUpload(file)).map(file => file.id);
382
- this.isDeleting = true;
383
- try {
384
- if (remoteIds.length > 0) {
385
- await deleteQuickMessageLibraryFile({ ids: remoteIds });
386
- }
387
- const remaining = this.files.filter(file => !pendingSet.has(file.id));
388
- this.setFiles(remaining);
389
- if (remoteIds.length > 0) {
390
- this.totalFiles = Math.max(0, this.totalFiles - remoteIds.length);
391
- await this.fetchFiles({ reset: true });
392
- }
393
- }
394
- catch (error) {
395
- handleError(error, '[quick-message-file] Failed to delete files');
396
- }
397
- finally {
398
- this.isDeleting = false;
399
- }
400
- }
401
- async fetchFiles({ search, reset = true } = {}) {
402
- const businessId = configStore.get('businessId');
403
- const shopId = configStore.get('shopId');
404
- if (!businessId || !shopId) {
405
- return;
406
- }
407
- if (reset ? this.isLoading : this.isLoadingMore) {
408
- return;
409
- }
410
- const searchSource = search !== undefined ? search : reset ? this.searchFile : this.currentSearch;
411
- const trimmedSearch = searchSource?.trim() ?? '';
412
- const nextPage = reset ? 1 : this.page + 1;
413
- if (search !== undefined) {
414
- this.searchFile = searchSource ?? '';
415
- }
416
- if (reset) {
417
- this.isLoading = true;
418
- }
419
- else {
420
- this.isLoadingMore = true;
421
- }
422
- try {
423
- const response = await getQuickMessageLibraryFiles({
424
- fileType: 'file',
425
- search: trimmedSearch ? trimmedSearch : undefined,
426
- page: nextPage,
427
- limit: this.pageSize,
428
- });
429
- const fetched = this.cloneFiles(response.files || []);
430
- const merged = this.mergeFetchedFiles(fetched, reset);
431
- this.page = response.page > 0 ? response.page : nextPage;
432
- const resolvedTotalPages = response.total_pages > 0 ? response.total_pages : fetched.length > 0 ? 1 : 0;
433
- this.totalPages = resolvedTotalPages;
434
- this.totalFiles = typeof response.total === 'number' ? response.total : fetched.length;
435
- this.currentSearch = trimmedSearch;
436
- this.setFiles(merged);
437
- }
438
- catch (error) {
439
- console.error('[quick-message-file] Failed to fetch files', error);
440
- }
441
- finally {
442
- if (reset) {
443
- this.isLoading = false;
444
- }
445
- else {
446
- this.isLoadingMore = false;
447
- }
448
- }
449
- }
450
- async loadMoreFiles() {
451
- if (this.isLoading || this.isLoadingMore) {
452
- return;
453
- }
454
- if (this.totalPages === 0 || this.page >= this.totalPages) {
455
- return;
456
- }
457
- if (this.totalFiles > 0) {
458
- const remoteCount = this.getRemoteFileCount();
459
- if (remoteCount >= this.totalFiles) {
460
- return;
461
- }
462
- }
463
- await this.fetchFiles({ reset: false });
464
- }
465
- handleScroll(event) {
466
- const target = event.target;
467
- if (!target) {
468
- return;
469
- }
470
- const remaining = target.scrollHeight - target.scrollTop - target.clientHeight;
471
- if (remaining < 160) {
472
- void this.loadMoreFiles();
473
- }
474
- }
475
- handleSearchInput(event) {
476
- const value = event.target.value;
477
- this.searchFile = value;
478
- if (!value.trim() && this.currentSearch && !this.isLoading && !this.isLoadingMore) {
479
- void this.fetchFiles({ search: '', reset: true });
480
- }
481
- }
482
- async handleSearchSubmit(event) {
483
- event?.preventDefault();
484
- await this.fetchFiles({ search: this.searchFile, reset: true });
485
- }
486
- clearSearch() {
487
- if (!this.searchFile) {
488
- return;
489
- }
490
- this.searchFile = '';
491
- if (this.currentSearch) {
492
- void this.fetchFiles({ search: '', reset: true });
493
- }
494
- }
495
- renderRenameModal(labels) {
496
- const target = this.getRenameTarget();
497
- if (!this.renameTargetId || !target) {
498
- return null;
499
- }
500
- const trimmedBase = this.renameName.trim();
501
- const nextName = this.renameExtension ? `${trimmedBase}${this.renameExtension}` : trimmedBase;
502
- const isSaveDisabled = this.isRenaming || trimmedBase.length === 0 || nextName === target.name;
503
- const inputId = `quick-message-file-rename-${target.id}`;
504
- return (h("div", { class: "quick-message-file__rename-overlay", role: "dialog", "aria-modal": "true", "aria-labelledby": "quick-message-file-rename-title", onClick: () => this.closeRenameModal() }, h("div", { class: "quick-message-file__rename-modal bg-background text-surface", onClick: event => event.stopPropagation() }, h("div", { class: "quick-message-file__rename-header" }, h("h3", { id: "quick-message-file-rename-title", class: "text-base font-semibold" }, labels.renameLabel), h("button", { type: "button", class: "quick-message-file__rename-close", onClick: () => this.closeRenameModal(), "aria-label": labels.closeLabel, disabled: this.isRenaming }, h(Icon, { name: "X" }))), h("form", { class: "flex flex-col gap-4", onSubmit: event => this.handleRenameSubmit(event) }, h("label", { class: "flex flex-col gap-2 text-sm", htmlFor: inputId }, h("span", { class: "font-medium" }, labels.nameLabel), h("div", { class: `quick-message-file__rename-input-row border border-divider bg-background` }, h("input", { id: inputId, type: "text", class: "quick-message-file__rename-input text-surface", value: this.renameName, onInput: event => this.handleRenameInput(event) }), this.renameExtension && h("span", { class: "quick-message-file__rename-extension" }, this.renameExtension))), h("div", { class: "flex justify-end gap-2 text-sm" }, h("button", { type: "button", class: "quick-message-file__rename-cancel", onClick: () => this.closeRenameModal(), disabled: this.isRenaming }, labels.cancelLabel), h("button", { type: "submit", class: "quick-message-file__rename-save", disabled: isSaveDisabled }, this.isRenaming ? h(Icon, { name: "Loader2", addClass: "size-4 animate-spin" }) : labels.saveLabel))))));
505
- }
506
- disconnectedCallback() {
507
- // this.objectUrls.forEach((url) => URL.revokeObjectURL(url));
508
- // this.objectUrls = [];
509
- }
510
- render() {
511
- const theme = configStore.get('theme');
512
- const t = useTranslation();
513
- const filteredFiles = this.filterFiles();
514
- const isInitialLoading = this.isLoading && this.files.length === 0;
515
- const hasSelection = this.files.some(file => file.isSelected);
516
- const renameLabel = t('quick_message.rename_item');
517
- const deleteLabel = t('remove');
518
- const nameLabel = t('quick_message.name');
519
- const saveLabel = t('save');
520
- const cancelLabel = t('cancel');
521
- const closeLabel = t('close');
522
- return (h(Host, { key: 'fbbdadba2f3e0c1d3a448aca4a553bf76e331876', class: "flex min-h-0 flex-1 flex-col gap-4", "data-theme": theme }, h("form", { key: '736bca1d8760d45e39b465ec551575edff2905c5', class: "w-full", onSubmit: event => this.handleSearchSubmit(event) }, h("div", { key: 'c2bf7233ba4a4c61af500d1fda5a4b58f427c93c', class: "relative" }, h("input", { key: '1383c92c018a3f39b586196427a76b404daed4ab', type: "text", class: "w-full border border-divider text-sm px-4 py-2 pr-9 rounded-lg ring-primary focus:outline-none focus:border-primary bg-background text-surface", placeholder: t('quick_message.search_file'), value: this.searchFile, onInput: event => this.handleSearchInput(event) }), this.searchFile && (h("button", { key: '69942b517ca4dead0ceddd33ef18996458774126', type: "button", class: "absolute right-2 top-1/2 -translate-y-1/2 text-xs text-gray-400 hover:text-gray-600", onClick: () => this.clearSearch(), "aria-label": t('clear') || 'Clear' }, h(Icon, { key: 'ba847d94aeac92263eb6f1a67a5dd6f524f8ac12', name: "X" }))))), h("div", { key: '355aba2c25d8ec835087d6da03b86a2edd5d9cc1', class: "flex items-center justify-between" }, this.files.length > 0 ? (h("label", { class: "inline-flex items-center gap-2 text-sm" }, h("input", { type: "checkbox", checked: this.files.length > 0 && this.files.every(file => file.isSelected), onChange: () => this.toggleSelectAllFiles() }), h("span", null, t('select_all')))) : (h("span", null)), h("div", { key: '5e79504385980f9090acb8ecc919a717d44d5dbb', class: "flex items-center gap-2" }, h("input", { key: '237e4c88cf6d173b5a530b8296d4cfaf202ba1a1', class: "hidden", type: "file", multiple: true, accept: this.allowedFileExtensions.map(extension => `.${extension}`).join(','), ref: el => (this.fileInput = el), onChange: event => this.handleFileSelection(event) }), h("button", { key: 'be5d46671dff2c8ed2678930b96fd01d33b23ad8', type: "button", class: "quick-message-file__action-button inline-flex h-9 w-9 items-center justify-center rounded-lg cursor-pointer", onClick: () => !this.isUploading && this.triggerFileUpload(), "aria-label": t('quick_message.add_file'), disabled: this.isUploading }, this.isUploading ? h(Icon, { name: "Loader2", addClass: "size-4 animate-spin" }) : h(Icon, { name: "Plus" })))), this.isUploading && (h("div", { key: 'f181e6362ae9467ffa9a28db03144d5813cf7414', class: "flex items-center gap-2 text-xs text-primary" }, h(Icon, { key: '3fb1992dfd4a6ba7781943da6782011809edb5a7', name: "Loader2", addClass: "size-4 animate-spin" }), h("span", { key: 'bb2581127baac20c13b71f382da7e2e81d0fa441' }, t('quick_message.uploading') || 'Uploading...'))), isInitialLoading ? (h("div", { class: `flex flex-1 items-center justify-center text-sm text-theme-gray` }, "Loading...")) : filteredFiles.length === 0 ? (h("div", { class: `flex flex-1 items-center justify-center text-sm text-theme-gray` }, t('quick_message.file_empty'))) : (h("div", { class: "flex flex-1 flex-col gap-2.5 overflow-y-auto", onScroll: event => this.handleScroll(event) }, filteredFiles.map(file => (h("label", { class: "flex items-center gap-3 rounded-xl px-3 py-2.5", key: file.id }, h("input", { type: "checkbox", checked: !!file.isSelected, onChange: () => this.toggleFileSelection(file.id) }), h("div", { class: "quick-message-file__icon flex h-10 w-10 items-center justify-center rounded-xl" }, h(Icon, { name: "File" })), h("div", { class: "flex flex-1 items-center gap-3 min-w-0" }, h("div", { class: "flex min-w-0 flex-col gap-1" }, h("div", { class: "text-sm font-semibold line-clamp-2 break-words" }, file.name), h("div", { class: `text-xs text-theme-gray` }, this.renderFileMeta(file.size, file.created_at, t))), h("div", { class: "quick-message-file__menu-wrapper", "data-quick-message-file-menu-root": "" }, h("button", { type: "button", class: "quick-message-file__list-more-button", onClick: event => this.toggleMenu(file.id, event), "aria-haspopup": "menu", "aria-expanded": this.openMenuId === file.id ? 'true' : 'false', "aria-label": renameLabel, "data-quick-message-file-menu-root": "" }, h(Icon, { name: "MoreVertical", addClass: "size-4" })), this.openMenuId === file.id && (h("div", { class: "quick-message-file__menu bg-background text-surface", role: "menu", "data-quick-message-file-menu-root": "" }, h("button", { type: "button", class: "quick-message-file__menu-item", role: "menuitem", onClick: event => this.handleMenuRename(file, event) }, renameLabel), h("button", { type: "button", class: "quick-message-file__menu-item quick-message-file__menu-item--danger", role: "menuitem", onClick: event => this.requestDeleteFile(file, event) }, deleteLabel)))))))), this.isLoadingMore && h("div", { class: `py-3 text-center text-xs text-theme-gray` }, "Loading..."))), h("div", { key: '06406bafa7fb6c27100f73093ba8f63f9170c48b', class: `mt-auto flex items-center gap-2 pt-2` }, hasSelection && (h("button", { key: '9edc6a12baca4e62b5cc4d8236d04299251a4bc0', type: "button", class: `quick-message-file__action-button inline-flex h-9 w-9 items-center justify-center rounded-lg cursor-pointer disabled:cursor-not-allowed disabled:opacity-40`, onClick: () => this.requestDeleteSelectedFiles(), "aria-label": t('remove'), disabled: this.isDeleting }, this.isDeleting ? h(Icon, { name: "Loader2", addClass: "size-4 animate-spin" }) : h(Icon, { name: "Trash2" }))), !this.isMaster && (h("button", { key: 'a67b420af19529d2e219388d16a803670407c4dc', type: "button", disabled: !hasSelection, class: `quick-message-file__send ml-auto inline-flex items-center justify-center rounded-full px-4 py-2 text-xs font-semibold bg-primary text-white disabled:cursor-not-allowed disabled:opacity-40 cursor-pointer`, onClick: () => this.handleSendFiles() }, t('quick_message.send_files')))), this.renderRenameModal({ renameLabel, nameLabel, saveLabel, cancelLabel, closeLabel })));
523
- }
524
- static get watchers() { return {
525
- "value": ["handleValueChange"]
526
- }; }
527
- static get style() { return quickMessageFileCss; }
528
- }, [768, "quick-message-file", {
529
- "handleClose": [16],
530
- "value": [1],
531
- "isMaster": [4, "is-master"],
532
- "searchFile": [32],
533
- "files": [32],
534
- "isLoading": [32],
535
- "isLoadingMore": [32],
536
- "isUploading": [32],
537
- "isDeleting": [32],
538
- "totalFiles": [32],
539
- "totalPages": [32],
540
- "renameTargetId": [32],
541
- "renameName": [32],
542
- "renameExtension": [32],
543
- "isRenaming": [32],
544
- "openMenuId": [32]
545
- }, [[4, "click", "handleDocumentClick"]], {
546
- "value": ["handleValueChange"]
547
- }]);
548
- function defineCustomElement() {
549
- if (typeof customElements === "undefined") {
550
- return;
551
- }
552
- const components = ["quick-message-file"];
553
- components.forEach(tagName => { switch (tagName) {
554
- case "quick-message-file":
555
- if (!customElements.get(tagName)) {
556
- customElements.define(tagName, QuickMessageFileComponent);
557
- }
558
- break;
559
- } });
560
- }
561
- defineCustomElement();
562
-
563
- export { QuickMessageFileComponent as Q, defineCustomElement as d };