lexgui 8.0.0 → 8.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +3 -3
  2. package/build/components/AlertDialog.d.ts +7 -0
  3. package/build/components/Counter.d.ts +1 -0
  4. package/build/components/Dialog.d.ts +1 -1
  5. package/build/components/Footer.d.ts +1 -1
  6. package/build/components/Menubar.d.ts +2 -2
  7. package/build/core/Area.d.ts +22 -22
  8. package/build/core/Namespace.js +34 -34
  9. package/build/core/Namespace.js.map +1 -1
  10. package/build/core/Panel.d.ts +2 -3
  11. package/build/extensions/AssetView.d.ts +136 -134
  12. package/build/extensions/AssetView.js +1367 -1320
  13. package/build/extensions/AssetView.js.map +1 -1
  14. package/build/extensions/Audio.js +19 -19
  15. package/build/extensions/Audio.js.map +1 -1
  16. package/build/extensions/CodeEditor.js +867 -647
  17. package/build/extensions/CodeEditor.js.map +1 -1
  18. package/build/extensions/DocMaker.d.ts +1 -1
  19. package/build/extensions/DocMaker.js +73 -61
  20. package/build/extensions/DocMaker.js.map +1 -1
  21. package/build/extensions/GraphEditor.js +406 -305
  22. package/build/extensions/GraphEditor.js.map +1 -1
  23. package/build/extensions/ImUi.js +21 -20
  24. package/build/extensions/ImUi.js.map +1 -1
  25. package/build/extensions/Timeline.d.ts +29 -36
  26. package/build/extensions/Timeline.js +421 -424
  27. package/build/extensions/Timeline.js.map +1 -1
  28. package/build/extensions/VideoEditor.js +101 -97
  29. package/build/extensions/VideoEditor.js.map +1 -1
  30. package/build/extensions/index.d.ts +8 -8
  31. package/build/extensions/index.js +1 -1
  32. package/build/index.all.d.ts +2 -2
  33. package/build/index.css.d.ts +1 -1
  34. package/build/index.d.ts +56 -55
  35. package/build/lexgui.all.js +28488 -27640
  36. package/build/lexgui.all.js.map +1 -1
  37. package/build/lexgui.all.min.js +1 -1
  38. package/build/lexgui.all.module.js +28412 -27565
  39. package/build/lexgui.all.module.js.map +1 -1
  40. package/build/lexgui.all.module.min.js +1 -1
  41. package/build/lexgui.css +176 -69
  42. package/build/lexgui.js +13796 -13330
  43. package/build/lexgui.js.map +1 -1
  44. package/build/lexgui.min.css +1 -1
  45. package/build/lexgui.min.js +1 -1
  46. package/build/lexgui.module.js +13733 -13268
  47. package/build/lexgui.module.js.map +1 -1
  48. package/build/lexgui.module.min.js +1 -1
  49. package/changelog.md +22 -1
  50. package/demo.js +6 -5
  51. package/examples/all-components.html +3 -0
  52. package/examples/asset-view.html +52 -6
  53. package/examples/dialogs.html +3 -3
  54. package/examples/editor.html +1 -1
  55. package/examples/index.html +1 -1
  56. package/package.json +4 -1
@@ -3,7 +3,7 @@ import { LX } from '../core/Namespace.js';
3
3
 
4
4
  // Audio.ts @jxarco
5
5
  if (!LX) {
6
- throw ("Missing LX namespace!");
6
+ throw ('Missing LX namespace!');
7
7
  }
8
8
  LX.extensions.push('Audio');
9
9
  const Panel = LX.Panel;
@@ -26,13 +26,13 @@ class Knob extends BaseComponent {
26
26
  };
27
27
  this.onSetValue = (newValue, skipCallback, event) => {
28
28
  innerSetValue(newValue);
29
- LX.BaseComponent._dispatchEvent(innerKnobCircle, "change", skipCallback);
29
+ LX.BaseComponent._dispatchEvent(innerKnobCircle, 'change', skipCallback);
30
30
  };
31
31
  this.onResize = () => {
32
- const realNameWidth = (this.root.domName?.style.width ?? "0px");
32
+ const realNameWidth = this.root.domName?.style.width ?? '0px';
33
33
  container.style.width = `calc( 100% - ${realNameWidth})`;
34
34
  };
35
- const snapEnabled = (options.snap && options.snap.constructor == Number);
35
+ const snapEnabled = options.snap && options.snap.constructor == Number;
36
36
  const ticks = [];
37
37
  if (snapEnabled) {
38
38
  const range = (max - min) / options.snap;
@@ -41,21 +41,21 @@ class Knob extends BaseComponent {
41
41
  }
42
42
  }
43
43
  var container = document.createElement('div');
44
- container.className = "lexknob";
44
+ container.className = 'lexknob';
45
45
  LX.addClass(container, options.size);
46
- LX.addClass(container, snapEnabled ? "show-ticks" : null);
46
+ LX.addClass(container, snapEnabled ? 'show-ticks' : null);
47
47
  let knobCircle = document.createElement('div');
48
- knobCircle.className = "knobcircle";
48
+ knobCircle.className = 'knobcircle';
49
49
  if (snapEnabled) {
50
- knobCircle.style.setProperty("--knob-snap-mark", (270 / options.snap) + "deg");
50
+ knobCircle.style.setProperty('--knob-snap-mark', (270 / options.snap) + 'deg');
51
51
  }
52
52
  let innerKnobCircle = document.createElement('div');
53
- innerKnobCircle.className = "innerknobcircle";
53
+ innerKnobCircle.className = 'innerknobcircle';
54
54
  innerKnobCircle.min = min;
55
55
  innerKnobCircle.max = max;
56
56
  knobCircle.appendChild(innerKnobCircle);
57
57
  let knobMarker = document.createElement('div');
58
- knobMarker.className = "knobmarker";
58
+ knobMarker.className = 'knobmarker';
59
59
  innerKnobCircle.appendChild(knobMarker);
60
60
  innerKnobCircle.value = innerKnobCircle.iValue = value;
61
61
  let mustSnap = false;
@@ -68,9 +68,9 @@ class Knob extends BaseComponent {
68
68
  const angle = LX.remapRange(value, min, max, -135, 135.0);
69
69
  innerKnobCircle.style.rotate = angle + 'deg';
70
70
  if (options.disabled) {
71
- LX.addClass(container, "disabled");
71
+ LX.addClass(container, 'disabled');
72
72
  }
73
- innerKnobCircle.addEventListener("change", (e) => {
73
+ innerKnobCircle.addEventListener('change', (e) => {
74
74
  const knob = e.target;
75
75
  const skipCallback = e.detail;
76
76
  if (mustSnap) {
@@ -81,9 +81,9 @@ class Knob extends BaseComponent {
81
81
  innerSetValue(val);
82
82
  // Reset button (default value)
83
83
  if (!skipCallback) {
84
- let btn = this.root.querySelector(".lexcomponentname .lexicon");
84
+ let btn = this.root.querySelector('.lexcomponentname .lexicon');
85
85
  if (btn)
86
- btn.style.display = val != innerKnobCircle.iValue ? "block" : "none";
86
+ btn.style.display = val != innerKnobCircle.iValue ? 'block' : 'none';
87
87
  if (!(snapEnabled && !mustSnap)) {
88
88
  this._trigger(new IEvent(name, val, e), callback);
89
89
  mustSnap = false;
@@ -91,16 +91,16 @@ class Knob extends BaseComponent {
91
91
  }
92
92
  }, { passive: false });
93
93
  // Add drag input
94
- innerKnobCircle.addEventListener("mousedown", innerMouseDown);
94
+ innerKnobCircle.addEventListener('mousedown', innerMouseDown);
95
95
  var that = this;
96
96
  function innerMouseDown(e) {
97
97
  if (document.activeElement == innerKnobCircle || options.disabled) {
98
98
  return;
99
99
  }
100
100
  var doc = that.root.ownerDocument;
101
- doc.addEventListener("mousemove", innerMouseMove);
102
- doc.addEventListener("mouseup", innerMouseUp);
103
- document.body.classList.add("noevents");
101
+ doc.addEventListener('mousemove', innerMouseMove);
102
+ doc.addEventListener('mouseup', innerMouseUp);
103
+ document.body.classList.add('noevents');
104
104
  if (!document.pointerLockElement) {
105
105
  container.requestPointerLock();
106
106
  }
@@ -115,7 +115,7 @@ class Knob extends BaseComponent {
115
115
  mult *= 10;
116
116
  else if (e.altKey)
117
117
  mult *= 0.1;
118
- let new_value = (innerKnobCircle.value - mult * dt);
118
+ let new_value = innerKnobCircle.value - mult * dt;
119
119
  innerKnobCircle.value = new_value;
120
120
  LX.BaseComponent._dispatchEvent(innerKnobCircle, 'change');
121
121
  }
@@ -1 +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\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 ) => Math.abs( curr - knob.value ) < Math.abs( prev - knob.value ) ? curr : prev );\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\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}"],"names":[],"mappings":"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"}
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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"}