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.
- package/build/components/AlertDialog.d.ts +7 -7
- package/build/components/Avatar.d.ts +15 -0
- package/build/components/Counter.d.ts +9 -9
- package/build/components/Dialog.d.ts +20 -20
- package/build/components/Footer.d.ts +14 -14
- package/build/components/Menubar.d.ts +59 -59
- package/build/components/NodeTree.d.ts +26 -1
- package/build/components/Vector.d.ts +1 -0
- package/build/core/Area.d.ts +143 -143
- package/build/core/Event.d.ts +0 -20
- package/build/core/Namespace.js +1 -1
- package/build/core/Namespace.js.map +1 -1
- package/build/core/Panel.d.ts +538 -538
- package/build/extensions/AssetView.d.ts +137 -136
- package/build/extensions/AssetView.js +193 -155
- package/build/extensions/AssetView.js.map +1 -1
- package/build/extensions/Audio.js +163 -163
- package/build/extensions/Audio.js.map +1 -1
- package/build/extensions/CodeEditor.d.ts +358 -350
- package/build/extensions/CodeEditor.js +302 -270
- package/build/extensions/CodeEditor.js.map +1 -1
- package/build/extensions/DocMaker.d.ts +27 -27
- package/build/extensions/DocMaker.js +15 -11
- package/build/extensions/DocMaker.js.map +1 -1
- package/build/extensions/GraphEditor.js +2754 -2760
- package/build/extensions/GraphEditor.js.map +1 -1
- package/build/extensions/ImUi.js +227 -227
- package/build/extensions/Timeline.d.ts +668 -670
- package/build/extensions/Timeline.js +71 -79
- package/build/extensions/Timeline.js.map +1 -1
- package/build/extensions/VideoEditor.d.ts +38 -16
- package/build/extensions/VideoEditor.js +294 -180
- package/build/extensions/VideoEditor.js.map +1 -1
- package/build/extensions/index.d.ts +8 -8
- package/build/extensions/index.js +10 -10
- package/build/index.all.d.ts +2 -2
- package/build/index.css.d.ts +3 -4
- package/build/index.d.ts +57 -56
- package/build/lexgui.all.js +1877 -1520
- package/build/lexgui.all.js.map +1 -1
- package/build/lexgui.all.min.js +1 -1
- package/build/lexgui.all.module.js +1875 -1516
- package/build/lexgui.all.module.js.map +1 -1
- package/build/lexgui.all.module.min.js +1 -1
- package/build/lexgui.css +6123 -5556
- package/build/lexgui.js +997 -814
- package/build/lexgui.js.map +1 -1
- package/build/lexgui.min.css +2 -3
- package/build/lexgui.min.js +1 -1
- package/build/lexgui.module.js +995 -810
- package/build/lexgui.module.js.map +1 -1
- package/build/lexgui.module.min.js +1 -1
- package/changelog.md +65 -2
- package/demo.js +167 -65
- package/examples/all-components.html +40 -55
- package/examples/asset-view.html +27 -0
- package/examples/code-editor.html +12 -1
- package/examples/dialogs.html +13 -2
- package/examples/editor.html +9 -49
- package/examples/index.html +2 -2
- package/examples/side-bar.html +1 -1
- package/examples/timeline.html +2 -2
- package/examples/video-editor.html +1 -1
- package/examples/video-editor2.html +2 -2
- 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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"}
|