{"version":3,"file":"seniorsistemas-angular-components-chat.mjs","sources":["../../projects/angular-components/chat/src/lib/chat/components/chat-message/chat-message.component.ts","../../projects/angular-components/chat/src/lib/chat/components/chat-message/chat-message.component.html","../../projects/angular-components/chat/src/lib/chat/chat.component.ts","../../projects/angular-components/chat/src/lib/chat/chat.component.html","../../projects/angular-components/chat/src/lib/chat/chat.module.ts","../../projects/angular-components/chat/src/seniorsistemas-angular-components-chat.ts"],"sourcesContent":["import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\n\nimport { ChatMessage } from '../../types/chat-message';\n\n/**\n * @description Componente que renderiza uma única mensagem de chat.\n * Exibe o conteúdo textual, o remetente (próprio ou terceiro) e suporte a\n * anexos via `attachmentUrl`, exibindo o nome do arquivo automaticamente.\n *\n * @example\n * ```html\n * <s-chat-message [message]=\"item\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n    selector: 's-chat-message',\n    templateUrl: './chat-message.component.html',\n    styleUrls: ['./chat-message.component.scss'],\n})\nexport class ChatMessageComponent implements OnChanges {\n    /**\n     * @description Objeto com os dados da mensagem a ser exibida,\n     * incluindo texto, remetente e URL de anexo. Campo obrigatório.\n     */\n    @Input({ required: true })\n    public message!: ChatMessage;\n\n    public fileName: string | null = null;\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes['message']) {\n            this.fileName = this.message.attachmentUrl ? this.getFileNameByUrl(this.message.attachmentUrl) : null;\n        }\n    }\n\n    private getFileNameByUrl(path: string): string | null {\n        const regex = /[^\\\\/]+$/;\n        const match = regex.exec(path);\n        return match ? match[0] : null;\n    }\n}\n\n","<div class=\"chat-message\" [class.chat-message--mine]=\"message.isMine\">\n    <div class=\"chat-message-wrapper\">\n        <div class=\"header\">\n            <img class=\"thumbnail\" [src]=\"message.thumbnailUrl\" alt=\"Thumbnail\" />\n            <span class=\"name\">{{ message.senderName }}</span>\n            <span *ngIf=\"message.sentAt\" class=\"date\">{{ message.sentAt | localizedDate: \"L LTS\" | async }}</span>\n        </div>\n        <p class=\"body\">{{ message.text }}</p>\n\n        <div *ngIf=\"message.attachmentUrl\" class=\"attachment\">\n            <span class=\"attachment-label\">{{ \"platform.angular_components.attachment\" | translate }}:</span>\n            <a class=\"attachment-anchor\" [href]=\"message.attachmentUrl\" [download]=\"fileName\">{{ fileName }}</a>\n        </div>\n    </div>\n</div>\n","import { AfterViewInit, Component, ElementRef, Input, QueryList, ViewChildren } from '@angular/core';\n\nimport { ChatMessage } from './types/chat-message';\n\n/**\n * @description Componente de interface de chat que exibe uma lista de mensagens\n * e faz scroll automático até a última mensagem sempre que novas são adicionadas.\n * Renderiza cada mensagem via {@link ChatMessageComponent}.\n *\n * @example\n * ```html\n * <s-chat [messages]=\"conversaMensagens\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n    selector: 's-chat',\n    templateUrl: './chat.component.html',\n    styleUrls: ['./chat.component.scss'],\n})\nexport class ChatComponent implements AfterViewInit {\n    /**\n     * @description Lista de mensagens exibidas no chat.\n     * Cada item é do tipo {@link ChatMessage}, contendo texto, remetente e demais metadados.\n     *\n     * @default []\n     */\n    @Input()\n    public messages: ChatMessage[] = [];\n\n    @ViewChildren('messageElements', { read: ElementRef })\n    private readonly messageElements: null | QueryList<ElementRef<HTMLElement>> = null;\n\n    public ngAfterViewInit(): void {\n        this.scrollToBottom();\n\n        this.messageElements?.changes.subscribe(() => {\n            this.scrollToBottom();\n        });\n    }\n\n    private scrollToBottom(): void {\n        this.messageElements?.last?.nativeElement.scrollIntoView({ behavior: 'smooth' });\n    }\n}\n\n","<div class=\"chat-container\">\n    <s-chat-message #messageElements *ngFor=\"let message of messages\" [message]=\"message\"> </s-chat-message>\n</div>\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\n\nimport { TranslateModule } from \"@ngx-translate/core\";\n\nimport { ChatComponent } from \"./chat.component\";\nimport { ChatMessageComponent } from \"./components/chat-message/chat-message.component\";\nimport { LocaleModule } from \"@seniorsistemas/angular-components/locale\";\n\n@NgModule({\n    imports: [CommonModule, LocaleModule, TranslateModule.forChild()],\n    declarations: [ChatComponent, ChatMessageComponent],\n    exports: [ChatComponent],\n})\nexport class ChatModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.ChatMessageComponent","i1"],"mappings":"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"}