@lightningtv/solid 3.0.0-1 → 3.0.0-10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/LICENSE +1 -1
  2. package/dist/src/devtools/index.d.ts +6 -0
  3. package/dist/src/devtools/index.js +65 -0
  4. package/dist/src/devtools/index.js.map +1 -0
  5. package/dist/src/index.d.ts +1 -1
  6. package/dist/src/index.js +1 -1
  7. package/dist/src/index.js.map +1 -1
  8. package/dist/src/jsx-runtime.d.ts +1 -3
  9. package/dist/src/primitives/Column.jsx +9 -3
  10. package/dist/src/primitives/Column.jsx.map +1 -1
  11. package/dist/src/primitives/FPSCounter.jsx +60 -61
  12. package/dist/src/primitives/FPSCounter.jsx.map +1 -1
  13. package/dist/src/primitives/Grid.d.ts +15 -6
  14. package/dist/src/primitives/Grid.jsx +36 -23
  15. package/dist/src/primitives/Grid.jsx.map +1 -1
  16. package/dist/src/primitives/Lazy.jsx +15 -11
  17. package/dist/src/primitives/Lazy.jsx.map +1 -1
  18. package/dist/src/primitives/LazyUp.jsx +1 -0
  19. package/dist/src/primitives/LazyUp.jsx.map +1 -1
  20. package/dist/src/primitives/Marquee.d.ts +64 -0
  21. package/dist/src/primitives/Marquee.jsx +86 -0
  22. package/dist/src/primitives/Marquee.jsx.map +1 -0
  23. package/dist/src/primitives/Preserve.d.ts +4 -0
  24. package/dist/src/primitives/Preserve.jsx +11 -0
  25. package/dist/src/primitives/Preserve.jsx.map +1 -0
  26. package/dist/src/primitives/Row.jsx +9 -3
  27. package/dist/src/primitives/Row.jsx.map +1 -1
  28. package/dist/src/primitives/Suspense.d.ts +23 -0
  29. package/dist/src/primitives/Suspense.jsx +34 -0
  30. package/dist/src/primitives/Suspense.jsx.map +1 -0
  31. package/dist/src/primitives/announcer/announcer.d.ts +1 -0
  32. package/dist/src/primitives/announcer/announcer.js +6 -5
  33. package/dist/src/primitives/announcer/announcer.js.map +1 -1
  34. package/dist/src/primitives/announcer/index.d.ts +5 -1
  35. package/dist/src/primitives/announcer/index.js +8 -2
  36. package/dist/src/primitives/announcer/index.js.map +1 -1
  37. package/dist/src/primitives/announcer/speech.d.ts +2 -2
  38. package/dist/src/primitives/announcer/speech.js +67 -28
  39. package/dist/src/primitives/announcer/speech.js.map +1 -1
  40. package/dist/src/primitives/index.d.ts +5 -1
  41. package/dist/src/primitives/index.js +5 -1
  42. package/dist/src/primitives/index.js.map +1 -1
  43. package/dist/src/primitives/types.d.ts +2 -0
  44. package/dist/src/primitives/useHold.d.ts +27 -0
  45. package/dist/src/primitives/useHold.js +54 -0
  46. package/dist/src/primitives/useHold.js.map +1 -0
  47. package/dist/src/primitives/utils/chainFunctions.d.ts +30 -4
  48. package/dist/src/primitives/utils/chainFunctions.js +14 -3
  49. package/dist/src/primitives/utils/chainFunctions.js.map +1 -1
  50. package/dist/src/primitives/utils/createSpriteMap.js.map +1 -1
  51. package/dist/src/primitives/utils/handleNavigation.js +11 -2
  52. package/dist/src/primitives/utils/handleNavigation.js.map +1 -1
  53. package/dist/src/primitives/utils/withScrolling.d.ts +3 -0
  54. package/dist/src/primitives/utils/withScrolling.js +14 -1
  55. package/dist/src/primitives/utils/withScrolling.js.map +1 -1
  56. package/dist/src/render.d.ts +5 -5
  57. package/dist/src/render.js +8 -6
  58. package/dist/src/render.js.map +1 -1
  59. package/dist/src/solidOpts.d.ts +7 -0
  60. package/dist/src/solidOpts.js +39 -7
  61. package/dist/src/solidOpts.js.map +1 -1
  62. package/dist/tsconfig.tsbuildinfo +1 -1
  63. package/{src/jsx-runtime.ts → jsx-runtime.d.ts} +3 -3
  64. package/package.json +23 -8
  65. package/src/devtools/index.ts +77 -0
  66. package/src/index.ts +1 -1
  67. package/src/primitives/Column.tsx +11 -4
  68. package/src/primitives/FPSCounter.tsx +61 -61
  69. package/src/primitives/Grid.tsx +59 -35
  70. package/src/primitives/Lazy.tsx +21 -12
  71. package/src/primitives/Marquee.tsx +149 -0
  72. package/src/primitives/Preserve.tsx +18 -0
  73. package/src/primitives/Row.tsx +11 -4
  74. package/src/primitives/Suspense.tsx +41 -0
  75. package/src/primitives/announcer/announcer.ts +9 -10
  76. package/src/primitives/announcer/index.ts +12 -2
  77. package/src/primitives/announcer/speech.ts +82 -28
  78. package/src/primitives/index.ts +9 -1
  79. package/src/primitives/types.ts +9 -0
  80. package/src/primitives/useHold.ts +69 -0
  81. package/src/primitives/utils/chainFunctions.ts +40 -9
  82. package/src/primitives/utils/createSpriteMap.ts +2 -2
  83. package/src/primitives/utils/handleNavigation.ts +11 -2
  84. package/src/primitives/utils/withScrolling.ts +25 -2
  85. package/src/render.ts +12 -12
  86. package/src/solidOpts.ts +51 -7
  87. 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
- type ChainableFunction = (...args: unknown[]) => unknown;
2
- export declare function chainFunctions(...args: ChainableFunction[]): ChainableFunction;
3
- export declare function chainFunctions<T>(...args: (ChainableFunction | T)[]): T;
4
- export {};
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
- // take an array of functions and if you return true from a function, it will stop the chain
2
- export function chainFunctions(...args) {
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":"AAKA,4FAA4F;AAC5F,MAAM,UAAU,cAAc,CAC5B,GAAG,IAA+B;IAElC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC;IACxE,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,UAA6B,GAAG,SAAoB;QACzD,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"}
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,EAAE,QAAQ,EAAmB,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,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC"}
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
- assertTruthy(active instanceof ElementNode);
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
- const scroll = componentRef.scroll || 'auto';
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":"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"}
1
+ {"version":3,"file":"withScrolling.js","sourceRoot":"","sources":["../../../../src/primitives/utils/withScrolling.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { type NodeProps, type TextProps, type RendererMain, type RendererMainSettings } from '@lightningtv/core';
2
- import { type JSXElement, type ValidComponent } from 'solid-js';
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: RendererMain;
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>(props: T & {
23
- component?: ValidComponent;
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;
@@ -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
- createRenderEffect(() => {
34
- // should change whenever a keypress occurs, so we disable the task queue
35
- // until the renderer is idle again.
36
- activeElement();
37
- tasksEnabled = false;
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;
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/render.ts"],"names":[],"mappings":"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"}
@@ -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;
@@ -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
- // Solid replacesNodes to move them (via insert and remove),
41
- // so we need to wait for the next microtask to destroy the node
42
- // in the event it gets a new parent.
43
- queueMicrotask(() => node.destroy());
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;AAG3B,eAAe;IACb,aAAa,CAAC,IAAY;QACxB,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,cAAc,CAAC,IAAY;QACzB,qDAAqD;QACrD,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;IACxC,CAAC;IACD,WAAW,CAAC,IAAc,EAAE,KAAa;QACvC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,YAAY,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;IACD,WAAW,CAAC,IAAiB,EAAE,IAAY,EAAE,QAAa,IAAI;QAC5D,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACrB,CAAC;IACD,UAAU,CAAC,MAAmB,EAAE,IAAe,EAAE,MAAiB;QAChE,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAEtC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAE1B,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;YAChC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,qFAAqF;YACrF,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IACD,UAAU,CAAC,IAAe;QACxB,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,UAAU,CAAC,MAAmB,EAAE,IAAe;QAC7C,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;YAChC,4DAA4D;YAC5D,gEAAgE;YAChE,qCAAqC;YACrC,cAAc,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IACD,aAAa,CAAC,IAAe;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,aAAa,CAAC,IAAiB;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAc,CAAC;IACvC,CAAC;IACD,cAAc,CAAC,IAAe;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAW,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC,KAAK,CAAc,CAAC;QACtC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CAC6B,CAAC"}
1
+ {"version":3,"file":"solidOpts.js","sourceRoot":"","sources":["../../src/solidOpts.ts"],"names":[],"mappings":"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"}