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
|
@@ -11,7 +11,6 @@ LX.registerIcon('TimelineLockOpen', '<svg xmlns="http://www.w3.org/2000/svg" wid
|
|
|
11
11
|
const Area = LX.Area;
|
|
12
12
|
const Panel = LX.Panel;
|
|
13
13
|
const Dialog = LX.Dialog;
|
|
14
|
-
LX.TreeEvent;
|
|
15
14
|
/**
|
|
16
15
|
* @class Timeline
|
|
17
16
|
* @description Agnostic timeline, do not impose any timeline content. Renders to a canvas
|
|
@@ -20,8 +19,7 @@ class Timeline {
|
|
|
20
19
|
static BACKGROUND_COLOR;
|
|
21
20
|
static TRACK_COLOR_PRIMARY;
|
|
22
21
|
static TRACK_COLOR_SECONDARY;
|
|
23
|
-
static
|
|
24
|
-
static TRACK_COLOR_QUATERNARY;
|
|
22
|
+
static TRACK_COLOR_TERTIARY;
|
|
25
23
|
static TRACK_SELECTED;
|
|
26
24
|
static TRACK_SELECTED_LIGHT;
|
|
27
25
|
static FONT;
|
|
@@ -181,20 +179,19 @@ class Timeline {
|
|
|
181
179
|
* updates theme ( light - dark ) based on LX's current theme
|
|
182
180
|
*/
|
|
183
181
|
function updateTheme() {
|
|
184
|
-
Timeline.BACKGROUND_COLOR = LX.
|
|
185
|
-
Timeline.TRACK_COLOR_PRIMARY = LX.
|
|
186
|
-
Timeline.TRACK_COLOR_SECONDARY = LX.
|
|
187
|
-
Timeline.
|
|
188
|
-
Timeline.
|
|
189
|
-
Timeline.
|
|
190
|
-
Timeline.
|
|
191
|
-
Timeline.
|
|
192
|
-
Timeline.
|
|
193
|
-
Timeline.
|
|
194
|
-
Timeline.
|
|
195
|
-
Timeline.
|
|
196
|
-
Timeline.
|
|
197
|
-
Timeline.KEYFRAME_COLOR_INACTIVE = LX.getThemeColor('lxTimeline-keyframe-inactive');
|
|
182
|
+
Timeline.BACKGROUND_COLOR = LX.getCSSVariable('background-blur');
|
|
183
|
+
Timeline.TRACK_COLOR_PRIMARY = LX.getCSSVariable('card');
|
|
184
|
+
Timeline.TRACK_COLOR_SECONDARY = LX.getCSSVariable('secondary');
|
|
185
|
+
Timeline.TRACK_COLOR_TERTIARY = LX.getCSSVariable('accent');
|
|
186
|
+
Timeline.FONT = LX.getCSSVariable('global-font');
|
|
187
|
+
Timeline.FONT_COLOR_PRIMARY = LX.getCSSVariable('foreground');
|
|
188
|
+
Timeline.FONT_COLOR_TERTIARY = LX.getCSSVariable('primary');
|
|
189
|
+
Timeline.FONT_COLOR_QUATERNARY = LX.getCSSVariable('muted-foreground');
|
|
190
|
+
Timeline.KEYFRAME_COLOR = LX.getCSSVariable('lxTimeline-keyframe');
|
|
191
|
+
Timeline.KEYFRAME_COLOR_SELECTED = Timeline.KEYFRAME_COLOR_HOVERED = LX.getCSSVariable('lxTimeline-keyframe-selected');
|
|
192
|
+
Timeline.KEYFRAME_COLOR_LOCK = LX.getCSSVariable('lxTimeline-keyframe-locked');
|
|
193
|
+
Timeline.KEYFRAME_COLOR_EDITED = LX.getCSSVariable('lxTimeline-keyframe-edited');
|
|
194
|
+
Timeline.KEYFRAME_COLOR_INACTIVE = LX.getCSSVariable('lxTimeline-keyframe-inactive');
|
|
198
195
|
}
|
|
199
196
|
this.updateTheme = updateTheme.bind(this);
|
|
200
197
|
LX.addSignal('@on_new_color_scheme', this.updateTheme);
|
|
@@ -243,7 +240,7 @@ class Timeline {
|
|
|
243
240
|
}, { buttonClass: 'accept', title: 'Stop', hideName: true, icon: 'Stop@solid' });
|
|
244
241
|
header.addButton('loopBtn', '', (value, event) => {
|
|
245
242
|
this.setLoopMode(!this.loop);
|
|
246
|
-
}, { selectable: true, selected: this.loop, title: 'Loop', hideName: true, icon: 'RefreshCw' });
|
|
243
|
+
}, { selectable: true, selected: this.loop, title: 'Loop', hideName: true, icon: 'RefreshCw', buttonClass: 'h-8' });
|
|
247
244
|
if (this.onCreateControlsButtons) {
|
|
248
245
|
this.onCreateControlsButtons(header);
|
|
249
246
|
}
|
|
@@ -319,8 +316,7 @@ class Timeline {
|
|
|
319
316
|
this.leftPanel.clear();
|
|
320
317
|
const panel = this.leftPanel;
|
|
321
318
|
panel.sameLine();
|
|
322
|
-
let titleComponent = panel.addTitle('Tracks', { style: { background: 'none' },
|
|
323
|
-
className: 'fg-secondary text-lg px-4' });
|
|
319
|
+
let titleComponent = panel.addTitle('Tracks', { style: { background: 'none' }, className: 'text-lg px-4' });
|
|
324
320
|
let title = titleComponent.root;
|
|
325
321
|
if (!this.disableNewTracks) {
|
|
326
322
|
panel.addButton('addTrackBtn', '', (value, event) => {
|
|
@@ -341,28 +337,28 @@ class Timeline {
|
|
|
341
337
|
if (this.animationClip && this.selectedItems.length) {
|
|
342
338
|
treeTracks = this.generateSelectedItemsTreeData();
|
|
343
339
|
}
|
|
344
|
-
this.trackTreesComponent = p.addTree(null, treeTracks, { filter: false, rename: false, draggable: false
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
340
|
+
this.trackTreesComponent = p.addTree(null, treeTracks, { filter: false, rename: false, draggable: false });
|
|
341
|
+
this.trackTreesComponent.on('select', (event, resolve) => {
|
|
342
|
+
const node = event.items[0];
|
|
343
|
+
if (!event.domEvent.shiftKey) {
|
|
344
|
+
this.deselectAllTracks(false); // no need to update left panel
|
|
345
|
+
}
|
|
346
|
+
if (node.trackData) {
|
|
347
|
+
const flag = event.domEvent.shiftKey ? !node.trackData.isSelected : true;
|
|
348
|
+
this.setTrackSelection(node.trackData.trackIdx, flag, false, false); // do callback, do not update left panel
|
|
349
|
+
}
|
|
350
|
+
});
|
|
351
|
+
this.trackTreesComponent.on('visibleChanged', (event, resolve) => {
|
|
352
|
+
const node = event.items[0];
|
|
353
|
+
if (node.trackData) {
|
|
354
|
+
this.setTrackState(node.trackData.trackIdx, node.visible, false, false); // do not update left panel
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
// Not used!
|
|
358
|
+
// if ( this.onTrackTreeEvent )
|
|
359
|
+
// {
|
|
360
|
+
// this.onTrackTreeEvent( e );
|
|
361
|
+
// }
|
|
366
362
|
const that = this;
|
|
367
363
|
this.trackTreesComponent.innerTree._refresh = this.trackTreesComponent.innerTree.refresh;
|
|
368
364
|
this.trackTreesComponent.innerTree.refresh = function (newData, selectedId) {
|
|
@@ -546,7 +542,7 @@ class Timeline {
|
|
|
546
542
|
ctx.fillRect(0, treeOffset - rectsOffset + i * line_height, w, line_height);
|
|
547
543
|
}
|
|
548
544
|
// bg lines
|
|
549
|
-
ctx.strokeStyle = Timeline.
|
|
545
|
+
ctx.strokeStyle = Timeline.TRACK_COLOR_TERTIARY;
|
|
550
546
|
ctx.beginPath();
|
|
551
547
|
let pos = this.timeToX(0);
|
|
552
548
|
if (pos < 0)
|
|
@@ -1220,8 +1216,8 @@ class Timeline {
|
|
|
1220
1216
|
const treeTracks = [];
|
|
1221
1217
|
for (let i = 0; i < this.selectedItems.length; i++) {
|
|
1222
1218
|
const track = this.selectedItems[i];
|
|
1223
|
-
treeTracks.push({ trackData: track, id: track.id, skipVisibility: this.skipVisibility,
|
|
1224
|
-
|
|
1219
|
+
treeTracks.push({ trackData: track, id: track.id, skipVisibility: this.skipVisibility, visible: track.active, children: [],
|
|
1220
|
+
actions: this.skipLock ? null : [{
|
|
1225
1221
|
'name': 'Lock edition',
|
|
1226
1222
|
'icon': (track.locked ? 'TimelineLock' : 'TimelineLockOpen'),
|
|
1227
1223
|
'swap': (track.locked ? 'TimelineLockOpen' : 'TimelineLock'),
|
|
@@ -1263,30 +1259,29 @@ class Timeline {
|
|
|
1263
1259
|
return animationClip;
|
|
1264
1260
|
}
|
|
1265
1261
|
}
|
|
1266
|
-
Timeline.BACKGROUND_COLOR = LX.
|
|
1267
|
-
Timeline.TRACK_COLOR_PRIMARY = LX.
|
|
1268
|
-
Timeline.TRACK_COLOR_SECONDARY = LX.
|
|
1269
|
-
Timeline.
|
|
1270
|
-
Timeline.
|
|
1271
|
-
Timeline.
|
|
1272
|
-
Timeline.
|
|
1273
|
-
Timeline.
|
|
1274
|
-
Timeline.
|
|
1275
|
-
Timeline.
|
|
1276
|
-
Timeline.
|
|
1277
|
-
Timeline.TIME_MARKER_COLOR = LX.getThemeColor('global-color-accent');
|
|
1262
|
+
Timeline.BACKGROUND_COLOR = LX.getCSSVariable('background-blur');
|
|
1263
|
+
Timeline.TRACK_COLOR_PRIMARY = LX.getCSSVariable('card');
|
|
1264
|
+
Timeline.TRACK_COLOR_SECONDARY = LX.getCSSVariable('secondary');
|
|
1265
|
+
Timeline.TRACK_COLOR_TERTIARY = LX.getCSSVariable('accent');
|
|
1266
|
+
Timeline.TRACK_SELECTED = LX.getCSSVariable('color-blue-600');
|
|
1267
|
+
Timeline.TRACK_SELECTED_LIGHT = LX.getCSSVariable('color-blue-400');
|
|
1268
|
+
Timeline.FONT = LX.getCSSVariable('global-font');
|
|
1269
|
+
Timeline.FONT_COLOR_PRIMARY = LX.getCSSVariable('foreground');
|
|
1270
|
+
Timeline.FONT_COLOR_TERTIARY = LX.getCSSVariable('primary');
|
|
1271
|
+
Timeline.FONT_COLOR_QUATERNARY = LX.getCSSVariable('muted-foreground');
|
|
1272
|
+
Timeline.TIME_MARKER_COLOR = LX.getCSSVariable('color-blue-600');
|
|
1278
1273
|
Timeline.TIME_MARKER_COLOR_TEXT = '#ffffff';
|
|
1279
|
-
LX.
|
|
1280
|
-
LX.
|
|
1281
|
-
LX.
|
|
1282
|
-
LX.
|
|
1283
|
-
LX.
|
|
1284
|
-
LX.
|
|
1285
|
-
Timeline.KEYFRAME_COLOR = LX.
|
|
1286
|
-
Timeline.KEYFRAME_COLOR_SELECTED = Timeline.KEYFRAME_COLOR_HOVERED = LX.
|
|
1287
|
-
Timeline.KEYFRAME_COLOR_LOCK = LX.
|
|
1288
|
-
Timeline.KEYFRAME_COLOR_EDITED = LX.
|
|
1289
|
-
Timeline.KEYFRAME_COLOR_INACTIVE = LX.
|
|
1274
|
+
LX.setCSSVariable('lxTimeline-keyframe', 'light-dark(#2d69da,#2d69da )');
|
|
1275
|
+
LX.setCSSVariable('lxTimeline-keyframe-selected', 'light-dark(#f5c700,#fafa14)');
|
|
1276
|
+
LX.setCSSVariable('lxTimeline-keyframe-hovered', 'light-dark(#f5c700,#fafa14)');
|
|
1277
|
+
LX.setCSSVariable('lxTimeline-keyframe-locked', 'light-dark(#c62e2e,#ff7d7d )');
|
|
1278
|
+
LX.setCSSVariable('lxTimeline-keyframe-edited', 'light-dark(#00d000,#00d000 )');
|
|
1279
|
+
LX.setCSSVariable('lxTimeline-keyframe-inactive', 'light-dark(#706b6b,#706b6b)');
|
|
1280
|
+
Timeline.KEYFRAME_COLOR = LX.getCSSVariable('lxTimeline-keyframe');
|
|
1281
|
+
Timeline.KEYFRAME_COLOR_SELECTED = Timeline.KEYFRAME_COLOR_HOVERED = LX.getCSSVariable('lxTimeline-keyframe-selected');
|
|
1282
|
+
Timeline.KEYFRAME_COLOR_LOCK = LX.getCSSVariable('lxTimeline-keyframe-locked');
|
|
1283
|
+
Timeline.KEYFRAME_COLOR_EDITED = LX.getCSSVariable('lxTimeline-keyframe-edited');
|
|
1284
|
+
Timeline.KEYFRAME_COLOR_INACTIVE = LX.getCSSVariable('lxTimeline-keyframe-inactive');
|
|
1290
1285
|
Timeline.BOX_SELECTION_COLOR = '#AAA';
|
|
1291
1286
|
LX.Timeline = Timeline;
|
|
1292
1287
|
/**
|
|
@@ -1428,8 +1423,8 @@ class KeyFramesTimeline extends Timeline {
|
|
|
1428
1423
|
const nodes = [];
|
|
1429
1424
|
for (let j = 0; j < itemTracks.length; j++) {
|
|
1430
1425
|
const track = itemTracks[j];
|
|
1431
|
-
nodes.push({ 'trackData': track, 'id': track.id, 'skipVisibility': this.skipVisibility,
|
|
1432
|
-
|
|
1426
|
+
nodes.push({ 'trackData': track, 'id': track.id, 'skipVisibility': this.skipVisibility, visible: track.active, 'children': [],
|
|
1427
|
+
actions: this.skipLock ? null : [{
|
|
1433
1428
|
'name': 'Lock edition',
|
|
1434
1429
|
'icon': (track.locked ? 'TimelineLock' : 'TimelineLockOpen'),
|
|
1435
1430
|
'swap': (track.locked ? 'TimelineLockOpen' : 'TimelineLock'),
|
|
@@ -2001,17 +1996,15 @@ class KeyFramesTimeline extends Timeline {
|
|
|
2001
1996
|
if (keyframes.length > 1) {
|
|
2002
1997
|
let startPosX = this.timeToX(keyframes[0]);
|
|
2003
1998
|
let startValue = values[0];
|
|
2004
|
-
startValue =
|
|
2005
|
-
|
|
2006
|
-
+ (trackHeight - defaultPointSize); // normalize and offset
|
|
1999
|
+
startValue = LX.clamp((startValue - valueRange[0]) / (valueRange[1] - valueRange[0]), 0, 1) * (-displayRange)
|
|
2000
|
+
+ (trackHeight - defaultPointSize); // normalize and offset
|
|
2007
2001
|
ctx.moveTo(startPosX, startValue);
|
|
2008
2002
|
for (let j = 1; j < keyframes.length; ++j) {
|
|
2009
2003
|
let time = keyframes[j];
|
|
2010
2004
|
let keyframePosX = this.timeToX(time);
|
|
2011
2005
|
let value = values[j];
|
|
2012
|
-
value =
|
|
2013
|
-
|
|
2014
|
-
+ (trackHeight - defaultPointSize); // normalize and offset
|
|
2006
|
+
value = LX.clamp((value - valueRange[0]) / (valueRange[1] - valueRange[0]), 0, 1) * (-displayRange)
|
|
2007
|
+
+ (trackHeight - defaultPointSize); // normalize and offset
|
|
2015
2008
|
if (time < startTime) {
|
|
2016
2009
|
ctx.moveTo(keyframePosX, value);
|
|
2017
2010
|
continue;
|
|
@@ -2911,7 +2904,7 @@ class ClipsTimeline extends Timeline {
|
|
|
2911
2904
|
duration: options.duration ?? 1,
|
|
2912
2905
|
fadein: options.fadein ?? undefined,
|
|
2913
2906
|
fadeout: options.fadeout ?? undefined,
|
|
2914
|
-
clipColor: options.clipColor ?? LX.
|
|
2907
|
+
clipColor: options.clipColor ?? LX.getCSSVariable('color-blue-600'),
|
|
2915
2908
|
fadeColor: options.fadeColor ?? null,
|
|
2916
2909
|
active: options.active ?? true,
|
|
2917
2910
|
trackIdx: -1 // filled by addClip
|
|
@@ -3390,8 +3383,7 @@ class ClipsTimeline extends Timeline {
|
|
|
3390
3383
|
}
|
|
3391
3384
|
if (clip.fadeout != undefined) {
|
|
3392
3385
|
const fadeoutX = this.pixelsPerSecond * (clip.start + clip.duration - (clip.fadeout));
|
|
3393
|
-
drawRoundRect(ctx, x + w - fadeoutX, y + offset, fadeoutX, trackHeight, { tl: 0, bl: 0, tr: 5,
|
|
3394
|
-
br: 5 }, true);
|
|
3386
|
+
drawRoundRect(ctx, x + w - fadeoutX, y + offset, fadeoutX, trackHeight, { tl: 0, bl: 0, tr: 5, br: 5 }, true);
|
|
3395
3387
|
}
|
|
3396
3388
|
}
|
|
3397
3389
|
ctx.fillStyle = Timeline.TRACK_COLOR_PRIMARY;
|