{"version":3,"sources":["../../../../src/lib/AreRouteWatcher/AreRouteWatcher.component.ts"],"names":[],"mappings":";;;;AAOO,IAAM,eAAA,GAAN,cAA8B,WAAA,CAAY;AAAA,EAK7C,WAAA,GAAc;AACV,IAAA,KAAA,EAAM;AAJV,IAAA,IAAA,CAAiB,QAAA,uBAAwC,GAAA,EAAI;AAC7D,IAAA,IAAA,CAAQ,OAAA,GAAe,IAAI,GAAA,CAAI,MAAA,CAAO,SAAS,IAAI,CAAA;AA4BnD;AAAA,IAAA,IAAA,CAAQ,aAAa,MAAY;AAC7B,MAAA,IAAA,CAAK,MAAA,EAAO;AAAA,IAChB,CAAA;AAEA,IAAA,IAAA,CAAQ,eAAe,MAAY;AAC/B,MAAA,IAAA,CAAK,MAAA,EAAO;AAAA,IAChB,CAAA;AAEA,IAAA,IAAA,CAAQ,cAAc,MAAY;AAC9B,MAAA,IAAA,CAAK,MAAA,EAAO;AAAA,IAChB,CAAA;AAlCI,IAAA,IAAA,CAAK,YAAA,EAAa;AAClB,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,EACzB;AAAA;AAAA,EAIA,SAAS,OAAA,EAAyC;AAC9C,IAAA,IAAA,CAAK,QAAA,CAAS,IAAI,OAAO,CAAA;AACzB,IAAA,OAAO,MAAM,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,OAAO,CAAA;AAAA,EAC7C;AAAA,EAEA,IAAI,GAAA,GAAW;AACX,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EAChB;AAAA,EAEA,OAAA,GAAgB;AACZ,IAAA,MAAA,CAAO,mBAAA,CAAoB,UAAA,EAAY,IAAA,CAAK,UAAU,CAAA;AACtD,IAAA,MAAA,CAAO,mBAAA,CAAoB,YAAA,EAAc,IAAA,CAAK,YAAY,CAAA;AAC1D,IAAA,MAAA,CAAO,mBAAA,CAAoB,WAAA,EAAa,IAAA,CAAK,WAAW,CAAA;AACxD,IAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AAAA,EACxB;AAAA,EAgBQ,eAAA,GAAwB;AAC5B,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAA,EAAY,IAAA,CAAK,UAAU,CAAA;AACnD,IAAA,MAAA,CAAO,gBAAA,CAAiB,YAAA,EAAc,IAAA,CAAK,YAAY,CAAA;AACvD,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAA,EAAa,IAAA,CAAK,WAAW,CAAA;AAAA,EACzD;AAAA;AAAA,EAIQ,YAAA,GAAqB;AACzB,IAAA,MAAM,KAAA,GAAQ,CAAC,QAAA,KACX,SAAA,GAA4B,IAAA,EAA4C;AACpE,MAAA,QAAA,CAAS,KAAA,CAAM,MAAM,IAAI,CAAA;AACzB,MAAA,MAAA,CAAO,aAAA,CAAc,IAAI,KAAA,CAAM,WAAW,CAAC,CAAA;AAAA,IAC/C,CAAA;AAEJ,IAAA,OAAA,CAAQ,SAAA,GAAY,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA;AAC3C,IAAA,OAAA,CAAQ,YAAA,GAAe,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA;AAAA,EACrD;AAAA;AAAA,EAIQ,MAAA,GAAe;AACnB,IAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,MAAA,CAAO,SAAS,IAAI,CAAA;AAEzC,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM;AAErC,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAEf,IAAA,KAAA,MAAW,OAAA,IAAW,KAAK,QAAA,EAAU;AACjC,MAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AAAA,IACxB;AAAA,EACJ;AACJ;AA3Ea,eAAA,GAAN,eAAA,CAAA;AAAA,EAJN,QAAQ,MAAA,CAAO;AAAA,IACZ,SAAA,EAAW,YAAA;AAAA,IACX,WAAA,EAAa;AAAA,GAChB;AAAA,CAAA,EACY,eAAA,CAAA","file":"AreRouteWatcher.component.mjs","sourcesContent":["import { A_Component } from \"@adaas/a-concept\";\nimport { A_Frame } from \"@adaas/a-frame/core\";\n\n@A_Frame.Define({\n    namespace: 'a-are-html',\n    description: 'AreRouteWatcher is a component that observes browser navigation events (history pushState, replaceState, and popstate) and notifies registered handlers when the URL changes, enabling client-side routing and reactive route-based rendering within the ARE framework.'\n})\nexport class AreRouteWatcher extends A_Component {\n\n    private readonly handlers: Set<(url: URL) => void> = new Set();\n    private current: URL = new URL(window.location.href);\n\n    constructor() {\n        super();\n        this.patchHistory();\n        this.attachListeners();\n    }\n\n    // ── Public ────────────────────────────────────────────────────────────────\n\n    onChange(handler: (url: URL) => void): () => void {\n        this.handlers.add(handler);\n        return () => this.handlers.delete(handler);   // returns unsubscribe fn\n    }\n\n    get url(): URL {\n        return this.current;\n    }\n\n    destroy(): void {\n        window.removeEventListener('popstate', this.onPopState);\n        window.removeEventListener('hashchange', this.onHashChange);\n        window.removeEventListener('urlchange', this.onURLChange);\n        this.handlers.clear();\n    }\n\n    // ── Listeners ─────────────────────────────────────────────────────────────\n\n    private onPopState = (): void => {\n        this.notify();\n    }\n\n    private onHashChange = (): void => {\n        this.notify();\n    }\n\n    private onURLChange = (): void => {\n        this.notify();\n    }\n\n    private attachListeners(): void {\n        window.addEventListener('popstate', this.onPopState);\n        window.addEventListener('hashchange', this.onHashChange);\n        window.addEventListener('urlchange', this.onURLChange);   // custom event from patch\n    }\n\n    // ── Patch pushState / replaceState ────────────────────────────────────────\n\n    private patchHistory(): void {\n        const patch = (original: typeof history.pushState) =>\n            function (this: History, ...args: Parameters<typeof history.pushState>) {\n                original.apply(this, args);\n                window.dispatchEvent(new Event('urlchange'));\n            };\n\n        history.pushState = patch(history.pushState);\n        history.replaceState = patch(history.replaceState);\n    }\n\n    // ── Notify ────────────────────────────────────────────────────────────────\n\n    private notify(): void {\n        const next = new URL(window.location.href);\n\n        if (next.href === this.current.href) return;   // no actual change\n\n        this.current = next;\n\n        for (const handler of this.handlers) {\n            handler(this.current);\n        }\n    }\n}"]}