lexgui 0.6.2 → 0.6.4
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/nodegraph.js +4 -4
- package/build/components/timeline.js +1580 -2656
- package/build/components/videoeditor.js +72 -46
- package/build/lexgui.css +6 -5
- package/build/lexgui.js +7885 -7388
- package/build/lexgui.min.css +1 -1
- package/build/lexgui.min.js +1 -1
- package/build/lexgui.module.js +7862 -7366
- package/build/lexgui.module.min.js +1 -1
- package/changelog.md +31 -1
- package/demo.js +31 -16
- package/examples/all_widgets.html +30 -1
- package/examples/dialogs.html +1 -1
- package/examples/editor.html +1104 -0
- package/examples/index.html +1 -0
- package/examples/previews/editor.png +0 -0
- package/examples/timeline.html +54 -28
- package/package.json +7 -4
package/examples/index.html
CHANGED
|
Binary file
|
package/examples/timeline.html
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
<script type="module">
|
|
19
19
|
|
|
20
20
|
import { LX } from 'lexgui';
|
|
21
|
-
import { Timeline, KeyFramesTimeline, ClipsTimeline
|
|
21
|
+
import { Timeline, KeyFramesTimeline, ClipsTimeline } from 'lexgui/components/timeline.js';
|
|
22
22
|
|
|
23
23
|
// init library and get main area
|
|
24
24
|
let area = await LX.init();
|
|
@@ -58,6 +58,8 @@
|
|
|
58
58
|
createClipsTimeline( bottomTabs );
|
|
59
59
|
createCurvesTimeline( bottomTabs );
|
|
60
60
|
|
|
61
|
+
LX.doAsync( activeTimeline.resize.bind( activeTimeline ) );
|
|
62
|
+
|
|
61
63
|
let mode = types.KEYFRAMES;
|
|
62
64
|
|
|
63
65
|
bottomArea.onresize = (size) => {
|
|
@@ -77,14 +79,12 @@
|
|
|
77
79
|
activeTimeline.draw();
|
|
78
80
|
if(activeTimeline.playing) {
|
|
79
81
|
|
|
80
|
-
activeTimeline.currentTime
|
|
81
|
-
|
|
82
|
-
activeTimeline.onSetTime(activeTimeline.currentTime);
|
|
83
|
-
}
|
|
82
|
+
activeTimeline.setTime(activeTimeline.currentTime + elapsed*0.001);
|
|
83
|
+
|
|
84
84
|
if(activeTimeline.currentTime >= activeTimeline.animationClip.duration) {
|
|
85
85
|
activeTimeline.currentTime = 0;
|
|
86
86
|
if(!activeTimeline.loop) {
|
|
87
|
-
activeTimeline.
|
|
87
|
+
activeTimeline.setState(false);
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
}
|
|
@@ -114,8 +114,18 @@
|
|
|
114
114
|
panel.clear();
|
|
115
115
|
panel.branch("Canvas", {icon: "Palette", filter: true});
|
|
116
116
|
panel.addColor("Background", LX.getThemeColor("global-color-accent"));
|
|
117
|
-
panel.addText("Track", trackName,
|
|
118
|
-
|
|
117
|
+
panel.addText("Track", trackName, (value, event) =>{
|
|
118
|
+
const visibleItems = activeTimeline.getVisibleItems();
|
|
119
|
+
for ( let i = 0; i < visibleItems.length; ++i ) {
|
|
120
|
+
const track = visibleItems[i].treeData.trackData;
|
|
121
|
+
if ( track ){
|
|
122
|
+
track.id = value;
|
|
123
|
+
activeTimeline.updateLeftPanel();
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
panel.addText("Text", "Lexgui.js @evallsg @japopra", null, {placeholder: "e.g. ColorPicker", icon: "Type"});
|
|
119
129
|
panel.addColor("Font Color", { r: 1, g: 0.1, b: 0.6 }, (value, event) => {
|
|
120
130
|
console.log("Font Color: ", value);
|
|
121
131
|
});
|
|
@@ -123,10 +133,10 @@
|
|
|
123
133
|
console.log(value);
|
|
124
134
|
}, { min: 1, max: 48, step: 1});
|
|
125
135
|
panel.addVector2("2D Position", position, (value, event) => {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
const track = activeTimeline.animationClip.tracks[0];
|
|
129
|
-
const keyframe = currentSelection[
|
|
136
|
+
if( activeTimeline.lastKeyFramesSelected.length ){
|
|
137
|
+
const currentSelection =activeTimeline.lastKeyFramesSelected[0];
|
|
138
|
+
const track = activeTimeline.animationClip.tracks[currentSelection[0]];
|
|
139
|
+
const keyframe = currentSelection[1];
|
|
130
140
|
const dim = track.dim;
|
|
131
141
|
|
|
132
142
|
track.values[keyframe * track.dim] = value[0];
|
|
@@ -169,7 +179,17 @@
|
|
|
169
179
|
panel.addNumber("Duration", clip.duration, (v) => {
|
|
170
180
|
clip.duration = v;
|
|
171
181
|
}, {step: 0.01});
|
|
182
|
+
|
|
183
|
+
panel.addColor( "Color", clip.clipColor ?? "#000", (value, event)=>{
|
|
184
|
+
clip.clipColor = value;
|
|
185
|
+
} );
|
|
172
186
|
|
|
187
|
+
if ( clip.fadein != undefined ){
|
|
188
|
+
panel.addColor( "Fade Color", clip.fadeColor ?? "#000", (value, event)=>{
|
|
189
|
+
clip.fadeColor = value;
|
|
190
|
+
} );
|
|
191
|
+
}
|
|
192
|
+
|
|
173
193
|
panel.merge();
|
|
174
194
|
}
|
|
175
195
|
|
|
@@ -178,6 +198,7 @@
|
|
|
178
198
|
let keyframesPanel = new LX.Panel();
|
|
179
199
|
bottomTabs.add( "Keyframes", keyframesPanel, {onSelect: () => {
|
|
180
200
|
activeTimeline = kfTimeline;
|
|
201
|
+
kfTimeline.resize();
|
|
181
202
|
kfTimeline.show();
|
|
182
203
|
fillPanel(panel);
|
|
183
204
|
mode = types.KEYFRAMES;
|
|
@@ -185,19 +206,19 @@
|
|
|
185
206
|
keyframesPanel.onresize = () => {
|
|
186
207
|
kfTimeline.resize();
|
|
187
208
|
}
|
|
188
|
-
let kfTimeline = new LX.KeyFramesTimeline('
|
|
209
|
+
let kfTimeline = new LX.KeyFramesTimeline('Keyframes Timeline', {
|
|
189
210
|
disableNewTracks: true,
|
|
190
|
-
|
|
211
|
+
onCreateBeforeTopBar: (panel) => {
|
|
191
212
|
panel.addSelect("Animation", ["Anim 1", "Anim 2", "Anim 3"], "Anim 1", ()=> {})
|
|
192
213
|
},
|
|
193
|
-
|
|
214
|
+
onCreateAfterTopBar: (panel) => {
|
|
194
215
|
panel.addButton("autoKeyEnabled", "autoKeyEnable", null, { icon: 'WandSparkles', hideName: true });
|
|
195
216
|
panel.addButton("unselectAll", "unselectAll", (value, event) => { kfTimeline.unSelectAllKeyFrames();}, { icon: 'X', hideName: true, callback: (value, event) => { kfTimeline.unSelectAllKeyFrames();} });
|
|
196
217
|
}
|
|
197
218
|
});
|
|
198
219
|
|
|
199
220
|
keyframesPanel.attach(kfTimeline.mainArea);
|
|
200
|
-
kfTimeline.setAnimationClip({tracks: [{
|
|
221
|
+
kfTimeline.setAnimationClip({tracks: [{id: "Font.position", values: [250, 450, 250, 250, 250, 450], times: [0, 0.5, 1.0]}, {id: "Item 1.scale", values: [0,1,0, 0.5], times: [0, 0.1, 0.2, 0.3]}, {id: "Item 2", values: [0,1,0,1], times: [0.1]}, {id: "Item 3.position", values: [0,1,0,0,0,0], times: [0.1, 0.2, 0.3]}, {id: "Item 3.scale", values: [0,1,0], times: [ 0.1, 0.2, 0.3]}], duration: 1}, true);
|
|
201
222
|
kfTimeline.setSelectedItems(["Font", "Item 2", "Item 3"]);
|
|
202
223
|
activeTimeline = kfTimeline;
|
|
203
224
|
kfTimeline.show();
|
|
@@ -209,16 +230,16 @@
|
|
|
209
230
|
return;
|
|
210
231
|
}
|
|
211
232
|
rightArea.show();
|
|
212
|
-
trackName = data.track.
|
|
213
|
-
if(
|
|
233
|
+
trackName = data.track.id ;
|
|
234
|
+
if( data.track.groupId != "Font" || data.track.id != "position") {
|
|
214
235
|
return
|
|
215
236
|
}
|
|
216
|
-
const id = data.track.
|
|
237
|
+
const id = data.track.trackIdx;
|
|
217
238
|
let values = kfTimeline.animationClip.tracks[id].values;
|
|
218
239
|
const dim = kfTimeline.animationClip.tracks[id].dim;
|
|
219
240
|
|
|
220
241
|
//currentSelection == [track.name, track.idx, frameIdx, track.clipIdx, track.times[frameIdx]]
|
|
221
|
-
const keyFrameIndex = currentSelection[
|
|
242
|
+
const keyFrameIndex = currentSelection[1];
|
|
222
243
|
position = values.slice(keyFrameIndex * dim, keyFrameIndex * dim + dim);
|
|
223
244
|
fillPanel(panel);
|
|
224
245
|
//kfTimeline.animationClip.tracks[currentSelection[0][0]];
|
|
@@ -252,13 +273,18 @@
|
|
|
252
273
|
let clipsPanel = new LX.Panel();
|
|
253
274
|
bottomTabs.add( "Clips", clipsPanel, {onSelect: () => {
|
|
254
275
|
activeTimeline = clipsTimeline;
|
|
276
|
+
clipsTimeline.resize();
|
|
255
277
|
clipsTimeline.show();
|
|
256
278
|
panel.clear();
|
|
257
279
|
mode = types.CLIPS;
|
|
258
280
|
}});
|
|
259
281
|
|
|
260
|
-
let clipsTimeline = new LX.ClipsTimeline("
|
|
282
|
+
let clipsTimeline = new LX.ClipsTimeline("Clips Timeline");
|
|
261
283
|
clipsPanel.attach(clipsTimeline.root);
|
|
284
|
+
clipsTimeline.setAnimationClip({name: "animation" });
|
|
285
|
+
clipsTimeline.onAddNewTrack = (track, options)=>{
|
|
286
|
+
track.id = "Track " + clipsTimeline.animationClip.tracks.length;
|
|
287
|
+
}
|
|
262
288
|
|
|
263
289
|
let clip = {id:"Clip 1", start:0, duration:1, type:""};
|
|
264
290
|
clipsTimeline.addClip(clip);
|
|
@@ -271,8 +297,6 @@
|
|
|
271
297
|
clip = {id:"Clip 5", start:0, fadein: 0.5, fadeout: 0.8, duration:1, type:""};
|
|
272
298
|
clipsTimeline.addClip(clip);
|
|
273
299
|
|
|
274
|
-
// clipsTimeline.setAnimationClip({tracks: [{clips: [clip]}], duration: 2});
|
|
275
|
-
clipsTimeline.selectedItems = ["Clip 1"];
|
|
276
300
|
clipsTimeline.show();
|
|
277
301
|
|
|
278
302
|
clipsTimeline.onSelectClip = (clip) => {
|
|
@@ -280,26 +304,28 @@
|
|
|
280
304
|
fillClipPanel(panel, clip);
|
|
281
305
|
}
|
|
282
306
|
|
|
283
|
-
clipsTimeline.draw(
|
|
307
|
+
clipsTimeline.draw();
|
|
284
308
|
}
|
|
285
309
|
|
|
286
310
|
function createCurvesTimeline( bottomTabs ) {
|
|
287
311
|
|
|
288
312
|
let curvesPanel = new LX.Panel();
|
|
289
313
|
bottomTabs.add( "Curves", curvesPanel, {onSelect: () => {
|
|
290
|
-
activeTimeline = curvesTimeline;
|
|
291
|
-
curvesTimeline.
|
|
314
|
+
activeTimeline = curvesTimeline;
|
|
315
|
+
curvesTimeline.resize();
|
|
316
|
+
curvesTimeline.show();
|
|
292
317
|
panel.clear();
|
|
293
318
|
mode = types.CLIPS;
|
|
294
319
|
|
|
295
320
|
}});
|
|
296
321
|
|
|
297
|
-
let curvesTimeline = new LX.
|
|
322
|
+
let curvesTimeline = new LX.KeyFramesTimeline("curves-timeline");
|
|
323
|
+
curvesTimeline.defaultCurvesRange = [-1,1];
|
|
298
324
|
curvesPanel.attach(curvesTimeline.root);
|
|
299
325
|
curvesTimeline.setAnimationClip({tracks: [{name: "Item 1.position", values: [0,1,0,-1], times: [0, 0.1, 0.2, 0.3]}, {name: "Item 1.scale", values: [0,1,0, 0.5], times: [0, 0.1, 0.2, 0.3]}, {name: "Item 2", values: [0,1,0,1], times: [0.1, 0.2, 0.3, 0.8]}, {name: "Item 3.position", values: [0,0,1], times: [0]}, {name: "Item 3.scale", values: [0,1,0], times: [0, 0.1, 0.3]}], duration: 1});
|
|
300
326
|
curvesTimeline.setSelectedItems(["Item 1", "Item 2", "Item 3"]);
|
|
301
327
|
curvesTimeline.show();
|
|
302
|
-
curvesTimeline.draw(
|
|
328
|
+
curvesTimeline.draw();
|
|
303
329
|
}
|
|
304
330
|
|
|
305
331
|
</script>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lexgui",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.4",
|
|
4
4
|
"description": "JS library to create web graphical user interfaces",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./build/lexgui.js",
|
|
@@ -36,9 +36,12 @@
|
|
|
36
36
|
"url": "https://github.com/jxarco/lexgui.js/issues"
|
|
37
37
|
},
|
|
38
38
|
"scripts": {
|
|
39
|
+
"rollup-js": "rollup -c rollup.build.config.js",
|
|
39
40
|
"minify-css": "cleancss -o build/lexgui.min.css build/lexgui.css",
|
|
40
|
-
"minify
|
|
41
|
-
"minify": "npm run minify-js && npm run minify-css",
|
|
41
|
+
"minify": "npm run rollup-js && npm run minify-css",
|
|
42
42
|
"build": "python build-legacy.py && npm run minify"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@rollup/plugin-terser": "^0.4.4"
|
|
43
46
|
}
|
|
44
|
-
}
|
|
47
|
+
}
|