fmode-ng 0.0.41 → 0.0.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/LICENSE.md +8 -0
  2. package/esm2022/fmode-ng.mjs +10 -5
  3. package/esm2022/lib/aigc/agent/agent.prompt.mjs +10 -122
  4. package/esm2022/lib/aigc/agent/index.mjs +10 -2
  5. package/esm2022/lib/aigc/avatar/avatar.module.mjs +10 -45
  6. package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +10 -2
  7. package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +10 -315
  8. package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +10 -3
  9. package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +10 -57
  10. package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +10 -97
  11. package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +10 -104
  12. package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +10 -111
  13. package/esm2022/lib/aigc/avatar/index.mjs +10 -8
  14. package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +10 -2
  15. package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +8 -166
  16. package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +10 -36
  17. package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +10 -2
  18. package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +8 -141
  19. package/esm2022/lib/aigc/chat/chat-list/index.mjs +10 -2
  20. package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +10 -40
  21. package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +10 -2
  22. package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +10 -92
  23. package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +10 -2
  24. package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +10 -2
  25. package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +8 -207
  26. package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +10 -236
  27. package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +10 -137
  28. package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +10 -69
  29. package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +10 -2
  30. package/esm2022/lib/aigc/chat/index.mjs +10 -8
  31. package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +10 -82
  32. package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +8 -269
  33. package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +10 -51
  34. package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +10 -24
  35. package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +10 -94
  36. package/esm2022/lib/aigc/index.mjs +10 -13
  37. package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +10 -21
  38. package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +8 -736
  39. package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +8 -181
  40. package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +10 -7
  41. package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +9 -194
  42. package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +10 -27
  43. package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +10 -27
  44. package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +10 -68
  45. package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +8 -229
  46. package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +10 -2
  47. package/esm2022/lib/aigc/voice/audio.player.mjs +10 -52
  48. package/esm2022/lib/aigc/voice/class-asr.mjs +8 -79
  49. package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +8 -501
  50. package/esm2022/lib/aigc/voice/index.mjs +10 -3
  51. package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +10 -38
  52. package/esm2022/lib/aigc/voice/lib/resample.mjs +10 -34
  53. package/esm2022/lib/aigc/voice/stream.player.mjs +10 -0
  54. package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +8 -233
  55. package/esm2022/lib/aigc/voice/tts/index.mjs +10 -2
  56. package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +10 -190
  57. package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +10 -33
  58. package/esm2022/lib/map/index.mjs +10 -4
  59. package/esm2022/lib/map/map.module.mjs +10 -61
  60. package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +10 -110
  61. package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +8 -98
  62. package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +8 -100
  63. package/esm2022/lib/nova-cloud/index.mjs +10 -2
  64. package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +10 -148
  65. package/esm2022/lib/platform/cross.service.mjs +10 -63
  66. package/esm2022/lib/platform/index.mjs +10 -2
  67. package/esm2022/lib/social/index.mjs +10 -2
  68. package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +8 -236
  69. package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +10 -59
  70. package/esm2022/lib/storage/index.mjs +10 -5
  71. package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +8 -130
  72. package/esm2022/lib/storage/service-upload/index.mjs +10 -2
  73. package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +8 -462
  74. package/esm2022/lib/storage/service-upload/util-file-md5.mjs +10 -28
  75. package/esm2022/lib/storage/storage.module.mjs +10 -41
  76. package/esm2022/lib/user/account/account.service.mjs +10 -221
  77. package/esm2022/lib/user/captcha/captcha.component.mjs +10 -135
  78. package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +10 -62
  79. package/esm2022/lib/user/index.mjs +10 -17
  80. package/esm2022/lib/user/login/auth.guard.mjs +10 -28
  81. package/esm2022/lib/user/login/auth.service.mjs +8 -373
  82. package/esm2022/lib/user/login/login.component.mjs +10 -913
  83. package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +10 -273
  84. package/esm2022/lib/user/profile/auth-profile.guard.mjs +10 -27
  85. package/esm2022/lib/user/profile/auth-profile.service.mjs +10 -122
  86. package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +10 -115
  87. package/esm2022/lib/user/profile/profile.module.mjs +10 -57
  88. package/esm2022/lib/user/staff/index.mjs +10 -4
  89. package/esm2022/lib/user/staff/staff.guard.mjs +10 -26
  90. package/esm2022/lib/user/staff/staff.module.mjs +10 -18
  91. package/esm2022/lib/user/staff/staff.service.mjs +10 -85
  92. package/esm2022/lib/user/user-name.pipe.mjs +10 -29
  93. package/esm2022/lib/user/user.module.mjs +10 -106
  94. package/esm2022/lib/video/fm-video/fm-video.component.mjs +10 -67
  95. package/esm2022/lib/video/index.mjs +10 -2
  96. package/esm2022/public-api.mjs +10 -13
  97. package/fesm2022/fmode-ng.mjs +7 -8895
  98. package/fesm2022/fmode-ng.mjs.map +1 -1
  99. package/lib/aigc/voice/fmode-voice.service.d.ts +18 -1
  100. package/lib/aigc/voice/stream.player.d.ts +10 -0
  101. package/lib/aigc/voice/tts/fmode-tts-class.d.ts +2 -2
  102. package/package.json +1 -1
@@ -1,168 +1,10 @@
1
- import { Component, Input } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { ToastController } from "@ionic/angular";
4
- import { Router, RouterModule } from '@angular/router';
5
- import { IonicModule, Platform } from "@ionic/angular";
6
- import { FmodeVoiceService } from '../../voice';
7
- import { FmodeChat, ChatService } from '../../service-fmai/service-chat';
8
- import { NovaCloudService } from '../../../nova-cloud/nova-cloud.service';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@ionic/angular";
11
- import * as i2 from "@angular/router";
12
- import * as i3 from "../../voice";
13
- import * as i4 from "../../../nova-cloud/nova-cloud.service";
14
- import * as i5 from "../../service-fmai/service-chat";
15
- import * as i6 from "@angular/common";
16
- export class ModalChatVoiceInputComponent {
17
- constructor(platform, router, voiceServ, toastCtrl, ncloud, chatServ) {
18
- this.platform = platform;
19
- this.router = router;
20
- this.voiceServ = voiceServ;
21
- this.toastCtrl = toastCtrl;
22
- this.ncloud = ncloud;
23
- this.chatServ = chatServ;
24
- /**
25
- * 开始讲话方式:click点击开始/点击结束 press按住讲话/松开结束
26
- * @default click
27
- */
28
- this.talkMode = "click";
29
- this.talkTips = "点击话筒开始讲话";
30
- this.errorText = ``;
31
- /**
32
- * 音频提示音播放
33
- */
34
- this.player = new Audio();
35
- }
36
- ngOnInit() {
37
- if (this.talkMode == "press") {
38
- this.talkTips = "轻触底部开始讲话";
39
- }
40
- // 开启录音唤醒功能
41
- setTimeout(() => {
42
- this.initVoiceSevice();
43
- this.initVoiceASR();
44
- }, 500);
45
- }
1
+
46
2
  /**
47
- * ASR唤醒功能
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs
48
7
  */
49
- async initVoiceASR() {
50
- // 开启录音权限
51
- this.voiceServ.requestPermission().then(() => {
52
- this.voiceServ.openWithPriviledge();
53
- // 开始监听唤醒词 Nihao Hello
54
- this.startASRAwake();
55
- });
56
- }
57
- // ASR - 唤醒词
58
- async startASRAwake() {
59
- await this.voiceServ.openWithPriviledge();
60
- let speech = new this.voiceServ.webSpeech(this.platform);
61
- speech.startRecognition("Nihao | Hello");
62
- }
63
- playMusic(action) {
64
- this.player.src = `/assets/avatar/voice/${action}.mp3`;
65
- this.player.play();
66
- }
67
- /**
68
- * 初始化录音转录服务
69
- * @desc
70
- * 根据数字角色对话状态,设计语音转录各事件处理过程
71
- * 嵌入提示音
72
- * 嵌入动画
73
- * 嵌入唤醒词切换逻辑
74
- */
75
- initVoiceSevice() {
76
- this.fmodeChat.userInput = this.voiceServ.resultText;
77
- this.voiceServ.requestPermission().then(() => {
78
- this.voiceServ.openWithPriviledge();
79
- });
80
- // 开始录音前 播放倾听动画
81
- // 开始录音前 播放提示音
82
- this.voiceServ.onBeforeStartTalk = () => {
83
- this.fmodeChat.playAnimation("listening");
84
- this.playMusic("start-talk");
85
- };
86
- // 用户取消录音前 播放提示音
87
- this.voiceServ.onBeforeCancelTalk = () => {
88
- this.playMusic("interupt-talk");
89
- this.fmodeChat.playAnimation("waiting");
90
- };
91
- // 用户取消录音后 麦克风实时监听唤醒词
92
- this.voiceServ.onAfterCancelTalk = () => {
93
- this.startASRAwake(); // 监听与麦克风冲突,需要重启
94
- };
95
- // 完成录音前 播放提示音
96
- // 完成录音后 执行处理过程
97
- this.voiceServ.onBeforeFinishTalk = () => {
98
- this.fmodeChat.playAnimation("thinking");
99
- this.playMusic("stop-talk");
100
- };
101
- this.voiceServ.onAfterFinishTalk = () => {
102
- console.log("onAfterFinishTalk");
103
- this.fmodeChat.userInput = this.voiceServ?.resultText;
104
- this.sendMessage(); // 发送消息
105
- this.startASRAwake(); // 监听与麦克风冲突,需要重启
106
- };
107
- }
108
- /**
109
- * 发送语音消息
110
- *
111
- */
112
- async sendMessage() {
113
- // 检测用户登录情况
114
- // let isLoginLock = await this.authServ.checkLoginLock()
115
- // if(!isLoginLock) return false
116
- // 检测余额及模型付费限制
117
- // let payCheck = await this.checkBalance()
118
- // if(!payCheck) return false
119
- // 检测用户输入内容空值
120
- if (!this.fmodeChat.userInput) {
121
- this.errorText = `内容不能为空`;
122
- let toast = await this.toastCtrl.create({
123
- message: this.errorText,
124
- position: "top",
125
- icon: 'alert',
126
- color: "warning-circle",
127
- duration: 1000
128
- });
129
- toast.present();
130
- return;
131
- }
132
- // 正常发送消息
133
- this.fmodeChat?.sendMessage(this.voiceServ.resultText, null, (msg) => {
134
- }, {
135
- onSSMLComplete: (voice) => {
136
- console.log(voice);
137
- }
138
- });
139
- this.fmodeChat.userInput = ``;
140
- this.fmodeChat.userImage = ``;
141
- }
142
- testTTS(sentence) {
143
- console.log(sentence);
144
- sentence = sentence || "你好呀,我是飞马小智!很高兴为您介绍脑控科技的发展历程。我们成立于2019年";
145
- let speech = new this.voiceServ.webSpeech(this.platform);
146
- speech.speak(sentence);
147
- }
148
- testXunfeiTTS() {
149
- // this.voiceServ.ttsXunfei.connectWebSocket()
150
- }
151
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ModalChatVoiceInputComponent, deps: [{ token: i1.Platform }, { token: i2.Router }, { token: i3.FmodeVoiceService }, { token: i1.ToastController }, { token: i4.NovaCloudService }, { token: i5.ChatService }], target: i0.ɵɵFactoryTarget.Component }); }
152
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ModalChatVoiceInputComponent, isStandalone: true, selector: "fm-modal-chat-voice-input", inputs: { fmodeChat: "fmodeChat", talkMode: "talkMode" }, providers: [
153
- FmodeVoiceService
154
- ], ngImport: i0, template: " \n <ng-container *ngIf=\"fmodeChat\">\n\n <!-- \u7528\u6237\u8F93\u5165 \u63D0\u793A\u533A\u57DF -->\n <div class=\"user-asr-input\" style=\"text-align: center;\" *ngIf=\"!fmodeChat?.userInput && voiceServ.btnStatus!='OPEN'\">{{talkTips}}</div>\n <div class=\"user-asr-input\">{{fmodeChat?.userInput}}</div>\n \n <!-- \u6D4B\u8BD5\u6309\u94AE -->\n <div class=\"test-button-group\" *ngIf=\"false\">\n <button class=\"button-record\" (click)=\"voiceServ.toggleRecord()\">\u5F00\u59CB\u5F55\u5236 {{voiceServ.connStatus}} {{voiceServ.btnStatus}}</button>\n <br>\n <button class=\"button-record\" (click)=\"voiceServ.playRecord()\">\u64AD\u653E\u5F55\u5236\u7ED3\u679C</button>\n <br>\n <button class=\"button-record\" (click)=\"voiceServ.playBuffers()\">\u64AD\u653EBuffers\u7ED3\u679C</button>\n <button (click)=\"testTTS()\">\u6D4B\u8BD5TTS\u7EAFWEB</button>\n <button (click)=\"startASR()\">\u6D4B\u8BD5ASR</button> \n <button (click)=\"testXunfeiTTS()\">\u6D4B\u8BD5\u5408\u6210</button> \n </div>\n\n \n \n <!-- \u4EA4\u4E92\u6309\u94AE -->\n <ion-fab slot=\"fixed\" horizontal=\"center\" vertical=\"bottom\">\n <ng-container *ngIf=\"talkMode=='click'\">\n <!-- \u9ED8\u8BA4\u6309\u94AE\uFF1A\u5F00\u59CB\u8BB2\u8BDD -->\n <ion-fab-button color=\"primary\" closeIcon=\"checkmark\" (click)=\"voiceServ.toggleRecord()\">\n <ion-icon name=\"mic-outline\"></ion-icon>\n </ion-fab-button>\n\n <!-- \u8BB2\u8BDD\u4E2D\uFF1A\u53D6\u6D88\u53D1\u9001 -->\n <ion-fab-list side=\"end\">\n <ion-fab-button [class]=\"'loading'\" (click)=\"voiceServ.cancelTalk()\">\n <ion-icon name=\"pause-outline\"></ion-icon>\n </ion-fab-button>\n </ion-fab-list>\n </ng-container>\n \n <ng-container *ngIf=\"talkMode=='press'\">\n <ion-fab-button color=\"primary\" closeIcon=\"mic-outline\" (touchstart)=\"voiceServ.toggleRecord()\" (touchend)=\"voiceServ.cancelTalk()\">\n <ion-icon name=\"mic-outline\"></ion-icon>\n </ion-fab-button>\n </ng-container>\n </ion-fab>\n\n\n <!-- \u97F3\u9891\u6CE2\u52A8 -->\n <div class=\"record-wave\">\n </div>\n</ng-container>\n", styles: ["ion-fab{margin-bottom:10vh}.fab-button-close-active:before{content:\"\";position:absolute;top:-5px;left:-5px;width:66px;height:66px;border-radius:50%;border:5px solid #fff;border-top-color:transparent;animation:spin 2s ease-in-out infinite;animation-fill-mode:both;animation-play-state:running}.record-wave{position:fixed;bottom:0;width:100vw;height:6vh}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.IonFab, selector: "ion-fab", inputs: ["activated", "edge", "horizontal", "vertical"] }, { kind: "component", type: i1.IonFabButton, selector: "ion-fab-button", inputs: ["activated", "closeIcon", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "show", "size", "target", "translucent", "type"] }, { kind: "component", type: i1.IonFabList, selector: "ion-fab-list", inputs: ["activated", "side"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "ngmodule", type: RouterModule }] }); }
155
- }
156
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ModalChatVoiceInputComponent, decorators: [{
157
- type: Component,
158
- args: [{ selector: 'fm-modal-chat-voice-input', standalone: true, imports: [CommonModule,
159
- IonicModule, RouterModule,
160
- ], providers: [
161
- FmodeVoiceService
162
- ], template: " \n <ng-container *ngIf=\"fmodeChat\">\n\n <!-- \u7528\u6237\u8F93\u5165 \u63D0\u793A\u533A\u57DF -->\n <div class=\"user-asr-input\" style=\"text-align: center;\" *ngIf=\"!fmodeChat?.userInput && voiceServ.btnStatus!='OPEN'\">{{talkTips}}</div>\n <div class=\"user-asr-input\">{{fmodeChat?.userInput}}</div>\n \n <!-- \u6D4B\u8BD5\u6309\u94AE -->\n <div class=\"test-button-group\" *ngIf=\"false\">\n <button class=\"button-record\" (click)=\"voiceServ.toggleRecord()\">\u5F00\u59CB\u5F55\u5236 {{voiceServ.connStatus}} {{voiceServ.btnStatus}}</button>\n <br>\n <button class=\"button-record\" (click)=\"voiceServ.playRecord()\">\u64AD\u653E\u5F55\u5236\u7ED3\u679C</button>\n <br>\n <button class=\"button-record\" (click)=\"voiceServ.playBuffers()\">\u64AD\u653EBuffers\u7ED3\u679C</button>\n <button (click)=\"testTTS()\">\u6D4B\u8BD5TTS\u7EAFWEB</button>\n <button (click)=\"startASR()\">\u6D4B\u8BD5ASR</button> \n <button (click)=\"testXunfeiTTS()\">\u6D4B\u8BD5\u5408\u6210</button> \n </div>\n\n \n \n <!-- \u4EA4\u4E92\u6309\u94AE -->\n <ion-fab slot=\"fixed\" horizontal=\"center\" vertical=\"bottom\">\n <ng-container *ngIf=\"talkMode=='click'\">\n <!-- \u9ED8\u8BA4\u6309\u94AE\uFF1A\u5F00\u59CB\u8BB2\u8BDD -->\n <ion-fab-button color=\"primary\" closeIcon=\"checkmark\" (click)=\"voiceServ.toggleRecord()\">\n <ion-icon name=\"mic-outline\"></ion-icon>\n </ion-fab-button>\n\n <!-- \u8BB2\u8BDD\u4E2D\uFF1A\u53D6\u6D88\u53D1\u9001 -->\n <ion-fab-list side=\"end\">\n <ion-fab-button [class]=\"'loading'\" (click)=\"voiceServ.cancelTalk()\">\n <ion-icon name=\"pause-outline\"></ion-icon>\n </ion-fab-button>\n </ion-fab-list>\n </ng-container>\n \n <ng-container *ngIf=\"talkMode=='press'\">\n <ion-fab-button color=\"primary\" closeIcon=\"mic-outline\" (touchstart)=\"voiceServ.toggleRecord()\" (touchend)=\"voiceServ.cancelTalk()\">\n <ion-icon name=\"mic-outline\"></ion-icon>\n </ion-fab-button>\n </ng-container>\n </ion-fab>\n\n\n <!-- \u97F3\u9891\u6CE2\u52A8 -->\n <div class=\"record-wave\">\n </div>\n</ng-container>\n", styles: ["ion-fab{margin-bottom:10vh}.fab-button-close-active:before{content:\"\";position:absolute;top:-5px;left:-5px;width:66px;height:66px;border-radius:50%;border:5px solid #fff;border-top-color:transparent;animation:spin 2s ease-in-out infinite;animation-fill-mode:both;animation-play-state:running}.record-wave{position:fixed;bottom:0;width:100vw;height:6vh}\n"] }]
163
- }], ctorParameters: () => [{ type: i1.Platform }, { type: i2.Router }, { type: i3.FmodeVoiceService }, { type: i1.ToastController }, { type: i4.NovaCloudService }, { type: i5.ChatService }], propDecorators: { fmodeChat: [{
164
- type: Input
165
- }], talkMode: [{
166
- type: Input
167
- }] } });
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY2hhdC12b2ljZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL21vZGFsLWNoYXQtdm9pY2UtaW5wdXQvbW9kYWwtY2hhdC12b2ljZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL21vZGFsLWNoYXQtdm9pY2UtaW5wdXQvbW9kYWwtY2hhdC12b2ljZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFRLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWhELE9BQU8sRUFBa0IsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQWlCLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRXJFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFDLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7OztBQWUxRSxNQUFNLE9BQU8sNEJBQTRCO0lBYXZDLFlBQ1UsUUFBaUIsRUFDakIsTUFBYSxFQUNkLFNBQTJCLEVBQzFCLFNBQXlCLEVBQ3pCLE1BQXVCLEVBQ3hCLFFBQW9CO1FBTG5CLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDakIsV0FBTSxHQUFOLE1BQU0sQ0FBTztRQUNkLGNB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QyxDQUFDLEdBQU8sRUFBQyxFQUFFO1FBRXRFLENBQUMsRUFBQztZQUNBLGNBQWMsRUFBQyxDQUFDLEtBQVMsRUFBQyxFQUFFO2dCQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3BCLENBQUM7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUE7UUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFBO0lBQy9CLENBQUM7SUFFQyxPQUFPLENBQUMsUUFBUztRQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDckIsUUFBUSxHQUFHLFFBQVEsSUFBSSx3Q0FBd0MsQ0FBQTtRQUMvRCxJQUFJLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3hCLENBQUM7SUFDRCxhQUFhO1FBQ1gsOENBQThDO0lBQ2hELENBQUM7K0dBM0pNLDRCQUE0QjttR0FBNUIsNEJBQTRCLGtJQU43QjtZQUNSLGlCQUFpQjtTQUNsQiwwQkNyQkgsNndFQWlEQSw2WkRqQ1ksWUFBWSxrSUFDcEIsV0FBVywycEJBQUMsWUFBWTs7NEZBUWYsNEJBQTRCO2tCQVp4QyxTQUFTOytCQUNFLDJCQUEyQixjQUN6QixJQUFJLFdBQ1AsQ0FBQyxZQUFZO3dCQUNwQixXQUFXLEVBQUMsWUFBWTtxQkFDekIsYUFDUzt3QkFDUixpQkFBaUI7cUJBQ2xCO3lOQU1RLFNBQVM7c0JBQWpCLEtBQUs7Z0JBTUcsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCxPbkluaXQsSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUb2FzdENvbnRyb2xsZXIgfSBmcm9tIFwiQGlvbmljL2FuZ3VsYXJcIlxuXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyLCBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSW9uaWNNb2R1bGUsIE5hdkNvbnRyb2xsZXIsIFBsYXRmb3JtIH0gZnJvbSBcIkBpb25pYy9hbmd1bGFyXCJcblxuaW1wb3J0IHsgRm1vZGVWb2ljZVNlcnZpY2UgfSBmcm9tICcuLi8uLi92b2ljZSc7XG5pbXBvcnQgeyBGbW9kZUNoYXQsQ2hhdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLWZtYWkvc2VydmljZS1jaGF0JztcbmltcG9ydCB7IEZtb2RlVFRTIH0gZnJvbSAnLi4vLi4vdm9pY2UvdHRzJztcbmltcG9ydCB7IE5vdmFDbG91ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9ub3ZhLWNsb3VkL25vdmEtY2xvdWQuc2VydmljZSc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZm0tbW9kYWwtY2hhdC12b2ljZS1pbnB1dCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsXG4gICAgSW9uaWNNb2R1bGUsUm91dGVyTW9kdWxlLFxuICBdLFxuICBwcm92aWRlcnM6W1xuICAgIEZtb2RlVm9pY2VTZXJ2aWNlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RhbC1jaGF0LXZvaWNlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kYWwtY2hhdC12b2ljZS1pbnB1dC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE1vZGFsQ2hhdFZvaWNlSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXR7XG5cbiAgQElucHV0KCkgZm1vZGVDaGF0OkZtb2RlQ2hhdHx1bmRlZmluZWRcblxuICAgLyoqXG4gICAgICog5byA5aeL6K6y6K+d5pa55byP77yaY2xpY2vngrnlh7vlvIDlp4sv54K55Ye757uT5p2fIHByZXNz5oyJ5L2P6K6y6K+dL+advuW8gOe7k+adn1xuICAgICAqIEBkZWZhdWx0IGNsaWNrXG4gICAgKi9cbiAgQElucHV0KCkgdGFsa01vZGU6XCJjbGlja1wifFwicHJlc3NcIj1cImNsaWNrXCJcbiAgdGFsa1RpcHMgPSBcIueCueWHu+ivneetkuW8gOWni+iusuivnVwiXG5cbiAgZXJyb3JUZXh0OnN0cmluZyA9IGBgXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTpQbGF0Zm9ybSxcbiAgICBwcml2YXRlIHJvdXRlcjpSb3V0ZXIsXG4gICAgcHVibGljIHZvaWNlU2VydjpGbW9kZVZvaWNlU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0Q3RybDpUb2FzdENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBuY2xvdWQ6Tm92YUNsb3VkU2VydmljZSxcbiAgICBwdWJsaWMgY2hhdFNlcnY6Q2hhdFNlcnZpY2UsXG5cbiAgKXtcbiAgfVxuICBuZ09uSW5pdCgpe1xuICAgIGlmKHRoaXMudGFsa01vZGU9PVwicHJlc3NcIil7XG4gICAgICB0aGlzLnRhbGtUaXBzID0gXCLovbvop6blupXpg6jlvIDlp4vorrLor51cIlxuICAgIH1cblxuICAgIC8vIOW8gOWQr+W9lemfs+WUpOmGkuWKn+iDvVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pbml0Vm9pY2VTZXZpY2UoKVxuICAgICAgdGhpcy5pbml0Vm9pY2VBU1IoKVxuICAgIH0sIDUwMCk7XG4gIH1cblxuICAvKipcbiAgICogQVNS5ZSk6YaS5Yqf6IO9XG4gICAqL1xuICBhc3luYyBpbml0Vm9pY2VBU1IoKXtcbiAgICAvLyDlvIDlkK/lvZXpn7PmnYPpmZBcbiAgICB0aGlzLnZvaWNlU2Vydi5yZXF1ZXN0UGVybWlzc2lvbigpLnRoZW4oKCk9PntcbiAgICAgIHRoaXMudm9pY2VTZXJ2Lm9wZW5XaXRoUHJpdmlsZWRnZSgpXG4gICAgICAvLyDlvIDlp4vnm5HlkKzllKTphpLor40gTmloYW8gSGVsbG9cbiAgICAgIHRoaXMuc3RhcnRBU1JBd2FrZSgpXG4gICAgfSlcbiAgfVxuICAvLyBBU1IgLSDllKTphpLor41cbiAgYXN5bmMgc3RhcnRBU1JBd2FrZSgpe1xuICAgIGF3YWl0IHRoaXMudm9pY2VTZXJ2Lm9wZW5XaXRoUHJpdmlsZWRnZSgpO1xuICAgIGxldCBzcGVlY2ggPSBuZXcgdGhpcy52b2ljZVNlcnYud2ViU3BlZWNoKHRoaXMucGxhdGZvcm0pO1xuICAgIHNwZWVjaC5zdGFydFJlY29nbml0aW9uKFwiTmloYW8gfCBIZWxsb1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDpn7PpopHmj5DnpLrpn7Pmkq3mlL5cbiAgICovXG4gICBwbGF5ZXIgPSBuZXcgQXVkaW8oKTtcblxuICAgcGxheU11c2ljKGFjdGlvbil7XG4gICAgIHRoaXMucGxheWVyLnNyYyA9IGAvYXNzZXRzL2F2YXRhci92b2ljZS8ke2FjdGlvbn0ubXAzYFxuICAgICB0aGlzLnBsYXllci5wbGF5KCk7XG4gICB9XG5cbiAgIC8qKlxuICAgICAqIOWIneWni+WMluW9lemfs+i9rOW9leacjeWKoVxuICAgICAqIEBkZXNjXG4gICAgICog5qC55o2u5pWw5a2X6KeS6Imy5a+56K+d54q25oCB77yM6K6+6K6h6K+t6Z+z6L2s5b2V5ZCE5LqL5Lu25aSE55CG6L+H56iLXG4gICAgICog5bWM5YWl5o+Q56S66Z+zXG4gICAgICog5bWM5YWl5Yqo55S7XG4gICAgICog5bWM5YWl5ZSk6YaS6K+N5YiH5o2i6YC76L6RXG4gICAgICovXG4gICAgaW5pdFZvaWNlU2V2aWNlKCl7XG4gICAgICB0aGlzLmZtb2RlQ2hhdC51c2VySW5wdXQgPSB0aGlzLnZvaWNlU2Vydi5yZXN1bHRUZXh0XG4gICAgICB0aGlzLnZvaWNlU2Vydi5yZXF1ZXN0UGVybWlzc2lvbigpLnRoZW4oKCk9PntcbiAgICAgICAgdGhpcy52b2ljZVNlcnYub3BlbldpdGhQcml2aWxlZGdlKClcbiAgICAgIH0pXG5cbiAgICAgIC8vIOW8gOWni+W9lemfs+WJjSDmkq3mlL7lgL7lkKzliqjnlLtcbiAgICAgIC8vIOW8gOWni+W9lemfs+WJjSDmkq3mlL7mj5DnpLrpn7NcbiAgICAgIHRoaXMudm9pY2VTZXJ2Lm9uQmVmb3JlU3RhcnRUYWxrID0gKCk9PntcbiAgICAgICAgdGhpcy5mbW9kZUNoYXQucGxheUFuaW1hdGlvbihcImxpc3RlbmluZ1wiKVxuICAgICAgICB0aGlzLnBsYXlNdXNpYyhcInN0YXJ0LXRhbGtcIilcbiAgICAgIH1cblxuICAgICAgLy8g55So5oi35Y+W5raI5b2V6Z+z5YmNIOaSreaUvuaPkOekuumfs1xuICAgICAgdGhpcy52b2ljZVNlcnYub25CZWZvcmVDYW5jZWxUYWxrID0gKCk9PntcbiAgICAgICAgdGhpcy5wbGF5TXVzaWMoXCJpbnRlcnVwdC10YWxrXCIpXG4gICAgICAgIHRoaXMuZm1vZGVDaGF0LnBsYXlBbmltYXRpb24oXCJ3YWl0aW5nXCIpXG4gICAgICB9XG4gICAgICAvLyDnlKjmiLflj5bmtojlvZXpn7PlkI4g6bqm5YWL6aOO5a6e5pe255uR5ZCs5ZSk6YaS6K+NXG4gICAgICB0aGlzLnZvaWNlU2Vydi5vbkFmdGVyQ2FuY2VsVGFsayA9ICgpPT57XG4gICAgICAgIHRoaXMuc3RhcnRBU1JBd2FrZSgpIC8vIOebkeWQrOS4jum6puWFi+mjjuWGsueqge+8jOmcgOimgemHjeWQr1xuICAgICAgfVxuICAgICAgLy8g5a6M5oiQ5b2V6Z+z5YmNIOaSreaUvuaPkOekuumfs1xuICAgICAgLy8g5a6M5oiQ5b2V6Z+z5ZCOIOaJp+ihjOWkhOeQhui/h+eoi1xuICAgICAgdGhpcy52b2ljZVNlcnYub25CZWZvcmVGaW5pc2hUYWxrID0gKCk9PntcbiAgICAgICAgdGhpcy5mbW9kZUNoYXQucGxheUFuaW1hdGlvbihcInRoaW5raW5nXCIpXG4gICAgICAgIHRoaXMucGxheU11c2ljKFwic3RvcC10YWxrXCIpXG4gICAgICB9XG4gICAgICB0aGlzLnZvaWNlU2Vydi5vbkFmdGVyRmluaXNoVGFsayA9ICgpPT57XG4gICAgICAgIGNvbnNvbGUubG9nKFwib25BZnRlckZpbmlzaFRhbGtcIilcbiAgICAgICAgdGhpcy5mbW9kZUNoYXQudXNlcklucHV0ID0gdGhpcy52b2ljZVNlcnY/LnJlc3VsdFRleHRcbiAgICAgICAgdGhpcy5zZW5kTWVzc2FnZSgpIC8vIOWPkemAgea2iOaBr1xuICAgICAgICB0aGlzLnN0YXJ0QVNSQXdha2UoKSAvLyDnm5HlkKzkuI7puqblhYvpo47lhrLnqoHvvIzpnIDopoHph43lkK9cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogXG4gICAgICog5Y+R6YCB6K+t6Z+z5raI5oGvXG4gICAgICogXG4gICAgICovXG4gICAgIGFzeW5jIHNlbmRNZXNzYWdlKCl7XG5cbiAgICAgIC8vIOajgOa1i+eUqOaIt+eZu+W9leaDheWGtVxuICAgICAgLy8gbGV0IGlzTG9naW5Mb2NrID0gYXdhaXQgdGhpcy5hdXRoU2Vydi5jaGVja0xvZ2luTG9jaygpXG4gICAgICAvLyBpZighaXNMb2dpbkxvY2spIHJldHVybiBmYWxzZVxuICBcbiAgICAgIC8vIOajgOa1i+S9memineWPiuaooeWei+S7mOi0uemZkOWItlxuICAgICAgLy8gbGV0IHBheUNoZWNrID0gYXdhaXQgdGhpcy5jaGVja0JhbGFuY2UoKVxuICAgICAgLy8gaWYoIXBheUNoZWNrKSByZXR1cm4gZmFsc2VcbiAgXG4gICAgICAvLyDmo4DmtYvnlKjmiLfovpPlhaXlhoXlrrnnqbrlgLxcbiAgICAgIGlmKCF0aGlzLmZtb2RlQ2hhdC51c2VySW5wdXQpe1xuICAgICAgICB0aGlzLmVycm9yVGV4dCA9IGDlhoXlrrnkuI3og73kuLrnqbpgXG4gICAgICAgIGxldCB0b2FzdCA9IGF3YWl0IHRoaXMudG9hc3RDdHJsLmNyZWF0ZSh7XG4gICAgICAgICAgbWVzc2FnZTp0aGlzLmVycm9yVGV4dCxcbiAgICAgICAgICBwb3NpdGlvbjpcInRvcFwiLFxuICAgICAgICAgIGljb246J2FsZXJ0JyxcbiAgICAgICAgICBjb2xvcjpcIndhcm5pbmctY2lyY2xlXCIsXG4gICAgICAgICAgZHVyYXRpb246MTAwMFxuICAgICAgICB9KVxuICAgICAgICB0b2FzdC5wcmVzZW50KCk7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICBcbiAgICAgIC8vIOato+W4uOWPkemAgea2iOaBr1xuICAgICAgdGhpcy5mbW9kZUNoYXQ/LnNlbmRNZXNzYWdlKHRoaXMudm9pY2VTZXJ2LnJlc3VsdFRleHQsbnVsbCwobXNnOmFueSk9PntcbiAgICAgICAgXG4gICAgICB9LHtcbiAgICAgICAgb25TU01MQ29tcGxldGU6KHZvaWNlOmFueSk9PntcbiAgICAgICAgICBjb25zb2xlLmxvZyh2b2ljZSlcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmZtb2RlQ2hhdC51c2VySW5wdXQgPSBgYFxuICAgICAgdGhpcy5mbW9kZUNoYXQudXNlckltYWdlID0gYGBcbiAgICB9XG5cbiAgICAgIHRlc3RUVFMoc2VudGVuY2U/KXtcbiAgICAgICAgY29uc29sZS5sb2coc2VudGVuY2UpXG4gICAgICAgIHNlbnRlbmNlID0gc2VudGVuY2UgfHwgXCLkvaDlpb3lkYDvvIzmiJHmmK/po57pqazlsI/mmbrvvIHlvojpq5jlhbTkuLrmgqjku4vnu43ohJHmjqfnp5HmioDnmoTlj5HlsZXljobnqIvjgILmiJHku6zmiJDnq4vkuo4yMDE55bm0XCJcbiAgICAgICAgbGV0IHNwZWVjaCA9IG5ldyB0aGlzLnZvaWNlU2Vydi53ZWJTcGVlY2godGhpcy5wbGF0Zm9ybSk7XG4gICAgICAgIHNwZWVjaC5zcGVhayhzZW50ZW5jZSlcbiAgICAgIH1cbiAgICAgIHRlc3RYdW5mZWlUVFMoKXtcbiAgICAgICAgLy8gdGhpcy52b2ljZVNlcnYudHRzWHVuZmVpLmNvbm5lY3RXZWJTb2NrZXQoKVxuICAgICAgfVxufVxuXG4iLCIgICAgXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZtb2RlQ2hhdFwiPlxuXG4gICAgPCEtLSDnlKjmiLfovpPlhaUg5o+Q56S65Yy65Z+fIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWFzci1pbnB1dFwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiICpuZ0lmPVwiIWZtb2RlQ2hhdD8udXNlcklucHV0ICYmIHZvaWNlU2Vydi5idG5TdGF0dXMhPSdPUEVOJ1wiPnt7dGFsa1RpcHN9fTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWFzci1pbnB1dFwiPnt7Zm1vZGVDaGF0Py51c2VySW5wdXR9fTwvZGl2PlxuICAgIFxuICAgIDwhLS0g5rWL6K+V5oyJ6ZKuIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXN0LWJ1dHRvbi1ncm91cFwiICpuZ0lmPVwiZmFsc2VcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbi1yZWNvcmRcIiAoY2xpY2spPVwidm9pY2VTZXJ2LnRvZ2dsZVJlY29yZCgpXCI+5byA5aeL5b2V5Yi2IHt7dm9pY2VTZXJ2LmNvbm5TdGF0dXN9fSB7e3ZvaWNlU2Vydi5idG5TdGF0dXN9fTwvYnV0dG9uPlxuICAgICAgICA8YnI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24tcmVjb3JkXCIgKGNsaWNrKT1cInZvaWNlU2Vydi5wbGF5UmVjb3JkKClcIj7mkq3mlL7lvZXliLbnu5Pmnpw8L2J1dHRvbj5cbiAgICAgICAgPGJyPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uLXJlY29yZFwiIChjbGljayk9XCJ2b2ljZVNlcnYucGxheUJ1ZmZlcnMoKVwiPuaSreaUvkJ1ZmZlcnPnu5Pmnpw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwidGVzdFRUUygpXCI+5rWL6K+VVFRT57qvV0VCPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cInN0YXJ0QVNSKClcIj7mtYvor5VBU1I8L2J1dHRvbj4gXG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cInRlc3RYdW5mZWlUVFMoKVwiPua1i+ivleWQiOaIkDwvYnV0dG9uPiBcbiAgICA8L2Rpdj5cblxuICAgIFxuICAgIFxuICAgIDwhLS0g5Lqk5LqS5oyJ6ZKuIC0tPlxuICAgIDxpb24tZmFiIHNsb3Q9XCJmaXhlZFwiIGhvcml6b250YWw9XCJjZW50ZXJcIiB2ZXJ0aWNhbD1cImJvdHRvbVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFsa01vZGU9PSdjbGljaydcIj5cbiAgICAgICAgICA8IS0tIOm7mOiupOaMiemSru+8muW8gOWni+iusuivnSAtLT5cbiAgICAgICAgICA8aW9uLWZhYi1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgY2xvc2VJY29uPVwiY2hlY2ttYXJrXCIgKGNsaWNrKT1cInZvaWNlU2Vydi50b2dnbGVSZWNvcmQoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJtaWMtb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24tZmFiLWJ1dHRvbj5cblxuICAgICAgICAgIDwhLS0g6K6y6K+d5Lit77ya5Y+W5raI5Y+R6YCBIC0tPlxuICAgICAgICAgIDxpb24tZmFiLWxpc3Qgc2lkZT1cImVuZFwiPlxuICAgICAgICAgICAgPGlvbi1mYWItYnV0dG9uIFtjbGFzc109XCInbG9hZGluZydcIiAoY2xpY2spPVwidm9pY2VTZXJ2LmNhbmNlbFRhbGsoKVwiPlxuICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInBhdXNlLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgPC9pb24tZmFiLWJ1dHRvbj5cbiAgICAgICAgICA8L2lvbi1mYWItbGlzdD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIFxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFsa01vZGU9PSdwcmVzcydcIj5cbiAgICAgICAgICA8aW9uLWZhYi1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgY2xvc2VJY29uPVwibWljLW91dGxpbmVcIiAodG91Y2hzdGFydCk9XCJ2b2ljZVNlcnYudG9nZ2xlUmVjb3JkKClcIiAgKHRvdWNoZW5kKT1cInZvaWNlU2Vydi5jYW5jZWxUYWxrKClcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwibWljLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWZhYi1idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvaW9uLWZhYj5cblxuXG4gICAgPCEtLSDpn7PpopHms6LliqggLS0+XG4gICAgPGRpdiBjbGFzcz1cInJlY29yZC13YXZlXCI+XG4gICAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
8
+ import{Component,Input}from"@angular/core";import{CommonModule}from"@angular/common";import{ToastController}from"@ionic/angular";import{Router,RouterModule}from"@angular/router";import{IonicModule,Platform}from"@ionic/angular";import{FmodeVoiceService}from"../../voice";import{FmodeChat,ChatService}from"../../service-fmai/service-chat";import{NovaCloudService}from"../../../nova-cloud/nova-cloud.service";import*as i0 from"@angular/core";import*as i1 from"@ionic/angular";import*as i2 from"@angular/router";import*as i3 from"../../voice";import*as i4 from"../../../nova-cloud/nova-cloud.service";import*as i5 from"../../service-fmai/service-chat";import*as i6 from"@angular/common";export class ModalChatVoiceInputComponent{constructor(t,e,o,n,i,r){this.platform=t,this.router=e,this.voiceServ=o,this.toastCtrl=n,this.ncloud=i,this.chatServ=r,this.talkMode="click",this.talkTips="点击话筒开始讲话",this.errorText="",this.player=new Audio}ngOnInit(){"press"==this.talkMode&&(this.talkTips="轻触底部开始讲话"),setTimeout((()=>{this.initVoiceSevice(),this.initVoiceASR()}),500)}async initVoiceASR(){this.voiceServ.requestPermission().then((()=>{this.voiceServ.openWithPriviledge(),this.startASRAwake()}))}async startASRAwake(){await this.voiceServ.openWithPriviledge(),new this.voiceServ.webSpeech(this.platform).startRecognition("Nihao | Hello")}playMusic(t){this.player.src=`/assets/avatar/voice/${t}.mp3`,this.player.play()}initVoiceSevice(){this.fmodeChat.userInput=this.voiceServ.resultText,this.voiceServ.requestPermission().then((()=>{this.voiceServ.openWithPriviledge()})),this.voiceServ.onBeforeStartTalk=()=>{this.fmodeChat.playAnimation("listening"),this.playMusic("start-talk")},this.voiceServ.onBeforeCancelTalk=()=>{this.playMusic("interupt-talk"),this.fmodeChat.playAnimation("waiting")},this.voiceServ.onAfterCancelTalk=()=>{this.startASRAwake()},this.voiceServ.onBeforeFinishTalk=()=>{this.fmodeChat.playAnimation("thinking"),this.playMusic("stop-talk")},this.voiceServ.onAfterFinishTalk=()=>{console.log("onAfterFinishTalk"),this.fmodeChat.userInput=this.voiceServ?.resultText,this.sendMessage(),this.startASRAwake()}}async sendMessage(){if(!this.fmodeChat.userInput){return this.errorText="内容不能为空",void(await this.toastCtrl.create({message:this.errorText,position:"top",icon:"alert",color:"warning-circle",duration:1e3})).present()}this.fmodeChat?.sendMessage(this.voiceServ.resultText,null,(t=>{}),{onSSMLComplete:t=>{console.log(t)}}),this.fmodeChat.userInput="",this.fmodeChat.userImage=""}testTTS(t){console.log(t),t=t||"你好呀,我是飞马小智!很高兴为您介绍脑控科技的发展历程。我们成立于2019年",new this.voiceServ.webSpeech(this.platform).speak(t)}testXunfeiTTS(){}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ModalChatVoiceInputComponent,deps:[{token:i1.Platform},{token:i2.Router},{token:i3.FmodeVoiceService},{token:i1.ToastController},{token:i4.NovaCloudService},{token:i5.ChatService}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:ModalChatVoiceInputComponent,isStandalone:!0,selector:"fm-modal-chat-voice-input",inputs:{fmodeChat:"fmodeChat",talkMode:"talkMode"},providers:[FmodeVoiceService],ngImport:i0,template:' \n <ng-container *ngIf="fmodeChat">\n\n \x3c!-- 用户输入 提示区域 --\x3e\n <div class="user-asr-input" style="text-align: center;" *ngIf="!fmodeChat?.userInput && voiceServ.btnStatus!=\'OPEN\'">{{talkTips}}</div>\n <div class="user-asr-input">{{fmodeChat?.userInput}}</div>\n \n \x3c!-- 测试按钮 --\x3e\n <div class="test-button-group" *ngIf="false">\n <button class="button-record" (click)="voiceServ.toggleRecord()">开始录制 {{voiceServ.connStatus}} {{voiceServ.btnStatus}}</button>\n <br>\n <button class="button-record" (click)="voiceServ.playRecord()">播放录制结果</button>\n <br>\n <button class="button-record" (click)="voiceServ.playBuffers()">播放Buffers结果</button>\n <button (click)="testTTS()">测试TTS纯WEB</button>\n <button (click)="startASR()">测试ASR</button> \n <button (click)="testXunfeiTTS()">测试合成</button> \n </div>\n\n \n \n \x3c!-- 交互按钮 --\x3e\n <ion-fab slot="fixed" horizontal="center" vertical="bottom">\n <ng-container *ngIf="talkMode==\'click\'">\n \x3c!-- 默认按钮:开始讲话 --\x3e\n <ion-fab-button color="primary" closeIcon="checkmark" (click)="voiceServ.toggleRecord()">\n <ion-icon name="mic-outline"></ion-icon>\n </ion-fab-button>\n\n \x3c!-- 讲话中:取消发送 --\x3e\n <ion-fab-list side="end">\n <ion-fab-button [class]="\'loading\'" (click)="voiceServ.cancelTalk()">\n <ion-icon name="pause-outline"></ion-icon>\n </ion-fab-button>\n </ion-fab-list>\n </ng-container>\n \n <ng-container *ngIf="talkMode==\'press\'">\n <ion-fab-button color="primary" closeIcon="mic-outline" (touchstart)="voiceServ.toggleRecord()" (touchend)="voiceServ.cancelTalk()">\n <ion-icon name="mic-outline"></ion-icon>\n </ion-fab-button>\n </ng-container>\n </ion-fab>\n\n\n \x3c!-- 音频波动 --\x3e\n <div class="record-wave">\n </div>\n</ng-container>\n',styles:['ion-fab{margin-bottom:10vh}.fab-button-close-active:before{content:"";position:absolute;top:-5px;left:-5px;width:66px;height:66px;border-radius:50%;border:5px solid #fff;border-top-color:transparent;animation:spin 2s ease-in-out infinite;animation-fill-mode:both;animation-play-state:running}.record-wave{position:fixed;bottom:0;width:100vw;height:6vh}\n'],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"directive",type:i6.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"ngmodule",type:IonicModule},{kind:"component",type:i1.IonFab,selector:"ion-fab",inputs:["activated","edge","horizontal","vertical"]},{kind:"component",type:i1.IonFabButton,selector:"ion-fab-button",inputs:["activated","closeIcon","color","disabled","download","href","mode","rel","routerAnimation","routerDirection","show","size","target","translucent","type"]},{kind:"component",type:i1.IonFabList,selector:"ion-fab-list",inputs:["activated","side"]},{kind:"component",type:i1.IonIcon,selector:"ion-icon",inputs:["color","flipRtl","icon","ios","lazy","md","mode","name","sanitize","size","src"]},{kind:"ngmodule",type:RouterModule}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ModalChatVoiceInputComponent,decorators:[{type:Component,args:[{selector:"fm-modal-chat-voice-input",standalone:!0,imports:[CommonModule,IonicModule,RouterModule],providers:[FmodeVoiceService],template:' \n <ng-container *ngIf="fmodeChat">\n\n \x3c!-- 用户输入 提示区域 --\x3e\n <div class="user-asr-input" style="text-align: center;" *ngIf="!fmodeChat?.userInput && voiceServ.btnStatus!=\'OPEN\'">{{talkTips}}</div>\n <div class="user-asr-input">{{fmodeChat?.userInput}}</div>\n \n \x3c!-- 测试按钮 --\x3e\n <div class="test-button-group" *ngIf="false">\n <button class="button-record" (click)="voiceServ.toggleRecord()">开始录制 {{voiceServ.connStatus}} {{voiceServ.btnStatus}}</button>\n <br>\n <button class="button-record" (click)="voiceServ.playRecord()">播放录制结果</button>\n <br>\n <button class="button-record" (click)="voiceServ.playBuffers()">播放Buffers结果</button>\n <button (click)="testTTS()">测试TTS纯WEB</button>\n <button (click)="startASR()">测试ASR</button> \n <button (click)="testXunfeiTTS()">测试合成</button> \n </div>\n\n \n \n \x3c!-- 交互按钮 --\x3e\n <ion-fab slot="fixed" horizontal="center" vertical="bottom">\n <ng-container *ngIf="talkMode==\'click\'">\n \x3c!-- 默认按钮:开始讲话 --\x3e\n <ion-fab-button color="primary" closeIcon="checkmark" (click)="voiceServ.toggleRecord()">\n <ion-icon name="mic-outline"></ion-icon>\n </ion-fab-button>\n\n \x3c!-- 讲话中:取消发送 --\x3e\n <ion-fab-list side="end">\n <ion-fab-button [class]="\'loading\'" (click)="voiceServ.cancelTalk()">\n <ion-icon name="pause-outline"></ion-icon>\n </ion-fab-button>\n </ion-fab-list>\n </ng-container>\n \n <ng-container *ngIf="talkMode==\'press\'">\n <ion-fab-button color="primary" closeIcon="mic-outline" (touchstart)="voiceServ.toggleRecord()" (touchend)="voiceServ.cancelTalk()">\n <ion-icon name="mic-outline"></ion-icon>\n </ion-fab-button>\n </ng-container>\n </ion-fab>\n\n\n \x3c!-- 音频波动 --\x3e\n <div class="record-wave">\n </div>\n</ng-container>\n',styles:['ion-fab{margin-bottom:10vh}.fab-button-close-active:before{content:"";position:absolute;top:-5px;left:-5px;width:66px;height:66px;border-radius:50%;border:5px solid #fff;border-top-color:transparent;animation:spin 2s ease-in-out infinite;animation-fill-mode:both;animation-play-state:running}.record-wave{position:fixed;bottom:0;width:100vw;height:6vh}\n']}]}],ctorParameters:()=>[{type:i1.Platform},{type:i2.Router},{type:i3.FmodeVoiceService},{type:i1.ToastController},{type:i4.NovaCloudService},{type:i5.ChatService}],propDecorators:{fmodeChat:[{type:Input}],talkMode:[{type:Input}]}});
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2F2YXRhci9tb2RhbC1jaGF0LXZvaWNlLWlucHV0L21vZGFsLWNoYXQtdm9pY2UtaW5wdXQuY29tcG9uZW50Lm1qcw==`
10
+
@@ -1,36 +1,10 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, Input } from '@angular/core';
3
- import { IonButtons, IonCard, IonHeader, IonIcon, IonButton, IonItem, IonLabel, IonList, IonNote, IonTitle, IonToolbar, IonModal, NavController, IonAvatar } from '@ionic/angular/standalone';
4
- import { CompAvatarRoleImageComponent } from '../../avatar';
5
- import { CompAvatarRoleVideoComponent } from '../../avatar';
6
- import { FmodeChat } from '../../service-fmai/service-chat';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@ionic/angular/standalone";
9
- import * as i2 from "@angular/common";
10
- export class FmChatHeaderArea {
11
- constructor(navCtrl) {
12
- this.navCtrl = navCtrl;
13
- this.isModalOpen = false;
14
- }
15
- goBack() {
16
- this.navCtrl.back();
17
- }
18
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FmChatHeaderArea, deps: [{ token: i1.NavController }], target: i0.ɵɵFactoryTarget.Component }); }
19
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FmChatHeaderArea, isStandalone: true, selector: "fm-chat-header-area", inputs: { chat: "chat" }, ngImport: i0, template: "<ion-toolbar *ngIf=\"chat?.isAvatarShow==false\">\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"goBack()\">\n <ion-icon name=\"chevron-back-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-title>\n <div class=\"title-avatar-area\">\n <div class=\"avatar-img\" (click)=\"chat.showAvatar()\">\n <img *ngIf=\"chat?.role?.get('avatar')||chat?.role?.get('thumb')\" [src]=\"chat?.role?.get('avatar')||chat?.role?.get('thumb')\" />\n <ion-icon *ngIf=\"chat?.role?.get('avatarConfig')\" name=\"resize-outline\"></ion-icon>\n </div>\n <span (click)=\"chat.showAvatar()\">\n {{chat?.role?.get(\"name\")}}\n </span>\n </div>\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"isModalOpen=true\"> <ion-icon name=\"ellipsis-horizontal-outline\"></ion-icon> </ion-button>\n </ion-buttons>\n</ion-toolbar>\n\n<div class=\"avatar-area\" *ngIf=\"chat?.isAvatarShow==true\">\n <fm-avatar-role-image *ngIf=\"chat?.avatarMode=='image'\" [fmodeChat]=\"chat\" [role]=\"avatarRole\"></fm-avatar-role-image>\n <fm-avatar-role-video *ngIf=\"chat?.avatarMode=='video'\" [fmodeChat]=\"chat\" [role]=\"avatarRole\"></fm-avatar-role-video>\n</div>\n\n\n<ion-modal [isOpen]=\"isModalOpen\" (willDismiss)=\"isModalOpen=false\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"isModalOpen=false\">\u8FD4\u56DE</ion-button>\n </ion-buttons>\n <ion-title>\u7B80\u4ECB</ion-title>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n\n <ion-card style=\"margin: 0px;\">\n <img [src]=\"chat?.role?.get('thumb')\" alt=\"\">\n <ion-card-header>\n <ion-card-subtitle>{{chat?.role?.get('tags')}}</ion-card-subtitle>\n <ion-card-title>{{chat?.role?.get(\"name\")}}</ion-card-title>\n </ion-card-header>\n \n <ion-card-content>\n {{chat?.role?.get(\"desc\")}}\n \n <ion-list [inset]=\"true\" style=\"margin:0px;\">\n <!-- <ion-item>\n <ion-avatar *ngIf=\"chat?.role?.get('thumb')\" aria-hidden=\"true\" slot=\"start\">\n <img [src]=\"chat?.role?.get('thumb')\" />\n </ion-avatar>\n <ion-label>{{chat?.role?.get(\"name\")}}</ion-label>\n </ion-item> -->\n <ion-item lines=\"none\" *ngIf=\"chat?.role?.get('age')\">\n <ion-note slot=\"start\">\u5E74\u9F84</ion-note>\n <ion-label>{{chat?.role?.get(\"age\")}}</ion-label>\n </ion-item>\n <ion-item lines=\"none\" *ngIf=\"chat?.role?.get('gender')\">\n <ion-note slot=\"start\">\u6027\u522B</ion-note>\n <ion-label>{{chat?.role?.get(\"gender\")}}</ion-label>\n </ion-item>\n <ion-item lines=\"none\">\n <ion-note slot=\"start\">\u79F0\u53F7</ion-note>\n <ion-label>{{chat?.role?.get(\"title\")}}</ion-label>\n </ion-item>\n \n <ion-item lines=\"none\">\n <ion-note slot=\"start\">\u64C5\u957F</ion-note>\n <ion-label>{{chat?.role?.get(\"tags\")?.join(',')}}</ion-label>\n </ion-item>\n \n </ion-list>\n </ion-card-content>\n </ion-card>\n </ion-content>\n </ng-template>\n </ion-modal>", styles: [".title-avatar-area{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.title-avatar-area .avatar-img img{width:32px;height:32px;border-radius:50%;margin-right:5px}.title-avatar-area .avatar-img ion-icon{background:#df76dfcc;border-radius:50%;padding:3px;position:absolute;color:#000;margin-left:-20px;font-size:10px;margin-top:18px}.avatar-area{height:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonModal, selector: "ion-modal" }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "component", type:
20
- //
21
- CompAvatarRoleImageComponent, selector: "fm-avatar-role-image", inputs: ["fmodeChat", "role"] }, { kind: "component", type: CompAvatarRoleVideoComponent, selector: "fm-avatar-role-video", inputs: ["fmodeChat", "role"], outputs: ["onClose"] }] }); }
22
- }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FmChatHeaderArea, decorators: [{
24
- type: Component,
25
- args: [{ selector: 'fm-chat-header-area', standalone: true, imports: [
26
- CommonModule, IonToolbar, IonButtons, IonButton, IonIcon,
27
- IonModal, IonAvatar,
28
- IonTitle, IonHeader, IonList, IonItem, IonCard, IonLabel, IonNote,
29
- //
30
- CompAvatarRoleImageComponent,
31
- CompAvatarRoleVideoComponent
32
- ], template: "<ion-toolbar *ngIf=\"chat?.isAvatarShow==false\">\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"goBack()\">\n <ion-icon name=\"chevron-back-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-title>\n <div class=\"title-avatar-area\">\n <div class=\"avatar-img\" (click)=\"chat.showAvatar()\">\n <img *ngIf=\"chat?.role?.get('avatar')||chat?.role?.get('thumb')\" [src]=\"chat?.role?.get('avatar')||chat?.role?.get('thumb')\" />\n <ion-icon *ngIf=\"chat?.role?.get('avatarConfig')\" name=\"resize-outline\"></ion-icon>\n </div>\n <span (click)=\"chat.showAvatar()\">\n {{chat?.role?.get(\"name\")}}\n </span>\n </div>\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"isModalOpen=true\"> <ion-icon name=\"ellipsis-horizontal-outline\"></ion-icon> </ion-button>\n </ion-buttons>\n</ion-toolbar>\n\n<div class=\"avatar-area\" *ngIf=\"chat?.isAvatarShow==true\">\n <fm-avatar-role-image *ngIf=\"chat?.avatarMode=='image'\" [fmodeChat]=\"chat\" [role]=\"avatarRole\"></fm-avatar-role-image>\n <fm-avatar-role-video *ngIf=\"chat?.avatarMode=='video'\" [fmodeChat]=\"chat\" [role]=\"avatarRole\"></fm-avatar-role-video>\n</div>\n\n\n<ion-modal [isOpen]=\"isModalOpen\" (willDismiss)=\"isModalOpen=false\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"isModalOpen=false\">\u8FD4\u56DE</ion-button>\n </ion-buttons>\n <ion-title>\u7B80\u4ECB</ion-title>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n\n <ion-card style=\"margin: 0px;\">\n <img [src]=\"chat?.role?.get('thumb')\" alt=\"\">\n <ion-card-header>\n <ion-card-subtitle>{{chat?.role?.get('tags')}}</ion-card-subtitle>\n <ion-card-title>{{chat?.role?.get(\"name\")}}</ion-card-title>\n </ion-card-header>\n \n <ion-card-content>\n {{chat?.role?.get(\"desc\")}}\n \n <ion-list [inset]=\"true\" style=\"margin:0px;\">\n <!-- <ion-item>\n <ion-avatar *ngIf=\"chat?.role?.get('thumb')\" aria-hidden=\"true\" slot=\"start\">\n <img [src]=\"chat?.role?.get('thumb')\" />\n </ion-avatar>\n <ion-label>{{chat?.role?.get(\"name\")}}</ion-label>\n </ion-item> -->\n <ion-item lines=\"none\" *ngIf=\"chat?.role?.get('age')\">\n <ion-note slot=\"start\">\u5E74\u9F84</ion-note>\n <ion-label>{{chat?.role?.get(\"age\")}}</ion-label>\n </ion-item>\n <ion-item lines=\"none\" *ngIf=\"chat?.role?.get('gender')\">\n <ion-note slot=\"start\">\u6027\u522B</ion-note>\n <ion-label>{{chat?.role?.get(\"gender\")}}</ion-label>\n </ion-item>\n <ion-item lines=\"none\">\n <ion-note slot=\"start\">\u79F0\u53F7</ion-note>\n <ion-label>{{chat?.role?.get(\"title\")}}</ion-label>\n </ion-item>\n \n <ion-item lines=\"none\">\n <ion-note slot=\"start\">\u64C5\u957F</ion-note>\n <ion-label>{{chat?.role?.get(\"tags\")?.join(',')}}</ion-label>\n </ion-item>\n \n </ion-list>\n </ion-card-content>\n </ion-card>\n </ion-content>\n </ng-template>\n </ion-modal>", styles: [".title-avatar-area{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.title-avatar-area .avatar-img img{width:32px;height:32px;border-radius:50%;margin-right:5px}.title-avatar-area .avatar-img ion-icon{background:#df76dfcc;border-radius:50%;padding:3px;position:absolute;color:#000;margin-left:-20px;font-size:10px;margin-top:18px}.avatar-area{height:100%}\n"] }]
33
- }], ctorParameters: () => [{ type: i1.NavController }], propDecorators: { chat: [{
34
- type: Input
35
- }] } });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcC1oZWFkZXItYXJlYS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvY2hhdC9jaGF0LWhlYWRlci1hcmVhL2NvbXAtaGVhZGVyLWFyZWEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL2NoYXQvY2hhdC1oZWFkZXItYXJlYS9jb21wLWhlYWRlci1hcmVhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdMLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7O0FBZ0I1RCxNQUFNLE9BQU8sZ0JBQWdCO0lBSTNCLFlBQ1UsT0FBcUI7UUFBckIsWUFBTyxHQUFQLE9BQU8sQ0FBYztRQUgvQixnQkFBVyxHQUFXLEtBQUssQ0FBQTtJQUl6QixDQUFDO0lBQ0gsTUFBTTtRQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQzsrR0FUVSxnQkFBZ0I7bUdBQWhCLGdCQUFnQix5R0NyQjdCLHNrSEFpRmMsMmJEcEVWLFlBQVksbUlBQUMsVUFBVSxtRkFBQyxVQUFVLDhFQUFDLFNBQVMsb1BBQUMsT0FBTywySkFDcEQsUUFBUSxzREFDUixRQUFRLGlGQUFDLFNBQVMsb0dBQUMsT0FBTyx5RkFBQyxPQUFPLDBOQUFDLE9BQU8seUxBQUMsUUFBUSw2RkFBQyxPQUFPO2dCQUMzRCxHQUFHO2dCQUNILDRCQUE0QixnR0FDNUIsNEJBQTRCOzs0RkFHbkIsZ0JBQWdCO2tCQWQ1QixTQUFTOytCQUNFLHFCQUFxQixjQUdwQixJQUFJLFdBQ1A7d0JBQ04sWUFBWSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLE9BQU87d0JBQ3BELFFBQVEsRUFBQyxTQUFTO3dCQUNsQixRQUFRLEVBQUMsU0FBUyxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsT0FBTyxFQUFDLFFBQVEsRUFBQyxPQUFPO3dCQUMzRCxHQUFHO3dCQUNILDRCQUE0Qjt3QkFDNUIsNEJBQTRCO3FCQUM3QjtrRkFHUSxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW9uQnV0dG9ucywgSW9uQ2FyZCwgSW9uSGVhZGVyLCBJb25JY29uLElvbkJ1dHRvbiwgSW9uSXRlbSwgSW9uTGFiZWwsIElvbkxpc3QsIElvbk5vdGUsIElvblRpdGxlLCBJb25Ub29sYmFyLCBJb25Nb2RhbCwgTmF2Q29udHJvbGxlciwgSW9uQXZhdGFyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBDb21wQXZhdGFyUm9sZUltYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXZhdGFyJztcbmltcG9ydCB7IENvbXBBdmF0YXJSb2xlVmlkZW9Db21wb25lbnQgfSBmcm9tICcuLi8uLi9hdmF0YXInO1xuaW1wb3J0IHsgRm1vZGVDaGF0IH0gZnJvbSAnLi4vLi4vc2VydmljZS1mbWFpL3NlcnZpY2UtY2hhdCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZtLWNoYXQtaGVhZGVyLWFyZWEnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29tcC1oZWFkZXItYXJlYS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbXAtaGVhZGVyLWFyZWEuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTp0cnVlLFxuICBpbXBvcnRzOltcbiAgICBDb21tb25Nb2R1bGUsSW9uVG9vbGJhcixJb25CdXR0b25zLElvbkJ1dHRvbixJb25JY29uLFxuICAgIElvbk1vZGFsLElvbkF2YXRhcixcbiAgICBJb25UaXRsZSxJb25IZWFkZXIsSW9uTGlzdCxJb25JdGVtLElvbkNhcmQsSW9uTGFiZWwsSW9uTm90ZSxcbiAgICAvLyBcbiAgICBDb21wQXZhdGFyUm9sZUltYWdlQ29tcG9uZW50LFxuICAgIENvbXBBdmF0YXJSb2xlVmlkZW9Db21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBGbUNoYXRIZWFkZXJBcmVhIHtcbiAgQElucHV0KCkgY2hhdDpGbW9kZUNoYXRcbiAgaXNNb2RhbE9wZW46Ym9vbGVhbiA9IGZhbHNlXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuYXZDdHJsOk5hdkNvbnRyb2xsZXJcbiAgKXt9XG4gIGdvQmFjaygpe1xuICAgIHRoaXMubmF2Q3RybC5iYWNrKCk7XG4gIH1cbn0gXG4iLCI8aW9uLXRvb2xiYXIgKm5nSWY9XCJjaGF0Py5pc0F2YXRhclNob3c9PWZhbHNlXCI+XG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiZ29CYWNrKClcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hldnJvbi1iYWNrLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2lvbi1idXR0b25zPlxuICAgIDxpb24tdGl0bGU+XG4gICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtYXZhdGFyLWFyZWFcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1pbWdcIiAoY2xpY2spPVwiY2hhdC5zaG93QXZhdGFyKClcIj5cbiAgICAgICAgICA8aW1nICpuZ0lmPVwiY2hhdD8ucm9sZT8uZ2V0KCdhdmF0YXInKXx8Y2hhdD8ucm9sZT8uZ2V0KCd0aHVtYicpXCIgW3NyY109XCJjaGF0Py5yb2xlPy5nZXQoJ2F2YXRhcicpfHxjaGF0Py5yb2xlPy5nZXQoJ3RodW1iJylcIiAvPlxuICAgICAgICAgIDxpb24taWNvbiAqbmdJZj1cImNoYXQ/LnJvbGU/LmdldCgnYXZhdGFyQ29uZmlnJylcIiBuYW1lPVwicmVzaXplLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNoYXQuc2hvd0F2YXRhcigpXCI+XG4gICAgICAgICAge3tjaGF0Py5yb2xlPy5nZXQoXCJuYW1lXCIpfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9pb24tdGl0bGU+XG5cbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiaXNNb2RhbE9wZW49dHJ1ZVwiPiA8aW9uLWljb24gbmFtZT1cImVsbGlwc2lzLWhvcml6b250YWwtb3V0bGluZVwiPjwvaW9uLWljb24+IDwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1idXR0b25zPlxuPC9pb24tdG9vbGJhcj5cblxuPGRpdiBjbGFzcz1cImF2YXRhci1hcmVhXCIgKm5nSWY9XCJjaGF0Py5pc0F2YXRhclNob3c9PXRydWVcIj5cbiAgPGZtLWF2YXRhci1yb2xlLWltYWdlICpuZ0lmPVwiY2hhdD8uYXZhdGFyTW9kZT09J2ltYWdlJ1wiIFtmbW9kZUNoYXRdPVwiY2hhdFwiIFtyb2xlXT1cImF2YXRhclJvbGVcIj48L2ZtLWF2YXRhci1yb2xlLWltYWdlPlxuICA8Zm0tYXZhdGFyLXJvbGUtdmlkZW8gKm5nSWY9XCJjaGF0Py5hdmF0YXJNb2RlPT0ndmlkZW8nXCIgW2Ztb2RlQ2hhdF09XCJjaGF0XCIgW3JvbGVdPVwiYXZhdGFyUm9sZVwiPjwvZm0tYXZhdGFyLXJvbGUtdmlkZW8+XG48L2Rpdj5cblxuXG48aW9uLW1vZGFsIFtpc09wZW5dPVwiaXNNb2RhbE9wZW5cIiAod2lsbERpc21pc3MpPVwiaXNNb2RhbE9wZW49ZmFsc2VcIj5cbiAgICA8bmctdGVtcGxhdGU+XG4gICAgICA8aW9uLWhlYWRlcj5cbiAgICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwic3RhcnRcIj5cbiAgICAgICAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJpc01vZGFsT3Blbj1mYWxzZVwiPui/lOWbnjwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgICAgIDxpb24tdGl0bGU+566A5LuLPC9pb24tdGl0bGU+XG4gICAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgICA8L2lvbi1oZWFkZXI+XG4gICAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuXG4gICAgICAgIDxpb24tY2FyZCBzdHlsZT1cIm1hcmdpbjogMHB4O1wiPlxuICAgICAgICAgIDxpbWcgW3NyY109XCJjaGF0Py5yb2xlPy5nZXQoJ3RodW1iJylcIiBhbHQ9XCJcIj5cbiAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPnt7Y2hhdD8ucm9sZT8uZ2V0KCd0YWdzJyl9fTwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+e3tjaGF0Py5yb2xlPy5nZXQoXCJuYW1lXCIpfX08L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICBcbiAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgIHt7Y2hhdD8ucm9sZT8uZ2V0KFwiZGVzY1wiKX19XG4gICAgXG4gICAgICAgICAgICAgICAgPGlvbi1saXN0IFtpbnNldF09XCJ0cnVlXCIgc3R5bGU9XCJtYXJnaW46MHB4O1wiPlxuICAgICAgICAgICAgICAgICAgPCEtLSA8aW9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tYXZhdGFyICpuZ0lmPVwiY2hhdD8ucm9sZT8uZ2V0KCd0aHVtYicpXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgc2xvdD1cInN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImNoYXQ/LnJvbGU/LmdldCgndGh1bWInKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWF2YXRhcj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbD57e2NoYXQ/LnJvbGU/LmdldChcIm5hbWVcIil9fTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9pb24taXRlbT4gLS0+XG4gICAgICAgICAgICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCIgKm5nSWY9XCJjaGF0Py5yb2xlPy5nZXQoJ2FnZScpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbm90ZSBzbG90PVwic3RhcnRcIj7lubTpvoQ8L2lvbi1ub3RlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPnt7Y2hhdD8ucm9sZT8uZ2V0KFwiYWdlXCIpfX08L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCIgKm5nSWY9XCJjaGF0Py5yb2xlPy5nZXQoJ2dlbmRlcicpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbm90ZSBzbG90PVwic3RhcnRcIj7mgKfliKs8L2lvbi1ub3RlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPnt7Y2hhdD8ucm9sZT8uZ2V0KFwiZ2VuZGVyXCIpfX08L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbm90ZSBzbG90PVwic3RhcnRcIj7np7Dlj7c8L2lvbi1ub3RlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPnt7Y2hhdD8ucm9sZT8uZ2V0KFwidGl0bGVcIil9fTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLW5vdGUgc2xvdD1cInN0YXJ0XCI+5pOF6ZW/PC9pb24tbm90ZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbD57e2NoYXQ/LnJvbGU/LmdldChcInRhZ3NcIik/LmpvaW4oJywnKX19PC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgIFxuICAgICAgICAgICAgICAgIDwvaW9uLWxpc3Q+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgIDwvaW9uLWNvbnRlbnQ+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9pb24tbW9kYWw+Il19
1
+
2
+ /**
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs
7
+ */
8
+ import{CommonModule}from"@angular/common";import{Component,Input}from"@angular/core";import{IonButtons,IonCard,IonHeader,IonIcon,IonButton,IonItem,IonLabel,IonList,IonNote,IonTitle,IonToolbar,IonModal,NavController,IonAvatar}from"@ionic/angular/standalone";import{CompAvatarRoleImageComponent}from"../../avatar";import{CompAvatarRoleVideoComponent}from"../../avatar";import{FmodeChat}from"../../service-fmai/service-chat";import*as i0 from"@angular/core";import*as i1 from"@ionic/angular/standalone";import*as i2 from"@angular/common";export class FmChatHeaderArea{constructor(n){this.navCtrl=n,this.isModalOpen=!1}goBack(){this.navCtrl.back()}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:FmChatHeaderArea,deps:[{token:i1.NavController}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:FmChatHeaderArea,isStandalone:!0,selector:"fm-chat-header-area",inputs:{chat:"chat"},ngImport:i0,template:'<ion-toolbar *ngIf="chat?.isAvatarShow==false">\n <ion-buttons slot="start">\n <ion-button (click)="goBack()">\n <ion-icon name="chevron-back-outline"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-title>\n <div class="title-avatar-area">\n <div class="avatar-img" (click)="chat.showAvatar()">\n <img *ngIf="chat?.role?.get(\'avatar\')||chat?.role?.get(\'thumb\')" [src]="chat?.role?.get(\'avatar\')||chat?.role?.get(\'thumb\')" />\n <ion-icon *ngIf="chat?.role?.get(\'avatarConfig\')" name="resize-outline"></ion-icon>\n </div>\n <span (click)="chat.showAvatar()">\n {{chat?.role?.get("name")}}\n </span>\n </div>\n </ion-title>\n\n <ion-buttons slot="end">\n <ion-button (click)="isModalOpen=true"> <ion-icon name="ellipsis-horizontal-outline"></ion-icon> </ion-button>\n </ion-buttons>\n</ion-toolbar>\n\n<div class="avatar-area" *ngIf="chat?.isAvatarShow==true">\n <fm-avatar-role-image *ngIf="chat?.avatarMode==\'image\'" [fmodeChat]="chat" [role]="avatarRole"></fm-avatar-role-image>\n <fm-avatar-role-video *ngIf="chat?.avatarMode==\'video\'" [fmodeChat]="chat" [role]="avatarRole"></fm-avatar-role-video>\n</div>\n\n\n<ion-modal [isOpen]="isModalOpen" (willDismiss)="isModalOpen=false">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot="start">\n <ion-button (click)="isModalOpen=false">返回</ion-button>\n </ion-buttons>\n <ion-title>简介</ion-title>\n </ion-toolbar>\n </ion-header>\n <ion-content class="ion-padding">\n\n <ion-card style="margin: 0px;">\n <img [src]="chat?.role?.get(\'thumb\')" alt="">\n <ion-card-header>\n <ion-card-subtitle>{{chat?.role?.get(\'tags\')}}</ion-card-subtitle>\n <ion-card-title>{{chat?.role?.get("name")}}</ion-card-title>\n </ion-card-header>\n \n <ion-card-content>\n {{chat?.role?.get("desc")}}\n \n <ion-list [inset]="true" style="margin:0px;">\n \x3c!-- <ion-item>\n <ion-avatar *ngIf="chat?.role?.get(\'thumb\')" aria-hidden="true" slot="start">\n <img [src]="chat?.role?.get(\'thumb\')" />\n </ion-avatar>\n <ion-label>{{chat?.role?.get("name")}}</ion-label>\n </ion-item> --\x3e\n <ion-item lines="none" *ngIf="chat?.role?.get(\'age\')">\n <ion-note slot="start">年龄</ion-note>\n <ion-label>{{chat?.role?.get("age")}}</ion-label>\n </ion-item>\n <ion-item lines="none" *ngIf="chat?.role?.get(\'gender\')">\n <ion-note slot="start">性别</ion-note>\n <ion-label>{{chat?.role?.get("gender")}}</ion-label>\n </ion-item>\n <ion-item lines="none">\n <ion-note slot="start">称号</ion-note>\n <ion-label>{{chat?.role?.get("title")}}</ion-label>\n </ion-item>\n \n <ion-item lines="none">\n <ion-note slot="start">擅长</ion-note>\n <ion-label>{{chat?.role?.get("tags")?.join(\',\')}}</ion-label>\n </ion-item>\n \n </ion-list>\n </ion-card-content>\n </ion-card>\n </ion-content>\n </ng-template>\n </ion-modal>',styles:[".title-avatar-area{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.title-avatar-area .avatar-img img{width:32px;height:32px;border-radius:50%;margin-right:5px}.title-avatar-area .avatar-img ion-icon{background:#df76dfcc;border-radius:50%;padding:3px;position:absolute;color:#000;margin-left:-20px;font-size:10px;margin-top:18px}.avatar-area{height:100%}\n"],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"directive",type:i2.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:IonToolbar,selector:"ion-toolbar",inputs:["color","mode"]},{kind:"component",type:IonButtons,selector:"ion-buttons",inputs:["collapse"]},{kind:"component",type:IonButton,selector:"ion-button",inputs:["buttonType","color","disabled","download","expand","fill","form","href","mode","rel","routerAnimation","routerDirection","shape","size","strong","target","type"]},{kind:"component",type:IonIcon,selector:"ion-icon",inputs:["color","flipRtl","icon","ios","lazy","md","mode","name","sanitize","size","src"]},{kind:"component",type:IonModal,selector:"ion-modal"},{kind:"component",type:IonTitle,selector:"ion-title",inputs:["color","size"]},{kind:"component",type:IonHeader,selector:"ion-header",inputs:["collapse","mode","translucent"]},{kind:"component",type:IonList,selector:"ion-list",inputs:["inset","lines","mode"]},{kind:"component",type:IonItem,selector:"ion-item",inputs:["button","color","detail","detailIcon","disabled","download","href","lines","mode","rel","routerAnimation","routerDirection","target","type"]},{kind:"component",type:IonCard,selector:"ion-card",inputs:["button","color","disabled","download","href","mode","rel","routerAnimation","routerDirection","target","type"]},{kind:"component",type:IonLabel,selector:"ion-label",inputs:["color","mode","position"]},{kind:"component",type:IonNote,selector:"ion-note",inputs:["color","mode"]},{kind:"component",type:CompAvatarRoleImageComponent,selector:"fm-avatar-role-image",inputs:["fmodeChat","role"]},{kind:"component",type:CompAvatarRoleVideoComponent,selector:"fm-avatar-role-video",inputs:["fmodeChat","role"],outputs:["onClose"]}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:FmChatHeaderArea,decorators:[{type:Component,args:[{selector:"fm-chat-header-area",standalone:!0,imports:[CommonModule,IonToolbar,IonButtons,IonButton,IonIcon,IonModal,IonAvatar,IonTitle,IonHeader,IonList,IonItem,IonCard,IonLabel,IonNote,CompAvatarRoleImageComponent,CompAvatarRoleVideoComponent],template:'<ion-toolbar *ngIf="chat?.isAvatarShow==false">\n <ion-buttons slot="start">\n <ion-button (click)="goBack()">\n <ion-icon name="chevron-back-outline"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-title>\n <div class="title-avatar-area">\n <div class="avatar-img" (click)="chat.showAvatar()">\n <img *ngIf="chat?.role?.get(\'avatar\')||chat?.role?.get(\'thumb\')" [src]="chat?.role?.get(\'avatar\')||chat?.role?.get(\'thumb\')" />\n <ion-icon *ngIf="chat?.role?.get(\'avatarConfig\')" name="resize-outline"></ion-icon>\n </div>\n <span (click)="chat.showAvatar()">\n {{chat?.role?.get("name")}}\n </span>\n </div>\n </ion-title>\n\n <ion-buttons slot="end">\n <ion-button (click)="isModalOpen=true"> <ion-icon name="ellipsis-horizontal-outline"></ion-icon> </ion-button>\n </ion-buttons>\n</ion-toolbar>\n\n<div class="avatar-area" *ngIf="chat?.isAvatarShow==true">\n <fm-avatar-role-image *ngIf="chat?.avatarMode==\'image\'" [fmodeChat]="chat" [role]="avatarRole"></fm-avatar-role-image>\n <fm-avatar-role-video *ngIf="chat?.avatarMode==\'video\'" [fmodeChat]="chat" [role]="avatarRole"></fm-avatar-role-video>\n</div>\n\n\n<ion-modal [isOpen]="isModalOpen" (willDismiss)="isModalOpen=false">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot="start">\n <ion-button (click)="isModalOpen=false">返回</ion-button>\n </ion-buttons>\n <ion-title>简介</ion-title>\n </ion-toolbar>\n </ion-header>\n <ion-content class="ion-padding">\n\n <ion-card style="margin: 0px;">\n <img [src]="chat?.role?.get(\'thumb\')" alt="">\n <ion-card-header>\n <ion-card-subtitle>{{chat?.role?.get(\'tags\')}}</ion-card-subtitle>\n <ion-card-title>{{chat?.role?.get("name")}}</ion-card-title>\n </ion-card-header>\n \n <ion-card-content>\n {{chat?.role?.get("desc")}}\n \n <ion-list [inset]="true" style="margin:0px;">\n \x3c!-- <ion-item>\n <ion-avatar *ngIf="chat?.role?.get(\'thumb\')" aria-hidden="true" slot="start">\n <img [src]="chat?.role?.get(\'thumb\')" />\n </ion-avatar>\n <ion-label>{{chat?.role?.get("name")}}</ion-label>\n </ion-item> --\x3e\n <ion-item lines="none" *ngIf="chat?.role?.get(\'age\')">\n <ion-note slot="start">年龄</ion-note>\n <ion-label>{{chat?.role?.get("age")}}</ion-label>\n </ion-item>\n <ion-item lines="none" *ngIf="chat?.role?.get(\'gender\')">\n <ion-note slot="start">性别</ion-note>\n <ion-label>{{chat?.role?.get("gender")}}</ion-label>\n </ion-item>\n <ion-item lines="none">\n <ion-note slot="start">称号</ion-note>\n <ion-label>{{chat?.role?.get("title")}}</ion-label>\n </ion-item>\n \n <ion-item lines="none">\n <ion-note slot="start">擅长</ion-note>\n <ion-label>{{chat?.role?.get("tags")?.join(\',\')}}</ion-label>\n </ion-item>\n \n </ion-list>\n </ion-card-content>\n </ion-card>\n </ion-content>\n </ng-template>\n </ion-modal>',styles:[".title-avatar-area{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.title-avatar-area .avatar-img img{width:32px;height:32px;border-radius:50%;margin-right:5px}.title-avatar-area .avatar-img ion-icon{background:#df76dfcc;border-radius:50%;padding:3px;position:absolute;color:#000;margin-left:-20px;font-size:10px;margin-top:18px}.avatar-area{height:100%}\n"]}]}],ctorParameters:()=>[{type:i1.NavController}],propDecorators:{chat:[{type:Input}]}});
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2NoYXQvY2hhdC1oZWFkZXItYXJlYS9jb21wLWhlYWRlci1hcmVhLmNvbXBvbmVudC5tanM=`
10
+
@@ -1,2 +1,10 @@
1
- export * from "./comp-header-area.component";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvY2hhdC9jaGF0LWhlYWRlci1hcmVhL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsOEJBQThCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9jb21wLWhlYWRlci1hcmVhLmNvbXBvbmVudFwiIl19
1
+
2
+ /**
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/chat/chat-header-area/index.mjs
7
+ */
8
+ export*from"./comp-header-area.component";
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2NoYXQvY2hhdC1oZWFkZXItYXJlYS9pbmRleC5tanM=`
10
+
@@ -1,143 +1,10 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, Input } from '@angular/core';
3
- import { AlertController, IonAvatar, IonButton, IonIcon, IonItem, IonLabel, IonList, IonNote, IonText, NavController } from '@ionic/angular/standalone';
4
- import { ChatService } from "../../service-fmai/service-chat/chat.service";
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../../service-fmai/service-chat/chat.service";
7
- import * as i2 from "@ionic/angular/standalone";
8
- import * as i3 from "@angular/common";
9
- export class ChatListComponent {
10
- constructor(chatServ, alertCtrl, navCtrl) {
11
- this.chatServ = chatServ;
12
- this.alertCtrl = alertCtrl;
13
- this.navCtrl = navCtrl;
14
- this.chatList = [];
15
- this.onItemClick = (chat) => {
16
- this.goSession(chat);
17
- };
18
- /** 默认头像*/
19
- this.avatar = 'https://ionicframework.com/docs/img/demos/avatar.svg';
20
- this.isPreventGo = false;
21
- this.chatServ.getChatSession().then(() => {
22
- // console.log(this.chatServ.chatList);
23
- });
24
- }
25
- async goSession(chat) {
26
- if (this.isPreventGo)
27
- return;
28
- // this.tab.currentTab = ""
29
- if (chat?.rid || chat?.sid) {
30
- this.chatServ.restoreChatPanel(chat);
31
- }
32
- else {
33
- let alert = await this.alertCtrl.create({
34
- header: "注意",
35
- subHeader: "请您选择右侧角色",
36
- message: "开始对话",
37
- buttons: [
38
- {
39
- role: "ok", text: "知道了", handler: () => {
40
- }
41
- },
42
- ]
43
- });
44
- alert.present();
45
- this.navCtrl.navigateRoot("/chat/pro/mask");
46
- }
47
- }
1
+
48
2
  /**
49
- * 修改图标的功能组件
50
- * @param Id 会话Id
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs
51
7
  */
52
- async presentEditTitle(chatSession, chat, event) {
53
- this.isPreventGo = true;
54
- setTimeout(() => { this.isPreventGo = false; }, 500);
55
- event.preventDefault(); // 防止触发父级点击事件
56
- const alert = await this.alertCtrl.create({
57
- header: '修改会话标题',
58
- subHeader: '',
59
- message: '',
60
- buttons: [
61
- {
62
- text: '取消',
63
- role: 'cancel',
64
- handler: () => {
65
- },
66
- },
67
- {
68
- text: '确定',
69
- role: 'confirm',
70
- handler: (data) => {
71
- chat.title = data.title;
72
- chatSession?.set('title', data.title);
73
- chatSession?.save();
74
- },
75
- },
76
- ],
77
- inputs: [
78
- {
79
- placeholder: '会话标题',
80
- name: 'title',
81
- value: chat?.title || ""
82
- }
83
- ]
84
- });
85
- // this.chatSessionId = Id
86
- await alert.present();
87
- }
88
- /**
89
- * 删除图标的功能组件
90
- * @param Id 会话Id
91
- */
92
- async presentDeleteTItle(chatSession, chat, event) {
93
- this.isPreventGo = true;
94
- setTimeout(() => { this.isPreventGo = false; }, 500);
95
- event.preventDefault(); // 防止触发父级点击事件
96
- const alert = await this.alertCtrl.create({
97
- header: '确认删除?',
98
- subHeader: '',
99
- message: '',
100
- buttons: [
101
- {
102
- text: '取消',
103
- role: 'cancel',
104
- handler: () => {
105
- },
106
- },
107
- {
108
- text: '确定',
109
- role: 'confirm',
110
- handler: () => {
111
- chat.isHidden = true;
112
- chatSession?.set('isDeleted', true);
113
- chatSession?.save();
114
- },
115
- },
116
- ],
117
- });
118
- await alert.present();
119
- }
120
- /**
121
- * 绘画标题超出字数的部分用省略号代替
122
- * @param str 被执行的文本
123
- * @returns
124
- */
125
- truncateString(str) {
126
- if (str && str.length > 10) {
127
- return str.slice(0, 10) + '...';
128
- }
129
- return str;
130
- }
131
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatListComponent, deps: [{ token: i1.ChatService }, { token: i2.AlertController }, { token: i2.NavController }], target: i0.ɵɵFactoryTarget.Component }); }
132
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ChatListComponent, isStandalone: true, selector: "app-chat-list", inputs: { onItemClick: "onItemClick" }, providers: [], ngImport: i0, template: "<ion-list>\n <ng-container *ngFor=\"let chat of (chatServ?.chatList || chatList)\">\n <ion-item [button]=\"true\" detail=\"false\" *ngIf=\"!chat?.isHidden\" (click)=\"onItemClick(chat)\">\n <div class=\"unread-indicator-wrapper\" slot=\"start\">\n <div class=\"unread-indicator\"></div>\n </div>\n <ion-label>\n <div style=\"display: flex;justify-content: space-between; align-items: center;\">\n <div style=\"display: flex; flex-direction: row;align-items: center;\">\n <strong style=\"display: flex;align-items: center;\">\n <ion-avatar style=\"margin-right: 10px;\">\n <img [src]=\"chat?.thumb||avatar\" />\n </ion-avatar>\n <p style=\"max-width: 7rem;white-space: nowrap;\">{{truncateString(chat?.title)}}</p>\n </strong>\n\n <ion-icon (click)=\"presentEditTitle(chat?.session,chat,$event)\" name=\"brush-sharp\" style=\"margin-left: 1rem;\"></ion-icon>\n <ion-icon (click)=\"presentDeleteTItle(chat?.session,chat,$event)\" name=\"trash-sharp\" style=\"margin-left: 0.5rem;\"></ion-icon>\n \n </div>\n <div class=\"metadata-end-wrapper\" slot=\"end\">\n <ion-note color=\"medium\">{{chat?.latest | date:\"HH:mm\"}}</ion-note>\n <ion-icon color=\"medium\" name=\"chevron-forward\"></ion-icon>\n </div>\n </div>\n <ion-text></ion-text><br />\n <ion-note color=\"medium\" class=\"ion-text-wrap\">\n {{chat?.message}}\n </ion-note>\n </ion-label>\n </ion-item>\n </ng-container>\n </ion-list>", styles: ["ion-icon{color:#fff}ion-list{margin:3px}ion-list ion-item{--inner-padding-bottom:0px;--inner-padding-end:0px;--inner-padding-start:0px;--inner-padding-to:0px;--padding-bottom:0px;--padding-end:0px;--padding-start:0px;--padding-to:0px}ion-list ul{width:100%;list-style-type:none;padding:0;margin:0 0 10px;display:flex;flex-wrap:wrap;background-color:#fff;border-radius:10px}ion-list ul .active__{position:relative;padding:5px 15px;font-size:18px;font-weight:700;color:#535353;transition:.3s}ion-list ul .active{color:#2d8af7;background-color:#f2f4ff;border-radius:10px}ion-list ul li{flex:1 1 auto}ion-list ul li div{cursor:pointer;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "component", type: IonAvatar, selector: "ion-avatar" }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }] }); }
133
- }
134
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatListComponent, decorators: [{
135
- type: Component,
136
- args: [{ selector: 'app-chat-list', imports: [
137
- CommonModule,
138
- IonIcon, IonList, IonLabel, IonNote, IonButton, IonAvatar, IonItem, IonText,
139
- ], providers: [], standalone: true, template: "<ion-list>\n <ng-container *ngFor=\"let chat of (chatServ?.chatList || chatList)\">\n <ion-item [button]=\"true\" detail=\"false\" *ngIf=\"!chat?.isHidden\" (click)=\"onItemClick(chat)\">\n <div class=\"unread-indicator-wrapper\" slot=\"start\">\n <div class=\"unread-indicator\"></div>\n </div>\n <ion-label>\n <div style=\"display: flex;justify-content: space-between; align-items: center;\">\n <div style=\"display: flex; flex-direction: row;align-items: center;\">\n <strong style=\"display: flex;align-items: center;\">\n <ion-avatar style=\"margin-right: 10px;\">\n <img [src]=\"chat?.thumb||avatar\" />\n </ion-avatar>\n <p style=\"max-width: 7rem;white-space: nowrap;\">{{truncateString(chat?.title)}}</p>\n </strong>\n\n <ion-icon (click)=\"presentEditTitle(chat?.session,chat,$event)\" name=\"brush-sharp\" style=\"margin-left: 1rem;\"></ion-icon>\n <ion-icon (click)=\"presentDeleteTItle(chat?.session,chat,$event)\" name=\"trash-sharp\" style=\"margin-left: 0.5rem;\"></ion-icon>\n \n </div>\n <div class=\"metadata-end-wrapper\" slot=\"end\">\n <ion-note color=\"medium\">{{chat?.latest | date:\"HH:mm\"}}</ion-note>\n <ion-icon color=\"medium\" name=\"chevron-forward\"></ion-icon>\n </div>\n </div>\n <ion-text></ion-text><br />\n <ion-note color=\"medium\" class=\"ion-text-wrap\">\n {{chat?.message}}\n </ion-note>\n </ion-label>\n </ion-item>\n </ng-container>\n </ion-list>", styles: ["ion-icon{color:#fff}ion-list{margin:3px}ion-list ion-item{--inner-padding-bottom:0px;--inner-padding-end:0px;--inner-padding-start:0px;--inner-padding-to:0px;--padding-bottom:0px;--padding-end:0px;--padding-start:0px;--padding-to:0px}ion-list ul{width:100%;list-style-type:none;padding:0;margin:0 0 10px;display:flex;flex-wrap:wrap;background-color:#fff;border-radius:10px}ion-list ul .active__{position:relative;padding:5px 15px;font-size:18px;font-weight:700;color:#535353;transition:.3s}ion-list ul .active{color:#2d8af7;background-color:#f2f4ff;border-radius:10px}ion-list ul li{flex:1 1 auto}ion-list ul li div{cursor:pointer;text-align:center}\n"] }]
140
- }], ctorParameters: () => [{ type: i1.ChatService }, { type: i2.AlertController }, { type: i2.NavController }], propDecorators: { onItemClick: [{
141
- type: Input
142
- }] } });
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvYWlnYy9jaGF0L2NoYXQtbGlzdC9jaGF0LWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL2NoYXQvY2hhdC1saXN0L2NoYXQtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hKLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQTs7Ozs7QUFhMUUsTUFBTSxPQUFPLGlCQUFpQjtJQUc1QixZQUNTLFFBQW9CLEVBQ25CLFNBQXlCLEVBQ3pCLE9BQXFCO1FBRnRCLGFBQVEsR0FBUixRQUFRLENBQVk7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFDekIsWUFBTyxHQUFQLE9BQU8sQ0FBYztRQUwvQixhQUFRLEdBQWMsRUFBRSxDQUFBO1FBY2YsZ0JBQVcsR0FBWSxDQUFDLElBQVEsRUFBQyxFQUFFO1lBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdEIsQ0FBQyxDQUFBO1FBR0QsVUFBVTtRQUNWLFdBQU0sR0FBUSxzREFBc0QsQ0FBQTtRQXlCcEUsZ0JBQVcsR0FBVyxLQUFLLENBQUM7UUFyQzFCLElBQUksQ0FBQyxR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USxFQUFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLE9BQU8sRUFBQyxPQUFPO3FCQUNyRSxhQUNTLEVBQ1QsY0FDVSxJQUFJOzBJQWlCTixXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFsZXJ0Q29udHJvbGxlciwgSW9uQXZhdGFyLCBJb25CdXR0b24sIElvbkljb24sIElvbkl0ZW0sIElvbkxhYmVsLCBJb25MaXN0LCBJb25Ob3RlLCBJb25UZXh0LCBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBDaGF0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlLWZtYWkvc2VydmljZS1jaGF0L2NoYXQuc2VydmljZVwiXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY2hhdC1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXQtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoYXQtbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOltcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSW9uSWNvbixJb25MaXN0LElvbkxhYmVsLElvbk5vdGUsSW9uQnV0dG9uLElvbkF2YXRhcixJb25JdGVtLElvblRleHQsXG4gIF0sXG4gIHByb3ZpZGVyczpbXG4gIF0sXG4gIHN0YW5kYWxvbmU6dHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDaGF0TGlzdENvbXBvbmVudCB7XG4gIGNoYXRMaXN0OkFycmF5PGFueT4gPSBbXVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjaGF0U2VydjpDaGF0U2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0Q3RybDpBbGVydENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBuYXZDdHJsOk5hdkNvbnRyb2xsZXIsXG4gICl7XG5cbiAgICB0aGlzLmNoYXRTZXJ2LmdldENoYXRTZXNzaW9uKCkudGhlbigoKT0+e1xuICAgICAgLy8gY29uc29sZS5sb2codGhpcy5jaGF0U2Vydi5jaGF0TGlzdCk7XG4gICAgfSlcbiAgfVxuXG5cbiAgQElucHV0KCkgb25JdGVtQ2xpY2s6RnVuY3Rpb24gPSAoY2hhdDphbnkpPT57XG4gICAgdGhpcy5nb1Nlc3Npb24oY2hhdClcbiAgfVxuXG5cbiAgLyoqIOm7mOiupOWktOWDjyovXG4gIGF2YXRhcjpzdHJpbmc9J2h0dHBzOi8vaW9uaWNmcmFtZXdvcmsuY29tL2RvY3MvaW1nL2RlbW9zL2F2YXRhci5zdmcnXG4gIGFzeW5jIGdvU2Vzc2lvbihjaGF0KXtcbiAgICBpZih0aGlzLmlzUHJldmVudEdvKSByZXR1cm5cbiAgICAvLyB0aGlzLnRhYi5jdXJyZW50VGFiID0gXCJcIlxuICAgIGlmKGNoYXQ/LnJpZCB8fCBjaGF0Py5zaWQpe1xuICAgICAgdGhpcy5jaGF0U2Vydi5yZXN0b3JlQ2hhdFBhbmVsKGNoYXQpXG4gICAgfWVsc2V7XG4gICAgICBsZXQgYWxlcnQgPSBhd2FpdCB0aGlzLmFsZXJ0Q3RybC5jcmVhdGUoe1xuICAgICAgICBoZWFkZXI6XCLms6jmhI9cIixcbiAgICAgICAgc3ViSGVhZGVyOlwi6K+35oKo6YCJ5oup5Y+z5L6n6KeS6ImyXCIsXG4gICAgICAgIG1lc3NhZ2U6XCLlvIDlp4vlr7nor51cIixcbiAgICAgICAgYnV0dG9uczpbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcm9sZTpcIm9rXCIsdGV4dDpcIuefpemBk+S6hlwiLGhhbmRsZXI6KCk9PntcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICBdXG4gICAgICB9KVxuICAgICAgYWxlcnQucHJlc2VudCgpO1xuICAgICAgdGhpcy5uYXZDdHJsLm5hdmlnYXRlUm9vdChcIi9jaGF0L3Byby9tYXNrXCIpXG5cbiAgICB9XG4gIH1cblxuXG4gIGlzUHJldmVudEdvOmJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqXG4gICAqIOS/ruaUueWbvuagh+eahOWKn+iDvee7hOS7tlxuICAgKiBAcGFyYW0gSWQg5Lya6K+dSWRcbiAgICovXG4gIGFzeW5jIHByZXNlbnRFZGl0VGl0bGUoY2hhdFNlc3Npb246UGFyc2UuT2JqZWN0LGNoYXQ6YW55LGV2ZW50OkV2ZW50KSB7XG4gICAgdGhpcy5pc1ByZXZlbnRHbyA9IHRydWU7c2V0VGltZW91dCgoKT0+e3RoaXMuaXNQcmV2ZW50R289ZmFsc2V9LDUwMClcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyDpmLLmraLop6blj5HniLbnuqfngrnlh7vkuovku7ZcbiAgICBjb25zdCBhbGVydCA9IGF3YWl0IHRoaXMuYWxlcnRDdHJsLmNyZWF0ZSh7XG4gICAgICBoZWFkZXI6ICfkv67mlLnkvJror53moIfpopgnLFxuICAgICAgc3ViSGVhZGVyOiAnJyxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgYnV0dG9uczpbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiAn5Y+W5raIJyxcbiAgICAgICAgICByb2xlOiAnY2FuY2VsJyxcbiAgICAgICAgICBoYW5kbGVyOiAoKSA9PiB7XG4gICAgXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6ICfnoa7lrponLFxuICAgICAgICAgIHJvbGU6ICdjb25maXJtJyxcbiAgICAgICAgICBoYW5kbGVyOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgY2hhdC50aXRsZSA9IGRhdGEudGl0bGVcbiAgICAgICAgICAgIGNoYXRTZXNzaW9uPy5zZXQoJ3RpdGxlJyxkYXRhLnRpdGxlKVxuICAgICAgICAgICAgY2hhdFNlc3Npb24/LnNhdmUoKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgaW5wdXRzOltcbiAgICAgICAge1xuICAgICAgICAgIHBsYWNlaG9sZGVyOiAn5Lya6K+d5qCH6aKYJyxcbiAgICAgICAgICBuYW1lOiAndGl0bGUnLFxuICAgICAgICAgIHZhbHVlOmNoYXQ/LnRpdGxlIHx8IFwiXCJcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuICAgIC8vIHRoaXMuY2hhdFNlc3Npb25JZCA9IElkXG4gICAgYXdhaXQgYWxlcnQucHJlc2VudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIOWIoOmZpOWbvuagh+eahOWKn+iDvee7hOS7tlxuICAgKiBAcGFyYW0gSWQg5Lya6K+dSWRcbiAgICovXG4gIGFzeW5jIHByZXNlbnREZWxldGVUSXRsZShjaGF0U2Vzc2lvbjpQYXJzZS5PYmplY3QsY2hhdDphbnksZXZlbnQ6RXZlbnQpIHtcbiAgICB0aGlzLmlzUHJldmVudEdvID0gdHJ1ZTtzZXRUaW1lb3V0KCgpPT57dGhpcy5pc1ByZXZlbnRHbz1mYWxzZX0sNTAwKVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIOmYsuatouinpuWPkeeItue6p+eCueWHu+S6i+S7tlxuICAgIGNvbnN0IGFsZXJ0ID0gYXdhaXQgdGhpcy5hbGVydEN0cmwuY3JlYXRlKHtcbiAgICAgIGhlYWRlcjogJ+ehruiupOWIoOmZpO+8nycsXG4gICAgICBzdWJIZWFkZXI6ICcnLFxuICAgICAgbWVzc2FnZTogJycsXG4gICAgICBidXR0b25zOltcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6ICflj5bmtognLFxuICAgICAgICAgIHJvbGU6ICdjYW5jZWwnLFxuICAgICAgICAgIGhhbmRsZXI6ICgpID0+IHtcbiAgICBcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogJ+ehruWumicsXG4gICAgICAgICAgcm9sZTogJ2NvbmZpcm0nLFxuICAgICAgICAgIGhhbmRsZXI6ICgpID0+IHtcbiAgICAgICAgICAgIGNoYXQuaXNIaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgY2hhdFNlc3Npb24/LnNldCgnaXNEZWxldGVkJyx0cnVlKVxuICAgICAgICAgICAgY2hhdFNlc3Npb24/LnNhdmUoKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICAgIGF3YWl0IGFsZXJ0LnByZXNlbnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDnu5jnlLvmoIfpopjotoXlh7rlrZfmlbDnmoTpg6jliIbnlKjnnIHnlaXlj7fku6Pmm79cbiAgICogQHBhcmFtIHN0ciDooqvmiafooYznmoTmlofmnKxcbiAgICogQHJldHVybnMgXG4gICAqL1xuICB0cnVuY2F0ZVN0cmluZyhzdHI6U3RyaW5nKSB7XG4gICAgaWYgKHN0ciAmJiBzdHIubGVuZ3RoID4gMTApIHtcbiAgICAgIHJldHVybiBzdHIuc2xpY2UoMCwgMTApICsgJy4uLic7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH1cblxufVxuIiwiPGlvbi1saXN0PlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoYXQgb2YgKGNoYXRTZXJ2Py5jaGF0TGlzdCB8fCBjaGF0TGlzdClcIj5cbiAgICAgIDxpb24taXRlbSBbYnV0dG9uXT1cInRydWVcIiBkZXRhaWw9XCJmYWxzZVwiICpuZ0lmPVwiIWNoYXQ/LmlzSGlkZGVuXCIgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGNoYXQpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1bnJlYWQtaW5kaWNhdG9yLXdyYXBwZXJcIiBzbG90PVwic3RhcnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidW5yZWFkLWluZGljYXRvclwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGlvbi1sYWJlbD5cbiAgICAgICAgICA8ZGl2ICBzdHlsZT1cImRpc3BsYXk6IGZsZXg7anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogY2VudGVyO1wiPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7YWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cbiAgICAgICAgICAgIDxzdHJvbmcgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O2FsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XG4gICAgICAgICAgICAgICAgPGlvbi1hdmF0YXIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDEwcHg7XCI+XG4gICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiY2hhdD8udGh1bWJ8fGF2YXRhclwiIC8+XG4gICAgICAgICAgICAgICAgPC9pb24tYXZhdGFyPlxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwibWF4LXdpZHRoOiA3cmVtO3doaXRlLXNwYWNlOiBub3dyYXA7XCI+e3t0cnVuY2F0ZVN0cmluZyhjaGF0Py50aXRsZSl9fTwvcD5cbiAgICAgICAgICAgIDwvc3Ryb25nPlxuXG4gICAgICAgICAgICA8aW9uLWljb24gKGNsaWNrKT1cInByZXNlbnRFZGl0VGl0bGUoY2hhdD8uc2Vzc2lvbixjaGF0LCRldmVudClcIiBuYW1lPVwiYnJ1c2gtc2hhcnBcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxcmVtO1wiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8aW9uLWljb24gKGNsaWNrKT1cInByZXNlbnREZWxldGVUSXRsZShjaGF0Py5zZXNzaW9uLGNoYXQsJGV2ZW50KVwiIG5hbWU9XCJ0cmFzaC1zaGFycFwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDAuNXJlbTtcIj48L2lvbi1pY29uPlxuICAgICAgICBcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldGFkYXRhLWVuZC13cmFwcGVyXCIgc2xvdD1cImVuZFwiPlxuICAgICAgICAgICAgICA8aW9uLW5vdGUgY29sb3I9XCJtZWRpdW1cIj57e2NoYXQ/LmxhdGVzdCB8IGRhdGU6XCJISDptbVwifX08L2lvbi1ub3RlPlxuICAgICAgICAgICAgICA8aW9uLWljb24gY29sb3I9XCJtZWRpdW1cIiBuYW1lPVwiY2hldnJvbi1mb3J3YXJkXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxpb24tdGV4dD48L2lvbi10ZXh0PjxiciAvPlxuICAgICAgICAgIDxpb24tbm90ZSBjb2xvcj1cIm1lZGl1bVwiIGNsYXNzPVwiaW9uLXRleHQtd3JhcFwiPlxuICAgICAgICAgICAge3tjaGF0Py5tZXNzYWdlfX1cbiAgICAgICAgICA8L2lvbi1ub3RlPlxuICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgIDwvaW9uLWl0ZW0+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvaW9uLWxpc3Q+Il19
8
+ import{CommonModule}from"@angular/common";import{Component,Input}from"@angular/core";import{AlertController,IonAvatar,IonButton,IonIcon,IonItem,IonLabel,IonList,IonNote,IonText,NavController}from"@ionic/angular/standalone";import{ChatService}from"../../service-fmai/service-chat/chat.service";import*as i0 from"@angular/core";import*as i1 from"../../service-fmai/service-chat/chat.service";import*as i2 from"@ionic/angular/standalone";import*as i3 from"@angular/common";export class ChatListComponent{constructor(t,e,n){this.chatServ=t,this.alertCtrl=e,this.navCtrl=n,this.chatList=[],this.onItemClick=t=>{this.goSession(t)},this.avatar="https://ionicframework.com/docs/img/demos/avatar.svg",this.isPreventGo=!1,this.chatServ.getChatSession().then((()=>{}))}async goSession(t){if(!this.isPreventGo)if(t?.rid||t?.sid)this.chatServ.restoreChatPanel(t);else{(await this.alertCtrl.create({header:"注意",subHeader:"请您选择右侧角色",message:"开始对话",buttons:[{role:"ok",text:"知道了",handler:()=>{}}]})).present(),this.navCtrl.navigateRoot("/chat/pro/mask")}}async presentEditTitle(t,e,n){this.isPreventGo=!0,setTimeout((()=>{this.isPreventGo=!1}),500),n.preventDefault();const i=await this.alertCtrl.create({header:"修改会话标题",subHeader:"",message:"",buttons:[{text:"取消",role:"cancel",handler:()=>{}},{text:"确定",role:"confirm",handler:n=>{e.title=n.title,t?.set("title",n.title),t?.save()}}],inputs:[{placeholder:"会话标题",name:"title",value:e?.title||""}]});await i.present()}async presentDeleteTItle(t,e,n){this.isPreventGo=!0,setTimeout((()=>{this.isPreventGo=!1}),500),n.preventDefault();const i=await this.alertCtrl.create({header:"确认删除?",subHeader:"",message:"",buttons:[{text:"取消",role:"cancel",handler:()=>{}},{text:"确定",role:"confirm",handler:()=>{e.isHidden=!0,t?.set("isDeleted",!0),t?.save()}}]});await i.present()}truncateString(t){return t&&t.length>10?t.slice(0,10)+"...":t}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ChatListComponent,deps:[{token:i1.ChatService},{token:i2.AlertController},{token:i2.NavController}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:ChatListComponent,isStandalone:!0,selector:"app-chat-list",inputs:{onItemClick:"onItemClick"},providers:[],ngImport:i0,template:'<ion-list>\n <ng-container *ngFor="let chat of (chatServ?.chatList || chatList)">\n <ion-item [button]="true" detail="false" *ngIf="!chat?.isHidden" (click)="onItemClick(chat)">\n <div class="unread-indicator-wrapper" slot="start">\n <div class="unread-indicator"></div>\n </div>\n <ion-label>\n <div style="display: flex;justify-content: space-between; align-items: center;">\n <div style="display: flex; flex-direction: row;align-items: center;">\n <strong style="display: flex;align-items: center;">\n <ion-avatar style="margin-right: 10px;">\n <img [src]="chat?.thumb||avatar" />\n </ion-avatar>\n <p style="max-width: 7rem;white-space: nowrap;">{{truncateString(chat?.title)}}</p>\n </strong>\n\n <ion-icon (click)="presentEditTitle(chat?.session,chat,$event)" name="brush-sharp" style="margin-left: 1rem;"></ion-icon>\n <ion-icon (click)="presentDeleteTItle(chat?.session,chat,$event)" name="trash-sharp" style="margin-left: 0.5rem;"></ion-icon>\n \n </div>\n <div class="metadata-end-wrapper" slot="end">\n <ion-note color="medium">{{chat?.latest | date:"HH:mm"}}</ion-note>\n <ion-icon color="medium" name="chevron-forward"></ion-icon>\n </div>\n </div>\n <ion-text></ion-text><br />\n <ion-note color="medium" class="ion-text-wrap">\n {{chat?.message}}\n </ion-note>\n </ion-label>\n </ion-item>\n </ng-container>\n </ion-list>',styles:["ion-icon{color:#fff}ion-list{margin:3px}ion-list ion-item{--inner-padding-bottom:0px;--inner-padding-end:0px;--inner-padding-start:0px;--inner-padding-to:0px;--padding-bottom:0px;--padding-end:0px;--padding-start:0px;--padding-to:0px}ion-list ul{width:100%;list-style-type:none;padding:0;margin:0 0 10px;display:flex;flex-wrap:wrap;background-color:#fff;border-radius:10px}ion-list ul .active__{position:relative;padding:5px 15px;font-size:18px;font-weight:700;color:#535353;transition:.3s}ion-list ul .active{color:#2d8af7;background-color:#f2f4ff;border-radius:10px}ion-list ul li{flex:1 1 auto}ion-list ul li div{cursor:pointer;text-align:center}\n"],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"directive",type:i3.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:i3.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"pipe",type:i3.DatePipe,name:"date"},{kind:"component",type:IonIcon,selector:"ion-icon",inputs:["color","flipRtl","icon","ios","lazy","md","mode","name","sanitize","size","src"]},{kind:"component",type:IonList,selector:"ion-list",inputs:["inset","lines","mode"]},{kind:"component",type:IonLabel,selector:"ion-label",inputs:["color","mode","position"]},{kind:"component",type:IonNote,selector:"ion-note",inputs:["color","mode"]},{kind:"component",type:IonAvatar,selector:"ion-avatar"},{kind:"component",type:IonItem,selector:"ion-item",inputs:["button","color","detail","detailIcon","disabled","download","href","lines","mode","rel","routerAnimation","routerDirection","target","type"]},{kind:"component",type:IonText,selector:"ion-text",inputs:["color","mode"]}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ChatListComponent,decorators:[{type:Component,args:[{selector:"app-chat-list",imports:[CommonModule,IonIcon,IonList,IonLabel,IonNote,IonButton,IonAvatar,IonItem,IonText],providers:[],standalone:!0,template:'<ion-list>\n <ng-container *ngFor="let chat of (chatServ?.chatList || chatList)">\n <ion-item [button]="true" detail="false" *ngIf="!chat?.isHidden" (click)="onItemClick(chat)">\n <div class="unread-indicator-wrapper" slot="start">\n <div class="unread-indicator"></div>\n </div>\n <ion-label>\n <div style="display: flex;justify-content: space-between; align-items: center;">\n <div style="display: flex; flex-direction: row;align-items: center;">\n <strong style="display: flex;align-items: center;">\n <ion-avatar style="margin-right: 10px;">\n <img [src]="chat?.thumb||avatar" />\n </ion-avatar>\n <p style="max-width: 7rem;white-space: nowrap;">{{truncateString(chat?.title)}}</p>\n </strong>\n\n <ion-icon (click)="presentEditTitle(chat?.session,chat,$event)" name="brush-sharp" style="margin-left: 1rem;"></ion-icon>\n <ion-icon (click)="presentDeleteTItle(chat?.session,chat,$event)" name="trash-sharp" style="margin-left: 0.5rem;"></ion-icon>\n \n </div>\n <div class="metadata-end-wrapper" slot="end">\n <ion-note color="medium">{{chat?.latest | date:"HH:mm"}}</ion-note>\n <ion-icon color="medium" name="chevron-forward"></ion-icon>\n </div>\n </div>\n <ion-text></ion-text><br />\n <ion-note color="medium" class="ion-text-wrap">\n {{chat?.message}}\n </ion-note>\n </ion-label>\n </ion-item>\n </ng-container>\n </ion-list>',styles:["ion-icon{color:#fff}ion-list{margin:3px}ion-list ion-item{--inner-padding-bottom:0px;--inner-padding-end:0px;--inner-padding-start:0px;--inner-padding-to:0px;--padding-bottom:0px;--padding-end:0px;--padding-start:0px;--padding-to:0px}ion-list ul{width:100%;list-style-type:none;padding:0;margin:0 0 10px;display:flex;flex-wrap:wrap;background-color:#fff;border-radius:10px}ion-list ul .active__{position:relative;padding:5px 15px;font-size:18px;font-weight:700;color:#535353;transition:.3s}ion-list ul .active{color:#2d8af7;background-color:#f2f4ff;border-radius:10px}ion-list ul li{flex:1 1 auto}ion-list ul li div{cursor:pointer;text-align:center}\n"]}]}],ctorParameters:()=>[{type:i1.ChatService},{type:i2.AlertController},{type:i2.NavController}],propDecorators:{onItemClick:[{type:Input}]}});
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2NoYXQvY2hhdC1saXN0L2NoYXQtbGlzdC5jb21wb25lbnQubWpz`
10
+