@trebired/frontend 19.1.0 → 19.2.1
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.
- package/CHANGELOG.md +10 -0
- package/dist/layout/components/site/header.d.ts.map +1 -1
- package/dist/layout/components/site/header.js +26 -6
- package/dist/layout/components/site/header.js.map +1 -1
- package/dist/layout/components/site/section_spy.d.ts +7 -0
- package/dist/layout/components/site/section_spy.d.ts.map +1 -0
- package/dist/layout/components/site/section_spy.js +76 -0
- package/dist/layout/components/site/section_spy.js.map +1 -0
- package/dist/src/layout/components/site/header.d.ts.map +1 -1
- package/dist/src/layout/components/site/header.js +26 -6
- package/dist/src/layout/components/site/header.js.map +1 -1
- package/dist/src/layout/components/site/section_spy.d.ts +7 -0
- package/dist/src/layout/components/site/section_spy.d.ts.map +1 -0
- package/dist/src/layout/components/site/section_spy.js +76 -0
- package/dist/src/layout/components/site/section_spy.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 19.2.1
|
|
4
|
+
|
|
5
|
+
- The marked section is the one nearest the reading line from above, rather than the last matching entry in the menu. A menu does not have to list sections in the order the page lays them out, and machynka's does not: walking the menu handed the mark to whichever section happened to come last, so standing in one section marked another.
|
|
6
|
+
|
|
7
|
+
## 19.2.0
|
|
8
|
+
|
|
9
|
+
- The header follows sections, not only pages. A link to a fragment on the current page, `/cs#ubytovani`, is marked while the reader is in that section, and the link to the page itself yields to it: both describe where the reader is and only the narrower one is worth marking. Scrolling on moves the mark to the next section, and above the first one no fragment owns it, so the page link takes it back. Exactly one link is ever marked.
|
|
10
|
+
- The section is read from the document, never written to it. The url only changes when someone clicks, so scrolling does not fill the history with fragments or fight the back button.
|
|
11
|
+
- The server marks the page link, since it has no scroll position, and the browser takes over on hydration through `useSyncExternalStore`, which is the one path React resolves without an unpatched attribute mismatch.
|
|
12
|
+
|
|
3
13
|
## 19.1.0
|
|
4
14
|
|
|
5
15
|
- A `Frame` that opens a `Card` bleeds to the card's edges. Media at the top of a card belongs against the edge, but the card's padding was insetting it, leaving a band of card background framing the image on all three sides. It now pulls out by the card's own padding and rounds only its top corners to match. A frame anywhere else in the card is untouched.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../../../src/layout/components/site/header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAc,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../../../src/layout/components/site/header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAc,SAAS,EAAE,MAAM,OAAO,CAAC;AASnE,KAAK,cAAc,GAAG;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,iBAAiB,GAAG,OAAO,GAAG,aAAa,GAAG,SAAS,CAAC;AAE7D,KAAK,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,GAAG;IACrE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B,CAAC;AAyKF,iBAAS,UAAU,CAAC,KAAK,EAAE,eAAe,+BAmCzC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { createElement as _createElement } from "react";
|
|
3
|
-
import { useId } from "react";
|
|
3
|
+
import { useEffect, useId, useSyncExternalStore } from "react";
|
|
4
4
|
import { classNames } from "../../../components/index.js";
|
|
5
5
|
import { frontendClassName, frontendDataAttrs, frontendElementClass } from "../../../namespace/index.js";
|
|
6
6
|
import { useSiteHeaderMenu } from "./header_state.js";
|
|
7
|
+
import { activeSection, observeSections, serverActiveSection, subscribeActiveSection } from "./section_spy.js";
|
|
7
8
|
import { stripLocalePrefix } from "./../../../language/routing/runtime.js";
|
|
8
9
|
import { useRenderCurrentUrl } from "./../../../render/current_url.js";
|
|
9
10
|
const block = "site-header";
|
|
@@ -22,13 +23,23 @@ function pathMatches(currentPath, target) {
|
|
|
22
23
|
return currentPath === "/";
|
|
23
24
|
return currentPath === target || currentPath.startsWith(`${target}/`);
|
|
24
25
|
}
|
|
25
|
-
function
|
|
26
|
+
function linkFragment(link) {
|
|
27
|
+
const [, fragment = ""] = String(link.href || "").split("#");
|
|
28
|
+
return fragment;
|
|
29
|
+
}
|
|
30
|
+
function linkOnCurrentPage(link, currentPaths) {
|
|
31
|
+
const targets = headerPathForms(link.href);
|
|
32
|
+
return currentPaths.some((current) => targets.some((target) => pathMatches(current, target)));
|
|
33
|
+
}
|
|
34
|
+
function linkIsActive(link, currentPaths, section, hasSection) {
|
|
26
35
|
if (link.active !== undefined)
|
|
27
36
|
return link.active;
|
|
28
|
-
|
|
37
|
+
const fragment = linkFragment(link);
|
|
38
|
+
if (fragment)
|
|
39
|
+
return Boolean(section) && fragment === section && linkOnCurrentPage(link, currentPaths);
|
|
40
|
+
if (hasSection && section)
|
|
29
41
|
return false;
|
|
30
|
-
|
|
31
|
-
return currentPaths.some((current) => targets.some((target) => pathMatches(current, target)));
|
|
42
|
+
return linkOnCurrentPage(link, currentPaths);
|
|
32
43
|
}
|
|
33
44
|
function linkAttrs(active, link, softRedirect) {
|
|
34
45
|
return {
|
|
@@ -38,7 +49,16 @@ function linkAttrs(active, link, softRedirect) {
|
|
|
38
49
|
}
|
|
39
50
|
function SiteHeaderLinks(props) {
|
|
40
51
|
const currentPaths = headerPathForms(useRenderCurrentUrl());
|
|
41
|
-
|
|
52
|
+
const fragments = props.links
|
|
53
|
+
.filter((link) => linkFragment(link) && linkOnCurrentPage(link, currentPaths))
|
|
54
|
+
.map((link) => linkFragment(link));
|
|
55
|
+
const fragmentKey = fragments.join("|");
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
observeSections(fragmentKey ? fragmentKey.split("|") : []);
|
|
58
|
+
}, [fragmentKey]);
|
|
59
|
+
const section = useSyncExternalStore(subscribeActiveSection, activeSection, serverActiveSection);
|
|
60
|
+
const hasSection = fragments.length > 0;
|
|
61
|
+
return (_jsx(_Fragment, { children: props.links.map((link) => (_createElement("a", { ...linkAttrs(linkIsActive(link, currentPaths, section, hasSection), link, props.softRedirect), className: classNames(frontendElementClass(block, props.element), linkIsActive(link, currentPaths, section, hasSection) ? `${frontendElementClass(block, props.element)}--active` : ""), href: link.href, key: link.key || link.href, onClick: props.onNavigate, tabIndex: props.tabIndex }, link.label))) }));
|
|
42
62
|
}
|
|
43
63
|
function closeOnLink(event, close) {
|
|
44
64
|
if (event.target instanceof Element && event.target.closest("a[href]"))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../../../src/layout/components/site/header.tsx"],"names":[],"mappings":";;AACA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../../../src/layout/components/site/header.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type SectionListener = () => void;
|
|
2
|
+
declare function observeSections(ids: readonly string[]): void;
|
|
3
|
+
declare function subscribeActiveSection(listener: SectionListener): () => void;
|
|
4
|
+
declare function activeSection(): string;
|
|
5
|
+
declare function serverActiveSection(): string;
|
|
6
|
+
export { activeSection, observeSections, serverActiveSection, subscribeActiveSection };
|
|
7
|
+
//# sourceMappingURL=section_spy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section_spy.d.ts","sourceRoot":"","sources":["../../../../../src/layout/components/site/section_spy.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG,MAAM,IAAI,CAAC;AAsDlC,iBAAS,eAAe,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,QAO9C;AAED,iBAAS,sBAAsB,CAAC,QAAQ,EAAE,eAAe,cAKxD;AAED,iBAAS,aAAa,WAErB;AAED,iBAAS,mBAAmB,WAE3B;AAED,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
const listeners = new Set();
|
|
2
|
+
let observed = [];
|
|
3
|
+
let observer = null;
|
|
4
|
+
let active = "";
|
|
5
|
+
function notify(next) {
|
|
6
|
+
if (next === active)
|
|
7
|
+
return;
|
|
8
|
+
active = next;
|
|
9
|
+
for (const listener of listeners)
|
|
10
|
+
listener();
|
|
11
|
+
}
|
|
12
|
+
function resolveActive() {
|
|
13
|
+
if (typeof document === "undefined")
|
|
14
|
+
return "";
|
|
15
|
+
const line = Math.max(80, window.innerHeight * 0.3);
|
|
16
|
+
let current = "";
|
|
17
|
+
let nearest = -Infinity;
|
|
18
|
+
for (const id of observed) {
|
|
19
|
+
const element = document.getElementById(id);
|
|
20
|
+
if (!element)
|
|
21
|
+
continue;
|
|
22
|
+
const { top } = element.getBoundingClientRect();
|
|
23
|
+
if (top <= line && top > nearest) {
|
|
24
|
+
nearest = top;
|
|
25
|
+
current = id;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return current;
|
|
29
|
+
}
|
|
30
|
+
function measure() {
|
|
31
|
+
notify(resolveActive());
|
|
32
|
+
}
|
|
33
|
+
function stop() {
|
|
34
|
+
observer?.disconnect();
|
|
35
|
+
observer = null;
|
|
36
|
+
if (typeof window === "undefined")
|
|
37
|
+
return;
|
|
38
|
+
window.removeEventListener("scroll", measure);
|
|
39
|
+
window.removeEventListener("resize", measure);
|
|
40
|
+
}
|
|
41
|
+
function start() {
|
|
42
|
+
if (typeof window === "undefined" || !observed.length)
|
|
43
|
+
return;
|
|
44
|
+
window.addEventListener("scroll", measure, { passive: true });
|
|
45
|
+
window.addEventListener("resize", measure, { passive: true });
|
|
46
|
+
observer = new IntersectionObserver(measure, { threshold: [0, 1] });
|
|
47
|
+
for (const id of observed) {
|
|
48
|
+
const element = document.getElementById(id);
|
|
49
|
+
if (element)
|
|
50
|
+
observer.observe(element);
|
|
51
|
+
}
|
|
52
|
+
measure();
|
|
53
|
+
}
|
|
54
|
+
function observeSections(ids) {
|
|
55
|
+
const next = [...new Set(ids.filter(Boolean))];
|
|
56
|
+
if (next.join("|") === observed.join("|"))
|
|
57
|
+
return;
|
|
58
|
+
stop();
|
|
59
|
+
observed = next;
|
|
60
|
+
active = "";
|
|
61
|
+
start();
|
|
62
|
+
}
|
|
63
|
+
function subscribeActiveSection(listener) {
|
|
64
|
+
listeners.add(listener);
|
|
65
|
+
return () => {
|
|
66
|
+
listeners.delete(listener);
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function activeSection() {
|
|
70
|
+
return active;
|
|
71
|
+
}
|
|
72
|
+
function serverActiveSection() {
|
|
73
|
+
return "";
|
|
74
|
+
}
|
|
75
|
+
export { activeSection, observeSections, serverActiveSection, subscribeActiveSection };
|
|
76
|
+
//# sourceMappingURL=section_spy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section_spy.js","sourceRoot":"","sources":["../../../../../src/layout/components/site/section_spy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../../../src/layout/components/site/header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAc,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../../../src/layout/components/site/header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAc,SAAS,EAAE,MAAM,OAAO,CAAC;AASnE,KAAK,cAAc,GAAG;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,iBAAiB,GAAG,OAAO,GAAG,aAAa,GAAG,SAAS,CAAC;AAE7D,KAAK,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,GAAG;IACrE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B,CAAC;AAyKF,iBAAS,UAAU,CAAC,KAAK,EAAE,eAAe,+BAmCzC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { createElement as _createElement } from "react";
|
|
3
|
-
import { useId } from "react";
|
|
3
|
+
import { useEffect, useId, useSyncExternalStore } from "react";
|
|
4
4
|
import { classNames } from "../../../../components/index.js";
|
|
5
5
|
import { frontendClassName, frontendDataAttrs, frontendElementClass } from "../../../../namespace/index.js";
|
|
6
6
|
import { useSiteHeaderMenu } from "./header_state.js";
|
|
7
|
+
import { activeSection, observeSections, serverActiveSection, subscribeActiveSection } from "./section_spy.js";
|
|
7
8
|
import { stripLocalePrefix } from "./../../../language/routing/runtime.js";
|
|
8
9
|
import { useRenderCurrentUrl } from "./../../../render/current_url.js";
|
|
9
10
|
const block = "site-header";
|
|
@@ -22,13 +23,23 @@ function pathMatches(currentPath, target) {
|
|
|
22
23
|
return currentPath === "/";
|
|
23
24
|
return currentPath === target || currentPath.startsWith(`${target}/`);
|
|
24
25
|
}
|
|
25
|
-
function
|
|
26
|
+
function linkFragment(link) {
|
|
27
|
+
const [, fragment = ""] = String(link.href || "").split("#");
|
|
28
|
+
return fragment;
|
|
29
|
+
}
|
|
30
|
+
function linkOnCurrentPage(link, currentPaths) {
|
|
31
|
+
const targets = headerPathForms(link.href);
|
|
32
|
+
return currentPaths.some((current) => targets.some((target) => pathMatches(current, target)));
|
|
33
|
+
}
|
|
34
|
+
function linkIsActive(link, currentPaths, section, hasSection) {
|
|
26
35
|
if (link.active !== undefined)
|
|
27
36
|
return link.active;
|
|
28
|
-
|
|
37
|
+
const fragment = linkFragment(link);
|
|
38
|
+
if (fragment)
|
|
39
|
+
return Boolean(section) && fragment === section && linkOnCurrentPage(link, currentPaths);
|
|
40
|
+
if (hasSection && section)
|
|
29
41
|
return false;
|
|
30
|
-
|
|
31
|
-
return currentPaths.some((current) => targets.some((target) => pathMatches(current, target)));
|
|
42
|
+
return linkOnCurrentPage(link, currentPaths);
|
|
32
43
|
}
|
|
33
44
|
function linkAttrs(active, link, softRedirect) {
|
|
34
45
|
return {
|
|
@@ -38,7 +49,16 @@ function linkAttrs(active, link, softRedirect) {
|
|
|
38
49
|
}
|
|
39
50
|
function SiteHeaderLinks(props) {
|
|
40
51
|
const currentPaths = headerPathForms(useRenderCurrentUrl());
|
|
41
|
-
|
|
52
|
+
const fragments = props.links
|
|
53
|
+
.filter((link) => linkFragment(link) && linkOnCurrentPage(link, currentPaths))
|
|
54
|
+
.map((link) => linkFragment(link));
|
|
55
|
+
const fragmentKey = fragments.join("|");
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
observeSections(fragmentKey ? fragmentKey.split("|") : []);
|
|
58
|
+
}, [fragmentKey]);
|
|
59
|
+
const section = useSyncExternalStore(subscribeActiveSection, activeSection, serverActiveSection);
|
|
60
|
+
const hasSection = fragments.length > 0;
|
|
61
|
+
return (_jsx(_Fragment, { children: props.links.map((link) => (_createElement("a", { ...linkAttrs(linkIsActive(link, currentPaths, section, hasSection), link, props.softRedirect), className: classNames(frontendElementClass(block, props.element), linkIsActive(link, currentPaths, section, hasSection) ? `${frontendElementClass(block, props.element)}--active` : ""), href: link.href, key: link.key || link.href, onClick: props.onNavigate, tabIndex: props.tabIndex }, link.label))) }));
|
|
42
62
|
}
|
|
43
63
|
function closeOnLink(event, close) {
|
|
44
64
|
if (event.target instanceof Element && event.target.closest("a[href]"))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../../../src/layout/components/site/header.tsx"],"names":[],"mappings":";;AACA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../../../src/layout/components/site/header.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type SectionListener = () => void;
|
|
2
|
+
declare function observeSections(ids: readonly string[]): void;
|
|
3
|
+
declare function subscribeActiveSection(listener: SectionListener): () => void;
|
|
4
|
+
declare function activeSection(): string;
|
|
5
|
+
declare function serverActiveSection(): string;
|
|
6
|
+
export { activeSection, observeSections, serverActiveSection, subscribeActiveSection };
|
|
7
|
+
//# sourceMappingURL=section_spy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section_spy.d.ts","sourceRoot":"","sources":["../../../../../src/layout/components/site/section_spy.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG,MAAM,IAAI,CAAC;AAsDlC,iBAAS,eAAe,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,QAO9C;AAED,iBAAS,sBAAsB,CAAC,QAAQ,EAAE,eAAe,cAKxD;AAED,iBAAS,aAAa,WAErB;AAED,iBAAS,mBAAmB,WAE3B;AAED,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
const listeners = new Set();
|
|
2
|
+
let observed = [];
|
|
3
|
+
let observer = null;
|
|
4
|
+
let active = "";
|
|
5
|
+
function notify(next) {
|
|
6
|
+
if (next === active)
|
|
7
|
+
return;
|
|
8
|
+
active = next;
|
|
9
|
+
for (const listener of listeners)
|
|
10
|
+
listener();
|
|
11
|
+
}
|
|
12
|
+
function resolveActive() {
|
|
13
|
+
if (typeof document === "undefined")
|
|
14
|
+
return "";
|
|
15
|
+
const line = Math.max(80, window.innerHeight * 0.3);
|
|
16
|
+
let current = "";
|
|
17
|
+
let nearest = -Infinity;
|
|
18
|
+
for (const id of observed) {
|
|
19
|
+
const element = document.getElementById(id);
|
|
20
|
+
if (!element)
|
|
21
|
+
continue;
|
|
22
|
+
const { top } = element.getBoundingClientRect();
|
|
23
|
+
if (top <= line && top > nearest) {
|
|
24
|
+
nearest = top;
|
|
25
|
+
current = id;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return current;
|
|
29
|
+
}
|
|
30
|
+
function measure() {
|
|
31
|
+
notify(resolveActive());
|
|
32
|
+
}
|
|
33
|
+
function stop() {
|
|
34
|
+
observer?.disconnect();
|
|
35
|
+
observer = null;
|
|
36
|
+
if (typeof window === "undefined")
|
|
37
|
+
return;
|
|
38
|
+
window.removeEventListener("scroll", measure);
|
|
39
|
+
window.removeEventListener("resize", measure);
|
|
40
|
+
}
|
|
41
|
+
function start() {
|
|
42
|
+
if (typeof window === "undefined" || !observed.length)
|
|
43
|
+
return;
|
|
44
|
+
window.addEventListener("scroll", measure, { passive: true });
|
|
45
|
+
window.addEventListener("resize", measure, { passive: true });
|
|
46
|
+
observer = new IntersectionObserver(measure, { threshold: [0, 1] });
|
|
47
|
+
for (const id of observed) {
|
|
48
|
+
const element = document.getElementById(id);
|
|
49
|
+
if (element)
|
|
50
|
+
observer.observe(element);
|
|
51
|
+
}
|
|
52
|
+
measure();
|
|
53
|
+
}
|
|
54
|
+
function observeSections(ids) {
|
|
55
|
+
const next = [...new Set(ids.filter(Boolean))];
|
|
56
|
+
if (next.join("|") === observed.join("|"))
|
|
57
|
+
return;
|
|
58
|
+
stop();
|
|
59
|
+
observed = next;
|
|
60
|
+
active = "";
|
|
61
|
+
start();
|
|
62
|
+
}
|
|
63
|
+
function subscribeActiveSection(listener) {
|
|
64
|
+
listeners.add(listener);
|
|
65
|
+
return () => {
|
|
66
|
+
listeners.delete(listener);
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function activeSection() {
|
|
70
|
+
return active;
|
|
71
|
+
}
|
|
72
|
+
function serverActiveSection() {
|
|
73
|
+
return "";
|
|
74
|
+
}
|
|
75
|
+
export { activeSection, observeSections, serverActiveSection, subscribeActiveSection };
|
|
76
|
+
//# sourceMappingURL=section_spy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section_spy.js","sourceRoot":"","sources":["../../../../../src/layout/components/site/section_spy.ts"],"names":[],"mappings":"AAEA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAmB,CAAC;AAC7C,IAAI,QAAQ,GAAa,EAAE,CAAC;AAC5B,IAAI,QAAQ,GAAgC,IAAI,CAAC;AACjD,IAAI,MAAM,GAAG,EAAE,CAAC;AAEhB,SAAS,MAAM,CAAC,IAAY;IAC1B,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO;IAC5B,MAAM,GAAG,IAAI,CAAC;IACd,KAAK,MAAM,QAAQ,IAAI,SAAS;QAAE,QAAQ,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,aAAa;IACpB,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC;IACpD,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,OAAO,GAAG,CAAC,QAAQ,CAAC;IACxB,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAChD,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,OAAO,EAAE,CAAC;YACjC,OAAO,GAAG,GAAG,CAAC;YACd,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,OAAO;IACd,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,IAAI;IACX,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,QAAQ,GAAG,IAAI,CAAC;IAChB,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO;IAC1C,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,KAAK;IACZ,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO;IAC9D,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,QAAQ,GAAG,IAAI,oBAAoB,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACpE,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,OAAO;YAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,eAAe,CAAC,GAAsB;IAC7C,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/C,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO;IAClD,IAAI,EAAE,CAAC;IACP,QAAQ,GAAG,IAAI,CAAC;IAChB,MAAM,GAAG,EAAE,CAAC;IACZ,KAAK,EAAE,CAAC;AACV,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAyB;IACvD,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,OAAO,GAAG,EAAE;QACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,CAAC"}
|