@lightningjs/blits 1.30.1 → 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 -1012
  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,135 +1,135 @@
1
- # Displaying Text
2
-
3
- Besides displaying images, it is also very common to have _texts_ in an App.
4
-
5
- Blits comes with a built-in `<Text>`-tag for displaying and styling texts in a simple and intuitive way.
6
-
7
- ```xml
8
- <Text
9
- content="Hello world"
10
- font="ComicSans"
11
- size="$fontSize"
12
- :color="$changingColor"
13
- />
14
-
15
- ```
16
- You can use the Text-tag anywhere in your template, without the need to explicitly import and register it in your Component.
17
-
18
- ## Available attributes on the Text tag
19
-
20
- The Text-tag accepts the following attributes:
21
-
22
- - `content` - the text to be displayed. Can be a hardcoded text, a dynamic value, or a reactive value
23
- - `font` - the font family, defaults to `sans-serif`, or the default font specified in the launch settings
24
- - `size` - the font size, defaults to `32`
25
- - `color` - the color to display for the text, defaults to `white` and can be any of the supported Blits color formats (HTML, hexadecimal or rgb(a))
26
- - `letterspacing` - letterspacing in pixels, defaults to `0`
27
- - `align` - the alignment of the text, can be `left`, `right`, or `center`, defaults to `left`. Centering text and aligning text to the right requires the `maxwidth` attribute to be set as well.
28
- - `maxwidth` - the max length of a line of text in pixels, words surpassing this length will be broken and wrapped onto the next line. This attribute is required when aligning center or right. Previously this attribute was `wordwrap`, which has now been deprecated in favour of `maxwidth`.
29
- - `maxlines` - maximum number of lines that will be displayed
30
- - `maxheight` - maximum height of a text block, lines that don't fit within this height will not be displayed
31
- - `lineheight` - the spacing between lines in pixels
32
- - `contain` - the strategy for containing text within the bounds, can be `none` (default), `width`, or `both`. In most cases, the value of this attribute will automatically be set by Blits, based on the other specified attributes
33
- - `textoverflow` - the suffix to be added when text is cropped due to bounds limits, defaults to `...` (see more details [here](#text-overflow))
34
-
35
- ## Text dimensions
36
-
37
- When you want to center your Text element, or properly position other Elements around your text, it is useful to know the exact dimensions of your text.
38
-
39
- Similar to the Image element (i.e. an Element with a `src`), Text elements also accept the `@loaded` attribute. This event is called, as soon as the text is rendered, and passes in the dimensions of the generated text texture.
40
-
41
- The example below shows how to use the `@loaded`-attribute to position an Element as an underline, under a piece of text.
42
-
43
- ```js
44
- export default Blits.Component('MyComponent', {
45
- template: `
46
- <Element>
47
- <Text :content="$myText" @loaded="$textLoaded" />
48
- <!-- gray underline -->
49
- <Element :w="$w" h="2" y="$y" color="#333" />
50
- </Element>
51
- `,
52
- props: ['myText'],
53
- state() {
54
- return {
55
- w: 0,
56
- y: 0,
57
- }
58
- },
59
- methods: {
60
- textLoaded(dimensions) {
61
- console.log(`The text has a width of ${dimensions.w} and a height of ${dimensions.h}`)
62
- // set the underline width to the exact width of the text
63
- this.w = dimensions.w
64
- // position the underline 8px below the text
65
- this.y = dimensions.h + 8
66
- }
67
- }
68
- ```
69
-
70
- ## Text overflow
71
-
72
- The text renderer offers the ability to display a _text overflow suffix_ when the text exceeds the bounds of the Text component.
73
-
74
- This functionality is automatically enabled, but requires that both a _horizontal_ boundary (using `maxwidth`) and a _vertical_ boundary (using `maxlines` or `maxheight`) are specified on the Text component.
75
-
76
- The `textoverflow`-attribute itself is not required, unless you want to use another suffix than the standard `...`. If you want _no suffix_ (and just a hard cutoff), the`textoverflow`-attribute should be set to `false` or an _empty string_.
77
-
78
- ## SDF and Canvas2d
79
-
80
- Compared to Lightning 2, texts have improved a lot in Lightning 3, thanks to the SDF (Signed Distance Field) Text renderer.
81
-
82
- With the SDF text renderer, texts appear a lot _sharper_ on screen. The SDF technique also allows for better scaling of texts, without them becoming blurry - a well-known painpoint in Lightning 2 Apps.
83
-
84
- In general, it's recommended to use the SDF text renderer, but Lightning 3 still has a Canvas2d text renderer as a backup, and you can use both text renderers within the same App.
85
-
86
- ## Using custom fonts
87
-
88
- The `font`-attribute on the `<Text>`-tag is used to define which font family should be used for a certain piece of text.
89
-
90
- When you create a new Blits app using the available [getting started boilerplate](../getting_started/getting_started.md) you'll be able to use the `lato` (Lato regular) and `raleway` (Raleway ExtraBold) fonts out of the box.
91
-
92
- But of course, you can also use any custom font that you want, to give your App the unique look and feel that fits with the design.
93
-
94
- Adding a custom font to a Blits App is quite straightforward. First, you'll need to place a `.ttf`, `.woff` or `.otf` version of your font in the `public` folder (i.e. `public/fonts/comic-sans.ttf`).
95
-
96
- Then you'll need to register the custom font in the Launch settings of your app (in `src/index.js`). The `fonts`-key in the settings is an `Array` that specifies all available fonts in your App.
97
-
98
- Just add a new font object with the necessary details:
99
-
100
- ```js
101
- fonts: [
102
- // ...
103
- {
104
- family: 'ComicSans', // the font name used in your App
105
- type: 'msdf', // type of text renderer to use (msdf or web)
106
- file: 'fonts/Comic-Sans.ttf', // location of the ttf file
107
- },
108
- // ..
109
- ],
110
- ```
111
-
112
- From this moment on you'll be able to use the font `ComicSans` anywhere in your App:
113
-
114
- ```xml
115
- <Text font="ComicSans" content="I'm Comic Sans font!" />
116
- ```
117
-
118
- ### Custom characters
119
-
120
- For MSDF font, a font atlas is created. By default this atlas includes all printable main ASCII characters. If you know beforehand that you won't need certain characters, it would be more optimal to generate only those characters that are actually needed.
121
-
122
- Similarly, if you need characters outside of the default set, like accents or other special characters, then these will need to be included in the generated font atlas.
123
-
124
- In order to control which characters are generated for a specific font, you can add a _font config file_ per font inside the `assets/fonts` folder. Its name should match the name of the font file, like so: `myfont.config.json`.
125
-
126
- The config file should look something like this:
127
-
128
- ```json
129
- {
130
- "charset": "0123456789éåaü"
131
- }
132
- ```
133
- With the configuration above, only numbers and the specified letters with accents will be generated (i.e. the default character set is overwritten).
134
-
135
- > Please note that only special characters and accents that are part of the original font can be added to the generated font atlas. Other characters will show up as a `?`.
1
+ # Displaying Text
2
+
3
+ Besides displaying images, it is also very common to have _texts_ in an App.
4
+
5
+ Blits comes with a built-in `<Text>`-tag for displaying and styling texts in a simple and intuitive way.
6
+
7
+ ```xml
8
+ <Text
9
+ content="Hello world"
10
+ font="ComicSans"
11
+ size="$fontSize"
12
+ :color="$changingColor"
13
+ />
14
+
15
+ ```
16
+ You can use the Text-tag anywhere in your template, without the need to explicitly import and register it in your Component.
17
+
18
+ ## Available attributes on the Text tag
19
+
20
+ The Text-tag accepts the following attributes:
21
+
22
+ - `content` - the text to be displayed. Can be a hardcoded text, a dynamic value, or a reactive value
23
+ - `font` - the font family, defaults to `sans-serif`, or the default font specified in the launch settings
24
+ - `size` - the font size, defaults to `32`
25
+ - `color` - the color to display for the text, defaults to `white` and can be any of the supported Blits color formats (HTML, hexadecimal or rgb(a))
26
+ - `letterspacing` - letterspacing in pixels, defaults to `0`
27
+ - `align` - the alignment of the text, can be `left`, `right`, or `center`, defaults to `left`. Centering text and aligning text to the right requires the `maxwidth` attribute to be set as well.
28
+ - `maxwidth` - the max length of a line of text in pixels, words surpassing this length will be broken and wrapped onto the next line. This attribute is required when aligning center or right. Previously this attribute was `wordwrap`, which has now been deprecated in favour of `maxwidth`.
29
+ - `maxlines` - maximum number of lines that will be displayed
30
+ - `maxheight` - maximum height of a text block, lines that don't fit within this height will not be displayed
31
+ - `lineheight` - the spacing between lines in pixels
32
+ - `contain` - the strategy for containing text within the bounds, can be `none` (default), `width`, or `both`. In most cases, the value of this attribute will automatically be set by Blits, based on the other specified attributes
33
+ - `textoverflow` - the suffix to be added when text is cropped due to bounds limits, defaults to `...` (see more details [here](#text-overflow))
34
+
35
+ ## Text dimensions
36
+
37
+ When you want to center your Text element, or properly position other Elements around your text, it is useful to know the exact dimensions of your text.
38
+
39
+ Similar to the Image element (i.e. an Element with a `src`), Text elements also accept the `@loaded` attribute. This event is called, as soon as the text is rendered, and passes in the dimensions of the generated text texture.
40
+
41
+ The example below shows how to use the `@loaded`-attribute to position an Element as an underline, under a piece of text.
42
+
43
+ ```js
44
+ export default Blits.Component('MyComponent', {
45
+ template: `
46
+ <Element>
47
+ <Text :content="$myText" @loaded="$textLoaded" />
48
+ <!-- gray underline -->
49
+ <Element :w="$w" h="2" y="$y" color="#333" />
50
+ </Element>
51
+ `,
52
+ props: ['myText'],
53
+ state() {
54
+ return {
55
+ w: 0,
56
+ y: 0,
57
+ }
58
+ },
59
+ methods: {
60
+ textLoaded(dimensions) {
61
+ console.log(`The text has a width of ${dimensions.w} and a height of ${dimensions.h}`)
62
+ // set the underline width to the exact width of the text
63
+ this.w = dimensions.w
64
+ // position the underline 8px below the text
65
+ this.y = dimensions.h + 8
66
+ }
67
+ }
68
+ ```
69
+
70
+ ## Text overflow
71
+
72
+ The text renderer offers the ability to display a _text overflow suffix_ when the text exceeds the bounds of the Text component.
73
+
74
+ This functionality is automatically enabled, but requires that both a _horizontal_ boundary (using `maxwidth`) and a _vertical_ boundary (using `maxlines` or `maxheight`) are specified on the Text component.
75
+
76
+ The `textoverflow`-attribute itself is not required, unless you want to use another suffix than the standard `...`. If you want _no suffix_ (and just a hard cutoff), the`textoverflow`-attribute should be set to `false` or an _empty string_.
77
+
78
+ ## SDF and Canvas2d
79
+
80
+ Compared to Lightning 2, texts have improved a lot in Lightning 3, thanks to the SDF (Signed Distance Field) Text renderer.
81
+
82
+ With the SDF text renderer, texts appear a lot _sharper_ on screen. The SDF technique also allows for better scaling of texts, without them becoming blurry - a well-known painpoint in Lightning 2 Apps.
83
+
84
+ In general, it's recommended to use the SDF text renderer, but Lightning 3 still has a Canvas2d text renderer as a backup, and you can use both text renderers within the same App.
85
+
86
+ ## Using custom fonts
87
+
88
+ The `font`-attribute on the `<Text>`-tag is used to define which font family should be used for a certain piece of text.
89
+
90
+ When you create a new Blits app using the available [getting started boilerplate](../getting_started/getting_started.md) you'll be able to use the `lato` (Lato regular) and `raleway` (Raleway ExtraBold) fonts out of the box.
91
+
92
+ But of course, you can also use any custom font that you want, to give your App the unique look and feel that fits with the design.
93
+
94
+ Adding a custom font to a Blits App is quite straightforward. First, you'll need to place a `.ttf`, `.woff` or `.otf` version of your font in the `public` folder (i.e. `public/fonts/comic-sans.ttf`).
95
+
96
+ Then you'll need to register the custom font in the Launch settings of your app (in `src/index.js`). The `fonts`-key in the settings is an `Array` that specifies all available fonts in your App.
97
+
98
+ Just add a new font object with the necessary details:
99
+
100
+ ```js
101
+ fonts: [
102
+ // ...
103
+ {
104
+ family: 'ComicSans', // the font name used in your App
105
+ type: 'msdf', // type of text renderer to use (msdf or web)
106
+ file: 'fonts/Comic-Sans.ttf', // location of the ttf file
107
+ },
108
+ // ..
109
+ ],
110
+ ```
111
+
112
+ From this moment on you'll be able to use the font `ComicSans` anywhere in your App:
113
+
114
+ ```xml
115
+ <Text font="ComicSans" content="I'm Comic Sans font!" />
116
+ ```
117
+
118
+ ### Custom characters
119
+
120
+ For MSDF font, a font atlas is created. By default this atlas includes all printable main ASCII characters. If you know beforehand that you won't need certain characters, it would be more optimal to generate only those characters that are actually needed.
121
+
122
+ Similarly, if you need characters outside of the default set, like accents or other special characters, then these will need to be included in the generated font atlas.
123
+
124
+ In order to control which characters are generated for a specific font, you can add a _font config file_ per font inside the `assets/fonts` folder. Its name should match the name of the font file, like so: `myfont.config.json`.
125
+
126
+ The config file should look something like this:
127
+
128
+ ```json
129
+ {
130
+ "charset": "0123456789éåaü"
131
+ }
132
+ ```
133
+ With the configuration above, only numbers and the specified letters with accents will be generated (i.e. the default character set is overwritten).
134
+
135
+ > Please note that only special characters and accents that are part of the original font can be added to the generated font atlas. Other characters will show up as a `?`.