igniteui-webcomponents 6.1.0 → 6.1.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/components/accordion/accordion.js +3 -3
  2. package/components/accordion/accordion.js.map +1 -1
  3. package/components/avatar/avatar.d.ts +8 -10
  4. package/components/avatar/avatar.js +26 -26
  5. package/components/avatar/avatar.js.map +1 -1
  6. package/components/badge/badge.d.ts +3 -4
  7. package/components/badge/badge.js +13 -13
  8. package/components/badge/badge.js.map +1 -1
  9. package/components/banner/banner.d.ts +2 -3
  10. package/components/banner/banner.js +8 -4
  11. package/components/banner/banner.js.map +1 -1
  12. package/components/button/button-base.d.ts +4 -11
  13. package/components/button/button-base.js +14 -15
  14. package/components/button/button-base.js.map +1 -1
  15. package/components/button/button.js.map +1 -1
  16. package/components/button/icon-button.d.ts +2 -2
  17. package/components/button/icon-button.js +1 -1
  18. package/components/button/icon-button.js.map +1 -1
  19. package/components/button-group/button-group.js +2 -2
  20. package/components/button-group/button-group.js.map +1 -1
  21. package/components/button-group/toggle-button.d.ts +0 -6
  22. package/components/button-group/toggle-button.js +4 -6
  23. package/components/button-group/toggle-button.js.map +1 -1
  24. package/components/calendar/calendar.js +1 -1
  25. package/components/calendar/calendar.js.map +1 -1
  26. package/components/calendar/days-view/days-view.js +3 -3
  27. package/components/calendar/days-view/days-view.js.map +1 -1
  28. package/components/calendar/months-view/months-view.js +5 -5
  29. package/components/calendar/months-view/months-view.js.map +1 -1
  30. package/components/calendar/years-view/years-view.js +5 -5
  31. package/components/calendar/years-view/years-view.js.map +1 -1
  32. package/components/card/card.actions.js +1 -1
  33. package/components/card/card.actions.js.map +1 -1
  34. package/components/card/card.content.js +1 -1
  35. package/components/card/card.content.js.map +1 -1
  36. package/components/card/card.header.js +1 -1
  37. package/components/card/card.header.js.map +1 -1
  38. package/components/card/card.js +1 -1
  39. package/components/card/card.js.map +1 -1
  40. package/components/card/card.media.js +1 -1
  41. package/components/card/card.media.js.map +1 -1
  42. package/components/carousel/carousel-indicator-container.js +1 -1
  43. package/components/carousel/carousel-indicator-container.js.map +1 -1
  44. package/components/carousel/carousel-indicator.d.ts +5 -7
  45. package/components/carousel/carousel-indicator.js +19 -19
  46. package/components/carousel/carousel-indicator.js.map +1 -1
  47. package/components/carousel/carousel-slide.d.ts +2 -3
  48. package/components/carousel/carousel-slide.js +17 -11
  49. package/components/carousel/carousel-slide.js.map +1 -1
  50. package/components/carousel/carousel.d.ts +0 -1
  51. package/components/carousel/carousel.js +15 -11
  52. package/components/carousel/carousel.js.map +1 -1
  53. package/components/chat/chat-input.d.ts +41 -0
  54. package/components/chat/chat-input.js +254 -0
  55. package/components/chat/chat-input.js.map +1 -0
  56. package/components/chat/chat-message-list.d.ts +24 -0
  57. package/components/chat/chat-message-list.js +88 -0
  58. package/components/chat/chat-message-list.js.map +1 -0
  59. package/components/chat/chat-message.d.ts +21 -0
  60. package/components/chat/chat-message.js +52 -0
  61. package/components/chat/chat-message.js.map +1 -0
  62. package/components/chat/chat.d.ts +41 -0
  63. package/components/chat/chat.js +98 -0
  64. package/components/chat/chat.js.map +1 -0
  65. package/components/chat/markdown-util.d.ts +2 -0
  66. package/components/chat/markdown-util.js +22 -0
  67. package/components/chat/markdown-util.js.map +1 -0
  68. package/components/chat/message-attachments.d.ts +28 -0
  69. package/components/chat/message-attachments.js +168 -0
  70. package/components/chat/message-attachments.js.map +1 -0
  71. package/components/chat/themes/chat.base.css.d.ts +1 -0
  72. package/components/chat/themes/chat.base.css.js +3 -0
  73. package/components/chat/themes/chat.base.css.js.map +1 -0
  74. package/components/chat/themes/input.base.css.d.ts +1 -0
  75. package/components/chat/themes/input.base.css.js +3 -0
  76. package/components/chat/themes/input.base.css.js.map +1 -0
  77. package/components/chat/themes/message-attachments.base.css.d.ts +1 -0
  78. package/components/chat/themes/message-attachments.base.css.js +3 -0
  79. package/components/chat/themes/message-attachments.base.css.js.map +1 -0
  80. package/components/chat/themes/message-list.base.css.d.ts +1 -0
  81. package/components/chat/themes/message-list.base.css.js +3 -0
  82. package/components/chat/themes/message-list.base.css.js.map +1 -0
  83. package/components/chat/themes/message.base.css.d.ts +1 -0
  84. package/components/chat/themes/message.base.css.js +3 -0
  85. package/components/chat/themes/message.base.css.js.map +1 -0
  86. package/components/chat/types.d.ts +46 -0
  87. package/components/chat/types.js +8 -0
  88. package/components/chat/types.js.map +1 -0
  89. package/components/checkbox/checkbox-base.js.map +1 -1
  90. package/components/checkbox/checkbox.js +1 -1
  91. package/components/checkbox/checkbox.js.map +1 -1
  92. package/components/checkbox/switch.js +1 -1
  93. package/components/checkbox/switch.js.map +1 -1
  94. package/components/checkbox/validators.js.map +1 -1
  95. package/components/chip/chip.js +1 -1
  96. package/components/chip/chip.js.map +1 -1
  97. package/components/combo/combo-header.js +1 -1
  98. package/components/combo/combo-header.js.map +1 -1
  99. package/components/combo/combo-item.d.ts +4 -6
  100. package/components/combo/combo-item.js +20 -18
  101. package/components/combo/combo-item.js.map +1 -1
  102. package/components/combo/combo.d.ts +1 -1
  103. package/components/combo/combo.js +14 -14
  104. package/components/combo/combo.js.map +1 -1
  105. package/components/common/abort-handler.d.ts +39 -0
  106. package/components/common/abort-handler.js +19 -0
  107. package/components/common/abort-handler.js.map +1 -0
  108. package/components/common/context.d.ts +5 -1
  109. package/components/common/context.js +2 -1
  110. package/components/common/context.js.map +1 -1
  111. package/components/common/controllers/drag.d.ts +3 -2
  112. package/components/common/controllers/drag.js +7 -6
  113. package/components/common/controllers/drag.js.map +1 -1
  114. package/components/common/controllers/focus-ring.d.ts +1 -0
  115. package/components/common/controllers/focus-ring.js +5 -4
  116. package/components/common/controllers/focus-ring.js.map +1 -1
  117. package/components/common/controllers/gestures.d.ts +6 -2
  118. package/components/common/controllers/gestures.js +15 -11
  119. package/components/common/controllers/gestures.js.map +1 -1
  120. package/components/common/controllers/internals.d.ts +33 -0
  121. package/components/common/controllers/internals.js +25 -0
  122. package/components/common/controllers/internals.js.map +1 -0
  123. package/components/common/controllers/key-bindings.d.ts +1 -0
  124. package/components/common/controllers/key-bindings.js +6 -4
  125. package/components/common/controllers/key-bindings.js.map +1 -1
  126. package/components/common/controllers/mutation-observer.d.ts +25 -15
  127. package/components/common/controllers/mutation-observer.js +23 -12
  128. package/components/common/controllers/mutation-observer.js.map +1 -1
  129. package/components/common/controllers/resize-observer.js.map +1 -1
  130. package/components/common/controllers/root-click.d.ts +58 -13
  131. package/components/common/controllers/root-click.js +47 -35
  132. package/components/common/controllers/root-click.js.map +1 -1
  133. package/components/common/decorators/shadow-options.d.ts +10 -0
  134. package/components/common/decorators/shadow-options.js +10 -0
  135. package/components/common/decorators/shadow-options.js.map +1 -0
  136. package/components/common/definitions/defineAllComponents.js +14 -12
  137. package/components/common/definitions/defineAllComponents.js.map +1 -1
  138. package/components/common/mixins/alert.d.ts +1 -2
  139. package/components/common/mixins/alert.js +13 -9
  140. package/components/common/mixins/alert.js.map +1 -1
  141. package/components/common/mixins/combo-box.d.ts +2 -1
  142. package/components/common/mixins/combo-box.js +0 -2
  143. package/components/common/mixins/combo-box.js.map +1 -1
  144. package/components/common/mixins/forms/associated.js +2 -2
  145. package/components/common/mixins/forms/associated.js.map +1 -1
  146. package/components/common/mixins/option.d.ts +1 -2
  147. package/components/common/mixins/option.js +13 -11
  148. package/components/common/mixins/option.js.map +1 -1
  149. package/components/common/part-map.js +1 -1
  150. package/components/common/part-map.js.map +1 -1
  151. package/components/common/util.d.ts +9 -0
  152. package/components/common/util.js +9 -1
  153. package/components/common/util.js.map +1 -1
  154. package/components/date-picker/date-picker.d.ts +1 -6
  155. package/components/date-picker/date-picker.js +11 -10
  156. package/components/date-picker/date-picker.js.map +1 -1
  157. package/components/date-picker/validators.js.map +1 -1
  158. package/components/date-range-picker/date-range-picker.d.ts +2 -7
  159. package/components/date-range-picker/date-range-picker.js +11 -10
  160. package/components/date-range-picker/date-range-picker.js.map +1 -1
  161. package/components/date-range-picker/predefined-ranges-area.js +1 -1
  162. package/components/date-range-picker/predefined-ranges-area.js.map +1 -1
  163. package/components/date-time-input/date-time-input.js.map +1 -1
  164. package/components/date-time-input/validators.js.map +1 -1
  165. package/components/dialog/dialog.js +1 -1
  166. package/components/dialog/dialog.js.map +1 -1
  167. package/components/divider/divider.d.ts +5 -3
  168. package/components/divider/divider.js +17 -15
  169. package/components/divider/divider.js.map +1 -1
  170. package/components/dropdown/dropdown-group.d.ts +0 -1
  171. package/components/dropdown/dropdown-group.js +7 -3
  172. package/components/dropdown/dropdown-group.js.map +1 -1
  173. package/components/dropdown/dropdown-header.js +1 -1
  174. package/components/dropdown/dropdown-header.js.map +1 -1
  175. package/components/dropdown/dropdown.d.ts +2 -1
  176. package/components/dropdown/dropdown.js +5 -2
  177. package/components/dropdown/dropdown.js.map +1 -1
  178. package/components/expansion-panel/expansion-panel.js +1 -1
  179. package/components/expansion-panel/expansion-panel.js.map +1 -1
  180. package/components/file-input/file-input.js.map +1 -1
  181. package/components/file-input/validators.js.map +1 -1
  182. package/components/focus-trap/focus-trap.js +4 -4
  183. package/components/focus-trap/focus-trap.js.map +1 -1
  184. package/components/icon/icon.d.ts +1 -1
  185. package/components/icon/icon.js +7 -5
  186. package/components/icon/icon.js.map +1 -1
  187. package/components/input/input-base.d.ts +1 -7
  188. package/components/input/input-base.js +4 -6
  189. package/components/input/input-base.js.map +1 -1
  190. package/components/input/input.js.map +1 -1
  191. package/components/input/themes/shared/input.material.css.js +1 -1
  192. package/components/input/themes/shared/input.material.css.js.map +1 -1
  193. package/components/input/validators.js.map +1 -1
  194. package/components/list/list-header.d.ts +0 -1
  195. package/components/list/list-header.js +5 -3
  196. package/components/list/list-header.js.map +1 -1
  197. package/components/list/list-item.d.ts +0 -1
  198. package/components/list/list-item.js +7 -3
  199. package/components/list/list-item.js.map +1 -1
  200. package/components/list/list.d.ts +0 -1
  201. package/components/list/list.js +7 -3
  202. package/components/list/list.js.map +1 -1
  203. package/components/mask-input/mask-input.js.map +1 -1
  204. package/components/mask-input/validators.js.map +1 -1
  205. package/components/nav-drawer/nav-drawer-header-item.js +1 -1
  206. package/components/nav-drawer/nav-drawer-header-item.js.map +1 -1
  207. package/components/nav-drawer/nav-drawer-item.js +1 -1
  208. package/components/nav-drawer/nav-drawer-item.js.map +1 -1
  209. package/components/nav-drawer/nav-drawer.js +1 -1
  210. package/components/nav-drawer/nav-drawer.js.map +1 -1
  211. package/components/navbar/navbar.js +1 -1
  212. package/components/navbar/navbar.js.map +1 -1
  213. package/components/popover/popover.js +1 -1
  214. package/components/popover/popover.js.map +1 -1
  215. package/components/progress/base.d.ts +1 -2
  216. package/components/progress/base.js +28 -26
  217. package/components/progress/base.js.map +1 -1
  218. package/components/radio/radio.js +1 -1
  219. package/components/radio/radio.js.map +1 -1
  220. package/components/radio/utils.js.map +1 -1
  221. package/components/radio-group/radio-group.d.ts +1 -1
  222. package/components/radio-group/radio-group.js +9 -8
  223. package/components/radio-group/radio-group.js.map +1 -1
  224. package/components/rating/rating-symbol.js +1 -1
  225. package/components/rating/rating-symbol.js.map +1 -1
  226. package/components/rating/rating.js +1 -1
  227. package/components/rating/rating.js.map +1 -1
  228. package/components/resize-container/resize-container.js +1 -1
  229. package/components/resize-container/resize-container.js.map +1 -1
  230. package/components/resize-container/resize-controller.d.ts +3 -2
  231. package/components/resize-container/resize-controller.js +6 -4
  232. package/components/resize-container/resize-controller.js.map +1 -1
  233. package/components/ripple/ripple.js +3 -2
  234. package/components/ripple/ripple.js.map +1 -1
  235. package/components/select/select-group.d.ts +1 -1
  236. package/components/select/select-group.js +9 -5
  237. package/components/select/select-group.js.map +1 -1
  238. package/components/select/select-header.js +1 -1
  239. package/components/select/select-header.js.map +1 -1
  240. package/components/select/select.d.ts +1 -0
  241. package/components/select/select.js +9 -6
  242. package/components/select/select.js.map +1 -1
  243. package/components/select/validators.js.map +1 -1
  244. package/components/slider/slider-base.js +6 -6
  245. package/components/slider/slider-base.js.map +1 -1
  246. package/components/slider/slider-label.js +1 -1
  247. package/components/slider/slider-label.js.map +1 -1
  248. package/components/slider/slider.js.map +1 -1
  249. package/components/snackbar/snackbar.js.map +1 -1
  250. package/components/stepper/step.js +1 -1
  251. package/components/stepper/step.js.map +1 -1
  252. package/components/stepper/stepper.js +1 -1
  253. package/components/stepper/stepper.js.map +1 -1
  254. package/components/tabs/tab.js +2 -2
  255. package/components/tabs/tab.js.map +1 -1
  256. package/components/tabs/tabs.js +4 -4
  257. package/components/tabs/tabs.js.map +1 -1
  258. package/components/textarea/textarea.d.ts +1 -7
  259. package/components/textarea/textarea.js +7 -9
  260. package/components/textarea/textarea.js.map +1 -1
  261. package/components/textarea/themes/shared/textarea.material.css.js +1 -1
  262. package/components/textarea/themes/shared/textarea.material.css.js.map +1 -1
  263. package/components/textarea/validators.js.map +1 -1
  264. package/components/tile-manager/position.d.ts +1 -1
  265. package/components/tile-manager/position.js.map +1 -1
  266. package/components/tile-manager/themes/container.js.map +1 -1
  267. package/components/tile-manager/tile-manager.d.ts +0 -1
  268. package/components/tile-manager/tile-manager.js +4 -6
  269. package/components/tile-manager/tile-manager.js.map +1 -1
  270. package/components/tile-manager/tile.js +1 -1
  271. package/components/tile-manager/tile.js.map +1 -1
  272. package/components/tooltip/controller.d.ts +2 -4
  273. package/components/tooltip/controller.js +11 -20
  274. package/components/tooltip/controller.js.map +1 -1
  275. package/components/tooltip/themes/themes.js +1 -1
  276. package/components/tooltip/themes/themes.js.map +1 -1
  277. package/components/tooltip/tooltip.d.ts +0 -1
  278. package/components/tooltip/tooltip.js +37 -33
  279. package/components/tooltip/tooltip.js.map +1 -1
  280. package/components/tree/tree-item.d.ts +1 -0
  281. package/components/tree/tree-item.js +24 -24
  282. package/components/tree/tree-item.js.map +1 -1
  283. package/components/tree/tree.d.ts +1 -1
  284. package/components/tree/tree.js +4 -3
  285. package/components/tree/tree.js.map +1 -1
  286. package/components/tree/tree.navigation.d.ts +1 -1
  287. package/components/tree/tree.navigation.js.map +1 -1
  288. package/components/tree/tree.selection.d.ts +1 -1
  289. package/components/tree/tree.selection.js.map +1 -1
  290. package/components/validation-container/themes/themes.js.map +1 -1
  291. package/components/validation-container/validation-container.d.ts +1 -1
  292. package/components/validation-container/validation-container.js +1 -1
  293. package/components/validation-container/validation-container.js.map +1 -1
  294. package/custom-elements.json +20068 -19253
  295. package/igniteui-webcomponents.css-data.json +1 -1
  296. package/igniteui-webcomponents.html-data.json +1 -1
  297. package/index.d.ts +7 -0
  298. package/index.js +5 -0
  299. package/index.js.map +1 -1
  300. package/package.json +1 -1
  301. package/theming/theming-controller.d.ts +1 -1
  302. package/theming/theming-controller.js +1 -1
  303. package/theming/theming-controller.js.map +1 -1
  304. package/web-types.json +2 -2
@@ -6,7 +6,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  var IgcCarouselComponent_1;
8
8
  import { ContextProvider } from '@lit/context';
9
- import { LitElement, html, nothing } from 'lit';
9
+ import { html, LitElement, nothing } from 'lit';
10
10
  import { property, queryAll, queryAssignedElements, state, } from 'lit/decorators.js';
11
11
  import { createRef, ref } from 'lit/directives/ref.js';
12
12
  import { styleMap } from 'lit/directives/style-map.js';
@@ -14,16 +14,17 @@ import { themes } from '../../theming/theming-decorator.js';
14
14
  import IgcButtonComponent from '../button/button.js';
15
15
  import { carouselContext } from '../common/context.js';
16
16
  import { addGesturesController, } from '../common/controllers/gestures.js';
17
+ import { addInternalsController } from '../common/controllers/internals.js';
17
18
  import { addKeybindings, arrowLeft, arrowRight, endKey, homeKey, } from '../common/controllers/key-bindings.js';
18
19
  import { createMutationController, } from '../common/controllers/mutation-observer.js';
19
20
  import { watch } from '../common/decorators/watch.js';
20
21
  import { registerComponent } from '../common/definitions/register.js';
21
22
  import { EventEmitterMixin } from '../common/mixins/event-emitter.js';
22
23
  import { partMap } from '../common/part-map.js';
23
- import { asNumber, createCounter, findElementFromEventPath, first, formatString, isLTR, last, wrap, } from '../common/util.js';
24
+ import { addSafeEventListener, asNumber, createCounter, findElementFromEventPath, first, formatString, isLTR, last, wrap, } from '../common/util.js';
24
25
  import IgcIconComponent from '../icon/icon.js';
25
- import IgcCarouselIndicatorContainerComponent from './carousel-indicator-container.js';
26
26
  import IgcCarouselIndicatorComponent from './carousel-indicator.js';
27
+ import IgcCarouselIndicatorContainerComponent from './carousel-indicator-container.js';
27
28
  import IgcCarouselSlideComponent from './carousel-slide.js';
28
29
  import { styles } from './themes/carousel.base.css.js';
29
30
  import { all } from './themes/container.js';
@@ -49,7 +50,7 @@ let IgcCarouselComponent = IgcCarouselComponent_1 = class IgcCarouselComponent e
49
50
  if (activeSlides.length <= 1) {
50
51
  return;
51
52
  }
52
- const idx = this.slides.indexOf(added.length ? last(added).node : last(attributes));
53
+ const idx = this.slides.indexOf(added.length ? last(added).node : last(attributes).node);
53
54
  for (const [i, slide] of this.slides.entries()) {
54
55
  if (slide.active && i !== idx) {
55
56
  slide.active = false;
@@ -104,15 +105,18 @@ let IgcCarouselComponent = IgcCarouselComponent_1 = class IgcCarouselComponent e
104
105
  this.slidesLabelFormat = '{0} of {1}';
105
106
  this.maximumIndicatorsCount = 10;
106
107
  this.animationType = 'slide';
107
- this._internals = this.attachInternals();
108
- this._internals.role = 'region';
109
- this._internals.ariaRoleDescription = 'carousel';
110
- this.addEventListener('pointerenter', this.handlePointerEnter);
111
- this.addEventListener('pointerleave', this.handlePointerLeave);
112
- this.addEventListener('pointerdown', () => {
108
+ addInternalsController(this, {
109
+ initialARIA: {
110
+ role: 'region',
111
+ ariaRoleDescription: 'carousel',
112
+ },
113
+ });
114
+ addSafeEventListener(this, 'pointerenter', this.handlePointerEnter);
115
+ addSafeEventListener(this, 'pointerleave', this.handlePointerLeave);
116
+ addSafeEventListener(this, 'pointerdown', () => {
113
117
  this._hasInnerFocus = false;
114
118
  });
115
- this.addEventListener('keyup', () => {
119
+ addSafeEventListener(this, 'keyup', () => {
116
120
  this._hasInnerFocus = true;
117
121
  });
118
122
  addGesturesController(this, {
@@ -1 +1 @@
1
- {"version":3,"file":"carousel.js","sourceRoot":"","sources":["../../../src/components/carousel/carousel.ts"],"names":[],"mappings":"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","sourcesContent":["import { ContextProvider } from '@lit/context';\nimport { LitElement, html, nothing } from 'lit';\nimport {\n property,\n queryAll,\n queryAssignedElements,\n state,\n} from 'lit/decorators.js';\n\nimport { createRef, ref } from 'lit/directives/ref.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { themes } from '../../theming/theming-decorator.js';\nimport IgcButtonComponent from '../button/button.js';\nimport { carouselContext } from '../common/context.js';\nimport {\n type SwipeEvent,\n addGesturesController,\n} from '../common/controllers/gestures.js';\nimport {\n addKeybindings,\n arrowLeft,\n arrowRight,\n endKey,\n homeKey,\n} from '../common/controllers/key-bindings.js';\nimport {\n type MutationControllerParams,\n createMutationController,\n} from '../common/controllers/mutation-observer.js';\nimport { watch } from '../common/decorators/watch.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport type { Constructor } from '../common/mixins/constructor.js';\nimport { EventEmitterMixin } from '../common/mixins/event-emitter.js';\nimport { partMap } from '../common/part-map.js';\nimport {\n asNumber,\n createCounter,\n findElementFromEventPath,\n first,\n formatString,\n isLTR,\n last,\n wrap,\n} from '../common/util.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\n/**\n * The `igc-carousel` presents a set of `igc-carousel-slide`s by sequentially displaying a subset of one or more slides.\n *\n * @element igc-carousel\n *\n * @slot Default slot for the carousel. Any projected `igc-carousel-slide` components should be projected here.\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\n@themes(all)\nexport default class IgcCarouselComponent extends EventEmitterMixin<\n IgcCarouselComponentEventMap,\n Constructor<LitElement>\n>(LitElement) {\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 private static readonly increment = createCounter();\n private readonly _carouselId = `igc-carousel-${IgcCarouselComponent.increment()}`;\n\n private readonly _internals: ElementInternals;\n private _lastInterval!: ReturnType<typeof setInterval> | null;\n private _hasKeyboardInteractionOnIndicators = false;\n private _hasMouseStop = false;\n private _hasInnerFocus = false;\n\n private _context = new ContextProvider(this, {\n context: carouselContext,\n initialValue: this,\n });\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 this._projectedIndicators.length > 0;\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 prevIndex(): number {\n return wrap(0, this.total - 1, this.current - 1);\n }\n\n @queryAll(IgcCarouselIndicatorComponent.tagName)\n private _defaultIndicators!: NodeListOf<IgcCarouselIndicatorComponent>;\n\n @queryAssignedElements({\n selector: IgcCarouselIndicatorComponent.tagName,\n slot: 'indicator',\n })\n private _projectedIndicators!: Array<IgcCarouselIndicatorComponent>;\n\n @state()\n private _activeSlide!: IgcCarouselSlideComponent;\n\n @state()\n private _playing = false;\n\n @state()\n private _paused = false;\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 const idx = this.slides.indexOf(\n added.length ? last(added).node : last(attributes)\n );\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 /**\n * Whether the carousel should skip rotating to the first slide after it reaches the last.\n * @attr disable-loop\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 * @attr disable-pause-on-interaction\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 * @attr hide-navigation\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 * @attr hide-indicators\n */\n @property({ type: Boolean, reflect: true, attribute: 'hide-indicators' })\n public hideIndicators = false;\n\n /**\n * Whether the carousel has vertical alignment.\n * @attr vertical\n */\n @property({ type: Boolean, reflect: true })\n public vertical = false;\n\n /**\n * Sets the orientation of the indicator controls (dots).\n * @attr indicators-orientation\n */\n @property({ reflect: false, 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 indicatorsLabelFormat = 'Slide {0}';\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 slidesLabelFormat = '{0} of {1}';\n\n /**\n * The duration in milliseconds between changing the active slide.\n * @attr interval\n */\n @property({ type: Number, reflect: false })\n public interval: number | undefined;\n\n /**\n * Controls the maximum indicator controls (dots) that can be shown. Default value is `10`.\n * @attr maximum-indicators-count\n */\n @property({\n type: Number,\n reflect: false,\n attribute: 'maximum-indicators-count',\n })\n public maximumIndicatorsCount = 10;\n\n /**\n * The animation type.\n * @attr animation-type\n */\n @property({ attribute: 'animation-type' })\n public animationType: HorizontalTransitionAnimation = 'slide';\n\n /* blazorSuppress */\n /**\n * The slides of the carousel.\n */\n @queryAssignedElements({ selector: IgcCarouselSlideComponent.tagName })\n public slides!: Array<IgcCarouselSlideComponent>;\n\n /**\n * The total number of slides.\n */\n public get total(): number {\n return this.slides.length;\n }\n\n /**\n * The index of the current active slide.\n */\n public get current(): number {\n return Math.max(0, this.slides.indexOf(this._activeSlide));\n }\n\n /**\n * Whether the carousel is in playing state.\n */\n public get isPlaying(): boolean {\n return this._playing;\n }\n\n /**\n * Whether the carousel in in paused state.\n */\n public get isPaused(): boolean {\n return this._paused;\n }\n\n @watch('animationType')\n @watch('slidesLabelFormat')\n @watch('indicatorsLabelFormat')\n protected contextChanged() {\n this._context.setValue(this, true);\n }\n\n @watch('interval')\n protected intervalChange() {\n if (!this.isPlaying) {\n this._playing = true;\n }\n\n this.restartInterval();\n }\n\n constructor() {\n super();\n this._internals = this.attachInternals();\n\n this._internals.role = 'region';\n this._internals.ariaRoleDescription = 'carousel';\n\n this.addEventListener('pointerenter', this.handlePointerEnter);\n this.addEventListener('pointerleave', this.handlePointerLeave);\n this.addEventListener('pointerdown', () => {\n this._hasInnerFocus = false;\n });\n\n this.addEventListener('keyup', () => {\n this._hasInnerFocus = true;\n });\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 bindingDefaults: { preventDefault: true },\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 bindingDefaults: { preventDefault: true },\n }).setActivateHandler(this.handleNavigationInteractionPrevious);\n\n addKeybindings(this, {\n ref: this._nextButtonRef,\n bindingDefaults: { preventDefault: true },\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 private handleSlotChange(): void {\n if (this.total) {\n this.activateSlide(\n this.slides.findLast((slide) => slide.active) ?? first(this.slides)\n );\n }\n }\n\n private handleIndicatorSlotChange(): void {\n this.requestUpdate();\n }\n\n private handlePointerEnter(): void {\n this._hasMouseStop = true;\n if (this._hasInnerFocus) {\n return;\n }\n this.handlePauseOnInteraction();\n }\n\n private handlePointerLeave(): void {\n this._hasMouseStop = false;\n if (this._hasInnerFocus) {\n return;\n }\n this.handlePauseOnInteraction();\n }\n\n private handleFocusIn(): void {\n if (this._hasInnerFocus || this._hasMouseStop) {\n return;\n }\n this.handlePauseOnInteraction();\n }\n\n private handleFocusOut(event: FocusEvent): void {\n const node = event.relatedTarget as Node;\n\n if (this.contains(node) || this.renderRoot.contains(node)) {\n return;\n }\n\n if (this._hasInnerFocus) {\n this._hasInnerFocus = false;\n\n if (!this._hasMouseStop) {\n this.handlePauseOnInteraction();\n }\n }\n }\n\n private handlePauseOnInteraction(): void {\n if (!this.interval || this.disablePauseOnInteraction) return;\n\n if (this.isPlaying) {\n this.pause();\n this.emitEvent('igcPaused');\n } else {\n this.play();\n this.emitEvent('igcPlaying');\n }\n }\n\n private async handleArrowLeft(): Promise<void> {\n this._hasKeyboardInteractionOnIndicators = true;\n this.handleInteraction(isLTR(this) ? this.prev : this.next);\n }\n\n private async handleArrowRight(): Promise<void> {\n this._hasKeyboardInteractionOnIndicators = true;\n this.handleInteraction(isLTR(this) ? this.next : this.prev);\n }\n\n private async handleHomeKey(): Promise<void> {\n this._hasKeyboardInteractionOnIndicators = true;\n this.handleInteraction(() =>\n this.select(isLTR(this) ? first(this.slides) : last(this.slides))\n );\n }\n\n private async handleEndKey(): Promise<void> {\n this._hasKeyboardInteractionOnIndicators = true;\n this.handleInteraction(() =>\n this.select(isLTR(this) ? last(this.slides) : first(this.slides))\n );\n }\n\n private handleVerticalSwipe({ data: { direction } }: SwipeEvent) {\n if (this.vertical) {\n this.handleInteraction(direction === 'up' ? this.next : this.prev);\n }\n }\n\n private handleHorizontalSwipe({ data: { direction } }: SwipeEvent) {\n if (!this.vertical) {\n this.handleInteraction(async () => {\n if (isLTR(this)) {\n direction === 'left' ? await this.next() : await this.prev();\n } else {\n direction === 'left' ? await this.prev() : await this.next();\n }\n });\n }\n }\n\n private async handleIndicatorClick(event: PointerEvent): Promise<void> {\n const indicator = findElementFromEventPath<IgcCarouselIndicatorComponent>(\n IgcCarouselIndicatorComponent.tagName,\n event\n )!;\n\n const index = this.hasProjectedIndicators\n ? this._projectedIndicators.indexOf(indicator)\n : Array.from(this._defaultIndicators).indexOf(indicator);\n\n this.handleInteraction(() =>\n this.select(this.slides[index], index > this.current ? 'next' : 'prev')\n );\n }\n\n private handleNavigationInteractionNext() {\n this.handleInteraction(this.next);\n }\n\n private handleNavigationInteractionPrevious() {\n this.handleInteraction(this.prev);\n }\n\n private async handleInteraction(\n callback: () => Promise<unknown>\n ): Promise<void> {\n if (this.interval) {\n this.resetInterval();\n }\n\n await callback.call(this);\n this.emitEvent('igcSlideChanged', { detail: this.current });\n\n if (this.interval) {\n this.restartInterval();\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.hasProjectedIndicators\n ? this._projectedIndicators[this.current].focus()\n : this._defaultIndicators[this.current].focus();\n\n this._hasKeyboardInteractionOnIndicators = false;\n }\n }\n\n private updateProjectedIndicators(): void {\n for (const [idx, slide] of this.slides.entries()) {\n const indicator = this._projectedIndicators[idx];\n indicator.active = slide.active;\n indicator.index = idx;\n\n this.setAttribute('aria-controls', slide.id);\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 if (asNumber(this.interval) > 0) {\n this._lastInterval = setInterval(() => {\n if (this.isPlaying && this.total) {\n this.next();\n this.emitEvent('igcSlideChanged', { detail: this.current });\n } else {\n this.pause();\n }\n }, this.interval);\n }\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 /**\n * Resumes playing of the carousel slides.\n */\n public play(): void {\n if (!this.isPlaying) {\n this._paused = false;\n this._playing = true;\n this.restartInterval();\n }\n }\n\n /**\n * Pauses the carousel rotation of slides.\n */\n public pause(): void {\n if (this.isPlaying) {\n this._playing = false;\n this._paused = true;\n this.resetInterval();\n }\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.prevIndex === this.total - 1) {\n this.pause();\n return false;\n }\n\n return await this.select(this.slides[this.prevIndex], '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 await this.animateSlides(slide, this._activeSlide, dir);\n return true;\n }\n\n private navigationTemplate() {\n return html`\n <igc-button\n ${ref(this._prevButtonRef)}\n type=\"button\"\n part=\"navigation previous\"\n aria-label=\"Previous slide\"\n aria-controls=${this._carouselId}\n ?disabled=${this.disableLoop && this.current === 0}\n @click=${this.handleNavigationInteractionPrevious}\n >\n <slot name=\"previous-button\">\n <igc-icon\n name=\"carousel_prev\"\n collection=\"default\"\n aria-hidden=\"true\"\n ></igc-icon>\n </slot>\n </igc-button>\n <igc-button\n ${ref(this._nextButtonRef)}\n type=\"button\"\n part=\"navigation next\"\n aria-label=\"Next slide\"\n aria-controls=${this._carouselId}\n ?disabled=${this.disableLoop && this.current === this.total - 1}\n @click=${this.handleNavigationInteractionNext}\n >\n <slot name=\"next-button\">\n <igc-icon\n name=\"carousel_next\"\n collection=\"default\"\n aria-hidden=\"true\"\n ></igc-icon>\n </slot>\n </igc-button>\n `;\n }\n\n protected *renderIndicators() {\n for (const [i, slide] of this.slides.entries()) {\n const forward = slide.active ? 'visible' : 'hidden';\n const backward = slide.active ? 'hidden' : 'visible';\n\n yield html`\n <igc-carousel-indicator\n exportparts=\"indicator, active, inactive\"\n .active=${slide.active}\n .index=${i}\n >\n <div\n part=\"dot\"\n style=${styleMap({ visibility: backward, zIndex: 1 })}\n ></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 indicatorTemplate() {\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\n name=\"indicator\"\n @slotchange=${this.handleIndicatorSlotChange}\n @click=${this.handleIndicatorClick}\n >\n ${this.hasProjectedIndicators\n ? this.updateProjectedIndicators()\n : this.renderIndicators()}\n </slot>\n </div>\n </igc-carousel-indicator-container>\n `;\n }\n\n private labelTemplate() {\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 return html`\n <section @focusin=${this.handleFocusIn} @focusout=${this.handleFocusOut}>\n ${this.hideNavigation ? nothing : this.navigationTemplate()}\n ${this.hideIndicators || this.showIndicatorsLabel\n ? nothing\n : this.indicatorTemplate()}\n ${!this.hideIndicators && this.showIndicatorsLabel\n ? this.labelTemplate()\n : nothing}\n <div\n ${ref(this._carouselSlidesContainerRef)}\n id=${this._carouselId}\n aria-live=${this.interval && this.isPlaying ? 'off' : 'polite'}\n >\n <slot @slotchange=${this.handleSlotChange}></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 { ContextProvider } from '@lit/context';\nimport { html, LitElement, nothing } from 'lit';\nimport {\n property,\n queryAll,\n queryAssignedElements,\n state,\n} from 'lit/decorators.js';\n\nimport { createRef, ref } from 'lit/directives/ref.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { themes } from '../../theming/theming-decorator.js';\nimport IgcButtonComponent from '../button/button.js';\nimport { carouselContext } from '../common/context.js';\nimport {\n addGesturesController,\n type SwipeEvent,\n} from '../common/controllers/gestures.js';\nimport { addInternalsController } from '../common/controllers/internals.js';\nimport {\n addKeybindings,\n arrowLeft,\n arrowRight,\n endKey,\n homeKey,\n} from '../common/controllers/key-bindings.js';\nimport {\n createMutationController,\n type MutationControllerParams,\n} from '../common/controllers/mutation-observer.js';\nimport { watch } from '../common/decorators/watch.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport type { Constructor } from '../common/mixins/constructor.js';\nimport { EventEmitterMixin } from '../common/mixins/event-emitter.js';\nimport { partMap } from '../common/part-map.js';\nimport {\n addSafeEventListener,\n asNumber,\n createCounter,\n findElementFromEventPath,\n first,\n formatString,\n isLTR,\n last,\n wrap,\n} from '../common/util.js';\nimport IgcIconComponent from '../icon/icon.js';\nimport type {\n CarouselIndicatorsOrientation,\n HorizontalTransitionAnimation,\n} from '../types.js';\nimport IgcCarouselIndicatorComponent from './carousel-indicator.js';\nimport IgcCarouselIndicatorContainerComponent from './carousel-indicator-container.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\n/**\n * The `igc-carousel` presents a set of `igc-carousel-slide`s by sequentially displaying a subset of one or more slides.\n *\n * @element igc-carousel\n *\n * @slot Default slot for the carousel. Any projected `igc-carousel-slide` components should be projected here.\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\n@themes(all)\nexport default class IgcCarouselComponent extends EventEmitterMixin<\n IgcCarouselComponentEventMap,\n Constructor<LitElement>\n>(LitElement) {\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 private static readonly increment = createCounter();\n private readonly _carouselId = `igc-carousel-${IgcCarouselComponent.increment()}`;\n\n private _lastInterval!: ReturnType<typeof setInterval> | null;\n private _hasKeyboardInteractionOnIndicators = false;\n private _hasMouseStop = false;\n private _hasInnerFocus = false;\n\n private _context = new ContextProvider(this, {\n context: carouselContext,\n initialValue: this,\n });\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 this._projectedIndicators.length > 0;\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 prevIndex(): number {\n return wrap(0, this.total - 1, this.current - 1);\n }\n\n @queryAll(IgcCarouselIndicatorComponent.tagName)\n private _defaultIndicators!: NodeListOf<IgcCarouselIndicatorComponent>;\n\n @queryAssignedElements({\n selector: IgcCarouselIndicatorComponent.tagName,\n slot: 'indicator',\n })\n private _projectedIndicators!: Array<IgcCarouselIndicatorComponent>;\n\n @state()\n private _activeSlide!: IgcCarouselSlideComponent;\n\n @state()\n private _playing = false;\n\n @state()\n private _paused = false;\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 const idx = this.slides.indexOf(\n added.length ? last(added).node : last(attributes).node\n );\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 /**\n * Whether the carousel should skip rotating to the first slide after it reaches the last.\n * @attr disable-loop\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 * @attr disable-pause-on-interaction\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 * @attr hide-navigation\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 * @attr hide-indicators\n */\n @property({ type: Boolean, reflect: true, attribute: 'hide-indicators' })\n public hideIndicators = false;\n\n /**\n * Whether the carousel has vertical alignment.\n * @attr vertical\n */\n @property({ type: Boolean, reflect: true })\n public vertical = false;\n\n /**\n * Sets the orientation of the indicator controls (dots).\n * @attr indicators-orientation\n */\n @property({ reflect: false, 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 indicatorsLabelFormat = 'Slide {0}';\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 slidesLabelFormat = '{0} of {1}';\n\n /**\n * The duration in milliseconds between changing the active slide.\n * @attr interval\n */\n @property({ type: Number, reflect: false })\n public interval: number | undefined;\n\n /**\n * Controls the maximum indicator controls (dots) that can be shown. Default value is `10`.\n * @attr maximum-indicators-count\n */\n @property({\n type: Number,\n reflect: false,\n attribute: 'maximum-indicators-count',\n })\n public maximumIndicatorsCount = 10;\n\n /**\n * The animation type.\n * @attr animation-type\n */\n @property({ attribute: 'animation-type' })\n public animationType: HorizontalTransitionAnimation = 'slide';\n\n /* blazorSuppress */\n /**\n * The slides of the carousel.\n */\n @queryAssignedElements({ selector: IgcCarouselSlideComponent.tagName })\n public slides!: Array<IgcCarouselSlideComponent>;\n\n /**\n * The total number of slides.\n */\n public get total(): number {\n return this.slides.length;\n }\n\n /**\n * The index of the current active slide.\n */\n public get current(): number {\n return Math.max(0, this.slides.indexOf(this._activeSlide));\n }\n\n /**\n * Whether the carousel is in playing state.\n */\n public get isPlaying(): boolean {\n return this._playing;\n }\n\n /**\n * Whether the carousel in in paused state.\n */\n public get isPaused(): boolean {\n return this._paused;\n }\n\n @watch('animationType')\n @watch('slidesLabelFormat')\n @watch('indicatorsLabelFormat')\n protected contextChanged() {\n this._context.setValue(this, true);\n }\n\n @watch('interval')\n protected intervalChange() {\n if (!this.isPlaying) {\n this._playing = true;\n }\n\n this.restartInterval();\n }\n\n constructor() {\n super();\n\n addInternalsController(this, {\n initialARIA: {\n role: 'region',\n ariaRoleDescription: 'carousel',\n },\n });\n\n addSafeEventListener(this, 'pointerenter', this.handlePointerEnter);\n addSafeEventListener(this, 'pointerleave', this.handlePointerLeave);\n addSafeEventListener(this, 'pointerdown', () => {\n this._hasInnerFocus = false;\n });\n addSafeEventListener(this, 'keyup', () => {\n this._hasInnerFocus = true;\n });\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 bindingDefaults: { preventDefault: true },\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 bindingDefaults: { preventDefault: true },\n }).setActivateHandler(this.handleNavigationInteractionPrevious);\n\n addKeybindings(this, {\n ref: this._nextButtonRef,\n bindingDefaults: { preventDefault: true },\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 private handleSlotChange(): void {\n if (this.total) {\n this.activateSlide(\n this.slides.findLast((slide) => slide.active) ?? first(this.slides)\n );\n }\n }\n\n private handleIndicatorSlotChange(): void {\n this.requestUpdate();\n }\n\n private handlePointerEnter(): void {\n this._hasMouseStop = true;\n if (this._hasInnerFocus) {\n return;\n }\n this.handlePauseOnInteraction();\n }\n\n private handlePointerLeave(): void {\n this._hasMouseStop = false;\n if (this._hasInnerFocus) {\n return;\n }\n this.handlePauseOnInteraction();\n }\n\n private handleFocusIn(): void {\n if (this._hasInnerFocus || this._hasMouseStop) {\n return;\n }\n this.handlePauseOnInteraction();\n }\n\n private handleFocusOut(event: FocusEvent): void {\n const node = event.relatedTarget as Node;\n\n if (this.contains(node) || this.renderRoot.contains(node)) {\n return;\n }\n\n if (this._hasInnerFocus) {\n this._hasInnerFocus = false;\n\n if (!this._hasMouseStop) {\n this.handlePauseOnInteraction();\n }\n }\n }\n\n private handlePauseOnInteraction(): void {\n if (!this.interval || this.disablePauseOnInteraction) return;\n\n if (this.isPlaying) {\n this.pause();\n this.emitEvent('igcPaused');\n } else {\n this.play();\n this.emitEvent('igcPlaying');\n }\n }\n\n private async handleArrowLeft(): Promise<void> {\n this._hasKeyboardInteractionOnIndicators = true;\n this.handleInteraction(isLTR(this) ? this.prev : this.next);\n }\n\n private async handleArrowRight(): Promise<void> {\n this._hasKeyboardInteractionOnIndicators = true;\n this.handleInteraction(isLTR(this) ? this.next : this.prev);\n }\n\n private async handleHomeKey(): Promise<void> {\n this._hasKeyboardInteractionOnIndicators = true;\n this.handleInteraction(() =>\n this.select(isLTR(this) ? first(this.slides) : last(this.slides))\n );\n }\n\n private async handleEndKey(): Promise<void> {\n this._hasKeyboardInteractionOnIndicators = true;\n this.handleInteraction(() =>\n this.select(isLTR(this) ? last(this.slides) : first(this.slides))\n );\n }\n\n private handleVerticalSwipe({ data: { direction } }: SwipeEvent) {\n if (this.vertical) {\n this.handleInteraction(direction === 'up' ? this.next : this.prev);\n }\n }\n\n private handleHorizontalSwipe({ data: { direction } }: SwipeEvent) {\n if (!this.vertical) {\n this.handleInteraction(async () => {\n if (isLTR(this)) {\n direction === 'left' ? await this.next() : await this.prev();\n } else {\n direction === 'left' ? await this.prev() : await this.next();\n }\n });\n }\n }\n\n private async handleIndicatorClick(event: PointerEvent): Promise<void> {\n const indicator = findElementFromEventPath<IgcCarouselIndicatorComponent>(\n IgcCarouselIndicatorComponent.tagName,\n event\n )!;\n\n const index = this.hasProjectedIndicators\n ? this._projectedIndicators.indexOf(indicator)\n : Array.from(this._defaultIndicators).indexOf(indicator);\n\n this.handleInteraction(() =>\n this.select(this.slides[index], index > this.current ? 'next' : 'prev')\n );\n }\n\n private handleNavigationInteractionNext() {\n this.handleInteraction(this.next);\n }\n\n private handleNavigationInteractionPrevious() {\n this.handleInteraction(this.prev);\n }\n\n private async handleInteraction(\n callback: () => Promise<unknown>\n ): Promise<void> {\n if (this.interval) {\n this.resetInterval();\n }\n\n await callback.call(this);\n this.emitEvent('igcSlideChanged', { detail: this.current });\n\n if (this.interval) {\n this.restartInterval();\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.hasProjectedIndicators\n ? this._projectedIndicators[this.current].focus()\n : this._defaultIndicators[this.current].focus();\n\n this._hasKeyboardInteractionOnIndicators = false;\n }\n }\n\n private updateProjectedIndicators(): void {\n for (const [idx, slide] of this.slides.entries()) {\n const indicator = this._projectedIndicators[idx];\n indicator.active = slide.active;\n indicator.index = idx;\n\n this.setAttribute('aria-controls', slide.id);\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 if (asNumber(this.interval) > 0) {\n this._lastInterval = setInterval(() => {\n if (this.isPlaying && this.total) {\n this.next();\n this.emitEvent('igcSlideChanged', { detail: this.current });\n } else {\n this.pause();\n }\n }, this.interval);\n }\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 /**\n * Resumes playing of the carousel slides.\n */\n public play(): void {\n if (!this.isPlaying) {\n this._paused = false;\n this._playing = true;\n this.restartInterval();\n }\n }\n\n /**\n * Pauses the carousel rotation of slides.\n */\n public pause(): void {\n if (this.isPlaying) {\n this._playing = false;\n this._paused = true;\n this.resetInterval();\n }\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.prevIndex === this.total - 1) {\n this.pause();\n return false;\n }\n\n return await this.select(this.slides[this.prevIndex], '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 await this.animateSlides(slide, this._activeSlide, dir);\n return true;\n }\n\n private navigationTemplate() {\n return html`\n <igc-button\n ${ref(this._prevButtonRef)}\n type=\"button\"\n part=\"navigation previous\"\n aria-label=\"Previous slide\"\n aria-controls=${this._carouselId}\n ?disabled=${this.disableLoop && this.current === 0}\n @click=${this.handleNavigationInteractionPrevious}\n >\n <slot name=\"previous-button\">\n <igc-icon\n name=\"carousel_prev\"\n collection=\"default\"\n aria-hidden=\"true\"\n ></igc-icon>\n </slot>\n </igc-button>\n <igc-button\n ${ref(this._nextButtonRef)}\n type=\"button\"\n part=\"navigation next\"\n aria-label=\"Next slide\"\n aria-controls=${this._carouselId}\n ?disabled=${this.disableLoop && this.current === this.total - 1}\n @click=${this.handleNavigationInteractionNext}\n >\n <slot name=\"next-button\">\n <igc-icon\n name=\"carousel_next\"\n collection=\"default\"\n aria-hidden=\"true\"\n ></igc-icon>\n </slot>\n </igc-button>\n `;\n }\n\n protected *renderIndicators() {\n for (const [i, slide] of this.slides.entries()) {\n const forward = slide.active ? 'visible' : 'hidden';\n const backward = slide.active ? 'hidden' : 'visible';\n\n yield html`\n <igc-carousel-indicator\n exportparts=\"indicator, active, inactive\"\n .active=${slide.active}\n .index=${i}\n >\n <div\n part=\"dot\"\n style=${styleMap({ visibility: backward, zIndex: 1 })}\n ></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 indicatorTemplate() {\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\n name=\"indicator\"\n @slotchange=${this.handleIndicatorSlotChange}\n @click=${this.handleIndicatorClick}\n >\n ${this.hasProjectedIndicators\n ? this.updateProjectedIndicators()\n : this.renderIndicators()}\n </slot>\n </div>\n </igc-carousel-indicator-container>\n `;\n }\n\n private labelTemplate() {\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 return html`\n <section @focusin=${this.handleFocusIn} @focusout=${this.handleFocusOut}>\n ${this.hideNavigation ? nothing : this.navigationTemplate()}\n ${this.hideIndicators || this.showIndicatorsLabel\n ? nothing\n : this.indicatorTemplate()}\n ${!this.hideIndicators && this.showIndicatorsLabel\n ? this.labelTemplate()\n : nothing}\n <div\n ${ref(this._carouselSlidesContainerRef)}\n id=${this._carouselId}\n aria-live=${this.interval && this.isPlaying ? 'off' : 'polite'}\n >\n <slot @slotchange=${this.handleSlotChange}></slot>\n </div>\n </section>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-carousel': IgcCarouselComponent;\n }\n}\n"]}
@@ -0,0 +1,41 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ *
4
+ * @element igc-chat-input
5
+ *
6
+ */
7
+ export default class IgcChatInputComponent extends LitElement {
8
+ /** @private */
9
+ static readonly tagName = "igc-chat-input";
10
+ static styles: import("lit").CSSResult;
11
+ private _chat?;
12
+ static register(): void;
13
+ private textInputElement;
14
+ protected acceptedFilesChange(): void;
15
+ private inputValue;
16
+ private attachments;
17
+ private dragClass;
18
+ private _acceptedTypesCache;
19
+ constructor();
20
+ protected firstUpdated(): void;
21
+ private handleInput;
22
+ private handleKeyDown;
23
+ private setupDragAndDrop;
24
+ private handleDragEnter;
25
+ private handleDragOver;
26
+ private handleDragLeave;
27
+ private handleDrop;
28
+ private adjustTextareaHeight;
29
+ private sendMessage;
30
+ private handleFileUpload;
31
+ private attachFiles;
32
+ private updateAcceptedTypesCache;
33
+ private isFileTypeAccepted;
34
+ private removeAttachment;
35
+ protected render(): import("lit-html").TemplateResult<1>;
36
+ }
37
+ declare global {
38
+ interface HTMLElementTagNameMap {
39
+ 'igc-chat-input': IgcChatInputComponent;
40
+ }
41
+ }
@@ -0,0 +1,254 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { consume } from '@lit/context';
8
+ import { LitElement, html } from 'lit';
9
+ import { query, state } from 'lit/decorators.js';
10
+ import IgcIconButtonComponent from '../button/icon-button.js';
11
+ import IgcChipComponent from '../chip/chip.js';
12
+ import { chatContext } from '../common/context.js';
13
+ import { watch } from '../common/decorators/watch.js';
14
+ import { registerComponent } from '../common/definitions/register.js';
15
+ import IgcFileInputComponent from '../file-input/file-input.js';
16
+ import IgcIconComponent from '../icon/icon.js';
17
+ import { registerIconFromText } from '../icon/icon.registry.js';
18
+ import IgcTextareaComponent from '../textarea/textarea.js';
19
+ import { styles } from './themes/input.base.css.js';
20
+ import { attachmentIcon, sendButtonIcon, } from './types.js';
21
+ class IgcChatInputComponent extends LitElement {
22
+ static register() {
23
+ registerComponent(IgcChatInputComponent, IgcTextareaComponent, IgcIconButtonComponent, IgcChipComponent, IgcFileInputComponent, IgcIconComponent);
24
+ }
25
+ acceptedFilesChange() {
26
+ this.updateAcceptedTypesCache();
27
+ }
28
+ constructor() {
29
+ super();
30
+ this.inputValue = '';
31
+ this.attachments = [];
32
+ this.dragClass = '';
33
+ this._acceptedTypesCache = null;
34
+ registerIconFromText('attachment', attachmentIcon, 'material');
35
+ registerIconFromText('send-message', sendButtonIcon, 'material');
36
+ }
37
+ firstUpdated() {
38
+ this.setupDragAndDrop();
39
+ this.updateAcceptedTypesCache();
40
+ }
41
+ handleInput(e) {
42
+ const target = e.target;
43
+ this.inputValue = target.value;
44
+ this.adjustTextareaHeight();
45
+ }
46
+ handleKeyDown(e) {
47
+ if (e.key === 'Enter' && !e.shiftKey) {
48
+ e.preventDefault();
49
+ this.sendMessage();
50
+ }
51
+ }
52
+ setupDragAndDrop() {
53
+ const container = this.shadowRoot?.querySelector('.input-container');
54
+ if (container) {
55
+ container.addEventListener('dragenter', this.handleDragEnter.bind(this));
56
+ container.addEventListener('dragover', this.handleDragOver.bind(this));
57
+ container.addEventListener('dragleave', this.handleDragLeave.bind(this));
58
+ container.addEventListener('drop', this.handleDrop.bind(this));
59
+ }
60
+ }
61
+ handleDragEnter(e) {
62
+ e.preventDefault();
63
+ e.stopPropagation();
64
+ const files = Array.from(e.dataTransfer?.items || []).filter((item) => item.kind === 'file');
65
+ const hasValidFiles = files.some((item) => this.isFileTypeAccepted(item.getAsFile(), item.type));
66
+ this.dragClass = hasValidFiles ? 'dragging' : '';
67
+ }
68
+ handleDragOver(e) {
69
+ e.preventDefault();
70
+ e.stopPropagation();
71
+ }
72
+ handleDragLeave(e) {
73
+ e.preventDefault();
74
+ e.stopPropagation();
75
+ const rect = e.currentTarget.getBoundingClientRect();
76
+ const x = e.clientX;
77
+ const y = e.clientY;
78
+ if (x <= rect.left ||
79
+ x >= rect.right ||
80
+ y <= rect.top ||
81
+ y >= rect.bottom) {
82
+ this.dragClass = '';
83
+ }
84
+ }
85
+ handleDrop(e) {
86
+ e.preventDefault();
87
+ e.stopPropagation();
88
+ this.dragClass = '';
89
+ const files = Array.from(e.dataTransfer?.files || []);
90
+ if (files.length === 0)
91
+ return;
92
+ const validFiles = files.filter((file) => this.isFileTypeAccepted(file));
93
+ this.attachFiles(validFiles);
94
+ }
95
+ adjustTextareaHeight() {
96
+ const textarea = this.textInputElement;
97
+ if (!textarea)
98
+ return;
99
+ textarea.style.height = 'auto';
100
+ const newHeight = Math.min(textarea.scrollHeight, 120);
101
+ textarea.style.height = `${newHeight}px`;
102
+ }
103
+ sendMessage() {
104
+ if (!this.inputValue.trim() && this.attachments.length === 0)
105
+ return;
106
+ const messageEvent = new CustomEvent('message-created', {
107
+ detail: { text: this.inputValue, attachments: this.attachments },
108
+ });
109
+ this.dispatchEvent(messageEvent);
110
+ this.inputValue = '';
111
+ this.attachments = [];
112
+ if (this.textInputElement) {
113
+ this.textInputElement.style.height = 'auto';
114
+ }
115
+ setTimeout(() => {
116
+ this.textInputElement?.focus();
117
+ }, 0);
118
+ }
119
+ handleFileUpload(e) {
120
+ const input = e.target.input;
121
+ if (!input.files || input.files.length === 0)
122
+ return;
123
+ const files = Array.from(input.files);
124
+ this.attachFiles(files);
125
+ }
126
+ attachFiles(files) {
127
+ const newAttachments = [];
128
+ let count = this.attachments.length;
129
+ files.forEach((file) => {
130
+ const isImage = file.type.startsWith('image/');
131
+ newAttachments.push({
132
+ id: Date.now().toString() + count++,
133
+ url: URL.createObjectURL(file),
134
+ name: file.name,
135
+ file: file,
136
+ thumbnail: isImage ? URL.createObjectURL(file) : undefined,
137
+ });
138
+ });
139
+ this.attachments = [...this.attachments, ...newAttachments];
140
+ }
141
+ updateAcceptedTypesCache() {
142
+ if (!this._chat?.options?.acceptedFiles) {
143
+ this._acceptedTypesCache = null;
144
+ return;
145
+ }
146
+ const types = this._chat?.options?.acceptedFiles
147
+ .split(',')
148
+ .map((type) => type.trim().toLowerCase());
149
+ this._acceptedTypesCache = {
150
+ extensions: new Set(types.filter((t) => t.startsWith('.'))),
151
+ mimeTypes: new Set(types.filter((t) => !t.startsWith('.') && !t.endsWith('/*'))),
152
+ wildcardTypes: new Set(types.filter((t) => t.endsWith('/*')).map((t) => t.slice(0, -2))),
153
+ };
154
+ }
155
+ isFileTypeAccepted(file, type = '') {
156
+ if (!this._acceptedTypesCache)
157
+ return true;
158
+ if (file === null && type === '')
159
+ return false;
160
+ const fileType = file != null ? file.type.toLowerCase() : type.toLowerCase();
161
+ const fileExtension = file != null
162
+ ? `.${file.name.split('.').pop()?.toLowerCase()}`
163
+ : `.${type.split('/').pop()?.toLowerCase()}`;
164
+ if (this._acceptedTypesCache.extensions.has(fileExtension)) {
165
+ return true;
166
+ }
167
+ if (this._acceptedTypesCache.mimeTypes.has(fileType)) {
168
+ return true;
169
+ }
170
+ const [fileBaseType] = fileType.split('/');
171
+ return this._acceptedTypesCache.wildcardTypes.has(fileBaseType);
172
+ }
173
+ removeAttachment(index) {
174
+ this.attachments = this.attachments.filter((_, i) => i !== index);
175
+ }
176
+ render() {
177
+ return html `
178
+ <div class="input-container ${this.dragClass}">
179
+ ${this._chat?.options?.disableAttachments
180
+ ? ''
181
+ : html `
182
+ <igc-file-input
183
+ multiple
184
+ .accept=${this._chat?.options?.acceptedFiles}
185
+ @igcChange=${this.handleFileUpload}
186
+ >
187
+ <igc-icon
188
+ slot="file-selector-text"
189
+ name="attachment"
190
+ collection="material"
191
+ ></igc-icon>
192
+ </igc-file-input>
193
+ `}
194
+
195
+ <div class="input-wrapper">
196
+ <igc-textarea
197
+ class="text-input"
198
+ placeholder="Type a message..."
199
+ rows="1"
200
+ .value=${this.inputValue}
201
+ @input=${this.handleInput}
202
+ @keydown=${this.handleKeyDown}
203
+ ></igc-textarea>
204
+ </div>
205
+
206
+ <div class="buttons-container">
207
+ <igc-icon-button
208
+ name="send-message"
209
+ collection="material"
210
+ variant="contained"
211
+ class="small"
212
+ ?disabled=${!this.inputValue.trim() &&
213
+ this.attachments.length === 0}
214
+ @click=${this.sendMessage}
215
+ ></igc-icon-button>
216
+ </div>
217
+ </div>
218
+ <div>
219
+ ${this.attachments?.map((attachment, index) => html `
220
+ <div class="attachment-wrapper">
221
+ <igc-chip
222
+ removable
223
+ @igcRemove=${() => this.removeAttachment(index)}
224
+ >
225
+ <span class="attachment-name">${attachment.name}</span>
226
+ </igc-chip>
227
+ </div>
228
+ `)}
229
+ </div>
230
+ `;
231
+ }
232
+ }
233
+ IgcChatInputComponent.tagName = 'igc-chat-input';
234
+ IgcChatInputComponent.styles = styles;
235
+ export default IgcChatInputComponent;
236
+ __decorate([
237
+ consume({ context: chatContext, subscribe: true })
238
+ ], IgcChatInputComponent.prototype, "_chat", void 0);
239
+ __decorate([
240
+ query('textarea')
241
+ ], IgcChatInputComponent.prototype, "textInputElement", void 0);
242
+ __decorate([
243
+ watch('acceptedFiles', { waitUntilFirstUpdate: true })
244
+ ], IgcChatInputComponent.prototype, "acceptedFilesChange", null);
245
+ __decorate([
246
+ state()
247
+ ], IgcChatInputComponent.prototype, "inputValue", void 0);
248
+ __decorate([
249
+ state()
250
+ ], IgcChatInputComponent.prototype, "attachments", void 0);
251
+ __decorate([
252
+ state()
253
+ ], IgcChatInputComponent.prototype, "dragClass", void 0);
254
+ //# sourceMappingURL=chat-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-input.js","sourceRoot":"","sources":["../../../src/components/chat/chat-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { consume } from '@lit/context';\nimport { LitElement, html } from 'lit';\nimport { query, state } from 'lit/decorators.js';\nimport IgcIconButtonComponent from '../button/icon-button.js';\nimport IgcChipComponent from '../chip/chip.js';\nimport { chatContext } from '../common/context.js';\nimport { watch } from '../common/decorators/watch.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport IgcFileInputComponent from '../file-input/file-input.js';\nimport IgcIconComponent from '../icon/icon.js';\nimport { registerIconFromText } from '../icon/icon.registry.js';\nimport IgcTextareaComponent from '../textarea/textarea.js';\nimport type IgcChatComponent from './chat.js';\nimport { styles } from './themes/input.base.css.js';\nimport {\n type IgcMessageAttachment,\n attachmentIcon,\n sendButtonIcon,\n} from './types.js';\n\n/**\n *\n * @element igc-chat-input\n *\n */\nexport default class IgcChatInputComponent extends LitElement {\n /** @private */\n public static readonly tagName = 'igc-chat-input';\n\n public static override styles = styles;\n\n @consume({ context: chatContext, subscribe: true })\n private _chat?: IgcChatComponent;\n\n /* blazorSuppress */\n public static register() {\n registerComponent(\n IgcChatInputComponent,\n IgcTextareaComponent,\n IgcIconButtonComponent,\n IgcChipComponent,\n IgcFileInputComponent,\n IgcIconComponent\n );\n }\n\n @query('textarea')\n private textInputElement!: HTMLTextAreaElement;\n\n @watch('acceptedFiles', { waitUntilFirstUpdate: true })\n protected acceptedFilesChange(): void {\n this.updateAcceptedTypesCache();\n }\n\n @state()\n private inputValue = '';\n\n @state()\n private attachments: IgcMessageAttachment[] = [];\n\n @state()\n private dragClass = '';\n\n // Cache for accepted file types\n private _acceptedTypesCache: {\n extensions: Set<string>;\n mimeTypes: Set<string>;\n wildcardTypes: Set<string>;\n } | null = null;\n\n constructor() {\n super();\n registerIconFromText('attachment', attachmentIcon, 'material');\n registerIconFromText('send-message', sendButtonIcon, 'material');\n }\n\n protected override firstUpdated() {\n this.setupDragAndDrop();\n this.updateAcceptedTypesCache();\n }\n\n private handleInput(e: Event) {\n const target = e.target as HTMLTextAreaElement;\n this.inputValue = target.value;\n this.adjustTextareaHeight();\n }\n\n private handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n this.sendMessage();\n }\n }\n\n private setupDragAndDrop() {\n const container = this.shadowRoot?.querySelector(\n '.input-container'\n ) as HTMLElement;\n if (container) {\n container.addEventListener('dragenter', this.handleDragEnter.bind(this));\n container.addEventListener('dragover', this.handleDragOver.bind(this));\n container.addEventListener('dragleave', this.handleDragLeave.bind(this));\n container.addEventListener('drop', this.handleDrop.bind(this));\n }\n }\n\n private handleDragEnter(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n const files = Array.from(e.dataTransfer?.items || []).filter(\n (item) => item.kind === 'file'\n );\n const hasValidFiles = files.some((item) =>\n this.isFileTypeAccepted(item.getAsFile() as File, item.type)\n );\n\n this.dragClass = hasValidFiles ? 'dragging' : '';\n }\n\n private handleDragOver(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n private handleDragLeave(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n // Check if we're actually leaving the container\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n const x = e.clientX;\n const y = e.clientY;\n\n if (\n x <= rect.left ||\n x >= rect.right ||\n y <= rect.top ||\n y >= rect.bottom\n ) {\n this.dragClass = '';\n }\n }\n\n private handleDrop(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n this.dragClass = '';\n\n const files = Array.from(e.dataTransfer?.files || []);\n if (files.length === 0) return;\n\n const validFiles = files.filter((file) => this.isFileTypeAccepted(file));\n\n this.attachFiles(validFiles);\n }\n\n private adjustTextareaHeight() {\n const textarea = this.textInputElement;\n if (!textarea) return;\n\n textarea.style.height = 'auto';\n const newHeight = Math.min(textarea.scrollHeight, 120);\n textarea.style.height = `${newHeight}px`;\n }\n\n private sendMessage() {\n if (!this.inputValue.trim() && this.attachments.length === 0) return;\n\n const messageEvent = new CustomEvent('message-created', {\n detail: { text: this.inputValue, attachments: this.attachments },\n });\n\n this.dispatchEvent(messageEvent);\n this.inputValue = '';\n this.attachments = [];\n\n if (this.textInputElement) {\n this.textInputElement.style.height = 'auto';\n }\n\n setTimeout(() => {\n this.textInputElement?.focus();\n }, 0);\n }\n\n private handleFileUpload(e: Event) {\n const input = (e.target as any).input as HTMLInputElement;\n if (!input.files || input.files.length === 0) return;\n\n const files = Array.from(input.files);\n this.attachFiles(files);\n }\n\n private attachFiles(files: File[]) {\n const newAttachments: IgcMessageAttachment[] = [];\n let count = this.attachments.length;\n files.forEach((file) => {\n const isImage = file.type.startsWith('image/');\n newAttachments.push({\n id: Date.now().toString() + count++,\n // type: isImage ? 'image' : 'file',\n url: URL.createObjectURL(file),\n name: file.name,\n file: file,\n thumbnail: isImage ? URL.createObjectURL(file) : undefined,\n });\n });\n this.attachments = [...this.attachments, ...newAttachments];\n }\n\n private updateAcceptedTypesCache() {\n if (!this._chat?.options?.acceptedFiles) {\n this._acceptedTypesCache = null;\n return;\n }\n\n const types = this._chat?.options?.acceptedFiles\n .split(',')\n .map((type) => type.trim().toLowerCase());\n this._acceptedTypesCache = {\n extensions: new Set(types.filter((t) => t.startsWith('.'))),\n mimeTypes: new Set(\n types.filter((t) => !t.startsWith('.') && !t.endsWith('/*'))\n ),\n wildcardTypes: new Set(\n types.filter((t) => t.endsWith('/*')).map((t) => t.slice(0, -2))\n ),\n };\n }\n\n private isFileTypeAccepted(file: File, type = ''): boolean {\n if (!this._acceptedTypesCache) return true;\n\n if (file === null && type === '') return false;\n\n const fileType =\n file != null ? file.type.toLowerCase() : type.toLowerCase();\n const fileExtension =\n file != null\n ? `.${file.name.split('.').pop()?.toLowerCase()}`\n : `.${type.split('/').pop()?.toLowerCase()}`;\n\n // Check file extension\n if (this._acceptedTypesCache.extensions.has(fileExtension)) {\n return true;\n }\n\n // Check exact MIME type\n if (this._acceptedTypesCache.mimeTypes.has(fileType)) {\n return true;\n }\n\n // Check wildcard MIME types\n const [fileBaseType] = fileType.split('/');\n return this._acceptedTypesCache.wildcardTypes.has(fileBaseType);\n }\n\n private removeAttachment(index: number) {\n this.attachments = this.attachments.filter((_, i) => i !== index);\n }\n\n protected override render() {\n return html`\n <div class=\"input-container ${this.dragClass}\">\n ${this._chat?.options?.disableAttachments\n ? ''\n : html`\n <igc-file-input\n multiple\n .accept=${this._chat?.options?.acceptedFiles}\n @igcChange=${this.handleFileUpload}\n >\n <igc-icon\n slot=\"file-selector-text\"\n name=\"attachment\"\n collection=\"material\"\n ></igc-icon>\n </igc-file-input>\n `}\n\n <div class=\"input-wrapper\">\n <igc-textarea\n class=\"text-input\"\n placeholder=\"Type a message...\"\n rows=\"1\"\n .value=${this.inputValue}\n @input=${this.handleInput}\n @keydown=${this.handleKeyDown}\n ></igc-textarea>\n </div>\n\n <div class=\"buttons-container\">\n <igc-icon-button\n name=\"send-message\"\n collection=\"material\"\n variant=\"contained\"\n class=\"small\"\n ?disabled=${!this.inputValue.trim() &&\n this.attachments.length === 0}\n @click=${this.sendMessage}\n ></igc-icon-button>\n </div>\n </div>\n <div>\n ${this.attachments?.map(\n (attachment, index) => html`\n <div class=\"attachment-wrapper\">\n <igc-chip\n removable\n @igcRemove=${() => this.removeAttachment(index)}\n >\n <span class=\"attachment-name\">${attachment.name}</span>\n </igc-chip>\n </div>\n `\n )}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-chat-input': IgcChatInputComponent;\n }\n}\n"]}
@@ -0,0 +1,24 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ *
4
+ * @element igc-chat-message-list
5
+ *
6
+ */
7
+ export default class IgcChatMessageListComponent extends LitElement {
8
+ /** @private */
9
+ static readonly tagName = "igc-chat-message-list";
10
+ static styles: import("lit").CSSResult;
11
+ private _chat?;
12
+ static register(): void;
13
+ private formatDate;
14
+ private groupMessagesByDate;
15
+ private scrollToBottom;
16
+ protected updated(): void;
17
+ protected firstUpdated(): void;
18
+ protected render(): import("lit-html").TemplateResult<1>;
19
+ }
20
+ declare global {
21
+ interface HTMLElementTagNameMap {
22
+ 'igc-chat-message-list': IgcChatMessageListComponent;
23
+ }
24
+ }