@lightningtv/solid 3.0.0-2 → 3.0.0-20

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 (126) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +6 -0
  3. package/dist/src/jsx-runtime.d.ts +1 -3
  4. package/dist/src/primitives/Column.jsx +9 -10
  5. package/dist/src/primitives/Column.jsx.map +1 -1
  6. package/dist/src/primitives/Grid.d.ts +15 -6
  7. package/dist/src/primitives/Grid.jsx +35 -22
  8. package/dist/src/primitives/Grid.jsx.map +1 -1
  9. package/dist/src/primitives/Image.d.ts +8 -0
  10. package/dist/src/primitives/Image.jsx +24 -0
  11. package/dist/src/primitives/Image.jsx.map +1 -0
  12. package/dist/src/primitives/KeepAlive.d.ts +30 -0
  13. package/dist/src/primitives/KeepAlive.jsx +77 -0
  14. package/dist/src/primitives/KeepAlive.jsx.map +1 -0
  15. package/dist/src/primitives/Lazy.d.ts +8 -7
  16. package/dist/src/primitives/Lazy.jsx +49 -23
  17. package/dist/src/primitives/Lazy.jsx.map +1 -1
  18. package/dist/src/primitives/Marquee.d.ts +64 -0
  19. package/dist/src/primitives/Marquee.jsx +86 -0
  20. package/dist/src/primitives/Marquee.jsx.map +1 -0
  21. package/dist/src/primitives/Preserve.d.ts +4 -0
  22. package/dist/src/primitives/Preserve.jsx +11 -0
  23. package/dist/src/primitives/Preserve.jsx.map +1 -0
  24. package/dist/src/primitives/Row.jsx +9 -10
  25. package/dist/src/primitives/Row.jsx.map +1 -1
  26. package/dist/src/primitives/Suspense.d.ts +22 -0
  27. package/dist/src/primitives/Suspense.jsx +33 -0
  28. package/dist/src/primitives/Suspense.jsx.map +1 -0
  29. package/dist/src/primitives/Virtual.d.ts +18 -0
  30. package/dist/src/primitives/Virtual.jsx +434 -0
  31. package/dist/src/primitives/Virtual.jsx.map +1 -0
  32. package/dist/src/primitives/VirtualGrid.d.ts +13 -0
  33. package/dist/src/primitives/VirtualGrid.jsx +139 -0
  34. package/dist/src/primitives/VirtualGrid.jsx.map +1 -0
  35. package/dist/src/primitives/VirtualList.d.ts +11 -0
  36. package/dist/src/primitives/VirtualList.jsx +96 -0
  37. package/dist/src/primitives/VirtualList.jsx.map +1 -0
  38. package/dist/src/primitives/VirtualRow.d.ts +13 -0
  39. package/dist/src/primitives/VirtualRow.jsx +97 -0
  40. package/dist/src/primitives/VirtualRow.jsx.map +1 -0
  41. package/dist/src/primitives/Visible.d.ts +0 -1
  42. package/dist/src/primitives/Visible.jsx +1 -1
  43. package/dist/src/primitives/Visible.jsx.map +1 -1
  44. package/dist/src/primitives/announcer/announcer.d.ts +2 -0
  45. package/dist/src/primitives/announcer/announcer.js +7 -5
  46. package/dist/src/primitives/announcer/announcer.js.map +1 -1
  47. package/dist/src/primitives/announcer/index.d.ts +5 -1
  48. package/dist/src/primitives/announcer/index.js +8 -2
  49. package/dist/src/primitives/announcer/index.js.map +1 -1
  50. package/dist/src/primitives/announcer/speech.d.ts +2 -2
  51. package/dist/src/primitives/announcer/speech.js +157 -28
  52. package/dist/src/primitives/announcer/speech.js.map +1 -1
  53. package/dist/src/primitives/createFocusStack.d.ts +4 -4
  54. package/dist/src/primitives/createFocusStack.jsx +15 -6
  55. package/dist/src/primitives/createFocusStack.jsx.map +1 -1
  56. package/dist/src/primitives/createTag.d.ts +8 -0
  57. package/dist/src/primitives/createTag.jsx +20 -0
  58. package/dist/src/primitives/createTag.jsx.map +1 -0
  59. package/dist/src/primitives/index.d.ts +13 -3
  60. package/dist/src/primitives/index.js +13 -3
  61. package/dist/src/primitives/index.js.map +1 -1
  62. package/dist/src/primitives/types.d.ts +3 -0
  63. package/dist/src/primitives/useHold.d.ts +27 -0
  64. package/dist/src/primitives/useHold.js +54 -0
  65. package/dist/src/primitives/useHold.js.map +1 -0
  66. package/dist/src/primitives/useMouse.d.ts +24 -1
  67. package/dist/src/primitives/useMouse.js +153 -47
  68. package/dist/src/primitives/useMouse.js.map +1 -1
  69. package/dist/src/primitives/utils/chainFunctions.d.ts +30 -4
  70. package/dist/src/primitives/utils/chainFunctions.js +14 -3
  71. package/dist/src/primitives/utils/chainFunctions.js.map +1 -1
  72. package/dist/src/primitives/utils/createBlurredImage.d.ts +56 -0
  73. package/dist/src/primitives/utils/createBlurredImage.js +223 -0
  74. package/dist/src/primitives/utils/createBlurredImage.js.map +1 -0
  75. package/dist/src/primitives/utils/createSpriteMap.d.ts +2 -2
  76. package/dist/src/primitives/utils/createSpriteMap.js.map +1 -1
  77. package/dist/src/primitives/utils/handleNavigation.d.ts +85 -5
  78. package/dist/src/primitives/utils/handleNavigation.js +242 -69
  79. package/dist/src/primitives/utils/handleNavigation.js.map +1 -1
  80. package/dist/src/primitives/utils/withScrolling.d.ts +8 -1
  81. package/dist/src/primitives/utils/withScrolling.js +25 -6
  82. package/dist/src/primitives/utils/withScrolling.js.map +1 -1
  83. package/dist/src/render.d.ts +6 -5
  84. package/dist/src/render.js +4 -0
  85. package/dist/src/render.js.map +1 -1
  86. package/dist/src/solidOpts.d.ts +3 -2
  87. package/dist/src/solidOpts.js +31 -15
  88. package/dist/src/solidOpts.js.map +1 -1
  89. package/dist/src/universal.d.ts +25 -0
  90. package/dist/src/universal.js +232 -0
  91. package/dist/src/universal.js.map +1 -0
  92. package/dist/src/utils.d.ts +2 -0
  93. package/dist/src/utils.js +8 -0
  94. package/dist/src/utils.js.map +1 -1
  95. package/dist/tsconfig.tsbuildinfo +1 -1
  96. package/jsx-runtime.d.ts +2 -4
  97. package/package.json +19 -10
  98. package/src/primitives/Column.tsx +10 -12
  99. package/src/primitives/Grid.tsx +57 -33
  100. package/src/primitives/Image.tsx +36 -0
  101. package/src/primitives/KeepAlive.tsx +124 -0
  102. package/src/primitives/Lazy.tsx +60 -37
  103. package/src/primitives/Marquee.tsx +149 -0
  104. package/src/primitives/Preserve.tsx +18 -0
  105. package/src/primitives/Row.tsx +11 -12
  106. package/src/primitives/Suspense.tsx +39 -0
  107. package/src/primitives/Virtual.tsx +478 -0
  108. package/src/primitives/VirtualGrid.tsx +199 -0
  109. package/src/primitives/Visible.tsx +1 -2
  110. package/src/primitives/announcer/announcer.ts +16 -10
  111. package/src/primitives/announcer/index.ts +12 -2
  112. package/src/primitives/announcer/speech.ts +188 -27
  113. package/src/primitives/createFocusStack.tsx +18 -7
  114. package/src/primitives/createTag.tsx +31 -0
  115. package/src/primitives/index.ts +17 -3
  116. package/src/primitives/types.ts +10 -0
  117. package/src/primitives/useHold.ts +69 -0
  118. package/src/primitives/useMouse.ts +283 -66
  119. package/src/primitives/utils/chainFunctions.ts +40 -9
  120. package/src/primitives/utils/createBlurredImage.ts +366 -0
  121. package/src/primitives/utils/createSpriteMap.ts +6 -4
  122. package/src/primitives/utils/handleNavigation.ts +307 -84
  123. package/src/primitives/utils/withScrolling.ts +47 -16
  124. package/src/render.ts +9 -7
  125. package/src/solidOpts.ts +34 -19
  126. package/src/utils.ts +10 -0
@@ -1,81 +1,254 @@
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
- this.selected = this.selected || 0;
7
- let child = this.selected
8
- ? this.children[this.selected]
9
- : this.selectedNode;
10
- while (child?.skipFocus) {
11
- this.selected++;
12
- 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 >= 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;
13
14
  }
14
- if (!(child instanceof ElementNode))
15
- return false;
16
- child.setFocus();
17
- if (onSelectedChanged) {
18
- const grid = this;
19
- onSelectedChanged.call(grid, grid.selected, grid, child);
15
+ if (!el.children[i]?.skipFocus) {
16
+ return i;
20
17
  }
21
- 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
+ if (!lng.isFocused(child)) {
30
+ child.setFocus();
31
+ }
32
+ // Always call onSelectedChanged on first focus for clients
33
+ el.onSelectedChanged?.(index, el, child, lastSelected);
34
+ return true;
35
+ }
36
+ /** @deprecated Use {@link navigableForwardFocus} instead */
37
+ export function onGridFocus(_) {
38
+ return function () {
39
+ return navigableForwardFocus.call(this, this);
22
40
  };
23
41
  }
42
+ /**
43
+ * Forwards focus to the first focusable child of a {@link lngp.NavigableElement} and
44
+ * selects it.
45
+ *
46
+ * @example
47
+ * ```tsx
48
+ * <view
49
+ * selected={0}
50
+ * forwardFocus={navigableForwardFocus}
51
+ * onSelectedChanged={(idx, el, child, lastIdx) => {...}}
52
+ * >
53
+ * ```
54
+ */
55
+ export const navigableForwardFocus = function () {
56
+ const navigable = this;
57
+ let selected = navigable.selected;
58
+ if (selected !== 0) {
59
+ selected = lng.clamp(selected, 0, this.children.length - 1);
60
+ while (!idxInArray(selected, this.children)) {
61
+ selected--;
62
+ }
63
+ }
64
+ selected = findFirstFocusableChildIdx(navigable, selected);
65
+ // update selected as firstfocusable maybe different if first element has skipFocus
66
+ navigable.selected = selected;
67
+ return selectChild(navigable, selected);
68
+ };
24
69
  export function handleNavigation(direction) {
25
70
  return function () {
26
- const numChildren = this.children.length;
27
- const wrap = this.wrap;
28
- const lastSelected = this.selected || 0;
29
- if (numChildren === 0) {
71
+ return moveSelection(this, direction === 'up' || direction === 'left' ? -1 : 1);
72
+ };
73
+ }
74
+ /**
75
+ * Handles navigation key events for navigable elements, \
76
+ * such as {@link lngp.Row} and {@link lngp.Column}.
77
+ *
78
+ * Uses {@link moveSelection} to select the next or previous child based on the key pressed.
79
+ *
80
+ * @example
81
+ * ```tsx
82
+ * <view
83
+ * selected={0}
84
+ * onUp={navigableHandleNavigation}
85
+ * onDown={navigableHandleNavigation}
86
+ * onSelectedChanged={(idx, el, child, lastIdx) => {...}}
87
+ * >
88
+ * ```
89
+ */
90
+ export const navigableHandleNavigation = function (e) {
91
+ return moveSelection(this, e.key === 'ArrowUp' || e.key === 'ArrowLeft' ? -1 : 1);
92
+ };
93
+ /**
94
+ * Moves the selection within a {@link lngp.NavigableElement}.
95
+ */
96
+ export function moveSelection(el, delta) {
97
+ let selected = findFirstFocusableChildIdx(el, el.selected + delta, delta);
98
+ if (selected === -1) {
99
+ if (!idxInArray(el.selected, el.children) ||
100
+ el.children[el.selected].skipFocus ||
101
+ lng.isFocused(el.children[el.selected])) {
30
102
  return false;
31
103
  }
32
- if (direction === 'right' || direction === 'down') {
33
- do {
34
- this.selected = ((this.selected || 0) % numChildren) + 1;
35
- if (this.selected >= numChildren) {
36
- if (!wrap) {
37
- this.selected = -1;
38
- break;
39
- }
40
- this.selected = 0;
41
- }
42
- } while (this.children[this.selected]?.skipFocus);
43
- }
44
- else if (direction === 'left' || direction === 'up') {
45
- do {
46
- this.selected = ((this.selected || 0) % numChildren) - 1;
47
- if (this.selected < 0) {
48
- if (!wrap) {
49
- this.selected = -1;
50
- break;
51
- }
52
- this.selected = numChildren - 1;
53
- }
54
- } while (this.children[this.selected]?.skipFocus);
55
- }
56
- if (this.selected === -1) {
57
- this.selected = lastSelected;
58
- if (this.children[this.selected]?.states.has(Config.focusStateKey || '$focus')) {
59
- // This child is already focused, so bubble up to next handler
60
- return false;
104
+ selected = el.selected;
105
+ }
106
+ const active = el.children[selected];
107
+ if (el.plinko) {
108
+ // Set the next item to have the same selected index
109
+ // so we move up / down directly
110
+ const lastSelectedChild = el.children[el.selected];
111
+ lng.assertTruthy(lastSelectedChild instanceof lng.ElementNode);
112
+ const num = lastSelectedChild.selected || 0;
113
+ active.selected =
114
+ num < active.children.length ? num : active.children.length - 1;
115
+ }
116
+ return selectChild(el, selected);
117
+ }
118
+ function distanceBetweenRectCenters(a, b) {
119
+ const dx = Math.abs(a.x + a.width / 2 - (b.x + b.width / 2)) / 2;
120
+ const dy = Math.abs(a.y + a.height / 2 - (b.y + b.height / 2)) / 2;
121
+ return Math.sqrt(dx * dx + dy * dy);
122
+ }
123
+ function findClosestFocusableChildIdx(el, prevEl) {
124
+ // select child closest to the previous active element
125
+ const prevRect = lng.getElementScreenRect(prevEl);
126
+ const elRect = lng.getElementScreenRect(el);
127
+ const childRect = { x: 0, y: 0, width: 0, height: 0 };
128
+ let closestIdx = -1;
129
+ let closestDist = Infinity;
130
+ for (const [idx, child] of el.children.entries()) {
131
+ if (!child.skipFocus) {
132
+ lng.getElementScreenRect(child, el, childRect);
133
+ childRect.x += elRect.x;
134
+ childRect.y += elRect.y;
135
+ const distance = distanceBetweenRectCenters(prevRect, childRect);
136
+ if (distance < closestDist) {
137
+ closestDist = distance;
138
+ closestIdx = idx;
61
139
  }
62
140
  }
63
- const active = this.children[this.selected || 0];
64
- assertTruthy(active instanceof ElementNode);
65
- const navigableThis = this;
66
- navigableThis.onSelectedChanged &&
67
- navigableThis.onSelectedChanged.call(navigableThis, navigableThis.selected, navigableThis, active, lastSelected);
68
- if (this.plinko) {
69
- // Set the next item to have the same selected index
70
- // so we move up / down directly
71
- const lastSelectedChild = this.children[lastSelected];
72
- assertTruthy(lastSelectedChild instanceof ElementNode);
73
- const num = lastSelectedChild.selected || 0;
74
- active.selected =
75
- num < active.children.length ? num : active.children.length - 1;
76
- }
77
- active.setFocus();
78
- return true;
79
- };
141
+ }
142
+ return closestIdx;
80
143
  }
144
+ /**
145
+ * Forwards focus to the closest or first focusable child of a {@link lngp.NavigableElement} and
146
+ * selects it.
147
+ *
148
+ * To determine the closest child, it uses the distance between the center of the previous focused element
149
+ * and the center of each child element.
150
+ *
151
+ * @example
152
+ * ```tsx
153
+ * <view
154
+ * selected={0}
155
+ * forwardFocus={spatialForwardFocus}
156
+ * onSelectedChanged={(idx, el, child, lastIdx) => {...}}
157
+ * >
158
+ * ```
159
+ */
160
+ export const spatialForwardFocus = function () {
161
+ const prevEl = s.untrack(lng.activeElement);
162
+ if (prevEl) {
163
+ const idx = findClosestFocusableChildIdx(this, prevEl);
164
+ const selected = selectChild(this, idx);
165
+ if (selected)
166
+ return true;
167
+ }
168
+ const idx = findFirstFocusableChildIdx(this);
169
+ return selectChild(this, idx);
170
+ };
171
+ /**
172
+ * Handles spatial navigation within a {@link lngp.NavigableElement} by moving focus
173
+ * based on the arrow keys pressed.
174
+ *
175
+ * This function allows for navigation in a grid-like manner for flex-wrap containers, \
176
+ * where pressing the arrow keys will either:
177
+ * - move focus to the next/prev child in the same row/column
178
+ * - or find the closest child in the next/prev row/column.
179
+ *
180
+ * @example
181
+ * ```tsx
182
+ * <view
183
+ * selected={0}
184
+ * display="flex"
185
+ * flexWrap="wrap"
186
+ * onUp={spatialHandleNavigation}
187
+ * onDown={spatialHandleNavigation}
188
+ * onSelectedChanged={(idx, el, child, lastIdx) => {...}}
189
+ * >
190
+ * ```
191
+ */
192
+ export const spatialHandleNavigation = function (e) {
193
+ let selected = this.selected;
194
+ if (typeof selected !== 'number' || !idxInArray(selected, this.children)) {
195
+ selected = findFirstFocusableChildIdx(this);
196
+ return selectChild(this, selected);
197
+ }
198
+ const prevChild = this.children[selected];
199
+ const move = { x: 0, y: 0 };
200
+ switch (e.key) {
201
+ case 'ArrowLeft':
202
+ move.x = -1;
203
+ break;
204
+ case 'ArrowRight':
205
+ move.x = 1;
206
+ break;
207
+ case 'ArrowUp':
208
+ move.y = -1;
209
+ break;
210
+ case 'ArrowDown':
211
+ move.y = 1;
212
+ break;
213
+ default:
214
+ return false;
215
+ }
216
+ const flexDir = this.flexDirection === 'column' ? 'y' : 'x';
217
+ const crossDir = flexDir === 'x' ? 'y' : 'x';
218
+ const flexDelta = move[flexDir];
219
+ const crossDelta = move[crossDir];
220
+ // Select next/prev child in the current column/row
221
+ if (flexDelta !== 0) {
222
+ for (let i = selected + flexDelta; idxInArray(i, this.children); i += flexDelta) {
223
+ const child = this.children[i];
224
+ if (child.skipFocus)
225
+ continue;
226
+ // Different column/row
227
+ if (child[crossDir] !== prevChild[crossDir])
228
+ break;
229
+ return selectChild(this, i);
230
+ }
231
+ }
232
+ // Find child in next/prev column/row
233
+ else {
234
+ let closestIdx = -1;
235
+ let closestDist = Infinity;
236
+ for (let i = selected + crossDelta; idxInArray(i, this.children); i += crossDelta) {
237
+ const child = this.children[i];
238
+ if (child.skipFocus)
239
+ continue;
240
+ // Same column/row, skip
241
+ if (child[crossDir] === prevChild[crossDir])
242
+ continue;
243
+ // Different column/row, check distance
244
+ const distance = Math.abs(child[flexDir] - prevChild[flexDir]);
245
+ if (distance >= closestDist)
246
+ break; // getting further away
247
+ closestDist = distance;
248
+ closestIdx = i;
249
+ }
250
+ return selectChild(this, closestIdx);
251
+ }
252
+ return false;
253
+ };
81
254
  //# 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":"AAAA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAC9B,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAU1C,SAAS,UAAU,CAAC,GAAW,EAAE,GAAmB;IAClD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,0BAA0B,CACjC,EAAyB,EACzB,IAAI,GAAG,CAAC,EACR,KAAK,GAAG,CAAC;IAET,KAAK,IAAI,CAAC,GAAG,IAAI,GAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;gBACZ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;YACpD,CAAC;;gBAAM,MAAM;QACf,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;YAC/B,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,SAAS,WAAW,CAAC,EAAyB,EAAE,KAAa;IAC3D,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEjC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACrC,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,YAAY,GAAG,EAAE,CAAC,QAAQ,CAAC;IACjC,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC;IAEpB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,QAAQ,EAAE,CAAC;IACnB,CAAC;IAED,2DAA2D;IAC3D,EAAE,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,KAAwB,EAAE,YAAY,CAAC,CAAC;IAE1E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,WAAW,CACzB,CAA0B;IAE1B,OAAO;QACL,OAAO,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA4B;IAC5D,MAAM,SAAS,GAAG,IAA6B,CAAC;IAEhD,IAAI,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;IAElC,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5C,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAED,QAAQ,GAAG,0BAA0B,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC3D,mFAAmF;IACnF,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC9B,OAAO,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAC9B,SAA2C;IAE3C,OAAO;QACL,OAAO,aAAa,CAClB,IAA6B,EAC7B,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACpD,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAmB,UAAU,CAAC;IAClE,OAAO,aAAa,CAClB,IAA6B,EAC7B,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACtD,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,EAAyB,EACzB,KAAa;IAEb,IAAI,QAAQ,GAAG,0BAA0B,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC;IAE1E,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACpB,IACE,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC;YACrC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAE,CAAC,SAAS;YACnC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAE,CAAC,EACxC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAE,CAAC;IAEtC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QACd,oDAAoD;QACpD,gCAAgC;QAChC,MAAM,iBAAiB,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QACnD,GAAG,CAAC,YAAY,CAAC,iBAAiB,YAAY,GAAG,CAAC,WAAW,CAAC,CAAC;QAE/D,MAAM,GAAG,GAAG,iBAAiB,CAAC,QAAQ,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,QAAQ;YACb,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,0BAA0B,CAAC,CAAW,EAAE,CAAW;IAC1D,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,4BAA4B,CACnC,EAAmB,EACnB,MAAuB;IAEvB,sDAAsD;IACtD,MAAM,QAAQ,GAAG,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAa,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAEhE,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC;IACpB,IAAI,WAAW,GAAG,QAAQ,CAAC;IAE3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACrB,GAAG,CAAC,oBAAoB,CAAC,KAAK,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;YAC/C,SAAS,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC;YACxB,SAAS,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC;YACxB,MAAM,QAAQ,GAAG,0BAA0B,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACjE,IAAI,QAAQ,GAAG,WAAW,EAAE,CAAC;gBAC3B,WAAW,GAAG,QAAQ,CAAC;gBACvB,UAAU,GAAG,GAAG,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA4B;IAC1D,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC5C,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,4BAA4B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,WAAW,CAAC,IAA6B,EAAE,GAAG,CAAC,CAAC;QACjE,IAAI,QAAQ;YAAE,OAAO,IAAI,CAAC;IAC5B,CAAC;IACD,MAAM,GAAG,GAAG,0BAA0B,CAAC,IAA6B,CAAC,CAAC;IACtE,OAAO,WAAW,CAAC,IAA6B,EAAE,GAAG,CAAC,CAAC;AACzD,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAmB,UAAU,CAAC;IAChE,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAE7B,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzE,QAAQ,GAAG,0BAA0B,CAAC,IAA6B,CAAC,CAAC;QACrE,OAAO,WAAW,CAAC,IAA6B,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAE,CAAC;IAE3C,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC5B,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;QACd,KAAK,WAAW;YACd,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACZ,MAAM;QACR,KAAK,YAAY;YACf,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,MAAM;QACR,KAAK,SAAS;YACZ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACZ,MAAM;QACR,KAAK,WAAW;YACd,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,MAAM;QACR;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5D,MAAM,QAAQ,GAAG,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAElC,mDAAmD;IACnD,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,KACE,IAAI,CAAC,GAAG,QAAQ,GAAG,SAAS,EAC5B,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,EAC5B,CAAC,IAAI,SAAS,EACd,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC;YAChC,IAAI,KAAK,CAAC,SAAS;gBAAE,SAAS;YAE9B,uBAAuB;YACvB,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,QAAQ,CAAC;gBAAE,MAAM;YAEnD,OAAO,WAAW,CAAC,IAA6B,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IACD,qCAAqC;SAChC,CAAC;QACJ,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC;QACpB,IAAI,WAAW,GAAG,QAAQ,CAAC;QAE3B,KACE,IAAI,CAAC,GAAG,QAAQ,GAAG,UAAU,EAC7B,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,EAC5B,CAAC,IAAI,UAAU,EACf,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC;YAChC,IAAI,KAAK,CAAC,SAAS;gBAAE,SAAS;YAE9B,wBAAwB;YACxB,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,QAAQ,CAAC;gBAAE,SAAS;YAEtD,uCAAuC;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;YAC/D,IAAI,QAAQ,IAAI,WAAW;gBAAE,MAAM,CAAC,uBAAuB;YAE3D,WAAW,GAAG,QAAQ,CAAC;YACvB,UAAU,GAAG,CAAC,CAAC;QACjB,CAAC;QAED,OAAO,WAAW,CAAC,IAA6B,EAAE,UAAU,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
@@ -1,10 +1,17 @@
1
1
  import type { ElementNode, ElementText } from '@lightningtv/core';
2
+ export type Scroller = (selected: number | ElementNode, component?: ElementNode, selectedElement?: ElementNode | ElementText, lastSelected?: number) => void;
2
3
  export interface ScrollableElement extends ElementNode {
3
4
  scrollIndex?: number;
5
+ scroll?: 'always' | 'none' | 'edge' | 'auto' | 'center';
4
6
  selected: number;
5
7
  offset?: number;
6
8
  endOffset?: number;
9
+ onScrolled?: (elm: ScrollableElement, offset: number, isInitial: boolean) => void;
7
10
  _targetPosition?: number;
8
11
  _screenOffset?: number;
12
+ _initialPosition?: number;
9
13
  }
10
- export declare function withScrolling(isRow: boolean): (selected: number | ElementNode, component?: ElementNode, selectedElement?: ElementNode | ElementText, lastSelected?: number) => void;
14
+ /** Use {@link scrollRow} or {@link scrollColumn} */
15
+ export declare function withScrolling(isRow: boolean): Scroller;
16
+ export declare const scrollRow: Scroller;
17
+ export declare const scrollColumn: Scroller;
@@ -8,6 +8,7 @@ const isNotShown = (node) => {
8
8
  Edge starts scrolling when it reaches the edge of the viewport.
9
9
  Always scroll moves the list every time
10
10
  */
11
+ /** Use {@link scrollRow} or {@link scrollColumn} */
11
12
  export function withScrolling(isRow) {
12
13
  const dimension = isRow ? 'width' : 'height';
13
14
  const axis = isRow ? 'x' : 'y';
@@ -19,17 +20,22 @@ export function withScrolling(isRow) {
19
20
  }
20
21
  if (!componentRef ||
21
22
  componentRef.scroll === 'none' ||
23
+ selected === lastSelected ||
22
24
  !componentRef.children.length)
23
25
  return;
26
+ if (componentRef._initialPosition === undefined) {
27
+ componentRef._initialPosition = componentRef[axis];
28
+ }
24
29
  const lng = componentRef.lng;
25
- const screenSize = isRow ? lng.stage.root.width : lng.stage.root.height;
30
+ const screenSize = isRow ? lng.stage.root.w : lng.stage.root.h;
26
31
  // Determine if movement is incremental or decremental
27
32
  const isIncrementing = lastSelected === undefined || lastSelected - 1 !== selected;
28
33
  if (componentRef._screenOffset === undefined) {
29
34
  if (componentRef.parent.clipping) {
30
35
  const p = componentRef.parent;
31
36
  componentRef.endOffset =
32
- screenSize - ((isRow ? p.absX : p.absY) || 0) - p[dimension];
37
+ componentRef.endOffset ??
38
+ screenSize - ((isRow ? p.absX : p.absY) || 0) - p[dimension];
33
39
  }
34
40
  componentRef._screenOffset =
35
41
  componentRef.offset ??
@@ -37,10 +43,16 @@ export function withScrolling(isRow) {
37
43
  }
38
44
  const screenOffset = componentRef._screenOffset;
39
45
  const gap = componentRef.gap || 0;
40
- const scroll = componentRef.scroll || 'auto';
46
+ // when creating we set scroll to always so we setup the right location for selected and scrollIndex
47
+ const scroll = componentRef.scroll ||
48
+ (lastSelected === undefined
49
+ ? componentRef.scrollIndex
50
+ ? 'center'
51
+ : 'always'
52
+ : 'auto');
41
53
  // Allows manual position control
42
54
  const targetPosition = componentRef._targetPosition ?? componentRef[axis];
43
- const rootPosition = isIncrementing || scroll === 'auto'
55
+ const rootPosition = isIncrementing
44
56
  ? Math.min(targetPosition, componentRef[axis])
45
57
  : Math.max(targetPosition, componentRef[axis]);
46
58
  componentRef.offset = componentRef.offset ?? rootPosition;
@@ -61,7 +73,7 @@ export function withScrolling(isRow) {
61
73
  const maxOffset = Math.min(screenSize -
62
74
  containerSize -
63
75
  screenOffset -
64
- (componentRef.endOffset || 2 * gap), offset);
76
+ (componentRef.endOffset ?? 2 * gap), offset);
65
77
  // Determine the next element based on whether incrementing or decrementing
66
78
  const nextIndex = isIncrementing ? selected + 1 : selected - 1;
67
79
  const nextElement = componentRef.children[nextIndex] || null;
@@ -99,7 +111,8 @@ export function withScrolling(isRow) {
99
111
  }
100
112
  }
101
113
  else if (isIncrementing) {
102
- nextPosition = -selectedPosition + offset;
114
+ //nextPosition = -selectedPosition + offset;
115
+ nextPosition = rootPosition - selectedSize - gap;
103
116
  }
104
117
  else {
105
118
  nextPosition = rootPosition + selectedSize + gap;
@@ -118,10 +131,16 @@ export function withScrolling(isRow) {
118
131
  : Math.min(nextPosition, offset);
119
132
  // Update position if it has changed
120
133
  if (componentRef[axis] !== nextPosition) {
134
+ if (componentRef.onScrolled) {
135
+ const isInitial = nextPosition === componentRef._initialPosition;
136
+ componentRef.onScrolled(componentRef, nextPosition, isInitial);
137
+ }
121
138
  componentRef[axis] = nextPosition;
122
139
  // Store the new position to keep track during animations
123
140
  componentRef._targetPosition = nextPosition;
124
141
  }
125
142
  };
126
143
  }
144
+ export const scrollRow = /* @__PURE__ */ withScrolling(true);
145
+ export const scrollColumn = /* @__PURE__ */ withScrolling(false);
127
146
  //# sourceMappingURL=withScrolling.js.map
@@ -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 RendererMainSettings, type IRendererMain } 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: IRendererMain;
6
+ renderer: import("@lightningtv/core").IRendererMain;
7
7
  rootNode: import("@lightningtv/core").ElementNode;
8
8
  render: (code: () => JSXElement) => () => void;
9
9
  };
@@ -19,9 +19,10 @@ 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;
27
+ export declare function registerDefaultShader(name: string, shader: any): void;
27
28
  export {};
@@ -100,4 +100,8 @@ export const Text = (props) => {
100
100
  spread(el, props, false);
101
101
  return el;
102
102
  };
103
+ export function registerDefaultShader(name, shader) {
104
+ // noop for v2
105
+ // renderer.stage.shManager.registerShaderType('rounded', Rounded);
106
+ }
103
107
  //# sourceMappingURL=render.js.map
@@ -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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"}
@@ -2,8 +2,9 @@ import { ElementNode, type ElementText, type TextNode } from '@lightningtv/core'
2
2
  import type { SolidNode } from './types.js';
3
3
  declare module '@lightningtv/core' {
4
4
  interface ElementNode {
5
- _queueInsert?: true;
6
- _queueRemove?: true;
5
+ /** @internal for managing series of insertions and deletions */
6
+ _queueDelete?: number;
7
+ preserve?: boolean;
7
8
  }
8
9
  }
9
10
  declare const _default: {
@@ -1,20 +1,31 @@
1
1
  import { assertTruthy, isElementText, ElementNode, NodeType, log, } from '@lightningtv/core';
2
- let elementQueue = [];
3
- function flushQueue() {
4
- for (let el of elementQueue) {
5
- if (el._queueRemove && !el._queueInsert) {
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) {
6
14
  el.destroy();
7
15
  }
8
- el._queueInsert = el._queueRemove = undefined;
16
+ el._queueDelete = undefined;
9
17
  }
10
- elementQueue.length = 0;
18
+ elementDeleteQueue.length = 0;
11
19
  }
12
- function addToQueue(node) {
13
- if (node._queueInsert && node._queueRemove) {
14
- return; // Already in the queue
20
+ function pushDeleteQueue(node, n) {
21
+ if (node._queueDelete === undefined) {
22
+ node._queueDelete = n;
23
+ if (elementDeleteQueue.push(node) === 1) {
24
+ queueMicrotask(flushDeleteQueue);
25
+ }
15
26
  }
16
- if (elementQueue.push(node) === 1) {
17
- queueMicrotask(flushQueue);
27
+ else {
28
+ node._queueDelete += n;
18
29
  }
19
30
  }
20
31
  export default {
@@ -37,11 +48,13 @@ export default {
37
48
  },
38
49
  insertNode(parent, node, anchor) {
39
50
  log('INSERT: ', parent, node, anchor);
51
+ let prevParent = node.parent;
40
52
  parent.insertChild(node, anchor);
41
53
  if (node instanceof ElementNode) {
42
- node._queueInsert = true;
43
54
  node.parent.rendered && node.render(true);
44
- addToQueue(node);
55
+ if (prevParent !== undefined) {
56
+ pushDeleteQueue(node, 1);
57
+ }
45
58
  }
46
59
  else if (isElementText(parent)) {
47
60
  // TextNodes can be placed outside of <text> nodes when <Show> is used as placeholder
@@ -55,8 +68,11 @@ export default {
55
68
  log('REMOVE: ', parent, node);
56
69
  parent.removeChild(node);
57
70
  if (node instanceof ElementNode) {
58
- node._queueRemove = true;
59
- addToQueue(node);
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();
60
76
  }
61
77
  },
62
78
  getParentNode(node) {