@stacknav/core 0.3.0 → 0.4.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 (56) hide show
  1. package/README.md +125 -60
  2. package/dist/animate.d.ts +20 -2
  3. package/dist/animate.d.ts.map +1 -1
  4. package/dist/animate.js +76 -13
  5. package/dist/animate.js.map +1 -1
  6. package/dist/css-vars.d.ts +3 -3
  7. package/dist/css-vars.d.ts.map +1 -1
  8. package/dist/css-vars.js +47 -4
  9. package/dist/css-vars.js.map +1 -1
  10. package/dist/history-adapter.d.ts +0 -1
  11. package/dist/history-adapter.d.ts.map +1 -1
  12. package/dist/history-adapter.js +1 -5
  13. package/dist/history-adapter.js.map +1 -1
  14. package/dist/index.d.ts +27 -18
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +38 -15
  17. package/dist/index.js.map +1 -1
  18. package/dist/native-transition.d.ts +93 -0
  19. package/dist/native-transition.d.ts.map +1 -0
  20. package/dist/{ios-transition.js → native-transition.js} +48 -29
  21. package/dist/native-transition.js.map +1 -0
  22. package/dist/navigation-stack.d.ts +3 -2
  23. package/dist/navigation-stack.d.ts.map +1 -1
  24. package/dist/navigation-stack.js +45 -10
  25. package/dist/navigation-stack.js.map +1 -1
  26. package/dist/platform.d.ts +6 -0
  27. package/dist/platform.d.ts.map +1 -0
  28. package/dist/platform.js +22 -0
  29. package/dist/platform.js.map +1 -0
  30. package/dist/stacknav.css +10 -13
  31. package/dist/styles.d.ts +10 -11
  32. package/dist/styles.d.ts.map +1 -1
  33. package/dist/styles.js +14 -16
  34. package/dist/styles.js.map +1 -1
  35. package/dist/swipe-back.d.ts +4 -0
  36. package/dist/swipe-back.d.ts.map +1 -0
  37. package/dist/swipe-back.js +31 -0
  38. package/dist/swipe-back.js.map +1 -0
  39. package/package.json +3 -2
  40. package/src/animate.ts +74 -15
  41. package/src/css-vars.ts +43 -4
  42. package/src/history-adapter.ts +1 -5
  43. package/src/index.ts +49 -24
  44. package/src/{ios-transition.ts → native-transition.ts} +72 -39
  45. package/src/navigation-stack.ts +33 -10
  46. package/src/platform.ts +23 -0
  47. package/src/styles.ts +14 -16
  48. package/src/swipe-back.ts +35 -0
  49. package/dist/edge-pan-gesture.d.ts +0 -36
  50. package/dist/edge-pan-gesture.d.ts.map +0 -1
  51. package/dist/edge-pan-gesture.js +0 -155
  52. package/dist/edge-pan-gesture.js.map +0 -1
  53. package/dist/ios-transition.d.ts +0 -61
  54. package/dist/ios-transition.d.ts.map +0 -1
  55. package/dist/ios-transition.js.map +0 -1
  56. package/src/edge-pan-gesture.ts +0 -190
@@ -12,6 +12,8 @@ export class NavigationStack {
12
12
  pageClass;
13
13
  entries = [];
14
14
  busy = false;
15
+ _destroyed = false;
16
+ _activeTransition = null;
15
17
  _queue = [];
16
18
  _listeners = new Map();
17
19
  constructor({ container, transition, pageClass = 'sn-page' }) {
@@ -49,6 +51,8 @@ export class NavigationStack {
49
51
  };
50
52
  }
51
53
  _emit(event, detail) {
54
+ if (this._destroyed)
55
+ return;
52
56
  const set = this._listeners.get(event);
53
57
  if (set)
54
58
  set.forEach((fn) => fn(detail));
@@ -171,13 +175,19 @@ export class NavigationStack {
171
175
  this._begin(lower, upper, 'interactive');
172
176
  return {
173
177
  update: (v) => {
178
+ if (this._destroyed)
179
+ return;
174
180
  p = Math.min(1, Math.max(0, v));
175
181
  this._apply(lower, upper, p);
176
182
  },
177
183
  finish: async ({ complete, velocity = 0 }) => {
184
+ if (this._destroyed)
185
+ return;
178
186
  const remainingPx = (complete ? p : 1 - p) * this.width();
179
187
  const { duration, ease } = this.transition.settle({ remainingPx, velocity });
180
188
  await this._animate(lower, upper, p, complete ? 0 : 1, duration, ease);
189
+ if (this._destroyed)
190
+ return;
181
191
  this._end(lower, upper, 'interactive');
182
192
  if (complete) {
183
193
  this.entries.pop();
@@ -191,7 +201,23 @@ export class NavigationStack {
191
201
  },
192
202
  };
193
203
  }
204
+ /** Terminal: queued and subsequent navigation reject with AbortError. */
194
205
  destroy() {
206
+ if (this._destroyed)
207
+ return;
208
+ this._destroyed = true;
209
+ this._listeners.clear();
210
+ for (const task of this._queue.splice(0))
211
+ task.cancel();
212
+ this.busy = false;
213
+ const active = this._activeTransition;
214
+ this._activeTransition = null;
215
+ if (active) {
216
+ this.transition.end?.(active.lower, active.upper);
217
+ // During a pop the outgoing page has already left entries.
218
+ if (!this.entries.includes(active.upper))
219
+ this._unmount(active.upper);
220
+ }
195
221
  while (this.entries.length)
196
222
  this._unmount(this.entries.pop());
197
223
  this.container.classList.remove('sn-container', 'sn-busy');
@@ -200,12 +226,17 @@ export class NavigationStack {
200
226
  }
201
227
  // -------------------------------------------------------------- internals
202
228
  _setBusy(v) {
229
+ if (this._destroyed)
230
+ return;
203
231
  this.busy = v;
204
232
  this.container.classList.toggle('sn-busy', v);
205
233
  }
206
234
  /** Serializes operations: while a transition runs, later calls wait their turn. */
207
235
  _run(fn) {
208
236
  return new Promise((resolve, reject) => {
237
+ const cancel = () => reject(new DOMException('NavigationStack has been destroyed', 'AbortError'));
238
+ if (this._destroyed)
239
+ return cancel();
209
240
  const task = async () => {
210
241
  this._setBusy(true);
211
242
  try {
@@ -220,14 +251,14 @@ export class NavigationStack {
220
251
  }
221
252
  };
222
253
  if (this.busy)
223
- this._queue.push(task);
254
+ this._queue.push({ run: task, cancel });
224
255
  else
225
256
  task();
226
257
  });
227
258
  }
228
259
  _drain() {
229
- if (!this.busy && this._queue.length)
230
- this._queue.shift()();
260
+ if (!this._destroyed && !this.busy && this._queue.length)
261
+ this._queue.shift().run();
231
262
  }
232
263
  async _popRevealing(depth, animated, source) {
233
264
  const upper = this.entries.pop(); // the visible page: it animates out
@@ -236,6 +267,8 @@ export class NavigationStack {
236
267
  removed.push(this._unmount(this.entries.pop())); // intermediate pages: removed without animation
237
268
  const lower = this.top;
238
269
  await this._transition(lower, upper, 1, 0, animated, 'pop');
270
+ if (this._destroyed)
271
+ return upper;
239
272
  removed.push(this._unmount(upper));
240
273
  this._settle();
241
274
  this._emit('pop', { entry: upper, removed, entries: this.entries.slice(), source });
@@ -269,25 +302,27 @@ export class NavigationStack {
269
302
  * `prefers-reduced-motion` reduces every phase to.
270
303
  */
271
304
  _timing(duration, ease) {
305
+ if (this._destroyed)
306
+ return;
272
307
  this.container.style.setProperty('--sn-t', cssDuration(duration));
273
308
  this.container.style.setProperty('--sn-e', cssEasing(ease));
274
309
  }
275
310
  _begin(lower, upper, kind) {
311
+ this._activeTransition = { lower, upper };
276
312
  this._timing(0);
277
313
  lower?.el.classList.add('sn-page-visible', 'sn-page-lower');
278
314
  upper.el.classList.add('sn-page-visible', 'sn-page-upper');
279
315
  this.transition.begin?.(lower, upper);
280
316
  this._emit('transitionstart', { lower, upper, kind });
281
317
  }
282
- /** Writes the state at p without announcing it: the ticker reports the way there. */
283
- _write(lower, upper, p) {
284
- this.transition.apply(lower, upper, p);
285
- }
286
318
  _apply(lower, upper, p) {
287
- this._write(lower, upper, p);
319
+ this.transition.apply(lower, upper, p);
288
320
  this._emit('progress', { lower, upper, p });
289
321
  }
290
322
  _end(lower, upper, kind) {
323
+ if (this._destroyed)
324
+ return;
325
+ this._activeTransition = null;
291
326
  this._timing(0);
292
327
  upper.el.classList.remove('sn-page-upper');
293
328
  lower?.el.classList.remove('sn-page-lower');
@@ -300,11 +335,11 @@ export class NavigationStack {
300
335
  * then wait to be told they arrived. No frame of it is ours.
301
336
  */
302
337
  async _animate(lower, upper, from, to, duration, ease) {
303
- if (duration <= 0)
338
+ if (duration <= 0 || from === to)
304
339
  return this._apply(lower, upper, to);
305
340
  commitStyles(upper.el);
306
341
  this._timing(duration, ease);
307
- this._write(lower, upper, to);
342
+ this.transition.apply(lower, upper, to);
308
343
  const ticker = this._ticker(lower, upper, from, to, duration, ease);
309
344
  await animationsFinished([upper.el, lower?.el]);
310
345
  ticker?.cancel();
@@ -1 +1 @@
1
- {"version":3,"file":"navigation-stack.js","sourceRoot":"","sources":["../src/navigation-stack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"navigation-stack.js","sourceRoot":"","sources":["../src/navigation-stack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type Platform = 'ios' | 'android';
2
+ export declare function isIOSBrowser(): boolean;
3
+ export declare function isAndroidBrowser(): boolean;
4
+ /** `android` on an Android browser, otherwise `ios`. */
5
+ export declare function detectPlatform(): Platform;
6
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AAEzC,wBAAgB,YAAY,IAAI,OAAO,CAGtC;AAED,wBAAgB,gBAAgB,IAAI,OAAO,CAK1C;AAED,wDAAwD;AACxD,wBAAgB,cAAc,IAAI,QAAQ,CAEzC"}
@@ -0,0 +1,22 @@
1
+ // Which native platform the page is running on, so the transition can follow
2
+ // that platform's own push/pop. Nothing here is certain: user agents lie, and
3
+ // desktop browsers are neither. iOS is the default when nothing is recognized,
4
+ // because that is the look most web apps expect from a stack transition.
5
+ export function isIOSBrowser() {
6
+ if (typeof navigator === 'undefined')
7
+ return false;
8
+ return /iP(hone|ad|od)/.test(navigator.platform) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);
9
+ }
10
+ export function isAndroidBrowser() {
11
+ if (typeof navigator === 'undefined')
12
+ return false;
13
+ const hints = navigator.userAgentData;
14
+ if (hints?.platform)
15
+ return hints.platform === 'Android';
16
+ return /\bAndroid\b/.test(navigator.userAgent ?? '');
17
+ }
18
+ /** `android` on an Android browser, otherwise `ios`. */
19
+ export function detectPlatform() {
20
+ return !isIOSBrowser() && isAndroidBrowser() ? 'android' : 'ios';
21
+ }
22
+ //# sourceMappingURL=platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,8EAA8E;AAC9E,+EAA+E;AAC/E,yEAAyE;AAIzE,MAAM,UAAU,YAAY;IAC1B,IAAI,OAAO,SAAS,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IACnD,OAAO,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,KAAK,UAAU,IAAI,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;AAC1H,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,IAAI,OAAO,SAAS,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IACnD,MAAM,KAAK,GAAI,SAAuD,CAAC,aAAa,CAAC;IACrF,IAAI,KAAK,EAAE,QAAQ;QAAE,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC;IACzD,OAAO,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,YAAY,EAAE,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;AACnE,CAAC"}
package/dist/stacknav.css CHANGED
@@ -1,7 +1,9 @@
1
- /* Tune the iOS transition by setting these on .sn-container or any ancestor:
1
+ /* Tune the transition by setting these on .sn-container or any ancestor (the values shown are the iOS preset):
2
2
  --sn-duration: 500ms; push/pop length
3
- --sn-easing: cubic-bezier(0.32, 0.72, 0, 1); its curve: a cubic-bezier, a keyword, or ios
3
+ --sn-easing: cubic-bezier(0.32, 0.72, 0, 1); its curve: a cubic-bezier, linear(), a keyword, ios or android
4
+ --sn-travel: 100%; how far the incoming page travels
4
5
  --sn-parallax: 30%; how far the page beneath travels
6
+ --sn-fade: 1; the incoming page opacity when closed; 0 fades it in
5
7
  --sn-dim-color: #000; overlay on the page beneath
6
8
  --sn-dim-max: 10%; its opacity at full open
7
9
  --sn-shadow: -3px 0 14px rgba(0,0,0,0.16); on the incoming page; none to remove it
@@ -24,7 +26,6 @@
24
26
  overflow-x: hidden;
25
27
  -webkit-overflow-scrolling: touch;
26
28
  overscroll-behavior-y: contain;
27
- touch-action: pan-y;
28
29
  visibility: hidden;
29
30
  transform: translate3d(0,0,0);
30
31
  }
@@ -42,19 +43,10 @@
42
43
  inset: 0;
43
44
  z-index: 2147483647;
44
45
  pointer-events: none;
46
+ background: var(--sn-dim-color,var(--sn-dim-fallback,#000));
45
47
  opacity: 0;
46
48
  transition: opacity var(--sn-t,0s) var(--sn-e,linear);
47
49
  }
48
- .sn-edge {
49
- position: absolute;
50
- inset-block: 0;
51
- inset-inline-start: 0;
52
- z-index: 10;
53
- touch-action: none;
54
- }
55
- .sn-container:not(.sn-can-pop) .sn-edge,.sn-container.sn-anywhere .sn-edge {
56
- display: none;
57
- }
58
50
  .sn-busy {
59
51
  user-select: none;
60
52
  -webkit-user-select: none;
@@ -62,3 +54,8 @@
62
54
  .sn-busy .sn-page {
63
55
  pointer-events: none;
64
56
  }
57
+ @media(prefers-reduced-motion:reduce) {
58
+ .sn-container {
59
+ --sn-t: 0s!important;
60
+ }
61
+ }
package/dist/styles.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * The only styles the engine needs. These cover layout and the motion itself,
3
3
  * not appearance: the look lives in the transition and is tuned through the
4
- * `--sn-*` custom properties (see `IOS_TRANSITION_CSS_VARS` and the README).
4
+ * `--sn-*` custom properties (see `NATIVE_TRANSITION_CSS_VARS` and the README).
5
5
  * Those properties are documented but deliberately not declared, because
6
6
  * leaving one unset is what makes its JS default apply.
7
7
  *
@@ -20,8 +20,7 @@
20
20
  * - `.sn-container:dir(rtl)`: reading direction is a CSS question, so the
21
21
  * transform the engine writes is signed by `--sn-dir` rather than by JS.
22
22
  * - `.sn-page`: absolutely fills the container and is its own scroll container.
23
- * `touch-action: pan-y` keeps vertical scrolling native while horizontal
24
- * drags reach the gesture; `visibility: hidden` keeps pages beneath the top
23
+ * `visibility: hidden` keeps pages beneath the top
25
24
  * mounted (scroll position, form state) but out of sight and out of the
26
25
  * accessibility tree. The identity transform is the resting state, and the
27
26
  * containing block the dim overlay is positioned against.
@@ -30,16 +29,16 @@
30
29
  * transition in flight. Only these transition, and only these are promoted,
31
30
  * so a deep stack costs nothing at rest. Both `transform` and `opacity` are
32
31
  * listed, so a transition of your own can fade a page as well as move it and
33
- * still be run by the browser; the iOS look only ever changes `transform`,
34
- * and a property that does not change starts no transition.
35
- * - `.sn-dim`: the overlay the lower page dims behind. Its colour and its
36
- * opacity are written by the transition; everything else is here.
37
- * - `.sn-edge`: the strip the swipe-back gesture listens on. `inset-inline-start`
38
- * puts it on the leading edge in either reading direction; its width is the
39
- * gesture's `edgeWidth` option, and whether it is shown at all follows from
40
- * the container's classes.
32
+ * still be run by the browser; the iOS look only ever changes `transform`
33
+ * (the Android look fades as well), and a property that does not change
34
+ * starts no transition.
35
+ * - `.sn-dim`: the overlay the lower page dims behind. CSS resolves its colour;
36
+ * the transition supplies a fallback colour and writes its opacity.
41
37
  * - `.sn-busy`: no clicks land on a page that is mid-transition, and a drag
42
38
  * does not select the text under it.
39
+ * - `prefers-reduced-motion`: forces the phase duration to zero in CSS. The
40
+ * `!important` is intentional: it must override the inline `--sn-t` written
41
+ * by the engine, including when the preference changes during a transition.
43
42
  */
44
43
  export declare const STACKNAV_CSS: string;
45
44
  export declare const STACKNAV_STYLE_ID = "stacknav-styles";
@@ -1 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,YAAY,QAUiB,CAAC;AAE3C,eAAO,MAAM,iBAAiB,oBAAoB,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,GAAE,QAAQ,GAAG,IAAwD,GAAG,IAAI,CAM3G"}
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,eAAO,MAAM,YAAY,QASoD,CAAC;AAE9E,eAAO,MAAM,iBAAiB,oBAAoB,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,GAAE,QAAQ,GAAG,IAAwD,GAAG,IAAI,CAM3G"}
package/dist/styles.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * The only styles the engine needs. These cover layout and the motion itself,
3
3
  * not appearance: the look lives in the transition and is tuned through the
4
- * `--sn-*` custom properties (see `IOS_TRANSITION_CSS_VARS` and the README).
4
+ * `--sn-*` custom properties (see `NATIVE_TRANSITION_CSS_VARS` and the README).
5
5
  * Those properties are documented but deliberately not declared, because
6
6
  * leaving one unset is what makes its JS default apply.
7
7
  *
@@ -20,8 +20,7 @@
20
20
  * - `.sn-container:dir(rtl)`: reading direction is a CSS question, so the
21
21
  * transform the engine writes is signed by `--sn-dir` rather than by JS.
22
22
  * - `.sn-page`: absolutely fills the container and is its own scroll container.
23
- * `touch-action: pan-y` keeps vertical scrolling native while horizontal
24
- * drags reach the gesture; `visibility: hidden` keeps pages beneath the top
23
+ * `visibility: hidden` keeps pages beneath the top
25
24
  * mounted (scroll position, form state) but out of sight and out of the
26
25
  * accessibility tree. The identity transform is the resting state, and the
27
26
  * containing block the dim overlay is positioned against.
@@ -30,27 +29,26 @@
30
29
  * transition in flight. Only these transition, and only these are promoted,
31
30
  * so a deep stack costs nothing at rest. Both `transform` and `opacity` are
32
31
  * listed, so a transition of your own can fade a page as well as move it and
33
- * still be run by the browser; the iOS look only ever changes `transform`,
34
- * and a property that does not change starts no transition.
35
- * - `.sn-dim`: the overlay the lower page dims behind. Its colour and its
36
- * opacity are written by the transition; everything else is here.
37
- * - `.sn-edge`: the strip the swipe-back gesture listens on. `inset-inline-start`
38
- * puts it on the leading edge in either reading direction; its width is the
39
- * gesture's `edgeWidth` option, and whether it is shown at all follows from
40
- * the container's classes.
32
+ * still be run by the browser; the iOS look only ever changes `transform`
33
+ * (the Android look fades as well), and a property that does not change
34
+ * starts no transition.
35
+ * - `.sn-dim`: the overlay the lower page dims behind. CSS resolves its colour;
36
+ * the transition supplies a fallback colour and writes its opacity.
41
37
  * - `.sn-busy`: no clicks land on a page that is mid-transition, and a drag
42
38
  * does not select the text under it.
39
+ * - `prefers-reduced-motion`: forces the phase duration to zero in CSS. The
40
+ * `!important` is intentional: it must override the inline `--sn-t` written
41
+ * by the engine, including when the preference changes during a transition.
43
42
  */
44
43
  export const STACKNAV_CSS = '.sn-container{position:relative;overflow:hidden}' +
45
44
  '.sn-container:dir(rtl){--sn-dir:-1}' +
46
- '.sn-page{position:absolute;inset:0;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;overscroll-behavior-y:contain;touch-action:pan-y;visibility:hidden;transform:translate3d(0,0,0)}' +
45
+ '.sn-page{position:absolute;inset:0;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;overscroll-behavior-y:contain;visibility:hidden;transform:translate3d(0,0,0)}' +
47
46
  '.sn-page-visible{visibility:visible}' +
48
47
  '.sn-page-upper,.sn-page-lower{will-change:transform;transition-property:transform,opacity;transition-duration:var(--sn-t,0s);transition-timing-function:var(--sn-e,linear)}' +
49
- '.sn-dim{position:fixed;inset:0;z-index:2147483647;pointer-events:none;opacity:0;transition:opacity var(--sn-t,0s) var(--sn-e,linear)}' +
50
- '.sn-edge{position:absolute;inset-block:0;inset-inline-start:0;z-index:10;touch-action:none}' +
51
- '.sn-container:not(.sn-can-pop) .sn-edge,.sn-container.sn-anywhere .sn-edge{display:none}' +
48
+ '.sn-dim{position:fixed;inset:0;z-index:2147483647;pointer-events:none;background:var(--sn-dim-color,var(--sn-dim-fallback,#000));opacity:0;transition:opacity var(--sn-t,0s) var(--sn-e,linear)}' +
52
49
  '.sn-busy{user-select:none;-webkit-user-select:none}' +
53
- '.sn-busy .sn-page{pointer-events:none}';
50
+ '.sn-busy .sn-page{pointer-events:none}' +
51
+ '@media(prefers-reduced-motion:reduce){.sn-container{--sn-t:0s!important}}';
54
52
  export const STACKNAV_STYLE_ID = 'stacknav-styles';
55
53
  /**
56
54
  * Inserts the engine's stylesheet into `doc` once. Framework ports call this so
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,CAAC,MAAM,YAAY,GACvB,kDAAkD;IAClD,qCAAqC;IACrC,wMAAwM;IACxM,sCAAsC;IACtC,6KAA6K;IAC7K,uIAAuI;IACvI,6FAA6F;IAC7F,0FAA0F;IAC1F,qDAAqD;IACrD,wCAAwC,CAAC;AAE3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AAEnD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAuB,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;IACnG,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,iBAAiB,CAAC;QAAE,OAAO;IAC1D,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE,GAAG,iBAAiB,CAAC;IAC7B,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC;IACjC,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,MAAM,CAAC,MAAM,YAAY,GACvB,kDAAkD;IAClD,qCAAqC;IACrC,qLAAqL;IACrL,sCAAsC;IACtC,6KAA6K;IAC7K,kMAAkM;IAClM,qDAAqD;IACrD,wCAAwC;IACxC,2EAA2E,CAAC;AAE9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AAEnD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAuB,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;IACnG,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,iBAAiB,CAAC;QAAE,OAAO;IAC1D,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE,GAAG,iBAAiB,CAAC;IAC7B,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC;IACjC,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** Browser suppression is best effort; browser buttons and OS gestures remain available. */
2
+ export type SwipeBackMode = 'browser' | 'disabled';
3
+ export declare function suppressBrowserSwipe(container: HTMLElement): () => void;
4
+ //# sourceMappingURL=swipe-back.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swipe-back.d.ts","sourceRoot":"","sources":["../src/swipe-back.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,CAAC;AAYnD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,IAAI,CAqBvE"}
@@ -0,0 +1,31 @@
1
+ // Several outlets can share one viewport. Restore it only after the last
2
+ // suppression request is released, including when stacks are destroyed.
3
+ const suppressions = /*#__PURE__*/ new WeakMap();
4
+ export function suppressBrowserSwipe(container) {
5
+ const root = container.ownerDocument.documentElement;
6
+ const property = 'overscroll-behavior-x';
7
+ let state = suppressions.get(root);
8
+ if (!state) {
9
+ state = { count: 0, value: root.style.getPropertyValue(property), priority: root.style.getPropertyPriority(property) };
10
+ suppressions.set(root, state);
11
+ root.style.setProperty(property, 'contain', 'important');
12
+ }
13
+ state.count++;
14
+ let released = false;
15
+ return () => {
16
+ if (released)
17
+ return;
18
+ released = true;
19
+ if (--state.count)
20
+ return;
21
+ suppressions.delete(root);
22
+ // Do not overwrite a newer declaration installed by the application.
23
+ if (root.style.getPropertyValue(property) !== 'contain' || root.style.getPropertyPriority(property) !== 'important')
24
+ return;
25
+ if (state.value)
26
+ root.style.setProperty(property, state.value, state.priority);
27
+ else
28
+ root.style.removeProperty(property);
29
+ };
30
+ }
31
+ //# sourceMappingURL=swipe-back.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swipe-back.js","sourceRoot":"","sources":["../src/swipe-back.ts"],"names":[],"mappings":"AASA,yEAAyE;AACzE,wEAAwE;AACxE,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,OAAO,EAA4B,CAAC;AAE3E,MAAM,UAAU,oBAAoB,CAAC,SAAsB;IACzD,MAAM,IAAI,GAAG,SAAS,CAAC,aAAa,CAAC,eAAe,CAAC;IACrD,MAAM,QAAQ,GAAG,uBAAuB,CAAC;IACzC,IAAI,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvH,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAC3D,CAAC;IACD,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO,GAAG,EAAE;QACV,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,IAAI,EAAE,KAAK,CAAC,KAAK;YAAE,OAAO;QAC1B,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1B,qEAAqE;QACrE,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,WAAW;YAAE,OAAO;QAC5H,IAAI,KAAK,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;;YAC1E,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@stacknav/core",
3
- "version": "0.3.0",
4
- "description": "Framework-agnostic iOS-style push/pop navigation stack: transition, interactive swipe back, direction resolution, history mirroring.",
3
+ "version": "0.4.0",
4
+ "description": "Framework-agnostic native-style (iOS and Android) push/pop navigation stack: transition, interactive swipe back, direction resolution, history mirroring.",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "keywords": [
8
8
  "navigation",
9
9
  "transition",
10
10
  "ios",
11
+ "android",
11
12
  "swipe-back",
12
13
  "stack",
13
14
  "animation"
package/src/animate.ts CHANGED
@@ -16,21 +16,33 @@ export interface Easing {
16
16
  }
17
17
 
18
18
  export function cubicBezier(x1: number, y1: number, x2: number, y2: number): Easing {
19
- const A = (a: number, b: number) => 1 - 3 * b + 3 * a;
20
- const B = (a: number, b: number) => 3 * b - 6 * a;
21
- const C = (a: number) => 3 * a;
22
- const calc = (t: number, a: number, b: number) => ((A(a, b) * t + B(a, b)) * t + C(a)) * t;
23
- const slope = (t: number, a: number, b: number) => 3 * A(a, b) * t * t + 2 * B(a, b) * t + C(a);
19
+ // The coefficients are constant for the lifetime of a curve.
20
+ const ax = 1 - 3 * x2 + 3 * x1, bx = 3 * x2 - 6 * x1, cx = 3 * x1;
21
+ const ay = 1 - 3 * y2 + 3 * y1, by = 3 * y2 - 6 * y1, cy = 3 * y1;
22
+ const sampleX = (t: number) => ((ax * t + bx) * t + cx) * t;
23
+ const sampleY = (t: number) => ((ay * t + by) * t + cy) * t;
24
24
  const f = (x: number) => {
25
25
  if (x <= 0) return 0;
26
26
  if (x >= 1) return 1;
27
27
  let t = x;
28
+ // Newton converges quickly for ordinary curves. Flat slopes can send it
29
+ // outside [0, 1], so fall back to a bounded search when it fails.
28
30
  for (let i = 0; i < 8; i++) {
29
- const s = slope(t, x1, x2);
30
- if (s === 0) break;
31
- t -= (calc(t, x1, x2) - x) / s;
31
+ const error = sampleX(t) - x;
32
+ if (Math.abs(error) < 1e-8) return sampleY(t);
33
+ const slope = (3 * ax * t + 2 * bx) * t + cx;
34
+ if (Math.abs(slope) < 1e-8) break;
35
+ const next = t - error / slope;
36
+ if (next < 0 || next > 1) break;
37
+ t = next;
32
38
  }
33
- return calc(t, y1, y2);
39
+ let lo = 0, hi = 1;
40
+ for (let i = 0; i < 30; i++) {
41
+ t = (lo + hi) / 2;
42
+ if (sampleX(t) < x) lo = t;
43
+ else hi = t;
44
+ }
45
+ return sampleY(t);
34
46
  };
35
47
  return Object.assign(f, { css: `cubic-bezier(${x1}, ${y1}, ${x2}, ${y2})` });
36
48
  }
@@ -38,10 +50,40 @@ export function cubicBezier(x1: number, y1: number, x2: number, y2: number): Eas
38
50
  // `#__PURE__` marks the module-load calls as droppable, so a bundler that does
39
51
  // not honour the package's `sideEffects` flag can still leave this module out
40
52
  // when nothing here is imported.
41
- export const easings: { linear: Easing; ios: Easing; easeOut: Easing } = {
53
+ /**
54
+ * Straight lines through `points` (`[x, y]` pairs, x from 0 to 1 and never
55
+ * decreasing), the curve CSS `linear()` draws. Spelled for CSS the same way
56
+ * unless `css` says otherwise. A browser without `linear()` (Chrome < 113,
57
+ * Safari < 17.2, Firefox < 112) runs its default `ease` instead.
58
+ */
59
+ export function linearEasing(points: ReadonlyArray<readonly [number, number]>, css?: string): Easing {
60
+ const f = (t: number): number => {
61
+ if (t <= points[0][0]) return points[0][1];
62
+ let i = 1;
63
+ while (i < points.length - 1 && points[i][0] < t) i++;
64
+ const [x0, y0] = points[i - 1], [x1, y1] = points[i];
65
+ return x1 > x0 ? y0 + (y1 - y0) * Math.min(1, (t - x0) / (x1 - x0)) : y1;
66
+ };
67
+ return Object.assign(f, { css: css ?? `linear(${points.map(([x, y]) => `${y} ${x * 100}%`).join(', ')})` });
68
+ }
69
+
70
+ export const easings: { linear: Easing; ios: Easing; easeOut: Easing; android: Easing; androidSettle: Easing } = {
42
71
  linear: /*#__PURE__*/ Object.assign((t: number) => t, { css: 'linear' }),
43
72
  ios: /*#__PURE__*/ cubicBezier(0.32, 0.72, 0, 1), // the common approximation of UIKit's navigation curve
44
73
  easeOut: /*#__PURE__*/ cubicBezier(0.2, 0.8, 0.2, 1),
74
+ // AOSP's `fast_out_extra_slow_in`, the interpolator behind activity open and
75
+ // close since Android 13 (frameworks/base, core/res/res/interpolator). It is
76
+ // a path of two cubics, `M0,0 C0.05,0 0.133,0.06 0.167,0.4 C0.208,0.82 0.25,1
77
+ // 1,1`, which one `cubic-bezier()` cannot bend into; these stops follow it
78
+ // to within 0.006 and are what CSS gets.
79
+ android: /*#__PURE__*/ linearEasing([
80
+ [0, 0], [0.03125, 0.008], [0.0625, 0.033], [0.09375, 0.08], [0.125, 0.162], [0.140625, 0.225], [0.15625, 0.313],
81
+ [0.1640625, 0.375], [0.171875, 0.451], [0.1796875, 0.517], [0.1875, 0.571], [0.203125, 0.649], [0.21875, 0.702],
82
+ [0.25, 0.773], [0.28125, 0.819], [0.3125, 0.853], [0.375, 0.899], [0.5, 0.951], [0.625, 0.977], [0.75, 0.991], [1, 1],
83
+ ]),
84
+ // The "standard decelerate" Android's predictive-back guidelines ask for
85
+ // when a released gesture runs out.
86
+ androidSettle: /*#__PURE__*/ cubicBezier(0, 0, 0, 1),
45
87
  };
46
88
 
47
89
  /** How an easing should be spelled for CSS. A curve with no spelling runs linearly. */
@@ -63,16 +105,20 @@ export type CancellableTween = Promise<void> & { cancel(): void };
63
105
  /**
64
106
  * Animates a number from `from` to `to` over `duration` ms, calling `onUpdate`
65
107
  * every frame. Returns a promise that resolves when the tween is done;
66
- * `promise.cancel()` stops it early. A duration of 0 or less jumps straight
67
- * to `to`.
108
+ * `promise.cancel()` stops it early and resolves the promise. A duration of
109
+ * 0 or less jumps straight to `to`.
68
110
  *
69
111
  * The engine does not use this to move pages, CSS does that. It uses it to
70
112
  * report `progress` to listeners, and only while someone is listening.
71
113
  */
72
- export function tween({ from, to, duration, ease = easings.linear, onUpdate }: TweenOptions): CancellableTween {
114
+ // The default is spelled out rather than taken from `easings`, so a bundle that
115
+ // only needs the tween does not carry the curves.
116
+ export function tween({ from, to, duration, ease = (t) => t, onUpdate }: TweenOptions): CancellableTween {
73
117
  let raf = 0;
74
118
  let done = false;
119
+ let finish: () => void;
75
120
  const promise = new Promise<void>((resolve) => {
121
+ finish = resolve;
76
122
  if (duration <= 0) {
77
123
  onUpdate(to);
78
124
  done = true;
@@ -83,6 +129,7 @@ export function tween({ from, to, duration, ease = easings.linear, onUpdate }: T
83
129
  if (done) return;
84
130
  const k = Math.min(1, (now - t0) / duration);
85
131
  onUpdate(from + (to - from) * ease(k));
132
+ if (done) return;
86
133
  if (k < 1) raf = requestAnimationFrame(step);
87
134
  else {
88
135
  done = true;
@@ -94,6 +141,7 @@ export function tween({ from, to, duration, ease = easings.linear, onUpdate }: T
94
141
  promise.cancel = () => {
95
142
  done = true;
96
143
  cancelAnimationFrame(raf);
144
+ finish();
97
145
  };
98
146
  return promise;
99
147
  }
@@ -129,5 +177,16 @@ export function animationsFinished(els: Array<HTMLElement | null | undefined>, p
129
177
  return running.length ? Promise.all(running).then(() => {}) : Promise.resolve();
130
178
  }
131
179
 
132
- export const prefersReducedMotion = (): boolean =>
133
- typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion: reduce)').matches;
180
+ /** `matchMedia`, and false where there is none: a server, a test. */
181
+ export const matchesMedia = (query: string): boolean =>
182
+ typeof matchMedia === 'function' && matchMedia(query).matches;
183
+
184
+ export const prefersReducedMotion = (): boolean => matchesMedia('(prefers-reduced-motion: reduce)');
185
+
186
+ /**
187
+ * Whether the primary pointer is coarse: a phone or a tablet, not a mouse. The
188
+ * test to reach for when a behaviour is meant for handhelds only. It is a media
189
+ * query, so it answers again after the device changes — a tablet docked to a
190
+ * trackpad stops being touch-primary.
191
+ */
192
+ export const isTouchPrimary = (): boolean => matchesMedia('(pointer: coarse)');