igniteui-webcomponents 6.0.1 → 6.1.1-alpha.0

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 (497) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/components/accordion/accordion.js +3 -3
  3. package/components/accordion/accordion.js.map +1 -1
  4. package/components/avatar/avatar.d.ts +8 -10
  5. package/components/avatar/avatar.js +26 -26
  6. package/components/avatar/avatar.js.map +1 -1
  7. package/components/badge/badge.d.ts +3 -4
  8. package/components/badge/badge.js +13 -13
  9. package/components/badge/badge.js.map +1 -1
  10. package/components/banner/banner.d.ts +2 -3
  11. package/components/banner/banner.js +8 -4
  12. package/components/banner/banner.js.map +1 -1
  13. package/components/button/button-base.d.ts +8 -16
  14. package/components/button/button-base.js +27 -42
  15. package/components/button/button-base.js.map +1 -1
  16. package/components/button/button.js.map +1 -1
  17. package/components/button/icon-button.d.ts +2 -2
  18. package/components/button/icon-button.js +1 -1
  19. package/components/button/icon-button.js.map +1 -1
  20. package/components/button/themes/button/light/button.shared.css.js +1 -1
  21. package/components/button/themes/button/light/button.shared.css.js.map +1 -1
  22. package/components/button-group/button-group.js +2 -2
  23. package/components/button-group/button-group.js.map +1 -1
  24. package/components/button-group/toggle-button.d.ts +2 -8
  25. package/components/button-group/toggle-button.js +8 -12
  26. package/components/button-group/toggle-button.js.map +1 -1
  27. package/components/calendar/calendar.d.ts +1 -1
  28. package/components/calendar/calendar.js +13 -10
  29. package/components/calendar/calendar.js.map +1 -1
  30. package/components/calendar/days-view/days-view.d.ts +1 -1
  31. package/components/calendar/days-view/days-view.js +10 -11
  32. package/components/calendar/days-view/days-view.js.map +1 -1
  33. package/components/calendar/helpers.d.ts +12 -1
  34. package/components/calendar/helpers.js +35 -10
  35. package/components/calendar/helpers.js.map +1 -1
  36. package/components/calendar/model.d.ts +15 -1
  37. package/components/calendar/model.js +26 -5
  38. package/components/calendar/model.js.map +1 -1
  39. package/components/calendar/months-view/months-view.d.ts +1 -1
  40. package/components/calendar/months-view/months-view.js +10 -10
  41. package/components/calendar/months-view/months-view.js.map +1 -1
  42. package/components/calendar/years-view/years-view.d.ts +1 -1
  43. package/components/calendar/years-view/years-view.js +10 -10
  44. package/components/calendar/years-view/years-view.js.map +1 -1
  45. package/components/card/card.actions.js +1 -1
  46. package/components/card/card.actions.js.map +1 -1
  47. package/components/card/card.content.js +1 -1
  48. package/components/card/card.content.js.map +1 -1
  49. package/components/card/card.header.js +1 -1
  50. package/components/card/card.header.js.map +1 -1
  51. package/components/card/card.js +1 -1
  52. package/components/card/card.js.map +1 -1
  53. package/components/card/card.media.js +1 -1
  54. package/components/card/card.media.js.map +1 -1
  55. package/components/carousel/carousel-indicator-container.d.ts +2 -2
  56. package/components/carousel/carousel-indicator-container.js +9 -10
  57. package/components/carousel/carousel-indicator-container.js.map +1 -1
  58. package/components/carousel/carousel-indicator.d.ts +5 -7
  59. package/components/carousel/carousel-indicator.js +19 -19
  60. package/components/carousel/carousel-indicator.js.map +1 -1
  61. package/components/carousel/carousel-slide.d.ts +2 -3
  62. package/components/carousel/carousel-slide.js +17 -11
  63. package/components/carousel/carousel-slide.js.map +1 -1
  64. package/components/carousel/carousel.d.ts +6 -8
  65. package/components/carousel/carousel.js +36 -28
  66. package/components/carousel/carousel.js.map +1 -1
  67. package/components/chat/chat-input.d.ts +41 -0
  68. package/components/chat/chat-input.js +254 -0
  69. package/components/chat/chat-input.js.map +1 -0
  70. package/components/chat/chat-message-list.d.ts +24 -0
  71. package/components/chat/chat-message-list.js +88 -0
  72. package/components/chat/chat-message-list.js.map +1 -0
  73. package/components/chat/chat-message.d.ts +21 -0
  74. package/components/chat/chat-message.js +52 -0
  75. package/components/chat/chat-message.js.map +1 -0
  76. package/components/chat/chat.d.ts +41 -0
  77. package/components/chat/chat.js +98 -0
  78. package/components/chat/chat.js.map +1 -0
  79. package/components/chat/markdown-util.d.ts +2 -0
  80. package/components/chat/markdown-util.js +22 -0
  81. package/components/chat/markdown-util.js.map +1 -0
  82. package/components/chat/message-attachments.d.ts +28 -0
  83. package/components/chat/message-attachments.js +168 -0
  84. package/components/chat/message-attachments.js.map +1 -0
  85. package/components/chat/themes/chat.base.css.d.ts +1 -0
  86. package/components/chat/themes/chat.base.css.js +3 -0
  87. package/components/chat/themes/chat.base.css.js.map +1 -0
  88. package/components/chat/themes/input.base.css.d.ts +1 -0
  89. package/components/chat/themes/input.base.css.js +3 -0
  90. package/components/chat/themes/input.base.css.js.map +1 -0
  91. package/components/chat/themes/message-attachments.base.css.d.ts +1 -0
  92. package/components/chat/themes/message-attachments.base.css.js +3 -0
  93. package/components/chat/themes/message-attachments.base.css.js.map +1 -0
  94. package/components/chat/themes/message-list.base.css.d.ts +1 -0
  95. package/components/chat/themes/message-list.base.css.js +3 -0
  96. package/components/chat/themes/message-list.base.css.js.map +1 -0
  97. package/components/chat/themes/message.base.css.d.ts +1 -0
  98. package/components/chat/themes/message.base.css.js +3 -0
  99. package/components/chat/themes/message.base.css.js.map +1 -0
  100. package/components/chat/types.d.ts +46 -0
  101. package/components/chat/types.js +8 -0
  102. package/components/chat/types.js.map +1 -0
  103. package/components/checkbox/checkbox-base.d.ts +8 -10
  104. package/components/checkbox/checkbox-base.js +20 -23
  105. package/components/checkbox/checkbox-base.js.map +1 -1
  106. package/components/checkbox/checkbox.d.ts +3 -3
  107. package/components/checkbox/checkbox.js +19 -20
  108. package/components/checkbox/checkbox.js.map +1 -1
  109. package/components/checkbox/switch.d.ts +2 -2
  110. package/components/checkbox/switch.js +16 -20
  111. package/components/checkbox/switch.js.map +1 -1
  112. package/components/checkbox/validators.js.map +1 -1
  113. package/components/chip/chip.js +4 -4
  114. package/components/chip/chip.js.map +1 -1
  115. package/components/combo/combo-header.js +1 -1
  116. package/components/combo/combo-header.js.map +1 -1
  117. package/components/combo/combo-item.d.ts +4 -6
  118. package/components/combo/combo-item.js +20 -18
  119. package/components/combo/combo-item.js.map +1 -1
  120. package/components/combo/combo.d.ts +3 -3
  121. package/components/combo/combo.js +25 -24
  122. package/components/combo/combo.js.map +1 -1
  123. package/components/combo/themes/combo.base.css.js +1 -1
  124. package/components/combo/themes/combo.base.css.js.map +1 -1
  125. package/components/combo/themes/shared/combo.fluent.css.js +1 -1
  126. package/components/combo/themes/shared/combo.fluent.css.js.map +1 -1
  127. package/components/common/abort-handler.d.ts +39 -0
  128. package/components/common/abort-handler.js +19 -0
  129. package/components/common/abort-handler.js.map +1 -0
  130. package/components/common/context.d.ts +5 -1
  131. package/components/common/context.js +2 -1
  132. package/components/common/context.js.map +1 -1
  133. package/components/common/controllers/drag.d.ts +3 -2
  134. package/components/common/controllers/drag.js +7 -6
  135. package/components/common/controllers/drag.js.map +1 -1
  136. package/components/common/controllers/focus-ring.d.ts +22 -11
  137. package/components/common/controllers/focus-ring.js +17 -14
  138. package/components/common/controllers/focus-ring.js.map +1 -1
  139. package/components/common/controllers/gestures.d.ts +6 -2
  140. package/components/common/controllers/gestures.js +15 -11
  141. package/components/common/controllers/gestures.js.map +1 -1
  142. package/components/common/controllers/internals.d.ts +33 -0
  143. package/components/common/controllers/internals.js +25 -0
  144. package/components/common/controllers/internals.js.map +1 -0
  145. package/components/common/controllers/key-bindings.d.ts +41 -33
  146. package/components/common/controllers/key-bindings.js +85 -71
  147. package/components/common/controllers/key-bindings.js.map +1 -1
  148. package/components/common/controllers/mutation-observer.d.ts +25 -15
  149. package/components/common/controllers/mutation-observer.js +23 -12
  150. package/components/common/controllers/mutation-observer.js.map +1 -1
  151. package/components/common/controllers/resize-observer.js.map +1 -1
  152. package/components/common/controllers/root-click.d.ts +58 -13
  153. package/components/common/controllers/root-click.js +47 -35
  154. package/components/common/controllers/root-click.js.map +1 -1
  155. package/components/common/decorators/shadow-options.d.ts +10 -0
  156. package/components/common/decorators/shadow-options.js +10 -0
  157. package/components/common/decorators/shadow-options.js.map +1 -0
  158. package/components/common/definitions/defineAllComponents.js +16 -12
  159. package/components/common/definitions/defineAllComponents.js.map +1 -1
  160. package/components/common/i18n/date-range-picker.resources.d.ts +11 -0
  161. package/components/common/i18n/date-range-picker.resources.js +12 -0
  162. package/components/common/i18n/date-range-picker.resources.js.map +1 -0
  163. package/components/common/mixins/alert.d.ts +1 -2
  164. package/components/common/mixins/alert.js +13 -9
  165. package/components/common/mixins/alert.js.map +1 -1
  166. package/components/common/mixins/combo-box.d.ts +2 -1
  167. package/components/common/mixins/combo-box.js +8 -4
  168. package/components/common/mixins/combo-box.js.map +1 -1
  169. package/components/common/mixins/forms/associated.js +2 -2
  170. package/components/common/mixins/forms/associated.js.map +1 -1
  171. package/components/common/mixins/forms/form-value.d.ts +15 -1
  172. package/components/common/mixins/forms/form-value.js +25 -4
  173. package/components/common/mixins/forms/form-value.js.map +1 -1
  174. package/components/common/mixins/option.d.ts +3 -3
  175. package/components/common/mixins/option.js +13 -11
  176. package/components/common/mixins/option.js.map +1 -1
  177. package/components/common/part-map.d.ts +17 -0
  178. package/components/common/part-map.js +46 -0
  179. package/components/common/part-map.js.map +1 -0
  180. package/components/common/util.d.ts +14 -6
  181. package/components/common/util.js +26 -23
  182. package/components/common/util.js.map +1 -1
  183. package/components/common/validators.js +3 -7
  184. package/components/common/validators.js.map +1 -1
  185. package/components/date-picker/date-picker.d.ts +4 -9
  186. package/components/date-picker/date-picker.js +24 -24
  187. package/components/date-picker/date-picker.js.map +1 -1
  188. package/components/date-picker/themes/dark/date-picker.bootstrap.css.js +1 -1
  189. package/components/date-picker/themes/dark/date-picker.bootstrap.css.js.map +1 -1
  190. package/components/date-picker/themes/dark/date-picker.fluent.css.js +1 -1
  191. package/components/date-picker/themes/dark/date-picker.fluent.css.js.map +1 -1
  192. package/components/date-picker/themes/dark/date-picker.indigo.css.js +1 -1
  193. package/components/date-picker/themes/dark/date-picker.indigo.css.js.map +1 -1
  194. package/components/date-picker/themes/dark/date-picker.material.css.js +1 -1
  195. package/components/date-picker/themes/dark/date-picker.material.css.js.map +1 -1
  196. package/components/date-picker/themes/light/date-picker.bootstrap.css.js +1 -1
  197. package/components/date-picker/themes/light/date-picker.bootstrap.css.js.map +1 -1
  198. package/components/date-picker/themes/light/date-picker.fluent.css.js +1 -1
  199. package/components/date-picker/themes/light/date-picker.fluent.css.js.map +1 -1
  200. package/components/date-picker/themes/light/date-picker.indigo.css.js +1 -1
  201. package/components/date-picker/themes/light/date-picker.indigo.css.js.map +1 -1
  202. package/components/date-picker/themes/light/date-picker.material.css.js +1 -1
  203. package/components/date-picker/themes/light/date-picker.material.css.js.map +1 -1
  204. package/components/date-picker/themes/shared/date-picker.bootstrap.css.js +1 -1
  205. package/components/date-picker/themes/shared/date-picker.bootstrap.css.js.map +1 -1
  206. package/components/date-picker/themes/shared/date-picker.common.css.js +1 -1
  207. package/components/date-picker/themes/shared/date-picker.common.css.js.map +1 -1
  208. package/components/date-picker/themes/shared/date-picker.fluent.css.js +1 -1
  209. package/components/date-picker/themes/shared/date-picker.fluent.css.js.map +1 -1
  210. package/components/date-picker/themes/shared/date-picker.indigo.css.js +1 -1
  211. package/components/date-picker/themes/shared/date-picker.indigo.css.js.map +1 -1
  212. package/components/date-picker/themes/shared/date-picker.material.css.d.ts +1 -0
  213. package/components/date-picker/themes/shared/date-picker.material.css.js +3 -0
  214. package/components/date-picker/themes/shared/date-picker.material.css.js.map +1 -0
  215. package/components/date-picker/themes/themes.js +3 -2
  216. package/components/date-picker/themes/themes.js.map +1 -1
  217. package/components/date-picker/validators.js.map +1 -1
  218. package/components/date-range-picker/date-range-picker.base.css.d.ts +1 -0
  219. package/components/date-range-picker/date-range-picker.base.css.js +3 -0
  220. package/components/date-range-picker/date-range-picker.base.css.js.map +1 -0
  221. package/components/date-range-picker/date-range-picker.d.ts +360 -0
  222. package/components/date-range-picker/date-range-picker.js +811 -0
  223. package/components/date-range-picker/date-range-picker.js.map +1 -0
  224. package/components/date-range-picker/predefined-ranges-area.base.css.d.ts +1 -0
  225. package/components/date-range-picker/predefined-ranges-area.base.css.js +3 -0
  226. package/components/date-range-picker/predefined-ranges-area.base.css.js.map +1 -0
  227. package/components/date-range-picker/predefined-ranges-area.d.ts +36 -0
  228. package/components/date-range-picker/predefined-ranges-area.js +115 -0
  229. package/components/date-range-picker/predefined-ranges-area.js.map +1 -0
  230. package/components/date-range-picker/themes/dark/date-range-picker.bootstrap.css.d.ts +1 -0
  231. package/components/date-range-picker/themes/dark/date-range-picker.bootstrap.css.js +3 -0
  232. package/components/date-range-picker/themes/dark/date-range-picker.bootstrap.css.js.map +1 -0
  233. package/components/date-range-picker/themes/dark/date-range-picker.fluent.css.d.ts +1 -0
  234. package/components/date-range-picker/themes/dark/date-range-picker.fluent.css.js +3 -0
  235. package/components/date-range-picker/themes/dark/date-range-picker.fluent.css.js.map +1 -0
  236. package/components/date-range-picker/themes/dark/date-range-picker.indigo.css.d.ts +1 -0
  237. package/components/date-range-picker/themes/dark/date-range-picker.indigo.css.js +3 -0
  238. package/components/date-range-picker/themes/dark/date-range-picker.indigo.css.js.map +1 -0
  239. package/components/date-range-picker/themes/dark/date-range-picker.material.css.d.ts +1 -0
  240. package/components/date-range-picker/themes/dark/date-range-picker.material.css.js +3 -0
  241. package/components/date-range-picker/themes/dark/date-range-picker.material.css.js.map +1 -0
  242. package/components/date-range-picker/themes/light/date-range-picker.bootstrap.css.d.ts +1 -0
  243. package/components/date-range-picker/themes/light/date-range-picker.bootstrap.css.js +3 -0
  244. package/components/date-range-picker/themes/light/date-range-picker.bootstrap.css.js.map +1 -0
  245. package/components/date-range-picker/themes/light/date-range-picker.fluent.css.d.ts +1 -0
  246. package/components/date-range-picker/themes/light/date-range-picker.fluent.css.js +3 -0
  247. package/components/date-range-picker/themes/light/date-range-picker.fluent.css.js.map +1 -0
  248. package/components/date-range-picker/themes/light/date-range-picker.indigo.css.d.ts +1 -0
  249. package/components/date-range-picker/themes/light/date-range-picker.indigo.css.js +3 -0
  250. package/components/date-range-picker/themes/light/date-range-picker.indigo.css.js.map +1 -0
  251. package/components/date-range-picker/themes/light/date-range-picker.material.css.d.ts +1 -0
  252. package/components/date-range-picker/themes/light/date-range-picker.material.css.js +3 -0
  253. package/components/date-range-picker/themes/light/date-range-picker.material.css.js.map +1 -0
  254. package/components/date-range-picker/themes/light/date-range-picker.shared.css.d.ts +1 -0
  255. package/components/date-range-picker/themes/light/date-range-picker.shared.css.js +3 -0
  256. package/components/date-range-picker/themes/light/date-range-picker.shared.css.js.map +1 -0
  257. package/components/date-range-picker/themes/ranges-themes.d.ts +2 -0
  258. package/components/date-range-picker/themes/ranges-themes.js +14 -0
  259. package/components/date-range-picker/themes/ranges-themes.js.map +1 -0
  260. package/components/date-range-picker/themes/shared/date-range-picker.bootstrap.css.d.ts +1 -0
  261. package/components/date-range-picker/themes/shared/date-range-picker.bootstrap.css.js +3 -0
  262. package/components/date-range-picker/themes/shared/date-range-picker.bootstrap.css.js.map +1 -0
  263. package/components/date-range-picker/themes/shared/date-range-picker.common.css.d.ts +1 -0
  264. package/components/date-range-picker/themes/shared/date-range-picker.common.css.js +3 -0
  265. package/components/date-range-picker/themes/shared/date-range-picker.common.css.js.map +1 -0
  266. package/components/date-range-picker/themes/shared/date-range-picker.fluent.css.d.ts +1 -0
  267. package/components/date-range-picker/themes/shared/date-range-picker.fluent.css.js +3 -0
  268. package/components/date-range-picker/themes/shared/date-range-picker.fluent.css.js.map +1 -0
  269. package/components/date-range-picker/themes/shared/date-range-picker.indigo.css.d.ts +1 -0
  270. package/components/date-range-picker/themes/shared/date-range-picker.indigo.css.js +3 -0
  271. package/components/date-range-picker/themes/shared/date-range-picker.indigo.css.js.map +1 -0
  272. package/components/date-range-picker/themes/shared/date-range-picker.material.css.d.ts +1 -0
  273. package/components/date-range-picker/themes/shared/date-range-picker.material.css.js +3 -0
  274. package/components/date-range-picker/themes/shared/date-range-picker.material.css.js.map +1 -0
  275. package/components/date-range-picker/themes/shared/predefined-ranges-area.common.css.d.ts +1 -0
  276. package/components/date-range-picker/themes/shared/predefined-ranges-area.common.css.js +3 -0
  277. package/components/date-range-picker/themes/shared/predefined-ranges-area.common.css.js.map +1 -0
  278. package/components/date-range-picker/themes/shared/predefined-ranges-area.indigo.css.d.ts +1 -0
  279. package/components/date-range-picker/themes/shared/predefined-ranges-area.indigo.css.js +3 -0
  280. package/components/date-range-picker/themes/shared/predefined-ranges-area.indigo.css.js.map +1 -0
  281. package/components/date-range-picker/themes/themes.d.ts +2 -0
  282. package/components/date-range-picker/themes/themes.js +50 -0
  283. package/components/date-range-picker/themes/themes.js.map +1 -0
  284. package/components/date-range-picker/validators.d.ts +26 -0
  285. package/components/date-range-picker/validators.js +57 -0
  286. package/components/date-range-picker/validators.js.map +1 -0
  287. package/components/date-time-input/date-time-input.d.ts +2 -2
  288. package/components/date-time-input/date-time-input.js +7 -9
  289. package/components/date-time-input/date-time-input.js.map +1 -1
  290. package/components/date-time-input/date-util.d.ts +7 -0
  291. package/components/date-time-input/date-util.js +11 -0
  292. package/components/date-time-input/date-util.js.map +1 -1
  293. package/components/date-time-input/validators.js.map +1 -1
  294. package/components/dialog/dialog.js +12 -11
  295. package/components/dialog/dialog.js.map +1 -1
  296. package/components/dialog/themes/dialog.base.css.js +1 -1
  297. package/components/dialog/themes/dialog.base.css.js.map +1 -1
  298. package/components/dialog/themes/shared/dialog.indigo.css.js +1 -1
  299. package/components/dialog/themes/shared/dialog.indigo.css.js.map +1 -1
  300. package/components/divider/divider.d.ts +5 -3
  301. package/components/divider/divider.js +17 -15
  302. package/components/divider/divider.js.map +1 -1
  303. package/components/dropdown/dropdown-group.d.ts +0 -1
  304. package/components/dropdown/dropdown-group.js +7 -3
  305. package/components/dropdown/dropdown-group.js.map +1 -1
  306. package/components/dropdown/dropdown-header.js +1 -1
  307. package/components/dropdown/dropdown-header.js.map +1 -1
  308. package/components/dropdown/dropdown.d.ts +2 -1
  309. package/components/dropdown/dropdown.js +5 -2
  310. package/components/dropdown/dropdown.js.map +1 -1
  311. package/components/expansion-panel/expansion-panel.js +1 -1
  312. package/components/expansion-panel/expansion-panel.js.map +1 -1
  313. package/components/file-input/file-input.d.ts +11 -5
  314. package/components/file-input/file-input.js +23 -19
  315. package/components/file-input/file-input.js.map +1 -1
  316. package/components/file-input/themes/file-input.base.css.js +1 -1
  317. package/components/file-input/themes/file-input.base.css.js.map +1 -1
  318. package/components/file-input/validators.js.map +1 -1
  319. package/components/focus-trap/focus-trap.js +4 -4
  320. package/components/focus-trap/focus-trap.js.map +1 -1
  321. package/components/icon/icon.d.ts +1 -1
  322. package/components/icon/icon.js +7 -5
  323. package/components/icon/icon.js.map +1 -1
  324. package/components/input/input-base.d.ts +1 -8
  325. package/components/input/input-base.js +9 -10
  326. package/components/input/input-base.js.map +1 -1
  327. package/components/input/input.d.ts +2 -3
  328. package/components/input/input.js +10 -9
  329. package/components/input/input.js.map +1 -1
  330. package/components/input/themes/dark/input.bootstrap.css.js +1 -1
  331. package/components/input/themes/dark/input.bootstrap.css.js.map +1 -1
  332. package/components/input/themes/dark/input.indigo.css.js +1 -1
  333. package/components/input/themes/dark/input.indigo.css.js.map +1 -1
  334. package/components/input/themes/light/input.bootstrap.css.js +1 -1
  335. package/components/input/themes/light/input.bootstrap.css.js.map +1 -1
  336. package/components/input/themes/light/input.indigo.css.js +1 -1
  337. package/components/input/themes/light/input.indigo.css.js.map +1 -1
  338. package/components/input/themes/light/input.shared.css.js +1 -1
  339. package/components/input/themes/light/input.shared.css.js.map +1 -1
  340. package/components/input/themes/shared/input.bootstrap.css.js +1 -1
  341. package/components/input/themes/shared/input.bootstrap.css.js.map +1 -1
  342. package/components/input/themes/shared/input.common.css.js +1 -1
  343. package/components/input/themes/shared/input.common.css.js.map +1 -1
  344. package/components/input/themes/shared/input.fluent.css.js +1 -1
  345. package/components/input/themes/shared/input.fluent.css.js.map +1 -1
  346. package/components/input/themes/shared/input.indigo.css.js +1 -1
  347. package/components/input/themes/shared/input.indigo.css.js.map +1 -1
  348. package/components/input/themes/shared/input.material.css.js +1 -1
  349. package/components/input/themes/shared/input.material.css.js.map +1 -1
  350. package/components/input/validators.js.map +1 -1
  351. package/components/list/list-header.d.ts +0 -1
  352. package/components/list/list-header.js +5 -3
  353. package/components/list/list-header.js.map +1 -1
  354. package/components/list/list-item.d.ts +0 -1
  355. package/components/list/list-item.js +7 -3
  356. package/components/list/list-item.js.map +1 -1
  357. package/components/list/list.d.ts +0 -1
  358. package/components/list/list.js +7 -3
  359. package/components/list/list.js.map +1 -1
  360. package/components/mask-input/mask-input.d.ts +2 -3
  361. package/components/mask-input/mask-input.js +13 -12
  362. package/components/mask-input/mask-input.js.map +1 -1
  363. package/components/mask-input/mask-parser.d.ts +100 -14
  364. package/components/mask-input/mask-parser.js +134 -117
  365. package/components/mask-input/mask-parser.js.map +1 -1
  366. package/components/mask-input/validators.js.map +1 -1
  367. package/components/nav-drawer/nav-drawer-header-item.js +1 -1
  368. package/components/nav-drawer/nav-drawer-header-item.js.map +1 -1
  369. package/components/nav-drawer/nav-drawer-item.js +3 -7
  370. package/components/nav-drawer/nav-drawer-item.js.map +1 -1
  371. package/components/nav-drawer/nav-drawer.js +6 -7
  372. package/components/nav-drawer/nav-drawer.js.map +1 -1
  373. package/components/navbar/navbar.js +1 -1
  374. package/components/navbar/navbar.js.map +1 -1
  375. package/components/popover/popover.js +1 -1
  376. package/components/popover/popover.js.map +1 -1
  377. package/components/progress/base.d.ts +1 -2
  378. package/components/progress/base.js +34 -31
  379. package/components/progress/base.js.map +1 -1
  380. package/components/progress/circular-progress.js +7 -15
  381. package/components/progress/circular-progress.js.map +1 -1
  382. package/components/progress/linear-progress.js +5 -5
  383. package/components/progress/linear-progress.js.map +1 -1
  384. package/components/radio/radio.d.ts +11 -12
  385. package/components/radio/radio.js +40 -45
  386. package/components/radio/radio.js.map +1 -1
  387. package/components/radio/utils.js +6 -3
  388. package/components/radio/utils.js.map +1 -1
  389. package/components/radio-group/radio-group.d.ts +1 -1
  390. package/components/radio-group/radio-group.js +9 -8
  391. package/components/radio-group/radio-group.js.map +1 -1
  392. package/components/rating/rating-symbol.js +1 -1
  393. package/components/rating/rating-symbol.js.map +1 -1
  394. package/components/rating/rating.d.ts +2 -2
  395. package/components/rating/rating.js +5 -5
  396. package/components/rating/rating.js.map +1 -1
  397. package/components/resize-container/resize-container.js +5 -5
  398. package/components/resize-container/resize-container.js.map +1 -1
  399. package/components/resize-container/resize-controller.d.ts +3 -2
  400. package/components/resize-container/resize-controller.js +6 -4
  401. package/components/resize-container/resize-controller.js.map +1 -1
  402. package/components/ripple/ripple.js +3 -2
  403. package/components/ripple/ripple.js.map +1 -1
  404. package/components/select/select-group.d.ts +1 -1
  405. package/components/select/select-group.js +9 -5
  406. package/components/select/select-group.js.map +1 -1
  407. package/components/select/select-header.js +1 -1
  408. package/components/select/select-header.js.map +1 -1
  409. package/components/select/select.d.ts +3 -2
  410. package/components/select/select.js +19 -15
  411. package/components/select/select.js.map +1 -1
  412. package/components/select/themes/shared/select.fluent.css.js +1 -1
  413. package/components/select/themes/shared/select.fluent.css.js.map +1 -1
  414. package/components/select/validators.js.map +1 -1
  415. package/components/slider/range-slider.js +1 -1
  416. package/components/slider/range-slider.js.map +1 -1
  417. package/components/slider/slider-base.js +7 -7
  418. package/components/slider/slider-base.js.map +1 -1
  419. package/components/slider/slider-label.js +1 -1
  420. package/components/slider/slider-label.js.map +1 -1
  421. package/components/slider/slider.d.ts +2 -3
  422. package/components/slider/slider.js +7 -7
  423. package/components/slider/slider.js.map +1 -1
  424. package/components/snackbar/snackbar.js.map +1 -1
  425. package/components/stepper/step.js +4 -4
  426. package/components/stepper/step.js.map +1 -1
  427. package/components/stepper/stepper.js +1 -1
  428. package/components/stepper/stepper.js.map +1 -1
  429. package/components/tabs/tab.js +2 -2
  430. package/components/tabs/tab.js.map +1 -1
  431. package/components/tabs/tabs.js +12 -10
  432. package/components/tabs/tabs.js.map +1 -1
  433. package/components/textarea/textarea.d.ts +3 -9
  434. package/components/textarea/textarea.js +13 -14
  435. package/components/textarea/textarea.js.map +1 -1
  436. package/components/textarea/themes/dark/textarea.bootstrap.css.js +1 -1
  437. package/components/textarea/themes/dark/textarea.bootstrap.css.js.map +1 -1
  438. package/components/textarea/themes/dark/textarea.indigo.css.js +1 -1
  439. package/components/textarea/themes/dark/textarea.indigo.css.js.map +1 -1
  440. package/components/textarea/themes/light/textarea.bootstrap.css.js +1 -1
  441. package/components/textarea/themes/light/textarea.bootstrap.css.js.map +1 -1
  442. package/components/textarea/themes/light/textarea.indigo.css.js +1 -1
  443. package/components/textarea/themes/light/textarea.indigo.css.js.map +1 -1
  444. package/components/textarea/themes/light/textarea.shared.css.js +1 -1
  445. package/components/textarea/themes/light/textarea.shared.css.js.map +1 -1
  446. package/components/textarea/themes/shared/textarea.bootstrap.css.js +1 -1
  447. package/components/textarea/themes/shared/textarea.bootstrap.css.js.map +1 -1
  448. package/components/textarea/themes/shared/textarea.fluent.css.js +1 -1
  449. package/components/textarea/themes/shared/textarea.fluent.css.js.map +1 -1
  450. package/components/textarea/themes/shared/textarea.indigo.css.js +1 -1
  451. package/components/textarea/themes/shared/textarea.indigo.css.js.map +1 -1
  452. package/components/textarea/themes/shared/textarea.material.css.js +1 -1
  453. package/components/textarea/themes/shared/textarea.material.css.js.map +1 -1
  454. package/components/textarea/themes/textarea.base.css.js +1 -1
  455. package/components/textarea/themes/textarea.base.css.js.map +1 -1
  456. package/components/textarea/validators.js.map +1 -1
  457. package/components/tile-manager/position.d.ts +1 -1
  458. package/components/tile-manager/position.js.map +1 -1
  459. package/components/tile-manager/themes/container.js.map +1 -1
  460. package/components/tile-manager/tile-manager.d.ts +0 -1
  461. package/components/tile-manager/tile-manager.js +9 -10
  462. package/components/tile-manager/tile-manager.js.map +1 -1
  463. package/components/tile-manager/tile.js +7 -6
  464. package/components/tile-manager/tile.js.map +1 -1
  465. package/components/tooltip/controller.d.ts +2 -4
  466. package/components/tooltip/controller.js +11 -20
  467. package/components/tooltip/controller.js.map +1 -1
  468. package/components/tooltip/themes/themes.js +1 -1
  469. package/components/tooltip/themes/themes.js.map +1 -1
  470. package/components/tooltip/tooltip.d.ts +24 -10
  471. package/components/tooltip/tooltip.js +56 -49
  472. package/components/tooltip/tooltip.js.map +1 -1
  473. package/components/tree/tree-item.d.ts +1 -0
  474. package/components/tree/tree-item.js +28 -26
  475. package/components/tree/tree-item.js.map +1 -1
  476. package/components/tree/tree.d.ts +1 -1
  477. package/components/tree/tree.js +4 -3
  478. package/components/tree/tree.js.map +1 -1
  479. package/components/tree/tree.navigation.d.ts +1 -1
  480. package/components/tree/tree.navigation.js.map +1 -1
  481. package/components/tree/tree.selection.d.ts +1 -1
  482. package/components/tree/tree.selection.js.map +1 -1
  483. package/components/validation-container/themes/themes.js.map +1 -1
  484. package/components/validation-container/validation-container.d.ts +1 -1
  485. package/components/validation-container/validation-container.js +5 -12
  486. package/components/validation-container/validation-container.js.map +1 -1
  487. package/custom-elements.json +31449 -26970
  488. package/igniteui-webcomponents.css-data.json +1 -1
  489. package/igniteui-webcomponents.html-data.json +1 -1
  490. package/index.d.ts +11 -1
  491. package/index.js +6 -0
  492. package/index.js.map +1 -1
  493. package/package.json +3 -2
  494. package/theming/theming-controller.d.ts +1 -1
  495. package/theming/theming-controller.js +1 -1
  496. package/theming/theming-controller.js.map +1 -1
  497. package/web-types.json +2 -2
@@ -0,0 +1,41 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ *
4
+ * @element igc-chat-input
5
+ *
6
+ */
7
+ export default class IgcChatInputComponent extends LitElement {
8
+ /** @private */
9
+ static readonly tagName = "igc-chat-input";
10
+ static styles: import("lit").CSSResult;
11
+ private _chat?;
12
+ static register(): void;
13
+ private textInputElement;
14
+ protected acceptedFilesChange(): void;
15
+ private inputValue;
16
+ private attachments;
17
+ private dragClass;
18
+ private _acceptedTypesCache;
19
+ constructor();
20
+ protected firstUpdated(): void;
21
+ private handleInput;
22
+ private handleKeyDown;
23
+ private setupDragAndDrop;
24
+ private handleDragEnter;
25
+ private handleDragOver;
26
+ private handleDragLeave;
27
+ private handleDrop;
28
+ private adjustTextareaHeight;
29
+ private sendMessage;
30
+ private handleFileUpload;
31
+ private attachFiles;
32
+ private updateAcceptedTypesCache;
33
+ private isFileTypeAccepted;
34
+ private removeAttachment;
35
+ protected render(): import("lit-html").TemplateResult<1>;
36
+ }
37
+ declare global {
38
+ interface HTMLElementTagNameMap {
39
+ 'igc-chat-input': IgcChatInputComponent;
40
+ }
41
+ }
@@ -0,0 +1,254 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { consume } from '@lit/context';
8
+ import { LitElement, html } from 'lit';
9
+ import { query, state } from 'lit/decorators.js';
10
+ import IgcIconButtonComponent from '../button/icon-button.js';
11
+ import IgcChipComponent from '../chip/chip.js';
12
+ import { chatContext } from '../common/context.js';
13
+ import { watch } from '../common/decorators/watch.js';
14
+ import { registerComponent } from '../common/definitions/register.js';
15
+ import IgcFileInputComponent from '../file-input/file-input.js';
16
+ import IgcIconComponent from '../icon/icon.js';
17
+ import { registerIconFromText } from '../icon/icon.registry.js';
18
+ import IgcTextareaComponent from '../textarea/textarea.js';
19
+ import { styles } from './themes/input.base.css.js';
20
+ import { attachmentIcon, sendButtonIcon, } from './types.js';
21
+ class IgcChatInputComponent extends LitElement {
22
+ static register() {
23
+ registerComponent(IgcChatInputComponent, IgcTextareaComponent, IgcIconButtonComponent, IgcChipComponent, IgcFileInputComponent, IgcIconComponent);
24
+ }
25
+ acceptedFilesChange() {
26
+ this.updateAcceptedTypesCache();
27
+ }
28
+ constructor() {
29
+ super();
30
+ this.inputValue = '';
31
+ this.attachments = [];
32
+ this.dragClass = '';
33
+ this._acceptedTypesCache = null;
34
+ registerIconFromText('attachment', attachmentIcon, 'material');
35
+ registerIconFromText('send-message', sendButtonIcon, 'material');
36
+ }
37
+ firstUpdated() {
38
+ this.setupDragAndDrop();
39
+ this.updateAcceptedTypesCache();
40
+ }
41
+ handleInput(e) {
42
+ const target = e.target;
43
+ this.inputValue = target.value;
44
+ this.adjustTextareaHeight();
45
+ }
46
+ handleKeyDown(e) {
47
+ if (e.key === 'Enter' && !e.shiftKey) {
48
+ e.preventDefault();
49
+ this.sendMessage();
50
+ }
51
+ }
52
+ setupDragAndDrop() {
53
+ const container = this.shadowRoot?.querySelector('.input-container');
54
+ if (container) {
55
+ container.addEventListener('dragenter', this.handleDragEnter.bind(this));
56
+ container.addEventListener('dragover', this.handleDragOver.bind(this));
57
+ container.addEventListener('dragleave', this.handleDragLeave.bind(this));
58
+ container.addEventListener('drop', this.handleDrop.bind(this));
59
+ }
60
+ }
61
+ handleDragEnter(e) {
62
+ e.preventDefault();
63
+ e.stopPropagation();
64
+ const files = Array.from(e.dataTransfer?.items || []).filter((item) => item.kind === 'file');
65
+ const hasValidFiles = files.some((item) => this.isFileTypeAccepted(item.getAsFile(), item.type));
66
+ this.dragClass = hasValidFiles ? 'dragging' : '';
67
+ }
68
+ handleDragOver(e) {
69
+ e.preventDefault();
70
+ e.stopPropagation();
71
+ }
72
+ handleDragLeave(e) {
73
+ e.preventDefault();
74
+ e.stopPropagation();
75
+ const rect = e.currentTarget.getBoundingClientRect();
76
+ const x = e.clientX;
77
+ const y = e.clientY;
78
+ if (x <= rect.left ||
79
+ x >= rect.right ||
80
+ y <= rect.top ||
81
+ y >= rect.bottom) {
82
+ this.dragClass = '';
83
+ }
84
+ }
85
+ handleDrop(e) {
86
+ e.preventDefault();
87
+ e.stopPropagation();
88
+ this.dragClass = '';
89
+ const files = Array.from(e.dataTransfer?.files || []);
90
+ if (files.length === 0)
91
+ return;
92
+ const validFiles = files.filter((file) => this.isFileTypeAccepted(file));
93
+ this.attachFiles(validFiles);
94
+ }
95
+ adjustTextareaHeight() {
96
+ const textarea = this.textInputElement;
97
+ if (!textarea)
98
+ return;
99
+ textarea.style.height = 'auto';
100
+ const newHeight = Math.min(textarea.scrollHeight, 120);
101
+ textarea.style.height = `${newHeight}px`;
102
+ }
103
+ sendMessage() {
104
+ if (!this.inputValue.trim() && this.attachments.length === 0)
105
+ return;
106
+ const messageEvent = new CustomEvent('message-created', {
107
+ detail: { text: this.inputValue, attachments: this.attachments },
108
+ });
109
+ this.dispatchEvent(messageEvent);
110
+ this.inputValue = '';
111
+ this.attachments = [];
112
+ if (this.textInputElement) {
113
+ this.textInputElement.style.height = 'auto';
114
+ }
115
+ setTimeout(() => {
116
+ this.textInputElement?.focus();
117
+ }, 0);
118
+ }
119
+ handleFileUpload(e) {
120
+ const input = e.target.input;
121
+ if (!input.files || input.files.length === 0)
122
+ return;
123
+ const files = Array.from(input.files);
124
+ this.attachFiles(files);
125
+ }
126
+ attachFiles(files) {
127
+ const newAttachments = [];
128
+ let count = this.attachments.length;
129
+ files.forEach((file) => {
130
+ const isImage = file.type.startsWith('image/');
131
+ newAttachments.push({
132
+ id: Date.now().toString() + count++,
133
+ url: URL.createObjectURL(file),
134
+ name: file.name,
135
+ file: file,
136
+ thumbnail: isImage ? URL.createObjectURL(file) : undefined,
137
+ });
138
+ });
139
+ this.attachments = [...this.attachments, ...newAttachments];
140
+ }
141
+ updateAcceptedTypesCache() {
142
+ if (!this._chat?.options?.acceptedFiles) {
143
+ this._acceptedTypesCache = null;
144
+ return;
145
+ }
146
+ const types = this._chat?.options?.acceptedFiles
147
+ .split(',')
148
+ .map((type) => type.trim().toLowerCase());
149
+ this._acceptedTypesCache = {
150
+ extensions: new Set(types.filter((t) => t.startsWith('.'))),
151
+ mimeTypes: new Set(types.filter((t) => !t.startsWith('.') && !t.endsWith('/*'))),
152
+ wildcardTypes: new Set(types.filter((t) => t.endsWith('/*')).map((t) => t.slice(0, -2))),
153
+ };
154
+ }
155
+ isFileTypeAccepted(file, type = '') {
156
+ if (!this._acceptedTypesCache)
157
+ return true;
158
+ if (file === null && type === '')
159
+ return false;
160
+ const fileType = file != null ? file.type.toLowerCase() : type.toLowerCase();
161
+ const fileExtension = file != null
162
+ ? `.${file.name.split('.').pop()?.toLowerCase()}`
163
+ : `.${type.split('/').pop()?.toLowerCase()}`;
164
+ if (this._acceptedTypesCache.extensions.has(fileExtension)) {
165
+ return true;
166
+ }
167
+ if (this._acceptedTypesCache.mimeTypes.has(fileType)) {
168
+ return true;
169
+ }
170
+ const [fileBaseType] = fileType.split('/');
171
+ return this._acceptedTypesCache.wildcardTypes.has(fileBaseType);
172
+ }
173
+ removeAttachment(index) {
174
+ this.attachments = this.attachments.filter((_, i) => i !== index);
175
+ }
176
+ render() {
177
+ return html `
178
+ <div class="input-container ${this.dragClass}">
179
+ ${this._chat?.options?.disableAttachments
180
+ ? ''
181
+ : html `
182
+ <igc-file-input
183
+ multiple
184
+ .accept=${this._chat?.options?.acceptedFiles}
185
+ @igcChange=${this.handleFileUpload}
186
+ >
187
+ <igc-icon
188
+ slot="file-selector-text"
189
+ name="attachment"
190
+ collection="material"
191
+ ></igc-icon>
192
+ </igc-file-input>
193
+ `}
194
+
195
+ <div class="input-wrapper">
196
+ <igc-textarea
197
+ class="text-input"
198
+ placeholder="Type a message..."
199
+ rows="1"
200
+ .value=${this.inputValue}
201
+ @input=${this.handleInput}
202
+ @keydown=${this.handleKeyDown}
203
+ ></igc-textarea>
204
+ </div>
205
+
206
+ <div class="buttons-container">
207
+ <igc-icon-button
208
+ name="send-message"
209
+ collection="material"
210
+ variant="contained"
211
+ class="small"
212
+ ?disabled=${!this.inputValue.trim() &&
213
+ this.attachments.length === 0}
214
+ @click=${this.sendMessage}
215
+ ></igc-icon-button>
216
+ </div>
217
+ </div>
218
+ <div>
219
+ ${this.attachments?.map((attachment, index) => html `
220
+ <div class="attachment-wrapper">
221
+ <igc-chip
222
+ removable
223
+ @igcRemove=${() => this.removeAttachment(index)}
224
+ >
225
+ <span class="attachment-name">${attachment.name}</span>
226
+ </igc-chip>
227
+ </div>
228
+ `)}
229
+ </div>
230
+ `;
231
+ }
232
+ }
233
+ IgcChatInputComponent.tagName = 'igc-chat-input';
234
+ IgcChatInputComponent.styles = styles;
235
+ export default IgcChatInputComponent;
236
+ __decorate([
237
+ consume({ context: chatContext, subscribe: true })
238
+ ], IgcChatInputComponent.prototype, "_chat", void 0);
239
+ __decorate([
240
+ query('textarea')
241
+ ], IgcChatInputComponent.prototype, "textInputElement", void 0);
242
+ __decorate([
243
+ watch('acceptedFiles', { waitUntilFirstUpdate: true })
244
+ ], IgcChatInputComponent.prototype, "acceptedFilesChange", null);
245
+ __decorate([
246
+ state()
247
+ ], IgcChatInputComponent.prototype, "inputValue", void 0);
248
+ __decorate([
249
+ state()
250
+ ], IgcChatInputComponent.prototype, "attachments", void 0);
251
+ __decorate([
252
+ state()
253
+ ], IgcChatInputComponent.prototype, "dragClass", void 0);
254
+ //# sourceMappingURL=chat-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-input.js","sourceRoot":"","sources":["../../../src/components/chat/chat-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { consume } from '@lit/context';\nimport { LitElement, html } from 'lit';\nimport { query, state } from 'lit/decorators.js';\nimport IgcIconButtonComponent from '../button/icon-button.js';\nimport IgcChipComponent from '../chip/chip.js';\nimport { chatContext } from '../common/context.js';\nimport { watch } from '../common/decorators/watch.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport IgcFileInputComponent from '../file-input/file-input.js';\nimport IgcIconComponent from '../icon/icon.js';\nimport { registerIconFromText } from '../icon/icon.registry.js';\nimport IgcTextareaComponent from '../textarea/textarea.js';\nimport type IgcChatComponent from './chat.js';\nimport { styles } from './themes/input.base.css.js';\nimport {\n type IgcMessageAttachment,\n attachmentIcon,\n sendButtonIcon,\n} from './types.js';\n\n/**\n *\n * @element igc-chat-input\n *\n */\nexport default class IgcChatInputComponent extends LitElement {\n /** @private */\n public static readonly tagName = 'igc-chat-input';\n\n public static override styles = styles;\n\n @consume({ context: chatContext, subscribe: true })\n private _chat?: IgcChatComponent;\n\n /* blazorSuppress */\n public static register() {\n registerComponent(\n IgcChatInputComponent,\n IgcTextareaComponent,\n IgcIconButtonComponent,\n IgcChipComponent,\n IgcFileInputComponent,\n IgcIconComponent\n );\n }\n\n @query('textarea')\n private textInputElement!: HTMLTextAreaElement;\n\n @watch('acceptedFiles', { waitUntilFirstUpdate: true })\n protected acceptedFilesChange(): void {\n this.updateAcceptedTypesCache();\n }\n\n @state()\n private inputValue = '';\n\n @state()\n private attachments: IgcMessageAttachment[] = [];\n\n @state()\n private dragClass = '';\n\n // Cache for accepted file types\n private _acceptedTypesCache: {\n extensions: Set<string>;\n mimeTypes: Set<string>;\n wildcardTypes: Set<string>;\n } | null = null;\n\n constructor() {\n super();\n registerIconFromText('attachment', attachmentIcon, 'material');\n registerIconFromText('send-message', sendButtonIcon, 'material');\n }\n\n protected override firstUpdated() {\n this.setupDragAndDrop();\n this.updateAcceptedTypesCache();\n }\n\n private handleInput(e: Event) {\n const target = e.target as HTMLTextAreaElement;\n this.inputValue = target.value;\n this.adjustTextareaHeight();\n }\n\n private handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n this.sendMessage();\n }\n }\n\n private setupDragAndDrop() {\n const container = this.shadowRoot?.querySelector(\n '.input-container'\n ) as HTMLElement;\n if (container) {\n container.addEventListener('dragenter', this.handleDragEnter.bind(this));\n container.addEventListener('dragover', this.handleDragOver.bind(this));\n container.addEventListener('dragleave', this.handleDragLeave.bind(this));\n container.addEventListener('drop', this.handleDrop.bind(this));\n }\n }\n\n private handleDragEnter(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n const files = Array.from(e.dataTransfer?.items || []).filter(\n (item) => item.kind === 'file'\n );\n const hasValidFiles = files.some((item) =>\n this.isFileTypeAccepted(item.getAsFile() as File, item.type)\n );\n\n this.dragClass = hasValidFiles ? 'dragging' : '';\n }\n\n private handleDragOver(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n private handleDragLeave(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n // Check if we're actually leaving the container\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n const x = e.clientX;\n const y = e.clientY;\n\n if (\n x <= rect.left ||\n x >= rect.right ||\n y <= rect.top ||\n y >= rect.bottom\n ) {\n this.dragClass = '';\n }\n }\n\n private handleDrop(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n this.dragClass = '';\n\n const files = Array.from(e.dataTransfer?.files || []);\n if (files.length === 0) return;\n\n const validFiles = files.filter((file) => this.isFileTypeAccepted(file));\n\n this.attachFiles(validFiles);\n }\n\n private adjustTextareaHeight() {\n const textarea = this.textInputElement;\n if (!textarea) return;\n\n textarea.style.height = 'auto';\n const newHeight = Math.min(textarea.scrollHeight, 120);\n textarea.style.height = `${newHeight}px`;\n }\n\n private sendMessage() {\n if (!this.inputValue.trim() && this.attachments.length === 0) return;\n\n const messageEvent = new CustomEvent('message-created', {\n detail: { text: this.inputValue, attachments: this.attachments },\n });\n\n this.dispatchEvent(messageEvent);\n this.inputValue = '';\n this.attachments = [];\n\n if (this.textInputElement) {\n this.textInputElement.style.height = 'auto';\n }\n\n setTimeout(() => {\n this.textInputElement?.focus();\n }, 0);\n }\n\n private handleFileUpload(e: Event) {\n const input = (e.target as any).input as HTMLInputElement;\n if (!input.files || input.files.length === 0) return;\n\n const files = Array.from(input.files);\n this.attachFiles(files);\n }\n\n private attachFiles(files: File[]) {\n const newAttachments: IgcMessageAttachment[] = [];\n let count = this.attachments.length;\n files.forEach((file) => {\n const isImage = file.type.startsWith('image/');\n newAttachments.push({\n id: Date.now().toString() + count++,\n // type: isImage ? 'image' : 'file',\n url: URL.createObjectURL(file),\n name: file.name,\n file: file,\n thumbnail: isImage ? URL.createObjectURL(file) : undefined,\n });\n });\n this.attachments = [...this.attachments, ...newAttachments];\n }\n\n private updateAcceptedTypesCache() {\n if (!this._chat?.options?.acceptedFiles) {\n this._acceptedTypesCache = null;\n return;\n }\n\n const types = this._chat?.options?.acceptedFiles\n .split(',')\n .map((type) => type.trim().toLowerCase());\n this._acceptedTypesCache = {\n extensions: new Set(types.filter((t) => t.startsWith('.'))),\n mimeTypes: new Set(\n types.filter((t) => !t.startsWith('.') && !t.endsWith('/*'))\n ),\n wildcardTypes: new Set(\n types.filter((t) => t.endsWith('/*')).map((t) => t.slice(0, -2))\n ),\n };\n }\n\n private isFileTypeAccepted(file: File, type = ''): boolean {\n if (!this._acceptedTypesCache) return true;\n\n if (file === null && type === '') return false;\n\n const fileType =\n file != null ? file.type.toLowerCase() : type.toLowerCase();\n const fileExtension =\n file != null\n ? `.${file.name.split('.').pop()?.toLowerCase()}`\n : `.${type.split('/').pop()?.toLowerCase()}`;\n\n // Check file extension\n if (this._acceptedTypesCache.extensions.has(fileExtension)) {\n return true;\n }\n\n // Check exact MIME type\n if (this._acceptedTypesCache.mimeTypes.has(fileType)) {\n return true;\n }\n\n // Check wildcard MIME types\n const [fileBaseType] = fileType.split('/');\n return this._acceptedTypesCache.wildcardTypes.has(fileBaseType);\n }\n\n private removeAttachment(index: number) {\n this.attachments = this.attachments.filter((_, i) => i !== index);\n }\n\n protected override render() {\n return html`\n <div class=\"input-container ${this.dragClass}\">\n ${this._chat?.options?.disableAttachments\n ? ''\n : html`\n <igc-file-input\n multiple\n .accept=${this._chat?.options?.acceptedFiles}\n @igcChange=${this.handleFileUpload}\n >\n <igc-icon\n slot=\"file-selector-text\"\n name=\"attachment\"\n collection=\"material\"\n ></igc-icon>\n </igc-file-input>\n `}\n\n <div class=\"input-wrapper\">\n <igc-textarea\n class=\"text-input\"\n placeholder=\"Type a message...\"\n rows=\"1\"\n .value=${this.inputValue}\n @input=${this.handleInput}\n @keydown=${this.handleKeyDown}\n ></igc-textarea>\n </div>\n\n <div class=\"buttons-container\">\n <igc-icon-button\n name=\"send-message\"\n collection=\"material\"\n variant=\"contained\"\n class=\"small\"\n ?disabled=${!this.inputValue.trim() &&\n this.attachments.length === 0}\n @click=${this.sendMessage}\n ></igc-icon-button>\n </div>\n </div>\n <div>\n ${this.attachments?.map(\n (attachment, index) => html`\n <div class=\"attachment-wrapper\">\n <igc-chip\n removable\n @igcRemove=${() => this.removeAttachment(index)}\n >\n <span class=\"attachment-name\">${attachment.name}</span>\n </igc-chip>\n </div>\n `\n )}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-chat-input': IgcChatInputComponent;\n }\n}\n"]}
@@ -0,0 +1,24 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ *
4
+ * @element igc-chat-message-list
5
+ *
6
+ */
7
+ export default class IgcChatMessageListComponent extends LitElement {
8
+ /** @private */
9
+ static readonly tagName = "igc-chat-message-list";
10
+ static styles: import("lit").CSSResult;
11
+ private _chat?;
12
+ static register(): void;
13
+ private formatDate;
14
+ private groupMessagesByDate;
15
+ private scrollToBottom;
16
+ protected updated(): void;
17
+ protected firstUpdated(): void;
18
+ protected render(): import("lit-html").TemplateResult<1>;
19
+ }
20
+ declare global {
21
+ interface HTMLElementTagNameMap {
22
+ 'igc-chat-message-list': IgcChatMessageListComponent;
23
+ }
24
+ }
@@ -0,0 +1,88 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { consume } from '@lit/context';
8
+ import { LitElement, html } from 'lit';
9
+ import { repeat } from 'lit/directives/repeat.js';
10
+ import { chatContext } from '../common/context.js';
11
+ import { registerComponent } from '../common/definitions/register.js';
12
+ import IgcChatMessageComponent from './chat-message.js';
13
+ import { styles } from './themes/message-list.base.css.js';
14
+ class IgcChatMessageListComponent extends LitElement {
15
+ static register() {
16
+ registerComponent(IgcChatMessageListComponent, IgcChatMessageComponent);
17
+ }
18
+ formatDate(date) {
19
+ const today = new Date();
20
+ const yesterday = new Date(today);
21
+ yesterday.setDate(yesterday.getDate() - 1);
22
+ if (date.toDateString() === today.toDateString()) {
23
+ return 'Today';
24
+ }
25
+ if (date.toDateString() === yesterday.toDateString()) {
26
+ return 'Yesterday';
27
+ }
28
+ return date.toLocaleDateString('en-US', {
29
+ weekday: 'long',
30
+ month: 'short',
31
+ day: 'numeric',
32
+ });
33
+ }
34
+ groupMessagesByDate(messages) {
35
+ const grouped = {};
36
+ messages.forEach((message) => {
37
+ const dateStr = this.formatDate(message.timestamp);
38
+ if (!grouped[dateStr]) {
39
+ grouped[dateStr] = [];
40
+ }
41
+ grouped[dateStr].push(message);
42
+ });
43
+ return Object.keys(grouped).map((date) => ({
44
+ date,
45
+ messages: grouped[date],
46
+ }));
47
+ }
48
+ scrollToBottom() {
49
+ requestAnimationFrame(() => {
50
+ const container = this.shadowRoot?.host;
51
+ if (container) {
52
+ container.scrollTop = container.scrollHeight;
53
+ }
54
+ });
55
+ }
56
+ updated() {
57
+ if (!this._chat?.options?.disableAutoScroll) {
58
+ this.scrollToBottom();
59
+ }
60
+ }
61
+ firstUpdated() {
62
+ if (!this._chat?.options?.disableAutoScroll) {
63
+ this.scrollToBottom();
64
+ }
65
+ }
66
+ render() {
67
+ const groupedMessages = this.groupMessagesByDate(this._chat?.messages ?? []);
68
+ return html `
69
+ <div class='message-container'></div>
70
+ <div class="message-list">
71
+ ${repeat(groupedMessages, (group) => group.date, (group) => html `
72
+ ${repeat(group.messages, (message) => message.id, (message) => html `
73
+ <igc-chat-message .message=${message}></igc-chat-message>
74
+ `)}
75
+ `)}
76
+ ${''}
77
+ </div>
78
+ </div>
79
+ `;
80
+ }
81
+ }
82
+ IgcChatMessageListComponent.tagName = 'igc-chat-message-list';
83
+ IgcChatMessageListComponent.styles = styles;
84
+ export default IgcChatMessageListComponent;
85
+ __decorate([
86
+ consume({ context: chatContext, subscribe: true })
87
+ ], IgcChatMessageListComponent.prototype, "_chat", void 0);
88
+ //# sourceMappingURL=chat-message-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-message-list.js","sourceRoot":"","sources":["../../../src/components/chat/chat-message-list.ts"],"names":[],"mappings":"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","sourcesContent":["import { consume } from '@lit/context';\nimport { LitElement, html } from 'lit';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { chatContext } from '../common/context.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport IgcChatMessageComponent from './chat-message.js';\nimport type IgcChatComponent from './chat.js';\nimport { styles } from './themes/message-list.base.css.js';\nimport type { IgcMessage } from './types.js';\n\n/**\n *\n * @element igc-chat-message-list\n *\n */\nexport default class IgcChatMessageListComponent extends LitElement {\n /** @private */\n public static readonly tagName = 'igc-chat-message-list';\n\n public static override styles = styles;\n\n @consume({ context: chatContext, subscribe: true })\n private _chat?: IgcChatComponent;\n\n /* blazorSuppress */\n public static register() {\n registerComponent(IgcChatMessageListComponent, IgcChatMessageComponent);\n }\n\n private formatDate(date: Date): string {\n const today = new Date();\n const yesterday = new Date(today);\n yesterday.setDate(yesterday.getDate() - 1);\n\n if (date.toDateString() === today.toDateString()) {\n return 'Today';\n }\n\n if (date.toDateString() === yesterday.toDateString()) {\n return 'Yesterday';\n }\n\n return date.toLocaleDateString('en-US', {\n weekday: 'long',\n month: 'short',\n day: 'numeric',\n });\n }\n\n private groupMessagesByDate(\n messages: IgcMessage[]\n ): { date: string; messages: IgcMessage[] }[] {\n const grouped: { [key: string]: IgcMessage[] } = {};\n\n messages.forEach((message) => {\n const dateStr = this.formatDate(message.timestamp);\n if (!grouped[dateStr]) {\n grouped[dateStr] = [];\n }\n grouped[dateStr].push(message);\n });\n\n return Object.keys(grouped).map((date) => ({\n date,\n messages: grouped[date],\n }));\n }\n\n private scrollToBottom() {\n requestAnimationFrame(() => {\n const container = this.shadowRoot?.host as HTMLElement;\n if (container) {\n container.scrollTop = container.scrollHeight;\n }\n });\n }\n\n protected override updated() {\n if (!this._chat?.options?.disableAutoScroll) {\n this.scrollToBottom();\n }\n }\n\n protected override firstUpdated() {\n if (!this._chat?.options?.disableAutoScroll) {\n this.scrollToBottom();\n }\n }\n\n protected override render() {\n const groupedMessages = this.groupMessagesByDate(\n this._chat?.messages ?? []\n );\n\n return html`\n <div class='message-container'></div>\n <div class=\"message-list\">\n ${repeat(\n groupedMessages,\n (group) => group.date,\n (group) => html`\n ${repeat(\n group.messages,\n (message) => message.id,\n (message) => html`\n <igc-chat-message .message=${message}></igc-chat-message>\n `\n )}\n `\n )}\n ${\n ''\n // this.isAiResponding\n // ? html`\n // <div class=\"typing-indicator\">\n // <div class=\"typing-dot\"></div>\n // <div class=\"typing-dot\"></div>\n // <div class=\"typing-dot\"></div>\n // </div>\n // `\n // : ''\n }\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-chat-message-list': IgcChatMessageListComponent;\n }\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import { LitElement } from 'lit';
2
+ import type { IgcMessage } from './types.js';
3
+ /**
4
+ *
5
+ * @element igc-chat-message
6
+ *
7
+ */
8
+ export default class IgcChatMessageComponent extends LitElement {
9
+ /** @private */
10
+ static readonly tagName = "igc-chat-message";
11
+ static styles: import("lit").CSSResult;
12
+ private _chat?;
13
+ static register(): void;
14
+ message: IgcMessage | undefined;
15
+ protected render(): import("lit-html").TemplateResult<1>;
16
+ }
17
+ declare global {
18
+ interface HTMLElementTagNameMap {
19
+ 'igc-chat-message': IgcChatMessageComponent;
20
+ }
21
+ }
@@ -0,0 +1,52 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { consume } from '@lit/context';
8
+ import { LitElement, html } from 'lit';
9
+ import { property } from 'lit/decorators.js';
10
+ import IgcAvatarComponent from '../avatar/avatar.js';
11
+ import { chatContext } from '../common/context.js';
12
+ import { registerComponent } from '../common/definitions/register.js';
13
+ import { renderMarkdown } from './markdown-util.js';
14
+ import IgcMessageAttachmentsComponent from './message-attachments.js';
15
+ import { styles } from './themes/message.base.css.js';
16
+ class IgcChatMessageComponent extends LitElement {
17
+ static register() {
18
+ registerComponent(IgcChatMessageComponent, IgcMessageAttachmentsComponent, IgcAvatarComponent);
19
+ }
20
+ render() {
21
+ const containerClass = `message-container ${this.message?.sender === 'user' ? 'sent' : ''}`;
22
+ return html `
23
+ <div class=${containerClass}>
24
+ <div class="bubble">
25
+ ${this.message?.text.trim()
26
+ ? html ` <div>${renderMarkdown(this.message?.text)}</div>`
27
+ : ''}
28
+ ${this.message?.attachments && this.message?.attachments.length > 0
29
+ ? html `<igc-message-attachments
30
+ .attachments=${this.message?.attachments}
31
+ >
32
+ </igc-message-attachments>`
33
+ : ''}
34
+ ${this._chat?.options?.templates?.messageActionsTemplate &&
35
+ this.message
36
+ ? this._chat.options.templates.messageActionsTemplate(this.message)
37
+ : ''}
38
+ </div>
39
+ </div>
40
+ `;
41
+ }
42
+ }
43
+ IgcChatMessageComponent.tagName = 'igc-chat-message';
44
+ IgcChatMessageComponent.styles = styles;
45
+ export default IgcChatMessageComponent;
46
+ __decorate([
47
+ consume({ context: chatContext, subscribe: true })
48
+ ], IgcChatMessageComponent.prototype, "_chat", void 0);
49
+ __decorate([
50
+ property({ reflect: true, attribute: false })
51
+ ], IgcChatMessageComponent.prototype, "message", void 0);
52
+ //# sourceMappingURL=chat-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-message.js","sourceRoot":"","sources":["../../../src/components/chat/chat-message.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,kBAAkB,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,8BAA8B,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAQtD,MAAqB,uBAAwB,SAAQ,UAAU;IAUtD,MAAM,CAAC,QAAQ;QACpB,iBAAiB,CACf,uBAAuB,EACvB,8BAA8B,EAC9B,kBAAkB,CACnB,CAAC;IACJ,CAAC;IAKkB,MAAM;QACvB,MAAM,cAAc,GAAG,qBAAqB,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAE5F,OAAO,IAAI,CAAA;mBACI,cAAc;;YAErB,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;YACzB,CAAC,CAAC,IAAI,CAAA,SAAS,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ;YACzD,CAAC,CAAC,EAAE;YACJ,IAAI,CAAC,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC;YACjE,CAAC,CAAC,IAAI,CAAA;+BACa,IAAI,CAAC,OAAO,EAAE,WAAW;;yCAEf;YAC7B,CAAC,CAAC,EAAE;YACJ,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,sBAAsB;YACxD,IAAI,CAAC,OAAO;YACV,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC;YACnE,CAAC,CAAC,EAAE;;;KAGX,CAAC;IACJ,CAAC;;AAzCsB,+BAAO,GAAG,kBAAkB,CAAC;AAE7B,8BAAM,GAAG,MAAM,CAAC;eAJpB,uBAAuB;AAOlC;IADP,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;sDAClB;AAY1B;IADN,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;wDACP","sourcesContent":["import { consume } from '@lit/context';\nimport { LitElement, html } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport IgcAvatarComponent from '../avatar/avatar.js';\nimport { chatContext } from '../common/context.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport type IgcChatComponent from './chat.js';\nimport { renderMarkdown } from './markdown-util.js';\nimport IgcMessageAttachmentsComponent from './message-attachments.js';\nimport { styles } from './themes/message.base.css.js';\nimport type { IgcMessage } from './types.js';\n\n/**\n *\n * @element igc-chat-message\n *\n */\nexport default class IgcChatMessageComponent extends LitElement {\n /** @private */\n public static readonly tagName = 'igc-chat-message';\n\n public static override styles = styles;\n\n @consume({ context: chatContext, subscribe: true })\n private _chat?: IgcChatComponent;\n\n /* blazorSuppress */\n public static register() {\n registerComponent(\n IgcChatMessageComponent,\n IgcMessageAttachmentsComponent,\n IgcAvatarComponent\n );\n }\n\n @property({ reflect: true, attribute: false })\n public message: IgcMessage | undefined;\n\n protected override render() {\n const containerClass = `message-container ${this.message?.sender === 'user' ? 'sent' : ''}`;\n\n return html`\n <div class=${containerClass}>\n <div class=\"bubble\">\n ${this.message?.text.trim()\n ? html` <div>${renderMarkdown(this.message?.text)}</div>`\n : ''}\n ${this.message?.attachments && this.message?.attachments.length > 0\n ? html`<igc-message-attachments\n .attachments=${this.message?.attachments}\n >\n </igc-message-attachments>`\n : ''}\n ${this._chat?.options?.templates?.messageActionsTemplate &&\n this.message\n ? this._chat.options.templates.messageActionsTemplate(this.message)\n : ''}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-chat-message': IgcChatMessageComponent;\n }\n}\n"]}
@@ -0,0 +1,41 @@
1
+ import { LitElement } from 'lit';
2
+ import type { Constructor } from '../common/mixins/constructor.js';
3
+ import type { IgcChatOptions, IgcMessage, IgcMessageAttachment } from './types.js';
4
+ export interface IgcChatComponentEventMap {
5
+ igcMessageCreated: CustomEvent<IgcMessage>;
6
+ igcAttachmentClick: CustomEvent<IgcMessageAttachment>;
7
+ igcAttachmentChange: CustomEvent<IgcMessageAttachment>;
8
+ igcTypingChange: CustomEvent<boolean>;
9
+ igcInputFocus: CustomEvent<void>;
10
+ igcInputBlur: CustomEvent<void>;
11
+ igcInputChange: CustomEvent<string>;
12
+ igcMessageCopied: CustomEvent<IgcMessage>;
13
+ }
14
+ declare const IgcChatComponent_base: Constructor<import("../common/mixins/event-emitter.js").EventEmitterInterface<IgcChatComponentEventMap>> & Constructor<LitElement>;
15
+ /**
16
+ *
17
+ * @element igc-chat
18
+ *
19
+ */
20
+ export default class IgcChatComponent extends IgcChatComponent_base {
21
+ /** @private */
22
+ static readonly tagName = "igc-chat";
23
+ static styles: import("lit").CSSResult;
24
+ static register(): void;
25
+ private _context;
26
+ messages: IgcMessage[];
27
+ options?: IgcChatOptions;
28
+ protected contextChanged(): void;
29
+ connectedCallback(): void;
30
+ disconnectedCallback(): void;
31
+ private handleSendMessage;
32
+ private handleAttachmentClick;
33
+ protected firstUpdated(): void;
34
+ protected render(): import("lit-html").TemplateResult<1>;
35
+ }
36
+ declare global {
37
+ interface HTMLElementTagNameMap {
38
+ 'igc-chat': IgcChatComponent;
39
+ }
40
+ }
41
+ export {};