@jant/core 0.6.3 → 0.6.5
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/dist/{app-CyysIxj_.js → app-B21j3s4K.js} +103 -19
- package/dist/app-ChOEIV6L.js +6 -0
- package/dist/client/.vite/manifest.json +2 -2
- package/dist/client/_assets/{client-CTrEFM5W.js → client-CBOLmWbM.js} +2 -2
- package/dist/client/_assets/{client-auth-LBSZxqNC.js → client-auth-CORG1c3c.js} +1 -1
- package/dist/{export-CzuQyg5h.js → export-DLukCOO3.js} +1 -1
- package/dist/{github-sync-CerNYCAn.js → github-sync-BeDecPen.js} +2 -2
- package/dist/{github-sync-Dbrb1DS5.js → github-sync-BtHY2AST.js} +1 -1
- package/dist/index.js +3 -3
- package/dist/node.js +4 -4
- package/package.json +1 -1
- package/src/app.tsx +7 -0
- package/src/client/components/__tests__/jant-media-lightbox.test.ts +1 -1
- package/src/client/components/jant-media-lightbox.ts +2 -2
- package/src/lib/__tests__/feed.test.ts +1 -1
- package/src/lib/feed.ts +4 -1
- package/src/middleware/__tests__/cache-control.test.ts +50 -0
- package/src/middleware/cache-control.ts +60 -0
- package/src/routes/api/custom-urls.ts +2 -4
- package/src/routes/dash/custom-urls.tsx +3 -9
- package/src/services/export-theme/assets/client-site.js +1 -1
- package/src/ui/feed/ThreadPreview.tsx +17 -9
- package/src/ui/feed/__tests__/thread-preview.test.ts +131 -6
- package/src/ui/feed/thread-preview-state.ts +43 -0
- package/dist/app-BX2XKxq0.js +0 -6
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { _ as toPublicPath, a as getSitePathPrefix, c as normalizePath, d as sanitizeUrl, f as slugify, g as toPublicHref, h as toAbsoluteSiteUrl, i as getSiteOrigin, m as toAbsoluteAssetUrl, n as extractDisplayDomain, o as isFullUrl, p as stripSitePathPrefix, r as extractDomain, s as isSafeInternalRedirect, t as buildSiteUrl, u as normalizeSiteUrl, y as __exportAll } from "./url-XF0GbKGO.js";
|
|
2
|
-
import { A as JANT_POSITIVE_LOGO_PNG_FILENAME, B as getJantLogoHref, C as formatYearMonth, D as HOME_BRANDING_LINK_LABEL, E as toISOString, F as getJantBundledAsset, G as base64ToUint8Array, H as JANT_LOGO_PATH_DATA, I as getJantIconFilename, L as getJantIconHref, M as getDefaultJantAppleTouchIconBytes, N as getDefaultJantFaviconIcoBytes, O as HOME_BRANDING_PREFIX, P as getJantBrandPackHref, R as getJantLogoFilename, S as formatTime, U as JANT_LOGO_VIEW_BOX, V as getJantPositiveLogoPngHref, W as arrayBufferToBase64, _ as getMediaUrl, b as formatRelativeAge, d as extractSummaryHtml, f as renderTiptapDocument, g as getImageUrl, h as escapeHtml, i as tiptapJsonToMarkdown, j as JANT_REPO_URL, k as JANT_BRAND_PACK_FILENAME, l as extractBodyText, m as trimTiptapBody, o as render, p as renderTiptapJson, s as toPlainText, t as createExportService, u as extractSummary, v as getPublicUrlForProvider, w as now, x as formatRelativeTime, y as formatDate, z as getJantLogoFills } from "./export-
|
|
2
|
+
import { A as JANT_POSITIVE_LOGO_PNG_FILENAME, B as getJantLogoHref, C as formatYearMonth, D as HOME_BRANDING_LINK_LABEL, E as toISOString, F as getJantBundledAsset, G as base64ToUint8Array, H as JANT_LOGO_PATH_DATA, I as getJantIconFilename, L as getJantIconHref, M as getDefaultJantAppleTouchIconBytes, N as getDefaultJantFaviconIcoBytes, O as HOME_BRANDING_PREFIX, P as getJantBrandPackHref, R as getJantLogoFilename, S as formatTime, U as JANT_LOGO_VIEW_BOX, V as getJantPositiveLogoPngHref, W as arrayBufferToBase64, _ as getMediaUrl, b as formatRelativeAge, d as extractSummaryHtml, f as renderTiptapDocument, g as getImageUrl, h as escapeHtml, i as tiptapJsonToMarkdown, j as JANT_REPO_URL, k as JANT_BRAND_PACK_FILENAME, l as extractBodyText, m as trimTiptapBody, o as render, p as renderTiptapJson, s as toPlainText, t as createExportService, u as extractSummary, v as getPublicUrlForProvider, w as now, x as formatRelativeTime, y as formatDate, z as getJantLogoFills } from "./export-DLukCOO3.js";
|
|
3
3
|
import { S as getTelegramWebhookSecret, T as coalesceDisplayText, _ as getInternalAdminToken, a as getConfiguredSingleSiteUrl, b as getSiteResolutionMode, c as getDevApiToken, d as getHostedControlPlaneBaseUrl, f as getHostedControlPlaneDomainCheckSecret, g as getHostedControlPlaneSsoSecret, h as getHostedControlPlaneProviderLabel$1, i as getConfiguredSingleSitePathPrefix, l as getEnvString, m as getHostedControlPlaneInternalToken, n as getAuthSecret, o as getConfiguredStorageDriver, p as getHostedControlPlaneInternalBaseUrl, r as getConfiguredSingleSiteOrigin, s as getCorsOrigins, u as getGitHubAppConfig, v as getLocalStoragePath, w as shouldUseSecureCookies, x as getTelegramBotPool } from "./env-CoSe-1y4.js";
|
|
4
|
-
import { l as markdownToTiptapJson, o as createGitHubSyncService } from "./github-sync-
|
|
4
|
+
import { l as markdownToTiptapJson, o as createGitHubSyncService } from "./github-sync-BtHY2AST.js";
|
|
5
5
|
import { a as listInstallationReposPage, n as getInstallation, o as searchInstallationRepos, t as buildInstallUrl } from "./github-app-DeX6Td1O.js";
|
|
6
6
|
import { r as parseRepoSlug, t as createGitHubClient } from "./github-api-UD4u_7fa.js";
|
|
7
7
|
import { I18n } from "@lingui/core";
|
|
@@ -3419,9 +3419,9 @@ function normalizeThemeColorForMeta(color) {
|
|
|
3419
3419
|
* internal paths (e.g. `/_assets/client-HASH.js`) embedded by the Worker build
|
|
3420
3420
|
* from the Vite client manifest. Used only in production (IS_VITE_DEV=false).
|
|
3421
3421
|
*/ var IS_VITE_DEV = typeof __JANT_DEV__ !== "undefined" && __JANT_DEV__ === true;
|
|
3422
|
-
var CORE_VERSION = "0.6.
|
|
3423
|
-
var CLIENT_JS_FILE = "/_assets/client-
|
|
3424
|
-
var CLIENT_AUTH_JS_FILE = "/_assets/client-auth-
|
|
3422
|
+
var CORE_VERSION = "0.6.5-49e3f862b84cf06c";
|
|
3423
|
+
var CLIENT_JS_FILE = "/_assets/client-CBOLmWbM.js";
|
|
3424
|
+
var CLIENT_AUTH_JS_FILE = "/_assets/client-auth-CORG1c3c.js";
|
|
3425
3425
|
var CLIENT_CSS_FILE = "/_assets/client-BMPMuwvV.css";
|
|
3426
3426
|
var CLIENT_CJK_CSS_FILE = "/_assets/client-cjk-B7Z0snDu.css";
|
|
3427
3427
|
var CLIENT_CJK_TC_CSS_FILE = "/_assets/client-cjk-tc-BesJYrb2.css";
|
|
@@ -3740,7 +3740,7 @@ var IconSprite = () => {
|
|
|
3740
3740
|
const cjkSerifFont = appConfig?.cjkSerifFont ?? "off";
|
|
3741
3741
|
const cjkStylesheetPath = cjkSerifFont === "zh-Hans" ? IS_VITE_DEV ? assetPath("/src/style-cjk.css") : toPublicAssetPath(CLIENT_CJK_CSS_FILE, assetBasePath) : cjkSerifFont === "zh-Hant" ? IS_VITE_DEV ? assetPath("/src/style-cjk-tc.css") : toPublicAssetPath(CLIENT_CJK_TC_CSS_FILE, assetBasePath) : cjkSerifFont === "ja" ? IS_VITE_DEV ? assetPath("/src/style-cjk-jp.css") : toPublicAssetPath(CLIENT_CJK_JP_CSS_FILE, assetBasePath) : cjkSerifFont === "ko" ? IS_VITE_DEV ? assetPath("/src/style-cjk-kr.css") : toPublicAssetPath(CLIENT_CJK_KR_CSS_FILE, assetBasePath) : null;
|
|
3742
3742
|
const clientScriptPath = IS_VITE_DEV ? resolvedClientBundle === "full" ? assetPath("/src/client-auth.ts") : assetPath("/src/client.ts") : toPublicAssetPath(resolvedClientBundle === "full" ? CLIENT_AUTH_JS_FILE : CLIENT_JS_FILE, assetBasePath);
|
|
3743
|
-
const faviconAssetVersion = resolvedFaviconVersion || "0.6.
|
|
3743
|
+
const faviconAssetVersion = resolvedFaviconVersion || "0.6.5-49e3f862b84cf06c";
|
|
3744
3744
|
const resolvedFaviconHref = faviconHref ?? (faviconAssetVersion ? toPublicPath(`/favicon.ico?v=${faviconAssetVersion}`, sitePathPrefix) : toPublicPath("/favicon.ico", sitePathPrefix));
|
|
3745
3745
|
const resolvedAppleTouchHref = appleTouchHref ?? (faviconAssetVersion ? toPublicPath(`/apple-touch-icon.png?v=${faviconAssetVersion}`, sitePathPrefix) : toPublicPath("/apple-touch-icon.png", sitePathPrefix));
|
|
3746
3746
|
const socialImageHref = resolvedSocialImagePath ? toAbsoluteAssetUrl(resolvedSocialImagePath, appConfig?.siteUrl || "", sitePathPrefix) : "";
|
|
@@ -10112,6 +10112,35 @@ function getThreadPreviewState({ secondReply, penultimateReply, latestReply, tot
|
|
|
10112
10112
|
].filter((post) => post !== void 0).map((post) => post.id));
|
|
10113
10113
|
return { hiddenCount: Math.max(0, totalReplyCount - visibleReplyIds.size) };
|
|
10114
10114
|
}
|
|
10115
|
+
/**
|
|
10116
|
+
* A lone root post shorter than this (plain-text code points) comfortably
|
|
10117
|
+
* fits the thread-context height cap. Pairs with the
|
|
10118
|
+
* `--site-thread-context-max-height` token (160px) in tokens.css — revisit
|
|
10119
|
+
* both together if that cap changes.
|
|
10120
|
+
*/ var SHORT_ROOT_CHAR_LIMIT = 120;
|
|
10121
|
+
/**
|
|
10122
|
+
* First-paint guess for whether the thread-context shell will overflow its
|
|
10123
|
+
* height cap, used to pick the initial "Show more" toggle visibility.
|
|
10124
|
+
*
|
|
10125
|
+
* The client (thread-context.ts) always re-measures and corrects this, so a
|
|
10126
|
+
* wrong guess costs at most a one-time flash on load — never a wrong final
|
|
10127
|
+
* state. Kept deliberately coarse:
|
|
10128
|
+
*
|
|
10129
|
+
* - 3+ post threads stack 2+ cards in the shell — effectively always overflow.
|
|
10130
|
+
* - A lone root carrying media is tall regardless of its text length.
|
|
10131
|
+
* - Otherwise fall back to a plain-text length threshold. Only clearly short
|
|
10132
|
+
* roots flip to "fits"; anything at or above the limit keeps the historical
|
|
10133
|
+
* "assume overflow" default, so this can only remove flashes, never add them.
|
|
10134
|
+
*
|
|
10135
|
+
* @param rootPost - the thread's root post (the only post in a 2-post thread's
|
|
10136
|
+
* shell)
|
|
10137
|
+
* @param totalReplyCount - replies in the thread; `>= 2` means 3+ posts total
|
|
10138
|
+
* @returns whether to render the toggle visible on first paint
|
|
10139
|
+
*/ function threadContextAssumesOverflow({ rootPost, totalReplyCount }) {
|
|
10140
|
+
if (totalReplyCount >= 2) return true;
|
|
10141
|
+
if (rootPost.media.length > 0 || Boolean(rootPost.previewImageUrl)) return true;
|
|
10142
|
+
return [...rootPost.summary ?? ""].length >= SHORT_ROOT_CHAR_LIMIT;
|
|
10143
|
+
}
|
|
10115
10144
|
//#endregion
|
|
10116
10145
|
//#region src/ui/feed/ThreadPreview.tsx
|
|
10117
10146
|
/**
|
|
@@ -10133,6 +10162,10 @@ var ThreadPreview = ({ rootPost, secondReply, penultimateReply, latestReply, tot
|
|
|
10133
10162
|
latestReply,
|
|
10134
10163
|
totalReplyCount
|
|
10135
10164
|
});
|
|
10165
|
+
const assumeOverflow = threadContextAssumesOverflow({
|
|
10166
|
+
rootPost,
|
|
10167
|
+
totalReplyCount
|
|
10168
|
+
});
|
|
10136
10169
|
const hiddenPostsLabel = i18n._({ id: "oO0hKx" }, { count: hiddenCount });
|
|
10137
10170
|
const showMoreLabel = i18n._({ id: "fMPkxb" });
|
|
10138
10171
|
const showLessLabel = i18n._({ id: "6lGV3K" });
|
|
@@ -10192,6 +10225,7 @@ var ThreadPreview = ({ rootPost, secondReply, penultimateReply, latestReply, tot
|
|
|
10192
10225
|
"data-label-more": showMoreLabel,
|
|
10193
10226
|
"data-label-less": showLessLabel,
|
|
10194
10227
|
"aria-expanded": "false",
|
|
10228
|
+
hidden: !assumeOverflow,
|
|
10195
10229
|
children: [/* @__PURE__ */ jsxDEV$1("span", {
|
|
10196
10230
|
class: "thread-context-toggle-label",
|
|
10197
10231
|
children: showMoreLabel
|
|
@@ -13223,7 +13257,7 @@ function getMediaMeta(item) {
|
|
|
13223
13257
|
if (category === "video") {
|
|
13224
13258
|
const poster = item.posterUrl || item.thumbnailUrl;
|
|
13225
13259
|
const dims = item.width && item.height ? ` width="${item.width}" height="${item.height}"` : "";
|
|
13226
|
-
const label =
|
|
13260
|
+
const label = `▶ Watch video${meta ? ` · ${meta}` : ""}`;
|
|
13227
13261
|
return `<figure><a href="${url}"><img src="${escapeXml(poster)}" alt="${escapeXml(altText || name)}"${dims}/></a><figcaption>${escapeXml(label)}</figcaption></figure>`;
|
|
13228
13262
|
}
|
|
13229
13263
|
if (category === "audio") return `<p><a href="${url}">${buildAttachmentLinkText(item, "Audio")}</a>${meta ? ` (${escapeXml(meta)})` : ""}</p>`;
|
|
@@ -21146,7 +21180,7 @@ async function syncHostedControlPlaneSiteAvatar(input) {
|
|
|
21146
21180
|
return;
|
|
21147
21181
|
}
|
|
21148
21182
|
await markSyncPending(settings);
|
|
21149
|
-
const { createGitHubSyncService } = await import("./github-sync-
|
|
21183
|
+
const { createGitHubSyncService } = await import("./github-sync-BeDecPen.js");
|
|
21150
21184
|
const { getGitHubAppConfig } = await import("./env-CoSe-1y4.js").then((n) => n.t);
|
|
21151
21185
|
const run = runBackgroundSync(settings, createGitHubSyncService(c.var.services, c.var.currentSite.id, await buildSyncSiteConfig(c), {
|
|
21152
21186
|
storage: c.var.storage,
|
|
@@ -21934,7 +21968,7 @@ settingsRoutes.post("/github-sync/connect", async (c) => {
|
|
|
21934
21968
|
await c.var.services.settings.set("GITHUB_SYNC_AUTH_MODE", "pat");
|
|
21935
21969
|
await c.var.services.settings.set("GITHUB_SYNC_APP_INSTALLATION_ID", "");
|
|
21936
21970
|
await c.var.services.settings.set("GITHUB_SYNC_ENABLED", "true");
|
|
21937
|
-
const { createGitHubSyncService } = await import("./github-sync-
|
|
21971
|
+
const { createGitHubSyncService } = await import("./github-sync-BeDecPen.js");
|
|
21938
21972
|
const syncService = createGitHubSyncService(c.var.services, c.var.currentSite.id, await buildSyncSiteConfig(c), {
|
|
21939
21973
|
storage: c.var.storage,
|
|
21940
21974
|
githubApp: getGitHubAppConfig(c.env)
|
|
@@ -21953,7 +21987,7 @@ settingsRoutes.post("/github-sync/connect", async (c) => {
|
|
|
21953
21987
|
return dsRedirect(publicPath(c, "/settings/github-sync"));
|
|
21954
21988
|
});
|
|
21955
21989
|
settingsRoutes.post("/github-sync/push", async (c) => {
|
|
21956
|
-
const { createGitHubSyncService } = await import("./github-sync-
|
|
21990
|
+
const { createGitHubSyncService } = await import("./github-sync-BeDecPen.js");
|
|
21957
21991
|
const syncService = createGitHubSyncService(c.var.services, c.var.currentSite.id, await buildSyncSiteConfig(c), {
|
|
21958
21992
|
storage: c.var.storage,
|
|
21959
21993
|
githubApp: getGitHubAppConfig(c.env)
|
|
@@ -21973,7 +22007,7 @@ settingsRoutes.post("/github-sync/push", async (c) => {
|
|
|
21973
22007
|
});
|
|
21974
22008
|
});
|
|
21975
22009
|
settingsRoutes.post("/github-sync/disconnect", async (c) => {
|
|
21976
|
-
const { createGitHubSyncService } = await import("./github-sync-
|
|
22010
|
+
const { createGitHubSyncService } = await import("./github-sync-BeDecPen.js");
|
|
21977
22011
|
await createGitHubSyncService(c.var.services, c.var.currentSite.id, await buildSyncSiteConfig(c), { githubApp: getGitHubAppConfig(c.env) }).teardownWebhook();
|
|
21978
22012
|
return dsRedirect(publicPath(c, "/settings/github-sync"));
|
|
21979
22013
|
});
|
|
@@ -22164,7 +22198,7 @@ function buildRepoPickerLabels(c) {
|
|
|
22164
22198
|
const { parseRepoSlug, createGitHubClient } = await import("./github-api-UD4u_7fa.js").then((n) => n.n);
|
|
22165
22199
|
const parsed = parseRepoSlug(repo);
|
|
22166
22200
|
if (!parsed) return wantsJson ? c.json({ error: "Invalid repository format." }, 400) : c.text("Invalid repository format.", 400);
|
|
22167
|
-
const { classifyRepoForSync } = await import("./github-sync-
|
|
22201
|
+
const { classifyRepoForSync } = await import("./github-sync-BeDecPen.js");
|
|
22168
22202
|
const ghClient = createGitHubClient(() => getInstallationTokenFromApp(app, installationId));
|
|
22169
22203
|
let classification;
|
|
22170
22204
|
try {
|
|
@@ -22194,7 +22228,7 @@ function buildRepoPickerLabels(c) {
|
|
|
22194
22228
|
await c.var.services.settings.set("GITHUB_SYNC_REPO", repo);
|
|
22195
22229
|
await c.var.services.settings.set("GITHUB_SYNC_TOKEN", "");
|
|
22196
22230
|
await c.var.services.settings.set("GITHUB_SYNC_ENABLED", "true");
|
|
22197
|
-
const { createGitHubSyncService } = await import("./github-sync-
|
|
22231
|
+
const { createGitHubSyncService } = await import("./github-sync-BeDecPen.js");
|
|
22198
22232
|
const syncService = createGitHubSyncService(c.var.services, c.var.currentSite.id, await buildSyncSiteConfig(c), {
|
|
22199
22233
|
storage: c.var.storage,
|
|
22200
22234
|
githubApp: app
|
|
@@ -22310,7 +22344,7 @@ function requireGitHubApp(c) {
|
|
|
22310
22344
|
const { parseRepoSlug, createGitHubClient } = await import("./github-api-UD4u_7fa.js").then((n) => n.n);
|
|
22311
22345
|
const parsed = parseRepoSlug(repo);
|
|
22312
22346
|
if (!parsed) return c.json({ error: "Invalid repository format." }, 400);
|
|
22313
|
-
const { classifyRepoForSync } = await import("./github-sync-
|
|
22347
|
+
const { classifyRepoForSync } = await import("./github-sync-BeDecPen.js");
|
|
22314
22348
|
const client = createGitHubClient(() => getInstallationTokenFromApp(app, installationId));
|
|
22315
22349
|
try {
|
|
22316
22350
|
const classification = await classifyRepoForSync(client, parsed.owner, parsed.repo, c.var.currentSite.id);
|
|
@@ -22908,12 +22942,12 @@ customUrlsRoutes.post("/", async (c) => {
|
|
|
22908
22942
|
let targetId = body.targetId;
|
|
22909
22943
|
if (body.targetType === "post" && body.targetId) {
|
|
22910
22944
|
const post = await c.var.services.posts.getBySlug(body.targetId);
|
|
22911
|
-
if (!post)
|
|
22945
|
+
if (!post) throw new NotFoundError(`Post with slug "${body.targetId}"`);
|
|
22912
22946
|
targetId = post.id;
|
|
22913
22947
|
}
|
|
22914
22948
|
if (body.targetType === "collection" && body.targetId) {
|
|
22915
22949
|
const col = await c.var.services.collections.getBySlug(body.targetId);
|
|
22916
|
-
if (!col)
|
|
22950
|
+
if (!col) throw new NotFoundError(`Collection with slug "${body.targetId}"`);
|
|
22917
22951
|
targetId = col.id;
|
|
22918
22952
|
}
|
|
22919
22953
|
await c.var.services.customUrls.create({
|
|
@@ -25870,12 +25904,12 @@ customUrlsApiRoutes.post("/", requireAuthApi(), async (c) => {
|
|
|
25870
25904
|
let targetId = body.targetId;
|
|
25871
25905
|
if (body.targetType === "post" && body.targetId) {
|
|
25872
25906
|
const post = await c.var.services.posts.getBySlug(body.targetId);
|
|
25873
|
-
if (!post) throw new NotFoundError(`Post with slug "${body.targetId}"
|
|
25907
|
+
if (!post) throw new NotFoundError(`Post with slug "${body.targetId}"`);
|
|
25874
25908
|
targetId = post.id;
|
|
25875
25909
|
}
|
|
25876
25910
|
if (body.targetType === "collection" && body.targetId) {
|
|
25877
25911
|
const col = await c.var.services.collections.getBySlug(body.targetId);
|
|
25878
|
-
if (!col) throw new NotFoundError(`Collection with slug "${body.targetId}"
|
|
25912
|
+
if (!col) throw new NotFoundError(`Collection with slug "${body.targetId}"`);
|
|
25879
25913
|
targetId = col.id;
|
|
25880
25914
|
}
|
|
25881
25915
|
const customUrl = await c.var.services.customUrls.create({
|
|
@@ -27844,6 +27878,55 @@ manifestRoutes.get("/manifest.webmanifest", (c) => {
|
|
|
27844
27878
|
};
|
|
27845
27879
|
}
|
|
27846
27880
|
//#endregion
|
|
27881
|
+
//#region src/middleware/cache-control.ts
|
|
27882
|
+
/**
|
|
27883
|
+
* Cache-Control Middleware
|
|
27884
|
+
*
|
|
27885
|
+
* Sets a safe default `Cache-Control` on responses that don't declare one.
|
|
27886
|
+
*
|
|
27887
|
+
* Almost every Jant page is auth-variant: the same URL renders differently
|
|
27888
|
+
* for the signed-in author (nav, the "more" menu, edit affordances) than for
|
|
27889
|
+
* an anonymous visitor. A shared/CDN cache keyed only by URL must therefore
|
|
27890
|
+
* never store these pages — otherwise it serves a stale or wrong-audience
|
|
27891
|
+
* snapshot, which both breaks the UI ("you still look signed out", "your edit
|
|
27892
|
+
* didn't take effect") and can leak the authenticated dashboard to the public.
|
|
27893
|
+
*
|
|
27894
|
+
* Jant is self-hosted software that runs behind whatever reverse proxy or CDN
|
|
27895
|
+
* the operator chooses, so it cannot rely on infrastructure config to get
|
|
27896
|
+
* this right — it must declare its own cache policy. The critical mistake is
|
|
27897
|
+
* emitting `Cache-Control: public`: that word is an explicit invitation for
|
|
27898
|
+
* any shared cache to store the response.
|
|
27899
|
+
*
|
|
27900
|
+
* Routes that serve genuinely public, auth-invariant resources (media, feeds,
|
|
27901
|
+
* sitemaps, favicons, manifests, static assets) set their own `Cache-Control`
|
|
27902
|
+
* explicitly; this middleware leaves those untouched and only fills in the
|
|
27903
|
+
* default for the un-annotated dynamic responses.
|
|
27904
|
+
*/ /**
|
|
27905
|
+
* Default cache directive for dynamic, potentially auth-variant responses.
|
|
27906
|
+
* `private` forbids shared/CDN caches from storing the response; `no-store`
|
|
27907
|
+
* prevents any cache (including the browser) from keeping a copy.
|
|
27908
|
+
*/ var DEFAULT_CACHE_CONTROL = "private, no-store";
|
|
27909
|
+
/**
|
|
27910
|
+
* Middleware that defaults a missing `Cache-Control` header to
|
|
27911
|
+
* `private, no-store`.
|
|
27912
|
+
*
|
|
27913
|
+
* Runs after the route handler: if the handler (or an inner middleware)
|
|
27914
|
+
* already set `Cache-Control`, that explicit value wins. Only responses that
|
|
27915
|
+
* declare nothing receive the safe default.
|
|
27916
|
+
*
|
|
27917
|
+
* @returns Hono middleware enforcing the default cache policy.
|
|
27918
|
+
*
|
|
27919
|
+
* @example
|
|
27920
|
+
* ```ts
|
|
27921
|
+
* app.use("*", defaultCacheControl());
|
|
27922
|
+
* ```
|
|
27923
|
+
*/ function defaultCacheControl() {
|
|
27924
|
+
return async (c, next) => {
|
|
27925
|
+
await next();
|
|
27926
|
+
if (!c.res.headers.has("Cache-Control")) c.res.headers.set("Cache-Control", DEFAULT_CACHE_CONTROL);
|
|
27927
|
+
};
|
|
27928
|
+
}
|
|
27929
|
+
//#endregion
|
|
27847
27930
|
//#region src/middleware/onboarding.ts
|
|
27848
27931
|
/**
|
|
27849
27932
|
* Onboarding Middleware
|
|
@@ -32692,7 +32775,7 @@ function createSiteAdminService(db, databaseSchema = sqliteSchemaBundle, databas
|
|
|
32692
32775
|
const themeCss = buildThemeStyle(activeTheme, appConfig.themeMode, fontOverrides);
|
|
32693
32776
|
const navItemList = await navItems.list();
|
|
32694
32777
|
const appleTouchKey = allSettings[SETTINGS_KEYS.SITE_FAVICON_APPLE_TOUCH];
|
|
32695
|
-
const { createExportService } = await import("./export-
|
|
32778
|
+
const { createExportService } = await import("./export-DLukCOO3.js").then((n) => n.n);
|
|
32696
32779
|
const exportService = createExportService({
|
|
32697
32780
|
collections,
|
|
32698
32781
|
media: mediaService,
|
|
@@ -34129,6 +34212,7 @@ async function servePublicStorage(c) {
|
|
|
34129
34212
|
await next();
|
|
34130
34213
|
});
|
|
34131
34214
|
app.use("*", attachSession());
|
|
34215
|
+
app.use("*", defaultCacheControl());
|
|
34132
34216
|
app.use("*", async (c, next) => {
|
|
34133
34217
|
const redirectUrl = await getHostedCanonicalRedirect({
|
|
34134
34218
|
currentSite: c.var.currentSite,
|
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
"name": "url"
|
|
147
147
|
},
|
|
148
148
|
"src/client-auth.ts": {
|
|
149
|
-
"file": "_assets/client-auth-
|
|
149
|
+
"file": "_assets/client-auth-CORG1c3c.js",
|
|
150
150
|
"name": "client-auth",
|
|
151
151
|
"src": "src/client-auth.ts",
|
|
152
152
|
"isEntry": true,
|
|
@@ -163,7 +163,7 @@
|
|
|
163
163
|
]
|
|
164
164
|
},
|
|
165
165
|
"src/client.ts": {
|
|
166
|
-
"file": "_assets/client-
|
|
166
|
+
"file": "_assets/client-CBOLmWbM.js",
|
|
167
167
|
"name": "client",
|
|
168
168
|
"src": "src/client.ts",
|
|
169
169
|
"isEntry": true,
|
|
@@ -5,7 +5,7 @@ Context: ${JSON.stringify(n,null,2)}`,r},Pe=new Map,Fe=new Map,Ie=new Map,Le=new
|
|
|
5
5
|
`)){let e=t.indexOf(` `),r=t.slice(0,e),i=t.slice(e+1);(n[r]||=[]).push(i)}A(t,r,Object.fromEntries(Object.entries(n).map(([e,t])=>[e,t.join(`
|
|
6
6
|
`)])))},onerror:e=>{if(at(e))throw e(`FetchExpectedTextEventStream`,{url:s});e&&(console.error(e.message),A(rt,r,{message:e.message}))}},h=new URL(s,document.baseURI),ne=new URLSearchParams(h.search);if(u===`json`){b(),m=m===void 0?we({include:d,exclude:f}):m,x();let e=JSON.stringify(m);t===`GET`?ne.set(`datastar`,e):o.body=e}else if(u===`form`){let e=c?document.querySelector(c):r.closest(`form`);if(!e)throw a(`FetchFormNotFound`,{action:k,selector:c});if(!e.noValidate&&!e.checkValidity()){e.reportValidity();return}let s=new FormData(e),l=r;if(r===e&&i instanceof SubmitEvent)l=i.submitter;else{let t=e=>e.preventDefault();e.addEventListener(`submit`,t),te=()=>{e.removeEventListener(`submit`,t)}}if(l instanceof HTMLButtonElement){let e=l.getAttribute(`name`);e&&s.append(e,l.value)}let u=e.getAttribute(`enctype`)===`multipart/form-data`;u||(n[`Content-Type`]=`application/x-www-form-urlencoded`);let d=new URLSearchParams(s);if(t===`GET`)for(let[e,t]of d)ne.append(e,t);else u?o.body=s:o.body=d}else throw a(`FetchInvalidContentType`,{action:k,contentType:u});A(et,r,{}),h.search=ne.toString();try{await dt(h.toString(),r,o)}catch(e){if(!at(e))throw a(`FetchFailed`,{method:t,url:s,error:e.message})}}finally{A(tt,r,{}),te?.(),o.delete(`@${e}`)}}});$e(`get`,`GET`,!1),$e(`patch`,`PATCH`),$e(`post`,`POST`),$e(`put`,`PUT`),$e(`delete`,`DELETE`);var et=`started`,tt=`finished`,nt=`error`,rt=`retrying`,it=`retries-failed`,A=(e,t,n)=>document.dispatchEvent(new CustomEvent(i,{detail:{type:e,el:t,argsRaw:n}})),at=e=>`${e}`.includes(`text/event-stream`),ot=async(e,t)=>{let n=e.getReader(),r=await n.read();for(;!r.done;)t(r.value),r=await n.read()},st=e=>{let t,n,r,i=!1;return a=>{t?t=lt(t,a):(t=a,n=0,r=-1);let o=t.length,s=0;for(;n<o;){i&&=(t[n]===10&&(s=++n),!1);let a=-1;for(;n<o&&a===-1;++n)switch(t[n]){case 58:r===-1&&(r=n-s);break;case 13:i=!0;case 10:a=n;break}if(a===-1)break;e(t.subarray(s,a),r),s=n,r=-1}s===o?t=void 0:s&&(t=t.subarray(s),n-=s)}},ct=(e,t,n)=>{let r=ut(),i=new TextDecoder;return(a,o)=>{if(!a.length)n?.(r),r=ut();else if(o>0){let n=i.decode(a.subarray(0,o)),s=o+(a[o+1]===32?2:1),c=i.decode(a.subarray(s));switch(n){case`data`:r.data=r.data?`${r.data}
|
|
7
7
|
${c}`:c;break;case`event`:r.event=c;break;case`id`:e(r.id=c);break;case`retry`:{let e=+c;Number.isNaN(e)||t(r.retry=e);break}}}}},lt=(e,t)=>{let n=new Uint8Array(e.length+t.length);return n.set(e),n.set(t,e.length),n},ut=()=>({data:``,event:``,id:``,retry:void 0}),dt=(e,t,{signal:n,headers:r,onopen:i,onmessage:a,onclose:o,onerror:s,openWhenHidden:c,fetch:l,retry:u=`auto`,retryInterval:d=1e3,retryScaler:f=2,retryMaxWaitMs:p=3e4,retryMaxCount:m=10,responseOverrides:h,...ee})=>new Promise((g,_)=>{let v={...r},y,b=()=>{y.abort(),document.hidden||w()};c||document.addEventListener(`visibilitychange`,b);let x,S=()=>{document.removeEventListener(`visibilitychange`,b),clearTimeout(x),y.abort()};n?.addEventListener(`abort`,()=>{S(),g()});let te=l||window.fetch,ne=i||(()=>{}),C=0,re=d,w=async()=>{y=new AbortController;let n=y.signal;try{let r=await te(e,{...ee,headers:v,signal:n});await ne(r);let i=async(e,n,r,i,...a)=>{let o={[r]:await n.text()};for(let e of a){let t=n.headers.get(`datastar-${De(e)}`);if(i){let n=i[e];n&&(t=typeof n==`string`?n:JSON.stringify(n))}t&&(o[e]=t)}A(e,t,o),S(),g()},s=r.status,c=s===204,l=s>=300&&s<400,f=s>=400&&s<600;if(s!==200){if(o?.(),u!==`never`&&!c&&!l&&(u===`always`||u===`error`&&f)){clearTimeout(x),x=setTimeout(w,d);return}S(),g();return}C=0,d=re;let p=r.headers.get(`Content-Type`);if(p?.includes(`text/html`))return await i(`datastar-patch-elements`,r,`elements`,h,`selector`,`mode`,`namespace`,`useViewTransition`);if(p?.includes(`application/json`))return await i(`datastar-patch-signals`,r,`signals`,h,`onlyIfMissing`);if(p?.includes(`text/javascript`)){let e=document.createElement(`script`),t=r.headers.get(`datastar-script-attributes`);if(t)for(let[n,r]of Object.entries(JSON.parse(t)))e.setAttribute(n,r);e.textContent=await r.text(),document.head.appendChild(e),S();return}if(await ot(r.body,st(ct(e=>{e?v[`last-event-id`]=e:delete v[`last-event-id`]},e=>{re=d=e},a))),o?.(),u===`always`&&!l){clearTimeout(x),x=setTimeout(w,d);return}S(),g()}catch(r){if(!n.aborted)try{let n=s?.(r)||d;clearTimeout(x),x=setTimeout(w,n),d=Math.min(d*f,p),++C>=m?(A(it,t,{}),S(),_(`Max retries reached.`)):console.error(`Datastar failed to reach ${e.toString()} retrying in ${n}ms.`)}catch(e){S(),_(e)}}};w()});O({name:`attr`,requirement:{value:`must`},returnsValue:!0,apply({el:e,key:t,rx:n}){let r=(t,n)=>{n===``||n===!0?e.setAttribute(t,``):n===!1||n==null?e.removeAttribute(t):typeof n==`string`?e.setAttribute(t,n):e.setAttribute(t,JSON.stringify(n))},i=t?()=>{a.disconnect(),r(t,n()),a.observe(e,{attributeFilter:[t]})}:()=>{a.disconnect();let t=n(),i=Object.keys(t);for(let e of i)r(e,t[e]);a.observe(e,{attributeFilter:i})},a=new MutationObserver(i),o=C(i);return()=>{a.disconnect(),o()}}});var ft=/^data:(?<mime>[^;]+);base64,(?<contents>.*)$/,pt=Symbol(`empty`),mt=je(`bind`);O({name:`bind`,requirement:`exclusive`,apply({el:e,key:t,mods:n,value:r,error:i}){let a=t==null?r:D(t,n),o=(e,t)=>t===`number`?+e.value:e.value,s=t=>{e.value=`${t}`};if(e instanceof HTMLInputElement)switch(e.type){case`range`:case`number`:o=(e,t)=>t===`string`?e.value:+e.value;break;case`checkbox`:o=(e,t)=>e.value===`on`?t===`string`?e.checked?e.value:``:e.checked:t===`boolean`?e.checked:e.checked?e.value:``,s=t=>{e.checked=typeof t==`string`?t===e.value:t};break;case`radio`:e.getAttribute(`name`)?.length||e.setAttribute(`name`,a),o=(e,t)=>e.checked?t===`number`?+e.value:e.value:pt,s=t=>{e.checked=t===(typeof t==`number`?+e.value:e.value)};break;case`file`:{let t=()=>{let t=[...e.files||[]],n=[];Promise.all(t.map(e=>new Promise(t=>{let r=new FileReader;r.onload=()=>{if(typeof r.result!=`string`)throw i(`InvalidFileResultType`,{resultType:typeof r.result});let t=r.result.match(ft);if(!t?.groups)throw i(`InvalidDataUri`,{result:r.result});n.push({name:e.name,contents:t.groups.contents,mime:t.groups.mime})},r.onloadend=()=>t(),r.readAsDataURL(e)}))).then(()=>{E([[a,n]])})};return e.addEventListener(`change`,t),e.addEventListener(`input`,t),()=>{e.removeEventListener(`change`,t),e.removeEventListener(`input`,t)}}}else if(e instanceof HTMLSelectElement){if(e.multiple){let t=new Map;o=e=>[...e.selectedOptions].map(e=>{let n=t.get(e.value);return n===`string`||n==null?e.value:+e.value}),s=n=>{for(let r of e.options)n.includes(r.value)?(t.set(r.value,`string`),r.selected=!0):n.includes(+r.value)?(t.set(r.value,`number`),r.selected=!0):r.selected=!1}}}else e instanceof HTMLTextAreaElement||(o=e=>`value`in e?e.value:e.getAttribute(`value`),s=t=>{`value`in e?e.value=t:e.setAttribute(`value`,t)});let c=ye(a),l=typeof c,u=a;if(Array.isArray(c)&&!(e instanceof HTMLSelectElement&&e.multiple)){let n=t||r,i=document.querySelectorAll(`[${mt}\\:${CSS.escape(n)}],[${mt}="${CSS.escape(n)}"]`),a=[],s=0;for(let t of i){if(a.push([`${u}.${s}`,o(t,`none`)]),e===t)break;s++}E(a,{ifMissing:!0}),u=`${u}.${s}`}else E([[u,o(e,l)]],{ifMissing:!0});let d=()=>{let t=ye(u);if(t!=null){let n=o(e,typeof t);n!==pt&&E([[u,n]])}};e.addEventListener(`input`,d),e.addEventListener(`change`,d);let f=C(()=>{s(ye(u))});return()=>{f(),e.removeEventListener(`input`,d),e.removeEventListener(`change`,d)}}}),O({name:`class`,requirement:{value:`must`},returnsValue:!0,apply({key:e,el:t,mods:n,rx:r}){e&&=D(e,n,`kebab`);let i,a=()=>{o.disconnect(),i=e?{[e]:r()}:r();for(let e in i){let n=e.split(/\s+/).filter(e=>e.length>0);if(i[e])for(let e of n)t.classList.contains(e)||t.classList.add(e);else for(let e of n)t.classList.contains(e)&&t.classList.remove(e)}o.observe(t,{attributeFilter:[`class`]})},o=new MutationObserver(a),s=C(a);return()=>{o.disconnect(),s();for(let e in i){let n=e.split(/\s+/).filter(e=>e.length>0);for(let e of n)t.classList.remove(e)}}}}),O({name:`computed`,requirement:{value:`must`},returnsValue:!0,apply({key:e,mods:t,rx:n,error:r}){if(e)E([[D(e,t),ne(n)]]);else{let e=Object.assign({},n());l(e,e=>{if(typeof e==`function`)return ne(e);throw r(`ComputedExpectedFunction`)}),xe(e)}}}),O({name:`effect`,requirement:{key:`denied`,value:`must`},apply:({rx:e})=>C(e)}),O({name:`indicator`,requirement:`exclusive`,apply({el:e,key:t,mods:n,value:r}){let a=t==null?r:D(t,n);E([[a,!1]]);let o=t=>{let{type:n,el:r}=t.detail;if(r===e)switch(n){case et:E([[a,!0]]);break;case tt:E([[a,!1]]);break}};return document.addEventListener(i,o),()=>{E([[a,!1]]),document.removeEventListener(i,o)}}});var ht=e=>{if(!e||e.size<=0)return 0;for(let t of e){if(t.endsWith(`ms`))return+t.replace(`ms`,``);if(t.endsWith(`s`))return t.replace(`s`,``)*1e3;try{return Number.parseFloat(t)}catch{}}return 0},gt=(e,t,n=!1)=>e?e.has(t.toLowerCase()):n,_t=(e,t)=>(...n)=>{setTimeout(()=>{e(...n)},t)},vt=(e,t,n=!0,r=!1,i=!1)=>{let a=null,o=0;return(...s)=>{n&&!o?(e(...s),a=null):a=s,(!o||i)&&(o&&clearTimeout(o),o=setTimeout(()=>{r&&a!==null&&e(...a),a=null,o=0},t))}},yt=(e,t)=>{let n=t.get(`delay`);if(n){let t=ht(n);e=_t(e,t)}let r=t.get(`debounce`);if(r){let t=ht(r),n=gt(r,`leading`,!1),i=!gt(r,`notrailing`,!1);e=vt(e,t,n,i,!0)}let i=t.get(`throttle`);if(i){let t=ht(i),n=!gt(i,`noleading`,!1),r=gt(i,`trailing`,!1);e=vt(e,t,n,r)}return e},bt=!!document.startViewTransition,xt=(e,t)=>{if(t.has(`viewtransition`)&&bt){let t=e;e=(...e)=>document.startViewTransition(()=>t(...e))}return e};O({name:`init`,requirement:{key:`denied`,value:`must`},apply({rx:e,mods:t}){let n=()=>{v(),e(),y()};n=xt(n,t);let r=0,i=t.get(`delay`);i&&(r=ht(i),r>0&&(n=_t(n,r))),n()}}),O({name:`json-signals`,requirement:{key:`denied`},apply({el:e,value:t,mods:n}){let r=n.has(`terse`)?0:2,i={};t&&(i=ke(t));let a=()=>{o.disconnect(),e.textContent=JSON.stringify(we(i),null,r),o.observe(e,{childList:!0,characterData:!0,subtree:!0})},o=new MutationObserver(a),s=C(a);return()=>{o.disconnect(),s()}}}),O({name:`on`,requirement:`must`,argNames:[`evt`],apply({el:e,key:t,mods:n,rx:r}){let o=e;n.has(`window`)&&(o=window);let s=e=>{e&&(n.has(`prevent`)&&e.preventDefault(),n.has(`stop`)&&e.stopPropagation()),v(),r(e),y()};s=xt(s,n),s=yt(s,n);let c={capture:n.has(`capture`),passive:n.has(`passive`),once:n.has(`once`)};if(n.has(`outside`)){o=document;let t=s;s=n=>{e.contains(n?.target)||t(n)}}let l=D(t,n,`kebab`);if((l===i||l===a)&&(o=document),e instanceof HTMLFormElement&&l===`submit`){let e=s;s=t=>{t?.preventDefault(),e(t)}}return o.addEventListener(l,s,c),()=>{o.removeEventListener(l,s)}}});var St=(e,t,n)=>Math.max(t,Math.min(n,e)),Ct=new WeakSet;O({name:`on-intersect`,requirement:{key:`denied`,value:`must`},apply({el:e,mods:t,rx:n}){let r=()=>{v(),n(),y()};r=xt(r,t),r=yt(r,t);let i={threshold:0};t.has(`full`)?i.threshold=1:t.has(`half`)?i.threshold=.5:t.get(`threshold`)&&(i.threshold=St(Number(t.get(`threshold`)),0,100)/100);let a=t.has(`exit`),o=new IntersectionObserver(t=>{for(let n of t)n.isIntersecting!==a&&(r(),o&&Ct.has(e)&&o.disconnect())},i);return o.observe(e),t.has(`once`)&&Ct.add(e),()=>{t.has(`once`)||Ct.delete(e),o&&=(o.disconnect(),null)}}}),O({name:`on-interval`,requirement:{key:`denied`,value:`must`},apply({mods:e,rx:t}){let n=()=>{v(),t(),y()};n=xt(n,e);let r=1e3,i=e.get(`duration`);i&&(r=ht(i),gt(i,`leading`,!1)&&n());let a=setInterval(n,r);return()=>{clearInterval(a)}}}),O({name:`on-signal-patch`,requirement:{value:`must`},argNames:[`patch`],returnsValue:!0,apply({el:e,key:t,mods:n,rx:r,error:i}){if(t&&t!==`filter`)throw i(`KeyNotAllowed`);let o=je(`${this.name}-filter`),s=e.getAttribute(o),l={};s&&(l=ke(s));let u=!1,d=yt(e=>{if(u)return;let t=we(l,e.detail);if(!c(t)){u=!0,v();try{r(t)}finally{y(),u=!1}}},n);return document.addEventListener(a,d),()=>{document.removeEventListener(a,d)}}}),O({name:`ref`,requirement:`exclusive`,apply({el:e,key:t,mods:n,value:r}){E([[t==null?r:D(t,n),e]])}});var wt=`none`,Tt=`display`;O({name:`show`,requirement:{key:`denied`,value:`must`},returnsValue:!0,apply({el:e,rx:t}){let n=()=>{r.disconnect(),t()?e.style.display===wt&&e.style.removeProperty(Tt):e.style.setProperty(Tt,wt),r.observe(e,{attributeFilter:[`style`]})},r=new MutationObserver(n),i=C(n);return()=>{r.disconnect(),i()}}}),O({name:`signals`,returnsValue:!0,apply({key:e,mods:t,rx:n}){let r=t.has(`ifmissing`);e?(e=D(e,t),E([[e,n?.()]],{ifMissing:r})):xe(Object.assign({},n?.()),{ifMissing:r})}}),O({name:`style`,requirement:{value:`must`},returnsValue:!0,apply({key:e,el:t,rx:n}){let{style:r}=t,i=new Map,a=(e,t)=>{let n=i.get(e);!t&&t!==0?n!==void 0&&(n?r.setProperty(e,n):r.removeProperty(e)):(n===void 0&&i.set(e,r.getPropertyValue(e)),r.setProperty(e,String(t)))},o=()=>{if(s.disconnect(),e)a(e,n());else{let e=n();for(let[t,n]of i)t in e||(n?r.setProperty(t,n):r.removeProperty(t));for(let t in e)a(De(t),e[t])}s.observe(t,{attributeFilter:[`style`]})},s=new MutationObserver(o),c=C(o);return()=>{s.disconnect(),c();for(let[e,t]of i)t?r.setProperty(e,t):r.removeProperty(e)}}}),O({name:`text`,requirement:{key:`denied`,value:`must`},returnsValue:!0,apply({el:e,rx:t}){let n=()=>{r.disconnect(),e.textContent=`${t()}`,r.observe(e,{childList:!0,characterData:!0,subtree:!0})},r=new MutationObserver(n),i=C(n);return()=>{r.disconnect(),i()}}});var Et=(e,t)=>e.includes(t),Dt=[`remove`,`outer`,`inner`,`replace`,`prepend`,`append`,`before`,`after`],Ot=[`html`,`svg`,`mathml`];He({name:`datastar-patch-elements`,apply(e,{selector:t=``,mode:n=`outer`,namespace:r=`html`,useViewTransition:i=``,elements:a=``}){if(!Et(Dt,n))throw e.error(`PatchElementsInvalidMode`,{mode:n});if(!t&&n!==`outer`&&n!==`replace`)throw e.error(`PatchElementsExpectedSelector`);if(!Et(Ot,r))throw e.error(`PatchElementsInvalidNamespace`,{namespace:r});let o={selector:t,mode:n,namespace:r,useViewTransition:i.trim()===`true`,elements:a};bt&&i?document.startViewTransition(()=>kt(e,o)):kt(e,o)}});var kt=({error:e},{selector:t,mode:n,namespace:r,elements:i})=>{let a=i.replace(/<svg(\s[^>]*>|>)([\s\S]*?)<\/svg>/gim,``),o=/<\/html>/.test(a),s=/<\/head>/.test(a),c=/<\/body>/.test(a),l=r===`svg`?`svg`:r===`mathml`?`math`:``,u=l?`<${l}>${i}</${l}>`:i,d=new DOMParser().parseFromString(o||s||c?i:`<body><template>${u}</template></body>`,`text/html`),f=document.createDocumentFragment();if(o)f.appendChild(d.documentElement);else if(s&&c)f.appendChild(d.head),f.appendChild(d.body);else if(s)f.appendChild(d.head);else if(c)f.appendChild(d.body);else if(l){let e=d.querySelector(`template`).content.querySelector(l);for(let t of e.childNodes)f.appendChild(t)}else f=d.querySelector(`template`).content;if(!t&&(n===`outer`||n===`replace`))for(let t of f.children){let r;if(t instanceof HTMLHtmlElement)r=document.documentElement;else if(t instanceof HTMLBodyElement)r=document.body;else if(t instanceof HTMLHeadElement)r=document.head;else if(r=document.getElementById(t.id),!r){console.warn(e(`PatchElementsNoTargetsFound`),{element:{id:t.id}});continue}Nt(n,t,[r])}else{let r=document.querySelectorAll(t);if(!r.length){console.warn(e(`PatchElementsNoTargetsFound`),{selector:t});return}Nt(n,f,r)}},At=new WeakSet;for(let e of document.querySelectorAll(`script`))At.add(e);var jt=e=>{let t=e instanceof HTMLScriptElement?[e]:e.querySelectorAll(`script`);for(let e of t)if(!At.has(e)){let t=document.createElement(`script`);for(let{name:n,value:r}of e.attributes)t.setAttribute(n,r);t.text=e.text,e.replaceWith(t),At.add(t)}},Mt=(e,t,n)=>{for(let r of e){let e=t.cloneNode(!0);jt(e),r[n](e)}},Nt=(e,t,n)=>{switch(e){case`remove`:for(let e of n)e.remove();break;case`outer`:case`inner`:for(let r of n)Bt(r,t.cloneNode(!0),e),jt(r);break;case`replace`:Mt(n,t,`replaceWith`);break;case`prepend`:case`append`:case`before`:case`after`:Mt(n,t,e)}},j=new Map,Pt=new Set,Ft=new Map,It=new Set,Lt=document.createElement(`div`);Lt.hidden=!0;var Rt=je(`ignore-morph`),zt=`[${Rt}]`,Bt=(e,t,n=`outer`)=>{if(Ee(e)&&Ee(t)&&e.hasAttribute(Rt)&&t.hasAttribute(Rt)||e.parentElement?.closest(zt))return;let r=document.createElement(`div`);r.append(t),document.body.insertAdjacentElement(`afterend`,Lt);let i=e.querySelectorAll(`[id]`);for(let{id:e,tagName:t}of i)Ft.has(e)?It.add(e):Ft.set(e,t);e instanceof Element&&e.id&&(Ft.has(e.id)?It.add(e.id):Ft.set(e.id,e.tagName)),Pt.clear();let a=r.querySelectorAll(`[id]`);for(let{id:e,tagName:t}of a)Pt.has(e)?It.add(e):Ft.get(e)===t&&Pt.add(e);for(let e of It)Pt.delete(e);Ft.clear(),It.clear(),j.clear();let o=n===`outer`?e.parentElement:e;Jt(o,i),Jt(r,a),Vt(o,r,n===`outer`?e:null,e.nextSibling),Lt.remove()},Vt=(e,t,n=null,r=null)=>{e instanceof HTMLTemplateElement&&t instanceof HTMLTemplateElement&&(e=e.content,t=t.content),n??=e.firstChild;for(let i of t.childNodes){if(n&&n!==r){let e=Ht(i,n,r);if(e){if(e!==n){let t=n;for(;t&&t!==e;){let e=t;t=t.nextSibling,Wt(e)}}qt(e,i),n=e.nextSibling;continue}}if(i instanceof Element&&Pt.has(i.id)){let t=document.getElementById(i.id),r=t;for(;r=r.parentNode;){let e=j.get(r);e&&(e.delete(i.id),e.size||j.delete(r))}Gt(e,t,n),qt(t,i),n=t.nextSibling;continue}if(j.has(i)){let t=i.namespaceURI,r=i.tagName,a=t&&t!==`http://www.w3.org/1999/xhtml`?document.createElementNS(t,r):document.createElement(r);e.insertBefore(a,n),qt(a,i),n=a.nextSibling}else{let t=document.importNode(i,!0);e.insertBefore(t,n),n=t.nextSibling}}for(;n&&n!==r;){let e=n;n=n.nextSibling,Wt(e)}},Ht=(e,t,n)=>{let r=null,i=e.nextSibling,a=0,o=0,s=j.get(e)?.size||0,c=t;for(;c&&c!==n;){if(Ut(c,e)){let t=!1,n=j.get(c),i=j.get(e);if(i&&n){for(let e of n)if(i.has(e)){t=!0;break}}if(t)return c;if(!r&&!j.has(c)){if(!s)return c;r=c}}if(o+=j.get(c)?.size||0,o>s)break;r===null&&i&&Ut(c,i)&&(a++,i=i.nextSibling,a>=2&&(r=void 0)),c=c.nextSibling}return r||null},Ut=(e,t)=>e.nodeType===t.nodeType&&e.tagName===t.tagName&&(!e.id||e.id===t.id),Wt=e=>{j.has(e)?Gt(Lt,e,null):e.parentNode?.removeChild(e)},Gt=Wt.call.bind(Lt.moveBefore??Lt.insertBefore),Kt=je(`preserve-attr`),qt=(e,t)=>{let n=t.nodeType;if(n===1){let n=e,r=t,i=n.hasAttribute(`data-scope-children`);if(n.hasAttribute(Rt)&&r.hasAttribute(Rt))return e;n instanceof HTMLInputElement&&r instanceof HTMLInputElement&&r.type!==`file`?r.getAttribute(`value`)!==n.getAttribute(`value`)&&(n.value=r.getAttribute(`value`)??``):n instanceof HTMLTextAreaElement&&r instanceof HTMLTextAreaElement&&(r.value!==n.value&&(n.value=r.value),n.firstChild&&n.firstChild.nodeValue!==r.value&&(n.firstChild.nodeValue=r.value));let a=(t.getAttribute(Kt)??``).split(` `);for(let{name:e,value:t}of r.attributes)n.getAttribute(e)!==t&&!a.includes(e)&&n.setAttribute(e,t);for(let e=n.attributes.length-1;e>=0;e--){let{name:t}=n.attributes[e];!r.hasAttribute(t)&&!a.includes(t)&&n.removeAttribute(t)}i&&!n.hasAttribute(`data-scope-children`)&&n.setAttribute(`data-scope-children`,``),n.isEqualNode(r)||Vt(n,r),i&&n.dispatchEvent(new CustomEvent(`datastar:scope-children`,{bubbles:!1}))}return(n===8||n===3)&&e.nodeValue!==t.nodeValue&&(e.nodeValue=t.nodeValue),e},Jt=(e,t)=>{for(let n of t)if(Pt.has(n.id)){let t=n;for(;t&&t!==e;){let e=j.get(t);e||(e=new Set,j.set(t,e)),e.add(n.id),t=t.parentElement}}};He({name:`datastar-patch-signals`,apply({error:e},{signals:t,onlyIfMissing:n}){if(t){let e=n?.trim()===`true`;xe(ke(t),{ifMissing:e})}else throw e(`PatchSignalsExpectedSignals`)}});var M=`/_assets`;function Yt(e){let t=e.trim().replace(/\/+$/,``);return t?t.startsWith(`http://`)||t.startsWith(`https://`)||t.startsWith(`/`)?t:`/${t}`:M}function Xt(e,t=M){let n=Yt(t),r=e.replace(/^\/+/,``);return r?`${n}/${r}`:n}function Zt(e,t=M){let n=Yt(t);return e===n||e.startsWith(`${n}/`)}function Qt(e,t){if(t.startsWith(`http://`)||t.startsWith(`https://`)){if(!Zt(e))return e;let n=e.slice(M.length).replace(/^\/+/,``),r=t.replace(/\/+$/,``);return n?`${r}/${n}`:r}return Zt(e,t)||!Zt(e)?e:Xt(e.slice(M.length).replace(/^\/+/,``),t)}function $t(){return document.documentElement.dataset.sitePathPrefix||``}function en(){return document.documentElement.dataset.assetBasePath||M}function tn(t){return Zt(t)?Qt(t,en()):e(t,$t())}function nn(e){if(typeof e==`string`){if(/^https?:\/\//.test(e)){let t=new URL(e);return t.origin===window.location.origin?(t.pathname=tn(t.pathname),t.toString()):e}return tn(e)}if(e instanceof URL){if(e.origin!==window.location.origin)return e;let t=new URL(e.toString());return t.pathname=tn(t.pathname),t}let t=new URL(e.url);return t.origin===window.location.origin?(t.pathname=tn(t.pathname),new Request(t.toString(),e)):e}function rn(){let e=globalThis.fetch;if(e.__jantPrefixed)return;let t=(t,n)=>e(nn(t),n);t.__jantPrefixed=!0,globalThis.fetch=t}var N=null,an=0,P=!1,on=null,sn=null,cn=0;function F(e){return!isFinite(e)||e<0?`0:00`:`${Math.floor(e/60)}:${String(Math.floor(e%60)).padStart(2,`0`)}`}function I(e){return e.querySelector(`audio.media-audio-el`)}function ln(e){return e.querySelector(`[data-audio-range]`)}function un(e){return e.querySelector(`[data-audio-waveform]`)}function dn(e,t){let n=`${(t*100).toFixed(1)}%`;e.style.background=`linear-gradient(to right, var(--site-text-primary) ${n}, transparent ${n})`}var L=new WeakMap,fn=new WeakSet;async function pn(e,t){let n=await(await fetch(e)).arrayBuffer(),r=new AudioContext;try{let e=(await r.decodeAudioData(n)).getChannelData(0),i=Math.max(1,Math.floor(e.length/t)),a=Array(t);for(let n=0;n<t;n++){let t=0,r=n*i,o=Math.min(r+i,e.length);for(let n=r;n<o;n++){let r=Math.abs(e[n]);r>t&&(t=r)}a[n]=t}let o=0;for(let e of a)e>o&&(o=e);if(o>0)for(let e=0;e<t;e++)a[e]/=o;return a}finally{await r.close()}}function mn(){let e=document.querySelectorAll(`[data-audio-peaks]`),t=[];for(let n of e){let e=n.dataset.audioPeaks;if(!e)continue;let r=n.closest(`.media-audio-card`);if(!(!r||L.has(r)))try{let n=JSON.parse(e);if(!Array.isArray(n))continue;L.set(r,n),r.classList.add(`has-waveform`),t.push(r)}catch{}}t.length>0&&requestAnimationFrame(()=>{for(let e of t)gn(e,0)})}async function hn(e){if(L.has(e)||fn.has(e))return;fn.add(e);let t=e.querySelector(`audio.media-audio-el source`),n=un(e);if(!t?.src||!n)return;let r=n.getBoundingClientRect().width,i=Math.max(20,Math.floor(r/3));try{let n=await pn(t.src,i);L.set(e,n),e.classList.add(`has-waveform`);let r=I(e),a=r?.duration??0;gn(e,r&&isFinite(a)&&a>0?r.currentTime/a:0)}catch{}}function gn(e,t){let n=L.get(e),r=un(e);if(!n||!r)return;let i=window.devicePixelRatio||1,a=r.getBoundingClientRect(),o=Math.round(a.width*i),s=Math.round(a.height*i);if(o===0||s===0)return;(r.width!==o||r.height!==s)&&(r.width=o,r.height=s);let c=r.getContext(`2d`);if(!c)return;c.clearRect(0,0,o,s);let l=n.length,u=o/l,d=Math.max(1,Math.round(u*.6)),f=Math.round(2*i),p=s*.85,m=getComputedStyle(r).getPropertyValue(`--site-text-primary`).trim()||`#000`;for(let e=0;e<l;e++){let r=Math.round(e*u+(u-d)/2),a=Math.max(f,Math.round(n[e]*p)),o=Math.round((s-a)/2);c.globalAlpha=(e+.5)/l<=t?.9:.2,c.fillStyle=m;let h=Math.min(d/2,i);c.beginPath(),c.roundRect(r,o,d,a,h),c.fill()}c.globalAlpha=1}function _n(e,t){let{currentTime:n,duration:r}=t,i=isFinite(r)&&r>0,a=i?n/r:0;if(!P){let t=ln(e);t&&i&&(t.value=String(Math.round(a*1e3)),dn(t,a)),L.has(e)&&gn(e,a);let o=e.querySelector(`[data-audio-time]`);o&&(o.textContent=i?`${F(n)} / ${F(r)}`:F(n))}}function vn(){if(!N)return;let e=I(N);!e||e.paused||(_n(N,e),an=requestAnimationFrame(vn))}function yn(){if(N){let e=I(N);e&&!e.paused&&e.pause(),N.classList.remove(`is-playing`),N=null}cancelAnimationFrame(an)}async function bn(e){let t=I(e);if(t)if(N&&N!==e&&yn(),t.paused){N=e,e.classList.add(`is-playing`);try{await t.play()}catch{e.classList.remove(`is-playing`),N=null;return}an=requestAnimationFrame(vn),hn(e)}else t.pause(),e.classList.remove(`is-playing`),cancelAnimationFrame(an),N=null}function xn(e){let t=e.closest(`.media-audio-card`);if(!t)return;let n=I(t);if(!n)return;let r=Number(e.value)/1e3,i=n.duration;isFinite(i)&&i>0&&(n.currentTime=r*i)}function Sn(e,t){let n=e.getBoundingClientRect();cn=Math.max(0,Math.min(1,(t.clientX-n.left)/n.width));let r=e.closest(`.media-audio-card`);if(!r)return;gn(r,cn);let i=I(r),a=r.querySelector(`[data-audio-time]`);if(i&&a){let e=i.duration;isFinite(e)&&e>0&&(a.textContent=`${F(cn*e)} / ${F(e)}`)}}async function Cn(e){let t=e.closest(`.media-audio-card`);if(!t)return;let n=I(t);if(n)if(n.paused){N&&N!==t&&yn(),N=t,t.classList.add(`is-playing`);try{await n.play()}catch{t.classList.remove(`is-playing`),N=null;return}let e=n.duration;isFinite(e)&&e>0&&(n.currentTime=cn*e),an=requestAnimationFrame(vn),hn(t)}else{let e=n.duration;isFinite(e)&&e>0&&(n.currentTime=cn*e)}}document.addEventListener(`pointerdown`,e=>{let t=e.target;t.matches(`[data-audio-range]`)?(P=!0,on=t):t.matches(`[data-audio-waveform]`)&&(P=!0,sn=t,Sn(t,e))},!0),document.addEventListener(`pointermove`,e=>{P&&sn&&Sn(sn,e)},!0),document.addEventListener(`pointerup`,()=>{P&&(on?(xn(on),on=null):sn&&=(Cn(sn),null)),P=!1},!0),document.addEventListener(`pointercancel`,()=>{on=null,sn=null,P=!1},!0),document.addEventListener(`click`,e=>{let t=e.target.closest(`[data-audio-play]`);if(!t)return;e.preventDefault();let n=t.closest(`.media-audio-card`);n&&bn(n)}),document.addEventListener(`input`,e=>{let t=e.target;if(!t.matches(`[data-audio-range]`))return;let n=t.closest(`.media-audio-card`);if(!n)return;let r=I(n);if(!r)return;let i=Number(t.value)/1e3;dn(t,i);let a=r.duration,o=n.querySelector(`[data-audio-time]`);o&&isFinite(a)&&a>0&&(o.textContent=`${F(i*a)} / ${F(a)}`)},!0),document.addEventListener(`ended`,e=>{let t=e.target;if(!t.closest)return;let n=t.closest(`.media-audio-card`);if(!n)return;n.classList.remove(`is-playing`),cancelAnimationFrame(an),N=null;let r=ln(n);r&&(r.value=`0`,dn(r,0)),L.has(n)&&gn(n,0);let i=n.querySelector(`[data-audio-time]`);i&&(i.textContent=`0:00`)},!0),document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,mn):mn();var wn=`jant:media-lightbox-toggle`,Tn=`75% 0px`,En=.6,Dn=.25,On=160,R=new Set,kn=new WeakMap,An=new WeakSet,z=null,B=null,V=null,jn=!1,Mn=null,Nn=null,Pn=null;function Fn(e){return e.length===0?null:[...e].sort((e,t)=>t.visibleArea===e.visibleArea?e.centerDistance===t.centerDistance?t.intersectionRatio-e.intersectionRatio:e.centerDistance-t.centerDistance:t.visibleArea-e.visibleArea)[0]??null}function In(){return{x:(globalThis.innerWidth||document.documentElement.clientWidth||0)/2,y:(globalThis.innerHeight||document.documentElement.clientHeight||0)/2}}function Ln(e){return kn.get(e)}function Rn(e){return e.closest(`.media-video-wrap`)?.querySelector(`[data-feed-video-mute-toggle]`)??null}function zn(e){let t=Rn(e);if(!t)return;let n=V!==e||e.muted;t.dataset.muted=n?`true`:`false`,t.setAttribute(`aria-label`,n?`Play with sound`:`Mute video`)}function Bn(){for(let e of R)zn(e)}function Vn(e){if(An.has(e))return;let t=e.dataset.videoSrc;t&&(e.getAttribute(`src`)!==t&&(e.src=t),e.load(),An.add(e))}function H(e){e?.pause()}function Hn(e){Vn(e),e.muted=V!==e,e.playsInline=!0,e.loop=!0,zn(e),e.play().catch(()=>{})}function Un(){for(let e of R)e.isConnected||(Nn?.unobserve(e),Pn?.unobserve(e),R.delete(e),e===z&&(z=null),e===B&&(B=null),e===V&&(V=null))}function Wn(){if(Mn=null,Un(),document.hidden||jn){H(z);return}let e=[];for(let t of R){let n=Ln(t);n&&(n.intersectionRatio<En||e.push({video:t,...n}))}let t=null;if(B?.isConnected){let e=Ln(B);e&&e.intersectionRatio>Dn?t=B:(!e||e.intersectionRatio<=Dn)&&(B=null)}if(t||=Fn(e)?.video??null,!t){let e=z?Ln(z):void 0;if(z&&e&&e.intersectionRatio>Dn)return;H(z),z=null;return}t!==z&&(H(z),z=t),Hn(t);for(let e of R)e!==t&&(H(e),zn(e))}function Gn(){Mn!==null&&globalThis.clearTimeout(Mn),Mn=globalThis.setTimeout(Wn,On)}function Kn(e){let t=In();for(let n of e){let e=n.target,r=n.boundingClientRect,i=r.left+r.width/2,a=r.top+r.height/2,o=n.intersectionRect.width*n.intersectionRect.height,s=Math.hypot(i-t.x,a-t.y);kn.set(e,{intersectionRatio:n.intersectionRatio,visibleArea:o,centerDistance:s})}Gn()}function qn(e){for(let t of e)t.isIntersecting&&Vn(t.target)}function Jn(){Nn&&Pn||globalThis.IntersectionObserver!==void 0&&(Nn=new globalThis.IntersectionObserver(Kn,{threshold:[0,Dn,En,1]}),Pn=new globalThis.IntersectionObserver(qn,{rootMargin:Tn,threshold:0}))}function Yn(e){R.has(e)||(Jn(),!(!Nn||!Pn)&&(R.add(e),Nn.observe(e),Pn.observe(e),Rn(e)?.addEventListener(`click`,Xn),zn(e)))}function Xn(e){e.preventDefault(),e.stopPropagation();let t=e.currentTarget.closest(`.media-video-wrap`)?.querySelector(`[data-feed-short-video]`);t&&(B=t,V!==t||t.muted?(V&&V!==t&&(V.muted=!0),V=t,z!==t&&(H(z),z=t),Hn(t)):(V=null,t.muted=!0,zn(t)),Bn(),Gn())}function Zn(e=document){let t=e.querySelectorAll(`[data-feed-short-video]`);for(let e of t)Yn(e);Gn()}document.addEventListener(wn,e=>{jn=e.detail?.open===!0,jn&&H(z),Gn()}),document.addEventListener(`visibilitychange`,()=>{document.hidden&&H(z),Gn()}),document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,()=>Zn(),{once:!0}):queueMicrotask(()=>Zn());var Qn=4;function $n(e){return e.querySelector(`[data-post-media]`)}function er(e){let t=$n(e);if(!t)return;let{scrollLeft:n,scrollWidth:r,clientWidth:i}=t;e.classList.toggle(`can-scroll-start`,n>Qn),e.classList.toggle(`can-scroll-end`,n+i<r-Qn)}function tr(e){return Math.max(160,Math.round(e.clientWidth*.85))}function nr(e,t){e.scrollBy({left:t*tr(e),behavior:`smooth`})}function rr(e){if(e.dataset.scrollHintReady===`1`)return;let t=$n(e);t&&(e.dataset.scrollHintReady=`1`,er(e),t.addEventListener(`scroll`,()=>er(e),{passive:!0}),e.querySelector(`.media-gallery-nav-prev`)?.addEventListener(`click`,()=>nr(t,-1)),e.querySelector(`.media-gallery-nav-next`)?.addEventListener(`click`,()=>nr(t,1)),t.addEventListener(`keydown`,e=>{if(e.target===t)switch(e.key){case`ArrowRight`:e.preventDefault(),nr(t,1);break;case`ArrowLeft`:e.preventDefault(),nr(t,-1);break;case`Home`:e.preventDefault(),t.scrollTo({left:0,behavior:`smooth`});break;case`End`:e.preventDefault(),t.scrollTo({left:t.scrollWidth,behavior:`smooth`});break}}))}function ir(){document.querySelectorAll(`.media-gallery-scroll-wrap`).forEach(rr)}var ar=new globalThis.MutationObserver(e=>{for(let t of e)for(let e of t.addedNodes)e instanceof HTMLElement&&(e.matches(`.media-gallery-scroll-wrap`)&&rr(e),e.querySelectorAll(`.media-gallery-scroll-wrap`).forEach(rr))});document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,()=>{ir(),ar.observe(document.body,{childList:!0,subtree:!0})}):(ir(),ar.observe(document.body,{childList:!0,subtree:!0}));var or=new Set([`email`,`number`,`password`,`search`,`tel`,`text`,`url`]);function sr(e){return e instanceof HTMLInputElement?!e.disabled&&!e.readOnly&&or.has(e.type.toLowerCase()):!1}function cr(e){return e.querySelector(`button[type="submit"]:not([disabled]), input[type="submit"]:not([disabled]), button:not([type]):not([disabled])`)}function lr(e){return e.querySelector(`button[type="submit"], input[type="submit"], button:not([type])`)!==null}document.addEventListener(`keydown`,e=>{if(e.key!==`Enter`||e.defaultPrevented||e.isComposing||e.metaKey||e.ctrlKey||e.altKey||e.shiftKey||!sr(e.target))return;let t=e.target.form;if(!(t instanceof HTMLFormElement)||!t.hasAttribute(`data-on:submit__prevent`))return;let n=cr(t);if(!(!n&&lr(t))){if(e.preventDefault(),n){t.requestSubmit(n);return}t.requestSubmit()}});var ur=globalThis,dr=ur.ShadowRoot&&(ur.ShadyCSS===void 0||ur.ShadyCSS.nativeShadow)&&`adoptedStyleSheets`in Document.prototype&&`replace`in CSSStyleSheet.prototype,fr=Symbol(),pr=new WeakMap,mr=class{constructor(e,t,n){if(this._$cssResult$=!0,n!==fr)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o,t=this.t;if(dr&&e===void 0){let n=t!==void 0&&t.length===1;n&&(e=pr.get(t)),e===void 0&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),n&&pr.set(t,e))}return e}toString(){return this.cssText}},hr=e=>new mr(typeof e==`string`?e:e+``,void 0,fr),gr=(e,t)=>{if(dr)e.adoptedStyleSheets=t.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(let n of t){let t=document.createElement(`style`),r=ur.litNonce;r!==void 0&&t.setAttribute(`nonce`,r),t.textContent=n.cssText,e.appendChild(t)}},_r=dr?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t=``;for(let n of e.cssRules)t+=n.cssText;return hr(t)})(e):e,{is:vr,defineProperty:yr,getOwnPropertyDescriptor:br,getOwnPropertyNames:xr,getOwnPropertySymbols:Sr,getPrototypeOf:Cr}=Object,wr=globalThis,Tr=wr.trustedTypes,Er=Tr?Tr.emptyScript:``,Dr=wr.reactiveElementPolyfillSupport,Or=(e,t)=>e,kr={toAttribute(e,t){switch(t){case Boolean:e=e?Er:null;break;case Object:case Array:e=e==null?e:JSON.stringify(e)}return e},fromAttribute(e,t){let n=e;switch(t){case Boolean:n=e!==null;break;case Number:n=e===null?null:Number(e);break;case Object:case Array:try{n=JSON.parse(e)}catch{n=null}}return n}},Ar=(e,t)=>!vr(e,t),jr={attribute:!0,type:String,converter:kr,reflect:!1,useDefault:!1,hasChanged:Ar};Symbol.metadata??=Symbol(`metadata`),wr.litPropertyMetadata??=new WeakMap;var Mr=class extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??=[]).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=jr){if(t.state&&(t.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((t=Object.create(t)).wrapped=!0),this.elementProperties.set(e,t),!t.noAccessor){let n=Symbol(),r=this.getPropertyDescriptor(e,n,t);r!==void 0&&yr(this.prototype,e,r)}}static getPropertyDescriptor(e,t,n){let{get:r,set:i}=br(this.prototype,e)??{get(){return this[t]},set(e){this[t]=e}};return{get:r,set(t){let a=r?.call(this);i?.call(this,t),this.requestUpdate(e,a,n)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??jr}static _$Ei(){if(this.hasOwnProperty(Or(`elementProperties`)))return;let e=Cr(this);e.finalize(),e.l!==void 0&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(Or(`finalized`)))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(Or(`properties`))){let e=this.properties,t=[...xr(e),...Sr(e)];for(let n of t)this.createProperty(n,e[n])}let e=this[Symbol.metadata];if(e!==null){let t=litPropertyMetadata.get(e);if(t!==void 0)for(let[e,n]of t)this.elementProperties.set(e,n)}this._$Eh=new Map;for(let[e,t]of this.elementProperties){let n=this._$Eu(e,t);n!==void 0&&this._$Eh.set(n,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){let t=[];if(Array.isArray(e)){let n=new Set(e.flat(1/0).reverse());for(let e of n)t.unshift(_r(e))}else e!==void 0&&t.push(_r(e));return t}static _$Eu(e,t){let n=t.attribute;return!1===n?void 0:typeof n==`string`?n:typeof e==`string`?e.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(e=>this.enableUpdating=e),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(e=>e(this))}addController(e){(this._$EO??=new Set).add(e),this.renderRoot!==void 0&&this.isConnected&&e.hostConnected?.()}removeController(e){this._$EO?.delete(e)}_$E_(){let e=new Map,t=this.constructor.elementProperties;for(let n of t.keys())this.hasOwnProperty(n)&&(e.set(n,this[n]),delete this[n]);e.size>0&&(this._$Ep=e)}createRenderRoot(){let e=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return gr(e,this.constructor.elementStyles),e}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(e=>e.hostConnected?.())}enableUpdating(e){}disconnectedCallback(){this._$EO?.forEach(e=>e.hostDisconnected?.())}attributeChangedCallback(e,t,n){this._$AK(e,n)}_$ET(e,t){let n=this.constructor.elementProperties.get(e),r=this.constructor._$Eu(e,n);if(r!==void 0&&!0===n.reflect){let i=(n.converter?.toAttribute===void 0?kr:n.converter).toAttribute(t,n.type);this._$Em=e,i==null?this.removeAttribute(r):this.setAttribute(r,i),this._$Em=null}}_$AK(e,t){let n=this.constructor,r=n._$Eh.get(e);if(r!==void 0&&this._$Em!==r){let e=n.getPropertyOptions(r),i=typeof e.converter==`function`?{fromAttribute:e.converter}:e.converter?.fromAttribute===void 0?kr:e.converter;this._$Em=r;let a=i.fromAttribute(t,e.type);this[r]=a??this._$Ej?.get(r)??a,this._$Em=null}}requestUpdate(e,t,n,r=!1,i){if(e!==void 0){let a=this.constructor;if(!1===r&&(i=this[e]),n??=a.getPropertyOptions(e),!((n.hasChanged??Ar)(i,t)||n.useDefault&&n.reflect&&i===this._$Ej?.get(e)&&!this.hasAttribute(a._$Eu(e,n))))return;this.C(e,t,n)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(e,t,{useDefault:n,reflect:r,wrapped:i},a){n&&!(this._$Ej??=new Map).has(e)&&(this._$Ej.set(e,a??t??this[e]),!0!==i||a!==void 0)||(this._$AL.has(e)||(this.hasUpdated||n||(t=void 0),this._$AL.set(e,t)),!0===r&&this._$Em!==e&&(this._$Eq??=new Set).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}let e=this.scheduleUpdate();return e!=null&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(let[e,t]of this._$Ep)this[e]=t;this._$Ep=void 0}let e=this.constructor.elementProperties;if(e.size>0)for(let[t,n]of e){let{wrapped:e}=n,r=this[t];!0!==e||this._$AL.has(t)||r===void 0||this.C(t,void 0,n,r)}}let e=!1,t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),this._$EO?.forEach(e=>e.hostUpdate?.()),this.update(t)):this._$EM()}catch(t){throw e=!1,this._$EM(),t}e&&this._$AE(t)}willUpdate(e){}_$AE(e){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&=this._$Eq.forEach(e=>this._$ET(e,this[e])),this._$EM()}updated(e){}firstUpdated(e){}};Mr.elementStyles=[],Mr.shadowRootOptions={mode:`open`},Mr[Or(`elementProperties`)]=new Map,Mr[Or(`finalized`)]=new Map,Dr?.({ReactiveElement:Mr}),(wr.reactiveElementVersions??=[]).push(`2.1.2`);var Nr=globalThis,Pr=e=>e,Fr=Nr.trustedTypes,Ir=Fr?Fr.createPolicy(`lit-html`,{createHTML:e=>e}):void 0,Lr=`$lit$`,U=`lit$${Math.random().toFixed(9).slice(2)}$`,Rr=`?`+U,zr=`<${Rr}>`,W=document,Br=()=>W.createComment(``),Vr=e=>e===null||typeof e!=`object`&&typeof e!=`function`,Hr=Array.isArray,Ur=e=>Hr(e)||typeof e?.[Symbol.iterator]==`function`,Wr=`[
|
|
8
|
-
\f\r]`,Gr=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Kr=/-->/g,qr=/>/g,G=RegExp(`>|${Wr}(?:([^\\s"'>=/]+)(${Wr}*=${Wr}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,`g`),Jr=/'/g,Yr=/"/g,Xr=/^(?:script|style|textarea|title)$/i,Zr=e=>(t,...n)=>({_$litType$:e,strings:t,values:n}),K=Zr(1),Qr=Zr(2),q=Symbol.for(`lit-noChange`),J=Symbol.for(`lit-nothing`),$r=new WeakMap,Y=W.createTreeWalker(W,129);function ei(e,t){if(!Hr(e)||!e.hasOwnProperty(`raw`))throw Error(`invalid template strings array`);return Ir===void 0?t:Ir.createHTML(t)}var ti=(e,t)=>{let n=e.length-1,r=[],i,a=t===2?`<svg>`:t===3?`<math>`:``,o=Gr;for(let t=0;t<n;t++){let n=e[t],s,c,l=-1,u=0;for(;u<n.length&&(o.lastIndex=u,c=o.exec(n),c!==null);)u=o.lastIndex,o===Gr?c[1]===`!--`?o=Kr:c[1]===void 0?c[2]===void 0?c[3]!==void 0&&(o=G):(Xr.test(c[2])&&(i=RegExp(`</`+c[2],`g`)),o=G):o=qr:o===G?c[0]===`>`?(o=i??Gr,l=-1):c[1]===void 0?l=-2:(l=o.lastIndex-c[2].length,s=c[1],o=c[3]===void 0?G:c[3]===`"`?Yr:Jr):o===Yr||o===Jr?o=G:o===Kr||o===qr?o=Gr:(o=G,i=void 0);let d=o===G&&e[t+1].startsWith(`/>`)?` `:``;a+=o===Gr?n+zr:l>=0?(r.push(s),n.slice(0,l)+Lr+n.slice(l)+U+d):n+U+(l===-2?t:d)}return[ei(e,a+(e[n]||`<?>`)+(t===2?`</svg>`:t===3?`</math>`:``)),r]},ni=class e{constructor({strings:t,_$litType$:n},r){let i;this.parts=[];let a=0,o=0,s=t.length-1,c=this.parts,[l,u]=ti(t,n);if(this.el=e.createElement(l,r),Y.currentNode=this.el.content,n===2||n===3){let e=this.el.content.firstChild;e.replaceWith(...e.childNodes)}for(;(i=Y.nextNode())!==null&&c.length<s;){if(i.nodeType===1){if(i.hasAttributes())for(let e of i.getAttributeNames())if(e.endsWith(Lr)){let t=u[o++],n=i.getAttribute(e).split(U),r=/([.?@])?(.*)/.exec(t);c.push({type:1,index:a,name:r[2],strings:n,ctor:r[1]===`.`?oi:r[1]===`?`?si:r[1]===`@`?ci:ai}),i.removeAttribute(e)}else e.startsWith(U)&&(c.push({type:6,index:a}),i.removeAttribute(e));if(Xr.test(i.tagName)){let e=i.textContent.split(U),t=e.length-1;if(t>0){i.textContent=Fr?Fr.emptyScript:``;for(let n=0;n<t;n++)i.append(e[n],Br()),Y.nextNode(),c.push({type:2,index:++a});i.append(e[t],Br())}}}else if(i.nodeType===8)if(i.data===Rr)c.push({type:2,index:a});else{let e=-1;for(;(e=i.data.indexOf(U,e+1))!==-1;)c.push({type:7,index:a}),e+=U.length-1}a++}}static createElement(e,t){let n=W.createElement(`template`);return n.innerHTML=e,n}};function X(e,t,n=e,r){if(t===q)return t;let i=r===void 0?n._$Cl:n._$Co?.[r],a=Vr(t)?void 0:t._$litDirective$;return i?.constructor!==a&&(i?._$AO?.(!1),a===void 0?i=void 0:(i=new a(e),i._$AT(e,n,r)),r===void 0?n._$Cl=i:(n._$Co??=[])[r]=i),i!==void 0&&(t=X(e,i._$AS(e,t.values),i,r)),t}var ri=class{constructor(e,t){this._$AV=[],this._$AN=void 0,this._$AD=e,this._$AM=t}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(e){let{el:{content:t},parts:n}=this._$AD,r=(e?.creationScope??W).importNode(t,!0);Y.currentNode=r;let i=Y.nextNode(),a=0,o=0,s=n[0];for(;s!==void 0;){if(a===s.index){let t;s.type===2?t=new ii(i,i.nextSibling,this,e):s.type===1?t=new s.ctor(i,s.name,s.strings,this,e):s.type===6&&(t=new li(i,this,e)),this._$AV.push(t),s=n[++o]}a!==s?.index&&(i=Y.nextNode(),a++)}return Y.currentNode=W,r}p(e){let t=0;for(let n of this._$AV)n!==void 0&&(n.strings===void 0?n._$AI(e[t]):(n._$AI(e,n,t),t+=n.strings.length-2)),t++}},ii=class e{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(e,t,n,r){this.type=2,this._$AH=J,this._$AN=void 0,this._$AA=e,this._$AB=t,this._$AM=n,this.options=r,this._$Cv=r?.isConnected??!0}get parentNode(){let e=this._$AA.parentNode,t=this._$AM;return t!==void 0&&e?.nodeType===11&&(e=t.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,t=this){e=X(this,e,t),Vr(e)?e===J||e==null||e===``?(this._$AH!==J&&this._$AR(),this._$AH=J):e!==this._$AH&&e!==q&&this._(e):e._$litType$===void 0?e.nodeType===void 0?Ur(e)?this.k(e):this._(e):this.T(e):this.$(e)}O(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}T(e){this._$AH!==e&&(this._$AR(),this._$AH=this.O(e))}_(e){this._$AH!==J&&Vr(this._$AH)?this._$AA.nextSibling.data=e:this.T(W.createTextNode(e)),this._$AH=e}$(e){let{values:t,_$litType$:n}=e,r=typeof n==`number`?this._$AC(e):(n.el===void 0&&(n.el=ni.createElement(ei(n.h,n.h[0]),this.options)),n);if(this._$AH?._$AD===r)this._$AH.p(t);else{let e=new ri(r,this),n=e.u(this.options);e.p(t),this.T(n),this._$AH=e}}_$AC(e){let t=$r.get(e.strings);return t===void 0&&$r.set(e.strings,t=new ni(e)),t}k(t){Hr(this._$AH)||(this._$AH=[],this._$AR());let n=this._$AH,r,i=0;for(let a of t)i===n.length?n.push(r=new e(this.O(Br()),this.O(Br()),this,this.options)):r=n[i],r._$AI(a),i++;i<n.length&&(this._$AR(r&&r._$AB.nextSibling,i),n.length=i)}_$AR(e=this._$AA.nextSibling,t){for(this._$AP?.(!1,!0,t);e!==this._$AB;){let t=Pr(e).nextSibling;Pr(e).remove(),e=t}}setConnected(e){this._$AM===void 0&&(this._$Cv=e,this._$AP?.(e))}},ai=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(e,t,n,r,i){this.type=1,this._$AH=J,this._$AN=void 0,this.element=e,this.name=t,this._$AM=r,this.options=i,n.length>2||n[0]!==``||n[1]!==``?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=J}_$AI(e,t=this,n,r){let i=this.strings,a=!1;if(i===void 0)e=X(this,e,t,0),a=!Vr(e)||e!==this._$AH&&e!==q,a&&(this._$AH=e);else{let r=e,o,s;for(e=i[0],o=0;o<i.length-1;o++)s=X(this,r[n+o],t,o),s===q&&(s=this._$AH[o]),a||=!Vr(s)||s!==this._$AH[o],s===J?e=J:e!==J&&(e+=(s??``)+i[o+1]),this._$AH[o]=s}a&&!r&&this.j(e)}j(e){e===J?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,e??``)}},oi=class extends ai{constructor(){super(...arguments),this.type=3}j(e){this.element[this.name]=e===J?void 0:e}},si=class extends ai{constructor(){super(...arguments),this.type=4}j(e){this.element.toggleAttribute(this.name,!!e&&e!==J)}},ci=class extends ai{constructor(e,t,n,r,i){super(e,t,n,r,i),this.type=5}_$AI(e,t=this){if((e=X(this,e,t,0)??J)===q)return;let n=this._$AH,r=e===J&&n!==J||e.capture!==n.capture||e.once!==n.once||e.passive!==n.passive,i=e!==J&&(n===J||r);r&&this.element.removeEventListener(this.name,this,n),i&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){typeof this._$AH==`function`?this._$AH.call(this.options?.host??this.element,e):this._$AH.handleEvent(e)}},li=class{constructor(e,t,n){this.element=e,this.type=6,this._$AN=void 0,this._$AM=t,this.options=n}get _$AU(){return this._$AM._$AU}_$AI(e){X(this,e)}},ui={M:Lr,P:U,A:Rr,C:1,L:ti,R:ri,D:Ur,V:X,I:ii,H:ai,N:si,U:ci,B:oi,F:li},di=Nr.litHtmlPolyfillSupport;di?.(ni,ii),(Nr.litHtmlVersions??=[]).push(`3.3.2`);var fi=(e,t,n)=>{let r=n?.renderBefore??t,i=r._$litPart$;if(i===void 0){let e=n?.renderBefore??null;r._$litPart$=i=new ii(t.insertBefore(Br(),e),e,void 0,n??{})}return i._$AI(e),i},pi=globalThis,Z=class extends Mr{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let e=super.createRenderRoot();return this.renderOptions.renderBefore??=e.firstChild,e}update(e){let t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=fi(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return q}};Z._$litElement$=!0,Z.finalized=!0,pi.litElementHydrateSupport?.({LitElement:Z});var mi=pi.litElementPolyfillSupport;mi?.({LitElement:Z}),(pi.litElementVersions??=[]).push(`4.2.2`);function hi(e){if(!(!Number.isFinite(e)||!e||e<=0))return Math.ceil(e)}function gi(e){if(!e.mimeType?.startsWith(`video/`)||!Number.isFinite(e.durationSeconds)||!e.durationSeconds||e.durationSeconds<=0||e.durationSeconds>15)return!1;let t=e.size;return!(typeof t==`number`&&t>12582912)}var _i=640,vi=8,yi=72,bi=16,xi=704,Si=.9,Ci=.85;function Q(e){if(!(!Number.isFinite(e)||!e||e<=0))return e}function wi(){return{width:globalThis.innerWidth||document.documentElement.clientWidth||0,height:globalThis.innerHeight||document.documentElement.clientHeight||0}}function Ti(e,t){let n=e<=_i?vi:yi;return{width:Math.max(0,e-n*2),height:Math.max(0,t-bi*2)}}function Ei(e,t,n){let r=Q(e?.width),i=Q(e?.height);if(!r||!i)return null;let a=Ti(t,n);if(a.width<=0||a.height<=0)return null;let o=Math.min(a.width/r,a.height/i);return{width:Math.max(1,Math.round(r*o)),height:Math.max(1,Math.round(i*o))}}function Di(e,t,n){if(!e||e.mimeType?.startsWith(`video/`)||!Q(e.width)||!Q(e.height)||t<=0||n<=0)return!1;let r=Q(e.width),i=Q(e.height);if(!r||!i)return!1;let a=t<=_i,o=Ti(t,n),s=o.width,c=o.height;if(s<=0||c<=0)return!1;let l=r/i,u=Math.min(s,c*l);return l<Si&&u<(a?s:Math.min(s,xi))*Ci}var Oi=class extends Z{static properties={_images:{state:!0},_currentIndex:{state:!0},_open:{state:!0},_viewportWidth:{state:!0},_viewportHeight:{state:!0},_videoCurrentTime:{state:!0},_videoDuration:{state:!0},_videoMuted:{state:!0},_imageZoomed:{state:!0}};createRenderRoot(){return this.innerHTML=``,this}constructor(){super();let e=wi();this._images=[],this._currentIndex=0,this._open=!1,this._viewportWidth=e.width,this._viewportHeight=e.height,this._videoCurrentTime=0,this._videoDuration=0,this._videoMuted=!1,this._imageZoomed=!1}connectedCallback(){super.connectedCallback(),document.addEventListener(`click`,this.#e),window.addEventListener(`resize`,this.#l),this.#u()}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener(`click`,this.#e),window.removeEventListener(`resize`,this.#l)}open(e,t){this.#u(),this.#d(),this._images=e,this._currentIndex=Math.max(0,Math.min(t,e.length-1)),this.#m(this._images[this._currentIndex]),this._imageZoomed=!1,this._open=!0,document.dispatchEvent(new CustomEvent(wn,{detail:{open:!0}})),this.updateComplete.then(()=>{this.querySelector(`.media-lightbox`)?.showModal(),this.#f()})}close(){this.#d(),this.querySelector(`.media-lightbox`)?.close(),this._open=!1,document.dispatchEvent(new CustomEvent(wn,{detail:{open:!1}}))}#e=e=>{let t=e.target,n=t.closest(`[data-post-media] a[data-lightbox-index]`);if(n){let t=n.closest(`[data-lightbox-group]`);if(!t)return;e.preventDefault();let r=parseInt(n.dataset.lightboxIndex??`0`,10);try{let e=JSON.parse(t.dataset.lightboxGroup??`[]`);e.length>0&&this.open(e,r)}catch{}return}let r=t.closest(`[data-post-body] img`);if(r){e.preventDefault();let t=r.closest(`[data-post-body]`);if(!t)return;let n=Array.from(t.querySelectorAll(`img`)),i=n.map(e=>({url:e.src,alt:e.alt||``,width:Q(e.naturalWidth||Number(e.getAttribute(`width`))),height:Q(e.naturalHeight||Number(e.getAttribute(`height`)))})),a=n.indexOf(r);i.length>0&&this.open(i,Math.max(0,a))}};#t(){this._images.length<=1||(this.#d(),this._imageZoomed=!1,this._currentIndex=(this._currentIndex-1+this._images.length)%this._images.length)}#n(){this._images.length<=1||(this.#d(),this._imageZoomed=!1,this._currentIndex=(this._currentIndex+1)%this._images.length)}#r=e=>{let t=this._images[this._currentIndex];Di(t,this._viewportWidth,this._viewportHeight)&&(e.stopPropagation(),this._imageZoomed=!this._imageZoomed)};#i=e=>{let t=e,n=e.target;if(t.key===`Escape`){e.preventDefault(),this.close();return}if(n instanceof HTMLInputElement||n instanceof HTMLButtonElement||n instanceof HTMLVideoElement)return;if(!this._images[this._currentIndex]?.mimeType?.startsWith(`video/`)){t.key===`ArrowLeft`?(e.preventDefault(),this.#t()):t.key===`ArrowRight`&&(e.preventDefault(),this.#n());return}let r=this.querySelector(`.media-lightbox-video`);r&&this.#a(t,r)};#a(e,t){let n=Number.isFinite(t.duration)&&t.duration>0?t.duration:null,r=e=>{let r=n==null?Math.max(0,e):Math.max(0,Math.min(e,n));t.currentTime=r,this._videoCurrentTime=r},i=e.key,a=i.toLowerCase();if(i===` `||a===`k`)e.preventDefault(),t.paused?t.play().catch(()=>{}):t.pause();else if(i===`ArrowLeft`)e.preventDefault(),r(t.currentTime-5);else if(i===`ArrowRight`)e.preventDefault(),r(t.currentTime+5);else if(i===`Home`)e.preventDefault(),r(0);else if(i===`End`)n!=null&&(e.preventDefault(),r(n));else if(i.length===1&&i>=`0`&&i<=`9`)n!=null&&(e.preventDefault(),r(Number(i)/10*n));else if(i===`ArrowUp`)e.preventDefault(),t.volume=Math.min(1,t.volume+.05);else if(i===`ArrowDown`)e.preventDefault(),t.volume=Math.max(0,t.volume-.05);else if(a===`m`){e.preventDefault();let n=!t.muted;t.muted=n,this._videoMuted=n}else a===`f`&&(e.preventDefault(),this.#o(t))}#o(e){let t=document,n=e;if(document.fullscreenElement??t.webkitFullscreenElement){document.exitFullscreen?document.exitFullscreen().catch(()=>{}):t.webkitExitFullscreen?.();return}e.requestFullscreen?e.requestFullscreen().catch(()=>{}):n.webkitRequestFullscreen?n.webkitRequestFullscreen():n.webkitEnterFullscreen&&n.webkitEnterFullscreen()}#s=e=>{let t=e.target;(t===e.currentTarget||t.classList.contains(`media-lightbox-content`)||t.classList.contains(`media-lightbox-stage`))&&this.close()};#c=()=>{this.#d(),this._open&&document.dispatchEvent(new CustomEvent(wn,{detail:{open:!1}})),this._open=!1};#l=()=>{this.#u()};#u(){let e=wi();e.width===this._viewportWidth&&e.height===this._viewportHeight||(this._viewportWidth=e.width,this._viewportHeight=e.height)}#d(){this.querySelector(`.media-lightbox-video`)?.pause()}#f(){this.querySelector(`.media-lightbox-content`)?.focus()}#p=()=>{this.querySelector(`.media-lightbox-content`)?.focus({preventScroll:!0})};#m(e){this._videoCurrentTime=0,this._videoDuration=e?.durationSeconds&&e.durationSeconds>0?e.durationSeconds:0,this._videoMuted=!1}#h(){let e=this._images[this._currentIndex];if(!gi(e)){this.#m(e);return}let t=this.querySelector(`.media-lightbox-video`);t&&(t.currentTime=0,t.muted=this._videoMuted,t.play().catch(()=>{}))}#g=e=>{let t=e.currentTarget;Number.isFinite(t.duration)&&t.duration>0&&(this._videoDuration=t.duration),this._videoCurrentTime=t.currentTime,t.muted=this._videoMuted};#_=e=>{let t=e.currentTarget;this._videoCurrentTime=t.currentTime,Number.isFinite(t.duration)&&t.duration>0&&(this._videoDuration=t.duration)};#v=e=>{let t=e.currentTarget,n=this.querySelector(`.media-lightbox-video`),r=Number.parseFloat(t.value);!n||!Number.isFinite(r)||r<0||(n.currentTime=r,this._videoCurrentTime=r)};#y=()=>{this._videoMuted=!this._videoMuted;let e=this.querySelector(`.media-lightbox-video`);e&&(e.muted=this._videoMuted)};updated(e){if(super.updated(e),!this._open||!e.has(`_currentIndex`)&&!e.has(`_open`)&&!e.has(`_imageZoomed`))return;let t=this.querySelector(`.media-lightbox-stage`);t&&(t.scrollTop=0,t.scrollLeft=0,(e.has(`_currentIndex`)||e.has(`_open`))&&(this.#h(),this.#f()))}render(){if(!this._open)return J;let e=this._images[this._currentIndex],t=this._images.length>1,n=e?.mimeType?.startsWith(`video/`),r=gi(e),i=Di(e,this._viewportWidth,this._viewportHeight),a=i&&this._imageZoomed,o=r?Ei(e,this._viewportWidth,this._viewportHeight):null,s=r&&!!o&&o.height>o.width,c=o?`width:${o.width}px;height:${o.height}px;`:J,l=this._videoDuration>0?this._videoDuration:e?.durationSeconds??1,u=Math.min(this._videoCurrentTime,l),d=l>0?u/l*100:0;return K`
|
|
8
|
+
\f\r]`,Gr=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Kr=/-->/g,qr=/>/g,G=RegExp(`>|${Wr}(?:([^\\s"'>=/]+)(${Wr}*=${Wr}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,`g`),Jr=/'/g,Yr=/"/g,Xr=/^(?:script|style|textarea|title)$/i,Zr=e=>(t,...n)=>({_$litType$:e,strings:t,values:n}),K=Zr(1),Qr=Zr(2),q=Symbol.for(`lit-noChange`),J=Symbol.for(`lit-nothing`),$r=new WeakMap,Y=W.createTreeWalker(W,129);function ei(e,t){if(!Hr(e)||!e.hasOwnProperty(`raw`))throw Error(`invalid template strings array`);return Ir===void 0?t:Ir.createHTML(t)}var ti=(e,t)=>{let n=e.length-1,r=[],i,a=t===2?`<svg>`:t===3?`<math>`:``,o=Gr;for(let t=0;t<n;t++){let n=e[t],s,c,l=-1,u=0;for(;u<n.length&&(o.lastIndex=u,c=o.exec(n),c!==null);)u=o.lastIndex,o===Gr?c[1]===`!--`?o=Kr:c[1]===void 0?c[2]===void 0?c[3]!==void 0&&(o=G):(Xr.test(c[2])&&(i=RegExp(`</`+c[2],`g`)),o=G):o=qr:o===G?c[0]===`>`?(o=i??Gr,l=-1):c[1]===void 0?l=-2:(l=o.lastIndex-c[2].length,s=c[1],o=c[3]===void 0?G:c[3]===`"`?Yr:Jr):o===Yr||o===Jr?o=G:o===Kr||o===qr?o=Gr:(o=G,i=void 0);let d=o===G&&e[t+1].startsWith(`/>`)?` `:``;a+=o===Gr?n+zr:l>=0?(r.push(s),n.slice(0,l)+Lr+n.slice(l)+U+d):n+U+(l===-2?t:d)}return[ei(e,a+(e[n]||`<?>`)+(t===2?`</svg>`:t===3?`</math>`:``)),r]},ni=class e{constructor({strings:t,_$litType$:n},r){let i;this.parts=[];let a=0,o=0,s=t.length-1,c=this.parts,[l,u]=ti(t,n);if(this.el=e.createElement(l,r),Y.currentNode=this.el.content,n===2||n===3){let e=this.el.content.firstChild;e.replaceWith(...e.childNodes)}for(;(i=Y.nextNode())!==null&&c.length<s;){if(i.nodeType===1){if(i.hasAttributes())for(let e of i.getAttributeNames())if(e.endsWith(Lr)){let t=u[o++],n=i.getAttribute(e).split(U),r=/([.?@])?(.*)/.exec(t);c.push({type:1,index:a,name:r[2],strings:n,ctor:r[1]===`.`?oi:r[1]===`?`?si:r[1]===`@`?ci:ai}),i.removeAttribute(e)}else e.startsWith(U)&&(c.push({type:6,index:a}),i.removeAttribute(e));if(Xr.test(i.tagName)){let e=i.textContent.split(U),t=e.length-1;if(t>0){i.textContent=Fr?Fr.emptyScript:``;for(let n=0;n<t;n++)i.append(e[n],Br()),Y.nextNode(),c.push({type:2,index:++a});i.append(e[t],Br())}}}else if(i.nodeType===8)if(i.data===Rr)c.push({type:2,index:a});else{let e=-1;for(;(e=i.data.indexOf(U,e+1))!==-1;)c.push({type:7,index:a}),e+=U.length-1}a++}}static createElement(e,t){let n=W.createElement(`template`);return n.innerHTML=e,n}};function X(e,t,n=e,r){if(t===q)return t;let i=r===void 0?n._$Cl:n._$Co?.[r],a=Vr(t)?void 0:t._$litDirective$;return i?.constructor!==a&&(i?._$AO?.(!1),a===void 0?i=void 0:(i=new a(e),i._$AT(e,n,r)),r===void 0?n._$Cl=i:(n._$Co??=[])[r]=i),i!==void 0&&(t=X(e,i._$AS(e,t.values),i,r)),t}var ri=class{constructor(e,t){this._$AV=[],this._$AN=void 0,this._$AD=e,this._$AM=t}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(e){let{el:{content:t},parts:n}=this._$AD,r=(e?.creationScope??W).importNode(t,!0);Y.currentNode=r;let i=Y.nextNode(),a=0,o=0,s=n[0];for(;s!==void 0;){if(a===s.index){let t;s.type===2?t=new ii(i,i.nextSibling,this,e):s.type===1?t=new s.ctor(i,s.name,s.strings,this,e):s.type===6&&(t=new li(i,this,e)),this._$AV.push(t),s=n[++o]}a!==s?.index&&(i=Y.nextNode(),a++)}return Y.currentNode=W,r}p(e){let t=0;for(let n of this._$AV)n!==void 0&&(n.strings===void 0?n._$AI(e[t]):(n._$AI(e,n,t),t+=n.strings.length-2)),t++}},ii=class e{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(e,t,n,r){this.type=2,this._$AH=J,this._$AN=void 0,this._$AA=e,this._$AB=t,this._$AM=n,this.options=r,this._$Cv=r?.isConnected??!0}get parentNode(){let e=this._$AA.parentNode,t=this._$AM;return t!==void 0&&e?.nodeType===11&&(e=t.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,t=this){e=X(this,e,t),Vr(e)?e===J||e==null||e===``?(this._$AH!==J&&this._$AR(),this._$AH=J):e!==this._$AH&&e!==q&&this._(e):e._$litType$===void 0?e.nodeType===void 0?Ur(e)?this.k(e):this._(e):this.T(e):this.$(e)}O(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}T(e){this._$AH!==e&&(this._$AR(),this._$AH=this.O(e))}_(e){this._$AH!==J&&Vr(this._$AH)?this._$AA.nextSibling.data=e:this.T(W.createTextNode(e)),this._$AH=e}$(e){let{values:t,_$litType$:n}=e,r=typeof n==`number`?this._$AC(e):(n.el===void 0&&(n.el=ni.createElement(ei(n.h,n.h[0]),this.options)),n);if(this._$AH?._$AD===r)this._$AH.p(t);else{let e=new ri(r,this),n=e.u(this.options);e.p(t),this.T(n),this._$AH=e}}_$AC(e){let t=$r.get(e.strings);return t===void 0&&$r.set(e.strings,t=new ni(e)),t}k(t){Hr(this._$AH)||(this._$AH=[],this._$AR());let n=this._$AH,r,i=0;for(let a of t)i===n.length?n.push(r=new e(this.O(Br()),this.O(Br()),this,this.options)):r=n[i],r._$AI(a),i++;i<n.length&&(this._$AR(r&&r._$AB.nextSibling,i),n.length=i)}_$AR(e=this._$AA.nextSibling,t){for(this._$AP?.(!1,!0,t);e!==this._$AB;){let t=Pr(e).nextSibling;Pr(e).remove(),e=t}}setConnected(e){this._$AM===void 0&&(this._$Cv=e,this._$AP?.(e))}},ai=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(e,t,n,r,i){this.type=1,this._$AH=J,this._$AN=void 0,this.element=e,this.name=t,this._$AM=r,this.options=i,n.length>2||n[0]!==``||n[1]!==``?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=J}_$AI(e,t=this,n,r){let i=this.strings,a=!1;if(i===void 0)e=X(this,e,t,0),a=!Vr(e)||e!==this._$AH&&e!==q,a&&(this._$AH=e);else{let r=e,o,s;for(e=i[0],o=0;o<i.length-1;o++)s=X(this,r[n+o],t,o),s===q&&(s=this._$AH[o]),a||=!Vr(s)||s!==this._$AH[o],s===J?e=J:e!==J&&(e+=(s??``)+i[o+1]),this._$AH[o]=s}a&&!r&&this.j(e)}j(e){e===J?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,e??``)}},oi=class extends ai{constructor(){super(...arguments),this.type=3}j(e){this.element[this.name]=e===J?void 0:e}},si=class extends ai{constructor(){super(...arguments),this.type=4}j(e){this.element.toggleAttribute(this.name,!!e&&e!==J)}},ci=class extends ai{constructor(e,t,n,r,i){super(e,t,n,r,i),this.type=5}_$AI(e,t=this){if((e=X(this,e,t,0)??J)===q)return;let n=this._$AH,r=e===J&&n!==J||e.capture!==n.capture||e.once!==n.once||e.passive!==n.passive,i=e!==J&&(n===J||r);r&&this.element.removeEventListener(this.name,this,n),i&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){typeof this._$AH==`function`?this._$AH.call(this.options?.host??this.element,e):this._$AH.handleEvent(e)}},li=class{constructor(e,t,n){this.element=e,this.type=6,this._$AN=void 0,this._$AM=t,this.options=n}get _$AU(){return this._$AM._$AU}_$AI(e){X(this,e)}},ui={M:Lr,P:U,A:Rr,C:1,L:ti,R:ri,D:Ur,V:X,I:ii,H:ai,N:si,U:ci,B:oi,F:li},di=Nr.litHtmlPolyfillSupport;di?.(ni,ii),(Nr.litHtmlVersions??=[]).push(`3.3.2`);var fi=(e,t,n)=>{let r=n?.renderBefore??t,i=r._$litPart$;if(i===void 0){let e=n?.renderBefore??null;r._$litPart$=i=new ii(t.insertBefore(Br(),e),e,void 0,n??{})}return i._$AI(e),i},pi=globalThis,Z=class extends Mr{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let e=super.createRenderRoot();return this.renderOptions.renderBefore??=e.firstChild,e}update(e){let t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=fi(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return q}};Z._$litElement$=!0,Z.finalized=!0,pi.litElementHydrateSupport?.({LitElement:Z});var mi=pi.litElementPolyfillSupport;mi?.({LitElement:Z}),(pi.litElementVersions??=[]).push(`4.2.2`);function hi(e){if(!(!Number.isFinite(e)||!e||e<=0))return Math.ceil(e)}function gi(e){if(!e.mimeType?.startsWith(`video/`)||!Number.isFinite(e.durationSeconds)||!e.durationSeconds||e.durationSeconds<=0||e.durationSeconds>15)return!1;let t=e.size;return!(typeof t==`number`&&t>12582912)}var _i=640,vi=8,yi=72,bi=16,xi=704,Si=.9,Ci=.85;function Q(e){if(!(!Number.isFinite(e)||!e||e<=0))return e}function wi(){return{width:globalThis.innerWidth||document.documentElement.clientWidth||0,height:globalThis.innerHeight||document.documentElement.clientHeight||0}}function Ti(e,t){let n=e<=_i?vi:yi;return{width:Math.max(0,e-n*2),height:Math.max(0,t-bi*2)}}function Ei(e,t,n){let r=Q(e?.width),i=Q(e?.height);if(!r||!i)return null;let a=Ti(t,n);if(a.width<=0||a.height<=0)return null;let o=Math.min(a.width/r,a.height/i);return{width:Math.max(1,Math.round(r*o)),height:Math.max(1,Math.round(i*o))}}function Di(e,t,n){if(!e||e.mimeType?.startsWith(`video/`)||!Q(e.width)||!Q(e.height)||t<=0||n<=0)return!1;let r=Q(e.width),i=Q(e.height);if(!r||!i)return!1;let a=t<=_i,o=Ti(t,n),s=o.width,c=o.height;if(s<=0||c<=0)return!1;let l=r/i,u=Math.min(s,c*l);return l<Si&&u<(a?s:Math.min(s,xi))*Ci}var Oi=class extends Z{static properties={_images:{state:!0},_currentIndex:{state:!0},_open:{state:!0},_viewportWidth:{state:!0},_viewportHeight:{state:!0},_videoCurrentTime:{state:!0},_videoDuration:{state:!0},_videoMuted:{state:!0},_imageZoomed:{state:!0}};createRenderRoot(){return this.innerHTML=``,this}constructor(){super();let e=wi();this._images=[],this._currentIndex=0,this._open=!1,this._viewportWidth=e.width,this._viewportHeight=e.height,this._videoCurrentTime=0,this._videoDuration=0,this._videoMuted=!1,this._imageZoomed=!1}connectedCallback(){super.connectedCallback(),document.addEventListener(`click`,this.#e),window.addEventListener(`resize`,this.#l),this.#u()}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener(`click`,this.#e),window.removeEventListener(`resize`,this.#l)}open(e,t){this.#u(),this.#d(),this._images=e,this._currentIndex=Math.max(0,Math.min(t,e.length-1)),this.#m(this._images[this._currentIndex]),this._imageZoomed=!1,this._open=!0,document.dispatchEvent(new CustomEvent(wn,{detail:{open:!0}})),this.updateComplete.then(()=>{this.querySelector(`.media-lightbox`)?.showModal(),this.#f()})}close(){this.#d(),this.querySelector(`.media-lightbox`)?.close(),this._open=!1,document.dispatchEvent(new CustomEvent(wn,{detail:{open:!1}}))}#e=e=>{let t=e.target,n=t.closest(`[data-post-media] a[data-lightbox-index]`);if(n){let t=n.closest(`[data-lightbox-group]`);if(!t)return;e.preventDefault();let r=parseInt(n.dataset.lightboxIndex??`0`,10);try{let e=JSON.parse(t.dataset.lightboxGroup??`[]`);e.length>0&&this.open(e,r)}catch{}return}let r=t.closest(`[data-post-body] img`);if(r){e.preventDefault();let t=r.closest(`[data-post-body]`);if(!t)return;let n=Array.from(t.querySelectorAll(`img`)),i=n.map(e=>({url:e.src,alt:e.alt||``,width:Q(e.naturalWidth||Number(e.getAttribute(`width`))),height:Q(e.naturalHeight||Number(e.getAttribute(`height`)))})),a=n.indexOf(r);i.length>0&&this.open(i,Math.max(0,a))}};#t(){this._images.length<=1||(this.#d(),this._imageZoomed=!1,this._currentIndex=(this._currentIndex-1+this._images.length)%this._images.length)}#n(){this._images.length<=1||(this.#d(),this._imageZoomed=!1,this._currentIndex=(this._currentIndex+1)%this._images.length)}#r=e=>{let t=this._images[this._currentIndex];Di(t,this._viewportWidth,this._viewportHeight)&&(e.stopPropagation(),this._imageZoomed=!this._imageZoomed)};#i=e=>{let t=e,n=e.target;if(t.key===`Escape`){e.preventDefault(),this.close();return}if(n instanceof HTMLInputElement||n instanceof HTMLButtonElement||n instanceof HTMLVideoElement)return;if(!this._images[this._currentIndex]?.mimeType?.startsWith(`video/`)){t.key===`ArrowLeft`?(e.preventDefault(),this.#t()):t.key===`ArrowRight`&&(e.preventDefault(),this.#n());return}let r=this.querySelector(`.media-lightbox-video`);r&&this.#a(t,r)};#a(e,t){let n=Number.isFinite(t.duration)&&t.duration>0?t.duration:null,r=e=>{let r=n==null?Math.max(0,e):Math.max(0,Math.min(e,n));t.currentTime=r,this._videoCurrentTime=r},i=e.key,a=i.toLowerCase();if(i===` `||a===`k`)e.preventDefault(),t.paused?t.play().catch(()=>{}):t.pause();else if(i===`ArrowLeft`)e.preventDefault(),r(t.currentTime-2);else if(i===`ArrowRight`)e.preventDefault(),r(t.currentTime+2);else if(i===`Home`)e.preventDefault(),r(0);else if(i===`End`)n!=null&&(e.preventDefault(),r(n));else if(i.length===1&&i>=`0`&&i<=`9`)n!=null&&(e.preventDefault(),r(Number(i)/10*n));else if(i===`ArrowUp`)e.preventDefault(),t.volume=Math.min(1,t.volume+.05);else if(i===`ArrowDown`)e.preventDefault(),t.volume=Math.max(0,t.volume-.05);else if(a===`m`){e.preventDefault();let n=!t.muted;t.muted=n,this._videoMuted=n}else a===`f`&&(e.preventDefault(),this.#o(t))}#o(e){let t=document,n=e;if(document.fullscreenElement??t.webkitFullscreenElement){document.exitFullscreen?document.exitFullscreen().catch(()=>{}):t.webkitExitFullscreen?.();return}e.requestFullscreen?e.requestFullscreen().catch(()=>{}):n.webkitRequestFullscreen?n.webkitRequestFullscreen():n.webkitEnterFullscreen&&n.webkitEnterFullscreen()}#s=e=>{let t=e.target;(t===e.currentTarget||t.classList.contains(`media-lightbox-content`)||t.classList.contains(`media-lightbox-stage`))&&this.close()};#c=()=>{this.#d(),this._open&&document.dispatchEvent(new CustomEvent(wn,{detail:{open:!1}})),this._open=!1};#l=()=>{this.#u()};#u(){let e=wi();e.width===this._viewportWidth&&e.height===this._viewportHeight||(this._viewportWidth=e.width,this._viewportHeight=e.height)}#d(){this.querySelector(`.media-lightbox-video`)?.pause()}#f(){this.querySelector(`.media-lightbox-content`)?.focus()}#p=()=>{this.querySelector(`.media-lightbox-content`)?.focus({preventScroll:!0})};#m(e){this._videoCurrentTime=0,this._videoDuration=e?.durationSeconds&&e.durationSeconds>0?e.durationSeconds:0,this._videoMuted=!1}#h(){let e=this._images[this._currentIndex];if(!gi(e)){this.#m(e);return}let t=this.querySelector(`.media-lightbox-video`);t&&(t.currentTime=0,t.muted=this._videoMuted,t.play().catch(()=>{}))}#g=e=>{let t=e.currentTarget;Number.isFinite(t.duration)&&t.duration>0&&(this._videoDuration=t.duration),this._videoCurrentTime=t.currentTime,t.muted=this._videoMuted};#_=e=>{let t=e.currentTarget;this._videoCurrentTime=t.currentTime,Number.isFinite(t.duration)&&t.duration>0&&(this._videoDuration=t.duration)};#v=e=>{let t=e.currentTarget,n=this.querySelector(`.media-lightbox-video`),r=Number.parseFloat(t.value);!n||!Number.isFinite(r)||r<0||(n.currentTime=r,this._videoCurrentTime=r)};#y=()=>{this._videoMuted=!this._videoMuted;let e=this.querySelector(`.media-lightbox-video`);e&&(e.muted=this._videoMuted)};updated(e){if(super.updated(e),!this._open||!e.has(`_currentIndex`)&&!e.has(`_open`)&&!e.has(`_imageZoomed`))return;let t=this.querySelector(`.media-lightbox-stage`);t&&(t.scrollTop=0,t.scrollLeft=0,(e.has(`_currentIndex`)||e.has(`_open`))&&(this.#h(),this.#f()))}render(){if(!this._open)return J;let e=this._images[this._currentIndex],t=this._images.length>1,n=e?.mimeType?.startsWith(`video/`),r=gi(e),i=Di(e,this._viewportWidth,this._viewportHeight),a=i&&this._imageZoomed,o=r?Ei(e,this._viewportWidth,this._viewportHeight):null,s=r&&!!o&&o.height>o.width,c=o?`width:${o.width}px;height:${o.height}px;`:J,l=this._videoDuration>0?this._videoDuration:e?.durationSeconds??1,u=Math.min(this._videoCurrentTime,l),d=l>0?u/l*100:0;return K`
|
|
9
9
|
<dialog
|
|
10
10
|
class=${`media-lightbox${r?` media-lightbox-short`:``}`}
|
|
11
11
|
@keydown=${this.#i}
|
|
@@ -272,4 +272,4 @@ ${c}`:c;break;case`event`:r.event=c;break;case`id`:e(r.id=c);break;case`retry`:{
|
|
|
272
272
|
</div>`}
|
|
273
273
|
</div>
|
|
274
274
|
</dialog>
|
|
275
|
-
`:J}};customElements.define(`jant-text-preview`,Xi);var Zi=8;function Qi(e,t){let n=Number.parseFloat(e);return Number.isFinite(n)?n:t}function $i(e){return Qi(getComputedStyle(e).getPropertyValue(`--site-thread-context-max-height`).trim(),240)}function ea(e){if(e.dataset.threadContextToggleBound===`1`)return;e.dataset.threadContextToggleBound=`1`;let t=e.previousElementSibling;if(!(t instanceof HTMLElement)||t.dataset.threadContext===void 0)return;let n=e.querySelector(`.thread-context-toggle-label`),r=e.dataset.labelMore??`Show more`,i=e.dataset.labelLess??`Show less`,a=!1,o=t=>{e.setAttribute(`aria-expanded`,t?`true`:`false`),n&&(n.textContent=t?i:r)},s=()=>Array.from(t.querySelectorAll(`img`)).every(e=>e.complete),c=()=>{if(a)return;let n=$i(t),r=t.scrollHeight>n+Zi;t.dataset.collapsed===void 0&&(t.dataset.collapsed=``),r?(e.hidden=!1,o(!1)):s()&&(e.hidden=!0)};if(c(),t.querySelectorAll(`img`).forEach(e=>{e.complete||(e.addEventListener(`load`,c,{once:!0}),e.addEventListener(`error`,c,{once:!0}))}),`ResizeObserver`in globalThis){let e=0;new globalThis.ResizeObserver(()=>{cancelAnimationFrame(e),e=requestAnimationFrame(c)}).observe(t)}let l=()=>{let e=!1,n=r=>{e||r&&r.propertyName!==`max-height`||(e=!0,t.removeEventListener(`transitionend`,n),t.dataset.collapsed===void 0&&(t.style.maxHeight=``))};t.addEventListener(`transitionend`,n),window.setTimeout(n,600)};e.addEventListener(`click`,()=>{a=!0,t.dataset.collapsed===void 0?(t.style.maxHeight=`${t.scrollHeight}px`,t.offsetHeight,requestAnimationFrame(()=>{t.dataset.collapsed=``,t.style.maxHeight=``}),o(!1)):(t.style.maxHeight=`${t.scrollHeight}px`,t.offsetHeight,delete t.dataset.collapsed,o(!0)),l()})}function ta(e=document){e.querySelectorAll(`[data-thread-context-toggle]`).forEach(ea)}function na(e){let t=e.closest(`.thread-group-detail`);return t?t.querySelector(`.thread-detail-item`)===e:!1}function ra(){return globalThis.location.hash===`#continue`}function ia(e=document){let t=e.querySelector(`[data-post-current]`);if(!(t instanceof HTMLElement))return;let n=ra();if(globalThis.location.hash&&!n)return;let r=n?`auto`:`smooth`,i=na(t);requestAnimationFrame(()=>{i&&!n||t.scrollIntoView({behavior:r,block:`start`})})}document.addEventListener(`DOMContentLoaded`,()=>{ta(document),ia(document)}),document.querySelectorAll(`.archive-chip-dropdown`).forEach(e=>{let t=e.querySelector(`:scope > button`),n=e.querySelector(`:scope > [data-popover]`),r=n?n.querySelector(`[role="listbox"]`):null;if(!t||!n||!r)return;let i=Array.from(r.querySelectorAll(`[role="option"]`)),a=e.classList.contains(`archive-chip-media`),o=e.dataset.filterKey,s=new Set;a&&i.forEach(e=>{!e.dataset.navigate&&e.getAttribute(`aria-selected`)===`true`&&s.add(e.dataset.value)});let c=new Set(s),l=()=>{document.dispatchEvent(new CustomEvent(`basecoat:popover`,{detail:{source:e}})),n.setAttribute(`aria-hidden`,`false`),t.setAttribute(`aria-expanded`,`true`),a&&(c=new Set(s))},u=(e=!0)=>{if(n.getAttribute(`aria-hidden`)!==`true`&&(n.setAttribute(`aria-hidden`,`true`),t.setAttribute(`aria-expanded`,`false`),e&&t.focus(),a&&o&&(s.size!==c.size||[...s].some(e=>!c.has(e))))){let e=new URL(window.location.href),t=[...s];t.length>0?e.searchParams.set(o,t.join(`,`)):e.searchParams.delete(o),e.searchParams.delete(`hasMedia`),e.searchParams.delete(`page`),window.location.href=e.pathname+(e.search||``)}};t.addEventListener(`click`,e=>{e.target.closest(`.archive-chip-clear`)||(t.getAttribute(`aria-expanded`)===`true`?u():l())}),document.addEventListener(`click`,t=>{e.contains(t.target)||u(!1)}),document.addEventListener(`basecoat:popover`,t=>{t.detail.source!==e&&u(!1)}),r.addEventListener(`click`,e=>{let t=e.target.closest(`[role="option"]`);if(t){if(t.dataset.navigate){let e=t.dataset.value;typeof e==`string`&&e.startsWith(`/`)&&(window.location.href=e);return}if(a){let e=t.dataset.value;s.has(e)?(s.delete(e),t.removeAttribute(`aria-selected`)):(s.add(e),t.setAttribute(`aria-selected`,`true`))}else{let e=t.dataset.value;typeof e==`string`&&e.startsWith(`/`)&&(window.location.href=e)}}});let d=-1,f=e=>{d>-1&&i[d]&&i[d].classList.remove(`active`),d=e,d>-1&&i[d]&&(i[d].classList.add(`active`),i[d].scrollIntoView({block:`nearest`}))};r.addEventListener(`mousemove`,e=>{let t=e.target.closest(`[role="option"]`);if(t){let e=i.indexOf(t);e!==-1&&e!==d&&f(e)}}),r.addEventListener(`mouseleave`,()=>{f(-1)}),t.addEventListener(`keydown`,e=>{let t=n.getAttribute(`aria-hidden`)===`false`;if(e.key===`Escape`){t&&(e.preventDefault(),u());return}if(!t&&[`ArrowDown`,`ArrowUp`].includes(e.key)){e.preventDefault(),l();return}t&&(e.preventDefault(),e.key===`ArrowDown`?f(Math.min(d+1,i.length-1)):e.key===`ArrowUp`?f(Math.max(d-1,0)):e.key===`Enter`&&d>-1&&(i[d].click(),!a&&!i[d].dataset.navigate&&u()))})});function aa(e){let t=e.querySelector(`.site-header-more-btn`),n=e.querySelector(`.site-header-more-popover`);if(!t||!n||t.dataset.moreInitialized===`true`)return;t.dataset.moreInitialized=`true`;function r(){n.setAttribute(`aria-hidden`,`false`),t.setAttribute(`aria-expanded`,`true`),document.dispatchEvent(new CustomEvent(`basecoat:popover`,{detail:{source:t.parentElement}}))}function i(e=!1){n.setAttribute(`aria-hidden`,`true`),t.setAttribute(`aria-expanded`,`false`),e&&t.focus()}t.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation(),t.getAttribute(`aria-expanded`)===`true`?i():r()}),document.addEventListener(`click`,e=>{e.target instanceof Node&&(t.parentElement?.contains(e.target)||i())}),document.addEventListener(`keydown`,e=>{e.key===`Escape`&&n.getAttribute(`aria-hidden`)===`false`&&i(!0)}),document.addEventListener(`basecoat:popover`,e=>{e.detail?.source!==t.parentElement&&i()})}var oa=`jant:nav-fresh-visits`;function sa(){let e=document.createElement(`span`);return e.className=`site-header-link-fresh`,e.setAttribute(`aria-hidden`,`true`),e.textContent=`*`,e}function ca(e){try{let t=JSON.parse(localStorage.getItem(oa)||`{}`),n=location.pathname,r=e.querySelectorAll(`[data-fresh-at]`);for(let e of r){let r=new URL(e.href).pathname,i=parseInt(e.dataset.freshAt,10);if(r===n)t[r]=Math.floor(Date.now()/1e3);else{let n=t[r];if(!n||n<i){let t=e.querySelector(`svg`);e.insertBefore(sa(),t)}}}localStorage.setItem(oa,JSON.stringify(t))}catch{}}function la(e=document){let t=e.querySelector(`.site-header-hamburger`),n=e.querySelector(`#site-nav-drawer`),r=e.querySelector(`.site-nav-drawer-backdrop`),i=n?.querySelector(`.site-nav-drawer-close`);if(ca(e),aa(e),!t||!n||!r||t.dataset.drawerInitialized===`true`)return;t.dataset.drawerInitialized=`true`;function a(){n.setAttribute(`aria-hidden`,`false`),n.removeAttribute(`inert`),r.setAttribute(`aria-hidden`,`false`),t.setAttribute(`aria-expanded`,`true`),document.documentElement.classList.add(`drawer-open`);let e=n.querySelector(`.site-nav-drawer-close`)??n.querySelector(`a[href], button`);e&&e.focus()}function o(e=!0){n.setAttribute(`aria-hidden`,`true`),r.setAttribute(`aria-hidden`,`true`),t.setAttribute(`aria-expanded`,`false`),document.documentElement.classList.remove(`drawer-open`),n.addEventListener(`transitionend`,()=>{n.getAttribute(`aria-hidden`)===`true`&&n.setAttribute(`inert`,``)},{once:!0}),e&&t.focus()}t.addEventListener(`click`,()=>{t.getAttribute(`aria-expanded`)===`true`?o():a()}),i?.addEventListener(`click`,()=>o()),r.addEventListener(`click`,()=>o()),n.addEventListener(`click`,e=>{e.target instanceof Element&&e.target.closest(`a[href]`)&&o(!1)}),n.addEventListener(`keydown`,e=>{e.key===`Escape`&&(e.preventDefault(),o())})}la();function ua(e=document){e.querySelectorAll(`.collection-sort-menu`).forEach(e=>{if(e.dataset.collectionSortMenuInitialized===`true`)return;let t=e.querySelector(`:scope > .collection-sort-trigger`),n=e.querySelector(`:scope > [data-popover]`),r=n?.querySelector(`[data-collection-sort-options]`);if(!(t instanceof HTMLButtonElement)||!n||!r)return;let i=(e=!1)=>{n.getAttribute(`aria-hidden`)!==`true`&&(n.setAttribute(`aria-hidden`,`true`),t.setAttribute(`aria-expanded`,`false`),e&&t.focus())},a=()=>{document.dispatchEvent(new CustomEvent(`basecoat:popover`,{detail:{source:e}})),n.setAttribute(`aria-hidden`,`false`),t.setAttribute(`aria-expanded`,`true`)};t.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation(),t.getAttribute(`aria-expanded`)===`true`?i(!1):a()}),t.addEventListener(`keydown`,e=>{if(e.key===`Escape`){e.preventDefault(),i(!0);return}if(e.key===`ArrowDown`){e.preventDefault(),t.getAttribute(`aria-expanded`)!==`true`&&a();let n=r.querySelector(`a[href]`);n instanceof HTMLElement&&n.focus()}}),n.addEventListener(`keydown`,e=>{e.key===`Escape`&&(e.preventDefault(),i(!0))}),document.addEventListener(`click`,t=>{t.target instanceof Node&&(e.contains(t.target)||i(!1))}),document.addEventListener(`basecoat:popover`,t=>{t.detail?.source!==e&&i(!1)}),e.dataset.collectionSortMenuInitialized=`true`})}ua(),rn(),document.documentElement.dataset.jantVersion=`0.6.
|
|
275
|
+
`:J}};customElements.define(`jant-text-preview`,Xi);var Zi=8;function Qi(e,t){let n=Number.parseFloat(e);return Number.isFinite(n)?n:t}function $i(e){return Qi(getComputedStyle(e).getPropertyValue(`--site-thread-context-max-height`).trim(),240)}function ea(e){if(e.dataset.threadContextToggleBound===`1`)return;e.dataset.threadContextToggleBound=`1`;let t=e.previousElementSibling;if(!(t instanceof HTMLElement)||t.dataset.threadContext===void 0)return;let n=e.querySelector(`.thread-context-toggle-label`),r=e.dataset.labelMore??`Show more`,i=e.dataset.labelLess??`Show less`,a=!1,o=t=>{e.setAttribute(`aria-expanded`,t?`true`:`false`),n&&(n.textContent=t?i:r)},s=()=>Array.from(t.querySelectorAll(`img`)).every(e=>e.complete),c=()=>{if(a)return;let n=$i(t),r=t.scrollHeight>n+Zi;t.dataset.collapsed===void 0&&(t.dataset.collapsed=``),r?(e.hidden=!1,o(!1)):s()&&(e.hidden=!0)};if(c(),t.querySelectorAll(`img`).forEach(e=>{e.complete||(e.addEventListener(`load`,c,{once:!0}),e.addEventListener(`error`,c,{once:!0}))}),`ResizeObserver`in globalThis){let e=0;new globalThis.ResizeObserver(()=>{cancelAnimationFrame(e),e=requestAnimationFrame(c)}).observe(t)}let l=()=>{let e=!1,n=r=>{e||r&&r.propertyName!==`max-height`||(e=!0,t.removeEventListener(`transitionend`,n),t.dataset.collapsed===void 0&&(t.style.maxHeight=``))};t.addEventListener(`transitionend`,n),window.setTimeout(n,600)};e.addEventListener(`click`,()=>{a=!0,t.dataset.collapsed===void 0?(t.style.maxHeight=`${t.scrollHeight}px`,t.offsetHeight,requestAnimationFrame(()=>{t.dataset.collapsed=``,t.style.maxHeight=``}),o(!1)):(t.style.maxHeight=`${t.scrollHeight}px`,t.offsetHeight,delete t.dataset.collapsed,o(!0)),l()})}function ta(e=document){e.querySelectorAll(`[data-thread-context-toggle]`).forEach(ea)}function na(e){let t=e.closest(`.thread-group-detail`);return t?t.querySelector(`.thread-detail-item`)===e:!1}function ra(){return globalThis.location.hash===`#continue`}function ia(e=document){let t=e.querySelector(`[data-post-current]`);if(!(t instanceof HTMLElement))return;let n=ra();if(globalThis.location.hash&&!n)return;let r=n?`auto`:`smooth`,i=na(t);requestAnimationFrame(()=>{i&&!n||t.scrollIntoView({behavior:r,block:`start`})})}document.addEventListener(`DOMContentLoaded`,()=>{ta(document),ia(document)}),document.querySelectorAll(`.archive-chip-dropdown`).forEach(e=>{let t=e.querySelector(`:scope > button`),n=e.querySelector(`:scope > [data-popover]`),r=n?n.querySelector(`[role="listbox"]`):null;if(!t||!n||!r)return;let i=Array.from(r.querySelectorAll(`[role="option"]`)),a=e.classList.contains(`archive-chip-media`),o=e.dataset.filterKey,s=new Set;a&&i.forEach(e=>{!e.dataset.navigate&&e.getAttribute(`aria-selected`)===`true`&&s.add(e.dataset.value)});let c=new Set(s),l=()=>{document.dispatchEvent(new CustomEvent(`basecoat:popover`,{detail:{source:e}})),n.setAttribute(`aria-hidden`,`false`),t.setAttribute(`aria-expanded`,`true`),a&&(c=new Set(s))},u=(e=!0)=>{if(n.getAttribute(`aria-hidden`)!==`true`&&(n.setAttribute(`aria-hidden`,`true`),t.setAttribute(`aria-expanded`,`false`),e&&t.focus(),a&&o&&(s.size!==c.size||[...s].some(e=>!c.has(e))))){let e=new URL(window.location.href),t=[...s];t.length>0?e.searchParams.set(o,t.join(`,`)):e.searchParams.delete(o),e.searchParams.delete(`hasMedia`),e.searchParams.delete(`page`),window.location.href=e.pathname+(e.search||``)}};t.addEventListener(`click`,e=>{e.target.closest(`.archive-chip-clear`)||(t.getAttribute(`aria-expanded`)===`true`?u():l())}),document.addEventListener(`click`,t=>{e.contains(t.target)||u(!1)}),document.addEventListener(`basecoat:popover`,t=>{t.detail.source!==e&&u(!1)}),r.addEventListener(`click`,e=>{let t=e.target.closest(`[role="option"]`);if(t){if(t.dataset.navigate){let e=t.dataset.value;typeof e==`string`&&e.startsWith(`/`)&&(window.location.href=e);return}if(a){let e=t.dataset.value;s.has(e)?(s.delete(e),t.removeAttribute(`aria-selected`)):(s.add(e),t.setAttribute(`aria-selected`,`true`))}else{let e=t.dataset.value;typeof e==`string`&&e.startsWith(`/`)&&(window.location.href=e)}}});let d=-1,f=e=>{d>-1&&i[d]&&i[d].classList.remove(`active`),d=e,d>-1&&i[d]&&(i[d].classList.add(`active`),i[d].scrollIntoView({block:`nearest`}))};r.addEventListener(`mousemove`,e=>{let t=e.target.closest(`[role="option"]`);if(t){let e=i.indexOf(t);e!==-1&&e!==d&&f(e)}}),r.addEventListener(`mouseleave`,()=>{f(-1)}),t.addEventListener(`keydown`,e=>{let t=n.getAttribute(`aria-hidden`)===`false`;if(e.key===`Escape`){t&&(e.preventDefault(),u());return}if(!t&&[`ArrowDown`,`ArrowUp`].includes(e.key)){e.preventDefault(),l();return}t&&(e.preventDefault(),e.key===`ArrowDown`?f(Math.min(d+1,i.length-1)):e.key===`ArrowUp`?f(Math.max(d-1,0)):e.key===`Enter`&&d>-1&&(i[d].click(),!a&&!i[d].dataset.navigate&&u()))})});function aa(e){let t=e.querySelector(`.site-header-more-btn`),n=e.querySelector(`.site-header-more-popover`);if(!t||!n||t.dataset.moreInitialized===`true`)return;t.dataset.moreInitialized=`true`;function r(){n.setAttribute(`aria-hidden`,`false`),t.setAttribute(`aria-expanded`,`true`),document.dispatchEvent(new CustomEvent(`basecoat:popover`,{detail:{source:t.parentElement}}))}function i(e=!1){n.setAttribute(`aria-hidden`,`true`),t.setAttribute(`aria-expanded`,`false`),e&&t.focus()}t.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation(),t.getAttribute(`aria-expanded`)===`true`?i():r()}),document.addEventListener(`click`,e=>{e.target instanceof Node&&(t.parentElement?.contains(e.target)||i())}),document.addEventListener(`keydown`,e=>{e.key===`Escape`&&n.getAttribute(`aria-hidden`)===`false`&&i(!0)}),document.addEventListener(`basecoat:popover`,e=>{e.detail?.source!==t.parentElement&&i()})}var oa=`jant:nav-fresh-visits`;function sa(){let e=document.createElement(`span`);return e.className=`site-header-link-fresh`,e.setAttribute(`aria-hidden`,`true`),e.textContent=`*`,e}function ca(e){try{let t=JSON.parse(localStorage.getItem(oa)||`{}`),n=location.pathname,r=e.querySelectorAll(`[data-fresh-at]`);for(let e of r){let r=new URL(e.href).pathname,i=parseInt(e.dataset.freshAt,10);if(r===n)t[r]=Math.floor(Date.now()/1e3);else{let n=t[r];if(!n||n<i){let t=e.querySelector(`svg`);e.insertBefore(sa(),t)}}}localStorage.setItem(oa,JSON.stringify(t))}catch{}}function la(e=document){let t=e.querySelector(`.site-header-hamburger`),n=e.querySelector(`#site-nav-drawer`),r=e.querySelector(`.site-nav-drawer-backdrop`),i=n?.querySelector(`.site-nav-drawer-close`);if(ca(e),aa(e),!t||!n||!r||t.dataset.drawerInitialized===`true`)return;t.dataset.drawerInitialized=`true`;function a(){n.setAttribute(`aria-hidden`,`false`),n.removeAttribute(`inert`),r.setAttribute(`aria-hidden`,`false`),t.setAttribute(`aria-expanded`,`true`),document.documentElement.classList.add(`drawer-open`);let e=n.querySelector(`.site-nav-drawer-close`)??n.querySelector(`a[href], button`);e&&e.focus()}function o(e=!0){n.setAttribute(`aria-hidden`,`true`),r.setAttribute(`aria-hidden`,`true`),t.setAttribute(`aria-expanded`,`false`),document.documentElement.classList.remove(`drawer-open`),n.addEventListener(`transitionend`,()=>{n.getAttribute(`aria-hidden`)===`true`&&n.setAttribute(`inert`,``)},{once:!0}),e&&t.focus()}t.addEventListener(`click`,()=>{t.getAttribute(`aria-expanded`)===`true`?o():a()}),i?.addEventListener(`click`,()=>o()),r.addEventListener(`click`,()=>o()),n.addEventListener(`click`,e=>{e.target instanceof Element&&e.target.closest(`a[href]`)&&o(!1)}),n.addEventListener(`keydown`,e=>{e.key===`Escape`&&(e.preventDefault(),o())})}la();function ua(e=document){e.querySelectorAll(`.collection-sort-menu`).forEach(e=>{if(e.dataset.collectionSortMenuInitialized===`true`)return;let t=e.querySelector(`:scope > .collection-sort-trigger`),n=e.querySelector(`:scope > [data-popover]`),r=n?.querySelector(`[data-collection-sort-options]`);if(!(t instanceof HTMLButtonElement)||!n||!r)return;let i=(e=!1)=>{n.getAttribute(`aria-hidden`)!==`true`&&(n.setAttribute(`aria-hidden`,`true`),t.setAttribute(`aria-expanded`,`false`),e&&t.focus())},a=()=>{document.dispatchEvent(new CustomEvent(`basecoat:popover`,{detail:{source:e}})),n.setAttribute(`aria-hidden`,`false`),t.setAttribute(`aria-expanded`,`true`)};t.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation(),t.getAttribute(`aria-expanded`)===`true`?i(!1):a()}),t.addEventListener(`keydown`,e=>{if(e.key===`Escape`){e.preventDefault(),i(!0);return}if(e.key===`ArrowDown`){e.preventDefault(),t.getAttribute(`aria-expanded`)!==`true`&&a();let n=r.querySelector(`a[href]`);n instanceof HTMLElement&&n.focus()}}),n.addEventListener(`keydown`,e=>{e.key===`Escape`&&(e.preventDefault(),i(!0))}),document.addEventListener(`click`,t=>{t.target instanceof Node&&(e.contains(t.target)||i(!1))}),document.addEventListener(`basecoat:popover`,t=>{t.detail?.source!==e&&i(!1)}),e.dataset.collectionSortMenuInitialized=`true`})}ua(),rn(),document.documentElement.dataset.jantVersion=`0.6.5-49e3f862b84cf06c`;export{tn as _,Gi as a,Ai as c,hi as d,Z as f,ui as g,K as h,$ as i,ji as l,q as m,Ki as n,Mi as o,J as p,Wi as r,Ni as s,qi as t,ki as u};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e,n as t,o as n,t as r}from"./chunks/url-pLre2DM_.js";import{_ as i,a,c as o,d as s,f as c,g as l,h as u,i as d,l as f,m as p,n as m,o as h,p as g,r as _,s as v,t as y,u as b}from"./client-
|
|
1
|
+
import{a as e,n as t,o as n,t as r}from"./chunks/url-pLre2DM_.js";import{_ as i,a,c as o,d as s,f as c,g as l,h as u,i as d,l as f,m as p,n as m,o as h,p as g,r as _,s as v,t as y,u as b}from"./client-CBOLmWbM.js";var x={maxShortSide:1920,maxLongSide:8192,quality:.85,mimeType:`image/webp`};function S(e){return new Promise((t,n)=>{let r=new Image;r.onload=()=>{URL.revokeObjectURL(r.src),t(r)},r.onerror=()=>n(Error(`Failed to load image`)),r.src=URL.createObjectURL(e)})}function C(e,t,n){if(Math.max(e,t)>n.maxLongSide)return{passthrough:!0,width:e,height:t};let r=Math.min(e,t);if(r<=n.maxShortSide)return{passthrough:!1,width:e,height:t};let i=n.maxShortSide/r;return{passthrough:!1,width:Math.round(e*i),height:Math.round(t*i)}}async function ee(e,t,n){let r=await new Promise((r,i)=>{e.toBlob(e=>e?r(e):i(Error(`Failed to create blob`)),t,n)});return t!==`image/png`&&r.type===`image/png`?new Promise((t,r)=>{e.toBlob(e=>e?t(e):r(Error(`Failed to create blob`)),`image/jpeg`,n)}):r}async function te(e,t={}){let n={...x,...t},r=await S(e),i=C(r.width,r.height,n);if(i.passthrough)return{blob:e,width:i.width,height:i.height,processed:!1};let a=document.createElement(`canvas`);a.width=i.width,a.height=i.height;let o=a.getContext(`2d`);if(!o)throw Error(`Failed to get canvas context`);return o.drawImage(r,0,0,i.width,i.height),{blob:await ee(a,n.mimeType,n.quality),width:i.width,height:i.height,processed:!0}}async function ne(e,t={}){let n=await te(e,t);if(!n.processed)return{file:e,width:n.width,height:n.height};let r={"image/webp":`webp`,"image/jpeg":`jpg`,"image/png":`png`}[n.blob.type]??`png`,i=`${e.name.replace(/\.[^.]+$/,``)}.${r}`;return{file:new File([n.blob],i,{type:n.blob.type}),width:n.width,height:n.height}}var re={process:te,processToFile:ne},ie={ICO_16:16,ICO_32:32,APPLE_TOUCH:512};function ae(e){let t=e.length*16,n=6+t,r=new ArrayBuffer(6+t),i=new DataView(r);i.setUint16(0,0,!0),i.setUint16(2,1,!0),i.setUint16(4,e.length,!0);let a=[];for(let t=0;t<e.length;t++){let r=e[t],o=6+t*16;i.setUint8(o+0,r.size<256?r.size:0),i.setUint8(o+1,r.size<256?r.size:0),i.setUint8(o+2,0),i.setUint8(o+3,0),i.setUint16(o+4,1,!0),i.setUint16(o+6,32,!0),i.setUint32(o+8,r.png.byteLength,!0),i.setUint32(o+12,n,!0),n+=r.png.byteLength,a.push(r.png)}return new Blob([r,...a],{type:`image/x-icon`})}function oe(e){return typeof e==`object`&&!!e}function w(e,t){if(!oe(e))return;let n=e[t];return typeof n==`string`?n:void 0}function se(e,t){if(!oe(e))return;let n=e[t];return typeof n==`boolean`?n:void 0}function ce(e,t){if(!oe(e))return;let n=e[t];return typeof n==`number`?n:void 0}async function le(e){let t=await e.json();return oe(t)?t:{}}var ue=180;function de(e){return new Promise((t,n)=>{let r=new Image;r.onload=()=>{URL.revokeObjectURL(r.src),t(r)},r.onerror=()=>n(Error(`Failed to load image`)),r.src=URL.createObjectURL(e)})}function fe(e,t){let n=document.createElement(`canvas`);n.width=t,n.height=t;let r=n.getContext(`2d`);if(!r)throw Error(`Failed to get canvas context`);r.imageSmoothingEnabled=!0,r.imageSmoothingQuality=`high`;let i=Math.max(t/e.width,t/e.height),a=t/i,o=t/i,s=(e.width-a)/2,c=(e.height-o)/2;return r.drawImage(e,s,c,a,o,0,0,t,t),new Promise((e,t)=>{n.toBlob(n=>{n?e(n):t(Error(`Failed to create PNG blob`))},`image/png`)})}function pe(e,t){return e.type===`image/png`&&t.width===t.height&&t.width>=ue&&t.height>=ue}async function me(e,t){let n=e.closest(`form`)?.querySelector(`label`),r=n?.textContent??``;try{n&&(n.textContent=e.dataset.textProcessing||`Processing...`);let r=await de(t),a=t,o=t.name;if(t.type!==`image/svg+xml`){let e=await fe(r,512);a=new File([e],t.name.replace(/\.[^.]+$/,`.png`),{type:`image/png`}),o=a.name}let s=pe(t,r)?Promise.resolve(t):fe(r,ie.APPLE_TOUCH),[c,l,u]=await Promise.all([fe(r,16),fe(r,32),s]),[d,f]=await Promise.all([c.arrayBuffer(),l.arrayBuffer()]),p=ae([{size:16,png:d},{size:32,png:f}]);n&&(n.textContent=e.dataset.textUploading||`Uploading...`);let m=new FormData;m.append(`file`,a,o),m.append(`favicon`,p,`favicon.ico`),m.append(`appleTouch`,u,`apple-touch-icon.png`);let h=await fetch(i(`/settings/avatar`),{method:`POST`,headers:{Accept:`application/json`},body:m});if(!h.ok){let t=e.dataset.textError||`Upload failed. Please try again.`;try{let e=await le(h);t=w(e,`error`)??w(e,`message`)??t}catch{}throw Error(t)}let g=await le(h),_=w(g,`status`),v=w(g,`url`);if(_===`redirect`&&v){window.location.href=v;return}window.location.href=i(`/settings/avatar?saved`)}catch(t){n&&(n.textContent=r),d(t instanceof Error&&t.message?t.message:e.dataset.textError||`Upload failed. Please try again.`,`error`)}e.value=``}function he(){document.addEventListener(`change`,e=>{let t=e.target.closest(`[data-avatar-upload]`);t?.files?.[0]&&(e.stopPropagation(),me(t,t.files[0]))})}he();var ge=`default`,_e=class extends c{static properties={_open:{state:!0},_title:{state:!0},_message:{state:!0},_confirmLabel:{state:!0},_cancelLabel:{state:!0},_tone:{state:!0}};#e=[];#t=null;createRenderRoot(){return this.innerHTML=``,this}constructor(){super(),this._open=!1,this._title=``,this._message=``,this._confirmLabel=``,this._cancelLabel=``,this._tone=ge}disconnectedCallback(){super.disconnectedCallback();let e=this.#t;this.#t=null,e?.resolve(!1);for(let e of this.#e.splice(0))e.resolve(!1)}async confirm(e){return await new Promise(t=>{this.#e.push({...e,tone:e.tone??ge,resolve:t}),this.#t||this.#n()})}async#n(){if(this.#t||this.#e.length===0)return;let e=this.#e.shift();if(!e)return;this.#t=e,this._title=e.title??``,this._message=e.message,this._confirmLabel=e.confirmLabel,this._cancelLabel=e.cancelLabel,this._tone=e.tone??ge,this._open=!0,await this.updateComplete;let t=this.querySelector(`.confirm-dialog`);t&&(t.open||t.showModal(),t.querySelector(`.confirm-dialog-panel`)?.focus())}#r(e){let t=this.#t;if(!t)return;this.#t=null;let n=this.querySelector(`.confirm-dialog`);n?.open&&n.close(),this._open=!1,this._title=``,this._message=``,this._confirmLabel=``,this._cancelLabel=``,this._tone=ge,t.resolve(e),queueMicrotask(()=>void this.#n())}#i=e=>{e.preventDefault(),this.#r(!1)};#a=e=>{e.target===e.currentTarget&&this.#r(!1)};#o=e=>{if(e.key===`Escape`){e.preventDefault(),e.stopPropagation(),this.#r(!1);return}let t=e.target,n=t instanceof HTMLButtonElement||t instanceof HTMLInputElement||t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement||t instanceof HTMLAnchorElement;e.key===`Enter`&&!e.defaultPrevented&&!e.metaKey&&!e.ctrlKey&&!e.altKey&&!e.shiftKey&&!n&&(e.preventDefault(),this.#r(!0))};#s(){if(this._title)return{title:this._title,message:this._message};let e=this._message.match(/^(.+?[??])\s+(.+)$/u);return e?{title:e[1],message:e[2]}:{title:this._message,message:``}}render(){if(!this._open)return g;let{title:e,message:t}=this.#s(),n=this._tone===`danger`?`btn-destructive`:`btn`;return u`
|
|
2
2
|
<dialog
|
|
3
3
|
class="dialog confirm-dialog"
|
|
4
4
|
@cancel=${this.#i}
|