@lightningtv/solid 3.1.11 → 3.1.13
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/dist/src/core/dom-renderer/domRenderer.d.ts +1 -1
- package/dist/src/core/dom-renderer/domRenderer.js +73 -16
- package/dist/src/core/dom-renderer/domRenderer.js.map +1 -1
- package/dist/src/core/elementNode.js +5 -2
- package/dist/src/core/elementNode.js.map +1 -1
- package/dist/src/core/intrinsicTypes.d.ts +2 -0
- package/dist/src/core/lightningInit.d.ts +1 -1
- package/dist/src/core/lightningInit.js +1 -1
- package/dist/src/core/lightningInit.js.map +1 -1
- package/dist/src/core/shaders.js +10 -10
- package/dist/src/core/shaders.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/core/dom-renderer/domRenderer.ts +92 -24
- package/src/core/dom-renderer/domRendererTypes.ts +0 -1
- package/src/core/elementNode.ts +5 -2
- package/src/core/intrinsicTypes.ts +2 -0
- package/src/core/lightningInit.ts +2 -2
- package/src/core/shaders.ts +10 -10
|
@@ -8,7 +8,9 @@ import * as lng from '@lightningjs/renderer';
|
|
|
8
8
|
|
|
9
9
|
import { EventEmitter } from '@lightningjs/renderer/utils';
|
|
10
10
|
import { Config } from '../config.js';
|
|
11
|
+
import { FontLoadOptions } from '../intrinsicTypes.js';
|
|
11
12
|
import type {
|
|
13
|
+
DomRendererMainSettings,
|
|
12
14
|
ExtractProps,
|
|
13
15
|
IRendererMain,
|
|
14
16
|
IRendererNode,
|
|
@@ -17,22 +19,20 @@ import type {
|
|
|
17
19
|
IRendererStage,
|
|
18
20
|
IRendererTextNode,
|
|
19
21
|
IRendererTextNodeProps,
|
|
20
|
-
DomRendererMainSettings,
|
|
21
22
|
} from './domRendererTypes.js';
|
|
22
23
|
import {
|
|
23
|
-
|
|
24
|
+
applyEasing,
|
|
25
|
+
applySubTextureScaling,
|
|
24
26
|
buildGradientStops,
|
|
27
|
+
colorToRgba,
|
|
28
|
+
compactString,
|
|
25
29
|
computeLegacyObjectFit,
|
|
26
|
-
|
|
30
|
+
computeRenderStateForNode,
|
|
27
31
|
getNodeLineHeight,
|
|
28
|
-
applyEasing,
|
|
29
32
|
interpolateProp,
|
|
30
33
|
isRenderStateInBounds,
|
|
31
34
|
nodeHasTextureSource,
|
|
32
|
-
computeRenderStateForNode,
|
|
33
|
-
compactString,
|
|
34
35
|
} from './domRendererUtils.js';
|
|
35
|
-
import { FontLoadOptions } from '../intrinsicTypes.js';
|
|
36
36
|
|
|
37
37
|
// Feature detection for legacy brousers
|
|
38
38
|
const _styleRef: any =
|
|
@@ -315,11 +315,15 @@ function updateNodeStyles(node: DOMNode | DOMText) {
|
|
|
315
315
|
switch (textProps.contain) {
|
|
316
316
|
case 'width':
|
|
317
317
|
if (textProps.maxWidth && textProps.maxWidth > 0) {
|
|
318
|
-
|
|
318
|
+
if (node.textAlign === 'center') {
|
|
319
|
+
style += `width: ${textProps.maxWidth}px;`;
|
|
320
|
+
} else {
|
|
321
|
+
style += `max-width: ${textProps.maxWidth}px;`;
|
|
322
|
+
}
|
|
323
|
+
style += `overflow: hidden;`;
|
|
319
324
|
} else {
|
|
320
325
|
style += `width: 100%;`;
|
|
321
326
|
}
|
|
322
|
-
style += `overflow: hidden;`;
|
|
323
327
|
break;
|
|
324
328
|
case 'both': {
|
|
325
329
|
let lineHeight = getNodeLineHeight(textProps);
|
|
@@ -514,27 +518,84 @@ function updateNodeStyles(node: DOMNode | DOMText) {
|
|
|
514
518
|
let borderWidth = shaderProps['border-w'];
|
|
515
519
|
let borderColor = shaderProps['border-color'];
|
|
516
520
|
let borderGap = shaderProps['border-gap'] ?? 0;
|
|
517
|
-
let borderAlign = shaderProps['border-align'] ?? '
|
|
521
|
+
let borderAlign = shaderProps['border-align'] ?? 'inside';
|
|
518
522
|
let radius = shaderProps['radius'];
|
|
519
523
|
|
|
520
524
|
// Border
|
|
525
|
+
const borderWidthIsNumber = typeof borderWidth === 'number';
|
|
526
|
+
const borderWidthIsArray = Array.isArray(borderWidth);
|
|
527
|
+
const borderWidthHasValue =
|
|
528
|
+
(borderWidthIsNumber && borderWidth !== 0) ||
|
|
529
|
+
(borderWidthIsArray &&
|
|
530
|
+
(borderWidth as number[]).some(
|
|
531
|
+
(w) => typeof w === 'number' && w !== 0,
|
|
532
|
+
));
|
|
533
|
+
|
|
521
534
|
if (
|
|
522
|
-
|
|
523
|
-
borderWidth !== 0 &&
|
|
535
|
+
borderWidthHasValue &&
|
|
524
536
|
typeof borderColor === 'number' &&
|
|
525
537
|
borderColor !== 0
|
|
526
538
|
) {
|
|
527
539
|
const rgbaColor = colorToRgba(borderColor);
|
|
528
540
|
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
} else if (borderAlign === 'center') {
|
|
533
|
-
gap = -(borderWidth / 2) + borderGap;
|
|
534
|
-
}
|
|
541
|
+
if (borderWidthIsNumber) {
|
|
542
|
+
let insideWidth = 0;
|
|
543
|
+
let outsideWidth = 0;
|
|
535
544
|
|
|
536
|
-
|
|
537
|
-
|
|
545
|
+
if (borderAlign === 'inside') {
|
|
546
|
+
insideWidth = borderWidth;
|
|
547
|
+
} else if (borderAlign === 'center') {
|
|
548
|
+
insideWidth = borderWidth / 2;
|
|
549
|
+
outsideWidth = borderWidth / 2;
|
|
550
|
+
} else {
|
|
551
|
+
outsideWidth = borderWidth;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
outsideWidth += borderGap;
|
|
555
|
+
insideWidth -= borderGap;
|
|
556
|
+
|
|
557
|
+
if (insideWidth < 0) {
|
|
558
|
+
outsideWidth += insideWidth;
|
|
559
|
+
insideWidth = 0;
|
|
560
|
+
}
|
|
561
|
+
if (outsideWidth < 0) {
|
|
562
|
+
insideWidth += outsideWidth;
|
|
563
|
+
outsideWidth = 0;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
const shadows: string[] = [];
|
|
567
|
+
if (outsideWidth > 0) {
|
|
568
|
+
shadows.push(`0 0 0 ${outsideWidth}px ${rgbaColor}`);
|
|
569
|
+
}
|
|
570
|
+
if (insideWidth > 0) {
|
|
571
|
+
shadows.push(`inset 0 0 0 ${insideWidth}px ${rgbaColor}`);
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
if (shadows.length > 0) {
|
|
575
|
+
borderStyle += `box-shadow: ${shadows.join(', ')};`;
|
|
576
|
+
}
|
|
577
|
+
} else if (borderWidthIsArray) {
|
|
578
|
+
// Individual borders per side [top, right, bottom, left]
|
|
579
|
+
// Allow individual properties to override array values
|
|
580
|
+
const topWidth =
|
|
581
|
+
shaderProps['border-top'] ?? (borderWidth as number[])[0];
|
|
582
|
+
const rightWidth =
|
|
583
|
+
shaderProps['border-right'] ?? (borderWidth as number[])[1];
|
|
584
|
+
const bottomWidth =
|
|
585
|
+
shaderProps['border-bottom'] ?? (borderWidth as number[])[2];
|
|
586
|
+
const leftWidth =
|
|
587
|
+
shaderProps['border-left'] ?? (borderWidth as number[])[3];
|
|
588
|
+
|
|
589
|
+
const widths = [topWidth, rightWidth, bottomWidth, leftWidth];
|
|
590
|
+
const sides = ['top', 'right', 'bottom', 'left'] as const;
|
|
591
|
+
|
|
592
|
+
for (let i = 0; i < sides.length; i++) {
|
|
593
|
+
const width = widths[i];
|
|
594
|
+
if (typeof width === 'number' && width !== 0) {
|
|
595
|
+
borderStyle += `border-${sides[i]}: ${width}px solid ${rgbaColor};`;
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
}
|
|
538
599
|
}
|
|
539
600
|
// Rounded
|
|
540
601
|
if (typeof radius === 'number' && radius > 0) {
|
|
@@ -826,7 +887,6 @@ type Size = { width: number; height: number };
|
|
|
826
887
|
|
|
827
888
|
function getElSize(node: DOMNode): Size {
|
|
828
889
|
const rawRect = node.div.getBoundingClientRect();
|
|
829
|
-
|
|
830
890
|
const dpr = Config.rendererOptions?.deviceLogicalPixelRatio ?? 1;
|
|
831
891
|
let width = rawRect.width / dpr;
|
|
832
892
|
let height = rawRect.height / dpr;
|
|
@@ -857,11 +917,17 @@ function getElSize(node: DOMNode): Size {
|
|
|
857
917
|
*/
|
|
858
918
|
function updateDOMTextSize(node: DOMText): void {
|
|
859
919
|
let size: Size;
|
|
920
|
+
let dimensionsChanged = false;
|
|
860
921
|
switch (node.contain) {
|
|
861
922
|
case 'width':
|
|
862
923
|
size = getElSize(node);
|
|
924
|
+
if (node.props.w !== size.width) {
|
|
925
|
+
node.w = size.width;
|
|
926
|
+
dimensionsChanged = true;
|
|
927
|
+
}
|
|
863
928
|
if (node.props.h !== size.height) {
|
|
864
929
|
node.h = size.height;
|
|
930
|
+
dimensionsChanged = true;
|
|
865
931
|
}
|
|
866
932
|
break;
|
|
867
933
|
case 'none':
|
|
@@ -869,16 +935,17 @@ function updateDOMTextSize(node: DOMText): void {
|
|
|
869
935
|
if (node.props.h !== size.height || node.props.w !== size.width) {
|
|
870
936
|
node.w = size.width;
|
|
871
937
|
node.h = size.height;
|
|
938
|
+
dimensionsChanged = true;
|
|
872
939
|
}
|
|
873
940
|
break;
|
|
874
941
|
}
|
|
875
942
|
|
|
876
|
-
if (!node.loaded) {
|
|
943
|
+
if (!node.loaded || dimensionsChanged) {
|
|
877
944
|
const payload: lng.NodeTextLoadedPayload = {
|
|
878
945
|
type: 'text',
|
|
879
946
|
dimensions: {
|
|
880
|
-
w: node.
|
|
881
|
-
h: node.
|
|
947
|
+
w: node.w,
|
|
948
|
+
h: node.h,
|
|
882
949
|
},
|
|
883
950
|
};
|
|
884
951
|
node.emit('loaded', payload);
|
|
@@ -1094,6 +1161,7 @@ export class DOMNode extends EventEmitter implements IRendererNode {
|
|
|
1094
1161
|
if (child !== child.stage.root) {
|
|
1095
1162
|
if (nodeHasTextureSource(child)) {
|
|
1096
1163
|
const nextState = computeRenderStateForNode(child);
|
|
1164
|
+
|
|
1097
1165
|
if (nextState != null) {
|
|
1098
1166
|
child.updateRenderState(nextState);
|
|
1099
1167
|
}
|
|
@@ -123,7 +123,6 @@ export interface IRendererMain extends IEventEmitter {
|
|
|
123
123
|
createNode(props: Partial<IRendererNodeProps>): IRendererNode;
|
|
124
124
|
createShader: typeof lng.RendererMain.prototype.createShader;
|
|
125
125
|
createTexture: typeof lng.RendererMain.prototype.createTexture;
|
|
126
|
-
//createEffect: typeof lng.RendererMain.prototype.createEffect;
|
|
127
126
|
}
|
|
128
127
|
|
|
129
128
|
export interface DomRendererMainSettings {
|
package/src/core/elementNode.ts
CHANGED
|
@@ -726,7 +726,7 @@ export class ElementNode extends Object {
|
|
|
726
726
|
if (this.rendered) {
|
|
727
727
|
if (!this.lng.shader) {
|
|
728
728
|
this.lng.shader = Config.convertToShader(this, target);
|
|
729
|
-
} else if (DOM_RENDERING) {
|
|
729
|
+
} else if (DOM_RENDERING && Config.domRendererEnabled) {
|
|
730
730
|
this.lng.shader = this.lng.shader; // lng.shader is a setter, force style update
|
|
731
731
|
}
|
|
732
732
|
} else {
|
|
@@ -1024,7 +1024,7 @@ export class ElementNode extends Object {
|
|
|
1024
1024
|
'reprocessUpdates' in renderer.stage &&
|
|
1025
1025
|
renderer.stage.reprocessUpdates
|
|
1026
1026
|
) {
|
|
1027
|
-
renderer.stage.reprocessUpdates();
|
|
1027
|
+
renderer.stage.reprocessUpdates(runLayout);
|
|
1028
1028
|
}
|
|
1029
1029
|
this.parent!.updateLayout();
|
|
1030
1030
|
});
|
|
@@ -1557,6 +1557,7 @@ export function shaderAccessor<T extends Record<string, any> | number>(
|
|
|
1557
1557
|
this._effects[key] = value;
|
|
1558
1558
|
|
|
1559
1559
|
let animationSettings: AnimationSettings | undefined;
|
|
1560
|
+
|
|
1560
1561
|
if (this.lng.shader?.props) {
|
|
1561
1562
|
target = this.lng.shader.props;
|
|
1562
1563
|
const transitionKey = key === 'rounded' ? 'borderRadius' : key;
|
|
@@ -1583,6 +1584,8 @@ export function shaderAccessor<T extends Record<string, any> | number>(
|
|
|
1583
1584
|
if (this.rendered) {
|
|
1584
1585
|
if (!this.lng.shader) {
|
|
1585
1586
|
this.lng.shader = Config.convertToShader(this, target);
|
|
1587
|
+
} else if (DOM_RENDERING && Config.domRendererEnabled) {
|
|
1588
|
+
this.lng.shader = this.lng.shader; // lng.shader is a setter, force style update
|
|
1586
1589
|
}
|
|
1587
1590
|
} else {
|
|
1588
1591
|
this.lng.shader = target;
|
|
@@ -28,6 +28,7 @@ export interface BorderStyleObject
|
|
|
28
28
|
width?: number | [number, number, number, number];
|
|
29
29
|
gap?: number;
|
|
30
30
|
align?: 'inside' | 'outside' | 'center';
|
|
31
|
+
fill?: number | string;
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
export interface SingleBorderStyleObject
|
|
@@ -36,6 +37,7 @@ export interface SingleBorderStyleObject
|
|
|
36
37
|
w?: number;
|
|
37
38
|
gap?: number;
|
|
38
39
|
align?: 'inside' | 'outside' | 'center';
|
|
40
|
+
fill?: number | string;
|
|
39
41
|
}
|
|
40
42
|
|
|
41
43
|
export type DollarString = `$${string}`;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as lng from '@lightningjs/renderer';
|
|
2
|
-
import { DOMRendererMain, loadFontToDom } from './dom-renderer/domRenderer.js';
|
|
3
2
|
import { Config, DOM_RENDERING } from './config.js';
|
|
4
|
-
import {
|
|
3
|
+
import { DOMRendererMain, loadFontToDom } from './dom-renderer/domRenderer.js';
|
|
5
4
|
import { DomRendererMainSettings } from './dom-renderer/domRendererTypes.js';
|
|
5
|
+
import { FontLoadOptions } from './intrinsicTypes.js';
|
|
6
6
|
|
|
7
7
|
export type SdfFontType = 'ssdf' | 'msdf';
|
|
8
8
|
// Global renderer instance: can be either the Lightning or DOM implementation
|
package/src/core/shaders.ts
CHANGED
|
@@ -18,7 +18,7 @@ export {
|
|
|
18
18
|
};
|
|
19
19
|
export { WebGlShader };
|
|
20
20
|
|
|
21
|
-
import { DOM_RENDERING, SHADERS_ENABLED } from './config.js';
|
|
21
|
+
import { Config, DOM_RENDERING, SHADERS_ENABLED } from './config.js';
|
|
22
22
|
import type { CoreShaderManager } from './intrinsicTypes.js';
|
|
23
23
|
import { IRendererShaderManager } from './dom-renderer/domRendererTypes.js';
|
|
24
24
|
|
|
@@ -122,17 +122,17 @@ function toValidVec4(value: unknown): Vec4 {
|
|
|
122
122
|
export function registerDefaultShaderRounded(
|
|
123
123
|
shManager: IRendererShaderManager,
|
|
124
124
|
) {
|
|
125
|
-
if (SHADERS_ENABLED && !DOM_RENDERING)
|
|
125
|
+
if (SHADERS_ENABLED && !(DOM_RENDERING && Config.domRendererEnabled))
|
|
126
126
|
shManager.registerShaderType('rounded', defaultShaderRounded);
|
|
127
127
|
}
|
|
128
128
|
export function registerDefaultShaderShadow(shManager: CoreShaderManager) {
|
|
129
|
-
if (SHADERS_ENABLED && !DOM_RENDERING)
|
|
129
|
+
if (SHADERS_ENABLED && !(DOM_RENDERING && Config.domRendererEnabled))
|
|
130
130
|
shManager.registerShaderType('shadow', defaultShaderShadow);
|
|
131
131
|
}
|
|
132
132
|
export function registerDefaultShaderRoundedWithBorder(
|
|
133
133
|
shManager: CoreShaderManager,
|
|
134
134
|
) {
|
|
135
|
-
if (SHADERS_ENABLED && !DOM_RENDERING)
|
|
135
|
+
if (SHADERS_ENABLED && !(DOM_RENDERING && Config.domRendererEnabled))
|
|
136
136
|
shManager.registerShaderType(
|
|
137
137
|
'roundedWithBorder',
|
|
138
138
|
defaultShaderRoundedWithBorder,
|
|
@@ -141,7 +141,7 @@ export function registerDefaultShaderRoundedWithBorder(
|
|
|
141
141
|
export function registerDefaultShaderRoundedWithShadow(
|
|
142
142
|
shManager: CoreShaderManager,
|
|
143
143
|
) {
|
|
144
|
-
if (SHADERS_ENABLED && !DOM_RENDERING)
|
|
144
|
+
if (SHADERS_ENABLED && !(DOM_RENDERING && Config.domRendererEnabled))
|
|
145
145
|
shManager.registerShaderType(
|
|
146
146
|
'roundedWithShadow',
|
|
147
147
|
defaultShaderRoundedWithShadow,
|
|
@@ -150,31 +150,31 @@ export function registerDefaultShaderRoundedWithShadow(
|
|
|
150
150
|
export function registerDefaultShaderRoundedWithBorderAndShadow(
|
|
151
151
|
shManager: CoreShaderManager,
|
|
152
152
|
) {
|
|
153
|
-
if (SHADERS_ENABLED && !DOM_RENDERING)
|
|
153
|
+
if (SHADERS_ENABLED && !(DOM_RENDERING && Config.domRendererEnabled))
|
|
154
154
|
shManager.registerShaderType(
|
|
155
155
|
'roundedWithBorderWithShadow',
|
|
156
156
|
defaultShaderRoundedWithBorderAndShadow,
|
|
157
157
|
);
|
|
158
158
|
}
|
|
159
159
|
export function registerDefaultShaderHolePunch(shManager: CoreShaderManager) {
|
|
160
|
-
if (SHADERS_ENABLED && !DOM_RENDERING)
|
|
160
|
+
if (SHADERS_ENABLED && !(DOM_RENDERING && Config.domRendererEnabled))
|
|
161
161
|
shManager.registerShaderType('holePunch', defaultShaderHolePunch);
|
|
162
162
|
}
|
|
163
163
|
export function registerDefaultShaderRadialGradient(
|
|
164
164
|
shManager: CoreShaderManager,
|
|
165
165
|
) {
|
|
166
|
-
if (SHADERS_ENABLED && !DOM_RENDERING)
|
|
166
|
+
if (SHADERS_ENABLED && !(DOM_RENDERING && Config.domRendererEnabled))
|
|
167
167
|
shManager.registerShaderType('radialGradient', defaultShaderRadialGradient);
|
|
168
168
|
}
|
|
169
169
|
export function registerDefaultShaderLinearGradient(
|
|
170
170
|
shManager: CoreShaderManager,
|
|
171
171
|
) {
|
|
172
|
-
if (SHADERS_ENABLED && !DOM_RENDERING)
|
|
172
|
+
if (SHADERS_ENABLED && !(DOM_RENDERING && Config.domRendererEnabled))
|
|
173
173
|
shManager.registerShaderType('linearGradient', defaultShaderLinearGradient);
|
|
174
174
|
}
|
|
175
175
|
|
|
176
176
|
export function registerDefaultShaders(shManager: CoreShaderManager) {
|
|
177
|
-
if (SHADERS_ENABLED && !DOM_RENDERING) {
|
|
177
|
+
if (SHADERS_ENABLED && !(DOM_RENDERING && Config.domRendererEnabled)) {
|
|
178
178
|
registerDefaultShaderRounded(shManager);
|
|
179
179
|
registerDefaultShaderShadow(shManager);
|
|
180
180
|
registerDefaultShaderRoundedWithBorder(shManager);
|