@lightningjs/blits 1.30.0 → 1.30.2

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 (149) hide show
  1. package/.editorconfig +7 -7
  2. package/.eslintignore +1 -1
  3. package/.eslintrc.cjs +65 -65
  4. package/.github/workflows/comment-lint-results.yml +124 -124
  5. package/.github/workflows/comment-test-results.yml +108 -108
  6. package/.github/workflows/deploy-docs.yml +27 -27
  7. package/.github/workflows/run-blits-tests.yml +141 -141
  8. package/.github/workflows/run-lint.yml +127 -127
  9. package/.husky/pre-commit +1 -1
  10. package/.vscode/extensions.json +7 -7
  11. package/.vscode/settings.json +9 -9
  12. package/CHANGELOG.md +1019 -1005
  13. package/COPYING +1 -0
  14. package/LICENSE +202 -202
  15. package/NOTICE +12 -12
  16. package/README.md +33 -33
  17. package/bin/index.js +8 -8
  18. package/blits.d.ts +6 -6
  19. package/docs/README.md +19 -19
  20. package/docs/_sidebar.md +37 -37
  21. package/docs/built-in/directives.md +50 -50
  22. package/docs/built-in/for-loop.md +203 -203
  23. package/docs/built-in/layout.md +168 -168
  24. package/docs/components/component_state.md +90 -90
  25. package/docs/components/computed_properties.md +45 -45
  26. package/docs/components/lifecycle_events.md +42 -42
  27. package/docs/components/methods.md +45 -45
  28. package/docs/components/props.md +56 -56
  29. package/docs/components/user_input.md +186 -186
  30. package/docs/components/utility_methods.md +320 -320
  31. package/docs/components/watchers.md +34 -34
  32. package/docs/essentials/application_root.md +19 -19
  33. package/docs/essentials/components.md +68 -68
  34. package/docs/essentials/displaying_images.md +67 -67
  35. package/docs/essentials/displaying_text.md +135 -135
  36. package/docs/essentials/element_attributes.md +195 -195
  37. package/docs/essentials/settings.md +117 -117
  38. package/docs/essentials/template_syntax.md +83 -83
  39. package/docs/getting_started/file_structure.md +58 -58
  40. package/docs/getting_started/getting_started.md +45 -45
  41. package/docs/getting_started/intro.md +20 -20
  42. package/docs/index.html +47 -47
  43. package/docs/performance/lazy-loading.md +161 -161
  44. package/docs/plugins/global_app_state.md +98 -98
  45. package/docs/plugins/language.md +172 -172
  46. package/docs/plugins/text-to-speech-announcer.md +119 -119
  47. package/docs/plugins/theme.md +176 -176
  48. package/docs/router/basics.md +175 -175
  49. package/docs/router/hooks.md +70 -70
  50. package/docs/router/transitions.md +146 -146
  51. package/docs/sidebar.json +171 -171
  52. package/docs/transitions_animations/transitions.md +150 -150
  53. package/index.d.ts +1099 -1099
  54. package/index.js +28 -28
  55. package/jsconfig.json +12 -12
  56. package/package.json +56 -56
  57. package/public/assets/fps_sprite.base64.js +1 -1
  58. package/scripts/postpublish.js +59 -59
  59. package/scripts/prepublishOnly.js +84 -84
  60. package/scripts/prepush.js +78 -78
  61. package/src/announcer/announcer.js +162 -162
  62. package/src/announcer/speechSynthesis.js +107 -107
  63. package/src/application.js +100 -100
  64. package/src/component/base/announcer.js +27 -27
  65. package/src/component/base/events.js +69 -69
  66. package/src/component/base/index.js +33 -33
  67. package/src/component/base/methods.js +244 -244
  68. package/src/component/base/router.js +41 -41
  69. package/src/component/base/timeouts_intervals.js +99 -99
  70. package/src/component/base/utils.js +72 -72
  71. package/src/component/setup/computed.js +48 -48
  72. package/src/component/setup/index.js +62 -62
  73. package/src/component/setup/input.js +30 -30
  74. package/src/component/setup/methods.js +37 -37
  75. package/src/component/setup/props.js +62 -62
  76. package/src/component/setup/props.test.js +238 -238
  77. package/src/component/setup/routes.js +42 -42
  78. package/src/component/setup/state.js +59 -59
  79. package/src/component/setup/watch.js +35 -35
  80. package/src/component.js +437 -437
  81. package/src/component.test.js +388 -388
  82. package/src/components/Circle.js +73 -73
  83. package/src/components/Circle.orig.js +31 -31
  84. package/src/components/FPScounter.js +1510 -1510
  85. package/src/components/FPScounter.orig.js +121 -121
  86. package/src/components/RouterView.js +81 -81
  87. package/src/components/RouterView.orig.js +54 -54
  88. package/src/components/Sprite.js +94 -94
  89. package/src/components/Sprite.orig.js +58 -58
  90. package/src/components/index.js +28 -28
  91. package/src/components/index.orig.js +28 -28
  92. package/src/constants.js +21 -21
  93. package/src/engine.js +1 -1
  94. package/src/engines/L3/element.js +744 -744
  95. package/src/engines/L3/element.test.js +579 -579
  96. package/src/engines/L3/fontLoader.js +38 -38
  97. package/src/engines/L3/index.js +7 -7
  98. package/src/engines/L3/launch.js +123 -123
  99. package/src/engines/L3/shaderLoader.js +12 -12
  100. package/src/engines/index.js +1 -1
  101. package/src/focus.js +90 -90
  102. package/src/helpers/deepEqualArray.js +50 -50
  103. package/src/helpers/deepEqualArray.test.js +127 -127
  104. package/src/helpers/fetchJson.js +34 -34
  105. package/src/helpers/sequence.js +26 -26
  106. package/src/launch.js +123 -123
  107. package/src/lib/blitsfileconverter/blitsfileconverter.js +52 -52
  108. package/src/lib/codegenerator/generator.js +788 -788
  109. package/src/lib/codegenerator/generator.test.js +3801 -3801
  110. package/src/lib/colors/colors.js +92 -92
  111. package/src/lib/colors/colors.test.js +290 -290
  112. package/src/lib/colors/htmlColors.js +168 -168
  113. package/src/lib/componentId.js +49 -49
  114. package/src/lib/componentId.test.js +84 -84
  115. package/src/lib/eventListeners.js +123 -123
  116. package/src/lib/eventListeners.test.js +236 -236
  117. package/src/lib/hooks.js +59 -59
  118. package/src/lib/lifecycle.js +85 -85
  119. package/src/lib/log.js +117 -117
  120. package/src/lib/precompiler/precompiler.js +73 -73
  121. package/src/lib/reactivity/effect.js +93 -93
  122. package/src/lib/reactivity/effect.test.js +35 -35
  123. package/src/lib/reactivity/reactive.js +208 -208
  124. package/src/lib/reactivity/reactive.test.js +27 -27
  125. package/src/lib/reactivityguard/computedprops.js +218 -218
  126. package/src/lib/symbols.js +108 -108
  127. package/src/lib/templateparser/parser.js +386 -386
  128. package/src/lib/templateparser/parser.test.js +1411 -1411
  129. package/src/lib/utils.js +27 -27
  130. package/src/plugin.js +27 -27
  131. package/src/plugins/appstate.js +26 -26
  132. package/src/plugins/index.js +20 -20
  133. package/src/plugins/language.js +152 -152
  134. package/src/plugins/log.js +25 -25
  135. package/src/plugins/theme.js +94 -94
  136. package/src/router/router.js +514 -514
  137. package/src/router/router.test.js +473 -473
  138. package/src/router/transitions/fadeIn.js +27 -27
  139. package/src/router/transitions/fadeInOut.js +33 -33
  140. package/src/router/transitions/index.js +21 -21
  141. package/src/router/transitions/slideIn.js +28 -28
  142. package/src/router/transitions/slideInOut.js +33 -33
  143. package/src/settings.js +40 -40
  144. package/vite/blitsFileConverter.js +67 -67
  145. package/vite/index.js +28 -28
  146. package/vite/msdfGenerator.js +269 -269
  147. package/vite/preCompiler.js +42 -42
  148. package/vite/reactivityGuard.js +45 -45
  149. package/vscode/data/template-attributes.json +589 -589
@@ -1,176 +1,176 @@
1
- # Theme plugin
2
-
3
- Blits comes with a built-in, lightweight *Theme* plugin, that can be used to easily add theming capabilities to an App.
4
-
5
- The Blits Theme plugin provides the option to do real time theme switching, with inheritance from a base theme for missing values.
6
-
7
- ## Registering the plugin
8
-
9
- The Theme plugin is part of the core Blits package, but it's an optional plugin that needs to be registered in the App's `index.js`,
10
- as demonstrated in the example below.
11
-
12
- Make sure to place the `Blits.Plugin()` method _before_ calling the `Blits.Launch()` method
13
-
14
- ```js
15
- // index.js
16
-
17
- import Blits from '@lightningjs/blits'
18
- // import the theme plugin
19
- import { theme } from '@lightningjs/blits/plugins'
20
-
21
- import App from './App.js'
22
-
23
- // Use the Blits Theme plugin
24
- Blits.Plugin(theme, {
25
- // theme configuration object
26
- })
27
-
28
-
29
- Blits.Launch(App, 'app', {
30
- // launch settings
31
- })
32
- ```
33
-
34
- ### Configuration
35
-
36
- The Theme plugin requires configuration that specifies the theming definition(s).
37
-
38
- For simple use cases, with one single theme where you just want to abstract and centralize the styling information for an App,
39
- the configuration object can be a simple object that specifies a theme definition.
40
-
41
- A theme definition is a completely freeform object literal with key values pairs. It can be organized and constructed however makes most sense for the App. See below an example for inspiration:
42
-
43
- ```js
44
- Blits.Plugin(theme, {
45
- colors: {
46
- primary: '#16a34a',
47
- secondary: '#2563eb',
48
- highlight: '#ec4899'
49
- },
50
- radius: {
51
- small: 4,
52
- medium: 8,
53
- large: 12
54
- },
55
- fontSizes: {
56
- h1: 80,
57
- h2: 64,
58
- body: 42
59
- }
60
- })
61
- ```
62
-
63
- > While it's possible to create deeply nested structures in the theme definition, it is recommended to limit the level of nesting for performance reasons.
64
-
65
-
66
- When an App has more than 1 theme, the _advanced configuration_ setup can be used. This configuration object can contain the following 3 keys:
67
-
68
- - `themes` - an object with multiple theme definitions (required)
69
- - `base` - the name of the base theme in the `themes`-object, that other themes can inherit from (optional, defaults to `default`)
70
- - `current` - the name of current theme to be used (optional, defaults to `default`)
71
-
72
- ```js
73
- Blits.Plugin(theme, {
74
- themes: {
75
- // Base theme
76
- base: {
77
- colors: {
78
- primary: '#16a34a',
79
- secondary: '#2563eb',
80
- highlight: '#ec4899'
81
- },
82
- radius: {
83
- small: 4,
84
- medium: 8,
85
- large: 12
86
- },
87
- fontSizes: {
88
- h1: 80,
89
- h2: 64,
90
- body: 42
91
- }
92
- },
93
- // Dark mode theme
94
- dark: {
95
- colors: {
96
- primary: '#042f2e',
97
- secondary: '#082f49'
98
- }
99
- },
100
- // Theme with larger font sizes
101
- large: {
102
- fontSizes: {
103
- h1: 160,
104
- h2: 124,
105
- body: 84
106
- }
107
- }
108
- },
109
- base: 'base',
110
- current: 'large'
111
- })
112
- ```
113
-
114
- In the definition above we've specified 3 different themes: `base`, `dark` and `large`. The dark and large theme are not complete definitions,
115
- which means that they will inherit missing values from the base theme.
116
-
117
-
118
- ## Getting theme values
119
-
120
- With the configuration out of the way, let's look at how to use the specified theme values in an App.
121
-
122
- The Theme plugin will be available in every component under the `this.$theme`-namespace. It exposes a `get()` method than can be used to
123
- retrieve values from the currently active theme definition.
124
-
125
- The `this.$theme.get()`-method accepts a `key`-argument, using _dot-notation_ (i.e. `fonts.large.lineheight`) to reference items in the theme definition. An optional second argument can be provided as a fallback value, in case the key is missing in the theme (as well as in the base theme).
126
-
127
- Inside of the template, the `this.$theme.get()`-method can be referenced as `$$theme.get()`. The first `$`-sign is used
128
- to refer to the Component scope (as with any other state variable or computed property in Blits) and the second `$`-sign is the prefix of
129
- the Theme plugin itself.
130
-
131
- ```js
132
- Blits.Component('MyComponent', {
133
- template: `
134
- <Element>
135
- <Text content="Hello world"
136
- :color="$$theme.get('colors.primary', 'blue')"
137
- :size="$$theme.get('fontSizes.body')"
138
- />
139
- </Element>
140
- `,
141
- computed: {
142
- highlight() {
143
- return this.$theme.get('colors.highlight')
144
- }
145
- },
146
- })
147
- ```
148
-
149
- ## Changing themes
150
-
151
- In case you have specified multiple themes, using the advanced configuration, it is possible to do real-time theme switching.
152
-
153
- Besides the `get()` method, the Theme plugin also exposes a `set()`-method, to change the currently active theme. The `this.$theme.set()`-method accepts the name of the theme as its first argument.
154
-
155
- ```js
156
- Blits.Component('MyComponent', {
157
- template: `
158
- <Element>
159
- <Text content="Hello world"
160
- :color="$$theme.get('colors.primary', 'blue')"
161
- :size="$$theme.get('fontSizes.body')"
162
- />
163
- </Element>
164
- `,
165
- input: {
166
- up() {
167
- this.$theme.set('dark')
168
- },
169
- down() {
170
- this.$theme.set('default')
171
- }
172
- },
173
- })
174
- ```
175
-
176
- All attributes referencing the Theme plugin that are marked as _reactive_ (i.e. those prefixed with a `:`), will update instantly when changing the theme.
1
+ # Theme plugin
2
+
3
+ Blits comes with a built-in, lightweight *Theme* plugin, that can be used to easily add theming capabilities to an App.
4
+
5
+ The Blits Theme plugin provides the option to do real time theme switching, with inheritance from a base theme for missing values.
6
+
7
+ ## Registering the plugin
8
+
9
+ The Theme plugin is part of the core Blits package, but it's an optional plugin that needs to be registered in the App's `index.js`,
10
+ as demonstrated in the example below.
11
+
12
+ Make sure to place the `Blits.Plugin()` method _before_ calling the `Blits.Launch()` method
13
+
14
+ ```js
15
+ // index.js
16
+
17
+ import Blits from '@lightningjs/blits'
18
+ // import the theme plugin
19
+ import { theme } from '@lightningjs/blits/plugins'
20
+
21
+ import App from './App.js'
22
+
23
+ // Use the Blits Theme plugin
24
+ Blits.Plugin(theme, {
25
+ // theme configuration object
26
+ })
27
+
28
+
29
+ Blits.Launch(App, 'app', {
30
+ // launch settings
31
+ })
32
+ ```
33
+
34
+ ### Configuration
35
+
36
+ The Theme plugin requires configuration that specifies the theming definition(s).
37
+
38
+ For simple use cases, with one single theme where you just want to abstract and centralize the styling information for an App,
39
+ the configuration object can be a simple object that specifies a theme definition.
40
+
41
+ A theme definition is a completely freeform object literal with key values pairs. It can be organized and constructed however makes most sense for the App. See below an example for inspiration:
42
+
43
+ ```js
44
+ Blits.Plugin(theme, {
45
+ colors: {
46
+ primary: '#16a34a',
47
+ secondary: '#2563eb',
48
+ highlight: '#ec4899'
49
+ },
50
+ radius: {
51
+ small: 4,
52
+ medium: 8,
53
+ large: 12
54
+ },
55
+ fontSizes: {
56
+ h1: 80,
57
+ h2: 64,
58
+ body: 42
59
+ }
60
+ })
61
+ ```
62
+
63
+ > While it's possible to create deeply nested structures in the theme definition, it is recommended to limit the level of nesting for performance reasons.
64
+
65
+
66
+ When an App has more than 1 theme, the _advanced configuration_ setup can be used. This configuration object can contain the following 3 keys:
67
+
68
+ - `themes` - an object with multiple theme definitions (required)
69
+ - `base` - the name of the base theme in the `themes`-object, that other themes can inherit from (optional, defaults to `default`)
70
+ - `current` - the name of current theme to be used (optional, defaults to `default`)
71
+
72
+ ```js
73
+ Blits.Plugin(theme, {
74
+ themes: {
75
+ // Base theme
76
+ base: {
77
+ colors: {
78
+ primary: '#16a34a',
79
+ secondary: '#2563eb',
80
+ highlight: '#ec4899'
81
+ },
82
+ radius: {
83
+ small: 4,
84
+ medium: 8,
85
+ large: 12
86
+ },
87
+ fontSizes: {
88
+ h1: 80,
89
+ h2: 64,
90
+ body: 42
91
+ }
92
+ },
93
+ // Dark mode theme
94
+ dark: {
95
+ colors: {
96
+ primary: '#042f2e',
97
+ secondary: '#082f49'
98
+ }
99
+ },
100
+ // Theme with larger font sizes
101
+ large: {
102
+ fontSizes: {
103
+ h1: 160,
104
+ h2: 124,
105
+ body: 84
106
+ }
107
+ }
108
+ },
109
+ base: 'base',
110
+ current: 'large'
111
+ })
112
+ ```
113
+
114
+ In the definition above we've specified 3 different themes: `base`, `dark` and `large`. The dark and large theme are not complete definitions,
115
+ which means that they will inherit missing values from the base theme.
116
+
117
+
118
+ ## Getting theme values
119
+
120
+ With the configuration out of the way, let's look at how to use the specified theme values in an App.
121
+
122
+ The Theme plugin will be available in every component under the `this.$theme`-namespace. It exposes a `get()` method than can be used to
123
+ retrieve values from the currently active theme definition.
124
+
125
+ The `this.$theme.get()`-method accepts a `key`-argument, using _dot-notation_ (i.e. `fonts.large.lineheight`) to reference items in the theme definition. An optional second argument can be provided as a fallback value, in case the key is missing in the theme (as well as in the base theme).
126
+
127
+ Inside of the template, the `this.$theme.get()`-method can be referenced as `$$theme.get()`. The first `$`-sign is used
128
+ to refer to the Component scope (as with any other state variable or computed property in Blits) and the second `$`-sign is the prefix of
129
+ the Theme plugin itself.
130
+
131
+ ```js
132
+ Blits.Component('MyComponent', {
133
+ template: `
134
+ <Element>
135
+ <Text content="Hello world"
136
+ :color="$$theme.get('colors.primary', 'blue')"
137
+ :size="$$theme.get('fontSizes.body')"
138
+ />
139
+ </Element>
140
+ `,
141
+ computed: {
142
+ highlight() {
143
+ return this.$theme.get('colors.highlight')
144
+ }
145
+ },
146
+ })
147
+ ```
148
+
149
+ ## Changing themes
150
+
151
+ In case you have specified multiple themes, using the advanced configuration, it is possible to do real-time theme switching.
152
+
153
+ Besides the `get()` method, the Theme plugin also exposes a `set()`-method, to change the currently active theme. The `this.$theme.set()`-method accepts the name of the theme as its first argument.
154
+
155
+ ```js
156
+ Blits.Component('MyComponent', {
157
+ template: `
158
+ <Element>
159
+ <Text content="Hello world"
160
+ :color="$$theme.get('colors.primary', 'blue')"
161
+ :size="$$theme.get('fontSizes.body')"
162
+ />
163
+ </Element>
164
+ `,
165
+ input: {
166
+ up() {
167
+ this.$theme.set('dark')
168
+ },
169
+ down() {
170
+ this.$theme.set('default')
171
+ }
172
+ },
173
+ })
174
+ ```
175
+
176
+ All attributes referencing the Theme plugin that are marked as _reactive_ (i.e. those prefixed with a `:`), will update instantly when changing the theme.