@trebired/frontend 12.14.2 → 12.16.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/.trebired/bundler/config.ts +1 -1
- package/CHANGELOG.md +19 -0
- package/dist/config/scss.d.ts.map +1 -1
- package/dist/config/scss.js +1 -0
- package/dist/config/scss.js.map +1 -1
- package/dist/config/types.d.ts +1 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/language/index.d.ts +1 -0
- package/dist/language/index.d.ts.map +1 -1
- package/dist/language/index.js +1 -0
- package/dist/language/index.js.map +1 -1
- package/dist/language/messages.d.ts.map +1 -1
- package/dist/language/messages.js +14 -0
- package/dist/language/messages.js.map +1 -1
- package/dist/language/routing/boot.d.ts +4 -0
- package/dist/language/routing/boot.d.ts.map +1 -0
- package/dist/language/routing/boot.js +42 -0
- package/dist/language/routing/boot.js.map +1 -0
- package/dist/language/routing/index.d.ts +8 -0
- package/dist/language/routing/index.d.ts.map +1 -0
- package/dist/language/routing/index.js +5 -0
- package/dist/language/routing/index.js.map +1 -0
- package/dist/language/routing/options.d.ts +18 -0
- package/dist/language/routing/options.d.ts.map +1 -0
- package/dist/language/routing/options.js +34 -0
- package/dist/language/routing/options.js.map +1 -0
- package/dist/language/routing/path.d.ts +20 -0
- package/dist/language/routing/path.d.ts.map +1 -0
- package/dist/language/routing/path.js +43 -0
- package/dist/language/routing/path.js.map +1 -0
- package/dist/language/routing/runtime.d.ts +12 -0
- package/dist/language/routing/runtime.d.ts.map +1 -0
- package/dist/language/routing/runtime.js +51 -0
- package/dist/language/routing/runtime.js.map +1 -0
- package/dist/media/carousel-state.d.ts +13 -0
- package/dist/media/carousel-state.d.ts.map +1 -0
- package/dist/media/carousel-state.js +41 -0
- package/dist/media/carousel-state.js.map +1 -0
- package/dist/media/carousel.d.ts +16 -0
- package/dist/media/carousel.d.ts.map +1 -0
- package/dist/media/carousel.js +18 -0
- package/dist/media/carousel.js.map +1 -0
- package/dist/media/expandable-image.d.ts +13 -0
- package/dist/media/expandable-image.d.ts.map +1 -0
- package/dist/media/expandable-image.js +21 -0
- package/dist/media/expandable-image.js.map +1 -0
- package/dist/media/focus-trap.d.ts +5 -0
- package/dist/media/focus-trap.d.ts.map +1 -0
- package/dist/media/focus-trap.js +41 -0
- package/dist/media/focus-trap.js.map +1 -0
- package/dist/media/gallery-state.d.ts +14 -0
- package/dist/media/gallery-state.d.ts.map +1 -0
- package/dist/media/gallery-state.js +26 -0
- package/dist/media/gallery-state.js.map +1 -0
- package/dist/media/index.d.ts +13 -10
- package/dist/media/index.d.ts.map +1 -1
- package/dist/media/index.js +7 -28
- package/dist/media/index.js.map +1 -1
- package/dist/media/lightbox.d.ts +16 -0
- package/dist/media/lightbox.d.ts.map +1 -0
- package/dist/media/lightbox.js +57 -0
- package/dist/media/lightbox.js.map +1 -0
- package/dist/media/map-embed.d.ts +9 -0
- package/dist/media/map-embed.d.ts.map +1 -0
- package/dist/media/map-embed.js +6 -0
- package/dist/media/map-embed.js.map +1 -0
- package/dist/media/scroll-lock.d.ts +3 -0
- package/dist/media/scroll-lock.d.ts.map +1 -0
- package/dist/media/scroll-lock.js +22 -0
- package/dist/media/scroll-lock.js.map +1 -0
- package/dist/media/styles/carousel.scss +79 -0
- package/dist/media/styles/index.scss +2 -0
- package/dist/media/styles/lightbox.scss +173 -0
- package/dist/react/index.d.ts +4 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +2 -0
- package/dist/react/index.js.map +1 -1
- package/dist/react/locale.d.ts +15 -0
- package/dist/react/locale.d.ts.map +1 -0
- package/dist/react/locale.js +19 -0
- package/dist/react/locale.js.map +1 -0
- package/dist/src/config/scss.d.ts.map +1 -1
- package/dist/src/config/scss.js +1 -0
- package/dist/src/config/scss.js.map +1 -1
- package/dist/src/config/types.d.ts +1 -1
- package/dist/src/config/types.d.ts.map +1 -1
- package/dist/src/language/index.d.ts +1 -0
- package/dist/src/language/index.d.ts.map +1 -1
- package/dist/src/language/index.js +1 -0
- package/dist/src/language/index.js.map +1 -1
- package/dist/src/language/messages.d.ts.map +1 -1
- package/dist/src/language/messages.js +14 -0
- package/dist/src/language/messages.js.map +1 -1
- package/dist/src/language/routing/boot.d.ts +4 -0
- package/dist/src/language/routing/boot.d.ts.map +1 -0
- package/dist/src/language/routing/boot.js +42 -0
- package/dist/src/language/routing/boot.js.map +1 -0
- package/dist/src/language/routing/index.d.ts +8 -0
- package/dist/src/language/routing/index.d.ts.map +1 -0
- package/dist/src/language/routing/index.js +5 -0
- package/dist/src/language/routing/index.js.map +1 -0
- package/dist/src/language/routing/options.d.ts +18 -0
- package/dist/src/language/routing/options.d.ts.map +1 -0
- package/dist/src/language/routing/options.js +34 -0
- package/dist/src/language/routing/options.js.map +1 -0
- package/dist/src/language/routing/path.d.ts +20 -0
- package/dist/src/language/routing/path.d.ts.map +1 -0
- package/dist/src/language/routing/path.js +43 -0
- package/dist/src/language/routing/path.js.map +1 -0
- package/dist/src/language/routing/runtime.d.ts +12 -0
- package/dist/src/language/routing/runtime.d.ts.map +1 -0
- package/dist/src/language/routing/runtime.js +51 -0
- package/dist/src/language/routing/runtime.js.map +1 -0
- package/dist/src/media/carousel-state.d.ts +13 -0
- package/dist/src/media/carousel-state.d.ts.map +1 -0
- package/dist/src/media/carousel-state.js +41 -0
- package/dist/src/media/carousel-state.js.map +1 -0
- package/dist/src/media/carousel.d.ts +16 -0
- package/dist/src/media/carousel.d.ts.map +1 -0
- package/dist/src/media/carousel.js +18 -0
- package/dist/src/media/carousel.js.map +1 -0
- package/dist/src/media/expandable-image.d.ts +13 -0
- package/dist/src/media/expandable-image.d.ts.map +1 -0
- package/dist/src/media/expandable-image.js +21 -0
- package/dist/src/media/expandable-image.js.map +1 -0
- package/dist/src/media/focus-trap.d.ts +5 -0
- package/dist/src/media/focus-trap.d.ts.map +1 -0
- package/dist/src/media/focus-trap.js +41 -0
- package/dist/src/media/focus-trap.js.map +1 -0
- package/dist/src/media/gallery-state.d.ts +14 -0
- package/dist/src/media/gallery-state.d.ts.map +1 -0
- package/dist/src/media/gallery-state.js +26 -0
- package/dist/src/media/gallery-state.js.map +1 -0
- package/dist/src/media/index.d.ts +13 -10
- package/dist/src/media/index.d.ts.map +1 -1
- package/dist/src/media/index.js +7 -28
- package/dist/src/media/index.js.map +1 -1
- package/dist/src/media/lightbox.d.ts +16 -0
- package/dist/src/media/lightbox.d.ts.map +1 -0
- package/dist/src/media/lightbox.js +57 -0
- package/dist/src/media/lightbox.js.map +1 -0
- package/dist/src/media/map-embed.d.ts +9 -0
- package/dist/src/media/map-embed.d.ts.map +1 -0
- package/dist/src/media/map-embed.js +6 -0
- package/dist/src/media/map-embed.js.map +1 -0
- package/dist/src/media/scroll-lock.d.ts +3 -0
- package/dist/src/media/scroll-lock.d.ts.map +1 -0
- package/dist/src/media/scroll-lock.js +22 -0
- package/dist/src/media/scroll-lock.js.map +1 -0
- package/dist/src/react/index.d.ts +4 -0
- package/dist/src/react/index.d.ts.map +1 -1
- package/dist/src/react/index.js +2 -0
- package/dist/src/react/index.js.map +1 -1
- package/dist/src/react/locale.d.ts +15 -0
- package/dist/src/react/locale.d.ts.map +1 -0
- package/dist/src/react/locale.js +19 -0
- package/dist/src/react/locale.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Icon } from "../icons/react/index.js";
|
|
3
|
+
import { sourceLanguageMessage } from "../language/messages.js";
|
|
4
|
+
import { useCarouselState } from "./carousel-state.js";
|
|
5
|
+
const ICON_CHEVRON_LEFT = "remixicon:arrow-left-s-line";
|
|
6
|
+
const ICON_CHEVRON_RIGHT = "remixicon:arrow-right-s-line";
|
|
7
|
+
function Carousel(props) {
|
|
8
|
+
const slides = props.slides ?? [];
|
|
9
|
+
const state = useCarouselState(slides.length, props.intervalMs ?? 5000);
|
|
10
|
+
const label = (key, vars) => sourceLanguageMessage(key, props.lang, vars);
|
|
11
|
+
const showControls = props.controls !== false && slides.length > 1;
|
|
12
|
+
const showIndicators = props.indicators !== false && slides.length > 1;
|
|
13
|
+
if (!slides.length)
|
|
14
|
+
return null;
|
|
15
|
+
return (_jsxs("div", { className: ["tbf-carousel", props.className].filter(Boolean).join(" "), onBlur: state.onLeave, onFocus: state.onEnter, onMouseEnter: state.onEnter, onMouseLeave: state.onLeave, children: [slides.map((slide, index) => (_jsx("img", { alt: slide.alt ?? "", "aria-hidden": index === state.activeIndex ? undefined : "true", className: `tbf-carousel-slide${index === state.activeIndex ? " is-active" : ""}`, src: slide.src }, slide.src))), showControls && (_jsxs(_Fragment, { children: [_jsx("button", { "aria-label": label("mediaSlidePrevious"), className: "tbf-carousel-nav tbf-carousel-nav-prev", onClick: state.showPrevious, type: "button", children: _jsx(Icon, { spec: ICON_CHEVRON_LEFT }) }), _jsx("button", { "aria-label": label("mediaSlideNext"), className: "tbf-carousel-nav tbf-carousel-nav-next", onClick: state.showNext, type: "button", children: _jsx(Icon, { spec: ICON_CHEVRON_RIGHT }) })] })), showIndicators && (_jsx("div", { className: "tbf-carousel-dots", children: slides.map((slide, index) => (_jsx("button", { "aria-current": index === state.activeIndex ? "true" : undefined, "aria-label": label("mediaSlide", { index: index + 1 }), className: `tbf-carousel-dot${index === state.activeIndex ? " is-active" : ""}`, onClick: () => state.showAt(index), type: "button" }, slide.src))) }))] }));
|
|
16
|
+
}
|
|
17
|
+
export { Carousel };
|
|
18
|
+
//# sourceMappingURL=carousel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"carousel.js","sourceRoot":"","sources":["../../../src/media/carousel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type ExpandableImageProps = {
|
|
2
|
+
alt: string;
|
|
3
|
+
className?: string;
|
|
4
|
+
imageClassName?: string;
|
|
5
|
+
images?: readonly string[];
|
|
6
|
+
index?: number;
|
|
7
|
+
lang?: string;
|
|
8
|
+
src: string;
|
|
9
|
+
};
|
|
10
|
+
declare function ExpandableImage(props: ExpandableImageProps): import("react").JSX.Element;
|
|
11
|
+
export { ExpandableImage };
|
|
12
|
+
export type { ExpandableImageProps };
|
|
13
|
+
//# sourceMappingURL=expandable-image.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expandable-image.d.ts","sourceRoot":"","sources":["../../../src/media/expandable-image.tsx"],"names":[],"mappings":"AASA,KAAK,oBAAoB,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAMF,iBAAS,eAAe,CAAC,KAAK,EAAE,oBAAoB,+BA4CnD;AAED,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useId } from "react";
|
|
3
|
+
import { Icon } from "../icons/react/index.js";
|
|
4
|
+
import { sourceLanguageMessage } from "../language/messages.js";
|
|
5
|
+
import { useGalleryState } from "./gallery-state.js";
|
|
6
|
+
import { Lightbox } from "./lightbox.js";
|
|
7
|
+
const ICON_MAXIMIZE = "remixicon:fullscreen-line";
|
|
8
|
+
function galleryAlt(alt, length, index) {
|
|
9
|
+
return length > 1 ? `${alt} ${index + 1}` : alt;
|
|
10
|
+
}
|
|
11
|
+
function ExpandableImage(props) {
|
|
12
|
+
const gallery = props.images?.length ? [...props.images] : [props.src];
|
|
13
|
+
const start = Math.min(Math.max(props.index ?? 0, 0), gallery.length - 1);
|
|
14
|
+
const titleId = useId();
|
|
15
|
+
const state = useGalleryState(gallery.length, start);
|
|
16
|
+
const thumbnailAlt = galleryAlt(props.alt, gallery.length, start);
|
|
17
|
+
const label = sourceLanguageMessage("mediaExpand", props.lang, { alt: thumbnailAlt });
|
|
18
|
+
return (_jsxs(_Fragment, { children: [_jsxs("button", { "aria-label": label, className: ["tbf-expandable-image", props.className].filter(Boolean).join(" "), onClick: () => state.expand(start), type: "button", children: [_jsx("img", { alt: thumbnailAlt, className: ["tbf-expandable-image-img", props.imageClassName].filter(Boolean).join(" "), loading: "lazy", src: props.src }), _jsx("span", { className: "tbf-expandable-image-icon", children: _jsx(Icon, { spec: ICON_MAXIMIZE }) })] }), state.open && (_jsx(Lightbox, { alt: galleryAlt(props.alt, gallery.length, state.activeIndex), close: state.close, hasNext: state.activeIndex < gallery.length - 1, hasPrevious: state.activeIndex > 0, lang: props.lang, showNext: state.showNext, showPrevious: state.showPrevious, src: gallery[state.activeIndex] ?? props.src, titleId: titleId, visible: state.visible }))] }));
|
|
19
|
+
}
|
|
20
|
+
export { ExpandableImage };
|
|
21
|
+
//# sourceMappingURL=expandable-image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expandable-image.js","sourceRoot":"","sources":["../../../src/media/expandable-image.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
declare function focusableWithin(root: HTMLElement): HTMLElement[];
|
|
2
|
+
declare function trapTabKey(root: HTMLElement, event: KeyboardEvent): void;
|
|
3
|
+
declare function captureFocus(root: HTMLElement): () => void;
|
|
4
|
+
export { captureFocus, focusableWithin, trapTabKey };
|
|
5
|
+
//# sourceMappingURL=focus-trap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focus-trap.d.ts","sourceRoot":"","sources":["../../../src/media/focus-trap.ts"],"names":[],"mappings":"AASA,iBAAS,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,EAAE,CAGzD;AAED,iBAAS,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAmBjE;AAED,iBAAS,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,IAAI,CAQnD;AAED,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
const FOCUSABLE = [
|
|
2
|
+
"a[href]",
|
|
3
|
+
"button:not([disabled])",
|
|
4
|
+
"input:not([disabled])",
|
|
5
|
+
"select:not([disabled])",
|
|
6
|
+
"textarea:not([disabled])",
|
|
7
|
+
'[tabindex]:not([tabindex="-1"])',
|
|
8
|
+
].join(",");
|
|
9
|
+
function focusableWithin(root) {
|
|
10
|
+
return Array.from(root.querySelectorAll(FOCUSABLE))
|
|
11
|
+
.filter((node) => node.offsetWidth > 0 || node.offsetHeight > 0 || node === document.activeElement);
|
|
12
|
+
}
|
|
13
|
+
function trapTabKey(root, event) {
|
|
14
|
+
const focusable = focusableWithin(root);
|
|
15
|
+
if (!focusable.length) {
|
|
16
|
+
event.preventDefault();
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const first = focusable[0];
|
|
20
|
+
const last = focusable[focusable.length - 1];
|
|
21
|
+
const active = document.activeElement;
|
|
22
|
+
if (!event.shiftKey && active === last) {
|
|
23
|
+
event.preventDefault();
|
|
24
|
+
first.focus();
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (event.shiftKey && (active === first || !root.contains(active))) {
|
|
28
|
+
event.preventDefault();
|
|
29
|
+
last.focus();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function captureFocus(root) {
|
|
33
|
+
const previous = document.activeElement instanceof HTMLElement ? document.activeElement : null;
|
|
34
|
+
const focusable = focusableWithin(root);
|
|
35
|
+
(focusable[0] ?? root).focus();
|
|
36
|
+
return () => {
|
|
37
|
+
previous?.focus();
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export { captureFocus, focusableWithin, trapTabKey };
|
|
41
|
+
//# sourceMappingURL=focus-trap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focus-trap.js","sourceRoot":"","sources":["../../../src/media/focus-trap.ts"],"names":[],"mappings":"AAAA,MAAM,SAAS,GAAG;IAChB,SAAS;IACT,wBAAwB;IACxB,uBAAuB;IACvB,wBAAwB;IACxB,0BAA0B;IAC1B,iCAAiC;CAClC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEZ,SAAS,eAAe,CAAC,IAAiB;IACxC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAc,SAAS,CAAC,CAAC;SAC/D,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,IAAI,KAAK,QAAQ,CAAC,aAAa,CAAC,CAAC;AACtG,CAAC;AAED,SAAS,UAAU,CAAC,IAAiB,EAAE,KAAoB;IACzD,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC;IAEtC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACvC,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QACnE,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAiB;IACrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,YAAY,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/F,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;IAE/B,OAAO,GAAG,EAAE;QACV,QAAQ,EAAE,KAAK,EAAE,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
declare const CLOSE_ANIMATION_MS = 320;
|
|
2
|
+
type GalleryState = {
|
|
3
|
+
activeIndex: number;
|
|
4
|
+
close: () => void;
|
|
5
|
+
expand: (index: number) => void;
|
|
6
|
+
open: boolean;
|
|
7
|
+
showNext: () => void;
|
|
8
|
+
showPrevious: () => void;
|
|
9
|
+
visible: boolean;
|
|
10
|
+
};
|
|
11
|
+
declare function useGalleryState(length: number, initialIndex: number): GalleryState;
|
|
12
|
+
export { CLOSE_ANIMATION_MS, useGalleryState };
|
|
13
|
+
export type { GalleryState };
|
|
14
|
+
//# sourceMappingURL=gallery-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gallery-state.d.ts","sourceRoot":"","sources":["../../../src/media/gallery-state.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,kBAAkB,MAAM,CAAC;AAE/B,KAAK,YAAY,GAAG;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,iBAAS,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,YAAY,CA2B3E;AAED,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
2
|
+
const CLOSE_ANIMATION_MS = 320;
|
|
3
|
+
function useGalleryState(length, initialIndex) {
|
|
4
|
+
const [open, setOpen] = useState(false);
|
|
5
|
+
const [visible, setVisible] = useState(false);
|
|
6
|
+
const [index, setIndex] = useState(initialIndex);
|
|
7
|
+
const closeTimer = useRef(undefined);
|
|
8
|
+
const activeIndex = Math.min(Math.max(index, 0), Math.max(length - 1, 0));
|
|
9
|
+
const close = useCallback(() => {
|
|
10
|
+
setVisible(false);
|
|
11
|
+
window.clearTimeout(closeTimer.current);
|
|
12
|
+
closeTimer.current = window.setTimeout(() => setOpen(false), CLOSE_ANIMATION_MS);
|
|
13
|
+
}, []);
|
|
14
|
+
const expand = useCallback((next) => {
|
|
15
|
+
window.clearTimeout(closeTimer.current);
|
|
16
|
+
setIndex(next);
|
|
17
|
+
setOpen(true);
|
|
18
|
+
window.requestAnimationFrame(() => setVisible(true));
|
|
19
|
+
}, []);
|
|
20
|
+
const showPrevious = useCallback(() => setIndex((current) => Math.max(current - 1, 0)), []);
|
|
21
|
+
const showNext = useCallback(() => setIndex((current) => Math.min(current + 1, length - 1)), [length]);
|
|
22
|
+
useEffect(() => () => window.clearTimeout(closeTimer.current), []);
|
|
23
|
+
return { activeIndex, close, expand, open, showNext, showPrevious, visible };
|
|
24
|
+
}
|
|
25
|
+
export { CLOSE_ANIMATION_MS, useGalleryState };
|
|
26
|
+
//# sourceMappingURL=gallery-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gallery-state.js","sourceRoot":"","sources":["../../../src/media/gallery-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjE,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAY/B,SAAS,eAAe,CAAC,MAAc,EAAE,YAAoB;IAC3D,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,MAAM,CAAqB,SAAS,CAAC,CAAC;IAEzD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE1E,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,UAAU,CAAC,KAAK,CAAC,CAAC;QAClB,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxC,UAAU,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACnF,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,IAAY,EAAE,EAAE;QAC1C,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5F,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEvG,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAEnE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AAC/E,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,CAAC"}
|
package/dist/media/index.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export {
|
|
10
|
-
export type {
|
|
1
|
+
export { Carousel } from "./carousel.js";
|
|
2
|
+
export type { CarouselProps, CarouselSlide } from "./carousel.js";
|
|
3
|
+
export { prefersReducedMotion, useCarouselState } from "./carousel-state.js";
|
|
4
|
+
export type { CarouselState } from "./carousel-state.js";
|
|
5
|
+
export { ExpandableImage } from "./expandable-image.js";
|
|
6
|
+
export type { ExpandableImageProps } from "./expandable-image.js";
|
|
7
|
+
export { useGalleryState } from "./gallery-state.js";
|
|
8
|
+
export type { GalleryState } from "./gallery-state.js";
|
|
9
|
+
export { Lightbox } from "./lightbox.js";
|
|
10
|
+
export type { LightboxProps } from "./lightbox.js";
|
|
11
|
+
export { MapEmbed } from "./map-embed.js";
|
|
12
|
+
export type { MapEmbedProps } from "./map-embed.js";
|
|
13
|
+
export { lockBodyScroll } from "./scroll-lock.js";
|
|
11
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/media/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/media/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/media/index.js
CHANGED
|
@@ -1,29 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
const current = value && typeof value === "object" && !Array.isArray(value)
|
|
9
|
-
? value
|
|
10
|
-
: null;
|
|
11
|
-
const image = current
|
|
12
|
-
? toString(current.image || current.url || current.avatar_url || current.avatarUrl)
|
|
13
|
-
: mediaText(value);
|
|
14
|
-
const id = toString(current?.id);
|
|
15
|
-
const available = current ? current.available === true : Boolean(image);
|
|
16
|
-
return {
|
|
17
|
-
available,
|
|
18
|
-
id,
|
|
19
|
-
image,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
function mediaImage(value) {
|
|
23
|
-
return mediaState(value).image;
|
|
24
|
-
}
|
|
25
|
-
function mediaAvailable(value) {
|
|
26
|
-
return mediaState(value).available;
|
|
27
|
-
}
|
|
28
|
-
export { mediaAvailable, mediaImage, mediaState };
|
|
1
|
+
export { Carousel } from "./carousel.js";
|
|
2
|
+
export { prefersReducedMotion, useCarouselState } from "./carousel-state.js";
|
|
3
|
+
export { ExpandableImage } from "./expandable-image.js";
|
|
4
|
+
export { useGalleryState } from "./gallery-state.js";
|
|
5
|
+
export { Lightbox } from "./lightbox.js";
|
|
6
|
+
export { MapEmbed } from "./map-embed.js";
|
|
7
|
+
export { lockBodyScroll } from "./scroll-lock.js";
|
|
29
8
|
//# sourceMappingURL=index.js.map
|
package/dist/media/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/media/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/media/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE7E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
type LightboxProps = {
|
|
2
|
+
alt: string;
|
|
3
|
+
close: () => void;
|
|
4
|
+
hasNext: boolean;
|
|
5
|
+
hasPrevious: boolean;
|
|
6
|
+
lang?: string;
|
|
7
|
+
showNext: () => void;
|
|
8
|
+
showPrevious: () => void;
|
|
9
|
+
src: string;
|
|
10
|
+
titleId: string;
|
|
11
|
+
visible: boolean;
|
|
12
|
+
};
|
|
13
|
+
declare function Lightbox(props: LightboxProps): import("react").ReactPortal;
|
|
14
|
+
export { Lightbox };
|
|
15
|
+
export type { LightboxProps };
|
|
16
|
+
//# sourceMappingURL=lightbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lightbox.d.ts","sourceRoot":"","sources":["../../../src/media/lightbox.tsx"],"names":[],"mappings":"AAYA,KAAK,aAAa,GAAG;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAkCF,iBAAS,QAAQ,CAAC,KAAK,EAAE,aAAa,+BAyDrC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,YAAY,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef } from "react";
|
|
3
|
+
import { createPortal } from "react-dom";
|
|
4
|
+
import { Icon } from "../icons/react/index.js";
|
|
5
|
+
import { sourceLanguageMessage } from "../language/messages.js";
|
|
6
|
+
import { captureFocus, trapTabKey } from "./focus-trap.js";
|
|
7
|
+
import { lockBodyScroll } from "./scroll-lock.js";
|
|
8
|
+
const ICON_CHEVRON_LEFT = "remixicon:arrow-left-s-line";
|
|
9
|
+
const ICON_CHEVRON_RIGHT = "remixicon:arrow-right-s-line";
|
|
10
|
+
const ICON_CLOSE = "remixicon:close-line";
|
|
11
|
+
function stop(event) {
|
|
12
|
+
event.stopPropagation();
|
|
13
|
+
}
|
|
14
|
+
function useLightboxShell(close, showNext, showPrevious) {
|
|
15
|
+
const panel = useRef(null);
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
const node = panel.current;
|
|
18
|
+
if (!node)
|
|
19
|
+
return undefined;
|
|
20
|
+
const releaseScroll = lockBodyScroll();
|
|
21
|
+
const restoreFocus = captureFocus(node);
|
|
22
|
+
function onKeyDown(event) {
|
|
23
|
+
if (event.key === "Escape")
|
|
24
|
+
close();
|
|
25
|
+
if (event.key === "ArrowLeft")
|
|
26
|
+
showPrevious();
|
|
27
|
+
if (event.key === "ArrowRight")
|
|
28
|
+
showNext();
|
|
29
|
+
if (event.key === "Tab" && panel.current)
|
|
30
|
+
trapTabKey(panel.current, event);
|
|
31
|
+
}
|
|
32
|
+
window.addEventListener("keydown", onKeyDown);
|
|
33
|
+
return () => {
|
|
34
|
+
window.removeEventListener("keydown", onKeyDown);
|
|
35
|
+
releaseScroll();
|
|
36
|
+
restoreFocus();
|
|
37
|
+
};
|
|
38
|
+
}, [close, showNext, showPrevious]);
|
|
39
|
+
return panel;
|
|
40
|
+
}
|
|
41
|
+
function Lightbox(props) {
|
|
42
|
+
const panel = useLightboxShell(props.close, props.showNext, props.showPrevious);
|
|
43
|
+
const label = (key, vars) => sourceLanguageMessage(key, props.lang, vars);
|
|
44
|
+
const state = props.visible ? " is-visible" : "";
|
|
45
|
+
const node = (_jsxs("div", { "aria-labelledby": props.titleId, "aria-modal": "true", className: `tbf-lightbox${state}`, onClick: props.close, ref: panel, role: "dialog", tabIndex: -1, children: [_jsx("button", { "aria-label": label("mediaClose"), className: "tbf-lightbox-close", onClick: props.close, type: "button", children: _jsx(Icon, { spec: ICON_CLOSE }) }), props.hasPrevious && (_jsx("button", { "aria-label": label("mediaPrevious"), className: "tbf-lightbox-nav tbf-lightbox-nav-prev", onClick: (event) => {
|
|
46
|
+
stop(event);
|
|
47
|
+
props.showPrevious();
|
|
48
|
+
}, type: "button", children: _jsx(Icon, { spec: ICON_CHEVRON_LEFT }) })), props.hasNext && (_jsx("button", { "aria-label": label("mediaNext"), className: "tbf-lightbox-nav tbf-lightbox-nav-next", onClick: (event) => {
|
|
49
|
+
stop(event);
|
|
50
|
+
props.showNext();
|
|
51
|
+
}, type: "button", children: _jsx(Icon, { spec: ICON_CHEVRON_RIGHT }) })), _jsxs("div", { className: "tbf-lightbox-viewer", onClick: stop, children: [_jsx("h2", { className: "sr-only", id: props.titleId, children: props.alt }), _jsx("img", { alt: props.alt, className: "tbf-lightbox-img", src: props.src }), _jsx("p", { className: "tbf-lightbox-caption", children: props.alt })] })] }));
|
|
52
|
+
if (typeof document === "undefined")
|
|
53
|
+
return null;
|
|
54
|
+
return createPortal(node, document.body);
|
|
55
|
+
}
|
|
56
|
+
export { Lightbox };
|
|
57
|
+
//# sourceMappingURL=lightbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lightbox.js","sourceRoot":"","sources":["../../../src/media/lightbox.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
type MapEmbedProps = {
|
|
2
|
+
className?: string;
|
|
3
|
+
src: string;
|
|
4
|
+
title: string;
|
|
5
|
+
};
|
|
6
|
+
declare function MapEmbed({ className, src, title }: MapEmbedProps): import("react").JSX.Element;
|
|
7
|
+
export { MapEmbed };
|
|
8
|
+
export type { MapEmbedProps };
|
|
9
|
+
//# sourceMappingURL=map-embed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-embed.d.ts","sourceRoot":"","sources":["../../../src/media/map-embed.tsx"],"names":[],"mappings":"AAAA,KAAK,aAAa,GAAG;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,aAAa,+BAczD;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,YAAY,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
function MapEmbed({ className, src, title }) {
|
|
3
|
+
return (_jsx("iframe", { allowFullScreen: true, className: ["tbf-map-embed", className].filter(Boolean).join(" "), height: "100%", loading: "lazy", referrerPolicy: "no-referrer-when-downgrade", src: src, style: { border: 0 }, title: title, width: "100%" }));
|
|
4
|
+
}
|
|
5
|
+
export { MapEmbed };
|
|
6
|
+
//# sourceMappingURL=map-embed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-embed.js","sourceRoot":"","sources":["../../../src/media/map-embed.tsx"],"names":[],"mappings":";AAMA,SAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAiB;IACxD,OAAO,CACL,iBACA,eAAe,QACf,SAAS,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EACjE,MAAM,EAAC,MAAM,EACb,OAAO,EAAC,MAAM,EACd,cAAc,EAAC,4BAA4B,EAC3C,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EACpB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAC,MAAM,GACV,CACH,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll-lock.d.ts","sourceRoot":"","sources":["../../../src/media/scroll-lock.ts"],"names":[],"mappings":"AAGA,iBAAS,cAAc,IAAI,MAAM,IAAI,CAgBpC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
let lockCount = 0;
|
|
2
|
+
let previousOverflow = "";
|
|
3
|
+
function lockBodyScroll() {
|
|
4
|
+
if (typeof document === "undefined")
|
|
5
|
+
return () => undefined;
|
|
6
|
+
if (lockCount === 0) {
|
|
7
|
+
previousOverflow = document.body.style.overflow;
|
|
8
|
+
document.body.style.overflow = "hidden";
|
|
9
|
+
}
|
|
10
|
+
lockCount += 1;
|
|
11
|
+
let released = false;
|
|
12
|
+
return () => {
|
|
13
|
+
if (released)
|
|
14
|
+
return;
|
|
15
|
+
released = true;
|
|
16
|
+
lockCount = Math.max(lockCount - 1, 0);
|
|
17
|
+
if (lockCount === 0)
|
|
18
|
+
document.body.style.overflow = previousOverflow;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export { lockBodyScroll };
|
|
22
|
+
//# sourceMappingURL=scroll-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll-lock.js","sourceRoot":"","sources":["../../../src/media/scroll-lock.ts"],"names":[],"mappings":"AAAA,IAAI,SAAS,GAAG,CAAC,CAAC;AAClB,IAAI,gBAAgB,GAAG,EAAE,CAAC;AAE1B,SAAS,cAAc;IACrB,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC;IAE5D,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAChD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1C,CAAC;IACD,SAAS,IAAI,CAAC,CAAC;IAEf,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO,GAAG,EAAE;QACV,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACvC,IAAI,SAAS,KAAK,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,gBAAgB,CAAC;IACvE,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
.tbf-carousel {
|
|
2
|
+
position: relative;
|
|
3
|
+
overflow: hidden;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.tbf-carousel-slide {
|
|
7
|
+
position: absolute;
|
|
8
|
+
inset: 0;
|
|
9
|
+
height: 100%;
|
|
10
|
+
width: 100%;
|
|
11
|
+
object-fit: cover;
|
|
12
|
+
opacity: 0;
|
|
13
|
+
transition: opacity 1000ms ease;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.tbf-carousel-slide.is-active {
|
|
17
|
+
position: relative;
|
|
18
|
+
opacity: 1;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.tbf-carousel-nav {
|
|
22
|
+
position: absolute;
|
|
23
|
+
top: 50%;
|
|
24
|
+
display: flex;
|
|
25
|
+
height: 2.75rem;
|
|
26
|
+
width: 2.75rem;
|
|
27
|
+
align-items: center;
|
|
28
|
+
justify-content: center;
|
|
29
|
+
transform: translateY(-50%);
|
|
30
|
+
border: none;
|
|
31
|
+
border-radius: 999px;
|
|
32
|
+
background: oklch(14.5% 0 0 / 35%);
|
|
33
|
+
color: var(--white-500, #fff);
|
|
34
|
+
cursor: pointer;
|
|
35
|
+
transition: background 180ms ease;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.tbf-carousel-nav:hover {
|
|
39
|
+
background: oklch(14.5% 0 0 / 55%);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.tbf-carousel-nav-prev {
|
|
43
|
+
left: 0.75rem;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.tbf-carousel-nav-next {
|
|
47
|
+
right: 0.75rem;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.tbf-carousel-dots {
|
|
51
|
+
position: absolute;
|
|
52
|
+
bottom: 0.9rem;
|
|
53
|
+
left: 50%;
|
|
54
|
+
display: flex;
|
|
55
|
+
gap: 0.4rem;
|
|
56
|
+
transform: translateX(-50%);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.tbf-carousel-dot {
|
|
60
|
+
height: 0.5rem;
|
|
61
|
+
width: 0.5rem;
|
|
62
|
+
border: none;
|
|
63
|
+
border-radius: 999px;
|
|
64
|
+
background: oklch(100% 0 0 / 55%);
|
|
65
|
+
cursor: pointer;
|
|
66
|
+
padding: 0;
|
|
67
|
+
transition: background 180ms ease, width 180ms ease;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.tbf-carousel-dot.is-active {
|
|
71
|
+
width: 1.75rem;
|
|
72
|
+
background: oklch(100% 0 0 / 95%);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
@media (prefers-reduced-motion: reduce) {
|
|
76
|
+
.tbf-carousel-slide {
|
|
77
|
+
transition: none;
|
|
78
|
+
}
|
|
79
|
+
}
|