@vvfx/sdk 0.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +447 -0
- package/dist/index.d.ts +447 -0
- package/dist/index.global.js +286 -0
- package/dist/index.js +1 -0
- package/package.json +75 -0
package/README.md
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
## VVFX SDK
|
|
2
|
+
|
|
3
|
+
VVFX 开放 SDK
|
|
4
|
+
|
|
5
|
+
## 初始化SDK
|
|
6
|
+
|
|
7
|
+
### 入参
|
|
8
|
+
* app提供父级容器
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### 初始化
|
|
12
|
+
* 创建渲染层容器,初始化Player
|
|
13
|
+
* 创建辅助层容器,初始化PixiPlayer
|
|
14
|
+
|
|
15
|
+
## 初始化场景数据
|
|
16
|
+
|
|
17
|
+
### 入参
|
|
18
|
+
* app提供场景数据[JSON格式]
|
|
19
|
+
* app提供视图参数
|
|
20
|
+
|
|
21
|
+
### 初始化
|
|
22
|
+
* 根据场景数据构建页面数据
|
|
23
|
+
* 设置初始化活跃数据
|
|
24
|
+
* 根据活跃数据刷新Player
|
|
25
|
+
* 根据活跃数据刷新PixiPlayer
|
|
26
|
+
|
|
27
|
+
## 运行SDK
|
|
28
|
+
|
|
29
|
+
### 运行
|
|
30
|
+
* 根据活跃数据刷新Player以及PixiPlayer
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var t,e=Object.create,i=Object.defineProperty,s=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,a=Object.getPrototypeOf,n=Object.prototype.hasOwnProperty,o=t=>{throw TypeError(t)},h=(t,e)=>{for(var s in e)i(t,s,{get:e[s],enumerable:!0})},c=(t,e,a,o)=>{if(e&&"object"==typeof e||"function"==typeof e)for(let h of r(e))n.call(t,h)||h===a||i(t,h,{get:()=>e[h],enumerable:!(o=s(e,h))||o.enumerable});return t},l=(t,e,i)=>(c(t,e,"default"),i&&c(i,e,"default")),p=(t,s,r)=>(r=null!=t?e(a(t)):{},c(!s&&t&&t.__esModule?r:i(r,"default",{value:t,enumerable:!0}),t)),m=(t,e,s)=>((t,e,s)=>e in t?i(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s)(t,"symbol"!=typeof e?e+"":e,s),d=(t,e,i)=>e.has(t)||o("Cannot "+i),u=(t,e,i)=>(d(t,e,"read from private field"),i?i.call(t):e.get(t)),y=(t,e,i)=>e.has(t)?o("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,i),f=(t,e,i,s)=>(d(t,e,"write to private field"),s?s.call(t,i):e.set(t,i),i),g={};h(g,{ExportStatusMap:()=>pe,SDK:()=>me,spec:()=>v.spec}),module.exports=(t=g,c(i({},"__esModule",{value:!0}),t));var w={};h(w,{Composition:()=>v.Composition,EventEmitter:()=>v.EventEmitter,Player:()=>v.Player,SpriteComponent:()=>v.SpriteComponent,TextComponent:()=>v.TextComponent,VFXItem:()=>v.VFXItem,assertExist:()=>v.assertExist,math:()=>v.math,spec:()=>v.spec});var x={};h(x,{Composition:()=>v.Composition,EventEmitter:()=>v.EventEmitter,Player:()=>v.Player,SpriteComponent:()=>v.SpriteComponent,TextComponent:()=>v.TextComponent,VFXItem:()=>v.VFXItem,assertExist:()=>v.assertExist,math:()=>v.math,spec:()=>v.spec});var v=require("@galacean/effects");l(x,require("@galacean/effects-plugin-rich-text")),l(w,x);var P=require("@pixi/app"),b=class{constructor(){m(this,"interactive"),m(this,"type"),m(this,"active"),this.type="null",this.active=!1,this.interactive=!1}},S=1e-6;function E(t,e,i){const s=isNaN(e)?-1/0:e,r=isNaN(i)?1/0:i,a=Math.min(s,r),n=Math.max(s,r);return Math.min(Math.max(t,a),n)}var D=Math.PI/180,I=180/Math.PI;function T(t){return Math.atan2(-t.y,-t.x)+Math.PI}function C(t,e){return Math.abs(t-e)<S||t===1/0&&e===1/0||t===-1/0&&e===-1/0}function A(t){return isNaN(t)||Math.abs(t)<S}var V=class t extends v.math.Vector2{subtract(t){return this.x-=t.x,this.y-=t.y,this}toViewCoordinate(t,e){return this.x=(this.x+1)/2*t,this.y=(1-(this.y+1)/2)*e,this}clone(){return new t(this.x,this.y)}distanceTo(t){const e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)}scaleByCenter(e,i=new t){const s=(new t).subtractVectors(i,this).multiply(e);return(new t).subtractVectors(i,s)}round(t=0){const e=Math.pow(10,t);return this.x=Math.round(this.x*e)/e,this.y=Math.round(this.y*e)/e,this}},M=class t{constructor(t=new V,e=new V){m(this,"start",new V),m(this,"end",new V),this.start.copyFrom(t),this.end.copyFrom(e)}set(t,e){return this.start.copyFrom(t),this.end.copyFrom(e),this}copyFrom(t){return this.start.copyFrom(t.start),this.end.copyFrom(t.end),this}direction(){return(new V).subtractVectors(this.end,this.start).normalize()}getCenter(t=new V){return t.addVectors(this.start,this.end).multiply(.5)}delta(t=new V){return t.subtractVectors(this.end,this.start)}distanceSq(){return this.start.distanceSquared(this.end)}distance(){return this.start.distance(this.end)}at(t,e=new V){return this.delta(e).multiply(t).add(this.start)}closestPointToPointParameter(t,e){const i=new V,s=new V;i.subtractVectors(t,this.start),s.subtractVectors(this.end,this.start);const r=s.dot(s);let a=s.dot(i)/r;return e&&(a=E(a,0,1)),a}closestPointToPoint(t,e,i=new V){const s=this.closestPointToPointParameter(t,e);return this.delta(i).multiply(s).add(this.start)}equals(t){return t.start.equals(this.start)&&t.end.equals(this.end)}clone(){return(new t).copyFrom(this)}length(){return(new V).subtractVectors(this.end,this.start).length()}crossWithLine(t){const e=this.delta(),i=t.delta(),s=(new V).subtractVectors(t.start,this.start),r=(new V).subtractVectors(t.end,this.start),a=(new V).subtractVectors(this.start,t.start),n=(new V).subtractVectors(this.end,t.start),o=s.cross(e),h=r.cross(e),c=a.cross(i),l=n.cross(i);return o*h<0&&c*l<0}},_=class t{constructor(t=new V(1/0,1/0),e=new V(-1/0,-1/0)){m(this,"corners",[]),m(this,"min",new V(1/0,1/0)),m(this,"max",new V(-1/0,-1/0)),this.min=t.clone(),this.max=e.clone(),this.isEmpty()?this.corners=[]:this.corners=[t.clone(),new V(e.x,t.y),e.clone(),new V(t.x,e.y)]}set(t,e){return this.min.copyFrom(t),this.max.copyFrom(e),this.corners=[t.clone(),new V(e.x,t.y),e.clone(),new V(t.x,e.y)],this}setFromVec2Array(t){return this.min=(new V).copyFrom(t[0]),this.max=(new V).copyFrom(t[0]),t.forEach(t=>{this.min.min(t),this.max.max(t),this.corners.push(t.clone())}),this}setFromVec2ArrayWithOutCorners(t){return this.min=(new V).copyFrom(t[0]),this.max=(new V).copyFrom(t[0]),t.forEach(t=>{this.min=this.min.min(t),this.max=this.max.max(t)}),this.corners.push(new V(this.min.x,this.min.y)),this.corners.push(new V(this.min.x,this.max.y)),this.corners.push(new V(this.max.x,this.max.y)),this.corners.push(new V(this.max.x,this.min.y)),this}setFromCenterAndSize(t,e){const i=(new V).copyFrom(e).multiply(.5);return this.min.copyFrom(t).subtract(i),this.max.copyFrom(t).add(i),this.corners=[this.min.clone(),new V(this.max.x,this.min.y),this.max.clone(),new V(this.min.x,this.max.y)],this}clone(){return(new t).copyFrom(this)}copyFrom(t){return this.corners=[],this.min.copyFrom(t.min),this.max.copyFrom(t.max),t.corners.forEach(t=>{this.corners.push(t.clone())}),this}makeEmpty(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this.corners=[],this}isEmpty(){return this.max.x<=this.min.x||this.max.y<=this.min.y}getCorners(){const t=[];return this.corners.forEach(e=>{t.push(e.clone())}),t}getCenter(t=new V){return this.isEmpty()?t.set(0,0):t.addVectors(this.min,this.max).multiply(.5)}getSize(t=new V){return this.isEmpty()?t.set(0,0):t.subtractVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.subtract(t),this.max.add(t),this}expandByScalar(t){return this.min.add(-t),this.max.add(t),this}containsPoint(t,e=!0){if(e)return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y);if(this.isEmpty())return!1;for(let e=0;e<this.corners.length;e++){const i=this.corners[e],s=this.corners[(e+1)%4],r=new V(s.x-i.x,s.y-i.y),a=new V(t.x-i.x,t.y-i.y);if(r.cross(a)<0)return!1}return!0}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e=new V){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}clampPoint(t,e=new V){return e.copyFrom(t).clamp(this.min,this.max)}distanceToPoint(t){return(new V).copyFrom(t).clamp(this.min,this.max).subtract(t).length()}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.min.x>this.max.x||this.min.y>this.max.y?this.makeEmpty():this}union(t){return this.min.min(t.min),this.max.max(t.max),this.corners=[this.min.clone(),new V(this.max.x,this.min.y),this.max.clone(),new V(this.min.x,this.max.y)],this}translate(t){return this.min.add(t),this.max.add(t),this.corners.forEach(e=>{e.add(t)}),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}intersectsBox(t,e=!0){if(e)return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y);if(!this.isEmpty())for(let e=0;e<this.corners.length;e++){const i=new M(this.corners[e],this.corners[(e+1)%4]);if(t.containsPoint(this.corners[e],!1))return!0;for(let e=0;e<t.corners.length;e++){const s=new M(t.corners[e],t.corners[(e+1)%4]);if(this.containsPoint(t.corners[e],!1))return!0;if(i.crossWithLine(s))return!0}}for(let e=0;e<t.corners.length;e++){const i=this.containsPoint(t.corners[e],!1),s=t.containsPoint(this.corners[e],!1);if(i||s)return!0}return!1}},z=class t{constructor(t=new V,e=0){m(this,"center"),m(this,"radius"),this.center=t.clone(),this.radius=e}set(t,e){return this.center=(new V).copyFrom(t),this.radius=e,this}clone(){return(new t).copy(this)}copy(t){return this.center.copyFrom(t.center),this.radius=t.radius,this}makeEmpty(){return this.center=new V,this.radius=0,this}isEmpty(){return 0===this.radius}getCenter(t=new V){return t.copyFrom(this.center),t}getRadius(){return this.radius}expandByPoint(t){return this.radius=this.center.distanceTo(t),this}expandByScalar(t){return this.radius+=t,this}containsPoint(t){return this.center.distanceTo(t)<this.radius}containsBox(t){for(let e=0;e<4;e++)if(!this.containsPoint(t.corners[e]))return!1;return!0}intersectsBox(t){for(let e=0;e<4;e++)if(this.containsPoint(t.corners[e]))return!0;return!1}distanceToPoint(t){return this.center.distanceTo(t)-this.radius}},R=class extends v.math.Quaternion{},F=class t extends v.math.Vector3{clone(){return new t(this.x,this.y,this.z)}setFromMatrixColumn(t,e){return this.set(...t.elements.slice(4*e))}applyEuler(t,e){return this.applyQuaternion((new R).setFromEuler(t))}applyQuaternion(e,i=new t){const{x:s,y:r,z:a,w:n}=e,{x:o,y:h,z:c}=this.subtract(i),l=n*o+r*c-a*h,p=n*h+a*o-s*c,m=n*c+s*h-r*o,d=-s*o-r*h-a*c;return this.x=l*n+d*-s+p*-a-m*-r+i.x,this.y=p*n+d*-r+m*-s-l*-a+i.y,this.z=m*n+d*-a+l*-r-p*-s+i.z,this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}applyMatrix(e,i=new t){const s=e.elements,{x:r,y:a,z:n}=this.subtract(i);let o=1/(s[3]*r+s[7]*a+s[11]*n+s[15]);return o=isNaN(o)?1:o,this.x=(s[0]*r+s[4]*a+s[8]*n+s[12])*o+i.x,this.y=(s[1]*r+s[5]*a+s[9]*n+s[13])*o+i.y,this.z=(s[2]*r+s[6]*a+s[10]*n+s[14])*o+i.z,this}},U=class t extends v.math.Matrix4{static fromArray(e,i=0){return(new t).setFromArray(e,i)}clone(){const e=this.elements;return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15])}compose(t,e,i,s=F.ZERO){const r=this.elements,{x:a,y:n,z:o,w:h}=e,c=-s.x,l=-s.y,p=-s.z,m=a+a,d=n+n,u=o+o,y=a*m,f=a*d,g=a*u,w=n*d,x=n*u,v=o*u,P=h*m,b=h*d,S=h*u,{x:E,y:D,z:I}=i;return r[0]=(1-(w+v))*E,r[1]=(f+S)*E,r[2]=(g-b)*E,r[3]=0,r[4]=(f-S)*D,r[5]=(1-(y+v))*D,r[6]=(x+P)*D,r[7]=0,r[8]=(g+b)*I,r[9]=(x-P)*I,r[10]=(1-(y+w))*I,r[11]=0,r[12]=c*r[0]+l*r[4]+p*r[8]-c+t.x,r[13]=c*r[1]+l*r[5]+p*r[9]-l+t.y,r[14]=c*r[2]+l*r[6]+p*r[10]-p+t.z,this}extractRotation(t){const e=new F,i=t.elements,s=this.elements,r=1/e.setFromMatrixColumn(t,0).length(),a=1/e.setFromMatrixColumn(t,1).length(),n=1/e.setFromMatrixColumn(t,2).length();return s[0]=i[0]*r,s[1]=i[1]*r,s[2]=i[2]*r,s[3]=0,s[4]=i[4]*a,s[5]=i[5]*a,s[6]=i[6]*a,s[7]=0,s[8]=i[8]*n,s[9]=i[9]*n,s[10]=i[10]*n,s[11]=0,s[12]=0,s[13]=0,s[14]=0,s[15]=1,this}makeRotationFromEuler(t){const e=this.elements,i=t.x,s=t.y,r=t.z,a=Math.cos(i),n=Math.sin(i),o=Math.cos(s),h=Math.sin(s),c=Math.cos(r),l=Math.sin(r);if(t.order===v.math.EulerOrder.XYZ){const t=a*c,i=a*l,s=n*c,r=n*l;e[0]=o*c,e[4]=-o*l,e[8]=h,e[1]=i+s*h,e[5]=t-r*h,e[9]=-n*o,e[2]=r-t*h,e[6]=s+i*h,e[10]=a*o}else if(t.order===v.math.EulerOrder.YXZ){const t=o*c,i=o*l,s=h*c,r=h*l;e[0]=t+r*n,e[4]=s*n-i,e[8]=a*h,e[1]=a*l,e[5]=a*c,e[9]=-n,e[2]=i*n-s,e[6]=r+t*n,e[10]=a*o}else if(t.order===v.math.EulerOrder.ZXY){const t=o*c,i=o*l,s=h*c,r=h*l;e[0]=t-r*n,e[4]=-a*l,e[8]=s+i*n,e[1]=i+s*n,e[5]=a*c,e[9]=r-t*n,e[2]=-a*h,e[6]=n,e[10]=a*o}else if(t.order===v.math.EulerOrder.ZYX){const t=a*c,i=a*l,s=n*c,r=n*l;e[0]=o*c,e[4]=s*h-i,e[8]=t*h+r,e[1]=o*l,e[5]=r*h+t,e[9]=i*h-s,e[2]=-h,e[6]=n*o,e[10]=a*o}else if(t.order===v.math.EulerOrder.YZX){const t=a*o,i=a*h,s=n*o,r=n*h;e[0]=o*c,e[4]=r-t*l,e[8]=s*l+i,e[1]=l,e[5]=a*c,e[9]=-n*c,e[2]=-h*c,e[6]=i*l+s,e[10]=t-r*l}else if(t.order===v.math.EulerOrder.XZY){const t=a*o,i=a*h,s=n*o,r=n*h;e[0]=o*c,e[4]=-l,e[8]=h*c,e[1]=t*l+r,e[5]=a*c,e[9]=i*l-s,e[2]=s*l-i,e[6]=n*c,e[10]=r*l+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}setPosition(t){return this.elements[12]=t.x,this.elements[13]=t.y,this.elements[14]=t.z,this}},K=class extends v.math.Euler{constructor(t=0,e=0,i=0,s=v.math.EulerOrder.XYZ){super(t,e,i,s)}getInvertMatrixByEuler(){return(new U).makeRotationFromEuler(this).invert()}toDegreeVector3(t){return t?t.set(this.x*I,this.y*I,this.z*I):new F(this.x*I,this.y*I,this.z*I)}setFromDegreeVector3(t,e){return this.set(t.x*D,t.y*D,t.z*D,e??this.order)}},B=class{constructor(t=new F,e=new F){m(this,"start"),m(this,"end"),this.start=t.clone(),this.end=e.clone()}closestPointToPointParameter(t,e=!1){const i=(new F).subtractVectors(t,this.start),s=(new F).subtractVectors(this.end,this.start),r=s.dot(s);let a=s.dot(i)/r;return e&&(a=E(a,0,1)),a}closestPointToPoint(t,e=!1){const i=this.closestPointToPointParameter(t,e);return this.delta().multiply(i).add(this.start)}delta(){return(new F).subtractVectors(this.end,this.start)}},k=class t{constructor(t=0,e=new F(0,0,1)){m(this,"distance"),m(this,"normal");const i=e.length();0===i&&(this.normal=new F(0,0,1)),this.distance=t/(i??1),this.normal=e.normalize()}static set(e,i){return new t(e,i)}set(t,e){const i=e.length();return 0===i&&(this.normal=new F(0,0,1)),this.distance=t/i,this.normal=e.normalize(),this}static copy(e){return new t(e.distance,e.normal.clone())}copy(t){return this.distance=t.distance,this.normal.copyFrom(t.normal),this}static setFromNormalAndCoplanarPoint(e,i){const s=-e.dot(i);return new t(s,i)}setFromNormalAndCoplanarPoint(t,e){return this.normal.copyFrom(e),this.distance=-t.dot(this.normal),this}clone(){return new t(this.distance,this.normal.clone())}distanceToPoint(t){return this.normal.dot(t)+this.distance}},W=class t extends v.math.Ray{constructor(t=new F,e=new F(1,0,0)){super(t,e),m(this,"origin"),m(this,"direction"),this.origin=t.clone(),this.direction=e.clone()}clone(){return new t(this.origin,this.direction)}rayCastPlane(t,e){const i=this.distanceToPlane(t);return isNaN(i)||this.at(i),i}at(t){return this.direction.clone().normalize().multiply(t).add(this.origin)}distanceToPlane(t){const e=t.normal.dot(this.direction);if(A(e))return A(t.distanceToPoint(this.origin))?0:NaN;const i=(-this.origin.dot(t.normal)-t.distance)/e;return i>0?i:NaN}},G=class{constructor(t=new W){m(this,"ray"),this.ray=t.clone()}setFromCamera(t,e){const i=e.position,s=new F(t.x,t.y,.5).applyMatrix(e.inverseViewProjectMatrix).subtract(i).normalize();return this.ray.set(i,s),this}rayCastPlane(t){const e=new F,i=this.ray.rayCastPlane(t,e);if(!isNaN(i))return{distance:i,point:this.ray.at(i)}}},N=.01,O=2,j=37375,L=6,H=3,Y=15425024,q=16777215,$=.17,X=16777215,J=.78,Z=1,Q=16711680,tt=1,et=1.5,it=16777215,st=0,rt=1,at=.3,nt=4,ot=8,ht=16711680,ct=1,lt=0,pt=.17,mt=16711680,dt=.15,ut=class extends b{constructor(t){super(),m(this,"defaultInteractive",!0),m(this,"interactive",!0),m(this,"lastPoint",new V),m(this,"SDKUtils"),this.SDKUtils=t,this.type="control"}initialize(){}preparationAction(){}cancelPreparation(){}refreshResults(){}preAction(){}action(t){const{metaKey:e,ctrlKey:i,shiftKey:s}=t;if(0===t.buttons){const{deltaX:r,deltaY:a}=t,n=new V(r,a);e||i?(n.y=E(n.y,-10,10),this.dolly(n.y)):(n.x=s&&0!==n.y?Math.sqrt(n.x**2+n.y**2)*n.y/Math.abs(n.y):n.x,n.y=s?0:n.y,this.pan(n.multiply(-1)))}}endAction(){}interruption(){return this.type}actionKey(){}endActionKey(){}dolly(t){const e=-t*N;this.SDKUtils.pageZoom(e)}pan(t){this.SDKUtils.pageMove(t)}getRenderObjects(){return[]}},yt=require("@pixi/graphics"),ft=class extends b{constructor(t){super(),m(this,"interactive",!0),m(this,"result",{type:"null",box:new _}),m(this,"selectedItemIds",[]),m(this,"cursorPoint",new V),m(this,"startPoint",new V),m(this,"graphics",new yt.Graphics),m(this,"SDKUtils"),m(this,"clearResult",!1),m(this,"type"),this.SDKUtils=t,this.type="selector"}initialize(){}actionKey(){}endActionKey(){}getRenderObjects(){return this.clearResult?(this.result={type:"null",box:new _},this.clearResult=!1,[]):(this.refreshResults(),[this.graphics])}cancelPreparation(){this.result.type="null",this.SDKUtils.clearPreSelectedItem()}preparationAction(t){this.result.box=new _;const e=new V(t.offsetX,t.offsetY);this.selectedItemIds=this.hitTest(e);const i=this.selectedItemIds[0]??"";return i.length&&!this.SDKUtils.isItemSelected(i)?this.SDKUtils.addPreSelectedItem(i):this.SDKUtils.clearPreSelectedItem(),this.type}preAction(t){if(this.SDKUtils.clearPreSelectedItem(),1===t.buttons)return t.shiftKey||this.SDKUtils.clearSelectedItems(),0===this.selectedItemIds.length?(this.startPoint=new V(t.clientX,t.clientY),this.cursorPoint=new V(t.offsetX,t.offsetY),this.active=!0,this.type):(this.SDKUtils.addSelectedItems([this.selectedItemIds[0]]),this.clearResult=!0,"transform")}action(t){const e=(new V).addVectors(this.cursorPoint,(new V).subtractVectors(new V(t.clientX,t.clientY),this.startPoint)),i=(new V).subtractVectors(this.cursorPoint,e),s=(new V).addVectors(this.cursorPoint,e).multiply(.5);i.x=Math.abs(i.x),i.y=Math.abs(i.y);const r=(new _).setFromCenterAndSize(s,i);this.result.type="region",this.result.box=r,this.SDKUtils.clearSelectedItems();const a=this.SDKUtils.data?.items?.filter(t=>this.SDKUtils.getItemEditEnable(t.id)),n=[];a?.forEach(t=>{r.intersectsBox(this.SDKUtils.getViewBoxById(t.id),!1)&&n.push(t.id)}),this.SDKUtils.addSelectedItems(n)}endAction(){this.active=!1,this.result.type="null"}interruption(){this.active=!1,this.result.type="null"}hitTest(t){const e=this.SDKUtils.getCurrentComposition();if(!e||null===e.items)return[];const{x:i,y:s}=this.SDKUtils.getViewportByViewPoint(t),r={ray:new W,regions:[]};try{r.regions=e.hitTest(i,s,!0),r.ray=e.getHitTestRay(i,s)}catch(t){console.warn(t)}return this.reorderHitTestResult(r,e).filter(t=>"extra-camera"!==t&&this.SDKUtils.getItemEditEnable(t))}reorderHitTestResult(t,e){if(0===t.regions.length||!e)return[];const{ray:i}=t,s=t.regions.reverse(),r=[];return s.forEach(t=>{let s;const a=(t,e)=>{for(const i of t){if(i.id===e&&(s=i),s)return;a(i.children,e)}};if(a(e.items,t.id),void 0===s)return;const n="rootItem"===t.compContent?.name?s.id:t.compContent.id,o=i.origin.clone().distance(t.position.clone());if((s.type===v.spec.ItemType.mesh||s.content&&"renderer"in s.content&&s.content.renderer&&"occlusion"in s.content.renderer&&s.content.renderer.occlusion)&&r.length>0){let t=!0;r.forEach((e,i)=>{if(t)return o<=e[1]?(r.splice(i,0,[n,o]),void(t=!1)):void(i===r.length-1&&r.push([n,o]))})}else r.push([n,o])}),r.map(t=>t[0])}refreshResults(){const{box:t}=this.result;this.graphics.clear();const e=this.SDKUtils.getPreSelectedItem(),i=this.SDKUtils.getViewBoxById(e?.id??"");if(i?.isEmpty()||(this.graphics.lineStyle(H,Y),this.graphics.drawBox(i)),!t.isEmpty()&&"region"===this.result.type)this.graphics.lineStyle(Z,X,J),this.graphics.drawBox(t),this.graphics.beginFill(q,$),this.graphics.fillBox(t),this.graphics.endFill()}},gt=require("@pixi/graphics"),wt=require("@galacean/effects"),xt=class extends b{constructor(t,e){super(),m(this,"type"),m(this,"interactive",!0),m(this,"wireframe"),m(this,"cursorResult",{type:"normal",angle:0}),m(this,"cursorPoint",new V),m(this,"lastPoint",new V),m(this,"rotationAngle",0),m(this,"active",!1),m(this,"enableAdsorption",!0),m(this,"scaleParam"),m(this,"activeType","null"),m(this,"lastWorldPosition",new F),m(this,"SDKUtils"),m(this,"adsorptionGizmo"),m(this,"graphics",new gt.Graphics),this.type="transform",this.SDKUtils=t,this.adsorptionGizmo=e,this.wireframe={edges:[],anchor:new V,scaleCorners:[],rotationCorners:[],interactive:!0,cornerEnable:!0,directionEnable:!0,box:new _,totalBox:new _,childrenBoxes:[],activeType:"null",interactiveDirection:new V,scaleCorner:new V,scaleEdgeCorners:[]}}initialize(){}actionKey(){}endActionKey(){}getRenderObjects(){return this.refreshRenderObject(),[this.graphics]}cancelPreparation(){this.active=!1,this.wireframe.activeType="null"}preAction(t,e=!1){if(this.active=1===t.buttons,this.lastPoint=new V(t.clientX,t.clientY),this.cursorPoint=new V(t.offsetX,t.offsetY),1===t.buttons)return this.active=!0,"null"===this.wireframe.activeType&&(this.wireframe.activeType="translation"),this.initInteractionPlane(this.cursorPoint),this.lastWorldPosition=this.SDKUtils.interactionUtils.getWorldPositionByViewPoint(this.cursorPoint)??new F,this.activeType=e?"null":this.activeType,this.type}preparationAction(t){const e=new V(t.offsetX,t.offsetY),i=this.wireframe;this.refreshTransformType(e);const{interactiveDirection:s}=i;return this.refreshCursorResult(this.activeType,T(s)),this.active="null"!==this.activeType,this.active?this.type:void 0}action(t){this.active||(this.active=!0,this.refreshWireframeBySelectedItems(),this.wireframe.activeType="translation",this.lastPoint.set(t.clientX,t.clientY),this.cursorPoint.set(t.offsetX,t.offsetY),this.initInteractionPlane(this.cursorPoint),this.lastWorldPosition=this.SDKUtils.interactionUtils.getWorldPositionByViewPoint(this.cursorPoint)??new F);const e=new V(t.clientX,t.clientY),i=(new V).subtractVectors(e,this.lastPoint);if(!this.wireframe.interactive)return;const s=this.SDKUtils.getSelectedItems(),{anchor:r,activeType:a,interactiveDirection:n}=this.wireframe;let o=0;switch(a){case"rotation":{const t=r.clone(),e=new F,a=function(t,e,i=Math.round){if(Number.isInteger(t))return t;const s=Math.pow(10,e);return i(t*s)/s}(function(t,e){const i=Math.min(Math.max(t.dot(e)/t.length()/e.length(),-1),1);let s=Math.acos(i);return s=t.x*e.y-t.y*e.x>0?s:-s,s}((new V).subtractVectors(this.cursorPoint,t),(new V).subtractVectors(this.cursorPoint.add(i),t))*I,3);e.z=a,this.rotationAngle+=a,o=T(n)+this.rotationAngle*D,s.forEach(t=>{this.SDKUtils.rotateItem(t.id,e)});break}case"translation":{const t=i.clone();if(this.enableAdsorption){(0,wt.assertExist)(this.SDKUtils.data);const e=this.SDKUtils.data.items.map(t=>!s.find(e=>e.id===t.id)&&0===s.filter(e=>t.parentId&&t.parentId===e.id).length&&this.SDKUtils.getItemEditEnable(t.id)?this.SDKUtils.getViewBoxById(t.id):new _).filter(t=>!t.isEmpty()),i=new V(this.adsorptionGizmo.absorptionResult.x??0,this.adsorptionGizmo.absorptionResult.y??0);this.adsorptionGizmo.boxTranslationAdsorption(t,this.wireframe.box,e);const r=new V(this.adsorptionGizmo.absorptionResult.x??0,this.adsorptionGizmo.absorptionResult.y??0);t.add(i).subtract(r)}const e=this.SDKUtils.interactionUtils.getWorldPositionByViewPoint(this.cursorPoint.add(t));if(e){const t=e.clone().subtract(this.lastWorldPosition).divide(this.SDKUtils.data.property.zoom);s.forEach(e=>{e.type!==v.spec.ItemType.camera&&this.SDKUtils.moveItem(e.id,t)}),this.lastWorldPosition.copyFrom(e)}break}case"scale":{this.cursorPoint.add(i);const t=this.SDKUtils.interactionUtils.getWorldPositionByViewPoint(this.cursorPoint);if(i.length()&&t&&this.scaleParam){const{corner:e,center:i,shift:r,lastScalar:n}=this.scaleParam,o=this.SDKUtils.getSelectedItems()[0]??void 0,h=this.SDKUtils.getItemTransformById(o?.id??""),c=(new U).extractRotation(h.matrix).invert(),l=(new F).subtractVectors(e,i).applyMatrix(c),p=l.clone().multiply(n),m=t.subtract(r).subtract(i).applyMatrix(c),d=new F(1,1,1);if("scale"===a){const t=function(t){let e,i=0;return t.forEach((t,s)=>{if(0===s)e=Math.abs(t);else{const r=Math.abs(t);e<r&&(e=r,i=s)}}),i}([C(l.x,0)?1:Math.abs(m.x/l.x),C(l.y,0)?1:Math.abs(m.y/l.y)]),e=m.toArray()[t],i=p.toArray()[t];if(C(n.x,n.y)&&C(n.z,n.x)){const t=C(i,0)?1:Math.abs(e/i);d.set(t,t,t)}else if(0===t){d.x=C(i,0)?1:Math.abs(e/i);const t=l.y*e/l.x;d.y=C(p.y,0)?1:t/p.y;const s=l.z*e/l.x;d.z=C(p.z,0)?1:s/p.z}else if(1===t){d.y=C(i,0)?1:Math.abs(e/i);const t=l.x*e/l.y;d.x=C(p.x,0)?1:t/p.x;const s=l.z*e/l.y;d.z=C(p.z,0)?1:s/p.z}else{d.z=C(i,0)?1:Math.abs(e/i);const t=l.x*e/l.z;d.x=C(p.x,0)?1:t/p.x;const s=l.y*e/l.z;d.y=C(p.y,0)?1:s/p.y}}this.scaleParam.lastScalar.multiply(d),s.forEach(t=>{this.SDKUtils.scaleItem(t.id,d)})}o=T(n);break}}this.refreshCursorResult(a,o),this.lastPoint.copyFrom(e)}endAction(t){this.active=!1;const e=new V(t.clientX,t.clientY),i=(new V).subtractVectors(e,this.lastPoint);this.cursorPoint.add(i);const s=this.wireframe;this.refreshTransformType(this.cursorPoint);const{activeType:r,interactiveDirection:a}=s;this.refreshCursorResult(r,T(a)),this.adsorptionGizmo.clearAbsorptionResult(),this.rotationAngle=0,this.cursorPoint=new V,this.lastPoint=new V}interruption(){this.active=!1,this.cursorResult.type="normal",this.adsorptionGizmo.clearAbsorptionResult()}refreshCursorResult(t,e=0){switch(t){case"scale":this.cursorResult={type:"scale",angle:(e+Math.PI/4)*I};break;case"rotation":this.cursorResult={type:"rotation",angle:(e+Math.PI/4)*I};break;case"translation":case"null":this.cursorResult={type:"normal",angle:0}}}refreshResults(){const t=this.wireframe.activeType;this.refreshWireframeBySelectedItems(),t!==this.wireframe.activeType&&this.refreshCursorResult(this.wireframe.activeType),this.wireframe.box.isEmpty()&&this.adsorptionGizmo.clearAbsorptionResult()}initInteractionPlane(t){const e=this.SDKUtils.getSelectedItems();switch(this.wireframe.activeType){case"scale":{const i=1==e.length?e[0]:void 0;let s,r;if(i){const t=this.SDKUtils.getItemTransformById(i.id);s=(new F).setFromMatrixPosition(t.matrix),r=(new K).setFromQuaternion((new R).setFromRotationMatrix(t.matrix))}if(this.SDKUtils.interactionUtils.initInteractionPlane(s,r),["scale"].includes(this.wireframe.activeType)){if(this.scaleParam={shift:new F,center:new F,corner:new F,lastScalar:new F(1,1,1)},this.scaleParam.center=s,["scale"].includes(this.wireframe.activeType)&&this.wireframe.scaleCorner)this.scaleParam.corner=this.SDKUtils.interactionUtils.getWorldPositionByViewPoint(this.wireframe.scaleCorner)??new F;else if(this.wireframe.scaleEdgeCorners){const t=this.SDKUtils.interactionUtils.getWorldPositionByViewPoint(this.wireframe.scaleEdgeCorners[0])??new F,e=this.SDKUtils.interactionUtils.getWorldPositionByViewPoint(this.wireframe.scaleEdgeCorners[1])??new F,i=t.applyEuler(r??new K,this.scaleParam.center),s=e.applyEuler(r??new K,this.scaleParam.center),a=new B(i,s).closestPointToPoint(this.scaleParam.center);this.scaleParam.corner=a.applyMatrix((r??new K).getInvertMatrixByEuler(),this.scaleParam.center)}this.scaleParam.shift=(this.SDKUtils.interactionUtils.getWorldPositionByViewPoint(t)??new F).subtract(this.scaleParam.corner)}break}case"translation":case"rotation":this.SDKUtils.interactionUtils.initInteractionPlane()}}refreshRenderObject(){if(this.graphics.clear(),!this.wireframe.box.isEmpty()){this.graphics.lineStyle(et,Q,tt),this.wireframe.edges.forEach(t=>{this.graphics.drawLine(t)});const t=t=>{t.corners.forEach((e,i)=>{const s=new M(e,t.corners[(i+1)%4]);this.graphics.drawLine(s)})};this.wireframe.childrenBoxes.forEach(e=>{t(e)}),this.wireframe.cornerEnable&&(this.graphics.beginFill(it),this.graphics.lineStyle(rt,st,at),this.wireframe.scaleCorners.forEach(t=>{this.graphics.drawCircle(t.center.x,t.center.y,t.radius)}),this.graphics.endFill())}}refreshTransformType(t){this.activeType="null";let e=!0;if(this.wireframe.interactiveDirection=new V,this.wireframe.scaleCorner=void 0,this.wireframe.scaleEdgeCorners=void 0,this.wireframe.cornerEnable&&e&&this.wireframe.totalBox.containsPoint(t)){for(let i=0;i<4;i++){if(this.wireframe.scaleCorners[i].containsPoint(t)){e=!1,this.activeType="scale",this.wireframe.activeType="scale",this.wireframe.scaleCorner=this.wireframe.scaleCorners[i].center.clone(),this.wireframe.interactiveDirection.copyFrom(this.wireframe.scaleCorners[i].center).subtract(this.wireframe.box.getCenter());break}}e&&this.wireframe.box.containsPoint(t,!1)&&(e=!1,this.activeType="translation",this.wireframe.activeType="translation");for(let i=0;i<4;i++){if(this.wireframe.rotationCorners[i].containsPoint(t)&&e){e=!1,this.activeType="rotation",this.wireframe.activeType="rotation",this.wireframe.interactiveDirection.copyFrom(this.wireframe.rotationCorners[i].center).subtract(this.wireframe.box.getCenter());break}}}}refreshWireframeBySelectedItems(){const t=this.SDKUtils.getSelectedItems(),e=new _;if(this.wireframe.edges=[],this.wireframe.scaleCorners=[],this.wireframe.childrenBoxes=[],this.wireframe.rotationCorners=[],t.length>1)t.forEach(t=>{if(this.SDKUtils.getItemShow(t.id)){const i=this.SDKUtils.getViewBoxById(t.id);e.union(i),this.wireframe.childrenBoxes.push((new _).copyFrom(i).expandByScalar(1))}}),this.wireframe.anchor=e.getCenter(),this.wireframe.interactive=!0;else if(1===t.length){const i=t[0];if(this.SDKUtils.getItemShow(i.id)){const t=this.SDKUtils.getViewBoxById(i.id);e.copyFrom(t),this.wireframe.anchor=e.getCenter(),this.wireframe.interactive=i.type!==v.spec.ItemType.mesh&&this.SDKUtils.getItemEditEnable(i.id)}}const i=e.isEmpty(),s=i?0:1,r=i?0:16;this.wireframe.activeType=t.length?this.wireframe.activeType:"null",this.wireframe.box.copyFrom(e).expandByScalar(s),this.wireframe.totalBox.copyFrom(e).expandByScalar(r);const a=this.wireframe.box.corners;a.forEach((t,e)=>{this.wireframe.edges.push(new M((new V).copyFrom(t),(new V).copyFrom(a[(e+1)%4])))}),this.wireframe.box.corners.forEach(t=>{this.wireframe.scaleCorners.push(new z(t,nt));const e=(new V).subtractVectors(t,this.wireframe.box.getCenter()),i=(new V).copyFrom(this.wireframe.box.getCenter()).add((new V).copyFrom(e).normalize().multiply(e.length()+ot-nt));this.wireframe.rotationCorners.push(new z(i,ot))})}setAdsorptionEnabled(t){this.enableAdsorption=t}},vt=require("@pixi/graphics"),Pt=class extends b{constructor(){super(),m(this,"interactive",!1),m(this,"results",[]),m(this,"graphics",new vt.Graphics),m(this,"absorptionResult",{}),this.type="adsorption"}initialize(){}preparationAction(){}getCursorState(){}preAction(){}action(){}cancelPreparation(){}actionKey(){}endActionKey(){}endAction(){}interruption(){}boxTranslationAdsorption(t,e,i,s=!0,r=!0){if(this.results=[],e.isEmpty())return;const a=new V(this.absorptionResult?.x??0,this.absorptionResult?.y??0).add(t),n=e.clone().translate(a),o=n.getCenter();this.absorptionResult={},i.forEach(t=>{if(t.isEmpty())return;t.corners.forEach(t=>{n.corners.forEach(e=>{this.getPointAbsorption(e,t,s,r)}),this.getPointAbsorption(o,t,s,r)});const e=t.getCenter();this.getPointAbsorption(o,e,s,r),n.corners.forEach(t=>{this.getPointAbsorption(t,e,s,r)})})}pointTranslationAdsorption(t,e,i,s=!0,r=!0){this.results=[];const a=new V(this.absorptionResult?.x??0,this.absorptionResult?.y??0).add(t),n=e.clone().add(a);this.absorptionResult={},i.forEach(t=>{this.getPointAbsorption(n,t,s,r)})}getPointAbsorption(t,e,i=!0,s=!0){i&&Math.abs(t.x-e.x)<L&&this.refreshPointAbsorptionResult(t,e,"x"),s&&Math.abs(t.y-e.y)<L&&this.refreshPointAbsorptionResult(t,e,"y")}refreshPointAbsorptionResult(t,e,i){const s=t[i]-e[i],r="x"===i?"xPoints":"yPoints";if(this.absorptionResult&&void 0===this.absorptionResult[i])this.absorptionResult[i]=s,this.absorptionResult[r]=[{point:t,targets:[e]}];else if(Math.abs(s)-Math.abs(this.absorptionResult[i]??0)<=.005)if(Math.abs(Math.abs(s)-Math.abs(this.absorptionResult[i]??0))<.05&&s*(this.absorptionResult[i]??0)>0)if(void 0===this.absorptionResult[r])this.absorptionResult[i]=s,this.absorptionResult[r]=[{point:t,targets:[e]}];else{const i=this.absorptionResult[r].filter(e=>e.point.equals(t));void 0===i||0===i.length?this.absorptionResult[r]?.push({point:t,targets:[e]}):i[0]?.targets.push(e)}else this.absorptionResult[i]=s,this.absorptionResult[r]=[{point:t,targets:[e]}]}refreshResults(){if(void 0===this.absorptionResult)return;const{x:t,y:e,xPoints:i,yPoints:s}=this.absorptionResult,r=new V(t??0,e??0);void 0!==t&&void 0!==i&&i.forEach(t=>{const e=t.point.clone().subtract(r),i=e.clone(),s=e.clone();t.targets.forEach(t=>{i.x=t.x,i.y=Math.min(i.y,t.y),s.x=t.x,s.y=Math.max(s.y,t.y)}),this.results.push(new M(i,s))}),void 0!==e&&void 0!==s&&s.forEach(t=>{const e=t.point.clone().subtract(r),i=e.clone(),s=e.clone();t.targets.forEach(t=>{i.y=t.y,i.x=Math.min(i.x,t.x),s.y=t.y,s.x=Math.max(s.x,t.x)}),this.results.push(new M(i,s))})}refreshRenderObject(){this.graphics.clear(),this.results.forEach(t=>{this.graphics.lineStyle(O,j),this.graphics.drawLine(t)})}getRenderObjects(){return this.refreshResults(),this.refreshRenderObject(),[this.graphics]}clearAbsorptionResult(){this.results=[],this.absorptionResult={}}},bt={};h(bt,{Application:()=>It.Application,utils:()=>Et});var St={};h(St,{Application:()=>It.Application,utils:()=>Et});require("@pixi/polyfill");var Et=p(require("@pixi/utils"),1),Dt=require("@pixi/interaction"),It=require("@pixi/app"),Tt=require("@pixi/core"),Ct=require("@pixi/loaders"),At=require("@pixi/ticker");l(St,require("@pixi/constants")),l(St,require("@pixi/core")),l(St,require("@pixi/display")),l(St,require("@pixi/graphics")),l(St,require("@pixi/loaders")),l(St,require("@pixi/interaction")),l(St,require("@pixi/math")),l(St,require("@pixi/runner")),l(St,require("@pixi/sprite")),l(St,require("@pixi/text")),l(St,require("@pixi/ticker")),l(St,require("@pixi/settings")),Et.skipHello(),Tt.Renderer.registerPlugin("interaction",Dt.InteractionManager),Tt.Renderer.registerPlugin("batch",Tt.BatchRenderer),It.Application.registerPlugin(At.TickerPlugin),It.Application.registerPlugin(Ct.AppLoaderPlugin),St.Graphics.prototype.drawBox=function(t){const e=t.getCorners();this.beginFill();for(let t=0;t<4;t++)this.moveTo(e[t].x,e[t].y),this.lineTo(e[(t+1)%4].x,e[(t+1)%4].y);this.endFill()},St.Graphics.prototype.fillBox=function(t){const e=t.getSize();this.drawRect(t.min.x,t.min.y,e.x,e.y)},St.Graphics.prototype.drawLine=function(t){if(this.beginFill(),t instanceof M)this.moveTo(t.start.x,t.start.y),this.lineTo(t.end.x,t.end.y);else for(let e=0;e<t.length-1;e++)this.moveTo(t[e].x,t[e].y),this.lineTo(t[e+1].x,t[e+1].y);this.endFill()},l(bt,St);var Vt=class extends b{constructor(t){super(),m(this,"safeAreaPreview",!1),m(this,"interactive",!1),m(this,"box",new _),m(this,"graphics",new bt.Graphics),m(this,"SDkUtils"),this.SDkUtils=t,this.type="preference"}initialize(){throw new Error("Method not implemented.")}preparationAction(){}preAction(){}action(){}endAction(){}interruption(){}actionKey(){}endActionKey(){}cancelPreparation(){}refreshResults(){this.box=new _;const{data:t,container:e}=this.SDkUtils;if(t&&e){const{zoom:i}=t.property,{offsetWidth:s,offsetHeight:r}=e,a=new V(s,r).multiply(i),n=this.SDkUtils.getViewportLeftTopPosition().add(a.clone().divide(2));this.box=(new _).setFromCenterAndSize(n,a)}}setSafeAreaPreviewEnabled(t){this.safeAreaPreview=t}refreshRenderObjects(){this.graphics=new bt.Graphics;const{offsetWidth:t,offsetHeight:e}=this.SDkUtils.container.parentElement,i=new _(new V(0,0),new V(t,this.box.min.y)),s=new _(new V(0,this.box.min.y),new V(this.box.min.x,e)),r=new _(new V(this.box.min.x,this.box.max.y),new V(t,e)),a=new _(new V(this.box.max.x,this.box.min.y),new V(t,this.box.max.y));if(this.graphics.beginFill(lt,pt),this.graphics.fillBox(i),this.graphics.fillBox(s),this.graphics.fillBox(r),this.graphics.fillBox(a),this.graphics.endFill(),this.safeAreaPreview){(0,v.assertExist)(this.SDkUtils.data,"You must call SDK#run() first");const{viewProperties:t,activeData:e}=this.SDkUtils.data,i=t[e.view??-1];if(i){const{size:t,safeArea:e}=i,[s,r,a,n]=e.size,o=this.box.getSize(),h=s/t[1]*o.y,c=a/t[0]*o.x,l=n/t[0]*o.x,p=r/t[1]*o.y,{min:m,max:d}=this.box;this.graphics.beginFill(mt,dt);const u=new _(m,new V(d.x,m.y+h)),y=new _(new V(m.x,m.y+h),new V(m.x+c,d.y)),f=new _(new V(d.x-l,m.y+h),new V(d.x,d.y)),g=new _(new V(m.x+c,d.y-p),new V(d.x-l,d.y));this.graphics.fillBox(u),this.graphics.fillBox(y),this.graphics.fillBox(f),this.graphics.fillBox(g),this.graphics.endFill()}}this.graphics.lineStyle(ct,ht),this.graphics.drawBox(this.box)}getRenderObjects(){return this.refreshRenderObjects(),[this.graphics]}},Mt=class{constructor(t){m(this,"wireframeApplication"),m(this,"gizmos",[]),m(this,"activeGizmo"),m(this,"selectorGizmo"),m(this,"transformGizmo"),m(this,"controlGizmo"),m(this,"preferenceGizmo"),m(this,"spaceClickTime"),m(this,"spaceEmit",!1),m(this,"isPlaying",!1),m(this,"clickButtons",0),m(this,"clickTime",0),m(this,"firstClick",!0),m(this,"dblclickTimeSpan",500),this.gizmos=[];const{width:e,height:i}=t.getBoundingClientRect();this.wireframeApplication=new P.Application({backgroundAlpha:0,width:e,height:i,resolution:1,antialias:!0}),this.wireframeApplication.view.style.position="absolute",this.wireframeApplication.view.id="wireframeApplicationCanvas",t.appendChild(this.wireframeApplication.view),this.wireframeApplication.stage.sortableChildren=!0,this.registerViewEvent()}refresh(){this.gizmos.forEach(t=>{t.refreshResults()})}render(){this.refresh(),this.wireframeApplication.stage.removeChildren();const t=(this.isPlaying?[this.preferenceGizmo]:this.gizmos).flatMap(t=>t.getRenderObjects());this.wireframeApplication.stage.addChild(...t),this.wireframeApplication.render()}init(t){this.controlGizmo=new ut(t),this.selectorGizmo=new ft(t);const e=new Pt;this.transformGizmo=new xt(t,e),this.preferenceGizmo=new Vt(t),this.gizmos.push(this.transformGizmo,this.selectorGizmo,this.controlGizmo,this.preferenceGizmo,e),this.initEvents()}initEvents(){this.onMouseMove=this.onMouseMove.bind(this),this.onMouseUp=this.onMouseUp.bind(this),this.onKeyDown=this.onKeyDown.bind(this),this.onKeyUp=this.onKeyUp.bind(this),document.addEventListener("keydown",this.onKeyDown),document.addEventListener("keyup",this.onKeyUp)}registerViewEvent(){this.wireframeApplication.view.onmousedown=t=>{this.onMouseDown(t)},this.wireframeApplication.view.onmousemove=t=>{0===t.buttons&&this.onMouseMove(t)},this.wireframeApplication.view.onmouseout=()=>{this.selectorGizmo?.cancelPreparation(),this.render()},this.wireframeApplication.view.onwheel=t=>{this.onWheel(t)}}onMouseDown(t){if(this.clickButtons=t.buttons,this.firstClick=!!this.firstClick&&Date.now()-this.clickTime<this.dblclickTimeSpan,this.firstClick){this.gizmos.forEach(e=>{if(e.interactive)if(void 0===this.activeGizmo){const i=e.preparationAction(t);this.activeGizmo=this.gizmos.find(t=>t.type===i)}else e.cancelPreparation()}),this.activeGizmo=void 0;const e=this.selectorGizmo?.preAction(t);this.activeGizmo=this.gizmos.find(t=>t.type===(e??"null")),this.firstClick=!1}else{void 0===this.activeGizmo&&this.gizmos.forEach(e=>{if(!e.interactive||this.activeGizmo)return;const i=e.preparationAction(t);this.activeGizmo=this.gizmos.find(t=>t.type===i)});const e=this.activeGizmo?.preAction(t);"selector"!==e&&this.selectorGizmo&&(this.selectorGizmo.clearResult=!0),this.activeGizmo=this.gizmos.find(t=>t.type===e),this.clickTime=Date.now(),this.firstClick=!0}this.render(),document.addEventListener("mousemove",this.onMouseMove),document.addEventListener("mouseup",this.onMouseUp)}onMouseMove(t){0!==t.buttons?this.activeGizmo?.action(t):this.spaceEmit||(this.activeGizmo=void 0,this.gizmos.forEach(e=>{if(e.interactive)if(void 0===this.activeGizmo){const i=e.preparationAction(t);"selector"!==i&&this.selectorGizmo&&(this.selectorGizmo.clearResult=!0),this.activeGizmo=this.gizmos.find(t=>t.type===i)}else e.cancelPreparation()})),this.render()}onWheel(t){t.preventDefault(),this.selectorGizmo&&(this.selectorGizmo.clearResult=!0),this.controlGizmo?.action(t)}onMouseUp(t){const e=this.activeGizmo?.endAction(t);this.activeGizmo=this.gizmos.find(t=>t.type===e),void 0===this.activeGizmo&&1===this.clickButtons&&this.gizmos.forEach(e=>{if(e.interactive)if(void 0===this.activeGizmo){const i=e.preparationAction(t);this.activeGizmo=this.gizmos.find(t=>t.type===i)}else e.cancelPreparation()}),this.clickButtons=0,this.render(),document.removeEventListener("mousemove",this.onMouseMove),document.removeEventListener("mouseup",this.onMouseUp)}onKeyDown(t){if("space"!==t.code.toLocaleLowerCase()||this.activeGizmo?.active)this.gizmos.forEach(e=>{e.actionKey(t)});else{if(this.spaceEmit)return;void 0===this.spaceClickTime?this.spaceClickTime=Date.now():Date.now()-this.spaceClickTime>300&&(this.spaceEmit=!0,this.activeGizmo=this.controlGizmo,this.activeGizmo?.actionKey(t))}this.render()}onKeyUp(t){this.gizmos.forEach(e=>{e.endActionKey(t)}),"space"===t.code.toLocaleLowerCase()&&(this.spaceClickTime=void 0,this.spaceEmit=!1),this.render()}setAdsorptionEnabled(t){this.transformGizmo?.setAdsorptionEnabled(t)}setSafeAreaPreviewEnabled(t){this.preferenceGizmo?.setSafeAreaPreviewEnabled(t)}};var _t=require("@galacean/effects"),zt=class{constructor(t){m(this,"plane",new k),m(this,"ray",new W),m(this,"viewportParam",{width:0,height:0,viewWidth:0,viewHeight:0,panelWidth:0,panelHeight:0,scale:1,ratio:1,translation:new V,rulerWidth:0}),m(this,"cameraParam",{position:new F,rotation:new F,focusPosition:new F,focusRotation:new F,viewProjectionMatrix:new U,inverseViewProjectionMatrix:new U}),m(this,"SDKUtils"),this.SDKUtils=t}refreshViewParam(){(0,_t.assertExist)(this.SDKUtils.data,"You must run SDK first");const t=new V(this.SDKUtils.container.offsetWidth,this.SDKUtils.container.offsetHeight),{zoom:e,translation:i}=this.SDKUtils.data?.property;this.viewportParam.width=t.x,this.viewportParam.height=t.y,this.viewportParam.viewWidth=t.x,this.viewportParam.viewHeight=t.y,this.viewportParam.panelWidth=t.x,this.viewportParam.panelHeight=t.y,this.viewportParam.scale=e,this.viewportParam.ratio=1,this.viewportParam.translation=i.clone().divide(e),this.viewportParam.rulerWidth=0}refreshCameraParam(){const{player:t}=this.SDKUtils,e=t?.getCompositions()?.[0]?.camera;if(e){const t=U.fromArray(e.getViewProjectionMatrix().toArray()),i=U.fromArray(e.getViewMatrix().toArray()).invert(),s=new R;i.decompose(this.cameraParam.position,s,new F),this.cameraParam.rotation=(new K).setFromQuaternion(s).toDegreeVector3(),this.cameraParam.focusPosition=new F(...this.cameraParam.position.toVector2().toArray(),this.cameraParam.position.z>0?0:2*this.cameraParam.position.z),this.cameraParam.focusPosition.applyEuler((new K).setFromDegreeVector3(this.cameraParam.rotation.clone()),this.cameraParam.position),this.cameraParam.focusRotation=(new K).setFromQuaternion(s.invert()).toDegreeVector3(),this.cameraParam.viewProjectionMatrix=t,this.cameraParam.inverseViewProjectionMatrix=U.fromArray(e.getInverseViewProjectionMatrix().toArray())}}initInteractionPlane(t,e){t??(t=this.cameraParam.focusPosition),e??(e=(new K).setFromDegreeVector3(this.cameraParam.rotation));const i=new F(0,0,1).applyEuler(e);this.plane.setFromNormalAndCoplanarPoint(t,i)}getWorldSizeByViewSize(t,e=!0,i){const s=e||!i?(new K).setFromDegreeVector3(this.cameraParam.rotation):(new K).setFromQuaternion((new R).setFromRotationMatrix(this.SDKUtils.getItemTransformById(i.id).matrix)),r=i?(new F).setFromMatrixPosition(this.SDKUtils.getItemTransformById(i.id).matrix):this.cameraParam.focusPosition,a=this.projectPoint(r.clone()),n=this.getWorldPositionByViewPoint(a.add(t));if(!n)return console.warn("size is out of bounds."),new F(0,0,0);const o=(new K).setFromQuaternion((new R).setFromEuler(s).invert());return(e||!i?n.applyEuler(o,r):n).subtract(r)}projectPoint(t){const{panelWidth:e,panelHeight:i,scale:s}=this.viewportParam,r=this.SDKUtils.getViewportLeftTopPosition();return(new V).copyFrom(t.applyMatrix(this.cameraParam.viewProjectionMatrix).toVector2()).toViewCoordinate(e*s,i*s).add(r)}getWorldPositionByViewPoint(t){const{position:e,inverseViewProjectionMatrix:i}=this.cameraParam,s=this.getViewPositionByScreenPosition(t),r=(new G).setFromCamera(s,{position:e,inverseViewProjectMatrix:i}).rayCastPlane(this.plane);return r?.point}getViewPositionByScreenPosition(t){const{panelWidth:e,panelHeight:i,rulerWidth:s}=this.viewportParam;return new V((t.x-s)/e*2-1,-(t.y-s)/i*2+1)}getScreenSizeByPixelSize(t){const e=this.viewportParam.width/this.viewportParam.viewWidth,i=t.clone();return i.multiply(e||1),i}getPixelSizeByScreenSize(t){const e=this.viewportParam.viewWidth/this.viewportParam.width,i=t.clone();return i.multiply(e||1),i}},Rt=require("@galacean/effects"),Ft=class{constructor(t,e,i,s){m(this,"player"),m(this,"data"),m(this,"container"),m(this,"emitter"),m(this,"interactionUtils"),this.player=t,this.data=s,this.container=e,this.emitter=i}init(t){this.data=t,this.interactionUtils=new zt(this)}getCurrentComposition(){return this.player.getCompositions()[0]}isItemSelected(t){return!!this.data?.activeData.selectedItems?.find(e=>e===t)}getItemEditEnable(t){const e=this.getViewItemById(t);if(!e||!this.data)return!1;const i=this.data.time,{duration:s,delay:r,endBehavior:a}=e;return i>=r&&(i<r+s||a===v.spec.EndBehavior.restart)}getItemShow(t){const e=this.getViewItemById(t);if(!e||!this.data)return!1;const i=this.data.time,{duration:s,delay:r,endBehavior:a}=e;return i>=r&&(i<r+s||a===v.spec.EndBehavior.restart||a===v.spec.EndBehavior.freeze)}addSelectedItems(t){var e;(0,v.assertExist)(this.data,"You must call SDK#run() first"),(e=this.data.activeData).selectedItems??(e.selectedItems=[]),t.forEach(t=>{var e,i;e=this.data?.activeData.selectedItems??[],i=t,e.includes(i)||e.push(i)}),this.emitter.emit("selectedItemChange",t)}clearSelectedItems(){this.data&&(this.data.activeData.selectedItems=[],this.emitter.emit("selectedItemChange",[]))}getSelectedItems(){const t=this.data?.activeData.selectedItems;return this.data?.items.filter(e=>t?.find(t=>t===e.id))??[]}addPreSelectedItem(t){(0,v.assertExist)(this.data,"You must call SDK#run() first"),this.data.activeData.preSelectedItem=t,this.emitter.emit("preSelectedItemChange",t)}clearPreSelectedItem(){(0,v.assertExist)(this.data,"You must call SDK#run() first"),this.data.activeData.preSelectedItem=void 0,this.emitter.emit("preSelectedItemChange",void 0)}getPreSelectedItem(){(0,v.assertExist)(this.data,"You must call SDK#run() first");const t=this.data.activeData.preSelectedItem;return t?this.getViewItemById(t):void 0}getViewItemById(t){return this.data?.items.find(e=>e.id===t)}async loadScene(t){this.player.destroyCurrentCompositions();const e=this.data?.viewProperties[t];if(!e||!this.data)return void console.warn(`This page does not have ${t} view property.`);const{scene:i,size:[s,r]}=e,a=this.container.parentElement?.offsetWidth??300,n=this.container.parentElement?.offsetHeight??300;let o=n,h=o/r*s;h>a&&(o=a/h*n,h=a),this.container.style.width=`${h}px`,this.container.style.height=`${o}px`,this.data.activeData={view:t,selectedItems:[],preSelectedItem:void 0},this.player.resize();const c=JSON.parse(JSON.stringify(i)),l=await this.player.loadScene(c,{autoplay:!1});this.player.gotoAndStop(this.data.time),this.interactionUtils.refreshViewParam(),this.interactionUtils.refreshCameraParam(),this.data.items=[],this.addViewItemsByItems(this.data.items,l.items),this.emitter.emit("pageDataChange",this.data)}refreshPageTime(t){(0,v.assertExist)(this.data,"You must call SDK#run() first"),this.data.time=t}pageZoom(t){var e;(0,v.assertExist)(this.data,"You must call SDK#run() first");const{zoom:i}=this.data.property;(e=this.data.property).zoom??(e.zoom=1);const s=E(t,-.1,.1),r=E(i+s,.3,10);this.data.property.zoom=r,this.container.style.scale=`${r}`,this.emitter.emit("zoomChange",r)}setPageZoom(t){(0,v.assertExist)(this.data,"You must call SDK#run() first");const e=E(t,.3,10);this.data.property.zoom=e,this.container.style.scale=`${e}`,this.emitter.emit("zoomChange",t)}refreshInteractionParam(){this.interactionUtils.refreshViewParam(),this.interactionUtils.refreshCameraParam()}pageMove(t){var e;(0,v.assertExist)(this.data,"You must call SDK#run() first"),(e=this.data.property).translation??(e.translation=new V);const{x:i,y:s}=this.data.property.translation.add(t);this.refreshInteractionParam(),this.container.style.translate=`${i}px ${s}px`,this.emitter.emit("pageDataChange",this.data)}rotateItem(t,e){const i=this.player.getCompositions()[0],s=i?.items.filter(e=>e.id===t)?.[0];s&&(s.rotate(...e.toArray()),this.transformSceneItem(t,"rotation",e.toArray()),this.refreshViewItem(t),this.emitter.emit("itemPropertyChange",{id:t,property:"rotation"}))}moveItem(t,e){const i=this.player.getCompositions()[0],s=i?.items.filter(e=>e.id===t)?.[0];if(s){const i=(new U).copyFrom(s.transform.getParentMatrix()??new U);i.setPosition(new F);const r=e.clone().applyMatrix(i.invert());s.translate(...r.toArray()),this.transformSceneItem(t,"position",r.toArray()),this.refreshViewItem(t),this.emitter.emit("itemPropertyChange",{id:t,property:"translation"})}}scaleItem(t,e){const i=this.player.getCompositions()[0],s=i?.items.filter(e=>e.id===t)?.[0];s&&(s.scale(...e.toArray()),this.transformSceneItem(t,"scale",e.toArray()),this.refreshViewItem(t),this.emitter.emit("itemPropertyChange",{id:t,property:"scale"}))}getItemTransformById(t){const e={matrix:new U,parentMatrix:new U},i=this.player.getCompositions()[0]?.items.find(e=>e.id===t);if(void 0!==i?.transform){i.transform.updateLocalMatrix();const t=U.fromArray(i.composition?.transform.getWorldMatrix().elements??[]).invert();e.matrix=t.clone().multiply(U.fromArray(i.transform.getWorldMatrix().elements)),e.parentMatrix=t.clone().multiply(U.fromArray(i.transform.parentTransform?.getWorldMatrix().elements??(new U).toArray()))}return e}addViewItemsByItems(t,e,i){const s=e=>{e.forEach(e=>{t.find(t=>t.id===e.id)||t.push(this.createViewItemByPlayerItem(e,i))})};for(const i of e)s([i]),this.addViewItemsByItems(t,i.children,i.id)}createViewItemByPlayerItem(t,e){(0,v.assertExist)(this.data,"You must call SDK#run() first");const{transform:i,composition:s}=t;i.updateLocalMatrix();const r=(new U).copyFrom(s?.transform.getWorldMatrix()??(new U).identity()).invert().multiply(i.getWorldMatrix()),a=new F,n=new R,o=new F;r.decompose(a,n,o);const h=(new K).setFromQuaternion(n).toDegreeVector3();h.x=Number.isNaN(h.x)?0:h.x,h.y=Number.isNaN(h.y)?0:h.y,h.z=Number.isNaN(h.z)?0:h.z;const c={position:a.toArray(),rotation:h.toArray(),scale:o.toArray(),keyPropertyEditing:!1};switch(t.type){case v.spec.ItemType.sprite:{const e=this.getActiveScene()?.scene;if(e){e.components.filter(e=>e.item.id===t.id).forEach(t=>{if(c.keyPropertyEditing||!("renderer"in t))return;const i=e.textures?.find(e=>e.id===t.renderer.texture.id);if(i&&"source"in i&&i.source){const t=e?.images.find(t=>t.id===i.source.id);c.keyPropertyEditing=!!t?.template;const s=t?.url??"";s&&Object.assign(c,{image:s})}})}break}case v.spec.ItemType.text:case v.spec.ItemType.richtext:{const e=this.getActiveScene()?.scene;if(c.keyPropertyEditing=!0,e){e.components.filter(e=>e.item.id===t.id).forEach(t=>{if(![v.spec.DataType.TextComponent,v.spec.DataType.RichTextComponent].includes(t.dataType))return;const{textAlign:e,textColor:i,text:s,fontWeight:r,fontFamily:a}=t.options;Object.assign(c,{alignment:e,color:i,weight:r,text:s,font:a})})}break}}return{id:t.id,name:t.name,parentId:t.parentId??e,children:[],type:t.type,duration:t.duration,delay:t.start,endBehavior:t.endBehavior,property:c}}getViewBoxById(t){const e=new _,i=this.player.getCompositions()[0]?.items.find(e=>e.id===t),s=this.player.getCompositions()[0]?.items.filter(e=>e.parentId===t);return i&&s?this.getViewBoxByPlayerItem(i,s):e}getViewBoxByPlayerItem(t,e){const i=new _;switch(t.type){case v.spec.ItemType.sprite:case v.spec.ItemType.plugin:case v.spec.ItemType.video:case v.spec.ItemType.richtext:case v.spec.ItemType.text:case v.spec.ItemType.shape:{const{transform:s,composition:r}=t;s.updateLocalMatrix();const{size:a}=s,n=(new U).copyFrom(r?.transform.getWorldMatrix()??new U).invert().multiply(s.getWorldMatrix()),{x:o,y:h}=a.clone().divide(2),c=new F(o,h,0).applyMatrix(n),l=new F(o,-h,0).applyMatrix(n),p=new F(-o,-h,0).applyMatrix(n),m=new F(-o,h,0).applyMatrix(n),d=this.interactionUtils.projectPoint(c).round(2),u=this.interactionUtils.projectPoint(l).round(2),y=this.interactionUtils.projectPoint(p).round(2),f=this.interactionUtils.projectPoint(m).round(2);i.setFromVec2Array([d,u,y,f]);const g=e?.map(t=>this.getViewBoxById(t.id));g&&g.map(t=>i.union(t));break}case v.spec.ItemType.null:{const t=e?.map(t=>this.getViewBoxById(t.id));t&&t.map(t=>i.union(t));break}}return i}getViewBoxByHeadlessPlayerItem(t,e,i){const s=new _,{transform:r,composition:a}=t;switch(t.type){case v.spec.ItemType.sprite:case v.spec.ItemType.plugin:case v.spec.ItemType.video:case v.spec.ItemType.richtext:case v.spec.ItemType.text:case v.spec.ItemType.shape:{r.updateLocalMatrix();const{size:t}=r,n=(new U).copyFrom(a?.transform.getWorldMatrix()??new U).invert().multiply(r.getWorldMatrix()),{x:o,y:h}=t.clone().divide(2),c=new F(o,h,0).applyMatrix(n),l=new F(o,-h,0).applyMatrix(n),p=new F(-o,-h,0).applyMatrix(n),m=new F(-o,h,0).applyMatrix(n),d=i(c).round(2),u=i(l).round(2),y=i(p).round(2),f=i(m).round(2);s.setFromVec2Array([d,u,y,f]);const g=e?.map(t=>{const e=a?.items.filter(e=>e.parentId===t.id)??[];return this.getViewBoxByHeadlessPlayerItem(t,e,i)});g&&g.map(t=>s.union(t));break}case v.spec.ItemType.null:{const t=e?.map(t=>{const e=a?.items.filter(e=>e.parentId===t.id)??[];return this.getViewBoxByHeadlessPlayerItem(t,e,i)});t&&t.map(t=>s.union(t));break}}return s}getViewportLeftTopPosition(){if(!this.data)return new V;const{zoom:t,translation:e}=this.data.property,{offsetWidth:i,offsetHeight:s}=this.container.parentElement,{offsetWidth:r,offsetHeight:a}=this.container,n=new V(i,s),o=new V(r,a).multiply(t);return n.clone().divide(2).subtract(o.clone().divide(2)).add(e)}getContainerPosition(){const{offsetWidth:t,offsetHeight:e}=this.container.parentElement;return new V(t/2,e/2).add(this.data?.property.translation??new V)}getViewportByViewPoint(t){if(!this.data)return t;const{zoom:e}=this.data.property,{offsetWidth:i,offsetHeight:s}=this.container,r=new V(i,s).multiply(e),a=this.getViewportLeftTopPosition(),n=t.clone().subtract(a);return new V(n.x/r.x*2-1,1-n.y/r.y*2)}getActiveScene(){return this.data?.viewProperties[this.data?.activeData.view??-1]}async changeItemProperty(t){(0,v.assertExist)(this.data,"You must call SDK#run() first");const e=this.getViewItemById(t.itemId),i=this.player.getCompositions()[0]?.items.find(e=>e.id===t.itemId);if(e&&i)if(t.propertyName in e.property){switch(t.propertyName){case"alignment":[v.spec.TextAlignment.left,v.spec.TextAlignment.middle,v.spec.TextAlignment.right].includes(t.propertyValue)&&i.getComponent(v.TextComponent).setTextAlign(t.propertyValue);break;case"color":Array.isArray(t.propertyValue)&&4===t.propertyValue.length&&i.getComponent(v.TextComponent).setColor(t.propertyValue);break;case"font":if("string"==typeof t.propertyValue){const e=t.propertyValue.split("/"),s=e[e.length-1]?.split(".")[0],r=this.player.getAssetManager()[0];await r.processFontURL([{fontURL:t.propertyValue,fontFamily:s}]),s&&i.getComponent(v.TextComponent).setFontFamily(s)}break;case"text":"string"==typeof t.propertyValue&&i.getComponent(v.TextComponent).setText(t.propertyValue);break;case"weight":[v.spec.TextWeight.normal,v.spec.TextWeight.bold,v.spec.TextWeight.lighter].includes(t.propertyValue)&&i.getComponent(v.TextComponent).setFontWeight(t.propertyValue);break;case"image":"string"==typeof t.propertyValue&&i.getComponent(v.SpriteComponent).setTexture(await Rt.Texture.fromImage(t.propertyValue,this.player.renderer.engine));break;case"position":if(Array.isArray(t.propertyValue)&&3===t.propertyValue.length){const s=t.propertyValue.map((t,i)=>t-(e.property.position[i]??0));i.translate(...s)}break;case"rotation":if(Array.isArray(t.propertyValue)&&3===t.propertyValue.length){const s=t.propertyValue.map((t,i)=>t-(e.property.rotation[i]??0));i.rotate(...s)}break;case"scale":if(Array.isArray(t.propertyValue)&&3===t.propertyValue.length){const s=t.propertyValue.map(t=>0===t||null===t?1:t),r=e.property.scale.map(t=>t||1),a=s.map((t,e)=>t/r[e]);i.scale(...a)}}this.changeViewItemProperty(t),this.player.gotoAndStop(this.data.time),this.refreshViewItem(t.itemId)}else console.warn(`Item does not have property ${t.propertyName}.`);else console.warn(`Id ${t.itemId} is not a item id.`)}changeViewItemProperty(t){(0,v.assertExist)(this.data,"You must call SDK#run() first"),this.data.viewProperties.forEach((e,i)=>{if(!this.data?.property.sync&&i!==this.data?.activeData.view)return;const{scene:s}=e;switch(t.propertyName){case"position":case"rotation":if(Array.isArray(t.propertyValue)&&3===t.propertyValue.length){const e=this.data.items.find(e=>e.id===t.itemId),i=e?.property[t.propertyName],r=t.propertyValue.map((t,e)=>t-(i?.[e]??0));this.changeSceneItemProperty(s,{...t,propertyValue:r})}break;case"scale":if(Array.isArray(t.propertyValue)&&3===t.propertyValue.length){const e=this.data.items.find(e=>e.id===t.itemId),i=e?.property[t.propertyName],r=t.propertyValue.map((t,e)=>t/(i?.[e]??0));this.changeSceneItemProperty(s,{...t,propertyValue:r})}break;default:this.changeSceneItemProperty(s,t)}})}changeSceneItemProperty(t,e){switch(e.propertyName){case"alignment":if([v.spec.TextAlignment.left,v.spec.TextAlignment.middle,v.spec.TextAlignment.right].includes(e.propertyValue)){const i=t.components.find(t=>t.item.id===e.itemId&&[v.spec.DataType.TextComponent,v.spec.DataType.RichTextComponent].includes(t.dataType));i?.options&&"textAlign"in i.options&&(i.options.textAlign=e.propertyValue)}break;case"color":if(Array.isArray(e.propertyValue)&&4===e.propertyValue.length){const i=t.components.find(t=>t.item.id===e.itemId&&[v.spec.DataType.TextComponent,v.spec.DataType.RichTextComponent].includes(t.dataType));i?.options&&(i.options.textColor=[...e.propertyValue])}break;case"font":if("string"==typeof e.propertyValue){const i=e.propertyValue.split("/"),s=i[i.length-1]?.split(".")[0],r=t.fonts?.find(t=>"family"in t&&t.family===s||"fontFamily"in t&&t.fontFamily===s);!r&&t.fonts&&s&&t.fonts.push({fontFamily:s,fontURL:e.propertyValue});const a=t.components.find(t=>t.item.id===e.itemId&&[v.spec.DataType.TextComponent,v.spec.DataType.RichTextComponent].includes(t.dataType));a?.options&&(a.options.fontFamily=s)}break;case"text":if("string"==typeof e.propertyValue){const i=t.components.find(t=>t.item.id===e.itemId&&[v.spec.DataType.TextComponent,v.spec.DataType.RichTextComponent].includes(t.dataType));i?.options&&(i.options.text=e.propertyValue)}break;case"weight":if("string"==typeof e.propertyValue){const i=t.components.find(t=>t.item.id===e.itemId&&[v.spec.DataType.TextComponent,v.spec.DataType.RichTextComponent].includes(t.dataType));i?.options&&(i.options.fontWeight=e.propertyValue)}break;case"image":if("string"==typeof e.propertyValue){t.components.filter(t=>t.item.id===e.itemId).forEach(i=>{if(!("renderer"in i))return;const s=t.textures?.find(t=>t.id===i.renderer.texture.id);if(s&&"source"in s&&s.source){const i=t?.images.find(t=>t.id===s.source.id);i?.url&&i?.webp&&(i.url=e.propertyValue,i.webp=e.propertyValue)}})}break;case"position":if(Array.isArray(e.propertyValue)&&3===e.propertyValue.length){const i=t.items.find(t=>t.id===e.itemId);i?.transform&&(i.transform.position.x+=e.propertyValue[0],i.transform.position.y+=e.propertyValue[1],i.transform.position.z+=e.propertyValue[2])}break;case"rotation":if(Array.isArray(e.propertyValue)&&3===e.propertyValue.length){const i=t.items.find(t=>t.id===e.itemId);i?.transform&&(i.transform.eulerHint.x+=e.propertyValue[0],i.transform.eulerHint.y+=e.propertyValue[1],i.transform.eulerHint.z+=e.propertyValue[2])}break;case"scale":if(Array.isArray(e.propertyValue)&&3===e.propertyValue.length){const i=t.items.find(t=>t.id===e.itemId);i?.transform&&(i.transform.scale.x*=e.propertyValue[0],i.transform.scale.y*=e.propertyValue[1],i.transform.scale.z*=e.propertyValue[2])}}}transformSceneItem(t,e,i){(0,v.assertExist)(this.data,"You must call SDK#run() first"),this.data.viewProperties.forEach((s,r)=>{if(!this.data?.property.sync&&r!==this.data?.activeData.view)return;const{scene:a}=s;switch(e){case"position":if(Array.isArray(i)&&3===i.length){const e=a.items.find(e=>e.id===t);e?.transform&&(e.transform.position.x+=i[0],e.transform.position.y+=i[1],e.transform.position.z+=i[2])}break;case"rotation":if(Array.isArray(i)&&3===i.length){const e=a.items.find(e=>e.id===t);e?.transform&&(e.transform.eulerHint.x+=i[0],e.transform.eulerHint.y+=i[1],e.transform.eulerHint.z+=i[2])}break;case"scale":if(Array.isArray(i)&&3===i.length){const e=a.items.find(e=>e.id===t);e?.transform&&(e.transform.scale.x*=i[0],e.transform.scale.y*=i[1],e.transform.scale.z*=i[2])}}})}refreshViewItem(t){(0,v.assertExist)(this.data,"You must call SDK#run() first");const e=this.data.items.findIndex(e=>e.id===t);if(e<0)return void console.log(`item ${t} is not existed.`);const i=this.data.items[e],s=this.getPlayerItemById(t);s&&i&&(this.data.items[e]=this.createViewItemByPlayerItem(s,i.parentId))}getPlayerItemById(t){return this.player.getCompositions()[0]?.items.find(e=>e.id===t)}async keepSceneSafe(t,e,i,s,r){const a=JSON.parse(JSON.stringify(e));await t.loadScene(a,{reusable:!0,autoplay:!1}),t.gotoAndStop(i);const n=t.getCompositions()[0];if(n){const t=(t,e,i)=>{const{z:s}=i.transform.getWorldPosition(),{x:r,y:a}=n.camera.getInverseVPRatio(s);i.transform.translate(2*t*r/m,-2*e*a/d,0)},i=t=>{const e=(new U).copyFrom(n.camera.getViewProjectionMatrix());return(new V).copyFrom(t.applyMatrix(e).toVector2()).toViewCoordinate(...s)},[a,o]=s,{size:[h,c,l,p]}=r,m=a-l-p,d=o-h-c,u=[m/a,d/o],y=[(l-p)/2,(h-c)/2],f=n.items.filter(t=>t.name.includes("k-")),g=(new _).setFromCenterAndSize(new V(a,o).divide(2).add(new V(...y)),new V(m,d));f.forEach(s=>{const r=n.items.filter(t=>t.parentId===s.id),a=s.transform.position.clone(),o=s.transform.scale.clone();s.scale(...u,1),t(...y,s),s.transform.updateLocalMatrix();const h=this.getViewBoxByHeadlessPlayerItem(s,r,i);if(!g.containsBox(h)){const{min:e,max:i}=h,{min:r,max:a}=g,n=[0,0];n[0]+=e.x<r.x?r.x-e.x:0,n[0]+=i.x>a.x?a.x-i.x:0,n[1]+=e.y<r.y?r.y-e.y:0,n[1]+=i.y>a.y?a.y-i.y:0,t(...n,s),s.transform.updateLocalMatrix()}const c=s.transform.position.clone(),l=s.transform.scale.clone(),p=c.subtract(a).toArray(),m=l.divide(o).toArray();this.changeSceneItemProperty(e,{itemId:s.id,type:s.type,propertyName:"position",propertyValue:p}),this.changeSceneItemProperty(e,{itemId:s.id,type:s.type,propertyName:"scale",propertyValue:m})})}return e}},Ut=p(require("jszip"),1);function Kt(t,e="asserts failed"){if(!t)throw new Error(e)}function Bt(t,e,...i){const s=e.reduce((t,e)=>t?`${t} ${e}`:e,""),r="color: #108ee9;";switch(t){case"error":console.error(`%c[${s}]`,r,...i);break;case"info":console.info(`%c[${s}]`,r,...i);break;case"debug":console.debug(`%c[${s}]`,r,...i);break;case"warn":console.warn(`%c[${s}]`,r,...i);break;default:console.log(`%c[${s}]`,r,...i)}}var kt="APNG",Wt="MP4",Gt="GIF",Nt="AlphaMaskVideo",Ot=class{constructor(t){m(this,"sampleRate"),m(this,"duration"),m(this,"channels");const{sampleRate:e=44100,duration:i=1,channels:s=2}=t??{};this.sampleRate=e,this.duration=i,this.channels=s}getBuffer(){const t=this.sampleRate*this.duration*this.channels*2,e=44+t,i=new ArrayBuffer(e),s=new DataView(i);let r=0;const a=t=>{for(let e=0;e<t.length;e++)s.setUint8(r++,t.charCodeAt(e))},n=t=>{s.setUint32(r,t,!0),r+=4},o=t=>{s.setUint16(r,t,!0),r+=2};a("RIFF"),n(e-8),a("WAVE"),a("fmt "),n(16),o(1),o(this.channels),n(this.sampleRate),n(this.sampleRate*this.channels*2),o(2*this.channels),o(16),a("data"),n(t);for(let e=0;e<t;e++)s.setUint8(r++,0);return new Uint8Array(i)}},jt=require("@ffmpeg/ffmpeg"),Lt=require("@ffmpeg/util"),Ht={SCRIPT:"https://gw.alipayobjects.com/os/gltf-asset/99531561844014/img2webp.js",WASM:"https://mdn.alipayobjects.com/mars/uri/file/as/0.0.4/wasm/img2webp/img2webp.wasm"},Yt={CLASSWORKER:"https://mdn.alipayobjects.com/rms/uri/file/as/ffmpeg/core/0.12.10/dist/worker.js",DEFAULT:{CORE:"https://gw.alipayobjects.com/os/lib/ffmpeg/core/0.12.10/dist/esm/ffmpeg-core.js",WASM:"https://gw.alipayobjects.com/os/lib/ffmpeg/core/0.12.10/dist/esm/ffmpeg-core.wasm"},MT:{CORE:"https://gw.alipayobjects.com/os/lib/ffmpeg/core-mt/0.12.10/dist/esm/ffmpeg-core.js",WASM:"https://gw.alipayobjects.com/os/lib/ffmpeg/core-mt/0.12.10/dist/esm/ffmpeg-core.wasm",WORKER:"https://gw.alipayobjects.com/os/lib/ffmpeg/core-mt/0.12.10/dist/esm/ffmpeg-core.worker.js"}};function qt(t,e,i,s){const r=e.getContext("2d");Kt(r),r.clearRect(0,0,e.width,e.height),i&&(r.save(),r.fillStyle=i,r.fillRect(0,0,e.width,e.height),r.restore()),s&&r.drawImage(s,0,0,s.width,s.height,0,0,e.width,e.height),r.drawImage(t,0,0,t.width,t.height,0,0,e.width,e.height)}function $t(t){window.requestAnimationFrame(t)}async function Xt(){return new Promise(async(t,e)=>{try{await function(t,e={}){return new Promise((i,s)=>{const r=document.querySelector(`script[src="${t}"]`);if(r)return"true"===r.dataset.loaded?void i(r):(r.addEventListener("load",()=>{i(r)}),void r.addEventListener("error",()=>{s(new Error(`Script already failed: ${t}`))}));const a=document.createElement("script");a.src=t,a.async=!0,Object.keys(e).forEach(t=>{a.setAttribute(t,e[t]??"")}),a.onload=()=>{a.dataset.loaded="true",i(a)},a.onerror=()=>{s(new Error(`Failed to load script: ${t}`))},document.head.appendChild(a)})}(Ht.SCRIPT,{crossOrigin:"anonymous"});const e={locateFile:(t,e)=>t.endsWith("createWebPCore.wasm")?Ht.WASM:e+t};t(await window.createWebPCore(e))}catch(t){e(t)}})}var Jt,Zt,Qt,te,ee,ie,se,re,ae,ne,oe,he=["@vvfx/sdk","ExportVideo"],ce=class extends v.EventEmitter{constructor(t){super(),m(this,"mediaType"),m(this,"extraCanvas"),m(this,"_canceled",!1),m(this,"_player"),m(this,"_currentItem"),y(this,Jt),y(this,Zt),y(this,Qt),y(this,te),y(this,ee,[]),y(this,ie),y(this,se),y(this,re,0),y(this,ae,0),y(this,ne,0),y(this,oe,0);const{mediaType:e,extraCanvas:i,autoDispose:s,loggerInTranscoding:r}=t;this.mediaType=e,this.extraCanvas=i??void 0,Bt("log",[...he,"ready"],"starting"),this.loadHelper(e,r),this.on("ready",()=>{Bt("log",[...he,"ready"],"success")}),this.on("finish",()=>{this.player?.pause(),this.onResetProgress(),!0===s&&this.dispose()}),this.on("error",t=>{Bt("error",[...he,"error"],t)})}get canceled(){return this._canceled}get player(){return this._player}get config(){const t=this.player?.getCompositions()??[],e=t?.[0],i=e?.name??(new Date).getTime().toString(),s=e?.getDuration()??0,r=e?.startTime??0,a=this._currentItem?.time,n=this._currentItem?.fps??60,o=this._currentItem?.backgroundColor??"#000000";return{name:i,startTime:r,oldTotalTime:s,newTotalTime:a,audioEnable:this._currentItem?.audioEnable??!0,fps:n,backgroundColor:o,loop:this._currentItem?.loop??!0}}get progress(){if(0===u(this,re)||0===u(this,ne))return 0;const t=u(this,ae),e=Math.min(u(this,oe)/u(this,ne),1);return Math.min((t+e)/u(this,re),1)}async loadHelper(t,e){try{const i="WebP"===t&&!u(this,Qt),s=(t===Wt||t===kt||t===Gt||t===Nt)&&!u(this,Zt);i&&f(this,Qt,await Xt()),s&&(f(this,Zt,await async function(t){const{log:e}=t,i=new jt.FFmpeg;e&&i.on("log",({message:t})=>{console.log(t)});const s=window.SharedArrayBuffer,r={classWorkerURL:await(0,Lt.toBlobURL)(Yt.CLASSWORKER,"text/javascript"),coreURL:"",wasmURL:""};return s?(r.coreURL=await(0,Lt.toBlobURL)(Yt.MT.CORE,"text/javascript"),r.wasmURL=await(0,Lt.toBlobURL)(Yt.MT.WASM,"application/wasm"),r.workerURL=await(0,Lt.toBlobURL)(Yt.MT.WORKER,"text/javascript")):(r.coreURL=await(0,Lt.toBlobURL)(Yt.DEFAULT.CORE,"text/javascript"),r.wasmURL=await(0,Lt.toBlobURL)(Yt.DEFAULT.WASM,"application/wasm")),await i.load(r),i}({log:e})),this.config.audioEnable&&(f(this,se,"audio.wav"),this.getWavAudio(u(this,se)))),this.emit("ready",t)}catch(t){Bt("error",[...he,"loadHelper"],t),this.emit("error",new Error("load helper error"))}}onResetProgress(){f(this,re,0),f(this,ae,0),f(this,ne,0),f(this,oe,0)}forwardPlayerTime(t,e=!1){(0,v.assertExist)(this.player);const{oldTotalTime:i,startTime:s}=this.config;(0,v.assertExist)(i);const r=1e3*i-1e3*i%15;return t=Math.min(t,r/1e3),e?this.player.gotoAndPlay(t-s):this.player.gotoAndStop(t-s),t}getWavAudio(t){f(this,ie,new Ot),u(this,Zt)?u(this,Zt).writeFile(t,u(this,ie).getBuffer()):Bt("log",[...he,"getWavAudio"],"ffmpegCore is not ready")}async getImagesZip(t,e,i){const s=new Ut.default,r=s.folder(t);return(0,v.assertExist)(r),e.forEach((t,e)=>{r.file(t,i[e])}),s.generateAsync({type:"arraybuffer"})}getWebP(t){(0,v.assertExist)(u(this,Qt));const e=Math.round(1e3/this.config.fps/1),i="out.webp",s=`${t.join(` -d ${e} `)} -d ${e} -o ${i} -loop ${this.config.loop?0:1}`.split(" "),r=u(this,Qt).cwrap("main","string",["number","number"]),[a,n]=function(t,e){const i=t._malloc(e.length*Uint32Array.BYTES_PER_ELEMENT);return e.forEach((e,s)=>{const r=t._malloc(e.length+1);t.writeAsciiToMemory(e,r),t.setValue(i+Uint32Array.BYTES_PER_ELEMENT*s,r,"i32")}),[e.length,i]}(u(this,Qt),s);Kt(a&&n,"getWebP has error"),r(a,n);const o=u(this,Qt).FS.readFile(i);return t.forEach(t=>{u(this,Qt)?.FS.unlink(t)}),o}async getAPNG(t){(0,v.assertExist)(u(this,Zt));const e="export.apng";return await u(this,Zt).exec(["-framerate",`${this.config.fps}`,"-start_number","1","-i",`image-%4d.${t}`,"-plays",this.config.loop?"0":"1","-y",e]),e}async getGIF(t){(0,v.assertExist)(u(this,Zt));const e="export.gif";return await u(this,Zt).exec(["-framerate",`${this.config.fps}`,"-start_number","1","-i",`image-%4d.${t}`,"-loop",this.config.loop?"0":"-1","-vf","scale=-1:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse","-y",e]),e}async getMP4(t,e){(0,v.assertExist)(u(this,Zt));const i="export.mp4";let s;const r=e?",setpts=PTS/"+Math.round(t/e*100)/100:"",a=e??t;return await u(this,Zt).exec(["-framerate",String(this.config.fps),"-start_number",String(1),"-i","image-%4d.jpeg","-c:v","libx264","-crf","23","-pix_fmt","yuv420p","-vf",`pad=ceil(iw/2)*2:ceil(ih/2)*2${r}`,"-y",i]),u(this,se)&&(s="export-with-audio.mp4",await u(this,Zt).exec(["-i",i,"-i",u(this,se),"-c:v","copy","-c:a","aac","-t",`${a}`,"-y",s])),s&&u(this,Zt).deleteFile(i).catch(t=>{console.log("deleteFile error",t)}),s??i}async getAlphaMaskVideo(t,e){(0,v.assertExist)(u(this,Zt));const i="export.mp4",s=e?",setpts=PTS/"+Math.round(t/e*100)/100:"";return await u(this,Zt).exec(["-framerate",String(this.config.fps),"-start_number",String(1),"-i","image-%4d.jpeg","-c:v","libx264","-crf","23","-pix_fmt","yuv420p","-vf",`pad=ceil(iw/2)*2:ceil(ih/2)*2${s}`,"-y",i]),i}async getVideoByType(t,e,i,s){(0,v.assertExist)(u(this,Zt));const r="APNG"===this.mediaType,a="GIF"===this.mediaType,n="AlphaMaskVideo"===this.mediaType,o="MP4"===this.mediaType;let h="";try{r&&(h=await this.getAPNG(e)),a&&(h=await this.getGIF(e)),o&&(h=await this.getMP4(i,s)),n&&(h=await this.getAlphaMaskVideo(i,s))}catch(t){throw t}finally{for(const e of t)u(this,Zt).deleteFile(e).catch(t=>{console.log("deleteFile error",t)})}let c=null;try{(0,v.assertExist)(h);const t=await u(this,Zt).readFile(h);c="string"==typeof t?(new TextEncoder).encode(t):new Uint8Array(t)}finally{u(this,Zt).deleteFile(h).catch(t=>{console.log("deleteFile error",t)})}return c}onRecordWebM(t){const e=new MediaRecorder(t.captureStream(this.config.fps),{mimeType:"video/webm;codecs=vp9"});f(this,te,e),u(this,te).start(0);const i=[];u(this,te).ondataavailable=t=>{t.data.size>0&&i.push(t.data)},f(this,ee,i)}async onExportImageFrame(t){try{if(this.canceled)return Bt("log",[...he,"onExportImageFrame"],"canceled"),void this.emit("done",!1);const{totalFrames:s,index:r,canvas:a,imageFileNames:n,imageBuffers:o,startTime:h,oldTotalTime:c,newTotalTime:l}=t;(0,v.assertExist)(this.player),(0,v.assertExist)(u(this,Jt)),f(this,ne,s),f(this,oe,r),this.emit("progress",this.progress),r>1&&this.forwardPlayerTime(r/this.config.fps+h);const p="MP4"===this.mediaType?"jpeg":"WebP"===this.mediaType?"webp":"png";qt(u(this,Jt),a,this.config.backgroundColor);let m=a;"AlphaMaskVideo"===this.mediaType&&((0,v.assertExist)(this.extraCanvas),function(t,e){e.width=2*t.width,e.height=t.height;const i=t.getContext("2d");if(!i)throw new Error("inputCtx is null");const s=e.getContext("2d");if(!s)throw new Error("ctx is null");s.clearRect(0,0,e.width,e.height);const r=i.getImageData(0,0,t.width,t.height),a=i.getImageData(0,0,t.width,t.height),n=r.data;for(let t=0;t<n.length;t+=4){const e=Math.max(0,(n[t+3]??0)-5)/250*255;e<=0?(n[t]=0,n[t+1]=0,n[t+2]=0,n[t+3]=255):(n[t]=(n[t]??0)*e/255,n[t+1]=(n[t+1]??0)*e/255,n[t+2]=(n[t+2]??0)*e/255,n[t+3]=255)}s.putImageData(r,0,0);const o=a.data;for(let t=0;t<o.length;t+=4){const e=Math.max(0,(o[t+3]??0)-5)/250*255;o[t]=e,o[t+1]=e,o[t+2]=e,o[t+3]=255}s.putImageData(a,t.width,0)}(a,this.extraCanvas),m=this.extraCanvas);const d=await async function(t,e,i){return new Promise((s,r)=>{t.toBlob(t=>{t?s(t.arrayBuffer()):r("toBlob failed")},e,i)})}(m,`image/${p}`,1),y=`image-${e=r,i=4,String(e).padStart(i,"0")}.${p}`;"Images"===this.mediaType?o.push(d):"WebP"===this.mediaType?((0,v.assertExist)(u(this,Qt)),u(this,Qt).FS.writeFile(y,new Uint8Array(d))):((0,v.assertExist)(u(this,Zt)),await u(this,Zt).writeFile(y,new Uint8Array(d))),n.push(y);if(r===s){await new Promise(t=>{window.requestAnimationFrame(t)});let t=null;"Images"===this.mediaType?t=await this.getImagesZip(this.config.name,n,o):"WebP"===this.mediaType?t=this.getWebP(n):["MP4","APNG","GIF","AlphaMaskVideo"].includes(this.mediaType)&&(t=await this.getVideoByType(n,p,c,l)??null),t&&(Bt("log",[...he,"done"],"success"),this.emit("done",!0,t))}else $t(()=>{if(this.canceled)return Bt("log",[...he,"onExportImageFrame"],"canceled"),void this.emit("done",!1);this.onExportImageFrame({totalFrames:s,index:r+1,canvas:a,imageFileNames:n,imageBuffers:o,startTime:h,oldTotalTime:c,newTotalTime:l})})}catch(t){Bt("log",[...he,"done"],"failed",t),this.emit("done",!1),this.emit("error",t)}var e,i}async onExportWebMFrame(t){try{if(this.canceled)return Bt("log",[...he,"onExportWebMFrame"],"canceled"),void this.emit("done",!1);(0,v.assertExist)(this.player),(0,v.assertExist)(u(this,Jt));const{totalFrames:e,index:i,canvas:s}=t;if(f(this,ne,e),f(this,oe,i),this.emit("progress",this.progress),qt(u(this,Jt),s,this.config.backgroundColor),1===i&&(this.player.play(),this.onRecordWebM(s)),i<e)$t(()=>{if(this.canceled)return Bt("log",[...he,"onExportWebMFrame"],"canceled"),void this.emit("done",!1);this.onExportWebMFrame({totalFrames:e,index:i+1,canvas:s})});else{u(this,te)?.stop();const t=new Blob(u(this,ee),{type:"video/webm"}),e=await t.arrayBuffer();Bt("log",[...he,"done"],"success"),this.emit("done",!0,e)}}catch(t){Bt("log",[...he,"done"],"failed",t),this.emit("done",!1)}}async runTask(t){try{if(this.canceled)return Bt("log",[...he,"runTask"],"canceled"),void this.emit("done",!1);(0,v.assertExist)(this.player),(0,v.assertExist)(u(this,Jt));const{size:e,totalFrames:i,startTime:s,containerCanvas:r}=t,{oldTotalTime:a,newTotalTime:n}=this.config,[o,h]=e;if(u(this,Jt).width=o,u(this,Jt).height=h,r.width=o,r.height=h,this.player.resize(),f(this,ne,i),f(this,oe,0),this.emit("progress",this.progress),["MP4","APNG","Images","WebP","GIF","AlphaMaskVideo"].includes(this.mediaType)){const t={totalFrames:i,index:1,canvas:r,imageFileNames:[],imageBuffers:[],startTime:s,oldTotalTime:a,newTotalTime:n};await this.onExportImageFrame(t)}else if("WebM"===this.mediaType){const t={totalFrames:i,index:1,canvas:r};await this.onExportWebMFrame(t)}}catch(t){console.log("runTask error",t),this.emit("done",!1)}}onCancel(){this.canceled||(this._canceled=!0,Bt("log",[...he,"cancel"],"export canceled"),this.emit("done",!1),this.emit("finish"))}async onExport(t){try{if(Kt(t.length>0,"options is required"),this._canceled=!1,!u(this,Jt)){const t=document.createElement("canvas");t.dataset.key="player-canvas",f(this,Jt,t)}this._player||(this._player=new v.Player({canvas:u(this,Jt),pixelRatio:1,transparentBackground:!0,renderOptions:{willCaptureImage:!0}}),this._player.on("rendererror",t=>{Bt("error",[...he,"player","rendererror"],t),this.emit("error",t)}),this._player.on("webglcontextlost",t=>{Bt("error",[...he,"player","webglcontextlost"],t),this.emit("error",t)}));let e=null;e??(e=document.querySelector('canvas[data-key="container-canvas"]')),e??(e=document.createElement("canvas")),e.dataset.key="container-canvas",e.style.display="none",f(this,re,t.length),f(this,ae,0),f(this,ne,0),f(this,oe,0),this.emit("progress",this.progress);for(const[i,s]of t.entries()){if(this.canceled){Bt("log",[...he,"export"],"canceled");break}this._currentItem=s;const{size:t,scene:r}=s;await new Promise(async a=>{try{if(!this._player)throw new Error("player not found");Bt("log",[...he,"export"],"start",s),this._player.destroyCurrentCompositions(),await this._player.loadScene(r,{env:"editor",autoplay:!1});const n=this.config.oldTotalTime;Bt("log",[...he,"duration"],n);const o=0;this._player.pause();const h=Math.round(n*this.config.fps);f(this,ae,i),f(this,ne,h),f(this,oe,0),this.emit("progress",this.progress);const c=()=>{console.log("onDone",i),this.off("done",c),f(this,oe,u(this,ne)),this.emit("progress",this.progress),a()};this.on("done",c);const l={size:t,totalFrames:h,startTime:o,containerCanvas:e};await this.runTask(l)}catch(t){console.log(` the ${i} export is error`,t),a()}})}}catch(t){this.emit("error",t)}Bt("log",[...he,"finish"],"success"),f(this,ae,u(this,re)),f(this,oe,u(this,ne)),this.emit("progress",this.progress),this.emit("finish")}dispose(){this.onResetProgress(),this.player?.dispose(),this._player=void 0,u(this,Jt)?.remove(),f(this,Jt,void 0),u(this,te)&&"inactive"!==u(this,te).state&&u(this,te).stop(),f(this,te,void 0),f(this,ee,[]),u(this,Zt)&&u(this,se)&&(u(this,Zt).deleteFile?.(u(this,se)).catch(t=>{console.log("deleteFile error",t)}),u(this,Zt).terminate(),f(this,Zt,void 0)),u(this,Qt)&&(u(this,Qt).FS.quit(),f(this,Qt,void 0)),f(this,ie,void 0)}};async function le(t,e,i,s){const[r,a]=e,n=JSON.parse(JSON.stringify(i));await t.loadScene(n,{reusable:!0,autoplay:!1}),t.gotoAndStop(s);const o=document.createElement("canvas");o.width=r,o.height=a;const h=o.getContext("2d");h&&(h.fillStyle="rgba(255, 255, 255, 1)",h.fillRect(0,0,r,a),function(t,e,i,s,r,a,n,o,h){2===arguments.length&&(i=s=0,r=t.canvas.width,a=t.canvas.height);n="number"==typeof n?E(n,0,1):.5,o="number"==typeof o?E(o,0,1):.5,h??(h={left:0,top:0,width:e instanceof HTMLVideoElement?e.videoWidth:e.width,height:e instanceof HTMLVideoElement?e.videoHeight:e.height});const c=h.width,l=h.height,p=Math.min(r/c,a/l);let m=c*p,d=l*p,u=1;m<r&&(u=r/m);Math.abs(u-1)<1e-14&&d<a&&(u=a/d);m*=u,d*=u;const y=Math.max(c/(m/r),0),f=Math.max(l/(d/a),0),g=Math.min((c-y)*n,c),w=Math.min((l-f)*o,l);t.drawImage(e,g+h.left,w+h.top,y,f,i,s,r,a)}(h,t.canvas,0,0,r,a,.5,.5));return o.toDataURL("image/png")}Jt=new WeakMap,Zt=new WeakMap,Qt=new WeakMap,te=new WeakMap,ee=new WeakMap,ie=new WeakMap,se=new WeakMap,re=new WeakMap,ae=new WeakMap,ne=new WeakMap,oe=new WeakMap;var pe={DEFAULT:"default",EXPORTING:"exporting",SUCCESS:"success",ERROR:"error"},me=class{constructor(t){m(this,"_eventEmitter",new v.EventEmitter),m(this,"_pageData"),m(this,"_screenShotContainer"),m(this,"_screenShotPlayer"),m(this,"_SDKUtils"),m(this,"_ExportVideo"),m(this,"_gestureHandler"),m(this,"_playerContainer"),m(this,"_isExportReady",!1),m(this,"_exportStatus",pe.DEFAULT),m(this,"player"),m(this,"on",this._eventEmitter.on);const e=[t.offsetWidth,t.offsetHeight],i=document.createElement("div");i.id="player-container",i.style.width=`${e[0]}px`,i.style.height=`${e[1]}px`,i.style.position="absolute",i.style.backgroundRepeat="no-repeat",i.style.backgroundPosition="center center",t.appendChild(i),this._playerContainer=i,this.player=new v.Player({container:i,interactive:!0,pixelRatio:window.devicePixelRatio||1}),this._gestureHandler=new Mt(t),this._gestureHandler.registerViewEvent(),this.player.on("update",t=>{(0,v.assertExist)(this._pageData,"You must call SDK#run() first");const e=this.player.getCompositions()[0]?.time;this._pageData.playing&&(void 0!==e?(this._pageData.time===e&&this.player.pause(),this._pageData.time=e,this._SDKUtils.refreshPageTime(e)):(this._pageData.time=this.player.getCompositions()[0]?.getDuration()??2,this._SDKUtils.refreshPageTime(this._pageData.time),this.player.pause()),t.playing||(this._pageData.playing=!1)),this._eventEmitter.emit("progress",{duration:this.player.getCompositions()[0]?.getDuration()??2,time:this._pageData.time,end:this.player.getCompositions()[0]?.isDestroyed??!1,paused:this._pageData.playing})}),this._screenShotContainer=document.createElement("canvas"),this._screenShotPlayer=new v.Player({canvas:this._screenShotContainer,manualRender:!0,renderOptions:{willCaptureImage:!0}}),this._eventEmitter.on("pageDataChange",t=>{this._pageData=t,this._gestureHandler.refresh(),this._gestureHandler.render()}),this._eventEmitter.on("zoomChange",t=>{(0,v.assertExist)(this._pageData,"You must call SDK#run() first"),this._pageData.property.zoom=t,this._SDKUtils.refreshInteractionParam(),this._gestureHandler.refresh(),this._gestureHandler.render()}),this._eventEmitter.on("selectedItemChange",t=>{(0,v.assertExist)(this._pageData,"You must call SDK#run() first"),this._pageData.activeData.selectedItems=[...t],this._gestureHandler.refresh(),this._gestureHandler.render()}),this._eventEmitter.on("preSelectedItemChange",t=>{(0,v.assertExist)(this._pageData,"You must call SDK#run() first"),this._pageData.activeData.preSelectedItem=t,this._gestureHandler.refresh(),this._gestureHandler.render()}),this._SDKUtils=new Ft(this.player,i,this._eventEmitter,this.pageData),this._ExportVideo=new ce({mediaType:"MP4"}),this._ExportVideo.on("ready",()=>{this._isExportReady=!0,this._exportStatus===pe.EXPORTING&&this.exportAllVideos()})}get pageData(){return this._pageData}get exportStatus(){return this._exportStatus}get exportVideoCanceled(){return this._ExportVideo.canceled}dispose(){this.player?.dispose(),this._screenShotPlayer?.dispose(),this._pageData=void 0,this._playerContainer.remove(),this._ExportVideo.dispose()}async getInitParam(t){const e=JSON.parse(JSON.stringify(t));if("string"==typeof e.scene)try{const t=await fetch(e.scene,{headers:{"Content-Type":"application/json",Accept:"application/json"}});if(!t.ok)throw new Error(`HTTP error! status: ${t.status}, statusText: ${t.statusText}`);const i=await t.json();return{...e,scene:i}}catch(t){throw new Error(`Failed to fetch scene data from ${e.scene}: ${t instanceof Error?t.message:String(t)}`)}return{...e,scene:e.scene}}async initSDK(t){const{scene:e,viewParams:i,options:s}=t,r=[];for(let s=0;s<i.length;s++){const a=i[s];if(!a)continue;let n=JSON.parse(JSON.stringify(e));const o=n.compositions.find(t=>t.id===n.compositionId)??n.compositions[0];(0,v.assertExist)(o);const[h,c]=a.size;o.previewSize=[h,c];const l=o.duration??0;this._screenShotContainer.width=h,this._screenShotContainer.height=c,this._screenShotPlayer.destroyCurrentCompositions(),this._screenShotPlayer.resize();const p=await le(this._screenShotPlayer,a.size,n,l);t.keepSafe&&(this._screenShotContainer.width=h,this._screenShotContainer.height=c,this._screenShotPlayer.destroyCurrentCompositions(),this._screenShotPlayer.resize(),n=await this._SDKUtils.keepSceneSafe(this._screenShotPlayer,n,l,[h,c],a.safeArea)),r.push({...a,id:s,scene:n,thumbnail:p})}const a=r[0]?.scene;if(!a)return void console.warn("SDK need a view property at least.");const n={...s,zoom:1,translation:new V,sync:!1};this._pageData={time:0,property:n,activeData:{selectedItems:[]},items:[],viewProperties:r,playing:!1},this._SDKUtils.init(this._pageData),this._gestureHandler.init(this._SDKUtils),await this._SDKUtils.loadScene(0)}async run(t){const e=await this.getInitParam(t);await this.initSDK(e),this._eventEmitter.emit("pageDataChange",this.getPageData())}getPageData(){return JSON.parse(JSON.stringify(this._pageData))}getActiveItems(){return(0,v.assertExist)(this._pageData,"You must call SDK#run() first"),this._pageData.activeData.selectedItems}setPreSelectedItem(t){(0,v.assertExist)(this._pageData,"You must call SDK#run() first"),this._pageData.activeData.preSelectedItem=t}getPreSelectedItem(){return(0,v.assertExist)(this._pageData,"You must call SDK#run() first"),this._pageData.activeData.preSelectedItem??""}setSelectedItems(t){this._SDKUtils.clearPreSelectedItem(),this._SDKUtils.clearSelectedItems(),this._SDKUtils.addSelectedItems([...t])}getItemProperty(t){(0,v.assertExist)(this._pageData,"You must call SDK#run() first");const e=this._pageData.items.find(e=>e.id===t.itemId);if(e&&e.type===t.type)return{type:e.type,property:e.property}}getItemPropertyValue(t){(0,v.assertExist)(this._pageData,"You must call SDK#run() first");const e=this.getItemProperty(t)?.property?.[t.propertyName];return e}setItemPropertyValue(t){(0,v.assertExist)(this._pageData,"You must call SDK#run() first"),this._SDKUtils.changeItemProperty(t)}async generateScreenShot(t){(0,v.assertExist)(this._pageData,"You must call SDK#run() first");const e=this.pageData?.viewProperties?.[t];if(!e)return"";const{scene:i,size:[s,r]}=e,a=i.compositionId,n=i.compositions.find(t=>t.id===a),o=n?.duration??0;this._screenShotContainer.width=s,this._screenShotContainer.height=r,this._screenShotPlayer.destroyCurrentCompositions(),this._screenShotPlayer.resize();const h=JSON.parse(JSON.stringify(i));return await le(this._screenShotPlayer,[300,400],h,o)}async switchScene(t){if((0,v.assertExist)(this._pageData,"You must call SDK#run() first"),t===this._pageData.activeData.view)return;this._pageData.viewProperties[t]?(this._pageData.activeData={view:t,selectedItems:[],preSelectedItem:void 0},await this._SDKUtils.loadScene(t)):console.warn("target scene does not exist."),this._eventEmitter.emit("pageDataChange",this.getPageData())}getConfig(){return(0,v.assertExist)(this._pageData,"You must call SDK#run() first"),{safeAreaPreview:this._pageData.property.safeAreaPreview,zoom:this._pageData.property.zoom,adsorption:this._pageData.property.adsorption}}setConfig(t){(0,v.assertExist)(this._pageData,"You must call SDK#run() first");const{adsorption:e,safeAreaPreview:i,zoom:s}=this._pageData.property;this._pageData.property={...this._pageData.property,...t},this._pageData.property.zoom!==s&&this._SDKUtils.setPageZoom(this._pageData.property.zoom),e!==t.adsorption&&this._gestureHandler.setAdsorptionEnabled(t.adsorption),i!==t.safeAreaPreview&&this._gestureHandler.setSafeAreaPreviewEnabled(t.safeAreaPreview),this._gestureHandler.refresh(),this._gestureHandler.render()}setPlayProgress(t){(0,v.assertExist)(this._pageData,"You must call SDK#run() first");const e=(this.player.getCompositions()[0]?.getDuration()??2)*t/100;this._pageData.time=e,this._pageData.playing?this.player.gotoAndPlay(e):this.player.gotoAndStop(e)}getViewItems(){return this.getPageData()?.items??[]}setPlayState(t){(0,v.assertExist)(this._pageData,"You must call SDK#run() first");const e="play"===t;this._pageData.playing!==e&&(this._pageData.playing=e,this._gestureHandler.isPlaying=e,e?this.player.gotoAndPlay(this._pageData.time):this.player.gotoAndStop(this._pageData.time),this._gestureHandler.refresh(),this._gestureHandler.render())}getViewThumbnail(){return(0,v.assertExist)(this._pageData,"You must call SDK#run() first"),this._pageData.viewProperties.map(t=>({id:t.id,thumbnail:t.thumbnail}))}async exportAllVideos(){if((0,v.assertExist)(this.pageData,"You must call SDK#run() first"),!this._isExportReady)return this._exportStatus=pe.EXPORTING,this._eventEmitter.emit("exportingChange",this._exportStatus),Promise.reject(new Error("export is not ready"));this._exportStatus=pe.EXPORTING,this._eventEmitter.emit("exportingChange",this._exportStatus);const t=Date.now(),e=this.pageData.viewProperties.map(t=>{const{size:e,scene:i,export:{time:s,audioEnable:r}}=t;return{size:e,scene:i,time:s,audioEnable:r}});return new Promise((i,s)=>{this._ExportVideo.onExport(e),this._ExportVideo.on("progress",t=>{this._eventEmitter.emit("exportingChange",this._exportStatus,t)}),this._ExportVideo.on("done",(t,e)=>{e&&function(t,e,i="application/octet-stream"){const s=new Blob(Array.isArray(t)?t:[t],{type:i}),r=URL.createObjectURL(s),a=document.createElement("a");a.href=r,a.download=e,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(r)}(e,`${Date.now()}.mp4`,"video/mp4")}),this._ExportVideo.on("finish",()=>{this.exportVideoCanceled||(this._exportStatus=pe.SUCCESS),this._eventEmitter.emit("exportingChange",this._exportStatus),console.log("[导出时间共计]",(Date.now()-t)/1e3,"s"),i()}),this._ExportVideo.on("error",t=>{this._exportStatus=pe.ERROR,this._eventEmitter.emit("exportingChange",this._exportStatus),s(t)})})}cancelExportAllVideos(){this._exportStatus=pe.ERROR,this._ExportVideo.onCancel()}};
|