lexgui 8.2.4 → 8.3.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/build/components/NodeTree.d.ts +1 -1
- package/build/components/Tabs.d.ts +1 -0
- package/build/core/Namespace.js +1 -1
- package/build/core/Namespace.js.map +1 -1
- package/build/extensions/AssetView.d.ts +3 -2
- package/build/extensions/AssetView.js +1433 -1404
- package/build/extensions/AssetView.js.map +1 -1
- package/build/extensions/CodeEditor.d.ts +428 -325
- package/build/extensions/CodeEditor.js +3768 -4637
- package/build/extensions/CodeEditor.js.map +1 -1
- package/build/extensions/DocMaker.d.ts +1 -1
- package/build/extensions/DocMaker.js +363 -354
- package/build/extensions/DocMaker.js.map +1 -1
- package/build/extensions/Timeline.d.ts +2 -2
- package/build/extensions/Timeline.js +28 -15
- package/build/extensions/Timeline.js.map +1 -1
- package/build/extensions/VideoEditor.d.ts +1 -1
- package/build/extensions/VideoEditor.js +15 -7
- package/build/extensions/VideoEditor.js.map +1 -1
- package/build/extensions/index.js +1 -1
- package/build/lexgui.all.js +6202 -6929
- package/build/lexgui.all.js.map +1 -1
- package/build/lexgui.all.min.js +1 -1
- package/build/lexgui.all.module.js +6202 -6930
- package/build/lexgui.all.module.js.map +1 -1
- package/build/lexgui.all.module.min.js +1 -1
- package/build/lexgui.css +160 -85
- package/build/lexgui.js +4536 -241
- package/build/lexgui.js.map +1 -1
- package/build/lexgui.min.css +1 -1
- package/build/lexgui.min.js +1 -1
- package/build/lexgui.module.js +4536 -241
- package/build/lexgui.module.js.map +1 -1
- package/build/lexgui.module.min.js +1 -1
- package/changelog.md +44 -1
- package/examples/asset-view.html +29 -2
- package/examples/code-editor.html +88 -16
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocMaker.js","sources":["../../src/extensions/DocMaker.ts"],"sourcesContent":["// DocMaker.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( 'DocMaker' );\r\n\r\nconst CPP_KEY_WORDS = [ 'int', 'float', 'double', 'bool', 'char', 'wchar_t', 'const', 'static_cast', 'dynamic_cast', 'new', 'delete', 'void', 'true',\r\n 'false', 'auto', 'struct', 'typedef', 'nullptr', 'NULL', 'unsigned', 'namespace', 'auto' ];\r\nconst CLASS_WORDS = [ 'uint32_t', 'uint64_t', 'uint8_t' ];\r\nconst STATEMENT_WORDS = [ 'for', 'if', 'else', 'return', 'continue', 'break', 'case', 'switch', 'while', 'import', 'from', 'await' ];\r\n\r\nconst JS_KEY_WORDS = [ 'var', 'let', 'const', 'static', 'function', 'null', 'undefined', 'new', 'delete', 'true', 'false', 'NaN', 'this' ];\r\nconst HTML_ATTRIBUTES = [ 'html', 'charset', 'rel', 'src', 'href', 'crossorigin', 'type', 'lang' ];\r\nconst HTML_TAGS = [ 'DOCTYPE', 'html', 'head', 'body', 'title', 'base', 'link', 'meta', 'style', 'main', 'section', 'nav', 'article', 'aside',\r\n 'header', 'footer', 'address', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'hr', 'pre', 'blockquote', 'ol', 'ul', 'li', 'dl', 'dt', 'dd', 'figure',\r\n 'figcaption', 'div', 'a', 'abbr', 'b', 'bdi', 'bdo', 'br', 'cite', 'code', 'data', 'dfn', 'em', 'i', 'kbd', 'mark', 'q', 'rp', 'rt', 'ruby', 's',\r\n 'samp', 'small', 'span', 'strong', 'sub', 'sup', 'time', 'u', 'var', 'wbr', 'img', 'audio', 'video', 'source', 'track', 'picture', 'map', 'area',\r\n 'canvas', 'iframe', 'embed', 'object', 'param', 'form', 'label', 'input', 'button', 'select', 'datalist', 'optgroup', 'option', 'textarea',\r\n 'output', 'progress', 'meter', 'fieldset', 'legend', 'table', 'caption', 'colgroup', 'col', 'tbody', 'thead', 'tfoot', 'tr', 'td', 'th',\r\n 'details', 'summary', 'dialog', 'script', 'noscript', 'template' ];\r\n\r\nexport class DocMaker\r\n{\r\n root: Element;\r\n _listQueued: Element | undefined = undefined;\r\n _lastDomTarget: Element | undefined = undefined;\r\n\r\n constructor( element?: Element )\r\n {\r\n this.root = element ?? document.body;\r\n }\r\n\r\n setDomTarget( element: Element )\r\n {\r\n this.root = element;\r\n }\r\n\r\n lineBreak( target?: Element )\r\n {\r\n target = target ?? this.root;\r\n target.appendChild( document.createElement( 'br' ) );\r\n }\r\n\r\n header( string: string, type: string, id: string, options: any = {} )\r\n {\r\n console.assert( string !== undefined && type !== undefined );\r\n\r\n if ( options.collapsable )\r\n {\r\n const collapsible = LX.makeElement( 'div', LX.mergeClass( 'my-4 px-6 cursor-pointer', options.className ),\r\n `<${type} id=\"${id ?? ''}\">${string}</${type}>`, this.root );\r\n const collapsibleContent = LX.makeContainer( [ '100%', 'auto' ], 'px-4', '', this.root );\r\n LX.listen( collapsible, 'click', () => collapsible.querySelector( 'a.collapser' ).click() );\r\n this._lastDomTarget = this.root;\r\n this.setDomTarget( collapsibleContent );\r\n\r\n if ( options.collapsableContentCallback )\r\n {\r\n options.collapsableContentCallback();\r\n }\r\n\r\n LX.makeCollapsible( collapsible, collapsibleContent, null, { collapsed: options.collapsed ?? false } );\r\n this.setDomTarget( this._lastDomTarget );\r\n delete this._lastDomTarget;\r\n return collapsible;\r\n }\r\n\r\n const header = document.createElement( type );\r\n header.className = options.className ?? '';\r\n header.innerHTML = string;\r\n if ( id ) header.id = id;\r\n this.root.appendChild( header );\r\n return header;\r\n }\r\n\r\n paragraph( string: string, sup: boolean = false, className: string = '' )\r\n {\r\n console.assert( string !== undefined );\r\n let paragraph = document.createElement( sup ? 'sup' : 'p' );\r\n paragraph.className = LX.mergeClass( 'leading-relaxed', className );\r\n paragraph.innerHTML = string;\r\n this.root.appendChild( paragraph );\r\n return paragraph;\r\n }\r\n\r\n code( text: string, language: string = 'js' )\r\n {\r\n console.assert( text !== undefined );\r\n\r\n text.replaceAll( '<', '<' );\r\n text.replaceAll( '>', '>' );\r\n\r\n let highlight = '';\r\n let content = '';\r\n\r\n const getHTML = ( h: string, c: string ) => {\r\n return `<span class=\"${h}\">${c}</span>`;\r\n };\r\n\r\n for ( let i = 0; i < text.length; ++i )\r\n {\r\n const char = text[i];\r\n const string = text.substring( i );\r\n\r\n const endLineIdx = string.indexOf( '\\n' );\r\n const line = string.substring( 0, endLineIdx > -1 ? endLineIdx : undefined );\r\n\r\n if ( char == '@' )\r\n {\r\n const str = line.substring( 1 );\r\n\r\n if ( !( str.indexOf( '@' ) > -1 ) && !( str.indexOf( '[' ) > -1 ) )\r\n {\r\n continue;\r\n }\r\n\r\n let html = null;\r\n\r\n const tagIndex = str.indexOf( '@' );\r\n const skipTag = str[tagIndex - 1] == '|';\r\n\r\n // Highlight is specified\r\n if ( text[i + 1] == '[' )\r\n {\r\n highlight = str.substring( 1, 4 );\r\n content = str.substring( 5, tagIndex );\r\n\r\n if ( skipTag )\r\n {\r\n const newString = str.substring( 6 + content.length );\r\n const preContent = content;\r\n const postContent = newString.substring( 0, newString.indexOf( '@' ) );\r\n const finalContent = preContent.substring( 0, preContent.length - 1 ) + '@' + postContent;\r\n html = getHTML( highlight, finalContent );\r\n\r\n const ogContent = preContent + '@' + postContent;\r\n text = text.replace( `@[${highlight}]${ogContent}@`, html );\r\n }\r\n else\r\n {\r\n html = getHTML( highlight, content );\r\n text = text.replace( `@[${highlight}]${content}@`, html );\r\n }\r\n }\r\n else\r\n {\r\n content = str.substring( 0, tagIndex );\r\n if ( skipTag )\r\n {\r\n const preContent = str.substring( 0, str.indexOf( '@' ) - 1 );\r\n content = str.substring( preContent.length + 1 );\r\n content = preContent + content.substring( 0, content.substring( 1 ).indexOf( '@' ) + 1 );\r\n text = text.substr( 0, i ) + '@' + content + '@' + text.substr( i + content.length + 3 );\r\n }\r\n\r\n if ( language == 'cpp' && CPP_KEY_WORDS.includes( content ) )\r\n {\r\n highlight = 'kwd';\r\n }\r\n else if ( language == 'js' && JS_KEY_WORDS.includes( content ) )\r\n {\r\n highlight = 'kwd';\r\n }\r\n else if ( CLASS_WORDS.includes( content ) )\r\n {\r\n highlight = 'cls';\r\n }\r\n else if ( STATEMENT_WORDS.includes( content ) )\r\n {\r\n highlight = 'lit';\r\n }\r\n else if ( HTML_TAGS.includes( content ) )\r\n {\r\n highlight = 'tag';\r\n }\r\n else if ( HTML_ATTRIBUTES.includes( content ) )\r\n {\r\n highlight = 'atn';\r\n }\r\n else if ( ( content[0] == '\"' && content[content.length - 1] == '\"' )\r\n || ( content[0] == \"'\" && content[content.length - 1] == \"'\" )\r\n || ( content[0] == '`' && content[content.length - 1] == '`' ) )\r\n {\r\n highlight = 'str';\r\n }\r\n else if ( !Number.isNaN( parseFloat( content ) ) )\r\n {\r\n highlight = 'dec';\r\n }\r\n else\r\n {\r\n console.error( 'ERROR[Code Parsing]: Unknown highlight type: ' + content );\r\n return;\r\n }\r\n\r\n html = getHTML( highlight, content );\r\n text = text.replace( `@${content}@`, html );\r\n }\r\n\r\n i += html.length - 1;\r\n }\r\n }\r\n\r\n let container = document.createElement( 'div' );\r\n container.className = 'code-container';\r\n let pre = document.createElement( 'pre' );\r\n let code = document.createElement( 'code' );\r\n code.innerHTML = text;\r\n\r\n let button = document.createElement( 'button' );\r\n button.title = 'Copy code sample';\r\n button.appendChild( LX.makeIcon( 'Copy' ) );\r\n button.addEventListener( 'click', this._copySnippet.bind( this, button ) );\r\n container.appendChild( button );\r\n\r\n pre.appendChild( code );\r\n container.appendChild( pre );\r\n this.root.appendChild( container );\r\n return container;\r\n }\r\n\r\n list( list: any[], type: string, target?: Element, className: string = '' )\r\n {\r\n const validTypes = [ 'bullet', 'numbered' ];\r\n console.assert( list && list.length > 0 && validTypes.includes( type ), 'Invalid list type or empty list' + type );\r\n const typeString = type == 'bullet' ? 'ul' : 'ol';\r\n let ul = document.createElement( typeString );\r\n ul.className = className;\r\n target = target ?? this.root;\r\n target.appendChild( ul );\r\n for ( var el of list )\r\n {\r\n if ( el.constructor === Array )\r\n {\r\n this.list( el, type, ul );\r\n return;\r\n }\r\n let li = document.createElement( 'li' );\r\n li.className = 'leading-loose';\r\n li.innerHTML = el;\r\n ul.appendChild( li );\r\n }\r\n return ul;\r\n }\r\n\r\n bulletList( list: any[] )\r\n {\r\n return this.list( list, 'bullet' );\r\n }\r\n\r\n numberedList( list: any[] )\r\n {\r\n return this.list( list, 'numbered' );\r\n }\r\n\r\n startCodeBulletList()\r\n {\r\n let ul = document.createElement( 'ul' );\r\n this._listQueued = ul;\r\n return ul;\r\n }\r\n\r\n endCodeBulletList()\r\n {\r\n if ( this._listQueued === undefined ) return;\r\n console.assert( this._listQueued !== undefined );\r\n this.root.appendChild( this._listQueued );\r\n this._listQueued = undefined;\r\n }\r\n\r\n codeListItem( item: any, target?: Element )\r\n {\r\n target = target ?? this._listQueued;\r\n let split = item.constructor === Array;\r\n if ( split && item[0].constructor === Array )\r\n {\r\n this.codeBulletList( item, target );\r\n return;\r\n }\r\n let li = document.createElement( 'li' );\r\n li.className = 'leading-loose';\r\n li.innerHTML = split\r\n ? ( item.length == 2\r\n ? this.iCode( item[0] ) + ': ' + item[1]\r\n : this.iCode( item[0] + \" <span class='desc'>(\" + item[1] + ')</span>' ) + ': ' + item[2] )\r\n : this.iCode( item );\r\n target?.appendChild( li );\r\n }\r\n\r\n codeBulletList( list: any[], target?: Element )\r\n {\r\n console.assert( list !== undefined && list.length > 0 );\r\n let ul = document.createElement( 'ul' );\r\n for ( var el of list )\r\n {\r\n this.codeListItem( el, ul );\r\n }\r\n\r\n if ( target )\r\n {\r\n target.appendChild( ul );\r\n }\r\n else\r\n {\r\n this.root.appendChild( ul );\r\n }\r\n return ul;\r\n }\r\n\r\n image( src: string, caption: string = '', parent?: Element, className: string = '' )\r\n {\r\n let img = document.createElement( 'img' );\r\n img.src = src;\r\n img.alt = caption;\r\n img.className = LX.mergeClass( 'my-1', className );\r\n parent = parent ?? this.root;\r\n parent.appendChild( img );\r\n return img;\r\n }\r\n\r\n images( sources: string[], captions: string[] = [], width?: string, height?: string )\r\n {\r\n const mobile = navigator && /Android|iPhone/i.test( navigator.userAgent );\r\n const div: HTMLElement = document.createElement( 'div' );\r\n\r\n if ( !mobile )\r\n {\r\n div.style.width = width ?? 'auto';\r\n div.style.height = height ?? '256px';\r\n div.className = 'flex flex-row justify-center';\r\n }\r\n\r\n for ( let i = 0; i < sources.length; ++i )\r\n {\r\n this.image( sources[i], captions[i], div );\r\n }\r\n\r\n this.root.appendChild( div );\r\n\r\n return div;\r\n }\r\n\r\n video( src: string, caption: string = '', controls: boolean = true, autoplay: boolean = false, className: string = '' )\r\n {\r\n let video: any = document.createElement( 'video' );\r\n video.className = className;\r\n video.src = src;\r\n video.controls = controls;\r\n video.autoplay = autoplay;\r\n if ( autoplay )\r\n {\r\n video.muted = true;\r\n }\r\n video.loop = true;\r\n video.alt = caption;\r\n this.root.appendChild( video );\r\n return video;\r\n }\r\n\r\n note( text: string, warning: boolean = false, title?: string, icon?: string, className: string = '' )\r\n {\r\n console.assert( text !== undefined );\r\n\r\n const note = LX.makeContainer( [],\r\n LX.mergeClass( 'border-color rounded-xl overflow-hidden text-sm text-secondary-foreground my-6', className ), '', this.root );\r\n const header = document.createElement( 'div' );\r\n header.className = 'flex bg-muted font-semibold px-3 py-2 gap-2 text-secondary-foreground';\r\n header.appendChild( LX.makeIcon( icon ?? ( warning ? 'MessageSquareWarning' : 'NotepadText' ) ) );\r\n header.innerHTML += title ?? ( warning ? 'Important' : 'Note' );\r\n note.appendChild( header );\r\n\r\n // Node body\r\n return LX.makeContainer( [], 'leading-6 p-3', text, note );\r\n }\r\n\r\n classCtor( name: string, params: any[], language: string = 'js' )\r\n {\r\n let paramsHTML = '';\r\n for ( var p of params )\r\n {\r\n const str1 = p[0]; // cpp: param js: name\r\n const str2 = p[1]; // cpp: defaultValue js: type\r\n if ( language == 'cpp' )\r\n {\r\n paramsHTML += str1 + ( str2 ? \" = <span class='desc'>\" + str2 + '</span>' : '' )\r\n + ( params.indexOf( p ) != ( params.length - 1 ) ? ', ' : '' );\r\n }\r\n else if ( language == 'js' )\r\n {\r\n paramsHTML += str1 + \": <span class='desc'>\" + str2 + '</span>'\r\n + ( params.indexOf( p ) != ( params.length - 1 ) ? ', ' : '' );\r\n }\r\n }\r\n let pr = document.createElement( 'p' );\r\n pr.innerHTML = this.iCode( \"<span class='constructor'>\" + name + '(' + paramsHTML + ')' + '</span>' );\r\n this.root.appendChild( pr );\r\n return pr;\r\n }\r\n\r\n classMethod( name: string, desc: string, params: any[], ret?: string ): HTMLElement | null\r\n {\r\n this.startCodeBulletList();\r\n\r\n let paramsHTML = '';\r\n for ( var p of params )\r\n {\r\n const name = p[0];\r\n const type = p[1];\r\n paramsHTML += name + \": <span class='desc'>\" + type + '</span>'\r\n + ( params.indexOf( p ) != ( params.length - 1 ) ? ', ' : '' );\r\n }\r\n let li = document.createElement( 'li' );\r\n li.innerHTML = this.iCode(\r\n \"<span class='method'>\" + name + ' (' + paramsHTML + ')' + ( ret ? ( ': ' + ret ) : '' ) + '</span>'\r\n );\r\n this._listQueued?.appendChild( li );\r\n\r\n this.endCodeBulletList();\r\n\r\n this.paragraph( desc );\r\n\r\n return li.parentElement;\r\n }\r\n\r\n iLink( text: string, href: string )\r\n {\r\n console.assert( text !== undefined && href !== undefined );\r\n return `<a class=\"font-semibold underline-offset-4 hover:underline\" href=\"${href}\">${text}</a>`;\r\n }\r\n\r\n iPage( text: string, page: string )\r\n {\r\n console.assert( text !== undefined && page !== undefined );\r\n const startPage = page.replace( '.html', '' );\r\n const g = globalThis as any;\r\n if ( g.setPath && g.loadPage )\r\n {\r\n const tabName = g.setPath( startPage );\r\n return `<a onclick=\"loadPage('${page}', true, '${tabName}')\">${text}</a>`;\r\n }\r\n else\r\n {\r\n console.warn( '[DocMaker] Create globalThis.setPath and globalThis.loadPage to use inline pages!' );\r\n }\r\n }\r\n\r\n iCode( text: string, codeClass?: string )\r\n {\r\n console.assert( text !== undefined );\r\n return `<code class=\"inline ${codeClass ?? ''}\">${text}</code>`;\r\n }\r\n\r\n _copySnippet( b: any )\r\n {\r\n b.innerHTML = '';\r\n b.appendChild( LX.makeIcon( 'Check' ) );\r\n b.classList.add( 'copied' );\r\n\r\n setTimeout( () => {\r\n b.innerHTML = '';\r\n b.appendChild( LX.makeIcon( 'Copy' ) );\r\n b.classList.remove( 'copied' );\r\n }, 2000 );\r\n\r\n navigator.clipboard.writeText( b.dataset['snippet'] ?? b.parentElement.innerText );\r\n console.log( 'Copied!' );\r\n }\r\n}\r\n\r\nLX.DocMaker = DocMaker;\r\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DocMaker.js","sources":["../../src/extensions/DocMaker.ts"],"sourcesContent":["// DocMaker.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( 'DocMaker' );\r\n\r\nconst CLASS_WORDS = [ 'uint32_t', 'uint64_t', 'uint8_t' ];\r\nconst CPP_KEY_WORDS = [ 'int', 'float', 'double', 'bool', 'char', 'wchar_t', 'const', 'static_cast', 'dynamic_cast', 'new', 'delete', 'void', 'true',\r\n 'false', 'auto', 'struct', 'typedef', 'nullptr', 'NULL', 'unsigned', 'namespace', 'auto' ];\r\nconst JS_KEY_WORDS = [ 'var', 'let', 'const', 'static', 'function', 'null', 'undefined', 'new', 'delete', 'true', 'false', 'NaN', 'this' ];\r\nconst WGSL_KEY_WORDS = [ 'var', 'let', 'const', 'override', 'fn', 'struct', 'alias', 'true', 'false', 'bool', 'f16', 'f32', 'i32', 'u32', 'vec2',\r\n 'vec3', 'vec4', 'mat2x2', 'mat2x3', 'mat2x4', 'mat3x2', 'mat3x3', 'mat3x4', 'mat4x2', 'mat4x3', 'mat4x4' // 'atomic', 'array', 'ptr', 'sampler', 'sampler_comparison', 'texture_1d', 'texture_2d', 'texture_2d_array', 'texture_3d', 'texture_cube', 'texture_cube_array',\r\n // 'texture_multisampled_2d', 'texture_external', 'texture_storage_1d', 'texture_storage_2d', 'texture_storage_2d_array', 'texture_storage_3d', 'texture_depth_2d',\r\n // 'texture_depth_2d_array', 'texture_depth_cube', 'texture_depth_cube_array', 'texture_depth_multisampled_2d', 'function', 'private', 'workgroup', 'uniform',\r\n // 'storage', 'read', 'write', 'read_write', 'binding', 'builtin', 'group', 'id', 'interpolate', 'invariant', 'location', 'size', 'align', 'stride', 'vertex', 'fragment', 'compute', 'workgroup_size',\r\n];\r\nconst STATEMENT_WORDS = [ 'for', 'if', 'else', 'return', 'continue', 'break', 'case', 'switch', 'while', 'import', 'from', 'await' ];\r\n\r\nconst HTML_ATTRIBUTES = [ 'html', 'charset', 'rel', 'src', 'href', 'crossorigin', 'type', 'lang' ];\r\nconst HTML_TAGS = [ 'DOCTYPE', 'html', 'head', 'body', 'title', 'base', 'link', 'meta', 'style', 'main', 'section', 'nav', 'article', 'aside',\r\n 'header', 'footer', 'address', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'hr', 'pre', 'blockquote', 'ol', 'ul', 'li', 'dl', 'dt', 'dd', 'figure',\r\n 'figcaption', 'div', 'a', 'abbr', 'b', 'bdi', 'bdo', 'br', 'cite', 'code', 'data', 'dfn', 'em', 'i', 'kbd', 'mark', 'q', 'rp', 'rt', 'ruby', 's',\r\n 'samp', 'small', 'span', 'strong', 'sub', 'sup', 'time', 'u', 'var', 'wbr', 'img', 'audio', 'video', 'source', 'track', 'picture', 'map', 'area',\r\n 'canvas', 'iframe', 'embed', 'object', 'param', 'form', 'label', 'input', 'button', 'select', 'datalist', 'optgroup', 'option', 'textarea',\r\n 'output', 'progress', 'meter', 'fieldset', 'legend', 'table', 'caption', 'colgroup', 'col', 'tbody', 'thead', 'tfoot', 'tr', 'td', 'th',\r\n 'details', 'summary', 'dialog', 'script', 'noscript', 'template' ];\r\n\r\nexport class DocMaker\r\n{\r\n root: Element;\r\n _listQueued: Element | undefined = undefined;\r\n _lastDomTarget: Element | undefined = undefined;\r\n\r\n constructor( element?: Element )\r\n {\r\n this.root = element ?? document.body;\r\n }\r\n\r\n setDomTarget( element: Element )\r\n {\r\n this.root = element;\r\n }\r\n\r\n lineBreak( target?: Element )\r\n {\r\n target = target ?? this.root;\r\n target.appendChild( document.createElement( 'br' ) );\r\n }\r\n\r\n header( string: string, type: string, id: string, options: any = {} )\r\n {\r\n console.assert( string !== undefined && type !== undefined );\r\n\r\n if ( options.collapsable )\r\n {\r\n const collapsible = LX.makeElement( 'div', LX.mergeClass( 'my-4 px-6 cursor-pointer', options.className ),\r\n `<${type} id=\"${id ?? ''}\">${string}</${type}>`, this.root );\r\n const collapsibleContent = LX.makeContainer( [ '100%', 'auto' ], 'px-4', '', this.root );\r\n LX.listen( collapsible, 'click', () => collapsible.querySelector( 'a.collapser' ).click() );\r\n this._lastDomTarget = this.root;\r\n this.setDomTarget( collapsibleContent );\r\n\r\n if ( options.collapsableContentCallback )\r\n {\r\n options.collapsableContentCallback();\r\n }\r\n\r\n LX.makeCollapsible( collapsible, collapsibleContent, null, { collapsed: options.collapsed ?? false } );\r\n this.setDomTarget( this._lastDomTarget );\r\n delete this._lastDomTarget;\r\n return collapsible;\r\n }\r\n\r\n const header = document.createElement( type );\r\n header.className = options.className ?? '';\r\n header.innerHTML = string;\r\n if ( id ) header.id = id;\r\n this.root.appendChild( header );\r\n return header;\r\n }\r\n\r\n paragraph( string: string, sup: boolean = false, className: string = '' )\r\n {\r\n console.assert( string !== undefined );\r\n let paragraph = document.createElement( sup ? 'sup' : 'p' );\r\n paragraph.className = LX.mergeClass( 'leading-relaxed', className );\r\n paragraph.innerHTML = string;\r\n this.root.appendChild( paragraph );\r\n return paragraph;\r\n }\r\n\r\n code( text: string, language: string = 'js' )\r\n {\r\n console.assert( text !== undefined );\r\n\r\n text.replaceAll( '<', '<' );\r\n text.replaceAll( '>', '>' );\r\n\r\n let highlight = '';\r\n let content = '';\r\n\r\n const getHTML = ( h: string, c: string ) => {\r\n return `<span class=\"${h}\">${c}</span>`;\r\n };\r\n\r\n for ( let i = 0; i < text.length; ++i )\r\n {\r\n const char = text[i];\r\n const string = text.substring( i );\r\n\r\n const endLineIdx = string.indexOf( '\\n' );\r\n const line = string.substring( 0, endLineIdx > -1 ? endLineIdx : undefined );\r\n\r\n if ( char == '@' )\r\n {\r\n const str = line.substring( 1 );\r\n\r\n if ( !( str.indexOf( '@' ) > -1 ) && !( str.indexOf( '[' ) > -1 ) )\r\n {\r\n continue;\r\n }\r\n\r\n let html = null;\r\n\r\n const tagIndex = str.indexOf( '@' );\r\n const skipTag = str[tagIndex - 1] == '|';\r\n\r\n // Highlight is specified\r\n if ( text[i + 1] == '[' )\r\n {\r\n highlight = str.substring( 1, 4 );\r\n content = str.substring( 5, tagIndex );\r\n\r\n if ( skipTag )\r\n {\r\n const newString = str.substring( 6 + content.length );\r\n const preContent = content;\r\n const postContent = newString.substring( 0, newString.indexOf( '@' ) );\r\n const finalContent = preContent.substring( 0, preContent.length - 1 ) + '@' + postContent;\r\n html = getHTML( highlight, finalContent );\r\n\r\n const ogContent = preContent + '@' + postContent;\r\n text = text.replace( `@[${highlight}]${ogContent}@`, html );\r\n }\r\n else\r\n {\r\n html = getHTML( highlight, content );\r\n text = text.replace( `@[${highlight}]${content}@`, html );\r\n }\r\n }\r\n else\r\n {\r\n content = str.substring( 0, tagIndex );\r\n if ( skipTag )\r\n {\r\n const preContent = str.substring( 0, str.indexOf( '@' ) - 1 );\r\n content = str.substring( preContent.length + 1 );\r\n content = preContent + content.substring( 0, content.substring( 1 ).indexOf( '@' ) + 1 );\r\n text = text.substr( 0, i ) + '@' + content + '@' + text.substr( i + content.length + 3 );\r\n }\r\n\r\n if ( language == 'cpp' && CPP_KEY_WORDS.includes( content ) )\r\n {\r\n highlight = 'kwd';\r\n }\r\n else if ( language == 'js' && JS_KEY_WORDS.includes( content ) )\r\n {\r\n highlight = 'kwd';\r\n }\r\n else if ( language == 'wgsl' && WGSL_KEY_WORDS.includes( content ) )\r\n {\r\n highlight = 'kwd';\r\n }\r\n else if ( CLASS_WORDS.includes( content ) )\r\n {\r\n highlight = 'cls';\r\n }\r\n else if ( STATEMENT_WORDS.includes( content ) )\r\n {\r\n highlight = 'lit';\r\n }\r\n else if ( HTML_TAGS.includes( content ) )\r\n {\r\n highlight = 'tag';\r\n }\r\n else if ( HTML_ATTRIBUTES.includes( content ) )\r\n {\r\n highlight = 'atn';\r\n }\r\n else if ( ( content[0] == '\"' && content[content.length - 1] == '\"' )\r\n || ( content[0] == \"'\" && content[content.length - 1] == \"'\" )\r\n || ( content[0] == '`' && content[content.length - 1] == '`' ) )\r\n {\r\n highlight = 'str';\r\n }\r\n else if ( !Number.isNaN( parseFloat( content ) ) )\r\n {\r\n highlight = 'dec';\r\n }\r\n else\r\n {\r\n highlight = '';\r\n console.error( 'WARNING[Code Parsing]: Unknown highlight type: ' + content );\r\n }\r\n\r\n html = getHTML( highlight, content );\r\n text = text.replace( `@${content}@`, html );\r\n }\r\n\r\n i += html.length - 1;\r\n }\r\n }\r\n\r\n let container = document.createElement( 'div' );\r\n container.className = 'code-container';\r\n let pre = document.createElement( 'pre' );\r\n let code = document.createElement( 'code' );\r\n code.innerHTML = text;\r\n\r\n let button = document.createElement( 'button' );\r\n button.title = 'Copy code sample';\r\n button.appendChild( LX.makeIcon( 'Copy' ) );\r\n button.addEventListener( 'click', this._copySnippet.bind( this, button ) );\r\n container.appendChild( button );\r\n\r\n pre.appendChild( code );\r\n container.appendChild( pre );\r\n this.root.appendChild( container );\r\n return container;\r\n }\r\n\r\n list( list: any[], type: string, target?: Element, className: string = '' )\r\n {\r\n const validTypes = [ 'bullet', 'numbered' ];\r\n console.assert( list && list.length > 0 && validTypes.includes( type ), 'Invalid list type or empty list' + type );\r\n const typeString = type == 'bullet' ? 'ul' : 'ol';\r\n let ul = document.createElement( typeString );\r\n ul.className = className;\r\n target = target ?? this.root;\r\n target.appendChild( ul );\r\n for ( var el of list )\r\n {\r\n if ( el.constructor === Array )\r\n {\r\n this.list( el, type, ul );\r\n return;\r\n }\r\n let li = document.createElement( 'li' );\r\n li.className = 'leading-loose';\r\n li.innerHTML = el;\r\n ul.appendChild( li );\r\n }\r\n return ul;\r\n }\r\n\r\n bulletList( list: any[] )\r\n {\r\n return this.list( list, 'bullet' );\r\n }\r\n\r\n numberedList( list: any[] )\r\n {\r\n return this.list( list, 'numbered' );\r\n }\r\n\r\n startCodeBulletList()\r\n {\r\n let ul = document.createElement( 'ul' );\r\n this._listQueued = ul;\r\n return ul;\r\n }\r\n\r\n endCodeBulletList()\r\n {\r\n if ( this._listQueued === undefined ) return;\r\n console.assert( this._listQueued !== undefined );\r\n this.root.appendChild( this._listQueued );\r\n this._listQueued = undefined;\r\n }\r\n\r\n codeListItem( item: any, target?: Element )\r\n {\r\n target = target ?? this._listQueued;\r\n let split = item.constructor === Array;\r\n if ( split && item[0].constructor === Array )\r\n {\r\n this.codeBulletList( item, target );\r\n return;\r\n }\r\n let li = document.createElement( 'li' );\r\n li.className = 'leading-loose';\r\n li.innerHTML = split\r\n ? ( item.length == 2\r\n ? this.iCode( item[0] ) + ': ' + item[1]\r\n : this.iCode( item[0] + \" <span class='desc'>(\" + item[1] + ')</span>' ) + ': ' + item[2] )\r\n : this.iCode( item );\r\n target?.appendChild( li );\r\n }\r\n\r\n codeBulletList( list: any[], target?: Element )\r\n {\r\n console.assert( list !== undefined && list.length > 0 );\r\n let ul = document.createElement( 'ul' );\r\n for ( var el of list )\r\n {\r\n this.codeListItem( el, ul );\r\n }\r\n\r\n if ( target )\r\n {\r\n target.appendChild( ul );\r\n }\r\n else\r\n {\r\n this.root.appendChild( ul );\r\n }\r\n return ul;\r\n }\r\n\r\n image( src: string, caption: string = '', parent?: Element, className: string = '' )\r\n {\r\n let img = document.createElement( 'img' );\r\n img.src = src;\r\n img.alt = caption;\r\n img.className = LX.mergeClass( 'my-1', className );\r\n parent = parent ?? this.root;\r\n parent.appendChild( img );\r\n return img;\r\n }\r\n\r\n images( sources: string[], captions: string[] = [], width?: string, height?: string )\r\n {\r\n const mobile = navigator && /Android|iPhone/i.test( navigator.userAgent );\r\n const div: HTMLElement = document.createElement( 'div' );\r\n\r\n if ( !mobile )\r\n {\r\n div.style.width = width ?? 'auto';\r\n div.style.height = height ?? '256px';\r\n div.className = 'flex flex-row justify-center';\r\n }\r\n\r\n for ( let i = 0; i < sources.length; ++i )\r\n {\r\n this.image( sources[i], captions[i], div );\r\n }\r\n\r\n this.root.appendChild( div );\r\n\r\n return div;\r\n }\r\n\r\n video( src: string, caption: string = '', controls: boolean = true, autoplay: boolean = false, className: string = '' )\r\n {\r\n let video: any = document.createElement( 'video' );\r\n video.className = className;\r\n video.src = src;\r\n video.controls = controls;\r\n video.autoplay = autoplay;\r\n if ( autoplay )\r\n {\r\n video.muted = true;\r\n }\r\n video.loop = true;\r\n video.alt = caption;\r\n this.root.appendChild( video );\r\n return video;\r\n }\r\n\r\n note( text: string, warning: boolean = false, title?: string, icon?: string, className: string = '' )\r\n {\r\n console.assert( text !== undefined );\r\n\r\n const note = LX.makeContainer( [],\r\n LX.mergeClass( 'border-color rounded-xl overflow-hidden text-sm text-secondary-foreground my-6', className ), '', this.root );\r\n const header = document.createElement( 'div' );\r\n header.className = 'flex bg-muted font-semibold px-3 py-2 gap-2 text-secondary-foreground';\r\n header.appendChild( LX.makeIcon( icon ?? ( warning ? 'MessageSquareWarning' : 'NotepadText' ) ) );\r\n header.innerHTML += title ?? ( warning ? 'Important' : 'Note' );\r\n note.appendChild( header );\r\n\r\n // Node body\r\n return LX.makeContainer( [], 'leading-6 p-3', text, note );\r\n }\r\n\r\n classCtor( name: string, params: any[], language: string = 'js' )\r\n {\r\n let paramsHTML = '';\r\n for ( var p of params )\r\n {\r\n const str1 = p[0]; // cpp: param js: name\r\n const str2 = p[1]; // cpp: defaultValue js: type\r\n if ( language == 'cpp' )\r\n {\r\n paramsHTML += str1 + ( str2 ? \" = <span class='desc'>\" + str2 + '</span>' : '' )\r\n + ( params.indexOf( p ) != ( params.length - 1 ) ? ', ' : '' );\r\n }\r\n else if ( language == 'js' )\r\n {\r\n paramsHTML += str1 + \": <span class='desc'>\" + str2 + '</span>'\r\n + ( params.indexOf( p ) != ( params.length - 1 ) ? ', ' : '' );\r\n }\r\n }\r\n let pr = document.createElement( 'p' );\r\n pr.innerHTML = this.iCode( \"<span class='constructor'>\" + name + '(' + paramsHTML + ')' + '</span>' );\r\n this.root.appendChild( pr );\r\n return pr;\r\n }\r\n\r\n classMethod( name: string, desc: string, params: any[], ret?: string ): HTMLElement | null\r\n {\r\n this.startCodeBulletList();\r\n\r\n let paramsHTML = '';\r\n for ( var p of params )\r\n {\r\n const name = p[0];\r\n const type = p[1];\r\n paramsHTML += name + \": <span class='desc'>\" + type + '</span>'\r\n + ( params.indexOf( p ) != ( params.length - 1 ) ? ', ' : '' );\r\n }\r\n let li = document.createElement( 'li' );\r\n li.innerHTML = this.iCode(\r\n \"<span class='method'>\" + name + ' (' + paramsHTML + ')' + ( ret ? ( ': ' + ret ) : '' ) + '</span>'\r\n );\r\n this._listQueued?.appendChild( li );\r\n\r\n this.endCodeBulletList();\r\n\r\n this.paragraph( desc );\r\n\r\n return li.parentElement;\r\n }\r\n\r\n iLink( text: string, href: string )\r\n {\r\n console.assert( text !== undefined && href !== undefined );\r\n return `<a class=\"font-semibold underline-offset-4 hover:underline\" href=\"${href}\">${text}</a>`;\r\n }\r\n\r\n iPage( text: string, page: string )\r\n {\r\n console.assert( text !== undefined && page !== undefined );\r\n const startPage = page.replace( '.html', '' );\r\n const g = globalThis as any;\r\n if ( g.setPath && g.loadPage )\r\n {\r\n const tabName = g.setPath( startPage );\r\n return `<a onclick=\"loadPage('${page}', true, '${tabName}')\">${text}</a>`;\r\n }\r\n else\r\n {\r\n console.warn( '[DocMaker] Create globalThis.setPath and globalThis.loadPage to use inline pages!' );\r\n }\r\n }\r\n\r\n iCode( text: string, codeClass?: string )\r\n {\r\n console.assert( text !== undefined );\r\n return `<code class=\"inline ${codeClass ?? ''}\">${text}</code>`;\r\n }\r\n\r\n _copySnippet( b: any )\r\n {\r\n b.innerHTML = '';\r\n b.appendChild( LX.makeIcon( 'Check' ) );\r\n b.classList.add( 'copied' );\r\n\r\n setTimeout( () => {\r\n b.innerHTML = '';\r\n b.appendChild( LX.makeIcon( 'Copy' ) );\r\n b.classList.remove( 'copied' );\r\n }, 2000 );\r\n\r\n navigator.clipboard.writeText( b.dataset['snippet'] ?? b.parentElement.innerText );\r\n console.log( 'Copied!' );\r\n }\r\n}\r\n\r\nLX.DocMaker = DocMaker;\r\n"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,6 @@ export declare abstract class Timeline {
|
|
|
13
13
|
static TRACK_COLOR_SECONDARY: string;
|
|
14
14
|
static TRACK_COLOR_TERTIARY: string;
|
|
15
15
|
static TRACK_SELECTED: string;
|
|
16
|
-
static TRACK_SELECTED_LIGHT: string;
|
|
17
16
|
static FONT: string;
|
|
18
17
|
static FONT_COLOR_PRIMARY: string;
|
|
19
18
|
static FONT_COLOR_TERTIARY: string;
|
|
@@ -69,6 +68,7 @@ export declare abstract class Timeline {
|
|
|
69
68
|
leftPanel: typeof Panel;
|
|
70
69
|
trackTreesPanel: any;
|
|
71
70
|
trackTreesComponent: any;
|
|
71
|
+
trackTreesEvents: any;
|
|
72
72
|
lastTrackTreesComponentOffset: any;
|
|
73
73
|
mainArea: typeof Area;
|
|
74
74
|
root: HTMLBodyElement;
|
|
@@ -90,7 +90,6 @@ export declare abstract class Timeline {
|
|
|
90
90
|
onShowContextMenu: Nullable<(event: any) => void>;
|
|
91
91
|
onAddNewTrackButton: Nullable<() => void>;
|
|
92
92
|
onAddNewTrack: Nullable<(track: any, options: any) => void>;
|
|
93
|
-
onTrackTreeEvent: Nullable<(event: any) => void>;
|
|
94
93
|
onBeforeDrawContent: Nullable<(ctx: CanvasRenderingContext2D) => void>;
|
|
95
94
|
onStateStop: Nullable<() => void>;
|
|
96
95
|
onStateChange: Nullable<(s: boolean) => void>;
|
|
@@ -122,6 +121,7 @@ export declare abstract class Timeline {
|
|
|
122
121
|
* @method updateHeader
|
|
123
122
|
*/
|
|
124
123
|
updateHeader(): void;
|
|
124
|
+
setTrackTreeEventListener(type: string, callback: (event: any) => any): void;
|
|
125
125
|
/**
|
|
126
126
|
* @method updateLeftPanel
|
|
127
127
|
*/
|
|
@@ -21,7 +21,6 @@ class Timeline {
|
|
|
21
21
|
static TRACK_COLOR_SECONDARY;
|
|
22
22
|
static TRACK_COLOR_TERTIARY;
|
|
23
23
|
static TRACK_SELECTED;
|
|
24
|
-
static TRACK_SELECTED_LIGHT;
|
|
25
24
|
static FONT;
|
|
26
25
|
static FONT_COLOR_PRIMARY;
|
|
27
26
|
static FONT_COLOR_TERTIARY;
|
|
@@ -77,6 +76,7 @@ class Timeline {
|
|
|
77
76
|
leftPanel; // where tree will be placed
|
|
78
77
|
trackTreesPanel = null;
|
|
79
78
|
trackTreesComponent = null;
|
|
79
|
+
trackTreesEvents = {}; // holds callbacks
|
|
80
80
|
lastTrackTreesComponentOffset = 0; // this.trackTreesComponent.innerTree.domEl.offsetTop - canvas.offsetTop. Check draw()
|
|
81
81
|
mainArea;
|
|
82
82
|
root;
|
|
@@ -98,7 +98,6 @@ class Timeline {
|
|
|
98
98
|
onShowContextMenu = null;
|
|
99
99
|
onAddNewTrackButton = null; // overrides button "add track" behaviour
|
|
100
100
|
onAddNewTrack = null;
|
|
101
|
-
onTrackTreeEvent = null;
|
|
102
101
|
onBeforeDrawContent = null;
|
|
103
102
|
onStateStop = null;
|
|
104
103
|
onStateChange = null;
|
|
@@ -183,6 +182,7 @@ class Timeline {
|
|
|
183
182
|
Timeline.TRACK_COLOR_PRIMARY = LX.getCSSVariable('card');
|
|
184
183
|
Timeline.TRACK_COLOR_SECONDARY = LX.getCSSVariable('secondary');
|
|
185
184
|
Timeline.TRACK_COLOR_TERTIARY = LX.getCSSVariable('accent');
|
|
185
|
+
Timeline.TRACK_SELECTED = LX.getCSSVariable('primary');
|
|
186
186
|
Timeline.FONT = LX.getCSSVariable('global-font');
|
|
187
187
|
Timeline.FONT_COLOR_PRIMARY = LX.getCSSVariable('foreground');
|
|
188
188
|
Timeline.FONT_COLOR_TERTIARY = LX.getCSSVariable('primary');
|
|
@@ -192,6 +192,8 @@ class Timeline {
|
|
|
192
192
|
Timeline.KEYFRAME_COLOR_LOCK = LX.getCSSVariable('lxTimeline-keyframe-locked');
|
|
193
193
|
Timeline.KEYFRAME_COLOR_EDITED = LX.getCSSVariable('lxTimeline-keyframe-edited');
|
|
194
194
|
Timeline.KEYFRAME_COLOR_INACTIVE = LX.getCSSVariable('lxTimeline-keyframe-inactive');
|
|
195
|
+
Timeline.TIME_MARKER_COLOR = LX.getCSSVariable('primary');
|
|
196
|
+
Timeline.TIME_MARKER_COLOR_TEXT = LX.getCSSVariable('primary-foreground');
|
|
195
197
|
}
|
|
196
198
|
this.updateTheme = updateTheme.bind(this);
|
|
197
199
|
LX.addSignal('@on_new_color_scheme', this.updateTheme);
|
|
@@ -309,6 +311,12 @@ class Timeline {
|
|
|
309
311
|
header.addContent('header-buttons-end', buttonContainerEnd);
|
|
310
312
|
header.endLine('justify-between');
|
|
311
313
|
}
|
|
314
|
+
setTrackTreeEventListener(type, callback) {
|
|
315
|
+
this.trackTreesEvents[type] = callback;
|
|
316
|
+
if (type != 'select' && type != 'visibleChanged') {
|
|
317
|
+
this.trackTreesComponent.on(type, this.trackTreesEvents[type]);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
312
320
|
/**
|
|
313
321
|
* @method updateLeftPanel
|
|
314
322
|
*/
|
|
@@ -347,18 +355,23 @@ class Timeline {
|
|
|
347
355
|
const flag = event.domEvent.shiftKey ? !node.trackData.isSelected : true;
|
|
348
356
|
this.setTrackSelection(node.trackData.trackIdx, flag, false, false); // do callback, do not update left panel
|
|
349
357
|
}
|
|
358
|
+
if (this.trackTreesEvents['select']) {
|
|
359
|
+
this.trackTreesEvents['select'](event);
|
|
360
|
+
}
|
|
350
361
|
});
|
|
351
362
|
this.trackTreesComponent.on('visibleChanged', (event, resolve) => {
|
|
352
363
|
const node = event.items[0];
|
|
353
364
|
if (node.trackData) {
|
|
354
365
|
this.setTrackState(node.trackData.trackIdx, node.visible, false, false); // do not update left panel
|
|
355
366
|
}
|
|
367
|
+
if (this.trackTreesEvents['visibleChanged']) {
|
|
368
|
+
this.trackTreesEvents['visibleChanged'](event);
|
|
369
|
+
}
|
|
356
370
|
});
|
|
357
|
-
//
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
// }
|
|
371
|
+
// reset all tree events to the new tree
|
|
372
|
+
for (let name in this.trackTreesEvents) {
|
|
373
|
+
this.setTrackTreeEventListener(name, this.trackTreesEvents[name]);
|
|
374
|
+
}
|
|
362
375
|
const that = this;
|
|
363
376
|
this.trackTreesComponent.innerTree._refresh = this.trackTreesComponent.innerTree.refresh;
|
|
364
377
|
this.trackTreesComponent.innerTree.refresh = function (newData, selectedId) {
|
|
@@ -537,7 +550,7 @@ class Timeline {
|
|
|
537
550
|
ctx.save();
|
|
538
551
|
ctx.fillStyle = Timeline.TRACK_COLOR_SECONDARY;
|
|
539
552
|
const rectsOffset = this.currentScrollInPixels % line_height;
|
|
540
|
-
const blackOrWhite =
|
|
553
|
+
const blackOrWhite = Math.floor(this.currentScrollInPixels / line_height) % 2;
|
|
541
554
|
for (let i = blackOrWhite; i <= max_tracks; i += 2) {
|
|
542
555
|
ctx.fillRect(0, treeOffset - rectsOffset + i * line_height, w, line_height);
|
|
543
556
|
}
|
|
@@ -566,8 +579,9 @@ class Timeline {
|
|
|
566
579
|
const w = ctx.canvas.width;
|
|
567
580
|
const h = ctx.canvas.height;
|
|
568
581
|
const scrollableHeight = this.trackTreesComponent.root.scrollHeight;
|
|
582
|
+
// hack: get 'ul' start pos to know when tracks start
|
|
569
583
|
// tree has gaps of 0.25rem (4px ) inbetween entries but not in the beginning nor ending. Move half gap upwards.
|
|
570
|
-
const treeOffset = this.lastTrackTreesComponentOffset = this.trackTreesComponent.innerTree.domEl.offsetTop
|
|
584
|
+
const treeOffset = this.lastTrackTreesComponentOffset = this.trackTreesComponent.innerTree.domEl.children[0].offsetTop
|
|
571
585
|
- this.canvas.offsetTop - 2;
|
|
572
586
|
// zoom
|
|
573
587
|
let startTime = this.visualOriginTime; // seconds
|
|
@@ -1263,14 +1277,13 @@ Timeline.BACKGROUND_COLOR = LX.getCSSVariable('background-blur');
|
|
|
1263
1277
|
Timeline.TRACK_COLOR_PRIMARY = LX.getCSSVariable('card');
|
|
1264
1278
|
Timeline.TRACK_COLOR_SECONDARY = LX.getCSSVariable('secondary');
|
|
1265
1279
|
Timeline.TRACK_COLOR_TERTIARY = LX.getCSSVariable('accent');
|
|
1266
|
-
Timeline.TRACK_SELECTED = LX.getCSSVariable('
|
|
1267
|
-
Timeline.TRACK_SELECTED_LIGHT = LX.getCSSVariable('color-blue-400');
|
|
1280
|
+
Timeline.TRACK_SELECTED = LX.getCSSVariable('primary');
|
|
1268
1281
|
Timeline.FONT = LX.getCSSVariable('global-font');
|
|
1269
1282
|
Timeline.FONT_COLOR_PRIMARY = LX.getCSSVariable('foreground');
|
|
1270
1283
|
Timeline.FONT_COLOR_TERTIARY = LX.getCSSVariable('primary');
|
|
1271
1284
|
Timeline.FONT_COLOR_QUATERNARY = LX.getCSSVariable('muted-foreground');
|
|
1272
|
-
Timeline.TIME_MARKER_COLOR = LX.getCSSVariable('
|
|
1273
|
-
Timeline.TIME_MARKER_COLOR_TEXT = '
|
|
1285
|
+
Timeline.TIME_MARKER_COLOR = LX.getCSSVariable('primary');
|
|
1286
|
+
Timeline.TIME_MARKER_COLOR_TEXT = LX.getCSSVariable('primary-foreground');
|
|
1274
1287
|
LX.setCSSVariable('lxTimeline-keyframe', 'light-dark(#2d69da,#2d69da )');
|
|
1275
1288
|
LX.setCSSVariable('lxTimeline-keyframe-selected', 'light-dark(#f5c700,#fafa14)');
|
|
1276
1289
|
LX.setCSSVariable('lxTimeline-keyframe-hovered', 'light-dark(#f5c700,#fafa14)');
|
|
@@ -1978,7 +1991,7 @@ class KeyFramesTimeline extends Timeline {
|
|
|
1978
1991
|
drawTrackWithCurves(ctx, trackHeight, track) {
|
|
1979
1992
|
if (track.isSelected) {
|
|
1980
1993
|
ctx.globalAlpha = 0.2;
|
|
1981
|
-
ctx.fillStyle = Timeline.
|
|
1994
|
+
ctx.fillStyle = Timeline.TRACK_SELECTED;
|
|
1982
1995
|
ctx.fillRect(0, 0, ctx.canvas.width, trackHeight);
|
|
1983
1996
|
}
|
|
1984
1997
|
ctx.globalAlpha = 1;
|
|
@@ -3343,7 +3356,7 @@ class ClipsTimeline extends Timeline {
|
|
|
3343
3356
|
drawTrackWithBoxes(ctx, y, trackHeight, track) {
|
|
3344
3357
|
// Fill track background if it's selected
|
|
3345
3358
|
ctx.globalAlpha = 0.2;
|
|
3346
|
-
ctx.fillStyle = Timeline.
|
|
3359
|
+
ctx.fillStyle = Timeline.TRACK_SELECTED;
|
|
3347
3360
|
if (track.isSelected) {
|
|
3348
3361
|
ctx.fillRect(0, y, ctx.canvas.width, trackHeight);
|
|
3349
3362
|
}
|