react-voodoo 2.6.3 → 2.7.0

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 +33 -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,1003 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for utils/tweenTools.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">utils</a> tweenTools.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/121</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/120</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/29</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/113</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>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
373
+ <span class="cline-any cline-neutral">&nbsp;</span>
374
+ <span class="cline-any cline-neutral">&nbsp;</span>
375
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
382
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
387
+ <span class="cline-any cline-neutral">&nbsp;</span>
388
+ <span class="cline-any cline-neutral">&nbsp;</span>
389
+ <span class="cline-any cline-neutral">&nbsp;</span>
390
+ <span class="cline-any cline-neutral">&nbsp;</span>
391
+ <span class="cline-any cline-neutral">&nbsp;</span>
392
+ <span class="cline-any cline-no">&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-neutral">&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-neutral">&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-no">&nbsp;</span>
406
+ <span class="cline-any cline-no">&nbsp;</span>
407
+ <span class="cline-any cline-no">&nbsp;</span>
408
+ <span class="cline-any cline-no">&nbsp;</span>
409
+ <span class="cline-any cline-neutral">&nbsp;</span>
410
+ <span class="cline-any cline-no">&nbsp;</span>
411
+ <span class="cline-any cline-no">&nbsp;</span>
412
+ <span class="cline-any cline-no">&nbsp;</span>
413
+ <span class="cline-any cline-neutral">&nbsp;</span>
414
+ <span class="cline-any cline-no">&nbsp;</span>
415
+ <span class="cline-any cline-no">&nbsp;</span>
416
+ <span class="cline-any cline-no">&nbsp;</span>
417
+ <span class="cline-any cline-no">&nbsp;</span>
418
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
422
+ <span class="cline-any cline-no">&nbsp;</span>
423
+ <span class="cline-any cline-no">&nbsp;</span>
424
+ <span class="cline-any cline-no">&nbsp;</span>
425
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
429
+ <span class="cline-any cline-neutral">&nbsp;</span>
430
+ <span class="cline-any cline-no">&nbsp;</span>
431
+ <span class="cline-any cline-neutral">&nbsp;</span>
432
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
441
+ <span class="cline-any cline-no">&nbsp;</span>
442
+ <span class="cline-any cline-neutral">&nbsp;</span>
443
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
447
+ <span class="cline-any cline-no">&nbsp;</span>
448
+ <span class="cline-any cline-no">&nbsp;</span>
449
+ <span class="cline-any cline-no">&nbsp;</span>
450
+ <span class="cline-any cline-no">&nbsp;</span>
451
+ <span class="cline-any cline-neutral">&nbsp;</span>
452
+ <span class="cline-any cline-no">&nbsp;</span>
453
+ <span class="cline-any cline-neutral">&nbsp;</span>
454
+ <span class="cline-any cline-no">&nbsp;</span>
455
+ <span class="cline-any cline-neutral">&nbsp;</span>
456
+ <span class="cline-any cline-no">&nbsp;</span>
457
+ <span class="cline-any cline-neutral">&nbsp;</span>
458
+ <span class="cline-any cline-neutral">&nbsp;</span>
459
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
465
+ <span class="cline-any cline-no">&nbsp;</span>
466
+ <span class="cline-any cline-neutral">&nbsp;</span>
467
+ <span class="cline-any cline-no">&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>
471
+ <span class="cline-any cline-neutral">&nbsp;</span>
472
+ <span class="cline-any cline-neutral">&nbsp;</span>
473
+ <span class="cline-any cline-neutral">&nbsp;</span>
474
+ <span class="cline-any cline-neutral">&nbsp;</span>
475
+ <span class="cline-any cline-neutral">&nbsp;</span>
476
+ <span class="cline-any cline-neutral">&nbsp;</span>
477
+ <span class="cline-any cline-neutral">&nbsp;</span>
478
+ <span class="cline-any cline-neutral">&nbsp;</span>
479
+ <span class="cline-any cline-neutral">&nbsp;</span>
480
+ <span class="cline-any cline-neutral">&nbsp;</span>
481
+ <span class="cline-any cline-no">&nbsp;</span>
482
+ <span class="cline-any cline-neutral">&nbsp;</span>
483
+ <span class="cline-any cline-neutral">&nbsp;</span>
484
+ <span class="cline-any cline-no">&nbsp;</span>
485
+ <span class="cline-any cline-no">&nbsp;</span>
486
+ <span class="cline-any cline-neutral">&nbsp;</span>
487
+ <span class="cline-any cline-no">&nbsp;</span>
488
+ <span class="cline-any cline-neutral">&nbsp;</span>
489
+ <span class="cline-any cline-neutral">&nbsp;</span>
490
+ <span class="cline-any cline-neutral">&nbsp;</span>
491
+ <span class="cline-any cline-no">&nbsp;</span>
492
+ <span class="cline-any cline-neutral">&nbsp;</span>
493
+ <span class="cline-any cline-no">&nbsp;</span>
494
+ <span class="cline-any cline-neutral">&nbsp;</span>
495
+ <span class="cline-any cline-neutral">&nbsp;</span>
496
+ <span class="cline-any cline-neutral">&nbsp;</span>
497
+ <span class="cline-any cline-neutral">&nbsp;</span>
498
+ <span class="cline-any cline-neutral">&nbsp;</span>
499
+ <span class="cline-any cline-neutral">&nbsp;</span>
500
+ <span class="cline-any cline-no">&nbsp;</span>
501
+ <span class="cline-any cline-neutral">&nbsp;</span>
502
+ <span class="cline-any cline-neutral">&nbsp;</span>
503
+ <span class="cline-any cline-neutral">&nbsp;</span>
504
+ <span class="cline-any cline-no">&nbsp;</span>
505
+ <span class="cline-any cline-no">&nbsp;</span>
506
+ <span class="cline-any cline-no">&nbsp;</span>
507
+ <span class="cline-any cline-no">&nbsp;</span>
508
+ <span class="cline-any cline-no">&nbsp;</span>
509
+ <span class="cline-any cline-no">&nbsp;</span>
510
+ <span class="cline-any cline-neutral">&nbsp;</span>
511
+ <span class="cline-any cline-no">&nbsp;</span>
512
+ <span class="cline-any cline-neutral">&nbsp;</span>
513
+ <span class="cline-any cline-no">&nbsp;</span>
514
+ <span class="cline-any cline-no">&nbsp;</span>
515
+ <span class="cline-any cline-neutral">&nbsp;</span>
516
+ <span class="cline-any cline-neutral">&nbsp;</span>
517
+ <span class="cline-any cline-neutral">&nbsp;</span>
518
+ <span class="cline-any cline-neutral">&nbsp;</span>
519
+ <span class="cline-any cline-neutral">&nbsp;</span>
520
+ <span class="cline-any cline-neutral">&nbsp;</span>
521
+ <span class="cline-any cline-neutral">&nbsp;</span>
522
+ <span class="cline-any cline-neutral">&nbsp;</span>
523
+ <span class="cline-any cline-neutral">&nbsp;</span>
524
+ <span class="cline-any cline-neutral">&nbsp;</span>
525
+ <span class="cline-any cline-no">&nbsp;</span>
526
+ <span class="cline-any cline-neutral">&nbsp;</span>
527
+ <span class="cline-any cline-no">&nbsp;</span>
528
+ <span class="cline-any cline-no">&nbsp;</span>
529
+ <span class="cline-any cline-neutral">&nbsp;</span>
530
+ <span class="cline-any cline-no">&nbsp;</span>
531
+ <span class="cline-any cline-neutral">&nbsp;</span>
532
+ <span class="cline-any cline-neutral">&nbsp;</span>
533
+ <span class="cline-any cline-neutral">&nbsp;</span>
534
+ <span class="cline-any cline-no">&nbsp;</span>
535
+ <span class="cline-any cline-neutral">&nbsp;</span>
536
+ <span class="cline-any cline-no">&nbsp;</span>
537
+ <span class="cline-any cline-neutral">&nbsp;</span>
538
+ <span class="cline-any cline-neutral">&nbsp;</span>
539
+ <span class="cline-any cline-neutral">&nbsp;</span>
540
+ <span class="cline-any cline-neutral">&nbsp;</span>
541
+ <span class="cline-any cline-neutral">&nbsp;</span>
542
+ <span class="cline-any cline-no">&nbsp;</span>
543
+ <span class="cline-any cline-neutral">&nbsp;</span>
544
+ <span class="cline-any cline-neutral">&nbsp;</span>
545
+ <span class="cline-any cline-neutral">&nbsp;</span>
546
+ <span class="cline-any cline-neutral">&nbsp;</span>
547
+ <span class="cline-any cline-no">&nbsp;</span>
548
+ <span class="cline-any cline-neutral">&nbsp;</span>
549
+ <span class="cline-any cline-neutral">&nbsp;</span>
550
+ <span class="cline-any cline-neutral">&nbsp;</span>
551
+ <span class="cline-any cline-neutral">&nbsp;</span>
552
+ <span class="cline-any cline-neutral">&nbsp;</span>
553
+ <span class="cline-any cline-neutral">&nbsp;</span>
554
+ <span class="cline-any cline-neutral">&nbsp;</span>
555
+ <span class="cline-any cline-neutral">&nbsp;</span>
556
+ <span class="cline-any cline-neutral">&nbsp;</span>
557
+ <span class="cline-any cline-neutral">&nbsp;</span>
558
+ <span class="cline-any cline-neutral">&nbsp;</span>
559
+ <span class="cline-any cline-neutral">&nbsp;</span>
560
+ <span class="cline-any cline-no">&nbsp;</span>
561
+ <span class="cline-any cline-neutral">&nbsp;</span>
562
+ <span class="cline-any cline-no">&nbsp;</span>
563
+ <span class="cline-any cline-no">&nbsp;</span>
564
+ <span class="cline-any cline-no">&nbsp;</span>
565
+ <span class="cline-any cline-neutral">&nbsp;</span>
566
+ <span class="cline-any cline-no">&nbsp;</span>
567
+ <span class="cline-any cline-no">&nbsp;</span>
568
+ <span class="cline-any cline-no">&nbsp;</span>
569
+ <span class="cline-any cline-neutral">&nbsp;</span>
570
+ <span class="cline-any cline-no">&nbsp;</span>
571
+ <span class="cline-any cline-no">&nbsp;</span>
572
+ <span class="cline-any cline-neutral">&nbsp;</span>
573
+ <span class="cline-any cline-no">&nbsp;</span>
574
+ <span class="cline-any cline-neutral">&nbsp;</span>
575
+ <span class="cline-any cline-neutral">&nbsp;</span>
576
+ <span class="cline-any cline-neutral">&nbsp;</span>
577
+ <span class="cline-any cline-no">&nbsp;</span>
578
+ <span class="cline-any cline-no">&nbsp;</span>
579
+ <span class="cline-any cline-no">&nbsp;</span>
580
+ <span class="cline-any cline-neutral">&nbsp;</span>
581
+ <span class="cline-any cline-no">&nbsp;</span>
582
+ <span class="cline-any cline-no">&nbsp;</span>
583
+ <span class="cline-any cline-neutral">&nbsp;</span>
584
+ <span class="cline-any cline-no">&nbsp;</span>
585
+ <span class="cline-any cline-neutral">&nbsp;</span>
586
+ <span class="cline-any cline-neutral">&nbsp;</span>
587
+ <span class="cline-any cline-no">&nbsp;</span>
588
+ <span class="cline-any cline-no">&nbsp;</span>
589
+ <span class="cline-any cline-no">&nbsp;</span>
590
+ <span class="cline-any cline-neutral">&nbsp;</span>
591
+ <span class="cline-any cline-neutral">&nbsp;</span>
592
+ <span class="cline-any cline-no">&nbsp;</span>
593
+ <span class="cline-any cline-neutral">&nbsp;</span>
594
+ <span class="cline-any cline-neutral">&nbsp;</span>
595
+ <span class="cline-any cline-no">&nbsp;</span>
596
+ <span class="cline-any cline-no">&nbsp;</span>
597
+ <span class="cline-any cline-neutral">&nbsp;</span>
598
+ <span class="cline-any cline-neutral">&nbsp;</span>
599
+ <span class="cline-any cline-neutral">&nbsp;</span>
600
+ <span class="cline-any cline-no">&nbsp;</span>
601
+ <span class="cline-any cline-neutral">&nbsp;</span>
602
+ <span class="cline-any cline-neutral">&nbsp;</span>
603
+ <span class="cline-any cline-neutral">&nbsp;</span>
604
+ <span class="cline-any cline-neutral">&nbsp;</span>
605
+ <span class="cline-any cline-neutral">&nbsp;</span>
606
+ <span class="cline-any cline-neutral">&nbsp;</span>
607
+ <span class="cline-any cline-neutral">&nbsp;</span>
608
+ <span class="cline-any cline-no">&nbsp;</span>
609
+ <span class="cline-any cline-neutral">&nbsp;</span>
610
+ <span class="cline-any cline-neutral">&nbsp;</span>
611
+ <span class="cline-any cline-neutral">&nbsp;</span>
612
+ <span class="cline-any cline-no">&nbsp;</span>
613
+ <span class="cline-any cline-no">&nbsp;</span>
614
+ <span class="cline-any cline-no">&nbsp;</span>
615
+ <span class="cline-any cline-no">&nbsp;</span>
616
+ <span class="cline-any cline-no">&nbsp;</span>
617
+ <span class="cline-any cline-no">&nbsp;</span>
618
+ <span class="cline-any cline-no">&nbsp;</span>
619
+ <span class="cline-any cline-no">&nbsp;</span>
620
+ <span class="cline-any cline-no">&nbsp;</span>
621
+ <span class="cline-any cline-neutral">&nbsp;</span>
622
+ <span class="cline-any cline-no">&nbsp;</span>
623
+ <span class="cline-any cline-neutral">&nbsp;</span>
624
+ <span class="cline-any cline-neutral">&nbsp;</span>
625
+ <span class="cline-any cline-neutral">&nbsp;</span>
626
+ <span class="cline-any cline-no">&nbsp;</span>
627
+ <span class="cline-any cline-no">&nbsp;</span>
628
+ <span class="cline-any cline-no">&nbsp;</span>
629
+ <span class="cline-any cline-neutral">&nbsp;</span>
630
+ <span class="cline-any cline-no">&nbsp;</span>
631
+ <span class="cline-any cline-neutral">&nbsp;</span>
632
+ <span class="cline-any cline-neutral">&nbsp;</span>
633
+ <span class="cline-any cline-no">&nbsp;</span>
634
+ <span class="cline-any cline-no">&nbsp;</span>
635
+ <span class="cline-any cline-neutral">&nbsp;</span>
636
+ <span class="cline-any cline-neutral">&nbsp;</span>
637
+ <span class="cline-any cline-neutral">&nbsp;</span>
638
+ <span class="cline-any cline-neutral">&nbsp;</span>
639
+ <span class="cline-any cline-no">&nbsp;</span>
640
+ <span class="cline-any cline-neutral">&nbsp;</span>
641
+ <span class="cline-any cline-neutral">&nbsp;</span>
642
+ <span class="cline-any cline-neutral">&nbsp;</span>
643
+ <span class="cline-any cline-no">&nbsp;</span>
644
+ <span class="cline-any cline-no">&nbsp;</span>
645
+ <span class="cline-any cline-neutral">&nbsp;</span>
646
+ <span class="cline-any cline-no">&nbsp;</span>
647
+ <span class="cline-any cline-neutral">&nbsp;</span>
648
+ <span class="cline-any cline-neutral">&nbsp;</span>
649
+ <span class="cline-any cline-neutral">&nbsp;</span>
650
+ <span class="cline-any cline-neutral">&nbsp;</span>
651
+ <span class="cline-any cline-neutral">&nbsp;</span>
652
+ <span class="cline-any cline-neutral">&nbsp;</span>
653
+ <span class="cline-any cline-neutral">&nbsp;</span>
654
+ <span class="cline-any cline-neutral">&nbsp;</span>
655
+ <span class="cline-any cline-neutral">&nbsp;</span>
656
+ <span class="cline-any cline-neutral">&nbsp;</span>
657
+ <span class="cline-any cline-neutral">&nbsp;</span>
658
+ <span class="cline-any cline-neutral">&nbsp;</span>
659
+ <span class="cline-any cline-neutral">&nbsp;</span>
660
+ <span class="cline-any cline-neutral">&nbsp;</span>
661
+ <span class="cline-any cline-neutral">&nbsp;</span>
662
+ <span class="cline-any cline-neutral">&nbsp;</span>
663
+ <span class="cline-any cline-neutral">&nbsp;</span>
664
+ <span class="cline-any cline-no">&nbsp;</span>
665
+ <span class="cline-any cline-no">&nbsp;</span>
666
+ <span class="cline-any cline-neutral">&nbsp;</span>
667
+ <span class="cline-any cline-no">&nbsp;</span>
668
+ <span class="cline-any cline-no">&nbsp;</span>
669
+ <span class="cline-any cline-no">&nbsp;</span>
670
+ <span class="cline-any cline-no">&nbsp;</span>
671
+ <span class="cline-any cline-no">&nbsp;</span>
672
+ <span class="cline-any cline-neutral">&nbsp;</span>
673
+ <span class="cline-any cline-no">&nbsp;</span>
674
+ <span class="cline-any cline-neutral">&nbsp;</span>
675
+ <span class="cline-any cline-no">&nbsp;</span>
676
+ <span class="cline-any cline-neutral">&nbsp;</span>
677
+ <span class="cline-any cline-neutral">&nbsp;</span>
678
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/*
679
+ * Copyright (c) 2022-2023 Braun Nathanael
680
+ *
681
+ * This project is dual licensed under one of the following licenses:
682
+ * - Creative Commons Attribution-NoDerivatives 4.0 International License.
683
+ * - GNU AFFERO GENERAL PUBLIC LICENSE Version 3
684
+ *
685
+ * You should have received a copy of theses licenses along with this work.
686
+ * 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;.
687
+ */
688
+ &nbsp;
689
+ import is from "is";
690
+ &nbsp;
691
+ /**
692
+ * Utility functions for manipulating tween descriptor arrays before passing them
693
+ * to `addScrollableAnim()` or `pushAnim()`. All functions are pure — they return
694
+ * new arrays and never mutate the input. This makes them safe to compose:
695
+ * e.g. `offset(scale(reverse(items), 1000), 200)`
696
+ */
697
+ &nbsp;
698
+ export const re_cssValueWithUnit = <span class="cstat-no" title="statement not covered" >new RegExp(</span>
699
+ "([+-]?(?:[0-9]*[.])?[0-9]+)\\s*(" +
700
+ ['box', 'bz', 'bh', 'bw', 'em', 'ex', '%', 'px', 'cm', 'mm', 'in', 'pt', 'pc', 'ch', 'rem', 'vh', 'vw', 'vmin', 'vmax'].join('|')
701
+ + ")"
702
+ );
703
+ &nbsp;
704
+ /**
705
+ * add any css val with it unit ( todo: optims&amp;use objects for multi unit
706
+ * @param val1
707
+ * @param val2
708
+ * @returns {Array}
709
+ */
710
+ export function <span class="fstat-no" title="function not covered" >cssAdd(</span> val1, val2, ...argz ) {
711
+ <span class="cstat-no" title="statement not covered" > if ( !is.array(val1) )</span>
712
+ <span class="cstat-no" title="statement not covered" > val1 = [val1];</span>
713
+ <span class="cstat-no" title="statement not covered" > if ( !is.array(val2) )</span>
714
+ <span class="cstat-no" title="statement not covered" > val2 = [val2];</span>
715
+
716
+ let units1 = <span class="cstat-no" title="statement not covered" >val1.map(<span class="fstat-no" title="function not covered" >v </span>=&gt; (<span class="cstat-no" title="statement not covered" >v &amp;&amp; v.match &amp;&amp; v.match(re_cssValueWithUnit) || [, v || 0, 'px'])</span>),</span>
717
+ units2 = <span class="cstat-no" title="statement not covered" >val2.map(<span class="fstat-no" title="function not covered" >v </span>=&gt; (<span class="cstat-no" title="statement not covered" >v &amp;&amp; v.match &amp;&amp; v.match(re_cssValueWithUnit) || [, v || 0, 'px'])</span>),</span>
718
+ remap = <span class="cstat-no" title="statement not covered" >{},</span> result = <span class="cstat-no" title="statement not covered" >[],</span> i;
719
+
720
+ <span class="cstat-no" title="statement not covered" > i = 0;</span>
721
+ <span class="cstat-no" title="statement not covered" > while ( i &lt; units1.length ) {</span>
722
+ <span class="cstat-no" title="statement not covered" > remap[units1[i][2]] = remap[units1[i][2]] || 0;</span>
723
+ <span class="cstat-no" title="statement not covered" > remap[units1[i][2]] += parseFloat(units1[i][1]);</span>
724
+ <span class="cstat-no" title="statement not covered" > i++;</span>
725
+ }
726
+ <span class="cstat-no" title="statement not covered" > i = 0;</span>
727
+ <span class="cstat-no" title="statement not covered" > while ( i &lt; units2.length ) {</span>
728
+ <span class="cstat-no" title="statement not covered" > remap[units2[i][2]] = remap[units2[i][2]] || 0;</span>
729
+ <span class="cstat-no" title="statement not covered" > remap[units2[i][2]] += parseFloat(units2[i][1]);</span>
730
+ <span class="cstat-no" title="statement not covered" > i++;</span>
731
+ }
732
+ <span class="cstat-no" title="statement not covered" > Object.keys(remap)</span>
733
+ .forEach(
734
+ <span class="fstat-no" title="function not covered" > un</span>it =&gt; (<span class="cstat-no" title="statement not covered" >result.push(remap[unit] + unit))</span>
735
+ );
736
+ <span class="cstat-no" title="statement not covered" > return argz.length ? cssAdd(result, ...argz) : result;</span>
737
+ }
738
+ &nbsp;
739
+ /**
740
+ * Multiply any css val with it unit ( todo: optims &amp; use objects for multi unit
741
+ * @param val1
742
+ * @param val2
743
+ * @returns {Array}
744
+ */
745
+ export function <span class="fstat-no" title="function not covered" >cssMult(</span> val1, val ) {
746
+ <span class="cstat-no" title="statement not covered" > if ( !is.array(val1) )</span>
747
+ <span class="cstat-no" title="statement not covered" > val1 = [val1];</span>
748
+
749
+ let units1 = <span class="cstat-no" title="statement not covered" >val1.map(<span class="fstat-no" title="function not covered" >v </span>=&gt; (<span class="cstat-no" title="statement not covered" >v &amp;&amp; v.match &amp;&amp; v.match(re_cssValueWithUnit) || [, v || 0, 'px'])</span>),</span>
750
+ remap = <span class="cstat-no" title="statement not covered" >{},</span> result = <span class="cstat-no" title="statement not covered" >[],</span> i;
751
+
752
+ <span class="cstat-no" title="statement not covered" > i = 0;</span>
753
+ <span class="cstat-no" title="statement not covered" > while ( i &lt; units1.length ) {</span>
754
+ <span class="cstat-no" title="statement not covered" > remap[units1[i][2]] = remap[units1[i][2]] || 1;</span>
755
+ <span class="cstat-no" title="statement not covered" > remap[units1[i][2]] = parseFloat(units1[i][1]) * val;</span>
756
+ <span class="cstat-no" title="statement not covered" > i++;</span>
757
+ }
758
+ <span class="cstat-no" title="statement not covered" > Object.keys(remap)</span>
759
+ .forEach(
760
+ <span class="fstat-no" title="function not covered" > un</span>it =&gt; (<span class="cstat-no" title="statement not covered" >result.push(remap[unit] + unit))</span>
761
+ );
762
+ <span class="cstat-no" title="statement not covered" > return result;</span>
763
+ }
764
+ &nbsp;
765
+ /**
766
+ * Shift all tween `from` positions by `start` ms. Used to concatenate multiple
767
+ * tween arrays end-to-end when composing complex timelines.
768
+ */
769
+ export function <span class="fstat-no" title="function not covered" >offset(</span> items, start = <span class="branch-0 cbranch-no" title="branch not covered" >0 </span>) {
770
+ <span class="cstat-no" title="statement not covered" > items = is.array(items) ? items : items &amp;&amp; [items] || items;</span>
771
+ <span class="cstat-no" title="statement not covered" > return items.map(</span>
772
+ <span class="fstat-no" title="function not covered" > it</span>em =&gt; (
773
+ <span class="cstat-no" title="statement not covered" > {</span>
774
+ ...item,
775
+ from: item.from + start
776
+ }
777
+ )
778
+ )
779
+ }
780
+ &nbsp;
781
+ /**
782
+ * Proportionally rescale all tween `from` and `duration` values so the entire
783
+ * timeline fits exactly within `duration` ms. Useful for normalising imported
784
+ * animations to a specific scroll range.
785
+ */
786
+ export function <span class="fstat-no" title="function not covered" >scale(</span> items, duration = <span class="branch-0 cbranch-no" title="branch not covered" >0,</span> withOffset ) {
787
+ <span class="cstat-no" title="statement not covered" > items = is.array(items) ? items : items &amp;&amp; [items] || items;</span>
788
+ &nbsp;
789
+ // get items current duration
790
+ let iDuration = <span class="cstat-no" title="statement not covered" >0;</span>
791
+ <span class="cstat-no" title="statement not covered" > items.forEach(</span>
792
+ <span class="fstat-no" title="function not covered" > it</span>em =&gt; {
793
+ <span class="cstat-no" title="statement not covered" > iDuration = Math.max(iDuration, item.from + item.duration)</span>
794
+ }
795
+ )
796
+
797
+ <span class="cstat-no" title="statement not covered" > items = items.map(</span>
798
+ <span class="fstat-no" title="function not covered" > it</span>em =&gt; (
799
+ <span class="cstat-no" title="statement not covered" > {</span>
800
+ ...item,
801
+ from : (item.from / iDuration) * duration,
802
+ duration: (item.duration / iDuration) * duration
803
+ }
804
+ )
805
+ )
806
+ <span class="cstat-no" title="statement not covered" > return withOffset ? offset(items, withOffset) : items</span>
807
+ }
808
+ &nbsp;
809
+ function <span class="fstat-no" title="function not covered" >inverseValues(</span> v ) {
810
+ <span class="cstat-no" title="statement not covered" > if ( is.number(v) )</span>
811
+ <span class="cstat-no" title="statement not covered" > return -v;</span>
812
+ <span class="cstat-no" title="statement not covered" > if ( is.object(v) )</span>
813
+ <span class="cstat-no" title="statement not covered" > return Object.keys(v).reduce(<span class="fstat-no" title="function not covered" >( </span>h, key ) =&gt; (<span class="cstat-no" title="statement not covered" >h[key] = inverseValues(v[key]), h)</span>, {});</span>
814
+ <span class="cstat-no" title="statement not covered" > if ( is.array(v) )</span>
815
+ <span class="cstat-no" title="statement not covered" > return v.map(<span class="fstat-no" title="function not covered" >( </span>item ) =&gt; (<span class="cstat-no" title="statement not covered" >inverseValues(item))</span>);</span>
816
+
817
+ let values = <span class="cstat-no" title="statement not covered" >v.split(/(\-?\d+(?:\.\d+)?|\-?\.\d+)/ig);</span>
818
+
819
+ <span class="cstat-no" title="statement not covered" > return values.map(</span>
820
+ <span class="fstat-no" title="function not covered" > ( </span>val, i ) =&gt; (<span class="cstat-no" title="statement not covered" >i % 2 ? -parseFloat(val) : val)</span>
821
+ ).join("");
822
+ }
823
+ &nbsp;
824
+ /**
825
+ * Mirror a timeline so it plays backward. Each descriptor's `from` is remapped to
826
+ * `totalDuration - (from + duration)` and all numeric values in `apply` are negated
827
+ * via `inverseValues`, so the end state of the forward animation becomes the start
828
+ * state of the reversed one.
829
+ */
830
+ export function <span class="fstat-no" title="function not covered" >reverse(</span> items ) {
831
+ <span class="cstat-no" title="statement not covered" > items = is.array(items) ? items : items &amp;&amp; [items] || items;</span>
832
+ // get items current duration
833
+ let iDuration = <span class="cstat-no" title="statement not covered" >0;</span>
834
+ <span class="cstat-no" title="statement not covered" > items.forEach(</span>
835
+ <span class="fstat-no" title="function not covered" > it</span>em =&gt; {
836
+ <span class="cstat-no" title="statement not covered" > iDuration = Math.max(iDuration, item.from + item.duration)</span>
837
+ }
838
+ )
839
+
840
+ <span class="cstat-no" title="statement not covered" > return items.map(</span>
841
+ <span class="fstat-no" title="function not covered" > it</span>em =&gt; {
842
+ <span class="cstat-no" title="statement not covered" > item =</span>
843
+ {
844
+ ...item,
845
+ from: iDuration - (item.from + item.duration),
846
+ ...(item.apply ? { apply: inverseValues(item.apply) } : undefined)
847
+ };
848
+ <span class="cstat-no" title="statement not covered" > return item;</span>
849
+ }
850
+ )
851
+ }
852
+ &nbsp;
853
+ const MultiCssProps = <span class="cstat-no" title="statement not covered" >{ "transform": true, "filter": true, "textShadow": true, "boxShadow": true }</span>
854
+ &nbsp;
855
+ /**
856
+ * Merge CSS descriptor objects by accumulating values rather than overwriting.
857
+ * Used internally by `deMuxLine` to build the `allPropsById` aggregate.
858
+ *
859
+ * Special cases:
860
+ * - Multi-value CSS properties (transform, filter, boxShadow, textShadow) are
861
+ * treated as arrays and concatenated — preserving separate layer objects.
862
+ * - Array values (multi-unit CSS like `["50%", "10vw"]`) are merged by unit.
863
+ * - Nested objects (e.g. individual transform layer objects) are merged recursively.
864
+ */
865
+ export function <span class="fstat-no" title="function not covered" >addCss(</span> target, ...sources ) {
866
+ let source = <span class="cstat-no" title="statement not covered" >sources.shift();</span>
867
+
868
+ <span class="cstat-no" title="statement not covered" > for ( const key in source ) {</span>
869
+ <span class="cstat-no" title="statement not covered" > if ( !source.hasOwnProperty(key) )</span>
870
+ <span class="cstat-no" title="statement not covered" > continue;</span>
871
+
872
+ <span class="cstat-no" title="statement not covered" > if ( MultiCssProps[key] ) {</span>
873
+ <span class="cstat-no" title="statement not covered" > if ( !target[key] ) {</span>
874
+ <span class="cstat-no" title="statement not covered" > target[key] = [];</span>
875
+ }
876
+ <span class="cstat-no" title="statement not covered" > if ( !is.array(source[key]) ) {</span>
877
+ <span class="cstat-no" title="statement not covered" > addCss(target[key], [source[key]]);</span>
878
+ }
879
+ else <span class="cstat-no" title="statement not covered" >addCss(target[key], source[key]);</span>
880
+ }
881
+ else {
882
+ // adding units
883
+ <span class="cstat-no" title="statement not covered" > if ( is.array(source[key]) ) {</span>
884
+ <span class="cstat-no" title="statement not covered" > if ( !target[key] ) {</span>
885
+ <span class="cstat-no" title="statement not covered" > target[key] = [];</span>
886
+ }
887
+ <span class="cstat-no" title="statement not covered" > if ( !is.array(target[key]) ) {</span>
888
+ <span class="cstat-no" title="statement not covered" > target[key] = [...source[key], target[key]];</span>
889
+ }
890
+ else <span class="cstat-no" title="statement not covered" >target[key].push(...source[key]);</span>
891
+ }
892
+ else {
893
+ <span class="cstat-no" title="statement not covered" > if ( !target[key] ) {</span>
894
+ <span class="cstat-no" title="statement not covered" > if ( !is.object(source[key]) ) {</span>
895
+ <span class="cstat-no" title="statement not covered" > target[key] = source[key];</span>
896
+ }
897
+ else {
898
+ <span class="cstat-no" title="statement not covered" > target[key] = { ...source[key] };</span>
899
+ }
900
+ }
901
+ else <span class="cstat-no" title="statement not covered" >if ( is.object(target[key]) &amp;&amp; is.object(source[key]) ) {</span>
902
+ <span class="cstat-no" title="statement not covered" > addCss(target[key], source[key]);</span>
903
+ }
904
+ else {
905
+ //else target[key].push(...source[key]);
906
+ <span class="cstat-no" title="statement not covered" > target[key] = addAllType(target[key], source[key])</span>
907
+ //console.log(key, target[key])
908
+ }
909
+ }
910
+ }
911
+
912
+ }
913
+
914
+ <span class="cstat-no" title="statement not covered" > return sources.length &amp;&amp; addCss(target, ...sources) || target;</span>
915
+ }
916
+ &nbsp;
917
+ function <span class="fstat-no" title="function not covered" >addAllType(</span> v1, v2 ) {
918
+ <span class="cstat-no" title="statement not covered" > if ( !v1 )</span>
919
+ <span class="cstat-no" title="statement not covered" > return v2;</span>
920
+ <span class="cstat-no" title="statement not covered" > if ( !v2 )</span>
921
+ <span class="cstat-no" title="statement not covered" > return v1;</span>
922
+ let values1 = <span class="cstat-no" title="statement not covered" >('' + v1).split(/(\-?\d+(?:\.\d+)?|\-?\.\d+)/ig),</span>
923
+ values2 = <span class="cstat-no" title="statement not covered" >('' + v2).split(/(\-?\d+(?:\.\d+)?|\-?\.\d+)/ig),</span>
924
+ r = <span class="cstat-no" title="statement not covered" >values1.map(</span>
925
+ <span class="fstat-no" title="function not covered" > ( </span>val, i ) =&gt; (<span class="cstat-no" title="statement not covered" >i % 2 ? parseFloat(val) + parseFloat(values2[i] || 0) : val)</span>
926
+ ).filter(<span class="fstat-no" title="function not covered" >i </span>=&gt; (<span class="cstat-no" title="statement not covered" >i !== '')</span>);
927
+
928
+ <span class="cstat-no" title="statement not covered" > return r.length === 1 ? parseInt(r[0]) : r.join("")</span>
929
+ }
930
+ &nbsp;
931
+ export function <span class="fstat-no" title="function not covered" >extractCss(</span> items, inverse ) {
932
+ let css = <span class="cstat-no" title="statement not covered" >{};</span>
933
+ <span class="cstat-no" title="statement not covered" > items = is.array(items) ? items : items &amp;&amp; [items] || items;</span>
934
+ <span class="cstat-no" title="statement not covered" > items.forEach(</span>
935
+ <span class="fstat-no" title="function not covered" > it</span>em =&gt; {
936
+ <span class="cstat-no" title="statement not covered" > addCss(css, item.apply)</span>
937
+ }
938
+ );
939
+ <span class="cstat-no" title="statement not covered" > if ( inverse )</span>
940
+ <span class="cstat-no" title="statement not covered" > css = inverseValues(css);</span>
941
+
942
+
943
+ //if ( inverse &amp;&amp; css.hasOwnProperty('opacity') )
944
+ // css.opacity -= 1;
945
+ <span class="cstat-no" title="statement not covered" > return css;</span>
946
+ }
947
+ &nbsp;
948
+ export function <span class="fstat-no" title="function not covered" >target(</span> items, target ) {
949
+ <span class="cstat-no" title="statement not covered" > items = is.array(items) ? items : items &amp;&amp; [items] || items;</span>
950
+ <span class="cstat-no" title="statement not covered" > return items.map(</span>
951
+ <span class="fstat-no" title="function not covered" > it</span>em =&gt; (
952
+ <span class="cstat-no" title="statement not covered" > {</span>
953
+ ...item,
954
+ target
955
+ }
956
+ )
957
+ )
958
+ }
959
+ &nbsp;
960
+ /**
961
+ * Prepend `shift` empty transform layer objects `{}` to the beginning of each
962
+ * descriptor's transform array. This reserves layer slots so that an additive
963
+ * animation can target a specific layer index without colliding with existing
964
+ * transforms defined by other animations on the same node.
965
+ *
966
+ * Example: a base animation uses layer 0 (translateX); a hover overlay uses
967
+ * `shiftTransforms(hoverItems, 1)` so it targets layer 1 instead.
968
+ */
969
+ export function <span class="fstat-no" title="function not covered" >shiftTransforms(</span> items, shift = <span class="branch-0 cbranch-no" title="branch not covered" >1 </span>) {
970
+ <span class="cstat-no" title="statement not covered" > items = is.array(items) ? items : items &amp;&amp; [items] || items;</span>
971
+ <span class="cstat-no" title="statement not covered" > return items.map(</span>
972
+ <span class="fstat-no" title="function not covered" > it</span>em =&gt; {
973
+ let t = <span class="cstat-no" title="statement not covered" >item.apply &amp;&amp; item.apply.transform;</span>
974
+ <span class="cstat-no" title="statement not covered" > if ( t ) {</span>
975
+ <span class="cstat-no" title="statement not covered" > t = is.array(t) ? [...t] : [t];</span>
976
+ <span class="cstat-no" title="statement not covered" > for ( let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; shift; i++ )</span>
977
+ <span class="cstat-no" title="statement not covered" > t.unshift({});</span>
978
+
979
+ <span class="cstat-no" title="statement not covered" > item = { ...item, apply: { ...item.apply, transform: t } };</span>
980
+ }
981
+ <span class="cstat-no" title="statement not covered" > return item;</span>
982
+ }
983
+ )
984
+ }</pre></td></tr></table></pre>
985
+
986
+ <div class='push'></div><!-- for sticky footer -->
987
+ </div><!-- /wrapper -->
988
+ <div class='footer quiet pad2 space-top1 center small'>
989
+ Code coverage generated by
990
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
991
+ at 2026-06-06T09:33:16.802Z
992
+ </div>
993
+ <script src="../prettify.js"></script>
994
+ <script>
995
+ window.onload = function () {
996
+ prettyPrint();
997
+ };
998
+ </script>
999
+ <script src="../sorter.js"></script>
1000
+ <script src="../block-navigation.js"></script>
1001
+ </body>
1002
+ </html>
1003
+