@lightningjs/blits 1.30.2 → 1.31.0
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/CHANGELOG.md +1029 -1019
- package/LICENSE +202 -202
- package/NOTICE +12 -12
- package/README.md +33 -33
- package/bin/index.js +8 -8
- package/blits.d.ts +6 -6
- package/index.d.ts +1099 -1099
- package/index.js +28 -28
- package/package.json +57 -56
- package/public/assets/fps_sprite.base64.js +1 -1
- package/scripts/postpublish.js +59 -59
- package/scripts/prepublishOnly.js +84 -84
- package/scripts/prepush.js +78 -78
- package/src/announcer/announcer.js +162 -162
- package/src/announcer/speechSynthesis.js +107 -107
- package/src/application.js +100 -100
- package/src/component/base/announcer.js +27 -27
- package/src/component/base/events.js +69 -69
- package/src/component/base/index.js +33 -33
- package/src/component/base/methods.js +244 -244
- package/src/component/base/router.js +41 -41
- package/src/component/base/timeouts_intervals.js +99 -99
- package/src/component/base/utils.js +72 -72
- package/src/component/setup/computed.js +48 -48
- package/src/component/setup/index.js +62 -62
- package/src/component/setup/input.js +30 -30
- package/src/component/setup/methods.js +37 -37
- package/src/component/setup/props.js +62 -62
- package/src/component/setup/routes.js +42 -42
- package/src/component/setup/state.js +59 -59
- package/src/component/setup/watch.js +35 -35
- package/src/component.js +437 -437
- package/src/components/Circle.js +73 -73
- package/src/components/FPScounter.js +1510 -1510
- package/src/components/RouterView.js +81 -81
- package/src/components/Sprite.js +94 -94
- package/src/components/index.js +28 -28
- package/src/constants.js +21 -21
- package/src/engine.js +1 -1
- package/src/engines/L3/element.js +744 -744
- package/src/engines/L3/fontLoader.js +38 -38
- package/src/engines/L3/index.js +7 -7
- package/src/engines/L3/launch.js +123 -123
- package/src/engines/L3/shaderLoader.js +12 -12
- package/src/engines/index.js +1 -1
- package/src/focus.js +90 -90
- package/src/helpers/deepEqualArray.js +50 -50
- package/src/helpers/fetchJson.js +34 -34
- package/src/helpers/sequence.js +26 -26
- package/src/launch.js +123 -123
- package/src/lib/blitsfileconverter/blitsfileconverter.js +52 -52
- package/src/lib/codegenerator/generator.js +788 -788
- package/src/lib/colors/colors.js +92 -92
- package/src/lib/colors/htmlColors.js +168 -168
- package/src/lib/componentId.js +49 -49
- package/src/lib/eventListeners.js +123 -123
- package/src/lib/hooks.js +59 -59
- package/src/lib/lifecycle.js +85 -85
- package/src/lib/log.js +117 -117
- package/src/lib/precompiler/precompiler.js +73 -73
- package/src/lib/reactivity/effect.js +93 -93
- package/src/lib/reactivity/reactive.js +208 -208
- package/src/lib/reactivityguard/computedprops.js +218 -218
- package/src/lib/symbols.js +108 -108
- package/src/lib/templateparser/parser.js +386 -386
- package/src/lib/utils.js +27 -27
- package/src/plugin.js +27 -27
- package/src/plugins/appstate.js +26 -26
- package/src/plugins/index.js +20 -20
- package/src/plugins/language.js +152 -152
- package/src/plugins/log.js +25 -25
- package/src/plugins/theme.js +94 -94
- package/src/router/router.js +516 -514
- package/src/router/transitions/fadeIn.js +27 -27
- package/src/router/transitions/fadeInOut.js +33 -33
- package/src/router/transitions/index.js +21 -21
- package/src/router/transitions/slideIn.js +28 -28
- package/src/router/transitions/slideInOut.js +33 -33
- package/src/settings.js +40 -40
- package/vite/blitsFileConverter.js +67 -67
- package/vite/index.js +28 -28
- package/vite/msdfGenerator.js +269 -269
- package/vite/preCompiler.js +47 -42
- package/vite/reactivityGuard.js +45 -45
- package/vscode/data/template-attributes.json +589 -589
- package/.editorconfig +0 -7
- package/.eslintignore +0 -1
- package/.eslintrc.cjs +0 -65
- package/.github/workflows/comment-lint-results.yml +0 -125
- package/.github/workflows/comment-test-results.yml +0 -109
- package/.github/workflows/deploy-docs.yml +0 -27
- package/.github/workflows/run-blits-tests.yml +0 -142
- package/.github/workflows/run-lint.yml +0 -128
- package/.husky/pre-commit +0 -1
- package/.husky/pre-push +0 -1
- package/.vscode/extensions.json +0 -7
- package/.vscode/settings.json +0 -9
- package/COPYING +0 -1
- package/banner.png +0 -0
- package/docs/.nojekyll +0 -0
- package/docs/README.md +0 -19
- package/docs/_sidebar.md +0 -37
- package/docs/built-in/directives.md +0 -50
- package/docs/built-in/for-loop.md +0 -204
- package/docs/built-in/layout.md +0 -168
- package/docs/components/component_state.md +0 -90
- package/docs/components/computed_properties.md +0 -45
- package/docs/components/lifecycle_events.md +0 -42
- package/docs/components/methods.md +0 -45
- package/docs/components/props.md +0 -56
- package/docs/components/user_input.md +0 -186
- package/docs/components/utility_methods.md +0 -320
- package/docs/components/watchers.md +0 -34
- package/docs/essentials/application_root.md +0 -19
- package/docs/essentials/components.md +0 -68
- package/docs/essentials/displaying_images.md +0 -67
- package/docs/essentials/displaying_text.md +0 -135
- package/docs/essentials/element_attributes.md +0 -195
- package/docs/essentials/settings.md +0 -117
- package/docs/essentials/template_syntax.md +0 -83
- package/docs/getting_started/file_structure.md +0 -58
- package/docs/getting_started/getting_started.md +0 -45
- package/docs/getting_started/intro.md +0 -20
- package/docs/index.html +0 -47
- package/docs/performance/lazy-loading.md +0 -161
- package/docs/plugins/global_app_state.md +0 -98
- package/docs/plugins/language.md +0 -172
- package/docs/plugins/text-to-speech-announcer.md +0 -120
- package/docs/plugins/theme.md +0 -176
- package/docs/router/basics.md +0 -175
- package/docs/router/hooks.md +0 -70
- package/docs/router/transitions.md +0 -146
- package/docs/sidebar.json +0 -171
- package/docs/transitions_animations/transitions.md +0 -150
- package/jsconfig.json +0 -12
- package/src/component/setup/props.test.js +0 -238
- package/src/component.test.js +0 -388
- package/src/components/Circle.orig.js +0 -31
- package/src/components/FPScounter.orig.js +0 -121
- package/src/components/RouterView.orig.js +0 -54
- package/src/components/Sprite.orig.js +0 -58
- package/src/components/index.orig.js +0 -28
- package/src/engines/L3/element.test.js +0 -579
- package/src/helpers/deepEqualArray.test.js +0 -127
- package/src/lib/codegenerator/generator.test.js +0 -3801
- package/src/lib/colors/colors.test.js +0 -290
- package/src/lib/componentId.test.js +0 -84
- package/src/lib/eventListeners.test.js +0 -236
- package/src/lib/reactivity/effect.test.js +0 -35
- package/src/lib/reactivity/reactive.test.js +0 -27
- package/src/lib/templateparser/parser.test.js +0 -1411
- package/src/router/router.test.js +0 -473
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
import { SdfTrFontFace, WebTrFontFace } from '@lightningjs/renderer'
|
|
2
|
-
import Settings from '../../settings.js'
|
|
3
|
-
import { renderer } from './launch.js'
|
|
4
|
-
|
|
5
|
-
export default () => {
|
|
6
|
-
const stage = renderer.stage
|
|
7
|
-
Settings.get('fonts', []).forEach((font) => {
|
|
8
|
-
if (font.type === 'sdf' || font.type === 'msdf') {
|
|
9
|
-
// automatically map png key to file name
|
|
10
|
-
if (!font.png && font.file) {
|
|
11
|
-
font.png = font.file.replace(/\.[^.]+$/, `.${font.type}.png`)
|
|
12
|
-
}
|
|
13
|
-
// automatically map json to file name
|
|
14
|
-
if (!font.json && font.file) {
|
|
15
|
-
font.json = font.file.replace(/\.[^.]+$/, `.${font.type}.json`)
|
|
16
|
-
}
|
|
17
|
-
stage.fontManager.addFontFace(
|
|
18
|
-
new SdfTrFontFace(font.type, {
|
|
19
|
-
fontFamily: font.family,
|
|
20
|
-
descriptors: {},
|
|
21
|
-
atlasUrl: font.png,
|
|
22
|
-
atlasDataUrl: font.json,
|
|
23
|
-
stage,
|
|
24
|
-
metrics: font.metrics,
|
|
25
|
-
})
|
|
26
|
-
)
|
|
27
|
-
} else if (font.type === 'web') {
|
|
28
|
-
stage.fontManager.addFontFace(
|
|
29
|
-
new WebTrFontFace({
|
|
30
|
-
fontFamily: font.family,
|
|
31
|
-
fontUrl: font.file,
|
|
32
|
-
descriptors: {},
|
|
33
|
-
metrics: font.metrics,
|
|
34
|
-
})
|
|
35
|
-
)
|
|
36
|
-
}
|
|
37
|
-
})
|
|
38
|
-
}
|
|
1
|
+
import { SdfTrFontFace, WebTrFontFace } from '@lightningjs/renderer'
|
|
2
|
+
import Settings from '../../settings.js'
|
|
3
|
+
import { renderer } from './launch.js'
|
|
4
|
+
|
|
5
|
+
export default () => {
|
|
6
|
+
const stage = renderer.stage
|
|
7
|
+
Settings.get('fonts', []).forEach((font) => {
|
|
8
|
+
if (font.type === 'sdf' || font.type === 'msdf') {
|
|
9
|
+
// automatically map png key to file name
|
|
10
|
+
if (!font.png && font.file) {
|
|
11
|
+
font.png = font.file.replace(/\.[^.]+$/, `.${font.type}.png`)
|
|
12
|
+
}
|
|
13
|
+
// automatically map json to file name
|
|
14
|
+
if (!font.json && font.file) {
|
|
15
|
+
font.json = font.file.replace(/\.[^.]+$/, `.${font.type}.json`)
|
|
16
|
+
}
|
|
17
|
+
stage.fontManager.addFontFace(
|
|
18
|
+
new SdfTrFontFace(font.type, {
|
|
19
|
+
fontFamily: font.family,
|
|
20
|
+
descriptors: {},
|
|
21
|
+
atlasUrl: font.png,
|
|
22
|
+
atlasDataUrl: font.json,
|
|
23
|
+
stage,
|
|
24
|
+
metrics: font.metrics,
|
|
25
|
+
})
|
|
26
|
+
)
|
|
27
|
+
} else if (font.type === 'web') {
|
|
28
|
+
stage.fontManager.addFontFace(
|
|
29
|
+
new WebTrFontFace({
|
|
30
|
+
fontFamily: font.family,
|
|
31
|
+
fontUrl: font.file,
|
|
32
|
+
descriptors: {},
|
|
33
|
+
metrics: font.metrics,
|
|
34
|
+
})
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
})
|
|
38
|
+
}
|
package/src/engines/L3/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import Element from './element.js'
|
|
2
|
-
import Launch from './launch.js'
|
|
3
|
-
|
|
4
|
-
export default {
|
|
5
|
-
Element,
|
|
6
|
-
Launch,
|
|
7
|
-
}
|
|
1
|
+
import Element from './element.js'
|
|
2
|
+
import Launch from './launch.js'
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
Element,
|
|
6
|
+
Launch,
|
|
7
|
+
}
|
package/src/engines/L3/launch.js
CHANGED
|
@@ -1,123 +1,123 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2023 Comcast Cable Communications Management, LLC
|
|
3
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
* you may not use this file except in compliance with the License.
|
|
5
|
-
* You may obtain a copy of the License at
|
|
6
|
-
*
|
|
7
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
*
|
|
9
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
* See the License for the specific language governing permissions and
|
|
13
|
-
* limitations under the License.
|
|
14
|
-
*
|
|
15
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
import { RendererMain } from '@lightningjs/renderer'
|
|
19
|
-
import { WebGlCoreRenderer, SdfTextRenderer } from '@lightningjs/renderer/webgl'
|
|
20
|
-
import { CanvasCoreRenderer, CanvasTextRenderer } from '@lightningjs/renderer/canvas'
|
|
21
|
-
import { Inspector } from '@lightningjs/renderer/inspector'
|
|
22
|
-
|
|
23
|
-
import { Log } from '../../lib/log.js'
|
|
24
|
-
import { SCREEN_RESOLUTIONS, RENDER_QUALITIES } from '../../constants.js'
|
|
25
|
-
import colors from '../../lib/colors/colors.js'
|
|
26
|
-
import fontLoader from './fontLoader.js'
|
|
27
|
-
import shaderLoader from './shaderLoader.js'
|
|
28
|
-
|
|
29
|
-
/** @type {RendererMain|null} */
|
|
30
|
-
export let renderer = null
|
|
31
|
-
|
|
32
|
-
const renderEngine = (settings) => {
|
|
33
|
-
const renderMode = 'renderMode' in settings ? settings.renderMode : 'webgl'
|
|
34
|
-
|
|
35
|
-
if (renderMode === 'webgl') return WebGlCoreRenderer
|
|
36
|
-
if (renderMode === 'canvas') return CanvasCoreRenderer
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const textRenderEngines = (settings) => {
|
|
40
|
-
const renderMode = 'renderMode' in settings ? settings.renderMode : 'webgl'
|
|
41
|
-
|
|
42
|
-
if (renderMode === 'webgl') return [SdfTextRenderer, CanvasTextRenderer]
|
|
43
|
-
if (renderMode === 'canvas') return [CanvasTextRenderer]
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const textureMemorySettings = (settings) => {
|
|
47
|
-
const gpuMemory = {
|
|
48
|
-
...{
|
|
49
|
-
max: 200,
|
|
50
|
-
target: 0.8,
|
|
51
|
-
cleanupInterval: 5000,
|
|
52
|
-
baseline: 25,
|
|
53
|
-
strict: false,
|
|
54
|
-
},
|
|
55
|
-
...('gpuMemory' in settings === true ? settings.gpuMemory : {}),
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return {
|
|
59
|
-
criticalThreshold: gpuMemory.max * 1024 * 1024, // convert from mb to bytes
|
|
60
|
-
targetThresholdLevel: gpuMemory.target,
|
|
61
|
-
cleanupInterval: gpuMemory.cleanupInterval,
|
|
62
|
-
baselineMemoryAllocation: gpuMemory.baseline * 1024 * 1024, // convert from mb to bytes
|
|
63
|
-
doNotExceedCriticalThreshold: gpuMemory.strict,
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Launch the render engine and application
|
|
69
|
-
*
|
|
70
|
-
* @param {import('../../launch.js').BlitsAppFactory} App - Factory function that returns the application instance (extends BlitsComponent with .quit())
|
|
71
|
-
* @param {HTMLElement} target - The target element to render the application into
|
|
72
|
-
* @param {Partial<import('../../launch.js').BlitsSettings>} [settings] - The settings for the renderer
|
|
73
|
-
*
|
|
74
|
-
*/
|
|
75
|
-
export default (App, target, settings = {}) => {
|
|
76
|
-
renderer = new RendererMain(
|
|
77
|
-
{
|
|
78
|
-
...{
|
|
79
|
-
appWidth: settings.w || 1920,
|
|
80
|
-
appHeight: settings.h || 1080,
|
|
81
|
-
fpsUpdateInterval: settings.fpsInterval || 1000,
|
|
82
|
-
devicePhysicalPixelRatio:
|
|
83
|
-
RENDER_QUALITIES[settings.renderQuality] || settings.renderQuality || 1,
|
|
84
|
-
deviceLogicalPixelRatio:
|
|
85
|
-
settings.pixelRatio ||
|
|
86
|
-
SCREEN_RESOLUTIONS[settings.screenResolution] ||
|
|
87
|
-
SCREEN_RESOLUTIONS[window.innerHeight] ||
|
|
88
|
-
1,
|
|
89
|
-
numImageWorkers:
|
|
90
|
-
'webWorkersLimit' in settings
|
|
91
|
-
? settings.webWorkersLimit
|
|
92
|
-
: window.navigator.hardwareConcurrency || 2,
|
|
93
|
-
clearColor: (settings.canvasColor && colors.normalize(settings.canvasColor)) || 0x00000000,
|
|
94
|
-
inspector: settings.inspector === true ? Inspector : undefined,
|
|
95
|
-
boundsMargin: settings.viewportMargin || 0,
|
|
96
|
-
renderEngine: renderEngine(settings),
|
|
97
|
-
fontEngines: textRenderEngines(settings),
|
|
98
|
-
canvas: settings.canvas,
|
|
99
|
-
textureProcessingTimeLimit: settings.textureProcessingTimeLimit,
|
|
100
|
-
textureMemory: textureMemorySettings(settings),
|
|
101
|
-
createImageBitmapSupport: 'auto',
|
|
102
|
-
},
|
|
103
|
-
...(settings.advanced || {}),
|
|
104
|
-
},
|
|
105
|
-
target
|
|
106
|
-
)
|
|
107
|
-
|
|
108
|
-
const initApp = () => {
|
|
109
|
-
let app = App()
|
|
110
|
-
app.quit = () => {
|
|
111
|
-
Log.info('Closing App')
|
|
112
|
-
app.destroy()
|
|
113
|
-
app = null
|
|
114
|
-
renderer = null
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
shaderLoader()
|
|
119
|
-
fontLoader()
|
|
120
|
-
initApp()
|
|
121
|
-
|
|
122
|
-
return renderer
|
|
123
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 Comcast Cable Communications Management, LLC
|
|
3
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License.
|
|
5
|
+
* You may obtain a copy of the License at
|
|
6
|
+
*
|
|
7
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
*
|
|
9
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
* See the License for the specific language governing permissions and
|
|
13
|
+
* limitations under the License.
|
|
14
|
+
*
|
|
15
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { RendererMain } from '@lightningjs/renderer'
|
|
19
|
+
import { WebGlCoreRenderer, SdfTextRenderer } from '@lightningjs/renderer/webgl'
|
|
20
|
+
import { CanvasCoreRenderer, CanvasTextRenderer } from '@lightningjs/renderer/canvas'
|
|
21
|
+
import { Inspector } from '@lightningjs/renderer/inspector'
|
|
22
|
+
|
|
23
|
+
import { Log } from '../../lib/log.js'
|
|
24
|
+
import { SCREEN_RESOLUTIONS, RENDER_QUALITIES } from '../../constants.js'
|
|
25
|
+
import colors from '../../lib/colors/colors.js'
|
|
26
|
+
import fontLoader from './fontLoader.js'
|
|
27
|
+
import shaderLoader from './shaderLoader.js'
|
|
28
|
+
|
|
29
|
+
/** @type {RendererMain|null} */
|
|
30
|
+
export let renderer = null
|
|
31
|
+
|
|
32
|
+
const renderEngine = (settings) => {
|
|
33
|
+
const renderMode = 'renderMode' in settings ? settings.renderMode : 'webgl'
|
|
34
|
+
|
|
35
|
+
if (renderMode === 'webgl') return WebGlCoreRenderer
|
|
36
|
+
if (renderMode === 'canvas') return CanvasCoreRenderer
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const textRenderEngines = (settings) => {
|
|
40
|
+
const renderMode = 'renderMode' in settings ? settings.renderMode : 'webgl'
|
|
41
|
+
|
|
42
|
+
if (renderMode === 'webgl') return [SdfTextRenderer, CanvasTextRenderer]
|
|
43
|
+
if (renderMode === 'canvas') return [CanvasTextRenderer]
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const textureMemorySettings = (settings) => {
|
|
47
|
+
const gpuMemory = {
|
|
48
|
+
...{
|
|
49
|
+
max: 200,
|
|
50
|
+
target: 0.8,
|
|
51
|
+
cleanupInterval: 5000,
|
|
52
|
+
baseline: 25,
|
|
53
|
+
strict: false,
|
|
54
|
+
},
|
|
55
|
+
...('gpuMemory' in settings === true ? settings.gpuMemory : {}),
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return {
|
|
59
|
+
criticalThreshold: gpuMemory.max * 1024 * 1024, // convert from mb to bytes
|
|
60
|
+
targetThresholdLevel: gpuMemory.target,
|
|
61
|
+
cleanupInterval: gpuMemory.cleanupInterval,
|
|
62
|
+
baselineMemoryAllocation: gpuMemory.baseline * 1024 * 1024, // convert from mb to bytes
|
|
63
|
+
doNotExceedCriticalThreshold: gpuMemory.strict,
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Launch the render engine and application
|
|
69
|
+
*
|
|
70
|
+
* @param {import('../../launch.js').BlitsAppFactory} App - Factory function that returns the application instance (extends BlitsComponent with .quit())
|
|
71
|
+
* @param {HTMLElement} target - The target element to render the application into
|
|
72
|
+
* @param {Partial<import('../../launch.js').BlitsSettings>} [settings] - The settings for the renderer
|
|
73
|
+
*
|
|
74
|
+
*/
|
|
75
|
+
export default (App, target, settings = {}) => {
|
|
76
|
+
renderer = new RendererMain(
|
|
77
|
+
{
|
|
78
|
+
...{
|
|
79
|
+
appWidth: settings.w || 1920,
|
|
80
|
+
appHeight: settings.h || 1080,
|
|
81
|
+
fpsUpdateInterval: settings.fpsInterval || 1000,
|
|
82
|
+
devicePhysicalPixelRatio:
|
|
83
|
+
RENDER_QUALITIES[settings.renderQuality] || settings.renderQuality || 1,
|
|
84
|
+
deviceLogicalPixelRatio:
|
|
85
|
+
settings.pixelRatio ||
|
|
86
|
+
SCREEN_RESOLUTIONS[settings.screenResolution] ||
|
|
87
|
+
SCREEN_RESOLUTIONS[window.innerHeight] ||
|
|
88
|
+
1,
|
|
89
|
+
numImageWorkers:
|
|
90
|
+
'webWorkersLimit' in settings
|
|
91
|
+
? settings.webWorkersLimit
|
|
92
|
+
: window.navigator.hardwareConcurrency || 2,
|
|
93
|
+
clearColor: (settings.canvasColor && colors.normalize(settings.canvasColor)) || 0x00000000,
|
|
94
|
+
inspector: settings.inspector === true ? Inspector : undefined,
|
|
95
|
+
boundsMargin: settings.viewportMargin || 0,
|
|
96
|
+
renderEngine: renderEngine(settings),
|
|
97
|
+
fontEngines: textRenderEngines(settings),
|
|
98
|
+
canvas: settings.canvas,
|
|
99
|
+
textureProcessingTimeLimit: settings.textureProcessingTimeLimit,
|
|
100
|
+
textureMemory: textureMemorySettings(settings),
|
|
101
|
+
createImageBitmapSupport: 'auto',
|
|
102
|
+
},
|
|
103
|
+
...(settings.advanced || {}),
|
|
104
|
+
},
|
|
105
|
+
target
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
const initApp = () => {
|
|
109
|
+
let app = App()
|
|
110
|
+
app.quit = () => {
|
|
111
|
+
Log.info('Closing App')
|
|
112
|
+
app.destroy()
|
|
113
|
+
app = null
|
|
114
|
+
renderer = null
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
shaderLoader()
|
|
119
|
+
fontLoader()
|
|
120
|
+
initApp()
|
|
121
|
+
|
|
122
|
+
return renderer
|
|
123
|
+
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import Settings from '../../settings.js'
|
|
2
|
-
import { renderer } from './launch.js'
|
|
3
|
-
|
|
4
|
-
export default () => {
|
|
5
|
-
const stage = renderer.stage
|
|
6
|
-
Settings.get('shaders', []).forEach((shader) => {
|
|
7
|
-
stage.shManager.registerShaderType(shader.name, shader.type)
|
|
8
|
-
})
|
|
9
|
-
Settings.get('effects', []).forEach((effect) => {
|
|
10
|
-
stage.shManager.registerShaderType(effect.name, effect.type)
|
|
11
|
-
})
|
|
12
|
-
}
|
|
1
|
+
import Settings from '../../settings.js'
|
|
2
|
+
import { renderer } from './launch.js'
|
|
3
|
+
|
|
4
|
+
export default () => {
|
|
5
|
+
const stage = renderer.stage
|
|
6
|
+
Settings.get('shaders', []).forEach((shader) => {
|
|
7
|
+
stage.shManager.registerShaderType(shader.name, shader.type)
|
|
8
|
+
})
|
|
9
|
+
Settings.get('effects', []).forEach((effect) => {
|
|
10
|
+
stage.shManager.registerShaderType(effect.name, effect.type)
|
|
11
|
+
})
|
|
12
|
+
}
|
package/src/engines/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { default as L3 } from './L3/index.js'
|
|
1
|
+
export { default as L3 } from './L3/index.js'
|
package/src/focus.js
CHANGED
|
@@ -1,90 +1,90 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2023 Comcast Cable Communications Management, LLC
|
|
3
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
* you may not use this file except in compliance with the License.
|
|
5
|
-
* You may obtain a copy of the License at
|
|
6
|
-
*
|
|
7
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
*
|
|
9
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
* See the License for the specific language governing permissions and
|
|
13
|
-
* limitations under the License.
|
|
14
|
-
*
|
|
15
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
import symbols from './lib/symbols.js'
|
|
19
|
-
import { state } from './router/router.js'
|
|
20
|
-
import Settings from './settings.js'
|
|
21
|
-
import { DEFAULT_HOLD_TIMEOUT_MS } from './constants.js'
|
|
22
|
-
|
|
23
|
-
let focusedComponent = null
|
|
24
|
-
let focusChain = []
|
|
25
|
-
let setFocusTimeout
|
|
26
|
-
|
|
27
|
-
export const keyUpCallbacks = new Map()
|
|
28
|
-
|
|
29
|
-
export default {
|
|
30
|
-
_hold: false,
|
|
31
|
-
set hold(v) {
|
|
32
|
-
this._hold = v
|
|
33
|
-
},
|
|
34
|
-
get hold() {
|
|
35
|
-
return this._hold
|
|
36
|
-
},
|
|
37
|
-
get() {
|
|
38
|
-
return focusedComponent
|
|
39
|
-
},
|
|
40
|
-
set(component, event) {
|
|
41
|
-
if (component === focusedComponent) return
|
|
42
|
-
clearTimeout(setFocusTimeout)
|
|
43
|
-
focusedComponent && focusedComponent !== component.parent && focusedComponent.unfocus()
|
|
44
|
-
focusChain.reverse().forEach((cmp) => cmp.unfocus())
|
|
45
|
-
if (component !== focusedComponent) {
|
|
46
|
-
setFocusTimeout = setTimeout(
|
|
47
|
-
() => {
|
|
48
|
-
focusedComponent = component
|
|
49
|
-
focusedComponent.lifecycle.state = 'focus'
|
|
50
|
-
if (event instanceof KeyboardEvent) {
|
|
51
|
-
document.dispatchEvent(new KeyboardEvent('keydown', event))
|
|
52
|
-
} else {
|
|
53
|
-
focusChain = []
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
|
-
this.hold ? Settings.get('holdTimeout', DEFAULT_HOLD_TIMEOUT_MS) : 0
|
|
57
|
-
)
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
input(key, event) {
|
|
61
|
-
if (state.navigating === true) return
|
|
62
|
-
focusChain = walkChain([focusedComponent], key)
|
|
63
|
-
const componentWithInputEvent = focusChain.shift()
|
|
64
|
-
|
|
65
|
-
if (componentWithInputEvent) {
|
|
66
|
-
let cb
|
|
67
|
-
if (componentWithInputEvent[symbols.inputEvents][key]) {
|
|
68
|
-
cb = componentWithInputEvent[symbols.inputEvents][key].call(componentWithInputEvent, event)
|
|
69
|
-
} else if (componentWithInputEvent[symbols.inputEvents].any) {
|
|
70
|
-
cb = componentWithInputEvent[symbols.inputEvents].any.call(componentWithInputEvent, event)
|
|
71
|
-
}
|
|
72
|
-
if (cb !== undefined) {
|
|
73
|
-
keyUpCallbacks.set(event.code, cb)
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
},
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
const walkChain = (components, key) => {
|
|
80
|
-
if (
|
|
81
|
-
components[0][symbols.inputEvents] &&
|
|
82
|
-
(typeof components[0][symbols.inputEvents][key] === 'function' ||
|
|
83
|
-
typeof components[0][symbols.inputEvents].any === 'function')
|
|
84
|
-
) {
|
|
85
|
-
return components
|
|
86
|
-
} else if (components[0].parent) {
|
|
87
|
-
components.unshift(components[0].parent)
|
|
88
|
-
return walkChain(components, key)
|
|
89
|
-
} else return []
|
|
90
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 Comcast Cable Communications Management, LLC
|
|
3
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License.
|
|
5
|
+
* You may obtain a copy of the License at
|
|
6
|
+
*
|
|
7
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
*
|
|
9
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
* See the License for the specific language governing permissions and
|
|
13
|
+
* limitations under the License.
|
|
14
|
+
*
|
|
15
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import symbols from './lib/symbols.js'
|
|
19
|
+
import { state } from './router/router.js'
|
|
20
|
+
import Settings from './settings.js'
|
|
21
|
+
import { DEFAULT_HOLD_TIMEOUT_MS } from './constants.js'
|
|
22
|
+
|
|
23
|
+
let focusedComponent = null
|
|
24
|
+
let focusChain = []
|
|
25
|
+
let setFocusTimeout
|
|
26
|
+
|
|
27
|
+
export const keyUpCallbacks = new Map()
|
|
28
|
+
|
|
29
|
+
export default {
|
|
30
|
+
_hold: false,
|
|
31
|
+
set hold(v) {
|
|
32
|
+
this._hold = v
|
|
33
|
+
},
|
|
34
|
+
get hold() {
|
|
35
|
+
return this._hold
|
|
36
|
+
},
|
|
37
|
+
get() {
|
|
38
|
+
return focusedComponent
|
|
39
|
+
},
|
|
40
|
+
set(component, event) {
|
|
41
|
+
if (component === focusedComponent) return
|
|
42
|
+
clearTimeout(setFocusTimeout)
|
|
43
|
+
focusedComponent && focusedComponent !== component.parent && focusedComponent.unfocus()
|
|
44
|
+
focusChain.reverse().forEach((cmp) => cmp.unfocus())
|
|
45
|
+
if (component !== focusedComponent) {
|
|
46
|
+
setFocusTimeout = setTimeout(
|
|
47
|
+
() => {
|
|
48
|
+
focusedComponent = component
|
|
49
|
+
focusedComponent.lifecycle.state = 'focus'
|
|
50
|
+
if (event instanceof KeyboardEvent) {
|
|
51
|
+
document.dispatchEvent(new KeyboardEvent('keydown', event))
|
|
52
|
+
} else {
|
|
53
|
+
focusChain = []
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
this.hold ? Settings.get('holdTimeout', DEFAULT_HOLD_TIMEOUT_MS) : 0
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
input(key, event) {
|
|
61
|
+
if (state.navigating === true) return
|
|
62
|
+
focusChain = walkChain([focusedComponent], key)
|
|
63
|
+
const componentWithInputEvent = focusChain.shift()
|
|
64
|
+
|
|
65
|
+
if (componentWithInputEvent) {
|
|
66
|
+
let cb
|
|
67
|
+
if (componentWithInputEvent[symbols.inputEvents][key]) {
|
|
68
|
+
cb = componentWithInputEvent[symbols.inputEvents][key].call(componentWithInputEvent, event)
|
|
69
|
+
} else if (componentWithInputEvent[symbols.inputEvents].any) {
|
|
70
|
+
cb = componentWithInputEvent[symbols.inputEvents].any.call(componentWithInputEvent, event)
|
|
71
|
+
}
|
|
72
|
+
if (cb !== undefined) {
|
|
73
|
+
keyUpCallbacks.set(event.code, cb)
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const walkChain = (components, key) => {
|
|
80
|
+
if (
|
|
81
|
+
components[0][symbols.inputEvents] &&
|
|
82
|
+
(typeof components[0][symbols.inputEvents][key] === 'function' ||
|
|
83
|
+
typeof components[0][symbols.inputEvents].any === 'function')
|
|
84
|
+
) {
|
|
85
|
+
return components
|
|
86
|
+
} else if (components[0].parent) {
|
|
87
|
+
components.unshift(components[0].parent)
|
|
88
|
+
return walkChain(components, key)
|
|
89
|
+
} else return []
|
|
90
|
+
}
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2024 Comcast Cable Communications Management, LLC
|
|
3
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
* you may not use this file except in compliance with the License.
|
|
5
|
-
* You may obtain a copy of the License at
|
|
6
|
-
*
|
|
7
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
*
|
|
9
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
* See the License for the specific language governing permissions and
|
|
13
|
-
* limitations under the License.
|
|
14
|
-
*
|
|
15
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
const deepEqualArray = (array1, array2) => {
|
|
19
|
-
if (array1 === array2) return true
|
|
20
|
-
if (array1.length !== array2.length) return false
|
|
21
|
-
|
|
22
|
-
let l = array1.length
|
|
23
|
-
|
|
24
|
-
while (l--) {
|
|
25
|
-
const value1 = array1[l]
|
|
26
|
-
const value2 = array2[l]
|
|
27
|
-
|
|
28
|
-
// values are arrays, deepEqual nested arrays
|
|
29
|
-
if (Array.isArray(value1) && Array.isArray(value2)) {
|
|
30
|
-
if (deepEqualArray(value1, value2) === false) return false
|
|
31
|
-
}
|
|
32
|
-
// values are objects, deepEqual nested objects
|
|
33
|
-
else if (
|
|
34
|
-
typeof value1 === 'object' &&
|
|
35
|
-
value1 !== null &&
|
|
36
|
-
typeof value2 === 'object' &&
|
|
37
|
-
value2 !== null
|
|
38
|
-
) {
|
|
39
|
-
if (deepEqualArray(Object.entries(value1), Object.entries(value2)) === false) return false
|
|
40
|
-
}
|
|
41
|
-
// other type, do strict equal check
|
|
42
|
-
else if (value1 !== value2) {
|
|
43
|
-
return false
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return true
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export default deepEqualArray
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 Comcast Cable Communications Management, LLC
|
|
3
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License.
|
|
5
|
+
* You may obtain a copy of the License at
|
|
6
|
+
*
|
|
7
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
*
|
|
9
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
* See the License for the specific language governing permissions and
|
|
13
|
+
* limitations under the License.
|
|
14
|
+
*
|
|
15
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
const deepEqualArray = (array1, array2) => {
|
|
19
|
+
if (array1 === array2) return true
|
|
20
|
+
if (array1.length !== array2.length) return false
|
|
21
|
+
|
|
22
|
+
let l = array1.length
|
|
23
|
+
|
|
24
|
+
while (l--) {
|
|
25
|
+
const value1 = array1[l]
|
|
26
|
+
const value2 = array2[l]
|
|
27
|
+
|
|
28
|
+
// values are arrays, deepEqual nested arrays
|
|
29
|
+
if (Array.isArray(value1) && Array.isArray(value2)) {
|
|
30
|
+
if (deepEqualArray(value1, value2) === false) return false
|
|
31
|
+
}
|
|
32
|
+
// values are objects, deepEqual nested objects
|
|
33
|
+
else if (
|
|
34
|
+
typeof value1 === 'object' &&
|
|
35
|
+
value1 !== null &&
|
|
36
|
+
typeof value2 === 'object' &&
|
|
37
|
+
value2 !== null
|
|
38
|
+
) {
|
|
39
|
+
if (deepEqualArray(Object.entries(value1), Object.entries(value2)) === false) return false
|
|
40
|
+
}
|
|
41
|
+
// other type, do strict equal check
|
|
42
|
+
else if (value1 !== value2) {
|
|
43
|
+
return false
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return true
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export default deepEqualArray
|