@lightningtv/solid 3.0.0-1 → 3.0.0-11
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/dist/src/devtools/index.d.ts +6 -0
- package/dist/src/devtools/index.js +65 -0
- package/dist/src/devtools/index.js.map +1 -0
- package/dist/src/index.d.ts +1 -1
- 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 +2 -2
- package/dist/src/primitives/Column.jsx.map +1 -1
- package/dist/src/primitives/FPSCounter.jsx +60 -61
- package/dist/src/primitives/FPSCounter.jsx.map +1 -1
- package/dist/src/primitives/Grid.d.ts +15 -6
- package/dist/src/primitives/Grid.jsx +36 -23
- package/dist/src/primitives/Grid.jsx.map +1 -1
- package/dist/src/primitives/Lazy.jsx +15 -11
- package/dist/src/primitives/Lazy.jsx.map +1 -1
- package/dist/src/primitives/LazyUp.jsx +1 -0
- package/dist/src/primitives/LazyUp.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 +2 -2
- package/dist/src/primitives/Row.jsx.map +1 -1
- package/dist/src/primitives/Suspense.d.ts +23 -0
- package/dist/src/primitives/Suspense.jsx +34 -0
- package/dist/src/primitives/Suspense.jsx.map +1 -0
- package/dist/src/primitives/announcer/announcer.d.ts +1 -0
- package/dist/src/primitives/announcer/announcer.js +6 -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 +67 -28
- package/dist/src/primitives/announcer/speech.js.map +1 -1
- package/dist/src/primitives/index.d.ts +5 -1
- package/dist/src/primitives/index.js +5 -1
- package/dist/src/primitives/index.js.map +1 -1
- package/dist/src/primitives/types.d.ts +2 -0
- 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/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/createSpriteMap.js.map +1 -1
- package/dist/src/primitives/utils/handleNavigation.js +11 -2
- package/dist/src/primitives/utils/handleNavigation.js.map +1 -1
- package/dist/src/primitives/utils/withScrolling.d.ts +3 -0
- package/dist/src/primitives/utils/withScrolling.js +14 -1
- package/dist/src/primitives/utils/withScrolling.js.map +1 -1
- package/dist/src/render.d.ts +5 -5
- package/dist/src/render.js +8 -6
- package/dist/src/render.js.map +1 -1
- package/dist/src/solidOpts.d.ts +7 -0
- package/dist/src/solidOpts.js +39 -7
- package/dist/src/solidOpts.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/{src/jsx-runtime.ts → jsx-runtime.d.ts} +3 -3
- package/package.json +23 -8
- package/src/devtools/index.ts +77 -0
- package/src/index.ts +1 -1
- package/src/primitives/Column.tsx +2 -2
- package/src/primitives/FPSCounter.tsx +61 -61
- package/src/primitives/Grid.tsx +59 -35
- package/src/primitives/Lazy.tsx +21 -12
- package/src/primitives/Marquee.tsx +149 -0
- package/src/primitives/Preserve.tsx +18 -0
- package/src/primitives/Row.tsx +1 -1
- package/src/primitives/Suspense.tsx +41 -0
- package/src/primitives/announcer/announcer.ts +9 -10
- package/src/primitives/announcer/index.ts +12 -2
- package/src/primitives/announcer/speech.ts +82 -28
- package/src/primitives/index.ts +9 -1
- package/src/primitives/types.ts +9 -0
- package/src/primitives/useHold.ts +69 -0
- package/src/primitives/utils/chainFunctions.ts +40 -9
- package/src/primitives/utils/createSpriteMap.ts +2 -2
- package/src/primitives/utils/handleNavigation.ts +11 -2
- package/src/primitives/utils/withScrolling.ts +25 -2
- package/src/render.ts +12 -12
- package/src/solidOpts.ts +51 -7
- package/src/primitives/jsx-runtime.d.ts +0 -8
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type UseHoldProps = {
|
|
2
|
+
onHold: () => void;
|
|
3
|
+
onEnter: () => void;
|
|
4
|
+
onRelease?: () => void;
|
|
5
|
+
holdThreshold?: number;
|
|
6
|
+
performOnEnterImmediately?: boolean;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* @example
|
|
10
|
+
* const [holdRight, releaseRight] = useHold({
|
|
11
|
+
* onHold: handleHoldRight,
|
|
12
|
+
* onEnter: handleOnRight,
|
|
13
|
+
* onRelease: handleReleaseHold,
|
|
14
|
+
* holdThreshold: 200,
|
|
15
|
+
* performOnEnterImmediately: true
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* <View
|
|
19
|
+
* onRight={holdRight}
|
|
20
|
+
* onRightRelease={releaseRight}
|
|
21
|
+
* />
|
|
22
|
+
*
|
|
23
|
+
* @param {UseHoldProps} props - The properties for configuring the hold behavior.
|
|
24
|
+
* @returns {[() => boolean, () => boolean]} A tuple containing `startHold` and `releaseHold` functions.
|
|
25
|
+
*/
|
|
26
|
+
export declare function useHold(props: UseHoldProps): ((() => boolean) | (() => true | undefined))[];
|
|
27
|
+
export default useHold;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { createMemo } from 'solid-js';
|
|
2
|
+
/**
|
|
3
|
+
* @example
|
|
4
|
+
* const [holdRight, releaseRight] = useHold({
|
|
5
|
+
* onHold: handleHoldRight,
|
|
6
|
+
* onEnter: handleOnRight,
|
|
7
|
+
* onRelease: handleReleaseHold,
|
|
8
|
+
* holdThreshold: 200,
|
|
9
|
+
* performOnEnterImmediately: true
|
|
10
|
+
* });
|
|
11
|
+
*
|
|
12
|
+
* <View
|
|
13
|
+
* onRight={holdRight}
|
|
14
|
+
* onRightRelease={releaseRight}
|
|
15
|
+
* />
|
|
16
|
+
*
|
|
17
|
+
* @param {UseHoldProps} props - The properties for configuring the hold behavior.
|
|
18
|
+
* @returns {[() => boolean, () => boolean]} A tuple containing `startHold` and `releaseHold` functions.
|
|
19
|
+
*/
|
|
20
|
+
export function useHold(props) {
|
|
21
|
+
const holdThreshold = createMemo(() => props.holdThreshold ?? 500);
|
|
22
|
+
const performOnEnterImmediately = createMemo(() => props.performOnEnterImmediately ?? false);
|
|
23
|
+
let holdTimeout = -1;
|
|
24
|
+
let wasHeld = false;
|
|
25
|
+
const startHold = () => {
|
|
26
|
+
if (holdTimeout === -1) {
|
|
27
|
+
if (performOnEnterImmediately()) {
|
|
28
|
+
props.onEnter();
|
|
29
|
+
}
|
|
30
|
+
holdTimeout = setTimeout(() => {
|
|
31
|
+
wasHeld = true;
|
|
32
|
+
props.onHold();
|
|
33
|
+
}, holdThreshold());
|
|
34
|
+
}
|
|
35
|
+
return true;
|
|
36
|
+
};
|
|
37
|
+
const releaseHold = () => {
|
|
38
|
+
if (holdTimeout !== -1) {
|
|
39
|
+
clearTimeout(holdTimeout);
|
|
40
|
+
holdTimeout = -1;
|
|
41
|
+
if (!wasHeld) {
|
|
42
|
+
if (!performOnEnterImmediately())
|
|
43
|
+
props.onEnter();
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
props.onRelease?.();
|
|
47
|
+
wasHeld = false;
|
|
48
|
+
}
|
|
49
|
+
return true;
|
|
50
|
+
};
|
|
51
|
+
return [startHold, releaseHold];
|
|
52
|
+
}
|
|
53
|
+
export default useHold;
|
|
54
|
+
//# sourceMappingURL=useHold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useHold.js","sourceRoot":"","sources":["../../../src/primitives/useHold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAUtC;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,UAAU,OAAO,CAAC,KAAmB;IACzC,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,aAAa,IAAI,GAAG,CAAC,CAAC;IACnE,MAAM,yBAAyB,GAAG,UAAU,CAC1C,GAAG,EAAE,CAAC,KAAK,CAAC,yBAAyB,IAAI,KAAK,CAC/C,CAAC;IAEF,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;YACvB,IAAI,yBAAyB,EAAE,EAAE,CAAC;gBAChC,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,CAAC;YACD,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,OAAO,GAAG,IAAI,CAAC;gBACf,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,CAAC,EAAE,aAAa,EAAE,CAAsB,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;YACvB,YAAY,CAAC,WAAW,CAAC,CAAC;YAC1B,WAAW,GAAG,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,yBAAyB,EAAE;oBAAE,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClD,OAAO;YACT,CAAC;YACD,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;YACpB,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAClC,CAAC;AAED,eAAe,OAAO,CAAC"}
|
|
@@ -1,4 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import * as s from 'solid-js';
|
|
2
|
+
export type AnyFunction = (this: any, ...args: any[]) => any;
|
|
3
|
+
/**
|
|
4
|
+
* take an array of functions and if you return `true` from a function, it will stop the chain
|
|
5
|
+
* @param fns list of functions to chain together, can be `undefined`, `null`, or `false` to skip them
|
|
6
|
+
* @returns a function that will call each function in the list until one returns `true` or all functions are called.
|
|
7
|
+
* If no functions are provided, it will return `undefined`.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* function Button (props: NodeProps) {
|
|
12
|
+
* function onEnter (el: ElementNode) {...}
|
|
13
|
+
* return <view onEnter={chainFunctions(props.onEnter, onEnter)} />
|
|
14
|
+
* }
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare function chainFunctions<T extends AnyFunction>(...fns: T[]): T;
|
|
18
|
+
export declare function chainFunctions<T extends AnyFunction>(...fns: (T | undefined | null | false)[]): T | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Utility for chaining multiple `ref` assignments with `props.ref` forwarding.
|
|
21
|
+
* @param refs list of ref setters. Can be a `props.ref` prop for ref forwarding or a setter to a local variable (`el => ref = el`).
|
|
22
|
+
* @example
|
|
23
|
+
* ```tsx
|
|
24
|
+
* function Button (props: NodeProps) {
|
|
25
|
+
* let localRef: ElementNode | undefined
|
|
26
|
+
* return <view ref={chainRefs(props.ref, el => localRef = el)} />
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare const chainRefs: <T>(...refs: (s.Ref<T> | undefined)[]) => (el: T) => void;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const onlyFunctions = args.filter((func) => typeof func === 'function');
|
|
1
|
+
export function chainFunctions(...fns) {
|
|
2
|
+
const onlyFunctions = fns.filter((func) => typeof func === 'function');
|
|
4
3
|
if (onlyFunctions.length === 0) {
|
|
5
4
|
return undefined;
|
|
6
5
|
}
|
|
@@ -18,4 +17,16 @@ export function chainFunctions(...args) {
|
|
|
18
17
|
return result;
|
|
19
18
|
};
|
|
20
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Utility for chaining multiple `ref` assignments with `props.ref` forwarding.
|
|
22
|
+
* @param refs list of ref setters. Can be a `props.ref` prop for ref forwarding or a setter to a local variable (`el => ref = el`).
|
|
23
|
+
* @example
|
|
24
|
+
* ```tsx
|
|
25
|
+
* function Button (props: NodeProps) {
|
|
26
|
+
* let localRef: ElementNode | undefined
|
|
27
|
+
* return <view ref={chainRefs(props.ref, el => localRef = el)} />
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export const chainRefs = chainFunctions;
|
|
21
32
|
//# sourceMappingURL=chainFunctions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chainFunctions.js","sourceRoot":"","sources":["../../../../src/primitives/utils/chainFunctions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chainFunctions.js","sourceRoot":"","sources":["../../../../src/primitives/utils/chainFunctions.ts"],"names":[],"mappings":"AAsBA,MAAM,UAAU,cAAc,CAC5B,GAAG,GAA+C;IAElD,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC;IACvE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,UAAU,GAAG,SAAS;QAC3B,IAAI,MAAM,CAAC;QACX,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACrC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,cAEL,CAAC"}
|
|
@@ -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,mBAAmB,CAAC;AAU9D,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"}
|
|
@@ -3,6 +3,14 @@ export function onGridFocus(onSelectedChanged) {
|
|
|
3
3
|
return function () {
|
|
4
4
|
if (!this || this.children.length === 0)
|
|
5
5
|
return false;
|
|
6
|
+
// if a child already has focus, assume that should be selected
|
|
7
|
+
this.children.find((child, index) => {
|
|
8
|
+
if (child.states.has(Config.focusStateKey)) {
|
|
9
|
+
this.selected = index;
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
return false;
|
|
13
|
+
});
|
|
6
14
|
this.selected = this.selected || 0;
|
|
7
15
|
let child = this.selected
|
|
8
16
|
? this.children[this.selected]
|
|
@@ -60,8 +68,9 @@ export function handleNavigation(direction) {
|
|
|
60
68
|
return false;
|
|
61
69
|
}
|
|
62
70
|
}
|
|
63
|
-
const active = this.children[this.selected || 0];
|
|
64
|
-
|
|
71
|
+
const active = this.children[this.selected || 0] || this.children[0];
|
|
72
|
+
if (!(active instanceof ElementNode))
|
|
73
|
+
return false;
|
|
65
74
|
const navigableThis = this;
|
|
66
75
|
navigableThis.onSelectedChanged &&
|
|
67
76
|
navigableThis.onSelectedChanged.call(navigableThis, navigableThis.selected, navigableThis, active, lastSelected);
|
|
@@ -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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"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import type { ElementNode, ElementText } from '@lightningtv/core';
|
|
2
2
|
export interface ScrollableElement extends ElementNode {
|
|
3
3
|
scrollIndex?: number;
|
|
4
|
+
scroll?: 'always' | 'none' | 'edge' | 'auto' | 'center';
|
|
4
5
|
selected: number;
|
|
5
6
|
offset?: number;
|
|
6
7
|
endOffset?: number;
|
|
8
|
+
onScrolled?: (elm: ScrollableElement, offset: number, isInitial: boolean) => void;
|
|
7
9
|
_targetPosition?: number;
|
|
8
10
|
_screenOffset?: number;
|
|
11
|
+
_initialPosition?: number;
|
|
9
12
|
}
|
|
10
13
|
export declare function withScrolling(isRow: boolean): (selected: number | ElementNode, component?: ElementNode, selectedElement?: ElementNode | ElementText, lastSelected?: number) => void;
|
|
@@ -21,6 +21,9 @@ export function withScrolling(isRow) {
|
|
|
21
21
|
componentRef.scroll === 'none' ||
|
|
22
22
|
!componentRef.children.length)
|
|
23
23
|
return;
|
|
24
|
+
if (componentRef._initialPosition === undefined) {
|
|
25
|
+
componentRef._initialPosition = componentRef[axis];
|
|
26
|
+
}
|
|
24
27
|
const lng = componentRef.lng;
|
|
25
28
|
const screenSize = isRow ? lng.stage.root.width : lng.stage.root.height;
|
|
26
29
|
// Determine if movement is incremental or decremental
|
|
@@ -37,7 +40,13 @@ export function withScrolling(isRow) {
|
|
|
37
40
|
}
|
|
38
41
|
const screenOffset = componentRef._screenOffset;
|
|
39
42
|
const gap = componentRef.gap || 0;
|
|
40
|
-
|
|
43
|
+
// when creating we set scroll to always so we setup the right location for selected and scrollIndex
|
|
44
|
+
const scroll = componentRef.scroll ||
|
|
45
|
+
(lastSelected === undefined
|
|
46
|
+
? componentRef.scrollIndex
|
|
47
|
+
? 'center'
|
|
48
|
+
: 'always'
|
|
49
|
+
: 'auto');
|
|
41
50
|
// Allows manual position control
|
|
42
51
|
const targetPosition = componentRef._targetPosition ?? componentRef[axis];
|
|
43
52
|
const rootPosition = isIncrementing || scroll === 'auto'
|
|
@@ -118,6 +127,10 @@ export function withScrolling(isRow) {
|
|
|
118
127
|
: Math.min(nextPosition, offset);
|
|
119
128
|
// Update position if it has changed
|
|
120
129
|
if (componentRef[axis] !== nextPosition) {
|
|
130
|
+
if (componentRef.onScrolled) {
|
|
131
|
+
const isInitial = nextPosition === componentRef._initialPosition;
|
|
132
|
+
componentRef.onScrolled(componentRef, nextPosition, isInitial);
|
|
133
|
+
}
|
|
121
134
|
componentRef[axis] = nextPosition;
|
|
122
135
|
// Store the new position to keep track during animations
|
|
123
136
|
componentRef._targetPosition = nextPosition;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withScrolling.js","sourceRoot":"","sources":["../../../../src/primitives/utils/withScrolling.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"withScrolling.js","sourceRoot":"","sources":["../../../../src/primitives/utils/withScrolling.ts"],"names":[],"mappings":"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"}
|
package/dist/src/render.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { type NodeProps, type TextProps, type
|
|
2
|
-
import { type JSXElement, type
|
|
1
|
+
import { type NodeProps, type TextProps, type RendererMainSettings } from '@lightningtv/core';
|
|
2
|
+
import { type JSXElement, type Component } from 'solid-js';
|
|
3
3
|
import type { SolidNode } from './types.js';
|
|
4
4
|
export declare const rootNode: import("@lightningtv/core").ElementNode;
|
|
5
5
|
export declare function createRenderer(rendererOptions?: RendererMainSettings, node?: HTMLElement | string): {
|
|
6
|
-
renderer:
|
|
6
|
+
renderer: import("@lightningtv/core").IRendererMain;
|
|
7
7
|
rootNode: import("@lightningtv/core").ElementNode;
|
|
8
8
|
render: (code: () => JSXElement) => () => void;
|
|
9
9
|
};
|
|
@@ -19,8 +19,8 @@ export declare function scheduleTask(callback: Task, priority?: 'high' | 'low'):
|
|
|
19
19
|
* ```
|
|
20
20
|
* @description https://www.solidjs.com/docs/latest/api#dynamic
|
|
21
21
|
*/
|
|
22
|
-
export declare function Dynamic<T
|
|
23
|
-
component?:
|
|
22
|
+
export declare function Dynamic<T extends Record<string, any>>(props: T & {
|
|
23
|
+
component?: Component<T> | undefined | null;
|
|
24
24
|
}): JSXElement;
|
|
25
25
|
export declare const View: (props: NodeProps) => JSXElement;
|
|
26
26
|
export declare const Text: (props: TextProps) => JSXElement;
|
package/dist/src/render.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRenderer as solidCreateRenderer } from 'solid-js/universal';
|
|
2
2
|
import { Config, startLightningRenderer, } from '@lightningtv/core';
|
|
3
3
|
import nodeOpts from './solidOpts.js';
|
|
4
|
-
import { splitProps, createMemo, createRenderEffect, untrack, } from 'solid-js';
|
|
4
|
+
import { splitProps, createMemo, createRenderEffect, untrack, createRoot, } from 'solid-js';
|
|
5
5
|
import { activeElement, setActiveElement } from './activeElement.js';
|
|
6
6
|
const solidRenderer = solidCreateRenderer(nodeOpts);
|
|
7
7
|
let renderer;
|
|
@@ -30,11 +30,13 @@ export function createRenderer(rendererOptions, node) {
|
|
|
30
30
|
export const { effect, memo, createComponent, createElement, createTextNode, insertNode, insert, spread, setProp, mergeProps, use, } = solidRenderer;
|
|
31
31
|
const taskQueue = [];
|
|
32
32
|
let tasksEnabled = false;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
createRoot(() => {
|
|
34
|
+
createRenderEffect(() => {
|
|
35
|
+
// should change whenever a keypress occurs, so we disable the task queue
|
|
36
|
+
// until the renderer is idle again.
|
|
37
|
+
activeElement();
|
|
38
|
+
tasksEnabled = false;
|
|
39
|
+
});
|
|
38
40
|
});
|
|
39
41
|
export function setTasksEnabled(enabled) {
|
|
40
42
|
tasksEnabled = enabled;
|
package/dist/src/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,IAAI,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EACL,MAAM,EAGN,sBAAsB,
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/render.ts"],"names":[],"mappings":"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"}
|
package/dist/src/solidOpts.d.ts
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { ElementNode, type ElementText, type TextNode } from '@lightningtv/core';
|
|
2
2
|
import type { SolidNode } from './types.js';
|
|
3
|
+
declare module '@lightningtv/core' {
|
|
4
|
+
interface ElementNode {
|
|
5
|
+
/** @internal for managing series of insertions and deletions */
|
|
6
|
+
_queueDelete?: number;
|
|
7
|
+
preserve?: boolean;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
3
10
|
declare const _default: {
|
|
4
11
|
createElement(name: string): ElementNode;
|
|
5
12
|
createTextNode(text: string): TextNode;
|
package/dist/src/solidOpts.js
CHANGED
|
@@ -1,4 +1,33 @@
|
|
|
1
1
|
import { assertTruthy, isElementText, ElementNode, NodeType, log, } from '@lightningtv/core';
|
|
2
|
+
Object.defineProperty(ElementNode.prototype, 'preserve', {
|
|
3
|
+
get() {
|
|
4
|
+
return this._queueDelete === 0;
|
|
5
|
+
},
|
|
6
|
+
set(v) {
|
|
7
|
+
this._queueDelete = v ? 0 : undefined;
|
|
8
|
+
},
|
|
9
|
+
});
|
|
10
|
+
let elementDeleteQueue = [];
|
|
11
|
+
function flushDeleteQueue() {
|
|
12
|
+
for (let el of elementDeleteQueue) {
|
|
13
|
+
if (Number(el._queueDelete) < 0) {
|
|
14
|
+
el.destroy();
|
|
15
|
+
}
|
|
16
|
+
el._queueDelete = undefined;
|
|
17
|
+
}
|
|
18
|
+
elementDeleteQueue.length = 0;
|
|
19
|
+
}
|
|
20
|
+
function pushDeleteQueue(node, n) {
|
|
21
|
+
if (node._queueDelete === undefined) {
|
|
22
|
+
node._queueDelete = n;
|
|
23
|
+
if (elementDeleteQueue.push(node) === 1) {
|
|
24
|
+
queueMicrotask(flushDeleteQueue);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
node._queueDelete += n;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
2
31
|
export default {
|
|
3
32
|
createElement(name) {
|
|
4
33
|
return new ElementNode(name);
|
|
@@ -19,10 +48,13 @@ export default {
|
|
|
19
48
|
},
|
|
20
49
|
insertNode(parent, node, anchor) {
|
|
21
50
|
log('INSERT: ', parent, node, anchor);
|
|
51
|
+
let prevParent = node.parent;
|
|
22
52
|
parent.insertChild(node, anchor);
|
|
23
|
-
node._queueDelete = false;
|
|
24
53
|
if (node instanceof ElementNode) {
|
|
25
|
-
parent.rendered && node.render(true);
|
|
54
|
+
node.parent.rendered && node.render(true);
|
|
55
|
+
if (prevParent !== undefined) {
|
|
56
|
+
pushDeleteQueue(node, 1);
|
|
57
|
+
}
|
|
26
58
|
}
|
|
27
59
|
else if (isElementText(parent)) {
|
|
28
60
|
// TextNodes can be placed outside of <text> nodes when <Show> is used as placeholder
|
|
@@ -35,12 +67,12 @@ export default {
|
|
|
35
67
|
removeNode(parent, node) {
|
|
36
68
|
log('REMOVE: ', parent, node);
|
|
37
69
|
parent.removeChild(node);
|
|
38
|
-
node._queueDelete = true;
|
|
39
70
|
if (node instanceof ElementNode) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
71
|
+
pushDeleteQueue(node, -1);
|
|
72
|
+
}
|
|
73
|
+
else if (isElementText(parent)) {
|
|
74
|
+
// TextNodes can be placed outside of <text> nodes when <Show> is used as placeholder
|
|
75
|
+
parent.text = parent.getText();
|
|
44
76
|
}
|
|
45
77
|
},
|
|
46
78
|
getParentNode(node) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solidOpts.js","sourceRoot":"","sources":["../../src/solidOpts.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,WAAW,EACX,QAAQ,EACR,GAAG,GAGJ,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"solidOpts.js","sourceRoot":"","sources":["../../src/solidOpts.ts"],"names":[],"mappings":"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"}
|