igniteui-webcomponents 6.3.0-alpha.1 → 6.3.0-beta.1

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 (561) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/components/accordion/accordion.js +3 -4
  3. package/components/accordion/accordion.js.map +1 -1
  4. package/components/accordion/themes/accordion.base.css.js +1 -1
  5. package/components/accordion/themes/accordion.base.css.js.map +1 -1
  6. package/components/avatar/avatar.js +3 -4
  7. package/components/avatar/avatar.js.map +1 -1
  8. package/components/badge/badge.js +3 -4
  9. package/components/badge/badge.js.map +1 -1
  10. package/components/banner/banner.js +3 -4
  11. package/components/banner/banner.js.map +1 -1
  12. package/components/banner/themes/banner.base.css.js +1 -1
  13. package/components/banner/themes/banner.base.css.js.map +1 -1
  14. package/components/banner/themes/shared/banner.bootstrap.css.js +1 -1
  15. package/components/banner/themes/shared/banner.bootstrap.css.js.map +1 -1
  16. package/components/banner/themes/shared/banner.fluent.css.js +1 -1
  17. package/components/banner/themes/shared/banner.fluent.css.js.map +1 -1
  18. package/components/banner/themes/shared/banner.indigo.css.js +1 -1
  19. package/components/banner/themes/shared/banner.indigo.css.js.map +1 -1
  20. package/components/banner/themes/shared/banner.material.css.js +1 -1
  21. package/components/banner/themes/shared/banner.material.css.js.map +1 -1
  22. package/components/button/button-base.js +1 -1
  23. package/components/button/button-base.js.map +1 -1
  24. package/components/button/button.js +3 -4
  25. package/components/button/button.js.map +1 -1
  26. package/components/button/icon-button.js +3 -4
  27. package/components/button/icon-button.js.map +1 -1
  28. package/components/button/themes/button/button.base.css.js +1 -1
  29. package/components/button/themes/button/button.base.css.js.map +1 -1
  30. package/components/button/themes/button/shared/button.common.css.js +1 -1
  31. package/components/button/themes/button/shared/button.common.css.js.map +1 -1
  32. package/components/button/themes/button/shared/button.fluent.css.js +1 -1
  33. package/components/button/themes/button/shared/button.fluent.css.js.map +1 -1
  34. package/components/button/themes/button/shared/button.indigo.css.js +1 -1
  35. package/components/button/themes/button/shared/button.indigo.css.js.map +1 -1
  36. package/components/button-group/button-group.js +3 -4
  37. package/components/button-group/button-group.js.map +1 -1
  38. package/components/button-group/toggle-button.js +4 -3
  39. package/components/button-group/toggle-button.js.map +1 -1
  40. package/components/calendar/calendar.d.ts +1 -1
  41. package/components/calendar/calendar.js +3 -4
  42. package/components/calendar/calendar.js.map +1 -1
  43. package/components/calendar/days-view/days-view.js +4 -3
  44. package/components/calendar/days-view/days-view.js.map +1 -1
  45. package/components/calendar/months-view/months-view.js +4 -3
  46. package/components/calendar/months-view/months-view.js.map +1 -1
  47. package/components/calendar/themes/calendar.base.css.js +1 -1
  48. package/components/calendar/themes/calendar.base.css.js.map +1 -1
  49. package/components/calendar/themes/days-view.base.css.js +1 -1
  50. package/components/calendar/themes/days-view.base.css.js.map +1 -1
  51. package/components/calendar/themes/shared/bootstrap/calendar.bootstrap.css.js +1 -1
  52. package/components/calendar/themes/shared/bootstrap/calendar.bootstrap.css.js.map +1 -1
  53. package/components/calendar/themes/shared/bootstrap/days-view.bootstrap.css.js +1 -1
  54. package/components/calendar/themes/shared/bootstrap/days-view.bootstrap.css.js.map +1 -1
  55. package/components/calendar/themes/shared/bootstrap/year-month-view.bootstrap.css.js +1 -1
  56. package/components/calendar/themes/shared/bootstrap/year-month-view.bootstrap.css.js.map +1 -1
  57. package/components/calendar/themes/shared/fluent/calendar.fluent.css.js +1 -1
  58. package/components/calendar/themes/shared/fluent/calendar.fluent.css.js.map +1 -1
  59. package/components/calendar/themes/shared/indigo/calendar.indigo.css.js +1 -1
  60. package/components/calendar/themes/shared/indigo/calendar.indigo.css.js.map +1 -1
  61. package/components/calendar/themes/shared/material/calendar.material.css.js +1 -1
  62. package/components/calendar/themes/shared/material/calendar.material.css.js.map +1 -1
  63. package/components/calendar/themes/year-month-view.base.css.js +1 -1
  64. package/components/calendar/themes/year-month-view.base.css.js.map +1 -1
  65. package/components/calendar/years-view/years-view.js +4 -3
  66. package/components/calendar/years-view/years-view.js.map +1 -1
  67. package/components/card/card.actions.js +3 -4
  68. package/components/card/card.actions.js.map +1 -1
  69. package/components/card/card.content.js +3 -4
  70. package/components/card/card.content.js.map +1 -1
  71. package/components/card/card.header.js +3 -4
  72. package/components/card/card.header.js.map +1 -1
  73. package/components/card/card.js +3 -4
  74. package/components/card/card.js.map +1 -1
  75. package/components/card/card.media.js +3 -4
  76. package/components/card/card.media.js.map +1 -1
  77. package/components/card/themes/card.actions.base.css.js +1 -1
  78. package/components/card/themes/card.actions.base.css.js.map +1 -1
  79. package/components/card/themes/card.content.base.css.js +1 -1
  80. package/components/card/themes/card.content.base.css.js.map +1 -1
  81. package/components/card/themes/card.header.base.css.js +1 -1
  82. package/components/card/themes/card.header.base.css.js.map +1 -1
  83. package/components/card/themes/shared/actions/card.actions.bootstrap.css.js +1 -1
  84. package/components/card/themes/shared/actions/card.actions.bootstrap.css.js.map +1 -1
  85. package/components/card/themes/shared/actions/card.actions.indigo.css.js +1 -1
  86. package/components/card/themes/shared/actions/card.actions.indigo.css.js.map +1 -1
  87. package/components/card/themes/shared/container/card.bootstrap.css.js +1 -1
  88. package/components/card/themes/shared/container/card.bootstrap.css.js.map +1 -1
  89. package/components/card/themes/shared/container/card.indigo.css.js +1 -1
  90. package/components/card/themes/shared/container/card.indigo.css.js.map +1 -1
  91. package/components/card/themes/shared/content/card.content.bootstrap.css.js +1 -1
  92. package/components/card/themes/shared/content/card.content.bootstrap.css.js.map +1 -1
  93. package/components/card/themes/shared/header/card.header.fluent.css.js +1 -1
  94. package/components/card/themes/shared/header/card.header.fluent.css.js.map +1 -1
  95. package/components/card/themes/shared/header/card.header.indigo.css.js +1 -1
  96. package/components/card/themes/shared/header/card.header.indigo.css.js.map +1 -1
  97. package/components/carousel/carousel-indicator-container.js +3 -4
  98. package/components/carousel/carousel-indicator-container.js.map +1 -1
  99. package/components/carousel/carousel-indicator.js +3 -4
  100. package/components/carousel/carousel-indicator.js.map +1 -1
  101. package/components/carousel/carousel-slide.js +3 -4
  102. package/components/carousel/carousel-slide.js.map +1 -1
  103. package/components/carousel/carousel.js +3 -4
  104. package/components/carousel/carousel.js.map +1 -1
  105. package/components/carousel/themes/carousel.base.css.js +1 -1
  106. package/components/carousel/themes/carousel.base.css.js.map +1 -1
  107. package/components/carousel/themes/shared/carousel.indigo.css.js +1 -1
  108. package/components/carousel/themes/shared/carousel.indigo.css.js.map +1 -1
  109. package/components/chat/chat-input.d.ts +47 -11
  110. package/components/chat/chat-input.js +192 -78
  111. package/components/chat/chat-input.js.map +1 -1
  112. package/components/chat/chat-message.d.ts +12 -12
  113. package/components/chat/chat-message.js +129 -31
  114. package/components/chat/chat-message.js.map +1 -1
  115. package/components/chat/chat-state.d.ts +21 -141
  116. package/components/chat/chat-state.js +64 -408
  117. package/components/chat/chat-state.js.map +1 -1
  118. package/components/chat/chat.d.ts +39 -69
  119. package/components/chat/chat.js +188 -132
  120. package/components/chat/chat.js.map +1 -1
  121. package/components/chat/extras/markdown-renderer.d.ts +26 -0
  122. package/components/chat/extras/markdown-renderer.js +44 -0
  123. package/components/chat/extras/markdown-renderer.js.map +1 -0
  124. package/components/chat/message-attachments.d.ts +21 -3
  125. package/components/chat/message-attachments.js +105 -20
  126. package/components/chat/message-attachments.js.map +1 -1
  127. package/components/chat/themes/attachments.d.ts +2 -0
  128. package/components/chat/themes/attachments.js +14 -0
  129. package/components/chat/themes/attachments.js.map +1 -0
  130. package/components/chat/themes/chat.base.css.js +1 -1
  131. package/components/chat/themes/chat.base.css.js.map +1 -1
  132. package/components/chat/themes/dark/chat.indigo.css.js +1 -1
  133. package/components/chat/themes/dark/chat.indigo.css.js.map +1 -1
  134. package/components/chat/themes/input.base.css.js +1 -1
  135. package/components/chat/themes/input.base.css.js.map +1 -1
  136. package/components/chat/themes/light/chat.indigo.css.js +1 -1
  137. package/components/chat/themes/light/chat.indigo.css.js.map +1 -1
  138. package/components/chat/themes/light/chat.shared.css.js +1 -1
  139. package/components/chat/themes/light/chat.shared.css.js.map +1 -1
  140. package/components/chat/themes/message-attachments.base.css.js +1 -1
  141. package/components/chat/themes/message-attachments.base.css.js.map +1 -1
  142. package/components/chat/themes/message.base.css.js +1 -1
  143. package/components/chat/themes/message.base.css.js.map +1 -1
  144. package/components/chat/themes/shared/chat.bootstrap.css.js +1 -1
  145. package/components/chat/themes/shared/chat.bootstrap.css.js.map +1 -1
  146. package/components/chat/themes/shared/chat.common.css.js +1 -1
  147. package/components/chat/themes/shared/chat.common.css.js.map +1 -1
  148. package/components/chat/themes/shared/chat.fluent.css.js +3 -0
  149. package/components/chat/themes/shared/chat.fluent.css.js.map +1 -0
  150. package/components/chat/themes/shared/chat.indigo.css.js +1 -1
  151. package/components/chat/themes/shared/chat.indigo.css.js.map +1 -1
  152. package/components/chat/themes/shared/input/input.bootstrap.css.js +1 -1
  153. package/components/chat/themes/shared/input/input.bootstrap.css.js.map +1 -1
  154. package/components/chat/themes/shared/input/input.fluent.css.js +1 -1
  155. package/components/chat/themes/shared/input/input.fluent.css.js.map +1 -1
  156. package/components/chat/themes/shared/input/input.indigo.css.js +1 -1
  157. package/components/chat/themes/shared/input/input.indigo.css.js.map +1 -1
  158. package/components/chat/themes/shared/input/input.material.css.js +1 -1
  159. package/components/chat/themes/shared/input/input.material.css.js.map +1 -1
  160. package/components/chat/themes/shared/message-attachments/message-attachments.common.css.js +3 -0
  161. package/components/chat/themes/shared/message-attachments/message-attachments.common.css.js.map +1 -0
  162. package/components/chat/themes/shared/message-attachments/message-attachments.indigo.css.js +3 -0
  163. package/components/chat/themes/shared/message-attachments/message-attachments.indigo.css.js.map +1 -0
  164. package/components/chat/themes/themes.js +3 -2
  165. package/components/chat/themes/themes.js.map +1 -1
  166. package/components/chat/types.d.ts +37 -133
  167. package/components/chat/types.js +1 -14
  168. package/components/chat/types.js.map +1 -1
  169. package/components/chat/utils.d.ts +17 -0
  170. package/components/chat/utils.js +94 -0
  171. package/components/chat/utils.js.map +1 -0
  172. package/components/checkbox/checkbox-base.d.ts +1 -1
  173. package/components/checkbox/checkbox.js +3 -4
  174. package/components/checkbox/checkbox.js.map +1 -1
  175. package/components/checkbox/switch.js +3 -4
  176. package/components/checkbox/switch.js.map +1 -1
  177. package/components/checkbox/themes/shared/checkbox/checkbox.bootstrap.css.js +1 -1
  178. package/components/checkbox/themes/shared/checkbox/checkbox.bootstrap.css.js.map +1 -1
  179. package/components/checkbox/themes/shared/checkbox/checkbox.fluent.css.js +1 -1
  180. package/components/checkbox/themes/shared/checkbox/checkbox.fluent.css.js.map +1 -1
  181. package/components/checkbox/themes/shared/checkbox/checkbox.indigo.css.js +1 -1
  182. package/components/checkbox/themes/shared/checkbox/checkbox.indigo.css.js.map +1 -1
  183. package/components/checkbox/themes/shared/checkbox/checkbox.material.css.js +1 -1
  184. package/components/checkbox/themes/shared/checkbox/checkbox.material.css.js.map +1 -1
  185. package/components/chip/chip.js +3 -4
  186. package/components/chip/chip.js.map +1 -1
  187. package/components/chip/themes/shared/chip.indigo.css.js +1 -1
  188. package/components/chip/themes/shared/chip.indigo.css.js.map +1 -1
  189. package/components/combo/combo-header.js +3 -4
  190. package/components/combo/combo-header.js.map +1 -1
  191. package/components/combo/combo-item.js +3 -4
  192. package/components/combo/combo-item.js.map +1 -1
  193. package/components/combo/combo-list.js +2 -3
  194. package/components/combo/combo-list.js.map +1 -1
  195. package/components/combo/combo.js +4 -3
  196. package/components/combo/combo.js.map +1 -1
  197. package/components/combo/themes/combo-item.base.css.js +1 -1
  198. package/components/combo/themes/combo-item.base.css.js.map +1 -1
  199. package/components/combo/themes/combo.base.css.js +1 -1
  200. package/components/combo/themes/combo.base.css.js.map +1 -1
  201. package/components/combo/themes/shared/combo.bootstrap.css.js +1 -1
  202. package/components/combo/themes/shared/combo.bootstrap.css.js.map +1 -1
  203. package/components/combo/themes/shared/combo.fluent.css.js +1 -1
  204. package/components/combo/themes/shared/combo.fluent.css.js.map +1 -1
  205. package/components/combo/themes/shared/combo.indigo.css.js +1 -1
  206. package/components/combo/themes/shared/combo.indigo.css.js.map +1 -1
  207. package/components/combo/themes/shared/combo.material.css.js +1 -1
  208. package/components/combo/themes/shared/combo.material.css.js.map +1 -1
  209. package/components/common/context.d.ts +4 -1
  210. package/components/common/context.js +2 -1
  211. package/components/common/context.js.map +1 -1
  212. package/components/common/controllers/focus-ring.js +5 -5
  213. package/components/common/controllers/focus-ring.js.map +1 -1
  214. package/components/common/controllers/key-bindings.js +4 -4
  215. package/components/common/controllers/key-bindings.js.map +1 -1
  216. package/components/common/i18n/chat.resources.d.ts +4 -4
  217. package/components/common/i18n/chat.resources.js +4 -4
  218. package/components/common/i18n/chat.resources.js.map +1 -1
  219. package/components/common/mixins/forms/associated.js +1 -1
  220. package/components/common/mixins/forms/associated.js.map +1 -1
  221. package/components/common/mixins/forms/form-value.js +1 -1
  222. package/components/common/mixins/forms/form-value.js.map +1 -1
  223. package/components/common/part-map.d.ts +1 -1
  224. package/components/common/util.d.ts +8 -0
  225. package/components/common/util.js +33 -1
  226. package/components/common/util.js.map +1 -1
  227. package/components/date-picker/date-picker.js +5 -4
  228. package/components/date-picker/date-picker.js.map +1 -1
  229. package/components/date-picker/themes/date-picker.base.css.js +1 -1
  230. package/components/date-picker/themes/date-picker.base.css.js.map +1 -1
  231. package/components/date-picker/themes/shared/date-picker.bootstrap.css.js +1 -1
  232. package/components/date-picker/themes/shared/date-picker.bootstrap.css.js.map +1 -1
  233. package/components/date-picker/themes/shared/date-picker.common.css.js +1 -1
  234. package/components/date-picker/themes/shared/date-picker.common.css.js.map +1 -1
  235. package/components/date-picker/themes/shared/date-picker.fluent.css.js +1 -1
  236. package/components/date-picker/themes/shared/date-picker.fluent.css.js.map +1 -1
  237. package/components/date-picker/themes/shared/date-picker.indigo.css.js +1 -1
  238. package/components/date-picker/themes/shared/date-picker.indigo.css.js.map +1 -1
  239. package/components/date-range-picker/date-range-picker.base.css.js +1 -1
  240. package/components/date-range-picker/date-range-picker.base.css.js.map +1 -1
  241. package/components/date-range-picker/date-range-picker.d.ts +1 -1
  242. package/components/date-range-picker/date-range-picker.js +5 -4
  243. package/components/date-range-picker/date-range-picker.js.map +1 -1
  244. package/components/date-range-picker/predefined-ranges-area.base.css.js +1 -1
  245. package/components/date-range-picker/predefined-ranges-area.base.css.js.map +1 -1
  246. package/components/date-range-picker/predefined-ranges-area.js +3 -4
  247. package/components/date-range-picker/predefined-ranges-area.js.map +1 -1
  248. package/components/date-range-picker/themes/shared/date-range-picker.bootstrap.css.js +1 -1
  249. package/components/date-range-picker/themes/shared/date-range-picker.bootstrap.css.js.map +1 -1
  250. package/components/date-range-picker/themes/shared/date-range-picker.common.css.js +1 -1
  251. package/components/date-range-picker/themes/shared/date-range-picker.common.css.js.map +1 -1
  252. package/components/date-range-picker/themes/shared/date-range-picker.fluent.css.js +1 -1
  253. package/components/date-range-picker/themes/shared/date-range-picker.fluent.css.js.map +1 -1
  254. package/components/date-range-picker/themes/shared/date-range-picker.indigo.css.js +1 -1
  255. package/components/date-range-picker/themes/shared/date-range-picker.indigo.css.js.map +1 -1
  256. package/components/date-time-input/date-time-input.js +2 -3
  257. package/components/date-time-input/date-time-input.js.map +1 -1
  258. package/components/date-time-input/date-util.js +11 -11
  259. package/components/date-time-input/date-util.js.map +1 -1
  260. package/components/dialog/dialog.js +3 -4
  261. package/components/dialog/dialog.js.map +1 -1
  262. package/components/dialog/themes/dialog.base.css.js +1 -1
  263. package/components/dialog/themes/dialog.base.css.js.map +1 -1
  264. package/components/dialog/themes/shared/dialog.bootstrap.css.js +1 -1
  265. package/components/dialog/themes/shared/dialog.bootstrap.css.js.map +1 -1
  266. package/components/dialog/themes/shared/dialog.common.css.js +1 -1
  267. package/components/dialog/themes/shared/dialog.common.css.js.map +1 -1
  268. package/components/dialog/themes/shared/dialog.fluent.css.js +1 -1
  269. package/components/dialog/themes/shared/dialog.fluent.css.js.map +1 -1
  270. package/components/dialog/themes/shared/dialog.indigo.css.js +1 -1
  271. package/components/dialog/themes/shared/dialog.indigo.css.js.map +1 -1
  272. package/components/divider/divider.js +3 -4
  273. package/components/divider/divider.js.map +1 -1
  274. package/components/dropdown/dropdown-group.js +3 -4
  275. package/components/dropdown/dropdown-group.js.map +1 -1
  276. package/components/dropdown/dropdown-header.js +3 -4
  277. package/components/dropdown/dropdown-header.js.map +1 -1
  278. package/components/dropdown/dropdown-item.js +3 -4
  279. package/components/dropdown/dropdown-item.js.map +1 -1
  280. package/components/dropdown/dropdown.js +4 -3
  281. package/components/dropdown/dropdown.js.map +1 -1
  282. package/components/dropdown/themes/dropdown-item.base.css.js +1 -1
  283. package/components/dropdown/themes/dropdown-item.base.css.js.map +1 -1
  284. package/components/dropdown/themes/shared/dropdown.indigo.css.js +1 -1
  285. package/components/dropdown/themes/shared/dropdown.indigo.css.js.map +1 -1
  286. package/components/dropdown/themes/shared/item/dropdown-item.indigo.css.js +1 -1
  287. package/components/dropdown/themes/shared/item/dropdown-item.indigo.css.js.map +1 -1
  288. package/components/expansion-panel/expansion-panel.js +3 -4
  289. package/components/expansion-panel/expansion-panel.js.map +1 -1
  290. package/components/expansion-panel/themes/expansion-panel.base.css.js +1 -1
  291. package/components/expansion-panel/themes/expansion-panel.base.css.js.map +1 -1
  292. package/components/expansion-panel/themes/shared/expansion-panel.indigo.css.js +1 -1
  293. package/components/expansion-panel/themes/shared/expansion-panel.indigo.css.js.map +1 -1
  294. package/components/file-input/file-input.d.ts +0 -4
  295. package/components/file-input/file-input.js +15 -19
  296. package/components/file-input/file-input.js.map +1 -1
  297. package/components/file-input/themes/shared/file-input.material.css.js +1 -1
  298. package/components/file-input/themes/shared/file-input.material.css.js.map +1 -1
  299. package/components/focus-trap/focus-trap.js +7 -8
  300. package/components/focus-trap/focus-trap.js.map +1 -1
  301. package/components/icon/icon-references.js +208 -0
  302. package/components/icon/icon-references.js.map +1 -1
  303. package/components/icon/icon-state.broadcast.js +1 -1
  304. package/components/icon/icon-state.broadcast.js.map +1 -1
  305. package/components/icon/icon.js +3 -4
  306. package/components/icon/icon.js.map +1 -1
  307. package/components/icon/internal-icons-lib.js +105 -0
  308. package/components/icon/internal-icons-lib.js.map +1 -1
  309. package/components/input/input-base.js +4 -3
  310. package/components/input/input-base.js.map +1 -1
  311. package/components/input/input.d.ts +0 -4
  312. package/components/input/input.js +11 -14
  313. package/components/input/input.js.map +1 -1
  314. package/components/input/themes/shared/input.common.css.js +1 -1
  315. package/components/input/themes/shared/input.common.css.js.map +1 -1
  316. package/components/input/themes/shared/input.fluent.css.js +1 -1
  317. package/components/input/themes/shared/input.fluent.css.js.map +1 -1
  318. package/components/input/themes/shared/input.indigo.css.js +1 -1
  319. package/components/input/themes/shared/input.indigo.css.js.map +1 -1
  320. package/components/input/themes/shared/input.material.css.js +1 -1
  321. package/components/input/themes/shared/input.material.css.js.map +1 -1
  322. package/components/list/list-header.js +3 -4
  323. package/components/list/list-header.js.map +1 -1
  324. package/components/list/list-item.js +3 -4
  325. package/components/list/list-item.js.map +1 -1
  326. package/components/list/list.js +3 -4
  327. package/components/list/list.js.map +1 -1
  328. package/components/list/themes/dark/container/list.indigo.css.js +1 -1
  329. package/components/list/themes/dark/container/list.indigo.css.js.map +1 -1
  330. package/components/list/themes/dark/header/list-header.indigo.css.js +1 -1
  331. package/components/list/themes/dark/header/list-header.indigo.css.js.map +1 -1
  332. package/components/list/themes/dark/item/list-item.indigo.css.js +1 -1
  333. package/components/list/themes/dark/item/list-item.indigo.css.js.map +1 -1
  334. package/components/list/themes/light/container/list.indigo.css.js +1 -1
  335. package/components/list/themes/light/container/list.indigo.css.js.map +1 -1
  336. package/components/list/themes/light/header/list-header.indigo.css.js +1 -1
  337. package/components/list/themes/light/header/list-header.indigo.css.js.map +1 -1
  338. package/components/list/themes/light/item/list-item.indigo.css.js +1 -1
  339. package/components/list/themes/light/item/list-item.indigo.css.js.map +1 -1
  340. package/components/mask-input/mask-input.js +2 -3
  341. package/components/mask-input/mask-input.js.map +1 -1
  342. package/components/nav-drawer/nav-drawer-header-item.js +3 -4
  343. package/components/nav-drawer/nav-drawer-header-item.js.map +1 -1
  344. package/components/nav-drawer/nav-drawer-item.js +3 -4
  345. package/components/nav-drawer/nav-drawer-item.js.map +1 -1
  346. package/components/nav-drawer/nav-drawer.js +3 -4
  347. package/components/nav-drawer/nav-drawer.js.map +1 -1
  348. package/components/nav-drawer/themes/shared/container/nav-drawer.bootstrap.css.js +1 -1
  349. package/components/nav-drawer/themes/shared/container/nav-drawer.bootstrap.css.js.map +1 -1
  350. package/components/nav-drawer/themes/shared/container/nav-drawer.indigo.css.js +1 -1
  351. package/components/nav-drawer/themes/shared/container/nav-drawer.indigo.css.js.map +1 -1
  352. package/components/nav-drawer/themes/shared/container/nav-drawer.material.css.js +1 -1
  353. package/components/nav-drawer/themes/shared/container/nav-drawer.material.css.js.map +1 -1
  354. package/components/nav-drawer/themes/shared/header-item/header-item.bootstrap.css.js +1 -1
  355. package/components/nav-drawer/themes/shared/header-item/header-item.bootstrap.css.js.map +1 -1
  356. package/components/nav-drawer/themes/shared/header-item/header-item.fluent.css.js +1 -1
  357. package/components/nav-drawer/themes/shared/header-item/header-item.fluent.css.js.map +1 -1
  358. package/components/nav-drawer/themes/shared/header-item/header-item.indigo.css.js +1 -1
  359. package/components/nav-drawer/themes/shared/header-item/header-item.indigo.css.js.map +1 -1
  360. package/components/nav-drawer/themes/shared/header-item/header-item.material.css.js +1 -1
  361. package/components/nav-drawer/themes/shared/header-item/header-item.material.css.js.map +1 -1
  362. package/components/nav-drawer/themes/shared/item/item.bootstrap.css.js +1 -1
  363. package/components/nav-drawer/themes/shared/item/item.bootstrap.css.js.map +1 -1
  364. package/components/nav-drawer/themes/shared/item/item.fluent.css.js +1 -1
  365. package/components/nav-drawer/themes/shared/item/item.fluent.css.js.map +1 -1
  366. package/components/nav-drawer/themes/shared/item/item.indigo.css.js +1 -1
  367. package/components/nav-drawer/themes/shared/item/item.indigo.css.js.map +1 -1
  368. package/components/nav-drawer/themes/shared/item/item.material.css.js +1 -1
  369. package/components/nav-drawer/themes/shared/item/item.material.css.js.map +1 -1
  370. package/components/navbar/navbar.js +3 -4
  371. package/components/navbar/navbar.js.map +1 -1
  372. package/components/navbar/themes/navbar.base.css.js +1 -1
  373. package/components/navbar/themes/navbar.base.css.js.map +1 -1
  374. package/components/navbar/themes/shared/navbar.bootstrap.css.js +1 -1
  375. package/components/navbar/themes/shared/navbar.bootstrap.css.js.map +1 -1
  376. package/components/navbar/themes/shared/navbar.indigo.css.js +1 -1
  377. package/components/navbar/themes/shared/navbar.indigo.css.js.map +1 -1
  378. package/components/popover/popover.js +9 -10
  379. package/components/popover/popover.js.map +1 -1
  380. package/components/progress/circular-gradient.js +2 -3
  381. package/components/progress/circular-gradient.js.map +1 -1
  382. package/components/progress/circular-progress.js +3 -4
  383. package/components/progress/circular-progress.js.map +1 -1
  384. package/components/progress/linear-progress.js +3 -4
  385. package/components/progress/linear-progress.js.map +1 -1
  386. package/components/progress/themes/linear/shared/linear.progress.fluent.css.js +1 -1
  387. package/components/progress/themes/linear/shared/linear.progress.fluent.css.js.map +1 -1
  388. package/components/progress/themes/linear/shared/linear.progress.indigo.css.js +1 -1
  389. package/components/progress/themes/linear/shared/linear.progress.indigo.css.js.map +1 -1
  390. package/components/radio/radio.js +3 -4
  391. package/components/radio/radio.js.map +1 -1
  392. package/components/radio/themes/shared/radio.bootstrap.css.js +1 -1
  393. package/components/radio/themes/shared/radio.bootstrap.css.js.map +1 -1
  394. package/components/radio/themes/shared/radio.fluent.css.js +1 -1
  395. package/components/radio/themes/shared/radio.fluent.css.js.map +1 -1
  396. package/components/radio/themes/shared/radio.indigo.css.js +1 -1
  397. package/components/radio/themes/shared/radio.indigo.css.js.map +1 -1
  398. package/components/radio/themes/shared/radio.material.css.js +1 -1
  399. package/components/radio/themes/shared/radio.material.css.js.map +1 -1
  400. package/components/radio-group/radio-group.js +3 -4
  401. package/components/radio-group/radio-group.js.map +1 -1
  402. package/components/radio-group/themes/radio-group.base.css.js +1 -1
  403. package/components/radio-group/themes/radio-group.base.css.js.map +1 -1
  404. package/components/radio-group/themes/shared/radio-group.bootstrap.css.js +1 -1
  405. package/components/radio-group/themes/shared/radio-group.bootstrap.css.js.map +1 -1
  406. package/components/radio-group/themes/shared/radio-group.fluent.css.js +1 -1
  407. package/components/radio-group/themes/shared/radio-group.fluent.css.js.map +1 -1
  408. package/components/radio-group/themes/shared/radio-group.indigo.css.js +1 -1
  409. package/components/radio-group/themes/shared/radio-group.indigo.css.js.map +1 -1
  410. package/components/radio-group/themes/shared/radio-group.material.css.js +1 -1
  411. package/components/radio-group/themes/shared/radio-group.material.css.js.map +1 -1
  412. package/components/rating/rating-symbol.js +3 -4
  413. package/components/rating/rating-symbol.js.map +1 -1
  414. package/components/rating/rating.js +3 -4
  415. package/components/rating/rating.js.map +1 -1
  416. package/components/rating/themes/rating.base.css.js +1 -1
  417. package/components/rating/themes/rating.base.css.js.map +1 -1
  418. package/components/rating/themes/shared/rating.indigo.css.js +1 -1
  419. package/components/rating/themes/shared/rating.indigo.css.js.map +1 -1
  420. package/components/resize-container/resize-container.d.ts +1 -1
  421. package/components/resize-container/resize-container.js +3 -4
  422. package/components/resize-container/resize-container.js.map +1 -1
  423. package/components/ripple/ripple.js +3 -4
  424. package/components/ripple/ripple.js.map +1 -1
  425. package/components/select/select-group.js +3 -4
  426. package/components/select/select-group.js.map +1 -1
  427. package/components/select/select-header.js +3 -4
  428. package/components/select/select-header.js.map +1 -1
  429. package/components/select/select-item.js +3 -4
  430. package/components/select/select-item.js.map +1 -1
  431. package/components/select/select.js +4 -4
  432. package/components/select/select.js.map +1 -1
  433. package/components/select/themes/shared/select.bootstrap.css.js +1 -1
  434. package/components/select/themes/shared/select.bootstrap.css.js.map +1 -1
  435. package/components/select/themes/shared/select.fluent.css.js +1 -1
  436. package/components/select/themes/shared/select.fluent.css.js.map +1 -1
  437. package/components/select/themes/shared/select.indigo.css.js +1 -1
  438. package/components/select/themes/shared/select.indigo.css.js.map +1 -1
  439. package/components/select/themes/shared/select.material.css.js +1 -1
  440. package/components/select/themes/shared/select.material.css.js.map +1 -1
  441. package/components/slider/range-slider.js +2 -3
  442. package/components/slider/range-slider.js.map +1 -1
  443. package/components/slider/slider-base.js +1 -1
  444. package/components/slider/slider-base.js.map +1 -1
  445. package/components/slider/slider-label.js +7 -8
  446. package/components/slider/slider-label.js.map +1 -1
  447. package/components/slider/slider.js +2 -3
  448. package/components/slider/slider.js.map +1 -1
  449. package/components/slider/themes/shared/slider.common.css.js +1 -1
  450. package/components/slider/themes/shared/slider.common.css.js.map +1 -1
  451. package/components/slider/themes/slider.base.css.js +1 -1
  452. package/components/slider/themes/slider.base.css.js.map +1 -1
  453. package/components/snackbar/snackbar.js +3 -4
  454. package/components/snackbar/snackbar.js.map +1 -1
  455. package/components/snackbar/themes/shared/snackbar.indigo.css.js +1 -1
  456. package/components/snackbar/themes/shared/snackbar.indigo.css.js.map +1 -1
  457. package/components/snackbar/themes/snackbar.base.css.js +1 -1
  458. package/components/snackbar/themes/snackbar.base.css.js.map +1 -1
  459. package/components/stepper/step.d.ts +1 -1
  460. package/components/stepper/step.js +3 -4
  461. package/components/stepper/step.js.map +1 -1
  462. package/components/stepper/stepper.js +3 -4
  463. package/components/stepper/stepper.js.map +1 -1
  464. package/components/tabs/tab-dom.js +1 -1
  465. package/components/tabs/tab-dom.js.map +1 -1
  466. package/components/tabs/tab.js +4 -5
  467. package/components/tabs/tab.js.map +1 -1
  468. package/components/tabs/tabs.js +3 -4
  469. package/components/tabs/tabs.js.map +1 -1
  470. package/components/tabs/themes/shared/tab/tab.bootstrap.css.js +1 -1
  471. package/components/tabs/themes/shared/tab/tab.bootstrap.css.js.map +1 -1
  472. package/components/tabs/themes/shared/tab/tab.fluent.css.js +1 -1
  473. package/components/tabs/themes/shared/tab/tab.fluent.css.js.map +1 -1
  474. package/components/tabs/themes/shared/tab/tab.indigo.css.js +1 -1
  475. package/components/tabs/themes/shared/tab/tab.indigo.css.js.map +1 -1
  476. package/components/tabs/themes/shared/tab/tab.material.css.js +1 -1
  477. package/components/tabs/themes/shared/tab/tab.material.css.js.map +1 -1
  478. package/components/textarea/textarea.d.ts +1 -1
  479. package/components/textarea/textarea.js +4 -3
  480. package/components/textarea/textarea.js.map +1 -1
  481. package/components/textarea/themes/shared/textarea.bootstrap.css.js +1 -1
  482. package/components/textarea/themes/shared/textarea.bootstrap.css.js.map +1 -1
  483. package/components/textarea/themes/shared/textarea.fluent.css.js +1 -1
  484. package/components/textarea/themes/shared/textarea.fluent.css.js.map +1 -1
  485. package/components/textarea/themes/shared/textarea.indigo.css.js +1 -1
  486. package/components/textarea/themes/shared/textarea.indigo.css.js.map +1 -1
  487. package/components/textarea/themes/shared/textarea.material.css.js +1 -1
  488. package/components/textarea/themes/shared/textarea.material.css.js.map +1 -1
  489. package/components/textarea/themes/textarea.base.css.js +1 -1
  490. package/components/textarea/themes/textarea.base.css.js.map +1 -1
  491. package/components/tile-manager/resize-state.js +1 -1
  492. package/components/tile-manager/resize-state.js.map +1 -1
  493. package/components/tile-manager/tile-manager.js +4 -3
  494. package/components/tile-manager/tile-manager.js.map +1 -1
  495. package/components/tile-manager/tile.js +3 -4
  496. package/components/tile-manager/tile.js.map +1 -1
  497. package/components/toast/themes/shared/toast.bootstrap.css.js +1 -1
  498. package/components/toast/themes/shared/toast.bootstrap.css.js.map +1 -1
  499. package/components/toast/themes/shared/toast.common.css.js +1 -1
  500. package/components/toast/themes/shared/toast.common.css.js.map +1 -1
  501. package/components/toast/themes/shared/toast.fluent.css.js +1 -1
  502. package/components/toast/themes/shared/toast.fluent.css.js.map +1 -1
  503. package/components/toast/themes/toast.base.css.js +1 -1
  504. package/components/toast/themes/toast.base.css.js.map +1 -1
  505. package/components/toast/toast.js +3 -4
  506. package/components/toast/toast.js.map +1 -1
  507. package/components/tooltip/controller.js +4 -4
  508. package/components/tooltip/controller.js.map +1 -1
  509. package/components/tooltip/themes/tooltip.base.css.js +1 -1
  510. package/components/tooltip/themes/tooltip.base.css.js.map +1 -1
  511. package/components/tooltip/tooltip.js +3 -4
  512. package/components/tooltip/tooltip.js.map +1 -1
  513. package/components/tree/themes/item.base.css.js +1 -1
  514. package/components/tree/themes/item.base.css.js.map +1 -1
  515. package/components/tree/themes/shared/item.common.css.js +1 -1
  516. package/components/tree/themes/shared/item.common.css.js.map +1 -1
  517. package/components/tree/themes/shared/item.indigo.css.js +1 -1
  518. package/components/tree/themes/shared/item.indigo.css.js.map +1 -1
  519. package/components/tree/themes/shared/item.material.css.js +1 -1
  520. package/components/tree/themes/shared/item.material.css.js.map +1 -1
  521. package/components/tree/tree-item.js +3 -4
  522. package/components/tree/tree-item.js.map +1 -1
  523. package/components/tree/tree.js +4 -3
  524. package/components/tree/tree.js.map +1 -1
  525. package/components/validation-container/validation-container.js +3 -4
  526. package/components/validation-container/validation-container.js.map +1 -1
  527. package/custom-elements.json +24973 -25167
  528. package/extras/index.d.ts +1 -0
  529. package/extras/index.js +2 -0
  530. package/extras/index.js.map +1 -0
  531. package/igniteui-webcomponents.css-data.json +1 -1
  532. package/igniteui-webcomponents.html-data.json +1 -1
  533. package/index.d.ts +1 -3
  534. package/index.js +0 -2
  535. package/index.js.map +1 -1
  536. package/package.json +6 -2
  537. package/web-types.json +2 -2
  538. package/components/chat/assets/file.png +0 -0
  539. package/components/chat/assets/json.png +0 -0
  540. package/components/chat/assets/link.png +0 -0
  541. package/components/chat/chat-message-list.d.ts +0 -70
  542. package/components/chat/chat-message-list.js +0 -89
  543. package/components/chat/chat-message-list.js.map +0 -1
  544. package/components/chat/chat-renderer.d.ts +0 -14
  545. package/components/chat/chat-renderer.js +0 -39
  546. package/components/chat/chat-renderer.js.map +0 -1
  547. package/components/chat/markdown-renderer.d.ts +0 -72
  548. package/components/chat/markdown-renderer.js +0 -71
  549. package/components/chat/markdown-renderer.js.map +0 -1
  550. package/components/chat/plain-text-renderer.d.ts +0 -15
  551. package/components/chat/plain-text-renderer.js +0 -7
  552. package/components/chat/plain-text-renderer.js.map +0 -1
  553. package/components/chat/themes/message-list.base.css.js +0 -3
  554. package/components/chat/themes/message-list.base.css.js.map +0 -1
  555. package/components/chat/themes/shared/message-attachments.common.css.js +0 -3
  556. package/components/chat/themes/shared/message-attachments.common.css.js.map +0 -1
  557. package/components/chat/themes/shared/message-list.common.css.js +0 -3
  558. package/components/chat/themes/shared/message-list.common.css.js.map +0 -1
  559. /package/components/chat/themes/{message-list.base.css.d.ts → shared/chat.fluent.css.d.ts} +0 -0
  560. /package/components/chat/themes/shared/{message-attachments.common.css.d.ts → message-attachments/message-attachments.common.css.d.ts} +0 -0
  561. /package/components/chat/themes/shared/{message-list.common.css.d.ts → message-attachments/message-attachments.indigo.css.d.ts} +0 -0
@@ -1,5 +1,4 @@
1
1
  import { LitElement } from 'lit';
2
- import IgcIconButtonComponent from '../button/icon-button.js';
3
2
  /**
4
3
  * A web component that provides the input area for the `igc-chat` interface.
5
4
  *
@@ -32,19 +31,56 @@ import IgcIconButtonComponent from '../button/icon-button.js';
32
31
  export default class IgcChatInputComponent extends LitElement {
33
32
  static readonly tagName = "igc-chat-input";
34
33
  static styles: import("lit").CSSResult[];
35
- private _chatState;
36
34
  static register(): void;
37
- private _textInputElement;
38
- protected _inputAttachmentsButton: IgcIconButtonComponent;
39
- protected acceptedFilesChange(): void;
40
- private containerPart;
35
+ private readonly _defaults;
36
+ private readonly _state;
37
+ private readonly _userInputState;
38
+ private readonly _textInputElement;
39
+ protected readonly _fileInput: HTMLInputElement;
40
+ private _parts;
41
+ private get _acceptedTypes();
41
42
  constructor();
42
43
  protected firstUpdated(): void;
43
- private setupDragAndDrop;
44
- private handleDragEnter;
45
- private handleDragOver;
46
- private handleDragLeave;
47
- private handleDrop;
44
+ private _getRenderer;
45
+ private _handleKeydown;
46
+ private _handleFileInputClick;
47
+ private _handleFocusState;
48
+ private _handleDragEnter;
49
+ private _handleDragOver;
50
+ private _handleDragLeave;
51
+ private _handleDrop;
52
+ /**
53
+ * Handles input text changes.
54
+ * Updates internal inputValue and emits 'igcInputChange' event.
55
+ * @param e Input event from the text area
56
+ */
57
+ private _handleInput;
58
+ private _handleFileUpload;
59
+ /**
60
+ * Default attachments area template used when no custom template is provided.
61
+ * Renders the list of input attachments as chips.
62
+ * @returns TemplateResult containing the attachments area
63
+ */
64
+ private _renderAttachmentsArea;
65
+ /**
66
+ * Default text area template used when no custom template is provided.
67
+ * Renders a text area for user input.
68
+ * @returns TemplateResult containing the text area
69
+ */
70
+ private _renderTextArea;
71
+ /**
72
+ * Default file upload button template used when no custom template is provided.
73
+ * Renders a file input for attaching files.
74
+ * @returns TemplateResult containing the file upload button
75
+ */
76
+ private _renderFileUploadButton;
77
+ /**
78
+ * Default send button template used when no custom template is provided.
79
+ * Renders a send button that submits the current input value and attachments.
80
+ * @returns TemplateResult containing the send button
81
+ */
82
+ private _renderSendButton;
83
+ private _renderActionsArea;
48
84
  protected render(): import("lit-html").TemplateResult<1>;
49
85
  }
50
86
  declare global {
@@ -7,131 +7,245 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { consume } from '@lit/context';
8
8
  import { html, LitElement, nothing } from 'lit';
9
9
  import { query, state } from 'lit/decorators.js';
10
+ import { cache } from 'lit/directives/cache.js';
11
+ import { ifDefined } from 'lit/directives/if-defined.js';
12
+ import { until } from 'lit/directives/until.js';
10
13
  import { addThemingController } from '../../theming/theming-controller.js';
11
14
  import IgcIconButtonComponent from '../button/icon-button.js';
12
15
  import IgcChipComponent from '../chip/chip.js';
13
- import { chatContext } from '../common/context.js';
14
- import { addKeybindings } from '../common/controllers/key-bindings.js';
15
- import { watch } from '../common/decorators/watch.js';
16
+ import { chatContext, chatUserInputContext } from '../common/context.js';
17
+ import { enterKey } from '../common/controllers/key-bindings.js';
16
18
  import { registerComponent } from '../common/definitions/register.js';
19
+ import { partMap } from '../common/part-map.js';
20
+ import { bindIf, hasFiles, isEmpty } from '../common/util.js';
17
21
  import IgcIconComponent from '../icon/icon.js';
18
- import { registerIconFromText } from '../icon/icon.registry.js';
19
22
  import IgcTextareaComponent from '../textarea/textarea.js';
20
23
  import { styles } from './themes/input.base.css.js';
21
24
  import { all } from './themes/input.js';
22
25
  import { styles as shared } from './themes/shared/input/input.common.css.js';
23
- import { attachmentIcon, fileDocumentIcon, fileImageIcon, sendButtonIcon, starIcon, } from './types.js';
24
- class IgcChatInputComponent extends LitElement {
26
+ import { getChatAcceptedFiles, getIconName } from './utils.js';
27
+ export default class IgcChatInputComponent extends LitElement {
28
+ static { this.tagName = 'igc-chat-input'; }
29
+ static { this.styles = [styles, shared]; }
25
30
  static register() {
26
31
  registerComponent(IgcChatInputComponent, IgcTextareaComponent, IgcIconButtonComponent, IgcChipComponent, IgcIconComponent);
27
32
  }
28
- acceptedFilesChange() {
29
- this._chatState.updateAcceptedTypesCache();
33
+ get _acceptedTypes() {
34
+ return this._state.acceptedFileTypes;
30
35
  }
31
36
  constructor() {
32
37
  super();
33
- this.containerPart = 'input-container';
38
+ this._defaults = Object.freeze({
39
+ fileUploadButton: () => this._renderFileUploadButton(),
40
+ input: () => this._renderTextArea(),
41
+ inputActions: () => this._renderActionsArea(),
42
+ inputAttachments: (ctx) => this._renderAttachmentsArea(ctx.attachments),
43
+ sendButton: () => this._renderSendButton(),
44
+ });
45
+ this._parts = { 'input-container': true, dragging: false };
34
46
  addThemingController(this, all);
35
- registerIconFromText('attachment', attachmentIcon, 'material');
36
- registerIconFromText('send-message', sendButtonIcon, 'material');
37
- registerIconFromText('file-document', fileDocumentIcon, 'material');
38
- registerIconFromText('file-image', fileImageIcon, 'material');
39
- registerIconFromText('star-icon', starIcon, 'material');
40
47
  }
41
48
  firstUpdated() {
42
- this.setupDragAndDrop();
43
- this._chatState.updateAcceptedTypesCache();
44
- this._chatState.textArea = this._textInputElement;
45
- const keybindings = addKeybindings(this, {
46
- skip: () => false,
47
- ref: this._chatState.textAreaRef,
48
- });
49
- keybindings.handleEvent = (event) => {
50
- this._chatState.handleKeyDown(event);
51
- };
49
+ this._state.updateAcceptedTypesCache();
50
+ this._state.textArea = this._textInputElement;
51
+ }
52
+ _getRenderer(name) {
53
+ return this._state.options?.renderers
54
+ ? (this._state.options.renderers[name] ??
55
+ this._defaults[name])
56
+ : this._defaults[name];
52
57
  }
53
- setupDragAndDrop() {
54
- const container = this.shadowRoot?.querySelector(`div[part='input-container']`);
55
- if (container) {
56
- container.addEventListener('dragenter', this.handleDragEnter.bind(this));
57
- container.addEventListener('dragover', this.handleDragOver.bind(this));
58
- container.addEventListener('dragleave', this.handleDragLeave.bind(this));
59
- container.addEventListener('drop', this.handleDrop.bind(this));
58
+ _handleKeydown(event) {
59
+ const isSend = event.key === enterKey && !event.shiftKey;
60
+ if (isSend) {
61
+ event.preventDefault();
62
+ this._state.sendMessage();
60
63
  }
64
+ else {
65
+ this._state.handleKeyDown(event);
66
+ }
67
+ }
68
+ _handleFileInputClick() {
69
+ this._fileInput.showPicker();
70
+ }
71
+ _handleFocusState(event) {
72
+ this._state.emitEvent(event.type === 'focus' ? 'igcInputFocus' : 'igcInputBlur');
73
+ }
74
+ _handleDragEnter(event) {
75
+ event.preventDefault();
76
+ event.stopPropagation();
77
+ const validFiles = getChatAcceptedFiles(event, this._acceptedTypes);
78
+ this._parts = { 'input-container': true, dragging: !isEmpty(validFiles) };
79
+ this._state.emitEvent('igcAttachmentDrag');
61
80
  }
62
- handleDragEnter(e) {
63
- e.preventDefault();
64
- e.stopPropagation();
65
- const files = Array.from(e.dataTransfer?.items || []).filter((item) => item.kind === 'file');
66
- const hasValidFiles = files.some((item) => this._chatState.isFileTypeAccepted(item.getAsFile(), item.type));
67
- this.containerPart = `input-container ${hasValidFiles ? ' dragging' : ''}`;
68
- this._chatState.emitEvent('igcAttachmentDrag');
69
- }
70
- handleDragOver(e) {
71
- e.preventDefault();
72
- e.stopPropagation();
73
- }
74
- handleDragLeave(e) {
75
- e.preventDefault();
76
- e.stopPropagation();
77
- const rect = e.currentTarget.getBoundingClientRect();
78
- const x = e.clientX;
79
- const y = e.clientY;
81
+ _handleDragOver(event) {
82
+ event.preventDefault();
83
+ event.stopPropagation();
84
+ }
85
+ _handleDragLeave(event) {
86
+ event.preventDefault();
87
+ event.stopPropagation();
88
+ const rect = event.currentTarget.getBoundingClientRect();
89
+ const x = event.clientX;
90
+ const y = event.clientY;
80
91
  if (x <= rect.left ||
81
92
  x >= rect.right ||
82
93
  y <= rect.top ||
83
94
  y >= rect.bottom) {
84
- this.containerPart = 'input-container';
95
+ this._parts = { 'input-container': true, dragging: false };
85
96
  }
86
97
  }
87
- handleDrop(e) {
88
- e.preventDefault();
89
- e.stopPropagation();
90
- this.containerPart = 'input-container';
91
- const files = Array.from(e.dataTransfer?.files || []);
92
- if (files.length === 0)
93
- return;
94
- const validFiles = files.filter((file) => this._chatState.isFileTypeAccepted(file));
95
- this._chatState.emitEvent('igcAttachmentDrop');
96
- this._chatState.attachFiles(validFiles);
98
+ _handleDrop(event) {
99
+ event.preventDefault();
100
+ event.stopPropagation();
101
+ this._parts = { 'input-container': true, dragging: false };
102
+ const validFiles = getChatAcceptedFiles(event, this._acceptedTypes);
103
+ this._state.emitEvent('igcAttachmentDrop');
104
+ this._state.attachFiles(validFiles);
97
105
  this.requestUpdate();
98
106
  }
107
+ _handleInput({ detail }) {
108
+ if (detail === this._state.inputValue)
109
+ return;
110
+ this._state.inputValue = detail;
111
+ this._state.emitEvent('igcInputChange', { detail: { value: detail } });
112
+ }
113
+ _handleFileUpload(event) {
114
+ const input = event.target;
115
+ if (hasFiles(input)) {
116
+ this._state.attachFiles(Array.from(input.files));
117
+ }
118
+ }
119
+ _renderAttachmentsArea(attachments) {
120
+ return html `${attachments?.map((attachment, index) => html `
121
+ <div part="attachment-wrapper" role="listitem">
122
+ <igc-chip
123
+ removable
124
+ @igcRemove=${() => this._state.removeAttachment(index)}
125
+ >
126
+ <igc-icon
127
+ slot="prefix"
128
+ name=${getIconName(attachment.file?.type ?? attachment.type)}
129
+ ></igc-icon>
130
+ <span part="attachment-name">${attachment.name}</span>
131
+ </igc-chip>
132
+ </div>
133
+ `)} `;
134
+ }
135
+ _renderTextArea() {
136
+ return html `
137
+ <igc-textarea
138
+ part="text-input"
139
+ aria-label="Chat text input"
140
+ placeholder=${ifDefined(this._state.options?.inputPlaceholder)}
141
+ resize="auto"
142
+ rows="1"
143
+ .value=${this._userInputState?.inputValue}
144
+ @igcInput=${this._handleInput}
145
+ @keydown=${this._handleKeydown}
146
+ @focus=${this._handleFocusState}
147
+ @blur=${this._handleFocusState}
148
+ ></igc-textarea>
149
+ `;
150
+ }
151
+ _renderFileUploadButton() {
152
+ const accepted = this._state.options?.acceptedFiles;
153
+ const attachmentsDisabled = this._state.options?.disableInputAttachments;
154
+ return html `${cache(attachmentsDisabled
155
+ ? nothing
156
+ : html `
157
+ <label for="input_attachments" part="upload-button">
158
+ <igc-icon-button
159
+ aria-label="Attach files"
160
+ variant="flat"
161
+ name="attach_file"
162
+ @click=${this._handleFileInputClick}
163
+ ></igc-icon-button>
164
+ <input
165
+ type="file"
166
+ id="input_attachments"
167
+ name="input_attachments"
168
+ aria-label="Upload button"
169
+ multiple
170
+ accept=${bindIf(accepted, accepted)}
171
+ @change=${this._handleFileUpload}
172
+ />
173
+ </label>
174
+ `)}`;
175
+ }
176
+ _renderSendButton() {
177
+ const enabled = this._state.hasInputValue || this._state.hasInputAttachments;
178
+ return html `
179
+ <igc-icon-button
180
+ aria-label="Send message"
181
+ name="send_message"
182
+ variant="contained"
183
+ part="send-button"
184
+ ?disabled=${!enabled}
185
+ @click=${this._state.sendMessage}
186
+ ></igc-icon-button>
187
+ `;
188
+ }
189
+ _renderActionsArea() {
190
+ const ctx = {
191
+ defaults: this._defaults,
192
+ instance: this._state.host,
193
+ };
194
+ return html `
195
+ ${this._getRenderer('fileUploadButton')(ctx)}
196
+ ${this._getRenderer('sendButton')(ctx)}
197
+ `;
198
+ }
99
199
  render() {
100
- const templates = this._chatState.mergedTemplates;
200
+ const ctx = {
201
+ defaults: this._defaults,
202
+ instance: this._state.host,
203
+ };
204
+ const inputCtx = {
205
+ ...ctx,
206
+ attachments: this._state.inputAttachments,
207
+ value: this._state.inputValue,
208
+ };
101
209
  return html `
102
- <div part="${this.containerPart}">
103
- ${this._chatState.inputAttachments &&
104
- this._chatState.inputAttachments.length > 0
105
- ? html ` <div part="attachments" role="list" aria-label="Attachments">
106
- ${templates?.textAreaAttachmentsTemplate(this._chatState.inputAttachments)}
107
- </div>`
210
+ <div
211
+ part=${partMap(this._parts)}
212
+ @dragenter=${this._handleDragEnter}
213
+ @dragover=${this._handleDragOver}
214
+ @dragleave=${this._handleDragLeave}
215
+ @drop=${this._handleDrop}
216
+ >
217
+ ${this._state.hasInputAttachments
218
+ ? html `
219
+ <div part="attachments" role="list" aria-label="Attachments">
220
+ ${until(this._getRenderer('inputAttachments')(inputCtx))}
221
+ </div>
222
+ `
108
223
  : nothing}
224
+
109
225
  <div part="input-wrapper">
110
- ${templates?.textInputTemplate(this._chatState.inputValue ?? '')}
226
+ ${until(this._getRenderer('input')(inputCtx))}
111
227
  </div>
228
+
112
229
  <div part="buttons-container">
113
- ${templates?.textAreaActionsTemplate()}
230
+ ${until(this._getRenderer('inputActions')(ctx))}
114
231
  </div>
115
232
  </div>
116
233
  `;
117
234
  }
118
235
  }
119
- IgcChatInputComponent.tagName = 'igc-chat-input';
120
- IgcChatInputComponent.styles = [styles, shared];
121
- export default IgcChatInputComponent;
122
236
  __decorate([
123
237
  consume({ context: chatContext, subscribe: true })
124
- ], IgcChatInputComponent.prototype, "_chatState", void 0);
238
+ ], IgcChatInputComponent.prototype, "_state", void 0);
239
+ __decorate([
240
+ consume({ context: chatUserInputContext, subscribe: true })
241
+ ], IgcChatInputComponent.prototype, "_userInputState", void 0);
125
242
  __decorate([
126
243
  query(IgcTextareaComponent.tagName)
127
244
  ], IgcChatInputComponent.prototype, "_textInputElement", void 0);
128
245
  __decorate([
129
246
  query('#input_attachments')
130
- ], IgcChatInputComponent.prototype, "_inputAttachmentsButton", void 0);
131
- __decorate([
132
- watch('acceptedFiles', { waitUntilFirstUpdate: true })
133
- ], IgcChatInputComponent.prototype, "acceptedFilesChange", null);
247
+ ], IgcChatInputComponent.prototype, "_fileInput", void 0);
134
248
  __decorate([
135
249
  state()
136
- ], IgcChatInputComponent.prototype, "containerPart", void 0);
250
+ ], IgcChatInputComponent.prototype, "_parts", void 0);
137
251
  //# sourceMappingURL=chat-input.js.map
@@ -1 +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 { html, LitElement, nothing } from 'lit';\nimport { query, state } from 'lit/decorators.js';\nimport { addThemingController } from '../../theming/theming-controller.js';\nimport IgcIconButtonComponent from '../button/icon-button.js';\nimport IgcChipComponent from '../chip/chip.js';\nimport { chatContext } from '../common/context.js';\nimport { addKeybindings } from '../common/controllers/key-bindings.js';\nimport { watch } from '../common/decorators/watch.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport IgcIconComponent from '../icon/icon.js';\nimport { registerIconFromText } from '../icon/icon.registry.js';\nimport IgcTextareaComponent from '../textarea/textarea.js';\nimport type { ChatState } from './chat-state.js';\nimport { styles } from './themes/input.base.css.js';\nimport { all } from './themes/input.js';\nimport { styles as shared } from './themes/shared/input/input.common.css.js';\nimport {\n attachmentIcon,\n fileDocumentIcon,\n fileImageIcon,\n sendButtonIcon,\n starIcon,\n} from './types.js';\n\n/**\n * A web component that provides the input area for the `igc-chat` interface.\n *\n * It supports:\n * - Text input with automatic resizing\n * - Sending messages on Enter key (with Shift+Enter for newlines)\n * - File attachments via file picker or drag-and-drop\n * - Customizable templates for send button, attachments, and text input\n * - Emits various chat-related events (typing, input focus/blur, attachment drop, etc.)\n *\n * @element igc-chat-input\n *\n * @slot - Default unnamed slot for rendering inside the component\n * @fires igcTypingChange - Fired when the user starts/stops typing\n * @fires igcInputFocus - Fired when the input area receives focus\n * @fires igcInputBlur - Fired when the input area loses focus\n * @fires igcAttachmentDrag - Fired when dragging a file over the input\n * @fires igcAttachmentDrop - Fired when a file is dropped into the input\n * @fires igcChange - Fired when file input changes (delegated from `<igc-file-input>`)\n *\n * @csspart input-container - Container for the input section\n * @csspart input-wrapper - Wrapper around the text input\n * @csspart text-input - The `<igc-textarea>` component\n * @csspart buttons-container - Container for file upload/send buttons\n * @csspart send-button - The send icon button\n * @csspart attachments - Container for rendering attachments\n * @csspart attachment-wrapper - Wrapper for individual attachment\n * @csspart attachment-name - Display name of an attachment\n */\nexport default class IgcChatInputComponent extends LitElement {\n public static readonly tagName = 'igc-chat-input';\n\n public static override styles = [styles, shared];\n\n @consume({ context: chatContext, subscribe: true })\n private _chatState!: ChatState;\n\n /* blazorSuppress */\n public static register() {\n registerComponent(\n IgcChatInputComponent,\n IgcTextareaComponent,\n IgcIconButtonComponent,\n IgcChipComponent,\n IgcIconComponent\n );\n }\n\n @query(IgcTextareaComponent.tagName)\n private _textInputElement!: IgcTextareaComponent;\n\n @query('#input_attachments')\n protected _inputAttachmentsButton!: IgcIconButtonComponent;\n\n // private readonly _textAreaRef = createRef<IgcTextareaComponent>();\n\n @watch('acceptedFiles', { waitUntilFirstUpdate: true })\n protected acceptedFilesChange(): void {\n this._chatState.updateAcceptedTypesCache();\n }\n\n @state()\n private containerPart = 'input-container';\n\n constructor() {\n super();\n addThemingController(this, all);\n registerIconFromText('attachment', attachmentIcon, 'material');\n registerIconFromText('send-message', sendButtonIcon, 'material');\n registerIconFromText('file-document', fileDocumentIcon, 'material');\n registerIconFromText('file-image', fileImageIcon, 'material');\n registerIconFromText('star-icon', starIcon, 'material');\n }\n\n protected override firstUpdated() {\n this.setupDragAndDrop();\n this._chatState.updateAcceptedTypesCache();\n this._chatState.textArea = this._textInputElement;\n\n // Use keybindings controller to capture all key events\n // Custom skip function that never skips - this captures ALL key events\n const keybindings = addKeybindings(this, {\n skip: () => false, // Never skip any key events\n ref: this._chatState.textAreaRef,\n });\n\n // Override the controller's handleEvent to capture all keys\n // This is a more direct approach that doesn't require listing specific keys\n keybindings.handleEvent = (event: KeyboardEvent) => {\n // Call our handler for every key event\n this._chatState.handleKeyDown(event);\n };\n }\n\n private setupDragAndDrop() {\n const container = this.shadowRoot?.querySelector(\n `div[part='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._chatState.isFileTypeAccepted(item.getAsFile() as File, item.type)\n );\n\n this.containerPart = `input-container ${hasValidFiles ? ' dragging' : ''}`;\n\n this._chatState.emitEvent('igcAttachmentDrag');\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.containerPart = 'input-container';\n }\n }\n\n private handleDrop(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n this.containerPart = 'input-container';\n\n const files = Array.from(e.dataTransfer?.files || []);\n if (files.length === 0) return;\n\n const validFiles = files.filter((file) =>\n this._chatState.isFileTypeAccepted(file)\n );\n\n this._chatState.emitEvent('igcAttachmentDrop');\n\n this._chatState.attachFiles(validFiles);\n this.requestUpdate();\n }\n\n protected override render() {\n const templates = this._chatState.mergedTemplates;\n return html`\n <div part=\"${this.containerPart}\">\n ${this._chatState.inputAttachments &&\n this._chatState.inputAttachments.length > 0\n ? html` <div part=\"attachments\" role=\"list\" aria-label=\"Attachments\">\n ${templates?.textAreaAttachmentsTemplate(\n this._chatState.inputAttachments\n )}\n </div>`\n : nothing}\n <div part=\"input-wrapper\">\n ${templates?.textInputTemplate(this._chatState.inputValue ?? '')}\n </div>\n <div part=\"buttons-container\">\n ${templates?.textAreaActionsTemplate()}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-chat-input': IgcChatInputComponent;\n }\n}\n"]}
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 { html, LitElement, nothing } from 'lit';\nimport { query, state } from 'lit/decorators.js';\nimport { cache } from 'lit/directives/cache.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { until } from 'lit/directives/until.js';\nimport { addThemingController } from '../../theming/theming-controller.js';\nimport IgcIconButtonComponent from '../button/icon-button.js';\nimport IgcChipComponent from '../chip/chip.js';\nimport { chatContext, chatUserInputContext } from '../common/context.js';\nimport { enterKey } from '../common/controllers/key-bindings.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport { partMap } from '../common/part-map.js';\nimport { bindIf, hasFiles, isEmpty } from '../common/util.js';\nimport IgcIconComponent from '../icon/icon.js';\nimport IgcTextareaComponent from '../textarea/textarea.js';\nimport type { ChatState } from './chat-state.js';\nimport { styles } from './themes/input.base.css.js';\nimport { all } from './themes/input.js';\nimport { styles as shared } from './themes/shared/input/input.common.css.js';\nimport type {\n ChatRendererContext,\n ChatTemplateRenderer,\n IgcMessageAttachment,\n InputRendererContext,\n} from './types.js';\nimport { getChatAcceptedFiles, getIconName } from './utils.js';\n\ntype DefaultInputRenderers = {\n input: ChatTemplateRenderer<InputRendererContext>;\n inputActions: ChatTemplateRenderer<ChatRendererContext>;\n inputAttachments: ChatTemplateRenderer<InputRendererContext>;\n fileUploadButton: ChatTemplateRenderer<ChatRendererContext>;\n sendButton: ChatTemplateRenderer<ChatRendererContext>;\n};\n/**\n * A web component that provides the input area for the `igc-chat` interface.\n *\n * It supports:\n * - Text input with automatic resizing\n * - Sending messages on Enter key (with Shift+Enter for newlines)\n * - File attachments via file picker or drag-and-drop\n * - Customizable templates for send button, attachments, and text input\n * - Emits various chat-related events (typing, input focus/blur, attachment drop, etc.)\n *\n * @element igc-chat-input\n *\n * @slot - Default unnamed slot for rendering inside the component\n * @fires igcTypingChange - Fired when the user starts/stops typing\n * @fires igcInputFocus - Fired when the input area receives focus\n * @fires igcInputBlur - Fired when the input area loses focus\n * @fires igcAttachmentDrag - Fired when dragging a file over the input\n * @fires igcAttachmentDrop - Fired when a file is dropped into the input\n * @fires igcChange - Fired when file input changes (delegated from `<igc-file-input>`)\n *\n * @csspart input-container - Container for the input section\n * @csspart input-wrapper - Wrapper around the text input\n * @csspart text-input - The `<igc-textarea>` component\n * @csspart buttons-container - Container for file upload/send buttons\n * @csspart send-button - The send icon button\n * @csspart attachments - Container for rendering attachments\n * @csspart attachment-wrapper - Wrapper for individual attachment\n * @csspart attachment-name - Display name of an attachment\n */\nexport default class IgcChatInputComponent extends LitElement {\n public static readonly tagName = 'igc-chat-input';\n public static override styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(\n IgcChatInputComponent,\n IgcTextareaComponent,\n IgcIconButtonComponent,\n IgcChipComponent,\n IgcIconComponent\n );\n }\n\n private readonly _defaults: Readonly<DefaultInputRenderers> = Object.freeze({\n fileUploadButton: () => this._renderFileUploadButton(),\n input: () => this._renderTextArea(),\n inputActions: () => this._renderActionsArea(),\n inputAttachments: (ctx) => this._renderAttachmentsArea(ctx.attachments),\n sendButton: () => this._renderSendButton(),\n });\n\n @consume({ context: chatContext, subscribe: true })\n private readonly _state!: ChatState;\n\n @consume({ context: chatUserInputContext, subscribe: true })\n private readonly _userInputState!: ChatState;\n\n @query(IgcTextareaComponent.tagName)\n private readonly _textInputElement!: IgcTextareaComponent;\n\n @query('#input_attachments')\n protected readonly _fileInput!: HTMLInputElement;\n\n @state()\n private _parts = { 'input-container': true, dragging: false };\n\n private get _acceptedTypes() {\n return this._state.acceptedFileTypes;\n }\n\n constructor() {\n super();\n addThemingController(this, all);\n }\n\n protected override firstUpdated() {\n this._state.updateAcceptedTypesCache();\n this._state.textArea = this._textInputElement;\n }\n\n private _getRenderer<U extends keyof DefaultInputRenderers>(\n name: U\n ): DefaultInputRenderers[U] {\n return this._state.options?.renderers\n ? ((this._state.options.renderers[name] ??\n this._defaults[name]) as DefaultInputRenderers[U])\n : this._defaults[name];\n }\n\n private _handleKeydown(event: KeyboardEvent): void {\n const isSend = event.key === enterKey && !event.shiftKey;\n\n if (isSend) {\n event.preventDefault();\n this._state.sendMessage();\n } else {\n // TODO:\n this._state.handleKeyDown(event);\n }\n }\n\n private _handleFileInputClick(): void {\n this._fileInput.showPicker();\n }\n\n private _handleFocusState(event: FocusEvent): void {\n this._state.emitEvent(\n event.type === 'focus' ? 'igcInputFocus' : 'igcInputBlur'\n );\n }\n\n private _handleDragEnter(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n const validFiles = getChatAcceptedFiles(event, this._acceptedTypes);\n this._parts = { 'input-container': true, dragging: !isEmpty(validFiles) };\n this._state.emitEvent('igcAttachmentDrag');\n }\n\n private _handleDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n }\n\n private _handleDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n // Check if we're actually leaving the container\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n const x = event.clientX;\n const y = event.clientY;\n\n if (\n x <= rect.left ||\n x >= rect.right ||\n y <= rect.top ||\n y >= rect.bottom\n ) {\n this._parts = { 'input-container': true, dragging: false };\n }\n }\n\n private _handleDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this._parts = { 'input-container': true, dragging: false };\n\n const validFiles = getChatAcceptedFiles(event, this._acceptedTypes);\n this._state.emitEvent('igcAttachmentDrop');\n this._state.attachFiles(validFiles);\n this.requestUpdate();\n }\n\n /**\n * Handles input text changes.\n * Updates internal inputValue and emits 'igcInputChange' event.\n * @param e Input event from the text area\n */\n private _handleInput({ detail }: CustomEvent<string>): void {\n if (detail === this._state.inputValue) return;\n\n this._state.inputValue = detail;\n this._state.emitEvent('igcInputChange', { detail: { value: detail } });\n }\n\n private _handleFileUpload(event: Event): void {\n const input = event.target as HTMLInputElement;\n\n if (hasFiles(input)) {\n this._state.attachFiles(Array.from(input.files!));\n }\n }\n /**\n * Default attachments area template used when no custom template is provided.\n * Renders the list of input attachments as chips.\n * @returns TemplateResult containing the attachments area\n */\n private _renderAttachmentsArea(attachments: IgcMessageAttachment[]) {\n return html`${attachments?.map(\n (attachment, index) => html`\n <div part=\"attachment-wrapper\" role=\"listitem\">\n <igc-chip\n removable\n @igcRemove=${() => this._state.removeAttachment(index)}\n >\n <igc-icon\n slot=\"prefix\"\n name=${getIconName(attachment.file?.type ?? attachment.type)}\n ></igc-icon>\n <span part=\"attachment-name\">${attachment.name}</span>\n </igc-chip>\n </div>\n `\n )} `;\n }\n\n /**\n * Default text area template used when no custom template is provided.\n * Renders a text area for user input.\n * @returns TemplateResult containing the text area\n */\n private _renderTextArea() {\n return html`\n <igc-textarea\n part=\"text-input\"\n aria-label=\"Chat text input\"\n placeholder=${ifDefined(this._state.options?.inputPlaceholder)}\n resize=\"auto\"\n rows=\"1\"\n .value=${this._userInputState?.inputValue}\n @igcInput=${this._handleInput}\n @keydown=${this._handleKeydown}\n @focus=${this._handleFocusState}\n @blur=${this._handleFocusState}\n ></igc-textarea>\n `;\n }\n\n /**\n * Default file upload button template used when no custom template is provided.\n * Renders a file input for attaching files.\n * @returns TemplateResult containing the file upload button\n */\n private _renderFileUploadButton() {\n const accepted = this._state.options?.acceptedFiles;\n const attachmentsDisabled = this._state.options?.disableInputAttachments;\n\n return html`${cache(\n attachmentsDisabled\n ? nothing\n : html`\n <label for=\"input_attachments\" part=\"upload-button\">\n <igc-icon-button\n aria-label=\"Attach files\"\n variant=\"flat\"\n name=\"attach_file\"\n @click=${this._handleFileInputClick}\n ></igc-icon-button>\n <input\n type=\"file\"\n id=\"input_attachments\"\n name=\"input_attachments\"\n aria-label=\"Upload button\"\n multiple\n accept=${bindIf(accepted, accepted)}\n @change=${this._handleFileUpload}\n />\n </label>\n `\n )}`;\n }\n\n /**\n * Default send button template used when no custom template is provided.\n * Renders a send button that submits the current input value and attachments.\n * @returns TemplateResult containing the send button\n */\n private _renderSendButton() {\n const enabled =\n this._state.hasInputValue || this._state.hasInputAttachments;\n\n return html`\n <igc-icon-button\n aria-label=\"Send message\"\n name=\"send_message\"\n variant=\"contained\"\n part=\"send-button\"\n ?disabled=${!enabled}\n @click=${this._state.sendMessage}\n ></igc-icon-button>\n `;\n }\n\n private _renderActionsArea() {\n const ctx: ChatRendererContext = {\n defaults: this._defaults,\n instance: this._state.host,\n };\n\n return html`\n ${this._getRenderer('fileUploadButton')(ctx)}\n ${this._getRenderer('sendButton')(ctx)}\n `;\n }\n\n protected override render() {\n const ctx: ChatRendererContext = {\n defaults: this._defaults,\n instance: this._state.host,\n };\n\n const inputCtx: InputRendererContext = {\n ...ctx,\n attachments: this._state.inputAttachments,\n value: this._state.inputValue,\n };\n\n return html`\n <div\n part=${partMap(this._parts)}\n @dragenter=${this._handleDragEnter}\n @dragover=${this._handleDragOver}\n @dragleave=${this._handleDragLeave}\n @drop=${this._handleDrop}\n >\n ${this._state.hasInputAttachments\n ? html`\n <div part=\"attachments\" role=\"list\" aria-label=\"Attachments\">\n ${until(this._getRenderer('inputAttachments')(inputCtx))}\n </div>\n `\n : nothing}\n\n <div part=\"input-wrapper\">\n ${until(this._getRenderer('input')(inputCtx))}\n </div>\n\n <div part=\"buttons-container\">\n ${until(this._getRenderer('inputActions')(ctx))}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-chat-input': IgcChatInputComponent;\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { LitElement, nothing } from 'lit';
1
+ import { LitElement } from 'lit';
2
2
  import type { IgcMessage } from './types.js';
3
3
  /**
4
4
  * A chat message component for displaying individual messages in `<igc-chat>`.
@@ -22,23 +22,23 @@ export default class IgcChatMessageComponent extends LitElement {
22
22
  static readonly tagName = "igc-chat-message";
23
23
  static styles: import("lit").CSSResult[];
24
24
  static register(): void;
25
- /**
26
- * Injected chat state context. Provides message data, user info, and options.
27
- */
28
- private _chatState?;
25
+ private readonly _defaults;
26
+ private readonly _state;
29
27
  /**
30
28
  * The chat message to render.
31
29
  */
32
30
  message?: IgcMessage;
33
31
  constructor();
34
32
  protected firstUpdated(): void;
35
- /**
36
- * Renders the chat message template.
37
- * - Applies 'sent' CSS class if the message sender matches current user.
38
- * - Uses markdown rendering if configured.
39
- * - Renders attachments and custom templates if provided.
40
- */
41
- protected render(): import("lit-html").TemplateResult<1> | typeof nothing;
33
+ private _getRenderer;
34
+ private _handleMessageActionClick;
35
+ private _renderHeader;
36
+ private _renderContent;
37
+ private _renderActions;
38
+ private _renderActionButton;
39
+ private _renderAttachments;
40
+ private _renderMessage;
41
+ protected render(): import("lit-html").TemplateResult<1>;
42
42
  }
43
43
  declare global {
44
44
  interface HTMLElementTagNameMap {