igniteui-webcomponents 6.1.1-alpha.0 → 6.1.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 (247) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/components/avatar/avatar.d.ts +1 -0
  3. package/components/avatar/avatar.js +9 -12
  4. package/components/avatar/avatar.js.map +1 -1
  5. package/components/badge/badge.d.ts +1 -0
  6. package/components/badge/badge.js +9 -12
  7. package/components/badge/badge.js.map +1 -1
  8. package/components/banner/banner.js +6 -9
  9. package/components/banner/banner.js.map +1 -1
  10. package/components/button/button.d.ts +1 -0
  11. package/components/button/button.js +9 -12
  12. package/components/button/button.js.map +1 -1
  13. package/components/button/icon-button.d.ts +1 -0
  14. package/components/button/icon-button.js +9 -12
  15. package/components/button/icon-button.js.map +1 -1
  16. package/components/button-group/button-group.js +6 -9
  17. package/components/button-group/button-group.js.map +1 -1
  18. package/components/button-group/toggle-button.d.ts +1 -0
  19. package/components/button-group/toggle-button.js +6 -6
  20. package/components/button-group/toggle-button.js.map +1 -1
  21. package/components/calendar/calendar.js +6 -9
  22. package/components/calendar/calendar.js.map +1 -1
  23. package/components/calendar/days-view/days-view.js +3 -3
  24. package/components/calendar/days-view/days-view.js.map +1 -1
  25. package/components/calendar/months-view/months-view.js +3 -3
  26. package/components/calendar/months-view/months-view.js.map +1 -1
  27. package/components/calendar/years-view/years-view.js +3 -3
  28. package/components/calendar/years-view/years-view.js.map +1 -1
  29. package/components/card/card.actions.d.ts +1 -0
  30. package/components/card/card.actions.js +9 -12
  31. package/components/card/card.actions.js.map +1 -1
  32. package/components/card/card.content.d.ts +1 -0
  33. package/components/card/card.content.js +8 -14
  34. package/components/card/card.content.js.map +1 -1
  35. package/components/card/card.d.ts +1 -0
  36. package/components/card/card.header.d.ts +1 -0
  37. package/components/card/card.header.js +8 -14
  38. package/components/card/card.header.js.map +1 -1
  39. package/components/card/card.js +10 -13
  40. package/components/card/card.js.map +1 -1
  41. package/components/carousel/carousel-indicator-container.d.ts +1 -0
  42. package/components/carousel/carousel-indicator-container.js +8 -17
  43. package/components/carousel/carousel-indicator-container.js.map +1 -1
  44. package/components/carousel/carousel.js +7 -10
  45. package/components/carousel/carousel.js.map +1 -1
  46. package/components/checkbox/checkbox.d.ts +1 -1
  47. package/components/checkbox/checkbox.js +10 -14
  48. package/components/checkbox/checkbox.js.map +1 -1
  49. package/components/checkbox/switch.d.ts +1 -0
  50. package/components/checkbox/switch.js +9 -18
  51. package/components/checkbox/switch.js.map +1 -1
  52. package/components/chip/chip.js +6 -9
  53. package/components/chip/chip.js.map +1 -1
  54. package/components/combo/combo-header.d.ts +1 -0
  55. package/components/combo/combo-header.js +8 -14
  56. package/components/combo/combo-header.js.map +1 -1
  57. package/components/combo/combo-item.d.ts +1 -0
  58. package/components/combo/combo-item.js +9 -12
  59. package/components/combo/combo-item.js.map +1 -1
  60. package/components/combo/combo.js +2 -2
  61. package/components/combo/combo.js.map +1 -1
  62. package/components/common/context.d.ts +1 -5
  63. package/components/common/context.js +1 -2
  64. package/components/common/context.js.map +1 -1
  65. package/components/common/definitions/defineAllComponents.js +0 -2
  66. package/components/common/definitions/defineAllComponents.js.map +1 -1
  67. package/components/date-picker/date-picker.d.ts +1 -1
  68. package/components/date-picker/date-picker.js +7 -9
  69. package/components/date-picker/date-picker.js.map +1 -1
  70. package/components/date-range-picker/date-range-picker.d.ts +1 -1
  71. package/components/date-range-picker/date-range-picker.js +5 -7
  72. package/components/date-range-picker/date-range-picker.js.map +1 -1
  73. package/components/date-range-picker/predefined-ranges-area.d.ts +1 -0
  74. package/components/date-range-picker/predefined-ranges-area.js +9 -12
  75. package/components/date-range-picker/predefined-ranges-area.js.map +1 -1
  76. package/components/dialog/dialog.d.ts +1 -0
  77. package/components/dialog/dialog.js +12 -12
  78. package/components/dialog/dialog.js.map +1 -1
  79. package/components/divider/divider.d.ts +1 -0
  80. package/components/divider/divider.js +18 -21
  81. package/components/divider/divider.js.map +1 -1
  82. package/components/dropdown/dropdown-group.js +6 -9
  83. package/components/dropdown/dropdown-group.js.map +1 -1
  84. package/components/dropdown/dropdown-header.d.ts +1 -0
  85. package/components/dropdown/dropdown-header.js +8 -14
  86. package/components/dropdown/dropdown-header.js.map +1 -1
  87. package/components/dropdown/dropdown-item.d.ts +1 -0
  88. package/components/dropdown/dropdown-item.js +8 -14
  89. package/components/dropdown/dropdown-item.js.map +1 -1
  90. package/components/dropdown/dropdown.js +2 -2
  91. package/components/dropdown/dropdown.js.map +1 -1
  92. package/components/dropdown/themes/item.js +7 -0
  93. package/components/dropdown/themes/item.js.map +1 -1
  94. package/components/dropdown/themes/shared/item/dropdown-item.bootstrap.css.js +3 -0
  95. package/components/dropdown/themes/shared/item/dropdown-item.bootstrap.css.js.map +1 -0
  96. package/components/expansion-panel/expansion-panel.js +7 -10
  97. package/components/expansion-panel/expansion-panel.js.map +1 -1
  98. package/components/file-input/file-input.d.ts +1 -1
  99. package/components/file-input/file-input.js +18 -21
  100. package/components/file-input/file-input.js.map +1 -1
  101. package/components/file-input/themes/shared/file-input.material.css.js +1 -1
  102. package/components/file-input/themes/shared/file-input.material.css.js.map +1 -1
  103. package/components/icon/icon.d.ts +1 -0
  104. package/components/icon/icon.js +11 -10
  105. package/components/icon/icon.js.map +1 -1
  106. package/components/input/input-base.d.ts +1 -1
  107. package/components/input/input-base.js +5 -6
  108. package/components/input/input-base.js.map +1 -1
  109. package/components/input/themes/shared/input.material.css.js +1 -1
  110. package/components/input/themes/shared/input.material.css.js.map +1 -1
  111. package/components/list/list-header.js +5 -14
  112. package/components/list/list-header.js.map +1 -1
  113. package/components/list/list-item.js +6 -9
  114. package/components/list/list-item.js.map +1 -1
  115. package/components/list/list.js +5 -14
  116. package/components/list/list.js.map +1 -1
  117. package/components/nav-drawer/nav-drawer-header-item.d.ts +1 -0
  118. package/components/nav-drawer/nav-drawer-header-item.js +8 -14
  119. package/components/nav-drawer/nav-drawer-header-item.js.map +1 -1
  120. package/components/nav-drawer/nav-drawer-item.d.ts +1 -0
  121. package/components/nav-drawer/nav-drawer-item.js +9 -12
  122. package/components/nav-drawer/nav-drawer-item.js.map +1 -1
  123. package/components/nav-drawer/nav-drawer.d.ts +1 -0
  124. package/components/nav-drawer/nav-drawer.js +9 -12
  125. package/components/nav-drawer/nav-drawer.js.map +1 -1
  126. package/components/navbar/navbar.d.ts +1 -0
  127. package/components/navbar/navbar.js +8 -14
  128. package/components/navbar/navbar.js.map +1 -1
  129. package/components/progress/circular-progress.d.ts +1 -0
  130. package/components/progress/circular-progress.js +10 -13
  131. package/components/progress/circular-progress.js.map +1 -1
  132. package/components/progress/linear-progress.d.ts +1 -0
  133. package/components/progress/linear-progress.js +9 -12
  134. package/components/progress/linear-progress.js.map +1 -1
  135. package/components/radio/radio.js +7 -10
  136. package/components/radio/radio.js.map +1 -1
  137. package/components/radio-group/radio-group.js +6 -9
  138. package/components/radio-group/radio-group.js.map +1 -1
  139. package/components/rating/rating.js +6 -9
  140. package/components/rating/rating.js.map +1 -1
  141. package/components/resize-container/resize-container.js +6 -9
  142. package/components/resize-container/resize-container.js.map +1 -1
  143. package/components/select/select-group.js +6 -9
  144. package/components/select/select-group.js.map +1 -1
  145. package/components/select/select-header.d.ts +1 -0
  146. package/components/select/select-header.js +8 -14
  147. package/components/select/select-header.js.map +1 -1
  148. package/components/select/select-item.d.ts +1 -0
  149. package/components/select/select-item.js +9 -9
  150. package/components/select/select-item.js.map +1 -1
  151. package/components/select/select.js +2 -2
  152. package/components/select/select.js.map +1 -1
  153. package/components/slider/slider-base.js +2 -2
  154. package/components/slider/slider-base.js.map +1 -1
  155. package/components/snackbar/snackbar.d.ts +1 -0
  156. package/components/snackbar/snackbar.js +9 -12
  157. package/components/snackbar/snackbar.js.map +1 -1
  158. package/components/stepper/step.d.ts +1 -0
  159. package/components/stepper/step.js +9 -12
  160. package/components/stepper/step.js.map +1 -1
  161. package/components/stepper/stepper.js +9 -12
  162. package/components/stepper/stepper.js.map +1 -1
  163. package/components/tabs/tab.d.ts +1 -0
  164. package/components/tabs/tab.js +10 -13
  165. package/components/tabs/tab.js.map +1 -1
  166. package/components/tabs/tabs.js +6 -9
  167. package/components/tabs/tabs.js.map +1 -1
  168. package/components/textarea/textarea.d.ts +1 -1
  169. package/components/textarea/textarea.js +5 -6
  170. package/components/textarea/textarea.js.map +1 -1
  171. package/components/tile-manager/tile-manager.js +2 -2
  172. package/components/tile-manager/tile-manager.js.map +1 -1
  173. package/components/tile-manager/tile.d.ts +1 -0
  174. package/components/tile-manager/tile.js +53 -56
  175. package/components/tile-manager/tile.js.map +1 -1
  176. package/components/toast/toast.d.ts +1 -0
  177. package/components/toast/toast.js +8 -17
  178. package/components/toast/toast.js.map +1 -1
  179. package/components/tooltip/tooltip.d.ts +1 -0
  180. package/components/tooltip/tooltip.js +39 -42
  181. package/components/tooltip/tooltip.js.map +1 -1
  182. package/components/tree/tree-item.js +6 -9
  183. package/components/tree/tree-item.js.map +1 -1
  184. package/components/tree/tree.js +2 -2
  185. package/components/tree/tree.js.map +1 -1
  186. package/components/validation-container/validation-container.d.ts +1 -0
  187. package/components/validation-container/validation-container.js +12 -15
  188. package/components/validation-container/validation-container.js.map +1 -1
  189. package/custom-elements.json +20458 -21385
  190. package/igniteui-webcomponents.css-data.json +1 -1
  191. package/igniteui-webcomponents.html-data.json +1 -1
  192. package/index.d.ts +0 -7
  193. package/index.js +0 -5
  194. package/index.js.map +1 -1
  195. package/package.json +1 -1
  196. package/theming/config.d.ts +3 -3
  197. package/theming/config.js +14 -18
  198. package/theming/config.js.map +1 -1
  199. package/theming/theming-controller.d.ts +17 -13
  200. package/theming/theming-controller.js +28 -22
  201. package/theming/theming-controller.js.map +1 -1
  202. package/theming/theming-event.d.ts +1 -0
  203. package/theming/theming-event.js.map +1 -1
  204. package/theming/types.d.ts +3 -14
  205. package/theming/types.js.map +1 -1
  206. package/theming/utils.js +24 -23
  207. package/theming/utils.js.map +1 -1
  208. package/web-types.json +2 -2
  209. package/components/chat/chat-input.d.ts +0 -41
  210. package/components/chat/chat-input.js +0 -254
  211. package/components/chat/chat-input.js.map +0 -1
  212. package/components/chat/chat-message-list.d.ts +0 -24
  213. package/components/chat/chat-message-list.js +0 -88
  214. package/components/chat/chat-message-list.js.map +0 -1
  215. package/components/chat/chat-message.d.ts +0 -21
  216. package/components/chat/chat-message.js +0 -52
  217. package/components/chat/chat-message.js.map +0 -1
  218. package/components/chat/chat.d.ts +0 -41
  219. package/components/chat/chat.js +0 -98
  220. package/components/chat/chat.js.map +0 -1
  221. package/components/chat/markdown-util.d.ts +0 -2
  222. package/components/chat/markdown-util.js +0 -22
  223. package/components/chat/markdown-util.js.map +0 -1
  224. package/components/chat/message-attachments.d.ts +0 -28
  225. package/components/chat/message-attachments.js +0 -168
  226. package/components/chat/message-attachments.js.map +0 -1
  227. package/components/chat/themes/chat.base.css.js +0 -3
  228. package/components/chat/themes/chat.base.css.js.map +0 -1
  229. package/components/chat/themes/input.base.css.d.ts +0 -1
  230. package/components/chat/themes/input.base.css.js +0 -3
  231. package/components/chat/themes/input.base.css.js.map +0 -1
  232. package/components/chat/themes/message-attachments.base.css.d.ts +0 -1
  233. package/components/chat/themes/message-attachments.base.css.js +0 -3
  234. package/components/chat/themes/message-attachments.base.css.js.map +0 -1
  235. package/components/chat/themes/message-list.base.css.d.ts +0 -1
  236. package/components/chat/themes/message-list.base.css.js +0 -3
  237. package/components/chat/themes/message-list.base.css.js.map +0 -1
  238. package/components/chat/themes/message.base.css.d.ts +0 -1
  239. package/components/chat/themes/message.base.css.js +0 -3
  240. package/components/chat/themes/message.base.css.js.map +0 -1
  241. package/components/chat/types.d.ts +0 -46
  242. package/components/chat/types.js +0 -8
  243. package/components/chat/types.js.map +0 -1
  244. package/theming/theming-decorator.d.ts +0 -43
  245. package/theming/theming-decorator.js +0 -25
  246. package/theming/theming-decorator.js.map +0 -1
  247. /package/components/{chat/themes/chat.base.css.d.ts → dropdown/themes/shared/item/dropdown-item.bootstrap.css.d.ts} +0 -0
@@ -1,41 +0,0 @@
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
- }
@@ -1,254 +0,0 @@
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
@@ -1 +0,0 @@
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"]}
@@ -1,24 +0,0 @@
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
- }
@@ -1,88 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import { consume } from '@lit/context';
8
- import { LitElement, html } from 'lit';
9
- import { repeat } from 'lit/directives/repeat.js';
10
- import { chatContext } from '../common/context.js';
11
- import { registerComponent } from '../common/definitions/register.js';
12
- import IgcChatMessageComponent from './chat-message.js';
13
- import { styles } from './themes/message-list.base.css.js';
14
- class IgcChatMessageListComponent extends LitElement {
15
- static register() {
16
- registerComponent(IgcChatMessageListComponent, IgcChatMessageComponent);
17
- }
18
- formatDate(date) {
19
- const today = new Date();
20
- const yesterday = new Date(today);
21
- yesterday.setDate(yesterday.getDate() - 1);
22
- if (date.toDateString() === today.toDateString()) {
23
- return 'Today';
24
- }
25
- if (date.toDateString() === yesterday.toDateString()) {
26
- return 'Yesterday';
27
- }
28
- return date.toLocaleDateString('en-US', {
29
- weekday: 'long',
30
- month: 'short',
31
- day: 'numeric',
32
- });
33
- }
34
- groupMessagesByDate(messages) {
35
- const grouped = {};
36
- messages.forEach((message) => {
37
- const dateStr = this.formatDate(message.timestamp);
38
- if (!grouped[dateStr]) {
39
- grouped[dateStr] = [];
40
- }
41
- grouped[dateStr].push(message);
42
- });
43
- return Object.keys(grouped).map((date) => ({
44
- date,
45
- messages: grouped[date],
46
- }));
47
- }
48
- scrollToBottom() {
49
- requestAnimationFrame(() => {
50
- const container = this.shadowRoot?.host;
51
- if (container) {
52
- container.scrollTop = container.scrollHeight;
53
- }
54
- });
55
- }
56
- updated() {
57
- if (!this._chat?.options?.disableAutoScroll) {
58
- this.scrollToBottom();
59
- }
60
- }
61
- firstUpdated() {
62
- if (!this._chat?.options?.disableAutoScroll) {
63
- this.scrollToBottom();
64
- }
65
- }
66
- render() {
67
- const groupedMessages = this.groupMessagesByDate(this._chat?.messages ?? []);
68
- return html `
69
- <div class='message-container'></div>
70
- <div class="message-list">
71
- ${repeat(groupedMessages, (group) => group.date, (group) => html `
72
- ${repeat(group.messages, (message) => message.id, (message) => html `
73
- <igc-chat-message .message=${message}></igc-chat-message>
74
- `)}
75
- `)}
76
- ${''}
77
- </div>
78
- </div>
79
- `;
80
- }
81
- }
82
- IgcChatMessageListComponent.tagName = 'igc-chat-message-list';
83
- IgcChatMessageListComponent.styles = styles;
84
- export default IgcChatMessageListComponent;
85
- __decorate([
86
- consume({ context: chatContext, subscribe: true })
87
- ], IgcChatMessageListComponent.prototype, "_chat", void 0);
88
- //# sourceMappingURL=chat-message-list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chat-message-list.js","sourceRoot":"","sources":["../../../src/components/chat/chat-message-list.ts"],"names":[],"mappings":"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","sourcesContent":["import { consume } from '@lit/context';\nimport { LitElement, html } from 'lit';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { chatContext } from '../common/context.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport IgcChatMessageComponent from './chat-message.js';\nimport type IgcChatComponent from './chat.js';\nimport { styles } from './themes/message-list.base.css.js';\nimport type { IgcMessage } from './types.js';\n\n/**\n *\n * @element igc-chat-message-list\n *\n */\nexport default class IgcChatMessageListComponent extends LitElement {\n /** @private */\n public static readonly tagName = 'igc-chat-message-list';\n\n public static override styles = styles;\n\n @consume({ context: chatContext, subscribe: true })\n private _chat?: IgcChatComponent;\n\n /* blazorSuppress */\n public static register() {\n registerComponent(IgcChatMessageListComponent, IgcChatMessageComponent);\n }\n\n private formatDate(date: Date): string {\n const today = new Date();\n const yesterday = new Date(today);\n yesterday.setDate(yesterday.getDate() - 1);\n\n if (date.toDateString() === today.toDateString()) {\n return 'Today';\n }\n\n if (date.toDateString() === yesterday.toDateString()) {\n return 'Yesterday';\n }\n\n return date.toLocaleDateString('en-US', {\n weekday: 'long',\n month: 'short',\n day: 'numeric',\n });\n }\n\n private groupMessagesByDate(\n messages: IgcMessage[]\n ): { date: string; messages: IgcMessage[] }[] {\n const grouped: { [key: string]: IgcMessage[] } = {};\n\n messages.forEach((message) => {\n const dateStr = this.formatDate(message.timestamp);\n if (!grouped[dateStr]) {\n grouped[dateStr] = [];\n }\n grouped[dateStr].push(message);\n });\n\n return Object.keys(grouped).map((date) => ({\n date,\n messages: grouped[date],\n }));\n }\n\n private scrollToBottom() {\n requestAnimationFrame(() => {\n const container = this.shadowRoot?.host as HTMLElement;\n if (container) {\n container.scrollTop = container.scrollHeight;\n }\n });\n }\n\n protected override updated() {\n if (!this._chat?.options?.disableAutoScroll) {\n this.scrollToBottom();\n }\n }\n\n protected override firstUpdated() {\n if (!this._chat?.options?.disableAutoScroll) {\n this.scrollToBottom();\n }\n }\n\n protected override render() {\n const groupedMessages = this.groupMessagesByDate(\n this._chat?.messages ?? []\n );\n\n return html`\n <div class='message-container'></div>\n <div class=\"message-list\">\n ${repeat(\n groupedMessages,\n (group) => group.date,\n (group) => html`\n ${repeat(\n group.messages,\n (message) => message.id,\n (message) => html`\n <igc-chat-message .message=${message}></igc-chat-message>\n `\n )}\n `\n )}\n ${\n ''\n // this.isAiResponding\n // ? html`\n // <div class=\"typing-indicator\">\n // <div class=\"typing-dot\"></div>\n // <div class=\"typing-dot\"></div>\n // <div class=\"typing-dot\"></div>\n // </div>\n // `\n // : ''\n }\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-chat-message-list': IgcChatMessageListComponent;\n }\n}\n"]}
@@ -1,21 +0,0 @@
1
- import { LitElement } from 'lit';
2
- import type { IgcMessage } from './types.js';
3
- /**
4
- *
5
- * @element igc-chat-message
6
- *
7
- */
8
- export default class IgcChatMessageComponent extends LitElement {
9
- /** @private */
10
- static readonly tagName = "igc-chat-message";
11
- static styles: import("lit").CSSResult;
12
- private _chat?;
13
- static register(): void;
14
- message: IgcMessage | undefined;
15
- protected render(): import("lit-html").TemplateResult<1>;
16
- }
17
- declare global {
18
- interface HTMLElementTagNameMap {
19
- 'igc-chat-message': IgcChatMessageComponent;
20
- }
21
- }
@@ -1,52 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import { consume } from '@lit/context';
8
- import { LitElement, html } from 'lit';
9
- import { property } from 'lit/decorators.js';
10
- import IgcAvatarComponent from '../avatar/avatar.js';
11
- import { chatContext } from '../common/context.js';
12
- import { registerComponent } from '../common/definitions/register.js';
13
- import { renderMarkdown } from './markdown-util.js';
14
- import IgcMessageAttachmentsComponent from './message-attachments.js';
15
- import { styles } from './themes/message.base.css.js';
16
- class IgcChatMessageComponent extends LitElement {
17
- static register() {
18
- registerComponent(IgcChatMessageComponent, IgcMessageAttachmentsComponent, IgcAvatarComponent);
19
- }
20
- render() {
21
- const containerClass = `message-container ${this.message?.sender === 'user' ? 'sent' : ''}`;
22
- return html `
23
- <div class=${containerClass}>
24
- <div class="bubble">
25
- ${this.message?.text.trim()
26
- ? html ` <div>${renderMarkdown(this.message?.text)}</div>`
27
- : ''}
28
- ${this.message?.attachments && this.message?.attachments.length > 0
29
- ? html `<igc-message-attachments
30
- .attachments=${this.message?.attachments}
31
- >
32
- </igc-message-attachments>`
33
- : ''}
34
- ${this._chat?.options?.templates?.messageActionsTemplate &&
35
- this.message
36
- ? this._chat.options.templates.messageActionsTemplate(this.message)
37
- : ''}
38
- </div>
39
- </div>
40
- `;
41
- }
42
- }
43
- IgcChatMessageComponent.tagName = 'igc-chat-message';
44
- IgcChatMessageComponent.styles = styles;
45
- export default IgcChatMessageComponent;
46
- __decorate([
47
- consume({ context: chatContext, subscribe: true })
48
- ], IgcChatMessageComponent.prototype, "_chat", void 0);
49
- __decorate([
50
- property({ reflect: true, attribute: false })
51
- ], IgcChatMessageComponent.prototype, "message", void 0);
52
- //# sourceMappingURL=chat-message.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chat-message.js","sourceRoot":"","sources":["../../../src/components/chat/chat-message.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,kBAAkB,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,8BAA8B,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAQtD,MAAqB,uBAAwB,SAAQ,UAAU;IAUtD,MAAM,CAAC,QAAQ;QACpB,iBAAiB,CACf,uBAAuB,EACvB,8BAA8B,EAC9B,kBAAkB,CACnB,CAAC;IACJ,CAAC;IAKkB,MAAM;QACvB,MAAM,cAAc,GAAG,qBAAqB,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAE5F,OAAO,IAAI,CAAA;mBACI,cAAc;;YAErB,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;YACzB,CAAC,CAAC,IAAI,CAAA,SAAS,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ;YACzD,CAAC,CAAC,EAAE;YACJ,IAAI,CAAC,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC;YACjE,CAAC,CAAC,IAAI,CAAA;+BACa,IAAI,CAAC,OAAO,EAAE,WAAW;;yCAEf;YAC7B,CAAC,CAAC,EAAE;YACJ,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,sBAAsB;YACxD,IAAI,CAAC,OAAO;YACV,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC;YACnE,CAAC,CAAC,EAAE;;;KAGX,CAAC;IACJ,CAAC;;AAzCsB,+BAAO,GAAG,kBAAkB,CAAC;AAE7B,8BAAM,GAAG,MAAM,CAAC;eAJpB,uBAAuB;AAOlC;IADP,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;sDAClB;AAY1B;IADN,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;wDACP","sourcesContent":["import { consume } from '@lit/context';\nimport { LitElement, html } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport IgcAvatarComponent from '../avatar/avatar.js';\nimport { chatContext } from '../common/context.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport type IgcChatComponent from './chat.js';\nimport { renderMarkdown } from './markdown-util.js';\nimport IgcMessageAttachmentsComponent from './message-attachments.js';\nimport { styles } from './themes/message.base.css.js';\nimport type { IgcMessage } from './types.js';\n\n/**\n *\n * @element igc-chat-message\n *\n */\nexport default class IgcChatMessageComponent extends LitElement {\n /** @private */\n public static readonly tagName = 'igc-chat-message';\n\n public static override styles = styles;\n\n @consume({ context: chatContext, subscribe: true })\n private _chat?: IgcChatComponent;\n\n /* blazorSuppress */\n public static register() {\n registerComponent(\n IgcChatMessageComponent,\n IgcMessageAttachmentsComponent,\n IgcAvatarComponent\n );\n }\n\n @property({ reflect: true, attribute: false })\n public message: IgcMessage | undefined;\n\n protected override render() {\n const containerClass = `message-container ${this.message?.sender === 'user' ? 'sent' : ''}`;\n\n return html`\n <div class=${containerClass}>\n <div class=\"bubble\">\n ${this.message?.text.trim()\n ? html` <div>${renderMarkdown(this.message?.text)}</div>`\n : ''}\n ${this.message?.attachments && this.message?.attachments.length > 0\n ? html`<igc-message-attachments\n .attachments=${this.message?.attachments}\n >\n </igc-message-attachments>`\n : ''}\n ${this._chat?.options?.templates?.messageActionsTemplate &&\n this.message\n ? this._chat.options.templates.messageActionsTemplate(this.message)\n : ''}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-chat-message': IgcChatMessageComponent;\n }\n}\n"]}
@@ -1,41 +0,0 @@
1
- import { LitElement } from 'lit';
2
- import type { Constructor } from '../common/mixins/constructor.js';
3
- import type { IgcChatOptions, IgcMessage, IgcMessageAttachment } from './types.js';
4
- export interface IgcChatComponentEventMap {
5
- igcMessageCreated: CustomEvent<IgcMessage>;
6
- igcAttachmentClick: CustomEvent<IgcMessageAttachment>;
7
- igcAttachmentChange: CustomEvent<IgcMessageAttachment>;
8
- igcTypingChange: CustomEvent<boolean>;
9
- igcInputFocus: CustomEvent<void>;
10
- igcInputBlur: CustomEvent<void>;
11
- igcInputChange: CustomEvent<string>;
12
- igcMessageCopied: CustomEvent<IgcMessage>;
13
- }
14
- declare const IgcChatComponent_base: Constructor<import("../common/mixins/event-emitter.js").EventEmitterInterface<IgcChatComponentEventMap>> & Constructor<LitElement>;
15
- /**
16
- *
17
- * @element igc-chat
18
- *
19
- */
20
- export default class IgcChatComponent extends IgcChatComponent_base {
21
- /** @private */
22
- static readonly tagName = "igc-chat";
23
- static styles: import("lit").CSSResult;
24
- static register(): void;
25
- private _context;
26
- messages: IgcMessage[];
27
- options?: IgcChatOptions;
28
- protected contextChanged(): void;
29
- connectedCallback(): void;
30
- disconnectedCallback(): void;
31
- private handleSendMessage;
32
- private handleAttachmentClick;
33
- protected firstUpdated(): void;
34
- protected render(): import("lit-html").TemplateResult<1>;
35
- }
36
- declare global {
37
- interface HTMLElementTagNameMap {
38
- 'igc-chat': IgcChatComponent;
39
- }
40
- }
41
- export {};