lexgui 8.1.2 → 8.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/build/components/AlertDialog.d.ts +7 -7
  2. package/build/components/Avatar.d.ts +15 -0
  3. package/build/components/Counter.d.ts +9 -9
  4. package/build/components/Dialog.d.ts +20 -20
  5. package/build/components/Footer.d.ts +14 -14
  6. package/build/components/Menubar.d.ts +59 -59
  7. package/build/components/NodeTree.d.ts +26 -1
  8. package/build/components/Vector.d.ts +1 -0
  9. package/build/core/Area.d.ts +143 -143
  10. package/build/core/Event.d.ts +0 -20
  11. package/build/core/Namespace.js +1 -1
  12. package/build/core/Namespace.js.map +1 -1
  13. package/build/core/Panel.d.ts +538 -538
  14. package/build/extensions/AssetView.d.ts +137 -136
  15. package/build/extensions/AssetView.js +193 -155
  16. package/build/extensions/AssetView.js.map +1 -1
  17. package/build/extensions/Audio.js +163 -163
  18. package/build/extensions/Audio.js.map +1 -1
  19. package/build/extensions/CodeEditor.d.ts +358 -350
  20. package/build/extensions/CodeEditor.js +302 -270
  21. package/build/extensions/CodeEditor.js.map +1 -1
  22. package/build/extensions/DocMaker.d.ts +27 -27
  23. package/build/extensions/DocMaker.js +15 -11
  24. package/build/extensions/DocMaker.js.map +1 -1
  25. package/build/extensions/GraphEditor.js +2754 -2760
  26. package/build/extensions/GraphEditor.js.map +1 -1
  27. package/build/extensions/ImUi.js +227 -227
  28. package/build/extensions/Timeline.d.ts +668 -670
  29. package/build/extensions/Timeline.js +71 -79
  30. package/build/extensions/Timeline.js.map +1 -1
  31. package/build/extensions/VideoEditor.d.ts +38 -16
  32. package/build/extensions/VideoEditor.js +294 -180
  33. package/build/extensions/VideoEditor.js.map +1 -1
  34. package/build/extensions/index.d.ts +8 -8
  35. package/build/extensions/index.js +10 -10
  36. package/build/index.all.d.ts +2 -2
  37. package/build/index.css.d.ts +3 -4
  38. package/build/index.d.ts +57 -56
  39. package/build/lexgui.all.js +1877 -1520
  40. package/build/lexgui.all.js.map +1 -1
  41. package/build/lexgui.all.min.js +1 -1
  42. package/build/lexgui.all.module.js +1875 -1516
  43. package/build/lexgui.all.module.js.map +1 -1
  44. package/build/lexgui.all.module.min.js +1 -1
  45. package/build/lexgui.css +6123 -5556
  46. package/build/lexgui.js +997 -814
  47. package/build/lexgui.js.map +1 -1
  48. package/build/lexgui.min.css +2 -3
  49. package/build/lexgui.min.js +1 -1
  50. package/build/lexgui.module.js +995 -810
  51. package/build/lexgui.module.js.map +1 -1
  52. package/build/lexgui.module.min.js +1 -1
  53. package/changelog.md +65 -2
  54. package/demo.js +167 -65
  55. package/examples/all-components.html +40 -55
  56. package/examples/asset-view.html +27 -0
  57. package/examples/code-editor.html +12 -1
  58. package/examples/dialogs.html +13 -2
  59. package/examples/editor.html +9 -49
  60. package/examples/index.html +2 -2
  61. package/examples/side-bar.html +1 -1
  62. package/examples/timeline.html +2 -2
  63. package/examples/video-editor.html +1 -1
  64. package/examples/video-editor2.html +2 -2
  65. package/package.json +7 -4
@@ -1,163 +1,163 @@
1
- // This is a generated file. Do not edit.
2
- import { LX } from '../core/Namespace.js';
3
-
4
- // Audio.ts @jxarco
5
- if (!LX) {
6
- throw ('Missing LX namespace!');
7
- }
8
- LX.extensions.push('Audio');
9
- const Panel = LX.Panel;
10
- const BaseComponent = LX.BaseComponent;
11
- const ComponentType = LX.ComponentType;
12
- const IEvent = LX.IEvent;
13
- /**
14
- * @class Knob
15
- * @description Knob Component
16
- */
17
- class Knob extends BaseComponent {
18
- constructor(name, value, min, max, callback, options = {}) {
19
- if (value.constructor == Number) {
20
- value = LX.clamp(value, min, max);
21
- value = options.precision ? LX.round(value, options.precision) : value;
22
- }
23
- super(ComponentType.KNOB, name, value, options);
24
- this.onGetValue = () => {
25
- return innerKnobCircle.value;
26
- };
27
- this.onSetValue = (newValue, skipCallback, event) => {
28
- innerSetValue(newValue);
29
- LX.BaseComponent._dispatchEvent(innerKnobCircle, 'change', skipCallback);
30
- };
31
- this.onResize = () => {
32
- const realNameWidth = this.root.domName?.style.width ?? '0px';
33
- container.style.width = `calc( 100% - ${realNameWidth})`;
34
- };
35
- const snapEnabled = options.snap && options.snap.constructor == Number;
36
- const ticks = [];
37
- if (snapEnabled) {
38
- const range = (max - min) / options.snap;
39
- for (let i = 0; i < (options.snap + 1); ++i) {
40
- ticks.push(min + (i * range));
41
- }
42
- }
43
- var container = document.createElement('div');
44
- container.className = 'lexknob';
45
- LX.addClass(container, options.size);
46
- LX.addClass(container, snapEnabled ? 'show-ticks' : null);
47
- let knobCircle = document.createElement('div');
48
- knobCircle.className = 'knobcircle';
49
- if (snapEnabled) {
50
- knobCircle.style.setProperty('--knob-snap-mark', (270 / options.snap) + 'deg');
51
- }
52
- let innerKnobCircle = document.createElement('div');
53
- innerKnobCircle.className = 'innerknobcircle';
54
- innerKnobCircle.min = min;
55
- innerKnobCircle.max = max;
56
- knobCircle.appendChild(innerKnobCircle);
57
- let knobMarker = document.createElement('div');
58
- knobMarker.className = 'knobmarker';
59
- innerKnobCircle.appendChild(knobMarker);
60
- innerKnobCircle.value = innerKnobCircle.iValue = value;
61
- let mustSnap = false;
62
- let innerSetValue = function (v) {
63
- // Convert val between (-135 and 135)
64
- const angle = LX.remapRange(v, innerKnobCircle.min, innerKnobCircle.max, -135, 135.0);
65
- innerKnobCircle.style.rotate = angle + 'deg';
66
- innerKnobCircle.value = v;
67
- };
68
- const angle = LX.remapRange(value, min, max, -135, 135.0);
69
- innerKnobCircle.style.rotate = angle + 'deg';
70
- if (options.disabled) {
71
- LX.addClass(container, 'disabled');
72
- }
73
- innerKnobCircle.addEventListener('change', (e) => {
74
- const knob = e.target;
75
- const skipCallback = e.detail;
76
- if (mustSnap) {
77
- knob.value = ticks.reduce((prev, curr) => Math.abs(curr - knob.value) < Math.abs(prev - knob.value) ? curr : prev);
78
- }
79
- let val = knob.value = LX.clamp(knob.value, knob.min, knob.max);
80
- val = options.precision ? LX.round(val, options.precision) : val;
81
- innerSetValue(val);
82
- // Reset button (default value)
83
- if (!skipCallback) {
84
- let btn = this.root.querySelector('.lexcomponentname .lexicon');
85
- if (btn)
86
- btn.style.display = val != innerKnobCircle.iValue ? 'block' : 'none';
87
- if (!(snapEnabled && !mustSnap)) {
88
- this._trigger(new IEvent(name, val, e), callback);
89
- mustSnap = false;
90
- }
91
- }
92
- }, { passive: false });
93
- // Add drag input
94
- innerKnobCircle.addEventListener('mousedown', innerMouseDown);
95
- var that = this;
96
- function innerMouseDown(e) {
97
- if (document.activeElement == innerKnobCircle || options.disabled) {
98
- return;
99
- }
100
- var doc = that.root.ownerDocument;
101
- doc.addEventListener('mousemove', innerMouseMove);
102
- doc.addEventListener('mouseup', innerMouseUp);
103
- document.body.classList.add('noevents');
104
- if (!document.pointerLockElement) {
105
- container.requestPointerLock();
106
- }
107
- e.stopImmediatePropagation();
108
- e.stopPropagation();
109
- }
110
- function innerMouseMove(e) {
111
- let dt = -e.movementY;
112
- if (dt != 0) {
113
- let mult = options.step ?? 1;
114
- if (e.shiftKey)
115
- mult *= 10;
116
- else if (e.altKey)
117
- mult *= 0.1;
118
- let new_value = innerKnobCircle.value - mult * dt;
119
- innerKnobCircle.value = new_value;
120
- LX.BaseComponent._dispatchEvent(innerKnobCircle, 'change');
121
- }
122
- e.stopPropagation();
123
- e.preventDefault();
124
- }
125
- function innerMouseUp(e) {
126
- var doc = that.root.ownerDocument;
127
- doc.removeEventListener('mousemove', innerMouseMove);
128
- doc.removeEventListener('mouseup', innerMouseUp);
129
- document.body.classList.remove('noevents');
130
- // Snap if necessary
131
- if (snapEnabled) {
132
- mustSnap = true;
133
- LX.BaseComponent._dispatchEvent(innerKnobCircle, 'change');
134
- }
135
- if (document.pointerLockElement) {
136
- document.exitPointerLock();
137
- }
138
- }
139
- container.appendChild(knobCircle);
140
- this.root.appendChild(container);
141
- LX.doAsync(this.onResize.bind(this));
142
- }
143
- }
144
- LX.Knob = Knob;
145
- /**
146
- * @method addKnob
147
- * @param {String} name Component name
148
- * @param {Number} value Knob value
149
- * @param {Number} min Min Knob value
150
- * @param {Number} max Max Knob value
151
- * @param {Function} callback Callback function on change
152
- * @param {*} options:
153
- * minLabel (String): Label to show as min value
154
- * maxLabel (String): Label to show as max value
155
- */
156
- const panelProto = Panel.prototype;
157
- panelProto.addKnob = function (name, value, min, max, callback, options = {}) {
158
- const component = new Knob(name, value, min, max, callback, options);
159
- return this._attachComponent(component);
160
- };
161
-
162
- export { Knob };
163
- //# sourceMappingURL=Audio.js.map
1
+ // This is a generated file. Do not edit.
2
+ import { LX } from '../core/Namespace.js';
3
+
4
+ // Audio.ts @jxarco
5
+ if (!LX) {
6
+ throw ('Missing LX namespace!');
7
+ }
8
+ LX.extensions.push('Audio');
9
+ const Panel = LX.Panel;
10
+ const BaseComponent = LX.BaseComponent;
11
+ const ComponentType = LX.ComponentType;
12
+ const IEvent = LX.IEvent;
13
+ /**
14
+ * @class Knob
15
+ * @description Knob Component
16
+ */
17
+ class Knob extends BaseComponent {
18
+ constructor(name, value, min, max, callback, options = {}) {
19
+ if (value.constructor == Number) {
20
+ value = LX.clamp(value, min, max);
21
+ value = options.precision ? LX.round(value, options.precision) : value;
22
+ }
23
+ super(ComponentType.KNOB, name, value, options);
24
+ this.onGetValue = () => {
25
+ return innerKnobCircle.value;
26
+ };
27
+ this.onSetValue = (newValue, skipCallback, event) => {
28
+ innerSetValue(newValue);
29
+ LX.BaseComponent._dispatchEvent(innerKnobCircle, 'change', skipCallback);
30
+ };
31
+ this.onResize = () => {
32
+ const realNameWidth = this.root.domName?.style.width ?? '0px';
33
+ container.style.width = `calc( 100% - ${realNameWidth})`;
34
+ };
35
+ const snapEnabled = options.snap && options.snap.constructor == Number;
36
+ const ticks = [];
37
+ if (snapEnabled) {
38
+ const range = (max - min) / options.snap;
39
+ for (let i = 0; i < (options.snap + 1); ++i) {
40
+ ticks.push(min + (i * range));
41
+ }
42
+ }
43
+ var container = document.createElement('div');
44
+ container.className = 'lexknob';
45
+ LX.addClass(container, options.size);
46
+ LX.addClass(container, snapEnabled ? 'show-ticks' : null);
47
+ let knobCircle = document.createElement('div');
48
+ knobCircle.className = 'knobcircle';
49
+ if (snapEnabled) {
50
+ knobCircle.style.setProperty('--knob-snap-mark', (270 / options.snap) + 'deg');
51
+ }
52
+ let innerKnobCircle = document.createElement('div');
53
+ innerKnobCircle.className = 'innerknobcircle';
54
+ innerKnobCircle.min = min;
55
+ innerKnobCircle.max = max;
56
+ knobCircle.appendChild(innerKnobCircle);
57
+ let knobMarker = document.createElement('div');
58
+ knobMarker.className = 'knobmarker';
59
+ innerKnobCircle.appendChild(knobMarker);
60
+ innerKnobCircle.value = innerKnobCircle.iValue = value;
61
+ let mustSnap = false;
62
+ let innerSetValue = function (v) {
63
+ // Convert val between (-135 and 135)
64
+ const angle = LX.remapRange(v, innerKnobCircle.min, innerKnobCircle.max, -135, 135.0);
65
+ innerKnobCircle.style.rotate = angle + 'deg';
66
+ innerKnobCircle.value = v;
67
+ };
68
+ const angle = LX.remapRange(value, min, max, -135, 135.0);
69
+ innerKnobCircle.style.rotate = angle + 'deg';
70
+ if (options.disabled) {
71
+ LX.addClass(container, 'disabled');
72
+ }
73
+ innerKnobCircle.addEventListener('change', (e) => {
74
+ const knob = e.target;
75
+ const skipCallback = e.detail;
76
+ if (mustSnap) {
77
+ knob.value = ticks.reduce((prev, curr) => Math.abs(curr - knob.value) < Math.abs(prev - knob.value) ? curr : prev);
78
+ }
79
+ let val = knob.value = LX.clamp(knob.value, knob.min, knob.max);
80
+ val = options.precision ? LX.round(val, options.precision) : val;
81
+ innerSetValue(val);
82
+ // Reset button (default value)
83
+ if (!skipCallback) {
84
+ let btn = this.root.querySelector('.lexcomponentname .lexicon');
85
+ if (btn)
86
+ btn.style.display = val != innerKnobCircle.iValue ? 'block' : 'none';
87
+ if (!(snapEnabled && !mustSnap)) {
88
+ this._trigger(new IEvent(name, val, e), callback);
89
+ mustSnap = false;
90
+ }
91
+ }
92
+ }, { passive: false });
93
+ // Add drag input
94
+ innerKnobCircle.addEventListener('mousedown', innerMouseDown);
95
+ var that = this;
96
+ function innerMouseDown(e) {
97
+ if (document.activeElement == innerKnobCircle || options.disabled) {
98
+ return;
99
+ }
100
+ var doc = that.root.ownerDocument;
101
+ doc.addEventListener('mousemove', innerMouseMove);
102
+ doc.addEventListener('mouseup', innerMouseUp);
103
+ document.body.classList.add('noevents');
104
+ if (!document.pointerLockElement) {
105
+ container.requestPointerLock();
106
+ }
107
+ e.stopImmediatePropagation();
108
+ e.stopPropagation();
109
+ }
110
+ function innerMouseMove(e) {
111
+ let dt = -e.movementY;
112
+ if (dt != 0) {
113
+ let mult = options.step ?? 1;
114
+ if (e.shiftKey)
115
+ mult *= 10;
116
+ else if (e.altKey)
117
+ mult *= 0.1;
118
+ let new_value = innerKnobCircle.value - mult * dt;
119
+ innerKnobCircle.value = new_value;
120
+ LX.BaseComponent._dispatchEvent(innerKnobCircle, 'change');
121
+ }
122
+ e.stopPropagation();
123
+ e.preventDefault();
124
+ }
125
+ function innerMouseUp(e) {
126
+ var doc = that.root.ownerDocument;
127
+ doc.removeEventListener('mousemove', innerMouseMove);
128
+ doc.removeEventListener('mouseup', innerMouseUp);
129
+ document.body.classList.remove('noevents');
130
+ // Snap if necessary
131
+ if (snapEnabled) {
132
+ mustSnap = true;
133
+ LX.BaseComponent._dispatchEvent(innerKnobCircle, 'change');
134
+ }
135
+ if (document.pointerLockElement) {
136
+ document.exitPointerLock();
137
+ }
138
+ }
139
+ container.appendChild(knobCircle);
140
+ this.root.appendChild(container);
141
+ LX.doAsync(this.onResize.bind(this));
142
+ }
143
+ }
144
+ LX.Knob = Knob;
145
+ /**
146
+ * @method addKnob
147
+ * @param {String} name Component name
148
+ * @param {Number} value Knob value
149
+ * @param {Number} min Min Knob value
150
+ * @param {Number} max Max Knob value
151
+ * @param {Function} callback Callback function on change
152
+ * @param {*} options:
153
+ * minLabel (String): Label to show as min value
154
+ * maxLabel (String): Label to show as max value
155
+ */
156
+ const panelProto = Panel.prototype;
157
+ panelProto.addKnob = function (name, value, min, max, callback, options = {}) {
158
+ const component = new Knob(name, value, min, max, callback, options);
159
+ return this._attachComponent(component);
160
+ };
161
+
162
+ export { Knob };
163
+ //# sourceMappingURL=Audio.js.map
@@ -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 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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"}
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 ) => 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 }, { 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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"}