@lightningtv/solid 3.1.6 → 3.1.8

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 (48) hide show
  1. package/dist/src/core/animation.d.ts +1 -1
  2. package/dist/src/core/animation.js.map +1 -1
  3. package/dist/src/core/config.d.ts +2 -2
  4. package/dist/src/core/config.js.map +1 -1
  5. package/dist/src/core/{domRenderer.d.ts → dom-renderer/domRenderer.d.ts} +30 -7
  6. package/dist/src/core/{domRenderer.js → dom-renderer/domRenderer.js} +633 -122
  7. package/dist/src/core/dom-renderer/domRenderer.js.map +1 -0
  8. package/dist/src/core/dom-renderer/domRendererTypes.d.ts +111 -0
  9. package/dist/src/core/dom-renderer/domRendererTypes.js +2 -0
  10. package/dist/src/core/dom-renderer/domRendererTypes.js.map +1 -0
  11. package/dist/src/core/dom-renderer/domRendererUtils.d.ts +23 -0
  12. package/dist/src/core/dom-renderer/domRendererUtils.js +231 -0
  13. package/dist/src/core/dom-renderer/domRendererUtils.js.map +1 -0
  14. package/dist/src/core/elementNode.d.ts +8 -8
  15. package/dist/src/core/elementNode.js +54 -15
  16. package/dist/src/core/elementNode.js.map +1 -1
  17. package/dist/src/core/index.d.ts +4 -2
  18. package/dist/src/core/index.js +1 -2
  19. package/dist/src/core/index.js.map +1 -1
  20. package/dist/src/core/intrinsicTypes.d.ts +16 -6
  21. package/dist/src/core/lightningInit.d.ts +7 -89
  22. package/dist/src/core/lightningInit.js +13 -5
  23. package/dist/src/core/lightningInit.js.map +1 -1
  24. package/dist/src/core/shaders.d.ts +12 -11
  25. package/dist/src/core/shaders.js +0 -90
  26. package/dist/src/core/shaders.js.map +1 -1
  27. package/dist/src/primitives/Grid.jsx +14 -2
  28. package/dist/src/primitives/Grid.jsx.map +1 -1
  29. package/dist/src/primitives/Image.jsx +18 -0
  30. package/dist/src/primitives/Image.jsx.map +1 -1
  31. package/dist/src/render.d.ts +3 -3
  32. package/dist/src/render.js.map +1 -1
  33. package/dist/tsconfig.tsbuildinfo +1 -1
  34. package/package.json +2 -2
  35. package/src/core/animation.ts +6 -3
  36. package/src/core/config.ts +5 -2
  37. package/src/core/{domRenderer.ts → dom-renderer/domRenderer.ts} +738 -164
  38. package/src/core/dom-renderer/domRendererTypes.ts +150 -0
  39. package/src/core/dom-renderer/domRendererUtils.ts +291 -0
  40. package/src/core/elementNode.ts +98 -35
  41. package/src/core/index.ts +4 -2
  42. package/src/core/intrinsicTypes.ts +22 -6
  43. package/src/core/lightningInit.ts +20 -124
  44. package/src/core/shaders.ts +17 -110
  45. package/src/primitives/Grid.tsx +23 -7
  46. package/src/primitives/Image.tsx +20 -0
  47. package/src/render.ts +2 -1
  48. package/dist/src/core/domRenderer.js.map +0 -1
@@ -1,12 +1,4 @@
1
- import {
2
- IRendererNode,
3
- IRendererNodeProps,
4
- IRendererShader,
5
- IRendererShaderProps,
6
- IRendererTextNode,
7
- IRendererTextNodeProps,
8
- renderer,
9
- } from './lightningInit.js';
1
+ import { renderer } from './lightningInit.js';
10
2
  import {
11
3
  type BorderRadius,
12
4
  type BorderStyle,
@@ -21,6 +13,7 @@ import {
21
13
  TextNode,
22
14
  type OnEvent,
23
15
  NewOmit,
16
+ SingleBorderStyle,
24
17
  } from './intrinsicTypes.js';
25
18
  import States, { type NodeStates } from './states.js';
26
19
  import calculateFlexOld from './flex.js';
@@ -51,6 +44,8 @@ import type {
51
44
  RadialGradientProps,
52
45
  ShadowProps,
53
46
  CoreShaderNode,
47
+ ITextNodeProps,
48
+ INodeProps,
54
49
  } from '@lightningjs/renderer';
55
50
  import { assertTruthy } from '@lightningjs/renderer/utils';
56
51
  import { NodeType } from './nodeTypes.js';
@@ -60,6 +55,14 @@ import {
60
55
  FocusNode,
61
56
  } from './focusManager.js';
62
57
  import simpleAnimation, { SimpleAnimationSettings } from './animation.js';
58
+ import {
59
+ IRendererNode,
60
+ IRendererNodeProps,
61
+ IRendererShader,
62
+ IRendererShaderProps,
63
+ IRendererTextNode,
64
+ IRendererTextNodeProps,
65
+ } from './dom-renderer/domRendererTypes.js';
63
66
 
64
67
  let nextActiveElement: ElementNode | null = null;
65
68
  let focusQueued: boolean = false;
@@ -70,7 +73,10 @@ function addToLayoutQueue(node: ElementNode) {
70
73
  layoutQueue.add(node);
71
74
  if (!layoutRunQueued) {
72
75
  layoutRunQueued = true;
73
- if (renderer.stage.reprocessUpdates) {
76
+ if (
77
+ 'reprocessUpdates' in renderer.stage &&
78
+ renderer.stage.reprocessUpdates
79
+ ) {
74
80
  renderer.stage.reprocessUpdates(runLayout);
75
81
  } else {
76
82
  queueMicrotask(runLayout);
@@ -96,10 +102,28 @@ const parseAndAssignShaderProps = (
96
102
  props: Record<string, any> = {},
97
103
  ) => {
98
104
  if (!obj) return;
99
- props[prefix] = obj;
105
+
106
+ // Handle individual border sides: transform width/w to bottom/left/right/top
107
+ const borderSideMap: Record<string, string> = {
108
+ borderBottom: 'bottom',
109
+ borderLeft: 'left',
110
+ borderRight: 'right',
111
+ borderTop: 'top',
112
+ };
113
+
114
+ const side = borderSideMap[prefix];
115
+ const actualPrefix = side ? 'border' : prefix;
116
+
117
+ props[actualPrefix] = obj;
100
118
  Object.entries(obj).forEach(([key, value]) => {
101
119
  let transformedKey = key === 'width' ? 'w' : key;
102
- props[`${prefix}-${transformedKey}`] = value;
120
+
121
+ // If border side and key is width/w, transform to side (bottom/left/right/top)
122
+ if (side && transformedKey === 'w') {
123
+ transformedKey = side;
124
+ }
125
+
126
+ props[`${actualPrefix}-${transformedKey}`] = value;
103
127
  });
104
128
  };
105
129
 
@@ -110,8 +134,7 @@ export function convertToShader(
110
134
  let type = 'rounded';
111
135
  if (v.border) type += 'WithBorder';
112
136
  if (v.shadow) type += 'WithShadow';
113
-
114
- return renderer.createShader(type, v as IRendererShaderProps);
137
+ return renderer.createShader(type, v);
115
138
  }
116
139
 
117
140
  function getPropertyAlias(name: string) {
@@ -186,6 +209,7 @@ const LightningRendererNonAnimatingProps = [
186
209
  'texture',
187
210
  'textureOptions',
188
211
  'verticalAlign',
212
+ 'wordBreak',
189
213
  'wordWrap',
190
214
  ];
191
215
 
@@ -299,8 +323,9 @@ export interface ElementNode extends RendererNode, FocusNode {
299
323
  * The underlying Lightning Renderer node object. This is where the properties are ultimately set for rendering.
300
324
  */
301
325
  lng:
302
- | Partial<ElementNode>
326
+ | INode
303
327
  | IRendererNode
328
+ | Partial<ElementNode>
304
329
  | (IRendererTextNode & { shader?: any });
305
330
  /**
306
331
  * A reference to the `ElementNode` instance. Can be an object or a callback function.
@@ -360,13 +385,13 @@ export interface ElementNode extends RendererNode, FocusNode {
360
385
  *
361
386
  * @see https://lightning-tv.github.io/solid/#/essentials/effects?id=border-and-borderradius
362
387
  */
363
- borderBottom?: BorderStyle;
388
+ borderBottom?: SingleBorderStyle;
364
389
  /**
365
390
  * The border style for the left side of the element.
366
391
  *
367
392
  * @see https://lightning-tv.github.io/solid/#/essentials/effects?id=border-and-borderradius
368
393
  */
369
- borderLeft?: BorderStyle;
394
+ borderLeft?: SingleBorderStyle;
370
395
  /**
371
396
  * The radius of the element's corners.
372
397
  *
@@ -378,13 +403,13 @@ export interface ElementNode extends RendererNode, FocusNode {
378
403
  *
379
404
  * @see https://lightning-tv.github.io/solid/#/essentials/effects?id=border-and-borderradius
380
405
  */
381
- borderRight?: BorderStyle;
406
+ borderRight?: SingleBorderStyle;
382
407
  /**
383
408
  * The border style for the top side of the element.
384
409
  *
385
410
  * @see https://lightning-tv.github.io/solid/#/essentials/effects?id=border-and-borderradius
386
411
  */
387
- borderTop?: BorderStyle;
412
+ borderTop?: SingleBorderStyle;
388
413
  /**
389
414
  * A shorthand to set both `centerX` and `centerY` to true.
390
415
  *
@@ -682,12 +707,20 @@ export class ElementNode extends Object {
682
707
  set effects(v: StyleEffects) {
683
708
  if (!SHADERS_ENABLED) return;
684
709
  let target = this.lng.shader || {};
685
- if (this.lng.shader?.program) {
710
+ if (this.lng.shader?.props) {
686
711
  target = this.lng.shader.props;
687
712
  }
688
713
  if (v.rounded) target.radius = v.rounded.radius;
689
714
  if (v.borderRadius) target.radius = v.borderRadius;
690
715
  if (v.border) parseAndAssignShaderProps('border', v.border, target);
716
+ if (v.borderTop)
717
+ parseAndAssignShaderProps('borderTop', v.borderTop, target);
718
+ if (v.borderRight)
719
+ parseAndAssignShaderProps('borderRight', v.borderRight, target);
720
+ if (v.borderBottom)
721
+ parseAndAssignShaderProps('borderBottom', v.borderBottom, target);
722
+ if (v.borderLeft)
723
+ parseAndAssignShaderProps('borderLeft', v.borderLeft, target);
691
724
  if (v.shadow) parseAndAssignShaderProps('shadow', v.shadow, target);
692
725
 
693
726
  if (this.rendered) {
@@ -703,7 +736,11 @@ export class ElementNode extends Object {
703
736
 
704
737
  set id(id: string) {
705
738
  this._id = id;
706
- if (Config.rendererOptions?.inspector) {
739
+ if (
740
+ Config.rendererOptions &&
741
+ 'inspector' in Config.rendererOptions &&
742
+ Config.rendererOptions.inspector
743
+ ) {
707
744
  this.data = { ...this.data, testId: id };
708
745
  }
709
746
  }
@@ -877,7 +914,8 @@ export class ElementNode extends Object {
877
914
  }
878
915
  }
879
916
 
880
- (this.lng[name as keyof IRendererNode] as number | string) = value;
917
+ (this.lng[name as keyof (IRendererNode | INode)] as number | string) =
918
+ value;
881
919
  }
882
920
 
883
921
  animate(
@@ -978,7 +1016,12 @@ export class ElementNode extends Object {
978
1016
 
979
1017
  _layoutOnLoad() {
980
1018
  (this.lng as IRendererNode).on('loaded', () => {
981
- renderer.stage.reprocessUpdates?.();
1019
+ if (
1020
+ 'reprocessUpdates' in renderer.stage &&
1021
+ renderer.stage.reprocessUpdates
1022
+ ) {
1023
+ renderer.stage.reprocessUpdates();
1024
+ }
982
1025
  this.parent!.updateLayout();
983
1026
  });
984
1027
  }
@@ -1306,7 +1349,11 @@ export class ElementNode extends Object {
1306
1349
  if (Config.fontSettings) {
1307
1350
  for (const key in Config.fontSettings) {
1308
1351
  if (textProps[key] === undefined) {
1309
- textProps[key] = Config.fontSettings[key];
1352
+ let value = Config.fontSettings[key];
1353
+ if (key === 'fontFamily' && textProps['fontWeight'] === undefined) {
1354
+ value = `${value}${Config.fontSettings.fontWeight || ''}`;
1355
+ }
1356
+ textProps[key] = value;
1310
1357
  }
1311
1358
  }
1312
1359
  }
@@ -1342,8 +1389,7 @@ export class ElementNode extends Object {
1342
1389
  textProps.lineHeight ||
1343
1390
  textProps.fontSize) as number;
1344
1391
  }
1345
-
1346
- textProps.w = textProps.h = undefined;
1392
+ // textProps.w = textProps.h = 0;
1347
1393
  }
1348
1394
 
1349
1395
  // Can you put effects on Text nodes? Need to confirm...
@@ -1352,9 +1398,11 @@ export class ElementNode extends Object {
1352
1398
  }
1353
1399
 
1354
1400
  isDev && log('Rendering: ', this, props);
1401
+
1355
1402
  node.lng = renderer.createTextNode(
1356
- props as unknown as IRendererTextNodeProps,
1357
- );
1403
+ props as Partial<ITextNodeProps> & Partial<IRendererTextNodeProps>,
1404
+ ) as IRendererTextNode;
1405
+
1358
1406
  if (parent.requiresLayout()) {
1359
1407
  if (!textProps.maxWidth || !textProps.maxHeight) {
1360
1408
  node._layoutOnLoad();
@@ -1390,7 +1438,10 @@ export class ElementNode extends Object {
1390
1438
  }
1391
1439
 
1392
1440
  isDev && log('Rendering: ', this, props);
1393
- node.lng = renderer.createNode(props as IRendererNodeProps);
1441
+
1442
+ node.lng = renderer.createNode(
1443
+ props as Partial<INodeProps<any>> & Partial<IRendererNodeProps>,
1444
+ );
1394
1445
 
1395
1446
  if (node._hasRenderedChildren) {
1396
1447
  node._hasRenderedChildren = false;
@@ -1418,14 +1469,15 @@ export class ElementNode extends Object {
1418
1469
 
1419
1470
  if (node.onEvent) {
1420
1471
  for (const [name, handler] of Object.entries(node.onEvent)) {
1421
- node.lng.on(name, (_inode, data) => handler.call(node, node, data));
1472
+ if (typeof node.lng.on === 'function') {
1473
+ node.lng.on(name, (_inode, data) => handler.call(node, node, data));
1474
+ }
1422
1475
  }
1423
1476
  }
1424
1477
 
1425
1478
  // L3 Inspector adds div to the lng object
1426
- if (node.lng?.div) {
1427
- node.lng.div.element = node;
1428
- }
1479
+ const div: HTMLElement | undefined = (node.lng as any)?.div;
1480
+ if (div) div.element = node;
1429
1481
 
1430
1482
  if (node._type === NodeType.Element) {
1431
1483
  // only element nodes will have children that need rendering
@@ -1485,7 +1537,14 @@ export function createRawShaderAccessor<T>(key: keyof StyleEffects) {
1485
1537
  }
1486
1538
 
1487
1539
  export function shaderAccessor<T extends Record<string, any> | number>(
1488
- key: 'border' | 'shadow' | 'rounded',
1540
+ key:
1541
+ | 'border'
1542
+ | 'shadow'
1543
+ | 'rounded'
1544
+ | 'borderBottom'
1545
+ | 'borderLeft'
1546
+ | 'borderRight'
1547
+ | 'borderTop',
1489
1548
  ) {
1490
1549
  return {
1491
1550
  set(this: ElementNode, value: T) {
@@ -1494,7 +1553,7 @@ export function shaderAccessor<T extends Record<string, any> | number>(
1494
1553
  this._effects[key] = value;
1495
1554
 
1496
1555
  let animationSettings: AnimationSettings | undefined;
1497
- if (this.lng.shader?.program) {
1556
+ if (this.lng.shader?.props) {
1498
1557
  target = this.lng.shader.props;
1499
1558
  const transitionKey = key === 'rounded' ? 'borderRadius' : key;
1500
1559
  if (
@@ -1543,6 +1602,10 @@ if (isDev) {
1543
1602
 
1544
1603
  Object.defineProperties(ElementNode.prototype, {
1545
1604
  border: shaderAccessor<BorderStyle>('border'),
1605
+ borderBottom: shaderAccessor<BorderStyle>('borderBottom'),
1606
+ borderTop: shaderAccessor<BorderStyle>('borderTop'),
1607
+ borderLeft: shaderAccessor<BorderStyle>('borderLeft'),
1608
+ borderRight: shaderAccessor<BorderStyle>('borderRight'),
1546
1609
  shadow: shaderAccessor<ShadowProps>('shadow'),
1547
1610
  rounded: shaderAccessor<BorderRadius>('rounded'),
1548
1611
  // Alias for rounded
package/src/core/index.ts CHANGED
@@ -2,8 +2,10 @@ export * from './elementNode.js';
2
2
  export * from './lightningInit.js';
3
3
  export * from './nodeTypes.js';
4
4
  export * from './utils.js';
5
- export * from './intrinsicTypes.js';
6
- export * from './focusKeyTypes.js';
5
+ export * from './dom-renderer/domRenderer.js';
6
+ export type * from './dom-renderer/domRendererTypes.js';
7
+ export type * from './intrinsicTypes.js';
8
+ export type * from './focusKeyTypes.js';
7
9
  export * from './config.js';
8
10
  export * from './shaders.js';
9
11
  export type * from '@lightningjs/renderer';
@@ -23,16 +23,18 @@ export type AddColorString<T> = {
23
23
  [K in keyof T]: K extends `color${string}` ? string | number : T[K];
24
24
  };
25
25
 
26
- export interface BorderStyleObject {
27
- width: number;
28
- color: number | string;
29
- gap?: number;
30
- fill?: number | string;
31
- align?: number | 'inside' | 'center' | 'outside';
26
+ export interface BorderStyleObject extends Partial<lngr.BorderProps> {
27
+ width?: number | [number, number, number, number];
28
+ }
29
+
30
+ export interface SingleBorderStyleObject extends Partial<lngr.BorderProps> {
31
+ width?: number;
32
+ w?: number;
32
33
  }
33
34
 
34
35
  export type DollarString = `$${string}`;
35
36
  export type BorderStyle = BorderStyleObject;
37
+ export type SingleBorderStyle = SingleBorderStyleObject;
36
38
  export type BorderRadius = number | number[];
37
39
 
38
40
  export interface Effects {
@@ -43,10 +45,24 @@ export interface Effects {
43
45
  rounded?: Partial<ShaderRoundedProps>;
44
46
  borderRadius?: Partial<BorderRadius>;
45
47
  border?: Partial<ShaderBorderProps>;
48
+ borderTop?: Partial<ShaderBorderProps>;
49
+ borderBottom?: Partial<ShaderBorderProps>;
50
+ borderLeft?: Partial<ShaderBorderProps>;
51
+ borderRight?: Partial<ShaderBorderProps>;
46
52
  }
47
53
 
48
54
  export type StyleEffects = Effects;
49
55
 
56
+ export type CoreAnimation = Parameters<
57
+ lngr.Stage['animationManager']['registerAnimation']
58
+ >[0];
59
+
60
+ export type FontLoadOptions = Parameters<lngr.Stage['loadFont']>[1] & {
61
+ type?: 'ssdf' | 'msdf';
62
+ };
63
+
64
+ export type CoreShaderManager = lngr.Stage['shManager'];
65
+
50
66
  export type NewOmit<T, K extends PropertyKey> = {
51
67
  [P in keyof T as Exclude<P, K>]: T[P];
52
68
  };
@@ -1,137 +1,29 @@
1
1
  import * as lng from '@lightningjs/renderer';
2
- import { DOMRendererMain } from './domRenderer.js';
3
- import { DOM_RENDERING } from './config.js';
4
- import {
5
- ShaderBorderPrefixedProps,
6
- ShaderHolePunchProps,
7
- ShaderLinearGradientProps,
8
- ShaderRadialGradientProps,
9
- ShaderRoundedProps,
10
- ShaderShadowPrefixedProps,
11
- } from './shaders.js';
2
+ import { DOMRendererMain, loadFontToDom } from './dom-renderer/domRenderer.js';
3
+ import { Config, DOM_RENDERING } from './config.js';
4
+ import { FontLoadOptions } from './intrinsicTypes.js';
5
+ import { DomRendererMainSettings } from './dom-renderer/domRendererTypes.js';
12
6
 
13
7
  export type SdfFontType = 'ssdf' | 'msdf';
14
-
15
- /** Based on {@link lng.CoreRenderer} */
16
- export interface IRendererCoreRenderer {
17
- mode: 'canvas' | 'webgl' | undefined;
18
- }
19
- /** Based on {@link lng.TrFontManager} */
20
- export interface IRendererFontManager {
21
- addFontFace: (...a: any[]) => void;
22
- }
23
- /** Based on {@link lng.Stage} */
24
- export interface IRendererStage {
25
- root: IRendererNode;
26
- renderer: IRendererCoreRenderer;
27
- shManager: IRendererShaderManager;
28
- reprocessUpdates?: (callback?: () => void) => void;
29
- animationManager: {
30
- registerAnimation: (anim: any) => void;
31
- unregisterAnimation: (anim: any) => void;
32
- };
33
- loadFont(kind: string, props: any): Promise<void>;
34
- cleanup(full: boolean): void;
35
- }
36
-
37
- /** Based on {@link lng.CoreShaderManager} */
38
- export interface IRendererShaderManager {
39
- registerShaderType: (name: string, shader: any) => void;
40
- }
41
-
42
- /** Based on {@link lng.CoreShaderNode} */
43
- export interface IRendererShader {
44
- shaderType: IRendererShaderType;
45
- props?: IRendererShaderProps;
46
- program?: {};
47
- }
48
- /** Based on {@link lng.CoreShaderType} */
49
- export interface IRendererShaderType {}
50
- export type IRendererShaderProps = Partial<ShaderBorderPrefixedProps> &
51
- Partial<ShaderShadowPrefixedProps> &
52
- Partial<ShaderRoundedProps> &
53
- Partial<ShaderHolePunchProps> &
54
- Partial<ShaderRadialGradientProps> &
55
- Partial<ShaderLinearGradientProps>;
56
-
57
- /** Based on {@link lng.Texture} */
58
- export interface IRendererTexture {
59
- props: IRendererTextureProps;
60
- type: lng.TextureType;
61
- }
62
- export interface IRendererTextureProps {}
63
-
64
- export interface IEventEmitter {
65
- on: (e: string, cb: (...a: any[]) => void) => void;
66
- }
67
-
68
- export interface IRendererNodeShaded extends IEventEmitter {
69
- stage: IRendererStage;
70
- id: number;
71
- animate: (
72
- props: Partial<lng.INodeAnimateProps<any>>,
73
- settings: Partial<lng.AnimationSettings>,
74
- ) => lng.IAnimationController;
75
- get absX(): number;
76
- get absY(): number;
77
- }
78
-
79
- /** Based on {@link lng.INodeProps} */
80
- export interface IRendererNodeProps
81
- extends Omit<lng.INodeProps<lng.CoreShaderNode>, 'shader' | 'parent'> {
82
- shader: IRendererShader | null;
83
- parent: IRendererNode | null;
84
- }
85
- /** Based on {@link lng.INode} */
86
- export interface IRendererNode extends IRendererNodeShaded, IRendererNodeProps {
87
- div?: HTMLElement;
88
- props: IRendererNodeProps;
89
- renderState: lng.CoreNodeRenderState;
90
- }
91
-
92
- /** Based on {@link lng.ITextNodeProps} */
93
- export interface IRendererTextNodeProps
94
- extends Omit<lng.ITextNodeProps, 'shader' | 'parent'> {
95
- shader: IRendererShader | null;
96
- parent: IRendererNode | null;
97
- fontWeight?: string;
98
- }
99
- /** Based on {@link lng.ITextNode} */
100
- export interface IRendererTextNode
101
- extends IRendererNodeShaded,
102
- IRendererTextNodeProps {
103
- div?: HTMLElement;
104
- props: IRendererTextNodeProps;
105
- renderState: lng.CoreNodeRenderState;
106
- }
107
-
108
- /** Based on {@link lng.RendererMain} */
109
- export interface IRendererMain extends IEventEmitter {
110
- stage: IRendererStage;
111
- root: IRendererNode;
112
- createTextNode(props: Partial<IRendererTextNodeProps>): IRendererTextNode;
113
- createNode(props: Partial<IRendererNodeProps>): IRendererNode;
114
- createShader(kind: string, props: IRendererShaderProps): IRendererShader;
115
- createTexture(
116
- kind: keyof lng.TextureMap,
117
- props: IRendererTextureProps,
118
- ): IRendererTexture;
119
- }
120
-
121
- export let renderer: IRendererMain;
8
+ // Global renderer instance: can be either the Lightning or DOM implementation
9
+ export let renderer: lng.RendererMain | DOMRendererMain;
122
10
 
123
11
  export const getRenderer = () => renderer;
124
12
 
125
13
  export function startLightningRenderer(
126
- options: lng.RendererMainSettings,
14
+ options: lng.RendererMainSettings | DomRendererMainSettings,
127
15
  rootId: string | HTMLElement = 'app',
128
16
  ) {
129
- renderer = DOM_RENDERING
17
+ const enableDomRenderer = DOM_RENDERING && Config.domRendererEnabled;
18
+
19
+ renderer = enableDomRenderer
130
20
  ? new DOMRendererMain(options, rootId)
131
- : (new lng.RendererMain(options, rootId) as any as IRendererMain);
21
+ : new lng.RendererMain(options, rootId);
132
22
  return renderer;
133
23
  }
134
- export function loadFonts(fonts: any[]) {
24
+
25
+ export function loadFonts(fonts: FontLoadOptions[]) {
26
+ const enableDomRenderer = DOM_RENDERING && Config.domRendererEnabled;
135
27
  for (const font of fonts) {
136
28
  // WebGL — SDF
137
29
  if (
@@ -142,8 +34,12 @@ export function loadFonts(fonts: any[]) {
142
34
  renderer.stage.loadFont('sdf', font);
143
35
  }
144
36
  // Canvas — Web
145
- else if ('fontUrl' in font && renderer.stage.renderer.mode !== 'webgl') {
146
- renderer.stage.loadFont('canvas', font);
37
+ else if ('fontUrl' in font) {
38
+ if (enableDomRenderer) {
39
+ loadFontToDom(font);
40
+ } else if (renderer.stage.renderer.mode !== 'webgl') {
41
+ renderer.stage.loadFont('canvas', font);
42
+ }
147
43
  }
148
44
  }
149
45
  }