@acorex/components 21.0.1-next.34 → 21.0.1-next.35
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.
- package/dropdown/index.d.ts +2 -1
- package/fesm2022/acorex-components-conversation.mjs +1 -1
- package/fesm2022/acorex-components-conversation.mjs.map +1 -1
- package/fesm2022/acorex-components-conversation2.mjs +3 -3
- package/fesm2022/acorex-components-conversation2.mjs.map +1 -1
- package/fesm2022/acorex-components-dropdown.mjs +3 -3
- package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
- package/fesm2022/acorex-components-media-viewer.mjs +157 -52
- package/fesm2022/acorex-components-media-viewer.mjs.map +1 -1
- package/fesm2022/acorex-components-popover.mjs +4 -3
- package/fesm2022/acorex-components-popover.mjs.map +1 -1
- package/fesm2022/acorex-components-scheduler.mjs +6 -6
- package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
- package/fesm2022/acorex-components-wysiwyg.mjs +1 -1
- package/fesm2022/acorex-components-wysiwyg.mjs.map +1 -1
- package/media-viewer/index.d.ts +34 -11
- package/package.json +7 -7
- package/popover/index.d.ts +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-components-conversation.mjs","sources":["../../../../packages/components/conversation/src/lib/classes/events.interface.ts","../../../../packages/components/conversation/src/lib/services/conversation.service.ts","../../../../packages/components/conversation/src/lib/services/recording.service.ts","../../../../packages/components/conversation/src/lib/conversation-container/conversation-container.component.ts","../../../../packages/components/conversation/src/lib/conversation-container/conversation-container.component.html","../../../../packages/components/conversation/src/lib/conversation-input/conversation-input.component.ts","../../../../packages/components/conversation/src/lib/conversation-input/conversation-input.component.html","../../../../packages/components/conversation/src/lib/services/conversation-message-type-registry.service.ts","../../../../packages/components/conversation/src/lib/conversation-message/conversation-message.component.ts","../../../../packages/components/conversation/src/lib/conversation-message/conversation-message.component.html","../../../../packages/components/conversation/src/lib/conversation.types.ts","../../../../packages/components/conversation/src/lib/conversation-messages/conversation-message-audio/conversation-message-audio.component.ts","../../../../packages/components/conversation/src/lib/conversation-messages/conversation-message-audio/conversation-message-audio.component.html","../../../../packages/components/conversation/src/lib/conversation-view/conversation-view.component.ts","../../../../packages/components/conversation/src/lib/conversation-view/conversation-view.component.html","../../../../packages/components/conversation/src/lib/conversation-messages/conversation-message-file/conversation-message-file.component.ts","../../../../packages/components/conversation/src/lib/conversation-messages/conversation-message-file/conversation-message-file.component.html","../../../../packages/components/conversation/src/lib/conversation-messages/conversation-message-image-popup/conversation-message-image-popup.component.ts","../../../../packages/components/conversation/src/lib/conversation-messages/conversation-message-image/conversation-message-image.component.ts","../../../../packages/components/conversation/src/lib/conversation-messages/conversation-message-text/conversation-message-text.component.ts","../../../../packages/components/conversation/src/lib/conversation-messages/conversation-message-video/conversation-message-video.component.ts","../../../../packages/components/conversation/src/lib/conversation-messages/conversation-message-voice/conversation-message-voice.component.ts","../../../../packages/components/conversation/src/lib/conversation-messages/conversation-message-voice/conversation-message-voice.component.html","../../../../packages/components/conversation/src/lib/conversation.module.ts","../../../../packages/components/conversation/src/acorex-components-conversation.ts"],"sourcesContent":["import { AXEvent, AXHtmlEvent } from '@acorex/cdk/common';\n\nexport interface AXInputFileChange extends AXHtmlEvent<MouseEvent> {\n data?: any;\n}\nexport class AXConversationActionEvent extends AXEvent {\n data: any;\n}\n","import { Injectable, signal } from '@angular/core';\nimport { AXConversationMessage } from '../conversation.types';\n\n@Injectable()\nexport class AXConversationService {\n replyId = signal('');\n chats = signal<AXConversationMessage[]>([]);\n}\n","import { Injectable, WritableSignal, signal } from '@angular/core';\n\n@Injectable()\nexport class AXRecordingService {\n audioBlobs: any[] = [];\n mediaRecorder: MediaRecorder | null;\n streamBeingCaptured: any = null;\n\n timer: WritableSignal<string> = signal('00:0');\n\n protected time = {\n seconds: 0,\n minutes: 0,\n hours: 0,\n };\n\n protected timerInterval;\n\n /**\n * Starts audio recording using the browser's MediaRecorder API.\n *\n * @returns Promise<void> - Resolves when recording starts successfully, rejects if not supported.\n */\n startRecording(): Promise<void> {\n if (!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia)) {\n return Promise.reject(new Error('mediaDevices API or getUserMedia method is not supported in this browser.'));\n } else {\n return navigator.mediaDevices.getUserMedia({ audio: true }).then((stream) => {\n this.streamBeingCaptured = stream;\n this.mediaRecorder = new MediaRecorder(stream);\n this.audioBlobs = [];\n this.mediaRecorder.addEventListener('dataavailable', (event) => {\n this.audioBlobs.push(event.data);\n });\n this.mediaRecorder.start();\n this.timerInterval = setInterval(() => {\n this.calculateTime();\n }, 1000);\n });\n }\n }\n\n /**\n * Ends the current recording session and returns the recorded audio blob.\n *\n * @returns Promise<Blob> - Resolves with the recorded audio blob.\n */\n endRecording(): Promise<Blob> {\n return new Promise((resolve) => {\n const mimeType = this.mediaRecorder?.mimeType;\n this.mediaRecorder?.addEventListener('stop', () => {\n const audioBlob = new Blob(this.audioBlobs, { type: mimeType });\n resolve(audioBlob);\n });\n this.mediaRecorder?.stop();\n this.streamBeingCaptured.getTracks().forEach((track) => track.stop());\n this.mediaRecorder = null;\n this.streamBeingCaptured = null;\n this.resetTimer();\n });\n }\n\n /**\n * Calculates and updates the recording time, incrementing seconds, minutes, and hours as needed.\n */\n calculateTime(): void {\n this.time.seconds++;\n if (this.time.seconds >= 60) {\n this.time.seconds = 0;\n this.time.minutes++;\n if (this.time.minutes >= 60) {\n this.time.minutes = 0;\n this.time.hours++;\n }\n }\n\n const formattedTime =\n (this.time.hours > 0 ? this.time.hours + ':' : '') +\n (this.time.minutes < 10 ? '0' + this.time.minutes : this.time.minutes) +\n ':' +\n (this.time.seconds < 10 ? '0' + this.time.seconds : this.time.seconds);\n\n this.timer.set(formattedTime);\n }\n\n /**\n * Resets the recording timer to zero and clears the timer interval.\n */\n resetTimer(): void {\n clearInterval(this.timerInterval);\n this.time.seconds = 0;\n this.time.minutes = 0;\n this.time.hours = 0;\n this.timer.set('00:0');\n }\n}\n","import { AXComponent, AXFocusableComponent, AXValuableComponent } from '@acorex/cdk/common';\nimport { Component, effect, forwardRef, inject, input, ViewEncapsulation } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { AXConversationMessage } from '../conversation.types';\nimport { AXConversationService } from '../services/conversation.service';\nimport { AXRecordingService } from '../services/recording.service';\n\n/**\n * A container for displaying and managing conversations.\n * @category Components\n */\n@Component({\n selector: 'ax-conversation-container',\n templateUrl: './conversation-container.component.html',\n styleUrl: './conversation-container.component.scss',\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: AXComponent, useExisting: AXConversationContainerComponent },\n { provide: AXFocusableComponent, useExisting: AXConversationContainerComponent },\n { provide: AXValuableComponent, useExisting: AXConversationContainerComponent },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AXConversationContainerComponent),\n multi: true,\n },\n AXConversationService,\n AXRecordingService,\n ],\n})\nexport class AXConversationContainerComponent {\n chatData = input<AXConversationMessage[]>([]);\n private conversationService = inject(AXConversationService);\n\n #init = effect(() => {\n this.conversationService.chats.set(this.chatData());\n });\n}\n","<div class=\"ax-conversation-container\">\n <ng-content> </ng-content>\n</div>\n","import {\n AXClickEvent,\n AXComponent,\n AXEvent,\n AXFocusableComponent,\n AXValuableComponent,\n MXInputBaseValueComponent,\n MXLookComponent,\n} from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorIconComponent, AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownPanelComponent } from '@acorex/components/dropdown';\nimport { AXLoadingSpinnerComponent } from '@acorex/components/loading';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n Signal,\n ViewChild,\n ViewEncapsulation,\n WritableSignal,\n computed,\n contentChild,\n forwardRef,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { classes } from 'polytype';\nimport { AXConversationMessage } from '../conversation.types';\nimport { AXConversationService } from '../services/conversation.service';\nimport { AXRecordingService } from '../services/recording.service';\n\n/**\n * An input component for entering conversation messages.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-conversation-input',\n templateUrl: './conversation-input.component.html',\n styleUrls: ['./conversation-input.component.scss'],\n inputs: ['look', 'placeholder'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: AXComponent, useExisting: AXConversationInputComponent },\n { provide: AXFocusableComponent, useExisting: AXConversationInputComponent },\n { provide: AXValuableComponent, useExisting: AXConversationInputComponent },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AXConversationInputComponent),\n multi: true,\n },\n ],\n imports: [\n AXButtonComponent,\n AXDecoratorIconComponent,\n AXDropdownPanelComponent,\n FormsModule,\n AXLoadingSpinnerComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXDecoratorModule,\n ],\n})\nexport class AXConversationInputComponent extends classes(MXInputBaseValueComponent<string>, MXLookComponent) {\n @ViewChild('inputFile') protected inputFile: ElementRef<HTMLInputElement>;\n\n protected sendIcon = contentChild('ax-icon');\n\n protected onActionClose = output<void>();\n\n protected conversationService = inject(AXConversationService);\n\n protected chats: Signal<AXConversationMessage[]> = computed(() => {\n return this.conversationService.chats();\n });\n\n protected actionIcon = signal<string>(null);\n protected actionContent = signal<string>(null);\n protected actionShowState = signal<boolean>(false);\n protected actionUser = signal<string>(null);\n protected actionCloseCallback = signal<() => void>(() => {\n return;\n });\n\n protected replyChat: Signal<AXConversationMessage> = computed(() => {\n const findMessage = this.chats().find((item) => item.id === this.conversationService.replyId());\n return findMessage;\n });\n\n public setActionBoxContainer(icon: string, content: string, user?: string, closeCallback?: () => void) {\n this.actionIcon.set(icon);\n this.actionContent.set(content);\n this.actionShowState.set(true);\n this.actionUser.set(user);\n this.actionCloseCallback.set(closeCallback);\n }\n\n /** Maximum length of input text */\n readonly maxLength = input<number>();\n\n /** Indicates if an attachment is present */\n readonly hasAttachment = input<boolean>(true);\n\n /** Indicates if voice recording is enabled */\n readonly hasVoice = input<boolean>(true);\n\n readonly hasEmoji = input<boolean>(true);\n\n readonly isLoading = input<boolean>(false);\n\n /** Acceptable file types for attachment */\n readonly acceptFileType = input<string>('*');\n\n /**\n * Emitted when the send button is clicked.\n *\n * @event\n */\n onSendClick = output<AXClickEvent>();\n\n /**\n * Emitted when recording starts.\n *\n * @event\n */\n onStartRecording = output<AXClickEvent>();\n\n /**\n * Emitted when recording is canceled.\n *\n * @event\n */\n onCancelRecording = output<AXClickEvent>();\n\n onEnterPressed = output<AXEvent>();\n\n /**\n * @ignore\n */\n protected recording: WritableSignal<boolean> = signal(false);\n\n /**\n * @ignore\n */\n protected recordingService: AXRecordingService = inject(AXRecordingService);\n\n /**\n * @ignore\n */\n protected _updateOn: 'change' | 'blur' | 'submit' = 'change';\n\n /**\n * @ignore\n */\n protected _handleModelChange(value: string) {\n this.commitValue(value, true);\n }\n\n /**\n * Initiates recording when the record button is clicked.\n * Emits an event when recording starts.\n * @ignore\n */\n protected handleRecordClick() {\n this.recording.set(true);\n this.recordingService\n ?.startRecording()\n .then(() => {\n this.onStartRecording.emit({\n component: this,\n data: { recording: true },\n isUserInteraction: true,\n });\n })\n .catch((e) => {\n throw e;\n });\n }\n\n /**\n * Cancels the recording and emits an event to indicate cancellation.\n * @ignore\n */\n protected handleCancelRecordingClick() {\n this.recording.set(false);\n\n this.onCancelRecording.emit({\n component: this,\n data: { value: null },\n });\n }\n\n protected shiftState = false;\n protected keyDownHandler(e: KeyboardEvent) {\n if (e.key === 'Shift') {\n this.shiftState = true;\n }\n this.onKeyDown.emit({\n component: this,\n nativeEvent: e,\n });\n }\n protected keyUpHandler(e: KeyboardEvent) {\n if (e.key === 'Shift') {\n this.shiftState = false;\n }\n this.onKeyUp.emit({\n component: this,\n nativeEvent: e,\n });\n }\n protected keyPressHandler(e: KeyboardEvent) {\n if (e.key === 'Enter' && !this.shiftState) {\n e.preventDefault();\n this.onEnterPressed.emit({ component: this });\n }\n this.onKeyPress.emit({\n component: this,\n nativeEvent: e,\n });\n }\n /**\n * Opens the file picker for attachment.\n * @ignore\n */\n protected handleAttachClick() {\n this.inputFile.nativeElement.click();\n }\n\n /**\n * Emits the selected files when the file input changes.\n * @ignore\n */\n protected handleChangeFile(event: Event) {\n this.onSendClick.emit({\n component: this,\n data: { value: (event.target as HTMLInputElement).files, type: 'file' },\n });\n }\n\n /**\n * Emits the text value and optional replyChat when the send button is clicked.\n * @ignore\n */\n protected handleSendClick() {\n this.onSendClick.emit({\n component: this,\n data: { value: this.value, replyChat: this.replyChat() || null, type: 'text' },\n isUserInteraction: true,\n });\n this.actionShowState.set(false);\n }\n\n /**\n * Ends recording and emits the recorded voice data when the send voice button is clicked.\n * @ignore\n */\n protected handleSendVoiceClick() {\n this.recordingService.endRecording().then((c) => {\n this.recording.set(false);\n this.onSendClick.emit({\n component: this,\n data: { value: c, type: 'voice' },\n isUserInteraction: true,\n });\n });\n }\n\n /**\n * Clears the reply ID when closing a reply.\n * @ignore\n */\n protected closeReplyHandler() {\n this.actionShowState.set(false);\n this.actionCloseCallback();\n this.onActionClose.emit();\n }\n\n @HostBinding('attr.name')\n private get __hostName(): string {\n return this.name;\n }\n}\n","@if (actionShowState()) {\n <div class=\"ax-editor-reply-container ax-editor-container ax-default {{ look }}\">\n @if (actionUser()) {\n <ax-text> {{ actionUser() }}</ax-text>\n }\n <div class=\"ax-reply-container\">\n <div class=\"ax-reply-start\">\n <i [class]=\"actionIcon()\"></i>\n <p>{{ actionContent() }}</p>\n </div>\n <i (click)=\"closeReplyHandler()\" class=\"fa-solid fa-xmark ax-cursor-pointer\"></i>\n </div>\n </div>\n}\n\n<div class=\"ax-conversation-input ax-editor-container ax-default {{ look }}\" [class.ax-state-recording]=\"recording()\">\n @if (recording()) {\n <div class=\"ax-conversation-input-start-side\">\n <span class=\"ax-record-dot\"></span>\n <span>{{ recordingService.timer() }}</span>\n </div>\n <div class=\"ax-conversation-input-main-side\">\n <ax-button\n class=\"ax-sm\"\n look=\"blank\"\n color=\"primary\"\n [text]=\"'@acorex:common.actions.cancel' | translate | async\"\n (onClick)=\"handleCancelRecordingClick()\"\n ></ax-button>\n </div>\n <div class=\"ax-conversation-input-end-side\">\n <ax-button look=\"solid\" color=\"danger\" class=\"ax-blob ax-sm\" (onClick)=\"handleSendVoiceClick()\">\n <ax-icon>\n <i class=\"ax-icon ax-icon-send\"></i>\n </ax-icon>\n </ax-button>\n </div>\n } @else {\n @if (hasEmoji()) {\n <div class=\"ax-conversation-input-start-side\">\n <ax-button look=\"blank\" class=\"ax-sm\">\n <ax-icon>\n <i class=\"ax-icon ax-icon-emoji\"></i>\n </ax-icon>\n <ax-dropdown-panel>\n <ng-container>\n <div class=\"ax-emoji-container\">\n <div>⚠️</div>\n <div>➡️</div>\n <div>🔃</div>\n <div>🔷</div>\n <div>🤚</div>\n <div>😂</div>\n <div>😊</div>\n </div>\n </ng-container>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n }\n\n <textarea\n class=\"ax-conversation-input-main-side\"\n oninput='this.style.height = \"\";this.style.height = this.scrollHeight + \"px\"'\n type=\"text\"\n rows=\"1\"\n [id]=\"id\"\n [attr.placeholder]=\"placeholder\"\n [attr.maxlength]=\"maxLength()\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [tabindex]=\"tabIndex\"\n [ngModel]=\"value\"\n (ngModelChange)=\"_handleModelChange($event)\"\n [ngModelOptions]=\"{ updateOn: _updateOn }\"\n (keydown)=\"keyDownHandler($event)\"\n (keyup)=\"keyUpHandler($event)\"\n (keypress)=\"keyPressHandler($event)\"\n (focus)=\"emitOnFocusEvent($event)\"\n (blur)=\"emitOnBlurEvent($event)\"\n >\n </textarea>\n\n <div class=\"ax-conversation-input-end-side\">\n @if (!value) {\n @if (hasAttachment()) {\n <ax-button look=\"blank\" class=\"ax-sm\" (onClick)=\"handleAttachClick()\">\n <ax-icon>\n <i class=\"ax-icon ax-icon-attach\"></i>\n </ax-icon>\n </ax-button>\n <input\n multiple\n #inputFile\n [accept]=\"acceptFileType()\"\n type=\"file\"\n class=\"ax-attach-input\"\n (change)=\"handleChangeFile($event)\"\n />\n }\n @if (hasVoice()) {\n <ax-button look=\"blank\" class=\"ax-sm\" (onClick)=\"handleRecordClick()\">\n <ax-icon>\n <i class=\"ax-icon ax-icon-mic\"></i>\n </ax-icon>\n </ax-button>\n }\n } @else {\n <ax-button [disabled]=\"isLoading()\" look=\"solid\" color=\"primary\" class=\"ax-sm\" (onClick)=\"handleSendClick()\">\n @if (isLoading()) {\n <ax-loading-spinner color=\"primary\"></ax-loading-spinner>\n } @else {\n @if (sendIcon()) {\n <ng-content select=\"ax-icon\"></ng-content>\n } @else {\n <ax-icon>\n <i class=\"ax-icon ax-icon-arrow-long-up\"></i>\n </ax-icon>\n }\n }\n </ax-button>\n }\n </div>\n }\n</div>\n","import { Injectable } from '@angular/core';\nimport { AXConversationMessageType } from '../conversation.types';\n\n@Injectable({ providedIn: 'root' })\nexport class AXConversationMessageTypeRegistryService {\n private plugins: Map<string, AXConversationMessageType> = new Map<string, AXConversationMessageType>();\n\n register(...plugins: AXConversationMessageType[]) {\n plugins.forEach((p) => this.plugins.set(p.name, p));\n }\n\n public resolve(name: string): AXConversationMessageType | undefined {\n return this.plugins.get(name);\n }\n}\n","import { AXClickEvent, AXComponent, MXBaseComponent } from '@acorex/cdk/common';\nimport { AXAvatarComponent } from '@acorex/components/avatar';\nimport { AXButtonComponent, AXButtonItemComponent, AXButtonItemListComponent } from '@acorex/components/button';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { isBrowser } from '@acorex/core/platform';\nimport { CdkPortalOutlet, CdkPortalOutletAttachedRef, ComponentPortal } from '@angular/cdk/portal';\nimport { AsyncPipe, CommonModule } from '@angular/common';\nimport {\n Component,\n ComponentRef,\n HostBinding,\n TemplateRef,\n ViewEncapsulation,\n computed,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport {\n AXConversationMenuOpeningEvent,\n AXConversationMessage,\n AXConversationMessageAction,\n} from '../conversation.types';\nimport { AXConversationMessageTypeRegistryService } from '../services/conversation-message-type-registry.service';\nimport { AXConversationService } from '../services/conversation.service';\n\n/**\n * A component for displaying individual conversation messages.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-conversation-message',\n templateUrl: './conversation-message.component.html',\n styleUrls: ['./conversation-message.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXAvatarComponent,\n CdkPortalOutlet,\n AXButtonComponent,\n AXDecoratorIconComponent,\n AXPopoverComponent,\n AXDecoratorGenericComponent,\n AXButtonItemListComponent,\n AXButtonItemComponent,\n AsyncPipe,\n AXFormatPipe,\n AXMenuModule,\n CommonModule,\n ],\n providers: [{ provide: AXComponent, useExisting: AXConversationMessageComponent }],\n})\nexport class AXConversationMessageComponent extends MXBaseComponent {\n protected popover = viewChild<AXPopoverComponent>('popover');\n\n readonly isReplyArrowShown = input(true);\n readonly chatMessage = input<AXConversationMessage>();\n readonly avatar = input<TemplateRef<any>>(null);\n\n protected conversationService = inject(AXConversationService);\n protected registryService = inject(AXConversationMessageTypeRegistryService);\n\n protected actionButtonItemsPrivate = signal<AXConversationMessageAction[]>([]);\n private actionButtonItemsPublic: AXConversationMenuOpeningEvent = {\n items: [],\n canceled: false,\n data: this.chatMessage(),\n };\n\n onActionMenuOpening = output<AXConversationMenuOpeningEvent>();\n\n onReplyClick = output<AXClickEvent>();\n\n protected portal = computed<ComponentPortal<any> | null>(() => {\n return new ComponentPortal(this.registryService.resolve(this.chatMessage().type).component);\n });\n\n protected messageType = computed(() => {\n return this.chatMessage().type;\n });\n\n protected get isOwn(): boolean {\n return !this.chatMessage().fromId;\n }\n\n /**\n * Handles the action button click and opens the action menu.\n */\n protected handleActionClick(): void {\n this.actionButtonItemsPublic = {\n items: [],\n canceled: false,\n data: this.chatMessage(),\n };\n\n this.onActionMenuOpening.emit(this.actionButtonItemsPublic);\n\n if (this.actionButtonItemsPublic.canceled) return;\n\n this.actionButtonItemsPrivate.set(this.actionButtonItemsPublic.items);\n }\n\n protected _handleAttached(ref: CdkPortalOutletAttachedRef) {\n ref = ref as ComponentRef<unknown>;\n if (ref.instance && isBrowser()) {\n Object.assign(ref.instance, { message: this.chatMessage() });\n\n const prefixContainer = this.getHostElement().querySelector('.ax-message-prefix');\n const suffixContainer = this.getHostElement().querySelector('.ax-message-suffix');\n prefixContainer.innerHTML = '';\n suffixContainer.innerHTML = '';\n\n const prefix = this.getHostElement().querySelector('ax-prefix') as HTMLDivElement;\n const suffix = this.getHostElement().querySelector('ax-suffix') as HTMLDivElement;\n\n if (prefix && prefixContainer) {\n prefix.style.display = 'flex';\n prefixContainer.append(prefix);\n }\n if (suffix && suffixContainer) {\n suffix.style.display = 'flex';\n suffixContainer.append(suffix);\n }\n }\n }\n\n /**\n * Handles the resend button click and closes the popover.\n */\n protected handleResendClick(): void {\n this.popover()?.close();\n this.chatMessage().onResendClick();\n }\n\n /**\n * Handles the delete button click and closes the popover.\n */\n protected handleDeleteClick(): void {\n this.popover()?.close();\n this.chatMessage().onDeleteClick();\n }\n\n /**\n * Handles reply functionality by setting the reply ID and emitting the reply click event.\n *\n * @param e - The conversation message to reply to.\n */\n protected replyHandler(e: AXConversationMessage): void {\n this.conversationService.replyId.set(e.id);\n this.onReplyClick.emit({ data: e, component: this });\n }\n\n @HostBinding('class')\n get __hostClass(): string {\n return `${this.isOwn ? 'ax-state-own' : ''} ${!this.isOwn ? 'ax-state-other' : ''}`;\n }\n}\n","@if (chatMessage().fromId) {\n @if (avatar()) {\n <ng-container [ngTemplateOutlet]=\"avatar()\"></ng-container>\n } @else {\n <ax-avatar color=\"primary\" [size]=\"36\"> </ax-avatar>\n }\n}\n\n@if (isOwn && isReplyArrowShown()) {\n <i (click)=\"replyHandler(chatMessage())\" class=\"fa-solid fa-reply ax-cursor-pointer\"></i>\n}\n\n<div\n class=\"ax-message-content\"\n [class]=\"'ax-type-' + messageType()\"\n [class.ax-state-own]=\"!chatMessage().fromId\"\n [class.ax-state-other]=\"chatMessage().fromId\"\n>\n <div class=\"ax-action-button\">\n @if (chatMessage()?.userName) {\n <div class=\"ax-message-user-name\">\n <ax-text>{{ chatMessage().userName }}</ax-text>\n </div>\n }\n\n @if (chatMessage()?.showActionButton) {\n <div class=\"ax-message-action-button\">\n <ax-menu openOn=\"click\" [hasArrow]=\"false\">\n <ax-menu-item class=\"ax-parent-menu-item\">\n <ax-text (click)=\"handleActionClick()\">...</ax-text>\n\n @for (item of actionButtonItemsPrivate(); track item.text) {\n <ax-menu-item [color]=\"item.color\" (onClick)=\"item.onClick(chatMessage().id)\">\n <ax-text>{{ item.text }}</ax-text>\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"></ax-icon>\n </ax-prefix>\n\n @for (innerItem of item.items; track innerItem.text) {\n <ax-menu-item [color]=\"innerItem.color\" (onClick)=\"innerItem.onClick(chatMessage().id)\">\n <ax-text>{{ innerItem.text }}</ax-text>\n <ax-prefix>\n <ax-icon [icon]=\"innerItem.icon\"></ax-icon>\n </ax-prefix>\n </ax-menu-item>\n }\n </ax-menu-item>\n }\n </ax-menu-item>\n </ax-menu>\n </div>\n }\n </div>\n\n <ng-template [cdkPortalOutlet]=\"portal()\" (attached)=\"_handleAttached($event)\"></ng-template>\n\n <div class=\"ax-chat-message-status\">\n <div class=\"ax-message-prefix\"></div>\n <div>\n <div class=\"ax-message-suffix\"></div>\n <span>\n {{ chatMessage().sendTime | format: 'datetime' : 'HH:mm' | async }}\n </span>\n <span>\n @if (isOwn) {\n @if (chatMessage().deliverTime && chatMessage().sendTime) {\n <i class=\"ax-icon ax-icon-check ax-message-status\"></i>\n }\n @if (chatMessage().readTime && chatMessage().sendTime) {\n <i class=\"ax-icon ax-icon-dobble-check ax-message-status\"></i>\n }\n }\n </span>\n </div>\n </div>\n</div>\n\n@if (!chatMessage().sendTime) {\n <ax-button class=\"ax-resend-button ax-xs\" color=\"danger\" #b>\n <ax-icon class=\"ax-icon ax-icon-error\"></ax-icon>\n\n <ax-popover [target]=\"b\" placement=\"bottom-end\" #popover>\n <div class=\"ax-overlay-pane\">\n <ax-content> </ax-content>\n <ax-button-item-list>\n @if (chatMessage().onResendClick) {\n <ax-button-item text=\"Resend\" (onClick)=\"handleResendClick()\">\n <ax-icon class=\"ax-icon ax-icon-reload ax-bold\"></ax-icon>\n </ax-button-item>\n }\n @if (chatMessage().onDeleteClick) {\n <ax-button-item text=\"Delete\" color=\"danger\" (onClick)=\"handleDeleteClick()\">\n <ax-icon class=\"ax-icon ax-icon-clear ax-bold\"></ax-icon>\n </ax-button-item>\n }\n </ax-button-item-list>\n </div>\n </ax-popover>\n </ax-button>\n}\n\n@if (!isOwn && isReplyArrowShown()) {\n <i (click)=\"replyHandler(chatMessage())\" class=\"fa-solid fa-reply ax-rotate ax-cursor-pointer\"></i>\n}\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport { Injectable, Type } from '@angular/core';\n\nexport interface AXConversationMessageType {\n name: string;\n component: Type<any>;\n}\n\nexport interface AXConversationMessage {\n id: string;\n type: string;\n sendTime: Date | null;\n deliverTime?: Date;\n readTime?: Date;\n replyTo?: {\n id: string;\n };\n content: any;\n fromId?: string;\n name: string;\n onResendClick?: () => void;\n onDeleteClick?: () => void;\n onDownloadClick?: () => void;\n onCancelClick?: () => void;\n showActionButton?: boolean;\n userName?: string;\n}\n\nexport abstract class AXConversationMessageAction {\n color?: AXStyleColorType;\n text: string;\n icon?: string;\n onClick: (id: string) => void;\n items?: AXConversationMessageAction[];\n}\n\nexport class AXConversationMenuOpeningEvent {\n items: AXConversationMessageAction[];\n canceled = false;\n data: AXConversationMessage;\n}\n\n@Injectable()\nexport class AXConversationMessageBaseComponent {\n message: AXConversationMessage;\n}\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXRangeSliderComponent } from '@acorex/components/range-slider';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, OnDestroy, Renderer2, ViewEncapsulation, afterNextRender, inject, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXConversationMessageBaseComponent } from '../../conversation.types';\n\n/**\n * Component for displaying audio messages in a conversation.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-conversation-message-audio',\n templateUrl: './conversation-message-audio.component.html',\n styleUrls: ['./conversation-message-audio.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXDecoratorGenericComponent,\n AXButtonComponent,\n AXRangeSliderComponent,\n FormsModule,\n AsyncPipe,\n AXFormatPipe,\n ],\n providers: [{ provide: AXComponent, useExisting: AXConversationMessageAudioComponent }],\n})\nexport class AXConversationMessageAudioComponent extends AXConversationMessageBaseComponent implements OnDestroy {\n private render = inject(Renderer2);\n /**\n * @ignore\n */\n protected audioState = signal<'playing' | 'paused'>('paused');\n\n /**\n * @ignore\n */\n // audioTag = viewChild<ElementRef<HTMLAudioElement>>('a');\n protected audioTag = signal(new Audio());\n\n /**\n * @ignore\n */\n protected audioRate = signal(1);\n\n /**\n * @ignore\n */\n protected currentTime = signal(0);\n\n /**\n * @ignore\n */\n protected duration = signal(0);\n\n /**\n * @ignore\n */\n protected currentTimeFormat = signal(0);\n\n /**\n * @ignore\n */\n protected durationFormat = signal(0);\n\n /**\n * @ignore\n */\n protected endedEvent;\n\n /**\n * @ignore\n */\n protected durationchangeEvent;\n\n /**\n * @ignore\n */\n protected timeupdateEvent;\n\n /**\n * @ignore\n */\n constructor() {\n super();\n afterNextRender(() => {\n this.audioTag().autoplay = false;\n this.audioTag().src = this.message.content;\n this.render.listen(this.audioTag(), 'ended', this.endedFunction.bind(this));\n this.render.listen(this.audioTag(), 'durationchange', this.durationchangeFunction.bind(this));\n this.render.listen(this.audioTag(), 'timeupdate', this.timeupdateFunction.bind(this));\n });\n }\n\n /**\n * @ignore\n */\n ngOnDestroy(): void {\n if (this.endedEvent) {\n this.endedEvent();\n }\n if (this.durationchangeEvent) {\n this.durationchangeEvent();\n }\n if (this.timeupdateEvent) {\n this.timeupdateEvent();\n }\n }\n\n /**\n * @ignore\n */\n protected endedFunction() {\n this.audioState.set('paused');\n this.audioTag().pause();\n this.audioTag().currentTime = 0;\n this.currentTime.set(0);\n }\n\n /**\n * @ignore\n */\n protected durationchangeFunction() {\n if (this.audioTag().duration === Infinity) return;\n this.duration.set(this.audioTag().duration);\n this.durationFormat.set(Math.ceil(this.audioTag().duration) * 1000);\n }\n\n /**\n * @ignore\n */\n protected timeupdateFunction() {\n this.currentTime.set(this.audioTag().currentTime);\n this.currentTimeFormat.set(Math.ceil(this.audioTag().currentTime * 1000));\n }\n /**\n * Seeks to the specified time and resumes audio playback.\n *\n * @param e - Time in seconds to seek to.\n * @ignore\n */\n protected clickHandler(e: any) {\n this.audioTag().currentTime = e as number;\n }\n\n /**\n * Pauses the audio and updates the state to 'paused'.\n * @ignore\n */\n protected handlePauseClick() {\n this.audioState.set('paused');\n this.audioTag().pause();\n }\n\n /**\n * Plays the audio and updates the state to 'playing'.\\\n * @ignore\n */\n protected handlePlayClick() {\n this.audioState.set('playing');\n this.audioTag().play();\n }\n\n /**\n * Toggles the playback rate of the audio between 1x, 1.5x, and 2x.\n * @ignore\n */\n protected handleRateClick() {\n if (this.audioRate() === 1) {\n this.audioRate.set(1.5);\n this.audioTag().playbackRate = 1.5;\n } else if (this.audioRate() === 1.5) {\n this.audioRate.set(2);\n this.audioTag().playbackRate = 2;\n } else if (this.audioRate() === 2) {\n this.audioRate.set(1);\n this.audioTag().playbackRate = 1;\n }\n }\n}\n","<ax-prefix>\n <div class=\"ax-time-rate\">\n @switch (audioState()) {\n @case ('paused') {\n {{ currentTimeFormat() | format: 'time-duration' | async }}\n }\n @case ('playing') {\n {{ currentTimeFormat() | format: 'time-duration' | async }}\n }\n @default {\n {{ durationFormat() | format: 'time-duration' | async }}\n }\n }\n <ax-button\n color=\"primary\"\n look=\"solid\"\n text=\"{{ audioRate() }}X\"\n class=\"ax-audio-speed\"\n (click)=\"handleRateClick()\"\n ></ax-button>\n </div>\n</ax-prefix>\n<div class=\"ax-conversation-controller\">\n @switch (audioState()) {\n @case ('playing') {\n <button (click)=\"handlePauseClick()\">\n <i class=\"ax-icon ax-icon-pause\"></i>\n </button>\n }\n @case ('paused') {\n <button (click)=\"handlePlayClick()\">\n <i class=\"ax-icon ax-icon-play\"></i>\n </button>\n }\n }\n</div>\n<ax-range-slider\n class=\"ax-modify-bgSlider\"\n (ngModelChange)=\"clickHandler($event)\"\n [max]=\"duration()\"\n [min]=\"0\"\n mode=\"single\"\n [ngModel]=\"currentTime()\"\n color=\"primary\"\n>\n</ax-range-slider>\n","import { AXClickEvent, AXComponent, AXEvent, MXBaseComponent } from '@acorex/cdk/common';\nimport { AXVirtualScrollingContainerDirective, AXVirtualScrollingItemDirective } from '@acorex/cdk/virtual-scroll';\nimport {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n ViewEncapsulation,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { AXConversationActionEvent } from '../classes/events.interface';\nimport { AXConversationMessageComponent } from '../conversation-message/conversation-message.component';\nimport { AXConversationMenuOpeningEvent } from '../conversation.types';\nimport { AXConversationService } from '../services/conversation.service';\n\n/**\n * Displays the conversation view with messages and interactions.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-conversation-view',\n templateUrl: './conversation-view.component.html',\n styleUrls: ['./conversation-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXVirtualScrollingContainerDirective, AXConversationMessageComponent, AXVirtualScrollingItemDirective],\n providers: [{ provide: AXComponent, useExisting: AXConversationViewComponent }],\n})\nexport class AXConversationViewComponent extends MXBaseComponent {\n protected conversationService = inject(AXConversationService);\n\n readonly chatBoxHeight = input<string>('30vh');\n\n readonly isReplyArrowShown = input(true);\n\n readonly avatar = input<TemplateRef<any>>(null);\n\n onActionMenuOpening = output<AXConversationMenuOpeningEvent>();\n\n onAction = output<AXConversationActionEvent>();\n\n onReplyClick = output<AXClickEvent>();\n\n onScrollEnd = output<AXEvent>();\n\n /**\n * Updates the previous items in the conversation by prepending new items to the beginning of the chat list.\n *\n * @param item - Array of items to prepend to the conversation.\n */\n updatePrevItems(item: any[]): void {\n this.conversationService.chats.update((prev) => [...item, ...prev]);\n }\n\n /**\n * Calls for an update by emitting the onScrollEnd event.\n */\n callForUpdate(): void {\n this.onScrollEnd.emit({ component: this });\n }\n\n /**\n * Adds a new item to the end of the conversation chat list.\n *\n * @param item - The item to add to the conversation.\n */\n addNewItem(item: any): void {\n this.conversationService.chats.update((prev) => [...prev, item]);\n }\n}\n","<div axVirtualScrollingContainer (ScrollEnd)=\"callForUpdate()\" [height]=\"chatBoxHeight()\">\n @for (item of conversationService.chats(); track item.id) {\n <ax-conversation-message\n animate.enter=\"ax-fade-slide-in\"\n (onReplyClick)=\"onReplyClick.emit($event)\"\n [avatar]=\"avatar()\"\n (onActionMenuOpening)=\"onActionMenuOpening.emit($event)\"\n [isReplyArrowShown]=\"isReplyArrowShown()\"\n axVirtualScrollingItem\n [chatMessage]=\"item\"\n ></ax-conversation-message>\n }\n</div>\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { AXComponent } from '@acorex/cdk/common';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXLoadingSpinnerComponent } from '@acorex/components/loading';\nimport { AXFileService } from '@acorex/core/file';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, ViewEncapsulation, afterNextRender, inject, signal } from '@angular/core';\nimport { AXConversationViewComponent } from '../../conversation-view/conversation-view.component';\nimport { AXConversationMessageBaseComponent } from '../../conversation.types';\n\n/**\n * Component for displaying file messages in a conversation.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-conversation-message-file',\n templateUrl: './conversation-message-file.component.html',\n styleUrl: './conversation-message-file.component.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [AXDecoratorGenericComponent, AXLoadingSpinnerComponent, AsyncPipe, AXFormatPipe],\n providers: [{ provide: AXComponent, useExisting: AXConversationFileMessageComponent }],\n})\nexport class AXConversationFileMessageComponent extends AXConversationMessageBaseComponent {\n #init = afterNextRender(() => {\n if (this.message.name) {\n this.fileName.set(this.message.name);\n this.fileSize.set(this.fileService.getSize(this.message.content) as number);\n } else {\n this.fileName.set(this.message.content[0].name);\n this.fileSize.set(this.message.content[0].size);\n }\n });\n\n /**\n * @ignore\n */\n protected fileState = signal<'loading' | 'ready' | 'error'>('ready');\n /**\n * @ignore\n */\n protected fileSize = signal<number>(null);\n /**\n * @ignore\n */\n protected fileName = signal<string>('');\n\n /**\n * @ignore\n */\n private fileService = inject(AXFileService);\n\n /**\n * @ignore\n */\n private parent = inject(AXConversationViewComponent);\n\n /**\n * Emits a download action event for the file.\n * @ignore\n */\n protected handleDownloadFile() {\n this.parent.onAction.emit({ component: this, data: this.message, isUserInteraction: true });\n }\n\n /**\n * Emits a cancel action event for the file loading.\n * @ignore\n */\n protected handleCancelLoading() {\n this.parent.onAction.emit({ component: this, data: this.message, isUserInteraction: true });\n }\n}\n","<ax-prefix>\n {{ fileSize() | format: 'filesize' | async }}\n</ax-prefix>\n<div class=\"ax-file-container\">\n <div class=\"ax-conversation-controller\">\n @switch (fileState()) {\n @case ('ready') {\n <button (click)=\"handleDownloadFile()\">\n <i class=\"ax-icon ax-icon-download\"></i>\n </button>\n }\n\n @default {\n <button (click)=\"handleCancelLoading()\">\n <ax-loading-spinner\n [size]=\"24\"\n [stroke]=\"2\"\n [color]=\"message.fromId ? 'white' : 'warning'\"\n ></ax-loading-spinner>\n </button>\n }\n }\n </div>\n\n <div class=\"ax-file-name\">{{ fileName() }}</div>\n</div>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * A popup component for displaying an image in full view.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-conversation-message-image-popup',\n template: ` <img class=\"ax-image-popup\" [src]=\"url\" alt=\"\" />`,\n styleUrl: './conversation-message-image-popup.component.scss',\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: AXComponent, useExisting: ConversationMessageImagePopupComponent }],\n})\nexport class ConversationMessageImagePopupComponent {\n /**\n * @ignore\n */\n protected url: string;\n}\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXPopupService, AXPopupSizeType } from '@acorex/components/popup';\nimport { Component, afterNextRender, inject, signal } from '@angular/core';\nimport { AXConversationMessageBaseComponent } from '../../conversation.types';\nimport { ConversationMessageImagePopupComponent } from '../conversation-message-image-popup/conversation-message-image-popup.component';\n\n/**\n * A component for displaying an image within a conversation message.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-conversation-message-image',\n template: `<img (click)=\"openPopup()\" [src]=\"_imageUrl()\" alt=\"\" /> `,\n styles: `\n img {\n cursor: pointer;\n width: 100%;\n height: 100%;\n }\n `,\n inputs: ['message'],\n providers: [{ provide: AXComponent, useExisting: AXConversationMessageImageComponent }],\n})\nexport class AXConversationMessageImageComponent extends AXConversationMessageBaseComponent {\n /**\n * @ignore\n */\n protected _imageUrl = signal('');\n\n /**\n * @ignore\n */\n private popup: AXPopupService = inject(AXPopupService);\n\n /**\n * @ignore\n */\n protected _options = {\n header: true,\n footer: false,\n size: 'md',\n draggable: true,\n hasBackdrop: true,\n closeButton: true,\n closeOnBackdropClick: false,\n };\n\n #init = afterNextRender(() => {\n this._imageUrl.set(this.message?.content);\n });\n\n /**\n * Opens a popup displaying the image with options for draggable, size, and backdrop.\n * @ignore\n */\n protected openPopup() {\n this.popup\n .open(ConversationMessageImagePopupComponent, {\n draggable: this._options.draggable,\n header: this._options.header,\n size: this._options.size as AXPopupSizeType,\n hasBackdrop: this._options.hasBackdrop,\n closeButton: this._options.closeButton,\n closeOnBackdropClick: this._options.closeOnBackdropClick,\n data: {\n url: this._imageUrl(),\n },\n })\n .then((c) => {\n console.log(c);\n });\n }\n}\n","import { AXComponent } from '@acorex/cdk/common';\nimport { Component, OnInit, ViewEncapsulation, inject, signal } from '@angular/core';\nimport { AXConversationMessage, AXConversationMessageBaseComponent } from '../../conversation.types';\nimport { AXConversationService } from '../../services/conversation.service';\n\n/**\n * A component for displaying a text message with optional reply content, including text, images, videos, files, and audio.\n *\n * @category Components\n */\n@Component({\n template: `\n @if (replyText()) {\n <div class=\"ax-message-reply-container\">{{ replyText().content }}</div>\n }\n\n @if (replyImage()) {\n <div class=\"ax-image-reply-container\"><img [src]=\"replyImage().content\" alt=\"\" /></div>\n }\n\n @if (replyVideo()) {\n <div class=\"ax-video-reply-container\"><video [src]=\"replyVideo().content\"></video></div>\n }\n\n @if (replyFile()) {\n <div class=\"ax-message-reply-container\">\n <div class=\"file\">\n <i class=\"fa-regular fa-folder-open\"></i>\n {{ replyFile().name }}\n </div>\n </div>\n }\n\n @if (replyAudio() || replyVoice()) {\n <div class=\"ax-message-reply-container\">{{ replyAudio().type }}</div>\n }\n\n <div class=\"ax-text-message\" [innerHtml]=\"_text()\"></div>\n `,\n styleUrl: './conversation-message-text.component.scss',\n encapsulation: ViewEncapsulation.None,\n inputs: ['message'],\n providers: [{ provide: AXComponent, useExisting: AXConversationTextMessageComponent }],\n})\nexport class AXConversationTextMessageComponent extends AXConversationMessageBaseComponent implements OnInit {\n /**\n * @ignore\n */\n protected _text = signal('');\n\n /**\n * @ignore\n */\n protected replyText = signal<AXConversationMessage | null>(null);\n\n /**\n * @ignore\n */\n protected replyImage = signal<AXConversationMessage | null>(null);\n\n /**\n * @ignore\n */\n protected replyVideo = signal<AXConversationMessage | null>(null);\n\n /**\n * @ignore\n */\n protected replyAudio = signal<AXConversationMessage | null>(null);\n\n /**\n * @ignore\n */\n protected replyVoice = signal<AXConversationMessage | null>(null);\n\n /**\n * @ignore\n */\n protected replyFile = signal<AXConversationMessage | null>(null);\n\n /**\n * @ignore\n */\n private conversationService = inject(AXConversationService);\n\n ngOnInit(): void {\n this._text.set(this.message?.content);\n\n if (!this.message?.replyTo) return;\n\n const replyMessage = this.conversationService.chats().find((chat) => chat.id === this.message?.replyTo?.id);\n\n switch (replyMessage.type) {\n case 'text':\n this.replyText.set(replyMessage);\n break;\n case 'image':\n this.replyImage.set(replyMessage);\n break;\n case 'video':\n this.replyVideo.set(replyMessage);\n break;\n case 'audio':\n this.replyAudio.set(replyMessage);\n break;\n case 'voice':\n this.replyVoice.set(replyMessage);\n break;\n case 'file':\n this.replyFile.set(replyMessage);\n break;\n }\n }\n}\n","import { AXComponent } from '@acorex/cdk/common';\nimport { Component, OnInit, signal } from '@angular/core';\nimport { AXConversationMessageBaseComponent } from '../../conversation.types';\n\n/**\n * A component for displaying a video message with playback controls.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-conversation-message-video',\n template: `<video controls [src]=\"_videoUrl()\"></video>`,\n styles: `\n video {\n width: 100%;\n height: 100%;\n }\n `,\n providers: [{ provide: AXComponent, useExisting: AXConversationMessageVideoComponent }],\n})\nexport class AXConversationMessageVideoComponent extends AXConversationMessageBaseComponent implements OnInit {\n /**\n * @ignore\n */\n protected _videoUrl = signal('');\n\n /**\n * @ignore\n */\n ngOnInit(): void {\n this._videoUrl.set(this.message?.content);\n }\n}\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXAudioWaveChangeEvent, AXAudioWaveComponent, AXWaveConfig } from '@acorex/components/audio-wave';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXLoadingSpinnerComponent } from '@acorex/components/loading';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe, isPlatformBrowser } from '@angular/common';\nimport {\n Component,\n HostBinding,\n PLATFORM_ID,\n ViewChild,\n ViewEncapsulation,\n afterNextRender,\n inject,\n signal,\n} from '@angular/core';\nimport { AXConversationViewComponent } from '../../conversation-view/conversation-view.component';\nimport { AXConversationMessageBaseComponent } from '../../conversation.types';\n\n/**\n * A component for displaying and handling audio messages in a conversation.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-conversation-message-audio',\n templateUrl: './conversation-message-voice.component.html',\n styleUrl: `./conversation-message-voice.component.scss`,\n encapsulation: ViewEncapsulation.None,\n inputs: ['message'],\n imports: [AXDecoratorGenericComponent, AXLoadingSpinnerComponent, AXAudioWaveComponent, AsyncPipe, AXFormatPipe],\n providers: [{ provide: AXComponent, useExisting: AXConversationVoiceMessageComponent }],\n})\nexport class AXConversationVoiceMessageComponent extends AXConversationMessageBaseComponent {\n /**\n * @ignore\n */\n @ViewChild('a') audio: AXAudioWaveComponent;\n\n /**\n * @ignore\n */\n protected config: AXWaveConfig = { url: '' };\n\n /**\n * @ignore\n */\n protected audioState = signal<'playing' | 'paused' | 'loading' | 'ready' | 'error'>('paused');\n\n /**\n * @ignore\n */\n private parent = inject(AXConversationViewComponent);\n private platformID = inject(PLATFORM_ID);\n\n /**\n * @ignore\n */\n protected selectedRate = signal(1);\n\n /**\n * @ignore\n */\n private selectedRateIndex = signal(1);\n\n /**\n * @ignore\n */\n protected audioProgress = signal(0);\n\n /**\n * @ignore\n */\n protected timeLeft = signal(0);\n\n /**\n * @ignore\n */\n protected currentTime = signal(0);\n\n /**\n * @ignore\n */\n protected duration = signal(0);\n\n #init = afterNextRender(() => {\n this.config.url = this.message?.content;\n this.config.audioRate = 0.25;\n this.setWaveColor();\n this.audio.onStatusChanged.subscribe((c) => {\n this.parent.onAction.emit(c);\n });\n this.handleLoadingProgress();\n });\n /**\n * @ignore\n */\n private setWaveColor() {\n let waveColor = '';\n let progressColor = '';\n if (isPlatformBrowser(this.platformID)) {\n if (this.message.fromId) {\n waveColor = getComputedStyle(document.body).getPropertyValue('--ax-message-other-bar-color');\n progressColor = getComputedStyle(document.body).getPropertyValue('--ax-message-other-progress-color');\n } else {\n waveColor = getComputedStyle(document.body).getPropertyValue('--ax-message-own-bar-color');\n progressColor = getComputedStyle(document.body).getPropertyValue('--ax-message-own-progress-color');\n }\n }\n this.config.waveColor = waveColor;\n this.config.progressColor = progressColor;\n }\n\n /**\n * Pauses the audio playback and updates the audio state to 'paused'.\n * @ignore\n */\n protected handlePauseClick() {\n this.audio?.pause();\n this.audioState.set('paused');\n }\n\n /**\n * Plays the audio and updates the audio state to 'playing'.\n * @ignore\n */\n protected handlePlayClick() {\n this.audio?.play()?.then(() => {\n this.audioState.set('playing');\n });\n }\n\n /**\n * Updates audio state and progress based on status changes from the audio wave.\n * @param e - The event containing status and data related to the audio.\n * @ignore\n */\n protected handleOnStatusChanged(e: AXAudioWaveChangeEvent) {\n if (e.status === 'load' || e.status === 'loading') {\n this.audioState.set('loading');\n }\n if (e.status === 'loading') {\n this.audioProgress.set(e.data.percent);\n this.duration.set(Math.ceil(e.data.duration * 1000));\n }\n if (e.status === 'ready') {\n this.audioState.set('ready');\n this.duration.set(Math.ceil(e.data.duration * 1000));\n }\n if (e.status === 'finish') {\n this.audioState.set('paused');\n }\n if (e.status === 'timeupdate') {\n this.timeLeft.set(this.duration() - e.data.currentTime * 1000);\n this.currentTime.set(e.data.currentTime * 1000);\n }\n if (e.status === 'error') {\n this.audioState.set('error');\n }\n }\n\n /**\n * @ignore\n */\n protected handleLoadingProgress() {\n // this.audioLoaderProgress?.nativeElement.style.cssText = `--ax-audio-progress: ${this.audioProgress()}`;\n }\n\n /**\n * Handles the cancellation of a loading operation.\n * @ignore\n */\n protected handleCancelLoading() {\n //\n }\n\n /**\n * Reloads the audio and updates the state to 'loading'.\n * @ignore\n */\n protected handleReloadClick() {\n //\n this.audioState.set('loading');\n this.audio.load();\n }\n\n /**\n * Cycles through predefined audio playback rates and updates the rate.\n * @ignore\n */\n protected handleRateClick() {\n const rates = [0.5, 1, 2, 4];\n if (this.selectedRateIndex() == rates.length - 1) {\n this.selectedRateIndex.set(0);\n } else {\n this.selectedRateIndex.set(this.selectedRateIndex() + 1);\n }\n this.selectedRate.set(rates[this.selectedRateIndex()]);\n this.audio.setRate(this.selectedRate());\n }\n\n /**\n * @ignore\n */\n @HostBinding('class')\n get __hostClass(): string {\n return `${this.message.fromId ? 'ax-state-other' : 'ax-state-own'}`;\n }\n}\n","<ax-prefix>\n @switch (audioState()) {\n @case ('paused') {\n {{ currentTime() | format: 'time-duration' | async }}\n }\n @case ('playing') {\n {{ currentTime() | format: 'time-duration' | async }}\n }\n @default {\n {{ duration() | format: 'time-duration' | async }}\n }\n }\n <button class=\"ax-audio-speed\" (click)=\"handleRateClick()\"></button>\n</ax-prefix>\n<div class=\"ax-conversation-controller\">\n @switch (audioState()) {\n @case ('playing') {\n <button (click)=\"handlePauseClick()\">\n <i class=\"ax-icon ax-icon-pause\"></i>\n </button>\n }\n\n @case ('ready') {\n <button (click)=\"handlePlayClick()\">\n <i class=\"ax-icon ax-icon-play\"></i>\n </button>\n }\n\n @case ('paused') {\n <button (click)=\"handlePlayClick()\">\n <i class=\"ax-icon ax-icon-play\"></i>\n </button>\n }\n\n @case ('error') {\n <button class=\"ax-state-error\" (click)=\"handleReloadClick()\">\n <i class=\"ax-icon ax-icon-reload\"></i>\n </button>\n }\n\n @default {\n <button (click)=\"handleCancelLoading()\">\n <ax-loading-spinner\n [size]=\"24\"\n [stroke]=\"2\"\n [color]=\"message.fromId ? 'white' : 'warning'\"\n ></ax-loading-spinner>\n </button>\n }\n }\n</div>\n<ax-audio-wave #a [config]=\"config\" (onStatusChanged)=\"handleOnStatusChanged($event)\"></ax-audio-wave>\n<ax-suffix>\n <div class=\"ax-audio-rate-button\" [class.ax-state-own]=\"!message?.fromId\" (click)=\"handleRateClick()\">\n {{ selectedRate() }}X\n </div>\n</ax-suffix>\n","import { AXRippleDirective } from '@acorex/cdk/common';\nimport { AXVirtualScrollModule } from '@acorex/cdk/virtual-scroll';\nimport { AXAudioWaveModule } from '@acorex/components/audio-wave';\nimport { AXAvatarModule } from '@acorex/components/avatar';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCircularProgressModule } from '@acorex/components/circular-progress';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPopoverModule } from '@acorex/components/popover';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXRangeSliderModule } from '@acorex/components/range-slider';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFileModule } from '@acorex/core/file';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\nimport { AsyncPipe, CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXConversationContainerComponent } from './conversation-container/conversation-container.component';\nimport { AXConversationInputComponent } from './conversation-input/conversation-input.component';\nimport { AXConversationMessageComponent } from './conversation-message/conversation-message.component';\nimport { AXConversationMessageAudioComponent } from './conversation-messages/conversation-message-audio/conversation-message-audio.component';\nimport { AXConversationFileMessageComponent } from './conversation-messages/conversation-message-file/conversation-message-file.component';\nimport { AXConversationMessageImageComponent } from './conversation-messages/conversation-message-image/conversation-message-image.component';\nimport { AXConversationTextMessageComponent } from './conversation-messages/conversation-message-text/conversation-message-text.component';\nimport { AXConversationMessageVideoComponent } from './conversation-messages/conversation-message-video/conversation-message-video.component';\nimport { AXConversationVoiceMessageComponent } from './conversation-messages/conversation-message-voice/conversation-message-voice.component';\nimport { AXConversationViewComponent } from './conversation-view/conversation-view.component';\nimport { AXConversationMessageType } from './conversation.types';\nimport { AXConversationMessageTypeRegistryService } from './services/conversation-message-type-registry.service';\n\nexport interface AXChatModuleConfig {\n types: AXConversationMessageType[];\n}\n\nconst COMPONENT = [\n AXConversationViewComponent,\n AXConversationInputComponent,\n AXConversationMessageComponent,\n AXConversationTextMessageComponent,\n AXConversationVoiceMessageComponent,\n AXConversationFileMessageComponent,\n AXConversationContainerComponent,\n AXConversationMessageAudioComponent,\n AXConversationMessageImageComponent,\n AXConversationMessageVideoComponent,\n];\nconst MODULES = [\n CommonModule,\n FormsModule,\n AsyncPipe,\n AXRippleDirective,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXDropdownModule,\n AXFormatModule,\n AXAudioWaveModule,\n AXCircularProgressModule,\n AXDateTimeModule,\n CdkPortalOutlet,\n AXLoadingModule,\n AXAvatarModule,\n AXPopoverModule,\n AXFileModule,\n AXRangeSliderModule,\n AXVirtualScrollModule,\n];\n\n@NgModule({\n imports: [...MODULES, ...COMPONENT],\n exports: [...COMPONENT],\n providers: [AXPopupService],\n})\nexport class AXConversationModule {\n static forRoot(config?: AXChatModuleConfig): ModuleWithProviders<AXConversationModule> {\n return {\n ngModule: AXConversationModule,\n providers: [\n {\n provide: 'AXChatModuleFactory',\n useFactory: (registry: AXConversationMessageTypeRegistryService) => () => {\n if (config?.types?.length) {\n registry.register(...config.types);\n }\n registry.register({\n name: 'text',\n component: AXConversationTextMessageComponent,\n });\n registry.register({\n name: 'voice',\n component: AXConversationVoiceMessageComponent,\n });\n registry.register({\n name: 'file',\n component: AXConversationFileMessageComponent,\n });\n registry.register({\n name: 'audio',\n component: AXConversationMessageAudioComponent,\n });\n registry.register({\n name: 'image',\n component: AXConversationMessageImageComponent,\n });\n registry.register({\n name: 'video',\n component: AXConversationMessageVideoComponent,\n });\n },\n deps: [AXConversationMessageTypeRegistryService],\n multi: true,\n },\n ],\n };\n }\n\n static forChild(config?: AXChatModuleConfig): ModuleWithProviders<AXConversationModule> {\n return {\n ngModule: AXConversationModule,\n providers: [\n {\n provide: 'AXChatModuleFactory',\n useFactory: (registry: AXConversationMessageTypeRegistryService) => () => {\n if (config?.types?.length) {\n registry.register(...config.types);\n }\n },\n deps: [AXConversationMessageTypeRegistryService],\n multi: true,\n },\n ],\n };\n }\n\n /**\n * @ignore\n */\n constructor() {\n const instances = inject<any[]>('AXChatModuleFactory' as any, { optional: true });\n\n instances?.forEach((f) => {\n f();\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-components-conversation.mjs","sources":["../../../../packages/components/conversation/src/lib/classes/events.interface.ts","../../../../packages/components/conversation/src/lib/services/conversation.service.ts","../../../../packages/components/conversation/src/lib/services/recording.service.ts","../../../../packages/components/conversation/src/lib/conversation-container/conversation-container.component.ts","../../../../packages/components/conversation/src/lib/conversation-container/conversation-container.component.html","../../../../packages/components/conversation/src/lib/conversation-input/conversation-input.component.ts","../../../../packages/components/conversation/src/lib/conversation-input/conversation-input.component.html","../../../../packages/components/conversation/src/lib/services/conversation-message-type-registry.service.ts","../../../../packages/components/conversation/src/lib/conversation-message/conversation-message.component.ts","../../../../packages/components/conversation/src/lib/conversation-message/conversation-message.component.html","../../../../packages/components/conversation/src/lib/conversation.types.ts","../../../../packages/components/conversation/src/lib/conversation-messages/conversation-message-audio/conversation-message-audio.component.ts","../../../../packages/components/conversation/src/lib/conversation-messages/conversation-message-audio/conversation-message-audio.component.html","../../../../packages/components/conversation/src/lib/conversation-view/conversation-view.component.ts","../../../../packages/components/conversation/src/lib/conversation-view/conversation-view.component.html","../../../../packages/components/conversation/src/lib/conversation-messages/conversation-message-file/conversation-message-file.component.ts","../../../../packages/components/conversation/src/lib/conversation-messages/conversation-message-file/conversation-message-file.component.html","../../../../packages/components/conversation/src/lib/conversation-messages/conversation-message-image-popup/conversation-message-image-popup.component.ts","../../../../packages/components/conversation/src/lib/conversation-messages/conversation-message-image/conversation-message-image.component.ts","../../../../packages/components/conversation/src/lib/conversation-messages/conversation-message-text/conversation-message-text.component.ts","../../../../packages/components/conversation/src/lib/conversation-messages/conversation-message-video/conversation-message-video.component.ts","../../../../packages/components/conversation/src/lib/conversation-messages/conversation-message-voice/conversation-message-voice.component.ts","../../../../packages/components/conversation/src/lib/conversation-messages/conversation-message-voice/conversation-message-voice.component.html","../../../../packages/components/conversation/src/lib/conversation.module.ts","../../../../packages/components/conversation/src/acorex-components-conversation.ts"],"sourcesContent":["import { AXEvent, AXHtmlEvent } from '@acorex/cdk/common';\n\nexport interface AXInputFileChange extends AXHtmlEvent<MouseEvent> {\n data?: any;\n}\nexport class AXConversationActionEvent extends AXEvent {\n data: any;\n}\n","import { Injectable, signal } from '@angular/core';\nimport { AXConversationMessage } from '../conversation.types';\n\n@Injectable()\nexport class AXConversationService {\n replyId = signal('');\n chats = signal<AXConversationMessage[]>([]);\n}\n","import { Injectable, WritableSignal, signal } from '@angular/core';\n\n@Injectable()\nexport class AXRecordingService {\n audioBlobs: any[] = [];\n mediaRecorder: MediaRecorder | null;\n streamBeingCaptured: any = null;\n\n timer: WritableSignal<string> = signal('00:0');\n\n protected time = {\n seconds: 0,\n minutes: 0,\n hours: 0,\n };\n\n protected timerInterval;\n\n /**\n * Starts audio recording using the browser's MediaRecorder API.\n *\n * @returns Promise<void> - Resolves when recording starts successfully, rejects if not supported.\n */\n startRecording(): Promise<void> {\n if (!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia)) {\n return Promise.reject(new Error('mediaDevices API or getUserMedia method is not supported in this browser.'));\n } else {\n return navigator.mediaDevices.getUserMedia({ audio: true }).then((stream) => {\n this.streamBeingCaptured = stream;\n this.mediaRecorder = new MediaRecorder(stream);\n this.audioBlobs = [];\n this.mediaRecorder.addEventListener('dataavailable', (event) => {\n this.audioBlobs.push(event.data);\n });\n this.mediaRecorder.start();\n this.timerInterval = setInterval(() => {\n this.calculateTime();\n }, 1000);\n });\n }\n }\n\n /**\n * Ends the current recording session and returns the recorded audio blob.\n *\n * @returns Promise<Blob> - Resolves with the recorded audio blob.\n */\n endRecording(): Promise<Blob> {\n return new Promise((resolve) => {\n const mimeType = this.mediaRecorder?.mimeType;\n this.mediaRecorder?.addEventListener('stop', () => {\n const audioBlob = new Blob(this.audioBlobs, { type: mimeType });\n resolve(audioBlob);\n });\n this.mediaRecorder?.stop();\n this.streamBeingCaptured.getTracks().forEach((track) => track.stop());\n this.mediaRecorder = null;\n this.streamBeingCaptured = null;\n this.resetTimer();\n });\n }\n\n /**\n * Calculates and updates the recording time, incrementing seconds, minutes, and hours as needed.\n */\n calculateTime(): void {\n this.time.seconds++;\n if (this.time.seconds >= 60) {\n this.time.seconds = 0;\n this.time.minutes++;\n if (this.time.minutes >= 60) {\n this.time.minutes = 0;\n this.time.hours++;\n }\n }\n\n const formattedTime =\n (this.time.hours > 0 ? this.time.hours + ':' : '') +\n (this.time.minutes < 10 ? '0' + this.time.minutes : this.time.minutes) +\n ':' +\n (this.time.seconds < 10 ? '0' + this.time.seconds : this.time.seconds);\n\n this.timer.set(formattedTime);\n }\n\n /**\n * Resets the recording timer to zero and clears the timer interval.\n */\n resetTimer(): void {\n clearInterval(this.timerInterval);\n this.time.seconds = 0;\n this.time.minutes = 0;\n this.time.hours = 0;\n this.timer.set('00:0');\n }\n}\n","import { AXComponent, AXFocusableComponent, AXValuableComponent } from '@acorex/cdk/common';\nimport { Component, effect, forwardRef, inject, input, ViewEncapsulation } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { AXConversationMessage } from '../conversation.types';\nimport { AXConversationService } from '../services/conversation.service';\nimport { AXRecordingService } from '../services/recording.service';\n\n/**\n * A container for displaying and managing conversations.\n * @category Components\n */\n@Component({\n selector: 'ax-conversation-container',\n templateUrl: './conversation-container.component.html',\n styleUrl: './conversation-container.component.scss',\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: AXComponent, useExisting: AXConversationContainerComponent },\n { provide: AXFocusableComponent, useExisting: AXConversationContainerComponent },\n { provide: AXValuableComponent, useExisting: AXConversationContainerComponent },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AXConversationContainerComponent),\n multi: true,\n },\n AXConversationService,\n AXRecordingService,\n ],\n})\nexport class AXConversationContainerComponent {\n chatData = input<AXConversationMessage[]>([]);\n private conversationService = inject(AXConversationService);\n\n #init = effect(() => {\n this.conversationService.chats.set(this.chatData());\n });\n}\n","<div class=\"ax-conversation-container\">\n <ng-content> </ng-content>\n</div>\n","import {\n AXClickEvent,\n AXComponent,\n AXEvent,\n AXFocusableComponent,\n AXValuableComponent,\n MXInputBaseValueComponent,\n MXLookComponent,\n} from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorIconComponent, AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownPanelComponent } from '@acorex/components/dropdown';\nimport { AXLoadingSpinnerComponent } from '@acorex/components/loading';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n Signal,\n ViewChild,\n ViewEncapsulation,\n WritableSignal,\n computed,\n contentChild,\n forwardRef,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { classes } from 'polytype';\nimport { AXConversationMessage } from '../conversation.types';\nimport { AXConversationService } from '../services/conversation.service';\nimport { AXRecordingService } from '../services/recording.service';\n\n/**\n * An input component for entering conversation messages.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-conversation-input',\n templateUrl: './conversation-input.component.html',\n styleUrls: ['./conversation-input.component.scss'],\n inputs: ['look', 'placeholder'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: AXComponent, useExisting: AXConversationInputComponent },\n { provide: AXFocusableComponent, useExisting: AXConversationInputComponent },\n { provide: AXValuableComponent, useExisting: AXConversationInputComponent },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AXConversationInputComponent),\n multi: true,\n },\n ],\n imports: [\n AXButtonComponent,\n AXDecoratorIconComponent,\n AXDropdownPanelComponent,\n FormsModule,\n AXLoadingSpinnerComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXDecoratorModule,\n ],\n})\nexport class AXConversationInputComponent extends classes(MXInputBaseValueComponent<string>, MXLookComponent) {\n @ViewChild('inputFile') protected inputFile: ElementRef<HTMLInputElement>;\n\n protected sendIcon = contentChild('ax-icon');\n\n protected onActionClose = output<void>();\n\n protected conversationService = inject(AXConversationService);\n\n protected chats: Signal<AXConversationMessage[]> = computed(() => {\n return this.conversationService.chats();\n });\n\n protected actionIcon = signal<string>(null);\n protected actionContent = signal<string>(null);\n protected actionShowState = signal<boolean>(false);\n protected actionUser = signal<string>(null);\n protected actionCloseCallback = signal<() => void>(() => {\n return;\n });\n\n protected replyChat: Signal<AXConversationMessage> = computed(() => {\n const findMessage = this.chats().find((item) => item.id === this.conversationService.replyId());\n return findMessage;\n });\n\n public setActionBoxContainer(icon: string, content: string, user?: string, closeCallback?: () => void) {\n this.actionIcon.set(icon);\n this.actionContent.set(content);\n this.actionShowState.set(true);\n this.actionUser.set(user);\n this.actionCloseCallback.set(closeCallback);\n }\n\n /** Maximum length of input text */\n readonly maxLength = input<number>();\n\n /** Indicates if an attachment is present */\n readonly hasAttachment = input<boolean>(true);\n\n /** Indicates if voice recording is enabled */\n readonly hasVoice = input<boolean>(true);\n\n readonly hasEmoji = input<boolean>(true);\n\n readonly isLoading = input<boolean>(false);\n\n /** Acceptable file types for attachment */\n readonly acceptFileType = input<string>('*');\n\n /**\n * Emitted when the send button is clicked.\n *\n * @event\n */\n onSendClick = output<AXClickEvent>();\n\n /**\n * Emitted when recording starts.\n *\n * @event\n */\n onStartRecording = output<AXClickEvent>();\n\n /**\n * Emitted when recording is canceled.\n *\n * @event\n */\n onCancelRecording = output<AXClickEvent>();\n\n onEnterPressed = output<AXEvent>();\n\n /**\n * @ignore\n */\n protected recording: WritableSignal<boolean> = signal(false);\n\n /**\n * @ignore\n */\n protected recordingService: AXRecordingService = inject(AXRecordingService);\n\n /**\n * @ignore\n */\n protected _updateOn: 'change' | 'blur' | 'submit' = 'change';\n\n /**\n * @ignore\n */\n protected _handleModelChange(value: string) {\n this.commitValue(value, true);\n }\n\n /**\n * Initiates recording when the record button is clicked.\n * Emits an event when recording starts.\n * @ignore\n */\n protected handleRecordClick() {\n this.recording.set(true);\n this.recordingService\n ?.startRecording()\n .then(() => {\n this.onStartRecording.emit({\n component: this,\n data: { recording: true },\n isUserInteraction: true,\n });\n })\n .catch((e) => {\n throw e;\n });\n }\n\n /**\n * Cancels the recording and emits an event to indicate cancellation.\n * @ignore\n */\n protected handleCancelRecordingClick() {\n this.recording.set(false);\n\n this.onCancelRecording.emit({\n component: this,\n data: { value: null },\n });\n }\n\n protected shiftState = false;\n protected keyDownHandler(e: KeyboardEvent) {\n if (e.key === 'Shift') {\n this.shiftState = true;\n }\n this.onKeyDown.emit({\n component: this,\n nativeEvent: e,\n });\n }\n protected keyUpHandler(e: KeyboardEvent) {\n if (e.key === 'Shift') {\n this.shiftState = false;\n }\n this.onKeyUp.emit({\n component: this,\n nativeEvent: e,\n });\n }\n protected keyPressHandler(e: KeyboardEvent) {\n if (e.key === 'Enter' && !this.shiftState) {\n e.preventDefault();\n this.onEnterPressed.emit({ component: this });\n }\n this.onKeyPress.emit({\n component: this,\n nativeEvent: e,\n });\n }\n /**\n * Opens the file picker for attachment.\n * @ignore\n */\n protected handleAttachClick() {\n this.inputFile.nativeElement.click();\n }\n\n /**\n * Emits the selected files when the file input changes.\n * @ignore\n */\n protected handleChangeFile(event: Event) {\n this.onSendClick.emit({\n component: this,\n data: { value: (event.target as HTMLInputElement).files, type: 'file' },\n });\n }\n\n /**\n * Emits the text value and optional replyChat when the send button is clicked.\n * @ignore\n */\n protected handleSendClick() {\n this.onSendClick.emit({\n component: this,\n data: { value: this.value, replyChat: this.replyChat() || null, type: 'text' },\n isUserInteraction: true,\n });\n this.actionShowState.set(false);\n }\n\n /**\n * Ends recording and emits the recorded voice data when the send voice button is clicked.\n * @ignore\n */\n protected handleSendVoiceClick() {\n this.recordingService.endRecording().then((c) => {\n this.recording.set(false);\n this.onSendClick.emit({\n component: this,\n data: { value: c, type: 'voice' },\n isUserInteraction: true,\n });\n });\n }\n\n /**\n * Clears the reply ID when closing a reply.\n * @ignore\n */\n protected closeReplyHandler() {\n this.actionShowState.set(false);\n this.actionCloseCallback();\n this.onActionClose.emit();\n }\n\n @HostBinding('attr.name')\n private get __hostName(): string {\n return this.name;\n }\n}\n","@if (actionShowState()) {\n <div class=\"ax-editor-reply-container ax-editor-container ax-default {{ look }}\">\n @if (actionUser()) {\n <ax-text> {{ actionUser() }}</ax-text>\n }\n <div class=\"ax-reply-container\">\n <div class=\"ax-reply-start\">\n <i [class]=\"actionIcon()\"></i>\n <p>{{ actionContent() }}</p>\n </div>\n <i (click)=\"closeReplyHandler()\" class=\"fa-solid fa-xmark ax-cursor-pointer\"></i>\n </div>\n </div>\n}\n\n<div class=\"ax-conversation-input ax-editor-container ax-default {{ look }}\" [class.ax-state-recording]=\"recording()\">\n @if (recording()) {\n <div class=\"ax-conversation-input-start-side\">\n <span class=\"ax-record-dot\"></span>\n <span>{{ recordingService.timer() }}</span>\n </div>\n <div class=\"ax-conversation-input-main-side\">\n <ax-button\n class=\"ax-sm\"\n look=\"blank\"\n color=\"primary\"\n [text]=\"'@acorex:common.actions.cancel' | translate | async\"\n (onClick)=\"handleCancelRecordingClick()\"\n ></ax-button>\n </div>\n <div class=\"ax-conversation-input-end-side\">\n <ax-button look=\"solid\" color=\"danger\" class=\"ax-blob ax-sm\" (onClick)=\"handleSendVoiceClick()\">\n <ax-icon>\n <i class=\"ax-icon ax-icon-send\"></i>\n </ax-icon>\n </ax-button>\n </div>\n } @else {\n @if (hasEmoji()) {\n <div class=\"ax-conversation-input-start-side\">\n <ax-button look=\"blank\" class=\"ax-sm\">\n <ax-icon>\n <i class=\"ax-icon ax-icon-emoji\"></i>\n </ax-icon>\n <ax-dropdown-panel>\n <ng-container>\n <div class=\"ax-emoji-container\">\n <div>⚠️</div>\n <div>➡️</div>\n <div>🔃</div>\n <div>🔷</div>\n <div>🤚</div>\n <div>😂</div>\n <div>😊</div>\n </div>\n </ng-container>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n }\n\n <textarea\n class=\"ax-conversation-input-main-side\"\n oninput='this.style.height = \"\";this.style.height = this.scrollHeight + \"px\"'\n type=\"text\"\n rows=\"1\"\n [id]=\"id\"\n [attr.placeholder]=\"placeholder\"\n [attr.maxlength]=\"maxLength()\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [tabindex]=\"tabIndex\"\n [ngModel]=\"value\"\n (ngModelChange)=\"_handleModelChange($event)\"\n [ngModelOptions]=\"{ updateOn: _updateOn }\"\n (keydown)=\"keyDownHandler($event)\"\n (keyup)=\"keyUpHandler($event)\"\n (keypress)=\"keyPressHandler($event)\"\n (focus)=\"emitOnFocusEvent($event)\"\n (blur)=\"emitOnBlurEvent($event)\"\n >\n </textarea>\n\n <div class=\"ax-conversation-input-end-side\">\n @if (!value) {\n @if (hasAttachment()) {\n <ax-button look=\"blank\" class=\"ax-sm\" (onClick)=\"handleAttachClick()\">\n <ax-icon>\n <i class=\"ax-icon ax-icon-attach\"></i>\n </ax-icon>\n </ax-button>\n <input\n multiple\n #inputFile\n [accept]=\"acceptFileType()\"\n type=\"file\"\n class=\"ax-attach-input\"\n (change)=\"handleChangeFile($event)\"\n />\n }\n @if (hasVoice()) {\n <ax-button look=\"blank\" class=\"ax-sm\" (onClick)=\"handleRecordClick()\">\n <ax-icon>\n <i class=\"ax-icon ax-icon-mic\"></i>\n </ax-icon>\n </ax-button>\n }\n } @else {\n <ax-button [disabled]=\"isLoading()\" look=\"solid\" color=\"primary\" class=\"ax-sm\" (onClick)=\"handleSendClick()\">\n @if (isLoading()) {\n <ax-loading-spinner color=\"primary\"></ax-loading-spinner>\n } @else {\n @if (sendIcon()) {\n <ng-content select=\"ax-icon\"></ng-content>\n } @else {\n <ax-icon>\n <i class=\"ax-icon ax-icon-arrow-long-up\"></i>\n </ax-icon>\n }\n }\n </ax-button>\n }\n </div>\n }\n</div>\n","import { Injectable } from '@angular/core';\nimport { AXConversationMessageType } from '../conversation.types';\n\n@Injectable({ providedIn: 'root' })\nexport class AXConversationMessageTypeRegistryService {\n private plugins: Map<string, AXConversationMessageType> = new Map<string, AXConversationMessageType>();\n\n register(...plugins: AXConversationMessageType[]) {\n plugins.forEach((p) => this.plugins.set(p.name, p));\n }\n\n public resolve(name: string): AXConversationMessageType | undefined {\n return this.plugins.get(name);\n }\n}\n","import { AXClickEvent, AXComponent, MXBaseComponent } from '@acorex/cdk/common';\nimport { AXAvatarComponent } from '@acorex/components/avatar';\nimport { AXButtonComponent, AXButtonItemComponent, AXButtonItemListComponent } from '@acorex/components/button';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { isBrowser } from '@acorex/core/platform';\nimport { CdkPortalOutlet, CdkPortalOutletAttachedRef, ComponentPortal } from '@angular/cdk/portal';\nimport { AsyncPipe, CommonModule } from '@angular/common';\nimport {\n Component,\n ComponentRef,\n HostBinding,\n TemplateRef,\n ViewEncapsulation,\n computed,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport {\n AXConversationMenuOpeningEvent,\n AXConversationMessage,\n AXConversationMessageAction,\n} from '../conversation.types';\nimport { AXConversationMessageTypeRegistryService } from '../services/conversation-message-type-registry.service';\nimport { AXConversationService } from '../services/conversation.service';\n\n/**\n * A component for displaying individual conversation messages.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-conversation-message',\n templateUrl: './conversation-message.component.html',\n styleUrls: ['./conversation-message.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXAvatarComponent,\n CdkPortalOutlet,\n AXButtonComponent,\n AXDecoratorIconComponent,\n AXPopoverComponent,\n AXDecoratorGenericComponent,\n AXButtonItemListComponent,\n AXButtonItemComponent,\n AsyncPipe,\n AXFormatPipe,\n AXMenuModule,\n CommonModule,\n ],\n providers: [{ provide: AXComponent, useExisting: AXConversationMessageComponent }],\n})\nexport class AXConversationMessageComponent extends MXBaseComponent {\n protected popover = viewChild<AXPopoverComponent>('popover');\n\n readonly isReplyArrowShown = input(true);\n readonly chatMessage = input<AXConversationMessage>();\n readonly avatar = input<TemplateRef<any>>(null);\n\n protected conversationService = inject(AXConversationService);\n protected registryService = inject(AXConversationMessageTypeRegistryService);\n\n protected actionButtonItemsPrivate = signal<AXConversationMessageAction[]>([]);\n private actionButtonItemsPublic: AXConversationMenuOpeningEvent = {\n items: [],\n canceled: false,\n data: this.chatMessage(),\n };\n\n onActionMenuOpening = output<AXConversationMenuOpeningEvent>();\n\n onReplyClick = output<AXClickEvent>();\n\n protected portal = computed<ComponentPortal<any> | null>(() => {\n return new ComponentPortal(this.registryService.resolve(this.chatMessage().type).component);\n });\n\n protected messageType = computed(() => {\n return this.chatMessage().type;\n });\n\n protected get isOwn(): boolean {\n return !this.chatMessage().fromId;\n }\n\n /**\n * Handles the action button click and opens the action menu.\n */\n protected handleActionClick(): void {\n this.actionButtonItemsPublic = {\n items: [],\n canceled: false,\n data: this.chatMessage(),\n };\n\n this.onActionMenuOpening.emit(this.actionButtonItemsPublic);\n\n if (this.actionButtonItemsPublic.canceled) return;\n\n this.actionButtonItemsPrivate.set(this.actionButtonItemsPublic.items);\n }\n\n protected _handleAttached(ref: CdkPortalOutletAttachedRef) {\n ref = ref as ComponentRef<unknown>;\n if (ref.instance && isBrowser()) {\n Object.assign(ref.instance, { message: this.chatMessage() });\n\n const prefixContainer = this.getHostElement().querySelector('.ax-message-prefix');\n const suffixContainer = this.getHostElement().querySelector('.ax-message-suffix');\n prefixContainer.innerHTML = '';\n suffixContainer.innerHTML = '';\n\n const prefix = this.getHostElement().querySelector('ax-prefix') as HTMLDivElement;\n const suffix = this.getHostElement().querySelector('ax-suffix') as HTMLDivElement;\n\n if (prefix && prefixContainer) {\n prefix.style.display = 'flex';\n prefixContainer.append(prefix);\n }\n if (suffix && suffixContainer) {\n suffix.style.display = 'flex';\n suffixContainer.append(suffix);\n }\n }\n }\n\n /**\n * Handles the resend button click and closes the popover.\n */\n protected handleResendClick(): void {\n this.popover()?.close();\n this.chatMessage().onResendClick();\n }\n\n /**\n * Handles the delete button click and closes the popover.\n */\n protected handleDeleteClick(): void {\n this.popover()?.close();\n this.chatMessage().onDeleteClick();\n }\n\n /**\n * Handles reply functionality by setting the reply ID and emitting the reply click event.\n *\n * @param e - The conversation message to reply to.\n */\n protected replyHandler(e: AXConversationMessage): void {\n this.conversationService.replyId.set(e.id);\n this.onReplyClick.emit({ data: e, component: this });\n }\n\n @HostBinding('class')\n get __hostClass(): string {\n return `${this.isOwn ? 'ax-state-own' : ''} ${!this.isOwn ? 'ax-state-other' : ''}`;\n }\n}\n","@if (chatMessage().fromId) {\n @if (avatar()) {\n <ng-container [ngTemplateOutlet]=\"avatar()\"></ng-container>\n } @else {\n <ax-avatar color=\"primary\" [size]=\"36\"> </ax-avatar>\n }\n}\n\n@if (isOwn && isReplyArrowShown()) {\n <i (click)=\"replyHandler(chatMessage())\" class=\"fa-solid fa-reply ax-cursor-pointer\"></i>\n}\n\n<div\n class=\"ax-message-content\"\n [class]=\"'ax-type-' + messageType()\"\n [class.ax-state-own]=\"!chatMessage().fromId\"\n [class.ax-state-other]=\"chatMessage().fromId\"\n>\n <div class=\"ax-action-button\">\n @if (chatMessage()?.userName) {\n <div class=\"ax-message-user-name\">\n <ax-text>{{ chatMessage().userName }}</ax-text>\n </div>\n }\n\n @if (chatMessage()?.showActionButton) {\n <div class=\"ax-message-action-button\">\n <ax-menu openOn=\"click\" [hasArrow]=\"false\">\n <ax-menu-item class=\"ax-parent-menu-item\">\n <ax-text (click)=\"handleActionClick()\">...</ax-text>\n\n @for (item of actionButtonItemsPrivate(); track item.text) {\n <ax-menu-item [color]=\"item.color\" (onClick)=\"item.onClick(chatMessage().id)\">\n <ax-text>{{ item.text }}</ax-text>\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"></ax-icon>\n </ax-prefix>\n\n @for (innerItem of item.items; track innerItem.text) {\n <ax-menu-item [color]=\"innerItem.color\" (onClick)=\"innerItem.onClick(chatMessage().id)\">\n <ax-text>{{ innerItem.text }}</ax-text>\n <ax-prefix>\n <ax-icon [icon]=\"innerItem.icon\"></ax-icon>\n </ax-prefix>\n </ax-menu-item>\n }\n </ax-menu-item>\n }\n </ax-menu-item>\n </ax-menu>\n </div>\n }\n </div>\n\n <ng-template [cdkPortalOutlet]=\"portal()\" (attached)=\"_handleAttached($event)\"></ng-template>\n\n <div class=\"ax-chat-message-status\">\n <div class=\"ax-message-prefix\"></div>\n <div>\n <div class=\"ax-message-suffix\"></div>\n <span>\n {{ chatMessage().sendTime | format: 'datetime' : 'HH:mm' | async }}\n </span>\n <span>\n @if (isOwn) {\n @if (chatMessage().deliverTime && chatMessage().sendTime) {\n <i class=\"ax-icon ax-icon-check ax-message-status\"></i>\n }\n @if (chatMessage().readTime && chatMessage().sendTime) {\n <i class=\"ax-icon ax-icon-dobble-check ax-message-status\"></i>\n }\n }\n </span>\n </div>\n </div>\n</div>\n\n@if (!chatMessage().sendTime) {\n <ax-button class=\"ax-resend-button ax-xs\" color=\"danger\" #b>\n <ax-icon class=\"ax-icon ax-icon-error\"></ax-icon>\n\n <ax-popover [target]=\"b\" placement=\"bottom-end\" #popover>\n <div class=\"ax-overlay-pane\">\n <ax-content> </ax-content>\n <ax-button-item-list>\n @if (chatMessage().onResendClick) {\n <ax-button-item text=\"Resend\" (onClick)=\"handleResendClick()\">\n <ax-icon class=\"ax-icon ax-icon-reload ax-bold\"></ax-icon>\n </ax-button-item>\n }\n @if (chatMessage().onDeleteClick) {\n <ax-button-item text=\"Delete\" color=\"danger\" (onClick)=\"handleDeleteClick()\">\n <ax-icon class=\"ax-icon ax-icon-clear ax-bold\"></ax-icon>\n </ax-button-item>\n }\n </ax-button-item-list>\n </div>\n </ax-popover>\n </ax-button>\n}\n\n@if (!isOwn && isReplyArrowShown()) {\n <i (click)=\"replyHandler(chatMessage())\" class=\"fa-solid fa-reply ax-rotate ax-cursor-pointer\"></i>\n}\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport { Injectable, Type } from '@angular/core';\n\nexport interface AXConversationMessageType {\n name: string;\n component: Type<any>;\n}\n\nexport interface AXConversationMessage {\n id: string;\n type: string;\n sendTime: Date | null;\n deliverTime?: Date;\n readTime?: Date;\n replyTo?: {\n id: string;\n };\n content: any;\n fromId?: string;\n name: string;\n onResendClick?: () => void;\n onDeleteClick?: () => void;\n onDownloadClick?: () => void;\n onCancelClick?: () => void;\n showActionButton?: boolean;\n userName?: string;\n}\n\nexport abstract class AXConversationMessageAction {\n color?: AXStyleColorType;\n text: string;\n icon?: string;\n onClick: (id: string) => void;\n items?: AXConversationMessageAction[];\n}\n\nexport class AXConversationMenuOpeningEvent {\n items: AXConversationMessageAction[];\n canceled = false;\n data: AXConversationMessage;\n}\n\n@Injectable()\nexport class AXConversationMessageBaseComponent {\n message: AXConversationMessage;\n}\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXRangeSliderComponent } from '@acorex/components/range-slider';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, OnDestroy, Renderer2, ViewEncapsulation, afterNextRender, inject, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXConversationMessageBaseComponent } from '../../conversation.types';\n\n/**\n * Component for displaying audio messages in a conversation.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-conversation-message-audio',\n templateUrl: './conversation-message-audio.component.html',\n styleUrls: ['./conversation-message-audio.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXDecoratorGenericComponent,\n AXButtonComponent,\n AXRangeSliderComponent,\n FormsModule,\n AsyncPipe,\n AXFormatPipe,\n ],\n providers: [{ provide: AXComponent, useExisting: AXConversationMessageAudioComponent }],\n})\nexport class AXConversationMessageAudioComponent extends AXConversationMessageBaseComponent implements OnDestroy {\n private render = inject(Renderer2);\n /**\n * @ignore\n */\n protected audioState = signal<'playing' | 'paused'>('paused');\n\n /**\n * @ignore\n */\n // audioTag = viewChild<ElementRef<HTMLAudioElement>>('a');\n protected audioTag = signal(new Audio());\n\n /**\n * @ignore\n */\n protected audioRate = signal(1);\n\n /**\n * @ignore\n */\n protected currentTime = signal(0);\n\n /**\n * @ignore\n */\n protected duration = signal(0);\n\n /**\n * @ignore\n */\n protected currentTimeFormat = signal(0);\n\n /**\n * @ignore\n */\n protected durationFormat = signal(0);\n\n /**\n * @ignore\n */\n protected endedEvent;\n\n /**\n * @ignore\n */\n protected durationchangeEvent;\n\n /**\n * @ignore\n */\n protected timeupdateEvent;\n\n /**\n * @ignore\n */\n constructor() {\n super();\n afterNextRender(() => {\n this.audioTag().autoplay = false;\n this.audioTag().src = this.message.content;\n this.render.listen(this.audioTag(), 'ended', this.endedFunction.bind(this));\n this.render.listen(this.audioTag(), 'durationchange', this.durationchangeFunction.bind(this));\n this.render.listen(this.audioTag(), 'timeupdate', this.timeupdateFunction.bind(this));\n });\n }\n\n /**\n * @ignore\n */\n ngOnDestroy(): void {\n if (this.endedEvent) {\n this.endedEvent();\n }\n if (this.durationchangeEvent) {\n this.durationchangeEvent();\n }\n if (this.timeupdateEvent) {\n this.timeupdateEvent();\n }\n }\n\n /**\n * @ignore\n */\n protected endedFunction() {\n this.audioState.set('paused');\n this.audioTag().pause();\n this.audioTag().currentTime = 0;\n this.currentTime.set(0);\n }\n\n /**\n * @ignore\n */\n protected durationchangeFunction() {\n if (this.audioTag().duration === Infinity) return;\n this.duration.set(this.audioTag().duration);\n this.durationFormat.set(Math.ceil(this.audioTag().duration) * 1000);\n }\n\n /**\n * @ignore\n */\n protected timeupdateFunction() {\n this.currentTime.set(this.audioTag().currentTime);\n this.currentTimeFormat.set(Math.ceil(this.audioTag().currentTime * 1000));\n }\n /**\n * Seeks to the specified time and resumes audio playback.\n *\n * @param e - Time in seconds to seek to.\n * @ignore\n */\n protected clickHandler(e: any) {\n this.audioTag().currentTime = e as number;\n }\n\n /**\n * Pauses the audio and updates the state to 'paused'.\n * @ignore\n */\n protected handlePauseClick() {\n this.audioState.set('paused');\n this.audioTag().pause();\n }\n\n /**\n * Plays the audio and updates the state to 'playing'.\\\n * @ignore\n */\n protected handlePlayClick() {\n this.audioState.set('playing');\n this.audioTag().play();\n }\n\n /**\n * Toggles the playback rate of the audio between 1x, 1.5x, and 2x.\n * @ignore\n */\n protected handleRateClick() {\n if (this.audioRate() === 1) {\n this.audioRate.set(1.5);\n this.audioTag().playbackRate = 1.5;\n } else if (this.audioRate() === 1.5) {\n this.audioRate.set(2);\n this.audioTag().playbackRate = 2;\n } else if (this.audioRate() === 2) {\n this.audioRate.set(1);\n this.audioTag().playbackRate = 1;\n }\n }\n}\n","<ax-prefix>\n <div class=\"ax-time-rate\">\n @switch (audioState()) {\n @case ('paused') {\n {{ currentTimeFormat() | format: 'time-duration' | async }}\n }\n @case ('playing') {\n {{ currentTimeFormat() | format: 'time-duration' | async }}\n }\n @default {\n {{ durationFormat() | format: 'time-duration' | async }}\n }\n }\n <ax-button\n color=\"primary\"\n look=\"solid\"\n text=\"{{ audioRate() }}X\"\n class=\"ax-audio-speed\"\n (click)=\"handleRateClick()\"\n ></ax-button>\n </div>\n</ax-prefix>\n<div class=\"ax-conversation-controller\">\n @switch (audioState()) {\n @case ('playing') {\n <button (click)=\"handlePauseClick()\">\n <i class=\"ax-icon ax-icon-pause\"></i>\n </button>\n }\n @case ('paused') {\n <button (click)=\"handlePlayClick()\">\n <i class=\"ax-icon ax-icon-play\"></i>\n </button>\n }\n }\n</div>\n<ax-range-slider\n class=\"ax-modify-bgSlider\"\n (ngModelChange)=\"clickHandler($event)\"\n [max]=\"duration()\"\n [min]=\"0\"\n mode=\"single\"\n [ngModel]=\"currentTime()\"\n color=\"primary\"\n>\n</ax-range-slider>\n","import { AXClickEvent, AXComponent, AXEvent, MXBaseComponent } from '@acorex/cdk/common';\nimport { AXVirtualScrollingContainerDirective, AXVirtualScrollingItemDirective } from '@acorex/cdk/virtual-scroll';\nimport {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n ViewEncapsulation,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { AXConversationActionEvent } from '../classes/events.interface';\nimport { AXConversationMessageComponent } from '../conversation-message/conversation-message.component';\nimport { AXConversationMenuOpeningEvent } from '../conversation.types';\nimport { AXConversationService } from '../services/conversation.service';\n\n/**\n * Displays the conversation view with messages and interactions.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-conversation-view',\n templateUrl: './conversation-view.component.html',\n styleUrls: ['./conversation-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXVirtualScrollingContainerDirective, AXConversationMessageComponent, AXVirtualScrollingItemDirective],\n providers: [{ provide: AXComponent, useExisting: AXConversationViewComponent }],\n})\nexport class AXConversationViewComponent extends MXBaseComponent {\n protected conversationService = inject(AXConversationService);\n\n readonly chatBoxHeight = input<string>('30vh');\n\n readonly isReplyArrowShown = input(true);\n\n readonly avatar = input<TemplateRef<any>>(null);\n\n onActionMenuOpening = output<AXConversationMenuOpeningEvent>();\n\n onAction = output<AXConversationActionEvent>();\n\n onReplyClick = output<AXClickEvent>();\n\n onScrollEnd = output<AXEvent>();\n\n /**\n * Updates the previous items in the conversation by prepending new items to the beginning of the chat list.\n *\n * @param item - Array of items to prepend to the conversation.\n */\n updatePrevItems(item: any[]): void {\n this.conversationService.chats.update((prev) => [...item, ...prev]);\n }\n\n /**\n * Calls for an update by emitting the onScrollEnd event.\n */\n callForUpdate(): void {\n this.onScrollEnd.emit({ component: this });\n }\n\n /**\n * Adds a new item to the end of the conversation chat list.\n *\n * @param item - The item to add to the conversation.\n */\n addNewItem(item: any): void {\n this.conversationService.chats.update((prev) => [...prev, item]);\n }\n}\n","<div axVirtualScrollingContainer (ScrollEnd)=\"callForUpdate()\" [height]=\"chatBoxHeight()\">\n @for (item of conversationService.chats(); track item.id) {\n <ax-conversation-message\n animate.enter=\"ax-fade-slide-in\"\n (onReplyClick)=\"onReplyClick.emit($event)\"\n [avatar]=\"avatar()\"\n (onActionMenuOpening)=\"onActionMenuOpening.emit($event)\"\n [isReplyArrowShown]=\"isReplyArrowShown()\"\n axVirtualScrollingItem\n [chatMessage]=\"item\"\n ></ax-conversation-message>\n }\n</div>\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { AXComponent } from '@acorex/cdk/common';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXLoadingSpinnerComponent } from '@acorex/components/loading';\nimport { AXFileService } from '@acorex/core/file';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe } from '@angular/common';\nimport { Component, ViewEncapsulation, afterNextRender, inject, signal } from '@angular/core';\nimport { AXConversationViewComponent } from '../../conversation-view/conversation-view.component';\nimport { AXConversationMessageBaseComponent } from '../../conversation.types';\n\n/**\n * Component for displaying file messages in a conversation.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-conversation-message-file',\n templateUrl: './conversation-message-file.component.html',\n styleUrl: './conversation-message-file.component.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [AXDecoratorGenericComponent, AXLoadingSpinnerComponent, AsyncPipe, AXFormatPipe],\n providers: [{ provide: AXComponent, useExisting: AXConversationFileMessageComponent }],\n})\nexport class AXConversationFileMessageComponent extends AXConversationMessageBaseComponent {\n #init = afterNextRender(() => {\n if (this.message.name) {\n this.fileName.set(this.message.name);\n this.fileSize.set(this.fileService.getSize(this.message.content) as number);\n } else {\n this.fileName.set(this.message.content[0].name);\n this.fileSize.set(this.message.content[0].size);\n }\n });\n\n /**\n * @ignore\n */\n protected fileState = signal<'loading' | 'ready' | 'error'>('ready');\n /**\n * @ignore\n */\n protected fileSize = signal<number>(null);\n /**\n * @ignore\n */\n protected fileName = signal<string>('');\n\n /**\n * @ignore\n */\n private fileService = inject(AXFileService);\n\n /**\n * @ignore\n */\n private parent = inject(AXConversationViewComponent);\n\n /**\n * Emits a download action event for the file.\n * @ignore\n */\n protected handleDownloadFile() {\n this.parent.onAction.emit({ component: this, data: this.message, isUserInteraction: true });\n }\n\n /**\n * Emits a cancel action event for the file loading.\n * @ignore\n */\n protected handleCancelLoading() {\n this.parent.onAction.emit({ component: this, data: this.message, isUserInteraction: true });\n }\n}\n","<ax-prefix>\n {{ fileSize() | format: 'filesize' | async }}\n</ax-prefix>\n<div class=\"ax-file-container\">\n <div class=\"ax-conversation-controller\">\n @switch (fileState()) {\n @case ('ready') {\n <button (click)=\"handleDownloadFile()\">\n <i class=\"ax-icon ax-icon-download\"></i>\n </button>\n }\n\n @default {\n <button (click)=\"handleCancelLoading()\">\n <ax-loading-spinner\n [size]=\"24\"\n [stroke]=\"2\"\n [color]=\"message.fromId ? 'white' : 'warning'\"\n ></ax-loading-spinner>\n </button>\n }\n }\n </div>\n\n <div class=\"ax-file-name\">{{ fileName() }}</div>\n</div>\n","import { AXComponent } from '@acorex/cdk/common';\nimport { Component, ViewEncapsulation } from '@angular/core';\n\n/**\n * A popup component for displaying an image in full view.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-conversation-message-image-popup',\n template: ` <img class=\"ax-image-popup\" [src]=\"url\" alt=\"\" />`,\n styleUrl: './conversation-message-image-popup.component.scss',\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: AXComponent, useExisting: ConversationMessageImagePopupComponent }],\n})\nexport class ConversationMessageImagePopupComponent {\n /**\n * @ignore\n */\n protected url: string;\n}\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXPopupService, AXPopupSizeType } from '@acorex/components/popup';\nimport { Component, afterNextRender, inject, signal } from '@angular/core';\nimport { AXConversationMessageBaseComponent } from '../../conversation.types';\nimport { ConversationMessageImagePopupComponent } from '../conversation-message-image-popup/conversation-message-image-popup.component';\n\n/**\n * A component for displaying an image within a conversation message.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-conversation-message-image',\n template: `<img (click)=\"openPopup()\" [src]=\"_imageUrl()\" alt=\"\" /> `,\n styles: `\n img {\n cursor: pointer;\n width: 100%;\n height: 100%;\n }\n `,\n inputs: ['message'],\n providers: [{ provide: AXComponent, useExisting: AXConversationMessageImageComponent }],\n})\nexport class AXConversationMessageImageComponent extends AXConversationMessageBaseComponent {\n /**\n * @ignore\n */\n protected _imageUrl = signal('');\n\n /**\n * @ignore\n */\n private popup: AXPopupService = inject(AXPopupService);\n\n /**\n * @ignore\n */\n protected _options = {\n header: true,\n footer: false,\n size: 'md',\n draggable: true,\n hasBackdrop: true,\n closeButton: true,\n closeOnBackdropClick: false,\n };\n\n #init = afterNextRender(() => {\n this._imageUrl.set(this.message?.content);\n });\n\n /**\n * Opens a popup displaying the image with options for draggable, size, and backdrop.\n * @ignore\n */\n protected openPopup() {\n this.popup\n .open(ConversationMessageImagePopupComponent, {\n draggable: this._options.draggable,\n header: this._options.header,\n size: this._options.size as AXPopupSizeType,\n hasBackdrop: this._options.hasBackdrop,\n closeButton: this._options.closeButton,\n closeOnBackdropClick: this._options.closeOnBackdropClick,\n data: {\n url: this._imageUrl(),\n },\n })\n .then((c) => {\n console.log(c);\n });\n }\n}\n","import { AXComponent } from '@acorex/cdk/common';\nimport { Component, OnInit, ViewEncapsulation, inject, signal } from '@angular/core';\nimport { AXConversationMessage, AXConversationMessageBaseComponent } from '../../conversation.types';\nimport { AXConversationService } from '../../services/conversation.service';\n\n/**\n * A component for displaying a text message with optional reply content, including text, images, videos, files, and audio.\n *\n * @category Components\n */\n@Component({\n template: `\n @if (replyText()) {\n <div class=\"ax-message-reply-container\">{{ replyText().content }}</div>\n }\n\n @if (replyImage()) {\n <div class=\"ax-image-reply-container\"><img [src]=\"replyImage().content\" alt=\"\" /></div>\n }\n\n @if (replyVideo()) {\n <div class=\"ax-video-reply-container\"><video [src]=\"replyVideo().content\"></video></div>\n }\n\n @if (replyFile()) {\n <div class=\"ax-message-reply-container\">\n <div class=\"file\">\n <i class=\"fa-regular fa-folder-open\"></i>\n {{ replyFile().name }}\n </div>\n </div>\n }\n\n @if (replyAudio() || replyVoice()) {\n <div class=\"ax-message-reply-container\">{{ replyAudio().type }}</div>\n }\n\n <div class=\"ax-text-message\" [innerHtml]=\"_text()\"></div>\n `,\n styleUrl: './conversation-message-text.component.scss',\n encapsulation: ViewEncapsulation.None,\n inputs: ['message'],\n providers: [{ provide: AXComponent, useExisting: AXConversationTextMessageComponent }],\n})\nexport class AXConversationTextMessageComponent extends AXConversationMessageBaseComponent implements OnInit {\n /**\n * @ignore\n */\n protected _text = signal('');\n\n /**\n * @ignore\n */\n protected replyText = signal<AXConversationMessage | null>(null);\n\n /**\n * @ignore\n */\n protected replyImage = signal<AXConversationMessage | null>(null);\n\n /**\n * @ignore\n */\n protected replyVideo = signal<AXConversationMessage | null>(null);\n\n /**\n * @ignore\n */\n protected replyAudio = signal<AXConversationMessage | null>(null);\n\n /**\n * @ignore\n */\n protected replyVoice = signal<AXConversationMessage | null>(null);\n\n /**\n * @ignore\n */\n protected replyFile = signal<AXConversationMessage | null>(null);\n\n /**\n * @ignore\n */\n private conversationService = inject(AXConversationService);\n\n ngOnInit(): void {\n this._text.set(this.message?.content);\n\n if (!this.message?.replyTo) return;\n\n const replyMessage = this.conversationService.chats().find((chat) => chat.id === this.message?.replyTo?.id);\n\n switch (replyMessage.type) {\n case 'text':\n this.replyText.set(replyMessage);\n break;\n case 'image':\n this.replyImage.set(replyMessage);\n break;\n case 'video':\n this.replyVideo.set(replyMessage);\n break;\n case 'audio':\n this.replyAudio.set(replyMessage);\n break;\n case 'voice':\n this.replyVoice.set(replyMessage);\n break;\n case 'file':\n this.replyFile.set(replyMessage);\n break;\n }\n }\n}\n","import { AXComponent } from '@acorex/cdk/common';\nimport { Component, OnInit, signal } from '@angular/core';\nimport { AXConversationMessageBaseComponent } from '../../conversation.types';\n\n/**\n * A component for displaying a video message with playback controls.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-conversation-message-video',\n template: `<video controls [src]=\"_videoUrl()\"></video>`,\n styles: `\n video {\n width: 100%;\n height: 100%;\n }\n `,\n providers: [{ provide: AXComponent, useExisting: AXConversationMessageVideoComponent }],\n})\nexport class AXConversationMessageVideoComponent extends AXConversationMessageBaseComponent implements OnInit {\n /**\n * @ignore\n */\n protected _videoUrl = signal('');\n\n /**\n * @ignore\n */\n ngOnInit(): void {\n this._videoUrl.set(this.message?.content);\n }\n}\n","import { AXComponent } from '@acorex/cdk/common';\nimport { AXAudioWaveChangeEvent, AXAudioWaveComponent, AXWaveConfig } from '@acorex/components/audio-wave';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXLoadingSpinnerComponent } from '@acorex/components/loading';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe, isPlatformBrowser } from '@angular/common';\nimport {\n Component,\n HostBinding,\n PLATFORM_ID,\n ViewChild,\n ViewEncapsulation,\n afterNextRender,\n inject,\n signal,\n} from '@angular/core';\nimport { AXConversationViewComponent } from '../../conversation-view/conversation-view.component';\nimport { AXConversationMessageBaseComponent } from '../../conversation.types';\n\n/**\n * A component for displaying and handling audio messages in a conversation.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-conversation-message-audio',\n templateUrl: './conversation-message-voice.component.html',\n styleUrl: `./conversation-message-voice.component.scss`,\n encapsulation: ViewEncapsulation.None,\n inputs: ['message'],\n imports: [AXDecoratorGenericComponent, AXLoadingSpinnerComponent, AXAudioWaveComponent, AsyncPipe, AXFormatPipe],\n providers: [{ provide: AXComponent, useExisting: AXConversationVoiceMessageComponent }],\n})\nexport class AXConversationVoiceMessageComponent extends AXConversationMessageBaseComponent {\n /**\n * @ignore\n */\n @ViewChild('a') audio: AXAudioWaveComponent;\n\n /**\n * @ignore\n */\n protected config: AXWaveConfig = { url: '' };\n\n /**\n * @ignore\n */\n protected audioState = signal<'playing' | 'paused' | 'loading' | 'ready' | 'error'>('paused');\n\n /**\n * @ignore\n */\n private parent = inject(AXConversationViewComponent);\n private platformID = inject(PLATFORM_ID);\n\n /**\n * @ignore\n */\n protected selectedRate = signal(1);\n\n /**\n * @ignore\n */\n private selectedRateIndex = signal(1);\n\n /**\n * @ignore\n */\n protected audioProgress = signal(0);\n\n /**\n * @ignore\n */\n protected timeLeft = signal(0);\n\n /**\n * @ignore\n */\n protected currentTime = signal(0);\n\n /**\n * @ignore\n */\n protected duration = signal(0);\n\n #init = afterNextRender(() => {\n this.config.url = this.message?.content;\n this.config.audioRate = 0.25;\n this.setWaveColor();\n this.audio.onStatusChanged.subscribe((c) => {\n this.parent.onAction.emit(c);\n });\n this.handleLoadingProgress();\n });\n /**\n * @ignore\n */\n private setWaveColor() {\n let waveColor = '';\n let progressColor = '';\n if (isPlatformBrowser(this.platformID)) {\n if (this.message.fromId) {\n waveColor = getComputedStyle(document.body).getPropertyValue('--ax-message-other-bar-color');\n progressColor = getComputedStyle(document.body).getPropertyValue('--ax-message-other-progress-color');\n } else {\n waveColor = getComputedStyle(document.body).getPropertyValue('--ax-message-own-bar-color');\n progressColor = getComputedStyle(document.body).getPropertyValue('--ax-message-own-progress-color');\n }\n }\n this.config.waveColor = waveColor;\n this.config.progressColor = progressColor;\n }\n\n /**\n * Pauses the audio playback and updates the audio state to 'paused'.\n * @ignore\n */\n protected handlePauseClick() {\n this.audio?.pause();\n this.audioState.set('paused');\n }\n\n /**\n * Plays the audio and updates the audio state to 'playing'.\n * @ignore\n */\n protected handlePlayClick() {\n this.audio?.play()?.then(() => {\n this.audioState.set('playing');\n });\n }\n\n /**\n * Updates audio state and progress based on status changes from the audio wave.\n * @param e - The event containing status and data related to the audio.\n * @ignore\n */\n protected handleOnStatusChanged(e: AXAudioWaveChangeEvent) {\n if (e.status === 'load' || e.status === 'loading') {\n this.audioState.set('loading');\n }\n if (e.status === 'loading') {\n this.audioProgress.set(e.data.percent);\n this.duration.set(Math.ceil(e.data.duration * 1000));\n }\n if (e.status === 'ready') {\n this.audioState.set('ready');\n this.duration.set(Math.ceil(e.data.duration * 1000));\n }\n if (e.status === 'finish') {\n this.audioState.set('paused');\n }\n if (e.status === 'timeupdate') {\n this.timeLeft.set(this.duration() - e.data.currentTime * 1000);\n this.currentTime.set(e.data.currentTime * 1000);\n }\n if (e.status === 'error') {\n this.audioState.set('error');\n }\n }\n\n /**\n * @ignore\n */\n protected handleLoadingProgress() {\n // this.audioLoaderProgress?.nativeElement.style.cssText = `--ax-audio-progress: ${this.audioProgress()}`;\n }\n\n /**\n * Handles the cancellation of a loading operation.\n * @ignore\n */\n protected handleCancelLoading() {\n //\n }\n\n /**\n * Reloads the audio and updates the state to 'loading'.\n * @ignore\n */\n protected handleReloadClick() {\n //\n this.audioState.set('loading');\n this.audio.load();\n }\n\n /**\n * Cycles through predefined audio playback rates and updates the rate.\n * @ignore\n */\n protected handleRateClick() {\n const rates = [0.5, 1, 2, 4];\n if (this.selectedRateIndex() == rates.length - 1) {\n this.selectedRateIndex.set(0);\n } else {\n this.selectedRateIndex.set(this.selectedRateIndex() + 1);\n }\n this.selectedRate.set(rates[this.selectedRateIndex()]);\n this.audio.setRate(this.selectedRate());\n }\n\n /**\n * @ignore\n */\n @HostBinding('class')\n get __hostClass(): string {\n return `${this.message.fromId ? 'ax-state-other' : 'ax-state-own'}`;\n }\n}\n","<ax-prefix>\n @switch (audioState()) {\n @case ('paused') {\n {{ currentTime() | format: 'time-duration' | async }}\n }\n @case ('playing') {\n {{ currentTime() | format: 'time-duration' | async }}\n }\n @default {\n {{ duration() | format: 'time-duration' | async }}\n }\n }\n <button class=\"ax-audio-speed\" (click)=\"handleRateClick()\"></button>\n</ax-prefix>\n<div class=\"ax-conversation-controller\">\n @switch (audioState()) {\n @case ('playing') {\n <button (click)=\"handlePauseClick()\">\n <i class=\"ax-icon ax-icon-pause\"></i>\n </button>\n }\n\n @case ('ready') {\n <button (click)=\"handlePlayClick()\">\n <i class=\"ax-icon ax-icon-play\"></i>\n </button>\n }\n\n @case ('paused') {\n <button (click)=\"handlePlayClick()\">\n <i class=\"ax-icon ax-icon-play\"></i>\n </button>\n }\n\n @case ('error') {\n <button class=\"ax-state-error\" (click)=\"handleReloadClick()\">\n <i class=\"ax-icon ax-icon-reload\"></i>\n </button>\n }\n\n @default {\n <button (click)=\"handleCancelLoading()\">\n <ax-loading-spinner\n [size]=\"24\"\n [stroke]=\"2\"\n [color]=\"message.fromId ? 'white' : 'warning'\"\n ></ax-loading-spinner>\n </button>\n }\n }\n</div>\n<ax-audio-wave #a [config]=\"config\" (onStatusChanged)=\"handleOnStatusChanged($event)\"></ax-audio-wave>\n<ax-suffix>\n <div class=\"ax-audio-rate-button\" [class.ax-state-own]=\"!message?.fromId\" (click)=\"handleRateClick()\">\n {{ selectedRate() }}X\n </div>\n</ax-suffix>\n","import { AXRippleDirective } from '@acorex/cdk/common';\nimport { AXVirtualScrollModule } from '@acorex/cdk/virtual-scroll';\nimport { AXAudioWaveModule } from '@acorex/components/audio-wave';\nimport { AXAvatarModule } from '@acorex/components/avatar';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCircularProgressModule } from '@acorex/components/circular-progress';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPopoverModule } from '@acorex/components/popover';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXRangeSliderModule } from '@acorex/components/range-slider';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFileModule } from '@acorex/core/file';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\nimport { AsyncPipe, CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXConversationContainerComponent } from './conversation-container/conversation-container.component';\nimport { AXConversationInputComponent } from './conversation-input/conversation-input.component';\nimport { AXConversationMessageComponent } from './conversation-message/conversation-message.component';\nimport { AXConversationMessageAudioComponent } from './conversation-messages/conversation-message-audio/conversation-message-audio.component';\nimport { AXConversationFileMessageComponent } from './conversation-messages/conversation-message-file/conversation-message-file.component';\nimport { AXConversationMessageImageComponent } from './conversation-messages/conversation-message-image/conversation-message-image.component';\nimport { AXConversationTextMessageComponent } from './conversation-messages/conversation-message-text/conversation-message-text.component';\nimport { AXConversationMessageVideoComponent } from './conversation-messages/conversation-message-video/conversation-message-video.component';\nimport { AXConversationVoiceMessageComponent } from './conversation-messages/conversation-message-voice/conversation-message-voice.component';\nimport { AXConversationViewComponent } from './conversation-view/conversation-view.component';\nimport { AXConversationMessageType } from './conversation.types';\nimport { AXConversationMessageTypeRegistryService } from './services/conversation-message-type-registry.service';\n\nexport interface AXChatModuleConfig {\n types: AXConversationMessageType[];\n}\n\nconst COMPONENT = [\n AXConversationViewComponent,\n AXConversationInputComponent,\n AXConversationMessageComponent,\n AXConversationTextMessageComponent,\n AXConversationVoiceMessageComponent,\n AXConversationFileMessageComponent,\n AXConversationContainerComponent,\n AXConversationMessageAudioComponent,\n AXConversationMessageImageComponent,\n AXConversationMessageVideoComponent,\n];\nconst MODULES = [\n CommonModule,\n FormsModule,\n AsyncPipe,\n AXRippleDirective,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXDropdownModule,\n AXFormatModule,\n AXAudioWaveModule,\n AXCircularProgressModule,\n AXDateTimeModule,\n CdkPortalOutlet,\n AXLoadingModule,\n AXAvatarModule,\n AXPopoverModule,\n AXFileModule,\n AXRangeSliderModule,\n AXVirtualScrollModule,\n];\n\n@NgModule({\n imports: [...MODULES, ...COMPONENT],\n exports: [...COMPONENT],\n providers: [AXPopupService],\n})\nexport class AXConversationModule {\n static forRoot(config?: AXChatModuleConfig): ModuleWithProviders<AXConversationModule> {\n return {\n ngModule: AXConversationModule,\n providers: [\n {\n provide: 'AXChatModuleFactory',\n useFactory: (registry: AXConversationMessageTypeRegistryService) => () => {\n if (config?.types?.length) {\n registry.register(...config.types);\n }\n registry.register({\n name: 'text',\n component: AXConversationTextMessageComponent,\n });\n registry.register({\n name: 'voice',\n component: AXConversationVoiceMessageComponent,\n });\n registry.register({\n name: 'file',\n component: AXConversationFileMessageComponent,\n });\n registry.register({\n name: 'audio',\n component: AXConversationMessageAudioComponent,\n });\n registry.register({\n name: 'image',\n component: AXConversationMessageImageComponent,\n });\n registry.register({\n name: 'video',\n component: AXConversationMessageVideoComponent,\n });\n },\n deps: [AXConversationMessageTypeRegistryService],\n multi: true,\n },\n ],\n };\n }\n\n static forChild(config?: AXChatModuleConfig): ModuleWithProviders<AXConversationModule> {\n return {\n ngModule: AXConversationModule,\n providers: [\n {\n provide: 'AXChatModuleFactory',\n useFactory: (registry: AXConversationMessageTypeRegistryService) => () => {\n if (config?.types?.length) {\n registry.register(...config.types);\n }\n },\n deps: [AXConversationMessageTypeRegistryService],\n multi: true,\n },\n ],\n };\n }\n\n /**\n * @ignore\n */\n constructor() {\n const instances = inject<any[]>('AXChatModuleFactory' as any, { optional: true });\n\n instances?.forEach((f) => {\n f();\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
|