@peter.naydenov/cuts 2.1.3 → 2.1.4

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.
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">4% </span>
26
+ <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>1/25</span>
28
+ <span class='fraction'>30/30</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">0% </span>
33
+ <span class="strong">100% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/11</span>
35
+ <span class='fraction'>9/9</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">20% </span>
40
+ <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>1/5</span>
42
+ <span class='fraction'>4/4</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">4.16% </span>
47
+ <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>1/24</span>
49
+ <span class='fraction'>29/29</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line low'></div>
64
+ <div class='status-line high'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -116,7 +116,20 @@
116
116
  <a name='L51'></a><a href='#L51'>51</a>
117
117
  <a name='L52'></a><a href='#L52'>52</a>
118
118
  <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
120
133
  <span class="cline-any cline-neutral">&nbsp;</span>
121
134
  <span class="cline-any cline-neutral">&nbsp;</span>
122
135
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -127,42 +140,55 @@
127
140
  <span class="cline-any cline-neutral">&nbsp;</span>
128
141
  <span class="cline-any cline-neutral">&nbsp;</span>
129
142
  <span class="cline-any cline-neutral">&nbsp;</span>
130
- <span class="cline-any cline-yes">14x</span>
143
+ <span class="cline-any cline-yes">33x</span>
131
144
  <span class="cline-any cline-neutral">&nbsp;</span>
132
- <span class="cline-any cline-no">&nbsp;</span>
133
- <span class="cline-any cline-no">&nbsp;</span>
134
- <span class="cline-any cline-no">&nbsp;</span>
135
- <span class="cline-any cline-no">&nbsp;</span>
136
- <span class="cline-any cline-no">&nbsp;</span>
145
+ <span class="cline-any cline-yes">7x</span>
146
+ <span class="cline-any cline-yes">7x</span>
147
+ <span class="cline-any cline-yes">7x</span>
148
+ <span class="cline-any cline-yes">7x</span>
149
+ <span class="cline-any cline-yes">7x</span>
137
150
  <span class="cline-any cline-neutral">&nbsp;</span>
138
151
  <span class="cline-any cline-neutral">&nbsp;</span>
152
+ <span class="cline-any cline-yes">7x</span>
153
+ <span class="cline-any cline-yes">1x</span>
154
+ <span class="cline-any cline-yes">1x</span>
139
155
  <span class="cline-any cline-neutral">&nbsp;</span>
140
- <span class="cline-any cline-no">&nbsp;</span>
141
- <span class="cline-any cline-no">&nbsp;</span>
156
+ <span class="cline-any cline-yes">6x</span>
142
157
  <span class="cline-any cline-neutral">&nbsp;</span>
143
- <span class="cline-any cline-no">&nbsp;</span>
158
+ <span class="cline-any cline-yes">7x</span>
159
+ <span class="cline-any cline-yes">7x</span>
144
160
  <span class="cline-any cline-neutral">&nbsp;</span>
145
- <span class="cline-any cline-no">&nbsp;</span>
146
- <span class="cline-any cline-no">&nbsp;</span>
147
- <span class="cline-any cline-no">&nbsp;</span>
148
- <span class="cline-any cline-no">&nbsp;</span>
149
- <span class="cline-any cline-no">&nbsp;</span>
161
+ <span class="cline-any cline-yes">1x</span>
162
+ <span class="cline-any cline-yes">1x</span>
150
163
  <span class="cline-any cline-neutral">&nbsp;</span>
151
164
  <span class="cline-any cline-neutral">&nbsp;</span>
152
- <span class="cline-any cline-no">&nbsp;</span>
153
- <span class="cline-any cline-no">&nbsp;</span>
154
- <span class="cline-any cline-no">&nbsp;</span>
155
- <span class="cline-any cline-no">&nbsp;</span>
156
- <span class="cline-any cline-no">&nbsp;</span>
157
165
  <span class="cline-any cline-neutral">&nbsp;</span>
166
+ <span class="cline-any cline-yes">6x</span>
158
167
  <span class="cline-any cline-neutral">&nbsp;</span>
159
- <span class="cline-any cline-no">&nbsp;</span>
160
- <span class="cline-any cline-no">&nbsp;</span>
161
- <span class="cline-any cline-no">&nbsp;</span>
162
- <span class="cline-any cline-no">&nbsp;</span>
163
168
  <span class="cline-any cline-neutral">&nbsp;</span>
164
- <span class="cline-any cline-no">&nbsp;</span>
165
169
  <span class="cline-any cline-neutral">&nbsp;</span>
170
+ <span class="cline-any cline-yes">6x</span>
171
+ <span class="cline-any cline-neutral">&nbsp;</span>
172
+ <span class="cline-any cline-neutral">&nbsp;</span>
173
+ <span class="cline-any cline-yes">6x</span>
174
+ <span class="cline-any cline-yes">6x</span>
175
+ <span class="cline-any cline-neutral">&nbsp;</span>
176
+ <span class="cline-any cline-yes">6x</span>
177
+ <span class="cline-any cline-yes">7x</span>
178
+ <span class="cline-any cline-yes">3x</span>
179
+ <span class="cline-any cline-yes">3x</span>
180
+ <span class="cline-any cline-neutral">&nbsp;</span>
181
+ <span class="cline-any cline-neutral">&nbsp;</span>
182
+ <span class="cline-any cline-yes">6x</span>
183
+ <span class="cline-any cline-yes">7x</span>
184
+ <span class="cline-any cline-neutral">&nbsp;</span>
185
+ <span class="cline-any cline-yes">7x</span>
186
+ <span class="cline-any cline-yes">7x</span>
187
+ <span class="cline-any cline-yes">6x</span>
188
+ <span class="cline-any cline-yes">6x</span>
189
+ <span class="cline-any cline-neutral">&nbsp;</span>
190
+ <span class="cline-any cline-neutral">&nbsp;</span>
191
+ <span class="cline-any cline-yes">7x</span>
166
192
  <span class="cline-any cline-neutral">&nbsp;</span>
167
193
  <span class="cline-any cline-neutral">&nbsp;</span>
168
194
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -180,48 +206,61 @@ function hide ( dependencies, state ) {
180
206
  * @param {number|string} endSteps - number of steps to end or '*' to end all scenes to the root
181
207
  * @returns {Promise} - promise that resolves when the process 'end' is completed
182
208
  */
183
- return function <span class="fstat-no" title="function not covered" >hide </span>( endSteps=<span class="branch-0 cbranch-no" title="branch not covered" >1 </span>) {
209
+ return function hide ( endSteps=1 ) {
184
210
  const
185
- { askForPromise, shortcutMngr, setInstruction } = <span class="cstat-no" title="statement not covered" >dependencies</span>
186
- , { currentScene, currentParents, scenes } = <span class="cstat-no" title="statement not covered" >state</span>
187
- , hideTask = <span class="cstat-no" title="statement not covered" >askForPromise ()</span>
188
- , instructions = <span class="cstat-no" title="statement not covered" >[]</span>
189
- , hasParents = <span class="cstat-no" title="statement not covered" >currentParents.length &gt; 0</span>
211
+ { askForPromise, shortcutMngr, setInstruction } = dependencies
212
+ , { currentScene, scenes } = state
213
+ , hideTask = askForPromise ()
214
+ , unloadTask = askForPromise ()
215
+ , hasBeforeHide = typeof scenes[currentScene].beforeHide === 'function'
190
216
  ;
191
- let el;
192
-
193
- <span class="cstat-no" title="statement not covered" > shortcutMngr.pause () </span> // Stop all shortcuts
194
- <span class="cstat-no" title="statement not covered" > instructions.push ( setInstruction ( scenes[currentScene].hide )) </span> // Set instruction to hide current scene
195
217
  &nbsp;
196
- <span class="cstat-no" title="statement not covered" > if ( !hasParents ) <span class="cstat-no" title="statement not covered" >state.currentScene = null</span></span>
197
-
198
- <span class="cstat-no" title="statement not covered" > if ( hasParents &amp;&amp; endSteps === '*' ) {</span>
199
- <span class="cstat-no" title="statement not covered" > [...currentParents].reverse().forEach ( <span class="fstat-no" title="function not covered" >name </span>=&gt; {</span>
200
- <span class="cstat-no" title="statement not covered" > el = state.currentParents.at ( -1 )</span>
201
- <span class="cstat-no" title="statement not covered" > state.currentScene = el</span>
202
- <span class="cstat-no" title="statement not covered" > instructions.push ( setInstruction ( scenes[name].hide)) </span>
203
- })
204
- }
205
- <span class="cstat-no" title="statement not covered" > if ( hasParents &amp;&amp; ![ '*', 1].includes(endSteps) ) {</span>
206
- <span class="cstat-no" title="statement not covered" > currentParents.slice ( `-${endSteps-1}` ).reverse().map ( <span class="fstat-no" title="function not covered" >name </span>=&gt; {</span>
207
- <span class="cstat-no" title="statement not covered" > el = state.currentParents.at ( -1 )</span>
208
- <span class="cstat-no" title="statement not covered" > state.currentScene = el</span>
209
- <span class="cstat-no" title="statement not covered" > instructions.push ( setInstruction (scenes[name].hide))</span>
210
- })
218
+ if ( hasBeforeHide ) { // Execute 'beforeHide' function if exists - same guard 'show' honors when navigating away
219
+ const closingFn = scenes[currentScene].beforeHide;
220
+ closingFn ({ done:unloadTask.done, dependencies: shortcutMngr.getDependencies() })
211
221
  }
212
- <span class="cstat-no" title="statement not covered" > endSteps = askForPromise.sequence ( instructions )</span>
213
- <span class="cstat-no" title="statement not covered" > endSteps.onComplete ( <span class="fstat-no" title="function not covered" >()</span> =&gt; {</span>
214
- <span class="cstat-no" title="statement not covered" > shortcutMngr.changeContext ( state.currentScene ) </span> // If state.currentScene is null, then all shortcuts are switched off and currentContext is null
215
- <span class="cstat-no" title="statement not covered" > hideTask.done () </span>
216
- })
217
- <span class="cstat-no" title="statement not covered" > return hideTask.promise</span>
222
+ else unloadTask.done ( true )
223
+ &nbsp;
224
+ unloadTask.onComplete ( continueHiding =&gt; {
225
+ if ( !continueHiding ) {
226
+ // 'beforeHide' returned false - cancel, nothing was torn down or changed
227
+ hideTask.done ()
228
+ return hideTask.promise
229
+ }
230
+ &nbsp;
231
+ const
232
+ instructions = []
233
+ // Work on a copy of the recorded ancestor chain - it's the source of truth for what to
234
+ // climb back to, including for wildcard-overlay scenes ('*' itself is never stored here,
235
+ // only the real scene name that was current when the overlay was shown).
236
+ , remaining = [ ...state.currentParents ]
237
+ ;
238
+ &nbsp;
239
+ shortcutMngr.pause () // Stop all shortcuts
240
+ instructions.push ( setInstruction ( scenes[currentScene].hide )) // Hiding the current scene is always at least 1 step
241
+ &nbsp;
242
+ const ancestorsToHide = ( endSteps === '*' ) ? remaining.length : Math.min ( endSteps - 1, remaining.length )
243
+ for ( let i = 0; i &lt; ancestorsToHide; i++ ) {
244
+ const name = remaining.pop ()
245
+ instructions.push ( setInstruction ( scenes[name].hide ))
246
+ }
247
+ &nbsp;
248
+ state.currentScene = remaining.length &gt; 0 ? remaining.pop () : null
249
+ state.currentParents = remaining
250
+ &nbsp;
251
+ const goingTask = askForPromise.sequence ( instructions );
252
+ goingTask.onComplete ( () =&gt; {
253
+ shortcutMngr.changeContext ( state.currentScene ) // If state.currentScene is null, then all shortcuts are switched off and currentContext is null
254
+ hideTask.done ()
255
+ })
256
+ }) // unloadTask onComplete
257
+ return hideTask.promise
218
258
  }} // hide func.
219
259
  &nbsp;
220
260
  &nbsp;
221
261
  &nbsp;
222
262
  export default hide
223
263
  &nbsp;
224
- &nbsp;
225
264
  &nbsp;</pre></td></tr></table></pre>
226
265
 
227
266
  <div class='push'></div><!-- for sticky footer -->
@@ -229,7 +268,7 @@ export default hide
229
268
  <div class='footer quiet pad2 space-top1 center small'>
230
269
  Code coverage generated by
231
270
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
232
- at 2026-04-09T15:47:31.753Z
271
+ at 2026-07-09T05:05:03.811Z
233
272
  </div>
234
273
  <script src="../../prettify.js"></script>
235
274
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">79.36% </span>
26
+ <span class="strong">99.26% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>100/126</span>
28
+ <span class='fraction'>135/136</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">74.07% </span>
33
+ <span class="strong">95.16% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>40/54</span>
35
+ <span class='fraction'>59/62</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">79.16% </span>
40
+ <span class="strong">95.83% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>19/24</span>
42
+ <span class='fraction'>23/24</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">80% </span>
47
+ <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>92/115</span>
49
+ <span class='fraction'>123/123</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line medium'></div>
64
+ <div class='status-line high'></div>
65
65
  <div class="pad1">
66
66
  <table class="coverage-summary">
67
67
  <thead>
@@ -79,18 +79,18 @@
79
79
  </tr>
80
80
  </thead>
81
81
  <tbody><tr>
82
- <td class="file low" data-value="hide.js"><a href="hide.js.html">hide.js</a></td>
83
- <td data-value="4" class="pic low">
84
- <div class="chart"><div class="cover-fill" style="width: 4%"></div><div class="cover-empty" style="width: 96%"></div></div>
82
+ <td class="file high" data-value="hide.js"><a href="hide.js.html">hide.js</a></td>
83
+ <td data-value="100" class="pic high">
84
+ <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
85
85
  </td>
86
- <td data-value="4" class="pct low">4%</td>
87
- <td data-value="25" class="abs low">1/25</td>
88
- <td data-value="0" class="pct low">0%</td>
89
- <td data-value="11" class="abs low">0/11</td>
90
- <td data-value="20" class="pct low">20%</td>
91
- <td data-value="5" class="abs low">1/5</td>
92
- <td data-value="4.16" class="pct low">4.16%</td>
93
- <td data-value="24" class="abs low">1/24</td>
86
+ <td data-value="100" class="pct high">100%</td>
87
+ <td data-value="30" class="abs high">30/30</td>
88
+ <td data-value="100" class="pct high">100%</td>
89
+ <td data-value="9" class="abs high">9/9</td>
90
+ <td data-value="100" class="pct high">100%</td>
91
+ <td data-value="4" class="abs high">4/4</td>
92
+ <td data-value="100" class="pct high">100%</td>
93
+ <td data-value="29" class="abs high">29/29</td>
94
94
  </tr>
95
95
 
96
96
  <tr>
@@ -99,13 +99,13 @@
99
99
  <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
100
100
  </td>
101
101
  <td data-value="100" class="pct high">100%</td>
102
- <td data-value="3" class="abs high">3/3</td>
103
- <td data-value="100" class="pct high">100%</td>
104
- <td data-value="0" class="abs high">0/0</td>
102
+ <td data-value="5" class="abs high">5/5</td>
105
103
  <td data-value="100" class="pct high">100%</td>
106
104
  <td data-value="2" class="abs high">2/2</td>
107
105
  <td data-value="100" class="pct high">100%</td>
108
106
  <td data-value="3" class="abs high">3/3</td>
107
+ <td data-value="100" class="pct high">100%</td>
108
+ <td data-value="4" class="abs high">4/4</td>
109
109
  </tr>
110
110
 
111
111
  <tr>
@@ -170,17 +170,17 @@
170
170
 
171
171
  <tr>
172
172
  <td class="file high" data-value="show.js"><a href="show.js.html">show.js</a></td>
173
- <td data-value="98.38" class="pic high">
174
- <div class="chart"><div class="cover-fill" style="width: 98%"></div><div class="cover-empty" style="width: 2%"></div></div>
173
+ <td data-value="100" class="pic high">
174
+ <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
175
175
  </td>
176
- <td data-value="98.38" class="pct high">98.38%</td>
177
- <td data-value="62" class="abs high">61/62</td>
178
- <td data-value="93.33" class="pct high">93.33%</td>
179
- <td data-value="30" class="abs high">28/30</td>
176
+ <td data-value="100" class="pct high">100%</td>
177
+ <td data-value="65" class="abs high">65/65</td>
178
+ <td data-value="94.73" class="pct high">94.73%</td>
179
+ <td data-value="38" class="abs high">36/38</td>
180
180
  <td data-value="87.5" class="pct high">87.5%</td>
181
181
  <td data-value="8" class="abs high">7/8</td>
182
182
  <td data-value="100" class="pct high">100%</td>
183
- <td data-value="57" class="abs high">57/57</td>
183
+ <td data-value="59" class="abs high">59/59</td>
184
184
  </tr>
185
185
 
186
186
  </tbody>
@@ -191,7 +191,7 @@
191
191
  <div class='footer quiet pad2 space-top1 center small'>
192
192
  Code coverage generated by
193
193
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
194
- at 2026-04-09T15:47:31.753Z
194
+ at 2026-07-09T05:05:03.811Z
195
195
  </div>
196
196
  <script src="../../prettify.js"></script>
197
197
  <script>
@@ -25,28 +25,28 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>3/3</span>
28
+ <span class='fraction'>5/5</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">100% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/0</span>
35
+ <span class='fraction'>2/2</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>2/2</span>
42
+ <span class='fraction'>3/3</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>3/3</span>
49
+ <span class='fraction'>4/4</span>
50
50
  </div>
51
51
 
52
52
 
@@ -84,20 +84,30 @@
84
84
  <a name='L19'></a><a href='#L19'>19</a>
85
85
  <a name='L20'></a><a href='#L20'>20</a>
86
86
  <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
93
+ <span class="cline-any cline-neutral">&nbsp;</span>
94
+ <span class="cline-any cline-neutral">&nbsp;</span>
95
+ <span class="cline-any cline-neutral">&nbsp;</span>
96
+ <span class="cline-any cline-neutral">&nbsp;</span>
88
97
  <span class="cline-any cline-neutral">&nbsp;</span>
89
98
  <span class="cline-any cline-neutral">&nbsp;</span>
90
99
  <span class="cline-any cline-neutral">&nbsp;</span>
91
100
  <span class="cline-any cline-neutral">&nbsp;</span>
92
101
  <span class="cline-any cline-neutral">&nbsp;</span>
102
+ <span class="cline-any cline-yes">6x</span>
103
+ <span class="cline-any cline-yes">6x</span>
93
104
  <span class="cline-any cline-neutral">&nbsp;</span>
94
105
  <span class="cline-any cline-neutral">&nbsp;</span>
95
106
  <span class="cline-any cline-neutral">&nbsp;</span>
107
+ <span class="cline-any cline-yes">6x</span>
96
108
  <span class="cline-any cline-neutral">&nbsp;</span>
97
- <span class="cline-any cline-yes">4x</span>
98
- <span class="cline-any cline-yes">4x</span>
99
109
  <span class="cline-any cline-neutral">&nbsp;</span>
100
- <span class="cline-any cline-yes">14x</span>
110
+ <span class="cline-any cline-yes">33x</span>
101
111
  <span class="cline-any cline-neutral">&nbsp;</span>
102
112
  <span class="cline-any cline-neutral">&nbsp;</span>
103
113
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -115,8 +125,13 @@
115
125
  * @returns {Promise} - promise that resolves when the jump is completed
116
126
  */
117
127
  function jump ( { scene }, ...args ) {
118
- state.jumpStack.push ( state.currentScene )
119
- return show ( { scene }, ...args )
128
+ const previousScene = state.currentScene
129
+ return show ( { scene }, ...args ).then ( () =&gt; {
130
+ // Only record the jump if it actually landed - 'show' silently no-ops on a
131
+ // blocked (beforeHide) or invalid navigation, and pushing anyway would leave
132
+ // a phantom entry that desyncs jumpBack() from what actually happened.
133
+ if ( state.currentScene === scene ) state.jumpStack.push ( previousScene )
134
+ })
120
135
  }
121
136
  return jump
122
137
  } // jump func.
@@ -133,7 +148,7 @@ export default jump
133
148
  <div class='footer quiet pad2 space-top1 center small'>
134
149
  Code coverage generated by
135
150
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
136
- at 2026-04-09T15:47:31.753Z
151
+ at 2026-07-09T05:05:03.811Z
137
152
  </div>
138
153
  <script src="../../prettify.js"></script>
139
154
  <script>
@@ -97,14 +97,14 @@
97
97
  <span class="cline-any cline-neutral">&nbsp;</span>
98
98
  <span class="cline-any cline-neutral">&nbsp;</span>
99
99
  <span class="cline-any cline-neutral">&nbsp;</span>
100
- <span class="cline-any cline-yes">3x</span>
100
+ <span class="cline-any cline-yes">5x</span>
101
101
  <span class="cline-any cline-yes">1x</span>
102
102
  <span class="cline-any cline-neutral">&nbsp;</span>
103
+ <span class="cline-any cline-yes">5x</span>
104
+ <span class="cline-any cline-yes">3x</span>
103
105
  <span class="cline-any cline-yes">3x</span>
104
- <span class="cline-any cline-yes">2x</span>
105
- <span class="cline-any cline-yes">2x</span>
106
106
  <span class="cline-any cline-neutral">&nbsp;</span>
107
- <span class="cline-any cline-yes">14x</span>
107
+ <span class="cline-any cline-yes">33x</span>
108
108
  <span class="cline-any cline-neutral">&nbsp;</span>
109
109
  <span class="cline-any cline-neutral">&nbsp;</span>
110
110
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -142,7 +142,7 @@ export default jumpBack
142
142
  <div class='footer quiet pad2 space-top1 center small'>
143
143
  Code coverage generated by
144
144
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
145
- at 2026-04-09T15:47:31.753Z
145
+ at 2026-07-09T05:05:03.811Z
146
146
  </div>
147
147
  <script src="../../prettify.js"></script>
148
148
  <script>
@@ -85,7 +85,7 @@
85
85
  <span class="cline-any cline-neutral">&nbsp;</span>
86
86
  <span class="cline-any cline-neutral">&nbsp;</span>
87
87
  <span class="cline-any cline-neutral">&nbsp;</span>
88
- <span class="cline-any cline-yes">14x</span>
88
+ <span class="cline-any cline-yes">33x</span>
89
89
  <span class="cline-any cline-yes">1x</span>
90
90
  <span class="cline-any cline-neutral">&nbsp;</span>
91
91
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -118,7 +118,7 @@ export default jumpsReset
118
118
  <div class='footer quiet pad2 space-top1 center small'>
119
119
  Code coverage generated by
120
120
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
121
- at 2026-04-09T15:47:31.753Z
121
+ at 2026-07-09T05:05:03.811Z
122
122
  </div>
123
123
  <script src="../../prettify.js"></script>
124
124
  <script>
@@ -93,11 +93,11 @@
93
93
  <span class="cline-any cline-neutral">&nbsp;</span>
94
94
  <span class="cline-any cline-neutral">&nbsp;</span>
95
95
  <span class="cline-any cline-neutral">&nbsp;</span>
96
- <span class="cline-any cline-yes">14x</span>
96
+ <span class="cline-any cline-yes">33x</span>
97
+ <span class="cline-any cline-yes">3x</span>
98
+ <span class="cline-any cline-yes">3x</span>
97
99
  <span class="cline-any cline-yes">2x</span>
98
100
  <span class="cline-any cline-yes">2x</span>
99
- <span class="cline-any cline-yes">1x</span>
100
- <span class="cline-any cline-yes">1x</span>
101
101
  <span class="cline-any cline-neutral">&nbsp;</span>
102
102
  <span class="cline-any cline-neutral">&nbsp;</span>
103
103
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -117,7 +117,7 @@ function listShortcuts ( dependencies, state ) {
117
117
  return function listShortcuts ( sceneName ) {
118
118
  const { scenes, sceneNames } = state;
119
119
  if ( ! sceneNames.has ( sceneName ) ) return null
120
- const { show, hide, parents, beforeUnload, afterLoad, ...shortcuts } = scenes[sceneName];
120
+ const { show, hide, parents, beforeHide, afterShow, ...shortcuts } = scenes[sceneName];
121
121
  return Object.keys ( shortcuts )
122
122
  }} // listShortcuts func.
123
123
  &nbsp;
@@ -133,7 +133,7 @@ export default listShortcuts
133
133
  <div class='footer quiet pad2 space-top1 center small'>
134
134
  Code coverage generated by
135
135
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
136
- at 2026-04-09T15:47:31.753Z
136
+ at 2026-07-09T05:05:03.811Z
137
137
  </div>
138
138
  <script src="../../prettify.js"></script>
139
139
  <script>