fmode-ng 0.0.5 → 0.0.6

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.
@@ -5,6 +5,6 @@
5
5
  * 保留所有权利 All Rights Reserved.
6
6
  * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2020/lib/aigc/service-fmai/service-imagine/imagine.service.mjs
7
7
  */
8
- import{HttpClient}from"@angular/common/http";import{Injectable}from"@angular/core";import{NovaCloudService}from"../../../nova-cloud/nova-cloud.service";import*as Parse from"parse";import*as i0 from"@angular/core";import*as i1 from"@angular/common/http";import*as i2 from"../../../nova-cloud/nova-cloud.service";export class ImagineService{constructor(e,t){this.http=e,this.ncloud=t,this.taskDetailMap={},this.myWorkList=[]}async draw(e){let t=await this.ncloud.apig("aigc/sdapi/v1/draw",e),r=t?.paintingSign;return r&&setTimeout((async()=>{let e=new Parse.Query("ImagineWork");e.equalTo("taskId",r);let t=await e.first();console.log(t),t?.id&&this.myWorkList.unshift(t)}),1e3),t}async taskDetail(e){let t=await this.ncloud.apig("aigc/sdapi/v1/task/detail",{taskId:e});return console.log(t),this.taskDetailMap[e]=t,t}getMyWorkQuery(){let e=Parse.User.current();if(!e?.id)return;let t=this.getWorkQuery();return t.equalTo("user",e.toPointer()),t}getWorkQuery(){let e=new Parse.Query("ImagineWork");return e.include("module","user"),e.notEqualTo("isDeleted",!0),e.addDescending("createdAt"),e}}ImagineService.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:ImagineService,deps:[{token:i1.HttpClient},{token:i2.NovaCloudService}],target:i0.ɵɵFactoryTarget.Injectable}),ImagineService.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:ImagineService,providedIn:"root"}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:ImagineService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:function(){return[{type:i1.HttpClient},{type:i2.NovaCloudService}]}});
8
+ import{HttpClient}from"@angular/common/http";import{Injectable}from"@angular/core";import{NovaCloudService}from"../../../nova-cloud/nova-cloud.service";import*as Parse from"parse";import*as i0 from"@angular/core";import*as i1 from"@angular/common/http";import*as i2 from"../../../nova-cloud/nova-cloud.service";export class ImagineService{constructor(e,t){this.http=e,this.ncloud=t,this.taskDetailMap={},this.myWorkList=[]}async drawDalle(e){e.size=e?.size||"1024x1024",e.style=e?.style||"natural";let t={model:"dall-e-3",prompt:e.prompt,n:1,quality:"hd",response_format:"url",size:e.size,style:e.style};if(e.prompt?.length>3e3)throw"prompt maximum < 4000 characters";let r=await this.ncloud.apigTest("aigc/gpt/v1/images/generations",t);return console.log(r),r}b64DataToBase64Image(e){let t=atob(e),r=new Blob([t],{type:"image/webp"});new Promise((e=>{let t=new FileReader;t.onloadend=function(){let r=t.result;console.log(r),e(r)},t.readAsDataURL(r)}))}async draw(e){let t=await this.ncloud.apig("aigc/sdapi/v1/draw",e),r=t?.paintingSign;return r&&setTimeout((async()=>{let e=new Parse.Query("ImagineWork");e.equalTo("taskId",r);let t=await e.first();console.log(t),t?.id&&this.myWorkList.unshift(t)}),1e3),t}async taskDetail(e){let t=await this.ncloud.apig("aigc/sdapi/v1/task/detail",{taskId:e});return console.log(t),this.taskDetailMap[e]=t,t}getMyWorkQuery(){let e=Parse.User.current();if(!e?.id)return;let t=this.getWorkQuery();return t.equalTo("user",e.toPointer()),t}getWorkQuery(){let e=new Parse.Query("ImagineWork");return e.include("module","user"),e.notEqualTo("isDeleted",!0),e.addDescending("createdAt"),e}}ImagineService.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:ImagineService,deps:[{token:i1.HttpClient},{token:i2.NovaCloudService}],target:i0.ɵɵFactoryTarget.Injectable}),ImagineService.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:ImagineService,providedIn:"root"}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:ImagineService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:function(){return[{type:i1.HttpClient},{type:i2.NovaCloudService}]}});
9
9
  var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIwL2xpYi9haWdjL3NlcnZpY2UtZm1haS9zZXJ2aWNlLWltYWdpbmUvaW1hZ2luZS5zZXJ2aWNlLm1qcw==`
10
10
 
@@ -5,6 +5,6 @@
5
5
  * 保留所有权利 All Rights Reserved.
6
6
  * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2020/lib/nova-cloud/nova-cloud.service.mjs
7
7
  */
8
- import{Injectable}from"@angular/core";import{HttpClient,HttpHeaders}from"@angular/common/http";import*as Parse from"parse";import*as i0 from"@angular/core";import*as i1 from"@angular/common/http";export class NovaCloudService{constructor(e){this.http=e,this.serverURL="https://server.fmode.cn/api",localStorage.setItem("NOVA_APIG_SERVER","aHR0cHMlM0ElMkYlMkZzZXJ2ZXIuZm1vZGUuY24lMkZhcGklMkZhcGlnJTJG")}novaql(e,t){let r=this.serverURL+"/novaql/select",o={sql:e};return o&&t?.length>0&&(o.params=JSON.stringify(t)),new Promise(((e,t)=>{this.http.post(r,o,{headers:new HttpHeaders({"Content-Type":"application/json"}),withCredentials:!1}).subscribe((t=>{if(t&&200==t.code){let r=t.data;e(r)}}),(e=>{t(e)}))}))}apig(e,t,r="post"){localStorage.setItem("NOVA_APIG_SERVER","aHR0cHMlM0ElMkYlMkZzZXJ2ZXIuZm1vZGUuY24lMkZhcGklMkZhcGlnJTJG");let o=localStorage.getItem("NOVA_APIG_SERVER");o=decodeURIComponent(atob(o)),e=o+e,console.log(e);let a=Parse.User.current();return new Promise(((o,n)=>{try{this.http.request(r,e,{body:t||null,headers:new HttpHeaders({"Content-Type":"application/json",Authorization:`Bearer ${a?.getSessionToken()}`}),withCredentials:!1}).subscribe((e=>{if(e&&200==e.code||e&&1==e.code||e&&0==e.code){let t=e?.data;o(t)}else o(null)}),(e=>{alert(e.mess),n(e)}))}catch(e){return alert("请求出错")}}))}api(e,t){return e=this.serverURL+e,new Promise(((r,o)=>{this.http.post(e,t,{headers:new HttpHeaders({"Content-Type":"application/json"}),withCredentials:!1}).subscribe((e=>{if(e&&200==e.code||e&&1==e.code){let t=e.data;r(t)}else r(null)}),(e=>{o(e)}))}))}searchParse(e){let t={};if((e=e||location.search)&&e.length>1){let r=(e=e.substring(1)).split("&");for(let e=0;e<r.length;e++){if(!r[e])continue;let o=r[e].split("=");t[o[0]]=void 0===o[1]?"":o[1]}}return t}}NovaCloudService.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:NovaCloudService,deps:[{token:i1.HttpClient}],target:i0.ɵɵFactoryTarget.Injectable}),NovaCloudService.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:NovaCloudService,providedIn:"root"}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:NovaCloudService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:function(){return[{type:i1.HttpClient}]}});
8
+ import{Injectable}from"@angular/core";import{HttpClient,HttpHeaders}from"@angular/common/http";import*as Parse from"parse";import*as i0 from"@angular/core";import*as i1 from"@angular/common/http";export class NovaCloudService{constructor(e){this.http=e,this.serverURL="https://server.fmode.cn/api",localStorage.setItem("NOVA_APIG_SERVER","aHR0cHMlM0ElMkYlMkZzZXJ2ZXIuZm1vZGUuY24lMkZhcGklMkZhcGlnJTJG")}novaql(e,t){let r=this.serverURL+"/novaql/select",o={sql:e};return o&&t?.length>0&&(o.params=JSON.stringify(t)),new Promise(((e,t)=>{this.http.post(r,o,{headers:new HttpHeaders({"Content-Type":"application/json"}),withCredentials:!1}).subscribe((t=>{if(t&&200==t.code){let r=t.data;e(r)}}),(e=>{t(e)}))}))}apig(e,t,r="post"){localStorage.setItem("NOVA_APIG_SERVER","aHR0cHMlM0ElMkYlMkZzZXJ2ZXIuZm1vZGUuY24lMkZhcGklMkZhcGlnJTJG");let o=localStorage.getItem("NOVA_APIG_SERVER");o=decodeURIComponent(atob(o)),e=o+e,console.log(e);let a=Parse.User.current();return new Promise(((o,n)=>{try{this.http.request(r,e,{body:t||null,headers:new HttpHeaders({"Content-Type":"application/json",Authorization:`Bearer ${a?.getSessionToken()}`}),withCredentials:!1}).subscribe((e=>{if(e&&200==e.code||e&&1==e.code||e&&0==e.code){let t=e?.data;o(t)}else o(null)}),(e=>{alert(e.mess),n(e)}))}catch(e){return alert("请求出错")}}))}apigTest(e,t,r="post"){e="https://test.fmode.cn/api/apig/"+e,console.log(e);let o=Parse.User.current();return t.token=`Bearer ${o?.getSessionToken()}`,new Promise(((o,a)=>{try{this.http.request(r,e,{body:t||null,headers:new HttpHeaders({"Content-Type":"application/json"}),withCredentials:!1}).subscribe((e=>{if(e&&200==e.code||e&&1==e.code||e&&0==e.code){let t=e?.data;o(t)}else o(null)}),(e=>{alert(e.mess),a(e)}))}catch(e){return alert("请求出错")}}))}api(e,t){return e=this.serverURL+e,new Promise(((r,o)=>{this.http.post(e,t,{headers:new HttpHeaders({"Content-Type":"application/json"}),withCredentials:!1}).subscribe((e=>{if(e&&200==e.code||e&&1==e.code){let t=e.data;r(t)}else r(null)}),(e=>{o(e)}))}))}searchParse(e){let t={};if((e=e||location.search)&&e.length>1){let r=(e=e.substring(1)).split("&");for(let e=0;e<r.length;e++){if(!r[e])continue;let o=r[e].split("=");t[o[0]]=void 0===o[1]?"":o[1]}}return t}}NovaCloudService.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:NovaCloudService,deps:[{token:i1.HttpClient}],target:i0.ɵɵFactoryTarget.Injectable}),NovaCloudService.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:NovaCloudService,providedIn:"root"}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:NovaCloudService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:function(){return[{type:i1.HttpClient}]}});
9
9
  var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIwL2xpYi9ub3ZhLWNsb3VkL25vdmEtY2xvdWQuc2VydmljZS5tanM=`
10
10
 
@@ -5,6 +5,6 @@
5
5
  * 保留所有权利 All Rights Reserved.
6
6
  * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/fesm2015/fmode-ng.mjs
7
7
  */
8
- import*as i0 from"@angular/core";import{Injectable,Component,Input,ViewChild,NgModule,EventEmitter,Output}from"@angular/core";import{__awaiter}from"tslib";import*as Parse from"parse";import*as i1 from"@angular/common/http";import{HttpHeaders}from"@angular/common/http";import{finalize,Observable,bufferTime,concatMap,delay}from"rxjs";import*as i1$1 from"@angular/router";import{RouterModule}from"@angular/router";import*as i1$3 from"@angular/common";import{CommonModule}from"@angular/common";import hljs from"highlight.js";import MarkdownIt from"markdown-it";import abbr from"markdown-it-abbr";import footnote from"markdown-it-footnote";import deflist from"markdown-it-deflist";import mark from"markdown-it-mark";import ins from"markdown-it-ins";import sub from"markdown-it-sub";import sup from"markdown-it-sup";import mathjax from"markdown-it-mathjax";import ruby from"markdown-it-ruby";import plantumlEncoder from"plantuml-encoder";import $ from"jquery";import*as i1$2 from"@angular/platform-browser";import Recorder from"recorder-core";import"recorder-core/src/engine/pcm";import"recorder-core/src/engine/wav";import"recorder-core/src/extensions/waveview";import CryptoJS from"crypto-js";import*as AMapLoader from"@amap/amap-jsapi-loader";import*as i3 from"@ionic/angular";import{IonModal,IonicModule}from"@ionic/angular";import*as i2 from"@angular/forms";import{FormsModule,ReactiveFormsModule}from"@angular/forms";import ObsClient from"esdk-obs-browserjs";class NovaCloudService{constructor(e){this.http=e,this.serverURL="https://server.fmode.cn/api",localStorage.setItem("NOVA_APIG_SERVER","aHR0cHMlM0ElMkYlMkZzZXJ2ZXIuZm1vZGUuY24lMkZhcGklMkZhcGlnJTJG")}novaql(e,t){let o=this.serverURL+"/novaql/select",n={sql:e};return n&&(null==t?void 0:t.length)>0&&(n.params=JSON.stringify(t)),new Promise(((e,t)=>{this.http.post(o,n,{headers:new HttpHeaders({"Content-Type":"application/json"}),withCredentials:!1}).subscribe((t=>{if(t&&200==t.code){let o=t.data;e(o)}}),(e=>{t(e)}))}))}apig(e,t,o="post"){localStorage.setItem("NOVA_APIG_SERVER","aHR0cHMlM0ElMkYlMkZzZXJ2ZXIuZm1vZGUuY24lMkZhcGklMkZhcGlnJTJG");let n=localStorage.getItem("NOVA_APIG_SERVER");n=decodeURIComponent(atob(n)),e=n+e,console.log(e);let i=Parse.User.current();return new Promise(((n,r)=>{try{this.http.request(o,e,{body:t||null,headers:new HttpHeaders({"Content-Type":"application/json",Authorization:`Bearer ${null==i?void 0:i.getSessionToken()}`}),withCredentials:!1}).subscribe((e=>{if(e&&200==e.code||e&&1==e.code||e&&0==e.code){let t=null==e?void 0:e.data;n(t)}else n(null)}),(e=>{alert(e.mess),r(e)}))}catch(e){return alert("请求出错")}}))}api(e,t){return e=this.serverURL+e,new Promise(((o,n)=>{this.http.post(e,t,{headers:new HttpHeaders({"Content-Type":"application/json"}),withCredentials:!1}).subscribe((e=>{if(e&&200==e.code||e&&1==e.code){let t=e.data;o(t)}else o(null)}),(e=>{n(e)}))}))}searchParse(e){let t={};if((e=e||location.search)&&e.length>1){let o=(e=e.substring(1)).split("&");for(let e=0;e<o.length;e++){if(!o[e])continue;let n=o[e].split("=");t[n[0]]=void 0===n[1]?"":n[1]}}return t}}NovaCloudService.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:NovaCloudService,deps:[{token:i1.HttpClient}],target:i0.ɵɵFactoryTarget.Injectable}),NovaCloudService.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:NovaCloudService,providedIn:"root"}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:NovaCloudService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:function(){return[{type:i1.HttpClient}]}});class ImagineService{constructor(e,t){this.http=e,this.ncloud=t,this.taskDetailMap={},this.myWorkList=[]}draw(e){return __awaiter(this,void 0,void 0,(function*(){let t=yield this.ncloud.apig("aigc/sdapi/v1/draw",e),o=null==t?void 0:t.paintingSign;return o&&setTimeout((()=>__awaiter(this,void 0,void 0,(function*(){let e=new Parse.Query("ImagineWork");e.equalTo("taskId",o);let t=yield e.first();console.log(t),(null==t?void 0:t.id)&&this.myWorkList.unshift(t)}))),1e3),t}))}taskDetail(e){return __awaiter(this,void 0,void 0,(function*(){let t=yield this.ncloud.apig("aigc/sdapi/v1/task/detail",{taskId:e});return console.log(t),this.taskDetailMap[e]=t,t}))}getMyWorkQuery(){let e=Parse.User.current();if(!(null==e?void 0:e.id))return;let t=this.getWorkQuery();return t.equalTo("user",e.toPointer()),t}getWorkQuery(){let e=new Parse.Query("ImagineWork");return e.include("module","user"),e.notEqualTo("isDeleted",!0),e.addDescending("createdAt"),e}}ImagineService.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:ImagineService,deps:[{token:i1.HttpClient},{token:NovaCloudService}],target:i0.ɵɵFactoryTarget.Injectable}),ImagineService.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:ImagineService,providedIn:"root"}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:ImagineService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:function(){return[{type:i1.HttpClient},{type:NovaCloudService}]}});let colorMap=["primary","secondary","tertiary","success","warning","danger","light","medium","dark"];const MASK_LIST=[{name:"执行李",type:"employee",title:"首席执行官",desc:"一位富有远见和领导才能的创业新秀。她具备战略思维和决策能力,能够为公司设定长期目标并领导团队实现这些目标。",color:colorMap[0],cover:"https://imgsource.huashi6.com/images/ai/2023/9/29/15_48766.jpg?e=1695974629&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:oPkQSsyQLLD08R_J4SMeO1f1RdM="},{name:"技术刘",type:"employee",title:"首席技术官",desc:"一位技术专家,拥有广泛的技术知识和经验。他善于解决复杂的技术问题,并能够领导开发团队实施创新的技术解决方案。",color:colorMap[1],cover:["https://imgsource.huashi6.com/images/ai/2023/9/29/9_619877.jpg?e=1695952672&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:LDuSg8_n5g4Rj_8F5PKrGzV4T54=","https://imgsource.huashi6.com/images/ai/2023/9/27/20_17767.jpg?e=1695819037&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:a9uOeeJMN2oopK-3WQZzldPXfH0="]},{name:"点子王",type:"employee",title:"首席运营官",desc:"一位富有创意和市场洞察力的市场营销专家。她擅长制定营销策略,了解目标受众,并能够利用各种渠道和工具推广公司的产品或服务。",color:colorMap[2],cover:"https://imgsource.huashi6.com/images/ai/2023/9/29/9_186291.jpg?e=1695952125&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:EhEUtwnC9hpu-SXXsBrp2Q-rcJk="},{title:"设计总监",name:"李欣",type:"employee",desc:"一位富有创造力和用户导向思维的设计师。她能够理解用户需求,并通过设计直观、易用且吸引人的用户界面来提供出色的用户体验。",color:colorMap[3],cover:"https://imgsource.huashi6.com/images/ai/2023/9/29/9_18099.jpg?e=1695952201&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:G_a60v52iTTqvJgeTSa_8zJUY2w="},{title:"运营经理",name:"刘洁",type:"employee",desc:"一位组织能力强、注重细节并擅长解决问题的运营专家。她能够协调各个部门的工作,并确保公司的运营流程高效运行。",color:colorMap[4],cover:"https://imgsource.huashi6.com/images/ai/2023/9/29/9_842519.jpg?e=1695952125&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:FM_kKZDzkcLQ1EX4266dXU46cRc="},{title:"销售经理",name:"张伟",type:"employee",desc:"一位富有销售天赋和人际交往能力的销售专家。他善于与客户建立良好的关系,并能够推动销售团队实现业绩目标。",color:colorMap[5],cover:"https://imgsource.huashi6.com/images/ai/2023/9/29/15_739110.jpg?e=1695974920&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:vg_sn-qn67MJS-7j2o7mWzOCUSk="},{title:"数据分析师",name:"杨晨",type:"employee",desc:"一位善于解读数据和提供商业洞察的数据分析专家。她能够收集、分析和解释数据,为公司的决策制定提供有力的支持。",color:colorMap[6],cover:"https://imgsource.huashi6.com/images/ai/2023/9/29/15_204321.jpg?e=1695974779&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:dC2sGmJekSPBTCycPF76BkQPBoo="},{title:"财务经理",name:"赵晓",type:"employee",desc:"一位精通财务管理和分析的专业人士。她能够制定财务战略、管理公司的财务流程,并提供准确的财务报告和预测。",color:colorMap[7],cover:"https://imgsource.huashi6.com/images/ai/2023/9/29/15_947878.jpg?e=1695974779&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:TFGn0_l2PqhUTe9G4A3it769hcU="},{title:"品牌专员",name:"王雅",type:"employee",desc:"一位富有创意和品牌意识的专业人士。她能够塑造和管理公司的品牌形象,制定品牌营销策略,并与内部和外部利益相关者建立良好的合作关系。",color:colorMap[8],cover:["https://imgsource.huashi6.com/images/ai/2023/9/29/15_129581.jpg?e=1695975151&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:YQrpiv1hBKRPIdaEbDDDkLFuPG8=","https://imgsource.huashi6.com/images/ai/2023/9/29/15_912136.jpg?e=1695975151&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:8SVMU1rdKD8eaJ1gH_qGQzcrMhM="]},{title:"全科",name:"孔博",type:"teacher",desc:"擅长全科教学的金牌教师,知识面广泛,博古通今,因材施教,耐心稳重。",color:colorMap[0],cover:["https://imgsource.huashi6.com/images/ai/2023/10/18/12_40958.jpg?e=1697604189&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:U7r1Td30lXdf9mE1TMVAnDhBP6c="]},{title:"语文",name:"王明",type:"teacher",desc:"激发学生对文学的热爱,引导他们成为优秀的作家和沟通者。",color:colorMap[1],cover:["https://imgsource.huashi6.com/images/ai/2023/10/18/11_698893.jpg?e=1697602689&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:hK_AuY7BA1pp33QVeUue5QjIg4o="]},{title:"数学",name:"万红",type:"teacher",desc:"以清晰的逻辑和耐心的指导,帮助学生掌握数学的基础知识和解题技巧。",color:colorMap[2],cover:["https://imgsource.huashi6.com/images/ai/2023/10/18/11_256253.jpg?e=1697603314&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:K2iqp_ZzHYzXNu_0VJlywyANHp8="]},{title:"英语",name:"张瑞",type:"teacher",desc:"激发学生对英语学习的兴趣,培养他们的听、说、读、写能力,让他们自信地运用英语。",color:colorMap[3],cover:["https://imgsource.huashi6.com/images/ai/2023/10/18/12_266171.jpg?e=1697603707&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:uhpxBbT-jlSt_KjAnj0SFsFAjWU="]},{title:"物理",name:"金晓",type:"teacher",desc:"通过实验和案例,帮助学生理解物理原理,培养他们的科学思维和实验技能。",color:colorMap[4],cover:["https://imgsource.huashi6.com/images/ai/2023/10/18/11_694925.jpg?e=1697603071&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:FznZxhkYUrZ-BzX05dvNt8acTUw="]},{title:"化学",name:"陈华",type:"teacher",desc:"激发学生对化学的好奇心,教授他们化学知识和实验技巧,培养他们的实验和分析能力。",color:colorMap[5],cover:["https://imgsource.huashi6.com/images/ai/2023/10/18/11_942234.jpg?e=1697603169&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:__2T8cxLl4J0AwMR9MJdDiooDF0="]},{title:"生物",name:"杨婷",type:"teacher",desc:"引导学生探索生命的奥秘,培养他们的科学观察和实验能力,让他们热爱生物科学。",color:colorMap[6],cover:["https://imgsource.huashi6.com/images/ai/2023/10/18/12_330738.jpg?e=1697603491&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:2K5-DHPnUQ-R9GGxtWKiEG68QlE="]},{title:"历史",name:"赵亮",type:"teacher",desc:"帮助学生了解历史事件和文化背景,培养他们的历史意识和批判思维。",color:colorMap[7],cover:["https://imgsource.huashi6.com/images/ai/2023/10/18/11_256302.jpg?e=1697602689&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:YP7ffC1YKO-Pb0C3ks4caT0QqZk="]},{title:"地理",name:"林丽",type:"teacher",desc:"引导学生探索地球的奥秘,培养他们的地理观察和分析能力,让他们热爱地理科学。",color:colorMap[8],cover:["https://imgsource.huashi6.com/images/ai/2023/10/18/12_555804.jpg?e=1697604054&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:xLN4QW0x9jx9lEB4EFHWvI_gEsI="]}],API_BASE="https://test.fmode.cn/api/apig/aigc/gpt";class FmodeChat{constructor(e,t,o){this.messageList=[{role:"system",content:"系统提示:AI仅供参考"}],this.mask=t,this.chatId=e,this.chat=o}sendMessage(e="FmodeAiTest测试问题"){this.messageList.push({role:"user",content:e,createdAt:new Date});let t=new FmodeChatCompletion(this.fixMessageList(this.messageList));t.sendCompletion().pipe(finalize((()=>{this.messageList[t.indexOfList].complete=!0}))).subscribe((e=>{this.messageList[t.indexOfList]=e}))}fixMessageList(e){return e.map((e=>({role:e.role,content:e.content})))}nowStr(){let e=new Date;return`${e.getFullYear()}/${e.getMonth()+1}/${e.getDate()} ${e.getHours()}:${e.getMinutes()}:${e.getSeconds()}`}}class FmodeChatCompletion{constructor(e){this.content="",this.contentBuffer=[],this.isCompleted=!1,this.indexOfList=Number(e.length),this.messages=e}sendCompletion(){let e={messages:this.messages,stream:!0,model:"gpt-3.5-turbo",temperature:.5,presence_penalty:0,frequency_penalty:0};return new Observable((t=>{let o=RequestFmodeChatApi("/v1/chat/completions",e).subscribe((e=>{var n,i,r;let a=String(e);if(a.indexOf("data: {")>-1){let e=chunkToJson(a),s=(null===(r=null===(i=null===(n=null==e?void 0:e.choices)||void 0===n?void 0:n[0])||void 0===i?void 0:i.delta)||void 0===r?void 0:r.content)||"";this.contentBuffer.push(s),this.contentPusher||(this.contentPusher=setInterval((()=>{var e,n;this.isCompleted&&0==(null===(e=this.contentBuffer)||void 0===e?void 0:e.length)&&(o.unsubscribe(),clearInterval(this.contentPusher),t.complete()),(null===(n=this.contentBuffer)||void 0===n?void 0:n.length)>0&&(this.content+=this.contentBuffer.shift(),t.next({role:"assistant",content:this.content,createdAt:new Date}))}),100))}"data: [DONE]"===a&&(this.isCompleted=!0)}))})).pipe(bufferTime(100),concatMap((e=>e)),delay(200))}}function chunkToJson(e){let t;try{t=JSON.parse(e.replaceAll("data: ",""))}catch(e){console.error(e)}return t||{}}function RequestFmodeChatApi(e,t,o="POST"){return new Observable((n=>{var i;let r=API_BASE+e,a=`Bearer ${(null===(i=Parse.User.current())||void 0===i?void 0:i.getSessionToken())||localStorage.getItem("FMODE_AI_TOKEN")}`;return t.token=a,t&&(t=JSON.stringify(t)),fetch(r,{headers:{"Content-Type":"text/plain","Cache-Control":"no-cache"},body:t||null,method:o,credentials:"omit",mode:"cors"}).then((e=>{var t;let o="";{let i=null===(t=e.body)||void 0===t?void 0:t.getReader();const r=new TextDecoder;let a=new ReadableStream({start(e){!function read(){i.read().then((({done:t,value:o})=>{if(t)return e.close(),void n.complete();e.enqueue(o),read()}))}()}}).getReader();a.read().then((function processStream({done:e,value:t}){if(e)return;!function processData(e){let t=(o+e).split("\n");if((null==t?void 0:t.length)>1){for(let e=0;e<t.length-1;e++){let o=t[e];n.next(o)}o=t[t.length-1]}}(r.decode(t)),a.read().then(processStream)}))}})).catch((e=>n.error(e))),()=>{}}))}function JsonToFormData(e){const t=new FormData;return function appendFormData(e,o=""){Array.isArray(e)?e.forEach(((e,t)=>{appendFormData(e,`${o}[${t}]`)})):"object"==typeof e&&null!==e?Object.keys(e).forEach((t=>{const n=o?`${o}.${t}`:t;appendFormData(e[t],n)})):t.append(o,e)}(e),t}class ChatService{constructor(e){this.router=e,this.maskList=[],this.chatMap={},this.maskList=MASK_LIST}createChatPanel(e,t){let o=(null==t?void 0:t.id)||"new";t=new FmodeChat(o,e,t),this.chatMap[o]=t,this.router.navigate(["/chat/pro/chat/"+o])}}ChatService.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:ChatService,deps:[{token:i1$1.Router}],target:i0.ɵɵFactoryTarget.Injectable}),ChatService.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:ChatService,providedIn:"root"}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:ChatService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:function(){return[{type:i1$1.Router}]}});class FmaiService{constructor(e,t){this.imagine=e,this.chat=t}}FmaiService.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmaiService,deps:[{token:ImagineService},{token:ChatService}],target:i0.ɵɵFactoryTarget.Injectable}),FmaiService.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmaiService,providedIn:"root"}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmaiService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:function(){return[{type:ImagineService},{type:ChatService}]}});const md=new MarkdownIt({html:!0,xhtmlOut:!0,breaks:!1,linkify:!1,typographer:!1,quotes:"“”‘’",highlight:function(e,t){if(t&&hljs.getLanguage(t))try{return`<pre style="position:relative;padding:10px;" class="hljs lang-${t}"><code>${hljs.highlight(e,{language:t}).value}</code><small class="hljs-lang"><span class="sr-only">Language:</span>${t}</small></pre>`}catch(e){}return""}});md.use(abbr),md.use(footnote),md.use(deflist),md.use(mark),md.use(ins),md.use(sub),md.use(sup),md.use(mathjax({beforeMath:'<span class="mathjax raw">',afterMath:"</span>",beforeInlineMath:'<span class="mathjax raw">\\(',afterInlineMath:"\\)</span>",beforeDisplayMath:'<span class="mathjax raw">\\[',afterDisplayMath:"\\]</span>"})),md.use(ruby);const mditConfig={plantumlServer:"https://www.plantuml.com/plantuml"};function makePlantumlURL(e){const t=plantumlEncoder.encode(e);return`${mditConfig.plantumlServer}/svg/${t}`}md.renderer.rules.plantuml=(e,t,o,n,i)=>{const r=e[t];if("plantuml"!==r.type)return e[t].content;return`\n <img src="${makePlantumlURL(r.content)}" />\n <pre style="position:relative;padding:10px;" class="hljs lang-plantuml"><code>${r.content}</code><small class="hljs-lang"><span class="sr-only">Language:</span>plantuml</small></pre>\n `},md.core.ruler.push("plantuml",(e=>{const t=e.tokens;for(const e of t)"fence"===e.type&&"plantuml"===e.info&&(e.type="plantuml")}));const spaceregex=/\s*/,notinhtmltagregex=/(?![^<]*>|[^<>]*<\/)/;let coloregex=/\[color=([#|(|)|\s|,|\w]*?)\]/;coloregex=new RegExp(coloregex.source+notinhtmltagregex.source,"g");let nameregex=/\[name=(.*?)\]/,timeregex=/\[time=([:|,|+|-|(|)|\s|\w]*?)\]/;const nameandtimeregex=new RegExp(nameregex.source+spaceregex.source+timeregex.source+notinhtmltagregex.source,"g");function replaceExtraTags(e){return console.log("replaceExtraTags",e),e=(e=(e=(e=e.replace(coloregex,'<span class="color" data-color="$1"></span>')).replace(nameandtimeregex,'<small><i class="fa fa-user"></i> $1 <i class="fa fa-clock-o"></i> $2</small>')).replace(nameregex,'<small><i class="fa fa-user"></i> $1</small>')).replace(timeregex,'<small><i class="fa fa-clock-o"></i> $1</small>'),console.log("replaceExtraTags",e),e}function finishView(e){let t=$.parseHTML(`<html><body><div id="topmd">${e}</div></body></html>`)[0],o=$(t),n=o.find("blockquote.raw").removeClass("raw");n=o.find("blockquote");let i=$(n).find("p");i.each(((e,t)=>{let o=$(t).html();o=replaceExtraTags(o),t.innerHTML=o,$(t).html(o),i[e].innerHTML=o,$(i[e]).html(o)})),n.find(".color").each(((e,t)=>{$(t).closest("blockquote").css("border-left-color",$(t).attr("data-color"))}));let r="\n <style>\n .markdown-section {\n color: black;\n text-align: left;\n }\n .markdown-section pre .hljs-lang{\n text-transform: uppercase;\n font-weight: 700;\n font-size: .75rem;\n line-height: 1rem;\n padding-top: .25rem;\n padding-bottom: .25rem;\n padding-left: .5rem;\n padding-right: .5rem;\n background-color: rgba(0,0,0,.3);\n border-bottom-left-radius: .375rem;\n top:0;\n right:0;\n position:absolute;\n}\n\n }\n .markdown-section pre .hljs {\n position:relative!important;\n background: #272822!important;\n padding:10px!important;\n color: #ddd;\n text-shadow: none!important;\n }\n\n .markdown-section blockquote {\n margin: 0;\n margin-bottom: 0px;\n margin-bottom: .85em;\n padding: 0 15px;\n color: #858585;\n border-left: 4px solid #e5e5e5;\n border-left-color: rgb(229, 229, 229);\n }\n .markdown-section img {\n max-width:100%;\n }\n </style>\n"+(o.html()||e);return r=r.replaceAll('src="/uploads/','src="https://md.fmode.cn/uploads/'),r}nameregex=new RegExp(nameregex.source+notinhtmltagregex.source,"g"),timeregex=new RegExp(timeregex.source+notinhtmltagregex.source,"g");class MarkdownParse{constructor(){}parseToHTML(e){this.info("markdown",e);let t=md.render(e);return this.info("html",t),t=finishView(t),this.info("html plus",t),t}info(...e){}}class MarkdownPreviewComponent{constructor(e,t){this.domSan=e,this.renderer=t,this.content="",this.render=!0}ngAfterViewInit(){this.renderMdToHTML()}renderMdToHTML(){if(!this.render)return;let e=(new MarkdownParse).parseToHTML(this.content);this.safeHTML=this.domSan.bypassSecurityTrustHtml(e);let t=this.renderer.createElement("div");t.innerHTML=e,console.log(t.innerHTML),this.renderer.appendChild(this.mdContent.nativeElement,t)}}MarkdownPreviewComponent.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:MarkdownPreviewComponent,deps:[{token:i1$2.DomSanitizer},{token:i0.Renderer2}],target:i0.ɵɵFactoryTarget.Component}),MarkdownPreviewComponent.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.1.0",type:MarkdownPreviewComponent,selector:"fm-markdown-preview",inputs:{content:"content",render:"render"},viewQueries:[{propertyName:"mdContent",first:!0,predicate:["mdContent"],descendants:!0}],ngImport:i0,template:'<div class="message-body">\n <div *ngIf="render" #mdContent class="markdown-section">\n </div>\n <div *ngIf="!render">\n {{content}}\n </div>\n</div>',styles:[".markdown-section blockquote{margin:0 0 .85em;padding:0 15px;color:#858585;border-left:4px solid #e5e5e5;border-left-color:#e5e5e5}\n"],dependencies:[{kind:"directive",type:i1$3.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]}]}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:MarkdownPreviewComponent,decorators:[{type:Component,args:[{selector:"fm-markdown-preview",template:'<div class="message-body">\n <div *ngIf="render" #mdContent class="markdown-section">\n </div>\n <div *ngIf="!render">\n {{content}}\n </div>\n</div>',styles:[".markdown-section blockquote{margin:0 0 .85em;padding:0 15px;color:#858585;border-left:4px solid #e5e5e5;border-left-color:#e5e5e5}\n"]}]}],ctorParameters:function(){return[{type:i1$2.DomSanitizer},{type:i0.Renderer2}]},propDecorators:{content:[{type:Input}],mdContent:[{type:ViewChild,args:["mdContent"]}],render:[{type:Input}]}});class MarkdownPreviewModule{}function pcmtoWav(e,t,o,n){let i={chunkId:[82,73,70,70],chunkSize:0,format:[87,65,86,69],subChunk1Id:[102,109,116,32],subChunk1Size:16,audioFormat:1,numChannels:o||1,sampleRate:t||16e3,byteRate:0,blockAlign:0,bitsPerSample:n||16,subChunk2Id:[100,97,116,97],subChunk2Size:0};function u32ToArray(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function u16ToArray(e){return[255&e,e>>8&255]}let r=new Uint8Array(e);i.blockAlign=i.numChannels*i.bitsPerSample>>3,i.byteRate=i.blockAlign*i.sampleRate,i.subChunk2Size=r.length*(i.bitsPerSample>>3),i.chunkSize=36+i.subChunk2Size;let a=i.chunkId.concat(u32ToArray(i.chunkSize),i.format,i.subChunk1Id,u32ToArray(i.subChunk1Size),u16ToArray(i.audioFormat),u16ToArray(i.numChannels),u32ToArray(i.sampleRate),u32ToArray(i.byteRate),u16ToArray(i.blockAlign),u16ToArray(i.bitsPerSample),i.subChunk2Id,u32ToArray(i.subChunk2Size)),s=new Uint8Array(a),l=new Uint8Array(s.length+r.length);l.set(s),l.set(r,s.length);let c=new Blob([l],{type:"audio/wav"});return window.URL.createObjectURL(c)}function resampleAudio(e,t,o){let n=e.length,i=Math.floor(n/t*o),r=[];for(let n=0;n<i;n++){let i=Math.floor(n*(t/o));r[n]=e[i]}return r}function convertFrameBufferToBase64(e){const t=new Uint8Array(2*e.length);for(let o=0;o<e.length;o++){const n=e[o];t[2*o]=255&n,t[2*o+1]=n>>8&255}return btoa(String.fromCharCode.apply(null,t))}function resampleBuffer(e,t,o){const n=t/o,i=Math.round(e.length/n),r=new Int16Array(i);for(let t=0;t<i;t++){const o=Math.floor(t*n);r[t]=e[o]}return r}MarkdownPreviewModule.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:MarkdownPreviewModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule}),MarkdownPreviewModule.ɵmod=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.1.0",ngImport:i0,type:MarkdownPreviewModule,declarations:[MarkdownPreviewComponent],imports:[CommonModule],exports:[MarkdownPreviewComponent]}),MarkdownPreviewModule.ɵinj=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:MarkdownPreviewModule,imports:[CommonModule]}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:MarkdownPreviewModule,decorators:[{type:NgModule,args:[{declarations:[MarkdownPreviewComponent],imports:[CommonModule],exports:[MarkdownPreviewComponent]}]}]});const SpeechRecognition=window.SpeechRecognition||window.webkitSpeechRecognition,SpeechGrammarList=window.SpeechGrammarList||window.webkitSpeechGrammarList;class WebSpeech{constructor(){}startRecognition(e="Nihao | Hello"){if(!SpeechRecognition)return;if(this.recognition&&this.recognition.stop(),console.log("startRecognition"),this.recognition=new SpeechRecognition,!this.recognition)return;this.recognition.continuous=!0;let t=`#JSGF V1.0; grammar words; public <word> = ${e} ;`;this.recognition=new SpeechRecognition;let o=new SpeechGrammarList;o.addFromString(t,1),this.recognition.grammars=o,this.recognition.start(),this.recognition.onresult=e=>{var t,o,n,i,r,a,s;let l=e.results||[];console.log(l),console.log(null===(t=l[0])||void 0===t?void 0:t[0]),(null===(i=null===(n=null===(o=l[0])||void 0===o?void 0:o[0])||void 0===n?void 0:n.transcript)||void 0===i?void 0:i.indexOf("Nihao"))>-1&&console.log("Nihao成功唤醒"),(null===(s=null===(a=null===(r=l[0])||void 0===r?void 0:r[0])||void 0===a?void 0:a.transcript)||void 0===s?void 0:s.indexOf("Hello"))>-1&&console.log("Hello成功唤醒"),this.startRecognition()},this.recognition.onend=e=>{console.log(e)},this.recognition.onerror=e=>{console.error(e)}}speak(e,t=1,o=1.2,n=.5){let i=new SpeechSynthesisUtterance(e),r=this.getVoiceByName("Yaoyao");console.log(r),r&&(i.voice=r),i.rate=o,i.pitch=t,i.volume=n,window.speechSynthesis.speak(i)}getVoiceByName(e){return window.speechSynthesis.getVoices().find((t=>t.name.indexOf(e)>-1))}}class FmodeVoiceService{constructor(){this.webSpeech=WebSpeech,this.recordPcmBlob=null,this.recordType="pcm",this.encodingType="raw",this.connStatus="",this.btnStatus="UNDEFINED",this.resultText="",this.resultTextTemp="",this.APPID="23265215",this.API_SECRET="YzMzMWUzMmFkYjU2ZjE5OTc4M2Q1NjE1",this.API_KEY="8c58aa034946e1de30f2b145cf0cc3c3"}onRecordButtonClick(){console.log(this.btnStatus),"UNDEFINED"===this.btnStatus||"CLOSED"===this.btnStatus?this.connectWebSocket():"CONNECTING"!==this.btnStatus&&"OPEN"!==this.btnStatus||this.recordStop()}recordStart(){return __awaiter(this,void 0,void 0,(function*(){this.createRecorder(),yield this.openWithPriviledge(),this.recorder.start(),this.changeBtnStatus("OPEN")}))}recordStop(){var e;null===(e=this.recorder)||void 0===e||e.stop(((e,t)=>{this.iatWS.send(JSON.stringify({data:{status:2,format:"audio/L16;rate=16000",encoding:this.encodingType,audio:""}}));let o=(window.URL||webkitURL).createObjectURL(e);console.log(e,o,"时长:"+t+"ms"),this.recordPcmBlob=e,this.recorder.close(),this.recorder=null,console.log("localUrl",o)}),(e=>{console.log("录音失败:"+e),this.recorder.close(),this.recorder=null})),clearInterval(this.countdownInterval),this.changeBtnStatus("CLOSED")}playRecord(){this.playPCM(this.recordPcmBlob,44100)}playPCM(e,t){let o=new FileReader;o.onload=function(e){let o=pcmtoWav(e.target.result,t,1,16),n=new Audio;n.src=o,n.play()},o.readAsArrayBuffer(e)}playBuffers(){return __awaiter(this,void 0,void 0,(function*(){let e=yield this.BuffersToBlob(this.buffers);this.playPCM(e,44100)}))}BuffersToBlob(e){let t=[];return e.forEach((e=>{e.forEach((e=>{t.push(e)}))})),new Blob([t],{type:"audio/pcm"})}splitAudioData(e){const t=1280,o=Math.ceil(e.length/t),n=[];for(let i=0;i<o;i++){const o=i*t,r=o+t,a=e.slice(o,r);n.push(a)}return n}BufferToBlob(e){return new Blob([e],{type:"audio/pcm"})}createRecorder(){this.recorder||(this.recorder=Recorder({type:this.recordType,sampleRate:44100,bitRate:16,onProcess:(e,t,o,n,i,r)=>{var a;let s=e.length&&e[e.length-1];if(this.buffers=e,s=resampleBuffer(s,44100,16e3),this.iatWS.readyState===this.iatWS.OPEN){if(this.disableASR)return;this.iatWS.send(JSON.stringify({data:{status:1,format:"audio/L16;rate=16000",encoding:this.encodingType,audio:convertFrameBufferToBase64(s)}}))}null===(a=this.waveClient)||void 0===a||a.input(e[e.length-1],t,n)}}))}openWithPriviledge(){return console.log(this.btnStatus),this.createRecorder(),!!Recorder.IsOpen()||new Promise((e=>{this.recorder.open((()=>{Recorder.WaveView&&(this.waveClient=Recorder.WaveView({elem:".record-wave"})),e(!0)}),((e,t)=>{console.log((t?"UserNotAllow,":"")+"无法录音:"+e)}))}))}getWebSocketUrl(){let e="wss://iat-api.xfyun.cn/v2/iat",t="iat-api.xfyun.cn",o=this.API_KEY,n=this.API_SECRET,i=(new Date).toUTCString(),r=`host: ${t}\ndate: ${i}\nGET /v2/iat HTTP/1.1`,a=CryptoJS.HmacSHA256(r,n),s=CryptoJS.enc.Base64.stringify(a);return e=`${e}?authorization=${btoa(`api_key="${o}", algorithm="hmac-sha256", headers="host date request-line", signature="${s}"`)}&date=${i}&host=${t}`,e}toBase64(e){for(var t="",o=new Uint8Array(e),n=o.byteLength,i=0;i<n;i++)t+=String.fromCharCode(o[i]);return window.btoa(t)}countdown(){let e=60;this.connStatus=`录音中(${e}s)`,this.countdownInterval=setInterval((()=>{e-=1,console.log(e),e<=0?(clearInterval(this.countdownInterval),this.recordStop()):this.connStatus=`录音中(${e}s)`}),1e3)}changeBtnStatus(e){this.btnStatus=e,"CONNECTING"===e?(this.connStatus="建立连接中",this.resultText="",this.resultTextTemp=""):"OPEN"===e?this.countdown():"CLOSING"===e?this.connStatus="关闭连接中":"CLOSED"===e&&(this.connStatus="开始录音")}renderResult(e){let t=JSON.parse(e);if(console.log(t),console.log(t.data),console.log(t.data.result),t.data&&t.data.result){let e=t.data.result,o="",n=e.ws;for(let e=0;e<n.length;e++)o+=n[e].cw[0].w,console.log(o);e.pgs?("apd"===e.pgs&&(this.resultText=this.resultTextTemp),this.resultTextTemp=this.resultText+o):this.resultText=this.resultText+o,this.resultTextTemp||this.resultText}0===t.code&&2===t.data.status&&this.iatWS.close(),0!==t.code&&(this.iatWS.close(),console.error(t))}connectWebSocket(){console.log("connectWebSocket");const e=this.getWebSocketUrl();if("WebSocket"in window)this.iatWS=new WebSocket(e);else if(!("MozWebSocket"in window))return void alert("浏览器不支持WebSocket");console.log("connectWebSocket",this.btnStatus),this.changeBtnStatus("CONNECTING"),this.iatWS.onopen=e=>{this.recordStart();var t={common:{app_id:this.APPID},business:{language:"zh_cn",domain:"iat",accent:"mandarin",vad_eos:5e3,dwa:"wpgs"},data:{status:0,format:"audio/L16;rate=16000",encoding:this.encodingType}};this.iatWS.send(JSON.stringify(t))},this.iatWS.onmessage=e=>{this.renderResult(e.data)},this.iatWS.onerror=e=>{console.error("error",e),this.recordStop(),this.changeBtnStatus("CLOSED")},this.iatWS.onclose=e=>{console.error("close",e),this.recordStop(),this.changeBtnStatus("CLOSED")}}}FmodeVoiceService.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmodeVoiceService,deps:[],target:i0.ɵɵFactoryTarget.Injectable}),FmodeVoiceService.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmodeVoiceService,providedIn:"root"}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmodeVoiceService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:function(){return[]}}),window._AMapSecurityConfig={securityJsCode:"32aa3f4ab0fa0061de03edd4eafdd50a"};class PageMapStartComponent{constructor(){this.placeList=[{name:"江财蛟桥校区",location:[115.855125,28.744335]},{name:"江财枫林校区",location:[115.835639,28.734119]},{name:"江财麦庐校区",location:[115.816717,28.728899]}]}ngAfterViewInit(){this.initMap()}initMap(){return __awaiter(this,void 0,void 0,(function*(){yield this.createMap(),this.goAndMarkPlace(this.placeList[1])}))}createMap(){return __awaiter(this,void 0,void 0,(function*(){this.AMap=yield AMapLoader.load({key:"473b52010df7d3a32db0a2f5db245c8e",version:"2.0"}),this.map=new this.AMap.Map("container")}))}addMarks(){return __awaiter(this,void 0,void 0,(function*(){let e=new this.AMap.Marker({position:[115.835639,28.734119]});this.map.add(e)}))}goAndMarkPlace(e){this.map.setCenter(e.location),this.map.setZoom(18),console.log(this.placeList),e.marker||(e.marker=new this.AMap.Marker({position:e.location}),this.map.add(e.marker))}clearMark(e){var t;null===(t=null==e?void 0:e.marker)||void 0===t||t.remove()}planRoute(e,t){let o;this.map.plugin(["AMap.Transfer"],(()=>{let n={map:this.map,city:"南昌市",panel:"panel",policy:this.AMap.TransferPolicy.LEAST_TIME};console.log(this.AMap),console.log(this.AMap.TransferPolicy),o=new this.AMap.Transfer(n),o.search(new this.AMap.LngLat(e.location[0],e.location[1]),new this.AMap.LngLat(t.location[0],t.location[1]),((e,t)=>{"complete"===e?(console.log("绘制公交路线完成:"),console.log(t)):console.error("公交路线数据查询失败"+t)}))}))}}PageMapStartComponent.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:PageMapStartComponent,deps:[],target:i0.ɵɵFactoryTarget.Component}),PageMapStartComponent.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.1.0",type:PageMapStartComponent,selector:"app-page-map.start",ngImport:i0,template:'\x3c!-- 全屏地图 --\x3e\n<div id="container"></div>\n\n\x3c!-- 右侧地点 --\x3e\n<div class="place-list">\n <ng-container *ngFor="let place of placeList">\n <div class="place-item" (click)="goAndMarkPlace(place)">\n {{place.name}}\n <button (click)="clearMark(place)">清除标记</button>\n </div>\n </ng-container>\n\n <button (click)="planRoute(placeList[0],placeList[1])">从蛟桥到枫林</button>\n \n</div>',styles:["#container{width:100%;height:100%;position:fixed}.place-list{display:flex;flex-direction:column;position:fixed;justify-content:center;align-items:center;height:80%;width:200px}.place-list .place-item{background-color:#ffffff4d;height:100px;width:90%}\n"],dependencies:[{kind:"directive",type:i1$3.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]}]}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:PageMapStartComponent,decorators:[{type:Component,args:[{selector:"app-page-map.start",template:'\x3c!-- 全屏地图 --\x3e\n<div id="container"></div>\n\n\x3c!-- 右侧地点 --\x3e\n<div class="place-list">\n <ng-container *ngFor="let place of placeList">\n <div class="place-item" (click)="goAndMarkPlace(place)">\n {{place.name}}\n <button (click)="clearMark(place)">清除标记</button>\n </div>\n </ng-container>\n\n <button (click)="planRoute(placeList[0],placeList[1])">从蛟桥到枫林</button>\n \n</div>',styles:["#container{width:100%;height:100%;position:fixed}.place-list{display:flex;flex-direction:column;position:fixed;justify-content:center;align-items:center;height:80%;width:200px}.place-list .place-item{background-color:#ffffff4d;height:100px;width:90%}\n"]}]}]}),window._AMapSecurityConfig={securityJsCode:"32aa3f4ab0fa0061de03edd4eafdd50a"};class CompPoiPickerComponent{get name(){return this._name}set name(e){this._name=e,this.nameChange.emit(e)}get address(){return this._address}set address(e){this._address=e,this.addressChange.emit(e)}get location(){return this._location}set location(e){this._location=e,this.locationChange.emit(e)}constructor(){this.nameChange=new EventEmitter,this.addressChange=new EventEmitter,this.locationChange=new EventEmitter,this.isModalOpen=!1}cancel(){this.isModalOpen=!1,this.modal.dismiss(null,"cancel")}confirm(){this.isModalOpen=!1,this.modal.dismiss(this.address,"confirm")}onWillDismiss(e){"confirm"===e.detail.role&&console.log("确认")}openModal(){this.isModalOpen=!0,setTimeout((()=>{this.initMap()}),800)}ngAfterViewInit(){}initMap(){this.createMap()}createMap(){return __awaiter(this,void 0,void 0,(function*(){this.AMap=yield AMapLoader.load({key:"473b52010df7d3a32db0a2f5db245c8e",version:"2.0"});let e=this.container.nativeElement;this.map=new this.AMap.Map(e),this.goCurrentCenter()}))}goCurrentCenter(){this.AMap.plugin(["AMap.Geolocation"],(()=>{let e=new this.AMap.Geolocation({enableHighAccuracy:!0,timeout:1e4,maximumAge:0,convert:!0,showButton:!0,buttonPosition:"RB",buttonOffset:new this.AMap.Pixel(10,10),showMarker:!1,showCircle:!1,panToLocation:!0,zoomToAccuracy:!1});this.map.addControl(e),e.getCurrentPosition((function(e,t){"complete"===e?(console.log("当前位置经度:"+t.position.getLng()),console.log("当前位置纬度:"+t.position.getLat())):console.log("定位失败:"+t.message)}))}))}searchByAddress(){let e=this.panel.nativeElement;this.AMap.plugin(["AMap.PlaceSearch"],(()=>{let t=new this.AMap.PlaceSearch({pageSize:3,pageIndex:1,map:this.map,panel:e,autoFitView:!0});t.on("selectChanged",(e=>{this.name=e.selected.data.name,this.address=e.selected.data.address,this.location=new Parse.GeoPoint({latitude:e.selected.data.location.lat,longitude:e.selected.data.location.lng}),this.createCenterMarker()})),t.search(this.address)}))}createCenterMarker(){this.centerMarker||(this.centerMarker=new this.AMap.Marker({position:this.map.getCenter(),offset:new this.AMap.Pixel(-15,-15)}),this.map.add(this.centerMarker),this.map.on("dragging",(()=>{this.centerMarker.setPosition(this.map.getCenter())})),this.map.on("dragend",(()=>{let e=this.centerMarker.getPosition();this.location=new Parse.GeoPoint({latitude:e.lat,longitude:e.lng})})))}}CompPoiPickerComponent.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:CompPoiPickerComponent,deps:[],target:i0.ɵɵFactoryTarget.Component}),CompPoiPickerComponent.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.1.0",type:CompPoiPickerComponent,selector:"fm-map-poi-picker",inputs:{_name:["name","_name"],_address:["address","_address"],_location:["location","_location"]},outputs:{nameChange:"nameChange",addressChange:"addressChange",locationChange:"locationChange"},viewQueries:[{propertyName:"container",first:!0,predicate:["container"],descendants:!0},{propertyName:"panel",first:!0,predicate:["panel"],descendants:!0},{propertyName:"modal",first:!0,predicate:IonModal,descendants:!0}],ngImport:i0,template:'\x3c!-- 未选点 --\x3e\n<ion-button (click)="openModal()" expand="block">开始选点</ion-button>\n\n\x3c!-- 已选点 --\x3e\n\n<ion-modal [isOpen]="isModalOpen" (willDismiss)="onWillDismiss($event)">\n<ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot="start">\n <ion-button (click)="cancel()">Cancel</ion-button>\n </ion-buttons>\n <ion-title>地图选点<ng-container *ngIf="location">({{location.latitude}},{{location.longitude}})</ng-container></ion-title>\n <ion-buttons slot="end">\n <ion-button (click)="confirm()" [strong]="true">Confirm</ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class="ion-padding" style="height:100%">\n \x3c!-- 详细地址 --\x3e\n <ion-item>\n <ion-input\n label="请输入详细地址"\n labelPlacement="stacked"\n type="text"\n placeholder="精确到门牌号"\n [(ngModel)]="address"\n ></ion-input>\n <ion-button slot="end" (click)="searchByAddress()">搜索</ion-button>\n </ion-item>\n \n \x3c!-- 地图选点 --\x3e\n <div #container class="container"></div>\n <div #panel class="panel"></div>\n\n </ion-content>\n</ng-template>\n</ion-modal>\n\n',styles:[".container{width:100%;height:100%}.panel{position:absolute;background-color:#fff;max-height:50%;overflow-y:auto;top:12%;right:10px;width:45%}\n"],dependencies:[{kind:"directive",type:i1$3.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"component",type:i3.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:i3.IonButtons,selector:"ion-buttons",inputs:["collapse"]},{kind:"component",type:i3.IonContent,selector:"ion-content",inputs:["color","forceOverscroll","fullscreen","scrollEvents","scrollX","scrollY"]},{kind:"component",type:i3.IonHeader,selector:"ion-header",inputs:["collapse","mode","translucent"]},{kind:"component",type:i3.IonInput,selector:"ion-input",inputs:["accept","autocapitalize","autocomplete","autocorrect","autofocus","clearInput","clearOnEdit","color","counter","counterFormatter","debounce","disabled","enterkeyhint","errorText","fill","helperText","inputmode","label","labelPlacement","legacy","max","maxlength","min","minlength","mode","multiple","name","pattern","placeholder","readonly","required","shape","size","spellcheck","step","type","value"]},{kind:"component",type:i3.IonItem,selector:"ion-item",inputs:["button","color","counter","counterFormatter","detail","detailIcon","disabled","download","fill","href","lines","mode","rel","routerAnimation","routerDirection","shape","target","type"]},{kind:"component",type:i3.IonTitle,selector:"ion-title",inputs:["color","size"]},{kind:"component",type:i3.IonToolbar,selector:"ion-toolbar",inputs:["color","mode"]},{kind:"component",type:i3.IonModal,selector:"ion-modal",inputs:["animated","keepContentsMounted","backdropBreakpoint","backdropDismiss","breakpoints","canDismiss","cssClass","enterAnimation","event","handle","handleBehavior","initialBreakpoint","isOpen","keyboardClose","leaveAnimation","mode","presentingElement","showBackdrop","translucent","trigger"]},{kind:"directive",type:i3.TextValueAccessor,selector:"ion-input:not([type=number]),ion-textarea,ion-searchbar"}]}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:CompPoiPickerComponent,decorators:[{type:Component,args:[{selector:"fm-map-poi-picker",template:'\x3c!-- 未选点 --\x3e\n<ion-button (click)="openModal()" expand="block">开始选点</ion-button>\n\n\x3c!-- 已选点 --\x3e\n\n<ion-modal [isOpen]="isModalOpen" (willDismiss)="onWillDismiss($event)">\n<ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot="start">\n <ion-button (click)="cancel()">Cancel</ion-button>\n </ion-buttons>\n <ion-title>地图选点<ng-container *ngIf="location">({{location.latitude}},{{location.longitude}})</ng-container></ion-title>\n <ion-buttons slot="end">\n <ion-button (click)="confirm()" [strong]="true">Confirm</ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class="ion-padding" style="height:100%">\n \x3c!-- 详细地址 --\x3e\n <ion-item>\n <ion-input\n label="请输入详细地址"\n labelPlacement="stacked"\n type="text"\n placeholder="精确到门牌号"\n [(ngModel)]="address"\n ></ion-input>\n <ion-button slot="end" (click)="searchByAddress()">搜索</ion-button>\n </ion-item>\n \n \x3c!-- 地图选点 --\x3e\n <div #container class="container"></div>\n <div #panel class="panel"></div>\n\n </ion-content>\n</ng-template>\n</ion-modal>\n\n',styles:[".container{width:100%;height:100%}.panel{position:absolute;background-color:#fff;max-height:50%;overflow-y:auto;top:12%;right:10px;width:45%}\n"]}]}],ctorParameters:function(){return[]},propDecorators:{container:[{type:ViewChild,args:["container"]}],panel:[{type:ViewChild,args:["panel"]}],_name:[{type:Input,args:["name"]}],nameChange:[{type:Output}],_address:[{type:Input,args:["address"]}],addressChange:[{type:Output}],_location:[{type:Input,args:["location"]}],locationChange:[{type:Output}],modal:[{type:ViewChild,args:[IonModal]}]}});class CompPoiPickerModule{}CompPoiPickerModule.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:CompPoiPickerModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule}),CompPoiPickerModule.ɵmod=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.1.0",ngImport:i0,type:CompPoiPickerModule,declarations:[CompPoiPickerComponent],imports:[CommonModule,FormsModule,ReactiveFormsModule,i3.IonicModule],exports:[CompPoiPickerComponent]}),CompPoiPickerModule.ɵinj=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:CompPoiPickerModule,imports:[CommonModule,FormsModule,ReactiveFormsModule,IonicModule.forRoot({mode:"ios"})]}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:CompPoiPickerModule,decorators:[{type:NgModule,args:[{declarations:[CompPoiPickerComponent],imports:[CommonModule,FormsModule,ReactiveFormsModule,IonicModule.forRoot({mode:"ios"})],exports:[CompPoiPickerComponent]}]}]}),window._AMapSecurityConfig={securityJsCode:"32aa3f4ab0fa0061de03edd4eafdd50a"};class PagePlanRouteComponent{constructor(){this.placeList=[],this.currentTab="place",this.addNewPlace(),this.addNewPlace(),this.currentTab="plan"}addNewPlace(){var e;(null===(e=this.placeList)||void 0===e?void 0:e.length)>=1?this.placeList.push({name:"秋水广场",address:"南昌市秋水广场",location:new Parse.GeoPoint({latitude:28.682634,longitude:115.86273})}):this.placeList.push({name:"八一广场",address:"南昌市八一广场",location:new Parse.GeoPoint({latitude:28.673856,longitude:115.904477})})}ngAfterViewInit(){}initMap(){return __awaiter(this,void 0,void 0,(function*(){yield this.createMap(),this.goAndMarkPlace(this.placeList[0])}))}createMap(){return __awaiter(this,void 0,void 0,(function*(){this.AMap=yield AMapLoader.load({key:"473b52010df7d3a32db0a2f5db245c8e",version:"2.0"}),this.map=new this.AMap.Map("container-plan")}))}goAndMarkPlace(e){this.map.setCenter([e.location.latitude,e.location.longitude]),this.map.setZoom(18),e.marker||(e.marker=new this.AMap.Marker({position:[e.location.latitude,e.location.longitude]}),this.map.add(e.marker))}clearMark(e){var t;null===(t=null==e?void 0:e.marker)||void 0===t||t.remove()}planRoute(e,t){let o;this.map.plugin(["AMap.Transfer"],(()=>{let n={map:this.map,city:"南昌市",panel:"panel",policy:this.AMap.TransferPolicy.LEAST_TIME};o=new this.AMap.Transfer(n);let i=new this.AMap.LngLat(e.location.longitude,e.location.latitude),r=new this.AMap.LngLat(t.location.longitude,t.location.latitude);o.search(i,r,((e,t)=>{"complete"===e?(console.log("绘制公交路线完成:"),console.log(t)):console.error("公交路线数据查询失败"+t)}))}))}createPlan(){return __awaiter(this,void 0,void 0,(function*(){yield this.initMap(),this.planRoute(this.placeList[0],this.placeList[1])}))}}PagePlanRouteComponent.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:PagePlanRouteComponent,deps:[],target:i0.ɵɵFactoryTarget.Component}),PagePlanRouteComponent.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.1.0",type:PagePlanRouteComponent,selector:"app-page-plan-route",ngImport:i0,template:'<ion-segment value="place">\n <ion-segment-button (click)="currentTab=\'place\'" value="place">\n <ion-label>景点选择</ion-label>\n </ion-segment-button>\n <ion-segment-button (click)="currentTab=\'plan\'" value="plan">\n <ion-label>路线规划</ion-label>\n </ion-segment-button>\n </ion-segment>\n \n\n<ng-container *ngIf="currentTab==\'place\'">\n <h1>选择旅游计划景点</h1>\n\n <ng-container *ngFor="let place of placeList">\n <ion-card>\n <h2>{{place?.name}}</h2>\n <span *ngIf="place.address">详细地址:{{place.address}}</span>\n <span *ngIf="place.location">地图坐标:{{place.location.latitude}},{{place.location.longitude}}</span>\n <fm-map-poi-picker [(name)]="place.name" [(address)]="place.address" [(location)]="place.location"></fm-map-poi-picker>\n </ion-card>\n </ng-container>\n <ion-button (click)="addNewPlace()" expand="block">添加新景点</ion-button>\n</ng-container>\n\n<ng-container *ngIf="currentTab==\'plan\'">\n <ion-button (click)="createPlan()" expand="block">创建规划路线</ion-button>\n\n <div id="container-plan"></div>\n <div id="panel"></div>\n</ng-container>\n\n',styles:["#container-plan{width:100%;height:40%}#panel{width:100%;height:50%}\n"],dependencies:[{kind:"directive",type:i1$3.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:i1$3.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:i3.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:i3.IonCard,selector:"ion-card",inputs:["button","color","disabled","download","href","mode","rel","routerAnimation","routerDirection","target","type"]},{kind:"component",type:i3.IonLabel,selector:"ion-label",inputs:["color","mode","position"]},{kind:"component",type:i3.IonSegment,selector:"ion-segment",inputs:["color","disabled","mode","scrollable","selectOnFocus","swipeGesture","value"]},{kind:"component",type:i3.IonSegmentButton,selector:"ion-segment-button",inputs:["disabled","layout","mode","type","value"]},{kind:"directive",type:i3.SelectValueAccessor,selector:"ion-range, ion-select, ion-radio-group, ion-segment, ion-datetime"},{kind:"component",type:CompPoiPickerComponent,selector:"fm-map-poi-picker",inputs:["name","address","location"],outputs:["nameChange","addressChange","locationChange"]}]}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:PagePlanRouteComponent,decorators:[{type:Component,args:[{selector:"app-page-plan-route",template:'<ion-segment value="place">\n <ion-segment-button (click)="currentTab=\'place\'" value="place">\n <ion-label>景点选择</ion-label>\n </ion-segment-button>\n <ion-segment-button (click)="currentTab=\'plan\'" value="plan">\n <ion-label>路线规划</ion-label>\n </ion-segment-button>\n </ion-segment>\n \n\n<ng-container *ngIf="currentTab==\'place\'">\n <h1>选择旅游计划景点</h1>\n\n <ng-container *ngFor="let place of placeList">\n <ion-card>\n <h2>{{place?.name}}</h2>\n <span *ngIf="place.address">详细地址:{{place.address}}</span>\n <span *ngIf="place.location">地图坐标:{{place.location.latitude}},{{place.location.longitude}}</span>\n <fm-map-poi-picker [(name)]="place.name" [(address)]="place.address" [(location)]="place.location"></fm-map-poi-picker>\n </ion-card>\n </ng-container>\n <ion-button (click)="addNewPlace()" expand="block">添加新景点</ion-button>\n</ng-container>\n\n<ng-container *ngIf="currentTab==\'plan\'">\n <ion-button (click)="createPlan()" expand="block">创建规划路线</ion-button>\n\n <div id="container-plan"></div>\n <div id="panel"></div>\n</ng-container>\n\n',styles:["#container-plan{width:100%;height:40%}#panel{width:100%;height:50%}\n"]}]}],ctorParameters:function(){return[]}}),window._AMapSecurityConfig={securityJsCode:"32aa3f4ab0fa0061de03edd4eafdd50a"};class PageLocaScatterComponent{ngAfterViewInit(){this.initMap()}initMap(){return __awaiter(this,void 0,void 0,(function*(){yield this.createMap(),yield this.createLoca()}))}createLoca(){return __awaiter(this,void 0,void 0,(function*(){let e=window.loca=new Loca.Container({map:this.map}),t=new Loca.GeoJSONSource({url:"https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road.json"}),o=new Loca.ScatterLayer({zIndex:111,opacity:1,visible:!0,zooms:[2,22]});o.setSource(t),o.setStyle({color:"rgba(43,156,75,1)",unit:"meter",size:[150,150],borderWidth:0}),e.add(o);let n=new Loca.GeoJSONSource({url:"https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road_F.json"}),i=new Loca.ScatterLayer({loca:e,zIndex:113,opacity:1,visible:!0,zooms:[2,22]});i.setSource(n),i.setStyle({unit:"meter",size:[2600,2600],borderWidth:0,texture:"https://a.amap.com/Loca/static/loca-v2/demos/images/breath_red.png",duration:500,animate:!0});let r=new Loca.GeoJSONSource({url:"https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road_E.json"}),a=new Loca.ScatterLayer({loca:e,zIndex:112,opacity:1,visible:!0,zooms:[2,22]});a.setSource(r),a.setStyle({unit:"meter",size:[1e3,1e3],borderWidth:0,texture:"https://a.amap.com/Loca/static/loca-v2/demos/images/breath_yellow.png",duration:1e3,animate:!0}),e.animate.start();let s=new Loca.Dat;s.addLayer(o," 贴地"),s.addLayer(i,"红色"),s.addLayer(a,"黄色")}))}createMap(){return __awaiter(this,void 0,void 0,(function*(){this.AMap=yield AMapLoader.load({key:"473b52010df7d3a32db0a2f5db245c8e",version:"2.0",Loca:{version:"2.0.0"}}),this.map=new this.AMap.Map("container",{zoom:11.7,center:[113.97199630737305,22.5807295363949],pitch:40,showLabel:!1,mapStyle:"amap://styles/dark",viewMode:"3D"})}))}}PageLocaScatterComponent.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:PageLocaScatterComponent,deps:[],target:i0.ɵɵFactoryTarget.Component}),PageLocaScatterComponent.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.1.0",type:PageLocaScatterComponent,selector:"app-page-loca-scatter",ngImport:i0,template:'<div id="container"></div>',styles:["#container{width:100%;height:100%;position:fixed}\n"]}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:PageLocaScatterComponent,decorators:[{type:Component,args:[{selector:"app-page-loca-scatter",template:'<div id="container"></div>',styles:["#container{width:100%;height:100%;position:fixed}\n"]}]}]});const routes=[{path:"start",component:PageMapStartComponent},{path:"plan/route",component:PagePlanRouteComponent},{path:"loca/scatter",component:PageLocaScatterComponent}];class FmodeMapModule{}FmodeMapModule.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmodeMapModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule}),FmodeMapModule.ɵmod=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.1.0",ngImport:i0,type:FmodeMapModule,declarations:[PageMapStartComponent,PagePlanRouteComponent,PageLocaScatterComponent],imports:[CommonModule,i1$1.RouterModule,i3.IonicModule,CompPoiPickerModule],exports:[CompPoiPickerModule]}),FmodeMapModule.ɵinj=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmodeMapModule,imports:[CommonModule,RouterModule.forChild(routes),IonicModule.forRoot({mode:"ios"}),CompPoiPickerModule,CompPoiPickerModule]}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmodeMapModule,decorators:[{type:NgModule,args:[{declarations:[PageMapStartComponent,PagePlanRouteComponent,PageLocaScatterComponent],imports:[CommonModule,RouterModule.forChild(routes),IonicModule.forRoot({mode:"ios"}),CompPoiPickerModule],exports:[CompPoiPickerModule]}]}]});class HwobsService{constructor(){this.Attachment=Parse.Object.extend("Attachment"),this.host="https://web3-test.obs.cn-south-1.myhuaweicloud.com/",this.bucketName="web3-test",this.obsClient=new ObsClient({access_key_id:"6UIET20WHUI5TLXWOVNA",secret_access_key:"YaoY8Kj3TeGZHEcBzplTMZiPGNL13Y3frEavC1kF",server:"https://obs.cn-south-1.myhuaweicloud.com"})}listDir(e){return new Promise(((t,o)=>{this.obsClient.listObjects({Bucket:this.bucketName,Prefix:e,Delimiter:"/"},((e,n)=>{if(e)console.error("Error--\x3e"+e),o(e);else{if(console.log("Status--\x3e"+n.CommonMsg.Status),console.log(n),n.CommonMsg.Status<300&&n.InterfaceResult)for(var i in n.InterfaceResult.Contents)console.log("Contents["+i+"]:"),console.log("Key--\x3e"+n.InterfaceResult.Contents[i].Key),console.log("Owner[ID]--\x3e"+n.InterfaceResult.Contents[i].Owner.ID);let e=n.InterfaceResult.CommonPrefixes,o=n.InterfaceResult.Contents;t({dirs:e,files:o})}}))}))}uploadFile(e,t){return __awaiter(this,void 0,void 0,(function*(){let o=yield this.checkFileExists(e);return(null==o?void 0:o.id)?o:new Promise(((o,n)=>{this.obsClient.putObject({Bucket:this.bucketName,Key:t,SourceFile:e},((i,r)=>__awaiter(this,void 0,void 0,(function*(){if(i)console.error("Error--\x3e"+i),n(i);else{console.log("Status--\x3e"+r.CommonMsg.Status);let n=yield this.saveAttachment(e,t);o(n)}}))))}))}))}checkFileExists(e){return __awaiter(this,void 0,void 0,(function*(){let t,o=yield this.getFileHash(e),n=new Parse.Query("Attachment");n.equalTo("hash",o),n.equalTo("size",e.size);let i=yield n.first();return(null==i?void 0:i.id)||(i=new this.Attachment),t=i,t}))}saveAttachment(e,t){return __awaiter(this,void 0,void 0,(function*(){let o=yield this.getFileHash(e),n=yield this.checkFileExists(e);return n.set("name",e.name),n.set("size",e.size),n.set("mime",e.type),n.set("url",this.host+t),n.set("hash",o),n=yield n.save(),n}))}getFileHash(e){return __awaiter(this,void 0,void 0,(function*(){return new Promise(((t,o)=>{const n=new FileReader;n.onload=e=>__awaiter(this,void 0,void 0,(function*(){const o=e.target.result,n=yield crypto.subtle.digest("SHA-256",o),i=Array.from(new Uint8Array(n)).map((e=>e.toString(16).padStart(2,"0"))).join("");t(i)})),n.onerror=e=>{o(e.target.error)},n.readAsArrayBuffer(e)}))}))}}HwobsService.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:HwobsService,deps:[],target:i0.ɵɵFactoryTarget.Injectable}),HwobsService.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:HwobsService,providedIn:"root"}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:HwobsService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:function(){return[]}});class HwobsManagerComponent{openFile(e){console.log("Opening file:",e)}openDir(e,t="pre"){if(e)this.prefix=e.Prefix,this.listDir(e.Prefix);else if("pre"==t){let e=this.prefix.split("/");if(e.length>1){let t=e.splice(0,e.length-1).join("/");console.log(t),this.prefix=t,this.listDir(t)}}}showName(e){return e.replaceAll(this.prefix,"")}constructor(e){this.hwobs=e,this.dirs=[],this.files=[],this.prefix="storage/",this.listDir(this.prefix)}listDir(e){return __awaiter(this,void 0,void 0,(function*(){let{dirs:t,files:o}=yield this.hwobs.listDir(e);this.dirs=t,this.files=o}))}}HwobsManagerComponent.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:HwobsManagerComponent,deps:[{token:HwobsService}],target:i0.ɵɵFactoryTarget.Component}),HwobsManagerComponent.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.1.0",type:HwobsManagerComponent,isStandalone:!0,selector:"fm-storage-hwobs-manager",ngImport:i0,template:'<ion-header>\n <ion-toolbar>\n <ion-title>\n File Manager\n </ion-title>\n </ion-toolbar>\n </ion-header>\n \n <ion-content>\n <ion-list>\n <ion-item (click)="openDir(null,\'pre\')">\n <ion-icon [name]="\'folder\'" slot="start"></ion-icon>\n <ion-label>../</ion-label>\n </ion-item>\n <ion-item *ngFor="let item of dirs" (click)="openDir(item)">\n <ion-icon [name]="\'folder\'" slot="start"></ion-icon>\n <ion-label>{{ showName(item.Prefix) }}</ion-label>\n </ion-item>\n <ion-item *ngFor="let item of files" (click)="openFile(item)">\n <ion-icon [name]="\'document\'" slot="start"></ion-icon>\n <ion-label>{{ showName(item.Key) }}</ion-label>\n </ion-item>\n </ion-list>\n </ion-content>',styles:["ion-list ion-item ion-icon{font-size:24px;margin-right:8px}\n"],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"directive",type:i1$3.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"ngmodule",type:FormsModule},{kind:"ngmodule",type:ReactiveFormsModule},{kind:"ngmodule",type:IonicModule},{kind:"component",type:i3.IonContent,selector:"ion-content",inputs:["color","forceOverscroll","fullscreen","scrollEvents","scrollX","scrollY"]},{kind:"component",type:i3.IonHeader,selector:"ion-header",inputs:["collapse","mode","translucent"]},{kind:"component",type:i3.IonIcon,selector:"ion-icon",inputs:["color","flipRtl","icon","ios","lazy","md","mode","name","sanitize","size","src"]},{kind:"component",type:i3.IonItem,selector:"ion-item",inputs:["button","color","counter","counterFormatter","detail","detailIcon","disabled","download","fill","href","lines","mode","rel","routerAnimation","routerDirection","shape","target","type"]},{kind:"component",type:i3.IonLabel,selector:"ion-label",inputs:["color","mode","position"]},{kind:"component",type:i3.IonList,selector:"ion-list",inputs:["inset","lines","mode"]},{kind:"component",type:i3.IonTitle,selector:"ion-title",inputs:["color","size"]},{kind:"component",type:i3.IonToolbar,selector:"ion-toolbar",inputs:["color","mode"]}]}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:HwobsManagerComponent,decorators:[{type:Component,args:[{standalone:!0,imports:[CommonModule,FormsModule,ReactiveFormsModule,IonicModule],selector:"fm-storage-hwobs-manager",template:'<ion-header>\n <ion-toolbar>\n <ion-title>\n File Manager\n </ion-title>\n </ion-toolbar>\n </ion-header>\n \n <ion-content>\n <ion-list>\n <ion-item (click)="openDir(null,\'pre\')">\n <ion-icon [name]="\'folder\'" slot="start"></ion-icon>\n <ion-label>../</ion-label>\n </ion-item>\n <ion-item *ngFor="let item of dirs" (click)="openDir(item)">\n <ion-icon [name]="\'folder\'" slot="start"></ion-icon>\n <ion-label>{{ showName(item.Prefix) }}</ion-label>\n </ion-item>\n <ion-item *ngFor="let item of files" (click)="openFile(item)">\n <ion-icon [name]="\'document\'" slot="start"></ion-icon>\n <ion-label>{{ showName(item.Key) }}</ion-label>\n </ion-item>\n </ion-list>\n </ion-content>',styles:["ion-list ion-item ion-icon{font-size:24px;margin-right:8px}\n"]}]}],ctorParameters:function(){return[{type:HwobsService}]}});class FmodeStorgeModule{}FmodeStorgeModule.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmodeStorgeModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule}),FmodeStorgeModule.ɵmod=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.1.0",ngImport:i0,type:FmodeStorgeModule,imports:[CommonModule,i3.IonicModule,HwobsManagerComponent],exports:[HwobsManagerComponent]}),FmodeStorgeModule.ɵinj=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmodeStorgeModule,imports:[CommonModule,IonicModule.forRoot({mode:"ios"}),HwobsManagerComponent]}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmodeStorgeModule,decorators:[{type:NgModule,args:[{declarations:[],imports:[CommonModule,IonicModule.forRoot({mode:"ios"}),HwobsManagerComponent],exports:[HwobsManagerComponent]}]}]});export{ChatService,CompPoiPickerComponent,CompPoiPickerModule,FmaiService,FmodeChat,FmodeChatCompletion,FmodeMapModule,FmodeStorgeModule,FmodeVoiceService,HwobsManagerComponent,HwobsService,ImagineService,MASK_LIST,MarkdownPreviewComponent,MarkdownPreviewModule,NovaCloudService};
8
+ import*as i0 from"@angular/core";import{Injectable,Component,Input,ViewChild,NgModule,EventEmitter,Output}from"@angular/core";import{__awaiter}from"tslib";import*as Parse from"parse";import*as i1 from"@angular/common/http";import{HttpHeaders}from"@angular/common/http";import{finalize,Observable,bufferTime,concatMap,delay}from"rxjs";import*as i1$1 from"@angular/router";import{RouterModule}from"@angular/router";import*as i1$3 from"@angular/common";import{CommonModule}from"@angular/common";import hljs from"highlight.js";import MarkdownIt from"markdown-it";import abbr from"markdown-it-abbr";import footnote from"markdown-it-footnote";import deflist from"markdown-it-deflist";import mark from"markdown-it-mark";import ins from"markdown-it-ins";import sub from"markdown-it-sub";import sup from"markdown-it-sup";import mathjax from"markdown-it-mathjax";import ruby from"markdown-it-ruby";import plantumlEncoder from"plantuml-encoder";import $ from"jquery";import*as i1$2 from"@angular/platform-browser";import Recorder from"recorder-core";import"recorder-core/src/engine/pcm";import"recorder-core/src/engine/wav";import"recorder-core/src/extensions/waveview";import CryptoJS from"crypto-js";import*as AMapLoader from"@amap/amap-jsapi-loader";import*as i3 from"@ionic/angular";import{IonModal,IonicModule}from"@ionic/angular";import*as i2 from"@angular/forms";import{FormsModule,ReactiveFormsModule}from"@angular/forms";import ObsClient from"esdk-obs-browserjs";class NovaCloudService{constructor(e){this.http=e,this.serverURL="https://server.fmode.cn/api",localStorage.setItem("NOVA_APIG_SERVER","aHR0cHMlM0ElMkYlMkZzZXJ2ZXIuZm1vZGUuY24lMkZhcGklMkZhcGlnJTJG")}novaql(e,t){let o=this.serverURL+"/novaql/select",n={sql:e};return n&&(null==t?void 0:t.length)>0&&(n.params=JSON.stringify(t)),new Promise(((e,t)=>{this.http.post(o,n,{headers:new HttpHeaders({"Content-Type":"application/json"}),withCredentials:!1}).subscribe((t=>{if(t&&200==t.code){let o=t.data;e(o)}}),(e=>{t(e)}))}))}apig(e,t,o="post"){localStorage.setItem("NOVA_APIG_SERVER","aHR0cHMlM0ElMkYlMkZzZXJ2ZXIuZm1vZGUuY24lMkZhcGklMkZhcGlnJTJG");let n=localStorage.getItem("NOVA_APIG_SERVER");n=decodeURIComponent(atob(n)),e=n+e,console.log(e);let i=Parse.User.current();return new Promise(((n,r)=>{try{this.http.request(o,e,{body:t||null,headers:new HttpHeaders({"Content-Type":"application/json",Authorization:`Bearer ${null==i?void 0:i.getSessionToken()}`}),withCredentials:!1}).subscribe((e=>{if(e&&200==e.code||e&&1==e.code||e&&0==e.code){let t=null==e?void 0:e.data;n(t)}else n(null)}),(e=>{alert(e.mess),r(e)}))}catch(e){return alert("请求出错")}}))}apigTest(e,t,o="post"){e="https://test.fmode.cn/api/apig/"+e,console.log(e);let n=Parse.User.current();return t.token=`Bearer ${null==n?void 0:n.getSessionToken()}`,new Promise(((n,i)=>{try{this.http.request(o,e,{body:t||null,headers:new HttpHeaders({"Content-Type":"application/json"}),withCredentials:!1}).subscribe((e=>{if(e&&200==e.code||e&&1==e.code||e&&0==e.code){let t=null==e?void 0:e.data;n(t)}else n(null)}),(e=>{alert(e.mess),i(e)}))}catch(e){return alert("请求出错")}}))}api(e,t){return e=this.serverURL+e,new Promise(((o,n)=>{this.http.post(e,t,{headers:new HttpHeaders({"Content-Type":"application/json"}),withCredentials:!1}).subscribe((e=>{if(e&&200==e.code||e&&1==e.code){let t=e.data;o(t)}else o(null)}),(e=>{n(e)}))}))}searchParse(e){let t={};if((e=e||location.search)&&e.length>1){let o=(e=e.substring(1)).split("&");for(let e=0;e<o.length;e++){if(!o[e])continue;let n=o[e].split("=");t[n[0]]=void 0===n[1]?"":n[1]}}return t}}NovaCloudService.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:NovaCloudService,deps:[{token:i1.HttpClient}],target:i0.ɵɵFactoryTarget.Injectable}),NovaCloudService.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:NovaCloudService,providedIn:"root"}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:NovaCloudService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:function(){return[{type:i1.HttpClient}]}});class ImagineService{constructor(e,t){this.http=e,this.ncloud=t,this.taskDetailMap={},this.myWorkList=[]}drawDalle(e){var t;return __awaiter(this,void 0,void 0,(function*(){e.size=(null==e?void 0:e.size)||"1024x1024",e.style=(null==e?void 0:e.style)||"natural";let o={model:"dall-e-3",prompt:e.prompt,n:1,quality:"hd",response_format:"url",size:e.size,style:e.style};if((null===(t=e.prompt)||void 0===t?void 0:t.length)>3e3)throw"prompt maximum < 4000 characters";let n=yield this.ncloud.apigTest("aigc/gpt/v1/images/generations",o);return console.log(n),n}))}b64DataToBase64Image(e){let t=atob(e),o=new Blob([t],{type:"image/webp"});new Promise((e=>{let t=new FileReader;t.onloadend=function(){let o=t.result;console.log(o),e(o)},t.readAsDataURL(o)}))}draw(e){return __awaiter(this,void 0,void 0,(function*(){let t=yield this.ncloud.apig("aigc/sdapi/v1/draw",e),o=null==t?void 0:t.paintingSign;return o&&setTimeout((()=>__awaiter(this,void 0,void 0,(function*(){let e=new Parse.Query("ImagineWork");e.equalTo("taskId",o);let t=yield e.first();console.log(t),(null==t?void 0:t.id)&&this.myWorkList.unshift(t)}))),1e3),t}))}taskDetail(e){return __awaiter(this,void 0,void 0,(function*(){let t=yield this.ncloud.apig("aigc/sdapi/v1/task/detail",{taskId:e});return console.log(t),this.taskDetailMap[e]=t,t}))}getMyWorkQuery(){let e=Parse.User.current();if(!(null==e?void 0:e.id))return;let t=this.getWorkQuery();return t.equalTo("user",e.toPointer()),t}getWorkQuery(){let e=new Parse.Query("ImagineWork");return e.include("module","user"),e.notEqualTo("isDeleted",!0),e.addDescending("createdAt"),e}}ImagineService.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:ImagineService,deps:[{token:i1.HttpClient},{token:NovaCloudService}],target:i0.ɵɵFactoryTarget.Injectable}),ImagineService.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:ImagineService,providedIn:"root"}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:ImagineService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:function(){return[{type:i1.HttpClient},{type:NovaCloudService}]}});let colorMap=["primary","secondary","tertiary","success","warning","danger","light","medium","dark"];const MASK_LIST=[{name:"执行李",type:"employee",title:"首席执行官",desc:"一位富有远见和领导才能的创业新秀。她具备战略思维和决策能力,能够为公司设定长期目标并领导团队实现这些目标。",color:colorMap[0],cover:"https://imgsource.huashi6.com/images/ai/2023/9/29/15_48766.jpg?e=1695974629&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:oPkQSsyQLLD08R_J4SMeO1f1RdM="},{name:"技术刘",type:"employee",title:"首席技术官",desc:"一位技术专家,拥有广泛的技术知识和经验。他善于解决复杂的技术问题,并能够领导开发团队实施创新的技术解决方案。",color:colorMap[1],cover:["https://imgsource.huashi6.com/images/ai/2023/9/29/9_619877.jpg?e=1695952672&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:LDuSg8_n5g4Rj_8F5PKrGzV4T54=","https://imgsource.huashi6.com/images/ai/2023/9/27/20_17767.jpg?e=1695819037&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:a9uOeeJMN2oopK-3WQZzldPXfH0="]},{name:"点子王",type:"employee",title:"首席运营官",desc:"一位富有创意和市场洞察力的市场营销专家。她擅长制定营销策略,了解目标受众,并能够利用各种渠道和工具推广公司的产品或服务。",color:colorMap[2],cover:"https://imgsource.huashi6.com/images/ai/2023/9/29/9_186291.jpg?e=1695952125&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:EhEUtwnC9hpu-SXXsBrp2Q-rcJk="},{title:"设计总监",name:"李欣",type:"employee",desc:"一位富有创造力和用户导向思维的设计师。她能够理解用户需求,并通过设计直观、易用且吸引人的用户界面来提供出色的用户体验。",color:colorMap[3],cover:"https://imgsource.huashi6.com/images/ai/2023/9/29/9_18099.jpg?e=1695952201&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:G_a60v52iTTqvJgeTSa_8zJUY2w="},{title:"运营经理",name:"刘洁",type:"employee",desc:"一位组织能力强、注重细节并擅长解决问题的运营专家。她能够协调各个部门的工作,并确保公司的运营流程高效运行。",color:colorMap[4],cover:"https://imgsource.huashi6.com/images/ai/2023/9/29/9_842519.jpg?e=1695952125&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:FM_kKZDzkcLQ1EX4266dXU46cRc="},{title:"销售经理",name:"张伟",type:"employee",desc:"一位富有销售天赋和人际交往能力的销售专家。他善于与客户建立良好的关系,并能够推动销售团队实现业绩目标。",color:colorMap[5],cover:"https://imgsource.huashi6.com/images/ai/2023/9/29/15_739110.jpg?e=1695974920&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:vg_sn-qn67MJS-7j2o7mWzOCUSk="},{title:"数据分析师",name:"杨晨",type:"employee",desc:"一位善于解读数据和提供商业洞察的数据分析专家。她能够收集、分析和解释数据,为公司的决策制定提供有力的支持。",color:colorMap[6],cover:"https://imgsource.huashi6.com/images/ai/2023/9/29/15_204321.jpg?e=1695974779&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:dC2sGmJekSPBTCycPF76BkQPBoo="},{title:"财务经理",name:"赵晓",type:"employee",desc:"一位精通财务管理和分析的专业人士。她能够制定财务战略、管理公司的财务流程,并提供准确的财务报告和预测。",color:colorMap[7],cover:"https://imgsource.huashi6.com/images/ai/2023/9/29/15_947878.jpg?e=1695974779&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:TFGn0_l2PqhUTe9G4A3it769hcU="},{title:"品牌专员",name:"王雅",type:"employee",desc:"一位富有创意和品牌意识的专业人士。她能够塑造和管理公司的品牌形象,制定品牌营销策略,并与内部和外部利益相关者建立良好的合作关系。",color:colorMap[8],cover:["https://imgsource.huashi6.com/images/ai/2023/9/29/15_129581.jpg?e=1695975151&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:YQrpiv1hBKRPIdaEbDDDkLFuPG8=","https://imgsource.huashi6.com/images/ai/2023/9/29/15_912136.jpg?e=1695975151&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:8SVMU1rdKD8eaJ1gH_qGQzcrMhM="]},{title:"全科",name:"孔博",type:"teacher",desc:"擅长全科教学的金牌教师,知识面广泛,博古通今,因材施教,耐心稳重。",color:colorMap[0],cover:["https://imgsource.huashi6.com/images/ai/2023/10/18/12_40958.jpg?e=1697604189&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:U7r1Td30lXdf9mE1TMVAnDhBP6c="]},{title:"语文",name:"王明",type:"teacher",desc:"激发学生对文学的热爱,引导他们成为优秀的作家和沟通者。",color:colorMap[1],cover:["https://imgsource.huashi6.com/images/ai/2023/10/18/11_698893.jpg?e=1697602689&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:hK_AuY7BA1pp33QVeUue5QjIg4o="]},{title:"数学",name:"万红",type:"teacher",desc:"以清晰的逻辑和耐心的指导,帮助学生掌握数学的基础知识和解题技巧。",color:colorMap[2],cover:["https://imgsource.huashi6.com/images/ai/2023/10/18/11_256253.jpg?e=1697603314&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:K2iqp_ZzHYzXNu_0VJlywyANHp8="]},{title:"英语",name:"张瑞",type:"teacher",desc:"激发学生对英语学习的兴趣,培养他们的听、说、读、写能力,让他们自信地运用英语。",color:colorMap[3],cover:["https://imgsource.huashi6.com/images/ai/2023/10/18/12_266171.jpg?e=1697603707&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:uhpxBbT-jlSt_KjAnj0SFsFAjWU="]},{title:"物理",name:"金晓",type:"teacher",desc:"通过实验和案例,帮助学生理解物理原理,培养他们的科学思维和实验技能。",color:colorMap[4],cover:["https://imgsource.huashi6.com/images/ai/2023/10/18/11_694925.jpg?e=1697603071&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:FznZxhkYUrZ-BzX05dvNt8acTUw="]},{title:"化学",name:"陈华",type:"teacher",desc:"激发学生对化学的好奇心,教授他们化学知识和实验技巧,培养他们的实验和分析能力。",color:colorMap[5],cover:["https://imgsource.huashi6.com/images/ai/2023/10/18/11_942234.jpg?e=1697603169&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:__2T8cxLl4J0AwMR9MJdDiooDF0="]},{title:"生物",name:"杨婷",type:"teacher",desc:"引导学生探索生命的奥秘,培养他们的科学观察和实验能力,让他们热爱生物科学。",color:colorMap[6],cover:["https://imgsource.huashi6.com/images/ai/2023/10/18/12_330738.jpg?e=1697603491&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:2K5-DHPnUQ-R9GGxtWKiEG68QlE="]},{title:"历史",name:"赵亮",type:"teacher",desc:"帮助学生了解历史事件和文化背景,培养他们的历史意识和批判思维。",color:colorMap[7],cover:["https://imgsource.huashi6.com/images/ai/2023/10/18/11_256302.jpg?e=1697602689&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:YP7ffC1YKO-Pb0C3ks4caT0QqZk="]},{title:"地理",name:"林丽",type:"teacher",desc:"引导学生探索地球的奥秘,培养他们的地理观察和分析能力,让他们热爱地理科学。",color:colorMap[8],cover:["https://imgsource.huashi6.com/images/ai/2023/10/18/12_555804.jpg?e=1697604054&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:xLN4QW0x9jx9lEB4EFHWvI_gEsI="]}],API_BASE="https://test.fmode.cn/api/apig/aigc/gpt";class FmodeChat{constructor(e,t,o){this.messageList=[{role:"system",content:"系统提示:AI仅供参考"}],this.mask=t,this.chatId=e,this.chat=o}sendMessage(e="FmodeAiTest测试问题"){this.messageList.push({role:"user",content:e,createdAt:new Date});let t=new FmodeChatCompletion(this.fixMessageList(this.messageList));t.sendCompletion().pipe(finalize((()=>{this.messageList[t.indexOfList].complete=!0}))).subscribe((e=>{this.messageList[t.indexOfList]=e}))}fixMessageList(e){return e.map((e=>({role:e.role,content:e.content})))}nowStr(){let e=new Date;return`${e.getFullYear()}/${e.getMonth()+1}/${e.getDate()} ${e.getHours()}:${e.getMinutes()}:${e.getSeconds()}`}}class FmodeChatCompletion{constructor(e){this.content="",this.contentBuffer=[],this.isCompleted=!1,this.indexOfList=Number(e.length),this.messages=e}sendCompletion(){let e={messages:this.messages,stream:!0,model:"gpt-3.5-turbo",temperature:.5,presence_penalty:0,frequency_penalty:0};return new Observable((t=>{let o=RequestFmodeChatApi("/v1/chat/completions",e).subscribe((e=>{var n,i,r;let a=String(e);if(a.indexOf("data: {")>-1){let e=chunkToJson(a),s=(null===(r=null===(i=null===(n=null==e?void 0:e.choices)||void 0===n?void 0:n[0])||void 0===i?void 0:i.delta)||void 0===r?void 0:r.content)||"";this.contentBuffer.push(s),this.contentPusher||(this.contentPusher=setInterval((()=>{var e,n;this.isCompleted&&0==(null===(e=this.contentBuffer)||void 0===e?void 0:e.length)&&(o.unsubscribe(),clearInterval(this.contentPusher),t.complete()),(null===(n=this.contentBuffer)||void 0===n?void 0:n.length)>0&&(this.content+=this.contentBuffer.shift(),t.next({role:"assistant",content:this.content,createdAt:new Date}))}),100))}"data: [DONE]"===a&&(this.isCompleted=!0)}))})).pipe(bufferTime(100),concatMap((e=>e)),delay(200))}}function chunkToJson(e){let t;try{t=JSON.parse(e.replaceAll("data: ",""))}catch(e){console.error(e)}return t||{}}function RequestFmodeChatApi(e,t,o="POST"){return new Observable((n=>{var i;let r=API_BASE+e,a=`Bearer ${(null===(i=Parse.User.current())||void 0===i?void 0:i.getSessionToken())||localStorage.getItem("FMODE_AI_TOKEN")}`;return t.token=a,t&&(t=JSON.stringify(t)),fetch(r,{headers:{"Content-Type":"text/plain","Cache-Control":"no-cache"},body:t||null,method:o,credentials:"omit",mode:"cors"}).then((e=>{var t;let o="";{let i=null===(t=e.body)||void 0===t?void 0:t.getReader();const r=new TextDecoder;let a=new ReadableStream({start(e){!function read(){i.read().then((({done:t,value:o})=>{if(t)return e.close(),void n.complete();e.enqueue(o),read()}))}()}}).getReader();a.read().then((function processStream({done:e,value:t}){if(e)return;!function processData(e){let t=(o+e).split("\n");if((null==t?void 0:t.length)>1){for(let e=0;e<t.length-1;e++){let o=t[e];n.next(o)}o=t[t.length-1]}}(r.decode(t)),a.read().then(processStream)}))}})).catch((e=>n.error(e))),()=>{}}))}function JsonToFormData(e){const t=new FormData;return function appendFormData(e,o=""){Array.isArray(e)?e.forEach(((e,t)=>{appendFormData(e,`${o}[${t}]`)})):"object"==typeof e&&null!==e?Object.keys(e).forEach((t=>{const n=o?`${o}.${t}`:t;appendFormData(e[t],n)})):t.append(o,e)}(e),t}class ChatService{constructor(e){this.router=e,this.maskList=[],this.chatMap={},this.maskList=MASK_LIST}createChatPanel(e,t){let o=(null==t?void 0:t.id)||"new";t=new FmodeChat(o,e,t),this.chatMap[o]=t,this.router.navigate(["/chat/pro/chat/"+o])}}ChatService.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:ChatService,deps:[{token:i1$1.Router}],target:i0.ɵɵFactoryTarget.Injectable}),ChatService.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:ChatService,providedIn:"root"}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:ChatService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:function(){return[{type:i1$1.Router}]}});class FmaiService{constructor(e,t){this.imagine=e,this.chat=t}}FmaiService.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmaiService,deps:[{token:ImagineService},{token:ChatService}],target:i0.ɵɵFactoryTarget.Injectable}),FmaiService.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmaiService,providedIn:"root"}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmaiService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:function(){return[{type:ImagineService},{type:ChatService}]}});const md=new MarkdownIt({html:!0,xhtmlOut:!0,breaks:!1,linkify:!1,typographer:!1,quotes:"“”‘’",highlight:function(e,t){if(t&&hljs.getLanguage(t))try{return`<pre style="position:relative;padding:10px;" class="hljs lang-${t}"><code>${hljs.highlight(e,{language:t}).value}</code><small class="hljs-lang"><span class="sr-only">Language:</span>${t}</small></pre>`}catch(e){}return""}});md.use(abbr),md.use(footnote),md.use(deflist),md.use(mark),md.use(ins),md.use(sub),md.use(sup),md.use(mathjax({beforeMath:'<span class="mathjax raw">',afterMath:"</span>",beforeInlineMath:'<span class="mathjax raw">\\(',afterInlineMath:"\\)</span>",beforeDisplayMath:'<span class="mathjax raw">\\[',afterDisplayMath:"\\]</span>"})),md.use(ruby);const mditConfig={plantumlServer:"https://www.plantuml.com/plantuml"};function makePlantumlURL(e){const t=plantumlEncoder.encode(e);return`${mditConfig.plantumlServer}/svg/${t}`}md.renderer.rules.plantuml=(e,t,o,n,i)=>{const r=e[t];if("plantuml"!==r.type)return e[t].content;return`\n <img src="${makePlantumlURL(r.content)}" />\n <pre style="position:relative;padding:10px;" class="hljs lang-plantuml"><code>${r.content}</code><small class="hljs-lang"><span class="sr-only">Language:</span>plantuml</small></pre>\n `},md.core.ruler.push("plantuml",(e=>{const t=e.tokens;for(const e of t)"fence"===e.type&&"plantuml"===e.info&&(e.type="plantuml")}));const spaceregex=/\s*/,notinhtmltagregex=/(?![^<]*>|[^<>]*<\/)/;let coloregex=/\[color=([#|(|)|\s|,|\w]*?)\]/;coloregex=new RegExp(coloregex.source+notinhtmltagregex.source,"g");let nameregex=/\[name=(.*?)\]/,timeregex=/\[time=([:|,|+|-|(|)|\s|\w]*?)\]/;const nameandtimeregex=new RegExp(nameregex.source+spaceregex.source+timeregex.source+notinhtmltagregex.source,"g");function replaceExtraTags(e){return console.log("replaceExtraTags",e),e=(e=(e=(e=e.replace(coloregex,'<span class="color" data-color="$1"></span>')).replace(nameandtimeregex,'<small><i class="fa fa-user"></i> $1 <i class="fa fa-clock-o"></i> $2</small>')).replace(nameregex,'<small><i class="fa fa-user"></i> $1</small>')).replace(timeregex,'<small><i class="fa fa-clock-o"></i> $1</small>'),console.log("replaceExtraTags",e),e}function finishView(e){let t=$.parseHTML(`<html><body><div id="topmd">${e}</div></body></html>`)[0],o=$(t),n=o.find("blockquote.raw").removeClass("raw");n=o.find("blockquote");let i=$(n).find("p");i.each(((e,t)=>{let o=$(t).html();o=replaceExtraTags(o),t.innerHTML=o,$(t).html(o),i[e].innerHTML=o,$(i[e]).html(o)})),n.find(".color").each(((e,t)=>{$(t).closest("blockquote").css("border-left-color",$(t).attr("data-color"))}));let r="\n <style>\n .markdown-section {\n color: black;\n text-align: left;\n }\n .markdown-section pre .hljs-lang{\n text-transform: uppercase;\n font-weight: 700;\n font-size: .75rem;\n line-height: 1rem;\n padding-top: .25rem;\n padding-bottom: .25rem;\n padding-left: .5rem;\n padding-right: .5rem;\n background-color: rgba(0,0,0,.3);\n border-bottom-left-radius: .375rem;\n top:0;\n right:0;\n position:absolute;\n}\n\n }\n .markdown-section pre .hljs {\n position:relative!important;\n background: #272822!important;\n padding:10px!important;\n color: #ddd;\n text-shadow: none!important;\n }\n\n .markdown-section blockquote {\n margin: 0;\n margin-bottom: 0px;\n margin-bottom: .85em;\n padding: 0 15px;\n color: #858585;\n border-left: 4px solid #e5e5e5;\n border-left-color: rgb(229, 229, 229);\n }\n .markdown-section img {\n max-width:100%;\n }\n </style>\n"+(o.html()||e);return r=r.replaceAll('src="/uploads/','src="https://md.fmode.cn/uploads/'),r}nameregex=new RegExp(nameregex.source+notinhtmltagregex.source,"g"),timeregex=new RegExp(timeregex.source+notinhtmltagregex.source,"g");class MarkdownParse{constructor(){}parseToHTML(e){this.info("markdown",e);let t=md.render(e);return this.info("html",t),t=finishView(t),this.info("html plus",t),t}info(...e){}}class MarkdownPreviewComponent{constructor(e,t){this.domSan=e,this.renderer=t,this.content="",this.render=!0}ngAfterViewInit(){this.renderMdToHTML()}renderMdToHTML(){if(!this.render)return;let e=(new MarkdownParse).parseToHTML(this.content);this.safeHTML=this.domSan.bypassSecurityTrustHtml(e);let t=this.renderer.createElement("div");t.innerHTML=e,console.log(t.innerHTML),this.renderer.appendChild(this.mdContent.nativeElement,t)}}MarkdownPreviewComponent.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:MarkdownPreviewComponent,deps:[{token:i1$2.DomSanitizer},{token:i0.Renderer2}],target:i0.ɵɵFactoryTarget.Component}),MarkdownPreviewComponent.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.1.0",type:MarkdownPreviewComponent,selector:"fm-markdown-preview",inputs:{content:"content",render:"render"},viewQueries:[{propertyName:"mdContent",first:!0,predicate:["mdContent"],descendants:!0}],ngImport:i0,template:'<div class="message-body">\n <div *ngIf="render" #mdContent class="markdown-section">\n </div>\n <div *ngIf="!render">\n {{content}}\n </div>\n</div>',styles:[".markdown-section blockquote{margin:0 0 .85em;padding:0 15px;color:#858585;border-left:4px solid #e5e5e5;border-left-color:#e5e5e5}\n"],dependencies:[{kind:"directive",type:i1$3.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]}]}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:MarkdownPreviewComponent,decorators:[{type:Component,args:[{selector:"fm-markdown-preview",template:'<div class="message-body">\n <div *ngIf="render" #mdContent class="markdown-section">\n </div>\n <div *ngIf="!render">\n {{content}}\n </div>\n</div>',styles:[".markdown-section blockquote{margin:0 0 .85em;padding:0 15px;color:#858585;border-left:4px solid #e5e5e5;border-left-color:#e5e5e5}\n"]}]}],ctorParameters:function(){return[{type:i1$2.DomSanitizer},{type:i0.Renderer2}]},propDecorators:{content:[{type:Input}],mdContent:[{type:ViewChild,args:["mdContent"]}],render:[{type:Input}]}});class MarkdownPreviewModule{}function pcmtoWav(e,t,o,n){let i={chunkId:[82,73,70,70],chunkSize:0,format:[87,65,86,69],subChunk1Id:[102,109,116,32],subChunk1Size:16,audioFormat:1,numChannels:o||1,sampleRate:t||16e3,byteRate:0,blockAlign:0,bitsPerSample:n||16,subChunk2Id:[100,97,116,97],subChunk2Size:0};function u32ToArray(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function u16ToArray(e){return[255&e,e>>8&255]}let r=new Uint8Array(e);i.blockAlign=i.numChannels*i.bitsPerSample>>3,i.byteRate=i.blockAlign*i.sampleRate,i.subChunk2Size=r.length*(i.bitsPerSample>>3),i.chunkSize=36+i.subChunk2Size;let a=i.chunkId.concat(u32ToArray(i.chunkSize),i.format,i.subChunk1Id,u32ToArray(i.subChunk1Size),u16ToArray(i.audioFormat),u16ToArray(i.numChannels),u32ToArray(i.sampleRate),u32ToArray(i.byteRate),u16ToArray(i.blockAlign),u16ToArray(i.bitsPerSample),i.subChunk2Id,u32ToArray(i.subChunk2Size)),s=new Uint8Array(a),l=new Uint8Array(s.length+r.length);l.set(s),l.set(r,s.length);let c=new Blob([l],{type:"audio/wav"});return window.URL.createObjectURL(c)}function resampleAudio(e,t,o){let n=e.length,i=Math.floor(n/t*o),r=[];for(let n=0;n<i;n++){let i=Math.floor(n*(t/o));r[n]=e[i]}return r}function convertFrameBufferToBase64(e){const t=new Uint8Array(2*e.length);for(let o=0;o<e.length;o++){const n=e[o];t[2*o]=255&n,t[2*o+1]=n>>8&255}return btoa(String.fromCharCode.apply(null,t))}function resampleBuffer(e,t,o){const n=t/o,i=Math.round(e.length/n),r=new Int16Array(i);for(let t=0;t<i;t++){const o=Math.floor(t*n);r[t]=e[o]}return r}MarkdownPreviewModule.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:MarkdownPreviewModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule}),MarkdownPreviewModule.ɵmod=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.1.0",ngImport:i0,type:MarkdownPreviewModule,declarations:[MarkdownPreviewComponent],imports:[CommonModule],exports:[MarkdownPreviewComponent]}),MarkdownPreviewModule.ɵinj=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:MarkdownPreviewModule,imports:[CommonModule]}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:MarkdownPreviewModule,decorators:[{type:NgModule,args:[{declarations:[MarkdownPreviewComponent],imports:[CommonModule],exports:[MarkdownPreviewComponent]}]}]});const SpeechRecognition=window.SpeechRecognition||window.webkitSpeechRecognition,SpeechGrammarList=window.SpeechGrammarList||window.webkitSpeechGrammarList;class WebSpeech{constructor(){}startRecognition(e="Nihao | Hello"){if(!SpeechRecognition)return;if(this.recognition&&this.recognition.stop(),console.log("startRecognition"),this.recognition=new SpeechRecognition,!this.recognition)return;this.recognition.continuous=!0;let t=`#JSGF V1.0; grammar words; public <word> = ${e} ;`;this.recognition=new SpeechRecognition;let o=new SpeechGrammarList;o.addFromString(t,1),this.recognition.grammars=o,this.recognition.start(),this.recognition.onresult=e=>{var t,o,n,i,r,a,s;let l=e.results||[];console.log(l),console.log(null===(t=l[0])||void 0===t?void 0:t[0]),(null===(i=null===(n=null===(o=l[0])||void 0===o?void 0:o[0])||void 0===n?void 0:n.transcript)||void 0===i?void 0:i.indexOf("Nihao"))>-1&&console.log("Nihao成功唤醒"),(null===(s=null===(a=null===(r=l[0])||void 0===r?void 0:r[0])||void 0===a?void 0:a.transcript)||void 0===s?void 0:s.indexOf("Hello"))>-1&&console.log("Hello成功唤醒"),this.startRecognition()},this.recognition.onend=e=>{console.log(e)},this.recognition.onerror=e=>{console.error(e)}}speak(e,t=1,o=1.2,n=.5){let i=new SpeechSynthesisUtterance(e),r=this.getVoiceByName("Yaoyao");console.log(r),r&&(i.voice=r),i.rate=o,i.pitch=t,i.volume=n,window.speechSynthesis.speak(i)}getVoiceByName(e){return window.speechSynthesis.getVoices().find((t=>t.name.indexOf(e)>-1))}}class FmodeVoiceService{constructor(){this.webSpeech=WebSpeech,this.recordPcmBlob=null,this.recordType="pcm",this.encodingType="raw",this.connStatus="",this.btnStatus="UNDEFINED",this.resultText="",this.resultTextTemp="",this.APPID="23265215",this.API_SECRET="YzMzMWUzMmFkYjU2ZjE5OTc4M2Q1NjE1",this.API_KEY="8c58aa034946e1de30f2b145cf0cc3c3"}onRecordButtonClick(){console.log(this.btnStatus),"UNDEFINED"===this.btnStatus||"CLOSED"===this.btnStatus?this.connectWebSocket():"CONNECTING"!==this.btnStatus&&"OPEN"!==this.btnStatus||this.recordStop()}recordStart(){return __awaiter(this,void 0,void 0,(function*(){this.createRecorder(),yield this.openWithPriviledge(),this.recorder.start(),this.changeBtnStatus("OPEN")}))}recordStop(){var e;null===(e=this.recorder)||void 0===e||e.stop(((e,t)=>{this.iatWS.send(JSON.stringify({data:{status:2,format:"audio/L16;rate=16000",encoding:this.encodingType,audio:""}}));let o=(window.URL||webkitURL).createObjectURL(e);console.log(e,o,"时长:"+t+"ms"),this.recordPcmBlob=e,this.recorder.close(),this.recorder=null,console.log("localUrl",o)}),(e=>{console.log("录音失败:"+e),this.recorder.close(),this.recorder=null})),clearInterval(this.countdownInterval),this.changeBtnStatus("CLOSED")}playRecord(){this.playPCM(this.recordPcmBlob,44100)}playPCM(e,t){let o=new FileReader;o.onload=function(e){let o=pcmtoWav(e.target.result,t,1,16),n=new Audio;n.src=o,n.play()},o.readAsArrayBuffer(e)}playBuffers(){return __awaiter(this,void 0,void 0,(function*(){let e=yield this.BuffersToBlob(this.buffers);this.playPCM(e,44100)}))}BuffersToBlob(e){let t=[];return e.forEach((e=>{e.forEach((e=>{t.push(e)}))})),new Blob([t],{type:"audio/pcm"})}splitAudioData(e){const t=1280,o=Math.ceil(e.length/t),n=[];for(let i=0;i<o;i++){const o=i*t,r=o+t,a=e.slice(o,r);n.push(a)}return n}BufferToBlob(e){return new Blob([e],{type:"audio/pcm"})}createRecorder(){this.recorder||(this.recorder=Recorder({type:this.recordType,sampleRate:44100,bitRate:16,onProcess:(e,t,o,n,i,r)=>{var a;let s=e.length&&e[e.length-1];if(this.buffers=e,s=resampleBuffer(s,44100,16e3),this.iatWS.readyState===this.iatWS.OPEN){if(this.disableASR)return;this.iatWS.send(JSON.stringify({data:{status:1,format:"audio/L16;rate=16000",encoding:this.encodingType,audio:convertFrameBufferToBase64(s)}}))}null===(a=this.waveClient)||void 0===a||a.input(e[e.length-1],t,n)}}))}openWithPriviledge(){return console.log(this.btnStatus),this.createRecorder(),!!Recorder.IsOpen()||new Promise((e=>{this.recorder.open((()=>{Recorder.WaveView&&(this.waveClient=Recorder.WaveView({elem:".record-wave"})),e(!0)}),((e,t)=>{console.log((t?"UserNotAllow,":"")+"无法录音:"+e)}))}))}getWebSocketUrl(){let e="wss://iat-api.xfyun.cn/v2/iat",t="iat-api.xfyun.cn",o=this.API_KEY,n=this.API_SECRET,i=(new Date).toUTCString(),r=`host: ${t}\ndate: ${i}\nGET /v2/iat HTTP/1.1`,a=CryptoJS.HmacSHA256(r,n),s=CryptoJS.enc.Base64.stringify(a);return e=`${e}?authorization=${btoa(`api_key="${o}", algorithm="hmac-sha256", headers="host date request-line", signature="${s}"`)}&date=${i}&host=${t}`,e}toBase64(e){for(var t="",o=new Uint8Array(e),n=o.byteLength,i=0;i<n;i++)t+=String.fromCharCode(o[i]);return window.btoa(t)}countdown(){let e=60;this.connStatus=`录音中(${e}s)`,this.countdownInterval=setInterval((()=>{e-=1,console.log(e),e<=0?(clearInterval(this.countdownInterval),this.recordStop()):this.connStatus=`录音中(${e}s)`}),1e3)}changeBtnStatus(e){this.btnStatus=e,"CONNECTING"===e?(this.connStatus="建立连接中",this.resultText="",this.resultTextTemp=""):"OPEN"===e?this.countdown():"CLOSING"===e?this.connStatus="关闭连接中":"CLOSED"===e&&(this.connStatus="开始录音")}renderResult(e){let t=JSON.parse(e);if(console.log(t),console.log(t.data),console.log(t.data.result),t.data&&t.data.result){let e=t.data.result,o="",n=e.ws;for(let e=0;e<n.length;e++)o+=n[e].cw[0].w,console.log(o);e.pgs?("apd"===e.pgs&&(this.resultText=this.resultTextTemp),this.resultTextTemp=this.resultText+o):this.resultText=this.resultText+o,this.resultTextTemp||this.resultText}0===t.code&&2===t.data.status&&this.iatWS.close(),0!==t.code&&(this.iatWS.close(),console.error(t))}connectWebSocket(){console.log("connectWebSocket");const e=this.getWebSocketUrl();if("WebSocket"in window)this.iatWS=new WebSocket(e);else if(!("MozWebSocket"in window))return void alert("浏览器不支持WebSocket");console.log("connectWebSocket",this.btnStatus),this.changeBtnStatus("CONNECTING"),this.iatWS.onopen=e=>{this.recordStart();var t={common:{app_id:this.APPID},business:{language:"zh_cn",domain:"iat",accent:"mandarin",vad_eos:5e3,dwa:"wpgs"},data:{status:0,format:"audio/L16;rate=16000",encoding:this.encodingType}};this.iatWS.send(JSON.stringify(t))},this.iatWS.onmessage=e=>{this.renderResult(e.data)},this.iatWS.onerror=e=>{console.error("error",e),this.recordStop(),this.changeBtnStatus("CLOSED")},this.iatWS.onclose=e=>{console.error("close",e),this.recordStop(),this.changeBtnStatus("CLOSED")}}}FmodeVoiceService.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmodeVoiceService,deps:[],target:i0.ɵɵFactoryTarget.Injectable}),FmodeVoiceService.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmodeVoiceService,providedIn:"root"}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmodeVoiceService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:function(){return[]}}),window._AMapSecurityConfig={securityJsCode:"32aa3f4ab0fa0061de03edd4eafdd50a"};class PageMapStartComponent{constructor(){this.placeList=[{name:"江财蛟桥校区",location:[115.855125,28.744335]},{name:"江财枫林校区",location:[115.835639,28.734119]},{name:"江财麦庐校区",location:[115.816717,28.728899]}]}ngAfterViewInit(){this.initMap()}initMap(){return __awaiter(this,void 0,void 0,(function*(){yield this.createMap(),this.goAndMarkPlace(this.placeList[1])}))}createMap(){return __awaiter(this,void 0,void 0,(function*(){this.AMap=yield AMapLoader.load({key:"473b52010df7d3a32db0a2f5db245c8e",version:"2.0"}),this.map=new this.AMap.Map("container")}))}addMarks(){return __awaiter(this,void 0,void 0,(function*(){let e=new this.AMap.Marker({position:[115.835639,28.734119]});this.map.add(e)}))}goAndMarkPlace(e){this.map.setCenter(e.location),this.map.setZoom(18),console.log(this.placeList),e.marker||(e.marker=new this.AMap.Marker({position:e.location}),this.map.add(e.marker))}clearMark(e){var t;null===(t=null==e?void 0:e.marker)||void 0===t||t.remove()}planRoute(e,t){let o;this.map.plugin(["AMap.Transfer"],(()=>{let n={map:this.map,city:"南昌市",panel:"panel",policy:this.AMap.TransferPolicy.LEAST_TIME};console.log(this.AMap),console.log(this.AMap.TransferPolicy),o=new this.AMap.Transfer(n),o.search(new this.AMap.LngLat(e.location[0],e.location[1]),new this.AMap.LngLat(t.location[0],t.location[1]),((e,t)=>{"complete"===e?(console.log("绘制公交路线完成:"),console.log(t)):console.error("公交路线数据查询失败"+t)}))}))}}PageMapStartComponent.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:PageMapStartComponent,deps:[],target:i0.ɵɵFactoryTarget.Component}),PageMapStartComponent.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.1.0",type:PageMapStartComponent,selector:"app-page-map.start",ngImport:i0,template:'\x3c!-- 全屏地图 --\x3e\n<div id="container"></div>\n\n\x3c!-- 右侧地点 --\x3e\n<div class="place-list">\n <ng-container *ngFor="let place of placeList">\n <div class="place-item" (click)="goAndMarkPlace(place)">\n {{place.name}}\n <button (click)="clearMark(place)">清除标记</button>\n </div>\n </ng-container>\n\n <button (click)="planRoute(placeList[0],placeList[1])">从蛟桥到枫林</button>\n \n</div>',styles:["#container{width:100%;height:100%;position:fixed}.place-list{display:flex;flex-direction:column;position:fixed;justify-content:center;align-items:center;height:80%;width:200px}.place-list .place-item{background-color:#ffffff4d;height:100px;width:90%}\n"],dependencies:[{kind:"directive",type:i1$3.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]}]}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:PageMapStartComponent,decorators:[{type:Component,args:[{selector:"app-page-map.start",template:'\x3c!-- 全屏地图 --\x3e\n<div id="container"></div>\n\n\x3c!-- 右侧地点 --\x3e\n<div class="place-list">\n <ng-container *ngFor="let place of placeList">\n <div class="place-item" (click)="goAndMarkPlace(place)">\n {{place.name}}\n <button (click)="clearMark(place)">清除标记</button>\n </div>\n </ng-container>\n\n <button (click)="planRoute(placeList[0],placeList[1])">从蛟桥到枫林</button>\n \n</div>',styles:["#container{width:100%;height:100%;position:fixed}.place-list{display:flex;flex-direction:column;position:fixed;justify-content:center;align-items:center;height:80%;width:200px}.place-list .place-item{background-color:#ffffff4d;height:100px;width:90%}\n"]}]}]}),window._AMapSecurityConfig={securityJsCode:"32aa3f4ab0fa0061de03edd4eafdd50a"};class CompPoiPickerComponent{get name(){return this._name}set name(e){this._name=e,this.nameChange.emit(e)}get address(){return this._address}set address(e){this._address=e,this.addressChange.emit(e)}get location(){return this._location}set location(e){this._location=e,this.locationChange.emit(e)}constructor(){this.nameChange=new EventEmitter,this.addressChange=new EventEmitter,this.locationChange=new EventEmitter,this.isModalOpen=!1}cancel(){this.isModalOpen=!1,this.modal.dismiss(null,"cancel")}confirm(){this.isModalOpen=!1,this.modal.dismiss(this.address,"confirm")}onWillDismiss(e){"confirm"===e.detail.role&&console.log("确认")}openModal(){this.isModalOpen=!0,setTimeout((()=>{this.initMap()}),800)}ngAfterViewInit(){}initMap(){this.createMap()}createMap(){return __awaiter(this,void 0,void 0,(function*(){this.AMap=yield AMapLoader.load({key:"473b52010df7d3a32db0a2f5db245c8e",version:"2.0"});let e=this.container.nativeElement;this.map=new this.AMap.Map(e),this.goCurrentCenter()}))}goCurrentCenter(){this.AMap.plugin(["AMap.Geolocation"],(()=>{let e=new this.AMap.Geolocation({enableHighAccuracy:!0,timeout:1e4,maximumAge:0,convert:!0,showButton:!0,buttonPosition:"RB",buttonOffset:new this.AMap.Pixel(10,10),showMarker:!1,showCircle:!1,panToLocation:!0,zoomToAccuracy:!1});this.map.addControl(e),e.getCurrentPosition((function(e,t){"complete"===e?(console.log("当前位置经度:"+t.position.getLng()),console.log("当前位置纬度:"+t.position.getLat())):console.log("定位失败:"+t.message)}))}))}searchByAddress(){let e=this.panel.nativeElement;this.AMap.plugin(["AMap.PlaceSearch"],(()=>{let t=new this.AMap.PlaceSearch({pageSize:3,pageIndex:1,map:this.map,panel:e,autoFitView:!0});t.on("selectChanged",(e=>{this.name=e.selected.data.name,this.address=e.selected.data.address,this.location=new Parse.GeoPoint({latitude:e.selected.data.location.lat,longitude:e.selected.data.location.lng}),this.createCenterMarker()})),t.search(this.address)}))}createCenterMarker(){this.centerMarker||(this.centerMarker=new this.AMap.Marker({position:this.map.getCenter(),offset:new this.AMap.Pixel(-15,-15)}),this.map.add(this.centerMarker),this.map.on("dragging",(()=>{this.centerMarker.setPosition(this.map.getCenter())})),this.map.on("dragend",(()=>{let e=this.centerMarker.getPosition();this.location=new Parse.GeoPoint({latitude:e.lat,longitude:e.lng})})))}}CompPoiPickerComponent.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:CompPoiPickerComponent,deps:[],target:i0.ɵɵFactoryTarget.Component}),CompPoiPickerComponent.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.1.0",type:CompPoiPickerComponent,selector:"fm-map-poi-picker",inputs:{_name:["name","_name"],_address:["address","_address"],_location:["location","_location"]},outputs:{nameChange:"nameChange",addressChange:"addressChange",locationChange:"locationChange"},viewQueries:[{propertyName:"container",first:!0,predicate:["container"],descendants:!0},{propertyName:"panel",first:!0,predicate:["panel"],descendants:!0},{propertyName:"modal",first:!0,predicate:IonModal,descendants:!0}],ngImport:i0,template:'\x3c!-- 未选点 --\x3e\n<ion-button (click)="openModal()" expand="block">开始选点</ion-button>\n\n\x3c!-- 已选点 --\x3e\n\n<ion-modal [isOpen]="isModalOpen" (willDismiss)="onWillDismiss($event)">\n<ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot="start">\n <ion-button (click)="cancel()">Cancel</ion-button>\n </ion-buttons>\n <ion-title>地图选点<ng-container *ngIf="location">({{location.latitude}},{{location.longitude}})</ng-container></ion-title>\n <ion-buttons slot="end">\n <ion-button (click)="confirm()" [strong]="true">Confirm</ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class="ion-padding" style="height:100%">\n \x3c!-- 详细地址 --\x3e\n <ion-item>\n <ion-input\n label="请输入详细地址"\n labelPlacement="stacked"\n type="text"\n placeholder="精确到门牌号"\n [(ngModel)]="address"\n ></ion-input>\n <ion-button slot="end" (click)="searchByAddress()">搜索</ion-button>\n </ion-item>\n \n \x3c!-- 地图选点 --\x3e\n <div #container class="container"></div>\n <div #panel class="panel"></div>\n\n </ion-content>\n</ng-template>\n</ion-modal>\n\n',styles:[".container{width:100%;height:100%}.panel{position:absolute;background-color:#fff;max-height:50%;overflow-y:auto;top:12%;right:10px;width:45%}\n"],dependencies:[{kind:"directive",type:i1$3.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:i2.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i2.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"component",type:i3.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:i3.IonButtons,selector:"ion-buttons",inputs:["collapse"]},{kind:"component",type:i3.IonContent,selector:"ion-content",inputs:["color","forceOverscroll","fullscreen","scrollEvents","scrollX","scrollY"]},{kind:"component",type:i3.IonHeader,selector:"ion-header",inputs:["collapse","mode","translucent"]},{kind:"component",type:i3.IonInput,selector:"ion-input",inputs:["accept","autocapitalize","autocomplete","autocorrect","autofocus","clearInput","clearOnEdit","color","counter","counterFormatter","debounce","disabled","enterkeyhint","errorText","fill","helperText","inputmode","label","labelPlacement","legacy","max","maxlength","min","minlength","mode","multiple","name","pattern","placeholder","readonly","required","shape","size","spellcheck","step","type","value"]},{kind:"component",type:i3.IonItem,selector:"ion-item",inputs:["button","color","counter","counterFormatter","detail","detailIcon","disabled","download","fill","href","lines","mode","rel","routerAnimation","routerDirection","shape","target","type"]},{kind:"component",type:i3.IonTitle,selector:"ion-title",inputs:["color","size"]},{kind:"component",type:i3.IonToolbar,selector:"ion-toolbar",inputs:["color","mode"]},{kind:"component",type:i3.IonModal,selector:"ion-modal",inputs:["animated","keepContentsMounted","backdropBreakpoint","backdropDismiss","breakpoints","canDismiss","cssClass","enterAnimation","event","handle","handleBehavior","initialBreakpoint","isOpen","keyboardClose","leaveAnimation","mode","presentingElement","showBackdrop","translucent","trigger"]},{kind:"directive",type:i3.TextValueAccessor,selector:"ion-input:not([type=number]),ion-textarea,ion-searchbar"}]}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:CompPoiPickerComponent,decorators:[{type:Component,args:[{selector:"fm-map-poi-picker",template:'\x3c!-- 未选点 --\x3e\n<ion-button (click)="openModal()" expand="block">开始选点</ion-button>\n\n\x3c!-- 已选点 --\x3e\n\n<ion-modal [isOpen]="isModalOpen" (willDismiss)="onWillDismiss($event)">\n<ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot="start">\n <ion-button (click)="cancel()">Cancel</ion-button>\n </ion-buttons>\n <ion-title>地图选点<ng-container *ngIf="location">({{location.latitude}},{{location.longitude}})</ng-container></ion-title>\n <ion-buttons slot="end">\n <ion-button (click)="confirm()" [strong]="true">Confirm</ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class="ion-padding" style="height:100%">\n \x3c!-- 详细地址 --\x3e\n <ion-item>\n <ion-input\n label="请输入详细地址"\n labelPlacement="stacked"\n type="text"\n placeholder="精确到门牌号"\n [(ngModel)]="address"\n ></ion-input>\n <ion-button slot="end" (click)="searchByAddress()">搜索</ion-button>\n </ion-item>\n \n \x3c!-- 地图选点 --\x3e\n <div #container class="container"></div>\n <div #panel class="panel"></div>\n\n </ion-content>\n</ng-template>\n</ion-modal>\n\n',styles:[".container{width:100%;height:100%}.panel{position:absolute;background-color:#fff;max-height:50%;overflow-y:auto;top:12%;right:10px;width:45%}\n"]}]}],ctorParameters:function(){return[]},propDecorators:{container:[{type:ViewChild,args:["container"]}],panel:[{type:ViewChild,args:["panel"]}],_name:[{type:Input,args:["name"]}],nameChange:[{type:Output}],_address:[{type:Input,args:["address"]}],addressChange:[{type:Output}],_location:[{type:Input,args:["location"]}],locationChange:[{type:Output}],modal:[{type:ViewChild,args:[IonModal]}]}});class CompPoiPickerModule{}CompPoiPickerModule.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:CompPoiPickerModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule}),CompPoiPickerModule.ɵmod=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.1.0",ngImport:i0,type:CompPoiPickerModule,declarations:[CompPoiPickerComponent],imports:[CommonModule,FormsModule,ReactiveFormsModule,i3.IonicModule],exports:[CompPoiPickerComponent]}),CompPoiPickerModule.ɵinj=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:CompPoiPickerModule,imports:[CommonModule,FormsModule,ReactiveFormsModule,IonicModule.forRoot({mode:"ios"})]}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:CompPoiPickerModule,decorators:[{type:NgModule,args:[{declarations:[CompPoiPickerComponent],imports:[CommonModule,FormsModule,ReactiveFormsModule,IonicModule.forRoot({mode:"ios"})],exports:[CompPoiPickerComponent]}]}]}),window._AMapSecurityConfig={securityJsCode:"32aa3f4ab0fa0061de03edd4eafdd50a"};class PagePlanRouteComponent{constructor(){this.placeList=[],this.currentTab="place",this.addNewPlace(),this.addNewPlace(),this.currentTab="plan"}addNewPlace(){var e;(null===(e=this.placeList)||void 0===e?void 0:e.length)>=1?this.placeList.push({name:"秋水广场",address:"南昌市秋水广场",location:new Parse.GeoPoint({latitude:28.682634,longitude:115.86273})}):this.placeList.push({name:"八一广场",address:"南昌市八一广场",location:new Parse.GeoPoint({latitude:28.673856,longitude:115.904477})})}ngAfterViewInit(){}initMap(){return __awaiter(this,void 0,void 0,(function*(){yield this.createMap(),this.goAndMarkPlace(this.placeList[0])}))}createMap(){return __awaiter(this,void 0,void 0,(function*(){this.AMap=yield AMapLoader.load({key:"473b52010df7d3a32db0a2f5db245c8e",version:"2.0"}),this.map=new this.AMap.Map("container-plan")}))}goAndMarkPlace(e){this.map.setCenter([e.location.latitude,e.location.longitude]),this.map.setZoom(18),e.marker||(e.marker=new this.AMap.Marker({position:[e.location.latitude,e.location.longitude]}),this.map.add(e.marker))}clearMark(e){var t;null===(t=null==e?void 0:e.marker)||void 0===t||t.remove()}planRoute(e,t){let o;this.map.plugin(["AMap.Transfer"],(()=>{let n={map:this.map,city:"南昌市",panel:"panel",policy:this.AMap.TransferPolicy.LEAST_TIME};o=new this.AMap.Transfer(n);let i=new this.AMap.LngLat(e.location.longitude,e.location.latitude),r=new this.AMap.LngLat(t.location.longitude,t.location.latitude);o.search(i,r,((e,t)=>{"complete"===e?(console.log("绘制公交路线完成:"),console.log(t)):console.error("公交路线数据查询失败"+t)}))}))}createPlan(){return __awaiter(this,void 0,void 0,(function*(){yield this.initMap(),this.planRoute(this.placeList[0],this.placeList[1])}))}}PagePlanRouteComponent.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:PagePlanRouteComponent,deps:[],target:i0.ɵɵFactoryTarget.Component}),PagePlanRouteComponent.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.1.0",type:PagePlanRouteComponent,selector:"app-page-plan-route",ngImport:i0,template:'<ion-segment value="place">\n <ion-segment-button (click)="currentTab=\'place\'" value="place">\n <ion-label>景点选择</ion-label>\n </ion-segment-button>\n <ion-segment-button (click)="currentTab=\'plan\'" value="plan">\n <ion-label>路线规划</ion-label>\n </ion-segment-button>\n </ion-segment>\n \n\n<ng-container *ngIf="currentTab==\'place\'">\n <h1>选择旅游计划景点</h1>\n\n <ng-container *ngFor="let place of placeList">\n <ion-card>\n <h2>{{place?.name}}</h2>\n <span *ngIf="place.address">详细地址:{{place.address}}</span>\n <span *ngIf="place.location">地图坐标:{{place.location.latitude}},{{place.location.longitude}}</span>\n <fm-map-poi-picker [(name)]="place.name" [(address)]="place.address" [(location)]="place.location"></fm-map-poi-picker>\n </ion-card>\n </ng-container>\n <ion-button (click)="addNewPlace()" expand="block">添加新景点</ion-button>\n</ng-container>\n\n<ng-container *ngIf="currentTab==\'plan\'">\n <ion-button (click)="createPlan()" expand="block">创建规划路线</ion-button>\n\n <div id="container-plan"></div>\n <div id="panel"></div>\n</ng-container>\n\n',styles:["#container-plan{width:100%;height:40%}#panel{width:100%;height:50%}\n"],dependencies:[{kind:"directive",type:i1$3.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:i1$3.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"component",type:i3.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:i3.IonCard,selector:"ion-card",inputs:["button","color","disabled","download","href","mode","rel","routerAnimation","routerDirection","target","type"]},{kind:"component",type:i3.IonLabel,selector:"ion-label",inputs:["color","mode","position"]},{kind:"component",type:i3.IonSegment,selector:"ion-segment",inputs:["color","disabled","mode","scrollable","selectOnFocus","swipeGesture","value"]},{kind:"component",type:i3.IonSegmentButton,selector:"ion-segment-button",inputs:["disabled","layout","mode","type","value"]},{kind:"directive",type:i3.SelectValueAccessor,selector:"ion-range, ion-select, ion-radio-group, ion-segment, ion-datetime"},{kind:"component",type:CompPoiPickerComponent,selector:"fm-map-poi-picker",inputs:["name","address","location"],outputs:["nameChange","addressChange","locationChange"]}]}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:PagePlanRouteComponent,decorators:[{type:Component,args:[{selector:"app-page-plan-route",template:'<ion-segment value="place">\n <ion-segment-button (click)="currentTab=\'place\'" value="place">\n <ion-label>景点选择</ion-label>\n </ion-segment-button>\n <ion-segment-button (click)="currentTab=\'plan\'" value="plan">\n <ion-label>路线规划</ion-label>\n </ion-segment-button>\n </ion-segment>\n \n\n<ng-container *ngIf="currentTab==\'place\'">\n <h1>选择旅游计划景点</h1>\n\n <ng-container *ngFor="let place of placeList">\n <ion-card>\n <h2>{{place?.name}}</h2>\n <span *ngIf="place.address">详细地址:{{place.address}}</span>\n <span *ngIf="place.location">地图坐标:{{place.location.latitude}},{{place.location.longitude}}</span>\n <fm-map-poi-picker [(name)]="place.name" [(address)]="place.address" [(location)]="place.location"></fm-map-poi-picker>\n </ion-card>\n </ng-container>\n <ion-button (click)="addNewPlace()" expand="block">添加新景点</ion-button>\n</ng-container>\n\n<ng-container *ngIf="currentTab==\'plan\'">\n <ion-button (click)="createPlan()" expand="block">创建规划路线</ion-button>\n\n <div id="container-plan"></div>\n <div id="panel"></div>\n</ng-container>\n\n',styles:["#container-plan{width:100%;height:40%}#panel{width:100%;height:50%}\n"]}]}],ctorParameters:function(){return[]}}),window._AMapSecurityConfig={securityJsCode:"32aa3f4ab0fa0061de03edd4eafdd50a"};class PageLocaScatterComponent{ngAfterViewInit(){this.initMap()}initMap(){return __awaiter(this,void 0,void 0,(function*(){yield this.createMap(),yield this.createLoca()}))}createLoca(){return __awaiter(this,void 0,void 0,(function*(){let e=window.loca=new Loca.Container({map:this.map}),t=new Loca.GeoJSONSource({url:"https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road.json"}),o=new Loca.ScatterLayer({zIndex:111,opacity:1,visible:!0,zooms:[2,22]});o.setSource(t),o.setStyle({color:"rgba(43,156,75,1)",unit:"meter",size:[150,150],borderWidth:0}),e.add(o);let n=new Loca.GeoJSONSource({url:"https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road_F.json"}),i=new Loca.ScatterLayer({loca:e,zIndex:113,opacity:1,visible:!0,zooms:[2,22]});i.setSource(n),i.setStyle({unit:"meter",size:[2600,2600],borderWidth:0,texture:"https://a.amap.com/Loca/static/loca-v2/demos/images/breath_red.png",duration:500,animate:!0});let r=new Loca.GeoJSONSource({url:"https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road_E.json"}),a=new Loca.ScatterLayer({loca:e,zIndex:112,opacity:1,visible:!0,zooms:[2,22]});a.setSource(r),a.setStyle({unit:"meter",size:[1e3,1e3],borderWidth:0,texture:"https://a.amap.com/Loca/static/loca-v2/demos/images/breath_yellow.png",duration:1e3,animate:!0}),e.animate.start();let s=new Loca.Dat;s.addLayer(o," 贴地"),s.addLayer(i,"红色"),s.addLayer(a,"黄色")}))}createMap(){return __awaiter(this,void 0,void 0,(function*(){this.AMap=yield AMapLoader.load({key:"473b52010df7d3a32db0a2f5db245c8e",version:"2.0",Loca:{version:"2.0.0"}}),this.map=new this.AMap.Map("container",{zoom:11.7,center:[113.97199630737305,22.5807295363949],pitch:40,showLabel:!1,mapStyle:"amap://styles/dark",viewMode:"3D"})}))}}PageLocaScatterComponent.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:PageLocaScatterComponent,deps:[],target:i0.ɵɵFactoryTarget.Component}),PageLocaScatterComponent.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.1.0",type:PageLocaScatterComponent,selector:"app-page-loca-scatter",ngImport:i0,template:'<div id="container"></div>',styles:["#container{width:100%;height:100%;position:fixed}\n"]}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:PageLocaScatterComponent,decorators:[{type:Component,args:[{selector:"app-page-loca-scatter",template:'<div id="container"></div>',styles:["#container{width:100%;height:100%;position:fixed}\n"]}]}]});const routes=[{path:"start",component:PageMapStartComponent},{path:"plan/route",component:PagePlanRouteComponent},{path:"loca/scatter",component:PageLocaScatterComponent}];class FmodeMapModule{}FmodeMapModule.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmodeMapModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule}),FmodeMapModule.ɵmod=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.1.0",ngImport:i0,type:FmodeMapModule,declarations:[PageMapStartComponent,PagePlanRouteComponent,PageLocaScatterComponent],imports:[CommonModule,i1$1.RouterModule,i3.IonicModule,CompPoiPickerModule],exports:[CompPoiPickerModule]}),FmodeMapModule.ɵinj=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmodeMapModule,imports:[CommonModule,RouterModule.forChild(routes),IonicModule.forRoot({mode:"ios"}),CompPoiPickerModule,CompPoiPickerModule]}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmodeMapModule,decorators:[{type:NgModule,args:[{declarations:[PageMapStartComponent,PagePlanRouteComponent,PageLocaScatterComponent],imports:[CommonModule,RouterModule.forChild(routes),IonicModule.forRoot({mode:"ios"}),CompPoiPickerModule],exports:[CompPoiPickerModule]}]}]});class HwobsService{constructor(){this.Attachment=Parse.Object.extend("Attachment"),this.host="https://web3-test.obs.cn-south-1.myhuaweicloud.com/",this.bucketName="web3-test",this.obsClient=new ObsClient({access_key_id:"6UIET20WHUI5TLXWOVNA",secret_access_key:"YaoY8Kj3TeGZHEcBzplTMZiPGNL13Y3frEavC1kF",server:"https://obs.cn-south-1.myhuaweicloud.com"})}listDir(e){return new Promise(((t,o)=>{this.obsClient.listObjects({Bucket:this.bucketName,Prefix:e,Delimiter:"/"},((e,n)=>{if(e)console.error("Error--\x3e"+e),o(e);else{if(console.log("Status--\x3e"+n.CommonMsg.Status),console.log(n),n.CommonMsg.Status<300&&n.InterfaceResult)for(var i in n.InterfaceResult.Contents)console.log("Contents["+i+"]:"),console.log("Key--\x3e"+n.InterfaceResult.Contents[i].Key),console.log("Owner[ID]--\x3e"+n.InterfaceResult.Contents[i].Owner.ID);let e=n.InterfaceResult.CommonPrefixes,o=n.InterfaceResult.Contents;t({dirs:e,files:o})}}))}))}uploadFile(e,t){return __awaiter(this,void 0,void 0,(function*(){let o=yield this.checkFileExists(e);return(null==o?void 0:o.id)?o:new Promise(((o,n)=>{this.obsClient.putObject({Bucket:this.bucketName,Key:t,SourceFile:e},((i,r)=>__awaiter(this,void 0,void 0,(function*(){if(i)console.error("Error--\x3e"+i),n(i);else{console.log("Status--\x3e"+r.CommonMsg.Status);let n=yield this.saveAttachment(e,t);o(n)}}))))}))}))}checkFileExists(e){return __awaiter(this,void 0,void 0,(function*(){let t,o=yield this.getFileHash(e),n=new Parse.Query("Attachment");n.equalTo("hash",o),n.equalTo("size",e.size);let i=yield n.first();return(null==i?void 0:i.id)||(i=new this.Attachment),t=i,t}))}saveAttachment(e,t){return __awaiter(this,void 0,void 0,(function*(){let o=yield this.getFileHash(e),n=yield this.checkFileExists(e);return n.set("name",e.name),n.set("size",e.size),n.set("mime",e.type),n.set("url",this.host+t),n.set("hash",o),n=yield n.save(),n}))}getFileHash(e){return __awaiter(this,void 0,void 0,(function*(){return new Promise(((t,o)=>{const n=new FileReader;n.onload=e=>__awaiter(this,void 0,void 0,(function*(){const o=e.target.result,n=yield crypto.subtle.digest("SHA-256",o),i=Array.from(new Uint8Array(n)).map((e=>e.toString(16).padStart(2,"0"))).join("");t(i)})),n.onerror=e=>{o(e.target.error)},n.readAsArrayBuffer(e)}))}))}}HwobsService.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:HwobsService,deps:[],target:i0.ɵɵFactoryTarget.Injectable}),HwobsService.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:HwobsService,providedIn:"root"}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:HwobsService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:function(){return[]}});class HwobsManagerComponent{openFile(e){console.log("Opening file:",e)}openDir(e,t="pre"){if(e)this.prefix=e.Prefix,this.listDir(e.Prefix);else if("pre"==t){let e=this.prefix.split("/");if(e.length>1){let t=e.splice(0,e.length-1).join("/");console.log(t),this.prefix=t,this.listDir(t)}}}showName(e){return e.replaceAll(this.prefix,"")}constructor(e){this.hwobs=e,this.dirs=[],this.files=[],this.prefix="storage/",this.listDir(this.prefix)}listDir(e){return __awaiter(this,void 0,void 0,(function*(){let{dirs:t,files:o}=yield this.hwobs.listDir(e);this.dirs=t,this.files=o}))}}HwobsManagerComponent.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:HwobsManagerComponent,deps:[{token:HwobsService}],target:i0.ɵɵFactoryTarget.Component}),HwobsManagerComponent.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"15.1.0",type:HwobsManagerComponent,isStandalone:!0,selector:"fm-storage-hwobs-manager",ngImport:i0,template:'<ion-header>\n <ion-toolbar>\n <ion-title>\n File Manager\n </ion-title>\n </ion-toolbar>\n </ion-header>\n \n <ion-content>\n <ion-list>\n <ion-item (click)="openDir(null,\'pre\')">\n <ion-icon [name]="\'folder\'" slot="start"></ion-icon>\n <ion-label>../</ion-label>\n </ion-item>\n <ion-item *ngFor="let item of dirs" (click)="openDir(item)">\n <ion-icon [name]="\'folder\'" slot="start"></ion-icon>\n <ion-label>{{ showName(item.Prefix) }}</ion-label>\n </ion-item>\n <ion-item *ngFor="let item of files" (click)="openFile(item)">\n <ion-icon [name]="\'document\'" slot="start"></ion-icon>\n <ion-label>{{ showName(item.Key) }}</ion-label>\n </ion-item>\n </ion-list>\n </ion-content>',styles:["ion-list ion-item ion-icon{font-size:24px;margin-right:8px}\n"],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"directive",type:i1$3.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"ngmodule",type:FormsModule},{kind:"ngmodule",type:ReactiveFormsModule},{kind:"ngmodule",type:IonicModule},{kind:"component",type:i3.IonContent,selector:"ion-content",inputs:["color","forceOverscroll","fullscreen","scrollEvents","scrollX","scrollY"]},{kind:"component",type:i3.IonHeader,selector:"ion-header",inputs:["collapse","mode","translucent"]},{kind:"component",type:i3.IonIcon,selector:"ion-icon",inputs:["color","flipRtl","icon","ios","lazy","md","mode","name","sanitize","size","src"]},{kind:"component",type:i3.IonItem,selector:"ion-item",inputs:["button","color","counter","counterFormatter","detail","detailIcon","disabled","download","fill","href","lines","mode","rel","routerAnimation","routerDirection","shape","target","type"]},{kind:"component",type:i3.IonLabel,selector:"ion-label",inputs:["color","mode","position"]},{kind:"component",type:i3.IonList,selector:"ion-list",inputs:["inset","lines","mode"]},{kind:"component",type:i3.IonTitle,selector:"ion-title",inputs:["color","size"]},{kind:"component",type:i3.IonToolbar,selector:"ion-toolbar",inputs:["color","mode"]}]}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:HwobsManagerComponent,decorators:[{type:Component,args:[{standalone:!0,imports:[CommonModule,FormsModule,ReactiveFormsModule,IonicModule],selector:"fm-storage-hwobs-manager",template:'<ion-header>\n <ion-toolbar>\n <ion-title>\n File Manager\n </ion-title>\n </ion-toolbar>\n </ion-header>\n \n <ion-content>\n <ion-list>\n <ion-item (click)="openDir(null,\'pre\')">\n <ion-icon [name]="\'folder\'" slot="start"></ion-icon>\n <ion-label>../</ion-label>\n </ion-item>\n <ion-item *ngFor="let item of dirs" (click)="openDir(item)">\n <ion-icon [name]="\'folder\'" slot="start"></ion-icon>\n <ion-label>{{ showName(item.Prefix) }}</ion-label>\n </ion-item>\n <ion-item *ngFor="let item of files" (click)="openFile(item)">\n <ion-icon [name]="\'document\'" slot="start"></ion-icon>\n <ion-label>{{ showName(item.Key) }}</ion-label>\n </ion-item>\n </ion-list>\n </ion-content>',styles:["ion-list ion-item ion-icon{font-size:24px;margin-right:8px}\n"]}]}],ctorParameters:function(){return[{type:HwobsService}]}});class FmodeStorgeModule{}FmodeStorgeModule.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmodeStorgeModule,deps:[],target:i0.ɵɵFactoryTarget.NgModule}),FmodeStorgeModule.ɵmod=i0.ɵɵngDeclareNgModule({minVersion:"14.0.0",version:"15.1.0",ngImport:i0,type:FmodeStorgeModule,imports:[CommonModule,i3.IonicModule,HwobsManagerComponent],exports:[HwobsManagerComponent]}),FmodeStorgeModule.ɵinj=i0.ɵɵngDeclareInjector({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmodeStorgeModule,imports:[CommonModule,IonicModule.forRoot({mode:"ios"}),HwobsManagerComponent]}),i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"15.1.0",ngImport:i0,type:FmodeStorgeModule,decorators:[{type:NgModule,args:[{declarations:[],imports:[CommonModule,IonicModule.forRoot({mode:"ios"}),HwobsManagerComponent],exports:[HwobsManagerComponent]}]}]});export{ChatService,CompPoiPickerComponent,CompPoiPickerModule,FmaiService,FmodeChat,FmodeChatCompletion,FmodeMapModule,FmodeStorgeModule,FmodeVoiceService,HwobsManagerComponent,HwobsService,ImagineService,MASK_LIST,MarkdownPreviewComponent,MarkdownPreviewModule,NovaCloudService};
9
9
  var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9mZXNtMjAxNS9mbW9kZS1uZy5tanM=`
10
10