+19
__generated__/index.ts
+19
__generated__/index.ts
···
31
31
DefsClickthroughReposter: 'app.bsky.feed.defs#clickthroughReposter',
32
32
DefsContentModeUnspecified: 'app.bsky.feed.defs#contentModeUnspecified',
33
33
}
34
+
export const COM_ATPROTO_MODERATION = {
35
+
DefsReasonRude: 'com.atproto.moderation.defs#reasonRude',
36
+
DefsReasonSpam: 'com.atproto.moderation.defs#reasonSpam',
37
+
DefsReasonOther: 'com.atproto.moderation.defs#reasonOther',
38
+
DefsReasonAppeal: 'com.atproto.moderation.defs#reasonAppeal',
39
+
DefsReasonSexual: 'com.atproto.moderation.defs#reasonSexual',
40
+
DefsReasonViolation: 'com.atproto.moderation.defs#reasonViolation',
41
+
DefsReasonMisleading: 'com.atproto.moderation.defs#reasonMisleading',
42
+
}
34
43
35
44
export function createServer(options?: XrpcOptions): Server {
36
45
return new Server(options)
···
172
181
_server: Server
173
182
gallery: SocialGrainGalleryNS
174
183
graph: SocialGrainGraphNS
184
+
labeler: SocialGrainLabelerNS
175
185
actor: SocialGrainActorNS
176
186
photo: SocialGrainPhotoNS
177
187
···
179
189
this._server = server
180
190
this.gallery = new SocialGrainGalleryNS(server)
181
191
this.graph = new SocialGrainGraphNS(server)
192
+
this.labeler = new SocialGrainLabelerNS(server)
182
193
this.actor = new SocialGrainActorNS(server)
183
194
this.photo = new SocialGrainPhotoNS(server)
184
195
}
···
193
204
}
194
205
195
206
export class SocialGrainGraphNS {
207
+
_server: Server
208
+
209
+
constructor(server: Server) {
210
+
this._server = server
211
+
}
212
+
}
213
+
214
+
export class SocialGrainLabelerNS {
196
215
_server: Server
197
216
198
217
constructor(server: Server) {
+275
__generated__/lexicons.ts
+275
__generated__/lexicons.ts
···
2527
2527
refs: ['lex:social.grain.photo.defs#photoView'],
2528
2528
},
2529
2529
},
2530
+
labels: {
2531
+
type: 'array',
2532
+
items: {
2533
+
type: 'ref',
2534
+
ref: 'lex:com.atproto.label.defs#label',
2535
+
},
2536
+
},
2530
2537
indexedAt: {
2531
2538
type: 'string',
2532
2539
format: 'datetime',
···
2554
2561
type: 'string',
2555
2562
maxLength: 1000,
2556
2563
},
2564
+
labels: {
2565
+
type: 'union',
2566
+
description:
2567
+
'Self-label values for this post. Effectively content warnings.',
2568
+
refs: ['lex:com.atproto.label.defs#selfLabels'],
2569
+
},
2557
2570
createdAt: {
2558
2571
type: 'string',
2559
2572
format: 'datetime',
···
2587
2600
},
2588
2601
},
2589
2602
},
2603
+
SocialGrainLabelerDefs: {
2604
+
lexicon: 1,
2605
+
id: 'social.grain.labeler.defs',
2606
+
defs: {
2607
+
labelerView: {
2608
+
type: 'object',
2609
+
required: ['uri', 'cid', 'creator', 'indexedAt'],
2610
+
properties: {
2611
+
uri: {
2612
+
type: 'string',
2613
+
format: 'at-uri',
2614
+
},
2615
+
cid: {
2616
+
type: 'string',
2617
+
format: 'cid',
2618
+
},
2619
+
creator: {
2620
+
type: 'ref',
2621
+
ref: 'lex:social.grain.actor.defs#profileView',
2622
+
},
2623
+
favoriteCount: {
2624
+
type: 'integer',
2625
+
minimum: 0,
2626
+
},
2627
+
viewer: {
2628
+
type: 'ref',
2629
+
ref: 'lex:social.grain.labeler.defs#labelerViewerState',
2630
+
},
2631
+
indexedAt: {
2632
+
type: 'string',
2633
+
format: 'datetime',
2634
+
},
2635
+
labels: {
2636
+
type: 'array',
2637
+
items: {
2638
+
type: 'ref',
2639
+
ref: 'lex:com.atproto.label.defs#label',
2640
+
},
2641
+
},
2642
+
},
2643
+
},
2644
+
labelerViewDetailed: {
2645
+
type: 'object',
2646
+
required: ['uri', 'cid', 'creator', 'policies', 'indexedAt'],
2647
+
properties: {
2648
+
uri: {
2649
+
type: 'string',
2650
+
format: 'at-uri',
2651
+
},
2652
+
cid: {
2653
+
type: 'string',
2654
+
format: 'cid',
2655
+
},
2656
+
creator: {
2657
+
type: 'ref',
2658
+
ref: 'lex:app.bsky.actor.defs#profileView',
2659
+
},
2660
+
policies: {
2661
+
type: 'ref',
2662
+
ref: 'lex:social.grain.actor.defs#labelerPolicies',
2663
+
},
2664
+
favoriteCount: {
2665
+
type: 'integer',
2666
+
minimum: 0,
2667
+
},
2668
+
viewer: {
2669
+
type: 'ref',
2670
+
ref: 'lex:social.grain.labeler.defs#labelerViewerState',
2671
+
},
2672
+
indexedAt: {
2673
+
type: 'string',
2674
+
format: 'datetime',
2675
+
},
2676
+
labels: {
2677
+
type: 'array',
2678
+
items: {
2679
+
type: 'ref',
2680
+
ref: 'lex:com.atproto.label.defs#label',
2681
+
},
2682
+
},
2683
+
reasonTypes: {
2684
+
description:
2685
+
"The set of report reason 'codes' which are in-scope for this service to review and action. These usually align to policy categories. If not defined (distinct from empty array), all reason types are allowed.",
2686
+
type: 'array',
2687
+
items: {
2688
+
type: 'ref',
2689
+
ref: 'lex:com.atproto.moderation.defs#reasonType',
2690
+
},
2691
+
},
2692
+
subjectTypes: {
2693
+
description:
2694
+
'The set of subject types (account, record, etc) this service accepts reports on.',
2695
+
type: 'array',
2696
+
items: {
2697
+
type: 'ref',
2698
+
ref: 'lex:com.atproto.moderation.defs#subjectType',
2699
+
},
2700
+
},
2701
+
subjectCollections: {
2702
+
type: 'array',
2703
+
description:
2704
+
'Set of record types (collection NSIDs) which can be reported to this service. If not defined (distinct from empty array), default is any record type.',
2705
+
items: {
2706
+
type: 'string',
2707
+
format: 'nsid',
2708
+
},
2709
+
},
2710
+
},
2711
+
},
2712
+
labelerViewerState: {
2713
+
type: 'object',
2714
+
properties: {
2715
+
like: {
2716
+
type: 'string',
2717
+
format: 'at-uri',
2718
+
},
2719
+
},
2720
+
},
2721
+
labelerPolicies: {
2722
+
type: 'object',
2723
+
required: ['labelValues'],
2724
+
properties: {
2725
+
labelValues: {
2726
+
type: 'array',
2727
+
description:
2728
+
'The label values which this labeler publishes. May include global or custom labels.',
2729
+
items: {
2730
+
type: 'ref',
2731
+
ref: 'lex:com.atproto.label.defs#labelValue',
2732
+
},
2733
+
},
2734
+
labelValueDefinitions: {
2735
+
type: 'array',
2736
+
description:
2737
+
'Label values created by this labeler and scoped exclusively to it. Labels defined here will override global label definitions for this labeler.',
2738
+
items: {
2739
+
type: 'ref',
2740
+
ref: 'lex:com.atproto.label.defs#labelValueDefinition',
2741
+
},
2742
+
},
2743
+
},
2744
+
},
2745
+
},
2746
+
},
2747
+
SocialGrainLabelerService: {
2748
+
lexicon: 1,
2749
+
id: 'social.grain.labeler.service',
2750
+
defs: {
2751
+
main: {
2752
+
type: 'record',
2753
+
description: 'A declaration of the existence of labeler service.',
2754
+
key: 'literal:self',
2755
+
record: {
2756
+
type: 'object',
2757
+
required: ['policies', 'createdAt'],
2758
+
properties: {
2759
+
policies: {
2760
+
type: 'ref',
2761
+
ref: 'lex:app.bsky.labeler.defs#labelerPolicies',
2762
+
},
2763
+
labels: {
2764
+
type: 'union',
2765
+
refs: ['lex:com.atproto.label.defs#selfLabels'],
2766
+
},
2767
+
createdAt: {
2768
+
type: 'string',
2769
+
format: 'datetime',
2770
+
},
2771
+
reasonTypes: {
2772
+
description:
2773
+
"The set of report reason 'codes' which are in-scope for this service to review and action. These usually align to policy categories. If not defined (distinct from empty array), all reason types are allowed.",
2774
+
type: 'array',
2775
+
items: {
2776
+
type: 'ref',
2777
+
ref: 'lex:com.atproto.moderation.defs#reasonType',
2778
+
},
2779
+
},
2780
+
subjectTypes: {
2781
+
description:
2782
+
'The set of subject types (account, record, etc) this service accepts reports on.',
2783
+
type: 'array',
2784
+
items: {
2785
+
type: 'ref',
2786
+
ref: 'lex:com.atproto.moderation.defs#subjectType',
2787
+
},
2788
+
},
2789
+
subjectCollections: {
2790
+
type: 'array',
2791
+
description:
2792
+
'Set of record types (collection NSIDs) which can be reported to this service. If not defined (distinct from empty array), default is any record type.',
2793
+
items: {
2794
+
type: 'string',
2795
+
format: 'nsid',
2796
+
},
2797
+
},
2798
+
},
2799
+
},
2800
+
},
2801
+
},
2802
+
},
2590
2803
SocialGrainFavorite: {
2591
2804
lexicon: 1,
2592
2805
id: 'social.grain.favorite',
···
2636
2849
type: 'string',
2637
2850
maxLength: 2560,
2638
2851
maxGraphemes: 256,
2852
+
},
2853
+
labels: {
2854
+
type: 'array',
2855
+
items: {
2856
+
ref: 'lex:com.atproto.label.defs#label',
2857
+
type: 'ref',
2858
+
},
2639
2859
},
2640
2860
avatar: {
2641
2861
type: 'string',
···
3075
3295
},
3076
3296
},
3077
3297
},
3298
+
ComAtprotoModerationDefs: {
3299
+
lexicon: 1,
3300
+
id: 'com.atproto.moderation.defs',
3301
+
defs: {
3302
+
reasonRude: {
3303
+
type: 'token',
3304
+
description:
3305
+
'Rude, harassing, explicit, or otherwise unwelcoming behavior',
3306
+
},
3307
+
reasonSpam: {
3308
+
type: 'token',
3309
+
description: 'Spam: frequent unwanted promotion, replies, mentions',
3310
+
},
3311
+
reasonType: {
3312
+
type: 'string',
3313
+
knownValues: [
3314
+
'com.atproto.moderation.defs#reasonSpam',
3315
+
'com.atproto.moderation.defs#reasonViolation',
3316
+
'com.atproto.moderation.defs#reasonMisleading',
3317
+
'com.atproto.moderation.defs#reasonSexual',
3318
+
'com.atproto.moderation.defs#reasonRude',
3319
+
'com.atproto.moderation.defs#reasonOther',
3320
+
'com.atproto.moderation.defs#reasonAppeal',
3321
+
],
3322
+
},
3323
+
reasonOther: {
3324
+
type: 'token',
3325
+
description: 'Other: reports not falling under another report category',
3326
+
},
3327
+
subjectType: {
3328
+
type: 'string',
3329
+
description: 'Tag describing a type of subject that might be reported.',
3330
+
knownValues: ['account', 'record', 'chat'],
3331
+
},
3332
+
reasonAppeal: {
3333
+
type: 'token',
3334
+
description: 'Appeal: appeal a previously taken moderation action',
3335
+
},
3336
+
reasonSexual: {
3337
+
type: 'token',
3338
+
description: 'Unwanted or mislabeled sexual content',
3339
+
},
3340
+
reasonViolation: {
3341
+
type: 'token',
3342
+
description: 'Direct violation of server rules, laws, terms of service',
3343
+
},
3344
+
reasonMisleading: {
3345
+
type: 'token',
3346
+
description: 'Misleading identity, affiliation, or content',
3347
+
},
3348
+
},
3349
+
},
3078
3350
} as const satisfies Record<string, LexiconDoc>
3079
3351
export const schemas = Object.values(schemaDict) satisfies LexiconDoc[]
3080
3352
export const lexicons: Lexicons = new Lexicons(schemas)
···
3131
3403
SocialGrainGalleryDefs: 'social.grain.gallery.defs',
3132
3404
SocialGrainGallery: 'social.grain.gallery',
3133
3405
SocialGrainGraphFollow: 'social.grain.graph.follow',
3406
+
SocialGrainLabelerDefs: 'social.grain.labeler.defs',
3407
+
SocialGrainLabelerService: 'social.grain.labeler.service',
3134
3408
SocialGrainFavorite: 'social.grain.favorite',
3135
3409
SocialGrainActorDefs: 'social.grain.actor.defs',
3136
3410
SocialGrainActorProfile: 'social.grain.actor.profile',
···
3139
3413
SocialGrainPhoto: 'social.grain.photo',
3140
3414
ComAtprotoLabelDefs: 'com.atproto.label.defs',
3141
3415
ComAtprotoRepoStrongRef: 'com.atproto.repo.strongRef',
3416
+
ComAtprotoModerationDefs: 'com.atproto.moderation.defs',
3142
3417
} as const
+44
__generated__/types/com/atproto/moderation/defs.ts
+44
__generated__/types/com/atproto/moderation/defs.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 = 'com.atproto.moderation.defs'
16
+
/** Rude, harassing, explicit, or otherwise unwelcoming behavior */
17
+
export const REASONRUDE = `${id}#reasonRude`
18
+
/** Spam: frequent unwanted promotion, replies, mentions */
19
+
export const REASONSPAM = `${id}#reasonSpam`
20
+
21
+
export type ReasonType =
22
+
| 'com.atproto.moderation.defs#reasonSpam'
23
+
| 'com.atproto.moderation.defs#reasonViolation'
24
+
| 'com.atproto.moderation.defs#reasonMisleading'
25
+
| 'com.atproto.moderation.defs#reasonSexual'
26
+
| 'com.atproto.moderation.defs#reasonRude'
27
+
| 'com.atproto.moderation.defs#reasonOther'
28
+
| 'com.atproto.moderation.defs#reasonAppeal'
29
+
| (string & {})
30
+
31
+
/** Other: reports not falling under another report category */
32
+
export const REASONOTHER = `${id}#reasonOther`
33
+
34
+
/** Tag describing a type of subject that might be reported. */
35
+
export type SubjectType = 'account' | 'record' | 'chat' | (string & {})
36
+
37
+
/** Appeal: appeal a previously taken moderation action */
38
+
export const REASONAPPEAL = `${id}#reasonAppeal`
39
+
/** Unwanted or mislabeled sexual content */
40
+
export const REASONSEXUAL = `${id}#reasonSexual`
41
+
/** Direct violation of server rules, laws, terms of service */
42
+
export const REASONVIOLATION = `${id}#reasonViolation`
43
+
/** Misleading identity, affiliation, or content */
44
+
export const REASONMISLEADING = `${id}#reasonMisleading`
+2
-5
deno.json
+2
-5
deno.json
···
2
2
"imports": {
3
3
"$lexicon/": "./__generated__/",
4
4
"@atproto/syntax": "npm:@atproto/syntax@^0.4.0",
5
-
"@bigmoves/bff": "jsr:@bigmoves/bff@0.3.0-beta.32",
5
+
"@bigmoves/bff": "jsr:@bigmoves/bff@0.3.0-beta.33",
6
6
"@luca/esbuild-deno-loader": "jsr:@luca/esbuild-deno-loader@^0.11.1",
7
7
"@std/http": "jsr:@std/http@^1.0.17",
8
8
"@std/path": "jsr:@std/path@^1.0.9",
···
18
18
"tailwindcss": "npm:tailwindcss@^4.1.4",
19
19
"typed-htmx": "npm:typed-htmx@^0.3.1"
20
20
},
21
-
"patch": [
22
-
"../bff/packages/bff"
23
-
],
24
21
"tasks": {
25
22
"start": "deno run -A ./src/main.tsx",
26
23
"build": "rm -f ./static/app.esm.js.map && deno run -A build.ts",
···
28
25
"dev:build": "deno -A --watch=src/static/ build.ts",
29
26
"dev:server": "deno run -A --env-file=.env --watch ./src/main.tsx",
30
27
"dev:tailwind": "deno run -A --node-modules-dir npm:@tailwindcss/cli -i ./src/input.css -o ./static/styles.css --watch",
31
-
"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",
32
29
"codegen": "deno run -A jsr:@bigmoves/bff-cli@0.3.0-beta.30 lexgen"
33
30
},
34
31
"compilerOptions": {
+13
-510
deno.lock
+13
-510
deno.lock
···
2
2
"version": "5",
3
3
"specifiers": {
4
4
"jsr:@bigmoves/atproto-oauth-client@0.2": "0.2.0",
5
-
"jsr:@bigmoves/bff@0.3.0-beta.32": "0.3.0-beta.32",
6
-
"jsr:@deno/gfm@0.10": "0.10.0",
7
-
"jsr:@denosaurs/emoji@0.3": "0.3.1",
5
+
"jsr:@bigmoves/bff@0.3.0-beta.33": "0.3.0-beta.33",
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
-
"npm:@atproto-labs/simple-store@~0.1.2": "0.1.2",
35
26
"npm:@atproto/api@~0.15.7": "0.15.12",
36
27
"npm:@atproto/common@~0.4.10": "0.4.11",
37
28
"npm:@atproto/identity@~0.4.7": "0.4.8",
38
29
"npm:@atproto/jwk@0.1.4": "0.1.4",
39
-
"npm:@atproto/lex-cli@*": "0.8.2",
40
30
"npm:@atproto/lexicon@*": "0.4.11",
41
31
"npm:@atproto/lexicon@~0.4.11": "0.4.11",
42
32
"npm:@atproto/oauth-client@~0.3.13": "0.3.20",
43
-
"npm:@atproto/oauth-types@~0.2.4": "0.2.8",
44
33
"npm:@atproto/syntax@0.4": "0.4.0",
45
34
"npm:@atproto/xrpc-server@*": "0.7.19",
46
35
"npm:@tailwindcss/cli@*": "4.1.8",
47
-
"npm:@tailwindcss/cli@^4.0.12": "4.1.8",
48
-
"npm:@tailwindcss/cli@^4.1.3": "4.1.8",
49
36
"npm:@tailwindcss/cli@^4.1.4": "4.1.8",
50
-
"npm:@types/node@*": "22.15.15",
51
-
"npm:buffer@^6.0.3": "6.0.3",
52
37
"npm:clsx@^2.1.1": "2.1.1",
53
38
"npm:date-fns@^4.1.0": "4.1.0",
54
39
"npm:esbuild@~0.25.5": "0.25.5",
55
-
"npm:exif-esm@^1.0.1": "1.0.1",
56
40
"npm:exifr@^7.1.3": "7.1.3",
57
-
"npm:github-slugger@2": "2.0.0",
58
-
"npm:he@^1.2.0": "1.2.0",
59
41
"npm:htmx.org@^1.9.12": "1.9.12",
60
42
"npm:hyperscript.org@~0.9.14": "0.9.14",
61
43
"npm:jose@5.9.6": "5.9.6",
62
-
"npm:katex@0.16": "0.16.22",
63
-
"npm:marked-alert@2": "2.1.2_marked@12.0.2",
64
-
"npm:marked-footnote@^1.2.0": "1.2.4_marked@12.0.2",
65
-
"npm:marked-gfm-heading-id@^3.1.0": "3.2.0_marked@12.0.2",
66
-
"npm:marked@12": "12.0.2",
67
44
"npm:multiformats@*": "13.3.6",
68
45
"npm:multiformats@^13.3.2": "13.3.6",
69
46
"npm:popmotion@^11.0.5": "11.0.5",
70
47
"npm:preact-render-to-string@^6.5.13": "6.5.13_preact@10.26.8",
71
48
"npm:preact@^10.26.5": "10.26.8",
72
-
"npm:prismjs@^1.29.0": "1.30.0",
73
-
"npm:sanitize-html@^2.13.0": "2.17.0",
74
-
"npm:sharp@~0.34.1": "0.34.1",
75
49
"npm:sortablejs@^1.15.6": "1.15.6",
76
50
"npm:tailwind-merge@^3.2.0": "3.3.0",
77
-
"npm:tailwindcss@^4.0.12": "4.1.8",
78
-
"npm:tailwindcss@^4.1.3": "4.1.8",
79
51
"npm:tailwindcss@^4.1.4": "4.1.8",
80
52
"npm:typed-htmx@~0.3.1": "0.3.1"
81
53
},
···
84
56
"integrity": "5c3ca124dd52eff51dace83790779ebe48c4b41559b799e16c8750bd415f2124",
85
57
"dependencies": [
86
58
"npm:@atproto-labs/handle-resolver-node",
87
-
"npm:@atproto-labs/simple-store",
88
59
"npm:@atproto/jwk",
89
60
"npm:@atproto/oauth-client",
90
-
"npm:@atproto/oauth-types",
91
61
"npm:jose"
92
62
]
93
63
},
···
99
69
"npm:tailwind-merge"
100
70
]
101
71
},
102
-
"@bigmoves/bff@0.3.0-beta.32": {
103
-
"integrity": "d33581157c6d52bd9ecccdbcb090559377de71d28137ce7fdf3882740390a389",
72
+
"@bigmoves/bff@0.3.0-beta.33": {
73
+
"integrity": "6e1f7ca871be05270e45742a7a6576dc1bf3247de7fa1ec966a30a93d2a79556",
104
74
"dependencies": [
105
75
"jsr:@bigmoves/atproto-oauth-client",
106
-
"jsr:@std/assert@^1.0.13",
76
+
"jsr:@std/assert",
77
+
"jsr:@std/cache",
107
78
"jsr:@std/fmt",
108
79
"jsr:@std/http@^1.0.13",
109
80
"jsr:@std/path@^1.0.8",
···
120
91
"npm:tailwind-merge"
121
92
]
122
93
},
123
-
"@deno/gfm@0.10.0": {
124
-
"integrity": "51708205e3559a4aeb6afb29d07c5bfafe7941f91bb360351ef6621de9a39527",
125
-
"dependencies": [
126
-
"jsr:@denosaurs/emoji",
127
-
"npm:github-slugger",
128
-
"npm:he",
129
-
"npm:katex",
130
-
"npm:marked",
131
-
"npm:marked-alert",
132
-
"npm:marked-footnote",
133
-
"npm:marked-gfm-heading-id",
134
-
"npm:prismjs",
135
-
"npm:sanitize-html"
136
-
]
137
-
},
138
-
"@denosaurs/emoji@0.3.1": {
139
-
"integrity": "b0aed5f55dec99e83da7c9637fe0a36d1d6252b7c99deaaa3fc5dea3fcf3da8b"
140
-
},
141
94
"@luca/esbuild-deno-loader@0.11.1": {
142
95
"integrity": "dc020d16d75b591f679f6b9288b10f38bdb4f24345edb2f5732affa1d9885267",
143
96
"dependencies": [
···
152
105
"jsr:@std/internal"
153
106
]
154
107
},
155
-
"@std/async@1.0.12": {
156
-
"integrity": "d1bfcec459e8012846fe4e38dfc4241ab23240ecda3d8d6dfcf6d81a632e803d"
157
-
},
158
108
"@std/bytes@1.0.6": {
159
109
"integrity": "f6ac6adbd8ccd99314045f5703e23af0a68d7f7e58364b47d2c7f408aeb5820a"
160
110
},
···
164
114
"@std/cli@1.0.19": {
165
115
"integrity": "b3601a54891f89f3f738023af11960c4e6f7a45dc76cde39a6861124cba79e88"
166
116
},
167
-
"@std/data-structures@1.0.7": {
168
-
"integrity": "16932d2c8d281f65eaaa2209af2473209881e33b1ced54cd1b015e7b4cdbb0d2"
169
-
},
170
117
"@std/encoding@1.0.10": {
171
118
"integrity": "8783c6384a2d13abd5e9e87a7ae0520a30e9f56aeeaa3bdf910a3eaaf5c811a1"
172
119
},
173
120
"@std/fmt@1.0.8": {
174
121
"integrity": "71e1fc498787e4434d213647a6e43e794af4fd393ef8f52062246e06f7e372b7"
175
122
},
176
-
"@std/fs@1.0.17": {
177
-
"integrity": "1c00c632677c1158988ef7a004cb16137f870aafdb8163b9dce86ec652f3952b",
178
-
"dependencies": [
179
-
"jsr:@std/path@^1.0.9"
180
-
]
181
-
},
182
123
"@std/html@1.0.4": {
183
124
"integrity": "eff3497c08164e6ada49b7f81a28b5108087033823153d065e3f89467dd3d50e"
184
125
},
185
126
"@std/http@1.0.17": {
186
127
"integrity": "98aec8ab4080d95c21f731e3008f69c29c5012d12f1b4e553f85935db601569f",
187
128
"dependencies": [
188
-
"jsr:@std/cli@^1.0.18",
129
+
"jsr:@std/cli",
189
130
"jsr:@std/encoding@^1.0.10",
190
131
"jsr:@std/fmt",
191
132
"jsr:@std/html",
···
209
150
},
210
151
"@std/streams@1.0.9": {
211
152
"integrity": "a9d26b1988cdd7aa7b1f4b51e1c36c1557f3f252880fa6cc5b9f37078b1a5035"
212
-
},
213
-
"@std/testing@1.0.11": {
214
-
"integrity": "12b3db12d34f0f385a26248933bde766c0f8c5ad8b6ab34d4d38f528ab852f48",
215
-
"dependencies": [
216
-
"jsr:@std/assert@^1.0.12",
217
-
"jsr:@std/async",
218
-
"jsr:@std/data-structures",
219
-
"jsr:@std/fs",
220
-
"jsr:@std/internal",
221
-
"jsr:@std/path@^1.0.8"
222
-
]
223
153
}
224
154
},
225
155
"npm": {
···
235
165
"dependencies": [
236
166
"@atproto-labs/fetch",
237
167
"@atproto-labs/pipe",
238
-
"@atproto-labs/simple-store@0.2.0",
168
+
"@atproto-labs/simple-store",
239
169
"@atproto-labs/simple-store-memory",
240
170
"@atproto/did",
241
171
"zod"
···
267
197
"@atproto-labs/handle-resolver@0.1.8": {
268
198
"integrity": "sha512-Y0ckccoCGDo/3g4thPkgp9QcORmc+qqEaCBCYCZYtfLIQp4775u22wd+4fyEyJP4DqoReKacninkICgRGfs3dQ==",
269
199
"dependencies": [
270
-
"@atproto-labs/simple-store@0.2.0",
200
+
"@atproto-labs/simple-store",
271
201
"@atproto-labs/simple-store-memory",
272
202
"@atproto/did",
273
203
"zod"
···
287
217
"@atproto-labs/simple-store-memory@0.1.3": {
288
218
"integrity": "sha512-jkitT9+AtU+0b28DoN92iURLaCt/q/q4yX8q6V+9LSwYlUTqKoj/5NFKvF7x6EBuG+gpUdlcycbH7e60gjOhRQ==",
289
219
"dependencies": [
290
-
"@atproto-labs/simple-store@0.2.0",
220
+
"@atproto-labs/simple-store",
291
221
"lru-cache"
292
222
]
293
-
},
294
-
"@atproto-labs/simple-store@0.1.2": {
295
-
"integrity": "sha512-9vTNvyPPBs44tKVFht16wGlilW8u4wpEtKwLkWbuNEh3h9TTQ8zjVhEoGZh/v73G4Otr9JUOSIq+/5+8OZD2mQ=="
296
223
},
297
224
"@atproto-labs/simple-store@0.2.0": {
298
225
"integrity": "sha512-0bRbAlI8Ayh03wRwncAMEAyUKtZ+AuTS1jgPrfym1WVOAOiottI/ZmgccqLl6w5MbxVcClNQF7WYGKvGwGoIhA=="
···
365
292
"zod"
366
293
]
367
294
},
368
-
"@atproto/lex-cli@0.8.2": {
369
-
"integrity": "sha512-yNQFYBV3tBBLnVrRUtUBlx/WIF4ypMFsvOsCLjA7pHL1SyW9JbczSEAoiNtoDmPc4UXCjMtXggz0ovBG8lynNA==",
370
-
"dependencies": [
371
-
"@atproto/lexicon",
372
-
"@atproto/syntax",
373
-
"chalk",
374
-
"commander@9.5.0",
375
-
"prettier",
376
-
"ts-morph",
377
-
"yesno",
378
-
"zod"
379
-
],
380
-
"bin": true
381
-
},
382
295
"@atproto/lexicon@0.4.11": {
383
296
"integrity": "sha512-btefdnvNz2Ao2I+qbmj0F06HC8IlrM/IBz6qOBS50r0S6uDf5tOO+Mv2tSVdimFkdzyDdLtBI1sV36ONxz2cOw==",
384
297
"dependencies": [
···
396
309
"@atproto-labs/fetch",
397
310
"@atproto-labs/handle-resolver",
398
311
"@atproto-labs/identity-resolver",
399
-
"@atproto-labs/simple-store@0.2.0",
312
+
"@atproto-labs/simple-store",
400
313
"@atproto-labs/simple-store-memory",
401
314
"@atproto/did",
402
315
"@atproto/jwk@0.2.0",
···
614
527
"os": ["win32"],
615
528
"cpu": ["x64"]
616
529
},
617
-
"@img/sharp-darwin-arm64@0.34.1": {
618
-
"integrity": "sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==",
619
-
"optionalDependencies": [
620
-
"@img/sharp-libvips-darwin-arm64"
621
-
],
622
-
"os": ["darwin"],
623
-
"cpu": ["arm64"]
624
-
},
625
-
"@img/sharp-darwin-x64@0.34.1": {
626
-
"integrity": "sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==",
627
-
"optionalDependencies": [
628
-
"@img/sharp-libvips-darwin-x64"
629
-
],
630
-
"os": ["darwin"],
631
-
"cpu": ["x64"]
632
-
},
633
-
"@img/sharp-libvips-darwin-arm64@1.1.0": {
634
-
"integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==",
635
-
"os": ["darwin"],
636
-
"cpu": ["arm64"]
637
-
},
638
-
"@img/sharp-libvips-darwin-x64@1.1.0": {
639
-
"integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==",
640
-
"os": ["darwin"],
641
-
"cpu": ["x64"]
642
-
},
643
-
"@img/sharp-libvips-linux-arm64@1.1.0": {
644
-
"integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==",
645
-
"os": ["linux"],
646
-
"cpu": ["arm64"]
647
-
},
648
-
"@img/sharp-libvips-linux-arm@1.1.0": {
649
-
"integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==",
650
-
"os": ["linux"],
651
-
"cpu": ["arm"]
652
-
},
653
-
"@img/sharp-libvips-linux-ppc64@1.1.0": {
654
-
"integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==",
655
-
"os": ["linux"],
656
-
"cpu": ["ppc64"]
657
-
},
658
-
"@img/sharp-libvips-linux-s390x@1.1.0": {
659
-
"integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==",
660
-
"os": ["linux"],
661
-
"cpu": ["s390x"]
662
-
},
663
-
"@img/sharp-libvips-linux-x64@1.1.0": {
664
-
"integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==",
665
-
"os": ["linux"],
666
-
"cpu": ["x64"]
667
-
},
668
-
"@img/sharp-libvips-linuxmusl-arm64@1.1.0": {
669
-
"integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==",
670
-
"os": ["linux"],
671
-
"cpu": ["arm64"]
672
-
},
673
-
"@img/sharp-libvips-linuxmusl-x64@1.1.0": {
674
-
"integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==",
675
-
"os": ["linux"],
676
-
"cpu": ["x64"]
677
-
},
678
-
"@img/sharp-linux-arm64@0.34.1": {
679
-
"integrity": "sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==",
680
-
"optionalDependencies": [
681
-
"@img/sharp-libvips-linux-arm64"
682
-
],
683
-
"os": ["linux"],
684
-
"cpu": ["arm64"]
685
-
},
686
-
"@img/sharp-linux-arm@0.34.1": {
687
-
"integrity": "sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==",
688
-
"optionalDependencies": [
689
-
"@img/sharp-libvips-linux-arm"
690
-
],
691
-
"os": ["linux"],
692
-
"cpu": ["arm"]
693
-
},
694
-
"@img/sharp-linux-s390x@0.34.1": {
695
-
"integrity": "sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==",
696
-
"optionalDependencies": [
697
-
"@img/sharp-libvips-linux-s390x"
698
-
],
699
-
"os": ["linux"],
700
-
"cpu": ["s390x"]
701
-
},
702
-
"@img/sharp-linux-x64@0.34.1": {
703
-
"integrity": "sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==",
704
-
"optionalDependencies": [
705
-
"@img/sharp-libvips-linux-x64"
706
-
],
707
-
"os": ["linux"],
708
-
"cpu": ["x64"]
709
-
},
710
-
"@img/sharp-linuxmusl-arm64@0.34.1": {
711
-
"integrity": "sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==",
712
-
"optionalDependencies": [
713
-
"@img/sharp-libvips-linuxmusl-arm64"
714
-
],
715
-
"os": ["linux"],
716
-
"cpu": ["arm64"]
717
-
},
718
-
"@img/sharp-linuxmusl-x64@0.34.1": {
719
-
"integrity": "sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==",
720
-
"optionalDependencies": [
721
-
"@img/sharp-libvips-linuxmusl-x64"
722
-
],
723
-
"os": ["linux"],
724
-
"cpu": ["x64"]
725
-
},
726
-
"@img/sharp-wasm32@0.34.1": {
727
-
"integrity": "sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==",
728
-
"dependencies": [
729
-
"@emnapi/runtime"
730
-
],
731
-
"cpu": ["wasm32"]
732
-
},
733
-
"@img/sharp-win32-ia32@0.34.1": {
734
-
"integrity": "sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==",
735
-
"os": ["win32"],
736
-
"cpu": ["ia32"]
737
-
},
738
-
"@img/sharp-win32-x64@0.34.1": {
739
-
"integrity": "sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==",
740
-
"os": ["win32"],
741
-
"cpu": ["x64"]
742
-
},
743
530
"@ipld/dag-cbor@7.0.3": {
744
531
"integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==",
745
532
"dependencies": [
···
1005
792
],
1006
793
"scripts": true
1007
794
},
1008
-
"@ts-morph/common@0.25.0": {
1009
-
"integrity": "sha512-kMnZz+vGGHi4GoHnLmMhGNjm44kGtKUXGnOvrKmMwAuvNjM/PgKVGfUnL7IDvK7Jb2QQ82jq3Zmp04Gy+r3Dkg==",
1010
-
"dependencies": [
1011
-
"minimatch",
1012
-
"path-browserify",
1013
-
"tinyglobby"
1014
-
]
1015
-
},
1016
795
"@tybys/wasm-util@0.9.0": {
1017
796
"integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==",
1018
797
"dependencies": [
1019
798
"tslib@2.8.1"
1020
799
]
1021
800
},
1022
-
"@types/node@22.15.15": {
1023
-
"integrity": "sha512-R5muMcZob3/Jjchn5LcO8jdKwSCbzqmPB6ruBxMcf9kbxtniZHP327s6C37iOfuw8mbKK3cAQa7sEl7afLrQ8A==",
1024
-
"dependencies": [
1025
-
"undici-types"
1026
-
]
1027
-
},
1028
-
"@xmldom/xmldom@0.9.8": {
1029
-
"integrity": "sha512-p96FSY54r+WJ50FIOsCOjyj/wavs8921hG5+kVMmZgKcvIKxMXHTrjNJvRgWa/zuX3B6t2lijLNFaOyuxUH+2A=="
1030
-
},
1031
801
"abort-controller@3.0.0": {
1032
802
"integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
1033
803
"dependencies": [
···
1045
815
"integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
1046
816
"bin": true
1047
817
},
1048
-
"ansi-styles@4.3.0": {
1049
-
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
1050
-
"dependencies": [
1051
-
"color-convert"
1052
-
]
1053
-
},
1054
818
"array-flatten@1.1.1": {
1055
819
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
1056
820
},
···
1059
823
},
1060
824
"await-lock@2.2.2": {
1061
825
"integrity": "sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw=="
1062
-
},
1063
-
"balanced-match@1.0.2": {
1064
-
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
1065
826
},
1066
827
"base64-js@1.5.1": {
1067
828
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
···
1083
844
"unpipe"
1084
845
]
1085
846
},
1086
-
"brace-expansion@2.0.1": {
1087
-
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
1088
-
"dependencies": [
1089
-
"balanced-match"
1090
-
]
1091
-
},
1092
847
"braces@3.0.3": {
1093
848
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
1094
849
"dependencies": [
···
1148
903
"integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==",
1149
904
"bin": true
1150
905
},
1151
-
"chalk@4.1.2": {
1152
-
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
1153
-
"dependencies": [
1154
-
"ansi-styles",
1155
-
"supports-color"
1156
-
]
1157
-
},
1158
906
"chownr@3.0.0": {
1159
907
"integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="
1160
908
},
1161
909
"clsx@2.1.1": {
1162
910
"integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="
1163
911
},
1164
-
"code-block-writer@13.0.3": {
1165
-
"integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg=="
1166
-
},
1167
-
"color-convert@2.0.1": {
1168
-
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1169
-
"dependencies": [
1170
-
"color-name"
1171
-
]
1172
-
},
1173
-
"color-name@1.1.4": {
1174
-
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
1175
-
},
1176
-
"color-string@1.9.1": {
1177
-
"integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
1178
-
"dependencies": [
1179
-
"color-name",
1180
-
"simple-swizzle"
1181
-
]
1182
-
},
1183
-
"color@4.2.3": {
1184
-
"integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
1185
-
"dependencies": [
1186
-
"color-convert",
1187
-
"color-string"
1188
-
]
1189
-
},
1190
912
"commander@2.20.3": {
1191
913
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
1192
-
},
1193
-
"commander@8.3.0": {
1194
-
"integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="
1195
-
},
1196
-
"commander@9.5.0": {
1197
-
"integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ=="
1198
914
},
1199
915
"content-disposition@0.5.4": {
1200
916
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
···
1220
936
"ms@2.0.0"
1221
937
]
1222
938
},
1223
-
"deepmerge@4.3.1": {
1224
-
"integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="
1225
-
},
1226
939
"depd@2.0.0": {
1227
940
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
1228
941
},
···
1236
949
"detect-libc@2.0.4": {
1237
950
"integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="
1238
951
},
1239
-
"dom-serializer@2.0.0": {
1240
-
"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
1241
-
"dependencies": [
1242
-
"domelementtype",
1243
-
"domhandler",
1244
-
"entities"
1245
-
]
1246
-
},
1247
-
"domelementtype@2.3.0": {
1248
-
"integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="
1249
-
},
1250
-
"domhandler@5.0.3": {
1251
-
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
1252
-
"dependencies": [
1253
-
"domelementtype"
1254
-
]
1255
-
},
1256
-
"domutils@3.2.2": {
1257
-
"integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
1258
-
"dependencies": [
1259
-
"dom-serializer",
1260
-
"domelementtype",
1261
-
"domhandler"
1262
-
]
1263
-
},
1264
952
"dunder-proto@1.0.1": {
1265
953
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
1266
954
"dependencies": [
···
1284
972
"graceful-fs",
1285
973
"tapable"
1286
974
]
1287
-
},
1288
-
"entities@4.5.0": {
1289
-
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
1290
975
},
1291
976
"es-define-property@1.0.1": {
1292
977
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="
···
1335
1020
"escape-html@1.0.3": {
1336
1021
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
1337
1022
},
1338
-
"escape-string-regexp@4.0.0": {
1339
-
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
1340
-
},
1341
1023
"etag@1.8.1": {
1342
1024
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
1343
1025
},
···
1346
1028
},
1347
1029
"events@3.3.0": {
1348
1030
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
1349
-
},
1350
-
"exif-esm@1.0.1": {
1351
-
"integrity": "sha512-IV4exsKAoDG7B1SpHXdfl76+8KQlq0P3H2BdCIu/KJIT2lu5sQExU6WvRJuw/LSiRHEvqxxNh2rMR1es1qS8mg=="
1352
1031
},
1353
1032
"exifr@7.1.3": {
1354
1033
"integrity": "sha512-g/aje2noHivrRSLbAUtBPWFbxKdKhgj/xr1vATDdUXPOFYJlQ62Ft0oy+72V6XLIpDJfHs6gXLbBLAolqOXYRw=="
···
1392
1071
"fast-redact@3.5.0": {
1393
1072
"integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A=="
1394
1073
},
1395
-
"fdir@6.4.5_picomatch@4.0.2": {
1396
-
"integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==",
1397
-
"dependencies": [
1398
-
"picomatch@4.0.2"
1399
-
],
1400
-
"optionalPeers": [
1401
-
"picomatch@4.0.2"
1402
-
]
1403
-
},
1404
1074
"fill-range@7.1.1": {
1405
1075
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
1406
1076
"dependencies": [
···
1456
1126
"es-object-atoms"
1457
1127
]
1458
1128
},
1459
-
"github-slugger@2.0.0": {
1460
-
"integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="
1461
-
},
1462
1129
"gopd@1.2.0": {
1463
1130
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="
1464
1131
},
···
1467
1134
},
1468
1135
"graphemer@1.4.0": {
1469
1136
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="
1470
-
},
1471
-
"has-flag@4.0.0": {
1472
-
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
1473
1137
},
1474
1138
"has-symbols@1.1.0": {
1475
1139
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="
···
1480
1144
"function-bind"
1481
1145
]
1482
1146
},
1483
-
"he@1.2.0": {
1484
-
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
1485
-
"bin": true
1486
-
},
1487
1147
"hey-listen@1.0.8": {
1488
1148
"integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q=="
1489
1149
},
1490
-
"htmlparser2@8.0.2": {
1491
-
"integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
1492
-
"dependencies": [
1493
-
"domelementtype",
1494
-
"domhandler",
1495
-
"domutils",
1496
-
"entities"
1497
-
]
1498
-
},
1499
1150
"htmx.org@1.9.12": {
1500
1151
"integrity": "sha512-VZAohXyF7xPGS52IM8d1T1283y+X4D+Owf3qY1NZ9RuBypyu9l8cGsxUMAG5fEAb/DhT7rDoJ9Hpu5/HxFD3cw=="
1501
1152
},
···
1535
1186
"ipaddr.js@2.2.0": {
1536
1187
"integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA=="
1537
1188
},
1538
-
"is-arrayish@0.3.2": {
1539
-
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
1540
-
},
1541
1189
"is-extglob@2.1.1": {
1542
1190
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
1543
1191
},
···
1550
1198
"is-number@7.0.0": {
1551
1199
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
1552
1200
},
1553
-
"is-plain-object@5.0.0": {
1554
-
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
1555
-
},
1556
1201
"iso-datestring-validator@2.2.2": {
1557
1202
"integrity": "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA=="
1558
1203
},
···
1563
1208
"jose@5.9.6": {
1564
1209
"integrity": "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ=="
1565
1210
},
1566
-
"katex@0.16.22": {
1567
-
"integrity": "sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==",
1568
-
"dependencies": [
1569
-
"commander@8.3.0"
1570
-
],
1571
-
"bin": true
1572
-
},
1573
1211
"lightningcss-darwin-arm64@1.30.1": {
1574
1212
"integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==",
1575
1213
"os": ["darwin"],
···
1650
1288
"markdown-it-deflist@2.1.0": {
1651
1289
"integrity": "sha512-3OuqoRUlSxJiuQYu0cWTLHNhhq2xtoSFqsZK8plANg91+RJQU1ziQ6lA2LzmFAEes18uPBsHZpcX6We5l76Nzg=="
1652
1290
},
1653
-
"marked-alert@2.1.2_marked@12.0.2": {
1654
-
"integrity": "sha512-EFNRZ08d8L/iEIPLTlQMDjvwIsj03gxWCczYTht6DCiHJIZhMk4NK5gtPY9UqAYb09eV5VGT+jD4lp396E0I+w==",
1655
-
"dependencies": [
1656
-
"marked"
1657
-
]
1658
-
},
1659
-
"marked-footnote@1.2.4_marked@12.0.2": {
1660
-
"integrity": "sha512-DB2Kl+wFh6YwZd70qABMY6WUkG1UuyqoNTFoDfGyG79Pz24neYtLBkB+45a7o72V7gkfvbC3CGzIYFobxfMT1Q==",
1661
-
"dependencies": [
1662
-
"marked"
1663
-
]
1664
-
},
1665
-
"marked-gfm-heading-id@3.2.0_marked@12.0.2": {
1666
-
"integrity": "sha512-Xfxpr5lXLDLY10XqzSCA9l2dDaiabQUgtYM9hw8yunyVsB/xYBRpiic6BOiY/EAJw1ik1eWr1ET1HKOAPZBhXg==",
1667
-
"dependencies": [
1668
-
"github-slugger",
1669
-
"marked"
1670
-
]
1671
-
},
1672
-
"marked@12.0.2": {
1673
-
"integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==",
1674
-
"bin": true
1675
-
},
1676
1291
"math-intrinsics@1.1.0": {
1677
1292
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="
1678
1293
},
···
1689
1304
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
1690
1305
"dependencies": [
1691
1306
"braces",
1692
-
"picomatch@2.3.1"
1307
+
"picomatch"
1693
1308
]
1694
1309
},
1695
1310
"mime-db@1.52.0": {
···
1705
1320
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
1706
1321
"bin": true
1707
1322
},
1708
-
"minimatch@9.0.5": {
1709
-
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
1710
-
"dependencies": [
1711
-
"brace-expansion"
1712
-
]
1713
-
},
1714
1323
"minipass@7.1.2": {
1715
1324
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="
1716
1325
},
···
1739
1348
"multiformats@9.9.0": {
1740
1349
"integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg=="
1741
1350
},
1742
-
"nanoid@3.3.11": {
1743
-
"integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
1744
-
"bin": true
1745
-
},
1746
1351
"negotiator@0.6.3": {
1747
1352
"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
1748
1353
},
···
1768
1373
"ee-first"
1769
1374
]
1770
1375
},
1771
-
"parse-srcset@1.0.2": {
1772
-
"integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q=="
1773
-
},
1774
1376
"parseurl@1.3.3": {
1775
1377
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
1776
1378
},
1777
-
"path-browserify@1.0.1": {
1778
-
"integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
1779
-
},
1780
1379
"path-to-regexp@0.1.12": {
1781
1380
"integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="
1782
1381
},
···
1785
1384
},
1786
1385
"picomatch@2.3.1": {
1787
1386
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
1788
-
},
1789
-
"picomatch@4.0.2": {
1790
-
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="
1791
1387
},
1792
1388
"pino-abstract-transport@1.2.0": {
1793
1389
"integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==",
···
1825
1421
"tslib@2.4.0"
1826
1422
]
1827
1423
},
1828
-
"postcss@8.5.3": {
1829
-
"integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
1830
-
"dependencies": [
1831
-
"nanoid",
1832
-
"picocolors",
1833
-
"source-map-js"
1834
-
]
1835
-
},
1836
1424
"preact-render-to-string@6.5.13_preact@10.26.8": {
1837
1425
"integrity": "sha512-iGPd+hKPMFKsfpR2vL4kJ6ZPcFIoWZEcBf0Dpm3zOpdVvj77aY8RlLiQji5OMrngEyaxGogeakTb54uS2FvA6w==",
1838
1426
"dependencies": [
···
1841
1429
},
1842
1430
"preact@10.26.8": {
1843
1431
"integrity": "sha512-1nMfdFjucm5hKvq0IClqZwK4FJkGXhRrQstOQ3P4vp8HxKrJEMFcY6RdBRVTdfQS/UlnX6gfbPuTvaqx/bDoeQ=="
1844
-
},
1845
-
"prettier@3.5.3": {
1846
-
"integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
1847
-
"bin": true
1848
-
},
1849
-
"prismjs@1.30.0": {
1850
-
"integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="
1851
1432
},
1852
1433
"process-warning@3.0.0": {
1853
1434
"integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ=="
···
1908
1489
"safer-buffer@2.1.2": {
1909
1490
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1910
1491
},
1911
-
"sanitize-html@2.17.0": {
1912
-
"integrity": "sha512-dLAADUSS8rBwhaevT12yCezvioCA+bmUTPH/u57xKPT8d++voeYE6HeluA/bPbQ15TwDBG2ii+QZIEmYx8VdxA==",
1913
-
"dependencies": [
1914
-
"deepmerge",
1915
-
"escape-string-regexp",
1916
-
"htmlparser2",
1917
-
"is-plain-object",
1918
-
"parse-srcset",
1919
-
"postcss"
1920
-
]
1921
-
},
1922
-
"semver@7.7.2": {
1923
-
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
1924
-
"bin": true
1925
-
},
1926
1492
"send@0.19.0": {
1927
1493
"integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
1928
1494
"dependencies": [
···
1953
1519
"setprototypeof@1.2.0": {
1954
1520
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
1955
1521
},
1956
-
"sharp@0.34.1": {
1957
-
"integrity": "sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==",
1958
-
"dependencies": [
1959
-
"color",
1960
-
"detect-libc@2.0.4",
1961
-
"semver"
1962
-
],
1963
-
"optionalDependencies": [
1964
-
"@img/sharp-darwin-arm64",
1965
-
"@img/sharp-darwin-x64",
1966
-
"@img/sharp-libvips-darwin-arm64",
1967
-
"@img/sharp-libvips-darwin-x64",
1968
-
"@img/sharp-libvips-linux-arm",
1969
-
"@img/sharp-libvips-linux-arm64",
1970
-
"@img/sharp-libvips-linux-ppc64",
1971
-
"@img/sharp-libvips-linux-s390x",
1972
-
"@img/sharp-libvips-linux-x64",
1973
-
"@img/sharp-libvips-linuxmusl-arm64",
1974
-
"@img/sharp-libvips-linuxmusl-x64",
1975
-
"@img/sharp-linux-arm",
1976
-
"@img/sharp-linux-arm64",
1977
-
"@img/sharp-linux-s390x",
1978
-
"@img/sharp-linux-x64",
1979
-
"@img/sharp-linuxmusl-arm64",
1980
-
"@img/sharp-linuxmusl-x64",
1981
-
"@img/sharp-wasm32",
1982
-
"@img/sharp-win32-ia32",
1983
-
"@img/sharp-win32-x64"
1984
-
],
1985
-
"scripts": true
1986
-
},
1987
1522
"side-channel-list@1.0.0": {
1988
1523
"integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
1989
1524
"dependencies": [
···
2020
1555
"side-channel-weakmap"
2021
1556
]
2022
1557
},
2023
-
"simple-swizzle@0.2.2": {
2024
-
"integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
2025
-
"dependencies": [
2026
-
"is-arrayish"
2027
-
]
2028
-
},
2029
1558
"sonic-boom@3.8.1": {
2030
1559
"integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==",
2031
1560
"dependencies": [
···
2065
1594
"dependencies": [
2066
1595
"hey-listen",
2067
1596
"tslib@2.4.0"
2068
-
]
2069
-
},
2070
-
"supports-color@7.2.0": {
2071
-
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
2072
-
"dependencies": [
2073
-
"has-flag"
2074
1597
]
2075
1598
},
2076
1599
"tailwind-merge@3.3.0": {
···
2098
1621
"dependencies": [
2099
1622
"@jridgewell/source-map",
2100
1623
"acorn",
2101
-
"commander@2.20.3",
1624
+
"commander",
2102
1625
"source-map-support"
2103
1626
],
2104
1627
"bin": true
···
2109
1632
"real-require"
2110
1633
]
2111
1634
},
2112
-
"tinyglobby@0.2.14_picomatch@4.0.2": {
2113
-
"integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
2114
-
"dependencies": [
2115
-
"fdir",
2116
-
"picomatch@4.0.2"
2117
-
]
2118
-
},
2119
1635
"tlds@1.259.0": {
2120
1636
"integrity": "sha512-AldGGlDP0PNgwppe2quAvuBl18UcjuNtOnDuUkqhd6ipPqrYYBt3aTxK1QTsBVknk97lS2JcafWMghjGWFtunw==",
2121
1637
"bin": true
···
2128
1644
},
2129
1645
"toidentifier@1.0.1": {
2130
1646
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
2131
-
},
2132
-
"ts-morph@24.0.0": {
2133
-
"integrity": "sha512-2OAOg/Ob5yx9Et7ZX4CvTCc0UFoZHwLEJ+dpDPSUi5TgwwlTlX47w+iFRrEwzUZwYACjq83cgjS/Da50Ga37uw==",
2134
-
"dependencies": [
2135
-
"@ts-morph/common",
2136
-
"code-block-writer"
2137
-
]
2138
1647
},
2139
1648
"tslib@2.4.0": {
2140
1649
"integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
···
2164
1673
"multiformats@9.9.0"
2165
1674
]
2166
1675
},
2167
-
"undici-types@6.21.0": {
2168
-
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="
2169
-
},
2170
1676
"undici@6.21.3": {
2171
1677
"integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw=="
2172
1678
},
···
2185
1691
"yallist@5.0.0": {
2186
1692
"integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="
2187
1693
},
2188
-
"yesno@0.4.0": {
2189
-
"integrity": "sha512-tdBxmHvbXPBKYIg81bMCB7bVeDmHkRzk5rVJyYYXurwKkHq/MCd8rz4HSJUP7hW0H2NlXiq8IFiWvYKEHhlotA=="
2190
-
},
2191
1694
"zod@3.25.51": {
2192
1695
"integrity": "sha512-TQSnBldh+XSGL+opiSIq0575wvDPqu09AqWe1F7JhUMKY+M91/aGlK4MhpVNO7MgYfHcVCB1ffwAUTJzllKJqg=="
2193
1696
}
2194
1697
},
2195
1698
"workspace": {
2196
1699
"dependencies": [
2197
-
"jsr:@bigmoves/bff@0.3.0-beta.32",
1700
+
"jsr:@bigmoves/bff@0.3.0-beta.33",
2198
1701
"jsr:@luca/esbuild-deno-loader@~0.11.1",
2199
1702
"jsr:@std/http@^1.0.17",
2200
1703
"jsr:@std/path@^1.0.9",
+3
-1
lexicons.json
+3
-1
lexicons.json
+55
lexicons/com/atproto/moderation/defs.json
+55
lexicons/com/atproto/moderation/defs.json
···
1
+
{
2
+
"lexicon": 1,
3
+
"id": "com.atproto.moderation.defs",
4
+
"defs": {
5
+
"reasonRude": {
6
+
"type": "token",
7
+
"description": "Rude, harassing, explicit, or otherwise unwelcoming behavior"
8
+
},
9
+
"reasonSpam": {
10
+
"type": "token",
11
+
"description": "Spam: frequent unwanted promotion, replies, mentions"
12
+
},
13
+
"reasonType": {
14
+
"type": "string",
15
+
"knownValues": [
16
+
"com.atproto.moderation.defs#reasonSpam",
17
+
"com.atproto.moderation.defs#reasonViolation",
18
+
"com.atproto.moderation.defs#reasonMisleading",
19
+
"com.atproto.moderation.defs#reasonSexual",
20
+
"com.atproto.moderation.defs#reasonRude",
21
+
"com.atproto.moderation.defs#reasonOther",
22
+
"com.atproto.moderation.defs#reasonAppeal"
23
+
]
24
+
},
25
+
"reasonOther": {
26
+
"type": "token",
27
+
"description": "Other: reports not falling under another report category"
28
+
},
29
+
"subjectType": {
30
+
"type": "string",
31
+
"description": "Tag describing a type of subject that might be reported.",
32
+
"knownValues": [
33
+
"account",
34
+
"record",
35
+
"chat"
36
+
]
37
+
},
38
+
"reasonAppeal": {
39
+
"type": "token",
40
+
"description": "Appeal: appeal a previously taken moderation action"
41
+
},
42
+
"reasonSexual": {
43
+
"type": "token",
44
+
"description": "Unwanted or mislabeled sexual content"
45
+
},
46
+
"reasonViolation": {
47
+
"type": "token",
48
+
"description": "Direct violation of server rules, laws, terms of service"
49
+
},
50
+
"reasonMisleading": {
51
+
"type": "token",
52
+
"description": "Misleading identity, affiliation, or content"
53
+
}
54
+
}
55
+
}
+3
services/mod/.env.example
+3
services/mod/.env.example
+11
services/mod/Dockerfile
+11
services/mod/Dockerfile
+103
services/mod/__generated__/index.ts
+103
services/mod/__generated__/index.ts
···
1
+
/**
2
+
* GENERATED CODE - DO NOT MODIFY
3
+
*/
4
+
import {
5
+
createServer as createXrpcServer,
6
+
Server as XrpcServer,
7
+
type Options as XrpcOptions,
8
+
type AuthVerifier,
9
+
type StreamAuthVerifier,
10
+
} from "npm:@atproto/xrpc-server"
11
+
import { schemas } from './lexicons.ts'
12
+
import * as ComAtprotoLabelSubscribeLabels from './types/com/atproto/label/subscribeLabels.ts'
13
+
import * as ComAtprotoLabelQueryLabels from './types/com/atproto/label/queryLabels.ts'
14
+
15
+
export function createServer(options?: XrpcOptions): Server {
16
+
return new Server(options)
17
+
}
18
+
19
+
export class Server {
20
+
xrpc: XrpcServer
21
+
com: ComNS
22
+
23
+
constructor(options?: XrpcOptions) {
24
+
this.xrpc = createXrpcServer(schemas, options)
25
+
this.com = new ComNS(this)
26
+
}
27
+
}
28
+
29
+
export class ComNS {
30
+
_server: Server
31
+
atproto: ComAtprotoNS
32
+
33
+
constructor(server: Server) {
34
+
this._server = server
35
+
this.atproto = new ComAtprotoNS(server)
36
+
}
37
+
}
38
+
39
+
export class ComAtprotoNS {
40
+
_server: Server
41
+
label: ComAtprotoLabelNS
42
+
43
+
constructor(server: Server) {
44
+
this._server = server
45
+
this.label = new ComAtprotoLabelNS(server)
46
+
}
47
+
}
48
+
49
+
export class ComAtprotoLabelNS {
50
+
_server: Server
51
+
52
+
constructor(server: Server) {
53
+
this._server = server
54
+
}
55
+
56
+
subscribeLabels<AV extends StreamAuthVerifier>(
57
+
cfg: ConfigOf<
58
+
AV,
59
+
ComAtprotoLabelSubscribeLabels.Handler<ExtractAuth<AV>>,
60
+
ComAtprotoLabelSubscribeLabels.HandlerReqCtx<ExtractAuth<AV>>
61
+
>,
62
+
) {
63
+
const nsid = 'com.atproto.label.subscribeLabels' // @ts-ignore
64
+
return this._server.xrpc.streamMethod(nsid, cfg)
65
+
}
66
+
67
+
queryLabels<AV extends AuthVerifier>(
68
+
cfg: ConfigOf<
69
+
AV,
70
+
ComAtprotoLabelQueryLabels.Handler<ExtractAuth<AV>>,
71
+
ComAtprotoLabelQueryLabels.HandlerReqCtx<ExtractAuth<AV>>
72
+
>,
73
+
) {
74
+
const nsid = 'com.atproto.label.queryLabels' // @ts-ignore
75
+
return this._server.xrpc.method(nsid, cfg)
76
+
}
77
+
}
78
+
79
+
type SharedRateLimitOpts<T> = {
80
+
name: string
81
+
calcKey?: (ctx: T) => string | null
82
+
calcPoints?: (ctx: T) => number
83
+
}
84
+
type RouteRateLimitOpts<T> = {
85
+
durationMs: number
86
+
points: number
87
+
calcKey?: (ctx: T) => string | null
88
+
calcPoints?: (ctx: T) => number
89
+
}
90
+
type HandlerOpts = { blobLimit?: number }
91
+
type HandlerRateLimitOpts<T> = SharedRateLimitOpts<T> | RouteRateLimitOpts<T>
92
+
type ConfigOf<Auth, Handler, ReqCtx> =
93
+
| Handler
94
+
| {
95
+
auth?: Auth
96
+
opts?: HandlerOpts
97
+
rateLimit?: HandlerRateLimitOpts<ReqCtx> | HandlerRateLimitOpts<ReqCtx>[]
98
+
handler: Handler
99
+
}
100
+
type ExtractAuth<AV extends AuthVerifier | StreamAuthVerifier> = Extract<
101
+
Awaited<ReturnType<AV>>,
102
+
{ credentials: unknown }
103
+
>
+353
services/mod/__generated__/lexicons.ts
+353
services/mod/__generated__/lexicons.ts
···
1
+
/**
2
+
* GENERATED CODE - DO NOT MODIFY
3
+
*/
4
+
import {
5
+
type LexiconDoc,
6
+
Lexicons,
7
+
ValidationError,
8
+
type ValidationResult,
9
+
} from "npm:@atproto/lexicon"
10
+
import { type $Typed, is$typed, maybe$typed } from './util.ts'
11
+
12
+
export const schemaDict = {
13
+
ComAtprotoLabelSubscribeLabels: {
14
+
lexicon: 1,
15
+
id: 'com.atproto.label.subscribeLabels',
16
+
defs: {
17
+
info: {
18
+
type: 'object',
19
+
required: ['name'],
20
+
properties: {
21
+
name: {
22
+
type: 'string',
23
+
knownValues: ['OutdatedCursor'],
24
+
},
25
+
message: {
26
+
type: 'string',
27
+
},
28
+
},
29
+
},
30
+
main: {
31
+
type: 'subscription',
32
+
errors: [
33
+
{
34
+
name: 'FutureCursor',
35
+
},
36
+
],
37
+
message: {
38
+
schema: {
39
+
refs: [
40
+
'lex:com.atproto.label.subscribeLabels#labels',
41
+
'lex:com.atproto.label.subscribeLabels#info',
42
+
],
43
+
type: 'union',
44
+
},
45
+
},
46
+
parameters: {
47
+
type: 'params',
48
+
properties: {
49
+
cursor: {
50
+
type: 'integer',
51
+
description: 'The last known event seq number to backfill from.',
52
+
},
53
+
},
54
+
},
55
+
description:
56
+
'Subscribe to stream of labels (and negations). Public endpoint implemented by mod services. Uses same sequencing scheme as repo event stream.',
57
+
},
58
+
labels: {
59
+
type: 'object',
60
+
required: ['seq', 'labels'],
61
+
properties: {
62
+
seq: {
63
+
type: 'integer',
64
+
},
65
+
labels: {
66
+
type: 'array',
67
+
items: {
68
+
ref: 'lex:com.atproto.label.defs#label',
69
+
type: 'ref',
70
+
},
71
+
},
72
+
},
73
+
},
74
+
},
75
+
},
76
+
ComAtprotoLabelDefs: {
77
+
lexicon: 1,
78
+
id: 'com.atproto.label.defs',
79
+
defs: {
80
+
label: {
81
+
type: 'object',
82
+
required: ['src', 'uri', 'val', 'cts'],
83
+
properties: {
84
+
cid: {
85
+
type: 'string',
86
+
format: 'cid',
87
+
description:
88
+
"Optionally, CID specifying the specific version of 'uri' resource this label applies to.",
89
+
},
90
+
cts: {
91
+
type: 'string',
92
+
format: 'datetime',
93
+
description: 'Timestamp when this label was created.',
94
+
},
95
+
exp: {
96
+
type: 'string',
97
+
format: 'datetime',
98
+
description:
99
+
'Timestamp at which this label expires (no longer applies).',
100
+
},
101
+
neg: {
102
+
type: 'boolean',
103
+
description:
104
+
'If true, this is a negation label, overwriting a previous label.',
105
+
},
106
+
sig: {
107
+
type: 'bytes',
108
+
description: 'Signature of dag-cbor encoded label.',
109
+
},
110
+
src: {
111
+
type: 'string',
112
+
format: 'did',
113
+
description: 'DID of the actor who created this label.',
114
+
},
115
+
uri: {
116
+
type: 'string',
117
+
format: 'uri',
118
+
description:
119
+
'AT URI of the record, repository (account), or other resource that this label applies to.',
120
+
},
121
+
val: {
122
+
type: 'string',
123
+
maxLength: 128,
124
+
description:
125
+
'The short string name of the value or type of this label.',
126
+
},
127
+
ver: {
128
+
type: 'integer',
129
+
description: 'The AT Protocol version of the label object.',
130
+
},
131
+
},
132
+
description:
133
+
'Metadata tag on an atproto resource (eg, repo or record).',
134
+
},
135
+
selfLabel: {
136
+
type: 'object',
137
+
required: ['val'],
138
+
properties: {
139
+
val: {
140
+
type: 'string',
141
+
maxLength: 128,
142
+
description:
143
+
'The short string name of the value or type of this label.',
144
+
},
145
+
},
146
+
description:
147
+
'Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel.',
148
+
},
149
+
labelValue: {
150
+
type: 'string',
151
+
knownValues: [
152
+
'!hide',
153
+
'!no-promote',
154
+
'!warn',
155
+
'!no-unauthenticated',
156
+
'dmca-violation',
157
+
'doxxing',
158
+
'porn',
159
+
'sexual',
160
+
'nudity',
161
+
'nsfl',
162
+
'gore',
163
+
],
164
+
},
165
+
selfLabels: {
166
+
type: 'object',
167
+
required: ['values'],
168
+
properties: {
169
+
values: {
170
+
type: 'array',
171
+
items: {
172
+
ref: 'lex:com.atproto.label.defs#selfLabel',
173
+
type: 'ref',
174
+
},
175
+
maxLength: 10,
176
+
},
177
+
},
178
+
description:
179
+
'Metadata tags on an atproto record, published by the author within the record.',
180
+
},
181
+
labelValueDefinition: {
182
+
type: 'object',
183
+
required: ['identifier', 'severity', 'blurs', 'locales'],
184
+
properties: {
185
+
blurs: {
186
+
type: 'string',
187
+
description:
188
+
"What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing.",
189
+
knownValues: ['content', 'media', 'none'],
190
+
},
191
+
locales: {
192
+
type: 'array',
193
+
items: {
194
+
ref: 'lex:com.atproto.label.defs#labelValueDefinitionStrings',
195
+
type: 'ref',
196
+
},
197
+
},
198
+
severity: {
199
+
type: 'string',
200
+
description:
201
+
"How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.",
202
+
knownValues: ['inform', 'alert', 'none'],
203
+
},
204
+
adultOnly: {
205
+
type: 'boolean',
206
+
description:
207
+
'Does the user need to have adult content enabled in order to configure this label?',
208
+
},
209
+
identifier: {
210
+
type: 'string',
211
+
maxLength: 100,
212
+
description:
213
+
"The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).",
214
+
maxGraphemes: 100,
215
+
},
216
+
defaultSetting: {
217
+
type: 'string',
218
+
default: 'warn',
219
+
description: 'The default setting for this label.',
220
+
knownValues: ['ignore', 'warn', 'hide'],
221
+
},
222
+
},
223
+
description:
224
+
'Declares a label value and its expected interpretations and behaviors.',
225
+
},
226
+
labelValueDefinitionStrings: {
227
+
type: 'object',
228
+
required: ['lang', 'name', 'description'],
229
+
properties: {
230
+
lang: {
231
+
type: 'string',
232
+
format: 'language',
233
+
description:
234
+
'The code of the language these strings are written in.',
235
+
},
236
+
name: {
237
+
type: 'string',
238
+
maxLength: 640,
239
+
description: 'A short human-readable name for the label.',
240
+
maxGraphemes: 64,
241
+
},
242
+
description: {
243
+
type: 'string',
244
+
maxLength: 100000,
245
+
description:
246
+
'A longer description of what the label means and why it might be applied.',
247
+
maxGraphemes: 10000,
248
+
},
249
+
},
250
+
description:
251
+
'Strings which describe the label in the UI, localized into a specific language.',
252
+
},
253
+
},
254
+
},
255
+
ComAtprotoLabelQueryLabels: {
256
+
lexicon: 1,
257
+
id: 'com.atproto.label.queryLabels',
258
+
defs: {
259
+
main: {
260
+
type: 'query',
261
+
output: {
262
+
schema: {
263
+
type: 'object',
264
+
required: ['labels'],
265
+
properties: {
266
+
cursor: {
267
+
type: 'string',
268
+
},
269
+
labels: {
270
+
type: 'array',
271
+
items: {
272
+
ref: 'lex:com.atproto.label.defs#label',
273
+
type: 'ref',
274
+
},
275
+
},
276
+
},
277
+
},
278
+
encoding: 'application/json',
279
+
},
280
+
parameters: {
281
+
type: 'params',
282
+
required: ['uriPatterns'],
283
+
properties: {
284
+
limit: {
285
+
type: 'integer',
286
+
default: 50,
287
+
maximum: 250,
288
+
minimum: 1,
289
+
},
290
+
cursor: {
291
+
type: 'string',
292
+
},
293
+
sources: {
294
+
type: 'array',
295
+
items: {
296
+
type: 'string',
297
+
format: 'did',
298
+
},
299
+
description:
300
+
'Optional list of label sources (DIDs) to filter on.',
301
+
},
302
+
uriPatterns: {
303
+
type: 'array',
304
+
items: {
305
+
type: 'string',
306
+
},
307
+
description:
308
+
"List of AT URI patterns to match (boolean 'OR'). Each may be a prefix (ending with '*'; will match inclusive of the string leading to '*'), or a full URI.",
309
+
},
310
+
},
311
+
},
312
+
description:
313
+
'Find labels relevant to the provided AT-URI patterns. Public endpoint for moderation services, though may return different or additional results with auth.',
314
+
},
315
+
},
316
+
},
317
+
} as const satisfies Record<string, LexiconDoc>
318
+
export const schemas = Object.values(schemaDict) satisfies LexiconDoc[]
319
+
export const lexicons: Lexicons = new Lexicons(schemas)
320
+
321
+
export function validate<T extends { $type: string }>(
322
+
v: unknown,
323
+
id: string,
324
+
hash: string,
325
+
requiredType: true,
326
+
): ValidationResult<T>
327
+
export function validate<T extends { $type?: string }>(
328
+
v: unknown,
329
+
id: string,
330
+
hash: string,
331
+
requiredType?: false,
332
+
): ValidationResult<T>
333
+
export function validate(
334
+
v: unknown,
335
+
id: string,
336
+
hash: string,
337
+
requiredType?: boolean,
338
+
): ValidationResult {
339
+
return (requiredType ? is$typed : maybe$typed)(v, id, hash)
340
+
? lexicons.validate(`${id}#${hash}`, v)
341
+
: {
342
+
success: false,
343
+
error: new ValidationError(
344
+
`Must be an object with "${hash === 'main' ? id : `${id}#${hash}`}" $type property`,
345
+
),
346
+
}
347
+
}
348
+
349
+
export const ids = {
350
+
ComAtprotoLabelSubscribeLabels: 'com.atproto.label.subscribeLabels',
351
+
ComAtprotoLabelDefs: 'com.atproto.label.defs',
352
+
ComAtprotoLabelQueryLabels: 'com.atproto.label.queryLabels',
353
+
} as const
+146
services/mod/__generated__/types/com/atproto/label/defs.ts
+146
services/mod/__generated__/types/com/atproto/label/defs.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 = 'com.atproto.label.defs'
16
+
17
+
/** Metadata tag on an atproto resource (eg, repo or record). */
18
+
export interface Label {
19
+
$type?: 'com.atproto.label.defs#label'
20
+
/** Optionally, CID specifying the specific version of 'uri' resource this label applies to. */
21
+
cid?: string
22
+
/** Timestamp when this label was created. */
23
+
cts: string
24
+
/** Timestamp at which this label expires (no longer applies). */
25
+
exp?: string
26
+
/** If true, this is a negation label, overwriting a previous label. */
27
+
neg?: boolean
28
+
/** Signature of dag-cbor encoded label. */
29
+
sig?: Uint8Array
30
+
/** DID of the actor who created this label. */
31
+
src: string
32
+
/** AT URI of the record, repository (account), or other resource that this label applies to. */
33
+
uri: string
34
+
/** The short string name of the value or type of this label. */
35
+
val: string
36
+
/** The AT Protocol version of the label object. */
37
+
ver?: number
38
+
}
39
+
40
+
const hashLabel = 'label'
41
+
42
+
export function isLabel<V>(v: V) {
43
+
return is$typed(v, id, hashLabel)
44
+
}
45
+
46
+
export function validateLabel<V>(v: V) {
47
+
return validate<Label & V>(v, id, hashLabel)
48
+
}
49
+
50
+
/** Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel. */
51
+
export interface SelfLabel {
52
+
$type?: 'com.atproto.label.defs#selfLabel'
53
+
/** The short string name of the value or type of this label. */
54
+
val: string
55
+
}
56
+
57
+
const hashSelfLabel = 'selfLabel'
58
+
59
+
export function isSelfLabel<V>(v: V) {
60
+
return is$typed(v, id, hashSelfLabel)
61
+
}
62
+
63
+
export function validateSelfLabel<V>(v: V) {
64
+
return validate<SelfLabel & V>(v, id, hashSelfLabel)
65
+
}
66
+
67
+
export type LabelValue =
68
+
| '!hide'
69
+
| '!no-promote'
70
+
| '!warn'
71
+
| '!no-unauthenticated'
72
+
| 'dmca-violation'
73
+
| 'doxxing'
74
+
| 'porn'
75
+
| 'sexual'
76
+
| 'nudity'
77
+
| 'nsfl'
78
+
| 'gore'
79
+
| (string & {})
80
+
81
+
/** Metadata tags on an atproto record, published by the author within the record. */
82
+
export interface SelfLabels {
83
+
$type?: 'com.atproto.label.defs#selfLabels'
84
+
values: SelfLabel[]
85
+
}
86
+
87
+
const hashSelfLabels = 'selfLabels'
88
+
89
+
export function isSelfLabels<V>(v: V) {
90
+
return is$typed(v, id, hashSelfLabels)
91
+
}
92
+
93
+
export function validateSelfLabels<V>(v: V) {
94
+
return validate<SelfLabels & V>(v, id, hashSelfLabels)
95
+
}
96
+
97
+
/** Declares a label value and its expected interpretations and behaviors. */
98
+
export interface LabelValueDefinition {
99
+
$type?: 'com.atproto.label.defs#labelValueDefinition'
100
+
/** What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing. */
101
+
blurs: 'content' | 'media' | 'none' | (string & {})
102
+
locales: LabelValueDefinitionStrings[]
103
+
/** How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing. */
104
+
severity: 'inform' | 'alert' | 'none' | (string & {})
105
+
/** Does the user need to have adult content enabled in order to configure this label? */
106
+
adultOnly?: boolean
107
+
/** The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+). */
108
+
identifier: string
109
+
/** The default setting for this label. */
110
+
defaultSetting: 'ignore' | 'warn' | 'hide' | (string & {})
111
+
}
112
+
113
+
const hashLabelValueDefinition = 'labelValueDefinition'
114
+
115
+
export function isLabelValueDefinition<V>(v: V) {
116
+
return is$typed(v, id, hashLabelValueDefinition)
117
+
}
118
+
119
+
export function validateLabelValueDefinition<V>(v: V) {
120
+
return validate<LabelValueDefinition & V>(v, id, hashLabelValueDefinition)
121
+
}
122
+
123
+
/** Strings which describe the label in the UI, localized into a specific language. */
124
+
export interface LabelValueDefinitionStrings {
125
+
$type?: 'com.atproto.label.defs#labelValueDefinitionStrings'
126
+
/** The code of the language these strings are written in. */
127
+
lang: string
128
+
/** A short human-readable name for the label. */
129
+
name: string
130
+
/** A longer description of what the label means and why it might be applied. */
131
+
description: string
132
+
}
133
+
134
+
const hashLabelValueDefinitionStrings = 'labelValueDefinitionStrings'
135
+
136
+
export function isLabelValueDefinitionStrings<V>(v: V) {
137
+
return is$typed(v, id, hashLabelValueDefinitionStrings)
138
+
}
139
+
140
+
export function validateLabelValueDefinitionStrings<V>(v: V) {
141
+
return validate<LabelValueDefinitionStrings & V>(
142
+
v,
143
+
id,
144
+
hashLabelValueDefinitionStrings,
145
+
)
146
+
}
+54
services/mod/__generated__/types/com/atproto/label/queryLabels.ts
+54
services/mod/__generated__/types/com/atproto/label/queryLabels.ts
···
1
+
/**
2
+
* GENERATED CODE - DO NOT MODIFY
3
+
*/
4
+
import { HandlerAuth, HandlerPipeThrough } from "npm:@atproto/xrpc-server";
5
+
import express from "npm:express";
6
+
import { validate as _validate } from "../../../../lexicons.ts";
7
+
import { is$typed as _is$typed } from "../../../../util.ts";
8
+
import type * as ComAtprotoLabelDefs from "./defs.ts";
9
+
10
+
const is$typed = _is$typed,
11
+
validate = _validate;
12
+
const id = "com.atproto.label.queryLabels";
13
+
14
+
export interface QueryParams {
15
+
limit: number;
16
+
cursor?: string;
17
+
/** Optional list of label sources (DIDs) to filter on. */
18
+
sources?: string[];
19
+
/** List of AT URI patterns to match (boolean 'OR'). Each may be a prefix (ending with '*'; will match inclusive of the string leading to '*'), or a full URI. */
20
+
uriPatterns: string[];
21
+
}
22
+
23
+
export type InputSchema = undefined;
24
+
25
+
export interface OutputSchema {
26
+
cursor?: string;
27
+
labels: ComAtprotoLabelDefs.Label[];
28
+
}
29
+
30
+
export type HandlerInput = undefined;
31
+
32
+
export interface HandlerSuccess {
33
+
encoding: "application/json";
34
+
body: OutputSchema;
35
+
headers?: { [key: string]: string };
36
+
}
37
+
38
+
export interface HandlerError {
39
+
status: number;
40
+
message?: string;
41
+
}
42
+
43
+
export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough;
44
+
export type HandlerReqCtx<HA extends HandlerAuth = never> = {
45
+
auth: HA;
46
+
params: QueryParams;
47
+
input: HandlerInput;
48
+
req: express.Request;
49
+
res: express.Response;
50
+
resetRouteRateLimits: () => Promise<void>;
51
+
};
52
+
export type Handler<HA extends HandlerAuth = never> = (
53
+
ctx: HandlerReqCtx<HA>,
54
+
) => Promise<HandlerOutput> | HandlerOutput;
+68
services/mod/__generated__/types/com/atproto/label/subscribeLabels.ts
+68
services/mod/__generated__/types/com/atproto/label/subscribeLabels.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
+
import { HandlerAuth, ErrorFrame } from "npm:@atproto/xrpc-server"
13
+
import { IncomingMessage } from 'node:http'
14
+
import type * as ComAtprotoLabelDefs from './defs.ts'
15
+
16
+
const is$typed = _is$typed,
17
+
validate = _validate
18
+
const id = 'com.atproto.label.subscribeLabels'
19
+
20
+
export interface Info {
21
+
$type?: 'com.atproto.label.subscribeLabels#info'
22
+
name: 'OutdatedCursor' | (string & {})
23
+
message?: string
24
+
}
25
+
26
+
const hashInfo = 'info'
27
+
28
+
export function isInfo<V>(v: V) {
29
+
return is$typed(v, id, hashInfo)
30
+
}
31
+
32
+
export function validateInfo<V>(v: V) {
33
+
return validate<Info & V>(v, id, hashInfo)
34
+
}
35
+
36
+
export interface QueryParams {
37
+
/** The last known event seq number to backfill from. */
38
+
cursor?: number
39
+
}
40
+
41
+
export type OutputSchema = $Typed<Labels> | $Typed<Info> | { $type: string }
42
+
export type HandlerError = ErrorFrame<'FutureCursor'>
43
+
export type HandlerOutput = HandlerError | OutputSchema
44
+
export type HandlerReqCtx<HA extends HandlerAuth = never> = {
45
+
auth: HA
46
+
params: QueryParams
47
+
req: IncomingMessage
48
+
signal: AbortSignal
49
+
}
50
+
export type Handler<HA extends HandlerAuth = never> = (
51
+
ctx: HandlerReqCtx<HA>,
52
+
) => AsyncIterable<HandlerOutput>
53
+
54
+
export interface Labels {
55
+
$type?: 'com.atproto.label.subscribeLabels#labels'
56
+
seq: number
57
+
labels: ComAtprotoLabelDefs.Label[]
58
+
}
59
+
60
+
const hashLabels = 'labels'
61
+
62
+
export function isLabels<V>(v: V) {
63
+
return is$typed(v, id, hashLabels)
64
+
}
65
+
66
+
export function validateLabels<V>(v: V) {
67
+
return validate<Labels & V>(v, id, hashLabels)
68
+
}
+82
services/mod/__generated__/util.ts
+82
services/mod/__generated__/util.ts
···
1
+
/**
2
+
* GENERATED CODE - DO NOT MODIFY
3
+
*/
4
+
5
+
import { type ValidationResult } from "npm:@atproto/lexicon"
6
+
7
+
export type OmitKey<T, K extends keyof T> = {
8
+
[K2 in keyof T as K2 extends K ? never : K2]: T[K2]
9
+
}
10
+
11
+
export type $Typed<V, T extends string = string> = V & { $type: T }
12
+
export type Un$Typed<V extends { $type?: string }> = OmitKey<V, '$type'>
13
+
14
+
export type $Type<Id extends string, Hash extends string> = Hash extends 'main'
15
+
? Id
16
+
: `${Id}#${Hash}`
17
+
18
+
function isObject<V>(v: V): v is V & object {
19
+
return v != null && typeof v === 'object'
20
+
}
21
+
22
+
function is$type<Id extends string, Hash extends string>(
23
+
$type: unknown,
24
+
id: Id,
25
+
hash: Hash,
26
+
): $type is $Type<Id, Hash> {
27
+
return hash === 'main'
28
+
? $type === id
29
+
: // $type === `${id}#${hash}`
30
+
typeof $type === 'string' &&
31
+
$type.length === id.length + 1 + hash.length &&
32
+
$type.charCodeAt(id.length) === 35 /* '#' */ &&
33
+
$type.startsWith(id) &&
34
+
$type.endsWith(hash)
35
+
}
36
+
37
+
export type $TypedObject<
38
+
V,
39
+
Id extends string,
40
+
Hash extends string,
41
+
> = V extends {
42
+
$type: $Type<Id, Hash>
43
+
}
44
+
? V
45
+
: V extends { $type?: string }
46
+
? V extends { $type?: infer T extends $Type<Id, Hash> }
47
+
? V & { $type: T }
48
+
: never
49
+
: V & { $type: $Type<Id, Hash> }
50
+
51
+
export function is$typed<V, Id extends string, Hash extends string>(
52
+
v: V,
53
+
id: Id,
54
+
hash: Hash,
55
+
): v is $TypedObject<V, Id, Hash> {
56
+
return isObject(v) && '$type' in v && is$type(v.$type, id, hash)
57
+
}
58
+
59
+
export function maybe$typed<V, Id extends string, Hash extends string>(
60
+
v: V,
61
+
id: Id,
62
+
hash: Hash,
63
+
): v is V & object & { $type?: $Type<Id, Hash> } {
64
+
return (
65
+
isObject(v) &&
66
+
('$type' in v ? v.$type === undefined || is$type(v.$type, id, hash) : true)
67
+
)
68
+
}
69
+
70
+
export type Validator<R = unknown> = (v: unknown) => ValidationResult<R>
71
+
export type ValidatorParam<V extends Validator> =
72
+
V extends Validator<infer R> ? R : never
73
+
74
+
/**
75
+
* Utility function that allows to convert a "validate*" utility function into a
76
+
* type predicate.
77
+
*/
78
+
export function asPredicate<V extends Validator>(validate: V) {
79
+
return function <T>(v: T): v is T & ValidatorParam<V> {
80
+
return validate(v).success
81
+
}
82
+
}
+99
services/mod/bin.ts
+99
services/mod/bin.ts
···
1
+
import { stringifyLex } from "npm:@atproto/lexicon";
2
+
import type { LabelRow } from "./main.ts";
3
+
import {
4
+
createConfig,
5
+
createDb,
6
+
createLabel,
7
+
createModService,
8
+
ModService,
9
+
} from "./main.ts";
10
+
11
+
async function handleCreate(
12
+
args: string[],
13
+
cfg: Awaited<ReturnType<typeof createConfig>>,
14
+
modService: ModService,
15
+
) {
16
+
const [src, uri, val, negArg] = args;
17
+
if (!src || !uri || !val) {
18
+
console.error("Usage: deno run -A bin.ts create <src> <uri> <val> [neg]");
19
+
Deno.exit(1);
20
+
}
21
+
const neg = negArg === "true" || negArg === "1";
22
+
const doCreateLabel = createLabel(cfg, modService);
23
+
await doCreateLabel({
24
+
src,
25
+
uri,
26
+
val,
27
+
neg,
28
+
cts: new Date().toISOString(),
29
+
});
30
+
console.log(
31
+
`Label created for src: ${src}, uri: ${uri}, val: ${val}, neg: ${neg}`,
32
+
);
33
+
}
34
+
35
+
function parseQueryArgs(args: string[]) {
36
+
let src = "";
37
+
let val = "";
38
+
let limit = 50;
39
+
let cursor = 0;
40
+
const patterns: string[] = [];
41
+
let i = 0;
42
+
while (i < args.length) {
43
+
if (args[i] === "--src" && args[i + 1]) {
44
+
src = args[i + 1];
45
+
i += 2;
46
+
continue;
47
+
}
48
+
if (args[i] === "--val" && args[i + 1]) {
49
+
val = args[i + 1];
50
+
i += 2;
51
+
continue;
52
+
}
53
+
if (args[i] === "--limit" && args[i + 1]) {
54
+
limit = parseInt(args[i + 1], 10);
55
+
i += 2;
56
+
continue;
57
+
}
58
+
if (args[i] === "--cursor" && args[i + 1]) {
59
+
cursor = parseInt(args[i + 1], 10);
60
+
i += 2;
61
+
continue;
62
+
}
63
+
i++;
64
+
}
65
+
return { src, val, limit, cursor, patterns };
66
+
}
67
+
68
+
function handleQuery(args: string[], modService: ModService) {
69
+
// Usage: deno run -A bin.ts query [--src <src>] [--val <val>] [--limit <n>] [--cursor <id>]
70
+
const { src, val, limit, cursor, patterns } = parseQueryArgs(args);
71
+
const sources = src ? [src] : [];
72
+
// If val is set, filter in JS after query
73
+
const { rows } = modService.getLabels({ patterns, sources, limit, cursor });
74
+
const filtered = val ? rows.filter((r: LabelRow) => r.val === val) : rows;
75
+
for (const row of filtered) {
76
+
console.log(stringifyLex(row));
77
+
}
78
+
}
79
+
80
+
async function main() {
81
+
const [cmd, ...args] = Deno.args;
82
+
if (!cmd || ["create", "query"].indexOf(cmd) === -1) {
83
+
console.error("Usage: deno run -A bin.ts <create|query> [...args]");
84
+
Deno.exit(1);
85
+
}
86
+
const cfg = await createConfig();
87
+
const db = createDb(cfg);
88
+
const modService = createModService(db);
89
+
90
+
if (cmd === "create") {
91
+
await handleCreate(args, cfg, modService);
92
+
} else if (cmd === "query") {
93
+
handleQuery(args, modService);
94
+
}
95
+
}
96
+
97
+
if (import.meta.main) {
98
+
main();
99
+
}
+17
services/mod/deno.json
+17
services/mod/deno.json
···
1
+
{
2
+
"imports": {
3
+
"$lexicon/": "./__generated__/",
4
+
"@atproto/common": "npm:@atproto/common@^0.4.11",
5
+
"@atproto/crypto": "npm:@atproto/crypto@^0.4.4",
6
+
"@atproto/lexicon": "npm:@atproto/lexicon@^0.4.11",
7
+
"@std/assert": "jsr:@std/assert@^1.0.13",
8
+
"uint8arrays": "npm:uint8arrays@^5.1.0"
9
+
},
10
+
"tasks": {
11
+
"start": "deno run -A ./main.ts",
12
+
"dev": "deno run -A --watch --env=.env ./main.ts",
13
+
"test": "deno test -A main.ts",
14
+
"codegen": "deno run -A jsr:@bigmoves/bff-cli@0.3.0-beta.30 lexgen"
15
+
},
16
+
"nodeModulesDir": "auto"
17
+
}
+831
services/mod/deno.lock
+831
services/mod/deno.lock
···
1
+
{
2
+
"version": "5",
3
+
"specifiers": {
4
+
"jsr:@std/assert@^1.0.13": "1.0.13",
5
+
"jsr:@std/internal@^1.0.6": "1.0.8",
6
+
"npm:@atproto/common@~0.4.11": "0.4.11",
7
+
"npm:@atproto/crypto@~0.4.4": "0.4.4",
8
+
"npm:@atproto/lex-cli@*": "0.8.2",
9
+
"npm:@atproto/lexicon@*": "0.4.11",
10
+
"npm:@atproto/lexicon@~0.4.11": "0.4.11",
11
+
"npm:@atproto/xrpc-server@*": "0.7.19",
12
+
"npm:@types/node@*": "22.15.15",
13
+
"npm:multiformats@*": "9.9.0",
14
+
"npm:uint8arrays@^5.1.0": "5.1.0"
15
+
},
16
+
"jsr": {
17
+
"@std/assert@1.0.13": {
18
+
"integrity": "ae0d31e41919b12c656c742b22522c32fb26ed0cba32975cb0de2a273cb68b29",
19
+
"dependencies": [
20
+
"jsr:@std/internal"
21
+
]
22
+
},
23
+
"@std/internal@1.0.8": {
24
+
"integrity": "fc66e846d8d38a47cffd274d80d2ca3f0de71040f855783724bb6b87f60891f5"
25
+
}
26
+
},
27
+
"npm": {
28
+
"@atproto/common-web@0.4.2": {
29
+
"integrity": "sha512-vrXwGNoFGogodjQvJDxAeP3QbGtawgZute2ed1XdRO0wMixLk3qewtikZm06H259QDJVu6voKC5mubml+WgQUw==",
30
+
"dependencies": [
31
+
"graphemer",
32
+
"multiformats@9.9.0",
33
+
"uint8arrays@3.0.0",
34
+
"zod"
35
+
]
36
+
},
37
+
"@atproto/common@0.4.11": {
38
+
"integrity": "sha512-Knv0viYXNMfCdIE7jLUiWJKnnMfEwg+vz2epJQi8WOjqtqCFb3W/3Jn72ZiuovIfpdm13MaOiny6w2NErUQC6g==",
39
+
"dependencies": [
40
+
"@atproto/common-web",
41
+
"@ipld/dag-cbor",
42
+
"cbor-x",
43
+
"iso-datestring-validator",
44
+
"multiformats@9.9.0",
45
+
"pino"
46
+
]
47
+
},
48
+
"@atproto/crypto@0.4.4": {
49
+
"integrity": "sha512-Yq9+crJ7WQl7sxStVpHgie5Z51R05etaK9DLWYG/7bR5T4bhdcIgF6IfklLShtZwLYdVVj+K15s0BqW9a8PSDA==",
50
+
"dependencies": [
51
+
"@noble/curves",
52
+
"@noble/hashes",
53
+
"uint8arrays@3.0.0"
54
+
]
55
+
},
56
+
"@atproto/lex-cli@0.8.2": {
57
+
"integrity": "sha512-yNQFYBV3tBBLnVrRUtUBlx/WIF4ypMFsvOsCLjA7pHL1SyW9JbczSEAoiNtoDmPc4UXCjMtXggz0ovBG8lynNA==",
58
+
"dependencies": [
59
+
"@atproto/lexicon",
60
+
"@atproto/syntax",
61
+
"chalk",
62
+
"commander",
63
+
"prettier",
64
+
"ts-morph",
65
+
"yesno",
66
+
"zod"
67
+
],
68
+
"bin": true
69
+
},
70
+
"@atproto/lexicon@0.4.11": {
71
+
"integrity": "sha512-btefdnvNz2Ao2I+qbmj0F06HC8IlrM/IBz6qOBS50r0S6uDf5tOO+Mv2tSVdimFkdzyDdLtBI1sV36ONxz2cOw==",
72
+
"dependencies": [
73
+
"@atproto/common-web",
74
+
"@atproto/syntax",
75
+
"iso-datestring-validator",
76
+
"multiformats@9.9.0",
77
+
"zod"
78
+
]
79
+
},
80
+
"@atproto/syntax@0.4.0": {
81
+
"integrity": "sha512-b9y5ceHS8YKOfP3mdKmwAx5yVj9294UN7FG2XzP6V5aKUdFazEYRnR9m5n5ZQFKa3GNvz7de9guZCJ/sUTcOAA=="
82
+
},
83
+
"@atproto/xrpc-server@0.7.19": {
84
+
"integrity": "sha512-YSCl/tU2NDykgDYslFSOYCr96esUgDwncFiADKL59/fyIFPLoT0qY8Uq/budpxUh0qPzjow4HHgVWESOaOpUmA==",
85
+
"dependencies": [
86
+
"@atproto/common",
87
+
"@atproto/crypto",
88
+
"@atproto/lexicon",
89
+
"@atproto/xrpc",
90
+
"cbor-x",
91
+
"express",
92
+
"http-errors",
93
+
"mime-types",
94
+
"rate-limiter-flexible",
95
+
"uint8arrays@3.0.0",
96
+
"ws",
97
+
"zod"
98
+
]
99
+
},
100
+
"@atproto/xrpc@0.7.0": {
101
+
"integrity": "sha512-SfhP9dGx2qclaScFDb58Jnrmim5nk4geZXCqg6sB0I/KZhZEkr9iIx1hLCp+sxkIfEsmEJjeWO4B0rjUIJW5cw==",
102
+
"dependencies": [
103
+
"@atproto/lexicon",
104
+
"zod"
105
+
]
106
+
},
107
+
"@cbor-extract/cbor-extract-darwin-arm64@2.2.0": {
108
+
"integrity": "sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w==",
109
+
"os": ["darwin"],
110
+
"cpu": ["arm64"]
111
+
},
112
+
"@cbor-extract/cbor-extract-darwin-x64@2.2.0": {
113
+
"integrity": "sha512-1liF6fgowph0JxBbYnAS7ZlqNYLf000Qnj4KjqPNW4GViKrEql2MgZnAsExhY9LSy8dnvA4C0qHEBgPrll0z0w==",
114
+
"os": ["darwin"],
115
+
"cpu": ["x64"]
116
+
},
117
+
"@cbor-extract/cbor-extract-linux-arm64@2.2.0": {
118
+
"integrity": "sha512-rQvhNmDuhjTVXSPFLolmQ47/ydGOFXtbR7+wgkSY0bdOxCFept1hvg59uiLPT2fVDuJFuEy16EImo5tE2x3RsQ==",
119
+
"os": ["linux"],
120
+
"cpu": ["arm64"]
121
+
},
122
+
"@cbor-extract/cbor-extract-linux-arm@2.2.0": {
123
+
"integrity": "sha512-QeBcBXk964zOytiedMPQNZr7sg0TNavZeuUCD6ON4vEOU/25+pLhNN6EDIKJ9VLTKaZ7K7EaAriyYQ1NQ05s/Q==",
124
+
"os": ["linux"],
125
+
"cpu": ["arm"]
126
+
},
127
+
"@cbor-extract/cbor-extract-linux-x64@2.2.0": {
128
+
"integrity": "sha512-cWLAWtT3kNLHSvP4RKDzSTX9o0wvQEEAj4SKvhWuOVZxiDAeQazr9A+PSiRILK1VYMLeDml89ohxCnUNQNQNCw==",
129
+
"os": ["linux"],
130
+
"cpu": ["x64"]
131
+
},
132
+
"@cbor-extract/cbor-extract-win32-x64@2.2.0": {
133
+
"integrity": "sha512-l2M+Z8DO2vbvADOBNLbbh9y5ST1RY5sqkWOg/58GkUPBYou/cuNZ68SGQ644f1CvZ8kcOxyZtw06+dxWHIoN/w==",
134
+
"os": ["win32"],
135
+
"cpu": ["x64"]
136
+
},
137
+
"@ipld/dag-cbor@7.0.3": {
138
+
"integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==",
139
+
"dependencies": [
140
+
"cborg",
141
+
"multiformats@9.9.0"
142
+
]
143
+
},
144
+
"@noble/curves@1.9.2": {
145
+
"integrity": "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g==",
146
+
"dependencies": [
147
+
"@noble/hashes"
148
+
]
149
+
},
150
+
"@noble/hashes@1.8.0": {
151
+
"integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="
152
+
},
153
+
"@ts-morph/common@0.25.0": {
154
+
"integrity": "sha512-kMnZz+vGGHi4GoHnLmMhGNjm44kGtKUXGnOvrKmMwAuvNjM/PgKVGfUnL7IDvK7Jb2QQ82jq3Zmp04Gy+r3Dkg==",
155
+
"dependencies": [
156
+
"minimatch",
157
+
"path-browserify",
158
+
"tinyglobby"
159
+
]
160
+
},
161
+
"@types/node@22.15.15": {
162
+
"integrity": "sha512-R5muMcZob3/Jjchn5LcO8jdKwSCbzqmPB6ruBxMcf9kbxtniZHP327s6C37iOfuw8mbKK3cAQa7sEl7afLrQ8A==",
163
+
"dependencies": [
164
+
"undici-types"
165
+
]
166
+
},
167
+
"abort-controller@3.0.0": {
168
+
"integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
169
+
"dependencies": [
170
+
"event-target-shim"
171
+
]
172
+
},
173
+
"accepts@1.3.8": {
174
+
"integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
175
+
"dependencies": [
176
+
"mime-types",
177
+
"negotiator"
178
+
]
179
+
},
180
+
"ansi-styles@4.3.0": {
181
+
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
182
+
"dependencies": [
183
+
"color-convert"
184
+
]
185
+
},
186
+
"array-flatten@1.1.1": {
187
+
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
188
+
},
189
+
"atomic-sleep@1.0.0": {
190
+
"integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="
191
+
},
192
+
"balanced-match@1.0.2": {
193
+
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
194
+
},
195
+
"base64-js@1.5.1": {
196
+
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
197
+
},
198
+
"body-parser@1.20.3": {
199
+
"integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
200
+
"dependencies": [
201
+
"bytes",
202
+
"content-type",
203
+
"debug",
204
+
"depd",
205
+
"destroy",
206
+
"http-errors",
207
+
"iconv-lite",
208
+
"on-finished",
209
+
"qs",
210
+
"raw-body",
211
+
"type-is",
212
+
"unpipe"
213
+
]
214
+
},
215
+
"brace-expansion@2.0.1": {
216
+
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
217
+
"dependencies": [
218
+
"balanced-match"
219
+
]
220
+
},
221
+
"buffer@6.0.3": {
222
+
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
223
+
"dependencies": [
224
+
"base64-js",
225
+
"ieee754"
226
+
]
227
+
},
228
+
"bytes@3.1.2": {
229
+
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
230
+
},
231
+
"call-bind-apply-helpers@1.0.2": {
232
+
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
233
+
"dependencies": [
234
+
"es-errors",
235
+
"function-bind"
236
+
]
237
+
},
238
+
"call-bound@1.0.4": {
239
+
"integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
240
+
"dependencies": [
241
+
"call-bind-apply-helpers",
242
+
"get-intrinsic"
243
+
]
244
+
},
245
+
"cbor-extract@2.2.0": {
246
+
"integrity": "sha512-Ig1zM66BjLfTXpNgKpvBePq271BPOvu8MR0Jl080yG7Jsl+wAZunfrwiwA+9ruzm/WEdIV5QF/bjDZTqyAIVHA==",
247
+
"dependencies": [
248
+
"node-gyp-build-optional-packages"
249
+
],
250
+
"optionalDependencies": [
251
+
"@cbor-extract/cbor-extract-darwin-arm64",
252
+
"@cbor-extract/cbor-extract-darwin-x64",
253
+
"@cbor-extract/cbor-extract-linux-arm",
254
+
"@cbor-extract/cbor-extract-linux-arm64",
255
+
"@cbor-extract/cbor-extract-linux-x64",
256
+
"@cbor-extract/cbor-extract-win32-x64"
257
+
],
258
+
"scripts": true,
259
+
"bin": true
260
+
},
261
+
"cbor-x@1.6.0": {
262
+
"integrity": "sha512-0kareyRwHSkL6ws5VXHEf8uY1liitysCVJjlmhaLG+IXLqhSaOO+t63coaso7yjwEzWZzLy8fJo06gZDVQM9Qg==",
263
+
"optionalDependencies": [
264
+
"cbor-extract"
265
+
]
266
+
},
267
+
"cborg@1.10.2": {
268
+
"integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==",
269
+
"bin": true
270
+
},
271
+
"chalk@4.1.2": {
272
+
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
273
+
"dependencies": [
274
+
"ansi-styles",
275
+
"supports-color"
276
+
]
277
+
},
278
+
"code-block-writer@13.0.3": {
279
+
"integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg=="
280
+
},
281
+
"color-convert@2.0.1": {
282
+
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
283
+
"dependencies": [
284
+
"color-name"
285
+
]
286
+
},
287
+
"color-name@1.1.4": {
288
+
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
289
+
},
290
+
"commander@9.5.0": {
291
+
"integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ=="
292
+
},
293
+
"content-disposition@0.5.4": {
294
+
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
295
+
"dependencies": [
296
+
"safe-buffer"
297
+
]
298
+
},
299
+
"content-type@1.0.5": {
300
+
"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="
301
+
},
302
+
"cookie-signature@1.0.6": {
303
+
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
304
+
},
305
+
"cookie@0.7.1": {
306
+
"integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w=="
307
+
},
308
+
"debug@2.6.9": {
309
+
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
310
+
"dependencies": [
311
+
"ms@2.0.0"
312
+
]
313
+
},
314
+
"depd@2.0.0": {
315
+
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
316
+
},
317
+
"destroy@1.2.0": {
318
+
"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
319
+
},
320
+
"detect-libc@2.0.4": {
321
+
"integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="
322
+
},
323
+
"dunder-proto@1.0.1": {
324
+
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
325
+
"dependencies": [
326
+
"call-bind-apply-helpers",
327
+
"es-errors",
328
+
"gopd"
329
+
]
330
+
},
331
+
"ee-first@1.1.1": {
332
+
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
333
+
},
334
+
"encodeurl@1.0.2": {
335
+
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
336
+
},
337
+
"encodeurl@2.0.0": {
338
+
"integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="
339
+
},
340
+
"es-define-property@1.0.1": {
341
+
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="
342
+
},
343
+
"es-errors@1.3.0": {
344
+
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
345
+
},
346
+
"es-object-atoms@1.1.1": {
347
+
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
348
+
"dependencies": [
349
+
"es-errors"
350
+
]
351
+
},
352
+
"escape-html@1.0.3": {
353
+
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
354
+
},
355
+
"etag@1.8.1": {
356
+
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
357
+
},
358
+
"event-target-shim@5.0.1": {
359
+
"integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
360
+
},
361
+
"events@3.3.0": {
362
+
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
363
+
},
364
+
"express@4.21.2": {
365
+
"integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
366
+
"dependencies": [
367
+
"accepts",
368
+
"array-flatten",
369
+
"body-parser",
370
+
"content-disposition",
371
+
"content-type",
372
+
"cookie",
373
+
"cookie-signature",
374
+
"debug",
375
+
"depd",
376
+
"encodeurl@2.0.0",
377
+
"escape-html",
378
+
"etag",
379
+
"finalhandler",
380
+
"fresh",
381
+
"http-errors",
382
+
"merge-descriptors",
383
+
"methods",
384
+
"on-finished",
385
+
"parseurl",
386
+
"path-to-regexp",
387
+
"proxy-addr",
388
+
"qs",
389
+
"range-parser",
390
+
"safe-buffer",
391
+
"send",
392
+
"serve-static",
393
+
"setprototypeof",
394
+
"statuses",
395
+
"type-is",
396
+
"utils-merge",
397
+
"vary"
398
+
]
399
+
},
400
+
"fast-redact@3.5.0": {
401
+
"integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A=="
402
+
},
403
+
"fdir@6.4.5_picomatch@4.0.2": {
404
+
"integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==",
405
+
"dependencies": [
406
+
"picomatch"
407
+
],
408
+
"optionalPeers": [
409
+
"picomatch"
410
+
]
411
+
},
412
+
"finalhandler@1.3.1": {
413
+
"integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
414
+
"dependencies": [
415
+
"debug",
416
+
"encodeurl@2.0.0",
417
+
"escape-html",
418
+
"on-finished",
419
+
"parseurl",
420
+
"statuses",
421
+
"unpipe"
422
+
]
423
+
},
424
+
"forwarded@0.2.0": {
425
+
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
426
+
},
427
+
"fresh@0.5.2": {
428
+
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
429
+
},
430
+
"function-bind@1.1.2": {
431
+
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
432
+
},
433
+
"get-intrinsic@1.3.0": {
434
+
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
435
+
"dependencies": [
436
+
"call-bind-apply-helpers",
437
+
"es-define-property",
438
+
"es-errors",
439
+
"es-object-atoms",
440
+
"function-bind",
441
+
"get-proto",
442
+
"gopd",
443
+
"has-symbols",
444
+
"hasown",
445
+
"math-intrinsics"
446
+
]
447
+
},
448
+
"get-proto@1.0.1": {
449
+
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
450
+
"dependencies": [
451
+
"dunder-proto",
452
+
"es-object-atoms"
453
+
]
454
+
},
455
+
"gopd@1.2.0": {
456
+
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="
457
+
},
458
+
"graphemer@1.4.0": {
459
+
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="
460
+
},
461
+
"has-flag@4.0.0": {
462
+
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
463
+
},
464
+
"has-symbols@1.1.0": {
465
+
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="
466
+
},
467
+
"hasown@2.0.2": {
468
+
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
469
+
"dependencies": [
470
+
"function-bind"
471
+
]
472
+
},
473
+
"http-errors@2.0.0": {
474
+
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
475
+
"dependencies": [
476
+
"depd",
477
+
"inherits",
478
+
"setprototypeof",
479
+
"statuses",
480
+
"toidentifier"
481
+
]
482
+
},
483
+
"iconv-lite@0.4.24": {
484
+
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
485
+
"dependencies": [
486
+
"safer-buffer"
487
+
]
488
+
},
489
+
"ieee754@1.2.1": {
490
+
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
491
+
},
492
+
"inherits@2.0.4": {
493
+
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
494
+
},
495
+
"ipaddr.js@1.9.1": {
496
+
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
497
+
},
498
+
"iso-datestring-validator@2.2.2": {
499
+
"integrity": "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA=="
500
+
},
501
+
"math-intrinsics@1.1.0": {
502
+
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="
503
+
},
504
+
"media-typer@0.3.0": {
505
+
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
506
+
},
507
+
"merge-descriptors@1.0.3": {
508
+
"integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ=="
509
+
},
510
+
"methods@1.1.2": {
511
+
"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
512
+
},
513
+
"mime-db@1.52.0": {
514
+
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
515
+
},
516
+
"mime-types@2.1.35": {
517
+
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
518
+
"dependencies": [
519
+
"mime-db"
520
+
]
521
+
},
522
+
"mime@1.6.0": {
523
+
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
524
+
"bin": true
525
+
},
526
+
"minimatch@9.0.5": {
527
+
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
528
+
"dependencies": [
529
+
"brace-expansion"
530
+
]
531
+
},
532
+
"ms@2.0.0": {
533
+
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
534
+
},
535
+
"ms@2.1.3": {
536
+
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
537
+
},
538
+
"multiformats@13.3.6": {
539
+
"integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww=="
540
+
},
541
+
"multiformats@9.9.0": {
542
+
"integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg=="
543
+
},
544
+
"negotiator@0.6.3": {
545
+
"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
546
+
},
547
+
"node-gyp-build-optional-packages@5.1.1": {
548
+
"integrity": "sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==",
549
+
"dependencies": [
550
+
"detect-libc"
551
+
],
552
+
"bin": true
553
+
},
554
+
"object-inspect@1.13.4": {
555
+
"integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="
556
+
},
557
+
"on-exit-leak-free@2.1.2": {
558
+
"integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA=="
559
+
},
560
+
"on-finished@2.4.1": {
561
+
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
562
+
"dependencies": [
563
+
"ee-first"
564
+
]
565
+
},
566
+
"parseurl@1.3.3": {
567
+
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
568
+
},
569
+
"path-browserify@1.0.1": {
570
+
"integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
571
+
},
572
+
"path-to-regexp@0.1.12": {
573
+
"integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="
574
+
},
575
+
"picomatch@4.0.2": {
576
+
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="
577
+
},
578
+
"pino-abstract-transport@1.2.0": {
579
+
"integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==",
580
+
"dependencies": [
581
+
"readable-stream",
582
+
"split2"
583
+
]
584
+
},
585
+
"pino-std-serializers@6.2.2": {
586
+
"integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA=="
587
+
},
588
+
"pino@8.21.0": {
589
+
"integrity": "sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==",
590
+
"dependencies": [
591
+
"atomic-sleep",
592
+
"fast-redact",
593
+
"on-exit-leak-free",
594
+
"pino-abstract-transport",
595
+
"pino-std-serializers",
596
+
"process-warning",
597
+
"quick-format-unescaped",
598
+
"real-require",
599
+
"safe-stable-stringify",
600
+
"sonic-boom",
601
+
"thread-stream"
602
+
],
603
+
"bin": true
604
+
},
605
+
"prettier@3.5.3": {
606
+
"integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
607
+
"bin": true
608
+
},
609
+
"process-warning@3.0.0": {
610
+
"integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ=="
611
+
},
612
+
"process@0.11.10": {
613
+
"integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="
614
+
},
615
+
"proxy-addr@2.0.7": {
616
+
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
617
+
"dependencies": [
618
+
"forwarded",
619
+
"ipaddr.js"
620
+
]
621
+
},
622
+
"qs@6.13.0": {
623
+
"integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
624
+
"dependencies": [
625
+
"side-channel"
626
+
]
627
+
},
628
+
"quick-format-unescaped@4.0.4": {
629
+
"integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="
630
+
},
631
+
"range-parser@1.2.1": {
632
+
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
633
+
},
634
+
"rate-limiter-flexible@2.4.2": {
635
+
"integrity": "sha512-rMATGGOdO1suFyf/mI5LYhts71g1sbdhmd6YvdiXO2gJnd42Tt6QS4JUKJKSWVVkMtBacm6l40FR7Trjo6Iruw=="
636
+
},
637
+
"raw-body@2.5.2": {
638
+
"integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
639
+
"dependencies": [
640
+
"bytes",
641
+
"http-errors",
642
+
"iconv-lite",
643
+
"unpipe"
644
+
]
645
+
},
646
+
"readable-stream@4.7.0": {
647
+
"integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==",
648
+
"dependencies": [
649
+
"abort-controller",
650
+
"buffer",
651
+
"events",
652
+
"process",
653
+
"string_decoder"
654
+
]
655
+
},
656
+
"real-require@0.2.0": {
657
+
"integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg=="
658
+
},
659
+
"safe-buffer@5.2.1": {
660
+
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
661
+
},
662
+
"safe-stable-stringify@2.5.0": {
663
+
"integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="
664
+
},
665
+
"safer-buffer@2.1.2": {
666
+
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
667
+
},
668
+
"send@0.19.0": {
669
+
"integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
670
+
"dependencies": [
671
+
"debug",
672
+
"depd",
673
+
"destroy",
674
+
"encodeurl@1.0.2",
675
+
"escape-html",
676
+
"etag",
677
+
"fresh",
678
+
"http-errors",
679
+
"mime",
680
+
"ms@2.1.3",
681
+
"on-finished",
682
+
"range-parser",
683
+
"statuses"
684
+
]
685
+
},
686
+
"serve-static@1.16.2": {
687
+
"integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
688
+
"dependencies": [
689
+
"encodeurl@2.0.0",
690
+
"escape-html",
691
+
"parseurl",
692
+
"send"
693
+
]
694
+
},
695
+
"setprototypeof@1.2.0": {
696
+
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
697
+
},
698
+
"side-channel-list@1.0.0": {
699
+
"integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
700
+
"dependencies": [
701
+
"es-errors",
702
+
"object-inspect"
703
+
]
704
+
},
705
+
"side-channel-map@1.0.1": {
706
+
"integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
707
+
"dependencies": [
708
+
"call-bound",
709
+
"es-errors",
710
+
"get-intrinsic",
711
+
"object-inspect"
712
+
]
713
+
},
714
+
"side-channel-weakmap@1.0.2": {
715
+
"integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
716
+
"dependencies": [
717
+
"call-bound",
718
+
"es-errors",
719
+
"get-intrinsic",
720
+
"object-inspect",
721
+
"side-channel-map"
722
+
]
723
+
},
724
+
"side-channel@1.1.0": {
725
+
"integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
726
+
"dependencies": [
727
+
"es-errors",
728
+
"object-inspect",
729
+
"side-channel-list",
730
+
"side-channel-map",
731
+
"side-channel-weakmap"
732
+
]
733
+
},
734
+
"sonic-boom@3.8.1": {
735
+
"integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==",
736
+
"dependencies": [
737
+
"atomic-sleep"
738
+
]
739
+
},
740
+
"split2@4.2.0": {
741
+
"integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="
742
+
},
743
+
"statuses@2.0.1": {
744
+
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
745
+
},
746
+
"string_decoder@1.3.0": {
747
+
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
748
+
"dependencies": [
749
+
"safe-buffer"
750
+
]
751
+
},
752
+
"supports-color@7.2.0": {
753
+
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
754
+
"dependencies": [
755
+
"has-flag"
756
+
]
757
+
},
758
+
"thread-stream@2.7.0": {
759
+
"integrity": "sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==",
760
+
"dependencies": [
761
+
"real-require"
762
+
]
763
+
},
764
+
"tinyglobby@0.2.14_picomatch@4.0.2": {
765
+
"integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
766
+
"dependencies": [
767
+
"fdir",
768
+
"picomatch"
769
+
]
770
+
},
771
+
"toidentifier@1.0.1": {
772
+
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
773
+
},
774
+
"ts-morph@24.0.0": {
775
+
"integrity": "sha512-2OAOg/Ob5yx9Et7ZX4CvTCc0UFoZHwLEJ+dpDPSUi5TgwwlTlX47w+iFRrEwzUZwYACjq83cgjS/Da50Ga37uw==",
776
+
"dependencies": [
777
+
"@ts-morph/common",
778
+
"code-block-writer"
779
+
]
780
+
},
781
+
"type-is@1.6.18": {
782
+
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
783
+
"dependencies": [
784
+
"media-typer",
785
+
"mime-types"
786
+
]
787
+
},
788
+
"uint8arrays@3.0.0": {
789
+
"integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==",
790
+
"dependencies": [
791
+
"multiformats@9.9.0"
792
+
]
793
+
},
794
+
"uint8arrays@5.1.0": {
795
+
"integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==",
796
+
"dependencies": [
797
+
"multiformats@13.3.6"
798
+
]
799
+
},
800
+
"undici-types@6.21.0": {
801
+
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="
802
+
},
803
+
"unpipe@1.0.0": {
804
+
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
805
+
},
806
+
"utils-merge@1.0.1": {
807
+
"integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
808
+
},
809
+
"vary@1.1.2": {
810
+
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
811
+
},
812
+
"ws@8.18.2": {
813
+
"integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ=="
814
+
},
815
+
"yesno@0.4.0": {
816
+
"integrity": "sha512-tdBxmHvbXPBKYIg81bMCB7bVeDmHkRzk5rVJyYYXurwKkHq/MCd8rz4HSJUP7hW0H2NlXiq8IFiWvYKEHhlotA=="
817
+
},
818
+
"zod@3.25.51": {
819
+
"integrity": "sha512-TQSnBldh+XSGL+opiSIq0575wvDPqu09AqWe1F7JhUMKY+M91/aGlK4MhpVNO7MgYfHcVCB1ffwAUTJzllKJqg=="
820
+
}
821
+
},
822
+
"workspace": {
823
+
"dependencies": [
824
+
"jsr:@std/assert@^1.0.13",
825
+
"npm:@atproto/common@~0.4.11",
826
+
"npm:@atproto/crypto@~0.4.4",
827
+
"npm:@atproto/lexicon@~0.4.11",
828
+
"npm:uint8arrays@^5.1.0"
829
+
]
830
+
}
831
+
}
+29
services/mod/fly.toml
+29
services/mod/fly.toml
···
1
+
# fly.toml app configuration file generated for grain-mod on 2025-06-08T23:51:19-07:00
2
+
#
3
+
# See https://fly.io/docs/reference/configuration/ for information about how to use this file.
4
+
#
5
+
6
+
app = 'grain-mod'
7
+
primary_region = 'sea'
8
+
9
+
[build]
10
+
dockerfile = './Dockerfile'
11
+
12
+
[env]
13
+
MOD_SERVICE_DATABASE_URL = '/data/sqlite.db'
14
+
MOD_SERVICE_PORT = '8080'
15
+
16
+
[[mounts]]
17
+
source = 'data'
18
+
destination = '/data'
19
+
20
+
[http_service]
21
+
internal_port = 8080
22
+
force_https = true
23
+
auto_stop_machines = 'stop'
24
+
auto_start_machines = true
25
+
min_machines_running = 0
26
+
processes = ['app']
27
+
28
+
[[vm]]
29
+
size = 'shared-cpu-1x'
+7
services/mod/lexicons.json
+7
services/mod/lexicons.json
+192
services/mod/lexicons/com/atproto/label/defs.json
+192
services/mod/lexicons/com/atproto/label/defs.json
···
1
+
{
2
+
"lexicon": 1,
3
+
"id": "com.atproto.label.defs",
4
+
"defs": {
5
+
"label": {
6
+
"type": "object",
7
+
"required": [
8
+
"src",
9
+
"uri",
10
+
"val",
11
+
"cts"
12
+
],
13
+
"properties": {
14
+
"cid": {
15
+
"type": "string",
16
+
"format": "cid",
17
+
"description": "Optionally, CID specifying the specific version of 'uri' resource this label applies to."
18
+
},
19
+
"cts": {
20
+
"type": "string",
21
+
"format": "datetime",
22
+
"description": "Timestamp when this label was created."
23
+
},
24
+
"exp": {
25
+
"type": "string",
26
+
"format": "datetime",
27
+
"description": "Timestamp at which this label expires (no longer applies)."
28
+
},
29
+
"neg": {
30
+
"type": "boolean",
31
+
"description": "If true, this is a negation label, overwriting a previous label."
32
+
},
33
+
"sig": {
34
+
"type": "bytes",
35
+
"description": "Signature of dag-cbor encoded label."
36
+
},
37
+
"src": {
38
+
"type": "string",
39
+
"format": "did",
40
+
"description": "DID of the actor who created this label."
41
+
},
42
+
"uri": {
43
+
"type": "string",
44
+
"format": "uri",
45
+
"description": "AT URI of the record, repository (account), or other resource that this label applies to."
46
+
},
47
+
"val": {
48
+
"type": "string",
49
+
"maxLength": 128,
50
+
"description": "The short string name of the value or type of this label."
51
+
},
52
+
"ver": {
53
+
"type": "integer",
54
+
"description": "The AT Protocol version of the label object."
55
+
}
56
+
},
57
+
"description": "Metadata tag on an atproto resource (eg, repo or record)."
58
+
},
59
+
"selfLabel": {
60
+
"type": "object",
61
+
"required": [
62
+
"val"
63
+
],
64
+
"properties": {
65
+
"val": {
66
+
"type": "string",
67
+
"maxLength": 128,
68
+
"description": "The short string name of the value or type of this label."
69
+
}
70
+
},
71
+
"description": "Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel."
72
+
},
73
+
"labelValue": {
74
+
"type": "string",
75
+
"knownValues": [
76
+
"!hide",
77
+
"!no-promote",
78
+
"!warn",
79
+
"!no-unauthenticated",
80
+
"dmca-violation",
81
+
"doxxing",
82
+
"porn",
83
+
"sexual",
84
+
"nudity",
85
+
"nsfl",
86
+
"gore"
87
+
]
88
+
},
89
+
"selfLabels": {
90
+
"type": "object",
91
+
"required": [
92
+
"values"
93
+
],
94
+
"properties": {
95
+
"values": {
96
+
"type": "array",
97
+
"items": {
98
+
"ref": "#selfLabel",
99
+
"type": "ref"
100
+
},
101
+
"maxLength": 10
102
+
}
103
+
},
104
+
"description": "Metadata tags on an atproto record, published by the author within the record."
105
+
},
106
+
"labelValueDefinition": {
107
+
"type": "object",
108
+
"required": [
109
+
"identifier",
110
+
"severity",
111
+
"blurs",
112
+
"locales"
113
+
],
114
+
"properties": {
115
+
"blurs": {
116
+
"type": "string",
117
+
"description": "What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing.",
118
+
"knownValues": [
119
+
"content",
120
+
"media",
121
+
"none"
122
+
]
123
+
},
124
+
"locales": {
125
+
"type": "array",
126
+
"items": {
127
+
"ref": "#labelValueDefinitionStrings",
128
+
"type": "ref"
129
+
}
130
+
},
131
+
"severity": {
132
+
"type": "string",
133
+
"description": "How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.",
134
+
"knownValues": [
135
+
"inform",
136
+
"alert",
137
+
"none"
138
+
]
139
+
},
140
+
"adultOnly": {
141
+
"type": "boolean",
142
+
"description": "Does the user need to have adult content enabled in order to configure this label?"
143
+
},
144
+
"identifier": {
145
+
"type": "string",
146
+
"maxLength": 100,
147
+
"description": "The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).",
148
+
"maxGraphemes": 100
149
+
},
150
+
"defaultSetting": {
151
+
"type": "string",
152
+
"default": "warn",
153
+
"description": "The default setting for this label.",
154
+
"knownValues": [
155
+
"ignore",
156
+
"warn",
157
+
"hide"
158
+
]
159
+
}
160
+
},
161
+
"description": "Declares a label value and its expected interpretations and behaviors."
162
+
},
163
+
"labelValueDefinitionStrings": {
164
+
"type": "object",
165
+
"required": [
166
+
"lang",
167
+
"name",
168
+
"description"
169
+
],
170
+
"properties": {
171
+
"lang": {
172
+
"type": "string",
173
+
"format": "language",
174
+
"description": "The code of the language these strings are written in."
175
+
},
176
+
"name": {
177
+
"type": "string",
178
+
"maxLength": 640,
179
+
"description": "A short human-readable name for the label.",
180
+
"maxGraphemes": 64
181
+
},
182
+
"description": {
183
+
"type": "string",
184
+
"maxLength": 100000,
185
+
"description": "A longer description of what the label means and why it might be applied.",
186
+
"maxGraphemes": 10000
187
+
}
188
+
},
189
+
"description": "Strings which describe the label in the UI, localized into a specific language."
190
+
}
191
+
}
192
+
}
+63
services/mod/lexicons/com/atproto/label/queryLabels.json
+63
services/mod/lexicons/com/atproto/label/queryLabels.json
···
1
+
{
2
+
"lexicon": 1,
3
+
"id": "com.atproto.label.queryLabels",
4
+
"defs": {
5
+
"main": {
6
+
"type": "query",
7
+
"output": {
8
+
"schema": {
9
+
"type": "object",
10
+
"required": [
11
+
"labels"
12
+
],
13
+
"properties": {
14
+
"cursor": {
15
+
"type": "string"
16
+
},
17
+
"labels": {
18
+
"type": "array",
19
+
"items": {
20
+
"ref": "com.atproto.label.defs#label",
21
+
"type": "ref"
22
+
}
23
+
}
24
+
}
25
+
},
26
+
"encoding": "application/json"
27
+
},
28
+
"parameters": {
29
+
"type": "params",
30
+
"required": [
31
+
"uriPatterns"
32
+
],
33
+
"properties": {
34
+
"limit": {
35
+
"type": "integer",
36
+
"default": 50,
37
+
"maximum": 250,
38
+
"minimum": 1
39
+
},
40
+
"cursor": {
41
+
"type": "string"
42
+
},
43
+
"sources": {
44
+
"type": "array",
45
+
"items": {
46
+
"type": "string",
47
+
"format": "did"
48
+
},
49
+
"description": "Optional list of label sources (DIDs) to filter on."
50
+
},
51
+
"uriPatterns": {
52
+
"type": "array",
53
+
"items": {
54
+
"type": "string"
55
+
},
56
+
"description": "List of AT URI patterns to match (boolean 'OR'). Each may be a prefix (ending with '*'; will match inclusive of the string leading to '*'), or a full URI."
57
+
}
58
+
}
59
+
},
60
+
"description": "Find labels relevant to the provided AT-URI patterns. Public endpoint for moderation services, though may return different or additional results with auth."
61
+
}
62
+
}
63
+
}
+69
services/mod/lexicons/com/atproto/label/subscribeLabels.json
+69
services/mod/lexicons/com/atproto/label/subscribeLabels.json
···
1
+
{
2
+
"lexicon": 1,
3
+
"id": "com.atproto.label.subscribeLabels",
4
+
"defs": {
5
+
"info": {
6
+
"type": "object",
7
+
"required": [
8
+
"name"
9
+
],
10
+
"properties": {
11
+
"name": {
12
+
"type": "string",
13
+
"knownValues": [
14
+
"OutdatedCursor"
15
+
]
16
+
},
17
+
"message": {
18
+
"type": "string"
19
+
}
20
+
}
21
+
},
22
+
"main": {
23
+
"type": "subscription",
24
+
"errors": [
25
+
{
26
+
"name": "FutureCursor"
27
+
}
28
+
],
29
+
"message": {
30
+
"schema": {
31
+
"refs": [
32
+
"#labels",
33
+
"#info"
34
+
],
35
+
"type": "union"
36
+
}
37
+
},
38
+
"parameters": {
39
+
"type": "params",
40
+
"properties": {
41
+
"cursor": {
42
+
"type": "integer",
43
+
"description": "The last known event seq number to backfill from."
44
+
}
45
+
}
46
+
},
47
+
"description": "Subscribe to stream of labels (and negations). Public endpoint implemented by mod services. Uses same sequencing scheme as repo event stream."
48
+
},
49
+
"labels": {
50
+
"type": "object",
51
+
"required": [
52
+
"seq",
53
+
"labels"
54
+
],
55
+
"properties": {
56
+
"seq": {
57
+
"type": "integer"
58
+
},
59
+
"labels": {
60
+
"type": "array",
61
+
"items": {
62
+
"ref": "com.atproto.label.defs#label",
63
+
"type": "ref"
64
+
}
65
+
}
66
+
}
67
+
}
68
+
}
69
+
}
+513
services/mod/main.ts
+513
services/mod/main.ts
···
1
+
import type { Label } from "$lexicon/types/com/atproto/label/defs.ts";
2
+
import type { Labels } from "$lexicon/types/com/atproto/label/subscribeLabels.ts";
3
+
import { cborEncode, noUndefinedVals } from "@atproto/common";
4
+
import { Keypair, Secp256k1Keypair } from "@atproto/crypto";
5
+
import { stringifyLex } from "@atproto/lexicon";
6
+
import { assertEquals, assertExists } from "@std/assert";
7
+
import { DatabaseSync } from "node:sqlite";
8
+
import * as ui8 from "uint8arrays";
9
+
10
+
if (import.meta.main) {
11
+
const cfg = await createConfig();
12
+
const db = createDb(cfg);
13
+
const modService = createModService(db);
14
+
const handler = createHandler(modService);
15
+
16
+
Deno.serve({
17
+
port: cfg.port,
18
+
onListen() {
19
+
console.log(`Listening on http://localhost:${cfg.port}`);
20
+
},
21
+
onError(err) {
22
+
console.error("Error occurred:", err);
23
+
return new Response("Internal Server Error", {
24
+
status: 500,
25
+
});
26
+
},
27
+
}, handler);
28
+
29
+
Deno.addSignalListener("SIGINT", () => {
30
+
console.log("Shutting down server...");
31
+
Deno.exit(0);
32
+
});
33
+
}
34
+
35
+
type Config = {
36
+
port: number;
37
+
databaseUrl: string;
38
+
signingKey: string;
39
+
};
40
+
41
+
export async function createConfig(): Promise<Config> {
42
+
return {
43
+
port: Number(Deno.env.get("MOD_SERVICE_PORT")) || 8080,
44
+
databaseUrl: Deno.env.get("MOD_SERVICE_DATABASE_URL") ?? ":memory:",
45
+
signingKey: Deno.env.get("MOD_SERVICE_SIGNING_KEY") ??
46
+
await createSigningKey(),
47
+
};
48
+
}
49
+
50
+
async function createSigningKey() {
51
+
const serviceKeypair = await Secp256k1Keypair.create({ exportable: true });
52
+
return ui8.toString(await serviceKeypair.export(), "hex");
53
+
}
54
+
55
+
// Track all connected WebSocket clients for label subscriptions
56
+
const labelSubscribers = new Set<WebSocket>();
57
+
58
+
export function broadcastLabel(label: LabelRow) {
59
+
// Only broadcast if this label is active (not negated, not expired, and latest)
60
+
// Gather all labels for this (src, uri, val) and check if this is the latest and not negated/expired
61
+
// For simplicity, assume label is already the latest for this key
62
+
if (label.exp && new Date(label.exp).getTime() < Date.now()) return;
63
+
if (label.neg) return;
64
+
const msg = stringifyLex({
65
+
seq: label.id,
66
+
labels: [formatLabel(label)],
67
+
} as Labels);
68
+
for (const ws of labelSubscribers) {
69
+
try {
70
+
ws.send(msg);
71
+
} catch (e) {
72
+
console.error("Error sending label to subscriber:", e);
73
+
labelSubscribers.delete(ws);
74
+
}
75
+
}
76
+
}
77
+
78
+
export async function handleSubscribeLabels(
79
+
req: Request,
80
+
modService: ReturnType<typeof createModService>,
81
+
): Promise<Response> {
82
+
const { searchParams } = new URL(req.url);
83
+
const cursorParam = searchParams.get("cursor");
84
+
const cursor = cursorParam ? parseInt(cursorParam, 10) : 0;
85
+
if (cursorParam && Number.isNaN(cursor)) {
86
+
return new Response(
87
+
JSON.stringify({ error: "Cursor must be an integer" }),
88
+
{ status: 400 },
89
+
);
90
+
}
91
+
const { response, socket } = Deno.upgradeWebSocket(req);
92
+
// On open, send all labels after the cursor (including negations and expired)
93
+
socket.onopen = () => {
94
+
try {
95
+
const { rows } = modService.getLabels({
96
+
patterns: [],
97
+
sources: [],
98
+
limit: 1000,
99
+
cursor,
100
+
});
101
+
// Send ALL rows, not just active (per ATProto spec)
102
+
for (const row of rows) {
103
+
const msg = stringifyLex({
104
+
seq: row.id,
105
+
labels: [formatLabel(row)],
106
+
} as Labels);
107
+
socket.send(msg);
108
+
}
109
+
labelSubscribers.add(socket);
110
+
const userAgent = req.headers.get("user-agent");
111
+
const origin = req.headers.get("origin");
112
+
console.log(
113
+
`New subscriber connected, total: ${labelSubscribers.size}, user-agent: ${userAgent}, origin: ${origin}, time: ${
114
+
new Date().toISOString()
115
+
}`,
116
+
);
117
+
} catch (e) {
118
+
console.error("Error sending initial labels:", e);
119
+
socket.close();
120
+
}
121
+
};
122
+
socket.onclose = () => {
123
+
labelSubscribers.delete(socket);
124
+
};
125
+
return response;
126
+
}
127
+
128
+
// Filter for active (non-negated, non-expired) labels
129
+
// Used for API hydration only. For the WebSocket stream, send all labels (including negations and expired).
130
+
function filterActiveLabels(labels: LabelRow[]): LabelRow[] {
131
+
const now = Date.now();
132
+
const latest: Record<string, LabelRow> = {};
133
+
for (const label of labels) {
134
+
if (label.exp && new Date(label.exp).getTime() < now) continue;
135
+
const key = `${label.src}|${label.uri}|${label.val}`;
136
+
if (!latest[key] || new Date(label.cts) > new Date(latest[key].cts)) {
137
+
latest[key] = label;
138
+
}
139
+
}
140
+
return Object.values(latest).filter((label) => !label.neg);
141
+
}
142
+
143
+
function createHandler(
144
+
modService: ReturnType<typeof createModService>,
145
+
) {
146
+
return async (req: Request): Promise<Response> => {
147
+
const url = new URL(req.url);
148
+
const pathname = url.pathname;
149
+
150
+
if (
151
+
pathname === "/xrpc/com.atproto.label.subscribeLabels" &&
152
+
req.headers.get("upgrade")?.toLowerCase() === "websocket"
153
+
) {
154
+
return await handleSubscribeLabels(req, modService);
155
+
} else if (
156
+
req.method === "GET" && pathname === "/xrpc/com.atproto.label.queryLabels"
157
+
) {
158
+
// Parse query params
159
+
const uriPatternsParam = url.searchParams.getAll("uriPatterns");
160
+
const sourcesParam = url.searchParams.getAll("sources");
161
+
const cursorParam = url.searchParams.get("cursor");
162
+
const limitParam = url.searchParams.get("limit");
163
+
164
+
const uriPatterns: string[] = uriPatternsParam.length
165
+
? uriPatternsParam
166
+
: [];
167
+
const sources: string[] = sourcesParam.length ? sourcesParam : [];
168
+
const cursor = cursorParam ? parseInt(cursorParam, 10) : 0;
169
+
if (cursorParam && Number.isNaN(cursor)) {
170
+
return new Response(
171
+
JSON.stringify({
172
+
error: "Cursor must be an integer",
173
+
}),
174
+
{ status: 400 },
175
+
);
176
+
}
177
+
const limit = limitParam ? parseInt(limitParam, 10) : 50;
178
+
if (Number.isNaN(limit) || limit < 1 || limit > 250) {
179
+
return new Response(
180
+
JSON.stringify({
181
+
error: "Limit must be an integer between 1 and 250",
182
+
}),
183
+
{ status: 400 },
184
+
);
185
+
}
186
+
187
+
// Handle wildcards and SQL LIKE
188
+
const patterns = uriPatterns.includes("*")
189
+
? []
190
+
: uriPatterns.map((pattern) => {
191
+
pattern = pattern.replace(/%/g, "").replace(/_/g, "\\_");
192
+
const starIndex = pattern.indexOf("*");
193
+
if (starIndex === -1) return pattern;
194
+
if (starIndex !== pattern.length - 1) {
195
+
return undefined; // Only trailing wildcards supported
196
+
}
197
+
return pattern.slice(0, -1) + "%";
198
+
}).filter(Boolean) as string[];
199
+
200
+
const { rows: labelRows, nextCursor } = modService.getLabels({
201
+
patterns,
202
+
sources,
203
+
limit,
204
+
cursor,
205
+
});
206
+
const activeLabels = filterActiveLabels(labelRows);
207
+
const formattedRows = activeLabels.map(formatLabel);
208
+
return new Response(
209
+
stringifyLex({ cursor: nextCursor, labels: formattedRows }),
210
+
{
211
+
headers: { "content-type": "application/json" },
212
+
},
213
+
);
214
+
} else if (req.method === "GET" && pathname === "/health") {
215
+
// Use the modService's DB to check health
216
+
modService.getLabels({
217
+
patterns: [],
218
+
sources: [],
219
+
limit: 1,
220
+
cursor: 0,
221
+
});
222
+
return new Response(JSON.stringify({ version: "0.1.0" }), {
223
+
headers: { "content-type": "application/json" },
224
+
});
225
+
} else if (pathname.startsWith("/xrpc/")) {
226
+
return new Response("Method Not Implemented", { status: 501 });
227
+
}
228
+
229
+
return new Response("Not Found", { status: 404 });
230
+
};
231
+
}
232
+
233
+
export function createDb(cfg: Config) {
234
+
const db = new DatabaseSync(cfg.databaseUrl);
235
+
236
+
db.exec(`
237
+
PRAGMA journal_mode = WAL;
238
+
239
+
CREATE TABLE IF NOT EXISTS labels (
240
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
241
+
src TEXT NOT NULL,
242
+
uri TEXT NOT NULL,
243
+
cid TEXT,
244
+
val TEXT NOT NULL,
245
+
neg BOOLEAN DEFAULT FALSE,
246
+
cts DATETIME NOT NULL,
247
+
exp DATETIME,
248
+
sig BLOB
249
+
);
250
+
`);
251
+
252
+
return db;
253
+
}
254
+
255
+
export type LabelRow = {
256
+
id: number;
257
+
src: string;
258
+
uri: string;
259
+
cid: string | null;
260
+
val: string;
261
+
neg: boolean;
262
+
cts: string;
263
+
exp: string | null;
264
+
sig: Uint8Array;
265
+
};
266
+
267
+
type UnsignedLabel = Omit<Label, "sig">;
268
+
type SignedLabel = Label & { sig: Uint8Array };
269
+
270
+
export function createModService(db: DatabaseSync) {
271
+
return {
272
+
insertLabel: (label: SignedLabel) => {
273
+
const result = db.prepare(
274
+
`INSERT INTO labels (src, uri, cid, val, neg, cts, exp, sig)
275
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
276
+
).run(
277
+
label.src,
278
+
label.uri,
279
+
label.cid ?? null,
280
+
label.val,
281
+
label.neg ? 1 : 0,
282
+
label.cts,
283
+
label.exp ?? null,
284
+
label.sig,
285
+
);
286
+
return result.lastInsertRowid as number;
287
+
},
288
+
getLabels: (opts: {
289
+
patterns: string[];
290
+
sources: string[];
291
+
limit: number;
292
+
cursor: number;
293
+
}): { rows: LabelRow[]; nextCursor: string } => {
294
+
const { patterns, sources, limit, cursor } = opts;
295
+
const conditions: string[] = [];
296
+
const params: (string | number | Uint8Array | null)[] = [];
297
+
if (patterns.length) {
298
+
conditions.push(
299
+
"(" + patterns.map(() => "uri LIKE ?").join(" OR ") + ")",
300
+
);
301
+
params.push(...patterns);
302
+
}
303
+
if (sources.length) {
304
+
conditions.push(`src IN (${sources.map(() => "?").join(", ")})`);
305
+
params.push(...sources);
306
+
}
307
+
if (cursor) {
308
+
conditions.push("id > ?");
309
+
params.push(cursor);
310
+
}
311
+
params.push(limit);
312
+
const whereClause = conditions.length
313
+
? `WHERE ${conditions.join(" AND ")}`
314
+
: "";
315
+
const sql = `SELECT * FROM labels ${whereClause} ORDER BY id ASC LIMIT ?`;
316
+
const stmt = db.prepare(sql);
317
+
const rows = stmt.all(...params) as unknown[];
318
+
function rowToLabelRow(row: unknown): LabelRow {
319
+
if (typeof row !== "object" || row === null) {
320
+
throw new Error("Invalid row");
321
+
}
322
+
const r = row as Record<string, unknown>;
323
+
const src = typeof r.src === "string" ? r.src : "";
324
+
const uri = typeof r.uri === "string" ? r.uri : "";
325
+
let cid: string | null = null;
326
+
if (typeof r.cid === "string") cid = r.cid;
327
+
const val = typeof r.val === "string" ? r.val : "";
328
+
const cts = typeof r.cts === "string" ? r.cts : "";
329
+
let exp: string | null = null;
330
+
if (typeof r.exp === "string") exp = r.exp;
331
+
const neg = typeof r.neg === "boolean" ? r.neg : Number(r.neg) === 1;
332
+
let sig: Uint8Array;
333
+
if (r.sig instanceof Uint8Array) sig = r.sig;
334
+
else if (Array.isArray(r.sig)) sig = new Uint8Array(r.sig);
335
+
else sig = new Uint8Array();
336
+
const id = typeof r.id === "number" ? r.id : Number(r.id);
337
+
return { id, src, uri, cid, val, neg, cts, exp, sig };
338
+
}
339
+
const labelRows = rows.map(rowToLabelRow);
340
+
let nextCursor = "0";
341
+
if (rows.length > 0) {
342
+
const lastId = (rows[rows.length - 1] as Record<string, unknown>).id;
343
+
nextCursor = typeof lastId === "string" || typeof lastId === "number"
344
+
? String(lastId)
345
+
: "0";
346
+
}
347
+
return { rows: labelRows, nextCursor };
348
+
},
349
+
};
350
+
}
351
+
352
+
export function createLabel(
353
+
cfg: Config,
354
+
modService: ReturnType<typeof createModService>,
355
+
) {
356
+
return async (
357
+
label: UnsignedLabel,
358
+
) => {
359
+
const serviceSigningKey = cfg.signingKey;
360
+
if (!serviceSigningKey) {
361
+
throw new Error("MOD_SERVICE_SIGNING_KEY is not set");
362
+
}
363
+
const signingKey = await Secp256k1Keypair.import(serviceSigningKey);
364
+
365
+
const signed = await signLabel(label, signingKey);
366
+
367
+
const id = modService.insertLabel(signed);
368
+
// Broadcast the label to all subscribers after insert
369
+
const labelRow: LabelRow = {
370
+
id: Number(id),
371
+
src: signed.src,
372
+
uri: signed.uri,
373
+
cid: signed.cid ?? null,
374
+
val: signed.val,
375
+
neg: signed.neg === true, // ensure boolean
376
+
cts: signed.cts,
377
+
exp: signed.exp ?? null,
378
+
sig: signed.sig,
379
+
};
380
+
broadcastLabel(labelRow);
381
+
};
382
+
}
383
+
384
+
const formatLabel = (row: LabelRow): Label => {
385
+
return noUndefinedVals(
386
+
{
387
+
ver: 1,
388
+
src: row.src,
389
+
uri: row.uri,
390
+
cid: row.cid === "" || row.cid === null ? undefined : row.cid,
391
+
val: row.val,
392
+
neg: row.neg === true ? true : undefined,
393
+
cts: row.cts,
394
+
exp: row.exp ?? undefined,
395
+
sig: row.sig ? new Uint8Array(row.sig) : undefined,
396
+
} satisfies Label,
397
+
) as unknown as Label;
398
+
};
399
+
400
+
const signLabel = async (
401
+
label: Label,
402
+
signingKey: Keypair,
403
+
): Promise<SignedLabel> => {
404
+
const { ver, src, uri, cid, val, neg, cts, exp } = label;
405
+
const reformatted = noUndefinedVals(
406
+
{
407
+
ver: ver ?? 1,
408
+
src,
409
+
uri,
410
+
cid,
411
+
val,
412
+
neg: neg === true ? true : undefined,
413
+
cts,
414
+
exp,
415
+
} satisfies Label,
416
+
) as unknown as Label;
417
+
418
+
const bytes = cborEncode(reformatted);
419
+
const sig = await signingKey.sign(bytes);
420
+
return {
421
+
...reformatted,
422
+
sig,
423
+
};
424
+
};
425
+
426
+
Deno.test("insertLabel inserts a signed label and returns an id", async () => {
427
+
const cfg = await createConfig();
428
+
const db = createDb(cfg);
429
+
const modService = createModService(db);
430
+
431
+
const label = {
432
+
src: "did:example:alice",
433
+
uri: "at://did:example:bob/app.bsky.feed.post/123",
434
+
val: "spam",
435
+
neg: false,
436
+
cts: new Date().toISOString(),
437
+
sig: new Uint8Array([1, 2, 3]),
438
+
};
439
+
440
+
const id = modService.insertLabel(label);
441
+
assertExists(id);
442
+
443
+
// Check that the label is in the database
444
+
const row = db.prepare("SELECT * FROM labels WHERE id = ?").get(id);
445
+
assertExists(row);
446
+
assertEquals(row.src, label.src);
447
+
assertEquals(row.uri, label.uri);
448
+
assertEquals(row.val, label.val);
449
+
assertEquals(row.neg, 0);
450
+
assertEquals(row.sig, label.sig);
451
+
});
452
+
453
+
Deno.test("signLabel produces a valid signature", async () => {
454
+
const cfg = await createConfig();
455
+
const keyHex = cfg.signingKey;
456
+
const signingKey = await Secp256k1Keypair.import(keyHex);
457
+
458
+
const label: Label = {
459
+
ver: 1,
460
+
src: "did:example:alice",
461
+
uri: "at://did:example:bob/app.bsky.feed.post/123",
462
+
val: "spam",
463
+
cts: new Date().toISOString(),
464
+
};
465
+
466
+
const signed = await signLabel(label, signingKey);
467
+
468
+
assertExists(signed.sig);
469
+
assertEquals(signed.src, label.src);
470
+
assertEquals(signed.uri, label.uri);
471
+
assertEquals(signed.val, label.val);
472
+
});
473
+
474
+
Deno.test("getLabels retrieves labels with filtering and pagination", async () => {
475
+
const cfg = await createConfig();
476
+
const db = createDb(cfg);
477
+
const modService = createModService(db);
478
+
479
+
// Insert some test labels
480
+
for (let i = 1; i <= 10; i++) {
481
+
modService.insertLabel({
482
+
src: "did:example:alice",
483
+
uri: `at://did:example:bob/app.bsky.feed.post/${i}`,
484
+
val: i % 2 === 0 ? "spam" : "scam",
485
+
neg: false,
486
+
cts: new Date().toISOString(),
487
+
sig: new Uint8Array([1, 2, 3]),
488
+
});
489
+
}
490
+
491
+
// Retrieve labels with limit and cursor
492
+
const { rows, nextCursor } = modService.getLabels({
493
+
patterns: ["at://did:example:bob/app.bsky.feed.post/%"],
494
+
sources: ["did:example:alice"],
495
+
limit: 5,
496
+
cursor: 0,
497
+
});
498
+
499
+
assertEquals(rows.length, 5);
500
+
assertEquals(nextCursor, "5");
501
+
502
+
// Retrieve next page
503
+
const { rows: nextRows } = modService.getLabels({
504
+
patterns: ["at://did:example:bob/app.bsky.feed.post/%"],
505
+
sources: ["did:example:alice"],
506
+
limit: 5,
507
+
cursor: parseInt(nextCursor, 10),
508
+
});
509
+
510
+
assertEquals(nextRows.length, 5);
511
+
});
512
+
513
+
export type ModService = ReturnType<typeof createModService>;
+10
-10
services/pds/pdsadmin-command.sh
+10
-10
services/pds/pdsadmin-command.sh
···
13
13
export DID=""
14
14
15
15
# make an invite code
16
-
curl \
17
-
--fail \
18
-
--silent \
19
-
--show-error \
20
-
--request POST \
21
-
--header "Content-Type: application/json" \
22
-
--user "admin:${PDS_ADMIN_PASSWORD}" \
23
-
--data '{"useCount": 20}' \
24
-
"https://${PDS_HOSTNAME}/xrpc/com.atproto.server.createInviteCode"
16
+
# curl \
17
+
# --fail \
18
+
# --silent \
19
+
# --show-error \
20
+
# --request POST \
21
+
# --header "Content-Type: application/json" \
22
+
# --user "admin:${PDS_ADMIN_PASSWORD}" \
23
+
# --data '{"useCount": 1}' \
24
+
# "https://${PDS_HOSTNAME}/xrpc/com.atproto.server.createInviteCode"
25
25
26
26
# delete an account
27
27
# curl \
···
32
32
# --header "Content-Type: application/json" \
33
33
# --user "admin:${PDS_ADMIN_PASSWORD}" \
34
34
# --data "{\"did\": \"${DID}\"}" \
35
-
# "https://${PDS_HOST}/xrpc/com.atproto.admin.deleteAccount"
35
+
# "https://${PDS_HOSTNAME}/xrpc/com.atproto.admin.deleteAccount"
+3
-2
src/components/AltTextButton.tsx
+3
-2
src/components/AltTextButton.tsx
···
2
2
3
3
export function AltTextButton({ photoUri }: Readonly<{ photoUri: string }>) {
4
4
return (
5
-
<div
5
+
<button
6
+
type="button"
6
7
class="bg-zinc-950 dark:bg-zinc-950 py-[1px] px-[3px] absolute top-2 left-2 cursor-pointer flex items-center justify-center text-xs text-white font-semibold z-10"
7
8
hx-get={`/dialogs/photo/${new AtUri(photoUri).rkey}/alt`}
8
9
hx-trigger="click"
···
11
12
_="on click halt"
12
13
>
13
14
<i class="fas fa-plus text-[10px] mr-1"></i> ALT
14
-
</div>
15
+
</button>
15
16
);
16
17
}
+41
src/components/DefaultLabelerAvatar.tsx
+41
src/components/DefaultLabelerAvatar.tsx
···
1
+
type DefaultLabelerAvatarProps = Readonly<{
2
+
size?: number;
3
+
backgroundColor?: string;
4
+
foregroundColor?: string;
5
+
class?: string;
6
+
}>;
7
+
8
+
export function DefaultLabelerAvatar({
9
+
size = 28,
10
+
backgroundColor = "rgb(139 92 246)", // Tailwind purple-500
11
+
foregroundColor = "#fff",
12
+
class: classProp,
13
+
}: DefaultLabelerAvatarProps) {
14
+
return (
15
+
<svg
16
+
width={size}
17
+
height={size}
18
+
viewBox="0 0 512 512"
19
+
class={classProp}
20
+
aria-hidden="true"
21
+
>
22
+
{/* Square background */}
23
+
<rect
24
+
x="0"
25
+
y="0"
26
+
width="512"
27
+
height="512"
28
+
rx="64"
29
+
fill={backgroundColor}
30
+
/>
31
+
32
+
{/* Shield icon (perfectly centered) */}
33
+
<g transform="translate(256, 280) scale(0.7) translate(-256, -256)">
34
+
<path
35
+
fill={foregroundColor}
36
+
d="M466.5 83.7 263.1 5.1c-5.9-2.2-12.3-2.2-18.2 0L45.5 83.7C36.6 87 30 95.7 30 105.3c0 198.6 114.6 289.7 221.2 325.7 4.5 1.5 9.3 1.5 13.8 0C367.4 395 482 303.9 482 105.3c0-9.6-6.6-18.3-15.5-21.6z"
37
+
/>
38
+
</g>
39
+
</svg>
40
+
);
41
+
}
+76
src/components/ExifInfoDialog.tsx
+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
+
}
+28
-20
src/components/GalleryPage.tsx
+28
-20
src/components/GalleryPage.tsx
···
4
4
import { AtUri } from "@atproto/syntax";
5
5
import { WithBffMeta } from "@bigmoves/bff";
6
6
import { Button } from "@bigmoves/bff/components";
7
+
import { ModerationDecsion } from "../lib/moderation.ts";
7
8
import { FavoriteButton } from "./FavoriteButton.tsx";
8
9
import { GalleryInfo } from "./GalleryInfo.tsx";
9
10
import { GalleryLayout } from "./GalleryLayout.tsx";
11
+
import { ModerationWrapper } from "./ModerationWrapper.tsx";
10
12
import { ShareGalleryButton } from "./ShareGalleryButton.tsx";
11
13
12
14
export function GalleryPage({
13
15
gallery,
14
16
favs = [],
15
17
currentUserDid,
18
+
modDecision,
16
19
}: Readonly<{
17
20
gallery: GalleryView;
18
21
favs: WithBffMeta<Favorite>[];
19
22
currentUserDid?: string;
23
+
modDecision?: ModerationDecsion;
20
24
}>) {
21
25
const isCreator = currentUserDid === gallery.creator.did;
22
26
const isLoggedIn = !!currentUserDid;
···
77
81
)
78
82
: null}
79
83
</div>
80
-
<GalleryLayout
81
-
layoutButtons={
82
-
<>
83
-
<GalleryLayout.ModeButton mode="justified" />
84
-
<GalleryLayout.ModeButton mode="masonry" />
85
-
</>
86
-
}
87
-
>
88
-
<GalleryLayout.Container>
89
-
{galleryItems?.length
90
-
? galleryItems.map((photo) => (
91
-
<GalleryLayout.Item
92
-
key={photo.cid}
93
-
photo={photo}
94
-
gallery={gallery}
95
-
/>
96
-
))
97
-
: null}
98
-
</GalleryLayout.Container>
99
-
</GalleryLayout>
84
+
{
85
+
<ModerationWrapper moderationDecision={modDecision} class="mb-2">
86
+
<GalleryLayout
87
+
layoutButtons={
88
+
<>
89
+
<GalleryLayout.ModeButton mode="justified" />
90
+
<GalleryLayout.ModeButton mode="masonry" />
91
+
</>
92
+
}
93
+
>
94
+
<GalleryLayout.Container>
95
+
{galleryItems?.length
96
+
? galleryItems.map((photo) => (
97
+
<GalleryLayout.Item
98
+
key={photo.cid}
99
+
photo={photo}
100
+
gallery={gallery}
101
+
/>
102
+
))
103
+
: null}
104
+
</GalleryLayout.Container>
105
+
</GalleryLayout>
106
+
</ModerationWrapper>
107
+
}
100
108
</div>
101
109
);
102
110
}
+1
-1
src/components/GalleryPreviewLink.tsx
+1
-1
src/components/GalleryPreviewLink.tsx
+17
src/components/LabelDefinitionButton.tsx
+17
src/components/LabelDefinitionButton.tsx
···
1
+
export function LabelDefinitionButton(
2
+
{ src, val }: Readonly<{ src: string; val: string }>,
3
+
) {
4
+
return (
5
+
<button
6
+
type="button"
7
+
class="text-sky-500 hover:underline cursor-pointer"
8
+
hx-get={`/dialogs/label/${src}/${val}`}
9
+
hx-trigger="click"
10
+
hx-target="#layout"
11
+
hx-swap="afterbegin"
12
+
_="on click halt"
13
+
>
14
+
Learn more
15
+
</button>
16
+
);
17
+
}
+33
src/components/LabelDefinitionDialog.tsx
+33
src/components/LabelDefinitionDialog.tsx
···
1
+
import { LabelValueDefinition } from "$lexicon/types/com/atproto/label/defs.ts";
2
+
import { Dialog } from "@bigmoves/bff/components";
3
+
import { profileLink } from "../utils.ts";
4
+
5
+
export function LabelDefinitionDialog({
6
+
labelValueDefinition,
7
+
labelByHandle,
8
+
}: Readonly<{
9
+
labelValueDefinition: LabelValueDefinition;
10
+
labelByHandle: string;
11
+
}>) {
12
+
const enLocale = labelValueDefinition.locales?.find(
13
+
(locale) => locale.lang === "en",
14
+
);
15
+
return (
16
+
<Dialog id="mod-decision-dialog" class="z-100">
17
+
<Dialog.Content class="dark:bg-zinc-950 relative gap-2">
18
+
<Dialog.X class="fill-zinc-950 dark:fill-zinc-50" />
19
+
<Dialog.Title>{enLocale?.name}</Dialog.Title>
20
+
<p>{enLocale?.description}</p>
21
+
<p>
22
+
Source:{" "}
23
+
<a
24
+
href={profileLink(labelByHandle)}
25
+
class="text-sky-500 hover:underline"
26
+
>
27
+
@{labelByHandle}
28
+
</a>
29
+
</p>
30
+
</Dialog.Content>
31
+
</Dialog>
32
+
);
33
+
}
+26
src/components/LabelerAvatar.tsx
+26
src/components/LabelerAvatar.tsx
···
1
+
import { ProfileView } from "$lexicon/types/social/grain/actor/defs.ts";
2
+
import { Un$Typed } from "$lexicon/util.ts";
3
+
import { cn } from "@bigmoves/bff/components";
4
+
import { DefaultLabelerAvatar } from "./DefaultLabelerAvatar.tsx";
5
+
6
+
export function LabelerAvatar({
7
+
profile,
8
+
size,
9
+
class: classProp,
10
+
}: Readonly<
11
+
{ profile: Un$Typed<ProfileView>; size?: number; class?: string }
12
+
>) {
13
+
return (
14
+
profile.avatar
15
+
? (
16
+
<img
17
+
src={profile.avatar}
18
+
alt={profile.handle}
19
+
title={profile.handle}
20
+
class={cn("rounded-full object-cover", classProp)}
21
+
style={size ? { width: size, height: size } : undefined}
22
+
/>
23
+
)
24
+
: <DefaultLabelerAvatar size={size} class={classProp} />
25
+
);
26
+
}
+82
src/components/ModerationWrapper.tsx
+82
src/components/ModerationWrapper.tsx
···
1
+
import { ComponentChildren } from "preact";
2
+
import { ModerationDecsion } from "../lib/moderation.ts";
3
+
import { LabelDefinitionButton } from "./LabelDefinitionButton.tsx";
4
+
5
+
type ModerationWrapperProps = Readonly<{
6
+
class?: string;
7
+
moderationDecision?: ModerationDecsion;
8
+
children: ComponentChildren;
9
+
}>;
10
+
11
+
export function ModerationWrapper({
12
+
class: classProp,
13
+
moderationDecision,
14
+
children,
15
+
}: ModerationWrapperProps) {
16
+
const id = crypto.randomUUID();
17
+
return (
18
+
moderationDecision
19
+
? (
20
+
moderationDecision.isMe
21
+
? (
22
+
<div>
23
+
<button
24
+
type="button"
25
+
hx-get={`/dialogs/label/${moderationDecision.src}/${moderationDecision.val}`}
26
+
hx-trigger="click"
27
+
hx-target="#layout"
28
+
hx-swap="afterbegin"
29
+
_="on click halt"
30
+
class="flex items-center gap-2 bg-zinc-200 dark:bg-zinc-800 p-2 text-sm mb-2"
31
+
>
32
+
<i class="fa fa-circle-info text-zinc-500" />
33
+
A label has been placed on this gallery
34
+
</button>
35
+
{children}
36
+
</div>
37
+
)
38
+
: (
39
+
<div
40
+
id={`moderation-wrapper-${id}`}
41
+
data-state="closed"
42
+
class={classProp}
43
+
>
44
+
<div class="bg-zinc-200 dark:bg-zinc-800 p-4 w-full">
45
+
<div class="flex items-center justify-between gap-2 w-full">
46
+
<div class="flex items-center gap-2">
47
+
<i class="fa fa-circle-info text-zinc-500"></i>
48
+
<span class="text-sm">{moderationDecision?.name}</span>
49
+
</div>
50
+
<button
51
+
type="button"
52
+
class="text-sm font-semibold cursor-pointer"
53
+
_={`
54
+
on click
55
+
toggle .hidden on #mod-content-${id}
56
+
if my innerText is 'Show'
57
+
put 'Hide' into me
58
+
then put 'open' into @data-state of #moderation-wrapper-${id}
59
+
else
60
+
put 'Show' into me
61
+
then put 'closed' into @data-state of #moderation-wrapper-${id}`}
62
+
>
63
+
Show
64
+
</button>
65
+
</div>
66
+
</div>
67
+
<div class="text-sm my-2">
68
+
Labeled by @{moderationDecision?.labeledBy || "unknown"}.{" "}
69
+
<LabelDefinitionButton
70
+
src={moderationDecision.src}
71
+
val={moderationDecision.val}
72
+
/>
73
+
</div>
74
+
<div id={`mod-content-${id}`} class="hidden">
75
+
{children}
76
+
</div>
77
+
</div>
78
+
)
79
+
)
80
+
: children
81
+
);
82
+
}
+1
-2
src/components/PhotoDialog.tsx
+1
-2
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
3
import { AtUri } from "@atproto/syntax";
4
-
import { Dialog } from "https://jsr.io/@bigmoves/bff/0.3.0-beta.21/components/Dialog.tsx";
5
-
import { cn } from "../../../bff/packages/bff/components/utils.ts";
4
+
import { cn, Dialog } from "@bigmoves/bff/components";
6
5
import { photoDialogLink } from "../utils.ts";
7
6
8
7
export function PhotoDialog({
+9
-10
src/components/PhotoExifDialog.tsx
+9
-10
src/components/PhotoExifDialog.tsx
···
7
7
}: Readonly<{
8
8
photo: PhotoView;
9
9
}>) {
10
-
console.log(getOrderedExifData(photo));
11
10
return (
12
11
<Dialog id="photo-alt-dialog" class="z-100">
13
12
<Dialog.Content class="dark:bg-zinc-950 relative">
···
21
20
/>
22
21
</div>
23
22
{photo.exif && (
24
-
<div className="mt-4 text-sm">
25
-
<dl className="grid grid-cols-2 gap-x-4 gap-y-2">
26
-
{getOrderedExifData(photo).map(({ displayKey, value }) => (
27
-
<>
28
-
<dt className="font-medium text-right">{displayKey}:</dt>
29
-
<dd className="text-left">{String(value)}</dd>
30
-
</>
31
-
))}
32
-
</dl>
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
+
))}
33
32
</div>
34
33
)}
35
34
</Dialog.Content>
+7
-2
src/components/PhotoPreview.tsx
+7
-2
src/components/PhotoPreview.tsx
···
9
9
}: Readonly<{
10
10
photo: Un$Typed<PhotoView>;
11
11
}>) {
12
+
const rkey = new AtUri(photo.uri).rkey;
12
13
return (
13
-
<div class="relative aspect-square bg-zinc-200 dark:bg-zinc-900">
14
+
<div
15
+
class="relative aspect-square bg-zinc-200 dark:bg-zinc-900"
16
+
id={rkey}
17
+
>
14
18
{photo.uri ? <AltTextButton photoUri={photo.uri} /> : null}
15
19
{photo.exif ? <PhotoExifButton photoUri={photo.uri} /> : null}
16
20
{photo.uri
17
21
? (
18
22
<button
19
23
type="button"
20
-
hx-delete={`/actions/photo/${new AtUri(photo.uri).rkey}`}
24
+
id={`delete-photo-${rkey}`}
25
+
hx-delete={`/actions/photo/${rkey}`}
21
26
class="bg-zinc-950 z-10 absolute top-2 right-2 cursor-pointer size-4 flex items-center justify-center"
22
27
_="on htmx:afterOnLoad remove me.parentNode"
23
28
>
+239
-141
src/components/ProfilePage.tsx
+239
-141
src/components/ProfilePage.tsx
···
1
+
import { LabelValueDefinition } from "$lexicon/types/com/atproto/label/defs.ts";
1
2
import { ProfileView } from "$lexicon/types/social/grain/actor/defs.ts";
2
3
import { Record as Gallery } from "$lexicon/types/social/grain/gallery.ts";
3
4
import { GalleryView } from "$lexicon/types/social/grain/gallery/defs.ts";
4
5
import { isPhotoView } from "$lexicon/types/social/grain/photo/defs.ts";
5
6
import { Un$Typed } from "$lexicon/util.ts";
6
7
import { AtUri } from "@atproto/syntax";
8
+
import { LabelerPolicies } from "@bigmoves/bff";
7
9
import { Button, cn } from "@bigmoves/bff/components";
8
10
import { getGalleryCameras } from "../lib/gallery.ts";
11
+
import {
12
+
atprotoLabelValueDefinitions,
13
+
ModerationDecsion,
14
+
} from "../lib/moderation.ts";
9
15
import type { SocialNetwork } from "../lib/timeline.ts";
10
16
import {
11
17
bskyProfileLink,
···
18
24
import { AvatarButton } from "./AvatarButton.tsx";
19
25
import { CameraBadges } from "./CameraBadges.tsx";
20
26
import { FollowButton } from "./FollowButton.tsx";
27
+
import { LabelDefinitionButton } from "./LabelDefinitionButton.tsx";
28
+
import { LabelerAvatar } from "./LabelerAvatar.tsx";
21
29
22
-
export type ProfileTabs = "favs" | "galleries";
30
+
export type ProfileTabs = "favs" | "galleries" | "labels";
23
31
24
32
export function ProfilePage({
25
33
followUri,
···
31
39
selectedTab,
32
40
galleries,
33
41
galleryFavs,
42
+
galleryModDecisionsMap = new Map(),
43
+
isLabeler,
44
+
labelerDefinitions,
34
45
}: Readonly<{
35
46
followUri?: string;
36
47
followersCount?: number;
···
42
53
selectedTab?: ProfileTabs;
43
54
galleries?: GalleryView[];
44
55
galleryFavs?: GalleryView[];
56
+
galleryModDecisionsMap?: Map<string, ModerationDecsion>;
57
+
isLabeler?: boolean;
58
+
labelerDefinitions?: LabelerPolicies;
45
59
}>) {
46
60
const isCreator = loggedInUserDid === profile.did;
47
61
const displayName = profile.displayName || profile.handle;
···
52
66
<div class="px-4 mb-4" id="profile-page">
53
67
<div class="flex flex-col sm:flex-row sm:items-center sm:justify-between my-4">
54
68
<div class="flex flex-col mb-4">
55
-
<AvatarButton profile={profile} />
69
+
{isLabeler
70
+
? <LabelerAvatar profile={profile} size={64} />
71
+
: <AvatarButton profile={profile} />}
56
72
<p class="text-2xl font-bold">{displayName}</p>
57
73
<p class="text-zinc-600 dark:text-zinc-500">@{profile.handle}</p>
58
-
<p class="space-x-1">
59
-
<a href={followersLink(profile.handle)}>
60
-
<span class="font-semibold" id="followers-count">
61
-
{followersCount ?? 0}
62
-
</span>{" "}
63
-
<span class="text-zinc-600 dark:text-zinc-500">followers</span>
64
-
</a>{" "}
65
-
<a href={followingLink(profile.handle)}>
66
-
<span class="font-semibold" id="following-count">
67
-
{followingCount ?? 0}
68
-
</span>{" "}
69
-
<span class="text-zinc-600 dark:text-zinc-500">following</span>
70
-
</a>{" "}
71
-
<span class="font-semibold">{galleries?.length ?? 0}</span>
72
-
<span class="text-zinc-600 dark:text-zinc-500">galleries</span>
73
-
</p>
74
-
<CameraBadges cameras={cameras} class="mt-2" />
74
+
{!isLabeler && (
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
+
</>
98
+
)}
75
99
{profile.description
76
100
? <p class="mt-2 sm:max-w-[500px]">{profile.description}</p>
77
101
: null}
···
87
111
)}
88
112
</p>
89
113
</div>
90
-
{!isCreator && loggedInUserDid
114
+
{!isCreator && !isLabeler && loggedInUserDid
91
115
? (
92
116
<div class="flex self-start gap-2 w-full sm:w-fit flex-col sm:flex-row">
93
117
<FollowButton
···
139
163
role="tablist"
140
164
style={{ WebkitOverflowScrolling: "touch" }}
141
165
>
142
-
<button
143
-
type="button"
144
-
name="tab"
145
-
value="galleries"
146
-
hx-get={profileLink(profile.handle)}
147
-
hx-target="#profile-page"
148
-
hx-swap="outerHTML"
149
-
class={cn(
150
-
"flex-1 min-w-[120px] py-2 px-4 cursor-pointer font-semibold",
151
-
selectedTab === "galleries" && "bg-zinc-100 dark:bg-zinc-800",
166
+
{isLabeler
167
+
? (
168
+
<button
169
+
type="button"
170
+
name="tab"
171
+
value="favs"
172
+
hx-get={profileLink(profile.handle)}
173
+
hx-target="#profile-page"
174
+
hx-swap="outerHTML"
175
+
class={cn(
176
+
"flex-1 min-w-[120px] py-2 px-4 cursor-pointer font-semibold",
177
+
selectedTab === "labels" && "bg-zinc-100 dark:bg-zinc-800",
178
+
)}
179
+
role="tab"
180
+
aria-selected={selectedTab === "labels"}
181
+
aria-controls="tab-content"
182
+
>
183
+
Labels
184
+
</button>
185
+
)
186
+
: (
187
+
<button
188
+
type="button"
189
+
name="tab"
190
+
value="galleries"
191
+
hx-get={profileLink(profile.handle)}
192
+
hx-target="#profile-page"
193
+
hx-swap="outerHTML"
194
+
class={cn(
195
+
"flex-1 min-w-[120px] py-2 px-4 cursor-pointer font-semibold",
196
+
selectedTab === "galleries" && "bg-zinc-100 dark:bg-zinc-800",
197
+
)}
198
+
role="tab"
199
+
aria-selected={selectedTab === "galleries"}
200
+
aria-controls="tab-content"
201
+
>
202
+
Galleries
203
+
</button>
152
204
)}
153
-
role="tab"
154
-
aria-selected={selectedTab === "galleries"}
155
-
aria-controls="tab-content"
156
-
>
157
-
Galleries
158
-
</button>
205
+
159
206
{isCreator && (
160
207
<button
161
208
type="button"
···
175
222
Favs
176
223
</button>
177
224
)}
178
-
{
179
-
/* <button
180
-
type="button"
181
-
hx-get={profileLink(profile.handle)}
182
-
hx-target="body"
183
-
hx-swap="outerHTML"
184
-
class={cn(
185
-
"flex-1 min-w-[120px] py-2 px-4 cursor-pointer font-semibold",
186
-
!selectedTab && "bg-zinc-100 dark:bg-zinc-800 font-semibold",
187
-
)}
188
-
role="tab"
189
-
aria-selected={!selectedTab}
190
-
aria-controls="tab-content"
191
-
hx-push-url="true"
192
-
>
193
-
Activity
194
-
</button> */
195
-
}
196
225
</div>
197
-
<div id="tab-content" role="tabpanel">
198
-
{selectedTab === "galleries"
199
-
? (
200
-
<div class="grid grid-cols-1 sm:grid-cols-3 gap-2 mb-4">
201
-
{galleries?.length
202
-
? (
203
-
galleries.map((gallery) => (
204
-
<a
205
-
href={galleryLink(
206
-
gallery.creator.handle,
207
-
new AtUri(gallery.uri).rkey,
208
-
)}
209
-
class="cursor-pointer relative aspect-square"
210
-
>
211
-
{gallery.items?.length
212
-
? (
213
-
<img
214
-
src={gallery.items?.filter(isPhotoView)?.[0]
215
-
?.fullsize}
216
-
alt={gallery.items?.filter(isPhotoView)?.[0]?.alt}
217
-
class="w-full h-full object-cover"
218
-
/>
219
-
)
220
-
: (
221
-
<div class="w-full h-full bg-zinc-200 dark:bg-zinc-900" />
222
-
)}
223
-
<div class="absolute bottom-0 left-0 bg-black/80 text-white p-2">
224
-
{(gallery.record as Gallery).title}
225
-
</div>
226
-
</a>
227
-
))
228
-
)
229
-
: <p>No galleries yet.</p>}
230
-
</div>
231
-
)
232
-
: null}
233
-
{selectedTab === "favs"
234
-
? (
235
-
<div class="grid grid-cols-1 sm:grid-cols-3 gap-2 mb-4">
236
-
{galleryFavs?.length
237
-
? (
238
-
galleryFavs.map((gallery) => (
239
-
<a
240
-
href={galleryLink(
241
-
gallery.creator.handle,
242
-
new AtUri(gallery.uri).rkey,
243
-
)}
244
-
class="cursor-pointer relative aspect-square"
245
-
>
246
-
{gallery.items?.length
247
-
? (
248
-
<img
249
-
src={gallery.items?.filter(isPhotoView)?.[0]
250
-
?.fullsize}
251
-
alt={gallery.items?.filter(isPhotoView)?.[0]?.alt}
252
-
class="w-full h-full object-cover"
253
-
/>
254
-
)
255
-
: (
256
-
<div class="w-full h-full bg-zinc-200 dark:bg-zinc-900" />
257
-
)}
258
-
<div class="absolute bottom-0 left-0 bg-black/80 text-white p-2 flex items-center gap-2">
259
-
<ActorAvatar profile={gallery.creator} size={20} />{" "}
260
-
{(gallery.record as Gallery).title}
261
-
</div>
262
-
</a>
263
-
))
264
-
)
265
-
: <p>No favs yet.</p>}
226
+
{selectedTab === "labels" && labelerDefinitions
227
+
? <LabelerPoliciesList defs={labelerDefinitions} />
228
+
: null}
229
+
{selectedTab === "galleries"
230
+
? (
231
+
<div class="grid grid-cols-1 sm:grid-cols-3 gap-2 mb-4">
232
+
{galleries?.length
233
+
? (
234
+
galleries.map((gallery) => (
235
+
<GalleryItem
236
+
key={gallery.uri}
237
+
gallery={gallery}
238
+
galleryModDecisionsMap={galleryModDecisionsMap}
239
+
/>
240
+
))
241
+
)
242
+
: <p>No galleries yet.</p>}
243
+
</div>
244
+
)
245
+
: null}
246
+
{selectedTab === "favs"
247
+
? (
248
+
<div class="grid grid-cols-1 sm:grid-cols-3 gap-2 mb-4">
249
+
{galleryFavs?.length
250
+
? (
251
+
galleryFavs.map((gallery) => (
252
+
<GalleryFavItem
253
+
key={gallery.uri}
254
+
gallery={gallery}
255
+
galleryModDecisionsMap={galleryModDecisionsMap}
256
+
/>
257
+
))
258
+
)
259
+
: <p>No favs yet.</p>}
260
+
</div>
261
+
)
262
+
: null}
263
+
</div>
264
+
);
265
+
}
266
+
267
+
function LabelerPoliciesList({ defs }: Readonly<{ defs: LabelerPolicies }>) {
268
+
if (!defs?.labelValues?.length) return <p>No labels yet.</p>;
269
+
return (
270
+
<ul class="space-y-4 relative divide-zinc-200 dark:divide-zinc-800 divide-y">
271
+
{defs?.labelValues?.map((val) => {
272
+
let def = defs?.labelValueDefinitions?.find((def) =>
273
+
def.identifier === val
274
+
);
275
+
// Fallback to atproto definitions if not found
276
+
def ??= atprotoLabelValueDefinitions[val];
277
+
if (!def) return null;
278
+
return <LabelValueDefinitionListItem key={def.identifier} def={def} />;
279
+
})}
280
+
</ul>
281
+
);
282
+
}
283
+
284
+
function LabelValueDefinitionListItem({
285
+
def,
286
+
}: Readonly<{ def: LabelValueDefinition }>) {
287
+
const enLocale = def.locales.find((v) => v.lang === "en");
288
+
return (
289
+
<li class="flex flex-col pb-4 gap-2">
290
+
<div class="font-semibold">{enLocale?.name}</div>
291
+
<div>{enLocale?.description}</div>
292
+
{def.adultOnly
293
+
? (
294
+
<div class="flex items-center gap-2 text-sm">
295
+
<i class="fa fa-info-circle" />{" "}
296
+
<span>Adult content is disabled.</span>
297
+
</div>
298
+
)
299
+
: null}
300
+
<div class="text-sm">
301
+
Default setting:{" "}
302
+
<span class="font-semibold">
303
+
{def.defaultSetting || "No default value set"}
304
+
</span>
305
+
</div>
306
+
</li>
307
+
);
308
+
}
309
+
310
+
function GalleryItem({
311
+
gallery,
312
+
galleryModDecisionsMap,
313
+
}: Readonly<{
314
+
gallery: GalleryView;
315
+
galleryModDecisionsMap: Map<string, ModerationDecsion>;
316
+
}>) {
317
+
const modDecision = galleryModDecisionsMap.get(gallery.uri);
318
+
return (
319
+
<a
320
+
href={galleryLink(
321
+
gallery.creator.handle,
322
+
new AtUri(gallery.uri).rkey,
323
+
)}
324
+
class="cursor-pointer relative aspect-square"
325
+
>
326
+
{modDecision && !modDecision.isMe
327
+
? (
328
+
<div class="w-full h-full bg-zinc-200 dark:bg-zinc-900 p-2 text-sm">
329
+
<i class="fa fa-circle-info text-zinc-500"></i> {modDecision.name}
330
+
<div class="text-sm">
331
+
Labeled by @{modDecision?.labeledBy || "unknown"}.{" "}
332
+
<LabelDefinitionButton
333
+
src={modDecision.src}
334
+
val={modDecision.val}
335
+
/>
266
336
</div>
267
-
)
268
-
: null}
269
-
{
270
-
/* {!selectedTab
271
-
? (
272
-
<ul class="space-y-4 relative divide-zinc-200 dark:divide-zinc-800 divide-y w-fit">
273
-
{timelineItems.length
274
-
? (
275
-
timelineItems.map((item) => (
276
-
<Item item={item} key={item.itemUri} />
277
-
))
278
-
)
279
-
: <li>No activity yet.</li>}
280
-
</ul>
281
-
)
282
-
: null} */
283
-
}
337
+
</div>
338
+
)
339
+
: gallery.items?.length
340
+
? (
341
+
<img
342
+
src={gallery.items?.filter(isPhotoView)?.[0]?.fullsize}
343
+
alt={gallery.items?.filter(isPhotoView)?.[0]?.alt}
344
+
class="w-full h-full object-cover"
345
+
/>
346
+
)
347
+
: <div class="w-full h-full bg-zinc-200 dark:bg-zinc-900" />}
348
+
<div class="absolute bottom-0 left-0 bg-black/80 text-white p-2 flex items-center gap-2">
349
+
{(gallery.record as Gallery).title}
350
+
</div>
351
+
</a>
352
+
);
353
+
}
354
+
355
+
function GalleryFavItem({
356
+
gallery,
357
+
galleryModDecisionsMap,
358
+
}: Readonly<{
359
+
gallery: GalleryView;
360
+
galleryModDecisionsMap: Map<string, ModerationDecsion>;
361
+
}>) {
362
+
return (
363
+
<a
364
+
href={galleryLink(
365
+
gallery.creator.handle,
366
+
new AtUri(gallery.uri).rkey,
367
+
)}
368
+
class="cursor-pointer relative aspect-square"
369
+
>
370
+
{gallery.items?.length
371
+
? (
372
+
<img
373
+
src={gallery.items?.filter(isPhotoView)?.[0]?.fullsize}
374
+
alt={gallery.items?.filter(isPhotoView)?.[0]?.alt}
375
+
class="w-full h-full object-cover"
376
+
/>
377
+
)
378
+
: <div class="w-full h-full bg-zinc-200 dark:bg-zinc-900" />}
379
+
<div class="absolute bottom-0 left-0 bg-black/80 text-white p-2 flex items-center gap-2">
380
+
<ActorAvatar profile={gallery.creator} size={20} />{" "}
381
+
{(gallery.record as Gallery).title}
284
382
</div>
285
-
</div>
383
+
</a>
286
384
);
287
385
}
+1
-1
src/components/Timeline.tsx
+1
-1
src/components/Timeline.tsx
···
93
93
</form>
94
94
)
95
95
: null}
96
-
<ul class="space-y-4 relative divide-zinc-200 dark:divide-zinc-800 divide-y w-fit">
96
+
<ul class="space-y-4 relative divide-zinc-200 dark:divide-zinc-800 divide-y sm:w-fit">
97
97
{items.length > 0
98
98
? items.map((item) => <Item item={item} key={item.itemUri} />)
99
99
: (
+11
-5
src/components/TimelineItem.tsx
+11
-5
src/components/TimelineItem.tsx
···
5
5
import { formatRelativeTime, galleryLink } from "../utils.ts";
6
6
import { ActorInfo } from "./ActorInfo.tsx";
7
7
import { GalleryPreviewLink } from "./GalleryPreviewLink.tsx";
8
+
import { ModerationWrapper } from "./ModerationWrapper.tsx";
8
9
9
10
export function TimelineItem({ item }: Readonly<{ item: TimelineItem }>) {
10
11
return (
11
12
<li>
12
-
<div class="w-fit flex flex-col gap-4 pb-4">
13
+
<div class="flex flex-col gap-4 pb-4 max-w-md">
13
14
<div class="flex items-center justify-between gap-2 w-full">
14
15
<ActorInfo profile={item.actor} />
15
16
<span class="shrink-0">
···
18
19
</div>
19
20
{item.gallery.items?.filter(isPhotoView).length
20
21
? (
21
-
<GalleryPreviewLink
22
-
gallery={item.gallery}
23
-
/>
22
+
<ModerationWrapper
23
+
moderationDecision={item.modDecision}
24
+
class="gap-2 sm:min-w-md"
25
+
>
26
+
<GalleryPreviewLink
27
+
gallery={item.gallery}
28
+
/>
29
+
</ModerationWrapper>
24
30
)
25
31
: null}
26
32
<p class="w-full flex items-baseline gap-1">
27
-
{item.itemType === "favorite" ? "Favorited" : "Created"}{" "}
33
+
Created{" "}
28
34
<a
29
35
href={galleryLink(
30
36
item.gallery.creator.handle,
+9
src/components/UploadPage.tsx
+9
src/components/UploadPage.tsx
···
59
59
checked
60
60
/>
61
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>
62
71
</label>
63
72
</form>
64
73
<div
+8
-10
src/legal.tsx
+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>
+19
-1
src/lib/actor.ts
+19
-1
src/lib/actor.ts
···
1
1
import { Record as BskyProfile } from "$lexicon/types/app/bsky/actor/profile.ts";
2
+
import { Label } from "$lexicon/types/com/atproto/label/defs.ts";
2
3
import { Record as TangledProfile } from "$lexicon/types/sh/tangled/actor/profile.ts";
3
4
import { ProfileView } from "$lexicon/types/social/grain/actor/defs.ts";
4
5
import { Record as GrainProfile } from "$lexicon/types/social/grain/actor/profile.ts";
···
90
91
91
92
const galleryPhotosMap = getGalleryItemsAndPhotos(ctx, galleries);
92
93
const creator = getActorProfile(did, ctx);
94
+
const labelMap = new Map<string, Label[]>();
95
+
for (const gallery of galleries) {
96
+
const labels = ctx.indexService.queryLabels({ subjects: [gallery.uri] });
97
+
labelMap.set(gallery.uri, labels);
98
+
}
93
99
94
100
if (!creator) return [];
95
101
96
102
return galleries.map((gallery) =>
97
-
galleryToView(gallery, creator, galleryPhotosMap.get(gallery.uri) ?? [])
103
+
galleryToView(
104
+
gallery,
105
+
creator,
106
+
galleryPhotosMap.get(gallery.uri) ?? [],
107
+
labelMap.get(gallery.uri) ?? [],
108
+
)
98
109
);
99
110
}
100
111
···
140
151
new Set(galleries.map((gallery) => gallery.did)),
141
152
);
142
153
154
+
const labelMap = new Map<string, Label[]>();
155
+
for (const gallery of galleries) {
156
+
const labels = ctx.indexService.queryLabels({ subjects: [gallery.uri] });
157
+
labelMap.set(gallery.uri, labels);
158
+
}
159
+
143
160
const { items: profiles } = ctx.indexService.getRecords<
144
161
WithBffMeta<GrainProfile>
145
162
>(
···
165
182
gallery,
166
183
creator,
167
184
galleryPhotosMap.get(gallery.uri) ?? [],
185
+
labelMap.get(gallery.uri) ?? [],
168
186
);
169
187
})
170
188
.filter((g) => g !== null);
+8
-6
src/lib/gallery.ts
+8
-6
src/lib/gallery.ts
···
1
+
import { Label } from "$lexicon/types/com/atproto/label/defs.ts";
1
2
import { ProfileView } from "$lexicon/types/social/grain/actor/defs.ts";
2
3
import { Record as Favorite } from "$lexicon/types/social/grain/favorite.ts";
3
4
import { Record as Gallery } from "$lexicon/types/social/grain/gallery.ts";
···
102
103
const galleryPhotosMap = getGalleryItemsAndPhotos(ctx, [gallery]);
103
104
const profile = getActorProfile(did, ctx);
104
105
if (!profile) return null;
106
+
const labels = ctx.indexService.queryLabels({
107
+
subjects: [gallery.uri],
108
+
});
105
109
return galleryToView(
106
110
gallery,
107
111
profile,
108
112
galleryPhotosMap.get(gallery.uri) ?? [],
113
+
labels,
109
114
);
110
115
}
111
116
···
150
155
record: WithBffMeta<Gallery>,
151
156
creator: Un$Typed<ProfileView>,
152
157
items: PhotoWithExif[],
158
+
labels: Label[] = [],
153
159
): Un$Typed<GalleryView> {
154
160
return {
155
161
uri: record.uri,
···
159
165
items: items
160
166
?.map((item) => itemToView(record.did, item))
161
167
.filter(isPhotoView),
168
+
labels,
162
169
indexedAt: record.indexedAt,
163
170
};
164
171
}
···
184
191
const cameras = new Set<string>();
185
192
for (const photo of photos) {
186
193
if (photo.exif?.make) {
187
-
// Capitalize first letter of each word for make only, leave model raw
188
-
const make = photo.exif.make.charAt(0).toUpperCase() +
189
-
photo.exif.make.slice(1).toLowerCase();
190
-
const model = photo.exif.model ?? "";
191
-
console.log(make, model);
192
-
cameras.add(`${make} ${model}`.trim());
194
+
cameras.add(`${photo.exif.make} ${photo.exif.model}`.trim());
193
195
}
194
196
}
195
197
return Array.from(cameras);
+104
src/lib/moderation.ts
+104
src/lib/moderation.ts
···
1
+
import {
2
+
Label,
3
+
LabelValueDefinition,
4
+
} from "$lexicon/types/com/atproto/label/defs.ts";
5
+
import { AtUri } from "@atproto/syntax";
6
+
import { BffContext } from "@bigmoves/bff";
7
+
import { State } from "../state.ts";
8
+
9
+
export type ModerationDecsion = {
10
+
name: string;
11
+
description: string;
12
+
labeledBy: string;
13
+
blurs: string;
14
+
isMe: boolean;
15
+
src: string;
16
+
val: string;
17
+
};
18
+
19
+
export async function moderateGallery(labels: Label[], ctx: BffContext<State>) {
20
+
const did = ctx.currentUser?.did;
21
+
const labelDefinitions = await ctx.getLabelerDefinitions();
22
+
23
+
for (const label of labels ?? []) {
24
+
const labelSubject = new AtUri(label.uri).hostname;
25
+
const labelerAtpData = await ctx.didResolver.resolveAtprotoData(label.src);
26
+
// Try labelDefinitions first, then fallback to atprotoLabelValueDefinitions
27
+
let defs = labelDefinitions[label.src]?.labelValueDefinitions?.filter((
28
+
def,
29
+
) => def.identifier === label.val);
30
+
if (
31
+
(!defs || defs.length === 0) && atprotoLabelValueDefinitions[label.val]
32
+
) {
33
+
defs = [atprotoLabelValueDefinitions[label.val]];
34
+
}
35
+
if (defs && defs.length > 0) {
36
+
const enLocale = defs[0].locales?.find((locale) => locale.lang === "en");
37
+
if (enLocale) {
38
+
return {
39
+
name: enLocale.name,
40
+
description: enLocale.description,
41
+
labeledBy: labelerAtpData.handle ?? label.src,
42
+
blurs: defs[0].blurs ?? "",
43
+
isMe: labelSubject === did,
44
+
src: label.src,
45
+
val: label.val,
46
+
};
47
+
}
48
+
}
49
+
}
50
+
return undefined;
51
+
}
52
+
53
+
export async function isLabeler(did: string, ctx: BffContext<State>) {
54
+
const labelDefinitions = await ctx.getLabelerDefinitions();
55
+
return Object.keys(labelDefinitions).includes(did);
56
+
}
57
+
58
+
export const atprotoLabelValueDefinitions: Record<
59
+
string,
60
+
LabelValueDefinition
61
+
> = {
62
+
porn: {
63
+
blurs: "media",
64
+
severity: "high",
65
+
identifier: "porn",
66
+
adultOnly: true,
67
+
defaultSetting: "hide",
68
+
locales: [
69
+
{
70
+
lang: "en",
71
+
name: "Adult Content",
72
+
description: "Explicit sexual images.",
73
+
},
74
+
],
75
+
},
76
+
sexual: {
77
+
blurs: "media",
78
+
severity: "high",
79
+
identifier: "porn",
80
+
adultOnly: true,
81
+
defaultSetting: "hide",
82
+
locales: [
83
+
{
84
+
lang: "en",
85
+
name: "Sexually Suggestive",
86
+
description: "Does not include nudity.",
87
+
},
88
+
],
89
+
},
90
+
nudity: {
91
+
blurs: "media",
92
+
severity: "high",
93
+
identifier: "porn",
94
+
adultOnly: true,
95
+
defaultSetting: "hide",
96
+
locales: [
97
+
{
98
+
lang: "en",
99
+
name: "Non-sexual Nudity",
100
+
description: "E.g. artistic nudes.",
101
+
},
102
+
],
103
+
},
104
+
};
+11
-2
src/lib/photo.ts
+11
-2
src/lib/photo.ts
···
65
65
const deserializedExif = deserializeExif(exif);
66
66
return {
67
67
...deserializedExif,
68
+
make: deserializedExif.make ? formatMake(deserializedExif.make) : undefined,
68
69
fNumber: deserializedExif.fNumber
69
70
? formatAperture(deserializedExif.fNumber)
70
71
: undefined,
···
82
83
: undefined,
83
84
$type: "social.grain.photo.defs#exifView",
84
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(" ");
85
94
}
86
95
87
96
function formatAperture(fNumber: number): string {
···
156
165
];
157
166
158
167
export function getOrderedExifData(photo: PhotoView) {
159
-
const exif = photo.exif || {};
160
-
const entries = Object.entries(exif)
168
+
if (!photo.exif) return [];
169
+
const entries = Object.entries(photo.exif)
161
170
.filter(([key]) =>
162
171
tagOrder.some((tag) => tag.toLowerCase() === key.toLowerCase())
163
172
)
+20
-9
src/lib/timeline.ts
+20
-9
src/lib/timeline.ts
···
9
9
import { BffContext, QueryOptions, WithBffMeta } from "@bigmoves/bff";
10
10
import { getActorProfile } from "./actor.ts";
11
11
import { galleryToView, getGalleryItemsAndPhotos } from "./gallery.ts";
12
+
import { moderateGallery, ModerationDecsion } from "./moderation.ts";
12
13
13
14
export type TimelineItemType = "gallery";
14
15
···
20
21
itemUri: string;
21
22
actor: Un$Typed<ProfileView>;
22
23
gallery: GalleryView;
24
+
modDecision?: ModerationDecsion;
23
25
};
24
26
25
27
type TimelineOptions = {
···
27
29
followingDids?: Set<string>;
28
30
};
29
31
30
-
function processGalleries(
32
+
async function processGalleries(
31
33
ctx: BffContext,
32
34
options?: TimelineOptions,
33
-
): TimelineItem[] {
35
+
): Promise<TimelineItem[]> {
34
36
const items: TimelineItem[] = [];
35
37
36
38
let whereClause: QueryOptions["where"] = options?.actorDid
···
70
72
new AtUri(gallery.uri).rkey
71
73
}`;
72
74
const galleryPhotos = galleryPhotosMap.get(galleryUri) || [];
75
+
const labels = ctx.indexService.queryLabels({
76
+
subjects: [gallery.uri],
77
+
});
78
+
const galleryView = galleryToView(gallery, profile, galleryPhotos, labels);
79
+
80
+
let modDecision: ModerationDecsion | undefined = undefined;
81
+
if (galleryView.labels?.length) {
82
+
modDecision = await moderateGallery(labels, ctx);
83
+
}
73
84
74
-
const galleryView = galleryToView(gallery, profile, galleryPhotos);
75
85
items.push({
76
86
itemType: "gallery",
77
87
createdAt: gallery.createdAt,
78
88
itemUri: galleryView.uri,
79
89
actor: galleryView.creator,
80
90
gallery: galleryView,
91
+
modDecision,
81
92
});
82
93
}
83
94
84
95
return items;
85
96
}
86
97
87
-
function getTimelineItems(
98
+
async function getTimelineItems(
88
99
ctx: BffContext,
89
100
options?: TimelineOptions,
90
-
): TimelineItem[] {
91
-
const galleryItems = processGalleries(ctx, options);
101
+
): Promise<TimelineItem[]> {
102
+
const galleryItems = await processGalleries(ctx, options);
92
103
return galleryItems.sort(
93
104
(a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime(),
94
105
);
···
114
125
return new Set(follows.map((f) => f.subject).filter(Boolean));
115
126
}
116
127
117
-
export function getTimeline(
128
+
export async function getTimeline(
118
129
ctx: BffContext,
119
130
type: "timeline" | "following",
120
131
graph: SocialNetwork,
121
-
): TimelineItem[] {
132
+
): Promise<TimelineItem[]> {
122
133
let followingDids: Set<string> | undefined = undefined;
123
134
if (type === "following") {
124
135
followingDids = getFollowingDids(graph, ctx);
125
136
}
126
-
const galleryItems = processGalleries(ctx, { followingDids });
137
+
const galleryItems = await processGalleries(ctx, { followingDids });
127
138
return galleryItems.sort(
128
139
(a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime(),
129
140
);
+9
src/main.tsx
+9
src/main.tsx
···
5
5
import { PDS_HOST_URL } from "./env.ts";
6
6
import { onError } from "./lib/errors.ts";
7
7
import * as actionHandlers from "./routes/actions.tsx";
8
+
import { handler as communityGuidelinesHandler } from "./routes/community_guidelines.tsx";
8
9
import * as dialogHandlers from "./routes/dialogs.tsx";
9
10
import { handler as exploreHandler } from "./routes/explore.tsx";
10
11
import { handler as followersHandler } from "./routes/followers.tsx";
···
25
26
26
27
bff({
27
28
appName: "Grain Social",
29
+
appLabelers: ["did:plc:nd45zozo34cr4pvxqu4rtr7e"],
30
+
appLabelerCollection: "social.grain.labeler.service",
28
31
collections: [
29
32
"social.grain.actor.profile",
30
33
"social.grain.gallery",
···
71
74
route("/support/privacy", legalHandlers.privacyHandler),
72
75
route("/support/terms", legalHandlers.termsHandler),
73
76
route("/support/copyright", legalHandlers.copyrightHandler),
77
+
route("/support/community-guidelines", communityGuidelinesHandler),
74
78
route("/dialogs/create-account", dialogHandlers.createAccount),
75
79
route("/dialogs/gallery/new", dialogHandlers.createGallery),
76
80
route("/dialogs/gallery/:rkey", dialogHandlers.editGallery),
77
81
route("/dialogs/gallery/:rkey/sort", dialogHandlers.sortGallery),
82
+
route("/dialogs/label/:src/:val", dialogHandlers.labelValueDefinition),
78
83
route("/dialogs/profile", dialogHandlers.editProfile),
79
84
route("/dialogs/avatar/:handle", dialogHandlers.avatar),
80
85
route("/dialogs/image", dialogHandlers.image),
···
86
91
route(
87
92
"/dialogs/photo/:rkey/exif-overlay",
88
93
dialogHandlers.photoExifOverlay,
94
+
),
95
+
route(
96
+
"/dialogs/exif-info",
97
+
dialogHandlers.exifInfo,
89
98
),
90
99
route(
91
100
"/dialogs/photo-select/:galleryRkey",
+123
src/routes/community_guidelines.tsx
+123
src/routes/community_guidelines.tsx
···
1
+
import { BffContext, RouteHandler } from "@bigmoves/bff";
2
+
import { ComponentChildren } from "preact";
3
+
import { Breadcrumb } from "../components/Breadcrumb.tsx";
4
+
import { State } from "../state.ts";
5
+
6
+
export const handler: RouteHandler = (
7
+
_req,
8
+
_params,
9
+
ctx: BffContext<State>,
10
+
) => {
11
+
ctx.state.meta = [
12
+
{ title: "Community Guidelines — Grain" },
13
+
];
14
+
return ctx.render(
15
+
<div className="px-4 py-4">
16
+
<Breadcrumb
17
+
items={[{ label: "support", href: "/support" }, {
18
+
label: "community guidelines",
19
+
}]}
20
+
/>
21
+
<h1 className="text-3xl font-bold mb-6 text-zinc-900 dark:text-white">
22
+
Community Guidelines
23
+
</h1>
24
+
<Section title="About Grain Social">
25
+
<p>
26
+
Grain Social is a photo-sharing service built on the AT Protocol.
27
+
These guidelines apply specifically to Grain Social. While the
28
+
protocol is decentralized and supports many independent services, our
29
+
focus is on fostering a respectful, creative, and safe experience
30
+
within our app.
31
+
</p>
32
+
</Section>
33
+
34
+
<Section title="Our Principles">
35
+
<ul className="list-disc pl-5 space-y-1">
36
+
<li>
37
+
<strong>User choice</strong>: We are committed to empowering users
38
+
with control over where their data is stored, how their content is
39
+
moderated, and which algorithms power their feeds (hopefully more
40
+
options soon!).
41
+
</li>
42
+
<li>
43
+
<strong>Welcoming space</strong>: We aim to build a friendly,
44
+
inclusive environment where people enjoy sharing and discovering
45
+
photos.
46
+
</li>
47
+
<li>
48
+
<strong>Evolving standards</strong>: Our policies will adapt over
49
+
time based on your feedback and the needs of the community.
50
+
</li>
51
+
</ul>
52
+
</Section>
53
+
54
+
<Section title="What’s Not Allowed">
55
+
<p>
56
+
Don't use Grain Social to break the law, harm others, or disrupt the
57
+
network. Specifically, do not:
58
+
</p>
59
+
<ul className="list-disc pl-5 space-y-1">
60
+
<li>Promote hate groups or terrorism</li>
61
+
<li>
62
+
Share child sexual abuse material or any sexual content involving
63
+
minors
64
+
</li>
65
+
<li>Engage in trafficking, exploitation, or predatory behavior</li>
66
+
<li>Trade illegal goods or substances</li>
67
+
<li>Share private personal info without consent</li>
68
+
<li>Hack, phish, scam, or impersonate others</li>
69
+
<li>Spam, abuse automation, or manipulate engagement</li>
70
+
<li>Violate copyrights or trademarks</li>
71
+
<li>Spread false or misleading election info</li>
72
+
<li>
73
+
Evade moderation actions (e.g., ban evasion) by creating new
74
+
accounts
75
+
</li>
76
+
</ul>
77
+
</Section>
78
+
79
+
<Section title="Respect Others">
80
+
<p>We expect respectful conduct. This includes avoiding:</p>
81
+
<ul className="list-disc pl-5 space-y-1">
82
+
<li>Harassment, bullying, or targeted abuse</li>
83
+
<li>Hate speech or extremist content</li>
84
+
<li>Threats of violence or glorification of harm</li>
85
+
<li>Promotion of self-harm or suicide</li>
86
+
<li>Graphic violence or non-consensual sexual content</li>
87
+
<li>Misleading impersonation of individuals or organizations</li>
88
+
</ul>
89
+
</Section>
90
+
91
+
<Section title="Reporting Violations">
92
+
<p>
93
+
Help us keep the community safe. You can report photos, galleries, or
94
+
accounts directly through the app (soon!) or by contacting us at{" "}
95
+
<a
96
+
href="mailto:support@grain.social"
97
+
className="text-sky-500 underline hover:underline"
98
+
>
99
+
support@grain.social
100
+
</a>
101
+
. Our moderation team will review and take action where needed.
102
+
Reports may consider off-platform context when relevant.
103
+
</p>
104
+
</Section>
105
+
</div>,
106
+
);
107
+
};
108
+
109
+
type SectionProps = {
110
+
title: string;
111
+
children: ComponentChildren;
112
+
};
113
+
114
+
const Section = ({ title, children }: SectionProps) => (
115
+
<section className="mb-8">
116
+
<h2 className="text-xl font-bold mb-2 text-zinc-800 dark:text-zinc-100">
117
+
{title}
118
+
</h2>
119
+
<div className="space-y-2 text-zinc-700 dark:text-zinc-300">
120
+
{children}
121
+
</div>
122
+
</section>
123
+
);
+41
src/routes/dialogs.tsx
+41
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";
10
11
import { ExifOverlayDialog } from "../components/ExifOverlayDialog.tsx";
11
12
import { GalleryCreateEditDialog } from "../components/GalleryCreateEditDialog.tsx";
12
13
import { GallerySortDialog } from "../components/GallerySortDialog.tsx";
14
+
import { LabelDefinitionDialog } from "../components/LabelDefinitionDialog.tsx";
13
15
import { PhotoAltDialog } from "../components/PhotoAltDialog.tsx";
14
16
import { PhotoDialog } from "../components/PhotoDialog.tsx";
15
17
import { PhotoExifDialog } from "../components/PhotoExifDialog.tsx";
···
17
19
import { ProfileDialog } from "../components/ProfileDialog.tsx";
18
20
import { getActorPhotos, getActorProfile } from "../lib/actor.ts";
19
21
import { getGallery, getGalleryItemsAndPhotos } from "../lib/gallery.ts";
22
+
import { atprotoLabelValueDefinitions } from "../lib/moderation.ts";
20
23
import { getPhoto, photoToView } from "../lib/photo.ts";
21
24
import type { State } from "../state.ts";
22
25
···
194
197
) => {
195
198
return ctx.html(<CreateAccountDialog />);
196
199
};
200
+
201
+
export const labelValueDefinition: RouteHandler = async (
202
+
_req,
203
+
params,
204
+
ctx: BffContext<State>,
205
+
) => {
206
+
const src = params.src;
207
+
const val = params.val;
208
+
const labelerDeinitionsMap = await ctx.getLabelerDefinitions();
209
+
if (!labelerDeinitionsMap) return ctx.next();
210
+
const labelValueDefinitions = labelerDeinitionsMap[src]
211
+
?.labelValueDefinitions;
212
+
if (!labelValueDefinitions) return ctx.next();
213
+
214
+
let valDef = labelValueDefinitions.find((def) => def.identifier === val);
215
+
if (!valDef && typeof val === "string") {
216
+
valDef = atprotoLabelValueDefinitions[val];
217
+
}
218
+
219
+
if (!valDef) return ctx.next();
220
+
const labelerAtpData = await ctx.didResolver.resolveAtprotoData(src);
221
+
return ctx.html(
222
+
<LabelDefinitionDialog
223
+
labelByHandle={labelerAtpData?.handle}
224
+
labelValueDefinition={valDef}
225
+
/>,
226
+
);
227
+
};
228
+
229
+
export const exifInfo: RouteHandler = (
230
+
_req,
231
+
_params,
232
+
ctx: BffContext<State>,
233
+
) => {
234
+
return ctx.html(
235
+
<ExifInfoDialog />,
236
+
);
237
+
};
+5
-1
src/routes/explore.tsx
+5
-1
src/routes/explore.tsx
···
5
5
import { Input } from "@bigmoves/bff/components";
6
6
import { ComponentChildren } from "preact";
7
7
import { ActorAvatar } from "../components/ActorAvatar.tsx";
8
+
import { LabelerAvatar } from "../components/LabelerAvatar.tsx";
8
9
import { profileToView } from "../lib/actor.ts";
9
10
import { getPageMeta } from "../meta.ts";
10
11
import type { State } from "../state.ts";
···
85
86
{profileViews.map((profile) => (
86
87
<li key={profile.did}>
87
88
<a class="flex items-center" href={`/profile/${profile.handle}`}>
88
-
<ActorAvatar profile={profile} size={32} class="mr-2" />
89
+
{/* @TODO remove hard-coded handler */}
90
+
{profile.handle === "moderation.grain.social"
91
+
? <LabelerAvatar profile={profile} size={32} class="mr-2" />
92
+
: <ActorAvatar profile={profile} size={32} class="mr-2" />}
89
93
<div class="flex flex-col">
90
94
<div class="font-semibold">
91
95
{profile.displayName || profile.handle}
+13
-2
src/routes/gallery.tsx
+13
-2
src/routes/gallery.tsx
···
3
3
import { BffContext, RouteHandler, WithBffMeta } from "@bigmoves/bff";
4
4
import { GalleryPage } from "../components/GalleryPage.tsx";
5
5
import { getGallery, getGalleryFavs } from "../lib/gallery.ts";
6
+
import { moderateGallery, ModerationDecsion } from "../lib/moderation.ts";
6
7
import { getGalleryMeta, getPageMeta } from "../meta.ts";
7
8
import type { State } from "../state.ts";
8
9
import { galleryLink } from "../utils.ts";
9
10
10
-
export const handler: RouteHandler = (
11
+
export const handler: RouteHandler = async (
11
12
_req,
12
13
params,
13
14
ctx: BffContext<State>,
···
30
31
31
32
ctx.state.scripts = ["photo_dialog.js", "masonry.js", "sortable.js"];
32
33
34
+
let modDecision: ModerationDecsion | undefined = undefined;
35
+
if (gallery.labels?.length) {
36
+
modDecision = await moderateGallery(gallery.labels ?? [], ctx);
37
+
}
38
+
33
39
return ctx.render(
34
-
<GalleryPage favs={favs} gallery={gallery} currentUserDid={did} />,
40
+
<GalleryPage
41
+
favs={favs}
42
+
gallery={gallery}
43
+
currentUserDid={did}
44
+
modDecision={modDecision}
45
+
/>,
35
46
);
36
47
};
+34
-3
src/routes/profile.tsx
+34
-3
src/routes/profile.tsx
···
1
-
import { BffContext, RouteHandler } from "@bigmoves/bff";
1
+
import { BffContext, LabelerPolicies, RouteHandler } from "@bigmoves/bff";
2
2
import { ProfilePage, ProfileTabs } from "../components/ProfilePage.tsx";
3
3
import {
4
4
getActorGalleries,
···
7
7
getActorProfiles,
8
8
} from "../lib/actor.ts";
9
9
import { getFollow, getFollowers, getFollowing } from "../lib/follow.ts";
10
+
import {
11
+
isLabeler as isLabelerFn,
12
+
moderateGallery,
13
+
ModerationDecsion,
14
+
} from "../lib/moderation.ts";
10
15
import { type SocialNetwork } from "../lib/timeline.ts";
11
16
import { getPageMeta } from "../meta.ts";
12
17
import type { State } from "../state.ts";
13
18
import { profileLink } from "../utils.ts";
14
19
15
-
export const handler: RouteHandler = (
20
+
export const handler: RouteHandler = async (
16
21
req,
17
22
params,
18
23
ctx: BffContext<State>,
···
31
36
const followers = getFollowers(actor.did, ctx);
32
37
const following = getFollowing(actor.did, ctx);
33
38
39
+
let labelerDefinitions: LabelerPolicies | undefined = undefined;
40
+
const isLabeler = await isLabelerFn(actor.did, ctx);
41
+
if (isLabeler) {
42
+
const labelerDefs = await ctx.getLabelerDefinitions();
43
+
labelerDefinitions = labelerDefs[actor.did] ?? [];
44
+
}
45
+
46
+
const galleryModDecisionsMap = new Map<string, ModerationDecsion>();
47
+
for (const gallery of galleries) {
48
+
if (!gallery.labels || gallery.labels.length === 0) {
49
+
continue;
50
+
}
51
+
const modDecision = await moderateGallery(
52
+
gallery.labels ?? [],
53
+
ctx,
54
+
);
55
+
if (!modDecision) {
56
+
continue;
57
+
}
58
+
galleryModDecisionsMap.set(gallery.uri, modDecision);
59
+
}
60
+
34
61
if (!profile) return ctx.next();
35
62
36
63
let followUri: string | undefined;
···
69
96
selectedTab="favs"
70
97
galleries={galleries}
71
98
galleryFavs={galleryFavs}
99
+
galleryModDecisionsMap={galleryModDecisionsMap}
72
100
/>,
73
101
);
74
102
}
···
81
109
followUri={followUri}
82
110
loggedInUserDid={ctx.currentUser?.did}
83
111
profile={profile}
84
-
selectedTab="galleries"
112
+
selectedTab={isLabeler ? "labels" : "galleries"}
85
113
galleries={galleries}
114
+
galleryModDecisionsMap={galleryModDecisionsMap}
115
+
isLabeler={isLabeler}
116
+
labelerDefinitions={labelerDefinitions}
86
117
/>,
87
118
);
88
119
};
+2
-2
src/routes/timeline.tsx
+2
-2
src/routes/timeline.tsx
···
6
6
import { getPageMeta } from "../meta.ts";
7
7
import type { State } from "../state.ts";
8
8
9
-
export const handler: RouteHandler = (
9
+
export const handler: RouteHandler = async (
10
10
req,
11
11
_params,
12
12
ctx: BffContext<State>,
···
44
44
graph = actorProfiles[0];
45
45
}
46
46
47
-
const items = getTimeline(
47
+
const items = await getTimeline(
48
48
ctx,
49
49
tab === "following" ? "following" : "timeline",
50
50
graph,
+39
-8
src/static/upload_page.ts
+39
-8
src/static/upload_page.ts
···
1
1
import exifr from "exifr";
2
2
import htmx from "htmx.org";
3
+
import hyperscript from "hyperscript.org";
3
4
import { dataURLToBlob, doResize, readFileAsDataURL } from "./photo_manip.ts";
4
5
import { tags as supportedTags } from "./tags.ts";
5
6
···
58
59
const blob = dataURLToBlob(resized.path);
59
60
60
61
const fd = new FormData();
61
-
fd.append("file", blob, file.name);
62
+
fd.append("file", blob, (file as File).name);
62
63
fd.append("width", String(resized.width));
63
64
fd.append("height", String(resized.height));
64
65
···
66
67
fd.append("exif", JSON.stringify(tags));
67
68
}
68
69
69
-
htmx.ajax("POST", "/actions/photo", {
70
-
"swap": "afterbegin",
71
-
"target": "#image-preview",
72
-
"values": Object.fromEntries(fd),
73
-
"source": formElement,
70
+
const response = await fetch("/actions/photo", {
71
+
method: "POST",
72
+
body: fd,
74
73
});
74
+
75
+
if (!response.ok) {
76
+
alert(await response.text());
77
+
return;
78
+
}
79
+
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;
88
+
89
+
if (firstChild) {
90
+
preview.insertBefore(firstChild, preview.firstChild);
91
+
}
92
+
93
+
htmx.process(preview);
94
+
95
+
const deleteButton = preview.querySelector(
96
+
`#delete-photo-${photoId}`,
97
+
);
98
+
if (!deleteButton) {
99
+
return;
100
+
}
101
+
htmx.process(deleteButton);
102
+
hyperscript.processNode(deleteButton);
103
+
}
75
104
});
76
105
77
106
await Promise.all(uploadPromises);
78
107
79
108
// Clear the file input after upload
80
-
(formElement.querySelector("input[type='file']") as HTMLInputElement)!
81
-
.value = "";
109
+
const fileInput = formElement.querySelector("input[type='file']");
110
+
if (fileInput instanceof HTMLInputElement) {
111
+
fileInput.value = "";
112
+
}
82
113
}
83
114
}
84
115
+11
-11
static/app.esm.js
+11
-11
static/app.esm.js
···
1
-
var $l=Object.create;var rs=Object.defineProperty;var Jl=Object.getOwnPropertyDescriptor;var Zl=Object.getOwnPropertyNames;var eu=Object.getPrototypeOf,tu=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 Qs=(Qr,Gr)=>()=>(Gr||Qr((Gr={exports:{}}).exports,Gr),Gr.exports),ru=(Qr,Gr)=>{for(var Wr in Gr)rs(Qr,Wr,{get:Gr[Wr],enumerable:!0})},nu=(Qr,Gr,Wr,Kr)=>{if(Gr&&typeof Gr=="object"||typeof Gr=="function")for(let Yr of Zl(Gr))!tu.call(Qr,Yr)&&Yr!==Wr&&rs(Qr,Yr,{get:()=>Gr[Yr],enumerable:!(Kr=Jl(Gr,Yr))||Kr.enumerable});return Qr};var po=(Qr,Gr,Wr)=>(Wr=Qr!=null?$l(eu(Qr)):{},nu(Gr||!Qr||!Qr.__esModule?rs(Wr,"default",{value:Qr,enumerable:!0}):Wr,Qr));var mo=Qs((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(wn){ce(wn,"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(wn){var kn=te(wn,"hx-swap-oob");kn!=null&&Ee(kn,wn,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 wn=dn[yn];wn.nodeType!==Node.TEXT_NODE&&wn.nodeType!==Node.COMMENT_NODE&&Yr.tasks.push(Oe(wn))}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 wn=Yr.shift();if(wn==="changed")yn.changed=!0;else if(wn==="once")yn.once=!0;else if(wn==="consume")yn.consume=!0;else if(wn==="delay"&&Yr[0]===":")Yr.shift(),yn.delay=d(y(Yr,x));else if(wn==="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 wn==="target"&&Yr[0]===":"?(Yr.shift(),yn.target=tt(Yr)):wn==="throttle"&&Yr[0]===":"?(Yr.shift(),yn.throttle=d(y(Yr,x))):wn==="queue"&&Yr[0]===":"?(Yr.shift(),yn.queue=y(Yr,x)):wn==="root"&&Yr[0]===":"?(Yr.shift(),yn[wn]=tt(Yr)):wn==="threshold"&&Yr[0]===":"?(Yr.shift(),yn[wn]=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 wn=ae(yn);if(wn.triggerSpec=Kr,wn.handledFor==null&&(wn.handledFor=[]),wn.handledFor.indexOf(Qr)<0){if(wn.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),wn=0;wn<yn.length;wn++){var kn=yn[wn];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),wn=yr(yn,Qr);if(wn.HEADERS=Yr,tn&&tn.length>0){ce(Qr,"htmx:validation:halted",tn);return}Kr.send(JSON.stringify(wn)),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(wn){tn=wn.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 wn=me(Qr,"hx-include");return oe(wn,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(),wn=dn.length>0?dn.join(":"):null;Kr.scroll=yn,Kr.scrollTarget=wn}else if(tn.indexOf("show:")===0){var kn=tn.substr(5),dn=kn.split(":"),An=dn.pop(),wn=dn.length>0?dn.join(":"):null;Kr.show=An,Kr.showTarget=wn}else if(tn.indexOf("focus-scroll:")===0){var Gn=tn.substr(13);Kr.focusScroll=Gn=="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,wn=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),Gn=An.lastButtonClicked;if(Gn){var jn=ee(Gn,"formaction");jn!=null&&(Gr=jn);var Vn=ee(Gn,"formmethod");Vn!=null&&Vn.toLowerCase()!=="dialog"&&(Qr=Vn)}var ti=ne(Wr,"hx-confirm");if(Zr===void 0){var Ti=function(gn){return he(Qr,Gr,Wr,Kr,Yr,!!gn)},fi={target:kn,elt:Wr,path:Gr,verb:Qr,triggeringEvent:Kr,etc:Yr,issueRequest:Ti,question:ti};if(ce(Wr,"htmx:confirm",fi)===!1)return ie(tn),dn}var oi=Wr,Jn=ne(Wr,"hx-sync"),mi=null,ai=!1;if(Jn){var Ui=Jn.split(":"),gi=Ui[0].trim();if(gi==="this"?oi=xe(Wr,"hx-sync"):oi=ue(Wr,gi),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;ai=!0}else if(Jn==="replace")ce(oi,"htmx:abort");else if(Jn.indexOf("queue")===0){var ri=Jn.split(" ");mi=(ri[1]||"last").trim()}}if(An.xhr)if(An.abortable)ce(oi,"htmx:abort");else{if(mi==null){if(Kr){var xn=ae(Kr);xn&&xn.triggerSpec&&xn.triggerSpec.queue&&(mi=xn.triggerSpec.queue)}mi==null&&(mi="last")}return An.queuedRequests==null&&(An.queuedRequests=[]),mi==="first"&&An.queuedRequests.length===0?An.queuedRequests.push(function(){he(Qr,Gr,Wr,Kr,Yr)}):mi==="all"?An.queuedRequests.push(function(){he(Qr,Gr,Wr,Kr,Yr)}):mi==="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=ai;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 Sn=xr(Wr,kn,mn);Qr!=="get"&&!Sr(Wr)&&(Sn["Content-Type"]="application/x-www-form-urlencoded"),Yr.headers&&(Sn=le(Sn,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:Sn,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,Sn=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 Hn=Gr.split("#"),Wn=Hn[0],zn=Hn[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 Sn)if(Sn.hasOwnProperty(Jr)){var rn=Sn[Jr];Lr(en,Jr,rn)}}var cn={xhr:en,target:kn,requestConfig:Mn,etc:Yr,boosted:Ln,select:wn,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,wn=null,kn=null;return ln?(wn="push",kn=ln):dn?(wn="replace",kn=dn):yn&&(wn="push",kn=tn||Zr),kn?kn==="false"?{}:(kn==="true"&&(kn=tn||Zr),Gr.pathInfo.anchor&&kn.indexOf("#")===-1&&(kn=kn+"#"+Gr.pathInfo.anchor),{type:wn,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 wn=Pr(Qr,Gr),kn=Wr.status>=200&&Wr.status<400&&Wr.status!==204,An=Wr.response,Gn=Wr.status>=400,jn=Q.config.ignoreTitle,Vn=le({shouldSwap:kn,serverResponse:An,isError:Gn,ignoreTitle:jn},Gr);if(ce(Kr,"htmx:beforeSwap",Vn)){if(Kr=Vn.target,An=Vn.serverResponse,Gn=Vn.isError,jn=Vn.ignoreTitle,Gr.target=Kr,Gr.failed=Gn,Gr.successful=!Gn,Vn.shouldSwap){Wr.status===286&&at(Qr),R(Qr,function(gi){An=gi.transformResponse(An,Wr,Qr)}),wn.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 Ti=null,fi=null,oi=function(){try{var gi=document.activeElement,ri={};try{ri={elt:gi,start:gi?gi.selectionStart:null,end:gi?gi.selectionEnd:null}}catch{}var xn;tn&&(xn=tn),O(Wr,/HX-Reselect:/i)&&(xn=Wr.getResponseHeader("HX-Reselect")),wn.type&&(ce(re().body,"htmx:beforeHistoryUpdate",le({history:wn},Gr)),wn.type==="push"?(tr(wn.path),ce(re().body,"htmx:pushedIntoHistory",{path:wn.path})):(rr(wn.path),ce(re().body,"htmx:replacedInHistory",{path:wn.path})));var en=T(Kr);if(je(dn.swapStyle,Kr,Qr,An,en,xn),ri.elt&&!se(ri.elt)&&ee(ri.elt,"id")){var an=document.getElementById(ee(ri.elt,"id")),pn={preventScroll:dn.focusScroll!==void 0?!dn.focusScroll:!Q.config.defaultFocusScroll};if(an){if(ri.start&&an.setSelectionRange)try{an.setSelectionRange(ri.start,ri.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 Sn=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(Ti)};dn.settleDelay>0?setTimeout(Sn,dn.settleDelay):Sn()}catch(vn){throw fe(Qr,"htmx:swapError",Gr),ie(fi),vn}},Jn=Q.config.globalViewTransitions;if(dn.hasOwnProperty("transition")&&(Jn=dn.transition),Jn&&ce(Qr,"htmx:beforeTransition",Gr)&&typeof Promise<"u"&&document.startViewTransition){var mi=new Promise(function(gi,ri){Ti=gi,fi=ri}),ai=oi;oi=function(){document.startViewTransition(function(){return ai(),mi})}}dn.swapDelay>0?setTimeout(oi,dn.swapDelay):oi()}Gn&&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 Ys=Qs((go,Ks)=>{(function(Qr,Gr){let Wr=Gr(Qr);typeof go=="object"&&typeof go.nodeName!="string"?Ks.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,Sn=0,vn=0,bn=1,hn="<START>",On=0;function Pn(){return an&&On===0}for(;Sn<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(Bn());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(Hn());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(Sn<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:Sn,end:Sn+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=Sn,Cn}function Hn(){for(var Cn=Dn("ATTRIBUTE_REF"),In=Tn();Sn<mn.length&&un()!=="]";)In+=Tn();return un()==="]"&&(In+=Tn()),Cn.value=In,Cn.end=Sn,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=Sn,Cn}function zn(){for(var Cn=Dn("STYLE_REF"),In=Tn();Kr.isAlpha(un())||un()==="-";)In+=Tn();return Cn.value=In,Cn.end=Sn,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=Sn,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=Sn,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=Sn,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=Sn,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=Sn,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 ni=fn();if(Number.isNaN(ni))throw Error("Invalid hexadecimal escape at "+Kr.positionString(Cn));_n+=String.fromCharCode(ni)}else _n+=Un}else _n+=Tn();if(un()!==In)throw Error("Unterminated string at "+Kr.positionString(Cn));return Tn(),Cn.value=_n,Cn.end=Sn,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(Sn)}function gn(){return mn.charAt(Sn+1)}function En(Cn=1){return mn.charAt(Sn+Cn)}function Tn(){return hn=un(),Sn++,vn++,hn}function Rn(){return Kr.isAlpha(hn)||Kr.isNumeric(hn)||hn===")"||hn==='"'||hn==="'"||hn==="`"||hn==="}"||hn==="]"}function Bn(){for(var Cn=Dn("WHITESPACE"),In="";un()&&Kr.isWhitespace(un());)Kr.isNewline(un())&&(vn=0,bn++),In+=Tn();return Cn.value=In,Cn.end=Sn,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 Sn=arguments[mn],vn=this.matchOpToken(Sn);if(vn)return vn}}matchAnyToken(en,an,pn){for(var mn=0;mn<arguments.length;mn++){var Sn=arguments[mn],vn=this.matchToken(Sn);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 Sn=this.matchTokenType(en,an,pn,mn);if(Sn)return Sn;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 Sn=this.tokens.shift();this.consumed.push(Sn),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 Sn=an.requireElement("feature",mn);return mn.requireOpToken(")"),Sn}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 Sn=an.COMMANDS[mn.currentToken().value||""];let vn;return Sn?vn=Sn(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 Sn=an.parseElement("command",mn);if(Sn){mn.matchToken("then");let vn=an.parseElement("commandList",mn);return vn&&(Sn.next=vn),Sn}}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 Sn=an.parseAnyOf(an.LEAF_EXPRESSIONS,mn);return Sn??an.parseElement("symbol",mn)}),this.addGrammarElement("indirectExpression",function(an,pn,mn,Sn){for(var vn=0;vn<an.INDIRECT_EXPRESSIONS.length;vn++){var bn=an.INDIRECT_EXPRESSIONS[vn];Sn.endToken=mn.lastMatch();var hn=an.parseElement(bn,mn,Sn);if(hn)return hn}return Sn}),this.addGrammarElement("indirectStatement",function(an,pn,mn,Sn){if(mn.matchToken("unless")){Sn.endToken=mn.lastMatch();var vn=an.requireElement("expression",mn),bn={type:"unlessStatementModifier",args:[vn],op:function(hn,On){return On?this.next:Sn},execute:function(hn){return pn.unifiedExec(this,hn)}};return Sn.parent=bn,bn}return Sn}),this.addGrammarElement("primaryExpression",function(an,pn,mn){var Sn=an.parseElement("leaf",mn);if(Sn)return an.parseElement("indirectExpression",mn,Sn);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 Sn=an.currentToken(),vn=mn(this,this.runtime,an,pn);if(vn){this.initElt(vn,Sn,an),vn.endToken=vn.endToken||an.lastMatch();for(var pn=vn.root;pn!=null;)this.initElt(pn,Sn,an),pn=pn.root}return vn}}requireElement(en,an,pn,mn){var Sn=this.parseElement(en,an,mn);return Sn||Zr.raiseParseError(an,pn||"Expected "+en),Sn}parseAnyOf(en,an){for(var pn=0;pn<en.length;pn++){var mn=en[pn],Sn=this.parseElement(mn,an);if(Sn)return Sn}}addGrammarElement(en,an){this.GRAMMAR[en]=an}addCommand(en,an){var pn=en+"Command",mn=function(Sn,vn,bn){let hn=an(Sn,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(Sn,vn,bn){var hn=an(Sn,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
-
`),Sn=an&&an.line?an.line-1:mn.length-1,vn=mn[Sn],bn=an&&an.line?an.column:vn.length-1;return vn+`
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
7
`+" ".repeat(bn)+`^^
8
8
9
9
`}static raiseParseError(en,an){an=(an||"Unexpected Token : "+en.currentToken().value)+`
10
10
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(Sn){return Sn.meta.returned=!0,Sn.meta.resolve&&Sn.meta.resolve(),an.HALT},execute:function(Sn){}},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(fi).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 Sn=this.makeEvent(an,pn),vn=en.dispatchEvent(Sn);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[Gn]||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 Sn=pn[mn];Sn.asyncWrapper&&(pn[mn]=Sn.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],Sn=!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?Sn=!0:Dn.asyncWrapper&&(vn=!0)),On.push(Dn)}mn.push(On)}else if(hn.evaluate){var Dn=hn.evaluate(an);if(Dn&&(Dn.then?Sn=!0:Dn.asyncWrapper&&(vn=!0)),mn.push(Dn),Dn){if(pn===!0)break}else if(pn===!1)break}else mn.push(hn)}return Sn?new Promise((Ln,Fn)=>{mn=this.wrapArrays(mn),Promise.all(mn).then(function(Mn){vn&&this.unwrapAsyncs(Mn);try{var Hn=en.op.apply(en,Mn);Ln(Hn)}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 Sn=pn[mn],vn=Sn(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 Sn=pn.requireElement("commandList",mn);return mn.hasMore()&&pn.raiseParseError(mn),pn.ensureTerminated(Sn),Sn}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 Sn="document"in Qr?Qr.document.body:new mn(pn&&pn.module);an=Object.assign(this.makeContext(Sn,null,Sn,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(Sn,Sn,pn),this.getHyperscriptFeatures(Sn)):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 Sn=bn.tokenize(mn),vn=hn.parseHyperScript(Sn);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,`
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
-
`,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 Sn=jn(pn,mn);return Sn}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 Sn=an.meta.context[en];if(typeof Sn<"u"||an.meta.context.detail&&(Sn=an.meta.context.detail[en],typeof Sn<"u"))return Sn}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 Sn=this.getElementScope(an);Sn[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 Sn=this.getElementScope(an),vn=Sn[en];typeof vn<"u"?Sn[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 Sn=[];for(var vn of en){var bn=pn(vn,an);Sn.push(bn)}return Sn}}}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 Sn;typeof document<"u"&&en===document.body?Sn=Qr:Sn=this.getHyperscriptFeatures(en);for(var vn;(vn=an.shift())!==void 0;){var bn=Sn[vn];bn==null&&(bn={},Sn[vn]=bn),Sn=bn}Sn[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 Sn={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,Sn)}}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 Sn=mn.get(an);return Sn==null&&(Sn={queue:[],executing:!1},mn.set(an,Sn)),Sn}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 Sn=pn;mn==="String"?Sn='"'+Sn+'"':pn instanceof An&&(Sn=Array.from(pn)),console.log("///_ BEEP! The expression ("+Yr.sourceFor.call(an).replace("beep! ","")+") evaluates to:",Sn,"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 wn=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,Sn){this.meta={parser:Sn.parser,lexer:Sn.lexer,runtime:Sn,owner:en,feature:an,iterators:{},ctx:this},this.locals={cookies:wn},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,Sn.addFeatures(en,this)}}class An{constructor(en,an,pn){this._css=en,this.relativeToElement=an,this.escape=pn,this[Gn]=!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 Gn=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 Ti(xn,en){return new(xn.bind.apply(xn,[xn].concat(en)))}function fi(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(Bn,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(Bn){return on.unifiedEval(this,Bn)}};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 Bn=Rn.querySelectorAll(un.css),Cn=0;Cn<Bn.length;Cn++)En.push(Bn[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(Bn){Rn===Bn&&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,Bn,Cn){return Rn==null?null:cn?(Bn<0&&(Bn=Rn.length+Bn),Rn.slice(0,Bn+1)):sn?Cn!=null?(Cn<0&&(Cn=Rn.length+Cn),Rn.slice(Bn,Cn+1)):Rn.slice(Bn):Rn[Bn]},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]},Sn=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 Sn(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,Bn,Cn,In,_n){var Un=Bn.css;if(Un==null)throw"Expected a CSS value to be returned by "+Yr.sourceFor.apply(sn);if(un){if(In)return cn?Sn(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(Bn,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(Bn){return on.unifiedEval(this,Bn)}}}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,Bn;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")&&(Bn=!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 ni=Jr.consumeToken();Un.attributeFilter==null&&(Un.attributeFilter=[]),ni.value.indexOf("@")==0?Un.attributeFilter.push(ni.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 ii=null,Ri=!1;if(Jr.matchToken("from"))if(Jr.matchToken("elsewhere"))Ri=!0;else{Jr.pushFollow("or");try{ii=nn.requireElement("expression",Jr)}finally{Jr.popFollow()}ii||nn.raiseParseError(Jr,'Expected either target value or "elsewhere".')}if(ii===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 si=nn.requireElement("unaryExpression",Jr),ki=si.evaluate({})}else if(Jr.matchToken("throttled")){Jr.requireToken("at");var si=nn.requireElement("unaryExpression",Jr),Hi=si.evaluate({})}cn.push({execCount:0,every:rn,on:un,args:gn,filter:En,from:ii,inExpr:Bi,elsewhere:Ri,startCount:Tn,endCount:Rn,unbounded:Bn,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 uo=nn.requireElement("commandList",Jr);nn.ensureTerminated(uo);var ts,co;if(Jr.matchToken("catch")&&(ts=Jr.requireTokenType("IDENTIFIER").value,co=nn.requireElement("commandList",Jr),nn.ensureTerminated(co)),Jr.matchToken("finally")){var Ws=nn.requireElement("commandList",Jr);nn.ensureTerminated(Ws)}var _i={displayName:sn,events:cn,start:uo,every:rn,execCount:0,errorHandler:co,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})},uo.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,li){_i.executing||on.triggerEvent(ji,Ia,{mutationList:pa,observer:li})}).observe(ji,$n.mutationSpec)),$n.intersectionSpec){Ia="hyperscript:intersection";let ja=new IntersectionObserver(function(pa){for(let fo of pa){var li={observer:ja};li=Object.assign(li,fo),li.intersecting=fo.isIntersecting,on.triggerEvent(ji,Ia,li)}},$n.intersectionSpec);ja.observe(ji)}var Kl=ji.addEventListener||ji.on;Kl.call(ji,Ia,function ja(pa){if(typeof Node<"u"&&xi instanceof Node&&ji!==xi&&!xi.isConnected){ji.removeEventListener(Ia,ja);return}var li=on.makeContext(xi,_i,xi,pa);if(!($n.elsewhere&&xi.contains(pa.target))){$n.from&&(li.result=ji);for(let ho of $n.args){let Xs=li.event[ho.value];Xs!==void 0?li.locals[ho.value]=Xs:"detail"in li.event&&(li.locals[ho.value]=li.event.detail[ho.value])}if(li.meta.errorHandler=co,li.meta.errorSymbol=ts,li.meta.finallyHandler=Ws,$n.filter){var fo=li.meta.context;li.meta.context=li.event;try{var Yl=$n.filter.evaluate(li);if(!Yl)return}finally{li.meta.context=fo}}if($n.inExpr){for(var Oa=pa.target;;)if(Oa.matches&&Oa.matches($n.inExpr.css)){li.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(li)},$n.debounceTime);return}if($n.throttleTime){if($n.lastExec&&Date.now()<$n.lastExec+$n.throttleTime)return;$n.lastExec=Date.now()}_i.execute(li)}})})}}};return nn.setParent(uo,_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 Bn={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,Bn,Cn,null);Un.meta.errorHandler=Tn,Un.meta.errorSymbol=En,Un.meta.finallyHandler=Rn;for(var ni=0;ni<un.length;ni++){var ii=un[ni],Ri=arguments[ni];ii&&(Un.locals[ii.value]=Ri)}Un.meta.caller=arguments[un.length],Un.meta.caller&&(Un.meta.callingCommand=Un.meta.caller.meta.command);var Bi,si=null,ki=new Promise(function(Hi,Ci){Bi=Hi,si=Ci});return gn.execute(Un),Un.meta.returned?Un.meta.returnValue:(Un.meta.resolve=Bi,Un.meta.reject=si,ki)};_n.hyperfunc=!0,_n.hypername=cn,on.assignToNamespace(Cn,sn,fn,_n)}};return nn.ensureTerminated(gn),Tn&&nn.ensureTerminated(Tn),nn.setParent(gn,Bn),Bn}}),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(Bn,Cn,In){for(var _n=on.getInternalData(Bn),Un=jn(_n,rn+"Scope"),ni=0;ni<fn.length;ni++)Un[fn[ni]]=In[fn[ni]];un.apply(Bn,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,Bn=0;Bn<cn.length;Bn++)if(Rn=Rn[cn[Bn]],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=Ti(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(Bn){gn.result=Bn,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 Bn=!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);Bn||(Bn=!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(Bn){Jr.triggerEvent(Bn,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=[],Bn=/(?:(^|#|\.)([^#\. ]+))/g;gn=Bn.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=Ti(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 Bn=Tn[fn.root.name];return on.nullCheck(Bn,fn),Bn.hyperfunc&&Rn.push(En),En.result=Bn.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 Bn={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(ni){Rn?Rn.type==="attributeRef"?Un==null?ni.removeAttribute(Rn.name):ni.setAttribute(Rn.name,Un):ni.style[Rn.name]=Un:ni[_n]=Un})),on.findNext(this,Cn)}};return Bn};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 Bn=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 ni={type:"waitATick",op:function(){return new Promise(function(si){setTimeout(function(){si(Jr.findNext(ni))},0)})}};Un.next=ni}if(on.hasMore()&&on.requireToken("end"),sn==null){sn="_implicit_repeat_"+cn.start;var ii=sn}else var ii=sn+"_"+cn.start;var Ri={identifier:sn,indexIdentifier:In,slot:ii,expression:un,forever:Cn,times:Bn,until:En,event:Tn,on:Rn,whileExpr:gn,resolveNext:function(){return this},loop:_n,args:[gn,Bn],op:function(si,ki,Hi){var Ci=si.meta.iterators[ii],Ni=!1,Ca=null;if(this.forever)Ni=!0;else if(this.until)Tn?Ni=si.meta.iterators[ii].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?si.result=si.locals[sn]=Ca:si.result=Ci.index,In&&(si.locals[In]=Ci.index),Ci.index++,_n):(si.meta.iterators[ii]=null,Jr.findNext(this.parent,si))}};nn.setParent(_n,Ri);var Bi={name:"repeatInit",args:[un,Tn,Rn],op:function(si,ki,Hi,Ci){var Ni={index:0,value:ki,eventFired:!1};if(si.meta.iterators[ii]=Ni,ki&&ki[Symbol.iterator]&&(Ni.iterator=ki[Symbol.iterator]()),Tn){var Ca=Ci||si.me;Ca.addEventListener(Hi,function(_a){si.meta.iterators[ii].eventFired=!0},{once:!0})}return Ri},execute:function(si){return Jr.unifiedExec(this,si)}};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 Hn{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 Hn(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 Bn=Rn||{};Bn.sender=En.me,Bn.headers=Bn.headers||{};var Cn=new AbortController;let In=En.me.addEventListener("fetch:abort",function(){Cn.abort()},{once:!0});Bn.signal=Cn.signal,on.triggerEvent(En.me,"hyperscript:beforeFetch",Bn),on.triggerEvent(En.me,"fetch:beforeRequest",Bn),Rn=Bn;var _n=!1;return Rn.timeout&&setTimeout(function(){_n||Cn.abort()},Rn.timeout),fetch(Tn,Rn).then(function(Un){let ni={response:Un};return on.triggerEvent(En.me,"fetch:afterResponse",ni),Un=ni.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(ii){return En.result=ii,on.triggerEvent(En.me,"fetch:afterRequest",{result:ii}),_n=!0,on.findNext(gn,En)}):Un.text().then(function(ii){return un&&(ii=on.convertValue(ii,un)),fn==="html"&&(ii=on.convertValue(ii,"Fragment")),En.result=ii,on.triggerEvent(En.me,"fetch:afterRequest",{result:ii}),_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,Hn=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}),Hn},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,Hn,Wn){return bn.nullCheck(Hn,Ln),bn.forEach(Wn,function(zn){bn.implicitLoop(Hn,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,Hn,Wn){return bn.nullCheck(Hn,Ln),bn.implicitLoop(Hn,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,Hn,Wn){return bn.nullCheck(Hn,Ln),bn.implicitLoop(Hn,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 Hn="";return On.forEach(function(Wn,zn){Hn+=Wn,zn in Mn&&(Hn+=Mn[zn])}),Hn},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,Hn){return bn.nullCheck(Mn,Nn),bn.implicitLoop(Mn,function(Wn){Wn.parentElement&&(Hn==null||Hn.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,Hn){return bn.nullCheck(Hn,Ln),Mn?bn.forEach(Mn,function(Wn){bn.implicitLoop(Hn,function(zn){zn.classList.remove(Wn.className)})}):bn.implicitLoop(Hn,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),Hn=null;if(Fn==null)Hn=vn.parseElement("attributeRef",hn),Hn==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:Hn,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(Hn.name)?un.removeAttribute(Hn.name):un.setAttribute(Hn.name,Hn.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 Bn=un||rn.me;Bn.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,Hn){return bn.nullCheck(Hn,On),bn.implicitLoop(Hn,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 Hn=Mn.length>0;if(Hn||(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(Hn){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,Hn=null;if(Nn.type==="arrayIndex"&&Dn==="into")Ln=!0,Hn=Nn.prop,Mn=Nn.root;else if(Nn.prop&&Nn.root&&Dn==="into")Hn=Nn.prop.value,Mn=Nn.root;else if(Nn.type==="symbol"&&Dn==="into")Fn=!0,Hn=Nn.name;else if(Nn.type==="attributeRef"&&Dn==="into"){var Wn=!0;Hn=Nn.name,Mn=vn.requireElement("implicitMeTarget",hn)}else if(Nn.type==="styleRef"&&Dn==="into"){var zn=!0;Hn=Nn.name,Mn=vn.requireElement("implicitMeTarget",hn)}else if(Nn.attribute&&Dn==="into"){var Wn=Nn.attribute.type==="attributeRef",zn=Nn.attribute.type==="styleRef";Hn=Nn.attribute.name,Mn=Nn.root}else Mn=Nn;var nn={target:Nn,operation:Dn,symbolWrite:Fn,value:On,args:[Mn,Hn,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 Sn(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=Sn(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 Hn={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),Bn=getComputedStyle(fn),Cn={},In=0;In<Bn.length;In++){var _n=Bn[In],Un=Bn[_n];Cn[_n]=Un}Rn.initialStyles||(Rn.initialStyles=Cn);for(var In=0;In<nn.length;In++){var ni=nn[In],ii=on[In];ii==="computed"||ii==null?fn.style[ni]=Cn[ni]:fn.style[ni]=ii}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 si=[],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(Hn,Wn)})}};return Hn}}),xn.addCommand("measure",function(vn,bn,hn){if(hn.matchToken("measure")){var On=Sn(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,Hn){if(Hn==null)return null;{let Wn=[];return bn.implicitLoop(Hn,function(zn){On?Wn.push(zn.parentElement?zn.parentElement.closest(Pn):null):Wn.push(zn.closest(Pn))}),bn.shouldAutoIterate(Hn)?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 Hn=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,Hn],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 Hn=0;Hn<Mn.length;Hn++)Fn.value.push(Mn[Hn].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,mi=Jn.lexer,ai=Jn.parser;function Ui(xn,en){return Jn.evaluate(xn,en)}function gi(){var xn=Array.from(Qr.document.querySelectorAll("script[type='text/hyperscript'][src]"));Promise.all(xn.map(function(mn){return fetch(mn.src).then(function(Sn){return Sn.text()})})).then(mn=>mn.forEach(Sn=>ri(Sn))).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 ri=Object.assign(Ui,{config:Wr,use(xn){xn(ri)},internals:{lexer:mi,parser:ai,runtime:Jn,Lexer:Kr,Tokens:Yr,Parser:Zr,Runtime:tn},ElementCollection:An,addFeature:ai.addFeature.bind(ai),addCommand:ai.addCommand.bind(ai),addLeafExpression:ai.addLeafExpression.bind(ai),addIndirectExpression:ai.addIndirectExpression.bind(ai),evaluate:Jn.evaluate.bind(Jn),parse:Jn.parse.bind(Jn),processNode:Jn.processNode.bind(Jn),version:"0.9.14",browserInit:gi});return ri})});var zs=po(mo()),Vs=po(Ys());function $s(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?$s(Object(Wr),!0).forEach(function(Kr){iu(Qr,Kr,Wr[Kr])}):Object.getOwnPropertyDescriptors?Object.defineProperties(Qr,Object.getOwnPropertyDescriptors(Wr)):$s(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 iu(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 au(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 ou(Qr,Gr){if(Qr==null)return{};var Wr=au(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 su="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),Ja=ea(/Edge/i),Js=ea(/firefox/i),Xa=ea(/safari/i)&&!ea(/chrome/i)&&!ea(/android/i),vs=ea(/iP(ad|od|hone)/i),ol=ea(/chrome/i)&&ea(/android/i),sl={capture:!1,passive:!1};function ei(Qr,Gr,Wr){Qr.addEventListener(Gr,Wr,!ra&&sl)}function Zn(Qr,Gr,Wr){Qr.removeEventListener(Gr,Wr,!ra&&sl)}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 ll(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=ll(Qr))}return null}var Zs=/\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(Zs," ").replace(" "+Gr+" "," ");Qr.className=(Kr+(Wr?" "+Gr:"")).replace(Zs," ")}}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 ul(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 yi(Qr,Gr,Wr,Kr,Yr){if(!(!Qr.getBoundingClientRect&&Qr!==window)){var Zr,tn,ln,dn,yn,wn,kn;if(Qr!==window&&Qr.parentNode&&Qr!==Xi()?(Zr=Qr.getBoundingClientRect(),tn=Zr.top,ln=Zr.left,dn=Zr.bottom,yn=Zr.right,wn=Zr.height,kn=Zr.width):(tn=0,ln=0,dn=window.innerHeight,yn=window.innerWidth,wn=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 Gn=Na(Yr||Qr),jn=Gn&&Gn.a,Vn=Gn&&Gn.d;Gn&&(tn/=Vn,ln/=jn,kn/=jn,wn/=Vn,dn=tn+wn,yn=ln+kn)}return{top:tn,left:ln,bottom:dn,right:yn,width:kn,height:wn}}}function el(Qr,Gr,Wr){for(var Kr=la(Qr,!0),Yr=yi(Qr)[Gr];Kr;){var Zr=yi(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 ys(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 tl(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 lu(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 uu(Qr,Gr){if(Qr&&Gr)for(var Wr in Gr)Gr.hasOwnProperty(Wr)&&(Qr[Wr]=Gr[Wr]);return Qr}function is(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 Qa;function cl(Qr,Gr){return function(){if(!Qa){var Wr=arguments,Kr=this;Wr.length===1?Qr.call(Kr,Wr[0]):Qr.apply(Kr,Wr),Qa=setTimeout(function(){Qa=void 0},Gr)}}}function cu(){clearTimeout(Qa),Qa=void 0}function fl(Qr,Gr,Wr){Qr.scrollLeft+=Gr,Qr.scrollTop+=Wr}function hl(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 dl(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=yi(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 fu(){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:yi(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(lu(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,wn=yn.fromRect,kn=yi(yn),An=yn.prevFromRect,Gn=yn.prevToRect,jn=ln.rect,Vn=Na(yn,!0);Vn&&(kn.top-=Vn.f,kn.left-=Vn.e),yn.toRect=kn,yn.thisAnimationDuration&&is(An,kn)&&!is(wn,kn)&&(jn.top-kn.top)/(jn.left-kn.left)===(wn.top-kn.top)/(wn.left-kn.left)&&(dn=du(jn,An,Gn,Yr.options)),is(kn,wn)||(yn.prevFromRect=wn,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,wn=(Yr.left-Zr.left)/(dn||1),kn=(Yr.top-Zr.top)/(yn||1);Kr.animatingX=!!wn,Kr.animatingY=!!kn,Xn(Kr,"transform","translate3d("+wn+"px,"+kn+"px,0)"),this.forRepaintDummy=hu(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 hu(Qr){return Qr.offsetWidth}function du(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=[],as={initializeByDefault:!0},Za={mount:function(Gr){for(var Wr in as)as.hasOwnProperty(Wr)&&!(Wr in Gr)&&(Gr[Wr]=as[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 pu(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,wn=Qr.oldDraggableIndex,kn=Qr.newDraggableIndex,An=Qr.originalEvent,Gn=Qr.putSortable,jn=Qr.extraEventProperties;if(Gr=Gr||Wr&&Wr[Pi],!!Gr){var Vn,ti=Gr.options,Ti="on"+Kr.charAt(0).toUpperCase()+Kr.substr(1);window.CustomEvent&&!ra&&!Ja?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=wn,Vn.newDraggableIndex=kn,Vn.originalEvent=An,Vn.pullMode=Gn?Gn.lastPutMode:void 0;var fi=Qi(Qi({},jn),Za.getEventProperties(Kr,Gr));for(var oi in fi)Vn[oi]=fi[oi];Wr&&Wr.dispatchEvent(Vn),ti[Ti]&&ti[Ti].call(Gr,Vn)}}var mu=["evt"],Di=function(Gr,Wr){var Kr=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},Yr=Kr.evt,Zr=ou(Kr,mu);Za.pluginEvent.bind(Qn)(Gr,Wr,Qi({dragEl:qn,parentEl:hi,ghostEl:Yn,rootEl:ui,nextEl:va,lastDownEl:xo,cloneEl:ci,cloneHidden:sa,dragStarted:za,putSortable:wi,activeSortable:Qn.active,originalEvent:Yr,oldIndex:Ra,oldDraggableIndex:Ka,newIndex:Fi,newDraggableIndex:oa,hideGhostForTarget:vl,unhideGhostForTarget:yl,cloneNowHidden:function(){sa=!0},cloneNowShown:function(){sa=!1},dispatchSortableEvent:function(ln){Oi({sortable:Wr,name:ln,originalEvent:Yr})}},Zr))};function Oi(Qr){pu(Qi({putSortable:wi,cloneEl:ci,targetEl:qn,rootEl:ui,oldIndex:Ra,oldDraggableIndex:Ka,newIndex:Fi,newDraggableIndex:oa},Qr))}var qn,hi,Yn,ui,va,xo,ci,sa,Ra,Fi,Ka,oa,vo,wi,Pa=!1,Io=!1,Oo=[],ma,zi,os,ss,rl,nl,za,Da,Ya,$a=!1,yo=!1,So,Ii,ls=[],ds=!1,Ao=[],Po=typeof document<"u",bo=vs,il=Ja||ra?"cssFloat":"float",gu=Po&&!ol&&!vs&&"draggable"in document.createElement("div"),pl=function(){if(Po){if(ra)return!1;var Qr=document.createElement("x");return Qr.style.cssText="pointer-events:auto",Qr.style.pointerEvents==="auto"}}(),ml=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)+yi(Zr).width,wn=dn&&parseInt(dn.marginLeft)+parseInt(dn.marginRight)+yi(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[il]==="none"||tn&&Kr[il]==="none"&&yn+wn>Yr)?"vertical":"horizontal"},vu=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},yu=function(Gr,Wr){var Kr;return Oo.some(function(Yr){var Zr=Yr[Pi].options.emptyInsertThreshold;if(!(!Zr||ys(Yr))){var tn=yi(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},gl=function(Gr){function Wr(Zr,tn){return function(ln,dn,yn,wn){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,wn),tn)(ln,dn,yn,wn);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},vl=function(){!pl&&Yn&&Xn(Yn,"display","none")},yl=function(){!pl&&Yn&&Xn(Yn,"display","")};Po&&!ol&&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=yu(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)}}},bu=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 ml(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&&(!Xa||vs),emptyInsertThreshold:5};Za.initializePlugins(this,Qr,Wr);for(var Kr in Wr)!(Kr in Gr)&&(Gr[Kr]=Wr[Kr]);gl(Gr);for(var Yr in this)Yr.charAt(0)==="_"&&typeof this[Yr]=="function"&&(this[Yr]=this[Yr].bind(this));this.nativeDraggable=Gr.forceFallback?!1:gu,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,fu())}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,wn=Yr.filter;if(Iu(Kr),!qn&&!(/mousedown|pointerdown/.test(tn)&&Gr.button!==0||Yr.disabled)&&!yn.isContentEditable&&!(!this.nativeDraggable&&Xa&&dn&&dn.tagName.toUpperCase()==="SELECT")&&(dn=Vi(dn,Yr.draggable,Kr,!1),!(dn&&dn.animated)&&xo!==dn)){if(Ra=Gi(dn),Ka=Gi(dn,Yr.draggable),typeof wn=="function"){if(wn.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(wn&&(wn=wn.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}),wn)){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=yi(Kr);if(ui=Zr,qn=Kr,hi=qn.parentNode,va=qn.nextSibling,xo=Kr,vo=tn.group,Qn.dragged=qn,ma={target:qn,clientX:(Wr||Gr).clientX,clientY:(Wr||Gr).clientY},rl=ma.clientX-yn.left,nl=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(),!Js&&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(wn){ul(qn,wn.trim(),us)}),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)),Js&&this.nativeDraggable&&(this.options.touchStartThreshold=4,qn.draggable=!0),Di("delayStart",this,{evt:Gr}),tn.delay&&(!tn.delayOnTouchOnly||Wr)&&(!this.nativeDraggable||!(Ja||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&&us(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(ui,"dragstart",this._onDragStart));try{document.selection?wo(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function(Gr,Wr){if(Pa=!1,ui&&qn){Di("dragStarted",this,{evt:Wr}),this.nativeDraggable&&ei(document,"dragover",bu);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,vl();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=ll(Wr));yl()}},_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&&tl(Ii),wn=(Zr.clientX-ma.clientX+Yr.x)/(ln||1)+(yn?yn[0]-ls[0]:0)/(ln||1),kn=(Zr.clientY-ma.clientY+Yr.y)/(dn||1)+(yn?yn[1]-ls[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+=wn-(os||0),tn.f+=kn-(ss||0)):tn={a:1,b:0,c:0,d:1,e:wn,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),os=wn,ss=kn,zi=Zr}Gr.cancelable&&Gr.preventDefault()}},_appendGhost:function(){if(!Yn){var Gr=this.options.fallbackOnBody?document.body:ui,Wr=yi(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(),ls=tl(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",rl/parseInt(Yn.style.width)*100+"% "+nl/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||(ci=hl(qn),ci.removeAttribute("id"),ci.draggable=!1,ci.style["will-change"]="",this._hideClone(),Mi(ci,this.options.chosenClass,!1),Qn.clone=ci),Kr.cloneId=wo(function(){Di("clone",Kr),!Qn.eventCanceled&&(Kr.options.removeCloneOnHide||ui.insertBefore(ci,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),za=!0,window.getSelection().removeAllRanges(),Xa&&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,wn=vo===dn,kn=ln.sort,An=wi||yn,Gn,jn=this,Vn=!1;if(ds)return;function ti(hn,On){Di(hn,jn,Qi({evt:Gr,isOwner:wn,axis:Gn?"vertical":"horizontal",revert:tn,dragRect:Yr,targetRect:Zr,canSort:kn,fromSortable:An,target:Kr,completed:fi,onMove:function(Nn,Dn){return Eo(ui,Wr,qn,Yr,Nn,yi(Nn),Gr,Dn)},changed:oi},On))}function Ti(){ti("dragOverAnimationCapture"),jn.captureAnimationState(),jn!==An&&An.captureAnimationState()}function fi(hn){return ti("dragOverCompleted",{insertion:hn}),hn&&(wn?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 fi(!1);if(Io=!1,yn&&!ln.disabled&&(wn?kn||(tn=hi!==ui):wi===this||(this.lastPutMode=vo.checkPull(this,yn,qn,Gr))&&dn.checkPut(this,yn,qn,Gr))){if(Gn=this._getDirection(Gr,Kr)==="vertical",Yr=yi(qn),ti("dragOverValid"),Qn.eventCanceled)return Vn;if(tn)return hi=ui,Ti(),this._hideClone(),ti("revert"),Qn.eventCanceled||(va?ui.insertBefore(qn,va):ui.appendChild(qn)),fi(!0);var Jn=ys(Wr,ln.draggable);if(!Jn||Su(Gr,Gn,this)&&!Jn.animated){if(Jn===qn)return fi(!1);if(Jn&&Wr===Gr.target&&(Kr=Jn),Kr&&(Zr=yi(Kr)),Eo(ui,Wr,qn,Yr,Kr,Zr,Gr,!!Kr)!==!1)return Ti(),Jn&&Jn.nextSibling?Wr.insertBefore(qn,Jn.nextSibling):Wr.appendChild(qn),hi=Wr,oi(),fi(!0)}else if(Jn&&xu(Gr,Gn,this)){var mi=La(Wr,0,ln,!0);if(mi===qn)return fi(!1);if(Kr=mi,Zr=yi(Kr),Eo(ui,Wr,qn,Yr,Kr,Zr,Gr,!1)!==!1)return Ti(),Wr.insertBefore(qn,mi),hi=Wr,oi(),fi(!0)}else if(Kr.parentNode===Wr){Zr=yi(Kr);var ai=0,Ui,gi=qn.parentNode!==Wr,ri=!vu(qn.animated&&qn.toRect||Yr,Kr.animated&&Kr.toRect||Zr,Gn),xn=Gn?"top":"left",en=el(Kr,"top","top")||el(qn,"top","top"),an=en?en.scrollTop:void 0;Da!==Kr&&(Ui=Zr[xn],$a=!1,yo=!ri&&ln.invertSwap||gi),ai=wu(Gr,Kr,Zr,Gn,ri?1:ln.swapThreshold,ln.invertedSwapThreshold==null?ln.swapThreshold:ln.invertedSwapThreshold,yo,Da===Kr);var pn;if(ai!==0){var mn=Gi(qn);do mn-=ai,pn=hi.children[mn];while(pn&&(Xn(pn,"display")==="none"||pn===Yn))}if(ai===0||pn===Kr)return fi(!1);Da=Kr,Ya=ai;var Sn=Kr.nextElementSibling,vn=!1;vn=ai===1;var bn=Eo(ui,Wr,qn,Yr,Kr,Zr,Gr,vn);if(bn!==!1)return(bn===1||bn===-1)&&(vn=bn===1),ds=!0,setTimeout(Tu,30),Ti(),vn&&!Sn?Wr.appendChild(qn):Kr.parentNode.insertBefore(qn,vn?Sn:Kr),en&&fl(en,0,an-en.scrollTop),hi=qn.parentNode,Ui!==void 0&&!yo&&(So=Math.abs(Ui-yi(Kr)[xn])),oi(),fi(!0)}if(Wr.contains(qn))return fi(!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}),hi=qn&&qn.parentNode,Fi=Gi(qn),oa=Gi(qn,Kr.draggable),Qn.eventCanceled){this._nulling();return}Pa=!1,yo=!1,$a=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),ps(this.cloneId),ps(this._dragStartId),this.nativeDraggable&&(Zn(document,"drop",this),Zn(Wr,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),Xa&&Xn(document.body,"user-select",""),Xn(qn,"transform",""),Gr&&(za&&(Gr.cancelable&&Gr.preventDefault(),!Kr.dropBubble&&Gr.stopPropagation()),Yn&&Yn.parentNode&&Yn.parentNode.removeChild(Yn),(ui===hi||wi&&wi.lastPutMode!=="clone")&&ci&&ci.parentNode&&ci.parentNode.removeChild(ci),qn&&(this.nativeDraggable&&Zn(qn,"dragend",this),us(qn),qn.style["will-change"]="",za&&!Pa&&Mi(qn,wi?wi.options.ghostClass:this.options.ghostClass,!1),Mi(qn,this.options.chosenClass,!1),Oi({sortable:this,name:"unchoose",toEl:hi,newIndex:null,newDraggableIndex:null,originalEvent:Gr}),ui!==hi?(Fi>=0&&(Oi({rootEl:hi,name:"add",toEl:hi,fromEl:ui,originalEvent:Gr}),Oi({sortable:this,name:"remove",toEl:hi,originalEvent:Gr}),Oi({rootEl:hi,name:"sort",toEl:hi,fromEl:ui,originalEvent:Gr}),Oi({sortable:this,name:"sort",toEl:hi,originalEvent:Gr})),wi&&wi.save()):Fi!==Ra&&Fi>=0&&(Oi({sortable:this,name:"update",toEl:hi,originalEvent:Gr}),Oi({sortable:this,name:"sort",toEl:hi,originalEvent:Gr})),Qn.active&&((Fi==null||Fi===-1)&&(Fi=Ra,oa=Ka),Oi({sortable:this,name:"end",toEl:hi,originalEvent:Gr}),this.save()))),this._nulling()},_nulling:function(){Di("nulling",this),ui=qn=hi=Yn=va=ci=xo=sa=ma=zi=za=Fi=oa=Ra=Ka=Da=Ya=wi=vo=Qn.dragged=Qn.ghost=Qn.clone=Qn.active=null,Ao.forEach(function(Gr){Gr.checked=!0}),Ao.length=os=ss=0},handleEvent:function(Gr){switch(Gr.type){case"drop":case"dragend":this._onDrop(Gr);break;case"dragenter":case"dragover":qn&&(this._onDragOver(Gr),Eu(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)||Cu(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=Za.modifyOption(this,Gr,Wr);typeof Yr<"u"?Kr[Gr]=Yr:Kr[Gr]=Wr,Gr==="group"&&gl(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(ci,"display","none"),this.options.removeCloneOnHide&&ci.parentNode&&ci.parentNode.removeChild(ci),sa=!0}},_showClone:function(Gr){if(Gr.lastPutMode!=="clone"){this._hideClone();return}if(sa){if(Di("showClone",this),Qn.eventCanceled)return;qn.parentNode==ui&&!this.options.group.revertClone?ui.insertBefore(ci,qn):va?ui.insertBefore(ci,va):ui.appendChild(ci),this.options.group.revertClone&&this.animate(qn,ci),Xn(ci,"display",""),sa=!1}}};function Eu(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],wn=yn.options.onMove,kn;return window.CustomEvent&&!ra&&!Ja?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||yi(Gr),dn.willInsertAfter=ln,dn.originalEvent=tn,Qr.dispatchEvent(dn),wn&&(kn=wn.call(yn,dn,tn)),kn}function us(Qr){Qr.draggable=!1}function Tu(){ds=!1}function xu(Qr,Gr,Wr){var Kr=yi(La(Wr.el,0,Wr.options,!0)),Yr=dl(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 Su(Qr,Gr,Wr){var Kr=yi(ys(Wr.el,Wr.options.draggable)),Yr=dl(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 wu(Qr,Gr,Wr,Kr,Yr,Zr,tn,ln){var dn=Kr?Qr.clientY:Qr.clientX,yn=Kr?Wr.height:Wr.width,wn=Kr?Wr.top:Wr.left,kn=Kr?Wr.bottom:Wr.right,An=!1;if(!tn){if(ln&&So<yn*Yr){if(!$a&&(Ya===1?dn>wn+yn*Zr/2:dn<kn-yn*Zr/2)&&($a=!0),$a)An=!0;else if(Ya===1?dn<wn+So:dn>kn-So)return-Ya}else if(dn>wn+yn*(1-Yr)/2&&dn<kn-yn*(1-Yr)/2)return ku(Gr)}return An=An||tn,An&&(dn<wn+yn*Zr/2||dn>kn-yn*Zr/2)?dn>wn+yn/2?1:-1:0}function ku(Qr){return Gi(qn)<Gi(Qr)?1:-1}function Cu(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 Iu(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 ps(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:ul,is:function(Gr,Wr){return!!Vi(Gr,Wr,Gr,!1)},extend:uu,throttle:cl,closest:Vi,toggleClass:Mi,clone:hl,index:Gi,nextTick:wo,cancelNextTick:ps,detectDirection:ml,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)),Za.mount(Kr)})};Qn.create=function(Qr,Gr){return new Qn(Qr,Gr)};Qn.version=su;var vi=[],Va,ms,gs=!1,cs,fs,Do,Wa;function Ou(){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)),al(),ko(),cu()},nulling:function(){Do=ms=Va=gs=Wa=cs=fs=null,vi.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||Ja||ra||Xa){hs(Wr,this.options,ln,Kr);var dn=la(ln,!0);gs&&(!Wa||Zr!==cs||tn!==fs)&&(Wa&&al(),Wa=setInterval(function(){var yn=la(document.elementFromPoint(Zr,tn),!0);yn!==dn&&(dn=yn,ko()),hs(Wr,Yr.options,yn,Kr)},10),cs=Zr,fs=tn)}else{if(!this.options.bubbleScroll||la(ln,!0)===Xi()){ko();return}hs(Wr,this.options,la(ln,!1),!1)}}},ta(Qr,{pluginName:"scroll",initializeByDefault:!0})}function ko(){vi.forEach(function(Qr){clearInterval(Qr.pid)}),vi=[]}function al(){clearInterval(Wa)}var hs=cl(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,wn;ms!==Wr&&(ms=Wr,ko(),Va=Gr.scroll,wn=Gr.scrollFn,Va===!0&&(Va=la(Wr,!0)));var kn=0,An=Va;do{var Gn=An,jn=yi(Gn),Vn=jn.top,ti=jn.bottom,Ti=jn.left,fi=jn.right,oi=jn.width,Jn=jn.height,mi=void 0,ai=void 0,Ui=Gn.scrollWidth,gi=Gn.scrollHeight,ri=Xn(Gn),xn=Gn.scrollLeft,en=Gn.scrollTop;Gn===dn?(mi=oi<Ui&&(ri.overflowX==="auto"||ri.overflowX==="scroll"||ri.overflowX==="visible"),ai=Jn<gi&&(ri.overflowY==="auto"||ri.overflowY==="scroll"||ri.overflowY==="visible")):(mi=oi<Ui&&(ri.overflowX==="auto"||ri.overflowX==="scroll"),ai=Jn<gi&&(ri.overflowY==="auto"||ri.overflowY==="scroll"));var an=mi&&(Math.abs(fi-Yr)<=tn&&xn+oi<Ui)-(Math.abs(Ti-Yr)<=tn&&!!xn),pn=ai&&(Math.abs(ti-Zr)<=tn&&en+Jn<gi)-(Math.abs(Vn-Zr)<=tn&&!!en);if(!vi[kn])for(var mn=0;mn<=kn;mn++)vi[mn]||(vi[mn]={});(vi[kn].vx!=an||vi[kn].vy!=pn||vi[kn].el!==Gn)&&(vi[kn].el=Gn,vi[kn].vx=an,vi[kn].vy=pn,clearInterval(vi[kn].pid),(an!=0||pn!=0)&&(yn=!0,vi[kn].pid=setInterval(function(){Kr&&this.layer===0&&Qn.active._onTouchMove(Do);var Sn=vi[this.layer].vy?vi[this.layer].vy*ln:0,vn=vi[this.layer].vx?vi[this.layer].vx*ln:0;typeof wn=="function"&&wn.call(Qn.dragged.parentNode[Pi],vn,Sn,Qr,Do,vi[this.layer].el)!=="continue"||fl(vi[this.layer].el,vn,Sn)}.bind({layer:kn}),24))),kn++}while(Gr.bubbleScroll&&An!==dn&&(An=la(An,!1)));gs=yn}},30),bl=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 wn=Wr.changedTouches&&Wr.changedTouches.length?Wr.changedTouches[0]:Wr,kn=document.elementFromPoint(wn.clientX,wn.clientY);dn(),yn&&!yn.el.contains(kn)&&(tn("spill"),this.onSpill({dragEl:Yr,putSortable:Kr}))}};function bs(){}bs.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:bl};ta(bs,{pluginName:"revertOnSpill"});function Es(){}Es.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:bl};ta(Es,{pluginName:"removeOnSpill"});Qn.mount(new Ou);Qn.mount(Es,bs);var El=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),wn=parseFloat(dn.dataset.height);if(!yn||!wn)return;let An=wn/yn*Zr,Gn=0;for(let ti=1;ti<Yr;ti++)tn[ti]<tn[Gn]&&(Gn=ti);let jn=(Zr+Wr)*Gn,Vn=tn[Gn];Object.assign(dn.style,{position:"absolute",width:`${Zr}px`,height:`${An}px`,left:`${jn}px`,top:`${Vn}px`}),tn[Gn]=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],wn=parseFloat(yn.dataset.width),kn=parseFloat(yn.dataset.height);if(!wn||!kn)continue;let An=wn/kn;Zr.push({tile:yn,aspectRatio:An,imgW:wn,imgH:kn}),tn+=An;let Gn=(Kr-(Zr.length-1)*Wr)/tn;if(Gn<300||dn===Yr.length-1){let jn=0;for(let Vn of Zr){let ti=Gn*Vn.aspectRatio;Object.assign(Vn.tile.style,{position:"absolute",top:`${ln}px`,left:`${jn}px`,width:`${ti}px`,height:`${Gn}px`}),jn+=ti+Wr}ln+=Gn+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 Ts={};ru(Ts,{dataURLToBlob:()=>eo,doResize:()=>to,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 eo(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 Tl(Qr){let Gr=Qr.split(",")[1];return Math.ceil(Gr.length*3/4)}function Au(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 to(Qr,Gr){let Wr=null,Kr=0,Yr=101;for(;Yr-Kr>1;){let Zr=Math.round((Kr+Yr)/2),tn=await Au(Qr,{width:Gr.width,height:Gr.height,quality:Zr/100,mode:Gr.mode});Tl(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:Tl(Wr.dataUrl),width:Wr.width,height:Wr.height}}var xl=po(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 to(Yr,{width:2e3,height:2e3,maxSize:1e3*1e3,mode:"contain"}),tn=eo(Zr.path);Wr.set("file",tn,Kr.name)}catch(Yr){console.error("Error resizing image:",Yr),Wr.delete("file")}xl.default.ajax("PUT","/actions/profile",{swap:"none",values:Object.fromEntries(Wr),source:Gr})}};var Yo=typeof self<"u"?self:global,so=typeof navigator<"u",Du=so&&typeof HTMLImageElement>"u",qo=!(typeof global>"u"||typeof process>"u"||!process.versions||!process.versions.node),$o=Yo.Buffer,Mo=Yo.BigInt,Jo=!!$o,Pu=Qr=>Qr;function Uo(Qr,Gr=Pu){if(qo)try{return typeof ns=="function"?Promise.resolve(Gr(ns(Qr))):import(Qr).then(Gr)}catch{console.warn(`Couldn't load ${Qr}`)}}var Fs=Yo.fetch,Ru=Qr=>Fs=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:wn,search:kn}=new URL(Kr),An={method:"GET",hostname:dn,path:encodeURI(yn)+kn,headers:Yr};ln!==""&&(An.port=Number(ln));let Gn=(wn==="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",Ti=>ti.push(Ti)),jn.on("end",()=>Vn(Buffer.concat(ti)))})})});Gn.on("error",tn),Gn.end()});Ru(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=>Fl(Qr)?void 0:Qr,Nu=Qr=>Qr!==void 0;function Fl(Qr){return Qr===void 0||(Qr instanceof Map?Qr.size===0:Object.values(Qr).filter(Nu).length===0)}function Ei(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 ks(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 Cs=Qr=>String.fromCharCode.apply(null,Qr),Sl=typeof TextDecoder<"u"?new TextDecoder("utf-8"):void 0;function ql(Qr){return Sl?Sl.decode(Qr):Jo?Buffer.from(Qr).toString("utf8"):decodeURIComponent(escape(Cs(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&&Ei("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 Ei("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||Ei("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 ql(this.getUint8Array(Gr,Wr))}getLatin1String(Gr=0,Wr=this.byteLength){let Kr=this.getUint8Array(Gr,Wr);return Cs(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 Cs(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 Is(Qr,Gr){Ei(`${Qr} '${Gr}' was not loaded, try using full build of exifr.`)}var lo=class extends Map{constructor(Gr){super(),this.kind=Gr}get(Gr,Wr){return this.has(Gr)||Is(this.kind,Gr),Wr&&(Gr in Wr||function(Kr,Yr){Ei(`Unknown ${Kr} '${Yr}'.`)}(this.kind,Gr),Wr[Gr].enabled||Is(this.kind,Gr)),super.get(Gr)}keyList(){return Array.from(this.keys())}},Yi=new lo("file parser"),bi=new lo("segment parser"),Ji=new lo("file reader");function Lu(Qr,Gr){return typeof Qr=="string"?wl(Qr,Gr):so&&!Du&&Qr instanceof HTMLImageElement?wl(Qr.src,Gr):Qr instanceof Uint8Array||Qr instanceof ArrayBuffer||Qr instanceof DataView?new Ki(Qr):so&&Qr instanceof Blob?Os(Qr,Gr,"blob",Sa):void Ei("Invalid input argument")}function wl(Qr,Gr){return(Wr=Qr).startsWith("data:")||Wr.length>1e4?As(Qr,Gr,"base64"):qo&&Qr.includes("://")?Os(Qr,Gr,"url",xa):qo?As(Qr,Gr,"fs"):so?Os(Qr,Gr,"url",xa):void Ei("Invalid input argument");var Wr}async function Os(Qr,Gr,Wr,Kr){return Ji.has(Wr)?As(Qr,Gr,Wr):Kr?async function(Yr,Zr){let tn=await Zr(Yr);return new Ki(tn)}(Qr,Kr):void Ei(`Parser ${Wr} is not loaded`)}async function As(Qr,Gr,Wr){let Kr=new(Ji.get(Wr))(Qr,Gr);return await Kr.read(),Kr}var xa=Qr=>Fs(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)}),Ds=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 pi(Qr,Gr,Wr){let Kr=new Ds;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],di=["ifd0","ifd1","exif","gps","interop"],ca=[...ka,...di],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=di.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:Ei(`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},kl=new Map,ia=class extends Ho{static useCached(Gr){let Wr=kl.get(Gr);return Wr!==void 0||(Wr=new this(Gr),kl.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):Ei(`Invalid options argument ${Gr}`),this.firstChunkSize===void 0&&(this.firstChunkSize=so?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,di)}setupFromObject(Gr){let Wr;for(Wr of(di.ifd0=di.ifd0||di.image,di.ifd1=di.ifd1||di.thumbnail,Object.assign(this,Gr),ua))this[Wr]=xs(Gr[Wr],Ai[Wr]);for(Wr of ha)this[Wr]=xs(Gr[Wr],Ai[Wr]);for(Wr of fa)this[Wr]=xs(Gr[Wr],Ai[Wr]);for(Wr of ka)this[Wr]=new ya(Wr,Ai[Wr],Gr[Wr],this);for(Wr of di)this[Wr]=new ya(Wr,Ai[Wr],Gr[Wr],this.tiff);this.setupGlobalFilters(Gr.pick,Gr.skip,di,ca),Gr.tiff===!0?this.batchEnableWithBool(di,!0):Gr.tiff===!1?this.batchEnableWithUserValue(di,Gr):Array.isArray(Gr.tiff)?this.setupGlobalFilters(Gr.tiff,void 0,di):typeof Gr.tiff=="object"&&this.setupGlobalFilters(Gr.tiff.pick,Gr.tiff.skip,di)}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=Cl(Gr,Kr);for(let[tn,ln]of Zr)Go(this[tn].pick,ln),this[tn].enabled=!0}else if(Wr&&Wr.length){let Zr=Cl(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=di.some(Zr=>this[Zr].enabled===!0)||this.makerNote||this.userComment;for(let Zr of di)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&&!bi.has(Gr)&&Is("segment parser",Gr)}};function Cl(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 xs(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 Lu(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(),Ei("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=bi.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 Mu=Object.freeze({__proto__:null,parse:Zo,Exifr:$i,fileParsers:Yi,segmentParsers:bi,fileReaders:Ji,tagKeys:Si,tagValues:Wi,tagRevivers:da,createDictionary:pi,extendDictionary:wa,fetchUrlAsArrayBuffer:xa,readBlobAsArrayBuffer:Sa,chunkedProps:ua,otherSegments:Ha,segments:ka,tiffBlocks:di,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){Ei(`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):Ei("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(bi.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,wn={};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),wn[kn]=An;return wn}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 Fu(Qr){return Qr===192||Qr===194||Qr===196||Qr===219||Qr===221||Qr===218||Qr===254}function qu(Qr){return Qr>=224&&Qr<=239}function Uu(Qr,Gr,Wr){for(let[Kr,Yr]of bi)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(bi.keyList())):(Gr=Gr===void 0?bi.keyList().filter(Wr=>this.options[Wr].enabled):Gr.filter(Wr=>this.options[Wr].enabled&&bi.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=bi.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(wn=>!this.file.available(wn.offset||wn.start,wn.length||wn.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:wn,wanted:kn,remaining:An,options:Gn}=this;for(;Gr<Wr;Gr++)if(yn.getUint8(Gr)===255){if(Kr=yn.getUint8(Gr+1),qu(Kr)){if(Yr=yn.getUint16(Gr+2),Zr=Uu(yn,Gr,Yr),Zr&&kn.has(Zr)&&(tn=bi.get(Zr),ln=tn.findPosition(yn,Gr),dn=Gn[Zr],ln.type=Zr,this.appSegments.push(ln),!wn&&(tn.multiSegment&&dn.multiSegment?(this.unfinishedMultiSegment=ln.chunkNumber<ln.chunkCount,this.unfinishedMultiSegment||An.delete(Zr)):An.delete(Zr),An.size===0)))break;Gn.recordUnknownSegments&&(ln=qi.findPosition(yn,Gr),ln.marker=Kr,this.unknownSegments.push(ln)),Gr+=Yr+1}else if(Fu(Kr)){if(Yr=yn.getUint16(Gr+2),Kr===218&&Gn.stopAfterSos!==!1)return;Gn.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=bi.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 Bu=[void 0,1,1,2,4,8,1,1,2,4,8,4,8,4],Ps=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 wn=this.chunk.getUint16(Gr);if(tn){if(Yr.has(wn)&&(Kr.set(wn,this.parseTag(Gr,wn,Wr)),Yr.delete(wn),Yr.size===0))break}else!ln&&Zr.has(wn)||Kr.set(wn,this.parseTag(Gr,wn,Wr));Gr+=12}return Kr}parseTag(Gr,Wr,Kr){let{chunk:Yr}=this,Zr=Yr.getUint16(Gr+2),tn=Yr.getUint32(Gr+4),ln=Bu[Zr];if(ln*tn<=4?Gr+=8:Gr=Yr.getUint32(Gr+8),(Zr<1||Zr>13)&&Ei(`Invalid TIFF value type. block: ${Kr.toUpperCase()}, tag: ${Wr.toString(16)}, type: ${Zr}, offset ${Gr}`),Gr>Yr.byteLength&&Ei(`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(wn){switch(wn){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 wn=0;wn<tn;wn++)dn[wn]=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:Ei(`Invalid tiff type ${Gr}`)}}},no=class extends Ps{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&&Ei("Malformed EXIF data"),!Gr.chunked&&this.ifd0Offset>Gr.byteLength&&Ei(`IFD0 offset points to outside of file.
15
-
this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${Gr.byteLength}`),Gr.tiff&&await Gr.ensureChunk(this.ifd0Offset,ks(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,ks(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",Il(...Gr.get(2),Gr.get(1))),Gr.set("longitude",Il(...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 di)if(Gr=this[Wr],!Fl(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 Il(Qr,Gr,Wr,Kr){var Yr=Qr+Gr/60+Wr/3600;return Kr!=="S"&&Kr!=="W"||(Yr*=-1),Yr}Kn(no,"type","tiff"),Kn(no,"headerLength",10),bi.set("tiff",no);var Hu=Object.freeze({__proto__:null,default:Mu,Exifr:$i,fileParsers:Yi,segmentParsers:bi,fileReaders:Ji,tagKeys:Si,tagValues:Wi,tagRevivers:da,createDictionary:pi,extendDictionary:wa,fetchUrlAsArrayBuffer:xa,readBlobAsArrayBuffer:Sa,chunkedProps:ua,otherSegments:Ha,segments:ka,tiffBlocks:di,segmentsAndBlocks:ca,tiffExtractables:fa,inheritables:Ga,allFormatters:ha,Options:ia,parse:Zo}),qs={ifd0:!1,ifd1:!1,exif:!1,gps:!1,interop:!1,sanitize:!1,reviveValues:!0,translateKeys:!1,translateValues:!1,mergeOutput:!1},Us=Object.assign({},qs,{firstChunkSize:4e4,gps:[1,2,3,4]});async function Ul(Qr){let Gr=new $i(Us);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 Bs=Object.assign({},qs,{tiff:!1,ifd1:!0,mergeOutput:!1});async function Bl(Qr){let Gr=new $i(Bs);await Gr.read(Qr);let Wr=await Gr.extractThumbnail();return Wr&&Jo?$o.from(Wr):Wr}async function Hl(Qr){let Gr=await this.thumbnail(Qr);if(Gr!==void 0){let Wr=new Blob([Gr]);return URL.createObjectURL(Wr)}}var Hs=Object.assign({},qs,{firstChunkSize:4e4,ifd0:[274]});async function Gs(Qr){let Gr=new $i(Hs);await Gr.read(Qr);let Wr=await Gr.parse();if(Wr&&Wr.ifd0)return Wr.ifd0[274]}var _s=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 Gl(Qr){let Gr=await Gs(Qr);return Object.assign({canvas:Ea,css:Ta},_s[Gr])}var Rs=class extends Ki{constructor(...Gr){super(...Gr),Kn(this,"ranges",new Ns),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)}},Ns=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=>Ol(Gr,tn.offset,Yr)||Ol(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 Ol(Qr,Gr,Wr){return Qr<=Gr&&Gr<=Wr}var Ba=class extends Rs{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 Gu=Object.freeze({__proto__:null,default:Hu,Exifr:$i,fileParsers:Yi,segmentParsers:bi,fileReaders:Ji,tagKeys:Si,tagValues:Wi,tagRevivers:da,createDictionary:pi,extendDictionary:wa,fetchUrlAsArrayBuffer:xa,readBlobAsArrayBuffer:Sa,chunkedProps:ua,otherSegments:Ha,segments:ka,tiffBlocks:di,segmentsAndBlocks:ca,tiffExtractables:fa,inheritables:Ga,allFormatters:ha,Options:ia,parse:Zo,gpsOnlyOptions:Us,gps:Ul,thumbnailOnlyOptions:Bs,thumbnail:Bl,thumbnailUrl:Hl,orientationOnlyOptions:Hs,orientation:Gs,rotations:_s,get rotateCanvas(){return Ea},get rotateCss(){return Ta},rotation:Gl});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 Fs(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 Ei("Trying to read 64b value but JS can only handle 53b numbers.")};var Ls=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 Ls{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,wn=ln+Yr+Zr,kn=Gr.version===2?4:2,An=this.file.getUintBytes(Kr,kn);for(Kr+=kn;An--;){let Gn=this.file.getUintBytes(Kr,dn);Kr+=dn+yn+2+tn;let jn=this.file.getUint16(Kr);if(Kr+=2,Gn===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*wn}}},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),pi(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"]]),pi(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"]]),pi(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"]]),pi(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 io=pi(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"}]]),Al={1:"No absolute unit of measurement",2:"Inch",3:"Centimeter"};io.set(37392,Al),io.set(41488,Al);var Ss={0:"Normal",1:"Low",2:"High"};function Dl(Qr){return typeof Qr=="object"&&Qr.length!==void 0?Qr[0]:Qr}function Pl(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 ws(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 ro(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(Rl(Qr[Wr+1],Qr[Wr]));else for(let Wr=0;Wr<Qr.length;Wr+=2)Gr.push(Rl(Qr[Wr],Qr[Wr+1]));return ba(String.fromCodePoint(...Gr))}function Rl(Qr,Gr){return Qr<<8|Gr}io.set(41992,Ss),io.set(41993,Ss),io.set(41994,Ss),pi(da,["ifd0","ifd1"],[[50827,function(Qr){return typeof Qr!="string"?ql(Qr):Qr}],[306,ws],[40091,ro],[40092,ro],[40093,ro],[40094,ro],[40095,ro]]),pi(da,"exif",[[40960,Pl],[36864,Pl],[36867,ws],[36868,ws],[40962,Dl],[40963,Dl]]),pi(da,"gps",[[0,Qr=>Array.from(Qr).join(".")],[7,Qr=>Array.from(Qr).join(":")]]);var ao=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 Vl)tn[dn]=[],ln[dn]=0;return Zr.replace(Vu,(dn,yn,wn)=>{if(yn==="<"){let kn=++ln[wn];return tn[wn].push(kn),`${dn}#${kn}`}return`${dn}#${tn[wn].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=zu(tn.ns,Yr),_l(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(ao,"type","xmp"),Kn(ao,"multiSegment",!0),bi.set("xmp",ao);var Ms=class Qr{static findAll(Gr){return jl(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=zl(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 jl(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=Ms.findAll(Kr),this.children=Qr.findAll(Yr),this.value=this.children.length===0?zl(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 ju(this.children.map(_u));if(this.isListItem&&this.children.length===1&&this.attrs.length===0)return this.children[0].serialize();let Gr={};for(let Wr of this.properties)_l(Wr,Gr);return this.value!==void 0&&(Gr.value=this.value),Bo(Gr)}};function _l(Qr,Gr){let Wr=Qr.serialize();Wr!==void 0&&(Gr[Qr.name]=Wr)}var _u=Qr=>Qr.serialize(),ju=Qr=>Qr.length===1?Qr[0]:Qr,zu=(Qr,Gr)=>Gr[Qr]?Gr[Qr]:Gr[Qr]={};function jl(Qr,Gr){let Wr,Kr=[];if(!Qr)return Kr;for(;(Wr=Gr.exec(Qr))!==null;)Kr.push(Wr);return Kr}function zl(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 Vl=["rdf:li","rdf:Seq","rdf:Bag","rdf:Alt","rdf:Description"],Vu=new RegExp(`(<|\\/)(${Vl.join("|")})`,"g"),Wu=Object.freeze({__proto__:null,default:Gu,Exifr:$i,fileParsers:Yi,segmentParsers:bi,fileReaders:Ji,tagKeys:Si,tagValues:Wi,tagRevivers:da,createDictionary:pi,extendDictionary:wa,fetchUrlAsArrayBuffer:xa,readBlobAsArrayBuffer:Sa,chunkedProps:ua,otherSegments:Ha,segments:ka,tiffBlocks:di,segmentsAndBlocks:ca,tiffExtractables:fa,inheritables:Ga,allFormatters:ha,Options:ia,parse:Zo,gpsOnlyOptions:Us,gps:Ul,thumbnailOnlyOptions:Bs,thumbnail:Bl,thumbnailUrl:Hl,orientationOnlyOptions:Hs,orientation:Gs,rotations:_s,get rotateCanvas(){return Ea},get rotateCss(){return Ta},rotation:Gl});var Nl=Uo("fs",Qr=>Qr.promises);Ji.set("fs",class extends Ba{async readWhole(){this.chunked=!1,this.fs=await Nl;let Qr=await this.fs.readFile(this.input);this._swapBuffer(Qr)}async readChunked(){this.chunked=!0,this.fs=await Nl,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),wn=dn.toUint8();for(let kn=0;kn<ln;kn++)wn[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(ks(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 Xu=Uo("zlib"),Qu=["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};Qu.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 Xu,dn=Wr.getUint8Array(Zr);dn=ln.inflateSync(dn),this.injectSegment("icc",dn)}}};Kn(Qo,"type","png"),Yi.set("png",Qo),pi(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 Ll=[[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",Ll),wa(Si,"exif",Ll),pi(Wi,"gps",[[23,{M:"Magnetic North",T:"True North"}],[25,{K:"Kilometers",M:"Miles",N:"Nautical Miles"}]]);var oo=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(oo,"type","jfif"),Kn(oo,"headerLength",9),bi.set("jfif",oo),pi(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"),bi.set("ihdr",Ko),pi(Si,"ihdr",[[0,"ImageWidth"],[4,"ImageHeight"],[8,"BitDepth"],[9,"ColorType"],[10,"Compression"],[11,"Filter"],[12,"Interlace"]]),pi(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&&Ei("ICC header is too short");for(let[Wr,Kr]of Object.entries(Ku)){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),wn=Wr.getUint32(Zr+4),kn=Wr.getUint32(Zr+8)+Gr,An=ba(Wr.getUnicodeString(kn,wn));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 Ku={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))}bi.set("icc",qa),pi(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"},Ml={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!)"};pi(Wi,"icc",[[4,Fo],[12,Ml],[40,Object.assign({},Fo,Ml)],[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),bi.set("iptc",Fa),pi(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"]]),pi(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 js=Wu;var Xl=po(mo());var Wl=["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 tn=>{let ln,dn,yn;try{if(ln=await Ma(tn),ln===null||typeof ln!="string"){console.error("File data URL is not a string:",ln),alert("Error reading file.");return}}catch(An){console.error("Error reading file as Data URL:",An),alert("Error reading file.");return}if(Yr)try{let An=await js.parse(tn,{pick:Wl});console.log("EXIF tags:",await js.parse(tn)),dn=$u(An)}catch(An){console.error("Error reading EXIF data:",An)}try{yn=await to(ln,{width:2e3,height:2e3,maxSize:1e3*1e3,mode:"contain"})}catch(An){console.error("Error resizing image:",An),alert("Error resizing image.");return}let wn=eo(yn.path),kn=new FormData;kn.append("file",wn,tn.name),kn.append("width",String(yn.width)),kn.append("height",String(yn.height)),dn&&kn.append("exif",JSON.stringify(dn)),Xl.default.ajax("POST","/actions/photo",{swap:"afterbegin",target:"#image-preview",values:Object.fromEntries(kn),source:Gr})});await Promise.all(Zr),Gr.querySelector("input[type='file']").value=""}},Yu=1e6;function $u(Qr,Gr=Yu){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 Ql=new Ro({layoutMode:"justified"});Ql.init();zs.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 El(Wr,{animation:150})}});Vs.default.browserInit();var Zi=globalThis;Zi.htmx=Zi.htmx??zs.default;Zi._hyperscript=Zi._hyperscript??Vs.default;Zi.Grain=Zi.Grain??{};Zi.Grain.uploadPage=new es;Zi.Grain.profileDialog=new Lo;Zi.Grain.galleryLayout=Ql;Zi.Grain.photoManip=Ts;
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;
17
17
/*! Bundled license information:
18
18
19
19
sortablejs/modular/sortable.esm.js:
+53
-6
static/styles.css
+53
-6
static/styles.css
···
13
13
--color-zinc-100: oklch(96.7% 0.001 286.375);
14
14
--color-zinc-200: oklch(92% 0.004 286.32);
15
15
--color-zinc-300: oklch(87.1% 0.006 286.286);
16
+
--color-zinc-400: oklch(70.5% 0.015 286.067);
16
17
--color-zinc-500: oklch(55.2% 0.016 285.938);
17
18
--color-zinc-600: oklch(44.2% 0.017 285.786);
18
19
--color-zinc-700: oklch(37% 0.013 285.805);
···
294
295
max-width: 96rem;
295
296
}
296
297
}
297
-
.-m-1 {
298
-
margin: calc(var(--spacing) * -1);
299
-
}
300
298
.-m-2 {
301
299
margin: calc(var(--spacing) * -2);
302
300
}
···
357
355
.ml-0 {
358
356
margin-left: calc(var(--spacing) * 0);
359
357
}
358
+
.ml-1 {
359
+
margin-left: calc(var(--spacing) * 1);
360
+
}
361
+
.ml-6 {
362
+
margin-left: calc(var(--spacing) * 6);
363
+
}
360
364
.block {
361
365
display: block;
362
366
}
···
394
398
.h-0 {
395
399
height: calc(var(--spacing) * 0);
396
400
}
401
+
.h-1 {
402
+
height: calc(var(--spacing) * 1);
403
+
}
397
404
.h-1\/2 {
398
405
height: calc(1/2 * 100%);
399
406
}
···
420
427
}
421
428
.h-full {
422
429
height: 100%;
423
-
}
424
-
.max-h-\[calc\(100vh-100px\)\] {
425
-
max-height: calc(100vh - 100px);
426
430
}
427
431
.min-h-screen {
428
432
min-height: 100vh;
429
433
}
434
+
.w-1 {
435
+
width: calc(var(--spacing) * 1);
436
+
}
430
437
.w-1\/3 {
431
438
width: calc(1/3 * 100%);
439
+
}
440
+
.w-2 {
441
+
width: calc(var(--spacing) * 2);
432
442
}
433
443
.w-2\/3 {
434
444
width: calc(2/3 * 100%);
···
460
470
.max-w-5xl {
461
471
max-width: var(--container-5xl);
462
472
}
473
+
.max-w-\[60\%\] {
474
+
max-width: 60%;
475
+
}
463
476
.max-w-\[200px\] {
464
477
max-width: 200px;
465
478
}
···
484
497
.flex-1 {
485
498
flex: 1;
486
499
}
500
+
.flex-shrink {
501
+
flex-shrink: 1;
502
+
}
487
503
.shrink-0 {
488
504
flex-shrink: 0;
489
505
}
506
+
.border-collapse {
507
+
border-collapse: collapse;
508
+
}
490
509
.transform {
491
510
transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);
492
511
}
···
498
517
}
499
518
.resize {
500
519
resize: both;
520
+
}
521
+
.list-disc {
522
+
list-style-type: disc;
501
523
}
502
524
.grid-cols-1 {
503
525
grid-template-columns: repeat(1, minmax(0, 1fr));
···
543
565
}
544
566
.gap-4 {
545
567
gap: calc(var(--spacing) * 4);
568
+
}
569
+
.space-y-1 {
570
+
:where(& > :not(:last-child)) {
571
+
--tw-space-y-reverse: 0;
572
+
margin-block-start: calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));
573
+
margin-block-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)));
574
+
}
546
575
}
547
576
.space-y-2 {
548
577
:where(& > :not(:last-child)) {
···
726
755
.pl-2 {
727
756
padding-left: calc(var(--spacing) * 2);
728
757
}
758
+
.pl-5 {
759
+
padding-left: calc(var(--spacing) * 5);
760
+
}
729
761
.text-center {
730
762
text-align: center;
731
763
}
···
836
868
.ring-sky-500 {
837
869
--tw-ring-color: var(--color-sky-500);
838
870
}
871
+
.outline {
872
+
outline-style: var(--tw-outline-style);
873
+
outline-width: 1px;
874
+
}
839
875
.invert {
840
876
--tw-invert: invert(100%);
841
877
filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
···
987
1023
min-width: 120px;
988
1024
}
989
1025
}
1026
+
.sm\:min-w-md {
1027
+
@media (width >= 40rem) {
1028
+
min-width: var(--container-md);
1029
+
}
1030
+
}
990
1031
.sm\:grid-cols-3 {
991
1032
@media (width >= 40rem) {
992
1033
grid-template-columns: repeat(3, minmax(0, 1fr));
···
1229
1270
inherits: false;
1230
1271
initial-value: 0 0 #0000;
1231
1272
}
1273
+
@property --tw-outline-style {
1274
+
syntax: "*";
1275
+
inherits: false;
1276
+
initial-value: solid;
1277
+
}
1232
1278
@property --tw-blur {
1233
1279
syntax: "*";
1234
1280
inherits: false;
···
1313
1359
--tw-ring-offset-width: 0px;
1314
1360
--tw-ring-offset-color: #fff;
1315
1361
--tw-ring-offset-shadow: 0 0 #0000;
1362
+
--tw-outline-style: solid;
1316
1363
--tw-blur: initial;
1317
1364
--tw-brightness: initial;
1318
1365
--tw-contrast: initial;