{"version":3,"file":"afrochat-ui.mjs","sources":["../../../projects/afrochat-ui/src/lib/afrochat-ui.service.ts","../../../projects/afrochat-ui/src/lib/directives/dom-change.directive.ts","../../../projects/afrochat-ui/src/lib/data/images.ts","../../../projects/afrochat-ui/src/lib/components/user-message/user-message.component.ts","../../../projects/afrochat-ui/src/lib/components/user-message/user-message.component.html","../../../projects/afrochat-ui/src/lib/components/system-message/system-message.component.ts","../../../projects/afrochat-ui/src/lib/components/system-message/system-message.component.html","../../../projects/afrochat-ui/src/lib/afrochat-ui.component.ts","../../../projects/afrochat-ui/src/lib/afrochat-ui.component.html","../../../projects/afrochat-ui/src/public-api.ts","../../../projects/afrochat-ui/src/afrochat-ui.ts"],"sourcesContent":["import { Inject, Injectable, WritableSignal, signal } from '@angular/core';\nimport { io, Socket } from \"socket.io-client\";\nimport { MessageInterface, ModeratorEventInterface, RoomInterface, UserInterface } from './data/interfaces';\nimport { Subject } from 'rxjs/internal/Subject';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AfrochatUiService {\n\n  socket!: Socket;\n  token = 1234;\n  incomingMessage = new Subject<MessageInterface>();\n  updateMessage = new Subject<any>();\n  connectionStatus = new Subject<boolean>();\n  roomUpdates = new Subject<any>();\n  room = \"default\";\n  user!: UserInterface;\n  disconnected = false;\n\n  constructor(@Inject('SERVER_URL') public connect_url: string) {\n    this.connectToSocket();\n  }\n\n  connectToSocket() {\n    this.socket = io(this.connect_url, {\n      reconnectionDelayMax: 10000,\n      reconnectionDelay: 5000,\n      reconnectionAttempts: 10,\n      auth: {\n        token: this.token\n      }\n    });\n\n    this.socket.connect();\n    this.registerEvents();\n\n  }\n\n  joinRoom(room: string, user: UserInterface, reconnecting = false) {\n\n    this.socket.emit(\"JOIN_ROOM\", { room, user, reconnecting: this.socket.recovered });\n    this.room = room;\n    this.user = user;\n  }\n\n  leaveRoom(room: string, user: UserInterface) {\n    this.socket.emit(\"LEAVE_ROOM\", { room, user });\n    this.room = \"default\";\n  }\n\n  registerEvents() {\n\n    this.socket.on(\"connect\", () => {\n\n      if (this.socket.recovered) {\n        this.joinRoom(this.room, this.user, true);\n      }\n\n      this.connectionStatus.next(this.socket.connected);\n    });\n\n    this.socket.on(\"disconnect\", (reason) => {\n      this.connectionStatus.next(this.socket.connected);\n      if (reason === \"io server disconnect\" || reason === \"transport close\" || reason === \"transport error\") { }\n    });\n\n    this.socket.on('reconnect', (data) => { })\n\n    this.socket.io.on(\"error\", (error: any) => {\n\n    });\n\n    this.socket.on(\"NEW_USER_MESSAGE\", (msg: MessageInterface) => {\n      this.incomingMessage.next(msg);\n    });\n\n    this.socket.on(\"NEW_SYSTEM_MESSAGE\", (msg: MessageInterface) => {\n      this.incomingMessage.next(msg);\n    });\n\n    this.socket.on(\"ROOM_UPDATE\", (roomData: RoomInterface) => {\n      if (this.user.isModerator) {\n        this.roomUpdates.next(roomData);\n      }\n    });\n\n    this.socket.on(\"USER_MESSAGE_UPDATE\", (msg: any) => {\n      this.updateMessage.next(msg);\n    })\n\n  }\n\n  sendMessage(message: MessageInterface) {\n    this.socket.emit(\"NEW_MESSAGE\", message);\n  }\n\n  sendModeratorMessage(moderatorEvent: ModeratorEventInterface) {\n    this.socket.emit(moderatorEvent.event, moderatorEvent.payload);\n  }\n}\n","import { Directive, ElementRef, EventEmitter, Output } from '@angular/core';\n\n@Directive({\n  selector: '[afroDomChange]',\n  standalone: true\n})\nexport class DomChangeDirective {\n\n  @Output() public domChange = new EventEmitter();\n  private changes: MutationObserver;\n\n  constructor(private element: ElementRef) { \n    this.changes = new MutationObserver((mutations: MutationRecord[]) => {\n      this.domChange.emit(mutations);\n    });\n\n    this.changes.observe(this.element.nativeElement, {\n      childList: true\n    });\n  }\n\n  ngOnDestroy(){\n    this.changes.disconnect();\n  }\n\n}\n","export const system_img = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAMAAAAPkIrYAAAAM1BMVEVHcExycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJJoKWjAAAAEHRSTlMATAN75I4rtQf2EspCWqJlej51OQAAAgtJREFUWMPtmNtyhCAMhuUkIqK8/9O2dhVEEpbEXnSmm0t1wgf5c5Bh+Nj/sHlR62rUMj32JIN1cTdnl6dQ5uXpx5t6hDatMZtz6okvFQvTD7Y56tJXtPxdmpur6MSvYT0Aq7D4YAAWGwzA4oKBWEywF5a32TwX7MDahum0YeOCHaelqiygg52nZWr3ZLAziFbm8mN5oUxB9HOuP54XyqQtffGlWRrL2tJj2mJ+SALLkne5ZC2OI/6r5EN6Gljiv2aigopsP1iRiQZcoRusKBBJYKe8SGBlgUgCS/KigJV1Kwls1vQ6dqtbp8Dk7XkX2K2cJoFleXWDVeU01PLqBauqvIJ7eAdYXeUNtshbsLr5HAIr5NUFBjSfQ2ClvHrAgJ54CGzWxF4J9cSXwCT0qgkGtepDYDd5vQWDW7VZhBCLITZx8Pt9uPy2SJsukAmiZSiYIbtCwRhYKBgDCwNrYGmtaWAolg3jOAZLAMOwnDpySLluMAzLpD5kesEwLGjOeQeGYamOtBCdQQyXj0JfKLeeKAnk9F35+7Zigtg6FiwOYpgw9cT1Mq+iC67Xn+rJozkCzXKNBVtc0Z9D5oiuV3A189qHXWJzwF2V54WG6Geb3ijjWx+UcZx95Ntd+C0wagmbFNuXktW1huKRQbcpUgpL9+askOA10H6jZCm2KjHjt0pyopj83Oj9FfsCNT6Ii9RpoDAAAAAASUVORK5CYII=\"\n\nexport const wifi_img = \"data:image/png;base64,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\"\n\nexport const user_img = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAMAAAAPkIrYAAAAhFBMVEVHcEwAAAALBgIAAAAHBAEAAAAAAAAAAAADAQAAAAAAAAAAAAAJBQIAAAAAAAAAAAADAQAAAAAAAAAAAAAAAAABAAAAAABoOhhiNxdIKBFpOxlpOxlnOhhoOxlpOxlpOxlpOxlpOxkAAABpOxlqOxldNBYOCAMFAwE4Hw1RLRNIKBEiEwiWYRm+AAAAInRSTlMA7ynLBTOL1hzm/KkLE3Y9v2X4XJy2T25D4aTK8vzTsrfkd3roZgAAAnhJREFUWMOtmNmaoyAQhQUVBHdc0vvMVCeaNu//fmMW05qAinAuvPw/qjhVUuU4M/KCNCdh5lJK3apMCj92tinyk5AiDhx6XT6CuWWOPW0STjIEMrEqD3RAXloyUIpTglej/BDBvNhKWkAYLIsmy/fg1S6sEq/8BVRMEKwVy2evFFegIUFm4vRd0FOotEdKQVcZtoYCnklP5m9A9aokOQsy2KYyeqrkciMKePLISvhWFqD6Ie8Mtsud5D+qwERkzMq5EQulozukYKbw9y4TQxSI2tqx+oMNLSM3Rt0zFmXmrOEqU2SBRa8eIxZQwGtrIfYlfuk1yArLPfeewgoKkG8rXb0K47KeuMKC6e/W95klVp/8FFli9W6thSUWw6ZtcMTy7bGQPRbvWYXFGG3m3qYnsNyrbaNWK81X71V5DbXdQa2jqobktd3+7NU6Kjs+UbC+VVKwinMv5FZYl14oTb4+69Kjpf8OfRZRvia0WbcXhexHpM2isfIhp80annOSm9RloWHQil1j1v3N5OWmrNEj8/lgmqxyNP0VwojFxmNpFBqxppPHYyFpsbKH8SoXm1ksfZzZyVaWyJ+n9qn7u9UsIpng8cQYRzXr+zRxabw4uZ/UqEOziJrCTgdliD/tmkUAHrVFZfJH6eLlzIIiKIeW0aqDvIcokmh2gZYMpm0O8oPtO7jFSIul5VCazR5sf7jdoghXrK3i29EaucVu2XKLaN1+77IBa2VR7rv2uv1av+fDhPKzL/ZPfugTL9xEa2PoBEXI+BOsawQta/3NqIeLMnv9HJE+XitSB87WHWuw+/txBX3+e3sJIsdI0cvuz/vX+9tueUn7H5vBMXiIdswxAAAAAElFTkSuQmCC\"","import { Component, EventEmitter, Input, Output, SimpleChanges, ViewChild, inject } from '@angular/core';\nimport { MessageInterface, UserInterface } from '../../data/interfaces';\nimport { AfrochatUiService } from '../../afrochat-ui.service';\nimport { initFlowbite, Dropdown } from 'flowbite';\nimport { CommonModule } from '@angular/common';\nimport { DomChangeDirective } from '../../directives/dom-change.directive';\nimport { user_img } from '../../data/images';\n\n@Component({\n  selector: 'afro-user-message',\n  standalone: true,\n  imports: [CommonModule, DomChangeDirective],\n  templateUrl: './user-message.component.html',\n  styleUrls: ['./user-message.component.css', '../../tailwind.css']\n})\nexport class UserMessageComponent {\n  @Input() message: MessageInterface | undefined;\n  @Input() isRedactionDiv = false;\n  @Output() moderatorEvent = new EventEmitter();\n\n  chatService = inject(AfrochatUiService);\n  isModerator = this.chatService.user.isModerator;\n\n  @ViewChild('dd') dd!: any;\n  @ViewChild('ddbutton') ddbutton!: any;\n  dropdown: Dropdown | undefined;\n\n  user_img = user_img\n\n  ngOnInit() {\n    initFlowbite();\n  }\n\n  ngAfterViewInit() {\n\n    if (this.chatService.user.isModerator && this.dd) {\n\n      // set the dropdown menu element\n      const targetEl = this.dd.nativeElement;\n\n      // set the element that trigger the dropdown menu on click\n      const triggerEl = this.ddbutton.nativeElement;\n\n      // options with default values\n      const options: any = {\n        placement: 'bottom',\n        triggerType: 'click',\n        offsetSkidding: 0,\n        offsetDistance: 10,\n        delay: 300,\n        ignoreClickOutsideClass: false,\n        onHide: () => {\n\n        },\n        onShow: () => {\n\n        },\n        onToggle: () => {\n\n        },\n      };\n\n      // instance options object\n      const instanceOptions = {\n        id: `dropdown-${this.message!.id}`,\n        override: false\n      };\n      this.dropdown = new Dropdown(targetEl, triggerEl, options, instanceOptions);\n    }\n  }\n\n  Timeout(user: UserInterface) {\n    this.dropdown?.hide();\n    this.moderatorEvent.emit({\n      event: 'TIMEOUT_USER',\n      payload: user\n    })\n  }\n\n  Remove(message: MessageInterface) {\n    this.dropdown?.hide();\n    this.moderatorEvent.emit({\n      event: 'REMOVE_MESSAGE',\n      payload: message\n    })\n  }\n\n  Restore(message: MessageInterface) {\n    this.dropdown?.hide();\n    this.moderatorEvent.emit({\n      event: 'RESTORE_MESSAGE',\n      payload: message\n    })\n  }\n\n  Ban(user: UserInterface) {\n    this.dropdown?.hide();\n    this.moderatorEvent.emit({\n      event: 'BAN_USER',\n      payload: user\n    })\n  }\n}\n","\n<div id=\"afro-message-{{message!.id}}\" class=\"chat chat-start afro-message w-full\" [ngClass]=\"{'redacted' : message?.redacted && !isRedactionDiv}\">\n    <div class=\"chat-image avatar\">\n        @if(message!.user!.img){\n            <div class=\"w-10 rounded-full\"><img alt=\"{{message!.user!.name}} image\" src=\"{{message!.user!.img}}\" /></div>\n        }@else{\n            <div class=\"w-10 rounded-full\"><img alt=\"{{message!.user!.name}} image\" src=\"{{user_img}}\" /></div>\n        }\n    </div>\n    <div class=\"chat-header flex items-baseline space-x-1\">\n        @if(message!.user!.isModerator){\n            <div>\n                <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\" class=\"w-4 h-4 text-accent\">\n                    <path fill-rule=\"evenodd\" d=\"M8.5 1.709a.75.75 0 0 0-1 0 8.963 8.963 0 0 1-4.84 2.217.75.75 0 0 0-.654.72 10.499 10.499 0 0 0 5.647 9.672.75.75 0 0 0 .694-.001 10.499 10.499 0 0 0 5.647-9.672.75.75 0 0 0-.654-.719A8.963 8.963 0 0 1 8.5 1.71Zm2.34 5.504a.75.75 0 0 0-1.18-.926L7.394 9.17l-1.156-.99a.75.75 0 1 0-.976 1.138l1.75 1.5a.75.75 0 0 0 1.078-.106l2.75-3.5Z\" clip-rule=\"evenodd\" />\n                </svg>\n            </div>\n        }\n        <div class=\"font-semibold\">\n            {{message!.user!.name}}\n        </div>\n        <div>\n            <time class=\"text-xs opacity-50\">{{message!.time | date : 'EEEE, h:mm'}}</time>\n        </div>\n    </div>\n\n    <div class=\"flex w-full\">\n            <div id=\"afro-message-text-{{message?.id}}\" class=\"chat-bubble chat-bubble-accent text-sm text\" [ngClass]=\"message!.user!.id === chatService.user.id ? 'chat-bubble-accent' : 'chat-bubble-primary'\">\n                @if(message!.redacted){\n                    @if(!isRedactionDiv){\n                        <i>[ redacted ] </i>\n                    }\n                    @if(chatService.user.isModerator && chatService.user.id !== message!.user!.id){\n                        <i>{{message!.message}} </i>\n                    }\n                }@else{\n                    {{message!.message}}\n                }\n            </div>\n\n        @if( \n            message!.user!.id !== chatService.user.id && chatService.user.isModerator ||\n            (isRedactionDiv && message!.user!.id !== chatService.user.id)\n        ){\n\n            <button #ddbutton id=\"dropdownDefaultButton-{{message!.id}}\" class=\"moderator-menu-button focus:outline-none focus:ring-blue-300 font-mediudark:focus:ring-blue-800 hover:z-50 focus:z-40\" type=\"button\" [disabled]=\"message?.redacted && !isRedactionDiv\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" class=\"w-5 h-5\">\n                    <path d=\"M10 3a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM10 8.5a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM11.5 15.5a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0Z\" />\n                </svg>\n            </button>\n       \n            <!-- Dropdown menu -->\n            <div #dd id=\"dropdown-{{message!.id}}\" class=\"moderator-menu z-50 hidden bg-gray-300 divide-y divide-gray-500 rounded-lg shadow w-44 dark:bg-gray-700\">\n                <div class=\"flex justify-start items-center space-x-1.5 p-2 w-full\">\n                    <div class=\"avatar\">\n                        @if(message!.user!.img){\n                            <div class=\"w-10 rounded-full\"><img alt=\"{{message!.user!.name}} image\" src=\"{{message!.user!.img}}\" /></div>\n                        }@else{\n                            <div class=\"w-10 rounded-full\"><img alt=\"{{message!.user!.name}} image\" src=\"{{user_img}}\" /></div>\n                        }\n                    </div>\n                    @if(message!.user!.isModerator){\n                        <div>\n                            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\" class=\"w-4 h-4 text-accent\">\n                                <path fill-rule=\"evenodd\" d=\"M8.5 1.709a.75.75 0 0 0-1 0 8.963 8.963 0 0 1-4.84 2.217.75.75 0 0 0-.654.72 10.499 10.499 0 0 0 5.647 9.672.75.75 0 0 0 .694-.001 10.499 10.499 0 0 0 5.647-9.672.75.75 0 0 0-.654-.719A8.963 8.963 0 0 1 8.5 1.71Zm2.34 5.504a.75.75 0 0 0-1.18-.926L7.394 9.17l-1.156-.99a.75.75 0 1 0-.976 1.138l1.75 1.5a.75.75 0 0 0 1.078-.106l2.75-3.5Z\" clip-rule=\"evenodd\" />\n                            </svg>\n                        </div>\n                    }\n                    <div class=\"text-xs font-semibold\">{{message!.user!.name}}</div>\n                </div>\n                <ul class=\"py-2 text-xs text-gray-700 dark:text-gray-200\" attr.aria-labelledby=\"dropdownDefaultButton-{{message!.id}}\">\n                    <li class=\"cursor-pointer\">\n                        @if(message?.redacted){\n                            <a class=\"block px-4 py-2 hover:bg-gray-400 dark:hover:bg-gray-500\" (click)=\"Restore(message!)\">Restore Message</a>\n                        }@else{\n                            <a class=\"block px-4 py-2 hover:bg-gray-400 dark:hover:bg-gray-500\"(click)=\"Remove(message!)\">Remove Message</a>\n                        }\n                    </li>\n\n                    @if(message!.user!.id !== chatService.user.id){\n                        <li class=\"cursor-pointer\">\n                            <a class=\"block px-4 py-2 hover:bg-gray-400 dark:hover:bg-gray-500\" (click)=\"Timeout(message!.user!)\">Timeout {{message!.user!.name}}</a>\n                        </li>\n                        <li class=\"cursor-pointer\">\n                            <a class=\"block px-4 py-2 hover:bg-gray-400 dark:hover:bg-gray-500\" (click)=\"Ban(message!.user!)\">Ban {{message!.user!.name}}</a>\n                        </li>\n                    }\n                </ul>\n            </div>\n        }\n\n    </div>\n    \n</div>\n","import { Component, Input } from '@angular/core';\nimport { MessageInterface } from '../../data/interfaces';\nimport { system_img, user_img } from '../../data/images';\n\n@Component({\n  selector: 'afro-system-message',\n  standalone: true,\n  imports: [],\n  templateUrl: './system-message.component.html',\n  styleUrls: ['./system-message.component.css', '../../tailwind.css']\n})\nexport class SystemMessageComponent {\n  @Input() message: MessageInterface | undefined;\n  system_img = system_img;\n  user_img = user_img;\n}\n","<div class=\"chat chat-end\">\n    <div class=\"chat-image avatar\">\n        @if(message!.img){\n            <div class=\"w-6 rounded-full\"><img alt=\"system image\" src=\"{{message!.img}}\"></div>\n        }@else{\n            @if(message!.message.includes(\"Welcome\") || message!.message.includes(\"joined\") || message!.message.includes(\"left\")){\n            <div class=\"w-6\"><img alt=\"system image\" src=\"{{user_img}}\"></div>\n            }@else{\n                <div class=\"w-6\"><img alt=\"system image\" src=\"{{system_img}}\"></div>\n            }\n        }\n    </div>\n    <div class=\"text-xs text-gray-400\">{{message!.message}}</div>\n</div>\n","import { Component, ElementRef, EventEmitter, HostListener, Input, Output, SimpleChanges, ViewChild, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from \"@angular/forms\";\nimport { AfrochatUiService } from './afrochat-ui.service';\nimport { UserInterface, MessageInterface, ModeratorEventInterface } from './data/interfaces';\nimport { UserMessageComponent } from \"./components/user-message/user-message.component\";\nimport { SystemMessageComponent } from './components/system-message/system-message.component';\nimport { initFlowbite, Drawer, initDrawers } from 'flowbite';\nimport { DomChangeDirective } from './directives/dom-change.directive';\nimport { Subscription } from 'rxjs/internal/Subscription';\nimport { user_img, wifi_img } from './data/images';\n\n@Component({\n  selector: 'afrochat-ui',\n  standalone: true,\n  templateUrl: './afrochat-ui.component.html',\n  styleUrls: ['./tailwind.css', './afrochat-ui.component.css',],\n  providers: [\n    AfrochatUiService\n  ],\n  imports: [UserMessageComponent, SystemMessageComponent, CommonModule, FormsModule, DomChangeDirective]\n})\nexport class AfrochatUiComponent {\n\n  @Input() user!: UserInterface;\n  @Input() room: string | undefined;\n  @Input() theme: string = \"light\";\n  @Output() moderatorEvent = new EventEmitter();\n  @ViewChild('messagesContainer') messagesDiv!: ElementRef<any>;\n  @ViewChild('moderatorDrawer') moderatorDrawer!: ElementRef<any>;\n  @ViewChild('chatInput') input!: ElementRef<any>;\n  drawer: Drawer | undefined;\n\n  chatService = inject(AfrochatUiService);\n  messages: MessageInterface[] = [];\n  redactedMessages: MessageInterface[] = [];\n  messageSubscription: Subscription | undefined;\n  updateMessageSubscription: Subscription | undefined;\n  connectionSubscription: Subscription | undefined;\n  roomSubscription: Subscription | undefined;\n  userInput = \"\";\n  users: any[] = [];\n\n  timeDrawerShown = 0;\n  scrolling = false;\n\n  activeModeratorTab = \"users\";\n\n  user_img = user_img;\n\n  send() {\n    if (this.userInput) {\n      this.chatService.sendMessage({\n        message: this.userInput,\n        type: \"user\",\n        user: this.user,\n        room: this.room\n      })\n      this.userInput = \"\";\n    }\n  }\n\n  ngOnInit() {\n\n    initFlowbite();\n    initDrawers();\n\n    if (this.room) {\n      this.chatService.joinRoom(this.room, this.user);\n    }\n\n    this.messageSubscription = this.chatService.incomingMessage.subscribe((v) => {\n\n      this.messages.push(v);\n\n      this.messages.map(m => {\n        m.type = \"system\";\n        if (m.user) {\n          m.type = \"user\"\n        }\n\n        return m;\n      });\n\n      this.redactedMessages = this.messages.filter(m => m.redacted === true);\n\n    });\n\n    this.updateMessageSubscription = this.chatService.updateMessage.subscribe((resp) => {\n\n      const index = this.messages.findIndex(m => m.id === resp.id);\n      if (index > -1) {\n        this.messages[index].redacted = resp?.updatedValue;\n      }\n\n      this.redactedMessages = this.messages.filter(m => m.redacted === true);\n\n    });\n\n    this.roomSubscription = this.chatService.roomUpdates.subscribe((data) => {\n      if (data) {\n        this.users = data.users;\n      }\n    });\n\n    this.connectionSubscription = this.chatService.connectionStatus.subscribe((connected) => {\n\n      if (connected) {\n        this.messages.push(\n          {\n            \"message\": `Welcome, ${this.user.name}!`,\n            \"type\": \"system\",\n            \"img\": this.user.img\n          }\n        );\n        return;\n      }\n\n      this.messages.push(\n        {\n          \"message\": \"Lost connection. Attempting to reconnect...\",\n          \"type\": \"system\",\n          \"img\": wifi_img\n        }\n      )\n\n    });\n  }\n\n  ngAfterViewInit() {\n\n    if (this.chatService.user.isModerator) {\n\n\n      const targetEl = this.moderatorDrawer.nativeElement;\n\n      const options = {\n        placement: 'right',\n        backdrop: false,\n        bodyScrolling: false,\n        edge: false,\n        edgeOffset: '',\n        ignoreClickOutsideClass: false,\n        backdropClasses: 'bg-gray-900/50 dark:bg-gray-900/80 h-full fixed inset-0 z-30',\n        onHide: () => {\n        },\n        onShow: () => {\n          this.timeDrawerShown = Date.now();\n        },\n        onToggle: () => {\n        },\n      };\n\n\n      // instance options object\n      const instanceOptions = {\n        id: 'drawer-right',\n        override: true\n      };\n\n      this.drawer = new Drawer(targetEl, options, instanceOptions);\n    }\n\n  }\n\n  setFocus(val: boolean) {\n    this.scrolling = val;\n  }\n\n  toggleDrawer() {\n    this.drawer?.toggle();\n  }\n\n  onMessagesUpdated(mutationRecord: any) {\n\n    const inputIsActive = document.activeElement === this.input.nativeElement\n    if (!this.scrolling || inputIsActive) {\n      this.messagesDiv.nativeElement.scrollTop = (this.messagesDiv.nativeElement.scrollHeight);\n    }\n  }\n\n  onModeratorEvent(event: ModeratorEventInterface) {\n    this.moderatorEvent.emit(event);\n    this.chatService.sendModeratorMessage(event);\n  }\n\n  switchTab(name: string) {\n    this.activeModeratorTab = name;\n  }\n\n  onClick(event: any) {\n    if (this.drawer?.isVisible() && !this.moderatorDrawer.nativeElement.contains(event.target)) {\n      if (Date.now() - this.timeDrawerShown > 5) {\n        this.drawer?.hide();\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this.roomSubscription?.unsubscribe();\n    this.messageSubscription?.unsubscribe();\n    this.updateMessageSubscription?.unsubscribe();\n    this.connectionSubscription?.unsubscribe();\n  }\n\n}\n","<div class=\"flex h-full w-full\" [attr.data-theme]=\"theme\" (click)=\"onClick($event)\">\n    <div id=\"afro-=messagesContainer\" class=\"w-full\">\n        <div #messagesContainer id=\"afro-messages\"  afroDomChange (domChange)=\"onMessagesUpdated($event)\" class=\"p-2 pb-0\" (mouseover)=\"setFocus(true)\" (mouseout)=\"setFocus(false)\">\n\n                @for (message of messages; track message.id) {\n                    @if(message.type === \"system\"){\n                        <afro-system-message [message]=\"message\" ></afro-system-message>\n                    }@else{\n                        <afro-user-message id=\"afro-user-message-{message.id}\" [message]=\"message\" (moderatorEvent)=\"onModeratorEvent($event)\"></afro-user-message>\n                    }\n                }\n        </div>\n        \n        <div id=\"afro-form\" class=\"w-full\">\n            @if(chatService.user.isModerator){\n                <button class=\"z-[10000] focus:outline-none focus:ring-blue-300 font-mediudark:focus:ring-blue-800\" type=\"button\" data-drawer-target=\"afro-drawer-right\" data-drawer-show=\"afro-drawer-right\" data-drawer-placement=\"right\" data-drawer-backdrop=\"true\" aria-controls=\"afro-drawer-right\" (click)=\"toggleDrawer()\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" class=\"w-5 h-5\">\n                        <path d=\"M10 3a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM10 8.5a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM11.5 15.5a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0Z\" />\n                    </svg>\n                </button>\n            }\n\n            <input #chatInput id=\"afro-input\" class=\"px-3\" autocomplete=\"off\"  [(ngModel)]=\"userInput\" (keydown.enter)=\"send()\">\n            <button class=\"btn\" (click)=\"send()\">Send</button>\n        </div>\n\n    </div>\n\n\n    @if(chatService.user.isModerator){\n\n        <!-- DRAWER -->\n        <div #moderatorDrawer id=\"afro-drawer-right\" class=\"fixed z-[10000] right-0 bottom-0 h-[calc(100%)] p-4 overflow-y-auto transition-transform translate-x-full bg-base-300\" tabindex=\"-1\" aria-labelledby=\"afro-drawer-right-label\" data-drawer-backdrop=\"true\">\n\n            <div class=\"tabs tabs-boxed bg-none\">\n                <a role=\"\" class=\"tab tab-active\" [ngClass]=\"{'tab-active': activeModeratorTab==='users'}\" (click)=\"switchTab('users')\" >Users ({{users.length}})</a>\n                <a role=\"\" class=\"tab\" [ngClass]=\"{'tab-active': activeModeratorTab==='redacted'}\" (click)=\"switchTab('redacted')\">Redacted ({{redactedMessages.length}})</a>\n            </div>\n\n                <!-- <input type=\"radio\" name=\"moderatorTabs\" role=\"tab\" class=\"tab\" [attr.aria-label]=\"'Users (' + users.length + ')'\" checked /> -->\n                <div class=\"\" [hidden]=\"activeModeratorTab !== 'users'\">\n                    <!-- <h3 class=\"font-semibold pb-2\">{{users.length}} Users</h3> -->\n                    <ul class=\"w-full px-2 text-sm font-medium bg-base-100 border border-gray-200 rounded-lg mt-2\">\n                    @for (user of users; track user.id) {\n                        <li class=\"flex justify-start items-center space-x-1.5 w-full py-2 border-b border-gray-200 rounded-t-lg dark:border-gray-600\">\n                            <div class=\"avatar\">\n                                 @if(user!.img){\n                                    <div class=\"w-10 rounded-full\"><img alt=\"{{user!.name}} image\" src=\"{{user!.img}}\" /></div>\n                                }@else{\n                                    <div class=\"w-10 rounded-full\"><img alt=\"{{user!.name}} image\" src=\"{{user_img}}\" /></div>\n                                }\n                            </div>\n                            <div class=\"\">\n                                <div class=\"flex items-baseline space-y-0.5\">\n                                    @if(user.isModerator){\n                                    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\" class=\"w-4 h-4 text-accent\">\n                                            <path fill-rule=\"evenodd\" d=\"M8.5 1.709a.75.75 0 0 0-1 0 8.963 8.963 0 0 1-4.84 2.217.75.75 0 0 0-.654.72 10.499 10.499 0 0 0 5.647 9.672.75.75 0 0 0 .694-.001 10.499 10.499 0 0 0 5.647-9.672.75.75 0 0 0-.654-.719A8.963 8.963 0 0 1 8.5 1.71Zm2.34 5.504a.75.75 0 0 0-1.18-.926L7.394 9.17l-1.156-.99a.75.75 0 1 0-.976 1.138l1.75 1.5a.75.75 0 0 0 1.078-.106l2.75-3.5Z\" clip-rule=\"evenodd\" />\n                                        </svg>\n                                    }\n                                    <div class=\"font-semibold\">\n                                        {{user.name}}\n                                    </div>\n                                </div>\n                                <time class=\"text-xs opacity-40\">{{user.connectedAt | date : 'E, h:mm'}}</time>\n                            </div>\n                        </li>\n                    }\n                    </ul>\n                </div>\n            \n                <!-- <input type=\"radio\" name=\"moderatorTabs\" role=\"tab\" class=\"tab\" [attr.aria-label]=\"'Redacted (' + redactedMessages.length + ')'\" /> -->\n                 \n                <div class=\" p-2\" [hidden]=\"activeModeratorTab !== 'redacted'\">\n\n                    @if(redactedMessages.length > 0){\n                        @for (message of redactedMessages; track message.id) {\n\n                            @if(message!.user!.id !== chatService.user.id){\n                                <afro-user-message [message]=\"message\" (moderatorEvent)=\"onModeratorEvent($event)\" [isRedactionDiv]=\"true\"></afro-user-message>\n                            }\n                        }\n\n                    }@else{\n                        <h3>No Redacted Messages</h3>\n                    }\n\n                </div>\n\n            <button type=\"button\" data-drawer-backdrop=\"true\" aria-controls=\"afro-drawer-right\" class=\"text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm w-8 h-8 absolute top-2.5 end-2.5 inline-flex items-center justify-center dark:hover:bg-gray-600 dark:hover:text-white\" (click)=\"drawer?.hide()\">\n                <svg class=\"w-3 h-3\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 14 14\">\n                    <path stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6\"/>\n                </svg>\n                <span class=\"sr-only\">Close menu</span>\n            </button>\n\n        </div>\n\n    }\n</div>","/*\n * Public API Surface of afrochat-ui\n */\n\n// export * from './lib/afrochat-ui.service';\nexport * from './lib/afrochat-ui.component';\nexport { MessageInterface, UserInterface, RoomInterface, ModeratorEventInterface } from \"./lib/data/interfaces\";","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}