@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,20 @@
|
|
|
1
|
+
import type { LocaleRouting } from "./options.js";
|
|
2
|
+
type ParsedLocalePathname = {
|
|
3
|
+
locale: string;
|
|
4
|
+
pathname: string;
|
|
5
|
+
prefixed: boolean;
|
|
6
|
+
};
|
|
7
|
+
type LocaleShellRoute = {
|
|
8
|
+
locale: string;
|
|
9
|
+
outFile: string;
|
|
10
|
+
path: string;
|
|
11
|
+
sourcePath: string;
|
|
12
|
+
};
|
|
13
|
+
declare function normalizePathname(input: unknown): string;
|
|
14
|
+
declare function parseLocalePathname(pathname: unknown, routing: LocaleRouting): ParsedLocalePathname;
|
|
15
|
+
declare function buildLocalePathname(pathname: unknown, locale: unknown, routing: LocaleRouting): string;
|
|
16
|
+
declare function localeShellOutFile(pathname: unknown): string;
|
|
17
|
+
declare function localeShellRoutes(paths: readonly string[], routing: LocaleRouting): LocaleShellRoute[];
|
|
18
|
+
export { buildLocalePathname, localeShellOutFile, localeShellRoutes, normalizePathname, parseLocalePathname, };
|
|
19
|
+
export type { LocaleShellRoute, ParsedLocalePathname };
|
|
20
|
+
//# sourceMappingURL=path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../../src/language/routing/path.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,KAAK,oBAAoB,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,iBAAS,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKjD;AAED,iBAAS,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,oBAAoB,CAU5F;AAED,iBAAS,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAK/F;AAED,iBAAS,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAGrD;AAED,iBAAS,iBAAiB,CACxB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,OAAO,EAAE,aAAa,GACrB,gBAAgB,EAAE,CASpB;AAED,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,GACpB,CAAC;AACF,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { matchLocale } from "./options.js";
|
|
2
|
+
function normalizePathname(input) {
|
|
3
|
+
const raw = String(input ?? "") || "/";
|
|
4
|
+
const withSlash = raw.startsWith("/") ? raw : `/${raw}`;
|
|
5
|
+
if (withSlash.length === 1)
|
|
6
|
+
return "/";
|
|
7
|
+
return withSlash.replace(/\/+$/u, "") || "/";
|
|
8
|
+
}
|
|
9
|
+
function parseLocalePathname(pathname, routing) {
|
|
10
|
+
const normalized = normalizePathname(pathname);
|
|
11
|
+
const segments = normalized.split("/");
|
|
12
|
+
const candidate = matchLocale(segments[1], routing);
|
|
13
|
+
if (!candidate)
|
|
14
|
+
return { locale: routing.defaultLocale, pathname: normalized, prefixed: false };
|
|
15
|
+
return {
|
|
16
|
+
locale: candidate,
|
|
17
|
+
pathname: normalizePathname(`/${segments.slice(2).join("/")}`),
|
|
18
|
+
prefixed: true,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function buildLocalePathname(pathname, locale, routing) {
|
|
22
|
+
const base = normalizePathname(pathname);
|
|
23
|
+
const target = matchLocale(locale, routing) || routing.defaultLocale;
|
|
24
|
+
if (target === routing.defaultLocale)
|
|
25
|
+
return base;
|
|
26
|
+
return base === "/" ? `/${target}` : `/${target}${base}`;
|
|
27
|
+
}
|
|
28
|
+
function localeShellOutFile(pathname) {
|
|
29
|
+
const normalized = normalizePathname(pathname);
|
|
30
|
+
return normalized === "/" ? "index.html" : `${normalized.slice(1)}/index.html`;
|
|
31
|
+
}
|
|
32
|
+
function localeShellRoutes(paths, routing) {
|
|
33
|
+
const routes = [];
|
|
34
|
+
for (const locale of routing.locales) {
|
|
35
|
+
for (const source of paths) {
|
|
36
|
+
const path = buildLocalePathname(source, locale, routing);
|
|
37
|
+
routes.push({ locale, outFile: localeShellOutFile(path), path, sourcePath: normalizePathname(source) });
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return routes;
|
|
41
|
+
}
|
|
42
|
+
export { buildLocalePathname, localeShellOutFile, localeShellRoutes, normalizePathname, parseLocalePathname, };
|
|
43
|
+
//# sourceMappingURL=path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"","sources":["../../../../src/language/routing/path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAgB3C,SAAS,iBAAiB,CAAC,KAAc;IACvC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC;IACvC,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;IACxD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACvC,OAAO,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;AAC/C,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAiB,EAAE,OAAsB;IACpE,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAChG,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,iBAAiB,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9D,QAAQ,EAAE,IAAI;KACf,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAiB,EAAE,MAAe,EAAE,OAAsB;IACrF,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC;IACrE,IAAI,MAAM,KAAK,OAAO,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAClD,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAiB;IAC3C,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC;AACjF,CAAC;AAED,SAAS,iBAAiB,CACxB,KAAwB,EACxB,OAAsB;IAEtB,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1G,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,GACpB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { LocaleRouting, LocaleRoutingOptions } from "./options.js";
|
|
2
|
+
type LocaleListener = (locale: string) => void;
|
|
3
|
+
declare function configureLocaleRouting(options: LocaleRoutingOptions): LocaleRouting;
|
|
4
|
+
declare function getLocaleRouting(): LocaleRouting;
|
|
5
|
+
declare function currentLocale(): string;
|
|
6
|
+
declare function persistLocale(locale: string): void;
|
|
7
|
+
declare function localeHref(locale: string): string;
|
|
8
|
+
declare function setCurrentLocale(locale: unknown): boolean;
|
|
9
|
+
declare function onLocaleChanged(listener: LocaleListener): () => void;
|
|
10
|
+
export { configureLocaleRouting, currentLocale, getLocaleRouting, localeHref, onLocaleChanged, persistLocale, setCurrentLocale, };
|
|
11
|
+
export type { LocaleListener };
|
|
12
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/language/routing/runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGxE,KAAK,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;AAM/C,iBAAS,sBAAsB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAG5E;AAED,iBAAS,gBAAgB,IAAI,aAAa,CAEzC;AAED,iBAAS,aAAa,IAAI,MAAM,CAG/B;AAED,iBAAS,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAO3C;AAED,iBAAS,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAI1C;AAED,iBAAS,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAQlD;AAED,iBAAS,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,IAAI,CAK7D;AAED,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,aAAa,EACb,gBAAgB,GACjB,CAAC;AACF,YAAY,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { matchLocale, normalizeLocaleRouting } from "./options.js";
|
|
2
|
+
import { buildLocalePathname, parseLocalePathname } from "./path.js";
|
|
3
|
+
const listeners = new Set();
|
|
4
|
+
let routing = normalizeLocaleRouting();
|
|
5
|
+
function configureLocaleRouting(options) {
|
|
6
|
+
routing = normalizeLocaleRouting(options);
|
|
7
|
+
return routing;
|
|
8
|
+
}
|
|
9
|
+
function getLocaleRouting() {
|
|
10
|
+
return routing;
|
|
11
|
+
}
|
|
12
|
+
function currentLocale() {
|
|
13
|
+
if (typeof window === "undefined")
|
|
14
|
+
return routing.defaultLocale;
|
|
15
|
+
return parseLocalePathname(window.location.pathname, routing).locale;
|
|
16
|
+
}
|
|
17
|
+
function persistLocale(locale) {
|
|
18
|
+
if (typeof window === "undefined")
|
|
19
|
+
return;
|
|
20
|
+
try {
|
|
21
|
+
window.localStorage.setItem(routing.storageKey, locale);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function localeHref(locale) {
|
|
28
|
+
const parsed = parseLocalePathname(window.location.pathname, routing);
|
|
29
|
+
const pathname = buildLocalePathname(parsed.pathname, locale, routing);
|
|
30
|
+
return `${pathname}${window.location.search}${window.location.hash}`;
|
|
31
|
+
}
|
|
32
|
+
function setCurrentLocale(locale) {
|
|
33
|
+
const next = matchLocale(locale, routing);
|
|
34
|
+
if (!next || typeof window === "undefined")
|
|
35
|
+
return false;
|
|
36
|
+
persistLocale(next);
|
|
37
|
+
if (next === currentLocale())
|
|
38
|
+
return false;
|
|
39
|
+
for (const listener of listeners)
|
|
40
|
+
listener(next);
|
|
41
|
+
window.location.assign(localeHref(next));
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
function onLocaleChanged(listener) {
|
|
45
|
+
listeners.add(listener);
|
|
46
|
+
return () => {
|
|
47
|
+
listeners.delete(listener);
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export { configureLocaleRouting, currentLocale, getLocaleRouting, localeHref, onLocaleChanged, persistLocale, setCurrentLocale, };
|
|
51
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../../src/language/routing/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEnE,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAIrE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE5C,IAAI,OAAO,GAAkB,sBAAsB,EAAE,CAAC;AAEtD,SAAS,sBAAsB,CAAC,OAA6B;IAC3D,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC1C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa;IACpB,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,OAAO,CAAC,aAAa,CAAC;IAChE,OAAO,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC;AACvE,CAAC;AAED,SAAS,aAAa,CAAC,MAAc;IACnC,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO;IAC1C,IAAI,CAAC;QACH,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACvE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAe;IACvC,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IACzD,aAAa,CAAC,IAAI,CAAC,CAAC;IACpB,IAAI,IAAI,KAAK,aAAa,EAAE;QAAE,OAAO,KAAK,CAAC;IAC3C,KAAK,MAAM,QAAQ,IAAI,SAAS;QAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,QAAwB;IAC/C,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,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,aAAa,EACb,gBAAgB,GACjB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type CarouselState = {
|
|
2
|
+
activeIndex: number;
|
|
3
|
+
onEnter: () => void;
|
|
4
|
+
onLeave: () => void;
|
|
5
|
+
showAt: (index: number) => void;
|
|
6
|
+
showNext: () => void;
|
|
7
|
+
showPrevious: () => void;
|
|
8
|
+
};
|
|
9
|
+
declare function prefersReducedMotion(): boolean;
|
|
10
|
+
declare function useCarouselState(length: number, intervalMs: number): CarouselState;
|
|
11
|
+
export { prefersReducedMotion, useCarouselState };
|
|
12
|
+
export type { CarouselState };
|
|
13
|
+
//# sourceMappingURL=carousel-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"carousel-state.d.ts","sourceRoot":"","sources":["../../../src/media/carousel-state.ts"],"names":[],"mappings":"AAEA,KAAK,aAAa,GAAG;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B,CAAC;AAEF,iBAAS,oBAAoB,IAAI,OAAO,CAOvC;AAED,iBAAS,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,CA+B3E;AAED,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,CAAC;AAClD,YAAY,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
2
|
+
function prefersReducedMotion() {
|
|
3
|
+
if (typeof window === "undefined" || typeof window.matchMedia !== "function")
|
|
4
|
+
return false;
|
|
5
|
+
try {
|
|
6
|
+
return window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function useCarouselState(length, intervalMs) {
|
|
13
|
+
const [activeIndex, setActiveIndex] = useState(0);
|
|
14
|
+
const [paused, setPaused] = useState(false);
|
|
15
|
+
const timer = useRef(undefined);
|
|
16
|
+
const showNext = useCallback(() => {
|
|
17
|
+
setActiveIndex((current) => (length ? (current + 1) % length : 0));
|
|
18
|
+
}, [length]);
|
|
19
|
+
const showPrevious = useCallback(() => {
|
|
20
|
+
setActiveIndex((current) => (length ? (current - 1 + length) % length : 0));
|
|
21
|
+
}, [length]);
|
|
22
|
+
const showAt = useCallback((index) => {
|
|
23
|
+
setActiveIndex(() => Math.min(Math.max(index, 0), Math.max(length - 1, 0)));
|
|
24
|
+
}, [length]);
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
if (paused || length < 2 || intervalMs <= 0 || prefersReducedMotion())
|
|
27
|
+
return undefined;
|
|
28
|
+
timer.current = window.setInterval(showNext, intervalMs);
|
|
29
|
+
return () => window.clearInterval(timer.current);
|
|
30
|
+
}, [activeIndex, intervalMs, length, paused, showNext]);
|
|
31
|
+
return {
|
|
32
|
+
activeIndex: Math.min(activeIndex, Math.max(length - 1, 0)),
|
|
33
|
+
onEnter: () => setPaused(true),
|
|
34
|
+
onLeave: () => setPaused(false),
|
|
35
|
+
showAt,
|
|
36
|
+
showNext,
|
|
37
|
+
showPrevious,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export { prefersReducedMotion, useCarouselState };
|
|
41
|
+
//# sourceMappingURL=carousel-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"carousel-state.js","sourceRoot":"","sources":["../../../src/media/carousel-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAWjE,SAAS,oBAAoB;IAC3B,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IAC3F,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC,OAAO,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc,EAAE,UAAkB;IAC1D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,CAAqB,SAAS,CAAC,CAAC;IAEpD,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE;QAC3C,cAAc,CAAC,GAAG,EAAE,CAAC,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,CAAC;IAC9E,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,MAAM,IAAI,MAAM,GAAG,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,oBAAoB,EAAE;YAAE,OAAO,SAAS,CAAC;QACxF,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACzD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE1D,OAAO;QACL,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3D,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;QAC9B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC;QAC/B,MAAM;QACN,QAAQ;QACR,YAAY;KACb,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
type CarouselSlide = {
|
|
2
|
+
alt?: string;
|
|
3
|
+
src: string;
|
|
4
|
+
};
|
|
5
|
+
type CarouselProps = {
|
|
6
|
+
className?: string;
|
|
7
|
+
controls?: boolean;
|
|
8
|
+
indicators?: boolean;
|
|
9
|
+
intervalMs?: number;
|
|
10
|
+
lang?: string;
|
|
11
|
+
slides: readonly CarouselSlide[];
|
|
12
|
+
};
|
|
13
|
+
declare function Carousel(props: CarouselProps): import("react").JSX.Element;
|
|
14
|
+
export { Carousel };
|
|
15
|
+
export type { CarouselProps, CarouselSlide };
|
|
16
|
+
//# sourceMappingURL=carousel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"carousel.d.ts","sourceRoot":"","sources":["../../../src/media/carousel.tsx"],"names":[],"mappings":"AAOA,KAAK,aAAa,GAAG;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;CAClC,CAAC;AAEF,iBAAS,QAAQ,CAAC,KAAK,EAAE,aAAa,+BAgErC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -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"}
|
|
@@ -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/src/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
|
|
@@ -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"}
|