@klodd/ds 5.16.1 → 5.16.2

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 (2) hide show
  1. package/js/turbo-nav.js +34 -0
  2. package/package.json +1 -1
package/js/turbo-nav.js CHANGED
@@ -66,6 +66,15 @@
66
66
  let currentController = null;
67
67
  let inFlightSwap = null; // Promise som resolvar nar pagaende VT/swap ar klar.
68
68
 
69
+ /*--------------------------------------------------------------
70
+ Track senaste pathname+search sa popstate-handlern kan skilja
71
+ mellan riktig back/forward-nav (path/search andras) och hash-
72
+ only-nav (browser default scroll-to-anchor + hashchange). Vid
73
+ hash-only ska turbo INTE fetch+swap - det skulle overrida
74
+ browser-default-scrollen med scrollTo(0, cachedScroll=0).
75
+ --------------------------------------------------------------*/
76
+ let lastPathSearch = window.location.pathname + window.location.search;
77
+
69
78
  /*--------------------------------------------------------------
70
79
  Lank-eligibility: ska denna <a> hanteras av Turbo eller browsern?
71
80
  --------------------------------------------------------------*/
@@ -316,6 +325,13 @@
316
325
  history.pushState( mergeState( { scrollY: 0 } ), '', finalUrl );
317
326
  }
318
327
 
328
+ // Spara nya path+search sa popstate-handlern kan upptacka
329
+ // hash-only-navigations (path/search aterstaller, bara hash byter).
330
+ try {
331
+ const parsed = new URL( finalUrl );
332
+ lastPathSearch = parsed.pathname + parsed.search;
333
+ } catch ( _ ) { /* ignore */ }
334
+
319
335
  // Notify subscribers (nav-optimistic.js, hero-roll.js, future modules).
320
336
  document.dispatchEvent( new CustomEvent( 'turbo:navigated', {
321
337
  detail: { url: finalUrl, fromUrl: fromUrl, popstate: !! options.popstate },
@@ -357,8 +373,26 @@
357
373
  turbo: true via mergeState sa popstate-handling vet att vi ar
358
374
  i turbo-modell hela vagen. Browser-internals (scroll-cache,
359
375
  etc.) bevaras eftersom vi merge:ar istallet for replace:ar.
376
+
377
+ Chrome firar popstate aven for hash-only-navs pa samma
378
+ dokument (a href="#x"-klick laggs som history-entry + ev.
379
+ popstate beroende pa browser-version). Vi vill INTE turbo-
380
+ fetch+swap i de fallen - browser default-scroll till anchor
381
+ + hashchange-event hanterar det helt natively. Att fetch+swap
382
+ trots det leder till scrollTo(0, 0) i swap-callbacken (state
383
+ null fran browser-skapad entry), vilket overrider anchor-
384
+ scrollen och blir "scrollade tillbaka till toppen"-bugg.
385
+
386
+ Detektion: jamfor nuvarande pathname+search mot lastPathSearch
387
+ (updateras vid varje lyckad navigateTo). Identiska = hash-only.
360
388
  --------------------------------------------------------------*/
361
389
  window.addEventListener( 'popstate', function () {
390
+ const currentPathSearch = window.location.pathname + window.location.search;
391
+ if ( currentPathSearch === lastPathSearch ) {
392
+ // Hash-only-nav pa samma dokument - browser default + hashchange
393
+ // gor jobbet. Inget att swappa.
394
+ return;
395
+ }
362
396
  navigateTo( window.location.href, { popstate: true } );
363
397
  } );
364
398
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@klodd/ds",
3
- "version": "5.16.1",
3
+ "version": "5.16.2",
4
4
  "description": "Klodd shared design system - tokens, components, JS",
5
5
  "main": "css/index.css",
6
6
  "bin": {