@lightningtv/solid 3.0.0-17 → 3.0.0-18

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 (58) hide show
  1. package/dist/src/primitives/Column.jsx +8 -7
  2. package/dist/src/primitives/Column.jsx.map +1 -1
  3. package/dist/src/primitives/KeepAlive.d.ts +4 -3
  4. package/dist/src/primitives/KeepAlive.jsx +70 -9
  5. package/dist/src/primitives/KeepAlive.jsx.map +1 -1
  6. package/dist/src/primitives/Lazy.d.ts +6 -7
  7. package/dist/src/primitives/Lazy.jsx +23 -20
  8. package/dist/src/primitives/Lazy.jsx.map +1 -1
  9. package/dist/src/primitives/Row.jsx +8 -7
  10. package/dist/src/primitives/Row.jsx.map +1 -1
  11. package/dist/src/primitives/Virtual.d.ts +18 -0
  12. package/dist/src/primitives/Virtual.jsx +426 -0
  13. package/dist/src/primitives/Virtual.jsx.map +1 -0
  14. package/dist/src/primitives/VirtualGrid.d.ts +13 -0
  15. package/dist/src/primitives/VirtualGrid.jsx +139 -0
  16. package/dist/src/primitives/VirtualGrid.jsx.map +1 -0
  17. package/dist/src/primitives/VirtualList.d.ts +11 -0
  18. package/dist/src/primitives/VirtualList.jsx +96 -0
  19. package/dist/src/primitives/VirtualList.jsx.map +1 -0
  20. package/dist/src/primitives/VirtualRow.d.ts +13 -0
  21. package/dist/src/primitives/VirtualRow.jsx +97 -0
  22. package/dist/src/primitives/VirtualRow.jsx.map +1 -0
  23. package/dist/src/primitives/Visible.d.ts +0 -1
  24. package/dist/src/primitives/Visible.jsx +1 -1
  25. package/dist/src/primitives/Visible.jsx.map +1 -1
  26. package/dist/src/primitives/index.d.ts +4 -1
  27. package/dist/src/primitives/index.js +4 -1
  28. package/dist/src/primitives/index.js.map +1 -1
  29. package/dist/src/primitives/types.d.ts +1 -0
  30. package/dist/src/primitives/utils/handleNavigation.d.ts +0 -1
  31. package/dist/src/primitives/utils/handleNavigation.js +7 -5
  32. package/dist/src/primitives/utils/handleNavigation.js.map +1 -1
  33. package/dist/src/primitives/utils/withScrolling.d.ts +5 -1
  34. package/dist/src/primitives/utils/withScrolling.js +8 -3
  35. package/dist/src/primitives/utils/withScrolling.js.map +1 -1
  36. package/dist/src/render.d.ts +2 -1
  37. package/dist/src/render.js +4 -0
  38. package/dist/src/render.js.map +1 -1
  39. package/dist/src/universal.d.ts +25 -0
  40. package/dist/src/universal.js +232 -0
  41. package/dist/src/universal.js.map +1 -0
  42. package/dist/src/utils.d.ts +2 -0
  43. package/dist/src/utils.js +8 -0
  44. package/dist/src/utils.js.map +1 -1
  45. package/dist/tsconfig.tsbuildinfo +1 -1
  46. package/package.json +6 -3
  47. package/src/primitives/Column.tsx +10 -9
  48. package/src/primitives/Lazy.tsx +34 -38
  49. package/src/primitives/Row.tsx +11 -9
  50. package/src/primitives/Virtual.tsx +469 -0
  51. package/src/primitives/VirtualGrid.tsx +199 -0
  52. package/src/primitives/Visible.tsx +1 -2
  53. package/src/primitives/index.ts +8 -1
  54. package/src/primitives/types.ts +1 -0
  55. package/src/primitives/utils/handleNavigation.ts +8 -5
  56. package/src/primitives/utils/withScrolling.ts +20 -13
  57. package/src/render.ts +5 -0
  58. package/src/utils.ts +10 -0
@@ -0,0 +1,426 @@
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
+ start = prev.start;
176
+ selected = prev.selected;
177
+ }
178
+ }
179
+ }
180
+ break;
181
+ case 'edge':
182
+ const startScrolling = Math.max(1, props.displaySize + (atStart ? -1 : 0));
183
+ if (props.wrap) {
184
+ if (delta > 0) {
185
+ if (prev.selected < startScrolling) {
186
+ selected = prev.selected + 1;
187
+ shiftBy = 0;
188
+ }
189
+ else if (prev.selected === startScrolling && atStart) {
190
+ selected = prev.selected + 1;
191
+ atStart = false;
192
+ }
193
+ else {
194
+ start = utils.mod(prev.start + 1, total);
195
+ selected = prev.selected;
196
+ }
197
+ }
198
+ else if (delta < 0) {
199
+ if (prev.selected > 1) {
200
+ selected = prev.selected - 1;
201
+ shiftBy = 0;
202
+ }
203
+ else {
204
+ start = utils.mod(prev.start - 1, total);
205
+ selected = 1;
206
+ }
207
+ }
208
+ else {
209
+ start = utils.mod(c - 1, total);
210
+ selected = 1;
211
+ shiftBy = -1;
212
+ atStart = false;
213
+ }
214
+ }
215
+ else {
216
+ if (delta === 0 && c > 0) {
217
+ //initial setup
218
+ selected = c > startScrolling ? startScrolling : c;
219
+ start = Math.max(0, c - startScrolling + 1);
220
+ shiftBy = c > startScrolling ? -1 : 0;
221
+ atStart = c < startScrolling;
222
+ }
223
+ else if (delta > 0) {
224
+ if (prev.selected < startScrolling) {
225
+ selected = prev.selected + 1;
226
+ shiftBy = 0;
227
+ }
228
+ else if (prev.selected === startScrolling && atStart) {
229
+ selected = prev.selected + 1;
230
+ atStart = false;
231
+ }
232
+ else {
233
+ start = prev.start + 1;
234
+ selected = prev.selected;
235
+ atStart = false;
236
+ }
237
+ }
238
+ else if (delta < 0) {
239
+ if (prev.selected > 1) {
240
+ selected = prev.selected - 1;
241
+ shiftBy = 0;
242
+ }
243
+ else if (c > 1) {
244
+ start = Math.max(0, c - 1);
245
+ selected = 1;
246
+ }
247
+ else if (c === 1) {
248
+ start = 0;
249
+ selected = 1;
250
+ }
251
+ else {
252
+ start = 0;
253
+ selected = 0;
254
+ shiftBy = atStart ? 0 : shiftBy;
255
+ atStart = true;
256
+ }
257
+ }
258
+ }
259
+ break;
260
+ case 'none':
261
+ default:
262
+ start = 0;
263
+ selected = c;
264
+ shiftBy = 0;
265
+ break;
266
+ }
267
+ let newSlice = prev.slice;
268
+ if (start !== prev.start || newSlice.length === 0) {
269
+ newSlice = props.wrap
270
+ ? Array.from({ length }, (_, i) => items()[utils.mod(start + i, total)])
271
+ : items().slice(start, start + length);
272
+ }
273
+ const state = { start, slice: newSlice, selected, delta, shiftBy, atStart };
274
+ if (props.debugInfo) {
275
+ console.log(`[Virtual]`, {
276
+ cursor: c,
277
+ delta,
278
+ start,
279
+ selected,
280
+ shiftBy,
281
+ slice: state.slice,
282
+ });
283
+ }
284
+ return state;
285
+ }
286
+ let viewRef;
287
+ function scrollToIndex(index) {
288
+ s.untrack(() => {
289
+ if (itemCount() === 0)
290
+ return;
291
+ lastNavTime = performance.now();
292
+ viewRef.lng[axis] = originalPosition;
293
+ targetPosition = originalPosition;
294
+ updateSelected([utils.clamp(index, 0, itemCount() - 1)]);
295
+ });
296
+ }
297
+ let lastNavTime = 0;
298
+ function getAdaptiveDuration(duration = 250) {
299
+ const now = performance.now();
300
+ const delta = now - lastNavTime;
301
+ lastNavTime = now;
302
+ if (delta < duration)
303
+ return delta;
304
+ return duration;
305
+ }
306
+ let originalPosition;
307
+ const onSelectedChanged = function (_idx, elm, _active, _lastIdx) {
308
+ let idx = _idx;
309
+ let lastIdx = _lastIdx || 0;
310
+ let active = _active;
311
+ const noChange = idx === lastIdx;
312
+ const total = itemCount();
313
+ originalPosition = originalPosition ?? elm[axis];
314
+ if (props.onSelectedChanged) {
315
+ props.onSelectedChanged.call(this, idx, this, active, lastIdx);
316
+ }
317
+ if (noChange)
318
+ return;
319
+ const rawDelta = idx - (lastIdx ?? 0);
320
+ const windowLen = elm?.children?.length ?? props.displaySize + bufferSize();
321
+ const delta = props.wrap
322
+ ? normalizeDeltaForWindow(rawDelta, windowLen)
323
+ : rawDelta;
324
+ setCursor(c => {
325
+ const next = c + delta;
326
+ return props.wrap
327
+ ? utils.mod(next, total)
328
+ : utils.clamp(next, 0, total - 1);
329
+ });
330
+ const newState = computeSlice(cursor(), delta, slice());
331
+ setSlice(newState);
332
+ elm.selected = newState.selected;
333
+ if (props.onEndReachedThreshold !== undefined &&
334
+ cursor() >= itemCount() - props.onEndReachedThreshold) {
335
+ props.onEndReached?.();
336
+ }
337
+ if (newState.shiftBy === 0)
338
+ return;
339
+ const prevChildPos = (targetPosition ?? this[axis]) + active[axis];
340
+ queueMicrotask(() => {
341
+ elm.updateLayout();
342
+ const childSize = computeSize(slice().selected);
343
+ if (cachedAnimationController && cachedAnimationController.state === 'running') {
344
+ cachedAnimationController.stop();
345
+ ;
346
+ }
347
+ if (lng.Config.animationsEnabled) {
348
+ this.lng[axis] = prevChildPos - active[axis];
349
+ let offset = this.lng[axis] + (childSize * slice().shiftBy);
350
+ targetPosition = offset;
351
+ cachedAnimationController = this.animate({ [axis]: offset }, { ...this.animationSettings, duration: getAdaptiveDuration(this.animationSettings?.duration) }).start();
352
+ }
353
+ else {
354
+ this.lng[axis] = this.lng[axis] + (childSize * slice().shiftBy);
355
+ }
356
+ });
357
+ };
358
+ const updateSelected = ([sel, _items]) => {
359
+ if (!viewRef || sel === undefined || itemCount() === 0)
360
+ return;
361
+ const item = items()[sel];
362
+ setCursor(sel);
363
+ const newState = computeSlice(cursor(), 0, slice());
364
+ setSlice(newState);
365
+ queueMicrotask(() => {
366
+ viewRef.updateLayout();
367
+ let activeIndex = viewRef.children.findIndex(x => x.item === item);
368
+ if (activeIndex === -1)
369
+ return;
370
+ viewRef.selected = activeIndex;
371
+ viewRef.children[activeIndex]?.setFocus();
372
+ });
373
+ };
374
+ let doOnce = false;
375
+ s.createEffect(s.on([() => props.wrap, items], () => {
376
+ if (!viewRef || itemCount() === 0 || !props.wrap || doOnce)
377
+ return;
378
+ doOnce = true;
379
+ // offset just for wrap so we keep one item before
380
+ queueMicrotask(() => {
381
+ const childSize = computeSize(slice().selected);
382
+ viewRef.lng[axis] = viewRef.lng[axis] + (childSize * -1);
383
+ // Original Position is offset to support scrollToIndex
384
+ originalPosition = viewRef.lng[axis];
385
+ targetPosition = viewRef.lng[axis];
386
+ });
387
+ }));
388
+ s.createEffect(s.on([() => props.selected, items], updateSelected));
389
+ s.createEffect(s.on(items, () => {
390
+ if (!viewRef || itemCount() === 0)
391
+ return;
392
+ if (cursor() >= itemCount()) {
393
+ setCursor(itemCount() - 1);
394
+ }
395
+ const newState = computeSlice(cursor(), 0, slice());
396
+ setSlice(newState);
397
+ viewRef.selected = newState.selected;
398
+ }));
399
+ 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
400
+ ? {
401
+ display: 'flex',
402
+ gap: 30,
403
+ transition: { x: { duration: 250, easing: 'ease-out' } },
404
+ }
405
+ : {
406
+ display: 'flex',
407
+ flexDirection: 'column',
408
+ gap: 30,
409
+ transition: { y: { duration: 250, easing: 'ease-out' } },
410
+ })}>
411
+ <List each={slice().slice}>{props.children}</List>
412
+ </view>);
413
+ }
414
+ export function VirtualRow(props) {
415
+ return createVirtual(lngp.Row, props, {
416
+ onLeft: lngp.chainFunctions(props.onLeft, lngp.handleNavigation('left')),
417
+ onRight: lngp.chainFunctions(props.onRight, lngp.handleNavigation('right')),
418
+ });
419
+ }
420
+ export function VirtualColumn(props) {
421
+ return createVirtual(lngp.Column, props, {
422
+ onUp: lngp.chainFunctions(props.onUp, lngp.handleNavigation('up')),
423
+ onDown: lngp.chainFunctions(props.onDown, lngp.handleNavigation('down')),
424
+ });
425
+ }
426
+ //# 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,139 @@
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 itemsPerRow = () => props.columns;
19
+ const numberOfRows = () => props.rows ?? 1;
20
+ const totalVisibleItems = () => itemsPerRow() * numberOfRows();
21
+ const start = s.createMemo(() => {
22
+ const perRow = itemsPerRow();
23
+ const newRowIndex = Math.floor(cursor() / perRow);
24
+ const rawStart = newRowIndex * perRow - bufferSize() * perRow;
25
+ return Math.max(0, rawStart);
26
+ });
27
+ const end = s.createMemo(() => {
28
+ const perRow = itemsPerRow();
29
+ const newRowIndex = Math.floor(cursor() / perRow);
30
+ const rawEnd = (newRowIndex + bufferSize()) * perRow + totalVisibleItems();
31
+ return Math.min(items().length, rawEnd);
32
+ });
33
+ const [slice, setSlice] = s.createSignal(items().slice(start(), end()));
34
+ let viewRef;
35
+ function onVerticalNav(dir) {
36
+ return function () {
37
+ const perRow = itemsPerRow();
38
+ const currentRowIndex = Math.floor(cursor() / perRow);
39
+ const maxRows = Math.floor(items().length / perRow);
40
+ if (currentRowIndex === 0 && dir === -1
41
+ || currentRowIndex === maxRows && dir === 1)
42
+ return;
43
+ const selected = this.selected || 0;
44
+ const offset = dir * perRow;
45
+ const newIndex = utils.clamp(selected + offset, 0, items().length - 1);
46
+ const lastIdx = selected;
47
+ this.selected = newIndex;
48
+ const active = this.children[this.selected];
49
+ if (active instanceof lng.ElementNode) {
50
+ active.setFocus();
51
+ chainedOnSelectedChanged.call(this, this.selected, this, active, lastIdx);
52
+ return true;
53
+ }
54
+ };
55
+ }
56
+ const onUp = onVerticalNav(-1);
57
+ const onDown = onVerticalNav(1);
58
+ const onSelectedChanged = function (_idx, elm, active, _lastIdx) {
59
+ let idx = _idx;
60
+ let lastIdx = _lastIdx;
61
+ const perRow = itemsPerRow();
62
+ const newRowIndex = Math.floor(idx / perRow);
63
+ const prevRowIndex = Math.floor((lastIdx || 0) / perRow);
64
+ const prevStart = start();
65
+ setCursor(prevStart + idx);
66
+ if (newRowIndex === prevRowIndex)
67
+ return;
68
+ setSlice(items().slice(start(), end()));
69
+ // this.selected is relative to the slice
70
+ // and it doesn't get corrected automatically after children change
71
+ const idxCorrection = prevStart - start();
72
+ if (lastIdx)
73
+ lastIdx += idxCorrection;
74
+ idx += idxCorrection;
75
+ this.selected += idxCorrection;
76
+ if (props.onEndReachedThreshold !== undefined && cursor() >= items().length - props.onEndReachedThreshold) {
77
+ props.onEndReached?.();
78
+ }
79
+ queueMicrotask(() => {
80
+ const prevRowY = this.y + active.y;
81
+ this.updateLayout();
82
+ this.lng.y = prevRowY - active.y;
83
+ columnScroll(idx, elm, active, lastIdx);
84
+ });
85
+ };
86
+ const chainedOnSelectedChanged = lngp.chainFunctions(props.onSelectedChanged, onSelectedChanged);
87
+ let cachedSelected;
88
+ const updateSelected = ([selected, _items]) => {
89
+ if (!viewRef || selected == null)
90
+ return;
91
+ if (cachedSelected !== undefined) {
92
+ selected = cachedSelected;
93
+ cachedSelected = undefined;
94
+ }
95
+ if (selected >= items().length && props.onEndReached) {
96
+ props.onEndReached?.();
97
+ cachedSelected = selected;
98
+ return;
99
+ }
100
+ const item = items()[selected];
101
+ let active = viewRef.children.find(x => x.item === item);
102
+ const lastSelected = viewRef.selected;
103
+ if (active instanceof lng.ElementNode) {
104
+ viewRef.selected = viewRef.children.indexOf(active);
105
+ active.setFocus();
106
+ chainedOnSelectedChanged.call(viewRef, viewRef.selected, viewRef, active, lastSelected);
107
+ }
108
+ else {
109
+ setCursor(selected);
110
+ setSlice(items().slice(start(), end()));
111
+ queueMicrotask(() => {
112
+ viewRef.updateLayout();
113
+ active = viewRef.children.find(x => x.item === item);
114
+ if (active instanceof lng.ElementNode) {
115
+ viewRef.selected = viewRef.children.indexOf(active);
116
+ active.setFocus();
117
+ chainedOnSelectedChanged.call(viewRef, viewRef.selected, viewRef, active, lastSelected);
118
+ }
119
+ });
120
+ }
121
+ };
122
+ const scrollToIndex = (index) => {
123
+ s.untrack(() => updateSelected([index]));
124
+ };
125
+ s.createEffect(s.on([() => props.selected, items], updateSelected));
126
+ s.createEffect(s.on(items, () => {
127
+ if (!viewRef)
128
+ return;
129
+ if (cachedSelected !== undefined) {
130
+ updateSelected([cachedSelected]);
131
+ return;
132
+ }
133
+ setSlice(items().slice(start(), end()));
134
+ }, { defer: true }));
135
+ 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)}>
136
+ <List each={slice()}>{props.children}</List>
137
+ </view>);
138
+ }
139
+ //# 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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"}
@@ -0,0 +1,11 @@
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 VirtualListProps<T> = lng.NewOmit<lngp.RowProps, 'children'> & {
5
+ each: readonly T[] | undefined | null | false;
6
+ displaySize: number;
7
+ bufferSize?: number;
8
+ fallback?: s.JSX.Element;
9
+ children: (item: s.Accessor<T>, index: s.Accessor<number>) => s.JSX.Element;
10
+ };
11
+ export declare function VirtualList<T>(props: VirtualListProps<T>): s.JSX.Element;