@lightningtv/solid 3.0.0-13 → 3.0.0-15
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/dist/src/primitives/Column.jsx +2 -4
- package/dist/src/primitives/Column.jsx.map +1 -1
- package/dist/src/primitives/KeepAlive.d.ts +16 -0
- package/dist/src/primitives/KeepAlive.jsx +46 -0
- package/dist/src/primitives/KeepAlive.jsx.map +1 -0
- package/dist/src/primitives/Lazy.jsx +2 -2
- package/dist/src/primitives/Lazy.jsx.map +1 -1
- package/dist/src/primitives/Row.jsx +2 -4
- package/dist/src/primitives/Row.jsx.map +1 -1
- package/dist/src/primitives/Suspense.jsx +1 -1
- package/dist/src/primitives/Suspense.jsx.map +1 -1
- package/dist/src/primitives/index.d.ts +1 -1
- package/dist/src/primitives/index.js +1 -1
- package/dist/src/primitives/index.js.map +1 -1
- package/dist/src/primitives/utils/handleNavigation.d.ts +86 -5
- package/dist/src/primitives/utils/handleNavigation.js +244 -79
- package/dist/src/primitives/utils/handleNavigation.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/primitives/Column.tsx +4 -7
- package/src/primitives/Lazy.tsx +4 -2
- package/src/primitives/Row.tsx +5 -8
- package/src/primitives/Suspense.tsx +1 -1
- package/src/primitives/index.ts +1 -1
- package/src/primitives/utils/handleNavigation.ts +308 -94
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { combineStyles } from '@lightningtv/solid';
|
|
2
|
-
import {
|
|
2
|
+
import { navigableForwardFocus, navigableHandleNavigation } from './utils/handleNavigation.js';
|
|
3
3
|
import { withScrolling } from './utils/withScrolling.js';
|
|
4
4
|
import { chainFunctions } from './utils/chainFunctions.js';
|
|
5
5
|
const ColumnStyles = {
|
|
@@ -13,8 +13,6 @@ const ColumnStyles = {
|
|
|
13
13
|
},
|
|
14
14
|
},
|
|
15
15
|
};
|
|
16
|
-
const onUp = handleNavigation('up');
|
|
17
|
-
const onDown = handleNavigation('down');
|
|
18
16
|
const scroll = withScrolling(false);
|
|
19
17
|
function scrollToIndex(index) {
|
|
20
18
|
this.selected = index;
|
|
@@ -22,7 +20,7 @@ function scrollToIndex(index) {
|
|
|
22
20
|
this.children[index]?.setFocus();
|
|
23
21
|
}
|
|
24
22
|
export const Column = (props) => {
|
|
25
|
-
return (<view {...props} onUp={/* @once */chainFunctions(props.onUp,
|
|
23
|
+
return (<view {...props} onUp={/* @once */chainFunctions(props.onUp, navigableHandleNavigation)} onDown={/* @once */chainFunctions(props.onDown, navigableHandleNavigation)} selected={props.selected || 0} scrollToIndex={scrollToIndex} forwardFocus={navigableForwardFocus} onLayout={
|
|
26
24
|
/* @once */
|
|
27
25
|
props.selected ? chainFunctions(props.onLayout, scroll) : props.onLayout} onSelectedChanged={
|
|
28
26
|
/* @once */ chainFunctions(props.onSelectedChanged, props.scroll !== 'none' ? scroll : undefined)} style={/* @once */combineStyles(props.style, ColumnStyles)}/>);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Column.jsx","sourceRoot":"","sources":["../../../src/primitives/Column.tsx"],"names":[],"mappings":"AACA,OAAO,EAAe,aAAa,EAAmB,MAAM,oBAAoB,CAAC;AACjF,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"Column.jsx","sourceRoot":"","sources":["../../../src/primitives/Column.tsx"],"names":[],"mappings":"AACA,OAAO,EAAe,aAAa,EAAmB,MAAM,oBAAoB,CAAC;AACjF,OAAO,EACL,qBAAqB,EAAE,yBAAyB,EACjD,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D,MAAM,YAAY,GAAe;IAC/B,OAAO,EAAE,MAAM;IACf,aAAa,EAAE,QAAQ;IACvB,GAAG,EAAE,EAAE;IACP,UAAU,EAAE;QACV,CAAC,EAAE;YACD,QAAQ,EAAE,GAAG;YACb,MAAM,EAAE,aAAa;SACtB;KACF;CACF,CAAC;AAEF,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;AAEpC,SAAS,aAAa,CAAoB,KAAa;IACrD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACtB,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAA2B,CAAC,KAAK,EAAE,EAAE;IACtD,OAAO,CACL,CAAC,IAAI,CACH,IAAI,KAAK,CAAC,CACV,IAAI,CAAC,CAAC,WAAY,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC,CACxE,MAAM,CAAC,CAAC,WAAY,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAC5E,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,CAC9B,aAAa,CAAC,CAAC,aAAa,CAAC,CAC7B,YAAY,CAAC,CAAC,qBAAqB,CAAC,CACpC,QAAQ,CAAC,CAAC;QACR,WAAW;QACX,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAClE,CAAC,CACD,iBAAiB,CAAC,CAAC;QACjB,WAAW,CAAC,cAAc,CACxB,KAAK,CAAC,iBAAiB,EACvB,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAEhD,CAAC,CACD,KAAK,CAAC,CAAC,WAAY,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,EAC5D,CACH,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as s from 'solid-js';
|
|
2
|
+
export interface KeepAliveElement {
|
|
3
|
+
id: string;
|
|
4
|
+
owner: s.Owner | null;
|
|
5
|
+
children: s.JSX.Element;
|
|
6
|
+
dispose: () => void;
|
|
7
|
+
}
|
|
8
|
+
export declare const storeElement: (element: KeepAliveElement) => KeepAliveElement | undefined;
|
|
9
|
+
export declare const removeElement: (id: string) => void;
|
|
10
|
+
interface KeepAliveProps {
|
|
11
|
+
id: string;
|
|
12
|
+
onDispose?: () => void;
|
|
13
|
+
}
|
|
14
|
+
export declare const KeepAlive: (props: s.ParentProps<KeepAliveProps>) => () => s.JSX.Element;
|
|
15
|
+
export declare const KeepAliveRoute: (Component: s.Component) => (props: s.ParentProps) => s.JSX.Element;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import * as s from 'solid-js';
|
|
2
|
+
const keepAliveElements = new Map();
|
|
3
|
+
export const storeElement = (element) => {
|
|
4
|
+
if (keepAliveElements.has(element.id)) {
|
|
5
|
+
console.warn(`[KeepAlive] Element with id "${element.id}" already in cache. Recreating.`);
|
|
6
|
+
removeElement(element.id);
|
|
7
|
+
}
|
|
8
|
+
keepAliveElements.set(element.id, element);
|
|
9
|
+
return element;
|
|
10
|
+
};
|
|
11
|
+
export const removeElement = (id) => {
|
|
12
|
+
const element = keepAliveElements.get(id);
|
|
13
|
+
if (element) {
|
|
14
|
+
element.dispose();
|
|
15
|
+
keepAliveElements.delete(id);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
export const KeepAlive = (props) => {
|
|
19
|
+
const existing = keepAliveElements.get(props.id);
|
|
20
|
+
if (!existing) {
|
|
21
|
+
s.createRoot((dispose) => {
|
|
22
|
+
storeElement({
|
|
23
|
+
id: props.id,
|
|
24
|
+
owner: s.getOwner(),
|
|
25
|
+
children: (<view preserve forwardFocus={0} onRemove={(elm) => (elm.alpha = 0)} onRender={(elm) => {
|
|
26
|
+
elm.alpha = 1;
|
|
27
|
+
elm.setFocus();
|
|
28
|
+
}} transition={{ alpha: true }} {...props}/>),
|
|
29
|
+
dispose,
|
|
30
|
+
});
|
|
31
|
+
s.onCleanup(() => props.onDispose?.());
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
return () => {
|
|
35
|
+
const current = keepAliveElements.get(props.id);
|
|
36
|
+
return current?.owner
|
|
37
|
+
? s.runWithOwner(current.owner, () => current.children)
|
|
38
|
+
: null;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
export const KeepAliveRoute = (Component) => {
|
|
42
|
+
return (props) => (<KeepAlive id="browse">
|
|
43
|
+
<Component {...props}/>
|
|
44
|
+
</KeepAlive>);
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=KeepAlive.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeepAlive.jsx","sourceRoot":"","sources":["../../../src/primitives/KeepAlive.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAS9B,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAA4B,CAAC;AAE9D,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,OAAyB,EACK,EAAE;IAChC,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,gCAAgC,OAAO,CAAC,EAAE,iCAAiC,CAAC,CAAC;QAC1F,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IACD,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC3C,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAU,EAAQ,EAAE;IAChD,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC,CAAC;AAOF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAoC,EAAE,EAAE;IAChE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAEhD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,EAAE;YACvB,YAAY,CAAC;gBACX,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE;gBACnB,QAAQ,EAAE,CACR,CAAC,IAAI,CACH,QAAQ,CACR,YAAY,CAAC,CAAC,CAAC,CAAC,CAChB,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CACnC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE;wBAChB,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;wBACd,GAAG,CAAC,QAAQ,EAAE,CAAC;oBACjB,CAAC,CAAC,CACF,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAC5B,IAAI,KAAK,CAAC,EACV,CACH;gBACD,OAAO;aACR,CAAC,CAAC;YACH,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,GAAG,EAAE;QACV,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChD,OAAO,OAAO,EAAE,KAAK;YACnB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;YACvD,CAAC,CAAC,IAAI,CAAC;IACX,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAAsB,EAAE,EAAE;IACvD,OAAO,CAAC,KAAoB,EAAE,EAAE,CAAC,CAC/B,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CACpB;MAAA,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,EACvB;IAAA,EAAE,SAAS,CAAC,CACb,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -5,18 +5,18 @@ function createLazy(component, props, keyHandler) {
|
|
|
5
5
|
// Need at least one item so it can be focused
|
|
6
6
|
const [offset, setOffset] = createSignal(props.sync ? props.upCount : 0);
|
|
7
7
|
let timeoutId = null;
|
|
8
|
-
createRenderEffect(() => setOffset(offset => Math.max(offset, (props.selected || 0) + 1)));
|
|
9
8
|
const buffer = createMemo(() => {
|
|
10
9
|
if (typeof props.buffer === 'number') {
|
|
11
10
|
return props.buffer;
|
|
12
11
|
}
|
|
13
12
|
const scroll = props.scroll || props.style?.scroll;
|
|
14
|
-
if (scroll === 'always')
|
|
13
|
+
if (!scroll || scroll === 'auto' || scroll === 'always')
|
|
15
14
|
return props.upCount;
|
|
16
15
|
if (scroll === 'center')
|
|
17
16
|
return Math.ceil(props.upCount / 2);
|
|
18
17
|
return 2;
|
|
19
18
|
});
|
|
19
|
+
createRenderEffect(() => setOffset(offset => Math.max(offset, (props.selected || 0) + buffer())));
|
|
20
20
|
if (!props.sync || props.eaglerLoad) {
|
|
21
21
|
createEffect(() => {
|
|
22
22
|
if (props.each) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Lazy.jsx","sourceRoot":"","sources":["../../../src/primitives/Lazy.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,YAAY,
|
|
1
|
+
{"version":3,"file":"Lazy.jsx","sourceRoot":"","sources":["../../../src/primitives/Lazy.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { combineStyles } from '@lightningtv/solid';
|
|
2
2
|
import { chainFunctions } from './utils/chainFunctions.js';
|
|
3
|
-
import {
|
|
3
|
+
import { navigableForwardFocus, navigableHandleNavigation } from './utils/handleNavigation.js';
|
|
4
4
|
import { withScrolling } from './utils/withScrolling.js';
|
|
5
5
|
const RowStyles = {
|
|
6
6
|
display: 'flex',
|
|
@@ -12,8 +12,6 @@ const RowStyles = {
|
|
|
12
12
|
},
|
|
13
13
|
},
|
|
14
14
|
};
|
|
15
|
-
const onLeft = handleNavigation('left');
|
|
16
|
-
const onRight = handleNavigation('right');
|
|
17
15
|
const scroll = withScrolling(true);
|
|
18
16
|
function scrollToIndex(index) {
|
|
19
17
|
this.selected = index;
|
|
@@ -21,7 +19,7 @@ function scrollToIndex(index) {
|
|
|
21
19
|
this.children[index]?.setFocus();
|
|
22
20
|
}
|
|
23
21
|
export const Row = (props) => {
|
|
24
|
-
return (<view {...props} selected={props.selected || 0} onLeft={/* @once */chainFunctions(props.onLeft,
|
|
22
|
+
return (<view {...props} selected={props.selected || 0} onLeft={/* @once */chainFunctions(props.onLeft, navigableHandleNavigation)} onRight={/* @once */chainFunctions(props.onRight, navigableHandleNavigation)} forwardFocus={navigableForwardFocus} scrollToIndex={scrollToIndex} onLayout={
|
|
25
23
|
/* @once */
|
|
26
24
|
props.selected ? chainFunctions(props.onLayout, scroll) : props.onLayout} onSelectedChanged={
|
|
27
25
|
/* @once */ chainFunctions(props.onSelectedChanged, props.scroll !== 'none' ? scroll : undefined)} style={/* @once */combineStyles(props.style, RowStyles)}/>);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Row.jsx","sourceRoot":"","sources":["../../../src/primitives/Row.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"Row.jsx","sourceRoot":"","sources":["../../../src/primitives/Row.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAqC,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EACL,qBAAqB,EAAE,yBAAyB,EACjD,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,MAAM,SAAS,GAAe;IAC5B,OAAO,EAAE,MAAM;IACf,GAAG,EAAE,EAAE;IACP,UAAU,EAAE;QACV,CAAC,EAAE;YACD,QAAQ,EAAE,GAAG;YACb,MAAM,EAAE,aAAa;SACtB;KACF;CACF,CAAC;AAEF,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;AAEnC,SAAS,aAAa,CAAoB,KAAa;IACrD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACtB,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAwB,CAAC,KAAK,EAAE,EAAE;IAChD,OAAO,CACL,CAAC,IAAI,CACH,IAAI,KAAK,CAAC,CACV,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,CAC9B,MAAM,CAAC,CAAC,WAAY,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAC5E,OAAO,CAAC,CAAC,WAAY,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC,CAC9E,YAAY,CAAC,CAAC,qBAAqB,CAAC,CACpC,aAAa,CAAC,CAAC,aAAa,CAAC,CAC7B,QAAQ,CAAC,CAAC;QACR,WAAW;QACX,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAClE,CAAC,CACD,iBAAiB,CAAC,CAAC;QACjB,WAAW,CAAC,cAAc,CACxB,KAAK,CAAC,iBAAiB,EACvB,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAEhD,CAAC,CACD,KAAK,CAAC,CAAC,WAAY,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EACzD,CACH,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Suspense.jsx","sourceRoot":"","sources":["../../../src/primitives/Suspense.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAE9B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,QAAQ,CAAC,KAGxB;IAEC,IAAI,QAAuB,CAAC;IAE5B,IAAI,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;QACxB,IAAI,QAAQ;YACV,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAQ,CAAC,CAAC;QAC9D,CAAC;KACF,CAA+B,CAAC;IAEjC,OAAO,EACL;IAAA,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,QAAQ,CAC7B;IAAA,CAAC,IAAI,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"Suspense.jsx","sourceRoot":"","sources":["../../../src/primitives/Suspense.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAE9B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,QAAQ,CAAC,KAGxB;IAEC,IAAI,QAAuB,CAAC;IAE5B,IAAI,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;QACxB,IAAI,QAAQ;YACV,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAQ,CAAC,CAAC;QAC9D,CAAC;KACF,CAA+B,CAAC;IAEjC,OAAO,EACL;IAAA,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,QAAQ,CAC7B;IAAA,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAC3B;MAAA,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAC/B;IAAA,EAAE,IAAI,CACR;EAAA,GAAG,CAAA;AACL,CAAC"}
|
|
@@ -18,7 +18,7 @@ export * from './createFocusStack.jsx';
|
|
|
18
18
|
export * from './useHold.js';
|
|
19
19
|
export { withScrolling } from './utils/withScrolling.js';
|
|
20
20
|
export { type AnyFunction, chainFunctions, chainRefs, } from './utils/chainFunctions.js';
|
|
21
|
-
export
|
|
21
|
+
export * from './utils/handleNavigation.js';
|
|
22
22
|
export { createSpriteMap, type SpriteDef } from './utils/createSpriteMap.js';
|
|
23
23
|
export type * from './types.js';
|
|
24
24
|
export type { KeyHandler } from '@lightningtv/core/focusManager';
|
|
@@ -18,6 +18,6 @@ export * from './createFocusStack.jsx';
|
|
|
18
18
|
export * from './useHold.js';
|
|
19
19
|
export { withScrolling } from './utils/withScrolling.js';
|
|
20
20
|
export { chainFunctions, chainRefs, } from './utils/chainFunctions.js';
|
|
21
|
-
export
|
|
21
|
+
export * from './utils/handleNavigation.js';
|
|
22
22
|
export { createSpriteMap } from './utils/createSpriteMap.js';
|
|
23
23
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/primitives/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAEL,cAAc,EACd,SAAS,GACV,MAAM,2BAA2B,CAAC;AACnC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/primitives/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAEL,cAAc,EACd,SAAS,GACV,MAAM,2BAA2B,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAkB,MAAM,4BAA4B,CAAC"}
|
|
@@ -1,5 +1,86 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import * as lng from '@lightningtv/solid';
|
|
2
|
+
import * as lngp from '@lightningtv/solid/primitives';
|
|
3
|
+
declare module '@lightningtv/core' {
|
|
4
|
+
interface ElementNode {
|
|
5
|
+
/** For children of {@link lngp.NavigableElement}, set to `true` to prevent being selected */
|
|
6
|
+
skipFocus?: boolean;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
/** @deprecated Use {@link navigableForwardFocus} instead */
|
|
10
|
+
export declare function onGridFocus(_?: lngp.OnSelectedChanged): lng.ForwardFocusHandler;
|
|
11
|
+
/**
|
|
12
|
+
* Forwards focus to the first focusable child of a {@link lngp.NavigableElement} and
|
|
13
|
+
* selects it.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* <view
|
|
18
|
+
* selected={0}
|
|
19
|
+
* forwardFocus={navigableForwardFocus}
|
|
20
|
+
* onSelectedChanged={(idx, el, child, lastIdx) => {...}}
|
|
21
|
+
* >
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare const navigableForwardFocus: lng.ForwardFocusHandler;
|
|
25
|
+
/** @deprecated Use {@link navigableHandleNavigation} instead */
|
|
26
|
+
export declare function handleNavigation(direction: 'up' | 'right' | 'down' | 'left'): lng.KeyHandler;
|
|
27
|
+
/**
|
|
28
|
+
* Handles navigation key events for navigable elements, \
|
|
29
|
+
* such as {@link lngp.Row} and {@link lngp.Column}.
|
|
30
|
+
*
|
|
31
|
+
* Uses {@link moveSelection} to select the next or previous child based on the key pressed.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```tsx
|
|
35
|
+
* <view
|
|
36
|
+
* selected={0}
|
|
37
|
+
* onUp={navigableHandleNavigation}
|
|
38
|
+
* onDown={navigableHandleNavigation}
|
|
39
|
+
* onSelectedChanged={(idx, el, child, lastIdx) => {...}}
|
|
40
|
+
* >
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare const navigableHandleNavigation: lng.KeyHandler;
|
|
44
|
+
/**
|
|
45
|
+
* Moves the selection within a {@link lngp.NavigableElement}.
|
|
46
|
+
*/
|
|
47
|
+
export declare function moveSelection(el: lngp.NavigableElement, delta: number): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Forwards focus to the closest or first focusable child of a {@link lngp.NavigableElement} and
|
|
50
|
+
* selects it.
|
|
51
|
+
*
|
|
52
|
+
* To determine the closest child, it uses the distance between the center of the previous focused element
|
|
53
|
+
* and the center of each child element.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```tsx
|
|
57
|
+
* <view
|
|
58
|
+
* selected={0}
|
|
59
|
+
* forwardFocus={spatialForwardFocus}
|
|
60
|
+
* onSelectedChanged={(idx, el, child, lastIdx) => {...}}
|
|
61
|
+
* >
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare const spatialForwardFocus: lng.ForwardFocusHandler;
|
|
65
|
+
/**
|
|
66
|
+
* Handles spatial navigation within a {@link lngp.NavigableElement} by moving focus
|
|
67
|
+
* based on the arrow keys pressed.
|
|
68
|
+
*
|
|
69
|
+
* This function allows for navigation in a grid-like manner for flex-wrap containers, \
|
|
70
|
+
* where pressing the arrow keys will either:
|
|
71
|
+
* - move focus to the next/prev child in the same row/column
|
|
72
|
+
* - or find the closest child in the next/prev row/column.
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```tsx
|
|
76
|
+
* <view
|
|
77
|
+
* selected={0}
|
|
78
|
+
* display="flex"
|
|
79
|
+
* flexWrap="wrap"
|
|
80
|
+
* onUp={spatialHandleNavigation}
|
|
81
|
+
* onDown={spatialHandleNavigation}
|
|
82
|
+
* onSelectedChanged={(idx, el, child, lastIdx) => {...}}
|
|
83
|
+
* >
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
export declare const spatialHandleNavigation: lng.KeyHandler;
|