lexgui 0.1.31 → 0.1.32

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/lexgui.js CHANGED
@@ -12,7 +12,7 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
12
12
  */
13
13
 
14
14
  var LX = global.LX = {
15
- version: "0.1.31",
15
+ version: "0.1.32",
16
16
  ready: false,
17
17
  components: [], // specific pre-build components
18
18
  signals: {} // events and triggers
@@ -2373,11 +2373,11 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
2373
2373
  console.warn("Can't get value of " + this.typeName());
2374
2374
  }
2375
2375
 
2376
- set( value ) {
2376
+ set( value, skipCallback = false ) {
2377
2377
 
2378
2378
  if( this.onSetValue )
2379
- return this.onSetValue( value );
2380
-
2379
+ return this.onSetValue( value, skipCallback );
2380
+
2381
2381
  console.warn("Can't set value of " + this.typeName());
2382
2382
  }
2383
2383
 
@@ -2454,11 +2454,11 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
2454
2454
  widget.onGetValue = () => {
2455
2455
  return instance;
2456
2456
  };
2457
- widget.onSetValue = (new_value) => {
2458
- instance = new_value;
2457
+ widget.onSetValue = ( newValue, skipCallback ) => {
2458
+ instance = newValue;
2459
2459
  refresh_widget();
2460
- element.querySelector(".lexcustomitems").toggleAttribute('hidden', false);
2461
- this._trigger( new IEvent(name, instance, null), callback );
2460
+ element.querySelector( ".lexcustomitems" ).toggleAttribute( 'hidden', false );
2461
+ if( !skipCallback ) this._trigger( new IEvent( name, instance, null ), callback );
2462
2462
  };
2463
2463
 
2464
2464
  let element = widget.domEl;
@@ -3410,11 +3410,12 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
3410
3410
  }
3411
3411
 
3412
3412
  _trigger( event, callback ) {
3413
- if(callback)
3414
- callback.call(this, event.value, event.domEvent, event.name);
3415
3413
 
3416
- if(this.onevent)
3417
- this.onevent.call(this, event);
3414
+ if( callback )
3415
+ callback.call( this, event.value, event.domEvent, event.name );
3416
+
3417
+ if( this.onevent )
3418
+ this.onevent.call( this, event );
3418
3419
  }
3419
3420
 
3420
3421
  /**
@@ -3542,12 +3543,13 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
3542
3543
  addText( name, value, callback, options = {} ) {
3543
3544
 
3544
3545
  let widget = this.create_widget( name, Widget.TEXT, options );
3546
+
3545
3547
  widget.onGetValue = () => {
3546
3548
  return wValue.value;
3547
3549
  };
3548
- widget.onSetValue = newValue => {
3550
+ widget.onSetValue = ( newValue, skipCallback ) => {
3549
3551
  this.disabled ? wValue.innerText = newValue : wValue.value = newValue;
3550
- Panel._dispatch_event( wValue, "focusout" );
3552
+ Panel._dispatch_event( wValue, "focusout", skipCallback );
3551
3553
  };
3552
3554
 
3553
3555
  let element = widget.domEl;
@@ -3583,9 +3585,10 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
3583
3585
  wValue.setAttribute( "placeholder", options.placeholder );
3584
3586
 
3585
3587
  var resolve = ( function( val, event ) {
3588
+ const skipCallback = event.detail;
3586
3589
  let btn = element.querySelector( ".lexwidgetname .lexicon" );
3587
3590
  if( btn ) btn.style.display = ( val != wValue.iValue ? "block" : "none" );
3588
- this._trigger( new IEvent( name, val, event ), callback );
3591
+ if( !skipCallback ) this._trigger( new IEvent( name, val, event ), callback );
3589
3592
  }).bind( this );
3590
3593
 
3591
3594
  const trigger = options.trigger ?? 'default';
@@ -3662,45 +3665,48 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
3662
3665
 
3663
3666
  addTextArea( name, value, callback, options = {} ) {
3664
3667
 
3665
- let widget = this.create_widget(name, Widget.TEXTAREA, options);
3668
+ let widget = this.create_widget( name, Widget.TEXTAREA, options );
3669
+
3666
3670
  widget.onGetValue = () => {
3667
3671
  return wValue.value;
3668
3672
  };
3669
- widget.onSetValue = (new_value) => {
3670
- wValue.value = new_value;
3671
- Panel._dispatch_event(wValue, "focusout");
3673
+ widget.onSetValue = ( newValue, skipCallback ) => {
3674
+ wValue.value = newValue;
3675
+ Panel._dispatch_event( wValue, "focusout", skipCallback );
3672
3676
  };
3677
+
3673
3678
  let element = widget.domEl;
3674
3679
 
3675
3680
  // Add reset functionality
3676
- if(widget.name && !(options.skipReset ?? false)) {
3677
- Panel._add_reset_property(element.domName, function() {
3681
+ if( widget.name && !( options.skipReset ?? false ) ) {
3682
+ Panel._add_reset_property( element.domName, function() {
3678
3683
  wValue.value = wValue.iValue;
3679
3684
  this.style.display = "none";
3680
- Panel._dispatch_event(wValue, "focusout");
3685
+ Panel._dispatch_event( wValue, "focusout" );
3681
3686
  });
3682
3687
  }
3683
3688
 
3684
3689
  // Add widget value
3685
3690
 
3686
- let container = document.createElement('div');
3691
+ let container = document.createElement( 'div' );
3687
3692
  container.className = "lextextarea";
3688
3693
  container.style.width = options.inputWidth || "calc( 100% - " + LX.DEFAULT_NAME_WIDTH + " )";
3689
3694
  container.style.height = options.height;
3690
3695
  container.style.display = "flex";
3691
3696
 
3692
- let wValue = document.createElement('textarea');
3697
+ let wValue = document.createElement( 'textarea' );
3693
3698
  wValue.value = wValue.iValue = value || "";
3694
3699
  wValue.style.width = "100%";
3695
- Object.assign(wValue.style, options.style ?? {});
3700
+ Object.assign( wValue.style, options.style ?? {} );
3696
3701
 
3697
- if(options.disabled ?? false) wValue.setAttribute("disabled", true);
3698
- if(options.placeholder) wValue.setAttribute("placeholder", options.placeholder);
3702
+ if( options.disabled ?? false ) wValue.setAttribute("disabled", true);
3703
+ if( options.placeholder ) wValue.setAttribute("placeholder", options.placeholder);
3699
3704
 
3700
- var resolve = (function(val, event) {
3701
- let btn = element.querySelector(".lexwidgetname .lexicon");
3702
- if(btn) btn.style.display = (val != wValue.iValue ? "block" : "none");
3703
- this._trigger( new IEvent(name, val, event), callback );
3705
+ var resolve = (function( val, event ) {
3706
+ const skipCallback = event.detail;
3707
+ let btn = element.querySelector( ".lexwidgetname .lexicon" );
3708
+ if( btn ) btn.style.display = ( val != wValue.iValue ? "block" : "none" );
3709
+ if( !skipCallback ) this._trigger( new IEvent( name, val, event ), callback );
3704
3710
  }).bind(this);
3705
3711
 
3706
3712
  const trigger = options.trigger ?? 'default';
@@ -3777,10 +3783,10 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
3777
3783
  widget.onGetValue = () => {
3778
3784
  return wValue.innerText;
3779
3785
  };
3780
- widget.onSetValue = (new_value) => {
3786
+ widget.onSetValue = ( newValue, skipCallback ) => {
3781
3787
  wValue.innerHTML =
3782
3788
  (options.icon ? "<a class='" + options.icon + "'></a>" :
3783
- ( options.img ? "<img src='" + options.img + "'>" : "<span>" + (new_value || "") + "</span>" ));
3789
+ ( options.img ? "<img src='" + options.img + "'>" : "<span>" + (newValue || "") + "</span>" ));
3784
3790
  };
3785
3791
 
3786
3792
  let element = widget.domEl;
@@ -3798,10 +3804,10 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
3798
3804
  ( options.img ? "<img src='" + options.img + "'>" : "<span>" + (value || "") + "</span>" ));
3799
3805
 
3800
3806
  wValue.style.width = "calc( 100% - " + (options.nameWidth ?? LX.DEFAULT_NAME_WIDTH) + ")";
3801
-
3807
+
3802
3808
  if(options.disabled)
3803
3809
  wValue.setAttribute("disabled", true);
3804
-
3810
+
3805
3811
  wValue.addEventListener("click", e => {
3806
3812
  if( options.selectable ) {
3807
3813
  if( options.parent )
@@ -3812,7 +3818,7 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
3812
3818
  });
3813
3819
 
3814
3820
  element.appendChild(wValue);
3815
-
3821
+
3816
3822
  // Remove branch padding and margins
3817
3823
  if(!widget.name) {
3818
3824
  wValue.className += " noname";
@@ -4019,12 +4025,12 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
4019
4025
  widget.onGetValue = () => {
4020
4026
  return element.querySelector("li.selected").getAttribute('value');
4021
4027
  };
4022
- widget.onSetValue = (new_value) => {
4028
+ widget.onSetValue = ( newValue, skipCallback ) => {
4023
4029
  let btn = element.querySelector(".lexwidgetname .lexicon");
4024
- if(btn) btn.style.display = (new_value != wValue.iValue ? "block" : "none");
4025
- value = new_value;
4030
+ if(btn) btn.style.display = (newValue != wValue.iValue ? "block" : "none");
4031
+ value = newValue;
4026
4032
  list.querySelectorAll('li').forEach( e => { if( e.getAttribute('value') == value ) e.click() } );
4027
- this._trigger( new IEvent(name, value, null), callback );
4033
+ if( !skipCallback ) this._trigger( new IEvent(name, value, null), callback );
4028
4034
  };
4029
4035
 
4030
4036
  let element = widget.domEl;
@@ -4220,12 +4226,12 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
4220
4226
  widget.onGetValue = () => {
4221
4227
  return JSON.parse(JSON.stringify(curve_instance.element.value));
4222
4228
  };
4223
- widget.onSetValue = (new_value) => {
4229
+ widget.onSetValue = ( newValue, skipCallback ) => {
4224
4230
  let btn = element.querySelector(".lexwidgetname .lexicon");
4225
- if(btn) btn.style.display = (new_value != curve_instance.element.value ? "block" : "none");
4226
- curve_instance.element.value = JSON.parse(JSON.stringify(new_value));
4231
+ if(btn) btn.style.display = (newValue != curve_instance.element.value ? "block" : "none");
4232
+ curve_instance.element.value = JSON.parse(JSON.stringify(newValue));
4227
4233
  curve_instance.redraw();
4228
- that._trigger( new IEvent(name, curve_instance.element.value, null), callback );
4234
+ if( !skipCallback ) that._trigger( new IEvent(name, curve_instance.element.value, null), callback );
4229
4235
  };
4230
4236
 
4231
4237
  let element = widget.domEl;
@@ -4285,12 +4291,12 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
4285
4291
  widget.onGetValue = () => {
4286
4292
  return element.value;
4287
4293
  };
4288
- widget.onSetValue = (new_value) => {
4294
+ widget.onSetValue = ( newValue, skipCallback ) => {
4289
4295
  let btn = element.querySelector(".lexwidgetname .lexicon");
4290
- if(btn) btn.style.display = (new_value != defaultValue ? "block" : "none");
4291
- value = element.value = new_value;
4296
+ if(btn) btn.style.display = (newValue != defaultValue ? "block" : "none");
4297
+ value = element.value = newValue;
4292
4298
  setLayers();
4293
- that._trigger( new IEvent(name, value), callback );
4299
+ if( !skipCallback ) that._trigger( new IEvent(name, value), callback );
4294
4300
  };
4295
4301
 
4296
4302
  let element = widget.domEl;
@@ -4382,11 +4388,12 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
4382
4388
  values.push( v.value );
4383
4389
  return values;
4384
4390
  };
4385
- widget.onSetValue = (new_value) => {
4386
- values = new_value;
4391
+ widget.onSetValue = ( newValue, skipCallback ) => {
4392
+ values = newValue;
4387
4393
  updateItems();
4388
- this._trigger( new IEvent(name, values, null), callback );
4394
+ if( !skipCallback ) this._trigger( new IEvent(name, values, null), callback );
4389
4395
  };
4396
+
4390
4397
  let element = widget.domEl;
4391
4398
  element.style.flexWrap = "wrap";
4392
4399
 
@@ -4500,14 +4507,13 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
4500
4507
  widget.onGetValue = () => {
4501
4508
  return value;
4502
4509
  };
4503
-
4504
- widget.onSetValue = ( newValue ) => {
4510
+ widget.onSetValue = ( newValue, skipCallback ) => {
4505
4511
  listContainer.querySelectorAll( '.lexlistitem' ).forEach( e => e.classList.remove( 'selected' ) );
4506
4512
  const idx = values.indexOf( newValue );
4507
4513
  if( idx == -1 ) return;
4508
4514
  listContainer.children[ idx ].classList.toggle( 'selected' );
4509
4515
  value = newValue;
4510
- this._trigger( new IEvent( name, newValue ), callback );
4516
+ if( !skipCallback ) this._trigger( new IEvent( name, newValue ), callback );
4511
4517
  };
4512
4518
 
4513
4519
  widget.updateValues = ( newValues ) => {
@@ -4572,18 +4578,19 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
4572
4578
 
4573
4579
  addTags( name, value, callback, options = {} ) {
4574
4580
 
4575
- value = value.replace(/\s/g, '').split(',');
4576
- let defaultValue = [].concat(value);
4577
- let widget = this.create_widget(name, Widget.TAGS, options);
4581
+ value = value.replace( /\s/g, '' ).split( ',' );
4582
+ let defaultValue = [].concat( value );
4583
+ let widget = this.create_widget( name, Widget.TAGS, options );
4584
+
4578
4585
  widget.onGetValue = () => {
4579
- return [].concat(value);
4586
+ return [].concat( value );
4580
4587
  };
4581
- widget.onSetValue = (new_value) => {
4582
- value = [].concat(new_value);
4588
+ widget.onSetValue = ( newValue, skipCallback ) => {
4589
+ value = [].concat( newValue );
4583
4590
  create_tags();
4584
- let btn = element.querySelector(".lexwidgetname .lexicon");
4585
- if(btn) btn.style.display = (new_value != defaultValue ? "block" : "none");1
4586
- that._trigger( new IEvent(name, value), callback );
4591
+ let btn = element.querySelector( ".lexwidgetname .lexicon" );
4592
+ if( btn ) btn.style.display = ( newValue != defaultValue ? "block" : "none" );
4593
+ if( !skipCallback ) that._trigger( new IEvent( name, value ), callback );
4587
4594
  };
4588
4595
 
4589
4596
  let element = widget.domEl;
@@ -4609,7 +4616,7 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
4609
4616
  const create_tags = () => {
4610
4617
 
4611
4618
  tags_container.innerHTML = "";
4612
-
4619
+
4613
4620
  for( let i = 0; i < value.length; ++i )
4614
4621
  {
4615
4622
  let tag_name = value[i];
@@ -4617,36 +4624,36 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
4617
4624
  tag.className = "lextag";
4618
4625
  tag.innerHTML = tag_name;
4619
4626
 
4620
- tag.addEventListener('click', function(e) {
4627
+ tag.addEventListener('click', function( e ) {
4621
4628
  this.remove();
4622
4629
  value.splice( value.indexOf( tag_name ), 1 );
4623
- let btn = element.querySelector(".lexwidgetname .lexicon");
4624
- if(btn) btn.style.display = (value != defaultValue ? "block" : "none");
4625
- that._trigger( new IEvent(name, value, e), callback );
4630
+ let btn = element.querySelector( ".lexwidgetname .lexicon" );
4631
+ if( btn ) btn.style.display = ( value != defaultValue ? "block" : "none" );
4632
+ that._trigger( new IEvent( name, value, e ), callback );
4626
4633
  });
4627
4634
 
4628
- tags_container.appendChild(tag);
4635
+ tags_container.appendChild( tag );
4629
4636
  }
4630
-
4631
- let tag_input = document.createElement('input');
4637
+
4638
+ let tag_input = document.createElement( 'input' );
4632
4639
  tag_input.value = "";
4633
4640
  tag_input.placeholder = "Tag...";
4634
- tags_container.insertChildAtIndex(tag_input, 0);
4635
-
4636
- tag_input.onkeydown = function(e) {
4641
+ tags_container.insertChildAtIndex( tag_input, 0 );
4642
+
4643
+ tag_input.onkeydown = function( e ) {
4637
4644
  const val = this.value.replace(/\s/g, '');
4638
4645
  if( e.key == ' ') {
4639
4646
  e.preventDefault();
4640
4647
  if( !val.length || value.indexOf( val ) > -1 )
4641
4648
  return;
4642
- value.push(val);
4649
+ value.push( val );
4643
4650
  create_tags();
4644
- let btn = element.querySelector(".lexwidgetname .lexicon");
4651
+ let btn = element.querySelector( ".lexwidgetname .lexicon" );
4645
4652
  if(btn) btn.style.display = "block";
4646
- that._trigger( new IEvent(name, value, e), callback );
4653
+ that._trigger( new IEvent( name, value, e ), callback );
4647
4654
  }
4648
4655
  };
4649
-
4656
+
4650
4657
  tag_input.focus();
4651
4658
  }
4652
4659
 
@@ -4675,24 +4682,25 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
4675
4682
 
4676
4683
  addCheckbox( name, value, callback, options = {} ) {
4677
4684
 
4678
- if(!name) {
4679
- throw("Set Widget Name!");
4685
+ if( !name ) {
4686
+ throw( "Set Widget Name!" );
4680
4687
  }
4681
-
4682
- let widget = this.create_widget(name, Widget.CHECKBOX, options);
4688
+
4689
+ let widget = this.create_widget( name, Widget.CHECKBOX, options );
4690
+
4683
4691
  widget.onGetValue = () => {
4684
4692
  return flag.value;
4685
4693
  };
4686
- widget.onSetValue = (value) => {
4687
- if(flag.value !== value)
4688
- Panel._dispatch_event(toggle, "click");
4694
+ widget.onSetValue = ( newValue, skipCallback ) => {
4695
+ if( flag.value !== newValue )
4696
+ Panel._dispatch_event( toggle, "click", skipCallback );
4689
4697
  };
4690
-
4698
+
4691
4699
  let element = widget.domEl;
4692
-
4700
+
4693
4701
  // Add reset functionality
4694
- Panel._add_reset_property(element.domName, function() {
4695
- Panel._dispatch_event(toggle, "click");
4702
+ Panel._add_reset_property( element.domName, function() {
4703
+ Panel._dispatch_event( toggle, "click" );
4696
4704
  });
4697
4705
 
4698
4706
  // Add widget value
@@ -4723,30 +4731,35 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
4723
4731
  container.appendChild(toggle);
4724
4732
  container.appendChild(value_name);
4725
4733
 
4726
- toggle.addEventListener("click", (e) => {
4734
+ toggle.addEventListener( "click" , e => {
4727
4735
 
4728
- let flag = toggle.querySelector(".checkbox");
4729
- if(flag.disabled)
4730
- return;
4731
-
4732
- let check = toggle.querySelector(".checkbox a");
4736
+ let flag = toggle.querySelector( ".checkbox" );
4737
+ if( flag.disabled )
4738
+ return;
4739
+
4740
+ const skipCallback = e.detail;
4733
4741
 
4742
+ let check = toggle.querySelector( ".checkbox a" );
4743
+
4734
4744
  flag.value = !flag.value;
4735
- flag.className = "checkbox " + (flag.value ? "on" : "");
4745
+ flag.className = "checkbox " + ( flag.value ? "on" : "" );
4736
4746
  check.style.display = flag.value ? "block" : "none";
4737
-
4747
+
4738
4748
  // Reset button (default value)
4739
- let btn = element.querySelector(".lexwidgetname .lexicon");
4740
- if(btn) btn.style.display = flag.value != flag.iValue ? "block": "none";
4741
-
4749
+ if( !skipCallback )
4750
+ {
4751
+ let btn = element.querySelector( ".lexwidgetname .lexicon" );
4752
+ if( btn ) btn.style.display = flag.value != flag.iValue ? "block": "none";
4753
+ }
4754
+
4742
4755
  // Open suboptions
4743
- let submenu = element.querySelector(".lexcheckboxsubmenu");
4744
- if(submenu) submenu.toggleAttribute('hidden', !flag.value);
4745
-
4746
- this._trigger( new IEvent(name, flag.value, e), callback );
4756
+ let submenu = element.querySelector( ".lexcheckboxsubmenu" );
4757
+ if( submenu ) submenu.toggleAttribute( 'hidden', !flag.value );
4758
+
4759
+ if( !skipCallback ) this._trigger( new IEvent( name, flag.value, e ), callback );
4747
4760
  });
4748
-
4749
- element.appendChild(container);
4761
+
4762
+ element.appendChild( container );
4750
4763
 
4751
4764
  if( options.suboptions )
4752
4765
  {
@@ -4777,92 +4790,86 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
4777
4790
 
4778
4791
  addColor( name, value, callback, options = {} ) {
4779
4792
 
4780
- if(!name) {
4781
- throw("Set Widget Name!");
4793
+ if( !name ) {
4794
+ throw( "Set Widget Name!" );
4782
4795
  }
4783
-
4784
- let widget = this.create_widget(name, Widget.COLOR, options);
4796
+
4797
+ let widget = this.create_widget( name, Widget.COLOR, options );
4798
+
4785
4799
  widget.onGetValue = () => {
4786
4800
  return color.value;
4787
4801
  };
4788
- widget.onSetValue = (new_value) => {
4789
- color.value = new_value;
4790
- Panel._dispatch_event(color, "input");
4802
+ widget.onSetValue = ( newValue, skipCallback ) => {
4803
+ color.value = newValue;
4804
+ Panel._dispatch_event( color, "input", skipCallback );
4791
4805
  };
4806
+
4792
4807
  let element = widget.domEl;
4793
4808
  let change_from_input = false;
4794
-
4809
+
4795
4810
  // Add reset functionality
4796
- Panel._add_reset_property(element.domName, function() {
4811
+ Panel._add_reset_property( element.domName, function() {
4797
4812
  this.style.display = "none";
4798
4813
  color.value = color.iValue;
4799
- Panel._dispatch_event(color, "input");
4814
+ Panel._dispatch_event( color, "input" );
4800
4815
  });
4801
-
4816
+
4802
4817
  // Add widget value
4803
-
4804
- var container = document.createElement('span');
4818
+
4819
+ var container = document.createElement( 'span' );
4805
4820
  container.className = "lexcolor";
4806
4821
  container.style.width = "calc( 100% - " + LX.DEFAULT_NAME_WIDTH + ")";
4807
-
4808
- let color = document.createElement('input');
4822
+
4823
+ let color = document.createElement( 'input' );
4809
4824
  color.style.width = "calc(30% - 6px)";
4810
4825
  color.type = 'color';
4811
4826
  color.className = "colorinput";
4812
4827
  color.id = "color" + simple_guidGenerator();
4813
4828
  color.useRGB = options.useRGB ?? false;
4814
- color.value = color.iValue = value.constructor === Array ? rgbToHex(value) : value;
4829
+ color.value = color.iValue = value.constructor === Array ? rgbToHex( value ) : value;
4815
4830
 
4816
- if(options.disabled) {
4831
+ if( options.disabled ) {
4817
4832
  color.disabled = true;
4818
4833
  }
4819
-
4820
- color.addEventListener("input", e => {
4834
+
4835
+ color.addEventListener( "input", e => {
4821
4836
  let val = e.target.value;
4822
-
4837
+
4838
+ const skipCallback = e.detail;
4839
+
4823
4840
  // Change value (always hex)
4824
4841
  if( !change_from_input )
4825
- text_widget.set(val);
4826
-
4842
+ text_widget.set( val );
4843
+
4827
4844
  // Reset button (default value)
4828
- if(val != color.iValue) {
4829
- let btn = element.querySelector(".lexwidgetname .lexicon");
4830
- btn.style.display = "block";
4845
+ if( !skipCallback )
4846
+ {
4847
+ let btn = element.querySelector( ".lexwidgetname .lexicon" );
4848
+ if( btn ) btn.style.display = val != color.iValue ? "block": "none";
4831
4849
  }
4832
-
4833
- if(color.useRGB)
4834
- val = hexToRgb(val);
4835
-
4836
- this._trigger( new IEvent(name, val, e), callback );
4837
- }, false);
4838
-
4839
- container.appendChild(color);
4840
-
4850
+
4851
+ if( color.useRGB )
4852
+ val = hexToRgb( val );
4853
+
4854
+ if( !skipCallback ) this._trigger( new IEvent( name, val, e ), callback );
4855
+ }, false );
4856
+
4857
+ container.appendChild( color );
4858
+
4841
4859
  this.queue( container );
4842
-
4843
- const text_widget = this.addText(null, color.value, (v) => {
4860
+
4861
+ const text_widget = this.addText( null, color.value, v => {
4844
4862
  change_from_input = true;
4845
4863
  widget.set( v );
4846
4864
  change_from_input = false;
4847
4865
  }, { width: "calc(70% - 4px)" });
4848
4866
 
4849
4867
  text_widget.domEl.style.marginLeft = "4px";
4850
-
4868
+
4851
4869
  this.clearQueue();
4852
-
4853
- // let valueName = document.createElement('span');
4854
- // valueName.className = "colorinfo";
4855
- // valueName.innerText = color.value;
4856
-
4857
- // valueName.addEventListener("click", e => {
4858
- // color.focus();
4859
- // color.click();
4860
- // });
4861
-
4862
- // container.appendChild(valueName);
4863
-
4864
- element.appendChild(container);
4865
-
4870
+
4871
+ element.appendChild( container );
4872
+
4866
4873
  return widget;
4867
4874
  }
4868
4875
 
@@ -4881,109 +4888,120 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
4881
4888
 
4882
4889
  addNumber( name, value, callback, options = {} ) {
4883
4890
 
4884
- let widget = this.create_widget(name, Widget.NUMBER, options);
4891
+ let widget = this.create_widget( name, Widget.NUMBER, options );
4892
+
4885
4893
  widget.onGetValue = () => {
4886
4894
  return +vecinput.value;
4887
4895
  };
4888
- widget.onSetValue = (new_value) => {
4889
- vecinput.value = new_value;
4890
- Panel._dispatch_event(vecinput, "change");
4896
+ widget.onSetValue = ( newValue, skipCallback ) => {
4897
+ vecinput.value = newValue;
4898
+ Panel._dispatch_event( vecinput, "change", skipCallback );
4891
4899
  };
4900
+
4892
4901
  let element = widget.domEl;
4893
4902
 
4894
4903
  // add reset functionality
4895
- if(widget.name) {
4896
- Panel._add_reset_property(element.domName, function() {
4904
+ if( widget.name ) {
4905
+ Panel._add_reset_property( element.domName, function() {
4897
4906
  this.style.display = "none";
4898
4907
  vecinput.value = vecinput.iValue;
4899
- Panel._dispatch_event(vecinput, "change");
4908
+ Panel._dispatch_event( vecinput, "change" );
4900
4909
  });
4901
4910
  }
4902
4911
 
4903
4912
  // add widget value
4904
4913
 
4905
- var container = document.createElement('div');
4914
+ var container = document.createElement( 'div' );
4906
4915
  container.className = "lexnumber";
4907
4916
  container.style.width = options.inputWidth || "calc( 100% - " + LX.DEFAULT_NAME_WIDTH + ")";
4908
4917
 
4909
- let box = document.createElement('div');
4918
+ let box = document.createElement( 'div' );
4910
4919
  box.className = "numberbox";
4911
4920
 
4912
- let vecinput = document.createElement('input');
4921
+ let vecinput = document.createElement( 'input' );
4913
4922
  vecinput.className = "vecinput";
4914
4923
  vecinput.min = options.min ?? -1e24;
4915
4924
  vecinput.max = options.max ?? 1e24;
4916
4925
  vecinput.step = options.step ?? "any";
4917
4926
  vecinput.type = "number";
4918
- vecinput.id = "number_"+simple_guidGenerator();
4927
+ vecinput.id = "number_" + simple_guidGenerator();
4919
4928
 
4920
4929
  if( value.constructor == Number )
4921
4930
  {
4922
- value = clamp(value, +vecinput.min, +vecinput.max);
4923
- value = options.precision ? round(value, options.precision) : value;
4931
+ value = clamp( value, +vecinput.min, +vecinput.max );
4932
+ value = options.precision ? round( value, options.precision ) : value;
4924
4933
  }
4925
4934
 
4926
4935
  vecinput.value = vecinput.iValue = value;
4927
- box.appendChild(vecinput);
4936
+ box.appendChild( vecinput );
4928
4937
 
4929
- let drag_icon = document.createElement('a');
4938
+ let drag_icon = document.createElement( 'a' );
4930
4939
  drag_icon.className = "fa-solid fa-arrows-up-down drag-icon hidden";
4931
- box.appendChild(drag_icon);
4940
+ box.appendChild( drag_icon );
4932
4941
 
4933
- if(options.disabled) {
4942
+ if( options.disabled ) {
4934
4943
  vecinput.disabled = true;
4935
4944
  }
4936
4945
 
4937
4946
  // add slider below
4938
- if(!options.skipSlider && options.min !== undefined && options.max !== undefined) {
4939
- let slider = document.createElement('input');
4947
+ if( !options.skipSlider && options.min !== undefined && options.max !== undefined ) {
4948
+ let slider = document.createElement( 'input' );
4940
4949
  slider.className = "lexinputslider";
4941
4950
  slider.step = options.step ?? 1;
4942
4951
  slider.min = options.min;
4943
4952
  slider.max = options.max;
4944
4953
  slider.type = "range";
4945
4954
  slider.value = value;
4946
- slider.addEventListener("input", function(e) {
4955
+ slider.addEventListener( "input", function( e ) {
4947
4956
  let new_value = +this.valueAsNumber;
4948
- vecinput.value = (+new_value).toFixed(4).replace(/([0-9]+(\.[0-9]+[1-9])?)(\.?0+$)/,'$1');
4949
- Panel._dispatch_event(vecinput, "change");
4950
- }, false);
4951
- box.appendChild(slider);
4957
+ vecinput.value = ( +new_value ).toFixed( 4 ).replace( /([0-9]+(\.[0-9]+[1-9])?)(\.?0+$)/, '$1' );
4958
+ Panel._dispatch_event( vecinput, "change" );
4959
+ }, false );
4960
+ box.appendChild( slider );
4952
4961
  }
4953
4962
 
4954
4963
  // Add wheel input
4955
4964
 
4956
- vecinput.addEventListener("wheel", function(e) {
4965
+ vecinput.addEventListener( "wheel", function( e ) {
4957
4966
  e.preventDefault();
4958
- if(this !== document.activeElement)
4967
+ if( this !== document.activeElement )
4959
4968
  return;
4960
4969
  let mult = options.step ?? 1;
4961
- if(e.shiftKey) mult *= 10;
4962
- else if(e.altKey) mult *= 0.1;
4963
- let new_value = (+this.valueAsNumber - mult * (e.deltaY > 0 ? 1 : -1));
4964
- this.value = (+new_value).toFixed(4).replace(/([0-9]+(\.[0-9]+[1-9])?)(\.?0+$)/,'$1');
4970
+ if( e.shiftKey ) mult *= 10;
4971
+ else if( e.altKey ) mult *= 0.1;
4972
+ let new_value = ( +this.valueAsNumber - mult * ( e.deltaY > 0 ? 1 : -1 ) );
4973
+ this.value = ( +new_value ).toFixed( 4 ).replace( /([0-9]+(\.[0-9]+[1-9])?)(\.?0+$)/, '$1' );
4965
4974
  Panel._dispatch_event(vecinput, "change");
4966
- }, {passive:false});
4975
+ }, { passive: false });
4976
+
4977
+ vecinput.addEventListener( "change", e => {
4967
4978
 
4968
- vecinput.addEventListener("change", e => {
4969
- if(isNaN(e.target.valueAsNumber))
4979
+ if( isNaN( e.target.valueAsNumber ) )
4970
4980
  return;
4971
- let val = e.target.value = clamp(+e.target.valueAsNumber, +vecinput.min, +vecinput.max);
4972
- val = options.precision ? round(val, options.precision) : val;
4981
+
4982
+ const skipCallback = e.detail;
4983
+
4984
+ let val = e.target.value = clamp( +e.target.valueAsNumber, +vecinput.min, +vecinput.max );
4985
+ val = options.precision ? round( val, options.precision ) : val;
4973
4986
  // update slider!
4974
- if( box.querySelector(".lexinputslider"))
4975
- box.querySelector(".lexinputslider").value = val;
4987
+ if( box.querySelector( ".lexinputslider" ) )
4988
+ box.querySelector( ".lexinputslider" ).value = val;
4976
4989
 
4977
4990
  vecinput.value = val;
4991
+
4978
4992
  // Reset button (default value)
4979
- let btn = element.querySelector(".lexwidgetname .lexicon");
4980
- if(btn) btn.style.display = val != vecinput.iValue ? "block": "none";
4981
- this._trigger( new IEvent(name, val, e), callback );
4982
- }, {passive:false});
4993
+ if( !skipCallback )
4994
+ {
4995
+ let btn = element.querySelector( ".lexwidgetname .lexicon" );
4996
+ if( btn ) btn.style.display = val != vecinput.iValue ? "block": "none";
4997
+ }
4998
+
4999
+ if( !skipCallback ) this._trigger( new IEvent( name, val, e ), callback );
5000
+ }, { passive: false });
4983
5001
 
4984
5002
  // Add drag input
4985
5003
 
4986
- vecinput.addEventListener("mousedown", inner_mousedown);
5004
+ vecinput.addEventListener( "mousedown", inner_mousedown );
4987
5005
 
4988
5006
  var that = this;
4989
5007
  var lastY = 0;
@@ -5041,44 +5059,39 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
5041
5059
 
5042
5060
  _add_vector( num_components, name, value, callback, options = {} ) {
5043
5061
 
5044
- num_components = clamp(num_components, 2, 4);
5045
- value = value ?? new Array(num_components).fill(0);
5062
+ num_components = clamp( num_components, 2, 4 );
5063
+ value = value ?? new Array( num_components ).fill( 0 );
5046
5064
 
5047
- if(!name) {
5048
- throw("Set Widget Name!");
5065
+ if( !name ) {
5066
+ throw( "Set Widget Name!" );
5049
5067
  }
5050
5068
 
5051
- let widget = this.create_widget(name, Widget.VECTOR, options);
5069
+ let widget = this.create_widget( name, Widget.VECTOR, options );
5052
5070
 
5053
5071
  widget.onGetValue = () => {
5054
- let inputs = element.querySelectorAll("input");
5072
+ let inputs = element.querySelectorAll( "input" );
5055
5073
  let value = [];
5056
5074
  for( var v of inputs )
5057
5075
  value.push( +v.value );
5058
5076
  return value;
5059
5077
  };
5060
- widget.onSetValue = (new_value) => {
5061
- const inputs = element.querySelectorAll(".vecinput");
5078
+ widget.onSetValue = ( newValue, skipCallback ) => {
5079
+ const inputs = element.querySelectorAll( ".vecinput" );
5062
5080
  for( var i = 0; i < inputs.length; ++i ) {
5063
- inputs[i].value = new_value[i] ?? 0;
5064
- Panel._dispatch_event(inputs[i], "change");
5081
+ let value = newValue[ i ];
5082
+ inputs[ i ].value = value ?? 0;
5083
+ Panel._dispatch_event( inputs[ i ], "change", skipCallback );
5065
5084
  }
5066
5085
  };
5067
- widget.setValue = (new_value) => {
5068
- const inputs = element.querySelectorAll(".vecinput");
5069
- for( var i = 0; i < inputs.length; ++i ) {
5070
- inputs[i].value = new_value[i] ?? 0;
5071
- }
5072
- }
5073
5086
 
5074
5087
  let element = widget.domEl;
5075
5088
 
5076
5089
  // Add reset functionality
5077
- Panel._add_reset_property(element.domName, function() {
5090
+ Panel._add_reset_property( element.domName, function() {
5078
5091
  this.style.display = "none";
5079
- for( let v of element.querySelectorAll(".vecinput") ) {
5092
+ for( let v of element.querySelectorAll( ".vecinput" ) ) {
5080
5093
  v.value = v.iValue;
5081
- Panel._dispatch_event(v, "change");
5094
+ Panel._dispatch_event( v, "change" );
5082
5095
  }
5083
5096
  });
5084
5097
 
@@ -5090,88 +5103,91 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
5090
5103
 
5091
5104
  for( let i = 0; i < num_components; ++i ) {
5092
5105
 
5093
- let box = document.createElement('div');
5106
+ let box = document.createElement( 'div' );
5094
5107
  box.className = "vecbox";
5095
- box.innerHTML = "<span class='" + Panel.VECTOR_COMPONENTS[i] + "'></span>";
5108
+ box.innerHTML = "<span class='" + Panel.VECTOR_COMPONENTS[ i ] + "'></span>";
5096
5109
 
5097
- let vecinput = document.createElement('input');
5110
+ let vecinput = document.createElement( 'input' );
5098
5111
  vecinput.className = "vecinput v" + num_components;
5099
5112
  vecinput.min = options.min ?? -1e24;
5100
5113
  vecinput.max = options.max ?? 1e24;
5101
5114
  vecinput.step = options.step ?? "any";
5102
5115
  vecinput.type = "number";
5103
- vecinput.id = "vec"+num_components+"_"+simple_guidGenerator();
5116
+ vecinput.id = "vec" + num_components + "_" + simple_guidGenerator();
5104
5117
  vecinput.idx = i;
5105
5118
 
5106
- if( value[i].constructor == Number )
5119
+ if( value[ i ].constructor == Number )
5107
5120
  {
5108
- value[i] = clamp(value[i], +vecinput.min, +vecinput.max);
5109
- value[i] = options.precision ? round(value[i], options.precision) : value[i];
5121
+ value[ i ] = clamp(value[ i ], +vecinput.min, +vecinput.max);
5122
+ value[ i ] = options.precision ? round(value[ i ], options.precision) : value[ i ];
5110
5123
  }
5111
5124
 
5112
- vecinput.value = vecinput.iValue = value[i];
5125
+ vecinput.value = vecinput.iValue = value[ i ];
5113
5126
 
5114
- let drag_icon = document.createElement('a');
5127
+ let drag_icon = document.createElement( 'a' );
5115
5128
  drag_icon.className = "fa-solid fa-arrows-up-down drag-icon hidden";
5116
- box.appendChild(drag_icon);
5129
+ box.appendChild( drag_icon );
5117
5130
 
5118
- if(options.disabled) {
5131
+ if( options.disabled ) {
5119
5132
  vecinput.disabled = true;
5120
5133
  }
5121
5134
 
5122
5135
  // Add wheel input
5123
5136
 
5124
- vecinput.addEventListener("wheel", function(e) {
5137
+ vecinput.addEventListener( "wheel", function( e ) {
5125
5138
  e.preventDefault();
5126
- if(this !== document.activeElement)
5139
+ if( this !== document.activeElement )
5127
5140
  return;
5128
5141
  let mult = options.step ?? 1;
5129
- if(e.shiftKey) mult = 10;
5130
- else if(e.altKey) mult = 0.1;
5142
+ if( e.shiftKey ) mult = 10;
5143
+ else if( e.altKey ) mult = 0.1;
5131
5144
 
5132
5145
  if( lock_icon.locked )
5133
5146
  {
5134
5147
  for( let v of element.querySelectorAll(".vecinput") ) {
5135
- v.value = (+v.valueAsNumber - mult * (e.deltaY > 0 ? 1 : -1)).toPrecision(5);
5148
+ v.value = ( +v.valueAsNumber - mult * ( e.deltaY > 0 ? 1 : -1 ) ).toPrecision( 5 );
5136
5149
  Panel._dispatch_event(v, "change");
5137
5150
  }
5138
5151
  } else {
5139
- this.value = (+this.valueAsNumber - mult * (e.deltaY > 0 ? 1 : -1)).toPrecision(5);
5140
- Panel._dispatch_event(vecinput, "change");
5152
+ this.value = ( +this.valueAsNumber - mult * ( e.deltaY > 0 ? 1 : -1 ) ).toPrecision( 5 );
5153
+ Panel._dispatch_event( vecinput, "change" );
5141
5154
  }
5142
- }, {passive:false});
5155
+ }, { passive: false } );
5143
5156
 
5144
- vecinput.addEventListener("change", e => {
5157
+ vecinput.addEventListener( "change", e => {
5145
5158
 
5146
5159
  if( isNaN( e.target.value ) )
5147
5160
  return;
5148
5161
 
5149
- console.log(e.target.value);
5150
- let val = e.target.value = clamp(e.target.value, +vecinput.min, +vecinput.max);
5151
- val = options.precision ? round(val, options.precision) : val;
5152
- console.log(val);
5162
+ const skipCallback = e.detail;
5163
+
5164
+ let val = e.target.value = clamp( e.target.value, +vecinput.min, +vecinput.max );
5165
+ val = options.precision ? round( val, options.precision ) : val;
5153
5166
 
5154
5167
  // Reset button (default value)
5155
- let btn = element.querySelector( ".lexwidgetname .lexicon" );
5156
- if( btn ) btn.style.display = val != vecinput.iValue ? "block": "none";
5168
+ if( !skipCallback )
5169
+ {
5170
+ let btn = element.querySelector( ".lexwidgetname .lexicon" );
5171
+ if( btn ) btn.style.display = val != vecinput.iValue ? "block": "none";
5172
+ }
5157
5173
 
5158
5174
  if( lock_icon.locked )
5159
5175
  {
5160
- for( let v of element.querySelectorAll(".vecinput") ) {
5176
+ for( let v of element.querySelectorAll( ".vecinput" ) ) {
5161
5177
  v.value = val;
5162
- value[v.idx] = val;
5178
+ value[ v.idx ] = val;
5163
5179
  }
5164
5180
  } else {
5165
5181
  vecinput.value = val;
5166
- value[e.target.idx] = val;
5182
+ value[ e.target.idx ] = val;
5167
5183
  }
5168
5184
 
5169
- this._trigger( new IEvent(name, value, e), callback );
5170
- }, false);
5185
+ if( !skipCallback ) this._trigger( new IEvent( name, value, e ), callback );
5186
+ }, false );
5171
5187
 
5172
5188
  // Add drag input
5173
5189
 
5174
- vecinput.addEventListener("mousedown", inner_mousedown);
5190
+ vecinput.addEventListener( "mousedown", inner_mousedown );
5175
5191
 
5176
5192
  var that = this;
5177
5193
  var lastY = 0;
@@ -5288,15 +5304,17 @@ console.warn( 'Script "build/lexgui.js" is depracated and will be removed soon.
5288
5304
  throw("Set Widget Name!");
5289
5305
  }
5290
5306
 
5291
- let widget = this.create_widget(name, Widget.PROGRESS, options);
5307
+ let widget = this.create_widget( name, Widget.PROGRESS, options );
5308
+
5292
5309
  widget.onGetValue = () => {
5293
5310
  return progress.value;
5294
5311
  };
5295
- widget.onSetValue = (new_value) => {
5296
- element.querySelector("meter").value = new_value;
5312
+ widget.onSetValue = ( newValue, skipCallback ) => {
5313
+ element.querySelector("meter").value = newValue;
5297
5314
  if( element.querySelector("span") )
5298
- element.querySelector("span").innerText = new_value;
5315
+ element.querySelector("span").innerText = newValue;
5299
5316
  };
5317
+
5300
5318
  let element = widget.domEl;
5301
5319
 
5302
5320
  var container = document.createElement('div');