igniteui-webcomponents 6.3.0-alpha.0 → 6.3.0-beta.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 (500) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/components/accordion/accordion.js +1 -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/banner/themes/banner.base.css.js +1 -1
  7. package/components/banner/themes/banner.base.css.js.map +1 -1
  8. package/components/banner/themes/shared/banner.bootstrap.css.js +1 -1
  9. package/components/banner/themes/shared/banner.bootstrap.css.js.map +1 -1
  10. package/components/banner/themes/shared/banner.fluent.css.js +1 -1
  11. package/components/banner/themes/shared/banner.fluent.css.js.map +1 -1
  12. package/components/banner/themes/shared/banner.indigo.css.js +1 -1
  13. package/components/banner/themes/shared/banner.indigo.css.js.map +1 -1
  14. package/components/banner/themes/shared/banner.material.css.js +1 -1
  15. package/components/banner/themes/shared/banner.material.css.js.map +1 -1
  16. package/components/button/themes/button/button.base.css.js +1 -1
  17. package/components/button/themes/button/button.base.css.js.map +1 -1
  18. package/components/button/themes/button/shared/button.common.css.js +1 -1
  19. package/components/button/themes/button/shared/button.common.css.js.map +1 -1
  20. package/components/button/themes/button/shared/button.fluent.css.js +1 -1
  21. package/components/button/themes/button/shared/button.fluent.css.js.map +1 -1
  22. package/components/button/themes/button/shared/button.indigo.css.js +1 -1
  23. package/components/button/themes/button/shared/button.indigo.css.js.map +1 -1
  24. package/components/button/themes/icon-button/icon-button.base.css.js +1 -1
  25. package/components/button/themes/icon-button/icon-button.base.css.js.map +1 -1
  26. package/components/button/themes/icon-button/shared/icon-button.bootstrap.css.js +1 -1
  27. package/components/button/themes/icon-button/shared/icon-button.bootstrap.css.js.map +1 -1
  28. package/components/button/themes/icon-button/shared/icon-button.fluent.css.js +1 -1
  29. package/components/button/themes/icon-button/shared/icon-button.fluent.css.js.map +1 -1
  30. package/components/button/themes/icon-button/shared/icon-button.indigo.css.js +1 -1
  31. package/components/button/themes/icon-button/shared/icon-button.indigo.css.js.map +1 -1
  32. package/components/button/themes/icon-button/shared/icon-button.material.css.js +1 -1
  33. package/components/button/themes/icon-button/shared/icon-button.material.css.js.map +1 -1
  34. package/components/button-group/themes/shared/button/button.bootstrap.css.js +1 -1
  35. package/components/button-group/themes/shared/button/button.bootstrap.css.js.map +1 -1
  36. package/components/button-group/themes/shared/button/button.common.css.js +1 -1
  37. package/components/button-group/themes/shared/button/button.common.css.js.map +1 -1
  38. package/components/button-group/themes/shared/button/button.indigo.css.js +1 -1
  39. package/components/button-group/themes/shared/button/button.indigo.css.js.map +1 -1
  40. package/components/calendar/calendar.d.ts +1 -1
  41. package/components/calendar/days-view/days-view.js +1 -3
  42. package/components/calendar/days-view/days-view.js.map +1 -1
  43. package/components/calendar/months-view/months-view.js +1 -3
  44. package/components/calendar/months-view/months-view.js.map +1 -1
  45. package/components/calendar/themes/calendar.base.css.js +1 -1
  46. package/components/calendar/themes/calendar.base.css.js.map +1 -1
  47. package/components/calendar/themes/days-view.base.css.js +1 -1
  48. package/components/calendar/themes/days-view.base.css.js.map +1 -1
  49. package/components/calendar/themes/shared/bootstrap/calendar.bootstrap.css.js +1 -1
  50. package/components/calendar/themes/shared/bootstrap/calendar.bootstrap.css.js.map +1 -1
  51. package/components/calendar/themes/shared/bootstrap/days-view.bootstrap.css.js +1 -1
  52. package/components/calendar/themes/shared/bootstrap/days-view.bootstrap.css.js.map +1 -1
  53. package/components/calendar/themes/shared/bootstrap/year-month-view.bootstrap.css.js +1 -1
  54. package/components/calendar/themes/shared/bootstrap/year-month-view.bootstrap.css.js.map +1 -1
  55. package/components/calendar/themes/shared/fluent/calendar.fluent.css.js +1 -1
  56. package/components/calendar/themes/shared/fluent/calendar.fluent.css.js.map +1 -1
  57. package/components/calendar/themes/shared/indigo/calendar.indigo.css.js +1 -1
  58. package/components/calendar/themes/shared/indigo/calendar.indigo.css.js.map +1 -1
  59. package/components/calendar/themes/shared/material/calendar.material.css.js +1 -1
  60. package/components/calendar/themes/shared/material/calendar.material.css.js.map +1 -1
  61. package/components/calendar/themes/year-month-view.base.css.js +1 -1
  62. package/components/calendar/themes/year-month-view.base.css.js.map +1 -1
  63. package/components/calendar/years-view/years-view.js +1 -3
  64. package/components/calendar/years-view/years-view.js.map +1 -1
  65. package/components/card/themes/card.actions.base.css.js +1 -1
  66. package/components/card/themes/card.actions.base.css.js.map +1 -1
  67. package/components/card/themes/card.content.base.css.js +1 -1
  68. package/components/card/themes/card.content.base.css.js.map +1 -1
  69. package/components/card/themes/card.header.base.css.js +1 -1
  70. package/components/card/themes/card.header.base.css.js.map +1 -1
  71. package/components/card/themes/shared/actions/card.actions.bootstrap.css.js +1 -1
  72. package/components/card/themes/shared/actions/card.actions.bootstrap.css.js.map +1 -1
  73. package/components/card/themes/shared/actions/card.actions.indigo.css.js +1 -1
  74. package/components/card/themes/shared/actions/card.actions.indigo.css.js.map +1 -1
  75. package/components/card/themes/shared/container/card.bootstrap.css.js +1 -1
  76. package/components/card/themes/shared/container/card.bootstrap.css.js.map +1 -1
  77. package/components/card/themes/shared/container/card.indigo.css.js +1 -1
  78. package/components/card/themes/shared/container/card.indigo.css.js.map +1 -1
  79. package/components/card/themes/shared/content/card.content.bootstrap.css.js +1 -1
  80. package/components/card/themes/shared/content/card.content.bootstrap.css.js.map +1 -1
  81. package/components/card/themes/shared/header/card.header.fluent.css.js +1 -1
  82. package/components/card/themes/shared/header/card.header.fluent.css.js.map +1 -1
  83. package/components/card/themes/shared/header/card.header.indigo.css.js +1 -1
  84. package/components/card/themes/shared/header/card.header.indigo.css.js.map +1 -1
  85. package/components/carousel/carousel.js +0 -3
  86. package/components/carousel/carousel.js.map +1 -1
  87. package/components/carousel/themes/carousel.base.css.js +1 -1
  88. package/components/carousel/themes/carousel.base.css.js.map +1 -1
  89. package/components/carousel/themes/shared/carousel.indigo.css.js +1 -1
  90. package/components/carousel/themes/shared/carousel.indigo.css.js.map +1 -1
  91. package/components/chat/chat-input.d.ts +48 -28
  92. package/components/chat/chat-input.js +184 -199
  93. package/components/chat/chat-input.js.map +1 -1
  94. package/components/chat/chat-message.d.ts +22 -17
  95. package/components/chat/chat-message.js +137 -26
  96. package/components/chat/chat-message.js.map +1 -1
  97. package/components/chat/chat-state.d.ts +25 -47
  98. package/components/chat/chat-state.js +106 -77
  99. package/components/chat/chat-state.js.map +1 -1
  100. package/components/chat/chat.d.ts +54 -69
  101. package/components/chat/chat.js +226 -100
  102. package/components/chat/chat.js.map +1 -1
  103. package/components/chat/extras/markdown-renderer.d.ts +23 -0
  104. package/components/chat/extras/markdown-renderer.js +44 -0
  105. package/components/chat/extras/markdown-renderer.js.map +1 -0
  106. package/components/chat/message-attachments.d.ts +23 -12
  107. package/components/chat/message-attachments.js +87 -83
  108. package/components/chat/message-attachments.js.map +1 -1
  109. package/components/chat/themes/attachments.d.ts +2 -0
  110. package/components/chat/themes/attachments.js +14 -0
  111. package/components/chat/themes/attachments.js.map +1 -0
  112. package/components/chat/themes/chat.base.css.js +1 -1
  113. package/components/chat/themes/chat.base.css.js.map +1 -1
  114. package/components/chat/themes/dark/chat.bootstrap.css.js +1 -1
  115. package/components/chat/themes/dark/chat.bootstrap.css.js.map +1 -1
  116. package/components/chat/themes/dark/chat.fluent.css.js +1 -1
  117. package/components/chat/themes/dark/chat.fluent.css.js.map +1 -1
  118. package/components/chat/themes/dark/chat.indigo.css.js +1 -1
  119. package/components/chat/themes/dark/chat.indigo.css.js.map +1 -1
  120. package/components/chat/themes/input.base.css.js +1 -1
  121. package/components/chat/themes/input.base.css.js.map +1 -1
  122. package/components/chat/themes/light/chat.bootstrap.css.js +1 -1
  123. package/components/chat/themes/light/chat.bootstrap.css.js.map +1 -1
  124. package/components/chat/themes/light/chat.fluent.css.js +1 -1
  125. package/components/chat/themes/light/chat.fluent.css.js.map +1 -1
  126. package/components/chat/themes/light/chat.indigo.css.js +1 -1
  127. package/components/chat/themes/light/chat.indigo.css.js.map +1 -1
  128. package/components/chat/themes/light/chat.shared.css.js +1 -1
  129. package/components/chat/themes/light/chat.shared.css.js.map +1 -1
  130. package/components/chat/themes/message-attachments.base.css.js +1 -1
  131. package/components/chat/themes/message-attachments.base.css.js.map +1 -1
  132. package/components/chat/themes/message.base.css.js +1 -1
  133. package/components/chat/themes/message.base.css.js.map +1 -1
  134. package/components/chat/themes/message.d.ts +2 -0
  135. package/components/chat/themes/message.js +28 -0
  136. package/components/chat/themes/message.js.map +1 -0
  137. package/components/chat/themes/shared/chat-message/chat-message.bootstrap.css.js +3 -0
  138. package/components/chat/themes/shared/chat-message/chat-message.bootstrap.css.js.map +1 -0
  139. package/components/chat/themes/shared/chat-message/chat-message.common.css.js +3 -0
  140. package/components/chat/themes/shared/chat-message/chat-message.common.css.js.map +1 -0
  141. package/components/chat/themes/shared/chat-message/chat-message.fluent.css.js +3 -0
  142. package/components/chat/themes/shared/chat-message/chat-message.fluent.css.js.map +1 -0
  143. package/components/chat/themes/shared/chat-message/chat-message.indigo.css.js +3 -0
  144. package/components/chat/themes/shared/chat-message/chat-message.indigo.css.js.map +1 -0
  145. package/components/chat/themes/shared/chat.bootstrap.css.d.ts +1 -0
  146. package/components/chat/themes/shared/chat.bootstrap.css.js +3 -0
  147. package/components/chat/themes/shared/chat.bootstrap.css.js.map +1 -0
  148. package/components/chat/themes/shared/chat.common.css.js +1 -1
  149. package/components/chat/themes/shared/chat.common.css.js.map +1 -1
  150. package/components/chat/themes/shared/chat.fluent.css.d.ts +1 -0
  151. package/components/chat/themes/shared/chat.fluent.css.js +3 -0
  152. package/components/chat/themes/shared/chat.fluent.css.js.map +1 -0
  153. package/components/chat/themes/shared/chat.indigo.css.d.ts +1 -0
  154. package/components/chat/themes/shared/chat.indigo.css.js +3 -0
  155. package/components/chat/themes/shared/chat.indigo.css.js.map +1 -0
  156. package/components/chat/themes/shared/input/input.bootstrap.css.js +1 -1
  157. package/components/chat/themes/shared/input/input.bootstrap.css.js.map +1 -1
  158. package/components/chat/themes/shared/input/input.common.css.js +1 -1
  159. package/components/chat/themes/shared/input/input.common.css.js.map +1 -1
  160. package/components/chat/themes/shared/input/input.fluent.css.js +1 -1
  161. package/components/chat/themes/shared/input/input.fluent.css.js.map +1 -1
  162. package/components/chat/themes/shared/input/input.indigo.css.js +1 -1
  163. package/components/chat/themes/shared/input/input.indigo.css.js.map +1 -1
  164. package/components/chat/themes/shared/input/input.material.css.js +1 -1
  165. package/components/chat/themes/shared/input/input.material.css.js.map +1 -1
  166. package/components/chat/themes/shared/message-attachments/message-attachments.common.css.d.ts +1 -0
  167. package/components/chat/themes/shared/message-attachments/message-attachments.common.css.js +3 -0
  168. package/components/chat/themes/shared/message-attachments/message-attachments.common.css.js.map +1 -0
  169. package/components/chat/themes/shared/message-attachments/message-attachments.indigo.css.d.ts +1 -0
  170. package/components/chat/themes/shared/message-attachments/message-attachments.indigo.css.js +3 -0
  171. package/components/chat/themes/shared/message-attachments/message-attachments.indigo.css.js.map +1 -0
  172. package/components/chat/themes/themes.js +9 -6
  173. package/components/chat/themes/themes.js.map +1 -1
  174. package/components/chat/types.d.ts +32 -85
  175. package/components/chat/types.js +1 -7
  176. package/components/chat/types.js.map +1 -1
  177. package/components/chat/utils.d.ts +16 -0
  178. package/components/chat/utils.js +86 -0
  179. package/components/chat/utils.js.map +1 -0
  180. package/components/checkbox/checkbox-base.d.ts +1 -1
  181. package/components/checkbox/themes/shared/checkbox/checkbox.bootstrap.css.js +1 -1
  182. package/components/checkbox/themes/shared/checkbox/checkbox.bootstrap.css.js.map +1 -1
  183. package/components/checkbox/themes/shared/checkbox/checkbox.fluent.css.js +1 -1
  184. package/components/checkbox/themes/shared/checkbox/checkbox.fluent.css.js.map +1 -1
  185. package/components/checkbox/themes/shared/checkbox/checkbox.indigo.css.js +1 -1
  186. package/components/checkbox/themes/shared/checkbox/checkbox.indigo.css.js.map +1 -1
  187. package/components/checkbox/themes/shared/checkbox/checkbox.material.css.js +1 -1
  188. package/components/checkbox/themes/shared/checkbox/checkbox.material.css.js.map +1 -1
  189. package/components/checkbox/themes/shared/switch/switch.bootstrap.css.js +1 -1
  190. package/components/checkbox/themes/shared/switch/switch.bootstrap.css.js.map +1 -1
  191. package/components/checkbox/themes/shared/switch/switch.common.css.js +1 -1
  192. package/components/checkbox/themes/shared/switch/switch.common.css.js.map +1 -1
  193. package/components/checkbox/themes/shared/switch/switch.fluent.css.js +1 -1
  194. package/components/checkbox/themes/shared/switch/switch.fluent.css.js.map +1 -1
  195. package/components/checkbox/themes/shared/switch/switch.indigo.css.js +1 -1
  196. package/components/checkbox/themes/shared/switch/switch.indigo.css.js.map +1 -1
  197. package/components/chip/themes/chip.base.css.js +1 -1
  198. package/components/chip/themes/chip.base.css.js.map +1 -1
  199. package/components/chip/themes/shared/chip.indigo.css.js +1 -1
  200. package/components/chip/themes/shared/chip.indigo.css.js.map +1 -1
  201. package/components/combo/controllers/navigation.js +1 -1
  202. package/components/combo/controllers/navigation.js.map +1 -1
  203. package/components/combo/themes/combo-item.base.css.js +1 -1
  204. package/components/combo/themes/combo-item.base.css.js.map +1 -1
  205. package/components/combo/themes/combo.base.css.js +1 -1
  206. package/components/combo/themes/combo.base.css.js.map +1 -1
  207. package/components/combo/themes/shared/combo.bootstrap.css.js +1 -1
  208. package/components/combo/themes/shared/combo.bootstrap.css.js.map +1 -1
  209. package/components/combo/themes/shared/combo.common.css.js +1 -1
  210. package/components/combo/themes/shared/combo.common.css.js.map +1 -1
  211. package/components/combo/themes/shared/combo.fluent.css.js +1 -1
  212. package/components/combo/themes/shared/combo.fluent.css.js.map +1 -1
  213. package/components/combo/themes/shared/combo.indigo.css.js +1 -1
  214. package/components/combo/themes/shared/combo.indigo.css.js.map +1 -1
  215. package/components/combo/themes/shared/combo.material.css.js +1 -1
  216. package/components/combo/themes/shared/combo.material.css.js.map +1 -1
  217. package/components/common/context.d.ts +4 -1
  218. package/components/common/context.js +2 -1
  219. package/components/common/context.js.map +1 -1
  220. package/components/common/controllers/key-bindings.js +4 -3
  221. package/components/common/controllers/key-bindings.js.map +1 -1
  222. package/components/common/i18n/chat.resources.d.ts +8 -0
  223. package/components/common/i18n/chat.resources.js +8 -0
  224. package/components/common/i18n/chat.resources.js.map +1 -0
  225. package/components/common/util.d.ts +22 -0
  226. package/components/common/util.js +84 -2
  227. package/components/common/util.js.map +1 -1
  228. package/components/date-picker/date-picker.js +2 -2
  229. package/components/date-picker/date-picker.js.map +1 -1
  230. package/components/date-picker/themes/date-picker.base.css.js +1 -1
  231. package/components/date-picker/themes/date-picker.base.css.js.map +1 -1
  232. package/components/date-picker/themes/shared/date-picker.bootstrap.css.js +1 -1
  233. package/components/date-picker/themes/shared/date-picker.bootstrap.css.js.map +1 -1
  234. package/components/date-picker/themes/shared/date-picker.common.css.js +1 -1
  235. package/components/date-picker/themes/shared/date-picker.common.css.js.map +1 -1
  236. package/components/date-picker/themes/shared/date-picker.fluent.css.js +1 -1
  237. package/components/date-picker/themes/shared/date-picker.fluent.css.js.map +1 -1
  238. package/components/date-picker/themes/shared/date-picker.indigo.css.js +1 -1
  239. package/components/date-picker/themes/shared/date-picker.indigo.css.js.map +1 -1
  240. package/components/date-range-picker/date-range-picker.base.css.js +1 -1
  241. package/components/date-range-picker/date-range-picker.base.css.js.map +1 -1
  242. package/components/date-range-picker/date-range-picker.d.ts +1 -1
  243. package/components/date-range-picker/date-range-picker.js +0 -1
  244. package/components/date-range-picker/date-range-picker.js.map +1 -1
  245. package/components/date-range-picker/predefined-ranges-area.base.css.js +1 -1
  246. package/components/date-range-picker/predefined-ranges-area.base.css.js.map +1 -1
  247. package/components/date-range-picker/themes/shared/date-range-picker.bootstrap.css.js +1 -1
  248. package/components/date-range-picker/themes/shared/date-range-picker.bootstrap.css.js.map +1 -1
  249. package/components/date-range-picker/themes/shared/date-range-picker.common.css.js +1 -1
  250. package/components/date-range-picker/themes/shared/date-range-picker.common.css.js.map +1 -1
  251. package/components/date-range-picker/themes/shared/date-range-picker.fluent.css.js +1 -1
  252. package/components/date-range-picker/themes/shared/date-range-picker.fluent.css.js.map +1 -1
  253. package/components/date-range-picker/themes/shared/date-range-picker.indigo.css.js +1 -1
  254. package/components/date-range-picker/themes/shared/date-range-picker.indigo.css.js.map +1 -1
  255. package/components/date-time-input/date-time-input.js +1 -1
  256. package/components/date-time-input/date-time-input.js.map +1 -1
  257. package/components/dialog/themes/dialog.base.css.js +1 -1
  258. package/components/dialog/themes/dialog.base.css.js.map +1 -1
  259. package/components/dialog/themes/shared/dialog.bootstrap.css.js +1 -1
  260. package/components/dialog/themes/shared/dialog.bootstrap.css.js.map +1 -1
  261. package/components/dialog/themes/shared/dialog.common.css.js +1 -1
  262. package/components/dialog/themes/shared/dialog.common.css.js.map +1 -1
  263. package/components/dialog/themes/shared/dialog.fluent.css.js +1 -1
  264. package/components/dialog/themes/shared/dialog.fluent.css.js.map +1 -1
  265. package/components/dialog/themes/shared/dialog.indigo.css.js +1 -1
  266. package/components/dialog/themes/shared/dialog.indigo.css.js.map +1 -1
  267. package/components/dropdown/themes/dropdown-group.base.css.js +1 -1
  268. package/components/dropdown/themes/dropdown-group.base.css.js.map +1 -1
  269. package/components/dropdown/themes/dropdown-item.base.css.js +1 -1
  270. package/components/dropdown/themes/dropdown-item.base.css.js.map +1 -1
  271. package/components/dropdown/themes/shared/dropdown.indigo.css.js +1 -1
  272. package/components/dropdown/themes/shared/dropdown.indigo.css.js.map +1 -1
  273. package/components/dropdown/themes/shared/group/dropdown-group.fluent.css.js +1 -1
  274. package/components/dropdown/themes/shared/group/dropdown-group.fluent.css.js.map +1 -1
  275. package/components/dropdown/themes/shared/header/dropdown-header.common.css.js +1 -1
  276. package/components/dropdown/themes/shared/header/dropdown-header.common.css.js.map +1 -1
  277. package/components/dropdown/themes/shared/header/dropdown-header.indigo.css.js +1 -1
  278. package/components/dropdown/themes/shared/header/dropdown-header.indigo.css.js.map +1 -1
  279. package/components/dropdown/themes/shared/item/dropdown-item.indigo.css.js +1 -1
  280. package/components/dropdown/themes/shared/item/dropdown-item.indigo.css.js.map +1 -1
  281. package/components/expansion-panel/expansion-panel.js +0 -1
  282. package/components/expansion-panel/expansion-panel.js.map +1 -1
  283. package/components/expansion-panel/themes/expansion-panel.base.css.js +1 -1
  284. package/components/expansion-panel/themes/expansion-panel.base.css.js.map +1 -1
  285. package/components/expansion-panel/themes/shared/expansion-panel.indigo.css.js +1 -1
  286. package/components/expansion-panel/themes/shared/expansion-panel.indigo.css.js.map +1 -1
  287. package/components/file-input/file-input.d.ts +0 -4
  288. package/components/file-input/file-input.js +12 -15
  289. package/components/file-input/file-input.js.map +1 -1
  290. package/components/file-input/themes/shared/file-input.bootstrap.css.js +1 -1
  291. package/components/file-input/themes/shared/file-input.bootstrap.css.js.map +1 -1
  292. package/components/file-input/themes/shared/file-input.material.css.js +1 -1
  293. package/components/file-input/themes/shared/file-input.material.css.js.map +1 -1
  294. package/components/icon/icon-references.js +130 -0
  295. package/components/icon/icon-references.js.map +1 -1
  296. package/components/icon/internal-icons-lib.js +66 -0
  297. package/components/icon/internal-icons-lib.js.map +1 -1
  298. package/components/input/input.d.ts +0 -4
  299. package/components/input/input.js +9 -11
  300. package/components/input/input.js.map +1 -1
  301. package/components/input/themes/shared/input.bootstrap.css.js +1 -1
  302. package/components/input/themes/shared/input.bootstrap.css.js.map +1 -1
  303. package/components/input/themes/shared/input.common.css.js +1 -1
  304. package/components/input/themes/shared/input.common.css.js.map +1 -1
  305. package/components/input/themes/shared/input.fluent.css.js +1 -1
  306. package/components/input/themes/shared/input.fluent.css.js.map +1 -1
  307. package/components/input/themes/shared/input.indigo.css.js +1 -1
  308. package/components/input/themes/shared/input.indigo.css.js.map +1 -1
  309. package/components/input/themes/shared/input.material.css.js +1 -1
  310. package/components/input/themes/shared/input.material.css.js.map +1 -1
  311. package/components/list/themes/dark/container/list.indigo.css.js +1 -1
  312. package/components/list/themes/dark/container/list.indigo.css.js.map +1 -1
  313. package/components/list/themes/dark/header/list-header.indigo.css.js +1 -1
  314. package/components/list/themes/dark/header/list-header.indigo.css.js.map +1 -1
  315. package/components/list/themes/dark/item/list-item.indigo.css.js +1 -1
  316. package/components/list/themes/dark/item/list-item.indigo.css.js.map +1 -1
  317. package/components/list/themes/header.base.css.js +1 -1
  318. package/components/list/themes/header.base.css.js.map +1 -1
  319. package/components/list/themes/item.base.css.js +1 -1
  320. package/components/list/themes/item.base.css.js.map +1 -1
  321. package/components/list/themes/light/container/list.indigo.css.js +1 -1
  322. package/components/list/themes/light/container/list.indigo.css.js.map +1 -1
  323. package/components/list/themes/light/header/list-header.indigo.css.js +1 -1
  324. package/components/list/themes/light/header/list-header.indigo.css.js.map +1 -1
  325. package/components/list/themes/light/item/list-item.indigo.css.js +1 -1
  326. package/components/list/themes/light/item/list-item.indigo.css.js.map +1 -1
  327. package/components/list/themes/shared/header/list-header.indigo.css.js +1 -1
  328. package/components/list/themes/shared/header/list-header.indigo.css.js.map +1 -1
  329. package/components/list/themes/shared/item/list-item.indigo.css.js +1 -1
  330. package/components/list/themes/shared/item/list-item.indigo.css.js.map +1 -1
  331. package/components/nav-drawer/themes/shared/container/nav-drawer.bootstrap.css.js +1 -1
  332. package/components/nav-drawer/themes/shared/container/nav-drawer.bootstrap.css.js.map +1 -1
  333. package/components/nav-drawer/themes/shared/container/nav-drawer.indigo.css.js +1 -1
  334. package/components/nav-drawer/themes/shared/container/nav-drawer.indigo.css.js.map +1 -1
  335. package/components/nav-drawer/themes/shared/container/nav-drawer.material.css.js +1 -1
  336. package/components/nav-drawer/themes/shared/container/nav-drawer.material.css.js.map +1 -1
  337. package/components/nav-drawer/themes/shared/header-item/header-item.bootstrap.css.js +1 -1
  338. package/components/nav-drawer/themes/shared/header-item/header-item.bootstrap.css.js.map +1 -1
  339. package/components/nav-drawer/themes/shared/header-item/header-item.fluent.css.js +1 -1
  340. package/components/nav-drawer/themes/shared/header-item/header-item.fluent.css.js.map +1 -1
  341. package/components/nav-drawer/themes/shared/header-item/header-item.indigo.css.js +1 -1
  342. package/components/nav-drawer/themes/shared/header-item/header-item.indigo.css.js.map +1 -1
  343. package/components/nav-drawer/themes/shared/header-item/header-item.material.css.js +1 -1
  344. package/components/nav-drawer/themes/shared/header-item/header-item.material.css.js.map +1 -1
  345. package/components/nav-drawer/themes/shared/item/item.bootstrap.css.js +1 -1
  346. package/components/nav-drawer/themes/shared/item/item.bootstrap.css.js.map +1 -1
  347. package/components/nav-drawer/themes/shared/item/item.fluent.css.js +1 -1
  348. package/components/nav-drawer/themes/shared/item/item.fluent.css.js.map +1 -1
  349. package/components/nav-drawer/themes/shared/item/item.indigo.css.js +1 -1
  350. package/components/nav-drawer/themes/shared/item/item.indigo.css.js.map +1 -1
  351. package/components/nav-drawer/themes/shared/item/item.material.css.js +1 -1
  352. package/components/nav-drawer/themes/shared/item/item.material.css.js.map +1 -1
  353. package/components/navbar/themes/navbar.base.css.js +1 -1
  354. package/components/navbar/themes/navbar.base.css.js.map +1 -1
  355. package/components/navbar/themes/shared/navbar.bootstrap.css.js +1 -1
  356. package/components/navbar/themes/shared/navbar.bootstrap.css.js.map +1 -1
  357. package/components/navbar/themes/shared/navbar.indigo.css.js +1 -1
  358. package/components/navbar/themes/shared/navbar.indigo.css.js.map +1 -1
  359. package/components/progress/themes/linear/shared/linear.progress.fluent.css.js +1 -1
  360. package/components/progress/themes/linear/shared/linear.progress.fluent.css.js.map +1 -1
  361. package/components/progress/themes/linear/shared/linear.progress.indigo.css.js +1 -1
  362. package/components/progress/themes/linear/shared/linear.progress.indigo.css.js.map +1 -1
  363. package/components/radio/themes/shared/radio.bootstrap.css.js +1 -1
  364. package/components/radio/themes/shared/radio.bootstrap.css.js.map +1 -1
  365. package/components/radio/themes/shared/radio.fluent.css.js +1 -1
  366. package/components/radio/themes/shared/radio.fluent.css.js.map +1 -1
  367. package/components/radio/themes/shared/radio.indigo.css.js +1 -1
  368. package/components/radio/themes/shared/radio.indigo.css.js.map +1 -1
  369. package/components/radio/themes/shared/radio.material.css.js +1 -1
  370. package/components/radio/themes/shared/radio.material.css.js.map +1 -1
  371. package/components/radio-group/themes/radio-group.base.css.js +1 -1
  372. package/components/radio-group/themes/radio-group.base.css.js.map +1 -1
  373. package/components/radio-group/themes/shared/radio-group.bootstrap.css.js +1 -1
  374. package/components/radio-group/themes/shared/radio-group.bootstrap.css.js.map +1 -1
  375. package/components/radio-group/themes/shared/radio-group.fluent.css.js +1 -1
  376. package/components/radio-group/themes/shared/radio-group.fluent.css.js.map +1 -1
  377. package/components/radio-group/themes/shared/radio-group.indigo.css.js +1 -1
  378. package/components/radio-group/themes/shared/radio-group.indigo.css.js.map +1 -1
  379. package/components/radio-group/themes/shared/radio-group.material.css.js +1 -1
  380. package/components/radio-group/themes/shared/radio-group.material.css.js.map +1 -1
  381. package/components/rating/rating.js +0 -1
  382. package/components/rating/rating.js.map +1 -1
  383. package/components/rating/themes/rating.base.css.js +1 -1
  384. package/components/rating/themes/rating.base.css.js.map +1 -1
  385. package/components/rating/themes/shared/rating.indigo.css.js +1 -1
  386. package/components/rating/themes/shared/rating.indigo.css.js.map +1 -1
  387. package/components/resize-container/resize-container.d.ts +1 -1
  388. package/components/select/select.js +0 -1
  389. package/components/select/select.js.map +1 -1
  390. package/components/select/themes/dark/select.bootstrap.css.js +1 -1
  391. package/components/select/themes/dark/select.bootstrap.css.js.map +1 -1
  392. package/components/select/themes/light/select.bootstrap.css.js +1 -1
  393. package/components/select/themes/light/select.bootstrap.css.js.map +1 -1
  394. package/components/select/themes/shared/select.bootstrap.css.js +1 -1
  395. package/components/select/themes/shared/select.bootstrap.css.js.map +1 -1
  396. package/components/select/themes/shared/select.common.css.js +1 -1
  397. package/components/select/themes/shared/select.common.css.js.map +1 -1
  398. package/components/select/themes/shared/select.fluent.css.js +1 -1
  399. package/components/select/themes/shared/select.fluent.css.js.map +1 -1
  400. package/components/select/themes/shared/select.indigo.css.js +1 -1
  401. package/components/select/themes/shared/select.indigo.css.js.map +1 -1
  402. package/components/select/themes/shared/select.material.css.js +1 -1
  403. package/components/select/themes/shared/select.material.css.js.map +1 -1
  404. package/components/slider/slider-base.js +0 -1
  405. package/components/slider/slider-base.js.map +1 -1
  406. package/components/slider/themes/shared/slider.common.css.js +1 -1
  407. package/components/slider/themes/shared/slider.common.css.js.map +1 -1
  408. package/components/slider/themes/slider.base.css.js +1 -1
  409. package/components/slider/themes/slider.base.css.js.map +1 -1
  410. package/components/snackbar/themes/shared/snackbar.indigo.css.js +1 -1
  411. package/components/snackbar/themes/shared/snackbar.indigo.css.js.map +1 -1
  412. package/components/snackbar/themes/snackbar.base.css.js +1 -1
  413. package/components/snackbar/themes/snackbar.base.css.js.map +1 -1
  414. package/components/stepper/step.d.ts +1 -1
  415. package/components/tabs/tabs.js +0 -1
  416. package/components/tabs/tabs.js.map +1 -1
  417. package/components/tabs/themes/shared/tab/tab.bootstrap.css.js +1 -1
  418. package/components/tabs/themes/shared/tab/tab.bootstrap.css.js.map +1 -1
  419. package/components/tabs/themes/shared/tab/tab.fluent.css.js +1 -1
  420. package/components/tabs/themes/shared/tab/tab.fluent.css.js.map +1 -1
  421. package/components/tabs/themes/shared/tab/tab.indigo.css.js +1 -1
  422. package/components/tabs/themes/shared/tab/tab.indigo.css.js.map +1 -1
  423. package/components/tabs/themes/shared/tab/tab.material.css.js +1 -1
  424. package/components/tabs/themes/shared/tab/tab.material.css.js.map +1 -1
  425. package/components/textarea/textarea.d.ts +1 -1
  426. package/components/textarea/themes/shared/textarea.bootstrap.css.js +1 -1
  427. package/components/textarea/themes/shared/textarea.bootstrap.css.js.map +1 -1
  428. package/components/textarea/themes/shared/textarea.common.css.js +1 -1
  429. package/components/textarea/themes/shared/textarea.common.css.js.map +1 -1
  430. package/components/textarea/themes/shared/textarea.fluent.css.js +1 -1
  431. package/components/textarea/themes/shared/textarea.fluent.css.js.map +1 -1
  432. package/components/textarea/themes/shared/textarea.indigo.css.js +1 -1
  433. package/components/textarea/themes/shared/textarea.indigo.css.js.map +1 -1
  434. package/components/textarea/themes/shared/textarea.material.css.js +1 -1
  435. package/components/textarea/themes/shared/textarea.material.css.js.map +1 -1
  436. package/components/textarea/themes/textarea.base.css.js +1 -1
  437. package/components/textarea/themes/textarea.base.css.js.map +1 -1
  438. package/components/tile-manager/resize-state.js +1 -1
  439. package/components/tile-manager/resize-state.js.map +1 -1
  440. package/components/toast/themes/shared/toast.bootstrap.css.js +1 -1
  441. package/components/toast/themes/shared/toast.bootstrap.css.js.map +1 -1
  442. package/components/toast/themes/shared/toast.common.css.js +1 -1
  443. package/components/toast/themes/shared/toast.common.css.js.map +1 -1
  444. package/components/toast/themes/shared/toast.fluent.css.js +1 -1
  445. package/components/toast/themes/shared/toast.fluent.css.js.map +1 -1
  446. package/components/toast/themes/toast.base.css.js +1 -1
  447. package/components/toast/themes/toast.base.css.js.map +1 -1
  448. package/components/tooltip/themes/tooltip.base.css.js +1 -1
  449. package/components/tooltip/themes/tooltip.base.css.js.map +1 -1
  450. package/components/tree/themes/item.base.css.js +1 -1
  451. package/components/tree/themes/item.base.css.js.map +1 -1
  452. package/components/tree/themes/shared/item.common.css.js +1 -1
  453. package/components/tree/themes/shared/item.common.css.js.map +1 -1
  454. package/components/tree/themes/shared/item.indigo.css.js +1 -1
  455. package/components/tree/themes/shared/item.indigo.css.js.map +1 -1
  456. package/components/tree/themes/shared/item.material.css.js +1 -1
  457. package/components/tree/themes/shared/item.material.css.js.map +1 -1
  458. package/components/tree/tree.js +3 -1
  459. package/components/tree/tree.js.map +1 -1
  460. package/components/tree/tree.navigation.js +3 -3
  461. package/components/tree/tree.navigation.js.map +1 -1
  462. package/components/tree/tree.selection.js +6 -2
  463. package/components/tree/tree.selection.js.map +1 -1
  464. package/custom-elements.json +18515 -18333
  465. package/extras/index.d.ts +1 -0
  466. package/extras/index.js +2 -0
  467. package/extras/index.js.map +1 -0
  468. package/igniteui-webcomponents.css-data.json +1 -1
  469. package/igniteui-webcomponents.html-data.json +1 -1
  470. package/index.d.ts +2 -1
  471. package/index.js +1 -0
  472. package/index.js.map +1 -1
  473. package/package.json +6 -2
  474. package/themes/dark/bootstrap.css +1 -1
  475. package/themes/dark/fluent.css +1 -1
  476. package/themes/dark/indigo.css +1 -1
  477. package/themes/dark/material.css +1 -1
  478. package/themes/light/bootstrap.css +1 -1
  479. package/themes/light/fluent.css +1 -1
  480. package/themes/light/indigo.css +1 -1
  481. package/themes/light/material.css +1 -1
  482. package/web-types.json +2 -2
  483. package/components/chat/chat-message-list.d.ts +0 -111
  484. package/components/chat/chat-message-list.js +0 -178
  485. package/components/chat/chat-message-list.js.map +0 -1
  486. package/components/chat/markdown-util.d.ts +0 -2
  487. package/components/chat/markdown-util.js +0 -22
  488. package/components/chat/markdown-util.js.map +0 -1
  489. package/components/chat/themes/message-list.base.css.js +0 -3
  490. package/components/chat/themes/message-list.base.css.js.map +0 -1
  491. package/components/chat/themes/shared/chat-message.common.css.js +0 -3
  492. package/components/chat/themes/shared/chat-message.common.css.js.map +0 -1
  493. package/components/chat/themes/shared/message-attachments.common.css.js +0 -3
  494. package/components/chat/themes/shared/message-attachments.common.css.js.map +0 -1
  495. package/components/chat/themes/shared/message-list.common.css.js +0 -3
  496. package/components/chat/themes/shared/message-list.common.css.js.map +0 -1
  497. /package/components/chat/themes/{message-list.base.css.d.ts → shared/chat-message/chat-message.bootstrap.css.d.ts} +0 -0
  498. /package/components/chat/themes/shared/{chat-message.common.css.d.ts → chat-message/chat-message.common.css.d.ts} +0 -0
  499. /package/components/chat/themes/shared/{message-attachments.common.css.d.ts → chat-message/chat-message.fluent.css.d.ts} +0 -0
  500. /package/components/chat/themes/shared/{message-list.common.css.d.ts → chat-message/chat-message.indigo.css.d.ts} +0 -0
@@ -1,4 +1,4 @@
1
- import { LitElement, type TemplateResult } from 'lit';
1
+ import { LitElement } from 'lit';
2
2
  /**
3
3
  * A web component that provides the input area for the `igc-chat` interface.
4
4
  *
@@ -31,37 +31,57 @@ import { LitElement, type TemplateResult } from 'lit';
31
31
  export default class IgcChatInputComponent extends LitElement {
32
32
  static readonly tagName = "igc-chat-input";
33
33
  static styles: import("lit").CSSResult[];
34
- private _chatState?;
35
34
  static register(): void;
36
- private textInputElement;
37
- private fileInputElement;
38
- protected acceptedFilesChange(): void;
39
- private inputValue;
40
- private inputPlaceholder;
41
- private containerPart;
35
+ private readonly _state;
36
+ private readonly _userInputState;
37
+ private readonly _textInputElement;
38
+ protected readonly _fileInput: HTMLInputElement;
39
+ private _parts;
40
+ private get _acceptedTypes();
41
+ private readonly _defaults;
42
42
  constructor();
43
- get defaultAttachmentsArea(): TemplateResult;
44
- get defaultTextArea(): TemplateResult;
45
- get defaultFileUploadButton(): TemplateResult;
46
- get defaultSendButton(): TemplateResult;
47
- protected renderDefaultFileUploadTemplate(): Generator<TemplateResult<1>, void, unknown>;
48
43
  protected firstUpdated(): void;
49
- protected updated(): void;
50
- private handleInput;
51
- private handleKeyDown;
52
- private handleFocus;
53
- private handleBlur;
54
- private setupDragAndDrop;
55
- private handleDragEnter;
56
- private handleDragOver;
57
- private handleDragLeave;
58
- private handleDrop;
59
- private sendMessage;
60
- private handleFileUpload;
61
- private removeAttachment;
62
- private renderActionsArea;
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
+ */
63
64
  private renderAttachmentsArea;
64
- protected render(): TemplateResult<1>;
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;
84
+ protected render(): import("lit-html").TemplateResult<1>;
65
85
  }
66
86
  declare global {
67
87
  interface HTMLElementTagNameMap {
@@ -7,234 +7,225 @@ 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 { watch } from '../common/decorators/watch.js';
16
+ import { chatContext, chatUserInputContext } from '../common/context.js';
17
+ import { enterKey } from '../common/controllers/key-bindings.js';
15
18
  import { registerComponent } from '../common/definitions/register.js';
16
- import IgcFileInputComponent from '../file-input/file-input.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, sendButtonIcon } from './types.js';
26
+ import { getChatAcceptedFiles, getIconName } from './utils.js';
24
27
  class IgcChatInputComponent extends LitElement {
25
28
  static register() {
26
- registerComponent(IgcChatInputComponent, IgcTextareaComponent, IgcIconButtonComponent, IgcChipComponent, IgcFileInputComponent, IgcIconComponent);
29
+ registerComponent(IgcChatInputComponent, IgcTextareaComponent, IgcIconButtonComponent, IgcChipComponent, IgcIconComponent);
27
30
  }
28
- acceptedFilesChange() {
29
- this._chatState?.updateAcceptedTypesCache();
31
+ get _acceptedTypes() {
32
+ return this._state.acceptedFileTypes;
30
33
  }
31
34
  constructor() {
32
35
  super();
33
- this.inputValue = '';
34
- this.inputPlaceholder = '';
35
- this.containerPart = 'input-container';
36
+ this._parts = { 'input-container': true, dragging: false };
37
+ this._defaults = Object.freeze({
38
+ input: () => this._renderTextArea(),
39
+ inputActions: () => this.renderActionsArea(),
40
+ inputAttachments: (ctx) => this.renderAttachmentsArea(ctx.param),
41
+ fileUploadButton: () => this._renderFileUploadButton(),
42
+ sendButton: () => this._renderSendButton(),
43
+ });
36
44
  addThemingController(this, all);
37
- registerIconFromText('attachment', attachmentIcon, 'material');
38
- registerIconFromText('send-message', sendButtonIcon, 'material');
39
- }
40
- get defaultAttachmentsArea() {
41
- return html `${this._chatState?.inputAttachments?.map((attachment, index) => html `
42
- <div part="attachment-wrapper" role="listitem">
43
- <igc-chip removable @igcRemove=${() => this.removeAttachment(index)}>
44
- <span part="attachment-name">${attachment.name}</span>
45
- </igc-chip>
46
- </div>
47
- `)} `;
48
- }
49
- get defaultTextArea() {
50
- return html ` <igc-textarea
51
- part="text-input"
52
- .placeholder=${this.inputPlaceholder}
53
- resize="auto"
54
- rows="1"
55
- .value=${this.inputValue}
56
- @input=${this.handleInput}
57
- @keydown=${this.handleKeyDown}
58
- @focus=${this.handleFocus}
59
- @blur=${this.handleBlur}
60
- ></igc-textarea>`;
61
- }
62
- get defaultFileUploadButton() {
63
- return html `
64
- <igc-file-input
65
- multiple
66
- .accept=${this._chatState?.options?.acceptedFiles}
67
- @igcChange=${this.handleFileUpload}
68
- >
69
- <igc-icon
70
- slot="file-selector-text"
71
- name="attachment"
72
- collection="material"
73
- ></igc-icon>
74
- </igc-file-input>
75
- `;
76
- }
77
- get defaultSendButton() {
78
- return html ` <igc-icon-button
79
- aria-label="Send message"
80
- name="send-message"
81
- collection="material"
82
- variant="contained"
83
- part="send-button"
84
- ?disabled=${!this.inputValue.trim() &&
85
- this._chatState?.inputAttachments.length === 0}
86
- @click=${this.sendMessage}
87
- ></igc-icon-button>`;
88
- }
89
- *renderDefaultFileUploadTemplate() {
90
- yield html `${this._chatState?.options?.disableAttachments
91
- ? nothing
92
- : this.defaultFileUploadButton}`;
93
45
  }
94
46
  firstUpdated() {
95
- this.setupDragAndDrop();
96
- if (this._chatState) {
97
- this._chatState.updateAcceptedTypesCache();
98
- this._chatState.textArea = this.textInputElement;
99
- }
100
- }
101
- updated() {
102
- this.inputValue = this._chatState?.inputValue || '';
103
- this.inputPlaceholder = this._chatState?.options?.inputPlaceholder || '';
104
- }
105
- handleInput(e) {
106
- const target = e.target;
107
- this.inputValue = target.value;
108
- this._chatState?.handleInputChange(this.inputValue);
109
- }
110
- handleKeyDown(e) {
111
- if (e.key === 'Enter' && !e.shiftKey) {
112
- e.preventDefault();
113
- this.sendMessage();
47
+ this._state.updateAcceptedTypesCache();
48
+ this._state.textArea = this._textInputElement;
49
+ }
50
+ _getRenderer(name) {
51
+ return this._state.options?.renderers
52
+ ? (this._state.options.renderers[name] ?? this._defaults[name])
53
+ : this._defaults[name];
54
+ }
55
+ _handleKeydown(event) {
56
+ const isSend = event.key === enterKey && !event.shiftKey;
57
+ if (isSend) {
58
+ event.preventDefault();
59
+ this._state.sendMessage();
114
60
  }
115
61
  else {
116
- this._chatState?.emitEvent('igcTypingChange', {
117
- detail: { isTyping: true },
118
- });
119
- setTimeout(() => {
120
- this._chatState?.emitEvent('igcTypingChange', {
121
- detail: { isTyping: false },
122
- });
123
- }, 3000);
62
+ this._state.handleKeyDown(event);
124
63
  }
125
64
  }
126
- handleFocus() {
127
- this._chatState?.emitEvent('igcInputFocus');
128
- }
129
- handleBlur() {
130
- this._chatState?.emitEvent('igcInputBlur');
131
- }
132
- setupDragAndDrop() {
133
- const container = this.shadowRoot?.querySelector(`div[part='input-container']`);
134
- if (container) {
135
- container.addEventListener('dragenter', this.handleDragEnter.bind(this));
136
- container.addEventListener('dragover', this.handleDragOver.bind(this));
137
- container.addEventListener('dragleave', this.handleDragLeave.bind(this));
138
- container.addEventListener('drop', this.handleDrop.bind(this));
139
- }
140
- }
141
- handleDragEnter(e) {
142
- e.preventDefault();
143
- e.stopPropagation();
144
- const files = Array.from(e.dataTransfer?.items || []).filter((item) => item.kind === 'file');
145
- const hasValidFiles = files.some((item) => this._chatState?.isFileTypeAccepted(item.getAsFile(), item.type));
146
- this.containerPart = `input-container ${hasValidFiles ? ' dragging' : ''}`;
147
- this._chatState?.emitEvent('igcAttachmentDrag');
148
- }
149
- handleDragOver(e) {
150
- e.preventDefault();
151
- e.stopPropagation();
152
- }
153
- handleDragLeave(e) {
154
- e.preventDefault();
155
- e.stopPropagation();
156
- const rect = e.currentTarget.getBoundingClientRect();
157
- const x = e.clientX;
158
- const y = e.clientY;
65
+ _handleFileInputClick() {
66
+ this._fileInput.showPicker();
67
+ }
68
+ _handleFocusState(event) {
69
+ this._state.emitEvent(event.type === 'focus' ? 'igcInputFocus' : 'igcInputBlur');
70
+ }
71
+ _handleDragEnter(event) {
72
+ event.preventDefault();
73
+ event.stopPropagation();
74
+ const validFiles = getChatAcceptedFiles(event, this._acceptedTypes);
75
+ this._parts = { 'input-container': true, dragging: !isEmpty(validFiles) };
76
+ this._state.emitEvent('igcAttachmentDrag');
77
+ }
78
+ _handleDragOver(event) {
79
+ event.preventDefault();
80
+ event.stopPropagation();
81
+ }
82
+ _handleDragLeave(event) {
83
+ event.preventDefault();
84
+ event.stopPropagation();
85
+ const rect = event.currentTarget.getBoundingClientRect();
86
+ const x = event.clientX;
87
+ const y = event.clientY;
159
88
  if (x <= rect.left ||
160
89
  x >= rect.right ||
161
90
  y <= rect.top ||
162
91
  y >= rect.bottom) {
163
- this.containerPart = 'input-container';
92
+ this._parts = { 'input-container': true, dragging: false };
164
93
  }
165
94
  }
166
- handleDrop(e) {
167
- e.preventDefault();
168
- e.stopPropagation();
169
- this.containerPart = 'input-container';
170
- const files = Array.from(e.dataTransfer?.files || []);
171
- if (files.length === 0)
172
- return;
173
- const validFiles = files.filter((file) => this._chatState?.isFileTypeAccepted(file));
174
- this._chatState?.emitEvent('igcAttachmentDrop');
175
- this._chatState?.attachFiles(validFiles);
95
+ _handleDrop(event) {
96
+ event.preventDefault();
97
+ event.stopPropagation();
98
+ this._parts = { 'input-container': true, dragging: false };
99
+ const validFiles = getChatAcceptedFiles(event, this._acceptedTypes);
100
+ this._state.emitEvent('igcAttachmentDrop');
101
+ this._state.attachFiles(validFiles);
176
102
  this.requestUpdate();
177
103
  }
178
- sendMessage() {
179
- if (!this.inputValue.trim() &&
180
- this._chatState?.inputAttachments.length === 0)
104
+ _handleInput({ detail }) {
105
+ if (detail === this._state.inputValue)
181
106
  return;
182
- this._chatState?.addMessage({
183
- text: this.inputValue,
184
- attachments: this._chatState?.inputAttachments,
185
- });
186
- this.inputValue = '';
187
- if (this.textInputElement) {
188
- this.textInputElement.style.height = 'auto';
189
- }
190
- this.updateComplete.then(() => {
191
- this.textInputElement?.focus();
192
- });
107
+ this._state.inputValue = detail;
108
+ this._state.emitEvent('igcInputChange', { detail: { value: detail } });
193
109
  }
194
- handleFileUpload(e) {
195
- const input = e.target.input;
196
- if (!input.files || input.files.length === 0)
197
- return;
198
- const files = Array.from(input.files);
199
- this._chatState?.attachFiles(files);
200
- this.requestUpdate();
201
- if (this.fileInputElement) {
202
- this.fileInputElement.value = '';
110
+ _handleFileUpload(event) {
111
+ const input = event.target;
112
+ if (hasFiles(input)) {
113
+ this._state.attachFiles(Array.from(input.files));
203
114
  }
204
115
  }
205
- removeAttachment(index) {
206
- this._chatState?.removeAttachment(index);
207
- this.requestUpdate();
116
+ renderAttachmentsArea(attachments) {
117
+ return html `${attachments?.map((attachment, index) => html `
118
+ <div part="attachment-wrapper" role="listitem">
119
+ <igc-chip
120
+ removable
121
+ @igcRemove=${() => this._state.removeAttachment(index)}
122
+ >
123
+ <igc-icon
124
+ slot="prefix"
125
+ name=${getIconName(attachment.file?.type ?? attachment.type)}
126
+ ></igc-icon>
127
+ <span part="attachment-name">${attachment.name}</span>
128
+ </igc-chip>
129
+ </div>
130
+ `)} `;
208
131
  }
209
- renderActionsArea() {
210
- return html `<div part="buttons-container">
211
- ${this._chatState?.options?.templates?.textAreaActionsTemplate
212
- ? this._chatState?.options?.templates?.textAreaActionsTemplate
132
+ _renderTextArea() {
133
+ return html `
134
+ <igc-textarea
135
+ part="text-input"
136
+ placeholder=${ifDefined(this._state.options?.inputPlaceholder)}
137
+ resize="auto"
138
+ rows="1"
139
+ .value=${this._userInputState?.inputValue}
140
+ @igcInput=${this._handleInput}
141
+ @keydown=${this._handleKeydown}
142
+ @focus=${this._handleFocusState}
143
+ @blur=${this._handleFocusState}
144
+ ></igc-textarea>
145
+ `;
146
+ }
147
+ _renderFileUploadButton() {
148
+ const accepted = this._state.options?.acceptedFiles;
149
+ const attachmentsDisabled = this._state.options?.disableInputAttachments;
150
+ return html `${cache(attachmentsDisabled
151
+ ? nothing
213
152
  : html `
214
- ${this.renderDefaultFileUploadTemplate()} ${this.defaultSendButton}
215
- `}
216
- </div>`;
153
+ <label for="input_attachments" part="upload-button">
154
+ <igc-icon-button
155
+ variant="flat"
156
+ name="attach_file"
157
+ @click=${this._handleFileInputClick}
158
+ ></igc-icon-button>
159
+ <input
160
+ type="file"
161
+ id="input_attachments"
162
+ name="input_attachments"
163
+ multiple
164
+ accept=${bindIf(accepted, accepted)}
165
+ @change=${this._handleFileUpload}
166
+ />
167
+ </label>
168
+ `)}`;
169
+ }
170
+ _renderSendButton() {
171
+ const enabled = this._state.hasInputValue || this._state.hasInputAttachments;
172
+ return html `
173
+ <igc-icon-button
174
+ aria-label="Send message"
175
+ name="send_message"
176
+ variant="contained"
177
+ part="send-button"
178
+ ?disabled=${!enabled}
179
+ @click=${this._state.sendMessage}
180
+ ></igc-icon-button>
181
+ `;
217
182
  }
218
- renderAttachmentsArea() {
219
- return html `<div part="attachments" role="list" aria-label="Attachments">
220
- ${this._chatState?.options?.templates?.textAreaAttachmentsTemplate
221
- ? this._chatState.options.templates.textAreaAttachmentsTemplate(this._chatState?.inputAttachments)
222
- : this.defaultAttachmentsArea}
223
- </div>`;
183
+ renderActionsArea() {
184
+ return html ` ${this._getRenderer('fileUploadButton')({
185
+ param: undefined,
186
+ defaults: this._defaults,
187
+ options: this._state.options,
188
+ })}
189
+ ${this._getRenderer('sendButton')({
190
+ param: undefined,
191
+ defaults: this._defaults,
192
+ options: this._state.options,
193
+ })}`;
224
194
  }
225
195
  render() {
196
+ const partialCtx = {
197
+ defaults: this._defaults,
198
+ options: this._state.options,
199
+ };
226
200
  return html `
227
- <div part="${this.containerPart}">
228
- ${this._chatState?.inputAttachments &&
229
- this._chatState?.inputAttachments.length > 0
230
- ? this.renderAttachmentsArea()
201
+ <div
202
+ part=${partMap(this._parts)}
203
+ @dragenter=${this._handleDragEnter}
204
+ @dragover=${this._handleDragOver}
205
+ @dragleave=${this._handleDragLeave}
206
+ @drop=${this._handleDrop}
207
+ >
208
+ ${this._state.inputAttachments &&
209
+ this._state.inputAttachments.length > 0
210
+ ? html ` <div part="attachments" role="list" aria-label="Attachments">
211
+ ${until(this._getRenderer('inputAttachments')({
212
+ ...partialCtx,
213
+ param: this._state.inputAttachments,
214
+ }))}
215
+ </div>`
231
216
  : nothing}
232
217
  <div part="input-wrapper">
233
- ${this._chatState?.options?.templates?.textInputTemplate
234
- ? this._chatState.options.templates.textInputTemplate(this._chatState?.inputValue)
235
- : this.defaultTextArea}
218
+ ${until(this._getRenderer('input')({
219
+ ...partialCtx,
220
+ param: this._state.inputValue,
221
+ }))}
222
+ </div>
223
+ <div part="buttons-container">
224
+ ${until(this._getRenderer('inputActions')({
225
+ ...partialCtx,
226
+ param: undefined,
227
+ }))}
236
228
  </div>
237
- ${this.renderActionsArea()}
238
229
  </div>
239
230
  `;
240
231
  }
@@ -244,23 +235,17 @@ IgcChatInputComponent.styles = [styles, shared];
244
235
  export default IgcChatInputComponent;
245
236
  __decorate([
246
237
  consume({ context: chatContext, subscribe: true })
247
- ], IgcChatInputComponent.prototype, "_chatState", void 0);
238
+ ], IgcChatInputComponent.prototype, "_state", void 0);
248
239
  __decorate([
249
- query(IgcTextareaComponent.tagName)
250
- ], IgcChatInputComponent.prototype, "textInputElement", void 0);
251
- __decorate([
252
- query(IgcFileInputComponent.tagName)
253
- ], IgcChatInputComponent.prototype, "fileInputElement", void 0);
254
- __decorate([
255
- watch('acceptedFiles', { waitUntilFirstUpdate: true })
256
- ], IgcChatInputComponent.prototype, "acceptedFilesChange", null);
240
+ consume({ context: chatUserInputContext, subscribe: true })
241
+ ], IgcChatInputComponent.prototype, "_userInputState", void 0);
257
242
  __decorate([
258
- state()
259
- ], IgcChatInputComponent.prototype, "inputValue", void 0);
243
+ query(IgcTextareaComponent.tagName)
244
+ ], IgcChatInputComponent.prototype, "_textInputElement", void 0);
260
245
  __decorate([
261
- state()
262
- ], IgcChatInputComponent.prototype, "inputPlaceholder", void 0);
246
+ query('#input_attachments')
247
+ ], IgcChatInputComponent.prototype, "_fileInput", void 0);
263
248
  __decorate([
264
249
  state()
265
- ], IgcChatInputComponent.prototype, "containerPart", void 0);
250
+ ], IgcChatInputComponent.prototype, "_parts", void 0);
266
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, type TemplateResult } 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 { 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 { 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 { attachmentIcon, sendButtonIcon } 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 IgcFileInputComponent,\n IgcIconComponent\n );\n }\n\n @query(IgcTextareaComponent.tagName)\n private textInputElement!: IgcTextareaComponent;\n\n @query(IgcFileInputComponent.tagName)\n private fileInputElement!: IgcFileInputComponent;\n\n @watch('acceptedFiles', { waitUntilFirstUpdate: true })\n protected acceptedFilesChange(): void {\n this._chatState?.updateAcceptedTypesCache();\n }\n\n @state()\n private inputValue = '';\n\n @state()\n private inputPlaceholder = '';\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 }\n\n public get defaultAttachmentsArea(): TemplateResult {\n return html`${this._chatState?.inputAttachments?.map(\n (attachment, index) => html`\n <div part=\"attachment-wrapper\" role=\"listitem\">\n <igc-chip removable @igcRemove=${() => this.removeAttachment(index)}>\n <span part=\"attachment-name\">${attachment.name}</span>\n </igc-chip>\n </div>\n `\n )} `;\n }\n\n public get defaultTextArea(): TemplateResult {\n return html` <igc-textarea\n part=\"text-input\"\n .placeholder=${this.inputPlaceholder}\n resize=\"auto\"\n rows=\"1\"\n .value=${this.inputValue}\n @input=${this.handleInput}\n @keydown=${this.handleKeyDown}\n @focus=${this.handleFocus}\n @blur=${this.handleBlur}\n ></igc-textarea>`;\n }\n\n public get defaultFileUploadButton(): TemplateResult {\n return html`\n <igc-file-input\n multiple\n .accept=${this._chatState?.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\n public get defaultSendButton(): TemplateResult {\n return html` <igc-icon-button\n aria-label=\"Send message\"\n name=\"send-message\"\n collection=\"material\"\n variant=\"contained\"\n part=\"send-button\"\n ?disabled=${!this.inputValue.trim() &&\n this._chatState?.inputAttachments.length === 0}\n @click=${this.sendMessage}\n ></igc-icon-button>`;\n }\n\n protected *renderDefaultFileUploadTemplate() {\n yield html`${this._chatState?.options?.disableAttachments\n ? nothing\n : this.defaultFileUploadButton}`;\n }\n\n protected override firstUpdated() {\n this.setupDragAndDrop();\n if (this._chatState) {\n this._chatState.updateAcceptedTypesCache();\n this._chatState.textArea = this.textInputElement;\n }\n }\n\n protected override updated() {\n this.inputValue = this._chatState?.inputValue || '';\n this.inputPlaceholder = this._chatState?.options?.inputPlaceholder || '';\n }\n\n private handleInput(e: Event) {\n const target = e.target as HTMLTextAreaElement;\n this.inputValue = target.value;\n this._chatState?.handleInputChange(this.inputValue);\n // this.adjustTextareaHeight();\n }\n\n private handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n this.sendMessage();\n } else {\n this._chatState?.emitEvent('igcTypingChange', {\n detail: { isTyping: true },\n });\n\n // wait 3 seconds and dispatch a stop-typing event\n setTimeout(() => {\n this._chatState?.emitEvent('igcTypingChange', {\n detail: { isTyping: false },\n });\n }, 3000);\n }\n }\n\n private handleFocus() {\n this._chatState?.emitEvent('igcInputFocus');\n }\n\n private handleBlur() {\n this._chatState?.emitEvent('igcInputBlur');\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 // 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 (\n !this.inputValue.trim() &&\n this._chatState?.inputAttachments.length === 0\n )\n return;\n\n this._chatState?.addMessage({\n text: this.inputValue,\n attachments: this._chatState?.inputAttachments,\n });\n this.inputValue = '';\n\n if (this.textInputElement) {\n this.textInputElement.style.height = 'auto';\n }\n\n this.updateComplete.then(() => {\n this.textInputElement?.focus();\n });\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._chatState?.attachFiles(files);\n this.requestUpdate();\n\n if (this.fileInputElement) {\n this.fileInputElement.value = '';\n }\n }\n\n private removeAttachment(index: number) {\n this._chatState?.removeAttachment(index);\n this.requestUpdate();\n }\n\n private renderActionsArea() {\n return html`<div part=\"buttons-container\">\n ${this._chatState?.options?.templates?.textAreaActionsTemplate\n ? this._chatState?.options?.templates?.textAreaActionsTemplate\n : html`\n ${this.renderDefaultFileUploadTemplate()} ${this.defaultSendButton}\n `}\n </div>`;\n }\n\n private renderAttachmentsArea() {\n return html`<div part=\"attachments\" role=\"list\" aria-label=\"Attachments\">\n ${this._chatState?.options?.templates?.textAreaAttachmentsTemplate\n ? this._chatState.options.templates.textAreaAttachmentsTemplate(\n this._chatState?.inputAttachments\n )\n : this.defaultAttachmentsArea}\n </div>`;\n }\n\n protected override render() {\n return html`\n <div part=\"${this.containerPart}\">\n ${this._chatState?.inputAttachments &&\n this._chatState?.inputAttachments.length > 0\n ? this.renderAttachmentsArea()\n : nothing}\n <div part=\"input-wrapper\">\n ${this._chatState?.options?.templates?.textInputTemplate\n ? this._chatState.options.templates.textInputTemplate(\n this._chatState?.inputValue\n )\n : this.defaultTextArea}\n </div>\n ${this.renderActionsArea()}\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 { ChatTemplateRenderer, IgcMessageAttachment } from './types.js';\nimport { getChatAcceptedFiles, getIconName } from './utils.js';\n\ntype DefaultInputRenderers = {\n input: ChatTemplateRenderer<string>;\n inputActions: ChatTemplateRenderer<void>;\n inputAttachments: ChatTemplateRenderer<IgcMessageAttachment[]>;\n fileUploadButton: ChatTemplateRenderer<void>;\n sendButton: ChatTemplateRenderer<void>;\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 @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 private readonly _defaults: Readonly<DefaultInputRenderers> = Object.freeze({\n input: () => this._renderTextArea(),\n inputActions: () => this.renderActionsArea(),\n inputAttachments: (ctx) => this.renderAttachmentsArea(ctx.param),\n fileUploadButton: () => this._renderFileUploadButton(),\n sendButton: () => this._renderSendButton(),\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(\n name: keyof DefaultInputRenderers\n ): ChatTemplateRenderer<any> {\n return this._state.options?.renderers\n ? (this._state.options.renderers[name] ?? this._defaults[name])\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 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 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 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 return html` ${this._getRenderer('fileUploadButton')({\n param: undefined,\n defaults: this._defaults,\n options: this._state.options,\n })}\n ${this._getRenderer('sendButton')({\n param: undefined,\n defaults: this._defaults,\n options: this._state.options,\n })}`;\n }\n\n protected override render() {\n const partialCtx = {\n defaults: this._defaults,\n options: this._state.options,\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.inputAttachments &&\n this._state.inputAttachments.length > 0\n ? html` <div part=\"attachments\" role=\"list\" aria-label=\"Attachments\">\n ${until(\n this._getRenderer('inputAttachments')({\n ...partialCtx,\n param: this._state.inputAttachments,\n })\n )}\n </div>`\n : nothing}\n <div part=\"input-wrapper\">\n ${until(\n this._getRenderer('input')({\n ...partialCtx,\n param: this._state.inputValue,\n })\n )}\n </div>\n <div part=\"buttons-container\">\n ${until(\n this._getRenderer('inputActions')({\n ...partialCtx,\n param: undefined,\n })\n )}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-chat-input': IgcChatInputComponent;\n }\n}\n"]}