lexgui 0.7.15 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -21
- package/README.md +14 -5
- package/build/components/AlertDialog.d.ts +7 -0
- package/build/components/ArrayInput.d.ts +9 -0
- package/build/components/BaseComponent.d.ts +73 -0
- package/build/components/Button.d.ts +14 -0
- package/build/components/Calendar.d.ts +41 -0
- package/build/components/CalendarRange.d.ts +16 -0
- package/build/components/CanvasCurve.d.ts +10 -0
- package/build/components/CanvasDial.d.ts +11 -0
- package/build/components/CanvasMap2D.d.ts +61 -0
- package/build/components/Card.d.ts +8 -0
- package/build/components/Checkbox.d.ts +8 -0
- package/build/components/Color.d.ts +20 -0
- package/build/components/ColorInput.d.ts +13 -0
- package/build/components/ColorPicker.d.ts +29 -0
- package/build/components/ComboButtons.d.ts +8 -0
- package/build/components/ContextMenu.d.ts +16 -0
- package/build/components/Counter.d.ts +9 -0
- package/build/components/Curve.d.ts +10 -0
- package/build/components/DatePicker.d.ts +13 -0
- package/build/components/Dial.d.ts +10 -0
- package/build/components/Dialog.d.ts +20 -0
- package/build/components/DropdownMenu.d.ts +32 -0
- package/build/components/FileInput.d.ts +8 -0
- package/build/components/Footer.d.ts +14 -0
- package/build/components/Form.d.ts +8 -0
- package/build/components/Layers.d.ts +9 -0
- package/build/components/List.d.ts +9 -0
- package/build/components/Map2D.d.ts +12 -0
- package/build/components/Menubar.d.ts +59 -0
- package/build/components/NodeTree.d.ts +26 -0
- package/build/components/NumberInput.d.ts +9 -0
- package/build/components/OTPInput.d.ts +8 -0
- package/build/components/Pad.d.ts +8 -0
- package/build/components/Pagination.d.ts +26 -0
- package/build/components/PocketDialog.d.ts +11 -0
- package/build/components/Popover.d.ts +20 -0
- package/build/components/Progress.d.ts +8 -0
- package/build/components/RadioGroup.d.ts +8 -0
- package/build/components/RangeInput.d.ts +11 -0
- package/build/components/Rate.d.ts +8 -0
- package/build/components/Select.d.ts +10 -0
- package/build/components/Sheet.d.ts +10 -0
- package/build/components/Sidebar.d.ts +84 -0
- package/build/components/SizeInput.d.ts +8 -0
- package/build/components/Skeleton.d.ts +5 -0
- package/build/components/Spinner.d.ts +9 -0
- package/build/components/TabSections.d.ts +11 -0
- package/build/components/Table.d.ts +34 -0
- package/build/components/Tabs.d.ts +20 -0
- package/build/components/Tags.d.ts +9 -0
- package/build/components/TextArea.d.ts +8 -0
- package/build/components/TextInput.d.ts +11 -0
- package/build/components/Title.d.ts +8 -0
- package/build/components/Toggle.d.ts +8 -0
- package/build/components/Tour.d.ts +36 -0
- package/build/components/Vector.d.ts +9 -0
- package/build/core/Area.d.ts +143 -0
- package/build/core/Branch.d.ts +19 -0
- package/build/core/Core.d.ts +1 -0
- package/build/core/Event.d.ts +26 -0
- package/build/core/Icons.d.ts +4 -0
- package/build/core/Namespace.d.ts +2 -0
- package/build/core/Namespace.js +34 -0
- package/build/core/Namespace.js.map +1 -0
- package/build/core/Panel.d.ts +538 -0
- package/build/core/Utils.d.ts +1 -0
- package/build/core/Vec2.d.ts +21 -0
- package/build/extensions/AssetView.d.ts +136 -0
- package/build/extensions/AssetView.js +1367 -0
- package/build/extensions/AssetView.js.map +1 -0
- package/build/extensions/Audio.d.ts +9 -0
- package/build/extensions/Audio.js +163 -0
- package/build/extensions/Audio.js.map +1 -0
- package/build/extensions/CodeEditor.d.ts +350 -0
- package/build/extensions/CodeEditor.js +5022 -0
- package/build/extensions/CodeEditor.js.map +1 -0
- package/build/extensions/DocMaker.d.ts +27 -0
- package/build/extensions/DocMaker.js +327 -0
- package/build/extensions/DocMaker.js.map +1 -0
- package/build/extensions/GraphEditor.d.ts +276 -0
- package/build/extensions/GraphEditor.js +2770 -0
- package/build/extensions/GraphEditor.js.map +1 -0
- package/build/extensions/ImUi.d.ts +46 -0
- package/build/extensions/ImUi.js +227 -0
- package/build/extensions/ImUi.js.map +1 -0
- package/build/extensions/Timeline.d.ts +670 -0
- package/build/extensions/Timeline.js +3955 -0
- package/build/extensions/Timeline.js.map +1 -0
- package/build/extensions/VideoEditor.d.ts +128 -0
- package/build/extensions/VideoEditor.js +898 -0
- package/build/extensions/VideoEditor.js.map +1 -0
- package/build/extensions/index.d.ts +8 -0
- package/build/extensions/index.js +10 -0
- package/build/extensions/index.js.map +1 -0
- package/build/index.all.d.ts +2 -0
- package/build/index.css.d.ts +4 -0
- package/build/index.d.ts +56 -0
- package/build/lexgui.all.js +28498 -0
- package/build/lexgui.all.js.map +1 -0
- package/build/lexgui.all.min.js +1 -0
- package/build/lexgui.all.module.js +28422 -0
- package/build/lexgui.all.module.js.map +1 -0
- package/build/lexgui.all.module.min.js +1 -0
- package/build/lexgui.css +939 -346
- package/build/lexgui.js +13406 -17286
- package/build/lexgui.js.map +1 -0
- package/build/lexgui.min.css +3 -10
- package/build/lexgui.min.js +1 -1
- package/build/lexgui.module.js +12762 -16698
- package/build/lexgui.module.js.map +1 -0
- package/build/lexgui.module.min.js +1 -1
- package/changelog.md +170 -74
- package/demo.js +162 -48
- package/examples/all-components.html +45 -14
- package/examples/asset-view.html +110 -47
- package/examples/code-editor.html +5 -5
- package/examples/dialogs.html +3 -3
- package/examples/editor.html +27 -13
- package/examples/index.html +19 -14
- package/examples/node-graph.html +2 -2
- package/examples/previews/video-editor.png +0 -0
- package/examples/timeline.html +1 -1
- package/examples/video-editor.html +2 -2
- package/package.json +25 -9
- package/build/extensions/audio.js +0 -212
- package/build/extensions/codeeditor.js +0 -6319
- package/build/extensions/docmaker.js +0 -432
- package/build/extensions/imui.js +0 -325
- package/build/extensions/nodegraph.js +0 -3696
- package/build/extensions/timeline.js +0 -4636
- package/build/extensions/videoeditor.js +0 -953
- package/build/lexgui-docs.css +0 -352
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetView.js","sources":["../../src/extensions/AssetView.ts"],"sourcesContent":["// AssetView.ts @jxarco\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( 'AssetView' );\r\n\r\nconst Area = LX.Area;\r\nconst Panel = LX.Panel;\r\nconst NodeTree = LX.NodeTree;\r\nconst TreeEvent = LX.TreeEvent;\r\n\r\nexport type AssetViewAction = 'select' | 'dbl_click' | 'check' | 'clone' | 'move' | 'delete' | 'rename' | 'enter_folder'\r\n | 'create-folder';\r\n\r\nexport interface AssetViewItem\r\n{\r\n id: string;\r\n type: string;\r\n children: AssetViewItem[];\r\n parent?: AssetViewItem;\r\n path?: string;\r\n src?: string;\r\n dir?: AssetViewItem[];\r\n domEl?: HTMLElement;\r\n metadata: any; // optional user data\r\n}\r\n\r\ninterface AssetViewEvent\r\n{\r\n type: AssetViewAction;\r\n items?: AssetViewItem[];\r\n result?: AssetViewItem[];\r\n from?: AssetViewItem;\r\n to?: AssetViewItem;\r\n where?: AssetViewItem;\r\n oldName?: string;\r\n newName?: string;\r\n userInitiated: boolean; // clicked by user vs programmatically\r\n}\r\n\r\n/**\r\n * Signature for cancelable events.\r\n * `resolve()` MUST be called by the user to perform the UI action\r\n */\r\nexport type AssetViewEventCallback = ( event: AssetViewEvent, resolve?: ( ...args: any[] ) => void ) => boolean | void\r\n | Promise<void>;\r\n\r\n/**\r\n * @class AssetView\r\n * @description Asset container with Tree for file system\r\n */\r\n\r\nexport class AssetView\r\n{\r\n static LAYOUT_GRID = 0;\r\n static LAYOUT_COMPACT = 1;\r\n static LAYOUT_LIST = 2;\r\n\r\n static CONTENT_SORT_ASC = 0;\r\n static CONTENT_SORT_DESC = 1;\r\n\r\n root: HTMLElement;\r\n area: typeof Area | null = null;\r\n content!: HTMLElement; // \"!\" to avoid TS strict property initialization error\r\n leftPanel: typeof Panel | null = null;\r\n toolsPanel: any;\r\n contentPanel: any;\r\n previewPanel: any;\r\n tree: typeof NodeTree | null = null;\r\n\r\n prevData: AssetViewItem[] = [];\r\n nextData: AssetViewItem[] = [];\r\n data: AssetViewItem[] = [];\r\n currentData: AssetViewItem[] = [];\r\n currentFolder: AssetViewItem | undefined = undefined;\r\n rootItem: AssetViewItem;\r\n path: string[] = [];\r\n rootPath: string = '';\r\n selectedItem: AssetViewItem | undefined = undefined;\r\n allowedTypes: any;\r\n searchValue: string = '';\r\n filter: string = 'None';\r\n gridScale: number = 1.0;\r\n\r\n // Options\r\n layout: number = AssetView.LAYOUT_GRID;\r\n sortMode: number = AssetView.CONTENT_SORT_ASC;\r\n skipBrowser: boolean = false;\r\n skipPreview: boolean = false;\r\n useNativeTitle: boolean = false;\r\n onlyFolders: boolean = true;\r\n allowMultipleSelection: boolean = false;\r\n previewActions: any[] = [];\r\n contextMenu: any[] = [];\r\n onRefreshContent: any = null;\r\n itemContextMenuOptions: any = null;\r\n onItemDragged: any = null;\r\n\r\n private _assetsPerPage: number = 24;\r\n get assetsPerPage(): any\r\n {\r\n return this._assetsPerPage;\r\n }\r\n set assetsPerPage( v: any )\r\n {\r\n this._setAssetsPerPage( v );\r\n }\r\n\r\n _callbacks: Record<string, AssetViewEventCallback> = {};\r\n _lastSortBy: string = '';\r\n _paginator: typeof LX.Pagination | undefined;\r\n _scriptCodeDialog: typeof LX.Dialog | undefined;\r\n _moveItemDialog: typeof LX.Dialog | undefined;\r\n _movingItem: AssetViewItem | undefined;\r\n\r\n constructor( options: any = {} )\r\n {\r\n this.rootPath = 'https://raw.githubusercontent.com/jxarco/lexgui.js/master/';\r\n this.layout = options.layout ?? this.layout;\r\n this.sortMode = options.sortMode ?? this.sortMode;\r\n\r\n if ( options.rootPath )\r\n {\r\n if ( options.rootPath.constructor !== String )\r\n {\r\n console.warn( `Asset Root Path must be a String (now is a ${options.rootPath.constructor.name})` );\r\n }\r\n else\r\n {\r\n this.rootPath = options.rootPath;\r\n }\r\n }\r\n\r\n let div = document.createElement( 'div' );\r\n div.className = 'lexassetbrowser';\r\n this.root = div;\r\n\r\n let area = new Area( { width: '100%', height: '100%' } );\r\n div.appendChild( area.root );\r\n\r\n let left, right, contentArea = area;\r\n\r\n this.skipBrowser = options.skipBrowser ?? this.skipBrowser;\r\n this.skipPreview = options.skipPreview ?? this.skipPreview;\r\n this.useNativeTitle = options.useNativeTitle ?? this.useNativeTitle;\r\n this.onlyFolders = options.onlyFolders ?? this.onlyFolders;\r\n this.allowMultipleSelection = options.allowMultipleSelection ?? this.allowMultipleSelection;\r\n this.previewActions = options.previewActions ?? [];\r\n this.itemContextMenuOptions = options.itemContextMenuOptions;\r\n this.onRefreshContent = options.onRefreshContent;\r\n this.onItemDragged = options.onItemDragged;\r\n this.gridScale = options.gridScale ?? this.gridScale;\r\n\r\n if ( this.gridScale !== 1.0 )\r\n {\r\n const r: any = document.querySelector( ':root' );\r\n r.style.setProperty( '--av-grid-scale', this.gridScale );\r\n }\r\n\r\n // Append temporarily to the dom\r\n document.body.appendChild( this.root );\r\n\r\n if ( !this.skipBrowser )\r\n {\r\n [ left, right ] = area.split( { type: 'horizontal', sizes: [ '15%', '85%' ] } );\r\n contentArea = right;\r\n\r\n left.setLimitBox( 210, 0 );\r\n right.setLimitBox( 512, 0 );\r\n }\r\n\r\n if ( !this.skipPreview )\r\n {\r\n [ contentArea, right ] = contentArea.split( { type: 'horizontal', sizes: [ '80%', '20%' ] } );\r\n }\r\n\r\n this.allowedTypes = {\r\n 'None': {},\r\n 'Image': { color: 'yellow-500' },\r\n 'JSON': { color: 'sky-200' },\r\n 'Video': { color: 'indigo-400' },\r\n ...( options.allowedTypes ?? {} )\r\n };\r\n\r\n this.path = [ '@' ];\r\n this.rootItem = { id: '/', children: this.data, type: 'folder', metadata: { uid: LX.guidGenerator() } };\r\n this.currentFolder = this.rootItem;\r\n\r\n this._processData( this.data );\r\n\r\n this.currentData = this.data;\r\n\r\n if ( !this.skipBrowser )\r\n {\r\n this._createTreePanel( left );\r\n }\r\n\r\n this._createContentPanel( contentArea );\r\n\r\n // Create resource preview panel\r\n if ( !this.skipPreview )\r\n {\r\n this.previewPanel = right.addPanel( { className: 'lexassetcontentpanel', style: { overflow: 'scroll' } } );\r\n }\r\n\r\n // Clean up\r\n document.body.removeChild( this.root );\r\n }\r\n\r\n /**\r\n * @method on\r\n * @description Stores an event callback for the desired action\r\n */\r\n on( eventName: string, callback: AssetViewEventCallback )\r\n {\r\n this._callbacks[eventName] = callback;\r\n }\r\n\r\n /**\r\n * @method load\r\n * @description Loads and processes the input data\r\n */\r\n load( data: any )\r\n {\r\n this.prevData.length = 0;\r\n this.nextData.length = 0;\r\n this.data = data;\r\n\r\n // Update root children\r\n this.rootItem.children = this.data;\r\n\r\n this._processData( this.data );\r\n this.currentData = this.data;\r\n this.path = [ '@' ];\r\n\r\n if ( !this.skipBrowser )\r\n {\r\n this.tree.refresh( { id: '/', children: this.data, type: 'folder',\r\n metadata: { uid: LX.guidGenerator() } } );\r\n }\r\n\r\n this._refreshContent();\r\n }\r\n\r\n /**\r\n * @method addItem\r\n * @description Creates an item DOM element\r\n */\r\n addItem( item: AssetViewItem, childIndex: number | undefined, updateTree: boolean = true )\r\n {\r\n const isListLayout = this.layout == AssetView.LAYOUT_LIST;\r\n const isGridLayout = this.layout == AssetView.LAYOUT_GRID; // default\r\n const type = item.type.charAt( 0 ).toUpperCase() + item.type.slice( 1 );\r\n const extension = LX.getExtension( item.id );\r\n const isFolder = type === 'Folder';\r\n const that = this;\r\n\r\n let itemEl = document.createElement( 'li' );\r\n itemEl.className = 'lexassetitem ' + item.type.toLowerCase();\r\n itemEl.tabIndex = -1;\r\n LX.insertChildAtIndex( this.content, itemEl, childIndex );\r\n\r\n const typeColor = this.allowedTypes[type]?.color;\r\n if ( typeColor )\r\n {\r\n // Add type tag\r\n LX.makeElement( 'span', `rounded-full w-2 h-2 z-100 flex absolute ml-2 mt-2 bg-${typeColor}`, '', itemEl );\r\n }\r\n\r\n const metadata = item.metadata;\r\n\r\n if ( !metadata.uid )\r\n {\r\n metadata.uid = LX.guidGenerator();\r\n }\r\n\r\n if ( metadata.lastModified && !metadata.lastModifiedDate )\r\n {\r\n metadata.lastModifiedDate = this._lastModifiedToStringDate( metadata.lastModified );\r\n }\r\n\r\n if ( !this.useNativeTitle )\r\n {\r\n let desc = document.createElement( 'span' );\r\n desc.className = 'lexitemdesc';\r\n desc.id = `floatingTitle_${metadata.uid}`;\r\n desc.innerHTML = `File: ${item.id}<br>Type: ${type}`;\r\n LX.insertChildAtIndex( this.content, desc, childIndex ? childIndex + 1 : undefined );\r\n\r\n itemEl.addEventListener( 'mousemove', ( e: MouseEvent ) => {\r\n if ( !isGridLayout )\r\n {\r\n return;\r\n }\r\n\r\n const target: any = e.target;\r\n const dialog = itemEl.closest( 'dialog' );\r\n const rect = itemEl.getBoundingClientRect();\r\n const targetRect = target.getBoundingClientRect();\r\n\r\n let localOffsetX = rect.x + e.offsetX;\r\n let localOffsetY = rect.y + e.offsetY;\r\n\r\n if ( dialog )\r\n {\r\n const dialogRect = dialog.getBoundingClientRect();\r\n localOffsetX -= dialogRect.x;\r\n localOffsetY -= dialogRect.y;\r\n }\r\n\r\n if ( target.classList.contains( 'lexassettitle' ) )\r\n {\r\n localOffsetY += targetRect.y - rect.y;\r\n }\r\n\r\n desc.style.left = localOffsetX + 'px';\r\n desc.style.top = ( localOffsetY - 36 ) + 'px';\r\n } );\r\n }\r\n else\r\n {\r\n itemEl.title = type + ': ' + item.id;\r\n }\r\n\r\n if ( this.allowMultipleSelection )\r\n {\r\n let checkbox = document.createElement( 'input' );\r\n checkbox.type = 'checkbox';\r\n checkbox.className = 'lexcheckbox';\r\n checkbox.checked = metadata.selected;\r\n checkbox.addEventListener( 'change', ( e: any ) => {\r\n metadata.selected = !metadata.selected;\r\n const onCheck = that._callbacks['check'];\r\n if ( onCheck !== undefined )\r\n {\r\n const event: AssetViewEvent = {\r\n type: 'check',\r\n items: [ item ],\r\n userInitiated: true\r\n };\r\n\r\n onCheck( event );\r\n // event.multiple = !!e.shiftKey;\r\n }\r\n e.stopPropagation();\r\n e.stopImmediatePropagation();\r\n } );\r\n\r\n itemEl.appendChild( checkbox );\r\n }\r\n\r\n let title = document.createElement( 'span' );\r\n title.className = 'lexassettitle';\r\n title.innerText = item.id;\r\n itemEl.appendChild( title );\r\n\r\n if ( !this.skipPreview )\r\n {\r\n if ( item.type === 'video' )\r\n {\r\n const itemVideo = LX.makeElement( 'video',\r\n 'absolute left-0 top-0 w-full border-none pointer-events-none', '', itemEl );\r\n itemVideo.setAttribute( 'disablePictureInPicture', false );\r\n itemVideo.setAttribute( 'disableRemotePlayback', false );\r\n itemVideo.setAttribute( 'loop', true );\r\n itemVideo.setAttribute( 'async', true );\r\n itemVideo.style.transition = 'opacity 0.2s ease-out';\r\n itemVideo.style.opacity = metadata.preview ? '0' : '1';\r\n itemVideo.src = item.src;\r\n itemVideo.volume = metadata.volume ?? 0.4;\r\n }\r\n\r\n let preview: any = null;\r\n\r\n const previewSrc = metadata.preview ?? item.src;\r\n const hasImage = previewSrc && (\r\n ( () => {\r\n const ext = LX.getExtension( previewSrc.split( '?' )[0].split( '#' )[0] ); // get final source without url parameters/anchors\r\n return ext ? [ 'png', 'jpg', 'jpeg', 'gif', 'bmp', 'avif' ].includes( ext.toLowerCase() ) : false;\r\n } )()\r\n || previewSrc.startsWith( 'data:image/' )\r\n );\r\n\r\n if ( hasImage || isFolder || !isGridLayout )\r\n {\r\n const defaultPreviewPath = `${this.rootPath}images/file.png`;\r\n const defaultFolderPath = `${this.rootPath}images/folder.png`;\r\n\r\n preview = document.createElement( 'img' );\r\n let realSrc = metadata.unknownExtension\r\n ? defaultPreviewPath\r\n : ( isFolder ? defaultFolderPath : previewSrc );\r\n preview.src = isGridLayout || isFolder ? realSrc : defaultPreviewPath;\r\n preview.setAttribute( 'draggable', 'false' );\r\n preview.className = 'pointer-events-none';\r\n itemEl.appendChild( preview );\r\n }\r\n else\r\n {\r\n preview = document.createElement( 'svg' );\r\n preview.className = 'asset-file-preview';\r\n itemEl.appendChild( preview );\r\n\r\n let textEl = document.createElement( 'text' );\r\n textEl.innerText = ( !extension || extension == item.id )\r\n ? item.type.toUpperCase()\r\n : ( `${extension.toUpperCase()}` ); // If no extension, e.g. Clip, use the type...\r\n preview.appendChild( textEl );\r\n\r\n var newLength = textEl.innerText.length;\r\n var charsPerLine = 2.5;\r\n var newEmSize = charsPerLine / newLength;\r\n var textBaseSize = 64;\r\n\r\n if ( newEmSize < 1 )\r\n {\r\n var newFontSize = newEmSize * textBaseSize;\r\n textEl.style.fontSize = newFontSize + 'px';\r\n preview.style.paddingTop = `calc(50% - ${( textEl.offsetHeight * 0.5 + 10 )}px)`;\r\n }\r\n }\r\n }\r\n\r\n // Add item type info\r\n let itemInfoHtml = type;\r\n\r\n if ( isListLayout )\r\n {\r\n if ( metadata.bytesize ) itemInfoHtml += ` | ${LX.formatBytes( metadata.bytesize )}`;\r\n if ( metadata.lastModifiedDate ) itemInfoHtml += ` | ${metadata.lastModifiedDate}`;\r\n }\r\n\r\n LX.makeContainer( [ 'auto', 'auto' ], 'lexassetinfo', itemInfoHtml, itemEl );\r\n\r\n itemEl.addEventListener( 'click', function( e )\r\n {\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n\r\n const isDoubleClick = e.detail == LX.MOUSE_DOUBLE_CLICK;\r\n\r\n if ( !isDoubleClick )\r\n {\r\n if ( !e.shiftKey )\r\n {\r\n that.content.querySelectorAll( '.lexassetitem' ).forEach( ( i ) =>\r\n i.classList.remove( 'selected' )\r\n );\r\n }\r\n\r\n this.classList.add( 'selected' );\r\n that.selectedItem = item;\r\n\r\n if ( !that.skipPreview )\r\n {\r\n that._previewAsset( item );\r\n }\r\n }\r\n else if ( isFolder )\r\n {\r\n that._enterFolder( item );\r\n return;\r\n }\r\n\r\n const onSelect = that._callbacks['select'];\r\n const onDblClick = that._callbacks['dblClick'];\r\n if ( isDoubleClick && onDblClick !== undefined )\r\n {\r\n const event: AssetViewEvent = {\r\n type: 'dbl_click',\r\n items: [ item ],\r\n userInitiated: true\r\n };\r\n\r\n onDblClick( event );\r\n // event.multiple = !!e.shiftKey;\r\n }\r\n else if ( !isDoubleClick && onSelect !== undefined )\r\n {\r\n const event: AssetViewEvent = {\r\n type: 'select',\r\n items: [ item ],\r\n userInitiated: true\r\n };\r\n\r\n onSelect( event );\r\n // event.multiple = !!e.shiftKey;\r\n }\r\n } );\r\n\r\n itemEl.addEventListener( 'contextmenu', function( e )\r\n {\r\n e.preventDefault();\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n\r\n const multiple = that.content.querySelectorAll( '.selected' ).length;\r\n\r\n const options: any[] = [\r\n {\r\n name: ( multiple > 1 ) ? ( multiple + ' selected' ) : item.id,\r\n icon: LX.makeIcon( 'CircleSmall', { svgClass: `fill-current fg-${typeColor}` } ),\r\n className: 'text-sm',\r\n disabled: true\r\n },\r\n null\r\n ];\r\n\r\n if ( multiple <= 1 )\r\n {\r\n options.push( { name: 'Rename', icon: 'TextCursor',\r\n callback: that._renameItemPopover.bind( that, item ) } );\r\n }\r\n\r\n if ( !isFolder )\r\n {\r\n options.push( { name: 'Clone', icon: 'Copy', callback: that._requestCloneItem.bind( that, item ) } );\r\n }\r\n\r\n options.push( { name: 'Move', icon: 'FolderInput', callback: () => that._moveItem( item ) } );\r\n\r\n if ( type == 'Script' && LX.has( 'CodeEditor' ) )\r\n {\r\n options.push( { name: 'Open in Editor', icon: 'Code',\r\n callback: that._openScriptInEditor.bind( that, item ) } );\r\n }\r\n\r\n if ( that.itemContextMenuOptions )\r\n {\r\n options.push( null );\r\n\r\n for ( let o of that.itemContextMenuOptions )\r\n {\r\n if ( !o.name || !o.callback ) continue;\r\n options.push( { name: o.name, icon: o.icon, callback: o.callback?.bind( that, item ) } );\r\n }\r\n }\r\n\r\n options.push( null, { name: 'Delete', icon: 'Trash2', className: 'fg-error',\r\n callback: that._requestDeleteItem.bind( that, item ) } );\r\n\r\n LX.addClass( that.contentPanel.root, 'pointer-events-none' );\r\n\r\n LX.addDropdownMenu( e.target, options, { side: 'right', align: 'start', event: e, onBlur: () => {\r\n LX.removeClass( that.contentPanel.root, 'pointer-events-none' );\r\n } } );\r\n } );\r\n\r\n const onDrop = function( src: AssetViewItem, target: AssetViewItem )\r\n {\r\n const targetType = target.type.charAt( 0 ).toUpperCase() + target.type.slice( 1 );\r\n\r\n if ( !( targetType === 'Folder' ) || ( src.metadata.uid == target.metadata.uid ) )\r\n {\r\n console.error(\r\n '[AssetView Error] Cannot drop: Target item is not a folder or target is the dragged element!'\r\n );\r\n return;\r\n }\r\n\r\n // Animate dragged element\r\n const draggedEl = src.domEl;\r\n if ( draggedEl )\r\n {\r\n draggedEl.classList.add( 'moving-to-folder' );\r\n\r\n // When animation ends, finalize move\r\n draggedEl.addEventListener( 'animationend', () => {\r\n draggedEl.classList.remove( 'moving-to-folder' );\r\n that._requestMoveItemToFolder( src, target );\r\n }, { once: true } );\r\n }\r\n };\r\n\r\n itemEl.addEventListener( 'dragstart', ( e: DragEvent ) => {\r\n ( window as any ).__av_item_dragged = item;\r\n\r\n var img = new Image();\r\n img.src = '';\r\n if ( e.dataTransfer )\r\n {\r\n e.dataTransfer.setDragImage( img, 0, 0 );\r\n e.dataTransfer.effectAllowed = 'move';\r\n }\r\n\r\n const desc: HTMLElement | null = that.content.querySelector( `#floatingTitle_${metadata.uid}` );\r\n if ( desc ) desc.style.display = 'none';\r\n }, false );\r\n\r\n itemEl.addEventListener( 'dragend', ( e: DragEvent ) => {\r\n e.preventDefault(); // Prevent default action (open as link for some elements)\r\n let dragged = ( window as any ).__av_item_dragged;\r\n if ( dragged && dragged._nodeTarget )\r\n { // We dropped into a NodeTree element\r\n onDrop( dragged, dragged._nodeTarget );\r\n }\r\n delete ( window as any ).__av_item_dragged;\r\n }, false );\r\n\r\n itemEl.addEventListener( 'dragenter', ( e: DragEvent ) => {\r\n e.preventDefault(); // Prevent default action (open as link for some elements)\r\n let dragged = ( window as any ).__av_item_dragged;\r\n if ( !dragged || !isFolder || ( dragged.metadata.uid == metadata.uid ) ) return;\r\n LX.addClass( item.domEl, 'animate-pulse' );\r\n } );\r\n\r\n itemEl.addEventListener( 'dragleave', ( e: any ) => {\r\n e.preventDefault(); // Prevent default action (open as link for some elements)\r\n let dragged = ( window as any ).__av_item_dragged;\r\n if ( !dragged )\r\n {\r\n return;\r\n }\r\n\r\n LX.removeClass( item.domEl, 'animate-pulse' );\r\n } );\r\n\r\n itemEl.addEventListener( 'drop', ( e: DragEvent ) => {\r\n e.preventDefault(); // Prevent default action (open as link for some elements)\r\n let dragged = ( window as any ).__av_item_dragged;\r\n if ( dragged ) onDrop( dragged, item );\r\n } );\r\n\r\n itemEl.addEventListener( 'mouseenter', ( e: MouseEvent ) => {\r\n if ( !that.useNativeTitle && isGridLayout )\r\n {\r\n const desc: HTMLElement | null = that.content.querySelector( `#floatingTitle_${metadata.uid}` );\r\n if ( desc ) desc.style.display = 'unset';\r\n }\r\n\r\n if ( item.type !== 'video' ) return;\r\n e.preventDefault();\r\n const video: any = itemEl.querySelector( 'video' );\r\n video.style.opacity = '1';\r\n video.play();\r\n } );\r\n\r\n itemEl.addEventListener( 'mouseleave', ( e: MouseEvent ) => {\r\n if ( !that.useNativeTitle && isGridLayout )\r\n {\r\n setTimeout( () => {\r\n const desc: HTMLElement | null = that.content.querySelector( `#floatingTitle_${metadata.uid}` );\r\n if ( desc ) desc.style.display = 'none';\r\n }, 100 );\r\n }\r\n\r\n if ( item.type !== 'video' ) return;\r\n e.preventDefault();\r\n const video: any = itemEl.querySelector( 'video' );\r\n video.pause();\r\n video.currentTime = 0;\r\n if ( metadata.preview )\r\n {\r\n video.style.opacity = '0';\r\n }\r\n } );\r\n\r\n if ( !this.skipBrowser && updateTree )\r\n {\r\n this.tree.refresh();\r\n }\r\n\r\n return itemEl;\r\n }\r\n\r\n /**\r\n * @method clear\r\n * @description Creates all AssetView container panels\r\n */\r\n clear()\r\n {\r\n if ( this.previewPanel )\r\n {\r\n this.previewPanel.clear();\r\n }\r\n\r\n if ( this.leftPanel )\r\n {\r\n this.leftPanel.clear();\r\n }\r\n\r\n if ( this.toolsPanel )\r\n {\r\n this.toolsPanel.clear();\r\n }\r\n }\r\n\r\n _processData( data: any, parent?: AssetViewItem )\r\n {\r\n // Processing an item\r\n if ( data.constructor !== Array )\r\n {\r\n data.parent = parent;\r\n data.dir = parent?.children;\r\n data.children = data.children ?? [];\r\n data.metadata = data.metadata || {};\r\n }\r\n\r\n // Get the new parent\r\n const newParent = parent ? data : this.rootItem;\r\n\r\n for ( let item of newParent.children )\r\n {\r\n this._processData( item, newParent );\r\n }\r\n }\r\n\r\n _updatePath()\r\n {\r\n this.path.length = 0;\r\n\r\n if ( this.currentFolder && this.currentFolder.parent )\r\n {\r\n this.path.push( this.currentFolder.id );\r\n\r\n const _pushParentsId = ( i: any ) => {\r\n if ( !i ) return;\r\n this.path.push( i.parent ? i.id : '@' );\r\n _pushParentsId( i.parent );\r\n };\r\n\r\n _pushParentsId( this.currentFolder.parent );\r\n }\r\n else\r\n {\r\n this.path.push( '@' );\r\n }\r\n\r\n LX.emitSignal( '@on_folder_change', this.path.reverse().join( '/' ) );\r\n }\r\n\r\n _createNavigationBar( panel: typeof Panel )\r\n {\r\n panel.sameLine( 4, 'justify-center' );\r\n\r\n panel.addButton( null, 'GoBackButton', () => {\r\n if ( !this.prevData.length || !this.currentFolder ) return;\r\n this.nextData.push( this.currentFolder );\r\n this._enterFolder( this.prevData.pop(), false );\r\n }, { buttonClass: 'bg-none', title: 'Go Back', tooltip: true, icon: 'ArrowLeft' } );\r\n\r\n panel.addButton( null, 'GoForwardButton', () => {\r\n if ( !this.nextData.length || !this.currentFolder ) return;\r\n this._enterFolder( this.nextData.pop() );\r\n }, { buttonClass: 'bg-none', title: 'Go Forward', tooltip: true, icon: 'ArrowRight' } );\r\n\r\n panel.addButton( null, 'GoUpButton', () => {\r\n const parentFolder = this.currentFolder?.parent;\r\n if ( parentFolder ) this._enterFolder( parentFolder );\r\n }, { buttonClass: 'bg-none', title: 'Go Upper Folder', tooltip: true, icon: 'ArrowUp' } );\r\n\r\n panel.addButton( null, 'GoUpButton', () => {\r\n this._refreshContent();\r\n }, { buttonClass: 'bg-none', title: 'Refresh', tooltip: true, icon: 'Refresh' } );\r\n }\r\n\r\n _createTreePanel( area: typeof Area )\r\n {\r\n if ( this.leftPanel )\r\n {\r\n this.leftPanel.clear();\r\n }\r\n else\r\n {\r\n this.leftPanel = area.addPanel( { className: 'lexassetbrowserpanel' } );\r\n }\r\n\r\n this._createNavigationBar( this.leftPanel );\r\n\r\n const treeData = { id: '/', children: this.data };\r\n const tree = this.leftPanel.addTree( 'Content Browser', treeData, {\r\n // icons: tree_icons,\r\n filter: false,\r\n onlyFolders: this.onlyFolders,\r\n onevent: ( event: typeof TreeEvent ) => {\r\n let node = event.node;\r\n let value = event.value;\r\n\r\n switch ( event.type )\r\n {\r\n case LX.TreeEvent.NODE_SELECTED:\r\n {\r\n if ( event.multiple )\r\n {\r\n return;\r\n }\r\n if ( !node.parent )\r\n {\r\n if ( this.currentFolder )\r\n {\r\n this.prevData.push( this.currentFolder );\r\n }\r\n\r\n this.currentFolder = undefined;\r\n this.currentData = this.data;\r\n this._refreshContent();\r\n this._updatePath();\r\n }\r\n else\r\n {\r\n this._enterFolder( node.type === 'folder' ? node : node.parent );\r\n\r\n this._previewAsset( node );\r\n\r\n if ( node.type !== 'folder' )\r\n {\r\n this.content.querySelectorAll( '.lexassetitem' ).forEach( ( i ) =>\r\n i.classList.remove( 'selected' )\r\n );\r\n const dom = node.domEl;\r\n dom?.classList.add( 'selected' );\r\n }\r\n\r\n this.selectedItem = node;\r\n }\r\n break;\r\n }\r\n case LX.TreeEvent.NODE_DRAGGED:\r\n {\r\n if ( node.parent )\r\n {\r\n const idx = node.parent.children.indexOf( node );\r\n node.parent.children.splice( idx, 1 );\r\n }\r\n\r\n if ( !value.children )\r\n {\r\n value.children = [];\r\n }\r\n\r\n value.children.push( node );\r\n\r\n node.parent = value;\r\n node.dir = value.children;\r\n\r\n if ( this.onItemDragged )\r\n {\r\n this.onItemDragged( node, value );\r\n }\r\n\r\n this._refreshContent();\r\n break;\r\n }\r\n }\r\n }\r\n } );\r\n\r\n this.tree = tree.innerTree;\r\n }\r\n\r\n _setContentLayout( layoutMode: number )\r\n {\r\n this.layout = layoutMode;\r\n this.toolsPanel.refresh();\r\n this._refreshContent();\r\n }\r\n\r\n _createContentPanel( area: typeof Area )\r\n {\r\n const that = this;\r\n\r\n area.root.classList.add( 'flex', 'flex-col' );\r\n\r\n if ( this.toolsPanel )\r\n {\r\n this.contentPanel.clear();\r\n }\r\n else\r\n {\r\n this.toolsPanel = area.addPanel( { className: 'flex-auto', height: 'auto' } );\r\n this.contentPanel = area.addPanel( {\r\n className: 'lexassetcontentpanel flex flex-col flex-auto-fill content-center overflow-hidden'\r\n } );\r\n\r\n this._paginator = new LX.Pagination( {\r\n className: 'ml-auto',\r\n pages: Math.max( Math.ceil( this.data.length / this.assetsPerPage ), 1 ),\r\n onChange: () => this._refreshContent()\r\n } );\r\n\r\n this.contentPanel.root.addEventListener( 'wheel', ( e: WheelEvent ) => {\r\n if ( !e.ctrlKey ) return;\r\n e.preventDefault();\r\n this.gridScale *= e.deltaY < 0 ? 1.05 : 0.95;\r\n this.gridScale = LX.clamp( this.gridScale, 0.5, 2.0 );\r\n const r: any = document.querySelector( ':root' );\r\n r.style.setProperty( '--av-grid-scale', this.gridScale );\r\n } );\r\n }\r\n\r\n const _onSort = ( value: any, event: any ) => {\r\n LX.addDropdownMenu( event.target, [\r\n { name: 'Name', icon: 'ALargeSmall', callback: () => this._sortData( 'id' ) },\r\n { name: 'Type', icon: 'Type', callback: () => this._sortData( 'type' ) },\r\n null,\r\n { name: 'Ascending', icon: 'SortAsc',\r\n callback: () => this._sortData( undefined, AssetView.CONTENT_SORT_ASC ) },\r\n { name: 'Descending', icon: 'SortDesc',\r\n callback: () => this._sortData( undefined, AssetView.CONTENT_SORT_DESC ) }\r\n ], { side: 'bottom', align: 'start' } );\r\n };\r\n\r\n const _onChangeView = ( value: any, event: any ) => {\r\n LX.addDropdownMenu( event.target, [\r\n { name: 'Grid', icon: 'LayoutGrid', callback: () => this._setContentLayout( AssetView.LAYOUT_GRID ) },\r\n { name: 'Compact', icon: 'LayoutList',\r\n callback: () => this._setContentLayout( AssetView.LAYOUT_COMPACT ) },\r\n { name: 'List', icon: 'List', callback: () => this._setContentLayout( AssetView.LAYOUT_LIST ) }\r\n ], { side: 'bottom', align: 'start' } );\r\n };\r\n\r\n this.toolsPanel.refresh = () => {\r\n this.toolsPanel.clear();\r\n\r\n const typeEntries = Object.keys( this.allowedTypes );\r\n\r\n // Put it in the content panel if no browser\r\n if ( this.skipBrowser )\r\n {\r\n this._createNavigationBar( this.toolsPanel );\r\n }\r\n\r\n this.toolsPanel.sameLine();\r\n const sortButton = this.toolsPanel.addButton( null, '', _onSort.bind( this ), { title: 'Sort',\r\n tooltip: true, icon: ( this.sortMode === AssetView.CONTENT_SORT_ASC ) ? 'SortAsc' : 'SortDesc' } );\r\n this.toolsPanel.addButton( null, '', _onChangeView.bind( this ), { title: 'View', tooltip: true,\r\n icon: ( this.layout === AssetView.LAYOUT_GRID ) ? 'LayoutGrid' : 'LayoutList' } );\r\n this.toolsPanel.addSelect( null, typeEntries, this.filter ?? typeEntries[0], ( v: any ) => {\r\n this._refreshContent( undefined, v );\r\n }, { overflowContainer: null } );\r\n this.toolsPanel.addText( null, this.searchValue ?? '', ( v: string ) => this._refreshContent( v ), {\r\n className: 'flex flex-auto-fill',\r\n placeholder: 'Search assets..'\r\n } );\r\n this.toolsPanel.endLine();\r\n\r\n if ( this._paginator )\r\n {\r\n const inlineContainer = sortButton.root.parentElement;\r\n inlineContainer.appendChild( this._paginator.root );\r\n }\r\n };\r\n\r\n // Start content panel\r\n\r\n this.content = document.createElement( 'ul' );\r\n this.content.className = 'lexassetscontent';\r\n this.contentPanel.attach( this.content );\r\n\r\n if ( !this.skipBrowser )\r\n {\r\n this.contentPanel.addText( null, this.path.join( '/' ), null, {\r\n inputClass: 'bg-none fg-quinary text-end',\r\n disabled: true,\r\n signal: '@on_folder_change'\r\n } );\r\n }\r\n\r\n this.content.addEventListener( 'dragenter', function( e: DragEvent )\r\n {\r\n e.preventDefault();\r\n this.classList.add( 'dragging' );\r\n } );\r\n\r\n this.content.addEventListener( 'dragleave', function( e: DragEvent )\r\n {\r\n e.preventDefault();\r\n this.classList.remove( 'dragging' );\r\n } );\r\n\r\n this.content.addEventListener( 'drop', ( e: DragEvent ) => {\r\n e.preventDefault();\r\n this._processDrop( e );\r\n } );\r\n\r\n this.content.addEventListener( 'click', function()\r\n {\r\n this.querySelectorAll( '.lexassetitem' ).forEach( ( i ) => i.classList.remove( 'selected' ) );\r\n } );\r\n\r\n this.content.addEventListener( 'contextmenu', function( e )\r\n {\r\n e.preventDefault();\r\n\r\n const options: any[] = [\r\n {\r\n name: 'New Folder',\r\n icon: LX.makeIcon( 'FolderPlus' ),\r\n callback: () => {\r\n that._requestCreateFolder();\r\n }\r\n }\r\n ];\r\n\r\n LX.addClass( that.contentPanel.root, 'pointer-events-none' );\r\n\r\n LX.addDropdownMenu( e.target, options, { side: 'right', align: 'start', event: e, onBlur: () => {\r\n LX.removeClass( that.contentPanel.root, 'pointer-events-none' );\r\n } } );\r\n } );\r\n\r\n this._refreshContent();\r\n\r\n // After content to update the size of the content based on the toolbar\r\n LX.doAsync( () => this.toolsPanel.refresh(), 100 );\r\n }\r\n\r\n _makeNameFilterFn( searchValue: string ): ( name: string ) => boolean\r\n {\r\n const q = searchValue.trim();\r\n\r\n if ( q.includes( '*' ) || q.includes( '?' ) )\r\n {\r\n const regex = LX.wildcardToRegExp( q );\r\n return ( name ) => regex.test( name );\r\n }\r\n\r\n // default case, only check include\r\n return ( name ) => name.toLowerCase().includes( q.toLowerCase() );\r\n }\r\n\r\n _refreshContent( searchValue?: string, filter?: string )\r\n {\r\n const isCompactLayout = this.layout == AssetView.LAYOUT_COMPACT;\r\n const isListLayout = this.layout == AssetView.LAYOUT_LIST;\r\n\r\n this.filter = filter ?? ( this.filter ?? 'None' );\r\n this.searchValue = searchValue ?? ( this.searchValue ?? '' );\r\n this.content.innerHTML = '';\r\n this.content.className = `lexassetscontent${isCompactLayout ? ' compact' : ( isListLayout ? ' list' : '' )}`;\r\n\r\n if ( !this.currentData.length )\r\n {\r\n return;\r\n }\r\n\r\n const fr = new FileReader();\r\n const nameFilterFn = this._makeNameFilterFn( this.searchValue );\r\n\r\n const filteredData = this.currentData.filter( ( _i ) => {\r\n const typeMatch = this.filter !== 'None' ? _i.type.toLowerCase() === this.filter.toLowerCase() : true;\r\n const nameMatch = nameFilterFn( _i.id );\r\n return typeMatch && nameMatch;\r\n } );\r\n\r\n this._paginator?.setPages( Math.max( Math.ceil( filteredData.length / this.assetsPerPage ), 1 ) );\r\n\r\n // Show all data if using filters\r\n const start = this._paginator ? ( this._paginator.page - 1 ) * this.assetsPerPage : 0;\r\n const end = this._paginator ? Math.min( start + this.assetsPerPage, filteredData.length ) : filteredData.length;\r\n\r\n for ( let i = start; i < end; ++i )\r\n {\r\n let item = filteredData[i];\r\n\r\n if ( item.path )\r\n {\r\n LX.request( { url: item.path, dataType: 'blob', success: ( f: File ) => {\r\n item.metadata.bytesize = f.size;\r\n fr.readAsDataURL( f );\r\n fr.onload = ( e ) => {\r\n const target = e.currentTarget as any;\r\n item.src = target.result; // This is a base64 string...\r\n item.metadata.path = item.path;\r\n delete item.path;\r\n this._refreshContent( searchValue, filter );\r\n };\r\n } } );\r\n }\r\n else\r\n {\r\n item.domEl = this.addItem( item, undefined, false );\r\n }\r\n }\r\n\r\n if ( this.onRefreshContent )\r\n {\r\n this.onRefreshContent( searchValue, filter );\r\n }\r\n }\r\n\r\n _previewAsset( file: AssetViewItem )\r\n {\r\n if ( this.skipPreview )\r\n {\r\n return;\r\n }\r\n\r\n const is_base_64 = file.src && file.src.includes( 'data:image/' );\r\n\r\n file.metadata = file.metadata ?? {};\r\n\r\n this.previewPanel.clear();\r\n this.previewPanel.branch( 'Asset' );\r\n\r\n if ( file.type == 'image' || file.src )\r\n {\r\n const hasImage = [ 'png', 'jpg' ].indexOf( LX.getExtension( file.src ) ) > -1 || is_base_64;\r\n if ( hasImage )\r\n {\r\n this.previewPanel.addImage( null, file.src, { style: { width: '100%' } } );\r\n }\r\n }\r\n\r\n if ( file.metadata.lastModified && !file.metadata.lastModifiedDate )\r\n {\r\n file.metadata.lastModifiedDate = this._lastModifiedToStringDate( file.metadata.lastModified );\r\n }\r\n\r\n const options = { disabled: true };\r\n\r\n this.previewPanel.addText( 'Filename', file.id, null, options );\r\n if ( file.metadata.lastModifiedDate )\r\n {\r\n this.previewPanel.addText( 'Last Modified', file.metadata.lastModifiedDate, null, options );\r\n }\r\n if ( file.metadata.path || file.src )\r\n {\r\n this.previewPanel.addText( 'URL', file.metadata.path ? file.metadata.path : file.src, null, options );\r\n }\r\n this.previewPanel.addText( 'Path', this.path.join( '/' ), null, options );\r\n this.previewPanel.addText( 'Type', file.type, null, options );\r\n if ( file.metadata.bytesize )\r\n {\r\n this.previewPanel.addText( 'Size', LX.formatBytes( file.metadata.bytesize ), null, options );\r\n }\r\n if ( file.type == 'folder' )\r\n {\r\n this.previewPanel.addText( 'Files', file.children ? file.children.length.toString() : '0', null, options );\r\n }\r\n\r\n this.previewPanel.addSeparator();\r\n\r\n const previewActions = [ ...this.previewActions ];\r\n\r\n if ( !previewActions.length && file.type !== 'folder' )\r\n {\r\n // By default\r\n previewActions.push( {\r\n name: 'Download',\r\n callback: () => LX.downloadURL( file.src, file.id )\r\n } );\r\n }\r\n\r\n for ( let action of previewActions )\r\n {\r\n if ( action.type && action.type !== file.type || action.path && action.path !== this.path.join( '/' ) )\r\n {\r\n continue;\r\n }\r\n this.previewPanel.addButton( null, action.name, action.callback.bind( this, file ) );\r\n }\r\n\r\n this.previewPanel.merge();\r\n }\r\n\r\n _processDrop( e: DragEvent )\r\n {\r\n if ( !e.dataTransfer || !e.dataTransfer.files || e.dataTransfer.files.length == 0 )\r\n {\r\n return;\r\n }\r\n\r\n const fr = new FileReader();\r\n const num_files = e.dataTransfer.files.length;\r\n\r\n for ( let i = 0; i < e.dataTransfer.files.length; ++i )\r\n {\r\n const file = e.dataTransfer.files[i];\r\n\r\n const result = this.currentData.find( ( e ) => e.id === file.name );\r\n if ( result ) continue;\r\n\r\n fr.readAsDataURL( file );\r\n fr.onload = ( e ) => {\r\n let ext = file.name.substring( file.name.lastIndexOf( '.' ) + 1 ).toLowerCase();\r\n let type = null;\r\n\r\n switch ( ext )\r\n {\r\n case 'png':\r\n case 'jpg':\r\n type = 'image';\r\n break;\r\n case 'js':\r\n case 'css':\r\n type = 'script';\r\n break;\r\n case 'json':\r\n type = 'json';\r\n break;\r\n case 'obj':\r\n type = 'mesh';\r\n break;\r\n default:\r\n type = ext;\r\n break;\r\n }\r\n\r\n let item: AssetViewItem = {\r\n id: file.name,\r\n src: ( e.currentTarget as any ).result,\r\n type,\r\n children: [],\r\n metadata: {\r\n extension: ext,\r\n lastModified: file.lastModified,\r\n lastModifiedDate: this._lastModifiedToStringDate( file.lastModified ),\r\n unknownExtension: type == ext\r\n }\r\n };\r\n\r\n this.currentData.push( item );\r\n\r\n if ( i == ( num_files - 1 ) )\r\n {\r\n this._refreshContent();\r\n this.tree?.refresh(); // Refresh if tree exists\r\n }\r\n };\r\n }\r\n }\r\n\r\n _sortData( sortBy?: string, sortMode?: number )\r\n {\r\n sortBy = sortBy ?? ( this._lastSortBy ?? 'id' );\r\n sortMode = sortMode ?? this.sortMode;\r\n const sortDesc = sortMode === AssetView.CONTENT_SORT_DESC;\r\n this.currentData = this.currentData.sort( ( a: any, b: any ) => {\r\n var r = sortDesc ? b[sortBy].localeCompare( a[sortBy] ) : a[sortBy].localeCompare( b[sortBy] );\r\n if ( r == 0 ) r = sortDesc ? b['id'].localeCompare( a['id'] ) : a['id'].localeCompare( b['id'] );\r\n return r;\r\n } );\r\n\r\n this._lastSortBy = sortBy;\r\n this.sortMode = sortMode;\r\n this.toolsPanel.refresh();\r\n this._refreshContent();\r\n }\r\n\r\n _enterFolder( folderItem: AssetViewItem | undefined, storeCurrent: boolean = true )\r\n {\r\n if ( !folderItem )\r\n {\r\n return;\r\n }\r\n\r\n const child = this.currentData[0];\r\n const sameFolder = child?.parent?.id === folderItem.id;\r\n\r\n if ( storeCurrent )\r\n {\r\n this.prevData.push( this.currentFolder ?? {\r\n id: '/',\r\n children: this.data,\r\n type: 'root',\r\n metadata: {}\r\n } );\r\n }\r\n\r\n let mustRefresh: boolean = !sameFolder;\r\n\r\n const onEnterFolder = this._callbacks['enterFolder'];\r\n if ( onEnterFolder !== undefined )\r\n {\r\n const event: AssetViewEvent = {\r\n type: 'enter_folder',\r\n to: folderItem,\r\n userInitiated: true\r\n };\r\n\r\n const r: any = onEnterFolder( event ) as boolean;\r\n mustRefresh = mustRefresh || r;\r\n }\r\n\r\n // Update this after the event since the user might have added or modified the data\r\n this.currentFolder = folderItem;\r\n this.currentData = this.currentFolder?.children ?? [];\r\n\r\n if ( mustRefresh )\r\n {\r\n this._processData( this.data );\r\n this._refreshContent();\r\n }\r\n\r\n this._updatePath();\r\n }\r\n\r\n _removeItemFromParent( item: AssetViewItem )\r\n {\r\n const oldParent = item.parent;\r\n if ( oldParent )\r\n {\r\n const idx = oldParent.children?.indexOf( item ) ?? -1;\r\n if ( idx < 0 )\r\n {\r\n return false;\r\n }\r\n oldParent.children?.splice( idx, 1 );\r\n }\r\n else\r\n {\r\n const oldDir = item.dir;\r\n if ( oldDir )\r\n {\r\n const idx = oldDir.indexOf( item );\r\n if ( idx < 0 )\r\n {\r\n return false;\r\n }\r\n\r\n oldDir.splice( idx, 1 );\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n _requestDeleteItem( item: AssetViewItem )\r\n {\r\n const onBeforeDelete = this._callbacks['beforeDelete'];\r\n const onDelete = this._callbacks['delete'];\r\n\r\n const resolve = ( ...args: any[] ) => {\r\n this._deleteItem( item );\r\n const event: AssetViewEvent = {\r\n type: 'delete',\r\n items: [ item ],\r\n userInitiated: true\r\n };\r\n if ( onDelete ) onDelete( event, ...args );\r\n };\r\n\r\n if ( onBeforeDelete )\r\n {\r\n const event: AssetViewEvent = {\r\n type: 'delete',\r\n items: [ item ],\r\n userInitiated: true\r\n };\r\n\r\n onBeforeDelete( event, resolve );\r\n }\r\n else\r\n {\r\n resolve();\r\n }\r\n }\r\n\r\n _deleteItem( item: AssetViewItem )\r\n {\r\n const ok = this._removeItemFromParent( item );\r\n if ( !ok )\r\n {\r\n console.error( '[AssetView Error] Cannot delete. Item not found.' );\r\n return;\r\n }\r\n\r\n this._refreshContent( this.searchValue, this.filter );\r\n this.tree?.refresh();\r\n this.previewPanel?.clear();\r\n }\r\n\r\n _requestMoveItemToFolder( item: AssetViewItem, folder: AssetViewItem )\r\n {\r\n const onBeforeMove = this._callbacks['beforeMove'];\r\n const onMove = this._callbacks['move'];\r\n\r\n const resolve = ( ...args: any[] ) => {\r\n this._moveItemToFolder( item, folder );\r\n const event: AssetViewEvent = {\r\n type: 'move',\r\n items: [ item ],\r\n from: item.parent,\r\n to: folder,\r\n userInitiated: true\r\n };\r\n if ( onMove ) onMove( event, ...args );\r\n };\r\n\r\n if ( onBeforeMove )\r\n {\r\n const event: AssetViewEvent = {\r\n type: 'move',\r\n items: [ item ],\r\n from: item.parent,\r\n to: folder,\r\n userInitiated: true\r\n };\r\n\r\n onBeforeMove( event, resolve );\r\n }\r\n else\r\n {\r\n resolve();\r\n }\r\n }\r\n\r\n _moveItemToFolder( item: AssetViewItem, folder: AssetViewItem )\r\n {\r\n const ok = this._removeItemFromParent( item );\r\n if ( !ok )\r\n {\r\n console.error( '[AssetView Error] Cannot move. Item not found.' );\r\n return;\r\n }\r\n\r\n folder.children = folder.children ?? [];\r\n folder.children.push( item );\r\n item.parent = folder;\r\n item.dir = folder.children;\r\n\r\n this._refreshContent();\r\n this.tree?.refresh();\r\n this._moveItemDialog?.destroy();\r\n this._movingItem = undefined;\r\n }\r\n\r\n _moveItem( item: AssetViewItem, defaultFolder?: AssetViewItem | AssetViewItem[] )\r\n {\r\n if ( this._moveItemDialog )\r\n {\r\n this._moveItemDialog.destroy();\r\n }\r\n\r\n this._movingItem = item;\r\n\r\n let targetFolder: any = null;\r\n let bcContainer: HTMLElement;\r\n\r\n const _openFolder = function( p: any, container: any, updateBc: boolean = true )\r\n {\r\n container.innerHTML = '';\r\n\r\n targetFolder = p;\r\n\r\n for ( let pi of ( targetFolder.children ?? targetFolder ) )\r\n {\r\n const row = LX.makeContainer( [ '100%', 'auto' ], 'flex flex-row px-1 items-center', '', container );\r\n const isFolder = pi.type === 'folder';\r\n\r\n const rowItem = LX.makeContainer( [ '100%', 'auto' ],\r\n `move-item flex flex-row gap-1 py-1 px-3 cursor-pointer ${\r\n isFolder ? 'fg-primary font-medium' : 'fg-quinary'\r\n } rounded-xxl ${isFolder ? 'hover:bg-secondary' : 'hover:bg-primary'}`,\r\n `${isFolder ? LX.makeIcon( 'FolderOpen', { svgClass: '' } ).innerHTML : ''}${pi.id}`, row );\r\n\r\n if ( isFolder )\r\n {\r\n rowItem.addEventListener( 'click', () => {\r\n container.querySelectorAll( '.move-item' ).forEach( ( el: any ) =>\r\n LX.removeClass( el, 'bg-quinary' )\r\n );\r\n LX.addClass( rowItem, 'bg-quinary' );\r\n targetFolder = pi;\r\n } );\r\n\r\n const fPathButton = new LX.Button( null, 'FPathButton', () => {\r\n _openFolder( pi, container );\r\n }, { icon: 'ChevronRight', className: 'ml-auto h-8', buttonClass: 'bg-none hover:bg-secondary' } );\r\n row.appendChild( fPathButton.root );\r\n }\r\n }\r\n\r\n if ( !updateBc )\r\n {\r\n return;\r\n }\r\n\r\n const path = [];\r\n\r\n if ( targetFolder && targetFolder.parent )\r\n {\r\n path.push( targetFolder.id );\r\n\r\n const _pushParentsId = ( i: AssetViewItem | undefined ) => {\r\n if ( !i ) return;\r\n path.push( i.parent ? i.id : '@' );\r\n _pushParentsId( i.parent );\r\n };\r\n\r\n _pushParentsId( targetFolder.parent );\r\n }\r\n else\r\n {\r\n path.push( '@' );\r\n }\r\n\r\n bcContainer.innerHTML = '';\r\n bcContainer.appendChild( LX.makeBreadcrumb( path.reverse().map( ( p ) => {\r\n return { title: p };\r\n } ), {\r\n maxItems: 4,\r\n separatorIcon: 'ChevronRight'\r\n } ) );\r\n };\r\n\r\n this._moveItemDialog = new LX.Dialog( `Moving: ${item.id}`, ( p: typeof Panel ) => {\r\n const area = new LX.Area( { className: 'flex flex-col rounded-lg' } );\r\n p.attach( area );\r\n\r\n const content = LX.makeContainer( [ 'auto', '100%' ],\r\n 'flex flex-auto-fill flex-col overflow-scroll py-2 gap-1', `` );\r\n\r\n {\r\n const headerPanel = area.addPanel( { className: 'p-2 border-bottom flex flex-auto', height: 'auto' } );\r\n headerPanel.sameLine( 2, 'w-full' );\r\n headerPanel.addButton( null, 'BackButton', () => {\r\n if ( targetFolder && targetFolder.parent ) _openFolder( targetFolder.parent, content );\r\n }, { icon: 'ArrowLeft', title: 'Back', tooltip: true, className: 'flex-auto',\r\n buttonClass: 'bg-none hover:bg-secondary' } );\r\n\r\n bcContainer = LX.makeElement( 'div' );\r\n\r\n headerPanel.addContent( 'ITEM_MOVE_PATH', bcContainer, { signal: '@item_move_path',\r\n className: 'flex-auto-fill' } );\r\n }\r\n\r\n area.attach( content );\r\n\r\n _openFolder( defaultFolder ?? this.data, content );\r\n\r\n {\r\n const footerPanel = area.addPanel( { className: 'p-2 border-top flex flex-auto justify-between',\r\n height: 'auto' } );\r\n footerPanel.addButton( null, 'NewFolderButton', () => {\r\n this._requestCreateFolder( targetFolder );\r\n }, { width: 'auto', icon: 'FolderPlus', title: 'Create Folder', tooltip: true, className: 'ml-2',\r\n buttonClass: 'bg-none hover:bg-secondary' } );\r\n\r\n footerPanel.sameLine( 2, 'mr-2' );\r\n footerPanel.addButton( null, 'Cancel', () => {\r\n this._moveItemDialog.close();\r\n }, { buttonClass: 'bg-none fg-error' } );\r\n footerPanel.addButton( null, 'Move', () => {\r\n this._requestMoveItemToFolder( item, targetFolder );\r\n }, { className: '', buttonClass: 'contrast' } );\r\n }\r\n }, { modal: true, size: [ '616px', '500px' ], closable: true, onBeforeClose: () => {\r\n delete this._moveItemDialog;\r\n } } );\r\n }\r\n\r\n _requestCloneItem( item: AssetViewItem )\r\n {\r\n if ( item.type === 'folder' )\r\n {\r\n console.error( '[AssetView Error] Cannot clone a folder.' );\r\n return;\r\n }\r\n\r\n const dir = item.dir ?? [];\r\n const idx = dir.indexOf( item );\r\n if ( idx < 0 )\r\n {\r\n console.error( '[AssetView Error] Cannot clone. Item not found.' );\r\n return false;\r\n }\r\n\r\n const onBeforeClone = this._callbacks['beforeClone'];\r\n const onClone = this._callbacks['clone'];\r\n\r\n const resolve = ( ...args: any[] ) => {\r\n const clonedItem = this._cloneItem( item );\r\n const event: AssetViewEvent = {\r\n type: 'clone',\r\n items: [ item ],\r\n result: [ clonedItem ],\r\n userInitiated: true\r\n };\r\n if ( onClone ) onClone( event, ...args );\r\n };\r\n\r\n if ( onBeforeClone )\r\n {\r\n const event: AssetViewEvent = {\r\n type: 'clone',\r\n items: [ item ],\r\n userInitiated: true\r\n };\r\n\r\n onBeforeClone( event, resolve );\r\n }\r\n else\r\n {\r\n resolve();\r\n }\r\n }\r\n\r\n _cloneItem( item: AssetViewItem ): AssetViewItem\r\n {\r\n const parent = item.parent;\r\n const dir = item.dir ?? [];\r\n const idx = dir.indexOf( item );\r\n\r\n delete item.domEl;\r\n delete item.dir;\r\n delete item.parent;\r\n\r\n const newItem: AssetViewItem = LX.deepCopy( item );\r\n newItem.id = this._getClonedName( item.id, dir );\r\n newItem.dir = item.dir = dir;\r\n newItem.parent = item.parent = parent;\r\n newItem.metadata.uid = LX.guidGenerator(); // generate new uid\r\n\r\n dir.splice( idx + 1, 0, newItem );\r\n\r\n this._refreshContent( this.searchValue, this.filter );\r\n\r\n return newItem;\r\n }\r\n\r\n _getClonedName( originalName: string, siblings: any[] ): string\r\n {\r\n const dotIndex = originalName.lastIndexOf( '.' );\r\n let base = originalName;\r\n let ext = '';\r\n\r\n if ( dotIndex > 0 )\r\n {\r\n base = originalName.substring( 0, dotIndex );\r\n ext = originalName.substring( dotIndex ); // includes the dot\r\n }\r\n\r\n // core name without (N)\r\n const match = base.match( /^(.*)\\s\\((\\d+)\\)$/ );\r\n if ( match )\r\n {\r\n base = match[1];\r\n }\r\n\r\n let maxN = -1;\r\n\r\n for ( const s of siblings )\r\n {\r\n if ( !s.id ) continue;\r\n\r\n let sBase = s.id;\r\n let sExt = '';\r\n\r\n const sDot = sBase.lastIndexOf( '.' );\r\n if ( sDot > 0 )\r\n {\r\n sExt = sBase.substring( sDot );\r\n sBase = sBase.substring( 0, sDot );\r\n }\r\n\r\n // Only compare same extension and same base!\r\n if ( sExt !== ext ) continue;\r\n\r\n const m = sBase.match( new RegExp( '^' + LX.escapeRegExp( base ) + '\\\\s\\\\((\\\\d+)\\\\)$' ) );\r\n if ( m )\r\n {\r\n const num = parseInt( m[1] );\r\n if ( num > maxN ) maxN = num;\r\n }\r\n else if ( sBase === base )\r\n {\r\n // Base name exists without number\r\n maxN = Math.max( maxN, 0 );\r\n }\r\n }\r\n\r\n return maxN === -1 ? originalName : `${base} (${maxN + 1})${ext}`;\r\n }\r\n\r\n _requestRenameItem( item: AssetViewItem, newName: string )\r\n {\r\n const onBeforeRename = this._callbacks['beforeRename'];\r\n const onRename = this._callbacks['rename'];\r\n const oldName = item.id;\r\n\r\n const resolve = ( ...args: any[] ) => {\r\n this._renameItem( item, newName );\r\n const event: AssetViewEvent = {\r\n type: 'rename',\r\n items: [ item ],\r\n oldName,\r\n newName,\r\n userInitiated: true\r\n };\r\n if ( onRename ) onRename( event, ...args );\r\n };\r\n\r\n if ( onBeforeRename )\r\n {\r\n const event: AssetViewEvent = {\r\n type: 'rename',\r\n items: [ item ],\r\n oldName,\r\n newName,\r\n userInitiated: true\r\n };\r\n\r\n onBeforeRename( event, resolve );\r\n }\r\n else\r\n {\r\n resolve();\r\n }\r\n }\r\n\r\n _renameItem( item: AssetViewItem, newName: string )\r\n {\r\n const idx = this.currentData.indexOf( item );\r\n if ( idx < 0 )\r\n {\r\n return;\r\n }\r\n\r\n const wasSelected = LX.hasClass( item.domEl, 'selected' );\r\n const hoverTitle: HTMLElement | null = this.content.querySelector(\r\n `#floatingTitle_${item.id.replace( /\\s/g, '_' ).replaceAll( '.', '_' )}`\r\n );\r\n if ( hoverTitle ) hoverTitle.remove();\r\n\r\n item.domEl?.remove();\r\n item.id = newName;\r\n item.domEl = this.addItem( item, idx * 2 );\r\n\r\n if ( wasSelected )\r\n {\r\n this._previewAsset( item );\r\n }\r\n\r\n this.tree?.refresh();\r\n\r\n this._processData( this.data );\r\n }\r\n\r\n _renameItemPopover( item: AssetViewItem )\r\n {\r\n const idx = this.currentData.indexOf( item );\r\n if ( idx < 0 )\r\n {\r\n return;\r\n }\r\n\r\n const onRename = ( value: string ) => {\r\n p.destroy();\r\n this._requestRenameItem( item, value );\r\n };\r\n\r\n let newName = item.id;\r\n const panel = new LX.Panel();\r\n panel.addText( null, item.id, ( v: string, e: any ) => {\r\n newName = v;\r\n if ( e.constructor === KeyboardEvent ) onRename( v );\r\n } );\r\n panel.addButton( null, 'Save', () => {\r\n onRename( newName );\r\n }, { buttonClass: 'contrast' } );\r\n\r\n const p = new LX.Popover( item.domEl, [ panel ], { align: 'center', side: 'bottom', sideOffset: -128 } );\r\n }\r\n\r\n _requestCreateFolder( folder?: AssetViewItem )\r\n {\r\n folder = folder ?? this.currentFolder;\r\n\r\n if ( !folder )\r\n {\r\n return;\r\n }\r\n\r\n const onBeforeCreateFolder = this._callbacks['beforeCreateFolder'];\r\n const onCreateFolder = this._callbacks['createFolder'];\r\n\r\n const resolve = ( ...args: any[] ) => {\r\n const newFolder = this._createFolder( folder );\r\n const event: AssetViewEvent = {\r\n type: 'create-folder',\r\n result: [ newFolder ],\r\n where: folder,\r\n userInitiated: true\r\n };\r\n if ( onCreateFolder ) onCreateFolder( event, ...args );\r\n };\r\n\r\n if ( onBeforeCreateFolder )\r\n {\r\n const event: AssetViewEvent = {\r\n type: 'create-folder',\r\n where: folder,\r\n userInitiated: true\r\n };\r\n\r\n onBeforeCreateFolder( event, resolve );\r\n }\r\n else\r\n {\r\n resolve();\r\n }\r\n }\r\n\r\n _createFolder( folder?: AssetViewItem ): AssetViewItem\r\n {\r\n folder = folder ?? this.currentFolder;\r\n\r\n if ( !folder )\r\n {\r\n throw ( '_createFolder: Something went wrong!' );\r\n }\r\n\r\n const newFolder = {\r\n id: this._getClonedName( 'New Folder', folder.children ),\r\n type: 'folder',\r\n children: [],\r\n parent: this.currentFolder,\r\n metadata: {}\r\n };\r\n\r\n folder.children.push( newFolder );\r\n\r\n this._refreshContent();\r\n this.tree?.refresh();\r\n\r\n if ( this._moveItemDialog && this._movingItem )\r\n {\r\n this._moveItem( this._movingItem, folder );\r\n }\r\n\r\n return folder;\r\n }\r\n\r\n _openScriptInEditor( script: any )\r\n {\r\n if ( this._scriptCodeDialog )\r\n {\r\n this._scriptCodeDialog.destroy();\r\n }\r\n\r\n this._scriptCodeDialog = new LX.Dialog( null, ( p: typeof Panel ) => {\r\n const area = new LX.Area( { className: 'rounded-lg' } );\r\n p.attach( area );\r\n let editor = new LX.CodeEditor( area, {\r\n allowAddScripts: false,\r\n files: [ script.src ]\r\n } );\r\n }, { size: [ '50%', '600px' ], closable: true, onBeforeClose: () => {\r\n delete this._scriptCodeDialog;\r\n } } );\r\n }\r\n\r\n _setAssetsPerPage( n: number )\r\n {\r\n this._assetsPerPage = n;\r\n this._refreshContent();\r\n }\r\n\r\n _lastModifiedToStringDate( lm: number ): string\r\n {\r\n const d = new Date( lm ).toLocaleString();\r\n return d.substring( 0, d.indexOf( ',' ) );\r\n }\r\n}\r\n\r\nLX.AssetView = AssetView;\r\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
// This is a generated file. Do not edit.
|
|
2
|
+
import { LX } from '../core/Namespace.js';
|
|
3
|
+
|
|
4
|
+
// Audio.ts @jxarco
|
|
5
|
+
if (!LX) {
|
|
6
|
+
throw ('Missing LX namespace!');
|
|
7
|
+
}
|
|
8
|
+
LX.extensions.push('Audio');
|
|
9
|
+
const Panel = LX.Panel;
|
|
10
|
+
const BaseComponent = LX.BaseComponent;
|
|
11
|
+
const ComponentType = LX.ComponentType;
|
|
12
|
+
const IEvent = LX.IEvent;
|
|
13
|
+
/**
|
|
14
|
+
* @class Knob
|
|
15
|
+
* @description Knob Component
|
|
16
|
+
*/
|
|
17
|
+
class Knob extends BaseComponent {
|
|
18
|
+
constructor(name, value, min, max, callback, options = {}) {
|
|
19
|
+
if (value.constructor == Number) {
|
|
20
|
+
value = LX.clamp(value, min, max);
|
|
21
|
+
value = options.precision ? LX.round(value, options.precision) : value;
|
|
22
|
+
}
|
|
23
|
+
super(ComponentType.KNOB, name, value, options);
|
|
24
|
+
this.onGetValue = () => {
|
|
25
|
+
return innerKnobCircle.value;
|
|
26
|
+
};
|
|
27
|
+
this.onSetValue = (newValue, skipCallback, event) => {
|
|
28
|
+
innerSetValue(newValue);
|
|
29
|
+
LX.BaseComponent._dispatchEvent(innerKnobCircle, 'change', skipCallback);
|
|
30
|
+
};
|
|
31
|
+
this.onResize = () => {
|
|
32
|
+
const realNameWidth = this.root.domName?.style.width ?? '0px';
|
|
33
|
+
container.style.width = `calc( 100% - ${realNameWidth})`;
|
|
34
|
+
};
|
|
35
|
+
const snapEnabled = options.snap && options.snap.constructor == Number;
|
|
36
|
+
const ticks = [];
|
|
37
|
+
if (snapEnabled) {
|
|
38
|
+
const range = (max - min) / options.snap;
|
|
39
|
+
for (let i = 0; i < (options.snap + 1); ++i) {
|
|
40
|
+
ticks.push(min + (i * range));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
var container = document.createElement('div');
|
|
44
|
+
container.className = 'lexknob';
|
|
45
|
+
LX.addClass(container, options.size);
|
|
46
|
+
LX.addClass(container, snapEnabled ? 'show-ticks' : null);
|
|
47
|
+
let knobCircle = document.createElement('div');
|
|
48
|
+
knobCircle.className = 'knobcircle';
|
|
49
|
+
if (snapEnabled) {
|
|
50
|
+
knobCircle.style.setProperty('--knob-snap-mark', (270 / options.snap) + 'deg');
|
|
51
|
+
}
|
|
52
|
+
let innerKnobCircle = document.createElement('div');
|
|
53
|
+
innerKnobCircle.className = 'innerknobcircle';
|
|
54
|
+
innerKnobCircle.min = min;
|
|
55
|
+
innerKnobCircle.max = max;
|
|
56
|
+
knobCircle.appendChild(innerKnobCircle);
|
|
57
|
+
let knobMarker = document.createElement('div');
|
|
58
|
+
knobMarker.className = 'knobmarker';
|
|
59
|
+
innerKnobCircle.appendChild(knobMarker);
|
|
60
|
+
innerKnobCircle.value = innerKnobCircle.iValue = value;
|
|
61
|
+
let mustSnap = false;
|
|
62
|
+
let innerSetValue = function (v) {
|
|
63
|
+
// Convert val between (-135 and 135)
|
|
64
|
+
const angle = LX.remapRange(v, innerKnobCircle.min, innerKnobCircle.max, -135, 135.0);
|
|
65
|
+
innerKnobCircle.style.rotate = angle + 'deg';
|
|
66
|
+
innerKnobCircle.value = v;
|
|
67
|
+
};
|
|
68
|
+
const angle = LX.remapRange(value, min, max, -135, 135.0);
|
|
69
|
+
innerKnobCircle.style.rotate = angle + 'deg';
|
|
70
|
+
if (options.disabled) {
|
|
71
|
+
LX.addClass(container, 'disabled');
|
|
72
|
+
}
|
|
73
|
+
innerKnobCircle.addEventListener('change', (e) => {
|
|
74
|
+
const knob = e.target;
|
|
75
|
+
const skipCallback = e.detail;
|
|
76
|
+
if (mustSnap) {
|
|
77
|
+
knob.value = ticks.reduce((prev, curr) => Math.abs(curr - knob.value) < Math.abs(prev - knob.value) ? curr : prev);
|
|
78
|
+
}
|
|
79
|
+
let val = knob.value = LX.clamp(knob.value, knob.min, knob.max);
|
|
80
|
+
val = options.precision ? LX.round(val, options.precision) : val;
|
|
81
|
+
innerSetValue(val);
|
|
82
|
+
// Reset button (default value)
|
|
83
|
+
if (!skipCallback) {
|
|
84
|
+
let btn = this.root.querySelector('.lexcomponentname .lexicon');
|
|
85
|
+
if (btn)
|
|
86
|
+
btn.style.display = val != innerKnobCircle.iValue ? 'block' : 'none';
|
|
87
|
+
if (!(snapEnabled && !mustSnap)) {
|
|
88
|
+
this._trigger(new IEvent(name, val, e), callback);
|
|
89
|
+
mustSnap = false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}, { passive: false });
|
|
93
|
+
// Add drag input
|
|
94
|
+
innerKnobCircle.addEventListener('mousedown', innerMouseDown);
|
|
95
|
+
var that = this;
|
|
96
|
+
function innerMouseDown(e) {
|
|
97
|
+
if (document.activeElement == innerKnobCircle || options.disabled) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
var doc = that.root.ownerDocument;
|
|
101
|
+
doc.addEventListener('mousemove', innerMouseMove);
|
|
102
|
+
doc.addEventListener('mouseup', innerMouseUp);
|
|
103
|
+
document.body.classList.add('noevents');
|
|
104
|
+
if (!document.pointerLockElement) {
|
|
105
|
+
container.requestPointerLock();
|
|
106
|
+
}
|
|
107
|
+
e.stopImmediatePropagation();
|
|
108
|
+
e.stopPropagation();
|
|
109
|
+
}
|
|
110
|
+
function innerMouseMove(e) {
|
|
111
|
+
let dt = -e.movementY;
|
|
112
|
+
if (dt != 0) {
|
|
113
|
+
let mult = options.step ?? 1;
|
|
114
|
+
if (e.shiftKey)
|
|
115
|
+
mult *= 10;
|
|
116
|
+
else if (e.altKey)
|
|
117
|
+
mult *= 0.1;
|
|
118
|
+
let new_value = innerKnobCircle.value - mult * dt;
|
|
119
|
+
innerKnobCircle.value = new_value;
|
|
120
|
+
LX.BaseComponent._dispatchEvent(innerKnobCircle, 'change');
|
|
121
|
+
}
|
|
122
|
+
e.stopPropagation();
|
|
123
|
+
e.preventDefault();
|
|
124
|
+
}
|
|
125
|
+
function innerMouseUp(e) {
|
|
126
|
+
var doc = that.root.ownerDocument;
|
|
127
|
+
doc.removeEventListener('mousemove', innerMouseMove);
|
|
128
|
+
doc.removeEventListener('mouseup', innerMouseUp);
|
|
129
|
+
document.body.classList.remove('noevents');
|
|
130
|
+
// Snap if necessary
|
|
131
|
+
if (snapEnabled) {
|
|
132
|
+
mustSnap = true;
|
|
133
|
+
LX.BaseComponent._dispatchEvent(innerKnobCircle, 'change');
|
|
134
|
+
}
|
|
135
|
+
if (document.pointerLockElement) {
|
|
136
|
+
document.exitPointerLock();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
container.appendChild(knobCircle);
|
|
140
|
+
this.root.appendChild(container);
|
|
141
|
+
LX.doAsync(this.onResize.bind(this));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
LX.Knob = Knob;
|
|
145
|
+
/**
|
|
146
|
+
* @method addKnob
|
|
147
|
+
* @param {String} name Component name
|
|
148
|
+
* @param {Number} value Knob value
|
|
149
|
+
* @param {Number} min Min Knob value
|
|
150
|
+
* @param {Number} max Max Knob value
|
|
151
|
+
* @param {Function} callback Callback function on change
|
|
152
|
+
* @param {*} options:
|
|
153
|
+
* minLabel (String): Label to show as min value
|
|
154
|
+
* maxLabel (String): Label to show as max value
|
|
155
|
+
*/
|
|
156
|
+
const panelProto = Panel.prototype;
|
|
157
|
+
panelProto.addKnob = function (name, value, min, max, callback, options = {}) {
|
|
158
|
+
const component = new Knob(name, value, min, max, callback, options);
|
|
159
|
+
return this._attachComponent(component);
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
export { Knob };
|
|
163
|
+
//# sourceMappingURL=Audio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Audio.js","sources":["../../src/extensions/Audio.ts"],"sourcesContent":["// Audio.ts @jxarco\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( 'Audio' );\r\n\r\nconst Panel = LX.Panel;\r\nconst BaseComponent = LX.BaseComponent;\r\nconst ComponentType = LX.ComponentType;\r\nconst IEvent = LX.IEvent;\r\n\r\n/**\r\n * @class Knob\r\n * @description Knob Component\r\n */\r\n\r\nexport class Knob extends BaseComponent\r\n{\r\n constructor( name: string, value: number, min: number, max: number, callback: any, options: any = {} )\r\n {\r\n if ( value.constructor == Number )\r\n {\r\n value = LX.clamp( value, min, max );\r\n value = options.precision ? LX.round( value, options.precision ) : value;\r\n }\r\n\r\n super( ComponentType.KNOB, name, value, options );\r\n\r\n this.onGetValue = () => {\r\n return innerKnobCircle.value;\r\n };\r\n\r\n this.onSetValue = ( newValue: any, skipCallback?: boolean, event?: any ) => {\r\n innerSetValue( newValue );\r\n LX.BaseComponent._dispatchEvent( innerKnobCircle, 'change', skipCallback );\r\n };\r\n\r\n this.onResize = () => {\r\n const realNameWidth = this.root.domName?.style.width ?? '0px';\r\n container.style.width = `calc( 100% - ${realNameWidth})`;\r\n };\r\n\r\n const snapEnabled = options.snap && options.snap.constructor == Number;\r\n const ticks: number[] = [];\r\n if ( snapEnabled )\r\n {\r\n const range = ( max - min ) / options.snap;\r\n for ( let i = 0; i < ( options.snap + 1 ); ++i )\r\n {\r\n ticks.push( min + ( i * range ) );\r\n }\r\n }\r\n\r\n var container: any = document.createElement( 'div' );\r\n container.className = 'lexknob';\r\n LX.addClass( container, options.size );\r\n LX.addClass( container, snapEnabled ? 'show-ticks' : null );\r\n\r\n let knobCircle = document.createElement( 'div' );\r\n knobCircle.className = 'knobcircle';\r\n if ( snapEnabled )\r\n {\r\n knobCircle.style.setProperty( '--knob-snap-mark', ( 270 / options.snap ) + 'deg' );\r\n }\r\n\r\n let innerKnobCircle: any = document.createElement( 'div' );\r\n innerKnobCircle.className = 'innerknobcircle';\r\n innerKnobCircle.min = min;\r\n innerKnobCircle.max = max;\r\n knobCircle.appendChild( innerKnobCircle );\r\n\r\n let knobMarker: any = document.createElement( 'div' );\r\n knobMarker.className = 'knobmarker';\r\n innerKnobCircle.appendChild( knobMarker );\r\n innerKnobCircle.value = innerKnobCircle.iValue = value;\r\n\r\n let mustSnap = false;\r\n let innerSetValue = function( v: number )\r\n {\r\n // Convert val between (-135 and 135)\r\n const angle = LX.remapRange( v, innerKnobCircle.min, innerKnobCircle.max, -135.0, 135.0 );\r\n innerKnobCircle.style.rotate = angle + 'deg';\r\n innerKnobCircle.value = v;\r\n };\r\n\r\n const angle = LX.remapRange( value, min, max, -135.0, 135.0 );\r\n innerKnobCircle.style.rotate = angle + 'deg';\r\n\r\n if ( options.disabled )\r\n {\r\n LX.addClass( container, 'disabled' );\r\n }\r\n\r\n innerKnobCircle.addEventListener( 'change', ( e: InputEvent ) => {\r\n const knob: any = e.target;\r\n\r\n const skipCallback = e.detail;\r\n\r\n if ( mustSnap )\r\n {\r\n knob.value = ticks.reduce( ( prev, curr ) =>\r\n Math.abs( curr - knob.value ) < Math.abs( prev - knob.value ) ? curr : prev\r\n );\r\n }\r\n\r\n let val = knob.value = LX.clamp( knob.value, knob.min, knob.max );\r\n val = options.precision ? LX.round( val, options.precision ) : val;\r\n\r\n innerSetValue( val );\r\n\r\n // Reset button (default value)\r\n if ( !skipCallback )\r\n {\r\n let btn = this.root.querySelector( '.lexcomponentname .lexicon' );\r\n if ( btn ) btn.style.display = val != innerKnobCircle.iValue ? 'block' : 'none';\r\n\r\n if ( !( snapEnabled && !mustSnap ) )\r\n {\r\n this._trigger( new IEvent( name, val, e ), callback );\r\n mustSnap = false;\r\n }\r\n }\r\n }, { passive: false } );\r\n\r\n // Add drag input\r\n\r\n innerKnobCircle.addEventListener( 'mousedown', innerMouseDown );\r\n\r\n var that = this;\r\n\r\n function innerMouseDown( e: MouseEvent )\r\n {\r\n if ( document.activeElement == innerKnobCircle || options.disabled )\r\n {\r\n return;\r\n }\r\n\r\n var doc = that.root.ownerDocument;\r\n doc.addEventListener( 'mousemove', innerMouseMove );\r\n doc.addEventListener( 'mouseup', innerMouseUp );\r\n document.body.classList.add( 'noevents' );\r\n\r\n if ( !document.pointerLockElement )\r\n {\r\n container.requestPointerLock();\r\n }\r\n\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n }\r\n\r\n function innerMouseMove( e: MouseEvent )\r\n {\r\n let dt = -e.movementY;\r\n\r\n if ( dt != 0 )\r\n {\r\n let mult = options.step ?? 1;\r\n if ( e.shiftKey ) mult *= 10;\r\n else if ( e.altKey ) mult *= 0.1;\r\n let new_value = innerKnobCircle.value - mult * dt;\r\n innerKnobCircle.value = new_value;\r\n LX.BaseComponent._dispatchEvent( innerKnobCircle, 'change' );\r\n }\r\n\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }\r\n\r\n function innerMouseUp( e: MouseEvent )\r\n {\r\n var doc = that.root.ownerDocument;\r\n doc.removeEventListener( 'mousemove', innerMouseMove );\r\n doc.removeEventListener( 'mouseup', innerMouseUp );\r\n document.body.classList.remove( 'noevents' );\r\n\r\n // Snap if necessary\r\n if ( snapEnabled )\r\n {\r\n mustSnap = true;\r\n LX.BaseComponent._dispatchEvent( innerKnobCircle, 'change' );\r\n }\r\n\r\n if ( document.pointerLockElement )\r\n {\r\n document.exitPointerLock();\r\n }\r\n }\r\n\r\n container.appendChild( knobCircle );\r\n\r\n this.root.appendChild( container );\r\n\r\n LX.doAsync( this.onResize.bind( this ) );\r\n }\r\n}\r\n\r\nLX.Knob = Knob;\r\n\r\n/**\r\n * @method addKnob\r\n * @param {String} name Component name\r\n * @param {Number} value Knob value\r\n * @param {Number} min Min Knob value\r\n * @param {Number} max Max Knob value\r\n * @param {Function} callback Callback function on change\r\n * @param {*} options:\r\n * minLabel (String): Label to show as min value\r\n * maxLabel (String): Label to show as max value\r\n */\r\n\r\nconst panelProto: any = Panel.prototype;\r\npanelProto.addKnob = function( name: string, value: number, min: number, max: number, callback: any, options: any = {} )\r\n{\r\n const component = new Knob( name, value, min, max, callback, options );\r\n return this._attachComponent( component );\r\n};\r\n"],"names":[],"mappings":"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"}
|