react-voodoo 2.6.4 → 2.7.1

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 (57) hide show
  1. package/.claude/scheduled_tasks.lock +1 -0
  2. package/README.md +23 -7
  3. package/coverage/clover.xml +2221 -0
  4. package/coverage/coverage-final.json +35 -0
  5. package/coverage/lcov-report/base.css +224 -0
  6. package/coverage/lcov-report/block-navigation.js +87 -0
  7. package/coverage/lcov-report/comps/Axis.js.html +391 -0
  8. package/coverage/lcov-report/comps/Draggable.js.html +1180 -0
  9. package/coverage/lcov-report/comps/Node.js.html +691 -0
  10. package/coverage/lcov-report/comps/Tweener.js.html +3637 -0
  11. package/coverage/lcov-report/comps/TweenerContext.js.html +127 -0
  12. package/coverage/lcov-report/comps/index.html +176 -0
  13. package/coverage/lcov-report/favicon.png +0 -0
  14. package/coverage/lcov-report/hooks/index.html +146 -0
  15. package/coverage/lcov-report/hooks/useReducedMotion.js.html +172 -0
  16. package/coverage/lcov-report/hooks/useTweener.js.html +130 -0
  17. package/coverage/lcov-report/hooks/useVoodoo.js.html +553 -0
  18. package/coverage/lcov-report/index.html +206 -0
  19. package/coverage/lcov-report/prettify.css +1 -0
  20. package/coverage/lcov-report/prettify.js +2 -0
  21. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  22. package/coverage/lcov-report/sorter.js +210 -0
  23. package/coverage/lcov-report/spells/asTweener.js.html +361 -0
  24. package/coverage/lcov-report/spells/index.html +131 -0
  25. package/coverage/lcov-report/spells/withTweener.js.html +262 -0
  26. package/coverage/lcov-report/utils/CssTweenAxis.js.html +721 -0
  27. package/coverage/lcov-report/utils/css/cssUtils.js.html +916 -0
  28. package/coverage/lcov-report/utils/css/demux/backgroundColor.js.html +115 -0
  29. package/coverage/lcov-report/utils/css/demux/boxShadow.js.html +115 -0
  30. package/coverage/lcov-report/utils/css/demux/filter.js.html +724 -0
  31. package/coverage/lcov-report/utils/css/demux/index.html +176 -0
  32. package/coverage/lcov-report/utils/css/demux/textShadow.js.html +115 -0
  33. package/coverage/lcov-report/utils/css/demux/transform.js.html +1006 -0
  34. package/coverage/lcov-report/utils/css/demux/typed/any.js.html +640 -0
  35. package/coverage/lcov-report/utils/css/demux/typed/bool.js.html +196 -0
  36. package/coverage/lcov-report/utils/css/demux/typed/color.js.html +322 -0
  37. package/coverage/lcov-report/utils/css/demux/typed/index.html +236 -0
  38. package/coverage/lcov-report/utils/css/demux/typed/length.js.html +562 -0
  39. package/coverage/lcov-report/utils/css/demux/typed/multi.js.html +298 -0
  40. package/coverage/lcov-report/utils/css/demux/typed/number.js.html +199 -0
  41. package/coverage/lcov-report/utils/css/demux/typed/ratio.js.html +199 -0
  42. package/coverage/lcov-report/utils/css/demux/typed/shadow.js.html +1060 -0
  43. package/coverage/lcov-report/utils/css/demux/typed/svgAttr.js.html +214 -0
  44. package/coverage/lcov-report/utils/css/index.html +146 -0
  45. package/coverage/lcov-report/utils/css/index.js.html +829 -0
  46. package/coverage/lcov-report/utils/css/prop.js.html +199 -0
  47. package/coverage/lcov-report/utils/dom.js.html +1309 -0
  48. package/coverage/lcov-report/utils/index.html +206 -0
  49. package/coverage/lcov-report/utils/inertia.js.html +2140 -0
  50. package/coverage/lcov-report/utils/motionPrefs.js.html +262 -0
  51. package/coverage/lcov-report/utils/react.js.html +199 -0
  52. package/coverage/lcov-report/utils/spring.js.html +397 -0
  53. package/coverage/lcov-report/utils/tweenTools.js.html +1003 -0
  54. package/coverage/lcov.info +4931 -0
  55. package/dist/react-voodoo.js +1 -1
  56. package/dist/react-voodoo.js.map +1 -1
  57. package/package.json +3 -3
@@ -0,0 +1,691 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for comps/Node.js</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../prettify.css" />
9
+ <link rel="stylesheet" href="../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../index.html">All files</a> / <a href="index.html">comps</a> Node.js</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">0% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>0/62</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">0% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/65</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">0% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>0/11</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">0% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>0/62</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
269
+ <span class="cline-any cline-neutral">&nbsp;</span>
270
+ <span class="cline-any cline-neutral">&nbsp;</span>
271
+ <span class="cline-any cline-neutral">&nbsp;</span>
272
+ <span class="cline-any cline-neutral">&nbsp;</span>
273
+ <span class="cline-any cline-neutral">&nbsp;</span>
274
+ <span class="cline-any cline-neutral">&nbsp;</span>
275
+ <span class="cline-any cline-neutral">&nbsp;</span>
276
+ <span class="cline-any cline-neutral">&nbsp;</span>
277
+ <span class="cline-any cline-neutral">&nbsp;</span>
278
+ <span class="cline-any cline-neutral">&nbsp;</span>
279
+ <span class="cline-any cline-neutral">&nbsp;</span>
280
+ <span class="cline-any cline-neutral">&nbsp;</span>
281
+ <span class="cline-any cline-neutral">&nbsp;</span>
282
+ <span class="cline-any cline-neutral">&nbsp;</span>
283
+ <span class="cline-any cline-neutral">&nbsp;</span>
284
+ <span class="cline-any cline-neutral">&nbsp;</span>
285
+ <span class="cline-any cline-neutral">&nbsp;</span>
286
+ <span class="cline-any cline-neutral">&nbsp;</span>
287
+ <span class="cline-any cline-neutral">&nbsp;</span>
288
+ <span class="cline-any cline-neutral">&nbsp;</span>
289
+ <span class="cline-any cline-neutral">&nbsp;</span>
290
+ <span class="cline-any cline-neutral">&nbsp;</span>
291
+ <span class="cline-any cline-neutral">&nbsp;</span>
292
+ <span class="cline-any cline-neutral">&nbsp;</span>
293
+ <span class="cline-any cline-neutral">&nbsp;</span>
294
+ <span class="cline-any cline-neutral">&nbsp;</span>
295
+ <span class="cline-any cline-neutral">&nbsp;</span>
296
+ <span class="cline-any cline-neutral">&nbsp;</span>
297
+ <span class="cline-any cline-neutral">&nbsp;</span>
298
+ <span class="cline-any cline-neutral">&nbsp;</span>
299
+ <span class="cline-any cline-neutral">&nbsp;</span>
300
+ <span class="cline-any cline-neutral">&nbsp;</span>
301
+ <span class="cline-any cline-neutral">&nbsp;</span>
302
+ <span class="cline-any cline-neutral">&nbsp;</span>
303
+ <span class="cline-any cline-neutral">&nbsp;</span>
304
+ <span class="cline-any cline-neutral">&nbsp;</span>
305
+ <span class="cline-any cline-no">&nbsp;</span>
306
+ <span class="cline-any cline-no">&nbsp;</span>
307
+ <span class="cline-any cline-neutral">&nbsp;</span>
308
+ <span class="cline-any cline-neutral">&nbsp;</span>
309
+ <span class="cline-any cline-neutral">&nbsp;</span>
310
+ <span class="cline-any cline-neutral">&nbsp;</span>
311
+ <span class="cline-any cline-neutral">&nbsp;</span>
312
+ <span class="cline-any cline-neutral">&nbsp;</span>
313
+ <span class="cline-any cline-no">&nbsp;</span>
314
+ <span class="cline-any cline-neutral">&nbsp;</span>
315
+ <span class="cline-any cline-no">&nbsp;</span>
316
+ <span class="cline-any cline-neutral">&nbsp;</span>
317
+ <span class="cline-any cline-neutral">&nbsp;</span>
318
+ <span class="cline-any cline-neutral">&nbsp;</span>
319
+ <span class="cline-any cline-neutral">&nbsp;</span>
320
+ <span class="cline-any cline-neutral">&nbsp;</span>
321
+ <span class="cline-any cline-neutral">&nbsp;</span>
322
+ <span class="cline-any cline-neutral">&nbsp;</span>
323
+ <span class="cline-any cline-neutral">&nbsp;</span>
324
+ <span class="cline-any cline-no">&nbsp;</span>
325
+ <span class="cline-any cline-no">&nbsp;</span>
326
+ <span class="cline-any cline-no">&nbsp;</span>
327
+ <span class="cline-any cline-neutral">&nbsp;</span>
328
+ <span class="cline-any cline-no">&nbsp;</span>
329
+ <span class="cline-any cline-no">&nbsp;</span>
330
+ <span class="cline-any cline-no">&nbsp;</span>
331
+ <span class="cline-any cline-neutral">&nbsp;</span>
332
+ <span class="cline-any cline-no">&nbsp;</span>
333
+ <span class="cline-any cline-no">&nbsp;</span>
334
+ <span class="cline-any cline-no">&nbsp;</span>
335
+ <span class="cline-any cline-neutral">&nbsp;</span>
336
+ <span class="cline-any cline-no">&nbsp;</span>
337
+ <span class="cline-any cline-no">&nbsp;</span>
338
+ <span class="cline-any cline-no">&nbsp;</span>
339
+ <span class="cline-any cline-neutral">&nbsp;</span>
340
+ <span class="cline-any cline-neutral">&nbsp;</span>
341
+ <span class="cline-any cline-neutral">&nbsp;</span>
342
+ <span class="cline-any cline-neutral">&nbsp;</span>
343
+ <span class="cline-any cline-no">&nbsp;</span>
344
+ <span class="cline-any cline-neutral">&nbsp;</span>
345
+ <span class="cline-any cline-neutral">&nbsp;</span>
346
+ <span class="cline-any cline-neutral">&nbsp;</span>
347
+ <span class="cline-any cline-neutral">&nbsp;</span>
348
+ <span class="cline-any cline-neutral">&nbsp;</span>
349
+ <span class="cline-any cline-no">&nbsp;</span>
350
+ <span class="cline-any cline-no">&nbsp;</span>
351
+ <span class="cline-any cline-no">&nbsp;</span>
352
+ <span class="cline-any cline-no">&nbsp;</span>
353
+ <span class="cline-any cline-no">&nbsp;</span>
354
+ <span class="cline-any cline-neutral">&nbsp;</span>
355
+ <span class="cline-any cline-no">&nbsp;</span>
356
+ <span class="cline-any cline-no">&nbsp;</span>
357
+ <span class="cline-any cline-no">&nbsp;</span>
358
+ <span class="cline-any cline-neutral">&nbsp;</span>
359
+ <span class="cline-any cline-no">&nbsp;</span>
360
+ <span class="cline-any cline-no">&nbsp;</span>
361
+ <span class="cline-any cline-no">&nbsp;</span>
362
+ <span class="cline-any cline-neutral">&nbsp;</span>
363
+ <span class="cline-any cline-neutral">&nbsp;</span>
364
+ <span class="cline-any cline-neutral">&nbsp;</span>
365
+ <span class="cline-any cline-neutral">&nbsp;</span>
366
+ <span class="cline-any cline-neutral">&nbsp;</span>
367
+ <span class="cline-any cline-neutral">&nbsp;</span>
368
+ <span class="cline-any cline-no">&nbsp;</span>
369
+ <span class="cline-any cline-neutral">&nbsp;</span>
370
+ <span class="cline-any cline-no">&nbsp;</span>
371
+ <span class="cline-any cline-neutral">&nbsp;</span>
372
+ <span class="cline-any cline-neutral">&nbsp;</span>
373
+ <span class="cline-any cline-no">&nbsp;</span>
374
+ <span class="cline-any cline-no">&nbsp;</span>
375
+ <span class="cline-any cline-no">&nbsp;</span>
376
+ <span class="cline-any cline-neutral">&nbsp;</span>
377
+ <span class="cline-any cline-neutral">&nbsp;</span>
378
+ <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-neutral">&nbsp;</span>
380
+ <span class="cline-any cline-neutral">&nbsp;</span>
381
+ <span class="cline-any cline-no">&nbsp;</span>
382
+ <span class="cline-any cline-no">&nbsp;</span>
383
+ <span class="cline-any cline-neutral">&nbsp;</span>
384
+ <span class="cline-any cline-neutral">&nbsp;</span>
385
+ <span class="cline-any cline-neutral">&nbsp;</span>
386
+ <span class="cline-any cline-no">&nbsp;</span>
387
+ <span class="cline-any cline-no">&nbsp;</span>
388
+ <span class="cline-any cline-no">&nbsp;</span>
389
+ <span class="cline-any cline-no">&nbsp;</span>
390
+ <span class="cline-any cline-neutral">&nbsp;</span>
391
+ <span class="cline-any cline-no">&nbsp;</span>
392
+ <span class="cline-any cline-neutral">&nbsp;</span>
393
+ <span class="cline-any cline-neutral">&nbsp;</span>
394
+ <span class="cline-any cline-neutral">&nbsp;</span>
395
+ <span class="cline-any cline-neutral">&nbsp;</span>
396
+ <span class="cline-any cline-no">&nbsp;</span>
397
+ <span class="cline-any cline-neutral">&nbsp;</span>
398
+ <span class="cline-any cline-neutral">&nbsp;</span>
399
+ <span class="cline-any cline-no">&nbsp;</span>
400
+ <span class="cline-any cline-neutral">&nbsp;</span>
401
+ <span class="cline-any cline-neutral">&nbsp;</span>
402
+ <span class="cline-any cline-neutral">&nbsp;</span>
403
+ <span class="cline-any cline-neutral">&nbsp;</span>
404
+ <span class="cline-any cline-neutral">&nbsp;</span>
405
+ <span class="cline-any cline-neutral">&nbsp;</span>
406
+ <span class="cline-any cline-no">&nbsp;</span>
407
+ <span class="cline-any cline-neutral">&nbsp;</span>
408
+ <span class="cline-any cline-no">&nbsp;</span>
409
+ <span class="cline-any cline-no">&nbsp;</span>
410
+ <span class="cline-any cline-no">&nbsp;</span>
411
+ <span class="cline-any cline-neutral">&nbsp;</span>
412
+ <span class="cline-any cline-neutral">&nbsp;</span>
413
+ <span class="cline-any cline-no">&nbsp;</span>
414
+ <span class="cline-any cline-no">&nbsp;</span>
415
+ <span class="cline-any cline-neutral">&nbsp;</span>
416
+ <span class="cline-any cline-neutral">&nbsp;</span>
417
+ <span class="cline-any cline-no">&nbsp;</span>
418
+ <span class="cline-any cline-neutral">&nbsp;</span>
419
+ <span class="cline-any cline-neutral">&nbsp;</span>
420
+ <span class="cline-any cline-no">&nbsp;</span>
421
+ <span class="cline-any cline-neutral">&nbsp;</span>
422
+ <span class="cline-any cline-neutral">&nbsp;</span>
423
+ <span class="cline-any cline-no">&nbsp;</span>
424
+ <span class="cline-any cline-neutral">&nbsp;</span>
425
+ <span class="cline-any cline-no">&nbsp;</span>
426
+ <span class="cline-any cline-no">&nbsp;</span>
427
+ <span class="cline-any cline-neutral">&nbsp;</span>
428
+ <span class="cline-any cline-neutral">&nbsp;</span>
429
+ <span class="cline-any cline-neutral">&nbsp;</span>
430
+ <span class="cline-any cline-neutral">&nbsp;</span>
431
+ <span class="cline-any cline-no">&nbsp;</span>
432
+ <span class="cline-any cline-no">&nbsp;</span>
433
+ <span class="cline-any cline-neutral">&nbsp;</span>
434
+ <span class="cline-any cline-neutral">&nbsp;</span>
435
+ <span class="cline-any cline-neutral">&nbsp;</span>
436
+ <span class="cline-any cline-neutral">&nbsp;</span>
437
+ <span class="cline-any cline-neutral">&nbsp;</span>
438
+ <span class="cline-any cline-neutral">&nbsp;</span>
439
+ <span class="cline-any cline-neutral">&nbsp;</span>
440
+ <span class="cline-any cline-neutral">&nbsp;</span>
441
+ <span class="cline-any cline-neutral">&nbsp;</span>
442
+ <span class="cline-any cline-neutral">&nbsp;</span>
443
+ <span class="cline-any cline-neutral">&nbsp;</span>
444
+ <span class="cline-any cline-no">&nbsp;</span>
445
+ <span class="cline-any cline-neutral">&nbsp;</span>
446
+ <span class="cline-any cline-neutral">&nbsp;</span>
447
+ <span class="cline-any cline-neutral">&nbsp;</span>
448
+ <span class="cline-any cline-neutral">&nbsp;</span>
449
+ <span class="cline-any cline-neutral">&nbsp;</span>
450
+ <span class="cline-any cline-neutral">&nbsp;</span>
451
+ <span class="cline-any cline-no">&nbsp;</span>
452
+ <span class="cline-any cline-neutral">&nbsp;</span>
453
+ <span class="cline-any cline-no">&nbsp;</span>
454
+ <span class="cline-any cline-neutral">&nbsp;</span>
455
+ <span class="cline-any cline-neutral">&nbsp;</span>
456
+ <span class="cline-any cline-neutral">&nbsp;</span>
457
+ <span class="cline-any cline-neutral">&nbsp;</span>
458
+ <span class="cline-any cline-no">&nbsp;</span>
459
+ <span class="cline-any cline-no">&nbsp;</span>
460
+ <span class="cline-any cline-neutral">&nbsp;</span>
461
+ <span class="cline-any cline-neutral">&nbsp;</span>
462
+ <span class="cline-any cline-neutral">&nbsp;</span>
463
+ <span class="cline-any cline-neutral">&nbsp;</span>
464
+ <span class="cline-any cline-neutral">&nbsp;</span>
465
+ <span class="cline-any cline-no">&nbsp;</span>
466
+ <span class="cline-any cline-no">&nbsp;</span>
467
+ <span class="cline-any cline-neutral">&nbsp;</span>
468
+ <span class="cline-any cline-neutral">&nbsp;</span>
469
+ <span class="cline-any cline-neutral">&nbsp;</span>
470
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/*
471
+ * Copyright (c) 2022-2023 Braun Nathanael
472
+ *
473
+ * This project is dual licensed under one of the following licenses:
474
+ * - Creative Commons Attribution-NoDerivatives 4.0 International License.
475
+ * - GNU AFFERO GENERAL PUBLIC LICENSE Version 3
476
+ *
477
+ * You should have received a copy of theses licenses along with this work.
478
+ * If not, see &lt;http://creativecommons.org/licenses/by-nd/4.0/&gt; or &lt;http://www.gnu.org/licenses/agpl-3.0.txt&gt;.
479
+ */
480
+ &nbsp;
481
+ import deepEqual from "fast-deep-equal";
482
+ import is from "is";
483
+ import React from 'react';
484
+ import shortid from 'shortid';
485
+ import useVoodoo from "../hooks/useVoodoo";
486
+ &nbsp;
487
+ import {isFunctionalComponent} from '../utils/react';
488
+ &nbsp;
489
+ /**
490
+ * Node — wraps a single React child and registers it with the parent Tweener as a
491
+ * tweenable element.
492
+ *
493
+ * On each render, `tweener.tweenRef(id, childStyle, initialMap)` is called. This
494
+ * returns `{ style, ref }` which are spread onto the child: `style` contains the
495
+ * current CSS for the initial render, and `ref` is a callback that gives the Tweener
496
+ * the raw DOM node for subsequent direct writes (bypassing React entirely).
497
+ *
498
+ * Optionally, per-axis tween descriptor arrays can be provided via the `axes` /
499
+ * `tweenLines` prop. Node then also calls `tweener.addScrollableAnim()` so the node
500
+ * participates in scroll-driven animations without needing a separate `&lt;Axis&gt;`.
501
+ *
502
+ * `Node.div` and `Node.g` are convenience wrappers that pre-supply a `&lt;div&gt;` or
503
+ * `&lt;g&gt;` child so consumers don't have to write the child element themselves.
504
+ */
505
+ &nbsp;
506
+ function <span class="fstat-no" title="function not covered" >setTarget(</span> anims, target ) {
507
+ <span class="cstat-no" title="statement not covered" > return anims.map(</span>
508
+ <span class="fstat-no" title="function not covered" > tw</span>een =&gt; (<span class="cstat-no" title="statement not covered" >{</span>
509
+ ...tween,
510
+ target
511
+ })
512
+ )
513
+ }
514
+ &nbsp;
515
+ const Node = <span class="cstat-no" title="statement not covered" >React.forwardRef(<span class="fstat-no" title="function not covered" >( </span>{</span>
516
+ children,
517
+ id = <span class="branch-0 cbranch-no" title="branch not covered" >React.useMemo(<span class="fstat-no" title="function not covered" >()</span> =&gt; <span class="cstat-no" title="statement not covered" >shortid.generate(),</span> []),</span>
518
+ style, initial, pos, noRef, reset, tweener,
519
+ isRoot,
520
+ axes,
521
+ refProp = <span class="branch-0 cbranch-no" title="branch not covered" >"nodeRef",</span>
522
+ tweenLines = <span class="branch-0 cbranch-no" title="branch not covered" >axes,</span>
523
+ tweenAxis = <span class="branch-0 cbranch-no" title="branch not covered" >tweenLines,</span>
524
+ ...props
525
+ }, ref ) =&gt; {
526
+ let µ = <span class="cstat-no" title="statement not covered" >React.useRef({}).current,</span>
527
+ [parentTweener] = <span class="cstat-no" title="statement not covered" >useVoodoo(true);</span>
528
+ <span class="cstat-no" title="statement not covered" > parentTweener = tweener || parentTweener;</span>
529
+
530
+ <span class="cstat-no" title="statement not covered" > if ( !parentTweener ) {</span>
531
+ <span class="cstat-no" title="statement not covered" > console.error("[react-voodoo] No Tweener found in context — is there a parent ViewBox (useVoodoo) wrapping this Node?")</span>
532
+ <span class="cstat-no" title="statement not covered" > return &lt;React.Fragment/&gt;;</span>
533
+ }
534
+ <span class="cstat-no" title="statement not covered" > if ( !children ) {</span>
535
+ <span class="cstat-no" title="statement not covered" > console.warn("[react-voodoo] No Child node to animate — is there a childNodes to this Node?")</span>
536
+ <span class="cstat-no" title="statement not covered" > return &lt;React.Fragment/&gt;;</span>
537
+ }
538
+ <span class="cstat-no" title="statement not covered" > if ( children.length&gt;1 ) {</span>
539
+ <span class="cstat-no" title="statement not covered" > console.warn("[react-voodoo] Multiple Child node to animate — is there an array of childNodes to this Node?")</span>
540
+ <span class="cstat-no" title="statement not covered" > return &lt;React.Fragment/&gt;;</span>
541
+ }
542
+ // Register this node with the tweener. Returns { style, ref }:
543
+ // style — current CSS computed from initial values; used for the first render
544
+ // ref — callback that stores the DOM node in tweener._.refs[id] for direct writes
545
+ let twRef = <span class="cstat-no" title="statement not covered" >parentTweener.tweenRef(id, children.props &amp;&amp; children.props.style, style || initial,</span>
546
+ pos, ref, noRef),
547
+ axisItemsChange;
548
+
549
+
550
+ // remove refs when unmount
551
+ <span class="cstat-no" title="statement not covered" > React.useEffect(</span>
552
+ <span class="fstat-no" title="function not covered" > ()</span> =&gt; <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >()</span> =&gt; {</span>
553
+ <span class="cstat-no" title="statement not covered" > if ( µ._tweenAxisObj ) {</span>
554
+ <span class="cstat-no" title="statement not covered" > Object.keys(µ._tweenAxisObj)</span>
555
+ .forEach(<span class="fstat-no" title="function not covered" >ax</span>e =&gt; <span class="cstat-no" title="statement not covered" >µ._currentTweener.rmScrollableAnim(µ._tweenAxisObj[axe], axe))</span>;
556
+ }
557
+ <span class="cstat-no" title="statement not covered" > if ( µ._currentTweener ) {</span>
558
+ <span class="cstat-no" title="statement not covered" > µ._currentTweener.rmTweenRef(µ.__tweenableId)</span>
559
+ <span class="cstat-no" title="statement not covered" > µ._currentTweener.setRootRef(undefined);</span>
560
+ }
561
+ <span class="cstat-no" title="statement not covered" > delete µ._currentTweener;</span>
562
+ <span class="cstat-no" title="statement not covered" > delete µ._tweenAxisObj;</span>
563
+ <span class="cstat-no" title="statement not covered" > delete µ._previousScrollable;</span>
564
+ },
565
+ []
566
+ )
567
+ // Detect whether the per-node axis descriptor changed. Reference-equality is
568
+ // checked first (fast path); deepEqual is the fallback to avoid rebuilding the
569
+ // timeline when the consumer passes a new array literal with identical contents.
570
+ <span class="cstat-no" title="statement not covered" > axisItemsChange = µ._tweenAxis !== tweenAxis &amp;&amp; !(µ._tweenAxis &amp;&amp; deepEqual(tweenAxis, µ._tweenAxis))</span>
571
+ || (tweenAxis &amp;&amp; !µ._tweenAxis);
572
+ <span class="cstat-no" title="statement not covered" > if ( axisItemsChange || µ._currentTweener !== parentTweener || µ._previousScrollable !== tweenAxis ) {</span>
573
+
574
+ // if items changes rm the old items
575
+ <span class="cstat-no" title="statement not covered" > if ( µ._currentTweener &amp;&amp; axisItemsChange ) {</span>
576
+ <span class="cstat-no" title="statement not covered" > µ._tweenAxisObj &amp;&amp; Object.keys(µ._tweenAxisObj)</span>
577
+ .forEach(<span class="fstat-no" title="function not covered" >ax</span>e =&gt; <span class="cstat-no" title="statement not covered" >µ._currentTweener.rmScrollableAnim(µ._tweenAxisObj[axe], axe))</span>;
578
+
579
+ }
580
+ //console.log(twRef, axisItemsChange, µ._tweenAxis, tweenAxis)
581
+
582
+ // if tweener changes rm the node ref
583
+ <span class="cstat-no" title="statement not covered" > if ( µ._currentTweener &amp;&amp; µ._currentTweener !== parentTweener ) {</span>
584
+ <span class="cstat-no" title="statement not covered" > µ._currentTweener.rmTweenRef(id);</span>
585
+ }
586
+
587
+ // if items changes reg the items on the tweener
588
+ <span class="cstat-no" title="statement not covered" > if ( axisItemsChange ) {</span>
589
+ <span class="cstat-no" title="statement not covered" > µ._tweenAxis = tweenAxis;</span>
590
+ <span class="cstat-no" title="statement not covered" > if ( tweenAxis &amp;&amp; is.array(tweenAxis) )</span>
591
+ <span class="cstat-no" title="statement not covered" > µ._tweenAxisObj = { scrollY: parentTweener.addScrollableAnim(setTarget(tweenAxis, id)) };</span>
592
+ else
593
+ <span class="cstat-no" title="statement not covered" > µ._tweenAxisObj = tweenAxis &amp;&amp;</span>
594
+ Object.keys(tweenAxis)
595
+ .reduce(
596
+ <span class="fstat-no" title="function not covered" > ( </span>h, axe ) =&gt;
597
+ (
598
+ <span class="cstat-no" title="statement not covered" > h[axe] = parentTweener.addScrollableAnim(setTarget(tweenAxis[axe], id), axe),</span>
599
+ h
600
+ ), {});
601
+ <span class="cstat-no" title="statement not covered" > twRef = parentTweener.tweenRef(id, children.props &amp;&amp; children.props.style, style || initial,</span>
602
+ pos, ref, noRef)
603
+ }
604
+
605
+ // After any tweener or axis change, force a fresh CSS snapshot so the child
606
+ // receives accurate initial styles on this render even if the Tweener has
607
+ // advanced the position since the last tweenRef call.
608
+ <span class="cstat-no" title="statement not covered" > twRef.style = { ...parentTweener._updateTweenRef(id, true) };</span>
609
+ &nbsp;
610
+ <span class="cstat-no" title="statement not covered" > if ( props.hasOwnProperty("isRoot") ) {</span>
611
+ <span class="cstat-no" title="statement not covered" > µ._currentTweener &amp;&amp; µ._currentTweener.setRootRef(undefined);</span>
612
+ <span class="cstat-no" title="statement not covered" > tweener.setRootRef(id);</span>
613
+ }
614
+
615
+ <span class="cstat-no" title="statement not covered" > µ._currentTweener = parentTweener;</span>
616
+ <span class="cstat-no" title="statement not covered" > µ._previousScrollable = tweenAxis;</span>
617
+
618
+ }
619
+ else <span class="cstat-no" title="statement not covered" >if ( twRef ) {</span>
620
+ // No structural change — still refresh style in case the Tweener advanced
621
+ // (e.g. a running animation or scroll event) between renders.
622
+ <span class="cstat-no" title="statement not covered" > twRef.style = { ...parentTweener._updateTweenRef(id, true) };</span>
623
+ }
624
+
625
+ let RefChild = <span class="cstat-no" title="statement not covered" >React.Children.only(children);</span>
626
+
627
+ <span class="cstat-no" title="statement not covered" > if ( RefChild &amp;&amp; React.isValidElement(RefChild) ) {//todo</span>
628
+ <span class="cstat-no" title="statement not covered" > µ._lastRef = twRef;</span>
629
+
630
+ // Functional components don't accept the standard `ref` prop unless they use
631
+ // forwardRef. Pass the DOM-node callback under the named `refProp` instead
632
+ // (defaults to "nodeRef") so the consumer can opt into ref forwarding manually.
633
+ <span class="cstat-no" title="statement not covered" > if ( isFunctionalComponent(RefChild.type) )</span>
634
+ <span class="cstat-no" title="statement not covered" > return &lt;RefChild.type</span>
635
+ {...props}
636
+ {...RefChild.props}
637
+ {...twRef}
638
+ ref={undefined}
639
+ {
640
+ ...{
641
+ [refProp]: twRef.ref
642
+ }
643
+ }
644
+ /&gt;;
645
+ &nbsp;
646
+ <span class="cstat-no" title="statement not covered" > return &lt;RefChild.type</span>
647
+ {...props}
648
+ {...RefChild.props}
649
+ {...twRef}/&gt;;
650
+
651
+ }
652
+ else {
653
+ <span class="cstat-no" title="statement not covered" > console.error("[react-voodoo] Node requires exactly one valid React element as a child. Node id:", id)</span>
654
+ }
655
+ <span class="cstat-no" title="statement not covered" > return &lt;div&gt;Invalid&lt;/div&gt;;</span>
656
+ })
657
+ export default Node;
658
+ &nbsp;
659
+ // Convenience: animatable &lt;div&gt; wrapper — saves typing the child element boilerplate.
660
+ <span class="cstat-no" title="statement not covered" >Node.div = React.forwardRef(<span class="fstat-no" title="function not covered" >( </span>{ children, className, ...props }, ref ) =&gt; {</span>
661
+ <span class="cstat-no" title="statement not covered" > return &lt;Node {...props} ref={ref}&gt;</span>
662
+ &lt;div className={className}&gt;{children}&lt;/div&gt;
663
+ &lt;/Node&gt;;
664
+ })
665
+ &nbsp;
666
+ // Convenience: animatable SVG &lt;g&gt; wrapper for use inside &lt;svg&gt; trees.
667
+ <span class="cstat-no" title="statement not covered" >Node.g = React.forwardRef(<span class="fstat-no" title="function not covered" >( </span>{ children, className, ...props }, ref ) =&gt; {</span>
668
+ <span class="cstat-no" title="statement not covered" > return &lt;Node {...props} ref={ref}&gt;</span>
669
+ &lt;g className={className}&gt;{children}&lt;/g&gt;
670
+ &lt;/Node&gt;;
671
+ })
672
+ &nbsp;</pre></td></tr></table></pre>
673
+
674
+ <div class='push'></div><!-- for sticky footer -->
675
+ </div><!-- /wrapper -->
676
+ <div class='footer quiet pad2 space-top1 center small'>
677
+ Code coverage generated by
678
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
679
+ at 2026-06-06T09:33:16.802Z
680
+ </div>
681
+ <script src="../prettify.js"></script>
682
+ <script>
683
+ window.onload = function () {
684
+ prettyPrint();
685
+ };
686
+ </script>
687
+ <script src="../sorter.js"></script>
688
+ <script src="../block-navigation.js"></script>
689
+ </body>
690
+ </html>
691
+