@lightningtv/solid 3.0.0-14 → 3.0.0-16

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.
@@ -1,5 +1,5 @@
1
1
  import { combineStyles } from '@lightningtv/solid';
2
- import { handleNavigation, onGridFocus, } from './utils/handleNavigation.js';
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, onUp)} onDown={/* @once */chainFunctions(props.onDown, onDown)} selected={props.selected || 0} scrollToIndex={scrollToIndex} forwardFocus={/* once */onGridFocus(props.onSelectedChanged)} onLayout={
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,gBAAgB,EAChB,WAAW,GACZ,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,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACpC,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACxC,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,IAAI,CAAC,CAAC,CACnD,MAAM,CAAC,CAAC,WAAY,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CACzD,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,CAC9B,aAAa,CAAC,CAAC,aAAa,CAAC,CAC7B,YAAY,CAAC,CAAC,UAAW,WAAW,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAC9D,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"}
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"}
@@ -1,6 +1,6 @@
1
1
  import { combineStyles } from '@lightningtv/solid';
2
2
  import { chainFunctions } from './utils/chainFunctions.js';
3
- import { handleNavigation, onGridFocus, } from './utils/handleNavigation.js';
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, onLeft)} onRight={/* @once */chainFunctions(props.onRight, onRight)} forwardFocus={/* once */onGridFocus(props.onSelectedChanged)} scrollToIndex={scrollToIndex} onLayout={
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,EAA2C,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EACL,gBAAgB,EAChB,WAAW,GACZ,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,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACxC,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1C,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,MAAM,CAAC,CAAC,CACzD,OAAO,CAAC,CAAC,WAAY,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAC5D,YAAY,CAAC,CAAC,UAAW,WAAW,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAC9D,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
+ {"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"}
@@ -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 { handleNavigation, onGridFocus } from './utils/handleNavigation.js';
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 { handleNavigation, onGridFocus } from './utils/handleNavigation.js';
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,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAkB,MAAM,4BAA4B,CAAC"}
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 { ElementNode } from '@lightningtv/core';
2
- import { type KeyHandler } from '@lightningtv/core/focusManager';
3
- import type { OnSelectedChanged } from '../types.js';
4
- export declare function onGridFocus(onSelectedChanged: OnSelectedChanged | undefined): (this: ElementNode) => boolean;
5
- export declare function handleNavigation(direction: 'up' | 'right' | 'down' | 'left'): KeyHandler;
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;
@@ -1,93 +1,256 @@
1
- import { ElementNode, assertTruthy, Config } from '@lightningtv/core';
2
- export function onGridFocus(onSelectedChanged) {
3
- return function () {
4
- if (!this || this.children.length === 0)
5
- return false;
6
- // only check onFocus, and not when grid.setFocus() to retrigger focus
7
- if (!this.states.has(Config.focusStateKey)) {
8
- // if a child already has focus, assume that should be selected
9
- this.children.find((child, index) => {
10
- if (child.states.has(Config.focusStateKey)) {
11
- this.selected = index;
12
- return true;
13
- }
14
- return false;
15
- });
16
- }
17
- this.selected = this.selected || 0;
18
- let child = this.selected
19
- ? this.children[this.selected]
20
- : this.selectedNode;
21
- while (child?.skipFocus) {
22
- this.selected++;
23
- child = this.children[this.selected];
1
+ import * as s from 'solid-js';
2
+ import * as lng from '@lightningtv/solid';
3
+ function idxInArray(idx, arr) {
4
+ return 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;
24
14
  }
25
- if (!(child instanceof ElementNode))
26
- return false;
27
- child.setFocus();
28
- if (onSelectedChanged) {
29
- const grid = this;
30
- onSelectedChanged.call(grid, grid.selected, grid, child);
15
+ if (!el.children[i].skipFocus) {
16
+ return i;
31
17
  }
32
- return true;
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
+ child.setFocus();
30
+ if (lastSelected !== index) {
31
+ el.onSelectedChanged?.(index, el, child, lastSelected);
32
+ }
33
+ return true;
34
+ }
35
+ /** @deprecated Use {@link navigableForwardFocus} instead */
36
+ export function onGridFocus(_) {
37
+ return function () {
38
+ return navigableForwardFocus.call(this, this);
33
39
  };
34
40
  }
41
+ /**
42
+ * Forwards focus to the first focusable child of a {@link lngp.NavigableElement} and
43
+ * selects it.
44
+ *
45
+ * @example
46
+ * ```tsx
47
+ * <view
48
+ * selected={0}
49
+ * forwardFocus={navigableForwardFocus}
50
+ * onSelectedChanged={(idx, el, child, lastIdx) => {...}}
51
+ * >
52
+ * ```
53
+ */
54
+ export const navigableForwardFocus = function () {
55
+ const navigable = this;
56
+ if (!lng.isFocused(this)) {
57
+ // if a child already has focus, assume that should be selected
58
+ for (let [i, child] of this.children.entries()) {
59
+ if (lng.isFocused(child)) {
60
+ this.selected = i;
61
+ break;
62
+ }
63
+ }
64
+ }
65
+ let selected = navigable.selected;
66
+ selected = idxInArray(selected, this.children) ? selected : 0;
67
+ selected = findFirstFocusableChildIdx(navigable, selected);
68
+ return selectChild(navigable, selected);
69
+ };
70
+ /** @deprecated Use {@link navigableHandleNavigation} instead */
35
71
  export function handleNavigation(direction) {
36
72
  return function () {
37
- const numChildren = this.children.length;
38
- const wrap = this.wrap;
39
- const lastSelected = this.selected || 0;
40
- if (numChildren === 0) {
73
+ return moveSelection(this, direction === 'up' || direction === 'left' ? -1 : 1);
74
+ };
75
+ }
76
+ /**
77
+ * Handles navigation key events for navigable elements, \
78
+ * such as {@link lngp.Row} and {@link lngp.Column}.
79
+ *
80
+ * Uses {@link moveSelection} to select the next or previous child based on the key pressed.
81
+ *
82
+ * @example
83
+ * ```tsx
84
+ * <view
85
+ * selected={0}
86
+ * onUp={navigableHandleNavigation}
87
+ * onDown={navigableHandleNavigation}
88
+ * onSelectedChanged={(idx, el, child, lastIdx) => {...}}
89
+ * >
90
+ * ```
91
+ */
92
+ export const navigableHandleNavigation = function (e) {
93
+ return moveSelection(this, e.key === 'ArrowUp' || e.key === 'ArrowLeft' ? -1 : 1);
94
+ };
95
+ /**
96
+ * Moves the selection within a {@link lngp.NavigableElement}.
97
+ */
98
+ export function moveSelection(el, delta) {
99
+ let selected = findFirstFocusableChildIdx(el, el.selected + delta, delta);
100
+ if (selected === -1) {
101
+ if (!idxInArray(el.selected, el.children) ||
102
+ el.children[el.selected].skipFocus ||
103
+ lng.isFocused(el.children[el.selected])) {
41
104
  return false;
42
105
  }
43
- if (direction === 'right' || direction === 'down') {
44
- do {
45
- this.selected = ((this.selected || 0) % numChildren) + 1;
46
- if (this.selected >= numChildren) {
47
- if (!wrap) {
48
- this.selected = -1;
49
- break;
50
- }
51
- this.selected = 0;
52
- }
53
- } while (this.children[this.selected]?.skipFocus);
54
- }
55
- else if (direction === 'left' || direction === 'up') {
56
- do {
57
- this.selected = ((this.selected || 0) % numChildren) - 1;
58
- if (this.selected < 0) {
59
- if (!wrap) {
60
- this.selected = -1;
61
- break;
62
- }
63
- this.selected = numChildren - 1;
64
- }
65
- } while (this.children[this.selected]?.skipFocus);
66
- }
67
- if (this.selected === -1) {
68
- this.selected = lastSelected;
69
- if (this.children[this.selected]?.states.has(Config.focusStateKey || '$focus')) {
70
- // This child is already focused, so bubble up to next handler
71
- return false;
106
+ selected = el.selected;
107
+ }
108
+ const active = el.children[selected];
109
+ if (el.plinko) {
110
+ // Set the next item to have the same selected index
111
+ // so we move up / down directly
112
+ const lastSelectedChild = el.children[el.selected];
113
+ lng.assertTruthy(lastSelectedChild instanceof lng.ElementNode);
114
+ const num = lastSelectedChild.selected || 0;
115
+ active.selected =
116
+ num < active.children.length ? num : active.children.length - 1;
117
+ }
118
+ return selectChild(el, selected);
119
+ }
120
+ function distanceBetweenRectCenters(a, b) {
121
+ const dx = Math.abs(a.x + a.width / 2 - (b.x + b.width / 2)) / 2;
122
+ const dy = Math.abs(a.y + a.height / 2 - (b.y + b.height / 2)) / 2;
123
+ return Math.sqrt(dx * dx + dy * dy);
124
+ }
125
+ function findClosestFocusableChildIdx(el, prevEl) {
126
+ // select child closest to the previous active element
127
+ const prevRect = lng.getElementScreenRect(prevEl);
128
+ const elRect = lng.getElementScreenRect(el);
129
+ const childRect = { x: 0, y: 0, width: 0, height: 0 };
130
+ let closestIdx = -1;
131
+ let closestDist = Infinity;
132
+ for (const [idx, child] of el.children.entries()) {
133
+ if (!child.skipFocus) {
134
+ lng.getElementScreenRect(child, el, childRect);
135
+ childRect.x += elRect.x;
136
+ childRect.y += elRect.y;
137
+ const distance = distanceBetweenRectCenters(prevRect, childRect);
138
+ if (distance < closestDist) {
139
+ closestDist = distance;
140
+ closestIdx = idx;
72
141
  }
73
142
  }
74
- const active = this.children[this.selected || 0] || this.children[0];
75
- if (!(active instanceof ElementNode))
143
+ }
144
+ return closestIdx;
145
+ }
146
+ /**
147
+ * Forwards focus to the closest or first focusable child of a {@link lngp.NavigableElement} and
148
+ * selects it.
149
+ *
150
+ * To determine the closest child, it uses the distance between the center of the previous focused element
151
+ * and the center of each child element.
152
+ *
153
+ * @example
154
+ * ```tsx
155
+ * <view
156
+ * selected={0}
157
+ * forwardFocus={spatialForwardFocus}
158
+ * onSelectedChanged={(idx, el, child, lastIdx) => {...}}
159
+ * >
160
+ * ```
161
+ */
162
+ export const spatialForwardFocus = function () {
163
+ const prevEl = s.untrack(lng.activeElement);
164
+ if (prevEl) {
165
+ const idx = findClosestFocusableChildIdx(this, prevEl);
166
+ const selected = selectChild(this, idx);
167
+ if (selected)
168
+ return true;
169
+ }
170
+ const idx = findFirstFocusableChildIdx(this);
171
+ return selectChild(this, idx);
172
+ };
173
+ /**
174
+ * Handles spatial navigation within a {@link lngp.NavigableElement} by moving focus
175
+ * based on the arrow keys pressed.
176
+ *
177
+ * This function allows for navigation in a grid-like manner for flex-wrap containers, \
178
+ * where pressing the arrow keys will either:
179
+ * - move focus to the next/prev child in the same row/column
180
+ * - or find the closest child in the next/prev row/column.
181
+ *
182
+ * @example
183
+ * ```tsx
184
+ * <view
185
+ * selected={0}
186
+ * display="flex"
187
+ * flexWrap="wrap"
188
+ * onUp={spatialHandleNavigation}
189
+ * onDown={spatialHandleNavigation}
190
+ * onSelectedChanged={(idx, el, child, lastIdx) => {...}}
191
+ * >
192
+ * ```
193
+ */
194
+ export const spatialHandleNavigation = function (e) {
195
+ let selected = this.selected;
196
+ if (typeof selected !== 'number' || !idxInArray(selected, this.children)) {
197
+ selected = findFirstFocusableChildIdx(this);
198
+ return selectChild(this, selected);
199
+ }
200
+ const prevChild = this.children[selected];
201
+ const move = { x: 0, y: 0 };
202
+ switch (e.key) {
203
+ case 'ArrowLeft':
204
+ move.x = -1;
205
+ break;
206
+ case 'ArrowRight':
207
+ move.x = 1;
208
+ break;
209
+ case 'ArrowUp':
210
+ move.y = -1;
211
+ break;
212
+ case 'ArrowDown':
213
+ move.y = 1;
214
+ break;
215
+ default:
76
216
  return false;
77
- const navigableThis = this;
78
- navigableThis.onSelectedChanged &&
79
- navigableThis.onSelectedChanged.call(navigableThis, navigableThis.selected, navigableThis, active, lastSelected);
80
- if (this.plinko) {
81
- // Set the next item to have the same selected index
82
- // so we move up / down directly
83
- const lastSelectedChild = this.children[lastSelected];
84
- assertTruthy(lastSelectedChild instanceof ElementNode);
85
- const num = lastSelectedChild.selected || 0;
86
- active.selected =
87
- num < active.children.length ? num : active.children.length - 1;
217
+ }
218
+ const flexDir = this.flexDirection === 'column' ? 'y' : 'x';
219
+ const crossDir = flexDir === 'x' ? 'y' : 'x';
220
+ const flexDelta = move[flexDir];
221
+ const crossDelta = move[crossDir];
222
+ // Select next/prev child in the current column/row
223
+ if (flexDelta !== 0) {
224
+ for (let i = selected + flexDelta; idxInArray(i, this.children); i += flexDelta) {
225
+ const child = this.children[i];
226
+ if (child.skipFocus)
227
+ continue;
228
+ // Different column/row
229
+ if (child[crossDir] !== prevChild[crossDir])
230
+ break;
231
+ return selectChild(this, i);
88
232
  }
89
- active.setFocus();
90
- return true;
91
- };
92
- }
233
+ }
234
+ // Find child in next/prev column/row
235
+ else {
236
+ let closestIdx = -1;
237
+ let closestDist = Infinity;
238
+ for (let i = selected + crossDelta; idxInArray(i, this.children); i += crossDelta) {
239
+ const child = this.children[i];
240
+ if (child.skipFocus)
241
+ continue;
242
+ // Same column/row, skip
243
+ if (child[crossDir] === prevChild[crossDir])
244
+ continue;
245
+ // Different column/row, check distance
246
+ const distance = Math.abs(child[flexDir] - prevChild[flexDir]);
247
+ if (distance >= closestDist)
248
+ break; // getting further away
249
+ closestDist = distance;
250
+ closestIdx = i;
251
+ }
252
+ return selectChild(this, closestIdx);
253
+ }
254
+ return false;
255
+ };
93
256
  //# sourceMappingURL=handleNavigation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handleNavigation.js","sourceRoot":"","sources":["../../../../src/primitives/utils/handleNavigation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handleNavigation.js","sourceRoot":"","sources":["../../../../src/primitives/utils/handleNavigation.ts"],"names":[],"mappings":"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"}