@lightningtv/solid 3.0.0-2 → 3.0.0-21

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 (206) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +6 -0
  3. package/dist/src/activeElement.d.ts +1 -1
  4. package/dist/src/core/animation.d.ts +35 -0
  5. package/dist/src/core/animation.js +120 -0
  6. package/dist/src/core/animation.js.map +1 -0
  7. package/dist/src/core/config.d.ts +47 -0
  8. package/dist/src/core/config.js +23 -0
  9. package/dist/src/core/config.js.map +1 -0
  10. package/dist/src/core/domRenderer.d.ts +117 -0
  11. package/dist/src/core/domRenderer.js +1160 -0
  12. package/dist/src/core/domRenderer.js.map +1 -0
  13. package/dist/src/core/elementNode.d.ts +209 -0
  14. package/dist/src/core/elementNode.js +829 -0
  15. package/dist/src/core/elementNode.js.map +1 -0
  16. package/dist/src/core/flex.d.ts +2 -0
  17. package/dist/src/core/flex.js +243 -0
  18. package/dist/src/core/flex.js.map +1 -0
  19. package/dist/src/core/focusKeyTypes.d.ts +42 -0
  20. package/dist/src/core/focusKeyTypes.js +2 -0
  21. package/dist/src/core/focusKeyTypes.js.map +1 -0
  22. package/dist/src/core/focusManager.d.ts +13 -0
  23. package/dist/src/core/focusManager.js +269 -0
  24. package/dist/src/core/focusManager.js.map +1 -0
  25. package/dist/src/core/index.d.ts +12 -0
  26. package/dist/src/core/index.js +12 -0
  27. package/dist/src/core/index.js.map +1 -0
  28. package/dist/src/core/intrinsicTypes.d.ts +90 -0
  29. package/dist/src/core/intrinsicTypes.js +2 -0
  30. package/dist/src/core/intrinsicTypes.js.map +1 -0
  31. package/dist/src/core/lightningInit.d.ts +89 -0
  32. package/dist/src/core/lightningInit.js +26 -0
  33. package/dist/src/core/lightningInit.js.map +1 -0
  34. package/dist/src/core/nodeTypes.d.ts +6 -0
  35. package/dist/src/core/nodeTypes.js +6 -0
  36. package/dist/src/core/nodeTypes.js.map +1 -0
  37. package/dist/src/core/shaders.d.ts +51 -0
  38. package/dist/src/core/shaders.js +446 -0
  39. package/dist/src/core/shaders.js.map +1 -0
  40. package/dist/src/core/states.d.ts +12 -0
  41. package/dist/src/core/states.js +84 -0
  42. package/dist/src/core/states.js.map +1 -0
  43. package/dist/src/core/timings.d.ts +36 -0
  44. package/dist/src/core/timings.js +199 -0
  45. package/dist/src/core/timings.js.map +1 -0
  46. package/dist/src/core/utils.d.ts +39 -0
  47. package/dist/src/core/utils.js +164 -0
  48. package/dist/src/core/utils.js.map +1 -0
  49. package/dist/src/devtools/index.d.ts +1 -1
  50. package/dist/src/devtools/index.js +1 -1
  51. package/dist/src/devtools/index.js.map +1 -1
  52. package/dist/src/index.d.ts +3 -3
  53. package/dist/src/index.js +1 -1
  54. package/dist/src/index.js.map +1 -1
  55. package/dist/src/jsx-runtime.d.ts +1 -3
  56. package/dist/src/primitives/Column.jsx +9 -10
  57. package/dist/src/primitives/Column.jsx.map +1 -1
  58. package/dist/src/primitives/FPSCounter.jsx +14 -1
  59. package/dist/src/primitives/FPSCounter.jsx.map +1 -1
  60. package/dist/src/primitives/Grid.d.ts +15 -6
  61. package/dist/src/primitives/Grid.jsx +35 -22
  62. package/dist/src/primitives/Grid.jsx.map +1 -1
  63. package/dist/src/primitives/Image.d.ts +8 -0
  64. package/dist/src/primitives/Image.jsx +24 -0
  65. package/dist/src/primitives/Image.jsx.map +1 -0
  66. package/dist/src/primitives/KeepAlive.d.ts +30 -0
  67. package/dist/src/primitives/KeepAlive.jsx +77 -0
  68. package/dist/src/primitives/KeepAlive.jsx.map +1 -0
  69. package/dist/src/primitives/Lazy.d.ts +8 -7
  70. package/dist/src/primitives/Lazy.jsx +52 -23
  71. package/dist/src/primitives/Lazy.jsx.map +1 -1
  72. package/dist/src/primitives/Marquee.d.ts +64 -0
  73. package/dist/src/primitives/Marquee.jsx +86 -0
  74. package/dist/src/primitives/Marquee.jsx.map +1 -0
  75. package/dist/src/primitives/Preserve.d.ts +4 -0
  76. package/dist/src/primitives/Preserve.jsx +11 -0
  77. package/dist/src/primitives/Preserve.jsx.map +1 -0
  78. package/dist/src/primitives/Row.jsx +9 -10
  79. package/dist/src/primitives/Row.jsx.map +1 -1
  80. package/dist/src/primitives/Suspense.d.ts +22 -0
  81. package/dist/src/primitives/Suspense.jsx +33 -0
  82. package/dist/src/primitives/Suspense.jsx.map +1 -0
  83. package/dist/src/primitives/Virtual.d.ts +18 -0
  84. package/dist/src/primitives/Virtual.jsx +434 -0
  85. package/dist/src/primitives/Virtual.jsx.map +1 -0
  86. package/dist/src/primitives/VirtualGrid.d.ts +13 -0
  87. package/dist/src/primitives/VirtualGrid.jsx +160 -0
  88. package/dist/src/primitives/VirtualGrid.jsx.map +1 -0
  89. package/dist/src/primitives/VirtualList.d.ts +11 -0
  90. package/dist/src/primitives/VirtualList.jsx +96 -0
  91. package/dist/src/primitives/VirtualList.jsx.map +1 -0
  92. package/dist/src/primitives/VirtualRow.d.ts +13 -0
  93. package/dist/src/primitives/VirtualRow.jsx +97 -0
  94. package/dist/src/primitives/VirtualRow.jsx.map +1 -0
  95. package/dist/src/primitives/Visible.d.ts +0 -1
  96. package/dist/src/primitives/Visible.jsx +1 -1
  97. package/dist/src/primitives/Visible.jsx.map +1 -1
  98. package/dist/src/primitives/announcer/announcer.d.ts +2 -0
  99. package/dist/src/primitives/announcer/announcer.js +7 -5
  100. package/dist/src/primitives/announcer/announcer.js.map +1 -1
  101. package/dist/src/primitives/announcer/index.d.ts +5 -1
  102. package/dist/src/primitives/announcer/index.js +8 -2
  103. package/dist/src/primitives/announcer/index.js.map +1 -1
  104. package/dist/src/primitives/announcer/speech.d.ts +2 -2
  105. package/dist/src/primitives/announcer/speech.js +157 -28
  106. package/dist/src/primitives/announcer/speech.js.map +1 -1
  107. package/dist/src/primitives/createFocusStack.d.ts +4 -4
  108. package/dist/src/primitives/createFocusStack.jsx +15 -6
  109. package/dist/src/primitives/createFocusStack.jsx.map +1 -1
  110. package/dist/src/primitives/createTag.d.ts +8 -0
  111. package/dist/src/primitives/createTag.jsx +20 -0
  112. package/dist/src/primitives/createTag.jsx.map +1 -0
  113. package/dist/src/primitives/index.d.ts +14 -4
  114. package/dist/src/primitives/index.js +13 -3
  115. package/dist/src/primitives/index.js.map +1 -1
  116. package/dist/src/primitives/types.d.ts +5 -2
  117. package/dist/src/primitives/useFocusManager.d.ts +2 -2
  118. package/dist/src/primitives/useFocusManager.js +2 -2
  119. package/dist/src/primitives/useFocusManager.js.map +1 -1
  120. package/dist/src/primitives/useHold.d.ts +27 -0
  121. package/dist/src/primitives/useHold.js +54 -0
  122. package/dist/src/primitives/useHold.js.map +1 -0
  123. package/dist/src/primitives/useMouse.d.ts +18 -2
  124. package/dist/src/primitives/useMouse.js +171 -47
  125. package/dist/src/primitives/useMouse.js.map +1 -1
  126. package/dist/src/primitives/utils/chainFunctions.d.ts +30 -4
  127. package/dist/src/primitives/utils/chainFunctions.js +14 -3
  128. package/dist/src/primitives/utils/chainFunctions.js.map +1 -1
  129. package/dist/src/primitives/utils/createBlurredImage.d.ts +56 -0
  130. package/dist/src/primitives/utils/createBlurredImage.js +223 -0
  131. package/dist/src/primitives/utils/createBlurredImage.js.map +1 -0
  132. package/dist/src/primitives/utils/createSpriteMap.d.ts +2 -2
  133. package/dist/src/primitives/utils/createSpriteMap.js +1 -1
  134. package/dist/src/primitives/utils/createSpriteMap.js.map +1 -1
  135. package/dist/src/primitives/utils/handleNavigation.d.ts +79 -5
  136. package/dist/src/primitives/utils/handleNavigation.js +242 -69
  137. package/dist/src/primitives/utils/handleNavigation.js.map +1 -1
  138. package/dist/src/primitives/utils/withScrolling.d.ts +14 -2
  139. package/dist/src/primitives/utils/withScrolling.js +66 -7
  140. package/dist/src/primitives/utils/withScrolling.js.map +1 -1
  141. package/dist/src/render.d.ts +8 -7
  142. package/dist/src/render.js +5 -1
  143. package/dist/src/render.js.map +1 -1
  144. package/dist/src/solidOpts.d.ts +1 -7
  145. package/dist/src/solidOpts.js +32 -16
  146. package/dist/src/solidOpts.js.map +1 -1
  147. package/dist/src/types.d.ts +1 -13
  148. package/dist/src/universal.d.ts +25 -0
  149. package/dist/src/universal.js +232 -0
  150. package/dist/src/universal.js.map +1 -0
  151. package/dist/src/utils.d.ts +3 -1
  152. package/dist/src/utils.js +9 -1
  153. package/dist/src/utils.js.map +1 -1
  154. package/dist/tsconfig.tsbuildinfo +1 -1
  155. package/jsx-runtime.d.ts +2 -4
  156. package/package.json +17 -15
  157. package/src/activeElement.ts +1 -1
  158. package/src/core/animation.ts +183 -0
  159. package/src/core/config.ts +77 -0
  160. package/src/core/domRenderer.ts +1308 -0
  161. package/src/core/elementNode.ts +1198 -0
  162. package/src/core/flex.ts +284 -0
  163. package/src/core/focusKeyTypes.ts +87 -0
  164. package/src/core/focusManager.ts +359 -0
  165. package/src/core/index.ts +13 -0
  166. package/src/core/intrinsicTypes.ts +199 -0
  167. package/src/core/lightningInit.ts +147 -0
  168. package/src/core/nodeTypes.ts +6 -0
  169. package/src/core/shaders.ts +567 -0
  170. package/src/core/states.ts +91 -0
  171. package/src/core/timings.ts +261 -0
  172. package/src/core/utils.ts +222 -0
  173. package/src/devtools/index.ts +1 -1
  174. package/src/index.ts +3 -3
  175. package/src/primitives/Column.tsx +10 -12
  176. package/src/primitives/FPSCounter.tsx +15 -1
  177. package/src/primitives/Grid.tsx +57 -33
  178. package/src/primitives/Image.tsx +36 -0
  179. package/src/primitives/KeepAlive.tsx +124 -0
  180. package/src/primitives/Lazy.tsx +66 -37
  181. package/src/primitives/Marquee.tsx +149 -0
  182. package/src/primitives/Preserve.tsx +18 -0
  183. package/src/primitives/Row.tsx +13 -14
  184. package/src/primitives/Suspense.tsx +39 -0
  185. package/src/primitives/Virtual.tsx +478 -0
  186. package/src/primitives/VirtualGrid.tsx +220 -0
  187. package/src/primitives/Visible.tsx +1 -2
  188. package/src/primitives/announcer/announcer.ts +16 -10
  189. package/src/primitives/announcer/index.ts +12 -2
  190. package/src/primitives/announcer/speech.ts +188 -27
  191. package/src/primitives/createFocusStack.tsx +18 -7
  192. package/src/primitives/createTag.tsx +31 -0
  193. package/src/primitives/index.ts +18 -4
  194. package/src/primitives/types.ts +12 -2
  195. package/src/primitives/useFocusManager.ts +3 -3
  196. package/src/primitives/useHold.ts +69 -0
  197. package/src/primitives/useMouse.ts +306 -67
  198. package/src/primitives/utils/chainFunctions.ts +40 -9
  199. package/src/primitives/utils/createBlurredImage.ts +366 -0
  200. package/src/primitives/utils/createSpriteMap.ts +6 -4
  201. package/src/primitives/utils/handleNavigation.ts +300 -84
  202. package/src/primitives/utils/withScrolling.ts +91 -18
  203. package/src/render.ts +10 -8
  204. package/src/solidOpts.ts +31 -24
  205. package/src/types.ts +1 -15
  206. package/src/utils.ts +11 -1
@@ -0,0 +1,183 @@
1
+ // import { getTimingFunction, mergeColorProgress } from '@lightningjs/renderer/utils';
2
+ import { getTimingFunction, mergeColorProgress } from './timings.js';
3
+ import {
4
+ type ElementNode,
5
+ LightningRendererNumberProps,
6
+ } from './elementNode.js';
7
+ import { type IRendererStage } from './lightningInit.js';
8
+ import { TimingFunction } from '@lightningjs/renderer';
9
+ import { isFunc } from './utils.js';
10
+
11
+ /**
12
+ * Simplified Animation Settings
13
+ */
14
+ export interface SimpleAnimationSettings {
15
+ duration?: number;
16
+ delay?: number;
17
+ easing?: string | TimingFunction;
18
+ }
19
+
20
+ /**
21
+ * Properties of a Node used by the SimpleAnimation
22
+ * (Excludes shaderProps)
23
+ */
24
+ export type SimpleAnimationProps =
25
+ (typeof LightningRendererNumberProps)[number];
26
+
27
+ /**
28
+ * Configuration for a single node within a SimpleAnimation
29
+ */
30
+ interface SimpleAnimationNodeConfig {
31
+ node: ElementNode;
32
+ duration: number;
33
+ delay: number;
34
+ easing: string | TimingFunction;
35
+ progress: number;
36
+ delayFor: number;
37
+ timingFunction: (t: number) => number | undefined;
38
+ propName: SimpleAnimationProps;
39
+ startValue: number;
40
+ targetValue: number;
41
+ }
42
+
43
+ export class SimpleAnimation {
44
+ private nodeConfigs: SimpleAnimationNodeConfig[] = [];
45
+ private isRegistered = false;
46
+ private stage: IRendererStage | undefined;
47
+
48
+ register(stage: IRendererStage) {
49
+ if (this.isRegistered) {
50
+ return;
51
+ }
52
+ this.isRegistered = true;
53
+ this.stage = stage;
54
+ stage.animationManager.registerAnimation(this);
55
+ }
56
+
57
+ /**
58
+ * Adds a node and its animation properties to this animation instance.
59
+ * The animation's start values for the specified properties are captured
60
+ * from the node's current state when this method is called.
61
+ *
62
+ * @param node - The CoreNode to animate.
63
+ * @param props - The properties to animate and their target values. Only number properties are supported.
64
+ * @param settings - Animation settings for this specific node animation.
65
+ */
66
+ add(
67
+ node: ElementNode,
68
+ key: SimpleAnimationProps,
69
+ value: number,
70
+ settings: SimpleAnimationSettings,
71
+ ): void {
72
+ const existingConfig = this.nodeConfigs.find(
73
+ (config) => config.node === node && config.propName === key,
74
+ );
75
+
76
+ const duration = settings.duration ?? 0;
77
+ const delay = settings.delay ?? 0;
78
+ const easing = settings.easing || 'linear';
79
+ const timingFunction = isFunc(easing) ? easing : getTimingFunction(easing);
80
+ const targetValue = value;
81
+ const startValue = node[key] as number;
82
+
83
+ if (existingConfig) {
84
+ existingConfig.duration = duration;
85
+ existingConfig.delay = delay;
86
+ existingConfig.easing = easing;
87
+ existingConfig.timingFunction = timingFunction;
88
+ existingConfig.targetValue = targetValue;
89
+ existingConfig.startValue = startValue;
90
+ existingConfig.progress = 0;
91
+ existingConfig.delayFor = delay;
92
+ } else {
93
+ this.nodeConfigs.push({
94
+ node,
95
+ duration,
96
+ delay,
97
+ easing,
98
+ progress: 0,
99
+ delayFor: delay,
100
+ timingFunction,
101
+ propName: key,
102
+ startValue,
103
+ targetValue,
104
+ });
105
+ }
106
+ }
107
+
108
+ update(dt: number) {
109
+ // Iterate backward to safely remove finished animations
110
+ for (let i = this.nodeConfigs.length - 1; i >= 0; i--) {
111
+ const nodeConfig = this.nodeConfigs[i] as SimpleAnimationNodeConfig;
112
+ const {
113
+ node,
114
+ duration,
115
+ timingFunction,
116
+ propName,
117
+ startValue,
118
+ targetValue,
119
+ } = nodeConfig;
120
+ let remainingDt = dt;
121
+
122
+ // 1. Handle Delay
123
+ if (nodeConfig.delayFor > 0) {
124
+ nodeConfig.delayFor -= remainingDt;
125
+ if (nodeConfig.delayFor >= 0) {
126
+ // Still in delay phase for this node, skip applying values this frame
127
+ continue;
128
+ } else {
129
+ // Delay finished this frame, use the remaining time for animation
130
+ remainingDt = -nodeConfig.delayFor;
131
+ nodeConfig.delayFor = 0;
132
+ }
133
+ }
134
+
135
+ // 2. Update Progress (directly on nodeConfig.progress)
136
+ if (duration > 0) {
137
+ nodeConfig.progress += remainingDt / duration;
138
+ // Clamp progress between 0 and 1
139
+ nodeConfig.progress = Math.max(0, Math.min(1, nodeConfig.progress));
140
+ } else if (duration === 0 && nodeConfig.delayFor <= 0) {
141
+ // Duration is 0 and delay is finished or was 0. Animation completes instantly.
142
+ nodeConfig.progress = 1;
143
+ }
144
+
145
+ // 3. Calculate Eased Progress
146
+ const easedProgress =
147
+ timingFunction(nodeConfig.progress) || nodeConfig.progress;
148
+
149
+ // 4. Apply Animated Values to the Node
150
+ let interpolatedValue: number;
151
+ if (nodeConfig.progress === 1) {
152
+ interpolatedValue = targetValue;
153
+ } else {
154
+ if (propName.includes('color')) {
155
+ // Handle color interpolation
156
+ interpolatedValue = mergeColorProgress(
157
+ startValue,
158
+ targetValue,
159
+ easedProgress,
160
+ );
161
+ } else {
162
+ // Handle linear interpolation for other number properties
163
+ interpolatedValue =
164
+ startValue + (targetValue - startValue) * easedProgress;
165
+ }
166
+ }
167
+ // @typescript-eslint/no-explicit-any
168
+ (node.lng as any)[propName] = interpolatedValue; // Cast to any because the properties on CoreNode might have broader types.
169
+
170
+ // 5. Remove Node if Progress is 1
171
+ if (nodeConfig.progress === 1) {
172
+ this.nodeConfigs.splice(i, 1);
173
+ }
174
+ if (this.nodeConfigs.length === 0) {
175
+ this.stage?.animationManager.unregisterAnimation(this);
176
+ this.isRegistered = false;
177
+ }
178
+ }
179
+ }
180
+ }
181
+
182
+ export const simpleAnimation = new SimpleAnimation();
183
+ export default simpleAnimation;
@@ -0,0 +1,77 @@
1
+ import type { RendererMainSettings } from '@lightningjs/renderer';
2
+ import type {
3
+ TextProps,
4
+ AnimationSettings,
5
+ DollarString,
6
+ } from './intrinsicTypes.js';
7
+ import { type ElementNode } from './elementNode.js';
8
+
9
+ /**
10
+ STATIC LIGHTNING CONFIGURATION \
11
+ Replace the values below with in your build system, \
12
+ or set them in the global scope before importing lightning-core.
13
+ */
14
+ declare global {
15
+ /** Whether the DOM renderer should be used instead of `@lightningjs/renderer` */
16
+ var LIGHTNING_DOM_RENDERING: boolean | undefined;
17
+ /** Whether element shaders should be disabled */
18
+ var LIGHTNING_DISABLE_SHADERS: boolean | undefined;
19
+
20
+ /** Could be set by vite or other bundler */
21
+ interface ImportMetaEnv {
22
+ DEV?: unknown;
23
+ }
24
+ interface ImportMeta {
25
+ env?: ImportMetaEnv;
26
+ }
27
+ }
28
+
29
+ export const isDev = !!(import.meta.env && import.meta.env.DEV);
30
+
31
+ /** Whether the DOM renderer is used instead of `@lightningjs/renderer` */
32
+ export const DOM_RENDERING =
33
+ typeof LIGHTNING_DOM_RENDERING === 'boolean' && LIGHTNING_DOM_RENDERING;
34
+
35
+ /** Whether element shaders are enabled */
36
+ export const SHADERS_ENABLED = !(
37
+ typeof LIGHTNING_DISABLE_SHADERS === 'boolean' && LIGHTNING_DISABLE_SHADERS
38
+ );
39
+
40
+ /**
41
+ RUNTIME LIGHTNING CONFIGURATION \
42
+ This configuration can be set at runtime, but it is recommended to set it
43
+ before running any Lightning modules to ensure consistent behavior across the application.
44
+ */
45
+ export interface Config {
46
+ debug: boolean;
47
+ focusDebug: boolean;
48
+ keyDebug: boolean;
49
+ simpleAnimationsEnabled?: boolean;
50
+ animationSettings?: AnimationSettings;
51
+ animationsEnabled: boolean;
52
+ fontSettings: Partial<TextProps>;
53
+ rendererOptions?: Partial<RendererMainSettings>;
54
+ setActiveElement: (elm: ElementNode) => void;
55
+ focusStateKey: DollarString;
56
+ lockStyles?: boolean;
57
+ throttleInput?: number;
58
+ taskDelay?: number;
59
+ }
60
+
61
+ export const Config: Config = {
62
+ debug: false,
63
+ focusDebug: false,
64
+ keyDebug: false,
65
+ animationsEnabled: true,
66
+ animationSettings: {
67
+ duration: 250,
68
+ easing: 'ease-in-out',
69
+ },
70
+ fontSettings: {
71
+ fontFamily: 'Ubuntu',
72
+ fontSize: 100,
73
+ },
74
+ setActiveElement: () => {},
75
+ focusStateKey: '$focus',
76
+ lockStyles: true,
77
+ };