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,2 +1,10 @@
1
- export * from "./chat-list.component";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvY2hhdC9jaGF0LWxpc3QvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NoYXQtbGlzdC5jb21wb25lbnRcIiJdfQ==
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-list/index.mjs
7
+ */
8
+ export*from"./chat-list.component";
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2NoYXQvY2hhdC1saXN0L2luZGV4Lm1qcw==`
10
+
@@ -1,40 +1,10 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, Input } from '@angular/core';
3
- import { ChatService, FmodeChat } from '../../service-fmai/service-chat';
4
- import { FmChatMessageCard } from '../chat-message-card/comp-message-card.component';
5
- import { CompRolePromptComponent } from '../comp-role-prompt/comp-role-prompt.component';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "../../service-fmai/service-chat";
8
- import * as i2 from "@angular/common";
9
- export class FmChatMesssageArea {
10
- // messageList:any[] = []
11
- get messageList() {
12
- return this.chatServ.chatMap[this.chatId]?.messageList;
13
- }
14
- constructor(chatServ) {
15
- this.chatServ = chatServ;
16
- }
17
- ngDoCheck() {
18
- }
19
- ngAfterViewInit() {
20
- console.log("ng gogogo1");
21
- console.log("ng gogogo2");
22
- // this.messageList = this.chatServ.chatMap[this.chatId]?.messageList
23
- console.log(this.chat);
24
- }
25
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FmChatMesssageArea, deps: [{ token: i1.ChatService }], target: i0.ɵɵFactoryTarget.Component }); }
26
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FmChatMesssageArea, isStandalone: true, selector: "fm-chat-message-area", inputs: { chatId: "chatId", chat: "chat" }, ngImport: i0, template: "\n<div class=\"message-list\">\n <app-comp-role-prompt [chat]=\"chat\" [role]=\"chat?.role?.id\"></app-comp-role-prompt>\n <ng-container *ngFor=\"let message of chat?.messageList\">\n <!-- \u5185\u5BB9\u683C\u5F0F\u5316\u533A\u57DF -->\n <fm-chat-message-card [chat]=\"chat\" *ngIf=\"!message?.hidden\" [message]=\"message\" [role]=\"chat?.role\"></fm-chat-message-card>\n </ng-container>\n\n <!-- \u9884\u89C8\u65E0\u56FE\u6D88\u606F -->\n <ng-container *ngIf=\"chat?.userInput&&!chat?.userImage\">\n <fm-chat-message-card [chat]=\"chat\" [message]=\"{role:'user',content:chat?.userInput}\" [role]=\"chat?.role\"></fm-chat-message-card>\n </ng-container>\n\n <!-- \u9884\u89C8\u6709\u56FE\u6D88\u606F -->\n <ng-container *ngIf=\"chat?.userImage\">\n <fm-chat-message-card [chat]=\"chat\" [message]=\"{role:'user',content:[{type:'text',text:chat?.userInput},{type:'image_url',image_url:{url:chat?.userImage}}]}\" [role]=\"chat?.role\"></fm-chat-message-card>\n </ng-container>\n\n</div>", styles: [".message-list{padding:5px 20px}:host-context(body.dark) .message-list{background-color:#000!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FmChatMessageCard, selector: "fm-chat-message-card", inputs: ["message", "role", "chat"] }, { kind: "component", type: CompRolePromptComponent, selector: "app-comp-role-prompt", inputs: ["chat", "role"] }] }); }
27
- }
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FmChatMesssageArea, decorators: [{
29
- type: Component,
30
- args: [{ selector: 'fm-chat-message-area', standalone: true, imports: [
31
- CommonModule,
32
- FmChatMessageCard,
33
- CompRolePromptComponent,
34
- ], template: "\n<div class=\"message-list\">\n <app-comp-role-prompt [chat]=\"chat\" [role]=\"chat?.role?.id\"></app-comp-role-prompt>\n <ng-container *ngFor=\"let message of chat?.messageList\">\n <!-- \u5185\u5BB9\u683C\u5F0F\u5316\u533A\u57DF -->\n <fm-chat-message-card [chat]=\"chat\" *ngIf=\"!message?.hidden\" [message]=\"message\" [role]=\"chat?.role\"></fm-chat-message-card>\n </ng-container>\n\n <!-- \u9884\u89C8\u65E0\u56FE\u6D88\u606F -->\n <ng-container *ngIf=\"chat?.userInput&&!chat?.userImage\">\n <fm-chat-message-card [chat]=\"chat\" [message]=\"{role:'user',content:chat?.userInput}\" [role]=\"chat?.role\"></fm-chat-message-card>\n </ng-container>\n\n <!-- \u9884\u89C8\u6709\u56FE\u6D88\u606F -->\n <ng-container *ngIf=\"chat?.userImage\">\n <fm-chat-message-card [chat]=\"chat\" [message]=\"{role:'user',content:[{type:'text',text:chat?.userInput},{type:'image_url',image_url:{url:chat?.userImage}}]}\" [role]=\"chat?.role\"></fm-chat-message-card>\n </ng-container>\n\n</div>", styles: [".message-list{padding:5px 20px}:host-context(body.dark) .message-list{background-color:#000!important}\n"] }]
35
- }], ctorParameters: () => [{ type: i1.ChatService }], propDecorators: { chatId: [{
36
- type: Input
37
- }], chat: [{
38
- type: Input
39
- }] } });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcC1tZXNzYWdlLWFyZWEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL2NoYXQvY2hhdC1tZXNzYWdlLWFyZWEvY29tcC1tZXNzYWdlLWFyZWEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL2NoYXQvY2hhdC1tZXNzYWdlLWFyZWEvY29tcC1tZXNzYWdlLWFyZWEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBaUIsU0FBUyxFQUFXLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDOzs7O0FBYXpGLE1BQU0sT0FBTyxrQkFBa0I7SUFJN0IseUJBQXlCO0lBQ3pCLElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFdBQVcsQ0FBQTtJQUN4RCxDQUFDO0lBRUQsWUFBb0IsUUFBb0I7UUFBcEIsYUFBUSxHQUFSLFFBQVEsQ0FBWTtJQUV4QyxDQUFDO0lBRUQsU0FBUztJQUNULENBQUM7SUFDRCxlQUFlO1FBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ3pCLHFFQUFxRTtRQUNyRSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN4QixDQUFDOytHQXBCVSxrQkFBa0I7bUdBQWxCLGtCQUFrQiw0SENqQi9CLG1oQ0FrQk0saUtETkYsWUFBWSxnUUFDWixpQkFBaUIsc0dBQ2pCLHVCQUF1Qjs7NEZBR2Qsa0JBQWtCO2tCQVg5QixTQUFTOytCQUNFLHNCQUFzQixjQUdyQixJQUFJLFdBQ1A7d0JBQ04sWUFBWTt3QkFDWixpQkFBaUI7d0JBQ2pCLHVCQUF1QjtxQkFDeEI7Z0ZBSVEsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIERvQ2hlY2ssIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGF0U2VydmljZSwgRm1vZGVDaGF0IH0gZnJvbSAnLi4vLi4vc2VydmljZS1mbWFpL3NlcnZpY2UtY2hhdCc7XG5pbXBvcnQgeyBGbUNoYXRNZXNzYWdlQ2FyZCB9IGZyb20gJy4uL2NoYXQtbWVzc2FnZS1jYXJkL2NvbXAtbWVzc2FnZS1jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21wUm9sZVByb21wdENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXAtcm9sZS1wcm9tcHQvY29tcC1yb2xlLXByb21wdC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmbS1jaGF0LW1lc3NhZ2UtYXJlYScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb21wLW1lc3NhZ2UtYXJlYS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbXAtbWVzc2FnZS1hcmVhLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6dHJ1ZSxcbiAgaW1wb3J0czpbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZtQ2hhdE1lc3NhZ2VDYXJkLFxuICAgIENvbXBSb2xlUHJvbXB0Q29tcG9uZW50LFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZtQ2hhdE1lc3NzYWdlQXJlYSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsRG9DaGVjayB7XG5cbiAgQElucHV0KCkgY2hhdElkOnN0cmluZ1xuICBASW5wdXQoKSBjaGF0OkZtb2RlQ2hhdFxuICAvLyBtZXNzYWdlTGlzdDphbnlbXSA9IFtdXG4gIGdldCBtZXNzYWdlTGlzdCgpOmFueVtde1xuICAgIHJldHVybiB0aGlzLmNoYXRTZXJ2LmNoYXRNYXBbdGhpcy5jaGF0SWRdPy5tZXNzYWdlTGlzdFxuICB9XG4gIFxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYXRTZXJ2OkNoYXRTZXJ2aWNlLFxuICAgICl7XG4gIH1cblxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gIH1cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKFwibmcgZ29nb2dvMVwiKVxuICAgIGNvbnNvbGUubG9nKFwibmcgZ29nb2dvMlwiKVxuICAgIC8vIHRoaXMubWVzc2FnZUxpc3QgPSB0aGlzLmNoYXRTZXJ2LmNoYXRNYXBbdGhpcy5jaGF0SWRdPy5tZXNzYWdlTGlzdFxuICAgIGNvbnNvbGUubG9nKHRoaXMuY2hhdClcbiAgfVxufVxuIiwiXG48ZGl2IGNsYXNzPVwibWVzc2FnZS1saXN0XCI+XG4gICAgPGFwcC1jb21wLXJvbGUtcHJvbXB0IFtjaGF0XT1cImNoYXRcIiBbcm9sZV09XCJjaGF0Py5yb2xlPy5pZFwiPjwvYXBwLWNvbXAtcm9sZS1wcm9tcHQ+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWVzc2FnZSBvZiBjaGF0Py5tZXNzYWdlTGlzdFwiPlxuICAgICAgICA8IS0tIOWGheWuueagvOW8j+WMluWMuuWfnyAtLT5cbiAgICAgICAgPGZtLWNoYXQtbWVzc2FnZS1jYXJkIFtjaGF0XT1cImNoYXRcIiAqbmdJZj1cIiFtZXNzYWdlPy5oaWRkZW5cIiBbbWVzc2FnZV09XCJtZXNzYWdlXCIgW3JvbGVdPVwiY2hhdD8ucm9sZVwiPjwvZm0tY2hhdC1tZXNzYWdlLWNhcmQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIOmihOiniOaXoOWbvua2iOaBryAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hhdD8udXNlcklucHV0JiYhY2hhdD8udXNlckltYWdlXCI+XG4gICAgICAgIDxmbS1jaGF0LW1lc3NhZ2UtY2FyZCBbY2hhdF09XCJjaGF0XCIgW21lc3NhZ2VdPVwie3JvbGU6J3VzZXInLGNvbnRlbnQ6Y2hhdD8udXNlcklucHV0fVwiIFtyb2xlXT1cImNoYXQ/LnJvbGVcIj48L2ZtLWNoYXQtbWVzc2FnZS1jYXJkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSDpooTop4jmnInlm77mtojmga8gLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoYXQ/LnVzZXJJbWFnZVwiPlxuICAgICAgICA8Zm0tY2hhdC1tZXNzYWdlLWNhcmQgW2NoYXRdPVwiY2hhdFwiIFttZXNzYWdlXT1cIntyb2xlOid1c2VyJyxjb250ZW50Olt7dHlwZTondGV4dCcsdGV4dDpjaGF0Py51c2VySW5wdXR9LHt0eXBlOidpbWFnZV91cmwnLGltYWdlX3VybDp7dXJsOmNoYXQ/LnVzZXJJbWFnZX19XX1cIiBbcm9sZV09XCJjaGF0Py5yb2xlXCI+PC9mbS1jaGF0LW1lc3NhZ2UtY2FyZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuPC9kaXY+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-message-area/comp-message-area.component.mjs
7
+ */
8
+ import{CommonModule}from"@angular/common";import{Component,Input}from"@angular/core";import{ChatService,FmodeChat}from"../../service-fmai/service-chat";import{FmChatMessageCard}from"../chat-message-card/comp-message-card.component";import{CompRolePromptComponent}from"../comp-role-prompt/comp-role-prompt.component";import*as i0 from"@angular/core";import*as i1 from"../../service-fmai/service-chat";import*as i2 from"@angular/common";export class FmChatMesssageArea{get messageList(){return this.chatServ.chatMap[this.chatId]?.messageList}constructor(e){this.chatServ=e}ngDoCheck(){}ngAfterViewInit(){console.log("ng gogogo1"),console.log("ng gogogo2"),console.log(this.chat)}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:FmChatMesssageArea,deps:[{token:i1.ChatService}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:FmChatMesssageArea,isStandalone:!0,selector:"fm-chat-message-area",inputs:{chatId:"chatId",chat:"chat"},ngImport:i0,template:'\n<div class="message-list">\n <app-comp-role-prompt [chat]="chat" [role]="chat?.role?.id"></app-comp-role-prompt>\n <ng-container *ngFor="let message of chat?.messageList">\n \x3c!-- 内容格式化区域 --\x3e\n <fm-chat-message-card [chat]="chat" *ngIf="!message?.hidden" [message]="message" [role]="chat?.role"></fm-chat-message-card>\n </ng-container>\n\n \x3c!-- 预览无图消息 --\x3e\n <ng-container *ngIf="chat?.userInput&&!chat?.userImage">\n <fm-chat-message-card [chat]="chat" [message]="{role:\'user\',content:chat?.userInput}" [role]="chat?.role"></fm-chat-message-card>\n </ng-container>\n\n \x3c!-- 预览有图消息 --\x3e\n <ng-container *ngIf="chat?.userImage">\n <fm-chat-message-card [chat]="chat" [message]="{role:\'user\',content:[{type:\'text\',text:chat?.userInput},{type:\'image_url\',image_url:{url:chat?.userImage}}]}" [role]="chat?.role"></fm-chat-message-card>\n </ng-container>\n\n</div>',styles:[".message-list{padding:5px 20px}:host-context(body.dark) .message-list{background-color:#000!important}\n"],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"directive",type:i2.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:i2.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:FmChatMessageCard,selector:"fm-chat-message-card",inputs:["message","role","chat"]},{kind:"component",type:CompRolePromptComponent,selector:"app-comp-role-prompt",inputs:["chat","role"]}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:FmChatMesssageArea,decorators:[{type:Component,args:[{selector:"fm-chat-message-area",standalone:!0,imports:[CommonModule,FmChatMessageCard,CompRolePromptComponent],template:'\n<div class="message-list">\n <app-comp-role-prompt [chat]="chat" [role]="chat?.role?.id"></app-comp-role-prompt>\n <ng-container *ngFor="let message of chat?.messageList">\n \x3c!-- 内容格式化区域 --\x3e\n <fm-chat-message-card [chat]="chat" *ngIf="!message?.hidden" [message]="message" [role]="chat?.role"></fm-chat-message-card>\n </ng-container>\n\n \x3c!-- 预览无图消息 --\x3e\n <ng-container *ngIf="chat?.userInput&&!chat?.userImage">\n <fm-chat-message-card [chat]="chat" [message]="{role:\'user\',content:chat?.userInput}" [role]="chat?.role"></fm-chat-message-card>\n </ng-container>\n\n \x3c!-- 预览有图消息 --\x3e\n <ng-container *ngIf="chat?.userImage">\n <fm-chat-message-card [chat]="chat" [message]="{role:\'user\',content:[{type:\'text\',text:chat?.userInput},{type:\'image_url\',image_url:{url:chat?.userImage}}]}" [role]="chat?.role"></fm-chat-message-card>\n </ng-container>\n\n</div>',styles:[".message-list{padding:5px 20px}:host-context(body.dark) .message-list{background-color:#000!important}\n"]}]}],ctorParameters:()=>[{type:i1.ChatService}],propDecorators:{chatId:[{type:Input}],chat:[{type:Input}]}});
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2NoYXQvY2hhdC1tZXNzYWdlLWFyZWEvY29tcC1tZXNzYWdlLWFyZWEuY29tcG9uZW50Lm1qcw==`
10
+
@@ -1,2 +1,10 @@
1
- export * from "./comp-message-area.component";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvY2hhdC9jaGF0LW1lc3NhZ2UtYXJlYS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLCtCQUErQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vY29tcC1tZXNzYWdlLWFyZWEuY29tcG9uZW50XCIiXX0=
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-message-area/index.mjs
7
+ */
8
+ export*from"./comp-message-area.component";
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2NoYXQvY2hhdC1tZXNzYWdlLWFyZWEvaW5kZXgubWpz`
10
+
@@ -1,92 +1,10 @@
1
- import { Component, Input } from '@angular/core';
2
- import { ChatContentPipe, FmodeChat, getMessageContentText, } from '../../service-fmai/service-chat';
3
- import Parse from "parse";
4
- import { CommonModule } from '@angular/common';
5
- import { IonAvatar, IonItem } from '@ionic/angular/standalone';
6
- import { CompUserAvatarComponent } from '../../../user/comp-user-avatar/comp-user-avatar.component';
7
- import { NzAvatarModule } from 'ng-zorro-antd/avatar';
8
- import { ClipboardService } from '../../comp-markdown-preview/clipboard.service';
9
- import { MarkdownPreviewModule } from '../../comp-markdown-preview/markdown-preview.module';
10
- import { NzSanitizerPipe } from 'ng-zorro-antd/pipes';
11
- import { NzIconModule } from 'ng-zorro-antd/icon';
12
- import * as i0 from "@angular/core";
13
- import * as i1 from "../../comp-markdown-preview/clipboard.service";
14
- import * as i2 from "@angular/common";
15
- import * as i3 from "../../comp-markdown-preview/markdown-preview.component";
16
- import * as i4 from "ng-zorro-antd/avatar";
17
- import * as i5 from "ng-zorro-antd/icon";
18
- export class FmChatMessageCard {
19
- constructor(copyServ) {
20
- this.copyServ = copyServ;
21
- this.isVoicePlaying = false;
22
- this.user = Parse.User.current();
23
- }
24
- async playVoice() {
25
- let needUpdate = false;
26
- this.isVoicePlaying = true;
27
- let voice;
28
- if (this.message?.voice?.id) {
29
- let query = new Parse.Query("ChatVoice");
30
- query.include("voiceFile");
31
- voice = await query.get(this.message?.voice?.id);
32
- }
33
- // console.log(voice);
34
- if (!voice?.id) { // 无声音文件,则创建ChatVoice音频合成数据对象
35
- let item = await this.chat.getVoiceByContentText(this.message?.content);
36
- voice = this.chat.voiceMap[item?.id];
37
- this.message.voice = { id: voice?.id, duration: voice?.get("duration") };
38
- needUpdate = true;
39
- }
40
- if (!this.message?.voice?.duration) {
41
- this.message.voice.duration = voice?.get("duration");
42
- needUpdate = true;
43
- }
44
- if (needUpdate) {
45
- this.chat?.saveChatSession(); // 保存消息语音
46
- }
47
- this.chat.playChatVoice(voice, {
48
- onStart: (playedVoice) => {
49
- if (voice?.id != playedVoice?.id) {
50
- this.isVoicePlaying = false;
51
- }
52
- },
53
- onLoaded: (audio) => {
54
- this.message.voice.duration = audio.duration * 1000;
55
- this.updateVoiceDuration(audio.duration * 1000);
56
- },
57
- onStop: (playedVoice) => {
58
- if (voice?.id != playedVoice?.id) {
59
- this.isVoicePlaying = false;
60
- }
61
- }
62
- });
63
- }
64
- updateVoiceDuration(duration) {
65
- if (!this.message?.voice?.duration) {
66
- this.message.voice.duration = duration;
67
- this.chat?.saveChatSession(); // 保存消息语音
68
- }
69
- }
70
- async copy() {
71
- this.copyServ.copyToClipboard(getMessageContentText(this.message?.content));
72
- }
73
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FmChatMessageCard, deps: [{ token: i1.ClipboardService }], target: i0.ɵɵFactoryTarget.Component }); }
74
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FmChatMessageCard, isStandalone: true, selector: "fm-chat-message-card", inputs: { message: "message", role: "role", chat: "chat" }, ngImport: i0, template: "<div class=\"message-card\" [class.right]=\"message?.role=='user'\" [class.center]=\"message?.role=='system'\">\n <!-- \u7528\u6237\u53CA\u64CD\u4F5C\u533A -->\n <div class=\"item-row user\" *ngIf=\"message?.role!='system'\"> <!-- \u7CFB\u7EDF\u6D88\u606F\u4E0D\u663E\u793A\u5934\u50CF -->\n <div class=\"avatar-row\">\n <div class=\"actions\">\n <!-- \u5237\u65B0 -->\n <!-- <ion-button fill=\"outline\" slot=\"start\">\n <ion-icon name=\"refresh-outline\"></ion-icon> \n </ion-button> -->\n <!-- \u590D\u5236 -->\n <ion-button size=\"small\" fill=\"outline\" slot=\"start\" (click)=\"copy()\">\n <ion-icon name=\"copy-outline\"></ion-icon>\n </ion-button>\n <!-- \u7F16\u8F91 -->\n <!-- <ion-button fill=\"outline\" slot=\"start\">\n <ion-icon name=\"create-outline\"></ion-icon>\n </ion-button> -->\n </div>\n <!-- \u97F3\u9891\u6D88\u606F\u533A\u57DF -->\n <div *ngIf=\"message?.role=='assistant'||(message?.role=='user'&&message?.voice)\" class=\"play-voice\" (click)=\"playVoice()\">\n <div class=\"voice-button\">\n <span nz-icon [nzRotate]=\"message?.role=='user'?-90:90\" nzType=\"wifi\" nzTheme=\"outline\" [class.play-voice-playing]=\"isVoicePlaying\"></span>\n </div>\n <div class=\"voice-info\">\n <span *ngIf=\"message?.voice?.duration\">\n {{((message?.voice?.duration||0)/1000)|number:'1.0-0'}}\"\n </span>\n <span *ngIf=\"!message?.voice?.duration\">\n <!-- -->\n </span>\n </div>\n </div>\n <!-- \u5934\u50CF\u533A\u57DF -->\n <nz-avatar *ngIf=\"message?.role!='user'\" [nzSrc]=\"(chat?.role?.get('avatar') || chat?.role?.get('thumb') || 'https://file-cloud.fmode.cn/E4KpGvTEto/20230930/l413e6090731854.png')+'?'+'x-image-process=image/resize,m_fixed,w_100'+'&imageView2/1/w/32/h/32'\" ></nz-avatar>\n <app-comp-user-avatar [user]=\"user\" *ngIf=\"message?.role=='user'\"></app-comp-user-avatar>\n </div>\n </div>\n <!-- \u9644\u4EF6\uFF1A\u56FE\u7247 -->\n <div class=\"item-row images\" *ngIf=\"message?.content | chatContent:'image_url'\">\n <img [src]=\"message?.content | chatContent:'image_url'\" alt=\"\">\n </div>\n <!-- \u804A\u5929\u6C14\u6CE1 -->\n <div class=\"item-row bubble\">\n <fm-markdown-preview *ngIf=\"!message?.complete\" class=\"content-style\" [content]=\"message?.content | chatContent\" [render]=\"false\"></fm-markdown-preview>\n <fm-markdown-preview *ngIf=\"message?.complete\" [content]=\"message?.content | chatContent\"></fm-markdown-preview>\n </div>\n <!-- \u65F6\u95F4\u663E\u793A -->\n <div class=\"item-row loading\" *ngIf=\"message?.role!='system' && !message?.complete\">\n \u6B63\u5728\u8F93\u5165<ion-spinner name=\"dots\"></ion-spinner>\n </div>\n\n <div class=\"item-row created\" *ngIf=\"message?.createdAt\">\n <span>{{message?.createdAt | date:\"dd/MM/yy HH:mm\"}}</span>\n </div>\n</div>", styles: ["@charset \"UTF-8\";:host-context(body.dark) .message-card .actions .item-native{background:none!important}:host-context(body.dark) .message-card .bubble{color:#0e101d}:host-context(body.dark) .message-card .bubble .content-style{filter:invert(1)!important}:host-context(body.dark) .message-card .bubble fm-markdown-preview{filter:invert(1)!important}:host-context(body.dark) .message-card .play-voice{background-color:#0e101d}:host-context(body.dark) .message-card .play-voice .voice-info{color:#fff}:host-context(body.dark) .message-card .right .bubble{color:#921f8a!important;background:#921f8a!important}:host-context(body.dark) .message-card .right .play-voice{background:#921f8a!important}:host-context(body.dark) .message-card .created span{color:#fff}@media screen and (max-width: 800px){.message-card:focus .actions{opacity:1!important}}.message-card:hover .actions{opacity:1;transition:opacity .3s ease-in-out}.message-card{display:flex;flex-wrap:wrap;justify-content:start;align-items:flex-start}.message-card .avatar-row{width:300px;height:32px;display:flex;flex-direction:row-reverse;justify-content:start;align-items:center}.message-card .actions{display:flex;opacity:0;padding-left:10px;padding-right:10px}.message-card .item-row{display:flex;flex:100%;justify-content:start;margin-bottom:5px}.message-card .images img{max-width:300px}.message-card .bubble{display:flex;justify-content:center;max-width:100%;padding-top:1rem;padding:.5rem;color:#333;flex:none;border-radius:0 1.5em 1.5em/0em 1.5em 1.5em;color:#fff;background-color:currentColor}.message-card .bubble .content-style{filter:grayscale(1) contrast(999) invert(1)}.message-card .loading{text-align:right;color:#101010}.message-card .created{display:flex}.message-card .created span{font-size:12px;opacity:.4;white-space:nowrap;transition:all .6s ease;color:var(--black);text-align:center;width:100%;box-sizing:border-box;padding-right:10px;pointer-events:none;z-index:1}.right{justify-content:end;align-items:flex-end}.right .avatar-row{flex-direction:row;justify-content:end;width:auto}.right .actions{position:relative;margin-left:0}.right .item-row{justify-content:end}.right .bubble{color:#bbdefb;border-top-left-radius:1.5em;border-top-right-radius:0}.right .play-voice{flex-direction:row-reverse;background-color:#bbdefb}.center{justify-content:center;align-items:center}.center .item-row{justify-content:center}.center .bubble{color:var(--gray-secondary);border-top-left-radius:1.5em;border-top-right-radius:1.5em;font-size:12px;font-weight:100;padding:5px 20px}.play-voice{min-width:100px;height:32px;display:flex;justify-content:space-around;align-items:center;background-color:#fff;border-radius:7px}.play-voice .voice-button{width:32px;height:32px;display:flex;justify-content:center;align-items:center}.play-voice .voice-button span{overflow:hidden;font-size:18px;color:#ff69b4}.play-voice .voice-info{height:32px;display:flex;padding:0 10px;justify-content:end;align-items:center;color:#333}.play-voice-playing{animation:play-voice-animation 1s infinite}@keyframes play-voice-animation{0%{width:0}to{width:32px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.DecimalPipe, name: "number" }, { kind: "pipe", type: i2.DatePipe, name: "date" }, { kind: "component", type: CompUserAvatarComponent, selector: "app-comp-user-avatar", inputs: ["user"] }, { kind: "ngmodule", type: MarkdownPreviewModule }, { kind: "component", type: i3.MarkdownPreviewComponent, selector: "fm-markdown-preview", inputs: ["content", "render"] }, { kind: "ngmodule", type: NzAvatarModule }, { kind: "component", type: i4.NzAvatarComponent, selector: "nz-avatar", inputs: ["nzShape", "nzSize", "nzGap", "nzText", "nzSrc", "nzSrcSet", "nzAlt", "nzIcon"], outputs: ["nzError"], exportAs: ["nzAvatar"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i5.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "pipe", type: ChatContentPipe, name: "chatContent" }] }); }
75
- }
76
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FmChatMessageCard, decorators: [{
77
- type: Component,
78
- args: [{ selector: 'fm-chat-message-card', standalone: true, imports: [
79
- CommonModule, IonItem,
80
- CompUserAvatarComponent, MarkdownPreviewModule,
81
- NzAvatarModule, IonAvatar, NzIconModule,
82
- ChatContentPipe,
83
- NzSanitizerPipe
84
- ], template: "<div class=\"message-card\" [class.right]=\"message?.role=='user'\" [class.center]=\"message?.role=='system'\">\n <!-- \u7528\u6237\u53CA\u64CD\u4F5C\u533A -->\n <div class=\"item-row user\" *ngIf=\"message?.role!='system'\"> <!-- \u7CFB\u7EDF\u6D88\u606F\u4E0D\u663E\u793A\u5934\u50CF -->\n <div class=\"avatar-row\">\n <div class=\"actions\">\n <!-- \u5237\u65B0 -->\n <!-- <ion-button fill=\"outline\" slot=\"start\">\n <ion-icon name=\"refresh-outline\"></ion-icon> \n </ion-button> -->\n <!-- \u590D\u5236 -->\n <ion-button size=\"small\" fill=\"outline\" slot=\"start\" (click)=\"copy()\">\n <ion-icon name=\"copy-outline\"></ion-icon>\n </ion-button>\n <!-- \u7F16\u8F91 -->\n <!-- <ion-button fill=\"outline\" slot=\"start\">\n <ion-icon name=\"create-outline\"></ion-icon>\n </ion-button> -->\n </div>\n <!-- \u97F3\u9891\u6D88\u606F\u533A\u57DF -->\n <div *ngIf=\"message?.role=='assistant'||(message?.role=='user'&&message?.voice)\" class=\"play-voice\" (click)=\"playVoice()\">\n <div class=\"voice-button\">\n <span nz-icon [nzRotate]=\"message?.role=='user'?-90:90\" nzType=\"wifi\" nzTheme=\"outline\" [class.play-voice-playing]=\"isVoicePlaying\"></span>\n </div>\n <div class=\"voice-info\">\n <span *ngIf=\"message?.voice?.duration\">\n {{((message?.voice?.duration||0)/1000)|number:'1.0-0'}}\"\n </span>\n <span *ngIf=\"!message?.voice?.duration\">\n <!-- -->\n </span>\n </div>\n </div>\n <!-- \u5934\u50CF\u533A\u57DF -->\n <nz-avatar *ngIf=\"message?.role!='user'\" [nzSrc]=\"(chat?.role?.get('avatar') || chat?.role?.get('thumb') || 'https://file-cloud.fmode.cn/E4KpGvTEto/20230930/l413e6090731854.png')+'?'+'x-image-process=image/resize,m_fixed,w_100'+'&imageView2/1/w/32/h/32'\" ></nz-avatar>\n <app-comp-user-avatar [user]=\"user\" *ngIf=\"message?.role=='user'\"></app-comp-user-avatar>\n </div>\n </div>\n <!-- \u9644\u4EF6\uFF1A\u56FE\u7247 -->\n <div class=\"item-row images\" *ngIf=\"message?.content | chatContent:'image_url'\">\n <img [src]=\"message?.content | chatContent:'image_url'\" alt=\"\">\n </div>\n <!-- \u804A\u5929\u6C14\u6CE1 -->\n <div class=\"item-row bubble\">\n <fm-markdown-preview *ngIf=\"!message?.complete\" class=\"content-style\" [content]=\"message?.content | chatContent\" [render]=\"false\"></fm-markdown-preview>\n <fm-markdown-preview *ngIf=\"message?.complete\" [content]=\"message?.content | chatContent\"></fm-markdown-preview>\n </div>\n <!-- \u65F6\u95F4\u663E\u793A -->\n <div class=\"item-row loading\" *ngIf=\"message?.role!='system' && !message?.complete\">\n \u6B63\u5728\u8F93\u5165<ion-spinner name=\"dots\"></ion-spinner>\n </div>\n\n <div class=\"item-row created\" *ngIf=\"message?.createdAt\">\n <span>{{message?.createdAt | date:\"dd/MM/yy HH:mm\"}}</span>\n </div>\n</div>", styles: ["@charset \"UTF-8\";:host-context(body.dark) .message-card .actions .item-native{background:none!important}:host-context(body.dark) .message-card .bubble{color:#0e101d}:host-context(body.dark) .message-card .bubble .content-style{filter:invert(1)!important}:host-context(body.dark) .message-card .bubble fm-markdown-preview{filter:invert(1)!important}:host-context(body.dark) .message-card .play-voice{background-color:#0e101d}:host-context(body.dark) .message-card .play-voice .voice-info{color:#fff}:host-context(body.dark) .message-card .right .bubble{color:#921f8a!important;background:#921f8a!important}:host-context(body.dark) .message-card .right .play-voice{background:#921f8a!important}:host-context(body.dark) .message-card .created span{color:#fff}@media screen and (max-width: 800px){.message-card:focus .actions{opacity:1!important}}.message-card:hover .actions{opacity:1;transition:opacity .3s ease-in-out}.message-card{display:flex;flex-wrap:wrap;justify-content:start;align-items:flex-start}.message-card .avatar-row{width:300px;height:32px;display:flex;flex-direction:row-reverse;justify-content:start;align-items:center}.message-card .actions{display:flex;opacity:0;padding-left:10px;padding-right:10px}.message-card .item-row{display:flex;flex:100%;justify-content:start;margin-bottom:5px}.message-card .images img{max-width:300px}.message-card .bubble{display:flex;justify-content:center;max-width:100%;padding-top:1rem;padding:.5rem;color:#333;flex:none;border-radius:0 1.5em 1.5em/0em 1.5em 1.5em;color:#fff;background-color:currentColor}.message-card .bubble .content-style{filter:grayscale(1) contrast(999) invert(1)}.message-card .loading{text-align:right;color:#101010}.message-card .created{display:flex}.message-card .created span{font-size:12px;opacity:.4;white-space:nowrap;transition:all .6s ease;color:var(--black);text-align:center;width:100%;box-sizing:border-box;padding-right:10px;pointer-events:none;z-index:1}.right{justify-content:end;align-items:flex-end}.right .avatar-row{flex-direction:row;justify-content:end;width:auto}.right .actions{position:relative;margin-left:0}.right .item-row{justify-content:end}.right .bubble{color:#bbdefb;border-top-left-radius:1.5em;border-top-right-radius:0}.right .play-voice{flex-direction:row-reverse;background-color:#bbdefb}.center{justify-content:center;align-items:center}.center .item-row{justify-content:center}.center .bubble{color:var(--gray-secondary);border-top-left-radius:1.5em;border-top-right-radius:1.5em;font-size:12px;font-weight:100;padding:5px 20px}.play-voice{min-width:100px;height:32px;display:flex;justify-content:space-around;align-items:center;background-color:#fff;border-radius:7px}.play-voice .voice-button{width:32px;height:32px;display:flex;justify-content:center;align-items:center}.play-voice .voice-button span{overflow:hidden;font-size:18px;color:#ff69b4}.play-voice .voice-info{height:32px;display:flex;padding:0 10px;justify-content:end;align-items:center;color:#333}.play-voice-playing{animation:play-voice-animation 1s infinite}@keyframes play-voice-animation{0%{width:0}to{width:32px}}\n"] }]
85
- }], ctorParameters: () => [{ type: i1.ClipboardService }], propDecorators: { message: [{
86
- type: Input
87
- }], role: [{
88
- type: Input
89
- }], chat: [{
90
- type: Input
91
- }] } });
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcC1tZXNzYWdlLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL2NoYXQvY2hhdC1tZXNzYWdlLWNhcmQvY29tcC1tZXNzYWdlLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL2NoYXQvY2hhdC1tZXNzYWdlLWNhcmQvY29tcC1tZXNzYWdlLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQW9CLHFCQUFxQixHQUFLLE1BQU0saUNBQWlDLENBQUM7QUFFekgsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxZQUFZLEVBQWUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNqRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUM1RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7O0FBZWxELE1BQU0sT0FBTyxpQkFBaUI7SUFLNUIsWUFDVSxRQUF5QjtRQUF6QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUluQyxtQkFBYyxHQUFXLEtBQUssQ0FBQztRQUYzQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVILEtBQUssQ0FBQyxTQUFTO1FBQ2IsSUFBSSxVQUFVLEdBQVcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksS0FBa0IsQ0FBQTtRQUN0QixJQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBQyxDQUFDO1lBQzFCLElBQUksS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN6QyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNCLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELHNCQUFzQjtRQUN0QixJQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBQyxDQUFDLENBQUMsNkJBQTZCO1lBQzNDLElBQUksSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3hFLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7WUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsRUFBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLEVBQUUsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBQyxDQUFBO1lBQ25FLFVBQVUsR0FBRyxJQUFJLENBQUE7UUFDbkIsQ0FBQztRQUNELElBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNyRCxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxJQUFHLFVBQVUsRUFBQyxDQUFDO1lBQ2IsSUFBSSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLFNBQVM7UUFDekMsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBQztZQUM1QixPQUFPLEVBQUMsQ0FBQyxXQUF3QixFQUFDLEVBQUU7Z0JBQ2xDLElBQUcsS0FBSyxFQUFFLEVBQUUsSUFBSSxXQUFXLEVBQUUsRUFBRSxFQUFDLENBQUM7b0JBQy9CLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO2dCQUM5QixDQUFDO1lBQ0gsQ0FBQztZQUNELFFBQVEsRUFBQyxDQUFDLEtBQXNCLEVBQUMsRUFBRTtnQkFFakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEdBQUMsSUFBSSxDQUFBO2dCQUNqRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBQyxJQUFJLENBQUMsQ0FBQTtZQUMvQyxDQUFDO1lBQ0QsTUFBTSxFQUFDLENBQUMsV0FBd0IsRUFBQyxFQUFFO2dCQUNqQyxJQUFHLEtBQUssRUFBRSxFQUFFLElBQUksV0FBVyxFQUFFLEVBQUUsRUFBQyxDQUFDO29CQUMvQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztnQkFDOUIsQ0FBQztZQUNILENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0QsbUJBQW1CLENBQUMsUUFBZTtRQUNqQyxJQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUN2QyxJQUFJLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUMsU0FBUztRQUN6QyxDQUFDO0lBQ0gsQ0FBQztJQUNELEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBQzdFLENBQUM7K0dBNURVLGlCQUFpQjttR0FBakIsaUJBQWlCLDRJQzFCOUIsZ3dHQXNETSx3bEdEbkNGLFlBQVksOE9BQ1osdUJBQXVCLGtGQUFDLHFCQUFxQix3SkFDN0MsY0FBYyxnUEFBVyxZQUFZLDZNQUNyQyxlQUFlOzs0RkFJTixpQkFBaUI7a0JBYjdCLFNBQVM7K0JBQ0Usc0JBQXNCLGNBR3JCLElBQUksV0FDUDt3QkFDTixZQUFZLEVBQUMsT0FBTzt3QkFDcEIsdUJBQXVCLEVBQUMscUJBQXFCO3dCQUM3QyxjQUFjLEVBQUMsU0FBUyxFQUFDLFlBQVk7d0JBQ3JDLGVBQWU7d0JBQ2YsZUFBZTtxQkFDaEI7cUZBR1EsT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGF0Q29udGVudFBpcGUsIEZtb2RlQ2hhdCwgRm1vZGVDaGF0TWVzc2FnZSwgZ2V0TWVzc2FnZUNvbnRlbnRUZXh0LCAgIH0gZnJvbSAnLi4vLi4vc2VydmljZS1mbWFpL3NlcnZpY2UtY2hhdCc7XG5cbmltcG9ydCBQYXJzZSBmcm9tIFwicGFyc2VcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW9uQXZhdGFyLCBJb25JdGVtIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBDb21wVXNlckF2YXRhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3VzZXIvY29tcC11c2VyLWF2YXRhci9jb21wLXVzZXItYXZhdGFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOekF2YXRhck1vZHVsZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvYXZhdGFyJztcbmltcG9ydCB7IENsaXBib2FyZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wLW1hcmtkb3duLXByZXZpZXcvY2xpcGJvYXJkLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFya2Rvd25QcmV2aWV3TW9kdWxlIH0gZnJvbSAnLi4vLi4vY29tcC1tYXJrZG93bi1wcmV2aWV3L21hcmtkb3duLXByZXZpZXcubW9kdWxlJztcbmltcG9ydCB7IE56U2FuaXRpemVyUGlwZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvcGlwZXMnO1xuaW1wb3J0IHsgTnpJY29uTW9kdWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9pY29uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZm0tY2hhdC1tZXNzYWdlLWNhcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29tcC1tZXNzYWdlLWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb21wLW1lc3NhZ2UtY2FyZC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOnRydWUsXG4gIGltcG9ydHM6W1xuICAgIENvbW1vbk1vZHVsZSxJb25JdGVtLFxuICAgIENvbXBVc2VyQXZhdGFyQ29tcG9uZW50LE1hcmtkb3duUHJldmlld01vZHVsZSxcbiAgICBOekF2YXRhck1vZHVsZSxJb25BdmF0YXIsTnpJY29uTW9kdWxlLFxuICAgIENoYXRDb250ZW50UGlwZSxcbiAgICBOelNhbml0aXplclBpcGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBGbUNoYXRNZXNzYWdlQ2FyZCB7XG4gIEBJbnB1dCgpIG1lc3NhZ2U6Rm1vZGVDaGF0TWVzc2FnZVxuICBASW5wdXQoKSByb2xlOlBhcnNlLk9iamVjdFxuICBASW5wdXQoKSBjaGF0OkZtb2RlQ2hhdFxuICB1c2VyOlBhcnNlLlVzZXJcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb3B5U2VydjpDbGlwYm9hcmRTZXJ2aWNlXG4gICAgKXtcbiAgICAgIHRoaXMudXNlciA9IFBhcnNlLlVzZXIuY3VycmVudCgpO1xuICAgIH1cbiAgaXNWb2ljZVBsYXlpbmc6Ym9vbGVhbiA9IGZhbHNlO1xuICBhc3luYyBwbGF5Vm9pY2UoKXtcbiAgICBsZXQgbmVlZFVwZGF0ZTpib29sZWFuID0gZmFsc2U7XG4gICAgdGhpcy5pc1ZvaWNlUGxheWluZyA9IHRydWU7XG4gICAgbGV0IHZvaWNlOlBhcnNlLk9iamVjdFxuICAgIGlmKHRoaXMubWVzc2FnZT8udm9pY2U/LmlkKXtcbiAgICAgIGxldCBxdWVyeSA9IG5ldyBQYXJzZS5RdWVyeShcIkNoYXRWb2ljZVwiKTtcbiAgICAgIHF1ZXJ5LmluY2x1ZGUoXCJ2b2ljZUZpbGVcIik7XG4gICAgICB2b2ljZSA9IGF3YWl0IHF1ZXJ5LmdldCh0aGlzLm1lc3NhZ2U/LnZvaWNlPy5pZCk7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHZvaWNlKTtcbiAgICBpZighdm9pY2U/LmlkKXsgLy8g5peg5aOw6Z+z5paH5Lu277yM5YiZ5Yib5bu6Q2hhdFZvaWNl6Z+z6aKR5ZCI5oiQ5pWw5o2u5a+56LGhXG4gICAgICBsZXQgaXRlbSA9IGF3YWl0IHRoaXMuY2hhdC5nZXRWb2ljZUJ5Q29udGVudFRleHQodGhpcy5tZXNzYWdlPy5jb250ZW50KTtcbiAgICAgIHZvaWNlID0gdGhpcy5jaGF0LnZvaWNlTWFwW2l0ZW0/LmlkXVxuICAgICAgdGhpcy5tZXNzYWdlLnZvaWNlID0ge2lkOnZvaWNlPy5pZCxkdXJhdGlvbjp2b2ljZT8uZ2V0KFwiZHVyYXRpb25cIil9XG4gICAgICBuZWVkVXBkYXRlID0gdHJ1ZVxuICAgIH1cbiAgICBpZighdGhpcy5tZXNzYWdlPy52b2ljZT8uZHVyYXRpb24pe1xuICAgICAgdGhpcy5tZXNzYWdlLnZvaWNlLmR1cmF0aW9uID0gdm9pY2U/LmdldChcImR1cmF0aW9uXCIpO1xuICAgICAgbmVlZFVwZGF0ZSA9IHRydWU7XG4gICAgfVxuICAgIGlmKG5lZWRVcGRhdGUpe1xuICAgICAgdGhpcy5jaGF0Py5zYXZlQ2hhdFNlc3Npb24oKTsgLy8g5L+d5a2Y5raI5oGv6K+t6Z+zXG4gICAgfVxuICAgIHRoaXMuY2hhdC5wbGF5Q2hhdFZvaWNlKHZvaWNlLHtcbiAgICAgIG9uU3RhcnQ6KHBsYXllZFZvaWNlOlBhcnNlLk9iamVjdCk9PntcbiAgICAgICAgaWYodm9pY2U/LmlkICE9IHBsYXllZFZvaWNlPy5pZCl7XG4gICAgICAgICAgdGhpcy5pc1ZvaWNlUGxheWluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25Mb2FkZWQ6KGF1ZGlvOkhUTUxBdWRpb0VsZW1lbnQpPT57XG4gICAgICAgIFxuICAgICAgICB0aGlzLm1lc3NhZ2Uudm9pY2UuZHVyYXRpb24gPSBhdWRpby5kdXJhdGlvbioxMDAwXG4gICAgICAgIHRoaXMudXBkYXRlVm9pY2VEdXJhdGlvbihhdWRpby5kdXJhdGlvbioxMDAwKVxuICAgICAgfSxcbiAgICAgIG9uU3RvcDoocGxheWVkVm9pY2U6UGFyc2UuT2JqZWN0KT0+e1xuICAgICAgICBpZih2b2ljZT8uaWQgIT0gcGxheWVkVm9pY2U/LmlkKXtcbiAgICAgICAgICB0aGlzLmlzVm9pY2VQbGF5aW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIHVwZGF0ZVZvaWNlRHVyYXRpb24oZHVyYXRpb246bnVtYmVyKXtcbiAgICBpZighdGhpcy5tZXNzYWdlPy52b2ljZT8uZHVyYXRpb24pe1xuICAgICAgdGhpcy5tZXNzYWdlLnZvaWNlLmR1cmF0aW9uID0gZHVyYXRpb247XG4gICAgICB0aGlzLmNoYXQ/LnNhdmVDaGF0U2Vzc2lvbigpOyAvLyDkv53lrZjmtojmga/or63pn7NcbiAgICB9XG4gIH1cbiAgYXN5bmMgY29weSgpe1xuICAgIHRoaXMuY29weVNlcnYuY29weVRvQ2xpcGJvYXJkKGdldE1lc3NhZ2VDb250ZW50VGV4dCh0aGlzLm1lc3NhZ2U/LmNvbnRlbnQpKVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWVzc2FnZS1jYXJkXCIgW2NsYXNzLnJpZ2h0XT1cIm1lc3NhZ2U/LnJvbGU9PSd1c2VyJ1wiIFtjbGFzcy5jZW50ZXJdPVwibWVzc2FnZT8ucm9sZT09J3N5c3RlbSdcIj5cbiAgICA8IS0tIOeUqOaIt+WPiuaTjeS9nOWMuiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiaXRlbS1yb3cgdXNlclwiICpuZ0lmPVwibWVzc2FnZT8ucm9sZSE9J3N5c3RlbSdcIj4gPCEtLSDns7vnu5/mtojmga/kuI3mmL7npLrlpLTlg48gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItcm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDwhLS0g5Yi35pawIC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIiBzbG90PVwic3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJyZWZyZXNoLW91dGxpbmVcIj48L2lvbi1pY29uPiBcbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+IC0tPlxuICAgICAgICAgICAgICAgIDwhLS0g5aSN5Yi2IC0tPlxuICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uIHNpemU9XCJzbWFsbFwiIGZpbGw9XCJvdXRsaW5lXCIgc2xvdD1cInN0YXJ0XCIgKGNsaWNrKT1cImNvcHkoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNvcHktb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwhLS0g57yW6L6RIC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIiBzbG90PVwic3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjcmVhdGUtb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPiAtLT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSDpn7PpopHmtojmga/ljLrln58gLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibWVzc2FnZT8ucm9sZT09J2Fzc2lzdGFudCd8fChtZXNzYWdlPy5yb2xlPT0ndXNlcicmJm1lc3NhZ2U/LnZvaWNlKVwiIGNsYXNzPVwicGxheS12b2ljZVwiIChjbGljayk9XCJwbGF5Vm9pY2UoKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2b2ljZS1idXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gbnotaWNvbiBbbnpSb3RhdGVdPVwibWVzc2FnZT8ucm9sZT09J3VzZXInPy05MDo5MFwiIG56VHlwZT1cIndpZmlcIiBuelRoZW1lPVwib3V0bGluZVwiIFtjbGFzcy5wbGF5LXZvaWNlLXBsYXlpbmddPVwiaXNWb2ljZVBsYXlpbmdcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZvaWNlLWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJtZXNzYWdlPy52b2ljZT8uZHVyYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7KChtZXNzYWdlPy52b2ljZT8uZHVyYXRpb258fDApLzEwMDApfG51bWJlcjonMS4wLTAnfX1cIlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIW1lc3NhZ2U/LnZvaWNlPy5kdXJhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAgLS0+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSDlpLTlg4/ljLrln58gLS0+XG4gICAgICAgICAgICA8bnotYXZhdGFyICpuZ0lmPVwibWVzc2FnZT8ucm9sZSE9J3VzZXInXCIgW256U3JjXT1cIihjaGF0Py5yb2xlPy5nZXQoJ2F2YXRhcicpIHx8IGNoYXQ/LnJvbGU/LmdldCgndGh1bWInKSB8fCAnaHR0cHM6Ly9maWxlLWNsb3VkLmZtb2RlLmNuL0U0S3BHdlRFdG8vMjAyMzA5MzAvbDQxM2U2MDkwNzMxODU0LnBuZycpKyc/JysneC1pbWFnZS1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxtX2ZpeGVkLHdfMTAwJysnJmltYWdlVmlldzIvMS93LzMyL2gvMzInXCIgPjwvbnotYXZhdGFyPlxuICAgICAgICAgICAgPGFwcC1jb21wLXVzZXItYXZhdGFyIFt1c2VyXT1cInVzZXJcIiAqbmdJZj1cIm1lc3NhZ2U/LnJvbGU9PSd1c2VyJ1wiPjwvYXBwLWNvbXAtdXNlci1hdmF0YXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgICA8IS0tIOmZhOS7tu+8muWbvueJhyAtLT5cbiAgICAgPGRpdiBjbGFzcz1cIml0ZW0tcm93IGltYWdlc1wiICpuZ0lmPVwibWVzc2FnZT8uY29udGVudCB8IGNoYXRDb250ZW50OidpbWFnZV91cmwnXCI+XG4gICAgICAgIDxpbWcgW3NyY109XCJtZXNzYWdlPy5jb250ZW50IHwgY2hhdENvbnRlbnQ6J2ltYWdlX3VybCdcIiBhbHQ9XCJcIj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIOiBiuWkqeawlOazoSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiaXRlbS1yb3cgYnViYmxlXCI+XG4gICAgICAgIDxmbS1tYXJrZG93bi1wcmV2aWV3ICpuZ0lmPVwiIW1lc3NhZ2U/LmNvbXBsZXRlXCIgY2xhc3M9XCJjb250ZW50LXN0eWxlXCIgW2NvbnRlbnRdPVwibWVzc2FnZT8uY29udGVudCB8IGNoYXRDb250ZW50XCIgW3JlbmRlcl09XCJmYWxzZVwiPjwvZm0tbWFya2Rvd24tcHJldmlldz5cbiAgICAgICAgPGZtLW1hcmtkb3duLXByZXZpZXcgKm5nSWY9XCJtZXNzYWdlPy5jb21wbGV0ZVwiIFtjb250ZW50XT1cIm1lc3NhZ2U/LmNvbnRlbnQgfCBjaGF0Q29udGVudFwiPjwvZm0tbWFya2Rvd24tcHJldmlldz5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIOaXtumXtOaYvuekuiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiaXRlbS1yb3cgbG9hZGluZ1wiICpuZ0lmPVwibWVzc2FnZT8ucm9sZSE9J3N5c3RlbScgJiYgIW1lc3NhZ2U/LmNvbXBsZXRlXCI+XG4gICAgICAgIOato+WcqOi+k+WFpTxpb24tc3Bpbm5lciBuYW1lPVwiZG90c1wiPjwvaW9uLXNwaW5uZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaXRlbS1yb3cgY3JlYXRlZFwiICpuZ0lmPVwibWVzc2FnZT8uY3JlYXRlZEF0XCI+XG4gICAgICAgIDxzcGFuPnt7bWVzc2FnZT8uY3JlYXRlZEF0IHwgZGF0ZTpcImRkL01NL3l5IEhIOm1tXCJ9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
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-message-card/comp-message-card.component.mjs
7
+ */
8
+ import{Component,Input}from"@angular/core";import{ChatContentPipe,FmodeChat,getMessageContentText}from"../../service-fmai/service-chat";import Parse from"parse";import{CommonModule}from"@angular/common";import{IonAvatar,IonItem}from"@ionic/angular/standalone";import{CompUserAvatarComponent}from"../../../user/comp-user-avatar/comp-user-avatar.component";import{NzAvatarModule}from"ng-zorro-antd/avatar";import{ClipboardService}from"../../comp-markdown-preview/clipboard.service";import{MarkdownPreviewModule}from"../../comp-markdown-preview/markdown-preview.module";import{NzSanitizerPipe}from"ng-zorro-antd/pipes";import{NzIconModule}from"ng-zorro-antd/icon";import*as i0 from"@angular/core";import*as i1 from"../../comp-markdown-preview/clipboard.service";import*as i2 from"@angular/common";import*as i3 from"../../comp-markdown-preview/markdown-preview.component";import*as i4 from"ng-zorro-antd/avatar";import*as i5 from"ng-zorro-antd/icon";export class FmChatMessageCard{constructor(e){this.copyServ=e,this.isVoicePlaying=!1,this.user=Parse.User.current()}async playVoice(){let e,t=!1;if(this.isVoicePlaying=!0,this.message?.voice?.id){let t=new Parse.Query("ChatVoice");t.include("voiceFile"),e=await t.get(this.message?.voice?.id)}if(!e?.id){let n=await this.chat.getVoiceByContentText(this.message?.content);e=this.chat.voiceMap[n?.id],this.message.voice={id:e?.id,duration:e?.get("duration")},t=!0}this.message?.voice?.duration||(this.message.voice.duration=e?.get("duration"),t=!0),t&&this.chat?.saveChatSession(),this.chat.playChatVoice(e,{onStart:t=>{e?.id!=t?.id&&(this.isVoicePlaying=!1)},onLoaded:e=>{this.message.voice.duration=1e3*e.duration,this.updateVoiceDuration(1e3*e.duration)},onStop:t=>{e?.id!=t?.id&&(this.isVoicePlaying=!1)}})}updateVoiceDuration(e){this.message?.voice?.duration||(this.message.voice.duration=e,this.chat?.saveChatSession())}async copy(){this.copyServ.copyToClipboard(getMessageContentText(this.message?.content))}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:FmChatMessageCard,deps:[{token:i1.ClipboardService}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:FmChatMessageCard,isStandalone:!0,selector:"fm-chat-message-card",inputs:{message:"message",role:"role",chat:"chat"},ngImport:i0,template:'<div class="message-card" [class.right]="message?.role==\'user\'" [class.center]="message?.role==\'system\'">\n \x3c!-- 用户及操作区 --\x3e\n <div class="item-row user" *ngIf="message?.role!=\'system\'"> \x3c!-- 系统消息不显示头像 --\x3e\n <div class="avatar-row">\n <div class="actions">\n \x3c!-- 刷新 --\x3e\n \x3c!-- <ion-button fill="outline" slot="start">\n <ion-icon name="refresh-outline"></ion-icon> \n </ion-button> --\x3e\n \x3c!-- 复制 --\x3e\n <ion-button size="small" fill="outline" slot="start" (click)="copy()">\n <ion-icon name="copy-outline"></ion-icon>\n </ion-button>\n \x3c!-- 编辑 --\x3e\n \x3c!-- <ion-button fill="outline" slot="start">\n <ion-icon name="create-outline"></ion-icon>\n </ion-button> --\x3e\n </div>\n \x3c!-- 音频消息区域 --\x3e\n <div *ngIf="message?.role==\'assistant\'||(message?.role==\'user\'&&message?.voice)" class="play-voice" (click)="playVoice()">\n <div class="voice-button">\n <span nz-icon [nzRotate]="message?.role==\'user\'?-90:90" nzType="wifi" nzTheme="outline" [class.play-voice-playing]="isVoicePlaying"></span>\n </div>\n <div class="voice-info">\n <span *ngIf="message?.voice?.duration">\n {{((message?.voice?.duration||0)/1000)|number:\'1.0-0\'}}"\n </span>\n <span *ngIf="!message?.voice?.duration">\n \x3c!-- --\x3e\n </span>\n </div>\n </div>\n \x3c!-- 头像区域 --\x3e\n <nz-avatar *ngIf="message?.role!=\'user\'" [nzSrc]="(chat?.role?.get(\'avatar\') || chat?.role?.get(\'thumb\') || \'https://file-cloud.fmode.cn/E4KpGvTEto/20230930/l413e6090731854.png\')+\'?\'+\'x-image-process=image/resize,m_fixed,w_100\'+\'&imageView2/1/w/32/h/32\'" ></nz-avatar>\n <app-comp-user-avatar [user]="user" *ngIf="message?.role==\'user\'"></app-comp-user-avatar>\n </div>\n </div>\n \x3c!-- 附件:图片 --\x3e\n <div class="item-row images" *ngIf="message?.content | chatContent:\'image_url\'">\n <img [src]="message?.content | chatContent:\'image_url\'" alt="">\n </div>\n \x3c!-- 聊天气泡 --\x3e\n <div class="item-row bubble">\n <fm-markdown-preview *ngIf="!message?.complete" class="content-style" [content]="message?.content | chatContent" [render]="false"></fm-markdown-preview>\n <fm-markdown-preview *ngIf="message?.complete" [content]="message?.content | chatContent"></fm-markdown-preview>\n </div>\n \x3c!-- 时间显示 --\x3e\n <div class="item-row loading" *ngIf="message?.role!=\'system\' && !message?.complete">\n 正在输入<ion-spinner name="dots"></ion-spinner>\n </div>\n\n <div class="item-row created" *ngIf="message?.createdAt">\n <span>{{message?.createdAt | date:"dd/MM/yy HH:mm"}}</span>\n </div>\n</div>',styles:['@charset "UTF-8";:host-context(body.dark) .message-card .actions .item-native{background:none!important}:host-context(body.dark) .message-card .bubble{color:#0e101d}:host-context(body.dark) .message-card .bubble .content-style{filter:invert(1)!important}:host-context(body.dark) .message-card .bubble fm-markdown-preview{filter:invert(1)!important}:host-context(body.dark) .message-card .play-voice{background-color:#0e101d}:host-context(body.dark) .message-card .play-voice .voice-info{color:#fff}:host-context(body.dark) .message-card .right .bubble{color:#921f8a!important;background:#921f8a!important}:host-context(body.dark) .message-card .right .play-voice{background:#921f8a!important}:host-context(body.dark) .message-card .created span{color:#fff}@media screen and (max-width: 800px){.message-card:focus .actions{opacity:1!important}}.message-card:hover .actions{opacity:1;transition:opacity .3s ease-in-out}.message-card{display:flex;flex-wrap:wrap;justify-content:start;align-items:flex-start}.message-card .avatar-row{width:300px;height:32px;display:flex;flex-direction:row-reverse;justify-content:start;align-items:center}.message-card .actions{display:flex;opacity:0;padding-left:10px;padding-right:10px}.message-card .item-row{display:flex;flex:100%;justify-content:start;margin-bottom:5px}.message-card .images img{max-width:300px}.message-card .bubble{display:flex;justify-content:center;max-width:100%;padding-top:1rem;padding:.5rem;color:#333;flex:none;border-radius:0 1.5em 1.5em/0em 1.5em 1.5em;color:#fff;background-color:currentColor}.message-card .bubble .content-style{filter:grayscale(1) contrast(999) invert(1)}.message-card .loading{text-align:right;color:#101010}.message-card .created{display:flex}.message-card .created span{font-size:12px;opacity:.4;white-space:nowrap;transition:all .6s ease;color:var(--black);text-align:center;width:100%;box-sizing:border-box;padding-right:10px;pointer-events:none;z-index:1}.right{justify-content:end;align-items:flex-end}.right .avatar-row{flex-direction:row;justify-content:end;width:auto}.right .actions{position:relative;margin-left:0}.right .item-row{justify-content:end}.right .bubble{color:#bbdefb;border-top-left-radius:1.5em;border-top-right-radius:0}.right .play-voice{flex-direction:row-reverse;background-color:#bbdefb}.center{justify-content:center;align-items:center}.center .item-row{justify-content:center}.center .bubble{color:var(--gray-secondary);border-top-left-radius:1.5em;border-top-right-radius:1.5em;font-size:12px;font-weight:100;padding:5px 20px}.play-voice{min-width:100px;height:32px;display:flex;justify-content:space-around;align-items:center;background-color:#fff;border-radius:7px}.play-voice .voice-button{width:32px;height:32px;display:flex;justify-content:center;align-items:center}.play-voice .voice-button span{overflow:hidden;font-size:18px;color:#ff69b4}.play-voice .voice-info{height:32px;display:flex;padding:0 10px;justify-content:end;align-items:center;color:#333}.play-voice-playing{animation:play-voice-animation 1s infinite}@keyframes play-voice-animation{0%{width:0}to{width:32px}}\n'],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"directive",type:i2.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"pipe",type:i2.DecimalPipe,name:"number"},{kind:"pipe",type:i2.DatePipe,name:"date"},{kind:"component",type:CompUserAvatarComponent,selector:"app-comp-user-avatar",inputs:["user"]},{kind:"ngmodule",type:MarkdownPreviewModule},{kind:"component",type:i3.MarkdownPreviewComponent,selector:"fm-markdown-preview",inputs:["content","render"]},{kind:"ngmodule",type:NzAvatarModule},{kind:"component",type:i4.NzAvatarComponent,selector:"nz-avatar",inputs:["nzShape","nzSize","nzGap","nzText","nzSrc","nzSrcSet","nzAlt","nzIcon"],outputs:["nzError"],exportAs:["nzAvatar"]},{kind:"ngmodule",type:NzIconModule},{kind:"directive",type:i5.NzIconDirective,selector:"[nz-icon]",inputs:["nzSpin","nzRotate","nzType","nzTheme","nzTwotoneColor","nzIconfont"],exportAs:["nzIcon"]},{kind:"pipe",type:ChatContentPipe,name:"chatContent"}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:FmChatMessageCard,decorators:[{type:Component,args:[{selector:"fm-chat-message-card",standalone:!0,imports:[CommonModule,IonItem,CompUserAvatarComponent,MarkdownPreviewModule,NzAvatarModule,IonAvatar,NzIconModule,ChatContentPipe,NzSanitizerPipe],template:'<div class="message-card" [class.right]="message?.role==\'user\'" [class.center]="message?.role==\'system\'">\n \x3c!-- 用户及操作区 --\x3e\n <div class="item-row user" *ngIf="message?.role!=\'system\'"> \x3c!-- 系统消息不显示头像 --\x3e\n <div class="avatar-row">\n <div class="actions">\n \x3c!-- 刷新 --\x3e\n \x3c!-- <ion-button fill="outline" slot="start">\n <ion-icon name="refresh-outline"></ion-icon> \n </ion-button> --\x3e\n \x3c!-- 复制 --\x3e\n <ion-button size="small" fill="outline" slot="start" (click)="copy()">\n <ion-icon name="copy-outline"></ion-icon>\n </ion-button>\n \x3c!-- 编辑 --\x3e\n \x3c!-- <ion-button fill="outline" slot="start">\n <ion-icon name="create-outline"></ion-icon>\n </ion-button> --\x3e\n </div>\n \x3c!-- 音频消息区域 --\x3e\n <div *ngIf="message?.role==\'assistant\'||(message?.role==\'user\'&&message?.voice)" class="play-voice" (click)="playVoice()">\n <div class="voice-button">\n <span nz-icon [nzRotate]="message?.role==\'user\'?-90:90" nzType="wifi" nzTheme="outline" [class.play-voice-playing]="isVoicePlaying"></span>\n </div>\n <div class="voice-info">\n <span *ngIf="message?.voice?.duration">\n {{((message?.voice?.duration||0)/1000)|number:\'1.0-0\'}}"\n </span>\n <span *ngIf="!message?.voice?.duration">\n \x3c!-- --\x3e\n </span>\n </div>\n </div>\n \x3c!-- 头像区域 --\x3e\n <nz-avatar *ngIf="message?.role!=\'user\'" [nzSrc]="(chat?.role?.get(\'avatar\') || chat?.role?.get(\'thumb\') || \'https://file-cloud.fmode.cn/E4KpGvTEto/20230930/l413e6090731854.png\')+\'?\'+\'x-image-process=image/resize,m_fixed,w_100\'+\'&imageView2/1/w/32/h/32\'" ></nz-avatar>\n <app-comp-user-avatar [user]="user" *ngIf="message?.role==\'user\'"></app-comp-user-avatar>\n </div>\n </div>\n \x3c!-- 附件:图片 --\x3e\n <div class="item-row images" *ngIf="message?.content | chatContent:\'image_url\'">\n <img [src]="message?.content | chatContent:\'image_url\'" alt="">\n </div>\n \x3c!-- 聊天气泡 --\x3e\n <div class="item-row bubble">\n <fm-markdown-preview *ngIf="!message?.complete" class="content-style" [content]="message?.content | chatContent" [render]="false"></fm-markdown-preview>\n <fm-markdown-preview *ngIf="message?.complete" [content]="message?.content | chatContent"></fm-markdown-preview>\n </div>\n \x3c!-- 时间显示 --\x3e\n <div class="item-row loading" *ngIf="message?.role!=\'system\' && !message?.complete">\n 正在输入<ion-spinner name="dots"></ion-spinner>\n </div>\n\n <div class="item-row created" *ngIf="message?.createdAt">\n <span>{{message?.createdAt | date:"dd/MM/yy HH:mm"}}</span>\n </div>\n</div>',styles:['@charset "UTF-8";:host-context(body.dark) .message-card .actions .item-native{background:none!important}:host-context(body.dark) .message-card .bubble{color:#0e101d}:host-context(body.dark) .message-card .bubble .content-style{filter:invert(1)!important}:host-context(body.dark) .message-card .bubble fm-markdown-preview{filter:invert(1)!important}:host-context(body.dark) .message-card .play-voice{background-color:#0e101d}:host-context(body.dark) .message-card .play-voice .voice-info{color:#fff}:host-context(body.dark) .message-card .right .bubble{color:#921f8a!important;background:#921f8a!important}:host-context(body.dark) .message-card .right .play-voice{background:#921f8a!important}:host-context(body.dark) .message-card .created span{color:#fff}@media screen and (max-width: 800px){.message-card:focus .actions{opacity:1!important}}.message-card:hover .actions{opacity:1;transition:opacity .3s ease-in-out}.message-card{display:flex;flex-wrap:wrap;justify-content:start;align-items:flex-start}.message-card .avatar-row{width:300px;height:32px;display:flex;flex-direction:row-reverse;justify-content:start;align-items:center}.message-card .actions{display:flex;opacity:0;padding-left:10px;padding-right:10px}.message-card .item-row{display:flex;flex:100%;justify-content:start;margin-bottom:5px}.message-card .images img{max-width:300px}.message-card .bubble{display:flex;justify-content:center;max-width:100%;padding-top:1rem;padding:.5rem;color:#333;flex:none;border-radius:0 1.5em 1.5em/0em 1.5em 1.5em;color:#fff;background-color:currentColor}.message-card .bubble .content-style{filter:grayscale(1) contrast(999) invert(1)}.message-card .loading{text-align:right;color:#101010}.message-card .created{display:flex}.message-card .created span{font-size:12px;opacity:.4;white-space:nowrap;transition:all .6s ease;color:var(--black);text-align:center;width:100%;box-sizing:border-box;padding-right:10px;pointer-events:none;z-index:1}.right{justify-content:end;align-items:flex-end}.right .avatar-row{flex-direction:row;justify-content:end;width:auto}.right .actions{position:relative;margin-left:0}.right .item-row{justify-content:end}.right .bubble{color:#bbdefb;border-top-left-radius:1.5em;border-top-right-radius:0}.right .play-voice{flex-direction:row-reverse;background-color:#bbdefb}.center{justify-content:center;align-items:center}.center .item-row{justify-content:center}.center .bubble{color:var(--gray-secondary);border-top-left-radius:1.5em;border-top-right-radius:1.5em;font-size:12px;font-weight:100;padding:5px 20px}.play-voice{min-width:100px;height:32px;display:flex;justify-content:space-around;align-items:center;background-color:#fff;border-radius:7px}.play-voice .voice-button{width:32px;height:32px;display:flex;justify-content:center;align-items:center}.play-voice .voice-button span{overflow:hidden;font-size:18px;color:#ff69b4}.play-voice .voice-info{height:32px;display:flex;padding:0 10px;justify-content:end;align-items:center;color:#333}.play-voice-playing{animation:play-voice-animation 1s infinite}@keyframes play-voice-animation{0%{width:0}to{width:32px}}\n']}]}],ctorParameters:()=>[{type:i1.ClipboardService}],propDecorators:{message:[{type:Input}],role:[{type:Input}],chat:[{type:Input}]}});
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2NoYXQvY2hhdC1tZXNzYWdlLWNhcmQvY29tcC1tZXNzYWdlLWNhcmQuY29tcG9uZW50Lm1qcw==`
10
+
@@ -1,2 +1,10 @@
1
- export * from "./comp-message-card.component";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvY2hhdC9jaGF0LW1lc3NhZ2UtY2FyZC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLCtCQUErQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vY29tcC1tZXNzYWdlLWNhcmQuY29tcG9uZW50XCIiXX0=
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-message-card/index.mjs
7
+ */
8
+ export*from"./comp-message-card.component";
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2NoYXQvY2hhdC1tZXNzYWdlLWNhcmQvaW5kZXgubWpz`
10
+
@@ -1,2 +1,10 @@
1
- export * from "./modal-input.component";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvY2hhdC9jaGF0LW1vZGFsLWlucHV0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMseUJBQXlCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9tb2RhbC1pbnB1dC5jb21wb25lbnRcIiJdfQ==
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-modal-input/index.mjs
7
+ */
8
+ export*from"./modal-input.component";
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2NoYXQvY2hhdC1tb2RhbC1pbnB1dC9pbmRleC5tanM=`
10
+