igniteui-webcomponents 7.3.2 → 7.4.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 (478) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/animations/easings.d.ts +21 -31
  3. package/animations/easings.js +21 -34
  4. package/animations/easings.js.map +1 -1
  5. package/animations/player.d.ts +8 -16
  6. package/animations/player.js +5 -8
  7. package/animations/player.js.map +1 -1
  8. package/animations/view-transition.d.ts +10 -10
  9. package/animations/view-transition.js +26 -37
  10. package/animations/view-transition.js.map +1 -1
  11. package/components/breadcrumb/breadcrumb.d.ts +74 -0
  12. package/components/breadcrumb/breadcrumb.js +107 -0
  13. package/components/breadcrumb/breadcrumb.js.map +1 -0
  14. package/components/breadcrumb/breadcrumbs.d.ts +60 -0
  15. package/components/breadcrumb/breadcrumbs.js +50 -0
  16. package/components/breadcrumb/breadcrumbs.js.map +1 -0
  17. package/components/breadcrumb/themes/breadcrumb.base.css.js +3 -0
  18. package/components/breadcrumb/themes/breadcrumb.base.css.js.map +1 -0
  19. package/components/breadcrumb/themes/breadcrumbs.base.css.d.ts +1 -0
  20. package/components/{resize-container/themes/resize-container.base.css.js → breadcrumb/themes/breadcrumbs.base.css.js} +2 -2
  21. package/components/breadcrumb/themes/breadcrumbs.base.css.js.map +1 -0
  22. package/components/breadcrumb/themes/dark/breadcrumb.bootstrap.css.d.ts +1 -0
  23. package/components/breadcrumb/themes/dark/breadcrumb.bootstrap.css.js +3 -0
  24. package/components/breadcrumb/themes/dark/breadcrumb.bootstrap.css.js.map +1 -0
  25. package/components/breadcrumb/themes/dark/breadcrumb.fluent.css.d.ts +1 -0
  26. package/components/breadcrumb/themes/dark/breadcrumb.fluent.css.js +3 -0
  27. package/components/breadcrumb/themes/dark/breadcrumb.fluent.css.js.map +1 -0
  28. package/components/breadcrumb/themes/dark/breadcrumb.indigo.css.d.ts +1 -0
  29. package/components/breadcrumb/themes/dark/breadcrumb.indigo.css.js +3 -0
  30. package/components/breadcrumb/themes/dark/breadcrumb.indigo.css.js.map +1 -0
  31. package/components/breadcrumb/themes/dark/breadcrumb.material.css.d.ts +1 -0
  32. package/components/breadcrumb/themes/dark/breadcrumb.material.css.js +3 -0
  33. package/components/breadcrumb/themes/dark/breadcrumb.material.css.js.map +1 -0
  34. package/components/breadcrumb/themes/light/breadcrumb.bootstrap.css.d.ts +1 -0
  35. package/components/breadcrumb/themes/light/breadcrumb.bootstrap.css.js +3 -0
  36. package/components/breadcrumb/themes/light/breadcrumb.bootstrap.css.js.map +1 -0
  37. package/components/breadcrumb/themes/light/breadcrumb.fluent.css.d.ts +1 -0
  38. package/components/breadcrumb/themes/light/breadcrumb.fluent.css.js +3 -0
  39. package/components/breadcrumb/themes/light/breadcrumb.fluent.css.js.map +1 -0
  40. package/components/breadcrumb/themes/light/breadcrumb.indigo.css.d.ts +1 -0
  41. package/components/breadcrumb/themes/light/breadcrumb.indigo.css.js +3 -0
  42. package/components/breadcrumb/themes/light/breadcrumb.indigo.css.js.map +1 -0
  43. package/components/breadcrumb/themes/light/breadcrumb.material.css.d.ts +1 -0
  44. package/components/breadcrumb/themes/light/breadcrumb.material.css.js +3 -0
  45. package/components/breadcrumb/themes/light/breadcrumb.material.css.js.map +1 -0
  46. package/components/breadcrumb/themes/light/breadcrumb.shared.css.d.ts +1 -0
  47. package/components/breadcrumb/themes/light/breadcrumb.shared.css.js +3 -0
  48. package/components/breadcrumb/themes/light/breadcrumb.shared.css.js.map +1 -0
  49. package/components/breadcrumb/themes/shared/breadcrumb.bootstrap.css.d.ts +1 -0
  50. package/components/breadcrumb/themes/shared/breadcrumb.bootstrap.css.js +3 -0
  51. package/components/breadcrumb/themes/shared/breadcrumb.bootstrap.css.js.map +1 -0
  52. package/components/breadcrumb/themes/shared/breadcrumb.common.css.d.ts +1 -0
  53. package/components/breadcrumb/themes/shared/breadcrumb.common.css.js +3 -0
  54. package/components/breadcrumb/themes/shared/breadcrumb.common.css.js.map +1 -0
  55. package/components/breadcrumb/themes/shared/breadcrumb.fluent.css.d.ts +1 -0
  56. package/components/breadcrumb/themes/shared/breadcrumb.fluent.css.js +3 -0
  57. package/components/breadcrumb/themes/shared/breadcrumb.fluent.css.js.map +1 -0
  58. package/components/breadcrumb/themes/shared/breadcrumb.indigo.css.d.ts +1 -0
  59. package/components/breadcrumb/themes/shared/breadcrumb.indigo.css.js +3 -0
  60. package/components/breadcrumb/themes/shared/breadcrumb.indigo.css.js.map +1 -0
  61. package/components/breadcrumb/themes/shared/breadcrumb.material.css.d.ts +1 -0
  62. package/components/breadcrumb/themes/shared/breadcrumb.material.css.js +3 -0
  63. package/components/breadcrumb/themes/shared/breadcrumb.material.css.js.map +1 -0
  64. package/components/breadcrumb/themes/themes.d.ts +2 -0
  65. package/components/breadcrumb/themes/themes.js +50 -0
  66. package/components/breadcrumb/themes/themes.js.map +1 -0
  67. package/components/button/button.d.ts +0 -2
  68. package/components/button/button.js.map +1 -1
  69. package/components/button-group/button-group.d.ts +42 -12
  70. package/components/button-group/button-group.js +82 -34
  71. package/components/button-group/button-group.js.map +1 -1
  72. package/components/button-group/toggle-button.d.ts +6 -1
  73. package/components/button-group/toggle-button.js +28 -2
  74. package/components/button-group/toggle-button.js.map +1 -1
  75. package/components/calendar/base.js +2 -1
  76. package/components/calendar/base.js.map +1 -1
  77. package/components/calendar/calendar.d.ts +2 -3
  78. package/components/calendar/calendar.js.map +1 -1
  79. package/components/calendar/days-view/days-view.d.ts +2 -2
  80. package/components/calendar/days-view/days-view.js.map +1 -1
  81. package/components/carousel/carousel-indicator.js +1 -0
  82. package/components/carousel/carousel-indicator.js.map +1 -1
  83. package/components/carousel/carousel-slide.d.ts +1 -1
  84. package/components/carousel/carousel-slide.js.map +1 -1
  85. package/components/carousel/carousel.d.ts +3 -3
  86. package/components/carousel/carousel.js.map +1 -1
  87. package/components/chat/chat-input.d.ts +1 -2
  88. package/components/chat/chat-input.js +1 -1
  89. package/components/chat/chat-input.js.map +1 -1
  90. package/components/chat/chat-state.d.ts +8 -9
  91. package/components/chat/chat-state.js.map +1 -1
  92. package/components/chat/chat.d.ts +1 -3
  93. package/components/chat/chat.js +2 -2
  94. package/components/chat/chat.js.map +1 -1
  95. package/components/chat/message-attachments.d.ts +6 -15
  96. package/components/chat/message-attachments.js.map +1 -1
  97. package/components/chat/utils.d.ts +0 -1
  98. package/components/chat/utils.js +1 -1
  99. package/components/chat/utils.js.map +1 -1
  100. package/components/checkbox/checkbox-base.d.ts +3 -1
  101. package/components/checkbox/checkbox-base.js +4 -0
  102. package/components/checkbox/checkbox-base.js.map +1 -1
  103. package/components/checkbox/checkbox.js +4 -12
  104. package/components/checkbox/checkbox.js.map +1 -1
  105. package/components/checkbox/switch.js +1 -8
  106. package/components/checkbox/switch.js.map +1 -1
  107. package/components/chip/chip.d.ts +2 -2
  108. package/components/chip/chip.js.map +1 -1
  109. package/components/color-picker/color-picker.d.ts +35 -34
  110. package/components/color-picker/color-picker.js +12 -7
  111. package/components/color-picker/color-picker.js.map +1 -1
  112. package/components/color-picker/common.d.ts +0 -2
  113. package/components/color-picker/common.js +2 -2
  114. package/components/color-picker/common.js.map +1 -1
  115. package/components/color-picker/converters.js.map +1 -1
  116. package/components/color-picker/picker-canvas.js.map +1 -1
  117. package/components/combo/combo.d.ts +24 -24
  118. package/components/combo/combo.js +21 -26
  119. package/components/combo/combo.js.map +1 -1
  120. package/components/combo/controllers/data.d.ts +7 -10
  121. package/components/combo/controllers/data.js.map +1 -1
  122. package/components/date-picker/date-picker.base.d.ts +22 -27
  123. package/components/date-picker/date-picker.base.js +9 -3
  124. package/components/date-picker/date-picker.base.js.map +1 -1
  125. package/components/date-picker/date-picker.d.ts +1 -1
  126. package/components/date-picker/date-picker.js +5 -3
  127. package/components/date-picker/date-picker.js.map +1 -1
  128. package/components/date-range-picker/date-range-input.d.ts +0 -2
  129. package/components/date-range-picker/date-range-input.js +0 -6
  130. package/components/date-range-picker/date-range-input.js.map +1 -1
  131. package/components/date-range-picker/date-range-picker.d.ts +22 -31
  132. package/components/date-range-picker/date-range-picker.js +7 -7
  133. package/components/date-range-picker/date-range-picker.js.map +1 -1
  134. package/components/date-range-picker/i18n.d.ts +21 -0
  135. package/components/date-range-picker/i18n.js +10 -0
  136. package/components/date-range-picker/i18n.js.map +1 -0
  137. package/components/date-range-picker/predefined-ranges-area.d.ts +3 -3
  138. package/components/date-range-picker/predefined-ranges-area.js +2 -5
  139. package/components/date-range-picker/predefined-ranges-area.js.map +1 -1
  140. package/components/date-range-picker/validators.d.ts +0 -4
  141. package/components/date-range-picker/validators.js +4 -4
  142. package/components/date-range-picker/validators.js.map +1 -1
  143. package/components/date-time-input/date-time-input.base.d.ts +42 -40
  144. package/components/date-time-input/date-time-input.base.js +9 -5
  145. package/components/date-time-input/date-time-input.base.js.map +1 -1
  146. package/components/date-time-input/date-time-input.d.ts +1 -11
  147. package/components/date-time-input/date-time-input.js +0 -6
  148. package/components/date-time-input/date-time-input.js.map +1 -1
  149. package/components/date-time-input/datetime-mask-parser.d.ts +0 -10
  150. package/components/date-time-input/datetime-mask-parser.js +1 -1
  151. package/components/date-time-input/datetime-mask-parser.js.map +1 -1
  152. package/components/dialog/dialog.js.map +1 -1
  153. package/components/dropdown/dropdown-group.d.ts +2 -10
  154. package/components/dropdown/dropdown-group.js +2 -27
  155. package/components/dropdown/dropdown-group.js.map +1 -1
  156. package/components/dropdown/dropdown.d.ts +17 -23
  157. package/components/dropdown/dropdown.js +5 -17
  158. package/components/dropdown/dropdown.js.map +1 -1
  159. package/components/file-input/file-input.d.ts +7 -2
  160. package/components/file-input/file-input.js +4 -0
  161. package/components/file-input/file-input.js.map +1 -1
  162. package/components/icon/icon.d.ts +1 -1
  163. package/components/icon/icon.registry.d.ts +6 -6
  164. package/components/icon/icon.registry.js.map +1 -1
  165. package/components/input/input-base.d.ts +2 -2
  166. package/components/input/input-base.js +3 -5
  167. package/components/input/input-base.js.map +1 -1
  168. package/components/input/input.d.ts +3 -3
  169. package/components/input/input.js.map +1 -1
  170. package/components/mask-input/mask-history.d.ts +22 -18
  171. package/components/mask-input/mask-history.js.map +1 -1
  172. package/components/mask-input/mask-input.d.ts +1 -1
  173. package/components/mask-input/mask-parser.d.ts +11 -13
  174. package/components/mask-input/mask-parser.js.map +1 -1
  175. package/components/popover/popover.d.ts +45 -34
  176. package/components/popover/popover.js +54 -122
  177. package/components/popover/popover.js.map +1 -1
  178. package/components/popover/position/arrow.d.ts +19 -0
  179. package/components/popover/position/arrow.js +33 -0
  180. package/components/popover/position/arrow.js.map +1 -0
  181. package/components/popover/position/floating.d.ts +40 -0
  182. package/components/popover/position/floating.js +146 -0
  183. package/components/popover/position/floating.js.map +1 -0
  184. package/components/popover/position/native.d.ts +45 -0
  185. package/components/popover/position/native.js +158 -0
  186. package/components/popover/position/native.js.map +1 -0
  187. package/components/popover/position/strategy.d.ts +37 -0
  188. package/components/popover/position/strategy.js +21 -0
  189. package/components/popover/position/strategy.js.map +1 -0
  190. package/components/popover/position/types.d.ts +26 -0
  191. package/components/popover/position/types.js +15 -0
  192. package/components/popover/position/types.js.map +1 -0
  193. package/components/popover/themes/light/popover.base.css.js +1 -1
  194. package/components/popover/themes/light/popover.base.css.js.map +1 -1
  195. package/components/progress/circular-progress.d.ts +0 -5
  196. package/components/progress/circular-progress.js.map +1 -1
  197. package/components/qr-code/qr-code.d.ts +1 -1
  198. package/components/radio/radio.d.ts +6 -4
  199. package/components/radio/radio.js +24 -25
  200. package/components/radio/radio.js.map +1 -1
  201. package/components/radio-group/radio-group.js.map +1 -1
  202. package/components/rating/rating.d.ts +9 -6
  203. package/components/rating/rating.js +17 -18
  204. package/components/rating/rating.js.map +1 -1
  205. package/components/select/select-group.d.ts +5 -10
  206. package/components/select/select-group.js +10 -34
  207. package/components/select/select-group.js.map +1 -1
  208. package/components/select/select.d.ts +12 -20
  209. package/components/select/select.js +5 -15
  210. package/components/select/select.js.map +1 -1
  211. package/components/slider/range-slider.d.ts +0 -1
  212. package/components/slider/range-slider.js +6 -11
  213. package/components/slider/range-slider.js.map +1 -1
  214. package/components/slider/slider-base.d.ts +4 -1
  215. package/components/slider/slider-base.js +20 -18
  216. package/components/slider/slider-base.js.map +1 -1
  217. package/components/slider/slider.d.ts +2 -0
  218. package/components/slider/slider.js +5 -1
  219. package/components/slider/slider.js.map +1 -1
  220. package/components/splitter/splitter.d.ts +6 -6
  221. package/components/splitter/splitter.js.map +1 -1
  222. package/components/textarea/textarea.d.ts +2 -5
  223. package/components/textarea/textarea.js +3 -5
  224. package/components/textarea/textarea.js.map +1 -1
  225. package/components/tile-manager/tile-manager.d.ts +6 -7
  226. package/components/tile-manager/tile-manager.js.map +1 -1
  227. package/components/tile-manager/tile.d.ts +3 -3
  228. package/components/tile-manager/tile.js.map +1 -1
  229. package/components/toast/toast.d.ts +0 -2
  230. package/components/toast/toast.js.map +1 -1
  231. package/components/tooltip/controller.js.map +1 -1
  232. package/components/tooltip/service.js +4 -5
  233. package/components/tooltip/service.js.map +1 -1
  234. package/components/tooltip/tooltip.d.ts +34 -13
  235. package/components/tooltip/tooltip.js +8 -4
  236. package/components/tooltip/tooltip.js.map +1 -1
  237. package/components/tree/tree-item.d.ts +6 -6
  238. package/components/tree/tree-item.js.map +1 -1
  239. package/components/tree/tree.navigation.d.ts +5 -6
  240. package/components/tree/tree.navigation.js.map +1 -1
  241. package/components/tree/tree.selection.js.map +1 -1
  242. package/components/types.d.ts +1 -1
  243. package/components/types.js.map +1 -1
  244. package/components/validation-container/validation-container.js +2 -1
  245. package/components/validation-container/validation-container.js.map +1 -1
  246. package/components/virtualization/engine.d.ts +40 -9
  247. package/components/virtualization/engine.js +126 -61
  248. package/components/virtualization/engine.js.map +1 -1
  249. package/components/virtualization/recycle.d.ts +13 -0
  250. package/components/virtualization/recycle.js +152 -0
  251. package/components/virtualization/recycle.js.map +1 -0
  252. package/components/virtualization/virtualization.d.ts +84 -65
  253. package/components/virtualization/virtualization.js +20 -16
  254. package/components/virtualization/virtualization.js.map +1 -1
  255. package/custom-elements.json +18455 -19551
  256. package/igniteui-webcomponents.css-data.json +2 -2
  257. package/igniteui-webcomponents.html-data.json +1 -1
  258. package/index.d.ts +3 -1
  259. package/index.js +2 -0
  260. package/index.js.map +1 -1
  261. package/internals/abort-handler.d.ts +13 -25
  262. package/internals/abort-handler.js +4 -6
  263. package/internals/abort-handler.js.map +1 -1
  264. package/internals/context.d.ts +13 -7
  265. package/internals/context.js +2 -1
  266. package/internals/context.js.map +1 -1
  267. package/internals/controllers/adopt-styles.d.ts +19 -20
  268. package/internals/controllers/adopt-styles.js +3 -8
  269. package/internals/controllers/adopt-styles.js.map +1 -1
  270. package/internals/controllers/aria-projection.d.ts +100 -61
  271. package/internals/controllers/aria-projection.js +81 -31
  272. package/internals/controllers/aria-projection.js.map +1 -1
  273. package/internals/controllers/async-consumer.js.map +1 -1
  274. package/internals/controllers/command.d.ts +15 -30
  275. package/internals/controllers/command.js +2 -7
  276. package/internals/controllers/command.js.map +1 -1
  277. package/internals/controllers/context-provider.d.ts +7 -13
  278. package/internals/controllers/context-provider.js.map +1 -1
  279. package/internals/controllers/focus-ring.d.ts +10 -30
  280. package/internals/controllers/focus-ring.js +6 -12
  281. package/internals/controllers/focus-ring.js.map +1 -1
  282. package/internals/controllers/fullscreen.d.ts +7 -23
  283. package/internals/controllers/fullscreen.js +3 -9
  284. package/internals/controllers/fullscreen.js.map +1 -1
  285. package/internals/controllers/gestures.d.ts +10 -29
  286. package/internals/controllers/gestures.js +1 -3
  287. package/internals/controllers/gestures.js.map +1 -1
  288. package/internals/controllers/group.d.ts +13 -30
  289. package/internals/controllers/group.js.map +1 -1
  290. package/internals/controllers/host-listeners.d.ts +28 -0
  291. package/internals/controllers/host-listeners.js +27 -0
  292. package/internals/controllers/host-listeners.js.map +1 -0
  293. package/internals/controllers/id-resolver.d.ts +8 -9
  294. package/internals/controllers/id-resolver.js +6 -14
  295. package/internals/controllers/id-resolver.js.map +1 -1
  296. package/internals/controllers/internals.d.ts +53 -104
  297. package/internals/controllers/internals.js +40 -13
  298. package/internals/controllers/internals.js.map +1 -1
  299. package/internals/controllers/key-bindings.d.ts +61 -158
  300. package/internals/controllers/key-bindings.js +68 -67
  301. package/internals/controllers/key-bindings.js.map +1 -1
  302. package/internals/controllers/keys.d.ts +32 -0
  303. package/internals/controllers/keys.js +20 -0
  304. package/internals/controllers/keys.js.map +1 -0
  305. package/internals/controllers/mutation-observer.d.ts +14 -37
  306. package/internals/controllers/mutation-observer.js +1 -1
  307. package/internals/controllers/mutation-observer.js.map +1 -1
  308. package/internals/controllers/resize-observer.d.ts +9 -19
  309. package/internals/controllers/resize-observer.js.map +1 -1
  310. package/internals/controllers/root-click.d.ts +11 -42
  311. package/internals/controllers/root-click.js +4 -6
  312. package/internals/controllers/root-click.js.map +1 -1
  313. package/internals/controllers/roving-focus.d.ts +16 -35
  314. package/internals/controllers/roving-focus.js.map +1 -1
  315. package/internals/controllers/slot.d.ts +25 -54
  316. package/internals/controllers/slot.js +6 -6
  317. package/internals/controllers/slot.js.map +1 -1
  318. package/internals/controllers/toggle.d.ts +44 -48
  319. package/internals/controllers/toggle.js.map +1 -1
  320. package/internals/date/compare.js.map +1 -1
  321. package/internals/date/converters.d.ts +10 -7
  322. package/internals/date/converters.js.map +1 -1
  323. package/internals/date/model.d.ts +9 -16
  324. package/internals/date/model.js +22 -25
  325. package/internals/date/model.js.map +1 -1
  326. package/internals/decorators/blazorAdditionalDependencies.d.ts +4 -2
  327. package/internals/decorators/blazorAdditionalDependencies.js.map +1 -1
  328. package/internals/decorators/blazorDeepImport.d.ts +1 -3
  329. package/internals/decorators/blazorDeepImport.js.map +1 -1
  330. package/internals/decorators/blazorInclude.d.ts +3 -2
  331. package/internals/decorators/blazorInclude.js.map +1 -1
  332. package/internals/decorators/blazorIndirectRender.d.ts +1 -3
  333. package/internals/decorators/blazorIndirectRender.js.map +1 -1
  334. package/internals/decorators/blazorSuppressComponent.d.ts +1 -3
  335. package/internals/decorators/blazorSuppressComponent.js.map +1 -1
  336. package/internals/decorators/coerced-property.d.ts +14 -20
  337. package/internals/decorators/coerced-property.js.map +1 -1
  338. package/internals/decorators/shadow-options.d.ts +2 -5
  339. package/internals/decorators/shadow-options.js.map +1 -1
  340. package/internals/definitions/defineAllComponents.js +2 -0
  341. package/internals/definitions/defineAllComponents.js.map +1 -1
  342. package/internals/directives/drag.d.ts +51 -81
  343. package/internals/directives/drag.js +27 -89
  344. package/internals/directives/drag.js.map +1 -1
  345. package/internals/directives/pointer-operation.d.ts +75 -0
  346. package/internals/directives/pointer-operation.js +92 -0
  347. package/internals/directives/pointer-operation.js.map +1 -0
  348. package/internals/directives/resize.d.ts +36 -64
  349. package/internals/directives/resize.js +18 -85
  350. package/internals/directives/resize.js.map +1 -1
  351. package/internals/i18n/EN/calendar.resources.d.ts +8 -2
  352. package/internals/i18n/EN/calendar.resources.js +2 -2
  353. package/internals/i18n/EN/calendar.resources.js.map +1 -1
  354. package/internals/i18n/EN/chat.resources.d.ts +8 -2
  355. package/internals/i18n/EN/chat.resources.js +3 -10
  356. package/internals/i18n/EN/chat.resources.js.map +1 -1
  357. package/internals/i18n/EN/date-picker.resources.d.ts +6 -4
  358. package/internals/i18n/EN/date-picker.resources.js +1 -7
  359. package/internals/i18n/EN/date-picker.resources.js.map +1 -1
  360. package/internals/i18n/EN/date-range-picker.resources.d.ts +9 -2
  361. package/internals/i18n/EN/date-range-picker.resources.js +2 -2
  362. package/internals/i18n/EN/date-range-picker.resources.js.map +1 -1
  363. package/internals/i18n/i18n-controller.d.ts +44 -46
  364. package/internals/i18n/i18n-controller.js +46 -33
  365. package/internals/i18n/i18n-controller.js.map +1 -1
  366. package/internals/i18n/utils.d.ts +9 -4
  367. package/internals/i18n/utils.js +4 -27
  368. package/internals/i18n/utils.js.map +1 -1
  369. package/internals/mixins/alert.d.ts +10 -25
  370. package/internals/mixins/alert.js.map +1 -1
  371. package/internals/mixins/combo-box.d.ts +21 -11
  372. package/internals/mixins/combo-box.js +16 -22
  373. package/internals/mixins/combo-box.js.map +1 -1
  374. package/internals/mixins/event-emitter.js +9 -11
  375. package/internals/mixins/event-emitter.js.map +1 -1
  376. package/internals/mixins/forms/associated-required.d.ts +4 -4
  377. package/internals/mixins/forms/associated-required.js.map +1 -1
  378. package/internals/mixins/forms/associated.d.ts +4 -2
  379. package/internals/mixins/forms/associated.js +42 -19
  380. package/internals/mixins/forms/associated.js.map +1 -1
  381. package/internals/mixins/forms/form-transformers.js.map +1 -1
  382. package/internals/mixins/forms/types.d.ts +27 -78
  383. package/internals/mixins/forms/types.js.map +1 -1
  384. package/internals/mixins/group.d.ts +18 -0
  385. package/internals/mixins/group.js +37 -0
  386. package/internals/mixins/group.js.map +1 -0
  387. package/internals/mixins/i18n.d.ts +10 -16
  388. package/internals/mixins/i18n.js.map +1 -1
  389. package/internals/mixins/mask-behavior.d.ts +8 -22
  390. package/internals/mixins/mask-behavior.js +1 -2
  391. package/internals/mixins/mask-behavior.js.map +1 -1
  392. package/internals/mixins/option.d.ts +1 -2
  393. package/internals/mixins/option.js +2 -1
  394. package/internals/mixins/option.js.map +1 -1
  395. package/internals/part-map.d.ts +4 -2
  396. package/internals/part-map.js +1 -1
  397. package/internals/part-map.js.map +1 -1
  398. package/internals/templates/input-shell.d.ts +8 -17
  399. package/internals/templates/input-shell.js +4 -1
  400. package/internals/templates/input-shell.js.map +1 -1
  401. package/internals/templates/masked-input.d.ts +7 -8
  402. package/internals/templates/masked-input.js.map +1 -1
  403. package/internals/templates/slotted-icon.d.ts +7 -12
  404. package/internals/templates/slotted-icon.js.map +1 -1
  405. package/internals/templates/toggle-shell.d.ts +19 -19
  406. package/internals/templates/toggle-shell.js +12 -8
  407. package/internals/templates/toggle-shell.js.map +1 -1
  408. package/internals/timing.d.ts +5 -14
  409. package/internals/timing.js.map +1 -1
  410. package/internals/utils/arrays.d.ts +21 -21
  411. package/internals/utils/arrays.js +14 -0
  412. package/internals/utils/arrays.js.map +1 -1
  413. package/internals/utils/dom.d.ts +53 -41
  414. package/internals/utils/dom.js +3 -4
  415. package/internals/utils/dom.js.map +1 -1
  416. package/internals/utils/events.d.ts +29 -16
  417. package/internals/utils/events.js +9 -1
  418. package/internals/utils/events.js.map +1 -1
  419. package/internals/utils/lit.d.ts +5 -2
  420. package/internals/utils/lit.js.map +1 -1
  421. package/internals/utils/math.d.ts +8 -6
  422. package/internals/utils/math.js.map +1 -1
  423. package/internals/utils/objects.d.ts +3 -20
  424. package/internals/utils/objects.js +1 -39
  425. package/internals/utils/objects.js.map +1 -1
  426. package/internals/utils/strings.d.ts +9 -11
  427. package/internals/utils/strings.js.map +1 -1
  428. package/internals/utils/types.d.ts +16 -3
  429. package/internals/utils/types.js +3 -0
  430. package/internals/utils/types.js.map +1 -1
  431. package/internals/validators.d.ts +9 -8
  432. package/internals/validators.js +12 -6
  433. package/internals/validators.js.map +1 -1
  434. package/package.json +1 -1
  435. package/skills/README.md +4 -3
  436. package/skills/igniteui-wc-choose-components/SKILL.md +2 -1
  437. package/skills/igniteui-wc-customize-component-theme/SKILL.md +2 -1
  438. package/skills/igniteui-wc-figma-to-app/SKILL.md +328 -0
  439. package/skills/igniteui-wc-figma-to-app/references/asset-extraction.md +343 -0
  440. package/skills/igniteui-wc-figma-to-app/references/design-provenance.md +199 -0
  441. package/skills/igniteui-wc-figma-to-app/references/design-token-bridge.md +489 -0
  442. package/skills/igniteui-wc-figma-to-app/references/figma-component-map.md +370 -0
  443. package/skills/igniteui-wc-figma-to-app/references/figma-exploration.md +222 -0
  444. package/skills/igniteui-wc-figma-to-app/references/mcp-setup.md +363 -0
  445. package/skills/igniteui-wc-figma-to-app/references/project-setup.md +105 -0
  446. package/skills/igniteui-wc-figma-to-app/references/theme-generation.md +180 -0
  447. package/skills/igniteui-wc-figma-to-app/references/validation-patterns.md +370 -0
  448. package/skills/igniteui-wc-generate-from-image-design/SKILL.md +2 -1
  449. package/skills/igniteui-wc-generate-from-image-design/references/gotchas.md +3 -3
  450. package/skills/igniteui-wc-grids/SKILL.md +133 -0
  451. package/skills/igniteui-wc-integrate-with-framework/SKILL.md +2 -1
  452. package/skills/igniteui-wc-migrate-grid-lite-to-premium/SKILL.md +2 -1
  453. package/skills/igniteui-wc-optimize-bundle-size/SKILL.md +2 -1
  454. package/theming/config.d.ts +14 -5
  455. package/theming/config.js +38 -18
  456. package/theming/config.js.map +1 -1
  457. package/theming/context.d.ts +1 -23
  458. package/theming/context.js.map +1 -1
  459. package/theming/theming-controller.d.ts +2 -32
  460. package/theming/theming-controller.js +15 -21
  461. package/theming/theming-controller.js.map +1 -1
  462. package/theming/theming-event.d.ts +0 -7
  463. package/theming/theming-event.js +0 -13
  464. package/theming/theming-event.js.map +1 -1
  465. package/theming/types.d.ts +1 -8
  466. package/theming/types.js.map +1 -1
  467. package/web-types.json +3 -3
  468. package/animations/presets/slide/index.d.ts +0 -3
  469. package/animations/presets/slide/index.js +0 -16
  470. package/animations/presets/slide/index.js.map +0 -1
  471. package/components/resize-container/themes/resize-container.base.css.js.map +0 -1
  472. package/internals/controllers/root-scroll.d.ts +0 -31
  473. package/internals/controllers/root-scroll.js +0 -71
  474. package/internals/controllers/root-scroll.js.map +0 -1
  475. package/theming/utils.d.ts +0 -11
  476. package/theming/utils.js +0 -20
  477. package/theming/utils.js.map +0 -1
  478. /package/components/{resize-container/themes/resize-container.base.css.d.ts → breadcrumb/themes/breadcrumb.base.css.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"carousel.js","sourceRoot":"","sources":["../../../src/components/carousel/carousel.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CarouselResourceStringsEN,\n type ICarouselResourceStrings,\n} from 'igniteui-i18n-core';\nimport { html, LitElement, nothing, type PropertyValues } from 'lit';\nimport { property, queryAll, state } from 'lit/decorators.js';\nimport { cache } from 'lit/directives/cache.js';\nimport { createRef, ref } from 'lit/directives/ref.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { carouselContext } from '#internals/context.js';\nimport { addContextProvider } from '#internals/controllers/context-provider.js';\nimport {\n addGesturesController,\n type SwipeEvent,\n} from '#internals/controllers/gestures.js';\nimport { addInternalsController } from '#internals/controllers/internals.js';\nimport {\n addKeybindings,\n arrowLeft,\n arrowRight,\n endKey,\n homeKey,\n} from '#internals/controllers/key-bindings.js';\nimport {\n createMutationController,\n type MutationControllerParams,\n} from '#internals/controllers/mutation-observer.js';\nimport {\n addSlotController,\n type InferSlotNames,\n type SlotChangeCallbackParameters,\n setSlots,\n} from '#internals/controllers/slot.js';\nimport { shadowOptions } from '#internals/decorators/shadow-options.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport type { I18nControllerConfig } from '#internals/i18n/i18n-controller.js';\nimport type { Constructor } from '#internals/mixins/constructor.js';\nimport { EventEmitterMixin } from '#internals/mixins/event-emitter.js';\nimport { I18nMixin } from '#internals/mixins/i18n.js';\nimport { partMap } from '#internals/part-map.js';\nimport { renderSlottedIcon } from '#internals/templates/slotted-icon.js';\nimport { firstOf, isEmpty, lastOf } from '#internals/utils/arrays.js';\nimport { isLTR } from '#internals/utils/dom.js';\nimport {\n addSafeEventListener,\n getElementFromPath,\n} from '#internals/utils/events.js';\nimport { asNumber, wrap } from '#internals/utils/math.js';\nimport { createIdGenerator, formatString } from '#internals/utils/strings.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcButtonComponent from '../button/button.js';\nimport IgcIconComponent from '../icon/icon.js';\nimport type {\n CarouselIndicatorsOrientation,\n HorizontalTransitionAnimation,\n} from '../types.js';\nimport IgcCarouselIndicatorContainerComponent from './carousel-indicator-container.js';\nimport IgcCarouselIndicatorComponent from './carousel-indicator.js';\nimport IgcCarouselSlideComponent from './carousel-slide.js';\nimport { styles } from './themes/carousel.base.css.js';\nimport { all } from './themes/container.js';\nimport { styles as shared } from './themes/shared/carousel.common.css.js';\n\nexport interface IgcCarouselComponentEventMap {\n igcSlideChanged: CustomEvent<number>;\n igcPlaying: CustomEvent<void>;\n igcPaused: CustomEvent<void>;\n}\n\nconst nextId = createIdGenerator('igc-carousel');\nconst Slots = setSlots('indicator', 'previous-button', 'next-button');\n\nconst i18n: I18nControllerConfig<ICarouselResourceStrings> = {\n defaultEN: CarouselResourceStringsEN,\n};\n\n/**\n * The carousel presents a set of slides by sequentially displaying a subset of one or more.\n *\n * @element igc-carousel\n *\n * @slot Default slot for the carousel. Any carousel slides should be projected here.\n * @slot indicator - Renders the custom indicators of the carousel. An indicator element sets this slot itself.\n * @slot previous-button - Renders content inside the previous button.\n * @slot next-button - Renders content inside the next button.\n *\n * @fires igcSlideChanged - Emitted when the current active slide is changed either by user interaction or by the interval callback.\n * @fires igcPlaying - Emitted when the carousel enters playing state by a user interaction.\n * @fires igcPaused - Emitted when the carousel enters paused state by a user interaction.\n *\n * @csspart navigation - The wrapper container of each carousel navigation button.\n * @csspart previous - The wrapper container of the carousel previous navigation button.\n * @csspart next - The wrapper container of the carousel next navigation button.\n * @csspart dot - The carousel dot indicator container.\n * @csspart active - The carousel active dot indicator container.\n * @csspart label - The label container of the carousel indicators.\n * @csspart start - The wrapping container of all carousel indicators when indicators-orientation is set to start.\n */\n@shadowOptions({ delegatesFocus: true })\nexport default class IgcCarouselComponent extends I18nMixin(\n EventEmitterMixin<IgcCarouselComponentEventMap, Constructor<LitElement>>(\n LitElement\n ),\n i18n\n) {\n public static styles = [styles, shared];\n public static readonly tagName = 'igc-carousel';\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(\n IgcCarouselComponent,\n IgcCarouselIndicatorComponent,\n IgcCarouselIndicatorContainerComponent,\n IgcCarouselSlideComponent,\n IgcIconComponent,\n IgcButtonComponent\n );\n }\n\n //#region Internal state\n\n private readonly _carouselId = nextId();\n private _paused = false;\n private _lastInterval: ReturnType<typeof setInterval> | null = null;\n private _hasKeyboardInteractionOnIndicators = false;\n private _hasPointerInteraction = false;\n private _hasInnerFocus = false;\n\n /**\n * Whether an interaction - a pointer over the carousel, or focus inside it -\n * caused the current paused state. An explicit `pause()` call does not set it.\n */\n private _pausedByInteraction = false;\n\n private _slides: IgcCarouselSlideComponent[] = [];\n private _projectedIndicators: IgcCarouselIndicatorComponent[] = [];\n\n @state()\n private _activeSlide?: IgcCarouselSlideComponent;\n\n @state()\n private _playing = false;\n\n private readonly _slots = addSlotController(this, {\n slots: Slots,\n onChange: this._handleSlotChange,\n initial: true,\n });\n\n private readonly _context = addContextProvider(this, {\n context: carouselContext,\n watch: ['animationType', 'slidesLabelFormat', 'indicatorsLabelFormat'],\n value: () => this,\n });\n\n @queryAll(IgcCarouselIndicatorComponent.tagName)\n private readonly _defaultIndicators!: NodeListOf<IgcCarouselIndicatorComponent>;\n\n private readonly _carouselSlidesContainerRef = createRef<HTMLDivElement>();\n private readonly _indicatorsContainerRef = createRef<HTMLDivElement>();\n private readonly _prevButtonRef = createRef<IgcButtonComponent>();\n private readonly _nextButtonRef = createRef<IgcButtonComponent>();\n\n private get _hasProjectedIndicators(): boolean {\n return !isEmpty(this._projectedIndicators);\n }\n\n /** The indicators that the carousel shows. */\n private get _indicators(): IgcCarouselIndicatorComponent[] {\n return this._hasProjectedIndicators\n ? this._projectedIndicators\n : Array.from(this._defaultIndicators);\n }\n\n private get _showIndicatorsLabel(): boolean {\n return this.total > this.maximumIndicatorsCount;\n }\n\n private get _nextIndex(): number {\n return wrap(0, this.total - 1, this.current + 1);\n }\n\n private get _previousIndex(): number {\n return wrap(0, this.total - 1, this.current - 1);\n }\n\n //#endregion\n\n //#region Public attributes and properties\n\n /**\n * Whether the carousel should skip rotating to the first slide after it reaches the last.\n *\n * @attr disable-loop\n * @default false\n */\n @property({ type: Boolean, reflect: true, attribute: 'disable-loop' })\n public disableLoop = false;\n\n /**\n * Whether the carousel should ignore use interactions and not pause on them.\n *\n * @attr disable-pause-on-interaction\n * @default false\n */\n @property({\n type: Boolean,\n reflect: true,\n attribute: 'disable-pause-on-interaction',\n })\n public disablePauseOnInteraction = false;\n\n /**\n * Whether the carousel should skip rendering of the default navigation buttons.\n *\n * @attr hide-navigation\n * @default false\n */\n @property({ type: Boolean, reflect: true, attribute: 'hide-navigation' })\n public hideNavigation = false;\n\n /**\n * Whether the carousel should render the indicator controls (dots).\n *\n * @attr hide-indicators\n * @default false\n */\n @property({ type: Boolean, reflect: true, attribute: 'hide-indicators' })\n public hideIndicators = false;\n\n /**\n * Whether the carousel has vertical alignment.\n *\n * @attr vertical\n * @default false\n */\n @property({ type: Boolean, reflect: true })\n public vertical = false;\n\n /**\n * The orientation of the indicator controls (dots).\n *\n * @attr indicators-orientation\n * @default end\n */\n @property({ attribute: 'indicators-orientation' })\n public indicatorsOrientation: CarouselIndicatorsOrientation = 'end';\n\n /**\n * The format used to set the aria-label on the carousel indicators.\n * Instances of '{0}' will be replaced with the index of the corresponding slide.\n *\n * @attr indicators-label-format\n */\n @property({ attribute: 'indicators-label-format' })\n public set indicatorsLabelFormat(value: string) {\n this._indicatorsLabelFormat = value;\n }\n\n public get indicatorsLabelFormat() {\n return (\n this._indicatorsLabelFormat ??\n `${this.resourceStrings.carousel_slide} {0}`\n );\n }\n private _indicatorsLabelFormat: string | undefined;\n\n /**\n * The format used to set the aria-label on the carousel slides and the text displayed\n * when the number of indicators is greater than tha maximum indicator count.\n * Instances of '{0}' will be replaced with the index of the corresponding slide.\n * Instances of '{1}' will be replaced with the total amount of slides.\n *\n * @attr slides-label-format\n */\n @property({ attribute: 'slides-label-format' })\n public set slidesLabelFormat(value: string) {\n this._slidesLabelFormat = value;\n }\n\n public get slidesLabelFormat() {\n return (\n this._slidesLabelFormat ?? `{0} ${this.resourceStrings.carousel_of} {1}`\n );\n }\n\n private _slidesLabelFormat: string | undefined;\n\n /**\n * The duration in milliseconds between changing the active slide.\n * @attr interval\n */\n @property({ type: Number })\n public interval: number | undefined;\n\n /**\n * The maximum number of indicator controls (dots) that can be shown. Default value is `10`.\n *\n * @attr maximum-indicators-count\n * @default 10\n */\n @property({ type: Number, attribute: 'maximum-indicators-count' })\n public maximumIndicatorsCount = 10;\n\n /**\n * The animation type.\n *\n * @attr animation-type\n * @default 'slide'\n */\n @property({ attribute: 'animation-type' })\n public animationType: HorizontalTransitionAnimation = 'slide';\n\n /* blazorSuppress */\n /** The slides of the carousel. */\n public get slides(): IgcCarouselSlideComponent[] {\n return Array.from(this._slides);\n }\n\n /** Total number of slides. */\n public get total(): number {\n return this._slides.length;\n }\n\n /** The index of the current active slide. */\n public get current(): number {\n return this._activeSlide\n ? Math.max(0, this._slides.indexOf(this._activeSlide))\n : 0;\n }\n\n /** Whether the carousel is in playing state. */\n public get isPlaying(): boolean {\n return this._playing;\n }\n\n /** Whether the carousel is in paused state. */\n public get isPaused(): boolean {\n return this._paused;\n }\n\n //#endregion\n\n //#region Life-cycle hooks and observer callback\n\n constructor() {\n super();\n\n addInternalsController(this, {\n initialARIA: {\n role: 'region',\n ariaRoleDescription: 'carousel',\n },\n });\n\n addThemingController(this, all);\n\n addSafeEventListener(this, 'pointerenter', this._handlePointerInteraction);\n addSafeEventListener(this, 'pointerleave', this._handlePointerInteraction);\n addSafeEventListener(this, 'focusin', this._handleFocusInteraction);\n addSafeEventListener(this, 'focusout', this._handleFocusInteraction);\n\n addGesturesController(this, {\n ref: this._carouselSlidesContainerRef,\n touchOnly: true,\n })\n .set('swipe-left', this._handleHorizontalSwipe)\n .set('swipe-right', this._handleHorizontalSwipe)\n .set('swipe-up', this._handleVerticalSwipe)\n .set('swipe-down', this._handleVerticalSwipe);\n\n addKeybindings(this, {\n ref: this._indicatorsContainerRef,\n })\n .set(arrowLeft, this._handleArrowLeft)\n .set(arrowRight, this._handleArrowRight)\n .set(homeKey, this._handleHomeKey)\n .set(endKey, this._handleEndKey);\n\n addKeybindings(this, {\n ref: this._prevButtonRef,\n }).setActivateHandler(this._handleNavigationInteractionPrevious);\n\n addKeybindings(this, {\n ref: this._nextButtonRef,\n }).setActivateHandler(this._handleNavigationInteractionNext);\n\n createMutationController(this, {\n callback: this._observerCallback,\n filter: [IgcCarouselSlideComponent.tagName],\n config: {\n attributeFilter: ['active'],\n childList: true,\n subtree: true,\n },\n });\n }\n\n protected override willUpdate(changedProperties: PropertyValues<this>): void {\n if (changedProperties.has('interval')) {\n const play = asNumber(this.interval) > 0;\n const interacting =\n play &&\n !this.disablePauseOnInteraction &&\n (this._hasPointerInteraction || this._hasInnerFocus);\n\n this._setRotation(play && !interacting, interacting);\n this._pausedByInteraction = interacting;\n }\n }\n\n /** @internal */\n public override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.hasUpdated) {\n this._restartInterval();\n }\n }\n\n /** @internal */\n public override disconnectedCallback(): void {\n this._resetInterval();\n super.disconnectedCallback();\n }\n\n protected override async firstUpdated(): Promise<void> {\n await this.updateComplete;\n // Republish for consumers created after their own first render (Blazor timing).\n this._context.publish();\n\n this._activateInitialSlide();\n }\n\n protected override updated(): void {\n if (this._hasProjectedIndicators) {\n this._updateProjectedIndicators();\n }\n }\n\n private _observerCallback({\n changes: { added, attributes },\n }: MutationControllerParams<IgcCarouselSlideComponent>) {\n const activeSlides = this._slides.filter((slide) => slide.active);\n\n if (activeSlides.length <= 1) {\n return;\n }\n\n const node = isEmpty(added)\n ? (lastOf(attributes)?.node ?? lastOf(activeSlides))\n : lastOf(added).node;\n\n const idx = this._slides.indexOf(node);\n\n for (const [i, slide] of this._slides.entries()) {\n if (slide.active && i !== idx) {\n slide.active = false;\n }\n }\n\n this._activateSlide(this._slides[idx]);\n }\n\n //#endregion\n\n //#region Event listeners\n\n private _handleSlotChange(\n params: SlotChangeCallbackParameters<InferSlotNames<typeof Slots>>\n ): void {\n if (params.isDefault || params.isInitial) {\n const previousSlide = this._activeSlide;\n const previousIndex = this.current;\n\n this._slides = this._slots.getAssignedElements('[default]', {\n selector: IgcCarouselSlideComponent.tagName,\n });\n\n if (previousSlide && !this._slides.includes(previousSlide)) {\n this._reactivateSlide(previousSlide, previousIndex);\n } else if (this.hasUpdated && !this._activeSlide) {\n // Slides came into an empty carousel after the first render. Without\n // this, no slide is active, and the carousel shows nothing.\n this._activateInitialSlide();\n }\n }\n\n if (params.slot === 'indicator') {\n this._projectedIndicators = this._slots.getAssignedElements('indicator', {\n selector: IgcCarouselIndicatorComponent.tagName,\n });\n }\n }\n\n private _handlePointerInteraction(event: PointerEvent): void {\n this._hasPointerInteraction = event.type === 'pointerenter';\n this._handlePauseOnInteraction();\n }\n\n private _handleFocusInteraction(event: FocusEvent): void {\n // focusin - element that lost focus\n // focusout - element that gained focus\n const node = event.relatedTarget as Node;\n\n if (this.contains(node)) {\n return;\n }\n\n this._hasInnerFocus = event.type === 'focusin';\n this._handlePauseOnInteraction();\n }\n\n private _handleIndicatorClick(event: PointerEvent): void {\n const indicator = getElementFromPath(\n IgcCarouselIndicatorComponent.tagName,\n event\n )!;\n\n const index = this._indicators.indexOf(indicator);\n\n this._handleInteraction(() =>\n this.select(this._slides[index], index > this.current ? 'next' : 'prev')\n );\n }\n\n //#endregion\n\n //#region Keyboard event listeners\n\n private _handleArrowLeft(): void {\n this._hasKeyboardInteractionOnIndicators = true;\n this._handleInteraction(isLTR(this) ? this.prev : this.next);\n }\n\n private _handleArrowRight(): void {\n this._hasKeyboardInteractionOnIndicators = true;\n this._handleInteraction(isLTR(this) ? this.next : this.prev);\n }\n\n private _handleHomeKey(): void {\n this._hasKeyboardInteractionOnIndicators = true;\n this._handleInteraction(() =>\n this.select(isLTR(this) ? firstOf(this._slides) : lastOf(this._slides))\n );\n }\n\n private _handleEndKey(): void {\n this._hasKeyboardInteractionOnIndicators = true;\n this._handleInteraction(() =>\n this.select(isLTR(this) ? lastOf(this._slides) : firstOf(this._slides))\n );\n }\n\n //#endregion\n\n //#region Gestures event listeners\n\n private _handleVerticalSwipe({ data: { direction } }: SwipeEvent): void {\n if (this.vertical) {\n this._handleInteraction(direction === 'up' ? this.next : this.prev);\n }\n }\n\n private _handleHorizontalSwipe({ data: { direction } }: SwipeEvent): void {\n if (!this.vertical) {\n const callback = () => {\n if (isLTR(this)) {\n return direction === 'left' ? this.next : this.prev;\n }\n return direction === 'left' ? this.prev : this.next;\n };\n\n this._handleInteraction(callback());\n }\n }\n\n //#endregion\n\n //#region Internal API\n\n private _handleNavigationInteractionNext(): void {\n this._handleInteraction(this.next);\n }\n\n private _handleNavigationInteractionPrevious(): void {\n this._handleInteraction(this.prev);\n }\n\n private async _handleInteraction(\n callback: () => Promise<boolean>\n ): Promise<void> {\n if (this.interval) {\n this._resetInterval();\n }\n\n if (await callback.call(this)) {\n this.emitEvent('igcSlideChanged', { detail: this.current });\n }\n\n this._hasKeyboardInteractionOnIndicators = false;\n\n if (this.interval) {\n this._restartInterval();\n }\n }\n\n private _handlePauseOnInteraction(): void {\n if (!this.interval || this.disablePauseOnInteraction) return;\n\n const interacting = this._hasPointerInteraction || this._hasInnerFocus;\n\n if (interacting) {\n if (!this.isPlaying) return;\n\n this._pause();\n this._pausedByInteraction = true;\n this.emitEvent('igcPaused');\n return;\n }\n\n if (this._pausedByInteraction) {\n this.play();\n this.emitEvent('igcPlaying');\n }\n }\n\n private _activateSlide(slide: IgcCarouselSlideComponent): void {\n if (this._activeSlide) {\n this._activeSlide.active = false;\n }\n\n this._activeSlide = slide;\n this._activeSlide.active = true;\n\n if (this._hasKeyboardInteractionOnIndicators) {\n this._indicators[this.current]?.focus();\n this._hasKeyboardInteractionOnIndicators = false;\n }\n }\n\n /** Activates the authored active slide, or the first slide. */\n private _activateInitialSlide(): void {\n if (!isEmpty(this._slides)) {\n this._activateSlide(\n this._slides.findLast((slide) => slide.active) ?? firstOf(this._slides)\n );\n }\n }\n\n /**\n * Moves the active state from a slide that left the carousel to the slide\n * that takes its position.\n */\n private _reactivateSlide(\n removed: IgcCarouselSlideComponent,\n index: number\n ): void {\n removed.active = false;\n this._activeSlide = undefined;\n\n if (!isEmpty(this._slides)) {\n this._activateSlide(this._slides[Math.min(index, this.total - 1)]);\n }\n }\n\n private _updateProjectedIndicators(): void {\n const current = this.current;\n\n for (const [idx, indicator] of this._projectedIndicators.entries()) {\n const slide = this._slides.at(idx);\n\n indicator.active = Boolean(slide) && idx === current;\n indicator.index = idx;\n\n if (slide) {\n indicator.setAttribute('aria-controls', slide.id);\n } else {\n indicator.removeAttribute('aria-controls');\n }\n }\n }\n\n /**\n * Sets the rotation state of the carousel, and starts or clears its timer.\n */\n private _setRotation(playing: boolean, paused = false): void {\n this._playing = playing;\n this._paused = paused;\n this._pausedByInteraction = false;\n this._restartInterval();\n }\n\n /** Stops the rotation, and keeps the interaction state as it is. */\n private _pause(): void {\n if (this.isPlaying) {\n this._setRotation(false, true);\n }\n }\n\n private _resetInterval(): void {\n if (this._lastInterval) {\n clearInterval(this._lastInterval);\n this._lastInterval = null;\n }\n }\n\n private _restartInterval(): void {\n this._resetInterval();\n\n // A detached carousel starts no timer. The reconnect starts it again.\n if (!this.isConnected || !this.isPlaying || asNumber(this.interval) <= 0) {\n return;\n }\n\n this._lastInterval = setInterval(() => {\n if (\n this.isPlaying &&\n this.total &&\n !(this.disableLoop && this._nextIndex === 0)\n ) {\n this.select(this._slides[this._nextIndex], 'next');\n this.emitEvent('igcSlideChanged', { detail: this.current });\n } else {\n this._pause();\n }\n }, this.interval);\n }\n\n private async _animateSlides(\n nextSlide: IgcCarouselSlideComponent,\n currentSlide: IgcCarouselSlideComponent,\n dir: 'next' | 'prev'\n ): Promise<void> {\n if (dir === 'next') {\n // Animate slides in next direction\n currentSlide.previous = true;\n currentSlide.toggleAnimation('out');\n this._activateSlide(nextSlide);\n await nextSlide.toggleAnimation('in');\n currentSlide.previous = false;\n } else {\n // Animate slides in previous direction\n currentSlide.previous = true;\n currentSlide.toggleAnimation('in', 'reverse');\n this._activateSlide(nextSlide);\n await nextSlide.toggleAnimation('out', 'reverse');\n currentSlide.previous = false;\n }\n }\n\n //#endregion\n\n //#region Public API\n\n /**\n * Resumes playing of the carousel slides.\n */\n public play(): void {\n if (!this.isPlaying) {\n this._setRotation(true);\n }\n }\n\n /**\n * Pauses the rotation of the carousel slides.\n */\n public pause(): void {\n this._pause();\n this._pausedByInteraction = false;\n }\n\n /**\n * Switches to the next slide, runs any animations, and returns if the operation was successful.\n */\n public async next(): Promise<boolean> {\n if (this.disableLoop && this._nextIndex === 0) {\n this._pause();\n return false;\n }\n\n return await this.select(this._slides[this._nextIndex], 'next');\n }\n\n /**\n * Switches to the previous slide, runs any animations, and returns if the operation was successful.\n */\n public async prev(): Promise<boolean> {\n if (this.disableLoop && this._previousIndex === this.total - 1) {\n this._pause();\n return false;\n }\n\n return await this.select(this._slides[this._previousIndex], 'prev');\n }\n\n /* blazorSuppress */\n /**\n * Switches to the passed-in slide, runs any animations, and returns if the operation was successful.\n */\n public async select(\n slide: IgcCarouselSlideComponent,\n animationDirection?: 'next' | 'prev'\n ): Promise<boolean>;\n /**\n * Switches to slide by index, runs any animations, and returns if the operation was successful.\n */\n public async select(\n index: number,\n animationDirection?: 'next' | 'prev'\n ): Promise<boolean>;\n public async select(\n slideOrIndex: IgcCarouselSlideComponent | number,\n animationDirection?: 'next' | 'prev'\n ): Promise<boolean> {\n let index: number;\n let slide: IgcCarouselSlideComponent | undefined;\n\n if (typeof slideOrIndex === 'number') {\n index = slideOrIndex;\n slide = this._slides.at(index);\n } else {\n slide = slideOrIndex;\n index = this._slides.indexOf(slide);\n }\n\n if (index === this.current || index === -1 || !slide) {\n return false;\n }\n\n const dir = animationDirection ?? (index > this.current ? 'next' : 'prev');\n\n if (!this._activeSlide) {\n this._activateSlide(slide);\n return true;\n }\n\n await this._animateSlides(slide, this._activeSlide, dir);\n return true;\n }\n\n //#endregion\n\n //#region Template renderers\n\n private _renderNavigation() {\n return html`\n <igc-button\n ${ref(this._prevButtonRef)}\n type=\"button\"\n part=\"navigation previous\"\n aria-label=${this.resourceStrings.carousel_previous_slide}\n aria-controls=${this._carouselId}\n ?disabled=${this.disableLoop && this.current === 0}\n @click=${this._handleNavigationInteractionPrevious}\n >\n ${renderSlottedIcon({ slot: 'previous-button', icon: 'carousel_prev' })}\n </igc-button>\n\n <igc-button\n ${ref(this._nextButtonRef)}\n type=\"button\"\n part=\"navigation next\"\n aria-label=${this.resourceStrings.carousel_next_slide}\n aria-controls=${this._carouselId}\n ?disabled=${this.disableLoop && this.current === this.total - 1}\n @click=${this._handleNavigationInteractionNext}\n >\n ${renderSlottedIcon({ slot: 'next-button', icon: 'carousel_next' })}\n </igc-button>\n `;\n }\n\n private _renderIndicators() {\n return this._slides.map((slide, i) => {\n const forward = slide.active ? 'visible' : 'hidden';\n const backward = slide.active ? 'hidden' : 'visible';\n\n return html`\n <igc-carousel-indicator\n exportparts=\"indicator, active, inactive\"\n .active=${slide.active}\n .index=${i}\n >\n <div part=\"dot\" style=${styleMap({ visibility: backward })}></div>\n <div\n part=\"dot active\"\n slot=\"active\"\n style=${styleMap({ visibility: forward })}\n ></div>\n </igc-carousel-indicator>\n `;\n });\n }\n\n private _renderIndicatorContainer() {\n const parts = {\n indicators: true,\n start: this.indicatorsOrientation === 'start',\n };\n\n return html`\n <igc-carousel-indicator-container>\n <div\n ${ref(this._indicatorsContainerRef)}\n role=\"tablist\"\n part=${partMap(parts)}\n >\n <slot name=\"indicator\" @click=${this._handleIndicatorClick}>\n ${cache(\n this._hasProjectedIndicators ? nothing : this._renderIndicators()\n )}\n </slot>\n </div>\n </igc-carousel-indicator-container>\n `;\n }\n\n private _renderLabel() {\n const parts = {\n label: true,\n indicators: true,\n start: this.indicatorsOrientation === 'start',\n };\n const value = formatString(\n this.slidesLabelFormat,\n this.current + 1,\n this.total\n );\n\n return html`\n <div part=${partMap(parts)}>\n <span>${value}</span>\n </div>\n `;\n }\n\n protected override render() {\n const hasNoIndicators = this.hideIndicators || this._showIndicatorsLabel;\n const hasLabel = !this.hideIndicators && this._showIndicatorsLabel;\n\n return html`\n <section>\n ${hasNoIndicators ? nothing : this._renderIndicatorContainer()}\n ${cache(this.hideNavigation ? nothing : this._renderNavigation())}\n ${hasLabel ? this._renderLabel() : nothing}\n <div\n ${ref(this._carouselSlidesContainerRef)}\n id=${this._carouselId}\n aria-live=${this.interval && this._playing ? 'off' : 'polite'}\n >\n <slot></slot>\n </div>\n </section>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-carousel': IgcCarouselComponent;\n }\n}\n"]}
1
+ {"version":3,"file":"carousel.js","sourceRoot":"","sources":["../../../src/components/carousel/carousel.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CarouselResourceStringsEN,\n type ICarouselResourceStrings,\n} from 'igniteui-i18n-core';\nimport { html, LitElement, nothing, type PropertyValues } from 'lit';\nimport { property, queryAll, state } from 'lit/decorators.js';\nimport { cache } from 'lit/directives/cache.js';\nimport { createRef, ref } from 'lit/directives/ref.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { carouselContext } from '#internals/context.js';\nimport { addContextProvider } from '#internals/controllers/context-provider.js';\nimport {\n addGesturesController,\n type SwipeEvent,\n} from '#internals/controllers/gestures.js';\nimport { addInternalsController } from '#internals/controllers/internals.js';\nimport {\n addKeybindings,\n arrowLeft,\n arrowRight,\n endKey,\n homeKey,\n} from '#internals/controllers/key-bindings.js';\nimport {\n createMutationController,\n type MutationControllerParams,\n} from '#internals/controllers/mutation-observer.js';\nimport {\n addSlotController,\n type InferSlotNames,\n type SlotChangeCallbackParameters,\n setSlots,\n} from '#internals/controllers/slot.js';\nimport { shadowOptions } from '#internals/decorators/shadow-options.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport type { I18nControllerConfig } from '#internals/i18n/i18n-controller.js';\nimport type { Constructor } from '#internals/mixins/constructor.js';\nimport { EventEmitterMixin } from '#internals/mixins/event-emitter.js';\nimport { I18nMixin } from '#internals/mixins/i18n.js';\nimport { partMap } from '#internals/part-map.js';\nimport { renderSlottedIcon } from '#internals/templates/slotted-icon.js';\nimport { firstOf, isEmpty, lastOf } from '#internals/utils/arrays.js';\nimport { isLTR } from '#internals/utils/dom.js';\nimport {\n addSafeEventListener,\n getElementFromPath,\n} from '#internals/utils/events.js';\nimport { asNumber, wrap } from '#internals/utils/math.js';\nimport { createIdGenerator, formatString } from '#internals/utils/strings.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcButtonComponent from '../button/button.js';\nimport IgcIconComponent from '../icon/icon.js';\nimport type {\n CarouselIndicatorsOrientation,\n HorizontalTransitionAnimation,\n} from '../types.js';\nimport IgcCarouselIndicatorContainerComponent from './carousel-indicator-container.js';\nimport IgcCarouselIndicatorComponent from './carousel-indicator.js';\nimport IgcCarouselSlideComponent from './carousel-slide.js';\nimport { styles } from './themes/carousel.base.css.js';\nimport { all } from './themes/container.js';\nimport { styles as shared } from './themes/shared/carousel.common.css.js';\n\nexport interface IgcCarouselComponentEventMap {\n igcSlideChanged: CustomEvent<number>;\n igcPlaying: CustomEvent<void>;\n igcPaused: CustomEvent<void>;\n}\n\nconst nextId = createIdGenerator('igc-carousel');\nconst Slots = setSlots('indicator', 'previous-button', 'next-button');\n\nconst i18n: I18nControllerConfig<ICarouselResourceStrings> = {\n defaultEN: CarouselResourceStringsEN,\n};\n\n/**\n * The carousel presents a set of slides by sequentially displaying a subset of one or more.\n *\n * @element igc-carousel\n *\n * @slot - Default slot for the carousel. Any carousel slides should be projected here.\n * @slot indicator - Renders the custom indicators of the carousel. An indicator element sets this slot itself.\n * @slot previous-button - Renders content inside the previous button.\n * @slot next-button - Renders content inside the next button.\n *\n * @fires igcSlideChanged - Emitted when the current active slide is changed either by user interaction or by the interval callback.\n * @fires igcPlaying - Emitted when the carousel enters playing state by a user interaction.\n * @fires igcPaused - Emitted when the carousel enters paused state by a user interaction.\n *\n * @csspart navigation - The wrapper container of each carousel navigation button.\n * @csspart previous - The wrapper container of the carousel previous navigation button.\n * @csspart next - The wrapper container of the carousel next navigation button.\n * @csspart dot - The carousel dot indicator container.\n * @csspart active - The carousel active dot indicator container.\n * @csspart label - The label container of the carousel indicators.\n * @csspart start - The wrapping container of all carousel indicators when indicators-orientation is set to start.\n */\n@shadowOptions({ delegatesFocus: true })\nexport default class IgcCarouselComponent extends I18nMixin(\n EventEmitterMixin<IgcCarouselComponentEventMap, Constructor<LitElement>>(\n LitElement\n ),\n i18n\n) {\n public static styles = [styles, shared];\n public static readonly tagName = 'igc-carousel';\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(\n IgcCarouselComponent,\n IgcCarouselIndicatorComponent,\n IgcCarouselIndicatorContainerComponent,\n IgcCarouselSlideComponent,\n IgcIconComponent,\n IgcButtonComponent\n );\n }\n\n //#region Internal state\n\n private readonly _carouselId = nextId();\n private _paused = false;\n private _lastInterval: ReturnType<typeof setInterval> | null = null;\n private _hasKeyboardInteractionOnIndicators = false;\n private _hasPointerInteraction = false;\n private _hasInnerFocus = false;\n\n /**\n * Whether an interaction caused the paused state: a pointer over the carousel,\n * or focus in it. A `pause()` call does not set it.\n */\n private _pausedByInteraction = false;\n\n private _slides: IgcCarouselSlideComponent[] = [];\n private _projectedIndicators: IgcCarouselIndicatorComponent[] = [];\n\n @state()\n private _activeSlide?: IgcCarouselSlideComponent;\n\n @state()\n private _playing = false;\n\n private readonly _slots = addSlotController(this, {\n slots: Slots,\n onChange: this._handleSlotChange,\n initial: true,\n });\n\n private readonly _context = addContextProvider(this, {\n context: carouselContext,\n watch: ['animationType', 'slidesLabelFormat', 'indicatorsLabelFormat'],\n value: () => this,\n });\n\n @queryAll(IgcCarouselIndicatorComponent.tagName)\n private readonly _defaultIndicators!: NodeListOf<IgcCarouselIndicatorComponent>;\n\n private readonly _carouselSlidesContainerRef = createRef<HTMLDivElement>();\n private readonly _indicatorsContainerRef = createRef<HTMLDivElement>();\n private readonly _prevButtonRef = createRef<IgcButtonComponent>();\n private readonly _nextButtonRef = createRef<IgcButtonComponent>();\n\n private get _hasProjectedIndicators(): boolean {\n return !isEmpty(this._projectedIndicators);\n }\n\n /** The indicators that the carousel shows. */\n private get _indicators(): IgcCarouselIndicatorComponent[] {\n return this._hasProjectedIndicators\n ? this._projectedIndicators\n : Array.from(this._defaultIndicators);\n }\n\n private get _showIndicatorsLabel(): boolean {\n return this.total > this.maximumIndicatorsCount;\n }\n\n private get _nextIndex(): number {\n return wrap(0, this.total - 1, this.current + 1);\n }\n\n private get _previousIndex(): number {\n return wrap(0, this.total - 1, this.current - 1);\n }\n\n //#endregion\n\n //#region Public attributes and properties\n\n /**\n * Whether the carousel should skip rotating to the first slide after it reaches the last.\n *\n * @attr disable-loop\n * @default false\n */\n @property({ type: Boolean, reflect: true, attribute: 'disable-loop' })\n public disableLoop = false;\n\n /**\n * Whether the carousel should ignore use interactions and not pause on them.\n *\n * @attr disable-pause-on-interaction\n * @default false\n */\n @property({\n type: Boolean,\n reflect: true,\n attribute: 'disable-pause-on-interaction',\n })\n public disablePauseOnInteraction = false;\n\n /**\n * Whether the carousel should skip rendering of the default navigation buttons.\n *\n * @attr hide-navigation\n * @default false\n */\n @property({ type: Boolean, reflect: true, attribute: 'hide-navigation' })\n public hideNavigation = false;\n\n /**\n * Whether the carousel should render the indicator controls (dots).\n *\n * @attr hide-indicators\n * @default false\n */\n @property({ type: Boolean, reflect: true, attribute: 'hide-indicators' })\n public hideIndicators = false;\n\n /**\n * Whether the carousel has vertical alignment.\n *\n * @attr vertical\n * @default false\n */\n @property({ type: Boolean, reflect: true })\n public vertical = false;\n\n /**\n * The orientation of the indicator controls (dots).\n *\n * @attr indicators-orientation\n * @default end\n */\n @property({ attribute: 'indicators-orientation' })\n public indicatorsOrientation: CarouselIndicatorsOrientation = 'end';\n\n /**\n * The format used to set the aria-label on the carousel indicators.\n * Instances of '{0}' will be replaced with the index of the corresponding slide.\n *\n * @attr indicators-label-format\n */\n @property({ attribute: 'indicators-label-format' })\n public set indicatorsLabelFormat(value: string) {\n this._indicatorsLabelFormat = value;\n }\n\n public get indicatorsLabelFormat() {\n return (\n this._indicatorsLabelFormat ??\n `${this.resourceStrings.carousel_slide} {0}`\n );\n }\n private _indicatorsLabelFormat: string | undefined;\n\n /**\n * The format used to set the aria-label on the carousel slides and the text displayed\n * when the number of indicators is greater than tha maximum indicator count.\n * Instances of '{0}' will be replaced with the index of the corresponding slide.\n * Instances of '{1}' will be replaced with the total amount of slides.\n *\n * @attr slides-label-format\n */\n @property({ attribute: 'slides-label-format' })\n public set slidesLabelFormat(value: string) {\n this._slidesLabelFormat = value;\n }\n\n public get slidesLabelFormat() {\n return (\n this._slidesLabelFormat ?? `{0} ${this.resourceStrings.carousel_of} {1}`\n );\n }\n\n private _slidesLabelFormat: string | undefined;\n\n /**\n * The duration in milliseconds between changing the active slide.\n * @attr interval\n */\n @property({ type: Number })\n public interval: number | undefined;\n\n /**\n * The maximum number of indicator controls (dots) that can be shown. Default value is `10`.\n *\n * @attr maximum-indicators-count\n * @default 10\n */\n @property({ type: Number, attribute: 'maximum-indicators-count' })\n public maximumIndicatorsCount = 10;\n\n /**\n * The animation type.\n *\n * @attr animation-type\n * @default 'slide'\n */\n @property({ attribute: 'animation-type' })\n public animationType: HorizontalTransitionAnimation = 'slide';\n\n /* blazorSuppress */\n /** The slides of the carousel. */\n public get slides(): IgcCarouselSlideComponent[] {\n return Array.from(this._slides);\n }\n\n /** Total number of slides. */\n public get total(): number {\n return this._slides.length;\n }\n\n /** The index of the current active slide. */\n public get current(): number {\n return this._activeSlide\n ? Math.max(0, this._slides.indexOf(this._activeSlide))\n : 0;\n }\n\n /** Whether the carousel is in playing state. */\n public get isPlaying(): boolean {\n return this._playing;\n }\n\n /** Whether the carousel is in paused state. */\n public get isPaused(): boolean {\n return this._paused;\n }\n\n //#endregion\n\n //#region Life-cycle hooks and observer callback\n\n constructor() {\n super();\n\n addInternalsController(this, {\n initialARIA: {\n role: 'region',\n ariaRoleDescription: 'carousel',\n },\n });\n\n addThemingController(this, all);\n\n addSafeEventListener(this, 'pointerenter', this._handlePointerInteraction);\n addSafeEventListener(this, 'pointerleave', this._handlePointerInteraction);\n addSafeEventListener(this, 'focusin', this._handleFocusInteraction);\n addSafeEventListener(this, 'focusout', this._handleFocusInteraction);\n\n addGesturesController(this, {\n ref: this._carouselSlidesContainerRef,\n touchOnly: true,\n })\n .set('swipe-left', this._handleHorizontalSwipe)\n .set('swipe-right', this._handleHorizontalSwipe)\n .set('swipe-up', this._handleVerticalSwipe)\n .set('swipe-down', this._handleVerticalSwipe);\n\n addKeybindings(this, {\n ref: this._indicatorsContainerRef,\n })\n .set(arrowLeft, this._handleArrowLeft)\n .set(arrowRight, this._handleArrowRight)\n .set(homeKey, this._handleHomeKey)\n .set(endKey, this._handleEndKey);\n\n addKeybindings(this, {\n ref: this._prevButtonRef,\n }).setActivateHandler(this._handleNavigationInteractionPrevious);\n\n addKeybindings(this, {\n ref: this._nextButtonRef,\n }).setActivateHandler(this._handleNavigationInteractionNext);\n\n createMutationController(this, {\n callback: this._observerCallback,\n filter: [IgcCarouselSlideComponent.tagName],\n config: {\n attributeFilter: ['active'],\n childList: true,\n subtree: true,\n },\n });\n }\n\n protected override willUpdate(changedProperties: PropertyValues<this>): void {\n if (changedProperties.has('interval')) {\n const play = asNumber(this.interval) > 0;\n const interacting =\n play &&\n !this.disablePauseOnInteraction &&\n (this._hasPointerInteraction || this._hasInnerFocus);\n\n this._setRotation(play && !interacting, interacting);\n this._pausedByInteraction = interacting;\n }\n }\n\n /** @internal */\n public override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.hasUpdated) {\n this._restartInterval();\n }\n }\n\n /** @internal */\n public override disconnectedCallback(): void {\n this._resetInterval();\n super.disconnectedCallback();\n }\n\n protected override async firstUpdated(): Promise<void> {\n await this.updateComplete;\n // Republish for consumers created after their own first render (Blazor timing).\n this._context.publish();\n\n this._activateInitialSlide();\n }\n\n protected override updated(): void {\n if (this._hasProjectedIndicators) {\n this._updateProjectedIndicators();\n }\n }\n\n private _observerCallback({\n changes: { added, attributes },\n }: MutationControllerParams<IgcCarouselSlideComponent>) {\n const activeSlides = this._slides.filter((slide) => slide.active);\n\n if (activeSlides.length <= 1) {\n return;\n }\n\n const node = isEmpty(added)\n ? (lastOf(attributes)?.node ?? lastOf(activeSlides))\n : lastOf(added).node;\n\n const idx = this._slides.indexOf(node);\n\n for (const [i, slide] of this._slides.entries()) {\n if (slide.active && i !== idx) {\n slide.active = false;\n }\n }\n\n this._activateSlide(this._slides[idx]);\n }\n\n //#endregion\n\n //#region Event listeners\n\n private _handleSlotChange(\n params: SlotChangeCallbackParameters<InferSlotNames<typeof Slots>>\n ): void {\n if (params.isDefault || params.isInitial) {\n const previousSlide = this._activeSlide;\n const previousIndex = this.current;\n\n this._slides = this._slots.getAssignedElements('[default]', {\n selector: IgcCarouselSlideComponent.tagName,\n });\n\n if (previousSlide && !this._slides.includes(previousSlide)) {\n this._reactivateSlide(previousSlide, previousIndex);\n } else if (this.hasUpdated && !this._activeSlide) {\n // Slides came into an empty carousel after the first render. Without\n // this, no slide is active, and the carousel shows nothing.\n this._activateInitialSlide();\n }\n }\n\n if (params.slot === 'indicator') {\n this._projectedIndicators = this._slots.getAssignedElements('indicator', {\n selector: IgcCarouselIndicatorComponent.tagName,\n });\n }\n }\n\n private _handlePointerInteraction(event: PointerEvent): void {\n this._hasPointerInteraction = event.type === 'pointerenter';\n this._handlePauseOnInteraction();\n }\n\n private _handleFocusInteraction(event: FocusEvent): void {\n // focusin - element that lost focus\n // focusout - element that gained focus\n const node = event.relatedTarget as Node;\n\n if (this.contains(node)) {\n return;\n }\n\n this._hasInnerFocus = event.type === 'focusin';\n this._handlePauseOnInteraction();\n }\n\n private _handleIndicatorClick(event: PointerEvent): void {\n const indicator = getElementFromPath(\n IgcCarouselIndicatorComponent.tagName,\n event\n )!;\n\n const index = this._indicators.indexOf(indicator);\n\n this._handleInteraction(() =>\n this.select(this._slides[index], index > this.current ? 'next' : 'prev')\n );\n }\n\n //#endregion\n\n //#region Keyboard event listeners\n\n private _handleArrowLeft(): void {\n this._hasKeyboardInteractionOnIndicators = true;\n this._handleInteraction(isLTR(this) ? this.prev : this.next);\n }\n\n private _handleArrowRight(): void {\n this._hasKeyboardInteractionOnIndicators = true;\n this._handleInteraction(isLTR(this) ? this.next : this.prev);\n }\n\n private _handleHomeKey(): void {\n this._hasKeyboardInteractionOnIndicators = true;\n this._handleInteraction(() =>\n this.select(isLTR(this) ? firstOf(this._slides) : lastOf(this._slides))\n );\n }\n\n private _handleEndKey(): void {\n this._hasKeyboardInteractionOnIndicators = true;\n this._handleInteraction(() =>\n this.select(isLTR(this) ? lastOf(this._slides) : firstOf(this._slides))\n );\n }\n\n //#endregion\n\n //#region Gestures event listeners\n\n private _handleVerticalSwipe({ data: { direction } }: SwipeEvent): void {\n if (this.vertical) {\n this._handleInteraction(direction === 'up' ? this.next : this.prev);\n }\n }\n\n private _handleHorizontalSwipe({ data: { direction } }: SwipeEvent): void {\n if (!this.vertical) {\n const callback = () => {\n if (isLTR(this)) {\n return direction === 'left' ? this.next : this.prev;\n }\n return direction === 'left' ? this.prev : this.next;\n };\n\n this._handleInteraction(callback());\n }\n }\n\n //#endregion\n\n //#region Internal API\n\n private _handleNavigationInteractionNext(): void {\n this._handleInteraction(this.next);\n }\n\n private _handleNavigationInteractionPrevious(): void {\n this._handleInteraction(this.prev);\n }\n\n private async _handleInteraction(\n callback: () => Promise<boolean>\n ): Promise<void> {\n if (this.interval) {\n this._resetInterval();\n }\n\n if (await callback.call(this)) {\n this.emitEvent('igcSlideChanged', { detail: this.current });\n }\n\n this._hasKeyboardInteractionOnIndicators = false;\n\n if (this.interval) {\n this._restartInterval();\n }\n }\n\n private _handlePauseOnInteraction(): void {\n if (!this.interval || this.disablePauseOnInteraction) return;\n\n const interacting = this._hasPointerInteraction || this._hasInnerFocus;\n\n if (interacting) {\n if (!this.isPlaying) return;\n\n this._pause();\n this._pausedByInteraction = true;\n this.emitEvent('igcPaused');\n return;\n }\n\n if (this._pausedByInteraction) {\n this.play();\n this.emitEvent('igcPlaying');\n }\n }\n\n private _activateSlide(slide: IgcCarouselSlideComponent): void {\n if (this._activeSlide) {\n this._activeSlide.active = false;\n }\n\n this._activeSlide = slide;\n this._activeSlide.active = true;\n\n if (this._hasKeyboardInteractionOnIndicators) {\n this._indicators[this.current]?.focus();\n this._hasKeyboardInteractionOnIndicators = false;\n }\n }\n\n /** Activates the authored active slide, or the first slide. */\n private _activateInitialSlide(): void {\n if (!isEmpty(this._slides)) {\n this._activateSlide(\n this._slides.findLast((slide) => slide.active) ?? firstOf(this._slides)\n );\n }\n }\n\n /**\n * Moves the active state from a slide that left the carousel to the slide\n * that takes its position.\n */\n private _reactivateSlide(\n removed: IgcCarouselSlideComponent,\n index: number\n ): void {\n removed.active = false;\n this._activeSlide = undefined;\n\n if (!isEmpty(this._slides)) {\n this._activateSlide(this._slides[Math.min(index, this.total - 1)]);\n }\n }\n\n private _updateProjectedIndicators(): void {\n const current = this.current;\n\n for (const [idx, indicator] of this._projectedIndicators.entries()) {\n const slide = this._slides.at(idx);\n\n indicator.active = Boolean(slide) && idx === current;\n indicator.index = idx;\n\n if (slide) {\n indicator.setAttribute('aria-controls', slide.id);\n } else {\n indicator.removeAttribute('aria-controls');\n }\n }\n }\n\n /**\n * Sets the rotation state of the carousel, and starts or clears its timer.\n */\n private _setRotation(playing: boolean, paused = false): void {\n this._playing = playing;\n this._paused = paused;\n this._pausedByInteraction = false;\n this._restartInterval();\n }\n\n /** Stops the rotation, and keeps the interaction state as it is. */\n private _pause(): void {\n if (this.isPlaying) {\n this._setRotation(false, true);\n }\n }\n\n private _resetInterval(): void {\n if (this._lastInterval) {\n clearInterval(this._lastInterval);\n this._lastInterval = null;\n }\n }\n\n private _restartInterval(): void {\n this._resetInterval();\n\n // A detached carousel starts no timer. The reconnect starts it again.\n if (!this.isConnected || !this.isPlaying || asNumber(this.interval) <= 0) {\n return;\n }\n\n this._lastInterval = setInterval(() => {\n if (\n this.isPlaying &&\n this.total &&\n !(this.disableLoop && this._nextIndex === 0)\n ) {\n this.select(this._slides[this._nextIndex], 'next');\n this.emitEvent('igcSlideChanged', { detail: this.current });\n } else {\n this._pause();\n }\n }, this.interval);\n }\n\n private async _animateSlides(\n nextSlide: IgcCarouselSlideComponent,\n currentSlide: IgcCarouselSlideComponent,\n dir: 'next' | 'prev'\n ): Promise<void> {\n if (dir === 'next') {\n // Animate slides in next direction\n currentSlide.previous = true;\n currentSlide.toggleAnimation('out');\n this._activateSlide(nextSlide);\n await nextSlide.toggleAnimation('in');\n currentSlide.previous = false;\n } else {\n // Animate slides in previous direction\n currentSlide.previous = true;\n currentSlide.toggleAnimation('in', 'reverse');\n this._activateSlide(nextSlide);\n await nextSlide.toggleAnimation('out', 'reverse');\n currentSlide.previous = false;\n }\n }\n\n //#endregion\n\n //#region Public API\n\n /**\n * Resumes playing of the carousel slides.\n */\n public play(): void {\n if (!this.isPlaying) {\n this._setRotation(true);\n }\n }\n\n /**\n * Pauses the rotation of the carousel slides.\n */\n public pause(): void {\n this._pause();\n this._pausedByInteraction = false;\n }\n\n /**\n * Switches to the next slide, runs any animations, and returns if the operation was successful.\n */\n public async next(): Promise<boolean> {\n if (this.disableLoop && this._nextIndex === 0) {\n this._pause();\n return false;\n }\n\n return await this.select(this._slides[this._nextIndex], 'next');\n }\n\n /**\n * Switches to the previous slide, runs any animations, and returns if the operation was successful.\n */\n public async prev(): Promise<boolean> {\n if (this.disableLoop && this._previousIndex === this.total - 1) {\n this._pause();\n return false;\n }\n\n return await this.select(this._slides[this._previousIndex], 'prev');\n }\n\n /* blazorSuppress */\n /**\n * Switches to the passed-in slide, runs any animations, and returns if the operation was successful.\n */\n public async select(\n slide: IgcCarouselSlideComponent,\n animationDirection?: 'next' | 'prev'\n ): Promise<boolean>;\n /**\n * Switches to slide by index, runs any animations, and returns if the operation was successful.\n */\n public async select(\n index: number,\n animationDirection?: 'next' | 'prev'\n ): Promise<boolean>;\n public async select(\n slideOrIndex: IgcCarouselSlideComponent | number,\n animationDirection?: 'next' | 'prev'\n ): Promise<boolean> {\n let index: number;\n let slide: IgcCarouselSlideComponent | undefined;\n\n if (typeof slideOrIndex === 'number') {\n index = slideOrIndex;\n slide = this._slides.at(index);\n } else {\n slide = slideOrIndex;\n index = this._slides.indexOf(slide);\n }\n\n if (index === this.current || index === -1 || !slide) {\n return false;\n }\n\n const dir = animationDirection ?? (index > this.current ? 'next' : 'prev');\n\n if (!this._activeSlide) {\n this._activateSlide(slide);\n return true;\n }\n\n await this._animateSlides(slide, this._activeSlide, dir);\n return true;\n }\n\n //#endregion\n\n //#region Template renderers\n\n private _renderNavigation() {\n return html`\n <igc-button\n ${ref(this._prevButtonRef)}\n type=\"button\"\n part=\"navigation previous\"\n aria-label=${this.resourceStrings.carousel_previous_slide}\n aria-controls=${this._carouselId}\n ?disabled=${this.disableLoop && this.current === 0}\n @click=${this._handleNavigationInteractionPrevious}\n >\n ${renderSlottedIcon({ slot: 'previous-button', icon: 'carousel_prev' })}\n </igc-button>\n\n <igc-button\n ${ref(this._nextButtonRef)}\n type=\"button\"\n part=\"navigation next\"\n aria-label=${this.resourceStrings.carousel_next_slide}\n aria-controls=${this._carouselId}\n ?disabled=${this.disableLoop && this.current === this.total - 1}\n @click=${this._handleNavigationInteractionNext}\n >\n ${renderSlottedIcon({ slot: 'next-button', icon: 'carousel_next' })}\n </igc-button>\n `;\n }\n\n private _renderIndicators() {\n return this._slides.map((slide, i) => {\n const forward = slide.active ? 'visible' : 'hidden';\n const backward = slide.active ? 'hidden' : 'visible';\n\n return html`\n <igc-carousel-indicator\n exportparts=\"indicator, active, inactive\"\n .active=${slide.active}\n .index=${i}\n >\n <div part=\"dot\" style=${styleMap({ visibility: backward })}></div>\n <div\n part=\"dot active\"\n slot=\"active\"\n style=${styleMap({ visibility: forward })}\n ></div>\n </igc-carousel-indicator>\n `;\n });\n }\n\n private _renderIndicatorContainer() {\n const parts = {\n indicators: true,\n start: this.indicatorsOrientation === 'start',\n };\n\n return html`\n <igc-carousel-indicator-container>\n <div\n ${ref(this._indicatorsContainerRef)}\n role=\"tablist\"\n part=${partMap(parts)}\n >\n <slot name=\"indicator\" @click=${this._handleIndicatorClick}>\n ${cache(\n this._hasProjectedIndicators ? nothing : this._renderIndicators()\n )}\n </slot>\n </div>\n </igc-carousel-indicator-container>\n `;\n }\n\n private _renderLabel() {\n const parts = {\n label: true,\n indicators: true,\n start: this.indicatorsOrientation === 'start',\n };\n const value = formatString(\n this.slidesLabelFormat,\n this.current + 1,\n this.total\n );\n\n return html`\n <div part=${partMap(parts)}>\n <span>${value}</span>\n </div>\n `;\n }\n\n protected override render() {\n const hasNoIndicators = this.hideIndicators || this._showIndicatorsLabel;\n const hasLabel = !this.hideIndicators && this._showIndicatorsLabel;\n\n return html`\n <section>\n ${hasNoIndicators ? nothing : this._renderIndicatorContainer()}\n ${cache(this.hideNavigation ? nothing : this._renderNavigation())}\n ${hasLabel ? this._renderLabel() : nothing}\n <div\n ${ref(this._carouselSlidesContainerRef)}\n id=${this._carouselId}\n aria-live=${this.interval && this._playing ? 'off' : 'polite'}\n >\n <slot></slot>\n </div>\n </section>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-carousel': IgcCarouselComponent;\n }\n}\n"]}
@@ -11,13 +11,12 @@ import { LitElement, type PropertyValues } from 'lit';
11
11
  *
12
12
  * @element igc-chat-input
13
13
  *
14
- * @slot - Default unnamed slot for rendering inside the component
15
14
  * @fires igcTypingChange - Fired when the user starts/stops typing
16
15
  * @fires igcInputFocus - Fired when the input area receives focus
17
16
  * @fires igcInputBlur - Fired when the input area loses focus
18
17
  * @fires igcAttachmentDrag - Fired when dragging a file over the input
19
18
  * @fires igcAttachmentDrop - Fired when a file is dropped into the input
20
- * @fires igcChange - Fired when the file input changes (delegated from the underlying file input).
19
+ * @fires igcInputChange - Fired when the value of the text input changes
21
20
  *
22
21
  * @csspart input-container - Container for the input section
23
22
  * @csspart input-wrapper - Wrapper around the text input
@@ -12,7 +12,7 @@ import { ifDefined } from 'lit/directives/if-defined.js';
12
12
  import { until } from 'lit/directives/until.js';
13
13
  import { chatContext, chatUserInputContext } from '#internals/context.js';
14
14
  import { addAdoptedStylesController } from '#internals/controllers/adopt-styles.js';
15
- import { enterKey, isKey, tabKey, } from '#internals/controllers/key-bindings.js';
15
+ import { enterKey, isKey, tabKey } from '#internals/controllers/keys.js';
16
16
  import { registerComponent } from '#internals/definitions/register.js';
17
17
  import { partMap } from '#internals/part-map.js';
18
18
  import { createTimer } from '#internals/timing.js';
@@ -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 { ContextConsumer, consume } from '@lit/context';\nimport { html, LitElement, nothing, type PropertyValues } 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 { chatContext, chatUserInputContext } from '#internals/context.js';\nimport { addAdoptedStylesController } from '#internals/controllers/adopt-styles.js';\nimport {\n enterKey,\n isKey,\n tabKey,\n} from '#internals/controllers/key-bindings.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport { partMap } from '#internals/part-map.js';\nimport { createTimer } from '#internals/timing.js';\nimport { isEmpty } from '#internals/utils/arrays.js';\nimport { hasFiles, isPointInsideElement } from '#internals/utils/dom.js';\nimport { bindIf, trimmedHtml } from '#internals/utils/lit.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcIconButtonComponent from '../button/icon-button.js';\nimport IgcChipComponent from '../chip/chip.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 ChatInputRenderContext,\n ChatRenderContext,\n ChatTemplateRenderer,\n IgcChatMessageAttachment,\n} from './types.js';\nimport {\n type ChatAcceptedFileTypes,\n getChatAcceptedFiles,\n getIconName,\n} from './utils.js';\n\ntype DefaultInputRenderers = {\n input: ChatTemplateRenderer<ChatInputRenderContext>;\n inputActions: ChatTemplateRenderer<ChatRenderContext>;\n inputActionsEnd: ChatTemplateRenderer<ChatRenderContext>;\n inputActionsStart: ChatTemplateRenderer<ChatRenderContext>;\n inputAttachments: ChatTemplateRenderer<ChatInputRenderContext>;\n fileUploadButton: ChatTemplateRenderer<ChatRenderContext>;\n sendButton: ChatTemplateRenderer<ChatRenderContext>;\n};\n\n/* blazorSuppress */\n/**\n * A web component that provides the input area for the 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 the file input changes (delegated from the underlying 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 underlying textarea component.\n * @csspart actions-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 inputActionsEnd: () => nothing,\n inputActionsStart: () => nothing,\n inputAttachments: (ctx) => this._renderAttachmentsArea(ctx.attachments),\n sendButton: () => this._renderSendButton(),\n });\n\n private _userIsTyping = false;\n private _userLastTypeTime = Date.now();\n\n private readonly _typingTimer = createTimer(() => {\n if (!this._userIsTyping) {\n return;\n }\n\n // The live delay may have grown since the timer was armed - defer the stop\n // instead of dropping it.\n const remaining =\n this._userLastTypeTime + this._state.stopTypingDelay - Date.now();\n\n if (remaining > 0) {\n this._typingTimer.start(remaining);\n } else {\n this._setTypingStateAndEmit(false);\n }\n });\n\n private readonly _adoptedStyles = addAdoptedStylesController(this);\n\n private readonly _stateChanged = () => {\n this._shouldAdoptRootStyles = Boolean(this._state.options?.adoptRootStyles);\n };\n\n private readonly _stateConsumer = new ContextConsumer(this, {\n context: chatContext,\n callback: this._stateChanged,\n subscribe: true,\n });\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 @state()\n private _shouldAdoptRootStyles = false;\n\n private get _state(): ChatState {\n return this._stateConsumer.value!;\n }\n\n private get _acceptedTypes(): ChatAcceptedFileTypes | null {\n return this._state.acceptedFileTypes;\n }\n\n constructor() {\n super();\n addThemingController(this, all, { themeChange: this._adoptPageStyles });\n }\n\n protected override update(props: PropertyValues): void {\n if (props.has('_shouldAdoptRootStyles')) {\n this._adoptedStyles.shouldAdoptStyles(this._shouldAdoptRootStyles);\n }\n super.update(props);\n }\n\n /** @internal */\n public focusInput(): void {\n this._textInputElement?.focus();\n }\n\n private _adoptPageStyles(): void {\n this._adoptedStyles.invalidateCache(this.ownerDocument);\n this._adoptedStyles.shouldAdoptStyles(this._shouldAdoptRootStyles);\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 async _sendMessage(): Promise<void> {\n if (\n !this._userInputState.hasInputValue &&\n !this._userInputState.hasInputAttachments\n ) {\n return;\n }\n\n this._userInputState.addMessageWithEvent({\n text: this._userInputState.inputValue,\n attachments: this._userInputState.inputAttachments,\n });\n\n this.style.height = 'auto';\n\n await this._userInputState.host.updateComplete;\n this.focusInput();\n }\n\n private _setTypingStateAndEmit(state: boolean): void {\n this._userIsTyping = state;\n this._userInputState.emitUserTypingState(state);\n }\n\n private _handleAttachmentRemoved(attachment: IgcChatMessageAttachment): void {\n const current = this._userInputState.inputAttachments;\n\n if (this._state.emitAttachmentRemoved(attachment)) {\n this._state.inputAttachments = current.toSpliced(\n current.indexOf(attachment),\n 1\n );\n }\n }\n\n private _handleKeydown(event: KeyboardEvent): void {\n this._userLastTypeTime = Date.now();\n\n if (isKey(event, tabKey) && !this._userIsTyping) {\n return;\n }\n\n if (isKey(event, enterKey) && !event.shiftKey) {\n event.preventDefault();\n this._sendMessage();\n\n if (this._userIsTyping) {\n this._typingTimer.stop();\n this._setTypingStateAndEmit(false);\n }\n\n return;\n }\n\n if (!this._userIsTyping) {\n this._setTypingStateAndEmit(true);\n }\n\n this._typingTimer.start(this._state.stopTypingDelay);\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 container = event.currentTarget as HTMLElement;\n\n if (!isPointInsideElement(container, event.clientX, event.clientY)) {\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.attachFilesWithEvent(validFiles);\n this.requestUpdate();\n }\n\n private _handleInput({ detail }: CustomEvent<string>): void {\n this._state.inputValue = detail;\n this._state.emitEvent('igcInputChange', { detail });\n }\n\n private _handleFileUpload(event: Event): void {\n const input = event.target as HTMLInputElement;\n\n if (hasFiles(input)) {\n this._state.attachFilesWithEvent(Array.from(input.files!));\n }\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: IgcChatMessageAttachment[]) {\n return html`${attachments?.map(\n (attachment) => html`\n <div part=\"attachment-wrapper\" role=\"listitem\">\n <igc-chip\n removable\n @igcRemove=${() => this._handleAttachmentRemoved(attachment)}\n >\n <igc-icon\n part=\"attachment-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 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=\"file-upload\">\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 tabindex=\"-1\"\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 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._sendMessage}\n ></igc-icon-button>\n `;\n }\n\n private _renderActionsArea() {\n const ctx: ChatRenderContext = { instance: this._state.host };\n\n return trimmedHtml`\n <div part=\"file-upload-container\">\n ${this._getRenderer('fileUploadButton')(ctx)}\n </div>\n <div part=\"input-actions-start\">\n ${this._getRenderer('inputActionsStart')(ctx)}\n </div>\n <div part=\"send-button-container\">${this._getRenderer('sendButton')(ctx)}</div>\n <div part=\"input-actions-end\">\n ${this._getRenderer('inputActionsEnd')(ctx)}\n </div>\n `;\n }\n\n protected override render() {\n const ctx: ChatRenderContext = { instance: this._state.host };\n\n const inputCtx: ChatInputRenderContext = {\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 ${\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\n <div part=\"input-wrapper\">\n ${until(this._getRenderer('input')(inputCtx))}\n </div>\n\n <div part=\"actions-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
+ {"version":3,"file":"chat-input.js","sourceRoot":"","sources":["../../../src/components/chat/chat-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { ContextConsumer, consume } from '@lit/context';\nimport { html, LitElement, nothing, type PropertyValues } 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 { chatContext, chatUserInputContext } from '#internals/context.js';\nimport { addAdoptedStylesController } from '#internals/controllers/adopt-styles.js';\nimport { enterKey, isKey, tabKey } from '#internals/controllers/keys.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport { partMap } from '#internals/part-map.js';\nimport { createTimer } from '#internals/timing.js';\nimport { isEmpty } from '#internals/utils/arrays.js';\nimport { hasFiles, isPointInsideElement } from '#internals/utils/dom.js';\nimport { bindIf, trimmedHtml } from '#internals/utils/lit.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcIconButtonComponent from '../button/icon-button.js';\nimport IgcChipComponent from '../chip/chip.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 ChatInputRenderContext,\n ChatRenderContext,\n ChatTemplateRenderer,\n IgcChatMessageAttachment,\n} from './types.js';\nimport {\n type ChatAcceptedFileTypes,\n getChatAcceptedFiles,\n getIconName,\n} from './utils.js';\n\ntype DefaultInputRenderers = {\n input: ChatTemplateRenderer<ChatInputRenderContext>;\n inputActions: ChatTemplateRenderer<ChatRenderContext>;\n inputActionsEnd: ChatTemplateRenderer<ChatRenderContext>;\n inputActionsStart: ChatTemplateRenderer<ChatRenderContext>;\n inputAttachments: ChatTemplateRenderer<ChatInputRenderContext>;\n fileUploadButton: ChatTemplateRenderer<ChatRenderContext>;\n sendButton: ChatTemplateRenderer<ChatRenderContext>;\n};\n\n/* blazorSuppress */\n/**\n * A web component that provides the input area for the 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 * @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 igcInputChange - Fired when the value of the text input changes\n *\n * @csspart input-container - Container for the input section\n * @csspart input-wrapper - Wrapper around the text input\n * @csspart text-input - The underlying textarea component.\n * @csspart actions-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 inputActionsEnd: () => nothing,\n inputActionsStart: () => nothing,\n inputAttachments: (ctx) => this._renderAttachmentsArea(ctx.attachments),\n sendButton: () => this._renderSendButton(),\n });\n\n private _userIsTyping = false;\n private _userLastTypeTime = Date.now();\n\n private readonly _typingTimer = createTimer(() => {\n if (!this._userIsTyping) {\n return;\n }\n\n // The live delay may have grown since the timer was armed - defer the stop\n // instead of dropping it.\n const remaining =\n this._userLastTypeTime + this._state.stopTypingDelay - Date.now();\n\n if (remaining > 0) {\n this._typingTimer.start(remaining);\n } else {\n this._setTypingStateAndEmit(false);\n }\n });\n\n private readonly _adoptedStyles = addAdoptedStylesController(this);\n\n private readonly _stateChanged = () => {\n this._shouldAdoptRootStyles = Boolean(this._state.options?.adoptRootStyles);\n };\n\n private readonly _stateConsumer = new ContextConsumer(this, {\n context: chatContext,\n callback: this._stateChanged,\n subscribe: true,\n });\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 @state()\n private _shouldAdoptRootStyles = false;\n\n private get _state(): ChatState {\n return this._stateConsumer.value!;\n }\n\n private get _acceptedTypes(): ChatAcceptedFileTypes | null {\n return this._state.acceptedFileTypes;\n }\n\n constructor() {\n super();\n addThemingController(this, all, { themeChange: this._adoptPageStyles });\n }\n\n protected override update(props: PropertyValues): void {\n if (props.has('_shouldAdoptRootStyles')) {\n this._adoptedStyles.shouldAdoptStyles(this._shouldAdoptRootStyles);\n }\n super.update(props);\n }\n\n /** @internal */\n public focusInput(): void {\n this._textInputElement?.focus();\n }\n\n private _adoptPageStyles(): void {\n this._adoptedStyles.invalidateCache(this.ownerDocument);\n this._adoptedStyles.shouldAdoptStyles(this._shouldAdoptRootStyles);\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 async _sendMessage(): Promise<void> {\n if (\n !this._userInputState.hasInputValue &&\n !this._userInputState.hasInputAttachments\n ) {\n return;\n }\n\n this._userInputState.addMessageWithEvent({\n text: this._userInputState.inputValue,\n attachments: this._userInputState.inputAttachments,\n });\n\n this.style.height = 'auto';\n\n await this._userInputState.host.updateComplete;\n this.focusInput();\n }\n\n private _setTypingStateAndEmit(state: boolean): void {\n this._userIsTyping = state;\n this._userInputState.emitUserTypingState(state);\n }\n\n private _handleAttachmentRemoved(attachment: IgcChatMessageAttachment): void {\n const current = this._userInputState.inputAttachments;\n\n if (this._state.emitAttachmentRemoved(attachment)) {\n this._state.inputAttachments = current.toSpliced(\n current.indexOf(attachment),\n 1\n );\n }\n }\n\n private _handleKeydown(event: KeyboardEvent): void {\n this._userLastTypeTime = Date.now();\n\n if (isKey(event, tabKey) && !this._userIsTyping) {\n return;\n }\n\n if (isKey(event, enterKey) && !event.shiftKey) {\n event.preventDefault();\n this._sendMessage();\n\n if (this._userIsTyping) {\n this._typingTimer.stop();\n this._setTypingStateAndEmit(false);\n }\n\n return;\n }\n\n if (!this._userIsTyping) {\n this._setTypingStateAndEmit(true);\n }\n\n this._typingTimer.start(this._state.stopTypingDelay);\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 container = event.currentTarget as HTMLElement;\n\n if (!isPointInsideElement(container, event.clientX, event.clientY)) {\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.attachFilesWithEvent(validFiles);\n this.requestUpdate();\n }\n\n private _handleInput({ detail }: CustomEvent<string>): void {\n this._state.inputValue = detail;\n this._state.emitEvent('igcInputChange', { detail });\n }\n\n private _handleFileUpload(event: Event): void {\n const input = event.target as HTMLInputElement;\n\n if (hasFiles(input)) {\n this._state.attachFilesWithEvent(Array.from(input.files!));\n }\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: IgcChatMessageAttachment[]) {\n return html`${attachments?.map(\n (attachment) => html`\n <div part=\"attachment-wrapper\" role=\"listitem\">\n <igc-chip\n removable\n @igcRemove=${() => this._handleAttachmentRemoved(attachment)}\n >\n <igc-icon\n part=\"attachment-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 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=\"file-upload\">\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 tabindex=\"-1\"\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 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._sendMessage}\n ></igc-icon-button>\n `;\n }\n\n private _renderActionsArea() {\n const ctx: ChatRenderContext = { instance: this._state.host };\n\n return trimmedHtml`\n <div part=\"file-upload-container\">\n ${this._getRenderer('fileUploadButton')(ctx)}\n </div>\n <div part=\"input-actions-start\">\n ${this._getRenderer('inputActionsStart')(ctx)}\n </div>\n <div part=\"send-button-container\">${this._getRenderer('sendButton')(ctx)}</div>\n <div part=\"input-actions-end\">\n ${this._getRenderer('inputActionsEnd')(ctx)}\n </div>\n `;\n }\n\n protected override render() {\n const ctx: ChatRenderContext = { instance: this._state.host };\n\n const inputCtx: ChatInputRenderContext = {\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 ${\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\n <div part=\"input-wrapper\">\n ${until(this._getRenderer('input')(inputCtx))}\n </div>\n\n <div part=\"actions-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"]}
@@ -76,12 +76,12 @@ export declare class ChatState {
76
76
  */
77
77
  set inputValue(value: string);
78
78
  /**
79
- * Returns whether the default chat input textarea has a trimmed value payload.
79
+ * Whether the default chat textarea holds a value that is not only spaces.
80
80
  * @internal
81
81
  */
82
82
  get hasInputValue(): boolean;
83
83
  /**
84
- * Returns whether the default file input of the chat has any attached files.
84
+ * Whether the default file input of the chat holds files.
85
85
  * @internal
86
86
  */
87
87
  get hasInputAttachments(): boolean;
@@ -108,22 +108,21 @@ export declare class ChatState {
108
108
  */
109
109
  showActionToast(content: string): void;
110
110
  /**
111
- * Updates the internal cache for accepted file types.
112
- * Parses the acceptedFiles string option into extensions, mimeTypes, and wildcard types.
111
+ * Parses the `acceptedFiles` option into extensions, MIME types and wildcard
112
+ * types, and caches the result.
113
113
  */
114
114
  private _setAcceptedTypesCache;
115
115
  protected _createMessage(message: Partial<IgcChatMessage>): IgcChatMessage;
116
116
  addMessage(message: Partial<IgcChatMessage>): void;
117
117
  /**
118
- * Adds a new chat message.
119
- * Emits 'igcMessageCreated' event which can be canceled to prevent adding.
120
- * Clears input value and attachments on success.
118
+ * Adds a chat message. Emits the cancellable `igcMessageCreated` event. On
119
+ * success, clears the input value and the attachments.
121
120
  * @internal
122
121
  */
123
122
  addMessageWithEvent(message: Partial<IgcChatMessage>): void;
124
123
  /**
125
- * Adds files as attachments to the input.
126
- * Emits 'igcAttachmentChange' event which can be canceled to prevent adding.
124
+ * Adds `files` to the input as attachments. Emits the cancellable
125
+ * `igcAttachmentChange` event.
127
126
  * @internal
128
127
  */
129
128
  attachFilesWithEvent(files: File[]): void;
@@ -1 +1 @@
1
- {"version":3,"file":"chat-state.js","sourceRoot":"","sources":["../../../src/components/chat/chat-state.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IChatResourceStrings } from 'igniteui-i18n-core';\nimport type { IgcChatResourceStrings } from '#internals/i18n/EN/chat.resources.js';\nimport type { UnpackCustomEvent } from '#internals/mixins/event-emitter.js';\nimport { isEmpty } from '#internals/utils/arrays.js';\nimport { nanoid } from '#internals/utils/strings.js';\nimport IgcToastComponent from '../toast/toast.js';\nimport IgcTooltipComponent from '../tooltip/tooltip.js';\nimport type IgcChatComponent from './chat.js';\nimport type { IgcChatComponentEventMap } from './chat.js';\nimport type {\n ChatSuggestionsPosition,\n IgcChatMessage,\n IgcChatMessageAttachment,\n IgcChatMessageReaction,\n IgcChatOptions,\n} from './types.js';\nimport {\n type ChatAcceptedFileTypes,\n isImageAttachment,\n parseAcceptedFileTypes,\n} from './utils.js';\n\n/**\n * Internal state manager for the `<igc-chat>` component.\n *\n * Manages messages, input value, attachments, options, and event emissions.\n */\nexport class ChatState {\n //#region Internal properties and state /** The host `<igc-chat>` component instance */\n private readonly _host: IgcChatComponent;\n\n private readonly _contextUpdateFn: () => unknown;\n private readonly _userInputContextUpdateFn: () => unknown;\n\n private _actionsTooltip?: IgcTooltipComponent;\n private _actionToast?: IgcToastComponent;\n\n /** The current list of messages */\n private _messages: IgcChatMessage[] = [];\n /** Chat options/configuration */\n private _options?: IgcChatOptions;\n\n /** List of current input attachments */\n private _inputAttachments: IgcChatMessageAttachment[] = [];\n /** Current input text */\n private _inputValue = '';\n /**\n * Cache of accepted file types, organized into extensions, mimeTypes, and wildcardTypes\n */\n private _acceptedTypesCache: ChatAcceptedFileTypes | null = null;\n\n //#endregion\n\n //#region Public properties\n\n public get host(): IgcChatComponent {\n return this._host;\n }\n\n public get acceptedFileTypes(): ChatAcceptedFileTypes | null {\n return this._acceptedTypesCache;\n }\n\n public get disableAutoScroll(): boolean {\n return this._options?.disableAutoScroll ?? false;\n }\n\n /**\n * Gets the list of chat messages.\n */\n public get messages(): IgcChatMessage[] {\n return this._messages;\n }\n\n /**\n * Sets the list of chat messages.\n */\n public set messages(value: IgcChatMessage[]) {\n this._messages = value;\n }\n\n /**\n * Gets current chat options.\n */\n public get options(): IgcChatOptions | undefined {\n return this._options;\n }\n\n /**\n * Sets chat options and requests host update.\n */\n public set options(value: IgcChatOptions) {\n this._options = value;\n this._setAcceptedTypesCache();\n this._contextUpdateFn.call(this._host);\n }\n\n /**\n * Gets the current user ID from options or returns 'user' as fallback.\n */\n public get currentUserId(): string {\n return this._options?.currentUserId ?? 'user';\n }\n\n /**\n * Gets the current suggestionsPosition from options or returns the default value 'below-messages'.\n */\n public get suggestionsPosition(): ChatSuggestionsPosition {\n return this._options?.suggestionsPosition ?? 'below-messages';\n }\n\n /**\n * Gets the current stopTypingDelay from options or returns the default value `3000`.\n */\n public get stopTypingDelay(): number {\n return this._options?.stopTypingDelay ?? 3000;\n }\n\n /**\n * Gets the list of attachments currently attached to input.\n */\n public get inputAttachments(): IgcChatMessageAttachment[] {\n return this._inputAttachments;\n }\n\n /**\n * Sets the input attachments and requests host update.\n */\n public set inputAttachments(value: IgcChatMessageAttachment[]) {\n this._inputAttachments = value;\n this._userInputContextUpdateFn.call(this._host);\n }\n\n /**\n * Gets the current input value.\n */\n public get inputValue(): string {\n return this._inputValue;\n }\n\n /**\n * Sets the current input value and requests host update.\n */\n public set inputValue(value: string) {\n this._inputValue = value;\n this._userInputContextUpdateFn.call(this._host);\n }\n\n /**\n * Returns whether the default chat input textarea has a trimmed value payload.\n * @internal\n */\n public get hasInputValue(): boolean {\n return !!this._inputValue.trim();\n }\n\n /**\n * Returns whether the default file input of the chat has any attached files.\n * @internal\n */\n public get hasInputAttachments(): boolean {\n return !isEmpty(this._inputAttachments);\n }\n\n public get resourceStrings(): IgcChatResourceStrings & IChatResourceStrings {\n return this._host.resourceStrings;\n }\n\n //#endregion\n\n constructor(\n chat: IgcChatComponent,\n contextUpdateFn: () => unknown,\n userInputContextUpdateFn: () => unknown\n ) {\n this._host = chat;\n this._contextUpdateFn = contextUpdateFn;\n this._userInputContextUpdateFn = userInputContextUpdateFn;\n }\n\n public isCurrentUserMessage(message?: IgcChatMessage): boolean {\n return this.currentUserId === message?.sender;\n }\n\n //#region Event handlers\n\n public emitEvent<\n K extends keyof IgcChatComponentEventMap,\n D extends UnpackCustomEvent<IgcChatComponentEventMap[K]>,\n >(event: K, eventInitDict?: CustomEventInit<D>): boolean {\n return this._host.emitEvent(event, eventInitDict);\n }\n\n /** @internal */\n public emitMessageCreated(message: IgcChatMessage): boolean {\n return this._host.emitEvent('igcMessageCreated', {\n detail: message,\n cancelable: true,\n });\n }\n\n /** @internal */\n public emitAttachmentsAdded(\n attachments: IgcChatMessageAttachment[]\n ): boolean {\n return this._host.emitEvent('igcAttachmentAdded', {\n detail: attachments,\n cancelable: true,\n });\n }\n\n /** @internal */\n public emitAttachmentRemoved(attachment: IgcChatMessageAttachment): boolean {\n return this._host.emitEvent('igcAttachmentRemoved', {\n detail: attachment,\n cancelable: true,\n });\n }\n\n /** @internal */\n public emitMessageReaction(reaction: IgcChatMessageReaction): boolean {\n return this._host.emitEvent('igcMessageReact', { detail: reaction });\n }\n\n /** @internal */\n public emitUserTypingState(state: boolean): boolean {\n return this._host.emitEvent('igcTypingChange', { detail: state });\n }\n\n /**\n * @internal\n */\n public showActionsTooltip(target: Element, message: string): void {\n if (!this._actionsTooltip) {\n this._actionsTooltip = document.createElement(\n IgcTooltipComponent.tagName\n );\n this._actionsTooltip.hideTriggers = 'pointerleave,click,blur';\n this._actionsTooltip.hideDelay = 100;\n this._host.renderRoot.appendChild(this._actionsTooltip);\n }\n this._actionsTooltip.message = message;\n this._actionsTooltip.show(target);\n }\n\n /**\n * @internal\n */\n public showActionToast(content: string): void {\n if (!this._actionToast) {\n this._actionToast = document.createElement(IgcToastComponent.tagName);\n this._actionToast.displayTime = 3000;\n this._host.renderRoot.appendChild(this._actionToast);\n }\n this._actionToast.textContent = content;\n this._actionToast.show();\n }\n\n //#endregion\n\n /**\n * Updates the internal cache for accepted file types.\n * Parses the acceptedFiles string option into extensions, mimeTypes, and wildcard types.\n */\n private _setAcceptedTypesCache(): void {\n this._acceptedTypesCache = this.options?.acceptedFiles\n ? parseAcceptedFileTypes(this.options.acceptedFiles)\n : null;\n }\n\n protected _createMessage(message: Partial<IgcChatMessage>): IgcChatMessage {\n return {\n id: message.id ?? nanoid(),\n text: message.text ?? '',\n sender: message.sender ?? this.currentUserId,\n timestamp: message.timestamp ?? Date.now().toString(),\n attachments: message.attachments || [],\n };\n }\n\n public addMessage(message: Partial<IgcChatMessage>) {\n this.messages.push(this._createMessage(message));\n this._host.requestUpdate('messages');\n }\n\n //#region Public API\n\n /**\n * Adds a new chat message.\n * Emits 'igcMessageCreated' event which can be canceled to prevent adding.\n * Clears input value and attachments on success.\n * @internal\n */\n public addMessageWithEvent(message: Partial<IgcChatMessage>): void {\n const newMessage = this._createMessage(message);\n\n if (this.emitMessageCreated(newMessage)) {\n this.addMessage(newMessage);\n this.inputValue = '';\n this.inputAttachments = [];\n }\n }\n\n /**\n * Adds files as attachments to the input.\n * Emits 'igcAttachmentChange' event which can be canceled to prevent adding.\n * @internal\n */\n public attachFilesWithEvent(files: File[]): void {\n const newAttachments: IgcChatMessageAttachment[] = [];\n const fileNames = new Set(\n this.inputAttachments.map((attachment) => attachment.file?.name ?? '')\n );\n\n for (const file of files) {\n if (fileNames.has(file.name)) {\n continue;\n }\n\n const url = URL.createObjectURL(file);\n const attachment: IgcChatMessageAttachment = {\n id: nanoid(),\n url,\n name: file.name,\n file,\n };\n\n if (isImageAttachment(file)) {\n attachment.thumbnail = url;\n }\n newAttachments.push(attachment);\n }\n\n if (this.emitAttachmentsAdded(newAttachments)) {\n this.inputAttachments = [...this.inputAttachments, ...newAttachments];\n }\n }\n\n //#endregion\n}\n"]}
1
+ {"version":3,"file":"chat-state.js","sourceRoot":"","sources":["../../../src/components/chat/chat-state.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IChatResourceStrings } from 'igniteui-i18n-core';\nimport type { IgcChatResourceStrings } from '#internals/i18n/EN/chat.resources.js';\nimport type { UnpackCustomEvent } from '#internals/mixins/event-emitter.js';\nimport { isEmpty } from '#internals/utils/arrays.js';\nimport { nanoid } from '#internals/utils/strings.js';\nimport IgcToastComponent from '../toast/toast.js';\nimport IgcTooltipComponent from '../tooltip/tooltip.js';\nimport type IgcChatComponent from './chat.js';\nimport type { IgcChatComponentEventMap } from './chat.js';\nimport type {\n ChatSuggestionsPosition,\n IgcChatMessage,\n IgcChatMessageAttachment,\n IgcChatMessageReaction,\n IgcChatOptions,\n} from './types.js';\nimport {\n type ChatAcceptedFileTypes,\n isImageAttachment,\n parseAcceptedFileTypes,\n} from './utils.js';\n\n/**\n * Internal state manager for the `<igc-chat>` component.\n *\n * Manages messages, input value, attachments, options, and event emissions.\n */\nexport class ChatState {\n //#region Internal properties and state /** The host `<igc-chat>` component instance */\n private readonly _host: IgcChatComponent;\n\n private readonly _contextUpdateFn: () => unknown;\n private readonly _userInputContextUpdateFn: () => unknown;\n\n private _actionsTooltip?: IgcTooltipComponent;\n private _actionToast?: IgcToastComponent;\n\n /** The current list of messages */\n private _messages: IgcChatMessage[] = [];\n /** Chat options/configuration */\n private _options?: IgcChatOptions;\n\n /** List of current input attachments */\n private _inputAttachments: IgcChatMessageAttachment[] = [];\n /** Current input text */\n private _inputValue = '';\n /**\n * Cache of accepted file types, organized into extensions, mimeTypes, and wildcardTypes\n */\n private _acceptedTypesCache: ChatAcceptedFileTypes | null = null;\n\n //#endregion\n\n //#region Public properties\n\n public get host(): IgcChatComponent {\n return this._host;\n }\n\n public get acceptedFileTypes(): ChatAcceptedFileTypes | null {\n return this._acceptedTypesCache;\n }\n\n public get disableAutoScroll(): boolean {\n return this._options?.disableAutoScroll ?? false;\n }\n\n /**\n * Gets the list of chat messages.\n */\n public get messages(): IgcChatMessage[] {\n return this._messages;\n }\n\n /**\n * Sets the list of chat messages.\n */\n public set messages(value: IgcChatMessage[]) {\n this._messages = value;\n }\n\n /**\n * Gets current chat options.\n */\n public get options(): IgcChatOptions | undefined {\n return this._options;\n }\n\n /**\n * Sets chat options and requests host update.\n */\n public set options(value: IgcChatOptions) {\n this._options = value;\n this._setAcceptedTypesCache();\n this._contextUpdateFn.call(this._host);\n }\n\n /**\n * Gets the current user ID from options or returns 'user' as fallback.\n */\n public get currentUserId(): string {\n return this._options?.currentUserId ?? 'user';\n }\n\n /**\n * Gets the current suggestionsPosition from options or returns the default value 'below-messages'.\n */\n public get suggestionsPosition(): ChatSuggestionsPosition {\n return this._options?.suggestionsPosition ?? 'below-messages';\n }\n\n /**\n * Gets the current stopTypingDelay from options or returns the default value `3000`.\n */\n public get stopTypingDelay(): number {\n return this._options?.stopTypingDelay ?? 3000;\n }\n\n /**\n * Gets the list of attachments currently attached to input.\n */\n public get inputAttachments(): IgcChatMessageAttachment[] {\n return this._inputAttachments;\n }\n\n /**\n * Sets the input attachments and requests host update.\n */\n public set inputAttachments(value: IgcChatMessageAttachment[]) {\n this._inputAttachments = value;\n this._userInputContextUpdateFn.call(this._host);\n }\n\n /**\n * Gets the current input value.\n */\n public get inputValue(): string {\n return this._inputValue;\n }\n\n /**\n * Sets the current input value and requests host update.\n */\n public set inputValue(value: string) {\n this._inputValue = value;\n this._userInputContextUpdateFn.call(this._host);\n }\n\n /**\n * Whether the default chat textarea holds a value that is not only spaces.\n * @internal\n */\n public get hasInputValue(): boolean {\n return !!this._inputValue.trim();\n }\n\n /**\n * Whether the default file input of the chat holds files.\n * @internal\n */\n public get hasInputAttachments(): boolean {\n return !isEmpty(this._inputAttachments);\n }\n\n public get resourceStrings(): IgcChatResourceStrings & IChatResourceStrings {\n return this._host.resourceStrings;\n }\n\n //#endregion\n\n constructor(\n chat: IgcChatComponent,\n contextUpdateFn: () => unknown,\n userInputContextUpdateFn: () => unknown\n ) {\n this._host = chat;\n this._contextUpdateFn = contextUpdateFn;\n this._userInputContextUpdateFn = userInputContextUpdateFn;\n }\n\n public isCurrentUserMessage(message?: IgcChatMessage): boolean {\n return this.currentUserId === message?.sender;\n }\n\n //#region Event handlers\n\n public emitEvent<\n K extends keyof IgcChatComponentEventMap,\n D extends UnpackCustomEvent<IgcChatComponentEventMap[K]>,\n >(event: K, eventInitDict?: CustomEventInit<D>): boolean {\n return this._host.emitEvent(event, eventInitDict);\n }\n\n /** @internal */\n public emitMessageCreated(message: IgcChatMessage): boolean {\n return this._host.emitEvent('igcMessageCreated', {\n detail: message,\n cancelable: true,\n });\n }\n\n /** @internal */\n public emitAttachmentsAdded(\n attachments: IgcChatMessageAttachment[]\n ): boolean {\n return this._host.emitEvent('igcAttachmentAdded', {\n detail: attachments,\n cancelable: true,\n });\n }\n\n /** @internal */\n public emitAttachmentRemoved(attachment: IgcChatMessageAttachment): boolean {\n return this._host.emitEvent('igcAttachmentRemoved', {\n detail: attachment,\n cancelable: true,\n });\n }\n\n /** @internal */\n public emitMessageReaction(reaction: IgcChatMessageReaction): boolean {\n return this._host.emitEvent('igcMessageReact', { detail: reaction });\n }\n\n /** @internal */\n public emitUserTypingState(state: boolean): boolean {\n return this._host.emitEvent('igcTypingChange', { detail: state });\n }\n\n /**\n * @internal\n */\n public showActionsTooltip(target: Element, message: string): void {\n if (!this._actionsTooltip) {\n this._actionsTooltip = document.createElement(\n IgcTooltipComponent.tagName\n );\n this._actionsTooltip.hideTriggers = 'pointerleave,click,blur';\n this._actionsTooltip.hideDelay = 100;\n this._host.renderRoot.appendChild(this._actionsTooltip);\n }\n this._actionsTooltip.message = message;\n this._actionsTooltip.show(target);\n }\n\n /**\n * @internal\n */\n public showActionToast(content: string): void {\n if (!this._actionToast) {\n this._actionToast = document.createElement(IgcToastComponent.tagName);\n this._actionToast.displayTime = 3000;\n this._host.renderRoot.appendChild(this._actionToast);\n }\n this._actionToast.textContent = content;\n this._actionToast.show();\n }\n\n //#endregion\n\n /**\n * Parses the `acceptedFiles` option into extensions, MIME types and wildcard\n * types, and caches the result.\n */\n private _setAcceptedTypesCache(): void {\n this._acceptedTypesCache = this.options?.acceptedFiles\n ? parseAcceptedFileTypes(this.options.acceptedFiles)\n : null;\n }\n\n protected _createMessage(message: Partial<IgcChatMessage>): IgcChatMessage {\n return {\n id: message.id ?? nanoid(),\n text: message.text ?? '',\n sender: message.sender ?? this.currentUserId,\n timestamp: message.timestamp ?? Date.now().toString(),\n attachments: message.attachments || [],\n };\n }\n\n public addMessage(message: Partial<IgcChatMessage>) {\n this.messages.push(this._createMessage(message));\n this._host.requestUpdate('messages');\n }\n\n //#region Public API\n\n /**\n * Adds a chat message. Emits the cancellable `igcMessageCreated` event. On\n * success, clears the input value and the attachments.\n * @internal\n */\n public addMessageWithEvent(message: Partial<IgcChatMessage>): void {\n const newMessage = this._createMessage(message);\n\n if (this.emitMessageCreated(newMessage)) {\n this.addMessage(newMessage);\n this.inputValue = '';\n this.inputAttachments = [];\n }\n }\n\n /**\n * Adds `files` to the input as attachments. Emits the cancellable\n * `igcAttachmentChange` event.\n * @internal\n */\n public attachFilesWithEvent(files: File[]): void {\n const newAttachments: IgcChatMessageAttachment[] = [];\n const fileNames = new Set(\n this.inputAttachments.map((attachment) => attachment.file?.name ?? '')\n );\n\n for (const file of files) {\n if (fileNames.has(file.name)) {\n continue;\n }\n\n const url = URL.createObjectURL(file);\n const attachment: IgcChatMessageAttachment = {\n id: nanoid(),\n url,\n name: file.name,\n file,\n };\n\n if (isImageAttachment(file)) {\n attachment.thumbnail = url;\n }\n newAttachments.push(attachment);\n }\n\n if (this.emitAttachmentsAdded(newAttachments)) {\n this.inputAttachments = [...this.inputAttachments, ...newAttachments];\n }\n }\n\n //#endregion\n}\n"]}
@@ -83,8 +83,6 @@ declare const IgcChatComponent_base: Constructor<import("#internals/mixins/event
83
83
  *
84
84
  * @csspart chat-container - Styles the main chat container.
85
85
  * @csspart header - Styles the chat header container.
86
- * @csspart prefix - Styles the element before the chat title (e.g., avatar).
87
- * @csspart title - Styles the chat header title.
88
86
  *
89
87
  * @csspart message-area-container - Styles the container holding the messages and (optional) suggestions.
90
88
  * @csspart message-list - Styles the message list container.
@@ -102,6 +100,7 @@ declare const IgcChatComponent_base: Constructor<import("#internals/mixins/event
102
100
  *
103
101
  * @csspart input-area-container - Styles the wrapper around the chat input area.
104
102
  * @csspart input-area - Styles the main text input area.
103
+ * @csspart input-container - Styles the wrapper around the text input.
105
104
  * @csspart input-attachments-container - Styles the container for attachments in the input.
106
105
  * @csspart input-attachment-container - Styles a single attachment in the input area.
107
106
  * @csspart input-attachment-name - Styles the file name of an attachment.
@@ -116,7 +115,6 @@ declare const IgcChatComponent_base: Constructor<import("#internals/mixins/event
116
115
  * @csspart send-button - Styles the send button.
117
116
  *
118
117
  * @csspart message-container - Styles the container of a single message.
119
- * @csspart message-list (forwarded) - Styles the internal list of messages.
120
118
  * @csspart message-header - Styles the header of a message (e.g., sender, timestamp).
121
119
  * @csspart message-content - Styles the text content of a message.
122
120
  * @csspart message-attachments-container - Styles the container for message attachments.
@@ -14,6 +14,7 @@ import { addContextProvider } from '#internals/controllers/context-provider.js';
14
14
  import { addSlotController, setSlots } from '#internals/controllers/slot.js';
15
15
  import { registerComponent } from '#internals/definitions/register.js';
16
16
  import { addI18nController } from '#internals/i18n/i18n-controller.js';
17
+ import { chatResourcesMap } from '#internals/i18n/utils.js';
17
18
  import { EventEmitterMixin } from '#internals/mixins/event-emitter.js';
18
19
  import { isEmpty } from '#internals/utils/arrays.js';
19
20
  import { addThemingController } from '#theming/theming-controller.js';
@@ -85,7 +86,7 @@ export default class IgcChatComponent extends EventEmitterMixin(LitElement) {
85
86
  });
86
87
  this._i18nController = addI18nController(this, {
87
88
  defaultEN: ChatResourceStringsEN,
88
- resourceMapName: 'chat',
89
+ resourceMap: chatResourcesMap,
89
90
  });
90
91
  addThemingController(this, all);
91
92
  }
@@ -150,7 +151,6 @@ export default class IgcChatComponent extends EventEmitterMixin(LitElement) {
150
151
  .message=${message}
151
152
  exportparts="
152
153
  message-container,
153
- message-list,
154
154
  message-header,
155
155
  plain-text: message-content,
156
156
  message-attachments: message-attachments-container,