lexgui 8.1.2 → 8.2.1
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/build/components/AlertDialog.d.ts +7 -7
- package/build/components/Avatar.d.ts +15 -0
- package/build/components/Counter.d.ts +9 -9
- package/build/components/Dialog.d.ts +20 -20
- package/build/components/Footer.d.ts +14 -14
- package/build/components/Menubar.d.ts +59 -59
- package/build/components/NodeTree.d.ts +26 -1
- package/build/components/Vector.d.ts +1 -0
- package/build/core/Area.d.ts +143 -143
- package/build/core/Event.d.ts +0 -20
- package/build/core/Namespace.js +1 -1
- package/build/core/Namespace.js.map +1 -1
- package/build/core/Panel.d.ts +538 -538
- package/build/extensions/AssetView.d.ts +137 -136
- package/build/extensions/AssetView.js +193 -155
- package/build/extensions/AssetView.js.map +1 -1
- package/build/extensions/Audio.js +163 -163
- package/build/extensions/Audio.js.map +1 -1
- package/build/extensions/CodeEditor.d.ts +358 -350
- package/build/extensions/CodeEditor.js +302 -270
- package/build/extensions/CodeEditor.js.map +1 -1
- package/build/extensions/DocMaker.d.ts +27 -27
- package/build/extensions/DocMaker.js +15 -11
- package/build/extensions/DocMaker.js.map +1 -1
- package/build/extensions/GraphEditor.js +2754 -2760
- package/build/extensions/GraphEditor.js.map +1 -1
- package/build/extensions/ImUi.js +227 -227
- package/build/extensions/Timeline.d.ts +668 -670
- package/build/extensions/Timeline.js +71 -79
- package/build/extensions/Timeline.js.map +1 -1
- package/build/extensions/VideoEditor.d.ts +38 -16
- package/build/extensions/VideoEditor.js +294 -180
- package/build/extensions/VideoEditor.js.map +1 -1
- package/build/extensions/index.d.ts +8 -8
- package/build/extensions/index.js +10 -10
- package/build/index.all.d.ts +2 -2
- package/build/index.css.d.ts +3 -4
- package/build/index.d.ts +57 -56
- package/build/lexgui.all.js +1877 -1520
- package/build/lexgui.all.js.map +1 -1
- package/build/lexgui.all.min.js +1 -1
- package/build/lexgui.all.module.js +1875 -1516
- package/build/lexgui.all.module.js.map +1 -1
- package/build/lexgui.all.module.min.js +1 -1
- package/build/lexgui.css +6123 -5556
- package/build/lexgui.js +997 -814
- package/build/lexgui.js.map +1 -1
- package/build/lexgui.min.css +2 -3
- package/build/lexgui.min.js +1 -1
- package/build/lexgui.module.js +995 -810
- package/build/lexgui.module.js.map +1 -1
- package/build/lexgui.module.min.js +1 -1
- package/changelog.md +65 -2
- package/demo.js +167 -65
- package/examples/all-components.html +40 -55
- package/examples/asset-view.html +27 -0
- package/examples/code-editor.html +12 -1
- package/examples/dialogs.html +13 -2
- package/examples/editor.html +9 -49
- package/examples/index.html +2 -2
- package/examples/side-bar.html +1 -1
- package/examples/timeline.html +2 -2
- package/examples/video-editor.html +1 -1
- package/examples/video-editor2.html +2 -2
- package/package.json +7 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoEditor.js","sources":["../../src/extensions/VideoEditor.ts"],"sourcesContent":["// VideoEditor.ts @evallsg\r\n\r\nimport { LX } from '../core/Namespace';\r\n\r\nif ( !LX )\r\n{\r\n throw ( 'Missing LX namespace!' );\r\n}\r\n\r\nLX.extensions.push( 'VideoEditor' );\r\n\r\nconst g = globalThis as any;\r\nconst vec2 = LX.vec2;\r\nconst Area = LX.Area;\r\nconst Panel = LX.Panel;\r\n\r\n/**\r\n * @class TimeBar\r\n */\r\n\r\nexport class TimeBar\r\n{\r\n static TIMEBAR_PLAY = 1;\r\n static TIMEBAR_TRIM = 2;\r\n\r\n static BACKGROUND_COLOR = LX.getThemeColor( 'global-branch-darker' );\r\n static COLOR = LX.getThemeColor( 'global-button-color' );\r\n static ACTIVE_COLOR = '#668ee4';\r\n\r\n type: number = TimeBar.TIMEBAR_PLAY;\r\n duration: number = 1.0;\r\n canvas: HTMLCanvasElement;\r\n ctx: CanvasRenderingContext2D | null;\r\n\r\n markerWidth: number = 8;\r\n markerHeight: number;\r\n offset: number;\r\n lineWidth: number;\r\n lineHeight: number;\r\n position: typeof vec2;\r\n startX: number;\r\n endX: number;\r\n currentX: number;\r\n hovering: string | undefined;\r\n dragging: string | undefined;\r\n\r\n onChangeCurrent: any;\r\n onChangeStart: any;\r\n onChangeEnd: any;\r\n onDraw: any;\r\n onMouse: any;\r\n\r\n constructor( area: typeof Area, type?: number, options: any = {} )\r\n {\r\n this.type = type ?? TimeBar.TIMEBAR_PLAY;\r\n this.duration = options.duration ?? this.duration;\r\n\r\n // Create canvas\r\n this.canvas = document.createElement( 'canvas' );\r\n this.canvas.width = area.size[0];\r\n this.canvas.height = area.size[1];\r\n area.attach( this.canvas );\r\n\r\n this.ctx = this.canvas.getContext( '2d' );\r\n\r\n this.markerWidth = options.markerWidth ?? this.markerWidth;\r\n this.markerHeight = options.markerHeight ?? ( this.canvas.height * 0.5 );\r\n this.offset = options.offset || ( this.markerWidth * 0.5 + 5 );\r\n\r\n // dimensions of line (not canvas)\r\n this.lineWidth = this.canvas.width - this.offset * 2;\r\n this.lineHeight = options.barHeight ?? 5;\r\n\r\n this.position = new vec2( this.offset, this.canvas.height * 0.5 - this.lineHeight * 0.5 );\r\n this.startX = this.position.x;\r\n this.endX = this.position.x + this.lineWidth;\r\n this.currentX = this.startX;\r\n\r\n this._draw();\r\n\r\n this.updateTheme();\r\n LX.addSignal( '@on_new_color_scheme', () => {\r\n // Retrieve again the color using LX.getThemeColor, which checks the applied theme\r\n this.updateTheme();\r\n } );\r\n\r\n this.canvas.onmousedown = ( e: MouseEvent ) => this.onMouseDown( e );\r\n this.canvas.onmousemove = ( e: MouseEvent ) => this.onMouseMove( e );\r\n this.canvas.onmouseup = ( e: MouseEvent ) => this.onMouseUp( e );\r\n }\r\n\r\n updateTheme()\r\n {\r\n TimeBar.BACKGROUND_COLOR = LX.getThemeColor( 'global-color-secondary' );\r\n TimeBar.COLOR = LX.getThemeColor( 'global-color-quaternary' );\r\n TimeBar.ACTIVE_COLOR = '#668ee4';\r\n }\r\n\r\n setDuration( duration: number )\r\n {\r\n this.duration = duration;\r\n }\r\n\r\n xToTime( x: number )\r\n {\r\n return ( ( x - this.offset ) / ( this.lineWidth ) ) * this.duration;\r\n }\r\n\r\n timeToX( time: number )\r\n {\r\n return ( time / this.duration ) * ( this.lineWidth ) + this.offset;\r\n }\r\n\r\n setCurrentTime( time: number )\r\n {\r\n this.currentX = this.timeToX( time );\r\n this.onSetCurrentValue( this.currentX );\r\n }\r\n\r\n setStartTime( time: number )\r\n {\r\n this.startX = this.timeToX( time );\r\n this.onSetStartValue( this.startX );\r\n }\r\n\r\n setEndTime( time: number )\r\n {\r\n this.endX = this.timeToX( time );\r\n this.onSetEndValue( this.endX );\r\n }\r\n\r\n onSetCurrentValue( x: number )\r\n {\r\n this.update( x );\r\n\r\n const t = this.xToTime( x );\r\n if ( this.onChangeCurrent )\r\n {\r\n this.onChangeCurrent( t );\r\n }\r\n }\r\n\r\n onSetStartValue( x: number )\r\n {\r\n this.update( x );\r\n\r\n const t = this.xToTime( x );\r\n if ( this.onChangeStart )\r\n {\r\n this.onChangeStart( t );\r\n }\r\n }\r\n\r\n onSetEndValue( x: number )\r\n {\r\n this.update( x );\r\n\r\n const t = this.xToTime( x );\r\n if ( this.onChangeEnd )\r\n {\r\n this.onChangeEnd( t );\r\n }\r\n }\r\n\r\n _draw()\r\n {\r\n const ctx = this.ctx;\r\n if ( !ctx ) return;\r\n\r\n ctx.save();\r\n ctx.fillStyle = TimeBar.BACKGROUND_COLOR;\r\n ctx.clearRect( 0, 0, this.canvas.width, this.canvas.height );\r\n ctx.fillRect( 0, 0, this.canvas.width, this.canvas.height );\r\n\r\n // Draw background timeline\r\n ctx.fillStyle = TimeBar.COLOR;\r\n ctx.fillRect( this.position.x, this.position.y, this.lineWidth, this.lineHeight );\r\n\r\n // Draw background trimed timeline\r\n ctx.fillStyle = TimeBar.ACTIVE_COLOR;\r\n ctx.fillRect( this.startX, this.position.y, this.endX - this.startX, this.lineHeight );\r\n\r\n ctx.restore();\r\n\r\n // Min-Max time markers\r\n this._drawTrimMarker( 'start', this.startX, { color: null, fillColor: TimeBar.ACTIVE_COLOR || '#5f88c9' } );\r\n this._drawTrimMarker( 'end', this.endX, { color: null, fillColor: TimeBar.ACTIVE_COLOR || '#5f88c9' } );\r\n this._drawTimeMarker( 'current', this.currentX, { color: '#e5e5e5',\r\n fillColor: TimeBar.ACTIVE_COLOR || '#5f88c9', width: this.markerWidth } );\r\n\r\n if ( this.onDraw )\r\n {\r\n this.onDraw();\r\n }\r\n }\r\n\r\n _drawTrimMarker( name: string, x: number, options: any = {} )\r\n {\r\n const w = this.markerWidth;\r\n const h = this.markerHeight;\r\n const y = this.canvas.height * 0.5 - h * 0.5;\r\n const ctx = this.ctx;\r\n if ( !ctx ) return;\r\n\r\n // Shadow\r\n if ( this.hovering == name )\r\n {\r\n ctx.shadowColor = 'white';\r\n ctx.shadowBlur = 2;\r\n }\r\n\r\n ctx.globalAlpha = 1;\r\n ctx.fillStyle = ctx.strokeStyle = options.fillColor || '#111'; // \"#FFF\";\r\n\r\n ctx.beginPath();\r\n ctx.roundRect( x - w * 0.5, y, w, h, 2 );\r\n ctx.fill();\r\n ctx.fillStyle = ctx.strokeStyle = options.fillColor || '#111'; // \"#FFF\";\r\n\r\n ctx.strokeStyle = 'white';\r\n ctx.beginPath();\r\n ctx.lineWidth = 2;\r\n ctx.moveTo( x, y + 4 );\r\n ctx.lineTo( x, y + h - 4 );\r\n ctx.stroke();\r\n ctx.shadowBlur = 0;\r\n }\r\n\r\n _drawTimeMarker( name: string, x: number, options: any = {} )\r\n {\r\n let y = this.offset;\r\n const w = options.width ? options.width : ( this.dragging == name ? 6 : 4 );\r\n const h = this.canvas.height - this.offset * 2;\r\n\r\n let ctx = this.ctx;\r\n if ( !ctx ) return;\r\n\r\n ctx.globalAlpha = 1;\r\n ctx.fillStyle = ctx.strokeStyle = options.fillColor || '#111'; // \"#FFF\";\r\n\r\n // Shadow\r\n if ( this.hovering == name )\r\n {\r\n ctx.shadowColor = 'white';\r\n ctx.shadowBlur = 2;\r\n }\r\n\r\n // Current time line\r\n ctx.fillStyle = ctx.strokeStyle = 'white';\r\n ctx.beginPath();\r\n ctx.moveTo( x, y );\r\n ctx.lineTo( x, y + h * 0.5 );\r\n ctx.stroke();\r\n ctx.closePath();\r\n ctx.fillStyle = ctx.strokeStyle = options.fillColor || '#111'; // \"#FFF\";\r\n\r\n y -= this.offset + 8;\r\n // Current time ball grab\r\n ctx.fillStyle = options.fillColor || '#e5e5e5';\r\n ctx.beginPath();\r\n ctx.roundRect( x - w * 0.5, y + this.offset, w, w, 5 );\r\n\r\n ctx.fill();\r\n ctx.shadowBlur = 0;\r\n }\r\n\r\n update( x: number )\r\n {\r\n this.currentX = Math.min( Math.max( this.startX, x ), this.endX );\r\n this._draw();\r\n }\r\n\r\n onMouseDown( e: MouseEvent )\r\n {\r\n if ( this.onMouse )\r\n {\r\n this.onMouse( e );\r\n }\r\n\r\n e.preventDefault();\r\n\r\n if ( !this.canvas || e.target != this.canvas || e.cancelBubble )\r\n {\r\n return;\r\n }\r\n\r\n const canvas = this.canvas;\r\n\r\n // Process mouse\r\n const x = e.offsetX;\r\n const y = e.offsetY;\r\n\r\n // Check if some marker is clicked\r\n const threshold = this.markerWidth;\r\n\r\n // grab trim markers only from the bottom\r\n if ( Math.abs( this.startX - x ) < threshold && this.position.y < y )\r\n {\r\n this.dragging = 'start';\r\n canvas.style.cursor = 'grabbing';\r\n }\r\n else if ( Math.abs( this.endX - x ) < threshold && this.position.y < y )\r\n {\r\n this.dragging = 'end';\r\n canvas.style.cursor = 'grabbing';\r\n }\r\n else\r\n {\r\n this.dragging = 'current';\r\n canvas.style.cursor = 'grabbing';\r\n\r\n if ( x < this.startX )\r\n {\r\n this.currentX = this.startX;\r\n }\r\n else if ( x > this.endX )\r\n {\r\n this.currentX = this.endX;\r\n }\r\n else\r\n {\r\n this.currentX = x;\r\n }\r\n\r\n this.onSetCurrentValue( this.currentX );\r\n }\r\n\r\n this._draw();\r\n }\r\n\r\n onMouseUp( e: MouseEvent )\r\n {\r\n if ( this.onMouse )\r\n {\r\n this.onMouse( e );\r\n }\r\n\r\n e.preventDefault();\r\n\r\n delete this.dragging;\r\n delete this.hovering;\r\n\r\n if ( !this.canvas || e.cancelBubble )\r\n {\r\n return;\r\n }\r\n\r\n const canvas = this.canvas;\r\n canvas.style.cursor = 'default';\r\n }\r\n\r\n onMouseMove( e: MouseEvent )\r\n {\r\n if ( this.onMouse )\r\n {\r\n this.onMouse( e );\r\n }\r\n\r\n if ( !this.canvas || e.cancelBubble )\r\n {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n\r\n const canvas = this.canvas;\r\n\r\n // Process mouse\r\n const x = e.target == canvas ? e.offsetX : e.clientX - canvas.offsetLeft;\r\n const y = e.target == canvas ? e.offsetY : e.clientY - canvas.offsetTop;\r\n\r\n if ( this.dragging )\r\n {\r\n switch ( this.dragging )\r\n {\r\n case 'start':\r\n this.startX = Math.max( this.position.x, Math.min( this.endX, x ) );\r\n this.currentX = this.startX;\r\n this.onSetStartValue( this.startX );\r\n break;\r\n case 'end':\r\n this.endX = Math.max( this.startX, Math.min( this.position.x + this.lineWidth, x ) );\r\n this.currentX = this.endX;\r\n this.onSetEndValue( this.endX );\r\n break;\r\n default:\r\n this.currentX = Math.max( this.startX, Math.min( this.endX, x ) );\r\n break;\r\n }\r\n\r\n this.onSetCurrentValue( this.currentX );\r\n }\r\n else\r\n {\r\n const threshold = this.markerWidth * 0.5;\r\n\r\n if ( Math.abs( this.startX - x ) < threshold )\r\n {\r\n this.hovering = 'start';\r\n canvas.style.cursor = 'grab';\r\n }\r\n else if ( Math.abs( this.endX - x ) < threshold )\r\n {\r\n this.hovering = 'end';\r\n canvas.style.cursor = 'grab';\r\n }\r\n else if ( Math.abs( this.currentX - x ) < threshold )\r\n {\r\n this.hovering = 'current';\r\n canvas.style.cursor = 'grab';\r\n }\r\n else\r\n {\r\n delete this.hovering;\r\n canvas.style.cursor = 'default';\r\n }\r\n }\r\n\r\n this._draw();\r\n }\r\n\r\n resize( size: number[] )\r\n {\r\n this.canvas.width = Math.max( 0, size[0] );\r\n this.canvas.height = Math.max( 0, size[1] );\r\n\r\n let newWidth = size[0] - this.offset * 2;\r\n newWidth = newWidth < 0.00001 ? 0.00001 : newWidth; // actual width of the line = canvas.width - offsetleft - offsetRight\r\n const startRatio = ( this.startX - this.offset ) / this.lineWidth;\r\n const currentRatio = ( this.currentX - this.offset ) / this.lineWidth;\r\n const endRatio = ( this.endX - this.offset ) / this.lineWidth;\r\n\r\n this.lineWidth = newWidth;\r\n this.startX = Math.min( Math.max( newWidth * startRatio, 0 ), newWidth ) + this.offset;\r\n this.currentX = Math.min( Math.max( newWidth * currentRatio, 0 ), newWidth ) + this.offset;\r\n this.endX = Math.min( Math.max( newWidth * endRatio, 0 ), newWidth ) + this.offset;\r\n\r\n this._draw();\r\n }\r\n}\r\n\r\nLX.TimeBar = TimeBar;\r\n\r\n/**\r\n * @class VideoEditor\r\n */\r\n\r\nexport class VideoEditor\r\n{\r\n static CROP_HANDLE_L: number = 0x01;\r\n static CROP_HANDLE_R: number = 0x02;\r\n static CROP_HANDLE_T: number = 0x04;\r\n static CROP_HANDLE_B: number = 0x08;\r\n static CROP_HANDLE_TL: number = VideoEditor.CROP_HANDLE_L | VideoEditor.CROP_HANDLE_T;\r\n static CROP_HANDLE_BL: number = VideoEditor.CROP_HANDLE_L | VideoEditor.CROP_HANDLE_B;\r\n static CROP_HANDLE_TR: number = VideoEditor.CROP_HANDLE_R | VideoEditor.CROP_HANDLE_T;\r\n static CROP_HANDLE_BR: number = VideoEditor.CROP_HANDLE_R | VideoEditor.CROP_HANDLE_B;\r\n\r\n options: any = {};\r\n playing: boolean = false;\r\n videoReady: boolean = false;\r\n controls: boolean = true;\r\n startTimeString: string = '0:0';\r\n endTimeString: string = '0:0';\r\n speed: number = 1.0;\r\n currentTime: number = 0.0;\r\n startTime: number = 0.0;\r\n endTime: number = 0.0;\r\n requestId: any;\r\n video: HTMLVideoElement;\r\n loop: boolean = false;\r\n isDragging: boolean = false;\r\n isResizing: any = null; // holds the HTMLElement of the crop handle, if resizing\r\n crop: boolean = false;\r\n dragOffsetX: number = 0.0;\r\n dragOffsetY: number = 0.0;\r\n currentTimeString: string = '';\r\n\r\n timebar: TimeBar;\r\n mainArea: typeof Area;\r\n cropArea: any; // HTMLElement with normCoord attribute;\r\n controlsArea: typeof Area;\r\n controlsPanelLeft: typeof Panel;\r\n controlsPanelRight: typeof Panel;\r\n controlsCurrentPanel: typeof Panel;\r\n\r\n onChangeCurrent: any;\r\n onChangeStart: any;\r\n onChangeEnd: any;\r\n onKeyUp: any;\r\n onSetTime: any;\r\n onVideoLoaded: any;\r\n onCropArea: any;\r\n onResize: any;\r\n onChangeSpeed: any;\r\n\r\n _updateTime: boolean = true;\r\n _onCropMouseUp: ( e: MouseEvent ) => void;\r\n _onCropMouseMove: ( e: MouseEvent ) => void;\r\n resize: () => void;\r\n\r\n constructor( area: typeof Area, options: any = {} )\r\n {\r\n this.options = options ?? {};\r\n this.speed = options.speed ?? this.speed;\r\n this.mainArea = area;\r\n\r\n let videoArea = null;\r\n let controlsArea = null;\r\n\r\n if ( options.controlsArea )\r\n {\r\n videoArea = area;\r\n controlsArea = options.controlsArea;\r\n }\r\n else\r\n {\r\n [ videoArea, controlsArea ] = area.split( { type: 'vertical', sizes: [ '85%', null ], minimizable: false,\r\n resize: false } );\r\n }\r\n\r\n controlsArea.root.classList.add( 'lexconstrolsarea' );\r\n\r\n this.cropArea = document.createElement( 'div' );\r\n this.cropArea.id = 'cropArea';\r\n this.cropArea.className = 'resize-area hidden';\r\n this.cropArea.normCoords = { x: 0, y: 0, w: 1, h: 1 };\r\n\r\n const flags = 0x0f;\r\n this.setCropAreaHandles( flags );\r\n\r\n this.crop = options.crop;\r\n this.dragOffsetX = 0;\r\n this.dragOffsetY = 0;\r\n // Create video element and load it\r\n let video = this.video = options.video ?? document.createElement( 'video' );\r\n this.loop = options.loop ?? this.loop;\r\n\r\n if ( options.src )\r\n {\r\n this.video.src = options.src;\r\n this.loadVideo( options );\r\n }\r\n\r\n if ( options.videoArea )\r\n {\r\n options.videoArea.root.classList.add( 'lexvideoeditor' );\r\n options.videoArea.root.style.position = \"relative\";\r\n options.videoArea.attach( this.cropArea );\r\n videoArea.attach( options.videoArea );\r\n }\r\n else\r\n {\r\n videoArea.attach( video );\r\n videoArea.attach( this.cropArea );\r\n videoArea.root.classList.add( 'lexvideoeditor' );\r\n }\r\n\r\n videoArea.root.style.position = \"relative\";\r\n\r\n this.controlsArea = controlsArea;\r\n // Create playing timeline area and attach panels\r\n let [ topArea, bottomArea ] = controlsArea.split( { type: 'vertical', sizes: [ '50%', null ],\r\n minimizable: false, resize: false } );\r\n bottomArea.setSize( [ bottomArea.size[0], 40 ] );\r\n let [ leftArea, controlsRight ] = bottomArea.split( { type: 'horizontal', sizes: [ '92%', null ],\r\n minimizable: false, resize: false } );\r\n let [ controlsLeft, timeBarArea ] = leftArea.split( { type: 'horizontal', sizes: [ '10%', null ],\r\n minimizable: false, resize: false } );\r\n\r\n topArea.root.classList.add( 'lexbar' );\r\n bottomArea.root.classList.add( 'lexbar' );\r\n this.controlsCurrentPanel = new LX.Panel( { className: 'lexcontrolspanel lextime' } );\r\n this.controlsCurrentPanel.refresh = () => {\r\n this.controlsCurrentPanel.clear();\r\n this.controlsCurrentPanel.addLabel( this.currentTimeString, { float: 'center' } );\r\n };\r\n topArea.root.classList.add( 'lexflexarea' );\r\n topArea.attach( this.controlsCurrentPanel );\r\n this.controlsCurrentPanel.refresh();\r\n\r\n const style = getComputedStyle( bottomArea.root );\r\n let padding = Number( style.getPropertyValue( 'padding' ).replace( 'px', '' ) );\r\n this.timebar = new TimeBar( timeBarArea, TimeBar.TIMEBAR_TRIM, { offset: padding } );\r\n\r\n // Create controls panel (play/pause button and start time)\r\n this.controlsPanelLeft = new LX.Panel( { className: 'lexcontrolspanel' } );\r\n this.controlsPanelLeft.refresh = () => {\r\n this.controlsPanelLeft.clear();\r\n this.controlsPanelLeft.sameLine();\r\n let playbtn = this.controlsPanelLeft.addButton( 'Play', '', ( v: boolean ) => {\r\n this.playing = v;\r\n if ( this.playing )\r\n {\r\n if ( this.video.currentTime + 0.000001 >= this.endTime )\r\n {\r\n this.video.currentTime = this.startTime;\r\n }\r\n this.video.play();\r\n }\r\n else\r\n {\r\n this.video.pause();\r\n }\r\n }, { width: '40px', icon: 'Play@solid', swap: 'Pause@solid', hideName: true,\r\n className: 'justify-center' } );\r\n playbtn.setState( this.playing, true );\r\n\r\n this.controlsPanelLeft.addButton( '', '', ( v: any, e: MouseEvent ) => {\r\n const panel = new LX.Panel();\r\n panel.addRange( 'Speed', this.speed, ( v: number ) => {\r\n this.speed = v;\r\n this.video.playbackRate = v;\r\n if ( this.onChangeSpeed )\r\n {\r\n this.onChangeSpeed( v );\r\n }\r\n }, { min: 0, max: 2.5, step: 0.01, hideName: true } );\r\n\r\n new LX.Popover( e.target, [ panel ], { align: 'start', side: 'top', sideOffset: 12 } );\r\n }, { width: '40px', title: 'speed', icon: 'Timer@solid', className: 'justify-center' } );\r\n\r\n this.controlsPanelLeft.addButton( '', 'Loop', ( v: boolean ) => {\r\n this.loop = v;\r\n }, { width: '40px', title: 'loop', icon: ( 'Repeat@solid' ), className: `justify-center`, selectable: true,\r\n selected: this.loop } );\r\n\r\n this.controlsPanelLeft.addLabel( this.startTimeString, { width: '100px' } );\r\n this.controlsPanelLeft.endLine();\r\n\r\n let availableWidth = leftArea.root.clientWidth - controlsLeft.root.clientWidth;\r\n this.timebar.resize( [ availableWidth, timeBarArea.root.clientHeight ] );\r\n };\r\n\r\n this.controlsPanelLeft.refresh();\r\n controlsLeft.root.style.minWidth = 'fit-content';\r\n // controlsLeft.root.classList.add();\r\n controlsLeft.attach( this.controlsPanelLeft );\r\n\r\n // Create right controls panel (ens time)\r\n this.controlsPanelRight = new LX.Panel( { className: 'lexcontrolspanel' } );\r\n this.controlsPanelRight.refresh = () => {\r\n this.controlsPanelRight.clear();\r\n this.controlsPanelRight.addLabel( this.endTimeString, { width: 100 } );\r\n };\r\n this.controlsPanelRight.refresh();\r\n controlsRight.root.style.minWidth = 'fit-content';\r\n controlsRight.attach( this.controlsPanelRight );\r\n\r\n this.timebar.onChangeCurrent = this._setCurrentTime.bind( this );\r\n this.timebar.onChangeStart = this._setStartTime.bind( this );\r\n this.timebar.onChangeEnd = this._setEndTime.bind( this );\r\n\r\n this.resize = () => {\r\n bottomArea.setSize( [ this.controlsArea.root.clientWidth, 40 ] );\r\n let availableWidth = this.controlsArea.root.clientWidth - controlsLeft.root.clientWidth\r\n - controlsRight.root.clientWidth;\r\n this.timebar.resize( [ availableWidth, timeBarArea.root.clientHeight ] );\r\n this.moveCropArea( this.cropArea.normCoords.x, this.cropArea.normCoords.y, true );\r\n this.resizeCropArea( this.cropArea.normCoords.w, this.cropArea.normCoords.h, true );\r\n\r\n if ( this.onResize )\r\n {\r\n this.onResize( [ videoArea.root.clientWidth, videoArea.root.clientHeight ] );\r\n }\r\n };\r\n area.onresize = this.resize.bind( this );\r\n window.addEventListener( 'resize', area.onresize );\r\n\r\n this.onKeyUp = ( e: KeyboardEvent ) => {\r\n if ( this.controls && e.key == ' ' )\r\n {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n this.playing = !this.playing;\r\n if ( this.playing )\r\n {\r\n if ( this.video.currentTime + 0.000001 >= this.endTime )\r\n {\r\n this.video.currentTime = this.startTime;\r\n }\r\n this.video.play();\r\n }\r\n else\r\n {\r\n this.video.pause();\r\n }\r\n\r\n this.controlsPanelLeft.refresh();\r\n }\r\n };\r\n\r\n window.addEventListener( 'keyup', this.onKeyUp );\r\n\r\n const parent = controlsArea.parentElement ? controlsArea.parentElement : controlsArea.root.parentElement;\r\n\r\n // Add canvas event listeneres\r\n parent.addEventListener( 'mousedown', ( e: MouseEvent ) => {\r\n // if( this.controls) {\r\n // this.timebar.onMouseDown(e);\r\n // }\r\n } );\r\n\r\n this._onCropMouseUp = ( event: MouseEvent ) => {\r\n // if(this.controls) {\r\n // this.timebar.onMouseUp(event);\r\n // }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if ( ( this.isDragging || this.isResizing ) && this.onCropArea )\r\n {\r\n this.onCropArea( this.getCroppedArea() );\r\n }\r\n this.isDragging = false;\r\n this.isResizing = false;\r\n\r\n document.removeEventListener( 'mouseup', this._onCropMouseUp ); // self destroy. Added during mouseDown on cropArea and handles\r\n document.removeEventListener( 'mousemove', this._onCropMouseMove ); // self destroy. Added during mouseDown on cropArea and handles\r\n };\r\n\r\n this._onCropMouseMove = ( event: MouseEvent ) => {\r\n // if(this.controls) {\r\n // this.timebar.onMouseMove(event);\r\n // }\r\n window.getSelection()?.removeAllRanges();\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if ( this.isResizing )\r\n {\r\n const rectCrop = this.cropArea.getBoundingClientRect();\r\n const rectVideo = this.video.getBoundingClientRect();\r\n const mov = this.isResizing.movement;\r\n\r\n let x = rectCrop.left, y = rectCrop.top, w = rectCrop.width, h = rectCrop.height;\r\n\r\n if ( mov & VideoEditor.CROP_HANDLE_L )\r\n {\r\n let mouseX = Math.min( rectCrop.right - 4, Math.max( rectVideo.left, event.clientX ) ); // -4 because of border\r\n w = rectCrop.left + rectCrop.width - mouseX;\r\n x = mouseX;\r\n if ( mouseX < rectCrop.left )\r\n {\r\n this.moveCropArea( x, y, false );\r\n this.resizeCropArea( w, h, false );\r\n }\r\n else\r\n {\r\n this.resizeCropArea( w, h, false );\r\n this.moveCropArea( x, y, false );\r\n }\r\n }\r\n\r\n if ( mov & VideoEditor.CROP_HANDLE_R )\r\n {\r\n w = event.clientX - rectCrop.left;\r\n this.resizeCropArea( w, h, false );\r\n }\r\n\r\n if ( mov & VideoEditor.CROP_HANDLE_T )\r\n {\r\n const mouseY = Math.min( rectCrop.bottom - 4, Math.max( rectVideo.top, event.clientY ) );\r\n h = rectCrop.top + rectCrop.height - mouseY;\r\n y = mouseY;\r\n\r\n if ( mouseY < rectCrop.top )\r\n {\r\n this.moveCropArea( x, y, false );\r\n this.resizeCropArea( w, h, false );\r\n }\r\n else\r\n {\r\n this.resizeCropArea( w, h, false );\r\n this.moveCropArea( x, y, false );\r\n }\r\n }\r\n\r\n if ( mov & VideoEditor.CROP_HANDLE_B )\r\n {\r\n h = event.clientY - rectCrop.top;\r\n this.resizeCropArea( w, h, false );\r\n }\r\n }\r\n\r\n if ( this.isDragging )\r\n {\r\n this.moveCropArea( event.clientX - this.dragOffsetX, event.clientY - this.dragOffsetY, false );\r\n }\r\n };\r\n\r\n this.cropArea.addEventListener( 'mousedown', ( e: MouseEvent ) => {\r\n if ( e.target === this.cropArea )\r\n {\r\n const rect = this.cropArea.getBoundingClientRect();\r\n this.isDragging = true;\r\n\r\n this.dragOffsetX = e.clientX - rect.left;\r\n this.dragOffsetY = e.clientY - rect.top;\r\n\r\n document.addEventListener( 'mouseup', this._onCropMouseUp );\r\n document.addEventListener( 'mousemove', this._onCropMouseMove );\r\n }\r\n } );\r\n\r\n this.onChangeStart = null;\r\n this.onChangeEnd = null;\r\n }\r\n\r\n setCropAreaHandles( flags: number )\r\n {\r\n // remove existing resizer handles\r\n const resizers = this.cropArea.getElementsByClassName( 'resize-handle' );\r\n for ( let i = resizers.length - 1; i > -1; --i )\r\n {\r\n resizers[i].remove();\r\n }\r\n\r\n const buildResizer = ( className: string, movement: number ) => {\r\n const handle: any = document.createElement( 'div' );\r\n handle.className = ' resize-handle ' + className;\r\n handle.movement = movement;\r\n if ( this.options.handleStyle )\r\n {\r\n Object.assign( handle.style, this.options.handleStyle );\r\n }\r\n this.cropArea.append( handle );\r\n handle.addEventListener( 'mousedown', ( e: MouseEvent ) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n this.isResizing = handle;\r\n\r\n document.addEventListener( 'mouseup', this._onCropMouseUp );\r\n document.addEventListener( 'mousemove', this._onCropMouseMove );\r\n } );\r\n };\r\n\r\n if ( flags & VideoEditor.CROP_HANDLE_L ) buildResizer( 'l', VideoEditor.CROP_HANDLE_L );\r\n if ( flags & VideoEditor.CROP_HANDLE_R ) buildResizer( 'r', VideoEditor.CROP_HANDLE_R );\r\n if ( flags & VideoEditor.CROP_HANDLE_T ) buildResizer( 't', VideoEditor.CROP_HANDLE_T );\r\n if ( flags & VideoEditor.CROP_HANDLE_B ) buildResizer( 'b', VideoEditor.CROP_HANDLE_B );\r\n if ( ( flags & VideoEditor.CROP_HANDLE_TL ) == VideoEditor.CROP_HANDLE_TL )\r\n {\r\n buildResizer( 'tl', VideoEditor.CROP_HANDLE_TL );\r\n }\r\n if ( ( flags & VideoEditor.CROP_HANDLE_BL ) == VideoEditor.CROP_HANDLE_BL )\r\n {\r\n buildResizer( 'bl', VideoEditor.CROP_HANDLE_BL );\r\n }\r\n if ( ( flags & VideoEditor.CROP_HANDLE_TR ) == VideoEditor.CROP_HANDLE_TR )\r\n {\r\n buildResizer( 'tr', VideoEditor.CROP_HANDLE_TR );\r\n }\r\n if ( ( flags & VideoEditor.CROP_HANDLE_BR ) == VideoEditor.CROP_HANDLE_BR )\r\n {\r\n buildResizer( 'br', VideoEditor.CROP_HANDLE_BR );\r\n }\r\n }\r\n\r\n resizeCropArea( sx: number, sy: number, isNormalized: boolean = true )\r\n {\r\n const rectVideo = this.video.getBoundingClientRect();\r\n\r\n if ( !isNormalized )\r\n {\r\n sx = ( rectVideo.width ) ? ( sx / rectVideo.width ) : 1;\r\n sy = ( rectVideo.height ) ? ( sy / rectVideo.height ) : 1;\r\n }\r\n\r\n sx = Math.min( 1 - this.cropArea.normCoords.x, Math.max( 0, sx ) );\r\n sy = Math.min( 1 - this.cropArea.normCoords.y, Math.max( 0, sy ) );\r\n\r\n this.cropArea.normCoords.w = sx;\r\n this.cropArea.normCoords.h = sy;\r\n\r\n const widthPx = rectVideo.width * sx;\r\n const heightPx = rectVideo.height * sy;\r\n const xPx = rectVideo.width * this.cropArea.normCoords.x + rectVideo.left;\r\n const yPx = rectVideo.height * this.cropArea.normCoords.y + rectVideo.top;\r\n\r\n if ( !this.cropArea.classList.contains( 'hidden' ) )\r\n {\r\n const nodes = this.cropArea.parentElement.childNodes;\r\n for ( let i = 0; i < nodes.length; i++ )\r\n {\r\n if ( nodes[i] != this.cropArea )\r\n {\r\n const rectEl = nodes[i].getBoundingClientRect();\r\n nodes[i].style.webkitMask = `linear-gradient(#000 0 0) ${xPx - rectEl.left}px ${\r\n yPx - rectEl.top\r\n }px / ${widthPx}px ${heightPx}px, linear-gradient(rgba(0, 0, 0, 0.3) 0 0)`;\r\n nodes[i].style.webkitMaskRepeat = 'no-repeat';\r\n }\r\n }\r\n }\r\n\r\n this.cropArea.style.width = widthPx + 'px';\r\n this.cropArea.style.height = heightPx + 'px';\r\n }\r\n\r\n // screen pixel (event.clientX) or video normalized (0 is top left of video, 1 bot right)\r\n moveCropArea( x: number, y: number, isNormalized: boolean = true )\r\n {\r\n const rectVideo = this.video.getBoundingClientRect();\r\n\r\n if ( !isNormalized )\r\n {\r\n x = ( rectVideo.width ) ? ( ( x - rectVideo.left ) / rectVideo.width ) : 0;\r\n y = ( rectVideo.height ) ? ( ( y - rectVideo.top ) / rectVideo.height ) : 0;\r\n }\r\n\r\n x = Math.max( 0, Math.min( 1 - this.cropArea.normCoords.w, x ) );\r\n y = Math.max( 0, Math.min( 1 - this.cropArea.normCoords.h, y ) );\r\n\r\n this.cropArea.normCoords.x = x;\r\n this.cropArea.normCoords.y = y;\r\n\r\n const xPx = rectVideo.width * x + rectVideo.left;\r\n const yPx = rectVideo.height * y + rectVideo.top;\r\n const widthPx = rectVideo.width * this.cropArea.normCoords.w;\r\n const heightPx = rectVideo.height * this.cropArea.normCoords.h;\r\n\r\n if ( !this.cropArea.classList.contains( 'hidden' ) )\r\n {\r\n const nodes = this.cropArea.parentElement.childNodes;\r\n for ( let i = 0; i < nodes.length; i++ )\r\n {\r\n if ( nodes[i] != this.cropArea )\r\n {\r\n const rectEl = nodes[i].getBoundingClientRect();\r\n nodes[i].style.webkitMask = `linear-gradient(#000 0 0) ${xPx - rectEl.left}px ${\r\n yPx - rectEl.top\r\n }px / ${widthPx}px ${heightPx}px, linear-gradient(rgba(0, 0, 0, 0.3) 0 0)`;\r\n nodes[i].style.webkitMaskRepeat = 'no-repeat';\r\n }\r\n }\r\n }\r\n\r\n const rectParent = this.cropArea.parentElement.getBoundingClientRect();\r\n this.cropArea.style.left = xPx - rectParent.left + 'px';\r\n this.cropArea.style.top = yPx - rectParent.top + 'px';\r\n }\r\n\r\n async loadVideo( options: any = {} )\r\n {\r\n this.videoReady = false;\r\n\r\n while ( this.video.duration === Infinity || isNaN( this.video.duration ) || !this.timebar )\r\n {\r\n await new Promise( ( r ) => setTimeout( r, 1000 ) );\r\n this.video.currentTime = 10000000 * Math.random();\r\n }\r\n\r\n this.video.currentTime = 0.01; // BUG: some videos will not play unless this line is present\r\n\r\n // Duration can change if the video is dynamic (stream). This function is to ensure to load all buffer data\r\n const forceLoadChunks = () => {\r\n const state = this.videoReady;\r\n if ( this.video.readyState > 3 )\r\n {\r\n this.videoReady = true;\r\n }\r\n if ( !state )\r\n {\r\n this.video.currentTime = this.video.duration;\r\n }\r\n };\r\n\r\n this.video.addEventListener( 'canplaythrough', forceLoadChunks, { passive: true } );\r\n\r\n this.video.ondurationchange = ( v ) => {\r\n if ( this.video.duration != this.endTime )\r\n {\r\n this.video.currentTime = this.startTime;\r\n console.log( 'duration changed from', this.endTime, ' to ', this.video.duration );\r\n this.endTime = this.video.duration;\r\n this.timebar.setDuration( this.endTime );\r\n this.timebar.setEndTime( this.endTime );\r\n }\r\n this.video.currentTime = this.startTime;\r\n this.timebar.setCurrentTime( this.video.currentTime );\r\n };\r\n\r\n this.timebar.startX = this.timebar.position.x;\r\n this.timebar.endX = this.timebar.position.x + this.timebar.lineWidth;\r\n this.startTime = 0;\r\n this.endTime = this.video.duration;\r\n this.timebar.setDuration( this.endTime );\r\n this.timebar.setEndTime( this.video.duration );\r\n this.timebar.setStartTime( this.startTime );\r\n this.timebar.setCurrentTime( this.startTime );\r\n // this.timebar.setStartValue( this.timebar.startX);\r\n // this.timebar.currentX = this._timeToX( this.video.currentTime);\r\n // this.timebar.setCurrentValue( this.timebar.currentX);\r\n // this.timebar.update( this.timebar.currentX );\r\n\r\n // only have one update on flight\r\n if ( !this.requestId )\r\n {\r\n this._update();\r\n }\r\n\r\n this.controls = options.controls ?? true;\r\n\r\n if ( !this.controls )\r\n {\r\n this.hideControls();\r\n }\r\n\r\n this.cropArea.style.height = this.video.clientHeight + 'px';\r\n this.cropArea.style.width = this.video.clientWidth + 'px';\r\n this.moveCropArea( 0, 0, true );\r\n this.resizeCropArea( 1, 1, true );\r\n\r\n if ( this.crop )\r\n {\r\n this.showCropArea();\r\n }\r\n else\r\n {\r\n this.hideCropArea();\r\n }\r\n\r\n window.addEventListener( 'keyup', this.onKeyUp );\r\n\r\n if ( this.onVideoLoaded )\r\n {\r\n this.onVideoLoaded( this.video );\r\n }\r\n }\r\n\r\n _update()\r\n {\r\n // if( this.onDraw ) {\r\n // this.onDraw();\r\n // }\r\n if ( this.playing )\r\n {\r\n if ( this.video.currentTime + 0.000001 >= this.endTime )\r\n {\r\n this.video.pause();\r\n\r\n if ( !this.loop )\r\n {\r\n this.playing = false;\r\n this.controlsPanelLeft.refresh();\r\n }\r\n else\r\n {\r\n this.video.currentTime = this.startTime;\r\n this.video.play();\r\n }\r\n }\r\n\r\n this._updateTime = false;\r\n this.timebar.setCurrentTime( this.video.currentTime );\r\n this._updateTime = true;\r\n }\r\n\r\n this.requestId = requestAnimationFrame( this._update.bind( this ) );\r\n }\r\n\r\n timeToString( t: number )\r\n {\r\n let mzminutes = Math.floor( t / 60 );\r\n let mzseconds = Math.floor( t - ( mzminutes * 60 ) );\r\n let mzmiliseconds = Math.floor( ( t - mzseconds ) * 100 );\r\n\r\n let mzmilisecondsStr: string = mzmiliseconds < 10 ? ( '0' + mzmiliseconds ) : mzmiliseconds.toString();\r\n let mzsecondsStr: string = mzseconds < 10 ? ( '0' + mzseconds ) : mzseconds.toString();\r\n let mzminutesStr: string = mzminutes < 10 ? ( '0' + mzminutes ) : mzminutes.toString();\r\n return `${mzminutesStr}:${mzsecondsStr}.${mzmilisecondsStr}`;\r\n }\r\n\r\n _setCurrentTime( t: number )\r\n {\r\n if ( this.video.currentTime != t && this._updateTime )\r\n {\r\n this.video.currentTime = t;\r\n }\r\n\r\n this.currentTimeString = this.timeToString( t );\r\n this.controlsCurrentPanel.refresh();\r\n\r\n if ( this.onSetTime )\r\n {\r\n this.onSetTime( t );\r\n }\r\n\r\n if ( this.onChangeCurrent )\r\n {\r\n this.onChangeCurrent( t );\r\n }\r\n }\r\n\r\n _setStartTime( t: number )\r\n {\r\n this.startTime = this.video.currentTime = t;\r\n\r\n this.startTimeString = this.timeToString( t );\r\n this.controlsPanelLeft.refresh();\r\n\r\n if ( this.onSetTime )\r\n {\r\n this.onSetTime( t );\r\n }\r\n\r\n if ( this.onChangeStart )\r\n {\r\n this.onChangeStart( t );\r\n }\r\n }\r\n\r\n _setEndTime( t: number )\r\n {\r\n this.endTime = this.video.currentTime = t;\r\n\r\n this.endTimeString = this.timeToString( t );\r\n this.controlsPanelRight.refresh();\r\n\r\n if ( this.onSetTime )\r\n {\r\n this.onSetTime( t );\r\n }\r\n\r\n if ( this.onChangeEnd )\r\n {\r\n this.onChangeEnd( t );\r\n }\r\n }\r\n\r\n getStartTime()\r\n {\r\n return this.startTime;\r\n }\r\n\r\n getEndTime()\r\n {\r\n return this.endTime;\r\n }\r\n\r\n getTrimedTimes()\r\n {\r\n return { start: this.startTime, end: this.endTime };\r\n }\r\n\r\n getCroppedArea()\r\n {\r\n return this.cropArea.getBoundingClientRect();\r\n }\r\n\r\n showCropArea()\r\n {\r\n this.cropArea.classList.remove( 'hidden' );\r\n\r\n const nodes = this.cropArea.parentElement?.childNodes ?? [];\r\n const rect = this.cropArea.getBoundingClientRect();\r\n for ( let i = 0; i < nodes.length; i++ )\r\n {\r\n const node: any = nodes[i];\r\n if ( node == this.cropArea ) continue;\r\n const rectEl = node.getBoundingClientRect();\r\n node.style.webkitMask = `linear-gradient(#000 0 0) ${rect.left - rectEl.left}px ${\r\n rect.top - rectEl.top\r\n }px / ${rect.width}px ${rect.height}px, linear-gradient(rgba(0, 0, 0, 0.3) 0 0)`;\r\n node.style.webkitMaskRepeat = 'no-repeat';\r\n }\r\n }\r\n\r\n hideCropArea()\r\n {\r\n this.cropArea.classList.add( 'hidden' );\r\n\r\n const nodes = this.cropArea.parentElement?.childNodes ?? [];\r\n for ( let i = 0; i < nodes.length; i++ )\r\n {\r\n const node: any = nodes[i];\r\n if ( node == this.cropArea ) continue;\r\n node.style.webkitMask = '';\r\n node.style.webkitMaskRepeat = 'no-repeat';\r\n }\r\n }\r\n\r\n showControls()\r\n {\r\n this.controls = true;\r\n this.controlsArea.show();\r\n }\r\n\r\n hideControls()\r\n {\r\n this.controls = false;\r\n this.controlsArea.hide();\r\n }\r\n\r\n stopUpdates()\r\n {\r\n if ( this.requestId )\r\n {\r\n cancelAnimationFrame( this.requestId );\r\n this.requestId = null;\r\n }\r\n }\r\n\r\n unbind()\r\n {\r\n this.stopUpdates();\r\n\r\n this.video.pause();\r\n this.playing = false;\r\n this.controlsPanelLeft.refresh();\r\n this.video.src = '';\r\n\r\n window.removeEventListener( 'keyup', this.onKeyUp );\r\n document.removeEventListener( 'mouseup', this._onCropMouseUp );\r\n document.removeEventListener( 'mousemove', this._onCropMouseMove );\r\n }\r\n}\r\n\r\nLX.VideoEditor = VideoEditor;\r\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VideoEditor.js","sources":["../../src/extensions/VideoEditor.ts"],"sourcesContent":["// VideoEditor.ts @evallsg\r\n\r\nimport { LX } from '../core/Namespace';\r\n\r\nif ( !LX )\r\n{\r\n throw ( 'Missing LX namespace!' );\r\n}\r\n\r\nLX.extensions.push( 'VideoEditor' );\r\n\r\nconst g = globalThis as any;\r\nconst vec2 = LX.vec2;\r\nconst Area = LX.Area;\r\nconst Panel = LX.Panel;\r\n\r\n/**\r\n * @class TimeBar\r\n */\r\n\r\nexport class TimeBar\r\n{\r\n static TIMEBAR_PLAY = 1;\r\n static TIMEBAR_TRIM = 2;\r\n\r\n static BACKGROUND_COLOR = LX.getCSSVariable( 'secondary' );\r\n static COLOR = LX.getCSSVariable( 'accent' );\r\n static ACTIVE_COLOR = LX.getCSSVariable( 'color-blue-400' );\r\n\r\n type: number = TimeBar.TIMEBAR_PLAY;\r\n duration: number = 1.0;\r\n canvas: HTMLCanvasElement;\r\n ctx: CanvasRenderingContext2D | null;\r\n\r\n options: any;\r\n markerWidth: number = 8;\r\n markerHeight: number;\r\n offset: typeof vec2;\r\n lineWidth: number;\r\n lineHeight: number;\r\n linePosition: typeof vec2;\r\n startX: number;\r\n endX: number;\r\n currentX: number;\r\n hovering: string | undefined;\r\n dragging: string | undefined;\r\n _onMouseUpListener: ( e: MouseEvent ) => void;\r\n _onMouseMoveListener: ( e: MouseEvent ) => void;\r\n _mouseDownCanvasRect: any = null;\r\n updateTheme: () => void;\r\n\r\n onChangeCurrent: any;\r\n onChangeStart: any;\r\n onChangeEnd: any;\r\n onDraw: any;\r\n onMouse: any;\r\n\r\n constructor( area: typeof Area, type?: number, options: any = {} )\r\n {\r\n this.type = type ?? TimeBar.TIMEBAR_PLAY;\r\n this.options = options ?? {};\r\n this.duration = options.duration ?? this.duration;\r\n\r\n // Create canvas\r\n this.canvas = document.createElement( 'canvas' );\r\n this.canvas.style.borderRadius = '6px';\r\n this.canvas.width = area.size[0];\r\n this.canvas.height = area.size[1];\r\n area.attach( this.canvas );\r\n\r\n this.ctx = this.canvas.getContext( '2d' );\r\n\r\n this.markerWidth = options.markerWidth ?? this.markerWidth;\r\n this.markerHeight = ( options.markerHeight ?? 0.5 ) * this.canvas.height;\r\n const defaultOffset = this.markerWidth * 0.5 + 5;\r\n if ( typeof ( options.offset ) == 'number' )\r\n {\r\n this.offset = new vec2( options.offset, options.offset );\r\n }\r\n else if ( Array.isArray( options.offset ) )\r\n {\r\n this.offset = new vec2( options.offset[0] ?? defaultOffset, options.offset[1] ?? defaultOffset );\r\n }\r\n else\r\n {\r\n this.offset = new vec2( defaultOffset, defaultOffset );\r\n }\r\n\r\n // dimensions of line (not canvas)\r\n this.lineWidth = this.canvas.width - this.offset.x * 2;\r\n this.lineHeight = options.barHeight ?? 5;\r\n this.linePosition = new vec2( this.offset.x, this.canvas.height * 0.5 - this.lineHeight * 0.5 );\r\n\r\n this.startX = this.linePosition.x;\r\n this.endX = this.linePosition.x + this.lineWidth;\r\n this.currentX = this.startX;\r\n\r\n this._draw();\r\n\r\n function updateTheme()\r\n {\r\n TimeBar.BACKGROUND_COLOR = LX.getCSSVariable( 'secondary' );\r\n TimeBar.COLOR = LX.getCSSVariable( 'accent' );\r\n TimeBar.ACTIVE_COLOR = LX.getCSSVariable( 'color-blue-400' );\r\n }\r\n\r\n this.updateTheme = updateTheme.bind( this );\r\n LX.addSignal( '@on_new_color_scheme', this.updateTheme );\r\n this.updateTheme();\r\n\r\n // prepare event listeners' functions\r\n this._onMouseUpListener = this.onMouseUp.bind( this );\r\n this._onMouseMoveListener = this.onMouseMove.bind( this );\r\n this.canvas.onmousedown = ( e: MouseEvent ) => this.onMouseDown( e );\r\n this.canvas.onmousemove = ( e: MouseEvent ) => {\r\n if ( this.dragging ) return; // already handled by _onMouseMoveListener\r\n this.onMouseMove( e );\r\n };\r\n }\r\n\r\n unbind()\r\n {\r\n removeEventListener( 'mousemove', this._onMouseMoveListener );\r\n removeEventListener( 'mouseup', this._onMouseUpListener );\r\n }\r\n\r\n setDuration( duration: number )\r\n {\r\n this.duration = duration;\r\n }\r\n\r\n xToTime( x: number )\r\n {\r\n return ( ( x - this.offset.x ) / ( this.lineWidth ) ) * this.duration;\r\n }\r\n\r\n timeToX( time: number )\r\n {\r\n return ( time / this.duration ) * ( this.lineWidth ) + this.offset.x;\r\n }\r\n\r\n setCurrentTime( time: number )\r\n {\r\n this.currentX = this.timeToX( time );\r\n this.onSetCurrentValue( this.currentX );\r\n }\r\n\r\n setStartTime( time: number )\r\n {\r\n this.startX = this.timeToX( time );\r\n this.onSetStartValue( this.startX );\r\n }\r\n\r\n setEndTime( time: number )\r\n {\r\n this.endX = this.timeToX( time );\r\n this.onSetEndValue( this.endX );\r\n }\r\n\r\n onSetCurrentValue( x: number )\r\n {\r\n this.update( x );\r\n\r\n const t = this.xToTime( x );\r\n if ( this.onChangeCurrent )\r\n {\r\n this.onChangeCurrent( t );\r\n }\r\n }\r\n\r\n onSetStartValue( x: number )\r\n {\r\n this.update( x );\r\n\r\n const t = this.xToTime( x );\r\n if ( this.onChangeStart )\r\n {\r\n this.onChangeStart( t );\r\n }\r\n }\r\n\r\n onSetEndValue( x: number )\r\n {\r\n this.update( x );\r\n\r\n const t = this.xToTime( x );\r\n if ( this.onChangeEnd )\r\n {\r\n this.onChangeEnd( t );\r\n }\r\n }\r\n\r\n _draw()\r\n {\r\n const ctx = this.ctx;\r\n if ( !ctx ) return;\r\n\r\n ctx.save();\r\n ctx.fillStyle = TimeBar.BACKGROUND_COLOR;\r\n ctx.clearRect( 0, 0, this.canvas.width, this.canvas.height );\r\n ctx.fillRect( 0, 0, this.canvas.width, this.canvas.height );\r\n\r\n // Draw background timeline\r\n ctx.fillStyle = TimeBar.COLOR;\r\n ctx.fillRect( this.linePosition.x, this.linePosition.y, this.lineWidth, this.lineHeight );\r\n\r\n // Draw background trimed timeline\r\n ctx.fillStyle = TimeBar.ACTIVE_COLOR;\r\n ctx.fillRect( this.startX, this.linePosition.y, this.endX - this.startX, this.lineHeight );\r\n\r\n ctx.restore();\r\n\r\n // Min-Max time markers\r\n this._drawTrimMarker( 'start', this.startX, { color: null, fillColor: TimeBar.ACTIVE_COLOR || '#5f88c9' } );\r\n this._drawTrimMarker( 'end', this.endX, { color: null, fillColor: TimeBar.ACTIVE_COLOR || '#5f88c9' } );\r\n this._drawTimeMarker( 'current', this.currentX, { color: '#e5e5e5', fillColor: TimeBar.ACTIVE_COLOR || '#5f88c9', width: this.markerWidth } );\r\n\r\n if ( this.onDraw )\r\n {\r\n this.onDraw();\r\n }\r\n }\r\n\r\n _drawTrimMarker( name: string, x: number, options: any = {} )\r\n {\r\n const w = this.markerWidth;\r\n const h = this.markerHeight;\r\n const y = this.canvas.height * 0.5 - h * 0.5;\r\n const ctx = this.ctx;\r\n if ( !ctx ) return;\r\n\r\n // Shadow\r\n if ( this.hovering == name )\r\n {\r\n ctx.shadowColor = 'white';\r\n ctx.shadowBlur = 2;\r\n }\r\n\r\n ctx.globalAlpha = 1;\r\n ctx.fillStyle = ctx.strokeStyle = options.fillColor || '#111'; // \"#FFF\";\r\n\r\n ctx.beginPath();\r\n ctx.roundRect( x - w * 0.5, y, w, h, 2 );\r\n ctx.fill();\r\n ctx.fillStyle = ctx.strokeStyle = options.fillColor || '#111'; // \"#FFF\";\r\n\r\n ctx.strokeStyle = 'white';\r\n ctx.beginPath();\r\n ctx.lineWidth = 2;\r\n ctx.moveTo( x, y + 4 );\r\n ctx.lineTo( x, y + h - 4 );\r\n ctx.stroke();\r\n ctx.shadowBlur = 0;\r\n }\r\n\r\n _drawTimeMarker( name: string, x: number, options: any = {} )\r\n {\r\n let y = this.offset.y;\r\n const w = options.width ? options.width : ( this.dragging == name ? 6 : 4 );\r\n const h = this.canvas.height - this.offset.y * 2;\r\n\r\n let ctx = this.ctx;\r\n if ( !ctx ) return;\r\n\r\n ctx.globalAlpha = 1;\r\n ctx.fillStyle = ctx.strokeStyle = options.fillColor || '#111'; // \"#FFF\";\r\n\r\n // Shadow\r\n if ( this.hovering == name )\r\n {\r\n ctx.shadowColor = 'white';\r\n ctx.shadowBlur = 2;\r\n }\r\n\r\n // Current time line\r\n ctx.fillStyle = ctx.strokeStyle = 'white';\r\n ctx.beginPath();\r\n ctx.moveTo( x, y );\r\n ctx.lineTo( x, this.linePosition.y + this.lineHeight * 0.5 );\r\n ctx.stroke();\r\n ctx.closePath();\r\n ctx.fillStyle = ctx.strokeStyle = options.fillColor || '#111'; // \"#FFF\";\r\n\r\n // Current time ball grab\r\n ctx.fillStyle = options.fillColor || '#e5e5e5';\r\n ctx.beginPath();\r\n ctx.roundRect( x - w * 0.5, y - w * 0.5, w, w, 5 );\r\n\r\n ctx.fill();\r\n ctx.shadowBlur = 0;\r\n }\r\n\r\n update( x: number )\r\n {\r\n this.currentX = Math.min( Math.max( this.startX, x ), this.endX );\r\n this._draw();\r\n }\r\n\r\n onMouseDown( e: MouseEvent )\r\n {\r\n if ( this.onMouse )\r\n {\r\n this.onMouse( e );\r\n }\r\n\r\n e.preventDefault();\r\n\r\n if ( !this.canvas || e.target != this.canvas || e.cancelBubble )\r\n {\r\n return;\r\n }\r\n\r\n const canvas = this.canvas;\r\n\r\n // Process mouse\r\n const x = e.offsetX;\r\n const y = e.offsetY;\r\n\r\n // Check if some marker is clicked\r\n const threshold = this.markerWidth;\r\n\r\n const startDist = Math.abs( this.startX - x );\r\n const endDist = Math.abs( this.endX - x );\r\n\r\n // grab trim markers only from the bottom\r\n if ( ( startDist < threshold || endDist < threshold ) && this.linePosition.y < y )\r\n {\r\n this.dragging = ( startDist < endDist || x < this.startX ) ? 'start' : 'end';\r\n canvas.style.cursor = 'grabbing';\r\n }\r\n else\r\n {\r\n this.dragging = 'current';\r\n canvas.style.cursor = 'grabbing';\r\n\r\n if ( x < this.startX )\r\n {\r\n this.currentX = this.startX;\r\n }\r\n else if ( x > this.endX )\r\n {\r\n this.currentX = this.endX;\r\n }\r\n else\r\n {\r\n this.currentX = x;\r\n }\r\n\r\n this.onSetCurrentValue( this.currentX );\r\n }\r\n\r\n this._mouseDownCanvasRect = canvas.getBoundingClientRect(); // cache this to avoid stalls during mousemove\r\n window.addEventListener( 'mousemove', this._onMouseMoveListener );\r\n window.addEventListener( 'mouseup', this._onMouseUpListener );\r\n\r\n this._draw();\r\n }\r\n\r\n onMouseUp( e: MouseEvent )\r\n {\r\n window.removeEventListener( 'mousemove', this._onMouseMoveListener );\r\n window.removeEventListener( 'mouseup', this._onMouseUpListener );\r\n\r\n if ( this.onMouse )\r\n {\r\n this.onMouse( e );\r\n }\r\n\r\n e.preventDefault();\r\n\r\n delete this.dragging;\r\n delete this.hovering;\r\n\r\n if ( !this.canvas || e.cancelBubble )\r\n {\r\n return;\r\n }\r\n\r\n const canvas = this.canvas;\r\n canvas.style.cursor = 'default';\r\n }\r\n\r\n onMouseMove( e: MouseEvent )\r\n {\r\n if ( this.onMouse )\r\n {\r\n this.onMouse( e );\r\n }\r\n\r\n if ( !this.canvas || e.cancelBubble )\r\n {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n\r\n const canvas = this.canvas;\r\n\r\n // Process mouse\r\n const x = e.target == canvas ? e.offsetX : ( e.clientX - this._mouseDownCanvasRect.left );\r\n const y = e.target == canvas ? e.offsetY : ( e.clientY - this._mouseDownCanvasRect.top );\r\n\r\n if ( this.dragging )\r\n {\r\n switch ( this.dragging )\r\n {\r\n case 'start':\r\n this.startX = Math.max( this.linePosition.x, Math.min( this.endX, x ) );\r\n this.currentX = this.startX;\r\n this.onSetStartValue( this.startX );\r\n break;\r\n case 'end':\r\n this.endX = Math.max( this.startX, Math.min( this.linePosition.x + this.lineWidth, x ) );\r\n this.currentX = this.endX;\r\n this.onSetEndValue( this.endX );\r\n break;\r\n default:\r\n this.currentX = Math.max( this.startX, Math.min( this.endX, x ) );\r\n break;\r\n }\r\n\r\n this.onSetCurrentValue( this.currentX );\r\n }\r\n else\r\n {\r\n const threshold = this.markerWidth * 0.5;\r\n\r\n if ( Math.abs( this.startX - x ) < threshold )\r\n {\r\n this.hovering = 'start';\r\n canvas.style.cursor = 'grab';\r\n }\r\n else if ( Math.abs( this.endX - x ) < threshold )\r\n {\r\n this.hovering = 'end';\r\n canvas.style.cursor = 'grab';\r\n }\r\n else if ( Math.abs( this.currentX - x ) < threshold )\r\n {\r\n this.hovering = 'current';\r\n canvas.style.cursor = 'grab';\r\n }\r\n else\r\n {\r\n delete this.hovering;\r\n canvas.style.cursor = 'default';\r\n }\r\n }\r\n\r\n this._draw();\r\n }\r\n\r\n resize( size: number[] )\r\n {\r\n this.canvas.width = Math.max( 0, size[0] );\r\n this.canvas.height = Math.max( 0, size[1] );\r\n\r\n this.markerHeight = ( this.options.markerHeight ?? 0.5 ) * this.canvas.height;\r\n let newWidth = size[0] - this.offset.x * 2;\r\n newWidth = newWidth < 0.00001 ? 0.00001 : newWidth; // actual width of the line = canvas.width - offsetleft - offsetRight\r\n const startRatio = ( this.startX - this.offset.x ) / this.lineWidth;\r\n const currentRatio = ( this.currentX - this.offset.x ) / this.lineWidth;\r\n const endRatio = ( this.endX - this.offset.x ) / this.lineWidth;\r\n\r\n this.lineWidth = newWidth;\r\n this.linePosition.x = this.offset.x;\r\n this.linePosition.y = this.canvas.height * 0.5 - this.lineHeight * 0.5;\r\n this.startX = Math.min( Math.max( newWidth * startRatio, 0 ), newWidth ) + this.offset.x;\r\n this.currentX = Math.min( Math.max( newWidth * currentRatio, 0 ), newWidth ) + this.offset.x;\r\n this.endX = Math.min( Math.max( newWidth * endRatio, 0 ), newWidth ) + this.offset.x;\r\n\r\n this._draw();\r\n }\r\n}\r\n\r\nLX.TimeBar = TimeBar;\r\n\r\n/**\r\n * @class VideoEditor\r\n */\r\n\r\nexport class VideoEditor\r\n{\r\n static CROP_HANDLE_L: number = 0x01;\r\n static CROP_HANDLE_R: number = 0x02;\r\n static CROP_HANDLE_T: number = 0x04;\r\n static CROP_HANDLE_B: number = 0x08;\r\n static CROP_HANDLE_TL: number = VideoEditor.CROP_HANDLE_L | VideoEditor.CROP_HANDLE_T;\r\n static CROP_HANDLE_BL: number = VideoEditor.CROP_HANDLE_L | VideoEditor.CROP_HANDLE_B;\r\n static CROP_HANDLE_TR: number = VideoEditor.CROP_HANDLE_R | VideoEditor.CROP_HANDLE_T;\r\n static CROP_HANDLE_BR: number = VideoEditor.CROP_HANDLE_R | VideoEditor.CROP_HANDLE_B;\r\n\r\n options: any = {};\r\n playing: boolean = false;\r\n videoReady: boolean = false;\r\n controls: boolean = true;\r\n speed: number = 1.0;\r\n startTime: number = 0.0;\r\n endTime: number = 0.0;\r\n requestId: any;\r\n video: HTMLVideoElement;\r\n loop: boolean = false;\r\n isDragging: boolean = false;\r\n isResizing: any = null; // holds the HTMLElement of the crop handle, if resizing\r\n crop: boolean = false;\r\n dragOffsetX: number = 0.0;\r\n dragOffsetY: number = 0.0;\r\n\r\n timebar: any | TimeBar = null;\r\n mainArea: typeof Area;\r\n cropArea: any; // HTMLElement with normCoord attribute;\r\n videoArea: typeof Area;\r\n controlsArea: typeof Area;\r\n controlsComponents: any;\r\n\r\n onChangeCurrent: any;\r\n onChangeStart: any;\r\n onChangeEnd: any;\r\n onKeyUp: any;\r\n onSetTime: any;\r\n onVideoLoaded: any;\r\n onResize: any;\r\n onCropArea: any;\r\n onChangeSpeed: any;\r\n onChangeState: any;\r\n onChangeLoop: any;\r\n\r\n _updateTime: boolean = true;\r\n _onCropMouseUp: ( e: MouseEvent ) => void;\r\n _onCropMouseMove: ( e: MouseEvent ) => void;\r\n resize: any | (() => void) = null;\r\n resizeControls: any | (() => void) = null;\r\n resizeVideo: any | (() => void) = null;\r\n\r\n constructor( area: typeof Area, options: any = {} )\r\n {\r\n this.options = options ?? {};\r\n this.speed = options.speed ?? this.speed;\r\n this.mainArea = area;\r\n\r\n let videoArea = null;\r\n let controlsArea = null;\r\n\r\n if ( options.controlsArea )\r\n {\r\n videoArea = area;\r\n controlsArea = options.controlsArea;\r\n }\r\n else\r\n {\r\n [ videoArea, controlsArea ] = area.split( { type: 'vertical', sizes: [ '85%', null ], minimizable: false, resize: false } );\r\n }\r\n\r\n controlsArea.root.classList.add( 'lexconstrolsarea' );\r\n\r\n this.cropArea = document.createElement( 'div' );\r\n this.cropArea.id = 'cropArea';\r\n this.cropArea.className = 'resize-area hidden';\r\n this.cropArea.normCoords = { x: 0, y: 0, w: 1, h: 1 };\r\n\r\n const flags = 0x0f;\r\n this.setCropAreaHandles( flags );\r\n\r\n this.crop = options.crop;\r\n this.dragOffsetX = 0;\r\n this.dragOffsetY = 0;\r\n // Create video element and load it\r\n let video = this.video = options.video ?? document.createElement( 'video' );\r\n this.loop = options.loop ?? this.loop;\r\n\r\n if ( options.src )\r\n {\r\n this.video.src = options.src;\r\n this.loadVideo( options );\r\n }\r\n\r\n if ( options.videoArea )\r\n {\r\n options.videoArea.root.classList.add( 'lexvideoeditor' );\r\n options.videoArea.root.style.position = 'relative';\r\n options.videoArea.attach( this.cropArea );\r\n videoArea.attach( options.videoArea );\r\n }\r\n else\r\n {\r\n videoArea.attach( video );\r\n videoArea.attach( this.cropArea );\r\n videoArea.root.classList.add( 'lexvideoeditor' );\r\n }\r\n\r\n videoArea.root.style.position = 'relative';\r\n\r\n this.videoArea = videoArea;\r\n this.controlsArea = controlsArea;\r\n this.controlsComponents = {\r\n timebar: null,\r\n playBtn: null,\r\n speedBtn: null,\r\n loopBtn: null,\r\n trimStartText: null,\r\n trimEndText: null,\r\n curTimeText: null,\r\n resetCropBtn: null\r\n };\r\n\r\n this.createControls();\r\n\r\n this.resizeVideo = () => {\r\n this.moveCropArea( this.cropArea.normCoords.x, this.cropArea.normCoords.y, true );\r\n this.resizeCropArea( this.cropArea.normCoords.w, this.cropArea.normCoords.h, true );\r\n\r\n if ( this.onResize )\r\n {\r\n this.onResize( [ videoArea.root.clientWidth, videoArea.root.clientHeight ] );\r\n }\r\n };\r\n\r\n this.resize = () => {\r\n this.resizeVideo();\r\n this.resizeControls();\r\n };\r\n\r\n area.onresize = this.resize.bind( this );\r\n window.addEventListener( 'resize', area.onresize );\r\n\r\n this.onKeyUp = ( e: KeyboardEvent ) => {\r\n if ( this.controls && e.key == ' ' )\r\n {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n // do not skip callback\r\n this.controlsComponents.playBtn?.setState( !this.playing, false );\r\n }\r\n };\r\n\r\n window.addEventListener( 'keyup', this.onKeyUp );\r\n\r\n this._onCropMouseUp = ( event: MouseEvent ) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if ( ( this.isDragging || this.isResizing ) && this.onCropArea )\r\n {\r\n this.onCropArea( this.getCroppedArea() );\r\n }\r\n this.isDragging = false;\r\n this.isResizing = false;\r\n\r\n document.removeEventListener( 'mouseup', this._onCropMouseUp ); // self destroy. Added during mouseDown on cropArea and handles\r\n document.removeEventListener( 'mousemove', this._onCropMouseMove ); // self destroy. Added during mouseDown on cropArea and handles\r\n };\r\n\r\n this._onCropMouseMove = ( event: MouseEvent ) => {\r\n window.getSelection()?.removeAllRanges();\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if ( this.isResizing )\r\n {\r\n const rectCrop = this.cropArea.getBoundingClientRect();\r\n const rectVideo = this.video.getBoundingClientRect();\r\n const mov = this.isResizing.movement;\r\n\r\n let x = rectCrop.left, y = rectCrop.top, w = rectCrop.width, h = rectCrop.height;\r\n\r\n if ( mov & VideoEditor.CROP_HANDLE_L )\r\n {\r\n let mouseX = Math.min( rectCrop.right - 4, Math.max( rectVideo.left, event.clientX ) ); // -4 because of border\r\n w = rectCrop.left + rectCrop.width - mouseX;\r\n x = mouseX;\r\n if ( mouseX < rectCrop.left )\r\n {\r\n this.moveCropArea( x, y, false );\r\n this.resizeCropArea( w, h, false );\r\n }\r\n else\r\n {\r\n this.resizeCropArea( w, h, false );\r\n this.moveCropArea( x, y, false );\r\n }\r\n }\r\n\r\n if ( mov & VideoEditor.CROP_HANDLE_R )\r\n {\r\n w = event.clientX - rectCrop.left;\r\n this.resizeCropArea( w, h, false );\r\n }\r\n\r\n if ( mov & VideoEditor.CROP_HANDLE_T )\r\n {\r\n const mouseY = Math.min( rectCrop.bottom - 4, Math.max( rectVideo.top, event.clientY ) );\r\n h = rectCrop.top + rectCrop.height - mouseY;\r\n y = mouseY;\r\n\r\n if ( mouseY < rectCrop.top )\r\n {\r\n this.moveCropArea( x, y, false );\r\n this.resizeCropArea( w, h, false );\r\n }\r\n else\r\n {\r\n this.resizeCropArea( w, h, false );\r\n this.moveCropArea( x, y, false );\r\n }\r\n }\r\n\r\n if ( mov & VideoEditor.CROP_HANDLE_B )\r\n {\r\n h = event.clientY - rectCrop.top;\r\n this.resizeCropArea( w, h, false );\r\n }\r\n }\r\n\r\n if ( this.isDragging )\r\n {\r\n this.moveCropArea( event.clientX - this.dragOffsetX, event.clientY - this.dragOffsetY, false );\r\n }\r\n };\r\n\r\n this.cropArea.addEventListener( 'mousedown', ( e: MouseEvent ) => {\r\n if ( e.target === this.cropArea )\r\n {\r\n const rect = this.cropArea.getBoundingClientRect();\r\n this.isDragging = true;\r\n\r\n this.dragOffsetX = e.clientX - rect.left;\r\n this.dragOffsetY = e.clientY - rect.top;\r\n\r\n document.addEventListener( 'mouseup', this._onCropMouseUp );\r\n document.addEventListener( 'mousemove', this._onCropMouseMove );\r\n }\r\n } );\r\n\r\n this.onChangeStart = null;\r\n this.onChangeEnd = null;\r\n }\r\n\r\n createControls( options: any = null )\r\n {\r\n const controlsArea = this.controlsArea;\r\n options = options ?? this.options;\r\n\r\n // clear area. Signals are not cleared !!! (not a problem if there are no signals)\r\n while ( controlsArea.root.children.length )\r\n {\r\n controlsArea.root.children[0].remove();\r\n }\r\n controlsArea.sections.length = 0;\r\n\r\n // start trimming text\r\n this.controlsComponents.trimStartText = new LX.TextInput( null, this.timeToString( this.startTime ), null, { width: '100px',\r\n title: 'Trimmed Start Time', disabled: true, inputClass: 'bg-none' } );\r\n this.controlsComponents.trimEndText = new LX.TextInput( null, this.timeToString( this.endTime ), null, { width: '100px',\r\n title: 'Trimmed End Time', disabled: true, inputClass: 'bg-none' } );\r\n this.controlsComponents.curTimeText = new LX.TextInput( null, this.video.currentTime, null, { title: 'Current Time', float: 'center',\r\n disabled: true, inputClass: 'bg-none' } );\r\n\r\n // reset crop area\r\n this.controlsComponents.resetCropBtn = new LX.Button( 'ResetCrop', null, ( v: any ) => {\r\n this.moveCropArea( 0, 0, true );\r\n this.resizeCropArea( 1, 1, true );\r\n if ( this.onCropArea )\r\n {\r\n this.onCropArea( this.getCroppedArea() );\r\n }\r\n }, { width: '40px', title: 'Reset Crop Area', icon: 'Crop@solid', hideName: true,\r\n className: 'justify-center' + ( this.crop ? '' : ' hidden' ) } );\r\n\r\n // play button\r\n this.controlsComponents.playBtn = new LX.Button( 'Play', '', ( v: boolean ) => {\r\n this.playing = v;\r\n if ( this.playing )\r\n {\r\n if ( this.video.currentTime + 0.000001 >= this.endTime )\r\n {\r\n this.video.currentTime = this.startTime;\r\n }\r\n this.video.play();\r\n }\r\n else\r\n {\r\n this.video.pause();\r\n }\r\n\r\n if ( this.onChangeState )\r\n {\r\n this.onChangeState( v );\r\n }\r\n }, { width: '40px', title: 'Play/Pause', icon: 'Play@solid', swap: 'Pause@solid', hideName: true, className: 'justify-center' } );\r\n this.controlsComponents.playBtn.setState( this.playing, true );\r\n\r\n // speed button\r\n this.controlsComponents.speedBtn = new LX.Button( 'Speed', '', ( v: any, e: MouseEvent ) => {\r\n const panel = new LX.Panel();\r\n panel.addRange( 'Speed', this.speed, ( v: number ) => {\r\n this.speed = v;\r\n this.video.playbackRate = v;\r\n if ( this.onChangeSpeed )\r\n {\r\n this.onChangeSpeed( v );\r\n }\r\n }, { min: 0, max: 2.5, step: 0.01, hideName: true } );\r\n\r\n new LX.Popover( e.target, [ panel ], { align: 'start', side: 'top', sideOffset: 12 } );\r\n }, { width: '40px', title: 'Speed', hideName: true, icon: 'Timer@solid', className: 'justify-center' } );\r\n\r\n // loop button\r\n this.controlsComponents.loopBtn = new LX.Button( '', 'Loop', ( v: boolean ) => {\r\n this.loop = v;\r\n if ( this.onChangeLoop )\r\n {\r\n this.onChangeLoop( v );\r\n }\r\n }, { width: '40px', hideName: true, title: 'Loop', icon: 'Repeat@solid', className: `justify-center`, selectable: true,\r\n selected: this.loop } );\r\n\r\n let timeBarArea = null;\r\n if ( typeof ( options.controlsLayout ) == 'function' )\r\n {\r\n timeBarArea = options.controlsLayout;\r\n }\r\n else if ( options.controlsLayout == 1 )\r\n {\r\n timeBarArea = this._createControlsLayout_1();\r\n }\r\n else\r\n {\r\n timeBarArea = this._createControlsLayout_0();\r\n }\r\n\r\n if ( this.timebar )\r\n {\r\n this.timebar.unbind();\r\n }\r\n this.timebar = this.controlsComponents.timebar = new TimeBar( timeBarArea, TimeBar.TIMEBAR_TRIM, { offset: [ 12, null ] } );\r\n this.timebar.onChangeCurrent = this._setCurrentTime.bind( this );\r\n this.timebar.onChangeStart = this._setStartTime.bind( this );\r\n this.timebar.onChangeEnd = this._setEndTime.bind( this );\r\n\r\n let duration = 1;\r\n if ( this.video.duration !== Infinity && !isNaN( this.video.duration ) )\r\n {\r\n duration = this.video.duration;\r\n }\r\n this.timebar.setDuration( duration );\r\n this.timebar.setEndTime( this.endTime );\r\n this.timebar.setStartTime( this.startTime );\r\n this.timebar.setCurrentTime( this.startTime );\r\n this.resizeControls();\r\n }\r\n\r\n /**\r\n * Creates the areas where components will be.\r\n * Attaches all (desired) components of controlsComponents except the timebar\r\n * @returns {Area} for the timebar\r\n * Layout:\r\n * |--------------------------timebar--------------------------|\r\n * play speed loop resetCrop curTime trimStart / trimEnd\r\n */\r\n _createControlsLayout_1()\r\n {\r\n const controlsArea = this.controlsArea;\r\n\r\n // Create playing timeline area and attach panels\r\n let [ timeBarArea, bottomArea ] = controlsArea.split( { type: 'vertical', sizes: [ '50%', null ], minimizable: false, resize: false } );\r\n\r\n bottomArea.root.classList.add( 'relative' );\r\n\r\n let separator = document.createElement( 'p' );\r\n separator.style.alignContent = 'center';\r\n separator.innerText = '/';\r\n let trimDiv = LX.makeContainer( [ 'fit-content', '100%' ], 'relative flex flex-row pb-2', null, bottomArea, { float: 'right' } );\r\n trimDiv.appendChild( this.controlsComponents.trimStartText.root );\r\n trimDiv.appendChild( separator );\r\n trimDiv.appendChild( this.controlsComponents.trimEndText.root );\r\n this.controlsComponents.trimStartText.root.querySelector( 'input' ).classList.add( 'text-end' );\r\n this.controlsComponents.trimStartText.root.classList.add( 'top-0', 'bottom-0' );\r\n this.controlsComponents.trimEndText.root.classList.add( 'top-0', 'bottom-0' );\r\n\r\n // current time\r\n let curTimeDiv = LX.makeContainer( [ '100%', '100%' ], 'absolute top-0 left-0 flex flex-row justify-center items-center pb-2', null,\r\n bottomArea, {} );\r\n curTimeDiv.appendChild( this.controlsComponents.curTimeText.root );\r\n\r\n // Buttons\r\n const buttonsPanel = bottomArea.addPanel( { className: 'absolute top-0 left-0 flex flex-row pl-4 pr-4 pt-1 pb-2' } );\r\n buttonsPanel.root.classList.remove( 'pad-md' );\r\n buttonsPanel._attachComponent( this.controlsComponents.playBtn );\r\n buttonsPanel._attachComponent( this.controlsComponents.speedBtn );\r\n buttonsPanel._attachComponent( this.controlsComponents.loopBtn );\r\n buttonsPanel._attachComponent( this.controlsComponents.resetCropBtn );\r\n this.controlsComponents.playBtn.root.classList.add( 'pl-0' );\r\n this.controlsComponents.resetCropBtn.root.classList.add( 'pr-0' );\r\n\r\n // timebar\r\n timeBarArea.root.classList.add( 'p-4', 'pb-0' );\r\n\r\n this.resizeControls = () => {\r\n const style = getComputedStyle( timeBarArea.root );\r\n let pleft = parseFloat( style.paddingLeft );\r\n let pright = parseFloat( style.paddingRight );\r\n let ptop = parseFloat( style.paddingTop );\r\n let pbot = parseFloat( style.paddingBottom );\r\n // assuming timeBarArea will not overflow\r\n this.timebar.resize( [ timeBarArea.root.clientWidth - pleft - pright, timeBarArea.root.clientHeight - ptop - pbot ] );\r\n };\r\n\r\n return timeBarArea;\r\n }\r\n\r\n /**\r\n * Creates the areas where components will be.\r\n * Attaches all (desired) components of controlsComponents except the timebar\r\n * @returns {Area} for the timebar\r\n * Layout:\r\n * curTime\r\n * play speed loop trimStart |---timebar---| trimend\r\n */\r\n _createControlsLayout_0()\r\n {\r\n const controlsArea = this.controlsArea;\r\n\r\n // Create playing timeline area and attach panels\r\n let [ topArea, bottomArea ] = controlsArea.split( { type: 'vertical', sizes: [ '50%', null ], minimizable: false, resize: false } );\r\n bottomArea.setSize( [ bottomArea.size[0], 40 ] );\r\n let [ leftArea, controlsRight ] = bottomArea.split( { type: 'horizontal', sizes: [ '92%', null ], minimizable: false, resize: false } );\r\n let [ controlsLeft, timeBarArea ] = leftArea.split( { type: 'horizontal', sizes: [ '10%', null ], minimizable: false, resize: false } );\r\n\r\n const controlsCurrentPanel = topArea.addPanel( { className: 'flex' } );\r\n controlsCurrentPanel._attachComponent( this.controlsComponents.curTimeText );\r\n\r\n // Create controls panel (play/pause button and start time)\r\n controlsLeft.root.classList.add( 'min-w-fit' );\r\n const controlsPanelLeft = controlsLeft.addPanel( { className: 'lexcontrolspanel p-0 pl-2' } );\r\n controlsPanelLeft.root.classList.remove( 'pad-md' );\r\n controlsPanelLeft.sameLine();\r\n controlsPanelLeft._attachComponent( this.controlsComponents.playBtn );\r\n controlsPanelLeft._attachComponent( this.controlsComponents.speedBtn );\r\n controlsPanelLeft._attachComponent( this.controlsComponents.loopBtn );\r\n controlsPanelLeft._attachComponent( this.controlsComponents.trimStartText );\r\n controlsPanelLeft.endLine();\r\n\r\n // Create right controls panel (end time)\r\n controlsRight.root.classList.add( 'min-w-fit' );\r\n const controlsPanelRight = controlsRight.addPanel( { className: 'lexcontrolspanel p-0' } );\r\n controlsPanelRight.root.classList.remove( 'pad-md' );\r\n controlsPanelRight._attachComponent( this.controlsComponents.trimEndText );\r\n\r\n this.resizeControls = () => {\r\n bottomArea.setSize( [ this.controlsArea.root.clientWidth, 40 ] );\r\n let availableWidth = this.controlsArea.root.clientWidth - controlsLeft.root.clientWidth\r\n - controlsRight.root.clientWidth;\r\n this.timebar.resize( [ availableWidth, timeBarArea.root.clientHeight ] );\r\n };\r\n\r\n return timeBarArea;\r\n }\r\n\r\n setCropAreaHandles( flags: number )\r\n {\r\n // remove existing resizer handles\r\n const resizers = this.cropArea.getElementsByClassName( 'resize-handle' );\r\n for ( let i = resizers.length - 1; i > -1; --i )\r\n {\r\n resizers[i].remove();\r\n }\r\n\r\n const buildResizer = ( className: string, movement: number ) => {\r\n const handle: any = document.createElement( 'div' );\r\n handle.className = ' resize-handle ' + className;\r\n handle.movement = movement;\r\n if ( this.options.handleStyle )\r\n {\r\n Object.assign( handle.style, this.options.handleStyle );\r\n }\r\n this.cropArea.append( handle );\r\n handle.addEventListener( 'mousedown', ( e: MouseEvent ) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n this.isResizing = handle;\r\n\r\n document.addEventListener( 'mouseup', this._onCropMouseUp );\r\n document.addEventListener( 'mousemove', this._onCropMouseMove );\r\n } );\r\n };\r\n\r\n if ( flags & VideoEditor.CROP_HANDLE_L ) buildResizer( 'l', VideoEditor.CROP_HANDLE_L );\r\n if ( flags & VideoEditor.CROP_HANDLE_R ) buildResizer( 'r', VideoEditor.CROP_HANDLE_R );\r\n if ( flags & VideoEditor.CROP_HANDLE_T ) buildResizer( 't', VideoEditor.CROP_HANDLE_T );\r\n if ( flags & VideoEditor.CROP_HANDLE_B ) buildResizer( 'b', VideoEditor.CROP_HANDLE_B );\r\n if ( ( flags & VideoEditor.CROP_HANDLE_TL ) == VideoEditor.CROP_HANDLE_TL )\r\n {\r\n buildResizer( 'tl', VideoEditor.CROP_HANDLE_TL );\r\n }\r\n if ( ( flags & VideoEditor.CROP_HANDLE_BL ) == VideoEditor.CROP_HANDLE_BL )\r\n {\r\n buildResizer( 'bl', VideoEditor.CROP_HANDLE_BL );\r\n }\r\n if ( ( flags & VideoEditor.CROP_HANDLE_TR ) == VideoEditor.CROP_HANDLE_TR )\r\n {\r\n buildResizer( 'tr', VideoEditor.CROP_HANDLE_TR );\r\n }\r\n if ( ( flags & VideoEditor.CROP_HANDLE_BR ) == VideoEditor.CROP_HANDLE_BR )\r\n {\r\n buildResizer( 'br', VideoEditor.CROP_HANDLE_BR );\r\n }\r\n }\r\n\r\n resizeCropArea( sx: number, sy: number, isNormalized: boolean = true )\r\n {\r\n const rectVideo = this.video.getBoundingClientRect();\r\n\r\n if ( !isNormalized )\r\n {\r\n sx = ( rectVideo.width ) ? ( sx / rectVideo.width ) : 1;\r\n sy = ( rectVideo.height ) ? ( sy / rectVideo.height ) : 1;\r\n }\r\n\r\n sx = Math.min( 1 - this.cropArea.normCoords.x, Math.max( 0, sx ) );\r\n sy = Math.min( 1 - this.cropArea.normCoords.y, Math.max( 0, sy ) );\r\n\r\n this.cropArea.normCoords.w = sx;\r\n this.cropArea.normCoords.h = sy;\r\n\r\n const widthPx = rectVideo.width * sx;\r\n const heightPx = rectVideo.height * sy;\r\n const xPx = rectVideo.width * this.cropArea.normCoords.x + rectVideo.left;\r\n const yPx = rectVideo.height * this.cropArea.normCoords.y + rectVideo.top;\r\n\r\n if ( !this.cropArea.classList.contains( 'hidden' ) )\r\n {\r\n const nodes = this.cropArea.parentElement.childNodes;\r\n for ( let i = 0; i < nodes.length; i++ )\r\n {\r\n if ( nodes[i] != this.cropArea )\r\n {\r\n const rectEl = nodes[i].getBoundingClientRect();\r\n nodes[i].style.webkitMask = `linear-gradient(#000 0 0) ${xPx - rectEl.left}px ${\r\n yPx - rectEl.top\r\n }px / ${widthPx}px ${heightPx}px, linear-gradient(rgba(0, 0, 0, 0.3) 0 0)`;\r\n nodes[i].style.webkitMaskRepeat = 'no-repeat';\r\n }\r\n }\r\n }\r\n\r\n this.cropArea.style.width = widthPx + 'px';\r\n this.cropArea.style.height = heightPx + 'px';\r\n }\r\n\r\n // screen pixel (event.clientX) or video normalized (0 is top left of video, 1 bot right)\r\n moveCropArea( x: number, y: number, isNormalized: boolean = true )\r\n {\r\n const rectVideo = this.video.getBoundingClientRect();\r\n\r\n if ( !isNormalized )\r\n {\r\n x = ( rectVideo.width ) ? ( ( x - rectVideo.left ) / rectVideo.width ) : 0;\r\n y = ( rectVideo.height ) ? ( ( y - rectVideo.top ) / rectVideo.height ) : 0;\r\n }\r\n\r\n x = Math.max( 0, Math.min( 1 - this.cropArea.normCoords.w, x ) );\r\n y = Math.max( 0, Math.min( 1 - this.cropArea.normCoords.h, y ) );\r\n\r\n this.cropArea.normCoords.x = x;\r\n this.cropArea.normCoords.y = y;\r\n\r\n const xPx = rectVideo.width * x + rectVideo.left;\r\n const yPx = rectVideo.height * y + rectVideo.top;\r\n const widthPx = rectVideo.width * this.cropArea.normCoords.w;\r\n const heightPx = rectVideo.height * this.cropArea.normCoords.h;\r\n\r\n if ( !this.cropArea.classList.contains( 'hidden' ) )\r\n {\r\n const nodes = this.cropArea.parentElement.childNodes;\r\n for ( let i = 0; i < nodes.length; i++ )\r\n {\r\n if ( nodes[i] != this.cropArea )\r\n {\r\n const rectEl = nodes[i].getBoundingClientRect();\r\n nodes[i].style.webkitMask = `linear-gradient(#000 0 0) ${xPx - rectEl.left}px ${\r\n yPx - rectEl.top\r\n }px / ${widthPx}px ${heightPx}px, linear-gradient(rgba(0, 0, 0, 0.3) 0 0)`;\r\n nodes[i].style.webkitMaskRepeat = 'no-repeat';\r\n }\r\n }\r\n }\r\n\r\n const rectParent = this.cropArea.parentElement.getBoundingClientRect();\r\n this.cropArea.style.left = xPx - rectParent.left + 'px';\r\n this.cropArea.style.top = yPx - rectParent.top + 'px';\r\n }\r\n\r\n async loadVideo( options: any = {} )\r\n {\r\n this.videoReady = false;\r\n\r\n while ( this.video.duration === Infinity || isNaN( this.video.duration ) || !this.timebar )\r\n {\r\n await new Promise( ( r ) => setTimeout( r, 1000 ) );\r\n this.video.currentTime = 10000000 * Math.random();\r\n }\r\n\r\n this.video.currentTime = 0.01; // BUG: some videos will not play unless this line is present\r\n\r\n // Duration can change if the video is dynamic (stream). This function is to ensure to load all buffer data\r\n const forceLoadChunks = () => {\r\n const state = this.videoReady;\r\n if ( this.video.readyState > 3 )\r\n {\r\n this.videoReady = true;\r\n }\r\n if ( !state )\r\n {\r\n this.video.currentTime = this.video.duration;\r\n }\r\n };\r\n\r\n this.video.addEventListener( 'canplaythrough', forceLoadChunks, { passive: true } );\r\n\r\n this.video.ondurationchange = ( v ) => {\r\n if ( this.video.duration != this.endTime )\r\n {\r\n this.video.currentTime = this.startTime;\r\n console.log( 'duration changed from', this.endTime, ' to ', this.video.duration );\r\n this.endTime = this.video.duration;\r\n this.timebar.setDuration( this.endTime );\r\n this.timebar.setEndTime( this.endTime );\r\n }\r\n this.video.currentTime = this.startTime;\r\n this.timebar.setCurrentTime( this.video.currentTime );\r\n };\r\n\r\n this.startTime = 0;\r\n this.endTime = this.video.duration;\r\n this.timebar.setDuration( this.endTime );\r\n this.timebar.setEndTime( this.video.duration );\r\n this.timebar.setStartTime( this.startTime );\r\n this.timebar.setCurrentTime( this.startTime );\r\n\r\n // only have one update on flight\r\n if ( !this.requestId )\r\n {\r\n this._update();\r\n }\r\n\r\n this.controls = options.controls ?? true;\r\n\r\n if ( !this.controls )\r\n {\r\n this.hideControls();\r\n }\r\n\r\n this.cropArea.style.height = this.video.clientHeight + 'px';\r\n this.cropArea.style.width = this.video.clientWidth + 'px';\r\n this.moveCropArea( 0, 0, true );\r\n this.resizeCropArea( 1, 1, true );\r\n\r\n if ( this.crop )\r\n {\r\n this.showCropArea();\r\n }\r\n else\r\n {\r\n this.hideCropArea();\r\n }\r\n\r\n window.addEventListener( 'keyup', this.onKeyUp );\r\n\r\n if ( this.onVideoLoaded )\r\n {\r\n this.onVideoLoaded( this.video );\r\n }\r\n }\r\n\r\n _update()\r\n {\r\n // if( this.onDraw ) {\r\n // this.onDraw();\r\n // }\r\n if ( this.playing )\r\n {\r\n if ( this.video.currentTime + 0.000001 >= this.endTime )\r\n {\r\n this.video.pause();\r\n\r\n if ( !this.loop )\r\n {\r\n this.playing = false;\r\n this.controlsComponents.playBtn?.setState( false, true ); // skip callback\r\n }\r\n else\r\n {\r\n this.video.currentTime = this.startTime;\r\n this.video.play();\r\n }\r\n }\r\n\r\n this._updateTime = false;\r\n this.timebar.setCurrentTime( this.video.currentTime );\r\n this._updateTime = true;\r\n }\r\n\r\n this.requestId = requestAnimationFrame( this._update.bind( this ) );\r\n }\r\n\r\n timeToString( t: number )\r\n {\r\n let mzminutes = Math.floor( t / 60 );\r\n let mzseconds = Math.floor( t - ( mzminutes * 60 ) );\r\n let mzmiliseconds = Math.floor( ( t - mzseconds ) * 100 );\r\n\r\n let mzmilisecondsStr: string = mzmiliseconds < 10 ? ( '0' + mzmiliseconds ) : mzmiliseconds.toString();\r\n let mzsecondsStr: string = mzseconds < 10 ? ( '0' + mzseconds ) : mzseconds.toString();\r\n let mzminutesStr: string = mzminutes < 10 ? ( '0' + mzminutes ) : mzminutes.toString();\r\n return `${mzminutesStr}:${mzsecondsStr}.${mzmilisecondsStr}`;\r\n }\r\n\r\n _setCurrentTime( t: number )\r\n {\r\n if ( this.video.currentTime != t && this._updateTime )\r\n {\r\n this.video.currentTime = t;\r\n }\r\n\r\n this.controlsComponents.curTimeText?.set( this.timeToString( t ) );\r\n\r\n if ( this.onSetTime )\r\n {\r\n this.onSetTime( t );\r\n }\r\n\r\n if ( this.onChangeCurrent )\r\n {\r\n this.onChangeCurrent( t );\r\n }\r\n }\r\n\r\n _setStartTime( t: number )\r\n {\r\n this.startTime = this.video.currentTime = t;\r\n\r\n this.controlsComponents.trimStartText?.set( this.timeToString( t ) );\r\n\r\n if ( this.onSetTime )\r\n {\r\n this.onSetTime( t );\r\n }\r\n\r\n if ( this.onChangeStart )\r\n {\r\n this.onChangeStart( t );\r\n }\r\n }\r\n\r\n _setEndTime( t: number )\r\n {\r\n this.endTime = this.video.currentTime = t;\r\n\r\n this.controlsComponents.trimEndText?.set( this.timeToString( t ) );\r\n\r\n if ( this.onSetTime )\r\n {\r\n this.onSetTime( t );\r\n }\r\n\r\n if ( this.onChangeEnd )\r\n {\r\n this.onChangeEnd( t );\r\n }\r\n }\r\n\r\n getStartTime()\r\n {\r\n return this.startTime;\r\n }\r\n\r\n getEndTime()\r\n {\r\n return this.endTime;\r\n }\r\n\r\n getTrimedTimes()\r\n {\r\n return { start: this.startTime, end: this.endTime };\r\n }\r\n\r\n getCroppedArea()\r\n {\r\n return this.cropArea.getBoundingClientRect();\r\n }\r\n\r\n showCropArea()\r\n {\r\n this.crop = true;\r\n this.cropArea.classList.remove( 'hidden' );\r\n this.controlsComponents.resetCropBtn?.root.classList.remove( 'hidden' );\r\n\r\n const nodes = this.cropArea.parentElement?.childNodes ?? [];\r\n const rect = this.cropArea.getBoundingClientRect();\r\n for ( let i = 0; i < nodes.length; i++ )\r\n {\r\n const node: any = nodes[i];\r\n if ( node == this.cropArea ) continue;\r\n const rectEl = node.getBoundingClientRect();\r\n node.style.webkitMask = `linear-gradient(#000 0 0) ${rect.left - rectEl.left}px ${\r\n rect.top - rectEl.top\r\n }px / ${rect.width}px ${rect.height}px, linear-gradient(rgba(0, 0, 0, 0.3) 0 0)`;\r\n node.style.webkitMaskRepeat = 'no-repeat';\r\n }\r\n }\r\n\r\n hideCropArea()\r\n {\r\n this.crop = false;\r\n this.cropArea.classList.add( 'hidden' );\r\n this.controlsComponents.resetCropBtn?.root.classList.add( 'hidden' );\r\n\r\n const nodes = this.cropArea.parentElement?.childNodes ?? [];\r\n for ( let i = 0; i < nodes.length; i++ )\r\n {\r\n const node: any = nodes[i];\r\n if ( node == this.cropArea ) continue;\r\n node.style.webkitMask = '';\r\n node.style.webkitMaskRepeat = 'no-repeat';\r\n }\r\n }\r\n\r\n showControls()\r\n {\r\n this.controls = true;\r\n this.controlsArea.show();\r\n }\r\n\r\n hideControls()\r\n {\r\n this.controls = false;\r\n this.controlsArea.hide();\r\n }\r\n\r\n stopUpdates()\r\n {\r\n if ( this.requestId )\r\n {\r\n cancelAnimationFrame( this.requestId );\r\n this.requestId = null;\r\n }\r\n }\r\n\r\n unbind()\r\n {\r\n this.stopUpdates();\r\n\r\n this.video.pause();\r\n this.playing = false;\r\n this.controlsComponents.playBtn?.setState( false, true ); // skip callback\r\n this.video.src = '';\r\n\r\n if ( this.timebar )\r\n {\r\n this.timebar.unbind();\r\n }\r\n\r\n window.removeEventListener( 'keyup', this.onKeyUp );\r\n document.removeEventListener( 'mouseup', this._onCropMouseUp );\r\n document.removeEventListener( 'mousemove', this._onCropMouseMove );\r\n }\r\n}\r\n\r\nLX.VideoEditor = VideoEditor;\r\n"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export * from './AssetView';
|
|
2
|
-
export * from './Audio';
|
|
3
|
-
export * from './CodeEditor';
|
|
4
|
-
export * from './DocMaker';
|
|
5
|
-
export * from './GraphEditor';
|
|
6
|
-
export * from './ImUi';
|
|
7
|
-
export * from './Timeline';
|
|
8
|
-
export * from './VideoEditor';
|
|
1
|
+
export * from './AssetView';
|
|
2
|
+
export * from './Audio';
|
|
3
|
+
export * from './CodeEditor';
|
|
4
|
+
export * from './DocMaker';
|
|
5
|
+
export * from './GraphEditor';
|
|
6
|
+
export * from './ImUi';
|
|
7
|
+
export * from './Timeline';
|
|
8
|
+
export * from './VideoEditor';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
// This is a generated file. Do not edit.
|
|
2
|
-
export { AssetView } from './AssetView.js';
|
|
3
|
-
export { Knob } from './Audio.js';
|
|
4
|
-
export { CodeEditor } from './CodeEditor.js';
|
|
5
|
-
export { DocMaker } from './DocMaker.js';
|
|
6
|
-
export { BoundingBox, GraphEditor, GraphNode } from './GraphEditor.js';
|
|
7
|
-
export { ImUI } from './ImUi.js';
|
|
8
|
-
export { ClipsTimeline, KeyFramesTimeline, Timeline } from './Timeline.js';
|
|
9
|
-
export { TimeBar, VideoEditor } from './VideoEditor.js';
|
|
10
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
// This is a generated file. Do not edit.
|
|
2
|
+
export { AssetView } from './AssetView.js';
|
|
3
|
+
export { Knob } from './Audio.js';
|
|
4
|
+
export { CodeEditor } from './CodeEditor.js';
|
|
5
|
+
export { DocMaker } from './DocMaker.js';
|
|
6
|
+
export { BoundingBox, GraphEditor, GraphNode } from './GraphEditor.js';
|
|
7
|
+
export { ImUI } from './ImUi.js';
|
|
8
|
+
export { ClipsTimeline, KeyFramesTimeline, Timeline } from './Timeline.js';
|
|
9
|
+
export { TimeBar, VideoEditor } from './VideoEditor.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
package/build/index.all.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './index.css';
|
|
2
|
-
export * from './extensions/index';
|
|
1
|
+
export * from './index.css';
|
|
2
|
+
export * from './extensions/index';
|
package/build/index.css.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import './../css/
|
|
2
|
-
import './../css/
|
|
3
|
-
|
|
4
|
-
export * from './index';
|
|
1
|
+
import './../css/output.css';
|
|
2
|
+
import './../css/docs.css';
|
|
3
|
+
export * from './index';
|
package/build/index.d.ts
CHANGED
|
@@ -1,56 +1,57 @@
|
|
|
1
|
-
export * from './core/Icons';
|
|
2
|
-
export * from './core/Namespace';
|
|
3
|
-
export * from './core/Utils';
|
|
4
|
-
export * from './core/Vec2';
|
|
5
|
-
export * from './core/Area';
|
|
6
|
-
export * from './core/Branch';
|
|
7
|
-
export * from './core/Event';
|
|
8
|
-
export * from './core/Panel';
|
|
9
|
-
export * from './components/ArrayInput';
|
|
10
|
-
export * from './components/
|
|
11
|
-
export * from './components/
|
|
12
|
-
export * from './components/
|
|
13
|
-
export * from './components/
|
|
14
|
-
export * from './components/
|
|
15
|
-
export * from './components/
|
|
16
|
-
export * from './components/
|
|
17
|
-
export * from './components/
|
|
18
|
-
export * from './components/
|
|
19
|
-
export * from './components/
|
|
20
|
-
export * from './components/
|
|
21
|
-
export * from './components/
|
|
22
|
-
export * from './components/
|
|
23
|
-
export * from './components/
|
|
24
|
-
export * from './components/
|
|
25
|
-
export * from './components/
|
|
26
|
-
export * from './components/
|
|
27
|
-
export * from './components/
|
|
28
|
-
export * from './components/
|
|
29
|
-
export * from './components/
|
|
30
|
-
export * from './components/
|
|
31
|
-
export * from './components/
|
|
32
|
-
export * from './components/
|
|
33
|
-
export * from './components/
|
|
34
|
-
export * from './components/
|
|
35
|
-
export * from './components/
|
|
36
|
-
export * from './components/
|
|
37
|
-
export * from './components/
|
|
38
|
-
export * from './components/
|
|
39
|
-
export * from './components/
|
|
40
|
-
export * from './components/
|
|
41
|
-
export * from './components/
|
|
42
|
-
export * from './components/
|
|
43
|
-
export * from './components/
|
|
44
|
-
export * from './components/
|
|
45
|
-
export * from './components/
|
|
46
|
-
export * from './components/
|
|
47
|
-
export * from './components/
|
|
48
|
-
export * from './components/
|
|
49
|
-
export * from './components/
|
|
50
|
-
export * from './components/
|
|
51
|
-
export * from './components/
|
|
52
|
-
export * from './components/
|
|
53
|
-
export * from './components/
|
|
54
|
-
export * from './components/
|
|
55
|
-
export * from './components/
|
|
56
|
-
export * from './
|
|
1
|
+
export * from './core/Icons';
|
|
2
|
+
export * from './core/Namespace';
|
|
3
|
+
export * from './core/Utils';
|
|
4
|
+
export * from './core/Vec2';
|
|
5
|
+
export * from './core/Area';
|
|
6
|
+
export * from './core/Branch';
|
|
7
|
+
export * from './core/Event';
|
|
8
|
+
export * from './core/Panel';
|
|
9
|
+
export * from './components/ArrayInput';
|
|
10
|
+
export * from './components/Avatar';
|
|
11
|
+
export * from './components/BaseComponent';
|
|
12
|
+
export * from './components/Button';
|
|
13
|
+
export * from './components/Checkbox';
|
|
14
|
+
export * from './components/ColorInput';
|
|
15
|
+
export * from './components/ComboButtons';
|
|
16
|
+
export * from './components/Counter';
|
|
17
|
+
export * from './components/Curve';
|
|
18
|
+
export * from './components/DatePicker';
|
|
19
|
+
export * from './components/Dial';
|
|
20
|
+
export * from './components/FileInput';
|
|
21
|
+
export * from './components/Form';
|
|
22
|
+
export * from './components/Layers';
|
|
23
|
+
export * from './components/List';
|
|
24
|
+
export * from './components/Map2D';
|
|
25
|
+
export * from './components/NodeTree';
|
|
26
|
+
export * from './components/NumberInput';
|
|
27
|
+
export * from './components/OTPInput';
|
|
28
|
+
export * from './components/Pad';
|
|
29
|
+
export * from './components/Pagination';
|
|
30
|
+
export * from './components/Progress';
|
|
31
|
+
export * from './components/RadioGroup';
|
|
32
|
+
export * from './components/RangeInput';
|
|
33
|
+
export * from './components/Rate';
|
|
34
|
+
export * from './components/Select';
|
|
35
|
+
export * from './components/SizeInput';
|
|
36
|
+
export * from './components/Spinner';
|
|
37
|
+
export * from './components/Table';
|
|
38
|
+
export * from './components/TabSections';
|
|
39
|
+
export * from './components/Tags';
|
|
40
|
+
export * from './components/TextArea';
|
|
41
|
+
export * from './components/TextInput';
|
|
42
|
+
export * from './components/Title';
|
|
43
|
+
export * from './components/Toggle';
|
|
44
|
+
export * from './components/Vector';
|
|
45
|
+
export * from './components/AlertDialog';
|
|
46
|
+
export * from './components/ContextMenu';
|
|
47
|
+
export * from './components/Dialog';
|
|
48
|
+
export * from './components/DropdownMenu';
|
|
49
|
+
export * from './components/Footer';
|
|
50
|
+
export * from './components/PocketDialog';
|
|
51
|
+
export * from './components/Popover';
|
|
52
|
+
export * from './components/Sheet';
|
|
53
|
+
export * from './components/Sidebar';
|
|
54
|
+
export * from './components/Skeleton';
|
|
55
|
+
export * from './components/Tabs';
|
|
56
|
+
export * from './components/Tour';
|
|
57
|
+
export * from './core/Core';
|