@lightningtv/solid 0.0.8 → 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 (62) hide show
  1. package/dist/{source → src}/Text.jsx +1 -0
  2. package/dist/src/Text.jsx.map +1 -0
  3. package/dist/{source → src}/View.jsx +1 -0
  4. package/dist/src/View.jsx.map +1 -0
  5. package/dist/{types → src}/activeElement.d.ts +1 -1
  6. package/dist/{source → src}/activeElement.js +1 -0
  7. package/dist/src/activeElement.js.map +1 -0
  8. package/dist/{types → src}/index.d.ts +3 -4
  9. package/dist/{source → src}/index.js +4 -4
  10. package/dist/src/index.js.map +1 -0
  11. package/dist/src/jsx-runtime.js +2 -0
  12. package/dist/src/jsx-runtime.js.map +1 -0
  13. package/dist/{source → src}/primitives/announcer/announcer.js +1 -0
  14. package/dist/src/primitives/announcer/announcer.js.map +1 -0
  15. package/dist/{source → src}/primitives/announcer/index.js +1 -0
  16. package/dist/src/primitives/announcer/index.js.map +1 -0
  17. package/dist/{source → src}/primitives/announcer/speech.js +1 -0
  18. package/dist/src/primitives/announcer/speech.js.map +1 -0
  19. package/dist/{source → src}/primitives/createInfiniteItems.js +1 -0
  20. package/dist/src/primitives/createInfiniteItems.js.map +1 -0
  21. package/dist/{types → src}/primitives/createSpriteMap.d.ts +1 -0
  22. package/dist/{source → src}/primitives/createSpriteMap.js +1 -0
  23. package/dist/src/primitives/createSpriteMap.js.map +1 -0
  24. package/dist/{source → src}/primitives/index.js +1 -0
  25. package/dist/src/primitives/index.js.map +1 -0
  26. package/dist/{source → src}/primitives/portal.jsx +1 -0
  27. package/dist/src/primitives/portal.jsx.map +1 -0
  28. package/dist/{source → src}/primitives/useFocusManager.js +1 -0
  29. package/dist/src/primitives/useFocusManager.js.map +1 -0
  30. package/dist/{source → src}/primitives/useMouse.js +29 -13
  31. package/dist/src/primitives/useMouse.js.map +1 -0
  32. package/dist/{source → src}/primitives/withPadding.js +1 -0
  33. package/dist/src/primitives/withPadding.js.map +1 -0
  34. package/dist/src/render.d.ts +22 -0
  35. package/dist/{source → src}/render.js +1 -0
  36. package/dist/src/render.js.map +1 -0
  37. package/dist/{source → src}/solidOpts.js +1 -0
  38. package/dist/src/solidOpts.js.map +1 -0
  39. package/dist/{source → src}/utils.js +1 -0
  40. package/dist/src/utils.js.map +1 -0
  41. package/dist/tsconfig.tsbuildinfo +1 -0
  42. package/package.json +12 -8
  43. package/src/index.ts +6 -7
  44. package/src/primitives/useMouse.ts +39 -18
  45. package/dist/esm/index.js +0 -1011
  46. package/dist/esm/index.js.map +0 -1
  47. package/dist/source/jsx-runtime.js +0 -1
  48. package/dist/types/render.d.ts +0 -22
  49. /package/dist/{types → src}/Text.d.ts +0 -0
  50. /package/dist/{types → src}/View.d.ts +0 -0
  51. /package/dist/{types → src}/jsx-runtime.d.ts +0 -0
  52. /package/dist/{types → src}/primitives/announcer/announcer.d.ts +0 -0
  53. /package/dist/{types → src}/primitives/announcer/index.d.ts +0 -0
  54. /package/dist/{types → src}/primitives/announcer/speech.d.ts +0 -0
  55. /package/dist/{types → src}/primitives/createInfiniteItems.d.ts +0 -0
  56. /package/dist/{types → src}/primitives/index.d.ts +0 -0
  57. /package/dist/{types → src}/primitives/portal.d.ts +0 -0
  58. /package/dist/{types → src}/primitives/useFocusManager.d.ts +0 -0
  59. /package/dist/{types → src}/primitives/useMouse.d.ts +0 -0
  60. /package/dist/{types → src}/primitives/withPadding.d.ts +0 -0
  61. /package/dist/{types → src}/solidOpts.d.ts +0 -0
  62. /package/dist/{types → src}/utils.d.ts +0 -0
@@ -4,6 +4,7 @@ import {
4
4
  activeElement,
5
5
  setActiveElement,
6
6
  rootNode,
7
+ Config,
7
8
  } from '@lightningtv/solid';
8
9
  import { makeEventListener } from '@solid-primitives/event-listener';
9
10
  import { useMousePosition } from '@solid-primitives/mouse';
@@ -41,15 +42,16 @@ const handleScroll = throttle((e: WheelEvent): void => {
41
42
 
42
43
  const handleClick = (e: MouseEvent): void => {
43
44
  const active = activeElement();
45
+ const precision = Config.rendererOptions?.deviceLogicalPixelRatio || 1;
44
46
  if (
45
47
  active &&
46
48
  testCollision(
47
49
  e.clientX,
48
50
  e.clientY,
49
- (active.lng as MainOnlyNode).coreNode.absX,
50
- (active.lng as MainOnlyNode).coreNode.absY,
51
- active.width,
52
- active.height,
51
+ (active.lng as MainOnlyNode).coreNode.absX * precision,
52
+ (active.lng as MainOnlyNode).coreNode.absY * precision,
53
+ active.width! * precision,
54
+ active.height! * precision,
53
55
  )
54
56
  ) {
55
57
  document.dispatchEvent(createKeyboardEvent('Enter', 13));
@@ -72,26 +74,45 @@ function getChildrenByPosition(
72
74
  x: number,
73
75
  y: number,
74
76
  ): ElementNode[] {
75
- let result: ElementNode[] = [node];
77
+ const result: ElementNode[] = [];
78
+ const precision = Config.rendererOptions?.deviceLogicalPixelRatio || 1;
76
79
 
77
- for (let i = 0; i < node.children.length; i++) {
78
- const child = node.children[i];
79
- if (child instanceof ElementNode) {
80
+ // Queue for BFS
81
+ let queue: ElementNode[] = [node];
82
+
83
+ while (queue.length > 0) {
84
+ // Process nodes at the current level
85
+ const currentLevelNodes: ElementNode[] = [];
86
+
87
+ for (const currentNode of queue) {
80
88
  if (
81
- child.alpha !== 0 &&
89
+ currentNode.alpha !== 0 &&
82
90
  testCollision(
83
91
  x,
84
92
  y,
85
- (child.lng as MainOnlyNode).coreNode.absX,
86
- (child.lng as MainOnlyNode).coreNode.absY,
87
- child.width,
88
- child.height,
93
+ (currentNode.lng as MainOnlyNode).coreNode.absX * precision,
94
+ (currentNode.lng as MainOnlyNode).coreNode.absY * precision,
95
+ currentNode.width! * precision,
96
+ currentNode.height! * precision,
89
97
  )
90
98
  ) {
91
- // continue searching tree
92
- result = [...result, ...getChildrenByPosition(child, x, y)];
99
+ currentLevelNodes.push(currentNode);
93
100
  }
94
101
  }
102
+
103
+ const size = currentLevelNodes.length;
104
+ if (size === 0) {
105
+ break;
106
+ } else if (size > 1) {
107
+ // Find the node with the highest zIndex
108
+ currentLevelNodes.sort((a, b) => (a.zIndex || 0) - (b.zIndex || 0));
109
+ }
110
+
111
+ const highestZIndexNode = currentLevelNodes[0] as ElementNode;
112
+ result.push(highestZIndexNode);
113
+ if (!highestZIndexNode.isTextNode()) {
114
+ queue = highestZIndexNode.children as ElementNode[];
115
+ }
95
116
  }
96
117
 
97
118
  return result;
@@ -104,9 +125,9 @@ export function useMouse(myApp: ElementNode = rootNode): void {
104
125
  makeEventListener(window, 'click', handleClick);
105
126
  createEffect(() => {
106
127
  if (scheduled()) {
107
- const result = getChildrenByPosition(myApp, pos.x, pos.y)
108
- .filter((el) => (el.focus || el.onFocus || el.onEnter) && !el.skipFocus)
109
- .sort((a, b) => (a.zIndex || 0) - (b.zIndex || 0));
128
+ const result = getChildrenByPosition(myApp, pos.x, pos.y).filter(
129
+ (el) => (el.focus || el.onFocus || el.onEnter) && !el.skipFocus,
130
+ );
110
131
 
111
132
  if (result.length) {
112
133
  let activeElm = result[result.length - 1];