grain.social is a photo sharing platform built on atproto.

Merge branch 'exif'

+1478 -618
+10
__generated__/index.ts
··· 183 183 graph: SocialGrainGraphNS 184 184 labeler: SocialGrainLabelerNS 185 185 actor: SocialGrainActorNS 186 + photo: SocialGrainPhotoNS 186 187 187 188 constructor(server: Server) { 188 189 this._server = server ··· 190 191 this.graph = new SocialGrainGraphNS(server) 191 192 this.labeler = new SocialGrainLabelerNS(server) 192 193 this.actor = new SocialGrainActorNS(server) 194 + this.photo = new SocialGrainPhotoNS(server) 193 195 } 194 196 } 195 197 ··· 218 220 } 219 221 220 222 export class SocialGrainActorNS { 223 + _server: Server 224 + 225 + constructor(server: Server) { 226 + this._server = server 227 + } 228 + } 229 + 230 + export class SocialGrainPhotoNS { 221 231 _server: Server 222 232 223 233 constructor(server: Server) {
+114
__generated__/lexicons.ts
··· 2944 2944 type: 'ref', 2945 2945 ref: 'lex:social.grain.defs#aspectRatio', 2946 2946 }, 2947 + exif: { 2948 + type: 'ref', 2949 + ref: 'lex:social.grain.photo.defs#exifView', 2950 + description: 'EXIF metadata for the photo, if available.', 2951 + }, 2952 + }, 2953 + }, 2954 + exifView: { 2955 + type: 'object', 2956 + required: ['photo', 'createdAt'], 2957 + properties: { 2958 + uri: { 2959 + type: 'string', 2960 + format: 'at-uri', 2961 + }, 2962 + cid: { 2963 + type: 'string', 2964 + format: 'cid', 2965 + }, 2966 + photo: { 2967 + type: 'string', 2968 + format: 'at-uri', 2969 + }, 2970 + createdAt: { 2971 + type: 'string', 2972 + format: 'datetime', 2973 + }, 2974 + dateTimeOriginal: { 2975 + type: 'string', 2976 + }, 2977 + exposureTime: { 2978 + type: 'string', 2979 + }, 2980 + fNumber: { 2981 + type: 'string', 2982 + }, 2983 + flash: { 2984 + type: 'string', 2985 + }, 2986 + focalLengthIn35mmFormat: { 2987 + type: 'string', 2988 + }, 2989 + iSO: { 2990 + type: 'integer', 2991 + }, 2992 + lensMake: { 2993 + type: 'string', 2994 + }, 2995 + lensModel: { 2996 + type: 'string', 2997 + }, 2998 + make: { 2999 + type: 'string', 3000 + }, 3001 + model: { 3002 + type: 'string', 3003 + }, 3004 + }, 3005 + }, 3006 + }, 3007 + }, 3008 + SocialGrainPhotoExif: { 3009 + lexicon: 1, 3010 + id: 'social.grain.photo.exif', 3011 + defs: { 3012 + main: { 3013 + type: 'record', 3014 + description: 'Basic EXIF metadata for a photo', 3015 + key: 'tid', 3016 + record: { 3017 + type: 'object', 3018 + required: ['photo', 'createdAt'], 3019 + properties: { 3020 + photo: { 3021 + type: 'string', 3022 + format: 'at-uri', 3023 + }, 3024 + createdAt: { 3025 + type: 'string', 3026 + format: 'datetime', 3027 + }, 3028 + dateTimeOriginal: { 3029 + type: 'string', 3030 + format: 'datetime', 3031 + }, 3032 + exposureTime: { 3033 + type: 'integer', 3034 + }, 3035 + fNumber: { 3036 + type: 'integer', 3037 + }, 3038 + flash: { 3039 + type: 'string', 3040 + }, 3041 + focalLengthIn35mmFormat: { 3042 + type: 'integer', 3043 + }, 3044 + iSO: { 3045 + type: 'integer', 3046 + }, 3047 + lensMake: { 3048 + type: 'string', 3049 + }, 3050 + lensModel: { 3051 + type: 'string', 3052 + }, 3053 + make: { 3054 + type: 'string', 3055 + }, 3056 + model: { 3057 + type: 'string', 3058 + }, 3059 + }, 2947 3060 }, 2948 3061 }, 2949 3062 }, ··· 3296 3409 SocialGrainActorDefs: 'social.grain.actor.defs', 3297 3410 SocialGrainActorProfile: 'social.grain.actor.profile', 3298 3411 SocialGrainPhotoDefs: 'social.grain.photo.defs', 3412 + SocialGrainPhotoExif: 'social.grain.photo.exif', 3299 3413 SocialGrainPhoto: 'social.grain.photo', 3300 3414 ComAtprotoLabelDefs: 'com.atproto.label.defs', 3301 3415 ComAtprotoRepoStrongRef: 'com.atproto.repo.strongRef',
+3 -2
__generated__/types/sh/tangled/actor/profile.ts
··· 19 19 /** Free-form profile description text. */ 20 20 description?: string 21 21 links?: string[] 22 - stats?: 22 + stats?: ( 23 23 | 'merged-pull-request-count' 24 24 | 'closed-pull-request-count' 25 25 | 'open-pull-request-count' 26 26 | 'open-issue-count' 27 27 | 'closed-issue-count' 28 - | 'repository-count'[] 28 + | 'repository-count' 29 + )[] 29 30 /** Include link to this account on Bluesky. */ 30 31 bluesky: boolean 31 32 /** Free-form location text. */
+29
__generated__/types/social/grain/photo/defs.ts
··· 26 26 /** Alt text description of the image, for accessibility. */ 27 27 alt: string 28 28 aspectRatio?: SocialGrainDefs.AspectRatio 29 + exif?: ExifView 29 30 } 30 31 31 32 const hashPhotoView = 'photoView' ··· 37 38 export function validatePhotoView<V>(v: V) { 38 39 return validate<PhotoView & V>(v, id, hashPhotoView) 39 40 } 41 + 42 + export interface ExifView { 43 + $type?: 'social.grain.photo.defs#exifView' 44 + uri?: string 45 + cid?: string 46 + photo: string 47 + createdAt: string 48 + dateTimeOriginal?: string 49 + exposureTime?: string 50 + fNumber?: string 51 + flash?: string 52 + focalLengthIn35mmFormat?: string 53 + iSO?: number 54 + lensMake?: string 55 + lensModel?: string 56 + make?: string 57 + model?: string 58 + } 59 + 60 + const hashExifView = 'exifView' 61 + 62 + export function isExifView<V>(v: V) { 63 + return is$typed(v, id, hashExifView) 64 + } 65 + 66 + export function validateExifView<V>(v: V) { 67 + return validate<ExifView & V>(v, id, hashExifView) 68 + }
+42
__generated__/types/social/grain/photo/exif.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from "npm:@atproto/lexicon" 5 + import { CID } from "npm:multiformats/cid" 6 + import { validate as _validate } from '../../../../lexicons.ts' 7 + import { 8 + type $Typed, 9 + is$typed as _is$typed, 10 + type OmitKey, 11 + } from '../../../../util.ts' 12 + 13 + const is$typed = _is$typed, 14 + validate = _validate 15 + const id = 'social.grain.photo.exif' 16 + 17 + export interface Record { 18 + $type: 'social.grain.photo.exif' 19 + photo: string 20 + createdAt: string 21 + dateTimeOriginal?: string 22 + exposureTime?: number 23 + fNumber?: number 24 + flash?: string 25 + focalLengthIn35mmFormat?: number 26 + iSO?: number 27 + lensMake?: string 28 + lensModel?: string 29 + make?: string 30 + model?: string 31 + [k: string]: unknown 32 + } 33 + 34 + const hashRecord = 'main' 35 + 36 + export function isRecord<V>(v: V) { 37 + return is$typed(v, id, hashRecord) 38 + } 39 + 40 + export function validateRecord<V>(v: V) { 41 + return validate<Record & V>(v, id, hashRecord, true) 42 + }
+2 -1
deno.json
··· 9 9 "@tailwindcss/cli": "npm:@tailwindcss/cli@^4.1.4", 10 10 "date-fns": "npm:date-fns@^4.1.0", 11 11 "esbuild": "npm:esbuild@^0.25.5", 12 + "exifr": "npm:exifr@^7.1.3", 12 13 "htmx.org": "npm:htmx.org@^1.9.12", 13 14 "hyperscript.org": "npm:hyperscript.org@^0.9.14", 14 15 "popmotion": "npm:popmotion@^11.0.5", ··· 24 25 "dev:build": "deno -A --watch=src/static/ build.ts", 25 26 "dev:server": "deno run -A --env-file=.env --watch ./src/main.tsx", 26 27 "dev:tailwind": "deno run -A --node-modules-dir npm:@tailwindcss/cli -i ./src/input.css -o ./static/styles.css --watch", 27 - "sync": "deno run -A --env=.env jsr:@bigmoves/bff-cli@0.3.0-beta.30 sync --collections=social.grain.gallery,social.grain.actor.profile,social.grain.photo,social.grain.favorite,social.grain.gallery.item,social.grain.graph.follow --external-collections=app.bsky.actor.profile,app.bsky.graph.follow,sh.tangled.graph.follow,sh.tangled.actor.profile", 28 + "sync": "deno run -A --env=.env jsr:@bigmoves/bff-cli@0.3.0-beta.30 sync --collections=social.grain.gallery,social.grain.actor.profile,social.grain.photo,social.grain.photo.exif,social.grain.favorite,social.grain.gallery.item,social.grain.graph.follow --external-collections=app.bsky.actor.profile,app.bsky.graph.follow,sh.tangled.graph.follow,sh.tangled.actor.profile", 28 29 "codegen": "deno run -A jsr:@bigmoves/bff-cli@0.3.0-beta.30 lexgen" 29 30 }, 30 31 "compilerOptions": {
+53 -444
deno.lock
··· 3 3 "specifiers": { 4 4 "jsr:@bigmoves/atproto-oauth-client@0.2": "0.2.0", 5 5 "jsr:@bigmoves/bff@0.3.0-beta.35": "0.3.0-beta.35", 6 - "jsr:@deno/gfm@0.10": "0.10.0", 7 - "jsr:@denosaurs/emoji@0.3": "0.3.1", 8 6 "jsr:@luca/esbuild-deno-loader@~0.11.1": "0.11.1", 9 - "jsr:@std/assert@^1.0.12": "1.0.13", 10 7 "jsr:@std/assert@^1.0.13": "1.0.13", 11 - "jsr:@std/async@^1.0.12": "1.0.12", 12 8 "jsr:@std/bytes@^1.0.2": "1.0.6", 13 9 "jsr:@std/cache@0.2": "0.2.0", 14 - "jsr:@std/cli@^1.0.16": "1.0.19", 15 10 "jsr:@std/cli@^1.0.18": "1.0.19", 16 - "jsr:@std/data-structures@^1.0.6": "1.0.7", 17 11 "jsr:@std/encoding@^1.0.10": "1.0.10", 18 12 "jsr:@std/encoding@^1.0.5": "1.0.10", 19 13 "jsr:@std/fmt@^1.0.8": "1.0.8", 20 - "jsr:@std/fs@^1.0.16": "1.0.17", 21 14 "jsr:@std/html@^1.0.4": "1.0.4", 22 15 "jsr:@std/http@^1.0.13": "1.0.17", 23 16 "jsr:@std/http@^1.0.17": "1.0.17", ··· 29 22 "jsr:@std/path@^1.0.9": "1.1.0", 30 23 "jsr:@std/path@^1.1.0": "1.1.0", 31 24 "jsr:@std/streams@^1.0.9": "1.0.9", 32 - "jsr:@std/testing@^1.0.11": "1.0.11", 33 25 "npm:@atproto-labs/handle-resolver-node@~0.1.14": "0.1.16", 34 26 "npm:@atproto-labs/simple-store@~0.1.2": "0.1.2", 35 27 "npm:@atproto/api@~0.15.7": "0.15.14", ··· 42 34 "npm:@atproto/oauth-client@~0.3.13": "0.3.21", 43 35 "npm:@atproto/oauth-types@~0.2.4": "0.2.8", 44 36 "npm:@atproto/syntax@0.4": "0.4.0", 45 - "npm:@atproto/xrpc-server@*": "0.7.19", 37 + "npm:@atproto/xrpc-server@*": "0.7.18", 46 38 "npm:@atproto/xrpc-server@0.7.18": "0.7.18", 47 - "npm:@tailwindcss/cli@*": "4.1.8", 48 - "npm:@tailwindcss/cli@^4.0.12": "4.1.8", 49 - "npm:@tailwindcss/cli@^4.1.3": "4.1.8", 50 - "npm:@tailwindcss/cli@^4.1.4": "4.1.8", 39 + "npm:@tailwindcss/cli@*": "4.1.9", 40 + "npm:@tailwindcss/cli@^4.1.4": "4.1.9", 51 41 "npm:@types/node@*": "22.15.15", 52 42 "npm:clsx@^2.1.1": "2.1.1", 53 43 "npm:date-fns@^4.1.0": "4.1.0", 54 44 "npm:esbuild@~0.25.5": "0.25.5", 55 - "npm:github-slugger@2": "2.0.0", 56 - "npm:he@^1.2.0": "1.2.0", 45 + "npm:exifr@^7.1.3": "7.1.3", 57 46 "npm:htmx.org@^1.9.12": "1.9.12", 58 47 "npm:hyperscript.org@~0.9.14": "0.9.14", 59 48 "npm:jose@5.9.6": "5.9.6", 60 - "npm:katex@0.16": "0.16.22", 61 - "npm:marked-alert@2": "2.1.2_marked@12.0.2", 62 - "npm:marked-footnote@^1.2.0": "1.2.4_marked@12.0.2", 63 - "npm:marked-gfm-heading-id@^3.1.0": "3.2.0_marked@12.0.2", 64 - "npm:marked@12": "12.0.2", 65 49 "npm:multiformats@*": "13.3.7", 66 50 "npm:multiformats@^13.3.2": "13.3.7", 67 51 "npm:popmotion@^11.0.5": "11.0.5", 68 - "npm:preact-render-to-string@^6.5.13": "6.5.13_preact@10.26.8", 69 - "npm:preact@^10.26.5": "10.26.8", 70 - "npm:prismjs@^1.29.0": "1.30.0", 71 - "npm:sanitize-html@^2.13.0": "2.17.0", 72 - "npm:sharp@~0.34.1": "0.34.1", 52 + "npm:preact-render-to-string@^6.5.13": "6.5.13_preact@10.26.9", 53 + "npm:preact@^10.26.5": "10.26.9", 73 54 "npm:sortablejs@^1.15.6": "1.15.6", 74 55 "npm:tailwind-merge@^3.2.0": "3.3.1", 75 - "npm:tailwindcss@^4.0.12": "4.1.8", 76 - "npm:tailwindcss@^4.1.3": "4.1.8", 77 - "npm:tailwindcss@^4.1.4": "4.1.8", 56 + "npm:tailwindcss@^4.1.4": "4.1.9", 78 57 "npm:typed-htmx@~0.3.1": "0.3.1" 79 58 }, 80 59 "jsr": { ··· 89 68 "npm:jose" 90 69 ] 91 70 }, 92 - "@bigmoves/bff@0.3.0-beta.21": { 93 - "integrity": "1c83ac3abca2a9671b1ddadcdb38ed628704c5a14765ec20c54a4d05c46757dd", 94 - "dependencies": [ 95 - "npm:clsx", 96 - "npm:preact", 97 - "npm:tailwind-merge" 98 - ] 99 - }, 100 71 "@bigmoves/bff@0.3.0-beta.35": { 101 72 "integrity": "c59e2663ff3a73d48925ec03844fd04e4445dc5a53eb35f8a6178450dff19188", 102 73 "dependencies": [ 103 74 "jsr:@bigmoves/atproto-oauth-client", 104 - "jsr:@std/assert@^1.0.13", 75 + "jsr:@std/assert", 105 76 "jsr:@std/cache", 106 77 "jsr:@std/fmt", 107 78 "jsr:@std/http@^1.0.13", ··· 120 91 "npm:preact-render-to-string", 121 92 "npm:tailwind-merge" 122 93 ] 123 - }, 124 - "@deno/gfm@0.10.0": { 125 - "integrity": "51708205e3559a4aeb6afb29d07c5bfafe7941f91bb360351ef6621de9a39527", 126 - "dependencies": [ 127 - "jsr:@denosaurs/emoji", 128 - "npm:github-slugger", 129 - "npm:he", 130 - "npm:katex", 131 - "npm:marked", 132 - "npm:marked-alert", 133 - "npm:marked-footnote", 134 - "npm:marked-gfm-heading-id", 135 - "npm:prismjs", 136 - "npm:sanitize-html" 137 - ] 138 - }, 139 - "@denosaurs/emoji@0.3.1": { 140 - "integrity": "b0aed5f55dec99e83da7c9637fe0a36d1d6252b7c99deaaa3fc5dea3fcf3da8b" 141 94 }, 142 95 "@luca/esbuild-deno-loader@0.11.1": { 143 96 "integrity": "dc020d16d75b591f679f6b9288b10f38bdb4f24345edb2f5732affa1d9885267", ··· 153 106 "jsr:@std/internal" 154 107 ] 155 108 }, 156 - "@std/async@1.0.12": { 157 - "integrity": "d1bfcec459e8012846fe4e38dfc4241ab23240ecda3d8d6dfcf6d81a632e803d" 158 - }, 159 109 "@std/bytes@1.0.6": { 160 110 "integrity": "f6ac6adbd8ccd99314045f5703e23af0a68d7f7e58364b47d2c7f408aeb5820a" 161 111 }, ··· 165 115 "@std/cli@1.0.19": { 166 116 "integrity": "b3601a54891f89f3f738023af11960c4e6f7a45dc76cde39a6861124cba79e88" 167 117 }, 168 - "@std/data-structures@1.0.7": { 169 - "integrity": "16932d2c8d281f65eaaa2209af2473209881e33b1ced54cd1b015e7b4cdbb0d2" 170 - }, 171 118 "@std/encoding@1.0.10": { 172 119 "integrity": "8783c6384a2d13abd5e9e87a7ae0520a30e9f56aeeaa3bdf910a3eaaf5c811a1" 173 120 }, 174 121 "@std/fmt@1.0.8": { 175 122 "integrity": "71e1fc498787e4434d213647a6e43e794af4fd393ef8f52062246e06f7e372b7" 176 123 }, 177 - "@std/fs@1.0.17": { 178 - "integrity": "1c00c632677c1158988ef7a004cb16137f870aafdb8163b9dce86ec652f3952b", 179 - "dependencies": [ 180 - "jsr:@std/path@^1.0.9" 181 - ] 182 - }, 183 124 "@std/html@1.0.4": { 184 125 "integrity": "eff3497c08164e6ada49b7f81a28b5108087033823153d065e3f89467dd3d50e" 185 126 }, 186 127 "@std/http@1.0.17": { 187 128 "integrity": "98aec8ab4080d95c21f731e3008f69c29c5012d12f1b4e553f85935db601569f", 188 129 "dependencies": [ 189 - "jsr:@std/cli@^1.0.18", 130 + "jsr:@std/cli", 190 131 "jsr:@std/encoding@^1.0.10", 191 132 "jsr:@std/fmt", 192 133 "jsr:@std/html", ··· 210 151 }, 211 152 "@std/streams@1.0.9": { 212 153 "integrity": "a9d26b1988cdd7aa7b1f4b51e1c36c1557f3f252880fa6cc5b9f37078b1a5035" 213 - }, 214 - "@std/testing@1.0.11": { 215 - "integrity": "12b3db12d34f0f385a26248933bde766c0f8c5ad8b6ab34d4d38f528ab852f48", 216 - "dependencies": [ 217 - "jsr:@std/assert@^1.0.12", 218 - "jsr:@std/async", 219 - "jsr:@std/data-structures", 220 - "jsr:@std/fs", 221 - "jsr:@std/internal", 222 - "jsr:@std/path@^1.0.8" 223 - ] 224 154 } 225 155 }, 226 156 "npm": { ··· 420 350 "zod" 421 351 ] 422 352 }, 423 - "@atproto/xrpc-server@0.7.19": { 424 - "integrity": "sha512-YSCl/tU2NDykgDYslFSOYCr96esUgDwncFiADKL59/fyIFPLoT0qY8Uq/budpxUh0qPzjow4HHgVWESOaOpUmA==", 425 - "dependencies": [ 426 - "@atproto/common", 427 - "@atproto/crypto", 428 - "@atproto/lexicon", 429 - "@atproto/xrpc", 430 - "cbor-x", 431 - "express", 432 - "http-errors", 433 - "mime-types", 434 - "rate-limiter-flexible", 435 - "uint8arrays", 436 - "ws", 437 - "zod" 438 - ] 439 - }, 440 353 "@atproto/xrpc@0.7.0": { 441 354 "integrity": "sha512-SfhP9dGx2qclaScFDb58Jnrmim5nk4geZXCqg6sB0I/KZhZEkr9iIx1hLCp+sxkIfEsmEJjeWO4B0rjUIJW5cw==", 442 355 "dependencies": [ ··· 618 531 "os": ["win32"], 619 532 "cpu": ["x64"] 620 533 }, 621 - "@img/sharp-darwin-arm64@0.34.1": { 622 - "integrity": "sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==", 623 - "optionalDependencies": [ 624 - "@img/sharp-libvips-darwin-arm64" 625 - ], 626 - "os": ["darwin"], 627 - "cpu": ["arm64"] 628 - }, 629 - "@img/sharp-darwin-x64@0.34.1": { 630 - "integrity": "sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==", 631 - "optionalDependencies": [ 632 - "@img/sharp-libvips-darwin-x64" 633 - ], 634 - "os": ["darwin"], 635 - "cpu": ["x64"] 636 - }, 637 - "@img/sharp-libvips-darwin-arm64@1.1.0": { 638 - "integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==", 639 - "os": ["darwin"], 640 - "cpu": ["arm64"] 641 - }, 642 - "@img/sharp-libvips-darwin-x64@1.1.0": { 643 - "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==", 644 - "os": ["darwin"], 645 - "cpu": ["x64"] 646 - }, 647 - "@img/sharp-libvips-linux-arm64@1.1.0": { 648 - "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==", 649 - "os": ["linux"], 650 - "cpu": ["arm64"] 651 - }, 652 - "@img/sharp-libvips-linux-arm@1.1.0": { 653 - "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==", 654 - "os": ["linux"], 655 - "cpu": ["arm"] 656 - }, 657 - "@img/sharp-libvips-linux-ppc64@1.1.0": { 658 - "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==", 659 - "os": ["linux"], 660 - "cpu": ["ppc64"] 661 - }, 662 - "@img/sharp-libvips-linux-s390x@1.1.0": { 663 - "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==", 664 - "os": ["linux"], 665 - "cpu": ["s390x"] 666 - }, 667 - "@img/sharp-libvips-linux-x64@1.1.0": { 668 - "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==", 669 - "os": ["linux"], 670 - "cpu": ["x64"] 671 - }, 672 - "@img/sharp-libvips-linuxmusl-arm64@1.1.0": { 673 - "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==", 674 - "os": ["linux"], 675 - "cpu": ["arm64"] 676 - }, 677 - "@img/sharp-libvips-linuxmusl-x64@1.1.0": { 678 - "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==", 679 - "os": ["linux"], 680 - "cpu": ["x64"] 681 - }, 682 - "@img/sharp-linux-arm64@0.34.1": { 683 - "integrity": "sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==", 684 - "optionalDependencies": [ 685 - "@img/sharp-libvips-linux-arm64" 686 - ], 687 - "os": ["linux"], 688 - "cpu": ["arm64"] 689 - }, 690 - "@img/sharp-linux-arm@0.34.1": { 691 - "integrity": "sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==", 692 - "optionalDependencies": [ 693 - "@img/sharp-libvips-linux-arm" 694 - ], 695 - "os": ["linux"], 696 - "cpu": ["arm"] 697 - }, 698 - "@img/sharp-linux-s390x@0.34.1": { 699 - "integrity": "sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==", 700 - "optionalDependencies": [ 701 - "@img/sharp-libvips-linux-s390x" 702 - ], 703 - "os": ["linux"], 704 - "cpu": ["s390x"] 705 - }, 706 - "@img/sharp-linux-x64@0.34.1": { 707 - "integrity": "sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==", 708 - "optionalDependencies": [ 709 - "@img/sharp-libvips-linux-x64" 710 - ], 711 - "os": ["linux"], 712 - "cpu": ["x64"] 713 - }, 714 - "@img/sharp-linuxmusl-arm64@0.34.1": { 715 - "integrity": "sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==", 716 - "optionalDependencies": [ 717 - "@img/sharp-libvips-linuxmusl-arm64" 718 - ], 719 - "os": ["linux"], 720 - "cpu": ["arm64"] 721 - }, 722 - "@img/sharp-linuxmusl-x64@0.34.1": { 723 - "integrity": "sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==", 724 - "optionalDependencies": [ 725 - "@img/sharp-libvips-linuxmusl-x64" 726 - ], 727 - "os": ["linux"], 728 - "cpu": ["x64"] 729 - }, 730 - "@img/sharp-wasm32@0.34.1": { 731 - "integrity": "sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==", 732 - "dependencies": [ 733 - "@emnapi/runtime" 734 - ], 735 - "cpu": ["wasm32"] 736 - }, 737 - "@img/sharp-win32-ia32@0.34.1": { 738 - "integrity": "sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==", 739 - "os": ["win32"], 740 - "cpu": ["ia32"] 741 - }, 742 - "@img/sharp-win32-x64@0.34.1": { 743 - "integrity": "sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==", 744 - "os": ["win32"], 745 - "cpu": ["x64"] 746 - }, 747 534 "@ipld/dag-cbor@7.0.3": { 748 535 "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", 749 536 "dependencies": [ ··· 788 575 "@jridgewell/sourcemap-codec" 789 576 ] 790 577 }, 791 - "@napi-rs/wasm-runtime@0.2.10": { 792 - "integrity": "sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==", 578 + "@napi-rs/wasm-runtime@0.2.11": { 579 + "integrity": "sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==", 793 580 "dependencies": [ 794 581 "@emnapi/core", 795 582 "@emnapi/runtime", ··· 895 682 ], 896 683 "scripts": true 897 684 }, 898 - "@tailwindcss/cli@4.1.8": { 899 - "integrity": "sha512-+6lkjXSr/68zWiabK3mVYVHmOq/SAHjJ13mR8spyB4LgUWZbWzU9kCSErlAUo+gK5aVfgqe8kY6Ltz9+nz5XYA==", 685 + "@tailwindcss/cli@4.1.9": { 686 + "integrity": "sha512-beIaXdXn5zXKvk14YW79iPNBfksT9qQNKHbL/EB/GyVkfY9QSPRntXABpZnSWWEY/P7T3O3mPwQq/jhX9v1lxA==", 900 687 "dependencies": [ 901 688 "@parcel/watcher", 902 689 "@tailwindcss/node", ··· 908 695 ], 909 696 "bin": true 910 697 }, 911 - "@tailwindcss/node@4.1.8": { 912 - "integrity": "sha512-OWwBsbC9BFAJelmnNcrKuf+bka2ZxCE2A4Ft53Tkg4uoiE67r/PMEYwCsourC26E+kmxfwE0hVzMdxqeW+xu7Q==", 698 + "@tailwindcss/node@4.1.9": { 699 + "integrity": "sha512-ZFsgw6lbtcZKYPWvf6zAuCVSuer7UQ2Z5P8BETHcpA4x/3NwOjAIXmRnYfG77F14f9bPeuR4GaNz3ji1JkQMeQ==", 913 700 "dependencies": [ 914 701 "@ampproject/remapping", 915 702 "enhanced-resolve", ··· 920 707 "tailwindcss" 921 708 ] 922 709 }, 923 - "@tailwindcss/oxide-android-arm64@4.1.8": { 924 - "integrity": "sha512-Fbz7qni62uKYceWYvUjRqhGfZKwhZDQhlrJKGtnZfuNtHFqa8wmr+Wn74CTWERiW2hn3mN5gTpOoxWKk0jRxjg==", 710 + "@tailwindcss/oxide-android-arm64@4.1.9": { 711 + "integrity": "sha512-X4mBUUJ3DPqODhtdT5Ju55feJwBN+hP855Z7c0t11Jzece9KRtdM41ljMrCcureKMh96mcOh2gxahkp1yE+BOQ==", 925 712 "os": ["android"], 926 713 "cpu": ["arm64"] 927 714 }, 928 - "@tailwindcss/oxide-darwin-arm64@4.1.8": { 929 - "integrity": "sha512-RdRvedGsT0vwVVDztvyXhKpsU2ark/BjgG0huo4+2BluxdXo8NDgzl77qh0T1nUxmM11eXwR8jA39ibvSTbi7A==", 715 + "@tailwindcss/oxide-darwin-arm64@4.1.9": { 716 + "integrity": "sha512-jnWnqz71ZLXUbJLW53m9dSQakLBfaWxAd9TAibimrNdQfZKyie+xGppdDCZExtYwUdflt3kOT9y1JUgYXVEQmw==", 930 717 "os": ["darwin"], 931 718 "cpu": ["arm64"] 932 719 }, 933 - "@tailwindcss/oxide-darwin-x64@4.1.8": { 934 - "integrity": "sha512-t6PgxjEMLp5Ovf7uMb2OFmb3kqzVTPPakWpBIFzppk4JE4ix0yEtbtSjPbU8+PZETpaYMtXvss2Sdkx8Vs4XRw==", 720 + "@tailwindcss/oxide-darwin-x64@4.1.9": { 721 + "integrity": "sha512-+Ui6LlvZ6aCPvSwv3l16nYb6gu1N6RamFz7hSu5aqaiPrDQqD1LPT/e8r2/laSVwFjRyOZxQQ/gvGxP3ihA2rw==", 935 722 "os": ["darwin"], 936 723 "cpu": ["x64"] 937 724 }, 938 - "@tailwindcss/oxide-freebsd-x64@4.1.8": { 939 - "integrity": "sha512-g8C8eGEyhHTqwPStSwZNSrOlyx0bhK/V/+zX0Y+n7DoRUzyS8eMbVshVOLJTDDC+Qn9IJnilYbIKzpB9n4aBsg==", 725 + "@tailwindcss/oxide-freebsd-x64@4.1.9": { 726 + "integrity": "sha512-BWqCh0uoXMprwWfG7+oyPW53VCh6G08pxY0IIN/i5DQTpPnCJ4zm2W8neH9kW1v1f6RXP3b2qQjAzrAcnQ5e9w==", 940 727 "os": ["freebsd"], 941 728 "cpu": ["x64"] 942 729 }, 943 - "@tailwindcss/oxide-linux-arm-gnueabihf@4.1.8": { 944 - "integrity": "sha512-Jmzr3FA4S2tHhaC6yCjac3rGf7hG9R6Gf2z9i9JFcuyy0u79HfQsh/thifbYTF2ic82KJovKKkIB6Z9TdNhCXQ==", 730 + "@tailwindcss/oxide-linux-arm-gnueabihf@4.1.9": { 731 + "integrity": "sha512-U8itjQb5TVc80aV5Yo+JtKo+qS95CV4XLrKEtSLQFoTD/c9j3jk4WZipYT+9Jxqem29qCMRPxjEZ3s+wTT4XCw==", 945 732 "os": ["linux"], 946 733 "cpu": ["arm"] 947 734 }, 948 - "@tailwindcss/oxide-linux-arm64-gnu@4.1.8": { 949 - "integrity": "sha512-qq7jXtO1+UEtCmCeBBIRDrPFIVI4ilEQ97qgBGdwXAARrUqSn/L9fUrkb1XP/mvVtoVeR2bt/0L77xx53bPZ/Q==", 735 + "@tailwindcss/oxide-linux-arm64-gnu@4.1.9": { 736 + "integrity": "sha512-dKlGraoNvyTrR7ovLw3Id9yTwc+l0NYg8bwOkYqk+zltvGns8bPvVr6PH5jATdc75kCGd6kDRmP4p1LwqCnPJQ==", 950 737 "os": ["linux"], 951 738 "cpu": ["arm64"] 952 739 }, 953 - "@tailwindcss/oxide-linux-arm64-musl@4.1.8": { 954 - "integrity": "sha512-O6b8QesPbJCRshsNApsOIpzKt3ztG35gfX9tEf4arD7mwNinsoCKxkj8TgEE0YRjmjtO3r9FlJnT/ENd9EVefQ==", 740 + "@tailwindcss/oxide-linux-arm64-musl@4.1.9": { 741 + "integrity": "sha512-qCZ4QTrZaBEgNM13pGjvakdmid1Kw3CUCEQzgVAn64Iud7zSxOGwK1usg+hrwrOfFH7vXZZr8OhzC8fJTRq5NA==", 955 742 "os": ["linux"], 956 743 "cpu": ["arm64"] 957 744 }, 958 - "@tailwindcss/oxide-linux-x64-gnu@4.1.8": { 959 - "integrity": "sha512-32iEXX/pXwikshNOGnERAFwFSfiltmijMIAbUhnNyjFr3tmWmMJWQKU2vNcFX0DACSXJ3ZWcSkzNbaKTdngH6g==", 745 + "@tailwindcss/oxide-linux-x64-gnu@4.1.9": { 746 + "integrity": "sha512-bmzkAWQjRlY9udmg/a1bOtZpV14ZCdrB74PZrd7Oz/wK62Rk+m9+UV3BsgGfOghyO5Qu5ZDciADzDMZbi9n1+g==", 960 747 "os": ["linux"], 961 748 "cpu": ["x64"] 962 749 }, 963 - "@tailwindcss/oxide-linux-x64-musl@4.1.8": { 964 - "integrity": "sha512-s+VSSD+TfZeMEsCaFaHTaY5YNj3Dri8rST09gMvYQKwPphacRG7wbuQ5ZJMIJXN/puxPcg/nU+ucvWguPpvBDg==", 750 + "@tailwindcss/oxide-linux-x64-musl@4.1.9": { 751 + "integrity": "sha512-NpvPQsXj1raDHhd+g2SUvZQoTPWfYAsyYo9h4ZqV7EOmR+aj7LCAE5hnXNnrJ5Egy/NiO3Hs7BNpSbsPEOpORg==", 965 752 "os": ["linux"], 966 753 "cpu": ["x64"] 967 754 }, 968 - "@tailwindcss/oxide-wasm32-wasi@4.1.8": { 969 - "integrity": "sha512-CXBPVFkpDjM67sS1psWohZ6g/2/cd+cq56vPxK4JeawelxwK4YECgl9Y9TjkE2qfF+9/s1tHHJqrC4SS6cVvSg==", 755 + "@tailwindcss/oxide-wasm32-wasi@4.1.9": { 756 + "integrity": "sha512-G93Yuf3xrpTxDUCSh685d1dvOkqOB0Gy+Bchv9Zy3k+lNw/9SEgsHit50xdvp1/p9yRH2TeDHJeDLUiV4mlTkA==", 970 757 "dependencies": [ 971 758 "@emnapi/core", 972 759 "@emnapi/runtime", ··· 977 764 ], 978 765 "cpu": ["wasm32"] 979 766 }, 980 - "@tailwindcss/oxide-win32-arm64-msvc@4.1.8": { 981 - "integrity": "sha512-7GmYk1n28teDHUjPlIx4Z6Z4hHEgvP5ZW2QS9ygnDAdI/myh3HTHjDqtSqgu1BpRoI4OiLx+fThAyA1JePoENA==", 767 + "@tailwindcss/oxide-win32-arm64-msvc@4.1.9": { 768 + "integrity": "sha512-Eq9FZzZe/NPkUiSMY+eY7r5l7msuFlm6wC6lnV11m8885z0vs9zx48AKTfw0UbVecTRV5wMxKb3Kmzx2LoUIWg==", 982 769 "os": ["win32"], 983 770 "cpu": ["arm64"] 984 771 }, 985 - "@tailwindcss/oxide-win32-x64-msvc@4.1.8": { 986 - "integrity": "sha512-fou+U20j+Jl0EHwK92spoWISON2OBnCazIc038Xj2TdweYV33ZRkS9nwqiUi2d/Wba5xg5UoHfvynnb/UB49cQ==", 772 + "@tailwindcss/oxide-win32-x64-msvc@4.1.9": { 773 + "integrity": "sha512-oZ4zkthMXMJN2w/vu3jEfuqWTW7n8giGYDV/SfhBGRNehNMOBqh3YUAEv+8fv2YDJEzL4JpXTNTiSXW3UiUwBw==", 987 774 "os": ["win32"], 988 775 "cpu": ["x64"] 989 776 }, 990 - "@tailwindcss/oxide@4.1.8": { 991 - "integrity": "sha512-d7qvv9PsM5N3VNKhwVUhpK6r4h9wtLkJ6lz9ZY9aeZgrUWk1Z8VPyqyDT9MZlem7GTGseRQHkeB1j3tC7W1P+A==", 777 + "@tailwindcss/oxide@4.1.9": { 778 + "integrity": "sha512-oqjNxOBt1iNRAywjiH+VFsfovx/hVt4mxe0kOkRMAbbcCwbJg5e2AweFqyGN7gtmE1TJXnvnyX7RWTR1l72ciQ==", 992 779 "dependencies": [ 993 780 "detect-libc@2.0.4", 994 781 "tar" ··· 1132 919 "clsx@2.1.1": { 1133 920 "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==" 1134 921 }, 1135 - "color-convert@2.0.1": { 1136 - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1137 - "dependencies": [ 1138 - "color-name" 1139 - ] 1140 - }, 1141 - "color-name@1.1.4": { 1142 - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 1143 - }, 1144 - "color-string@1.9.1": { 1145 - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", 1146 - "dependencies": [ 1147 - "color-name", 1148 - "simple-swizzle" 1149 - ] 1150 - }, 1151 - "color@4.2.3": { 1152 - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", 1153 - "dependencies": [ 1154 - "color-convert", 1155 - "color-string" 1156 - ] 1157 - }, 1158 922 "commander@2.20.3": { 1159 923 "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 1160 924 }, 1161 - "commander@8.3.0": { 1162 - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" 1163 - }, 1164 925 "content-disposition@0.5.4": { 1165 926 "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 1166 927 "dependencies": [ ··· 1185 946 "ms@2.0.0" 1186 947 ] 1187 948 }, 1188 - "deepmerge@4.3.1": { 1189 - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" 1190 - }, 1191 949 "depd@2.0.0": { 1192 950 "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" 1193 951 }, ··· 1201 959 "detect-libc@2.0.4": { 1202 960 "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==" 1203 961 }, 1204 - "dom-serializer@2.0.0": { 1205 - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", 1206 - "dependencies": [ 1207 - "domelementtype", 1208 - "domhandler", 1209 - "entities" 1210 - ] 1211 - }, 1212 - "domelementtype@2.3.0": { 1213 - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" 1214 - }, 1215 - "domhandler@5.0.3": { 1216 - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", 1217 - "dependencies": [ 1218 - "domelementtype" 1219 - ] 1220 - }, 1221 - "domutils@3.2.2": { 1222 - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", 1223 - "dependencies": [ 1224 - "dom-serializer", 1225 - "domelementtype", 1226 - "domhandler" 1227 - ] 1228 - }, 1229 962 "dunder-proto@1.0.1": { 1230 963 "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", 1231 964 "dependencies": [ ··· 1249 982 "graceful-fs", 1250 983 "tapable" 1251 984 ] 1252 - }, 1253 - "entities@4.5.0": { 1254 - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" 1255 985 }, 1256 986 "es-define-property@1.0.1": { 1257 987 "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" ··· 1300 1030 "escape-html@1.0.3": { 1301 1031 "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 1302 1032 }, 1303 - "escape-string-regexp@4.0.0": { 1304 - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" 1305 - }, 1306 1033 "etag@1.8.1": { 1307 1034 "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" 1308 1035 }, ··· 1311 1038 }, 1312 1039 "events@3.3.0": { 1313 1040 "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" 1041 + }, 1042 + "exifr@7.1.3": { 1043 + "integrity": "sha512-g/aje2noHivrRSLbAUtBPWFbxKdKhgj/xr1vATDdUXPOFYJlQ62Ft0oy+72V6XLIpDJfHs6gXLbBLAolqOXYRw==" 1314 1044 }, 1315 1045 "express@4.21.2": { 1316 1046 "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", ··· 1406 1136 "es-object-atoms" 1407 1137 ] 1408 1138 }, 1409 - "github-slugger@2.0.0": { 1410 - "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" 1411 - }, 1412 1139 "gopd@1.2.0": { 1413 1140 "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" 1414 1141 }, ··· 1427 1154 "function-bind" 1428 1155 ] 1429 1156 }, 1430 - "he@1.2.0": { 1431 - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 1432 - "bin": true 1433 - }, 1434 1157 "hey-listen@1.0.8": { 1435 1158 "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==" 1436 1159 }, 1437 - "htmlparser2@8.0.2": { 1438 - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", 1439 - "dependencies": [ 1440 - "domelementtype", 1441 - "domhandler", 1442 - "domutils", 1443 - "entities" 1444 - ] 1445 - }, 1446 1160 "htmx.org@1.9.12": { 1447 1161 "integrity": "sha512-VZAohXyF7xPGS52IM8d1T1283y+X4D+Owf3qY1NZ9RuBypyu9l8cGsxUMAG5fEAb/DhT7rDoJ9Hpu5/HxFD3cw==" 1448 1162 }, ··· 1482 1196 "ipaddr.js@2.2.0": { 1483 1197 "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==" 1484 1198 }, 1485 - "is-arrayish@0.3.2": { 1486 - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" 1487 - }, 1488 1199 "is-extglob@2.1.1": { 1489 1200 "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" 1490 1201 }, ··· 1497 1208 "is-number@7.0.0": { 1498 1209 "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 1499 1210 }, 1500 - "is-plain-object@5.0.0": { 1501 - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" 1502 - }, 1503 1211 "iso-datestring-validator@2.2.2": { 1504 1212 "integrity": "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==" 1505 1213 }, ··· 1509 1217 }, 1510 1218 "jose@5.9.6": { 1511 1219 "integrity": "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==" 1512 - }, 1513 - "katex@0.16.22": { 1514 - "integrity": "sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==", 1515 - "dependencies": [ 1516 - "commander@8.3.0" 1517 - ], 1518 - "bin": true 1519 1220 }, 1520 1221 "lightningcss-darwin-arm64@1.30.1": { 1521 1222 "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", ··· 1597 1298 "markdown-it-deflist@2.1.0": { 1598 1299 "integrity": "sha512-3OuqoRUlSxJiuQYu0cWTLHNhhq2xtoSFqsZK8plANg91+RJQU1ziQ6lA2LzmFAEes18uPBsHZpcX6We5l76Nzg==" 1599 1300 }, 1600 - "marked-alert@2.1.2_marked@12.0.2": { 1601 - "integrity": "sha512-EFNRZ08d8L/iEIPLTlQMDjvwIsj03gxWCczYTht6DCiHJIZhMk4NK5gtPY9UqAYb09eV5VGT+jD4lp396E0I+w==", 1602 - "dependencies": [ 1603 - "marked" 1604 - ] 1605 - }, 1606 - "marked-footnote@1.2.4_marked@12.0.2": { 1607 - "integrity": "sha512-DB2Kl+wFh6YwZd70qABMY6WUkG1UuyqoNTFoDfGyG79Pz24neYtLBkB+45a7o72V7gkfvbC3CGzIYFobxfMT1Q==", 1608 - "dependencies": [ 1609 - "marked" 1610 - ] 1611 - }, 1612 - "marked-gfm-heading-id@3.2.0_marked@12.0.2": { 1613 - "integrity": "sha512-Xfxpr5lXLDLY10XqzSCA9l2dDaiabQUgtYM9hw8yunyVsB/xYBRpiic6BOiY/EAJw1ik1eWr1ET1HKOAPZBhXg==", 1614 - "dependencies": [ 1615 - "github-slugger", 1616 - "marked" 1617 - ] 1618 - }, 1619 - "marked@12.0.2": { 1620 - "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", 1621 - "bin": true 1622 - }, 1623 1301 "math-intrinsics@1.1.0": { 1624 1302 "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" 1625 1303 }, ··· 1680 1358 "multiformats@9.9.0": { 1681 1359 "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" 1682 1360 }, 1683 - "nanoid@3.3.11": { 1684 - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 1685 - "bin": true 1686 - }, 1687 1361 "negotiator@0.6.3": { 1688 1362 "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" 1689 1363 }, ··· 1708 1382 "dependencies": [ 1709 1383 "ee-first" 1710 1384 ] 1711 - }, 1712 - "parse-srcset@1.0.2": { 1713 - "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==" 1714 1385 }, 1715 1386 "parseurl@1.3.3": { 1716 1387 "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" ··· 1760 1431 "tslib@2.4.0" 1761 1432 ] 1762 1433 }, 1763 - "postcss@8.5.3": { 1764 - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", 1765 - "dependencies": [ 1766 - "nanoid", 1767 - "picocolors", 1768 - "source-map-js" 1769 - ] 1770 - }, 1771 - "preact-render-to-string@6.5.13_preact@10.26.8": { 1434 + "preact-render-to-string@6.5.13_preact@10.26.9": { 1772 1435 "integrity": "sha512-iGPd+hKPMFKsfpR2vL4kJ6ZPcFIoWZEcBf0Dpm3zOpdVvj77aY8RlLiQji5OMrngEyaxGogeakTb54uS2FvA6w==", 1773 1436 "dependencies": [ 1774 1437 "preact" 1775 1438 ] 1776 1439 }, 1777 - "preact@10.26.8": { 1778 - "integrity": "sha512-1nMfdFjucm5hKvq0IClqZwK4FJkGXhRrQstOQ3P4vp8HxKrJEMFcY6RdBRVTdfQS/UlnX6gfbPuTvaqx/bDoeQ==" 1779 - }, 1780 - "prismjs@1.30.0": { 1781 - "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==" 1440 + "preact@10.26.9": { 1441 + "integrity": "sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA==" 1782 1442 }, 1783 1443 "process-warning@3.0.0": { 1784 1444 "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" ··· 1839 1499 "safer-buffer@2.1.2": { 1840 1500 "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1841 1501 }, 1842 - "sanitize-html@2.17.0": { 1843 - "integrity": "sha512-dLAADUSS8rBwhaevT12yCezvioCA+bmUTPH/u57xKPT8d++voeYE6HeluA/bPbQ15TwDBG2ii+QZIEmYx8VdxA==", 1844 - "dependencies": [ 1845 - "deepmerge", 1846 - "escape-string-regexp", 1847 - "htmlparser2", 1848 - "is-plain-object", 1849 - "parse-srcset", 1850 - "postcss" 1851 - ] 1852 - }, 1853 - "semver@7.7.2": { 1854 - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", 1855 - "bin": true 1856 - }, 1857 1502 "send@0.19.0": { 1858 1503 "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", 1859 1504 "dependencies": [ ··· 1884 1529 "setprototypeof@1.2.0": { 1885 1530 "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 1886 1531 }, 1887 - "sharp@0.34.1": { 1888 - "integrity": "sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==", 1889 - "dependencies": [ 1890 - "color", 1891 - "detect-libc@2.0.4", 1892 - "semver" 1893 - ], 1894 - "optionalDependencies": [ 1895 - "@img/sharp-darwin-arm64", 1896 - "@img/sharp-darwin-x64", 1897 - "@img/sharp-libvips-darwin-arm64", 1898 - "@img/sharp-libvips-darwin-x64", 1899 - "@img/sharp-libvips-linux-arm", 1900 - "@img/sharp-libvips-linux-arm64", 1901 - "@img/sharp-libvips-linux-ppc64", 1902 - "@img/sharp-libvips-linux-s390x", 1903 - "@img/sharp-libvips-linux-x64", 1904 - "@img/sharp-libvips-linuxmusl-arm64", 1905 - "@img/sharp-libvips-linuxmusl-x64", 1906 - "@img/sharp-linux-arm", 1907 - "@img/sharp-linux-arm64", 1908 - "@img/sharp-linux-s390x", 1909 - "@img/sharp-linux-x64", 1910 - "@img/sharp-linuxmusl-arm64", 1911 - "@img/sharp-linuxmusl-x64", 1912 - "@img/sharp-wasm32", 1913 - "@img/sharp-win32-ia32", 1914 - "@img/sharp-win32-x64" 1915 - ], 1916 - "scripts": true 1917 - }, 1918 1532 "side-channel-list@1.0.0": { 1919 1533 "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", 1920 1534 "dependencies": [ ··· 1951 1565 "side-channel-weakmap" 1952 1566 ] 1953 1567 }, 1954 - "simple-swizzle@0.2.2": { 1955 - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", 1956 - "dependencies": [ 1957 - "is-arrayish" 1958 - ] 1959 - }, 1960 1568 "sonic-boom@3.8.1": { 1961 1569 "integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==", 1962 1570 "dependencies": [ ··· 2001 1609 "tailwind-merge@3.3.1": { 2002 1610 "integrity": "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==" 2003 1611 }, 2004 - "tailwindcss@4.1.8": { 2005 - "integrity": "sha512-kjeW8gjdxasbmFKpVGrGd5T4i40mV5J2Rasw48QARfYeQ8YS9x02ON9SFWax3Qf616rt4Cp3nVNIj6Hd1mP3og==" 1612 + "tailwindcss@4.1.9": { 1613 + "integrity": "sha512-anBZRcvfNMsQdHB9XSGzAtIQWlhs49uK75jfkwrqjRUbjt4d7q9RE1wR1xWyfYZhLFnFX4ahWp88Au2lcEw5IQ==" 2006 1614 }, 2007 1615 "tapable@2.2.2": { 2008 1616 "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==" ··· 2023 1631 "dependencies": [ 2024 1632 "@jridgewell/source-map", 2025 1633 "acorn", 2026 - "commander@2.20.3", 1634 + "commander", 2027 1635 "source-map-support" 2028 1636 ], 2029 1637 "bin": true ··· 2096 1704 "yallist@5.0.0": { 2097 1705 "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==" 2098 1706 }, 2099 - "zod@3.25.51": { 2100 - "integrity": "sha512-TQSnBldh+XSGL+opiSIq0575wvDPqu09AqWe1F7JhUMKY+M91/aGlK4MhpVNO7MgYfHcVCB1ffwAUTJzllKJqg==" 1707 + "zod@3.25.61": { 1708 + "integrity": "sha512-fzfJgUw78LTNnHujj9re1Ov/JJQkRZZGDMcYqSx7Hp4rPOkKywaFHq0S6GoHeXs0wGNE/sIOutkXgnwzrVOGCQ==" 2101 1709 } 2102 1710 }, 2103 1711 "workspace": { ··· 2110 1718 "npm:@tailwindcss/cli@^4.1.4", 2111 1719 "npm:date-fns@^4.1.0", 2112 1720 "npm:esbuild@~0.25.5", 1721 + "npm:exifr@^7.1.3", 2113 1722 "npm:htmx.org@^1.9.12", 2114 1723 "npm:hyperscript.org@~0.9.14", 2115 1724 "npm:popmotion@^11.0.5",
+25
lexicons/social/grain/photo/defs.json
··· 25 25 "aspectRatio": { 26 26 "type": "ref", 27 27 "ref": "social.grain.defs#aspectRatio" 28 + }, 29 + "exif": { 30 + "type": "ref", 31 + "ref": "social.grain.photo.defs#exifView", 32 + "description": "EXIF metadata for the photo, if available." 28 33 } 34 + } 35 + }, 36 + "exifView": { 37 + "type": "object", 38 + "required": ["photo", "createdAt"], 39 + "properties": { 40 + "uri": { "type": "string", "format": "at-uri" }, 41 + "cid": { "type": "string", "format": "cid" }, 42 + "photo": { "type": "string", "format": "at-uri" }, 43 + "createdAt": { "type": "string", "format": "datetime" }, 44 + "dateTimeOriginal": { "type": "string" }, 45 + "exposureTime": { "type": "string" }, 46 + "fNumber": { "type": "string" }, 47 + "flash": { "type": "string" }, 48 + "focalLengthIn35mmFormat": { "type": "string" }, 49 + "iSO": { "type": "integer" }, 50 + "lensMake": { "type": "string" }, 51 + "lensModel": { "type": "string" }, 52 + "make": { "type": "string" }, 53 + "model": { "type": "string" } 29 54 } 30 55 } 31 56 }
+32
lexicons/social/grain/photo/exif.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "social.grain.photo.exif", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "Basic EXIF metadata for a photo. Integers are scaled by 1000000 to accommodate decimal values and potentially other tags in the future.", 8 + "key": "tid", 9 + "record": { 10 + "type": "object", 11 + "required": [ 12 + "photo", 13 + "createdAt" 14 + ], 15 + "properties": { 16 + "photo": { "type": "string", "format": "at-uri" }, 17 + "createdAt": { "type": "string", "format": "datetime" }, 18 + "dateTimeOriginal": { "type": "string", "format": "datetime" }, 19 + "exposureTime": { "type": "integer" }, 20 + "fNumber": { "type": "integer" }, 21 + "flash": { "type": "string" }, 22 + "focalLengthIn35mmFormat": { "type": "integer" }, 23 + "iSO": { "type": "integer" }, 24 + "lensMake": { "type": "string" }, 25 + "lensModel": { "type": "string" }, 26 + "make": { "type": "string" }, 27 + "model": { "type": "string" } 28 + } 29 + } 30 + } 31 + } 32 + }
+234
services/pds/account.sh
··· 1 + #!/bin/bash 2 + set -o errexit 3 + set -o nounset 4 + set -o pipefail 5 + 6 + PDS_ENV_FILE=${PDS_ENV_FILE:-".env"} 7 + source "${PDS_ENV_FILE}" 8 + 9 + # curl a URL and fail if the request fails. 10 + function curl_cmd_get { 11 + curl --fail --silent --show-error "$@" 12 + } 13 + 14 + # curl a URL and fail if the request fails. 15 + function curl_cmd_post { 16 + curl --fail --silent --show-error --request POST --header "Content-Type: application/json" "$@" 17 + } 18 + 19 + # curl a URL but do not fail if the request fails. 20 + function curl_cmd_post_nofail { 21 + curl --silent --show-error --request POST --header "Content-Type: application/json" "$@" 22 + } 23 + 24 + # The subcommand to run. 25 + SUBCOMMAND="${1:-}" 26 + 27 + # 28 + # account list 29 + # 30 + if [[ "${SUBCOMMAND}" == "list" ]]; then 31 + DIDS="$(curl_cmd_get \ 32 + "https://${PDS_HOSTNAME}/xrpc/com.atproto.sync.listRepos?limit=100" | jq --raw-output '.repos[].did' 33 + )" 34 + OUTPUT='[{"handle":"Handle","email":"Email","did":"DID"}' 35 + for did in ${DIDS}; do 36 + ITEM="$(curl_cmd_get \ 37 + --user "admin:${PDS_ADMIN_PASSWORD}" \ 38 + "https://${PDS_HOSTNAME}/xrpc/com.atproto.admin.getAccountInfo?did=${did}" 39 + )" 40 + OUTPUT="${OUTPUT},${ITEM}" 41 + done 42 + OUTPUT="${OUTPUT}]" 43 + echo "${OUTPUT}" | jq --raw-output '.[] | [.handle, .email, .did] | @tsv' | column -t 44 + 45 + # 46 + # account create 47 + # 48 + elif [[ "${SUBCOMMAND}" == "create" ]]; then 49 + EMAIL="${2:-}" 50 + HANDLE="${3:-}" 51 + 52 + if [[ "${EMAIL}" == "" ]]; then 53 + read -p "Enter an email address (e.g. alice@${PDS_HOSTNAME}): " EMAIL 54 + fi 55 + if [[ "${HANDLE}" == "" ]]; then 56 + read -p "Enter a handle (e.g. alice.${PDS_HOSTNAME}): " HANDLE 57 + fi 58 + 59 + if [[ "${EMAIL}" == "" || "${HANDLE}" == "" ]]; then 60 + echo "ERROR: missing EMAIL and/or HANDLE parameters." >/dev/stderr 61 + echo "Usage: $0 ${SUBCOMMAND} <EMAIL> <HANDLE>" >/dev/stderr 62 + exit 1 63 + fi 64 + 65 + PASSWORD="$(openssl rand -base64 30 | tr -d "=+/" | cut -c1-24)" 66 + INVITE_CODE="$(curl_cmd_post \ 67 + --user "admin:${PDS_ADMIN_PASSWORD}" \ 68 + --data '{"useCount": 1}' \ 69 + "https://${PDS_HOSTNAME}/xrpc/com.atproto.server.createInviteCode" | jq --raw-output '.code' 70 + )" 71 + RESULT="$(curl_cmd_post_nofail \ 72 + --data "{\"email\":\"${EMAIL}\", \"handle\":\"${HANDLE}\", \"password\":\"${PASSWORD}\", \"inviteCode\":\"${INVITE_CODE}\"}" \ 73 + "https://${PDS_HOSTNAME}/xrpc/com.atproto.server.createAccount" 74 + )" 75 + 76 + DID="$(echo $RESULT | jq --raw-output '.did')" 77 + if [[ "${DID}" != did:* ]]; then 78 + ERR="$(echo ${RESULT} | jq --raw-output '.message')" 79 + echo "ERROR: ${ERR}" >/dev/stderr 80 + echo "Usage: $0 ${SUBCOMMAND} <EMAIL> <HANDLE>" >/dev/stderr 81 + exit 1 82 + fi 83 + 84 + echo 85 + echo "Account created successfully!" 86 + echo "-----------------------------" 87 + echo "Handle : ${HANDLE}" 88 + echo "DID : ${DID}" 89 + echo "Password : ${PASSWORD}" 90 + echo "-----------------------------" 91 + echo "Save this password, it will not be displayed again." 92 + echo 93 + 94 + # 95 + # account delete 96 + # 97 + elif [[ "${SUBCOMMAND}" == "delete" ]]; then 98 + DID="${2:-}" 99 + 100 + if [[ "${DID}" == "" ]]; then 101 + echo "ERROR: missing DID parameter." >/dev/stderr 102 + echo "Usage: $0 ${SUBCOMMAND} <DID>" >/dev/stderr 103 + exit 1 104 + fi 105 + 106 + if [[ "${DID}" != did:* ]]; then 107 + echo "ERROR: DID parameter must start with \"did:\"." >/dev/stderr 108 + echo "Usage: $0 ${SUBCOMMAND} <DID>" >/dev/stderr 109 + exit 1 110 + fi 111 + 112 + echo "This action is permanent." 113 + read -r -p "Are you sure you'd like to delete ${DID}? [y/N] " response 114 + if [[ ! "${response}" =~ ^([yY][eE][sS]|[yY])$ ]]; then 115 + exit 0 116 + fi 117 + 118 + curl_cmd_post \ 119 + --user "admin:${PDS_ADMIN_PASSWORD}" \ 120 + --data "{\"did\": \"${DID}\"}" \ 121 + "https://${PDS_HOSTNAME}/xrpc/com.atproto.admin.deleteAccount" >/dev/null 122 + 123 + echo "${DID} deleted" 124 + 125 + # 126 + # account takedown 127 + # 128 + elif [[ "${SUBCOMMAND}" == "takedown" ]]; then 129 + DID="${2:-}" 130 + TAKEDOWN_REF="$(date +%s)" 131 + 132 + if [[ "${DID}" == "" ]]; then 133 + echo "ERROR: missing DID parameter." >/dev/stderr 134 + echo "Usage: $0 ${SUBCOMMAND} <DID>" >/dev/stderr 135 + exit 1 136 + fi 137 + 138 + if [[ "${DID}" != did:* ]]; then 139 + echo "ERROR: DID parameter must start with \"did:\"." >/dev/stderr 140 + echo "Usage: $0 ${SUBCOMMAND} <DID>" >/dev/stderr 141 + exit 1 142 + fi 143 + 144 + PAYLOAD="$(cat <<EOF 145 + { 146 + "subject": { 147 + "\$type": "com.atproto.admin.defs#repoRef", 148 + "did": "${DID}" 149 + }, 150 + "takedown": { 151 + "applied": true, 152 + "ref": "${TAKEDOWN_REF}" 153 + } 154 + } 155 + EOF 156 + )" 157 + 158 + curl_cmd_post \ 159 + --user "admin:${PDS_ADMIN_PASSWORD}" \ 160 + --data "${PAYLOAD}" \ 161 + "https://${PDS_HOSTNAME}/xrpc/com.atproto.admin.updateSubjectStatus" >/dev/null 162 + 163 + echo "${DID} taken down" 164 + 165 + # 166 + # account untakedown 167 + # 168 + elif [[ "${SUBCOMMAND}" == "untakedown" ]]; then 169 + DID="${2:-}" 170 + 171 + if [[ "${DID}" == "" ]]; then 172 + echo "ERROR: missing DID parameter." >/dev/stderr 173 + echo "Usage: $0 ${SUBCOMMAND} <DID>" >/dev/stderr 174 + exit 1 175 + fi 176 + 177 + if [[ "${DID}" != did:* ]]; then 178 + echo "ERROR: DID parameter must start with \"did:\"." >/dev/stderr 179 + echo "Usage: $0 ${SUBCOMMAND} <DID>" >/dev/stderr 180 + exit 1 181 + fi 182 + 183 + PAYLOAD=$(cat <<EOF 184 + { 185 + "subject": { 186 + "\$type": "com.atproto.admin.defs#repoRef", 187 + "did": "${DID}" 188 + }, 189 + "takedown": { 190 + "applied": false 191 + } 192 + } 193 + EOF 194 + ) 195 + 196 + curl_cmd_post \ 197 + --user "admin:${PDS_ADMIN_PASSWORD}" \ 198 + --data "${PAYLOAD}" \ 199 + "https://${PDS_HOSTNAME}/xrpc/com.atproto.admin.updateSubjectStatus" >/dev/null 200 + 201 + echo "${DID} untaken down" 202 + # 203 + # account reset-password 204 + # 205 + elif [[ "${SUBCOMMAND}" == "reset-password" ]]; then 206 + DID="${2:-}" 207 + PASSWORD="$(openssl rand -base64 30 | tr -d "=+/" | cut -c1-24)" 208 + 209 + if [[ "${DID}" == "" ]]; then 210 + echo "ERROR: missing DID parameter." >/dev/stderr 211 + echo "Usage: $0 ${SUBCOMMAND} <DID>" >/dev/stderr 212 + exit 1 213 + fi 214 + 215 + if [[ "${DID}" != did:* ]]; then 216 + echo "ERROR: DID parameter must start with \"did:\"." >/dev/stderr 217 + echo "Usage: $0 ${SUBCOMMAND} <DID>" >/dev/stderr 218 + exit 1 219 + fi 220 + 221 + curl_cmd_post \ 222 + --user "admin:${PDS_ADMIN_PASSWORD}" \ 223 + --data "{ \"did\": \"${DID}\", \"password\": \"${PASSWORD}\" }" \ 224 + "https://${PDS_HOSTNAME}/xrpc/com.atproto.admin.updateAccountPassword" >/dev/null 225 + 226 + echo 227 + echo "Password reset for ${DID}" 228 + echo "New password: ${PASSWORD}" 229 + echo 230 + 231 + else 232 + echo "Unknown subcommand: ${SUBCOMMAND}" >/dev/stderr 233 + exit 1 234 + fi
+22
src/components/CameraBadges.tsx
··· 1 + import { cn } from "@bigmoves/bff/components"; 2 + 3 + export function CameraBadges( 4 + { cameras, class: classProp }: Readonly< 5 + { cameras: string[]; class?: string } 6 + >, 7 + ) { 8 + if (cameras.length === 0) return null; 9 + return ( 10 + <div class={cn("flex gap-1", classProp)} id="camera-badges"> 11 + {cameras.sort().map((camera) => ( 12 + <span class="text-xs font-semibold bg-zinc-100 dark:bg-zinc-800 w-fit px-1"> 13 + 📷 {camera} 14 + </span> 15 + ))} 16 + </div> 17 + ); 18 + } 19 + 20 + // <span class="text-xs font-semibold bg-zinc-100 dark:bg-zinc-800 w-fit px-1"> 21 + // 📷 {cameras.join(", ").replace(/, ([^,]*)$/, " & $1")} 22 + // </span>
+76
src/components/ExifInfoDialog.tsx
··· 1 + import { Dialog } from "@bigmoves/bff/components"; 2 + 3 + export function ExifInfoDialog() { 4 + return ( 5 + <Dialog class="z-100"> 6 + <Dialog.Content class="dark:bg-zinc-950 relative"> 7 + <Dialog.Title>EXIF Info</Dialog.Title> 8 + <Dialog.X class="fill-zinc-950 dark:fill-zinc-50" /> 9 + <div class="text-sm mt-2"> 10 + <p> 11 + When you upload photos to Grain, we extract a small set of standard 12 + EXIF metadata from each image. This information is used to help 13 + organize photos by date taken, camera make, lens make, etc. This is 14 + a list of tags we currently support. 15 + </p> 16 + <ul class="list-disc ml-6 mt-2"> 17 + <li> 18 + <b>DateTimeOriginal</b>: When the photo was taken 19 + </li> 20 + <li> 21 + <b>ExposureTime</b>: Shutter speed (e.g., 1/250s) 22 + </li> 23 + <li> 24 + <b>FNumber</b>: Aperture (f-stop) 25 + </li> 26 + <li> 27 + <b>Flash</b>: Whether the flash fired 28 + </li> 29 + <li> 30 + <b>FocalLengthIn35mmFormat</b>: Lens focal length (35mm 31 + equivalent) 32 + </li> 33 + <li> 34 + <b>ISO</b>: ISO sensitivity setting 35 + </li> 36 + <li> 37 + <b>LensMake</b>: Lens manufacturer 38 + </li> 39 + <li> 40 + <b>LensModel</b>: Lens model 41 + </li> 42 + <li> 43 + <b>Make</b>: Camera manufacturer 44 + </li> 45 + <li> 46 + <b>Model</b>: Camera model 47 + </li> 48 + </ul> 49 + <p class="mt-2"> 50 + No GPS or location data is collected, and we do not store any 51 + personally identifiable information. The EXIF data is used solely to 52 + enhance your photo organization and discovery experience on Grain. 53 + </p> 54 + <p class="mt-2"> 55 + If you want to remove EXIF data from your photo after uploading, you 56 + can delete the photo and re-upload with the "Include image metadata" 57 + checkbox unchecked. 58 + </p> 59 + <p class="mt-2"> 60 + You can learn more about the types of metadata commonly embedded in 61 + photos at{" "} 62 + <a 63 + href="https://exiv2.org/tags.html" 64 + className="text-sky-500 hover:underline" 65 + target="_blank" 66 + rel="noopener noreferrer" 67 + > 68 + exiv2.org 69 + </a> 70 + . 71 + </p> 72 + </div> 73 + </Dialog.Content> 74 + </Dialog> 75 + ); 76 + }
+33
src/components/ExifOverlayDialog.tsx
··· 1 + import { PhotoView } from "$lexicon/types/social/grain/photo/defs.ts"; 2 + import { Dialog } from "@bigmoves/bff/components"; 3 + import { getOrderedExifData } from "../lib/photo.ts"; 4 + 5 + export function ExifOverlayDialog({ 6 + photo, 7 + }: Readonly<{ 8 + photo: PhotoView; 9 + }>) { 10 + return ( 11 + <Dialog class="z-101"> 12 + <Dialog.Content 13 + class="bg-transparent text-zinc-50 relative" 14 + _={Dialog._closeOnClick} 15 + > 16 + <Dialog.Title>Camera Settings</Dialog.Title> 17 + <Dialog.X /> 18 + {photo.exif && ( 19 + <div className="mt-4 text-sm"> 20 + <dl className="grid grid-cols-2 gap-x-4 gap-y-2"> 21 + {getOrderedExifData(photo).map(({ displayKey, value }) => ( 22 + <> 23 + <dt className="font-medium text-right">{displayKey}:</dt> 24 + <dd className="text-left">{String(value)}</dd> 25 + </> 26 + ))} 27 + </dl> 28 + </div> 29 + )} 30 + </Dialog.Content> 31 + </Dialog> 32 + ); 33 + }
+23
src/components/GalleryInfo.tsx
··· 1 + import { Record as Gallery } from "$lexicon/types/social/grain/gallery.ts"; 2 + import { GalleryView } from "$lexicon/types/social/grain/gallery/defs.ts"; 3 + import { getGalleryCameras } from "../lib/gallery.ts"; 4 + import { ActorInfo } from "./ActorInfo.tsx"; 5 + import { CameraBadges } from "./CameraBadges.tsx"; 6 + 7 + export function GalleryInfo({ gallery }: Readonly<{ gallery: GalleryView }>) { 8 + const description = (gallery.record as Gallery).description; 9 + const cameras = getGalleryCameras(gallery); 10 + return ( 11 + <div 12 + class="flex flex-col space-y-2 mb-4 max-w-[500px]" 13 + id="gallery-info" 14 + > 15 + <h1 class="font-bold text-2xl"> 16 + {(gallery.record as Gallery).title} 17 + </h1> 18 + <ActorInfo profile={gallery.creator} /> 19 + {description ? <p>{description}</p> : null} 20 + <CameraBadges class="my-1" cameras={cameras} /> 21 + </div> 22 + ); 23 + }
+2 -10
src/components/GalleryPage.tsx
··· 1 1 import { Record as Favorite } from "$lexicon/types/social/grain/favorite.ts"; 2 - import { Record as Gallery } from "$lexicon/types/social/grain/gallery.ts"; 3 2 import { GalleryView } from "$lexicon/types/social/grain/gallery/defs.ts"; 4 3 import { isPhotoView } from "$lexicon/types/social/grain/photo/defs.ts"; 5 4 import { AtUri } from "@atproto/syntax"; 6 5 import { WithBffMeta } from "@bigmoves/bff"; 7 6 import { Button } from "@bigmoves/bff/components"; 8 7 import { ModerationDecsion } from "../lib/moderation.ts"; 9 - import { ActorInfo } from "./ActorInfo.tsx"; 10 8 import { FavoriteButton } from "./FavoriteButton.tsx"; 9 + import { GalleryInfo } from "./GalleryInfo.tsx"; 11 10 import { GalleryLayout } from "./GalleryLayout.tsx"; 12 11 import { ModerationWrapper } from "./ModerationWrapper.tsx"; 13 12 import { ShareGalleryButton } from "./ShareGalleryButton.tsx"; ··· 25 24 }>) { 26 25 const isCreator = currentUserDid === gallery.creator.did; 27 26 const isLoggedIn = !!currentUserDid; 28 - const description = (gallery.record as Gallery).description; 29 27 const galleryItems = gallery.items?.filter(isPhotoView) ?? []; 30 28 return ( 31 29 <div class="px-4" id="gallery-page"> 32 30 <div class="flex flex-col sm:flex-row sm:items-center sm:justify-between mt-4 mb-2"> 33 - <div class="flex flex-col space-y-2 mb-4 max-w-[500px]"> 34 - <h1 class="font-bold text-2xl"> 35 - {(gallery.record as Gallery).title} 36 - </h1> 37 - <ActorInfo profile={gallery.creator} /> 38 - {description ? <p>{description}</p> : null} 39 - </div> 31 + <GalleryInfo gallery={gallery} /> 40 32 {isLoggedIn && isCreator 41 33 ? ( 42 34 <div class="flex self-start gap-2 w-full sm:w-fit flex-col sm:flex-row sm:flex-wrap sm:justify-end">
+45 -3
src/components/PhotoDialog.tsx
··· 1 1 import { GalleryView } from "$lexicon/types/social/grain/gallery/defs.ts"; 2 2 import { PhotoView } from "$lexicon/types/social/grain/photo/defs.ts"; 3 - import { Dialog } from "https://jsr.io/@bigmoves/bff/0.3.0-beta.21/components/Dialog.tsx"; 3 + import { AtUri } from "@atproto/syntax"; 4 + import { cn, Dialog } from "@bigmoves/bff/components"; 4 5 import { photoDialogLink } from "../utils.ts"; 5 6 6 7 export function PhotoDialog({ ··· 38 39 ) 39 40 : null} 40 41 <div 41 - class="flex flex-col w-5xl h-[calc(100vh-100px)] sm:h-screen z-20" 42 + class="flex flex-col w-5xl h-[calc(100vh-100px)] sm:h-screen z-20 relative sm:static" 42 43 _={Dialog._closeOnClick} 43 44 > 44 45 <div class="flex flex-col p-4 z-20 flex-1 relative"> ··· 48 49 class="absolute inset-0 w-full h-full object-contain" 49 50 /> 50 51 </div> 52 + {image.exif 53 + ? ( 54 + <div class="hidden sm:block absolute bottom-2 right-2"> 55 + <ExifButton photo={image} /> 56 + </div> 57 + ) 58 + : null} 51 59 {image.alt 52 60 ? ( 53 - <div class="px-4 sm:px-0 py-4 bg-black text-white text-left"> 61 + <div class="px-4 sm:px-0 py-4 bg-black text-white text-left flex"> 54 62 {image.alt} 63 + {image.exif 64 + ? ( 65 + <div class="block sm:hidden self-end justify-end -m-2"> 66 + <ExifButton photo={image} /> 67 + </div> 68 + ) 69 + : null} 55 70 </div> 56 71 ) 57 72 : null} 73 + {!image.alt && image.exif 74 + ? ( 75 + <ExifButton 76 + photo={image} 77 + class="block sm:hidden absolute bottom-2 right-2 z-100" 78 + /> 79 + ) 80 + : null} 58 81 </div> 59 82 </Dialog> 60 83 ); 61 84 } 85 + 86 + function ExifButton( 87 + { photo, class: classProp }: Readonly<{ photo: PhotoView; class?: string }>, 88 + ) { 89 + return ( 90 + <button 91 + type="button" 92 + class={cn("text-zinc-50 p-2 cursor-pointer", classProp)} 93 + hx-get={`/dialogs/photo/${new AtUri(photo.uri).rkey}/exif-overlay`} 94 + hx-trigger="click" 95 + hx-target="#layout" 96 + hx-swap="afterbegin" 97 + _="on click halt" 98 + > 99 + <i class="fa fa-camera" /> 100 + <span class="sr-only">Show EXIF</span> 101 + </button> 102 + ); 103 + }
+16
src/components/PhotoExifButton.tsx
··· 1 + import { AtUri } from "@atproto/syntax"; 2 + 3 + export function PhotoExifButton({ photoUri }: Readonly<{ photoUri: string }>) { 4 + return ( 5 + <div 6 + class="bg-zinc-950 dark:bg-zinc-950 py-[1px] px-[3px] absolute bottom-2 left-2 cursor-pointer flex items-center justify-center text-xs text-white font-semibold z-10" 7 + hx-get={`/dialogs/photo/${new AtUri(photoUri).rkey}/exif`} 8 + hx-trigger="click" 9 + hx-target="#layout" 10 + hx-swap="afterbegin" 11 + _="on click halt" 12 + > 13 + <i class="fas fa-camera text-[10px] mr-1"></i> EXIF 14 + </div> 15 + ); 16 + }
+37
src/components/PhotoExifDialog.tsx
··· 1 + import { PhotoView } from "$lexicon/types/social/grain/photo/defs.ts"; 2 + import { Dialog } from "@bigmoves/bff/components"; 3 + import { getOrderedExifData } from "../lib/photo.ts"; 4 + 5 + export function PhotoExifDialog({ 6 + photo, 7 + }: Readonly<{ 8 + photo: PhotoView; 9 + }>) { 10 + return ( 11 + <Dialog id="photo-alt-dialog" class="z-100"> 12 + <Dialog.Content class="dark:bg-zinc-950 relative"> 13 + <Dialog.X class="fill-zinc-950 dark:fill-zinc-50" /> 14 + <Dialog.Title>Camera Settings</Dialog.Title> 15 + <div class="aspect-square relative"> 16 + <img 17 + src={photo.fullsize} 18 + alt={photo.alt} 19 + class="absolute inset-0 w-full h-full object-contain" 20 + /> 21 + </div> 22 + {photo.exif && ( 23 + <div className="mt-4 text-sm space-y-1"> 24 + {getOrderedExifData(photo).map(({ displayKey, value }) => ( 25 + <div key={displayKey} className="flex justify-between gap-4"> 26 + <dt className="font-medium">{displayKey}</dt> 27 + <dd className="text-right max-w-[60%] break-words"> 28 + {String(value)} 29 + </dd> 30 + </div> 31 + ))} 32 + </div> 33 + )} 34 + </Dialog.Content> 35 + </Dialog> 36 + ); 37 + }
+12 -10
src/components/PhotoPreview.tsx
··· 1 + import { PhotoView } from "$lexicon/types/social/grain/photo/defs.ts"; 2 + import { Un$Typed } from "$lexicon/util.ts"; 1 3 import { AtUri } from "@atproto/syntax"; 2 4 import { AltTextButton } from "./AltTextButton.tsx"; 5 + import { PhotoExifButton } from "./PhotoExifButton.tsx"; 3 6 4 7 export function PhotoPreview({ 5 - src, 6 - uri, 8 + photo, 7 9 }: Readonly<{ 8 - src: string; 9 - uri?: string; 10 + photo: Un$Typed<PhotoView>; 10 11 }>) { 11 - const rkey = uri ? new AtUri(uri).rkey : undefined; 12 + const rkey = new AtUri(photo.uri).rkey; 12 13 return ( 13 14 <div 14 15 class="relative aspect-square bg-zinc-200 dark:bg-zinc-900" 15 16 id={rkey} 16 17 > 17 - {uri ? <AltTextButton photoUri={uri} /> : null} 18 - {uri 18 + {photo.uri ? <AltTextButton photoUri={photo.uri} /> : null} 19 + {photo.exif ? <PhotoExifButton photoUri={photo.uri} /> : null} 20 + {photo.uri 19 21 ? ( 20 22 <button 21 23 type="button" 22 24 id={`delete-photo-${rkey}`} 23 - hx-delete={`/actions/photo/${new AtUri(uri).rkey}`} 25 + hx-delete={`/actions/photo/${rkey}`} 24 26 class="bg-zinc-950 z-10 absolute top-2 right-2 cursor-pointer size-4 flex items-center justify-center" 25 27 _="on htmx:afterOnLoad remove me.parentNode" 26 28 > ··· 29 31 ) 30 32 : null} 31 33 <img 32 - src={src} 34 + src={photo.thumb} 33 35 alt="" 34 - data-state={uri ? "complete" : "pending"} 36 + data-state={photo.uri ? "complete" : "pending"} 35 37 class="absolute inset-0 w-full h-full object-contain data-[state=pending]:opacity-50" 36 38 /> 37 39 </div>
+28 -16
src/components/ProfilePage.tsx
··· 7 7 import { AtUri } from "@atproto/syntax"; 8 8 import { LabelerPolicies } from "@bigmoves/bff"; 9 9 import { Button, cn } from "@bigmoves/bff/components"; 10 + import { getGalleryCameras } from "../lib/gallery.ts"; 10 11 import { 11 12 atprotoLabelValueDefinitions, 12 13 ModerationDecsion, ··· 21 22 } from "../utils.ts"; 22 23 import { ActorAvatar } from "./ActorAvatar.tsx"; 23 24 import { AvatarButton } from "./AvatarButton.tsx"; 25 + import { CameraBadges } from "./CameraBadges.tsx"; 24 26 import { FollowButton } from "./FollowButton.tsx"; 25 27 import { LabelDefinitionButton } from "./LabelDefinitionButton.tsx"; 26 28 import { LabelerAvatar } from "./LabelerAvatar.tsx"; ··· 57 59 }>) { 58 60 const isCreator = loggedInUserDid === profile.did; 59 61 const displayName = profile.displayName || profile.handle; 62 + const cameras = Array.from( 63 + new Set(galleries?.flatMap(getGalleryCameras) ?? []), 64 + ); 60 65 return ( 61 66 <div class="px-4 mb-4" id="profile-page"> 62 67 <div class="flex flex-col sm:flex-row sm:items-center sm:justify-between my-4"> ··· 67 72 <p class="text-2xl font-bold">{displayName}</p> 68 73 <p class="text-zinc-600 dark:text-zinc-500">@{profile.handle}</p> 69 74 {!isLabeler && ( 70 - <p class="space-x-1"> 71 - <a href={followersLink(profile.handle)}> 72 - <span class="font-semibold" id="followers-count"> 73 - {followersCount ?? 0} 74 - </span>{" "} 75 - <span class="text-zinc-600 dark:text-zinc-500">followers</span> 76 - </a>{" "} 77 - <a href={followingLink(profile.handle)}> 78 - <span class="font-semibold" id="following-count"> 79 - {followingCount ?? 0} 80 - </span>{" "} 81 - <span class="text-zinc-600 dark:text-zinc-500">following</span> 82 - </a>{" "} 83 - <span class="font-semibold">{galleries?.length ?? 0}</span> 84 - <span class="text-zinc-600 dark:text-zinc-500">galleries</span> 85 - </p> 75 + <> 76 + <p class="space-x-1"> 77 + <a href={followersLink(profile.handle)}> 78 + <span class="font-semibold" id="followers-count"> 79 + {followersCount ?? 0} 80 + </span>{" "} 81 + <span class="text-zinc-600 dark:text-zinc-500"> 82 + followers 83 + </span> 84 + </a>{" "} 85 + <a href={followingLink(profile.handle)}> 86 + <span class="font-semibold" id="following-count"> 87 + {followingCount ?? 0} 88 + </span>{" "} 89 + <span class="text-zinc-600 dark:text-zinc-500"> 90 + following 91 + </span> 92 + </a>{" "} 93 + <span class="font-semibold">{galleries?.length ?? 0}</span> 94 + <span class="text-zinc-600 dark:text-zinc-500">galleries</span> 95 + </p> 96 + <CameraBadges cameras={cameras} class="mt-2" /> 97 + </> 86 98 )} 87 99 {profile.description 88 100 ? <p class="mt-2 sm:max-w-[500px]">{profile.description}</p>
+48 -33
src/components/UploadPage.tsx
··· 1 1 import { PhotoView } from "$lexicon/types/social/grain/photo/defs.ts"; 2 2 import { Button } from "@bigmoves/bff/components"; 3 3 import { profileLink } from "../utils.ts"; 4 + import { Breadcrumb } from "./Breadcrumb.tsx"; 4 5 import { PhotoPreview } from "./PhotoPreview.tsx"; 5 6 6 7 export function UploadPage({ ··· 10 11 }: Readonly<{ handle: string; photos: PhotoView[]; returnTo?: string }>) { 11 12 return ( 12 13 <div class="flex flex-col px-4 pt-4 mb-4 space-y-4"> 13 - <div class="flex"> 14 - <div class="flex-1"> 15 - {returnTo 16 - ? ( 17 - <a href={returnTo} class="hover:underline"> 18 - <i class="fa-solid fa-arrow-left mr-2" /> 19 - Back to gallery 20 - </a> 21 - ) 22 - : ( 23 - <a href={profileLink(handle)} class="hover:underline"> 24 - <i class="fa-solid fa-arrow-left mr-2" /> 25 - Back to profile 26 - </a> 27 - )} 28 - </div> 29 - </div> 30 - <Button variant="primary" class="mb-4 w-full sm:w-fit" asChild> 31 - <label> 32 - <i class="fa fa-plus"></i> Add photos 33 - <input 34 - class="hidden" 35 - type="file" 36 - multiple 37 - accept="image/*" 38 - hx-encoding="multipart/form-data" 39 - _="on change call Grain.uploadPage.uploadPhotos(me)" 40 - /> 41 - </label> 42 - </Button> 14 + <Breadcrumb 15 + items={[ 16 + returnTo 17 + ? { label: "Gallery", href: returnTo } 18 + : { label: "Profile", href: profileLink(handle) }, 19 + { label: "Upload" }, 20 + ]} 21 + /> 43 22 <div> 44 23 Upload 10 photos at a time. Click{" "} 45 24 <button ··· 53 32 </button>{" "} 54 33 to create a gallery or add to existing galleries once you're done! 55 34 </div> 35 + <form 36 + hx-encoding="multipart/form-data" 37 + _="on change from #file-input call Grain.uploadPage.uploadPhotos(me)" 38 + > 39 + <Button variant="primary" class="mb-4 w-full sm:w-fit" asChild> 40 + <label> 41 + <i class="fa fa-plus"></i> Add photos 42 + <input 43 + id="file-input" 44 + class="hidden" 45 + type="file" 46 + name="files" 47 + multiple 48 + accept="image/*" 49 + /> 50 + </label> 51 + </Button> 52 + 53 + <label class="block gap-2"> 54 + <input 55 + id="parse-exif" 56 + type="checkbox" 57 + name="parseExif" 58 + class="mr-2 accent-sky-600" 59 + checked 60 + /> 61 + Include image metadata (EXIF) 62 + <button 63 + type="button" 64 + hx-get="/dialogs/exif-info" 65 + hx-target="#layout" 66 + hx-swap="afterbegin" 67 + class="cursor-pointer" 68 + > 69 + <i class="fa fa-info-circle ml-1" /> 70 + </button> 71 + </label> 72 + </form> 56 73 <div 57 74 id="image-preview" 58 75 class="w-full h-full grid grid-cols-2 sm:grid-cols-5 gap-2" 59 76 > 60 - {photos.map((photo) => ( 61 - <PhotoPreview key={photo.cid} src={photo.thumb} uri={photo.uri} /> 62 - ))} 77 + {photos.map((photo) => <PhotoPreview key={photo.cid} photo={photo} />)} 63 78 </div> 64 79 </div> 65 80 );
+8 -10
src/legal.tsx
··· 169 169 </p> 170 170 </Section> 171 171 172 - { 173 - /* Coming soon */ 174 - /* <Section title="EXIF Metadata"> 172 + <Section title="EXIF Metadata"> 175 173 <p> 176 - We optionally collect and display EXIF metadata (excluding location) 177 - from your photos. At upload time, you can choose whether to allow this 178 - metadata to be collected. The metadata is stored according to standard 179 - AT Protocol storage mechanisms and is not retained outside the 180 - protocol or used for other purposes. 174 + We optionally collect and display EXIF metadata from your photos. At 175 + upload time, you can choose whether to allow this metadata to be 176 + collected. The metadata is stored according to standard AT Protocol 177 + storage mechanisms and is not retained outside the protocol or used 178 + for other purposes. We do not collect GPS or location data from your 179 + photos. 181 180 </p> 182 181 <p> 183 182 You can learn more about the types of metadata commonly embedded in ··· 192 191 </a> 193 192 . 194 193 </p> 195 - </Section> */ 196 - } 194 + </Section> 197 195 198 196 <Section title="Analytics"> 199 197 <p>
+15 -2
src/lib/actor.ts
··· 6 6 import { Record as Favorite } from "$lexicon/types/social/grain/favorite.ts"; 7 7 import { Record as Gallery } from "$lexicon/types/social/grain/gallery.ts"; 8 8 import { Record as Photo } from "$lexicon/types/social/grain/photo.ts"; 9 + import { Record as PhotoExif } from "$lexicon/types/social/grain/photo/exif.ts"; 9 10 import { Un$Typed } from "$lexicon/util.ts"; 10 11 import { BffContext, WithBffMeta } from "@bigmoves/bff"; 11 12 import { galleryToView, getGalleryItemsAndPhotos } from "./gallery.ts"; ··· 54 55 orderBy: [{ field: "createdAt", direction: "desc" }], 55 56 }, 56 57 ); 57 - 58 - return photos.items.map((photo) => photoToView(photo.did, photo)); 58 + const exif = ctx.indexService.getRecords<WithBffMeta<PhotoExif>>( 59 + "social.grain.photo.exif", 60 + { 61 + where: [{ field: "photo", in: photos.items.map((p) => p.uri) }], 62 + }, 63 + ); 64 + const exifMap = new Map<string, WithBffMeta<PhotoExif>>(); 65 + exif.items.forEach((e) => { 66 + exifMap.set(e.photo, e); 67 + }); 68 + return photos.items.map((photo) => { 69 + const exifData = exifMap.get(photo.uri); 70 + return photoToView(photo.did, photo, exifData); 71 + }); 59 72 } 60 73 61 74 export function getActorGalleries(handleOrDid: string, ctx: BffContext) {
+39 -7
src/lib/gallery.ts
··· 12 12 isPhotoView, 13 13 PhotoView, 14 14 } from "$lexicon/types/social/grain/photo/defs.ts"; 15 + import { Record as PhotoExif } from "$lexicon/types/social/grain/photo/exif.ts"; 15 16 import { Un$Typed } from "$lexicon/util.ts"; 16 17 import { AtUri } from "@atproto/syntax"; 17 18 import { BffContext, WithBffMeta } from "@bigmoves/bff"; 18 19 import { getActorProfile } from "./actor.ts"; 19 20 import { photoToView } from "./photo.ts"; 20 21 22 + type PhotoWithExif = WithBffMeta<Photo> & { 23 + exif?: WithBffMeta<PhotoExif>; 24 + }; 25 + 21 26 export function getGalleryItemsAndPhotos( 22 27 ctx: BffContext, 23 28 galleries: WithBffMeta<Gallery>[], 24 - ): Map<string, WithBffMeta<Photo>[]> { 29 + ): Map<string, PhotoWithExif[]> { 25 30 const galleryUris = galleries.map( 26 31 (gallery) => 27 32 `at://${gallery.did}/social.grain.gallery/${new AtUri(gallery.uri).rkey}`, ··· 46 51 }, 47 52 ); 48 53 49 - const photosMap = new Map<string, WithBffMeta<Photo>>(); 54 + const { items: photosExif } = ctx.indexService.getRecords< 55 + WithBffMeta<PhotoExif> 56 + >( 57 + "social.grain.photo.exif", 58 + { 59 + where: [{ field: "photo", in: photoUris }], 60 + }, 61 + ); 62 + 63 + const photosMap = new Map<string, PhotoWithExif>(); 64 + const exifMap = new Map<string, WithBffMeta<PhotoExif>>(); 65 + for (const exif of photosExif) { 66 + exifMap.set(exif.photo, exif); 67 + } 50 68 for (const photo of photos) { 51 - photosMap.set(photo.uri, photo); 69 + const exif = exifMap.get(photo.uri); 70 + photosMap.set(photo.uri, exif ? { ...photo, exif } : photo); 52 71 } 53 72 54 - const galleryPhotosMap = new Map<string, WithBffMeta<Photo>[]>(); 73 + const galleryPhotosMap = new Map<string, PhotoWithExif[]>(); 55 74 for (const item of galleryItems) { 56 75 const galleryUri = item.gallery; 57 76 const photo = photosMap.get(item.item); ··· 135 154 export function galleryToView( 136 155 record: WithBffMeta<Gallery>, 137 156 creator: Un$Typed<ProfileView>, 138 - items: Photo[], 157 + items: PhotoWithExif[], 139 158 labels: Label[] = [], 140 159 ): Un$Typed<GalleryView> { 141 160 return { ··· 154 173 function itemToView( 155 174 did: string, 156 175 item: 157 - | WithBffMeta<Photo> 176 + | PhotoWithExif 158 177 | { 159 178 $type: string; 160 179 }, 161 180 ): Un$Typed<PhotoView> | undefined { 162 181 if (isPhoto(item)) { 163 - return photoToView(did, item); 182 + return photoToView(did, item, item.exif); 164 183 } 165 184 return undefined; 166 185 } 186 + 187 + export function getGalleryCameras( 188 + gallery: GalleryView, 189 + ): string[] { 190 + const photos = gallery.items?.filter(isPhotoView) ?? []; 191 + const cameras = new Set<string>(); 192 + for (const photo of photos) { 193 + if (photo.exif?.make) { 194 + cameras.add(`${photo.exif.make} ${photo.exif.model}`.trim()); 195 + } 196 + } 197 + return Array.from(cameras); 198 + }
+163 -2
src/lib/photo.ts
··· 1 1 import { Record as Photo } from "$lexicon/types/social/grain/photo.ts"; 2 - import { PhotoView } from "$lexicon/types/social/grain/photo/defs.ts"; 2 + import { ExifView, PhotoView } from "$lexicon/types/social/grain/photo/defs.ts"; 3 + import { Record as PhotoExif } from "$lexicon/types/social/grain/photo/exif.ts"; 3 4 import { $Typed } from "$lexicon/util.ts"; 4 - import { WithBffMeta } from "@bigmoves/bff"; 5 + import { BffContext, WithBffMeta } from "@bigmoves/bff"; 6 + import { format, parseISO } from "date-fns"; 5 7 import { PUBLIC_URL, USE_CDN } from "../env.ts"; 6 8 9 + export function getPhoto( 10 + uri: string, 11 + ctx: BffContext, 12 + ): $Typed<PhotoView> | null { 13 + const photo = ctx.indexService.getRecord<WithBffMeta<Photo>>(uri); 14 + if (!photo) return null; 15 + const { items: exifItems } = ctx.indexService.getRecords< 16 + WithBffMeta<PhotoExif> 17 + >( 18 + "social.grain.photo.exif", 19 + { 20 + where: [{ field: "photo", equals: uri }], 21 + }, 22 + ); 23 + return photoToView( 24 + photo.did, 25 + photo, 26 + exifItems.length > 0 ? exifItems[0] : undefined, 27 + ); 28 + } 29 + 7 30 export function photoThumb(did: string, cid: string) { 8 31 return photoUrl(did, cid, "thumbnail"); 9 32 } ··· 11 34 export function photoToView( 12 35 did: string, 13 36 photo: WithBffMeta<Photo>, 37 + exif?: WithBffMeta<PhotoExif>, 14 38 ): $Typed<PhotoView> { 15 39 return { 16 40 $type: "social.grain.photo.defs#photoView", ··· 20 44 fullsize: photoUrl(did, photo.photo.ref.toString(), "fullsize"), 21 45 alt: photo.alt, 22 46 aspectRatio: photo.aspectRatio, 47 + exif: exif ? exifToView(exif) : undefined, 23 48 }; 24 49 } 25 50 ··· 33 58 } 34 59 return `https://cdn.bsky.app/img/feed_${type}/plain/${did}/${cid}@jpeg`; 35 60 } 61 + 62 + export function exifToView( 63 + exif: WithBffMeta<PhotoExif>, 64 + ): $Typed<ExifView> { 65 + const deserializedExif = deserializeExif(exif); 66 + return { 67 + ...deserializedExif, 68 + make: deserializedExif.make ? formatMake(deserializedExif.make) : undefined, 69 + fNumber: deserializedExif.fNumber 70 + ? formatAperture(deserializedExif.fNumber) 71 + : undefined, 72 + dateTimeOriginal: deserializedExif.dateTimeOriginal 73 + ? format( 74 + parseISO(deserializedExif.dateTimeOriginal), 75 + "MMM d, yyyy, h:mm a", 76 + ) 77 + : undefined, 78 + focalLengthIn35mmFormat: deserializedExif.focalLengthIn35mmFormat 79 + ? `${deserializedExif.focalLengthIn35mmFormat}mm` 80 + : undefined, 81 + exposureTime: deserializedExif.exposureTime !== undefined 82 + ? formatExposureTime(deserializedExif.exposureTime) 83 + : undefined, 84 + $type: "social.grain.photo.defs#exifView", 85 + }; 86 + } 87 + 88 + function formatMake(make: string) { 89 + return make 90 + .toLowerCase() 91 + .split(" ") 92 + .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) 93 + .join(" "); 94 + } 95 + 96 + function formatAperture(fNumber: number): string { 97 + return `ƒ/${Number.isInteger(fNumber) ? fNumber : fNumber.toFixed(1)}`; 98 + } 99 + 100 + function formatExposureTime(seconds: number): string { 101 + if (seconds >= 1) { 102 + return `${seconds}s`; 103 + } 104 + 105 + const denominator = Math.round(1 / seconds); 106 + return `1/${denominator}`; 107 + } 108 + 109 + const SCALE_FACTOR = 1000000; 110 + 111 + export function deserializeExif( 112 + exif: WithBffMeta<PhotoExif>, 113 + scale: number = SCALE_FACTOR, 114 + ): WithBffMeta<PhotoExif> { 115 + const deserialized: Partial<WithBffMeta<PhotoExif>> = { 116 + $type: exif.$type, 117 + photo: exif.photo, 118 + createdAt: exif.createdAt, 119 + }; 120 + 121 + for (const [key, value] of Object.entries(exif)) { 122 + if (typeof value === "number") { 123 + deserialized[key] = value / scale; 124 + } else if (Array.isArray(value)) { 125 + deserialized[key] = value.map((v) => 126 + typeof v === "number" ? v / scale : v 127 + ); 128 + } else { 129 + deserialized[key] = value; 130 + } 131 + } 132 + 133 + deserialized.indexedAt = exif.indexedAt; 134 + deserialized.cid = exif.cid; 135 + deserialized.did = exif.did; 136 + deserialized.uri = exif.uri; 137 + 138 + return deserialized as WithBffMeta<PhotoExif>; 139 + } 140 + 141 + const exifDisplayNames: Record<string, string> = { 142 + Make: "Make", 143 + Model: "Model", 144 + LensMake: "Lens Make", 145 + LensModel: "Lens Model", 146 + FNumber: "Aperture", 147 + FocalLengthIn35mmFormat: "Focal Length", 148 + ExposureTime: "Exposure Time", 149 + ISO: "ISO", 150 + Flash: "Flash", 151 + DateTimeOriginal: "Date Taken", 152 + }; 153 + 154 + const tagOrder = [ 155 + "Make", 156 + "Model", 157 + "LensMake", 158 + "LensModel", 159 + "FNumber", 160 + "FocalLengthIn35mmFormat", 161 + "ExposureTime", 162 + "ISO", 163 + "Flash", 164 + "DateTimeOriginal", 165 + ]; 166 + 167 + export function getOrderedExifData(photo: PhotoView) { 168 + if (!photo.exif) return []; 169 + const entries = Object.entries(photo.exif) 170 + .filter(([key]) => 171 + tagOrder.some((tag) => tag.toLowerCase() === key.toLowerCase()) 172 + ) 173 + .map(([key, value]) => { 174 + const tagKey = tagOrder.find( 175 + (tag) => tag.toLowerCase() === key.toLowerCase(), 176 + ); 177 + const displayKey = tagKey && exifDisplayNames[tagKey] 178 + ? exifDisplayNames[tagKey] 179 + : key; 180 + return { key, displayKey, value }; 181 + }); 182 + 183 + // Sort according to tagOrder, unknown tags go last in original order 184 + return entries.sort((a, b) => { 185 + const aIdx = tagOrder.findIndex( 186 + (tag) => tag.toLowerCase() === a.key.toLowerCase(), 187 + ); 188 + const bIdx = tagOrder.findIndex( 189 + (tag) => tag.toLowerCase() === b.key.toLowerCase(), 190 + ); 191 + if (aIdx === -1 && bIdx === -1) return 0; 192 + if (aIdx === -1) return 1; 193 + if (bIdx === -1) return -1; 194 + return aIdx - bIdx; 195 + }); 196 + }
+15 -2
src/main.tsx
··· 29 29 appLabelers: ["did:plc:nd45zozo34cr4pvxqu4rtr7e"], 30 30 appLabelerCollection: "social.grain.labeler.service", 31 31 collections: [ 32 + "social.grain.actor.profile", 32 33 "social.grain.gallery", 33 - "social.grain.actor.profile", 34 + "social.grain.gallery.item", 34 35 "social.grain.photo", 36 + "social.grain.photo.exif", 35 37 "social.grain.favorite", 36 - "social.grain.gallery.item", 37 38 "social.grain.graph.follow", 38 39 ], 39 40 externalCollections: [ ··· 83 84 route("/dialogs/avatar/:handle", dialogHandlers.avatar), 84 85 route("/dialogs/image", dialogHandlers.image), 85 86 route("/dialogs/photo/:rkey/alt", dialogHandlers.photoAlt), 87 + route( 88 + "/dialogs/photo/:rkey/exif", 89 + dialogHandlers.photoExif, 90 + ), 91 + route( 92 + "/dialogs/photo/:rkey/exif-overlay", 93 + dialogHandlers.photoExifOverlay, 94 + ), 95 + route( 96 + "/dialogs/exif-info", 97 + dialogHandlers.exifInfo, 98 + ), 86 99 route( 87 100 "/dialogs/photo-select/:galleryRkey", 88 101 dialogHandlers.galleryPhotoSelect,
+105 -16
src/routes/actions.tsx
··· 5 5 import { Record as GalleryItem } from "$lexicon/types/social/grain/gallery/item.ts"; 6 6 import { Record as Photo } from "$lexicon/types/social/grain/photo.ts"; 7 7 import { isPhotoView } from "$lexicon/types/social/grain/photo/defs.ts"; 8 + import { Record as PhotoExif } from "$lexicon/types/social/grain/photo/exif.ts"; 8 9 import { AtUri } from "@atproto/syntax"; 9 10 import { BffContext, RouteHandler, WithBffMeta } from "@bigmoves/bff"; 10 11 import { FavoriteButton } from "../components/FavoriteButton.tsx"; 11 12 import { FollowButton } from "../components/FollowButton.tsx"; 13 + import { GalleryInfo } from "../components/GalleryInfo.tsx"; 12 14 import { GalleryLayout } from "../components/GalleryLayout.tsx"; 13 15 import { PhotoPreview } from "../components/PhotoPreview.tsx"; 14 16 import { PhotoSelectButton } from "../components/PhotoSelectButton.tsx"; 15 17 import { getFollowers } from "../lib/follow.ts"; 16 18 import { deleteGallery, getGallery, getGalleryFavs } from "../lib/gallery.ts"; 17 - import { photoThumb, photoToView } from "../lib/photo.ts"; 19 + import { getPhoto, photoToView } from "../lib/photo.ts"; 18 20 import type { State } from "../state.ts"; 19 21 import { galleryLink } from "../utils.ts"; 20 22 ··· 143 145 const galleryUri = `at://${did}/social.grain.gallery/${galleryRkey}`; 144 146 const photoUri = `at://${did}/social.grain.photo/${photoRkey}`; 145 147 const gallery = getGallery(did, galleryRkey, ctx); 146 - const photo = ctx.indexService.getRecord<WithBffMeta<Photo>>(photoUri); 148 + const photo = getPhoto(photoUri, ctx); 147 149 if (!gallery || !photo) return ctx.next(); 148 150 if ( 149 151 gallery.items ··· 160 162 }); 161 163 gallery.items = [ 162 164 ...(gallery.items ?? []), 163 - photoToView(photo.did, photo), 165 + photo, 164 166 ]; 165 167 return ctx.html( 166 168 <> 167 169 <div hx-swap-oob="beforeend:#gallery-container"> 168 170 <GalleryLayout.Item 169 171 key={photo.cid} 170 - photo={photoToView(photo.did, photo)} 172 + photo={photo} 171 173 gallery={gallery} 172 174 /> 173 175 </div> 176 + <div hx-swap-oob="outerHTML:#gallery-info"> 177 + <GalleryInfo gallery={gallery} /> 178 + </div> 174 179 <PhotoSelectButton 175 180 galleryUri={galleryUri} 176 181 itemUris={gallery.items?.filter(isPhotoView).map((item) => item.uri) ?? 177 182 []} 178 - photo={photoToView(photo.did, photo)} 183 + photo={photo} 179 184 /> 180 185 </>, 181 186 ); ··· 216 221 const gallery = getGallery(did, galleryRkey, ctx); 217 222 if (!gallery) return ctx.next(); 218 223 return ctx.html( 219 - <PhotoSelectButton 220 - galleryUri={galleryUri} 221 - itemUris={gallery.items?.filter(isPhotoView).map((item) => item.uri) ?? 222 - []} 223 - photo={photoToView(photo.did, photo)} 224 - />, 224 + <> 225 + <div hx-swap-oob="outerHTML:#gallery-info"> 226 + <GalleryInfo gallery={gallery} /> 227 + </div> 228 + <PhotoSelectButton 229 + galleryUri={galleryUri} 230 + itemUris={gallery.items?.filter(isPhotoView).map((item) => item.uri) ?? 231 + []} 232 + photo={photoToView(photo.did, photo)} 233 + /> 234 + </>, 225 235 ); 226 236 }; 227 237 ··· 252 262 ctx: BffContext<State>, 253 263 ) => { 254 264 const { did } = ctx.requireAuth(); 265 + const deleteUris: string[] = []; 255 266 await ctx.deleteRecord( 256 267 `at://${did}/social.grain.photo/${params.rkey}`, 257 268 ); 258 - const { items } = ctx.indexService.getRecords<WithBffMeta<GalleryItem>>( 269 + const { items: galleryItems } = ctx.indexService.getRecords< 270 + WithBffMeta<GalleryItem> 271 + >( 259 272 "social.grain.gallery.item", 260 273 { 261 274 where: [ ··· 266 279 ], 267 280 }, 268 281 ); 269 - for (const item of items) { 270 - await ctx.deleteRecord(item.uri); 282 + for (const item of galleryItems) { 283 + deleteUris.push(item.uri); 284 + } 285 + const { items: favorites } = ctx.indexService.getRecords< 286 + WithBffMeta<Favorite> 287 + >( 288 + "social.grain.favorite", 289 + { 290 + where: [ 291 + { 292 + field: "subject", 293 + equals: `at://${did}/social.grain.photo/${params.rkey}`, 294 + }, 295 + ], 296 + }, 297 + ); 298 + for (const favorite of favorites) { 299 + deleteUris.push(favorite.uri); 300 + } 301 + const { items: exifItems } = ctx.indexService.getRecords< 302 + WithBffMeta<PhotoExif> 303 + >( 304 + "social.grain.photo.exif", 305 + { 306 + where: [ 307 + { 308 + field: "photo", 309 + equals: `at://${did}/social.grain.photo/${params.rkey}`, 310 + }, 311 + ], 312 + }, 313 + ); 314 + for (const item of exifItems) { 315 + deleteUris.push(item.uri); 316 + } 317 + for (const uri of deleteUris) { 318 + await ctx.deleteRecord(uri); 271 319 } 272 320 return new Response(null, { status: 200 }); 273 321 }; ··· 451 499 ctx: BffContext<State>, 452 500 ) => { 453 501 const { did } = ctx.requireAuth(); 502 + 454 503 ctx.rateLimit({ 455 504 namespace: "upload", 456 505 points: 1, 457 506 limit: 50, 458 507 window: 24 * 60 * 60 * 1000, // 24 hours 459 508 }); 509 + 460 510 if (!ctx.agent) { 461 511 return new Response("Agent has not been initialized", { status: 401 }); 462 512 } 513 + 463 514 try { 464 515 const formData = await req.formData(); 465 516 const file = formData.get("file") as File; 466 517 const width = Number(formData.get("width")) || undefined; 467 518 const height = Number(formData.get("height")) || undefined; 519 + const exifJsonString = formData.get("exif") as string; 520 + let exif = undefined; 521 + 522 + if (exifJsonString) { 523 + try { 524 + exif = JSON.parse(exifJsonString); 525 + } catch (e) { 526 + console.error("Failed to parse EXIF data:", e); 527 + } 528 + } 529 + 468 530 if (!file) { 469 531 return new Response("No file", { status: 400 }); 470 532 } 533 + 471 534 // Check if file size exceeds 20MB limit 472 535 const maxSizeBytes = 20 * 1000 * 1000; // 20MB in bytes 473 536 if (file.size > maxSizeBytes) { ··· 475 538 status: 400, 476 539 }); 477 540 } 541 + 478 542 const blobResponse = await ctx.agent.uploadBlob(file); 543 + 479 544 const photoUri = await ctx.createRecord<Photo>("social.grain.photo", { 480 545 photo: blobResponse.data.blob, 481 546 aspectRatio: width && height ··· 487 552 alt: "", 488 553 createdAt: new Date().toISOString(), 489 554 }); 555 + 556 + let exifUri: string | undefined = undefined; 557 + if (exif) { 558 + exifUri = await ctx.createRecord<PhotoExif>( 559 + "social.grain.photo.exif", 560 + { 561 + photo: photoUri, 562 + createdAt: new Date().toISOString(), 563 + ...exif, 564 + }, 565 + ); 566 + } 567 + 568 + const photo = ctx.indexService.getRecord<WithBffMeta<Photo>>(photoUri); 569 + if (!photo) { 570 + return new Response("Photo not found after creation", { status: 404 }); 571 + } 572 + 573 + let exifRecord: WithBffMeta<PhotoExif> | undefined = undefined; 574 + if (exifUri) { 575 + exifRecord = ctx.indexService.getRecord<WithBffMeta<PhotoExif>>( 576 + exifUri, 577 + ); 578 + } 579 + 490 580 return ctx.html( 491 581 <PhotoPreview 492 - src={photoThumb(did, blobResponse.data.blob.ref.toString())} 493 - uri={photoUri} 582 + photo={photoToView(did, photo, exifRecord)} 494 583 />, 495 584 ); 496 585 } catch (e) {
+44 -1
src/routes/dialogs.tsx
··· 7 7 import { wrap } from "popmotion"; 8 8 import { AvatarDialog } from "../components/AvatarDialog.tsx"; 9 9 import { CreateAccountDialog } from "../components/CreateAccountDialog.tsx"; 10 + import { ExifInfoDialog } from "../components/ExifInfoDialog.tsx"; 11 + import { ExifOverlayDialog } from "../components/ExifOverlayDialog.tsx"; 10 12 import { GalleryCreateEditDialog } from "../components/GalleryCreateEditDialog.tsx"; 11 13 import { GallerySortDialog } from "../components/GallerySortDialog.tsx"; 12 14 import { LabelDefinitionDialog } from "../components/LabelDefinitionDialog.tsx"; 13 15 import { PhotoAltDialog } from "../components/PhotoAltDialog.tsx"; 14 16 import { PhotoDialog } from "../components/PhotoDialog.tsx"; 17 + import { PhotoExifDialog } from "../components/PhotoExifDialog.tsx"; 15 18 import { PhotoSelectDialog } from "../components/PhotoSelectDialog.tsx"; 16 19 import { ProfileDialog } from "../components/ProfileDialog.tsx"; 17 20 import { getActorPhotos, getActorProfile } from "../lib/actor.ts"; 18 21 import { getGallery, getGalleryItemsAndPhotos } from "../lib/gallery.ts"; 19 22 import { atprotoLabelValueDefinitions } from "../lib/moderation.ts"; 20 - import { photoToView } from "../lib/photo.ts"; 23 + import { getPhoto, photoToView } from "../lib/photo.ts"; 21 24 import type { State } from "../state.ts"; 22 25 23 26 export const createGallery: RouteHandler = ( ··· 133 136 ); 134 137 }; 135 138 139 + export const photoExif: RouteHandler = ( 140 + _req, 141 + params, 142 + ctx: BffContext<State>, 143 + ) => { 144 + const { did } = ctx.requireAuth(); 145 + const photoRkey = params.rkey; 146 + const photoUri = `at://${did}/social.grain.photo/${photoRkey}`; 147 + const photo = getPhoto(photoUri, ctx); 148 + if (!photo) return ctx.next(); 149 + return ctx.html( 150 + <PhotoExifDialog photo={photo} />, 151 + ); 152 + }; 153 + 154 + export const photoExifOverlay: RouteHandler = ( 155 + _req, 156 + params, 157 + ctx: BffContext<State>, 158 + ) => { 159 + const { did } = ctx.requireAuth(); 160 + const photoRkey = params.rkey; 161 + const photoUri = `at://${did}/social.grain.photo/${photoRkey}`; 162 + const photo = getPhoto(photoUri, ctx); 163 + if (!photo) return ctx.next(); 164 + return ctx.html( 165 + <ExifOverlayDialog photo={photo} />, 166 + ); 167 + }; 168 + 136 169 export const galleryPhotoSelect: RouteHandler = ( 137 170 _req, 138 171 params, ··· 192 225 />, 193 226 ); 194 227 }; 228 + 229 + export const exifInfo: RouteHandler = ( 230 + _req, 231 + _params, 232 + ctx: BffContext<State>, 233 + ) => { 234 + return ctx.html( 235 + <ExifInfoDialog />, 236 + ); 237 + };
-4
src/static/gallery_layout.ts
··· 61 61 } 62 62 63 63 public setLayoutMode(mode: LayoutMode) { 64 - console.log( 65 - `Setting layout mode to: ${mode} (current: ${this.layoutMode})`, 66 - ); 67 64 this.layoutMode = mode; 68 65 this.computeLayout(); 69 66 } ··· 235 232 const container = document.querySelector( 236 233 options.containerSelector ?? "#gallery-container", 237 234 ); 238 - console.log("Initializing GalleryLayout for container:", container); 239 235 if (container) { 240 236 this.computeLayout(); 241 237 this.observe();
+12
src/static/tags.ts
··· 1 + export const tags = [ 2 + "DateTimeOriginal", 3 + "ExposureTime", 4 + "FNumber", 5 + "Flash", 6 + "FocalLengthIn35mmFormat", 7 + "ISO", 8 + "LensMake", 9 + "LensModel", 10 + "Make", 11 + "Model", 12 + ];
+119 -43
src/static/upload_page.ts
··· 1 + import exifr from "exifr"; 1 2 import htmx from "htmx.org"; 2 3 import hyperscript from "hyperscript.org"; 3 4 import { dataURLToBlob, doResize, readFileAsDataURL } from "./photo_manip.ts"; 5 + import { tags as supportedTags } from "./tags.ts"; 4 6 5 7 export class UploadPage { 6 - public async uploadPhotos(inputElement: HTMLInputElement): Promise<void> { 7 - const fileList = Array.from(inputElement.files ?? []); 8 + public async uploadPhotos(formElement: HTMLFormElement): Promise<void> { 9 + const formData = new FormData(formElement); 10 + const fileList = formData.getAll("files") as File[] ?? []; 11 + const parseExif = formData.get("parseExif") === "on"; 8 12 9 13 if (fileList.length > 10) { 10 14 alert("You can only upload 10 photos at a time"); ··· 12 16 } 13 17 14 18 const uploadPromises = fileList.map(async (file) => { 19 + let fileDataUri: string | ArrayBuffer | null; 20 + let tags: Exif | undefined = undefined; 21 + let resized; 22 + 15 23 try { 16 - const dataUrl = await readFileAsDataURL(file); 24 + fileDataUri = await readFileAsDataURL(file); 25 + if (fileDataUri === null || typeof fileDataUri !== "string") { 26 + console.error("File data URL is not a string:", fileDataUri); 27 + alert("Error reading file."); 28 + return; 29 + } 30 + } catch (err) { 31 + console.error("Error reading file as Data URL:", err); 32 + alert("Error reading file."); 33 + return; 34 + } 17 35 18 - if (!dataUrl || typeof dataUrl !== "string") { 19 - console.error("Failed to read file as data URL"); 20 - return; 36 + if (parseExif) { 37 + try { 38 + const rawTags = await exifr.parse(file, { pick: supportedTags }); 39 + console.log("EXIF tags:", await exifr.parse(file)); 40 + tags = normalizeExif(rawTags); 41 + } catch (err) { 42 + console.error("Error reading EXIF data:", err); 21 43 } 44 + } 22 45 23 - const resized = await doResize(dataUrl, { 46 + try { 47 + resized = await doResize(fileDataUri, { 24 48 width: 2000, 25 49 height: 2000, 26 50 maxSize: 1000 * 1000, // 1MB 27 51 mode: "contain", 28 52 }); 53 + } catch (err) { 54 + console.error("Error resizing image:", err); 55 + alert("Error resizing image."); 56 + return; 57 + } 29 58 30 - const blob = dataURLToBlob(resized.path); 59 + const blob = dataURLToBlob(resized.path); 31 60 32 - const fd = new FormData(); 33 - fd.append("file", blob, (file as File).name); 34 - fd.append("width", String(resized.width)); 35 - fd.append("height", String(resized.height)); 61 + const fd = new FormData(); 62 + fd.append("file", blob, (file as File).name); 63 + fd.append("width", String(resized.width)); 64 + fd.append("height", String(resized.height)); 36 65 37 - const response = await fetch("/actions/photo", { 38 - method: "POST", 39 - body: fd, 40 - }); 66 + if (tags) { 67 + fd.append("exif", JSON.stringify(tags)); 68 + } 41 69 42 - if (!response.ok) { 43 - alert(await response.text()); 44 - return; 45 - } 70 + const response = await fetch("/actions/photo", { 71 + method: "POST", 72 + body: fd, 73 + }); 46 74 47 - const html = await response.text(); 48 - const temp = document.createElement("div"); 49 - temp.innerHTML = html; 50 - const photoId = temp?.firstElementChild?.id; 75 + if (!response.ok) { 76 + alert(await response.text()); 77 + return; 78 + } 51 79 52 - const preview = document.querySelector("#image-preview"); 53 - if (preview) { 54 - const firstChild = temp.firstElementChild; 80 + const html = await response.text(); 81 + const temp = document.createElement("div"); 82 + temp.innerHTML = html; 83 + const photoId = temp?.firstElementChild?.id; 84 + 85 + const preview = document.querySelector("#image-preview"); 86 + if (preview) { 87 + const firstChild = temp.firstElementChild; 55 88 56 - if (firstChild) { 57 - preview.insertBefore(firstChild, preview.firstChild); 58 - } 89 + if (firstChild) { 90 + preview.insertBefore(firstChild, preview.firstChild); 91 + } 59 92 60 - htmx.process(preview); 93 + htmx.process(preview); 61 94 62 - const deleteButton = preview.querySelector( 63 - `#delete-photo-${photoId}`, 64 - ); 65 - if (!deleteButton) { 66 - return; 67 - } 68 - htmx.process(deleteButton); 69 - hyperscript.processNode(deleteButton); 95 + const deleteButton = preview.querySelector( 96 + `#delete-photo-${photoId}`, 97 + ); 98 + if (!deleteButton) { 99 + return; 70 100 } 71 - } catch (err) { 72 - console.error("Error uploading photo:", err); 73 - alert("Error uploading photo"); 101 + htmx.process(deleteButton); 102 + hyperscript.processNode(deleteButton); 74 103 } 75 104 }); 76 105 77 106 await Promise.all(uploadPromises); 78 - inputElement.value = ""; 107 + 108 + // Clear the file input after upload 109 + const fileInput = formElement.querySelector("input[type='file']"); 110 + if (fileInput instanceof HTMLInputElement) { 111 + fileInput.value = ""; 112 + } 113 + } 114 + } 115 + 116 + const SCALE_FACTOR = 1000000; 117 + 118 + type Exif = Record< 119 + string, 120 + number | string | boolean | Array<number | string> | undefined | Date 121 + >; 122 + 123 + function normalizeExif( 124 + exif: Exif, 125 + scale: number = SCALE_FACTOR, 126 + ): Exif { 127 + const normalized: Record< 128 + string, 129 + number | string | boolean | Array<number | string> | undefined 130 + > = {}; 131 + 132 + for (const [key, value] of Object.entries(exif)) { 133 + const camelKey = key[0].toLowerCase() + key.slice(1); 134 + 135 + if (typeof value === "number") { 136 + normalized[camelKey] = Math.round(value * scale); 137 + } else if (Array.isArray(value)) { 138 + normalized[camelKey] = value.map((v) => 139 + typeof v === "number" ? Math.round(v * scale) : v 140 + ); 141 + } else if (value instanceof Date) { 142 + normalized[camelKey] = value.toISOString(); 143 + } else if (typeof value === "string") { 144 + normalized[camelKey] = value; 145 + } else if (typeof value === "boolean") { 146 + normalized[camelKey] = value; 147 + } else if (value === undefined) { 148 + normalized[camelKey] = undefined; 149 + } else { 150 + // fallback for unknown types 151 + normalized[camelKey] = String(value); 152 + } 79 153 } 154 + 155 + return normalized; 80 156 }
+13 -11
static/app.esm.js
··· 1 - var Zo=Object.create;var Ya=Object.defineProperty;var es=Object.getOwnPropertyDescriptor;var ts=Object.getOwnPropertyNames;var rs=Object.getPrototypeOf,ns=Object.prototype.hasOwnProperty;var To=(Gr,Wr)=>()=>(Wr||Gr((Wr={exports:{}}).exports,Wr),Wr.exports),is=(Gr,Wr)=>{for(var Qr in Wr)Ya(Gr,Qr,{get:Wr[Qr],enumerable:!0})},as=(Gr,Wr,Qr,Yr)=>{if(Wr&&typeof Wr=="object"||typeof Wr=="function")for(let Jr of ts(Wr))!ns.call(Gr,Jr)&&Jr!==Qr&&Ya(Gr,Jr,{get:()=>Wr[Jr],enumerable:!(Yr=es(Wr,Jr))||Yr.enumerable});return Gr};var ca=(Gr,Wr,Qr)=>(Qr=Gr!=null?Zo(rs(Gr)):{},as(Wr||!Gr||!Gr.__esModule?Ya(Qr,"default",{value:Gr,enumerable:!0}):Qr,Gr));var Oa=To((exports,module)=>{(function(Gr,Wr){typeof define=="function"&&define.amd?define([],Wr):typeof module=="object"&&module.exports?module.exports=Wr():Gr.htmx=Gr.htmx||Wr()})(typeof self<"u"?self:exports,function(){return function(){"use strict";var Q={onLoad:F,process:zt,on:de,off:ge,trigger:ce,ajax:Nr,find:C,findAll:f,closest:v,values:function(Gr,Wr){var Qr=dr(Gr,Wr||"post");return Qr.values},remove:_,addClass:z,removeClass:n,toggleClass:$,takeClass:W,defineExtension:Ur,removeExtension:Br,logAll:V,logNone:j,logger:null,config:{historyEnabled:!0,historyCacheSize:10,refreshOnHistoryMiss:!1,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:!0,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:!0,allowScriptTags:!0,inlineScriptNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:!1,timeout:0,wsReconnectDelay:"full-jitter",wsBinaryType:"blob",disableSelector:"[hx-disable], [data-hx-disable]",useTemplateFragments:!1,scrollBehavior:"smooth",defaultFocusScroll:!1,getCacheBusterParam:!1,globalViewTransitions:!1,methodsThatUseUrlParams:["get"],selfRequestsOnly:!1,ignoreTitle:!1,scrollIntoViewOnBoost:!0,triggerSpecsCache:null},parseInterval:d,_:t,createEventSource:function(Gr){return new EventSource(Gr,{withCredentials:!0})},createWebSocket:function(Gr){var Wr=new WebSocket(Gr,[]);return Wr.binaryType=Q.config.wsBinaryType,Wr},version:"1.9.12"},r={addTriggerHandler:Lt,bodyContains:se,canAccessLocalStorage:U,findThisElement:xe,filterValues:yr,hasAttribute:o,getAttributeValue:te,getClosestAttributeValue:ne,getClosestMatch:c,getExpressionVars:Hr,getHeaders:xr,getInputValues:dr,getInternalData:ae,getSwapSpecification:wr,getTriggerSpecs:it,getTarget:ye,makeFragment:l,mergeObjects:le,makeSettleInfo:T,oobSwap:Ee,querySelectorExt:ue,selectAndSwap:je,settleImmediately:nr,shouldCancel:ut,triggerEvent:ce,triggerErrorEvent:fe,withExtensions:R},w=["get","post","put","delete","patch"],i=w.map(function(Gr){return"[hx-"+Gr+"], [data-hx-"+Gr+"]"}).join(", "),S=e("head"),q=e("title"),H=e("svg",!0);function e(Gr,Wr){return new RegExp("<"+Gr+"(\\s[^>]*>|>)([\\s\\S]*?)<\\/"+Gr+">",Wr?"gim":"im")}function d(Gr){if(Gr==null)return;let Wr=NaN;return Gr.slice(-2)=="ms"?Wr=parseFloat(Gr.slice(0,-2)):Gr.slice(-1)=="s"?Wr=parseFloat(Gr.slice(0,-1))*1e3:Gr.slice(-1)=="m"?Wr=parseFloat(Gr.slice(0,-1))*1e3*60:Wr=parseFloat(Gr),isNaN(Wr)?void 0:Wr}function ee(Gr,Wr){return Gr.getAttribute&&Gr.getAttribute(Wr)}function o(Gr,Wr){return Gr.hasAttribute&&(Gr.hasAttribute(Wr)||Gr.hasAttribute("data-"+Wr))}function te(Gr,Wr){return ee(Gr,Wr)||ee(Gr,"data-"+Wr)}function u(Gr){return Gr.parentElement}function re(){return document}function c(Gr,Wr){for(;Gr&&!Wr(Gr);)Gr=u(Gr);return Gr||null}function L(Gr,Wr,Qr){var Yr=te(Wr,Qr),Jr=te(Wr,"hx-disinherit");return Gr!==Wr&&Jr&&(Jr==="*"||Jr.split(" ").indexOf(Qr)>=0)?"unset":Yr}function ne(Gr,Wr){var Qr=null;if(c(Gr,function(Yr){return Qr=L(Gr,Yr,Wr)}),Qr!=="unset")return Qr}function h(Gr,Wr){var Qr=Gr.matches||Gr.matchesSelector||Gr.msMatchesSelector||Gr.mozMatchesSelector||Gr.webkitMatchesSelector||Gr.oMatchesSelector;return Qr&&Qr.call(Gr,Wr)}function A(Gr){var Wr=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,Qr=Wr.exec(Gr);return Qr?Qr[1].toLowerCase():""}function s(Gr,Wr){for(var Qr=new DOMParser,Yr=Qr.parseFromString(Gr,"text/html"),Jr=Yr.body;Wr>0;)Wr--,Jr=Jr.firstChild;return Jr==null&&(Jr=re().createDocumentFragment()),Jr}function N(Gr){return/<body/.test(Gr)}function l(Gr){var Wr=!N(Gr),Qr=A(Gr),Yr=Gr;if(Qr==="head"&&(Yr=Yr.replace(S,"")),Q.config.useTemplateFragments&&Wr){var Jr=s("<body><template>"+Yr+"</template></body>",0),rn=Jr.querySelector("template").content;return Q.config.allowScriptTags?oe(rn.querySelectorAll("script"),function(ln){Q.config.inlineScriptNonce&&(ln.nonce=Q.config.inlineScriptNonce),ln.htmxExecuted=navigator.userAgent.indexOf("Firefox")===-1}):oe(rn.querySelectorAll("script"),function(ln){_(ln)}),rn}switch(Qr){case"thead":case"tbody":case"tfoot":case"colgroup":case"caption":return s("<table>"+Yr+"</table>",1);case"col":return s("<table><colgroup>"+Yr+"</colgroup></table>",2);case"tr":return s("<table><tbody>"+Yr+"</tbody></table>",2);case"td":case"th":return s("<table><tbody><tr>"+Yr+"</tr></tbody></table>",3);case"script":case"style":return s("<div>"+Yr+"</div>",1);default:return s(Yr,0)}}function ie(Gr){Gr&&Gr()}function I(Gr,Wr){return Object.prototype.toString.call(Gr)==="[object "+Wr+"]"}function k(Gr){return I(Gr,"Function")}function P(Gr){return I(Gr,"Object")}function ae(Gr){var Wr="htmx-internal-data",Qr=Gr[Wr];return Qr||(Qr=Gr[Wr]={}),Qr}function M(Gr){var Wr=[];if(Gr)for(var Qr=0;Qr<Gr.length;Qr++)Wr.push(Gr[Qr]);return Wr}function oe(Gr,Wr){if(Gr)for(var Qr=0;Qr<Gr.length;Qr++)Wr(Gr[Qr])}function X(Gr){var Wr=Gr.getBoundingClientRect(),Qr=Wr.top,Yr=Wr.bottom;return Qr<window.innerHeight&&Yr>=0}function se(Gr){return Gr.getRootNode&&Gr.getRootNode()instanceof window.ShadowRoot?re().body.contains(Gr.getRootNode().host):re().body.contains(Gr)}function D(Gr){return Gr.trim().split(/\s+/)}function le(Gr,Wr){for(var Qr in Wr)Wr.hasOwnProperty(Qr)&&(Gr[Qr]=Wr[Qr]);return Gr}function E(Gr){try{return JSON.parse(Gr)}catch(Wr){return b(Wr),null}}function U(){var Gr="htmx:localStorageTest";try{return localStorage.setItem(Gr,Gr),localStorage.removeItem(Gr),!0}catch{return!1}}function B(Gr){try{var Wr=new URL(Gr);return Wr&&(Gr=Wr.pathname+Wr.search),/^\/$/.test(Gr)||(Gr=Gr.replace(/\/+$/,"")),Gr}catch{return Gr}}function t(e){return Tr(re().body,function(){return eval(e)})}function F(Gr){var Wr=Q.on("htmx:load",function(Qr){Gr(Qr.detail.elt)});return Wr}function V(){Q.logger=function(Gr,Wr,Qr){console&&console.log(Wr,Gr,Qr)}}function j(){Q.logger=null}function C(Gr,Wr){return Wr?Gr.querySelector(Wr):C(re(),Gr)}function f(Gr,Wr){return Wr?Gr.querySelectorAll(Wr):f(re(),Gr)}function _(Gr,Wr){Gr=p(Gr),Wr?setTimeout(function(){_(Gr),Gr=null},Wr):Gr.parentElement.removeChild(Gr)}function z(Gr,Wr,Qr){Gr=p(Gr),Qr?setTimeout(function(){z(Gr,Wr),Gr=null},Qr):Gr.classList&&Gr.classList.add(Wr)}function n(Gr,Wr,Qr){Gr=p(Gr),Qr?setTimeout(function(){n(Gr,Wr),Gr=null},Qr):Gr.classList&&(Gr.classList.remove(Wr),Gr.classList.length===0&&Gr.removeAttribute("class"))}function $(Gr,Wr){Gr=p(Gr),Gr.classList.toggle(Wr)}function W(Gr,Wr){Gr=p(Gr),oe(Gr.parentElement.children,function(Qr){n(Qr,Wr)}),z(Gr,Wr)}function v(Gr,Wr){if(Gr=p(Gr),Gr.closest)return Gr.closest(Wr);do if(Gr==null||h(Gr,Wr))return Gr;while(Gr=Gr&&u(Gr));return null}function g(Gr,Wr){return Gr.substring(0,Wr.length)===Wr}function G(Gr,Wr){return Gr.substring(Gr.length-Wr.length)===Wr}function J(Gr){var Wr=Gr.trim();return g(Wr,"<")&&G(Wr,"/>")?Wr.substring(1,Wr.length-2):Wr}function Z(Gr,Wr){return Wr.indexOf("closest ")===0?[v(Gr,J(Wr.substr(8)))]:Wr.indexOf("find ")===0?[C(Gr,J(Wr.substr(5)))]:Wr==="next"?[Gr.nextElementSibling]:Wr.indexOf("next ")===0?[K(Gr,J(Wr.substr(5)))]:Wr==="previous"?[Gr.previousElementSibling]:Wr.indexOf("previous ")===0?[Y(Gr,J(Wr.substr(9)))]:Wr==="document"?[document]:Wr==="window"?[window]:Wr==="body"?[document.body]:re().querySelectorAll(J(Wr))}var K=function(Gr,Wr){for(var Qr=re().querySelectorAll(Wr),Yr=0;Yr<Qr.length;Yr++){var Jr=Qr[Yr];if(Jr.compareDocumentPosition(Gr)===Node.DOCUMENT_POSITION_PRECEDING)return Jr}},Y=function(Gr,Wr){for(var Qr=re().querySelectorAll(Wr),Yr=Qr.length-1;Yr>=0;Yr--){var Jr=Qr[Yr];if(Jr.compareDocumentPosition(Gr)===Node.DOCUMENT_POSITION_FOLLOWING)return Jr}};function ue(Gr,Wr){return Wr?Z(Gr,Wr)[0]:Z(re().body,Gr)[0]}function p(Gr){return I(Gr,"String")?C(Gr):Gr}function ve(Gr,Wr,Qr){return k(Wr)?{target:re().body,event:Gr,listener:Wr}:{target:p(Gr),event:Wr,listener:Qr}}function de(Gr,Wr,Qr){jr(function(){var Jr=ve(Gr,Wr,Qr);Jr.target.addEventListener(Jr.event,Jr.listener)});var Yr=k(Wr);return Yr?Wr:Qr}function ge(Gr,Wr,Qr){return jr(function(){var Yr=ve(Gr,Wr,Qr);Yr.target.removeEventListener(Yr.event,Yr.listener)}),k(Wr)?Wr:Qr}var pe=re().createElement("output");function me(Gr,Wr){var Qr=ne(Gr,Wr);if(Qr){if(Qr==="this")return[xe(Gr,Wr)];var Yr=Z(Gr,Qr);return Yr.length===0?(b('The selector "'+Qr+'" on '+Wr+" returned no matches!"),[pe]):Yr}}function xe(Gr,Wr){return c(Gr,function(Qr){return te(Qr,Wr)!=null})}function ye(Gr){var Wr=ne(Gr,"hx-target");if(Wr)return Wr==="this"?xe(Gr,"hx-target"):ue(Gr,Wr);var Qr=ae(Gr);return Qr.boosted?re().body:Gr}function be(Gr){for(var Wr=Q.config.attributesToSettle,Qr=0;Qr<Wr.length;Qr++)if(Gr===Wr[Qr])return!0;return!1}function we(Gr,Wr){oe(Gr.attributes,function(Qr){!Wr.hasAttribute(Qr.name)&&be(Qr.name)&&Gr.removeAttribute(Qr.name)}),oe(Wr.attributes,function(Qr){be(Qr.name)&&Gr.setAttribute(Qr.name,Qr.value)})}function Se(Gr,Wr){for(var Qr=Fr(Wr),Yr=0;Yr<Qr.length;Yr++){var Jr=Qr[Yr];try{if(Jr.isInlineSwap(Gr))return!0}catch(rn){b(rn)}}return Gr==="outerHTML"}function Ee(Gr,Wr,Qr){var Yr="#"+ee(Wr,"id"),Jr="outerHTML";Gr==="true"||(Gr.indexOf(":")>0?(Jr=Gr.substr(0,Gr.indexOf(":")),Yr=Gr.substr(Gr.indexOf(":")+1,Gr.length)):Jr=Gr);var rn=re().querySelectorAll(Yr);return rn?(oe(rn,function(ln){var mn,gn=Wr.cloneNode(!0);mn=re().createDocumentFragment(),mn.appendChild(gn),Se(Jr,ln)||(mn=gn);var xn={shouldSwap:!0,target:ln,fragment:mn};ce(ln,"htmx:oobBeforeSwap",xn)&&(ln=xn.target,xn.shouldSwap&&Fe(Jr,ln,ln,mn,Qr),oe(Qr.elts,function(Cn){ce(Cn,"htmx:oobAfterSwap",xn)}))}),Wr.parentNode.removeChild(Wr)):(Wr.parentNode.removeChild(Wr),fe(re().body,"htmx:oobErrorNoTarget",{content:Wr})),Gr}function Ce(Gr,Wr,Qr){var Yr=ne(Gr,"hx-select-oob");if(Yr)for(var Jr=Yr.split(","),rn=0;rn<Jr.length;rn++){var ln=Jr[rn].split(":",2),mn=ln[0].trim();mn.indexOf("#")===0&&(mn=mn.substring(1));var gn=ln[1]||"true",xn=Wr.querySelector("#"+mn);xn&&Ee(gn,xn,Qr)}oe(f(Wr,"[hx-swap-oob], [data-hx-swap-oob]"),function(Cn){var On=te(Cn,"hx-swap-oob");On!=null&&Ee(On,Cn,Qr)})}function Re(Gr){oe(f(Gr,"[hx-preserve], [data-hx-preserve]"),function(Wr){var Qr=te(Wr,"id"),Yr=re().getElementById(Qr);Yr!=null&&Wr.parentNode.replaceChild(Yr,Wr)})}function Te(Gr,Wr,Qr){oe(Wr.querySelectorAll("[id]"),function(Yr){var Jr=ee(Yr,"id");if(Jr&&Jr.length>0){var rn=Jr.replace("'","\\'"),ln=Yr.tagName.replace(":","\\:"),mn=Gr.querySelector(ln+"[id='"+rn+"']");if(mn&&mn!==Gr){var gn=Yr.cloneNode();we(Yr,mn),Qr.tasks.push(function(){we(Yr,gn)})}}})}function Oe(Gr){return function(){n(Gr,Q.config.addedClass),zt(Gr),Nt(Gr),qe(Gr),ce(Gr,"htmx:load")}}function qe(Gr){var Wr="[autofocus]",Qr=h(Gr,Wr)?Gr:Gr.querySelector(Wr);Qr?.focus()}function a(Gr,Wr,Qr,Yr){for(Te(Gr,Qr,Yr);Qr.childNodes.length>0;){var Jr=Qr.firstChild;z(Jr,Q.config.addedClass),Gr.insertBefore(Jr,Wr),Jr.nodeType!==Node.TEXT_NODE&&Jr.nodeType!==Node.COMMENT_NODE&&Yr.tasks.push(Oe(Jr))}}function He(Gr,Wr){for(var Qr=0;Qr<Gr.length;)Wr=(Wr<<5)-Wr+Gr.charCodeAt(Qr++)|0;return Wr}function Le(Gr){var Wr=0;if(Gr.attributes)for(var Qr=0;Qr<Gr.attributes.length;Qr++){var Yr=Gr.attributes[Qr];Yr.value&&(Wr=He(Yr.name,Wr),Wr=He(Yr.value,Wr))}return Wr}function Ae(Gr){var Wr=ae(Gr);if(Wr.onHandlers){for(var Qr=0;Qr<Wr.onHandlers.length;Qr++){let Yr=Wr.onHandlers[Qr];Gr.removeEventListener(Yr.event,Yr.listener)}delete Wr.onHandlers}}function Ne(Gr){var Wr=ae(Gr);Wr.timeout&&clearTimeout(Wr.timeout),Wr.webSocket&&Wr.webSocket.close(),Wr.sseEventSource&&Wr.sseEventSource.close(),Wr.listenerInfos&&oe(Wr.listenerInfos,function(Qr){Qr.on&&Qr.on.removeEventListener(Qr.trigger,Qr.listener)}),Ae(Gr),oe(Object.keys(Wr),function(Qr){delete Wr[Qr]})}function m(Gr){ce(Gr,"htmx:beforeCleanupElement"),Ne(Gr),Gr.children&&oe(Gr.children,function(Wr){m(Wr)})}function Ie(Gr,Wr,Qr){if(Gr.tagName==="BODY")return Ue(Gr,Wr,Qr);var Yr,Jr=Gr.previousSibling;for(a(u(Gr),Gr,Wr,Qr),Jr==null?Yr=u(Gr).firstChild:Yr=Jr.nextSibling,Qr.elts=Qr.elts.filter(function(rn){return rn!=Gr});Yr&&Yr!==Gr;)Yr.nodeType===Node.ELEMENT_NODE&&Qr.elts.push(Yr),Yr=Yr.nextElementSibling;m(Gr),u(Gr).removeChild(Gr)}function ke(Gr,Wr,Qr){return a(Gr,Gr.firstChild,Wr,Qr)}function Pe(Gr,Wr,Qr){return a(u(Gr),Gr,Wr,Qr)}function Me(Gr,Wr,Qr){return a(Gr,null,Wr,Qr)}function Xe(Gr,Wr,Qr){return a(u(Gr),Gr.nextSibling,Wr,Qr)}function De(Gr,Wr,Qr){return m(Gr),u(Gr).removeChild(Gr)}function Ue(Gr,Wr,Qr){var Yr=Gr.firstChild;if(a(Gr,Yr,Wr,Qr),Yr){for(;Yr.nextSibling;)m(Yr.nextSibling),Gr.removeChild(Yr.nextSibling);m(Yr),Gr.removeChild(Yr)}}function Be(Gr,Wr,Qr){var Yr=Qr||ne(Gr,"hx-select");if(Yr){var Jr=re().createDocumentFragment();oe(Wr.querySelectorAll(Yr),function(rn){Jr.appendChild(rn)}),Wr=Jr}return Wr}function Fe(Gr,Wr,Qr,Yr,Jr){switch(Gr){case"none":return;case"outerHTML":Ie(Qr,Yr,Jr);return;case"afterbegin":ke(Qr,Yr,Jr);return;case"beforebegin":Pe(Qr,Yr,Jr);return;case"beforeend":Me(Qr,Yr,Jr);return;case"afterend":Xe(Qr,Yr,Jr);return;case"delete":De(Qr,Yr,Jr);return;default:for(var rn=Fr(Wr),ln=0;ln<rn.length;ln++){var mn=rn[ln];try{var gn=mn.handleSwap(Gr,Qr,Yr,Jr);if(gn){if(typeof gn.length<"u")for(var xn=0;xn<gn.length;xn++){var Cn=gn[xn];Cn.nodeType!==Node.TEXT_NODE&&Cn.nodeType!==Node.COMMENT_NODE&&Jr.tasks.push(Oe(Cn))}return}}catch(On){b(On)}}Gr==="innerHTML"?Ue(Qr,Yr,Jr):Fe(Q.config.defaultSwapStyle,Wr,Qr,Yr,Jr)}}function Ve(Gr){if(Gr.indexOf("<title")>-1){var Wr=Gr.replace(H,""),Qr=Wr.match(q);if(Qr)return Qr[2]}}function je(Gr,Wr,Qr,Yr,Jr,rn){Jr.title=Ve(Yr);var ln=l(Yr);if(ln)return Ce(Qr,ln,Jr),ln=Be(Qr,ln,rn),Re(ln),Fe(Gr,Qr,Wr,ln,Jr)}function _e(Gr,Wr,Qr){var Yr=Gr.getResponseHeader(Wr);if(Yr.indexOf("{")===0){var Jr=E(Yr);for(var rn in Jr)if(Jr.hasOwnProperty(rn)){var ln=Jr[rn];P(ln)||(ln={value:ln}),ce(Qr,rn,ln)}}else for(var mn=Yr.split(","),gn=0;gn<mn.length;gn++)ce(Qr,mn[gn].trim(),[])}var ze=/\s/,x=/[\s,]/,$e=/[_$a-zA-Z]/,We=/[_$a-zA-Z0-9]/,Ge=['"',"'","/"],Je=/[^\s]/,Ze=/[{(]/,Ke=/[})]/;function Ye(Gr){for(var Wr=[],Qr=0;Qr<Gr.length;){if($e.exec(Gr.charAt(Qr))){for(var Yr=Qr;We.exec(Gr.charAt(Qr+1));)Qr++;Wr.push(Gr.substr(Yr,Qr-Yr+1))}else if(Ge.indexOf(Gr.charAt(Qr))!==-1){var Jr=Gr.charAt(Qr),Yr=Qr;for(Qr++;Qr<Gr.length&&Gr.charAt(Qr)!==Jr;)Gr.charAt(Qr)==="\\"&&Qr++,Qr++;Wr.push(Gr.substr(Yr,Qr-Yr+1))}else{var rn=Gr.charAt(Qr);Wr.push(rn)}Qr++}return Wr}function Qe(Gr,Wr,Qr){return $e.exec(Gr.charAt(0))&&Gr!=="true"&&Gr!=="false"&&Gr!=="this"&&Gr!==Qr&&Wr!=="."}function et(Gr,Wr,Qr){if(Wr[0]==="["){Wr.shift();for(var Yr=1,Jr=" return (function("+Qr+"){ return (",rn=null;Wr.length>0;){var ln=Wr[0];if(ln==="]"){if(Yr--,Yr===0){rn===null&&(Jr=Jr+"true"),Wr.shift(),Jr+=")})";try{var mn=Tr(Gr,function(){return Function(Jr)()},function(){return!0});return mn.source=Jr,mn}catch(gn){return fe(re().body,"htmx:syntax:error",{error:gn,source:Jr}),null}}}else ln==="["&&Yr++;Qe(ln,rn,Qr)?Jr+="(("+Qr+"."+ln+") ? ("+Qr+"."+ln+") : (window."+ln+"))":Jr=Jr+ln,rn=Wr.shift()}}}function y(Gr,Wr){for(var Qr="";Gr.length>0&&!Wr.test(Gr[0]);)Qr+=Gr.shift();return Qr}function tt(Gr){var Wr;return Gr.length>0&&Ze.test(Gr[0])?(Gr.shift(),Wr=y(Gr,Ke).trim(),Gr.shift()):Wr=y(Gr,x),Wr}var rt="input, textarea, select";function nt(Gr,Wr,Qr){var Yr=[],Jr=Ye(Wr);do{y(Jr,Je);var rn=Jr.length,ln=y(Jr,/[,\[\s]/);if(ln!=="")if(ln==="every"){var mn={trigger:"every"};y(Jr,Je),mn.pollInterval=d(y(Jr,/[,\[\s]/)),y(Jr,Je);var gn=et(Gr,Jr,"event");gn&&(mn.eventFilter=gn),Yr.push(mn)}else if(ln.indexOf("sse:")===0)Yr.push({trigger:"sse",sseEvent:ln.substr(4)});else{var xn={trigger:ln},gn=et(Gr,Jr,"event");for(gn&&(xn.eventFilter=gn);Jr.length>0&&Jr[0]!==",";){y(Jr,Je);var Cn=Jr.shift();if(Cn==="changed")xn.changed=!0;else if(Cn==="once")xn.once=!0;else if(Cn==="consume")xn.consume=!0;else if(Cn==="delay"&&Jr[0]===":")Jr.shift(),xn.delay=d(y(Jr,x));else if(Cn==="from"&&Jr[0]===":"){if(Jr.shift(),Ze.test(Jr[0]))var On=tt(Jr);else{var On=y(Jr,x);if(On==="closest"||On==="find"||On==="next"||On==="previous"){Jr.shift();var Pn=tt(Jr);Pn.length>0&&(On+=" "+Pn)}}xn.from=On}else Cn==="target"&&Jr[0]===":"?(Jr.shift(),xn.target=tt(Jr)):Cn==="throttle"&&Jr[0]===":"?(Jr.shift(),xn.throttle=d(y(Jr,x))):Cn==="queue"&&Jr[0]===":"?(Jr.shift(),xn.queue=y(Jr,x)):Cn==="root"&&Jr[0]===":"?(Jr.shift(),xn[Cn]=tt(Jr)):Cn==="threshold"&&Jr[0]===":"?(Jr.shift(),xn[Cn]=y(Jr,x)):fe(Gr,"htmx:syntax:error",{token:Jr.shift()})}Yr.push(xn)}Jr.length===rn&&fe(Gr,"htmx:syntax:error",{token:Jr.shift()}),y(Jr,Je)}while(Jr[0]===","&&Jr.shift());return Qr&&(Qr[Wr]=Yr),Yr}function it(Gr){var Wr=te(Gr,"hx-trigger"),Qr=[];if(Wr){var Yr=Q.config.triggerSpecsCache;Qr=Yr&&Yr[Wr]||nt(Gr,Wr,Yr)}return Qr.length>0?Qr:h(Gr,"form")?[{trigger:"submit"}]:h(Gr,'input[type="button"], input[type="submit"]')?[{trigger:"click"}]:h(Gr,rt)?[{trigger:"change"}]:[{trigger:"click"}]}function at(Gr){ae(Gr).cancelled=!0}function ot(Gr,Wr,Qr){var Yr=ae(Gr);Yr.timeout=setTimeout(function(){se(Gr)&&Yr.cancelled!==!0&&(ct(Qr,Gr,Wt("hx:poll:trigger",{triggerSpec:Qr,target:Gr}))||Wr(Gr),ot(Gr,Wr,Qr))},Qr.pollInterval)}function st(Gr){return location.hostname===Gr.hostname&&ee(Gr,"href")&&ee(Gr,"href").indexOf("#")!==0}function lt(Gr,Wr,Qr){if(Gr.tagName==="A"&&st(Gr)&&(Gr.target===""||Gr.target==="_self")||Gr.tagName==="FORM"){Wr.boosted=!0;var Yr,Jr;if(Gr.tagName==="A")Yr="get",Jr=ee(Gr,"href");else{var rn=ee(Gr,"method");Yr=rn?rn.toLowerCase():"get",Jr=ee(Gr,"action")}Qr.forEach(function(ln){ht(Gr,function(mn,gn){if(v(mn,Q.config.disableSelector)){m(mn);return}he(Yr,Jr,mn,gn)},Wr,ln,!0)})}}function ut(Gr,Wr){return!!((Gr.type==="submit"||Gr.type==="click")&&(Wr.tagName==="FORM"||h(Wr,'input[type="submit"], button')&&v(Wr,"form")!==null||Wr.tagName==="A"&&Wr.href&&(Wr.getAttribute("href")==="#"||Wr.getAttribute("href").indexOf("#")!==0)))}function ft(Gr,Wr){return ae(Gr).boosted&&Gr.tagName==="A"&&Wr.type==="click"&&(Wr.ctrlKey||Wr.metaKey)}function ct(Gr,Wr,Qr){var Yr=Gr.eventFilter;if(Yr)try{return Yr.call(Wr,Qr)!==!0}catch(Jr){return fe(re().body,"htmx:eventFilter:error",{error:Jr,source:Yr.source}),!0}return!1}function ht(Gr,Wr,Qr,Yr,Jr){var rn=ae(Gr),ln;Yr.from?ln=Z(Gr,Yr.from):ln=[Gr],Yr.changed&&ln.forEach(function(mn){var gn=ae(mn);gn.lastValue=mn.value}),oe(ln,function(mn){var gn=function(xn){if(!se(Gr)){mn.removeEventListener(Yr.trigger,gn);return}if(!ft(Gr,xn)&&((Jr||ut(xn,Gr))&&xn.preventDefault(),!ct(Yr,Gr,xn))){var Cn=ae(xn);if(Cn.triggerSpec=Yr,Cn.handledFor==null&&(Cn.handledFor=[]),Cn.handledFor.indexOf(Gr)<0){if(Cn.handledFor.push(Gr),Yr.consume&&xn.stopPropagation(),Yr.target&&xn.target&&!h(xn.target,Yr.target))return;if(Yr.once){if(rn.triggeredOnce)return;rn.triggeredOnce=!0}if(Yr.changed){var On=ae(mn);if(On.lastValue===mn.value)return;On.lastValue=mn.value}if(rn.delayed&&clearTimeout(rn.delayed),rn.throttle)return;Yr.throttle>0?rn.throttle||(Wr(Gr,xn),rn.throttle=setTimeout(function(){rn.throttle=null},Yr.throttle)):Yr.delay>0?rn.delayed=setTimeout(function(){Wr(Gr,xn)},Yr.delay):(ce(Gr,"htmx:trigger"),Wr(Gr,xn))}}};Qr.listenerInfos==null&&(Qr.listenerInfos=[]),Qr.listenerInfos.push({trigger:Yr.trigger,listener:gn,on:mn}),mn.addEventListener(Yr.trigger,gn)})}var vt=!1,dt=null;function gt(){dt||(dt=function(){vt=!0},window.addEventListener("scroll",dt),setInterval(function(){vt&&(vt=!1,oe(re().querySelectorAll("[hx-trigger='revealed'],[data-hx-trigger='revealed']"),function(Gr){pt(Gr)}))},200))}function pt(Gr){if(!o(Gr,"data-hx-revealed")&&X(Gr)){Gr.setAttribute("data-hx-revealed","true");var Wr=ae(Gr);Wr.initHash?ce(Gr,"revealed"):Gr.addEventListener("htmx:afterProcessNode",function(Qr){ce(Gr,"revealed")},{once:!0})}}function mt(Gr,Wr,Qr){for(var Yr=D(Qr),Jr=0;Jr<Yr.length;Jr++){var rn=Yr[Jr].split(/:(.+)/);rn[0]==="connect"&&xt(Gr,rn[1],0),rn[0]==="send"&&bt(Gr)}}function xt(Gr,Wr,Qr){if(se(Gr)){if(Wr.indexOf("/")==0){var Yr=location.hostname+(location.port?":"+location.port:"");location.protocol=="https:"?Wr="wss://"+Yr+Wr:location.protocol=="http:"&&(Wr="ws://"+Yr+Wr)}var Jr=Q.createWebSocket(Wr);Jr.onerror=function(rn){fe(Gr,"htmx:wsError",{error:rn,socket:Jr}),yt(Gr)},Jr.onclose=function(rn){if([1006,1012,1013].indexOf(rn.code)>=0){var ln=wt(Qr);setTimeout(function(){xt(Gr,Wr,Qr+1)},ln)}},Jr.onopen=function(rn){Qr=0},ae(Gr).webSocket=Jr,Jr.addEventListener("message",function(rn){if(!yt(Gr)){var ln=rn.data;R(Gr,function(Pn){ln=Pn.transformResponse(ln,null,Gr)});for(var mn=T(Gr),gn=l(ln),xn=M(gn.children),Cn=0;Cn<xn.length;Cn++){var On=xn[Cn];Ee(te(On,"hx-swap-oob")||"true",On,mn)}nr(mn.tasks)}})}}function yt(Gr){if(!se(Gr))return ae(Gr).webSocket.close(),!0}function bt(Gr){var Wr=c(Gr,function(Qr){return ae(Qr).webSocket!=null});Wr?Gr.addEventListener(it(Gr)[0].trigger,function(Qr){var Yr=ae(Wr).webSocket,Jr=xr(Gr,Wr),rn=dr(Gr,"post"),ln=rn.errors,mn=rn.values,gn=Hr(Gr),xn=le(mn,gn),Cn=yr(xn,Gr);if(Cn.HEADERS=Jr,ln&&ln.length>0){ce(Gr,"htmx:validation:halted",ln);return}Yr.send(JSON.stringify(Cn)),ut(Qr,Gr)&&Qr.preventDefault()}):fe(Gr,"htmx:noWebSocketSourceError")}function wt(Gr){var Wr=Q.config.wsReconnectDelay;if(typeof Wr=="function")return Wr(Gr);if(Wr==="full-jitter"){var Qr=Math.min(Gr,6),Yr=1e3*Math.pow(2,Qr);return Yr*Math.random()}b('htmx.config.wsReconnectDelay must either be a function or the string "full-jitter"')}function St(Gr,Wr,Qr){for(var Yr=D(Qr),Jr=0;Jr<Yr.length;Jr++){var rn=Yr[Jr].split(/:(.+)/);rn[0]==="connect"&&Et(Gr,rn[1]),rn[0]==="swap"&&Ct(Gr,rn[1])}}function Et(Gr,Wr){var Qr=Q.createEventSource(Wr);Qr.onerror=function(Yr){fe(Gr,"htmx:sseError",{error:Yr,source:Qr}),Tt(Gr)},ae(Gr).sseEventSource=Qr}function Ct(Gr,Wr){var Qr=c(Gr,Ot);if(Qr){var Yr=ae(Qr).sseEventSource,Jr=function(rn){if(!Tt(Qr)){if(!se(Gr)){Yr.removeEventListener(Wr,Jr);return}var ln=rn.data;R(Gr,function(Cn){ln=Cn.transformResponse(ln,null,Gr)});var mn=wr(Gr),gn=ye(Gr),xn=T(Gr);je(mn.swapStyle,gn,Gr,ln,xn),nr(xn.tasks),ce(Gr,"htmx:sseMessage",rn)}};ae(Gr).sseListener=Jr,Yr.addEventListener(Wr,Jr)}else fe(Gr,"htmx:noSSESourceError")}function Rt(Gr,Wr,Qr){var Yr=c(Gr,Ot);if(Yr){var Jr=ae(Yr).sseEventSource,rn=function(){Tt(Yr)||(se(Gr)?Wr(Gr):Jr.removeEventListener(Qr,rn))};ae(Gr).sseListener=rn,Jr.addEventListener(Qr,rn)}else fe(Gr,"htmx:noSSESourceError")}function Tt(Gr){if(!se(Gr))return ae(Gr).sseEventSource.close(),!0}function Ot(Gr){return ae(Gr).sseEventSource!=null}function qt(Gr,Wr,Qr,Yr){var Jr=function(){Qr.loaded||(Qr.loaded=!0,Wr(Gr))};Yr>0?setTimeout(Jr,Yr):Jr()}function Ht(Gr,Wr,Qr){var Yr=!1;return oe(w,function(Jr){if(o(Gr,"hx-"+Jr)){var rn=te(Gr,"hx-"+Jr);Yr=!0,Wr.path=rn,Wr.verb=Jr,Qr.forEach(function(ln){Lt(Gr,ln,Wr,function(mn,gn){if(v(mn,Q.config.disableSelector)){m(mn);return}he(Jr,rn,mn,gn)})})}}),Yr}function Lt(Gr,Wr,Qr,Yr){if(Wr.sseEvent)Rt(Gr,Yr,Wr.sseEvent);else if(Wr.trigger==="revealed")gt(),ht(Gr,Yr,Qr,Wr),pt(Gr);else if(Wr.trigger==="intersect"){var Jr={};Wr.root&&(Jr.root=ue(Gr,Wr.root)),Wr.threshold&&(Jr.threshold=parseFloat(Wr.threshold));var rn=new IntersectionObserver(function(ln){for(var mn=0;mn<ln.length;mn++){var gn=ln[mn];if(gn.isIntersecting){ce(Gr,"intersect");break}}},Jr);rn.observe(Gr),ht(Gr,Yr,Qr,Wr)}else Wr.trigger==="load"?ct(Wr,Gr,Wt("load",{elt:Gr}))||qt(Gr,Yr,Qr,Wr.delay):Wr.pollInterval>0?(Qr.polling=!0,ot(Gr,Yr,Wr)):ht(Gr,Yr,Qr,Wr)}function At(Gr){if(!Gr.htmxExecuted&&Q.config.allowScriptTags&&(Gr.type==="text/javascript"||Gr.type==="module"||Gr.type==="")){var Wr=re().createElement("script");oe(Gr.attributes,function(Yr){Wr.setAttribute(Yr.name,Yr.value)}),Wr.textContent=Gr.textContent,Wr.async=!1,Q.config.inlineScriptNonce&&(Wr.nonce=Q.config.inlineScriptNonce);var Qr=Gr.parentElement;try{Qr.insertBefore(Wr,Gr)}catch(Yr){b(Yr)}finally{Gr.parentElement&&Gr.parentElement.removeChild(Gr)}}}function Nt(Gr){h(Gr,"script")&&At(Gr),oe(f(Gr,"script"),function(Wr){At(Wr)})}function It(Gr){var Wr=Gr.attributes;if(!Wr)return!1;for(var Qr=0;Qr<Wr.length;Qr++){var Yr=Wr[Qr].name;if(g(Yr,"hx-on:")||g(Yr,"data-hx-on:")||g(Yr,"hx-on-")||g(Yr,"data-hx-on-"))return!0}return!1}function kt(Gr){var Wr=null,Qr=[];if(It(Gr)&&Qr.push(Gr),document.evaluate)for(var Yr=document.evaluate('.//*[@*[ starts-with(name(), "hx-on:") or starts-with(name(), "data-hx-on:") or starts-with(name(), "hx-on-") or starts-with(name(), "data-hx-on-") ]]',Gr);Wr=Yr.iterateNext();)Qr.push(Wr);else if(typeof Gr.getElementsByTagName=="function")for(var Jr=Gr.getElementsByTagName("*"),rn=0;rn<Jr.length;rn++)It(Jr[rn])&&Qr.push(Jr[rn]);return Qr}function Pt(Gr){if(Gr.querySelectorAll){var Wr=", [hx-boost] a, [data-hx-boost] a, a[hx-boost], a[data-hx-boost]",Qr=Gr.querySelectorAll(i+Wr+", form, [type='submit'], [hx-sse], [data-hx-sse], [hx-ws], [data-hx-ws], [hx-ext], [data-hx-ext], [hx-trigger], [data-hx-trigger], [hx-on], [data-hx-on]");return Qr}else return[]}function Mt(Gr){var Wr=v(Gr.target,"button, input[type='submit']"),Qr=Dt(Gr);Qr&&(Qr.lastButtonClicked=Wr)}function Xt(Gr){var Wr=Dt(Gr);Wr&&(Wr.lastButtonClicked=null)}function Dt(Gr){var Wr=v(Gr.target,"button, input[type='submit']");if(Wr){var Qr=p("#"+ee(Wr,"form"))||v(Wr,"form");if(Qr)return ae(Qr)}}function Ut(Gr){Gr.addEventListener("click",Mt),Gr.addEventListener("focusin",Mt),Gr.addEventListener("focusout",Xt)}function Bt(Gr){for(var Wr=Ye(Gr),Qr=0,Yr=0;Yr<Wr.length;Yr++){let Jr=Wr[Yr];Jr==="{"?Qr++:Jr==="}"&&Qr--}return Qr}function Ft(Gr,Wr,Qr){var Yr=ae(Gr);Array.isArray(Yr.onHandlers)||(Yr.onHandlers=[]);var Jr,rn=function(ln){return Tr(Gr,function(){Jr||(Jr=new Function("event",Qr)),Jr.call(Gr,ln)})};Gr.addEventListener(Wr,rn),Yr.onHandlers.push({event:Wr,listener:rn})}function Vt(Gr){var Wr=te(Gr,"hx-on");if(Wr){for(var Qr={},Yr=Wr.split(` 2 - `),Jr=null,rn=0;Yr.length>0;){var ln=Yr.shift(),mn=ln.match(/^\s*([a-zA-Z:\-\.]+:)(.*)/);rn===0&&mn?(ln.split(":"),Jr=mn[1].slice(0,-1),Qr[Jr]=mn[2]):Qr[Jr]+=ln,rn+=Bt(ln)}for(var gn in Qr)Ft(Gr,gn,Qr[gn])}}function jt(Gr){Ae(Gr);for(var Wr=0;Wr<Gr.attributes.length;Wr++){var Qr=Gr.attributes[Wr].name,Yr=Gr.attributes[Wr].value;if(g(Qr,"hx-on")||g(Qr,"data-hx-on")){var Jr=Qr.indexOf("-on")+3,rn=Qr.slice(Jr,Jr+1);if(rn==="-"||rn===":"){var ln=Qr.slice(Jr+1);g(ln,":")?ln="htmx"+ln:g(ln,"-")?ln="htmx:"+ln.slice(1):g(ln,"htmx-")&&(ln="htmx:"+ln.slice(5)),Ft(Gr,ln,Yr)}}}}function _t(Gr){if(v(Gr,Q.config.disableSelector)){m(Gr);return}var Wr=ae(Gr);if(Wr.initHash!==Le(Gr)){Ne(Gr),Wr.initHash=Le(Gr),Vt(Gr),ce(Gr,"htmx:beforeProcessNode"),Gr.value&&(Wr.lastValue=Gr.value);var Qr=it(Gr),Yr=Ht(Gr,Wr,Qr);Yr||(ne(Gr,"hx-boost")==="true"?lt(Gr,Wr,Qr):o(Gr,"hx-trigger")&&Qr.forEach(function(ln){Lt(Gr,ln,Wr,function(){})})),(Gr.tagName==="FORM"||ee(Gr,"type")==="submit"&&o(Gr,"form"))&&Ut(Gr);var Jr=te(Gr,"hx-sse");Jr&&St(Gr,Wr,Jr);var rn=te(Gr,"hx-ws");rn&&mt(Gr,Wr,rn),ce(Gr,"htmx:afterProcessNode")}}function zt(Gr){if(Gr=p(Gr),v(Gr,Q.config.disableSelector)){m(Gr);return}_t(Gr),oe(Pt(Gr),function(Wr){_t(Wr)}),oe(kt(Gr),jt)}function $t(Gr){return Gr.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}function Wt(Gr,Wr){var Qr;return window.CustomEvent&&typeof window.CustomEvent=="function"?Qr=new CustomEvent(Gr,{bubbles:!0,cancelable:!0,detail:Wr}):(Qr=re().createEvent("CustomEvent"),Qr.initCustomEvent(Gr,!0,!0,Wr)),Qr}function fe(Gr,Wr,Qr){ce(Gr,Wr,le({error:Wr},Qr))}function Gt(Gr){return Gr==="htmx:afterProcessNode"}function R(Gr,Wr){oe(Fr(Gr),function(Qr){try{Wr(Qr)}catch(Yr){b(Yr)}})}function b(Gr){console.error?console.error(Gr):console.log&&console.log("ERROR: ",Gr)}function ce(Gr,Wr,Qr){Gr=p(Gr),Qr==null&&(Qr={}),Qr.elt=Gr;var Yr=Wt(Wr,Qr);Q.logger&&!Gt(Wr)&&Q.logger(Gr,Wr,Qr),Qr.error&&(b(Qr.error),ce(Gr,"htmx:error",{errorInfo:Qr}));var Jr=Gr.dispatchEvent(Yr),rn=$t(Wr);if(Jr&&rn!==Wr){var ln=Wt(rn,Yr.detail);Jr=Jr&&Gr.dispatchEvent(ln)}return R(Gr,function(mn){Jr=Jr&&mn.onEvent(Wr,Yr)!==!1&&!Yr.defaultPrevented}),Jr}var Jt=location.pathname+location.search;function Zt(){var Gr=re().querySelector("[hx-history-elt],[data-hx-history-elt]");return Gr||re().body}function Kt(Gr,Wr,Qr,Yr){if(U()){if(Q.config.historyCacheSize<=0){localStorage.removeItem("htmx-history-cache");return}Gr=B(Gr);for(var Jr=E(localStorage.getItem("htmx-history-cache"))||[],rn=0;rn<Jr.length;rn++)if(Jr[rn].url===Gr){Jr.splice(rn,1);break}var ln={url:Gr,content:Wr,title:Qr,scroll:Yr};for(ce(re().body,"htmx:historyItemCreated",{item:ln,cache:Jr}),Jr.push(ln);Jr.length>Q.config.historyCacheSize;)Jr.shift();for(;Jr.length>0;)try{localStorage.setItem("htmx-history-cache",JSON.stringify(Jr));break}catch(mn){fe(re().body,"htmx:historyCacheError",{cause:mn,cache:Jr}),Jr.shift()}}}function Yt(Gr){if(!U())return null;Gr=B(Gr);for(var Wr=E(localStorage.getItem("htmx-history-cache"))||[],Qr=0;Qr<Wr.length;Qr++)if(Wr[Qr].url===Gr)return Wr[Qr];return null}function Qt(Gr){var Wr=Q.config.requestClass,Qr=Gr.cloneNode(!0);return oe(f(Qr,"."+Wr),function(Yr){n(Yr,Wr)}),Qr.innerHTML}function er(){var Gr=Zt(),Wr=Jt||location.pathname+location.search,Qr;try{Qr=re().querySelector('[hx-history="false" i],[data-hx-history="false" i]')}catch{Qr=re().querySelector('[hx-history="false"],[data-hx-history="false"]')}Qr||(ce(re().body,"htmx:beforeHistorySave",{path:Wr,historyElt:Gr}),Kt(Wr,Qt(Gr),re().title,window.scrollY)),Q.config.historyEnabled&&history.replaceState({htmx:!0},re().title,window.location.href)}function tr(Gr){Q.config.getCacheBusterParam&&(Gr=Gr.replace(/org\.htmx\.cache-buster=[^&]*&?/,""),(G(Gr,"&")||G(Gr,"?"))&&(Gr=Gr.slice(0,-1))),Q.config.historyEnabled&&history.pushState({htmx:!0},"",Gr),Jt=Gr}function rr(Gr){Q.config.historyEnabled&&history.replaceState({htmx:!0},"",Gr),Jt=Gr}function nr(Gr){oe(Gr,function(Wr){Wr.call()})}function ir(Gr){var Wr=new XMLHttpRequest,Qr={path:Gr,xhr:Wr};ce(re().body,"htmx:historyCacheMiss",Qr),Wr.open("GET",Gr,!0),Wr.setRequestHeader("HX-Request","true"),Wr.setRequestHeader("HX-History-Restore-Request","true"),Wr.setRequestHeader("HX-Current-URL",re().location.href),Wr.onload=function(){if(this.status>=200&&this.status<400){ce(re().body,"htmx:historyCacheMissLoad",Qr);var Yr=l(this.response);Yr=Yr.querySelector("[hx-history-elt],[data-hx-history-elt]")||Yr;var Jr=Zt(),rn=T(Jr),ln=Ve(this.response);if(ln){var mn=C("title");mn?mn.innerHTML=ln:window.document.title=ln}Ue(Jr,Yr,rn),nr(rn.tasks),Jt=Gr,ce(re().body,"htmx:historyRestore",{path:Gr,cacheMiss:!0,serverResponse:this.response})}else fe(re().body,"htmx:historyCacheMissLoadError",Qr)},Wr.send()}function ar(Gr){er(),Gr=Gr||location.pathname+location.search;var Wr=Yt(Gr);if(Wr){var Qr=l(Wr.content),Yr=Zt(),Jr=T(Yr);Ue(Yr,Qr,Jr),nr(Jr.tasks),document.title=Wr.title,setTimeout(function(){window.scrollTo(0,Wr.scroll)},0),Jt=Gr,ce(re().body,"htmx:historyRestore",{path:Gr,item:Wr})}else Q.config.refreshOnHistoryMiss?window.location.reload(!0):ir(Gr)}function or(Gr){var Wr=me(Gr,"hx-indicator");return Wr==null&&(Wr=[Gr]),oe(Wr,function(Qr){var Yr=ae(Qr);Yr.requestCount=(Yr.requestCount||0)+1,Qr.classList.add.call(Qr.classList,Q.config.requestClass)}),Wr}function sr(Gr){var Wr=me(Gr,"hx-disabled-elt");return Wr==null&&(Wr=[]),oe(Wr,function(Qr){var Yr=ae(Qr);Yr.requestCount=(Yr.requestCount||0)+1,Qr.setAttribute("disabled","")}),Wr}function lr(Gr,Wr){oe(Gr,function(Qr){var Yr=ae(Qr);Yr.requestCount=(Yr.requestCount||0)-1,Yr.requestCount===0&&Qr.classList.remove.call(Qr.classList,Q.config.requestClass)}),oe(Wr,function(Qr){var Yr=ae(Qr);Yr.requestCount=(Yr.requestCount||0)-1,Yr.requestCount===0&&Qr.removeAttribute("disabled")})}function ur(Gr,Wr){for(var Qr=0;Qr<Gr.length;Qr++){var Yr=Gr[Qr];if(Yr.isSameNode(Wr))return!0}return!1}function fr(Gr){return Gr.name===""||Gr.name==null||Gr.disabled||v(Gr,"fieldset[disabled]")||Gr.type==="button"||Gr.type==="submit"||Gr.tagName==="image"||Gr.tagName==="reset"||Gr.tagName==="file"?!1:Gr.type==="checkbox"||Gr.type==="radio"?Gr.checked:!0}function cr(Gr,Wr,Qr){if(Gr!=null&&Wr!=null){var Yr=Qr[Gr];Yr===void 0?Qr[Gr]=Wr:Array.isArray(Yr)?Array.isArray(Wr)?Qr[Gr]=Yr.concat(Wr):Yr.push(Wr):Array.isArray(Wr)?Qr[Gr]=[Yr].concat(Wr):Qr[Gr]=[Yr,Wr]}}function hr(Gr,Wr,Qr,Yr,Jr){if(!(Yr==null||ur(Gr,Yr))){if(Gr.push(Yr),fr(Yr)){var rn=ee(Yr,"name"),ln=Yr.value;Yr.multiple&&Yr.tagName==="SELECT"&&(ln=M(Yr.querySelectorAll("option:checked")).map(function(gn){return gn.value})),Yr.files&&(ln=M(Yr.files)),cr(rn,ln,Wr),Jr&&vr(Yr,Qr)}if(h(Yr,"form")){var mn=Yr.elements;oe(mn,function(gn){hr(Gr,Wr,Qr,gn,Jr)})}}}function vr(Gr,Wr){Gr.willValidate&&(ce(Gr,"htmx:validation:validate"),Gr.checkValidity()||(Wr.push({elt:Gr,message:Gr.validationMessage,validity:Gr.validity}),ce(Gr,"htmx:validation:failed",{message:Gr.validationMessage,validity:Gr.validity})))}function dr(Gr,Wr){var Qr=[],Yr={},Jr={},rn=[],ln=ae(Gr);ln.lastButtonClicked&&!se(ln.lastButtonClicked)&&(ln.lastButtonClicked=null);var mn=h(Gr,"form")&&Gr.noValidate!==!0||te(Gr,"hx-validate")==="true";if(ln.lastButtonClicked&&(mn=mn&&ln.lastButtonClicked.formNoValidate!==!0),Wr!=="get"&&hr(Qr,Jr,rn,v(Gr,"form"),mn),hr(Qr,Yr,rn,Gr,mn),ln.lastButtonClicked||Gr.tagName==="BUTTON"||Gr.tagName==="INPUT"&&ee(Gr,"type")==="submit"){var gn=ln.lastButtonClicked||Gr,xn=ee(gn,"name");cr(xn,gn.value,Jr)}var Cn=me(Gr,"hx-include");return oe(Cn,function(On){hr(Qr,Yr,rn,On,mn),h(On,"form")||oe(On.querySelectorAll(rt),function(Pn){hr(Qr,Yr,rn,Pn,mn)})}),Yr=le(Yr,Jr),{errors:rn,values:Yr}}function gr(Gr,Wr,Qr){Gr!==""&&(Gr+="&"),String(Qr)==="[object Object]"&&(Qr=JSON.stringify(Qr));var Yr=encodeURIComponent(Qr);return Gr+=encodeURIComponent(Wr)+"="+Yr,Gr}function pr(Gr){var Wr="";for(var Qr in Gr)if(Gr.hasOwnProperty(Qr)){var Yr=Gr[Qr];Array.isArray(Yr)?oe(Yr,function(Jr){Wr=gr(Wr,Qr,Jr)}):Wr=gr(Wr,Qr,Yr)}return Wr}function mr(Gr){var Wr=new FormData;for(var Qr in Gr)if(Gr.hasOwnProperty(Qr)){var Yr=Gr[Qr];Array.isArray(Yr)?oe(Yr,function(Jr){Wr.append(Qr,Jr)}):Wr.append(Qr,Yr)}return Wr}function xr(Gr,Wr,Qr){var Yr={"HX-Request":"true","HX-Trigger":ee(Gr,"id"),"HX-Trigger-Name":ee(Gr,"name"),"HX-Target":te(Wr,"id"),"HX-Current-URL":re().location.href};return Rr(Gr,"hx-headers",!1,Yr),Qr!==void 0&&(Yr["HX-Prompt"]=Qr),ae(Gr).boosted&&(Yr["HX-Boosted"]="true"),Yr}function yr(Gr,Wr){var Qr=ne(Wr,"hx-params");if(Qr){if(Qr==="none")return{};if(Qr==="*")return Gr;if(Qr.indexOf("not ")===0)return oe(Qr.substr(4).split(","),function(Jr){Jr=Jr.trim(),delete Gr[Jr]}),Gr;var Yr={};return oe(Qr.split(","),function(Jr){Jr=Jr.trim(),Yr[Jr]=Gr[Jr]}),Yr}else return Gr}function br(Gr){return ee(Gr,"href")&&ee(Gr,"href").indexOf("#")>=0}function wr(Gr,Wr){var Qr=Wr||ne(Gr,"hx-swap"),Yr={swapStyle:ae(Gr).boosted?"innerHTML":Q.config.defaultSwapStyle,swapDelay:Q.config.defaultSwapDelay,settleDelay:Q.config.defaultSettleDelay};if(Q.config.scrollIntoViewOnBoost&&ae(Gr).boosted&&!br(Gr)&&(Yr.show="top"),Qr){var Jr=D(Qr);if(Jr.length>0)for(var rn=0;rn<Jr.length;rn++){var ln=Jr[rn];if(ln.indexOf("swap:")===0)Yr.swapDelay=d(ln.substr(5));else if(ln.indexOf("settle:")===0)Yr.settleDelay=d(ln.substr(7));else if(ln.indexOf("transition:")===0)Yr.transition=ln.substr(11)==="true";else if(ln.indexOf("ignoreTitle:")===0)Yr.ignoreTitle=ln.substr(12)==="true";else if(ln.indexOf("scroll:")===0){var mn=ln.substr(7),gn=mn.split(":"),xn=gn.pop(),Cn=gn.length>0?gn.join(":"):null;Yr.scroll=xn,Yr.scrollTarget=Cn}else if(ln.indexOf("show:")===0){var On=ln.substr(5),gn=On.split(":"),Pn=gn.pop(),Cn=gn.length>0?gn.join(":"):null;Yr.show=Pn,Yr.showTarget=Cn}else if(ln.indexOf("focus-scroll:")===0){var Gn=ln.substr(13);Yr.focusScroll=Gn=="true"}else rn==0?Yr.swapStyle=ln:b("Unknown modifier in hx-swap: "+ln)}}return Yr}function Sr(Gr){return ne(Gr,"hx-encoding")==="multipart/form-data"||h(Gr,"form")&&ee(Gr,"enctype")==="multipart/form-data"}function Er(Gr,Wr,Qr){var Yr=null;return R(Wr,function(Jr){Yr==null&&(Yr=Jr.encodeParameters(Gr,Qr,Wr))}),Yr??(Sr(Wr)?mr(Qr):pr(Qr))}function T(Gr){return{tasks:[],elts:[Gr]}}function Cr(Gr,Wr){var Qr=Gr[0],Yr=Gr[Gr.length-1];if(Wr.scroll){var Jr=null;Wr.scrollTarget&&(Jr=ue(Qr,Wr.scrollTarget)),Wr.scroll==="top"&&(Qr||Jr)&&(Jr=Jr||Qr,Jr.scrollTop=0),Wr.scroll==="bottom"&&(Yr||Jr)&&(Jr=Jr||Yr,Jr.scrollTop=Jr.scrollHeight)}if(Wr.show){var Jr=null;if(Wr.showTarget){var rn=Wr.showTarget;Wr.showTarget==="window"&&(rn="body"),Jr=ue(Qr,rn)}Wr.show==="top"&&(Qr||Jr)&&(Jr=Jr||Qr,Jr.scrollIntoView({block:"start",behavior:Q.config.scrollBehavior})),Wr.show==="bottom"&&(Yr||Jr)&&(Jr=Jr||Yr,Jr.scrollIntoView({block:"end",behavior:Q.config.scrollBehavior}))}}function Rr(Gr,Wr,Qr,Yr){if(Yr==null&&(Yr={}),Gr==null)return Yr;var Jr=te(Gr,Wr);if(Jr){var rn=Jr.trim(),ln=Qr;if(rn==="unset")return null;rn.indexOf("javascript:")===0?(rn=rn.substr(11),ln=!0):rn.indexOf("js:")===0&&(rn=rn.substr(3),ln=!0),rn.indexOf("{")!==0&&(rn="{"+rn+"}");var mn;ln?mn=Tr(Gr,function(){return Function("return ("+rn+")")()},{}):mn=E(rn);for(var gn in mn)mn.hasOwnProperty(gn)&&Yr[gn]==null&&(Yr[gn]=mn[gn])}return Rr(u(Gr),Wr,Qr,Yr)}function Tr(Gr,Wr,Qr){return Q.config.allowEval?Wr():(fe(Gr,"htmx:evalDisallowedError"),Qr)}function Or(Gr,Wr){return Rr(Gr,"hx-vars",!0,Wr)}function qr(Gr,Wr){return Rr(Gr,"hx-vals",!1,Wr)}function Hr(Gr){return le(Or(Gr),qr(Gr))}function Lr(Gr,Wr,Qr){if(Qr!==null)try{Gr.setRequestHeader(Wr,Qr)}catch{Gr.setRequestHeader(Wr,encodeURIComponent(Qr)),Gr.setRequestHeader(Wr+"-URI-AutoEncoded","true")}}function Ar(Gr){if(Gr.responseURL&&typeof URL<"u")try{var Wr=new URL(Gr.responseURL);return Wr.pathname+Wr.search}catch{fe(re().body,"htmx:badResponseUrl",{url:Gr.responseURL})}}function O(Gr,Wr){return Wr.test(Gr.getAllResponseHeaders())}function Nr(Gr,Wr,Qr){return Gr=Gr.toLowerCase(),Qr?Qr instanceof Element||I(Qr,"String")?he(Gr,Wr,null,null,{targetOverride:p(Qr),returnPromise:!0}):he(Gr,Wr,p(Qr.source),Qr.event,{handler:Qr.handler,headers:Qr.headers,values:Qr.values,targetOverride:p(Qr.target),swapOverride:Qr.swap,select:Qr.select,returnPromise:!0}):he(Gr,Wr,null,null,{returnPromise:!0})}function Ir(Gr){for(var Wr=[];Gr;)Wr.push(Gr),Gr=Gr.parentElement;return Wr}function kr(Gr,Wr,Qr){var Yr,Jr;if(typeof URL=="function"){Jr=new URL(Wr,document.location.href);var rn=document.location.origin;Yr=rn===Jr.origin}else Jr=Wr,Yr=g(Wr,document.location.origin);return Q.config.selfRequestsOnly&&!Yr?!1:ce(Gr,"htmx:validateUrl",le({url:Jr,sameHost:Yr},Qr))}function he(Gr,Wr,Qr,Yr,Jr,rn){var ln=null,mn=null;if(Jr=Jr??{},Jr.returnPromise&&typeof Promise<"u")var gn=new Promise(function(pn,En){ln=pn,mn=En});Qr==null&&(Qr=re().body);var xn=Jr.handler||Mr,Cn=Jr.select||null;if(!se(Qr))return ie(ln),gn;var On=Jr.targetOverride||ye(Qr);if(On==null||On==pe)return fe(Qr,"htmx:targetError",{target:te(Qr,"hx-target")}),ie(mn),gn;var Pn=ae(Qr),Gn=Pn.lastButtonClicked;if(Gn){var Xn=ee(Gn,"formaction");Xn!=null&&(Wr=Xn);var zn=ee(Gn,"formmethod");zn!=null&&zn.toLowerCase()!=="dialog"&&(Gr=zn)}var ni=ne(Qr,"hx-confirm");if(rn===void 0){var gi=function(pn){return he(Gr,Wr,Qr,Yr,Jr,!!pn)},ci={target:On,elt:Qr,path:Wr,verb:Gr,triggeringEvent:Yr,etc:Jr,issueRequest:gi,question:ni};if(ce(Qr,"htmx:confirm",ci)===!1)return ie(ln),gn}var ai=Qr,Kn=ne(Qr,"hx-sync"),hi=null,ii=!1;if(Kn){var Ri=Kn.split(":"),di=Ri[0].trim();if(di==="this"?ai=xe(Qr,"hx-sync"):ai=ue(Qr,di),Kn=(Ri[1]||"drop").trim(),Pn=ae(ai),Kn==="drop"&&Pn.xhr&&Pn.abortable!==!0)return ie(ln),gn;if(Kn==="abort"){if(Pn.xhr)return ie(ln),gn;ii=!0}else if(Kn==="replace")ce(ai,"htmx:abort");else if(Kn.indexOf("queue")===0){var ei=Kn.split(" ");hi=(ei[1]||"last").trim()}}if(Pn.xhr)if(Pn.abortable)ce(ai,"htmx:abort");else{if(hi==null){if(Yr){var Tn=ae(Yr);Tn&&Tn.triggerSpec&&Tn.triggerSpec.queue&&(hi=Tn.triggerSpec.queue)}hi==null&&(hi="last")}return Pn.queuedRequests==null&&(Pn.queuedRequests=[]),hi==="first"&&Pn.queuedRequests.length===0?Pn.queuedRequests.push(function(){he(Gr,Wr,Qr,Yr,Jr)}):hi==="all"?Pn.queuedRequests.push(function(){he(Gr,Wr,Qr,Yr,Jr)}):hi==="last"&&(Pn.queuedRequests=[],Pn.queuedRequests.push(function(){he(Gr,Wr,Qr,Yr,Jr)})),ie(ln),gn}var Zr=new XMLHttpRequest;Pn.xhr=Zr,Pn.abortable=ii;var nn=function(){if(Pn.xhr=null,Pn.abortable=!1,Pn.queuedRequests!=null&&Pn.queuedRequests.length>0){var pn=Pn.queuedRequests.shift();pn()}},hn=ne(Qr,"hx-prompt");if(hn){var dn=prompt(hn);if(dn===null||!ce(Qr,"htmx:prompt",{prompt:dn,target:On}))return ie(ln),nn(),gn}if(ni&&!rn&&!confirm(ni))return ie(ln),nn(),gn;var wn=xr(Qr,On,dn);Gr!=="get"&&!Sr(Qr)&&(wn["Content-Type"]="application/x-www-form-urlencoded"),Jr.headers&&(wn=le(wn,Jr.headers));var vn=dr(Qr,Gr),yn=vn.errors,fn=vn.values;Jr.values&&(fn=le(fn,Jr.values));var An=Hr(Qr),Rn=le(fn,An),Dn=yr(Rn,Qr);Q.config.getCacheBusterParam&&Gr==="get"&&(Dn["org.htmx.cache-buster"]=ee(On,"id")||"true"),(Wr==null||Wr==="")&&(Wr=re().location.href);var In=Rr(Qr,"hx-request"),qn=ae(Qr).boosted,Mn=Q.config.methodsThatUseUrlParams.indexOf(Gr)>=0,Ln={boosted:qn,useUrlParams:Mn,parameters:Dn,unfilteredParameters:Rn,headers:wn,target:On,verb:Gr,errors:yn,withCredentials:Jr.credentials||In.credentials||Q.config.withCredentials,timeout:Jr.timeout||In.timeout||Q.config.timeout,path:Wr,triggeringEvent:Yr};if(!ce(Qr,"htmx:configRequest",Ln))return ie(ln),nn(),gn;if(Wr=Ln.path,Gr=Ln.verb,wn=Ln.headers,Dn=Ln.parameters,yn=Ln.errors,Mn=Ln.useUrlParams,yn&&yn.length>0)return ce(Qr,"htmx:validation:halted",Ln),ie(ln),nn(),gn;var Bn=Wr.split("#"),Wn=Bn[0],jn=Bn[1],tn=Wr;if(Mn){tn=Wn;var an=Object.keys(Dn).length!==0;an&&(tn.indexOf("?")<0?tn+="?":tn+="&",tn+=pr(Dn),jn&&(tn+="#"+jn))}if(!kr(Qr,tn,Ln))return fe(Qr,"htmx:invalidPath",Ln),ie(mn),gn;if(Zr.open(Gr.toUpperCase(),tn,!0),Zr.overrideMimeType("text/html"),Zr.withCredentials=Ln.withCredentials,Zr.timeout=Ln.timeout,!In.noHeaders){for(var Kr in wn)if(wn.hasOwnProperty(Kr)){var en=wn[Kr];Lr(Zr,Kr,en)}}var un={xhr:Zr,target:On,requestConfig:Ln,etc:Jr,boosted:qn,select:Cn,pathInfo:{requestPath:Wr,finalRequestPath:tn,anchor:jn}};if(Zr.onload=function(){try{var pn=Ir(Qr);if(un.pathInfo.responsePath=Ar(Zr),xn(Qr,un),lr(on,cn),ce(Qr,"htmx:afterRequest",un),ce(Qr,"htmx:afterOnLoad",un),!se(Qr)){for(var En=null;pn.length>0&&En==null;){var bn=pn.shift();se(bn)&&(En=bn)}En&&(ce(En,"htmx:afterRequest",un),ce(En,"htmx:afterOnLoad",un))}ie(ln),nn()}catch(Nn){throw fe(Qr,"htmx:onLoadError",le({error:Nn},un)),Nn}},Zr.onerror=function(){lr(on,cn),fe(Qr,"htmx:afterRequest",un),fe(Qr,"htmx:sendError",un),ie(mn),nn()},Zr.onabort=function(){lr(on,cn),fe(Qr,"htmx:afterRequest",un),fe(Qr,"htmx:sendAbort",un),ie(mn),nn()},Zr.ontimeout=function(){lr(on,cn),fe(Qr,"htmx:afterRequest",un),fe(Qr,"htmx:timeout",un),ie(mn),nn()},!ce(Qr,"htmx:beforeRequest",un))return ie(ln),nn(),gn;var on=or(Qr),cn=sr(Qr);oe(["loadstart","loadend","progress","abort"],function(pn){oe([Zr,Zr.upload],function(En){En.addEventListener(pn,function(bn){ce(Qr,"htmx:xhr:"+pn,{lengthComputable:bn.lengthComputable,loaded:bn.loaded,total:bn.total})})})}),ce(Qr,"htmx:beforeSend",un);var sn=Mn?null:Er(Zr,Qr,Dn);return Zr.send(sn),gn}function Pr(Gr,Wr){var Qr=Wr.xhr,Yr=null,Jr=null;if(O(Qr,/HX-Push:/i)?(Yr=Qr.getResponseHeader("HX-Push"),Jr="push"):O(Qr,/HX-Push-Url:/i)?(Yr=Qr.getResponseHeader("HX-Push-Url"),Jr="push"):O(Qr,/HX-Replace-Url:/i)&&(Yr=Qr.getResponseHeader("HX-Replace-Url"),Jr="replace"),Yr)return Yr==="false"?{}:{type:Jr,path:Yr};var rn=Wr.pathInfo.finalRequestPath,ln=Wr.pathInfo.responsePath,mn=ne(Gr,"hx-push-url"),gn=ne(Gr,"hx-replace-url"),xn=ae(Gr).boosted,Cn=null,On=null;return mn?(Cn="push",On=mn):gn?(Cn="replace",On=gn):xn&&(Cn="push",On=ln||rn),On?On==="false"?{}:(On==="true"&&(On=ln||rn),Wr.pathInfo.anchor&&On.indexOf("#")===-1&&(On=On+"#"+Wr.pathInfo.anchor),{type:Cn,path:On}):{}}function Mr(Gr,Wr){var Qr=Wr.xhr,Yr=Wr.target,Jr=Wr.etc,rn=Wr.requestConfig,ln=Wr.select;if(ce(Gr,"htmx:beforeOnLoad",Wr)){if(O(Qr,/HX-Trigger:/i)&&_e(Qr,"HX-Trigger",Gr),O(Qr,/HX-Location:/i)){er();var mn=Qr.getResponseHeader("HX-Location"),gn;mn.indexOf("{")===0&&(gn=E(mn),mn=gn.path,delete gn.path),Nr("GET",mn,gn).then(function(){tr(mn)});return}var xn=O(Qr,/HX-Refresh:/i)&&Qr.getResponseHeader("HX-Refresh")==="true";if(O(Qr,/HX-Redirect:/i)){location.href=Qr.getResponseHeader("HX-Redirect"),xn&&location.reload();return}if(xn){location.reload();return}O(Qr,/HX-Retarget:/i)&&(Qr.getResponseHeader("HX-Retarget")==="this"?Wr.target=Gr:Wr.target=ue(Gr,Qr.getResponseHeader("HX-Retarget")));var Cn=Pr(Gr,Wr),On=Qr.status>=200&&Qr.status<400&&Qr.status!==204,Pn=Qr.response,Gn=Qr.status>=400,Xn=Q.config.ignoreTitle,zn=le({shouldSwap:On,serverResponse:Pn,isError:Gn,ignoreTitle:Xn},Wr);if(ce(Yr,"htmx:beforeSwap",zn)){if(Yr=zn.target,Pn=zn.serverResponse,Gn=zn.isError,Xn=zn.ignoreTitle,Wr.target=Yr,Wr.failed=Gn,Wr.successful=!Gn,zn.shouldSwap){Qr.status===286&&at(Gr),R(Gr,function(di){Pn=di.transformResponse(Pn,Qr,Gr)}),Cn.type&&er();var ni=Jr.swapOverride;O(Qr,/HX-Reswap:/i)&&(ni=Qr.getResponseHeader("HX-Reswap"));var gn=wr(Gr,ni);gn.hasOwnProperty("ignoreTitle")&&(Xn=gn.ignoreTitle),Yr.classList.add(Q.config.swappingClass);var gi=null,ci=null,ai=function(){try{var di=document.activeElement,ei={};try{ei={elt:di,start:di?di.selectionStart:null,end:di?di.selectionEnd:null}}catch{}var Tn;ln&&(Tn=ln),O(Qr,/HX-Reselect:/i)&&(Tn=Qr.getResponseHeader("HX-Reselect")),Cn.type&&(ce(re().body,"htmx:beforeHistoryUpdate",le({history:Cn},Wr)),Cn.type==="push"?(tr(Cn.path),ce(re().body,"htmx:pushedIntoHistory",{path:Cn.path})):(rr(Cn.path),ce(re().body,"htmx:replacedInHistory",{path:Cn.path})));var Zr=T(Yr);if(je(gn.swapStyle,Yr,Gr,Pn,Zr,Tn),ei.elt&&!se(ei.elt)&&ee(ei.elt,"id")){var nn=document.getElementById(ee(ei.elt,"id")),hn={preventScroll:gn.focusScroll!==void 0?!gn.focusScroll:!Q.config.defaultFocusScroll};if(nn){if(ei.start&&nn.setSelectionRange)try{nn.setSelectionRange(ei.start,ei.end)}catch{}nn.focus(hn)}}if(Yr.classList.remove(Q.config.swappingClass),oe(Zr.elts,function(vn){vn.classList&&vn.classList.add(Q.config.settlingClass),ce(vn,"htmx:afterSwap",Wr)}),O(Qr,/HX-Trigger-After-Swap:/i)){var dn=Gr;se(Gr)||(dn=re().body),_e(Qr,"HX-Trigger-After-Swap",dn)}var wn=function(){if(oe(Zr.tasks,function(An){An.call()}),oe(Zr.elts,function(An){An.classList&&An.classList.remove(Q.config.settlingClass),ce(An,"htmx:afterSettle",Wr)}),Wr.pathInfo.anchor){var vn=re().getElementById(Wr.pathInfo.anchor);vn&&vn.scrollIntoView({block:"start",behavior:"auto"})}if(Zr.title&&!Xn){var yn=C("title");yn?yn.innerHTML=Zr.title:window.document.title=Zr.title}if(Cr(Zr.elts,gn),O(Qr,/HX-Trigger-After-Settle:/i)){var fn=Gr;se(Gr)||(fn=re().body),_e(Qr,"HX-Trigger-After-Settle",fn)}ie(gi)};gn.settleDelay>0?setTimeout(wn,gn.settleDelay):wn()}catch(vn){throw fe(Gr,"htmx:swapError",Wr),ie(ci),vn}},Kn=Q.config.globalViewTransitions;if(gn.hasOwnProperty("transition")&&(Kn=gn.transition),Kn&&ce(Gr,"htmx:beforeTransition",Wr)&&typeof Promise<"u"&&document.startViewTransition){var hi=new Promise(function(di,ei){gi=di,ci=ei}),ii=ai;ai=function(){document.startViewTransition(function(){return ii(),hi})}}gn.swapDelay>0?setTimeout(ai,gn.swapDelay):ai()}Gn&&fe(Gr,"htmx:responseError",le({error:"Response Status Error Code "+Qr.status+" from "+Wr.pathInfo.requestPath},Wr))}}}var Xr={};function Dr(){return{init:function(Gr){return null},onEvent:function(Gr,Wr){return!0},transformResponse:function(Gr,Wr,Qr){return Gr},isInlineSwap:function(Gr){return!1},handleSwap:function(Gr,Wr,Qr,Yr){return!1},encodeParameters:function(Gr,Wr,Qr){return null}}}function Ur(Gr,Wr){Wr.init&&Wr.init(r),Xr[Gr]=le(Dr(),Wr)}function Br(Gr){delete Xr[Gr]}function Fr(Gr,Wr,Qr){if(Gr==null)return Wr;Wr==null&&(Wr=[]),Qr==null&&(Qr=[]);var Yr=te(Gr,"hx-ext");return Yr&&oe(Yr.split(","),function(Jr){if(Jr=Jr.replace(/ /g,""),Jr.slice(0,7)=="ignore:"){Qr.push(Jr.slice(7));return}if(Qr.indexOf(Jr)<0){var rn=Xr[Jr];rn&&Wr.indexOf(rn)<0&&Wr.push(rn)}}),Fr(u(Gr),Wr,Qr)}var Vr=!1;re().addEventListener("DOMContentLoaded",function(){Vr=!0});function jr(Gr){Vr||re().readyState==="complete"?Gr():re().addEventListener("DOMContentLoaded",Gr)}function _r(){Q.config.includeIndicatorStyles!==!1&&re().head.insertAdjacentHTML("beforeend","<style> ."+Q.config.indicatorClass+"{opacity:0} ."+Q.config.requestClass+" ."+Q.config.indicatorClass+"{opacity:1; transition: opacity 200ms ease-in;} ."+Q.config.requestClass+"."+Q.config.indicatorClass+"{opacity:1; transition: opacity 200ms ease-in;} </style>")}function zr(){var Gr=re().querySelector('meta[name="htmx-config"]');return Gr?E(Gr.content):null}function $r(){var Gr=zr();Gr&&(Q.config=le(Q.config,Gr))}return jr(function(){$r(),_r();var Gr=re().body;zt(Gr);var Wr=re().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");Gr.addEventListener("htmx:abort",function(Yr){var Jr=Yr.target,rn=ae(Jr);rn&&rn.xhr&&rn.xhr.abort()});let Qr=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(Yr){Yr.state&&Yr.state.htmx?(ar(),oe(Wr,function(Jr){ce(Jr,"htmx:restored",{document:re(),triggerEvent:ce})})):Qr&&Qr(Yr)},setTimeout(function(){ce(Gr,"htmx:load",{}),Gr=null},0)}),Q}()})});var $a=To((Aa,xo)=>{(function(Gr,Wr){let Qr=Wr(Gr);typeof Aa=="object"&&typeof Aa.nodeName!="string"?xo.exports=Qr:(Gr._hyperscript=Qr,"document"in Gr&&Gr._hyperscript.browserInit())})(typeof self<"u"?self:Aa,Gr=>{"use strict";let Wr={dynamicResolvers:[function(Tn,Zr){if(Tn==="Fixed")return Number(Zr).toFixed();if(Tn.indexOf("Fixed:")===0){let nn=Tn.split(":")[1];return Number(Zr).toFixed(parseInt(nn))}}],String:function(Tn){return Tn.toString?Tn.toString():""+Tn},Int:function(Tn){return parseInt(Tn)},Float:function(Tn){return parseFloat(Tn)},Number:function(Tn){return Number(Tn)},Date:function(Tn){return new Date(Tn)},Array:function(Tn){return Array.from(Tn)},JSON:function(Tn){return JSON.stringify(Tn)},Object:function(Tn){return Tn instanceof String&&(Tn=Tn.toString()),typeof Tn=="string"?JSON.parse(Tn):Object.assign({},Tn)}},Qr={attributes:"_, script, data-script",defaultTransition:"all 500ms ease-in",disableSelector:"[disable-scripting], [data-disable-scripting]",hideShowStrategies:{},conversions:Wr};class Yr{static OP_TABLE={"+":"PLUS","-":"MINUS","*":"MULTIPLY","/":"DIVIDE",".":"PERIOD","..":"ELLIPSIS","\\":"BACKSLASH",":":"COLON","%":"PERCENT","|":"PIPE","!":"EXCLAMATION","?":"QUESTION","#":"POUND","&":"AMPERSAND",$:"DOLLAR",";":"SEMI",",":"COMMA","(":"L_PAREN",")":"R_PAREN","<":"L_ANG",">":"R_ANG","<=":"LTE_ANG",">=":"GTE_ANG","==":"EQ","===":"EQQ","!=":"NEQ","!==":"NEQQ","{":"L_BRACE","}":"R_BRACE","[":"L_BRACKET","]":"R_BRACKET","=":"EQUALS","~":"TILDE"};static isValidCSSClassChar(Zr){return Yr.isAlpha(Zr)||Yr.isNumeric(Zr)||Zr==="-"||Zr==="_"||Zr===":"}static isValidCSSIDChar(Zr){return Yr.isAlpha(Zr)||Yr.isNumeric(Zr)||Zr==="-"||Zr==="_"||Zr===":"}static isWhitespace(Zr){return Zr===" "||Zr===" "||Yr.isNewline(Zr)}static positionString(Zr){return"[Line: "+Zr.line+", Column: "+Zr.column+"]"}static isNewline(Zr){return Zr==="\r"||Zr===` 3 - `}static isNumeric(Zr){return Zr>="0"&&Zr<="9"}static isAlpha(Zr){return Zr>="a"&&Zr<="z"||Zr>="A"&&Zr<="Z"}static isIdentifierChar(Zr,nn){return Zr==="_"||Zr==="$"}static isReservedChar(Zr){return Zr==="`"||Zr==="^"}static isValidSingleQuoteStringStart(Zr){if(Zr.length>0){var nn=Zr[Zr.length-1];if(nn.type==="IDENTIFIER"||nn.type==="CLASS_REF"||nn.type==="ID_REF"||nn.op&&(nn.value===">"||nn.value===")"))return!1}return!0}static tokenize(Zr,nn){var hn=[],dn=Zr,wn=0,vn=0,yn=1,fn="<START>",An=0;function Rn(){return nn&&An===0}for(;wn<dn.length;)if(sn()==="-"&&pn()==="-"&&(Yr.isWhitespace(En(2))||En(2)===""||En(2)==="-")||sn()==="/"&&pn()==="/"&&(Yr.isWhitespace(En(2))||En(2)===""||En(2)==="/"))qn();else if(sn()==="/"&&pn()==="*"&&(Yr.isWhitespace(En(2))||En(2)===""||En(2)==="*"))Mn();else if(Yr.isWhitespace(sn()))hn.push(Hn());else if(!Nn()&&sn()==="."&&(Yr.isAlpha(pn())||pn()==="{"||pn()==="-"))hn.push(Ln());else if(!Nn()&&sn()==="#"&&(Yr.isAlpha(pn())||pn()==="{"))hn.push(tn());else if(sn()==="["&&pn()==="@")hn.push(Bn());else if(sn()==="@")hn.push(Wn());else if(sn()==="*"&&Yr.isAlpha(pn()))hn.push(jn());else if(Rn()&&(Yr.isAlpha(sn())||sn()==="\\"))hn.push(an());else if(!Rn()&&(Yr.isAlpha(sn())||Yr.isIdentifierChar(sn())))hn.push(Kr());else if(Yr.isNumeric(sn()))hn.push(en());else if(!Rn()&&(sn()==='"'||sn()==="`"))hn.push(on());else if(!Rn()&&sn()==="'")Yr.isValidSingleQuoteStringStart(hn)?hn.push(on()):hn.push(un());else if(Yr.OP_TABLE[sn()])fn==="$"&&sn()==="{"&&An++,sn()==="}"&&An--,hn.push(un());else if(Rn()||Yr.isReservedChar(sn()))hn.push(In("RESERVED",bn()));else if(wn<dn.length)throw Error("Unknown token: "+sn()+" ");return new Jr(hn,[],dn);function Dn(kn,Sn){var Un=In(kn,Sn);return Un.op=!0,Un}function In(kn,Sn){return{type:kn,value:Sn||"",start:wn,end:wn+1,column:vn,line:yn}}function qn(){for(;sn()&&!Yr.isNewline(sn());)bn();bn()}function Mn(){for(;sn()&&!(sn()==="*"&&pn()==="/");)bn();bn(),bn()}function Ln(){var kn=In("CLASS_REF"),Sn=bn();if(sn()==="{"){for(kn.template=!0,Sn+=bn();sn()&&sn()!=="}";)Sn+=bn();if(sn()!=="}")throw Error("Unterminated class reference");Sn+=bn()}else for(;Yr.isValidCSSClassChar(sn())||sn()==="\\";)sn()==="\\"&&bn(),Sn+=bn();return kn.value=Sn,kn.end=wn,kn}function Bn(){for(var kn=In("ATTRIBUTE_REF"),Sn=bn();wn<dn.length&&sn()!=="]";)Sn+=bn();return sn()==="]"&&(Sn+=bn()),kn.value=Sn,kn.end=wn,kn}function Wn(){for(var kn=In("ATTRIBUTE_REF"),Sn=bn();Yr.isValidCSSIDChar(sn());)Sn+=bn();if(sn()==="="){if(Sn+=bn(),sn()==='"'||sn()==="'"){let Un=on();Sn+=Un.value}else if(Yr.isAlpha(sn())||Yr.isNumeric(sn())||Yr.isIdentifierChar(sn())){let Un=Kr();Sn+=Un.value}}return kn.value=Sn,kn.end=wn,kn}function jn(){for(var kn=In("STYLE_REF"),Sn=bn();Yr.isAlpha(sn())||sn()==="-";)Sn+=bn();return kn.value=Sn,kn.end=wn,kn}function tn(){var kn=In("ID_REF"),Sn=bn();if(sn()==="{"){for(kn.template=!0,Sn+=bn();sn()&&sn()!=="}";)Sn+=bn();if(sn()!=="}")throw Error("Unterminated id reference");bn()}else for(;Yr.isValidCSSIDChar(sn());)Sn+=bn();return kn.value=Sn,kn.end=wn,kn}function an(){var kn=In("IDENTIFIER"),Sn=bn(),Un=Sn==="\\";for(Un&&(Sn="");(Yr.isAlpha(sn())||Yr.isNumeric(sn())||Yr.isIdentifierChar(sn())||sn()==="\\"||sn()==="{"||sn()==="}")&&!(sn()==="$"&&Un===!1);)sn()==="\\"?(Un=!0,bn()):(Un=!1,Sn+=bn());return sn()==="!"&&Sn==="beep"&&(Sn+=bn()),kn.value=Sn,kn.end=wn,kn}function Kr(){for(var kn=In("IDENTIFIER"),Sn=bn();Yr.isAlpha(sn())||Yr.isNumeric(sn())||Yr.isIdentifierChar(sn());)Sn+=bn();return sn()==="!"&&Sn==="beep"&&(Sn+=bn()),kn.value=Sn,kn.end=wn,kn}function en(){for(var kn=In("NUMBER"),Sn=bn();Yr.isNumeric(sn());)Sn+=bn();for(sn()==="."&&Yr.isNumeric(pn())&&(Sn+=bn());Yr.isNumeric(sn());)Sn+=bn();for((sn()==="e"||sn()==="E")&&(Yr.isNumeric(pn())?Sn+=bn():pn()==="-"&&(Sn+=bn(),Sn+=bn()));Yr.isNumeric(sn());)Sn+=bn();return kn.value=Sn,kn.end=wn,kn}function un(){for(var kn=Dn(),Sn=bn();sn()&&Yr.OP_TABLE[Sn+sn()];)Sn+=bn();return kn.type=Yr.OP_TABLE[Sn],kn.value=Sn,kn.end=wn,kn}function on(){var kn=In("STRING"),Sn=bn();kn.template=Sn==="`";for(var Un="";sn()&&sn()!==Sn;)if(sn()==="\\"){bn();let _n=bn();if(_n==="b")Un+="\b";else if(_n==="f")Un+="\f";else if(_n==="n")Un+=` 4 - `;else if(_n==="r")Un+="\r";else if(_n==="t")Un+=" ";else if(_n==="v")Un+="\v";else if(kn.template&&_n==="$")Un+="\\$";else if(_n==="x"){let ti=cn();if(Number.isNaN(ti))throw Error("Invalid hexadecimal escape at "+Yr.positionString(kn));Un+=String.fromCharCode(ti)}else Un+=_n}else Un+=bn();if(sn()!==Sn)throw Error("Unterminated string at "+Yr.positionString(kn));return bn(),kn.value=Un,kn.end=wn,kn}function cn(){if(!sn())return NaN;let Sn=16*Number.parseInt(bn(),16);return sn()?(Sn+=Number.parseInt(bn(),16),Sn):NaN}function sn(){return dn.charAt(wn)}function pn(){return dn.charAt(wn+1)}function En(kn=1){return dn.charAt(wn+kn)}function bn(){return fn=sn(),wn++,vn++,fn}function Nn(){return Yr.isAlpha(fn)||Yr.isNumeric(fn)||fn===")"||fn==='"'||fn==="'"||fn==="`"||fn==="}"||fn==="]"}function Hn(){for(var kn=In("WHITESPACE"),Sn="";sn()&&Yr.isWhitespace(sn());)Yr.isNewline(sn())&&(vn=0,yn++),Sn+=bn();return kn.value=Sn,kn.end=wn,kn}}tokenize(Zr,nn){return Yr.tokenize(Zr,nn)}}class Jr{constructor(Zr,nn,hn){this.tokens=Zr,this.consumed=nn,this.source=hn,this.consumeWhitespace()}get list(){return this.tokens}_lastConsumed=null;consumeWhitespace(){for(;this.token(0,!0).type==="WHITESPACE";)this.consumed.push(this.tokens.shift())}raiseError(Zr,nn){rn.raiseParseError(Zr,nn)}requireOpToken(Zr){var nn=this.matchOpToken(Zr);if(nn)return nn;this.raiseError(this,"Expected '"+Zr+"' but found '"+this.currentToken().value+"'")}matchAnyOpToken(Zr,nn,hn){for(var dn=0;dn<arguments.length;dn++){var wn=arguments[dn],vn=this.matchOpToken(wn);if(vn)return vn}}matchAnyToken(Zr,nn,hn){for(var dn=0;dn<arguments.length;dn++){var wn=arguments[dn],vn=this.matchToken(wn);if(vn)return vn}}matchOpToken(Zr){if(this.currentToken()&&this.currentToken().op&&this.currentToken().value===Zr)return this.consumeToken()}requireTokenType(Zr,nn,hn,dn){var wn=this.matchTokenType(Zr,nn,hn,dn);if(wn)return wn;this.raiseError(this,"Expected one of "+JSON.stringify([Zr,nn,hn]))}matchTokenType(Zr,nn,hn,dn){if(this.currentToken()&&this.currentToken().type&&[Zr,nn,hn,dn].indexOf(this.currentToken().type)>=0)return this.consumeToken()}requireToken(Zr,nn){var hn=this.matchToken(Zr,nn);if(hn)return hn;this.raiseError(this,"Expected '"+Zr+"' but found '"+this.currentToken().value+"'")}peekToken(Zr,nn,hn){if(nn=nn||0,hn=hn||"IDENTIFIER",this.tokens[nn]&&this.tokens[nn].value===Zr&&this.tokens[nn].type===hn)return this.tokens[nn]}matchToken(Zr,nn){if(this.follows.indexOf(Zr)===-1&&(nn=nn||"IDENTIFIER",this.currentToken()&&this.currentToken().value===Zr&&this.currentToken().type===nn))return this.consumeToken()}consumeToken(){var Zr=this.tokens.shift();return this.consumed.push(Zr),this._lastConsumed=Zr,this.consumeWhitespace(),Zr}consumeUntil(Zr,nn){for(var hn=[],dn=this.token(0,!0);(nn==null||dn.type!==nn)&&(Zr==null||dn.value!==Zr)&&dn.type!=="EOF";){var wn=this.tokens.shift();this.consumed.push(wn),hn.push(dn),dn=this.token(0,!0)}return this.consumeWhitespace(),hn}lastWhitespace(){return this.consumed[this.consumed.length-1]&&this.consumed[this.consumed.length-1].type==="WHITESPACE"?this.consumed[this.consumed.length-1].value:""}consumeUntilWhitespace(){return this.consumeUntil(null,"WHITESPACE")}hasMore(){return this.tokens.length>0}token(Zr,nn){var hn,dn=0;do{if(!nn)for(;this.tokens[dn]&&this.tokens[dn].type==="WHITESPACE";)dn++;hn=this.tokens[dn],Zr--,dn++}while(Zr>-1);return hn||{type:"EOF",value:"<<<EOF>>>"}}currentToken(){return this.token(0)}lastMatch(){return this._lastConsumed}static sourceFor=function(){return this.programSource.substring(this.startToken.start,this.endToken.end)};static lineFor=function(){return this.programSource.split(` 5 - `)[this.startToken.line-1]};follows=[];pushFollow(Zr){this.follows.push(Zr)}popFollow(){this.follows.pop()}clearFollows(){var Zr=this.follows;return this.follows=[],Zr}restoreFollows(Zr){this.follows=Zr}}class rn{constructor(Zr){this.runtime=Zr,this.possessivesDisabled=!1,this.addGrammarElement("feature",function(nn,hn,dn){if(dn.matchOpToken("(")){var wn=nn.requireElement("feature",dn);return dn.requireOpToken(")"),wn}var vn=nn.FEATURES[dn.currentToken().value||""];if(vn)return vn(nn,hn,dn)}),this.addGrammarElement("command",function(nn,hn,dn){if(dn.matchOpToken("(")){let yn=nn.requireElement("command",dn);return dn.requireOpToken(")"),yn}var wn=nn.COMMANDS[dn.currentToken().value||""];let vn;return wn?vn=wn(nn,hn,dn):dn.currentToken().type==="IDENTIFIER"&&(vn=nn.parseElement("pseudoCommand",dn)),vn&&nn.parseElement("indirectStatement",dn,vn)}),this.addGrammarElement("commandList",function(nn,hn,dn){if(dn.hasMore()){var wn=nn.parseElement("command",dn);if(wn){dn.matchToken("then");let vn=nn.parseElement("commandList",dn);return vn&&(wn.next=vn),wn}}return{type:"emptyCommandListCommand",op:function(vn){return hn.findNext(this,vn)},execute:function(vn){return hn.unifiedExec(this,vn)}}}),this.addGrammarElement("leaf",function(nn,hn,dn){var wn=nn.parseAnyOf(nn.LEAF_EXPRESSIONS,dn);return wn??nn.parseElement("symbol",dn)}),this.addGrammarElement("indirectExpression",function(nn,hn,dn,wn){for(var vn=0;vn<nn.INDIRECT_EXPRESSIONS.length;vn++){var yn=nn.INDIRECT_EXPRESSIONS[vn];wn.endToken=dn.lastMatch();var fn=nn.parseElement(yn,dn,wn);if(fn)return fn}return wn}),this.addGrammarElement("indirectStatement",function(nn,hn,dn,wn){if(dn.matchToken("unless")){wn.endToken=dn.lastMatch();var vn=nn.requireElement("expression",dn),yn={type:"unlessStatementModifier",args:[vn],op:function(fn,An){return An?this.next:wn},execute:function(fn){return hn.unifiedExec(this,fn)}};return wn.parent=yn,yn}return wn}),this.addGrammarElement("primaryExpression",function(nn,hn,dn){var wn=nn.parseElement("leaf",dn);if(wn)return nn.parseElement("indirectExpression",dn,wn);nn.raiseParseError(dn,"Unexpected value: "+dn.currentToken().value)})}use(Zr){return Zr(this),this}GRAMMAR={};COMMANDS={};FEATURES={};LEAF_EXPRESSIONS=[];INDIRECT_EXPRESSIONS=[];initElt(Zr,nn,hn){Zr.startToken=nn,Zr.sourceFor=Jr.sourceFor,Zr.lineFor=Jr.lineFor,Zr.programSource=hn.source}parseElement(Zr,nn,hn=void 0){var dn=this.GRAMMAR[Zr];if(dn){var wn=nn.currentToken(),vn=dn(this,this.runtime,nn,hn);if(vn){this.initElt(vn,wn,nn),vn.endToken=vn.endToken||nn.lastMatch();for(var hn=vn.root;hn!=null;)this.initElt(hn,wn,nn),hn=hn.root}return vn}}requireElement(Zr,nn,hn,dn){var wn=this.parseElement(Zr,nn,dn);return wn||rn.raiseParseError(nn,hn||"Expected "+Zr),wn}parseAnyOf(Zr,nn){for(var hn=0;hn<Zr.length;hn++){var dn=Zr[hn],wn=this.parseElement(dn,nn);if(wn)return wn}}addGrammarElement(Zr,nn){this.GRAMMAR[Zr]=nn}addCommand(Zr,nn){var hn=Zr+"Command",dn=function(wn,vn,yn){let fn=nn(wn,vn,yn);if(fn)return fn.type=hn,fn.execute=function(An){return An.meta.command=fn,vn.unifiedExec(this,An)},fn};this.GRAMMAR[hn]=dn,this.COMMANDS[Zr]=dn}addFeature(Zr,nn){var hn=Zr+"Feature",dn=function(wn,vn,yn){var fn=nn(wn,vn,yn);if(fn)return fn.isFeature=!0,fn.keyword=Zr,fn.type=hn,fn};this.GRAMMAR[hn]=dn,this.FEATURES[Zr]=dn}addLeafExpression(Zr,nn){this.LEAF_EXPRESSIONS.push(Zr),this.addGrammarElement(Zr,nn)}addIndirectExpression(Zr,nn){this.INDIRECT_EXPRESSIONS.push(Zr),this.addGrammarElement(Zr,nn)}static createParserContext(Zr){var nn=Zr.currentToken(),hn=Zr.source,dn=hn.split(` 6 - `),wn=nn&&nn.line?nn.line-1:dn.length-1,vn=dn[wn],yn=nn&&nn.line?nn.column:vn.length-1;return vn+` 7 - `+" ".repeat(yn)+`^^ 1 + var Jl=Object.create;var rs=Object.defineProperty;var Zl=Object.getOwnPropertyDescriptor;var eu=Object.getOwnPropertyNames;var tu=Object.getPrototypeOf,ru=Object.prototype.hasOwnProperty;var ns=(Qr=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(Qr,{get:(Gr,Wr)=>(typeof require<"u"?require:Gr)[Wr]}):Qr)(function(Qr){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+Qr+'" is not supported')});var Ys=(Qr,Gr)=>()=>(Gr||Qr((Gr={exports:{}}).exports,Gr),Gr.exports),nu=(Qr,Gr)=>{for(var Wr in Gr)rs(Qr,Wr,{get:Gr[Wr],enumerable:!0})},iu=(Qr,Gr,Wr,Kr)=>{if(Gr&&typeof Gr=="object"||typeof Gr=="function")for(let Yr of eu(Gr))!ru.call(Qr,Yr)&&Yr!==Wr&&rs(Qr,Yr,{get:()=>Gr[Yr],enumerable:!(Kr=Zl(Gr,Yr))||Kr.enumerable});return Qr};var za=(Qr,Gr,Wr)=>(Wr=Qr!=null?Jl(tu(Qr)):{},iu(Gr||!Qr||!Qr.__esModule?rs(Wr,"default",{value:Qr,enumerable:!0}):Wr,Qr));var mo=Ys((exports,module)=>{(function(Qr,Gr){typeof define=="function"&&define.amd?define([],Gr):typeof module=="object"&&module.exports?module.exports=Gr():Qr.htmx=Qr.htmx||Gr()})(typeof self<"u"?self:exports,function(){return function(){"use strict";var Q={onLoad:F,process:zt,on:de,off:ge,trigger:ce,ajax:Nr,find:C,findAll:f,closest:v,values:function(Qr,Gr){var Wr=dr(Qr,Gr||"post");return Wr.values},remove:_,addClass:z,removeClass:n,toggleClass:$,takeClass:W,defineExtension:Ur,removeExtension:Br,logAll:V,logNone:j,logger:null,config:{historyEnabled:!0,historyCacheSize:10,refreshOnHistoryMiss:!1,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:!0,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:!0,allowScriptTags:!0,inlineScriptNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:!1,timeout:0,wsReconnectDelay:"full-jitter",wsBinaryType:"blob",disableSelector:"[hx-disable], [data-hx-disable]",useTemplateFragments:!1,scrollBehavior:"smooth",defaultFocusScroll:!1,getCacheBusterParam:!1,globalViewTransitions:!1,methodsThatUseUrlParams:["get"],selfRequestsOnly:!1,ignoreTitle:!1,scrollIntoViewOnBoost:!0,triggerSpecsCache:null},parseInterval:d,_:t,createEventSource:function(Qr){return new EventSource(Qr,{withCredentials:!0})},createWebSocket:function(Qr){var Gr=new WebSocket(Qr,[]);return Gr.binaryType=Q.config.wsBinaryType,Gr},version:"1.9.12"},r={addTriggerHandler:Lt,bodyContains:se,canAccessLocalStorage:U,findThisElement:xe,filterValues:yr,hasAttribute:o,getAttributeValue:te,getClosestAttributeValue:ne,getClosestMatch:c,getExpressionVars:Hr,getHeaders:xr,getInputValues:dr,getInternalData:ae,getSwapSpecification:wr,getTriggerSpecs:it,getTarget:ye,makeFragment:l,mergeObjects:le,makeSettleInfo:T,oobSwap:Ee,querySelectorExt:ue,selectAndSwap:je,settleImmediately:nr,shouldCancel:ut,triggerEvent:ce,triggerErrorEvent:fe,withExtensions:R},w=["get","post","put","delete","patch"],i=w.map(function(Qr){return"[hx-"+Qr+"], [data-hx-"+Qr+"]"}).join(", "),S=e("head"),q=e("title"),H=e("svg",!0);function e(Qr,Gr){return new RegExp("<"+Qr+"(\\s[^>]*>|>)([\\s\\S]*?)<\\/"+Qr+">",Gr?"gim":"im")}function d(Qr){if(Qr==null)return;let Gr=NaN;return Qr.slice(-2)=="ms"?Gr=parseFloat(Qr.slice(0,-2)):Qr.slice(-1)=="s"?Gr=parseFloat(Qr.slice(0,-1))*1e3:Qr.slice(-1)=="m"?Gr=parseFloat(Qr.slice(0,-1))*1e3*60:Gr=parseFloat(Qr),isNaN(Gr)?void 0:Gr}function ee(Qr,Gr){return Qr.getAttribute&&Qr.getAttribute(Gr)}function o(Qr,Gr){return Qr.hasAttribute&&(Qr.hasAttribute(Gr)||Qr.hasAttribute("data-"+Gr))}function te(Qr,Gr){return ee(Qr,Gr)||ee(Qr,"data-"+Gr)}function u(Qr){return Qr.parentElement}function re(){return document}function c(Qr,Gr){for(;Qr&&!Gr(Qr);)Qr=u(Qr);return Qr||null}function L(Qr,Gr,Wr){var Kr=te(Gr,Wr),Yr=te(Gr,"hx-disinherit");return Qr!==Gr&&Yr&&(Yr==="*"||Yr.split(" ").indexOf(Wr)>=0)?"unset":Kr}function ne(Qr,Gr){var Wr=null;if(c(Qr,function(Kr){return Wr=L(Qr,Kr,Gr)}),Wr!=="unset")return Wr}function h(Qr,Gr){var Wr=Qr.matches||Qr.matchesSelector||Qr.msMatchesSelector||Qr.mozMatchesSelector||Qr.webkitMatchesSelector||Qr.oMatchesSelector;return Wr&&Wr.call(Qr,Gr)}function A(Qr){var Gr=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,Wr=Gr.exec(Qr);return Wr?Wr[1].toLowerCase():""}function s(Qr,Gr){for(var Wr=new DOMParser,Kr=Wr.parseFromString(Qr,"text/html"),Yr=Kr.body;Gr>0;)Gr--,Yr=Yr.firstChild;return Yr==null&&(Yr=re().createDocumentFragment()),Yr}function N(Qr){return/<body/.test(Qr)}function l(Qr){var Gr=!N(Qr),Wr=A(Qr),Kr=Qr;if(Wr==="head"&&(Kr=Kr.replace(S,"")),Q.config.useTemplateFragments&&Gr){var Yr=s("<body><template>"+Kr+"</template></body>",0),Zr=Yr.querySelector("template").content;return Q.config.allowScriptTags?oe(Zr.querySelectorAll("script"),function(tn){Q.config.inlineScriptNonce&&(tn.nonce=Q.config.inlineScriptNonce),tn.htmxExecuted=navigator.userAgent.indexOf("Firefox")===-1}):oe(Zr.querySelectorAll("script"),function(tn){_(tn)}),Zr}switch(Wr){case"thead":case"tbody":case"tfoot":case"colgroup":case"caption":return s("<table>"+Kr+"</table>",1);case"col":return s("<table><colgroup>"+Kr+"</colgroup></table>",2);case"tr":return s("<table><tbody>"+Kr+"</tbody></table>",2);case"td":case"th":return s("<table><tbody><tr>"+Kr+"</tr></tbody></table>",3);case"script":case"style":return s("<div>"+Kr+"</div>",1);default:return s(Kr,0)}}function ie(Qr){Qr&&Qr()}function I(Qr,Gr){return Object.prototype.toString.call(Qr)==="[object "+Gr+"]"}function k(Qr){return I(Qr,"Function")}function P(Qr){return I(Qr,"Object")}function ae(Qr){var Gr="htmx-internal-data",Wr=Qr[Gr];return Wr||(Wr=Qr[Gr]={}),Wr}function M(Qr){var Gr=[];if(Qr)for(var Wr=0;Wr<Qr.length;Wr++)Gr.push(Qr[Wr]);return Gr}function oe(Qr,Gr){if(Qr)for(var Wr=0;Wr<Qr.length;Wr++)Gr(Qr[Wr])}function X(Qr){var Gr=Qr.getBoundingClientRect(),Wr=Gr.top,Kr=Gr.bottom;return Wr<window.innerHeight&&Kr>=0}function se(Qr){return Qr.getRootNode&&Qr.getRootNode()instanceof window.ShadowRoot?re().body.contains(Qr.getRootNode().host):re().body.contains(Qr)}function D(Qr){return Qr.trim().split(/\s+/)}function le(Qr,Gr){for(var Wr in Gr)Gr.hasOwnProperty(Wr)&&(Qr[Wr]=Gr[Wr]);return Qr}function E(Qr){try{return JSON.parse(Qr)}catch(Gr){return b(Gr),null}}function U(){var Qr="htmx:localStorageTest";try{return localStorage.setItem(Qr,Qr),localStorage.removeItem(Qr),!0}catch{return!1}}function B(Qr){try{var Gr=new URL(Qr);return Gr&&(Qr=Gr.pathname+Gr.search),/^\/$/.test(Qr)||(Qr=Qr.replace(/\/+$/,"")),Qr}catch{return Qr}}function t(e){return Tr(re().body,function(){return eval(e)})}function F(Qr){var Gr=Q.on("htmx:load",function(Wr){Qr(Wr.detail.elt)});return Gr}function V(){Q.logger=function(Qr,Gr,Wr){console&&console.log(Gr,Qr,Wr)}}function j(){Q.logger=null}function C(Qr,Gr){return Gr?Qr.querySelector(Gr):C(re(),Qr)}function f(Qr,Gr){return Gr?Qr.querySelectorAll(Gr):f(re(),Qr)}function _(Qr,Gr){Qr=p(Qr),Gr?setTimeout(function(){_(Qr),Qr=null},Gr):Qr.parentElement.removeChild(Qr)}function z(Qr,Gr,Wr){Qr=p(Qr),Wr?setTimeout(function(){z(Qr,Gr),Qr=null},Wr):Qr.classList&&Qr.classList.add(Gr)}function n(Qr,Gr,Wr){Qr=p(Qr),Wr?setTimeout(function(){n(Qr,Gr),Qr=null},Wr):Qr.classList&&(Qr.classList.remove(Gr),Qr.classList.length===0&&Qr.removeAttribute("class"))}function $(Qr,Gr){Qr=p(Qr),Qr.classList.toggle(Gr)}function W(Qr,Gr){Qr=p(Qr),oe(Qr.parentElement.children,function(Wr){n(Wr,Gr)}),z(Qr,Gr)}function v(Qr,Gr){if(Qr=p(Qr),Qr.closest)return Qr.closest(Gr);do if(Qr==null||h(Qr,Gr))return Qr;while(Qr=Qr&&u(Qr));return null}function g(Qr,Gr){return Qr.substring(0,Gr.length)===Gr}function G(Qr,Gr){return Qr.substring(Qr.length-Gr.length)===Gr}function J(Qr){var Gr=Qr.trim();return g(Gr,"<")&&G(Gr,"/>")?Gr.substring(1,Gr.length-2):Gr}function Z(Qr,Gr){return Gr.indexOf("closest ")===0?[v(Qr,J(Gr.substr(8)))]:Gr.indexOf("find ")===0?[C(Qr,J(Gr.substr(5)))]:Gr==="next"?[Qr.nextElementSibling]:Gr.indexOf("next ")===0?[K(Qr,J(Gr.substr(5)))]:Gr==="previous"?[Qr.previousElementSibling]:Gr.indexOf("previous ")===0?[Y(Qr,J(Gr.substr(9)))]:Gr==="document"?[document]:Gr==="window"?[window]:Gr==="body"?[document.body]:re().querySelectorAll(J(Gr))}var K=function(Qr,Gr){for(var Wr=re().querySelectorAll(Gr),Kr=0;Kr<Wr.length;Kr++){var Yr=Wr[Kr];if(Yr.compareDocumentPosition(Qr)===Node.DOCUMENT_POSITION_PRECEDING)return Yr}},Y=function(Qr,Gr){for(var Wr=re().querySelectorAll(Gr),Kr=Wr.length-1;Kr>=0;Kr--){var Yr=Wr[Kr];if(Yr.compareDocumentPosition(Qr)===Node.DOCUMENT_POSITION_FOLLOWING)return Yr}};function ue(Qr,Gr){return Gr?Z(Qr,Gr)[0]:Z(re().body,Qr)[0]}function p(Qr){return I(Qr,"String")?C(Qr):Qr}function ve(Qr,Gr,Wr){return k(Gr)?{target:re().body,event:Qr,listener:Gr}:{target:p(Qr),event:Gr,listener:Wr}}function de(Qr,Gr,Wr){jr(function(){var Yr=ve(Qr,Gr,Wr);Yr.target.addEventListener(Yr.event,Yr.listener)});var Kr=k(Gr);return Kr?Gr:Wr}function ge(Qr,Gr,Wr){return jr(function(){var Kr=ve(Qr,Gr,Wr);Kr.target.removeEventListener(Kr.event,Kr.listener)}),k(Gr)?Gr:Wr}var pe=re().createElement("output");function me(Qr,Gr){var Wr=ne(Qr,Gr);if(Wr){if(Wr==="this")return[xe(Qr,Gr)];var Kr=Z(Qr,Wr);return Kr.length===0?(b('The selector "'+Wr+'" on '+Gr+" returned no matches!"),[pe]):Kr}}function xe(Qr,Gr){return c(Qr,function(Wr){return te(Wr,Gr)!=null})}function ye(Qr){var Gr=ne(Qr,"hx-target");if(Gr)return Gr==="this"?xe(Qr,"hx-target"):ue(Qr,Gr);var Wr=ae(Qr);return Wr.boosted?re().body:Qr}function be(Qr){for(var Gr=Q.config.attributesToSettle,Wr=0;Wr<Gr.length;Wr++)if(Qr===Gr[Wr])return!0;return!1}function we(Qr,Gr){oe(Qr.attributes,function(Wr){!Gr.hasAttribute(Wr.name)&&be(Wr.name)&&Qr.removeAttribute(Wr.name)}),oe(Gr.attributes,function(Wr){be(Wr.name)&&Qr.setAttribute(Wr.name,Wr.value)})}function Se(Qr,Gr){for(var Wr=Fr(Gr),Kr=0;Kr<Wr.length;Kr++){var Yr=Wr[Kr];try{if(Yr.isInlineSwap(Qr))return!0}catch(Zr){b(Zr)}}return Qr==="outerHTML"}function Ee(Qr,Gr,Wr){var Kr="#"+ee(Gr,"id"),Yr="outerHTML";Qr==="true"||(Qr.indexOf(":")>0?(Yr=Qr.substr(0,Qr.indexOf(":")),Kr=Qr.substr(Qr.indexOf(":")+1,Qr.length)):Yr=Qr);var Zr=re().querySelectorAll(Kr);return Zr?(oe(Zr,function(tn){var ln,dn=Gr.cloneNode(!0);ln=re().createDocumentFragment(),ln.appendChild(dn),Se(Yr,tn)||(ln=dn);var yn={shouldSwap:!0,target:tn,fragment:ln};ce(tn,"htmx:oobBeforeSwap",yn)&&(tn=yn.target,yn.shouldSwap&&Fe(Yr,tn,tn,ln,Wr),oe(Wr.elts,function(Sn){ce(Sn,"htmx:oobAfterSwap",yn)}))}),Gr.parentNode.removeChild(Gr)):(Gr.parentNode.removeChild(Gr),fe(re().body,"htmx:oobErrorNoTarget",{content:Gr})),Qr}function Ce(Qr,Gr,Wr){var Kr=ne(Qr,"hx-select-oob");if(Kr)for(var Yr=Kr.split(","),Zr=0;Zr<Yr.length;Zr++){var tn=Yr[Zr].split(":",2),ln=tn[0].trim();ln.indexOf("#")===0&&(ln=ln.substring(1));var dn=tn[1]||"true",yn=Gr.querySelector("#"+ln);yn&&Ee(dn,yn,Wr)}oe(f(Gr,"[hx-swap-oob], [data-hx-swap-oob]"),function(Sn){var kn=te(Sn,"hx-swap-oob");kn!=null&&Ee(kn,Sn,Wr)})}function Re(Qr){oe(f(Qr,"[hx-preserve], [data-hx-preserve]"),function(Gr){var Wr=te(Gr,"id"),Kr=re().getElementById(Wr);Kr!=null&&Gr.parentNode.replaceChild(Kr,Gr)})}function Te(Qr,Gr,Wr){oe(Gr.querySelectorAll("[id]"),function(Kr){var Yr=ee(Kr,"id");if(Yr&&Yr.length>0){var Zr=Yr.replace("'","\\'"),tn=Kr.tagName.replace(":","\\:"),ln=Qr.querySelector(tn+"[id='"+Zr+"']");if(ln&&ln!==Qr){var dn=Kr.cloneNode();we(Kr,ln),Wr.tasks.push(function(){we(Kr,dn)})}}})}function Oe(Qr){return function(){n(Qr,Q.config.addedClass),zt(Qr),Nt(Qr),qe(Qr),ce(Qr,"htmx:load")}}function qe(Qr){var Gr="[autofocus]",Wr=h(Qr,Gr)?Qr:Qr.querySelector(Gr);Wr?.focus()}function a(Qr,Gr,Wr,Kr){for(Te(Qr,Wr,Kr);Wr.childNodes.length>0;){var Yr=Wr.firstChild;z(Yr,Q.config.addedClass),Qr.insertBefore(Yr,Gr),Yr.nodeType!==Node.TEXT_NODE&&Yr.nodeType!==Node.COMMENT_NODE&&Kr.tasks.push(Oe(Yr))}}function He(Qr,Gr){for(var Wr=0;Wr<Qr.length;)Gr=(Gr<<5)-Gr+Qr.charCodeAt(Wr++)|0;return Gr}function Le(Qr){var Gr=0;if(Qr.attributes)for(var Wr=0;Wr<Qr.attributes.length;Wr++){var Kr=Qr.attributes[Wr];Kr.value&&(Gr=He(Kr.name,Gr),Gr=He(Kr.value,Gr))}return Gr}function Ae(Qr){var Gr=ae(Qr);if(Gr.onHandlers){for(var Wr=0;Wr<Gr.onHandlers.length;Wr++){let Kr=Gr.onHandlers[Wr];Qr.removeEventListener(Kr.event,Kr.listener)}delete Gr.onHandlers}}function Ne(Qr){var Gr=ae(Qr);Gr.timeout&&clearTimeout(Gr.timeout),Gr.webSocket&&Gr.webSocket.close(),Gr.sseEventSource&&Gr.sseEventSource.close(),Gr.listenerInfos&&oe(Gr.listenerInfos,function(Wr){Wr.on&&Wr.on.removeEventListener(Wr.trigger,Wr.listener)}),Ae(Qr),oe(Object.keys(Gr),function(Wr){delete Gr[Wr]})}function m(Qr){ce(Qr,"htmx:beforeCleanupElement"),Ne(Qr),Qr.children&&oe(Qr.children,function(Gr){m(Gr)})}function Ie(Qr,Gr,Wr){if(Qr.tagName==="BODY")return Ue(Qr,Gr,Wr);var Kr,Yr=Qr.previousSibling;for(a(u(Qr),Qr,Gr,Wr),Yr==null?Kr=u(Qr).firstChild:Kr=Yr.nextSibling,Wr.elts=Wr.elts.filter(function(Zr){return Zr!=Qr});Kr&&Kr!==Qr;)Kr.nodeType===Node.ELEMENT_NODE&&Wr.elts.push(Kr),Kr=Kr.nextElementSibling;m(Qr),u(Qr).removeChild(Qr)}function ke(Qr,Gr,Wr){return a(Qr,Qr.firstChild,Gr,Wr)}function Pe(Qr,Gr,Wr){return a(u(Qr),Qr,Gr,Wr)}function Me(Qr,Gr,Wr){return a(Qr,null,Gr,Wr)}function Xe(Qr,Gr,Wr){return a(u(Qr),Qr.nextSibling,Gr,Wr)}function De(Qr,Gr,Wr){return m(Qr),u(Qr).removeChild(Qr)}function Ue(Qr,Gr,Wr){var Kr=Qr.firstChild;if(a(Qr,Kr,Gr,Wr),Kr){for(;Kr.nextSibling;)m(Kr.nextSibling),Qr.removeChild(Kr.nextSibling);m(Kr),Qr.removeChild(Kr)}}function Be(Qr,Gr,Wr){var Kr=Wr||ne(Qr,"hx-select");if(Kr){var Yr=re().createDocumentFragment();oe(Gr.querySelectorAll(Kr),function(Zr){Yr.appendChild(Zr)}),Gr=Yr}return Gr}function Fe(Qr,Gr,Wr,Kr,Yr){switch(Qr){case"none":return;case"outerHTML":Ie(Wr,Kr,Yr);return;case"afterbegin":ke(Wr,Kr,Yr);return;case"beforebegin":Pe(Wr,Kr,Yr);return;case"beforeend":Me(Wr,Kr,Yr);return;case"afterend":Xe(Wr,Kr,Yr);return;case"delete":De(Wr,Kr,Yr);return;default:for(var Zr=Fr(Gr),tn=0;tn<Zr.length;tn++){var ln=Zr[tn];try{var dn=ln.handleSwap(Qr,Wr,Kr,Yr);if(dn){if(typeof dn.length<"u")for(var yn=0;yn<dn.length;yn++){var Sn=dn[yn];Sn.nodeType!==Node.TEXT_NODE&&Sn.nodeType!==Node.COMMENT_NODE&&Yr.tasks.push(Oe(Sn))}return}}catch(kn){b(kn)}}Qr==="innerHTML"?Ue(Wr,Kr,Yr):Fe(Q.config.defaultSwapStyle,Gr,Wr,Kr,Yr)}}function Ve(Qr){if(Qr.indexOf("<title")>-1){var Gr=Qr.replace(H,""),Wr=Gr.match(q);if(Wr)return Wr[2]}}function je(Qr,Gr,Wr,Kr,Yr,Zr){Yr.title=Ve(Kr);var tn=l(Kr);if(tn)return Ce(Wr,tn,Yr),tn=Be(Wr,tn,Zr),Re(tn),Fe(Qr,Wr,Gr,tn,Yr)}function _e(Qr,Gr,Wr){var Kr=Qr.getResponseHeader(Gr);if(Kr.indexOf("{")===0){var Yr=E(Kr);for(var Zr in Yr)if(Yr.hasOwnProperty(Zr)){var tn=Yr[Zr];P(tn)||(tn={value:tn}),ce(Wr,Zr,tn)}}else for(var ln=Kr.split(","),dn=0;dn<ln.length;dn++)ce(Wr,ln[dn].trim(),[])}var ze=/\s/,x=/[\s,]/,$e=/[_$a-zA-Z]/,We=/[_$a-zA-Z0-9]/,Ge=['"',"'","/"],Je=/[^\s]/,Ze=/[{(]/,Ke=/[})]/;function Ye(Qr){for(var Gr=[],Wr=0;Wr<Qr.length;){if($e.exec(Qr.charAt(Wr))){for(var Kr=Wr;We.exec(Qr.charAt(Wr+1));)Wr++;Gr.push(Qr.substr(Kr,Wr-Kr+1))}else if(Ge.indexOf(Qr.charAt(Wr))!==-1){var Yr=Qr.charAt(Wr),Kr=Wr;for(Wr++;Wr<Qr.length&&Qr.charAt(Wr)!==Yr;)Qr.charAt(Wr)==="\\"&&Wr++,Wr++;Gr.push(Qr.substr(Kr,Wr-Kr+1))}else{var Zr=Qr.charAt(Wr);Gr.push(Zr)}Wr++}return Gr}function Qe(Qr,Gr,Wr){return $e.exec(Qr.charAt(0))&&Qr!=="true"&&Qr!=="false"&&Qr!=="this"&&Qr!==Wr&&Gr!=="."}function et(Qr,Gr,Wr){if(Gr[0]==="["){Gr.shift();for(var Kr=1,Yr=" return (function("+Wr+"){ return (",Zr=null;Gr.length>0;){var tn=Gr[0];if(tn==="]"){if(Kr--,Kr===0){Zr===null&&(Yr=Yr+"true"),Gr.shift(),Yr+=")})";try{var ln=Tr(Qr,function(){return Function(Yr)()},function(){return!0});return ln.source=Yr,ln}catch(dn){return fe(re().body,"htmx:syntax:error",{error:dn,source:Yr}),null}}}else tn==="["&&Kr++;Qe(tn,Zr,Wr)?Yr+="(("+Wr+"."+tn+") ? ("+Wr+"."+tn+") : (window."+tn+"))":Yr=Yr+tn,Zr=Gr.shift()}}}function y(Qr,Gr){for(var Wr="";Qr.length>0&&!Gr.test(Qr[0]);)Wr+=Qr.shift();return Wr}function tt(Qr){var Gr;return Qr.length>0&&Ze.test(Qr[0])?(Qr.shift(),Gr=y(Qr,Ke).trim(),Qr.shift()):Gr=y(Qr,x),Gr}var rt="input, textarea, select";function nt(Qr,Gr,Wr){var Kr=[],Yr=Ye(Gr);do{y(Yr,Je);var Zr=Yr.length,tn=y(Yr,/[,\[\s]/);if(tn!=="")if(tn==="every"){var ln={trigger:"every"};y(Yr,Je),ln.pollInterval=d(y(Yr,/[,\[\s]/)),y(Yr,Je);var dn=et(Qr,Yr,"event");dn&&(ln.eventFilter=dn),Kr.push(ln)}else if(tn.indexOf("sse:")===0)Kr.push({trigger:"sse",sseEvent:tn.substr(4)});else{var yn={trigger:tn},dn=et(Qr,Yr,"event");for(dn&&(yn.eventFilter=dn);Yr.length>0&&Yr[0]!==",";){y(Yr,Je);var Sn=Yr.shift();if(Sn==="changed")yn.changed=!0;else if(Sn==="once")yn.once=!0;else if(Sn==="consume")yn.consume=!0;else if(Sn==="delay"&&Yr[0]===":")Yr.shift(),yn.delay=d(y(Yr,x));else if(Sn==="from"&&Yr[0]===":"){if(Yr.shift(),Ze.test(Yr[0]))var kn=tt(Yr);else{var kn=y(Yr,x);if(kn==="closest"||kn==="find"||kn==="next"||kn==="previous"){Yr.shift();var An=tt(Yr);An.length>0&&(kn+=" "+An)}}yn.from=kn}else Sn==="target"&&Yr[0]===":"?(Yr.shift(),yn.target=tt(Yr)):Sn==="throttle"&&Yr[0]===":"?(Yr.shift(),yn.throttle=d(y(Yr,x))):Sn==="queue"&&Yr[0]===":"?(Yr.shift(),yn.queue=y(Yr,x)):Sn==="root"&&Yr[0]===":"?(Yr.shift(),yn[Sn]=tt(Yr)):Sn==="threshold"&&Yr[0]===":"?(Yr.shift(),yn[Sn]=y(Yr,x)):fe(Qr,"htmx:syntax:error",{token:Yr.shift()})}Kr.push(yn)}Yr.length===Zr&&fe(Qr,"htmx:syntax:error",{token:Yr.shift()}),y(Yr,Je)}while(Yr[0]===","&&Yr.shift());return Wr&&(Wr[Gr]=Kr),Kr}function it(Qr){var Gr=te(Qr,"hx-trigger"),Wr=[];if(Gr){var Kr=Q.config.triggerSpecsCache;Wr=Kr&&Kr[Gr]||nt(Qr,Gr,Kr)}return Wr.length>0?Wr:h(Qr,"form")?[{trigger:"submit"}]:h(Qr,'input[type="button"], input[type="submit"]')?[{trigger:"click"}]:h(Qr,rt)?[{trigger:"change"}]:[{trigger:"click"}]}function at(Qr){ae(Qr).cancelled=!0}function ot(Qr,Gr,Wr){var Kr=ae(Qr);Kr.timeout=setTimeout(function(){se(Qr)&&Kr.cancelled!==!0&&(ct(Wr,Qr,Wt("hx:poll:trigger",{triggerSpec:Wr,target:Qr}))||Gr(Qr),ot(Qr,Gr,Wr))},Wr.pollInterval)}function st(Qr){return location.hostname===Qr.hostname&&ee(Qr,"href")&&ee(Qr,"href").indexOf("#")!==0}function lt(Qr,Gr,Wr){if(Qr.tagName==="A"&&st(Qr)&&(Qr.target===""||Qr.target==="_self")||Qr.tagName==="FORM"){Gr.boosted=!0;var Kr,Yr;if(Qr.tagName==="A")Kr="get",Yr=ee(Qr,"href");else{var Zr=ee(Qr,"method");Kr=Zr?Zr.toLowerCase():"get",Yr=ee(Qr,"action")}Wr.forEach(function(tn){ht(Qr,function(ln,dn){if(v(ln,Q.config.disableSelector)){m(ln);return}he(Kr,Yr,ln,dn)},Gr,tn,!0)})}}function ut(Qr,Gr){return!!((Qr.type==="submit"||Qr.type==="click")&&(Gr.tagName==="FORM"||h(Gr,'input[type="submit"], button')&&v(Gr,"form")!==null||Gr.tagName==="A"&&Gr.href&&(Gr.getAttribute("href")==="#"||Gr.getAttribute("href").indexOf("#")!==0)))}function ft(Qr,Gr){return ae(Qr).boosted&&Qr.tagName==="A"&&Gr.type==="click"&&(Gr.ctrlKey||Gr.metaKey)}function ct(Qr,Gr,Wr){var Kr=Qr.eventFilter;if(Kr)try{return Kr.call(Gr,Wr)!==!0}catch(Yr){return fe(re().body,"htmx:eventFilter:error",{error:Yr,source:Kr.source}),!0}return!1}function ht(Qr,Gr,Wr,Kr,Yr){var Zr=ae(Qr),tn;Kr.from?tn=Z(Qr,Kr.from):tn=[Qr],Kr.changed&&tn.forEach(function(ln){var dn=ae(ln);dn.lastValue=ln.value}),oe(tn,function(ln){var dn=function(yn){if(!se(Qr)){ln.removeEventListener(Kr.trigger,dn);return}if(!ft(Qr,yn)&&((Yr||ut(yn,Qr))&&yn.preventDefault(),!ct(Kr,Qr,yn))){var Sn=ae(yn);if(Sn.triggerSpec=Kr,Sn.handledFor==null&&(Sn.handledFor=[]),Sn.handledFor.indexOf(Qr)<0){if(Sn.handledFor.push(Qr),Kr.consume&&yn.stopPropagation(),Kr.target&&yn.target&&!h(yn.target,Kr.target))return;if(Kr.once){if(Zr.triggeredOnce)return;Zr.triggeredOnce=!0}if(Kr.changed){var kn=ae(ln);if(kn.lastValue===ln.value)return;kn.lastValue=ln.value}if(Zr.delayed&&clearTimeout(Zr.delayed),Zr.throttle)return;Kr.throttle>0?Zr.throttle||(Gr(Qr,yn),Zr.throttle=setTimeout(function(){Zr.throttle=null},Kr.throttle)):Kr.delay>0?Zr.delayed=setTimeout(function(){Gr(Qr,yn)},Kr.delay):(ce(Qr,"htmx:trigger"),Gr(Qr,yn))}}};Wr.listenerInfos==null&&(Wr.listenerInfos=[]),Wr.listenerInfos.push({trigger:Kr.trigger,listener:dn,on:ln}),ln.addEventListener(Kr.trigger,dn)})}var vt=!1,dt=null;function gt(){dt||(dt=function(){vt=!0},window.addEventListener("scroll",dt),setInterval(function(){vt&&(vt=!1,oe(re().querySelectorAll("[hx-trigger='revealed'],[data-hx-trigger='revealed']"),function(Qr){pt(Qr)}))},200))}function pt(Qr){if(!o(Qr,"data-hx-revealed")&&X(Qr)){Qr.setAttribute("data-hx-revealed","true");var Gr=ae(Qr);Gr.initHash?ce(Qr,"revealed"):Qr.addEventListener("htmx:afterProcessNode",function(Wr){ce(Qr,"revealed")},{once:!0})}}function mt(Qr,Gr,Wr){for(var Kr=D(Wr),Yr=0;Yr<Kr.length;Yr++){var Zr=Kr[Yr].split(/:(.+)/);Zr[0]==="connect"&&xt(Qr,Zr[1],0),Zr[0]==="send"&&bt(Qr)}}function xt(Qr,Gr,Wr){if(se(Qr)){if(Gr.indexOf("/")==0){var Kr=location.hostname+(location.port?":"+location.port:"");location.protocol=="https:"?Gr="wss://"+Kr+Gr:location.protocol=="http:"&&(Gr="ws://"+Kr+Gr)}var Yr=Q.createWebSocket(Gr);Yr.onerror=function(Zr){fe(Qr,"htmx:wsError",{error:Zr,socket:Yr}),yt(Qr)},Yr.onclose=function(Zr){if([1006,1012,1013].indexOf(Zr.code)>=0){var tn=wt(Wr);setTimeout(function(){xt(Qr,Gr,Wr+1)},tn)}},Yr.onopen=function(Zr){Wr=0},ae(Qr).webSocket=Yr,Yr.addEventListener("message",function(Zr){if(!yt(Qr)){var tn=Zr.data;R(Qr,function(An){tn=An.transformResponse(tn,null,Qr)});for(var ln=T(Qr),dn=l(tn),yn=M(dn.children),Sn=0;Sn<yn.length;Sn++){var kn=yn[Sn];Ee(te(kn,"hx-swap-oob")||"true",kn,ln)}nr(ln.tasks)}})}}function yt(Qr){if(!se(Qr))return ae(Qr).webSocket.close(),!0}function bt(Qr){var Gr=c(Qr,function(Wr){return ae(Wr).webSocket!=null});Gr?Qr.addEventListener(it(Qr)[0].trigger,function(Wr){var Kr=ae(Gr).webSocket,Yr=xr(Qr,Gr),Zr=dr(Qr,"post"),tn=Zr.errors,ln=Zr.values,dn=Hr(Qr),yn=le(ln,dn),Sn=yr(yn,Qr);if(Sn.HEADERS=Yr,tn&&tn.length>0){ce(Qr,"htmx:validation:halted",tn);return}Kr.send(JSON.stringify(Sn)),ut(Wr,Qr)&&Wr.preventDefault()}):fe(Qr,"htmx:noWebSocketSourceError")}function wt(Qr){var Gr=Q.config.wsReconnectDelay;if(typeof Gr=="function")return Gr(Qr);if(Gr==="full-jitter"){var Wr=Math.min(Qr,6),Kr=1e3*Math.pow(2,Wr);return Kr*Math.random()}b('htmx.config.wsReconnectDelay must either be a function or the string "full-jitter"')}function St(Qr,Gr,Wr){for(var Kr=D(Wr),Yr=0;Yr<Kr.length;Yr++){var Zr=Kr[Yr].split(/:(.+)/);Zr[0]==="connect"&&Et(Qr,Zr[1]),Zr[0]==="swap"&&Ct(Qr,Zr[1])}}function Et(Qr,Gr){var Wr=Q.createEventSource(Gr);Wr.onerror=function(Kr){fe(Qr,"htmx:sseError",{error:Kr,source:Wr}),Tt(Qr)},ae(Qr).sseEventSource=Wr}function Ct(Qr,Gr){var Wr=c(Qr,Ot);if(Wr){var Kr=ae(Wr).sseEventSource,Yr=function(Zr){if(!Tt(Wr)){if(!se(Qr)){Kr.removeEventListener(Gr,Yr);return}var tn=Zr.data;R(Qr,function(Sn){tn=Sn.transformResponse(tn,null,Qr)});var ln=wr(Qr),dn=ye(Qr),yn=T(Qr);je(ln.swapStyle,dn,Qr,tn,yn),nr(yn.tasks),ce(Qr,"htmx:sseMessage",Zr)}};ae(Qr).sseListener=Yr,Kr.addEventListener(Gr,Yr)}else fe(Qr,"htmx:noSSESourceError")}function Rt(Qr,Gr,Wr){var Kr=c(Qr,Ot);if(Kr){var Yr=ae(Kr).sseEventSource,Zr=function(){Tt(Kr)||(se(Qr)?Gr(Qr):Yr.removeEventListener(Wr,Zr))};ae(Qr).sseListener=Zr,Yr.addEventListener(Wr,Zr)}else fe(Qr,"htmx:noSSESourceError")}function Tt(Qr){if(!se(Qr))return ae(Qr).sseEventSource.close(),!0}function Ot(Qr){return ae(Qr).sseEventSource!=null}function qt(Qr,Gr,Wr,Kr){var Yr=function(){Wr.loaded||(Wr.loaded=!0,Gr(Qr))};Kr>0?setTimeout(Yr,Kr):Yr()}function Ht(Qr,Gr,Wr){var Kr=!1;return oe(w,function(Yr){if(o(Qr,"hx-"+Yr)){var Zr=te(Qr,"hx-"+Yr);Kr=!0,Gr.path=Zr,Gr.verb=Yr,Wr.forEach(function(tn){Lt(Qr,tn,Gr,function(ln,dn){if(v(ln,Q.config.disableSelector)){m(ln);return}he(Yr,Zr,ln,dn)})})}}),Kr}function Lt(Qr,Gr,Wr,Kr){if(Gr.sseEvent)Rt(Qr,Kr,Gr.sseEvent);else if(Gr.trigger==="revealed")gt(),ht(Qr,Kr,Wr,Gr),pt(Qr);else if(Gr.trigger==="intersect"){var Yr={};Gr.root&&(Yr.root=ue(Qr,Gr.root)),Gr.threshold&&(Yr.threshold=parseFloat(Gr.threshold));var Zr=new IntersectionObserver(function(tn){for(var ln=0;ln<tn.length;ln++){var dn=tn[ln];if(dn.isIntersecting){ce(Qr,"intersect");break}}},Yr);Zr.observe(Qr),ht(Qr,Kr,Wr,Gr)}else Gr.trigger==="load"?ct(Gr,Qr,Wt("load",{elt:Qr}))||qt(Qr,Kr,Wr,Gr.delay):Gr.pollInterval>0?(Wr.polling=!0,ot(Qr,Kr,Gr)):ht(Qr,Kr,Wr,Gr)}function At(Qr){if(!Qr.htmxExecuted&&Q.config.allowScriptTags&&(Qr.type==="text/javascript"||Qr.type==="module"||Qr.type==="")){var Gr=re().createElement("script");oe(Qr.attributes,function(Kr){Gr.setAttribute(Kr.name,Kr.value)}),Gr.textContent=Qr.textContent,Gr.async=!1,Q.config.inlineScriptNonce&&(Gr.nonce=Q.config.inlineScriptNonce);var Wr=Qr.parentElement;try{Wr.insertBefore(Gr,Qr)}catch(Kr){b(Kr)}finally{Qr.parentElement&&Qr.parentElement.removeChild(Qr)}}}function Nt(Qr){h(Qr,"script")&&At(Qr),oe(f(Qr,"script"),function(Gr){At(Gr)})}function It(Qr){var Gr=Qr.attributes;if(!Gr)return!1;for(var Wr=0;Wr<Gr.length;Wr++){var Kr=Gr[Wr].name;if(g(Kr,"hx-on:")||g(Kr,"data-hx-on:")||g(Kr,"hx-on-")||g(Kr,"data-hx-on-"))return!0}return!1}function kt(Qr){var Gr=null,Wr=[];if(It(Qr)&&Wr.push(Qr),document.evaluate)for(var Kr=document.evaluate('.//*[@*[ starts-with(name(), "hx-on:") or starts-with(name(), "data-hx-on:") or starts-with(name(), "hx-on-") or starts-with(name(), "data-hx-on-") ]]',Qr);Gr=Kr.iterateNext();)Wr.push(Gr);else if(typeof Qr.getElementsByTagName=="function")for(var Yr=Qr.getElementsByTagName("*"),Zr=0;Zr<Yr.length;Zr++)It(Yr[Zr])&&Wr.push(Yr[Zr]);return Wr}function Pt(Qr){if(Qr.querySelectorAll){var Gr=", [hx-boost] a, [data-hx-boost] a, a[hx-boost], a[data-hx-boost]",Wr=Qr.querySelectorAll(i+Gr+", form, [type='submit'], [hx-sse], [data-hx-sse], [hx-ws], [data-hx-ws], [hx-ext], [data-hx-ext], [hx-trigger], [data-hx-trigger], [hx-on], [data-hx-on]");return Wr}else return[]}function Mt(Qr){var Gr=v(Qr.target,"button, input[type='submit']"),Wr=Dt(Qr);Wr&&(Wr.lastButtonClicked=Gr)}function Xt(Qr){var Gr=Dt(Qr);Gr&&(Gr.lastButtonClicked=null)}function Dt(Qr){var Gr=v(Qr.target,"button, input[type='submit']");if(Gr){var Wr=p("#"+ee(Gr,"form"))||v(Gr,"form");if(Wr)return ae(Wr)}}function Ut(Qr){Qr.addEventListener("click",Mt),Qr.addEventListener("focusin",Mt),Qr.addEventListener("focusout",Xt)}function Bt(Qr){for(var Gr=Ye(Qr),Wr=0,Kr=0;Kr<Gr.length;Kr++){let Yr=Gr[Kr];Yr==="{"?Wr++:Yr==="}"&&Wr--}return Wr}function Ft(Qr,Gr,Wr){var Kr=ae(Qr);Array.isArray(Kr.onHandlers)||(Kr.onHandlers=[]);var Yr,Zr=function(tn){return Tr(Qr,function(){Yr||(Yr=new Function("event",Wr)),Yr.call(Qr,tn)})};Qr.addEventListener(Gr,Zr),Kr.onHandlers.push({event:Gr,listener:Zr})}function Vt(Qr){var Gr=te(Qr,"hx-on");if(Gr){for(var Wr={},Kr=Gr.split(` 2 + `),Yr=null,Zr=0;Kr.length>0;){var tn=Kr.shift(),ln=tn.match(/^\s*([a-zA-Z:\-\.]+:)(.*)/);Zr===0&&ln?(tn.split(":"),Yr=ln[1].slice(0,-1),Wr[Yr]=ln[2]):Wr[Yr]+=tn,Zr+=Bt(tn)}for(var dn in Wr)Ft(Qr,dn,Wr[dn])}}function jt(Qr){Ae(Qr);for(var Gr=0;Gr<Qr.attributes.length;Gr++){var Wr=Qr.attributes[Gr].name,Kr=Qr.attributes[Gr].value;if(g(Wr,"hx-on")||g(Wr,"data-hx-on")){var Yr=Wr.indexOf("-on")+3,Zr=Wr.slice(Yr,Yr+1);if(Zr==="-"||Zr===":"){var tn=Wr.slice(Yr+1);g(tn,":")?tn="htmx"+tn:g(tn,"-")?tn="htmx:"+tn.slice(1):g(tn,"htmx-")&&(tn="htmx:"+tn.slice(5)),Ft(Qr,tn,Kr)}}}}function _t(Qr){if(v(Qr,Q.config.disableSelector)){m(Qr);return}var Gr=ae(Qr);if(Gr.initHash!==Le(Qr)){Ne(Qr),Gr.initHash=Le(Qr),Vt(Qr),ce(Qr,"htmx:beforeProcessNode"),Qr.value&&(Gr.lastValue=Qr.value);var Wr=it(Qr),Kr=Ht(Qr,Gr,Wr);Kr||(ne(Qr,"hx-boost")==="true"?lt(Qr,Gr,Wr):o(Qr,"hx-trigger")&&Wr.forEach(function(tn){Lt(Qr,tn,Gr,function(){})})),(Qr.tagName==="FORM"||ee(Qr,"type")==="submit"&&o(Qr,"form"))&&Ut(Qr);var Yr=te(Qr,"hx-sse");Yr&&St(Qr,Gr,Yr);var Zr=te(Qr,"hx-ws");Zr&&mt(Qr,Gr,Zr),ce(Qr,"htmx:afterProcessNode")}}function zt(Qr){if(Qr=p(Qr),v(Qr,Q.config.disableSelector)){m(Qr);return}_t(Qr),oe(Pt(Qr),function(Gr){_t(Gr)}),oe(kt(Qr),jt)}function $t(Qr){return Qr.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}function Wt(Qr,Gr){var Wr;return window.CustomEvent&&typeof window.CustomEvent=="function"?Wr=new CustomEvent(Qr,{bubbles:!0,cancelable:!0,detail:Gr}):(Wr=re().createEvent("CustomEvent"),Wr.initCustomEvent(Qr,!0,!0,Gr)),Wr}function fe(Qr,Gr,Wr){ce(Qr,Gr,le({error:Gr},Wr))}function Gt(Qr){return Qr==="htmx:afterProcessNode"}function R(Qr,Gr){oe(Fr(Qr),function(Wr){try{Gr(Wr)}catch(Kr){b(Kr)}})}function b(Qr){console.error?console.error(Qr):console.log&&console.log("ERROR: ",Qr)}function ce(Qr,Gr,Wr){Qr=p(Qr),Wr==null&&(Wr={}),Wr.elt=Qr;var Kr=Wt(Gr,Wr);Q.logger&&!Gt(Gr)&&Q.logger(Qr,Gr,Wr),Wr.error&&(b(Wr.error),ce(Qr,"htmx:error",{errorInfo:Wr}));var Yr=Qr.dispatchEvent(Kr),Zr=$t(Gr);if(Yr&&Zr!==Gr){var tn=Wt(Zr,Kr.detail);Yr=Yr&&Qr.dispatchEvent(tn)}return R(Qr,function(ln){Yr=Yr&&ln.onEvent(Gr,Kr)!==!1&&!Kr.defaultPrevented}),Yr}var Jt=location.pathname+location.search;function Zt(){var Qr=re().querySelector("[hx-history-elt],[data-hx-history-elt]");return Qr||re().body}function Kt(Qr,Gr,Wr,Kr){if(U()){if(Q.config.historyCacheSize<=0){localStorage.removeItem("htmx-history-cache");return}Qr=B(Qr);for(var Yr=E(localStorage.getItem("htmx-history-cache"))||[],Zr=0;Zr<Yr.length;Zr++)if(Yr[Zr].url===Qr){Yr.splice(Zr,1);break}var tn={url:Qr,content:Gr,title:Wr,scroll:Kr};for(ce(re().body,"htmx:historyItemCreated",{item:tn,cache:Yr}),Yr.push(tn);Yr.length>Q.config.historyCacheSize;)Yr.shift();for(;Yr.length>0;)try{localStorage.setItem("htmx-history-cache",JSON.stringify(Yr));break}catch(ln){fe(re().body,"htmx:historyCacheError",{cause:ln,cache:Yr}),Yr.shift()}}}function Yt(Qr){if(!U())return null;Qr=B(Qr);for(var Gr=E(localStorage.getItem("htmx-history-cache"))||[],Wr=0;Wr<Gr.length;Wr++)if(Gr[Wr].url===Qr)return Gr[Wr];return null}function Qt(Qr){var Gr=Q.config.requestClass,Wr=Qr.cloneNode(!0);return oe(f(Wr,"."+Gr),function(Kr){n(Kr,Gr)}),Wr.innerHTML}function er(){var Qr=Zt(),Gr=Jt||location.pathname+location.search,Wr;try{Wr=re().querySelector('[hx-history="false" i],[data-hx-history="false" i]')}catch{Wr=re().querySelector('[hx-history="false"],[data-hx-history="false"]')}Wr||(ce(re().body,"htmx:beforeHistorySave",{path:Gr,historyElt:Qr}),Kt(Gr,Qt(Qr),re().title,window.scrollY)),Q.config.historyEnabled&&history.replaceState({htmx:!0},re().title,window.location.href)}function tr(Qr){Q.config.getCacheBusterParam&&(Qr=Qr.replace(/org\.htmx\.cache-buster=[^&]*&?/,""),(G(Qr,"&")||G(Qr,"?"))&&(Qr=Qr.slice(0,-1))),Q.config.historyEnabled&&history.pushState({htmx:!0},"",Qr),Jt=Qr}function rr(Qr){Q.config.historyEnabled&&history.replaceState({htmx:!0},"",Qr),Jt=Qr}function nr(Qr){oe(Qr,function(Gr){Gr.call()})}function ir(Qr){var Gr=new XMLHttpRequest,Wr={path:Qr,xhr:Gr};ce(re().body,"htmx:historyCacheMiss",Wr),Gr.open("GET",Qr,!0),Gr.setRequestHeader("HX-Request","true"),Gr.setRequestHeader("HX-History-Restore-Request","true"),Gr.setRequestHeader("HX-Current-URL",re().location.href),Gr.onload=function(){if(this.status>=200&&this.status<400){ce(re().body,"htmx:historyCacheMissLoad",Wr);var Kr=l(this.response);Kr=Kr.querySelector("[hx-history-elt],[data-hx-history-elt]")||Kr;var Yr=Zt(),Zr=T(Yr),tn=Ve(this.response);if(tn){var ln=C("title");ln?ln.innerHTML=tn:window.document.title=tn}Ue(Yr,Kr,Zr),nr(Zr.tasks),Jt=Qr,ce(re().body,"htmx:historyRestore",{path:Qr,cacheMiss:!0,serverResponse:this.response})}else fe(re().body,"htmx:historyCacheMissLoadError",Wr)},Gr.send()}function ar(Qr){er(),Qr=Qr||location.pathname+location.search;var Gr=Yt(Qr);if(Gr){var Wr=l(Gr.content),Kr=Zt(),Yr=T(Kr);Ue(Kr,Wr,Yr),nr(Yr.tasks),document.title=Gr.title,setTimeout(function(){window.scrollTo(0,Gr.scroll)},0),Jt=Qr,ce(re().body,"htmx:historyRestore",{path:Qr,item:Gr})}else Q.config.refreshOnHistoryMiss?window.location.reload(!0):ir(Qr)}function or(Qr){var Gr=me(Qr,"hx-indicator");return Gr==null&&(Gr=[Qr]),oe(Gr,function(Wr){var Kr=ae(Wr);Kr.requestCount=(Kr.requestCount||0)+1,Wr.classList.add.call(Wr.classList,Q.config.requestClass)}),Gr}function sr(Qr){var Gr=me(Qr,"hx-disabled-elt");return Gr==null&&(Gr=[]),oe(Gr,function(Wr){var Kr=ae(Wr);Kr.requestCount=(Kr.requestCount||0)+1,Wr.setAttribute("disabled","")}),Gr}function lr(Qr,Gr){oe(Qr,function(Wr){var Kr=ae(Wr);Kr.requestCount=(Kr.requestCount||0)-1,Kr.requestCount===0&&Wr.classList.remove.call(Wr.classList,Q.config.requestClass)}),oe(Gr,function(Wr){var Kr=ae(Wr);Kr.requestCount=(Kr.requestCount||0)-1,Kr.requestCount===0&&Wr.removeAttribute("disabled")})}function ur(Qr,Gr){for(var Wr=0;Wr<Qr.length;Wr++){var Kr=Qr[Wr];if(Kr.isSameNode(Gr))return!0}return!1}function fr(Qr){return Qr.name===""||Qr.name==null||Qr.disabled||v(Qr,"fieldset[disabled]")||Qr.type==="button"||Qr.type==="submit"||Qr.tagName==="image"||Qr.tagName==="reset"||Qr.tagName==="file"?!1:Qr.type==="checkbox"||Qr.type==="radio"?Qr.checked:!0}function cr(Qr,Gr,Wr){if(Qr!=null&&Gr!=null){var Kr=Wr[Qr];Kr===void 0?Wr[Qr]=Gr:Array.isArray(Kr)?Array.isArray(Gr)?Wr[Qr]=Kr.concat(Gr):Kr.push(Gr):Array.isArray(Gr)?Wr[Qr]=[Kr].concat(Gr):Wr[Qr]=[Kr,Gr]}}function hr(Qr,Gr,Wr,Kr,Yr){if(!(Kr==null||ur(Qr,Kr))){if(Qr.push(Kr),fr(Kr)){var Zr=ee(Kr,"name"),tn=Kr.value;Kr.multiple&&Kr.tagName==="SELECT"&&(tn=M(Kr.querySelectorAll("option:checked")).map(function(dn){return dn.value})),Kr.files&&(tn=M(Kr.files)),cr(Zr,tn,Gr),Yr&&vr(Kr,Wr)}if(h(Kr,"form")){var ln=Kr.elements;oe(ln,function(dn){hr(Qr,Gr,Wr,dn,Yr)})}}}function vr(Qr,Gr){Qr.willValidate&&(ce(Qr,"htmx:validation:validate"),Qr.checkValidity()||(Gr.push({elt:Qr,message:Qr.validationMessage,validity:Qr.validity}),ce(Qr,"htmx:validation:failed",{message:Qr.validationMessage,validity:Qr.validity})))}function dr(Qr,Gr){var Wr=[],Kr={},Yr={},Zr=[],tn=ae(Qr);tn.lastButtonClicked&&!se(tn.lastButtonClicked)&&(tn.lastButtonClicked=null);var ln=h(Qr,"form")&&Qr.noValidate!==!0||te(Qr,"hx-validate")==="true";if(tn.lastButtonClicked&&(ln=ln&&tn.lastButtonClicked.formNoValidate!==!0),Gr!=="get"&&hr(Wr,Yr,Zr,v(Qr,"form"),ln),hr(Wr,Kr,Zr,Qr,ln),tn.lastButtonClicked||Qr.tagName==="BUTTON"||Qr.tagName==="INPUT"&&ee(Qr,"type")==="submit"){var dn=tn.lastButtonClicked||Qr,yn=ee(dn,"name");cr(yn,dn.value,Yr)}var Sn=me(Qr,"hx-include");return oe(Sn,function(kn){hr(Wr,Kr,Zr,kn,ln),h(kn,"form")||oe(kn.querySelectorAll(rt),function(An){hr(Wr,Kr,Zr,An,ln)})}),Kr=le(Kr,Yr),{errors:Zr,values:Kr}}function gr(Qr,Gr,Wr){Qr!==""&&(Qr+="&"),String(Wr)==="[object Object]"&&(Wr=JSON.stringify(Wr));var Kr=encodeURIComponent(Wr);return Qr+=encodeURIComponent(Gr)+"="+Kr,Qr}function pr(Qr){var Gr="";for(var Wr in Qr)if(Qr.hasOwnProperty(Wr)){var Kr=Qr[Wr];Array.isArray(Kr)?oe(Kr,function(Yr){Gr=gr(Gr,Wr,Yr)}):Gr=gr(Gr,Wr,Kr)}return Gr}function mr(Qr){var Gr=new FormData;for(var Wr in Qr)if(Qr.hasOwnProperty(Wr)){var Kr=Qr[Wr];Array.isArray(Kr)?oe(Kr,function(Yr){Gr.append(Wr,Yr)}):Gr.append(Wr,Kr)}return Gr}function xr(Qr,Gr,Wr){var Kr={"HX-Request":"true","HX-Trigger":ee(Qr,"id"),"HX-Trigger-Name":ee(Qr,"name"),"HX-Target":te(Gr,"id"),"HX-Current-URL":re().location.href};return Rr(Qr,"hx-headers",!1,Kr),Wr!==void 0&&(Kr["HX-Prompt"]=Wr),ae(Qr).boosted&&(Kr["HX-Boosted"]="true"),Kr}function yr(Qr,Gr){var Wr=ne(Gr,"hx-params");if(Wr){if(Wr==="none")return{};if(Wr==="*")return Qr;if(Wr.indexOf("not ")===0)return oe(Wr.substr(4).split(","),function(Yr){Yr=Yr.trim(),delete Qr[Yr]}),Qr;var Kr={};return oe(Wr.split(","),function(Yr){Yr=Yr.trim(),Kr[Yr]=Qr[Yr]}),Kr}else return Qr}function br(Qr){return ee(Qr,"href")&&ee(Qr,"href").indexOf("#")>=0}function wr(Qr,Gr){var Wr=Gr||ne(Qr,"hx-swap"),Kr={swapStyle:ae(Qr).boosted?"innerHTML":Q.config.defaultSwapStyle,swapDelay:Q.config.defaultSwapDelay,settleDelay:Q.config.defaultSettleDelay};if(Q.config.scrollIntoViewOnBoost&&ae(Qr).boosted&&!br(Qr)&&(Kr.show="top"),Wr){var Yr=D(Wr);if(Yr.length>0)for(var Zr=0;Zr<Yr.length;Zr++){var tn=Yr[Zr];if(tn.indexOf("swap:")===0)Kr.swapDelay=d(tn.substr(5));else if(tn.indexOf("settle:")===0)Kr.settleDelay=d(tn.substr(7));else if(tn.indexOf("transition:")===0)Kr.transition=tn.substr(11)==="true";else if(tn.indexOf("ignoreTitle:")===0)Kr.ignoreTitle=tn.substr(12)==="true";else if(tn.indexOf("scroll:")===0){var ln=tn.substr(7),dn=ln.split(":"),yn=dn.pop(),Sn=dn.length>0?dn.join(":"):null;Kr.scroll=yn,Kr.scrollTarget=Sn}else if(tn.indexOf("show:")===0){var kn=tn.substr(5),dn=kn.split(":"),An=dn.pop(),Sn=dn.length>0?dn.join(":"):null;Kr.show=An,Kr.showTarget=Sn}else if(tn.indexOf("focus-scroll:")===0){var Bn=tn.substr(13);Kr.focusScroll=Bn=="true"}else Zr==0?Kr.swapStyle=tn:b("Unknown modifier in hx-swap: "+tn)}}return Kr}function Sr(Qr){return ne(Qr,"hx-encoding")==="multipart/form-data"||h(Qr,"form")&&ee(Qr,"enctype")==="multipart/form-data"}function Er(Qr,Gr,Wr){var Kr=null;return R(Gr,function(Yr){Kr==null&&(Kr=Yr.encodeParameters(Qr,Wr,Gr))}),Kr??(Sr(Gr)?mr(Wr):pr(Wr))}function T(Qr){return{tasks:[],elts:[Qr]}}function Cr(Qr,Gr){var Wr=Qr[0],Kr=Qr[Qr.length-1];if(Gr.scroll){var Yr=null;Gr.scrollTarget&&(Yr=ue(Wr,Gr.scrollTarget)),Gr.scroll==="top"&&(Wr||Yr)&&(Yr=Yr||Wr,Yr.scrollTop=0),Gr.scroll==="bottom"&&(Kr||Yr)&&(Yr=Yr||Kr,Yr.scrollTop=Yr.scrollHeight)}if(Gr.show){var Yr=null;if(Gr.showTarget){var Zr=Gr.showTarget;Gr.showTarget==="window"&&(Zr="body"),Yr=ue(Wr,Zr)}Gr.show==="top"&&(Wr||Yr)&&(Yr=Yr||Wr,Yr.scrollIntoView({block:"start",behavior:Q.config.scrollBehavior})),Gr.show==="bottom"&&(Kr||Yr)&&(Yr=Yr||Kr,Yr.scrollIntoView({block:"end",behavior:Q.config.scrollBehavior}))}}function Rr(Qr,Gr,Wr,Kr){if(Kr==null&&(Kr={}),Qr==null)return Kr;var Yr=te(Qr,Gr);if(Yr){var Zr=Yr.trim(),tn=Wr;if(Zr==="unset")return null;Zr.indexOf("javascript:")===0?(Zr=Zr.substr(11),tn=!0):Zr.indexOf("js:")===0&&(Zr=Zr.substr(3),tn=!0),Zr.indexOf("{")!==0&&(Zr="{"+Zr+"}");var ln;tn?ln=Tr(Qr,function(){return Function("return ("+Zr+")")()},{}):ln=E(Zr);for(var dn in ln)ln.hasOwnProperty(dn)&&Kr[dn]==null&&(Kr[dn]=ln[dn])}return Rr(u(Qr),Gr,Wr,Kr)}function Tr(Qr,Gr,Wr){return Q.config.allowEval?Gr():(fe(Qr,"htmx:evalDisallowedError"),Wr)}function Or(Qr,Gr){return Rr(Qr,"hx-vars",!0,Gr)}function qr(Qr,Gr){return Rr(Qr,"hx-vals",!1,Gr)}function Hr(Qr){return le(Or(Qr),qr(Qr))}function Lr(Qr,Gr,Wr){if(Wr!==null)try{Qr.setRequestHeader(Gr,Wr)}catch{Qr.setRequestHeader(Gr,encodeURIComponent(Wr)),Qr.setRequestHeader(Gr+"-URI-AutoEncoded","true")}}function Ar(Qr){if(Qr.responseURL&&typeof URL<"u")try{var Gr=new URL(Qr.responseURL);return Gr.pathname+Gr.search}catch{fe(re().body,"htmx:badResponseUrl",{url:Qr.responseURL})}}function O(Qr,Gr){return Gr.test(Qr.getAllResponseHeaders())}function Nr(Qr,Gr,Wr){return Qr=Qr.toLowerCase(),Wr?Wr instanceof Element||I(Wr,"String")?he(Qr,Gr,null,null,{targetOverride:p(Wr),returnPromise:!0}):he(Qr,Gr,p(Wr.source),Wr.event,{handler:Wr.handler,headers:Wr.headers,values:Wr.values,targetOverride:p(Wr.target),swapOverride:Wr.swap,select:Wr.select,returnPromise:!0}):he(Qr,Gr,null,null,{returnPromise:!0})}function Ir(Qr){for(var Gr=[];Qr;)Gr.push(Qr),Qr=Qr.parentElement;return Gr}function kr(Qr,Gr,Wr){var Kr,Yr;if(typeof URL=="function"){Yr=new URL(Gr,document.location.href);var Zr=document.location.origin;Kr=Zr===Yr.origin}else Yr=Gr,Kr=g(Gr,document.location.origin);return Q.config.selfRequestsOnly&&!Kr?!1:ce(Qr,"htmx:validateUrl",le({url:Yr,sameHost:Kr},Wr))}function he(Qr,Gr,Wr,Kr,Yr,Zr){var tn=null,ln=null;if(Yr=Yr??{},Yr.returnPromise&&typeof Promise<"u")var dn=new Promise(function(gn,En){tn=gn,ln=En});Wr==null&&(Wr=re().body);var yn=Yr.handler||Mr,Sn=Yr.select||null;if(!se(Wr))return ie(tn),dn;var kn=Yr.targetOverride||ye(Wr);if(kn==null||kn==pe)return fe(Wr,"htmx:targetError",{target:te(Wr,"hx-target")}),ie(ln),dn;var An=ae(Wr),Bn=An.lastButtonClicked;if(Bn){var jn=ee(Bn,"formaction");jn!=null&&(Gr=jn);var Vn=ee(Bn,"formmethod");Vn!=null&&Vn.toLowerCase()!=="dialog"&&(Qr=Vn)}var ti=ne(Wr,"hx-confirm");if(Zr===void 0){var si=function(gn){return he(Qr,Gr,Wr,Kr,Yr,!!gn)},ri={target:kn,elt:Wr,path:Gr,verb:Qr,triggeringEvent:Kr,etc:Yr,issueRequest:si,question:ti};if(ce(Wr,"htmx:confirm",ri)===!1)return ie(tn),dn}var oi=Wr,Jn=ne(Wr,"hx-sync"),gi=null,li=!1;if(Jn){var Ui=Jn.split(":"),vi=Ui[0].trim();if(vi==="this"?oi=xe(Wr,"hx-sync"):oi=ue(Wr,vi),Jn=(Ui[1]||"drop").trim(),An=ae(oi),Jn==="drop"&&An.xhr&&An.abortable!==!0)return ie(tn),dn;if(Jn==="abort"){if(An.xhr)return ie(tn),dn;li=!0}else if(Jn==="replace")ce(oi,"htmx:abort");else if(Jn.indexOf("queue")===0){var ni=Jn.split(" ");gi=(ni[1]||"last").trim()}}if(An.xhr)if(An.abortable)ce(oi,"htmx:abort");else{if(gi==null){if(Kr){var xn=ae(Kr);xn&&xn.triggerSpec&&xn.triggerSpec.queue&&(gi=xn.triggerSpec.queue)}gi==null&&(gi="last")}return An.queuedRequests==null&&(An.queuedRequests=[]),gi==="first"&&An.queuedRequests.length===0?An.queuedRequests.push(function(){he(Qr,Gr,Wr,Kr,Yr)}):gi==="all"?An.queuedRequests.push(function(){he(Qr,Gr,Wr,Kr,Yr)}):gi==="last"&&(An.queuedRequests=[],An.queuedRequests.push(function(){he(Qr,Gr,Wr,Kr,Yr)})),ie(tn),dn}var en=new XMLHttpRequest;An.xhr=en,An.abortable=li;var an=function(){if(An.xhr=null,An.abortable=!1,An.queuedRequests!=null&&An.queuedRequests.length>0){var gn=An.queuedRequests.shift();gn()}},pn=ne(Wr,"hx-prompt");if(pn){var mn=prompt(pn);if(mn===null||!ce(Wr,"htmx:prompt",{prompt:mn,target:kn}))return ie(tn),an(),dn}if(ti&&!Zr&&!confirm(ti))return ie(tn),an(),dn;var wn=xr(Wr,kn,mn);Qr!=="get"&&!Sr(Wr)&&(wn["Content-Type"]="application/x-www-form-urlencoded"),Yr.headers&&(wn=le(wn,Yr.headers));var vn=dr(Wr,Qr),bn=vn.errors,hn=vn.values;Yr.values&&(hn=le(hn,Yr.values));var On=Hr(Wr),Pn=le(hn,On),Nn=yr(Pn,Wr);Q.config.getCacheBusterParam&&Qr==="get"&&(Nn["org.htmx.cache-buster"]=ee(kn,"id")||"true"),(Gr==null||Gr==="")&&(Gr=re().location.href);var Dn=Rr(Wr,"hx-request"),Ln=ae(Wr).boosted,Fn=Q.config.methodsThatUseUrlParams.indexOf(Qr)>=0,Mn={boosted:Ln,useUrlParams:Fn,parameters:Nn,unfilteredParameters:Pn,headers:wn,target:kn,verb:Qr,errors:bn,withCredentials:Yr.credentials||Dn.credentials||Q.config.withCredentials,timeout:Yr.timeout||Dn.timeout||Q.config.timeout,path:Gr,triggeringEvent:Kr};if(!ce(Wr,"htmx:configRequest",Mn))return ie(tn),an(),dn;if(Gr=Mn.path,Qr=Mn.verb,wn=Mn.headers,Nn=Mn.parameters,bn=Mn.errors,Fn=Mn.useUrlParams,bn&&bn.length>0)return ce(Wr,"htmx:validation:halted",Mn),ie(tn),an(),dn;var Gn=Gr.split("#"),Wn=Gn[0],zn=Gn[1],nn=Gr;if(Fn){nn=Wn;var on=Object.keys(Nn).length!==0;on&&(nn.indexOf("?")<0?nn+="?":nn+="&",nn+=pr(Nn),zn&&(nn+="#"+zn))}if(!kr(Wr,nn,Mn))return fe(Wr,"htmx:invalidPath",Mn),ie(ln),dn;if(en.open(Qr.toUpperCase(),nn,!0),en.overrideMimeType("text/html"),en.withCredentials=Mn.withCredentials,en.timeout=Mn.timeout,!Dn.noHeaders){for(var Jr in wn)if(wn.hasOwnProperty(Jr)){var rn=wn[Jr];Lr(en,Jr,rn)}}var cn={xhr:en,target:kn,requestConfig:Mn,etc:Yr,boosted:Ln,select:Sn,pathInfo:{requestPath:Gr,finalRequestPath:nn,anchor:zn}};if(en.onload=function(){try{var gn=Ir(Wr);if(cn.pathInfo.responsePath=Ar(en),yn(Wr,cn),lr(sn,fn),ce(Wr,"htmx:afterRequest",cn),ce(Wr,"htmx:afterOnLoad",cn),!se(Wr)){for(var En=null;gn.length>0&&En==null;){var Tn=gn.shift();se(Tn)&&(En=Tn)}En&&(ce(En,"htmx:afterRequest",cn),ce(En,"htmx:afterOnLoad",cn))}ie(tn),an()}catch(Rn){throw fe(Wr,"htmx:onLoadError",le({error:Rn},cn)),Rn}},en.onerror=function(){lr(sn,fn),fe(Wr,"htmx:afterRequest",cn),fe(Wr,"htmx:sendError",cn),ie(ln),an()},en.onabort=function(){lr(sn,fn),fe(Wr,"htmx:afterRequest",cn),fe(Wr,"htmx:sendAbort",cn),ie(ln),an()},en.ontimeout=function(){lr(sn,fn),fe(Wr,"htmx:afterRequest",cn),fe(Wr,"htmx:timeout",cn),ie(ln),an()},!ce(Wr,"htmx:beforeRequest",cn))return ie(tn),an(),dn;var sn=or(Wr),fn=sr(Wr);oe(["loadstart","loadend","progress","abort"],function(gn){oe([en,en.upload],function(En){En.addEventListener(gn,function(Tn){ce(Wr,"htmx:xhr:"+gn,{lengthComputable:Tn.lengthComputable,loaded:Tn.loaded,total:Tn.total})})})}),ce(Wr,"htmx:beforeSend",cn);var un=Fn?null:Er(en,Wr,Nn);return en.send(un),dn}function Pr(Qr,Gr){var Wr=Gr.xhr,Kr=null,Yr=null;if(O(Wr,/HX-Push:/i)?(Kr=Wr.getResponseHeader("HX-Push"),Yr="push"):O(Wr,/HX-Push-Url:/i)?(Kr=Wr.getResponseHeader("HX-Push-Url"),Yr="push"):O(Wr,/HX-Replace-Url:/i)&&(Kr=Wr.getResponseHeader("HX-Replace-Url"),Yr="replace"),Kr)return Kr==="false"?{}:{type:Yr,path:Kr};var Zr=Gr.pathInfo.finalRequestPath,tn=Gr.pathInfo.responsePath,ln=ne(Qr,"hx-push-url"),dn=ne(Qr,"hx-replace-url"),yn=ae(Qr).boosted,Sn=null,kn=null;return ln?(Sn="push",kn=ln):dn?(Sn="replace",kn=dn):yn&&(Sn="push",kn=tn||Zr),kn?kn==="false"?{}:(kn==="true"&&(kn=tn||Zr),Gr.pathInfo.anchor&&kn.indexOf("#")===-1&&(kn=kn+"#"+Gr.pathInfo.anchor),{type:Sn,path:kn}):{}}function Mr(Qr,Gr){var Wr=Gr.xhr,Kr=Gr.target,Yr=Gr.etc,Zr=Gr.requestConfig,tn=Gr.select;if(ce(Qr,"htmx:beforeOnLoad",Gr)){if(O(Wr,/HX-Trigger:/i)&&_e(Wr,"HX-Trigger",Qr),O(Wr,/HX-Location:/i)){er();var ln=Wr.getResponseHeader("HX-Location"),dn;ln.indexOf("{")===0&&(dn=E(ln),ln=dn.path,delete dn.path),Nr("GET",ln,dn).then(function(){tr(ln)});return}var yn=O(Wr,/HX-Refresh:/i)&&Wr.getResponseHeader("HX-Refresh")==="true";if(O(Wr,/HX-Redirect:/i)){location.href=Wr.getResponseHeader("HX-Redirect"),yn&&location.reload();return}if(yn){location.reload();return}O(Wr,/HX-Retarget:/i)&&(Wr.getResponseHeader("HX-Retarget")==="this"?Gr.target=Qr:Gr.target=ue(Qr,Wr.getResponseHeader("HX-Retarget")));var Sn=Pr(Qr,Gr),kn=Wr.status>=200&&Wr.status<400&&Wr.status!==204,An=Wr.response,Bn=Wr.status>=400,jn=Q.config.ignoreTitle,Vn=le({shouldSwap:kn,serverResponse:An,isError:Bn,ignoreTitle:jn},Gr);if(ce(Kr,"htmx:beforeSwap",Vn)){if(Kr=Vn.target,An=Vn.serverResponse,Bn=Vn.isError,jn=Vn.ignoreTitle,Gr.target=Kr,Gr.failed=Bn,Gr.successful=!Bn,Vn.shouldSwap){Wr.status===286&&at(Qr),R(Qr,function(vi){An=vi.transformResponse(An,Wr,Qr)}),Sn.type&&er();var ti=Yr.swapOverride;O(Wr,/HX-Reswap:/i)&&(ti=Wr.getResponseHeader("HX-Reswap"));var dn=wr(Qr,ti);dn.hasOwnProperty("ignoreTitle")&&(jn=dn.ignoreTitle),Kr.classList.add(Q.config.swappingClass);var si=null,ri=null,oi=function(){try{var vi=document.activeElement,ni={};try{ni={elt:vi,start:vi?vi.selectionStart:null,end:vi?vi.selectionEnd:null}}catch{}var xn;tn&&(xn=tn),O(Wr,/HX-Reselect:/i)&&(xn=Wr.getResponseHeader("HX-Reselect")),Sn.type&&(ce(re().body,"htmx:beforeHistoryUpdate",le({history:Sn},Gr)),Sn.type==="push"?(tr(Sn.path),ce(re().body,"htmx:pushedIntoHistory",{path:Sn.path})):(rr(Sn.path),ce(re().body,"htmx:replacedInHistory",{path:Sn.path})));var en=T(Kr);if(je(dn.swapStyle,Kr,Qr,An,en,xn),ni.elt&&!se(ni.elt)&&ee(ni.elt,"id")){var an=document.getElementById(ee(ni.elt,"id")),pn={preventScroll:dn.focusScroll!==void 0?!dn.focusScroll:!Q.config.defaultFocusScroll};if(an){if(ni.start&&an.setSelectionRange)try{an.setSelectionRange(ni.start,ni.end)}catch{}an.focus(pn)}}if(Kr.classList.remove(Q.config.swappingClass),oe(en.elts,function(vn){vn.classList&&vn.classList.add(Q.config.settlingClass),ce(vn,"htmx:afterSwap",Gr)}),O(Wr,/HX-Trigger-After-Swap:/i)){var mn=Qr;se(Qr)||(mn=re().body),_e(Wr,"HX-Trigger-After-Swap",mn)}var wn=function(){if(oe(en.tasks,function(On){On.call()}),oe(en.elts,function(On){On.classList&&On.classList.remove(Q.config.settlingClass),ce(On,"htmx:afterSettle",Gr)}),Gr.pathInfo.anchor){var vn=re().getElementById(Gr.pathInfo.anchor);vn&&vn.scrollIntoView({block:"start",behavior:"auto"})}if(en.title&&!jn){var bn=C("title");bn?bn.innerHTML=en.title:window.document.title=en.title}if(Cr(en.elts,dn),O(Wr,/HX-Trigger-After-Settle:/i)){var hn=Qr;se(Qr)||(hn=re().body),_e(Wr,"HX-Trigger-After-Settle",hn)}ie(si)};dn.settleDelay>0?setTimeout(wn,dn.settleDelay):wn()}catch(vn){throw fe(Qr,"htmx:swapError",Gr),ie(ri),vn}},Jn=Q.config.globalViewTransitions;if(dn.hasOwnProperty("transition")&&(Jn=dn.transition),Jn&&ce(Qr,"htmx:beforeTransition",Gr)&&typeof Promise<"u"&&document.startViewTransition){var gi=new Promise(function(vi,ni){si=vi,ri=ni}),li=oi;oi=function(){document.startViewTransition(function(){return li(),gi})}}dn.swapDelay>0?setTimeout(oi,dn.swapDelay):oi()}Bn&&fe(Qr,"htmx:responseError",le({error:"Response Status Error Code "+Wr.status+" from "+Gr.pathInfo.requestPath},Gr))}}}var Xr={};function Dr(){return{init:function(Qr){return null},onEvent:function(Qr,Gr){return!0},transformResponse:function(Qr,Gr,Wr){return Qr},isInlineSwap:function(Qr){return!1},handleSwap:function(Qr,Gr,Wr,Kr){return!1},encodeParameters:function(Qr,Gr,Wr){return null}}}function Ur(Qr,Gr){Gr.init&&Gr.init(r),Xr[Qr]=le(Dr(),Gr)}function Br(Qr){delete Xr[Qr]}function Fr(Qr,Gr,Wr){if(Qr==null)return Gr;Gr==null&&(Gr=[]),Wr==null&&(Wr=[]);var Kr=te(Qr,"hx-ext");return Kr&&oe(Kr.split(","),function(Yr){if(Yr=Yr.replace(/ /g,""),Yr.slice(0,7)=="ignore:"){Wr.push(Yr.slice(7));return}if(Wr.indexOf(Yr)<0){var Zr=Xr[Yr];Zr&&Gr.indexOf(Zr)<0&&Gr.push(Zr)}}),Fr(u(Qr),Gr,Wr)}var Vr=!1;re().addEventListener("DOMContentLoaded",function(){Vr=!0});function jr(Qr){Vr||re().readyState==="complete"?Qr():re().addEventListener("DOMContentLoaded",Qr)}function _r(){Q.config.includeIndicatorStyles!==!1&&re().head.insertAdjacentHTML("beforeend","<style> ."+Q.config.indicatorClass+"{opacity:0} ."+Q.config.requestClass+" ."+Q.config.indicatorClass+"{opacity:1; transition: opacity 200ms ease-in;} ."+Q.config.requestClass+"."+Q.config.indicatorClass+"{opacity:1; transition: opacity 200ms ease-in;} </style>")}function zr(){var Qr=re().querySelector('meta[name="htmx-config"]');return Qr?E(Qr.content):null}function $r(){var Qr=zr();Qr&&(Q.config=le(Q.config,Qr))}return jr(function(){$r(),_r();var Qr=re().body;zt(Qr);var Gr=re().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");Qr.addEventListener("htmx:abort",function(Kr){var Yr=Kr.target,Zr=ae(Yr);Zr&&Zr.xhr&&Zr.xhr.abort()});let Wr=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(Kr){Kr.state&&Kr.state.htmx?(ar(),oe(Gr,function(Yr){ce(Yr,"htmx:restored",{document:re(),triggerEvent:ce})})):Wr&&Wr(Kr)},setTimeout(function(){ce(Qr,"htmx:load",{}),Qr=null},0)}),Q}()})});var is=Ys((go,$s)=>{(function(Qr,Gr){let Wr=Gr(Qr);typeof go=="object"&&typeof go.nodeName!="string"?$s.exports=Wr:(Qr._hyperscript=Wr,"document"in Qr&&Qr._hyperscript.browserInit())})(typeof self<"u"?self:go,Qr=>{"use strict";let Gr={dynamicResolvers:[function(xn,en){if(xn==="Fixed")return Number(en).toFixed();if(xn.indexOf("Fixed:")===0){let an=xn.split(":")[1];return Number(en).toFixed(parseInt(an))}}],String:function(xn){return xn.toString?xn.toString():""+xn},Int:function(xn){return parseInt(xn)},Float:function(xn){return parseFloat(xn)},Number:function(xn){return Number(xn)},Date:function(xn){return new Date(xn)},Array:function(xn){return Array.from(xn)},JSON:function(xn){return JSON.stringify(xn)},Object:function(xn){return xn instanceof String&&(xn=xn.toString()),typeof xn=="string"?JSON.parse(xn):Object.assign({},xn)}},Wr={attributes:"_, script, data-script",defaultTransition:"all 500ms ease-in",disableSelector:"[disable-scripting], [data-disable-scripting]",hideShowStrategies:{},conversions:Gr};class Kr{static OP_TABLE={"+":"PLUS","-":"MINUS","*":"MULTIPLY","/":"DIVIDE",".":"PERIOD","..":"ELLIPSIS","\\":"BACKSLASH",":":"COLON","%":"PERCENT","|":"PIPE","!":"EXCLAMATION","?":"QUESTION","#":"POUND","&":"AMPERSAND",$:"DOLLAR",";":"SEMI",",":"COMMA","(":"L_PAREN",")":"R_PAREN","<":"L_ANG",">":"R_ANG","<=":"LTE_ANG",">=":"GTE_ANG","==":"EQ","===":"EQQ","!=":"NEQ","!==":"NEQQ","{":"L_BRACE","}":"R_BRACE","[":"L_BRACKET","]":"R_BRACKET","=":"EQUALS","~":"TILDE"};static isValidCSSClassChar(en){return Kr.isAlpha(en)||Kr.isNumeric(en)||en==="-"||en==="_"||en===":"}static isValidCSSIDChar(en){return Kr.isAlpha(en)||Kr.isNumeric(en)||en==="-"||en==="_"||en===":"}static isWhitespace(en){return en===" "||en===" "||Kr.isNewline(en)}static positionString(en){return"[Line: "+en.line+", Column: "+en.column+"]"}static isNewline(en){return en==="\r"||en===` 3 + `}static isNumeric(en){return en>="0"&&en<="9"}static isAlpha(en){return en>="a"&&en<="z"||en>="A"&&en<="Z"}static isIdentifierChar(en,an){return en==="_"||en==="$"}static isReservedChar(en){return en==="`"||en==="^"}static isValidSingleQuoteStringStart(en){if(en.length>0){var an=en[en.length-1];if(an.type==="IDENTIFIER"||an.type==="CLASS_REF"||an.type==="ID_REF"||an.op&&(an.value===">"||an.value===")"))return!1}return!0}static tokenize(en,an){var pn=[],mn=en,wn=0,vn=0,bn=1,hn="<START>",On=0;function Pn(){return an&&On===0}for(;wn<mn.length;)if(un()==="-"&&gn()==="-"&&(Kr.isWhitespace(En(2))||En(2)===""||En(2)==="-")||un()==="/"&&gn()==="/"&&(Kr.isWhitespace(En(2))||En(2)===""||En(2)==="/"))Ln();else if(un()==="/"&&gn()==="*"&&(Kr.isWhitespace(En(2))||En(2)===""||En(2)==="*"))Fn();else if(Kr.isWhitespace(un()))pn.push(Hn());else if(!Rn()&&un()==="."&&(Kr.isAlpha(gn())||gn()==="{"||gn()==="-"))pn.push(Mn());else if(!Rn()&&un()==="#"&&(Kr.isAlpha(gn())||gn()==="{"))pn.push(nn());else if(un()==="["&&gn()==="@")pn.push(Gn());else if(un()==="@")pn.push(Wn());else if(un()==="*"&&Kr.isAlpha(gn()))pn.push(zn());else if(Pn()&&(Kr.isAlpha(un())||un()==="\\"))pn.push(on());else if(!Pn()&&(Kr.isAlpha(un())||Kr.isIdentifierChar(un())))pn.push(Jr());else if(Kr.isNumeric(un()))pn.push(rn());else if(!Pn()&&(un()==='"'||un()==="`"))pn.push(sn());else if(!Pn()&&un()==="'")Kr.isValidSingleQuoteStringStart(pn)?pn.push(sn()):pn.push(cn());else if(Kr.OP_TABLE[un()])hn==="$"&&un()==="{"&&On++,un()==="}"&&On--,pn.push(cn());else if(Pn()||Kr.isReservedChar(un()))pn.push(Dn("RESERVED",Tn()));else if(wn<mn.length)throw Error("Unknown token: "+un()+" ");return new Yr(pn,[],mn);function Nn(Cn,In){var _n=Dn(Cn,In);return _n.op=!0,_n}function Dn(Cn,In){return{type:Cn,value:In||"",start:wn,end:wn+1,column:vn,line:bn}}function Ln(){for(;un()&&!Kr.isNewline(un());)Tn();Tn()}function Fn(){for(;un()&&!(un()==="*"&&gn()==="/");)Tn();Tn(),Tn()}function Mn(){var Cn=Dn("CLASS_REF"),In=Tn();if(un()==="{"){for(Cn.template=!0,In+=Tn();un()&&un()!=="}";)In+=Tn();if(un()!=="}")throw Error("Unterminated class reference");In+=Tn()}else for(;Kr.isValidCSSClassChar(un())||un()==="\\";)un()==="\\"&&Tn(),In+=Tn();return Cn.value=In,Cn.end=wn,Cn}function Gn(){for(var Cn=Dn("ATTRIBUTE_REF"),In=Tn();wn<mn.length&&un()!=="]";)In+=Tn();return un()==="]"&&(In+=Tn()),Cn.value=In,Cn.end=wn,Cn}function Wn(){for(var Cn=Dn("ATTRIBUTE_REF"),In=Tn();Kr.isValidCSSIDChar(un());)In+=Tn();if(un()==="="){if(In+=Tn(),un()==='"'||un()==="'"){let _n=sn();In+=_n.value}else if(Kr.isAlpha(un())||Kr.isNumeric(un())||Kr.isIdentifierChar(un())){let _n=Jr();In+=_n.value}}return Cn.value=In,Cn.end=wn,Cn}function zn(){for(var Cn=Dn("STYLE_REF"),In=Tn();Kr.isAlpha(un())||un()==="-";)In+=Tn();return Cn.value=In,Cn.end=wn,Cn}function nn(){var Cn=Dn("ID_REF"),In=Tn();if(un()==="{"){for(Cn.template=!0,In+=Tn();un()&&un()!=="}";)In+=Tn();if(un()!=="}")throw Error("Unterminated id reference");Tn()}else for(;Kr.isValidCSSIDChar(un());)In+=Tn();return Cn.value=In,Cn.end=wn,Cn}function on(){var Cn=Dn("IDENTIFIER"),In=Tn(),_n=In==="\\";for(_n&&(In="");(Kr.isAlpha(un())||Kr.isNumeric(un())||Kr.isIdentifierChar(un())||un()==="\\"||un()==="{"||un()==="}")&&!(un()==="$"&&_n===!1);)un()==="\\"?(_n=!0,Tn()):(_n=!1,In+=Tn());return un()==="!"&&In==="beep"&&(In+=Tn()),Cn.value=In,Cn.end=wn,Cn}function Jr(){for(var Cn=Dn("IDENTIFIER"),In=Tn();Kr.isAlpha(un())||Kr.isNumeric(un())||Kr.isIdentifierChar(un());)In+=Tn();return un()==="!"&&In==="beep"&&(In+=Tn()),Cn.value=In,Cn.end=wn,Cn}function rn(){for(var Cn=Dn("NUMBER"),In=Tn();Kr.isNumeric(un());)In+=Tn();for(un()==="."&&Kr.isNumeric(gn())&&(In+=Tn());Kr.isNumeric(un());)In+=Tn();for((un()==="e"||un()==="E")&&(Kr.isNumeric(gn())?In+=Tn():gn()==="-"&&(In+=Tn(),In+=Tn()));Kr.isNumeric(un());)In+=Tn();return Cn.value=In,Cn.end=wn,Cn}function cn(){for(var Cn=Nn(),In=Tn();un()&&Kr.OP_TABLE[In+un()];)In+=Tn();return Cn.type=Kr.OP_TABLE[In],Cn.value=In,Cn.end=wn,Cn}function sn(){var Cn=Dn("STRING"),In=Tn();Cn.template=In==="`";for(var _n="";un()&&un()!==In;)if(un()==="\\"){Tn();let Un=Tn();if(Un==="b")_n+="\b";else if(Un==="f")_n+="\f";else if(Un==="n")_n+=` 4 + `;else if(Un==="r")_n+="\r";else if(Un==="t")_n+=" ";else if(Un==="v")_n+="\v";else if(Cn.template&&Un==="$")_n+="\\$";else if(Un==="x"){let ii=fn();if(Number.isNaN(ii))throw Error("Invalid hexadecimal escape at "+Kr.positionString(Cn));_n+=String.fromCharCode(ii)}else _n+=Un}else _n+=Tn();if(un()!==In)throw Error("Unterminated string at "+Kr.positionString(Cn));return Tn(),Cn.value=_n,Cn.end=wn,Cn}function fn(){if(!un())return NaN;let In=16*Number.parseInt(Tn(),16);return un()?(In+=Number.parseInt(Tn(),16),In):NaN}function un(){return mn.charAt(wn)}function gn(){return mn.charAt(wn+1)}function En(Cn=1){return mn.charAt(wn+Cn)}function Tn(){return hn=un(),wn++,vn++,hn}function Rn(){return Kr.isAlpha(hn)||Kr.isNumeric(hn)||hn===")"||hn==='"'||hn==="'"||hn==="`"||hn==="}"||hn==="]"}function Hn(){for(var Cn=Dn("WHITESPACE"),In="";un()&&Kr.isWhitespace(un());)Kr.isNewline(un())&&(vn=0,bn++),In+=Tn();return Cn.value=In,Cn.end=wn,Cn}}tokenize(en,an){return Kr.tokenize(en,an)}}class Yr{constructor(en,an,pn){this.tokens=en,this.consumed=an,this.source=pn,this.consumeWhitespace()}get list(){return this.tokens}_lastConsumed=null;consumeWhitespace(){for(;this.token(0,!0).type==="WHITESPACE";)this.consumed.push(this.tokens.shift())}raiseError(en,an){Zr.raiseParseError(en,an)}requireOpToken(en){var an=this.matchOpToken(en);if(an)return an;this.raiseError(this,"Expected '"+en+"' but found '"+this.currentToken().value+"'")}matchAnyOpToken(en,an,pn){for(var mn=0;mn<arguments.length;mn++){var wn=arguments[mn],vn=this.matchOpToken(wn);if(vn)return vn}}matchAnyToken(en,an,pn){for(var mn=0;mn<arguments.length;mn++){var wn=arguments[mn],vn=this.matchToken(wn);if(vn)return vn}}matchOpToken(en){if(this.currentToken()&&this.currentToken().op&&this.currentToken().value===en)return this.consumeToken()}requireTokenType(en,an,pn,mn){var wn=this.matchTokenType(en,an,pn,mn);if(wn)return wn;this.raiseError(this,"Expected one of "+JSON.stringify([en,an,pn]))}matchTokenType(en,an,pn,mn){if(this.currentToken()&&this.currentToken().type&&[en,an,pn,mn].indexOf(this.currentToken().type)>=0)return this.consumeToken()}requireToken(en,an){var pn=this.matchToken(en,an);if(pn)return pn;this.raiseError(this,"Expected '"+en+"' but found '"+this.currentToken().value+"'")}peekToken(en,an,pn){if(an=an||0,pn=pn||"IDENTIFIER",this.tokens[an]&&this.tokens[an].value===en&&this.tokens[an].type===pn)return this.tokens[an]}matchToken(en,an){if(this.follows.indexOf(en)===-1&&(an=an||"IDENTIFIER",this.currentToken()&&this.currentToken().value===en&&this.currentToken().type===an))return this.consumeToken()}consumeToken(){var en=this.tokens.shift();return this.consumed.push(en),this._lastConsumed=en,this.consumeWhitespace(),en}consumeUntil(en,an){for(var pn=[],mn=this.token(0,!0);(an==null||mn.type!==an)&&(en==null||mn.value!==en)&&mn.type!=="EOF";){var wn=this.tokens.shift();this.consumed.push(wn),pn.push(mn),mn=this.token(0,!0)}return this.consumeWhitespace(),pn}lastWhitespace(){return this.consumed[this.consumed.length-1]&&this.consumed[this.consumed.length-1].type==="WHITESPACE"?this.consumed[this.consumed.length-1].value:""}consumeUntilWhitespace(){return this.consumeUntil(null,"WHITESPACE")}hasMore(){return this.tokens.length>0}token(en,an){var pn,mn=0;do{if(!an)for(;this.tokens[mn]&&this.tokens[mn].type==="WHITESPACE";)mn++;pn=this.tokens[mn],en--,mn++}while(en>-1);return pn||{type:"EOF",value:"<<<EOF>>>"}}currentToken(){return this.token(0)}lastMatch(){return this._lastConsumed}static sourceFor=function(){return this.programSource.substring(this.startToken.start,this.endToken.end)};static lineFor=function(){return this.programSource.split(` 5 + `)[this.startToken.line-1]};follows=[];pushFollow(en){this.follows.push(en)}popFollow(){this.follows.pop()}clearFollows(){var en=this.follows;return this.follows=[],en}restoreFollows(en){this.follows=en}}class Zr{constructor(en){this.runtime=en,this.possessivesDisabled=!1,this.addGrammarElement("feature",function(an,pn,mn){if(mn.matchOpToken("(")){var wn=an.requireElement("feature",mn);return mn.requireOpToken(")"),wn}var vn=an.FEATURES[mn.currentToken().value||""];if(vn)return vn(an,pn,mn)}),this.addGrammarElement("command",function(an,pn,mn){if(mn.matchOpToken("(")){let bn=an.requireElement("command",mn);return mn.requireOpToken(")"),bn}var wn=an.COMMANDS[mn.currentToken().value||""];let vn;return wn?vn=wn(an,pn,mn):mn.currentToken().type==="IDENTIFIER"&&(vn=an.parseElement("pseudoCommand",mn)),vn&&an.parseElement("indirectStatement",mn,vn)}),this.addGrammarElement("commandList",function(an,pn,mn){if(mn.hasMore()){var wn=an.parseElement("command",mn);if(wn){mn.matchToken("then");let vn=an.parseElement("commandList",mn);return vn&&(wn.next=vn),wn}}return{type:"emptyCommandListCommand",op:function(vn){return pn.findNext(this,vn)},execute:function(vn){return pn.unifiedExec(this,vn)}}}),this.addGrammarElement("leaf",function(an,pn,mn){var wn=an.parseAnyOf(an.LEAF_EXPRESSIONS,mn);return wn??an.parseElement("symbol",mn)}),this.addGrammarElement("indirectExpression",function(an,pn,mn,wn){for(var vn=0;vn<an.INDIRECT_EXPRESSIONS.length;vn++){var bn=an.INDIRECT_EXPRESSIONS[vn];wn.endToken=mn.lastMatch();var hn=an.parseElement(bn,mn,wn);if(hn)return hn}return wn}),this.addGrammarElement("indirectStatement",function(an,pn,mn,wn){if(mn.matchToken("unless")){wn.endToken=mn.lastMatch();var vn=an.requireElement("expression",mn),bn={type:"unlessStatementModifier",args:[vn],op:function(hn,On){return On?this.next:wn},execute:function(hn){return pn.unifiedExec(this,hn)}};return wn.parent=bn,bn}return wn}),this.addGrammarElement("primaryExpression",function(an,pn,mn){var wn=an.parseElement("leaf",mn);if(wn)return an.parseElement("indirectExpression",mn,wn);an.raiseParseError(mn,"Unexpected value: "+mn.currentToken().value)})}use(en){return en(this),this}GRAMMAR={};COMMANDS={};FEATURES={};LEAF_EXPRESSIONS=[];INDIRECT_EXPRESSIONS=[];initElt(en,an,pn){en.startToken=an,en.sourceFor=Yr.sourceFor,en.lineFor=Yr.lineFor,en.programSource=pn.source}parseElement(en,an,pn=void 0){var mn=this.GRAMMAR[en];if(mn){var wn=an.currentToken(),vn=mn(this,this.runtime,an,pn);if(vn){this.initElt(vn,wn,an),vn.endToken=vn.endToken||an.lastMatch();for(var pn=vn.root;pn!=null;)this.initElt(pn,wn,an),pn=pn.root}return vn}}requireElement(en,an,pn,mn){var wn=this.parseElement(en,an,mn);return wn||Zr.raiseParseError(an,pn||"Expected "+en),wn}parseAnyOf(en,an){for(var pn=0;pn<en.length;pn++){var mn=en[pn],wn=this.parseElement(mn,an);if(wn)return wn}}addGrammarElement(en,an){this.GRAMMAR[en]=an}addCommand(en,an){var pn=en+"Command",mn=function(wn,vn,bn){let hn=an(wn,vn,bn);if(hn)return hn.type=pn,hn.execute=function(On){return On.meta.command=hn,vn.unifiedExec(this,On)},hn};this.GRAMMAR[pn]=mn,this.COMMANDS[en]=mn}addFeature(en,an){var pn=en+"Feature",mn=function(wn,vn,bn){var hn=an(wn,vn,bn);if(hn)return hn.isFeature=!0,hn.keyword=en,hn.type=pn,hn};this.GRAMMAR[pn]=mn,this.FEATURES[en]=mn}addLeafExpression(en,an){this.LEAF_EXPRESSIONS.push(en),this.addGrammarElement(en,an)}addIndirectExpression(en,an){this.INDIRECT_EXPRESSIONS.push(en),this.addGrammarElement(en,an)}static createParserContext(en){var an=en.currentToken(),pn=en.source,mn=pn.split(` 6 + `),wn=an&&an.line?an.line-1:mn.length-1,vn=mn[wn],bn=an&&an.line?an.column:vn.length-1;return vn+` 7 + `+" ".repeat(bn)+`^^ 8 8 9 - `}static raiseParseError(Zr,nn){nn=(nn||"Unexpected Token : "+Zr.currentToken().value)+` 9 + `}static raiseParseError(en,an){an=(an||"Unexpected Token : "+en.currentToken().value)+` 10 10 11 - `+rn.createParserContext(Zr);var hn=new Error(nn);throw hn.tokens=Zr,hn}raiseParseError(Zr,nn){rn.raiseParseError(Zr,nn)}parseHyperScript(Zr){var nn=this.parseElement("hyperscript",Zr);if(Zr.hasMore()&&this.raiseParseError(Zr),nn)return nn}setParent(Zr,nn){typeof Zr=="object"&&(Zr.parent=nn,typeof nn=="object"&&(nn.children=nn.children||new Set,nn.children.add(Zr)),this.setParent(Zr.next,nn))}commandStart(Zr){return this.COMMANDS[Zr.value||""]}featureStart(Zr){return this.FEATURES[Zr.value||""]}commandBoundary(Zr){return!!(Zr.value=="end"||Zr.value=="then"||Zr.value=="else"||Zr.value=="otherwise"||Zr.value==")"||this.commandStart(Zr)||this.featureStart(Zr)||Zr.type=="EOF")}parseStringTemplate(Zr){var nn=[""];do if(nn.push(Zr.lastWhitespace()),Zr.currentToken().value==="$"){Zr.consumeToken();var hn=Zr.matchOpToken("{");nn.push(this.requireElement("expression",Zr)),hn&&Zr.requireOpToken("}"),nn.push("")}else if(Zr.currentToken().value==="\\")Zr.consumeToken(),Zr.consumeToken();else{var dn=Zr.consumeToken();nn[nn.length-1]+=dn?dn.value:""}while(Zr.hasMore());return nn.push(Zr.lastWhitespace()),nn}ensureTerminated(Zr){let nn=this.runtime;for(var hn={type:"implicitReturn",op:function(wn){return wn.meta.returned=!0,wn.meta.resolve&&wn.meta.resolve(),nn.HALT},execute:function(wn){}},dn=Zr;dn.next;)dn=dn.next;dn.next=hn}}class ln{constructor(Zr,nn){this.lexer=Zr??new Yr,this.parser=nn??new rn(this).use(ci).use(ai),this.parser.runtime=this}matchesSelector(Zr,nn){var hn=Zr.matches||Zr.matchesSelector||Zr.msMatchesSelector||Zr.mozMatchesSelector||Zr.webkitMatchesSelector||Zr.oMatchesSelector;return hn&&hn.call(Zr,nn)}makeEvent(Zr,nn){var hn;return Gr.Event&&typeof Gr.Event=="function"?(hn=new Event(Zr,{bubbles:!0,cancelable:!0,composed:!0}),hn.detail=nn):(hn=document.createEvent("CustomEvent"),hn.initCustomEvent(Zr,!0,!0,nn)),hn}triggerEvent(Zr,nn,hn,dn){hn=hn||{},hn.sender=dn;var wn=this.makeEvent(nn,hn),vn=Zr.dispatchEvent(wn);return vn}isArrayLike(Zr){return Array.isArray(Zr)||typeof NodeList<"u"&&(Zr instanceof NodeList||Zr instanceof HTMLCollection||Zr instanceof FileList)}isIterable(Zr){return typeof Zr=="object"&&Symbol.iterator in Zr&&typeof Zr[Symbol.iterator]=="function"}shouldAutoIterate(Zr){return Zr!=null&&Zr[Gn]||this.isArrayLike(Zr)}forEach(Zr,nn){if(Zr!=null)if(this.isIterable(Zr))for(let dn of Zr)nn(dn);else if(this.isArrayLike(Zr))for(var hn=0;hn<Zr.length;hn++)nn(Zr[hn]);else nn(Zr)}implicitLoop(Zr,nn){if(this.shouldAutoIterate(Zr))for(let hn of Zr)nn(hn);else nn(Zr)}wrapArrays(Zr){for(var nn=[],hn=0;hn<Zr.length;hn++){var dn=Zr[hn];Array.isArray(dn)?nn.push(Promise.all(dn)):nn.push(dn)}return nn}unwrapAsyncs(Zr){for(var nn=0;nn<Zr.length;nn++){var hn=Zr[nn];if(hn.asyncWrapper&&(Zr[nn]=hn.value),Array.isArray(hn))for(var dn=0;dn<hn.length;dn++){var wn=hn[dn];wn.asyncWrapper&&(hn[dn]=wn.value)}}}static HALT={};HALT=ln.HALT;unifiedExec(Zr,nn){for(;;){try{var hn=this.unifiedEval(Zr,nn)}catch(dn){if(nn.meta.handlingFinally)console.error(" Exception in finally block: ",dn),hn=ln.HALT;else if(this.registerHyperTrace(nn,dn),nn.meta.errorHandler&&!nn.meta.handlingError){nn.meta.handlingError=!0,nn.locals[nn.meta.errorSymbol]=dn,Zr=nn.meta.errorHandler;continue}else nn.meta.currentException=dn,hn=ln.HALT}if(hn==null){console.error(Zr," did not return a next element to execute! context: ",nn);return}else if(hn.then){hn.then(dn=>{this.unifiedExec(dn,nn)}).catch(dn=>{this.unifiedExec({op:function(){throw dn}},nn)});return}else if(hn===ln.HALT)if(nn.meta.finallyHandler&&!nn.meta.handlingFinally)nn.meta.handlingFinally=!0,Zr=nn.meta.finallyHandler;else if(nn.meta.onHalt&&nn.meta.onHalt(),nn.meta.currentException)if(nn.meta.reject){nn.meta.reject(nn.meta.currentException);return}else throw nn.meta.currentException;else return;else Zr=hn}}unifiedEval(Zr,nn,hn){var dn=[nn],wn=!1,vn=!1;if(Zr.args)for(var yn=0;yn<Zr.args.length;yn++){var fn=Zr.args[yn];if(fn==null)dn.push(null);else if(Array.isArray(fn)){for(var An=[],Rn=0;Rn<fn.length;Rn++){var Dn=fn[Rn],In=Dn?Dn.evaluate(nn):null;In&&(In.then?wn=!0:In.asyncWrapper&&(vn=!0)),An.push(In)}dn.push(An)}else if(fn.evaluate){var In=fn.evaluate(nn);if(In&&(In.then?wn=!0:In.asyncWrapper&&(vn=!0)),dn.push(In),In){if(hn===!0)break}else if(hn===!1)break}else dn.push(fn)}return wn?new Promise((qn,Mn)=>{dn=this.wrapArrays(dn),Promise.all(dn).then(function(Ln){vn&&this.unwrapAsyncs(Ln);try{var Bn=Zr.op.apply(Zr,Ln);qn(Bn)}catch(Wn){Mn(Wn)}}).catch(function(Ln){Mn(Ln)})}):(vn&&this.unwrapAsyncs(dn),Zr.op.apply(Zr,dn))}_scriptAttrs=null;getScriptAttributes(){return this._scriptAttrs==null&&(this._scriptAttrs=Qr.attributes.replace(/ /g,"").split(",")),this._scriptAttrs}getScript(Zr){for(var nn=0;nn<this.getScriptAttributes().length;nn++){var hn=this.getScriptAttributes()[nn];if(Zr.hasAttribute&&Zr.hasAttribute(hn))return Zr.getAttribute(hn)}return Zr instanceof HTMLScriptElement&&Zr.type==="text/hyperscript"?Zr.innerText:null}hyperscriptFeaturesMap=new WeakMap;getHyperscriptFeatures(Zr){var nn=this.hyperscriptFeaturesMap.get(Zr);return typeof nn>"u"&&Zr&&this.hyperscriptFeaturesMap.set(Zr,nn={}),nn}addFeatures(Zr,nn){Zr&&(Object.assign(nn.locals,this.getHyperscriptFeatures(Zr)),this.addFeatures(Zr.parentElement,nn))}makeContext(Zr,nn,hn,dn){return new On(Zr,nn,hn,dn,this)}getScriptSelector(){return this.getScriptAttributes().map(function(Zr){return"["+Zr+"]"}).join(", ")}convertValue(Zr,nn){for(var hn=Wr.dynamicResolvers,dn=0;dn<hn.length;dn++){var wn=hn[dn],vn=wn(nn,Zr);if(vn!==void 0)return vn}if(Zr==null)return null;var yn=Wr[nn];if(yn)return yn(Zr);throw"Unknown conversion : "+nn}parse(Zr){let nn=this.lexer,hn=this.parser;var dn=nn.tokenize(Zr);if(this.parser.commandStart(dn.currentToken())){var wn=hn.requireElement("commandList",dn);return dn.hasMore()&&hn.raiseParseError(dn),hn.ensureTerminated(wn),wn}else if(hn.featureStart(dn.currentToken())){var vn=hn.requireElement("hyperscript",dn);return dn.hasMore()&&hn.raiseParseError(dn),vn}else{var yn=hn.requireElement("expression",dn);return dn.hasMore()&&hn.raiseParseError(dn),yn}}evaluateNoPromise(Zr,nn){let hn=Zr.evaluate(nn);if(hn.next)throw new Error(Jr.sourceFor.call(Zr)+" returned a Promise in a context that they are not allowed.");return hn}evaluate(Zr,nn,hn){class dn extends EventTarget{constructor(An){super(),this.module=An}toString(){return this.module.id}}var wn="document"in Gr?Gr.document.body:new dn(hn&&hn.module);nn=Object.assign(this.makeContext(wn,null,wn,null),nn||{});var vn=this.parse(Zr);if(vn.execute)return vn.execute(nn),typeof nn.meta.returnValue<"u"?nn.meta.returnValue:nn.result;return vn.apply?(vn.apply(wn,wn,hn),this.getHyperscriptFeatures(wn)):vn.evaluate(nn);function yn(){return{}}}processNode(Zr){var nn=this.getScriptSelector();this.matchesSelector(Zr,nn)&&this.initElement(Zr,Zr),Zr instanceof HTMLScriptElement&&Zr.type==="text/hyperscript"&&this.initElement(Zr,document.body),Zr.querySelectorAll&&this.forEach(Zr.querySelectorAll(nn+", [type='text/hyperscript']"),hn=>{this.initElement(hn,hn instanceof HTMLScriptElement&&hn.type==="text/hyperscript"?document.body:hn)})}initElement(Zr,nn){if(!(Zr.closest&&Zr.closest(Qr.disableSelector))){var hn=this.getInternalData(Zr);if(!hn.initialized){var dn=this.getScript(Zr);if(dn)try{hn.initialized=!0,hn.script=dn;let yn=this.lexer,fn=this.parser;var wn=yn.tokenize(dn),vn=fn.parseHyperScript(wn);if(!vn)return;vn.apply(nn||Zr,Zr),setTimeout(()=>{this.triggerEvent(nn||Zr,"load",{hyperscript:!0})},1)}catch(yn){this.triggerEvent(Zr,"exception",{error:yn}),console.error("hyperscript errors were found on the following element:",Zr,` 11 + `+Zr.createParserContext(en);var pn=new Error(an);throw pn.tokens=en,pn}raiseParseError(en,an){Zr.raiseParseError(en,an)}parseHyperScript(en){var an=this.parseElement("hyperscript",en);if(en.hasMore()&&this.raiseParseError(en),an)return an}setParent(en,an){typeof en=="object"&&(en.parent=an,typeof an=="object"&&(an.children=an.children||new Set,an.children.add(en)),this.setParent(en.next,an))}commandStart(en){return this.COMMANDS[en.value||""]}featureStart(en){return this.FEATURES[en.value||""]}commandBoundary(en){return!!(en.value=="end"||en.value=="then"||en.value=="else"||en.value=="otherwise"||en.value==")"||this.commandStart(en)||this.featureStart(en)||en.type=="EOF")}parseStringTemplate(en){var an=[""];do if(an.push(en.lastWhitespace()),en.currentToken().value==="$"){en.consumeToken();var pn=en.matchOpToken("{");an.push(this.requireElement("expression",en)),pn&&en.requireOpToken("}"),an.push("")}else if(en.currentToken().value==="\\")en.consumeToken(),en.consumeToken();else{var mn=en.consumeToken();an[an.length-1]+=mn?mn.value:""}while(en.hasMore());return an.push(en.lastWhitespace()),an}ensureTerminated(en){let an=this.runtime;for(var pn={type:"implicitReturn",op:function(wn){return wn.meta.returned=!0,wn.meta.resolve&&wn.meta.resolve(),an.HALT},execute:function(wn){}},mn=en;mn.next;)mn=mn.next;mn.next=pn}}class tn{constructor(en,an){this.lexer=en??new Kr,this.parser=an??new Zr(this).use(ri).use(oi),this.parser.runtime=this}matchesSelector(en,an){var pn=en.matches||en.matchesSelector||en.msMatchesSelector||en.mozMatchesSelector||en.webkitMatchesSelector||en.oMatchesSelector;return pn&&pn.call(en,an)}makeEvent(en,an){var pn;return Qr.Event&&typeof Qr.Event=="function"?(pn=new Event(en,{bubbles:!0,cancelable:!0,composed:!0}),pn.detail=an):(pn=document.createEvent("CustomEvent"),pn.initCustomEvent(en,!0,!0,an)),pn}triggerEvent(en,an,pn,mn){pn=pn||{},pn.sender=mn;var wn=this.makeEvent(an,pn),vn=en.dispatchEvent(wn);return vn}isArrayLike(en){return Array.isArray(en)||typeof NodeList<"u"&&(en instanceof NodeList||en instanceof HTMLCollection||en instanceof FileList)}isIterable(en){return typeof en=="object"&&Symbol.iterator in en&&typeof en[Symbol.iterator]=="function"}shouldAutoIterate(en){return en!=null&&en[Bn]||this.isArrayLike(en)}forEach(en,an){if(en!=null)if(this.isIterable(en))for(let mn of en)an(mn);else if(this.isArrayLike(en))for(var pn=0;pn<en.length;pn++)an(en[pn]);else an(en)}implicitLoop(en,an){if(this.shouldAutoIterate(en))for(let pn of en)an(pn);else an(en)}wrapArrays(en){for(var an=[],pn=0;pn<en.length;pn++){var mn=en[pn];Array.isArray(mn)?an.push(Promise.all(mn)):an.push(mn)}return an}unwrapAsyncs(en){for(var an=0;an<en.length;an++){var pn=en[an];if(pn.asyncWrapper&&(en[an]=pn.value),Array.isArray(pn))for(var mn=0;mn<pn.length;mn++){var wn=pn[mn];wn.asyncWrapper&&(pn[mn]=wn.value)}}}static HALT={};HALT=tn.HALT;unifiedExec(en,an){for(;;){try{var pn=this.unifiedEval(en,an)}catch(mn){if(an.meta.handlingFinally)console.error(" Exception in finally block: ",mn),pn=tn.HALT;else if(this.registerHyperTrace(an,mn),an.meta.errorHandler&&!an.meta.handlingError){an.meta.handlingError=!0,an.locals[an.meta.errorSymbol]=mn,en=an.meta.errorHandler;continue}else an.meta.currentException=mn,pn=tn.HALT}if(pn==null){console.error(en," did not return a next element to execute! context: ",an);return}else if(pn.then){pn.then(mn=>{this.unifiedExec(mn,an)}).catch(mn=>{this.unifiedExec({op:function(){throw mn}},an)});return}else if(pn===tn.HALT)if(an.meta.finallyHandler&&!an.meta.handlingFinally)an.meta.handlingFinally=!0,en=an.meta.finallyHandler;else if(an.meta.onHalt&&an.meta.onHalt(),an.meta.currentException)if(an.meta.reject){an.meta.reject(an.meta.currentException);return}else throw an.meta.currentException;else return;else en=pn}}unifiedEval(en,an,pn){var mn=[an],wn=!1,vn=!1;if(en.args)for(var bn=0;bn<en.args.length;bn++){var hn=en.args[bn];if(hn==null)mn.push(null);else if(Array.isArray(hn)){for(var On=[],Pn=0;Pn<hn.length;Pn++){var Nn=hn[Pn],Dn=Nn?Nn.evaluate(an):null;Dn&&(Dn.then?wn=!0:Dn.asyncWrapper&&(vn=!0)),On.push(Dn)}mn.push(On)}else if(hn.evaluate){var Dn=hn.evaluate(an);if(Dn&&(Dn.then?wn=!0:Dn.asyncWrapper&&(vn=!0)),mn.push(Dn),Dn){if(pn===!0)break}else if(pn===!1)break}else mn.push(hn)}return wn?new Promise((Ln,Fn)=>{mn=this.wrapArrays(mn),Promise.all(mn).then(function(Mn){vn&&this.unwrapAsyncs(Mn);try{var Gn=en.op.apply(en,Mn);Ln(Gn)}catch(Wn){Fn(Wn)}}).catch(function(Mn){Fn(Mn)})}):(vn&&this.unwrapAsyncs(mn),en.op.apply(en,mn))}_scriptAttrs=null;getScriptAttributes(){return this._scriptAttrs==null&&(this._scriptAttrs=Wr.attributes.replace(/ /g,"").split(",")),this._scriptAttrs}getScript(en){for(var an=0;an<this.getScriptAttributes().length;an++){var pn=this.getScriptAttributes()[an];if(en.hasAttribute&&en.hasAttribute(pn))return en.getAttribute(pn)}return en instanceof HTMLScriptElement&&en.type==="text/hyperscript"?en.innerText:null}hyperscriptFeaturesMap=new WeakMap;getHyperscriptFeatures(en){var an=this.hyperscriptFeaturesMap.get(en);return typeof an>"u"&&en&&this.hyperscriptFeaturesMap.set(en,an={}),an}addFeatures(en,an){en&&(Object.assign(an.locals,this.getHyperscriptFeatures(en)),this.addFeatures(en.parentElement,an))}makeContext(en,an,pn,mn){return new kn(en,an,pn,mn,this)}getScriptSelector(){return this.getScriptAttributes().map(function(en){return"["+en+"]"}).join(", ")}convertValue(en,an){for(var pn=Gr.dynamicResolvers,mn=0;mn<pn.length;mn++){var wn=pn[mn],vn=wn(an,en);if(vn!==void 0)return vn}if(en==null)return null;var bn=Gr[an];if(bn)return bn(en);throw"Unknown conversion : "+an}parse(en){let an=this.lexer,pn=this.parser;var mn=an.tokenize(en);if(this.parser.commandStart(mn.currentToken())){var wn=pn.requireElement("commandList",mn);return mn.hasMore()&&pn.raiseParseError(mn),pn.ensureTerminated(wn),wn}else if(pn.featureStart(mn.currentToken())){var vn=pn.requireElement("hyperscript",mn);return mn.hasMore()&&pn.raiseParseError(mn),vn}else{var bn=pn.requireElement("expression",mn);return mn.hasMore()&&pn.raiseParseError(mn),bn}}evaluateNoPromise(en,an){let pn=en.evaluate(an);if(pn.next)throw new Error(Yr.sourceFor.call(en)+" returned a Promise in a context that they are not allowed.");return pn}evaluate(en,an,pn){class mn extends EventTarget{constructor(On){super(),this.module=On}toString(){return this.module.id}}var wn="document"in Qr?Qr.document.body:new mn(pn&&pn.module);an=Object.assign(this.makeContext(wn,null,wn,null),an||{});var vn=this.parse(en);if(vn.execute)return vn.execute(an),typeof an.meta.returnValue<"u"?an.meta.returnValue:an.result;return vn.apply?(vn.apply(wn,wn,pn),this.getHyperscriptFeatures(wn)):vn.evaluate(an);function bn(){return{}}}processNode(en){var an=this.getScriptSelector();this.matchesSelector(en,an)&&this.initElement(en,en),en instanceof HTMLScriptElement&&en.type==="text/hyperscript"&&this.initElement(en,document.body),en.querySelectorAll&&this.forEach(en.querySelectorAll(an+", [type='text/hyperscript']"),pn=>{this.initElement(pn,pn instanceof HTMLScriptElement&&pn.type==="text/hyperscript"?document.body:pn)})}initElement(en,an){if(!(en.closest&&en.closest(Wr.disableSelector))){var pn=this.getInternalData(en);if(!pn.initialized){var mn=this.getScript(en);if(mn)try{pn.initialized=!0,pn.script=mn;let bn=this.lexer,hn=this.parser;var wn=bn.tokenize(mn),vn=hn.parseHyperScript(wn);if(!vn)return;vn.apply(an||en,en),setTimeout(()=>{this.triggerEvent(an||en,"load",{hyperscript:!0})},1)}catch(bn){this.triggerEvent(en,"exception",{error:bn}),console.error("hyperscript errors were found on the following element:",en,` 12 12 13 - `,yn.message,yn.stack)}}}}internalDataMap=new WeakMap;getInternalData(Zr){var nn=this.internalDataMap.get(Zr);return typeof nn>"u"&&this.internalDataMap.set(Zr,nn={}),nn}typeCheck(Zr,nn,hn){if(Zr==null&&hn)return!0;var dn=Object.prototype.toString.call(Zr).slice(8,-1);return dn===nn}getElementScope(Zr){var nn=Zr.meta&&Zr.meta.owner;if(nn){var hn=this.getInternalData(nn),dn="elementScope";Zr.meta.feature&&Zr.meta.feature.behavior&&(dn=Zr.meta.feature.behavior+"Scope");var wn=Xn(hn,dn);return wn}else return{}}isReservedWord(Zr){return["meta","it","result","locals","event","target","detail","sender","body"].includes(Zr)}isHyperscriptContext(Zr){return Zr instanceof On}resolveSymbol(Zr,nn,hn){if(Zr==="me"||Zr==="my"||Zr==="I")return nn.me;if(Zr==="it"||Zr==="its"||Zr==="result")return nn.result;if(Zr==="you"||Zr==="your"||Zr==="yourself")return nn.you;if(hn==="global")return Gr[Zr];if(hn==="element"){var dn=this.getElementScope(nn);return dn[Zr]}else{if(hn==="local")return nn.locals[Zr];if(nn.meta&&nn.meta.context){var wn=nn.meta.context[Zr];if(typeof wn<"u"||nn.meta.context.detail&&(wn=nn.meta.context.detail[Zr],typeof wn<"u"))return wn}if(this.isHyperscriptContext(nn)&&!this.isReservedWord(Zr))var vn=nn.locals[Zr];else var vn=nn[Zr];if(typeof vn<"u")return vn;var dn=this.getElementScope(nn);return vn=dn[Zr],typeof vn<"u"?vn:Gr[Zr]}}setSymbol(Zr,nn,hn,dn){if(hn==="global")Gr[Zr]=dn;else if(hn==="element"){var wn=this.getElementScope(nn);wn[Zr]=dn}else if(hn==="local")nn.locals[Zr]=dn;else if(this.isHyperscriptContext(nn)&&!this.isReservedWord(Zr)&&typeof nn.locals[Zr]<"u")nn.locals[Zr]=dn;else{var wn=this.getElementScope(nn),vn=wn[Zr];typeof vn<"u"?wn[Zr]=dn:this.isHyperscriptContext(nn)&&!this.isReservedWord(Zr)?nn.locals[Zr]=dn:nn[Zr]=dn}}findNext(Zr,nn){if(Zr)return Zr.resolveNext?Zr.resolveNext(nn):Zr.next?Zr.next:this.findNext(Zr.parent,nn)}flatGet(Zr,nn,hn){if(Zr!=null){var dn=hn(Zr,nn);if(typeof dn<"u")return dn;if(this.shouldAutoIterate(Zr)){var wn=[];for(var vn of Zr){var yn=hn(vn,nn);wn.push(yn)}return wn}}}resolveProperty(Zr,nn){return this.flatGet(Zr,nn,(hn,dn)=>hn[dn])}resolveAttribute(Zr,nn){return this.flatGet(Zr,nn,(hn,dn)=>hn.getAttribute&&hn.getAttribute(dn))}resolveStyle(Zr,nn){return this.flatGet(Zr,nn,(hn,dn)=>hn.style&&hn.style[dn])}resolveComputedStyle(Zr,nn){return this.flatGet(Zr,nn,(hn,dn)=>getComputedStyle(hn).getPropertyValue(dn))}assignToNamespace(Zr,nn,hn,dn){let wn;typeof document<"u"&&Zr===document.body?wn=Gr:wn=this.getHyperscriptFeatures(Zr);for(var vn;(vn=nn.shift())!==void 0;){var yn=wn[vn];yn==null&&(yn={},wn[vn]=yn),wn=yn}wn[hn]=dn}getHyperTrace(Zr,nn){for(var hn=[],dn=Zr;dn.meta.caller;)dn=dn.meta.caller;if(dn.meta.traceMap)return dn.meta.traceMap.get(nn,hn)}registerHyperTrace(Zr,nn){for(var hn=[],dn=null;Zr!=null;)hn.push(Zr),dn=Zr,Zr=Zr.meta.caller;if(dn.meta.traceMap==null&&(dn.meta.traceMap=new Map),!dn.meta.traceMap.get(nn)){var wn={trace:hn,print:function(vn){vn=vn||console.error,vn("hypertrace /// ");for(var yn=0,fn=0;fn<hn.length;fn++)yn=Math.max(yn,hn[fn].meta.feature.displayName.length);for(var fn=0;fn<hn.length;fn++){var An=hn[fn];vn(" ->",An.meta.feature.displayName.padEnd(yn+2),"-",An.meta.owner)}}};dn.meta.traceMap.set(nn,wn)}}escapeSelector(Zr){return Zr.replace(/[:&()\[\]\/]/g,function(nn){return"\\"+nn})}nullCheck(Zr,nn){if(Zr==null)throw new Error("'"+nn.sourceFor()+"' is null")}isEmpty(Zr){return Zr==null||Zr.length===0}doesExist(Zr){if(Zr==null)return!1;if(this.shouldAutoIterate(Zr)){for(let nn of Zr)return!0;return!1}return!0}getRootNode(Zr){if(Zr&&Zr instanceof Node){var nn=Zr.getRootNode();if(nn instanceof Document||nn instanceof ShadowRoot)return nn}return document}getEventQueueFor(Zr,nn){let hn=this.getInternalData(Zr);var dn=hn.eventQueues;dn==null&&(dn=new Map,hn.eventQueues=dn);var wn=dn.get(nn);return wn==null&&(wn={queue:[],executing:!1},dn.set(nn,wn)),wn}beepValueToConsole(Zr,nn,hn){if(this.triggerEvent(Zr,"hyperscript:beep",{element:Zr,expression:nn,value:hn})){var dn;hn?hn instanceof Pn?dn="ElementCollection":hn.constructor?dn=hn.constructor.name:dn="unknown":dn="object (null)";var wn=hn;dn==="String"?wn='"'+wn+'"':hn instanceof Pn&&(wn=Array.from(hn)),console.log("///_ BEEP! The expression ("+Jr.sourceFor.call(nn).replace("beep! ","")+") evaluates to:",wn,"of type "+dn)}}hyperscriptUrl="document"in Gr&&document.currentScript?document.currentScript.src:null}function mn(){return document.cookie.split("; ").map(Zr=>{let nn=Zr.split("=");return{name:nn[0],value:decodeURIComponent(nn[1])}})}function gn(Tn){document.cookie=Tn+"=;expires=Thu, 01 Jan 1970 00:00:00 GMT"}function xn(){for(let Tn of mn())gn(Tn.name)}let Cn=new Proxy({},{get(Tn,Zr){if(Zr==="then"||Zr==="asyncWrapper")return null;if(Zr==="length")return mn().length;if(Zr==="clear")return gn;if(Zr==="clearAll")return xn;if(typeof Zr=="string")if(isNaN(Zr)){let nn=document.cookie.split("; ").find(hn=>hn.startsWith(Zr+"="))?.split("=")[1];if(nn)return decodeURIComponent(nn)}else return mn()[parseInt(Zr)];else if(Zr===Symbol.iterator)return mn()[Zr]},set(Tn,Zr,nn){var hn=null;return typeof nn=="string"?(hn=encodeURIComponent(nn),hn+=";samesite=lax"):(hn=encodeURIComponent(nn.value),nn.expires&&(hn+=";expires="+nn.maxAge),nn.maxAge&&(hn+=";max-age="+nn.maxAge),nn.partitioned&&(hn+=";partitioned="+nn.partitioned),nn.path&&(hn+=";path="+nn.path),nn.samesite&&(hn+=";samesite="+nn.path),nn.secure&&(hn+=";secure="+nn.path)),document.cookie=Zr+"="+hn,!0}});class On{constructor(Zr,nn,hn,dn,wn){this.meta={parser:wn.parser,lexer:wn.lexer,runtime:wn,owner:Zr,feature:nn,iterators:{},ctx:this},this.locals={cookies:Cn},this.me=hn,this.you=void 0,this.result=void 0,this.event=dn,this.target=dn?dn.target:null,this.detail=dn?dn.detail:null,this.sender=dn&&dn.detail?dn.detail.sender:null,this.body="document"in Gr?document.body:null,wn.addFeatures(Zr,this)}}class Pn{constructor(Zr,nn,hn){this._css=Zr,this.relativeToElement=nn,this.escape=hn,this[Gn]=!0}get css(){return this.escape?ln.prototype.escapeSelector(this._css):this._css}get className(){return this._css.substr(1)}get id(){return this.className()}contains(Zr){for(let nn of this)if(nn.contains(Zr))return!0;return!1}get length(){return this.selectMatches().length}[Symbol.iterator](){return this.selectMatches()[Symbol.iterator]()}selectMatches(){return ln.prototype.getRootNode(this.relativeToElement).querySelectorAll(this.css)}}let Gn=Symbol();function Xn(Tn,Zr){var nn=Tn[Zr];if(nn)return nn;var hn={};return Tn[Zr]=hn,hn}function zn(Tn){try{return JSON.parse(Tn)}catch(Zr){return ni(Zr),null}}function ni(Tn){console.error?console.error(Tn):console.log&&console.log("ERROR: ",Tn)}function gi(Tn,Zr){return new(Tn.bind.apply(Tn,[Tn].concat(Zr)))}function ci(Tn){Tn.addLeafExpression("parenthesized",function(tn,an,Kr){if(Kr.matchOpToken("(")){var en=Kr.clearFollows();try{var un=tn.requireElement("expression",Kr)}finally{Kr.restoreFollows(en)}return Kr.requireOpToken(")"),un}}),Tn.addLeafExpression("string",function(tn,an,Kr){var en=Kr.matchTokenType("STRING");if(en){var un=en.value,on;if(en.template){var cn=Yr.tokenize(un,!0);on=tn.parseStringTemplate(cn)}else on=[];return{type:"string",token:en,args:on,op:function(sn){for(var pn="",En=1;En<arguments.length;En++){var bn=arguments[En];bn!==void 0&&(pn+=bn)}return pn},evaluate:function(sn){return on.length===0?un:an.unifiedEval(this,sn)}}}}),Tn.addGrammarElement("nakedString",function(tn,an,Kr){if(Kr.hasMore()){var en=Kr.consumeUntilWhitespace();return Kr.matchTokenType("WHITESPACE"),{type:"nakedString",tokens:en,evaluate:function(un){return en.map(function(on){return on.value}).join("")}}}}),Tn.addLeafExpression("number",function(tn,an,Kr){var en=Kr.matchTokenType("NUMBER");if(en){var un=en,on=parseFloat(en.value);return{type:"number",value:on,numberToken:un,evaluate:function(){return on}}}}),Tn.addLeafExpression("idRef",function(tn,an,Kr){var en=Kr.matchTokenType("ID_REF");if(en&&en.value)if(en.template){var un=en.value.substring(2),on=Yr.tokenize(un),cn=tn.requireElement("expression",on);return{type:"idRefTemplate",args:[cn],op:function(sn,pn){return an.getRootNode(sn.me).getElementById(pn)},evaluate:function(sn){return an.unifiedEval(this,sn)}}}else{let sn=en.value.substring(1);return{type:"idRef",css:en.value,value:sn,evaluate:function(pn){return an.getRootNode(pn.me).getElementById(sn)}}}}),Tn.addLeafExpression("classRef",function(tn,an,Kr){var en=Kr.matchTokenType("CLASS_REF");if(en&&en.value)if(en.template){var un=en.value.substring(2),on=Yr.tokenize(un),cn=tn.requireElement("expression",on);return{type:"classRefTemplate",args:[cn],op:function(sn,pn){return new Pn("."+pn,sn.me,!0)},evaluate:function(sn){return an.unifiedEval(this,sn)}}}else{let sn=en.value;return{type:"classRef",css:sn,evaluate:function(pn){return new Pn(sn,pn.me,!0)}}}});class Zr extends Pn{constructor(an,Kr,en){super(an,Kr),this.templateParts=en,this.elements=en.filter(un=>un instanceof Element)}get css(){let an="",Kr=0;for(let en of this.templateParts)en instanceof Element?an+="[data-hs-query-id='"+Kr+++"']":an+=en;return an}[Symbol.iterator](){this.elements.forEach((Kr,en)=>Kr.dataset.hsQueryId=en);let an=super[Symbol.iterator]();return this.elements.forEach(Kr=>Kr.removeAttribute("data-hs-query-id")),an}}Tn.addLeafExpression("queryRef",function(tn,an,Kr){var en=Kr.matchOpToken("<");if(en){var un=Kr.consumeUntil("/");Kr.requireOpToken("/"),Kr.requireOpToken(">");var on=un.map(function(En){return En.type==="STRING"?'"'+En.value+'"':En.value}).join(""),cn,sn,pn;return/\$[^=]/.test(on)&&(cn=!0,sn=Yr.tokenize(on,!0),pn=tn.parseStringTemplate(sn)),{type:"queryRef",css:on,args:pn,op:function(En,...bn){return cn?new Zr(on,En.me,bn):new Pn(on,En.me)},evaluate:function(En){return an.unifiedEval(this,En)}}}}),Tn.addLeafExpression("attributeRef",function(tn,an,Kr){var en=Kr.matchTokenType("ATTRIBUTE_REF");if(en&&en.value){var un=en.value;if(un.indexOf("[")===0)var on=un.substring(2,un.length-1);else var on=un.substring(1);var cn="["+on+"]",sn=on.split("="),pn=sn[0],En=sn[1];return En&&En.indexOf('"')===0&&(En=En.substring(1,En.length-1)),{type:"attributeRef",name:pn,css:cn,value:En,op:function(bn){var Nn=bn.you||bn.me;if(Nn)return Nn.getAttribute(pn)},evaluate:function(bn){return an.unifiedEval(this,bn)}}}}),Tn.addLeafExpression("styleRef",function(tn,an,Kr){var en=Kr.matchTokenType("STYLE_REF");if(en&&en.value){var un=en.value.substr(1);return un.startsWith("computed-")?(un=un.substr(9),{type:"computedStyleRef",name:un,op:function(on){var cn=on.you||on.me;if(cn)return an.resolveComputedStyle(cn,un)},evaluate:function(on){return an.unifiedEval(this,on)}}):{type:"styleRef",name:un,op:function(on){var cn=on.you||on.me;if(cn)return an.resolveStyle(cn,un)},evaluate:function(on){return an.unifiedEval(this,on)}}}}),Tn.addGrammarElement("objectKey",function(tn,an,Kr){var en;if(en=Kr.matchTokenType("STRING"))return{type:"objectKey",key:en.value,evaluate:function(){return en.value}};if(Kr.matchOpToken("[")){var un=tn.parseElement("expression",Kr);return Kr.requireOpToken("]"),{type:"objectKey",expr:un,args:[un],op:function(cn,sn){return sn},evaluate:function(cn){return an.unifiedEval(this,cn)}}}else{var on="";do en=Kr.matchTokenType("IDENTIFIER")||Kr.matchOpToken("-"),en&&(on+=en.value);while(en);return{type:"objectKey",key:on,evaluate:function(){return on}}}}),Tn.addLeafExpression("objectLiteral",function(tn,an,Kr){if(Kr.matchOpToken("{")){var en=[],un=[];if(!Kr.matchOpToken("}")){do{var on=tn.requireElement("objectKey",Kr);Kr.requireOpToken(":");var cn=tn.requireElement("expression",Kr);un.push(cn),en.push(on)}while(Kr.matchOpToken(",")&&!Kr.peekToken("}",0,"R_BRACE"));Kr.requireOpToken("}")}return{type:"objectLiteral",args:[en,un],op:function(sn,pn,En){for(var bn={},Nn=0;Nn<pn.length;Nn++)bn[pn[Nn]]=En[Nn];return bn},evaluate:function(sn){return an.unifiedEval(this,sn)}}}}),Tn.addGrammarElement("nakedNamedArgumentList",function(tn,an,Kr){var en=[],un=[];if(Kr.currentToken().type==="IDENTIFIER")do{var on=Kr.requireTokenType("IDENTIFIER");Kr.requireOpToken(":");var cn=tn.requireElement("expression",Kr);un.push(cn),en.push({name:on,value:cn})}while(Kr.matchOpToken(","));return{type:"namedArgumentList",fields:en,args:[un],op:function(sn,pn){for(var En={_namedArgList_:!0},bn=0;bn<pn.length;bn++){var Nn=en[bn];En[Nn.name.value]=pn[bn]}return En},evaluate:function(sn){return an.unifiedEval(this,sn)}}}),Tn.addGrammarElement("namedArgumentList",function(tn,an,Kr){if(Kr.matchOpToken("(")){var en=tn.requireElement("nakedNamedArgumentList",Kr);return Kr.requireOpToken(")"),en}}),Tn.addGrammarElement("symbol",function(tn,an,Kr){var en="default";Kr.matchToken("global")?en="global":Kr.matchToken("element")||Kr.matchToken("module")?(en="element",Kr.matchOpToken("'")&&Kr.requireToken("s")):Kr.matchToken("local")&&(en="local");let un=Kr.matchOpToken(":"),on=Kr.matchTokenType("IDENTIFIER");if(on&&on.value){var cn=on.value;return un&&(cn=":"+cn),en==="default"&&(cn.indexOf("$")===0&&(en="global"),cn.indexOf(":")===0&&(en="element")),{type:"symbol",token:on,scope:en,name:cn,evaluate:function(sn){return an.resolveSymbol(cn,sn,en)}}}}),Tn.addGrammarElement("implicitMeTarget",function(tn,an,Kr){return{type:"implicitMeTarget",evaluate:function(en){return en.you||en.me}}}),Tn.addLeafExpression("boolean",function(tn,an,Kr){var en=Kr.matchToken("true")||Kr.matchToken("false");if(!en)return;let un=en.value==="true";return{type:"boolean",evaluate:function(on){return un}}}),Tn.addLeafExpression("null",function(tn,an,Kr){if(Kr.matchToken("null"))return{type:"null",evaluate:function(en){return null}}}),Tn.addLeafExpression("arrayLiteral",function(tn,an,Kr){if(Kr.matchOpToken("[")){var en=[];if(!Kr.matchOpToken("]")){do{var un=tn.requireElement("expression",Kr);en.push(un)}while(Kr.matchOpToken(","));Kr.requireOpToken("]")}return{type:"arrayLiteral",values:en,args:[en],op:function(on,cn){return cn},evaluate:function(on){return an.unifiedEval(this,on)}}}}),Tn.addLeafExpression("blockLiteral",function(tn,an,Kr){if(Kr.matchOpToken("\\")){var en=[],un=Kr.matchTokenType("IDENTIFIER");if(un)for(en.push(un);Kr.matchOpToken(",");)en.push(Kr.requireTokenType("IDENTIFIER"));Kr.requireOpToken("-"),Kr.requireOpToken(">");var on=tn.requireElement("expression",Kr);return{type:"blockLiteral",args:en,expr:on,evaluate:function(cn){var sn=function(){for(var pn=0;pn<en.length;pn++)cn.locals[en[pn].value]=arguments[pn];return on.evaluate(cn)};return sn}}}}),Tn.addIndirectExpression("propertyAccess",function(tn,an,Kr,en){if(Kr.matchOpToken(".")){var un=Kr.requireTokenType("IDENTIFIER"),on={type:"propertyAccess",root:en,prop:un,args:[en],op:function(cn,sn){var pn=an.resolveProperty(sn,un.value);return pn},evaluate:function(cn){return an.unifiedEval(this,cn)}};return tn.parseElement("indirectExpression",Kr,on)}}),Tn.addIndirectExpression("of",function(tn,an,Kr,en){if(Kr.matchToken("of")){for(var un=tn.requireElement("unaryExpression",Kr),on=null,cn=en;cn.root;)on=cn,cn=cn.root;cn.type!=="symbol"&&cn.type!=="attributeRef"&&cn.type!=="styleRef"&&cn.type!=="computedStyleRef"&&tn.raiseParseError(Kr,"Cannot take a property of a non-symbol: "+cn.type);var sn=cn.type==="attributeRef",pn=cn.type==="styleRef"||cn.type==="computedStyleRef";if(sn||pn)var En=cn;var bn=cn.name,Nn={type:"ofExpression",prop:cn.token,root:un,attribute:En,expression:en,args:[un],op:function(Hn,kn){return sn?an.resolveAttribute(kn,bn):pn?cn.type==="computedStyleRef"?an.resolveComputedStyle(kn,bn):an.resolveStyle(kn,bn):an.resolveProperty(kn,bn)},evaluate:function(Hn){return an.unifiedEval(this,Hn)}};return cn.type==="attributeRef"&&(Nn.attribute=cn),on?(on.root=Nn,on.args=[Nn]):en=Nn,tn.parseElement("indirectExpression",Kr,en)}}),Tn.addIndirectExpression("possessive",function(tn,an,Kr,en){if(!tn.possessivesDisabled){var un=Kr.matchOpToken("'");if(un||en.type==="symbol"&&(en.name==="my"||en.name==="its"||en.name==="your")&&(Kr.currentToken().type==="IDENTIFIER"||Kr.currentToken().type==="ATTRIBUTE_REF"||Kr.currentToken().type==="STYLE_REF")){un&&Kr.requireToken("s");var on,cn,sn;on=tn.parseElement("attributeRef",Kr),on==null&&(cn=tn.parseElement("styleRef",Kr),cn==null&&(sn=Kr.requireTokenType("IDENTIFIER")));var pn={type:"possessive",root:en,attribute:on||cn,prop:sn,args:[en],op:function(En,bn){if(on)var Nn=an.resolveAttribute(bn,on.name);else if(cn){var Nn;cn.type==="computedStyleRef"?Nn=an.resolveComputedStyle(bn,cn.name):Nn=an.resolveStyle(bn,cn.name)}else var Nn=an.resolveProperty(bn,sn.value);return Nn},evaluate:function(En){return an.unifiedEval(this,En)}};return tn.parseElement("indirectExpression",Kr,pn)}}}),Tn.addIndirectExpression("inExpression",function(tn,an,Kr,en){if(Kr.matchToken("in")){var un=tn.requireElement("unaryExpression",Kr),on={type:"inExpression",root:en,args:[en,un],op:function(cn,sn,pn){var En=[];if(sn.css)an.implicitLoop(pn,function(Nn){for(var Hn=Nn.querySelectorAll(sn.css),kn=0;kn<Hn.length;kn++)En.push(Hn[kn])});else if(sn instanceof Element){var bn=!1;if(an.implicitLoop(pn,function(Nn){Nn.contains(sn)&&(bn=!0)}),bn)return sn}else an.implicitLoop(sn,function(Nn){an.implicitLoop(pn,function(Hn){Nn===Hn&&En.push(Nn)})});return En},evaluate:function(cn){return an.unifiedEval(this,cn)}};return tn.parseElement("indirectExpression",Kr,on)}}),Tn.addIndirectExpression("asExpression",function(tn,an,Kr,en){if(Kr.matchToken("as")){Kr.matchToken("a")||Kr.matchToken("an");var un=tn.requireElement("dotOrColonPath",Kr).evaluate(),on={type:"asExpression",root:en,args:[en],op:function(cn,sn){return an.convertValue(sn,un)},evaluate:function(cn){return an.unifiedEval(this,cn)}};return tn.parseElement("indirectExpression",Kr,on)}}),Tn.addIndirectExpression("functionCall",function(tn,an,Kr,en){if(Kr.matchOpToken("(")){var un=[];if(!Kr.matchOpToken(")")){do un.push(tn.requireElement("expression",Kr));while(Kr.matchOpToken(","));Kr.requireOpToken(")")}if(en.root)var on={type:"functionCall",root:en,argExressions:un,args:[en.root,un],op:function(cn,sn,pn){an.nullCheck(sn,en.root);var En=sn[en.prop.value];return an.nullCheck(En,en),En.hyperfunc&&pn.push(cn),En.apply(sn,pn)},evaluate:function(cn){return an.unifiedEval(this,cn)}};else var on={type:"functionCall",root:en,argExressions:un,args:[en,un],op:function(sn,pn,En){an.nullCheck(pn,en),pn.hyperfunc&&En.push(sn);var bn=pn.apply(null,En);return bn},evaluate:function(sn){return an.unifiedEval(this,sn)}};return tn.parseElement("indirectExpression",Kr,on)}}),Tn.addIndirectExpression("attributeRefAccess",function(tn,an,Kr,en){var un=tn.parseElement("attributeRef",Kr);if(un){var on={type:"attributeRefAccess",root:en,attribute:un,args:[en],op:function(cn,sn){var pn=an.resolveAttribute(sn,un.name);return pn},evaluate:function(cn){return an.unifiedEval(this,cn)}};return on}}),Tn.addIndirectExpression("arrayIndex",function(tn,an,Kr,en){if(Kr.matchOpToken("[")){var un=!1,on=!1,cn=null,sn=null;if(Kr.matchOpToken(".."))un=!0,cn=tn.requireElement("expression",Kr);else if(cn=tn.requireElement("expression",Kr),Kr.matchOpToken("..")){on=!0;var pn=Kr.currentToken();pn.type!=="R_BRACKET"&&(sn=tn.parseElement("expression",Kr))}Kr.requireOpToken("]");var En={type:"arrayIndex",root:en,prop:cn,firstIndex:cn,secondIndex:sn,args:[en,cn,sn],op:function(bn,Nn,Hn,kn){return Nn==null?null:un?(Hn<0&&(Hn=Nn.length+Hn),Nn.slice(0,Hn+1)):on?kn!=null?(kn<0&&(kn=Nn.length+kn),Nn.slice(Hn,kn+1)):Nn.slice(Hn):Nn[Hn]},evaluate:function(bn){return an.unifiedEval(this,bn)}};return tn.parseElement("indirectExpression",Kr,En)}});var nn=["em","ex","cap","ch","ic","rem","lh","rlh","vw","vh","vi","vb","vmin","vmax","cm","mm","Q","pc","pt","px"];Tn.addGrammarElement("postfixExpression",function(tn,an,Kr){var en=tn.parseElement("negativeNumber",Kr);let un=Kr.matchAnyToken.apply(Kr,nn)||Kr.matchOpToken("%");if(un)return{type:"stringPostfix",postfix:un.value,args:[en],op:function(pn,En){return""+En+un.value},evaluate:function(pn){return an.unifiedEval(this,pn)}};var on=null;if(Kr.matchToken("s")||Kr.matchToken("seconds")?on=1e3:(Kr.matchToken("ms")||Kr.matchToken("milliseconds"))&&(on=1),on)return{type:"timeExpression",time:en,factor:on,args:[en],op:function(pn,En){return En*on},evaluate:function(pn){return an.unifiedEval(this,pn)}};if(Kr.matchOpToken(":")){var cn=Kr.requireTokenType("IDENTIFIER");if(!cn.value)return;var sn=!Kr.matchOpToken("!");return{type:"typeCheck",typeName:cn,nullOk:sn,args:[en],op:function(pn,En){var bn=an.typeCheck(En,this.typeName.value,sn);if(bn)return En;throw new Error("Typecheck failed! Expected: "+cn.value)},evaluate:function(pn){return an.unifiedEval(this,pn)}}}else return en}),Tn.addGrammarElement("logicalNot",function(tn,an,Kr){if(Kr.matchToken("not")){var en=tn.requireElement("unaryExpression",Kr);return{type:"logicalNot",root:en,args:[en],op:function(un,on){return!on},evaluate:function(un){return an.unifiedEval(this,un)}}}}),Tn.addGrammarElement("noExpression",function(tn,an,Kr){if(Kr.matchToken("no")){var en=tn.requireElement("unaryExpression",Kr);return{type:"noExpression",root:en,args:[en],op:function(un,on){return an.isEmpty(on)},evaluate:function(un){return an.unifiedEval(this,un)}}}}),Tn.addLeafExpression("some",function(tn,an,Kr){if(Kr.matchToken("some")){var en=tn.requireElement("expression",Kr);return{type:"noExpression",root:en,args:[en],op:function(un,on){return!an.isEmpty(on)},evaluate(un){return an.unifiedEval(this,un)}}}}),Tn.addGrammarElement("negativeNumber",function(tn,an,Kr){if(Kr.matchOpToken("-")){var en=tn.requireElement("negativeNumber",Kr);return{type:"negativeNumber",root:en,args:[en],op:function(un,on){return-1*on},evaluate:function(un){return an.unifiedEval(this,un)}}}else return tn.requireElement("primaryExpression",Kr)}),Tn.addGrammarElement("unaryExpression",function(tn,an,Kr){return Kr.matchToken("the"),tn.parseAnyOf(["beepExpression","logicalNot","relativePositionalExpression","positionalExpression","noExpression","postfixExpression"],Kr)}),Tn.addGrammarElement("beepExpression",function(tn,an,Kr){if(Kr.matchToken("beep!")){var en=tn.parseElement("unaryExpression",Kr);if(en){en.booped=!0;var un=en.evaluate;return en.evaluate=function(on){let cn=un.apply(en,arguments),sn=on.me;return an.beepValueToConsole(sn,en,cn),cn},en}}});var hn=function(tn,an,Kr,en){for(var un=an.querySelectorAll(Kr),on=0;on<un.length;on++){var cn=un[on];if(cn.compareDocumentPosition(tn)===Node.DOCUMENT_POSITION_PRECEDING)return cn}if(en)return un[0]},dn=function(tn,an,Kr,en){for(var un=an.querySelectorAll(Kr),on=un.length-1;on>=0;on--){var cn=un[on];if(cn.compareDocumentPosition(tn)===Node.DOCUMENT_POSITION_FOLLOWING)return cn}if(en)return un[un.length-1]},wn=function(tn,an,Kr,en){var un=[];ln.prototype.forEach(an,function(pn){(pn.matches(Kr)||pn===tn)&&un.push(pn)});for(var on=0;on<un.length-1;on++){var cn=un[on];if(cn===tn)return un[on+1]}if(en){var sn=un[0];if(sn&&sn.matches(Kr))return sn}},vn=function(tn,an,Kr,en){return wn(tn,Array.from(an).reverse(),Kr,en)};Tn.addGrammarElement("relativePositionalExpression",function(tn,an,Kr){var en=Kr.matchAnyToken("next","previous");if(en){var un=en.value==="next",on=tn.parseElement("expression",Kr);if(Kr.matchToken("from")){Kr.pushFollow("in");try{var cn=tn.requireElement("unaryExpression",Kr)}finally{Kr.popFollow()}}else var cn=tn.requireElement("implicitMeTarget",Kr);var sn=!1,pn;if(Kr.matchToken("in")){sn=!0;var En=tn.requireElement("unaryExpression",Kr)}else Kr.matchToken("within")?pn=tn.requireElement("unaryExpression",Kr):pn=document.body;var bn=!1;return Kr.matchToken("with")&&(Kr.requireToken("wrapping"),bn=!0),{type:"relativePositionalExpression",from:cn,forwardSearch:un,inSearch:sn,wrapping:bn,inElt:En,withinElt:pn,operator:en.value,args:[on,cn,En,pn],op:function(Nn,Hn,kn,Sn,Un){var _n=Hn.css;if(_n==null)throw"Expected a CSS value to be returned by "+Jr.sourceFor.apply(on);if(sn){if(Sn)return un?wn(kn,Sn,_n,bn):vn(kn,Sn,_n,bn)}else if(Un)return un?hn(kn,Un,_n,bn):dn(kn,Un,_n,bn)},evaluate:function(Nn){return an.unifiedEval(this,Nn)}}}}),Tn.addGrammarElement("positionalExpression",function(tn,an,Kr){var en=Kr.matchAnyToken("first","last","random");if(!en)return;Kr.matchAnyToken("in","from","of");var un=tn.requireElement("unaryExpression",Kr);let on=en.value;return{type:"positionalExpression",rhs:un,operator:en.value,args:[un],op:function(cn,sn){if(sn&&!Array.isArray(sn)&&(sn.children?sn=sn.children:sn=Array.from(sn)),sn){if(on==="first")return sn[0];if(on==="last")return sn[sn.length-1];if(on==="random")return sn[Math.floor(Math.random()*sn.length)]}},evaluate:function(cn){return an.unifiedEval(this,cn)}}}),Tn.addGrammarElement("mathOperator",function(tn,an,Kr){var en=tn.parseElement("unaryExpression",Kr),un,on=null;for(un=Kr.matchAnyOpToken("+","-","*","/")||Kr.matchToken("mod");un;){on=on||un;var cn=un.value;on.value!==cn&&tn.raiseParseError(Kr,"You must parenthesize math operations with different operators");var sn=tn.parseElement("unaryExpression",Kr);en={type:"mathOperator",lhs:en,rhs:sn,operator:cn,args:[en,sn],op:function(pn,En,bn){if(cn==="+")return En+bn;if(cn==="-")return En-bn;if(cn==="*")return En*bn;if(cn==="/")return En/bn;if(cn==="mod")return En%bn},evaluate:function(pn){return an.unifiedEval(this,pn)}},un=Kr.matchAnyOpToken("+","-","*","/")||Kr.matchToken("mod")}return en}),Tn.addGrammarElement("mathExpression",function(tn,an,Kr){return tn.parseAnyOf(["mathOperator","unaryExpression"],Kr)});function yn(tn,an,Kr){if(an.contains)return an.contains(Kr);if(an.includes)return an.includes(Kr);throw Error("The value of "+tn.sourceFor()+" does not have a contains or includes method on it")}function fn(tn,an,Kr){if(an.match)return!!an.match(Kr);if(an.matches)return an.matches(Kr);throw Error("The value of "+tn.sourceFor()+" does not have a match or matches method on it")}Tn.addGrammarElement("comparisonOperator",function(tn,an,Kr){var en=tn.parseElement("mathExpression",Kr),un=Kr.matchAnyOpToken("<",">","<=",">=","==","===","!=","!=="),on=un?un.value:null,cn=!0,sn=!1;if(on==null&&(Kr.matchToken("is")||Kr.matchToken("am")?Kr.matchToken("not")?Kr.matchToken("in")?on="not in":Kr.matchToken("a")||Kr.matchToken("an")?(on="not a",sn=!0):Kr.matchToken("empty")?(on="not empty",cn=!1):(Kr.matchToken("really")?on="!==":on="!=",Kr.matchToken("equal")&&Kr.matchToken("to")):Kr.matchToken("in")?on="in":Kr.matchToken("a")||Kr.matchToken("an")?(on="a",sn=!0):Kr.matchToken("empty")?(on="empty",cn=!1):Kr.matchToken("less")?(Kr.requireToken("than"),Kr.matchToken("or")?(Kr.requireToken("equal"),Kr.requireToken("to"),on="<="):on="<"):Kr.matchToken("greater")?(Kr.requireToken("than"),Kr.matchToken("or")?(Kr.requireToken("equal"),Kr.requireToken("to"),on=">="):on=">"):(Kr.matchToken("really")?on="===":on="==",Kr.matchToken("equal")&&Kr.matchToken("to")):Kr.matchToken("equals")?on="==":Kr.matchToken("really")?(Kr.requireToken("equals"),on="==="):Kr.matchToken("exist")||Kr.matchToken("exists")?(on="exist",cn=!1):Kr.matchToken("matches")||Kr.matchToken("match")?on="match":Kr.matchToken("contains")||Kr.matchToken("contain")?on="contain":Kr.matchToken("includes")||Kr.matchToken("include")?on="include":(Kr.matchToken("do")||Kr.matchToken("does"))&&(Kr.requireToken("not"),Kr.matchToken("matches")||Kr.matchToken("match")?on="not match":Kr.matchToken("contains")||Kr.matchToken("contain")?on="not contain":Kr.matchToken("exist")||Kr.matchToken("exist")?(on="not exist",cn=!1):Kr.matchToken("include")?on="not include":tn.raiseParseError(Kr,"Expected matches or contains"))),on){var pn,En,bn;sn?(pn=Kr.requireTokenType("IDENTIFIER"),En=!Kr.matchOpToken("!")):cn&&(bn=tn.requireElement("mathExpression",Kr),(on==="match"||on==="not match")&&(bn=bn.css?bn.css:bn));var Nn=en;en={type:"comparisonOperator",operator:on,typeName:pn,nullOk:En,lhs:en,rhs:bn,args:[en,bn],op:function(Hn,kn,Sn){if(on==="==")return kn==Sn;if(on==="!=")return kn!=Sn;if(on==="===")return kn===Sn;if(on==="!==")return kn!==Sn;if(on==="match")return kn!=null&&fn(Nn,kn,Sn);if(on==="not match")return kn==null||!fn(Nn,kn,Sn);if(on==="in")return Sn!=null&&yn(bn,Sn,kn);if(on==="not in")return Sn==null||!yn(bn,Sn,kn);if(on==="contain")return kn!=null&&yn(Nn,kn,Sn);if(on==="not contain")return kn==null||!yn(Nn,kn,Sn);if(on==="include")return kn!=null&&yn(Nn,kn,Sn);if(on==="not include")return kn==null||!yn(Nn,kn,Sn);if(on==="===")return kn===Sn;if(on==="!==")return kn!==Sn;if(on==="<")return kn<Sn;if(on===">")return kn>Sn;if(on==="<=")return kn<=Sn;if(on===">=")return kn>=Sn;if(on==="empty")return an.isEmpty(kn);if(on==="not empty")return!an.isEmpty(kn);if(on==="exist")return an.doesExist(kn);if(on==="not exist")return!an.doesExist(kn);if(on==="a")return an.typeCheck(kn,pn.value,En);if(on==="not a")return!an.typeCheck(kn,pn.value,En);throw"Unknown comparison : "+on},evaluate:function(Hn){return an.unifiedEval(this,Hn)}}}return en}),Tn.addGrammarElement("comparisonExpression",function(tn,an,Kr){return tn.parseAnyOf(["comparisonOperator","mathExpression"],Kr)}),Tn.addGrammarElement("logicalOperator",function(tn,an,Kr){var en=tn.parseElement("comparisonExpression",Kr),un,on=null;for(un=Kr.matchToken("and")||Kr.matchToken("or");un;){on=on||un,on.value!==un.value&&tn.raiseParseError(Kr,"You must parenthesize logical operations with different operators");var cn=tn.requireElement("comparisonExpression",Kr);let sn=un.value;en={type:"logicalOperator",operator:sn,lhs:en,rhs:cn,args:[en,cn],op:function(pn,En,bn){return sn==="and"?En&&bn:En||bn},evaluate:function(pn){return an.unifiedEval(this,pn,sn==="or")}},un=Kr.matchToken("and")||Kr.matchToken("or")}return en}),Tn.addGrammarElement("logicalExpression",function(tn,an,Kr){return tn.parseAnyOf(["logicalOperator","mathExpression"],Kr)}),Tn.addGrammarElement("asyncExpression",function(tn,an,Kr){if(Kr.matchToken("async")){var en=tn.requireElement("logicalExpression",Kr),un={type:"asyncExpression",value:en,evaluate:function(on){return{asyncWrapper:!0,value:this.value.evaluate(on)}}};return un}else return tn.parseElement("logicalExpression",Kr)}),Tn.addGrammarElement("expression",function(tn,an,Kr){return Kr.matchToken("the"),tn.parseElement("asyncExpression",Kr)}),Tn.addGrammarElement("assignableExpression",function(tn,an,Kr){Kr.matchToken("the");var en=tn.parseElement("primaryExpression",Kr);return en&&(en.type==="symbol"||en.type==="ofExpression"||en.type==="propertyAccess"||en.type==="attributeRefAccess"||en.type==="attributeRef"||en.type==="styleRef"||en.type==="arrayIndex"||en.type==="possessive")||tn.raiseParseError(Kr,"A target expression must be writable. The expression type '"+(en&&en.type)+"' is not."),en}),Tn.addGrammarElement("hyperscript",function(tn,an,Kr){var en=[];if(Kr.hasMore())for(;tn.featureStart(Kr.currentToken())||Kr.currentToken().value==="(";){var un=tn.requireElement("feature",Kr);en.push(un),Kr.matchToken("end")}return{type:"hyperscript",features:en,apply:function(on,cn,sn){for(let pn of en)pn.install(on,cn,sn)}}});var An=function(tn){var an=[];if(tn.token(0).value==="("&&(tn.token(1).value===")"||tn.token(2).value===","||tn.token(2).value===")")){tn.matchOpToken("(");do an.push(tn.requireTokenType("IDENTIFIER"));while(tn.matchOpToken(","));tn.requireOpToken(")")}return an};Tn.addFeature("on",function(tn,an,Kr){if(Kr.matchToken("on")){var en=!1;Kr.matchToken("every")&&(en=!0);var un=[],on=null;do{var cn=tn.requireElement("eventName",Kr,"Expected event name"),sn=cn.evaluate();on?on=on+" or "+sn:on="on "+sn;var pn=An(Kr),En=null;Kr.matchOpToken("[")&&(En=tn.requireElement("expression",Kr),Kr.requireOpToken("]"));var bn,Nn,Hn;if(Kr.currentToken().type==="NUMBER"){var kn=Kr.consumeToken();if(!kn.value)return;if(bn=parseInt(kn.value),Kr.matchToken("to")){var Sn=Kr.consumeToken();if(!Sn.value)return;Nn=parseInt(Sn.value)}else Kr.matchToken("and")&&(Hn=!0,Kr.requireToken("on"))}var Un,_n;if(sn==="intersection"){if(Un={},Kr.matchToken("with")&&(Un.with=tn.requireElement("expression",Kr).evaluate()),Kr.matchToken("having"))do Kr.matchToken("margin")?Un.rootMargin=tn.requireElement("stringLike",Kr).evaluate():Kr.matchToken("threshold")?Un.threshold=tn.requireElement("expression",Kr).evaluate():tn.raiseParseError(Kr,"Unknown intersection config specification");while(Kr.matchToken("and"))}else if(sn==="mutation")if(_n={},Kr.matchToken("of"))do if(Kr.matchToken("anything"))_n.attributes=!0,_n.subtree=!0,_n.characterData=!0,_n.childList=!0;else if(Kr.matchToken("childList"))_n.childList=!0;else if(Kr.matchToken("attributes"))_n.attributes=!0,_n.attributeOldValue=!0;else if(Kr.matchToken("subtree"))_n.subtree=!0;else if(Kr.matchToken("characterData"))_n.characterData=!0,_n.characterDataOldValue=!0;else if(Kr.currentToken().type==="ATTRIBUTE_REF"){var ti=Kr.consumeToken();_n.attributeFilter==null&&(_n.attributeFilter=[]),ti.value.indexOf("@")==0?_n.attributeFilter.push(ti.value.substring(1)):tn.raiseParseError(Kr,"Only shorthand attribute references are allowed here")}else tn.raiseParseError(Kr,"Unknown mutation config specification");while(Kr.matchToken("or"));else _n.attributes=!0,_n.characterData=!0,_n.childList=!0;var ri=null,Si=!1;if(Kr.matchToken("from"))if(Kr.matchToken("elsewhere"))Si=!0;else{Kr.pushFollow("or");try{ri=tn.requireElement("expression",Kr)}finally{Kr.popFollow()}ri||tn.raiseParseError(Kr,'Expected either target value or "elsewhere".')}if(ri===null&&Si===!1&&Kr.matchToken("elsewhere")&&(Si=!0),Kr.matchToken("in"))var Ni=tn.parseElement("unaryExpression",Kr);if(Kr.matchToken("debounced")){Kr.requireToken("at");var oi=tn.requireElement("unaryExpression",Kr),Ei=oi.evaluate({})}else if(Kr.matchToken("throttled")){Kr.requireToken("at");var oi=tn.requireElement("unaryExpression",Kr),Di=oi.evaluate({})}un.push({execCount:0,every:en,on:sn,args:pn,filter:En,from:ri,inExpr:Ni,elsewhere:Si,startCount:bn,endCount:Nn,unbounded:Hn,debounceTime:Ei,throttleTime:Di,mutationSpec:_n,intersectionSpec:Un,debounced:void 0,lastExec:void 0})}while(Kr.matchToken("or"));var bi=!0;if(!en&&Kr.matchToken("queue"))if(Kr.matchToken("all"))var Ci=!0,bi=!1;else if(Kr.matchToken("first"))var Ji=!0;else if(Kr.matchToken("none"))var la=!0;else Kr.requireToken("last");var wa=tn.requireElement("commandList",Kr);tn.ensureTerminated(wa);var Va,ka;if(Kr.matchToken("catch")&&(Va=Kr.requireTokenType("IDENTIFIER").value,ka=tn.requireElement("commandList",Kr),tn.ensureTerminated(ka)),Kr.matchToken("finally")){var Eo=tn.requireElement("commandList",Kr);tn.ensureTerminated(Eo)}var Li={displayName:on,events:un,start:wa,every:en,execCount:0,errorHandler:ka,errorSymbol:Va,execute:function(vi){let Xi=an.getEventQueueFor(vi.me,Li);if(Xi.executing&&en===!1){if(la||Ji&&Xi.queue.length>0)return;bi&&(Xi.queue.length=0),Xi.queue.push(vi);return}Li.execCount++,Xi.executing=!0,vi.meta.onHalt=function(){Xi.executing=!1;var Oi=Xi.queue.shift();Oi&&setTimeout(function(){Li.execute(Oi)},1)},vi.meta.reject=function(Oi){console.error(Oi.message?Oi.message:Oi);var $n=an.getHyperTrace(vi,Oi);$n&&$n.print(),an.triggerEvent(vi.me,"exception",{error:Oi})},wa.execute(vi)},install:function(vi,Xi){for(let $n of Li.events){var Oi;$n.elsewhere?Oi=[document]:$n.from?Oi=$n.from.evaluate(an.makeContext(vi,Li,vi,null)):Oi=[vi],an.implicitLoop(Oi,function(Mi){var Zi=$n.on;if(Mi==null){console.warn("'%s' feature ignored because target does not exists:",on,vi);return}if($n.mutationSpec&&(Zi="hyperscript:mutation",new MutationObserver(function(Vi,si){Li.executing||an.triggerEvent(Mi,Zi,{mutationList:Vi,observer:si})}).observe(Mi,$n.mutationSpec)),$n.intersectionSpec){Zi="hyperscript:intersection";let ua=new IntersectionObserver(function(Vi){for(let Sa of Vi){var si={observer:ua};si=Object.assign(si,Sa),si.intersecting=Sa.isIntersecting,an.triggerEvent(Mi,Zi,si)}},$n.intersectionSpec);ua.observe(Mi)}var Ko=Mi.addEventListener||Mi.on;Ko.call(Mi,Zi,function ua(Vi){if(typeof Node<"u"&&vi instanceof Node&&Mi!==vi&&!vi.isConnected){Mi.removeEventListener(Zi,ua);return}var si=an.makeContext(vi,Li,vi,Vi);if(!($n.elsewhere&&vi.contains(Vi.target))){$n.from&&(si.result=Mi);for(let Ca of $n.args){let bo=si.event[Ca.value];bo!==void 0?si.locals[Ca.value]=bo:"detail"in si.event&&(si.locals[Ca.value]=si.event.detail[Ca.value])}if(si.meta.errorHandler=ka,si.meta.errorSymbol=Va,si.meta.finallyHandler=Eo,$n.filter){var Sa=si.meta.context;si.meta.context=si.event;try{var Jo=$n.filter.evaluate(si);if(!Jo)return}finally{si.meta.context=Sa}}if($n.inExpr){for(var ea=Vi.target;;)if(ea.matches&&ea.matches($n.inExpr.css)){si.result=ea;break}else if(ea=ea.parentElement,ea==null)return}if($n.execCount++,$n.startCount){if($n.endCount){if($n.execCount<$n.startCount||$n.execCount>$n.endCount)return}else if($n.unbounded){if($n.execCount<$n.startCount)return}else if($n.execCount!==$n.startCount)return}if($n.debounceTime){$n.debounced&&clearTimeout($n.debounced),$n.debounced=setTimeout(function(){Li.execute(si)},$n.debounceTime);return}if($n.throttleTime){if($n.lastExec&&Date.now()<$n.lastExec+$n.throttleTime)return;$n.lastExec=Date.now()}Li.execute(si)}})})}}};return tn.setParent(wa,Li),Li}}),Tn.addFeature("def",function(tn,an,Kr){if(Kr.matchToken("def")){var en=tn.requireElement("dotOrColonPath",Kr),un=en.evaluate(),on=un.split("."),cn=on.pop(),sn=[];if(Kr.matchOpToken("(")&&!Kr.matchOpToken(")")){do sn.push(Kr.requireTokenType("IDENTIFIER"));while(Kr.matchOpToken(","));Kr.requireOpToken(")")}var pn=tn.requireElement("commandList",Kr),En,bn;if(Kr.matchToken("catch")&&(En=Kr.requireTokenType("IDENTIFIER").value,bn=tn.parseElement("commandList",Kr)),Kr.matchToken("finally")){var Nn=tn.requireElement("commandList",Kr);tn.ensureTerminated(Nn)}var Hn={displayName:cn+"("+sn.map(function(kn){return kn.value}).join(", ")+")",name:cn,args:sn,start:pn,errorHandler:bn,errorSymbol:En,finallyHandler:Nn,install:function(kn,Sn){var Un=function(){var _n=an.makeContext(Sn,Hn,kn,null);_n.meta.errorHandler=bn,_n.meta.errorSymbol=En,_n.meta.finallyHandler=Nn;for(var ti=0;ti<sn.length;ti++){var ri=sn[ti],Si=arguments[ti];ri&&(_n.locals[ri.value]=Si)}_n.meta.caller=arguments[sn.length],_n.meta.caller&&(_n.meta.callingCommand=_n.meta.caller.meta.command);var Ni,oi=null,Ei=new Promise(function(Di,bi){Ni=Di,oi=bi});return pn.execute(_n),_n.meta.returned?_n.meta.returnValue:(_n.meta.resolve=Ni,_n.meta.reject=oi,Ei)};Un.hyperfunc=!0,Un.hypername=un,an.assignToNamespace(kn,on,cn,Un)}};return tn.ensureTerminated(pn),bn&&tn.ensureTerminated(bn),tn.setParent(pn,Hn),Hn}}),Tn.addFeature("set",function(tn,an,Kr){let en=tn.parseElement("setCommand",Kr);if(en){en.target.scope!=="element"&&tn.raiseParseError(Kr,"variables declared at the feature level must be element scoped.");let un={start:en,install:function(on,cn){en&&en.execute(an.makeContext(on,un,on,null))}};return tn.ensureTerminated(en),un}}),Tn.addFeature("init",function(tn,an,Kr){if(Kr.matchToken("init")){var en=Kr.matchToken("immediately"),un=tn.requireElement("commandList",Kr),on={start:un,install:function(cn,sn){let pn=function(){un&&un.execute(an.makeContext(cn,on,cn,null))};en?pn():setTimeout(pn,0)}};return tn.ensureTerminated(un),tn.setParent(un,on),on}}),Tn.addFeature("worker",function(tn,an,Kr){if(Kr.matchToken("worker")){tn.raiseParseError(Kr,"In order to use the 'worker' feature, include the _hyperscript worker plugin. See https://hyperscript.org/features/worker/ for more info.");return}}),Tn.addFeature("behavior",function(tn,an,Kr){if(Kr.matchToken("behavior")){var en=tn.requireElement("dotOrColonPath",Kr).evaluate(),un=en.split("."),on=un.pop(),cn=[];if(Kr.matchOpToken("(")&&!Kr.matchOpToken(")")){do cn.push(Kr.requireTokenType("IDENTIFIER").value);while(Kr.matchOpToken(","));Kr.requireOpToken(")")}for(var sn=tn.requireElement("hyperscript",Kr),pn=0;pn<sn.features.length;pn++){var En=sn.features[pn];En.behavior=en}return{install:function(bn,Nn){an.assignToNamespace(Gr.document&&Gr.document.body,un,on,function(Hn,kn,Sn){for(var Un=an.getInternalData(Hn),_n=Xn(Un,en+"Scope"),ti=0;ti<cn.length;ti++)_n[cn[ti]]=Sn[cn[ti]];sn.apply(Hn,kn)})}}}}),Tn.addFeature("install",function(tn,an,Kr){if(Kr.matchToken("install")){var en=tn.requireElement("dotOrColonPath",Kr).evaluate(),un=en.split("."),on=tn.parseElement("namedArgumentList",Kr),cn;return cn={install:function(sn,pn){an.unifiedEval({args:[on],op:function(En,bn){for(var Nn=Gr,Hn=0;Hn<un.length;Hn++)if(Nn=Nn[un[Hn]],typeof Nn!="object"&&typeof Nn!="function")throw new Error("No such behavior defined as "+en);if(!(Nn instanceof Function))throw new Error(en+" is not a behavior");Nn(sn,pn,bn)}},an.makeContext(sn,cn,sn,null))}}}}),Tn.addGrammarElement("jsBody",function(tn,an,Kr){for(var en=Kr.currentToken().start,un=Kr.currentToken(),on=[],cn="",sn=!1;Kr.hasMore();){un=Kr.consumeToken();var pn=Kr.token(0,!0);if(pn.type==="IDENTIFIER"&&pn.value==="end")break;sn?un.type==="IDENTIFIER"||un.type==="NUMBER"?cn+=un.value:(cn!==""&&on.push(cn),cn="",sn=!1):un.type==="IDENTIFIER"&&un.value==="function"&&(sn=!0)}var En=un.end+1;return{type:"jsBody",exposedFunctionNames:on,jsSource:Kr.source.substring(en,En)}}),Tn.addFeature("js",function(tn,an,Kr){if(Kr.matchToken("js")){var en=tn.requireElement("jsBody",Kr),un=en.jsSource+` 14 - return { `+en.exposedFunctionNames.map(function(cn){return cn+":"+cn}).join(",")+" } ",on=new Function(un);return{jsSource:un,function:on,exposedFunctionNames:en.exposedFunctionNames,install:function(){Object.assign(Gr,on())}}}}),Tn.addCommand("js",function(tn,an,Kr){if(Kr.matchToken("js")){var en=[];if(Kr.matchOpToken("(")&&!Kr.matchOpToken(")")){do{var un=Kr.requireTokenType("IDENTIFIER");en.push(un.value)}while(Kr.matchOpToken(","));Kr.requireOpToken(")")}var on=tn.requireElement("jsBody",Kr);Kr.matchToken("end");var cn=gi(Function,en.concat([on.jsSource])),sn={jsSource:on.jsSource,function:cn,inputs:en,op:function(pn){var En=[];en.forEach(function(Nn){En.push(an.resolveSymbol(Nn,pn,"default"))});var bn=cn.apply(Gr,En);return bn&&typeof bn.then=="function"?new Promise(function(Nn){bn.then(function(Hn){pn.result=Hn,Nn(an.findNext(this,pn))})}):(pn.result=bn,an.findNext(this,pn))}};return sn}}),Tn.addCommand("async",function(tn,an,Kr){if(Kr.matchToken("async")){if(Kr.matchToken("do")){for(var en=tn.requireElement("commandList",Kr),un=en;un.next;)un=un.next;un.next=an.HALT,Kr.requireToken("end")}else var en=tn.requireElement("command",Kr);var on={body:en,op:function(cn){return setTimeout(function(){en.execute(cn)}),an.findNext(this,cn)}};return tn.setParent(en,on),on}}),Tn.addCommand("tell",function(tn,an,Kr){var en=Kr.currentToken();if(Kr.matchToken("tell")){var un=tn.requireElement("expression",Kr),on=tn.requireElement("commandList",Kr);Kr.hasMore()&&!tn.featureStart(Kr.currentToken())&&Kr.requireToken("end");var cn="tell_"+en.start,sn={value:un,body:on,args:[un],resolveNext:function(pn){var En=pn.meta.iterators[cn];return En.index<En.value.length?(pn.you=En.value[En.index++],on):(pn.you=En.originalYou,this.next?this.next:an.findNext(this.parent,pn))},op:function(pn,En){return En==null?En=[]:Array.isArray(En)||En instanceof NodeList||(En=[En]),pn.meta.iterators[cn]={originalYou:pn.you,index:0,value:En},this.resolveNext(pn)}};return tn.setParent(on,sn),sn}}),Tn.addCommand("wait",function(tn,an,Kr){if(Kr.matchToken("wait")){var en;if(Kr.matchToken("for")){Kr.matchToken("a");var un=[];do{var on=Kr.token(0);on.type==="NUMBER"||on.type==="L_PAREN"?un.push({time:tn.requireElement("expression",Kr).evaluate()}):un.push({name:tn.requireElement("dotOrColonPath",Kr,"Expected event name").evaluate(),args:An(Kr)})}while(Kr.matchToken("or"));if(Kr.matchToken("from"))var cn=tn.requireElement("expression",Kr);return en={event:un,on:cn,args:[cn],op:function(pn,En){var bn=En||pn.me;if(!(bn instanceof EventTarget))throw new Error("Not a valid event target: "+this.on.sourceFor());return new Promise(Nn=>{var Hn=!1;for(let Sn of un){var kn=Un=>{if(pn.result=Un,Sn.args)for(let _n of Sn.args)pn.locals[_n.value]=Un[_n.value]||(Un.detail?Un.detail[_n.value]:null);Hn||(Hn=!0,Nn(an.findNext(this,pn)))};Sn.name?bn.addEventListener(Sn.name,kn,{once:!0}):Sn.time!=null&&setTimeout(kn,Sn.time,Sn.time)}})}},en}else{var sn;return Kr.matchToken("a")?(Kr.requireToken("tick"),sn=0):sn=tn.requireElement("expression",Kr),en={type:"waitCmd",time:sn,args:[sn],op:function(pn,En){return new Promise(bn=>{setTimeout(()=>{bn(an.findNext(this,pn))},En)})},execute:function(pn){return an.unifiedExec(this,pn)}},en}}}),Tn.addGrammarElement("dotOrColonPath",function(tn,an,Kr){var en=Kr.matchTokenType("IDENTIFIER");if(en){var un=[en.value],on=Kr.matchOpToken(".")||Kr.matchOpToken(":");if(on)do un.push(Kr.requireTokenType("IDENTIFIER","NUMBER").value);while(Kr.matchOpToken(on.value));return{type:"dotOrColonPath",path:un,evaluate:function(){return un.join(on?on.value:"")}}}}),Tn.addGrammarElement("eventName",function(tn,an,Kr){var en;return(en=Kr.matchTokenType("STRING"))?{evaluate:function(){return en.value}}:tn.parseElement("dotOrColonPath",Kr)});function Rn(tn,an,Kr,en){var un=an.requireElement("eventName",en),on=an.parseElement("namedArgumentList",en);if(tn==="send"&&en.matchToken("to")||tn==="trigger"&&en.matchToken("on"))var cn=an.requireElement("expression",en);else var cn=an.requireElement("implicitMeTarget",en);var sn={eventName:un,details:on,to:cn,args:[cn,un,on],op:function(pn,En,bn,Nn){return Kr.nullCheck(En,cn),Kr.implicitLoop(En,function(Hn){Kr.triggerEvent(Hn,bn,Nn,pn.me)}),Kr.findNext(sn,pn)}};return sn}Tn.addCommand("trigger",function(tn,an,Kr){if(Kr.matchToken("trigger"))return Rn("trigger",tn,an,Kr)}),Tn.addCommand("send",function(tn,an,Kr){if(Kr.matchToken("send"))return Rn("send",tn,an,Kr)});var Dn=function(tn,an,Kr,en){if(en)if(tn.commandBoundary(Kr.currentToken()))tn.raiseParseError(Kr,"'return' commands must return a value. If you do not wish to return a value, use 'exit' instead.");else var un=tn.requireElement("expression",Kr);var on={value:un,args:[un],op:function(cn,sn){var pn=cn.meta.resolve;return cn.meta.returned=!0,cn.meta.returnValue=sn,pn&&(sn?pn(sn):pn()),an.HALT}};return on};Tn.addCommand("return",function(tn,an,Kr){if(Kr.matchToken("return"))return Dn(tn,an,Kr,!0)}),Tn.addCommand("exit",function(tn,an,Kr){if(Kr.matchToken("exit"))return Dn(tn,an,Kr,!1)}),Tn.addCommand("halt",function(tn,an,Kr){if(Kr.matchToken("halt")){if(Kr.matchToken("the")){Kr.requireToken("event"),Kr.matchOpToken("'")&&Kr.requireToken("s");var en=!0}if(Kr.matchToken("bubbling"))var un=!0;else if(Kr.matchToken("default"))var on=!0;var cn=Dn(tn,an,Kr,!1),sn={keepExecuting:!0,bubbling:un,haltDefault:on,exit:cn,op:function(pn){if(pn.event)return un?pn.event.stopPropagation():(on||pn.event.stopPropagation(),pn.event.preventDefault()),en?an.findNext(this,pn):cn}};return sn}}),Tn.addCommand("log",function(tn,an,Kr){if(Kr.matchToken("log")){for(var en=[tn.parseElement("expression",Kr)];Kr.matchOpToken(",");)en.push(tn.requireElement("expression",Kr));if(Kr.matchToken("with"))var un=tn.requireElement("expression",Kr);var on={exprs:en,withExpr:un,args:[un,en],op:function(cn,sn,pn){return sn?sn.apply(null,pn):console.log.apply(null,pn),an.findNext(this,cn)}};return on}}),Tn.addCommand("beep!",function(tn,an,Kr){if(Kr.matchToken("beep!")){for(var en=[tn.parseElement("expression",Kr)];Kr.matchOpToken(",");)en.push(tn.requireElement("expression",Kr));var un={exprs:en,args:[en],op:function(on,cn){for(let sn=0;sn<en.length;sn++){let pn=en[sn],En=cn[sn];an.beepValueToConsole(on.me,pn,En)}return an.findNext(this,on)}};return un}}),Tn.addCommand("throw",function(tn,an,Kr){if(Kr.matchToken("throw")){var en=tn.requireElement("expression",Kr),un={expr:en,args:[en],op:function(on,cn){throw an.registerHyperTrace(on,cn),cn}};return un}});var In=function(tn,an,Kr){var en=tn.requireElement("expression",Kr),un={expr:en,args:[en],op:function(on,cn){return on.result=cn,an.findNext(un,on)}};return un};Tn.addCommand("call",function(tn,an,Kr){if(Kr.matchToken("call")){var en=In(tn,an,Kr);return en.expr&&en.expr.type!=="functionCall"&&tn.raiseParseError(Kr,"Must be a function invocation"),en}}),Tn.addCommand("get",function(tn,an,Kr){if(Kr.matchToken("get"))return In(tn,an,Kr)}),Tn.addCommand("make",function(tn,an,Kr){if(Kr.matchToken("make")){Kr.matchToken("a")||Kr.matchToken("an");var en=tn.requireElement("expression",Kr),un=[];if(en.type!=="queryRef"&&Kr.matchToken("from"))do un.push(tn.requireElement("expression",Kr));while(Kr.matchOpToken(","));if(Kr.matchToken("called"))var on=tn.requireElement("symbol",Kr);var cn;return en.type==="queryRef"?(cn={op:function(sn){for(var pn,En="div",bn,Nn=[],Hn=/(?:(^|#|\.)([^#\. ]+))/g;pn=Hn.exec(en.css);)pn[1]===""?En=pn[2].trim():pn[1]==="#"?bn=pn[2].trim():Nn.push(pn[2].trim());var kn=document.createElement(En);bn!==void 0&&(kn.id=bn);for(var Sn=0;Sn<Nn.length;Sn++){var Un=Nn[Sn];kn.classList.add(Un)}return sn.result=kn,on&&an.setSymbol(on.name,sn,on.scope,kn),an.findNext(this,sn)}},cn):(cn={args:[en,un],op:function(sn,pn,En){return sn.result=gi(pn,En),on&&an.setSymbol(on.name,sn,on.scope,sn.result),an.findNext(this,sn)}},cn)}}),Tn.addGrammarElement("pseudoCommand",function(tn,an,Kr){let en=Kr.token(1);if(!(en&&en.op&&(en.value==="."||en.value==="(")))return null;for(var un=tn.requireElement("primaryExpression",Kr),on=un.root,cn=un;on.root!=null;)cn=cn.root,on=on.root;if(un.type!=="functionCall"&&tn.raiseParseError(Kr,"Pseudo-commands must be function calls"),cn.type==="functionCall"&&cn.root.root==null){if(Kr.matchAnyToken("the","to","on","with","into","from","at"))var sn=tn.requireElement("expression",Kr);else if(Kr.matchToken("me"))var sn=tn.requireElement("implicitMeTarget",Kr)}var pn;return sn?pn={type:"pseudoCommand",root:sn,argExressions:cn.argExressions,args:[sn,cn.argExressions],op:function(En,bn,Nn){an.nullCheck(bn,sn);var Hn=bn[cn.root.name];return an.nullCheck(Hn,cn),Hn.hyperfunc&&Nn.push(En),En.result=Hn.apply(bn,Nn),an.findNext(pn,En)},execute:function(En){return an.unifiedExec(this,En)}}:pn={type:"pseudoCommand",expr:un,args:[un],op:function(En,bn){return En.result=bn,an.findNext(pn,En)},execute:function(En){return an.unifiedExec(this,En)}},pn});var qn=function(tn,an,Kr,en,un){var on=en.type==="symbol",cn=en.type==="attributeRef",sn=en.type==="styleRef",pn=en.type==="arrayIndex";!(cn||sn||on)&&en.root==null&&tn.raiseParseError(Kr,"Can only put directly into symbols, not references");var En=null,bn=null;if(!on)if(cn||sn){En=tn.requireElement("implicitMeTarget",Kr);var Nn=en}else if(pn)bn=en.firstIndex,En=en.root;else{bn=en.prop?en.prop.value:null;var Nn=en.attribute;En=en.root}var Hn={target:en,symbolWrite:on,value:un,args:[En,bn,un],op:function(kn,Sn,Un,_n){return on?an.setSymbol(en.name,kn,en.scope,_n):(an.nullCheck(Sn,En),pn?Sn[Un]=_n:an.implicitLoop(Sn,function(ti){Nn?Nn.type==="attributeRef"?_n==null?ti.removeAttribute(Nn.name):ti.setAttribute(Nn.name,_n):ti.style[Nn.name]=_n:ti[Un]=_n})),an.findNext(this,kn)}};return Hn};Tn.addCommand("default",function(tn,an,Kr){if(Kr.matchToken("default")){var en=tn.requireElement("assignableExpression",Kr);Kr.requireToken("to");var un=tn.requireElement("expression",Kr),on=qn(tn,an,Kr,en,un),cn={target:en,value:un,setter:on,args:[en],op:function(sn,pn){return pn?an.findNext(this,sn):on}};return on.parent=cn,cn}}),Tn.addCommand("set",function(tn,an,Kr){if(Kr.matchToken("set")){if(Kr.currentToken().type==="L_BRACE"){var en=tn.requireElement("objectLiteral",Kr);Kr.requireToken("on");var un=tn.requireElement("expression",Kr),on={objectLiteral:en,target:un,args:[en,un],op:function(sn,pn,En){return Object.assign(En,pn),an.findNext(this,sn)}};return on}try{Kr.pushFollow("to");var un=tn.requireElement("assignableExpression",Kr)}finally{Kr.popFollow()}Kr.requireToken("to");var cn=tn.requireElement("expression",Kr);return qn(tn,an,Kr,un,cn)}}),Tn.addCommand("if",function(tn,an,Kr){if(!Kr.matchToken("if"))return;var en=tn.requireElement("expression",Kr);Kr.matchToken("then");var un=tn.parseElement("commandList",Kr),on=!1;let cn=Kr.matchToken("else")||Kr.matchToken("otherwise");if(cn){let En=Kr.peekToken("if");if(on=En!=null&&En.line===cn.line,on)var sn=tn.parseElement("command",Kr);else var sn=tn.parseElement("commandList",Kr)}Kr.hasMore()&&!on&&Kr.requireToken("end");var pn={expr:en,trueBranch:un,falseBranch:sn,args:[en],op:function(En,bn){return bn?un:sn||an.findNext(this,En)}};return tn.setParent(un,pn),tn.setParent(sn,pn),pn});var Mn=function(tn,an,Kr,en){var un=an.currentToken(),on;if(an.matchToken("for")||en){var cn=an.requireTokenType("IDENTIFIER");on=cn.value,an.requireToken("in");var sn=tn.requireElement("expression",an)}else if(an.matchToken("in")){on="it";var sn=tn.requireElement("expression",an)}else if(an.matchToken("while"))var pn=tn.requireElement("expression",an);else if(an.matchToken("until")){var En=!0;if(an.matchToken("event")){var bn=tn.requireElement("dotOrColonPath",an,"Expected event name");if(an.matchToken("from"))var Nn=tn.requireElement("expression",an)}else var pn=tn.requireElement("expression",an)}else if(!tn.commandBoundary(an.currentToken())&&an.currentToken().value!=="forever"){var Hn=tn.requireElement("expression",an);an.requireToken("times")}else{an.matchToken("forever");var kn=!0}if(an.matchToken("index"))var cn=an.requireTokenType("IDENTIFIER"),Sn=cn.value;else if(an.matchToken("indexed")){an.requireToken("by");var cn=an.requireTokenType("IDENTIFIER"),Sn=cn.value}var Un=tn.parseElement("commandList",an);if(Un&&bn){for(var _n=Un;_n.next;)_n=_n.next;var ti={type:"waitATick",op:function(){return new Promise(function(oi){setTimeout(function(){oi(Kr.findNext(ti))},0)})}};_n.next=ti}if(an.hasMore()&&an.requireToken("end"),on==null){on="_implicit_repeat_"+un.start;var ri=on}else var ri=on+"_"+un.start;var Si={identifier:on,indexIdentifier:Sn,slot:ri,expression:sn,forever:kn,times:Hn,until:En,event:bn,on:Nn,whileExpr:pn,resolveNext:function(){return this},loop:Un,args:[pn,Hn],op:function(oi,Ei,Di){var bi=oi.meta.iterators[ri],Ci=!1,Ji=null;if(this.forever)Ci=!0;else if(this.until)bn?Ci=oi.meta.iterators[ri].eventFired===!1:Ci=Ei!==!0;else if(pn)Ci=Ei;else if(Di)Ci=bi.index<Di;else{var la=bi.iterator.next();Ci=!la.done,Ji=la.value}return Ci?(bi.value?oi.result=oi.locals[on]=Ji:oi.result=bi.index,Sn&&(oi.locals[Sn]=bi.index),bi.index++,Un):(oi.meta.iterators[ri]=null,Kr.findNext(this.parent,oi))}};tn.setParent(Un,Si);var Ni={name:"repeatInit",args:[sn,bn,Nn],op:function(oi,Ei,Di,bi){var Ci={index:0,value:Ei,eventFired:!1};if(oi.meta.iterators[ri]=Ci,Ei&&Ei[Symbol.iterator]&&(Ci.iterator=Ei[Symbol.iterator]()),bn){var Ji=bi||oi.me;Ji.addEventListener(Di,function(la){oi.meta.iterators[ri].eventFired=!0},{once:!0})}return Si},execute:function(oi){return Kr.unifiedExec(this,oi)}};return tn.setParent(Si,Ni),Ni};Tn.addCommand("repeat",function(tn,an,Kr){if(Kr.matchToken("repeat"))return Mn(tn,Kr,an,!1)}),Tn.addCommand("for",function(tn,an,Kr){if(Kr.matchToken("for"))return Mn(tn,Kr,an,!0)}),Tn.addCommand("continue",function(tn,an,Kr){if(Kr.matchToken("continue")){var en={op:function(un){for(var on=this.parent;;on=on.parent)if(on==null&&tn.raiseParseError(Kr,"Command `continue` cannot be used outside of a `repeat` loop."),on.loop!=null)return on.resolveNext(un)}};return en}}),Tn.addCommand("break",function(tn,an,Kr){if(Kr.matchToken("break")){var en={op:function(un){for(var on=this.parent;;on=on.parent)if(on==null&&tn.raiseParseError(Kr,"Command `continue` cannot be used outside of a `repeat` loop."),on.loop!=null)return an.findNext(on.parent,un)}};return en}}),Tn.addGrammarElement("stringLike",function(tn,an,Kr){return tn.parseAnyOf(["string","nakedString"],Kr)}),Tn.addCommand("append",function(tn,an,Kr){if(Kr.matchToken("append")){var en=null,un=tn.requireElement("expression",Kr),on={type:"symbol",evaluate:function(pn){return an.resolveSymbol("result",pn)}};Kr.matchToken("to")?en=tn.requireElement("expression",Kr):en=on;var cn=null;(en.type==="symbol"||en.type==="attributeRef"||en.root!=null)&&(cn=qn(tn,an,Kr,en,on));var sn={value:un,target:en,args:[en,un],op:function(pn,En,bn){if(Array.isArray(En))return En.push(bn),an.findNext(this,pn);if(En instanceof Element)return bn instanceof Element?En.insertAdjacentElement("beforeend",bn):En.insertAdjacentHTML("beforeend",bn),an.processNode(En),an.findNext(this,pn);if(cn)return pn.result=(En||"")+bn,cn;throw Error("Unable to append a value!")},execute:function(pn){return an.unifiedExec(this,pn)}};return cn!=null&&(cn.parent=sn),sn}});function Ln(tn,an,Kr){Kr.matchToken("at")||Kr.matchToken("from");let en={includeStart:!0,includeEnd:!1};return en.from=Kr.matchToken("start")?0:tn.requireElement("expression",Kr),(Kr.matchToken("to")||Kr.matchOpToken(".."))&&(Kr.matchToken("end")?en.toEnd=!0:en.to=tn.requireElement("expression",Kr)),Kr.matchToken("inclusive")?en.includeEnd=!0:Kr.matchToken("exclusive")&&(en.includeStart=!1),en}class Bn{constructor(an,Kr){this.re=an,this.str=Kr}next(){let an=this.re.exec(this.str);return an===null?{done:!0}:{value:an}}}class Wn{constructor(an,Kr,en){this.re=an,this.flags=Kr,this.str=en}[Symbol.iterator](){return new Bn(new RegExp(this.re,this.flags),this.str)}}Tn.addCommand("pick",(tn,an,Kr)=>{if(Kr.matchToken("pick")){if(Kr.matchToken("the"),Kr.matchToken("item")||Kr.matchToken("items")||Kr.matchToken("character")||Kr.matchToken("characters")){let en=Ln(tn,an,Kr);return Kr.requireToken("from"),{args:[tn.requireElement("expression",Kr),en.from,en.to],op(on,cn,sn,pn){return en.toEnd&&(pn=cn.length),en.includeStart||sn++,en.includeEnd&&pn++,(pn==null||pn==null)&&(pn=sn+1),on.result=cn.slice(sn,pn),an.findNext(this,on)}}}if(Kr.matchToken("match")){Kr.matchToken("of");let en=tn.parseElement("expression",Kr),un="";return Kr.matchOpToken("|")&&(un=Kr.requireTokenType("IDENTIFIER").value),Kr.requireToken("from"),{args:[tn.parseElement("expression",Kr),en],op(cn,sn,pn){return cn.result=new RegExp(pn,un).exec(sn),an.findNext(this,cn)}}}if(Kr.matchToken("matches")){Kr.matchToken("of");let en=tn.parseElement("expression",Kr),un="gu";return Kr.matchOpToken("|")&&(un="g"+Kr.requireTokenType("IDENTIFIER").value.replace("g","")),Kr.requireToken("from"),{args:[tn.parseElement("expression",Kr),en],op(cn,sn,pn){return cn.result=new Wn(pn,un,sn),an.findNext(this,cn)}}}}}),Tn.addCommand("increment",function(tn,an,Kr){if(Kr.matchToken("increment")){var en,un=tn.parseElement("assignableExpression",Kr);Kr.matchToken("by")&&(en=tn.requireElement("expression",Kr));var on={type:"implicitIncrementOp",target:un,args:[un,en],op:function(cn,sn,pn){sn=sn?parseFloat(sn):0,pn=en?parseFloat(pn):1;var En=sn+pn;return cn.result=En,En},evaluate:function(cn){return an.unifiedEval(this,cn)}};return qn(tn,an,Kr,un,on)}}),Tn.addCommand("decrement",function(tn,an,Kr){if(Kr.matchToken("decrement")){var en,un=tn.parseElement("assignableExpression",Kr);Kr.matchToken("by")&&(en=tn.requireElement("expression",Kr));var on={type:"implicitDecrementOp",target:un,args:[un,en],op:function(cn,sn,pn){sn=sn?parseFloat(sn):0,pn=en?parseFloat(pn):1;var En=sn-pn;return cn.result=En,En},evaluate:function(cn){return an.unifiedEval(this,cn)}};return qn(tn,an,Kr,un,on)}});function jn(tn,an){var Kr="text",en;return tn.matchToken("a")||tn.matchToken("an"),tn.matchToken("json")||tn.matchToken("Object")?Kr="json":tn.matchToken("response")?Kr="response":tn.matchToken("html")?Kr="html":tn.matchToken("text")||(en=an.requireElement("dotOrColonPath",tn).evaluate()),{type:Kr,conversion:en}}Tn.addCommand("fetch",function(tn,an,Kr){if(Kr.matchToken("fetch")){var en=tn.requireElement("stringLike",Kr);if(Kr.matchToken("as"))var un=jn(Kr,tn);if(Kr.matchToken("with")&&Kr.currentToken().value!=="{")var on=tn.parseElement("nakedNamedArgumentList",Kr);else var on=tn.parseElement("objectLiteral",Kr);un==null&&Kr.matchToken("as")&&(un=jn(Kr,tn));var cn=un?un.type:"text",sn=un?un.conversion:null,pn={url:en,argExpressions:on,args:[en,on],op:function(En,bn,Nn){var Hn=Nn||{};Hn.sender=En.me,Hn.headers=Hn.headers||{};var kn=new AbortController;let Sn=En.me.addEventListener("fetch:abort",function(){kn.abort()},{once:!0});Hn.signal=kn.signal,an.triggerEvent(En.me,"hyperscript:beforeFetch",Hn),an.triggerEvent(En.me,"fetch:beforeRequest",Hn),Nn=Hn;var Un=!1;return Nn.timeout&&setTimeout(function(){Un||kn.abort()},Nn.timeout),fetch(bn,Nn).then(function(_n){let ti={response:_n};return an.triggerEvent(En.me,"fetch:afterResponse",ti),_n=ti.response,cn==="response"?(En.result=_n,an.triggerEvent(En.me,"fetch:afterRequest",{result:_n}),Un=!0,an.findNext(pn,En)):cn==="json"?_n.json().then(function(ri){return En.result=ri,an.triggerEvent(En.me,"fetch:afterRequest",{result:ri}),Un=!0,an.findNext(pn,En)}):_n.text().then(function(ri){return sn&&(ri=an.convertValue(ri,sn)),cn==="html"&&(ri=an.convertValue(ri,"Fragment")),En.result=ri,an.triggerEvent(En.me,"fetch:afterRequest",{result:ri}),Un=!0,an.findNext(pn,En)})}).catch(function(_n){throw an.triggerEvent(En.me,"fetch:error",{reason:_n}),_n}).finally(function(){En.me.removeEventListener("fetch:abort",Sn)})}};return pn}})}function ai(Tn){Tn.addCommand("settle",function(vn,yn,fn){if(fn.matchToken("settle")){if(vn.commandBoundary(fn.currentToken()))var An=vn.requireElement("implicitMeTarget",fn);else var An=vn.requireElement("expression",fn);var Rn={type:"settleCmd",args:[An],op:function(Dn,In){yn.nullCheck(In,An);var qn=null,Mn=!1,Ln=!1,Bn=new Promise(function(Wn){qn=Wn});return In.addEventListener("transitionstart",function(){Ln=!0},{once:!0}),setTimeout(function(){!Ln&&!Mn&&qn(yn.findNext(Rn,Dn))},500),In.addEventListener("transitionend",function(){Mn||qn(yn.findNext(Rn,Dn))},{once:!0}),Bn},execute:function(Dn){return yn.unifiedExec(this,Dn)}};return Rn}}),Tn.addCommand("add",function(vn,yn,fn){if(fn.matchToken("add")){var An=vn.parseElement("classRef",fn),Rn=null,Dn=null;if(An==null)Rn=vn.parseElement("attributeRef",fn),Rn==null&&(Dn=vn.parseElement("styleLiteral",fn),Dn==null&&vn.raiseParseError(fn,"Expected either a class reference or attribute expression"));else for(var In=[An];An=vn.parseElement("classRef",fn);)In.push(An);if(fn.matchToken("to"))var qn=vn.requireElement("expression",fn);else var qn=vn.requireElement("implicitMeTarget",fn);if(fn.matchToken("when")){Dn&&vn.raiseParseError(fn,"Only class and properties are supported with a when clause");var Mn=vn.requireElement("expression",fn)}return In?{classRefs:In,to:qn,args:[qn,In],op:function(Ln,Bn,Wn){return yn.nullCheck(Bn,qn),yn.forEach(Wn,function(jn){yn.implicitLoop(Bn,function(tn){Mn?(Ln.result=tn,yn.evaluateNoPromise(Mn,Ln)?tn instanceof Element&&tn.classList.add(jn.className):tn instanceof Element&&tn.classList.remove(jn.className),Ln.result=null):tn instanceof Element&&tn.classList.add(jn.className)})}),yn.findNext(this,Ln)}}:Rn?{type:"addCmd",attributeRef:Rn,to:qn,args:[qn],op:function(Ln,Bn,Wn){return yn.nullCheck(Bn,qn),yn.implicitLoop(Bn,function(jn){Mn?(Ln.result=jn,yn.evaluateNoPromise(Mn,Ln)?jn.setAttribute(Rn.name,Rn.value):jn.removeAttribute(Rn.name),Ln.result=null):jn.setAttribute(Rn.name,Rn.value)}),yn.findNext(this,Ln)},execute:function(Ln){return yn.unifiedExec(this,Ln)}}:{type:"addCmd",cssDeclaration:Dn,to:qn,args:[qn,Dn],op:function(Ln,Bn,Wn){return yn.nullCheck(Bn,qn),yn.implicitLoop(Bn,function(jn){jn.style.cssText+=Wn}),yn.findNext(this,Ln)},execute:function(Ln){return yn.unifiedExec(this,Ln)}}}}),Tn.addGrammarElement("styleLiteral",function(vn,yn,fn){if(fn.matchOpToken("{")){for(var An=[""],Rn=[];fn.hasMore();){if(fn.matchOpToken("\\"))fn.consumeToken();else{if(fn.matchOpToken("}"))break;if(fn.matchToken("$")){var Dn=fn.matchOpToken("{"),In=vn.parseElement("expression",fn);Dn&&fn.requireOpToken("}"),Rn.push(In),An.push("")}else{var qn=fn.consumeToken();An[An.length-1]+=fn.source.substring(qn.start,qn.end)}}An[An.length-1]+=fn.lastWhitespace()}return{type:"styleLiteral",args:[Rn],op:function(Mn,Ln){var Bn="";return An.forEach(function(Wn,jn){Bn+=Wn,jn in Ln&&(Bn+=Ln[jn])}),Bn},evaluate:function(Mn){return yn.unifiedEval(this,Mn)}}}}),Tn.addCommand("remove",function(vn,yn,fn){if(fn.matchToken("remove")){var An=vn.parseElement("classRef",fn),Rn=null,Dn=null;if(An==null)Rn=vn.parseElement("attributeRef",fn),Rn==null&&(Dn=vn.parseElement("expression",fn),Dn==null&&vn.raiseParseError(fn,"Expected either a class reference, attribute expression or value expression"));else for(var In=[An];An=vn.parseElement("classRef",fn);)In.push(An);if(fn.matchToken("from"))var qn=vn.requireElement("expression",fn);else if(Dn==null)var qn=vn.requireElement("implicitMeTarget",fn);return Dn?{elementExpr:Dn,from:qn,args:[Dn,qn],op:function(Mn,Ln,Bn){return yn.nullCheck(Ln,Dn),yn.implicitLoop(Ln,function(Wn){Wn.parentElement&&(Bn==null||Bn.contains(Wn))&&Wn.parentElement.removeChild(Wn)}),yn.findNext(this,Mn)}}:{classRefs:In,attributeRef:Rn,elementExpr:Dn,from:qn,args:[In,qn],op:function(Mn,Ln,Bn){return yn.nullCheck(Bn,qn),Ln?yn.forEach(Ln,function(Wn){yn.implicitLoop(Bn,function(jn){jn.classList.remove(Wn.className)})}):yn.implicitLoop(Bn,function(Wn){Wn.removeAttribute(Rn.name)}),yn.findNext(this,Mn)}}}}),Tn.addCommand("toggle",function(vn,yn,fn){if(fn.matchToken("toggle")){if(fn.matchAnyToken("the","my"),fn.currentToken().type==="STYLE_REF"){var An=fn.consumeToken().value.substr(1),Rn=!0,Dn=hn(vn,fn,An);if(fn.matchToken("of")){fn.pushFollow("with");try{var In=vn.requireElement("expression",fn)}finally{fn.popFollow()}}else var In=vn.requireElement("implicitMeTarget",fn)}else if(fn.matchToken("between")){var qn=!0,Mn=vn.parseElement("classRef",fn);fn.requireToken("and");var Ln=vn.requireElement("classRef",fn)}else{var Mn=vn.parseElement("classRef",fn),Bn=null;if(Mn==null)Bn=vn.parseElement("attributeRef",fn),Bn==null&&vn.raiseParseError(fn,"Expected either a class reference or attribute expression");else for(var Wn=[Mn];Mn=vn.parseElement("classRef",fn);)Wn.push(Mn)}if(Rn!==!0)if(fn.matchToken("on"))var In=vn.requireElement("expression",fn);else var In=vn.requireElement("implicitMeTarget",fn);if(fn.matchToken("for"))var jn=vn.requireElement("expression",fn);else if(fn.matchToken("until")){var tn=vn.requireElement("dotOrColonPath",fn,"Expected event name");if(fn.matchToken("from"))var an=vn.requireElement("expression",fn)}var Kr={classRef:Mn,classRef2:Ln,classRefs:Wn,attributeRef:Bn,on:In,time:jn,evt:tn,from:an,toggle:function(en,un,on,cn){yn.nullCheck(en,In),Rn?yn.implicitLoop(en,function(sn){Dn("toggle",sn)}):qn?yn.implicitLoop(en,function(sn){sn.classList.contains(un.className)?(sn.classList.remove(un.className),sn.classList.add(on.className)):(sn.classList.add(un.className),sn.classList.remove(on.className))}):cn?yn.forEach(cn,function(sn){yn.implicitLoop(en,function(pn){pn.classList.toggle(sn.className)})}):yn.implicitLoop(en,function(sn){sn.hasAttribute(Bn.name)?sn.removeAttribute(Bn.name):sn.setAttribute(Bn.name,Bn.value)})},args:[In,jn,tn,an,Mn,Ln,Wn],op:function(en,un,on,cn,sn,pn,En,bn){return on?new Promise(function(Nn){Kr.toggle(un,pn,En,bn),setTimeout(function(){Kr.toggle(un,pn,En,bn),Nn(yn.findNext(Kr,en))},on)}):cn?new Promise(function(Nn){var Hn=sn||en.me;Hn.addEventListener(cn,function(){Kr.toggle(un,pn,En,bn),Nn(yn.findNext(Kr,en))},{once:!0}),Kr.toggle(un,pn,En,bn)}):(this.toggle(un,pn,En,bn),yn.findNext(Kr,en))}};return Kr}});var Zr={display:function(vn,yn,fn){if(fn)yn.style.display=fn;else if(vn==="toggle")getComputedStyle(yn).display==="none"?Zr.display("show",yn,fn):Zr.display("hide",yn,fn);else if(vn==="hide"){let An=Tn.runtime.getInternalData(yn);An.originalDisplay==null&&(An.originalDisplay=yn.style.display),yn.style.display="none"}else{let An=Tn.runtime.getInternalData(yn);An.originalDisplay&&An.originalDisplay!=="none"?yn.style.display=An.originalDisplay:yn.style.removeProperty("display")}},visibility:function(vn,yn,fn){fn?yn.style.visibility=fn:vn==="toggle"?getComputedStyle(yn).visibility==="hidden"?Zr.visibility("show",yn,fn):Zr.visibility("hide",yn,fn):vn==="hide"?yn.style.visibility="hidden":yn.style.visibility="visible"},opacity:function(vn,yn,fn){fn?yn.style.opacity=fn:vn==="toggle"?getComputedStyle(yn).opacity==="0"?Zr.opacity("show",yn,fn):Zr.opacity("hide",yn,fn):vn==="hide"?yn.style.opacity="0":yn.style.opacity="1"}},nn=function(vn,yn,fn){var An,Rn=fn.currentToken();return Rn.value==="when"||Rn.value==="with"||vn.commandBoundary(Rn)?An=vn.parseElement("implicitMeTarget",fn):An=vn.parseElement("expression",fn),An},hn=function(vn,yn,fn){var An=Qr.defaultHideShowStrategy,Rn=Zr;Qr.hideShowStrategies&&(Rn=Object.assign(Rn,Qr.hideShowStrategies)),fn=fn||An||"display";var Dn=Rn[fn];return Dn==null&&vn.raiseParseError(yn,"Unknown show/hide strategy : "+fn),Dn};Tn.addCommand("hide",function(vn,yn,fn){if(fn.matchToken("hide")){var An=nn(vn,yn,fn),Rn=null;fn.matchToken("with")&&(Rn=fn.requireTokenType("IDENTIFIER","STYLE_REF").value,Rn.indexOf("*")===0&&(Rn=Rn.substr(1)));var Dn=hn(vn,fn,Rn);return{target:An,args:[An],op:function(In,qn){return yn.nullCheck(qn,An),yn.implicitLoop(qn,function(Mn){Dn("hide",Mn)}),yn.findNext(this,In)}}}}),Tn.addCommand("show",function(vn,yn,fn){if(fn.matchToken("show")){var An=nn(vn,yn,fn),Rn=null;fn.matchToken("with")&&(Rn=fn.requireTokenType("IDENTIFIER","STYLE_REF").value,Rn.indexOf("*")===0&&(Rn=Rn.substr(1)));var Dn=null;if(fn.matchOpToken(":")){var In=fn.consumeUntilWhitespace();fn.matchTokenType("WHITESPACE"),Dn=In.map(function(Ln){return Ln.value}).join("")}if(fn.matchToken("when"))var qn=vn.requireElement("expression",fn);var Mn=hn(vn,fn,Rn);return{target:An,when:qn,args:[An],op:function(Ln,Bn){return yn.nullCheck(Bn,An),yn.implicitLoop(Bn,function(Wn){qn?(Ln.result=Wn,yn.evaluateNoPromise(qn,Ln)?Mn("show",Wn,Dn):Mn("hide",Wn),Ln.result=null):Mn("show",Wn,Dn)}),yn.findNext(this,Ln)}}}}),Tn.addCommand("take",function(vn,yn,fn){if(fn.matchToken("take")){let Mn=null,Ln=[];for(;Mn=vn.parseElement("classRef",fn);)Ln.push(Mn);var An=null,Rn=null;let Bn=Ln.length>0;if(Bn||(An=vn.parseElement("attributeRef",fn),An==null&&vn.raiseParseError(fn,"Expected either a class reference or attribute expression"),fn.matchToken("with")&&(Rn=vn.requireElement("expression",fn))),fn.matchToken("from"))var Dn=vn.requireElement("expression",fn);if(fn.matchToken("for"))var In=vn.requireElement("expression",fn);else var In=vn.requireElement("implicitMeTarget",fn);if(Bn){var qn={classRefs:Ln,from:Dn,forElt:In,args:[Ln,Dn,In],op:function(Wn,jn,tn,an){return yn.nullCheck(an,In),yn.implicitLoop(jn,function(Kr){var en=Kr.className;tn?yn.implicitLoop(tn,function(un){un.classList.remove(en)}):yn.implicitLoop(Kr,function(un){un.classList.remove(en)}),yn.implicitLoop(an,function(un){un.classList.add(en)})}),yn.findNext(this,Wn)}};return qn}else{var qn={attributeRef:An,from:Dn,forElt:In,args:[Dn,In,Rn],op:function(jn,tn,an,Kr){return yn.nullCheck(tn,Dn),yn.nullCheck(an,In),yn.implicitLoop(tn,function(en){Kr?en.setAttribute(An.name,Kr):en.removeAttribute(An.name)}),yn.implicitLoop(an,function(en){en.setAttribute(An.name,An.value||"")}),yn.findNext(this,jn)}};return qn}}});function dn(vn,yn,fn,An){if(fn!=null)var Rn=vn.resolveSymbol(fn,yn);else var Rn=yn;if(Rn instanceof Element||Rn instanceof HTMLDocument){for(;Rn.firstChild;)Rn.removeChild(Rn.firstChild);Rn.append(Tn.runtime.convertValue(An,"Fragment")),vn.processNode(Rn)}else if(fn!=null)vn.setSymbol(fn,yn,null,An);else throw"Don't know how to put a value into "+typeof yn}Tn.addCommand("put",function(vn,yn,fn){if(fn.matchToken("put")){var An=vn.requireElement("expression",fn),Rn=fn.matchAnyToken("into","before","after");Rn==null&&fn.matchToken("at")&&(fn.matchToken("the"),Rn=fn.matchAnyToken("start","end"),fn.requireToken("of")),Rn==null&&vn.raiseParseError(fn,"Expected one of 'into', 'before', 'at start of', 'at end of', 'after'");var Dn=vn.requireElement("expression",fn),In=Rn.value,qn=!1,Mn=!1,Ln=null,Bn=null;if(Dn.type==="arrayIndex"&&In==="into")qn=!0,Bn=Dn.prop,Ln=Dn.root;else if(Dn.prop&&Dn.root&&In==="into")Bn=Dn.prop.value,Ln=Dn.root;else if(Dn.type==="symbol"&&In==="into")Mn=!0,Bn=Dn.name;else if(Dn.type==="attributeRef"&&In==="into"){var Wn=!0;Bn=Dn.name,Ln=vn.requireElement("implicitMeTarget",fn)}else if(Dn.type==="styleRef"&&In==="into"){var jn=!0;Bn=Dn.name,Ln=vn.requireElement("implicitMeTarget",fn)}else if(Dn.attribute&&In==="into"){var Wn=Dn.attribute.type==="attributeRef",jn=Dn.attribute.type==="styleRef";Bn=Dn.attribute.name,Ln=Dn.root}else Ln=Dn;var tn={target:Dn,operation:In,symbolWrite:Mn,value:An,args:[Ln,Bn,An],op:function(an,Kr,en,un){if(Mn)dn(yn,an,en,un);else if(yn.nullCheck(Kr,Ln),In==="into")Wn?yn.implicitLoop(Kr,function(cn){cn.setAttribute(en,un)}):jn?yn.implicitLoop(Kr,function(cn){cn.style[en]=un}):qn?Kr[en]=un:yn.implicitLoop(Kr,function(cn){dn(yn,cn,en,un)});else{var on=In==="before"?Element.prototype.before:In==="after"?Element.prototype.after:In==="start"?Element.prototype.prepend:Element.prototype.append;yn.implicitLoop(Kr,function(cn){on.call(cn,un instanceof Node?un:yn.convertValue(un,"Fragment")),cn.parentElement?yn.processNode(cn.parentElement):yn.processNode(cn)})}return yn.findNext(this,an)}};return tn}});function wn(vn,yn,fn){var An;if(fn.matchToken("the")||fn.matchToken("element")||fn.matchToken("elements")||fn.currentToken().type==="CLASS_REF"||fn.currentToken().type==="ID_REF"||fn.currentToken().op&&fn.currentToken().value==="<"){vn.possessivesDisabled=!0;try{An=vn.parseElement("expression",fn)}finally{delete vn.possessivesDisabled}fn.matchOpToken("'")&&fn.requireToken("s")}else if(fn.currentToken().type==="IDENTIFIER"&&fn.currentToken().value==="its"){var Rn=fn.matchToken("its");An={type:"pseudopossessiveIts",token:Rn,name:Rn.value,evaluate:function(Dn){return yn.resolveSymbol("it",Dn)}}}else fn.matchToken("my")||fn.matchToken("me"),An=vn.parseElement("implicitMeTarget",fn);return An}Tn.addCommand("transition",function(vn,yn,fn){if(fn.matchToken("transition")){for(var An=wn(vn,yn,fn),Rn=[],Dn=[],In=[],qn=fn.currentToken();!vn.commandBoundary(qn)&&qn.value!=="over"&&qn.value!=="using";){if(fn.currentToken().type==="STYLE_REF"){let jn=fn.consumeToken().value.substr(1);Rn.push({type:"styleRefValue",evaluate:function(){return jn}})}else Rn.push(vn.requireElement("stringLike",fn));fn.matchToken("from")?Dn.push(vn.requireElement("expression",fn)):Dn.push(null),fn.requireToken("to"),fn.matchToken("initial")?In.push({type:"initial_literal",evaluate:function(){return"initial"}}):In.push(vn.requireElement("expression",fn)),qn=fn.currentToken()}if(fn.matchToken("over"))var Mn=vn.requireElement("expression",fn);else if(fn.matchToken("using"))var Ln=vn.requireElement("expression",fn);var Bn={to:In,args:[An,Rn,Dn,In,Ln,Mn],op:function(Wn,jn,tn,an,Kr,en,un){yn.nullCheck(jn,An);var on=[];return yn.implicitLoop(jn,function(cn){var sn=new Promise(function(pn,En){var bn=cn.style.transition;un?cn.style.transition="all "+un+"ms ease-in":en?cn.style.transition=en:cn.style.transition=Qr.defaultTransition;for(var Nn=yn.getInternalData(cn),Hn=getComputedStyle(cn),kn={},Sn=0;Sn<Hn.length;Sn++){var Un=Hn[Sn],_n=Hn[Un];kn[Un]=_n}Nn.initialStyles||(Nn.initialStyles=kn);for(var Sn=0;Sn<tn.length;Sn++){var ti=tn[Sn],ri=an[Sn];ri==="computed"||ri==null?cn.style[ti]=kn[ti]:cn.style[ti]=ri}var Si=!1,Ni=!1;cn.addEventListener("transitionend",function(){Ni||(cn.style.transition=bn,Ni=!0,pn())},{once:!0}),cn.addEventListener("transitionstart",function(){Si=!0},{once:!0}),setTimeout(function(){!Ni&&!Si&&(cn.style.transition=bn,Ni=!0,pn())},100),setTimeout(function(){for(var oi=[],Ei=0;Ei<tn.length;Ei++){var Di=tn[Ei],bi=Kr[Ei];if(bi==="initial"){var Ci=Nn.initialStyles[Di];cn.style[Di]=Ci}else cn.style[Di]=bi}},0)});on.push(sn)}),Promise.all(on).then(function(){return yn.findNext(Bn,Wn)})}};return Bn}}),Tn.addCommand("measure",function(vn,yn,fn){if(fn.matchToken("measure")){var An=wn(vn,yn,fn),Rn=[];if(!vn.commandBoundary(fn.currentToken()))do Rn.push(fn.matchTokenType("IDENTIFIER").value);while(fn.matchOpToken(","));return{properties:Rn,args:[An],op:function(Dn,In){yn.nullCheck(In,An),0 in In&&(In=In[0]);var qn=In.getBoundingClientRect(),Mn={top:In.scrollTop,left:In.scrollLeft,topMax:In.scrollTopMax,leftMax:In.scrollLeftMax,height:In.scrollHeight,width:In.scrollWidth};return Dn.result={x:qn.x,y:qn.y,left:qn.left,top:qn.top,right:qn.right,bottom:qn.bottom,width:qn.width,height:qn.height,bounds:qn,scrollLeft:Mn.left,scrollTop:Mn.top,scrollLeftMax:Mn.leftMax,scrollTopMax:Mn.topMax,scrollWidth:Mn.width,scrollHeight:Mn.height,scroll:Mn},yn.forEach(Rn,function(Ln){if(Ln in Dn.result)Dn.locals[Ln]=Dn.result[Ln];else throw"No such measurement as "+Ln}),yn.findNext(this,Dn)}}}}),Tn.addLeafExpression("closestExpr",function(vn,yn,fn){if(fn.matchToken("closest")){if(fn.matchToken("parent"))var An=!0;var Rn=null;if(fn.currentToken().type==="ATTRIBUTE_REF"){var Dn=vn.requireElement("attributeRefAccess",fn,null);Rn="["+Dn.attribute.name+"]"}if(Rn==null){var In=vn.requireElement("expression",fn);In.css==null?vn.raiseParseError(fn,"Expected a CSS expression"):Rn=In.css}if(fn.matchToken("to"))var qn=vn.parseElement("expression",fn);else var qn=vn.parseElement("implicitMeTarget",fn);var Mn={type:"closestExpr",parentSearch:An,expr:In,css:Rn,to:qn,args:[qn],op:function(Ln,Bn){if(Bn==null)return null;{let Wn=[];return yn.implicitLoop(Bn,function(jn){An?Wn.push(jn.parentElement?jn.parentElement.closest(Rn):null):Wn.push(jn.closest(Rn))}),yn.shouldAutoIterate(Bn)?Wn:Wn[0]}},evaluate:function(Ln){return yn.unifiedEval(this,Ln)}};return Dn?(Dn.root=Mn,Dn.args=[Mn],Dn):Mn}}),Tn.addCommand("go",function(vn,yn,fn){if(fn.matchToken("go")){if(fn.matchToken("back"))var An=!0;else if(fn.matchToken("to"),fn.matchToken("url")){var Rn=vn.requireElement("stringLike",fn),Dn=!0;if(fn.matchToken("in")){fn.requireToken("new"),fn.requireToken("window");var In=!0}}else{fn.matchToken("the");var qn=fn.matchAnyToken("top","middle","bottom"),Mn=fn.matchAnyToken("left","center","right");(qn||Mn)&&fn.requireToken("of");var Rn=vn.requireElement("unaryExpression",fn),Ln=fn.matchAnyOpToken("+","-");if(Ln){fn.pushFollow("px");try{var Bn=vn.requireElement("expression",fn)}finally{fn.popFollow()}}fn.matchToken("px");var Wn=fn.matchAnyToken("smoothly","instantly"),jn={block:"start",inline:"nearest"};qn&&(qn.value==="top"?jn.block="start":qn.value==="bottom"?jn.block="end":qn.value==="middle"&&(jn.block="center")),Mn&&(Mn.value==="left"?jn.inline="start":Mn.value==="center"?jn.inline="center":Mn.value==="right"&&(jn.inline="end")),Wn&&(Wn.value==="smoothly"?jn.behavior="smooth":Wn.value==="instantly"&&(jn.behavior="instant"))}var tn={target:Rn,args:[Rn,Bn],op:function(an,Kr,en){return An?window.history.back():Dn?Kr&&(In?window.open(Kr):window.location.href=Kr):yn.implicitLoop(Kr,function(un){if(un===window&&(un=document.body),Ln){let on=un.getBoundingClientRect(),cn=document.createElement("div"),sn=Ln.value==="+"?en:en*-1,pn=jn.inline=="start"||jn.inline=="end"?sn:0,En=jn.block=="start"||jn.block=="end"?sn:0;cn.style.position="absolute",cn.style.top=on.top+window.scrollY+En+"px",cn.style.left=on.left+window.scrollX+pn+"px",cn.style.height=on.height+"px",cn.style.width=on.width+"px",cn.style.zIndex=""+Number.MIN_SAFE_INTEGER,cn.style.opacity="0",document.body.appendChild(cn),setTimeout(function(){document.body.removeChild(cn)},100),un=cn}un.scrollIntoView(jn)}),yn.findNext(tn,an)}};return tn}}),Qr.conversions.dynamicResolvers.push(function(vn,yn){if(!(vn==="Values"||vn.indexOf("Values:")===0))return;var fn=vn.split(":")[1],An={},Rn=Tn.runtime.implicitLoop.bind(Tn.runtime);if(Rn(yn,function(qn){var Mn=In(qn);if(Mn!==void 0){An[Mn.name]=Mn.value;return}if(qn.querySelectorAll!=null){var Ln=qn.querySelectorAll("input,select,textarea");Ln.forEach(Dn)}}),fn){if(fn==="JSON")return JSON.stringify(An);if(fn==="Form")return new URLSearchParams(An).toString();throw"Unknown conversion: "+fn}else return An;function Dn(qn){var Mn=In(qn);if(Mn!=null){if(An[Mn.name]==null){An[Mn.name]=Mn.value;return}if(Array.isArray(An[Mn.name])&&Array.isArray(Mn.value)){An[Mn.name]=[].concat(An[Mn.name],Mn.value);return}}}function In(qn){try{var Mn={name:qn.name,value:qn.value};if(Mn.name==null||Mn.value==null||qn.type=="radio"&&qn.checked==!1)return;if(qn.type=="checkbox"&&(qn.checked==!1?Mn.value=void 0:typeof Mn.value=="string"&&(Mn.value=[Mn.value])),qn.type=="select-multiple"){var Ln=qn.querySelectorAll("option[selected]");Mn.value=[];for(var Bn=0;Bn<Ln.length;Bn++)Mn.value.push(Ln[Bn].value)}return Mn}catch{return}}}),Qr.conversions.HTML=function(vn){var yn=function(fn){if(fn instanceof Array)return fn.map(function(In){return yn(In)}).join("");if(fn instanceof HTMLElement)return fn.outerHTML;if(fn instanceof NodeList){for(var An="",Rn=0;Rn<fn.length;Rn++){var Dn=fn[Rn];Dn instanceof HTMLElement&&(An+=Dn.outerHTML)}return An}return fn.toString?fn.toString():""};return yn(vn)},Qr.conversions.Fragment=function(vn){var yn=document.createDocumentFragment();return Tn.runtime.implicitLoop(vn,function(fn){if(fn instanceof Node)yn.append(fn);else{var An=document.createElement("template");An.innerHTML=fn,yn.append(An.content)}}),yn}}let Kn=new ln,hi=Kn.lexer,ii=Kn.parser;function Ri(Tn,Zr){return Kn.evaluate(Tn,Zr)}function di(){var Tn=Array.from(Gr.document.querySelectorAll("script[type='text/hyperscript'][src]"));Promise.all(Tn.map(function(dn){return fetch(dn.src).then(function(wn){return wn.text()})})).then(dn=>dn.forEach(wn=>ei(wn))).then(()=>Zr(function(){hn(),Kn.processNode(document.documentElement),document.dispatchEvent(new Event("hyperscript:ready")),Gr.document.addEventListener("htmx:load",function(dn){Kn.processNode(dn.detail.elt)})}));function Zr(dn){document.readyState!=="loading"?setTimeout(dn):document.addEventListener("DOMContentLoaded",dn)}function nn(){var dn=document.querySelector('meta[name="htmx-config"]');return dn?zn(dn.content):null}function hn(){var dn=nn();dn&&Object.assign(Qr,dn)}}let ei=Object.assign(Ri,{config:Qr,use(Tn){Tn(ei)},internals:{lexer:hi,parser:ii,runtime:Kn,Lexer:Yr,Tokens:Jr,Parser:rn,Runtime:ln},ElementCollection:Pn,addFeature:ii.addFeature.bind(ii),addCommand:ii.addCommand.bind(ii),addLeafExpression:ii.addLeafExpression.bind(ii),addIndirectExpression:ii.addIndirectExpression.bind(ii),evaluate:Kn.evaluate.bind(Kn),parse:Kn.parse.bind(Kn),processNode:Kn.processNode.bind(Kn),version:"0.9.14",browserInit:di});return ei})});var go=ca(Oa()),yo=ca($a());function wo(Gr,Wr){var Qr=Object.keys(Gr);if(Object.getOwnPropertySymbols){var Yr=Object.getOwnPropertySymbols(Gr);Wr&&(Yr=Yr.filter(function(Jr){return Object.getOwnPropertyDescriptor(Gr,Jr).enumerable})),Qr.push.apply(Qr,Yr)}return Qr}function Hi(Gr){for(var Wr=1;Wr<arguments.length;Wr++){var Qr=arguments[Wr]!=null?arguments[Wr]:{};Wr%2?wo(Object(Qr),!0).forEach(function(Yr){os(Gr,Yr,Qr[Yr])}):Object.getOwnPropertyDescriptors?Object.defineProperties(Gr,Object.getOwnPropertyDescriptors(Qr)):wo(Object(Qr)).forEach(function(Yr){Object.defineProperty(Gr,Yr,Object.getOwnPropertyDescriptor(Qr,Yr))})}return Gr}function qa(Gr){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?qa=function(Wr){return typeof Wr}:qa=function(Wr){return Wr&&typeof Symbol=="function"&&Wr.constructor===Symbol&&Wr!==Symbol.prototype?"symbol":typeof Wr},qa(Gr)}function os(Gr,Wr,Qr){return Wr in Gr?Object.defineProperty(Gr,Wr,{value:Qr,enumerable:!0,configurable:!0,writable:!0}):Gr[Wr]=Qr,Gr}function Gi(){return Gi=Object.assign||function(Gr){for(var Wr=1;Wr<arguments.length;Wr++){var Qr=arguments[Wr];for(var Yr in Qr)Object.prototype.hasOwnProperty.call(Qr,Yr)&&(Gr[Yr]=Qr[Yr])}return Gr},Gi.apply(this,arguments)}function ss(Gr,Wr){if(Gr==null)return{};var Qr={},Yr=Object.keys(Gr),Jr,rn;for(rn=0;rn<Yr.length;rn++)Jr=Yr[rn],!(Wr.indexOf(Jr)>=0)&&(Qr[Jr]=Gr[Jr]);return Qr}function ls(Gr,Wr){if(Gr==null)return{};var Qr=ss(Gr,Wr),Yr,Jr;if(Object.getOwnPropertySymbols){var rn=Object.getOwnPropertySymbols(Gr);for(Jr=0;Jr<rn.length;Jr++)Yr=rn[Jr],!(Wr.indexOf(Yr)>=0)&&Object.prototype.propertyIsEnumerable.call(Gr,Yr)&&(Qr[Yr]=Gr[Yr])}return Qr}var us="1.15.6";function Ui(Gr){if(typeof window<"u"&&window.navigator)return!!navigator.userAgent.match(Gr)}var ji=Ui(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),Ea=Ui(/Edge/i),ko=Ui(/firefox/i),pa=Ui(/safari/i)&&!Ui(/chrome/i)&&!Ui(/android/i),co=Ui(/iP(ad|od|hone)/i),Do=Ui(/chrome/i)&&Ui(/android/i),qo={capture:!1,passive:!1};function Zn(Gr,Wr,Qr){Gr.addEventListener(Wr,Qr,!ji&&qo)}function Jn(Gr,Wr,Qr){Gr.removeEventListener(Wr,Qr,!ji&&qo)}function _a(Gr,Wr){if(Wr){if(Wr[0]===">"&&(Wr=Wr.substring(1)),Gr)try{if(Gr.matches)return Gr.matches(Wr);if(Gr.msMatchesSelector)return Gr.msMatchesSelector(Wr);if(Gr.webkitMatchesSelector)return Gr.webkitMatchesSelector(Wr)}catch{return!1}return!1}}function Lo(Gr){return Gr.host&&Gr!==document&&Gr.host.nodeType?Gr.host:Gr.parentNode}function Fi(Gr,Wr,Qr,Yr){if(Gr){Qr=Qr||document;do{if(Wr!=null&&(Wr[0]===">"?Gr.parentNode===Qr&&_a(Gr,Wr):_a(Gr,Wr))||Yr&&Gr===Qr)return Gr;if(Gr===Qr)break}while(Gr=Lo(Gr))}return null}var So=/\s+/g;function Ai(Gr,Wr,Qr){if(Gr&&Wr)if(Gr.classList)Gr.classList[Qr?"add":"remove"](Wr);else{var Yr=(" "+Gr.className+" ").replace(So," ").replace(" "+Wr+" "," ");Gr.className=(Yr+(Qr?" "+Wr:"")).replace(So," ")}}function Qn(Gr,Wr,Qr){var Yr=Gr&&Gr.style;if(Yr){if(Qr===void 0)return document.defaultView&&document.defaultView.getComputedStyle?Qr=document.defaultView.getComputedStyle(Gr,""):Gr.currentStyle&&(Qr=Gr.currentStyle),Wr===void 0?Qr:Qr[Wr];!(Wr in Yr)&&Wr.indexOf("webkit")===-1&&(Wr="-webkit-"+Wr),Yr[Wr]=Qr+(typeof Qr=="string"?"":"px")}}function aa(Gr,Wr){var Qr="";if(typeof Gr=="string")Qr=Gr;else do{var Yr=Qn(Gr,"transform");Yr&&Yr!=="none"&&(Qr=Yr+" "+Qr)}while(!Wr&&(Gr=Gr.parentNode));var Jr=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return Jr&&new Jr(Qr)}function Mo(Gr,Wr,Qr){if(Gr){var Yr=Gr.getElementsByTagName(Wr),Jr=0,rn=Yr.length;if(Qr)for(;Jr<rn;Jr++)Qr(Yr[Jr],Jr);return Yr}return[]}function _i(){var Gr=document.scrollingElement;return Gr||document.documentElement}function mi(Gr,Wr,Qr,Yr,Jr){if(!(!Gr.getBoundingClientRect&&Gr!==window)){var rn,ln,mn,gn,xn,Cn,On;if(Gr!==window&&Gr.parentNode&&Gr!==_i()?(rn=Gr.getBoundingClientRect(),ln=rn.top,mn=rn.left,gn=rn.bottom,xn=rn.right,Cn=rn.height,On=rn.width):(ln=0,mn=0,gn=window.innerHeight,xn=window.innerWidth,Cn=window.innerHeight,On=window.innerWidth),(Wr||Qr)&&Gr!==window&&(Jr=Jr||Gr.parentNode,!ji))do if(Jr&&Jr.getBoundingClientRect&&(Qn(Jr,"transform")!=="none"||Qr&&Qn(Jr,"position")!=="static")){var Pn=Jr.getBoundingClientRect();ln-=Pn.top+parseInt(Qn(Jr,"border-top-width")),mn-=Pn.left+parseInt(Qn(Jr,"border-left-width")),gn=ln+rn.height,xn=mn+rn.width;break}while(Jr=Jr.parentNode);if(Yr&&Gr!==window){var Gn=aa(Jr||Gr),Xn=Gn&&Gn.a,zn=Gn&&Gn.d;Gn&&(ln/=zn,mn/=Xn,On/=Xn,Cn/=zn,gn=ln+Cn,xn=mn+On)}return{top:ln,left:mn,bottom:gn,right:xn,width:On,height:Cn}}}function Co(Gr,Wr,Qr){for(var Yr=Qi(Gr,!0),Jr=mi(Gr)[Wr];Yr;){var rn=mi(Yr)[Qr],ln=void 0;if(Qr==="top"||Qr==="left"?ln=Jr>=rn:ln=Jr<=rn,!ln)return Yr;if(Yr===_i())break;Yr=Qi(Yr,!1)}return!1}function oa(Gr,Wr,Qr,Yr){for(var Jr=0,rn=0,ln=Gr.children;rn<ln.length;){if(ln[rn].style.display!=="none"&&ln[rn]!==Vn.ghost&&(Yr||ln[rn]!==Vn.dragged)&&Fi(ln[rn],Qr.draggable,Gr,!1)){if(Jr===Wr)return ln[rn];Jr++}rn++}return null}function fo(Gr,Wr){for(var Qr=Gr.lastElementChild;Qr&&(Qr===Vn.ghost||Qn(Qr,"display")==="none"||Wr&&!_a(Qr,Wr));)Qr=Qr.previousElementSibling;return Qr||null}function qi(Gr,Wr){var Qr=0;if(!Gr||!Gr.parentNode)return-1;for(;Gr=Gr.previousElementSibling;)Gr.nodeName.toUpperCase()!=="TEMPLATE"&&Gr!==Vn.clone&&(!Wr||_a(Gr,Wr))&&Qr++;return Qr}function Oo(Gr){var Wr=0,Qr=0,Yr=_i();if(Gr)do{var Jr=aa(Gr),rn=Jr.a,ln=Jr.d;Wr+=Gr.scrollLeft*rn,Qr+=Gr.scrollTop*ln}while(Gr!==Yr&&(Gr=Gr.parentNode));return[Wr,Qr]}function cs(Gr,Wr){for(var Qr in Gr)if(Gr.hasOwnProperty(Qr)){for(var Yr in Wr)if(Wr.hasOwnProperty(Yr)&&Wr[Yr]===Gr[Qr][Yr])return Number(Qr)}return-1}function Qi(Gr,Wr){if(!Gr||!Gr.getBoundingClientRect)return _i();var Qr=Gr,Yr=!1;do if(Qr.clientWidth<Qr.scrollWidth||Qr.clientHeight<Qr.scrollHeight){var Jr=Qn(Qr);if(Qr.clientWidth<Qr.scrollWidth&&(Jr.overflowX=="auto"||Jr.overflowX=="scroll")||Qr.clientHeight<Qr.scrollHeight&&(Jr.overflowY=="auto"||Jr.overflowY=="scroll")){if(!Qr.getBoundingClientRect||Qr===document.body)return _i();if(Yr||Wr)return Qr;Yr=!0}}while(Qr=Qr.parentNode);return _i()}function fs(Gr,Wr){if(Gr&&Wr)for(var Qr in Wr)Wr.hasOwnProperty(Qr)&&(Gr[Qr]=Wr[Qr]);return Gr}function Ka(Gr,Wr){return Math.round(Gr.top)===Math.round(Wr.top)&&Math.round(Gr.left)===Math.round(Wr.left)&&Math.round(Gr.height)===Math.round(Wr.height)&&Math.round(Gr.width)===Math.round(Wr.width)}var ma;function Po(Gr,Wr){return function(){if(!ma){var Qr=arguments,Yr=this;Qr.length===1?Gr.call(Yr,Qr[0]):Gr.apply(Yr,Qr),ma=setTimeout(function(){ma=void 0},Wr)}}}function hs(){clearTimeout(ma),ma=void 0}function Fo(Gr,Wr,Qr){Gr.scrollLeft+=Wr,Gr.scrollTop+=Qr}function _o(Gr){var Wr=window.Polymer,Qr=window.jQuery||window.Zepto;return Wr&&Wr.dom?Wr.dom(Gr).cloneNode(!0):Qr?Qr(Gr).clone(!0)[0]:Gr.cloneNode(!0)}function Ho(Gr,Wr,Qr){var Yr={};return Array.from(Gr.children).forEach(function(Jr){var rn,ln,mn,gn;if(!(!Fi(Jr,Wr.draggable,Gr,!1)||Jr.animated||Jr===Qr)){var xn=mi(Jr);Yr.left=Math.min((rn=Yr.left)!==null&&rn!==void 0?rn:1/0,xn.left),Yr.top=Math.min((ln=Yr.top)!==null&&ln!==void 0?ln:1/0,xn.top),Yr.right=Math.max((mn=Yr.right)!==null&&mn!==void 0?mn:-1/0,xn.right),Yr.bottom=Math.max((gn=Yr.bottom)!==null&&gn!==void 0?gn:-1/0,xn.bottom)}}),Yr.width=Yr.right-Yr.left,Yr.height=Yr.bottom-Yr.top,Yr.x=Yr.left,Yr.y=Yr.top,Yr}var ki="Sortable"+new Date().getTime();function ds(){var Gr=[],Wr;return{captureAnimationState:function(){if(Gr=[],!!this.options.animation){var Yr=[].slice.call(this.el.children);Yr.forEach(function(Jr){if(!(Qn(Jr,"display")==="none"||Jr===Vn.ghost)){Gr.push({target:Jr,rect:mi(Jr)});var rn=Hi({},Gr[Gr.length-1].rect);if(Jr.thisAnimationDuration){var ln=aa(Jr,!0);ln&&(rn.top-=ln.f,rn.left-=ln.e)}Jr.fromRect=rn}})}},addAnimationState:function(Yr){Gr.push(Yr)},removeAnimationState:function(Yr){Gr.splice(cs(Gr,{target:Yr}),1)},animateAll:function(Yr){var Jr=this;if(!this.options.animation){clearTimeout(Wr),typeof Yr=="function"&&Yr();return}var rn=!1,ln=0;Gr.forEach(function(mn){var gn=0,xn=mn.target,Cn=xn.fromRect,On=mi(xn),Pn=xn.prevFromRect,Gn=xn.prevToRect,Xn=mn.rect,zn=aa(xn,!0);zn&&(On.top-=zn.f,On.left-=zn.e),xn.toRect=On,xn.thisAnimationDuration&&Ka(Pn,On)&&!Ka(Cn,On)&&(Xn.top-On.top)/(Xn.left-On.left)===(Cn.top-On.top)/(Cn.left-On.left)&&(gn=ms(Xn,Pn,Gn,Jr.options)),Ka(On,Cn)||(xn.prevFromRect=Cn,xn.prevToRect=On,gn||(gn=Jr.options.animation),Jr.animate(xn,Xn,On,gn)),gn&&(rn=!0,ln=Math.max(ln,gn),clearTimeout(xn.animationResetTimer),xn.animationResetTimer=setTimeout(function(){xn.animationTime=0,xn.prevFromRect=null,xn.fromRect=null,xn.prevToRect=null,xn.thisAnimationDuration=null},gn),xn.thisAnimationDuration=gn)}),clearTimeout(Wr),rn?Wr=setTimeout(function(){typeof Yr=="function"&&Yr()},ln):typeof Yr=="function"&&Yr(),Gr=[]},animate:function(Yr,Jr,rn,ln){if(ln){Qn(Yr,"transition",""),Qn(Yr,"transform","");var mn=aa(this.el),gn=mn&&mn.a,xn=mn&&mn.d,Cn=(Jr.left-rn.left)/(gn||1),On=(Jr.top-rn.top)/(xn||1);Yr.animatingX=!!Cn,Yr.animatingY=!!On,Qn(Yr,"transform","translate3d("+Cn+"px,"+On+"px,0)"),this.forRepaintDummy=ps(Yr),Qn(Yr,"transition","transform "+ln+"ms"+(this.options.easing?" "+this.options.easing:"")),Qn(Yr,"transform","translate3d(0,0,0)"),typeof Yr.animated=="number"&&clearTimeout(Yr.animated),Yr.animated=setTimeout(function(){Qn(Yr,"transition",""),Qn(Yr,"transform",""),Yr.animated=!1,Yr.animatingX=!1,Yr.animatingY=!1},ln)}}}}function ps(Gr){return Gr.offsetWidth}function ms(Gr,Wr,Qr,Yr){return Math.sqrt(Math.pow(Wr.top-Gr.top,2)+Math.pow(Wr.left-Gr.left,2))/Math.sqrt(Math.pow(Wr.top-Qr.top,2)+Math.pow(Wr.left-Qr.left,2))*Yr.animation}var ta=[],Ja={initializeByDefault:!0},ba={mount:function(Wr){for(var Qr in Ja)Ja.hasOwnProperty(Qr)&&!(Qr in Wr)&&(Wr[Qr]=Ja[Qr]);ta.forEach(function(Yr){if(Yr.pluginName===Wr.pluginName)throw"Sortable: Cannot mount plugin ".concat(Wr.pluginName," more than once")}),ta.push(Wr)},pluginEvent:function(Wr,Qr,Yr){var Jr=this;this.eventCanceled=!1,Yr.cancel=function(){Jr.eventCanceled=!0};var rn=Wr+"Global";ta.forEach(function(ln){Qr[ln.pluginName]&&(Qr[ln.pluginName][rn]&&Qr[ln.pluginName][rn](Hi({sortable:Qr},Yr)),Qr.options[ln.pluginName]&&Qr[ln.pluginName][Wr]&&Qr[ln.pluginName][Wr](Hi({sortable:Qr},Yr)))})},initializePlugins:function(Wr,Qr,Yr,Jr){ta.forEach(function(mn){var gn=mn.pluginName;if(!(!Wr.options[gn]&&!mn.initializeByDefault)){var xn=new mn(Wr,Qr,Wr.options);xn.sortable=Wr,xn.options=Wr.options,Wr[gn]=xn,Gi(Yr,xn.defaults)}});for(var rn in Wr.options)if(Wr.options.hasOwnProperty(rn)){var ln=this.modifyOption(Wr,rn,Wr.options[rn]);typeof ln<"u"&&(Wr.options[rn]=ln)}},getEventProperties:function(Wr,Qr){var Yr={};return ta.forEach(function(Jr){typeof Jr.eventProperties=="function"&&Gi(Yr,Jr.eventProperties.call(Qr[Jr.pluginName],Wr))}),Yr},modifyOption:function(Wr,Qr,Yr){var Jr;return ta.forEach(function(rn){Wr[rn.pluginName]&&rn.optionListeners&&typeof rn.optionListeners[Qr]=="function"&&(Jr=rn.optionListeners[Qr].call(Wr[rn.pluginName],Yr))}),Jr}};function vs(Gr){var Wr=Gr.sortable,Qr=Gr.rootEl,Yr=Gr.name,Jr=Gr.targetEl,rn=Gr.cloneEl,ln=Gr.toEl,mn=Gr.fromEl,gn=Gr.oldIndex,xn=Gr.newIndex,Cn=Gr.oldDraggableIndex,On=Gr.newDraggableIndex,Pn=Gr.originalEvent,Gn=Gr.putSortable,Xn=Gr.extraEventProperties;if(Wr=Wr||Qr&&Qr[ki],!!Wr){var zn,ni=Wr.options,gi="on"+Yr.charAt(0).toUpperCase()+Yr.substr(1);window.CustomEvent&&!ji&&!Ea?zn=new CustomEvent(Yr,{bubbles:!0,cancelable:!0}):(zn=document.createEvent("Event"),zn.initEvent(Yr,!0,!0)),zn.to=ln||Qr,zn.from=mn||Qr,zn.item=Jr||Qr,zn.clone=rn,zn.oldIndex=gn,zn.newIndex=xn,zn.oldDraggableIndex=Cn,zn.newDraggableIndex=On,zn.originalEvent=Pn,zn.pullMode=Gn?Gn.lastPutMode:void 0;var ci=Hi(Hi({},Xn),ba.getEventProperties(Yr,Wr));for(var ai in ci)zn[ai]=ci[ai];Qr&&Qr.dispatchEvent(zn),ni[gi]&&ni[gi].call(Wr,zn)}}var gs=["evt"],wi=function(Wr,Qr){var Yr=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},Jr=Yr.evt,rn=ls(Yr,gs);ba.pluginEvent.bind(Vn)(Wr,Qr,Hi({dragEl:Fn,parentEl:fi,ghostEl:Yn,rootEl:li,nextEl:Ki,lastDownEl:La,cloneEl:ui,cloneHidden:Wi,dragStarted:fa,putSortable:yi,activeSortable:Vn.active,originalEvent:Jr,oldIndex:ia,oldDraggableIndex:va,newIndex:Ii,newDraggableIndex:zi,hideGhostForTarget:jo,unhideGhostForTarget:Xo,cloneNowHidden:function(){Wi=!0},cloneNowShown:function(){Wi=!1},dispatchSortableEvent:function(mn){xi({sortable:Qr,name:mn,originalEvent:Jr})}},rn))};function xi(Gr){vs(Hi({putSortable:yi,cloneEl:ui,targetEl:Fn,rootEl:li,oldIndex:ia,oldDraggableIndex:va,newIndex:Ii,newDraggableIndex:zi},Gr))}var Fn,fi,Yn,li,Ki,La,ui,Wi,ia,Ii,va,zi,Ia,yi,na=!1,Ha=!1,Ba=[],Yi,Pi,Za,eo,Ao,Io,fa,ra,ga,ya=!1,Ra=!1,Ma,Ti,to=[],oo=!1,Ua=[],ja=typeof document<"u",Na=co,Ro=Ea||ji?"cssFloat":"float",ys=ja&&!Do&&!co&&"draggable"in document.createElement("div"),Bo=function(){if(ja){if(ji)return!1;var Gr=document.createElement("x");return Gr.style.cssText="pointer-events:auto",Gr.style.pointerEvents==="auto"}}(),Uo=function(Wr,Qr){var Yr=Qn(Wr),Jr=parseInt(Yr.width)-parseInt(Yr.paddingLeft)-parseInt(Yr.paddingRight)-parseInt(Yr.borderLeftWidth)-parseInt(Yr.borderRightWidth),rn=oa(Wr,0,Qr),ln=oa(Wr,1,Qr),mn=rn&&Qn(rn),gn=ln&&Qn(ln),xn=mn&&parseInt(mn.marginLeft)+parseInt(mn.marginRight)+mi(rn).width,Cn=gn&&parseInt(gn.marginLeft)+parseInt(gn.marginRight)+mi(ln).width;if(Yr.display==="flex")return Yr.flexDirection==="column"||Yr.flexDirection==="column-reverse"?"vertical":"horizontal";if(Yr.display==="grid")return Yr.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(rn&&mn.float&&mn.float!=="none"){var On=mn.float==="left"?"left":"right";return ln&&(gn.clear==="both"||gn.clear===On)?"vertical":"horizontal"}return rn&&(mn.display==="block"||mn.display==="flex"||mn.display==="table"||mn.display==="grid"||xn>=Jr&&Yr[Ro]==="none"||ln&&Yr[Ro]==="none"&&xn+Cn>Jr)?"vertical":"horizontal"},Es=function(Wr,Qr,Yr){var Jr=Yr?Wr.left:Wr.top,rn=Yr?Wr.right:Wr.bottom,ln=Yr?Wr.width:Wr.height,mn=Yr?Qr.left:Qr.top,gn=Yr?Qr.right:Qr.bottom,xn=Yr?Qr.width:Qr.height;return Jr===mn||rn===gn||Jr+ln/2===mn+xn/2},bs=function(Wr,Qr){var Yr;return Ba.some(function(Jr){var rn=Jr[ki].options.emptyInsertThreshold;if(!(!rn||fo(Jr))){var ln=mi(Jr),mn=Wr>=ln.left-rn&&Wr<=ln.right+rn,gn=Qr>=ln.top-rn&&Qr<=ln.bottom+rn;if(mn&&gn)return Yr=Jr}}),Yr},Go=function(Wr){function Qr(rn,ln){return function(mn,gn,xn,Cn){var On=mn.options.group.name&&gn.options.group.name&&mn.options.group.name===gn.options.group.name;if(rn==null&&(ln||On))return!0;if(rn==null||rn===!1)return!1;if(ln&&rn==="clone")return rn;if(typeof rn=="function")return Qr(rn(mn,gn,xn,Cn),ln)(mn,gn,xn,Cn);var Pn=(ln?mn:gn).options.group.name;return rn===!0||typeof rn=="string"&&rn===Pn||rn.join&&rn.indexOf(Pn)>-1}}var Yr={},Jr=Wr.group;(!Jr||qa(Jr)!="object")&&(Jr={name:Jr}),Yr.name=Jr.name,Yr.checkPull=Qr(Jr.pull,!0),Yr.checkPut=Qr(Jr.put),Yr.revertClone=Jr.revertClone,Wr.group=Yr},jo=function(){!Bo&&Yn&&Qn(Yn,"display","none")},Xo=function(){!Bo&&Yn&&Qn(Yn,"display","")};ja&&!Do&&document.addEventListener("click",function(Gr){if(Ha)return Gr.preventDefault(),Gr.stopPropagation&&Gr.stopPropagation(),Gr.stopImmediatePropagation&&Gr.stopImmediatePropagation(),Ha=!1,!1},!0);var $i=function(Wr){if(Fn){Wr=Wr.touches?Wr.touches[0]:Wr;var Qr=bs(Wr.clientX,Wr.clientY);if(Qr){var Yr={};for(var Jr in Wr)Wr.hasOwnProperty(Jr)&&(Yr[Jr]=Wr[Jr]);Yr.target=Yr.rootEl=Qr,Yr.preventDefault=void 0,Yr.stopPropagation=void 0,Qr[ki]._onDragOver(Yr)}}},Ts=function(Wr){Fn&&Fn.parentNode[ki]._isOutsideThisEl(Wr.target)};function Vn(Gr,Wr){if(!(Gr&&Gr.nodeType&&Gr.nodeType===1))throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(Gr));this.el=Gr,this.options=Wr=Gi({},Wr),Gr[ki]=this;var Qr={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(Gr.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Uo(Gr,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(ln,mn){ln.setData("Text",mn.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:Vn.supportPointer!==!1&&"PointerEvent"in window&&(!pa||co),emptyInsertThreshold:5};ba.initializePlugins(this,Gr,Qr);for(var Yr in Qr)!(Yr in Wr)&&(Wr[Yr]=Qr[Yr]);Go(Wr);for(var Jr in this)Jr.charAt(0)==="_"&&typeof this[Jr]=="function"&&(this[Jr]=this[Jr].bind(this));this.nativeDraggable=Wr.forceFallback?!1:ys,this.nativeDraggable&&(this.options.touchStartThreshold=1),Wr.supportPointer?Zn(Gr,"pointerdown",this._onTapStart):(Zn(Gr,"mousedown",this._onTapStart),Zn(Gr,"touchstart",this._onTapStart)),this.nativeDraggable&&(Zn(Gr,"dragover",this),Zn(Gr,"dragenter",this)),Ba.push(this.el),Wr.store&&Wr.store.get&&this.sort(Wr.store.get(this)||[]),Gi(this,ds())}Vn.prototype={constructor:Vn,_isOutsideThisEl:function(Wr){!this.el.contains(Wr)&&Wr!==this.el&&(ra=null)},_getDirection:function(Wr,Qr){return typeof this.options.direction=="function"?this.options.direction.call(this,Wr,Qr,Fn):this.options.direction},_onTapStart:function(Wr){if(Wr.cancelable){var Qr=this,Yr=this.el,Jr=this.options,rn=Jr.preventOnFilter,ln=Wr.type,mn=Wr.touches&&Wr.touches[0]||Wr.pointerType&&Wr.pointerType==="touch"&&Wr,gn=(mn||Wr).target,xn=Wr.target.shadowRoot&&(Wr.path&&Wr.path[0]||Wr.composedPath&&Wr.composedPath()[0])||gn,Cn=Jr.filter;if(Is(Yr),!Fn&&!(/mousedown|pointerdown/.test(ln)&&Wr.button!==0||Jr.disabled)&&!xn.isContentEditable&&!(!this.nativeDraggable&&pa&&gn&&gn.tagName.toUpperCase()==="SELECT")&&(gn=Fi(gn,Jr.draggable,Yr,!1),!(gn&&gn.animated)&&La!==gn)){if(ia=qi(gn),va=qi(gn,Jr.draggable),typeof Cn=="function"){if(Cn.call(this,Wr,gn,this)){xi({sortable:Qr,rootEl:xn,name:"filter",targetEl:gn,toEl:Yr,fromEl:Yr}),wi("filter",Qr,{evt:Wr}),rn&&Wr.preventDefault();return}}else if(Cn&&(Cn=Cn.split(",").some(function(On){if(On=Fi(xn,On.trim(),Yr,!1),On)return xi({sortable:Qr,rootEl:On,name:"filter",targetEl:gn,fromEl:Yr,toEl:Yr}),wi("filter",Qr,{evt:Wr}),!0}),Cn)){rn&&Wr.preventDefault();return}Jr.handle&&!Fi(xn,Jr.handle,Yr,!1)||this._prepareDragStart(Wr,mn,gn)}}},_prepareDragStart:function(Wr,Qr,Yr){var Jr=this,rn=Jr.el,ln=Jr.options,mn=rn.ownerDocument,gn;if(Yr&&!Fn&&Yr.parentNode===rn){var xn=mi(Yr);if(li=rn,Fn=Yr,fi=Fn.parentNode,Ki=Fn.nextSibling,La=Yr,Ia=ln.group,Vn.dragged=Fn,Yi={target:Fn,clientX:(Qr||Wr).clientX,clientY:(Qr||Wr).clientY},Ao=Yi.clientX-xn.left,Io=Yi.clientY-xn.top,this._lastX=(Qr||Wr).clientX,this._lastY=(Qr||Wr).clientY,Fn.style["will-change"]="all",gn=function(){if(wi("delayEnded",Jr,{evt:Wr}),Vn.eventCanceled){Jr._onDrop();return}Jr._disableDelayedDragEvents(),!ko&&Jr.nativeDraggable&&(Fn.draggable=!0),Jr._triggerDragStart(Wr,Qr),xi({sortable:Jr,name:"choose",originalEvent:Wr}),Ai(Fn,ln.chosenClass,!0)},ln.ignore.split(",").forEach(function(Cn){Mo(Fn,Cn.trim(),ro)}),Zn(mn,"dragover",$i),Zn(mn,"mousemove",$i),Zn(mn,"touchmove",$i),ln.supportPointer?(Zn(mn,"pointerup",Jr._onDrop),!this.nativeDraggable&&Zn(mn,"pointercancel",Jr._onDrop)):(Zn(mn,"mouseup",Jr._onDrop),Zn(mn,"touchend",Jr._onDrop),Zn(mn,"touchcancel",Jr._onDrop)),ko&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Fn.draggable=!0),wi("delayStart",this,{evt:Wr}),ln.delay&&(!ln.delayOnTouchOnly||Qr)&&(!this.nativeDraggable||!(Ea||ji))){if(Vn.eventCanceled){this._onDrop();return}ln.supportPointer?(Zn(mn,"pointerup",Jr._disableDelayedDrag),Zn(mn,"pointercancel",Jr._disableDelayedDrag)):(Zn(mn,"mouseup",Jr._disableDelayedDrag),Zn(mn,"touchend",Jr._disableDelayedDrag),Zn(mn,"touchcancel",Jr._disableDelayedDrag)),Zn(mn,"mousemove",Jr._delayedDragTouchMoveHandler),Zn(mn,"touchmove",Jr._delayedDragTouchMoveHandler),ln.supportPointer&&Zn(mn,"pointermove",Jr._delayedDragTouchMoveHandler),Jr._dragStartTimer=setTimeout(gn,ln.delay)}else gn()}},_delayedDragTouchMoveHandler:function(Wr){var Qr=Wr.touches?Wr.touches[0]:Wr;Math.max(Math.abs(Qr.clientX-this._lastX),Math.abs(Qr.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){Fn&&ro(Fn),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var Wr=this.el.ownerDocument;Jn(Wr,"mouseup",this._disableDelayedDrag),Jn(Wr,"touchend",this._disableDelayedDrag),Jn(Wr,"touchcancel",this._disableDelayedDrag),Jn(Wr,"pointerup",this._disableDelayedDrag),Jn(Wr,"pointercancel",this._disableDelayedDrag),Jn(Wr,"mousemove",this._delayedDragTouchMoveHandler),Jn(Wr,"touchmove",this._delayedDragTouchMoveHandler),Jn(Wr,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(Wr,Qr){Qr=Qr||Wr.pointerType=="touch"&&Wr,!this.nativeDraggable||Qr?this.options.supportPointer?Zn(document,"pointermove",this._onTouchMove):Qr?Zn(document,"touchmove",this._onTouchMove):Zn(document,"mousemove",this._onTouchMove):(Zn(Fn,"dragend",this),Zn(li,"dragstart",this._onDragStart));try{document.selection?Pa(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function(Wr,Qr){if(na=!1,li&&Fn){wi("dragStarted",this,{evt:Qr}),this.nativeDraggable&&Zn(document,"dragover",Ts);var Yr=this.options;!Wr&&Ai(Fn,Yr.dragClass,!1),Ai(Fn,Yr.ghostClass,!0),Vn.active=this,Wr&&this._appendGhost(),xi({sortable:this,name:"start",originalEvent:Qr})}else this._nulling()},_emulateDragOver:function(){if(Pi){this._lastX=Pi.clientX,this._lastY=Pi.clientY,jo();for(var Wr=document.elementFromPoint(Pi.clientX,Pi.clientY),Qr=Wr;Wr&&Wr.shadowRoot&&(Wr=Wr.shadowRoot.elementFromPoint(Pi.clientX,Pi.clientY),Wr!==Qr);)Qr=Wr;if(Fn.parentNode[ki]._isOutsideThisEl(Wr),Qr)do{if(Qr[ki]){var Yr=void 0;if(Yr=Qr[ki]._onDragOver({clientX:Pi.clientX,clientY:Pi.clientY,target:Wr,rootEl:Qr}),Yr&&!this.options.dragoverBubble)break}Wr=Qr}while(Qr=Lo(Qr));Xo()}},_onTouchMove:function(Wr){if(Yi){var Qr=this.options,Yr=Qr.fallbackTolerance,Jr=Qr.fallbackOffset,rn=Wr.touches?Wr.touches[0]:Wr,ln=Yn&&aa(Yn,!0),mn=Yn&&ln&&ln.a,gn=Yn&&ln&&ln.d,xn=Na&&Ti&&Oo(Ti),Cn=(rn.clientX-Yi.clientX+Jr.x)/(mn||1)+(xn?xn[0]-to[0]:0)/(mn||1),On=(rn.clientY-Yi.clientY+Jr.y)/(gn||1)+(xn?xn[1]-to[1]:0)/(gn||1);if(!Vn.active&&!na){if(Yr&&Math.max(Math.abs(rn.clientX-this._lastX),Math.abs(rn.clientY-this._lastY))<Yr)return;this._onDragStart(Wr,!0)}if(Yn){ln?(ln.e+=Cn-(Za||0),ln.f+=On-(eo||0)):ln={a:1,b:0,c:0,d:1,e:Cn,f:On};var Pn="matrix(".concat(ln.a,",").concat(ln.b,",").concat(ln.c,",").concat(ln.d,",").concat(ln.e,",").concat(ln.f,")");Qn(Yn,"webkitTransform",Pn),Qn(Yn,"mozTransform",Pn),Qn(Yn,"msTransform",Pn),Qn(Yn,"transform",Pn),Za=Cn,eo=On,Pi=rn}Wr.cancelable&&Wr.preventDefault()}},_appendGhost:function(){if(!Yn){var Wr=this.options.fallbackOnBody?document.body:li,Qr=mi(Fn,!0,Na,!0,Wr),Yr=this.options;if(Na){for(Ti=Wr;Qn(Ti,"position")==="static"&&Qn(Ti,"transform")==="none"&&Ti!==document;)Ti=Ti.parentNode;Ti!==document.body&&Ti!==document.documentElement?(Ti===document&&(Ti=_i()),Qr.top+=Ti.scrollTop,Qr.left+=Ti.scrollLeft):Ti=_i(),to=Oo(Ti)}Yn=Fn.cloneNode(!0),Ai(Yn,Yr.ghostClass,!1),Ai(Yn,Yr.fallbackClass,!0),Ai(Yn,Yr.dragClass,!0),Qn(Yn,"transition",""),Qn(Yn,"transform",""),Qn(Yn,"box-sizing","border-box"),Qn(Yn,"margin",0),Qn(Yn,"top",Qr.top),Qn(Yn,"left",Qr.left),Qn(Yn,"width",Qr.width),Qn(Yn,"height",Qr.height),Qn(Yn,"opacity","0.8"),Qn(Yn,"position",Na?"absolute":"fixed"),Qn(Yn,"zIndex","100000"),Qn(Yn,"pointerEvents","none"),Vn.ghost=Yn,Wr.appendChild(Yn),Qn(Yn,"transform-origin",Ao/parseInt(Yn.style.width)*100+"% "+Io/parseInt(Yn.style.height)*100+"%")}},_onDragStart:function(Wr,Qr){var Yr=this,Jr=Wr.dataTransfer,rn=Yr.options;if(wi("dragStart",this,{evt:Wr}),Vn.eventCanceled){this._onDrop();return}wi("setupClone",this),Vn.eventCanceled||(ui=_o(Fn),ui.removeAttribute("id"),ui.draggable=!1,ui.style["will-change"]="",this._hideClone(),Ai(ui,this.options.chosenClass,!1),Vn.clone=ui),Yr.cloneId=Pa(function(){wi("clone",Yr),!Vn.eventCanceled&&(Yr.options.removeCloneOnHide||li.insertBefore(ui,Fn),Yr._hideClone(),xi({sortable:Yr,name:"clone"}))}),!Qr&&Ai(Fn,rn.dragClass,!0),Qr?(Ha=!0,Yr._loopId=setInterval(Yr._emulateDragOver,50)):(Jn(document,"mouseup",Yr._onDrop),Jn(document,"touchend",Yr._onDrop),Jn(document,"touchcancel",Yr._onDrop),Jr&&(Jr.effectAllowed="move",rn.setData&&rn.setData.call(Yr,Jr,Fn)),Zn(document,"drop",Yr),Qn(Fn,"transform","translateZ(0)")),na=!0,Yr._dragStartId=Pa(Yr._dragStarted.bind(Yr,Qr,Wr)),Zn(document,"selectstart",Yr),fa=!0,window.getSelection().removeAllRanges(),pa&&Qn(document.body,"user-select","none")},_onDragOver:function(Wr){var Qr=this.el,Yr=Wr.target,Jr,rn,ln,mn=this.options,gn=mn.group,xn=Vn.active,Cn=Ia===gn,On=mn.sort,Pn=yi||xn,Gn,Xn=this,zn=!1;if(oo)return;function ni(fn,An){wi(fn,Xn,Hi({evt:Wr,isOwner:Cn,axis:Gn?"vertical":"horizontal",revert:ln,dragRect:Jr,targetRect:rn,canSort:On,fromSortable:Pn,target:Yr,completed:ci,onMove:function(Dn,In){return Da(li,Qr,Fn,Jr,Dn,mi(Dn),Wr,In)},changed:ai},An))}function gi(){ni("dragOverAnimationCapture"),Xn.captureAnimationState(),Xn!==Pn&&Pn.captureAnimationState()}function ci(fn){return ni("dragOverCompleted",{insertion:fn}),fn&&(Cn?xn._hideClone():xn._showClone(Xn),Xn!==Pn&&(Ai(Fn,yi?yi.options.ghostClass:xn.options.ghostClass,!1),Ai(Fn,mn.ghostClass,!0)),yi!==Xn&&Xn!==Vn.active?yi=Xn:Xn===Vn.active&&yi&&(yi=null),Pn===Xn&&(Xn._ignoreWhileAnimating=Yr),Xn.animateAll(function(){ni("dragOverAnimationComplete"),Xn._ignoreWhileAnimating=null}),Xn!==Pn&&(Pn.animateAll(),Pn._ignoreWhileAnimating=null)),(Yr===Fn&&!Fn.animated||Yr===Qr&&!Yr.animated)&&(ra=null),!mn.dragoverBubble&&!Wr.rootEl&&Yr!==document&&(Fn.parentNode[ki]._isOutsideThisEl(Wr.target),!fn&&$i(Wr)),!mn.dragoverBubble&&Wr.stopPropagation&&Wr.stopPropagation(),zn=!0}function ai(){Ii=qi(Fn),zi=qi(Fn,mn.draggable),xi({sortable:Xn,name:"change",toEl:Qr,newIndex:Ii,newDraggableIndex:zi,originalEvent:Wr})}if(Wr.preventDefault!==void 0&&Wr.cancelable&&Wr.preventDefault(),Yr=Fi(Yr,mn.draggable,Qr,!0),ni("dragOver"),Vn.eventCanceled)return zn;if(Fn.contains(Wr.target)||Yr.animated&&Yr.animatingX&&Yr.animatingY||Xn._ignoreWhileAnimating===Yr)return ci(!1);if(Ha=!1,xn&&!mn.disabled&&(Cn?On||(ln=fi!==li):yi===this||(this.lastPutMode=Ia.checkPull(this,xn,Fn,Wr))&&gn.checkPut(this,xn,Fn,Wr))){if(Gn=this._getDirection(Wr,Yr)==="vertical",Jr=mi(Fn),ni("dragOverValid"),Vn.eventCanceled)return zn;if(ln)return fi=li,gi(),this._hideClone(),ni("revert"),Vn.eventCanceled||(Ki?li.insertBefore(Fn,Ki):li.appendChild(Fn)),ci(!0);var Kn=fo(Qr,mn.draggable);if(!Kn||Ss(Wr,Gn,this)&&!Kn.animated){if(Kn===Fn)return ci(!1);if(Kn&&Qr===Wr.target&&(Yr=Kn),Yr&&(rn=mi(Yr)),Da(li,Qr,Fn,Jr,Yr,rn,Wr,!!Yr)!==!1)return gi(),Kn&&Kn.nextSibling?Qr.insertBefore(Fn,Kn.nextSibling):Qr.appendChild(Fn),fi=Qr,ai(),ci(!0)}else if(Kn&&ks(Wr,Gn,this)){var hi=oa(Qr,0,mn,!0);if(hi===Fn)return ci(!1);if(Yr=hi,rn=mi(Yr),Da(li,Qr,Fn,Jr,Yr,rn,Wr,!1)!==!1)return gi(),Qr.insertBefore(Fn,hi),fi=Qr,ai(),ci(!0)}else if(Yr.parentNode===Qr){rn=mi(Yr);var ii=0,Ri,di=Fn.parentNode!==Qr,ei=!Es(Fn.animated&&Fn.toRect||Jr,Yr.animated&&Yr.toRect||rn,Gn),Tn=Gn?"top":"left",Zr=Co(Yr,"top","top")||Co(Fn,"top","top"),nn=Zr?Zr.scrollTop:void 0;ra!==Yr&&(Ri=rn[Tn],ya=!1,Ra=!ei&&mn.invertSwap||di),ii=Cs(Wr,Yr,rn,Gn,ei?1:mn.swapThreshold,mn.invertedSwapThreshold==null?mn.swapThreshold:mn.invertedSwapThreshold,Ra,ra===Yr);var hn;if(ii!==0){var dn=qi(Fn);do dn-=ii,hn=fi.children[dn];while(hn&&(Qn(hn,"display")==="none"||hn===Yn))}if(ii===0||hn===Yr)return ci(!1);ra=Yr,ga=ii;var wn=Yr.nextElementSibling,vn=!1;vn=ii===1;var yn=Da(li,Qr,Fn,Jr,Yr,rn,Wr,vn);if(yn!==!1)return(yn===1||yn===-1)&&(vn=yn===1),oo=!0,setTimeout(ws,30),gi(),vn&&!wn?Qr.appendChild(Fn):Yr.parentNode.insertBefore(Fn,vn?wn:Yr),Zr&&Fo(Zr,0,nn-Zr.scrollTop),fi=Fn.parentNode,Ri!==void 0&&!Ra&&(Ma=Math.abs(Ri-mi(Yr)[Tn])),ai(),ci(!0)}if(Qr.contains(Fn))return ci(!1)}return!1},_ignoreWhileAnimating:null,_offMoveEvents:function(){Jn(document,"mousemove",this._onTouchMove),Jn(document,"touchmove",this._onTouchMove),Jn(document,"pointermove",this._onTouchMove),Jn(document,"dragover",$i),Jn(document,"mousemove",$i),Jn(document,"touchmove",$i)},_offUpEvents:function(){var Wr=this.el.ownerDocument;Jn(Wr,"mouseup",this._onDrop),Jn(Wr,"touchend",this._onDrop),Jn(Wr,"pointerup",this._onDrop),Jn(Wr,"pointercancel",this._onDrop),Jn(Wr,"touchcancel",this._onDrop),Jn(document,"selectstart",this)},_onDrop:function(Wr){var Qr=this.el,Yr=this.options;if(Ii=qi(Fn),zi=qi(Fn,Yr.draggable),wi("drop",this,{evt:Wr}),fi=Fn&&Fn.parentNode,Ii=qi(Fn),zi=qi(Fn,Yr.draggable),Vn.eventCanceled){this._nulling();return}na=!1,Ra=!1,ya=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),so(this.cloneId),so(this._dragStartId),this.nativeDraggable&&(Jn(document,"drop",this),Jn(Qr,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),pa&&Qn(document.body,"user-select",""),Qn(Fn,"transform",""),Wr&&(fa&&(Wr.cancelable&&Wr.preventDefault(),!Yr.dropBubble&&Wr.stopPropagation()),Yn&&Yn.parentNode&&Yn.parentNode.removeChild(Yn),(li===fi||yi&&yi.lastPutMode!=="clone")&&ui&&ui.parentNode&&ui.parentNode.removeChild(ui),Fn&&(this.nativeDraggable&&Jn(Fn,"dragend",this),ro(Fn),Fn.style["will-change"]="",fa&&!na&&Ai(Fn,yi?yi.options.ghostClass:this.options.ghostClass,!1),Ai(Fn,this.options.chosenClass,!1),xi({sortable:this,name:"unchoose",toEl:fi,newIndex:null,newDraggableIndex:null,originalEvent:Wr}),li!==fi?(Ii>=0&&(xi({rootEl:fi,name:"add",toEl:fi,fromEl:li,originalEvent:Wr}),xi({sortable:this,name:"remove",toEl:fi,originalEvent:Wr}),xi({rootEl:fi,name:"sort",toEl:fi,fromEl:li,originalEvent:Wr}),xi({sortable:this,name:"sort",toEl:fi,originalEvent:Wr})),yi&&yi.save()):Ii!==ia&&Ii>=0&&(xi({sortable:this,name:"update",toEl:fi,originalEvent:Wr}),xi({sortable:this,name:"sort",toEl:fi,originalEvent:Wr})),Vn.active&&((Ii==null||Ii===-1)&&(Ii=ia,zi=va),xi({sortable:this,name:"end",toEl:fi,originalEvent:Wr}),this.save()))),this._nulling()},_nulling:function(){wi("nulling",this),li=Fn=fi=Yn=Ki=ui=La=Wi=Yi=Pi=fa=Ii=zi=ia=va=ra=ga=yi=Ia=Vn.dragged=Vn.ghost=Vn.clone=Vn.active=null,Ua.forEach(function(Wr){Wr.checked=!0}),Ua.length=Za=eo=0},handleEvent:function(Wr){switch(Wr.type){case"drop":case"dragend":this._onDrop(Wr);break;case"dragenter":case"dragover":Fn&&(this._onDragOver(Wr),xs(Wr));break;case"selectstart":Wr.preventDefault();break}},toArray:function(){for(var Wr=[],Qr,Yr=this.el.children,Jr=0,rn=Yr.length,ln=this.options;Jr<rn;Jr++)Qr=Yr[Jr],Fi(Qr,ln.draggable,this.el,!1)&&Wr.push(Qr.getAttribute(ln.dataIdAttr)||As(Qr));return Wr},sort:function(Wr,Qr){var Yr={},Jr=this.el;this.toArray().forEach(function(rn,ln){var mn=Jr.children[ln];Fi(mn,this.options.draggable,Jr,!1)&&(Yr[rn]=mn)},this),Qr&&this.captureAnimationState(),Wr.forEach(function(rn){Yr[rn]&&(Jr.removeChild(Yr[rn]),Jr.appendChild(Yr[rn]))}),Qr&&this.animateAll()},save:function(){var Wr=this.options.store;Wr&&Wr.set&&Wr.set(this)},closest:function(Wr,Qr){return Fi(Wr,Qr||this.options.draggable,this.el,!1)},option:function(Wr,Qr){var Yr=this.options;if(Qr===void 0)return Yr[Wr];var Jr=ba.modifyOption(this,Wr,Qr);typeof Jr<"u"?Yr[Wr]=Jr:Yr[Wr]=Qr,Wr==="group"&&Go(Yr)},destroy:function(){wi("destroy",this);var Wr=this.el;Wr[ki]=null,Jn(Wr,"mousedown",this._onTapStart),Jn(Wr,"touchstart",this._onTapStart),Jn(Wr,"pointerdown",this._onTapStart),this.nativeDraggable&&(Jn(Wr,"dragover",this),Jn(Wr,"dragenter",this)),Array.prototype.forEach.call(Wr.querySelectorAll("[draggable]"),function(Qr){Qr.removeAttribute("draggable")}),this._onDrop(),this._disableDelayedDragEvents(),Ba.splice(Ba.indexOf(this.el),1),this.el=Wr=null},_hideClone:function(){if(!Wi){if(wi("hideClone",this),Vn.eventCanceled)return;Qn(ui,"display","none"),this.options.removeCloneOnHide&&ui.parentNode&&ui.parentNode.removeChild(ui),Wi=!0}},_showClone:function(Wr){if(Wr.lastPutMode!=="clone"){this._hideClone();return}if(Wi){if(wi("showClone",this),Vn.eventCanceled)return;Fn.parentNode==li&&!this.options.group.revertClone?li.insertBefore(ui,Fn):Ki?li.insertBefore(ui,Ki):li.appendChild(ui),this.options.group.revertClone&&this.animate(Fn,ui),Qn(ui,"display",""),Wi=!1}}};function xs(Gr){Gr.dataTransfer&&(Gr.dataTransfer.dropEffect="move"),Gr.cancelable&&Gr.preventDefault()}function Da(Gr,Wr,Qr,Yr,Jr,rn,ln,mn){var gn,xn=Gr[ki],Cn=xn.options.onMove,On;return window.CustomEvent&&!ji&&!Ea?gn=new CustomEvent("move",{bubbles:!0,cancelable:!0}):(gn=document.createEvent("Event"),gn.initEvent("move",!0,!0)),gn.to=Wr,gn.from=Gr,gn.dragged=Qr,gn.draggedRect=Yr,gn.related=Jr||Wr,gn.relatedRect=rn||mi(Wr),gn.willInsertAfter=mn,gn.originalEvent=ln,Gr.dispatchEvent(gn),Cn&&(On=Cn.call(xn,gn,ln)),On}function ro(Gr){Gr.draggable=!1}function ws(){oo=!1}function ks(Gr,Wr,Qr){var Yr=mi(oa(Qr.el,0,Qr.options,!0)),Jr=Ho(Qr.el,Qr.options,Yn),rn=10;return Wr?Gr.clientX<Jr.left-rn||Gr.clientY<Yr.top&&Gr.clientX<Yr.right:Gr.clientY<Jr.top-rn||Gr.clientY<Yr.bottom&&Gr.clientX<Yr.left}function Ss(Gr,Wr,Qr){var Yr=mi(fo(Qr.el,Qr.options.draggable)),Jr=Ho(Qr.el,Qr.options,Yn),rn=10;return Wr?Gr.clientX>Jr.right+rn||Gr.clientY>Yr.bottom&&Gr.clientX>Yr.left:Gr.clientY>Jr.bottom+rn||Gr.clientX>Yr.right&&Gr.clientY>Yr.top}function Cs(Gr,Wr,Qr,Yr,Jr,rn,ln,mn){var gn=Yr?Gr.clientY:Gr.clientX,xn=Yr?Qr.height:Qr.width,Cn=Yr?Qr.top:Qr.left,On=Yr?Qr.bottom:Qr.right,Pn=!1;if(!ln){if(mn&&Ma<xn*Jr){if(!ya&&(ga===1?gn>Cn+xn*rn/2:gn<On-xn*rn/2)&&(ya=!0),ya)Pn=!0;else if(ga===1?gn<Cn+Ma:gn>On-Ma)return-ga}else if(gn>Cn+xn*(1-Jr)/2&&gn<On-xn*(1-Jr)/2)return Os(Wr)}return Pn=Pn||ln,Pn&&(gn<Cn+xn*rn/2||gn>On-xn*rn/2)?gn>Cn+xn/2?1:-1:0}function Os(Gr){return qi(Fn)<qi(Gr)?1:-1}function As(Gr){for(var Wr=Gr.tagName+Gr.className+Gr.src+Gr.href+Gr.textContent,Qr=Wr.length,Yr=0;Qr--;)Yr+=Wr.charCodeAt(Qr);return Yr.toString(36)}function Is(Gr){Ua.length=0;for(var Wr=Gr.getElementsByTagName("input"),Qr=Wr.length;Qr--;){var Yr=Wr[Qr];Yr.checked&&Ua.push(Yr)}}function Pa(Gr){return setTimeout(Gr,0)}function so(Gr){return clearTimeout(Gr)}ja&&Zn(document,"touchmove",function(Gr){(Vn.active||na)&&Gr.cancelable&&Gr.preventDefault()});Vn.utils={on:Zn,off:Jn,css:Qn,find:Mo,is:function(Wr,Qr){return!!Fi(Wr,Qr,Wr,!1)},extend:fs,throttle:Po,closest:Fi,toggleClass:Ai,clone:_o,index:qi,nextTick:Pa,cancelNextTick:so,detectDirection:Uo,getChild:oa,expando:ki};Vn.get=function(Gr){return Gr[ki]};Vn.mount=function(){for(var Gr=arguments.length,Wr=new Array(Gr),Qr=0;Qr<Gr;Qr++)Wr[Qr]=arguments[Qr];Wr[0].constructor===Array&&(Wr=Wr[0]),Wr.forEach(function(Yr){if(!Yr.prototype||!Yr.prototype.constructor)throw"Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(Yr));Yr.utils&&(Vn.utils=Hi(Hi({},Vn.utils),Yr.utils)),ba.mount(Yr)})};Vn.create=function(Gr,Wr){return new Vn(Gr,Wr)};Vn.version=us;var pi=[],ha,lo,uo=!1,no,io,Ga,da;function Rs(){function Gr(){this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0};for(var Wr in this)Wr.charAt(0)==="_"&&typeof this[Wr]=="function"&&(this[Wr]=this[Wr].bind(this))}return Gr.prototype={dragStarted:function(Qr){var Yr=Qr.originalEvent;this.sortable.nativeDraggable?Zn(document,"dragover",this._handleAutoScroll):this.options.supportPointer?Zn(document,"pointermove",this._handleFallbackAutoScroll):Yr.touches?Zn(document,"touchmove",this._handleFallbackAutoScroll):Zn(document,"mousemove",this._handleFallbackAutoScroll)},dragOverCompleted:function(Qr){var Yr=Qr.originalEvent;!this.options.dragOverBubble&&!Yr.rootEl&&this._handleAutoScroll(Yr)},drop:function(){this.sortable.nativeDraggable?Jn(document,"dragover",this._handleAutoScroll):(Jn(document,"pointermove",this._handleFallbackAutoScroll),Jn(document,"touchmove",this._handleFallbackAutoScroll),Jn(document,"mousemove",this._handleFallbackAutoScroll)),No(),Fa(),hs()},nulling:function(){Ga=lo=ha=uo=da=no=io=null,pi.length=0},_handleFallbackAutoScroll:function(Qr){this._handleAutoScroll(Qr,!0)},_handleAutoScroll:function(Qr,Yr){var Jr=this,rn=(Qr.touches?Qr.touches[0]:Qr).clientX,ln=(Qr.touches?Qr.touches[0]:Qr).clientY,mn=document.elementFromPoint(rn,ln);if(Ga=Qr,Yr||this.options.forceAutoScrollFallback||Ea||ji||pa){ao(Qr,this.options,mn,Yr);var gn=Qi(mn,!0);uo&&(!da||rn!==no||ln!==io)&&(da&&No(),da=setInterval(function(){var xn=Qi(document.elementFromPoint(rn,ln),!0);xn!==gn&&(gn=xn,Fa()),ao(Qr,Jr.options,xn,Yr)},10),no=rn,io=ln)}else{if(!this.options.bubbleScroll||Qi(mn,!0)===_i()){Fa();return}ao(Qr,this.options,Qi(mn,!1),!1)}}},Gi(Gr,{pluginName:"scroll",initializeByDefault:!0})}function Fa(){pi.forEach(function(Gr){clearInterval(Gr.pid)}),pi=[]}function No(){clearInterval(da)}var ao=Po(function(Gr,Wr,Qr,Yr){if(Wr.scroll){var Jr=(Gr.touches?Gr.touches[0]:Gr).clientX,rn=(Gr.touches?Gr.touches[0]:Gr).clientY,ln=Wr.scrollSensitivity,mn=Wr.scrollSpeed,gn=_i(),xn=!1,Cn;lo!==Qr&&(lo=Qr,Fa(),ha=Wr.scroll,Cn=Wr.scrollFn,ha===!0&&(ha=Qi(Qr,!0)));var On=0,Pn=ha;do{var Gn=Pn,Xn=mi(Gn),zn=Xn.top,ni=Xn.bottom,gi=Xn.left,ci=Xn.right,ai=Xn.width,Kn=Xn.height,hi=void 0,ii=void 0,Ri=Gn.scrollWidth,di=Gn.scrollHeight,ei=Qn(Gn),Tn=Gn.scrollLeft,Zr=Gn.scrollTop;Gn===gn?(hi=ai<Ri&&(ei.overflowX==="auto"||ei.overflowX==="scroll"||ei.overflowX==="visible"),ii=Kn<di&&(ei.overflowY==="auto"||ei.overflowY==="scroll"||ei.overflowY==="visible")):(hi=ai<Ri&&(ei.overflowX==="auto"||ei.overflowX==="scroll"),ii=Kn<di&&(ei.overflowY==="auto"||ei.overflowY==="scroll"));var nn=hi&&(Math.abs(ci-Jr)<=ln&&Tn+ai<Ri)-(Math.abs(gi-Jr)<=ln&&!!Tn),hn=ii&&(Math.abs(ni-rn)<=ln&&Zr+Kn<di)-(Math.abs(zn-rn)<=ln&&!!Zr);if(!pi[On])for(var dn=0;dn<=On;dn++)pi[dn]||(pi[dn]={});(pi[On].vx!=nn||pi[On].vy!=hn||pi[On].el!==Gn)&&(pi[On].el=Gn,pi[On].vx=nn,pi[On].vy=hn,clearInterval(pi[On].pid),(nn!=0||hn!=0)&&(xn=!0,pi[On].pid=setInterval(function(){Yr&&this.layer===0&&Vn.active._onTouchMove(Ga);var wn=pi[this.layer].vy?pi[this.layer].vy*mn:0,vn=pi[this.layer].vx?pi[this.layer].vx*mn:0;typeof Cn=="function"&&Cn.call(Vn.dragged.parentNode[ki],vn,wn,Gr,Ga,pi[this.layer].el)!=="continue"||Fo(pi[this.layer].el,vn,wn)}.bind({layer:On}),24))),On++}while(Wr.bubbleScroll&&Pn!==gn&&(Pn=Qi(Pn,!1)));uo=xn}},30),zo=function(Wr){var Qr=Wr.originalEvent,Yr=Wr.putSortable,Jr=Wr.dragEl,rn=Wr.activeSortable,ln=Wr.dispatchSortableEvent,mn=Wr.hideGhostForTarget,gn=Wr.unhideGhostForTarget;if(Qr){var xn=Yr||rn;mn();var Cn=Qr.changedTouches&&Qr.changedTouches.length?Qr.changedTouches[0]:Qr,On=document.elementFromPoint(Cn.clientX,Cn.clientY);gn(),xn&&!xn.el.contains(On)&&(ln("spill"),this.onSpill({dragEl:Jr,putSortable:Yr}))}};function ho(){}ho.prototype={startIndex:null,dragStart:function(Wr){var Qr=Wr.oldDraggableIndex;this.startIndex=Qr},onSpill:function(Wr){var Qr=Wr.dragEl,Yr=Wr.putSortable;this.sortable.captureAnimationState(),Yr&&Yr.captureAnimationState();var Jr=oa(this.sortable.el,this.startIndex,this.options);Jr?this.sortable.el.insertBefore(Qr,Jr):this.sortable.el.appendChild(Qr),this.sortable.animateAll(),Yr&&Yr.animateAll()},drop:zo};Gi(ho,{pluginName:"revertOnSpill"});function po(){}po.prototype={onSpill:function(Wr){var Qr=Wr.dragEl,Yr=Wr.putSortable,Jr=Yr||this.sortable;Jr.captureAnimationState(),Qr.parentNode&&Qr.parentNode.removeChild(Qr),Jr.animateAll()},drop:zo};Gi(po,{pluginName:"removeOnSpill"});Vn.mount(new Rs);Vn.mount(po,ho);var Wo=Vn;var Xa=class{observerInitialized=!1;layoutMode;containerSelector;spacing;masonryBreakpoint;constructor(Wr={}){this.layoutMode=Wr.layoutMode??"justified",this.containerSelector=Wr.containerSelector??"#gallery-container",this.spacing=Wr.spacing??8,this.masonryBreakpoint=Wr.masonryBreakpoint??640}setLayoutMode(Wr){console.log(`Setting layout mode to: ${Wr} (current: ${this.layoutMode})`),this.layoutMode=Wr,this.computeLayout()}computeLayout(){this.layoutMode==="masonry"?this.computeMasonry():this.computeJustified()}computeMasonry(){let Wr=document.querySelector(this.containerSelector);if(!Wr)return;let Qr=this.spacing,Yr=Wr.offsetWidth;if(Yr===0){requestAnimationFrame(()=>this.computeMasonry());return}let Jr=Yr<this.masonryBreakpoint?1:3,rn=(Yr+Qr)/Jr-Qr,ln=new Array(Jr).fill(0);Wr.querySelectorAll(".gallery-item").forEach(gn=>{let xn=parseFloat(gn.dataset.width),Cn=parseFloat(gn.dataset.height);if(!xn||!Cn)return;let Pn=Cn/xn*rn,Gn=0;for(let ni=1;ni<Jr;ni++)ln[ni]<ln[Gn]&&(Gn=ni);let Xn=(rn+Qr)*Gn,zn=ln[Gn];Object.assign(gn.style,{position:"absolute",width:`${rn}px`,height:`${Pn}px`,left:`${Xn}px`,top:`${zn}px`}),ln[Gn]=zn+Pn+Qr}),Wr.style.height=`${Math.max(...ln)}px`}computeJustified(){let Wr=document.querySelector(this.containerSelector);if(!Wr)return;let Qr=this.spacing,Yr=Wr.offsetWidth;if(Yr===0){requestAnimationFrame(()=>this.computeJustified());return}let Jr=Array.from(Wr.querySelectorAll(".gallery-item")),rn=[],ln=0,mn=0;Jr.forEach(gn=>{Object.assign(gn.style,{position:"absolute",left:"0px",top:"0px",width:"auto",height:"auto"})});for(let gn=0;gn<Jr.length;gn++){let xn=Jr[gn],Cn=parseFloat(xn.dataset.width),On=parseFloat(xn.dataset.height);if(!Cn||!On)continue;let Pn=Cn/On;rn.push({tile:xn,aspectRatio:Pn,imgW:Cn,imgH:On}),ln+=Pn;let Gn=(Yr-(rn.length-1)*Qr)/ln;if(Gn<300||gn===Jr.length-1){let Xn=0;for(let zn of rn){let ni=Gn*zn.aspectRatio;Object.assign(zn.tile.style,{position:"absolute",top:`${mn}px`,left:`${Xn}px`,width:`${ni}px`,height:`${Gn}px`}),Xn+=ni+Qr}mn+=Gn+Qr,rn=[],ln=0}}Wr.style.position="relative",Wr.style.height=`${mn}px`}observe(){if(this.observerInitialized)return;this.observerInitialized=!0;let Wr=document.querySelector(this.containerSelector);if(!Wr)return;if(typeof ResizeObserver<"u"){let Yr=new ResizeObserver(()=>this.computeLayout());Wr.parentElement&&Yr.observe(Wr.parentElement)}new MutationObserver(()=>{this.computeLayout()}).observe(Wr,{childList:!0,subtree:!0})}init(Wr={}){document.addEventListener("DOMContentLoaded",()=>{let Qr=document.querySelector(Wr.containerSelector??"#gallery-container");console.log("Initializing GalleryLayout for container:",Qr),Qr&&(this.computeLayout(),this.observe())})}};var za=class Gr{startX=0;threshold=50;observer;static initialized=!1;static id="photo-dialog";constructor(){this.observer=new MutationObserver(this.handleMutation.bind(this))}connect(){this.onTouchStart=this.onTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),console.log("PhotoDialog: Connected touch event handlers.")}static maybeInitForElement(Wr){if(Wr.id!==Gr.id||Gr.initialized)return;let Qr=new Gr;Qr.connect(),document&&document.body?(document.body.addEventListener("touchstart",Qr.onTouchStart),document.body.addEventListener("touchend",Qr.onTouchEnd),Qr.observe(),Gr.initialized=!0):console.warn("document.body not available for PhotoDialog event listeners")}onTouchStart(Wr){this.startX=Wr.touches[0].clientX}onTouchEnd(Wr){let Yr=Wr.changedTouches[0].clientX-this.startX;if(Math.abs(Yr)>this.threshold){let Jr=Yr>0?"swiperight":"swipeleft";Wr.target.dispatchEvent(new CustomEvent(Jr,{bubbles:!0}))}}observe(){this.observer.observe(document.body,{childList:!0,subtree:!0})}disconnect(){this.observer.disconnect(),document.body.removeEventListener("touchstart",this.onTouchStart),document.body.removeEventListener("touchend",this.onTouchEnd),Gr.initialized=!1}handleMutation(){document.getElementById(Gr.id)||(console.log("PhotoDialog not found, removing event listeners"),this.disconnect())}};var mo={};is(mo,{dataURLToBlob:()=>Ta,doResize:()=>xa,readFileAsDataURL:()=>sa});function sa(Gr){return new Promise((Wr,Qr)=>{let Yr=new FileReader;Yr.onload=()=>Wr(Yr.result),Yr.onerror=Qr,Yr.readAsDataURL(Gr)})}function Ta(Gr){let[Wr,Qr]=Gr.split(","),Yr=/:(.*?);/.exec(Wr);if(!Yr)throw new Error("Invalid data URL");let Jr=Yr[1],rn=atob(Qr),ln=new Uint8Array(rn.length);for(let mn=0;mn<rn.length;mn++)ln[mn]=rn.charCodeAt(mn);return new Blob([ln],{type:Jr})}function Qo(Gr){let Wr=Gr.split(",")[1];return Math.ceil(Wr.length*3/4)}function Ns(Gr,Wr){return new Promise((Qr,Yr)=>{let Jr=new Image;Jr.onload=()=>{let rn;Wr.mode==="cover"?rn=Math.max(Wr.width/Jr.width,Wr.height/Jr.height):Wr.mode==="contain"?rn=Math.min(Wr.width/Jr.width,Wr.height/Jr.height):rn=1;let ln=Math.round(Jr.width*rn),mn=Math.round(Jr.height*rn),gn=document.createElement("canvas");gn.width=ln,gn.height=mn;let xn=gn.getContext("2d");if(!xn)return Yr(new Error("Failed to get canvas context"));xn.fillStyle="#fff",xn.fillRect(0,0,ln,mn),xn.imageSmoothingEnabled=!0,xn.imageSmoothingQuality="high",xn.drawImage(Jr,0,0,ln,mn),Qr({dataUrl:gn.toDataURL("image/jpeg",Wr.quality),width:ln,height:mn})},Jr.onerror=rn=>Yr(rn),Jr.src=Gr})}async function xa(Gr,Wr){let Qr=null,Yr=0,Jr=101;for(;Jr-Yr>1;){let rn=Math.round((Yr+Jr)/2),ln=await Ns(Gr,{width:Wr.width,height:Wr.height,quality:rn/100,mode:Wr.mode});Qo(ln.dataUrl)<Wr.maxSize?(Yr=rn,Qr=ln):Jr=rn}if(!Qr)throw new Error("Failed to compress image");return{path:Qr.dataUrl,mime:"image/jpeg",size:Qo(Qr.dataUrl),width:Qr.width,height:Qr.height}}var Vo=ca(Oa());var Wa=class{handleAvatarImageSelect(Wr){let Qr=Wr.files?.[0];Qr&&sa(Qr).then(Yr=>{let Jr=document.createElement("img");typeof Yr=="string"?Jr.src=Yr:(console.error("Expected dataUrl to be a string, got:",typeof Yr),Jr.src=""),Jr.className="rounded-full w-full h-full object-cover",Jr.alt="Avatar preview";let rn=Wr.closest("form")?.querySelector("#image-preview");rn&&(rn.innerHTML="",rn.appendChild(Jr))})}async updateProfile(Wr){let Qr=new FormData(Wr),Yr=Qr.get("file");if(Yr instanceof File&&Yr?.type?.startsWith?.("image/"))try{let Jr=await sa(Yr);if(!Jr||typeof Jr!="string"){console.error("Failed to read file as data URL");return}let rn=await xa(Jr,{width:2e3,height:2e3,maxSize:1e3*1e3,mode:"contain"}),ln=Ta(rn.path);Qr.set("file",ln,Yr.name)}catch(Jr){console.error("Error resizing image:",Jr),Qr.delete("file")}Vo.default.ajax("PUT","/actions/profile",{swap:"none",values:Object.fromEntries(Qr),source:Wr})}};var vo=ca(Oa()),Yo=ca($a());var Qa=class{async uploadPhotos(Wr){let Qr=Array.from(Wr.files??[]);if(Qr.length>10){alert("You can only upload 10 photos at a time");return}let Yr=Qr.map(async Jr=>{try{let rn=await sa(Jr);if(!rn||typeof rn!="string"){console.error("Failed to read file as data URL");return}let ln=await xa(rn,{width:2e3,height:2e3,maxSize:1e3*1e3,mode:"contain"}),mn=Ta(ln.path),gn=new FormData;gn.append("file",mn,Jr.name),gn.append("width",String(ln.width)),gn.append("height",String(ln.height));let xn=await fetch("/actions/photo",{method:"POST",body:gn});if(!xn.ok){alert(await xn.text());return}let Cn=await xn.text(),On=document.createElement("div");On.innerHTML=Cn;let Pn=On?.firstElementChild?.id,Gn=document.querySelector("#image-preview");if(Gn){let Xn=On.firstElementChild;Xn&&Gn.insertBefore(Xn,Gn.firstChild),vo.default.process(Gn);let zn=Gn.querySelector(`#delete-photo-${Pn}`);if(!zn)return;vo.default.process(zn),Yo.default.processNode(zn)}}catch(rn){console.error("Error uploading photo:",rn),alert("Error uploading photo")}});await Promise.all(Yr),Wr.value=""}};var $o=new Xa({layoutMode:"justified"});$o.init();go.default.onLoad(function(Gr){if(za.maybeInitForElement(Gr),Gr.id==="gallery-sort-dialog"){let Wr=Gr.querySelectorAll(".sortable");for(let Qr of Array.from(Wr))new Wo(Qr,{animation:150})}});yo.default.browserInit();var Bi=globalThis;Bi.htmx=Bi.htmx??go.default;Bi._hyperscript=Bi._hyperscript??yo.default;Bi.Grain=Bi.Grain??{};Bi.Grain.uploadPage=new Qa;Bi.Grain.profileDialog=new Wa;Bi.Grain.galleryLayout=$o;Bi.Grain.photoManip=mo; 13 + `,bn.message,bn.stack)}}}}internalDataMap=new WeakMap;getInternalData(en){var an=this.internalDataMap.get(en);return typeof an>"u"&&this.internalDataMap.set(en,an={}),an}typeCheck(en,an,pn){if(en==null&&pn)return!0;var mn=Object.prototype.toString.call(en).slice(8,-1);return mn===an}getElementScope(en){var an=en.meta&&en.meta.owner;if(an){var pn=this.getInternalData(an),mn="elementScope";en.meta.feature&&en.meta.feature.behavior&&(mn=en.meta.feature.behavior+"Scope");var wn=jn(pn,mn);return wn}else return{}}isReservedWord(en){return["meta","it","result","locals","event","target","detail","sender","body"].includes(en)}isHyperscriptContext(en){return en instanceof kn}resolveSymbol(en,an,pn){if(en==="me"||en==="my"||en==="I")return an.me;if(en==="it"||en==="its"||en==="result")return an.result;if(en==="you"||en==="your"||en==="yourself")return an.you;if(pn==="global")return Qr[en];if(pn==="element"){var mn=this.getElementScope(an);return mn[en]}else{if(pn==="local")return an.locals[en];if(an.meta&&an.meta.context){var wn=an.meta.context[en];if(typeof wn<"u"||an.meta.context.detail&&(wn=an.meta.context.detail[en],typeof wn<"u"))return wn}if(this.isHyperscriptContext(an)&&!this.isReservedWord(en))var vn=an.locals[en];else var vn=an[en];if(typeof vn<"u")return vn;var mn=this.getElementScope(an);return vn=mn[en],typeof vn<"u"?vn:Qr[en]}}setSymbol(en,an,pn,mn){if(pn==="global")Qr[en]=mn;else if(pn==="element"){var wn=this.getElementScope(an);wn[en]=mn}else if(pn==="local")an.locals[en]=mn;else if(this.isHyperscriptContext(an)&&!this.isReservedWord(en)&&typeof an.locals[en]<"u")an.locals[en]=mn;else{var wn=this.getElementScope(an),vn=wn[en];typeof vn<"u"?wn[en]=mn:this.isHyperscriptContext(an)&&!this.isReservedWord(en)?an.locals[en]=mn:an[en]=mn}}findNext(en,an){if(en)return en.resolveNext?en.resolveNext(an):en.next?en.next:this.findNext(en.parent,an)}flatGet(en,an,pn){if(en!=null){var mn=pn(en,an);if(typeof mn<"u")return mn;if(this.shouldAutoIterate(en)){var wn=[];for(var vn of en){var bn=pn(vn,an);wn.push(bn)}return wn}}}resolveProperty(en,an){return this.flatGet(en,an,(pn,mn)=>pn[mn])}resolveAttribute(en,an){return this.flatGet(en,an,(pn,mn)=>pn.getAttribute&&pn.getAttribute(mn))}resolveStyle(en,an){return this.flatGet(en,an,(pn,mn)=>pn.style&&pn.style[mn])}resolveComputedStyle(en,an){return this.flatGet(en,an,(pn,mn)=>getComputedStyle(pn).getPropertyValue(mn))}assignToNamespace(en,an,pn,mn){let wn;typeof document<"u"&&en===document.body?wn=Qr:wn=this.getHyperscriptFeatures(en);for(var vn;(vn=an.shift())!==void 0;){var bn=wn[vn];bn==null&&(bn={},wn[vn]=bn),wn=bn}wn[pn]=mn}getHyperTrace(en,an){for(var pn=[],mn=en;mn.meta.caller;)mn=mn.meta.caller;if(mn.meta.traceMap)return mn.meta.traceMap.get(an,pn)}registerHyperTrace(en,an){for(var pn=[],mn=null;en!=null;)pn.push(en),mn=en,en=en.meta.caller;if(mn.meta.traceMap==null&&(mn.meta.traceMap=new Map),!mn.meta.traceMap.get(an)){var wn={trace:pn,print:function(vn){vn=vn||console.error,vn("hypertrace /// ");for(var bn=0,hn=0;hn<pn.length;hn++)bn=Math.max(bn,pn[hn].meta.feature.displayName.length);for(var hn=0;hn<pn.length;hn++){var On=pn[hn];vn(" ->",On.meta.feature.displayName.padEnd(bn+2),"-",On.meta.owner)}}};mn.meta.traceMap.set(an,wn)}}escapeSelector(en){return en.replace(/[:&()\[\]\/]/g,function(an){return"\\"+an})}nullCheck(en,an){if(en==null)throw new Error("'"+an.sourceFor()+"' is null")}isEmpty(en){return en==null||en.length===0}doesExist(en){if(en==null)return!1;if(this.shouldAutoIterate(en)){for(let an of en)return!0;return!1}return!0}getRootNode(en){if(en&&en instanceof Node){var an=en.getRootNode();if(an instanceof Document||an instanceof ShadowRoot)return an}return document}getEventQueueFor(en,an){let pn=this.getInternalData(en);var mn=pn.eventQueues;mn==null&&(mn=new Map,pn.eventQueues=mn);var wn=mn.get(an);return wn==null&&(wn={queue:[],executing:!1},mn.set(an,wn)),wn}beepValueToConsole(en,an,pn){if(this.triggerEvent(en,"hyperscript:beep",{element:en,expression:an,value:pn})){var mn;pn?pn instanceof An?mn="ElementCollection":pn.constructor?mn=pn.constructor.name:mn="unknown":mn="object (null)";var wn=pn;mn==="String"?wn='"'+wn+'"':pn instanceof An&&(wn=Array.from(pn)),console.log("///_ BEEP! The expression ("+Yr.sourceFor.call(an).replace("beep! ","")+") evaluates to:",wn,"of type "+mn)}}hyperscriptUrl="document"in Qr&&document.currentScript?document.currentScript.src:null}function ln(){return document.cookie.split("; ").map(en=>{let an=en.split("=");return{name:an[0],value:decodeURIComponent(an[1])}})}function dn(xn){document.cookie=xn+"=;expires=Thu, 01 Jan 1970 00:00:00 GMT"}function yn(){for(let xn of ln())dn(xn.name)}let Sn=new Proxy({},{get(xn,en){if(en==="then"||en==="asyncWrapper")return null;if(en==="length")return ln().length;if(en==="clear")return dn;if(en==="clearAll")return yn;if(typeof en=="string")if(isNaN(en)){let an=document.cookie.split("; ").find(pn=>pn.startsWith(en+"="))?.split("=")[1];if(an)return decodeURIComponent(an)}else return ln()[parseInt(en)];else if(en===Symbol.iterator)return ln()[en]},set(xn,en,an){var pn=null;return typeof an=="string"?(pn=encodeURIComponent(an),pn+=";samesite=lax"):(pn=encodeURIComponent(an.value),an.expires&&(pn+=";expires="+an.maxAge),an.maxAge&&(pn+=";max-age="+an.maxAge),an.partitioned&&(pn+=";partitioned="+an.partitioned),an.path&&(pn+=";path="+an.path),an.samesite&&(pn+=";samesite="+an.path),an.secure&&(pn+=";secure="+an.path)),document.cookie=en+"="+pn,!0}});class kn{constructor(en,an,pn,mn,wn){this.meta={parser:wn.parser,lexer:wn.lexer,runtime:wn,owner:en,feature:an,iterators:{},ctx:this},this.locals={cookies:Sn},this.me=pn,this.you=void 0,this.result=void 0,this.event=mn,this.target=mn?mn.target:null,this.detail=mn?mn.detail:null,this.sender=mn&&mn.detail?mn.detail.sender:null,this.body="document"in Qr?document.body:null,wn.addFeatures(en,this)}}class An{constructor(en,an,pn){this._css=en,this.relativeToElement=an,this.escape=pn,this[Bn]=!0}get css(){return this.escape?tn.prototype.escapeSelector(this._css):this._css}get className(){return this._css.substr(1)}get id(){return this.className()}contains(en){for(let an of this)if(an.contains(en))return!0;return!1}get length(){return this.selectMatches().length}[Symbol.iterator](){return this.selectMatches()[Symbol.iterator]()}selectMatches(){return tn.prototype.getRootNode(this.relativeToElement).querySelectorAll(this.css)}}let Bn=Symbol();function jn(xn,en){var an=xn[en];if(an)return an;var pn={};return xn[en]=pn,pn}function Vn(xn){try{return JSON.parse(xn)}catch(en){return ti(en),null}}function ti(xn){console.error?console.error(xn):console.log&&console.log("ERROR: ",xn)}function si(xn,en){return new(xn.bind.apply(xn,[xn].concat(en)))}function ri(xn){xn.addLeafExpression("parenthesized",function(nn,on,Jr){if(Jr.matchOpToken("(")){var rn=Jr.clearFollows();try{var cn=nn.requireElement("expression",Jr)}finally{Jr.restoreFollows(rn)}return Jr.requireOpToken(")"),cn}}),xn.addLeafExpression("string",function(nn,on,Jr){var rn=Jr.matchTokenType("STRING");if(rn){var cn=rn.value,sn;if(rn.template){var fn=Kr.tokenize(cn,!0);sn=nn.parseStringTemplate(fn)}else sn=[];return{type:"string",token:rn,args:sn,op:function(un){for(var gn="",En=1;En<arguments.length;En++){var Tn=arguments[En];Tn!==void 0&&(gn+=Tn)}return gn},evaluate:function(un){return sn.length===0?cn:on.unifiedEval(this,un)}}}}),xn.addGrammarElement("nakedString",function(nn,on,Jr){if(Jr.hasMore()){var rn=Jr.consumeUntilWhitespace();return Jr.matchTokenType("WHITESPACE"),{type:"nakedString",tokens:rn,evaluate:function(cn){return rn.map(function(sn){return sn.value}).join("")}}}}),xn.addLeafExpression("number",function(nn,on,Jr){var rn=Jr.matchTokenType("NUMBER");if(rn){var cn=rn,sn=parseFloat(rn.value);return{type:"number",value:sn,numberToken:cn,evaluate:function(){return sn}}}}),xn.addLeafExpression("idRef",function(nn,on,Jr){var rn=Jr.matchTokenType("ID_REF");if(rn&&rn.value)if(rn.template){var cn=rn.value.substring(2),sn=Kr.tokenize(cn),fn=nn.requireElement("expression",sn);return{type:"idRefTemplate",args:[fn],op:function(un,gn){return on.getRootNode(un.me).getElementById(gn)},evaluate:function(un){return on.unifiedEval(this,un)}}}else{let un=rn.value.substring(1);return{type:"idRef",css:rn.value,value:un,evaluate:function(gn){return on.getRootNode(gn.me).getElementById(un)}}}}),xn.addLeafExpression("classRef",function(nn,on,Jr){var rn=Jr.matchTokenType("CLASS_REF");if(rn&&rn.value)if(rn.template){var cn=rn.value.substring(2),sn=Kr.tokenize(cn),fn=nn.requireElement("expression",sn);return{type:"classRefTemplate",args:[fn],op:function(un,gn){return new An("."+gn,un.me,!0)},evaluate:function(un){return on.unifiedEval(this,un)}}}else{let un=rn.value;return{type:"classRef",css:un,evaluate:function(gn){return new An(un,gn.me,!0)}}}});class en extends An{constructor(on,Jr,rn){super(on,Jr),this.templateParts=rn,this.elements=rn.filter(cn=>cn instanceof Element)}get css(){let on="",Jr=0;for(let rn of this.templateParts)rn instanceof Element?on+="[data-hs-query-id='"+Jr+++"']":on+=rn;return on}[Symbol.iterator](){this.elements.forEach((Jr,rn)=>Jr.dataset.hsQueryId=rn);let on=super[Symbol.iterator]();return this.elements.forEach(Jr=>Jr.removeAttribute("data-hs-query-id")),on}}xn.addLeafExpression("queryRef",function(nn,on,Jr){var rn=Jr.matchOpToken("<");if(rn){var cn=Jr.consumeUntil("/");Jr.requireOpToken("/"),Jr.requireOpToken(">");var sn=cn.map(function(En){return En.type==="STRING"?'"'+En.value+'"':En.value}).join(""),fn,un,gn;return/\$[^=]/.test(sn)&&(fn=!0,un=Kr.tokenize(sn,!0),gn=nn.parseStringTemplate(un)),{type:"queryRef",css:sn,args:gn,op:function(En,...Tn){return fn?new en(sn,En.me,Tn):new An(sn,En.me)},evaluate:function(En){return on.unifiedEval(this,En)}}}}),xn.addLeafExpression("attributeRef",function(nn,on,Jr){var rn=Jr.matchTokenType("ATTRIBUTE_REF");if(rn&&rn.value){var cn=rn.value;if(cn.indexOf("[")===0)var sn=cn.substring(2,cn.length-1);else var sn=cn.substring(1);var fn="["+sn+"]",un=sn.split("="),gn=un[0],En=un[1];return En&&En.indexOf('"')===0&&(En=En.substring(1,En.length-1)),{type:"attributeRef",name:gn,css:fn,value:En,op:function(Tn){var Rn=Tn.you||Tn.me;if(Rn)return Rn.getAttribute(gn)},evaluate:function(Tn){return on.unifiedEval(this,Tn)}}}}),xn.addLeafExpression("styleRef",function(nn,on,Jr){var rn=Jr.matchTokenType("STYLE_REF");if(rn&&rn.value){var cn=rn.value.substr(1);return cn.startsWith("computed-")?(cn=cn.substr(9),{type:"computedStyleRef",name:cn,op:function(sn){var fn=sn.you||sn.me;if(fn)return on.resolveComputedStyle(fn,cn)},evaluate:function(sn){return on.unifiedEval(this,sn)}}):{type:"styleRef",name:cn,op:function(sn){var fn=sn.you||sn.me;if(fn)return on.resolveStyle(fn,cn)},evaluate:function(sn){return on.unifiedEval(this,sn)}}}}),xn.addGrammarElement("objectKey",function(nn,on,Jr){var rn;if(rn=Jr.matchTokenType("STRING"))return{type:"objectKey",key:rn.value,evaluate:function(){return rn.value}};if(Jr.matchOpToken("[")){var cn=nn.parseElement("expression",Jr);return Jr.requireOpToken("]"),{type:"objectKey",expr:cn,args:[cn],op:function(fn,un){return un},evaluate:function(fn){return on.unifiedEval(this,fn)}}}else{var sn="";do rn=Jr.matchTokenType("IDENTIFIER")||Jr.matchOpToken("-"),rn&&(sn+=rn.value);while(rn);return{type:"objectKey",key:sn,evaluate:function(){return sn}}}}),xn.addLeafExpression("objectLiteral",function(nn,on,Jr){if(Jr.matchOpToken("{")){var rn=[],cn=[];if(!Jr.matchOpToken("}")){do{var sn=nn.requireElement("objectKey",Jr);Jr.requireOpToken(":");var fn=nn.requireElement("expression",Jr);cn.push(fn),rn.push(sn)}while(Jr.matchOpToken(",")&&!Jr.peekToken("}",0,"R_BRACE"));Jr.requireOpToken("}")}return{type:"objectLiteral",args:[rn,cn],op:function(un,gn,En){for(var Tn={},Rn=0;Rn<gn.length;Rn++)Tn[gn[Rn]]=En[Rn];return Tn},evaluate:function(un){return on.unifiedEval(this,un)}}}}),xn.addGrammarElement("nakedNamedArgumentList",function(nn,on,Jr){var rn=[],cn=[];if(Jr.currentToken().type==="IDENTIFIER")do{var sn=Jr.requireTokenType("IDENTIFIER");Jr.requireOpToken(":");var fn=nn.requireElement("expression",Jr);cn.push(fn),rn.push({name:sn,value:fn})}while(Jr.matchOpToken(","));return{type:"namedArgumentList",fields:rn,args:[cn],op:function(un,gn){for(var En={_namedArgList_:!0},Tn=0;Tn<gn.length;Tn++){var Rn=rn[Tn];En[Rn.name.value]=gn[Tn]}return En},evaluate:function(un){return on.unifiedEval(this,un)}}}),xn.addGrammarElement("namedArgumentList",function(nn,on,Jr){if(Jr.matchOpToken("(")){var rn=nn.requireElement("nakedNamedArgumentList",Jr);return Jr.requireOpToken(")"),rn}}),xn.addGrammarElement("symbol",function(nn,on,Jr){var rn="default";Jr.matchToken("global")?rn="global":Jr.matchToken("element")||Jr.matchToken("module")?(rn="element",Jr.matchOpToken("'")&&Jr.requireToken("s")):Jr.matchToken("local")&&(rn="local");let cn=Jr.matchOpToken(":"),sn=Jr.matchTokenType("IDENTIFIER");if(sn&&sn.value){var fn=sn.value;return cn&&(fn=":"+fn),rn==="default"&&(fn.indexOf("$")===0&&(rn="global"),fn.indexOf(":")===0&&(rn="element")),{type:"symbol",token:sn,scope:rn,name:fn,evaluate:function(un){return on.resolveSymbol(fn,un,rn)}}}}),xn.addGrammarElement("implicitMeTarget",function(nn,on,Jr){return{type:"implicitMeTarget",evaluate:function(rn){return rn.you||rn.me}}}),xn.addLeafExpression("boolean",function(nn,on,Jr){var rn=Jr.matchToken("true")||Jr.matchToken("false");if(!rn)return;let cn=rn.value==="true";return{type:"boolean",evaluate:function(sn){return cn}}}),xn.addLeafExpression("null",function(nn,on,Jr){if(Jr.matchToken("null"))return{type:"null",evaluate:function(rn){return null}}}),xn.addLeafExpression("arrayLiteral",function(nn,on,Jr){if(Jr.matchOpToken("[")){var rn=[];if(!Jr.matchOpToken("]")){do{var cn=nn.requireElement("expression",Jr);rn.push(cn)}while(Jr.matchOpToken(","));Jr.requireOpToken("]")}return{type:"arrayLiteral",values:rn,args:[rn],op:function(sn,fn){return fn},evaluate:function(sn){return on.unifiedEval(this,sn)}}}}),xn.addLeafExpression("blockLiteral",function(nn,on,Jr){if(Jr.matchOpToken("\\")){var rn=[],cn=Jr.matchTokenType("IDENTIFIER");if(cn)for(rn.push(cn);Jr.matchOpToken(",");)rn.push(Jr.requireTokenType("IDENTIFIER"));Jr.requireOpToken("-"),Jr.requireOpToken(">");var sn=nn.requireElement("expression",Jr);return{type:"blockLiteral",args:rn,expr:sn,evaluate:function(fn){var un=function(){for(var gn=0;gn<rn.length;gn++)fn.locals[rn[gn].value]=arguments[gn];return sn.evaluate(fn)};return un}}}}),xn.addIndirectExpression("propertyAccess",function(nn,on,Jr,rn){if(Jr.matchOpToken(".")){var cn=Jr.requireTokenType("IDENTIFIER"),sn={type:"propertyAccess",root:rn,prop:cn,args:[rn],op:function(fn,un){var gn=on.resolveProperty(un,cn.value);return gn},evaluate:function(fn){return on.unifiedEval(this,fn)}};return nn.parseElement("indirectExpression",Jr,sn)}}),xn.addIndirectExpression("of",function(nn,on,Jr,rn){if(Jr.matchToken("of")){for(var cn=nn.requireElement("unaryExpression",Jr),sn=null,fn=rn;fn.root;)sn=fn,fn=fn.root;fn.type!=="symbol"&&fn.type!=="attributeRef"&&fn.type!=="styleRef"&&fn.type!=="computedStyleRef"&&nn.raiseParseError(Jr,"Cannot take a property of a non-symbol: "+fn.type);var un=fn.type==="attributeRef",gn=fn.type==="styleRef"||fn.type==="computedStyleRef";if(un||gn)var En=fn;var Tn=fn.name,Rn={type:"ofExpression",prop:fn.token,root:cn,attribute:En,expression:rn,args:[cn],op:function(Hn,Cn){return un?on.resolveAttribute(Cn,Tn):gn?fn.type==="computedStyleRef"?on.resolveComputedStyle(Cn,Tn):on.resolveStyle(Cn,Tn):on.resolveProperty(Cn,Tn)},evaluate:function(Hn){return on.unifiedEval(this,Hn)}};return fn.type==="attributeRef"&&(Rn.attribute=fn),sn?(sn.root=Rn,sn.args=[Rn]):rn=Rn,nn.parseElement("indirectExpression",Jr,rn)}}),xn.addIndirectExpression("possessive",function(nn,on,Jr,rn){if(!nn.possessivesDisabled){var cn=Jr.matchOpToken("'");if(cn||rn.type==="symbol"&&(rn.name==="my"||rn.name==="its"||rn.name==="your")&&(Jr.currentToken().type==="IDENTIFIER"||Jr.currentToken().type==="ATTRIBUTE_REF"||Jr.currentToken().type==="STYLE_REF")){cn&&Jr.requireToken("s");var sn,fn,un;sn=nn.parseElement("attributeRef",Jr),sn==null&&(fn=nn.parseElement("styleRef",Jr),fn==null&&(un=Jr.requireTokenType("IDENTIFIER")));var gn={type:"possessive",root:rn,attribute:sn||fn,prop:un,args:[rn],op:function(En,Tn){if(sn)var Rn=on.resolveAttribute(Tn,sn.name);else if(fn){var Rn;fn.type==="computedStyleRef"?Rn=on.resolveComputedStyle(Tn,fn.name):Rn=on.resolveStyle(Tn,fn.name)}else var Rn=on.resolveProperty(Tn,un.value);return Rn},evaluate:function(En){return on.unifiedEval(this,En)}};return nn.parseElement("indirectExpression",Jr,gn)}}}),xn.addIndirectExpression("inExpression",function(nn,on,Jr,rn){if(Jr.matchToken("in")){var cn=nn.requireElement("unaryExpression",Jr),sn={type:"inExpression",root:rn,args:[rn,cn],op:function(fn,un,gn){var En=[];if(un.css)on.implicitLoop(gn,function(Rn){for(var Hn=Rn.querySelectorAll(un.css),Cn=0;Cn<Hn.length;Cn++)En.push(Hn[Cn])});else if(un instanceof Element){var Tn=!1;if(on.implicitLoop(gn,function(Rn){Rn.contains(un)&&(Tn=!0)}),Tn)return un}else on.implicitLoop(un,function(Rn){on.implicitLoop(gn,function(Hn){Rn===Hn&&En.push(Rn)})});return En},evaluate:function(fn){return on.unifiedEval(this,fn)}};return nn.parseElement("indirectExpression",Jr,sn)}}),xn.addIndirectExpression("asExpression",function(nn,on,Jr,rn){if(Jr.matchToken("as")){Jr.matchToken("a")||Jr.matchToken("an");var cn=nn.requireElement("dotOrColonPath",Jr).evaluate(),sn={type:"asExpression",root:rn,args:[rn],op:function(fn,un){return on.convertValue(un,cn)},evaluate:function(fn){return on.unifiedEval(this,fn)}};return nn.parseElement("indirectExpression",Jr,sn)}}),xn.addIndirectExpression("functionCall",function(nn,on,Jr,rn){if(Jr.matchOpToken("(")){var cn=[];if(!Jr.matchOpToken(")")){do cn.push(nn.requireElement("expression",Jr));while(Jr.matchOpToken(","));Jr.requireOpToken(")")}if(rn.root)var sn={type:"functionCall",root:rn,argExressions:cn,args:[rn.root,cn],op:function(fn,un,gn){on.nullCheck(un,rn.root);var En=un[rn.prop.value];return on.nullCheck(En,rn),En.hyperfunc&&gn.push(fn),En.apply(un,gn)},evaluate:function(fn){return on.unifiedEval(this,fn)}};else var sn={type:"functionCall",root:rn,argExressions:cn,args:[rn,cn],op:function(un,gn,En){on.nullCheck(gn,rn),gn.hyperfunc&&En.push(un);var Tn=gn.apply(null,En);return Tn},evaluate:function(un){return on.unifiedEval(this,un)}};return nn.parseElement("indirectExpression",Jr,sn)}}),xn.addIndirectExpression("attributeRefAccess",function(nn,on,Jr,rn){var cn=nn.parseElement("attributeRef",Jr);if(cn){var sn={type:"attributeRefAccess",root:rn,attribute:cn,args:[rn],op:function(fn,un){var gn=on.resolveAttribute(un,cn.name);return gn},evaluate:function(fn){return on.unifiedEval(this,fn)}};return sn}}),xn.addIndirectExpression("arrayIndex",function(nn,on,Jr,rn){if(Jr.matchOpToken("[")){var cn=!1,sn=!1,fn=null,un=null;if(Jr.matchOpToken(".."))cn=!0,fn=nn.requireElement("expression",Jr);else if(fn=nn.requireElement("expression",Jr),Jr.matchOpToken("..")){sn=!0;var gn=Jr.currentToken();gn.type!=="R_BRACKET"&&(un=nn.parseElement("expression",Jr))}Jr.requireOpToken("]");var En={type:"arrayIndex",root:rn,prop:fn,firstIndex:fn,secondIndex:un,args:[rn,fn,un],op:function(Tn,Rn,Hn,Cn){return Rn==null?null:cn?(Hn<0&&(Hn=Rn.length+Hn),Rn.slice(0,Hn+1)):sn?Cn!=null?(Cn<0&&(Cn=Rn.length+Cn),Rn.slice(Hn,Cn+1)):Rn.slice(Hn):Rn[Hn]},evaluate:function(Tn){return on.unifiedEval(this,Tn)}};return nn.parseElement("indirectExpression",Jr,En)}});var an=["em","ex","cap","ch","ic","rem","lh","rlh","vw","vh","vi","vb","vmin","vmax","cm","mm","Q","pc","pt","px"];xn.addGrammarElement("postfixExpression",function(nn,on,Jr){var rn=nn.parseElement("negativeNumber",Jr);let cn=Jr.matchAnyToken.apply(Jr,an)||Jr.matchOpToken("%");if(cn)return{type:"stringPostfix",postfix:cn.value,args:[rn],op:function(gn,En){return""+En+cn.value},evaluate:function(gn){return on.unifiedEval(this,gn)}};var sn=null;if(Jr.matchToken("s")||Jr.matchToken("seconds")?sn=1e3:(Jr.matchToken("ms")||Jr.matchToken("milliseconds"))&&(sn=1),sn)return{type:"timeExpression",time:rn,factor:sn,args:[rn],op:function(gn,En){return En*sn},evaluate:function(gn){return on.unifiedEval(this,gn)}};if(Jr.matchOpToken(":")){var fn=Jr.requireTokenType("IDENTIFIER");if(!fn.value)return;var un=!Jr.matchOpToken("!");return{type:"typeCheck",typeName:fn,nullOk:un,args:[rn],op:function(gn,En){var Tn=on.typeCheck(En,this.typeName.value,un);if(Tn)return En;throw new Error("Typecheck failed! Expected: "+fn.value)},evaluate:function(gn){return on.unifiedEval(this,gn)}}}else return rn}),xn.addGrammarElement("logicalNot",function(nn,on,Jr){if(Jr.matchToken("not")){var rn=nn.requireElement("unaryExpression",Jr);return{type:"logicalNot",root:rn,args:[rn],op:function(cn,sn){return!sn},evaluate:function(cn){return on.unifiedEval(this,cn)}}}}),xn.addGrammarElement("noExpression",function(nn,on,Jr){if(Jr.matchToken("no")){var rn=nn.requireElement("unaryExpression",Jr);return{type:"noExpression",root:rn,args:[rn],op:function(cn,sn){return on.isEmpty(sn)},evaluate:function(cn){return on.unifiedEval(this,cn)}}}}),xn.addLeafExpression("some",function(nn,on,Jr){if(Jr.matchToken("some")){var rn=nn.requireElement("expression",Jr);return{type:"noExpression",root:rn,args:[rn],op:function(cn,sn){return!on.isEmpty(sn)},evaluate(cn){return on.unifiedEval(this,cn)}}}}),xn.addGrammarElement("negativeNumber",function(nn,on,Jr){if(Jr.matchOpToken("-")){var rn=nn.requireElement("negativeNumber",Jr);return{type:"negativeNumber",root:rn,args:[rn],op:function(cn,sn){return-1*sn},evaluate:function(cn){return on.unifiedEval(this,cn)}}}else return nn.requireElement("primaryExpression",Jr)}),xn.addGrammarElement("unaryExpression",function(nn,on,Jr){return Jr.matchToken("the"),nn.parseAnyOf(["beepExpression","logicalNot","relativePositionalExpression","positionalExpression","noExpression","postfixExpression"],Jr)}),xn.addGrammarElement("beepExpression",function(nn,on,Jr){if(Jr.matchToken("beep!")){var rn=nn.parseElement("unaryExpression",Jr);if(rn){rn.booped=!0;var cn=rn.evaluate;return rn.evaluate=function(sn){let fn=cn.apply(rn,arguments),un=sn.me;return on.beepValueToConsole(un,rn,fn),fn},rn}}});var pn=function(nn,on,Jr,rn){for(var cn=on.querySelectorAll(Jr),sn=0;sn<cn.length;sn++){var fn=cn[sn];if(fn.compareDocumentPosition(nn)===Node.DOCUMENT_POSITION_PRECEDING)return fn}if(rn)return cn[0]},mn=function(nn,on,Jr,rn){for(var cn=on.querySelectorAll(Jr),sn=cn.length-1;sn>=0;sn--){var fn=cn[sn];if(fn.compareDocumentPosition(nn)===Node.DOCUMENT_POSITION_FOLLOWING)return fn}if(rn)return cn[cn.length-1]},wn=function(nn,on,Jr,rn){var cn=[];tn.prototype.forEach(on,function(gn){(gn.matches(Jr)||gn===nn)&&cn.push(gn)});for(var sn=0;sn<cn.length-1;sn++){var fn=cn[sn];if(fn===nn)return cn[sn+1]}if(rn){var un=cn[0];if(un&&un.matches(Jr))return un}},vn=function(nn,on,Jr,rn){return wn(nn,Array.from(on).reverse(),Jr,rn)};xn.addGrammarElement("relativePositionalExpression",function(nn,on,Jr){var rn=Jr.matchAnyToken("next","previous");if(rn){var cn=rn.value==="next",sn=nn.parseElement("expression",Jr);if(Jr.matchToken("from")){Jr.pushFollow("in");try{var fn=nn.requireElement("unaryExpression",Jr)}finally{Jr.popFollow()}}else var fn=nn.requireElement("implicitMeTarget",Jr);var un=!1,gn;if(Jr.matchToken("in")){un=!0;var En=nn.requireElement("unaryExpression",Jr)}else Jr.matchToken("within")?gn=nn.requireElement("unaryExpression",Jr):gn=document.body;var Tn=!1;return Jr.matchToken("with")&&(Jr.requireToken("wrapping"),Tn=!0),{type:"relativePositionalExpression",from:fn,forwardSearch:cn,inSearch:un,wrapping:Tn,inElt:En,withinElt:gn,operator:rn.value,args:[sn,fn,En,gn],op:function(Rn,Hn,Cn,In,_n){var Un=Hn.css;if(Un==null)throw"Expected a CSS value to be returned by "+Yr.sourceFor.apply(sn);if(un){if(In)return cn?wn(Cn,In,Un,Tn):vn(Cn,In,Un,Tn)}else if(_n)return cn?pn(Cn,_n,Un,Tn):mn(Cn,_n,Un,Tn)},evaluate:function(Rn){return on.unifiedEval(this,Rn)}}}}),xn.addGrammarElement("positionalExpression",function(nn,on,Jr){var rn=Jr.matchAnyToken("first","last","random");if(!rn)return;Jr.matchAnyToken("in","from","of");var cn=nn.requireElement("unaryExpression",Jr);let sn=rn.value;return{type:"positionalExpression",rhs:cn,operator:rn.value,args:[cn],op:function(fn,un){if(un&&!Array.isArray(un)&&(un.children?un=un.children:un=Array.from(un)),un){if(sn==="first")return un[0];if(sn==="last")return un[un.length-1];if(sn==="random")return un[Math.floor(Math.random()*un.length)]}},evaluate:function(fn){return on.unifiedEval(this,fn)}}}),xn.addGrammarElement("mathOperator",function(nn,on,Jr){var rn=nn.parseElement("unaryExpression",Jr),cn,sn=null;for(cn=Jr.matchAnyOpToken("+","-","*","/")||Jr.matchToken("mod");cn;){sn=sn||cn;var fn=cn.value;sn.value!==fn&&nn.raiseParseError(Jr,"You must parenthesize math operations with different operators");var un=nn.parseElement("unaryExpression",Jr);rn={type:"mathOperator",lhs:rn,rhs:un,operator:fn,args:[rn,un],op:function(gn,En,Tn){if(fn==="+")return En+Tn;if(fn==="-")return En-Tn;if(fn==="*")return En*Tn;if(fn==="/")return En/Tn;if(fn==="mod")return En%Tn},evaluate:function(gn){return on.unifiedEval(this,gn)}},cn=Jr.matchAnyOpToken("+","-","*","/")||Jr.matchToken("mod")}return rn}),xn.addGrammarElement("mathExpression",function(nn,on,Jr){return nn.parseAnyOf(["mathOperator","unaryExpression"],Jr)});function bn(nn,on,Jr){if(on.contains)return on.contains(Jr);if(on.includes)return on.includes(Jr);throw Error("The value of "+nn.sourceFor()+" does not have a contains or includes method on it")}function hn(nn,on,Jr){if(on.match)return!!on.match(Jr);if(on.matches)return on.matches(Jr);throw Error("The value of "+nn.sourceFor()+" does not have a match or matches method on it")}xn.addGrammarElement("comparisonOperator",function(nn,on,Jr){var rn=nn.parseElement("mathExpression",Jr),cn=Jr.matchAnyOpToken("<",">","<=",">=","==","===","!=","!=="),sn=cn?cn.value:null,fn=!0,un=!1;if(sn==null&&(Jr.matchToken("is")||Jr.matchToken("am")?Jr.matchToken("not")?Jr.matchToken("in")?sn="not in":Jr.matchToken("a")||Jr.matchToken("an")?(sn="not a",un=!0):Jr.matchToken("empty")?(sn="not empty",fn=!1):(Jr.matchToken("really")?sn="!==":sn="!=",Jr.matchToken("equal")&&Jr.matchToken("to")):Jr.matchToken("in")?sn="in":Jr.matchToken("a")||Jr.matchToken("an")?(sn="a",un=!0):Jr.matchToken("empty")?(sn="empty",fn=!1):Jr.matchToken("less")?(Jr.requireToken("than"),Jr.matchToken("or")?(Jr.requireToken("equal"),Jr.requireToken("to"),sn="<="):sn="<"):Jr.matchToken("greater")?(Jr.requireToken("than"),Jr.matchToken("or")?(Jr.requireToken("equal"),Jr.requireToken("to"),sn=">="):sn=">"):(Jr.matchToken("really")?sn="===":sn="==",Jr.matchToken("equal")&&Jr.matchToken("to")):Jr.matchToken("equals")?sn="==":Jr.matchToken("really")?(Jr.requireToken("equals"),sn="==="):Jr.matchToken("exist")||Jr.matchToken("exists")?(sn="exist",fn=!1):Jr.matchToken("matches")||Jr.matchToken("match")?sn="match":Jr.matchToken("contains")||Jr.matchToken("contain")?sn="contain":Jr.matchToken("includes")||Jr.matchToken("include")?sn="include":(Jr.matchToken("do")||Jr.matchToken("does"))&&(Jr.requireToken("not"),Jr.matchToken("matches")||Jr.matchToken("match")?sn="not match":Jr.matchToken("contains")||Jr.matchToken("contain")?sn="not contain":Jr.matchToken("exist")||Jr.matchToken("exist")?(sn="not exist",fn=!1):Jr.matchToken("include")?sn="not include":nn.raiseParseError(Jr,"Expected matches or contains"))),sn){var gn,En,Tn;un?(gn=Jr.requireTokenType("IDENTIFIER"),En=!Jr.matchOpToken("!")):fn&&(Tn=nn.requireElement("mathExpression",Jr),(sn==="match"||sn==="not match")&&(Tn=Tn.css?Tn.css:Tn));var Rn=rn;rn={type:"comparisonOperator",operator:sn,typeName:gn,nullOk:En,lhs:rn,rhs:Tn,args:[rn,Tn],op:function(Hn,Cn,In){if(sn==="==")return Cn==In;if(sn==="!=")return Cn!=In;if(sn==="===")return Cn===In;if(sn==="!==")return Cn!==In;if(sn==="match")return Cn!=null&&hn(Rn,Cn,In);if(sn==="not match")return Cn==null||!hn(Rn,Cn,In);if(sn==="in")return In!=null&&bn(Tn,In,Cn);if(sn==="not in")return In==null||!bn(Tn,In,Cn);if(sn==="contain")return Cn!=null&&bn(Rn,Cn,In);if(sn==="not contain")return Cn==null||!bn(Rn,Cn,In);if(sn==="include")return Cn!=null&&bn(Rn,Cn,In);if(sn==="not include")return Cn==null||!bn(Rn,Cn,In);if(sn==="===")return Cn===In;if(sn==="!==")return Cn!==In;if(sn==="<")return Cn<In;if(sn===">")return Cn>In;if(sn==="<=")return Cn<=In;if(sn===">=")return Cn>=In;if(sn==="empty")return on.isEmpty(Cn);if(sn==="not empty")return!on.isEmpty(Cn);if(sn==="exist")return on.doesExist(Cn);if(sn==="not exist")return!on.doesExist(Cn);if(sn==="a")return on.typeCheck(Cn,gn.value,En);if(sn==="not a")return!on.typeCheck(Cn,gn.value,En);throw"Unknown comparison : "+sn},evaluate:function(Hn){return on.unifiedEval(this,Hn)}}}return rn}),xn.addGrammarElement("comparisonExpression",function(nn,on,Jr){return nn.parseAnyOf(["comparisonOperator","mathExpression"],Jr)}),xn.addGrammarElement("logicalOperator",function(nn,on,Jr){var rn=nn.parseElement("comparisonExpression",Jr),cn,sn=null;for(cn=Jr.matchToken("and")||Jr.matchToken("or");cn;){sn=sn||cn,sn.value!==cn.value&&nn.raiseParseError(Jr,"You must parenthesize logical operations with different operators");var fn=nn.requireElement("comparisonExpression",Jr);let un=cn.value;rn={type:"logicalOperator",operator:un,lhs:rn,rhs:fn,args:[rn,fn],op:function(gn,En,Tn){return un==="and"?En&&Tn:En||Tn},evaluate:function(gn){return on.unifiedEval(this,gn,un==="or")}},cn=Jr.matchToken("and")||Jr.matchToken("or")}return rn}),xn.addGrammarElement("logicalExpression",function(nn,on,Jr){return nn.parseAnyOf(["logicalOperator","mathExpression"],Jr)}),xn.addGrammarElement("asyncExpression",function(nn,on,Jr){if(Jr.matchToken("async")){var rn=nn.requireElement("logicalExpression",Jr),cn={type:"asyncExpression",value:rn,evaluate:function(sn){return{asyncWrapper:!0,value:this.value.evaluate(sn)}}};return cn}else return nn.parseElement("logicalExpression",Jr)}),xn.addGrammarElement("expression",function(nn,on,Jr){return Jr.matchToken("the"),nn.parseElement("asyncExpression",Jr)}),xn.addGrammarElement("assignableExpression",function(nn,on,Jr){Jr.matchToken("the");var rn=nn.parseElement("primaryExpression",Jr);return rn&&(rn.type==="symbol"||rn.type==="ofExpression"||rn.type==="propertyAccess"||rn.type==="attributeRefAccess"||rn.type==="attributeRef"||rn.type==="styleRef"||rn.type==="arrayIndex"||rn.type==="possessive")||nn.raiseParseError(Jr,"A target expression must be writable. The expression type '"+(rn&&rn.type)+"' is not."),rn}),xn.addGrammarElement("hyperscript",function(nn,on,Jr){var rn=[];if(Jr.hasMore())for(;nn.featureStart(Jr.currentToken())||Jr.currentToken().value==="(";){var cn=nn.requireElement("feature",Jr);rn.push(cn),Jr.matchToken("end")}return{type:"hyperscript",features:rn,apply:function(sn,fn,un){for(let gn of rn)gn.install(sn,fn,un)}}});var On=function(nn){var on=[];if(nn.token(0).value==="("&&(nn.token(1).value===")"||nn.token(2).value===","||nn.token(2).value===")")){nn.matchOpToken("(");do on.push(nn.requireTokenType("IDENTIFIER"));while(nn.matchOpToken(","));nn.requireOpToken(")")}return on};xn.addFeature("on",function(nn,on,Jr){if(Jr.matchToken("on")){var rn=!1;Jr.matchToken("every")&&(rn=!0);var cn=[],sn=null;do{var fn=nn.requireElement("eventName",Jr,"Expected event name"),un=fn.evaluate();sn?sn=sn+" or "+un:sn="on "+un;var gn=On(Jr),En=null;Jr.matchOpToken("[")&&(En=nn.requireElement("expression",Jr),Jr.requireOpToken("]"));var Tn,Rn,Hn;if(Jr.currentToken().type==="NUMBER"){var Cn=Jr.consumeToken();if(!Cn.value)return;if(Tn=parseInt(Cn.value),Jr.matchToken("to")){var In=Jr.consumeToken();if(!In.value)return;Rn=parseInt(In.value)}else Jr.matchToken("and")&&(Hn=!0,Jr.requireToken("on"))}var _n,Un;if(un==="intersection"){if(_n={},Jr.matchToken("with")&&(_n.with=nn.requireElement("expression",Jr).evaluate()),Jr.matchToken("having"))do Jr.matchToken("margin")?_n.rootMargin=nn.requireElement("stringLike",Jr).evaluate():Jr.matchToken("threshold")?_n.threshold=nn.requireElement("expression",Jr).evaluate():nn.raiseParseError(Jr,"Unknown intersection config specification");while(Jr.matchToken("and"))}else if(un==="mutation")if(Un={},Jr.matchToken("of"))do if(Jr.matchToken("anything"))Un.attributes=!0,Un.subtree=!0,Un.characterData=!0,Un.childList=!0;else if(Jr.matchToken("childList"))Un.childList=!0;else if(Jr.matchToken("attributes"))Un.attributes=!0,Un.attributeOldValue=!0;else if(Jr.matchToken("subtree"))Un.subtree=!0;else if(Jr.matchToken("characterData"))Un.characterData=!0,Un.characterDataOldValue=!0;else if(Jr.currentToken().type==="ATTRIBUTE_REF"){var ii=Jr.consumeToken();Un.attributeFilter==null&&(Un.attributeFilter=[]),ii.value.indexOf("@")==0?Un.attributeFilter.push(ii.value.substring(1)):nn.raiseParseError(Jr,"Only shorthand attribute references are allowed here")}else nn.raiseParseError(Jr,"Unknown mutation config specification");while(Jr.matchToken("or"));else Un.attributes=!0,Un.characterData=!0,Un.childList=!0;var ai=null,Ri=!1;if(Jr.matchToken("from"))if(Jr.matchToken("elsewhere"))Ri=!0;else{Jr.pushFollow("or");try{ai=nn.requireElement("expression",Jr)}finally{Jr.popFollow()}ai||nn.raiseParseError(Jr,'Expected either target value or "elsewhere".')}if(ai===null&&Ri===!1&&Jr.matchToken("elsewhere")&&(Ri=!0),Jr.matchToken("in"))var Bi=nn.parseElement("unaryExpression",Jr);if(Jr.matchToken("debounced")){Jr.requireToken("at");var ui=nn.requireElement("unaryExpression",Jr),ki=ui.evaluate({})}else if(Jr.matchToken("throttled")){Jr.requireToken("at");var ui=nn.requireElement("unaryExpression",Jr),Hi=ui.evaluate({})}cn.push({execCount:0,every:rn,on:un,args:gn,filter:En,from:ai,inExpr:Bi,elsewhere:Ri,startCount:Tn,endCount:Rn,unbounded:Hn,debounceTime:ki,throttleTime:Hi,mutationSpec:Un,intersectionSpec:_n,debounced:void 0,lastExec:void 0})}while(Jr.matchToken("or"));var Ci=!0;if(!rn&&Jr.matchToken("queue"))if(Jr.matchToken("all"))var Ni=!0,Ci=!1;else if(Jr.matchToken("first"))var Ca=!0;else if(Jr.matchToken("none"))var _a=!0;else Jr.requireToken("last");var co=nn.requireElement("commandList",Jr);nn.ensureTerminated(co);var ts,fo;if(Jr.matchToken("catch")&&(ts=Jr.requireTokenType("IDENTIFIER").value,fo=nn.requireElement("commandList",Jr),nn.ensureTerminated(fo)),Jr.matchToken("finally")){var Qs=nn.requireElement("commandList",Jr);nn.ensureTerminated(Qs)}var _i={displayName:sn,events:cn,start:co,every:rn,execCount:0,errorHandler:fo,errorSymbol:ts,execute:function(xi){let aa=on.getEventQueueFor(xi.me,_i);if(aa.executing&&rn===!1){if(_a||Ca&&aa.queue.length>0)return;Ci&&(aa.queue.length=0),aa.queue.push(xi);return}_i.execCount++,aa.executing=!0,xi.meta.onHalt=function(){aa.executing=!1;var Li=aa.queue.shift();Li&&setTimeout(function(){_i.execute(Li)},1)},xi.meta.reject=function(Li){console.error(Li.message?Li.message:Li);var $n=on.getHyperTrace(xi,Li);$n&&$n.print(),on.triggerEvent(xi.me,"exception",{error:Li})},co.execute(xi)},install:function(xi,aa){for(let $n of _i.events){var Li;$n.elsewhere?Li=[document]:$n.from?Li=$n.from.evaluate(on.makeContext(xi,_i,xi,null)):Li=[xi],on.implicitLoop(Li,function(ji){var Ia=$n.on;if(ji==null){console.warn("'%s' feature ignored because target does not exists:",sn,xi);return}if($n.mutationSpec&&(Ia="hyperscript:mutation",new MutationObserver(function(pa,ci){_i.executing||on.triggerEvent(ji,Ia,{mutationList:pa,observer:ci})}).observe(ji,$n.mutationSpec)),$n.intersectionSpec){Ia="hyperscript:intersection";let ja=new IntersectionObserver(function(pa){for(let ho of pa){var ci={observer:ja};ci=Object.assign(ci,ho),ci.intersecting=ho.isIntersecting,on.triggerEvent(ji,Ia,ci)}},$n.intersectionSpec);ja.observe(ji)}var Yl=ji.addEventListener||ji.on;Yl.call(ji,Ia,function ja(pa){if(typeof Node<"u"&&xi instanceof Node&&ji!==xi&&!xi.isConnected){ji.removeEventListener(Ia,ja);return}var ci=on.makeContext(xi,_i,xi,pa);if(!($n.elsewhere&&xi.contains(pa.target))){$n.from&&(ci.result=ji);for(let po of $n.args){let Ks=ci.event[po.value];Ks!==void 0?ci.locals[po.value]=Ks:"detail"in ci.event&&(ci.locals[po.value]=ci.event.detail[po.value])}if(ci.meta.errorHandler=fo,ci.meta.errorSymbol=ts,ci.meta.finallyHandler=Qs,$n.filter){var ho=ci.meta.context;ci.meta.context=ci.event;try{var $l=$n.filter.evaluate(ci);if(!$l)return}finally{ci.meta.context=ho}}if($n.inExpr){for(var Oa=pa.target;;)if(Oa.matches&&Oa.matches($n.inExpr.css)){ci.result=Oa;break}else if(Oa=Oa.parentElement,Oa==null)return}if($n.execCount++,$n.startCount){if($n.endCount){if($n.execCount<$n.startCount||$n.execCount>$n.endCount)return}else if($n.unbounded){if($n.execCount<$n.startCount)return}else if($n.execCount!==$n.startCount)return}if($n.debounceTime){$n.debounced&&clearTimeout($n.debounced),$n.debounced=setTimeout(function(){_i.execute(ci)},$n.debounceTime);return}if($n.throttleTime){if($n.lastExec&&Date.now()<$n.lastExec+$n.throttleTime)return;$n.lastExec=Date.now()}_i.execute(ci)}})})}}};return nn.setParent(co,_i),_i}}),xn.addFeature("def",function(nn,on,Jr){if(Jr.matchToken("def")){var rn=nn.requireElement("dotOrColonPath",Jr),cn=rn.evaluate(),sn=cn.split("."),fn=sn.pop(),un=[];if(Jr.matchOpToken("(")&&!Jr.matchOpToken(")")){do un.push(Jr.requireTokenType("IDENTIFIER"));while(Jr.matchOpToken(","));Jr.requireOpToken(")")}var gn=nn.requireElement("commandList",Jr),En,Tn;if(Jr.matchToken("catch")&&(En=Jr.requireTokenType("IDENTIFIER").value,Tn=nn.parseElement("commandList",Jr)),Jr.matchToken("finally")){var Rn=nn.requireElement("commandList",Jr);nn.ensureTerminated(Rn)}var Hn={displayName:fn+"("+un.map(function(Cn){return Cn.value}).join(", ")+")",name:fn,args:un,start:gn,errorHandler:Tn,errorSymbol:En,finallyHandler:Rn,install:function(Cn,In){var _n=function(){var Un=on.makeContext(In,Hn,Cn,null);Un.meta.errorHandler=Tn,Un.meta.errorSymbol=En,Un.meta.finallyHandler=Rn;for(var ii=0;ii<un.length;ii++){var ai=un[ii],Ri=arguments[ii];ai&&(Un.locals[ai.value]=Ri)}Un.meta.caller=arguments[un.length],Un.meta.caller&&(Un.meta.callingCommand=Un.meta.caller.meta.command);var Bi,ui=null,ki=new Promise(function(Hi,Ci){Bi=Hi,ui=Ci});return gn.execute(Un),Un.meta.returned?Un.meta.returnValue:(Un.meta.resolve=Bi,Un.meta.reject=ui,ki)};_n.hyperfunc=!0,_n.hypername=cn,on.assignToNamespace(Cn,sn,fn,_n)}};return nn.ensureTerminated(gn),Tn&&nn.ensureTerminated(Tn),nn.setParent(gn,Hn),Hn}}),xn.addFeature("set",function(nn,on,Jr){let rn=nn.parseElement("setCommand",Jr);if(rn){rn.target.scope!=="element"&&nn.raiseParseError(Jr,"variables declared at the feature level must be element scoped.");let cn={start:rn,install:function(sn,fn){rn&&rn.execute(on.makeContext(sn,cn,sn,null))}};return nn.ensureTerminated(rn),cn}}),xn.addFeature("init",function(nn,on,Jr){if(Jr.matchToken("init")){var rn=Jr.matchToken("immediately"),cn=nn.requireElement("commandList",Jr),sn={start:cn,install:function(fn,un){let gn=function(){cn&&cn.execute(on.makeContext(fn,sn,fn,null))};rn?gn():setTimeout(gn,0)}};return nn.ensureTerminated(cn),nn.setParent(cn,sn),sn}}),xn.addFeature("worker",function(nn,on,Jr){if(Jr.matchToken("worker")){nn.raiseParseError(Jr,"In order to use the 'worker' feature, include the _hyperscript worker plugin. See https://hyperscript.org/features/worker/ for more info.");return}}),xn.addFeature("behavior",function(nn,on,Jr){if(Jr.matchToken("behavior")){var rn=nn.requireElement("dotOrColonPath",Jr).evaluate(),cn=rn.split("."),sn=cn.pop(),fn=[];if(Jr.matchOpToken("(")&&!Jr.matchOpToken(")")){do fn.push(Jr.requireTokenType("IDENTIFIER").value);while(Jr.matchOpToken(","));Jr.requireOpToken(")")}for(var un=nn.requireElement("hyperscript",Jr),gn=0;gn<un.features.length;gn++){var En=un.features[gn];En.behavior=rn}return{install:function(Tn,Rn){on.assignToNamespace(Qr.document&&Qr.document.body,cn,sn,function(Hn,Cn,In){for(var _n=on.getInternalData(Hn),Un=jn(_n,rn+"Scope"),ii=0;ii<fn.length;ii++)Un[fn[ii]]=In[fn[ii]];un.apply(Hn,Cn)})}}}}),xn.addFeature("install",function(nn,on,Jr){if(Jr.matchToken("install")){var rn=nn.requireElement("dotOrColonPath",Jr).evaluate(),cn=rn.split("."),sn=nn.parseElement("namedArgumentList",Jr),fn;return fn={install:function(un,gn){on.unifiedEval({args:[sn],op:function(En,Tn){for(var Rn=Qr,Hn=0;Hn<cn.length;Hn++)if(Rn=Rn[cn[Hn]],typeof Rn!="object"&&typeof Rn!="function")throw new Error("No such behavior defined as "+rn);if(!(Rn instanceof Function))throw new Error(rn+" is not a behavior");Rn(un,gn,Tn)}},on.makeContext(un,fn,un,null))}}}}),xn.addGrammarElement("jsBody",function(nn,on,Jr){for(var rn=Jr.currentToken().start,cn=Jr.currentToken(),sn=[],fn="",un=!1;Jr.hasMore();){cn=Jr.consumeToken();var gn=Jr.token(0,!0);if(gn.type==="IDENTIFIER"&&gn.value==="end")break;un?cn.type==="IDENTIFIER"||cn.type==="NUMBER"?fn+=cn.value:(fn!==""&&sn.push(fn),fn="",un=!1):cn.type==="IDENTIFIER"&&cn.value==="function"&&(un=!0)}var En=cn.end+1;return{type:"jsBody",exposedFunctionNames:sn,jsSource:Jr.source.substring(rn,En)}}),xn.addFeature("js",function(nn,on,Jr){if(Jr.matchToken("js")){var rn=nn.requireElement("jsBody",Jr),cn=rn.jsSource+` 14 + return { `+rn.exposedFunctionNames.map(function(fn){return fn+":"+fn}).join(",")+" } ",sn=new Function(cn);return{jsSource:cn,function:sn,exposedFunctionNames:rn.exposedFunctionNames,install:function(){Object.assign(Qr,sn())}}}}),xn.addCommand("js",function(nn,on,Jr){if(Jr.matchToken("js")){var rn=[];if(Jr.matchOpToken("(")&&!Jr.matchOpToken(")")){do{var cn=Jr.requireTokenType("IDENTIFIER");rn.push(cn.value)}while(Jr.matchOpToken(","));Jr.requireOpToken(")")}var sn=nn.requireElement("jsBody",Jr);Jr.matchToken("end");var fn=si(Function,rn.concat([sn.jsSource])),un={jsSource:sn.jsSource,function:fn,inputs:rn,op:function(gn){var En=[];rn.forEach(function(Rn){En.push(on.resolveSymbol(Rn,gn,"default"))});var Tn=fn.apply(Qr,En);return Tn&&typeof Tn.then=="function"?new Promise(function(Rn){Tn.then(function(Hn){gn.result=Hn,Rn(on.findNext(this,gn))})}):(gn.result=Tn,on.findNext(this,gn))}};return un}}),xn.addCommand("async",function(nn,on,Jr){if(Jr.matchToken("async")){if(Jr.matchToken("do")){for(var rn=nn.requireElement("commandList",Jr),cn=rn;cn.next;)cn=cn.next;cn.next=on.HALT,Jr.requireToken("end")}else var rn=nn.requireElement("command",Jr);var sn={body:rn,op:function(fn){return setTimeout(function(){rn.execute(fn)}),on.findNext(this,fn)}};return nn.setParent(rn,sn),sn}}),xn.addCommand("tell",function(nn,on,Jr){var rn=Jr.currentToken();if(Jr.matchToken("tell")){var cn=nn.requireElement("expression",Jr),sn=nn.requireElement("commandList",Jr);Jr.hasMore()&&!nn.featureStart(Jr.currentToken())&&Jr.requireToken("end");var fn="tell_"+rn.start,un={value:cn,body:sn,args:[cn],resolveNext:function(gn){var En=gn.meta.iterators[fn];return En.index<En.value.length?(gn.you=En.value[En.index++],sn):(gn.you=En.originalYou,this.next?this.next:on.findNext(this.parent,gn))},op:function(gn,En){return En==null?En=[]:Array.isArray(En)||En instanceof NodeList||(En=[En]),gn.meta.iterators[fn]={originalYou:gn.you,index:0,value:En},this.resolveNext(gn)}};return nn.setParent(sn,un),un}}),xn.addCommand("wait",function(nn,on,Jr){if(Jr.matchToken("wait")){var rn;if(Jr.matchToken("for")){Jr.matchToken("a");var cn=[];do{var sn=Jr.token(0);sn.type==="NUMBER"||sn.type==="L_PAREN"?cn.push({time:nn.requireElement("expression",Jr).evaluate()}):cn.push({name:nn.requireElement("dotOrColonPath",Jr,"Expected event name").evaluate(),args:On(Jr)})}while(Jr.matchToken("or"));if(Jr.matchToken("from"))var fn=nn.requireElement("expression",Jr);return rn={event:cn,on:fn,args:[fn],op:function(gn,En){var Tn=En||gn.me;if(!(Tn instanceof EventTarget))throw new Error("Not a valid event target: "+this.on.sourceFor());return new Promise(Rn=>{var Hn=!1;for(let In of cn){var Cn=_n=>{if(gn.result=_n,In.args)for(let Un of In.args)gn.locals[Un.value]=_n[Un.value]||(_n.detail?_n.detail[Un.value]:null);Hn||(Hn=!0,Rn(on.findNext(this,gn)))};In.name?Tn.addEventListener(In.name,Cn,{once:!0}):In.time!=null&&setTimeout(Cn,In.time,In.time)}})}},rn}else{var un;return Jr.matchToken("a")?(Jr.requireToken("tick"),un=0):un=nn.requireElement("expression",Jr),rn={type:"waitCmd",time:un,args:[un],op:function(gn,En){return new Promise(Tn=>{setTimeout(()=>{Tn(on.findNext(this,gn))},En)})},execute:function(gn){return on.unifiedExec(this,gn)}},rn}}}),xn.addGrammarElement("dotOrColonPath",function(nn,on,Jr){var rn=Jr.matchTokenType("IDENTIFIER");if(rn){var cn=[rn.value],sn=Jr.matchOpToken(".")||Jr.matchOpToken(":");if(sn)do cn.push(Jr.requireTokenType("IDENTIFIER","NUMBER").value);while(Jr.matchOpToken(sn.value));return{type:"dotOrColonPath",path:cn,evaluate:function(){return cn.join(sn?sn.value:"")}}}}),xn.addGrammarElement("eventName",function(nn,on,Jr){var rn;return(rn=Jr.matchTokenType("STRING"))?{evaluate:function(){return rn.value}}:nn.parseElement("dotOrColonPath",Jr)});function Pn(nn,on,Jr,rn){var cn=on.requireElement("eventName",rn),sn=on.parseElement("namedArgumentList",rn);if(nn==="send"&&rn.matchToken("to")||nn==="trigger"&&rn.matchToken("on"))var fn=on.requireElement("expression",rn);else var fn=on.requireElement("implicitMeTarget",rn);var un={eventName:cn,details:sn,to:fn,args:[fn,cn,sn],op:function(gn,En,Tn,Rn){return Jr.nullCheck(En,fn),Jr.implicitLoop(En,function(Hn){Jr.triggerEvent(Hn,Tn,Rn,gn.me)}),Jr.findNext(un,gn)}};return un}xn.addCommand("trigger",function(nn,on,Jr){if(Jr.matchToken("trigger"))return Pn("trigger",nn,on,Jr)}),xn.addCommand("send",function(nn,on,Jr){if(Jr.matchToken("send"))return Pn("send",nn,on,Jr)});var Nn=function(nn,on,Jr,rn){if(rn)if(nn.commandBoundary(Jr.currentToken()))nn.raiseParseError(Jr,"'return' commands must return a value. If you do not wish to return a value, use 'exit' instead.");else var cn=nn.requireElement("expression",Jr);var sn={value:cn,args:[cn],op:function(fn,un){var gn=fn.meta.resolve;return fn.meta.returned=!0,fn.meta.returnValue=un,gn&&(un?gn(un):gn()),on.HALT}};return sn};xn.addCommand("return",function(nn,on,Jr){if(Jr.matchToken("return"))return Nn(nn,on,Jr,!0)}),xn.addCommand("exit",function(nn,on,Jr){if(Jr.matchToken("exit"))return Nn(nn,on,Jr,!1)}),xn.addCommand("halt",function(nn,on,Jr){if(Jr.matchToken("halt")){if(Jr.matchToken("the")){Jr.requireToken("event"),Jr.matchOpToken("'")&&Jr.requireToken("s");var rn=!0}if(Jr.matchToken("bubbling"))var cn=!0;else if(Jr.matchToken("default"))var sn=!0;var fn=Nn(nn,on,Jr,!1),un={keepExecuting:!0,bubbling:cn,haltDefault:sn,exit:fn,op:function(gn){if(gn.event)return cn?gn.event.stopPropagation():(sn||gn.event.stopPropagation(),gn.event.preventDefault()),rn?on.findNext(this,gn):fn}};return un}}),xn.addCommand("log",function(nn,on,Jr){if(Jr.matchToken("log")){for(var rn=[nn.parseElement("expression",Jr)];Jr.matchOpToken(",");)rn.push(nn.requireElement("expression",Jr));if(Jr.matchToken("with"))var cn=nn.requireElement("expression",Jr);var sn={exprs:rn,withExpr:cn,args:[cn,rn],op:function(fn,un,gn){return un?un.apply(null,gn):console.log.apply(null,gn),on.findNext(this,fn)}};return sn}}),xn.addCommand("beep!",function(nn,on,Jr){if(Jr.matchToken("beep!")){for(var rn=[nn.parseElement("expression",Jr)];Jr.matchOpToken(",");)rn.push(nn.requireElement("expression",Jr));var cn={exprs:rn,args:[rn],op:function(sn,fn){for(let un=0;un<rn.length;un++){let gn=rn[un],En=fn[un];on.beepValueToConsole(sn.me,gn,En)}return on.findNext(this,sn)}};return cn}}),xn.addCommand("throw",function(nn,on,Jr){if(Jr.matchToken("throw")){var rn=nn.requireElement("expression",Jr),cn={expr:rn,args:[rn],op:function(sn,fn){throw on.registerHyperTrace(sn,fn),fn}};return cn}});var Dn=function(nn,on,Jr){var rn=nn.requireElement("expression",Jr),cn={expr:rn,args:[rn],op:function(sn,fn){return sn.result=fn,on.findNext(cn,sn)}};return cn};xn.addCommand("call",function(nn,on,Jr){if(Jr.matchToken("call")){var rn=Dn(nn,on,Jr);return rn.expr&&rn.expr.type!=="functionCall"&&nn.raiseParseError(Jr,"Must be a function invocation"),rn}}),xn.addCommand("get",function(nn,on,Jr){if(Jr.matchToken("get"))return Dn(nn,on,Jr)}),xn.addCommand("make",function(nn,on,Jr){if(Jr.matchToken("make")){Jr.matchToken("a")||Jr.matchToken("an");var rn=nn.requireElement("expression",Jr),cn=[];if(rn.type!=="queryRef"&&Jr.matchToken("from"))do cn.push(nn.requireElement("expression",Jr));while(Jr.matchOpToken(","));if(Jr.matchToken("called"))var sn=nn.requireElement("symbol",Jr);var fn;return rn.type==="queryRef"?(fn={op:function(un){for(var gn,En="div",Tn,Rn=[],Hn=/(?:(^|#|\.)([^#\. ]+))/g;gn=Hn.exec(rn.css);)gn[1]===""?En=gn[2].trim():gn[1]==="#"?Tn=gn[2].trim():Rn.push(gn[2].trim());var Cn=document.createElement(En);Tn!==void 0&&(Cn.id=Tn);for(var In=0;In<Rn.length;In++){var _n=Rn[In];Cn.classList.add(_n)}return un.result=Cn,sn&&on.setSymbol(sn.name,un,sn.scope,Cn),on.findNext(this,un)}},fn):(fn={args:[rn,cn],op:function(un,gn,En){return un.result=si(gn,En),sn&&on.setSymbol(sn.name,un,sn.scope,un.result),on.findNext(this,un)}},fn)}}),xn.addGrammarElement("pseudoCommand",function(nn,on,Jr){let rn=Jr.token(1);if(!(rn&&rn.op&&(rn.value==="."||rn.value==="(")))return null;for(var cn=nn.requireElement("primaryExpression",Jr),sn=cn.root,fn=cn;sn.root!=null;)fn=fn.root,sn=sn.root;if(cn.type!=="functionCall"&&nn.raiseParseError(Jr,"Pseudo-commands must be function calls"),fn.type==="functionCall"&&fn.root.root==null){if(Jr.matchAnyToken("the","to","on","with","into","from","at"))var un=nn.requireElement("expression",Jr);else if(Jr.matchToken("me"))var un=nn.requireElement("implicitMeTarget",Jr)}var gn;return un?gn={type:"pseudoCommand",root:un,argExressions:fn.argExressions,args:[un,fn.argExressions],op:function(En,Tn,Rn){on.nullCheck(Tn,un);var Hn=Tn[fn.root.name];return on.nullCheck(Hn,fn),Hn.hyperfunc&&Rn.push(En),En.result=Hn.apply(Tn,Rn),on.findNext(gn,En)},execute:function(En){return on.unifiedExec(this,En)}}:gn={type:"pseudoCommand",expr:cn,args:[cn],op:function(En,Tn){return En.result=Tn,on.findNext(gn,En)},execute:function(En){return on.unifiedExec(this,En)}},gn});var Ln=function(nn,on,Jr,rn,cn){var sn=rn.type==="symbol",fn=rn.type==="attributeRef",un=rn.type==="styleRef",gn=rn.type==="arrayIndex";!(fn||un||sn)&&rn.root==null&&nn.raiseParseError(Jr,"Can only put directly into symbols, not references");var En=null,Tn=null;if(!sn)if(fn||un){En=nn.requireElement("implicitMeTarget",Jr);var Rn=rn}else if(gn)Tn=rn.firstIndex,En=rn.root;else{Tn=rn.prop?rn.prop.value:null;var Rn=rn.attribute;En=rn.root}var Hn={target:rn,symbolWrite:sn,value:cn,args:[En,Tn,cn],op:function(Cn,In,_n,Un){return sn?on.setSymbol(rn.name,Cn,rn.scope,Un):(on.nullCheck(In,En),gn?In[_n]=Un:on.implicitLoop(In,function(ii){Rn?Rn.type==="attributeRef"?Un==null?ii.removeAttribute(Rn.name):ii.setAttribute(Rn.name,Un):ii.style[Rn.name]=Un:ii[_n]=Un})),on.findNext(this,Cn)}};return Hn};xn.addCommand("default",function(nn,on,Jr){if(Jr.matchToken("default")){var rn=nn.requireElement("assignableExpression",Jr);Jr.requireToken("to");var cn=nn.requireElement("expression",Jr),sn=Ln(nn,on,Jr,rn,cn),fn={target:rn,value:cn,setter:sn,args:[rn],op:function(un,gn){return gn?on.findNext(this,un):sn}};return sn.parent=fn,fn}}),xn.addCommand("set",function(nn,on,Jr){if(Jr.matchToken("set")){if(Jr.currentToken().type==="L_BRACE"){var rn=nn.requireElement("objectLiteral",Jr);Jr.requireToken("on");var cn=nn.requireElement("expression",Jr),sn={objectLiteral:rn,target:cn,args:[rn,cn],op:function(un,gn,En){return Object.assign(En,gn),on.findNext(this,un)}};return sn}try{Jr.pushFollow("to");var cn=nn.requireElement("assignableExpression",Jr)}finally{Jr.popFollow()}Jr.requireToken("to");var fn=nn.requireElement("expression",Jr);return Ln(nn,on,Jr,cn,fn)}}),xn.addCommand("if",function(nn,on,Jr){if(!Jr.matchToken("if"))return;var rn=nn.requireElement("expression",Jr);Jr.matchToken("then");var cn=nn.parseElement("commandList",Jr),sn=!1;let fn=Jr.matchToken("else")||Jr.matchToken("otherwise");if(fn){let En=Jr.peekToken("if");if(sn=En!=null&&En.line===fn.line,sn)var un=nn.parseElement("command",Jr);else var un=nn.parseElement("commandList",Jr)}Jr.hasMore()&&!sn&&Jr.requireToken("end");var gn={expr:rn,trueBranch:cn,falseBranch:un,args:[rn],op:function(En,Tn){return Tn?cn:un||on.findNext(this,En)}};return nn.setParent(cn,gn),nn.setParent(un,gn),gn});var Fn=function(nn,on,Jr,rn){var cn=on.currentToken(),sn;if(on.matchToken("for")||rn){var fn=on.requireTokenType("IDENTIFIER");sn=fn.value,on.requireToken("in");var un=nn.requireElement("expression",on)}else if(on.matchToken("in")){sn="it";var un=nn.requireElement("expression",on)}else if(on.matchToken("while"))var gn=nn.requireElement("expression",on);else if(on.matchToken("until")){var En=!0;if(on.matchToken("event")){var Tn=nn.requireElement("dotOrColonPath",on,"Expected event name");if(on.matchToken("from"))var Rn=nn.requireElement("expression",on)}else var gn=nn.requireElement("expression",on)}else if(!nn.commandBoundary(on.currentToken())&&on.currentToken().value!=="forever"){var Hn=nn.requireElement("expression",on);on.requireToken("times")}else{on.matchToken("forever");var Cn=!0}if(on.matchToken("index"))var fn=on.requireTokenType("IDENTIFIER"),In=fn.value;else if(on.matchToken("indexed")){on.requireToken("by");var fn=on.requireTokenType("IDENTIFIER"),In=fn.value}var _n=nn.parseElement("commandList",on);if(_n&&Tn){for(var Un=_n;Un.next;)Un=Un.next;var ii={type:"waitATick",op:function(){return new Promise(function(ui){setTimeout(function(){ui(Jr.findNext(ii))},0)})}};Un.next=ii}if(on.hasMore()&&on.requireToken("end"),sn==null){sn="_implicit_repeat_"+cn.start;var ai=sn}else var ai=sn+"_"+cn.start;var Ri={identifier:sn,indexIdentifier:In,slot:ai,expression:un,forever:Cn,times:Hn,until:En,event:Tn,on:Rn,whileExpr:gn,resolveNext:function(){return this},loop:_n,args:[gn,Hn],op:function(ui,ki,Hi){var Ci=ui.meta.iterators[ai],Ni=!1,Ca=null;if(this.forever)Ni=!0;else if(this.until)Tn?Ni=ui.meta.iterators[ai].eventFired===!1:Ni=ki!==!0;else if(gn)Ni=ki;else if(Hi)Ni=Ci.index<Hi;else{var _a=Ci.iterator.next();Ni=!_a.done,Ca=_a.value}return Ni?(Ci.value?ui.result=ui.locals[sn]=Ca:ui.result=Ci.index,In&&(ui.locals[In]=Ci.index),Ci.index++,_n):(ui.meta.iterators[ai]=null,Jr.findNext(this.parent,ui))}};nn.setParent(_n,Ri);var Bi={name:"repeatInit",args:[un,Tn,Rn],op:function(ui,ki,Hi,Ci){var Ni={index:0,value:ki,eventFired:!1};if(ui.meta.iterators[ai]=Ni,ki&&ki[Symbol.iterator]&&(Ni.iterator=ki[Symbol.iterator]()),Tn){var Ca=Ci||ui.me;Ca.addEventListener(Hi,function(_a){ui.meta.iterators[ai].eventFired=!0},{once:!0})}return Ri},execute:function(ui){return Jr.unifiedExec(this,ui)}};return nn.setParent(Ri,Bi),Bi};xn.addCommand("repeat",function(nn,on,Jr){if(Jr.matchToken("repeat"))return Fn(nn,Jr,on,!1)}),xn.addCommand("for",function(nn,on,Jr){if(Jr.matchToken("for"))return Fn(nn,Jr,on,!0)}),xn.addCommand("continue",function(nn,on,Jr){if(Jr.matchToken("continue")){var rn={op:function(cn){for(var sn=this.parent;;sn=sn.parent)if(sn==null&&nn.raiseParseError(Jr,"Command `continue` cannot be used outside of a `repeat` loop."),sn.loop!=null)return sn.resolveNext(cn)}};return rn}}),xn.addCommand("break",function(nn,on,Jr){if(Jr.matchToken("break")){var rn={op:function(cn){for(var sn=this.parent;;sn=sn.parent)if(sn==null&&nn.raiseParseError(Jr,"Command `continue` cannot be used outside of a `repeat` loop."),sn.loop!=null)return on.findNext(sn.parent,cn)}};return rn}}),xn.addGrammarElement("stringLike",function(nn,on,Jr){return nn.parseAnyOf(["string","nakedString"],Jr)}),xn.addCommand("append",function(nn,on,Jr){if(Jr.matchToken("append")){var rn=null,cn=nn.requireElement("expression",Jr),sn={type:"symbol",evaluate:function(gn){return on.resolveSymbol("result",gn)}};Jr.matchToken("to")?rn=nn.requireElement("expression",Jr):rn=sn;var fn=null;(rn.type==="symbol"||rn.type==="attributeRef"||rn.root!=null)&&(fn=Ln(nn,on,Jr,rn,sn));var un={value:cn,target:rn,args:[rn,cn],op:function(gn,En,Tn){if(Array.isArray(En))return En.push(Tn),on.findNext(this,gn);if(En instanceof Element)return Tn instanceof Element?En.insertAdjacentElement("beforeend",Tn):En.insertAdjacentHTML("beforeend",Tn),on.processNode(En),on.findNext(this,gn);if(fn)return gn.result=(En||"")+Tn,fn;throw Error("Unable to append a value!")},execute:function(gn){return on.unifiedExec(this,gn)}};return fn!=null&&(fn.parent=un),un}});function Mn(nn,on,Jr){Jr.matchToken("at")||Jr.matchToken("from");let rn={includeStart:!0,includeEnd:!1};return rn.from=Jr.matchToken("start")?0:nn.requireElement("expression",Jr),(Jr.matchToken("to")||Jr.matchOpToken(".."))&&(Jr.matchToken("end")?rn.toEnd=!0:rn.to=nn.requireElement("expression",Jr)),Jr.matchToken("inclusive")?rn.includeEnd=!0:Jr.matchToken("exclusive")&&(rn.includeStart=!1),rn}class Gn{constructor(on,Jr){this.re=on,this.str=Jr}next(){let on=this.re.exec(this.str);return on===null?{done:!0}:{value:on}}}class Wn{constructor(on,Jr,rn){this.re=on,this.flags=Jr,this.str=rn}[Symbol.iterator](){return new Gn(new RegExp(this.re,this.flags),this.str)}}xn.addCommand("pick",(nn,on,Jr)=>{if(Jr.matchToken("pick")){if(Jr.matchToken("the"),Jr.matchToken("item")||Jr.matchToken("items")||Jr.matchToken("character")||Jr.matchToken("characters")){let rn=Mn(nn,on,Jr);return Jr.requireToken("from"),{args:[nn.requireElement("expression",Jr),rn.from,rn.to],op(sn,fn,un,gn){return rn.toEnd&&(gn=fn.length),rn.includeStart||un++,rn.includeEnd&&gn++,(gn==null||gn==null)&&(gn=un+1),sn.result=fn.slice(un,gn),on.findNext(this,sn)}}}if(Jr.matchToken("match")){Jr.matchToken("of");let rn=nn.parseElement("expression",Jr),cn="";return Jr.matchOpToken("|")&&(cn=Jr.requireTokenType("IDENTIFIER").value),Jr.requireToken("from"),{args:[nn.parseElement("expression",Jr),rn],op(fn,un,gn){return fn.result=new RegExp(gn,cn).exec(un),on.findNext(this,fn)}}}if(Jr.matchToken("matches")){Jr.matchToken("of");let rn=nn.parseElement("expression",Jr),cn="gu";return Jr.matchOpToken("|")&&(cn="g"+Jr.requireTokenType("IDENTIFIER").value.replace("g","")),Jr.requireToken("from"),{args:[nn.parseElement("expression",Jr),rn],op(fn,un,gn){return fn.result=new Wn(gn,cn,un),on.findNext(this,fn)}}}}}),xn.addCommand("increment",function(nn,on,Jr){if(Jr.matchToken("increment")){var rn,cn=nn.parseElement("assignableExpression",Jr);Jr.matchToken("by")&&(rn=nn.requireElement("expression",Jr));var sn={type:"implicitIncrementOp",target:cn,args:[cn,rn],op:function(fn,un,gn){un=un?parseFloat(un):0,gn=rn?parseFloat(gn):1;var En=un+gn;return fn.result=En,En},evaluate:function(fn){return on.unifiedEval(this,fn)}};return Ln(nn,on,Jr,cn,sn)}}),xn.addCommand("decrement",function(nn,on,Jr){if(Jr.matchToken("decrement")){var rn,cn=nn.parseElement("assignableExpression",Jr);Jr.matchToken("by")&&(rn=nn.requireElement("expression",Jr));var sn={type:"implicitDecrementOp",target:cn,args:[cn,rn],op:function(fn,un,gn){un=un?parseFloat(un):0,gn=rn?parseFloat(gn):1;var En=un-gn;return fn.result=En,En},evaluate:function(fn){return on.unifiedEval(this,fn)}};return Ln(nn,on,Jr,cn,sn)}});function zn(nn,on){var Jr="text",rn;return nn.matchToken("a")||nn.matchToken("an"),nn.matchToken("json")||nn.matchToken("Object")?Jr="json":nn.matchToken("response")?Jr="response":nn.matchToken("html")?Jr="html":nn.matchToken("text")||(rn=on.requireElement("dotOrColonPath",nn).evaluate()),{type:Jr,conversion:rn}}xn.addCommand("fetch",function(nn,on,Jr){if(Jr.matchToken("fetch")){var rn=nn.requireElement("stringLike",Jr);if(Jr.matchToken("as"))var cn=zn(Jr,nn);if(Jr.matchToken("with")&&Jr.currentToken().value!=="{")var sn=nn.parseElement("nakedNamedArgumentList",Jr);else var sn=nn.parseElement("objectLiteral",Jr);cn==null&&Jr.matchToken("as")&&(cn=zn(Jr,nn));var fn=cn?cn.type:"text",un=cn?cn.conversion:null,gn={url:rn,argExpressions:sn,args:[rn,sn],op:function(En,Tn,Rn){var Hn=Rn||{};Hn.sender=En.me,Hn.headers=Hn.headers||{};var Cn=new AbortController;let In=En.me.addEventListener("fetch:abort",function(){Cn.abort()},{once:!0});Hn.signal=Cn.signal,on.triggerEvent(En.me,"hyperscript:beforeFetch",Hn),on.triggerEvent(En.me,"fetch:beforeRequest",Hn),Rn=Hn;var _n=!1;return Rn.timeout&&setTimeout(function(){_n||Cn.abort()},Rn.timeout),fetch(Tn,Rn).then(function(Un){let ii={response:Un};return on.triggerEvent(En.me,"fetch:afterResponse",ii),Un=ii.response,fn==="response"?(En.result=Un,on.triggerEvent(En.me,"fetch:afterRequest",{result:Un}),_n=!0,on.findNext(gn,En)):fn==="json"?Un.json().then(function(ai){return En.result=ai,on.triggerEvent(En.me,"fetch:afterRequest",{result:ai}),_n=!0,on.findNext(gn,En)}):Un.text().then(function(ai){return un&&(ai=on.convertValue(ai,un)),fn==="html"&&(ai=on.convertValue(ai,"Fragment")),En.result=ai,on.triggerEvent(En.me,"fetch:afterRequest",{result:ai}),_n=!0,on.findNext(gn,En)})}).catch(function(Un){throw on.triggerEvent(En.me,"fetch:error",{reason:Un}),Un}).finally(function(){En.me.removeEventListener("fetch:abort",In)})}};return gn}})}function oi(xn){xn.addCommand("settle",function(vn,bn,hn){if(hn.matchToken("settle")){if(vn.commandBoundary(hn.currentToken()))var On=vn.requireElement("implicitMeTarget",hn);else var On=vn.requireElement("expression",hn);var Pn={type:"settleCmd",args:[On],op:function(Nn,Dn){bn.nullCheck(Dn,On);var Ln=null,Fn=!1,Mn=!1,Gn=new Promise(function(Wn){Ln=Wn});return Dn.addEventListener("transitionstart",function(){Mn=!0},{once:!0}),setTimeout(function(){!Mn&&!Fn&&Ln(bn.findNext(Pn,Nn))},500),Dn.addEventListener("transitionend",function(){Fn||Ln(bn.findNext(Pn,Nn))},{once:!0}),Gn},execute:function(Nn){return bn.unifiedExec(this,Nn)}};return Pn}}),xn.addCommand("add",function(vn,bn,hn){if(hn.matchToken("add")){var On=vn.parseElement("classRef",hn),Pn=null,Nn=null;if(On==null)Pn=vn.parseElement("attributeRef",hn),Pn==null&&(Nn=vn.parseElement("styleLiteral",hn),Nn==null&&vn.raiseParseError(hn,"Expected either a class reference or attribute expression"));else for(var Dn=[On];On=vn.parseElement("classRef",hn);)Dn.push(On);if(hn.matchToken("to"))var Ln=vn.requireElement("expression",hn);else var Ln=vn.requireElement("implicitMeTarget",hn);if(hn.matchToken("when")){Nn&&vn.raiseParseError(hn,"Only class and properties are supported with a when clause");var Fn=vn.requireElement("expression",hn)}return Dn?{classRefs:Dn,to:Ln,args:[Ln,Dn],op:function(Mn,Gn,Wn){return bn.nullCheck(Gn,Ln),bn.forEach(Wn,function(zn){bn.implicitLoop(Gn,function(nn){Fn?(Mn.result=nn,bn.evaluateNoPromise(Fn,Mn)?nn instanceof Element&&nn.classList.add(zn.className):nn instanceof Element&&nn.classList.remove(zn.className),Mn.result=null):nn instanceof Element&&nn.classList.add(zn.className)})}),bn.findNext(this,Mn)}}:Pn?{type:"addCmd",attributeRef:Pn,to:Ln,args:[Ln],op:function(Mn,Gn,Wn){return bn.nullCheck(Gn,Ln),bn.implicitLoop(Gn,function(zn){Fn?(Mn.result=zn,bn.evaluateNoPromise(Fn,Mn)?zn.setAttribute(Pn.name,Pn.value):zn.removeAttribute(Pn.name),Mn.result=null):zn.setAttribute(Pn.name,Pn.value)}),bn.findNext(this,Mn)},execute:function(Mn){return bn.unifiedExec(this,Mn)}}:{type:"addCmd",cssDeclaration:Nn,to:Ln,args:[Ln,Nn],op:function(Mn,Gn,Wn){return bn.nullCheck(Gn,Ln),bn.implicitLoop(Gn,function(zn){zn.style.cssText+=Wn}),bn.findNext(this,Mn)},execute:function(Mn){return bn.unifiedExec(this,Mn)}}}}),xn.addGrammarElement("styleLiteral",function(vn,bn,hn){if(hn.matchOpToken("{")){for(var On=[""],Pn=[];hn.hasMore();){if(hn.matchOpToken("\\"))hn.consumeToken();else{if(hn.matchOpToken("}"))break;if(hn.matchToken("$")){var Nn=hn.matchOpToken("{"),Dn=vn.parseElement("expression",hn);Nn&&hn.requireOpToken("}"),Pn.push(Dn),On.push("")}else{var Ln=hn.consumeToken();On[On.length-1]+=hn.source.substring(Ln.start,Ln.end)}}On[On.length-1]+=hn.lastWhitespace()}return{type:"styleLiteral",args:[Pn],op:function(Fn,Mn){var Gn="";return On.forEach(function(Wn,zn){Gn+=Wn,zn in Mn&&(Gn+=Mn[zn])}),Gn},evaluate:function(Fn){return bn.unifiedEval(this,Fn)}}}}),xn.addCommand("remove",function(vn,bn,hn){if(hn.matchToken("remove")){var On=vn.parseElement("classRef",hn),Pn=null,Nn=null;if(On==null)Pn=vn.parseElement("attributeRef",hn),Pn==null&&(Nn=vn.parseElement("expression",hn),Nn==null&&vn.raiseParseError(hn,"Expected either a class reference, attribute expression or value expression"));else for(var Dn=[On];On=vn.parseElement("classRef",hn);)Dn.push(On);if(hn.matchToken("from"))var Ln=vn.requireElement("expression",hn);else if(Nn==null)var Ln=vn.requireElement("implicitMeTarget",hn);return Nn?{elementExpr:Nn,from:Ln,args:[Nn,Ln],op:function(Fn,Mn,Gn){return bn.nullCheck(Mn,Nn),bn.implicitLoop(Mn,function(Wn){Wn.parentElement&&(Gn==null||Gn.contains(Wn))&&Wn.parentElement.removeChild(Wn)}),bn.findNext(this,Fn)}}:{classRefs:Dn,attributeRef:Pn,elementExpr:Nn,from:Ln,args:[Dn,Ln],op:function(Fn,Mn,Gn){return bn.nullCheck(Gn,Ln),Mn?bn.forEach(Mn,function(Wn){bn.implicitLoop(Gn,function(zn){zn.classList.remove(Wn.className)})}):bn.implicitLoop(Gn,function(Wn){Wn.removeAttribute(Pn.name)}),bn.findNext(this,Fn)}}}}),xn.addCommand("toggle",function(vn,bn,hn){if(hn.matchToken("toggle")){if(hn.matchAnyToken("the","my"),hn.currentToken().type==="STYLE_REF"){var On=hn.consumeToken().value.substr(1),Pn=!0,Nn=pn(vn,hn,On);if(hn.matchToken("of")){hn.pushFollow("with");try{var Dn=vn.requireElement("expression",hn)}finally{hn.popFollow()}}else var Dn=vn.requireElement("implicitMeTarget",hn)}else if(hn.matchToken("between")){var Ln=!0,Fn=vn.parseElement("classRef",hn);hn.requireToken("and");var Mn=vn.requireElement("classRef",hn)}else{var Fn=vn.parseElement("classRef",hn),Gn=null;if(Fn==null)Gn=vn.parseElement("attributeRef",hn),Gn==null&&vn.raiseParseError(hn,"Expected either a class reference or attribute expression");else for(var Wn=[Fn];Fn=vn.parseElement("classRef",hn);)Wn.push(Fn)}if(Pn!==!0)if(hn.matchToken("on"))var Dn=vn.requireElement("expression",hn);else var Dn=vn.requireElement("implicitMeTarget",hn);if(hn.matchToken("for"))var zn=vn.requireElement("expression",hn);else if(hn.matchToken("until")){var nn=vn.requireElement("dotOrColonPath",hn,"Expected event name");if(hn.matchToken("from"))var on=vn.requireElement("expression",hn)}var Jr={classRef:Fn,classRef2:Mn,classRefs:Wn,attributeRef:Gn,on:Dn,time:zn,evt:nn,from:on,toggle:function(rn,cn,sn,fn){bn.nullCheck(rn,Dn),Pn?bn.implicitLoop(rn,function(un){Nn("toggle",un)}):Ln?bn.implicitLoop(rn,function(un){un.classList.contains(cn.className)?(un.classList.remove(cn.className),un.classList.add(sn.className)):(un.classList.add(cn.className),un.classList.remove(sn.className))}):fn?bn.forEach(fn,function(un){bn.implicitLoop(rn,function(gn){gn.classList.toggle(un.className)})}):bn.implicitLoop(rn,function(un){un.hasAttribute(Gn.name)?un.removeAttribute(Gn.name):un.setAttribute(Gn.name,Gn.value)})},args:[Dn,zn,nn,on,Fn,Mn,Wn],op:function(rn,cn,sn,fn,un,gn,En,Tn){return sn?new Promise(function(Rn){Jr.toggle(cn,gn,En,Tn),setTimeout(function(){Jr.toggle(cn,gn,En,Tn),Rn(bn.findNext(Jr,rn))},sn)}):fn?new Promise(function(Rn){var Hn=un||rn.me;Hn.addEventListener(fn,function(){Jr.toggle(cn,gn,En,Tn),Rn(bn.findNext(Jr,rn))},{once:!0}),Jr.toggle(cn,gn,En,Tn)}):(this.toggle(cn,gn,En,Tn),bn.findNext(Jr,rn))}};return Jr}});var en={display:function(vn,bn,hn){if(hn)bn.style.display=hn;else if(vn==="toggle")getComputedStyle(bn).display==="none"?en.display("show",bn,hn):en.display("hide",bn,hn);else if(vn==="hide"){let On=xn.runtime.getInternalData(bn);On.originalDisplay==null&&(On.originalDisplay=bn.style.display),bn.style.display="none"}else{let On=xn.runtime.getInternalData(bn);On.originalDisplay&&On.originalDisplay!=="none"?bn.style.display=On.originalDisplay:bn.style.removeProperty("display")}},visibility:function(vn,bn,hn){hn?bn.style.visibility=hn:vn==="toggle"?getComputedStyle(bn).visibility==="hidden"?en.visibility("show",bn,hn):en.visibility("hide",bn,hn):vn==="hide"?bn.style.visibility="hidden":bn.style.visibility="visible"},opacity:function(vn,bn,hn){hn?bn.style.opacity=hn:vn==="toggle"?getComputedStyle(bn).opacity==="0"?en.opacity("show",bn,hn):en.opacity("hide",bn,hn):vn==="hide"?bn.style.opacity="0":bn.style.opacity="1"}},an=function(vn,bn,hn){var On,Pn=hn.currentToken();return Pn.value==="when"||Pn.value==="with"||vn.commandBoundary(Pn)?On=vn.parseElement("implicitMeTarget",hn):On=vn.parseElement("expression",hn),On},pn=function(vn,bn,hn){var On=Wr.defaultHideShowStrategy,Pn=en;Wr.hideShowStrategies&&(Pn=Object.assign(Pn,Wr.hideShowStrategies)),hn=hn||On||"display";var Nn=Pn[hn];return Nn==null&&vn.raiseParseError(bn,"Unknown show/hide strategy : "+hn),Nn};xn.addCommand("hide",function(vn,bn,hn){if(hn.matchToken("hide")){var On=an(vn,bn,hn),Pn=null;hn.matchToken("with")&&(Pn=hn.requireTokenType("IDENTIFIER","STYLE_REF").value,Pn.indexOf("*")===0&&(Pn=Pn.substr(1)));var Nn=pn(vn,hn,Pn);return{target:On,args:[On],op:function(Dn,Ln){return bn.nullCheck(Ln,On),bn.implicitLoop(Ln,function(Fn){Nn("hide",Fn)}),bn.findNext(this,Dn)}}}}),xn.addCommand("show",function(vn,bn,hn){if(hn.matchToken("show")){var On=an(vn,bn,hn),Pn=null;hn.matchToken("with")&&(Pn=hn.requireTokenType("IDENTIFIER","STYLE_REF").value,Pn.indexOf("*")===0&&(Pn=Pn.substr(1)));var Nn=null;if(hn.matchOpToken(":")){var Dn=hn.consumeUntilWhitespace();hn.matchTokenType("WHITESPACE"),Nn=Dn.map(function(Mn){return Mn.value}).join("")}if(hn.matchToken("when"))var Ln=vn.requireElement("expression",hn);var Fn=pn(vn,hn,Pn);return{target:On,when:Ln,args:[On],op:function(Mn,Gn){return bn.nullCheck(Gn,On),bn.implicitLoop(Gn,function(Wn){Ln?(Mn.result=Wn,bn.evaluateNoPromise(Ln,Mn)?Fn("show",Wn,Nn):Fn("hide",Wn),Mn.result=null):Fn("show",Wn,Nn)}),bn.findNext(this,Mn)}}}}),xn.addCommand("take",function(vn,bn,hn){if(hn.matchToken("take")){let Fn=null,Mn=[];for(;Fn=vn.parseElement("classRef",hn);)Mn.push(Fn);var On=null,Pn=null;let Gn=Mn.length>0;if(Gn||(On=vn.parseElement("attributeRef",hn),On==null&&vn.raiseParseError(hn,"Expected either a class reference or attribute expression"),hn.matchToken("with")&&(Pn=vn.requireElement("expression",hn))),hn.matchToken("from"))var Nn=vn.requireElement("expression",hn);if(hn.matchToken("for"))var Dn=vn.requireElement("expression",hn);else var Dn=vn.requireElement("implicitMeTarget",hn);if(Gn){var Ln={classRefs:Mn,from:Nn,forElt:Dn,args:[Mn,Nn,Dn],op:function(Wn,zn,nn,on){return bn.nullCheck(on,Dn),bn.implicitLoop(zn,function(Jr){var rn=Jr.className;nn?bn.implicitLoop(nn,function(cn){cn.classList.remove(rn)}):bn.implicitLoop(Jr,function(cn){cn.classList.remove(rn)}),bn.implicitLoop(on,function(cn){cn.classList.add(rn)})}),bn.findNext(this,Wn)}};return Ln}else{var Ln={attributeRef:On,from:Nn,forElt:Dn,args:[Nn,Dn,Pn],op:function(zn,nn,on,Jr){return bn.nullCheck(nn,Nn),bn.nullCheck(on,Dn),bn.implicitLoop(nn,function(rn){Jr?rn.setAttribute(On.name,Jr):rn.removeAttribute(On.name)}),bn.implicitLoop(on,function(rn){rn.setAttribute(On.name,On.value||"")}),bn.findNext(this,zn)}};return Ln}}});function mn(vn,bn,hn,On){if(hn!=null)var Pn=vn.resolveSymbol(hn,bn);else var Pn=bn;if(Pn instanceof Element||Pn instanceof HTMLDocument){for(;Pn.firstChild;)Pn.removeChild(Pn.firstChild);Pn.append(xn.runtime.convertValue(On,"Fragment")),vn.processNode(Pn)}else if(hn!=null)vn.setSymbol(hn,bn,null,On);else throw"Don't know how to put a value into "+typeof bn}xn.addCommand("put",function(vn,bn,hn){if(hn.matchToken("put")){var On=vn.requireElement("expression",hn),Pn=hn.matchAnyToken("into","before","after");Pn==null&&hn.matchToken("at")&&(hn.matchToken("the"),Pn=hn.matchAnyToken("start","end"),hn.requireToken("of")),Pn==null&&vn.raiseParseError(hn,"Expected one of 'into', 'before', 'at start of', 'at end of', 'after'");var Nn=vn.requireElement("expression",hn),Dn=Pn.value,Ln=!1,Fn=!1,Mn=null,Gn=null;if(Nn.type==="arrayIndex"&&Dn==="into")Ln=!0,Gn=Nn.prop,Mn=Nn.root;else if(Nn.prop&&Nn.root&&Dn==="into")Gn=Nn.prop.value,Mn=Nn.root;else if(Nn.type==="symbol"&&Dn==="into")Fn=!0,Gn=Nn.name;else if(Nn.type==="attributeRef"&&Dn==="into"){var Wn=!0;Gn=Nn.name,Mn=vn.requireElement("implicitMeTarget",hn)}else if(Nn.type==="styleRef"&&Dn==="into"){var zn=!0;Gn=Nn.name,Mn=vn.requireElement("implicitMeTarget",hn)}else if(Nn.attribute&&Dn==="into"){var Wn=Nn.attribute.type==="attributeRef",zn=Nn.attribute.type==="styleRef";Gn=Nn.attribute.name,Mn=Nn.root}else Mn=Nn;var nn={target:Nn,operation:Dn,symbolWrite:Fn,value:On,args:[Mn,Gn,On],op:function(on,Jr,rn,cn){if(Fn)mn(bn,on,rn,cn);else if(bn.nullCheck(Jr,Mn),Dn==="into")Wn?bn.implicitLoop(Jr,function(fn){fn.setAttribute(rn,cn)}):zn?bn.implicitLoop(Jr,function(fn){fn.style[rn]=cn}):Ln?Jr[rn]=cn:bn.implicitLoop(Jr,function(fn){mn(bn,fn,rn,cn)});else{var sn=Dn==="before"?Element.prototype.before:Dn==="after"?Element.prototype.after:Dn==="start"?Element.prototype.prepend:Element.prototype.append;bn.implicitLoop(Jr,function(fn){sn.call(fn,cn instanceof Node?cn:bn.convertValue(cn,"Fragment")),fn.parentElement?bn.processNode(fn.parentElement):bn.processNode(fn)})}return bn.findNext(this,on)}};return nn}});function wn(vn,bn,hn){var On;if(hn.matchToken("the")||hn.matchToken("element")||hn.matchToken("elements")||hn.currentToken().type==="CLASS_REF"||hn.currentToken().type==="ID_REF"||hn.currentToken().op&&hn.currentToken().value==="<"){vn.possessivesDisabled=!0;try{On=vn.parseElement("expression",hn)}finally{delete vn.possessivesDisabled}hn.matchOpToken("'")&&hn.requireToken("s")}else if(hn.currentToken().type==="IDENTIFIER"&&hn.currentToken().value==="its"){var Pn=hn.matchToken("its");On={type:"pseudopossessiveIts",token:Pn,name:Pn.value,evaluate:function(Nn){return bn.resolveSymbol("it",Nn)}}}else hn.matchToken("my")||hn.matchToken("me"),On=vn.parseElement("implicitMeTarget",hn);return On}xn.addCommand("transition",function(vn,bn,hn){if(hn.matchToken("transition")){for(var On=wn(vn,bn,hn),Pn=[],Nn=[],Dn=[],Ln=hn.currentToken();!vn.commandBoundary(Ln)&&Ln.value!=="over"&&Ln.value!=="using";){if(hn.currentToken().type==="STYLE_REF"){let zn=hn.consumeToken().value.substr(1);Pn.push({type:"styleRefValue",evaluate:function(){return zn}})}else Pn.push(vn.requireElement("stringLike",hn));hn.matchToken("from")?Nn.push(vn.requireElement("expression",hn)):Nn.push(null),hn.requireToken("to"),hn.matchToken("initial")?Dn.push({type:"initial_literal",evaluate:function(){return"initial"}}):Dn.push(vn.requireElement("expression",hn)),Ln=hn.currentToken()}if(hn.matchToken("over"))var Fn=vn.requireElement("expression",hn);else if(hn.matchToken("using"))var Mn=vn.requireElement("expression",hn);var Gn={to:Dn,args:[On,Pn,Nn,Dn,Mn,Fn],op:function(Wn,zn,nn,on,Jr,rn,cn){bn.nullCheck(zn,On);var sn=[];return bn.implicitLoop(zn,function(fn){var un=new Promise(function(gn,En){var Tn=fn.style.transition;cn?fn.style.transition="all "+cn+"ms ease-in":rn?fn.style.transition=rn:fn.style.transition=Wr.defaultTransition;for(var Rn=bn.getInternalData(fn),Hn=getComputedStyle(fn),Cn={},In=0;In<Hn.length;In++){var _n=Hn[In],Un=Hn[_n];Cn[_n]=Un}Rn.initialStyles||(Rn.initialStyles=Cn);for(var In=0;In<nn.length;In++){var ii=nn[In],ai=on[In];ai==="computed"||ai==null?fn.style[ii]=Cn[ii]:fn.style[ii]=ai}var Ri=!1,Bi=!1;fn.addEventListener("transitionend",function(){Bi||(fn.style.transition=Tn,Bi=!0,gn())},{once:!0}),fn.addEventListener("transitionstart",function(){Ri=!0},{once:!0}),setTimeout(function(){!Bi&&!Ri&&(fn.style.transition=Tn,Bi=!0,gn())},100),setTimeout(function(){for(var ui=[],ki=0;ki<nn.length;ki++){var Hi=nn[ki],Ci=Jr[ki];if(Ci==="initial"){var Ni=Rn.initialStyles[Hi];fn.style[Hi]=Ni}else fn.style[Hi]=Ci}},0)});sn.push(un)}),Promise.all(sn).then(function(){return bn.findNext(Gn,Wn)})}};return Gn}}),xn.addCommand("measure",function(vn,bn,hn){if(hn.matchToken("measure")){var On=wn(vn,bn,hn),Pn=[];if(!vn.commandBoundary(hn.currentToken()))do Pn.push(hn.matchTokenType("IDENTIFIER").value);while(hn.matchOpToken(","));return{properties:Pn,args:[On],op:function(Nn,Dn){bn.nullCheck(Dn,On),0 in Dn&&(Dn=Dn[0]);var Ln=Dn.getBoundingClientRect(),Fn={top:Dn.scrollTop,left:Dn.scrollLeft,topMax:Dn.scrollTopMax,leftMax:Dn.scrollLeftMax,height:Dn.scrollHeight,width:Dn.scrollWidth};return Nn.result={x:Ln.x,y:Ln.y,left:Ln.left,top:Ln.top,right:Ln.right,bottom:Ln.bottom,width:Ln.width,height:Ln.height,bounds:Ln,scrollLeft:Fn.left,scrollTop:Fn.top,scrollLeftMax:Fn.leftMax,scrollTopMax:Fn.topMax,scrollWidth:Fn.width,scrollHeight:Fn.height,scroll:Fn},bn.forEach(Pn,function(Mn){if(Mn in Nn.result)Nn.locals[Mn]=Nn.result[Mn];else throw"No such measurement as "+Mn}),bn.findNext(this,Nn)}}}}),xn.addLeafExpression("closestExpr",function(vn,bn,hn){if(hn.matchToken("closest")){if(hn.matchToken("parent"))var On=!0;var Pn=null;if(hn.currentToken().type==="ATTRIBUTE_REF"){var Nn=vn.requireElement("attributeRefAccess",hn,null);Pn="["+Nn.attribute.name+"]"}if(Pn==null){var Dn=vn.requireElement("expression",hn);Dn.css==null?vn.raiseParseError(hn,"Expected a CSS expression"):Pn=Dn.css}if(hn.matchToken("to"))var Ln=vn.parseElement("expression",hn);else var Ln=vn.parseElement("implicitMeTarget",hn);var Fn={type:"closestExpr",parentSearch:On,expr:Dn,css:Pn,to:Ln,args:[Ln],op:function(Mn,Gn){if(Gn==null)return null;{let Wn=[];return bn.implicitLoop(Gn,function(zn){On?Wn.push(zn.parentElement?zn.parentElement.closest(Pn):null):Wn.push(zn.closest(Pn))}),bn.shouldAutoIterate(Gn)?Wn:Wn[0]}},evaluate:function(Mn){return bn.unifiedEval(this,Mn)}};return Nn?(Nn.root=Fn,Nn.args=[Fn],Nn):Fn}}),xn.addCommand("go",function(vn,bn,hn){if(hn.matchToken("go")){if(hn.matchToken("back"))var On=!0;else if(hn.matchToken("to"),hn.matchToken("url")){var Pn=vn.requireElement("stringLike",hn),Nn=!0;if(hn.matchToken("in")){hn.requireToken("new"),hn.requireToken("window");var Dn=!0}}else{hn.matchToken("the");var Ln=hn.matchAnyToken("top","middle","bottom"),Fn=hn.matchAnyToken("left","center","right");(Ln||Fn)&&hn.requireToken("of");var Pn=vn.requireElement("unaryExpression",hn),Mn=hn.matchAnyOpToken("+","-");if(Mn){hn.pushFollow("px");try{var Gn=vn.requireElement("expression",hn)}finally{hn.popFollow()}}hn.matchToken("px");var Wn=hn.matchAnyToken("smoothly","instantly"),zn={block:"start",inline:"nearest"};Ln&&(Ln.value==="top"?zn.block="start":Ln.value==="bottom"?zn.block="end":Ln.value==="middle"&&(zn.block="center")),Fn&&(Fn.value==="left"?zn.inline="start":Fn.value==="center"?zn.inline="center":Fn.value==="right"&&(zn.inline="end")),Wn&&(Wn.value==="smoothly"?zn.behavior="smooth":Wn.value==="instantly"&&(zn.behavior="instant"))}var nn={target:Pn,args:[Pn,Gn],op:function(on,Jr,rn){return On?window.history.back():Nn?Jr&&(Dn?window.open(Jr):window.location.href=Jr):bn.implicitLoop(Jr,function(cn){if(cn===window&&(cn=document.body),Mn){let sn=cn.getBoundingClientRect(),fn=document.createElement("div"),un=Mn.value==="+"?rn:rn*-1,gn=zn.inline=="start"||zn.inline=="end"?un:0,En=zn.block=="start"||zn.block=="end"?un:0;fn.style.position="absolute",fn.style.top=sn.top+window.scrollY+En+"px",fn.style.left=sn.left+window.scrollX+gn+"px",fn.style.height=sn.height+"px",fn.style.width=sn.width+"px",fn.style.zIndex=""+Number.MIN_SAFE_INTEGER,fn.style.opacity="0",document.body.appendChild(fn),setTimeout(function(){document.body.removeChild(fn)},100),cn=fn}cn.scrollIntoView(zn)}),bn.findNext(nn,on)}};return nn}}),Wr.conversions.dynamicResolvers.push(function(vn,bn){if(!(vn==="Values"||vn.indexOf("Values:")===0))return;var hn=vn.split(":")[1],On={},Pn=xn.runtime.implicitLoop.bind(xn.runtime);if(Pn(bn,function(Ln){var Fn=Dn(Ln);if(Fn!==void 0){On[Fn.name]=Fn.value;return}if(Ln.querySelectorAll!=null){var Mn=Ln.querySelectorAll("input,select,textarea");Mn.forEach(Nn)}}),hn){if(hn==="JSON")return JSON.stringify(On);if(hn==="Form")return new URLSearchParams(On).toString();throw"Unknown conversion: "+hn}else return On;function Nn(Ln){var Fn=Dn(Ln);if(Fn!=null){if(On[Fn.name]==null){On[Fn.name]=Fn.value;return}if(Array.isArray(On[Fn.name])&&Array.isArray(Fn.value)){On[Fn.name]=[].concat(On[Fn.name],Fn.value);return}}}function Dn(Ln){try{var Fn={name:Ln.name,value:Ln.value};if(Fn.name==null||Fn.value==null||Ln.type=="radio"&&Ln.checked==!1)return;if(Ln.type=="checkbox"&&(Ln.checked==!1?Fn.value=void 0:typeof Fn.value=="string"&&(Fn.value=[Fn.value])),Ln.type=="select-multiple"){var Mn=Ln.querySelectorAll("option[selected]");Fn.value=[];for(var Gn=0;Gn<Mn.length;Gn++)Fn.value.push(Mn[Gn].value)}return Fn}catch{return}}}),Wr.conversions.HTML=function(vn){var bn=function(hn){if(hn instanceof Array)return hn.map(function(Dn){return bn(Dn)}).join("");if(hn instanceof HTMLElement)return hn.outerHTML;if(hn instanceof NodeList){for(var On="",Pn=0;Pn<hn.length;Pn++){var Nn=hn[Pn];Nn instanceof HTMLElement&&(On+=Nn.outerHTML)}return On}return hn.toString?hn.toString():""};return bn(vn)},Wr.conversions.Fragment=function(vn){var bn=document.createDocumentFragment();return xn.runtime.implicitLoop(vn,function(hn){if(hn instanceof Node)bn.append(hn);else{var On=document.createElement("template");On.innerHTML=hn,bn.append(On.content)}}),bn}}let Jn=new tn,gi=Jn.lexer,li=Jn.parser;function Ui(xn,en){return Jn.evaluate(xn,en)}function vi(){var xn=Array.from(Qr.document.querySelectorAll("script[type='text/hyperscript'][src]"));Promise.all(xn.map(function(mn){return fetch(mn.src).then(function(wn){return wn.text()})})).then(mn=>mn.forEach(wn=>ni(wn))).then(()=>en(function(){pn(),Jn.processNode(document.documentElement),document.dispatchEvent(new Event("hyperscript:ready")),Qr.document.addEventListener("htmx:load",function(mn){Jn.processNode(mn.detail.elt)})}));function en(mn){document.readyState!=="loading"?setTimeout(mn):document.addEventListener("DOMContentLoaded",mn)}function an(){var mn=document.querySelector('meta[name="htmx-config"]');return mn?Vn(mn.content):null}function pn(){var mn=an();mn&&Object.assign(Wr,mn)}}let ni=Object.assign(Ui,{config:Wr,use(xn){xn(ni)},internals:{lexer:gi,parser:li,runtime:Jn,Lexer:Kr,Tokens:Yr,Parser:Zr,Runtime:tn},ElementCollection:An,addFeature:li.addFeature.bind(li),addCommand:li.addCommand.bind(li),addLeafExpression:li.addLeafExpression.bind(li),addIndirectExpression:li.addIndirectExpression.bind(li),evaluate:Jn.evaluate.bind(Jn),parse:Jn.parse.bind(Jn),processNode:Jn.processNode.bind(Jn),version:"0.9.14",browserInit:vi});return ni})});var Ws=za(mo()),Xs=za(is());function Js(Qr,Gr){var Wr=Object.keys(Qr);if(Object.getOwnPropertySymbols){var Kr=Object.getOwnPropertySymbols(Qr);Gr&&(Kr=Kr.filter(function(Yr){return Object.getOwnPropertyDescriptor(Qr,Yr).enumerable})),Wr.push.apply(Wr,Kr)}return Wr}function Qi(Qr){for(var Gr=1;Gr<arguments.length;Gr++){var Wr=arguments[Gr]!=null?arguments[Gr]:{};Gr%2?Js(Object(Wr),!0).forEach(function(Kr){au(Qr,Kr,Wr[Kr])}):Object.getOwnPropertyDescriptors?Object.defineProperties(Qr,Object.getOwnPropertyDescriptors(Wr)):Js(Object(Wr)).forEach(function(Kr){Object.defineProperty(Qr,Kr,Object.getOwnPropertyDescriptor(Wr,Kr))})}return Qr}function To(Qr){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?To=function(Gr){return typeof Gr}:To=function(Gr){return Gr&&typeof Symbol=="function"&&Gr.constructor===Symbol&&Gr!==Symbol.prototype?"symbol":typeof Gr},To(Qr)}function au(Qr,Gr,Wr){return Gr in Qr?Object.defineProperty(Qr,Gr,{value:Wr,enumerable:!0,configurable:!0,writable:!0}):Qr[Gr]=Wr,Qr}function ta(){return ta=Object.assign||function(Qr){for(var Gr=1;Gr<arguments.length;Gr++){var Wr=arguments[Gr];for(var Kr in Wr)Object.prototype.hasOwnProperty.call(Wr,Kr)&&(Qr[Kr]=Wr[Kr])}return Qr},ta.apply(this,arguments)}function ou(Qr,Gr){if(Qr==null)return{};var Wr={},Kr=Object.keys(Qr),Yr,Zr;for(Zr=0;Zr<Kr.length;Zr++)Yr=Kr[Zr],!(Gr.indexOf(Yr)>=0)&&(Wr[Yr]=Qr[Yr]);return Wr}function su(Qr,Gr){if(Qr==null)return{};var Wr=ou(Qr,Gr),Kr,Yr;if(Object.getOwnPropertySymbols){var Zr=Object.getOwnPropertySymbols(Qr);for(Yr=0;Yr<Zr.length;Yr++)Kr=Zr[Yr],!(Gr.indexOf(Kr)>=0)&&Object.prototype.propertyIsEnumerable.call(Qr,Kr)&&(Wr[Kr]=Qr[Kr])}return Wr}var lu="1.15.6";function ea(Qr){if(typeof window<"u"&&window.navigator)return!!navigator.userAgent.match(Qr)}var ra=ea(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),Za=ea(/Edge/i),Zs=ea(/firefox/i),Qa=ea(/safari/i)&&!ea(/chrome/i)&&!ea(/android/i),ys=ea(/iP(ad|od|hone)/i),sl=ea(/chrome/i)&&ea(/android/i),ll={capture:!1,passive:!1};function ei(Qr,Gr,Wr){Qr.addEventListener(Gr,Wr,!ra&&ll)}function Zn(Qr,Gr,Wr){Qr.removeEventListener(Gr,Wr,!ra&&ll)}function Co(Qr,Gr){if(Gr){if(Gr[0]===">"&&(Gr=Gr.substring(1)),Qr)try{if(Qr.matches)return Qr.matches(Gr);if(Qr.msMatchesSelector)return Qr.msMatchesSelector(Gr);if(Qr.webkitMatchesSelector)return Qr.webkitMatchesSelector(Gr)}catch{return!1}return!1}}function ul(Qr){return Qr.host&&Qr!==document&&Qr.host.nodeType?Qr.host:Qr.parentNode}function Vi(Qr,Gr,Wr,Kr){if(Qr){Wr=Wr||document;do{if(Gr!=null&&(Gr[0]===">"?Qr.parentNode===Wr&&Co(Qr,Gr):Co(Qr,Gr))||Kr&&Qr===Wr)return Qr;if(Qr===Wr)break}while(Qr=ul(Qr))}return null}var el=/\s+/g;function Mi(Qr,Gr,Wr){if(Qr&&Gr)if(Qr.classList)Qr.classList[Wr?"add":"remove"](Gr);else{var Kr=(" "+Qr.className+" ").replace(el," ").replace(" "+Gr+" "," ");Qr.className=(Kr+(Wr?" "+Gr:"")).replace(el," ")}}function Xn(Qr,Gr,Wr){var Kr=Qr&&Qr.style;if(Kr){if(Wr===void 0)return document.defaultView&&document.defaultView.getComputedStyle?Wr=document.defaultView.getComputedStyle(Qr,""):Qr.currentStyle&&(Wr=Qr.currentStyle),Gr===void 0?Wr:Wr[Gr];!(Gr in Kr)&&Gr.indexOf("webkit")===-1&&(Gr="-webkit-"+Gr),Kr[Gr]=Wr+(typeof Wr=="string"?"":"px")}}function Na(Qr,Gr){var Wr="";if(typeof Qr=="string")Wr=Qr;else do{var Kr=Xn(Qr,"transform");Kr&&Kr!=="none"&&(Wr=Kr+" "+Wr)}while(!Gr&&(Qr=Qr.parentNode));var Yr=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return Yr&&new Yr(Wr)}function cl(Qr,Gr,Wr){if(Qr){var Kr=Qr.getElementsByTagName(Gr),Yr=0,Zr=Kr.length;if(Wr)for(;Yr<Zr;Yr++)Wr(Kr[Yr],Yr);return Kr}return[]}function Xi(){var Qr=document.scrollingElement;return Qr||document.documentElement}function bi(Qr,Gr,Wr,Kr,Yr){if(!(!Qr.getBoundingClientRect&&Qr!==window)){var Zr,tn,ln,dn,yn,Sn,kn;if(Qr!==window&&Qr.parentNode&&Qr!==Xi()?(Zr=Qr.getBoundingClientRect(),tn=Zr.top,ln=Zr.left,dn=Zr.bottom,yn=Zr.right,Sn=Zr.height,kn=Zr.width):(tn=0,ln=0,dn=window.innerHeight,yn=window.innerWidth,Sn=window.innerHeight,kn=window.innerWidth),(Gr||Wr)&&Qr!==window&&(Yr=Yr||Qr.parentNode,!ra))do if(Yr&&Yr.getBoundingClientRect&&(Xn(Yr,"transform")!=="none"||Wr&&Xn(Yr,"position")!=="static")){var An=Yr.getBoundingClientRect();tn-=An.top+parseInt(Xn(Yr,"border-top-width")),ln-=An.left+parseInt(Xn(Yr,"border-left-width")),dn=tn+Zr.height,yn=ln+Zr.width;break}while(Yr=Yr.parentNode);if(Kr&&Qr!==window){var Bn=Na(Yr||Qr),jn=Bn&&Bn.a,Vn=Bn&&Bn.d;Bn&&(tn/=Vn,ln/=jn,kn/=jn,Sn/=Vn,dn=tn+Sn,yn=ln+kn)}return{top:tn,left:ln,bottom:dn,right:yn,width:kn,height:Sn}}}function tl(Qr,Gr,Wr){for(var Kr=la(Qr,!0),Yr=bi(Qr)[Gr];Kr;){var Zr=bi(Kr)[Wr],tn=void 0;if(Wr==="top"||Wr==="left"?tn=Yr>=Zr:tn=Yr<=Zr,!tn)return Kr;if(Kr===Xi())break;Kr=la(Kr,!1)}return!1}function La(Qr,Gr,Wr,Kr){for(var Yr=0,Zr=0,tn=Qr.children;Zr<tn.length;){if(tn[Zr].style.display!=="none"&&tn[Zr]!==Qn.ghost&&(Kr||tn[Zr]!==Qn.dragged)&&Vi(tn[Zr],Wr.draggable,Qr,!1)){if(Yr===Gr)return tn[Zr];Yr++}Zr++}return null}function bs(Qr,Gr){for(var Wr=Qr.lastElementChild;Wr&&(Wr===Qn.ghost||Xn(Wr,"display")==="none"||Gr&&!Co(Wr,Gr));)Wr=Wr.previousElementSibling;return Wr||null}function Gi(Qr,Gr){var Wr=0;if(!Qr||!Qr.parentNode)return-1;for(;Qr=Qr.previousElementSibling;)Qr.nodeName.toUpperCase()!=="TEMPLATE"&&Qr!==Qn.clone&&(!Gr||Co(Qr,Gr))&&Wr++;return Wr}function rl(Qr){var Gr=0,Wr=0,Kr=Xi();if(Qr)do{var Yr=Na(Qr),Zr=Yr.a,tn=Yr.d;Gr+=Qr.scrollLeft*Zr,Wr+=Qr.scrollTop*tn}while(Qr!==Kr&&(Qr=Qr.parentNode));return[Gr,Wr]}function uu(Qr,Gr){for(var Wr in Qr)if(Qr.hasOwnProperty(Wr)){for(var Kr in Gr)if(Gr.hasOwnProperty(Kr)&&Gr[Kr]===Qr[Wr][Kr])return Number(Wr)}return-1}function la(Qr,Gr){if(!Qr||!Qr.getBoundingClientRect)return Xi();var Wr=Qr,Kr=!1;do if(Wr.clientWidth<Wr.scrollWidth||Wr.clientHeight<Wr.scrollHeight){var Yr=Xn(Wr);if(Wr.clientWidth<Wr.scrollWidth&&(Yr.overflowX=="auto"||Yr.overflowX=="scroll")||Wr.clientHeight<Wr.scrollHeight&&(Yr.overflowY=="auto"||Yr.overflowY=="scroll")){if(!Wr.getBoundingClientRect||Wr===document.body)return Xi();if(Kr||Gr)return Wr;Kr=!0}}while(Wr=Wr.parentNode);return Xi()}function cu(Qr,Gr){if(Qr&&Gr)for(var Wr in Gr)Gr.hasOwnProperty(Wr)&&(Qr[Wr]=Gr[Wr]);return Qr}function as(Qr,Gr){return Math.round(Qr.top)===Math.round(Gr.top)&&Math.round(Qr.left)===Math.round(Gr.left)&&Math.round(Qr.height)===Math.round(Gr.height)&&Math.round(Qr.width)===Math.round(Gr.width)}var Ka;function fl(Qr,Gr){return function(){if(!Ka){var Wr=arguments,Kr=this;Wr.length===1?Qr.call(Kr,Wr[0]):Qr.apply(Kr,Wr),Ka=setTimeout(function(){Ka=void 0},Gr)}}}function fu(){clearTimeout(Ka),Ka=void 0}function hl(Qr,Gr,Wr){Qr.scrollLeft+=Gr,Qr.scrollTop+=Wr}function dl(Qr){var Gr=window.Polymer,Wr=window.jQuery||window.Zepto;return Gr&&Gr.dom?Gr.dom(Qr).cloneNode(!0):Wr?Wr(Qr).clone(!0)[0]:Qr.cloneNode(!0)}function pl(Qr,Gr,Wr){var Kr={};return Array.from(Qr.children).forEach(function(Yr){var Zr,tn,ln,dn;if(!(!Vi(Yr,Gr.draggable,Qr,!1)||Yr.animated||Yr===Wr)){var yn=bi(Yr);Kr.left=Math.min((Zr=Kr.left)!==null&&Zr!==void 0?Zr:1/0,yn.left),Kr.top=Math.min((tn=Kr.top)!==null&&tn!==void 0?tn:1/0,yn.top),Kr.right=Math.max((ln=Kr.right)!==null&&ln!==void 0?ln:-1/0,yn.right),Kr.bottom=Math.max((dn=Kr.bottom)!==null&&dn!==void 0?dn:-1/0,yn.bottom)}}),Kr.width=Kr.right-Kr.left,Kr.height=Kr.bottom-Kr.top,Kr.x=Kr.left,Kr.y=Kr.top,Kr}var Pi="Sortable"+new Date().getTime();function hu(){var Qr=[],Gr;return{captureAnimationState:function(){if(Qr=[],!!this.options.animation){var Kr=[].slice.call(this.el.children);Kr.forEach(function(Yr){if(!(Xn(Yr,"display")==="none"||Yr===Qn.ghost)){Qr.push({target:Yr,rect:bi(Yr)});var Zr=Qi({},Qr[Qr.length-1].rect);if(Yr.thisAnimationDuration){var tn=Na(Yr,!0);tn&&(Zr.top-=tn.f,Zr.left-=tn.e)}Yr.fromRect=Zr}})}},addAnimationState:function(Kr){Qr.push(Kr)},removeAnimationState:function(Kr){Qr.splice(uu(Qr,{target:Kr}),1)},animateAll:function(Kr){var Yr=this;if(!this.options.animation){clearTimeout(Gr),typeof Kr=="function"&&Kr();return}var Zr=!1,tn=0;Qr.forEach(function(ln){var dn=0,yn=ln.target,Sn=yn.fromRect,kn=bi(yn),An=yn.prevFromRect,Bn=yn.prevToRect,jn=ln.rect,Vn=Na(yn,!0);Vn&&(kn.top-=Vn.f,kn.left-=Vn.e),yn.toRect=kn,yn.thisAnimationDuration&&as(An,kn)&&!as(Sn,kn)&&(jn.top-kn.top)/(jn.left-kn.left)===(Sn.top-kn.top)/(Sn.left-kn.left)&&(dn=pu(jn,An,Bn,Yr.options)),as(kn,Sn)||(yn.prevFromRect=Sn,yn.prevToRect=kn,dn||(dn=Yr.options.animation),Yr.animate(yn,jn,kn,dn)),dn&&(Zr=!0,tn=Math.max(tn,dn),clearTimeout(yn.animationResetTimer),yn.animationResetTimer=setTimeout(function(){yn.animationTime=0,yn.prevFromRect=null,yn.fromRect=null,yn.prevToRect=null,yn.thisAnimationDuration=null},dn),yn.thisAnimationDuration=dn)}),clearTimeout(Gr),Zr?Gr=setTimeout(function(){typeof Kr=="function"&&Kr()},tn):typeof Kr=="function"&&Kr(),Qr=[]},animate:function(Kr,Yr,Zr,tn){if(tn){Xn(Kr,"transition",""),Xn(Kr,"transform","");var ln=Na(this.el),dn=ln&&ln.a,yn=ln&&ln.d,Sn=(Yr.left-Zr.left)/(dn||1),kn=(Yr.top-Zr.top)/(yn||1);Kr.animatingX=!!Sn,Kr.animatingY=!!kn,Xn(Kr,"transform","translate3d("+Sn+"px,"+kn+"px,0)"),this.forRepaintDummy=du(Kr),Xn(Kr,"transition","transform "+tn+"ms"+(this.options.easing?" "+this.options.easing:"")),Xn(Kr,"transform","translate3d(0,0,0)"),typeof Kr.animated=="number"&&clearTimeout(Kr.animated),Kr.animated=setTimeout(function(){Xn(Kr,"transition",""),Xn(Kr,"transform",""),Kr.animated=!1,Kr.animatingX=!1,Kr.animatingY=!1},tn)}}}}function du(Qr){return Qr.offsetWidth}function pu(Qr,Gr,Wr,Kr){return Math.sqrt(Math.pow(Gr.top-Qr.top,2)+Math.pow(Gr.left-Qr.left,2))/Math.sqrt(Math.pow(Gr.top-Wr.top,2)+Math.pow(Gr.left-Wr.left,2))*Kr.animation}var Aa=[],os={initializeByDefault:!0},eo={mount:function(Gr){for(var Wr in os)os.hasOwnProperty(Wr)&&!(Wr in Gr)&&(Gr[Wr]=os[Wr]);Aa.forEach(function(Kr){if(Kr.pluginName===Gr.pluginName)throw"Sortable: Cannot mount plugin ".concat(Gr.pluginName," more than once")}),Aa.push(Gr)},pluginEvent:function(Gr,Wr,Kr){var Yr=this;this.eventCanceled=!1,Kr.cancel=function(){Yr.eventCanceled=!0};var Zr=Gr+"Global";Aa.forEach(function(tn){Wr[tn.pluginName]&&(Wr[tn.pluginName][Zr]&&Wr[tn.pluginName][Zr](Qi({sortable:Wr},Kr)),Wr.options[tn.pluginName]&&Wr[tn.pluginName][Gr]&&Wr[tn.pluginName][Gr](Qi({sortable:Wr},Kr)))})},initializePlugins:function(Gr,Wr,Kr,Yr){Aa.forEach(function(ln){var dn=ln.pluginName;if(!(!Gr.options[dn]&&!ln.initializeByDefault)){var yn=new ln(Gr,Wr,Gr.options);yn.sortable=Gr,yn.options=Gr.options,Gr[dn]=yn,ta(Kr,yn.defaults)}});for(var Zr in Gr.options)if(Gr.options.hasOwnProperty(Zr)){var tn=this.modifyOption(Gr,Zr,Gr.options[Zr]);typeof tn<"u"&&(Gr.options[Zr]=tn)}},getEventProperties:function(Gr,Wr){var Kr={};return Aa.forEach(function(Yr){typeof Yr.eventProperties=="function"&&ta(Kr,Yr.eventProperties.call(Wr[Yr.pluginName],Gr))}),Kr},modifyOption:function(Gr,Wr,Kr){var Yr;return Aa.forEach(function(Zr){Gr[Zr.pluginName]&&Zr.optionListeners&&typeof Zr.optionListeners[Wr]=="function"&&(Yr=Zr.optionListeners[Wr].call(Gr[Zr.pluginName],Kr))}),Yr}};function mu(Qr){var Gr=Qr.sortable,Wr=Qr.rootEl,Kr=Qr.name,Yr=Qr.targetEl,Zr=Qr.cloneEl,tn=Qr.toEl,ln=Qr.fromEl,dn=Qr.oldIndex,yn=Qr.newIndex,Sn=Qr.oldDraggableIndex,kn=Qr.newDraggableIndex,An=Qr.originalEvent,Bn=Qr.putSortable,jn=Qr.extraEventProperties;if(Gr=Gr||Wr&&Wr[Pi],!!Gr){var Vn,ti=Gr.options,si="on"+Kr.charAt(0).toUpperCase()+Kr.substr(1);window.CustomEvent&&!ra&&!Za?Vn=new CustomEvent(Kr,{bubbles:!0,cancelable:!0}):(Vn=document.createEvent("Event"),Vn.initEvent(Kr,!0,!0)),Vn.to=tn||Wr,Vn.from=ln||Wr,Vn.item=Yr||Wr,Vn.clone=Zr,Vn.oldIndex=dn,Vn.newIndex=yn,Vn.oldDraggableIndex=Sn,Vn.newDraggableIndex=kn,Vn.originalEvent=An,Vn.pullMode=Bn?Bn.lastPutMode:void 0;var ri=Qi(Qi({},jn),eo.getEventProperties(Kr,Gr));for(var oi in ri)Vn[oi]=ri[oi];Wr&&Wr.dispatchEvent(Vn),ti[si]&&ti[si].call(Gr,Vn)}}var gu=["evt"],Di=function(Gr,Wr){var Kr=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},Yr=Kr.evt,Zr=su(Kr,gu);eo.pluginEvent.bind(Qn)(Gr,Wr,Qi({dragEl:qn,parentEl:di,ghostEl:Yn,rootEl:fi,nextEl:va,lastDownEl:xo,cloneEl:hi,cloneHidden:sa,dragStarted:Va,putSortable:wi,activeSortable:Qn.active,originalEvent:Yr,oldIndex:Ra,oldDraggableIndex:Ya,newIndex:Fi,newDraggableIndex:oa,hideGhostForTarget:yl,unhideGhostForTarget:bl,cloneNowHidden:function(){sa=!0},cloneNowShown:function(){sa=!1},dispatchSortableEvent:function(ln){Oi({sortable:Wr,name:ln,originalEvent:Yr})}},Zr))};function Oi(Qr){mu(Qi({putSortable:wi,cloneEl:hi,targetEl:qn,rootEl:fi,oldIndex:Ra,oldDraggableIndex:Ya,newIndex:Fi,newDraggableIndex:oa},Qr))}var qn,di,Yn,fi,va,xo,hi,sa,Ra,Fi,Ya,oa,vo,wi,Pa=!1,Io=!1,Oo=[],ma,zi,ss,ls,nl,il,Va,Da,$a,Ja=!1,yo=!1,So,Ii,us=[],ps=!1,Ao=[],Po=typeof document<"u",bo=ys,al=Za||ra?"cssFloat":"float",vu=Po&&!sl&&!ys&&"draggable"in document.createElement("div"),ml=function(){if(Po){if(ra)return!1;var Qr=document.createElement("x");return Qr.style.cssText="pointer-events:auto",Qr.style.pointerEvents==="auto"}}(),gl=function(Gr,Wr){var Kr=Xn(Gr),Yr=parseInt(Kr.width)-parseInt(Kr.paddingLeft)-parseInt(Kr.paddingRight)-parseInt(Kr.borderLeftWidth)-parseInt(Kr.borderRightWidth),Zr=La(Gr,0,Wr),tn=La(Gr,1,Wr),ln=Zr&&Xn(Zr),dn=tn&&Xn(tn),yn=ln&&parseInt(ln.marginLeft)+parseInt(ln.marginRight)+bi(Zr).width,Sn=dn&&parseInt(dn.marginLeft)+parseInt(dn.marginRight)+bi(tn).width;if(Kr.display==="flex")return Kr.flexDirection==="column"||Kr.flexDirection==="column-reverse"?"vertical":"horizontal";if(Kr.display==="grid")return Kr.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(Zr&&ln.float&&ln.float!=="none"){var kn=ln.float==="left"?"left":"right";return tn&&(dn.clear==="both"||dn.clear===kn)?"vertical":"horizontal"}return Zr&&(ln.display==="block"||ln.display==="flex"||ln.display==="table"||ln.display==="grid"||yn>=Yr&&Kr[al]==="none"||tn&&Kr[al]==="none"&&yn+Sn>Yr)?"vertical":"horizontal"},yu=function(Gr,Wr,Kr){var Yr=Kr?Gr.left:Gr.top,Zr=Kr?Gr.right:Gr.bottom,tn=Kr?Gr.width:Gr.height,ln=Kr?Wr.left:Wr.top,dn=Kr?Wr.right:Wr.bottom,yn=Kr?Wr.width:Wr.height;return Yr===ln||Zr===dn||Yr+tn/2===ln+yn/2},bu=function(Gr,Wr){var Kr;return Oo.some(function(Yr){var Zr=Yr[Pi].options.emptyInsertThreshold;if(!(!Zr||bs(Yr))){var tn=bi(Yr),ln=Gr>=tn.left-Zr&&Gr<=tn.right+Zr,dn=Wr>=tn.top-Zr&&Wr<=tn.bottom+Zr;if(ln&&dn)return Kr=Yr}}),Kr},vl=function(Gr){function Wr(Zr,tn){return function(ln,dn,yn,Sn){var kn=ln.options.group.name&&dn.options.group.name&&ln.options.group.name===dn.options.group.name;if(Zr==null&&(tn||kn))return!0;if(Zr==null||Zr===!1)return!1;if(tn&&Zr==="clone")return Zr;if(typeof Zr=="function")return Wr(Zr(ln,dn,yn,Sn),tn)(ln,dn,yn,Sn);var An=(tn?ln:dn).options.group.name;return Zr===!0||typeof Zr=="string"&&Zr===An||Zr.join&&Zr.indexOf(An)>-1}}var Kr={},Yr=Gr.group;(!Yr||To(Yr)!="object")&&(Yr={name:Yr}),Kr.name=Yr.name,Kr.checkPull=Wr(Yr.pull,!0),Kr.checkPut=Wr(Yr.put),Kr.revertClone=Yr.revertClone,Gr.group=Kr},yl=function(){!ml&&Yn&&Xn(Yn,"display","none")},bl=function(){!ml&&Yn&&Xn(Yn,"display","")};Po&&!sl&&document.addEventListener("click",function(Qr){if(Io)return Qr.preventDefault(),Qr.stopPropagation&&Qr.stopPropagation(),Qr.stopImmediatePropagation&&Qr.stopImmediatePropagation(),Io=!1,!1},!0);var ga=function(Gr){if(qn){Gr=Gr.touches?Gr.touches[0]:Gr;var Wr=bu(Gr.clientX,Gr.clientY);if(Wr){var Kr={};for(var Yr in Gr)Gr.hasOwnProperty(Yr)&&(Kr[Yr]=Gr[Yr]);Kr.target=Kr.rootEl=Wr,Kr.preventDefault=void 0,Kr.stopPropagation=void 0,Wr[Pi]._onDragOver(Kr)}}},Eu=function(Gr){qn&&qn.parentNode[Pi]._isOutsideThisEl(Gr.target)};function Qn(Qr,Gr){if(!(Qr&&Qr.nodeType&&Qr.nodeType===1))throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(Qr));this.el=Qr,this.options=Gr=ta({},Gr),Qr[Pi]=this;var Wr={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(Qr.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return gl(Qr,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(tn,ln){tn.setData("Text",ln.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:Qn.supportPointer!==!1&&"PointerEvent"in window&&(!Qa||ys),emptyInsertThreshold:5};eo.initializePlugins(this,Qr,Wr);for(var Kr in Wr)!(Kr in Gr)&&(Gr[Kr]=Wr[Kr]);vl(Gr);for(var Yr in this)Yr.charAt(0)==="_"&&typeof this[Yr]=="function"&&(this[Yr]=this[Yr].bind(this));this.nativeDraggable=Gr.forceFallback?!1:vu,this.nativeDraggable&&(this.options.touchStartThreshold=1),Gr.supportPointer?ei(Qr,"pointerdown",this._onTapStart):(ei(Qr,"mousedown",this._onTapStart),ei(Qr,"touchstart",this._onTapStart)),this.nativeDraggable&&(ei(Qr,"dragover",this),ei(Qr,"dragenter",this)),Oo.push(this.el),Gr.store&&Gr.store.get&&this.sort(Gr.store.get(this)||[]),ta(this,hu())}Qn.prototype={constructor:Qn,_isOutsideThisEl:function(Gr){!this.el.contains(Gr)&&Gr!==this.el&&(Da=null)},_getDirection:function(Gr,Wr){return typeof this.options.direction=="function"?this.options.direction.call(this,Gr,Wr,qn):this.options.direction},_onTapStart:function(Gr){if(Gr.cancelable){var Wr=this,Kr=this.el,Yr=this.options,Zr=Yr.preventOnFilter,tn=Gr.type,ln=Gr.touches&&Gr.touches[0]||Gr.pointerType&&Gr.pointerType==="touch"&&Gr,dn=(ln||Gr).target,yn=Gr.target.shadowRoot&&(Gr.path&&Gr.path[0]||Gr.composedPath&&Gr.composedPath()[0])||dn,Sn=Yr.filter;if(Ou(Kr),!qn&&!(/mousedown|pointerdown/.test(tn)&&Gr.button!==0||Yr.disabled)&&!yn.isContentEditable&&!(!this.nativeDraggable&&Qa&&dn&&dn.tagName.toUpperCase()==="SELECT")&&(dn=Vi(dn,Yr.draggable,Kr,!1),!(dn&&dn.animated)&&xo!==dn)){if(Ra=Gi(dn),Ya=Gi(dn,Yr.draggable),typeof Sn=="function"){if(Sn.call(this,Gr,dn,this)){Oi({sortable:Wr,rootEl:yn,name:"filter",targetEl:dn,toEl:Kr,fromEl:Kr}),Di("filter",Wr,{evt:Gr}),Zr&&Gr.preventDefault();return}}else if(Sn&&(Sn=Sn.split(",").some(function(kn){if(kn=Vi(yn,kn.trim(),Kr,!1),kn)return Oi({sortable:Wr,rootEl:kn,name:"filter",targetEl:dn,fromEl:Kr,toEl:Kr}),Di("filter",Wr,{evt:Gr}),!0}),Sn)){Zr&&Gr.preventDefault();return}Yr.handle&&!Vi(yn,Yr.handle,Kr,!1)||this._prepareDragStart(Gr,ln,dn)}}},_prepareDragStart:function(Gr,Wr,Kr){var Yr=this,Zr=Yr.el,tn=Yr.options,ln=Zr.ownerDocument,dn;if(Kr&&!qn&&Kr.parentNode===Zr){var yn=bi(Kr);if(fi=Zr,qn=Kr,di=qn.parentNode,va=qn.nextSibling,xo=Kr,vo=tn.group,Qn.dragged=qn,ma={target:qn,clientX:(Wr||Gr).clientX,clientY:(Wr||Gr).clientY},nl=ma.clientX-yn.left,il=ma.clientY-yn.top,this._lastX=(Wr||Gr).clientX,this._lastY=(Wr||Gr).clientY,qn.style["will-change"]="all",dn=function(){if(Di("delayEnded",Yr,{evt:Gr}),Qn.eventCanceled){Yr._onDrop();return}Yr._disableDelayedDragEvents(),!Zs&&Yr.nativeDraggable&&(qn.draggable=!0),Yr._triggerDragStart(Gr,Wr),Oi({sortable:Yr,name:"choose",originalEvent:Gr}),Mi(qn,tn.chosenClass,!0)},tn.ignore.split(",").forEach(function(Sn){cl(qn,Sn.trim(),cs)}),ei(ln,"dragover",ga),ei(ln,"mousemove",ga),ei(ln,"touchmove",ga),tn.supportPointer?(ei(ln,"pointerup",Yr._onDrop),!this.nativeDraggable&&ei(ln,"pointercancel",Yr._onDrop)):(ei(ln,"mouseup",Yr._onDrop),ei(ln,"touchend",Yr._onDrop),ei(ln,"touchcancel",Yr._onDrop)),Zs&&this.nativeDraggable&&(this.options.touchStartThreshold=4,qn.draggable=!0),Di("delayStart",this,{evt:Gr}),tn.delay&&(!tn.delayOnTouchOnly||Wr)&&(!this.nativeDraggable||!(Za||ra))){if(Qn.eventCanceled){this._onDrop();return}tn.supportPointer?(ei(ln,"pointerup",Yr._disableDelayedDrag),ei(ln,"pointercancel",Yr._disableDelayedDrag)):(ei(ln,"mouseup",Yr._disableDelayedDrag),ei(ln,"touchend",Yr._disableDelayedDrag),ei(ln,"touchcancel",Yr._disableDelayedDrag)),ei(ln,"mousemove",Yr._delayedDragTouchMoveHandler),ei(ln,"touchmove",Yr._delayedDragTouchMoveHandler),tn.supportPointer&&ei(ln,"pointermove",Yr._delayedDragTouchMoveHandler),Yr._dragStartTimer=setTimeout(dn,tn.delay)}else dn()}},_delayedDragTouchMoveHandler:function(Gr){var Wr=Gr.touches?Gr.touches[0]:Gr;Math.max(Math.abs(Wr.clientX-this._lastX),Math.abs(Wr.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){qn&&cs(qn),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var Gr=this.el.ownerDocument;Zn(Gr,"mouseup",this._disableDelayedDrag),Zn(Gr,"touchend",this._disableDelayedDrag),Zn(Gr,"touchcancel",this._disableDelayedDrag),Zn(Gr,"pointerup",this._disableDelayedDrag),Zn(Gr,"pointercancel",this._disableDelayedDrag),Zn(Gr,"mousemove",this._delayedDragTouchMoveHandler),Zn(Gr,"touchmove",this._delayedDragTouchMoveHandler),Zn(Gr,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(Gr,Wr){Wr=Wr||Gr.pointerType=="touch"&&Gr,!this.nativeDraggable||Wr?this.options.supportPointer?ei(document,"pointermove",this._onTouchMove):Wr?ei(document,"touchmove",this._onTouchMove):ei(document,"mousemove",this._onTouchMove):(ei(qn,"dragend",this),ei(fi,"dragstart",this._onDragStart));try{document.selection?wo(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function(Gr,Wr){if(Pa=!1,fi&&qn){Di("dragStarted",this,{evt:Wr}),this.nativeDraggable&&ei(document,"dragover",Eu);var Kr=this.options;!Gr&&Mi(qn,Kr.dragClass,!1),Mi(qn,Kr.ghostClass,!0),Qn.active=this,Gr&&this._appendGhost(),Oi({sortable:this,name:"start",originalEvent:Wr})}else this._nulling()},_emulateDragOver:function(){if(zi){this._lastX=zi.clientX,this._lastY=zi.clientY,yl();for(var Gr=document.elementFromPoint(zi.clientX,zi.clientY),Wr=Gr;Gr&&Gr.shadowRoot&&(Gr=Gr.shadowRoot.elementFromPoint(zi.clientX,zi.clientY),Gr!==Wr);)Wr=Gr;if(qn.parentNode[Pi]._isOutsideThisEl(Gr),Wr)do{if(Wr[Pi]){var Kr=void 0;if(Kr=Wr[Pi]._onDragOver({clientX:zi.clientX,clientY:zi.clientY,target:Gr,rootEl:Wr}),Kr&&!this.options.dragoverBubble)break}Gr=Wr}while(Wr=ul(Wr));bl()}},_onTouchMove:function(Gr){if(ma){var Wr=this.options,Kr=Wr.fallbackTolerance,Yr=Wr.fallbackOffset,Zr=Gr.touches?Gr.touches[0]:Gr,tn=Yn&&Na(Yn,!0),ln=Yn&&tn&&tn.a,dn=Yn&&tn&&tn.d,yn=bo&&Ii&&rl(Ii),Sn=(Zr.clientX-ma.clientX+Yr.x)/(ln||1)+(yn?yn[0]-us[0]:0)/(ln||1),kn=(Zr.clientY-ma.clientY+Yr.y)/(dn||1)+(yn?yn[1]-us[1]:0)/(dn||1);if(!Qn.active&&!Pa){if(Kr&&Math.max(Math.abs(Zr.clientX-this._lastX),Math.abs(Zr.clientY-this._lastY))<Kr)return;this._onDragStart(Gr,!0)}if(Yn){tn?(tn.e+=Sn-(ss||0),tn.f+=kn-(ls||0)):tn={a:1,b:0,c:0,d:1,e:Sn,f:kn};var An="matrix(".concat(tn.a,",").concat(tn.b,",").concat(tn.c,",").concat(tn.d,",").concat(tn.e,",").concat(tn.f,")");Xn(Yn,"webkitTransform",An),Xn(Yn,"mozTransform",An),Xn(Yn,"msTransform",An),Xn(Yn,"transform",An),ss=Sn,ls=kn,zi=Zr}Gr.cancelable&&Gr.preventDefault()}},_appendGhost:function(){if(!Yn){var Gr=this.options.fallbackOnBody?document.body:fi,Wr=bi(qn,!0,bo,!0,Gr),Kr=this.options;if(bo){for(Ii=Gr;Xn(Ii,"position")==="static"&&Xn(Ii,"transform")==="none"&&Ii!==document;)Ii=Ii.parentNode;Ii!==document.body&&Ii!==document.documentElement?(Ii===document&&(Ii=Xi()),Wr.top+=Ii.scrollTop,Wr.left+=Ii.scrollLeft):Ii=Xi(),us=rl(Ii)}Yn=qn.cloneNode(!0),Mi(Yn,Kr.ghostClass,!1),Mi(Yn,Kr.fallbackClass,!0),Mi(Yn,Kr.dragClass,!0),Xn(Yn,"transition",""),Xn(Yn,"transform",""),Xn(Yn,"box-sizing","border-box"),Xn(Yn,"margin",0),Xn(Yn,"top",Wr.top),Xn(Yn,"left",Wr.left),Xn(Yn,"width",Wr.width),Xn(Yn,"height",Wr.height),Xn(Yn,"opacity","0.8"),Xn(Yn,"position",bo?"absolute":"fixed"),Xn(Yn,"zIndex","100000"),Xn(Yn,"pointerEvents","none"),Qn.ghost=Yn,Gr.appendChild(Yn),Xn(Yn,"transform-origin",nl/parseInt(Yn.style.width)*100+"% "+il/parseInt(Yn.style.height)*100+"%")}},_onDragStart:function(Gr,Wr){var Kr=this,Yr=Gr.dataTransfer,Zr=Kr.options;if(Di("dragStart",this,{evt:Gr}),Qn.eventCanceled){this._onDrop();return}Di("setupClone",this),Qn.eventCanceled||(hi=dl(qn),hi.removeAttribute("id"),hi.draggable=!1,hi.style["will-change"]="",this._hideClone(),Mi(hi,this.options.chosenClass,!1),Qn.clone=hi),Kr.cloneId=wo(function(){Di("clone",Kr),!Qn.eventCanceled&&(Kr.options.removeCloneOnHide||fi.insertBefore(hi,qn),Kr._hideClone(),Oi({sortable:Kr,name:"clone"}))}),!Wr&&Mi(qn,Zr.dragClass,!0),Wr?(Io=!0,Kr._loopId=setInterval(Kr._emulateDragOver,50)):(Zn(document,"mouseup",Kr._onDrop),Zn(document,"touchend",Kr._onDrop),Zn(document,"touchcancel",Kr._onDrop),Yr&&(Yr.effectAllowed="move",Zr.setData&&Zr.setData.call(Kr,Yr,qn)),ei(document,"drop",Kr),Xn(qn,"transform","translateZ(0)")),Pa=!0,Kr._dragStartId=wo(Kr._dragStarted.bind(Kr,Wr,Gr)),ei(document,"selectstart",Kr),Va=!0,window.getSelection().removeAllRanges(),Qa&&Xn(document.body,"user-select","none")},_onDragOver:function(Gr){var Wr=this.el,Kr=Gr.target,Yr,Zr,tn,ln=this.options,dn=ln.group,yn=Qn.active,Sn=vo===dn,kn=ln.sort,An=wi||yn,Bn,jn=this,Vn=!1;if(ps)return;function ti(hn,On){Di(hn,jn,Qi({evt:Gr,isOwner:Sn,axis:Bn?"vertical":"horizontal",revert:tn,dragRect:Yr,targetRect:Zr,canSort:kn,fromSortable:An,target:Kr,completed:ri,onMove:function(Nn,Dn){return Eo(fi,Wr,qn,Yr,Nn,bi(Nn),Gr,Dn)},changed:oi},On))}function si(){ti("dragOverAnimationCapture"),jn.captureAnimationState(),jn!==An&&An.captureAnimationState()}function ri(hn){return ti("dragOverCompleted",{insertion:hn}),hn&&(Sn?yn._hideClone():yn._showClone(jn),jn!==An&&(Mi(qn,wi?wi.options.ghostClass:yn.options.ghostClass,!1),Mi(qn,ln.ghostClass,!0)),wi!==jn&&jn!==Qn.active?wi=jn:jn===Qn.active&&wi&&(wi=null),An===jn&&(jn._ignoreWhileAnimating=Kr),jn.animateAll(function(){ti("dragOverAnimationComplete"),jn._ignoreWhileAnimating=null}),jn!==An&&(An.animateAll(),An._ignoreWhileAnimating=null)),(Kr===qn&&!qn.animated||Kr===Wr&&!Kr.animated)&&(Da=null),!ln.dragoverBubble&&!Gr.rootEl&&Kr!==document&&(qn.parentNode[Pi]._isOutsideThisEl(Gr.target),!hn&&ga(Gr)),!ln.dragoverBubble&&Gr.stopPropagation&&Gr.stopPropagation(),Vn=!0}function oi(){Fi=Gi(qn),oa=Gi(qn,ln.draggable),Oi({sortable:jn,name:"change",toEl:Wr,newIndex:Fi,newDraggableIndex:oa,originalEvent:Gr})}if(Gr.preventDefault!==void 0&&Gr.cancelable&&Gr.preventDefault(),Kr=Vi(Kr,ln.draggable,Wr,!0),ti("dragOver"),Qn.eventCanceled)return Vn;if(qn.contains(Gr.target)||Kr.animated&&Kr.animatingX&&Kr.animatingY||jn._ignoreWhileAnimating===Kr)return ri(!1);if(Io=!1,yn&&!ln.disabled&&(Sn?kn||(tn=di!==fi):wi===this||(this.lastPutMode=vo.checkPull(this,yn,qn,Gr))&&dn.checkPut(this,yn,qn,Gr))){if(Bn=this._getDirection(Gr,Kr)==="vertical",Yr=bi(qn),ti("dragOverValid"),Qn.eventCanceled)return Vn;if(tn)return di=fi,si(),this._hideClone(),ti("revert"),Qn.eventCanceled||(va?fi.insertBefore(qn,va):fi.appendChild(qn)),ri(!0);var Jn=bs(Wr,ln.draggable);if(!Jn||wu(Gr,Bn,this)&&!Jn.animated){if(Jn===qn)return ri(!1);if(Jn&&Wr===Gr.target&&(Kr=Jn),Kr&&(Zr=bi(Kr)),Eo(fi,Wr,qn,Yr,Kr,Zr,Gr,!!Kr)!==!1)return si(),Jn&&Jn.nextSibling?Wr.insertBefore(qn,Jn.nextSibling):Wr.appendChild(qn),di=Wr,oi(),ri(!0)}else if(Jn&&Su(Gr,Bn,this)){var gi=La(Wr,0,ln,!0);if(gi===qn)return ri(!1);if(Kr=gi,Zr=bi(Kr),Eo(fi,Wr,qn,Yr,Kr,Zr,Gr,!1)!==!1)return si(),Wr.insertBefore(qn,gi),di=Wr,oi(),ri(!0)}else if(Kr.parentNode===Wr){Zr=bi(Kr);var li=0,Ui,vi=qn.parentNode!==Wr,ni=!yu(qn.animated&&qn.toRect||Yr,Kr.animated&&Kr.toRect||Zr,Bn),xn=Bn?"top":"left",en=tl(Kr,"top","top")||tl(qn,"top","top"),an=en?en.scrollTop:void 0;Da!==Kr&&(Ui=Zr[xn],Ja=!1,yo=!ni&&ln.invertSwap||vi),li=ku(Gr,Kr,Zr,Bn,ni?1:ln.swapThreshold,ln.invertedSwapThreshold==null?ln.swapThreshold:ln.invertedSwapThreshold,yo,Da===Kr);var pn;if(li!==0){var mn=Gi(qn);do mn-=li,pn=di.children[mn];while(pn&&(Xn(pn,"display")==="none"||pn===Yn))}if(li===0||pn===Kr)return ri(!1);Da=Kr,$a=li;var wn=Kr.nextElementSibling,vn=!1;vn=li===1;var bn=Eo(fi,Wr,qn,Yr,Kr,Zr,Gr,vn);if(bn!==!1)return(bn===1||bn===-1)&&(vn=bn===1),ps=!0,setTimeout(xu,30),si(),vn&&!wn?Wr.appendChild(qn):Kr.parentNode.insertBefore(qn,vn?wn:Kr),en&&hl(en,0,an-en.scrollTop),di=qn.parentNode,Ui!==void 0&&!yo&&(So=Math.abs(Ui-bi(Kr)[xn])),oi(),ri(!0)}if(Wr.contains(qn))return ri(!1)}return!1},_ignoreWhileAnimating:null,_offMoveEvents:function(){Zn(document,"mousemove",this._onTouchMove),Zn(document,"touchmove",this._onTouchMove),Zn(document,"pointermove",this._onTouchMove),Zn(document,"dragover",ga),Zn(document,"mousemove",ga),Zn(document,"touchmove",ga)},_offUpEvents:function(){var Gr=this.el.ownerDocument;Zn(Gr,"mouseup",this._onDrop),Zn(Gr,"touchend",this._onDrop),Zn(Gr,"pointerup",this._onDrop),Zn(Gr,"pointercancel",this._onDrop),Zn(Gr,"touchcancel",this._onDrop),Zn(document,"selectstart",this)},_onDrop:function(Gr){var Wr=this.el,Kr=this.options;if(Fi=Gi(qn),oa=Gi(qn,Kr.draggable),Di("drop",this,{evt:Gr}),di=qn&&qn.parentNode,Fi=Gi(qn),oa=Gi(qn,Kr.draggable),Qn.eventCanceled){this._nulling();return}Pa=!1,yo=!1,Ja=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),ms(this.cloneId),ms(this._dragStartId),this.nativeDraggable&&(Zn(document,"drop",this),Zn(Wr,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),Qa&&Xn(document.body,"user-select",""),Xn(qn,"transform",""),Gr&&(Va&&(Gr.cancelable&&Gr.preventDefault(),!Kr.dropBubble&&Gr.stopPropagation()),Yn&&Yn.parentNode&&Yn.parentNode.removeChild(Yn),(fi===di||wi&&wi.lastPutMode!=="clone")&&hi&&hi.parentNode&&hi.parentNode.removeChild(hi),qn&&(this.nativeDraggable&&Zn(qn,"dragend",this),cs(qn),qn.style["will-change"]="",Va&&!Pa&&Mi(qn,wi?wi.options.ghostClass:this.options.ghostClass,!1),Mi(qn,this.options.chosenClass,!1),Oi({sortable:this,name:"unchoose",toEl:di,newIndex:null,newDraggableIndex:null,originalEvent:Gr}),fi!==di?(Fi>=0&&(Oi({rootEl:di,name:"add",toEl:di,fromEl:fi,originalEvent:Gr}),Oi({sortable:this,name:"remove",toEl:di,originalEvent:Gr}),Oi({rootEl:di,name:"sort",toEl:di,fromEl:fi,originalEvent:Gr}),Oi({sortable:this,name:"sort",toEl:di,originalEvent:Gr})),wi&&wi.save()):Fi!==Ra&&Fi>=0&&(Oi({sortable:this,name:"update",toEl:di,originalEvent:Gr}),Oi({sortable:this,name:"sort",toEl:di,originalEvent:Gr})),Qn.active&&((Fi==null||Fi===-1)&&(Fi=Ra,oa=Ya),Oi({sortable:this,name:"end",toEl:di,originalEvent:Gr}),this.save()))),this._nulling()},_nulling:function(){Di("nulling",this),fi=qn=di=Yn=va=hi=xo=sa=ma=zi=Va=Fi=oa=Ra=Ya=Da=$a=wi=vo=Qn.dragged=Qn.ghost=Qn.clone=Qn.active=null,Ao.forEach(function(Gr){Gr.checked=!0}),Ao.length=ss=ls=0},handleEvent:function(Gr){switch(Gr.type){case"drop":case"dragend":this._onDrop(Gr);break;case"dragenter":case"dragover":qn&&(this._onDragOver(Gr),Tu(Gr));break;case"selectstart":Gr.preventDefault();break}},toArray:function(){for(var Gr=[],Wr,Kr=this.el.children,Yr=0,Zr=Kr.length,tn=this.options;Yr<Zr;Yr++)Wr=Kr[Yr],Vi(Wr,tn.draggable,this.el,!1)&&Gr.push(Wr.getAttribute(tn.dataIdAttr)||Iu(Wr));return Gr},sort:function(Gr,Wr){var Kr={},Yr=this.el;this.toArray().forEach(function(Zr,tn){var ln=Yr.children[tn];Vi(ln,this.options.draggable,Yr,!1)&&(Kr[Zr]=ln)},this),Wr&&this.captureAnimationState(),Gr.forEach(function(Zr){Kr[Zr]&&(Yr.removeChild(Kr[Zr]),Yr.appendChild(Kr[Zr]))}),Wr&&this.animateAll()},save:function(){var Gr=this.options.store;Gr&&Gr.set&&Gr.set(this)},closest:function(Gr,Wr){return Vi(Gr,Wr||this.options.draggable,this.el,!1)},option:function(Gr,Wr){var Kr=this.options;if(Wr===void 0)return Kr[Gr];var Yr=eo.modifyOption(this,Gr,Wr);typeof Yr<"u"?Kr[Gr]=Yr:Kr[Gr]=Wr,Gr==="group"&&vl(Kr)},destroy:function(){Di("destroy",this);var Gr=this.el;Gr[Pi]=null,Zn(Gr,"mousedown",this._onTapStart),Zn(Gr,"touchstart",this._onTapStart),Zn(Gr,"pointerdown",this._onTapStart),this.nativeDraggable&&(Zn(Gr,"dragover",this),Zn(Gr,"dragenter",this)),Array.prototype.forEach.call(Gr.querySelectorAll("[draggable]"),function(Wr){Wr.removeAttribute("draggable")}),this._onDrop(),this._disableDelayedDragEvents(),Oo.splice(Oo.indexOf(this.el),1),this.el=Gr=null},_hideClone:function(){if(!sa){if(Di("hideClone",this),Qn.eventCanceled)return;Xn(hi,"display","none"),this.options.removeCloneOnHide&&hi.parentNode&&hi.parentNode.removeChild(hi),sa=!0}},_showClone:function(Gr){if(Gr.lastPutMode!=="clone"){this._hideClone();return}if(sa){if(Di("showClone",this),Qn.eventCanceled)return;qn.parentNode==fi&&!this.options.group.revertClone?fi.insertBefore(hi,qn):va?fi.insertBefore(hi,va):fi.appendChild(hi),this.options.group.revertClone&&this.animate(qn,hi),Xn(hi,"display",""),sa=!1}}};function Tu(Qr){Qr.dataTransfer&&(Qr.dataTransfer.dropEffect="move"),Qr.cancelable&&Qr.preventDefault()}function Eo(Qr,Gr,Wr,Kr,Yr,Zr,tn,ln){var dn,yn=Qr[Pi],Sn=yn.options.onMove,kn;return window.CustomEvent&&!ra&&!Za?dn=new CustomEvent("move",{bubbles:!0,cancelable:!0}):(dn=document.createEvent("Event"),dn.initEvent("move",!0,!0)),dn.to=Gr,dn.from=Qr,dn.dragged=Wr,dn.draggedRect=Kr,dn.related=Yr||Gr,dn.relatedRect=Zr||bi(Gr),dn.willInsertAfter=ln,dn.originalEvent=tn,Qr.dispatchEvent(dn),Sn&&(kn=Sn.call(yn,dn,tn)),kn}function cs(Qr){Qr.draggable=!1}function xu(){ps=!1}function Su(Qr,Gr,Wr){var Kr=bi(La(Wr.el,0,Wr.options,!0)),Yr=pl(Wr.el,Wr.options,Yn),Zr=10;return Gr?Qr.clientX<Yr.left-Zr||Qr.clientY<Kr.top&&Qr.clientX<Kr.right:Qr.clientY<Yr.top-Zr||Qr.clientY<Kr.bottom&&Qr.clientX<Kr.left}function wu(Qr,Gr,Wr){var Kr=bi(bs(Wr.el,Wr.options.draggable)),Yr=pl(Wr.el,Wr.options,Yn),Zr=10;return Gr?Qr.clientX>Yr.right+Zr||Qr.clientY>Kr.bottom&&Qr.clientX>Kr.left:Qr.clientY>Yr.bottom+Zr||Qr.clientX>Kr.right&&Qr.clientY>Kr.top}function ku(Qr,Gr,Wr,Kr,Yr,Zr,tn,ln){var dn=Kr?Qr.clientY:Qr.clientX,yn=Kr?Wr.height:Wr.width,Sn=Kr?Wr.top:Wr.left,kn=Kr?Wr.bottom:Wr.right,An=!1;if(!tn){if(ln&&So<yn*Yr){if(!Ja&&($a===1?dn>Sn+yn*Zr/2:dn<kn-yn*Zr/2)&&(Ja=!0),Ja)An=!0;else if($a===1?dn<Sn+So:dn>kn-So)return-$a}else if(dn>Sn+yn*(1-Yr)/2&&dn<kn-yn*(1-Yr)/2)return Cu(Gr)}return An=An||tn,An&&(dn<Sn+yn*Zr/2||dn>kn-yn*Zr/2)?dn>Sn+yn/2?1:-1:0}function Cu(Qr){return Gi(qn)<Gi(Qr)?1:-1}function Iu(Qr){for(var Gr=Qr.tagName+Qr.className+Qr.src+Qr.href+Qr.textContent,Wr=Gr.length,Kr=0;Wr--;)Kr+=Gr.charCodeAt(Wr);return Kr.toString(36)}function Ou(Qr){Ao.length=0;for(var Gr=Qr.getElementsByTagName("input"),Wr=Gr.length;Wr--;){var Kr=Gr[Wr];Kr.checked&&Ao.push(Kr)}}function wo(Qr){return setTimeout(Qr,0)}function ms(Qr){return clearTimeout(Qr)}Po&&ei(document,"touchmove",function(Qr){(Qn.active||Pa)&&Qr.cancelable&&Qr.preventDefault()});Qn.utils={on:ei,off:Zn,css:Xn,find:cl,is:function(Gr,Wr){return!!Vi(Gr,Wr,Gr,!1)},extend:cu,throttle:fl,closest:Vi,toggleClass:Mi,clone:dl,index:Gi,nextTick:wo,cancelNextTick:ms,detectDirection:gl,getChild:La,expando:Pi};Qn.get=function(Qr){return Qr[Pi]};Qn.mount=function(){for(var Qr=arguments.length,Gr=new Array(Qr),Wr=0;Wr<Qr;Wr++)Gr[Wr]=arguments[Wr];Gr[0].constructor===Array&&(Gr=Gr[0]),Gr.forEach(function(Kr){if(!Kr.prototype||!Kr.prototype.constructor)throw"Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(Kr));Kr.utils&&(Qn.utils=Qi(Qi({},Qn.utils),Kr.utils)),eo.mount(Kr)})};Qn.create=function(Qr,Gr){return new Qn(Qr,Gr)};Qn.version=lu;var yi=[],Wa,gs,vs=!1,fs,hs,Do,Xa;function Au(){function Qr(){this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0};for(var Gr in this)Gr.charAt(0)==="_"&&typeof this[Gr]=="function"&&(this[Gr]=this[Gr].bind(this))}return Qr.prototype={dragStarted:function(Wr){var Kr=Wr.originalEvent;this.sortable.nativeDraggable?ei(document,"dragover",this._handleAutoScroll):this.options.supportPointer?ei(document,"pointermove",this._handleFallbackAutoScroll):Kr.touches?ei(document,"touchmove",this._handleFallbackAutoScroll):ei(document,"mousemove",this._handleFallbackAutoScroll)},dragOverCompleted:function(Wr){var Kr=Wr.originalEvent;!this.options.dragOverBubble&&!Kr.rootEl&&this._handleAutoScroll(Kr)},drop:function(){this.sortable.nativeDraggable?Zn(document,"dragover",this._handleAutoScroll):(Zn(document,"pointermove",this._handleFallbackAutoScroll),Zn(document,"touchmove",this._handleFallbackAutoScroll),Zn(document,"mousemove",this._handleFallbackAutoScroll)),ol(),ko(),fu()},nulling:function(){Do=gs=Wa=vs=Xa=fs=hs=null,yi.length=0},_handleFallbackAutoScroll:function(Wr){this._handleAutoScroll(Wr,!0)},_handleAutoScroll:function(Wr,Kr){var Yr=this,Zr=(Wr.touches?Wr.touches[0]:Wr).clientX,tn=(Wr.touches?Wr.touches[0]:Wr).clientY,ln=document.elementFromPoint(Zr,tn);if(Do=Wr,Kr||this.options.forceAutoScrollFallback||Za||ra||Qa){ds(Wr,this.options,ln,Kr);var dn=la(ln,!0);vs&&(!Xa||Zr!==fs||tn!==hs)&&(Xa&&ol(),Xa=setInterval(function(){var yn=la(document.elementFromPoint(Zr,tn),!0);yn!==dn&&(dn=yn,ko()),ds(Wr,Yr.options,yn,Kr)},10),fs=Zr,hs=tn)}else{if(!this.options.bubbleScroll||la(ln,!0)===Xi()){ko();return}ds(Wr,this.options,la(ln,!1),!1)}}},ta(Qr,{pluginName:"scroll",initializeByDefault:!0})}function ko(){yi.forEach(function(Qr){clearInterval(Qr.pid)}),yi=[]}function ol(){clearInterval(Xa)}var ds=fl(function(Qr,Gr,Wr,Kr){if(Gr.scroll){var Yr=(Qr.touches?Qr.touches[0]:Qr).clientX,Zr=(Qr.touches?Qr.touches[0]:Qr).clientY,tn=Gr.scrollSensitivity,ln=Gr.scrollSpeed,dn=Xi(),yn=!1,Sn;gs!==Wr&&(gs=Wr,ko(),Wa=Gr.scroll,Sn=Gr.scrollFn,Wa===!0&&(Wa=la(Wr,!0)));var kn=0,An=Wa;do{var Bn=An,jn=bi(Bn),Vn=jn.top,ti=jn.bottom,si=jn.left,ri=jn.right,oi=jn.width,Jn=jn.height,gi=void 0,li=void 0,Ui=Bn.scrollWidth,vi=Bn.scrollHeight,ni=Xn(Bn),xn=Bn.scrollLeft,en=Bn.scrollTop;Bn===dn?(gi=oi<Ui&&(ni.overflowX==="auto"||ni.overflowX==="scroll"||ni.overflowX==="visible"),li=Jn<vi&&(ni.overflowY==="auto"||ni.overflowY==="scroll"||ni.overflowY==="visible")):(gi=oi<Ui&&(ni.overflowX==="auto"||ni.overflowX==="scroll"),li=Jn<vi&&(ni.overflowY==="auto"||ni.overflowY==="scroll"));var an=gi&&(Math.abs(ri-Yr)<=tn&&xn+oi<Ui)-(Math.abs(si-Yr)<=tn&&!!xn),pn=li&&(Math.abs(ti-Zr)<=tn&&en+Jn<vi)-(Math.abs(Vn-Zr)<=tn&&!!en);if(!yi[kn])for(var mn=0;mn<=kn;mn++)yi[mn]||(yi[mn]={});(yi[kn].vx!=an||yi[kn].vy!=pn||yi[kn].el!==Bn)&&(yi[kn].el=Bn,yi[kn].vx=an,yi[kn].vy=pn,clearInterval(yi[kn].pid),(an!=0||pn!=0)&&(yn=!0,yi[kn].pid=setInterval(function(){Kr&&this.layer===0&&Qn.active._onTouchMove(Do);var wn=yi[this.layer].vy?yi[this.layer].vy*ln:0,vn=yi[this.layer].vx?yi[this.layer].vx*ln:0;typeof Sn=="function"&&Sn.call(Qn.dragged.parentNode[Pi],vn,wn,Qr,Do,yi[this.layer].el)!=="continue"||hl(yi[this.layer].el,vn,wn)}.bind({layer:kn}),24))),kn++}while(Gr.bubbleScroll&&An!==dn&&(An=la(An,!1)));vs=yn}},30),El=function(Gr){var Wr=Gr.originalEvent,Kr=Gr.putSortable,Yr=Gr.dragEl,Zr=Gr.activeSortable,tn=Gr.dispatchSortableEvent,ln=Gr.hideGhostForTarget,dn=Gr.unhideGhostForTarget;if(Wr){var yn=Kr||Zr;ln();var Sn=Wr.changedTouches&&Wr.changedTouches.length?Wr.changedTouches[0]:Wr,kn=document.elementFromPoint(Sn.clientX,Sn.clientY);dn(),yn&&!yn.el.contains(kn)&&(tn("spill"),this.onSpill({dragEl:Yr,putSortable:Kr}))}};function Es(){}Es.prototype={startIndex:null,dragStart:function(Gr){var Wr=Gr.oldDraggableIndex;this.startIndex=Wr},onSpill:function(Gr){var Wr=Gr.dragEl,Kr=Gr.putSortable;this.sortable.captureAnimationState(),Kr&&Kr.captureAnimationState();var Yr=La(this.sortable.el,this.startIndex,this.options);Yr?this.sortable.el.insertBefore(Wr,Yr):this.sortable.el.appendChild(Wr),this.sortable.animateAll(),Kr&&Kr.animateAll()},drop:El};ta(Es,{pluginName:"revertOnSpill"});function Ts(){}Ts.prototype={onSpill:function(Gr){var Wr=Gr.dragEl,Kr=Gr.putSortable,Yr=Kr||this.sortable;Yr.captureAnimationState(),Wr.parentNode&&Wr.parentNode.removeChild(Wr),Yr.animateAll()},drop:El};ta(Ts,{pluginName:"removeOnSpill"});Qn.mount(new Au);Qn.mount(Ts,Es);var Tl=Qn;var Ro=class{observerInitialized=!1;layoutMode;containerSelector;spacing;masonryBreakpoint;constructor(Gr={}){this.layoutMode=Gr.layoutMode??"justified",this.containerSelector=Gr.containerSelector??"#gallery-container",this.spacing=Gr.spacing??8,this.masonryBreakpoint=Gr.masonryBreakpoint??640}setLayoutMode(Gr){this.layoutMode=Gr,this.computeLayout()}computeLayout(){this.layoutMode==="masonry"?this.computeMasonry():this.computeJustified()}computeMasonry(){let Gr=document.querySelector(this.containerSelector);if(!Gr)return;let Wr=this.spacing,Kr=Gr.offsetWidth;if(Kr===0){requestAnimationFrame(()=>this.computeMasonry());return}let Yr=Kr<this.masonryBreakpoint?1:3,Zr=(Kr+Wr)/Yr-Wr,tn=new Array(Yr).fill(0);Gr.querySelectorAll(".gallery-item").forEach(dn=>{let yn=parseFloat(dn.dataset.width),Sn=parseFloat(dn.dataset.height);if(!yn||!Sn)return;let An=Sn/yn*Zr,Bn=0;for(let ti=1;ti<Yr;ti++)tn[ti]<tn[Bn]&&(Bn=ti);let jn=(Zr+Wr)*Bn,Vn=tn[Bn];Object.assign(dn.style,{position:"absolute",width:`${Zr}px`,height:`${An}px`,left:`${jn}px`,top:`${Vn}px`}),tn[Bn]=Vn+An+Wr}),Gr.style.height=`${Math.max(...tn)}px`}computeJustified(){let Gr=document.querySelector(this.containerSelector);if(!Gr)return;let Wr=this.spacing,Kr=Gr.offsetWidth;if(Kr===0){requestAnimationFrame(()=>this.computeJustified());return}let Yr=Array.from(Gr.querySelectorAll(".gallery-item")),Zr=[],tn=0,ln=0;Yr.forEach(dn=>{Object.assign(dn.style,{position:"absolute",left:"0px",top:"0px",width:"auto",height:"auto"})});for(let dn=0;dn<Yr.length;dn++){let yn=Yr[dn],Sn=parseFloat(yn.dataset.width),kn=parseFloat(yn.dataset.height);if(!Sn||!kn)continue;let An=Sn/kn;Zr.push({tile:yn,aspectRatio:An,imgW:Sn,imgH:kn}),tn+=An;let Bn=(Kr-(Zr.length-1)*Wr)/tn;if(Bn<300||dn===Yr.length-1){let jn=0;for(let Vn of Zr){let ti=Bn*Vn.aspectRatio;Object.assign(Vn.tile.style,{position:"absolute",top:`${ln}px`,left:`${jn}px`,width:`${ti}px`,height:`${Bn}px`}),jn+=ti+Wr}ln+=Bn+Wr,Zr=[],tn=0}}Gr.style.position="relative",Gr.style.height=`${ln}px`}observe(){if(this.observerInitialized)return;this.observerInitialized=!0;let Gr=document.querySelector(this.containerSelector);if(!Gr)return;if(typeof ResizeObserver<"u"){let Kr=new ResizeObserver(()=>this.computeLayout());Gr.parentElement&&Kr.observe(Gr.parentElement)}new MutationObserver(()=>{this.computeLayout()}).observe(Gr,{childList:!0,subtree:!0})}init(Gr={}){document.addEventListener("DOMContentLoaded",()=>{document.querySelector(Gr.containerSelector??"#gallery-container")&&(this.computeLayout(),this.observe())})}};var No=class Qr{startX=0;threshold=50;observer;static initialized=!1;static id="photo-dialog";constructor(){this.observer=new MutationObserver(this.handleMutation.bind(this))}connect(){this.onTouchStart=this.onTouchStart.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this),console.log("PhotoDialog: Connected touch event handlers.")}static maybeInitForElement(Gr){if(Gr.id!==Qr.id||Qr.initialized)return;let Wr=new Qr;Wr.connect(),document&&document.body?(document.body.addEventListener("touchstart",Wr.onTouchStart),document.body.addEventListener("touchend",Wr.onTouchEnd),Wr.observe(),Qr.initialized=!0):console.warn("document.body not available for PhotoDialog event listeners")}onTouchStart(Gr){this.startX=Gr.touches[0].clientX}onTouchEnd(Gr){let Kr=Gr.changedTouches[0].clientX-this.startX;if(Math.abs(Kr)>this.threshold){let Yr=Kr>0?"swiperight":"swipeleft";Gr.target.dispatchEvent(new CustomEvent(Yr,{bubbles:!0}))}}observe(){this.observer.observe(document.body,{childList:!0,subtree:!0})}disconnect(){this.observer.disconnect(),document.body.removeEventListener("touchstart",this.onTouchStart),document.body.removeEventListener("touchend",this.onTouchEnd),Qr.initialized=!1}handleMutation(){document.getElementById(Qr.id)||(console.log("PhotoDialog not found, removing event listeners"),this.disconnect())}};var xs={};nu(xs,{dataURLToBlob:()=>to,doResize:()=>ro,readFileAsDataURL:()=>Ma});function Ma(Qr){return new Promise((Gr,Wr)=>{let Kr=new FileReader;Kr.onload=()=>Gr(Kr.result),Kr.onerror=Wr,Kr.readAsDataURL(Qr)})}function to(Qr){let[Gr,Wr]=Qr.split(","),Kr=/:(.*?);/.exec(Gr);if(!Kr)throw new Error("Invalid data URL");let Yr=Kr[1],Zr=atob(Wr),tn=new Uint8Array(Zr.length);for(let ln=0;ln<Zr.length;ln++)tn[ln]=Zr.charCodeAt(ln);return new Blob([tn],{type:Yr})}function xl(Qr){let Gr=Qr.split(",")[1];return Math.ceil(Gr.length*3/4)}function Du(Qr,Gr){return new Promise((Wr,Kr)=>{let Yr=new Image;Yr.onload=()=>{let Zr;Gr.mode==="cover"?Zr=Math.max(Gr.width/Yr.width,Gr.height/Yr.height):Gr.mode==="contain"?Zr=Math.min(Gr.width/Yr.width,Gr.height/Yr.height):Zr=1;let tn=Math.round(Yr.width*Zr),ln=Math.round(Yr.height*Zr),dn=document.createElement("canvas");dn.width=tn,dn.height=ln;let yn=dn.getContext("2d");if(!yn)return Kr(new Error("Failed to get canvas context"));yn.fillStyle="#fff",yn.fillRect(0,0,tn,ln),yn.imageSmoothingEnabled=!0,yn.imageSmoothingQuality="high",yn.drawImage(Yr,0,0,tn,ln),Wr({dataUrl:dn.toDataURL("image/jpeg",Gr.quality),width:tn,height:ln})},Yr.onerror=Zr=>Kr(Zr),Yr.src=Qr})}async function ro(Qr,Gr){let Wr=null,Kr=0,Yr=101;for(;Yr-Kr>1;){let Zr=Math.round((Kr+Yr)/2),tn=await Du(Qr,{width:Gr.width,height:Gr.height,quality:Zr/100,mode:Gr.mode});xl(tn.dataUrl)<Gr.maxSize?(Kr=Zr,Wr=tn):Yr=Zr}if(!Wr)throw new Error("Failed to compress image");return{path:Wr.dataUrl,mime:"image/jpeg",size:xl(Wr.dataUrl),width:Wr.width,height:Wr.height}}var Sl=za(mo());var Lo=class{handleAvatarImageSelect(Gr){let Wr=Gr.files?.[0];Wr&&Ma(Wr).then(Kr=>{let Yr=document.createElement("img");typeof Kr=="string"?Yr.src=Kr:(console.error("Expected dataUrl to be a string, got:",typeof Kr),Yr.src=""),Yr.className="rounded-full w-full h-full object-cover",Yr.alt="Avatar preview";let Zr=Gr.closest("form")?.querySelector("#image-preview");Zr&&(Zr.innerHTML="",Zr.appendChild(Yr))})}async updateProfile(Gr){let Wr=new FormData(Gr),Kr=Wr.get("file");if(Kr instanceof File&&Kr?.type?.startsWith?.("image/"))try{let Yr=await Ma(Kr);if(!Yr||typeof Yr!="string"){console.error("Failed to read file as data URL");return}let Zr=await ro(Yr,{width:2e3,height:2e3,maxSize:1e3*1e3,mode:"contain"}),tn=to(Zr.path);Wr.set("file",tn,Kr.name)}catch(Yr){console.error("Error resizing image:",Yr),Wr.delete("file")}Sl.default.ajax("PUT","/actions/profile",{swap:"none",values:Object.fromEntries(Wr),source:Gr})}};var Yo=typeof self<"u"?self:global,lo=typeof navigator<"u",Pu=lo&&typeof HTMLImageElement>"u",qo=!(typeof global>"u"||typeof process>"u"||!process.versions||!process.versions.node),$o=Yo.Buffer,Mo=Yo.BigInt,Jo=!!$o,Ru=Qr=>Qr;function Uo(Qr,Gr=Ru){if(qo)try{return typeof ns=="function"?Promise.resolve(Gr(ns(Qr))):import(Qr).then(Gr)}catch{console.warn(`Couldn't load ${Qr}`)}}var qs=Yo.fetch,Nu=Qr=>qs=Qr;if(!Yo.fetch){let Qr=Uo("http",Kr=>Kr),Gr=Uo("https",Kr=>Kr),Wr=(Kr,{headers:Yr}={})=>new Promise(async(Zr,tn)=>{let{port:ln,hostname:dn,pathname:yn,protocol:Sn,search:kn}=new URL(Kr),An={method:"GET",hostname:dn,path:encodeURI(yn)+kn,headers:Yr};ln!==""&&(An.port=Number(ln));let Bn=(Sn==="https:"?await Gr:await Qr).request(An,jn=>{if(jn.statusCode===301||jn.statusCode===302){let Vn=new URL(jn.headers.location,Kr).toString();return Wr(Vn,{headers:Yr}).then(Zr).catch(tn)}Zr({status:jn.statusCode,arrayBuffer:()=>new Promise(Vn=>{let ti=[];jn.on("data",si=>ti.push(si)),jn.on("end",()=>Vn(Buffer.concat(ti)))})})});Bn.on("error",tn),Bn.end()});Nu(Wr)}function Kn(Qr,Gr,Wr){return Gr in Qr?Object.defineProperty(Qr,Gr,{value:Wr,enumerable:!0,configurable:!0,writable:!0}):Qr[Gr]=Wr,Qr}var Bo=Qr=>ql(Qr)?void 0:Qr,Lu=Qr=>Qr!==void 0;function ql(Qr){return Qr===void 0||(Qr instanceof Map?Qr.size===0:Object.values(Qr).filter(Lu).length===0)}function Ti(Qr){let Gr=new Error(Qr);throw delete Gr.stack,Gr}function ba(Qr){return(Qr=function(Gr){for(;Gr.endsWith("\0");)Gr=Gr.slice(0,-1);return Gr}(Qr).trim())===""?void 0:Qr}function Cs(Qr){let Gr=function(Wr){let Kr=0;return Wr.ifd0.enabled&&(Kr+=1024),Wr.exif.enabled&&(Kr+=2048),Wr.makerNote&&(Kr+=2048),Wr.userComment&&(Kr+=1024),Wr.gps.enabled&&(Kr+=512),Wr.interop.enabled&&(Kr+=100),Wr.ifd1.enabled&&(Kr+=1024),Kr+2048}(Qr);return Qr.jfif.enabled&&(Gr+=50),Qr.xmp.enabled&&(Gr+=2e4),Qr.iptc.enabled&&(Gr+=14e3),Qr.icc.enabled&&(Gr+=6e3),Gr}var Is=Qr=>String.fromCharCode.apply(null,Qr),wl=typeof TextDecoder<"u"?new TextDecoder("utf-8"):void 0;function Ul(Qr){return wl?wl.decode(Qr):Jo?Buffer.from(Qr).toString("utf8"):decodeURIComponent(escape(Is(Qr)))}var Ki=class Qr{static from(Gr,Wr){return Gr instanceof this&&Gr.le===Wr?Gr:new Qr(Gr,void 0,void 0,Wr)}constructor(Gr,Wr=0,Kr,Yr){if(typeof Yr=="boolean"&&(this.le=Yr),Array.isArray(Gr)&&(Gr=new Uint8Array(Gr)),Gr===0)this.byteOffset=0,this.byteLength=0;else if(Gr instanceof ArrayBuffer){Kr===void 0&&(Kr=Gr.byteLength-Wr);let Zr=new DataView(Gr,Wr,Kr);this._swapDataView(Zr)}else if(Gr instanceof Uint8Array||Gr instanceof DataView||Gr instanceof Qr){Kr===void 0&&(Kr=Gr.byteLength-Wr),(Wr+=Gr.byteOffset)+Kr>Gr.byteOffset+Gr.byteLength&&Ti("Creating view outside of available memory in ArrayBuffer");let Zr=new DataView(Gr.buffer,Wr,Kr);this._swapDataView(Zr)}else if(typeof Gr=="number"){let Zr=new DataView(new ArrayBuffer(Gr));this._swapDataView(Zr)}else Ti("Invalid input argument for BufferView: "+Gr)}_swapArrayBuffer(Gr){this._swapDataView(new DataView(Gr))}_swapBuffer(Gr){this._swapDataView(new DataView(Gr.buffer,Gr.byteOffset,Gr.byteLength))}_swapDataView(Gr){this.dataView=Gr,this.buffer=Gr.buffer,this.byteOffset=Gr.byteOffset,this.byteLength=Gr.byteLength}_lengthToEnd(Gr){return this.byteLength-Gr}set(Gr,Wr,Kr=Qr){return Gr instanceof DataView||Gr instanceof Qr?Gr=new Uint8Array(Gr.buffer,Gr.byteOffset,Gr.byteLength):Gr instanceof ArrayBuffer&&(Gr=new Uint8Array(Gr)),Gr instanceof Uint8Array||Ti("BufferView.set(): Invalid data argument."),this.toUint8().set(Gr,Wr),new Kr(this,Wr,Gr.byteLength)}subarray(Gr,Wr){return Wr=Wr||this._lengthToEnd(Gr),new Qr(this,Gr,Wr)}toUint8(){return new Uint8Array(this.buffer,this.byteOffset,this.byteLength)}getUint8Array(Gr,Wr){return new Uint8Array(this.buffer,this.byteOffset+Gr,Wr)}getString(Gr=0,Wr=this.byteLength){return Ul(this.getUint8Array(Gr,Wr))}getLatin1String(Gr=0,Wr=this.byteLength){let Kr=this.getUint8Array(Gr,Wr);return Is(Kr)}getUnicodeString(Gr=0,Wr=this.byteLength){let Kr=[];for(let Yr=0;Yr<Wr&&Gr+Yr<this.byteLength;Yr+=2)Kr.push(this.getUint16(Gr+Yr));return Is(Kr)}getInt8(Gr){return this.dataView.getInt8(Gr)}getUint8(Gr){return this.dataView.getUint8(Gr)}getInt16(Gr,Wr=this.le){return this.dataView.getInt16(Gr,Wr)}getInt32(Gr,Wr=this.le){return this.dataView.getInt32(Gr,Wr)}getUint16(Gr,Wr=this.le){return this.dataView.getUint16(Gr,Wr)}getUint32(Gr,Wr=this.le){return this.dataView.getUint32(Gr,Wr)}getFloat32(Gr,Wr=this.le){return this.dataView.getFloat32(Gr,Wr)}getFloat64(Gr,Wr=this.le){return this.dataView.getFloat64(Gr,Wr)}getFloat(Gr,Wr=this.le){return this.dataView.getFloat32(Gr,Wr)}getDouble(Gr,Wr=this.le){return this.dataView.getFloat64(Gr,Wr)}getUintBytes(Gr,Wr,Kr){switch(Wr){case 1:return this.getUint8(Gr,Kr);case 2:return this.getUint16(Gr,Kr);case 4:return this.getUint32(Gr,Kr);case 8:return this.getUint64&&this.getUint64(Gr,Kr)}}getUint(Gr,Wr,Kr){switch(Wr){case 8:return this.getUint8(Gr,Kr);case 16:return this.getUint16(Gr,Kr);case 32:return this.getUint32(Gr,Kr);case 64:return this.getUint64&&this.getUint64(Gr,Kr)}}toString(Gr){return this.dataView.toString(Gr,this.constructor.name)}ensureChunk(){}};function Os(Qr,Gr){Ti(`${Qr} '${Gr}' was not loaded, try using full build of exifr.`)}var uo=class extends Map{constructor(Gr){super(),this.kind=Gr}get(Gr,Wr){return this.has(Gr)||Os(this.kind,Gr),Wr&&(Gr in Wr||function(Kr,Yr){Ti(`Unknown ${Kr} '${Yr}'.`)}(this.kind,Gr),Wr[Gr].enabled||Os(this.kind,Gr)),super.get(Gr)}keyList(){return Array.from(this.keys())}},Yi=new uo("file parser"),Ei=new uo("segment parser"),Ji=new uo("file reader");function Mu(Qr,Gr){return typeof Qr=="string"?kl(Qr,Gr):lo&&!Pu&&Qr instanceof HTMLImageElement?kl(Qr.src,Gr):Qr instanceof Uint8Array||Qr instanceof ArrayBuffer||Qr instanceof DataView?new Ki(Qr):lo&&Qr instanceof Blob?As(Qr,Gr,"blob",Sa):void Ti("Invalid input argument")}function kl(Qr,Gr){return(Wr=Qr).startsWith("data:")||Wr.length>1e4?Ds(Qr,Gr,"base64"):qo&&Qr.includes("://")?As(Qr,Gr,"url",xa):qo?Ds(Qr,Gr,"fs"):lo?As(Qr,Gr,"url",xa):void Ti("Invalid input argument");var Wr}async function As(Qr,Gr,Wr,Kr){return Ji.has(Wr)?Ds(Qr,Gr,Wr):Kr?async function(Yr,Zr){let tn=await Zr(Yr);return new Ki(tn)}(Qr,Kr):void Ti(`Parser ${Wr} is not loaded`)}async function Ds(Qr,Gr,Wr){let Kr=new(Ji.get(Wr))(Qr,Gr);return await Kr.read(),Kr}var xa=Qr=>qs(Qr).then(Gr=>Gr.arrayBuffer()),Sa=Qr=>new Promise((Gr,Wr)=>{let Kr=new FileReader;Kr.onloadend=()=>Gr(Kr.result||new ArrayBuffer),Kr.onerror=Wr,Kr.readAsArrayBuffer(Qr)}),Ps=class extends Map{get tagKeys(){return this.allKeys||(this.allKeys=Array.from(this.keys())),this.allKeys}get tagValues(){return this.allValues||(this.allValues=Array.from(this.values())),this.allValues}};function mi(Qr,Gr,Wr){let Kr=new Ps;for(let[Yr,Zr]of Wr)Kr.set(Yr,Zr);if(Array.isArray(Gr))for(let Yr of Gr)Qr.set(Yr,Kr);else Qr.set(Gr,Kr);return Kr}function wa(Qr,Gr,Wr){let Kr,Yr=Qr.get(Gr);for(Kr of Wr)Yr.set(Kr[0],Kr[1])}var Si=new Map,Wi=new Map,da=new Map,ua=["chunked","firstChunkSize","firstChunkSizeNode","firstChunkSizeBrowser","chunkSize","chunkLimit"],Ha=["jfif","xmp","icc","iptc","ihdr"],ka=["tiff",...Ha],pi=["ifd0","ifd1","exif","gps","interop"],ca=[...ka,...pi],fa=["makerNote","userComment"],Ga=["translateKeys","translateValues","reviveValues","multiSegment"],ha=[...Ga,"sanitize","mergeOutput","silentErrors"],Ho=class{get translate(){return this.translateKeys||this.translateValues||this.reviveValues}},ya=class extends Ho{get needed(){return this.enabled||this.deps.size>0}constructor(Gr,Wr,Kr,Yr){if(super(),Kn(this,"enabled",!1),Kn(this,"skip",new Set),Kn(this,"pick",new Set),Kn(this,"deps",new Set),Kn(this,"translateKeys",!1),Kn(this,"translateValues",!1),Kn(this,"reviveValues",!1),this.key=Gr,this.enabled=Wr,this.parse=this.enabled,this.applyInheritables(Yr),this.canBeFiltered=pi.includes(Gr),this.canBeFiltered&&(this.dict=Si.get(Gr)),Kr!==void 0)if(Array.isArray(Kr))this.parse=this.enabled=!0,this.canBeFiltered&&Kr.length>0&&this.translateTagSet(Kr,this.pick);else if(typeof Kr=="object"){if(this.enabled=!0,this.parse=Kr.parse!==!1,this.canBeFiltered){let{pick:Zr,skip:tn}=Kr;Zr&&Zr.length>0&&this.translateTagSet(Zr,this.pick),tn&&tn.length>0&&this.translateTagSet(tn,this.skip)}this.applyInheritables(Kr)}else Kr===!0||Kr===!1?this.parse=this.enabled=Kr:Ti(`Invalid options argument: ${Kr}`)}applyInheritables(Gr){let Wr,Kr;for(Wr of Ga)Kr=Gr[Wr],Kr!==void 0&&(this[Wr]=Kr)}translateTagSet(Gr,Wr){if(this.dict){let Kr,Yr,{tagKeys:Zr,tagValues:tn}=this.dict;for(Kr of Gr)typeof Kr=="string"?(Yr=tn.indexOf(Kr),Yr===-1&&(Yr=Zr.indexOf(Number(Kr))),Yr!==-1&&Wr.add(Number(Zr[Yr]))):Wr.add(Kr)}else for(let Kr of Gr)Wr.add(Kr)}finalizeFilters(){!this.enabled&&this.deps.size>0?(this.enabled=!0,Go(this.pick,this.deps)):this.enabled&&this.pick.size>0&&Go(this.pick,this.deps)}},Ai={jfif:!1,tiff:!0,xmp:!1,icc:!1,iptc:!1,ifd0:!0,ifd1:!1,exif:!0,gps:!0,interop:!1,ihdr:void 0,makerNote:!1,userComment:!1,multiSegment:!1,skip:[],pick:[],translateKeys:!0,translateValues:!0,reviveValues:!0,sanitize:!0,mergeOutput:!0,silentErrors:!0,chunked:!0,firstChunkSize:void 0,firstChunkSizeNode:512,firstChunkSizeBrowser:65536,chunkSize:65536,chunkLimit:5},Cl=new Map,ia=class extends Ho{static useCached(Gr){let Wr=Cl.get(Gr);return Wr!==void 0||(Wr=new this(Gr),Cl.set(Gr,Wr)),Wr}constructor(Gr){super(),Gr===!0?this.setupFromTrue():Gr===void 0?this.setupFromUndefined():Array.isArray(Gr)?this.setupFromArray(Gr):typeof Gr=="object"?this.setupFromObject(Gr):Ti(`Invalid options argument ${Gr}`),this.firstChunkSize===void 0&&(this.firstChunkSize=lo?this.firstChunkSizeBrowser:this.firstChunkSizeNode),this.mergeOutput&&(this.ifd1.enabled=!1),this.filterNestedSegmentTags(),this.traverseTiffDependencyTree(),this.checkLoadedPlugins()}setupFromUndefined(){let Gr;for(Gr of ua)this[Gr]=Ai[Gr];for(Gr of ha)this[Gr]=Ai[Gr];for(Gr of fa)this[Gr]=Ai[Gr];for(Gr of ca)this[Gr]=new ya(Gr,Ai[Gr],void 0,this)}setupFromTrue(){let Gr;for(Gr of ua)this[Gr]=Ai[Gr];for(Gr of ha)this[Gr]=Ai[Gr];for(Gr of fa)this[Gr]=!0;for(Gr of ca)this[Gr]=new ya(Gr,!0,void 0,this)}setupFromArray(Gr){let Wr;for(Wr of ua)this[Wr]=Ai[Wr];for(Wr of ha)this[Wr]=Ai[Wr];for(Wr of fa)this[Wr]=Ai[Wr];for(Wr of ca)this[Wr]=new ya(Wr,!1,void 0,this);this.setupGlobalFilters(Gr,void 0,pi)}setupFromObject(Gr){let Wr;for(Wr of(pi.ifd0=pi.ifd0||pi.image,pi.ifd1=pi.ifd1||pi.thumbnail,Object.assign(this,Gr),ua))this[Wr]=Ss(Gr[Wr],Ai[Wr]);for(Wr of ha)this[Wr]=Ss(Gr[Wr],Ai[Wr]);for(Wr of fa)this[Wr]=Ss(Gr[Wr],Ai[Wr]);for(Wr of ka)this[Wr]=new ya(Wr,Ai[Wr],Gr[Wr],this);for(Wr of pi)this[Wr]=new ya(Wr,Ai[Wr],Gr[Wr],this.tiff);this.setupGlobalFilters(Gr.pick,Gr.skip,pi,ca),Gr.tiff===!0?this.batchEnableWithBool(pi,!0):Gr.tiff===!1?this.batchEnableWithUserValue(pi,Gr):Array.isArray(Gr.tiff)?this.setupGlobalFilters(Gr.tiff,void 0,pi):typeof Gr.tiff=="object"&&this.setupGlobalFilters(Gr.tiff.pick,Gr.tiff.skip,pi)}batchEnableWithBool(Gr,Wr){for(let Kr of Gr)this[Kr].enabled=Wr}batchEnableWithUserValue(Gr,Wr){for(let Kr of Gr){let Yr=Wr[Kr];this[Kr].enabled=Yr!==!1&&Yr!==void 0}}setupGlobalFilters(Gr,Wr,Kr,Yr=Kr){if(Gr&&Gr.length){for(let tn of Yr)this[tn].enabled=!1;let Zr=Il(Gr,Kr);for(let[tn,ln]of Zr)Go(this[tn].pick,ln),this[tn].enabled=!0}else if(Wr&&Wr.length){let Zr=Il(Wr,Kr);for(let[tn,ln]of Zr)Go(this[tn].skip,ln)}}filterNestedSegmentTags(){let{ifd0:Gr,exif:Wr,xmp:Kr,iptc:Yr,icc:Zr}=this;this.makerNote?Wr.deps.add(37500):Wr.skip.add(37500),this.userComment?Wr.deps.add(37510):Wr.skip.add(37510),Kr.enabled||Gr.skip.add(700),Yr.enabled||Gr.skip.add(33723),Zr.enabled||Gr.skip.add(34675)}traverseTiffDependencyTree(){let{ifd0:Gr,exif:Wr,gps:Kr,interop:Yr}=this;Yr.needed&&(Wr.deps.add(40965),Gr.deps.add(40965)),Wr.needed&&Gr.deps.add(34665),Kr.needed&&Gr.deps.add(34853),this.tiff.enabled=pi.some(Zr=>this[Zr].enabled===!0)||this.makerNote||this.userComment;for(let Zr of pi)this[Zr].finalizeFilters()}get onlyTiff(){return!Ha.map(Gr=>this[Gr].enabled).some(Gr=>Gr===!0)&&this.tiff.enabled}checkLoadedPlugins(){for(let Gr of ka)this[Gr].enabled&&!Ei.has(Gr)&&Os("segment parser",Gr)}};function Il(Qr,Gr){let Wr,Kr,Yr,Zr,tn=[];for(Yr of Gr){for(Zr of(Wr=Si.get(Yr),Kr=[],Wr))(Qr.includes(Zr[0])||Qr.includes(Zr[1]))&&Kr.push(Zr[0]);Kr.length&&tn.push([Yr,Kr])}return tn}function Ss(Qr,Gr){return Qr!==void 0?Qr:Gr!==void 0?Gr:void 0}function Go(Qr,Gr){for(let Wr of Gr)Qr.add(Wr)}Kn(ia,"default",Ai);var $i=class{constructor(Gr){Kn(this,"parsers",{}),Kn(this,"output",{}),Kn(this,"errors",[]),Kn(this,"pushToErrors",Wr=>this.errors.push(Wr)),this.options=ia.useCached(Gr)}async read(Gr){this.file=await Mu(Gr,this.options)}setup(){if(this.fileParser)return;let{file:Gr}=this,Wr=Gr.getUint16(0);for(let[Kr,Yr]of Yi)if(Yr.canHandle(Gr,Wr))return this.fileParser=new Yr(this.options,this.file,this.parsers),Gr[Kr]=!0;this.file.close&&this.file.close(),Ti("Unknown file format")}async parse(){let{output:Gr,errors:Wr}=this;return this.setup(),this.options.silentErrors?(await this.executeParsers().catch(this.pushToErrors),Wr.push(...this.fileParser.errors)):await this.executeParsers(),this.file.close&&this.file.close(),this.options.silentErrors&&Wr.length>0&&(Gr.errors=Wr),Bo(Gr)}async executeParsers(){let{output:Gr}=this;await this.fileParser.parse();let Wr=Object.values(this.parsers).map(async Kr=>{let Yr=await Kr.parse();Kr.assignToOutput(Gr,Yr)});this.options.silentErrors&&(Wr=Wr.map(Kr=>Kr.catch(this.pushToErrors))),await Promise.all(Wr)}async extractThumbnail(){this.setup();let{options:Gr,file:Wr}=this,Kr=Ei.get("tiff",Gr);var Yr;if(Wr.tiff?Yr={start:0,type:"tiff"}:Wr.jpeg&&(Yr=await this.fileParser.getOrFindSegment("tiff")),Yr===void 0)return;let Zr=await this.fileParser.ensureSegmentChunk(Yr),tn=this.parsers.tiff=new Kr(Zr,Gr,Wr),ln=await tn.extractThumbnail();return Wr.close&&Wr.close(),ln}};async function Zo(Qr,Gr){let Wr=new $i(Gr);return await Wr.read(Qr),Wr.parse()}var Fu=Object.freeze({__proto__:null,parse:Zo,Exifr:$i,fileParsers:Yi,segmentParsers:Ei,fileReaders:Ji,tagKeys:Si,tagValues:Wi,tagRevivers:da,createDictionary:mi,extendDictionary:wa,fetchUrlAsArrayBuffer:xa,readBlobAsArrayBuffer:Sa,chunkedProps:ua,otherSegments:Ha,segments:ka,tiffBlocks:pi,segmentsAndBlocks:ca,tiffExtractables:fa,inheritables:Ga,allFormatters:ha,Options:ia}),Ua=class{constructor(Gr,Wr,Kr){Kn(this,"errors",[]),Kn(this,"ensureSegmentChunk",async Yr=>{let Zr=Yr.start,tn=Yr.size||65536;if(this.file.chunked)if(this.file.available(Zr,tn))Yr.chunk=this.file.subarray(Zr,tn);else try{Yr.chunk=await this.file.readChunk(Zr,tn)}catch(ln){Ti(`Couldn't read segment: ${JSON.stringify(Yr)}. ${ln.message}`)}else this.file.byteLength>Zr+tn?Yr.chunk=this.file.subarray(Zr,tn):Yr.size===void 0?Yr.chunk=this.file.subarray(Zr):Ti("Segment unreachable: "+JSON.stringify(Yr));return Yr.chunk}),this.extendOptions&&this.extendOptions(Gr),this.options=Gr,this.file=Wr,this.parsers=Kr}injectSegment(Gr,Wr){this.options[Gr].enabled&&this.createParser(Gr,Wr)}createParser(Gr,Wr){let Kr=new(Ei.get(Gr))(Wr,this.options,this.file);return this.parsers[Gr]=Kr}createParsers(Gr){for(let Wr of Gr){let{type:Kr,chunk:Yr}=Wr,Zr=this.options[Kr];if(Zr&&Zr.enabled){let tn=this.parsers[Kr];tn&&tn.append||tn||this.createParser(Kr,Yr)}}}async readSegments(Gr){let Wr=Gr.map(this.ensureSegmentChunk);await Promise.all(Wr)}},qi=class{static findPosition(Gr,Wr){let Kr=Gr.getUint16(Wr+2)+2,Yr=typeof this.headerLength=="function"?this.headerLength(Gr,Wr,Kr):this.headerLength,Zr=Wr+Yr,tn=Kr-Yr;return{offset:Wr,length:Kr,headerLength:Yr,start:Zr,size:tn,end:Zr+tn}}static parse(Gr,Wr={}){return new this(Gr,new ia({[this.type]:Wr}),Gr).parse()}normalizeInput(Gr){return Gr instanceof Ki?Gr:new Ki(Gr)}constructor(Gr,Wr={},Kr){Kn(this,"errors",[]),Kn(this,"raw",new Map),Kn(this,"handleError",Yr=>{if(!this.options.silentErrors)throw Yr;this.errors.push(Yr.message)}),this.chunk=this.normalizeInput(Gr),this.file=Kr,this.type=this.constructor.type,this.globalOptions=this.options=Wr,this.localOptions=Wr[this.type],this.canTranslate=this.localOptions&&this.localOptions.translate}translate(){this.canTranslate&&(this.translated=this.translateBlock(this.raw,this.type))}get output(){return this.translated?this.translated:this.raw?Object.fromEntries(this.raw):void 0}translateBlock(Gr,Wr){let Kr=da.get(Wr),Yr=Wi.get(Wr),Zr=Si.get(Wr),tn=this.options[Wr],ln=tn.reviveValues&&!!Kr,dn=tn.translateValues&&!!Yr,yn=tn.translateKeys&&!!Zr,Sn={};for(let[kn,An]of Gr)ln&&Kr.has(kn)?An=Kr.get(kn)(An):dn&&Yr.has(kn)&&(An=this.translateValue(An,Yr.get(kn))),yn&&Zr.has(kn)&&(kn=Zr.get(kn)||kn),Sn[kn]=An;return Sn}translateValue(Gr,Wr){return Wr[Gr]||Wr.DEFAULT||Gr}assignToOutput(Gr,Wr){this.assignObjectToOutput(Gr,this.constructor.type,Wr)}assignObjectToOutput(Gr,Wr,Kr){if(this.globalOptions.mergeOutput)return Object.assign(Gr,Kr);Gr[Wr]?Object.assign(Gr[Wr],Kr):Gr[Wr]=Kr}};Kn(qi,"headerLength",4),Kn(qi,"type",void 0),Kn(qi,"multiSegment",!1),Kn(qi,"canHandle",()=>!1);function qu(Qr){return Qr===192||Qr===194||Qr===196||Qr===219||Qr===221||Qr===218||Qr===254}function Uu(Qr){return Qr>=224&&Qr<=239}function Bu(Qr,Gr,Wr){for(let[Kr,Yr]of Ei)if(Yr.canHandle(Qr,Gr,Wr))return Kr}var _o=class extends Ua{constructor(...Gr){super(...Gr),Kn(this,"appSegments",[]),Kn(this,"jpegSegments",[]),Kn(this,"unknownSegments",[])}static canHandle(Gr,Wr){return Wr===65496}async parse(){await this.findAppSegments(),await this.readSegments(this.appSegments),this.mergeMultiSegments(),this.createParsers(this.mergedAppSegments||this.appSegments)}setupSegmentFinderArgs(Gr){Gr===!0?(this.findAll=!0,this.wanted=new Set(Ei.keyList())):(Gr=Gr===void 0?Ei.keyList().filter(Wr=>this.options[Wr].enabled):Gr.filter(Wr=>this.options[Wr].enabled&&Ei.has(Wr)),this.findAll=!1,this.remaining=new Set(Gr),this.wanted=new Set(Gr)),this.unfinishedMultiSegment=!1}async findAppSegments(Gr=0,Wr){this.setupSegmentFinderArgs(Wr);let{file:Kr,findAll:Yr,wanted:Zr,remaining:tn}=this;if(!Yr&&this.file.chunked&&(Yr=Array.from(Zr).some(ln=>{let dn=Ei.get(ln),yn=this.options[ln];return dn.multiSegment&&yn.multiSegment}),Yr&&await this.file.readWhole()),Gr=this.findAppSegmentsInRange(Gr,Kr.byteLength),!this.options.onlyTiff&&Kr.chunked){let ln=!1;for(;tn.size>0&&!ln&&(Kr.canReadNextChunk||this.unfinishedMultiSegment);){let{nextChunkOffset:dn}=Kr,yn=this.appSegments.some(Sn=>!this.file.available(Sn.offset||Sn.start,Sn.length||Sn.size));if(ln=Gr>dn&&!yn?!await Kr.readNextChunk(Gr):!await Kr.readNextChunk(dn),(Gr=this.findAppSegmentsInRange(Gr,Kr.byteLength))===void 0)return}}}findAppSegmentsInRange(Gr,Wr){Wr-=2;let Kr,Yr,Zr,tn,ln,dn,{file:yn,findAll:Sn,wanted:kn,remaining:An,options:Bn}=this;for(;Gr<Wr;Gr++)if(yn.getUint8(Gr)===255){if(Kr=yn.getUint8(Gr+1),Uu(Kr)){if(Yr=yn.getUint16(Gr+2),Zr=Bu(yn,Gr,Yr),Zr&&kn.has(Zr)&&(tn=Ei.get(Zr),ln=tn.findPosition(yn,Gr),dn=Bn[Zr],ln.type=Zr,this.appSegments.push(ln),!Sn&&(tn.multiSegment&&dn.multiSegment?(this.unfinishedMultiSegment=ln.chunkNumber<ln.chunkCount,this.unfinishedMultiSegment||An.delete(Zr)):An.delete(Zr),An.size===0)))break;Bn.recordUnknownSegments&&(ln=qi.findPosition(yn,Gr),ln.marker=Kr,this.unknownSegments.push(ln)),Gr+=Yr+1}else if(qu(Kr)){if(Yr=yn.getUint16(Gr+2),Kr===218&&Bn.stopAfterSos!==!1)return;Bn.recordJpegSegments&&this.jpegSegments.push({offset:Gr,length:Yr,marker:Kr}),Gr+=Yr+1}}return Gr}mergeMultiSegments(){if(!this.appSegments.some(Wr=>Wr.multiSegment))return;let Gr=function(Wr,Kr){let Yr,Zr,tn,ln=new Map;for(let dn=0;dn<Wr.length;dn++)Yr=Wr[dn],Zr=Yr[Kr],ln.has(Zr)?tn=ln.get(Zr):ln.set(Zr,tn=[]),tn.push(Yr);return Array.from(ln)}(this.appSegments,"type");this.mergedAppSegments=Gr.map(([Wr,Kr])=>{let Yr=Ei.get(Wr,this.options);return Yr.handleMultiSegments?{type:Wr,chunk:Yr.handleMultiSegments(Kr)}:Kr[0]})}getSegment(Gr){return this.appSegments.find(Wr=>Wr.type===Gr)}async getOrFindSegment(Gr){let Wr=this.getSegment(Gr);return Wr===void 0&&(await this.findAppSegments(0,[Gr]),Wr=this.getSegment(Gr)),Wr}};Kn(_o,"type","jpeg"),Yi.set("jpeg",_o);var Hu=[void 0,1,1,2,4,8,1,1,2,4,8,4,8,4],Rs=class extends qi{parseHeader(){var Gr=this.chunk.getUint16();Gr===18761?this.le=!0:Gr===19789&&(this.le=!1),this.chunk.le=this.le,this.headerParsed=!0}parseTags(Gr,Wr,Kr=new Map){let{pick:Yr,skip:Zr}=this.options[Wr];Yr=new Set(Yr);let tn=Yr.size>0,ln=Zr.size===0,dn=this.chunk.getUint16(Gr);Gr+=2;for(let yn=0;yn<dn;yn++){let Sn=this.chunk.getUint16(Gr);if(tn){if(Yr.has(Sn)&&(Kr.set(Sn,this.parseTag(Gr,Sn,Wr)),Yr.delete(Sn),Yr.size===0))break}else!ln&&Zr.has(Sn)||Kr.set(Sn,this.parseTag(Gr,Sn,Wr));Gr+=12}return Kr}parseTag(Gr,Wr,Kr){let{chunk:Yr}=this,Zr=Yr.getUint16(Gr+2),tn=Yr.getUint32(Gr+4),ln=Hu[Zr];if(ln*tn<=4?Gr+=8:Gr=Yr.getUint32(Gr+8),(Zr<1||Zr>13)&&Ti(`Invalid TIFF value type. block: ${Kr.toUpperCase()}, tag: ${Wr.toString(16)}, type: ${Zr}, offset ${Gr}`),Gr>Yr.byteLength&&Ti(`Invalid TIFF value offset. block: ${Kr.toUpperCase()}, tag: ${Wr.toString(16)}, type: ${Zr}, offset ${Gr} is outside of chunk size ${Yr.byteLength}`),Zr===1)return Yr.getUint8Array(Gr,tn);if(Zr===2)return ba(Yr.getString(Gr,tn));if(Zr===7)return Yr.getUint8Array(Gr,tn);if(tn===1)return this.parseTagValue(Zr,Gr);{let dn=new(function(Sn){switch(Sn){case 1:return Uint8Array;case 3:return Uint16Array;case 4:return Uint32Array;case 5:return Array;case 6:return Int8Array;case 8:return Int16Array;case 9:return Int32Array;case 10:return Array;case 11:return Float32Array;case 12:return Float64Array;default:return Array}}(Zr))(tn),yn=ln;for(let Sn=0;Sn<tn;Sn++)dn[Sn]=this.parseTagValue(Zr,Gr),Gr+=yn;return dn}}parseTagValue(Gr,Wr){let{chunk:Kr}=this;switch(Gr){case 1:return Kr.getUint8(Wr);case 3:return Kr.getUint16(Wr);case 4:return Kr.getUint32(Wr);case 5:return Kr.getUint32(Wr)/Kr.getUint32(Wr+4);case 6:return Kr.getInt8(Wr);case 8:return Kr.getInt16(Wr);case 9:return Kr.getInt32(Wr);case 10:return Kr.getInt32(Wr)/Kr.getInt32(Wr+4);case 11:return Kr.getFloat(Wr);case 12:return Kr.getDouble(Wr);case 13:return Kr.getUint32(Wr);default:Ti(`Invalid tiff type ${Gr}`)}}},io=class extends Rs{static canHandle(Gr,Wr){return Gr.getUint8(Wr+1)===225&&Gr.getUint32(Wr+4)===1165519206&&Gr.getUint16(Wr+8)===0}async parse(){this.parseHeader();let{options:Gr}=this;return Gr.ifd0.enabled&&await this.parseIfd0Block(),Gr.exif.enabled&&await this.safeParse("parseExifBlock"),Gr.gps.enabled&&await this.safeParse("parseGpsBlock"),Gr.interop.enabled&&await this.safeParse("parseInteropBlock"),Gr.ifd1.enabled&&await this.safeParse("parseThumbnailBlock"),this.createOutput()}safeParse(Gr){let Wr=this[Gr]();return Wr.catch!==void 0&&(Wr=Wr.catch(this.handleError)),Wr}findIfd0Offset(){this.ifd0Offset===void 0&&(this.ifd0Offset=this.chunk.getUint32(4))}findIfd1Offset(){if(this.ifd1Offset===void 0){this.findIfd0Offset();let Gr=this.chunk.getUint16(this.ifd0Offset),Wr=this.ifd0Offset+2+12*Gr;this.ifd1Offset=this.chunk.getUint32(Wr)}}parseBlock(Gr,Wr){let Kr=new Map;return this[Wr]=Kr,this.parseTags(Gr,Wr,Kr),Kr}async parseIfd0Block(){if(this.ifd0)return;let{file:Gr}=this;this.findIfd0Offset(),this.ifd0Offset<8&&Ti("Malformed EXIF data"),!Gr.chunked&&this.ifd0Offset>Gr.byteLength&&Ti(`IFD0 offset points to outside of file. 15 + this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${Gr.byteLength}`),Gr.tiff&&await Gr.ensureChunk(this.ifd0Offset,Cs(this.options));let Wr=this.parseBlock(this.ifd0Offset,"ifd0");return Wr.size!==0?(this.exifOffset=Wr.get(34665),this.interopOffset=Wr.get(40965),this.gpsOffset=Wr.get(34853),this.xmp=Wr.get(700),this.iptc=Wr.get(33723),this.icc=Wr.get(34675),this.options.sanitize&&(Wr.delete(34665),Wr.delete(40965),Wr.delete(34853),Wr.delete(700),Wr.delete(33723),Wr.delete(34675)),Wr):void 0}async parseExifBlock(){if(this.exif||(this.ifd0||await this.parseIfd0Block(),this.exifOffset===void 0))return;this.file.tiff&&await this.file.ensureChunk(this.exifOffset,Cs(this.options));let Gr=this.parseBlock(this.exifOffset,"exif");return this.interopOffset||(this.interopOffset=Gr.get(40965)),this.makerNote=Gr.get(37500),this.userComment=Gr.get(37510),this.options.sanitize&&(Gr.delete(40965),Gr.delete(37500),Gr.delete(37510)),this.unpack(Gr,41728),this.unpack(Gr,41729),Gr}unpack(Gr,Wr){let Kr=Gr.get(Wr);Kr&&Kr.length===1&&Gr.set(Wr,Kr[0])}async parseGpsBlock(){if(this.gps||(this.ifd0||await this.parseIfd0Block(),this.gpsOffset===void 0))return;let Gr=this.parseBlock(this.gpsOffset,"gps");return Gr&&Gr.has(2)&&Gr.has(4)&&(Gr.set("latitude",Ol(...Gr.get(2),Gr.get(1))),Gr.set("longitude",Ol(...Gr.get(4),Gr.get(3)))),Gr}async parseInteropBlock(){if(!this.interop&&(this.ifd0||await this.parseIfd0Block(),this.interopOffset!==void 0||this.exif||await this.parseExifBlock(),this.interopOffset!==void 0))return this.parseBlock(this.interopOffset,"interop")}async parseThumbnailBlock(Gr=!1){if(!this.ifd1&&!this.ifd1Parsed&&(!this.options.mergeOutput||Gr))return this.findIfd1Offset(),this.ifd1Offset>0&&(this.parseBlock(this.ifd1Offset,"ifd1"),this.ifd1Parsed=!0),this.ifd1}async extractThumbnail(){if(this.headerParsed||this.parseHeader(),this.ifd1Parsed||await this.parseThumbnailBlock(!0),this.ifd1===void 0)return;let Gr=this.ifd1.get(513),Wr=this.ifd1.get(514);return this.chunk.getUint8Array(Gr,Wr)}get image(){return this.ifd0}get thumbnail(){return this.ifd1}createOutput(){let Gr,Wr,Kr,Yr={};for(Wr of pi)if(Gr=this[Wr],!ql(Gr))if(Kr=this.canTranslate?this.translateBlock(Gr,Wr):Object.fromEntries(Gr),this.options.mergeOutput){if(Wr==="ifd1")continue;Object.assign(Yr,Kr)}else Yr[Wr]=Kr;return this.makerNote&&(Yr.makerNote=this.makerNote),this.userComment&&(Yr.userComment=this.userComment),Yr}assignToOutput(Gr,Wr){if(this.globalOptions.mergeOutput)Object.assign(Gr,Wr);else for(let[Kr,Yr]of Object.entries(Wr))this.assignObjectToOutput(Gr,Kr,Yr)}};function Ol(Qr,Gr,Wr,Kr){var Yr=Qr+Gr/60+Wr/3600;return Kr!=="S"&&Kr!=="W"||(Yr*=-1),Yr}Kn(io,"type","tiff"),Kn(io,"headerLength",10),Ei.set("tiff",io);var Gu=Object.freeze({__proto__:null,default:Fu,Exifr:$i,fileParsers:Yi,segmentParsers:Ei,fileReaders:Ji,tagKeys:Si,tagValues:Wi,tagRevivers:da,createDictionary:mi,extendDictionary:wa,fetchUrlAsArrayBuffer:xa,readBlobAsArrayBuffer:Sa,chunkedProps:ua,otherSegments:Ha,segments:ka,tiffBlocks:pi,segmentsAndBlocks:ca,tiffExtractables:fa,inheritables:Ga,allFormatters:ha,Options:ia,parse:Zo}),Us={ifd0:!1,ifd1:!1,exif:!1,gps:!1,interop:!1,sanitize:!1,reviveValues:!0,translateKeys:!1,translateValues:!1,mergeOutput:!1},Bs=Object.assign({},Us,{firstChunkSize:4e4,gps:[1,2,3,4]});async function Bl(Qr){let Gr=new $i(Bs);await Gr.read(Qr);let Wr=await Gr.parse();if(Wr&&Wr.gps){let{latitude:Kr,longitude:Yr}=Wr.gps;return{latitude:Kr,longitude:Yr}}}var Hs=Object.assign({},Us,{tiff:!1,ifd1:!0,mergeOutput:!1});async function Hl(Qr){let Gr=new $i(Hs);await Gr.read(Qr);let Wr=await Gr.extractThumbnail();return Wr&&Jo?$o.from(Wr):Wr}async function Gl(Qr){let Gr=await this.thumbnail(Qr);if(Gr!==void 0){let Wr=new Blob([Gr]);return URL.createObjectURL(Wr)}}var Gs=Object.assign({},Us,{firstChunkSize:4e4,ifd0:[274]});async function _s(Qr){let Gr=new $i(Gs);await Gr.read(Qr);let Wr=await Gr.parse();if(Wr&&Wr.ifd0)return Wr.ifd0[274]}var js=Object.freeze({1:{dimensionSwapped:!1,scaleX:1,scaleY:1,deg:0,rad:0},2:{dimensionSwapped:!1,scaleX:-1,scaleY:1,deg:0,rad:0},3:{dimensionSwapped:!1,scaleX:1,scaleY:1,deg:180,rad:180*Math.PI/180},4:{dimensionSwapped:!1,scaleX:-1,scaleY:1,deg:180,rad:180*Math.PI/180},5:{dimensionSwapped:!0,scaleX:1,scaleY:-1,deg:90,rad:90*Math.PI/180},6:{dimensionSwapped:!0,scaleX:1,scaleY:1,deg:90,rad:90*Math.PI/180},7:{dimensionSwapped:!0,scaleX:1,scaleY:-1,deg:270,rad:270*Math.PI/180},8:{dimensionSwapped:!0,scaleX:1,scaleY:1,deg:270,rad:270*Math.PI/180}}),Ea=!0,Ta=!0;if(typeof navigator=="object"){let Qr=navigator.userAgent;if(Qr.includes("iPad")||Qr.includes("iPhone")){let Gr=Qr.match(/OS (\d+)_(\d+)/);if(Gr){let[,Wr,Kr]=Gr;Ea=Number(Wr)+.1*Number(Kr)<13.4,Ta=!1}}else if(Qr.includes("OS X 10")){let[,Gr]=Qr.match(/OS X 10[_.](\d+)/);Ea=Ta=Number(Gr)<15}if(Qr.includes("Chrome/")){let[,Gr]=Qr.match(/Chrome\/(\d+)/);Ea=Ta=Number(Gr)<81}else if(Qr.includes("Firefox/")){let[,Gr]=Qr.match(/Firefox\/(\d+)/);Ea=Ta=Number(Gr)<77}}async function _l(Qr){let Gr=await _s(Qr);return Object.assign({canvas:Ea,css:Ta},js[Gr])}var Ns=class extends Ki{constructor(...Gr){super(...Gr),Kn(this,"ranges",new Ls),this.byteLength!==0&&this.ranges.add(0,this.byteLength)}_tryExtend(Gr,Wr,Kr){if(Gr===0&&this.byteLength===0&&Kr){let Yr=new DataView(Kr.buffer||Kr,Kr.byteOffset,Kr.byteLength);this._swapDataView(Yr)}else{let Yr=Gr+Wr;if(Yr>this.byteLength){let{dataView:Zr}=this._extend(Yr);this._swapDataView(Zr)}}}_extend(Gr){let Wr;Wr=Jo?$o.allocUnsafe(Gr):new Uint8Array(Gr);let Kr=new DataView(Wr.buffer,Wr.byteOffset,Wr.byteLength);return Wr.set(new Uint8Array(this.buffer,this.byteOffset,this.byteLength),0),{uintView:Wr,dataView:Kr}}subarray(Gr,Wr,Kr=!1){return Wr=Wr||this._lengthToEnd(Gr),Kr&&this._tryExtend(Gr,Wr),this.ranges.add(Gr,Wr),super.subarray(Gr,Wr)}set(Gr,Wr,Kr=!1){Kr&&this._tryExtend(Wr,Gr.byteLength,Gr);let Yr=super.set(Gr,Wr);return this.ranges.add(Wr,Yr.byteLength),Yr}async ensureChunk(Gr,Wr){this.chunked&&(this.ranges.available(Gr,Wr)||await this.readChunk(Gr,Wr))}available(Gr,Wr){return this.ranges.available(Gr,Wr)}},Ls=class{constructor(){Kn(this,"list",[])}get length(){return this.list.length}add(Gr,Wr,Kr=0){let Yr=Gr+Wr,Zr=this.list.filter(tn=>Al(Gr,tn.offset,Yr)||Al(Gr,tn.end,Yr));if(Zr.length>0){Gr=Math.min(Gr,...Zr.map(ln=>ln.offset)),Yr=Math.max(Yr,...Zr.map(ln=>ln.end)),Wr=Yr-Gr;let tn=Zr.shift();tn.offset=Gr,tn.length=Wr,tn.end=Yr,this.list=this.list.filter(ln=>!Zr.includes(ln))}else this.list.push({offset:Gr,length:Wr,end:Yr})}available(Gr,Wr){let Kr=Gr+Wr;return this.list.some(Yr=>Yr.offset<=Gr&&Kr<=Yr.end)}};function Al(Qr,Gr,Wr){return Qr<=Gr&&Gr<=Wr}var Ba=class extends Ns{constructor(Gr,Wr){super(0),Kn(this,"chunksRead",0),this.input=Gr,this.options=Wr}async readWhole(){this.chunked=!1,await this.readChunk(this.nextChunkOffset)}async readChunked(){this.chunked=!0,await this.readChunk(0,this.options.firstChunkSize)}async readNextChunk(Gr=this.nextChunkOffset){if(this.fullyRead)return this.chunksRead++,!1;let Wr=this.options.chunkSize,Kr=await this.readChunk(Gr,Wr);return!!Kr&&Kr.byteLength===Wr}async readChunk(Gr,Wr){if(this.chunksRead++,(Wr=this.safeWrapAddress(Gr,Wr))!==0)return this._readChunk(Gr,Wr)}safeWrapAddress(Gr,Wr){return this.size!==void 0&&Gr+Wr>this.size?Math.max(0,this.size-Gr):Wr}get nextChunkOffset(){if(this.ranges.list.length!==0)return this.ranges.list[0].length}get canReadNextChunk(){return this.chunksRead<this.options.chunkLimit}get fullyRead(){return this.size!==void 0&&this.nextChunkOffset===this.size}read(){return this.options.chunked?this.readChunked():this.readWhole()}close(){}};Ji.set("blob",class extends Ba{async readWhole(){this.chunked=!1;let Qr=await Sa(this.input);this._swapArrayBuffer(Qr)}readChunked(){return this.chunked=!0,this.size=this.input.size,super.readChunked()}async _readChunk(Qr,Gr){let Wr=Gr?Qr+Gr:void 0,Kr=this.input.slice(Qr,Wr),Yr=await Sa(Kr);return this.set(Yr,Qr,!0)}});var _u=Object.freeze({__proto__:null,default:Gu,Exifr:$i,fileParsers:Yi,segmentParsers:Ei,fileReaders:Ji,tagKeys:Si,tagValues:Wi,tagRevivers:da,createDictionary:mi,extendDictionary:wa,fetchUrlAsArrayBuffer:xa,readBlobAsArrayBuffer:Sa,chunkedProps:ua,otherSegments:Ha,segments:ka,tiffBlocks:pi,segmentsAndBlocks:ca,tiffExtractables:fa,inheritables:Ga,allFormatters:ha,Options:ia,parse:Zo,gpsOnlyOptions:Bs,gps:Bl,thumbnailOnlyOptions:Hs,thumbnail:Hl,thumbnailUrl:Gl,orientationOnlyOptions:Gs,orientation:_s,rotations:js,get rotateCanvas(){return Ea},get rotateCss(){return Ta},rotation:_l});Ji.set("url",class extends Ba{async readWhole(){this.chunked=!1;let Qr=await xa(this.input);Qr instanceof ArrayBuffer?this._swapArrayBuffer(Qr):Qr instanceof Uint8Array&&this._swapBuffer(Qr)}async _readChunk(Qr,Gr){let Wr=Gr?Qr+Gr-1:void 0,Kr=this.options.httpHeaders||{};(Qr||Wr)&&(Kr.range=`bytes=${[Qr,Wr].join("-")}`);let Yr=await qs(this.input,{headers:Kr}),Zr=await Yr.arrayBuffer(),tn=Zr.byteLength;if(Yr.status!==416)return tn!==Gr&&(this.size=Qr+tn),this.set(Zr,Qr,!0)}});Ki.prototype.getUint64=function(Qr){let Gr=this.getUint32(Qr),Wr=this.getUint32(Qr+4);return Gr<1048575?Gr<<32|Wr:typeof Mo!==void 0?(console.warn("Using BigInt because of type 64uint but JS can only handle 53b numbers."),Mo(Gr)<<Mo(32)|Mo(Wr)):void Ti("Trying to read 64b value but JS can only handle 53b numbers.")};var Ms=class extends Ua{parseBoxes(Gr=0){let Wr=[];for(;Gr<this.file.byteLength-4;){let Kr=this.parseBoxHead(Gr);if(Wr.push(Kr),Kr.length===0)break;Gr+=Kr.length}return Wr}parseSubBoxes(Gr){Gr.boxes=this.parseBoxes(Gr.start)}findBox(Gr,Wr){return Gr.boxes===void 0&&this.parseSubBoxes(Gr),Gr.boxes.find(Kr=>Kr.kind===Wr)}parseBoxHead(Gr){let Wr=this.file.getUint32(Gr),Kr=this.file.getString(Gr+4,4),Yr=Gr+8;return Wr===1&&(Wr=this.file.getUint64(Gr+8),Yr+=8),{offset:Gr,length:Wr,kind:Kr,start:Yr}}parseBoxFullHead(Gr){if(Gr.version!==void 0)return;let Wr=this.file.getUint32(Gr.start);Gr.version=Wr>>24,Gr.start+=4}},jo=class extends Ms{static canHandle(Gr,Wr){if(Wr!==0)return!1;let Kr=Gr.getUint16(2);if(Kr>50)return!1;let Yr=16,Zr=[];for(;Yr<Kr;)Zr.push(Gr.getString(Yr,4)),Yr+=4;return Zr.includes(this.type)}async parse(){let Gr=this.file.getUint32(0),Wr=this.parseBoxHead(Gr);for(;Wr.kind!=="meta";)Gr+=Wr.length,await this.file.ensureChunk(Gr,16),Wr=this.parseBoxHead(Gr);await this.file.ensureChunk(Wr.offset,Wr.length),this.parseBoxFullHead(Wr),this.parseSubBoxes(Wr),this.options.icc.enabled&&await this.findIcc(Wr),this.options.tiff.enabled&&await this.findExif(Wr)}async registerSegment(Gr,Wr,Kr){await this.file.ensureChunk(Wr,Kr);let Yr=this.file.subarray(Wr,Kr);this.createParser(Gr,Yr)}async findIcc(Gr){let Wr=this.findBox(Gr,"iprp");if(Wr===void 0)return;let Kr=this.findBox(Wr,"ipco");if(Kr===void 0)return;let Yr=this.findBox(Kr,"colr");Yr!==void 0&&await this.registerSegment("icc",Yr.offset+12,Yr.length)}async findExif(Gr){let Wr=this.findBox(Gr,"iinf");if(Wr===void 0)return;let Kr=this.findBox(Gr,"iloc");if(Kr===void 0)return;let Yr=this.findExifLocIdInIinf(Wr),Zr=this.findExtentInIloc(Kr,Yr);if(Zr===void 0)return;let[tn,ln]=Zr;await this.file.ensureChunk(tn,ln);let dn=4+this.file.getUint32(tn);tn+=dn,ln-=dn,await this.registerSegment("tiff",tn,ln)}findExifLocIdInIinf(Gr){this.parseBoxFullHead(Gr);let Wr,Kr,Yr,Zr,tn=Gr.start,ln=this.file.getUint16(tn);for(tn+=2;ln--;){if(Wr=this.parseBoxHead(tn),this.parseBoxFullHead(Wr),Kr=Wr.start,Wr.version>=2&&(Yr=Wr.version===3?4:2,Zr=this.file.getString(Kr+Yr+2,4),Zr==="Exif"))return this.file.getUintBytes(Kr,Yr);tn+=Wr.length}}get8bits(Gr){let Wr=this.file.getUint8(Gr);return[Wr>>4,15&Wr]}findExtentInIloc(Gr,Wr){this.parseBoxFullHead(Gr);let Kr=Gr.start,[Yr,Zr]=this.get8bits(Kr++),[tn,ln]=this.get8bits(Kr++),dn=Gr.version===2?4:2,yn=Gr.version===1||Gr.version===2?2:0,Sn=ln+Yr+Zr,kn=Gr.version===2?4:2,An=this.file.getUintBytes(Kr,kn);for(Kr+=kn;An--;){let Bn=this.file.getUintBytes(Kr,dn);Kr+=dn+yn+2+tn;let jn=this.file.getUint16(Kr);if(Kr+=2,Bn===Wr)return jn>1&&console.warn(`ILOC box has more than one extent but we're only processing one 16 + Please create an issue at https://github.com/MikeKovarik/exifr with this file`),[this.file.getUintBytes(Kr+ln,Yr),this.file.getUintBytes(Kr+ln+Yr,Zr)];Kr+=jn*Sn}}},zo=class extends jo{};Kn(zo,"type","heic");var Vo=class extends jo{};Kn(Vo,"type","avif"),Yi.set("heic",zo),Yi.set("avif",Vo),mi(Si,["ifd0","ifd1"],[[256,"ImageWidth"],[257,"ImageHeight"],[258,"BitsPerSample"],[259,"Compression"],[262,"PhotometricInterpretation"],[270,"ImageDescription"],[271,"Make"],[272,"Model"],[273,"StripOffsets"],[274,"Orientation"],[277,"SamplesPerPixel"],[278,"RowsPerStrip"],[279,"StripByteCounts"],[282,"XResolution"],[283,"YResolution"],[284,"PlanarConfiguration"],[296,"ResolutionUnit"],[301,"TransferFunction"],[305,"Software"],[306,"ModifyDate"],[315,"Artist"],[316,"HostComputer"],[317,"Predictor"],[318,"WhitePoint"],[319,"PrimaryChromaticities"],[513,"ThumbnailOffset"],[514,"ThumbnailLength"],[529,"YCbCrCoefficients"],[530,"YCbCrSubSampling"],[531,"YCbCrPositioning"],[532,"ReferenceBlackWhite"],[700,"ApplicationNotes"],[33432,"Copyright"],[33723,"IPTC"],[34665,"ExifIFD"],[34675,"ICC"],[34853,"GpsIFD"],[330,"SubIFD"],[40965,"InteropIFD"],[40091,"XPTitle"],[40092,"XPComment"],[40093,"XPAuthor"],[40094,"XPKeywords"],[40095,"XPSubject"]]),mi(Si,"exif",[[33434,"ExposureTime"],[33437,"FNumber"],[34850,"ExposureProgram"],[34852,"SpectralSensitivity"],[34855,"ISO"],[34858,"TimeZoneOffset"],[34859,"SelfTimerMode"],[34864,"SensitivityType"],[34865,"StandardOutputSensitivity"],[34866,"RecommendedExposureIndex"],[34867,"ISOSpeed"],[34868,"ISOSpeedLatitudeyyy"],[34869,"ISOSpeedLatitudezzz"],[36864,"ExifVersion"],[36867,"DateTimeOriginal"],[36868,"CreateDate"],[36873,"GooglePlusUploadCode"],[36880,"OffsetTime"],[36881,"OffsetTimeOriginal"],[36882,"OffsetTimeDigitized"],[37121,"ComponentsConfiguration"],[37122,"CompressedBitsPerPixel"],[37377,"ShutterSpeedValue"],[37378,"ApertureValue"],[37379,"BrightnessValue"],[37380,"ExposureCompensation"],[37381,"MaxApertureValue"],[37382,"SubjectDistance"],[37383,"MeteringMode"],[37384,"LightSource"],[37385,"Flash"],[37386,"FocalLength"],[37393,"ImageNumber"],[37394,"SecurityClassification"],[37395,"ImageHistory"],[37396,"SubjectArea"],[37500,"MakerNote"],[37510,"UserComment"],[37520,"SubSecTime"],[37521,"SubSecTimeOriginal"],[37522,"SubSecTimeDigitized"],[37888,"AmbientTemperature"],[37889,"Humidity"],[37890,"Pressure"],[37891,"WaterDepth"],[37892,"Acceleration"],[37893,"CameraElevationAngle"],[40960,"FlashpixVersion"],[40961,"ColorSpace"],[40962,"ExifImageWidth"],[40963,"ExifImageHeight"],[40964,"RelatedSoundFile"],[41483,"FlashEnergy"],[41486,"FocalPlaneXResolution"],[41487,"FocalPlaneYResolution"],[41488,"FocalPlaneResolutionUnit"],[41492,"SubjectLocation"],[41493,"ExposureIndex"],[41495,"SensingMethod"],[41728,"FileSource"],[41729,"SceneType"],[41730,"CFAPattern"],[41985,"CustomRendered"],[41986,"ExposureMode"],[41987,"WhiteBalance"],[41988,"DigitalZoomRatio"],[41989,"FocalLengthIn35mmFormat"],[41990,"SceneCaptureType"],[41991,"GainControl"],[41992,"Contrast"],[41993,"Saturation"],[41994,"Sharpness"],[41996,"SubjectDistanceRange"],[42016,"ImageUniqueID"],[42032,"OwnerName"],[42033,"SerialNumber"],[42034,"LensInfo"],[42035,"LensMake"],[42036,"LensModel"],[42037,"LensSerialNumber"],[42080,"CompositeImage"],[42081,"CompositeImageCount"],[42082,"CompositeImageExposureTimes"],[42240,"Gamma"],[59932,"Padding"],[59933,"OffsetSchema"],[65e3,"OwnerName"],[65001,"SerialNumber"],[65002,"Lens"],[65100,"RawFile"],[65101,"Converter"],[65102,"WhiteBalance"],[65105,"Exposure"],[65106,"Shadows"],[65107,"Brightness"],[65108,"Contrast"],[65109,"Saturation"],[65110,"Sharpness"],[65111,"Smoothness"],[65112,"MoireFilter"],[40965,"InteropIFD"]]),mi(Si,"gps",[[0,"GPSVersionID"],[1,"GPSLatitudeRef"],[2,"GPSLatitude"],[3,"GPSLongitudeRef"],[4,"GPSLongitude"],[5,"GPSAltitudeRef"],[6,"GPSAltitude"],[7,"GPSTimeStamp"],[8,"GPSSatellites"],[9,"GPSStatus"],[10,"GPSMeasureMode"],[11,"GPSDOP"],[12,"GPSSpeedRef"],[13,"GPSSpeed"],[14,"GPSTrackRef"],[15,"GPSTrack"],[16,"GPSImgDirectionRef"],[17,"GPSImgDirection"],[18,"GPSMapDatum"],[19,"GPSDestLatitudeRef"],[20,"GPSDestLatitude"],[21,"GPSDestLongitudeRef"],[22,"GPSDestLongitude"],[23,"GPSDestBearingRef"],[24,"GPSDestBearing"],[25,"GPSDestDistanceRef"],[26,"GPSDestDistance"],[27,"GPSProcessingMethod"],[28,"GPSAreaInformation"],[29,"GPSDateStamp"],[30,"GPSDifferential"],[31,"GPSHPositioningError"]]),mi(Wi,["ifd0","ifd1"],[[274,{1:"Horizontal (normal)",2:"Mirror horizontal",3:"Rotate 180",4:"Mirror vertical",5:"Mirror horizontal and rotate 270 CW",6:"Rotate 90 CW",7:"Mirror horizontal and rotate 90 CW",8:"Rotate 270 CW"}],[296,{1:"None",2:"inches",3:"cm"}]]);var ao=mi(Wi,"exif",[[34850,{0:"Not defined",1:"Manual",2:"Normal program",3:"Aperture priority",4:"Shutter priority",5:"Creative program",6:"Action program",7:"Portrait mode",8:"Landscape mode"}],[37121,{0:"-",1:"Y",2:"Cb",3:"Cr",4:"R",5:"G",6:"B"}],[37383,{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"}],[37384,{0:"Unknown",1:"Daylight",2:"Fluorescent",3:"Tungsten (incandescent light)",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 - 5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"}],[37385,{0:"Flash did not fire",1:"Flash fired",5:"Strobe return light not detected",7:"Strobe return light detected",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"}],[41495,{1:"Not defined",2:"One-chip color area sensor",3:"Two-chip color area sensor",4:"Three-chip color area sensor",5:"Color sequential area sensor",7:"Trilinear sensor",8:"Color sequential linear sensor"}],[41728,{1:"Film Scanner",2:"Reflection Print Scanner",3:"Digital Camera"}],[41729,{1:"Directly photographed"}],[41985,{0:"Normal",1:"Custom",2:"HDR (no original saved)",3:"HDR (original saved)",4:"Original (for HDR)",6:"Panorama",7:"Portrait HDR",8:"Portrait"}],[41986,{0:"Auto",1:"Manual",2:"Auto bracket"}],[41987,{0:"Auto",1:"Manual"}],[41990,{0:"Standard",1:"Landscape",2:"Portrait",3:"Night",4:"Other"}],[41991,{0:"None",1:"Low gain up",2:"High gain up",3:"Low gain down",4:"High gain down"}],[41996,{0:"Unknown",1:"Macro",2:"Close",3:"Distant"}],[42080,{0:"Unknown",1:"Not a Composite Image",2:"General Composite Image",3:"Composite Image Captured While Shooting"}]]),Dl={1:"No absolute unit of measurement",2:"Inch",3:"Centimeter"};ao.set(37392,Dl),ao.set(41488,Dl);var ws={0:"Normal",1:"Low",2:"High"};function Pl(Qr){return typeof Qr=="object"&&Qr.length!==void 0?Qr[0]:Qr}function Rl(Qr){let Gr=Array.from(Qr).slice(1);return Gr[1]>15&&(Gr=Gr.map(Wr=>String.fromCharCode(Wr))),Gr[2]!=="0"&&Gr[2]!==0||Gr.pop(),Gr.join(".")}function ks(Qr){if(typeof Qr=="string"){var[Gr,Wr,Kr,Yr,Zr,tn]=Qr.trim().split(/[-: ]/g).map(Number),ln=new Date(Gr,Wr-1,Kr);return Number.isNaN(Yr)||Number.isNaN(Zr)||Number.isNaN(tn)||(ln.setHours(Yr),ln.setMinutes(Zr),ln.setSeconds(tn)),Number.isNaN(+ln)?Qr:ln}}function no(Qr){if(typeof Qr=="string")return Qr;let Gr=[];if(Qr[1]===0&&Qr[Qr.length-1]===0)for(let Wr=0;Wr<Qr.length;Wr+=2)Gr.push(Nl(Qr[Wr+1],Qr[Wr]));else for(let Wr=0;Wr<Qr.length;Wr+=2)Gr.push(Nl(Qr[Wr],Qr[Wr+1]));return ba(String.fromCodePoint(...Gr))}function Nl(Qr,Gr){return Qr<<8|Gr}ao.set(41992,ws),ao.set(41993,ws),ao.set(41994,ws),mi(da,["ifd0","ifd1"],[[50827,function(Qr){return typeof Qr!="string"?Ul(Qr):Qr}],[306,ks],[40091,no],[40092,no],[40093,no],[40094,no],[40095,no]]),mi(da,"exif",[[40960,Rl],[36864,Rl],[36867,ks],[36868,ks],[40962,Pl],[40963,Pl]]),mi(da,"gps",[[0,Qr=>Array.from(Qr).join(".")],[7,Qr=>Array.from(Qr).join(":")]]);var oo=class extends qi{static canHandle(Gr,Wr){return Gr.getUint8(Wr+1)===225&&Gr.getUint32(Wr+4)===1752462448&&Gr.getString(Wr+4,20)==="http://ns.adobe.com/"}static headerLength(Gr,Wr){return Gr.getString(Wr+4,34)==="http://ns.adobe.com/xmp/extension/"?79:33}static findPosition(Gr,Wr){let Kr=super.findPosition(Gr,Wr);return Kr.multiSegment=Kr.extended=Kr.headerLength===79,Kr.multiSegment?(Kr.chunkCount=Gr.getUint8(Wr+72),Kr.chunkNumber=Gr.getUint8(Wr+76),Gr.getUint8(Wr+77)!==0&&Kr.chunkNumber++):(Kr.chunkCount=1/0,Kr.chunkNumber=-1),Kr}static handleMultiSegments(Gr){return Gr.map(Wr=>Wr.chunk.getString()).join("")}normalizeInput(Gr){return typeof Gr=="string"?Gr:Ki.from(Gr).getString()}parse(Gr=this.chunk){if(!this.localOptions.parse)return Gr;Gr=function(Zr){let tn={},ln={};for(let dn of Wl)tn[dn]=[],ln[dn]=0;return Zr.replace(Wu,(dn,yn,Sn)=>{if(yn==="<"){let kn=++ln[Sn];return tn[Sn].push(kn),`${dn}#${kn}`}return`${dn}#${tn[Sn].pop()}`})}(Gr);let Wr=Wo.findAll(Gr,"rdf","Description");Wr.length===0&&Wr.push(new Wo("rdf","Description",void 0,Gr));let Kr,Yr={};for(let Zr of Wr)for(let tn of Zr.properties)Kr=Vu(tn.ns,Yr),jl(tn,Kr);return function(Zr){let tn;for(let ln in Zr)tn=Zr[ln]=Bo(Zr[ln]),tn===void 0&&delete Zr[ln];return Bo(Zr)}(Yr)}assignToOutput(Gr,Wr){if(this.localOptions.parse)for(let[Kr,Yr]of Object.entries(Wr))switch(Kr){case"tiff":this.assignObjectToOutput(Gr,"ifd0",Yr);break;case"exif":this.assignObjectToOutput(Gr,"exif",Yr);break;case"xmlns":break;default:this.assignObjectToOutput(Gr,Kr,Yr)}else Gr.xmp=Wr}};Kn(oo,"type","xmp"),Kn(oo,"multiSegment",!0),Ei.set("xmp",oo);var Fs=class Qr{static findAll(Gr){return zl(Gr,/([a-zA-Z0-9-]+):([a-zA-Z0-9-]+)=("[^"]*"|'[^']*')/gm).map(Qr.unpackMatch)}static unpackMatch(Gr){let Wr=Gr[1],Kr=Gr[2],Yr=Gr[3].slice(1,-1);return Yr=Vl(Yr),new Qr(Wr,Kr,Yr)}constructor(Gr,Wr,Kr){this.ns=Gr,this.name=Wr,this.value=Kr}serialize(){return this.value}},Wo=class Qr{static findAll(Gr,Wr,Kr){if(Wr!==void 0||Kr!==void 0){Wr=Wr||"[\\w\\d-]+",Kr=Kr||"[\\w\\d-]+";var Yr=new RegExp(`<(${Wr}):(${Kr})(#\\d+)?((\\s+?[\\w\\d-:]+=("[^"]*"|'[^']*'))*\\s*)(\\/>|>([\\s\\S]*?)<\\/\\1:\\2\\3>)`,"gm")}else Yr=/<([\w\d-]+):([\w\d-]+)(#\d+)?((\s+?[\w\d-:]+=("[^"]*"|'[^']*'))*\s*)(\/>|>([\s\S]*?)<\/\1:\2\3>)/gm;return zl(Gr,Yr).map(Qr.unpackMatch)}static unpackMatch(Gr){let Wr=Gr[1],Kr=Gr[2],Yr=Gr[4],Zr=Gr[8];return new Qr(Wr,Kr,Yr,Zr)}constructor(Gr,Wr,Kr,Yr){this.ns=Gr,this.name=Wr,this.attrString=Kr,this.innerXml=Yr,this.attrs=Fs.findAll(Kr),this.children=Qr.findAll(Yr),this.value=this.children.length===0?Vl(Yr):void 0,this.properties=[...this.attrs,...this.children]}get isPrimitive(){return this.value!==void 0&&this.attrs.length===0&&this.children.length===0}get isListContainer(){return this.children.length===1&&this.children[0].isList}get isList(){let{ns:Gr,name:Wr}=this;return Gr==="rdf"&&(Wr==="Seq"||Wr==="Bag"||Wr==="Alt")}get isListItem(){return this.ns==="rdf"&&this.name==="li"}serialize(){if(this.properties.length===0&&this.value===void 0)return;if(this.isPrimitive)return this.value;if(this.isListContainer)return this.children[0].serialize();if(this.isList)return zu(this.children.map(ju));if(this.isListItem&&this.children.length===1&&this.attrs.length===0)return this.children[0].serialize();let Gr={};for(let Wr of this.properties)jl(Wr,Gr);return this.value!==void 0&&(Gr.value=this.value),Bo(Gr)}};function jl(Qr,Gr){let Wr=Qr.serialize();Wr!==void 0&&(Gr[Qr.name]=Wr)}var ju=Qr=>Qr.serialize(),zu=Qr=>Qr.length===1?Qr[0]:Qr,Vu=(Qr,Gr)=>Gr[Qr]?Gr[Qr]:Gr[Qr]={};function zl(Qr,Gr){let Wr,Kr=[];if(!Qr)return Kr;for(;(Wr=Gr.exec(Qr))!==null;)Kr.push(Wr);return Kr}function Vl(Qr){if(function(Kr){return Kr==null||Kr==="null"||Kr==="undefined"||Kr===""||Kr.trim()===""}(Qr))return;let Gr=Number(Qr);if(!Number.isNaN(Gr))return Gr;let Wr=Qr.toLowerCase();return Wr==="true"||Wr!=="false"&&Qr.trim()}var Wl=["rdf:li","rdf:Seq","rdf:Bag","rdf:Alt","rdf:Description"],Wu=new RegExp(`(<|\\/)(${Wl.join("|")})`,"g"),Xu=Object.freeze({__proto__:null,default:_u,Exifr:$i,fileParsers:Yi,segmentParsers:Ei,fileReaders:Ji,tagKeys:Si,tagValues:Wi,tagRevivers:da,createDictionary:mi,extendDictionary:wa,fetchUrlAsArrayBuffer:xa,readBlobAsArrayBuffer:Sa,chunkedProps:ua,otherSegments:Ha,segments:ka,tiffBlocks:pi,segmentsAndBlocks:ca,tiffExtractables:fa,inheritables:Ga,allFormatters:ha,Options:ia,parse:Zo,gpsOnlyOptions:Bs,gps:Bl,thumbnailOnlyOptions:Hs,thumbnail:Hl,thumbnailUrl:Gl,orientationOnlyOptions:Gs,orientation:_s,rotations:js,get rotateCanvas(){return Ea},get rotateCss(){return Ta},rotation:_l});var Ll=Uo("fs",Qr=>Qr.promises);Ji.set("fs",class extends Ba{async readWhole(){this.chunked=!1,this.fs=await Ll;let Qr=await this.fs.readFile(this.input);this._swapBuffer(Qr)}async readChunked(){this.chunked=!0,this.fs=await Ll,await this.open(),await this.readChunk(0,this.options.firstChunkSize)}async open(){this.fh===void 0&&(this.fh=await this.fs.open(this.input,"r"),this.size=(await this.fh.stat(this.input)).size)}async _readChunk(Qr,Gr){this.fh===void 0&&await this.open(),Qr+Gr>this.size&&(Gr=this.size-Qr);var Wr=this.subarray(Qr,Gr,!0);return await this.fh.read(Wr.dataView,0,Gr,Qr),Wr}async close(){if(this.fh){let Qr=this.fh;this.fh=void 0,await Qr.close()}}});Ji.set("base64",class extends Ba{constructor(...Qr){super(...Qr),this.input=this.input.replace(/^data:([^;]+);base64,/gim,""),this.size=this.input.length/4*3,this.input.endsWith("==")?this.size-=2:this.input.endsWith("=")&&(this.size-=1)}async _readChunk(Qr,Gr){let Wr,Kr,Yr=this.input;Qr===void 0?(Qr=0,Wr=0,Kr=0):(Wr=4*Math.floor(Qr/3),Kr=Qr-Wr/4*3),Gr===void 0&&(Gr=this.size);let Zr=Qr+Gr,tn=Wr+4*Math.ceil(Zr/3);Yr=Yr.slice(Wr,tn);let ln=Math.min(Gr,this.size-Qr);if(Jo){let dn=$o.from(Yr,"base64").slice(Kr,Kr+ln);return this.set(dn,Qr,!0)}{let dn=this.subarray(Qr,ln,!0),yn=atob(Yr),Sn=dn.toUint8();for(let kn=0;kn<ln;kn++)Sn[kn]=yn.charCodeAt(Kr+kn);return dn}}});var Xo=class extends Ua{static canHandle(Gr,Wr){return Wr===18761||Wr===19789}extendOptions(Gr){let{ifd0:Wr,xmp:Kr,iptc:Yr,icc:Zr}=Gr;Kr.enabled&&Wr.deps.add(700),Yr.enabled&&Wr.deps.add(33723),Zr.enabled&&Wr.deps.add(34675),Wr.finalizeFilters()}async parse(){let{tiff:Gr,xmp:Wr,iptc:Kr,icc:Yr}=this.options;if(Gr.enabled||Wr.enabled||Kr.enabled||Yr.enabled){let Zr=Math.max(Cs(this.options),this.options.chunkSize);await this.file.ensureChunk(0,Zr),this.createParser("tiff",this.file),this.parsers.tiff.parseHeader(),await this.parsers.tiff.parseIfd0Block(),this.adaptTiffPropAsSegment("xmp"),this.adaptTiffPropAsSegment("iptc"),this.adaptTiffPropAsSegment("icc")}}adaptTiffPropAsSegment(Gr){if(this.parsers.tiff[Gr]){let Wr=this.parsers.tiff[Gr];this.injectSegment(Gr,Wr)}}};Kn(Xo,"type","tiff"),Yi.set("tiff",Xo);var Qu=Uo("zlib"),Ku=["ihdr","iccp","text","itxt","exif"],Qo=class extends Ua{constructor(...Gr){super(...Gr),Kn(this,"catchError",Wr=>this.errors.push(Wr)),Kn(this,"metaChunks",[]),Kn(this,"unknownChunks",[])}static canHandle(Gr,Wr){return Wr===35152&&Gr.getUint32(0)===2303741511&&Gr.getUint32(4)===218765834}async parse(){let{file:Gr}=this;await this.findPngChunksInRange(8,Gr.byteLength),await this.readSegments(this.metaChunks),this.findIhdr(),this.parseTextChunks(),await this.findExif().catch(this.catchError),await this.findXmp().catch(this.catchError),await this.findIcc().catch(this.catchError)}async findPngChunksInRange(Gr,Wr){let{file:Kr}=this;for(;Gr<Wr;){let Yr=Kr.getUint32(Gr),Zr=Kr.getUint32(Gr+4),tn=Kr.getString(Gr+4,4).toLowerCase(),ln=Yr+4+4+4,dn={type:tn,offset:Gr,length:ln,start:Gr+4+4,size:Yr,marker:Zr};Ku.includes(tn)?this.metaChunks.push(dn):this.unknownChunks.push(dn),Gr+=ln}}parseTextChunks(){let Gr=this.metaChunks.filter(Wr=>Wr.type==="text");for(let Wr of Gr){let[Kr,Yr]=this.file.getString(Wr.start,Wr.size).split("\0");this.injectKeyValToIhdr(Kr,Yr)}}injectKeyValToIhdr(Gr,Wr){let Kr=this.parsers.ihdr;Kr&&Kr.raw.set(Gr,Wr)}findIhdr(){let Gr=this.metaChunks.find(Wr=>Wr.type==="ihdr");Gr&&this.options.ihdr.enabled!==!1&&this.createParser("ihdr",Gr.chunk)}async findExif(){let Gr=this.metaChunks.find(Wr=>Wr.type==="exif");Gr&&this.injectSegment("tiff",Gr.chunk)}async findXmp(){let Gr=this.metaChunks.filter(Wr=>Wr.type==="itxt");for(let Wr of Gr)Wr.chunk.getString(0,17)==="XML:com.adobe.xmp"&&this.injectSegment("xmp",Wr.chunk)}async findIcc(){let Gr=this.metaChunks.find(ln=>ln.type==="iccp");if(!Gr)return;let{chunk:Wr}=Gr,Kr=Wr.getUint8Array(0,81),Yr=0;for(;Yr<80&&Kr[Yr]!==0;)Yr++;let Zr=Yr+2,tn=Wr.getString(0,Yr);if(this.injectKeyValToIhdr("ProfileName",tn),qo){let ln=await Qu,dn=Wr.getUint8Array(Zr);dn=ln.inflateSync(dn),this.injectSegment("icc",dn)}}};Kn(Qo,"type","png"),Yi.set("png",Qo),mi(Si,"interop",[[1,"InteropIndex"],[2,"InteropVersion"],[4096,"RelatedImageFileFormat"],[4097,"RelatedImageWidth"],[4098,"RelatedImageHeight"]]),wa(Si,"ifd0",[[11,"ProcessingSoftware"],[254,"SubfileType"],[255,"OldSubfileType"],[263,"Thresholding"],[264,"CellWidth"],[265,"CellLength"],[266,"FillOrder"],[269,"DocumentName"],[280,"MinSampleValue"],[281,"MaxSampleValue"],[285,"PageName"],[286,"XPosition"],[287,"YPosition"],[290,"GrayResponseUnit"],[297,"PageNumber"],[321,"HalftoneHints"],[322,"TileWidth"],[323,"TileLength"],[332,"InkSet"],[337,"TargetPrinter"],[18246,"Rating"],[18249,"RatingPercent"],[33550,"PixelScale"],[34264,"ModelTransform"],[34377,"PhotoshopSettings"],[50706,"DNGVersion"],[50707,"DNGBackwardVersion"],[50708,"UniqueCameraModel"],[50709,"LocalizedCameraModel"],[50736,"DNGLensInfo"],[50739,"ShadowScale"],[50740,"DNGPrivateData"],[33920,"IntergraphMatrix"],[33922,"ModelTiePoint"],[34118,"SEMInfo"],[34735,"GeoTiffDirectory"],[34736,"GeoTiffDoubleParams"],[34737,"GeoTiffAsciiParams"],[50341,"PrintIM"],[50721,"ColorMatrix1"],[50722,"ColorMatrix2"],[50723,"CameraCalibration1"],[50724,"CameraCalibration2"],[50725,"ReductionMatrix1"],[50726,"ReductionMatrix2"],[50727,"AnalogBalance"],[50728,"AsShotNeutral"],[50729,"AsShotWhiteXY"],[50730,"BaselineExposure"],[50731,"BaselineNoise"],[50732,"BaselineSharpness"],[50734,"LinearResponseLimit"],[50735,"CameraSerialNumber"],[50741,"MakerNoteSafety"],[50778,"CalibrationIlluminant1"],[50779,"CalibrationIlluminant2"],[50781,"RawDataUniqueID"],[50827,"OriginalRawFileName"],[50828,"OriginalRawFileData"],[50831,"AsShotICCProfile"],[50832,"AsShotPreProfileMatrix"],[50833,"CurrentICCProfile"],[50834,"CurrentPreProfileMatrix"],[50879,"ColorimetricReference"],[50885,"SRawType"],[50898,"PanasonicTitle"],[50899,"PanasonicTitle2"],[50931,"CameraCalibrationSig"],[50932,"ProfileCalibrationSig"],[50933,"ProfileIFD"],[50934,"AsShotProfileName"],[50936,"ProfileName"],[50937,"ProfileHueSatMapDims"],[50938,"ProfileHueSatMapData1"],[50939,"ProfileHueSatMapData2"],[50940,"ProfileToneCurve"],[50941,"ProfileEmbedPolicy"],[50942,"ProfileCopyright"],[50964,"ForwardMatrix1"],[50965,"ForwardMatrix2"],[50966,"PreviewApplicationName"],[50967,"PreviewApplicationVersion"],[50968,"PreviewSettingsName"],[50969,"PreviewSettingsDigest"],[50970,"PreviewColorSpace"],[50971,"PreviewDateTime"],[50972,"RawImageDigest"],[50973,"OriginalRawFileDigest"],[50981,"ProfileLookTableDims"],[50982,"ProfileLookTableData"],[51043,"TimeCodes"],[51044,"FrameRate"],[51058,"TStop"],[51081,"ReelName"],[51089,"OriginalDefaultFinalSize"],[51090,"OriginalBestQualitySize"],[51091,"OriginalDefaultCropSize"],[51105,"CameraLabel"],[51107,"ProfileHueSatMapEncoding"],[51108,"ProfileLookTableEncoding"],[51109,"BaselineExposureOffset"],[51110,"DefaultBlackRender"],[51111,"NewRawImageDigest"],[51112,"RawToPreviewGain"]]);var Ml=[[273,"StripOffsets"],[279,"StripByteCounts"],[288,"FreeOffsets"],[289,"FreeByteCounts"],[291,"GrayResponseCurve"],[292,"T4Options"],[293,"T6Options"],[300,"ColorResponseUnit"],[320,"ColorMap"],[324,"TileOffsets"],[325,"TileByteCounts"],[326,"BadFaxLines"],[327,"CleanFaxData"],[328,"ConsecutiveBadFaxLines"],[330,"SubIFD"],[333,"InkNames"],[334,"NumberofInks"],[336,"DotRange"],[338,"ExtraSamples"],[339,"SampleFormat"],[340,"SMinSampleValue"],[341,"SMaxSampleValue"],[342,"TransferRange"],[343,"ClipPath"],[344,"XClipPathUnits"],[345,"YClipPathUnits"],[346,"Indexed"],[347,"JPEGTables"],[351,"OPIProxy"],[400,"GlobalParametersIFD"],[401,"ProfileType"],[402,"FaxProfile"],[403,"CodingMethods"],[404,"VersionYear"],[405,"ModeNumber"],[433,"Decode"],[434,"DefaultImageColor"],[435,"T82Options"],[437,"JPEGTables"],[512,"JPEGProc"],[515,"JPEGRestartInterval"],[517,"JPEGLosslessPredictors"],[518,"JPEGPointTransforms"],[519,"JPEGQTables"],[520,"JPEGDCTables"],[521,"JPEGACTables"],[559,"StripRowCounts"],[999,"USPTOMiscellaneous"],[18247,"XP_DIP_XML"],[18248,"StitchInfo"],[28672,"SonyRawFileType"],[28688,"SonyToneCurve"],[28721,"VignettingCorrection"],[28722,"VignettingCorrParams"],[28724,"ChromaticAberrationCorrection"],[28725,"ChromaticAberrationCorrParams"],[28726,"DistortionCorrection"],[28727,"DistortionCorrParams"],[29895,"SonyCropTopLeft"],[29896,"SonyCropSize"],[32781,"ImageID"],[32931,"WangTag1"],[32932,"WangAnnotation"],[32933,"WangTag3"],[32934,"WangTag4"],[32953,"ImageReferencePoints"],[32954,"RegionXformTackPoint"],[32955,"WarpQuadrilateral"],[32956,"AffineTransformMat"],[32995,"Matteing"],[32996,"DataType"],[32997,"ImageDepth"],[32998,"TileDepth"],[33300,"ImageFullWidth"],[33301,"ImageFullHeight"],[33302,"TextureFormat"],[33303,"WrapModes"],[33304,"FovCot"],[33305,"MatrixWorldToScreen"],[33306,"MatrixWorldToCamera"],[33405,"Model2"],[33421,"CFARepeatPatternDim"],[33422,"CFAPattern2"],[33423,"BatteryLevel"],[33424,"KodakIFD"],[33445,"MDFileTag"],[33446,"MDScalePixel"],[33447,"MDColorTable"],[33448,"MDLabName"],[33449,"MDSampleInfo"],[33450,"MDPrepDate"],[33451,"MDPrepTime"],[33452,"MDFileUnits"],[33589,"AdventScale"],[33590,"AdventRevision"],[33628,"UIC1Tag"],[33629,"UIC2Tag"],[33630,"UIC3Tag"],[33631,"UIC4Tag"],[33918,"IntergraphPacketData"],[33919,"IntergraphFlagRegisters"],[33921,"INGRReserved"],[34016,"Site"],[34017,"ColorSequence"],[34018,"IT8Header"],[34019,"RasterPadding"],[34020,"BitsPerRunLength"],[34021,"BitsPerExtendedRunLength"],[34022,"ColorTable"],[34023,"ImageColorIndicator"],[34024,"BackgroundColorIndicator"],[34025,"ImageColorValue"],[34026,"BackgroundColorValue"],[34027,"PixelIntensityRange"],[34028,"TransparencyIndicator"],[34029,"ColorCharacterization"],[34030,"HCUsage"],[34031,"TrapIndicator"],[34032,"CMYKEquivalent"],[34152,"AFCP_IPTC"],[34232,"PixelMagicJBIGOptions"],[34263,"JPLCartoIFD"],[34306,"WB_GRGBLevels"],[34310,"LeafData"],[34687,"TIFF_FXExtensions"],[34688,"MultiProfiles"],[34689,"SharedData"],[34690,"T88Options"],[34732,"ImageLayer"],[34750,"JBIGOptions"],[34856,"Opto-ElectricConvFactor"],[34857,"Interlace"],[34908,"FaxRecvParams"],[34909,"FaxSubAddress"],[34910,"FaxRecvTime"],[34929,"FedexEDR"],[34954,"LeafSubIFD"],[37387,"FlashEnergy"],[37388,"SpatialFrequencyResponse"],[37389,"Noise"],[37390,"FocalPlaneXResolution"],[37391,"FocalPlaneYResolution"],[37392,"FocalPlaneResolutionUnit"],[37397,"ExposureIndex"],[37398,"TIFF-EPStandardID"],[37399,"SensingMethod"],[37434,"CIP3DataFile"],[37435,"CIP3Sheet"],[37436,"CIP3Side"],[37439,"StoNits"],[37679,"MSDocumentText"],[37680,"MSPropertySetStorage"],[37681,"MSDocumentTextPosition"],[37724,"ImageSourceData"],[40965,"InteropIFD"],[40976,"SamsungRawPointersOffset"],[40977,"SamsungRawPointersLength"],[41217,"SamsungRawByteOrder"],[41218,"SamsungRawUnknown"],[41484,"SpatialFrequencyResponse"],[41485,"Noise"],[41489,"ImageNumber"],[41490,"SecurityClassification"],[41491,"ImageHistory"],[41494,"TIFF-EPStandardID"],[41995,"DeviceSettingDescription"],[42112,"GDALMetadata"],[42113,"GDALNoData"],[44992,"ExpandSoftware"],[44993,"ExpandLens"],[44994,"ExpandFilm"],[44995,"ExpandFilterLens"],[44996,"ExpandScanner"],[44997,"ExpandFlashLamp"],[46275,"HasselbladRawImage"],[48129,"PixelFormat"],[48130,"Transformation"],[48131,"Uncompressed"],[48132,"ImageType"],[48256,"ImageWidth"],[48257,"ImageHeight"],[48258,"WidthResolution"],[48259,"HeightResolution"],[48320,"ImageOffset"],[48321,"ImageByteCount"],[48322,"AlphaOffset"],[48323,"AlphaByteCount"],[48324,"ImageDataDiscard"],[48325,"AlphaDataDiscard"],[50215,"OceScanjobDesc"],[50216,"OceApplicationSelector"],[50217,"OceIDNumber"],[50218,"OceImageLogic"],[50255,"Annotations"],[50459,"HasselbladExif"],[50547,"OriginalFileName"],[50560,"USPTOOriginalContentType"],[50656,"CR2CFAPattern"],[50710,"CFAPlaneColor"],[50711,"CFALayout"],[50712,"LinearizationTable"],[50713,"BlackLevelRepeatDim"],[50714,"BlackLevel"],[50715,"BlackLevelDeltaH"],[50716,"BlackLevelDeltaV"],[50717,"WhiteLevel"],[50718,"DefaultScale"],[50719,"DefaultCropOrigin"],[50720,"DefaultCropSize"],[50733,"BayerGreenSplit"],[50737,"ChromaBlurRadius"],[50738,"AntiAliasStrength"],[50752,"RawImageSegmentation"],[50780,"BestQualityScale"],[50784,"AliasLayerMetadata"],[50829,"ActiveArea"],[50830,"MaskedAreas"],[50935,"NoiseReductionApplied"],[50974,"SubTileBlockSize"],[50975,"RowInterleaveFactor"],[51008,"OpcodeList1"],[51009,"OpcodeList2"],[51022,"OpcodeList3"],[51041,"NoiseProfile"],[51114,"CacheVersion"],[51125,"DefaultUserCrop"],[51157,"NikonNEFInfo"],[65024,"KdcIFD"]];wa(Si,"ifd0",Ml),wa(Si,"exif",Ml),mi(Wi,"gps",[[23,{M:"Magnetic North",T:"True North"}],[25,{K:"Kilometers",M:"Miles",N:"Nautical Miles"}]]);var so=class extends qi{static canHandle(Gr,Wr){return Gr.getUint8(Wr+1)===224&&Gr.getUint32(Wr+4)===1246120262&&Gr.getUint8(Wr+8)===0}parse(){return this.parseTags(),this.translate(),this.output}parseTags(){this.raw=new Map([[0,this.chunk.getUint16(0)],[2,this.chunk.getUint8(2)],[3,this.chunk.getUint16(3)],[5,this.chunk.getUint16(5)],[7,this.chunk.getUint8(7)],[8,this.chunk.getUint8(8)]])}};Kn(so,"type","jfif"),Kn(so,"headerLength",9),Ei.set("jfif",so),mi(Si,"jfif",[[0,"JFIFVersion"],[2,"ResolutionUnit"],[3,"XResolution"],[5,"YResolution"],[7,"ThumbnailWidth"],[8,"ThumbnailHeight"]]);var Ko=class extends qi{parse(){return this.parseTags(),this.translate(),this.output}parseTags(){this.raw=new Map([[0,this.chunk.getUint32(0)],[4,this.chunk.getUint32(4)],[8,this.chunk.getUint8(8)],[9,this.chunk.getUint8(9)],[10,this.chunk.getUint8(10)],[11,this.chunk.getUint8(11)],[12,this.chunk.getUint8(12)],...Array.from(this.raw)])}};Kn(Ko,"type","ihdr"),Ei.set("ihdr",Ko),mi(Si,"ihdr",[[0,"ImageWidth"],[4,"ImageHeight"],[8,"BitDepth"],[9,"ColorType"],[10,"Compression"],[11,"Filter"],[12,"Interlace"]]),mi(Wi,"ihdr",[[9,{0:"Grayscale",2:"RGB",3:"Palette",4:"Grayscale with Alpha",6:"RGB with Alpha",DEFAULT:"Unknown"}],[10,{0:"Deflate/Inflate",DEFAULT:"Unknown"}],[11,{0:"Adaptive",DEFAULT:"Unknown"}],[12,{0:"Noninterlaced",1:"Adam7 Interlace",DEFAULT:"Unknown"}]]);var qa=class extends qi{static canHandle(Gr,Wr){return Gr.getUint8(Wr+1)===226&&Gr.getUint32(Wr+4)===1229144927}static findPosition(Gr,Wr){let Kr=super.findPosition(Gr,Wr);return Kr.chunkNumber=Gr.getUint8(Wr+16),Kr.chunkCount=Gr.getUint8(Wr+17),Kr.multiSegment=Kr.chunkCount>1,Kr}static handleMultiSegments(Gr){return function(Wr){let Kr=function(Yr){let Zr=Yr[0].constructor,tn=0;for(let yn of Yr)tn+=yn.length;let ln=new Zr(tn),dn=0;for(let yn of Yr)ln.set(yn,dn),dn+=yn.length;return ln}(Wr.map(Yr=>Yr.chunk.toUint8()));return new Ki(Kr)}(Gr)}parse(){return this.raw=new Map,this.parseHeader(),this.parseTags(),this.translate(),this.output}parseHeader(){let{raw:Gr}=this;this.chunk.byteLength<84&&Ti("ICC header is too short");for(let[Wr,Kr]of Object.entries(Yu)){Wr=parseInt(Wr,10);let Yr=Kr(this.chunk,Wr);Yr!=="\0\0\0\0"&&Gr.set(Wr,Yr)}}parseTags(){let Gr,Wr,Kr,Yr,Zr,{raw:tn}=this,ln=this.chunk.getUint32(128),dn=132,yn=this.chunk.byteLength;for(;ln--;){if(Gr=this.chunk.getString(dn,4),Wr=this.chunk.getUint32(dn+4),Kr=this.chunk.getUint32(dn+8),Yr=this.chunk.getString(Wr,4),Wr+Kr>yn)return void console.warn("reached the end of the first ICC chunk. Enable options.tiff.multiSegment to read all ICC segments.");Zr=this.parseTag(Yr,Wr,Kr),Zr!==void 0&&Zr!=="\0\0\0\0"&&tn.set(Gr,Zr),dn+=12}}parseTag(Gr,Wr,Kr){switch(Gr){case"desc":return this.parseDesc(Wr);case"mluc":return this.parseMluc(Wr);case"text":return this.parseText(Wr,Kr);case"sig ":return this.parseSig(Wr)}if(!(Wr+Kr>this.chunk.byteLength))return this.chunk.getUint8Array(Wr,Kr)}parseDesc(Gr){let Wr=this.chunk.getUint32(Gr+8)-1;return ba(this.chunk.getString(Gr+12,Wr))}parseText(Gr,Wr){return ba(this.chunk.getString(Gr+8,Wr-8))}parseSig(Gr){return ba(this.chunk.getString(Gr+8,4))}parseMluc(Gr){let{chunk:Wr}=this,Kr=Wr.getUint32(Gr+8),Yr=Wr.getUint32(Gr+12),Zr=Gr+16,tn=[];for(let ln=0;ln<Kr;ln++){let dn=Wr.getString(Zr+0,2),yn=Wr.getString(Zr+2,2),Sn=Wr.getUint32(Zr+4),kn=Wr.getUint32(Zr+8)+Gr,An=ba(Wr.getUnicodeString(kn,Sn));tn.push({lang:dn,country:yn,text:An}),Zr+=Yr}return Kr===1?tn[0].text:tn}translateValue(Gr,Wr){return typeof Gr=="string"?Wr[Gr]||Wr[Gr.toLowerCase()]||Gr:Wr[Gr]||Gr}};Kn(qa,"type","icc"),Kn(qa,"multiSegment",!0),Kn(qa,"headerLength",18);var Yu={4:na,8:function(Qr,Gr){return[Qr.getUint8(Gr),Qr.getUint8(Gr+1)>>4,Qr.getUint8(Gr+1)%16].map(Wr=>Wr.toString(10)).join(".")},12:na,16:na,20:na,24:function(Qr,Gr){let Wr=Qr.getUint16(Gr),Kr=Qr.getUint16(Gr+2)-1,Yr=Qr.getUint16(Gr+4),Zr=Qr.getUint16(Gr+6),tn=Qr.getUint16(Gr+8),ln=Qr.getUint16(Gr+10);return new Date(Date.UTC(Wr,Kr,Yr,Zr,tn,ln))},36:na,40:na,48:na,52:na,64:(Qr,Gr)=>Qr.getUint32(Gr),80:na};function na(Qr,Gr){return ba(Qr.getString(Gr,4))}Ei.set("icc",qa),mi(Si,"icc",[[4,"ProfileCMMType"],[8,"ProfileVersion"],[12,"ProfileClass"],[16,"ColorSpaceData"],[20,"ProfileConnectionSpace"],[24,"ProfileDateTime"],[36,"ProfileFileSignature"],[40,"PrimaryPlatform"],[44,"CMMFlags"],[48,"DeviceManufacturer"],[52,"DeviceModel"],[56,"DeviceAttributes"],[64,"RenderingIntent"],[68,"ConnectionSpaceIlluminant"],[80,"ProfileCreator"],[84,"ProfileID"],["Header","ProfileHeader"],["MS00","WCSProfiles"],["bTRC","BlueTRC"],["bXYZ","BlueMatrixColumn"],["bfd","UCRBG"],["bkpt","MediaBlackPoint"],["calt","CalibrationDateTime"],["chad","ChromaticAdaptation"],["chrm","Chromaticity"],["ciis","ColorimetricIntentImageState"],["clot","ColorantTableOut"],["clro","ColorantOrder"],["clrt","ColorantTable"],["cprt","ProfileCopyright"],["crdi","CRDInfo"],["desc","ProfileDescription"],["devs","DeviceSettings"],["dmdd","DeviceModelDesc"],["dmnd","DeviceMfgDesc"],["dscm","ProfileDescriptionML"],["fpce","FocalPlaneColorimetryEstimates"],["gTRC","GreenTRC"],["gXYZ","GreenMatrixColumn"],["gamt","Gamut"],["kTRC","GrayTRC"],["lumi","Luminance"],["meas","Measurement"],["meta","Metadata"],["mmod","MakeAndModel"],["ncl2","NamedColor2"],["ncol","NamedColor"],["ndin","NativeDisplayInfo"],["pre0","Preview0"],["pre1","Preview1"],["pre2","Preview2"],["ps2i","PS2RenderingIntent"],["ps2s","PostScript2CSA"],["psd0","PostScript2CRD0"],["psd1","PostScript2CRD1"],["psd2","PostScript2CRD2"],["psd3","PostScript2CRD3"],["pseq","ProfileSequenceDesc"],["psid","ProfileSequenceIdentifier"],["psvm","PS2CRDVMSize"],["rTRC","RedTRC"],["rXYZ","RedMatrixColumn"],["resp","OutputResponse"],["rhoc","ReflectionHardcopyOrigColorimetry"],["rig0","PerceptualRenderingIntentGamut"],["rig2","SaturationRenderingIntentGamut"],["rpoc","ReflectionPrintOutputColorimetry"],["sape","SceneAppearanceEstimates"],["scoe","SceneColorimetryEstimates"],["scrd","ScreeningDesc"],["scrn","Screening"],["targ","CharTarget"],["tech","Technology"],["vcgt","VideoCardGamma"],["view","ViewingConditions"],["vued","ViewingCondDesc"],["wtpt","MediaWhitePoint"]]);var Fo={"4d2p":"Erdt Systems",AAMA:"Aamazing Technologies",ACER:"Acer",ACLT:"Acolyte Color Research",ACTI:"Actix Sytems",ADAR:"Adara Technology",ADBE:"Adobe",ADI:"ADI Systems",AGFA:"Agfa Graphics",ALMD:"Alps Electric",ALPS:"Alps Electric",ALWN:"Alwan Color Expertise",AMTI:"Amiable Technologies",AOC:"AOC International",APAG:"Apago",APPL:"Apple Computer",AST:"AST","AT&T":"AT&T",BAEL:"BARBIERI electronic",BRCO:"Barco NV",BRKP:"Breakpoint",BROT:"Brother",BULL:"Bull",BUS:"Bus Computer Systems","C-IT":"C-Itoh",CAMR:"Intel",CANO:"Canon",CARR:"Carroll Touch",CASI:"Casio",CBUS:"Colorbus PL",CEL:"Crossfield",CELx:"Crossfield",CGS:"CGS Publishing Technologies International",CHM:"Rochester Robotics",CIGL:"Colour Imaging Group, London",CITI:"Citizen",CL00:"Candela",CLIQ:"Color IQ",CMCO:"Chromaco",CMiX:"CHROMiX",COLO:"Colorgraphic Communications",COMP:"Compaq",COMp:"Compeq/Focus Technology",CONR:"Conrac Display Products",CORD:"Cordata Technologies",CPQ:"Compaq",CPRO:"ColorPro",CRN:"Cornerstone",CTX:"CTX International",CVIS:"ColorVision",CWC:"Fujitsu Laboratories",DARI:"Darius Technology",DATA:"Dataproducts",DCP:"Dry Creek Photo",DCRC:"Digital Contents Resource Center, Chung-Ang University",DELL:"Dell Computer",DIC:"Dainippon Ink and Chemicals",DICO:"Diconix",DIGI:"Digital","DL&C":"Digital Light & Color",DPLG:"Doppelganger",DS:"Dainippon Screen",DSOL:"DOOSOL",DUPN:"DuPont",EPSO:"Epson",ESKO:"Esko-Graphics",ETRI:"Electronics and Telecommunications Research Institute",EVER:"Everex Systems",EXAC:"ExactCODE",Eizo:"Eizo",FALC:"Falco Data Products",FF:"Fuji Photo Film",FFEI:"FujiFilm Electronic Imaging",FNRD:"Fnord Software",FORA:"Fora",FORE:"Forefront Technology",FP:"Fujitsu",FPA:"WayTech Development",FUJI:"Fujitsu",FX:"Fuji Xerox",GCC:"GCC Technologies",GGSL:"Global Graphics Software",GMB:"Gretagmacbeth",GMG:"GMG",GOLD:"GoldStar Technology",GOOG:"Google",GPRT:"Giantprint",GTMB:"Gretagmacbeth",GVC:"WayTech Development",GW2K:"Sony",HCI:"HCI",HDM:"Heidelberger Druckmaschinen",HERM:"Hermes",HITA:"Hitachi America",HP:"Hewlett-Packard",HTC:"Hitachi",HiTi:"HiTi Digital",IBM:"IBM",IDNT:"Scitex",IEC:"Hewlett-Packard",IIYA:"Iiyama North America",IKEG:"Ikegami Electronics",IMAG:"Image Systems",IMI:"Ingram Micro",INTC:"Intel",INTL:"N/A (INTL)",INTR:"Intra Electronics",IOCO:"Iocomm International Technology",IPS:"InfoPrint Solutions Company",IRIS:"Scitex",ISL:"Ichikawa Soft Laboratory",ITNL:"N/A (ITNL)",IVM:"IVM",IWAT:"Iwatsu Electric",Idnt:"Scitex",Inca:"Inca Digital Printers",Iris:"Scitex",JPEG:"Joint Photographic Experts Group",JSFT:"Jetsoft Development",JVC:"JVC Information Products",KART:"Scitex",KFC:"KFC Computek Components",KLH:"KLH Computers",KMHD:"Konica Minolta",KNCA:"Konica",KODA:"Kodak",KYOC:"Kyocera",Kart:"Scitex",LCAG:"Leica",LCCD:"Leeds Colour",LDAK:"Left Dakota",LEAD:"Leading Technology",LEXM:"Lexmark International",LINK:"Link Computer",LINO:"Linotronic",LITE:"Lite-On",Leaf:"Leaf",Lino:"Linotronic",MAGC:"Mag Computronic",MAGI:"MAG Innovision",MANN:"Mannesmann",MICN:"Micron Technology",MICR:"Microtek",MICV:"Microvitec",MINO:"Minolta",MITS:"Mitsubishi Electronics America",MITs:"Mitsuba",MNLT:"Minolta",MODG:"Modgraph",MONI:"Monitronix",MONS:"Monaco Systems",MORS:"Morse Technology",MOTI:"Motive Systems",MSFT:"Microsoft",MUTO:"MUTOH INDUSTRIES",Mits:"Mitsubishi Electric",NANA:"NANAO",NEC:"NEC",NEXP:"NexPress Solutions",NISS:"Nissei Sangyo America",NKON:"Nikon",NONE:"none",OCE:"Oce Technologies",OCEC:"OceColor",OKI:"Oki",OKID:"Okidata",OKIP:"Okidata",OLIV:"Olivetti",OLYM:"Olympus",ONYX:"Onyx Graphics",OPTI:"Optiquest",PACK:"Packard Bell",PANA:"Matsushita Electric Industrial",PANT:"Pantone",PBN:"Packard Bell",PFU:"PFU",PHIL:"Philips Consumer Electronics",PNTX:"HOYA",POne:"Phase One A/S",PREM:"Premier Computer Innovations",PRIN:"Princeton Graphic Systems",PRIP:"Princeton Publishing Labs",QLUX:"Hong Kong",QMS:"QMS",QPCD:"QPcard AB",QUAD:"QuadLaser",QUME:"Qume",RADI:"Radius",RDDx:"Integrated Color Solutions",RDG:"Roland DG",REDM:"REDMS Group",RELI:"Relisys",RGMS:"Rolf Gierling Multitools",RICO:"Ricoh",RNLD:"Edmund Ronald",ROYA:"Royal",RPC:"Ricoh Printing Systems",RTL:"Royal Information Electronics",SAMP:"Sampo",SAMS:"Samsung",SANT:"Jaime Santana Pomares",SCIT:"Scitex",SCRN:"Dainippon Screen",SDP:"Scitex",SEC:"Samsung",SEIK:"Seiko Instruments",SEIk:"Seikosha",SGUY:"ScanGuy.com",SHAR:"Sharp Laboratories",SICC:"International Color Consortium",SONY:"Sony",SPCL:"SpectraCal",STAR:"Star",STC:"Sampo Technology",Scit:"Scitex",Sdp:"Scitex",Sony:"Sony",TALO:"Talon Technology",TAND:"Tandy",TATU:"Tatung",TAXA:"TAXAN America",TDS:"Tokyo Denshi Sekei",TECO:"TECO Information Systems",TEGR:"Tegra",TEKT:"Tektronix",TI:"Texas Instruments",TMKR:"TypeMaker",TOSB:"Toshiba",TOSH:"Toshiba",TOTK:"TOTOKU ELECTRIC",TRIU:"Triumph",TSBT:"Toshiba",TTX:"TTX Computer Products",TVM:"TVM Professional Monitor",TW:"TW Casper",ULSX:"Ulead Systems",UNIS:"Unisys",UTZF:"Utz Fehlau & Sohn",VARI:"Varityper",VIEW:"Viewsonic",VISL:"Visual communication",VIVO:"Vivo Mobile Communication",WANG:"Wang",WLBR:"Wilbur Imaging",WTG2:"Ware To Go",WYSE:"WYSE Technology",XERX:"Xerox",XRIT:"X-Rite",ZRAN:"Zoran",Zebr:"Zebra Technologies",appl:"Apple Computer",bICC:"basICColor",berg:"bergdesign",ceyd:"Integrated Color Solutions",clsp:"MacDermid ColorSpan",ds:"Dainippon Screen",dupn:"DuPont",ffei:"FujiFilm Electronic Imaging",flux:"FluxData",iris:"Scitex",kart:"Scitex",lcms:"Little CMS",lino:"Linotronic",none:"none",ob4d:"Erdt Systems",obic:"Medigraph",quby:"Qubyx Sarl",scit:"Scitex",scrn:"Dainippon Screen",sdp:"Scitex",siwi:"SIWI GRAFIKA",yxym:"YxyMaster"},Fl={scnr:"Scanner",mntr:"Monitor",prtr:"Printer",link:"Device Link",abst:"Abstract",spac:"Color Space Conversion Profile",nmcl:"Named Color",cenc:"ColorEncodingSpace profile",mid:"MultiplexIdentification profile",mlnk:"MultiplexLink profile",mvis:"MultiplexVisualization profile",nkpf:"Nikon Input Device Profile (NON-STANDARD!)"};mi(Wi,"icc",[[4,Fo],[12,Fl],[40,Object.assign({},Fo,Fl)],[48,Fo],[80,Fo],[64,{0:"Perceptual",1:"Relative Colorimetric",2:"Saturation",3:"Absolute Colorimetric"}],["tech",{amd:"Active Matrix Display",crt:"Cathode Ray Tube Display",kpcd:"Photo CD",pmd:"Passive Matrix Display",dcam:"Digital Camera",dcpj:"Digital Cinema Projector",dmpc:"Digital Motion Picture Camera",dsub:"Dye Sublimation Printer",epho:"Electrophotographic Printer",esta:"Electrostatic Printer",flex:"Flexography",fprn:"Film Writer",fscn:"Film Scanner",grav:"Gravure",ijet:"Ink Jet Printer",imgs:"Photo Image Setter",mpfr:"Motion Picture Film Recorder",mpfs:"Motion Picture Film Scanner",offs:"Offset Lithography",pjtv:"Projection Television",rpho:"Photographic Paper Printer",rscn:"Reflective Scanner",silk:"Silkscreen",twax:"Thermal Wax Printer",vidc:"Video Camera",vidm:"Video Monitor"}]]);var Fa=class extends qi{static canHandle(Gr,Wr,Kr){return Gr.getUint8(Wr+1)===237&&Gr.getString(Wr+4,9)==="Photoshop"&&this.containsIptc8bim(Gr,Wr,Kr)!==void 0}static headerLength(Gr,Wr,Kr){let Yr,Zr=this.containsIptc8bim(Gr,Wr,Kr);if(Zr!==void 0)return Yr=Gr.getUint8(Wr+Zr+7),Yr%2!=0&&(Yr+=1),Yr===0&&(Yr=4),Zr+8+Yr}static containsIptc8bim(Gr,Wr,Kr){for(let Yr=0;Yr<Kr;Yr++)if(this.isIptcSegmentHead(Gr,Wr+Yr))return Yr}static isIptcSegmentHead(Gr,Wr){return Gr.getUint8(Wr)===56&&Gr.getUint32(Wr)===943868237&&Gr.getUint16(Wr+4)===1028}parse(){let{raw:Gr}=this,Wr=this.chunk.byteLength-1,Kr=!1;for(let Yr=0;Yr<Wr;Yr++)if(this.chunk.getUint8(Yr)===28&&this.chunk.getUint8(Yr+1)===2){Kr=!0;let Zr=this.chunk.getUint16(Yr+3),tn=this.chunk.getUint8(Yr+2),ln=this.chunk.getLatin1String(Yr+5,Zr);Gr.set(tn,this.pluralizeValue(Gr.get(tn),ln)),Yr+=4+Zr}else if(Kr)break;return this.translate(),this.output}pluralizeValue(Gr,Wr){return Gr!==void 0?Gr instanceof Array?(Gr.push(Wr),Gr):[Gr,Wr]:Wr}};Kn(Fa,"type","iptc"),Kn(Fa,"translateValues",!1),Kn(Fa,"reviveValues",!1),Ei.set("iptc",Fa),mi(Si,"iptc",[[0,"ApplicationRecordVersion"],[3,"ObjectTypeReference"],[4,"ObjectAttributeReference"],[5,"ObjectName"],[7,"EditStatus"],[8,"EditorialUpdate"],[10,"Urgency"],[12,"SubjectReference"],[15,"Category"],[20,"SupplementalCategories"],[22,"FixtureIdentifier"],[25,"Keywords"],[26,"ContentLocationCode"],[27,"ContentLocationName"],[30,"ReleaseDate"],[35,"ReleaseTime"],[37,"ExpirationDate"],[38,"ExpirationTime"],[40,"SpecialInstructions"],[42,"ActionAdvised"],[45,"ReferenceService"],[47,"ReferenceDate"],[50,"ReferenceNumber"],[55,"DateCreated"],[60,"TimeCreated"],[62,"DigitalCreationDate"],[63,"DigitalCreationTime"],[65,"OriginatingProgram"],[70,"ProgramVersion"],[75,"ObjectCycle"],[80,"Byline"],[85,"BylineTitle"],[90,"City"],[92,"Sublocation"],[95,"State"],[100,"CountryCode"],[101,"Country"],[103,"OriginalTransmissionReference"],[105,"Headline"],[110,"Credit"],[115,"Source"],[116,"CopyrightNotice"],[118,"Contact"],[120,"Caption"],[121,"LocalCaption"],[122,"Writer"],[125,"RasterizedCaption"],[130,"ImageType"],[131,"ImageOrientation"],[135,"LanguageIdentifier"],[150,"AudioType"],[151,"AudioSamplingRate"],[152,"AudioSamplingResolution"],[153,"AudioDuration"],[154,"AudioOutcue"],[184,"JobID"],[185,"MasterDocumentID"],[186,"ShortDocumentID"],[187,"UniqueDocumentID"],[188,"OwnerID"],[200,"ObjectPreviewFileFormat"],[201,"ObjectPreviewFileVersion"],[202,"ObjectPreviewData"],[221,"Prefs"],[225,"ClassifyState"],[228,"SimilarityIndex"],[230,"DocumentNotes"],[231,"DocumentHistory"],[232,"ExifCameraInfo"],[255,"CatalogSets"]]),mi(Wi,"iptc",[[10,{0:"0 (reserved)",1:"1 (most urgent)",2:"2",3:"3",4:"4",5:"5 (normal urgency)",6:"6",7:"7",8:"8 (least urgent)",9:"9 (user-defined priority)"}],[75,{a:"Morning",b:"Both Morning and Evening",p:"Evening"}],[131,{L:"Landscape",P:"Portrait",S:"Square"}]]);var zs=Xu;var Vs=za(mo()),Ql=za(is());var Xl=["DateTimeOriginal","ExposureTime","FNumber","Flash","FocalLengthIn35mmFormat","ISO","LensMake","LensModel","Make","Model"];var es=class{async uploadPhotos(Gr){let Wr=new FormData(Gr),Kr=Wr.getAll("files")??[],Yr=Wr.get("parseExif")==="on";if(Kr.length>10){alert("You can only upload 10 photos at a time");return}let Zr=Kr.map(async ln=>{let dn,yn,Sn;try{if(dn=await Ma(ln),dn===null||typeof dn!="string"){console.error("File data URL is not a string:",dn),alert("Error reading file.");return}}catch(ri){console.error("Error reading file as Data URL:",ri),alert("Error reading file.");return}if(Yr)try{let ri=await zs.parse(ln,{pick:Xl});console.log("EXIF tags:",await zs.parse(ln)),yn=Ju(ri)}catch(ri){console.error("Error reading EXIF data:",ri)}try{Sn=await ro(dn,{width:2e3,height:2e3,maxSize:1e3*1e3,mode:"contain"})}catch(ri){console.error("Error resizing image:",ri),alert("Error resizing image.");return}let kn=to(Sn.path),An=new FormData;An.append("file",kn,ln.name),An.append("width",String(Sn.width)),An.append("height",String(Sn.height)),yn&&An.append("exif",JSON.stringify(yn));let Bn=await fetch("/actions/photo",{method:"POST",body:An});if(!Bn.ok){alert(await Bn.text());return}let jn=await Bn.text(),Vn=document.createElement("div");Vn.innerHTML=jn;let ti=Vn?.firstElementChild?.id,si=document.querySelector("#image-preview");if(si){let ri=Vn.firstElementChild;ri&&si.insertBefore(ri,si.firstChild),Vs.default.process(si);let oi=si.querySelector(`#delete-photo-${ti}`);if(!oi)return;Vs.default.process(oi),Ql.default.processNode(oi)}});await Promise.all(Zr);let tn=Gr.querySelector("input[type='file']");tn instanceof HTMLInputElement&&(tn.value="")}},$u=1e6;function Ju(Qr,Gr=$u){let Wr={};for(let[Kr,Yr]of Object.entries(Qr)){let Zr=Kr[0].toLowerCase()+Kr.slice(1);typeof Yr=="number"?Wr[Zr]=Math.round(Yr*Gr):Array.isArray(Yr)?Wr[Zr]=Yr.map(tn=>typeof tn=="number"?Math.round(tn*Gr):tn):Yr instanceof Date?Wr[Zr]=Yr.toISOString():typeof Yr=="string"||typeof Yr=="boolean"?Wr[Zr]=Yr:Yr===void 0?Wr[Zr]=void 0:Wr[Zr]=String(Yr)}return Wr}var Kl=new Ro({layoutMode:"justified"});Kl.init();Ws.default.onLoad(function(Qr){if(No.maybeInitForElement(Qr),Qr.id==="gallery-sort-dialog"){let Gr=Qr.querySelectorAll(".sortable");for(let Wr of Array.from(Gr))new Tl(Wr,{animation:150})}});Xs.default.browserInit();var Zi=globalThis;Zi.htmx=Zi.htmx??Ws.default;Zi._hyperscript=Zi._hyperscript??Xs.default;Zi.Grain=Zi.Grain??{};Zi.Grain.uploadPage=new es;Zi.Grain.profileDialog=new Lo;Zi.Grain.galleryLayout=Kl;Zi.Grain.photoManip=xs; 15 17 /*! Bundled license information: 16 18 17 19 sortablejs/modular/sortable.esm.js:
+59 -1
static/styles.css
··· 1 - /*! tailwindcss v4.1.8 | MIT License | https://tailwindcss.com */ 1 + /*! tailwindcss v4.1.9 | MIT License | https://tailwindcss.com */ 2 2 @layer properties; 3 3 @layer theme, base, components, utilities; 4 4 @layer theme { ··· 8 8 --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", 9 9 "Courier New", monospace; 10 10 --color-sky-500: oklch(68.5% 0.169 237.323); 11 + --color-sky-600: oklch(58.8% 0.158 241.966); 11 12 --color-zinc-50: oklch(98.5% 0 0); 12 13 --color-zinc-100: oklch(96.7% 0.001 286.375); 13 14 --color-zinc-200: oklch(92% 0.004 286.32); ··· 272 273 .z-100 { 273 274 z-index: 100; 274 275 } 276 + .z-101 { 277 + z-index: 101; 278 + } 275 279 .container { 276 280 width: 100%; 277 281 @media (width >= 40rem) { ··· 290 294 max-width: 96rem; 291 295 } 292 296 } 297 + .-m-2 { 298 + margin: calc(var(--spacing) * -2); 299 + } 293 300 .mx-1 { 294 301 margin-inline: calc(var(--spacing) * 1); 295 302 } ··· 298 305 } 299 306 .mx-auto { 300 307 margin-inline: auto; 308 + } 309 + .my-1 { 310 + margin-block: calc(var(--spacing) * 1); 301 311 } 302 312 .my-2 { 303 313 margin-block: calc(var(--spacing) * 2); ··· 344 354 .ml-0 { 345 355 margin-left: calc(var(--spacing) * 0); 346 356 } 357 + .ml-1 { 358 + margin-left: calc(var(--spacing) * 1); 359 + } 360 + .ml-6 { 361 + margin-left: calc(var(--spacing) * 6); 362 + } 347 363 .block { 348 364 display: block; 349 365 } ··· 443 459 } 444 460 .max-w-5xl { 445 461 max-width: var(--container-5xl); 462 + } 463 + .max-w-\[60\%\] { 464 + max-width: 60%; 446 465 } 447 466 .max-w-\[200px\] { 448 467 max-width: 200px; ··· 552 571 margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse))); 553 572 } 554 573 } 574 + .gap-x-4 { 575 + column-gap: calc(var(--spacing) * 4); 576 + } 555 577 .space-x-1 { 556 578 :where(& > :not(:last-child)) { 557 579 --tw-space-x-reverse: 0; ··· 573 595 margin-inline-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse))); 574 596 } 575 597 } 598 + .gap-y-2 { 599 + row-gap: calc(var(--spacing) * 2); 600 + } 576 601 .divide-y { 577 602 :where(& > :not(:last-child)) { 578 603 --tw-divide-y-reverse: 0; ··· 586 611 :where(& > :not(:last-child)) { 587 612 border-color: var(--color-zinc-200); 588 613 } 614 + } 615 + .self-end { 616 + align-self: flex-end; 589 617 } 590 618 .self-start { 591 619 align-self: flex-start; ··· 636 664 .bg-sky-500 { 637 665 background-color: var(--color-sky-500); 638 666 } 667 + .bg-transparent { 668 + background-color: transparent; 669 + } 639 670 .bg-white { 640 671 background-color: var(--color-white); 641 672 } ··· 671 702 } 672 703 .p-4 { 673 704 padding: calc(var(--spacing) * 4); 705 + } 706 + .px-1 { 707 + padding-inline: calc(var(--spacing) * 1); 674 708 } 675 709 .px-2 { 676 710 padding-inline: calc(var(--spacing) * 2); ··· 714 748 .text-left { 715 749 text-align: left; 716 750 } 751 + .text-right { 752 + text-align: right; 753 + } 717 754 .font-\[\'Jersey_20\'\] { 718 755 font-family: 'Jersey 20'; 719 756 } ··· 778 815 .text-white { 779 816 color: var(--color-white); 780 817 } 818 + .text-zinc-50 { 819 + color: var(--color-zinc-50); 820 + } 781 821 .text-zinc-500 { 782 822 color: var(--color-zinc-500); 783 823 } ··· 801 841 } 802 842 .underline { 803 843 text-decoration-line: underline; 844 + } 845 + .accent-sky-600 { 846 + accent-color: var(--color-sky-600); 804 847 } 805 848 .shadow { 806 849 --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); ··· 875 918 position: fixed; 876 919 } 877 920 } 921 + .sm\:static { 922 + @media (width >= 40rem) { 923 + position: static; 924 + } 925 + } 878 926 .sm\:top-0 { 879 927 @media (width >= 40rem) { 880 928 top: calc(var(--spacing) * 0); ··· 913 961 .sm\:ml-2 { 914 962 @media (width >= 40rem) { 915 963 margin-left: calc(var(--spacing) * 2); 964 + } 965 + } 966 + .sm\:block { 967 + @media (width >= 40rem) { 968 + display: block; 969 + } 970 + } 971 + .sm\:hidden { 972 + @media (width >= 40rem) { 973 + display: none; 916 974 } 917 975 } 918 976 .sm\:h-screen {