fmode-ng 0.0.113 → 0.0.115
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +8 -0
- package/README.md +37 -37
- package/esm2022/fmode-ng.mjs +10 -5
- package/esm2022/lib/aigc/agent/fm-agent-task/fm-agent-task.component.mjs +8 -92
- package/esm2022/lib/aigc/agent/index.mjs +10 -3
- package/esm2022/lib/aigc/avatar/avatar.module.mjs +10 -45
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +10 -2
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +10 -315
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +10 -3
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +10 -57
- package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +10 -98
- package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +10 -107
- package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +10 -113
- package/esm2022/lib/aigc/avatar/index.mjs +10 -8
- package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +10 -2
- package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +8 -164
- package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +10 -49
- package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +8 -155
- package/esm2022/lib/aigc/chat/chat-list/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +10 -40
- package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +10 -140
- package/esm2022/lib/aigc/chat/chat-message-card/duration-str.pipe.mjs +10 -29
- package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +10 -3
- package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +10 -3
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +8 -193
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +10 -331
- package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +8 -249
- package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +10 -83
- package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/index.mjs +10 -8
- package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +10 -82
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +8 -367
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +10 -51
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +10 -24
- package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +10 -115
- package/esm2022/lib/aigc/index.mjs +10 -14
- package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +10 -21
- package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +10 -2
- package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +8 -174
- package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +10 -7
- package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +9 -194
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +10 -27
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +10 -27
- package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +10 -68
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-func.mjs +9 -162
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-work.mjs +10 -68
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +8 -313
- package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +10 -4
- package/esm2022/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.mjs +10 -62
- package/esm2022/lib/aigc/story/fm-story-card/fm-story-card.component.mjs +10 -87
- package/esm2022/lib/aigc/story/fm-story-list/fm-story-list.component.mjs +10 -345
- package/esm2022/lib/aigc/story/fm-story-list/story-preview.mjs +10 -81
- package/esm2022/lib/aigc/story/fm-story-loader/fm-story-loader.component.mjs +10 -152
- package/esm2022/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.mjs +10 -42
- package/esm2022/lib/aigc/story/index.mjs +10 -6
- package/esm2022/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.mjs +10 -47
- package/esm2022/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.mjs +10 -95
- package/esm2022/lib/aigc/story/modal-chat-story/modal-chat-story.component.mjs +10 -253
- package/esm2022/lib/aigc/story/story.service.mjs +10 -35
- package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +10 -636
- package/esm2022/lib/aigc/voice/index.mjs +10 -7
- package/esm2022/lib/aigc/voice/lib/audio/audio.player.mjs +10 -55
- package/esm2022/lib/aigc/voice/lib/audio/audio.streamer.mjs +10 -2
- package/esm2022/lib/aigc/voice/lib/audio/streamer.microsoft.mjs +10 -96
- package/esm2022/lib/aigc/voice/lib/audio/streamer.pcm.mjs +8 -177
- package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +10 -38
- package/esm2022/lib/aigc/voice/lib/recorder/extension-waveview.mjs +10 -215
- package/esm2022/lib/aigc/voice/lib/resample.mjs +10 -34
- package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +10 -189
- package/esm2022/lib/aigc/voice/tts/index.mjs +10 -5
- package/esm2022/lib/aigc/voice/tts/int-tts-provider.mjs +10 -2
- package/esm2022/lib/aigc/voice/tts/provider-doubao.mjs +8 -346
- package/esm2022/lib/code/fm-codemirror/fm-codemirror.component.mjs +8 -342
- package/esm2022/lib/code/index.mjs +10 -2
- package/esm2022/lib/core/agent/chat/completion/fmode-completion.mjs +8 -430
- package/esm2022/lib/core/agent/chat/completion/index.mjs +10 -2
- package/esm2022/lib/core/agent/chat/completion/int-gpt-chat-options.mjs +10 -2
- package/esm2022/lib/core/agent/chat/fmode-chat.mjs +8 -617
- package/esm2022/lib/core/agent/chat/index.mjs +10 -4
- package/esm2022/lib/core/agent/chat/interface.mjs +10 -2
- package/esm2022/lib/core/agent/index.mjs +10 -6
- package/esm2022/lib/core/agent/prompt/agent.prompt.mjs +10 -133
- package/esm2022/lib/core/agent/prompt/index.mjs +10 -2
- package/esm2022/lib/core/agent/prompt/prompt-util.mjs +10 -16
- package/esm2022/lib/core/agent/story/agent.story.mjs +10 -64
- package/esm2022/lib/core/agent/story/index.mjs +10 -2
- package/esm2022/lib/core/agent/task/agent.task.mjs +10 -90
- package/esm2022/lib/core/agent/task/index.mjs +10 -2
- package/esm2022/lib/core/agent/waiting/index.mjs +10 -3
- package/esm2022/lib/core/agent/waiting/loading/loading.ctrl.mjs +10 -279
- package/esm2022/lib/core/agent/waiting/tips/tips.ctrl.mjs +8 -190
- package/esm2022/lib/core/index.mjs +10 -4
- package/esm2022/lib/core/parse/datatype/acl.mjs +10 -57
- package/esm2022/lib/core/parse/datatype/file.mjs +10 -69
- package/esm2022/lib/core/parse/datatype/geopoint.mjs +10 -57
- package/esm2022/lib/core/parse/datatype/relation.mjs +10 -56
- package/esm2022/lib/core/parse/fmode.cloud.mjs +10 -0
- package/esm2022/lib/core/parse/fmode.object.mjs +10 -232
- package/esm2022/lib/core/parse/fmode.parse.mjs +10 -84
- package/esm2022/lib/core/parse/fmode.query.mjs +8 -500
- package/esm2022/lib/core/parse/fmode.user.mjs +10 -275
- package/esm2022/lib/core/parse/index.mjs +10 -5
- package/esm2022/lib/core/parse/types.mjs +10 -2
- package/esm2022/lib/core/voice/index.mjs +10 -3
- package/esm2022/lib/core/voice/tts/index.mjs +10 -2
- package/esm2022/lib/icon/filetype/audio.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/avatar.svg.mjs +10 -14
- package/esm2022/lib/icon/filetype/chat.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/docx.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/file.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/filetype.pipe.mjs +10 -57
- package/esm2022/lib/icon/filetype/index.mjs +10 -12
- package/esm2022/lib/icon/filetype/md.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/pdf.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/pptx.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/svgtoblob.mjs +10 -8
- package/esm2022/lib/icon/filetype/video.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/xlsx.svg.mjs +10 -3
- package/esm2022/lib/icon/index.mjs +10 -2
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +10 -209
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +10 -33
- package/esm2022/lib/map/index.mjs +10 -4
- package/esm2022/lib/map/map.module.mjs +10 -61
- package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +10 -132
- package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +8 -115
- package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +8 -118
- package/esm2022/lib/nova-cloud/index.mjs +10 -3
- package/esm2022/lib/nova-cloud/ncloud-api-func.mjs +10 -91
- package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +10 -53
- package/esm2022/lib/payment/index.mjs +10 -2
- package/esm2022/lib/payment/payment/payment.component.mjs +10 -543
- package/esm2022/lib/payment/payment.service.mjs +10 -202
- package/esm2022/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.mjs +10 -48
- package/esm2022/lib/person/comp-person-item/comp-person-item.component.mjs +10 -29
- package/esm2022/lib/person/comp-person-story/comp-person-story.component.mjs +10 -211
- package/esm2022/lib/person/edit-upload/edit-upload.component.mjs +8 -412
- package/esm2022/lib/person/edit-upload/edit-upload.module.mjs +10 -50
- package/esm2022/lib/person/index.mjs +10 -5
- package/esm2022/lib/person/modal-person-select/modal-person-select.component.mjs +10 -144
- package/esm2022/lib/person/modal-user-verify/secret-text.pipe.mjs +10 -41
- package/esm2022/lib/person/modal-user-verify/user-verify.component.mjs +10 -595
- package/esm2022/lib/person/person-detail/person-detail.component.mjs +10 -172
- package/esm2022/lib/person/person.service.mjs +8 -193
- package/esm2022/lib/platform/cross.service.mjs +10 -62
- package/esm2022/lib/platform/index.mjs +10 -2
- package/esm2022/lib/social/index.mjs +10 -2
- package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +8 -230
- package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +10 -59
- package/esm2022/lib/storage/index.mjs +10 -5
- package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +8 -131
- package/esm2022/lib/storage/service-hwobs/index.mjs +10 -3
- package/esm2022/lib/storage/service-hwobs/typings/esdk-obs-browser.mjs +1 -1
- package/esm2022/lib/storage/service-upload/index.mjs +10 -2
- package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +8 -513
- package/esm2022/lib/storage/service-upload/util-file-md5.mjs +10 -28
- package/esm2022/lib/storage/service-upload/util-file-metadata.mjs +10 -93
- package/esm2022/lib/storage/storage.module.mjs +10 -42
- package/esm2022/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.mjs +10 -72
- package/esm2022/lib/text/fm-article-editor/article.service.mjs +10 -237
- package/esm2022/lib/text/fm-article-editor/comp-upload-book-banners/comp-upload-book-banners.component.mjs +8 -72
- package/esm2022/lib/text/fm-article-editor/draft.service.mjs +10 -207
- package/esm2022/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.mjs +8 -227
- package/esm2022/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.mjs +10 -303
- package/esm2022/lib/text/fm-article-editor/fm-article-editor.component.mjs +8 -371
- package/esm2022/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.mjs +10 -94
- package/esm2022/lib/text/fm-article-editor/fm-article-outline-leftitem/fm-article-outline-leftitem.component.mjs +10 -36
- package/esm2022/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.mjs +10 -281
- package/esm2022/lib/text/fm-article-editor/fm-article-write-options/fm-article-write-options.component.mjs +10 -72
- package/esm2022/lib/text/fm-article-editor/outline-count.pipe.mjs +10 -22
- package/esm2022/lib/text/fm-article-editor/prompt/prompt-insertion-article.mjs +10 -169
- package/esm2022/lib/text/fm-article-editor/task-article-generation.mjs +10 -69
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-draft-create.mjs +10 -65
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline-edit.mjs +10 -55
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline.mjs +10 -142
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-preview.mjs +10 -35
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-writing-options.mjs +10 -81
- package/esm2022/lib/text/fm-article-editor/tasks/task-document-select.mjs +10 -50
- package/esm2022/lib/text/fm-text-quill/fm-text-quill.component.mjs +10 -145
- package/esm2022/lib/text/index.mjs +10 -4
- package/esm2022/lib/user/account/account.service.mjs +10 -222
- package/esm2022/lib/user/captcha/captcha.component.mjs +10 -135
- package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +10 -66
- package/esm2022/lib/user/index.mjs +10 -17
- package/esm2022/lib/user/login/auth.guard.mjs +10 -28
- package/esm2022/lib/user/login/auth.service.mjs +8 -433
- package/esm2022/lib/user/login/login.component.mjs +10 -916
- package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +10 -311
- package/esm2022/lib/user/profile/auth-profile.guard.mjs +10 -27
- package/esm2022/lib/user/profile/auth-profile.service.mjs +10 -122
- package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +10 -164
- package/esm2022/lib/user/profile/profile-bind/profile-confirm-modal.component.mjs +10 -79
- package/esm2022/lib/user/profile/profile.module.mjs +10 -54
- package/esm2022/lib/user/staff/index.mjs +10 -4
- package/esm2022/lib/user/staff/staff.guard.mjs +10 -26
- package/esm2022/lib/user/staff/staff.module.mjs +10 -18
- package/esm2022/lib/user/staff/staff.service.mjs +10 -85
- package/esm2022/lib/user/user-name.pipe.mjs +10 -29
- package/esm2022/lib/user/user.module.mjs +10 -102
- package/esm2022/lib/video/fm-video/fm-video.component.mjs +10 -67
- package/esm2022/lib/video/index.mjs +10 -2
- package/esm2022/public-api.mjs +10 -21
- package/fesm2022/fmode-ng.mjs +7 -19788
- package/fesm2022/fmode-ng.mjs.map +1 -1
- package/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.d.ts +2 -2
- package/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.d.ts +2 -2
- package/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.d.ts +2 -2
- package/lib/aigc/chat/chat-list/chat-list.component.d.ts +3 -2
- package/lib/aigc/chat/chat-message-card/comp-message-card.component.d.ts +3 -3
- package/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.d.ts +2 -2
- package/lib/aigc/chat/chat-modal-input/modal-input.component.d.ts +3 -3
- package/lib/aigc/service-fmai/service-imagine/imagine-func.d.ts +3 -3
- package/lib/aigc/service-fmai/service-imagine/imagine-work.d.ts +4 -4
- package/lib/aigc/service-fmai/service-imagine/imagine.service.d.ts +6 -6
- package/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.d.ts +2 -2
- package/lib/aigc/story/fm-story-card/fm-story-card.component.d.ts +2 -1
- package/lib/aigc/story/fm-story-list/fm-story-list.component.d.ts +6 -6
- package/lib/aigc/story/fm-story-list/story-preview.d.ts +4 -4
- package/lib/aigc/story/fm-story-loader/fm-story-loader.component.d.ts +3 -3
- package/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.d.ts +2 -2
- package/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.d.ts +3 -2
- package/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.d.ts +3 -2
- package/lib/aigc/story/modal-chat-story/modal-chat-story.component.d.ts +6 -6
- package/lib/aigc/story/story.service.d.ts +3 -2
- package/lib/aigc/voice/tts/fmode-tts-class.d.ts +2 -2
- package/lib/core/agent/chat/fmode-chat.d.ts +11 -11
- package/lib/core/agent/story/agent.story.d.ts +8 -8
- package/lib/core/parse/datatype/geopoint.d.ts +5 -1
- package/lib/core/parse/fmode.cloud.d.ts +32 -0
- package/lib/core/parse/fmode.object.d.ts +2 -2
- package/lib/core/parse/fmode.parse.d.ts +15 -9
- package/lib/core/parse/fmode.query.d.ts +41 -2
- package/lib/core/parse/fmode.user.d.ts +1 -0
- package/lib/core/parse/index.d.ts +1 -0
- package/lib/core/parse/types.d.ts +2 -0
- package/lib/map/comp-poi-picker/comp-poi-picker.component.d.ts +5 -5
- package/lib/payment/payment/payment.component.d.ts +3 -3
- package/lib/payment/payment.service.d.ts +4 -4
- package/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.d.ts +2 -1
- package/lib/person/comp-person-item/comp-person-item.component.d.ts +2 -1
- package/lib/person/comp-person-story/comp-person-story.component.d.ts +13 -13
- package/lib/person/edit-upload/edit-upload.component.d.ts +1 -1
- package/lib/person/modal-person-select/modal-person-select.component.d.ts +5 -5
- package/lib/person/modal-user-verify/user-verify.component.d.ts +5 -5
- package/lib/person/person-detail/person-detail.component.d.ts +4 -4
- package/lib/person/person.service.d.ts +7 -7
- package/lib/storage/service-hwobs/hwobs.service.d.ts +4 -5
- package/lib/storage/service-upload/nova-upload.service.d.ts +5 -5
- package/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.d.ts +2 -1
- package/lib/text/fm-article-editor/article.service.d.ts +12 -12
- package/lib/text/fm-article-editor/draft.service.d.ts +5 -5
- package/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.d.ts +3 -2
- package/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.d.ts +16 -17
- package/lib/text/fm-article-editor/fm-article-editor.component.d.ts +3 -3
- package/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.d.ts +11 -10
- package/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.d.ts +2 -2
- package/lib/text/fm-article-editor/prompt/prompt-insertion-article.d.ts +3 -3
- package/lib/text/fm-article-editor/task-article-generation.d.ts +5 -4
- package/lib/text/fm-article-editor/tasks/task-article-draft-create.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-article-outline-edit.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-article-outline.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-article-preview.d.ts +2 -1
- package/lib/text/fm-article-editor/tasks/task-article-writing-options.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-document-select.d.ts +3 -3
- package/lib/user/account/account.service.d.ts +2 -2
- package/lib/user/comp-user-avatar/comp-user-avatar.component.d.ts +2 -2
- package/lib/user/login/auth.service.d.ts +5 -5
- package/lib/user/login/login.component.d.ts +3 -3
- package/lib/user/profile/auth-profile.service.d.ts +8 -8
- package/lib/user/profile/profile-bind/profile-bind.component.d.ts +7 -7
- package/lib/user/profile/profile-bind/profile-confirm-modal.component.d.ts +2 -2
- package/lib/user/staff/staff.service.d.ts +3 -3
- package/lib/user/user-name.pipe.d.ts +2 -2
- package/package.json +12 -18
|
@@ -1,98 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
constructor() {
|
|
12
|
-
this.animClass = "waiting";
|
|
13
|
-
this.imageMap = {};
|
|
14
|
-
}
|
|
15
|
-
playWave() {
|
|
16
|
-
if (!this.wave && Recorder.WaveView) {
|
|
17
|
-
this.wave = Recorder.WaveView({ elem: ".record-wave-avatar", keep: false });
|
|
18
|
-
}
|
|
19
|
-
// 生成随机的pcmData
|
|
20
|
-
function generatePcmData(length) {
|
|
21
|
-
const pcmData = [];
|
|
22
|
-
for (let i = 0; i < length; i++) {
|
|
23
|
-
pcmData.push(Math.floor(Math.random() * 65536) - 32768);
|
|
24
|
-
}
|
|
25
|
-
return pcmData;
|
|
26
|
-
}
|
|
27
|
-
// 生成随机的powerLevel
|
|
28
|
-
function generatePowerLevel() {
|
|
29
|
-
return Math.random() * 100;
|
|
30
|
-
}
|
|
31
|
-
// 生成随机的sampleRate
|
|
32
|
-
function generateSampleRate() {
|
|
33
|
-
const sampleRates = [44100, 48000, 88200, 96000];
|
|
34
|
-
return sampleRates[Math.floor(Math.random() * sampleRates.length)];
|
|
35
|
-
}
|
|
36
|
-
// 生成示例数据
|
|
37
|
-
let powerLevel = generatePowerLevel(); // 生成随机的powerLevel
|
|
38
|
-
// 使用生成的数据调用wave.input函数
|
|
39
|
-
this.waveInterval = setInterval(() => {
|
|
40
|
-
let sampleRate = generateSampleRate(); // 生成随机的sampleRate
|
|
41
|
-
let pcmData = generatePcmData(1000); // 生成长度为1000的pcmData数组
|
|
42
|
-
this.wave.input(pcmData, powerLevel, sampleRate);
|
|
43
|
-
}, 40);
|
|
44
|
-
}
|
|
45
|
-
stopWave() {
|
|
46
|
-
clearInterval(this.waveInterval);
|
|
47
|
-
}
|
|
48
|
-
ngAfterViewInit() {
|
|
49
|
-
}
|
|
50
|
-
ngOnInit() {
|
|
51
|
-
setTimeout(() => {
|
|
52
|
-
this.imageMap = this.fmodeChat.avatarConfig?.image;
|
|
53
|
-
this.avatarImage.nativeElement.src = this.imageMap?.waiting;
|
|
54
|
-
// 绑定当前形象插件动作函数
|
|
55
|
-
this.fmodeChat.playAnimation = this.playAnimation;
|
|
56
|
-
}, 1500);
|
|
57
|
-
}
|
|
58
|
-
playAnimation() {
|
|
59
|
-
let that = this;
|
|
60
|
-
return (name) => {
|
|
61
|
-
let img = that.avatarImage.nativeElement;
|
|
62
|
-
that.animClass = name;
|
|
63
|
-
that.stopWave();
|
|
64
|
-
switch (name) {
|
|
65
|
-
case "thinking":
|
|
66
|
-
img.style.animationPlayState = 'running';
|
|
67
|
-
break;
|
|
68
|
-
case "talking":
|
|
69
|
-
img.style.animationPlayState = 'running';
|
|
70
|
-
that.playWave();
|
|
71
|
-
break;
|
|
72
|
-
case "listening":
|
|
73
|
-
img.style.animationPlayState = 'pause';
|
|
74
|
-
break;
|
|
75
|
-
case "waiting":
|
|
76
|
-
img.style.animationPlayState = 'running';
|
|
77
|
-
break;
|
|
78
|
-
default:
|
|
79
|
-
img.style.animationPlayState = 'paused';
|
|
80
|
-
break;
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CompAvatarRoleImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
85
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CompAvatarRoleImageComponent, isStandalone: true, selector: "fm-avatar-role-image", inputs: { fmodeChat: "fmodeChat", role: "role" }, viewQueries: [{ propertyName: "avatarImage", first: true, predicate: ["avatarImage"], descendants: true }], ngImport: i0, template: "<div class=\"page\">\r\n <div class=\"avatar\" [class]=\"animClass\">\r\n <div class=\"avatar-photo\">\r\n <img #avatarImage alt=\"\">\r\n <!-- \u97F3\u9891\u6CE2\u52A8 -->\r\n <div class=\"record-wave-avatar\">\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".page{position:relative;width:100vw;height:100%;top:0;left:0;display:flex;justify-content:center;align-items:center;background-color:#000}.avatar{width:100%;display:flex;justify-content:center;align-items:center}.avatar .avatar-photo{position:relative;margin-top:-10vh;width:80%}.avatar .avatar-photo img{border-radius:10px}.avatar .record-wave-avatar{height:50px;width:100%;position:absolute;float:left;left:0;bottom:0}.thinking,.listening,.waiting,.talking{animation-duration:2s;animation-play-state:running;animation-iteration-count:infinite;animation-timing-function:ease-in-out}@keyframes waitingAnimation{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}@keyframes thinkingAnimation{0%{transform:rotate(0)}30%{transform:rotate(10deg)}60%{transform:rotate(-10deg)}to{transform:rotate(0)}}.thinking{animation-name:thinkingAnimation}.waiting{animation-name:waitingAnimation}.listening{animation-name:listeningAnimation}.talking{animation-name:talkingAnimation}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }] }); }
|
|
86
|
-
}
|
|
87
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CompAvatarRoleImageComponent, decorators: [{
|
|
88
|
-
type: Component,
|
|
89
|
-
args: [{ selector: 'fm-avatar-role-image', standalone: true, imports: [CommonModule, FormsModule], template: "<div class=\"page\">\r\n <div class=\"avatar\" [class]=\"animClass\">\r\n <div class=\"avatar-photo\">\r\n <img #avatarImage alt=\"\">\r\n <!-- \u97F3\u9891\u6CE2\u52A8 -->\r\n <div class=\"record-wave-avatar\">\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".page{position:relative;width:100vw;height:100%;top:0;left:0;display:flex;justify-content:center;align-items:center;background-color:#000}.avatar{width:100%;display:flex;justify-content:center;align-items:center}.avatar .avatar-photo{position:relative;margin-top:-10vh;width:80%}.avatar .avatar-photo img{border-radius:10px}.avatar .record-wave-avatar{height:50px;width:100%;position:absolute;float:left;left:0;bottom:0}.thinking,.listening,.waiting,.talking{animation-duration:2s;animation-play-state:running;animation-iteration-count:infinite;animation-timing-function:ease-in-out}@keyframes waitingAnimation{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}@keyframes thinkingAnimation{0%{transform:rotate(0)}30%{transform:rotate(10deg)}60%{transform:rotate(-10deg)}to{transform:rotate(0)}}.thinking{animation-name:thinkingAnimation}.waiting{animation-name:waitingAnimation}.listening{animation-name:listeningAnimation}.talking{animation-name:talkingAnimation}\n"] }]
|
|
90
|
-
}], propDecorators: { avatarImage: [{
|
|
91
|
-
type: ViewChild,
|
|
92
|
-
args: ["avatarImage"]
|
|
93
|
-
}], fmodeChat: [{
|
|
94
|
-
type: Input
|
|
95
|
-
}], role: [{
|
|
96
|
-
type: Input
|
|
97
|
-
}] } });
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcC1hdmF0YXItcm9sZS1pbWFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL2NvbXAtYXZhdGFyLXJvbGUtaW1hZ2UvY29tcC1hdmF0YXItcm9sZS1pbWFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL2NvbXAtYXZhdGFyLXJvbGUtaW1hZ2UvY29tcC1hdmF0YXItcm9sZS1pbWFnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXdCLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHL0MsT0FBTyxRQUFRLE1BQU0sZUFBZSxDQUFBO0FBQ3BDLE9BQU8sNkNBQTZDLENBQUE7QUFDcEQsaURBQWlEO0FBRWpELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOztBQVN2RSxNQUFNLE9BQU8sNEJBQTRCO0lBUHpDO1FBU0UsY0FBUyxHQUFVLFNBQVMsQ0FBQTtRQStDNUIsYUFBUSxHQUFPLEVBQUUsQ0FBQTtLQW1DbEI7SUE1RUMsUUFBUTtRQUNOLElBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsSUFBSSxHQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUFJLEVBQUMscUJBQXFCLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFB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LEdBQUcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDO29CQUN6QyxNQUFNO2dCQUNSO29CQUNFLEdBQUcsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEdBQUcsUUFBUSxDQUFDO29CQUN4QyxNQUFNO1lBQ1YsQ0FBQztRQUNILENBQUMsQ0FBQTtJQUNILENBQUM7K0dBbkZVLDRCQUE0QjttR0FBNUIsNEJBQTRCLDhPQ25CekMsZ1VBU00sb2hDRE1NLFlBQVksOEJBQUMsV0FBVzs7NEZBSXZCLDRCQUE0QjtrQkFQeEMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFDLFdBQVcsQ0FBQzs4QkFLVCxXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBR2YsU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LE9uSW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZtb2RlQXZhdGFyUm9sZUNvbXAgfSBmcm9tICcuLi9pbnRlcmZhY2UtYXZhdGFyLXJvbGUnO1xyXG5cclxuaW1wb3J0IFJlY29yZGVyIGZyb20gJ3JlY29yZGVyLWNvcmUnXHJcbmltcG9ydCAnLi4vLi4vdm9pY2UvbGliL3JlY29yZGVyL2V4dGVuc2lvbi13YXZldmlldydcclxuLy8gaW1wb3J0ICdyZWNvcmRlci1jb3JlL3NyYy9leHRlbnNpb25zL3dhdmV2aWV3J1xyXG5cclxuaW1wb3J0IFBhcnNlIGZyb20gXCJwYXJzZVwiO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRm1vZGVDaGF0IH0gZnJvbSAnLi4vLi4vc2VydmljZS1mbWFpL3NlcnZpY2UtY2hhdC9jaGF0LWNsYXNzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZm0tYXZhdGFyLXJvbGUtaW1hZ2UnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSxGb3Jtc01vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbXAtYXZhdGFyLXJvbGUtaW1hZ2UuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbXAtYXZhdGFyLXJvbGUtaW1hZ2UuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tcEF2YXRhclJvbGVJbWFnZUNvbXBvbmVudCBpbXBsZW1lbnRzIEZtb2RlQXZhdGFyUm9sZUNvbXAsQWZ0ZXJWaWV3SW5pdCxPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGQoXCJhdmF0YXJJbWFnZVwiKSBhdmF0YXJJbWFnZTpFbGVtZW50UmVmXHJcbiAgYW5pbUNsYXNzOnN0cmluZyA9IFwid2FpdGluZ1wiXHJcblxyXG4gIEBJbnB1dCgpIGZtb2RlQ2hhdDpGbW9kZUNoYXQ7XHJcbiAgQElucHV0KCkgcm9sZTpQYXJzZS5PYmplY3Q7XHJcbiAgd2F2ZTphbnlcclxuICB3YXZlSW50ZXJ2YWw6YW55XHJcbiAgcGxheVdhdmUoKXtcclxuICAgIGlmKCF0aGlzLndhdmUmJlJlY29yZGVyLldhdmVWaWV3KXtcclxuICAgICAgdGhpcy53YXZlPVJlY29yZGVyLldhdmVWaWV3KHtlbGVtOlwiLnJlY29yZC13YXZlLWF2YXRhclwiLGtlZXA6ZmFsc2V9KTtcclxuICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIOeUn+aIkOmaj+acuueahHBjbURhdGFcclxuICAgICAgICBmdW5jdGlvbiBnZW5lcmF0ZVBjbURhdGEobGVuZ3RoKSB7XHJcbiAgICAgICAgICBjb25zdCBwY21EYXRhID0gW107XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBjbURhdGEucHVzaChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA2NTUzNikgLSAzMjc2OCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcGNtRGF0YTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOeUn+aIkOmaj+acuueahHBvd2VyTGV2ZWxcclxuICAgICAgICBmdW5jdGlvbiBnZW5lcmF0ZVBvd2VyTGV2ZWwoKSB7XHJcbiAgICAgICAgICByZXR1cm4gTWF0aC5yYW5kb20oKSAqIDEwMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOeUn+aIkOmaj+acuueahHNhbXBsZVJhdGVcclxuICAgICAgICBmdW5jdGlvbiBnZW5lcmF0ZVNhbXBsZVJhdGUoKSB7XHJcbiAgICAgICAgICBjb25zdCBzYW1wbGVSYXRlcyA9IFs0NDEwMCwgNDgwMDAsIDg4MjAwLCA5NjAwMF07XHJcbiAgICAgICAgICByZXR1cm4gc2FtcGxlUmF0ZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogc2FtcGxlUmF0ZXMubGVuZ3RoKV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIOeUn+aIkOekuuS+i+aVsOaNrlxyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBwb3dlckxldmVsID0gZ2VuZXJhdGVQb3dlckxldmVsKCk7IC8vIOeUn+aIkOmaj+acuueahHBvd2VyTGV2ZWxcclxuICAgICAgICAvLyDkvb/nlKjnlJ/miJDnmoTmlbDmja7osIPnlKh3YXZlLmlucHV05Ye95pWwXHJcbiAgICAgICAgdGhpcy53YXZlSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKT0+e1xyXG4gICAgICAgICAgbGV0IHNhbXBsZVJhdGUgPSBnZW5lcmF0ZVNhbXBsZVJhdGUoKTsgLy8g55Sf5oiQ6ZqP5py655qEc2FtcGxlUmF0ZVxyXG4gICAgICAgICAgbGV0IHBjbURhdGEgPSBnZW5lcmF0ZVBjbURhdGEoMTAwMCk7IC8vIOeUn+aIkOmVv+W6puS4ujEwMDDnmoRwY21EYXRh5pWw57uEXHJcbiAgICAgICAgICB0aGlzLndhdmUuaW5wdXQocGNtRGF0YSwgcG93ZXJMZXZlbCwgc2FtcGxlUmF0ZSk7XHJcbiAgICAgICAgfSw0MClcclxuICB9XHJcbiAgc3RvcFdhdmUoKXtcclxuICAgIGNsZWFySW50ZXJ2YWwodGhpcy53YXZlSW50ZXJ2YWwpXHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpe1xyXG5cclxuICB9XHJcblxyXG4gIGltYWdlTWFwOmFueSA9IHt9XHJcbiAgbmdPbkluaXQoKXtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmltYWdlTWFwID0gdGhpcy5mbW9kZUNoYXQuYXZhdGFyQ29uZmlnPy5pbWFnZTtcclxuICAgICAgdGhpcy5hdmF0YXJJbWFnZS5uYXRpdmVFbGVtZW50LnNyYyA9IHRoaXMuaW1hZ2VNYXA/LndhaXRpbmc7XHJcbiAgICAgIC8vIOe7keWumuW9k+WJjeW9ouixoeaPkuS7tuWKqOS9nOWHveaVsFxyXG4gICAgICB0aGlzLmZtb2RlQ2hhdC5wbGF5QW5pbWF0aW9uID0gdGhpcy5wbGF5QW5pbWF0aW9uIFxyXG4gICAgfSwgMTUwMCk7XHJcbiAgfVxyXG4gIHBsYXlBbmltYXRpb24oKXtcclxuICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgcmV0dXJuIChuYW1lOnN0cmluZyk9PntcclxuICAgICAgbGV0IGltZyA9ICB0aGF0LmF2YXRhckltYWdlLm5hdGl2ZUVsZW1lbnRcclxuICAgICAgdGhhdC5hbmltQ2xhc3MgPSBuYW1lXHJcbiAgICAgIHRoYXQuc3RvcFdhdmUoKVxyXG4gICAgICBzd2l0Y2ggKG5hbWUpIHtcclxuICAgICAgICBjYXNlIFwidGhpbmtpbmdcIjpcclxuICAgICAgICAgIGltZy5zdHlsZS5hbmltYXRpb25QbGF5U3RhdGUgPSAncnVubmluZyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwidGFsa2luZ1wiOlxyXG4gICAgICAgICAgaW1nLnN0eWxlLmFuaW1hdGlvblBsYXlTdGF0ZSA9ICdydW5uaW5nJztcclxuICAgICAgICAgIHRoYXQucGxheVdhdmUoKVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImxpc3RlbmluZ1wiOlxyXG4gICAgICAgICAgaW1nLnN0eWxlLmFuaW1hdGlvblBsYXlTdGF0ZSA9ICdwYXVzZSc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwid2FpdGluZ1wiOlxyXG4gICAgICAgICAgaW1nLnN0eWxlLmFuaW1hdGlvblBsYXlTdGF0ZSA9ICdydW5uaW5nJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpbWcuc3R5bGUuYW5pbWF0aW9uUGxheVN0YXRlID0gJ3BhdXNlZCc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicGFnZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImF2YXRhclwiIFtjbGFzc109XCJhbmltQ2xhc3NcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLXBob3RvXCI+XHJcbiAgICAgICAgICAgIDxpbWcgI2F2YXRhckltYWdlIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICA8IS0tIOmfs+mikeazouWKqCAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC13YXZlLWF2YXRhclwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|
|
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/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Component,ElementRef,Input,ViewChild}from"@angular/core";import{CommonModule}from"@angular/common";import Recorder from"recorder-core";import"../../voice/lib/recorder/extension-waveview";import{FmodeParse,FmodeObject}from"@fmode/parse";import{FormsModule}from"@angular/forms";import{FmodeChat}from"../../service-fmai/service-chat/chat-class";import*as i0 from"@angular/core";const Parse=FmodeParse.with("nova");export class CompAvatarRoleImageComponent{constructor(){this.animClass="waiting",this.imageMap={}}playWave(){!this.wave&&Recorder.WaveView&&(this.wave=Recorder.WaveView({elem:".record-wave-avatar",keep:!1}));let a=function generatePowerLevel(){return 100*Math.random()}();this.waveInterval=setInterval((()=>{let t=function generateSampleRate(){const a=[44100,48e3,88200,96e3];return a[Math.floor(Math.random()*a.length)]}(),e=function generatePcmData(a){const t=[];for(let e=0;e<a;e++)t.push(Math.floor(65536*Math.random())-32768);return t}(1e3);this.wave.input(e,a,t)}),40)}stopWave(){clearInterval(this.waveInterval)}ngAfterViewInit(){}ngOnInit(){setTimeout((()=>{this.imageMap=this.fmodeChat.avatarConfig?.image,this.avatarImage.nativeElement.src=this.imageMap?.waiting,this.fmodeChat.playAnimation=this.playAnimation}),1500)}playAnimation(){let a=this;return t=>{let e=a.avatarImage.nativeElement;switch(a.animClass=t,a.stopWave(),t){case"thinking":case"waiting":e.style.animationPlayState="running";break;case"talking":e.style.animationPlayState="running",a.playWave();break;case"listening":e.style.animationPlayState="pause";break;default:e.style.animationPlayState="paused"}}}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompAvatarRoleImageComponent,deps:[],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:CompAvatarRoleImageComponent,isStandalone:!0,selector:"fm-avatar-role-image",inputs:{fmodeChat:"fmodeChat",role:"role"},viewQueries:[{propertyName:"avatarImage",first:!0,predicate:["avatarImage"],descendants:!0}],ngImport:i0,template:'<div class="page">\n <div class="avatar" [class]="animClass">\n <div class="avatar-photo">\n <img #avatarImage alt="">\n \x3c!-- 音频波动 --\x3e\n <div class="record-wave-avatar">\n </div>\n </div>\n </div>\n</div>',styles:[".page{position:relative;width:100vw;height:100%;top:0;left:0;display:flex;justify-content:center;align-items:center;background-color:#000}.avatar{width:100%;display:flex;justify-content:center;align-items:center}.avatar .avatar-photo{position:relative;margin-top:-10vh;width:80%}.avatar .avatar-photo img{border-radius:10px}.avatar .record-wave-avatar{height:50px;width:100%;position:absolute;float:left;left:0;bottom:0}.thinking,.listening,.waiting,.talking{animation-duration:2s;animation-play-state:running;animation-iteration-count:infinite;animation-timing-function:ease-in-out}@keyframes waitingAnimation{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}@keyframes thinkingAnimation{0%{transform:rotate(0)}30%{transform:rotate(10deg)}60%{transform:rotate(-10deg)}to{transform:rotate(0)}}.thinking{animation-name:thinkingAnimation}.waiting{animation-name:waitingAnimation}.listening{animation-name:listeningAnimation}.talking{animation-name:talkingAnimation}\n"],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"ngmodule",type:FormsModule}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompAvatarRoleImageComponent,decorators:[{type:Component,args:[{selector:"fm-avatar-role-image",standalone:!0,imports:[CommonModule,FormsModule],template:'<div class="page">\n <div class="avatar" [class]="animClass">\n <div class="avatar-photo">\n <img #avatarImage alt="">\n \x3c!-- 音频波动 --\x3e\n <div class="record-wave-avatar">\n </div>\n </div>\n </div>\n</div>',styles:[".page{position:relative;width:100vw;height:100%;top:0;left:0;display:flex;justify-content:center;align-items:center;background-color:#000}.avatar{width:100%;display:flex;justify-content:center;align-items:center}.avatar .avatar-photo{position:relative;margin-top:-10vh;width:80%}.avatar .avatar-photo img{border-radius:10px}.avatar .record-wave-avatar{height:50px;width:100%;position:absolute;float:left;left:0;bottom:0}.thinking,.listening,.waiting,.talking{animation-duration:2s;animation-play-state:running;animation-iteration-count:infinite;animation-timing-function:ease-in-out}@keyframes waitingAnimation{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}@keyframes thinkingAnimation{0%{transform:rotate(0)}30%{transform:rotate(10deg)}60%{transform:rotate(-10deg)}to{transform:rotate(0)}}.thinking{animation-name:thinkingAnimation}.waiting{animation-name:waitingAnimation}.listening{animation-name:listeningAnimation}.talking{animation-name:talkingAnimation}\n"]}]}],propDecorators:{avatarImage:[{type:ViewChild,args:["avatarImage"]}],fmodeChat:[{type:Input}],role:[{type:Input}]}});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2F2YXRhci9jb21wLWF2YXRhci1yb2xlLWltYWdlL2NvbXAtYXZhdGFyLXJvbGUtaW1hZ2UuY29tcG9uZW50Lm1qcw==`
|
|
10
|
+
|
|
@@ -1,107 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "@ionic/angular/standalone";
|
|
13
|
-
export class CompAvatarRoleVideoComponent {
|
|
14
|
-
constructor(navCtrl) {
|
|
15
|
-
this.navCtrl = navCtrl;
|
|
16
|
-
this.animClass = "waiting";
|
|
17
|
-
this.onClose = new EventEmitter;
|
|
18
|
-
this.goBack = () => {
|
|
19
|
-
this.navCtrl.back();
|
|
20
|
-
};
|
|
21
|
-
this.videoMap = {};
|
|
22
|
-
}
|
|
23
|
-
close() {
|
|
24
|
-
this.onClose.emit(true);
|
|
25
|
-
this.fmodeChat.isAvatarShow = false;
|
|
26
|
-
}
|
|
27
|
-
playWave() {
|
|
28
|
-
if (!this.wave && Recorder.WaveView) {
|
|
29
|
-
this.wave = Recorder.WaveView({ elem: ".record-wave-avatar", keep: false });
|
|
30
|
-
}
|
|
31
|
-
// 生成随机的pcmData
|
|
32
|
-
function generatePcmData(length) {
|
|
33
|
-
const pcmData = [];
|
|
34
|
-
for (let i = 0; i < length; i++) {
|
|
35
|
-
pcmData.push(Math.floor(Math.random() * 65536) - 32768);
|
|
36
|
-
}
|
|
37
|
-
return pcmData;
|
|
38
|
-
}
|
|
39
|
-
// 生成随机的powerLevel
|
|
40
|
-
function generatePowerLevel() {
|
|
41
|
-
return Math.random() * 100;
|
|
42
|
-
}
|
|
43
|
-
// 生成随机的sampleRate
|
|
44
|
-
function generateSampleRate() {
|
|
45
|
-
const sampleRates = [44100, 48000, 88200, 96000];
|
|
46
|
-
return sampleRates[Math.floor(Math.random() * sampleRates.length)];
|
|
47
|
-
}
|
|
48
|
-
// 生成示例数据
|
|
49
|
-
let powerLevel = generatePowerLevel(); // 生成随机的powerLevel
|
|
50
|
-
// 使用生成的数据调用wave.input函数
|
|
51
|
-
this.waveInterval = setInterval(() => {
|
|
52
|
-
let sampleRate = generateSampleRate(); // 生成随机的sampleRate
|
|
53
|
-
let pcmData = generatePcmData(1000); // 生成长度为1000的pcmData数组
|
|
54
|
-
this.wave.input(pcmData, powerLevel, sampleRate);
|
|
55
|
-
}, 40);
|
|
56
|
-
}
|
|
57
|
-
stopWave() {
|
|
58
|
-
clearInterval(this.waveInterval);
|
|
59
|
-
}
|
|
60
|
-
ngAfterViewInit() {
|
|
61
|
-
}
|
|
62
|
-
ngOnInit() {
|
|
63
|
-
setTimeout(() => {
|
|
64
|
-
this.videoMap = this.fmodeChat.avatarConfig?.video;
|
|
65
|
-
this.playVideo(this.videoMap?.waiting);
|
|
66
|
-
// 绑定当前形象插件动作函数
|
|
67
|
-
this.fmodeChat.playAnimation = this.playAnimation;
|
|
68
|
-
}, 1500);
|
|
69
|
-
}
|
|
70
|
-
playAnimation() {
|
|
71
|
-
let that = this;
|
|
72
|
-
return (name) => {
|
|
73
|
-
that.animClass = name;
|
|
74
|
-
that.stopWave();
|
|
75
|
-
that.playVideo(that.videoMap[name]);
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
playVideo(src) {
|
|
79
|
-
this.avatarVideo.play(src);
|
|
80
|
-
// this.avatarVideo.nativeElement.autoplay = true;
|
|
81
|
-
// this.avatarVideo.nativeElement.loop = true;
|
|
82
|
-
// this.avatarVideo.nativeElement.controls = false;
|
|
83
|
-
// this.avatarVideo.nativeElement.src = src;
|
|
84
|
-
// this.avatarVideo.nativeElement.play();
|
|
85
|
-
}
|
|
86
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CompAvatarRoleVideoComponent, deps: [{ token: i1.NavController }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
87
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CompAvatarRoleVideoComponent, isStandalone: true, selector: "fm-avatar-role-video", inputs: { fmodeChat: "fmodeChat", role: "role", goBack: "goBack" }, outputs: { onClose: "onClose" }, viewQueries: [{ propertyName: "avatarVideo", first: true, predicate: FmVideoComponent, descendants: true }], ngImport: i0, template: "<div class=\"page\">\r\n <ion-toolbar>\r\n <ion-buttons slot=\"start\">\r\n <ion-button (click)=\"goBack()\">\r\n <ion-icon name=\"chevron-back-outline\"></ion-icon>\r\n </ion-button>\r\n </ion-buttons>\r\n <ion-buttons slot=\"end\">\r\n <ion-button (click)=\"close()\"> <ion-icon name=\"chevron-collapse-outline\"></ion-icon> </ion-button>\r\n </ion-buttons>\r\n </ion-toolbar>\r\n <div class=\"avatar\" [class]=\"animClass\">\r\n <div class=\"avatar-photo\">\r\n <fm-video #avatarVideo alt=\"\"></fm-video>\r\n <!-- \u97F3\u9891\u6CE2\u52A8 -->\r\n <div class=\"record-wave-avatar\">\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: ["ion-toolbar{position:fixed;top:0;left:0;width:100vw;--background:transparent}.page{position:relative;width:100vw;height:100%;top:0;left:0;display:flex;justify-content:center;align-items:center;background-color:#000}.avatar{height:100%;width:100%;display:flex;justify-content:center;align-items:center}.avatar .avatar-photo{position:relative;display:flex;justify-content:center;width:80%;max-height:100%}.avatar .avatar-photo fm-video{border-radius:50%;max-height:100%;max-width:100%}.avatar .record-wave-avatar{height:50px;width:100%;position:absolute;float:left;left:0;bottom:0}.thinking,.listening,.waiting,.talking{animation-duration:2s;animation-play-state:running;animation-iteration-count:infinite;animation-timing-function:ease-in-out}@keyframes waitingAnimation{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}@keyframes thinkingAnimation{0%{transform:rotate(0)}30%{transform:rotate(10deg)}60%{transform:rotate(-10deg)}to{transform:rotate(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: FmVideoComponent, selector: "fm-video", inputs: ["url", "canvasStyle"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { 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"] }] }); }
|
|
88
|
-
}
|
|
89
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CompAvatarRoleVideoComponent, decorators: [{
|
|
90
|
-
type: Component,
|
|
91
|
-
args: [{ selector: 'fm-avatar-role-video', standalone: true, imports: [CommonModule, FormsModule, FmVideoComponent,
|
|
92
|
-
IonIcon,
|
|
93
|
-
IonToolbar, IonButtons, IonButton,
|
|
94
|
-
], template: "<div class=\"page\">\r\n <ion-toolbar>\r\n <ion-buttons slot=\"start\">\r\n <ion-button (click)=\"goBack()\">\r\n <ion-icon name=\"chevron-back-outline\"></ion-icon>\r\n </ion-button>\r\n </ion-buttons>\r\n <ion-buttons slot=\"end\">\r\n <ion-button (click)=\"close()\"> <ion-icon name=\"chevron-collapse-outline\"></ion-icon> </ion-button>\r\n </ion-buttons>\r\n </ion-toolbar>\r\n <div class=\"avatar\" [class]=\"animClass\">\r\n <div class=\"avatar-photo\">\r\n <fm-video #avatarVideo alt=\"\"></fm-video>\r\n <!-- \u97F3\u9891\u6CE2\u52A8 -->\r\n <div class=\"record-wave-avatar\">\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: ["ion-toolbar{position:fixed;top:0;left:0;width:100vw;--background:transparent}.page{position:relative;width:100vw;height:100%;top:0;left:0;display:flex;justify-content:center;align-items:center;background-color:#000}.avatar{height:100%;width:100%;display:flex;justify-content:center;align-items:center}.avatar .avatar-photo{position:relative;display:flex;justify-content:center;width:80%;max-height:100%}.avatar .avatar-photo fm-video{border-radius:50%;max-height:100%;max-width:100%}.avatar .record-wave-avatar{height:50px;width:100%;position:absolute;float:left;left:0;bottom:0}.thinking,.listening,.waiting,.talking{animation-duration:2s;animation-play-state:running;animation-iteration-count:infinite;animation-timing-function:ease-in-out}@keyframes waitingAnimation{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}@keyframes thinkingAnimation{0%{transform:rotate(0)}30%{transform:rotate(10deg)}60%{transform:rotate(-10deg)}to{transform:rotate(0)}}\n"] }]
|
|
95
|
-
}], ctorParameters: () => [{ type: i1.NavController }], propDecorators: { avatarVideo: [{
|
|
96
|
-
type: ViewChild,
|
|
97
|
-
args: [FmVideoComponent]
|
|
98
|
-
}], fmodeChat: [{
|
|
99
|
-
type: Input
|
|
100
|
-
}], role: [{
|
|
101
|
-
type: Input
|
|
102
|
-
}], onClose: [{
|
|
103
|
-
type: Output
|
|
104
|
-
}], goBack: [{
|
|
105
|
-
type: Input
|
|
106
|
-
}] } });
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcC1hdmF0YXItcm9sZS12aWRlby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL2NvbXAtYXZhdGFyLXJvbGUtdmlkZW8vY29tcC1hdmF0YXItcm9sZS12aWRlby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL2NvbXAtYXZhdGFyLXJvbGUtdmlkZW8vY29tcC1hdmF0YXItcm9sZS12aWRlby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXdCLFNBQVMsRUFBYyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sUUFBUSxNQUFNLGVBQWUsQ0FBQTtBQUNwQyxpREFBaUQ7QUFDakQsT0FBTyw2Q0FBNkMsQ0FBQTtBQUVwRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7QUFXdEcsTUFBTSxPQUFPLDRCQUE0QjtJQVV2QyxZQUNVLE9BQXFCO1FBQXJCLFlBQU8sR0FBUCxPQUFPLENBQWM7UUFUL0IsY0FBUyxHQUFVLFNBQVMsQ0FBQTtRQU9sQixZQUFPLEdBQXlCLElB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SUFBSSxDQUFBO1lBQ3JCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQTtZQUVmLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXRDLENBQUMsQ0FBQTtJQUNILENBQUM7SUFDRCxTQUFTLENBQUMsR0FBVTtRQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzQixrREFBa0Q7UUFDbEQsOENBQThDO1FBQzlDLG1EQUFtRDtRQUNuRCw0Q0FBNEM7UUFDNUMseUNBQXlDO0lBQzNDLENBQUM7K0dBNUZVLDRCQUE0QjttR0FBNUIsNEJBQTRCLGtPQUM1QixnQkFBZ0IsZ0RDeEI3Qiwwd0JBbUJNLHlnQ0RITSxZQUFZLDhCQUFDLFdBQVcsK0JBQUMsZ0JBQWdCLHFGQUNqRCxPQUFPLDJKQUNQLFVBQVUsbUZBQUMsVUFBVSw4RUFBQyxTQUFTOzs0RkFLdEIsNEJBQTRCO2tCQVZ4QyxTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUMsV0FBVyxFQUFDLGdCQUFnQjt3QkFDakQsT0FBTzt3QkFDUCxVQUFVLEVBQUMsVUFBVSxFQUFDLFNBQVM7cUJBQ2hDO2tGQUs0QixXQUFXO3NCQUF2QyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFHbEIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUksT0FBTztzQkFBaEIsTUFBTTtnQkFZUCxNQUFNO3NCQURMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LE9uSW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgVmlld0NoaWxkLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGbW9kZUF2YXRhclJvbGVDb21wIH0gZnJvbSAnLi4vaW50ZXJmYWNlLWF2YXRhci1yb2xlJztcclxuXHJcbmltcG9ydCBSZWNvcmRlciBmcm9tICdyZWNvcmRlci1jb3JlJ1xyXG4vLyBpbXBvcnQgJ3JlY29yZGVyLWNvcmUvc3JjL2V4dGVuc2lvbnMvd2F2ZXZpZXcnXHJcbmltcG9ydCAnLi4vLi4vdm9pY2UvbGliL3JlY29yZGVyL2V4dGVuc2lvbi13YXZldmlldydcclxuXHJcbmltcG9ydCBQYXJzZSBmcm9tIFwicGFyc2VcIjtcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEZtb2RlQ2hhdCB9IGZyb20gJy4uLy4uL3NlcnZpY2UtZm1haS9zZXJ2aWNlLWNoYXQvY2hhdC1jbGFzcyc7XHJcbmltcG9ydCB7IEZtVmlkZW9Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi92aWRlbyc7XHJcbmltcG9ydCB7IElvbkJ1dHRvbiwgSW9uQnV0dG9ucywgSW9uSWNvbiwgSW9uVG9vbGJhciwgTmF2Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2ZtLWF2YXRhci1yb2xlLXZpZGVvJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsRm9ybXNNb2R1bGUsRm1WaWRlb0NvbXBvbmVudCxcclxuICAgIElvbkljb24sXHJcbiAgICBJb25Ub29sYmFyLElvbkJ1dHRvbnMsSW9uQnV0dG9uLFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbXAtYXZhdGFyLXJvbGUtdmlkZW8uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbXAtYXZhdGFyLXJvbGUtdmlkZW8uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tcEF2YXRhclJvbGVWaWRlb0NvbXBvbmVudCBpbXBsZW1lbnRzIEZtb2RlQXZhdGFyUm9sZUNvbXAsQWZ0ZXJWaWV3SW5pdCxPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGQoRm1WaWRlb0NvbXBvbmVudCkgYXZhdGFyVmlkZW86Rm1WaWRlb0NvbXBvbmVudFxyXG4gIGFuaW1DbGFzczpzdHJpbmcgPSBcIndhaXRpbmdcIlxyXG5cclxuICBASW5wdXQoKSBmbW9kZUNoYXQ6Rm1vZGVDaGF0O1xyXG4gIEBJbnB1dCgpIHJvbGU6UGFyc2UuT2JqZWN0O1xyXG4gIHdhdmU6YW55XHJcbiAgd2F2ZUludGVydmFsOmFueVxyXG5cclxuICBAT3V0cHV0KCkgb25DbG9zZTpFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIG5hdkN0cmw6TmF2Q29udHJvbGxlclxyXG4gICl7XHJcblxyXG4gIH1cclxuICBjbG9zZSgpe1xyXG4gICAgdGhpcy5vbkNsb3NlLmVtaXQodHJ1ZSk7XHJcbiAgICB0aGlzLmZtb2RlQ2hhdC5pc0F2YXRhclNob3cgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ29CYWNrID0gKCk9PntcclxuICAgIHRoaXMubmF2Q3RybC5iYWNrKCk7XHJcbiAgfVxyXG4gIHBsYXlXYXZlKCl7XHJcbiAgICBpZighdGhpcy53YXZlJiZSZWNvcmRlci5XYXZlVmlldyl7XHJcbiAgICAgIHRoaXMud2F2ZT1SZWNvcmRlci5XYXZlVmlldyh7ZWxlbTpcIi5yZWNvcmQtd2F2ZS1hdmF0YXJcIixrZWVwOmZhbHNlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyDnlJ/miJDpmo/mnLrnmoRwY21EYXRhXHJcbiAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVQY21EYXRhKGxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc3QgcGNtRGF0YSA9IFtdO1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBwY21EYXRhLnB1c2goTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNjU1MzYpIC0gMzI3NjgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHBjbURhdGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDnlJ/miJDpmo/mnLrnmoRwb3dlckxldmVsXHJcbiAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVQb3dlckxldmVsKCkge1xyXG4gICAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiAxMDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDnlJ/miJDpmo/mnLrnmoRzYW1wbGVSYXRlXHJcbiAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVTYW1wbGVSYXRlKCkge1xyXG4gICAgICAgICAgY29uc3Qgc2FtcGxlUmF0ZXMgPSBbNDQxMDAsIDQ4MDAwLCA4ODIwMCwgOTYwMDBdO1xyXG4gICAgICAgICAgcmV0dXJuIHNhbXBsZVJhdGVzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHNhbXBsZVJhdGVzLmxlbmd0aCldO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyDnlJ/miJDnpLrkvovmlbDmja5cclxuICAgICAgICBcclxuICAgICAgICBsZXQgcG93ZXJMZXZlbCA9IGdlbmVyYXRlUG93ZXJMZXZlbCgpOyAvLyDnlJ/miJDpmo/mnLrnmoRwb3dlckxldmVsXHJcbiAgICAgICAgLy8g5L2/55So55Sf5oiQ55qE5pWw5o2u6LCD55Sod2F2ZS5pbnB1dOWHveaVsFxyXG4gICAgICAgIHRoaXMud2F2ZUludGVydmFsID0gc2V0SW50ZXJ2YWwoKCk9PntcclxuICAgICAgICAgIGxldCBzYW1wbGVSYXRlID0gZ2VuZXJhdGVTYW1wbGVSYXRlKCk7IC8vIOeUn+aIkOmaj+acuueahHNhbXBsZVJhdGVcclxuICAgICAgICAgIGxldCBwY21EYXRhID0gZ2VuZXJhdGVQY21EYXRhKDEwMDApOyAvLyDnlJ/miJDplb/luqbkuLoxMDAw55qEcGNtRGF0YeaVsOe7hFxyXG4gICAgICAgICAgdGhpcy53YXZlLmlucHV0KHBjbURhdGEsIHBvd2VyTGV2ZWwsIHNhbXBsZVJhdGUpO1xyXG4gICAgICAgIH0sNDApXHJcbiAgfVxyXG4gIHN0b3BXYXZlKCl7XHJcbiAgICBjbGVhckludGVydmFsKHRoaXMud2F2ZUludGVydmFsKVxyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKXtcclxuXHJcbiAgfVxyXG5cclxuICB2aWRlb01hcDphbnkgPSB7fVxyXG4gIG5nT25Jbml0KCl7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy52aWRlb01hcCA9IHRoaXMuZm1vZGVDaGF0LmF2YXRhckNvbmZpZz8udmlkZW87XHJcbiAgICAgIHRoaXMucGxheVZpZGVvKHRoaXMudmlkZW9NYXA/LndhaXRpbmcpXHJcbiAgICAgIC8vIOe7keWumuW9k+WJjeW9ouixoeaPkuS7tuWKqOS9nOWHveaVsFxyXG4gICAgICB0aGlzLmZtb2RlQ2hhdC5wbGF5QW5pbWF0aW9uID0gdGhpcy5wbGF5QW5pbWF0aW9uIFxyXG4gICAgfSwgMTUwMCk7XHJcbiAgfVxyXG4gIHBsYXlBbmltYXRpb24oKXtcclxuICAgIGxldCB0aGF0ID0gdGhpc1xyXG4gICAgcmV0dXJuIChuYW1lOnN0cmluZyk9PntcclxuICAgICAgdGhhdC5hbmltQ2xhc3MgPSBuYW1lXHJcbiAgICAgIHRoYXQuc3RvcFdhdmUoKVxyXG5cclxuICAgICAgdGhhdC5wbGF5VmlkZW8odGhhdC52aWRlb01hcFtuYW1lXSk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuICBwbGF5VmlkZW8oc3JjOnN0cmluZyl7XHJcbiAgICB0aGlzLmF2YXRhclZpZGVvLnBsYXkoc3JjKTtcclxuXHJcbiAgICAvLyB0aGlzLmF2YXRhclZpZGVvLm5hdGl2ZUVsZW1lbnQuYXV0b3BsYXkgPSB0cnVlO1xyXG4gICAgLy8gdGhpcy5hdmF0YXJWaWRlby5uYXRpdmVFbGVtZW50Lmxvb3AgPSB0cnVlO1xyXG4gICAgLy8gdGhpcy5hdmF0YXJWaWRlby5uYXRpdmVFbGVtZW50LmNvbnRyb2xzID0gZmFsc2U7XHJcbiAgICAvLyB0aGlzLmF2YXRhclZpZGVvLm5hdGl2ZUVsZW1lbnQuc3JjID0gc3JjO1xyXG4gICAgLy8gdGhpcy5hdmF0YXJWaWRlby5uYXRpdmVFbGVtZW50LnBsYXkoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInBhZ2VcIj5cclxuICAgIDxpb24tdG9vbGJhcj5cclxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XHJcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJnb0JhY2soKVwiPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGV2cm9uLWJhY2stb3V0bGluZVwiPjwvaW9uLWljb24+XHJcbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgIDwvaW9uLWJ1dHRvbnM+XHJcbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cclxuICAgICAgICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cImNsb3NlKClcIj4gPGlvbi1pY29uIG5hbWU9XCJjaGV2cm9uLWNvbGxhcHNlLW91dGxpbmVcIj48L2lvbi1pY29uPiA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgPC9pb24tYnV0dG9ucz5cclxuICAgIDwvaW9uLXRvb2xiYXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyXCIgW2NsYXNzXT1cImFuaW1DbGFzc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItcGhvdG9cIj5cclxuICAgICAgICAgICAgPGZtLXZpZGVvICNhdmF0YXJWaWRlbyBhbHQ9XCJcIj48L2ZtLXZpZGVvPlxyXG4gICAgICAgICAgICA8IS0tIOmfs+mikeazouWKqCAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC13YXZlLWF2YXRhclwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|
|
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/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Component,Input,ViewChild,Output,EventEmitter}from"@angular/core";import{CommonModule}from"@angular/common";import Recorder from"recorder-core";import"../../voice/lib/recorder/extension-waveview";import{FmodeParse,FmodeObject}from"@fmode/parse";import{FormsModule}from"@angular/forms";import{FmodeChat}from"../../service-fmai/service-chat/chat-class";import{FmVideoComponent}from"../../../video";import{IonButton,IonButtons,IonIcon,IonToolbar,NavController}from"@ionic/angular/standalone";import*as i0 from"@angular/core";import*as i1 from"@ionic/angular/standalone";const Parse=FmodeParse.with("nova");export class CompAvatarRoleVideoComponent{constructor(t){this.navCtrl=t,this.animClass="waiting",this.onClose=new EventEmitter,this.goBack=()=>{this.navCtrl.back()},this.videoMap={}}close(){this.onClose.emit(!0),this.fmodeChat.isAvatarShow=!1}playWave(){!this.wave&&Recorder.WaveView&&(this.wave=Recorder.WaveView({elem:".record-wave-avatar",keep:!1}));let t=function generatePowerLevel(){return 100*Math.random()}();this.waveInterval=setInterval((()=>{let o=function generateSampleRate(){const t=[44100,48e3,88200,96e3];return t[Math.floor(Math.random()*t.length)]}(),n=function generatePcmData(t){const o=[];for(let n=0;n<t;n++)o.push(Math.floor(65536*Math.random())-32768);return o}(1e3);this.wave.input(n,t,o)}),40)}stopWave(){clearInterval(this.waveInterval)}ngAfterViewInit(){}ngOnInit(){setTimeout((()=>{this.videoMap=this.fmodeChat.avatarConfig?.video,this.playVideo(this.videoMap?.waiting),this.fmodeChat.playAnimation=this.playAnimation}),1500)}playAnimation(){let t=this;return o=>{t.animClass=o,t.stopWave(),t.playVideo(t.videoMap[o])}}playVideo(t){this.avatarVideo.play(t)}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompAvatarRoleVideoComponent,deps:[{token:i1.NavController}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:CompAvatarRoleVideoComponent,isStandalone:!0,selector:"fm-avatar-role-video",inputs:{fmodeChat:"fmodeChat",role:"role",goBack:"goBack"},outputs:{onClose:"onClose"},viewQueries:[{propertyName:"avatarVideo",first:!0,predicate:FmVideoComponent,descendants:!0}],ngImport:i0,template:'<div class="page">\n <ion-toolbar>\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-buttons slot="end">\n <ion-button (click)="close()"> <ion-icon name="chevron-collapse-outline"></ion-icon> </ion-button>\n </ion-buttons>\n </ion-toolbar>\n <div class="avatar" [class]="animClass">\n <div class="avatar-photo">\n <fm-video #avatarVideo alt=""></fm-video>\n \x3c!-- 音频波动 --\x3e\n <div class="record-wave-avatar">\n </div>\n </div>\n </div>\n</div>',styles:["ion-toolbar{position:fixed;top:0;left:0;width:100vw;--background:transparent}.page{position:relative;width:100vw;height:100%;top:0;left:0;display:flex;justify-content:center;align-items:center;background-color:#000}.avatar{height:100%;width:100%;display:flex;justify-content:center;align-items:center}.avatar .avatar-photo{position:relative;display:flex;justify-content:center;width:80%;max-height:100%}.avatar .avatar-photo fm-video{border-radius:50%;max-height:100%;max-width:100%}.avatar .record-wave-avatar{height:50px;width:100%;position:absolute;float:left;left:0;bottom:0}.thinking,.listening,.waiting,.talking{animation-duration:2s;animation-play-state:running;animation-iteration-count:infinite;animation-timing-function:ease-in-out}@keyframes waitingAnimation{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}@keyframes thinkingAnimation{0%{transform:rotate(0)}30%{transform:rotate(10deg)}60%{transform:rotate(-10deg)}to{transform:rotate(0)}}\n"],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"ngmodule",type:FormsModule},{kind:"component",type:FmVideoComponent,selector:"fm-video",inputs:["url","canvasStyle"]},{kind:"component",type:IonIcon,selector:"ion-icon",inputs:["color","flipRtl","icon","ios","lazy","md","mode","name","sanitize","size","src"]},{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"]}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompAvatarRoleVideoComponent,decorators:[{type:Component,args:[{selector:"fm-avatar-role-video",standalone:!0,imports:[CommonModule,FormsModule,FmVideoComponent,IonIcon,IonToolbar,IonButtons,IonButton],template:'<div class="page">\n <ion-toolbar>\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-buttons slot="end">\n <ion-button (click)="close()"> <ion-icon name="chevron-collapse-outline"></ion-icon> </ion-button>\n </ion-buttons>\n </ion-toolbar>\n <div class="avatar" [class]="animClass">\n <div class="avatar-photo">\n <fm-video #avatarVideo alt=""></fm-video>\n \x3c!-- 音频波动 --\x3e\n <div class="record-wave-avatar">\n </div>\n </div>\n </div>\n</div>',styles:["ion-toolbar{position:fixed;top:0;left:0;width:100vw;--background:transparent}.page{position:relative;width:100vw;height:100%;top:0;left:0;display:flex;justify-content:center;align-items:center;background-color:#000}.avatar{height:100%;width:100%;display:flex;justify-content:center;align-items:center}.avatar .avatar-photo{position:relative;display:flex;justify-content:center;width:80%;max-height:100%}.avatar .avatar-photo fm-video{border-radius:50%;max-height:100%;max-width:100%}.avatar .record-wave-avatar{height:50px;width:100%;position:absolute;float:left;left:0;bottom:0}.thinking,.listening,.waiting,.talking{animation-duration:2s;animation-play-state:running;animation-iteration-count:infinite;animation-timing-function:ease-in-out}@keyframes waitingAnimation{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}@keyframes thinkingAnimation{0%{transform:rotate(0)}30%{transform:rotate(10deg)}60%{transform:rotate(-10deg)}to{transform:rotate(0)}}\n"]}]}],ctorParameters:()=>[{type:i1.NavController}],propDecorators:{avatarVideo:[{type:ViewChild,args:[FmVideoComponent]}],fmodeChat:[{type:Input}],role:[{type:Input}],onClose:[{type:Output}],goBack:[{type:Input}]}});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2F2YXRhci9jb21wLWF2YXRhci1yb2xlLXZpZGVvL2NvbXAtYXZhdGFyLXJvbGUtdmlkZW8uY29tcG9uZW50Lm1qcw==`
|
|
10
|
+
|
|
@@ -1,113 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import { FormsModule } from '@angular/forms';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import { NovaCloudService } from '../../../nova-cloud/nova-cloud.service';
|
|
12
|
-
import { HidexmlPipe } from '../../service-fmai/service-chat';
|
|
13
|
-
import { ModalChatVoiceInputComponent } from '../modal-chat-voice-input/modal-chat-voice-input.component';
|
|
14
|
-
// import { Diagnostic } from '@awesome-cordova-plugins/diagnostic/ngx';
|
|
15
|
-
import { Diagnostic } from '@awesome-cordova-plugins/diagnostic/ngx';
|
|
16
|
-
import * as i0 from "@angular/core";
|
|
17
|
-
import * as i1 from "@angular/router";
|
|
18
|
-
import * as i2 from "@ionic/angular";
|
|
19
|
-
import * as i3 from "../../service-fmai/service-chat";
|
|
20
|
-
import * as i4 from "../../../nova-cloud/nova-cloud.service";
|
|
21
|
-
import * as i5 from "@awesome-cordova-plugins/diagnostic/ngx";
|
|
22
|
-
import * as i6 from "@angular/common";
|
|
23
|
-
export class CompAvatarTalkComponent {
|
|
24
|
-
constructor(router, navCtrl, route, chatServ, ncloud, platform, diagnostic) {
|
|
25
|
-
this.router = router;
|
|
26
|
-
this.navCtrl = navCtrl;
|
|
27
|
-
this.route = route;
|
|
28
|
-
this.chatServ = chatServ;
|
|
29
|
-
this.ncloud = ncloud;
|
|
30
|
-
this.platform = platform;
|
|
31
|
-
this.diagnostic = diagnostic;
|
|
32
|
-
this.voiceServ = new FmodeVoiceService(this.platform, this.diagnostic);
|
|
33
|
-
this.route.paramMap.subscribe(params => {
|
|
34
|
-
this.roleId = params.get("roleId");
|
|
35
|
-
this.loadAvatarRole(this.roleId);
|
|
36
|
-
});
|
|
37
|
-
// 切换黑暗模式
|
|
38
|
-
document.body.classList.add('dark');
|
|
39
|
-
}
|
|
40
|
-
ngOnInit() {
|
|
41
|
-
}
|
|
42
|
-
ngOnDestroy() {
|
|
43
|
-
document.body.classList.remove('dark');
|
|
44
|
-
this.voiceServ.resultText = null;
|
|
45
|
-
if (this.fmodeChat) {
|
|
46
|
-
this.fmodeChat.latestAIResponse = null;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
goBack() {
|
|
50
|
-
document.body.classList.remove('dark');
|
|
51
|
-
let backUrl = this.avatarRole?.get("backUrl");
|
|
52
|
-
try {
|
|
53
|
-
if (backUrl) {
|
|
54
|
-
this.navCtrl.navigateRoot(backUrl);
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
this.navCtrl.navigateRoot('/chat/pro/role/' + this.roleId);
|
|
58
|
-
}
|
|
59
|
-
catch (err) {
|
|
60
|
-
this.navCtrl.navigateRoot('/chat/pro/role/' + this.roleId);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
// 根据ID加载数字角色
|
|
64
|
-
async loadAvatarRole(roleId) {
|
|
65
|
-
let query = new Parse.Query("AvatarRole");
|
|
66
|
-
this.avatarRole = await query.get(roleId);
|
|
67
|
-
let chat = await this.chatServ.createNewRoleChat(this.roleId);
|
|
68
|
-
chat.isTalkMode = true;
|
|
69
|
-
this.fmodeChat = chat;
|
|
70
|
-
this.fmodeChat.showAvatar();
|
|
71
|
-
}
|
|
72
|
-
ngAfterViewInit() {
|
|
73
|
-
this.listenDivChange();
|
|
74
|
-
}
|
|
75
|
-
listenDivChange() {
|
|
76
|
-
// 创建 MutationObserver 实例
|
|
77
|
-
let observer = new MutationObserver(() => {
|
|
78
|
-
this.scrollToBottom(this.aiRespComp);
|
|
79
|
-
});
|
|
80
|
-
// 配置观察选项
|
|
81
|
-
let config = { childList: true, subtree: true, attributes: true };
|
|
82
|
-
// 开始观察
|
|
83
|
-
observer.observe(this.aiRespComp.nativeElement, config);
|
|
84
|
-
}
|
|
85
|
-
scrollToBottom(comp) {
|
|
86
|
-
if (comp?.nativeElement?.scrollHeight) {
|
|
87
|
-
comp.nativeElement.scrollTop = comp.nativeElement.scrollHeight;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CompAvatarTalkComponent, deps: [{ token: i1.Router }, { token: i2.NavController }, { token: i1.ActivatedRoute }, { token: i3.ChatService }, { token: i4.NovaCloudService }, { token: i2.Platform }, { token: i5.Diagnostic }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
91
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CompAvatarTalkComponent, isStandalone: true, selector: "app-comp-avatar-talk", providers: [
|
|
92
|
-
NovaCloudService, ChatService, Diagnostic,
|
|
93
|
-
ModalController,
|
|
94
|
-
], viewQueries: [{ propertyName: "avatarComp", first: true, predicate: ["avatar"], descendants: true }, { propertyName: "aiRespComp", first: true, predicate: ["aiRespComp"], descendants: true }], ngImport: i0, template: "<ion-menu #menu contentId=\"main-content\" side=\"end\">\r\n <ion-header>\r\n <ion-toolbar>\r\n <ion-title>\u8D44\u6599</ion-title>\r\n </ion-toolbar>\r\n </ion-header>\r\n <ion-content class=\"ion-padding\">\r\n\r\n <ion-card style=\"margin: 0px;\">\r\n <img [src]=\"avatarRole?.get('thumb')\" alt=\"\">\r\n <ion-card-header>\r\n <ion-card-subtitle>{{avatarRole?.get('tags')}}</ion-card-subtitle>\r\n <ion-card-title>{{avatarRole?.get(\"name\")}}</ion-card-title>\r\n </ion-card-header>\r\n \r\n <ion-card-content>\r\n {{avatarRole?.get(\"desc\")}}\r\n\r\n <ion-list [inset]=\"true\" style=\"margin:0px;\">\r\n <!-- <ion-item>\r\n <ion-avatar *ngIf=\"avatarRole?.get('thumb')\" aria-hidden=\"true\" slot=\"start\">\r\n <img [src]=\"avatarRole?.get('thumb')\" />\r\n </ion-avatar>\r\n <ion-label>{{avatarRole?.get(\"name\")}}</ion-label>\r\n </ion-item> -->\r\n <ion-item lines=\"none\" *ngIf=\"avatarRole?.get('age')\">\r\n <ion-note slot=\"start\">\u5E74\u9F84</ion-note>\r\n <ion-label>{{avatarRole?.get(\"age\")}}</ion-label>\r\n </ion-item>\r\n <ion-item lines=\"none\" *ngIf=\"avatarRole?.get('gender')\">\r\n <ion-note slot=\"start\">\u6027\u522B</ion-note>\r\n <ion-label>{{avatarRole?.get(\"gender\")}}</ion-label>\r\n </ion-item>\r\n <ion-item lines=\"none\">\r\n <ion-note slot=\"start\">\u79F0\u53F7</ion-note>\r\n <ion-label>{{avatarRole?.get(\"title\")}}</ion-label>\r\n </ion-item>\r\n \r\n <ion-item lines=\"none\">\r\n <ion-note slot=\"start\">\u64C5\u957F</ion-note>\r\n <ion-label>{{avatarRole?.get(\"tags\")?.join(',')}}</ion-label>\r\n </ion-item>\r\n\r\n </ion-list>\r\n </ion-card-content>\r\n </ion-card>\r\n \r\n \r\n \r\n </ion-content>\r\n</ion-menu>\r\n\r\n<div class=\"ion-page\" id=\"main-content\">\r\n <ion-header class=\"ion-no-border\">\r\n <ion-toolbar>\r\n <ion-buttons slot=\"start\">\r\n <ion-button (click)=\"goBack()\"> <ion-icon name=\"chevron-back-outline\"></ion-icon> </ion-button>\r\n </ion-buttons>\r\n <ion-title>\r\n <ion-chip *ngIf=\"avatarRole?.get('title')\">{{avatarRole?.get(\"title\")}}</ion-chip>\r\n </ion-title>\r\n <ion-buttons slot=\"end\">\r\n <!-- <ion-button (click)=\"playTTSTeting()\">TTS\u6D4B\u8BD5</ion-button> -->\r\n {{avatarRole?.get(\"name\")}}\r\n <ion-button (click)=\"menu.toggle()\"> <ion-icon name=\"ellipsis-horizontal-outline\"></ion-icon> </ion-button>\r\n </ion-buttons>\r\n </ion-toolbar>\r\n </ion-header>\r\n\r\n <!-- <ion-segment value=\"voice\">\r\n <ion-segment-button (click)=\"chatServ.createChatPanel(avatarRole)\" value=\"chat\">\r\n <ion-label>\u804A\u5929</ion-label>\r\n </ion-segment-button>\r\n <ion-segment-button routerLink=\"{{'/avatar/role/'+avatarRole?.id}}\" value=\"voice\">\r\n <ion-label>\u8BED\u97F3</ion-label>\r\n </ion-segment-button>\r\n </ion-segment> -->\r\n\r\n <!-- \u6570\u5B57\u5F62\u8C61\uFF1A\u52A8\u753B\u6548\u679C -->\r\n <fm-avatar-role-image *ngIf=\"avatarRole&&fmodeChat\" [fmodeChat]=\"fmodeChat\" [role]=\"avatarRole\" #avatar class=\"avatar\"></fm-avatar-role-image>\r\n <!-- <fm-avatar-role-particle #avatar class=\"avatar\"></fm-avatar-role-particle> -->\r\n\r\n <!-- AI\u56DE\u590D\u7684\u6700\u65B0\u6D88\u606F -->\r\n <div class=\"ai-resp-input\" #aiRespComp>{{fmodeChat?.latestAIResponse | hidexml}}</div>\r\n\r\n <fm-modal-chat-voice-input *ngIf=\"fmodeChat\" [fmodeChat]=\"fmodeChat\"></fm-modal-chat-voice-input>\r\n\r\n</div>\r\n\r\n", styles: ["ion-menu ion-note{color:#ccc;font-weight:700}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.avatar{display:block;width:100%;height:100%}.ai-resp-input{font-size:1rem;color:#fff;position:fixed;top:60px;max-height:15vh;overflow-y:scroll;padding:0 10px}.user-asr-input{font-size:1rem;color:#fff;position:fixed;bottom:6vh;padding:0 10px}.test-button-group{color:#00f;position:fixed;bottom:20vh}.test-button-group button{padding:10px;margin:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i2.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: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i2.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonChip, selector: "ion-chip", inputs: ["color", "disabled", "mode", "outline"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonMenu, selector: "ion-menu", inputs: ["contentId", "disabled", "maxEdgeStart", "menuId", "side", "swipeGesture", "type"] }, { kind: "component", type: i2.IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: CompAvatarRoleImageComponent, selector: "fm-avatar-role-image", inputs: ["fmodeChat", "role"] }, { kind: "component", type: ModalChatVoiceInputComponent, selector: "fm-modal-chat-voice-input", inputs: ["fmodeChat", "talkMode"] }, { kind: "pipe", type: HidexmlPipe, name: "hidexml" }] }); }
|
|
95
|
-
}
|
|
96
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CompAvatarTalkComponent, decorators: [{
|
|
97
|
-
type: Component,
|
|
98
|
-
args: [{ selector: 'app-comp-avatar-talk', standalone: true, imports: [
|
|
99
|
-
CommonModule, RouterModule, FormsModule, IonicModule, CompAvatarParticleComponent, CompAvatarRoleImageComponent,
|
|
100
|
-
ModalChatVoiceInputComponent,
|
|
101
|
-
HidexmlPipe
|
|
102
|
-
], providers: [
|
|
103
|
-
NovaCloudService, ChatService, Diagnostic,
|
|
104
|
-
ModalController,
|
|
105
|
-
], template: "<ion-menu #menu contentId=\"main-content\" side=\"end\">\r\n <ion-header>\r\n <ion-toolbar>\r\n <ion-title>\u8D44\u6599</ion-title>\r\n </ion-toolbar>\r\n </ion-header>\r\n <ion-content class=\"ion-padding\">\r\n\r\n <ion-card style=\"margin: 0px;\">\r\n <img [src]=\"avatarRole?.get('thumb')\" alt=\"\">\r\n <ion-card-header>\r\n <ion-card-subtitle>{{avatarRole?.get('tags')}}</ion-card-subtitle>\r\n <ion-card-title>{{avatarRole?.get(\"name\")}}</ion-card-title>\r\n </ion-card-header>\r\n \r\n <ion-card-content>\r\n {{avatarRole?.get(\"desc\")}}\r\n\r\n <ion-list [inset]=\"true\" style=\"margin:0px;\">\r\n <!-- <ion-item>\r\n <ion-avatar *ngIf=\"avatarRole?.get('thumb')\" aria-hidden=\"true\" slot=\"start\">\r\n <img [src]=\"avatarRole?.get('thumb')\" />\r\n </ion-avatar>\r\n <ion-label>{{avatarRole?.get(\"name\")}}</ion-label>\r\n </ion-item> -->\r\n <ion-item lines=\"none\" *ngIf=\"avatarRole?.get('age')\">\r\n <ion-note slot=\"start\">\u5E74\u9F84</ion-note>\r\n <ion-label>{{avatarRole?.get(\"age\")}}</ion-label>\r\n </ion-item>\r\n <ion-item lines=\"none\" *ngIf=\"avatarRole?.get('gender')\">\r\n <ion-note slot=\"start\">\u6027\u522B</ion-note>\r\n <ion-label>{{avatarRole?.get(\"gender\")}}</ion-label>\r\n </ion-item>\r\n <ion-item lines=\"none\">\r\n <ion-note slot=\"start\">\u79F0\u53F7</ion-note>\r\n <ion-label>{{avatarRole?.get(\"title\")}}</ion-label>\r\n </ion-item>\r\n \r\n <ion-item lines=\"none\">\r\n <ion-note slot=\"start\">\u64C5\u957F</ion-note>\r\n <ion-label>{{avatarRole?.get(\"tags\")?.join(',')}}</ion-label>\r\n </ion-item>\r\n\r\n </ion-list>\r\n </ion-card-content>\r\n </ion-card>\r\n \r\n \r\n \r\n </ion-content>\r\n</ion-menu>\r\n\r\n<div class=\"ion-page\" id=\"main-content\">\r\n <ion-header class=\"ion-no-border\">\r\n <ion-toolbar>\r\n <ion-buttons slot=\"start\">\r\n <ion-button (click)=\"goBack()\"> <ion-icon name=\"chevron-back-outline\"></ion-icon> </ion-button>\r\n </ion-buttons>\r\n <ion-title>\r\n <ion-chip *ngIf=\"avatarRole?.get('title')\">{{avatarRole?.get(\"title\")}}</ion-chip>\r\n </ion-title>\r\n <ion-buttons slot=\"end\">\r\n <!-- <ion-button (click)=\"playTTSTeting()\">TTS\u6D4B\u8BD5</ion-button> -->\r\n {{avatarRole?.get(\"name\")}}\r\n <ion-button (click)=\"menu.toggle()\"> <ion-icon name=\"ellipsis-horizontal-outline\"></ion-icon> </ion-button>\r\n </ion-buttons>\r\n </ion-toolbar>\r\n </ion-header>\r\n\r\n <!-- <ion-segment value=\"voice\">\r\n <ion-segment-button (click)=\"chatServ.createChatPanel(avatarRole)\" value=\"chat\">\r\n <ion-label>\u804A\u5929</ion-label>\r\n </ion-segment-button>\r\n <ion-segment-button routerLink=\"{{'/avatar/role/'+avatarRole?.id}}\" value=\"voice\">\r\n <ion-label>\u8BED\u97F3</ion-label>\r\n </ion-segment-button>\r\n </ion-segment> -->\r\n\r\n <!-- \u6570\u5B57\u5F62\u8C61\uFF1A\u52A8\u753B\u6548\u679C -->\r\n <fm-avatar-role-image *ngIf=\"avatarRole&&fmodeChat\" [fmodeChat]=\"fmodeChat\" [role]=\"avatarRole\" #avatar class=\"avatar\"></fm-avatar-role-image>\r\n <!-- <fm-avatar-role-particle #avatar class=\"avatar\"></fm-avatar-role-particle> -->\r\n\r\n <!-- AI\u56DE\u590D\u7684\u6700\u65B0\u6D88\u606F -->\r\n <div class=\"ai-resp-input\" #aiRespComp>{{fmodeChat?.latestAIResponse | hidexml}}</div>\r\n\r\n <fm-modal-chat-voice-input *ngIf=\"fmodeChat\" [fmodeChat]=\"fmodeChat\"></fm-modal-chat-voice-input>\r\n\r\n</div>\r\n\r\n", styles: ["ion-menu ion-note{color:#ccc;font-weight:700}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.avatar{display:block;width:100%;height:100%}.ai-resp-input{font-size:1rem;color:#fff;position:fixed;top:60px;max-height:15vh;overflow-y:scroll;padding:0 10px}.user-asr-input{font-size:1rem;color:#fff;position:fixed;bottom:6vh;padding:0 10px}.test-button-group{color:#00f;position:fixed;bottom:20vh}.test-button-group button{padding:10px;margin:10px}\n"] }]
|
|
106
|
-
}], ctorParameters: () => [{ type: i1.Router }, { type: i2.NavController }, { type: i1.ActivatedRoute }, { type: i3.ChatService }, { type: i4.NovaCloudService }, { type: i2.Platform }, { type: i5.Diagnostic }], propDecorators: { avatarComp: [{
|
|
107
|
-
type: ViewChild,
|
|
108
|
-
args: ["avatar"]
|
|
109
|
-
}], aiRespComp: [{
|
|
110
|
-
type: ViewChild,
|
|
111
|
-
args: ["aiRespComp"]
|
|
112
|
-
}] } });
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcC1hdmF0YXItdGFsay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL2NvbXAtYXZhdGFyLXRhbGsvY29tcC1hdmF0YXItdGFsay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL2NvbXAtYXZhdGFyLXRhbGsvY29tcC1hdmF0YXItdGFsay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQW9CLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBdUIsTUFBTSxpQ0FBaUMsQ0FBQztBQUVuRixPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUMsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDckYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLHdEQUF3RCxDQUFBO0FBQ2xHLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLDREQUE0RCxDQUFBO0FBQ3ZHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQTtBQUM5QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRSxPQUFPLEVBQVksV0FBVyxFQUFFLE1BQU0saUNBQWlD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LFdBQVc7cUJBQ1osYUFDUzt3QkFDUixnQkFBZ0IsRUFBQyxXQUFXLEVBQUMsVUFBVTt3QkFDdkMsZUFBZTtxQkFDaEI7Nk9BS3NCLFVBQVU7c0JBQTlCLFNBQVM7dUJBQUMsUUFBUTtnQkE4RE0sVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm1vZGVWb2ljZVNlcnZpY2UgfSBmcm9tICcuLi8uLi92b2ljZSc7XHJcbmltcG9ydCB7IENoYXRTZXJ2aWNlLCBGbW9kZUNoYXRDb21wbGV0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZS1mbWFpL3NlcnZpY2UtY2hhdCc7XHJcbmltcG9ydCB7IEZtb2RlQXZhdGFyUm9sZUNvbXAgfSBmcm9tICcuLi9pbnRlcmZhY2UtYXZhdGFyLXJvbGUnO1xyXG5pbXBvcnQgeyBJb25pY01vZHVsZSwgTmF2Q29udHJvbGxlciwgUGxhdGZvcm0sTW9kYWxDb250cm9sbGVyIH0gZnJvbSBcIkBpb25pYy9hbmd1bGFyXCJcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtDb21wQXZhdGFyUGFydGljbGVDb21wb25lbnR9IGZyb20gXCIuLi9jb21wLWF2YXRhci1wYXJ0aWNsZS9jb21wLWF2YXRhci1wYXJ0aWNsZS5jb21wb25lbnRcIlxyXG5pbXBvcnQge0NvbXBBdmF0YXJSb2xlSW1hZ2VDb21wb25lbnR9IGZyb20gXCIuLi9jb21wLWF2YXRhci1yb2xlLWltYWdlL2NvbXAtYXZhdGFyLXJvbGUtaW1hZ2UuY29tcG9uZW50XCJcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCAqIGFzIFBhcnNlIGZyb20gXCJwYXJzZVwiXHJcbmltcG9ydCB7IE5vdmFDbG91ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9ub3ZhLWNsb3VkL25vdmEtY2xvdWQuc2VydmljZSc7XHJcbmltcG9ydCB7IEZtb2RlQ2hhdCxIaWRleG1sUGlwZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UtZm1haS9zZXJ2aWNlLWNoYXQnO1xyXG5pbXBvcnQgeyBNb2RhbENoYXRWb2ljZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWwtY2hhdC12b2ljZS1pbnB1dC9tb2RhbC1jaGF0LXZvaWNlLWlucHV0LmNvbXBvbmVudCc7XHJcbi8vIGltcG9ydCB7IERpYWdub3N0aWMgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvZGlhZ25vc3RpYy9uZ3gnO1xyXG5pbXBvcnQgeyBEaWFnbm9zdGljIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL2RpYWdub3N0aWMvbmd4JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWNvbXAtYXZhdGFyLXRhbGsnLFxyXG4gIHN0YW5kYWxvbmU6dHJ1ZSxcclxuICBpbXBvcnRzOltcclxuICAgIENvbW1vbk1vZHVsZSxSb3V0ZXJNb2R1bGUsRm9ybXNNb2R1bGUsSW9uaWNNb2R1bGUsQ29tcEF2YXRhclBhcnRpY2xlQ29tcG9uZW50LENvbXBBdmF0YXJSb2xlSW1hZ2VDb21wb25lbnQsXHJcbiAgICBNb2RhbENoYXRWb2ljZUlucHV0Q29tcG9uZW50LFxyXG4gICAgSGlkZXhtbFBpcGVcclxuICBdLFxyXG4gIHByb3ZpZGVyczpbXHJcbiAgICBOb3ZhQ2xvdWRTZXJ2aWNlLENoYXRTZXJ2aWNlLERpYWdub3N0aWMsXHJcbiAgICBNb2RhbENvbnRyb2xsZXIsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29tcC1hdmF0YXItdGFsay5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29tcC1hdmF0YXItdGFsay5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21wQXZhdGFyVGFsa0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsT25EZXN0cm95e1xyXG4gICAgQFZpZXdDaGlsZChcImF2YXRhclwiKSBhdmF0YXJDb21wOkZtb2RlQXZhdGFyUm9sZUNvbXBcclxuICAgIHJvbGVJZDpzdHJpbmdcclxuICAgIGF2YXRhclJvbGU6UGFyc2UuT2JqZWN0O1xyXG4gICAgZm1vZGVDaGF0OkZtb2RlQ2hhdDtcclxuICAgIHZvaWNlU2VydjpGbW9kZVZvaWNlU2VydmljZVxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgcm91dGVyOlJvdXRlcixcclxuICAgICAgcHJpdmF0ZSBuYXZDdHJsOk5hdkNvbnRyb2xsZXIsXHJcbiAgICAgIHByaXZhdGUgcm91dGU6QWN0aXZhdGVkUm91dGUsXHJcbiAgICAgIHB1YmxpYyBjaGF0U2VydjpDaGF0U2VydmljZSxcclxuICAgICAgcHJpdmF0ZSBuY2xvdWQ6Tm92YUNsb3VkU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSBwbGF0Zm9ybTpQbGF0Zm9ybSxcclxuICAgICAgcHJpdmF0ZSBkaWFnbm9zdGljOkRpYWdub3N0aWNcclxuICAgICl7XHJcbiAgICAgIHRoaXMudm9pY2VTZXJ2ID0gbmV3IEZtb2RlVm9pY2VTZXJ2aWNlKHRoaXMucGxhdGZvcm0sdGhpcy5kaWFnbm9zdGljKTtcclxuXHJcbiAgICAgIHRoaXMucm91dGUucGFyYW1NYXAuc3Vic2NyaWJlKHBhcmFtcz0+e1xyXG4gICAgICAgIHRoaXMucm9sZUlkID0gcGFyYW1zLmdldChcInJvbGVJZFwiKTtcclxuICAgICAgICB0aGlzLmxvYWRBdmF0YXJSb2xlKHRoaXMucm9sZUlkKVxyXG4gICAgICB9KVxyXG4gICAgICAvLyDliIfmjaLpu5HmmpfmqKHlvI9cclxuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdkYXJrJyk7XHJcbiAgICB9XHJcbiAgIFxyXG4gICAgbmdPbkluaXQoKXtcclxuXHJcbiAgICB9XHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdkYXJrJyk7XHJcbiAgICAgIHRoaXMudm9pY2VTZXJ2LnJlc3VsdFRleHQgPSBudWxsO1xyXG4gICAgICBpZih0aGlzLmZtb2RlQ2hhdCl7XHJcbiAgICAgICAgdGhpcy5mbW9kZUNoYXQubGF0ZXN0QUlSZXNwb25zZSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGdvQmFjaygpe1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ2RhcmsnKTtcclxuICAgICAgbGV0IGJhY2tVcmwgPSB0aGlzLmF2YXRhclJvbGU/LmdldChcImJhY2tVcmxcIilcclxuICAgICAgdHJ5e1xyXG4gICAgICAgIGlmKGJhY2tVcmwpe1xyXG4gICAgICAgICAgdGhpcy5uYXZDdHJsLm5hdmlnYXRlUm9vdChiYWNrVXJsKVxyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubmF2Q3RybC5uYXZpZ2F0ZVJvb3QoJy9jaGF0L3Byby9yb2xlLycrdGhpcy5yb2xlSWQpXHJcbiAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIHRoaXMubmF2Q3RybC5uYXZpZ2F0ZVJvb3QoJy9jaGF0L3Byby9yb2xlLycrdGhpcy5yb2xlSWQpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIOagueaNrklE5Yqg6L295pWw5a2X6KeS6ImyXHJcbiAgICBhc3luYyBsb2FkQXZhdGFyUm9sZShyb2xlSWQpe1xyXG4gICAgICBsZXQgcXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoXCJBdmF0YXJSb2xlXCIpXHJcbiAgICAgIHRoaXMuYXZhdGFyUm9sZSA9IGF3YWl0IHF1ZXJ5LmdldChyb2xlSWQpO1xyXG4gICAgICBsZXQgY2hhdCA9IGF3YWl0IHRoaXMuY2hhdFNlcnYuY3JlYXRlTmV3Um9sZUNoYXQodGhpcy5yb2xlSWQpXHJcbiAgICAgIGNoYXQuaXNUYWxrTW9kZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuZm1vZGVDaGF0ID0gY2hhdDtcclxuICAgICAgdGhpcy5mbW9kZUNoYXQuc2hvd0F2YXRhcigpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKXtcclxuICBcclxuICAgICAgdGhpcy5saXN0ZW5EaXZDaGFuZ2UoKVxyXG4gICAgfVxyXG4gICAgQFZpZXdDaGlsZChcImFpUmVzcENvbXBcIikgYWlSZXNwQ29tcDpFbGVtZW50UmVmXHJcbiAgICBsaXN0ZW5EaXZDaGFuZ2UoKXtcclxuICAgICAgLy8g5Yib5bu6IE11dGF0aW9uT2JzZXJ2ZXIg5a6e5L6LXHJcbiAgICAgIGxldCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKHRoaXMuYWlSZXNwQ29tcCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyDphY3nva7op4Llr5/pgInpoblcclxuICAgICAgbGV0IGNvbmZpZyA9IHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlLCBhdHRyaWJ1dGVzOnRydWUgfTtcclxuICAgICAgLy8g5byA5aeL6KeC5a+fXHJcbiAgICAgIG9ic2VydmVyLm9ic2VydmUodGhpcy5haVJlc3BDb21wLm5hdGl2ZUVsZW1lbnQsIGNvbmZpZyk7XHJcbiAgICB9XHJcbiAgICBzY3JvbGxUb0JvdHRvbShjb21wOkVsZW1lbnRSZWYpe1xyXG4gICAgICBpZihjb21wPy5uYXRpdmVFbGVtZW50Py5zY3JvbGxIZWlnaHQpe1xyXG4gICAgICAgIGNvbXAubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBjb21wLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBSeWTjeW6lOWGheWuuSBmbW9kZUNoYXQubGF0ZXN0QUlSZXNwb25zZVxyXG4gICAgICovXHJcbiAgICBcclxuICAgXHJcbn1cclxuIiwiPGlvbi1tZW51ICNtZW51IGNvbnRlbnRJZD1cIm1haW4tY29udGVudFwiIHNpZGU9XCJlbmRcIj5cclxuICA8aW9uLWhlYWRlcj5cclxuICAgIDxpb24tdG9vbGJhcj5cclxuICAgICAgPGlvbi10aXRsZT7otYTmlpk8L2lvbi10aXRsZT5cclxuICAgIDwvaW9uLXRvb2xiYXI+XHJcbiAgPC9pb24taGVhZGVyPlxyXG4gIDxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XHJcblxyXG4gICAgPGlvbi1jYXJkIHN0eWxlPVwibWFyZ2luOiAwcHg7XCI+XHJcbiAgICAgIDxpbWcgW3NyY109XCJhdmF0YXJSb2xlPy5nZXQoJ3RodW1iJylcIiBhbHQ9XCJcIj5cclxuICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cclxuICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+e3thdmF0YXJSb2xlPy5nZXQoJ3RhZ3MnKX19PC9pb24tY2FyZC1zdWJ0aXRsZT5cclxuICAgICAgICA8aW9uLWNhcmQtdGl0bGU+e3thdmF0YXJSb2xlPy5nZXQoXCJuYW1lXCIpfX08L2lvbi1jYXJkLXRpdGxlPlxyXG4gICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cclxuICAgIFxyXG4gICAgICA8aW9uLWNhcmQtY29udGVudD5cclxuICAgICAgICB7e2F2YXRhclJvbGU/LmdldChcImRlc2NcIil9fVxyXG5cclxuICAgICAgICAgICAgPGlvbi1saXN0IFtpbnNldF09XCJ0cnVlXCIgc3R5bGU9XCJtYXJnaW46MHB4O1wiPlxyXG4gICAgICAgICAgICAgIDwhLS0gPGlvbi1pdGVtPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1hdmF0YXIgKm5nSWY9XCJhdmF0YXJSb2xlPy5nZXQoJ3RodW1iJylcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBzbG90PVwic3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImF2YXRhclJvbGU/LmdldCgndGh1bWInKVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1hdmF0YXI+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPnt7YXZhdGFyUm9sZT8uZ2V0KFwibmFtZVwiKX19PC9pb24tbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9pb24taXRlbT4gLS0+XHJcbiAgICAgICAgICAgICAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiICpuZ0lmPVwiYXZhdGFyUm9sZT8uZ2V0KCdhZ2UnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1ub3RlIHNsb3Q9XCJzdGFydFwiPuW5tOm+hDwvaW9uLW5vdGU+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPnt7YXZhdGFyUm9sZT8uZ2V0KFwiYWdlXCIpfX08L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICA8L2lvbi1pdGVtPlxyXG4gICAgICAgICAgICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIiAqbmdJZj1cImF2YXRhclJvbGU/LmdldCgnZ2VuZGVyJylcIj5cclxuICAgICAgICAgICAgICAgIDxpb24tbm90ZSBzbG90PVwic3RhcnRcIj7mgKfliKs8L2lvbi1ub3RlPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbD57e2F2YXRhclJvbGU/LmdldChcImdlbmRlclwiKX19PC9pb24tbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9pb24taXRlbT5cclxuICAgICAgICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICA8aW9uLW5vdGUgc2xvdD1cInN0YXJ0XCI+56ew5Y+3PC9pb24tbm90ZT5cclxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWw+e3thdmF0YXJSb2xlPy5nZXQoXCJ0aXRsZVwiKX19PC9pb24tbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9pb24taXRlbT5cclxuICAgICAgICBcclxuICAgICAgICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICA8aW9uLW5vdGUgc2xvdD1cInN0YXJ0XCI+5pOF6ZW/PC9pb24tbm90ZT5cclxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWw+e3thdmF0YXJSb2xlPy5nZXQoXCJ0YWdzXCIpPy5qb2luKCcsJyl9fTwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XHJcblxyXG4gICAgICAgICAgICA8L2lvbi1saXN0PlxyXG4gICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxyXG4gICAgPC9pb24tY2FyZD5cclxuICAgIFxyXG4gIFxyXG4gICAgXHJcbiAgPC9pb24tY29udGVudD5cclxuPC9pb24tbWVudT5cclxuXHJcbjxkaXYgY2xhc3M9XCJpb24tcGFnZVwiIGlkPVwibWFpbi1jb250ZW50XCI+XHJcbiAgPGlvbi1oZWFkZXIgY2xhc3M9XCJpb24tbm8tYm9yZGVyXCI+XHJcbiAgICA8aW9uLXRvb2xiYXI+XHJcbiAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwic3RhcnRcIj5cclxuICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiZ29CYWNrKClcIj4gPGlvbi1pY29uIG5hbWU9XCJjaGV2cm9uLWJhY2stb3V0bGluZVwiPjwvaW9uLWljb24+IDwvaW9uLWJ1dHRvbj5cclxuICAgICAgPC9pb24tYnV0dG9ucz5cclxuICAgICAgPGlvbi10aXRsZT5cclxuICAgICAgICA8aW9uLWNoaXAgKm5nSWY9XCJhdmF0YXJSb2xlPy5nZXQoJ3RpdGxlJylcIj57e2F2YXRhclJvbGU/LmdldChcInRpdGxlXCIpfX08L2lvbi1jaGlwPlxyXG4gICAgICA8L2lvbi10aXRsZT5cclxuICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cclxuICAgICAgICA8IS0tIDxpb24tYnV0dG9uIChjbGljayk9XCJwbGF5VFRTVGV0aW5nKClcIj5UVFPmtYvor5U8L2lvbi1idXR0b24+IC0tPlxyXG4gICAgICAgIHt7YXZhdGFyUm9sZT8uZ2V0KFwibmFtZVwiKX19XHJcbiAgICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cIm1lbnUudG9nZ2xlKClcIj4gPGlvbi1pY29uIG5hbWU9XCJlbGxpcHNpcy1ob3Jpem9udGFsLW91dGxpbmVcIj48L2lvbi1pY29uPiA8L2lvbi1idXR0b24+XHJcbiAgICAgIDwvaW9uLWJ1dHRvbnM+XHJcbiAgICA8L2lvbi10b29sYmFyPlxyXG4gIDwvaW9uLWhlYWRlcj5cclxuXHJcbiAgPCEtLSA8aW9uLXNlZ21lbnQgdmFsdWU9XCJ2b2ljZVwiPlxyXG4gICAgPGlvbi1zZWdtZW50LWJ1dHRvbiAoY2xpY2spPVwiY2hhdFNlcnYuY3JlYXRlQ2hhdFBhbmVsKGF2YXRhclJvbGUpXCIgdmFsdWU9XCJjaGF0XCI+XHJcbiAgICAgIDxpb24tbGFiZWw+6IGK5aSpPC9pb24tbGFiZWw+XHJcbiAgICA8L2lvbi1zZWdtZW50LWJ1dHRvbj5cclxuICAgIDxpb24tc2VnbWVudC1idXR0b24gcm91dGVyTGluaz1cInt7Jy9hdmF0YXIvcm9sZS8nK2F2YXRhclJvbGU/LmlkfX1cIiB2YWx1ZT1cInZvaWNlXCI+XHJcbiAgICAgIDxpb24tbGFiZWw+6K+t6Z+zPC9pb24tbGFiZWw+XHJcbiAgICA8L2lvbi1zZWdtZW50LWJ1dHRvbj5cclxuICA8L2lvbi1zZWdtZW50PiAtLT5cclxuXHJcbiAgICA8IS0tIOaVsOWtl+W9ouixoe+8muWKqOeUu+aViOaenCAtLT5cclxuICAgIDxmbS1hdmF0YXItcm9sZS1pbWFnZSAqbmdJZj1cImF2YXRhclJvbGUmJmZtb2RlQ2hhdFwiIFtmbW9kZUNoYXRdPVwiZm1vZGVDaGF0XCIgW3JvbGVdPVwiYXZhdGFyUm9sZVwiICNhdmF0YXIgY2xhc3M9XCJhdmF0YXJcIj48L2ZtLWF2YXRhci1yb2xlLWltYWdlPlxyXG4gICAgPCEtLSA8Zm0tYXZhdGFyLXJvbGUtcGFydGljbGUgI2F2YXRhciBjbGFzcz1cImF2YXRhclwiPjwvZm0tYXZhdGFyLXJvbGUtcGFydGljbGU+IC0tPlxyXG5cclxuICAgIDwhLS0gQUnlm57lpI3nmoTmnIDmlrDmtojmga8gIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImFpLXJlc3AtaW5wdXRcIiAjYWlSZXNwQ29tcD57e2Ztb2RlQ2hhdD8ubGF0ZXN0QUlSZXNwb25zZSB8IGhpZGV4bWx9fTwvZGl2PlxyXG5cclxuICAgIDxmbS1tb2RhbC1jaGF0LXZvaWNlLWlucHV0ICpuZ0lmPVwiZm1vZGVDaGF0XCIgW2Ztb2RlQ2hhdF09XCJmbW9kZUNoYXRcIj48L2ZtLW1vZGFsLWNoYXQtdm9pY2UtaW5wdXQ+XHJcblxyXG48L2Rpdj5cclxuXHJcbiJdfQ==
|
|
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/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Component,ElementRef,ViewChild}from"@angular/core";import{FmodeVoiceService}from"../../voice";import{ChatService}from"../../service-fmai/service-chat";import{IonicModule,NavController,Platform,ModalController}from"@ionic/angular";import{CommonModule}from"@angular/common";import{CompAvatarParticleComponent}from"../comp-avatar-particle/comp-avatar-particle.component";import{CompAvatarRoleImageComponent}from"../comp-avatar-role-image/comp-avatar-role-image.component";import{FormsModule}from"@angular/forms";import{ActivatedRoute,Router,RouterModule}from"@angular/router";import{FmodeParse}from"@fmode/parse";import{NovaCloudService}from"../../../nova-cloud/nova-cloud.service";import{HidexmlPipe}from"../../service-fmai/service-chat";import{ModalChatVoiceInputComponent}from"../modal-chat-voice-input/modal-chat-voice-input.component";import{Diagnostic}from"@awesome-cordova-plugins/diagnostic/ngx";import*as i0 from"@angular/core";import*as i1 from"@angular/router";import*as i2 from"@ionic/angular";import*as i3 from"../../service-fmai/service-chat";import*as i4 from"../../../nova-cloud/nova-cloud.service";import*as i5 from"@awesome-cordova-plugins/diagnostic/ngx";import*as i6 from"@angular/common";const Parse=FmodeParse.with("nova");export class CompAvatarTalkComponent{constructor(o,e,n,t,i,a,r){this.router=o,this.navCtrl=e,this.route=n,this.chatServ=t,this.ncloud=i,this.platform=a,this.diagnostic=r,this.voiceServ=new FmodeVoiceService(this.platform,this.diagnostic),this.route.paramMap.subscribe((o=>{this.roleId=o.get("roleId"),this.loadAvatarRole(this.roleId)})),document.body.classList.add("dark")}ngOnInit(){}ngOnDestroy(){document.body.classList.remove("dark"),this.voiceServ.resultText=null,this.fmodeChat&&(this.fmodeChat.latestAIResponse=null)}goBack(){document.body.classList.remove("dark");let o=this.avatarRole?.get("backUrl");try{if(o)return void this.navCtrl.navigateRoot(o);this.navCtrl.navigateRoot("/chat/pro/role/"+this.roleId)}catch(o){this.navCtrl.navigateRoot("/chat/pro/role/"+this.roleId)}}async loadAvatarRole(o){let e=new Parse.Query("AvatarRole");this.avatarRole=await e.get(o);let n=await this.chatServ.createNewRoleChat(this.roleId);n.isTalkMode=!0,this.fmodeChat=n,this.fmodeChat.showAvatar()}ngAfterViewInit(){this.listenDivChange()}listenDivChange(){new MutationObserver((()=>{this.scrollToBottom(this.aiRespComp)})).observe(this.aiRespComp.nativeElement,{childList:!0,subtree:!0,attributes:!0})}scrollToBottom(o){o?.nativeElement?.scrollHeight&&(o.nativeElement.scrollTop=o.nativeElement.scrollHeight)}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompAvatarTalkComponent,deps:[{token:i1.Router},{token:i2.NavController},{token:i1.ActivatedRoute},{token:i3.ChatService},{token:i4.NovaCloudService},{token:i2.Platform},{token:i5.Diagnostic}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:CompAvatarTalkComponent,isStandalone:!0,selector:"app-comp-avatar-talk",providers:[NovaCloudService,ChatService,Diagnostic,ModalController],viewQueries:[{propertyName:"avatarComp",first:!0,predicate:["avatar"],descendants:!0},{propertyName:"aiRespComp",first:!0,predicate:["aiRespComp"],descendants:!0}],ngImport:i0,template:'<ion-menu #menu contentId="main-content" side="end">\n <ion-header>\n <ion-toolbar>\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]="avatarRole?.get(\'thumb\')" alt="">\n <ion-card-header>\n <ion-card-subtitle>{{avatarRole?.get(\'tags\')}}</ion-card-subtitle>\n <ion-card-title>{{avatarRole?.get("name")}}</ion-card-title>\n </ion-card-header>\n \n <ion-card-content>\n {{avatarRole?.get("desc")}}\n\n <ion-list [inset]="true" style="margin:0px;">\n \x3c!-- <ion-item>\n <ion-avatar *ngIf="avatarRole?.get(\'thumb\')" aria-hidden="true" slot="start">\n <img [src]="avatarRole?.get(\'thumb\')" />\n </ion-avatar>\n <ion-label>{{avatarRole?.get("name")}}</ion-label>\n </ion-item> --\x3e\n <ion-item lines="none" *ngIf="avatarRole?.get(\'age\')">\n <ion-note slot="start">年龄</ion-note>\n <ion-label>{{avatarRole?.get("age")}}</ion-label>\n </ion-item>\n <ion-item lines="none" *ngIf="avatarRole?.get(\'gender\')">\n <ion-note slot="start">性别</ion-note>\n <ion-label>{{avatarRole?.get("gender")}}</ion-label>\n </ion-item>\n <ion-item lines="none">\n <ion-note slot="start">称号</ion-note>\n <ion-label>{{avatarRole?.get("title")}}</ion-label>\n </ion-item>\n \n <ion-item lines="none">\n <ion-note slot="start">擅长</ion-note>\n <ion-label>{{avatarRole?.get("tags")?.join(\',\')}}</ion-label>\n </ion-item>\n\n </ion-list>\n </ion-card-content>\n </ion-card>\n \n \n \n </ion-content>\n</ion-menu>\n\n<div class="ion-page" id="main-content">\n <ion-header class="ion-no-border">\n <ion-toolbar>\n <ion-buttons slot="start">\n <ion-button (click)="goBack()"> <ion-icon name="chevron-back-outline"></ion-icon> </ion-button>\n </ion-buttons>\n <ion-title>\n <ion-chip *ngIf="avatarRole?.get(\'title\')">{{avatarRole?.get("title")}}</ion-chip>\n </ion-title>\n <ion-buttons slot="end">\n \x3c!-- <ion-button (click)="playTTSTeting()">TTS测试</ion-button> --\x3e\n {{avatarRole?.get("name")}}\n <ion-button (click)="menu.toggle()"> <ion-icon name="ellipsis-horizontal-outline"></ion-icon> </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n\n \x3c!-- <ion-segment value="voice">\n <ion-segment-button (click)="chatServ.createChatPanel(avatarRole)" value="chat">\n <ion-label>聊天</ion-label>\n </ion-segment-button>\n <ion-segment-button routerLink="{{\'/avatar/role/\'+avatarRole?.id}}" value="voice">\n <ion-label>语音</ion-label>\n </ion-segment-button>\n </ion-segment> --\x3e\n\n \x3c!-- 数字形象:动画效果 --\x3e\n <fm-avatar-role-image *ngIf="avatarRole&&fmodeChat" [fmodeChat]="fmodeChat" [role]="avatarRole" #avatar class="avatar"></fm-avatar-role-image>\n \x3c!-- <fm-avatar-role-particle #avatar class="avatar"></fm-avatar-role-particle> --\x3e\n\n \x3c!-- AI回复的最新消息 --\x3e\n <div class="ai-resp-input" #aiRespComp>{{fmodeChat?.latestAIResponse | hidexml}}</div>\n\n <fm-modal-chat-voice-input *ngIf="fmodeChat" [fmodeChat]="fmodeChat"></fm-modal-chat-voice-input>\n\n</div>\n\n',styles:["ion-menu ion-note{color:#ccc;font-weight:700}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.avatar{display:block;width:100%;height:100%}.ai-resp-input{font-size:1rem;color:#fff;position:fixed;top:60px;max-height:15vh;overflow-y:scroll;padding:0 10px}.user-asr-input{font-size:1rem;color:#fff;position:fixed;bottom:6vh;padding:0 10px}.test-button-group{color:#00f;position:fixed;bottom:20vh}.test-button-group button{padding:10px;margin:10px}\n"],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"directive",type:i6.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"ngmodule",type:RouterModule},{kind:"ngmodule",type:FormsModule},{kind:"ngmodule",type:IonicModule},{kind:"component",type:i2.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:i2.IonButtons,selector:"ion-buttons",inputs:["collapse"]},{kind:"component",type:i2.IonCard,selector:"ion-card",inputs:["button","color","disabled","download","href","mode","rel","routerAnimation","routerDirection","target","type"]},{kind:"component",type:i2.IonCardContent,selector:"ion-card-content",inputs:["mode"]},{kind:"component",type:i2.IonCardHeader,selector:"ion-card-header",inputs:["color","mode","translucent"]},{kind:"component",type:i2.IonCardSubtitle,selector:"ion-card-subtitle",inputs:["color","mode"]},{kind:"component",type:i2.IonCardTitle,selector:"ion-card-title",inputs:["color","mode"]},{kind:"component",type:i2.IonChip,selector:"ion-chip",inputs:["color","disabled","mode","outline"]},{kind:"component",type:i2.IonContent,selector:"ion-content",inputs:["color","fixedSlotPlacement","forceOverscroll","fullscreen","scrollEvents","scrollX","scrollY"]},{kind:"component",type:i2.IonHeader,selector:"ion-header",inputs:["collapse","mode","translucent"]},{kind:"component",type:i2.IonIcon,selector:"ion-icon",inputs:["color","flipRtl","icon","ios","lazy","md","mode","name","sanitize","size","src"]},{kind:"component",type:i2.IonItem,selector:"ion-item",inputs:["button","color","detail","detailIcon","disabled","download","href","lines","mode","rel","routerAnimation","routerDirection","target","type"]},{kind:"component",type:i2.IonLabel,selector:"ion-label",inputs:["color","mode","position"]},{kind:"component",type:i2.IonList,selector:"ion-list",inputs:["inset","lines","mode"]},{kind:"component",type:i2.IonMenu,selector:"ion-menu",inputs:["contentId","disabled","maxEdgeStart","menuId","side","swipeGesture","type"]},{kind:"component",type:i2.IonNote,selector:"ion-note",inputs:["color","mode"]},{kind:"component",type:i2.IonTitle,selector:"ion-title",inputs:["color","size"]},{kind:"component",type:i2.IonToolbar,selector:"ion-toolbar",inputs:["color","mode"]},{kind:"component",type:CompAvatarRoleImageComponent,selector:"fm-avatar-role-image",inputs:["fmodeChat","role"]},{kind:"component",type:ModalChatVoiceInputComponent,selector:"fm-modal-chat-voice-input",inputs:["fmodeChat","talkMode"]},{kind:"pipe",type:HidexmlPipe,name:"hidexml"}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompAvatarTalkComponent,decorators:[{type:Component,args:[{selector:"app-comp-avatar-talk",standalone:!0,imports:[CommonModule,RouterModule,FormsModule,IonicModule,CompAvatarParticleComponent,CompAvatarRoleImageComponent,ModalChatVoiceInputComponent,HidexmlPipe],providers:[NovaCloudService,ChatService,Diagnostic,ModalController],template:'<ion-menu #menu contentId="main-content" side="end">\n <ion-header>\n <ion-toolbar>\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]="avatarRole?.get(\'thumb\')" alt="">\n <ion-card-header>\n <ion-card-subtitle>{{avatarRole?.get(\'tags\')}}</ion-card-subtitle>\n <ion-card-title>{{avatarRole?.get("name")}}</ion-card-title>\n </ion-card-header>\n \n <ion-card-content>\n {{avatarRole?.get("desc")}}\n\n <ion-list [inset]="true" style="margin:0px;">\n \x3c!-- <ion-item>\n <ion-avatar *ngIf="avatarRole?.get(\'thumb\')" aria-hidden="true" slot="start">\n <img [src]="avatarRole?.get(\'thumb\')" />\n </ion-avatar>\n <ion-label>{{avatarRole?.get("name")}}</ion-label>\n </ion-item> --\x3e\n <ion-item lines="none" *ngIf="avatarRole?.get(\'age\')">\n <ion-note slot="start">年龄</ion-note>\n <ion-label>{{avatarRole?.get("age")}}</ion-label>\n </ion-item>\n <ion-item lines="none" *ngIf="avatarRole?.get(\'gender\')">\n <ion-note slot="start">性别</ion-note>\n <ion-label>{{avatarRole?.get("gender")}}</ion-label>\n </ion-item>\n <ion-item lines="none">\n <ion-note slot="start">称号</ion-note>\n <ion-label>{{avatarRole?.get("title")}}</ion-label>\n </ion-item>\n \n <ion-item lines="none">\n <ion-note slot="start">擅长</ion-note>\n <ion-label>{{avatarRole?.get("tags")?.join(\',\')}}</ion-label>\n </ion-item>\n\n </ion-list>\n </ion-card-content>\n </ion-card>\n \n \n \n </ion-content>\n</ion-menu>\n\n<div class="ion-page" id="main-content">\n <ion-header class="ion-no-border">\n <ion-toolbar>\n <ion-buttons slot="start">\n <ion-button (click)="goBack()"> <ion-icon name="chevron-back-outline"></ion-icon> </ion-button>\n </ion-buttons>\n <ion-title>\n <ion-chip *ngIf="avatarRole?.get(\'title\')">{{avatarRole?.get("title")}}</ion-chip>\n </ion-title>\n <ion-buttons slot="end">\n \x3c!-- <ion-button (click)="playTTSTeting()">TTS测试</ion-button> --\x3e\n {{avatarRole?.get("name")}}\n <ion-button (click)="menu.toggle()"> <ion-icon name="ellipsis-horizontal-outline"></ion-icon> </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n\n \x3c!-- <ion-segment value="voice">\n <ion-segment-button (click)="chatServ.createChatPanel(avatarRole)" value="chat">\n <ion-label>聊天</ion-label>\n </ion-segment-button>\n <ion-segment-button routerLink="{{\'/avatar/role/\'+avatarRole?.id}}" value="voice">\n <ion-label>语音</ion-label>\n </ion-segment-button>\n </ion-segment> --\x3e\n\n \x3c!-- 数字形象:动画效果 --\x3e\n <fm-avatar-role-image *ngIf="avatarRole&&fmodeChat" [fmodeChat]="fmodeChat" [role]="avatarRole" #avatar class="avatar"></fm-avatar-role-image>\n \x3c!-- <fm-avatar-role-particle #avatar class="avatar"></fm-avatar-role-particle> --\x3e\n\n \x3c!-- AI回复的最新消息 --\x3e\n <div class="ai-resp-input" #aiRespComp>{{fmodeChat?.latestAIResponse | hidexml}}</div>\n\n <fm-modal-chat-voice-input *ngIf="fmodeChat" [fmodeChat]="fmodeChat"></fm-modal-chat-voice-input>\n\n</div>\n\n',styles:["ion-menu ion-note{color:#ccc;font-weight:700}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.avatar{display:block;width:100%;height:100%}.ai-resp-input{font-size:1rem;color:#fff;position:fixed;top:60px;max-height:15vh;overflow-y:scroll;padding:0 10px}.user-asr-input{font-size:1rem;color:#fff;position:fixed;bottom:6vh;padding:0 10px}.test-button-group{color:#00f;position:fixed;bottom:20vh}.test-button-group button{padding:10px;margin:10px}\n"]}]}],ctorParameters:()=>[{type:i1.Router},{type:i2.NavController},{type:i1.ActivatedRoute},{type:i3.ChatService},{type:i4.NovaCloudService},{type:i2.Platform},{type:i5.Diagnostic}],propDecorators:{avatarComp:[{type:ViewChild,args:["avatar"]}],aiRespComp:[{type:ViewChild,args:["aiRespComp"]}]}});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2F2YXRhci9jb21wLWF2YXRhci10YWxrL2NvbXAtYXZhdGFyLXRhbGsuY29tcG9uZW50Lm1qcw==`
|
|
10
|
+
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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/avatar/index.mjs
|
|
7
|
+
*/
|
|
8
|
+
export*from"./avatar.module";export*from"./interface-avatar-role";export*from"./comp-avatar-particle";export*from"./comp-avatar-role-image/comp-avatar-role-image.component";export*from"./comp-avatar-role-video/comp-avatar-role-video.component";export*from"./comp-avatar-talk/comp-avatar-talk.component";export*from"./modal-chat-voice-input/modal-chat-voice-input.component";
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2F2YXRhci9pbmRleC5tanM=`
|
|
10
|
+
|
|
@@ -1,2 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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/avatar/interface-avatar-role.mjs
|
|
7
|
+
*/
|
|
8
|
+
export{};
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2F2YXRhci9pbnRlcmZhY2UtYXZhdGFyLXJvbGUubWpz`
|
|
10
|
+
|