aptechka 0.96.4 → 0.96.6

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.
@@ -1 +1 @@
1
- "use strict";var __defProp=Object.defineProperty;var __typeError=msg=>{throw TypeError(msg)};var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __accessCheck=(obj,member,msg)=>member.has(obj)||__typeError("Cannot "+msg);var __privateGet=(obj,member,getter)=>(__accessCheck(obj,member,"read from private field"),getter?getter.call(obj):member.get(obj)),__privateAdd=(obj,member,value)=>member.has(obj)?__typeError("Cannot add the same private member more than once"):member instanceof WeakSet?member.add(obj):member.set(obj,value),__privateSet=(obj,member,value,setter)=>(__accessCheck(obj,member,"write to private field"),setter?setter.call(obj,value):member.set(obj,value),value),__privateMethod=(obj,member,method)=>(__accessCheck(obj,member,"access private method"),method);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const elementResizer_index=require("../element-resizer/index.cjs"),browser=require("../browser-CIp8NsnF.cjs");require("construct-style-sheets-polyfill");require("../index-BrasTsja.cjs");var _targetElement,_SizeElement_instances,setVar_fn,_resizeListener;const _SizeElement=class _SizeElement extends HTMLElement{constructor(){super(...arguments);__privateAdd(this,_SizeElement_instances);__privateAdd(this,_targetElement,this);__privateAdd(this,_resizeListener,__name(()=>{__privateGet(this,_targetElement).style.removeProperty("--width"),__privateGet(this,_targetElement).style.removeProperty("--height"),__privateMethod(this,_SizeElement_instances,setVar_fn).call(this,"width"),__privateMethod(this,_SizeElement_instances,setVar_fn).call(this,"height"),setTimeout(()=>{const width=this.offsetWidth,height=this.offsetHeight;__privateMethod(this,_SizeElement_instances,setVar_fn).call(this,"width",width+"px"),__privateMethod(this,_SizeElement_instances,setVar_fn).call(this,"height",height+"px")},0)},"#resizeListener"))}connectedCallback(){var _a;const targetName=(_a=this.getAttribute("target"))==null?void 0:_a.trim();targetName&&(targetName==="parent"?__privateSet(this,_targetElement,this.parentElement||this):__privateSet(this,_targetElement,document.querySelector(targetName)||this)),elementResizer_index.elementResizer.subscribe(this,__privateGet(this,_resizeListener))}disconnectedCallback(){elementResizer_index.elementResizer.unsubscribe(__privateGet(this,_resizeListener))}};_targetElement=new WeakMap,_SizeElement_instances=new WeakSet,setVar_fn=__name(function(varName,value){const prefix=this.dataset.prefix||"";value?__privateGet(this,_targetElement).style.setProperty(`--${prefix}${varName}`,value):__privateGet(this,_targetElement).style.removeProperty(`--${prefix}${varName}`)},"#setVar"),_resizeListener=new WeakMap,__name(_SizeElement,"SizeElement");let SizeElement=_SizeElement;browser.isBrowser&&!customElements.get("e-size-element")&&customElements.define("e-size-element",SizeElement);exports.SizeElement=SizeElement;
1
+ "use strict";var __defProp=Object.defineProperty;var __typeError=msg=>{throw TypeError(msg)};var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __accessCheck=(obj,member,msg)=>member.has(obj)||__typeError("Cannot "+msg);var __privateGet=(obj,member,getter)=>(__accessCheck(obj,member,"read from private field"),getter?getter.call(obj):member.get(obj)),__privateAdd=(obj,member,value)=>member.has(obj)?__typeError("Cannot add the same private member more than once"):member instanceof WeakSet?member.add(obj):member.set(obj,value),__privateSet=(obj,member,value,setter)=>(__accessCheck(obj,member,"write to private field"),setter?setter.call(obj,value):member.set(obj,value),value),__privateMethod=(obj,member,method)=>(__accessCheck(obj,member,"access private method"),method);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const elementResizer_index=require("../element-resizer/index.cjs"),browser=require("../browser-CIp8NsnF.cjs");require("construct-style-sheets-polyfill");require("../index-BrasTsja.cjs");var _targetElement,_SizeElement_instances,setVar_fn,_resizeListener;const _SizeElement=class _SizeElement extends HTMLElement{constructor(){super(...arguments);__privateAdd(this,_SizeElement_instances);__privateAdd(this,_targetElement,this);__privateAdd(this,_resizeListener,__name(()=>{__privateGet(this,_targetElement).style.removeProperty("--width"),__privateGet(this,_targetElement).style.removeProperty("--height"),__privateMethod(this,_SizeElement_instances,setVar_fn).call(this,"width"),__privateMethod(this,_SizeElement_instances,setVar_fn).call(this,"height"),setTimeout(()=>{const width=this.offsetWidth,height=this.offsetHeight;__privateMethod(this,_SizeElement_instances,setVar_fn).call(this,"width",width+"px"),__privateMethod(this,_SizeElement_instances,setVar_fn).call(this,"height",height+"px")},0)},"#resizeListener"))}connectedCallback(){var _a;const targetName=(_a=this.getAttribute("target"))==null?void 0:_a.trim();targetName&&(targetName==="parent"?__privateSet(this,_targetElement,this.parentElement||this):__privateSet(this,_targetElement,document.querySelector(targetName)||this)),elementResizer_index.elementResizer.subscribe(this,__privateGet(this,_resizeListener)),document.addEventListener("spaAfterUpdate",__privateGet(this,_resizeListener))}disconnectedCallback(){elementResizer_index.elementResizer.unsubscribe(__privateGet(this,_resizeListener)),document.removeEventListener("spaAfterUpdate",__privateGet(this,_resizeListener))}};_targetElement=new WeakMap,_SizeElement_instances=new WeakSet,setVar_fn=__name(function(varName,value){const prefix=this.dataset.prefix||"";value?__privateGet(this,_targetElement).style.setProperty(`--${prefix}${varName}`,value):__privateGet(this,_targetElement).style.removeProperty(`--${prefix}${varName}`)},"#setVar"),_resizeListener=new WeakMap,__name(_SizeElement,"SizeElement");let SizeElement=_SizeElement;browser.isBrowser&&!customElements.get("e-size-element")&&customElements.define("e-size-element",SizeElement);exports.SizeElement=SizeElement;
@@ -25,10 +25,10 @@ const _SizeElement = class _SizeElement extends HTMLElement {
25
25
  connectedCallback() {
26
26
  var _a;
27
27
  const targetName = (_a = this.getAttribute("target")) == null ? void 0 : _a.trim();
28
- targetName && (targetName === "parent" ? __privateSet(this, _targetElement, this.parentElement || this) : __privateSet(this, _targetElement, document.querySelector(targetName) || this)), elementResizer.subscribe(this, __privateGet(this, _resizeListener));
28
+ targetName && (targetName === "parent" ? __privateSet(this, _targetElement, this.parentElement || this) : __privateSet(this, _targetElement, document.querySelector(targetName) || this)), elementResizer.subscribe(this, __privateGet(this, _resizeListener)), document.addEventListener("spaAfterUpdate", __privateGet(this, _resizeListener));
29
29
  }
30
30
  disconnectedCallback() {
31
- elementResizer.unsubscribe(__privateGet(this, _resizeListener));
31
+ elementResizer.unsubscribe(__privateGet(this, _resizeListener)), document.removeEventListener("spaAfterUpdate", __privateGet(this, _resizeListener));
32
32
  }
33
33
  };
34
34
  _targetElement = new WeakMap(), _SizeElement_instances = new WeakSet(), setVar_fn = /* @__PURE__ */ __name(function(varName, value) {
package/lib/spa/SPA.d.ts CHANGED
@@ -3,26 +3,39 @@ import { PageScroll } from '../page-scroll';
3
3
  export type SPAURLModifier = (url: URL) => URL;
4
4
  export interface SPAOptions extends Pick<LocalLinksOptions, 'base' | 'trailingSlash' | 'includeAnchor'> {
5
5
  scrollSelector?: string;
6
- beforeDiff?: (newDocument: Document) => void | Promise<void>;
7
- afterDiff?: () => void | Promise<void>;
6
+ beforeDiff?: (newDocument: Document, signal: AbortSignal) => void | Promise<void>;
7
+ afterDiff?: (signal: AbortSignal) => void | Promise<void>;
8
8
  viewTransition?: boolean;
9
9
  urlModifier?: SPAURLModifier;
10
10
  }
11
11
  export interface SPANavigateOptions extends LocalLinksLinkOptions {
12
12
  pushStateNoFetch?: boolean;
13
+ signal?: AbortSignal;
13
14
  }
14
15
  export interface SPAEvents {
15
- spaBeforeFetch: CustomEvent;
16
- spaAfterFetch: CustomEvent;
17
- spaBeforeUpdate: CustomEvent;
18
- spaAfterUpdate: CustomEvent;
16
+ spaBeforeFetch: CustomEvent<{
17
+ signal: AbortSignal;
18
+ }>;
19
+ spaAfterFetch: CustomEvent<{
20
+ signal: AbortSignal;
21
+ }>;
22
+ spaBeforeUpdate: CustomEvent<{
23
+ signal: AbortSignal;
24
+ }>;
25
+ spaAfterUpdate: CustomEvent<{
26
+ signal: AbortSignal;
27
+ }>;
28
+ }
29
+ export interface SPANavigationHandle extends Promise<void> {
30
+ signal: AbortSignal;
31
+ abort: () => void;
19
32
  }
20
33
  export declare class SPA {
21
34
  #private;
22
35
  static instance: SPA;
23
36
  constructor(options?: SPAOptions);
24
37
  get scroll(): PageScroll;
25
- navigate(url: URL | string, options?: SPANavigateOptions): Promise<void>;
38
+ navigate(url: URL | string, options?: SPANavigateOptions): SPANavigationHandle;
26
39
  }
27
40
  declare global {
28
41
  interface DocumentEventMap extends SPAEvents {
package/lib/spa/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var __defProp=Object.defineProperty,__defProps=Object.defineProperties;var __getOwnPropDescs=Object.getOwnPropertyDescriptors;var __getOwnPropSymbols=Object.getOwnPropertySymbols;var __hasOwnProp=Object.prototype.hasOwnProperty,__propIsEnum=Object.prototype.propertyIsEnumerable;var __typeError=msg=>{throw TypeError(msg)};var __defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__spreadValues=(a,b)=>{for(var prop in b||(b={}))__hasOwnProp.call(b,prop)&&__defNormalProp(a,prop,b[prop]);if(__getOwnPropSymbols)for(var prop of __getOwnPropSymbols(b))__propIsEnum.call(b,prop)&&__defNormalProp(a,prop,b[prop]);return a},__spreadProps=(a,b)=>__defProps(a,__getOwnPropDescs(b)),__name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __accessCheck=(obj,member,msg)=>member.has(obj)||__typeError("Cannot "+msg);var __privateGet=(obj,member,getter)=>(__accessCheck(obj,member,"read from private field"),getter?getter.call(obj):member.get(obj)),__privateAdd=(obj,member,value)=>member.has(obj)?__typeError("Cannot add the same private member more than once"):member instanceof WeakSet?member.add(obj):member.set(obj,value),__privateSet=(obj,member,value,setter)=>(__accessCheck(obj,member,"write to private field"),setter?setter.call(obj,value):member.set(obj,value),value);var __privateWrapper=(obj,member,setter,getter)=>({set _(value){__privateSet(obj,member,value,setter)},get _(){return __privateGet(obj,member,getter)}});var __async=(__this,__arguments,generator)=>new Promise((resolve,reject)=>{var fulfilled=value=>{try{step(generator.next(value))}catch(e){reject(e)}},rejected=value=>{try{step(generator.throw(value))}catch(e){reject(e)}},step=x=>x.done?resolve(x.value):Promise.resolve(x.value).then(fulfilled,rejected);step((generator=generator.apply(__this,__arguments)).next())});Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const cache_index=require("../cache/index.cjs"),LocalLinks=require("../LocalLinks-D9t9p3Kh.cjs"),PageAnnouncerElement=require("../PageAnnouncerElement-DreveHSN.cjs"),PageScroll=require("../PageScroll-xuHDTIoC.cjs"),ScrollNavigator=require("../ScrollNavigator-CNKI1Iae.cjs"),historyManager=require("../historyManager-Car6P2ak.cjs"),events=require("../events-UlGk63iC.cjs"),morph=require("../morph-CsmERL3V.cjs");require("construct-style-sheets-polyfill");require("../index-BrasTsja.cjs");const url=require("../url-D_KuhhOg.cjs");var _cache,_domParser,_options,_scroll,_links,_announcerElement,_updateId,_isBack;const _SPA=class _SPA{constructor(options){__privateAdd(this,_cache,new cache_index.Cache);__privateAdd(this,_domParser,new DOMParser);__privateAdd(this,_options,null);__privateAdd(this,_scroll,null);__privateAdd(this,_links,null);__privateAdd(this,_announcerElement,null);__privateAdd(this,_updateId,0);__privateAdd(this,_isBack,!1);_SPA.instance||(_SPA.instance=this,__privateSet(this,_options,__spreadProps(__spreadValues({},options),{base:url.normalizeBase(options==null?void 0:options.base)})),__privateSet(this,_announcerElement,new PageAnnouncerElement.PageAnnouncerElement),__privateSet(this,_scroll,new PageScroll.PageScroll(__privateGet(this,_options).scrollSelector)),__privateGet(this,_scroll).update(),__privateSet(this,_links,new LocalLinks.LocalLinks({base:__privateGet(this,_options).base,trailingSlash:__privateGet(this,_options).trailingSlash,includeAnchor:options==null?void 0:options.includeAnchor,onClick:__name((url2,options2)=>{try{this.navigate(url2,options2)}catch(e){window.location.assign(url2)}},"onClick")})),__privateGet(this,_links).update(),historyManager.historyManager.addPopStateHandler(event=>{var _a,_b,_c,_d,_e,_f;(_b=(_a=event.state)==null?void 0:_a.data)!=null&&_b.popover||(_d=(_c=event.previousState)==null?void 0:_c.data)!=null&&_d.popover||(__privateSet(this,_isBack,!0),this.navigate(location.href.replace(location.origin,""),{scrollValue:((_f=(_e=event.state)==null?void 0:_e.data)==null?void 0:_f.scrollTop)||0}))}))}get scroll(){return __privateGet(this,_scroll)}navigate(url$1,options){return __async(this,null,function*(){var _a,_b,_c,_d,_e,_f,_g;let isBack=__privateGet(this,_isBack);__privateSet(this,_isBack,!1);const updateId=++__privateWrapper(this,_updateId)._;let fullUrl=url.normalizeURL(url$1,{base:__privateGet(this,_options).base,trailingSlash:__privateGet(this,_options).trailingSlash});if(__privateGet(this,_options).urlModifier&&(fullUrl=__privateGet(this,_options).urlModifier(fullUrl)),options!=null&&options.pushStateNoFetch){historyManager.historyManager.updateCurrentStateData({scrollTop:__privateGet(this,_scroll).y}),historyManager.historyManager.pushState(fullUrl);return}events.dispatchEvent(document,"spaBeforeFetch",{custom:!0});let contents=__privateGet(this,_cache).get(fullUrl.toString());if((!contents||options!=null&&options.revalidate)&&(contents=yield fetch(`${fullUrl}`,{headers:{"X-SPA":"true"}}).then(res=>res.text()).catch(()=>{window.location.assign(fullUrl)})),events.dispatchEvent(document,"spaAfterFetch",{custom:!0}),!contents||(options!=null&&options.cache&&__privateGet(this,_cache).set(fullUrl.toString(),contents),__privateGet(this,_updateId)!==updateId))return;isBack?historyManager.historyManager.updatePreviousStateData({scrollTop:__privateGet(this,_scroll).y}):(historyManager.historyManager.updateCurrentStateData({scrollTop:__privateGet(this,_scroll).y}),historyManager.historyManager.pushState(fullUrl));const html=__privateGet(this,_domParser).parseFromString(contents,"text/html");if(url.normalizeRelativeURLs(html,fullUrl),yield(_b=(_a=__privateGet(this,_options)).beforeDiff)==null?void 0:_b.call(_a,html),__privateGet(this,_updateId)!==updateId)return;events.dispatchEvent(document,"spaBeforeUpdate",{custom:!0});let title=(_c=html.querySelector("title"))==null?void 0:_c.textContent;if(title)document.title=title;else{const h1=document.querySelector("h1");title=(_e=(_d=h1==null?void 0:h1.innerText)!=null?_d:h1==null?void 0:h1.textContent)!=null?_e:fullUrl.pathname}__privateGet(this,_announcerElement).create(html,title);const updateDone=__name(()=>{__privateGet(this,_scroll).update(),__privateGet(this,_links).update(),__privateGet(this,_announcerElement).done(),options!=null&&options.keepScrollPosition||ScrollNavigator.ScrollNavigator.scrollToElement((options==null?void 0:options.scrollValue)||0,__spreadValues({scrollElement:__privateGet(this,_scroll).element,behavior:"instant"},options==null?void 0:options.scrollOptions))},"updateDone");if(__privateGet(this,_options).viewTransition&&document.startViewTransition){const v=document.startViewTransition(()=>morph.morph(document,html));yield v.updateCallbackDone,updateDone(),yield v.finished}else yield morph.morph(document,html),updateDone();yield(_g=(_f=__privateGet(this,_options)).afterDiff)==null?void 0:_g.call(_f),events.dispatchEvent(document,"spaAfterUpdate",{custom:!0})})}};_cache=new WeakMap,_domParser=new WeakMap,_options=new WeakMap,_scroll=new WeakMap,_links=new WeakMap,_announcerElement=new WeakMap,_updateId=new WeakMap,_isBack=new WeakMap,__name(_SPA,"SPA"),_SPA.instance=null;let SPA=_SPA;exports.SPA=SPA;
1
+ "use strict";var __defProp=Object.defineProperty,__defProps=Object.defineProperties;var __getOwnPropDescs=Object.getOwnPropertyDescriptors;var __getOwnPropSymbols=Object.getOwnPropertySymbols;var __hasOwnProp=Object.prototype.hasOwnProperty,__propIsEnum=Object.prototype.propertyIsEnumerable;var __typeError=msg=>{throw TypeError(msg)};var __defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__spreadValues=(a,b)=>{for(var prop in b||(b={}))__hasOwnProp.call(b,prop)&&__defNormalProp(a,prop,b[prop]);if(__getOwnPropSymbols)for(var prop of __getOwnPropSymbols(b))__propIsEnum.call(b,prop)&&__defNormalProp(a,prop,b[prop]);return a},__spreadProps=(a,b)=>__defProps(a,__getOwnPropDescs(b)),__name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __accessCheck=(obj,member,msg)=>member.has(obj)||__typeError("Cannot "+msg);var __privateGet=(obj,member,getter)=>(__accessCheck(obj,member,"read from private field"),getter?getter.call(obj):member.get(obj)),__privateAdd=(obj,member,value)=>member.has(obj)?__typeError("Cannot add the same private member more than once"):member instanceof WeakSet?member.add(obj):member.set(obj,value),__privateSet=(obj,member,value,setter)=>(__accessCheck(obj,member,"write to private field"),setter?setter.call(obj,value):member.set(obj,value),value),__privateMethod=(obj,member,method)=>(__accessCheck(obj,member,"access private method"),method);var __privateWrapper=(obj,member,setter,getter)=>({set _(value){__privateSet(obj,member,value,setter)},get _(){return __privateGet(obj,member,getter)}});var __async=(__this,__arguments,generator)=>new Promise((resolve,reject)=>{var fulfilled=value=>{try{step(generator.next(value))}catch(e){reject(e)}},rejected=value=>{try{step(generator.throw(value))}catch(e){reject(e)}},step=x=>x.done?resolve(x.value):Promise.resolve(x.value).then(fulfilled,rejected);step((generator=generator.apply(__this,__arguments)).next())});Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const cache_index=require("../cache/index.cjs"),LocalLinks=require("../LocalLinks-D9t9p3Kh.cjs"),PageAnnouncerElement=require("../PageAnnouncerElement-DreveHSN.cjs"),PageScroll=require("../PageScroll-xuHDTIoC.cjs"),ScrollNavigator=require("../ScrollNavigator-CNKI1Iae.cjs"),historyManager=require("../historyManager-Car6P2ak.cjs"),events=require("../events-UlGk63iC.cjs"),morph=require("../morph-CsmERL3V.cjs");require("construct-style-sheets-polyfill");require("../index-BrasTsja.cjs");const url=require("../url-D_KuhhOg.cjs");var _cache,_domParser,_options,_scroll,_links,_announcerElement,_updateId,_isBack,_SPA_instances,navigateInternal_fn;const _SPA=class _SPA{constructor(options){__privateAdd(this,_SPA_instances);__privateAdd(this,_cache,new cache_index.Cache);__privateAdd(this,_domParser,new DOMParser);__privateAdd(this,_options,null);__privateAdd(this,_scroll,null);__privateAdd(this,_links,null);__privateAdd(this,_announcerElement,null);__privateAdd(this,_updateId,0);__privateAdd(this,_isBack,!1);_SPA.instance||(_SPA.instance=this,__privateSet(this,_options,__spreadProps(__spreadValues({},options),{base:url.normalizeBase(options==null?void 0:options.base)})),__privateSet(this,_announcerElement,new PageAnnouncerElement.PageAnnouncerElement),__privateSet(this,_scroll,new PageScroll.PageScroll(__privateGet(this,_options).scrollSelector)),__privateGet(this,_scroll).update(),__privateSet(this,_links,new LocalLinks.LocalLinks({base:__privateGet(this,_options).base,trailingSlash:__privateGet(this,_options).trailingSlash,includeAnchor:options==null?void 0:options.includeAnchor,onClick:__name((url2,options2)=>{this.navigate(url2,options2).signal.addEventListener("abort",()=>{console.log("Navigation aborted")})},"onClick")})),__privateGet(this,_links).update(),historyManager.historyManager.addPopStateHandler(event=>{var _a,_b,_c,_d,_e,_f;if((_b=(_a=event.state)==null?void 0:_a.data)!=null&&_b.popover||(_d=(_c=event.previousState)==null?void 0:_c.data)!=null&&_d.popover)return;__privateSet(this,_isBack,!0),this.navigate(location.href.replace(location.origin,""),{scrollValue:((_f=(_e=event.state)==null?void 0:_e.data)==null?void 0:_f.scrollTop)||0}).signal.addEventListener("abort",()=>{console.log("Popstate navigation aborted")})}))}get scroll(){return __privateGet(this,_scroll)}navigate(url2,options){const abortController=new AbortController,signal=(options==null?void 0:options.signal)||abortController.signal,navigationPromise=__privateMethod(this,_SPA_instances,navigateInternal_fn).call(this,url2,__spreadProps(__spreadValues({},options),{signal})).catch(error=>{throw error instanceof Error&&error.name==="AbortError"||console.error("Navigation failed:",error),error});return Object.assign(navigationPromise,{signal,abort:__name(()=>abortController.abort(),"abort")})}};_cache=new WeakMap,_domParser=new WeakMap,_options=new WeakMap,_scroll=new WeakMap,_links=new WeakMap,_announcerElement=new WeakMap,_updateId=new WeakMap,_isBack=new WeakMap,_SPA_instances=new WeakSet,navigateInternal_fn=__name(function(url$1,options){return __async(this,null,function*(){var _a,_b,_c,_d,_e,_f,_g;let isBack=__privateGet(this,_isBack);__privateSet(this,_isBack,!1);const updateId=++__privateWrapper(this,_updateId)._,{signal}=options||{signal:new AbortController().signal};let fullUrl=url.normalizeURL(url$1,{base:__privateGet(this,_options).base,trailingSlash:__privateGet(this,_options).trailingSlash});if(__privateGet(this,_options).urlModifier&&(fullUrl=__privateGet(this,_options).urlModifier(fullUrl)),options!=null&&options.pushStateNoFetch){historyManager.historyManager.updateCurrentStateData({scrollTop:__privateGet(this,_scroll).y}),historyManager.historyManager.pushState(fullUrl);return}signal.throwIfAborted(),events.dispatchEvent(document,"spaBeforeFetch",{custom:!0,detail:{signal}});let contents=__privateGet(this,_cache).get(fullUrl.toString());if(!contents||options!=null&&options.revalidate)try{contents=yield(yield fetch(`${fullUrl}`,{headers:{"X-SPA":"true"},signal})).text()}catch(error){if(error instanceof Error&&error.name==="AbortError")throw error;window.location.assign(fullUrl);return}if(signal.throwIfAborted(),events.dispatchEvent(document,"spaAfterFetch",{custom:!0,detail:{signal}}),!contents||(options!=null&&options.cache&&__privateGet(this,_cache).set(fullUrl.toString(),contents),signal.throwIfAborted(),__privateGet(this,_updateId)!==updateId))return;isBack?historyManager.historyManager.updatePreviousStateData({scrollTop:__privateGet(this,_scroll).y}):(historyManager.historyManager.updateCurrentStateData({scrollTop:__privateGet(this,_scroll).y}),historyManager.historyManager.pushState(fullUrl)),signal.throwIfAborted();const html=__privateGet(this,_domParser).parseFromString(contents,"text/html");if(url.normalizeRelativeURLs(html,fullUrl),yield(_b=(_a=__privateGet(this,_options)).beforeDiff)==null?void 0:_b.call(_a,html,signal),signal.throwIfAborted(),__privateGet(this,_updateId)!==updateId)return;events.dispatchEvent(document,"spaBeforeUpdate",{custom:!0,detail:{signal}});let title=(_c=html.querySelector("title"))==null?void 0:_c.textContent;if(title)document.title=title;else{const h1=document.querySelector("h1");title=(_e=(_d=h1==null?void 0:h1.innerText)!=null?_d:h1==null?void 0:h1.textContent)!=null?_e:fullUrl.pathname}signal.throwIfAborted(),__privateGet(this,_announcerElement).create(html,title);const updateDone=__name(()=>{__privateGet(this,_scroll).update(),__privateGet(this,_links).update(),__privateGet(this,_announcerElement).done(),options!=null&&options.keepScrollPosition||ScrollNavigator.ScrollNavigator.scrollToElement((options==null?void 0:options.scrollValue)||0,__spreadValues({scrollElement:__privateGet(this,_scroll).element,behavior:"instant"},options==null?void 0:options.scrollOptions))},"updateDone");if(__privateGet(this,_options).viewTransition&&document.startViewTransition){const v=document.startViewTransition(()=>morph.morph(document,html));yield v.updateCallbackDone,signal.throwIfAborted(),updateDone(),yield v.finished}else yield morph.morph(document,html),signal.throwIfAborted(),updateDone();yield(_g=(_f=__privateGet(this,_options)).afterDiff)==null?void 0:_g.call(_f,signal),signal.throwIfAborted(),events.dispatchEvent(document,"spaAfterUpdate",{custom:!0,detail:{signal}})})},"#navigateInternal"),__name(_SPA,"SPA"),_SPA.instance=null;let SPA=_SPA;exports.SPA=SPA;
@@ -1 +1 @@
1
- export { SPA, type SPAEvents, type SPANavigateOptions, type SPAOptions, type SPAURLModifier, } from './SPA';
1
+ export { SPA, type SPAEvents, type SPANavigateOptions, type SPANavigationHandle, type SPAOptions, type SPAURLModifier, } from './SPA';
package/lib/spa/index.js CHANGED
@@ -14,7 +14,7 @@ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { en
14
14
  return a;
15
15
  }, __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)), __name = (target, value) => __defProp(target, "name", { value, configurable: !0 });
16
16
  var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
17
- var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj)), __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value), __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
17
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj)), __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value), __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value), __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
18
18
  var __privateWrapper = (obj, member, setter, getter) => ({
19
19
  set _(value) {
20
20
  __privateSet(obj, member, value, setter);
@@ -50,9 +50,10 @@ import { m as morph } from "../morph-DwKYrG4g.js";
50
50
  import "construct-style-sheets-polyfill";
51
51
  import "../index-Z2Lgb7xU.js";
52
52
  import { a as normalizeBase, n as normalizeURL, b as normalizeRelativeURLs } from "../url-bipuV3FR.js";
53
- var _cache, _domParser, _options, _scroll, _links, _announcerElement, _updateId, _isBack;
53
+ var _cache, _domParser, _options, _scroll, _links, _announcerElement, _updateId, _isBack, _SPA_instances, navigateInternal_fn;
54
54
  const _SPA = class _SPA {
55
55
  constructor(options) {
56
+ __privateAdd(this, _SPA_instances);
56
57
  __privateAdd(this, _cache, new Cache());
57
58
  __privateAdd(this, _domParser, new DOMParser());
58
59
  __privateAdd(this, _options, null);
@@ -68,89 +69,116 @@ const _SPA = class _SPA {
68
69
  trailingSlash: __privateGet(this, _options).trailingSlash,
69
70
  includeAnchor: options == null ? void 0 : options.includeAnchor,
70
71
  onClick: /* @__PURE__ */ __name((url, options2) => {
71
- try {
72
- this.navigate(url, options2);
73
- } catch (e) {
74
- window.location.assign(url);
75
- }
72
+ this.navigate(url, options2).signal.addEventListener("abort", () => {
73
+ console.log("Navigation aborted");
74
+ });
76
75
  }, "onClick")
77
76
  })), __privateGet(this, _links).update(), historyManager.addPopStateHandler((event) => {
78
77
  var _a, _b, _c, _d, _e, _f;
79
- (_b = (_a = event.state) == null ? void 0 : _a.data) != null && _b.popover || (_d = (_c = event.previousState) == null ? void 0 : _c.data) != null && _d.popover || (__privateSet(this, _isBack, !0), this.navigate(location.href.replace(location.origin, ""), {
80
- scrollValue: ((_f = (_e = event.state) == null ? void 0 : _e.data) == null ? void 0 : _f.scrollTop) || 0
81
- }));
78
+ if ((_b = (_a = event.state) == null ? void 0 : _a.data) != null && _b.popover || (_d = (_c = event.previousState) == null ? void 0 : _c.data) != null && _d.popover)
79
+ return;
80
+ __privateSet(this, _isBack, !0), this.navigate(
81
+ location.href.replace(location.origin, ""),
82
+ {
83
+ scrollValue: ((_f = (_e = event.state) == null ? void 0 : _e.data) == null ? void 0 : _f.scrollTop) || 0
84
+ }
85
+ ).signal.addEventListener("abort", () => {
86
+ console.log("Popstate navigation aborted");
87
+ });
82
88
  }));
83
89
  }
84
90
  get scroll() {
85
91
  return __privateGet(this, _scroll);
86
92
  }
87
93
  navigate(url, options) {
88
- return __async(this, null, function* () {
89
- var _a, _b, _c, _d, _e, _f, _g;
90
- let isBack = __privateGet(this, _isBack);
91
- __privateSet(this, _isBack, !1);
92
- const updateId = ++__privateWrapper(this, _updateId)._;
93
- let fullUrl = normalizeURL(url, {
94
- base: __privateGet(this, _options).base,
95
- trailingSlash: __privateGet(this, _options).trailingSlash
96
- });
97
- if (__privateGet(this, _options).urlModifier && (fullUrl = __privateGet(this, _options).urlModifier(fullUrl)), options != null && options.pushStateNoFetch) {
98
- historyManager.updateCurrentStateData({
99
- scrollTop: __privateGet(this, _scroll).y
100
- }), historyManager.pushState(fullUrl);
101
- return;
102
- }
103
- dispatchEvent(document, "spaBeforeFetch", {
104
- custom: !0
105
- });
106
- let contents = __privateGet(this, _cache).get(fullUrl.toString());
107
- if ((!contents || options != null && options.revalidate) && (contents = yield fetch(`${fullUrl}`, {
108
- headers: {
109
- "X-SPA": "true"
110
- }
111
- }).then((res) => res.text()).catch(() => {
112
- window.location.assign(fullUrl);
113
- })), dispatchEvent(document, "spaAfterFetch", {
114
- custom: !0
115
- }), !contents || (options != null && options.cache && __privateGet(this, _cache).set(fullUrl.toString(), contents), __privateGet(this, _updateId) !== updateId))
116
- return;
117
- isBack ? historyManager.updatePreviousStateData({
118
- scrollTop: __privateGet(this, _scroll).y
119
- }) : (historyManager.updateCurrentStateData({
94
+ const abortController = new AbortController(), signal = (options == null ? void 0 : options.signal) || abortController.signal, navigationPromise = __privateMethod(this, _SPA_instances, navigateInternal_fn).call(this, url, __spreadProps(__spreadValues({}, options), {
95
+ signal
96
+ })).catch((error) => {
97
+ throw error instanceof Error && error.name === "AbortError" || console.error("Navigation failed:", error), error;
98
+ });
99
+ return Object.assign(navigationPromise, {
100
+ signal,
101
+ abort: /* @__PURE__ */ __name(() => abortController.abort(), "abort")
102
+ });
103
+ }
104
+ };
105
+ _cache = new WeakMap(), _domParser = new WeakMap(), _options = new WeakMap(), _scroll = new WeakMap(), _links = new WeakMap(), _announcerElement = new WeakMap(), _updateId = new WeakMap(), _isBack = new WeakMap(), _SPA_instances = new WeakSet(), navigateInternal_fn = /* @__PURE__ */ __name(function(url, options) {
106
+ return __async(this, null, function* () {
107
+ var _a, _b, _c, _d, _e, _f, _g;
108
+ let isBack = __privateGet(this, _isBack);
109
+ __privateSet(this, _isBack, !1);
110
+ const updateId = ++__privateWrapper(this, _updateId)._, { signal } = options || { signal: new AbortController().signal };
111
+ let fullUrl = normalizeURL(url, {
112
+ base: __privateGet(this, _options).base,
113
+ trailingSlash: __privateGet(this, _options).trailingSlash
114
+ });
115
+ if (__privateGet(this, _options).urlModifier && (fullUrl = __privateGet(this, _options).urlModifier(fullUrl)), options != null && options.pushStateNoFetch) {
116
+ historyManager.updateCurrentStateData({
120
117
  scrollTop: __privateGet(this, _scroll).y
121
- }), historyManager.pushState(fullUrl));
122
- const html = __privateGet(this, _domParser).parseFromString(contents, "text/html");
123
- if (normalizeRelativeURLs(html, fullUrl), yield (_b = (_a = __privateGet(this, _options)).beforeDiff) == null ? void 0 : _b.call(_a, html), __privateGet(this, _updateId) !== updateId)
118
+ }), historyManager.pushState(fullUrl);
119
+ return;
120
+ }
121
+ signal.throwIfAborted(), dispatchEvent(document, "spaBeforeFetch", {
122
+ custom: !0,
123
+ detail: { signal }
124
+ });
125
+ let contents = __privateGet(this, _cache).get(fullUrl.toString());
126
+ if (!contents || options != null && options.revalidate)
127
+ try {
128
+ contents = yield (yield fetch(`${fullUrl}`, {
129
+ headers: {
130
+ "X-SPA": "true"
131
+ },
132
+ signal
133
+ })).text();
134
+ } catch (error) {
135
+ if (error instanceof Error && error.name === "AbortError")
136
+ throw error;
137
+ window.location.assign(fullUrl);
124
138
  return;
125
- dispatchEvent(document, "spaBeforeUpdate", {
126
- custom: !0
127
- });
128
- let title = (_c = html.querySelector("title")) == null ? void 0 : _c.textContent;
129
- if (title)
130
- document.title = title;
131
- else {
132
- const h1 = document.querySelector("h1");
133
- title = (_e = (_d = h1 == null ? void 0 : h1.innerText) != null ? _d : h1 == null ? void 0 : h1.textContent) != null ? _e : fullUrl.pathname;
134
139
  }
135
- __privateGet(this, _announcerElement).create(html, title);
136
- const updateDone = /* @__PURE__ */ __name(() => {
137
- __privateGet(this, _scroll).update(), __privateGet(this, _links).update(), __privateGet(this, _announcerElement).done(), options != null && options.keepScrollPosition || ScrollNavigator.scrollToElement((options == null ? void 0 : options.scrollValue) || 0, __spreadValues({
138
- scrollElement: __privateGet(this, _scroll).element,
139
- behavior: "instant"
140
- }, options == null ? void 0 : options.scrollOptions));
141
- }, "updateDone");
142
- if (__privateGet(this, _options).viewTransition && document.startViewTransition) {
143
- const v = document.startViewTransition(() => morph(document, html));
144
- yield v.updateCallbackDone, updateDone(), yield v.finished;
145
- } else
146
- yield morph(document, html), updateDone();
147
- yield (_g = (_f = __privateGet(this, _options)).afterDiff) == null ? void 0 : _g.call(_f), dispatchEvent(document, "spaAfterUpdate", {
148
- custom: !0
149
- });
140
+ if (signal.throwIfAborted(), dispatchEvent(document, "spaAfterFetch", {
141
+ custom: !0,
142
+ detail: { signal }
143
+ }), !contents || (options != null && options.cache && __privateGet(this, _cache).set(fullUrl.toString(), contents), signal.throwIfAborted(), __privateGet(this, _updateId) !== updateId))
144
+ return;
145
+ isBack ? historyManager.updatePreviousStateData({
146
+ scrollTop: __privateGet(this, _scroll).y
147
+ }) : (historyManager.updateCurrentStateData({
148
+ scrollTop: __privateGet(this, _scroll).y
149
+ }), historyManager.pushState(fullUrl)), signal.throwIfAborted();
150
+ const html = __privateGet(this, _domParser).parseFromString(contents, "text/html");
151
+ if (normalizeRelativeURLs(html, fullUrl), yield (_b = (_a = __privateGet(this, _options)).beforeDiff) == null ? void 0 : _b.call(_a, html, signal), signal.throwIfAborted(), __privateGet(this, _updateId) !== updateId)
152
+ return;
153
+ dispatchEvent(document, "spaBeforeUpdate", {
154
+ custom: !0,
155
+ detail: { signal }
150
156
  });
151
- }
152
- };
153
- _cache = new WeakMap(), _domParser = new WeakMap(), _options = new WeakMap(), _scroll = new WeakMap(), _links = new WeakMap(), _announcerElement = new WeakMap(), _updateId = new WeakMap(), _isBack = new WeakMap(), __name(_SPA, "SPA"), _SPA.instance = null;
157
+ let title = (_c = html.querySelector("title")) == null ? void 0 : _c.textContent;
158
+ if (title)
159
+ document.title = title;
160
+ else {
161
+ const h1 = document.querySelector("h1");
162
+ title = (_e = (_d = h1 == null ? void 0 : h1.innerText) != null ? _d : h1 == null ? void 0 : h1.textContent) != null ? _e : fullUrl.pathname;
163
+ }
164
+ signal.throwIfAborted(), __privateGet(this, _announcerElement).create(html, title);
165
+ const updateDone = /* @__PURE__ */ __name(() => {
166
+ __privateGet(this, _scroll).update(), __privateGet(this, _links).update(), __privateGet(this, _announcerElement).done(), options != null && options.keepScrollPosition || ScrollNavigator.scrollToElement((options == null ? void 0 : options.scrollValue) || 0, __spreadValues({
167
+ scrollElement: __privateGet(this, _scroll).element,
168
+ behavior: "instant"
169
+ }, options == null ? void 0 : options.scrollOptions));
170
+ }, "updateDone");
171
+ if (__privateGet(this, _options).viewTransition && document.startViewTransition) {
172
+ const v = document.startViewTransition(() => morph(document, html));
173
+ yield v.updateCallbackDone, signal.throwIfAborted(), updateDone(), yield v.finished;
174
+ } else
175
+ yield morph(document, html), signal.throwIfAborted(), updateDone();
176
+ yield (_g = (_f = __privateGet(this, _options)).afterDiff) == null ? void 0 : _g.call(_f, signal), signal.throwIfAborted(), dispatchEvent(document, "spaAfterUpdate", {
177
+ custom: !0,
178
+ detail: { signal }
179
+ });
180
+ });
181
+ }, "#navigateInternal"), __name(_SPA, "SPA"), _SPA.instance = null;
154
182
  let SPA = _SPA;
155
183
  export {
156
184
  SPA
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aptechka",
3
- "version": "0.96.4",
3
+ "version": "0.96.6",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/denisavitski/aptechka.git"