@jant/core 0.6.16 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -11
- package/bin/commands/assets/upload.js +192 -15
- package/bin/commands/import-site.js +60 -4
- package/bin/commands/reset-password.js +21 -8
- package/bin/commands/site/snapshot/export.js +1 -1
- package/bin/commands/site/snapshot/import.js +1 -1
- package/bin/lib/d1-query.js +5 -16
- package/bin/lib/node-env.js +40 -4
- package/bin/lib/site-selection.js +85 -29
- package/bin/lib/wrangler-cli.js +28 -2
- package/bin/lib/wrangler-json.js +35 -0
- package/dist/{app-C7_4oab9.js → app-K_Aa1MMn.js} +52476 -13330
- package/dist/client/.vite/manifest.json +255 -90
- package/dist/client/_assets/chunks/confirm-D7GrwsCN.js +45 -0
- package/dist/client/_assets/chunks/create-editor-CD3FhrOB.js +257 -0
- package/dist/client/_assets/chunks/{native-DpcrFAPh.js → emoji-mart-C4RpRKcU.js} +716 -1
- package/dist/client/_assets/chunks/footnote-rail-CmeoVtnU.js +1 -0
- package/dist/client/_assets/chunks/heic-to-CuP2Qlsw.js +1 -0
- package/dist/client/_assets/chunks/jant-locale-picker-DL6mIOT5.js +69 -0
- package/dist/client/_assets/chunks/lit-DW8VmJAT.js +2 -0
- package/dist/client/_assets/chunks/mediabunny-DRaCQ1r-.js +31 -0
- package/dist/client/_assets/chunks/rolldown-runtime-hePW80VL.js +1 -0
- package/dist/client/_assets/chunks/settings-paths-BcdySNx6.js +84 -0
- package/dist/client/_assets/chunks/site-header-nav-DzXsFk05.js +1 -0
- package/dist/client/_assets/chunks/slug-format-CRXO1AL5.js +1 -0
- package/dist/client/_assets/chunks/slugify-373citbs.js +1 -0
- package/dist/client/_assets/chunks/sortable-list-CgaL2jCs.js +2 -0
- package/dist/client/_assets/chunks/types-D5iF3H1a.js +1 -0
- package/dist/client/_assets/chunks/unsafe-html-B5ZEXaxg.js +1 -0
- package/dist/client/_assets/chunks/unsafe-svg-0QCkP0vZ.js +2 -0
- package/dist/client/_assets/client-GiYENVw8.css +2 -0
- package/dist/client/_assets/client-VnFxJN7G.js +295 -0
- package/dist/client/_assets/client-auth-k8gJ6QJj.js +828 -0
- package/dist/client/_assets/client-author-DQ8R-8KR.css +2 -0
- package/dist/client/_assets/client-compose-B_kDtWkW.js +2004 -0
- package/dist/client/_assets/client-manage-M90aSTOk.js +2170 -0
- package/dist/client/_assets/client-settings-DfYs9n1F.js +1112 -0
- package/dist/{export-Dl5KCiEs.js → github-sync-BPAvT999.js} +2254 -107
- package/dist/index.js +2 -5
- package/dist/node.js +5 -7
- package/package.json +3 -3
- package/src/__tests__/auth-session-freshness.test.ts +57 -0
- package/src/__tests__/basecoat-variants.test.ts +121 -0
- package/src/__tests__/bin/assets-upload.test.ts +68 -0
- package/src/__tests__/export-hugo-build.test.ts +260 -0
- package/src/__tests__/export-service.test.ts +231 -0
- package/src/__tests__/helpers/component-css.ts +91 -0
- package/src/__tests__/helpers/db.ts +33 -0
- package/src/__tests__/helpers/export-fixtures.ts +3 -0
- package/src/__tests__/stylesheet-audience.test.ts +159 -0
- package/src/__tests__/stylesheet-breakpoints.test.ts +183 -0
- package/src/app.tsx +71 -16
- package/src/auth.ts +18 -1
- package/src/client/__tests__/collection-page-actions.test.ts +51 -2
- package/src/client/__tests__/compose-bridge-image-upload.test.ts +196 -0
- package/src/client/__tests__/compose-bridge-video-poster.test.ts +159 -0
- package/src/client/__tests__/compose-bridge.test.ts +272 -0
- package/src/client/__tests__/compose-launch.test.ts +62 -1
- package/src/client/__tests__/compose-shortcuts.test.ts +38 -9
- package/src/client/__tests__/compose-triggers.test.ts +90 -0
- package/src/client/__tests__/copy-field.test.ts +162 -0
- package/src/client/__tests__/custom-url-menu.test.ts +127 -6
- package/src/client/__tests__/image-processor.test.ts +324 -2
- package/src/client/__tests__/lazy-entries.test.ts +92 -0
- package/src/client/__tests__/media-scroll-hint.test.ts +155 -0
- package/src/client/__tests__/runtime-paths.test.ts +84 -0
- package/src/client/__tests__/smart-collection-page-actions.test.ts +158 -0
- package/src/client/__tests__/toast.test.ts +23 -0
- package/src/client/__tests__/video-processor-probe.test.ts +175 -0
- package/src/client/__tests__/video-processor.test.ts +181 -0
- package/src/client/audio-processor.ts +24 -15
- package/src/client/audio-waveform.ts +49 -0
- package/src/client/collection-dialog-host.ts +72 -0
- package/src/client/collection-navigation.ts +51 -16
- package/src/client/collection-page-actions.ts +26 -0
- package/src/client/components/__tests__/jant-collection-dialog.test.ts +329 -0
- package/src/client/components/__tests__/jant-collection-directory.test.ts +274 -10
- package/src/client/components/__tests__/jant-collection-form.test.ts +59 -178
- package/src/client/components/__tests__/jant-command-palette.test.ts +28 -0
- package/src/client/components/__tests__/jant-compose-dialog-draft-storage.test.ts +340 -0
- package/src/client/components/__tests__/jant-compose-dialog.test.ts +1250 -53
- package/src/client/components/__tests__/jant-compose-editor.test.ts +544 -40
- package/src/client/components/__tests__/jant-compose-fullscreen.test.ts +0 -1
- package/src/client/components/__tests__/jant-locale-picker.test.ts +207 -0
- package/src/client/components/__tests__/jant-nav-manager.test.ts +234 -15
- package/src/client/components/__tests__/jant-post-menu.test.ts +413 -2
- package/src/client/components/__tests__/jant-post-picker.test.ts +197 -0
- package/src/client/components/__tests__/jant-settings-avatar.test.ts +15 -12
- package/src/client/components/__tests__/jant-settings-general.test.ts +541 -172
- package/src/client/components/__tests__/jant-settings-language.test.ts +851 -0
- package/src/client/components/__tests__/jant-smart-collection-dialog.test.ts +665 -0
- package/src/client/components/collection-dialog-types.ts +49 -0
- package/src/client/components/collection-manager-types.ts +32 -1
- package/src/client/components/collection-types.ts +1 -15
- package/src/client/components/compose-types.ts +75 -1
- package/src/client/components/jant-collection-dialog.ts +722 -0
- package/src/client/components/jant-collection-directory.ts +567 -182
- package/src/client/components/jant-collection-form.ts +53 -232
- package/src/client/components/jant-command-palette.ts +100 -49
- package/src/client/components/jant-compose-dialog.ts +1486 -707
- package/src/client/components/jant-compose-editor.ts +673 -336
- package/src/client/components/jant-compose-fullscreen.ts +51 -43
- package/src/client/components/jant-config-editor.ts +65 -53
- package/src/client/components/jant-confirm-dialog.ts +13 -11
- package/src/client/components/jant-locale-picker.ts +418 -0
- package/src/client/components/jant-media-lightbox.ts +146 -136
- package/src/client/components/jant-nav-manager.ts +690 -366
- package/src/client/components/jant-post-menu.ts +1086 -282
- package/src/client/components/jant-post-picker.ts +324 -0
- package/src/client/components/jant-repo-picker.ts +138 -106
- package/src/client/components/jant-settings-avatar.ts +31 -27
- package/src/client/components/jant-settings-general.ts +617 -543
- package/src/client/components/jant-settings-language.ts +1087 -0
- package/src/client/components/jant-smart-collection-dialog.ts +1021 -0
- package/src/client/components/jant-text-preview.ts +94 -86
- package/src/client/components/nav-manager-types.ts +62 -1
- package/src/client/components/settings-types.ts +14 -29
- package/src/client/components/smart-collection-conditions.ts +285 -0
- package/src/client/components/smart-collection-dialog-types.ts +68 -0
- package/src/client/compose-bridge.ts +214 -141
- package/src/client/compose-launch.ts +76 -2
- package/src/client/compose-shortcuts.ts +6 -8
- package/src/client/compose-triggers.ts +50 -0
- package/src/client/copy-field.ts +108 -0
- package/src/client/custom-url-menu.ts +60 -4
- package/src/client/icons.ts +14 -0
- package/src/client/image-plan.ts +165 -0
- package/src/client/image-processor.ts +195 -117
- package/src/client/image-worker-client.ts +45 -0
- package/src/client/image-worker.ts +135 -0
- package/src/client/lazy-entries.ts +95 -0
- package/src/client/lazy-slugify.ts +2 -2
- package/src/client/media-scroll-hint.ts +43 -2
- package/src/client/mediabunny.ts +29 -0
- package/src/client/post-picker.ts +41 -0
- package/src/client/runtime-paths.ts +74 -1
- package/src/client/settings-bridge.ts +4 -10
- package/src/client/site-header-nav.js +18 -6
- package/src/client/smart-collection-dialog-host.ts +116 -0
- package/src/client/smart-collection-page-actions.ts +208 -0
- package/src/client/tiptap/__tests__/bubble-menu.test.ts +110 -0
- package/src/client/tiptap/__tests__/floating-position.test.ts +136 -1
- package/src/client/tiptap/__tests__/inline-image-upload.test.ts +37 -0
- package/src/client/tiptap/bubble-menu.ts +47 -16
- package/src/client/tiptap/floating-position.ts +216 -2
- package/src/client/tiptap/inline-image-upload.ts +7 -3
- package/src/client/tiptap/link-toolbar.ts +22 -9
- package/src/client/toast.ts +13 -0
- package/src/client/types/vite-worker.d.ts +12 -0
- package/src/client/upload-with-metadata.ts +3 -13
- package/src/client/video-processor.ts +351 -107
- package/src/client-auth.ts +14 -31
- package/src/client-compose.ts +19 -0
- package/src/client-manage.ts +13 -0
- package/src/client-settings.ts +14 -0
- package/src/client-site.ts +10 -3
- package/src/client.ts +4 -0
- package/src/db/__tests__/backfill-nav-label-mirrors.test.ts +149 -0
- package/src/db/__tests__/schema-enum-sources.test.ts +33 -0
- package/src/db/__tests__/smart-collection-placement.test.ts +402 -0
- package/src/db/backfills/0006_clear_mirrored_page_nav_labels.sql +31 -0
- package/src/db/migrations/0032_married_tomas.sql +3 -0
- package/src/db/migrations/0033_busy_johnny_storm.sql +198 -0
- package/src/db/migrations/0034_cheerful_rumiko_fujikawa.sql +35 -0
- package/src/db/migrations/meta/0032_snapshot.json +2582 -0
- package/src/db/migrations/meta/0033_snapshot.json +2816 -0
- package/src/db/migrations/meta/0034_snapshot.json +2816 -0
- package/src/db/migrations/meta/_journal.json +21 -0
- package/src/db/migrations/pg/0030_abandoned_nighthawk.sql +3 -0
- package/src/db/migrations/pg/0031_strong_ultimatum.sql +128 -0
- package/src/db/migrations/pg/0032_furry_multiple_man.sql +6 -0
- package/src/db/migrations/pg/meta/0030_snapshot.json +3329 -0
- package/src/db/migrations/pg/meta/0031_snapshot.json +3660 -0
- package/src/db/migrations/pg/meta/0032_snapshot.json +3660 -0
- package/src/db/migrations/pg/meta/_journal.json +21 -0
- package/src/db/pg/schema.ts +195 -27
- package/src/db/post-visibility.ts +117 -0
- package/src/db/schema.ts +222 -27
- package/src/i18n/__tests__/detect.test.ts +26 -81
- package/src/i18n/__tests__/supported-locales.test.ts +83 -0
- package/src/i18n/context.tsx +12 -2
- package/src/i18n/detect.ts +7 -66
- package/src/i18n/locales/glossary.zh-Hans.yml +44 -4
- package/src/i18n/locales/glossary.zh-Hant.yml +44 -4
- package/src/i18n/locales/public/en.po +490 -158
- package/src/i18n/locales/public/en.ts +1 -1
- package/src/i18n/locales/public/zh-Hans.po +487 -155
- package/src/i18n/locales/public/zh-Hans.ts +1 -1
- package/src/i18n/locales/public/zh-Hant.po +487 -155
- package/src/i18n/locales/public/zh-Hant.ts +1 -1
- package/src/i18n/locales/settings/en.po +551 -69
- package/src/i18n/locales/settings/en.ts +1 -1
- package/src/i18n/locales/settings/zh-Hans.po +597 -115
- package/src/i18n/locales/settings/zh-Hans.ts +1 -1
- package/src/i18n/locales/settings/zh-Hant.po +610 -128
- package/src/i18n/locales/settings/zh-Hant.ts +1 -1
- package/src/i18n/locales.ts +94 -0
- package/src/i18n/middleware.ts +12 -2
- package/src/i18n/supported-locales.ts +80 -0
- package/src/lib/__tests__/api-settings.test.ts +11 -2
- package/src/lib/__tests__/asset-path.test.ts +92 -0
- package/src/lib/__tests__/deferred.test.ts +90 -0
- package/src/lib/__tests__/discover-ping.test.ts +89 -0
- package/src/lib/__tests__/discover.test.ts +410 -0
- package/src/lib/__tests__/feed-policy.test.ts +26 -0
- package/src/lib/__tests__/feed.test.ts +1526 -15
- package/src/lib/__tests__/filter-dimensions.test.ts +341 -0
- package/src/lib/__tests__/hosted-signin.test.ts +1 -1
- package/src/lib/__tests__/http-cache.test.ts +162 -0
- package/src/lib/__tests__/jant-docs-dev.test.ts +21 -0
- package/src/lib/__tests__/jant-docs.test.ts +23 -0
- package/src/lib/__tests__/lang-detect.test.ts +231 -0
- package/src/lib/__tests__/media-helpers.test.ts +81 -0
- package/src/lib/__tests__/navigation.test.ts +135 -1
- package/src/lib/__tests__/resolve-config.test.ts +64 -3
- package/src/lib/__tests__/schemas.test.ts +42 -4
- package/src/lib/__tests__/site-unavailable-page.test.ts +25 -0
- package/src/lib/__tests__/slug.test.ts +70 -0
- package/src/lib/__tests__/slugify.test.ts +85 -0
- package/src/lib/__tests__/storage.test.ts +32 -0
- package/src/lib/__tests__/thread-fold.test.ts +113 -0
- package/src/lib/__tests__/upload-sideload.test.ts +14 -0
- package/src/lib/__tests__/url-fetch.test.ts +1 -2
- package/src/lib/__tests__/url.test.ts +78 -72
- package/src/lib/__tests__/view-language.test.ts +413 -0
- package/src/lib/__tests__/worker-response-cache.test.ts +90 -0
- package/src/lib/address.ts +57 -0
- package/src/lib/api-posts.ts +12 -0
- package/src/lib/asset-path.ts +98 -1
- package/src/lib/build-env.ts +16 -0
- package/src/lib/collection-groups.ts +5 -1
- package/src/lib/collection-paths.ts +3 -10
- package/src/lib/constants.ts +28 -3
- package/src/lib/copy-field.ts +36 -0
- package/src/lib/crypto.ts +40 -0
- package/src/lib/csp-builder.ts +2 -1
- package/src/lib/deferred.ts +79 -0
- package/src/lib/discover-ping.ts +141 -0
- package/src/lib/discover.ts +437 -0
- package/src/lib/env.ts +134 -0
- package/src/lib/errors.ts +33 -0
- package/src/lib/feed-policy.ts +236 -2
- package/src/lib/feed.ts +926 -73
- package/src/lib/filter-dimensions.ts +1349 -0
- package/src/lib/github-sync-site-config.ts +3 -0
- package/src/lib/hosted-signin.ts +1 -1
- package/src/lib/http-cache.ts +148 -0
- package/src/lib/hugo-markdown.ts +16 -0
- package/src/lib/icons.ts +9 -2
- package/src/lib/ids.ts +3 -0
- package/src/lib/jant-docs.ts +42 -0
- package/src/lib/lang-detect.ts +308 -0
- package/src/lib/media-helpers.ts +13 -1
- package/src/lib/navigation.ts +78 -11
- package/src/lib/pagination.ts +28 -24
- package/src/lib/per-language-surfaces.ts +67 -0
- package/src/lib/post-meta.ts +19 -0
- package/src/lib/render.tsx +55 -7
- package/src/lib/resolve-config.ts +53 -5
- package/src/lib/schemas.ts +201 -10
- package/src/lib/site-header-fragment.tsx +2 -1
- package/src/lib/site-unavailable-page.ts +47 -0
- package/src/lib/slug.ts +51 -7
- package/src/lib/slugify.ts +113 -0
- package/src/lib/startup-config.ts +4 -6
- package/src/lib/storage.ts +7 -0
- package/src/lib/summary.ts +50 -0
- package/src/lib/thread-fold.ts +161 -0
- package/src/lib/time.ts +32 -0
- package/src/lib/timeline.ts +42 -1
- package/src/lib/tiptap-render.ts +1 -2
- package/src/lib/upload.ts +16 -13
- package/src/lib/url.ts +139 -86
- package/src/lib/version.ts +10 -8
- package/src/lib/view-language.ts +436 -0
- package/src/lib/view.ts +51 -23
- package/src/lib/viewer-context.ts +62 -0
- package/src/middleware/__tests__/auth.test.ts +70 -2
- package/src/middleware/__tests__/cache-control.test.ts +71 -3
- package/src/middleware/__tests__/onboarding.test.ts +76 -5
- package/src/middleware/__tests__/secure-headers.test.ts +1 -1
- package/src/middleware/__tests__/session.test.ts +181 -33
- package/src/middleware/auth.ts +50 -31
- package/src/middleware/cache-control.ts +75 -10
- package/src/middleware/config.ts +6 -6
- package/src/middleware/error-handler.ts +12 -0
- package/src/middleware/onboarding.ts +32 -10
- package/src/middleware/secure-headers.ts +1 -1
- package/src/middleware/session.ts +96 -8
- package/src/node/__tests__/cli-migrate.test.ts +21 -19
- package/src/node/__tests__/cli-reset-password.test.ts +81 -8
- package/src/node/__tests__/cli-runtime-target.test.ts +48 -1
- package/src/node/__tests__/cli-site-selection.test.ts +128 -38
- package/src/node/__tests__/runtime.test.ts +37 -0
- package/src/node/index.ts +1 -0
- package/src/preset.css +76 -22
- package/src/routes/__tests__/feed-validator.test.ts +156 -0
- package/src/routes/api/__tests__/collections.test.ts +114 -0
- package/src/routes/api/__tests__/discover.test.ts +222 -0
- package/src/routes/api/__tests__/nav-items.test.ts +212 -2
- package/src/routes/api/__tests__/post-translations.test.ts +829 -0
- package/src/routes/api/__tests__/settings.test.ts +24 -3
- package/src/routes/api/__tests__/telegram.test.ts +6 -5
- package/src/routes/api/collections.ts +49 -6
- package/src/routes/api/custom-urls.ts +0 -1
- package/src/routes/api/discover.ts +95 -0
- package/src/routes/api/export.ts +3 -0
- package/src/routes/api/internal/__tests__/sites.test.ts +42 -2
- package/src/routes/api/nav-items.ts +55 -8
- package/src/routes/api/posts.ts +159 -0
- package/src/routes/api/public/__tests__/archive.test.ts +111 -0
- package/src/routes/api/public/archive.ts +77 -81
- package/src/routes/api/public/posts.ts +23 -6
- package/src/routes/api/smart-collections.ts +132 -0
- package/src/routes/api/telegram.ts +2 -40
- package/src/routes/api/uploads.ts +1 -2
- package/src/routes/auth/__tests__/setup-auth.test.ts +137 -0
- package/src/routes/auth/__tests__/setup-discover.test.ts +204 -0
- package/src/routes/auth/__tests__/setup-flow.test.ts +270 -0
- package/src/routes/auth/__tests__/setup-page.test.tsx +329 -0
- package/src/routes/auth/__tests__/setup-steps.test.ts +310 -0
- package/src/routes/auth/__tests__/setup.test.ts +278 -26
- package/src/routes/auth/__tests__/signin.test.ts +135 -0
- package/src/routes/auth/setup.tsx +934 -186
- package/src/routes/auth/signin.tsx +10 -8
- package/src/routes/compose.tsx +5 -0
- package/src/routes/dash/__tests__/custom-urls-archive.test.ts +44 -0
- package/src/routes/dash/__tests__/custom-urls-page.test.ts +49 -0
- package/src/routes/dash/__tests__/delete-account.test.ts +106 -0
- package/src/routes/dash/__tests__/settings-discover.test.ts +213 -0
- package/src/routes/dash/custom-urls.tsx +1 -37
- package/src/routes/dash/settings.tsx +502 -41
- package/src/routes/discover-announce.ts +96 -0
- package/src/routes/feed/__tests__/feed.test.ts +165 -2
- package/src/routes/feed/feed.ts +69 -40
- package/src/routes/feed/sitemap.ts +95 -11
- package/src/routes/pages/__tests__/archive-indexing.test.ts +200 -0
- package/src/routes/pages/__tests__/archive-params.test.ts +370 -6
- package/src/routes/pages/__tests__/collection-routing.test.ts +16 -0
- package/src/routes/pages/__tests__/collections-feed-links.test.ts +72 -0
- package/src/routes/pages/__tests__/collections.test.ts +9 -3
- package/src/routes/pages/__tests__/custom-archive-url.test.ts +119 -0
- package/src/routes/pages/__tests__/feed-autodiscovery.test.ts +148 -0
- package/src/routes/pages/__tests__/language-routing.test.ts +679 -0
- package/src/routes/pages/__tests__/post-preview-partial.test.ts +96 -0
- package/src/routes/pages/__tests__/smart-collection.test.ts +298 -0
- package/src/routes/pages/__tests__/subscribe.test.ts +248 -0
- package/src/routes/pages/archive.tsx +471 -369
- package/src/routes/pages/collection.tsx +94 -96
- package/src/routes/pages/collections.tsx +38 -50
- package/src/routes/pages/featured.tsx +32 -13
- package/src/routes/pages/home.tsx +25 -6
- package/src/routes/pages/language.tsx +113 -0
- package/src/routes/pages/latest.tsx +26 -16
- package/src/routes/pages/new.tsx +3 -0
- package/src/routes/pages/page.tsx +178 -17
- package/src/routes/pages/partials.tsx +41 -0
- package/src/routes/pages/search.tsx +18 -3
- package/src/routes/pages/smart-collection.tsx +340 -0
- package/src/routes/pages/subscribe.tsx +182 -0
- package/src/runtime/__tests__/index.test.ts +19 -0
- package/src/runtime/__tests__/node.test.ts +129 -4
- package/src/runtime/cloudflare.ts +21 -2
- package/src/runtime/index.ts +27 -1
- package/src/runtime/node.ts +18 -1
- package/src/runtime/site.ts +95 -24
- package/src/services/__tests__/auth.test.ts +116 -7
- package/src/services/__tests__/collection.test.ts +108 -4
- package/src/services/__tests__/language.test.ts +495 -0
- package/src/services/__tests__/navigation.test.ts +213 -10
- package/src/services/__tests__/path.test.ts +180 -0
- package/src/services/__tests__/post-language.test.ts +830 -0
- package/src/services/__tests__/post.test.ts +46 -9
- package/src/services/__tests__/settings.test.ts +228 -17
- package/src/services/__tests__/site-admin.test.ts +5 -5
- package/src/services/__tests__/smart-collection.test.ts +651 -0
- package/src/services/about-page.ts +22 -1
- package/src/services/auth.ts +51 -49
- package/src/services/bootstrap.ts +188 -38
- package/src/services/collection-directory-position.ts +76 -0
- package/src/services/collection.ts +331 -46
- package/src/services/custom-url.ts +27 -22
- package/src/services/export-theme/assets/client-site.css +1 -1
- package/src/services/export-theme/assets/client-site.js +123 -123
- package/src/services/export-theme/layouts/_default/rss.xml +77 -1
- package/src/services/export-theme/layouts/partials/feed-post-content.xml +105 -2
- package/src/services/export-theme/layouts/partials/media-gallery.html +35 -21
- package/src/services/export-theme/layouts/partials/pagination.html +14 -13
- package/src/services/export-theme/layouts/partials/post-card.html +8 -4
- package/src/services/export-theme/layouts/partials/reply.html +2 -1
- package/src/services/export-theme/layouts/partials/thread-preview.html +40 -30
- package/src/services/export-theme/styles/main.css +13 -1
- package/src/services/export.ts +278 -19
- package/src/services/index.ts +34 -3
- package/src/services/language.ts +412 -0
- package/src/services/mcp.ts +3 -1
- package/src/services/media.ts +14 -6
- package/src/services/navigation.ts +429 -67
- package/src/services/path.ts +221 -6
- package/src/services/post.ts +1021 -152
- package/src/services/search.ts +39 -2
- package/src/services/settings.ts +238 -43
- package/src/services/site-admin.ts +24 -7
- package/src/services/site.ts +77 -1
- package/src/services/smart-collection.ts +636 -0
- package/src/services/telegram.ts +20 -22
- package/src/services/upload-session.ts +1 -3
- package/src/style-author.css +27 -0
- package/src/styles/components-author.css +1622 -0
- package/src/styles/components.css +24 -1571
- package/src/styles/site-media.css +16 -2
- package/src/styles/tokens.css +82 -12
- package/src/styles/ui-author.css +7602 -0
- package/src/styles/ui.css +1087 -7219
- package/src/types/app-context.ts +7 -0
- package/src/types/bindings.ts +3 -0
- package/src/types/config.ts +94 -15
- package/src/types/constants.ts +188 -16
- package/src/types/entities.ts +87 -1
- package/src/types/operations.ts +64 -2
- package/src/types/props.ts +157 -31
- package/src/types/views.ts +55 -1
- package/src/ui/__tests__/font-themes.test.ts +52 -12
- package/src/ui/compose/ComposeDialog.tsx +201 -7
- package/src/ui/compose/ComposePrompt.tsx +1 -5
- package/src/ui/compose/__tests__/ComposeDialog.test.tsx +125 -0
- package/src/ui/dash/appearance/AdvancedContent.tsx +2 -2
- package/src/ui/dash/appearance/CodeInjectionContent.tsx +12 -16
- package/src/ui/dash/appearance/NavigationContent.tsx +117 -16
- package/src/ui/dash/appearance/__tests__/NavigationContent.test.tsx +33 -11
- package/src/ui/dash/appearance/__tests__/system-nav-descriptions.test.ts +44 -0
- package/src/ui/dash/appearance/system-nav-descriptions.ts +75 -0
- package/src/ui/dash/settings/AccountMenuContent.tsx +2 -2
- package/src/ui/dash/settings/ApiTokensContent.tsx +2 -1
- package/src/ui/dash/settings/ConfigEditorContent.tsx +35 -16
- package/src/ui/dash/settings/GeneralContent.tsx +275 -113
- package/src/ui/dash/settings/LanguageContent.tsx +409 -0
- package/src/ui/dash/settings/SettingsRootContent.tsx +19 -1
- package/src/ui/dash/settings/__tests__/GeneralContent.test.tsx +324 -4
- package/src/ui/dash/settings/__tests__/LanguageContent.test.tsx +144 -0
- package/src/ui/dash/settings/__tests__/discover-copy.test.ts +66 -0
- package/src/ui/dash/settings/discover-copy.ts +116 -0
- package/src/ui/feed/LinkCard.tsx +55 -45
- package/src/ui/feed/NoteCard.tsx +9 -4
- package/src/ui/feed/PostStatusBadges.tsx +90 -43
- package/src/ui/feed/QuoteCard.tsx +55 -30
- package/src/ui/feed/ThreadPreview.tsx +6 -2
- package/src/ui/feed/__tests__/thread-preview.test.ts +13 -16
- package/src/ui/feed/__tests__/timeline-cards.test.ts +314 -49
- package/src/ui/feed/thread-preview-state.ts +20 -6
- package/src/ui/font-themes.ts +39 -29
- package/src/ui/layouts/BaseLayout.tsx +155 -10
- package/src/ui/layouts/SiteLayout.tsx +192 -34
- package/src/ui/layouts/__tests__/BaseLayout.test.tsx +196 -17
- package/src/ui/layouts/__tests__/SiteLayout.test.tsx +109 -85
- package/src/ui/pages/ArchivePage.tsx +282 -289
- package/src/ui/pages/CollectionPage.tsx +86 -76
- package/src/ui/pages/CollectionsPage.tsx +5 -0
- package/src/ui/pages/ComposePage.tsx +8 -0
- package/src/ui/pages/PostPage.tsx +47 -0
- package/src/ui/pages/SearchPage.tsx +3 -3
- package/src/ui/pages/SmartCollectionPage.tsx +434 -0
- package/src/ui/pages/SubscribePage.tsx +236 -0
- package/src/ui/pages/__tests__/ArchivePage.test.tsx +65 -9
- package/src/ui/pages/__tests__/collections-directory-rows.test.tsx +92 -0
- package/src/ui/pages/__tests__/collections-view-links.test.tsx +81 -0
- package/src/ui/shared/CollectionDirectory.tsx +178 -3
- package/src/ui/shared/CollectionsManager.tsx +70 -17
- package/src/ui/shared/CopyField.tsx +127 -0
- package/src/ui/shared/EmptyPostContent.tsx +23 -0
- package/src/ui/shared/MediaGallery.tsx +125 -46
- package/src/ui/shared/Pagination.tsx +20 -5
- package/src/ui/shared/PostFooter.tsx +20 -11
- package/src/ui/shared/__tests__/archive-labels.test.ts +100 -0
- package/src/ui/shared/__tests__/media-gallery.test.ts +210 -2
- package/src/ui/shared/__tests__/navigation-labels.test.ts +16 -22
- package/src/ui/shared/__tests__/pagination.test.ts +38 -24
- package/src/ui/shared/__tests__/post-footer.test.ts +32 -0
- package/src/ui/shared/archive-labels.ts +98 -0
- package/src/ui/shared/collection-management-labels.ts +94 -16
- package/src/ui/shared/navigation-labels.ts +45 -71
- package/src/ui/shared/post-article-attributes.ts +2 -0
- package/src/ui/shared/smart-collection-labels.ts +343 -0
- package/dist/app-C75Zc8dD.js +0 -6
- package/dist/client/_assets/chunks/heic-to-DUUaO23q.js +0 -1
- package/dist/client/_assets/chunks/module-DcsAZQZ_.js +0 -716
- package/dist/client/_assets/chunks/url-CU9pEbk5.js +0 -1
- package/dist/client/_assets/client-Bq0vre8Y.js +0 -296
- package/dist/client/_assets/client-D3VZyG4L.css +0 -2
- package/dist/client/_assets/client-auth-F2rb9WfF.js +0 -5571
- package/dist/env-BPYViDJJ.js +0 -281
- package/dist/github-api-BNF35Lkx.js +0 -176
- package/dist/github-app-DdiD-bC4.js +0 -275
- package/dist/github-sync-Bqg62IvV.js +0 -4
- package/dist/github-sync-HdK2EgvJ.js +0 -431
- package/dist/url-CbLAtlZe.js +0 -900
- package/src/client/__tests__/collection-created-notice.test.ts +0 -36
- package/src/client/__tests__/collection-form-bridge.test.ts +0 -216
- package/src/client/__tests__/post-form-bridge.test.ts +0 -82
- package/src/client/collection-created-notice.ts +0 -66
- package/src/client/collection-form-bridge.ts +0 -191
- package/src/client/components/__tests__/jant-post-form.test.ts +0 -193
- package/src/client/components/jant-post-form.ts +0 -422
- package/src/client/components/post-form-template.ts +0 -352
- package/src/client/components/post-form-types.ts +0 -96
- package/src/client/media-metadata.ts +0 -247
- package/src/client/post-form-bridge.ts +0 -193
- package/src/ui/pages/CollectionEditorPage.tsx +0 -175
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import{i as e,n as t,o as n,p as r,t as i,u as a}from"./chunks/lit-DW8VmJAT.js";import{c as o,i as s,o as c,s as l}from"./chunks/footnote-rail-CmeoVtnU.js";import{c as u,n as d}from"./chunks/jant-locale-picker-DL6mIOT5.js";import{n as f}from"./chunks/unsafe-html-B5ZEXaxg.js";import"./chunks/site-header-nav-DzXsFk05.js";var p=`🖕JS_DS🚀`,m=p.slice(0,5),h=p.slice(4),g=`datastar-fetch`,_=`datastar-signal-patch`,v=Object.hasOwn??Object.prototype.hasOwnProperty.call,y=e=>typeof e==`object`&&!!e&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null),b=e=>{for(let t in e)if(v(e,t))return!1;return!0},x=(e,t)=>{for(let n in e){let r=e[n];y(r)||Array.isArray(r)?x(r,t):e[n]=t(r)}},S=e=>{let t={};for(let[n,r]of e){let e=n.split(`.`),i=e.pop(),a=e.reduce((e,t)=>e[t]??={},t);a[i]=r}return t},C=[],ee=[],te=0,w=0,T=0,E,D,ne=0,O=()=>{te++},k=()=>{--te||(oe(),N())},A=e=>{E=D,D=e},j=()=>{D=E,E=void 0},re=e=>fe.bind(0,{previousValue:e,t:e,e:1}),ie=Symbol(`computed`),ae=e=>{let t=pe.bind(0,{e:17,getter:e});return t[ie]=1,t},M=e=>{let t={d:e,e:2};D&&he(t,D),A(t),O();try{t.d()}finally{k(),j()}return me.bind(0,t)},oe=()=>{for(;w<T;){let e=ee[w];ee[w++]=void 0,de(e,e.e&=-65)}w=0,T=0},se=e=>`getter`in e?ce(e):le(e,e.t),ce=e=>{A(e),ve(e);try{let t=e.t;return t!==(e.t=e.getter(t))}finally{j(),ye(e)}},le=(e,t)=>(e.e=1,e.previousValue!==(e.previousValue=t)),ue=e=>{let t=e.e;if(!(t&64)){e.e=t|64;let n=e.r;n?ue(n.o):ee[T++]=e}},de=(e,t)=>{if(t&16||t&32&&be(e.s,e)){A(e),ve(e),O();try{e.d()}finally{k(),j(),ye(e)}return}t&32&&(e.e=t&-33);let n=e.s;for(;n;){let e=n.c,t=e.e;t&64&&de(e,e.e=t&-65),n=n.i}},fe=(e,...t)=>{if(t.length){if(e.t!==(e.t=t[0])){e.e=17;let t=e.r;return t&&(_e(t),te||oe()),!0}return!1}let n=e.t;if(e.e&16&&le(e,n)){let t=e.r;t&&xe(t)}return D&&he(e,D),n},pe=e=>{let t=e.e;if(t&16||t&32&&be(e.s,e)){if(ce(e)){let t=e.r;t&&xe(t)}}else t&32&&(e.e=t&-33);return D&&he(e,D),e.t},me=e=>{let t=e.s;for(;t;)t=ge(t,e);let n=e.r;n&&ge(n),e.e=0},he=(e,t)=>{let n=t.a;if(n&&n.c===e)return;let r=n?n.i:t.s;if(r&&r.c===e){r.m=ne,t.a=r;return}let i=e.p;if(i&&i.m===ne&&i.o===t)return;let a=t.a=e.p={m:ne,c:e,o:t,l:n,i:r,u:i};r&&(r.l=a),n?n.i=a:t.s=a,i?i.n=a:e.r=a},ge=(e,t=e.o)=>{let n=e.c,r=e.l,i=e.i,a=e.n,o=e.u;if(i?i.l=r:t.a=r,r?r.i=i:t.s=i,a?a.u=o:n.p=o,o)o.n=a;else if(!(n.r=a)){if(`getter`in n){let e=n.s;if(e){n.e=17;do e=ge(e,n);while(e)}}else`previousValue`in n||me(n)}return i},_e=e=>{let t=e.n,n;e:for(;;){let r=e.o,i=r.e;if(i&60?i&12?i&4?!(i&48)&&Se(e,r)?(r.e=i|40,i&=1):i=0:r.e=i&-9|32:i=0:r.e=i|32,i&2&&ue(r),i&1){let i=r.r;if(i){let r=(e=i).n;r&&(n={t,f:n},t=r);continue}}if(e=t){t=e.n;continue}for(;n;)if(e=n.t,n=n.f,e){t=e.n;continue e}break}},ve=e=>{ne++,e.a=void 0,e.e=e.e&-57|4},ye=e=>{let t=e.a,n=t?t.i:e.s;for(;n;)n=ge(n,e);e.e&=-5},be=(e,t)=>{let n,r=0,i=!1;e:for(;;){let a=e.c,o=a.e;if(t.e&16)i=!0;else if((o&17)==17){if(se(a)){let e=a.r;e.n&&xe(e),i=!0}}else if((o&33)==33){(e.n||e.u)&&(n={t:e,f:n}),e=a.s,t=a,++r;continue}if(!i){let t=e.i;if(t){e=t;continue}}for(;r--;){let r=t.r,a=r.n;if(a?(e=n.t,n=n.f):e=r,i){if(se(t)){a&&xe(r),t=e.o;continue}i=!1}else t.e&=-33;if(t=e.o,e.i){e=e.i;continue e}}return i}},xe=e=>{do{let t=e.o,n=t.e;(n&48)==32&&(t.e=n|16,n&2&&ue(t))}while(e=e.n)},Se=(e,t)=>{let n=t.a;for(;n;){if(n===e)return!0;n=n.l}return!1},Ce=e=>{let t=L,n=e.split(`.`);for(let e of n){if(t==null||!v(t,e))return;t=t[e]}return t},we=(e,t=``)=>{let n=Array.isArray(e);if(n||y(e)){let r=n?[]:{};for(let n in e)r[n]=re(we(e[n],`${t+n}.`));let i=re(0);return new Proxy(r,{get(e,a){if(a!==`toJSON`||v(r,a))return n&&a in Array.prototype?(i(),r[a]):typeof a==`symbol`?r[a]:((!v(r,a)||r[a]()==null)&&(r[a]=re(``),N(t+a,``),i(i()+1)),r[a]())},set(e,a,o){let s=t+a;if(n&&a===`length`){let e=r[a]-o;if(r[a]=o,e>0){let e={};for(let t=o;t<r[a];t++)e[t]=null;N(t.slice(0,-1),e),i(i()+1)}}else if(v(r,a)){if(o==null)delete r[a];else if(v(o,ie))r[a]=o,N(s,``);else{let e=r[a](),t=`${s}.`;if(y(e)&&y(o)){for(let n in e)v(o,n)||(delete e[n],N(t+n,null));for(let t in o){let n=o[t];e[t]!==n&&(e[t]=n)}}else r[a](we(o,t))&&N(s,o)}}else o!=null&&(v(o,ie)?(r[a]=o,N(s,``)):(r[a]=re(we(o,`${s}.`)),N(s,o)),i(i()+1));return!0},deleteProperty(e,t){return delete r[t],i(i()+1),!0},ownKeys(){return i(),Reflect.ownKeys(r)},has(e,t){return i(),t in r}})}return e},N=(e,t)=>{if(e!==void 0&&t!==void 0&&C.push([e,t]),!te&&C.length){let e=S(C);C.length=0,document.dispatchEvent(new CustomEvent(_,{detail:e}))}},P=(e,{ifMissing:t}={})=>{O();for(let n in e)e[n]==null?t||delete L[n]:Te(e[n],n,L,``,t);k()},F=(e,t)=>P(S(e),t),Te=(e,t,n,r,i)=>{if(y(e)){v(n,t)&&(y(n[t])||Array.isArray(n[t]))||(n[t]={});for(let a in e)e[a]==null?i||delete n[t][a]:Te(e[a],a,n[t],`${r+t}.`,i)}else i&&v(n,t)||(n[t]=e)},Ee=e=>typeof e==`string`?RegExp(e.replace(/^\/|\/$/g,``)):e,I=({include:e=/.*/,exclude:t=/(?!)/}={},n=L)=>{let r=Ee(e),i=Ee(t),a=[],o=[[n,``]];for(;o.length;){let[e,t]=o.pop();for(let n in e){let s=t+n;y(e[n])?o.push([e[n],`${s}.`]):r.test(s)&&!i.test(s)&&a.push([s,Ce(s)])}}return S(a)},L=we({}),R=e=>e instanceof HTMLElement||e instanceof SVGElement||e instanceof MathMLElement,De=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).replace(/([a-z])([0-9]+)/gi,`$1-$2`).replace(/([0-9]+)([a-z])/gi,`$1-$2`).replace(/[\s_]+/g,`-`).toLowerCase(),Oe=e=>De(e).replace(/-/g,`_`),ke=e=>{try{return JSON.parse(e)}catch{return Function(`return (${e})`)()}},Ae={camel:e=>e.replace(/-[a-z]/g,e=>e[1].toUpperCase()),snake:e=>e.replace(/-/g,`_`),pascal:e=>e[0].toUpperCase()+Ae.camel(e.slice(1))},z=(e,t,n=`camel`)=>{for(let r of t.get(`case`)||[n])e=Ae[r]?.(e)||e;return e},B=e=>`data-${e}`,je=`https://data-star.dev/errors`,V=(e,t,n={})=>{Object.assign(n,e);let r=Error();return r.message=`${t}
|
|
2
|
+
More info: ${je}/${Oe(t)}?${new URLSearchParams({metadata:JSON.stringify(n)}).toString()}
|
|
3
|
+
Context: ${JSON.stringify(n,null,2)}`,r},H=new Map,Me=new Map,Ne=new Map,Pe=new Proxy({},{get:(e,t)=>H.get(t)?.apply,has:(e,t)=>H.has(t),ownKeys:()=>Reflect.ownKeys(H),set:()=>!1,deleteProperty:()=>!1}),U=new Map,Fe=[],Ie=new Set,Le=new WeakSet,W=e=>{Fe.push(e),Fe.length===1&&setTimeout(()=>{for(let e of Fe)Ie.add(e.name),Me.set(e.name,e);Fe.length=0,Ke(),Ie.clear()})},G=e=>{H.set(e.name,e)};document.addEventListener(g,e=>{let t=Ne.get(e.detail.type);t&&t.apply({error:V.bind(0,{plugin:{type:`watcher`,name:t.name},element:{id:e.target.id,tag:e.target.tagName}})},e.detail.argsRaw)});var Re=e=>{Ne.set(e.name,e)},ze=e=>{for(let t of e){let e=U.get(t);if(e&&U.delete(t))for(let t of e.values())for(let e of t.values())e()}},Be=B(`ignore`),Ve=`[${Be}]`,He=e=>e.hasAttribute(`${Be}__self`)||!!e.closest(Ve),Ue=(e,t)=>{for(let n of e)if(!He(n))for(let e in n.dataset)qe(n,e.replace(/[A-Z]/g,`-$&`).toLowerCase(),n.dataset[e],t)},We=new MutationObserver(e=>{for(let{target:t,type:n,attributeName:r,addedNodes:i,removedNodes:a}of e)if(n===`childList`){for(let e of a)R(e)&&(ze([e]),ze(e.querySelectorAll(`*`)));for(let e of i)R(e)&&(Ue([e]),Ue(e.querySelectorAll(`*`)))}else if(n===`attributes`&&r.startsWith(`data-`)&&R(t)&&!He(t)){let e=r.slice(5),n=t.getAttribute(r);if(n===null){let n=U.get(t);if(n){let t=n.get(e);if(t){for(let e of t.values())e();n.delete(e)}}}else qe(t,e,n)}}),Ge=e=>{let[t,...n]=e.split(`__`),[r,i]=t.split(/:(.+)/),a=new Map;for(let e of n){let[t,...n]=e.split(`.`);a.set(t,new Set(n))}return{pluginName:r,key:i,mods:a}},Ke=(e=document.documentElement,t=!0)=>{R(e)&&Ue([e],!0),Ue(e.querySelectorAll(`*`),!0),t&&(We.observe(e,{subtree:!0,childList:!0,attributes:!0}),Le.add(e))},qe=(e,t,n,r)=>{{let i=t,{pluginName:a,key:o,mods:s}=Ge(i),c=Me.get(a);if((!r||Ie.has(a))&&c){let t={el:e,rawKey:i,mods:s,error:V.bind(0,{plugin:{type:`attribute`,name:c.name},element:{id:e.id,tag:e.tagName},expression:{rawKey:i,key:o,value:n}}),key:o,value:n,loadedPluginNames:{actions:new Set(H.keys()),attributes:new Set(Me.keys())},rx:void 0},r=c.requirement&&(typeof c.requirement==`string`?c.requirement:c.requirement.key)||`allowed`,a=c.requirement&&(typeof c.requirement==`string`?c.requirement:c.requirement.value)||`allowed`,l=o!=null&&o!==``,u=n!=null&&n!==``;if(l){if(r===`denied`)throw t.error(`KeyNotAllowed`)}else if(r===`must`)throw t.error(`KeyRequired`);if(u){if(a===`denied`)throw t.error(`ValueNotAllowed`)}else if(a===`must`)throw t.error(`ValueRequired`);if(r===`exclusive`||a===`exclusive`){if(l&&u)throw t.error(`KeyAndValueProvided`);if(!l&&!u)throw t.error(`KeyOrValueRequired`)}let d=new Map;if(u){let r;t.rx=(...t)=>(r||=Je(n,{returnsValue:c.returnsValue,argNames:c.argNames,cleanups:d}),r(e,...t))}let f=c.apply(t);f&&d.set(`attribute`,f);let p=U.get(e);if(p){let e=p.get(i);if(e)for(let t of e.values())t()}else p=new Map,U.set(e,p);p.set(i,d)}}},Je=(e,{returnsValue:t=!1,argNames:n=[],cleanups:r=new Map}={})=>{let i=``;if(t){let t=e.trim().match(/(\/(\\\/|[^/])*\/|"(\\"|[^"])*"|'(\\'|[^'])*'|`(\\`|[^`])*`|\(\s*((function)\s*\(\s*\)|(\(\s*\))\s*=>)\s*(?:\{[\s\S]*?\}|[^;){]*)\s*\)\s*\(\s*\)|[^;])+/gm);if(t){let e=t.length-1,n=t[e].trim();n.startsWith(`return`)||(t[e]=`return (${n});`),i=t.join(`;
|
|
4
|
+
`)}}else i=e.trim();let a=new Map,o=RegExp(`(?:${m})(.*?)(?:${h})`,`gm`),s=0;for(let e of i.matchAll(o)){let t=e[1],n=`__escaped${s++}`;a.set(n,t),i=i.replace(m+t+h,n)}i=i.replace(/\$\['([a-zA-Z_$\d][\w$]*)'\]/g,`$$$1`).replace(/\$([a-zA-Z_\d]\w*(?:[.-]\w+)*)/g,(e,t)=>t.split(`.`).reduce((e,t)=>`${e}['${t}']`,`$`)),i=i.replaceAll(/@([A-Za-z_$][\w$]*)\(/g,`__action("$1",evt,`);for(let[e,t]of a)i=i.replace(e,t);try{let t=Function(`el`,`$`,`__action`,`evt`,...n,i);return(n,...a)=>{let o=(t,a,...o)=>{let s=V.bind(0,{plugin:{type:`action`,name:t},element:{id:n.id,tag:n.tagName},expression:{fnContent:i,value:e}}),c=Pe[t];if(c)return c({el:n,evt:a,error:s,cleanups:r},...o);throw s(`UndefinedAction`)};try{return t(n,L,o,void 0,...a)}catch(t){throw console.error(t),V({element:{id:n.id,tag:n.tagName},expression:{fnContent:i,value:e},error:t.message},`ExecuteExpression`)}}}catch(t){throw console.error(t),V({expression:{fnContent:i,value:e},error:t.message},`GenerateExpression`)}};G({name:`peek`,apply(e,t){A();try{return t()}finally{j()}}}),G({name:`setAll`,apply(e,t,n){A();let r=I(n);x(r,()=>t),P(r),j()}}),G({name:`toggleAll`,apply(e,t){A();let n=I(t);x(n,e=>!e),P(n),j()}});var Ye=(e,t,n=!0)=>G({name:e,apply:async({el:r,evt:i,error:a,cleanups:o},s,{selector:c,headers:l,contentType:u=`json`,filterSignals:{include:d=/.*/,exclude:f=/(^|\.)_/}={},openWhenHidden:p=n,payload:m,requestCancellation:h=`auto`,retry:g=`auto`,retryInterval:_=1e3,retryScaler:v=2,retryMaxWaitMs:y=3e4,retryMaxCount:b=10}={})=>{let x=h instanceof AbortController?h:new AbortController;h===`auto`&&(o.get(`@${e}`)?.(),o.set(`@${e}`,async()=>{x.abort(),await Promise.resolve()}));let S=null;try{if(!s?.length)throw a(`FetchNoUrlProvided`,{action:G});let e={Accept:`text/event-stream, text/html, application/json`,"Datastar-Request":!0};u===`json`&&(e[`Content-Type`]=`application/json`);let n=Object.assign({},e,l),o={method:t,headers:n,openWhenHidden:p,retry:g,retryInterval:_,retryScaler:v,retryMaxWaitMs:y,retryMaxCount:b,signal:x.signal,onopen:async e=>{e.status>=400&&K(Qe,r,{status:e.status.toString()})},onmessage:e=>{if(!e.event.startsWith(`datastar`))return;let t=e.event,n={};for(let t of e.data.split(`
|
|
5
|
+
`)){let e=t.indexOf(` `),r=t.slice(0,e),i=t.slice(e+1);(n[r]||=[]).push(i)}K(t,r,Object.fromEntries(Object.entries(n).map(([e,t])=>[e,t.join(`
|
|
6
|
+
`)])))},onerror:e=>{if(tt(e))throw e(`FetchExpectedTextEventStream`,{url:s});e&&(console.error(e.message),K($e,r,{message:e.message}))}},h=new URL(s,document.baseURI),C=new URLSearchParams(h.search);if(u===`json`){A(),m=m===void 0?I({include:d,exclude:f}):m,j();let e=JSON.stringify(m);t===`GET`?C.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:G,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),S=()=>{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)C.append(e,t);else o.body=u?s:d}else throw a(`FetchInvalidContentType`,{action:G,contentType:u});K(Xe,r,{}),h.search=C.toString();try{await st(h.toString(),r,o)}catch(e){if(!tt(e))throw a(`FetchFailed`,{method:t,url:s,error:e.message})}}finally{K(Ze,r,{}),S?.(),o.delete(`@${e}`)}}});Ye(`get`,`GET`,!1),Ye(`patch`,`PATCH`),Ye(`post`,`POST`),Ye(`put`,`PUT`),Ye(`delete`,`DELETE`);var Xe=`started`,Ze=`finished`,Qe=`error`,$e=`retrying`,et=`retries-failed`,K=(e,t,n)=>document.dispatchEvent(new CustomEvent(g,{detail:{type:e,el:t,argsRaw:n}})),tt=e=>`${e}`.includes(`text/event-stream`),nt=async(e,t)=>{let n=e.getReader(),r=await n.read();for(;!r.done;)t(r.value),r=await n.read()},rt=e=>{let t,n,r,i=!1;return a=>{t?t=at(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}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)}},it=(e,t,n)=>{let r=ot(),i=new TextDecoder;return(a,o)=>{if(!a.length)n?.(r),r=ot();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
|
+
${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}}}}},at=(e,t)=>{let n=new Uint8Array(e.length+t.length);return n.set(e),n.set(t,e.length),n},ot=()=>({data:``,event:``,id:``,retry:void 0}),st=(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,...g})=>new Promise((_,v)=>{let y={...r},b,x=()=>{b.abort(),document.hidden||E()};c||document.addEventListener(`visibilitychange`,x);let S,C=()=>{document.removeEventListener(`visibilitychange`,x),clearTimeout(S),b.abort()};n?.addEventListener(`abort`,()=>{C(),_()});let ee=l||window.fetch,te=i||(()=>{}),w=0,T=d,E=async()=>{b=new AbortController;let n=b.signal;try{let r=await ee(e,{...g,headers:y,signal:n});await te(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)}K(e,t,o),C(),_()},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(S),S=setTimeout(E,d);return}C(),_();return}w=0,d=T;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),C();return}if(await nt(r.body,rt(it(e=>{e?y[`last-event-id`]=e:delete y[`last-event-id`]},e=>{T=d=e},a))),o?.(),u===`always`&&!l){clearTimeout(S),S=setTimeout(E,d);return}C(),_()}catch(r){if(!n.aborted)try{let n=s?.(r)||d;clearTimeout(S),S=setTimeout(E,n),d=Math.min(d*f,p),++w>=m?(K(et,t,{}),C(),v(`Max retries reached.`)):console.error(`Datastar failed to reach ${e.toString()} retrying in ${n}ms.`)}catch(e){C(),v(e)}}};E()});W({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();let i=n();r(t,i),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=M(i);return()=>{a.disconnect(),o()}}});var ct=/^data:(?<mime>[^;]+);base64,(?<contents>.*)$/,lt=Symbol(`empty`),ut=B(`bind`);W({name:`bind`,requirement:`exclusive`,apply({el:e,key:t,mods:n,value:r,error:i}){let a=t==null?r:z(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:lt,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(ct);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(()=>{F([[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=Ce(a),l=typeof c,u=a;if(Array.isArray(c)&&!(e instanceof HTMLSelectElement&&e.multiple)){let n=t||r,i=document.querySelectorAll(`[${ut}\\:${CSS.escape(n)}],[${ut}="${CSS.escape(n)}"]`),a=[],s=0;for(let t of i){if(a.push([`${u}.${s}`,o(t,`none`)]),e===t)break;s++}F(a,{ifMissing:!0}),u=`${u}.${s}`}else F([[u,o(e,l)]],{ifMissing:!0});let d=()=>{let t=Ce(u);if(t!=null){let n=o(e,typeof t);n!==lt&&F([[u,n]])}};e.addEventListener(`input`,d),e.addEventListener(`change`,d);let f=M(()=>{s(Ce(u))});return()=>{f(),e.removeEventListener(`input`,d),e.removeEventListener(`change`,d)}}}),W({name:`class`,requirement:{value:`must`},returnsValue:!0,apply({key:e,el:t,mods:n,rx:r}){e&&=z(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=M(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)}}}}),W({name:`computed`,requirement:{value:`must`},returnsValue:!0,apply({key:e,mods:t,rx:n,error:r}){if(e)F([[z(e,t),ae(n)]]);else{let e=Object.assign({},n());x(e,e=>{if(typeof e==`function`)return ae(e);throw r(`ComputedExpectedFunction`)}),P(e)}}}),W({name:`effect`,requirement:{key:`denied`,value:`must`},apply:({rx:e})=>M(e)}),W({name:`indicator`,requirement:`exclusive`,apply({el:e,key:t,mods:n,value:r}){let i=t==null?r:z(t,n);F([[i,!1]]);let a=t=>{let{type:n,el:r}=t.detail;if(r===e)switch(n){case Xe:F([[i,!0]]);break;case Ze:F([[i,!1]])}};return document.addEventListener(g,a),()=>{F([[i,!1]]),document.removeEventListener(g,a)}}});var q=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},dt=(e,t,n=!1)=>e?e.has(t.toLowerCase()):n,ft=(e,t)=>(...n)=>{setTimeout(()=>{e(...n)},t)},pt=(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))}},mt=(e,t)=>{let n=t.get(`delay`);if(n){let t=q(n);e=ft(e,t)}let r=t.get(`debounce`);if(r){let t=q(r),n=dt(r,`leading`,!1),i=!dt(r,`notrailing`,!1);e=pt(e,t,n,i,!0)}let i=t.get(`throttle`);if(i){let t=q(i),n=!dt(i,`noleading`,!1),r=dt(i,`trailing`,!1);e=pt(e,t,n,r)}return e},ht=!!document.startViewTransition,gt=(e,t)=>{if(t.has(`viewtransition`)&&ht){let t=e;e=(...e)=>document.startViewTransition(()=>t(...e))}return e};W({name:`init`,requirement:{key:`denied`,value:`must`},apply({rx:e,mods:t}){let n=()=>{O(),e(),k()};n=gt(n,t);let r=0,i=t.get(`delay`);i&&(r=q(i),r>0&&(n=ft(n,r))),n()}}),W({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(I(i),null,r),o.observe(e,{childList:!0,characterData:!0,subtree:!0})},o=new MutationObserver(a),s=M(a);return()=>{o.disconnect(),s()}}}),W({name:`on`,requirement:`must`,argNames:[`evt`],apply({el:e,key:t,mods:n,rx:r}){let i=e;n.has(`window`)&&(i=window);let a=e=>{e&&(n.has(`prevent`)&&e.preventDefault(),n.has(`stop`)&&e.stopPropagation()),O(),r(e),k()};a=gt(a,n),a=mt(a,n);let o={capture:n.has(`capture`),passive:n.has(`passive`),once:n.has(`once`)};if(n.has(`outside`)){i=document;let t=a;a=n=>{e.contains(n?.target)||t(n)}}let s=z(t,n,`kebab`);if((s===g||s===_)&&(i=document),e instanceof HTMLFormElement&&s===`submit`){let e=a;a=t=>{t?.preventDefault(),e(t)}}return i.addEventListener(s,a,o),()=>{i.removeEventListener(s,a)}}});var _t=(e,t,n)=>Math.max(t,Math.min(n,e)),vt=new WeakSet;W({name:`on-intersect`,requirement:{key:`denied`,value:`must`},apply({el:e,mods:t,rx:n}){let r=()=>{O(),n(),k()};r=gt(r,t),r=mt(r,t);let i={threshold:0};t.has(`full`)?i.threshold=1:t.has(`half`)?i.threshold=.5:t.get(`threshold`)&&(i.threshold=_t(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&&vt.has(e)&&o.disconnect())},i);return o.observe(e),t.has(`once`)&&vt.add(e),()=>{t.has(`once`)||vt.delete(e),o&&=(o.disconnect(),null)}}}),W({name:`on-interval`,requirement:{key:`denied`,value:`must`},apply({mods:e,rx:t}){let n=()=>{O(),t(),k()};n=gt(n,e);let r=1e3,i=e.get(`duration`);i&&(r=q(i),dt(i,`leading`,!1)&&n());let a=setInterval(n,r);return()=>{clearInterval(a)}}}),W({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 a=B(`${this.name}-filter`),o=e.getAttribute(a),s={};o&&(s=ke(o));let c=!1,l=mt(e=>{if(c)return;let t=I(s,e.detail);if(!b(t)){c=!0,O();try{r(t)}finally{k(),c=!1}}},n);return document.addEventListener(_,l),()=>{document.removeEventListener(_,l)}}}),W({name:`ref`,requirement:`exclusive`,apply({el:e,key:t,mods:n,value:r}){F([[t==null?r:z(t,n),e]])}});var yt=`none`,bt=`display`;W({name:`show`,requirement:{key:`denied`,value:`must`},returnsValue:!0,apply({el:e,rx:t}){let n=()=>{r.disconnect(),t()?e.style.display===yt&&e.style.removeProperty(bt):e.style.setProperty(bt,yt),r.observe(e,{attributeFilter:[`style`]})},r=new MutationObserver(n),i=M(n);return()=>{r.disconnect(),i()}}}),W({name:`signals`,returnsValue:!0,apply({key:e,mods:t,rx:n}){let r=t.has(`ifmissing`);e?(e=z(e,t),F([[e,n?.()]],{ifMissing:r})):P(Object.assign({},n?.()),{ifMissing:r})}}),W({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=M(o);return()=>{s.disconnect(),c();for(let[e,t]of i)t?r.setProperty(e,t):r.removeProperty(e)}}}),W({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=M(n);return()=>{r.disconnect(),i()}}});var xt=(e,t)=>e.includes(t),St=[`remove`,`outer`,`inner`,`replace`,`prepend`,`append`,`before`,`after`],Ct=[`html`,`svg`,`mathml`];Re({name:`datastar-patch-elements`,apply(e,{selector:t=``,mode:n=`outer`,namespace:r=`html`,useViewTransition:i=``,elements:a=``}){if(!xt(St,n))throw e.error(`PatchElementsInvalidMode`,{mode:n});if(!t&&n!==`outer`&&n!==`replace`)throw e.error(`PatchElementsExpectedSelector`);if(!xt(Ct,r))throw e.error(`PatchElementsInvalidNamespace`,{namespace:r});let o={selector:t,mode:n,namespace:r,useViewTransition:i.trim()===`true`,elements:a};ht&&i?document.startViewTransition(()=>wt(e,o)):wt(e,o)}});var wt=({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}Ot(n,t,[r])}else{let r=document.querySelectorAll(t);if(!r.length){console.warn(e(`PatchElementsNoTargetsFound`),{selector:t});return}Ot(n,f,r)}},Tt=new WeakSet;for(let e of document.querySelectorAll(`script`))Tt.add(e);var Et=e=>{let t=e instanceof HTMLScriptElement?[e]:e.querySelectorAll(`script`);for(let e of t)if(!Tt.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),Tt.add(t)}},Dt=(e,t,n)=>{for(let r of e){let e=t.cloneNode(!0);Et(e),r[n](e)}},Ot=(e,t,n)=>{switch(e){case`remove`:for(let e of n)e.remove();break;case`outer`:case`inner`:for(let r of n)jt(r,t.cloneNode(!0),e),Et(r);break;case`replace`:Dt(n,t,`replaceWith`);break;case`prepend`:case`append`:case`before`:case`after`:Dt(n,t,e)}},J=new Map,Y=new Set,X=new Map,kt=new Set,Z=document.createElement(`div`);Z.hidden=!0;var Q=B(`ignore-morph`),At=`[${Q}]`,jt=(e,t,n=`outer`)=>{if(R(e)&&R(t)&&e.hasAttribute(Q)&&t.hasAttribute(Q)||e.parentElement?.closest(At))return;let r=document.createElement(`div`);r.append(t),document.body.insertAdjacentElement(`afterend`,Z);let i=e.querySelectorAll(`[id]`);for(let{id:e,tagName:t}of i)X.has(e)?kt.add(e):X.set(e,t);e instanceof Element&&e.id&&(X.has(e.id)?kt.add(e.id):X.set(e.id,e.tagName)),Y.clear();let a=r.querySelectorAll(`[id]`);for(let{id:e,tagName:t}of a)Y.has(e)?kt.add(e):X.get(e)===t&&Y.add(e);for(let e of kt)Y.delete(e);X.clear(),kt.clear(),J.clear();let o=n===`outer`?e.parentElement:e;zt(o,i),zt(r,a),Mt(o,r,n===`outer`?e:null,e.nextSibling),Z.remove()},Mt=(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=Nt(i,n,r);if(e){if(e!==n){let t=n;for(;t&&t!==e;){let e=t;t=t.nextSibling,Ft(e)}}Rt(e,i),n=e.nextSibling;continue}}if(i instanceof Element&&Y.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))}It(e,t,n),Rt(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),Rt(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,Ft(e)}},Nt=(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(Pt(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&&Pt(c,i)&&(a++,i=i.nextSibling,a>=2&&(r=void 0)),c=c.nextSibling}return r||null},Pt=(e,t)=>e.nodeType===t.nodeType&&e.tagName===t.tagName&&(!e.id||e.id===t.id),Ft=e=>{J.has(e)?It(Z,e,null):e.parentNode?.removeChild(e)},It=Ft.call.bind(Z.moveBefore??Z.insertBefore),Lt=B(`preserve-attr`),Rt=(e,t)=>{let n=t.nodeType;if(n===1){let n=e,r=t,i=n.hasAttribute(`data-scope-children`);if(n.hasAttribute(Q)&&r.hasAttribute(Q))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(Lt)??``).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)||Mt(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},zt=(e,t)=>{for(let n of t)if(Y.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}}};Re({name:`datastar-patch-signals`,apply({error:e},{signals:t,onlyIfMissing:n}){if(t){let e=n?.trim()===`true`;P(ke(t),{ifMissing:e})}else throw e(`PatchSignalsExpectedSignals`)}});var Bt=4;function Vt(e){return e.querySelector(`[data-post-media]`)}function Ht(e){let t=Vt(e);if(!t)return;let{scrollLeft:n,scrollWidth:r,clientWidth:i}=t;e.classList.toggle(`can-scroll-start`,n>Bt),e.classList.toggle(`can-scroll-end`,n+i<r-Bt)}function Ut(e){return Math.max(160,Math.round(e.clientWidth*.85))}function Wt(e,t){e.scrollBy({left:t*Ut(e),behavior:`smooth`})}function Gt(e,t){if(!(`ResizeObserver`in globalThis))return;let n=0,r=()=>{cancelAnimationFrame(n),n=requestAnimationFrame(()=>Ht(e))},i=new globalThis.ResizeObserver(r),a=()=>{i.disconnect(),i.observe(t);for(let e of t.children)i.observe(e)};a(),new globalThis.MutationObserver(()=>{a(),r()}).observe(t,{childList:!0})}function Kt(e){if(e.dataset.scrollHintReady===`1`)return;let t=Vt(e);t&&(e.dataset.scrollHintReady=`1`,Ht(e),t.addEventListener(`scroll`,()=>Ht(e),{passive:!0}),Gt(e,t),e.querySelector(`.media-gallery-nav-prev`)?.addEventListener(`click`,()=>Wt(t,-1)),e.querySelector(`.media-gallery-nav-next`)?.addEventListener(`click`,()=>Wt(t,1)),t.addEventListener(`keydown`,e=>{if(e.target===t)switch(e.key){case`ArrowRight`:e.preventDefault(),Wt(t,1);break;case`ArrowLeft`:e.preventDefault(),Wt(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`})}}))}function qt(){document.querySelectorAll(`.media-gallery-scroll-wrap`).forEach(Kt)}var Jt=new globalThis.MutationObserver(e=>{for(let t of e)for(let e of t.addedNodes)e instanceof HTMLElement&&(e.matches(`.media-gallery-scroll-wrap`)&&Kt(e),e.querySelectorAll(`.media-gallery-scroll-wrap`).forEach(Kt))});document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,()=>{qt(),Jt.observe(document.body,{childList:!0,subtree:!0})}):(qt(),Jt.observe(document.body,{childList:!0,subtree:!0}));var Yt=new Set([`email`,`number`,`password`,`search`,`tel`,`text`,`url`]);function Xt(e){return e instanceof HTMLInputElement&&!e.disabled&&!e.readOnly&&Yt.has(e.type.toLowerCase())}function Zt(e){return e.querySelector(`button[type="submit"]:not([disabled]), input[type="submit"]:not([disabled]), button:not([type]):not([disabled])`)}function Qt(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||!Xt(e.target))return;let t=e.target.form;if(!(t instanceof HTMLFormElement)||!t.hasAttribute(`data-on:submit__prevent`))return;let n=Zt(t);if(n||!Qt(t)){if(e.preventDefault(),n){t.requestSubmit(n);return}t.requestSubmit()}});var $t=`[${d}]`,en=`[${u}]`;function tn(e){return e.parentElement?.querySelector(en)??e.closest(`[data-copy-field-root]`)?.querySelector(en)??null}async function nn(e){let t=tn(e);if(!t)return;let n=e.getAttribute(`data-copy-field-failed`)??``;try{if(!globalThis.navigator.clipboard?.writeText)throw Error(`Clipboard unavailable`);await globalThis.navigator.clipboard.writeText(t.value),a(e.getAttribute(`data-copy-field`)||``)}catch{a(n,`error`)}}function rn(e=document){for(let t of Array.from(e.querySelectorAll(`${$t}[hidden]`)))t.hidden=!1}document.addEventListener(`click`,e=>{let t=e.target;if(!(t instanceof globalThis.Element))return;let n=t.closest($t);if(n){e.preventDefault(),nn(n);return}let r=t.closest(en);r&&r.select()}),document.addEventListener(`focus`,e=>{let t=e.target;if(!(t instanceof globalThis.Element))return;let n=t.closest(en);n&&n.select()},!0),rn(),document.addEventListener(`DOMContentLoaded`,()=>rn(),{once:!0});var an=640,on=8,sn=72,cn=704,ln=.9,un=.85;function $(e){if(!(!Number.isFinite(e)||!e||e<=0))return e}function dn(){return{width:globalThis.innerWidth||document.documentElement.clientWidth||0,height:globalThis.innerHeight||document.documentElement.clientHeight||0}}function fn(e,t){return{width:Math.max(0,e-(e<=an?on:sn)*2),height:Math.max(0,t-32)}}function pn(e,t,n){let r=$(e?.width),i=$(e?.height);if(!r||!i)return null;let a=fn(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 mn(e,t,n){if(!e||e.mimeType?.startsWith(`video/`)||!$(e.width)||!$(e.height)||t<=0||n<=0)return!1;let r=$(e.width),i=$(e.height);if(!r||!i)return!1;let a=t<=an,o=fn(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<ln&&u<(a?s:Math.min(s,cn))*un}var hn=class extends i{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},_videoPaused:{state:!0},_imageZoomed:{state:!0}};createRenderRoot(){return this.innerHTML=``,this}constructor(){super();let e=dn();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._videoPaused=!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(c,{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(c,{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:$(e.naturalWidth||Number(e.getAttribute(`width`))),height:$(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];mn(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(),this.#x(t);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(c,{detail:{open:!1}})),this._open=!1};#l=()=>{this.#u()};#u(){let e=dn();(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,this._videoPaused=l(e?.id)}#h(){let e=this._images[this._currentIndex];if(!s(e)){this.#m(e);return}let t=this.querySelector(`.media-lightbox-video`);if(t){if(t.currentTime=0,t.muted=this._videoMuted,this._videoPaused=l(e.id),this._videoPaused){t.pause();return}t.play().catch(()=>{this._videoPaused=!0})}}#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=()=>{this._videoPaused=!1};#y=()=>{this._videoPaused=!0};#b(e){let t=this._images[this._currentIndex],n=t?.id?.trim();n&&s(t)&&o(n,e)}#x(e){if(e.paused){this._videoPaused=!1,this.#b(!1),e.play().catch(()=>{this._videoPaused=!0,this.#b(!0)});return}e.pause(),this._videoPaused=!0,this.#b(!0)}#S=()=>{let e=this.querySelector(`.media-lightbox-video`);e&&this.#x(e)};#C=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)};#w=()=>{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 t;let r=this._images[this._currentIndex],i=this._images.length>1,a=r?.mimeType?.startsWith(`video/`),o=s(r),c=mn(r,this._viewportWidth,this._viewportHeight),l=c&&this._imageZoomed,u=o?pn(r,this._viewportWidth,this._viewportHeight):null,d=o&&!!u&&u.height>u.width,f=u?`--media-lightbox-short-width:${u.width}px;--media-lightbox-short-height:${u.height}px;`:t,p=this._videoDuration>0?this._videoDuration:r?.durationSeconds??1,m=Math.min(this._videoCurrentTime,p),h=p>0?m/p*100:0;return e`
|
|
8
|
+
<dialog
|
|
9
|
+
class=${`media-lightbox${o?` media-lightbox-short`:``}`}
|
|
10
|
+
@keydown=${this.#i}
|
|
11
|
+
@click=${this.#s}
|
|
12
|
+
@close=${this.#c}
|
|
13
|
+
>
|
|
14
|
+
<div class="media-lightbox-content" tabindex="-1">
|
|
15
|
+
<button
|
|
16
|
+
type="button"
|
|
17
|
+
class="media-lightbox-close"
|
|
18
|
+
@click=${()=>this.close()}
|
|
19
|
+
aria-label="Close"
|
|
20
|
+
>
|
|
21
|
+
<svg
|
|
22
|
+
width="20"
|
|
23
|
+
height="20"
|
|
24
|
+
viewBox="0 0 24 24"
|
|
25
|
+
fill="none"
|
|
26
|
+
stroke="currentColor"
|
|
27
|
+
stroke-width="2"
|
|
28
|
+
stroke-linecap="round"
|
|
29
|
+
stroke-linejoin="round"
|
|
30
|
+
>
|
|
31
|
+
<path d="M18 6 6 18" />
|
|
32
|
+
<path d="m6 6 12 12" />
|
|
33
|
+
</svg>
|
|
34
|
+
</button>
|
|
35
|
+
|
|
36
|
+
${i?e`<div class="media-lightbox-counter">
|
|
37
|
+
${this._currentIndex+1} / ${this._images.length}
|
|
38
|
+
</div>`:t}
|
|
39
|
+
<div
|
|
40
|
+
class=${`media-lightbox-stage${l?` media-lightbox-stage-scroll`:``}`}
|
|
41
|
+
>
|
|
42
|
+
${a?o?e`<div
|
|
43
|
+
class=${`media-lightbox-short-frame${u?` media-lightbox-short-frame-contained`:``}${d?` media-lightbox-short-frame-portrait`:` media-lightbox-short-frame-landscape`}`}
|
|
44
|
+
style=${f}
|
|
45
|
+
>
|
|
46
|
+
<div class="media-lightbox-short-viewport">
|
|
47
|
+
<video
|
|
48
|
+
class="media-lightbox-video media-lightbox-video-short"
|
|
49
|
+
src=${r?.url??``}
|
|
50
|
+
poster=${r?.posterUrl??``}
|
|
51
|
+
?autoplay=${!this._videoPaused}
|
|
52
|
+
playsinline
|
|
53
|
+
loop
|
|
54
|
+
?muted=${this._videoMuted}
|
|
55
|
+
@click=${this.#S}
|
|
56
|
+
@focus=${this.#p}
|
|
57
|
+
@loadedmetadata=${this.#g}
|
|
58
|
+
@timeupdate=${this.#_}
|
|
59
|
+
@play=${this.#v}
|
|
60
|
+
@pause=${this.#y}
|
|
61
|
+
></video>
|
|
62
|
+
</div>
|
|
63
|
+
<div
|
|
64
|
+
class=${`media-lightbox-short-controls${d?` media-lightbox-short-controls-portrait`:``}`}
|
|
65
|
+
>
|
|
66
|
+
<button
|
|
67
|
+
type="button"
|
|
68
|
+
class="media-lightbox-short-playback"
|
|
69
|
+
@click=${this.#S}
|
|
70
|
+
aria-label=${this._videoPaused?`Play video`:`Pause video`}
|
|
71
|
+
>
|
|
72
|
+
<svg
|
|
73
|
+
width="16"
|
|
74
|
+
height="16"
|
|
75
|
+
viewBox="0 0 24 24"
|
|
76
|
+
fill="currentColor"
|
|
77
|
+
aria-hidden="true"
|
|
78
|
+
>
|
|
79
|
+
${this._videoPaused?n`<path d="M8 5v14l11-7z" />`:n`<path d="M6 5h4v14H6zM14 5h4v14h-4z" />`}
|
|
80
|
+
</svg>
|
|
81
|
+
</button>
|
|
82
|
+
<input
|
|
83
|
+
class="media-lightbox-short-progress"
|
|
84
|
+
type="range"
|
|
85
|
+
min="0"
|
|
86
|
+
max=${p}
|
|
87
|
+
step="0.01"
|
|
88
|
+
.value=${String(m)}
|
|
89
|
+
style=${`--media-progress:${h}%`}
|
|
90
|
+
aria-label="Video progress"
|
|
91
|
+
@input=${this.#C}
|
|
92
|
+
/>
|
|
93
|
+
<button
|
|
94
|
+
type="button"
|
|
95
|
+
class="media-lightbox-short-mute"
|
|
96
|
+
@click=${this.#w}
|
|
97
|
+
aria-label=${this._videoMuted?`Unmute video`:`Mute video`}
|
|
98
|
+
>
|
|
99
|
+
<svg
|
|
100
|
+
width="16"
|
|
101
|
+
height="16"
|
|
102
|
+
viewBox="0 0 48 48"
|
|
103
|
+
fill="currentColor"
|
|
104
|
+
color="#fff"
|
|
105
|
+
aria-hidden="true"
|
|
106
|
+
>
|
|
107
|
+
${this._videoMuted?n`
|
|
108
|
+
<path d="M1.5 13.3c-.8 0-1.5.7-1.5 1.5v18.4c0 .8.7 1.5 1.5 1.5h8.7l12.9 12.9c.9.9 2.5.3 2.5-1v-9.8c0-.4-.2-.8-.4-1.1l-22-22c-.3-.3-.7-.4-1.1-.4h-.6zm46.8 31.4-5.5-5.5C44.9 36.6 48 31.4 48 24c0-11.4-7.2-17.4-7.2-17.4-.6-.6-1.6-.6-2.2 0L37.2 8c-.6.6-.6 1.6 0 2.2 0 0 5.7 5 5.7 13.8 0 5.4-2.1 9.3-3.8 11.6L35.5 32c1.1-1.7 2.3-4.4 2.3-8 0-6.8-4.1-10.3-4.1-10.3-.6-.6-1.6-.6-2.2 0l-1.4 1.4c-.6.6-.6 1.6 0 2.2 0 0 2.6 2 2.6 6.7 0 1.8-.4 3.2-.9 4.3L25.5 22V1.4c0-1.3-1.6-1.9-2.5-1L13.5 10 3.3-.3c-.6-.6-1.5-.6-2.1 0L-.2 1.1c-.6.6-.6 1.5 0 2.1L4 7.6l26.8 26.8 13.9 13.9c.6.6 1.5.6 2.1 0l1.4-1.4c.7-.6.7-1.6.1-2.2z" />
|
|
109
|
+
`:n`
|
|
110
|
+
<path d="M1.5 13.3c-.8 0-1.5.7-1.5 1.5v18.4c0 .8.7 1.5 1.5 1.5h8.7l12.9 12.9c.9.9 2.5.3 2.5-1V1.4c0-1.3-1.6-1.9-2.5-1L10.2 13.3H1.5z" />
|
|
111
|
+
<path d="M30.1 15.9c-.6-.6-.6-1.6 0-2.2l1.4-1.4c.6-.6 1.6-.6 2.2 0 0 0 4.1 3.5 4.1 11.7s-4.1 11.7-4.1 11.7c-.6.6-1.6.6-2.2 0l-1.4-1.4c-.6-.6-.6-1.6 0-2.2 0 0 2.6-2 2.6-8.1s-2.6-8.1-2.6-8.1z" />
|
|
112
|
+
<path d="M37.2 8c-.6-.6-.6-1.6 0-2.2l1.4-1.4c.6-.6 1.6-.6 2.2 0 0 0 5.7 5.1 5.7 19.6s-5.7 19.6-5.7 19.6c-.6.6-1.6.6-2.2 0L37.2 42c-.6-.6-.6-1.6 0-2.2 0 0 4.3-4.4 4.3-15.8S37.2 8 37.2 8z" />
|
|
113
|
+
`}
|
|
114
|
+
</svg>
|
|
115
|
+
</button>
|
|
116
|
+
</div>
|
|
117
|
+
</div>`:e`<video
|
|
118
|
+
class="media-lightbox-video"
|
|
119
|
+
src=${r?.url??``}
|
|
120
|
+
poster=${r?.posterUrl??``}
|
|
121
|
+
controls
|
|
122
|
+
autoplay
|
|
123
|
+
playsinline
|
|
124
|
+
@focus=${this.#p}
|
|
125
|
+
></video>`:e`<img
|
|
126
|
+
class=${`media-lightbox-img${c?` media-lightbox-img-zoomable`:``}${l?` media-lightbox-img-scroll`:``}`}
|
|
127
|
+
src=${r?.url??``}
|
|
128
|
+
alt=${r?.alt??``}
|
|
129
|
+
@click=${this.#r}
|
|
130
|
+
/>`}
|
|
131
|
+
</div>
|
|
132
|
+
${i?e`
|
|
133
|
+
<button
|
|
134
|
+
type="button"
|
|
135
|
+
class="media-lightbox-nav media-lightbox-nav-prev"
|
|
136
|
+
@click=${()=>this.#t()}
|
|
137
|
+
aria-label="Previous"
|
|
138
|
+
>
|
|
139
|
+
<svg
|
|
140
|
+
width="24"
|
|
141
|
+
height="24"
|
|
142
|
+
viewBox="0 0 24 24"
|
|
143
|
+
fill="none"
|
|
144
|
+
stroke="currentColor"
|
|
145
|
+
stroke-width="2"
|
|
146
|
+
stroke-linecap="round"
|
|
147
|
+
stroke-linejoin="round"
|
|
148
|
+
>
|
|
149
|
+
<path d="m15 18-6-6 6-6" />
|
|
150
|
+
</svg>
|
|
151
|
+
</button>
|
|
152
|
+
<button
|
|
153
|
+
type="button"
|
|
154
|
+
class="media-lightbox-nav media-lightbox-nav-next"
|
|
155
|
+
@click=${()=>this.#n()}
|
|
156
|
+
aria-label="Next"
|
|
157
|
+
>
|
|
158
|
+
<svg
|
|
159
|
+
width="24"
|
|
160
|
+
height="24"
|
|
161
|
+
viewBox="0 0 24 24"
|
|
162
|
+
fill="none"
|
|
163
|
+
stroke="currentColor"
|
|
164
|
+
stroke-width="2"
|
|
165
|
+
stroke-linecap="round"
|
|
166
|
+
stroke-linejoin="round"
|
|
167
|
+
>
|
|
168
|
+
<path d="m9 18 6-6-6-6" />
|
|
169
|
+
</svg>
|
|
170
|
+
</button>
|
|
171
|
+
`:t}
|
|
172
|
+
</div>
|
|
173
|
+
</dialog>
|
|
174
|
+
`}};customElements.define(`jant-media-lightbox`,hn);var gn=class extends i{static properties={_open:{state:!0},_html:{state:!0},_loading:{state:!0},_copied:{state:!0},_linkCopied:{state:!0}};#e=``;#t=``;#n=null;#r=null;#i=null;createRenderRoot(){return this.innerHTML=``,this}constructor(){super(),this._open=!1,this._html=``,this._loading=!1,this._copied=!1,this._linkCopied=!1}connectedCallback(){super.connectedCallback(),document.addEventListener(`click`,this.#s),this.#a()}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener(`click`,this.#s)}async#a(){let e=document.querySelector(`.text-preview-dialog--ssr`),t=document.getElementById(`text-preview-autoopen`);if(e||t)try{let n=JSON.parse(t?.textContent||`{}`);t?.remove();let r=e?.querySelector(`.text-preview-body`),i=r?.innerHTML||``,a=r?.innerText||``;this.#t=n.shareHref?`${globalThis.location.origin}${n.shareHref}`:``,this.#r=n.postHref||null,this.#i=n.postTitle||null,this._html=i,this.#e=a,this._open=!0,document.body.style.overflow=`hidden`,await this.updateComplete,this.requestUpdate(),this.querySelector(`.text-preview-dialog`)?.showModal(),this.querySelector(`.text-preview-content`)?.focus(),e?.remove(),n.mediaId&&this.#o(n.mediaId)}catch{e?.remove()}}async#o(e){try{let t=await fetch(`/api/media/${e}/content`);if(!t.ok||!(t.headers.get(`Content-Type`)||``).includes(`application/json`))return;let n=await t.json();n.markdown&&(this.#e=n.markdown,this.requestUpdate())}catch{}}#s=e=>{let t=e.target.closest(`[data-text-preview-id]`);if(!t)return;e.preventDefault();let n=t.dataset.textPreviewId;n&&this.#c(n,t.dataset.textPreviewHref??``,t)};async#c(e,t,n){this.#n=n,this.#t=t?`${globalThis.location.origin}${t}`:``,this._loading=!0,this._open=!0,document.body.style.overflow=`hidden`,await this.updateComplete,this.querySelector(`.text-preview-dialog`)?.showModal(),this.querySelector(`.text-preview-content`)?.focus();try{let t=await fetch(`/api/media/${e}/content`);if(!t.ok)throw Error(`Fetch failed`);if((t.headers.get(`Content-Type`)||``).includes(`application/json`)){let e=await t.json();this._html=e.html??``,this.#e=e.markdown??``}else{let e=await t.text();this._html=e;let n=document.createElement(`div`);n.innerHTML=e,this.#e=n.innerText.trim()}}catch{this._html=`<p>Failed to load content.</p>`,this.#e=``}finally{this._loading=!1}}#l(){if(this.querySelector(`.text-preview-dialog`)?.close(),document.body.style.overflow=``,this._open=!1,this._html=``,this.#e=``,this.#t=``,this._copied=!1,this._linkCopied=!1,this.#r){let e=this.#r;this.#r=null,globalThis.history.replaceState(null,``,e),this.#i&&=(document.title=this.#i,null)}let e=this.#n;this.#n=null,queueMicrotask(()=>{e?.isConnected&&e.focus()})}async#u(){if(this.#e)try{await globalThis.navigator.clipboard.writeText(this.#e),this._copied=!0,a(`Copied.`),setTimeout(()=>{this._copied=!1},2e3)}catch{a(`Could not copy.`,`error`)}}async#d(){if(this.#t)try{await globalThis.navigator.clipboard.writeText(this.#t),this._linkCopied=!0,a(`Link copied.`),setTimeout(()=>{this._linkCopied=!1},2e3)}catch{a(`Could not copy.`,`error`)}}#f=e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),this.#l())};render(){return this._open?e`
|
|
175
|
+
<dialog
|
|
176
|
+
class="text-preview-dialog"
|
|
177
|
+
@cancel=${e=>{e.preventDefault(),this.#l()}}
|
|
178
|
+
@keydown=${this.#f}
|
|
179
|
+
@click=${e=>{e.target.tagName===`DIALOG`&&this.#l()}}
|
|
180
|
+
>
|
|
181
|
+
<div class="text-preview-content" tabindex="-1">
|
|
182
|
+
<div class="text-preview-toolbar">
|
|
183
|
+
<button
|
|
184
|
+
type="button"
|
|
185
|
+
class="text-preview-btn"
|
|
186
|
+
@click=${()=>this.#l()}
|
|
187
|
+
title="Close"
|
|
188
|
+
aria-label="Close"
|
|
189
|
+
>
|
|
190
|
+
<svg
|
|
191
|
+
width="16"
|
|
192
|
+
height="16"
|
|
193
|
+
viewBox="0 0 24 24"
|
|
194
|
+
fill="none"
|
|
195
|
+
stroke="currentColor"
|
|
196
|
+
stroke-width="2"
|
|
197
|
+
stroke-linecap="round"
|
|
198
|
+
stroke-linejoin="round"
|
|
199
|
+
>
|
|
200
|
+
<path d="M18 6 6 18M6 6l12 12" />
|
|
201
|
+
</svg>
|
|
202
|
+
</button>
|
|
203
|
+
<div class="text-preview-toolbar-actions">
|
|
204
|
+
${this.#t?e`<button
|
|
205
|
+
type="button"
|
|
206
|
+
class="text-preview-btn"
|
|
207
|
+
@click=${()=>this.#d()}
|
|
208
|
+
?disabled=${this._loading}
|
|
209
|
+
title="Copy link"
|
|
210
|
+
aria-label="Copy shareable link"
|
|
211
|
+
>
|
|
212
|
+
${this._linkCopied?e`<svg
|
|
213
|
+
width="16"
|
|
214
|
+
height="16"
|
|
215
|
+
viewBox="0 0 24 24"
|
|
216
|
+
fill="none"
|
|
217
|
+
stroke="currentColor"
|
|
218
|
+
stroke-width="2"
|
|
219
|
+
stroke-linecap="round"
|
|
220
|
+
stroke-linejoin="round"
|
|
221
|
+
>
|
|
222
|
+
<path d="M20 6 9 17l-5-5" />
|
|
223
|
+
</svg>`:e`<svg
|
|
224
|
+
width="16"
|
|
225
|
+
height="16"
|
|
226
|
+
viewBox="0 0 24 24"
|
|
227
|
+
fill="none"
|
|
228
|
+
stroke="currentColor"
|
|
229
|
+
stroke-width="2"
|
|
230
|
+
stroke-linecap="round"
|
|
231
|
+
stroke-linejoin="round"
|
|
232
|
+
>
|
|
233
|
+
<path
|
|
234
|
+
d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"
|
|
235
|
+
/>
|
|
236
|
+
<path
|
|
237
|
+
d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"
|
|
238
|
+
/>
|
|
239
|
+
</svg>`}
|
|
240
|
+
</button>`:t}
|
|
241
|
+
<button
|
|
242
|
+
type="button"
|
|
243
|
+
class="text-preview-btn"
|
|
244
|
+
@click=${()=>this.#u()}
|
|
245
|
+
?disabled=${this._loading||!this.#e}
|
|
246
|
+
title="Copy text"
|
|
247
|
+
aria-label="Copy text content"
|
|
248
|
+
>
|
|
249
|
+
${this._copied?e`<svg
|
|
250
|
+
width="16"
|
|
251
|
+
height="16"
|
|
252
|
+
viewBox="0 0 24 24"
|
|
253
|
+
fill="none"
|
|
254
|
+
stroke="currentColor"
|
|
255
|
+
stroke-width="2"
|
|
256
|
+
stroke-linecap="round"
|
|
257
|
+
stroke-linejoin="round"
|
|
258
|
+
>
|
|
259
|
+
<path d="M20 6 9 17l-5-5" />
|
|
260
|
+
</svg>`:e`<svg
|
|
261
|
+
width="16"
|
|
262
|
+
height="16"
|
|
263
|
+
viewBox="0 0 24 24"
|
|
264
|
+
fill="none"
|
|
265
|
+
stroke="currentColor"
|
|
266
|
+
stroke-width="2"
|
|
267
|
+
stroke-linecap="round"
|
|
268
|
+
stroke-linejoin="round"
|
|
269
|
+
>
|
|
270
|
+
<rect width="14" height="14" x="8" y="8" rx="2" />
|
|
271
|
+
<path
|
|
272
|
+
d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"
|
|
273
|
+
/>
|
|
274
|
+
</svg>`}
|
|
275
|
+
</button>
|
|
276
|
+
</div>
|
|
277
|
+
</div>
|
|
278
|
+
${this._loading?e`<div class="text-preview-loading">
|
|
279
|
+
<svg
|
|
280
|
+
class="animate-spin size-5"
|
|
281
|
+
viewBox="0 0 24 24"
|
|
282
|
+
fill="none"
|
|
283
|
+
stroke="currentColor"
|
|
284
|
+
stroke-width="2"
|
|
285
|
+
stroke-linecap="round"
|
|
286
|
+
stroke-linejoin="round"
|
|
287
|
+
>
|
|
288
|
+
<path d="M21 12a9 9 0 1 1-6.219-8.56" />
|
|
289
|
+
</svg>
|
|
290
|
+
</div>`:e`<div class="text-preview-body prose">
|
|
291
|
+
${f(this._html)}
|
|
292
|
+
</div>`}
|
|
293
|
+
</div>
|
|
294
|
+
</dialog>
|
|
295
|
+
`:t}};customElements.define(`jant-text-preview`,gn);function _n(e){return e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey}function vn(e,t){t&&(e.textContent=t)}function yn(e){let t=e.target;if(!(t instanceof globalThis.Element))return;let n=t.closest(`a[data-note-expand]`);if(!n||_n(e))return;let r=n.closest(`article[data-post]`),i=r?.querySelector(`[data-post-body]`);if(r&&i&&i.querySelector(`[data-note-break]`)){if(e.preventDefault(),i.hasAttribute(`data-note-clamp`)){i.removeAttribute(`data-note-clamp`),n.setAttribute(`aria-expanded`,`true`),vn(n,n.dataset.labelLess);return}i.setAttribute(`data-note-clamp`,``),n.setAttribute(`aria-expanded`,`false`),vn(n,n.dataset.labelMore),r.getBoundingClientRect().top<0&&typeof r.scrollIntoView==`function`&&r.scrollIntoView({block:`start`})}}document.addEventListener(`click`,yn),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 bn(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`})}bn(),r(),document.documentElement.dataset.jantVersion=`0.7.0-db482685dd630599`;
|