ctt-babylon 0.21.65 → 0.22.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.
@@ -0,0 +1,63 @@
1
+ export class UtilsLinkDirective {
2
+ /**
3
+ * Navega a la base de la URL si es diferente y luego hace scroll al anchor extraído del hash.
4
+ * Usa MutationObserver para detectar el anchor de forma eficiente tras la navegación.
5
+ */
6
+ static navigateAndScrollToAnchor(router, urlWithHash, offset = 0, callback) {
7
+ if (typeof window === 'undefined' || !urlWithHash)
8
+ return;
9
+ let id = urlWithHash;
10
+ let baseUrl = '';
11
+ if (urlWithHash.includes('#')) {
12
+ const hashIndex = urlWithHash.lastIndexOf('#');
13
+ id = urlWithHash.substring(hashIndex + 1);
14
+ baseUrl = urlWithHash.substring(0, hashIndex);
15
+ }
16
+ const currentUrl = router.url?.split('#')[0] || '';
17
+ if (baseUrl && baseUrl !== currentUrl) {
18
+ router.navigateByUrl(baseUrl).then(() => {
19
+ const timeoutMs = 3000;
20
+ let done = false;
21
+ const scrollToAnchor = () => {
22
+ if (done)
23
+ return;
24
+ const element = document.getElementById(id);
25
+ if (element) {
26
+ done = true;
27
+ observer.disconnect();
28
+ clearTimeout(timeoutId);
29
+ const y = element.getBoundingClientRect().top +
30
+ window.scrollY +
31
+ offset;
32
+ window.scrollTo({ top: y, behavior: 'smooth' });
33
+ if (callback)
34
+ callback();
35
+ }
36
+ };
37
+ // MutationObserver para detectar cuando el anchor aparece
38
+ const observer = new MutationObserver(scrollToAnchor);
39
+ observer.observe(document.body, { childList: true, subtree: true });
40
+ // Fallback por timeout
41
+ const timeoutId = setTimeout(() => {
42
+ if (!done) {
43
+ observer.disconnect();
44
+ }
45
+ }, timeoutMs);
46
+ // Intento inicial
47
+ scrollToAnchor();
48
+ });
49
+ }
50
+ else {
51
+ const element = document.getElementById(id);
52
+ if (element) {
53
+ const y = element.getBoundingClientRect().top +
54
+ window.scrollY +
55
+ offset;
56
+ window.scrollTo({ top: y, behavior: 'smooth' });
57
+ if (callback)
58
+ callback();
59
+ }
60
+ }
61
+ }
62
+ }
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtbGluay1kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvdXRpbHMvdXRpbHMtbGluay1kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxPQUFPLGtCQUFrQjtJQUU3Qjs7O1NBR0s7SUFDSCxNQUFNLENBQUMseUJBQXlCLENBQzVCLE1BQVcsRUFDWCxXQUFtQixFQUNuQixTQUFpQixDQUFDLEVBQ2xCLFFBQXFCO1FBRXJCLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFFMUQsSUFBSSxFQUFFLEdBQUcsV0FBVyxDQUFDO1FBQ3JCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDM0IsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvQyxFQUFFLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ2pEO1FBQ0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25ELElBQUksT0FBTyxJQUFJLE9BQU8sS0FBSyxVQUFVLEVBQUU7WUFDbkMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQztnQkFDakIsTUFBTSxjQUFjLEdBQUcsR0FBRyxFQUFFO29CQUN4QixJQUFJLElBQUk7d0JBQUUsT0FBTztvQkFDakIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDNUMsSUFBSSxPQUFPLEVBQUU7d0JBQ1QsSUFBSSxHQUFHLElBQUksQ0FBQzt3QkFDWixRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7d0JBQ3RCLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQzt3QkFDeEIsTUFBTSxDQUFDLEdBQ0gsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUMsR0FBRzs0QkFDbkMsTUFBTSxDQUFDLE9BQU87NEJBQ2QsTUFBTSxDQUFDO3dCQUNYLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO3dCQUNoRCxJQUFJLFFBQVE7NEJBQUUsUUFBUSxFQUFFLENBQUM7cUJBQzVCO2dCQUNMLENBQUMsQ0FBQztnQkFDRiwwREFBMEQ7Z0JBQzFELE1BQU0sUUFBUSxHQUFHLElBQUksZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3RELFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3BFLHVCQUF1QjtnQkFDdkIsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDOUIsSUFBSSxDQUFDLElBQUksRUFBRTt3QkFDUCxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7cUJBQ3pCO2dCQUNMLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDZCxrQkFBa0I7Z0JBQ2xCLGNBQWMsRUFBRSxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1NBQ047YUFBTTtZQUNILE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUMsSUFBSSxPQUFPLEVBQUU7Z0JBQ1QsTUFBTSxDQUFDLEdBQ0gsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUMsR0FBRztvQkFDbkMsTUFBTSxDQUFDLE9BQU87b0JBQ2QsTUFBTSxDQUFDO2dCQUNYLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLFFBQVE7b0JBQUUsUUFBUSxFQUFFLENBQUM7YUFDNUI7U0FDSjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQmFieWxvbkJ1dHRvbkksIEJvZHlDb21wb25lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIFV0aWxzTGlua0RpcmVjdGl2ZSB7XG5cbiAgLyoqXG4gICAgICogTmF2ZWdhIGEgbGEgYmFzZSBkZSBsYSBVUkwgc2kgZXMgZGlmZXJlbnRlIHkgbHVlZ28gaGFjZSBzY3JvbGwgYWwgYW5jaG9yIGV4dHJhw61kbyBkZWwgaGFzaC5cbiAgICAgKiBVc2EgTXV0YXRpb25PYnNlcnZlciBwYXJhIGRldGVjdGFyIGVsIGFuY2hvciBkZSBmb3JtYSBlZmljaWVudGUgdHJhcyBsYSBuYXZlZ2FjacOzbi5cbiAgICAgKi9cbiAgICBzdGF0aWMgbmF2aWdhdGVBbmRTY3JvbGxUb0FuY2hvcihcbiAgICAgICAgcm91dGVyOiBhbnksXG4gICAgICAgIHVybFdpdGhIYXNoOiBzdHJpbmcsXG4gICAgICAgIG9mZnNldDogbnVtYmVyID0gMCxcbiAgICAgICAgY2FsbGJhY2s/OiAoKSA9PiB2b2lkXG4gICAgKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhdXJsV2l0aEhhc2gpIHJldHVybjtcblxuICAgICAgICBsZXQgaWQgPSB1cmxXaXRoSGFzaDtcbiAgICAgICAgbGV0IGJhc2VVcmwgPSAnJztcbiAgICAgICAgaWYgKHVybFdpdGhIYXNoLmluY2x1ZGVzKCcjJykpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc2hJbmRleCA9IHVybFdpdGhIYXNoLmxhc3RJbmRleE9mKCcjJyk7XG4gICAgICAgICAgICBpZCA9IHVybFdpdGhIYXNoLnN1YnN0cmluZyhoYXNoSW5kZXggKyAxKTtcbiAgICAgICAgICAgIGJhc2VVcmwgPSB1cmxXaXRoSGFzaC5zdWJzdHJpbmcoMCwgaGFzaEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50VXJsID0gcm91dGVyLnVybD8uc3BsaXQoJyMnKVswXSB8fCAnJztcbiAgICAgICAgaWYgKGJhc2VVcmwgJiYgYmFzZVVybCAhPT0gY3VycmVudFVybCkge1xuICAgICAgICAgICAgcm91dGVyLm5hdmlnYXRlQnlVcmwoYmFzZVVybCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZW91dE1zID0gMzAwMDtcbiAgICAgICAgICAgICAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbFRvQW5jaG9yID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsWSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiB5LCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIC8vIE11dGF0aW9uT2JzZXJ2ZXIgcGFyYSBkZXRlY3RhciBjdWFuZG8gZWwgYW5jaG9yIGFwYXJlY2VcbiAgICAgICAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHNjcm9sbFRvQW5jaG9yKTtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHBvciB0aW1lb3V0XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgdGltZW91dE1zKTtcbiAgICAgICAgICAgICAgICAvLyBJbnRlbnRvIGluaWNpYWxcbiAgICAgICAgICAgICAgICBzY3JvbGxUb0FuY2hvcigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB5ID1cbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgK1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsWSArXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDtcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IHksIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=