@mckit/chat 20.0.4 → 20.0.5

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.
@@ -39,6 +39,7 @@ class MCMessageChat {
39
39
 
40
40
  class MCConversation {
41
41
  id;
42
+ title;
42
43
  messages = [];
43
44
  user;
44
45
  }
@@ -47,6 +48,8 @@ var MCEventChatType;
47
48
  (function (MCEventChatType) {
48
49
  MCEventChatType["TYPING"] = "typing";
49
50
  MCEventChatType["SEND_MESSAGE"] = "send_message";
51
+ MCEventChatType["NEW_CHAT"] = "new_chat";
52
+ MCEventChatType["CLICK_CHAT"] = "click_chat";
50
53
  })(MCEventChatType || (MCEventChatType = {}));
51
54
  class MCEventChat {
52
55
  type;
@@ -236,6 +239,43 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
236
239
  args: [{ selector: 'mc-conversation', imports: [CommonModule, MCUserHeaderChatComponent, MCWritingComponent], template: "<div\n class=\"flex flex-col h-full bg-white dark:bg-gray-900 rounded-lg overflow-hidden border border-gray-200 dark:border-gray-700\">\n <!-- Header -->\n @if (conversation() && conversation()!.user) {\n <mc-user-header-chat [user]=\"conversation()!.user!\" />\n }\n\n <!-- Messages Body -->\n <div class=\"flex-1 overflow-y-auto p-4 space-y-4 bg-gray-50 dark:bg-gray-900\">\n <!-- Message Item -->\n @for (msg of conversation().messages; track $index) {\n <div class=\"mb-3\">\n <ng-container *ngComponentOutlet=\"getComponent(msg.type); inputs: { message: msg }\"></ng-container>\n </div>\n }\n </div>\n\n <!-- Footer / Input Area -->\n <mc-writing-conversation />\n\n</div>" }]
237
240
  }] });
238
241
 
242
+ class MCHistoryConversationComponent {
243
+ conversations = input([], ...(ngDevMode ? [{ debugName: "conversations" }] : []));
244
+ chatService = inject(MCChatService);
245
+ getInitials(conversation) {
246
+ if (conversation.user) {
247
+ const initials = ((conversation.user.firstname?.charAt(0) ?? '') + (conversation.user.lastname?.charAt(0) ?? '')).toUpperCase();
248
+ return initials ? initials : 'U';
249
+ }
250
+ return 'C';
251
+ }
252
+ getTitle(conversation) {
253
+ if (conversation.title)
254
+ return conversation.title;
255
+ if (conversation.user)
256
+ return `${conversation.user.firstname} ${conversation.user.lastname}`.trim();
257
+ return 'Conversation';
258
+ }
259
+ onSelect(conversation) {
260
+ this.chatService.sendEvent({
261
+ type: MCEventChatType.CLICK_CHAT,
262
+ data: conversation
263
+ });
264
+ }
265
+ onNew() {
266
+ this.chatService.sendEvent({
267
+ type: MCEventChatType.NEW_CHAT,
268
+ data: {}
269
+ });
270
+ }
271
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MCHistoryConversationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
272
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: MCHistoryConversationComponent, isStandalone: true, selector: "mc-history-conversation", inputs: { conversations: { classPropertyName: "conversations", publicName: "conversations", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex flex-col h-full bg-white dark:bg-gray-900 border-r border-gray-200 dark:border-gray-700\">\n <div class=\"p-4 border-b border-gray-200 dark:border-gray-700 flex justify-between items-center\">\n <h2 class=\"text-xl font-semibold text-gray-800 dark:text-white\">Chats</h2>\n <p-button icon=\"pi pi-plus\" (onClick)=\"onNew()\" styleClass=\"p-button-rounded p-button-text\"></p-button>\n </div>\n\n <div class=\"flex-1 overflow-y-auto\">\n @for (conversation of conversations(); track conversation.id) {\n <div class=\"flex items-center p-4 hover:bg-gray-50 dark:hover:bg-gray-800 cursor-pointer transition-colors border-b border-gray-100 dark:border-gray-800 last:border-0\"\n (click)=\"onSelect(conversation)\">\n\n <div class=\"relative\">\n @if (conversation.user?.photo) {\n <p-avatar [image]=\"conversation.user!.photo\" shape=\"circle\" size=\"large\" styleClass=\"mr-3\" />\n } @else {\n <p-avatar [label]=\"getInitials(conversation)\" shape=\"circle\" size=\"large\" styleClass=\"mr-3\" />\n }\n\n @if (conversation.user?.online) {\n <span\n class=\"absolute bottom-0 right-3 w-3 h-3 bg-green-500 border-2 border-white dark:border-gray-900 rounded-full\"></span>\n }\n </div>\n\n <div class=\"flex-1 min-w-0\">\n <div class=\"flex justify-between items-baseline mb-1\">\n <h3 class=\"text-sm font-semibold text-gray-900 dark:text-white truncate\">\n {{ getTitle(conversation) }}\n </h3>\n @if (conversation.messages.length > 0) {\n <span class=\"text-xs text-gray-500 dark:text-gray-400\">\n {{ conversation.messages[conversation.messages.length - 1].createdAt | date:'shortTime' }}\n </span>\n }\n </div>\n <p class=\"text-sm text-gray-500 dark:text-gray-400 truncate\">\n @if (conversation.messages.length > 0) {\n {{ conversation.messages[conversation.messages.length - 1].content }}\n } @else {\n <span class=\"italic\">No messages yet</span>\n }\n </p>\n </div>\n </div>\n }\n </div>\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i1$2.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2$1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
273
+ }
274
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: MCHistoryConversationComponent, decorators: [{
275
+ type: Component,
276
+ args: [{ selector: 'mc-history-conversation', imports: [CommonModule, AvatarModule, ButtonModule], template: "<div class=\"flex flex-col h-full bg-white dark:bg-gray-900 border-r border-gray-200 dark:border-gray-700\">\n <div class=\"p-4 border-b border-gray-200 dark:border-gray-700 flex justify-between items-center\">\n <h2 class=\"text-xl font-semibold text-gray-800 dark:text-white\">Chats</h2>\n <p-button icon=\"pi pi-plus\" (onClick)=\"onNew()\" styleClass=\"p-button-rounded p-button-text\"></p-button>\n </div>\n\n <div class=\"flex-1 overflow-y-auto\">\n @for (conversation of conversations(); track conversation.id) {\n <div class=\"flex items-center p-4 hover:bg-gray-50 dark:hover:bg-gray-800 cursor-pointer transition-colors border-b border-gray-100 dark:border-gray-800 last:border-0\"\n (click)=\"onSelect(conversation)\">\n\n <div class=\"relative\">\n @if (conversation.user?.photo) {\n <p-avatar [image]=\"conversation.user!.photo\" shape=\"circle\" size=\"large\" styleClass=\"mr-3\" />\n } @else {\n <p-avatar [label]=\"getInitials(conversation)\" shape=\"circle\" size=\"large\" styleClass=\"mr-3\" />\n }\n\n @if (conversation.user?.online) {\n <span\n class=\"absolute bottom-0 right-3 w-3 h-3 bg-green-500 border-2 border-white dark:border-gray-900 rounded-full\"></span>\n }\n </div>\n\n <div class=\"flex-1 min-w-0\">\n <div class=\"flex justify-between items-baseline mb-1\">\n <h3 class=\"text-sm font-semibold text-gray-900 dark:text-white truncate\">\n {{ getTitle(conversation) }}\n </h3>\n @if (conversation.messages.length > 0) {\n <span class=\"text-xs text-gray-500 dark:text-gray-400\">\n {{ conversation.messages[conversation.messages.length - 1].createdAt | date:'shortTime' }}\n </span>\n }\n </div>\n <p class=\"text-sm text-gray-500 dark:text-gray-400 truncate\">\n @if (conversation.messages.length > 0) {\n {{ conversation.messages[conversation.messages.length - 1].content }}\n } @else {\n <span class=\"italic\">No messages yet</span>\n }\n </p>\n </div>\n </div>\n }\n </div>\n</div>" }]
277
+ }] });
278
+
239
279
  /*
240
280
  * Public API Surface of chat
241
281
  */
@@ -247,5 +287,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
247
287
  * Generated bundle index. Do not edit.
248
288
  */
249
289
 
250
- export { MCBaseMessageComponent, MCChatEmptyComponent, MCChatService, MCConversation, MCConversationComponent, MCEventChat, MCEventChatType, MCMessageAudioComponent, MCMessageChat, MCMessageChatSide, MCMessageChatType, MCMessageFileComponent, MCMessageImageComponent, MCMessageTextComponent, MCMessageVideoComponent, MCThinkingComponent, MCUserChat, MCUserHeaderChatComponent, MCWritingComponent };
290
+ export { MCBaseMessageComponent, MCChatEmptyComponent, MCChatService, MCConversation, MCConversationComponent, MCEventChat, MCEventChatType, MCHistoryConversationComponent, MCMessageAudioComponent, MCMessageChat, MCMessageChatSide, MCMessageChatType, MCMessageFileComponent, MCMessageImageComponent, MCMessageTextComponent, MCMessageVideoComponent, MCThinkingComponent, MCUserChat, MCUserHeaderChatComponent, MCWritingComponent };
251
291
  //# sourceMappingURL=mckit-chat.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"mckit-chat.mjs","sources":["../../../../projects/mckit/chat/src/lib/entities/message.ts","../../../../projects/mckit/chat/src/lib/entities/conversation.ts","../../../../projects/mckit/chat/src/lib/entities/event.ts","../../../../projects/mckit/chat/src/lib/entities/user.ts","../../../../projects/mckit/chat/src/lib/messages/base-message.component.ts","../../../../projects/mckit/chat/src/lib/messages/text/text.component.ts","../../../../projects/mckit/chat/src/lib/messages/text/text.component.html","../../../../projects/mckit/chat/src/lib/messages/image/image.component.ts","../../../../projects/mckit/chat/src/lib/messages/image/image.component.html","../../../../projects/mckit/chat/src/lib/messages/video/video.component.ts","../../../../projects/mckit/chat/src/lib/messages/video/video.component.html","../../../../projects/mckit/chat/src/lib/messages/audio/audio.component.ts","../../../../projects/mckit/chat/src/lib/messages/audio/audio.component.html","../../../../projects/mckit/chat/src/lib/messages/file/file.component.ts","../../../../projects/mckit/chat/src/lib/messages/file/file.component.html","../../../../projects/mckit/chat/src/lib/messages/empty/empty.component.ts","../../../../projects/mckit/chat/src/lib/messages/empty/empty.component.html","../../../../projects/mckit/chat/src/lib/messages/thinking/thinking.component.ts","../../../../projects/mckit/chat/src/lib/messages/thinking/thinking.component.html","../../../../projects/mckit/chat/src/lib/services/chat.service.ts","../../../../projects/mckit/chat/src/lib/components/writing/writing.component.ts","../../../../projects/mckit/chat/src/lib/components/writing/writing.component.html","../../../../projects/mckit/chat/src/lib/components/user-header/user-header.component.ts","../../../../projects/mckit/chat/src/lib/components/user-header/user-header.component.html","../../../../projects/mckit/chat/src/lib/components/conversation/conversation.component.ts","../../../../projects/mckit/chat/src/lib/components/conversation/conversation.component.html","../../../../projects/mckit/chat/src/public-api.ts","../../../../projects/mckit/chat/src/mckit-chat.ts"],"sourcesContent":["export enum MCMessageChatType {\n TEXT = 'text',\n IMAGE = 'image',\n VIDEO = 'video',\n AUDIO = 'audio',\n FILE = 'file',\n EMPTY = 'empty',\n THINKING = 'thinking'\n}\n\nexport enum MCMessageChatSide {\n LEFT = 'left',\n RIGHT = 'right'\n}\n\nexport class MCMessageChat {\n id?: string | number;\n type!: string;\n side!: MCMessageChatSide;\n content?: any;\n createdAt?: string;\n}","import { MCMessageChat } from \"./message\";\nimport { MCUserChat } from \"./user\";\n\nexport class MCConversation {\n id?: string;\n messages: MCMessageChat[] = [];\n user?: MCUserChat;\n}","export enum MCEventChatType {\n TYPING = 'typing',\n SEND_MESSAGE = 'send_message'\n}\n\nexport class MCEventChat {\n type!: MCEventChatType | string;\n data?: any;\n}","export class MCUserChat {\n id?: string;\n firstname?: string;\n lastname?: string;\n photo?: string;\n online?: boolean;\n}","import { Component, input } from '@angular/core';\nimport { MCMessageChat } from '../entities/message';\n\n@Component({\n selector: 'mc-base-message',\n template: ''\n})\nexport class MCBaseMessageComponent {\n message = input.required<MCMessageChat>();\n}\n","import { Component } from '@angular/core';\nimport { MCBaseMessageComponent } from '../base-message.component';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'mc-message-text',\n imports: [CommonModule],\n templateUrl: './text.component.html',\n styleUrl: './text.component.css'\n})\nexport class MCMessageTextComponent extends MCBaseMessageComponent {\n\n}\n","<div class=\"flex w-full\"\n [ngClass]=\"{'justify-end': message().side !== 'left', 'justify-start': message().side === 'left'}\">\n\n <div class=\"max-w-[70%] flex flex-col\"\n [ngClass]=\"{'items-end': message().side !== 'left', 'items-start': message().side === 'left'}\">\n\n <div class=\"p-3 rounded-lg shadow-sm\" [ngClass]=\"{\n 'bg-blue-600 text-white rounded-br-none': message().side !== 'left',\n 'bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-200 border border-gray-200 dark:border-gray-700 rounded-bl-none': message().id === '1'\n }\">\n <p class=\"text-sm\">{{ message().content }}</p>\n </div>\n <span class=\"text-xs text-gray-400 mt-1 px-1\">\n {{ message().createdAt | date:'shortTime' }}\n </span>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { ImageModule } from 'primeng/image';\nimport { MCBaseMessageComponent } from '../base-message.component';\n\n@Component({\n selector: 'mc-message-image',\n imports: [CommonModule, ImageModule],\n templateUrl: './image.component.html',\n styleUrl: './image.component.css'\n})\nexport class MCMessageImageComponent extends MCBaseMessageComponent {\n\n}\n","<div class=\"flex w-full\"\n [ngClass]=\"{'justify-end': message().side !== 'left', 'justify-start': message().side === 'left'}\">\n\n <div class=\"max-w-[70%] flex flex-col\"\n [ngClass]=\"{'items-end': message().side !== 'left', 'items-start': message().side === 'left'}\">\n\n <div class=\"rounded-lg shadow-sm overflow-hidden\" [ngClass]=\"{\n 'rounded-br-none': message().side !== 'left',\n 'rounded-bl-none': message().side === 'left'\n }\">\n <p-image [src]=\"message().content\" [alt]=\"'Image'\" [preview]=\"true\" width=\"250\">\n </p-image>\n </div>\n <span class=\"text-xs text-gray-400 mt-1 px-1\">\n {{ message().createdAt | date:'shortTime' }}\n </span>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { MCBaseMessageComponent } from '../base-message.component';\n\n@Component({\n selector: 'mc-message-video',\n imports: [CommonModule],\n templateUrl: './video.component.html',\n styleUrl: './video.component.css'\n})\nexport class MCMessageVideoComponent extends MCBaseMessageComponent {\n\n}\n","<div class=\"flex w-full\"\n [ngClass]=\"{'justify-end': message().side !== 'left', 'justify-start': message().side === 'left'}\">\n\n <div class=\"max-w-[70%] flex flex-col\"\n [ngClass]=\"{'items-end': message().side !== 'left', 'items-start': message().side === 'left'}\">\n\n <div class=\"rounded-lg shadow-sm overflow-hidden\" [ngClass]=\"{\n 'rounded-br-none': message().side !== 'left',\n 'rounded-bl-none': message().side === 'left'\n }\">\n <video [src]=\"message().content\" controls width=\"250\" class=\"block\">\n </video>\n </div>\n <span class=\"text-xs text-gray-400 mt-1 px-1\">\n {{ message().createdAt | date:'shortTime' }}\n </span>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { MCBaseMessageComponent } from '../base-message.component';\n\n@Component({\n selector: 'mc-message-audio',\n imports: [CommonModule],\n templateUrl: './audio.component.html',\n styleUrl: './audio.component.css'\n})\nexport class MCMessageAudioComponent extends MCBaseMessageComponent {\n\n}\n","<div class=\"flex w-full\"\n [ngClass]=\"{'justify-end': message().side !== 'left', 'justify-start': message().side === 'left'}\">\n\n <div class=\"max-w-[70%] flex flex-col\"\n [ngClass]=\"{'items-end': message().side !== 'left', 'items-start': message().side === 'left'}\">\n\n <div class=\"rounded-lg shadow-sm overflow-hidden\" [ngClass]=\"{\n 'rounded-br-none': message().side !== 'left',\n 'rounded-bl-none': message().side === 'left'\n }\">\n <audio [src]=\"message().content\" controls class=\"block w-[250px]\">\n </audio>\n </div>\n <span class=\"text-xs text-gray-400 mt-1 px-1\">\n {{ message().createdAt | date:'shortTime' }}\n </span>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { MCBaseMessageComponent } from '../base-message.component';\n\n@Component({\n selector: 'mc-message-file',\n imports: [CommonModule],\n templateUrl: './file.component.html',\n styleUrl: './file.component.css'\n})\nexport class MCMessageFileComponent extends MCBaseMessageComponent {\n\n}\n","<div class=\"flex w-full\"\n [ngClass]=\"{'justify-end': message().side !== 'left', 'justify-start': message().side === 'left'}\">\n\n <div class=\"max-w-[70%] flex flex-col\"\n [ngClass]=\"{'items-end': message().side !== 'left', 'items-start': message().side === 'left'}\">\n\n <div class=\"rounded-lg shadow-sm p-3 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 flex items-center gap-3\"\n [ngClass]=\"{\n 'rounded-br-none': message().side !== 'left',\n 'rounded-bl-none': message().side === 'left'\n }\">\n\n <div\n class=\"w-10 h-10 rounded bg-gray-100 dark:bg-gray-700 flex items-center justify-center text-gray-500 dark:text-gray-400\">\n <i class=\"pi pi-file text-xl\"></i>\n </div>\n\n <div class=\"flex flex-col overflow-hidden\">\n <span class=\"text-sm font-medium truncate text-gray-900 dark:text-gray-100 max-w-[150px]\">\n Attached File\n </span>\n <a [href]=\"message().content\" target=\"_blank\"\n class=\"text-xs text-blue-500 hover:text-blue-600 hover:underline flex items-center gap-1\">\n <span>Download</span>\n <i class=\"pi pi-external-link text-[10px]\"></i>\n </a>\n </div>\n </div>\n <span class=\"text-xs text-gray-400 mt-1 px-1\">\n {{ message().createdAt | date:'shortTime' }}\n </span>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { MCBaseMessageComponent } from '../base-message.component';\n\n@Component({\n selector: 'mc-chat-empty',\n imports: [CommonModule],\n templateUrl: './empty.component.html',\n styleUrl: './empty.component.css'\n})\nexport class MCChatEmptyComponent extends MCBaseMessageComponent {\n\n}\n","<div class=\"flex flex-col items-center justify-center h-full text-gray-500 dark:text-gray-400\">\n <div class=\"w-16 h-16 bg-gray-100 dark:bg-gray-800 rounded-full flex items-center justify-center mb-4\">\n <i class=\"pi pi-comments text-3xl\"></i>\n </div>\n <p class=\"text-lg font-medium\">No messages yet</p>\n <p class=\"text-sm\">Start the conversation by sending a message.</p>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { MCBaseMessageComponent } from '../base-message.component';\n\n@Component({\n selector: 'mc-chat-thinking',\n imports: [CommonModule],\n templateUrl: './thinking.component.html',\n styleUrl: './thinking.component.css'\n})\nexport class MCThinkingComponent extends MCBaseMessageComponent {\n\n}\n","<div class=\"flex items-center space-x-1 bg-gray-100 dark:bg-gray-800 rounded-lg p-3 w-fit\">\n <div class=\"w-2 h-2 bg-gray-400 rounded-full animate-bounce [animation-delay:-0.3s]\"></div>\n <div class=\"w-2 h-2 bg-gray-400 rounded-full animate-bounce [animation-delay:-0.15s]\"></div>\n <div class=\"w-2 h-2 bg-gray-400 rounded-full animate-bounce\"></div>\n</div>","import { Injectable, Type } from '@angular/core';\nimport { MCBaseMessageComponent } from '../messages/base-message.component';\nimport { MCMessageChatType } from '../entities/message';\nimport { MCMessageTextComponent } from '../messages/text/text.component';\nimport { MCMessageImageComponent } from '../messages/image/image.component';\nimport { MCMessageVideoComponent } from '../messages/video/video.component';\nimport { MCMessageAudioComponent } from '../messages/audio/audio.component';\nimport { MCMessageFileComponent } from '../messages/file/file.component';\nimport { Subject } from 'rxjs';\nimport { MCEventChat } from '../entities/event';\nimport { MCChatEmptyComponent } from '../messages/empty/empty.component';\nimport { MCThinkingComponent } from '../messages/thinking/thinking.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MCChatService {\n\n private registry = new Map<string, Type<MCBaseMessageComponent>>();\n\n private eventSubject = new Subject<MCEventChat>();\n\n constructor() {\n this.register(MCMessageChatType.TEXT, MCMessageTextComponent);\n this.register(MCMessageChatType.IMAGE, MCMessageImageComponent);\n this.register(MCMessageChatType.VIDEO, MCMessageVideoComponent);\n this.register(MCMessageChatType.AUDIO, MCMessageAudioComponent);\n this.register(MCMessageChatType.FILE, MCMessageFileComponent);\n this.register(MCMessageChatType.EMPTY, MCChatEmptyComponent);\n this.register(MCMessageChatType.THINKING, MCThinkingComponent);\n }\n\n register(type: string, component: Type<MCBaseMessageComponent>) {\n this.registry.set(type, component);\n }\n\n getComponent(type: string): Type<MCBaseMessageComponent> | undefined {\n return this.registry.get(type);\n }\n\n sendEvent(event: MCEventChat) {\n this.eventSubject.next(event);\n }\n\n onEvent() {\n return this.eventSubject.asObservable();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { MCChatService } from '../../services/chat.service';\nimport { MCEventChatType } from '../../entities/event';\n\n@Component({\n selector: 'mc-writing-conversation',\n imports: [CommonModule, FormsModule, ReactiveFormsModule, ButtonModule, InputTextModule],\n templateUrl: './writing.component.html',\n styleUrl: './writing.component.css'\n})\nexport class MCWritingComponent {\n\n input = new FormControl<string>('', { nonNullable: true });\n\n chatService = inject(MCChatService);\n\n onClickSend() {\n if (!this.input.value.trim()) return;\n\n this.chatService.sendEvent({\n type: MCEventChatType.SEND_MESSAGE,\n data: this.input.value\n });\n\n this.input.reset();\n }\n}\n","<div class=\"p-4 bg-white dark:bg-gray-800 border-t border-gray-200 dark:border-gray-700\">\n <div class=\"flex gap-2\">\n <input pInputText type=\"text\" class=\"flex-1 w-full\" placeholder=\"Type a message...\" [formControl]=\"input\"\n (keydown.enter)=\"onClickSend()\" />\n\n <p-button icon=\"pi pi-send\" (onClick)=\"onClickSend()\" styleClass=\"p-button-rounded p-button-primary\">\n </p-button>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, input } from '@angular/core';\nimport { AvatarModule } from 'primeng/avatar';\nimport { MCUserChat } from '../../entities/user';\n\n@Component({\n selector: 'mc-user-header-chat',\n imports: [CommonModule, AvatarModule],\n templateUrl: './user-header.component.html',\n styleUrl: './user-header.component.css'\n})\nexport class MCUserHeaderChatComponent {\n user = input.required<MCUserChat>();\n\n getInitials(): string {\n const initials = ((this.user().firstname?.charAt(0) ?? '') + (this.user().lastname?.charAt(0) ?? '')).toUpperCase();\n return initials ? initials : 'A1';\n }\n}\n","<div class=\"flex items-center p-4 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800\">\n @if (user().photo && user().photo != '' && user().photo != null) {\n <p-avatar [image]=\"user().photo\" shape=\"circle\" size=\"large\" class=\"mr-3\" />\n } @else {\n <p-avatar [label]=\"getInitials()\" shape=\"circle\" size=\"large\" class=\"mr-3\" />\n }\n <div>\n <h2 class=\"text-lg font-semibold text-gray-800 dark:text-white\">{{ user().firstname }} {{ user().lastname }}\n </h2>\n @if (user().online) {\n <p class=\"text-sm text-green-500 flex items-center\">\n <span class=\"w-2 h-2 rounded-full bg-green-500 mr-2\"></span>\n Online\n </p>\n }\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, Type } from '@angular/core';\nimport { MCMessageChat, MCMessageChatSide, MCMessageChatType } from '../../entities/message';\nimport { MCChatService } from '../../services/chat.service';\nimport { MCBaseMessageComponent } from '../../messages/base-message.component';\nimport { MCConversation } from '../../entities/conversation';\nimport { MCWritingComponent } from '../writing/writing.component';\nimport { MCUserHeaderChatComponent } from '../user-header/user-header.component';\n\n@Component({\n selector: 'mc-conversation',\n imports: [CommonModule, MCUserHeaderChatComponent, MCWritingComponent],\n templateUrl: './conversation.component.html',\n styleUrl: './conversation.component.css'\n})\nexport class MCConversationComponent {\n\n conversation = input.required<MCConversation>();\n\n chatService = inject(MCChatService);\n\n newMessage: string = '';\n\n // Let's pretend we have a currentUserId = 1.\n currentUserId = 1;\n\n getComponent(type: string): Type<MCBaseMessageComponent> {\n return this.chatService.getComponent(type) ?? MCBaseMessageComponent;\n }\n\n sendMessage() {\n if (!this.newMessage.trim()) return;\n\n const message: MCMessageChat = {\n id: Date.now().toString(),\n type: MCMessageChatType.TEXT,\n content: this.newMessage,\n createdAt: new Date().toISOString(),\n side: MCMessageChatSide.RIGHT,\n };\n\n // Ideally we would push to a service, but for now just local array\n this.conversation().messages.push(message);\n this.newMessage = '';\n }\n}\n","<div\n class=\"flex flex-col h-full bg-white dark:bg-gray-900 rounded-lg overflow-hidden border border-gray-200 dark:border-gray-700\">\n <!-- Header -->\n @if (conversation() && conversation()!.user) {\n <mc-user-header-chat [user]=\"conversation()!.user!\" />\n }\n\n <!-- Messages Body -->\n <div class=\"flex-1 overflow-y-auto p-4 space-y-4 bg-gray-50 dark:bg-gray-900\">\n <!-- Message Item -->\n @for (msg of conversation().messages; track $index) {\n <div class=\"mb-3\">\n <ng-container *ngComponentOutlet=\"getComponent(msg.type); inputs: { message: msg }\"></ng-container>\n </div>\n }\n </div>\n\n <!-- Footer / Input Area -->\n <mc-writing-conversation />\n\n</div>","/*\n * Public API Surface of chat\n */\n\n/**\n * Entities\n */\nexport * from './lib/entities/message';\nexport * from './lib/entities/conversation';\nexport * from './lib/entities/event';\nexport * from './lib/entities/user';\n\n/**\n * Messages\n */\nexport * from './lib/messages/base-message.component';\nexport * from './lib/messages/text/text.component';\nexport * from './lib/messages/image/image.component';\nexport * from './lib/messages/video/video.component';\nexport * from './lib/messages/audio/audio.component';\nexport * from './lib/messages/file/file.component';\nexport * from './lib/messages/empty/empty.component';\nexport * from './lib/messages/thinking/thinking.component';\n\n/**\n * Components\n */\nexport * from './lib/components/conversation/conversation.component';\nexport * from './lib/components/user-header/user-header.component';\nexport * from './lib/components/writing/writing.component';\n\n/**\n * Services\n */\nexport * from './lib/services/chat.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}
1
+ {"version":3,"file":"mckit-chat.mjs","sources":["../../../../projects/mckit/chat/src/lib/entities/message.ts","../../../../projects/mckit/chat/src/lib/entities/conversation.ts","../../../../projects/mckit/chat/src/lib/entities/event.ts","../../../../projects/mckit/chat/src/lib/entities/user.ts","../../../../projects/mckit/chat/src/lib/messages/base-message.component.ts","../../../../projects/mckit/chat/src/lib/messages/text/text.component.ts","../../../../projects/mckit/chat/src/lib/messages/text/text.component.html","../../../../projects/mckit/chat/src/lib/messages/image/image.component.ts","../../../../projects/mckit/chat/src/lib/messages/image/image.component.html","../../../../projects/mckit/chat/src/lib/messages/video/video.component.ts","../../../../projects/mckit/chat/src/lib/messages/video/video.component.html","../../../../projects/mckit/chat/src/lib/messages/audio/audio.component.ts","../../../../projects/mckit/chat/src/lib/messages/audio/audio.component.html","../../../../projects/mckit/chat/src/lib/messages/file/file.component.ts","../../../../projects/mckit/chat/src/lib/messages/file/file.component.html","../../../../projects/mckit/chat/src/lib/messages/empty/empty.component.ts","../../../../projects/mckit/chat/src/lib/messages/empty/empty.component.html","../../../../projects/mckit/chat/src/lib/messages/thinking/thinking.component.ts","../../../../projects/mckit/chat/src/lib/messages/thinking/thinking.component.html","../../../../projects/mckit/chat/src/lib/services/chat.service.ts","../../../../projects/mckit/chat/src/lib/components/writing/writing.component.ts","../../../../projects/mckit/chat/src/lib/components/writing/writing.component.html","../../../../projects/mckit/chat/src/lib/components/user-header/user-header.component.ts","../../../../projects/mckit/chat/src/lib/components/user-header/user-header.component.html","../../../../projects/mckit/chat/src/lib/components/conversation/conversation.component.ts","../../../../projects/mckit/chat/src/lib/components/conversation/conversation.component.html","../../../../projects/mckit/chat/src/lib/components/history-conversation/history-conversation.component.ts","../../../../projects/mckit/chat/src/lib/components/history-conversation/history-conversation.component.html","../../../../projects/mckit/chat/src/public-api.ts","../../../../projects/mckit/chat/src/mckit-chat.ts"],"sourcesContent":["export enum MCMessageChatType {\n TEXT = 'text',\n IMAGE = 'image',\n VIDEO = 'video',\n AUDIO = 'audio',\n FILE = 'file',\n EMPTY = 'empty',\n THINKING = 'thinking'\n}\n\nexport enum MCMessageChatSide {\n LEFT = 'left',\n RIGHT = 'right'\n}\n\nexport class MCMessageChat {\n id?: string | number;\n type!: string;\n side!: MCMessageChatSide;\n content?: any;\n createdAt?: string;\n}","import { MCMessageChat } from \"./message\";\nimport { MCUserChat } from \"./user\";\n\nexport class MCConversation {\n id?: string;\n title?: string;\n messages: MCMessageChat[] = [];\n user?: MCUserChat;\n}","export enum MCEventChatType {\n TYPING = 'typing',\n SEND_MESSAGE = 'send_message',\n NEW_CHAT = 'new_chat',\n CLICK_CHAT = 'click_chat'\n}\n\nexport class MCEventChat {\n type!: MCEventChatType | string;\n data?: any;\n}","export class MCUserChat {\n id?: string;\n firstname?: string;\n lastname?: string;\n photo?: string;\n online?: boolean;\n}","import { Component, input } from '@angular/core';\nimport { MCMessageChat } from '../entities/message';\n\n@Component({\n selector: 'mc-base-message',\n template: ''\n})\nexport class MCBaseMessageComponent {\n message = input.required<MCMessageChat>();\n}\n","import { Component } from '@angular/core';\nimport { MCBaseMessageComponent } from '../base-message.component';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'mc-message-text',\n imports: [CommonModule],\n templateUrl: './text.component.html',\n styleUrl: './text.component.css'\n})\nexport class MCMessageTextComponent extends MCBaseMessageComponent {\n\n}\n","<div class=\"flex w-full\"\n [ngClass]=\"{'justify-end': message().side !== 'left', 'justify-start': message().side === 'left'}\">\n\n <div class=\"max-w-[70%] flex flex-col\"\n [ngClass]=\"{'items-end': message().side !== 'left', 'items-start': message().side === 'left'}\">\n\n <div class=\"p-3 rounded-lg shadow-sm\" [ngClass]=\"{\n 'bg-blue-600 text-white rounded-br-none': message().side !== 'left',\n 'bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-200 border border-gray-200 dark:border-gray-700 rounded-bl-none': message().id === '1'\n }\">\n <p class=\"text-sm\">{{ message().content }}</p>\n </div>\n <span class=\"text-xs text-gray-400 mt-1 px-1\">\n {{ message().createdAt | date:'shortTime' }}\n </span>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { ImageModule } from 'primeng/image';\nimport { MCBaseMessageComponent } from '../base-message.component';\n\n@Component({\n selector: 'mc-message-image',\n imports: [CommonModule, ImageModule],\n templateUrl: './image.component.html',\n styleUrl: './image.component.css'\n})\nexport class MCMessageImageComponent extends MCBaseMessageComponent {\n\n}\n","<div class=\"flex w-full\"\n [ngClass]=\"{'justify-end': message().side !== 'left', 'justify-start': message().side === 'left'}\">\n\n <div class=\"max-w-[70%] flex flex-col\"\n [ngClass]=\"{'items-end': message().side !== 'left', 'items-start': message().side === 'left'}\">\n\n <div class=\"rounded-lg shadow-sm overflow-hidden\" [ngClass]=\"{\n 'rounded-br-none': message().side !== 'left',\n 'rounded-bl-none': message().side === 'left'\n }\">\n <p-image [src]=\"message().content\" [alt]=\"'Image'\" [preview]=\"true\" width=\"250\">\n </p-image>\n </div>\n <span class=\"text-xs text-gray-400 mt-1 px-1\">\n {{ message().createdAt | date:'shortTime' }}\n </span>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { MCBaseMessageComponent } from '../base-message.component';\n\n@Component({\n selector: 'mc-message-video',\n imports: [CommonModule],\n templateUrl: './video.component.html',\n styleUrl: './video.component.css'\n})\nexport class MCMessageVideoComponent extends MCBaseMessageComponent {\n\n}\n","<div class=\"flex w-full\"\n [ngClass]=\"{'justify-end': message().side !== 'left', 'justify-start': message().side === 'left'}\">\n\n <div class=\"max-w-[70%] flex flex-col\"\n [ngClass]=\"{'items-end': message().side !== 'left', 'items-start': message().side === 'left'}\">\n\n <div class=\"rounded-lg shadow-sm overflow-hidden\" [ngClass]=\"{\n 'rounded-br-none': message().side !== 'left',\n 'rounded-bl-none': message().side === 'left'\n }\">\n <video [src]=\"message().content\" controls width=\"250\" class=\"block\">\n </video>\n </div>\n <span class=\"text-xs text-gray-400 mt-1 px-1\">\n {{ message().createdAt | date:'shortTime' }}\n </span>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { MCBaseMessageComponent } from '../base-message.component';\n\n@Component({\n selector: 'mc-message-audio',\n imports: [CommonModule],\n templateUrl: './audio.component.html',\n styleUrl: './audio.component.css'\n})\nexport class MCMessageAudioComponent extends MCBaseMessageComponent {\n\n}\n","<div class=\"flex w-full\"\n [ngClass]=\"{'justify-end': message().side !== 'left', 'justify-start': message().side === 'left'}\">\n\n <div class=\"max-w-[70%] flex flex-col\"\n [ngClass]=\"{'items-end': message().side !== 'left', 'items-start': message().side === 'left'}\">\n\n <div class=\"rounded-lg shadow-sm overflow-hidden\" [ngClass]=\"{\n 'rounded-br-none': message().side !== 'left',\n 'rounded-bl-none': message().side === 'left'\n }\">\n <audio [src]=\"message().content\" controls class=\"block w-[250px]\">\n </audio>\n </div>\n <span class=\"text-xs text-gray-400 mt-1 px-1\">\n {{ message().createdAt | date:'shortTime' }}\n </span>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { MCBaseMessageComponent } from '../base-message.component';\n\n@Component({\n selector: 'mc-message-file',\n imports: [CommonModule],\n templateUrl: './file.component.html',\n styleUrl: './file.component.css'\n})\nexport class MCMessageFileComponent extends MCBaseMessageComponent {\n\n}\n","<div class=\"flex w-full\"\n [ngClass]=\"{'justify-end': message().side !== 'left', 'justify-start': message().side === 'left'}\">\n\n <div class=\"max-w-[70%] flex flex-col\"\n [ngClass]=\"{'items-end': message().side !== 'left', 'items-start': message().side === 'left'}\">\n\n <div class=\"rounded-lg shadow-sm p-3 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 flex items-center gap-3\"\n [ngClass]=\"{\n 'rounded-br-none': message().side !== 'left',\n 'rounded-bl-none': message().side === 'left'\n }\">\n\n <div\n class=\"w-10 h-10 rounded bg-gray-100 dark:bg-gray-700 flex items-center justify-center text-gray-500 dark:text-gray-400\">\n <i class=\"pi pi-file text-xl\"></i>\n </div>\n\n <div class=\"flex flex-col overflow-hidden\">\n <span class=\"text-sm font-medium truncate text-gray-900 dark:text-gray-100 max-w-[150px]\">\n Attached File\n </span>\n <a [href]=\"message().content\" target=\"_blank\"\n class=\"text-xs text-blue-500 hover:text-blue-600 hover:underline flex items-center gap-1\">\n <span>Download</span>\n <i class=\"pi pi-external-link text-[10px]\"></i>\n </a>\n </div>\n </div>\n <span class=\"text-xs text-gray-400 mt-1 px-1\">\n {{ message().createdAt | date:'shortTime' }}\n </span>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { MCBaseMessageComponent } from '../base-message.component';\n\n@Component({\n selector: 'mc-chat-empty',\n imports: [CommonModule],\n templateUrl: './empty.component.html',\n styleUrl: './empty.component.css'\n})\nexport class MCChatEmptyComponent extends MCBaseMessageComponent {\n\n}\n","<div class=\"flex flex-col items-center justify-center h-full text-gray-500 dark:text-gray-400\">\n <div class=\"w-16 h-16 bg-gray-100 dark:bg-gray-800 rounded-full flex items-center justify-center mb-4\">\n <i class=\"pi pi-comments text-3xl\"></i>\n </div>\n <p class=\"text-lg font-medium\">No messages yet</p>\n <p class=\"text-sm\">Start the conversation by sending a message.</p>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { MCBaseMessageComponent } from '../base-message.component';\n\n@Component({\n selector: 'mc-chat-thinking',\n imports: [CommonModule],\n templateUrl: './thinking.component.html',\n styleUrl: './thinking.component.css'\n})\nexport class MCThinkingComponent extends MCBaseMessageComponent {\n\n}\n","<div class=\"flex items-center space-x-1 bg-gray-100 dark:bg-gray-800 rounded-lg p-3 w-fit\">\n <div class=\"w-2 h-2 bg-gray-400 rounded-full animate-bounce [animation-delay:-0.3s]\"></div>\n <div class=\"w-2 h-2 bg-gray-400 rounded-full animate-bounce [animation-delay:-0.15s]\"></div>\n <div class=\"w-2 h-2 bg-gray-400 rounded-full animate-bounce\"></div>\n</div>","import { Injectable, Type } from '@angular/core';\nimport { MCBaseMessageComponent } from '../messages/base-message.component';\nimport { MCMessageChatType } from '../entities/message';\nimport { MCMessageTextComponent } from '../messages/text/text.component';\nimport { MCMessageImageComponent } from '../messages/image/image.component';\nimport { MCMessageVideoComponent } from '../messages/video/video.component';\nimport { MCMessageAudioComponent } from '../messages/audio/audio.component';\nimport { MCMessageFileComponent } from '../messages/file/file.component';\nimport { Subject } from 'rxjs';\nimport { MCEventChat } from '../entities/event';\nimport { MCChatEmptyComponent } from '../messages/empty/empty.component';\nimport { MCThinkingComponent } from '../messages/thinking/thinking.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MCChatService {\n\n private registry = new Map<string, Type<MCBaseMessageComponent>>();\n\n private eventSubject = new Subject<MCEventChat>();\n\n constructor() {\n this.register(MCMessageChatType.TEXT, MCMessageTextComponent);\n this.register(MCMessageChatType.IMAGE, MCMessageImageComponent);\n this.register(MCMessageChatType.VIDEO, MCMessageVideoComponent);\n this.register(MCMessageChatType.AUDIO, MCMessageAudioComponent);\n this.register(MCMessageChatType.FILE, MCMessageFileComponent);\n this.register(MCMessageChatType.EMPTY, MCChatEmptyComponent);\n this.register(MCMessageChatType.THINKING, MCThinkingComponent);\n }\n\n register(type: string, component: Type<MCBaseMessageComponent>) {\n this.registry.set(type, component);\n }\n\n getComponent(type: string): Type<MCBaseMessageComponent> | undefined {\n return this.registry.get(type);\n }\n\n sendEvent(event: MCEventChat) {\n this.eventSubject.next(event);\n }\n\n onEvent() {\n return this.eventSubject.asObservable();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ButtonModule } from 'primeng/button';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { MCChatService } from '../../services/chat.service';\nimport { MCEventChatType } from '../../entities/event';\n\n@Component({\n selector: 'mc-writing-conversation',\n imports: [CommonModule, FormsModule, ReactiveFormsModule, ButtonModule, InputTextModule],\n templateUrl: './writing.component.html',\n styleUrl: './writing.component.css'\n})\nexport class MCWritingComponent {\n\n input = new FormControl<string>('', { nonNullable: true });\n\n chatService = inject(MCChatService);\n\n onClickSend() {\n if (!this.input.value.trim()) return;\n\n this.chatService.sendEvent({\n type: MCEventChatType.SEND_MESSAGE,\n data: this.input.value\n });\n\n this.input.reset();\n }\n}\n","<div class=\"p-4 bg-white dark:bg-gray-800 border-t border-gray-200 dark:border-gray-700\">\n <div class=\"flex gap-2\">\n <input pInputText type=\"text\" class=\"flex-1 w-full\" placeholder=\"Type a message...\" [formControl]=\"input\"\n (keydown.enter)=\"onClickSend()\" />\n\n <p-button icon=\"pi pi-send\" (onClick)=\"onClickSend()\" styleClass=\"p-button-rounded p-button-primary\">\n </p-button>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, input } from '@angular/core';\nimport { AvatarModule } from 'primeng/avatar';\nimport { MCUserChat } from '../../entities/user';\n\n@Component({\n selector: 'mc-user-header-chat',\n imports: [CommonModule, AvatarModule],\n templateUrl: './user-header.component.html',\n styleUrl: './user-header.component.css'\n})\nexport class MCUserHeaderChatComponent {\n user = input.required<MCUserChat>();\n\n getInitials(): string {\n const initials = ((this.user().firstname?.charAt(0) ?? '') + (this.user().lastname?.charAt(0) ?? '')).toUpperCase();\n return initials ? initials : 'A1';\n }\n}\n","<div class=\"flex items-center p-4 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800\">\n @if (user().photo && user().photo != '' && user().photo != null) {\n <p-avatar [image]=\"user().photo\" shape=\"circle\" size=\"large\" class=\"mr-3\" />\n } @else {\n <p-avatar [label]=\"getInitials()\" shape=\"circle\" size=\"large\" class=\"mr-3\" />\n }\n <div>\n <h2 class=\"text-lg font-semibold text-gray-800 dark:text-white\">{{ user().firstname }} {{ user().lastname }}\n </h2>\n @if (user().online) {\n <p class=\"text-sm text-green-500 flex items-center\">\n <span class=\"w-2 h-2 rounded-full bg-green-500 mr-2\"></span>\n Online\n </p>\n }\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, Type } from '@angular/core';\nimport { MCMessageChat, MCMessageChatSide, MCMessageChatType } from '../../entities/message';\nimport { MCChatService } from '../../services/chat.service';\nimport { MCBaseMessageComponent } from '../../messages/base-message.component';\nimport { MCConversation } from '../../entities/conversation';\nimport { MCWritingComponent } from '../writing/writing.component';\nimport { MCUserHeaderChatComponent } from '../user-header/user-header.component';\n\n@Component({\n selector: 'mc-conversation',\n imports: [CommonModule, MCUserHeaderChatComponent, MCWritingComponent],\n templateUrl: './conversation.component.html',\n styleUrl: './conversation.component.css'\n})\nexport class MCConversationComponent {\n\n conversation = input.required<MCConversation>();\n\n chatService = inject(MCChatService);\n\n newMessage: string = '';\n\n // Let's pretend we have a currentUserId = 1.\n currentUserId = 1;\n\n getComponent(type: string): Type<MCBaseMessageComponent> {\n return this.chatService.getComponent(type) ?? MCBaseMessageComponent;\n }\n\n sendMessage() {\n if (!this.newMessage.trim()) return;\n\n const message: MCMessageChat = {\n id: Date.now().toString(),\n type: MCMessageChatType.TEXT,\n content: this.newMessage,\n createdAt: new Date().toISOString(),\n side: MCMessageChatSide.RIGHT,\n };\n\n // Ideally we would push to a service, but for now just local array\n this.conversation().messages.push(message);\n this.newMessage = '';\n }\n}\n","<div\n class=\"flex flex-col h-full bg-white dark:bg-gray-900 rounded-lg overflow-hidden border border-gray-200 dark:border-gray-700\">\n <!-- Header -->\n @if (conversation() && conversation()!.user) {\n <mc-user-header-chat [user]=\"conversation()!.user!\" />\n }\n\n <!-- Messages Body -->\n <div class=\"flex-1 overflow-y-auto p-4 space-y-4 bg-gray-50 dark:bg-gray-900\">\n <!-- Message Item -->\n @for (msg of conversation().messages; track $index) {\n <div class=\"mb-3\">\n <ng-container *ngComponentOutlet=\"getComponent(msg.type); inputs: { message: msg }\"></ng-container>\n </div>\n }\n </div>\n\n <!-- Footer / Input Area -->\n <mc-writing-conversation />\n\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, output } from '@angular/core';\nimport { AvatarModule } from 'primeng/avatar';\nimport { ButtonModule } from 'primeng/button';\nimport { MCConversation } from '../../entities/conversation';\nimport { MCChatService } from '../../services/chat.service';\nimport { MCEventChatType } from '../../entities/event';\n\n@Component({\n selector: 'mc-history-conversation',\n imports: [CommonModule, AvatarModule, ButtonModule],\n templateUrl: './history-conversation.component.html',\n styleUrl: './history-conversation.component.css'\n})\nexport class MCHistoryConversationComponent {\n conversations = input<MCConversation[]>([]);\n\n chatService = inject(MCChatService);\n\n getInitials(conversation: MCConversation): string {\n if (conversation.user) {\n const initials = ((conversation.user.firstname?.charAt(0) ?? '') + (conversation.user.lastname?.charAt(0) ?? '')).toUpperCase();\n return initials ? initials : 'U';\n }\n return 'C';\n }\n\n getTitle(conversation: MCConversation): string {\n if (conversation.title) return conversation.title;\n if (conversation.user) return `${conversation.user.firstname} ${conversation.user.lastname}`.trim();\n return 'Conversation';\n }\n\n onSelect(conversation: MCConversation) {\n this.chatService.sendEvent({\n type: MCEventChatType.CLICK_CHAT,\n data: conversation\n });\n }\n\n onNew() {\n this.chatService.sendEvent({\n type: MCEventChatType.NEW_CHAT,\n data: {}\n });\n }\n}\n","<div class=\"flex flex-col h-full bg-white dark:bg-gray-900 border-r border-gray-200 dark:border-gray-700\">\n <div class=\"p-4 border-b border-gray-200 dark:border-gray-700 flex justify-between items-center\">\n <h2 class=\"text-xl font-semibold text-gray-800 dark:text-white\">Chats</h2>\n <p-button icon=\"pi pi-plus\" (onClick)=\"onNew()\" styleClass=\"p-button-rounded p-button-text\"></p-button>\n </div>\n\n <div class=\"flex-1 overflow-y-auto\">\n @for (conversation of conversations(); track conversation.id) {\n <div class=\"flex items-center p-4 hover:bg-gray-50 dark:hover:bg-gray-800 cursor-pointer transition-colors border-b border-gray-100 dark:border-gray-800 last:border-0\"\n (click)=\"onSelect(conversation)\">\n\n <div class=\"relative\">\n @if (conversation.user?.photo) {\n <p-avatar [image]=\"conversation.user!.photo\" shape=\"circle\" size=\"large\" styleClass=\"mr-3\" />\n } @else {\n <p-avatar [label]=\"getInitials(conversation)\" shape=\"circle\" size=\"large\" styleClass=\"mr-3\" />\n }\n\n @if (conversation.user?.online) {\n <span\n class=\"absolute bottom-0 right-3 w-3 h-3 bg-green-500 border-2 border-white dark:border-gray-900 rounded-full\"></span>\n }\n </div>\n\n <div class=\"flex-1 min-w-0\">\n <div class=\"flex justify-between items-baseline mb-1\">\n <h3 class=\"text-sm font-semibold text-gray-900 dark:text-white truncate\">\n {{ getTitle(conversation) }}\n </h3>\n @if (conversation.messages.length > 0) {\n <span class=\"text-xs text-gray-500 dark:text-gray-400\">\n {{ conversation.messages[conversation.messages.length - 1].createdAt | date:'shortTime' }}\n </span>\n }\n </div>\n <p class=\"text-sm text-gray-500 dark:text-gray-400 truncate\">\n @if (conversation.messages.length > 0) {\n {{ conversation.messages[conversation.messages.length - 1].content }}\n } @else {\n <span class=\"italic\">No messages yet</span>\n }\n </p>\n </div>\n </div>\n }\n </div>\n</div>","/*\n * Public API Surface of chat\n */\n\n/**\n * Entities\n */\nexport * from './lib/entities/message';\nexport * from './lib/entities/conversation';\nexport * from './lib/entities/event';\nexport * from './lib/entities/user';\n\n/**\n * Messages\n */\nexport * from './lib/messages/base-message.component';\nexport * from './lib/messages/text/text.component';\nexport * from './lib/messages/image/image.component';\nexport * from './lib/messages/video/video.component';\nexport * from './lib/messages/audio/audio.component';\nexport * from './lib/messages/file/file.component';\nexport * from './lib/messages/empty/empty.component';\nexport * from './lib/messages/thinking/thinking.component';\n\n/**\n * Components\n */\nexport * from './lib/components/conversation/conversation.component';\nexport * from './lib/components/user-header/user-header.component';\nexport * from './lib/components/writing/writing.component';\nexport * from './lib/components/history-conversation/history-conversation.component';\n\n/**\n * Services\n */\nexport * from './lib/services/chat.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -34,13 +34,16 @@ declare class MCUserChat {
34
34
 
35
35
  declare class MCConversation {
36
36
  id?: string;
37
+ title?: string;
37
38
  messages: MCMessageChat[];
38
39
  user?: MCUserChat;
39
40
  }
40
41
 
41
42
  declare enum MCEventChatType {
42
43
  TYPING = "typing",
43
- SEND_MESSAGE = "send_message"
44
+ SEND_MESSAGE = "send_message",
45
+ NEW_CHAT = "new_chat",
46
+ CLICK_CHAT = "click_chat"
44
47
  }
45
48
  declare class MCEventChat {
46
49
  type: MCEventChatType | string;
@@ -126,4 +129,15 @@ declare class MCWritingComponent {
126
129
  static ɵcmp: i0.ɵɵComponentDeclaration<MCWritingComponent, "mc-writing-conversation", never, {}, {}, never, never, true, never>;
127
130
  }
128
131
 
129
- export { MCBaseMessageComponent, MCChatEmptyComponent, MCChatService, MCConversation, MCConversationComponent, MCEventChat, MCEventChatType, MCMessageAudioComponent, MCMessageChat, MCMessageChatSide, MCMessageChatType, MCMessageFileComponent, MCMessageImageComponent, MCMessageTextComponent, MCMessageVideoComponent, MCThinkingComponent, MCUserChat, MCUserHeaderChatComponent, MCWritingComponent };
132
+ declare class MCHistoryConversationComponent {
133
+ conversations: i0.InputSignal<MCConversation[]>;
134
+ chatService: MCChatService;
135
+ getInitials(conversation: MCConversation): string;
136
+ getTitle(conversation: MCConversation): string;
137
+ onSelect(conversation: MCConversation): void;
138
+ onNew(): void;
139
+ static ɵfac: i0.ɵɵFactoryDeclaration<MCHistoryConversationComponent, never>;
140
+ static ɵcmp: i0.ɵɵComponentDeclaration<MCHistoryConversationComponent, "mc-history-conversation", never, { "conversations": { "alias": "conversations"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
141
+ }
142
+
143
+ export { MCBaseMessageComponent, MCChatEmptyComponent, MCChatService, MCConversation, MCConversationComponent, MCEventChat, MCEventChatType, MCHistoryConversationComponent, MCMessageAudioComponent, MCMessageChat, MCMessageChatSide, MCMessageChatType, MCMessageFileComponent, MCMessageImageComponent, MCMessageTextComponent, MCMessageVideoComponent, MCThinkingComponent, MCUserChat, MCUserHeaderChatComponent, MCWritingComponent };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mckit/chat",
3
- "version": "20.0.4",
3
+ "version": "20.0.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.3.0",
6
6
  "@angular/core": "^20.3.0"