@lightningtv/solid 3.0.0-9 → 3.0.1

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 (228) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +6 -0
  3. package/dist/jsx-runtime.d.ts +14 -0
  4. package/dist/src/activeElement.d.ts +1 -1
  5. package/dist/src/core/animation.d.ts +35 -0
  6. package/dist/src/core/animation.js +119 -0
  7. package/dist/src/core/animation.js.map +1 -0
  8. package/dist/src/core/config.d.ts +49 -0
  9. package/dist/src/core/config.js +33 -0
  10. package/dist/src/core/config.js.map +1 -0
  11. package/dist/src/core/domRenderer.d.ts +115 -0
  12. package/dist/src/core/domRenderer.js +1152 -0
  13. package/dist/src/core/domRenderer.js.map +1 -0
  14. package/dist/src/core/elementNode.d.ts +463 -0
  15. package/dist/src/core/elementNode.js +833 -0
  16. package/dist/src/core/elementNode.js.map +1 -0
  17. package/dist/src/core/flex.d.ts +2 -0
  18. package/dist/src/core/flex.js +243 -0
  19. package/dist/src/core/flex.js.map +1 -0
  20. package/dist/src/core/focusKeyTypes.d.ts +42 -0
  21. package/dist/src/core/focusKeyTypes.js +2 -0
  22. package/dist/src/core/focusKeyTypes.js.map +1 -0
  23. package/dist/src/core/focusManager.d.ts +13 -0
  24. package/dist/src/core/focusManager.js +276 -0
  25. package/dist/src/core/focusManager.js.map +1 -0
  26. package/dist/src/core/index.d.ts +12 -0
  27. package/dist/src/core/index.js +12 -0
  28. package/dist/src/core/index.js.map +1 -0
  29. package/dist/src/core/intrinsicTypes.d.ts +90 -0
  30. package/dist/src/core/intrinsicTypes.js +2 -0
  31. package/dist/src/core/intrinsicTypes.js.map +1 -0
  32. package/dist/src/core/lightningInit.d.ts +89 -0
  33. package/dist/src/core/lightningInit.js +26 -0
  34. package/dist/src/core/lightningInit.js.map +1 -0
  35. package/dist/src/core/nodeTypes.d.ts +6 -0
  36. package/dist/src/core/nodeTypes.js +6 -0
  37. package/dist/src/core/nodeTypes.js.map +1 -0
  38. package/dist/src/core/shaders.d.ts +51 -0
  39. package/dist/src/core/shaders.js +446 -0
  40. package/dist/src/core/shaders.js.map +1 -0
  41. package/dist/src/core/states.d.ts +12 -0
  42. package/dist/src/core/states.js +84 -0
  43. package/dist/src/core/states.js.map +1 -0
  44. package/dist/src/core/utils.d.ts +39 -0
  45. package/dist/src/core/utils.js +164 -0
  46. package/dist/src/core/utils.js.map +1 -0
  47. package/dist/src/devtools/index.d.ts +1 -1
  48. package/dist/src/devtools/index.js +1 -1
  49. package/dist/src/devtools/index.js.map +1 -1
  50. package/dist/src/index.d.ts +3 -3
  51. package/dist/src/index.js +1 -1
  52. package/dist/src/index.js.map +1 -1
  53. package/dist/src/primitives/Column.jsx +9 -10
  54. package/dist/src/primitives/Column.jsx.map +1 -1
  55. package/dist/src/primitives/FPSCounter.jsx +15 -2
  56. package/dist/src/primitives/FPSCounter.jsx.map +1 -1
  57. package/dist/src/primitives/Image.d.ts +8 -0
  58. package/dist/src/primitives/Image.jsx +24 -0
  59. package/dist/src/primitives/Image.jsx.map +1 -0
  60. package/dist/src/primitives/KeepAlive.d.ts +30 -0
  61. package/dist/src/primitives/KeepAlive.jsx +77 -0
  62. package/dist/src/primitives/KeepAlive.jsx.map +1 -0
  63. package/dist/src/primitives/Lazy.d.ts +8 -7
  64. package/dist/src/primitives/Lazy.jsx +52 -20
  65. package/dist/src/primitives/Lazy.jsx.map +1 -1
  66. package/dist/src/primitives/LazyImport.d.ts +8 -0
  67. package/dist/src/primitives/LazyImport.js +40 -0
  68. package/dist/src/primitives/LazyImport.js.map +1 -0
  69. package/dist/src/primitives/Preserve.d.ts +4 -0
  70. package/dist/src/primitives/Preserve.jsx +11 -0
  71. package/dist/src/primitives/Preserve.jsx.map +1 -0
  72. package/dist/src/primitives/Row.jsx +9 -10
  73. package/dist/src/primitives/Row.jsx.map +1 -1
  74. package/dist/src/primitives/Suspense.d.ts +22 -0
  75. package/dist/src/primitives/Suspense.jsx +33 -0
  76. package/dist/src/primitives/Suspense.jsx.map +1 -0
  77. package/dist/src/primitives/Virtual.d.ts +18 -0
  78. package/dist/src/primitives/Virtual.jsx +443 -0
  79. package/dist/src/primitives/Virtual.jsx.map +1 -0
  80. package/dist/src/primitives/VirtualGrid.d.ts +13 -0
  81. package/dist/src/primitives/VirtualGrid.jsx +160 -0
  82. package/dist/src/primitives/VirtualGrid.jsx.map +1 -0
  83. package/dist/src/primitives/Visible.d.ts +0 -1
  84. package/dist/src/primitives/Visible.jsx +1 -1
  85. package/dist/src/primitives/Visible.jsx.map +1 -1
  86. package/dist/src/primitives/announcer/announcer.d.ts +1 -0
  87. package/dist/src/primitives/announcer/announcer.js +4 -3
  88. package/dist/src/primitives/announcer/announcer.js.map +1 -1
  89. package/dist/src/primitives/announcer/speech.d.ts +1 -1
  90. package/dist/src/primitives/announcer/speech.js +98 -8
  91. package/dist/src/primitives/announcer/speech.js.map +1 -1
  92. package/dist/src/primitives/createFocusStack.d.ts +4 -4
  93. package/dist/src/primitives/createFocusStack.jsx +15 -6
  94. package/dist/src/primitives/createFocusStack.jsx.map +1 -1
  95. package/dist/src/primitives/createTag.d.ts +8 -0
  96. package/dist/src/primitives/createTag.jsx +20 -0
  97. package/dist/src/primitives/createTag.jsx.map +1 -0
  98. package/dist/src/primitives/index.d.ts +13 -4
  99. package/dist/src/primitives/index.js +12 -3
  100. package/dist/src/primitives/index.js.map +1 -1
  101. package/dist/src/primitives/types.d.ts +3 -2
  102. package/dist/src/primitives/useFocusManager.d.ts +2 -2
  103. package/dist/src/primitives/useFocusManager.js +2 -2
  104. package/dist/src/primitives/useFocusManager.js.map +1 -1
  105. package/dist/src/primitives/useMouse.d.ts +18 -2
  106. package/dist/src/primitives/useMouse.js +171 -47
  107. package/dist/src/primitives/useMouse.js.map +1 -1
  108. package/dist/src/primitives/utils/createBlurredImage.d.ts +56 -0
  109. package/dist/src/primitives/utils/createBlurredImage.js +223 -0
  110. package/dist/src/primitives/utils/createBlurredImage.js.map +1 -0
  111. package/dist/src/primitives/utils/createSpriteMap.d.ts +2 -2
  112. package/dist/src/primitives/utils/createSpriteMap.js +3 -3
  113. package/dist/src/primitives/utils/createSpriteMap.js.map +1 -1
  114. package/dist/src/primitives/utils/handleNavigation.d.ts +79 -5
  115. package/dist/src/primitives/utils/handleNavigation.js +241 -69
  116. package/dist/src/primitives/utils/handleNavigation.js.map +1 -1
  117. package/dist/src/primitives/utils/withScrolling.d.ts +12 -2
  118. package/dist/src/primitives/utils/withScrolling.js +59 -7
  119. package/dist/src/primitives/utils/withScrolling.js.map +1 -1
  120. package/dist/src/render.d.ts +5 -4
  121. package/dist/src/render.js +5 -1
  122. package/dist/src/render.js.map +1 -1
  123. package/dist/src/shaders/Rounded.d.ts +7 -0
  124. package/dist/src/shaders/Rounded.js +88 -0
  125. package/dist/src/shaders/Rounded.js.map +1 -0
  126. package/dist/src/shaders/RoundedWithBorder.d.ts +3 -0
  127. package/dist/src/shaders/RoundedWithBorder.js +217 -0
  128. package/dist/src/shaders/RoundedWithBorder.js.map +1 -0
  129. package/dist/src/shaders/index.d.ts +4 -0
  130. package/dist/src/shaders/index.js +5 -0
  131. package/dist/src/shaders/index.js.map +1 -0
  132. package/dist/src/shaders/templates/RoundedTemplate.d.ts +12 -0
  133. package/dist/src/shaders/templates/RoundedTemplate.js +48 -0
  134. package/dist/src/shaders/templates/RoundedTemplate.js.map +1 -0
  135. package/dist/src/shaders/templates/RoundedWithBorderTemplate.d.ts +20 -0
  136. package/dist/src/shaders/templates/RoundedWithBorderTemplate.js +93 -0
  137. package/dist/src/shaders/templates/RoundedWithBorderTemplate.js.map +1 -0
  138. package/dist/src/shaders/utils.d.ts +3 -0
  139. package/dist/src/shaders/utils.js +31 -0
  140. package/dist/src/shaders/utils.js.map +1 -0
  141. package/dist/src/solidOpts.d.ts +1 -7
  142. package/dist/src/solidOpts.js +9 -1
  143. package/dist/src/solidOpts.js.map +1 -1
  144. package/dist/src/types.d.ts +1 -13
  145. package/dist/src/utils.d.ts +3 -1
  146. package/dist/src/utils.js +9 -1
  147. package/dist/src/utils.js.map +1 -1
  148. package/dist/tsconfig.tsbuildinfo +1 -1
  149. package/jsx-runtime.d.ts +1 -1
  150. package/package.json +28 -16
  151. package/src/activeElement.ts +1 -1
  152. package/src/core/animation.ts +185 -0
  153. package/src/core/config.ts +89 -0
  154. package/src/core/domRenderer.ts +1300 -0
  155. package/src/core/elementNode.ts +1458 -0
  156. package/src/core/flex.ts +284 -0
  157. package/src/core/focusKeyTypes.ts +90 -0
  158. package/src/core/focusManager.ts +381 -0
  159. package/src/core/index.ts +13 -0
  160. package/src/core/intrinsicTypes.ts +199 -0
  161. package/src/core/lightningInit.ts +147 -0
  162. package/src/core/nodeTypes.ts +6 -0
  163. package/src/core/shaders.ts +567 -0
  164. package/src/core/states.ts +91 -0
  165. package/src/core/utils.ts +222 -0
  166. package/src/devtools/index.ts +1 -1
  167. package/src/index.ts +3 -3
  168. package/src/primitives/Column.tsx +10 -12
  169. package/src/primitives/FPSCounter.tsx +16 -2
  170. package/src/primitives/Image.tsx +36 -0
  171. package/src/primitives/KeepAlive.tsx +124 -0
  172. package/src/primitives/Lazy.tsx +66 -37
  173. package/src/primitives/LazyImport.ts +53 -0
  174. package/src/primitives/Preserve.tsx +18 -0
  175. package/src/primitives/Row.tsx +13 -14
  176. package/src/primitives/Suspense.tsx +39 -0
  177. package/src/primitives/Virtual.tsx +486 -0
  178. package/src/primitives/VirtualGrid.tsx +220 -0
  179. package/src/primitives/Visible.tsx +1 -2
  180. package/src/primitives/announcer/announcer.ts +10 -3
  181. package/src/primitives/announcer/speech.ts +113 -6
  182. package/src/primitives/createFocusStack.tsx +18 -7
  183. package/src/primitives/createTag.tsx +33 -0
  184. package/src/primitives/index.ts +13 -4
  185. package/src/primitives/types.ts +3 -2
  186. package/src/primitives/useFocusManager.ts +3 -3
  187. package/src/primitives/useMouse.ts +306 -67
  188. package/src/primitives/utils/createBlurredImage.ts +366 -0
  189. package/src/primitives/utils/createSpriteMap.ts +8 -6
  190. package/src/primitives/utils/handleNavigation.ts +300 -84
  191. package/src/primitives/utils/withScrolling.ts +76 -18
  192. package/src/render.ts +7 -3
  193. package/src/shaders/Rounded.ts +100 -0
  194. package/src/shaders/RoundedWithBorder.ts +245 -0
  195. package/src/shaders/index.ts +4 -0
  196. package/src/shaders/templates/RoundedTemplate.ts +57 -0
  197. package/src/shaders/templates/RoundedWithBorderTemplate.ts +110 -0
  198. package/src/shaders/utils.ts +44 -0
  199. package/src/solidOpts.ts +9 -7
  200. package/src/types.ts +1 -15
  201. package/src/utils.ts +11 -1
  202. package/dist/src/client.d.ts +0 -1
  203. package/dist/src/client.js +0 -2
  204. package/dist/src/client.js.map +0 -1
  205. package/dist/src/core.d.ts +0 -1
  206. package/dist/src/core.js +0 -3
  207. package/dist/src/core.js.map +0 -1
  208. package/dist/src/jsx-runtime.d.ts +0 -10
  209. package/dist/src/jsx-runtime.js +0 -2
  210. package/dist/src/jsx-runtime.js.map +0 -1
  211. package/dist/src/primitives/Infinite.d.ts +0 -15
  212. package/dist/src/primitives/Infinite.jsx +0 -59
  213. package/dist/src/primitives/Infinite.jsx.map +0 -1
  214. package/dist/src/primitives/LazyUp.d.ts +0 -11
  215. package/dist/src/primitives/LazyUp.jsx +0 -38
  216. package/dist/src/primitives/LazyUp.jsx.map +0 -1
  217. package/dist/src/primitives/sprite.d.ts +0 -9
  218. package/dist/src/primitives/sprite.js +0 -18
  219. package/dist/src/primitives/sprite.js.map +0 -1
  220. package/dist/src/primitives/utils/createFocusStack.d.ts +0 -24
  221. package/dist/src/primitives/utils/createFocusStack.js +0 -59
  222. package/dist/src/primitives/utils/createFocusStack.js.map +0 -1
  223. package/dist/src/primitives/utils/scrollToIndex.d.ts +0 -2
  224. package/dist/src/primitives/utils/scrollToIndex.js +0 -33
  225. package/dist/src/primitives/utils/scrollToIndex.js.map +0 -1
  226. package/dist/src/renderClient.d.ts +0 -21
  227. package/dist/src/renderClient.js +0 -64
  228. package/dist/src/renderClient.js.map +0 -1
@@ -0,0 +1,443 @@
1
+ import * as s from 'solid-js';
2
+ import * as lng from '@lightningtv/solid';
3
+ import * as lngp from '@lightningtv/solid/primitives';
4
+ import { List } from '@solid-primitives/list';
5
+ import * as utils from '../utils.js';
6
+ function createVirtual(component, props, keyHandlers) {
7
+ const isRow = component === lngp.Row;
8
+ const axis = isRow ? 'x' : 'y';
9
+ const [cursor, setCursor] = s.createSignal(props.selected ?? 0);
10
+ const bufferSize = s.createMemo(() => props.bufferSize || 2);
11
+ const scrollIndex = s.createMemo(() => props.scrollIndex || 0);
12
+ const items = s.createMemo(() => props.each || []);
13
+ const itemCount = s.createMemo(() => items().length);
14
+ const scrollType = s.createMemo(() => props.scroll || 'auto');
15
+ const selected = () => {
16
+ if (props.wrap) {
17
+ return Math.max(bufferSize(), scrollIndex());
18
+ }
19
+ return props.selected || 0;
20
+ };
21
+ let cachedScaledSize;
22
+ let targetPosition;
23
+ let cachedAnimationController;
24
+ const uniformSize = s.createMemo(() => {
25
+ return props.uniformSize !== false;
26
+ });
27
+ const [slice, setSlice] = s.createSignal({
28
+ start: 0,
29
+ slice: [],
30
+ selected: 0,
31
+ delta: 0,
32
+ shiftBy: 0,
33
+ atStart: true,
34
+ });
35
+ function normalizeDeltaForWindow(delta, windowLen) {
36
+ if (!windowLen)
37
+ return 0;
38
+ const half = windowLen / 2;
39
+ if (delta > half)
40
+ return delta - windowLen;
41
+ if (delta < -half)
42
+ return delta + windowLen;
43
+ return delta;
44
+ }
45
+ function computeSize(selected = 0) {
46
+ if (uniformSize() && cachedScaledSize) {
47
+ return cachedScaledSize;
48
+ }
49
+ else if (viewRef) {
50
+ const gap = viewRef.gap || 0;
51
+ const dimension = isRow ? 'width' : 'height'; // This can't be moved up as it depends on viewRef
52
+ const prevSelectedChild = viewRef.children[selected];
53
+ if (prevSelectedChild instanceof lng.ElementNode) {
54
+ const itemSize = prevSelectedChild[dimension] || 0;
55
+ const focusStyle = prevSelectedChild.style?.focus;
56
+ const scale = (focusStyle?.scale ?? prevSelectedChild.scale ?? 1);
57
+ const scaledSize = itemSize * (props.factorScale ? scale : 1) + gap;
58
+ cachedScaledSize = scaledSize;
59
+ return scaledSize;
60
+ }
61
+ }
62
+ return 0;
63
+ }
64
+ function computeSlice(c, delta, prev) {
65
+ const total = itemCount();
66
+ if (total === 0)
67
+ return { start: 0, slice: [], selected: 0, delta, shiftBy: 0, atStart: true };
68
+ const length = props.displaySize + bufferSize();
69
+ let start = prev.start;
70
+ let selected = prev.selected;
71
+ let atStart = prev.atStart;
72
+ let shiftBy = -delta;
73
+ switch (scrollType()) {
74
+ case 'always':
75
+ if (props.wrap) {
76
+ start = utils.mod(c - 1, total);
77
+ selected = 1;
78
+ }
79
+ else {
80
+ start = utils.clamp(c - bufferSize(), 0, Math.max(0, total - props.displaySize - bufferSize()));
81
+ if (delta === 0 && c > 3) {
82
+ shiftBy = c < 3 ? -c : -2;
83
+ selected = 2;
84
+ }
85
+ else {
86
+ selected =
87
+ c < bufferSize()
88
+ ? c
89
+ : c >= total - props.displaySize
90
+ ? c - (total - props.displaySize) + bufferSize()
91
+ : bufferSize();
92
+ }
93
+ }
94
+ break;
95
+ case 'auto':
96
+ if (props.wrap) {
97
+ if (delta === 0) {
98
+ selected = scrollIndex() || 1;
99
+ start = utils.mod(c - (scrollIndex() || 1), total);
100
+ }
101
+ else {
102
+ start = utils.mod(c - (prev.selected || 1), total);
103
+ }
104
+ }
105
+ else {
106
+ if (delta < 0) {
107
+ // Moving left
108
+ if (prev.start > 0 && prev.selected >= props.displaySize) {
109
+ // Move selection left inside slice
110
+ start = prev.start;
111
+ selected = prev.selected - 1;
112
+ }
113
+ else if (prev.start > 0) {
114
+ // Move selection left inside slice
115
+ start = prev.start - 1;
116
+ selected = prev.selected;
117
+ // shiftBy = 0;
118
+ }
119
+ else if (prev.start === 0 && !prev.atStart) {
120
+ start = 0;
121
+ selected = prev.selected - 1;
122
+ atStart = true;
123
+ }
124
+ else if (selected >= props.displaySize - 1) {
125
+ // Shift window left, keep selection pinned
126
+ start = 0;
127
+ selected = prev.selected - 1;
128
+ }
129
+ else {
130
+ start = 0;
131
+ selected = prev.selected - 1;
132
+ shiftBy = 0;
133
+ }
134
+ }
135
+ else if (delta > 0) {
136
+ // Moving right
137
+ if (prev.selected < scrollIndex()) {
138
+ // Move selection right inside slice
139
+ start = prev.start;
140
+ selected = prev.selected + 1;
141
+ shiftBy = 0;
142
+ }
143
+ else if (prev.selected === scrollIndex() || atStart) {
144
+ start = prev.start;
145
+ selected = prev.selected + 1;
146
+ atStart = false;
147
+ }
148
+ else if (prev.start === 0 && prev.selected === 0) {
149
+ start = 0;
150
+ selected = 1;
151
+ atStart = false;
152
+ }
153
+ else if (prev.start >= total - props.displaySize) {
154
+ // At end: clamp slice, selection drifts right
155
+ start = prev.start;
156
+ selected = c - start;
157
+ shiftBy = 0;
158
+ }
159
+ else {
160
+ // Shift window right, keep selection pinned
161
+ start = prev.start + 1;
162
+ selected = Math.max(prev.selected, scrollIndex() + 1);
163
+ ;
164
+ }
165
+ }
166
+ else {
167
+ // Initial setup
168
+ if (c > 0) {
169
+ start = Math.min(c - (scrollIndex() || 1), total - props.displaySize - bufferSize());
170
+ selected = Math.max(scrollIndex() || 1, c - start);
171
+ shiftBy = total - c < 3 ? c - total : -1;
172
+ atStart = false;
173
+ }
174
+ else {
175
+ // ScrollToIndex was called
176
+ if (Math.abs(c - prev.start) > 1) {
177
+ start = c;
178
+ if (c === 0) {
179
+ atStart = true;
180
+ selected = 0;
181
+ }
182
+ }
183
+ else {
184
+ start = prev.start;
185
+ selected = prev.selected;
186
+ }
187
+ }
188
+ }
189
+ }
190
+ break;
191
+ case 'edge':
192
+ const startScrolling = Math.max(1, props.displaySize + (atStart ? -1 : 0));
193
+ if (props.wrap) {
194
+ if (delta > 0) {
195
+ if (prev.selected < startScrolling) {
196
+ selected = prev.selected + 1;
197
+ shiftBy = 0;
198
+ }
199
+ else if (prev.selected === startScrolling && atStart) {
200
+ selected = prev.selected + 1;
201
+ atStart = false;
202
+ }
203
+ else {
204
+ start = utils.mod(prev.start + 1, total);
205
+ selected = prev.selected;
206
+ }
207
+ }
208
+ else if (delta < 0) {
209
+ if (prev.selected > 1) {
210
+ selected = prev.selected - 1;
211
+ shiftBy = 0;
212
+ }
213
+ else {
214
+ start = utils.mod(prev.start - 1, total);
215
+ selected = 1;
216
+ }
217
+ }
218
+ else {
219
+ start = utils.mod(c - 1, total);
220
+ selected = 1;
221
+ shiftBy = -1;
222
+ atStart = false;
223
+ }
224
+ }
225
+ else {
226
+ if (delta === 0 && c > 0) {
227
+ //initial setup
228
+ selected = c > startScrolling ? startScrolling : c;
229
+ start = Math.max(0, c - startScrolling + 1);
230
+ shiftBy = c > startScrolling ? -1 : 0;
231
+ atStart = c < startScrolling;
232
+ }
233
+ else if (delta > 0) {
234
+ if (prev.selected < startScrolling) {
235
+ selected = prev.selected + 1;
236
+ shiftBy = 0;
237
+ }
238
+ else if (prev.selected === startScrolling && atStart) {
239
+ selected = prev.selected + 1;
240
+ atStart = false;
241
+ }
242
+ else {
243
+ start = prev.start + 1;
244
+ selected = prev.selected;
245
+ atStart = false;
246
+ }
247
+ }
248
+ else if (delta < 0) {
249
+ if (prev.selected > 1) {
250
+ selected = prev.selected - 1;
251
+ shiftBy = 0;
252
+ }
253
+ else if (c > 1) {
254
+ start = Math.max(0, c - 1);
255
+ selected = 1;
256
+ }
257
+ else if (c === 1) {
258
+ start = 0;
259
+ selected = 1;
260
+ }
261
+ else {
262
+ start = 0;
263
+ selected = 0;
264
+ shiftBy = atStart ? 0 : shiftBy;
265
+ atStart = true;
266
+ }
267
+ }
268
+ }
269
+ break;
270
+ case 'none':
271
+ default:
272
+ start = 0;
273
+ selected = c;
274
+ shiftBy = 0;
275
+ break;
276
+ }
277
+ let newSlice = prev.slice;
278
+ if (start !== prev.start || newSlice.length === 0) {
279
+ newSlice = props.wrap
280
+ ? Array.from({ length }, (_, i) => items()[utils.mod(start + i, total)])
281
+ : items().slice(start, start + length);
282
+ }
283
+ const state = { start, slice: newSlice, selected, delta, shiftBy, atStart };
284
+ if (props.debugInfo) {
285
+ console.log(`[Virtual]`, {
286
+ cursor: c,
287
+ delta,
288
+ start,
289
+ selected,
290
+ shiftBy,
291
+ slice: state.slice,
292
+ });
293
+ }
294
+ return state;
295
+ }
296
+ let viewRef;
297
+ function scrollToIndex(index) {
298
+ s.untrack(() => {
299
+ if (itemCount() === 0)
300
+ return;
301
+ lastNavTime = performance.now();
302
+ if (originalPosition !== undefined) {
303
+ viewRef.lng[axis] = originalPosition;
304
+ targetPosition = originalPosition;
305
+ }
306
+ if (!lng.hasFocus(viewRef)) {
307
+ // force focus as scrollToIndex is manually called
308
+ viewRef.setFocus();
309
+ }
310
+ updateSelected([utils.clamp(index, 0, itemCount() - 1)]);
311
+ });
312
+ }
313
+ let lastNavTime = 0;
314
+ function getAdaptiveDuration(duration = 250) {
315
+ const now = performance.now();
316
+ const delta = now - lastNavTime;
317
+ lastNavTime = now;
318
+ if (delta < duration)
319
+ return delta;
320
+ return duration;
321
+ }
322
+ let originalPosition;
323
+ const onSelectedChanged = function (_idx, elm, _active, _lastIdx) {
324
+ let idx = _idx;
325
+ let lastIdx = _lastIdx || 0;
326
+ let active = _active;
327
+ const noChange = idx === lastIdx;
328
+ const total = itemCount();
329
+ originalPosition = originalPosition ?? elm[axis];
330
+ if (props.onSelectedChanged) {
331
+ props.onSelectedChanged.call(this, idx, this, active, lastIdx);
332
+ }
333
+ if (noChange)
334
+ return;
335
+ const rawDelta = idx - (lastIdx ?? 0);
336
+ const windowLen = elm?.children?.length ?? props.displaySize + bufferSize();
337
+ const delta = props.wrap
338
+ ? normalizeDeltaForWindow(rawDelta, windowLen)
339
+ : rawDelta;
340
+ setCursor(c => {
341
+ const next = c + delta;
342
+ return props.wrap
343
+ ? utils.mod(next, total)
344
+ : utils.clamp(next, 0, total - 1);
345
+ });
346
+ const newState = computeSlice(cursor(), delta, slice());
347
+ setSlice(newState);
348
+ elm.selected = newState.selected;
349
+ if (props.onEndReachedThreshold !== undefined &&
350
+ cursor() >= itemCount() - props.onEndReachedThreshold) {
351
+ props.onEndReached?.();
352
+ }
353
+ if (newState.shiftBy === 0)
354
+ return;
355
+ const prevChildPos = (targetPosition ?? this[axis]) + active[axis];
356
+ queueMicrotask(() => {
357
+ elm.updateLayout();
358
+ const childSize = computeSize(slice().selected);
359
+ if (cachedAnimationController && cachedAnimationController.state === 'running') {
360
+ cachedAnimationController.stop();
361
+ ;
362
+ }
363
+ if (lng.Config.animationsEnabled) {
364
+ this.lng[axis] = prevChildPos - active[axis];
365
+ targetPosition = this.lng[axis] + (childSize * slice().shiftBy);
366
+ cachedAnimationController = this.animate({ [axis]: targetPosition }, { ...this.animationSettings, duration: getAdaptiveDuration(this.animationSettings?.duration) }).start();
367
+ }
368
+ else {
369
+ this.lng[axis] = this.lng[axis] + (childSize * slice().shiftBy);
370
+ }
371
+ });
372
+ };
373
+ const updateSelected = ([sel, _items]) => {
374
+ if (!viewRef || sel === undefined || itemCount() === 0)
375
+ return;
376
+ const item = items()[sel];
377
+ setCursor(sel);
378
+ const newState = computeSlice(cursor(), 0, slice());
379
+ setSlice(newState);
380
+ queueMicrotask(() => {
381
+ viewRef.updateLayout();
382
+ let activeIndex = viewRef.children.findIndex(x => x.item === item);
383
+ if (activeIndex === -1)
384
+ return;
385
+ viewRef.selected = activeIndex;
386
+ if (lng.hasFocus(viewRef)) {
387
+ viewRef.children[activeIndex]?.setFocus();
388
+ }
389
+ });
390
+ };
391
+ let doOnce = false;
392
+ s.createEffect(s.on([() => props.wrap, items], () => {
393
+ if (!viewRef || itemCount() === 0 || !props.wrap || doOnce)
394
+ return;
395
+ doOnce = true;
396
+ // offset just for wrap so we keep one item before
397
+ queueMicrotask(() => {
398
+ const childSize = computeSize(slice().selected);
399
+ viewRef.lng[axis] = (viewRef.lng[axis] || 0) + (childSize * -1);
400
+ // Original Position is offset to support scrollToIndex
401
+ originalPosition = viewRef.lng[axis];
402
+ targetPosition = viewRef.lng[axis];
403
+ });
404
+ }));
405
+ s.createEffect(s.on([() => props.selected, items], updateSelected));
406
+ s.createEffect(s.on(items, () => {
407
+ if (!viewRef)
408
+ return;
409
+ if (cursor() >= itemCount()) {
410
+ setCursor(Math.max(0, itemCount() - 1));
411
+ }
412
+ const newState = computeSlice(cursor(), 0, slice());
413
+ setSlice(newState);
414
+ viewRef.selected = newState.selected;
415
+ }));
416
+ return (<view {...props} {...keyHandlers} ref={lngp.chainRefs(el => { viewRef = el; }, props.ref)} selected={selected()} cursor={cursor()} forwardFocus={/* @once */lngp.navigableForwardFocus} scrollToIndex={/* @once */scrollToIndex} onSelectedChanged={/* @once */onSelectedChanged} style={/* @once */lng.combineStyles(props.style, component === lngp.Row
417
+ ? {
418
+ display: 'flex',
419
+ gap: 30,
420
+ transition: { x: { duration: 250, easing: 'ease-out' } },
421
+ }
422
+ : {
423
+ display: 'flex',
424
+ flexDirection: 'column',
425
+ gap: 30,
426
+ transition: { y: { duration: 250, easing: 'ease-out' } },
427
+ })}>
428
+ <List each={slice().slice}>{props.children}</List>
429
+ </view>);
430
+ }
431
+ export function VirtualRow(props) {
432
+ return createVirtual(lngp.Row, props, {
433
+ onLeft: lngp.chainFunctions(props.onLeft, lngp.handleNavigation('left')),
434
+ onRight: lngp.chainFunctions(props.onRight, lngp.handleNavigation('right')),
435
+ });
436
+ }
437
+ export function VirtualColumn(props) {
438
+ return createVirtual(lngp.Column, props, {
439
+ onUp: lngp.chainFunctions(props.onUp, lngp.handleNavigation('up')),
440
+ onDown: lngp.chainFunctions(props.onDown, lngp.handleNavigation('down')),
441
+ });
442
+ }
443
+ //# sourceMappingURL=Virtual.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Virtual.jsx","sourceRoot":"","sources":["../../../src/primitives/Virtual.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import * as s from 'solid-js';
2
+ import * as lng from '@lightningtv/solid';
3
+ import * as lngp from '@lightningtv/solid/primitives';
4
+ export type VirtualGridProps<T> = lng.NewOmit<lngp.RowProps, 'children'> & {
5
+ each: readonly T[] | undefined | null | false;
6
+ columns: number;
7
+ rows?: number;
8
+ buffer?: number;
9
+ onEndReached?: () => void;
10
+ onEndReachedThreshold?: number;
11
+ children: (item: s.Accessor<T>, index: s.Accessor<number>) => s.JSX.Element;
12
+ };
13
+ export declare function VirtualGrid<T>(props: VirtualGridProps<T>): s.JSX.Element;
@@ -0,0 +1,160 @@
1
+ import * as s from 'solid-js';
2
+ import * as lng from '@lightningtv/solid';
3
+ import * as lngp from '@lightningtv/solid/primitives';
4
+ import { List } from '@solid-primitives/list';
5
+ import * as utils from '../utils.js';
6
+ const columnScroll = lngp.withScrolling(false);
7
+ const rowStyles = {
8
+ display: 'flex',
9
+ flexWrap: 'wrap',
10
+ transition: {
11
+ y: true,
12
+ },
13
+ };
14
+ export function VirtualGrid(props) {
15
+ const bufferSize = () => props.buffer ?? 2;
16
+ const [cursor, setCursor] = s.createSignal(props.selected ?? 0);
17
+ const items = s.createMemo(() => props.each || []);
18
+ const itemCount = () => items().length;
19
+ const itemsPerRow = () => props.columns;
20
+ const numberOfRows = () => props.rows ?? 1;
21
+ const totalVisibleItems = () => itemsPerRow() * numberOfRows();
22
+ const start = s.createMemo(() => {
23
+ const perRow = itemsPerRow();
24
+ const newRowIndex = Math.floor(cursor() / perRow);
25
+ const rawStart = newRowIndex * perRow - bufferSize() * perRow;
26
+ return Math.max(0, rawStart);
27
+ });
28
+ const end = s.createMemo(() => {
29
+ const perRow = itemsPerRow();
30
+ const newRowIndex = Math.floor(cursor() / perRow);
31
+ const rawEnd = (newRowIndex + bufferSize()) * perRow + totalVisibleItems();
32
+ return Math.min(items().length, rawEnd);
33
+ });
34
+ const [slice, setSlice] = s.createSignal(items().slice(start(), end()));
35
+ let viewRef;
36
+ function onVerticalNav(dir) {
37
+ return function () {
38
+ const perRow = itemsPerRow();
39
+ const currentRowIndex = Math.floor(cursor() / perRow);
40
+ const maxRows = Math.floor(items().length / perRow);
41
+ if (currentRowIndex === 0 && dir === -1
42
+ || currentRowIndex === maxRows && dir === 1)
43
+ return;
44
+ const selected = this.selected || 0;
45
+ const offset = dir * perRow;
46
+ const newIndex = utils.clamp(selected + offset, 0, items().length - 1);
47
+ const lastIdx = selected;
48
+ this.selected = newIndex;
49
+ const active = this.children[this.selected];
50
+ if (active instanceof lng.ElementNode) {
51
+ active.setFocus();
52
+ chainedOnSelectedChanged.call(this, this.selected, this, active, lastIdx);
53
+ return true;
54
+ }
55
+ };
56
+ }
57
+ const onUp = onVerticalNav(-1);
58
+ const onDown = onVerticalNav(1);
59
+ const onSelectedChanged = function (_idx, elm, active, _lastIdx) {
60
+ let idx = _idx;
61
+ let lastIdx = _lastIdx;
62
+ const perRow = itemsPerRow();
63
+ const newRowIndex = Math.floor(idx / perRow);
64
+ const prevRowIndex = Math.floor((lastIdx || 0) / perRow);
65
+ const prevStart = start();
66
+ setCursor(prevStart + idx);
67
+ if (newRowIndex === prevRowIndex)
68
+ return;
69
+ setSlice(items().slice(start(), end()));
70
+ // this.selected is relative to the slice
71
+ // and it doesn't get corrected automatically after children change
72
+ const idxCorrection = prevStart - start();
73
+ if (lastIdx)
74
+ lastIdx += idxCorrection;
75
+ idx += idxCorrection;
76
+ this.selected += idxCorrection;
77
+ if (props.onEndReachedThreshold !== undefined && cursor() >= items().length - props.onEndReachedThreshold) {
78
+ props.onEndReached?.();
79
+ }
80
+ queueMicrotask(() => {
81
+ const prevRowY = this.y + active.y;
82
+ this.updateLayout();
83
+ this.lng.y = prevRowY - active.y;
84
+ columnScroll(idx, elm, active, lastIdx);
85
+ });
86
+ };
87
+ const chainedOnSelectedChanged = lngp.chainFunctions(props.onSelectedChanged, onSelectedChanged);
88
+ let cachedSelected;
89
+ const updateSelected = ([selected, _items]) => {
90
+ if (!viewRef || selected == null)
91
+ return;
92
+ if (cachedSelected !== undefined) {
93
+ selected = cachedSelected;
94
+ cachedSelected = undefined;
95
+ }
96
+ if (selected >= items().length && props.onEndReached) {
97
+ props.onEndReached?.();
98
+ cachedSelected = selected;
99
+ return;
100
+ }
101
+ const item = items()[selected];
102
+ let active = viewRef.children.find(x => x.item === item);
103
+ const lastSelected = viewRef.selected;
104
+ if (active instanceof lng.ElementNode) {
105
+ viewRef.selected = viewRef.children.indexOf(active);
106
+ if (lng.hasFocus(viewRef)) {
107
+ // force focus as scrollToIndex is manually called
108
+ active.setFocus();
109
+ }
110
+ chainedOnSelectedChanged.call(viewRef, viewRef.selected, viewRef, active, lastSelected);
111
+ }
112
+ else {
113
+ setCursor(selected);
114
+ setSlice(items().slice(start(), end()));
115
+ queueMicrotask(() => {
116
+ viewRef.updateLayout();
117
+ active = viewRef.children.find(x => x.item === item);
118
+ if (active instanceof lng.ElementNode) {
119
+ viewRef.selected = viewRef.children.indexOf(active);
120
+ if (lng.hasFocus(viewRef)) {
121
+ active.setFocus();
122
+ }
123
+ chainedOnSelectedChanged.call(viewRef, viewRef.selected, viewRef, active, lastSelected);
124
+ }
125
+ });
126
+ }
127
+ };
128
+ const scrollToIndex = (index) => {
129
+ s.untrack(() => updateSelected([index]));
130
+ };
131
+ s.createEffect(s.on([() => props.selected, items], updateSelected));
132
+ s.createEffect(s.on(items, (gridItems, _prevGridItems, prevSize) => {
133
+ if (!viewRef)
134
+ return;
135
+ if (cachedSelected !== undefined) {
136
+ // This occurs when VG is reloaded and user wants to select a paginated item
137
+ updateSelected([cachedSelected]);
138
+ return gridItems.length;
139
+ }
140
+ if (gridItems.length === 0) {
141
+ setCursor(0);
142
+ cachedSelected = undefined;
143
+ setSlice([]);
144
+ }
145
+ else if (cursor() >= itemCount()) {
146
+ updateSelected([Math.max(0, itemCount() - 1)]);
147
+ }
148
+ else if (prevSize === 0) {
149
+ updateSelected([0]);
150
+ }
151
+ else {
152
+ setSlice(items().slice(start(), end()));
153
+ }
154
+ return gridItems.length;
155
+ }, { defer: true }));
156
+ return (<view {...props} scroll={props.scroll || 'always'} ref={lngp.chainRefs(el => { viewRef = el; }, props.ref)} selected={props.selected || 0} cursor={cursor()} onLeft={/* @once */lngp.chainFunctions(props.onLeft, lngp.navigableHandleNavigation)} onRight={/* @once */lngp.chainFunctions(props.onRight, lngp.navigableHandleNavigation)} onUp={/* @once */lngp.chainFunctions(props.onUp, onUp)} onDown={/* @once */lngp.chainFunctions(props.onDown, onDown)} forwardFocus={/* @once */lngp.navigableForwardFocus} onCreate={/* @once */props.selected ? lngp.chainFunctions(props.onCreate, columnScroll) : props.onCreate} scrollToIndex={/* @once */scrollToIndex} onSelectedChanged={/* @once */chainedOnSelectedChanged} style={/* @once */lng.combineStyles(props.style, rowStyles)}>
157
+ <List each={slice()}>{props.children}</List>
158
+ </view>);
159
+ }
160
+ //# sourceMappingURL=VirtualGrid.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VirtualGrid.jsx","sourceRoot":"","sources":["../../../src/primitives/VirtualGrid.tsx"],"names":[],"mappings":"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"}