@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.
- package/LICENSE +1 -1
- package/README.md +6 -0
- package/dist/src/activeElement.d.ts +1 -1
- package/dist/src/core/animation.d.ts +35 -0
- package/dist/src/core/animation.js +120 -0
- package/dist/src/core/animation.js.map +1 -0
- package/dist/src/core/config.d.ts +47 -0
- package/dist/src/core/config.js +23 -0
- package/dist/src/core/config.js.map +1 -0
- package/dist/src/core/domRenderer.d.ts +117 -0
- package/dist/src/core/domRenderer.js +1160 -0
- package/dist/src/core/domRenderer.js.map +1 -0
- package/dist/src/core/elementNode.d.ts +209 -0
- package/dist/src/core/elementNode.js +829 -0
- package/dist/src/core/elementNode.js.map +1 -0
- package/dist/src/core/flex.d.ts +2 -0
- package/dist/src/core/flex.js +243 -0
- package/dist/src/core/flex.js.map +1 -0
- package/dist/src/core/focusKeyTypes.d.ts +42 -0
- package/dist/src/core/focusKeyTypes.js +2 -0
- package/dist/src/core/focusKeyTypes.js.map +1 -0
- package/dist/src/core/focusManager.d.ts +13 -0
- package/dist/src/core/focusManager.js +269 -0
- package/dist/src/core/focusManager.js.map +1 -0
- package/dist/src/core/index.d.ts +12 -0
- package/dist/src/core/index.js +12 -0
- package/dist/src/core/index.js.map +1 -0
- package/dist/src/core/intrinsicTypes.d.ts +90 -0
- package/dist/src/core/intrinsicTypes.js +2 -0
- package/dist/src/core/intrinsicTypes.js.map +1 -0
- package/dist/src/core/lightningInit.d.ts +89 -0
- package/dist/src/core/lightningInit.js +26 -0
- package/dist/src/core/lightningInit.js.map +1 -0
- package/dist/src/core/nodeTypes.d.ts +6 -0
- package/dist/src/core/nodeTypes.js +6 -0
- package/dist/src/core/nodeTypes.js.map +1 -0
- package/dist/src/core/shaders.d.ts +51 -0
- package/dist/src/core/shaders.js +446 -0
- package/dist/src/core/shaders.js.map +1 -0
- package/dist/src/core/states.d.ts +12 -0
- package/dist/src/core/states.js +84 -0
- package/dist/src/core/states.js.map +1 -0
- package/dist/src/core/timings.d.ts +36 -0
- package/dist/src/core/timings.js +199 -0
- package/dist/src/core/timings.js.map +1 -0
- package/dist/src/core/utils.d.ts +39 -0
- package/dist/src/core/utils.js +164 -0
- package/dist/src/core/utils.js.map +1 -0
- package/dist/src/devtools/index.d.ts +1 -1
- package/dist/src/devtools/index.js +1 -1
- package/dist/src/devtools/index.js.map +1 -1
- package/dist/src/index.d.ts +3 -3
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/jsx-runtime.d.ts +1 -3
- package/dist/src/primitives/Column.jsx +9 -10
- package/dist/src/primitives/Column.jsx.map +1 -1
- package/dist/src/primitives/FPSCounter.jsx +14 -1
- package/dist/src/primitives/FPSCounter.jsx.map +1 -1
- package/dist/src/primitives/Grid.d.ts +15 -6
- package/dist/src/primitives/Grid.jsx +35 -22
- package/dist/src/primitives/Grid.jsx.map +1 -1
- package/dist/src/primitives/Image.d.ts +8 -0
- package/dist/src/primitives/Image.jsx +24 -0
- package/dist/src/primitives/Image.jsx.map +1 -0
- package/dist/src/primitives/KeepAlive.d.ts +30 -0
- package/dist/src/primitives/KeepAlive.jsx +77 -0
- package/dist/src/primitives/KeepAlive.jsx.map +1 -0
- package/dist/src/primitives/Lazy.d.ts +8 -7
- package/dist/src/primitives/Lazy.jsx +52 -23
- package/dist/src/primitives/Lazy.jsx.map +1 -1
- package/dist/src/primitives/Marquee.d.ts +64 -0
- package/dist/src/primitives/Marquee.jsx +86 -0
- package/dist/src/primitives/Marquee.jsx.map +1 -0
- package/dist/src/primitives/Preserve.d.ts +4 -0
- package/dist/src/primitives/Preserve.jsx +11 -0
- package/dist/src/primitives/Preserve.jsx.map +1 -0
- package/dist/src/primitives/Row.jsx +9 -10
- package/dist/src/primitives/Row.jsx.map +1 -1
- package/dist/src/primitives/Suspense.d.ts +22 -0
- package/dist/src/primitives/Suspense.jsx +33 -0
- package/dist/src/primitives/Suspense.jsx.map +1 -0
- package/dist/src/primitives/Virtual.d.ts +18 -0
- package/dist/src/primitives/Virtual.jsx +434 -0
- package/dist/src/primitives/Virtual.jsx.map +1 -0
- package/dist/src/primitives/VirtualGrid.d.ts +13 -0
- package/dist/src/primitives/VirtualGrid.jsx +160 -0
- package/dist/src/primitives/VirtualGrid.jsx.map +1 -0
- package/dist/src/primitives/VirtualList.d.ts +11 -0
- package/dist/src/primitives/VirtualList.jsx +96 -0
- package/dist/src/primitives/VirtualList.jsx.map +1 -0
- package/dist/src/primitives/VirtualRow.d.ts +13 -0
- package/dist/src/primitives/VirtualRow.jsx +97 -0
- package/dist/src/primitives/VirtualRow.jsx.map +1 -0
- package/dist/src/primitives/Visible.d.ts +0 -1
- package/dist/src/primitives/Visible.jsx +1 -1
- package/dist/src/primitives/Visible.jsx.map +1 -1
- package/dist/src/primitives/announcer/announcer.d.ts +2 -0
- package/dist/src/primitives/announcer/announcer.js +7 -5
- package/dist/src/primitives/announcer/announcer.js.map +1 -1
- package/dist/src/primitives/announcer/index.d.ts +5 -1
- package/dist/src/primitives/announcer/index.js +8 -2
- package/dist/src/primitives/announcer/index.js.map +1 -1
- package/dist/src/primitives/announcer/speech.d.ts +2 -2
- package/dist/src/primitives/announcer/speech.js +157 -28
- package/dist/src/primitives/announcer/speech.js.map +1 -1
- package/dist/src/primitives/createFocusStack.d.ts +4 -4
- package/dist/src/primitives/createFocusStack.jsx +15 -6
- package/dist/src/primitives/createFocusStack.jsx.map +1 -1
- package/dist/src/primitives/createTag.d.ts +8 -0
- package/dist/src/primitives/createTag.jsx +20 -0
- package/dist/src/primitives/createTag.jsx.map +1 -0
- package/dist/src/primitives/index.d.ts +14 -4
- package/dist/src/primitives/index.js +13 -3
- package/dist/src/primitives/index.js.map +1 -1
- package/dist/src/primitives/types.d.ts +5 -2
- package/dist/src/primitives/useFocusManager.d.ts +2 -2
- package/dist/src/primitives/useFocusManager.js +2 -2
- package/dist/src/primitives/useFocusManager.js.map +1 -1
- package/dist/src/primitives/useHold.d.ts +27 -0
- package/dist/src/primitives/useHold.js +54 -0
- package/dist/src/primitives/useHold.js.map +1 -0
- package/dist/src/primitives/useMouse.d.ts +18 -2
- package/dist/src/primitives/useMouse.js +171 -47
- package/dist/src/primitives/useMouse.js.map +1 -1
- package/dist/src/primitives/utils/chainFunctions.d.ts +30 -4
- package/dist/src/primitives/utils/chainFunctions.js +14 -3
- package/dist/src/primitives/utils/chainFunctions.js.map +1 -1
- package/dist/src/primitives/utils/createBlurredImage.d.ts +56 -0
- package/dist/src/primitives/utils/createBlurredImage.js +223 -0
- package/dist/src/primitives/utils/createBlurredImage.js.map +1 -0
- package/dist/src/primitives/utils/createSpriteMap.d.ts +2 -2
- package/dist/src/primitives/utils/createSpriteMap.js +1 -1
- package/dist/src/primitives/utils/createSpriteMap.js.map +1 -1
- package/dist/src/primitives/utils/handleNavigation.d.ts +79 -5
- package/dist/src/primitives/utils/handleNavigation.js +242 -69
- package/dist/src/primitives/utils/handleNavigation.js.map +1 -1
- package/dist/src/primitives/utils/withScrolling.d.ts +14 -2
- package/dist/src/primitives/utils/withScrolling.js +66 -7
- package/dist/src/primitives/utils/withScrolling.js.map +1 -1
- package/dist/src/render.d.ts +8 -7
- package/dist/src/render.js +5 -1
- package/dist/src/render.js.map +1 -1
- package/dist/src/solidOpts.d.ts +1 -7
- package/dist/src/solidOpts.js +32 -16
- package/dist/src/solidOpts.js.map +1 -1
- package/dist/src/types.d.ts +1 -13
- package/dist/src/universal.d.ts +25 -0
- package/dist/src/universal.js +232 -0
- package/dist/src/universal.js.map +1 -0
- package/dist/src/utils.d.ts +3 -1
- package/dist/src/utils.js +9 -1
- package/dist/src/utils.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/jsx-runtime.d.ts +2 -4
- package/package.json +17 -15
- package/src/activeElement.ts +1 -1
- package/src/core/animation.ts +183 -0
- package/src/core/config.ts +77 -0
- package/src/core/domRenderer.ts +1308 -0
- package/src/core/elementNode.ts +1198 -0
- package/src/core/flex.ts +284 -0
- package/src/core/focusKeyTypes.ts +87 -0
- package/src/core/focusManager.ts +359 -0
- package/src/core/index.ts +13 -0
- package/src/core/intrinsicTypes.ts +199 -0
- package/src/core/lightningInit.ts +147 -0
- package/src/core/nodeTypes.ts +6 -0
- package/src/core/shaders.ts +567 -0
- package/src/core/states.ts +91 -0
- package/src/core/timings.ts +261 -0
- package/src/core/utils.ts +222 -0
- package/src/devtools/index.ts +1 -1
- package/src/index.ts +3 -3
- package/src/primitives/Column.tsx +10 -12
- package/src/primitives/FPSCounter.tsx +15 -1
- package/src/primitives/Grid.tsx +57 -33
- package/src/primitives/Image.tsx +36 -0
- package/src/primitives/KeepAlive.tsx +124 -0
- package/src/primitives/Lazy.tsx +66 -37
- package/src/primitives/Marquee.tsx +149 -0
- package/src/primitives/Preserve.tsx +18 -0
- package/src/primitives/Row.tsx +13 -14
- package/src/primitives/Suspense.tsx +39 -0
- package/src/primitives/Virtual.tsx +478 -0
- package/src/primitives/VirtualGrid.tsx +220 -0
- package/src/primitives/Visible.tsx +1 -2
- package/src/primitives/announcer/announcer.ts +16 -10
- package/src/primitives/announcer/index.ts +12 -2
- package/src/primitives/announcer/speech.ts +188 -27
- package/src/primitives/createFocusStack.tsx +18 -7
- package/src/primitives/createTag.tsx +31 -0
- package/src/primitives/index.ts +18 -4
- package/src/primitives/types.ts +12 -2
- package/src/primitives/useFocusManager.ts +3 -3
- package/src/primitives/useHold.ts +69 -0
- package/src/primitives/useMouse.ts +306 -67
- package/src/primitives/utils/chainFunctions.ts +40 -9
- package/src/primitives/utils/createBlurredImage.ts +366 -0
- package/src/primitives/utils/createSpriteMap.ts +6 -4
- package/src/primitives/utils/handleNavigation.ts +300 -84
- package/src/primitives/utils/withScrolling.ts +91 -18
- package/src/render.ts +10 -8
- package/src/solidOpts.ts +31 -24
- package/src/types.ts +1 -15
- package/src/utils.ts +11 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createBlurredImage.js","sourceRoot":"","sources":["../../../../src/primitives/utils/createBlurredImage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type TextureMap } from '../../core/index.js';
|
|
2
2
|
export interface SpriteDef {
|
|
3
3
|
name: string | number;
|
|
4
4
|
x: number;
|
|
@@ -6,4 +6,4 @@ export interface SpriteDef {
|
|
|
6
6
|
width: number;
|
|
7
7
|
height: number;
|
|
8
8
|
}
|
|
9
|
-
export declare function createSpriteMap(src: string, subTextures: SpriteDef[]): Record<string,
|
|
9
|
+
export declare function createSpriteMap(src: string, subTextures: SpriteDef[]): Record<string, InstanceType<TextureMap['SubTexture']>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSpriteMap.js","sourceRoot":"","sources":["../../../../src/primitives/utils/createSpriteMap.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"createSpriteMap.js","sourceRoot":"","sources":["../../../../src/primitives/utils/createSpriteMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAUhE,MAAM,UAAU,eAAe,CAC7B,GAAW,EACX,WAAwB;IAExB,MAAM,gBAAgB,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,EAAE;QAC9D,GAAG;KACJ,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC,MAAM,CAEvB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACX,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;QAClC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,YAAY,EAAE;YACjD,OAAO,EAAE,gBAAgB;YACzB,CAAC;YACD,CAAC;YACD,KAAK;YACL,MAAM;SACP,CAA2C,CAAC;QAC7C,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC"}
|
|
@@ -1,5 +1,79 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
export declare function onGridFocus(
|
|
5
|
-
|
|
1
|
+
import * as lng from '../../index.js';
|
|
2
|
+
import * as lngp from '../index.js';
|
|
3
|
+
/** @deprecated Use {@link navigableForwardFocus} instead */
|
|
4
|
+
export declare function onGridFocus(_?: lngp.OnSelectedChanged): lng.ForwardFocusHandler;
|
|
5
|
+
/**
|
|
6
|
+
* Forwards focus to the first focusable child of a {@link lngp.NavigableElement} and
|
|
7
|
+
* selects it.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* <view
|
|
12
|
+
* selected={0}
|
|
13
|
+
* forwardFocus={navigableForwardFocus}
|
|
14
|
+
* onSelectedChanged={(idx, el, child, lastIdx) => {...}}
|
|
15
|
+
* >
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare const navigableForwardFocus: lng.ForwardFocusHandler;
|
|
19
|
+
export declare function handleNavigation(direction: 'up' | 'right' | 'down' | 'left'): lng.KeyHandler;
|
|
20
|
+
/**
|
|
21
|
+
* Handles navigation key events for navigable elements, \
|
|
22
|
+
* such as {@link lngp.Row} and {@link lngp.Column}.
|
|
23
|
+
*
|
|
24
|
+
* Uses {@link moveSelection} to select the next or previous child based on the key pressed.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```tsx
|
|
28
|
+
* <view
|
|
29
|
+
* selected={0}
|
|
30
|
+
* onUp={navigableHandleNavigation}
|
|
31
|
+
* onDown={navigableHandleNavigation}
|
|
32
|
+
* onSelectedChanged={(idx, el, child, lastIdx) => {...}}
|
|
33
|
+
* >
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare const navigableHandleNavigation: lng.KeyHandler;
|
|
37
|
+
/**
|
|
38
|
+
* Moves the selection within a {@link lngp.NavigableElement}.
|
|
39
|
+
*/
|
|
40
|
+
export declare function moveSelection(el: lngp.NavigableElement, delta: number): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Forwards focus to the closest or first focusable child of a {@link lngp.NavigableElement} and
|
|
43
|
+
* selects it.
|
|
44
|
+
*
|
|
45
|
+
* To determine the closest child, it uses the distance between the center of the previous focused element
|
|
46
|
+
* and the center of each child element.
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```tsx
|
|
50
|
+
* <view
|
|
51
|
+
* selected={0}
|
|
52
|
+
* forwardFocus={spatialForwardFocus}
|
|
53
|
+
* onSelectedChanged={(idx, el, child, lastIdx) => {...}}
|
|
54
|
+
* >
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare const spatialForwardFocus: lng.ForwardFocusHandler;
|
|
58
|
+
/**
|
|
59
|
+
* Handles spatial navigation within a {@link lngp.NavigableElement} by moving focus
|
|
60
|
+
* based on the arrow keys pressed.
|
|
61
|
+
*
|
|
62
|
+
* This function allows for navigation in a grid-like manner for flex-wrap containers, \
|
|
63
|
+
* where pressing the arrow keys will either:
|
|
64
|
+
* - move focus to the next/prev child in the same row/column
|
|
65
|
+
* - or find the closest child in the next/prev row/column.
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```tsx
|
|
69
|
+
* <view
|
|
70
|
+
* selected={0}
|
|
71
|
+
* display="flex"
|
|
72
|
+
* flexWrap="wrap"
|
|
73
|
+
* onUp={spatialHandleNavigation}
|
|
74
|
+
* onDown={spatialHandleNavigation}
|
|
75
|
+
* onSelectedChanged={(idx, el, child, lastIdx) => {...}}
|
|
76
|
+
* >
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export declare const spatialHandleNavigation: lng.KeyHandler;
|
|
@@ -1,81 +1,254 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
import * as s from 'solid-js';
|
|
2
|
+
import * as lng from '../../index.js';
|
|
3
|
+
function idxInArray(idx, arr) {
|
|
4
|
+
return idx === 0 || (idx >= 0 && idx < arr.length);
|
|
5
|
+
}
|
|
6
|
+
function findFirstFocusableChildIdx(el, from = 0, delta = 1) {
|
|
7
|
+
for (let i = from;; i += delta) {
|
|
8
|
+
if (!idxInArray(i, el.children)) {
|
|
9
|
+
if (el.wrap) {
|
|
10
|
+
i = (i + el.children.length) % el.children.length;
|
|
11
|
+
}
|
|
12
|
+
else
|
|
13
|
+
break;
|
|
13
14
|
}
|
|
14
|
-
if (!
|
|
15
|
-
return
|
|
16
|
-
child.setFocus();
|
|
17
|
-
if (onSelectedChanged) {
|
|
18
|
-
const grid = this;
|
|
19
|
-
onSelectedChanged.call(grid, grid.selected, grid, child);
|
|
15
|
+
if (!el.children[i]?.skipFocus) {
|
|
16
|
+
return i;
|
|
20
17
|
}
|
|
21
|
-
|
|
18
|
+
}
|
|
19
|
+
return -1;
|
|
20
|
+
}
|
|
21
|
+
function selectChild(el, index) {
|
|
22
|
+
const child = el.children[index];
|
|
23
|
+
if (child == null || child.skipFocus) {
|
|
24
|
+
el.selected = -1;
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
const lastSelected = el.selected;
|
|
28
|
+
el.selected = index;
|
|
29
|
+
if (!lng.isFocused(child)) {
|
|
30
|
+
child.setFocus();
|
|
31
|
+
}
|
|
32
|
+
// Always call onSelectedChanged on first focus for clients
|
|
33
|
+
el.onSelectedChanged?.(index, el, child, lastSelected);
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
/** @deprecated Use {@link navigableForwardFocus} instead */
|
|
37
|
+
export function onGridFocus(_) {
|
|
38
|
+
return function () {
|
|
39
|
+
return navigableForwardFocus.call(this, this);
|
|
22
40
|
};
|
|
23
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Forwards focus to the first focusable child of a {@link lngp.NavigableElement} and
|
|
44
|
+
* selects it.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```tsx
|
|
48
|
+
* <view
|
|
49
|
+
* selected={0}
|
|
50
|
+
* forwardFocus={navigableForwardFocus}
|
|
51
|
+
* onSelectedChanged={(idx, el, child, lastIdx) => {...}}
|
|
52
|
+
* >
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export const navigableForwardFocus = function () {
|
|
56
|
+
const navigable = this;
|
|
57
|
+
let selected = navigable.selected;
|
|
58
|
+
if (selected !== 0) {
|
|
59
|
+
selected = lng.clamp(selected, 0, this.children.length - 1);
|
|
60
|
+
while (!idxInArray(selected, this.children)) {
|
|
61
|
+
selected--;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
selected = findFirstFocusableChildIdx(navigable, selected);
|
|
65
|
+
// update selected as firstfocusable maybe different if first element has skipFocus
|
|
66
|
+
navigable.selected = selected;
|
|
67
|
+
return selectChild(navigable, selected);
|
|
68
|
+
};
|
|
24
69
|
export function handleNavigation(direction) {
|
|
25
70
|
return function () {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
71
|
+
return moveSelection(this, direction === 'up' || direction === 'left' ? -1 : 1);
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Handles navigation key events for navigable elements, \
|
|
76
|
+
* such as {@link lngp.Row} and {@link lngp.Column}.
|
|
77
|
+
*
|
|
78
|
+
* Uses {@link moveSelection} to select the next or previous child based on the key pressed.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```tsx
|
|
82
|
+
* <view
|
|
83
|
+
* selected={0}
|
|
84
|
+
* onUp={navigableHandleNavigation}
|
|
85
|
+
* onDown={navigableHandleNavigation}
|
|
86
|
+
* onSelectedChanged={(idx, el, child, lastIdx) => {...}}
|
|
87
|
+
* >
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
export const navigableHandleNavigation = function (e) {
|
|
91
|
+
return moveSelection(this, e.key === 'ArrowUp' || e.key === 'ArrowLeft' ? -1 : 1);
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Moves the selection within a {@link lngp.NavigableElement}.
|
|
95
|
+
*/
|
|
96
|
+
export function moveSelection(el, delta) {
|
|
97
|
+
let selected = findFirstFocusableChildIdx(el, el.selected + delta, delta);
|
|
98
|
+
if (selected === -1) {
|
|
99
|
+
if (!idxInArray(el.selected, el.children) ||
|
|
100
|
+
el.children[el.selected]?.skipFocus ||
|
|
101
|
+
lng.isFocused(el.children[el.selected])) {
|
|
30
102
|
return false;
|
|
31
103
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
104
|
+
selected = el.selected;
|
|
105
|
+
}
|
|
106
|
+
const active = el.children[selected];
|
|
107
|
+
if (el.plinko) {
|
|
108
|
+
// Set the next item to have the same selected index
|
|
109
|
+
// so we move up / down directly
|
|
110
|
+
const lastSelectedChild = el.children[el.selected];
|
|
111
|
+
lng.assertTruthy(lastSelectedChild instanceof lng.ElementNode);
|
|
112
|
+
const num = lastSelectedChild.selected || 0;
|
|
113
|
+
active.selected =
|
|
114
|
+
num < active.children.length ? num : active.children.length - 1;
|
|
115
|
+
}
|
|
116
|
+
return selectChild(el, selected);
|
|
117
|
+
}
|
|
118
|
+
function distanceBetweenRectCenters(a, b) {
|
|
119
|
+
const dx = Math.abs(a.x + a.width / 2 - (b.x + b.width / 2)) / 2;
|
|
120
|
+
const dy = Math.abs(a.y + a.height / 2 - (b.y + b.height / 2)) / 2;
|
|
121
|
+
return Math.sqrt(dx * dx + dy * dy);
|
|
122
|
+
}
|
|
123
|
+
function findClosestFocusableChildIdx(el, prevEl) {
|
|
124
|
+
// select child closest to the previous active element
|
|
125
|
+
const prevRect = lng.getElementScreenRect(prevEl);
|
|
126
|
+
const elRect = lng.getElementScreenRect(el);
|
|
127
|
+
const childRect = { x: 0, y: 0, width: 0, height: 0 };
|
|
128
|
+
let closestIdx = -1;
|
|
129
|
+
let closestDist = Infinity;
|
|
130
|
+
for (const [idx, child] of el.children.entries()) {
|
|
131
|
+
if (!child.skipFocus) {
|
|
132
|
+
lng.getElementScreenRect(child, el, childRect);
|
|
133
|
+
childRect.x += elRect.x;
|
|
134
|
+
childRect.y += elRect.y;
|
|
135
|
+
const distance = distanceBetweenRectCenters(prevRect, childRect);
|
|
136
|
+
if (distance < closestDist) {
|
|
137
|
+
closestDist = distance;
|
|
138
|
+
closestIdx = idx;
|
|
61
139
|
}
|
|
62
140
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
const navigableThis = this;
|
|
66
|
-
navigableThis.onSelectedChanged &&
|
|
67
|
-
navigableThis.onSelectedChanged.call(navigableThis, navigableThis.selected, navigableThis, active, lastSelected);
|
|
68
|
-
if (this.plinko) {
|
|
69
|
-
// Set the next item to have the same selected index
|
|
70
|
-
// so we move up / down directly
|
|
71
|
-
const lastSelectedChild = this.children[lastSelected];
|
|
72
|
-
assertTruthy(lastSelectedChild instanceof ElementNode);
|
|
73
|
-
const num = lastSelectedChild.selected || 0;
|
|
74
|
-
active.selected =
|
|
75
|
-
num < active.children.length ? num : active.children.length - 1;
|
|
76
|
-
}
|
|
77
|
-
active.setFocus();
|
|
78
|
-
return true;
|
|
79
|
-
};
|
|
141
|
+
}
|
|
142
|
+
return closestIdx;
|
|
80
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* Forwards focus to the closest or first focusable child of a {@link lngp.NavigableElement} and
|
|
146
|
+
* selects it.
|
|
147
|
+
*
|
|
148
|
+
* To determine the closest child, it uses the distance between the center of the previous focused element
|
|
149
|
+
* and the center of each child element.
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* ```tsx
|
|
153
|
+
* <view
|
|
154
|
+
* selected={0}
|
|
155
|
+
* forwardFocus={spatialForwardFocus}
|
|
156
|
+
* onSelectedChanged={(idx, el, child, lastIdx) => {...}}
|
|
157
|
+
* >
|
|
158
|
+
* ```
|
|
159
|
+
*/
|
|
160
|
+
export const spatialForwardFocus = function () {
|
|
161
|
+
const prevEl = s.untrack(lng.activeElement);
|
|
162
|
+
if (prevEl) {
|
|
163
|
+
const idx = findClosestFocusableChildIdx(this, prevEl);
|
|
164
|
+
const selected = selectChild(this, idx);
|
|
165
|
+
if (selected)
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
const idx = findFirstFocusableChildIdx(this);
|
|
169
|
+
return selectChild(this, idx);
|
|
170
|
+
};
|
|
171
|
+
/**
|
|
172
|
+
* Handles spatial navigation within a {@link lngp.NavigableElement} by moving focus
|
|
173
|
+
* based on the arrow keys pressed.
|
|
174
|
+
*
|
|
175
|
+
* This function allows for navigation in a grid-like manner for flex-wrap containers, \
|
|
176
|
+
* where pressing the arrow keys will either:
|
|
177
|
+
* - move focus to the next/prev child in the same row/column
|
|
178
|
+
* - or find the closest child in the next/prev row/column.
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```tsx
|
|
182
|
+
* <view
|
|
183
|
+
* selected={0}
|
|
184
|
+
* display="flex"
|
|
185
|
+
* flexWrap="wrap"
|
|
186
|
+
* onUp={spatialHandleNavigation}
|
|
187
|
+
* onDown={spatialHandleNavigation}
|
|
188
|
+
* onSelectedChanged={(idx, el, child, lastIdx) => {...}}
|
|
189
|
+
* >
|
|
190
|
+
* ```
|
|
191
|
+
*/
|
|
192
|
+
export const spatialHandleNavigation = function (e) {
|
|
193
|
+
let selected = this.selected;
|
|
194
|
+
if (typeof selected !== 'number' || !idxInArray(selected, this.children)) {
|
|
195
|
+
selected = findFirstFocusableChildIdx(this);
|
|
196
|
+
return selectChild(this, selected);
|
|
197
|
+
}
|
|
198
|
+
const prevChild = this.children[selected];
|
|
199
|
+
const move = { x: 0, y: 0 };
|
|
200
|
+
switch (e.key) {
|
|
201
|
+
case 'ArrowLeft':
|
|
202
|
+
move.x = -1;
|
|
203
|
+
break;
|
|
204
|
+
case 'ArrowRight':
|
|
205
|
+
move.x = 1;
|
|
206
|
+
break;
|
|
207
|
+
case 'ArrowUp':
|
|
208
|
+
move.y = -1;
|
|
209
|
+
break;
|
|
210
|
+
case 'ArrowDown':
|
|
211
|
+
move.y = 1;
|
|
212
|
+
break;
|
|
213
|
+
default:
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
const flexDir = this.flexDirection === 'column' ? 'y' : 'x';
|
|
217
|
+
const crossDir = flexDir === 'x' ? 'y' : 'x';
|
|
218
|
+
const flexDelta = move[flexDir];
|
|
219
|
+
const crossDelta = move[crossDir];
|
|
220
|
+
// Select next/prev child in the current column/row
|
|
221
|
+
if (flexDelta !== 0) {
|
|
222
|
+
for (let i = selected + flexDelta; idxInArray(i, this.children); i += flexDelta) {
|
|
223
|
+
const child = this.children[i];
|
|
224
|
+
if (child.skipFocus)
|
|
225
|
+
continue;
|
|
226
|
+
// Different column/row
|
|
227
|
+
if (child[crossDir] !== prevChild[crossDir])
|
|
228
|
+
break;
|
|
229
|
+
return selectChild(this, i);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// Find child in next/prev column/row
|
|
233
|
+
else {
|
|
234
|
+
let closestIdx = -1;
|
|
235
|
+
let closestDist = Infinity;
|
|
236
|
+
for (let i = selected + crossDelta; idxInArray(i, this.children); i += crossDelta) {
|
|
237
|
+
const child = this.children[i];
|
|
238
|
+
if (child.skipFocus)
|
|
239
|
+
continue;
|
|
240
|
+
// Same column/row, skip
|
|
241
|
+
if (child[crossDir] === prevChild[crossDir])
|
|
242
|
+
continue;
|
|
243
|
+
// Different column/row, check distance
|
|
244
|
+
const distance = Math.abs(child[flexDir] - prevChild[flexDir]);
|
|
245
|
+
if (distance >= closestDist)
|
|
246
|
+
break; // getting further away
|
|
247
|
+
closestDist = distance;
|
|
248
|
+
closestIdx = i;
|
|
249
|
+
}
|
|
250
|
+
return selectChild(this, closestIdx);
|
|
251
|
+
}
|
|
252
|
+
return false;
|
|
253
|
+
};
|
|
81
254
|
//# sourceMappingURL=handleNavigation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleNavigation.js","sourceRoot":"","sources":["../../../../src/primitives/utils/handleNavigation.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"handleNavigation.js","sourceRoot":"","sources":["../../../../src/primitives/utils/handleNavigation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,22 @@
|
|
|
1
|
-
import type { ElementNode, ElementText } from '
|
|
1
|
+
import type { ElementNode, ElementText } from '../../core/index.js';
|
|
2
|
+
export type Scroller = (selected: number | ElementNode, component?: ElementNode, selectedElement?: ElementNode | ElementText, lastSelected?: number) => void;
|
|
2
3
|
export interface ScrollableElement extends ElementNode {
|
|
3
4
|
scrollIndex?: number;
|
|
5
|
+
scroll?: 'always' | 'none' | 'edge' | 'auto' | 'center' | 'bounded';
|
|
4
6
|
selected: number;
|
|
5
7
|
offset?: number;
|
|
6
8
|
endOffset?: number;
|
|
9
|
+
upCount?: number;
|
|
10
|
+
onScrolled?: (elm: ScrollableElement, offset: number, isInitial: boolean) => void;
|
|
7
11
|
_targetPosition?: number;
|
|
8
12
|
_screenOffset?: number;
|
|
13
|
+
_initialPosition?: number;
|
|
9
14
|
}
|
|
10
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Checks if the selected index is in the non-scrollable zone (last upCount items).
|
|
17
|
+
*/
|
|
18
|
+
export declare function checkIsInNonScrollableZone(componentRef: ScrollableElement): boolean;
|
|
19
|
+
/** @deprecated Use {@link scrollRow} or {@link scrollColumn} */
|
|
20
|
+
export declare function withScrolling(isRow: boolean): Scroller;
|
|
21
|
+
export declare const scrollRow: Scroller;
|
|
22
|
+
export declare const scrollColumn: Scroller;
|
|
@@ -8,6 +8,17 @@ const isNotShown = (node) => {
|
|
|
8
8
|
Edge starts scrolling when it reaches the edge of the viewport.
|
|
9
9
|
Always scroll moves the list every time
|
|
10
10
|
*/
|
|
11
|
+
/**
|
|
12
|
+
* Checks if the selected index is in the non-scrollable zone (last upCount items).
|
|
13
|
+
*/
|
|
14
|
+
export function checkIsInNonScrollableZone(componentRef) {
|
|
15
|
+
const totalItems = componentRef.children.length;
|
|
16
|
+
const upCount = componentRef.upCount || 6;
|
|
17
|
+
const selected = componentRef.selected || 0;
|
|
18
|
+
const nonScrollableZoneStart = Math.max(0, totalItems - upCount);
|
|
19
|
+
return selected >= nonScrollableZoneStart;
|
|
20
|
+
}
|
|
21
|
+
/** @deprecated Use {@link scrollRow} or {@link scrollColumn} */
|
|
11
22
|
export function withScrolling(isRow) {
|
|
12
23
|
const dimension = isRow ? 'width' : 'height';
|
|
13
24
|
const axis = isRow ? 'x' : 'y';
|
|
@@ -19,17 +30,22 @@ export function withScrolling(isRow) {
|
|
|
19
30
|
}
|
|
20
31
|
if (!componentRef ||
|
|
21
32
|
componentRef.scroll === 'none' ||
|
|
33
|
+
selected === lastSelected ||
|
|
22
34
|
!componentRef.children.length)
|
|
23
35
|
return;
|
|
36
|
+
if (componentRef._initialPosition === undefined) {
|
|
37
|
+
componentRef._initialPosition = componentRef[axis];
|
|
38
|
+
}
|
|
24
39
|
const lng = componentRef.lng;
|
|
25
|
-
const screenSize = isRow ? lng.stage.root.
|
|
40
|
+
const screenSize = isRow ? lng.stage.root.w : lng.stage.root.h;
|
|
26
41
|
// Determine if movement is incremental or decremental
|
|
27
42
|
const isIncrementing = lastSelected === undefined || lastSelected - 1 !== selected;
|
|
28
43
|
if (componentRef._screenOffset === undefined) {
|
|
29
44
|
if (componentRef.parent.clipping) {
|
|
30
45
|
const p = componentRef.parent;
|
|
31
46
|
componentRef.endOffset =
|
|
32
|
-
|
|
47
|
+
componentRef.endOffset ??
|
|
48
|
+
screenSize - ((isRow ? p.absX : p.absY) || 0) - p[dimension];
|
|
33
49
|
}
|
|
34
50
|
componentRef._screenOffset =
|
|
35
51
|
componentRef.offset ??
|
|
@@ -37,10 +53,16 @@ export function withScrolling(isRow) {
|
|
|
37
53
|
}
|
|
38
54
|
const screenOffset = componentRef._screenOffset;
|
|
39
55
|
const gap = componentRef.gap || 0;
|
|
40
|
-
|
|
56
|
+
// when creating we set scroll to always so we setup the right location for selected and scrollIndex
|
|
57
|
+
const scroll = componentRef.scroll ||
|
|
58
|
+
(lastSelected === undefined
|
|
59
|
+
? componentRef.scrollIndex
|
|
60
|
+
? 'center'
|
|
61
|
+
: 'always'
|
|
62
|
+
: 'auto');
|
|
41
63
|
// Allows manual position control
|
|
42
64
|
const targetPosition = componentRef._targetPosition ?? componentRef[axis];
|
|
43
|
-
const rootPosition = isIncrementing
|
|
65
|
+
const rootPosition = isIncrementing
|
|
44
66
|
? Math.min(targetPosition, componentRef[axis])
|
|
45
67
|
: Math.max(targetPosition, componentRef[axis]);
|
|
46
68
|
componentRef.offset = componentRef.offset ?? rootPosition;
|
|
@@ -61,7 +83,7 @@ export function withScrolling(isRow) {
|
|
|
61
83
|
const maxOffset = Math.min(screenSize -
|
|
62
84
|
containerSize -
|
|
63
85
|
screenOffset -
|
|
64
|
-
(componentRef.endOffset
|
|
86
|
+
(componentRef.endOffset ?? 2 * gap), offset);
|
|
65
87
|
// Determine the next element based on whether incrementing or decrementing
|
|
66
88
|
const nextIndex = isIncrementing ? selected + 1 : selected - 1;
|
|
67
89
|
const nextElement = componentRef.children[nextIndex] || null;
|
|
@@ -74,6 +96,37 @@ export function withScrolling(isRow) {
|
|
|
74
96
|
else if (scroll === 'always') {
|
|
75
97
|
nextPosition = -selectedPosition + offset;
|
|
76
98
|
}
|
|
99
|
+
else if (scroll === 'bounded') {
|
|
100
|
+
const totalItems = componentRef.children.length;
|
|
101
|
+
const upCount = componentRef.upCount || 6;
|
|
102
|
+
const nonScrollableZoneStart = Math.max(0, totalItems - upCount);
|
|
103
|
+
const isInNonScrollableZone = selected >= nonScrollableZoneStart;
|
|
104
|
+
const isFirstOfNonScrollableZone = selected === nonScrollableZoneStart;
|
|
105
|
+
const isEnteringZone = isFirstOfNonScrollableZone &&
|
|
106
|
+
lastSelected !== undefined &&
|
|
107
|
+
lastSelected < nonScrollableZoneStart;
|
|
108
|
+
if (!isInNonScrollableZone) {
|
|
109
|
+
nextPosition = -selectedPosition + offset;
|
|
110
|
+
}
|
|
111
|
+
else if (isIncrementing) {
|
|
112
|
+
if (isEnteringZone) {
|
|
113
|
+
const firstOfZoneElement = componentRef.children[nonScrollableZoneStart];
|
|
114
|
+
const firstOfZonePosition = firstOfZoneElement?.[axis] ?? 0;
|
|
115
|
+
nextPosition = firstOfZoneElement
|
|
116
|
+
? -firstOfZonePosition + offset
|
|
117
|
+
: rootPosition;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
nextPosition = rootPosition;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else if (isFirstOfNonScrollableZone) {
|
|
124
|
+
nextPosition = -selectedPosition + offset;
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
nextPosition = rootPosition;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
77
130
|
else if (scroll === 'center') {
|
|
78
131
|
const centerPosition = -selectedPosition +
|
|
79
132
|
(screenSize - selectedSizeScaled) / 2 -
|
|
@@ -99,7 +152,7 @@ export function withScrolling(isRow) {
|
|
|
99
152
|
}
|
|
100
153
|
}
|
|
101
154
|
else if (isIncrementing) {
|
|
102
|
-
nextPosition = -
|
|
155
|
+
nextPosition = rootPosition - selectedSize - gap;
|
|
103
156
|
}
|
|
104
157
|
else {
|
|
105
158
|
nextPosition = rootPosition + selectedSize + gap;
|
|
@@ -113,15 +166,21 @@ export function withScrolling(isRow) {
|
|
|
113
166
|
}
|
|
114
167
|
// Prevent container from moving beyond bounds
|
|
115
168
|
nextPosition =
|
|
116
|
-
isIncrementing && scroll !== 'always'
|
|
169
|
+
isIncrementing && scroll !== 'always' && scroll !== 'bounded'
|
|
117
170
|
? Math.max(nextPosition, maxOffset)
|
|
118
171
|
: Math.min(nextPosition, offset);
|
|
119
172
|
// Update position if it has changed
|
|
120
173
|
if (componentRef[axis] !== nextPosition) {
|
|
174
|
+
if (componentRef.onScrolled) {
|
|
175
|
+
const isInitial = nextPosition === componentRef._initialPosition;
|
|
176
|
+
componentRef.onScrolled(componentRef, nextPosition, isInitial);
|
|
177
|
+
}
|
|
121
178
|
componentRef[axis] = nextPosition;
|
|
122
179
|
// Store the new position to keep track during animations
|
|
123
180
|
componentRef._targetPosition = nextPosition;
|
|
124
181
|
}
|
|
125
182
|
};
|
|
126
183
|
}
|
|
184
|
+
export const scrollRow = /* @__PURE__ */ withScrolling(true);
|
|
185
|
+
export const scrollColumn = /* @__PURE__ */ withScrolling(false);
|
|
127
186
|
//# sourceMappingURL=withScrolling.js.map
|