@leafer-in/video 2.3.1 → 2.3.3

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/dist/video.cjs CHANGED
@@ -147,7 +147,9 @@ class PaintVideo {
147
147
  const video = this.decoder;
148
148
  if (video) {
149
149
  video.currentTime = time;
150
- (this.element || this).forceRender();
150
+ video.decoder.addEventListener("seeked", () => (this.element || this).forceRender(), {
151
+ once: true
152
+ });
151
153
  }
152
154
  }
153
155
  get volume() {
@@ -211,9 +213,13 @@ exports.Video = __decorate([ draw.useModule(PaintVideo), draw.registerUI() ], ex
211
213
 
212
214
  draw.Plugin.add("video");
213
215
 
214
- draw.PaintImage.video = function(paint) {
216
+ draw.PaintImage.video = function(paint, oldPaint) {
215
217
  paint.film = true;
216
218
  paint.nowIndex = 0;
219
+ if (draw.isObject(oldPaint)) {
220
+ paint.paused = oldPaint.paused;
221
+ paint.loop = oldPaint.loop;
222
+ }
217
223
  };
218
224
 
219
225
  draw.Creator.video = function(options) {
package/dist/video.esm.js CHANGED
@@ -1,4 +1,4 @@
1
- import { MathHelper, ImageData, isArray, dataProcessor, useModule, registerUI, Image, Plugin, PaintImage, Creator, LeaferVideo, Resource, Platform } from "@leafer-ui/draw";
1
+ import { MathHelper, ImageData, isArray, dataProcessor, useModule, registerUI, Image, Plugin, PaintImage, isObject, Creator, LeaferVideo, Resource, Platform } from "@leafer-ui/draw";
2
2
 
3
3
  function __decorate(decorators, target, key, desc) {
4
4
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -145,7 +145,9 @@ class PaintVideo {
145
145
  const video = this.decoder;
146
146
  if (video) {
147
147
  video.currentTime = time;
148
- (this.element || this).forceRender();
148
+ video.decoder.addEventListener("seeked", () => (this.element || this).forceRender(), {
149
+ once: true
150
+ });
149
151
  }
150
152
  }
151
153
  get volume() {
@@ -209,9 +211,13 @@ Video = __decorate([ useModule(PaintVideo), registerUI() ], Video);
209
211
 
210
212
  Plugin.add("video");
211
213
 
212
- PaintImage.video = function(paint) {
214
+ PaintImage.video = function(paint, oldPaint) {
213
215
  paint.film = true;
214
216
  paint.nowIndex = 0;
217
+ if (isObject(oldPaint)) {
218
+ paint.paused = oldPaint.paused;
219
+ paint.loop = oldPaint.loop;
220
+ }
215
221
  };
216
222
 
217
223
  Creator.video = function(options) {
@@ -1,2 +1,2 @@
1
- import{MathHelper as e,ImageData as t,isArray as r,dataProcessor as o,useModule as n,registerUI as d,Image as i,Plugin as s,PaintImage as c,Creator as u,LeaferVideo as a,Resource as l,Platform as p}from"@leafer-ui/draw";function h(e,t,r,o){var n,d=arguments.length,i=d<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,r):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,o);else for(var s=e.length-1;s>=0;s--)(n=e[s])&&(i=(d<3?n(i):d>3?n(t,r,i):n(t,r))||i);return d>3&&i&&Object.defineProperty(t,r,i),i}function m(e,t,r,o){return new(r||(r=Promise))(function(n,d){function i(e){try{c(o.next(e))}catch(e){d(e)}}function s(e){try{c(o.throw(e))}catch(e){d(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(i,s)}c((o=o.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class f{get currentTime(){return this.decoder.currentTime}set currentTime(t){const r=this.decoder,o=e.within(t,0,this.duration);r.currentTime=o}get volume(){return this.decoder.volume}set volume(t){const r=this.decoder,o=e.within(t,0,1);r.volume=o,o>0&&r.muted&&(r.muted=!1)}get paused(){return this.decoder.paused}get ended(){return this.decoder.ended}static register(e,t,r){f.decoderMap[e]={Decoder:t,force:r}}load(){}play(){this.decoder.play()}pause(){this.decoder.pause()}render(e,t,r,o,n,d,i,s,c){let{paused:u}=i;const a=this.decoder;a.ended&&(a.pause(),i.paused=!0,i.loop=(i.loop||0)+1),!1===u&&a.paused?this.play():!0!==u||a.paused?i.paused=a.paused:this.pause(),e.drawImage(a,t,r,o,n),a.paused||d.forceRender()}destroyDecoder(){const e=this.decoder;e&&(e.pause(),e.src="",e.load(),this.decoder=null)}close(){this.destroyDecoder()}}f.decoderMap={};class y extends t{get __urlType(){return"video"}}class g{get playerOptions(){const{fill:e}=(this.element||this).__;return r(e)&&e.find(e=>"video"===e.type)}get decoder(){const{playerOptions:e}=this;return e&&e.image&&e.image.view}get duration(){const e=this.decoder;return e&&e.duration}get currentTime(){const e=this.decoder;return e&&e.currentTime}set currentTime(e){const t=this.decoder;t&&(t.currentTime=e,(this.element||this).forceRender())}get volume(){const e=this.decoder;return e&&e.volume}set volume(e){const t=this.decoder;t&&(t.volume=e)}get paused(){const e=this.decoder;return e&&e.paused}get ended(){const e=this.decoder;return e&&e.ended}constructor(e){this.element=e}togglePlay(){const{playerOptions:e}=this;e&&(!1!==e.paused?this.play():this.pause())}play(){const{playerOptions:e}=this;e&&!1!==e.paused&&(e.paused=!1,(this.element||this).forceRender())}pause(){const{playerOptions:e}=this;e&&(e.paused=!0,this.decoder.pause())}stop(){const{playerOptions:e}=this;e&&(e.nowIndex=0,this.currentTime=0,this.pause())}}let v=class extends i{get __tag(){return"Video"}};function w(e){return new Promise(t=>{"requestVideoFrameCallback"in e?e.requestVideoFrameCallback(()=>t()):e.readyState>=HTMLMediaElement.HAVE_CURRENT_DATA?t():e.addEventListener("loadeddata",()=>t(),{once:!0})})}h([o(y)],v.prototype,"__",void 0),v=h([n(g),d()],v),s.add("video"),c.video=function(e){e.film=!0,e.nowIndex=0},u.video=function(e){return new a(e)},l.loadVideo=function(e,t){return new Promise((r,o)=>{const n={url:e};t&&(n.format=t);const d=u.video(n);l.set(e,d),d.load(()=>r(d),e=>o(e))})},a.prototype.render=function(e,t,r,o,n,d,i,s,c){this.view.render(e,t,r,o,n,d,i,s,c)},p.origin.loadVideo=function(e,t,r){return m(this,void 0,void 0,function*(){const t=function(e,t=!1,r=!1){const o=document.createElement("video");return o.src=e,o.muted=t,o.loop=r,o.playsInline=!0,o.crossOrigin="anonymous",o}(e),r=new f,{width:o,height:n,duration:d}=yield function(e){return new Promise(t=>{e.readyState>=1?t({width:e.videoWidth,height:e.videoHeight,duration:e.duration}):e.addEventListener("loadedmetadata",()=>{t({width:e.videoWidth,height:e.videoHeight,duration:e.duration})},{once:!0})})}(t);return r.decoder=t,r.width=o,r.height=n,r.duration=d,yield w(t),r})};export{g as PaintVideo,v as Video,y as VideoData,f as VideoDecoder,w as waitVideoFrameReady};
1
+ import{MathHelper as e,ImageData as t,isArray as r,dataProcessor as o,useModule as n,registerUI as d,Image as i,Plugin as s,PaintImage as c,isObject as u,Creator as a,LeaferVideo as l,Resource as p,Platform as h}from"@leafer-ui/draw";function m(e,t,r,o){var n,d=arguments.length,i=d<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,r):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,o);else for(var s=e.length-1;s>=0;s--)(n=e[s])&&(i=(d<3?n(i):d>3?n(t,r,i):n(t,r))||i);return d>3&&i&&Object.defineProperty(t,r,i),i}function f(e,t,r,o){return new(r||(r=Promise))(function(n,d){function i(e){try{c(o.next(e))}catch(e){d(e)}}function s(e){try{c(o.throw(e))}catch(e){d(e)}}function c(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(i,s)}c((o=o.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class v{get currentTime(){return this.decoder.currentTime}set currentTime(t){const r=this.decoder,o=e.within(t,0,this.duration);r.currentTime=o}get volume(){return this.decoder.volume}set volume(t){const r=this.decoder,o=e.within(t,0,1);r.volume=o,o>0&&r.muted&&(r.muted=!1)}get paused(){return this.decoder.paused}get ended(){return this.decoder.ended}static register(e,t,r){v.decoderMap[e]={Decoder:t,force:r}}load(){}play(){this.decoder.play()}pause(){this.decoder.pause()}render(e,t,r,o,n,d,i,s,c){let{paused:u}=i;const a=this.decoder;a.ended&&(a.pause(),i.paused=!0,i.loop=(i.loop||0)+1),!1===u&&a.paused?this.play():!0!==u||a.paused?i.paused=a.paused:this.pause(),e.drawImage(a,t,r,o,n),a.paused||d.forceRender()}destroyDecoder(){const e=this.decoder;e&&(e.pause(),e.src="",e.load(),this.decoder=null)}close(){this.destroyDecoder()}}v.decoderMap={};class y extends t{get __urlType(){return"video"}}class g{get playerOptions(){const{fill:e}=(this.element||this).__;return r(e)&&e.find(e=>"video"===e.type)}get decoder(){const{playerOptions:e}=this;return e&&e.image&&e.image.view}get duration(){const e=this.decoder;return e&&e.duration}get currentTime(){const e=this.decoder;return e&&e.currentTime}set currentTime(e){const t=this.decoder;t&&(t.currentTime=e,t.decoder.addEventListener("seeked",()=>(this.element||this).forceRender(),{once:!0}))}get volume(){const e=this.decoder;return e&&e.volume}set volume(e){const t=this.decoder;t&&(t.volume=e)}get paused(){const e=this.decoder;return e&&e.paused}get ended(){const e=this.decoder;return e&&e.ended}constructor(e){this.element=e}togglePlay(){const{playerOptions:e}=this;e&&(!1!==e.paused?this.play():this.pause())}play(){const{playerOptions:e}=this;e&&!1!==e.paused&&(e.paused=!1,(this.element||this).forceRender())}pause(){const{playerOptions:e}=this;e&&(e.paused=!0,this.decoder.pause())}stop(){const{playerOptions:e}=this;e&&(e.nowIndex=0,this.currentTime=0,this.pause())}}let w=class extends i{get __tag(){return"Video"}};function T(e){return new Promise(t=>{"requestVideoFrameCallback"in e?e.requestVideoFrameCallback(()=>t()):e.readyState>=HTMLMediaElement.HAVE_CURRENT_DATA?t():e.addEventListener("loadeddata",()=>t(),{once:!0})})}m([o(y)],w.prototype,"__",void 0),w=m([n(g),d()],w),s.add("video"),c.video=function(e,t){e.film=!0,e.nowIndex=0,u(t)&&(e.paused=t.paused,e.loop=t.loop)},a.video=function(e){return new l(e)},p.loadVideo=function(e,t){return new Promise((r,o)=>{const n={url:e};t&&(n.format=t);const d=a.video(n);p.set(e,d),d.load(()=>r(d),e=>o(e))})},l.prototype.render=function(e,t,r,o,n,d,i,s,c){this.view.render(e,t,r,o,n,d,i,s,c)},h.origin.loadVideo=function(e,t,r){return f(this,void 0,void 0,function*(){const t=function(e,t=!1,r=!1){const o=document.createElement("video");return o.src=e,o.muted=t,o.loop=r,o.playsInline=!0,o.crossOrigin="anonymous",o}(e),r=new v,{width:o,height:n,duration:d}=yield function(e){return new Promise(t=>{e.readyState>=1?t({width:e.videoWidth,height:e.videoHeight,duration:e.duration}):e.addEventListener("loadedmetadata",()=>{t({width:e.videoWidth,height:e.videoHeight,duration:e.duration})},{once:!0})})}(t);return r.decoder=t,r.width=o,r.height=n,r.duration=d,yield T(t),r})};export{g as PaintVideo,w as Video,y as VideoData,v as VideoDecoder,T as waitVideoFrameReady};
2
2
  //# sourceMappingURL=video.esm.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"video.esm.min.js","sources":["../../../../../node_modules/.pnpm/@rollup+plugin-typescript@11.1.6_rollup@4.44.2_tslib@2.8.1_typescript@5.8.3/node_modules/tslib/tslib.es6.js","../../../../../../src/in/packages/video/src/VideoDecoder.ts","../../../../../../src/in/packages/video/src/data/VideoData.ts","../../../../../../src/in/packages/video/src/PaintVideo.ts","../../../../../../src/in/packages/video/src/Video.ts","../../../../../../src/in/packages/video/src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import { MathHelper } from '@leafer-ui/draw'\nimport { ICanvasContext2D, IVideoDecoder, IVideoFileType, ILeaf, IVideoPlayOptions } from '@leafer-ui/interface'\n\n\ninterface IVideoDecoderMap {\n [name: string]: { Decoder: any, force?: boolean }\n}\n\nexport class VideoDecoder implements IVideoDecoder {\n\n public width: number // 宽度\n public height: number // 高度\n\n public duration: number\n\n public get currentTime(): number { // 获取当前播放进度 (秒)\n const video = this.decoder\n return video.currentTime\n }\n\n public set currentTime(time: number) { // 设置播放进度\n const video = this.decoder\n const targetTime = MathHelper.within(time, 0, this.duration)\n video.currentTime = targetTime\n }\n\n public get volume(): number { // 获取当前音量 (0 ~ 1)\n const video = this.decoder\n return video.volume\n }\n\n public set volume(volume: number) { // 设置音量 (0 ~ 1)\n const video = this.decoder\n const targetVolume = MathHelper.within(volume, 0, 1)\n video.volume = targetVolume\n if (targetVolume > 0 && video.muted) video.muted = false // 如果音量大于 0,确保解除静音状态\n }\n\n public get paused(): boolean {\n const video = this.decoder\n return video.paused\n }\n\n public get ended(): boolean {\n const video = this.decoder\n return video.ended\n }\n\n public loop: number // 循环次数,为0表示无限循环\n\n public decoder: HTMLVideoElement // 解码器\n\n // 缓冲画布\n public bufferCanvas?: any\n public bufferContext?: ICanvasContext2D\n\n static decoderMap: IVideoDecoderMap = {}\n\n static register(type: IVideoFileType, Decoder: any, force?: boolean): void {\n VideoDecoder.decoderMap[type] = { Decoder, force }\n }\n\n public load(): Promise<void> {\n return undefined\n }\n\n public play(): void {\n const video = this.decoder\n video.play()\n }\n\n public pause(): void {\n const video = this.decoder\n video.pause()\n }\n\n\n public render(canvas: ICanvasContext2D, x: number, y: number, width: number, height: number, leaf: ILeaf, playOptions: IVideoPlayOptions, _imageScaleX: number, _imageScaleY: number): void {\n let { paused } = playOptions\n\n const video = this.decoder\n if (video.ended) {\n video.pause()\n playOptions.paused = true\n playOptions.loop = (playOptions.loop as number || 0) + 1\n }\n\n if (paused === false && video.paused) {\n this.play()\n } else if (paused === true && !video.paused) {\n this.pause()\n } else {\n playOptions.paused = video.paused\n }\n\n // 仅在视频处于播放状态,且有实际数据更新时进行绘制\n canvas.drawImage(video, x, y, width, height)\n\n if (!video.paused) leaf.forceRender() // 防止停掉\n }\n\n\n public destroyDecoder(): void {\n const video = this.decoder\n if (video) {\n\n video.pause()\n video.src = ''\n video.load()\n this.decoder = null\n }\n }\n\n public close(): void {\n this.destroyDecoder()\n }\n\n}\n","import { IMultimediaType } from '@leafer-ui/interface'\nimport { ImageData } from '@leafer-ui/draw'\n\n\nexport class VideoData extends ImageData {\n\n public get __urlType(): IMultimediaType { return 'video' }\n\n}","import { ILeafPaint, IVideoDecoder, IUI } from '@leafer-ui/interface'\nimport { isArray } from '@leafer-ui/draw'\n\nexport class PaintVideo {\n\n public element: IUI\n\n public get playerOptions(): ILeafPaint { const { fill } = (this.element || this as any).__; return isArray(fill) && fill.find(item => item.type === 'video') }\n\n public get decoder(): IVideoDecoder { const { playerOptions } = this; return playerOptions && playerOptions.image && playerOptions.image.view }\n\n public get duration(): number { // 获取当前播放进度 (秒)\n const video = this.decoder\n return video && video.duration\n }\n\n public get currentTime(): number { // 获取当前播放进度 (秒)\n const video = this.decoder\n return video && video.currentTime\n }\n\n public set currentTime(time: number) { // 设置播放进度\n const video = this.decoder\n if (video) {\n video.currentTime = time;\n (this.element || this as any as IUI).forceRender()// 需要强制更新一下元素\n }\n }\n\n public get volume(): number { // 获取当前音量 (0 ~ 1)\n const video = this.decoder\n return video && video.volume\n }\n\n public set volume(volume: number) { // 设置音量 (0 ~ 1)\n const video = this.decoder\n if (video) video.volume = volume\n }\n\n public get paused(): boolean {\n const video = this.decoder\n return video && video.paused\n }\n\n public get ended(): boolean {\n const video = this.decoder\n return video && video.ended\n }\n\n\n constructor(element: IUI) {\n this.element = element\n }\n\n\n public togglePlay(): void {\n const { playerOptions } = this\n if (playerOptions) {\n if (playerOptions.paused !== false) this.play()\n else this.pause()\n }\n }\n\n public play(): void {\n const { playerOptions } = this\n if (playerOptions && playerOptions.paused !== false) {\n playerOptions.paused = false;\n (this.element || this as any as IUI).forceRender()\n }\n }\n\n public pause(): void {\n const { playerOptions } = this\n if (playerOptions) {\n playerOptions.paused = true\n this.decoder.pause()\n }\n }\n\n public stop(): void {\n const { playerOptions } = this\n if (playerOptions) {\n playerOptions.nowIndex = 0\n this.currentTime = 0\n this.pause()\n }\n }\n}\n","import { IVideo, IVideoInputData, IVideoData, IVideoDecoder, ILeafPaint } from '@leafer-ui/interface'\nimport { Image, registerUI, dataProcessor, useModule } from '@leafer-ui/draw'\n\nimport { VideoData } from './data/VideoData'\nimport { PaintVideo } from './PaintVideo'\n\n\n@useModule(PaintVideo)\n@registerUI()\nexport class Video<TInputData = IVideoInputData> extends Image<TInputData> implements IVideo {\n\n public get __tag() { return 'Video' }\n\n @dataProcessor(VideoData)\n declare public __: IVideoData\n\n public autoplay?: boolean\n\n public muted?: boolean\n\n public loop?: boolean\n}\n\nexport interface Video {\n\n readonly playerOptions: ILeafPaint\n readonly decoder: IVideoDecoder\n\n duration: number // 总时长\n currentTime: number // 当前播放进度 (秒)\n volume: number // 音量 0 ~1 \n\n readonly paused: boolean\n readonly ended: boolean // 是否播放结束\n\n togglePlay(): void\n play(): void\n pause(): void\n stop(): void\n}","import { LeaferVideo, Platform, Creator, PaintImage, Resource, Plugin } from '@leafer-ui/draw'\nimport { ILeaferVideo, ILeaferVideoConfig, IImageCrossOrigin, ILeaf, ILeafPaint, IVideoFileType } from '@leafer-ui/interface'\n\nimport { VideoDecoder } from './VideoDecoder'\n\nexport { Video } from './Video'\nexport { VideoData } from './data/VideoData'\nexport { VideoDecoder } from './VideoDecoder'\nexport { PaintVideo } from './PaintVideo'\n\n\nPlugin.add('video')\n\n\nPaintImage.video = function (paint: ILeafPaint): void {\n paint.film = true\n paint.nowIndex = 0\n}\n\nCreator.video = function (options?: ILeaferVideoConfig): ILeaferVideo {\n return new LeaferVideo(options)\n}\n\nResource.loadVideo = function (key: string, format?: IVideoFileType): Promise<ILeaferVideo> {\n return new Promise((resolve, reject) => {\n const config: ILeaferVideoConfig = { url: key }\n if (format) config.format = format\n const video = Creator.video(config)\n Resource.set(key, video)\n video.load(() => resolve(video), (e: any) => reject(e))\n })\n}\n\nLeaferVideo.prototype.render = function (canvas: any, x: number, y: number, width: number, height: number, leaf: ILeaf, paint: any, imageScaleX: number, imageScaleY: number): void {\n this.view.render(canvas, x, y, width, height, leaf, paint, imageScaleX, imageScaleY)\n}\n\n\nPlatform.origin.loadVideo = async function (url: string, _crossOrigin?: IImageCrossOrigin, _leaferVideo?: ILeaferVideo): Promise<any> {\n //const buffer = await Platform.origin.loadContent(url, 'arrayBuffer')\n\n // let ext = getFileExt(url) // 获取文件后缀名\n\n // if (!ext) {\n // if (leaferVideo) ext = leaferVideo.config.format\n // if (!ext) ext = 'gif'\n // }\n\n // const mimeType = FileHelper.mimeType(ext)\n const video = createVideoElement(url)\n\n const decoder = new VideoDecoder()\n\n const { width, height, duration } = await waitVideoMetadata(video)\n decoder.decoder = video\n decoder.width = width\n decoder.height = height\n decoder.duration = duration\n\n await waitVideoFrameReady(video)\n\n return decoder\n}\n\n/**\n * 创建并配置一个隐藏的 HTMLVideoElement\n */\nfunction createVideoElement(url: string, muted = false, loop = false): HTMLVideoElement {\n const video = document.createElement('video')\n video.src = url\n video.muted = muted\n video.loop = loop\n\n // 必须设置 playsInline 保证在移动端浏览器内联播放,而不是弹窗全屏\n video.playsInline = true\n //video.webkitPlaysInline = true\n\n // 允许跨域(如果视频托管在 CDN,Canvas 绘制需要此属性避免 Canvas 污染/报错)\n video.crossOrigin = 'anonymous'\n\n return video\n}\n\n/**\n * 等待视频元数据加载完毕,返回视频的尺寸与时长信息\n */\nfunction waitVideoMetadata(video: HTMLVideoElement): Promise<{ width: number; height: number; duration: number }> {\n return new Promise((resolve) => {\n if (video.readyState >= 1) { // HAVE_METADATA 及以上\n resolve({\n width: video.videoWidth,\n height: video.videoHeight,\n duration: video.duration\n })\n } else {\n video.addEventListener('loadedmetadata', () => {\n resolve({\n width: video.videoWidth,\n height: video.videoHeight,\n duration: video.duration\n })\n }, { once: true })\n }\n })\n}\n\n/**\n * 等待视频首帧可绘制到 Canvas\n */\nexport function waitVideoFrameReady(video: HTMLVideoElement): Promise<void> {\n return new Promise((resolve) => {\n if ('requestVideoFrameCallback' in video) {\n video.requestVideoFrameCallback(() => resolve())\n return\n }\n\n if ((video as any).readyState >= HTMLMediaElement.HAVE_CURRENT_DATA) {\n resolve()\n return\n }\n\n (video as any).addEventListener('loadeddata', () => resolve(), {\n once: true\n })\n })\n}"],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","SuppressedError","VideoDecoder","currentTime","this","decoder","time","video","targetTime","MathHelper","within","duration","volume","targetVolume","muted","paused","ended","register","type","Decoder","force","decoderMap","load","play","pause","render","canvas","x","y","width","height","leaf","playOptions","_imageScaleX","_imageScaleY","loop","drawImage","forceRender","destroyDecoder","src","close","VideoData","ImageData","__urlType","PaintVideo","playerOptions","fill","element","__","isArray","find","item","image","view","constructor","togglePlay","stop","nowIndex","Video","Image","__tag","waitVideoFrameReady","requestVideoFrameCallback","readyState","HTMLMediaElement","HAVE_CURRENT_DATA","addEventListener","once","dataProcessor","prototype","useModule","registerUI","Plugin","add","PaintImage","paint","film","Creator","options","LeaferVideo","Resource","loadVideo","format","config","url","set","imageScaleX","imageScaleY","Platform","origin","_crossOrigin","_leaferVideo","document","createElement","playsInline","crossOrigin","createVideoElement","videoWidth","videoHeight","waitVideoMetadata"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"video.esm.min.js","sources":["../../../../../node_modules/.pnpm/@rollup+plugin-typescript@11.1.6_rollup@4.44.2_tslib@2.8.1_typescript@5.8.3/node_modules/tslib/tslib.es6.js","../../../../../../src/in/packages/video/src/VideoDecoder.ts","../../../../../../src/in/packages/video/src/data/VideoData.ts","../../../../../../src/in/packages/video/src/PaintVideo.ts","../../../../../../src/in/packages/video/src/Video.ts","../../../../../../src/in/packages/video/src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import { MathHelper } from '@leafer-ui/draw'\nimport { ICanvasContext2D, IVideoDecoder, IVideoFileType, ILeaf, IVideoPlayOptions } from '@leafer-ui/interface'\n\n\ninterface IVideoDecoderMap {\n [name: string]: { Decoder: any, force?: boolean }\n}\n\nexport class VideoDecoder implements IVideoDecoder {\n\n public width: number // 宽度\n public height: number // 高度\n\n public duration: number\n\n public get currentTime(): number { // 获取当前播放进度 (秒)\n const video = this.decoder\n return video.currentTime\n }\n\n public set currentTime(time: number) { // 设置播放进度\n const video = this.decoder\n const targetTime = MathHelper.within(time, 0, this.duration)\n video.currentTime = targetTime\n }\n\n public get volume(): number { // 获取当前音量 (0 ~ 1)\n const video = this.decoder\n return video.volume\n }\n\n public set volume(volume: number) { // 设置音量 (0 ~ 1)\n const video = this.decoder\n const targetVolume = MathHelper.within(volume, 0, 1)\n video.volume = targetVolume\n if (targetVolume > 0 && video.muted) video.muted = false // 如果音量大于 0,确保解除静音状态\n }\n\n public get paused(): boolean {\n const video = this.decoder\n return video.paused\n }\n\n public get ended(): boolean {\n const video = this.decoder\n return video.ended\n }\n\n public loop: number // 循环次数,为0表示无限循环\n\n public decoder: HTMLVideoElement // 解码器\n\n // 缓冲画布\n public bufferCanvas?: any\n public bufferContext?: ICanvasContext2D\n\n static decoderMap: IVideoDecoderMap = {}\n\n static register(type: IVideoFileType, Decoder: any, force?: boolean): void {\n VideoDecoder.decoderMap[type] = { Decoder, force }\n }\n\n public load(): Promise<void> {\n return undefined\n }\n\n public play(): void {\n const video = this.decoder\n video.play()\n }\n\n public pause(): void {\n const video = this.decoder\n video.pause()\n }\n\n\n public render(canvas: ICanvasContext2D, x: number, y: number, width: number, height: number, leaf: ILeaf, playOptions: IVideoPlayOptions, _imageScaleX: number, _imageScaleY: number): void {\n let { paused } = playOptions\n\n const video = this.decoder\n if (video.ended) {\n video.pause()\n playOptions.paused = true\n playOptions.loop = (playOptions.loop as number || 0) + 1\n }\n\n if (paused === false && video.paused) {\n this.play()\n } else if (paused === true && !video.paused) {\n this.pause()\n } else {\n playOptions.paused = video.paused\n }\n\n // 仅在视频处于播放状态,且有实际数据更新时进行绘制\n canvas.drawImage(video, x, y, width, height)\n\n if (!video.paused) leaf.forceRender() // 防止停掉\n }\n\n\n public destroyDecoder(): void {\n const video = this.decoder\n if (video) {\n\n video.pause()\n video.src = ''\n video.load()\n this.decoder = null\n }\n }\n\n public close(): void {\n this.destroyDecoder()\n }\n\n}\n","import { IMultimediaType } from '@leafer-ui/interface'\nimport { ImageData } from '@leafer-ui/draw'\n\n\nexport class VideoData extends ImageData {\n\n public get __urlType(): IMultimediaType { return 'video' }\n\n}","import { ILeafPaint, IVideoDecoder, IUI } from '@leafer-ui/interface'\nimport { isArray } from '@leafer-ui/draw'\n\nexport class PaintVideo {\n\n public element: IUI\n\n public get playerOptions(): ILeafPaint { const { fill } = (this.element || this as any).__; return isArray(fill) && fill.find(item => item.type === 'video') }\n\n public get decoder(): IVideoDecoder { const { playerOptions } = this; return playerOptions && playerOptions.image && playerOptions.image.view }\n\n public get duration(): number { // 获取当前播放进度 (秒)\n const video = this.decoder\n return video && video.duration\n }\n\n public get currentTime(): number { // 获取当前播放进度 (秒)\n const video = this.decoder\n return video && video.currentTime\n }\n\n public set currentTime(time: number) { // 设置播放进度\n const video = this.decoder\n if (video) {\n video.currentTime = time\n video.decoder.addEventListener('seeked', () => (this.element || this as any as IUI).forceRender(), { once: true }) // 需要强制更新一下元素\n }\n }\n\n public get volume(): number { // 获取当前音量 (0 ~ 1)\n const video = this.decoder\n return video && video.volume\n }\n\n public set volume(volume: number) { // 设置音量 (0 ~ 1)\n const video = this.decoder\n if (video) video.volume = volume\n }\n\n public get paused(): boolean {\n const video = this.decoder\n return video && video.paused\n }\n\n public get ended(): boolean {\n const video = this.decoder\n return video && video.ended\n }\n\n\n constructor(element: IUI) {\n this.element = element\n }\n\n\n public togglePlay(): void {\n const { playerOptions } = this\n if (playerOptions) {\n if (playerOptions.paused !== false) this.play()\n else this.pause()\n }\n }\n\n public play(): void {\n const { playerOptions } = this\n if (playerOptions && playerOptions.paused !== false) {\n playerOptions.paused = false;\n (this.element || this as any as IUI).forceRender()\n }\n }\n\n public pause(): void {\n const { playerOptions } = this\n if (playerOptions) {\n playerOptions.paused = true\n this.decoder.pause()\n }\n }\n\n public stop(): void {\n const { playerOptions } = this\n if (playerOptions) {\n playerOptions.nowIndex = 0\n this.currentTime = 0\n this.pause()\n }\n }\n}\n","import { IVideo, IVideoInputData, IVideoData, IVideoDecoder, ILeafPaint } from '@leafer-ui/interface'\nimport { Image, registerUI, dataProcessor, useModule } from '@leafer-ui/draw'\n\nimport { VideoData } from './data/VideoData'\nimport { PaintVideo } from './PaintVideo'\n\n\n@useModule(PaintVideo)\n@registerUI()\nexport class Video<TInputData = IVideoInputData> extends Image<TInputData> implements IVideo {\n\n public get __tag() { return 'Video' }\n\n @dataProcessor(VideoData)\n declare public __: IVideoData\n\n public autoplay?: boolean\n\n public muted?: boolean\n\n public loop?: boolean\n}\n\nexport interface Video {\n\n readonly playerOptions: ILeafPaint\n readonly decoder: IVideoDecoder\n\n duration: number // 总时长\n currentTime: number // 当前播放进度 (秒)\n volume: number // 音量 0 ~1 \n\n readonly paused: boolean\n readonly ended: boolean // 是否播放结束\n\n togglePlay(): void\n play(): void\n pause(): void\n stop(): void\n}","import { LeaferVideo, Platform, Creator, PaintImage, Resource, Plugin, isObject } from '@leafer-ui/draw'\nimport { ILeaferVideo, ILeaferVideoConfig, IImageCrossOrigin, ILeaf, ILeafPaint, IVideoFileType } from '@leafer-ui/interface'\n\nimport { VideoDecoder } from './VideoDecoder'\n\nexport { Video } from './Video'\nexport { VideoData } from './data/VideoData'\nexport { VideoDecoder } from './VideoDecoder'\nexport { PaintVideo } from './PaintVideo'\n\n\nPlugin.add('video')\n\n\nPaintImage.video = function (paint: ILeafPaint, oldPaint?: ILeafPaint): void {\n paint.film = true\n paint.nowIndex = 0\n if (isObject(oldPaint)) {\n paint.paused = oldPaint.paused\n paint.loop = oldPaint.loop\n }\n}\n\nCreator.video = function (options?: ILeaferVideoConfig): ILeaferVideo {\n return new LeaferVideo(options)\n}\n\nResource.loadVideo = function (key: string, format?: IVideoFileType): Promise<ILeaferVideo> {\n return new Promise((resolve, reject) => {\n const config: ILeaferVideoConfig = { url: key }\n if (format) config.format = format\n const video = Creator.video(config)\n Resource.set(key, video)\n video.load(() => resolve(video), (e: any) => reject(e))\n })\n}\n\nLeaferVideo.prototype.render = function (canvas: any, x: number, y: number, width: number, height: number, leaf: ILeaf, paint: any, imageScaleX: number, imageScaleY: number): void {\n this.view.render(canvas, x, y, width, height, leaf, paint, imageScaleX, imageScaleY)\n}\n\n\nPlatform.origin.loadVideo = async function (url: string, _crossOrigin?: IImageCrossOrigin, _leaferVideo?: ILeaferVideo): Promise<any> {\n //const buffer = await Platform.origin.loadContent(url, 'arrayBuffer')\n\n // let ext = getFileExt(url) // 获取文件后缀名\n\n // if (!ext) {\n // if (leaferVideo) ext = leaferVideo.config.format\n // if (!ext) ext = 'gif'\n // }\n\n // const mimeType = FileHelper.mimeType(ext)\n const video = createVideoElement(url)\n\n const decoder = new VideoDecoder()\n\n const { width, height, duration } = await waitVideoMetadata(video)\n decoder.decoder = video\n decoder.width = width\n decoder.height = height\n decoder.duration = duration\n\n await waitVideoFrameReady(video)\n\n return decoder\n}\n\n/**\n * 创建并配置一个隐藏的 HTMLVideoElement\n */\nfunction createVideoElement(url: string, muted = false, loop = false): HTMLVideoElement {\n const video = document.createElement('video')\n video.src = url\n video.muted = muted\n video.loop = loop\n\n // 必须设置 playsInline 保证在移动端浏览器内联播放,而不是弹窗全屏\n video.playsInline = true\n //video.webkitPlaysInline = true\n\n // 允许跨域(如果视频托管在 CDN,Canvas 绘制需要此属性避免 Canvas 污染/报错)\n video.crossOrigin = 'anonymous'\n\n return video\n}\n\n/**\n * 等待视频元数据加载完毕,返回视频的尺寸与时长信息\n */\nfunction waitVideoMetadata(video: HTMLVideoElement): Promise<{ width: number; height: number; duration: number }> {\n return new Promise((resolve) => {\n if (video.readyState >= 1) { // HAVE_METADATA 及以上\n resolve({\n width: video.videoWidth,\n height: video.videoHeight,\n duration: video.duration\n })\n } else {\n video.addEventListener('loadedmetadata', () => {\n resolve({\n width: video.videoWidth,\n height: video.videoHeight,\n duration: video.duration\n })\n }, { once: true })\n }\n })\n}\n\n/**\n * 等待视频首帧可绘制到 Canvas\n */\nexport function waitVideoFrameReady(video: HTMLVideoElement): Promise<void> {\n return new Promise((resolve) => {\n if ('requestVideoFrameCallback' in video) {\n video.requestVideoFrameCallback(() => resolve())\n return\n }\n\n if ((video as any).readyState >= HTMLMediaElement.HAVE_CURRENT_DATA) {\n resolve()\n return\n }\n\n (video as any).addEventListener('loadeddata', () => resolve(), {\n once: true\n })\n })\n}"],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","SuppressedError","VideoDecoder","currentTime","this","decoder","time","video","targetTime","MathHelper","within","duration","volume","targetVolume","muted","paused","ended","register","type","Decoder","force","decoderMap","load","play","pause","render","canvas","x","y","width","height","leaf","playOptions","_imageScaleX","_imageScaleY","loop","drawImage","forceRender","destroyDecoder","src","close","VideoData","ImageData","__urlType","PaintVideo","playerOptions","fill","element","__","isArray","find","item","image","view","addEventListener","once","constructor","togglePlay","stop","nowIndex","Video","Image","__tag","waitVideoFrameReady","requestVideoFrameCallback","readyState","HTMLMediaElement","HAVE_CURRENT_DATA","dataProcessor","prototype","useModule","registerUI","Plugin","add","PaintImage","paint","oldPaint","film","isObject","Creator","options","LeaferVideo","Resource","loadVideo","format","config","url","set","imageScaleX","imageScaleY","Platform","origin","_crossOrigin","_leaferVideo","document","createElement","playsInline","crossOrigin","createVideoElement","videoWidth","videoHeight","waitVideoMetadata"],"mappings":"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","x_google_ignoreList":[0]}
package/dist/video.js CHANGED
@@ -141,7 +141,9 @@ this.LeaferIN.video = function(exports, draw) {
141
141
  const video = this.decoder;
142
142
  if (video) {
143
143
  video.currentTime = time;
144
- (this.element || this).forceRender();
144
+ video.decoder.addEventListener("seeked", () => (this.element || this).forceRender(), {
145
+ once: true
146
+ });
145
147
  }
146
148
  }
147
149
  get volume() {
@@ -200,9 +202,13 @@ this.LeaferIN.video = function(exports, draw) {
200
202
  __decorate([ draw.dataProcessor(VideoData) ], exports.Video.prototype, "__", void 0);
201
203
  exports.Video = __decorate([ draw.useModule(PaintVideo), draw.registerUI() ], exports.Video);
202
204
  draw.Plugin.add("video");
203
- draw.PaintImage.video = function(paint) {
205
+ draw.PaintImage.video = function(paint, oldPaint) {
204
206
  paint.film = true;
205
207
  paint.nowIndex = 0;
208
+ if (draw.isObject(oldPaint)) {
209
+ paint.paused = oldPaint.paused;
210
+ paint.loop = oldPaint.loop;
211
+ }
206
212
  };
207
213
  draw.Creator.video = function(options) {
208
214
  return new draw.LeaferVideo(options);
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("@leafer-ui/draw");function t(e,t,r,o){var d,n=arguments.length,i=n<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,r):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,o);else for(var s=e.length-1;s>=0;s--)(d=e[s])&&(i=(n<3?d(i):n>3?d(t,r,i):d(t,r))||i);return n>3&&i&&Object.defineProperty(t,r,i),i}function r(e,t,r,o){return new(r||(r=Promise))(function(d,n){function i(e){try{a(o.next(e))}catch(e){n(e)}}function s(e){try{a(o.throw(e))}catch(e){n(e)}}function a(e){var t;e.done?d(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(i,s)}a((o=o.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class o{get currentTime(){return this.decoder.currentTime}set currentTime(t){const r=this.decoder,o=e.MathHelper.within(t,0,this.duration);r.currentTime=o}get volume(){return this.decoder.volume}set volume(t){const r=this.decoder,o=e.MathHelper.within(t,0,1);r.volume=o,o>0&&r.muted&&(r.muted=!1)}get paused(){return this.decoder.paused}get ended(){return this.decoder.ended}static register(e,t,r){o.decoderMap[e]={Decoder:t,force:r}}load(){}play(){this.decoder.play()}pause(){this.decoder.pause()}render(e,t,r,o,d,n,i,s,a){let{paused:c}=i;const u=this.decoder;u.ended&&(u.pause(),i.paused=!0,i.loop=(i.loop||0)+1),!1===c&&u.paused?this.play():!0!==c||u.paused?i.paused=u.paused:this.pause(),e.drawImage(u,t,r,o,d),u.paused||n.forceRender()}destroyDecoder(){const e=this.decoder;e&&(e.pause(),e.src="",e.load(),this.decoder=null)}close(){this.destroyDecoder()}}o.decoderMap={};class d extends e.ImageData{get __urlType(){return"video"}}class n{get playerOptions(){const{fill:t}=(this.element||this).__;return e.isArray(t)&&t.find(e=>"video"===e.type)}get decoder(){const{playerOptions:e}=this;return e&&e.image&&e.image.view}get duration(){const e=this.decoder;return e&&e.duration}get currentTime(){const e=this.decoder;return e&&e.currentTime}set currentTime(e){const t=this.decoder;t&&(t.currentTime=e,(this.element||this).forceRender())}get volume(){const e=this.decoder;return e&&e.volume}set volume(e){const t=this.decoder;t&&(t.volume=e)}get paused(){const e=this.decoder;return e&&e.paused}get ended(){const e=this.decoder;return e&&e.ended}constructor(e){this.element=e}togglePlay(){const{playerOptions:e}=this;e&&(!1!==e.paused?this.play():this.pause())}play(){const{playerOptions:e}=this;e&&!1!==e.paused&&(e.paused=!1,(this.element||this).forceRender())}pause(){const{playerOptions:e}=this;e&&(e.paused=!0,this.decoder.pause())}stop(){const{playerOptions:e}=this;e&&(e.nowIndex=0,this.currentTime=0,this.pause())}}function i(e){return new Promise(t=>{"requestVideoFrameCallback"in e?e.requestVideoFrameCallback(()=>t()):e.readyState>=HTMLMediaElement.HAVE_CURRENT_DATA?t():e.addEventListener("loadeddata",()=>t(),{once:!0})})}exports.Video=class extends e.Image{get __tag(){return"Video"}},t([e.dataProcessor(d)],exports.Video.prototype,"__",void 0),exports.Video=t([e.useModule(n),e.registerUI()],exports.Video),e.Plugin.add("video"),e.PaintImage.video=function(e){e.film=!0,e.nowIndex=0},e.Creator.video=function(t){return new e.LeaferVideo(t)},e.Resource.loadVideo=function(t,r){return new Promise((o,d)=>{const n={url:t};r&&(n.format=r);const i=e.Creator.video(n);e.Resource.set(t,i),i.load(()=>o(i),e=>d(e))})},e.LeaferVideo.prototype.render=function(e,t,r,o,d,n,i,s,a){this.view.render(e,t,r,o,d,n,i,s,a)},e.Platform.origin.loadVideo=function(e,t,d){return r(this,void 0,void 0,function*(){const t=function(e,t=!1,r=!1){const o=document.createElement("video");return o.src=e,o.muted=t,o.loop=r,o.playsInline=!0,o.crossOrigin="anonymous",o}(e),r=new o,{width:d,height:n,duration:s}=yield function(e){return new Promise(t=>{e.readyState>=1?t({width:e.videoWidth,height:e.videoHeight,duration:e.duration}):e.addEventListener("loadedmetadata",()=>{t({width:e.videoWidth,height:e.videoHeight,duration:e.duration})},{once:!0})})}(t);return r.decoder=t,r.width=d,r.height=n,r.duration=s,yield i(t),r})},exports.PaintVideo=n,exports.VideoData=d,exports.VideoDecoder=o,exports.waitVideoFrameReady=i;
1
+ "use strict";var e=require("@leafer-ui/draw");function t(e,t,r,o){var d,n=arguments.length,i=n<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,r):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,o);else for(var s=e.length-1;s>=0;s--)(d=e[s])&&(i=(n<3?d(i):n>3?d(t,r,i):d(t,r))||i);return n>3&&i&&Object.defineProperty(t,r,i),i}function r(e,t,r,o){return new(r||(r=Promise))(function(d,n){function i(e){try{a(o.next(e))}catch(e){n(e)}}function s(e){try{a(o.throw(e))}catch(e){n(e)}}function a(e){var t;e.done?d(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(i,s)}a((o=o.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class o{get currentTime(){return this.decoder.currentTime}set currentTime(t){const r=this.decoder,o=e.MathHelper.within(t,0,this.duration);r.currentTime=o}get volume(){return this.decoder.volume}set volume(t){const r=this.decoder,o=e.MathHelper.within(t,0,1);r.volume=o,o>0&&r.muted&&(r.muted=!1)}get paused(){return this.decoder.paused}get ended(){return this.decoder.ended}static register(e,t,r){o.decoderMap[e]={Decoder:t,force:r}}load(){}play(){this.decoder.play()}pause(){this.decoder.pause()}render(e,t,r,o,d,n,i,s,a){let{paused:c}=i;const u=this.decoder;u.ended&&(u.pause(),i.paused=!0,i.loop=(i.loop||0)+1),!1===c&&u.paused?this.play():!0!==c||u.paused?i.paused=u.paused:this.pause(),e.drawImage(u,t,r,o,d),u.paused||n.forceRender()}destroyDecoder(){const e=this.decoder;e&&(e.pause(),e.src="",e.load(),this.decoder=null)}close(){this.destroyDecoder()}}o.decoderMap={};class d extends e.ImageData{get __urlType(){return"video"}}class n{get playerOptions(){const{fill:t}=(this.element||this).__;return e.isArray(t)&&t.find(e=>"video"===e.type)}get decoder(){const{playerOptions:e}=this;return e&&e.image&&e.image.view}get duration(){const e=this.decoder;return e&&e.duration}get currentTime(){const e=this.decoder;return e&&e.currentTime}set currentTime(e){const t=this.decoder;t&&(t.currentTime=e,t.decoder.addEventListener("seeked",()=>(this.element||this).forceRender(),{once:!0}))}get volume(){const e=this.decoder;return e&&e.volume}set volume(e){const t=this.decoder;t&&(t.volume=e)}get paused(){const e=this.decoder;return e&&e.paused}get ended(){const e=this.decoder;return e&&e.ended}constructor(e){this.element=e}togglePlay(){const{playerOptions:e}=this;e&&(!1!==e.paused?this.play():this.pause())}play(){const{playerOptions:e}=this;e&&!1!==e.paused&&(e.paused=!1,(this.element||this).forceRender())}pause(){const{playerOptions:e}=this;e&&(e.paused=!0,this.decoder.pause())}stop(){const{playerOptions:e}=this;e&&(e.nowIndex=0,this.currentTime=0,this.pause())}}function i(e){return new Promise(t=>{"requestVideoFrameCallback"in e?e.requestVideoFrameCallback(()=>t()):e.readyState>=HTMLMediaElement.HAVE_CURRENT_DATA?t():e.addEventListener("loadeddata",()=>t(),{once:!0})})}exports.Video=class extends e.Image{get __tag(){return"Video"}},t([e.dataProcessor(d)],exports.Video.prototype,"__",void 0),exports.Video=t([e.useModule(n),e.registerUI()],exports.Video),e.Plugin.add("video"),e.PaintImage.video=function(t,r){t.film=!0,t.nowIndex=0,e.isObject(r)&&(t.paused=r.paused,t.loop=r.loop)},e.Creator.video=function(t){return new e.LeaferVideo(t)},e.Resource.loadVideo=function(t,r){return new Promise((o,d)=>{const n={url:t};r&&(n.format=r);const i=e.Creator.video(n);e.Resource.set(t,i),i.load(()=>o(i),e=>d(e))})},e.LeaferVideo.prototype.render=function(e,t,r,o,d,n,i,s,a){this.view.render(e,t,r,o,d,n,i,s,a)},e.Platform.origin.loadVideo=function(e,t,d){return r(this,void 0,void 0,function*(){const t=function(e,t=!1,r=!1){const o=document.createElement("video");return o.src=e,o.muted=t,o.loop=r,o.playsInline=!0,o.crossOrigin="anonymous",o}(e),r=new o,{width:d,height:n,duration:s}=yield function(e){return new Promise(t=>{e.readyState>=1?t({width:e.videoWidth,height:e.videoHeight,duration:e.duration}):e.addEventListener("loadedmetadata",()=>{t({width:e.videoWidth,height:e.videoHeight,duration:e.duration})},{once:!0})})}(t);return r.decoder=t,r.width=d,r.height=n,r.duration=s,yield i(t),r})},exports.PaintVideo=n,exports.VideoData=d,exports.VideoDecoder=o,exports.waitVideoFrameReady=i;
2
2
  //# sourceMappingURL=video.min.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"video.min.cjs","sources":["../../../../../node_modules/.pnpm/@rollup+plugin-typescript@11.1.6_rollup@4.44.2_tslib@2.8.1_typescript@5.8.3/node_modules/tslib/tslib.es6.js","../../../../../../src/in/packages/video/src/VideoDecoder.ts","../../../../../../src/in/packages/video/src/data/VideoData.ts","../../../../../../src/in/packages/video/src/PaintVideo.ts","../../../../../../src/in/packages/video/src/index.ts","../../../../../../src/in/packages/video/src/Video.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import { MathHelper } from '@leafer-ui/draw'\nimport { ICanvasContext2D, IVideoDecoder, IVideoFileType, ILeaf, IVideoPlayOptions } from '@leafer-ui/interface'\n\n\ninterface IVideoDecoderMap {\n [name: string]: { Decoder: any, force?: boolean }\n}\n\nexport class VideoDecoder implements IVideoDecoder {\n\n public width: number // 宽度\n public height: number // 高度\n\n public duration: number\n\n public get currentTime(): number { // 获取当前播放进度 (秒)\n const video = this.decoder\n return video.currentTime\n }\n\n public set currentTime(time: number) { // 设置播放进度\n const video = this.decoder\n const targetTime = MathHelper.within(time, 0, this.duration)\n video.currentTime = targetTime\n }\n\n public get volume(): number { // 获取当前音量 (0 ~ 1)\n const video = this.decoder\n return video.volume\n }\n\n public set volume(volume: number) { // 设置音量 (0 ~ 1)\n const video = this.decoder\n const targetVolume = MathHelper.within(volume, 0, 1)\n video.volume = targetVolume\n if (targetVolume > 0 && video.muted) video.muted = false // 如果音量大于 0,确保解除静音状态\n }\n\n public get paused(): boolean {\n const video = this.decoder\n return video.paused\n }\n\n public get ended(): boolean {\n const video = this.decoder\n return video.ended\n }\n\n public loop: number // 循环次数,为0表示无限循环\n\n public decoder: HTMLVideoElement // 解码器\n\n // 缓冲画布\n public bufferCanvas?: any\n public bufferContext?: ICanvasContext2D\n\n static decoderMap: IVideoDecoderMap = {}\n\n static register(type: IVideoFileType, Decoder: any, force?: boolean): void {\n VideoDecoder.decoderMap[type] = { Decoder, force }\n }\n\n public load(): Promise<void> {\n return undefined\n }\n\n public play(): void {\n const video = this.decoder\n video.play()\n }\n\n public pause(): void {\n const video = this.decoder\n video.pause()\n }\n\n\n public render(canvas: ICanvasContext2D, x: number, y: number, width: number, height: number, leaf: ILeaf, playOptions: IVideoPlayOptions, _imageScaleX: number, _imageScaleY: number): void {\n let { paused } = playOptions\n\n const video = this.decoder\n if (video.ended) {\n video.pause()\n playOptions.paused = true\n playOptions.loop = (playOptions.loop as number || 0) + 1\n }\n\n if (paused === false && video.paused) {\n this.play()\n } else if (paused === true && !video.paused) {\n this.pause()\n } else {\n playOptions.paused = video.paused\n }\n\n // 仅在视频处于播放状态,且有实际数据更新时进行绘制\n canvas.drawImage(video, x, y, width, height)\n\n if (!video.paused) leaf.forceRender() // 防止停掉\n }\n\n\n public destroyDecoder(): void {\n const video = this.decoder\n if (video) {\n\n video.pause()\n video.src = ''\n video.load()\n this.decoder = null\n }\n }\n\n public close(): void {\n this.destroyDecoder()\n }\n\n}\n","import { IMultimediaType } from '@leafer-ui/interface'\nimport { ImageData } from '@leafer-ui/draw'\n\n\nexport class VideoData extends ImageData {\n\n public get __urlType(): IMultimediaType { return 'video' }\n\n}","import { ILeafPaint, IVideoDecoder, IUI } from '@leafer-ui/interface'\nimport { isArray } from '@leafer-ui/draw'\n\nexport class PaintVideo {\n\n public element: IUI\n\n public get playerOptions(): ILeafPaint { const { fill } = (this.element || this as any).__; return isArray(fill) && fill.find(item => item.type === 'video') }\n\n public get decoder(): IVideoDecoder { const { playerOptions } = this; return playerOptions && playerOptions.image && playerOptions.image.view }\n\n public get duration(): number { // 获取当前播放进度 (秒)\n const video = this.decoder\n return video && video.duration\n }\n\n public get currentTime(): number { // 获取当前播放进度 (秒)\n const video = this.decoder\n return video && video.currentTime\n }\n\n public set currentTime(time: number) { // 设置播放进度\n const video = this.decoder\n if (video) {\n video.currentTime = time;\n (this.element || this as any as IUI).forceRender()// 需要强制更新一下元素\n }\n }\n\n public get volume(): number { // 获取当前音量 (0 ~ 1)\n const video = this.decoder\n return video && video.volume\n }\n\n public set volume(volume: number) { // 设置音量 (0 ~ 1)\n const video = this.decoder\n if (video) video.volume = volume\n }\n\n public get paused(): boolean {\n const video = this.decoder\n return video && video.paused\n }\n\n public get ended(): boolean {\n const video = this.decoder\n return video && video.ended\n }\n\n\n constructor(element: IUI) {\n this.element = element\n }\n\n\n public togglePlay(): void {\n const { playerOptions } = this\n if (playerOptions) {\n if (playerOptions.paused !== false) this.play()\n else this.pause()\n }\n }\n\n public play(): void {\n const { playerOptions } = this\n if (playerOptions && playerOptions.paused !== false) {\n playerOptions.paused = false;\n (this.element || this as any as IUI).forceRender()\n }\n }\n\n public pause(): void {\n const { playerOptions } = this\n if (playerOptions) {\n playerOptions.paused = true\n this.decoder.pause()\n }\n }\n\n public stop(): void {\n const { playerOptions } = this\n if (playerOptions) {\n playerOptions.nowIndex = 0\n this.currentTime = 0\n this.pause()\n }\n }\n}\n","import { LeaferVideo, Platform, Creator, PaintImage, Resource, Plugin } from '@leafer-ui/draw'\nimport { ILeaferVideo, ILeaferVideoConfig, IImageCrossOrigin, ILeaf, ILeafPaint, IVideoFileType } from '@leafer-ui/interface'\n\nimport { VideoDecoder } from './VideoDecoder'\n\nexport { Video } from './Video'\nexport { VideoData } from './data/VideoData'\nexport { VideoDecoder } from './VideoDecoder'\nexport { PaintVideo } from './PaintVideo'\n\n\nPlugin.add('video')\n\n\nPaintImage.video = function (paint: ILeafPaint): void {\n paint.film = true\n paint.nowIndex = 0\n}\n\nCreator.video = function (options?: ILeaferVideoConfig): ILeaferVideo {\n return new LeaferVideo(options)\n}\n\nResource.loadVideo = function (key: string, format?: IVideoFileType): Promise<ILeaferVideo> {\n return new Promise((resolve, reject) => {\n const config: ILeaferVideoConfig = { url: key }\n if (format) config.format = format\n const video = Creator.video(config)\n Resource.set(key, video)\n video.load(() => resolve(video), (e: any) => reject(e))\n })\n}\n\nLeaferVideo.prototype.render = function (canvas: any, x: number, y: number, width: number, height: number, leaf: ILeaf, paint: any, imageScaleX: number, imageScaleY: number): void {\n this.view.render(canvas, x, y, width, height, leaf, paint, imageScaleX, imageScaleY)\n}\n\n\nPlatform.origin.loadVideo = async function (url: string, _crossOrigin?: IImageCrossOrigin, _leaferVideo?: ILeaferVideo): Promise<any> {\n //const buffer = await Platform.origin.loadContent(url, 'arrayBuffer')\n\n // let ext = getFileExt(url) // 获取文件后缀名\n\n // if (!ext) {\n // if (leaferVideo) ext = leaferVideo.config.format\n // if (!ext) ext = 'gif'\n // }\n\n // const mimeType = FileHelper.mimeType(ext)\n const video = createVideoElement(url)\n\n const decoder = new VideoDecoder()\n\n const { width, height, duration } = await waitVideoMetadata(video)\n decoder.decoder = video\n decoder.width = width\n decoder.height = height\n decoder.duration = duration\n\n await waitVideoFrameReady(video)\n\n return decoder\n}\n\n/**\n * 创建并配置一个隐藏的 HTMLVideoElement\n */\nfunction createVideoElement(url: string, muted = false, loop = false): HTMLVideoElement {\n const video = document.createElement('video')\n video.src = url\n video.muted = muted\n video.loop = loop\n\n // 必须设置 playsInline 保证在移动端浏览器内联播放,而不是弹窗全屏\n video.playsInline = true\n //video.webkitPlaysInline = true\n\n // 允许跨域(如果视频托管在 CDN,Canvas 绘制需要此属性避免 Canvas 污染/报错)\n video.crossOrigin = 'anonymous'\n\n return video\n}\n\n/**\n * 等待视频元数据加载完毕,返回视频的尺寸与时长信息\n */\nfunction waitVideoMetadata(video: HTMLVideoElement): Promise<{ width: number; height: number; duration: number }> {\n return new Promise((resolve) => {\n if (video.readyState >= 1) { // HAVE_METADATA 及以上\n resolve({\n width: video.videoWidth,\n height: video.videoHeight,\n duration: video.duration\n })\n } else {\n video.addEventListener('loadedmetadata', () => {\n resolve({\n width: video.videoWidth,\n height: video.videoHeight,\n duration: video.duration\n })\n }, { once: true })\n }\n })\n}\n\n/**\n * 等待视频首帧可绘制到 Canvas\n */\nexport function waitVideoFrameReady(video: HTMLVideoElement): Promise<void> {\n return new Promise((resolve) => {\n if ('requestVideoFrameCallback' in video) {\n video.requestVideoFrameCallback(() => resolve())\n return\n }\n\n if ((video as any).readyState >= HTMLMediaElement.HAVE_CURRENT_DATA) {\n resolve()\n return\n }\n\n (video as any).addEventListener('loadeddata', () => resolve(), {\n once: true\n })\n })\n}","import { IVideo, IVideoInputData, IVideoData, IVideoDecoder, ILeafPaint } from '@leafer-ui/interface'\nimport { Image, registerUI, dataProcessor, useModule } from '@leafer-ui/draw'\n\nimport { VideoData } from './data/VideoData'\nimport { PaintVideo } from './PaintVideo'\n\n\n@useModule(PaintVideo)\n@registerUI()\nexport class Video<TInputData = IVideoInputData> extends Image<TInputData> implements IVideo {\n\n public get __tag() { return 'Video' }\n\n @dataProcessor(VideoData)\n declare public __: IVideoData\n\n public autoplay?: boolean\n\n public muted?: boolean\n\n public loop?: boolean\n}\n\nexport interface Video {\n\n readonly playerOptions: ILeafPaint\n readonly decoder: IVideoDecoder\n\n duration: number // 总时长\n currentTime: number // 当前播放进度 (秒)\n volume: number // 音量 0 ~1 \n\n readonly paused: boolean\n readonly ended: boolean // 是否播放结束\n\n togglePlay(): void\n play(): void\n pause(): void\n stop(): void\n}"],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","SuppressedError","VideoDecoder","currentTime","this","decoder","time","video","targetTime","MathHelper","within","duration","volume","targetVolume","muted","paused","ended","register","type","Decoder","force","decoderMap","load","play","pause","render","canvas","x","y","width","height","leaf","playOptions","_imageScaleX","_imageScaleY","loop","drawImage","forceRender","destroyDecoder","src","close","VideoData","ImageData","__urlType","PaintVideo","playerOptions","fill","element","__","isArray","find","item","image","view","constructor","togglePlay","stop","nowIndex","waitVideoFrameReady","requestVideoFrameCallback","readyState","HTMLMediaElement","HAVE_CURRENT_DATA","addEventListener","once","Video","Image","__tag","dataProcessor","prototype","useModule","registerUI","Plugin","add","PaintImage","paint","film","Creator","options","LeaferVideo","Resource","loadVideo","format","config","url","set","imageScaleX","imageScaleY","Platform","origin","_crossOrigin","_leaferVideo","document","createElement","playsInline","crossOrigin","createVideoElement","videoWidth","videoHeight","waitVideoMetadata"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"video.min.cjs","sources":["../../../../../node_modules/.pnpm/@rollup+plugin-typescript@11.1.6_rollup@4.44.2_tslib@2.8.1_typescript@5.8.3/node_modules/tslib/tslib.es6.js","../../../../../../src/in/packages/video/src/VideoDecoder.ts","../../../../../../src/in/packages/video/src/data/VideoData.ts","../../../../../../src/in/packages/video/src/PaintVideo.ts","../../../../../../src/in/packages/video/src/index.ts","../../../../../../src/in/packages/video/src/Video.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import { MathHelper } from '@leafer-ui/draw'\nimport { ICanvasContext2D, IVideoDecoder, IVideoFileType, ILeaf, IVideoPlayOptions } from '@leafer-ui/interface'\n\n\ninterface IVideoDecoderMap {\n [name: string]: { Decoder: any, force?: boolean }\n}\n\nexport class VideoDecoder implements IVideoDecoder {\n\n public width: number // 宽度\n public height: number // 高度\n\n public duration: number\n\n public get currentTime(): number { // 获取当前播放进度 (秒)\n const video = this.decoder\n return video.currentTime\n }\n\n public set currentTime(time: number) { // 设置播放进度\n const video = this.decoder\n const targetTime = MathHelper.within(time, 0, this.duration)\n video.currentTime = targetTime\n }\n\n public get volume(): number { // 获取当前音量 (0 ~ 1)\n const video = this.decoder\n return video.volume\n }\n\n public set volume(volume: number) { // 设置音量 (0 ~ 1)\n const video = this.decoder\n const targetVolume = MathHelper.within(volume, 0, 1)\n video.volume = targetVolume\n if (targetVolume > 0 && video.muted) video.muted = false // 如果音量大于 0,确保解除静音状态\n }\n\n public get paused(): boolean {\n const video = this.decoder\n return video.paused\n }\n\n public get ended(): boolean {\n const video = this.decoder\n return video.ended\n }\n\n public loop: number // 循环次数,为0表示无限循环\n\n public decoder: HTMLVideoElement // 解码器\n\n // 缓冲画布\n public bufferCanvas?: any\n public bufferContext?: ICanvasContext2D\n\n static decoderMap: IVideoDecoderMap = {}\n\n static register(type: IVideoFileType, Decoder: any, force?: boolean): void {\n VideoDecoder.decoderMap[type] = { Decoder, force }\n }\n\n public load(): Promise<void> {\n return undefined\n }\n\n public play(): void {\n const video = this.decoder\n video.play()\n }\n\n public pause(): void {\n const video = this.decoder\n video.pause()\n }\n\n\n public render(canvas: ICanvasContext2D, x: number, y: number, width: number, height: number, leaf: ILeaf, playOptions: IVideoPlayOptions, _imageScaleX: number, _imageScaleY: number): void {\n let { paused } = playOptions\n\n const video = this.decoder\n if (video.ended) {\n video.pause()\n playOptions.paused = true\n playOptions.loop = (playOptions.loop as number || 0) + 1\n }\n\n if (paused === false && video.paused) {\n this.play()\n } else if (paused === true && !video.paused) {\n this.pause()\n } else {\n playOptions.paused = video.paused\n }\n\n // 仅在视频处于播放状态,且有实际数据更新时进行绘制\n canvas.drawImage(video, x, y, width, height)\n\n if (!video.paused) leaf.forceRender() // 防止停掉\n }\n\n\n public destroyDecoder(): void {\n const video = this.decoder\n if (video) {\n\n video.pause()\n video.src = ''\n video.load()\n this.decoder = null\n }\n }\n\n public close(): void {\n this.destroyDecoder()\n }\n\n}\n","import { IMultimediaType } from '@leafer-ui/interface'\nimport { ImageData } from '@leafer-ui/draw'\n\n\nexport class VideoData extends ImageData {\n\n public get __urlType(): IMultimediaType { return 'video' }\n\n}","import { ILeafPaint, IVideoDecoder, IUI } from '@leafer-ui/interface'\nimport { isArray } from '@leafer-ui/draw'\n\nexport class PaintVideo {\n\n public element: IUI\n\n public get playerOptions(): ILeafPaint { const { fill } = (this.element || this as any).__; return isArray(fill) && fill.find(item => item.type === 'video') }\n\n public get decoder(): IVideoDecoder { const { playerOptions } = this; return playerOptions && playerOptions.image && playerOptions.image.view }\n\n public get duration(): number { // 获取当前播放进度 (秒)\n const video = this.decoder\n return video && video.duration\n }\n\n public get currentTime(): number { // 获取当前播放进度 (秒)\n const video = this.decoder\n return video && video.currentTime\n }\n\n public set currentTime(time: number) { // 设置播放进度\n const video = this.decoder\n if (video) {\n video.currentTime = time\n video.decoder.addEventListener('seeked', () => (this.element || this as any as IUI).forceRender(), { once: true }) // 需要强制更新一下元素\n }\n }\n\n public get volume(): number { // 获取当前音量 (0 ~ 1)\n const video = this.decoder\n return video && video.volume\n }\n\n public set volume(volume: number) { // 设置音量 (0 ~ 1)\n const video = this.decoder\n if (video) video.volume = volume\n }\n\n public get paused(): boolean {\n const video = this.decoder\n return video && video.paused\n }\n\n public get ended(): boolean {\n const video = this.decoder\n return video && video.ended\n }\n\n\n constructor(element: IUI) {\n this.element = element\n }\n\n\n public togglePlay(): void {\n const { playerOptions } = this\n if (playerOptions) {\n if (playerOptions.paused !== false) this.play()\n else this.pause()\n }\n }\n\n public play(): void {\n const { playerOptions } = this\n if (playerOptions && playerOptions.paused !== false) {\n playerOptions.paused = false;\n (this.element || this as any as IUI).forceRender()\n }\n }\n\n public pause(): void {\n const { playerOptions } = this\n if (playerOptions) {\n playerOptions.paused = true\n this.decoder.pause()\n }\n }\n\n public stop(): void {\n const { playerOptions } = this\n if (playerOptions) {\n playerOptions.nowIndex = 0\n this.currentTime = 0\n this.pause()\n }\n }\n}\n","import { LeaferVideo, Platform, Creator, PaintImage, Resource, Plugin, isObject } from '@leafer-ui/draw'\nimport { ILeaferVideo, ILeaferVideoConfig, IImageCrossOrigin, ILeaf, ILeafPaint, IVideoFileType } from '@leafer-ui/interface'\n\nimport { VideoDecoder } from './VideoDecoder'\n\nexport { Video } from './Video'\nexport { VideoData } from './data/VideoData'\nexport { VideoDecoder } from './VideoDecoder'\nexport { PaintVideo } from './PaintVideo'\n\n\nPlugin.add('video')\n\n\nPaintImage.video = function (paint: ILeafPaint, oldPaint?: ILeafPaint): void {\n paint.film = true\n paint.nowIndex = 0\n if (isObject(oldPaint)) {\n paint.paused = oldPaint.paused\n paint.loop = oldPaint.loop\n }\n}\n\nCreator.video = function (options?: ILeaferVideoConfig): ILeaferVideo {\n return new LeaferVideo(options)\n}\n\nResource.loadVideo = function (key: string, format?: IVideoFileType): Promise<ILeaferVideo> {\n return new Promise((resolve, reject) => {\n const config: ILeaferVideoConfig = { url: key }\n if (format) config.format = format\n const video = Creator.video(config)\n Resource.set(key, video)\n video.load(() => resolve(video), (e: any) => reject(e))\n })\n}\n\nLeaferVideo.prototype.render = function (canvas: any, x: number, y: number, width: number, height: number, leaf: ILeaf, paint: any, imageScaleX: number, imageScaleY: number): void {\n this.view.render(canvas, x, y, width, height, leaf, paint, imageScaleX, imageScaleY)\n}\n\n\nPlatform.origin.loadVideo = async function (url: string, _crossOrigin?: IImageCrossOrigin, _leaferVideo?: ILeaferVideo): Promise<any> {\n //const buffer = await Platform.origin.loadContent(url, 'arrayBuffer')\n\n // let ext = getFileExt(url) // 获取文件后缀名\n\n // if (!ext) {\n // if (leaferVideo) ext = leaferVideo.config.format\n // if (!ext) ext = 'gif'\n // }\n\n // const mimeType = FileHelper.mimeType(ext)\n const video = createVideoElement(url)\n\n const decoder = new VideoDecoder()\n\n const { width, height, duration } = await waitVideoMetadata(video)\n decoder.decoder = video\n decoder.width = width\n decoder.height = height\n decoder.duration = duration\n\n await waitVideoFrameReady(video)\n\n return decoder\n}\n\n/**\n * 创建并配置一个隐藏的 HTMLVideoElement\n */\nfunction createVideoElement(url: string, muted = false, loop = false): HTMLVideoElement {\n const video = document.createElement('video')\n video.src = url\n video.muted = muted\n video.loop = loop\n\n // 必须设置 playsInline 保证在移动端浏览器内联播放,而不是弹窗全屏\n video.playsInline = true\n //video.webkitPlaysInline = true\n\n // 允许跨域(如果视频托管在 CDN,Canvas 绘制需要此属性避免 Canvas 污染/报错)\n video.crossOrigin = 'anonymous'\n\n return video\n}\n\n/**\n * 等待视频元数据加载完毕,返回视频的尺寸与时长信息\n */\nfunction waitVideoMetadata(video: HTMLVideoElement): Promise<{ width: number; height: number; duration: number }> {\n return new Promise((resolve) => {\n if (video.readyState >= 1) { // HAVE_METADATA 及以上\n resolve({\n width: video.videoWidth,\n height: video.videoHeight,\n duration: video.duration\n })\n } else {\n video.addEventListener('loadedmetadata', () => {\n resolve({\n width: video.videoWidth,\n height: video.videoHeight,\n duration: video.duration\n })\n }, { once: true })\n }\n })\n}\n\n/**\n * 等待视频首帧可绘制到 Canvas\n */\nexport function waitVideoFrameReady(video: HTMLVideoElement): Promise<void> {\n return new Promise((resolve) => {\n if ('requestVideoFrameCallback' in video) {\n video.requestVideoFrameCallback(() => resolve())\n return\n }\n\n if ((video as any).readyState >= HTMLMediaElement.HAVE_CURRENT_DATA) {\n resolve()\n return\n }\n\n (video as any).addEventListener('loadeddata', () => resolve(), {\n once: true\n })\n })\n}","import { IVideo, IVideoInputData, IVideoData, IVideoDecoder, ILeafPaint } from '@leafer-ui/interface'\nimport { Image, registerUI, dataProcessor, useModule } from '@leafer-ui/draw'\n\nimport { VideoData } from './data/VideoData'\nimport { PaintVideo } from './PaintVideo'\n\n\n@useModule(PaintVideo)\n@registerUI()\nexport class Video<TInputData = IVideoInputData> extends Image<TInputData> implements IVideo {\n\n public get __tag() { return 'Video' }\n\n @dataProcessor(VideoData)\n declare public __: IVideoData\n\n public autoplay?: boolean\n\n public muted?: boolean\n\n public loop?: boolean\n}\n\nexport interface Video {\n\n readonly playerOptions: ILeafPaint\n readonly decoder: IVideoDecoder\n\n duration: number // 总时长\n currentTime: number // 当前播放进度 (秒)\n volume: number // 音量 0 ~1 \n\n readonly paused: boolean\n readonly ended: boolean // 是否播放结束\n\n togglePlay(): void\n play(): void\n pause(): void\n stop(): void\n}"],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","SuppressedError","VideoDecoder","currentTime","this","decoder","time","video","targetTime","MathHelper","within","duration","volume","targetVolume","muted","paused","ended","register","type","Decoder","force","decoderMap","load","play","pause","render","canvas","x","y","width","height","leaf","playOptions","_imageScaleX","_imageScaleY","loop","drawImage","forceRender","destroyDecoder","src","close","VideoData","ImageData","__urlType","PaintVideo","playerOptions","fill","element","__","isArray","find","item","image","view","addEventListener","once","constructor","togglePlay","stop","nowIndex","waitVideoFrameReady","requestVideoFrameCallback","readyState","HTMLMediaElement","HAVE_CURRENT_DATA","Video","Image","__tag","dataProcessor","prototype","useModule","registerUI","Plugin","add","PaintImage","paint","oldPaint","film","isObject","Creator","options","LeaferVideo","Resource","loadVideo","format","config","url","set","imageScaleX","imageScaleY","Platform","origin","_crossOrigin","_leaferVideo","document","createElement","playsInline","crossOrigin","createVideoElement","videoWidth","videoHeight","waitVideoMetadata"],"mappings":"8CAsDO,SAASA,EAAWC,EAAYC,EAAQC,EAAKC,GAChD,IAA2HC,EAAvHC,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOM,OAAOC,yBAAyBT,EAAQC,GAAOC,EACrH,GAAuB,iBAAZQ,SAAoD,mBAArBA,QAAQC,SAAyBJ,EAAIG,QAAQC,SAASZ,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIU,EAAIb,EAAWO,OAAS,EAAGM,GAAK,EAAGA,KAAST,EAAIJ,EAAWa,MAAIL,GAAKH,EAAI,EAAID,EAAEI,GAAKH,EAAI,EAAID,EAAEH,EAAQC,EAAKM,GAAKJ,EAAEH,EAAQC,KAASM,GAChJ,OAAOH,EAAI,GAAKG,GAAKC,OAAOK,eAAeb,EAAQC,EAAKM,GAAIA,CAChE,CAuDO,SAASO,EAAUC,EAASC,EAAYC,EAAGC,GAE9C,OAAO,IAAKD,IAAMA,EAAIE,UAAU,SAAUC,EAASC,GAC/C,SAASC,EAAUC,GAAS,IAAMC,EAAKN,EAAUO,KAAKF,GAAS,CAAE,MAAOG,GAAKL,EAAOK,EAAI,CAAE,CAC1F,SAASC,EAASJ,GAAS,IAAMC,EAAKN,EAAiB,MAAEK,GAAS,CAAE,MAAOG,GAAKL,EAAOK,EAAI,CAAE,CAC7F,SAASF,EAAKI,GAJlB,IAAeL,EAIaK,EAAOC,KAAOT,EAAQQ,EAAOL,QAJ1CA,EAIyDK,EAAOL,MAJhDA,aAAiBN,EAAIM,EAAQ,IAAIN,EAAE,SAAUG,GAAWA,EAAQG,EAAQ,IAIjBO,KAAKR,EAAWK,EAAW,CAC7GH,GAAMN,EAAYA,EAAUa,MAAMhB,EAASC,GAAc,KAAKS,OAClE,EACJ,CA8MkD,mBAApBO,iBAAiCA,sBChUlDC,EAOT,eAAWC,GAEP,OADcC,KAAKC,QACNF,WACjB,CAEA,eAAWA,CAAYG,GACnB,MAAMC,EAAQH,KAAKC,QACbG,EAAaC,EAAAA,WAAWC,OAAOJ,EAAM,EAAGF,KAAKO,UACnDJ,EAAMJ,YAAcK,CACxB,CAEA,UAAWI,GAEP,OADcR,KAAKC,QACNO,MACjB,CAEA,UAAWA,CAAOA,GACd,MAAML,EAAQH,KAAKC,QACbQ,EAAeJ,EAAAA,WAAWC,OAAOE,EAAQ,EAAG,GAClDL,EAAMK,OAASC,EACXA,EAAe,GAAKN,EAAMO,QAAOP,EAAMO,OAAQ,EACvD,CAEA,UAAWC,GAEP,OADcX,KAAKC,QACNU,MACjB,CAEA,SAAWC,GAEP,OADcZ,KAAKC,QACNW,KACjB,CAYA,eAAOC,CAASC,EAAsBC,EAAcC,GAChDlB,EAAamB,WAAWH,GAAQ,CAAEC,UAASC,QAC/C,CAEO,IAAAE,GAEP,CAEO,IAAAC,GACWnB,KAAKC,QACbkB,MACV,CAEO,KAAAC,GACWpB,KAAKC,QACbmB,OACV,CAGO,MAAAC,CAAOC,EAA0BC,EAAWC,EAAWC,EAAeC,EAAgBC,EAAaC,EAAgCC,EAAsBC,GAC5J,IAAInB,OAAEA,GAAWiB,EAEjB,MAAMzB,EAAQH,KAAKC,QACfE,EAAMS,QACNT,EAAMiB,QACNQ,EAAYjB,QAAS,EACrBiB,EAAYG,MAAQH,EAAYG,MAAkB,GAAK,IAG5C,IAAXpB,GAAoBR,EAAMQ,OAC1BX,KAAKmB,QACa,IAAXR,GAAoBR,EAAMQ,OAGjCiB,EAAYjB,OAASR,EAAMQ,OAF3BX,KAAKoB,QAMTE,EAAOU,UAAU7B,EAAOoB,EAAGC,EAAGC,EAAOC,GAEhCvB,EAAMQ,QAAQgB,EAAKM,aAC5B,CAGO,cAAAC,GACH,MAAM/B,EAAQH,KAAKC,QACfE,IAEAA,EAAMiB,QACNjB,EAAMgC,IAAM,GACZhC,EAAMe,OACNlB,KAAKC,QAAU,KAEvB,CAEO,KAAAmC,GACHpC,KAAKkC,gBACT,EA3DOpC,EAAAmB,WAA+B,CAAA,ECpDpC,MAAOoB,UAAkBC,EAAAA,UAE3B,aAAWC,GAA+B,MAAO,OAAQ,QCHhDC,EAIT,iBAAWC,GAA8B,MAAMC,KAAEA,IAAU1C,KAAK2C,SAAW3C,MAAa4C,GAAI,OAAOC,EAAAA,QAAQH,IAASA,EAAKI,KAAKC,GAAsB,UAAdA,EAAKjC,KAAkB,CAE7J,WAAWb,GAA2B,MAAMwC,cAAEA,GAAkBzC,KAAM,OAAOyC,GAAiBA,EAAcO,OAASP,EAAcO,MAAMC,IAAK,CAE9I,YAAW1C,GACP,MAAMJ,EAAQH,KAAKC,QACnB,OAAOE,GAASA,EAAMI,QAC1B,CAEA,eAAWR,GACP,MAAMI,EAAQH,KAAKC,QACnB,OAAOE,GAASA,EAAMJ,WAC1B,CAEA,eAAWA,CAAYG,GACnB,MAAMC,EAAQH,KAAKC,QACfE,IACAA,EAAMJ,YAAcG,EACpBC,EAAMF,QAAQiD,iBAAiB,SAAU,KAAOlD,KAAK2C,SAAW3C,MAAoBiC,cAAe,CAAEkB,MAAM,IAEnH,CAEA,UAAW3C,GACP,MAAML,EAAQH,KAAKC,QACnB,OAAOE,GAASA,EAAMK,MAC1B,CAEA,UAAWA,CAAOA,GACd,MAAML,EAAQH,KAAKC,QACfE,IAAOA,EAAMK,OAASA,EAC9B,CAEA,UAAWG,GACP,MAAMR,EAAQH,KAAKC,QACnB,OAAOE,GAASA,EAAMQ,MAC1B,CAEA,SAAWC,GACP,MAAMT,EAAQH,KAAKC,QACnB,OAAOE,GAASA,EAAMS,KAC1B,CAGA,WAAAwC,CAAYT,GACR3C,KAAK2C,QAAUA,CACnB,CAGO,UAAAU,GACH,MAAMZ,cAAEA,GAAkBzC,KACtByC,KAC6B,IAAzBA,EAAc9B,OAAkBX,KAAKmB,OACpCnB,KAAKoB,QAElB,CAEO,IAAAD,GACH,MAAMsB,cAAEA,GAAkBzC,KACtByC,IAA0C,IAAzBA,EAAc9B,SAC/B8B,EAAc9B,QAAS,GACtBX,KAAK2C,SAAW3C,MAAoBiC,cAE7C,CAEO,KAAAb,GACH,MAAMqB,cAAEA,GAAkBzC,KACtByC,IACAA,EAAc9B,QAAS,EACvBX,KAAKC,QAAQmB,QAErB,CAEO,IAAAkC,GACH,MAAMb,cAAEA,GAAkBzC,KACtByC,IACAA,EAAcc,SAAW,EACzBvD,KAAKD,YAAc,EACnBC,KAAKoB,QAEb,EC2BE,SAAUoC,EAAoBrD,GAChC,OAAO,IAAInB,QAASC,IACZ,8BAA+BkB,EAC/BA,EAAMsD,0BAA0B,IAAMxE,KAIrCkB,EAAcuD,YAAcC,iBAAiBC,kBAC9C3E,IAIHkB,EAAc+C,iBAAiB,aAAc,IAAMjE,IAAW,CAC3DkE,MAAM,KAGlB,CCxHaU,QAAAA,MAAN,cAAkDC,QAErD,SAAWC,GAAU,MAAO,OAAQ,GAGrBpG,EAAA,CADdqG,EAAAA,cAAc3B,IACcwB,cAAAI,UAAA,UAAA,GALpBJ,QAAAA,MAAKlG,EAAA,CAFjBuG,EAAAA,UAAU1B,GACV2B,EAAAA,cACYN,eDEbO,EAAAA,OAAOC,IAAI,SAGXC,EAAAA,WAAWnE,MAAQ,SAAUoE,EAAmBC,GAC5CD,EAAME,MAAO,EACbF,EAAMhB,SAAW,EACbmB,EAAAA,SAASF,KACTD,EAAM5D,OAAS6D,EAAS7D,OACxB4D,EAAMxC,KAAOyC,EAASzC,KAE9B,EAEA4C,EAAAA,QAAQxE,MAAQ,SAAUyE,GACtB,OAAO,IAAIC,EAAAA,YAAYD,EAC3B,EAEAE,EAAAA,SAASC,UAAY,SAAUjH,EAAakH,GACxC,OAAO,IAAIhG,QAAQ,CAACC,EAASC,KACzB,MAAM+F,EAA6B,CAAEC,IAAKpH,GACtCkH,IAAQC,EAAOD,OAASA,GAC5B,MAAM7E,EAAQwE,EAAAA,QAAQxE,MAAM8E,GAC5BH,WAASK,IAAIrH,EAAKqC,GAClBA,EAAMe,KAAK,IAAMjC,EAAQkB,GAASZ,GAAWL,EAAOK,KAE5D,EAEAsF,EAAAA,YAAYZ,UAAU5C,OAAS,SAAUC,EAAaC,EAAWC,EAAWC,EAAeC,EAAgBC,EAAa4C,EAAYa,EAAqBC,GACrJrF,KAAKiD,KAAK5B,OAAOC,EAAQC,EAAGC,EAAGC,EAAOC,EAAQC,EAAM4C,EAAOa,EAAaC,EAC5E,EAGAC,EAAAA,SAASC,OAAOR,UAAY,SAAgBG,EAAaM,EAAkCC,2CAWvF,MAAMtF,EAkBV,SAA4B+E,EAAaxE,GAAQ,EAAOqB,GAAO,GAC3D,MAAM5B,EAAQuF,SAASC,cAAc,SAYrC,OAXAxF,EAAMgC,IAAM+C,EACZ/E,EAAMO,MAAQA,EACdP,EAAM4B,KAAOA,EAGb5B,EAAMyF,aAAc,EAIpBzF,EAAM0F,YAAc,YAEb1F,CACX,CAhCkB2F,CAAmBZ,GAE3BjF,EAAU,IAAIH,GAEd2B,MAAEA,EAAKC,OAAEA,EAAMnB,SAAEA,SAiC3B,SAA2BJ,GACvB,OAAO,IAAInB,QAASC,IACZkB,EAAMuD,YAAc,EACpBzE,EAAQ,CACJwC,MAAOtB,EAAM4F,WACbrE,OAAQvB,EAAM6F,YACdzF,SAAUJ,EAAMI,WAGpBJ,EAAM+C,iBAAiB,iBAAkB,KACrCjE,EAAQ,CACJwC,MAAOtB,EAAM4F,WACbrE,OAAQvB,EAAM6F,YACdzF,SAAUJ,EAAMI,YAErB,CAAE4C,MAAM,KAGvB,CAnD8C8C,CAAkB9F,GAQ5D,OAPAF,EAAQA,QAAUE,EAClBF,EAAQwB,MAAQA,EAChBxB,EAAQyB,OAASA,EACjBzB,EAAQM,SAAWA,QAEbiD,EAAoBrD,GAEnBF,CACX","x_google_ignoreList":[0]}
package/dist/video.min.js CHANGED
@@ -1,2 +1,2 @@
1
- this.LeaferIN=this.LeaferIN||{},this.LeaferIN.video=function(e,t){"use strict";function r(e,t,r,o){var d,n=arguments.length,i=n<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,r):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,o);else for(var s=e.length-1;s>=0;s--)(d=e[s])&&(i=(n<3?d(i):n>3?d(t,r,i):d(t,r))||i);return n>3&&i&&Object.defineProperty(t,r,i),i}function o(e,t,r,o){return new(r||(r=Promise))(function(d,n){function i(e){try{a(o.next(e))}catch(e){n(e)}}function s(e){try{a(o.throw(e))}catch(e){n(e)}}function a(e){var t;e.done?d(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(i,s)}a((o=o.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class d{get currentTime(){return this.decoder.currentTime}set currentTime(e){const r=this.decoder,o=t.MathHelper.within(e,0,this.duration);r.currentTime=o}get volume(){return this.decoder.volume}set volume(e){const r=this.decoder,o=t.MathHelper.within(e,0,1);r.volume=o,o>0&&r.muted&&(r.muted=!1)}get paused(){return this.decoder.paused}get ended(){return this.decoder.ended}static register(e,t,r){d.decoderMap[e]={Decoder:t,force:r}}load(){}play(){this.decoder.play()}pause(){this.decoder.pause()}render(e,t,r,o,d,n,i,s,a){let{paused:c}=i;const u=this.decoder;u.ended&&(u.pause(),i.paused=!0,i.loop=(i.loop||0)+1),!1===c&&u.paused?this.play():!0!==c||u.paused?i.paused=u.paused:this.pause(),e.drawImage(u,t,r,o,d),u.paused||n.forceRender()}destroyDecoder(){const e=this.decoder;e&&(e.pause(),e.src="",e.load(),this.decoder=null)}close(){this.destroyDecoder()}}d.decoderMap={};class n extends t.ImageData{get __urlType(){return"video"}}class i{get playerOptions(){const{fill:e}=(this.element||this).__;return t.isArray(e)&&e.find(e=>"video"===e.type)}get decoder(){const{playerOptions:e}=this;return e&&e.image&&e.image.view}get duration(){const e=this.decoder;return e&&e.duration}get currentTime(){const e=this.decoder;return e&&e.currentTime}set currentTime(e){const t=this.decoder;t&&(t.currentTime=e,(this.element||this).forceRender())}get volume(){const e=this.decoder;return e&&e.volume}set volume(e){const t=this.decoder;t&&(t.volume=e)}get paused(){const e=this.decoder;return e&&e.paused}get ended(){const e=this.decoder;return e&&e.ended}constructor(e){this.element=e}togglePlay(){const{playerOptions:e}=this;e&&(!1!==e.paused?this.play():this.pause())}play(){const{playerOptions:e}=this;e&&!1!==e.paused&&(e.paused=!1,(this.element||this).forceRender())}pause(){const{playerOptions:e}=this;e&&(e.paused=!0,this.decoder.pause())}stop(){const{playerOptions:e}=this;e&&(e.nowIndex=0,this.currentTime=0,this.pause())}}function s(e){return new Promise(t=>{"requestVideoFrameCallback"in e?e.requestVideoFrameCallback(()=>t()):e.readyState>=HTMLMediaElement.HAVE_CURRENT_DATA?t():e.addEventListener("loadeddata",()=>t(),{once:!0})})}return e.Video=class extends t.Image{get __tag(){return"Video"}},r([t.dataProcessor(n)],e.Video.prototype,"__",void 0),e.Video=r([t.useModule(i),t.registerUI()],e.Video),t.Plugin.add("video"),t.PaintImage.video=function(e){e.film=!0,e.nowIndex=0},t.Creator.video=function(e){return new t.LeaferVideo(e)},t.Resource.loadVideo=function(e,r){return new Promise((o,d)=>{const n={url:e};r&&(n.format=r);const i=t.Creator.video(n);t.Resource.set(e,i),i.load(()=>o(i),e=>d(e))})},t.LeaferVideo.prototype.render=function(e,t,r,o,d,n,i,s,a){this.view.render(e,t,r,o,d,n,i,s,a)},t.Platform.origin.loadVideo=function(e,t,r){return o(this,void 0,void 0,function*(){const t=function(e,t=!1,r=!1){const o=document.createElement("video");return o.src=e,o.muted=t,o.loop=r,o.playsInline=!0,o.crossOrigin="anonymous",o}(e),r=new d,{width:o,height:n,duration:i}=yield function(e){return new Promise(t=>{e.readyState>=1?t({width:e.videoWidth,height:e.videoHeight,duration:e.duration}):e.addEventListener("loadedmetadata",()=>{t({width:e.videoWidth,height:e.videoHeight,duration:e.duration})},{once:!0})})}(t);return r.decoder=t,r.width=o,r.height=n,r.duration=i,yield s(t),r})},e.PaintVideo=i,e.VideoData=n,e.VideoDecoder=d,e.waitVideoFrameReady=s,e}({},LeaferUI);
1
+ this.LeaferIN=this.LeaferIN||{},this.LeaferIN.video=function(e,t){"use strict";function r(e,t,r,o){var d,n=arguments.length,i=n<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,r):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,o);else for(var s=e.length-1;s>=0;s--)(d=e[s])&&(i=(n<3?d(i):n>3?d(t,r,i):d(t,r))||i);return n>3&&i&&Object.defineProperty(t,r,i),i}function o(e,t,r,o){return new(r||(r=Promise))(function(d,n){function i(e){try{a(o.next(e))}catch(e){n(e)}}function s(e){try{a(o.throw(e))}catch(e){n(e)}}function a(e){var t;e.done?d(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(i,s)}a((o=o.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class d{get currentTime(){return this.decoder.currentTime}set currentTime(e){const r=this.decoder,o=t.MathHelper.within(e,0,this.duration);r.currentTime=o}get volume(){return this.decoder.volume}set volume(e){const r=this.decoder,o=t.MathHelper.within(e,0,1);r.volume=o,o>0&&r.muted&&(r.muted=!1)}get paused(){return this.decoder.paused}get ended(){return this.decoder.ended}static register(e,t,r){d.decoderMap[e]={Decoder:t,force:r}}load(){}play(){this.decoder.play()}pause(){this.decoder.pause()}render(e,t,r,o,d,n,i,s,a){let{paused:c}=i;const u=this.decoder;u.ended&&(u.pause(),i.paused=!0,i.loop=(i.loop||0)+1),!1===c&&u.paused?this.play():!0!==c||u.paused?i.paused=u.paused:this.pause(),e.drawImage(u,t,r,o,d),u.paused||n.forceRender()}destroyDecoder(){const e=this.decoder;e&&(e.pause(),e.src="",e.load(),this.decoder=null)}close(){this.destroyDecoder()}}d.decoderMap={};class n extends t.ImageData{get __urlType(){return"video"}}class i{get playerOptions(){const{fill:e}=(this.element||this).__;return t.isArray(e)&&e.find(e=>"video"===e.type)}get decoder(){const{playerOptions:e}=this;return e&&e.image&&e.image.view}get duration(){const e=this.decoder;return e&&e.duration}get currentTime(){const e=this.decoder;return e&&e.currentTime}set currentTime(e){const t=this.decoder;t&&(t.currentTime=e,t.decoder.addEventListener("seeked",()=>(this.element||this).forceRender(),{once:!0}))}get volume(){const e=this.decoder;return e&&e.volume}set volume(e){const t=this.decoder;t&&(t.volume=e)}get paused(){const e=this.decoder;return e&&e.paused}get ended(){const e=this.decoder;return e&&e.ended}constructor(e){this.element=e}togglePlay(){const{playerOptions:e}=this;e&&(!1!==e.paused?this.play():this.pause())}play(){const{playerOptions:e}=this;e&&!1!==e.paused&&(e.paused=!1,(this.element||this).forceRender())}pause(){const{playerOptions:e}=this;e&&(e.paused=!0,this.decoder.pause())}stop(){const{playerOptions:e}=this;e&&(e.nowIndex=0,this.currentTime=0,this.pause())}}function s(e){return new Promise(t=>{"requestVideoFrameCallback"in e?e.requestVideoFrameCallback(()=>t()):e.readyState>=HTMLMediaElement.HAVE_CURRENT_DATA?t():e.addEventListener("loadeddata",()=>t(),{once:!0})})}return e.Video=class extends t.Image{get __tag(){return"Video"}},r([t.dataProcessor(n)],e.Video.prototype,"__",void 0),e.Video=r([t.useModule(i),t.registerUI()],e.Video),t.Plugin.add("video"),t.PaintImage.video=function(e,r){e.film=!0,e.nowIndex=0,t.isObject(r)&&(e.paused=r.paused,e.loop=r.loop)},t.Creator.video=function(e){return new t.LeaferVideo(e)},t.Resource.loadVideo=function(e,r){return new Promise((o,d)=>{const n={url:e};r&&(n.format=r);const i=t.Creator.video(n);t.Resource.set(e,i),i.load(()=>o(i),e=>d(e))})},t.LeaferVideo.prototype.render=function(e,t,r,o,d,n,i,s,a){this.view.render(e,t,r,o,d,n,i,s,a)},t.Platform.origin.loadVideo=function(e,t,r){return o(this,void 0,void 0,function*(){const t=function(e,t=!1,r=!1){const o=document.createElement("video");return o.src=e,o.muted=t,o.loop=r,o.playsInline=!0,o.crossOrigin="anonymous",o}(e),r=new d,{width:o,height:n,duration:i}=yield function(e){return new Promise(t=>{e.readyState>=1?t({width:e.videoWidth,height:e.videoHeight,duration:e.duration}):e.addEventListener("loadedmetadata",()=>{t({width:e.videoWidth,height:e.videoHeight,duration:e.duration})},{once:!0})})}(t);return r.decoder=t,r.width=o,r.height=n,r.duration=i,yield s(t),r})},e.PaintVideo=i,e.VideoData=n,e.VideoDecoder=d,e.waitVideoFrameReady=s,e}({},LeaferUI);
2
2
  //# sourceMappingURL=video.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"video.min.js","sources":["../../../../../node_modules/.pnpm/@rollup+plugin-typescript@11.1.6_rollup@4.44.2_tslib@2.8.1_typescript@5.8.3/node_modules/tslib/tslib.es6.js","../../../../../../src/in/packages/video/src/VideoDecoder.ts","../../../../../../src/in/packages/video/src/data/VideoData.ts","../../../../../../src/in/packages/video/src/PaintVideo.ts","../../../../../../src/in/packages/video/src/index.ts","../../../../../../src/in/packages/video/src/Video.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import { MathHelper } from '@leafer-ui/draw'\nimport { ICanvasContext2D, IVideoDecoder, IVideoFileType, ILeaf, IVideoPlayOptions } from '@leafer-ui/interface'\n\n\ninterface IVideoDecoderMap {\n [name: string]: { Decoder: any, force?: boolean }\n}\n\nexport class VideoDecoder implements IVideoDecoder {\n\n public width: number // 宽度\n public height: number // 高度\n\n public duration: number\n\n public get currentTime(): number { // 获取当前播放进度 (秒)\n const video = this.decoder\n return video.currentTime\n }\n\n public set currentTime(time: number) { // 设置播放进度\n const video = this.decoder\n const targetTime = MathHelper.within(time, 0, this.duration)\n video.currentTime = targetTime\n }\n\n public get volume(): number { // 获取当前音量 (0 ~ 1)\n const video = this.decoder\n return video.volume\n }\n\n public set volume(volume: number) { // 设置音量 (0 ~ 1)\n const video = this.decoder\n const targetVolume = MathHelper.within(volume, 0, 1)\n video.volume = targetVolume\n if (targetVolume > 0 && video.muted) video.muted = false // 如果音量大于 0,确保解除静音状态\n }\n\n public get paused(): boolean {\n const video = this.decoder\n return video.paused\n }\n\n public get ended(): boolean {\n const video = this.decoder\n return video.ended\n }\n\n public loop: number // 循环次数,为0表示无限循环\n\n public decoder: HTMLVideoElement // 解码器\n\n // 缓冲画布\n public bufferCanvas?: any\n public bufferContext?: ICanvasContext2D\n\n static decoderMap: IVideoDecoderMap = {}\n\n static register(type: IVideoFileType, Decoder: any, force?: boolean): void {\n VideoDecoder.decoderMap[type] = { Decoder, force }\n }\n\n public load(): Promise<void> {\n return undefined\n }\n\n public play(): void {\n const video = this.decoder\n video.play()\n }\n\n public pause(): void {\n const video = this.decoder\n video.pause()\n }\n\n\n public render(canvas: ICanvasContext2D, x: number, y: number, width: number, height: number, leaf: ILeaf, playOptions: IVideoPlayOptions, _imageScaleX: number, _imageScaleY: number): void {\n let { paused } = playOptions\n\n const video = this.decoder\n if (video.ended) {\n video.pause()\n playOptions.paused = true\n playOptions.loop = (playOptions.loop as number || 0) + 1\n }\n\n if (paused === false && video.paused) {\n this.play()\n } else if (paused === true && !video.paused) {\n this.pause()\n } else {\n playOptions.paused = video.paused\n }\n\n // 仅在视频处于播放状态,且有实际数据更新时进行绘制\n canvas.drawImage(video, x, y, width, height)\n\n if (!video.paused) leaf.forceRender() // 防止停掉\n }\n\n\n public destroyDecoder(): void {\n const video = this.decoder\n if (video) {\n\n video.pause()\n video.src = ''\n video.load()\n this.decoder = null\n }\n }\n\n public close(): void {\n this.destroyDecoder()\n }\n\n}\n","import { IMultimediaType } from '@leafer-ui/interface'\nimport { ImageData } from '@leafer-ui/draw'\n\n\nexport class VideoData extends ImageData {\n\n public get __urlType(): IMultimediaType { return 'video' }\n\n}","import { ILeafPaint, IVideoDecoder, IUI } from '@leafer-ui/interface'\nimport { isArray } from '@leafer-ui/draw'\n\nexport class PaintVideo {\n\n public element: IUI\n\n public get playerOptions(): ILeafPaint { const { fill } = (this.element || this as any).__; return isArray(fill) && fill.find(item => item.type === 'video') }\n\n public get decoder(): IVideoDecoder { const { playerOptions } = this; return playerOptions && playerOptions.image && playerOptions.image.view }\n\n public get duration(): number { // 获取当前播放进度 (秒)\n const video = this.decoder\n return video && video.duration\n }\n\n public get currentTime(): number { // 获取当前播放进度 (秒)\n const video = this.decoder\n return video && video.currentTime\n }\n\n public set currentTime(time: number) { // 设置播放进度\n const video = this.decoder\n if (video) {\n video.currentTime = time;\n (this.element || this as any as IUI).forceRender()// 需要强制更新一下元素\n }\n }\n\n public get volume(): number { // 获取当前音量 (0 ~ 1)\n const video = this.decoder\n return video && video.volume\n }\n\n public set volume(volume: number) { // 设置音量 (0 ~ 1)\n const video = this.decoder\n if (video) video.volume = volume\n }\n\n public get paused(): boolean {\n const video = this.decoder\n return video && video.paused\n }\n\n public get ended(): boolean {\n const video = this.decoder\n return video && video.ended\n }\n\n\n constructor(element: IUI) {\n this.element = element\n }\n\n\n public togglePlay(): void {\n const { playerOptions } = this\n if (playerOptions) {\n if (playerOptions.paused !== false) this.play()\n else this.pause()\n }\n }\n\n public play(): void {\n const { playerOptions } = this\n if (playerOptions && playerOptions.paused !== false) {\n playerOptions.paused = false;\n (this.element || this as any as IUI).forceRender()\n }\n }\n\n public pause(): void {\n const { playerOptions } = this\n if (playerOptions) {\n playerOptions.paused = true\n this.decoder.pause()\n }\n }\n\n public stop(): void {\n const { playerOptions } = this\n if (playerOptions) {\n playerOptions.nowIndex = 0\n this.currentTime = 0\n this.pause()\n }\n }\n}\n","import { LeaferVideo, Platform, Creator, PaintImage, Resource, Plugin } from '@leafer-ui/draw'\nimport { ILeaferVideo, ILeaferVideoConfig, IImageCrossOrigin, ILeaf, ILeafPaint, IVideoFileType } from '@leafer-ui/interface'\n\nimport { VideoDecoder } from './VideoDecoder'\n\nexport { Video } from './Video'\nexport { VideoData } from './data/VideoData'\nexport { VideoDecoder } from './VideoDecoder'\nexport { PaintVideo } from './PaintVideo'\n\n\nPlugin.add('video')\n\n\nPaintImage.video = function (paint: ILeafPaint): void {\n paint.film = true\n paint.nowIndex = 0\n}\n\nCreator.video = function (options?: ILeaferVideoConfig): ILeaferVideo {\n return new LeaferVideo(options)\n}\n\nResource.loadVideo = function (key: string, format?: IVideoFileType): Promise<ILeaferVideo> {\n return new Promise((resolve, reject) => {\n const config: ILeaferVideoConfig = { url: key }\n if (format) config.format = format\n const video = Creator.video(config)\n Resource.set(key, video)\n video.load(() => resolve(video), (e: any) => reject(e))\n })\n}\n\nLeaferVideo.prototype.render = function (canvas: any, x: number, y: number, width: number, height: number, leaf: ILeaf, paint: any, imageScaleX: number, imageScaleY: number): void {\n this.view.render(canvas, x, y, width, height, leaf, paint, imageScaleX, imageScaleY)\n}\n\n\nPlatform.origin.loadVideo = async function (url: string, _crossOrigin?: IImageCrossOrigin, _leaferVideo?: ILeaferVideo): Promise<any> {\n //const buffer = await Platform.origin.loadContent(url, 'arrayBuffer')\n\n // let ext = getFileExt(url) // 获取文件后缀名\n\n // if (!ext) {\n // if (leaferVideo) ext = leaferVideo.config.format\n // if (!ext) ext = 'gif'\n // }\n\n // const mimeType = FileHelper.mimeType(ext)\n const video = createVideoElement(url)\n\n const decoder = new VideoDecoder()\n\n const { width, height, duration } = await waitVideoMetadata(video)\n decoder.decoder = video\n decoder.width = width\n decoder.height = height\n decoder.duration = duration\n\n await waitVideoFrameReady(video)\n\n return decoder\n}\n\n/**\n * 创建并配置一个隐藏的 HTMLVideoElement\n */\nfunction createVideoElement(url: string, muted = false, loop = false): HTMLVideoElement {\n const video = document.createElement('video')\n video.src = url\n video.muted = muted\n video.loop = loop\n\n // 必须设置 playsInline 保证在移动端浏览器内联播放,而不是弹窗全屏\n video.playsInline = true\n //video.webkitPlaysInline = true\n\n // 允许跨域(如果视频托管在 CDN,Canvas 绘制需要此属性避免 Canvas 污染/报错)\n video.crossOrigin = 'anonymous'\n\n return video\n}\n\n/**\n * 等待视频元数据加载完毕,返回视频的尺寸与时长信息\n */\nfunction waitVideoMetadata(video: HTMLVideoElement): Promise<{ width: number; height: number; duration: number }> {\n return new Promise((resolve) => {\n if (video.readyState >= 1) { // HAVE_METADATA 及以上\n resolve({\n width: video.videoWidth,\n height: video.videoHeight,\n duration: video.duration\n })\n } else {\n video.addEventListener('loadedmetadata', () => {\n resolve({\n width: video.videoWidth,\n height: video.videoHeight,\n duration: video.duration\n })\n }, { once: true })\n }\n })\n}\n\n/**\n * 等待视频首帧可绘制到 Canvas\n */\nexport function waitVideoFrameReady(video: HTMLVideoElement): Promise<void> {\n return new Promise((resolve) => {\n if ('requestVideoFrameCallback' in video) {\n video.requestVideoFrameCallback(() => resolve())\n return\n }\n\n if ((video as any).readyState >= HTMLMediaElement.HAVE_CURRENT_DATA) {\n resolve()\n return\n }\n\n (video as any).addEventListener('loadeddata', () => resolve(), {\n once: true\n })\n })\n}","import { IVideo, IVideoInputData, IVideoData, IVideoDecoder, ILeafPaint } from '@leafer-ui/interface'\nimport { Image, registerUI, dataProcessor, useModule } from '@leafer-ui/draw'\n\nimport { VideoData } from './data/VideoData'\nimport { PaintVideo } from './PaintVideo'\n\n\n@useModule(PaintVideo)\n@registerUI()\nexport class Video<TInputData = IVideoInputData> extends Image<TInputData> implements IVideo {\n\n public get __tag() { return 'Video' }\n\n @dataProcessor(VideoData)\n declare public __: IVideoData\n\n public autoplay?: boolean\n\n public muted?: boolean\n\n public loop?: boolean\n}\n\nexport interface Video {\n\n readonly playerOptions: ILeafPaint\n readonly decoder: IVideoDecoder\n\n duration: number // 总时长\n currentTime: number // 当前播放进度 (秒)\n volume: number // 音量 0 ~1 \n\n readonly paused: boolean\n readonly ended: boolean // 是否播放结束\n\n togglePlay(): void\n play(): void\n pause(): void\n stop(): void\n}"],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","SuppressedError","VideoDecoder","currentTime","this","decoder","time","video","targetTime","MathHelper","within","duration","volume","targetVolume","muted","paused","ended","register","type","Decoder","force","decoderMap","load","play","pause","render","canvas","x","y","width","height","leaf","playOptions","_imageScaleX","_imageScaleY","loop","drawImage","forceRender","destroyDecoder","src","close","VideoData","ImageData","__urlType","PaintVideo","playerOptions","fill","element","__","isArray","find","item","image","view","constructor","togglePlay","stop","nowIndex","waitVideoFrameReady","requestVideoFrameCallback","readyState","HTMLMediaElement","HAVE_CURRENT_DATA","addEventListener","once","Video","Image","__tag","dataProcessor","prototype","useModule","registerUI","Plugin","add","PaintImage","paint","film","Creator","options","LeaferVideo","Resource","loadVideo","format","config","url","set","imageScaleX","imageScaleY","Platform","origin","_crossOrigin","_leaferVideo","document","createElement","playsInline","crossOrigin","createVideoElement","videoWidth","videoHeight","waitVideoMetadata"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"video.min.js","sources":["../../../../../node_modules/.pnpm/@rollup+plugin-typescript@11.1.6_rollup@4.44.2_tslib@2.8.1_typescript@5.8.3/node_modules/tslib/tslib.es6.js","../../../../../../src/in/packages/video/src/VideoDecoder.ts","../../../../../../src/in/packages/video/src/data/VideoData.ts","../../../../../../src/in/packages/video/src/PaintVideo.ts","../../../../../../src/in/packages/video/src/index.ts","../../../../../../src/in/packages/video/src/Video.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import { MathHelper } from '@leafer-ui/draw'\nimport { ICanvasContext2D, IVideoDecoder, IVideoFileType, ILeaf, IVideoPlayOptions } from '@leafer-ui/interface'\n\n\ninterface IVideoDecoderMap {\n [name: string]: { Decoder: any, force?: boolean }\n}\n\nexport class VideoDecoder implements IVideoDecoder {\n\n public width: number // 宽度\n public height: number // 高度\n\n public duration: number\n\n public get currentTime(): number { // 获取当前播放进度 (秒)\n const video = this.decoder\n return video.currentTime\n }\n\n public set currentTime(time: number) { // 设置播放进度\n const video = this.decoder\n const targetTime = MathHelper.within(time, 0, this.duration)\n video.currentTime = targetTime\n }\n\n public get volume(): number { // 获取当前音量 (0 ~ 1)\n const video = this.decoder\n return video.volume\n }\n\n public set volume(volume: number) { // 设置音量 (0 ~ 1)\n const video = this.decoder\n const targetVolume = MathHelper.within(volume, 0, 1)\n video.volume = targetVolume\n if (targetVolume > 0 && video.muted) video.muted = false // 如果音量大于 0,确保解除静音状态\n }\n\n public get paused(): boolean {\n const video = this.decoder\n return video.paused\n }\n\n public get ended(): boolean {\n const video = this.decoder\n return video.ended\n }\n\n public loop: number // 循环次数,为0表示无限循环\n\n public decoder: HTMLVideoElement // 解码器\n\n // 缓冲画布\n public bufferCanvas?: any\n public bufferContext?: ICanvasContext2D\n\n static decoderMap: IVideoDecoderMap = {}\n\n static register(type: IVideoFileType, Decoder: any, force?: boolean): void {\n VideoDecoder.decoderMap[type] = { Decoder, force }\n }\n\n public load(): Promise<void> {\n return undefined\n }\n\n public play(): void {\n const video = this.decoder\n video.play()\n }\n\n public pause(): void {\n const video = this.decoder\n video.pause()\n }\n\n\n public render(canvas: ICanvasContext2D, x: number, y: number, width: number, height: number, leaf: ILeaf, playOptions: IVideoPlayOptions, _imageScaleX: number, _imageScaleY: number): void {\n let { paused } = playOptions\n\n const video = this.decoder\n if (video.ended) {\n video.pause()\n playOptions.paused = true\n playOptions.loop = (playOptions.loop as number || 0) + 1\n }\n\n if (paused === false && video.paused) {\n this.play()\n } else if (paused === true && !video.paused) {\n this.pause()\n } else {\n playOptions.paused = video.paused\n }\n\n // 仅在视频处于播放状态,且有实际数据更新时进行绘制\n canvas.drawImage(video, x, y, width, height)\n\n if (!video.paused) leaf.forceRender() // 防止停掉\n }\n\n\n public destroyDecoder(): void {\n const video = this.decoder\n if (video) {\n\n video.pause()\n video.src = ''\n video.load()\n this.decoder = null\n }\n }\n\n public close(): void {\n this.destroyDecoder()\n }\n\n}\n","import { IMultimediaType } from '@leafer-ui/interface'\nimport { ImageData } from '@leafer-ui/draw'\n\n\nexport class VideoData extends ImageData {\n\n public get __urlType(): IMultimediaType { return 'video' }\n\n}","import { ILeafPaint, IVideoDecoder, IUI } from '@leafer-ui/interface'\nimport { isArray } from '@leafer-ui/draw'\n\nexport class PaintVideo {\n\n public element: IUI\n\n public get playerOptions(): ILeafPaint { const { fill } = (this.element || this as any).__; return isArray(fill) && fill.find(item => item.type === 'video') }\n\n public get decoder(): IVideoDecoder { const { playerOptions } = this; return playerOptions && playerOptions.image && playerOptions.image.view }\n\n public get duration(): number { // 获取当前播放进度 (秒)\n const video = this.decoder\n return video && video.duration\n }\n\n public get currentTime(): number { // 获取当前播放进度 (秒)\n const video = this.decoder\n return video && video.currentTime\n }\n\n public set currentTime(time: number) { // 设置播放进度\n const video = this.decoder\n if (video) {\n video.currentTime = time\n video.decoder.addEventListener('seeked', () => (this.element || this as any as IUI).forceRender(), { once: true }) // 需要强制更新一下元素\n }\n }\n\n public get volume(): number { // 获取当前音量 (0 ~ 1)\n const video = this.decoder\n return video && video.volume\n }\n\n public set volume(volume: number) { // 设置音量 (0 ~ 1)\n const video = this.decoder\n if (video) video.volume = volume\n }\n\n public get paused(): boolean {\n const video = this.decoder\n return video && video.paused\n }\n\n public get ended(): boolean {\n const video = this.decoder\n return video && video.ended\n }\n\n\n constructor(element: IUI) {\n this.element = element\n }\n\n\n public togglePlay(): void {\n const { playerOptions } = this\n if (playerOptions) {\n if (playerOptions.paused !== false) this.play()\n else this.pause()\n }\n }\n\n public play(): void {\n const { playerOptions } = this\n if (playerOptions && playerOptions.paused !== false) {\n playerOptions.paused = false;\n (this.element || this as any as IUI).forceRender()\n }\n }\n\n public pause(): void {\n const { playerOptions } = this\n if (playerOptions) {\n playerOptions.paused = true\n this.decoder.pause()\n }\n }\n\n public stop(): void {\n const { playerOptions } = this\n if (playerOptions) {\n playerOptions.nowIndex = 0\n this.currentTime = 0\n this.pause()\n }\n }\n}\n","import { LeaferVideo, Platform, Creator, PaintImage, Resource, Plugin, isObject } from '@leafer-ui/draw'\nimport { ILeaferVideo, ILeaferVideoConfig, IImageCrossOrigin, ILeaf, ILeafPaint, IVideoFileType } from '@leafer-ui/interface'\n\nimport { VideoDecoder } from './VideoDecoder'\n\nexport { Video } from './Video'\nexport { VideoData } from './data/VideoData'\nexport { VideoDecoder } from './VideoDecoder'\nexport { PaintVideo } from './PaintVideo'\n\n\nPlugin.add('video')\n\n\nPaintImage.video = function (paint: ILeafPaint, oldPaint?: ILeafPaint): void {\n paint.film = true\n paint.nowIndex = 0\n if (isObject(oldPaint)) {\n paint.paused = oldPaint.paused\n paint.loop = oldPaint.loop\n }\n}\n\nCreator.video = function (options?: ILeaferVideoConfig): ILeaferVideo {\n return new LeaferVideo(options)\n}\n\nResource.loadVideo = function (key: string, format?: IVideoFileType): Promise<ILeaferVideo> {\n return new Promise((resolve, reject) => {\n const config: ILeaferVideoConfig = { url: key }\n if (format) config.format = format\n const video = Creator.video(config)\n Resource.set(key, video)\n video.load(() => resolve(video), (e: any) => reject(e))\n })\n}\n\nLeaferVideo.prototype.render = function (canvas: any, x: number, y: number, width: number, height: number, leaf: ILeaf, paint: any, imageScaleX: number, imageScaleY: number): void {\n this.view.render(canvas, x, y, width, height, leaf, paint, imageScaleX, imageScaleY)\n}\n\n\nPlatform.origin.loadVideo = async function (url: string, _crossOrigin?: IImageCrossOrigin, _leaferVideo?: ILeaferVideo): Promise<any> {\n //const buffer = await Platform.origin.loadContent(url, 'arrayBuffer')\n\n // let ext = getFileExt(url) // 获取文件后缀名\n\n // if (!ext) {\n // if (leaferVideo) ext = leaferVideo.config.format\n // if (!ext) ext = 'gif'\n // }\n\n // const mimeType = FileHelper.mimeType(ext)\n const video = createVideoElement(url)\n\n const decoder = new VideoDecoder()\n\n const { width, height, duration } = await waitVideoMetadata(video)\n decoder.decoder = video\n decoder.width = width\n decoder.height = height\n decoder.duration = duration\n\n await waitVideoFrameReady(video)\n\n return decoder\n}\n\n/**\n * 创建并配置一个隐藏的 HTMLVideoElement\n */\nfunction createVideoElement(url: string, muted = false, loop = false): HTMLVideoElement {\n const video = document.createElement('video')\n video.src = url\n video.muted = muted\n video.loop = loop\n\n // 必须设置 playsInline 保证在移动端浏览器内联播放,而不是弹窗全屏\n video.playsInline = true\n //video.webkitPlaysInline = true\n\n // 允许跨域(如果视频托管在 CDN,Canvas 绘制需要此属性避免 Canvas 污染/报错)\n video.crossOrigin = 'anonymous'\n\n return video\n}\n\n/**\n * 等待视频元数据加载完毕,返回视频的尺寸与时长信息\n */\nfunction waitVideoMetadata(video: HTMLVideoElement): Promise<{ width: number; height: number; duration: number }> {\n return new Promise((resolve) => {\n if (video.readyState >= 1) { // HAVE_METADATA 及以上\n resolve({\n width: video.videoWidth,\n height: video.videoHeight,\n duration: video.duration\n })\n } else {\n video.addEventListener('loadedmetadata', () => {\n resolve({\n width: video.videoWidth,\n height: video.videoHeight,\n duration: video.duration\n })\n }, { once: true })\n }\n })\n}\n\n/**\n * 等待视频首帧可绘制到 Canvas\n */\nexport function waitVideoFrameReady(video: HTMLVideoElement): Promise<void> {\n return new Promise((resolve) => {\n if ('requestVideoFrameCallback' in video) {\n video.requestVideoFrameCallback(() => resolve())\n return\n }\n\n if ((video as any).readyState >= HTMLMediaElement.HAVE_CURRENT_DATA) {\n resolve()\n return\n }\n\n (video as any).addEventListener('loadeddata', () => resolve(), {\n once: true\n })\n })\n}","import { IVideo, IVideoInputData, IVideoData, IVideoDecoder, ILeafPaint } from '@leafer-ui/interface'\nimport { Image, registerUI, dataProcessor, useModule } from '@leafer-ui/draw'\n\nimport { VideoData } from './data/VideoData'\nimport { PaintVideo } from './PaintVideo'\n\n\n@useModule(PaintVideo)\n@registerUI()\nexport class Video<TInputData = IVideoInputData> extends Image<TInputData> implements IVideo {\n\n public get __tag() { return 'Video' }\n\n @dataProcessor(VideoData)\n declare public __: IVideoData\n\n public autoplay?: boolean\n\n public muted?: boolean\n\n public loop?: boolean\n}\n\nexport interface Video {\n\n readonly playerOptions: ILeafPaint\n readonly decoder: IVideoDecoder\n\n duration: number // 总时长\n currentTime: number // 当前播放进度 (秒)\n volume: number // 音量 0 ~1 \n\n readonly paused: boolean\n readonly ended: boolean // 是否播放结束\n\n togglePlay(): void\n play(): void\n pause(): void\n stop(): void\n}"],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","SuppressedError","VideoDecoder","currentTime","this","decoder","time","video","targetTime","MathHelper","within","duration","volume","targetVolume","muted","paused","ended","register","type","Decoder","force","decoderMap","load","play","pause","render","canvas","x","y","width","height","leaf","playOptions","_imageScaleX","_imageScaleY","loop","drawImage","forceRender","destroyDecoder","src","close","VideoData","ImageData","__urlType","PaintVideo","playerOptions","fill","element","__","isArray","find","item","image","view","addEventListener","once","constructor","togglePlay","stop","nowIndex","waitVideoFrameReady","requestVideoFrameCallback","readyState","HTMLMediaElement","HAVE_CURRENT_DATA","Video","Image","__tag","dataProcessor","prototype","useModule","registerUI","Plugin","add","PaintImage","paint","oldPaint","film","isObject","Creator","options","LeaferVideo","Resource","loadVideo","format","config","url","set","imageScaleX","imageScaleY","Platform","origin","_crossOrigin","_leaferVideo","document","createElement","playsInline","crossOrigin","createVideoElement","videoWidth","videoHeight","waitVideoMetadata"],"mappings":"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","x_google_ignoreList":[0]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leafer-in/video",
3
- "version": "2.3.1",
3
+ "version": "2.3.3",
4
4
  "description": "@leafer-in/video",
5
5
  "author": "Chao (Leafer) Wan",
6
6
  "license": "MIT",
@@ -14,7 +14,11 @@
14
14
  "types": "types/index.d.ts",
15
15
  "unpkg": "dist/video.min.js",
16
16
  "jsdelivr": "dist/video.min.js",
17
- "files": ["src","types","dist"],
17
+ "files": [
18
+ "src",
19
+ "types",
20
+ "dist"
21
+ ],
18
22
  "repository": {
19
23
  "type": "git",
20
24
  "url": "https://github.com/leaferjs/leafer-in.git"
package/src/PaintVideo.ts CHANGED
@@ -22,8 +22,8 @@ export class PaintVideo {
22
22
  public set currentTime(time: number) { // 设置播放进度
23
23
  const video = this.decoder
24
24
  if (video) {
25
- video.currentTime = time;
26
- (this.element || this as any as IUI).forceRender()// 需要强制更新一下元素
25
+ video.currentTime = time
26
+ video.decoder.addEventListener('seeked', () => (this.element || this as any as IUI).forceRender(), { once: true }) // 需要强制更新一下元素
27
27
  }
28
28
  }
29
29
 
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { LeaferVideo, Platform, Creator, PaintImage, Resource, Plugin } from '@leafer-ui/draw'
1
+ import { LeaferVideo, Platform, Creator, PaintImage, Resource, Plugin, isObject } from '@leafer-ui/draw'
2
2
  import { ILeaferVideo, ILeaferVideoConfig, IImageCrossOrigin, ILeaf, ILeafPaint, IVideoFileType } from '@leafer-ui/interface'
3
3
 
4
4
  import { VideoDecoder } from './VideoDecoder'
@@ -12,9 +12,13 @@ export { PaintVideo } from './PaintVideo'
12
12
  Plugin.add('video')
13
13
 
14
14
 
15
- PaintImage.video = function (paint: ILeafPaint): void {
15
+ PaintImage.video = function (paint: ILeafPaint, oldPaint?: ILeafPaint): void {
16
16
  paint.film = true
17
17
  paint.nowIndex = 0
18
+ if (isObject(oldPaint)) {
19
+ paint.paused = oldPaint.paused
20
+ paint.loop = oldPaint.loop
21
+ }
18
22
  }
19
23
 
20
24
  Creator.video = function (options?: ILeaferVideoConfig): ILeaferVideo {