@netnodeag/kraftwerk 0.78.1 → 0.80.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +83 -0
- package/dist/cli/daemon.js +10 -9
- package/dist/cli/doctor.js +1 -1
- package/dist/cli/entities.d.ts +8 -0
- package/dist/cli/entities.js +222 -0
- package/dist/cli/init.js +3 -0
- package/dist/cli/kraftwerk.js +7 -0
- package/dist/cli/ui.js +2 -1
- package/dist/client/routes.d.ts +16 -0
- package/dist/client/routes.js +16 -0
- package/dist/config.d.ts +25 -0
- package/dist/config.js +17 -6
- package/dist/core/chat/context.js +5 -2
- package/dist/core/entities.d.ts +171 -0
- package/dist/core/entities.js +441 -0
- package/dist/core/git.js +3 -1
- package/dist/core/journal.d.ts +12 -2
- package/dist/core/journal.js +50 -5
- package/dist/core/log.d.ts +18 -0
- package/dist/core/log.js +23 -0
- package/dist/core/projects.d.ts +22 -33
- package/dist/core/projects.js +40 -134
- package/dist/core/records.d.ts +28 -0
- package/dist/core/records.js +71 -0
- package/dist/core/refs.d.ts +74 -0
- package/dist/core/refs.js +143 -0
- package/dist/core/search.d.ts +10 -0
- package/dist/core/search.js +12 -0
- package/dist/core/settings.d.ts +4 -0
- package/dist/core/settings.js +24 -3
- package/dist/core/slug.d.ts +9 -0
- package/dist/core/slug.js +18 -0
- package/dist/core/trash.d.ts +1 -1
- package/dist/server/api/devices.js +2 -1
- package/dist/server/api/entities.d.ts +74 -0
- package/dist/server/api/entities.js +60 -0
- package/dist/server/api/index.d.ts +66 -4
- package/dist/server/api/index.js +5 -0
- package/dist/server/api/projects.d.ts +3 -0
- package/dist/server/api/projects.js +3 -0
- package/dist/server/api/workspace.d.ts +15 -0
- package/dist/server/api/workspace.js +12 -4
- package/dist/server/cloud.js +3 -2
- package/dist/server/relay.d.ts +3 -2
- package/dist/server/relay.js +7 -7
- package/dist/server/server.js +3 -2
- package/package.json +1 -1
- package/schema/kraftwerk.schema.json +54 -0
- package/web/dist/assets/{dist-Crnb8VVO.js → dist-1PajaYPg.js} +1 -1
- package/web/dist/assets/{dist-B-yVL5lk.js → dist-B4dqwo7_.js} +1 -1
- package/web/dist/assets/dist-Bp1iMuQ7.js +1 -0
- package/web/dist/assets/{dist-C90kUzps.js → dist-CK2u1OXb.js} +1 -1
- package/web/dist/assets/{dist-DQbifCX0.js → dist-D-f0nszo.js} +1 -1
- package/web/dist/assets/{dist-BTc878j7.js → dist-DKduisGW.js} +1 -1
- package/web/dist/assets/{dist-D0rjnN8S.js → dist-DgKgeYFJ.js} +1 -1
- package/web/dist/assets/{dist-D4SDXoGw.js → dist-DlZPeneT.js} +1 -1
- package/web/dist/assets/{dist-DHRhdODt.js → dist-K_3Y5Nbl.js} +1 -1
- package/web/dist/assets/{dist-B9EMB1Ie.js → dist-NX4_yvho.js} +1 -1
- package/web/dist/assets/{dist-CpLdAqFQ.js → dist-u_oAKIhZ.js} +1 -1
- package/web/dist/assets/{editor-DHAdW1g_.js → editor-CE9TlKkJ.js} +3 -3
- package/web/dist/assets/index-Dvt-vE1h.css +2 -0
- package/web/dist/assets/index-IAuwD22j.js +231 -0
- package/web/dist/index.html +2 -2
- package/web/dist-remote/assets/index-D6Wznb5o.js +27 -0
- package/web/dist-remote/index.html +2 -2
- package/web/dist-remote/sw.js +1 -1
- package/web/dist/assets/dist-lSJ-O7kT.js +0 -1
- package/web/dist/assets/index-BKDJocDd.css +0 -2
- package/web/dist/assets/index-D7JVAjll.js +0 -231
- package/web/dist-remote/assets/index-2nAI1HTV.js +0 -13
|
@@ -367,7 +367,20 @@ export declare const routes: (Route<"agents.addJournal", {
|
|
|
367
367
|
claimCode?: string | null;
|
|
368
368
|
claimUrl?: string | null;
|
|
369
369
|
workspaces?: number;
|
|
370
|
-
}, "/api/cloud/unlink", undefined> | Route<"
|
|
370
|
+
}, "/api/cloud/unlink", undefined> | Route<"contacts.create", import("./router.js").Reply<import("../../core/entities.js").EntityDetail<import("../../core/entities.js").ContactDef>>, "/api/contacts", z.ZodObject<{
|
|
371
|
+
notes: z.ZodOptional<z.ZodString>;
|
|
372
|
+
tags: z.ZodOptional<z.ZodUnknown>;
|
|
373
|
+
records: z.ZodOptional<z.ZodUnknown>;
|
|
374
|
+
title: z.ZodString;
|
|
375
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
376
|
+
}, z.core.$loose>> | Route<"contacts.delete", {
|
|
377
|
+
ok: boolean;
|
|
378
|
+
}, "/api/contacts/:slug", undefined> | Route<"contacts.get", import("../../core/entities.js").EntityDetail<import("../../core/entities.js").ContactDef>, "/api/contacts/:slug", undefined> | Route<"contacts.list", import("../../core/entities.js").EntitiesView<import("../../core/entities.js").ContactDef>, "/api/contacts", undefined> | Route<"contacts.save", import("../../core/entities.js").EntityDetail<import("../../core/entities.js").ContactDef>, "/api/contacts/:slug", z.ZodObject<{
|
|
379
|
+
title: z.ZodOptional<z.ZodString>;
|
|
380
|
+
notes: z.ZodOptional<z.ZodString>;
|
|
381
|
+
tags: z.ZodOptional<z.ZodUnknown>;
|
|
382
|
+
records: z.ZodOptional<z.ZodUnknown>;
|
|
383
|
+
}, z.core.$loose>> | Route<"devices.code", {
|
|
371
384
|
code: string;
|
|
372
385
|
expiresAt: string;
|
|
373
386
|
urls: string[];
|
|
@@ -427,7 +440,20 @@ export declare const routes: (Route<"agents.addJournal", {
|
|
|
427
440
|
}, "/api/devices/relay", z.ZodObject<{
|
|
428
441
|
enabled: z.ZodBoolean;
|
|
429
442
|
url: z.ZodOptional<z.ZodString>;
|
|
430
|
-
}, z.core.$strip>> | Route<"
|
|
443
|
+
}, z.core.$strip>> | Route<"events.create", import("./router.js").Reply<import("../../core/entities.js").EntityDetail<import("../../core/entities.js").EventDef>>, "/api/events", z.ZodObject<{
|
|
444
|
+
notes: z.ZodOptional<z.ZodString>;
|
|
445
|
+
tags: z.ZodOptional<z.ZodUnknown>;
|
|
446
|
+
records: z.ZodOptional<z.ZodUnknown>;
|
|
447
|
+
title: z.ZodString;
|
|
448
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
449
|
+
}, z.core.$loose>> | Route<"events.delete", {
|
|
450
|
+
ok: boolean;
|
|
451
|
+
}, "/api/events/:slug", undefined> | Route<"events.get", import("../../core/entities.js").EntityDetail<import("../../core/entities.js").EventDef>, "/api/events/:slug", undefined> | Route<"events.list", import("../../core/entities.js").EntitiesView<import("../../core/entities.js").EventDef>, "/api/events", undefined> | Route<"events.save", import("../../core/entities.js").EntityDetail<import("../../core/entities.js").EventDef>, "/api/events/:slug", z.ZodObject<{
|
|
452
|
+
title: z.ZodOptional<z.ZodString>;
|
|
453
|
+
notes: z.ZodOptional<z.ZodString>;
|
|
454
|
+
tags: z.ZodOptional<z.ZodUnknown>;
|
|
455
|
+
records: z.ZodOptional<z.ZodUnknown>;
|
|
456
|
+
}, z.core.$loose>> | Route<"files.delete", {
|
|
431
457
|
ok: boolean;
|
|
432
458
|
}, "/api/files", undefined> | Route<"files.list", import("../../core/files.js").FilesListing, "/api/files/list", undefined> | Route<"files.mkdir", import("./router.js").Reply<import("../../core/files.js").FileEntry>, "/api/files/folder", z.ZodObject<{
|
|
433
459
|
scope: z.ZodOptional<z.ZodString>;
|
|
@@ -520,6 +546,9 @@ export declare const routes: (Route<"agents.addJournal", {
|
|
|
520
546
|
repos: boolean;
|
|
521
547
|
vibeables: boolean;
|
|
522
548
|
projects: boolean;
|
|
549
|
+
contacts: boolean;
|
|
550
|
+
places: boolean;
|
|
551
|
+
events: boolean;
|
|
523
552
|
publicUrl: string;
|
|
524
553
|
cloud: {
|
|
525
554
|
included: boolean;
|
|
@@ -545,7 +574,20 @@ export declare const routes: (Route<"agents.addJournal", {
|
|
|
545
574
|
href: string;
|
|
546
575
|
}, "/api/notifications/:id/diagnose", undefined> | Route<"notifications.list", import("../../core/notifications.js").NotificationsView, "/api/notifications", undefined> | Route<"notifications.read", import("../../core/notifications.js").NotificationsView, "/api/notifications/read", z.ZodObject<{
|
|
547
576
|
ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
548
|
-
}, z.core.$strip>> | Route<"
|
|
577
|
+
}, z.core.$strip>> | Route<"places.create", import("./router.js").Reply<import("../../core/entities.js").EntityDetail<import("../../core/entities.js").PlaceDef>>, "/api/places", z.ZodObject<{
|
|
578
|
+
notes: z.ZodOptional<z.ZodString>;
|
|
579
|
+
tags: z.ZodOptional<z.ZodUnknown>;
|
|
580
|
+
records: z.ZodOptional<z.ZodUnknown>;
|
|
581
|
+
title: z.ZodString;
|
|
582
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
583
|
+
}, z.core.$loose>> | Route<"places.delete", {
|
|
584
|
+
ok: boolean;
|
|
585
|
+
}, "/api/places/:slug", undefined> | Route<"places.get", import("../../core/entities.js").EntityDetail<import("../../core/entities.js").PlaceDef>, "/api/places/:slug", undefined> | Route<"places.list", import("../../core/entities.js").EntitiesView<import("../../core/entities.js").PlaceDef>, "/api/places", undefined> | Route<"places.save", import("../../core/entities.js").EntityDetail<import("../../core/entities.js").PlaceDef>, "/api/places/:slug", z.ZodObject<{
|
|
586
|
+
title: z.ZodOptional<z.ZodString>;
|
|
587
|
+
notes: z.ZodOptional<z.ZodString>;
|
|
588
|
+
tags: z.ZodOptional<z.ZodUnknown>;
|
|
589
|
+
records: z.ZodOptional<z.ZodUnknown>;
|
|
590
|
+
}, z.core.$loose>> | Route<"projects.create", import("./router.js").Reply<import("../../core/projects.js").ProjectDetail>, "/api/projects", z.ZodObject<{
|
|
549
591
|
title: z.ZodString;
|
|
550
592
|
goal: z.ZodOptional<z.ZodString>;
|
|
551
593
|
slug: z.ZodOptional<z.ZodString>;
|
|
@@ -576,6 +618,9 @@ export declare const routes: (Route<"agents.addJournal", {
|
|
|
576
618
|
repos: z.ZodOptional<z.ZodUnknown>;
|
|
577
619
|
workflows: z.ZodOptional<z.ZodUnknown>;
|
|
578
620
|
agents: z.ZodOptional<z.ZodUnknown>;
|
|
621
|
+
contacts: z.ZodOptional<z.ZodUnknown>;
|
|
622
|
+
places: z.ZodOptional<z.ZodUnknown>;
|
|
623
|
+
events: z.ZodOptional<z.ZodUnknown>;
|
|
579
624
|
}, z.core.$loose>> | Route<"projects.saveLayout", {
|
|
580
625
|
ok: boolean;
|
|
581
626
|
layout: import("../../core/projects.js").ProjectLayout;
|
|
@@ -588,7 +633,12 @@ export declare const routes: (Route<"agents.addJournal", {
|
|
|
588
633
|
}, z.core.$strip>> | Route<"protocol.get", {
|
|
589
634
|
version: number;
|
|
590
635
|
routes: RouteInfo[];
|
|
591
|
-
}, "/api/protocol", undefined> | Route<"
|
|
636
|
+
}, "/api/protocol", undefined> | Route<"refs.resolve", {
|
|
637
|
+
refs: import("../../core/refs.js").ResolvedRef[];
|
|
638
|
+
}, "/api/refs/resolve", z.ZodObject<{
|
|
639
|
+
tokens: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
640
|
+
text: z.ZodDefault<z.ZodString>;
|
|
641
|
+
}, z.core.$strip>> | Route<"repos.add", import("./router.js").Reply<import("../../core/repos.js").RepoInfo>, "/api/repos", z.ZodObject<{
|
|
592
642
|
url: z.ZodDefault<z.ZodString>;
|
|
593
643
|
name: z.ZodOptional<z.ZodString>;
|
|
594
644
|
branch: z.ZodOptional<z.ZodString>;
|
|
@@ -663,6 +713,18 @@ export declare const routes: (Route<"agents.addJournal", {
|
|
|
663
713
|
enabled: z.ZodBoolean;
|
|
664
714
|
root: z.ZodOptional<z.ZodString>;
|
|
665
715
|
}, z.core.$strip>>;
|
|
716
|
+
contacts: z.ZodOptional<z.ZodObject<{
|
|
717
|
+
enabled: z.ZodBoolean;
|
|
718
|
+
root: z.ZodOptional<z.ZodString>;
|
|
719
|
+
}, z.core.$strip>>;
|
|
720
|
+
places: z.ZodOptional<z.ZodObject<{
|
|
721
|
+
enabled: z.ZodBoolean;
|
|
722
|
+
root: z.ZodOptional<z.ZodString>;
|
|
723
|
+
}, z.core.$strip>>;
|
|
724
|
+
events: z.ZodOptional<z.ZodObject<{
|
|
725
|
+
enabled: z.ZodBoolean;
|
|
726
|
+
root: z.ZodOptional<z.ZodString>;
|
|
727
|
+
}, z.core.$strip>>;
|
|
666
728
|
}, z.core.$loose>> | Route<"skills.get", import("../../core/skills.js").SkillDetail, "/api/skills/:name", undefined> | Route<"skills.list", {
|
|
667
729
|
root: string;
|
|
668
730
|
skills: import("../../core/skills.js").SkillInfo[];
|
package/dist/server/api/index.js
CHANGED
|
@@ -5,6 +5,7 @@ import { channelRoutes } from "./channels.js";
|
|
|
5
5
|
import { chatRoutes } from "./chats.js";
|
|
6
6
|
import { cloudRoutes } from "./cloud.js";
|
|
7
7
|
import { deviceRoutes } from "./devices.js";
|
|
8
|
+
import { contactRoutes, eventRoutes, placeRoutes, refRoutes } from "./entities.js";
|
|
8
9
|
import { hubRoutes } from "./hub.js";
|
|
9
10
|
import { fileRoutes } from "./files.js";
|
|
10
11
|
import { gitRoutes } from "./git.js";
|
|
@@ -30,6 +31,10 @@ const domainRoutes = [
|
|
|
30
31
|
...chatRoutes,
|
|
31
32
|
...channelRoutes,
|
|
32
33
|
...projectRoutes,
|
|
34
|
+
...contactRoutes,
|
|
35
|
+
...placeRoutes,
|
|
36
|
+
...eventRoutes,
|
|
37
|
+
...refRoutes,
|
|
33
38
|
...runRoutes,
|
|
34
39
|
...knowledgeRoutes,
|
|
35
40
|
...fileRoutes,
|
|
@@ -32,6 +32,9 @@ export declare const projectRoutes: (import("./router.js").Route<"projects.creat
|
|
|
32
32
|
repos: z.ZodOptional<z.ZodUnknown>;
|
|
33
33
|
workflows: z.ZodOptional<z.ZodUnknown>;
|
|
34
34
|
agents: z.ZodOptional<z.ZodUnknown>;
|
|
35
|
+
contacts: z.ZodOptional<z.ZodUnknown>;
|
|
36
|
+
places: z.ZodOptional<z.ZodUnknown>;
|
|
37
|
+
events: z.ZodOptional<z.ZodUnknown>;
|
|
35
38
|
}, z.core.$loose>> | import("./router.js").Route<"projects.saveLayout", {
|
|
36
39
|
ok: boolean;
|
|
37
40
|
layout: import("../../core/projects.js").ProjectLayout;
|
|
@@ -23,6 +23,9 @@ const ProjectFields = z.looseObject({
|
|
|
23
23
|
repos: z.unknown().optional(),
|
|
24
24
|
workflows: z.unknown().optional(),
|
|
25
25
|
agents: z.unknown().optional(),
|
|
26
|
+
contacts: z.unknown().optional(),
|
|
27
|
+
places: z.unknown().optional(),
|
|
28
|
+
events: z.unknown().optional(),
|
|
26
29
|
});
|
|
27
30
|
/** Projects: folders with a goal, a brief, a log and links, plus the rail's order. */
|
|
28
31
|
export const projectRoutes = [
|
|
@@ -33,6 +33,9 @@ export declare const workspaceRoutes: (import("./router.js").Route<"identity.get
|
|
|
33
33
|
repos: boolean;
|
|
34
34
|
vibeables: boolean;
|
|
35
35
|
projects: boolean;
|
|
36
|
+
contacts: boolean;
|
|
37
|
+
places: boolean;
|
|
38
|
+
events: boolean;
|
|
36
39
|
/** @deprecated Always "": the Cloudflare Tunnel that set it was removed in 0.65. Removed with protocol 2. */
|
|
37
40
|
publicUrl: string;
|
|
38
41
|
cloud: {
|
|
@@ -86,6 +89,18 @@ export declare const workspaceRoutes: (import("./router.js").Route<"identity.get
|
|
|
86
89
|
enabled: z.ZodBoolean;
|
|
87
90
|
root: z.ZodOptional<z.ZodString>;
|
|
88
91
|
}, z.core.$strip>>;
|
|
92
|
+
contacts: z.ZodOptional<z.ZodObject<{
|
|
93
|
+
enabled: z.ZodBoolean;
|
|
94
|
+
root: z.ZodOptional<z.ZodString>;
|
|
95
|
+
}, z.core.$strip>>;
|
|
96
|
+
places: z.ZodOptional<z.ZodObject<{
|
|
97
|
+
enabled: z.ZodBoolean;
|
|
98
|
+
root: z.ZodOptional<z.ZodString>;
|
|
99
|
+
}, z.core.$strip>>;
|
|
100
|
+
events: z.ZodOptional<z.ZodObject<{
|
|
101
|
+
enabled: z.ZodBoolean;
|
|
102
|
+
root: z.ZodOptional<z.ZodString>;
|
|
103
|
+
}, z.core.$strip>>;
|
|
89
104
|
}, z.core.$loose>> | import("./router.js").Route<"update.check", import("./router.js").Reply<{
|
|
90
105
|
name: string;
|
|
91
106
|
current: string;
|
|
@@ -33,6 +33,9 @@ const SettingsFields = z.looseObject({
|
|
|
33
33
|
repos: RootBlock.optional(),
|
|
34
34
|
vibeables: RootBlock.optional(),
|
|
35
35
|
projects: RootBlock.optional(),
|
|
36
|
+
contacts: RootBlock.optional(),
|
|
37
|
+
places: RootBlock.optional(),
|
|
38
|
+
events: RootBlock.optional(),
|
|
36
39
|
});
|
|
37
40
|
/**
|
|
38
41
|
* Mark the workspaces the hub answering this request serves — or, a daemon,
|
|
@@ -63,8 +66,10 @@ export const workspaceRoutes = [
|
|
|
63
66
|
const ws = await resolveWorkspace(workspaceRoot()).catch(() => null);
|
|
64
67
|
const name = ws?.config.name ?? (ws ? path.basename(ws.root) : "");
|
|
65
68
|
const root = ws?.root ?? workspaceRoot();
|
|
66
|
-
|
|
67
|
-
const
|
|
69
|
+
// A member sees their workspace, not the host machine: no local paths, no other workspaces.
|
|
70
|
+
const member = c.trust.kind === "member";
|
|
71
|
+
const manual = member ? [] : (ws?.config.switcher ?? []);
|
|
72
|
+
const discovered = member || c.query.get("probe") === "1" ? [] : placeInHub(await discoverWorkspaces());
|
|
68
73
|
// Manual switcher entries keep their configured name/icon; discovered
|
|
69
74
|
// workspaces that duplicate one (same url, running) only contribute
|
|
70
75
|
// the live flag. Stopped workspaces never collide — they carry a root,
|
|
@@ -82,8 +87,8 @@ export const workspaceRoutes = [
|
|
|
82
87
|
workspaceIcon: ws?.config.icon ?? "",
|
|
83
88
|
workspaceColor: ws?.config.color ?? "",
|
|
84
89
|
workspaceNamed: !!ws?.config.name,
|
|
85
|
-
workspaceRoot: root,
|
|
86
|
-
workspaceRootLabel: tildify(root),
|
|
90
|
+
workspaceRoot: member ? "" : root,
|
|
91
|
+
workspaceRootLabel: member ? "" : tildify(root),
|
|
87
92
|
};
|
|
88
93
|
return {
|
|
89
94
|
version: await getPkgVersion(),
|
|
@@ -103,6 +108,9 @@ export const workspaceRoutes = [
|
|
|
103
108
|
repos: (ws?.config.repos && ws.config.repos.enabled !== false) === true,
|
|
104
109
|
vibeables: (ws?.config.vibeables && ws.config.vibeables.enabled !== false) === true,
|
|
105
110
|
projects: (ws?.config.projects && ws.config.projects.enabled !== false) === true,
|
|
111
|
+
contacts: (ws?.config.contacts && ws.config.contacts.enabled !== false) === true,
|
|
112
|
+
places: (ws?.config.places && ws.config.places.enabled !== false) === true,
|
|
113
|
+
events: (ws?.config.events && ws.config.events.enabled !== false) === true,
|
|
106
114
|
/** @deprecated Always "": the Cloudflare Tunnel that set it was removed in 0.65. Removed with protocol 2. */
|
|
107
115
|
publicUrl: "",
|
|
108
116
|
// The machine's cloud record (only the daemon registers one); `included`: this workspace rides along (no cloud.enabled: false veto).
|
package/dist/server/cloud.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { promises as fs } from "node:fs";
|
|
2
|
+
import { log } from "../core/log.js";
|
|
2
3
|
import os from "node:os";
|
|
3
4
|
import { resolveWorkspace } from "../config.js";
|
|
4
5
|
import { claimUrlFor, machineCloud, machineGoodbye, machineHeartbeat, machineRegister, machineUnlink, MAX_REPORTED_ROUTINES, retiredCloudDir, unknownMachine, workspaceInvite, } from "../core/cloud.js";
|
|
@@ -74,10 +75,10 @@ function warnYml(cloud, ymlUrls) {
|
|
|
74
75
|
return;
|
|
75
76
|
m.warned.add(key);
|
|
76
77
|
if (cloud.source === "kraftwerk.yml") {
|
|
77
|
-
|
|
78
|
+
log("warn", "cloud", `kraftwerk.yml cloud.url is deprecated — the cloud is the machine's now: \`kraftwerk cloud on --url ${cloud.url}\` (using ${cloud.url} for now)`);
|
|
78
79
|
}
|
|
79
80
|
else {
|
|
80
|
-
|
|
81
|
+
log("warn", "cloud", `kraftwerk.yml cloud.url (${ymlUrls[0]}) is ignored: the machine's cloud is ${cloud.url} (${cloud.source}); remove it from kraftwerk.yml`);
|
|
81
82
|
}
|
|
82
83
|
}
|
|
83
84
|
async function register() {
|
package/dist/server/relay.d.ts
CHANGED
|
@@ -93,14 +93,15 @@ export interface RelayOptions {
|
|
|
93
93
|
connect?: (url: string) => WebSocket;
|
|
94
94
|
/** Give up on a connection the relay has not accepted (`ok`) within this long, and try again (default 15 s). */
|
|
95
95
|
handshakeTimeoutMs?: number;
|
|
96
|
-
log
|
|
96
|
+
/** One relay event, leveled — the daemon writes it as a standard log line. */
|
|
97
|
+
log?: (level: "info" | "warn", line: string) => void;
|
|
97
98
|
}
|
|
98
99
|
/** Hold the daemon's socket to the relay, reconnecting with backoff, and answer every client behind it. */
|
|
99
100
|
export declare function startRelay(opts: RelayOptions): Promise<RelayLink>;
|
|
100
101
|
/** A short fingerprint of the machine key, to compare what a phone shows with what this machine shows. */
|
|
101
102
|
export declare const keyFingerprint: (key: string) => string;
|
|
102
103
|
/** Start, restart or stop this daemon's relay link to match ~/.kraftwerk/relay.json. */
|
|
103
|
-
export declare function applyRelay(port: number, version: string, log?: (line: string) => void): Promise<RelayStatus>;
|
|
104
|
+
export declare function applyRelay(port: number, version: string, log?: (level: "info" | "warn", line: string) => void): Promise<RelayStatus>;
|
|
104
105
|
/** Hand push notifications to this daemon's relay link; false without one. */
|
|
105
106
|
export declare const relayPush: (pushes: PushMessage[]) => boolean;
|
|
106
107
|
/** The link's state; "off" when this process holds none (not the daemon, or the relay is off). */
|
package/dist/server/relay.js
CHANGED
|
@@ -188,7 +188,7 @@ export async function startRelay(opts) {
|
|
|
188
188
|
send({ t: "msg", c, d: JSON.stringify(ready) });
|
|
189
189
|
}
|
|
190
190
|
catch (err) {
|
|
191
|
-
log(`
|
|
191
|
+
log("warn", `handshake refused — ${err.message}`);
|
|
192
192
|
send({ t: "close", c, reason: "handshake failed" });
|
|
193
193
|
dropConn(c);
|
|
194
194
|
}
|
|
@@ -216,7 +216,7 @@ export async function startRelay(opts) {
|
|
|
216
216
|
return;
|
|
217
217
|
}
|
|
218
218
|
if (!r.ok) {
|
|
219
|
-
log(`
|
|
219
|
+
log("warn", `member refused — ${r.error}`);
|
|
220
220
|
await reply(c, conn, { t: "auth", ok: false, error: r.error });
|
|
221
221
|
send({ t: "close", c, reason: r.error.slice(0, 100) });
|
|
222
222
|
dropConn(c);
|
|
@@ -234,7 +234,7 @@ export async function startRelay(opts) {
|
|
|
234
234
|
if (!check.ok) {
|
|
235
235
|
await reply(c, conn, { t: "fail", id: msg.id, error: check.error });
|
|
236
236
|
if (check.ended) {
|
|
237
|
-
log(`
|
|
237
|
+
log("warn", `member session dropped — ${check.error}`);
|
|
238
238
|
send({ t: "close", c, reason: check.error.slice(0, 100) });
|
|
239
239
|
dropConn(c);
|
|
240
240
|
}
|
|
@@ -282,7 +282,7 @@ export async function startRelay(opts) {
|
|
|
282
282
|
catch { }
|
|
283
283
|
status.state = "error";
|
|
284
284
|
status.error = "the relay did not answer";
|
|
285
|
-
log("
|
|
285
|
+
log("warn", "no answer from the relay — trying again");
|
|
286
286
|
schedule();
|
|
287
287
|
}, opts.handshakeTimeoutMs ?? 15_000);
|
|
288
288
|
handshake.unref?.();
|
|
@@ -305,7 +305,7 @@ export async function startRelay(opts) {
|
|
|
305
305
|
status.state = "connected";
|
|
306
306
|
status.error = undefined;
|
|
307
307
|
status.since = new Date().toISOString();
|
|
308
|
-
log(`
|
|
308
|
+
log("info", `connected to ${opts.settings.url} as ${id}`);
|
|
309
309
|
}
|
|
310
310
|
else if (msg.t === "open" && msg.c) {
|
|
311
311
|
dropConn(msg.c);
|
|
@@ -337,11 +337,11 @@ export async function startRelay(opts) {
|
|
|
337
337
|
if (stopped)
|
|
338
338
|
return;
|
|
339
339
|
if (status.state === "connected")
|
|
340
|
-
log("
|
|
340
|
+
log("warn", "connection lost — reconnecting");
|
|
341
341
|
status.state = "error";
|
|
342
342
|
status.error = ev.code === 4401 ? `the relay refused this machine: ${ev.reason || "wrong secret"}` : ev.reason || "the relay connection closed";
|
|
343
343
|
if (ev.code === 4401)
|
|
344
|
-
log(
|
|
344
|
+
log("warn", `${status.error}`);
|
|
345
345
|
schedule();
|
|
346
346
|
});
|
|
347
347
|
socket.addEventListener("error", () => { });
|
package/dist/server/server.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { promises as fs } from "node:fs";
|
|
2
|
+
import { log } from "../core/log.js";
|
|
2
3
|
import http from "node:http";
|
|
3
4
|
import net from "node:net";
|
|
4
5
|
import path from "node:path";
|
|
@@ -145,7 +146,7 @@ function installExitHandlers() {
|
|
|
145
146
|
process.on("uncaughtException", (err) => {
|
|
146
147
|
if (closedOnly(err))
|
|
147
148
|
return;
|
|
148
|
-
|
|
149
|
+
log("error", "server", `crashed: ${err instanceof Error ? (err.stack ?? err.message) : String(err)}`);
|
|
149
150
|
process.exit(1);
|
|
150
151
|
});
|
|
151
152
|
// Chat agent subprocesses must die with the server — signals bypass "exit" handlers, so hook the signals themselves.
|
|
@@ -377,7 +378,7 @@ export async function startHub(opts) {
|
|
|
377
378
|
await opts.onChange?.(hub);
|
|
378
379
|
}
|
|
379
380
|
catch (err) {
|
|
380
|
-
|
|
381
|
+
log("warn", "daemon", `could not note the open workspaces: ${err.message}`);
|
|
381
382
|
}
|
|
382
383
|
}
|
|
383
384
|
async function openNow(root, o) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@netnodeag/kraftwerk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.80.0",
|
|
4
4
|
"description": "Open-source agentic workspace for teams \u2014 where people and AI agents get work done together: agents (Claude Code, Codex, Pi), skills, shared knowledge, repeatable workflows, and deterministic verification",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agents",
|
|
@@ -171,6 +171,60 @@
|
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
173
|
},
|
|
174
|
+
"contacts": {
|
|
175
|
+
"type": [
|
|
176
|
+
"object",
|
|
177
|
+
"null"
|
|
178
|
+
],
|
|
179
|
+
"additionalProperties": false,
|
|
180
|
+
"description": "Contacts: people and organisations the workspace works with, one Markdown file (YAML frontmatter + notes) each under the root, part of the workspace. Referenced as contact:<slug> from projects, events and text. Absent = feature off, a bare `contacts:` = on with defaults.",
|
|
181
|
+
"properties": {
|
|
182
|
+
"enabled": {
|
|
183
|
+
"type": "boolean",
|
|
184
|
+
"description": "Turn the feature off while keeping the config. Default: true when this block exists"
|
|
185
|
+
},
|
|
186
|
+
"root": {
|
|
187
|
+
"type": "string",
|
|
188
|
+
"description": "Where the contact files live, relative to the project root. Default: kraftwerk-data/contacts"
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
"places": {
|
|
193
|
+
"type": [
|
|
194
|
+
"object",
|
|
195
|
+
"null"
|
|
196
|
+
],
|
|
197
|
+
"additionalProperties": false,
|
|
198
|
+
"description": "Places: addresses and points of interest, one Markdown file (YAML frontmatter + notes) each under the root, part of the workspace. Referenced as place:<slug>; a Google Maps link is derived from coordinates or the address. Absent = feature off, a bare `places:` = on with defaults.",
|
|
199
|
+
"properties": {
|
|
200
|
+
"enabled": {
|
|
201
|
+
"type": "boolean",
|
|
202
|
+
"description": "Turn the feature off while keeping the config. Default: true when this block exists"
|
|
203
|
+
},
|
|
204
|
+
"root": {
|
|
205
|
+
"type": "string",
|
|
206
|
+
"description": "Where the place files live, relative to the project root. Default: kraftwerk-data/places"
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
"events": {
|
|
211
|
+
"type": [
|
|
212
|
+
"object",
|
|
213
|
+
"null"
|
|
214
|
+
],
|
|
215
|
+
"additionalProperties": false,
|
|
216
|
+
"description": "Events: dated, one-off entries (a meeting, a launch, a deadline) with a place, contacts and a project, one Markdown file (YAML frontmatter + notes) each under the root, part of the workspace. Referenced as event:<slug>. Absent = feature off, a bare `events:` = on with defaults.",
|
|
217
|
+
"properties": {
|
|
218
|
+
"enabled": {
|
|
219
|
+
"type": "boolean",
|
|
220
|
+
"description": "Turn the feature off while keeping the config. Default: true when this block exists"
|
|
221
|
+
},
|
|
222
|
+
"root": {
|
|
223
|
+
"type": "string",
|
|
224
|
+
"description": "Where the event files live, relative to the project root. Default: kraftwerk-data/events"
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
},
|
|
174
228
|
"cloud": {
|
|
175
229
|
"type": [
|
|
176
230
|
"object",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./index-D7JVAjll.js";import{C as t,D as n,F as r,L as i,R as a,Ut as o,V as s,m as c,n as l,r as ee,s as te,t as ne,u as re,vt as ie}from"./dist-CYzOYk_e.js";import{n as u,t as ae}from"./dist-CpLdAqFQ.js";import{a as oe,i as se,n as ce,o as le,r as d}from"./dist-BTc878j7.js";var ue=55,de=1,fe=56,pe=2,me=57,he=3,f=4,ge=5,p=6,m=7,h=8,g=9,_=10,_e=11,ve=12,ye=13,v=58,be=14,xe=15,y=59,b=21,Se=23,x=24,Ce=25,S=27,C=28,we=29,Te=32,Ee=35,De=37,Oe=38,ke=0,Ae=1,je={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},Me={dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},w={dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}};function Ne(e){return e==45||e==46||e==58||e>=65&&e<=90||e==95||e>=97&&e<=122||e>=161}var T=null,E=null,D=0;function O(e,t){let n=e.pos+t;if(D==n&&E==e)return T;let r=e.peek(t),i=``;for(;Ne(r);)i+=String.fromCharCode(r),r=e.peek(++t);return E=e,D=n,T=i?i.toLowerCase():r==Pe||r==Fe?void 0:null}var k=60,A=62,j=47,Pe=63,Fe=33,Ie=45;function M(e,t){this.name=e,this.parent=t}var Le=[p,_,m,h,g],Re=new ne({start:null,shift(e,t,n,r){return Le.indexOf(t)>-1?new M(O(r,1)||``,e):e},reduce(e,t){return t==b&&e?e.parent:e},reuse(e,t,n,r){let i=t.type.id;return i==p||i==De?new M(O(r,1)||``,e):e},strict:!1}),ze=new l((e,t)=>{if(e.next!=k){e.next<0&&t.context&&e.acceptToken(v);return}e.advance();let n=e.next==j;n&&e.advance();let r=O(e,0);if(r===void 0)return;if(!r)return e.acceptToken(n?xe:be);let i=t.context?t.context.name:null;if(n){if(r==i)return e.acceptToken(_e);if(i&&Me[i])return e.acceptToken(v,-2);if(t.dialectEnabled(ke))return e.acceptToken(ve);for(let e=t.context;e;e=e.parent)if(e.name==r)return;e.acceptToken(ye)}else{if(r==`script`)return e.acceptToken(m);if(r==`style`)return e.acceptToken(h);if(r==`textarea`)return e.acceptToken(g);if(je.hasOwnProperty(r))return e.acceptToken(_);i&&w[i]&&w[i][r]?e.acceptToken(v,-1):e.acceptToken(p)}},{contextual:!0}),Be=new l(e=>{for(let t=0,n=0;;n++){if(e.next<0){n&&e.acceptToken(y);break}if(e.next==Ie)t++;else if(e.next==A&&t>=2){n>=3&&e.acceptToken(y,-2);break}else t=0;e.advance()}});function Ve(e){for(;e;e=e.parent)if(e.name==`svg`||e.name==`math`)return!0;return!1}var He=new l((e,t)=>{if(e.next==j&&e.peek(1)==A){let n=t.dialectEnabled(Ae)||Ve(t.context);e.acceptToken(n?ge:f,2)}else e.next==A&&e.acceptToken(f,1)});function N(e,t,n){let r=2+e.length;return new l(i=>{for(let a=0,o=0,s=0;;s++){if(i.next<0){s&&i.acceptToken(t);break}if(a==0&&i.next==k||a==1&&i.next==j||a>=2&&a<r&&i.next==e.charCodeAt(a-2))a++,o++;else if(a==r&&i.next==A){s>o?i.acceptToken(t,-o):i.acceptToken(n,-(o-2));break}else if((i.next==10||i.next==13)&&s){i.acceptToken(t,1);break}else a=o=0;i.advance()}})}var Ue=N(`script`,ue,de),We=N(`style`,fe,pe),Ge=N(`textarea`,me,he),Ke=i({"Text RawText IncompleteTag IncompleteCloseTag":a.content,"StartTag StartCloseTag SelfClosingEndTag EndTag":a.angleBracket,TagName:a.tagName,"MismatchedCloseTag/TagName":[a.tagName,a.invalid],AttributeName:a.attributeName,"AttributeValue UnquotedAttributeValue":a.attributeValue,Is:a.definitionOperator,"EntityReference CharacterReference":a.character,Comment:a.blockComment,ProcessingInst:a.processingInstruction,DoctypeDecl:a.documentMeta}),qe=ee.deserialize({version:14,states:",xOVO!rOOO!ZQ#tO'#CrO!`Q#tO'#C{O!eQ#tO'#DOO!jQ#tO'#DRO!oQ#tO'#DTO!tOaO'#CqO#PObO'#CqO#[OdO'#CqO$kO!rO'#CqOOO`'#Cq'#CqO$rO$fO'#DUO$zQ#tO'#DWO%PQ#tO'#DXOOO`'#Dl'#DlOOO`'#DZ'#DZQVO!rOOO%UQ&rO,59^O%aQ&rO,59gO%lQ&rO,59jO%wQ&rO,59mO&SQ&rO,59oOOOa'#D_'#D_O&_OaO'#CyO&jOaO,59]OOOb'#D`'#D`O&rObO'#C|O&}ObO,59]OOOd'#Da'#DaO'VOdO'#DPO'bOdO,59]OOO`'#Db'#DbO'jO!rO,59]O'qQ#tO'#DSOOO`,59],59]OOOp'#Dc'#DcO'vO$fO,59pOOO`,59p,59pO(OQ#|O,59rO(TQ#|O,59sOOO`-E7X-E7XO(YQ&rO'#CtOOQW'#D['#D[O(hQ&rO1G.xOOOa1G.x1G.xOOO`1G/Z1G/ZO(sQ&rO1G/ROOOb1G/R1G/RO)OQ&rO1G/UOOOd1G/U1G/UO)ZQ&rO1G/XOOO`1G/X1G/XO)fQ&rO1G/ZOOOa-E7]-E7]O)qQ#tO'#CzOOO`1G.w1G.wOOOb-E7^-E7^O)vQ#tO'#C}OOOd-E7_-E7_O){Q#tO'#DQOOO`-E7`-E7`O*QQ#|O,59nOOOp-E7a-E7aOOO`1G/[1G/[OOO`1G/^1G/^OOO`1G/_1G/_O*VQ,UO,59`OOQW-E7Y-E7YOOOa7+$d7+$dOOO`7+$u7+$uOOOb7+$m7+$mOOOd7+$p7+$pOOO`7+$s7+$sO*bQ#|O,59fO*gQ#|O,59iO*lQ#|O,59lOOO`1G/Y1G/YO*qO7[O'#CwO+SOMhO'#CwOOQW1G.z1G.zOOO`1G/Q1G/QOOO`1G/T1G/TOOO`1G/W1G/WOOOO'#D]'#D]O+eO7[O,59cOOQW,59c,59cOOOO'#D^'#D^O+vOMhO,59cOOOO-E7Z-E7ZOOQW1G.}1G.}OOOO-E7[-E7[",stateData:`,c~O!_OS~OUSOVPOWQOXROYTO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O|_O!eZO~OgaO~OgbO~OgcO~OgdO~OgeO~O!XfOPmP![mP~O!YiOQpP![pP~O!ZlORsP![sP~OUSOVPOWQOXROYTOZqO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O!eZO~O![rO~P#gO!]sO!fuO~OgvO~OgwO~OS|OT}OiyO~OS!POT}OiyO~OS!ROT}OiyO~OS!TOT}OiyO~OS}OT}OiyO~O!XfOPmX![mX~OP!WO![!XO~O!YiOQpX![pX~OQ!ZO![!XO~O!ZlORsX![sX~OR!]O![!XO~O![!XO~P#gOg!_O~O!]sO!f!aO~OS!bO~OS!cO~Oj!dOShXThXihX~OS!fOT!gOiyO~OS!hOT!gOiyO~OS!iOT!gOiyO~OS!jOT!gOiyO~OS!gOT!gOiyO~Og!kO~Og!lO~Og!mO~OS!nO~Ol!qO!a!oO!c!pO~OS!rO~OS!sO~OS!tO~Ob!uOc!uOd!uO!a!wO!b!uO~Ob!xOc!xOd!xO!c!wO!d!xO~Ob!uOc!uOd!uO!a!{O!b!uO~Ob!xOc!xOd!xO!c!{O!d!xO~OT~cbd!ey|!e~`,goto:"%q!aPPPPPPPPPPPPPPPPPPPPP!b!hP!nPP!zP!}#Q#T#Z#^#a#g#j#m#s#y!bP!b!bP$P$V$m$s$y%P%V%]%cPPPPPPPP%iX^OX`pXUOX`pezabcde{!O!Q!S!UR!q!dRhUR!XhXVOX`pRkVR!XkXWOX`pRnWR!XnXXOX`pQrXR!XpXYOX`pQ`ORx`Q{aQ!ObQ!QcQ!SdQ!UeZ!e{!O!Q!S!UQ!v!oR!z!vQ!y!pR!|!yQgUR!VgQjVR!YjQmWR![mQpXR!^pQtZR!`tS_O`ToXp",nodeNames:`⚠ StartCloseTag StartCloseTag StartCloseTag EndTag SelfClosingEndTag StartTag StartTag StartTag StartTag StartTag StartCloseTag StartCloseTag StartCloseTag IncompleteTag IncompleteCloseTag Document Text EntityReference CharacterReference InvalidEntity Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue ScriptText CloseTag OpenTag StyleText CloseTag OpenTag TextareaText CloseTag OpenTag CloseTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag CloseTag DoctypeDecl`,maxTerm:68,context:Re,nodeProps:[[`closedBy`,-10,1,2,3,7,8,9,10,11,12,13,`EndTag`,6,`EndTag SelfClosingEndTag`,-4,22,31,34,37,`CloseTag`],[`openedBy`,4,`StartTag StartCloseTag`,5,`StartTag`,-4,30,33,36,38,`OpenTag`],[`group`,-10,14,15,18,19,20,21,40,41,42,43,`Entity`,17,`Entity TextContent`,-3,29,32,35,`TextContent Entity`],[`isolate`,-11,22,30,31,33,34,36,37,38,39,42,43,`ltr`,-3,27,28,40,``]],propSources:[Ke],skippedNodes:[0],repeatNodeCount:9,tokenData:"!<p!aR!YOX$qXY,QYZ,QZ[$q[]&X]^,Q^p$qpq,Qqr-_rs3_sv-_vw3}wxHYx}-_}!OH{!O!P-_!P!Q$q!Q![-_![!]Mz!]!^-_!^!_!$S!_!`!;x!`!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4U-_4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!Z$|caPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr$qrs&}sv$qvw+Pwx(tx!^$q!^!_*V!_!a&X!a#S$q#S#T&X#T;'S$q;'S;=`+z<%lO$q!R&bXaP!b`!dpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&Xq'UVaP!dpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}P'pTaPOv'kw!^'k!_;'S'k;'S;=`(P<%lO'kP(SP;=`<%l'kp([S!dpOv(Vx;'S(V;'S;=`(h<%lO(Vp(kP;=`<%l(Vq(qP;=`<%l&}a({WaP!b`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t`)jT!b`Or)esv)ew;'S)e;'S;=`)y<%lO)e`)|P;=`<%l)ea*SP;=`<%l(t!Q*^V!b`!dpOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!Q*vP;=`<%l*V!R*|P;=`<%l&XW+UYlWOX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+PW+wP;=`<%l+P!Z+}P;=`<%l$q!a,]`aP!b`!dp!_^OX&XXY,QYZ,QZ]&X]^,Q^p&Xpq,Qqr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!_-ljiSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q[/ebiSlWOX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+PS0rXiSqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0mS1bP;=`<%l0m[1hP;=`<%l/^!V1vciSaP!b`!dpOq&Xqr1krs&}sv1kvw0mwx(tx!P1k!P!Q&X!Q!^1k!^!_*V!_!a&X!a#s1k#s$f&X$f;'S1k;'S;=`3R<%l?Ah1k?Ah?BY&X?BY?Mn1k?MnO&X!V3UP;=`<%l1k!_3[P;=`<%l-_!Z3hV!ahaP!dpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}!_4WiiSlWd!ROX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst>]tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^/^!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!Z5zblWOX5uXZ7SZ[5u[^7S^p5uqr5urs7Sst+Ptw5uwx7Sx!]5u!]!^7w!^!a7S!a#S5u#S#T7S#T;'S5u;'S;=`8n<%lO5u!R7VVOp7Sqs7St!]7S!]!^7l!^;'S7S;'S;=`7q<%lO7S!R7qOb!R!R7tP;=`<%l7S!Z8OYlWb!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!Z8qP;=`<%l5u!_8{iiSlWOX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst/^tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^:j!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!_:sbiSlWb!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!V<QciSOp7Sqr;{rs7Sst0mtw;{wx7Sx!P;{!P!Q7S!Q!];{!]!^=]!^!a7S!a#s;{#s$f7S$f;'S;{;'S;=`>P<%l?Ah;{?Ah?BY7S?BY?Mn;{?MnO7S!V=dXiSb!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!V>SP;=`<%l;{!_>YP;=`<%l8t!_>dhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^/^!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!Z@TalWOX@OXZAYZ[@O[^AY^p@Oqr@OrsAYsw@OwxAYx!]@O!]!^Az!^!aAY!a#S@O#S#TAY#T;'S@O;'S;=`Bq<%lO@O!RA]UOpAYq!]AY!]!^Ao!^;'SAY;'S;=`At<%lOAY!RAtOc!R!RAwP;=`<%lAY!ZBRYlWc!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!ZBtP;=`<%l@O!_COhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^Dj!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!_DsbiSlWc!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VFQbiSOpAYqrE{rsAYswE{wxAYx!PE{!P!QAY!Q!]E{!]!^GY!^!aAY!a#sE{#s$fAY$f;'SE{;'S;=`G|<%l?AhE{?Ah?BYAY?BY?MnE{?MnOAY!VGaXiSc!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!VHPP;=`<%lE{!_HVP;=`<%lBw!ZHcW!cxaP!b`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t!aIYliSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OKQ!O!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!aK_kiSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!`&X!`!aMS!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!TM_XaP!b`!dp!fQOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!aNZ!ZiSgQaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OMz!O!PMz!P!Q$q!Q![Mz![!]Mz!]!^-_!^!_*V!_!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f$}-_$}%OMz%O%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4UMz4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Je-_$Je$JgMz$Jg$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!a!$PP;=`<%lMz!R!$ZY!b`!dpOq*Vqr!$yrs(Vsv*Vwx)ex!a*V!a!b!4t!b;'S*V;'S;=`*s<%lO*V!R!%Q]!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!%y!O!f*V!f!g!']!g#W*V#W#X!0`#X;'S*V;'S;=`*s<%lO*V!R!&QX!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!&m!O;'S*V;'S;=`*s<%lO*V!R!&vV!b`!dp!ePOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!'dX!b`!dpOr*Vrs(Vsv*Vwx)ex!q*V!q!r!(P!r;'S*V;'S;=`*s<%lO*V!R!(WX!b`!dpOr*Vrs(Vsv*Vwx)ex!e*V!e!f!(s!f;'S*V;'S;=`*s<%lO*V!R!(zX!b`!dpOr*Vrs(Vsv*Vwx)ex!v*V!v!w!)g!w;'S*V;'S;=`*s<%lO*V!R!)nX!b`!dpOr*Vrs(Vsv*Vwx)ex!{*V!{!|!*Z!|;'S*V;'S;=`*s<%lO*V!R!*bX!b`!dpOr*Vrs(Vsv*Vwx)ex!r*V!r!s!*}!s;'S*V;'S;=`*s<%lO*V!R!+UX!b`!dpOr*Vrs(Vsv*Vwx)ex!g*V!g!h!+q!h;'S*V;'S;=`*s<%lO*V!R!+xY!b`!dpOr!+qrs!,hsv!+qvw!-Swx!.[x!`!+q!`!a!/j!a;'S!+q;'S;=`!0Y<%lO!+qq!,mV!dpOv!,hvx!-Sx!`!,h!`!a!-q!a;'S!,h;'S;=`!.U<%lO!,hP!-VTO!`!-S!`!a!-f!a;'S!-S;'S;=`!-k<%lO!-SP!-kO|PP!-nP;=`<%l!-Sq!-xS!dp|POv(Vx;'S(V;'S;=`(h<%lO(Vq!.XP;=`<%l!,ha!.aX!b`Or!.[rs!-Ssv!.[vw!-Sw!`!.[!`!a!.|!a;'S!.[;'S;=`!/d<%lO!.[a!/TT!b`|POr)esv)ew;'S)e;'S;=`)y<%lO)ea!/gP;=`<%l!.[!R!/sV!b`!dp|POr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!0]P;=`<%l!+q!R!0gX!b`!dpOr*Vrs(Vsv*Vwx)ex#c*V#c#d!1S#d;'S*V;'S;=`*s<%lO*V!R!1ZX!b`!dpOr*Vrs(Vsv*Vwx)ex#V*V#V#W!1v#W;'S*V;'S;=`*s<%lO*V!R!1}X!b`!dpOr*Vrs(Vsv*Vwx)ex#h*V#h#i!2j#i;'S*V;'S;=`*s<%lO*V!R!2qX!b`!dpOr*Vrs(Vsv*Vwx)ex#m*V#m#n!3^#n;'S*V;'S;=`*s<%lO*V!R!3eX!b`!dpOr*Vrs(Vsv*Vwx)ex#d*V#d#e!4Q#e;'S*V;'S;=`*s<%lO*V!R!4XX!b`!dpOr*Vrs(Vsv*Vwx)ex#X*V#X#Y!+q#Y;'S*V;'S;=`*s<%lO*V!R!4{Y!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!a!4t!a!b!:]!b;'S!4t;'S;=`!;r<%lO!4tq!5pV!dpOv!5kvx!6Vx!a!5k!a!b!7W!b;'S!5k;'S;=`!8V<%lO!5kP!6YTO!a!6V!a!b!6i!b;'S!6V;'S;=`!7Q<%lO!6VP!6lTO!`!6V!`!a!6{!a;'S!6V;'S;=`!7Q<%lO!6VP!7QOyPP!7TP;=`<%l!6Vq!7]V!dpOv!5kvx!6Vx!`!5k!`!a!7r!a;'S!5k;'S;=`!8V<%lO!5kq!7yS!dpyPOv(Vx;'S(V;'S;=`(h<%lO(Vq!8YP;=`<%l!5ka!8bX!b`Or!8]rs!6Vsv!8]vw!6Vw!a!8]!a!b!8}!b;'S!8];'S;=`!:V<%lO!8]a!9SX!b`Or!8]rs!6Vsv!8]vw!6Vw!`!8]!`!a!9o!a;'S!8];'S;=`!:V<%lO!8]a!9vT!b`yPOr)esv)ew;'S)e;'S;=`)y<%lO)ea!:YP;=`<%l!8]!R!:dY!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!`!4t!`!a!;S!a;'S!4t;'S;=`!;r<%lO!4t!R!;]V!b`!dpyPOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!;uP;=`<%l!4t!V!<TXjSaP!b`!dpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X",tokenizers:[Ue,We,Ge,He,ze,Be,0,1,2,3,4,5],topRules:{Document:[0,16]},dialects:{noMatch:0,selfClosing:515},tokenPrec:517});function P(e,t){let n=Object.create(null);for(let r of e.getChildren(x)){let e=r.getChild(Ce),i=r.getChild(S)||r.getChild(C);e&&(n[t.read(e.from,e.to)]=i?i.type.id==S?t.read(i.from+1,i.to-1):t.read(i.from,i.to):``)}return n}function Je(e,t){let n=e.getChild(Se);return n?t.read(n.from,n.to):` `}function F(e,t,n){let r;for(let i of n)if(!i.attrs||i.attrs(r||=P(e.node.parent.firstChild,t)))return{parser:i.parser,bracketed:!0};return null}function I(e=[],t=[]){let n=[],r=[],i=[],a=[];for(let t of e)(t.tag==`script`?n:t.tag==`style`?r:t.tag==`textarea`?i:a).push(t);let s=t.length?Object.create(null):null;for(let e of t)(s[e.name]||(s[e.name]=[])).push(e);return o((e,t)=>{let o=e.type.id;if(o==we)return F(e,t,n);if(o==Te)return F(e,t,r);if(o==Ee)return F(e,t,i);if(o==b&&a.length){let n=e.node,r=n.firstChild,i=r&&Je(r,t),o;if(i){for(let e of a)if(e.tag==i&&(!e.attrs||e.attrs(o||=P(r,t)))){let t=n.lastChild,i=t.type.id==Oe?t.from:n.to;if(i>r.to)return{parser:e.parser,overlay:[{from:r.to,to:i}]}}}}if(s&&o==x){let n=e.node,r;if(r=n.firstChild){let e=s[t.read(r.from,r.to)];if(e)for(let r of e){if(r.tagName&&r.tagName!=Je(n.parent,t))continue;let e=n.lastChild;if(e.type.id==S){let t=e.from+1,n=e.lastChild,i=e.to-(n&&n.isError?0:1);if(i>t)return{parser:r.parser,overlay:[{from:t,to:i}],bracketed:!0}}else if(e.type.id==C)return{parser:r.parser,overlay:[{from:e.from,to:e.to}]}}}}return null})}var Ye=e({autoCloseTags:()=>ut,html:()=>st,htmlCompletionSource:()=>tt,htmlCompletionSourceWith:()=>nt,htmlLanguage:()=>$}),L=[`_blank`,`_self`,`_top`,`_parent`],R=[`ascii`,`utf-8`,`utf-16`,`latin1`,`latin1`],z=[`get`,`post`,`put`,`delete`],B=[`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`],V=[`true`,`false`],H={},Xe={a:{attrs:{href:null,ping:null,type:null,media:null,target:L,hreflang:null}},abbr:H,address:H,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:null,hreflang:null,type:null,shape:[`default`,`rect`,`circle`,`poly`]}},article:H,aside:H,audio:{attrs:{src:null,mediagroup:null,crossorigin:[`anonymous`,`use-credentials`],preload:[`none`,`metadata`,`auto`],autoplay:[`autoplay`],loop:[`loop`],controls:[`controls`]}},b:H,base:{attrs:{href:null,target:L}},bdi:H,bdo:H,blockquote:{attrs:{cite:null}},body:H,br:H,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:[`autofocus`],disabled:[`autofocus`],formenctype:B,formmethod:z,formnovalidate:[`novalidate`],formtarget:L,type:[`submit`,`reset`,`button`]}},canvas:{attrs:{width:null,height:null}},caption:H,center:H,cite:H,code:H,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:[`command`,`checkbox`,`radio`],label:null,icon:null,radiogroup:null,command:null,title:null,disabled:[`disabled`],checked:[`checked`]}},data:{attrs:{value:null}},datagrid:{attrs:{disabled:[`disabled`],multiple:[`multiple`]}},datalist:{attrs:{data:null}},dd:H,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:[`open`]}},dfn:H,div:H,dl:H,dt:H,em:H,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:[`disabled`],form:null,name:null}},figcaption:H,figure:H,footer:H,form:{attrs:{action:null,name:null,"accept-charset":R,autocomplete:[`on`,`off`],enctype:B,method:z,novalidate:[`novalidate`],target:L}},h1:H,h2:H,h3:H,h4:H,h5:H,h6:H,head:{children:[`title`,`base`,`link`,`style`,`meta`,`script`,`noscript`,`command`]},header:H,hgroup:H,hr:H,html:{attrs:{manifest:null}},i:H,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:[`allow-top-navigation`,`allow-same-origin`,`allow-forms`,`allow-scripts`],seamless:[`seamless`]}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,width:null,height:null,crossorigin:[`anonymous`,`use-credentials`]}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:[`audio/*`,`video/*`,`image/*`],autocomplete:[`on`,`off`],autofocus:[`autofocus`],checked:[`checked`],disabled:[`disabled`],formenctype:B,formmethod:z,formnovalidate:[`novalidate`],formtarget:L,multiple:[`multiple`],readonly:[`readonly`],required:[`required`],type:[`hidden`,`text`,`search`,`tel`,`url`,`email`,`password`,`datetime`,`date`,`month`,`week`,`time`,`datetime-local`,`number`,`range`,`color`,`checkbox`,`radio`,`file`,`submit`,`image`,`reset`,`button`]}},ins:{attrs:{cite:null,datetime:null}},kbd:H,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:[`autofocus`],disabled:[`disabled`],keytype:[`RSA`]}},label:{attrs:{for:null,form:null}},legend:H,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,hreflang:null,media:null,sizes:[`all`,`16x16`,`16x16 32x32`,`16x16 32x32 64x64`]}},map:{attrs:{name:null}},mark:H,menu:{attrs:{label:null,type:[`list`,`context`,`toolbar`]}},meta:{attrs:{content:null,charset:R,name:[`viewport`,`application-name`,`author`,`description`,`generator`,`keywords`],"http-equiv":[`content-language`,`content-type`,`default-style`,`refresh`]}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:H,noscript:H,object:{attrs:{data:null,type:null,name:null,usemap:null,form:null,width:null,height:null,typemustmatch:[`typemustmatch`]}},ol:{attrs:{reversed:[`reversed`],start:null,type:[`1`,`a`,`A`,`i`,`I`]},children:[`li`,`script`,`template`,`ul`,`ol`]},optgroup:{attrs:{disabled:[`disabled`],label:null}},option:{attrs:{disabled:[`disabled`],label:null,selected:[`selected`],value:null}},output:{attrs:{for:null,form:null,name:null}},p:H,param:{attrs:{name:null,value:null}},pre:H,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:H,rt:H,ruby:H,samp:H,script:{attrs:{type:[`text/javascript`],src:null,async:[`async`],defer:[`defer`],charset:R}},section:H,select:{attrs:{form:null,name:null,size:null,autofocus:[`autofocus`],disabled:[`disabled`],multiple:[`multiple`]}},slot:{attrs:{name:null}},small:H,source:{attrs:{src:null,type:null,media:null}},span:H,strong:H,style:{attrs:{type:[`text/css`],media:null,scoped:null}},sub:H,summary:H,sup:H,table:H,tbody:H,td:{attrs:{colspan:null,rowspan:null,headers:null}},template:H,textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,cols:null,autofocus:[`autofocus`],disabled:[`disabled`],readonly:[`readonly`],required:[`required`],wrap:[`soft`,`hard`]}},tfoot:H,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:[`row`,`col`,`rowgroup`,`colgroup`]}},thead:H,time:{attrs:{datetime:null}},title:H,tr:H,track:{attrs:{src:null,label:null,default:null,kind:[`subtitles`,`captions`,`descriptions`,`chapters`,`metadata`],srclang:null}},ul:{children:[`li`,`script`,`template`,`ul`,`ol`]},var:H,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:[`anonymous`,`use-credentials`],preload:[`auto`,`metadata`,`none`],autoplay:[`autoplay`],mediagroup:[`movie`],muted:[`muted`],controls:[`controls`]}},wbr:H},U={accesskey:null,class:null,contenteditable:V,contextmenu:null,dir:[`ltr`,`rtl`,`auto`],draggable:[`true`,`false`,`auto`],dropzone:[`copy`,`move`,`link`,`string:`,`file:`],hidden:[`hidden`],id:null,inert:[`inert`],itemid:null,itemprop:null,itemref:null,itemscope:[`itemscope`],itemtype:null,lang:[`ar`,`bn`,`de`,`en-GB`,`en-US`,`es`,`fr`,`hi`,`id`,`ja`,`pa`,`pt`,`ru`,`tr`,`zh`],spellcheck:V,autocorrect:V,autocapitalize:V,style:null,tabindex:null,title:null,translate:[`yes`,`no`],rel:[`stylesheet`,`alternate`,`author`,`bookmark`,`help`,`license`,`next`,`nofollow`,`noreferrer`,`prefetch`,`prev`,`search`,`tag`],role:`alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer`.split(` `),"aria-activedescendant":null,"aria-atomic":V,"aria-autocomplete":[`inline`,`list`,`both`,`none`],"aria-busy":V,"aria-checked":[`true`,`false`,`mixed`,`undefined`],"aria-controls":null,"aria-describedby":null,"aria-disabled":V,"aria-dropeffect":null,"aria-expanded":[`true`,`false`,`undefined`],"aria-flowto":null,"aria-grabbed":[`true`,`false`,`undefined`],"aria-haspopup":V,"aria-hidden":V,"aria-invalid":[`true`,`false`,`grammar`,`spelling`],"aria-label":null,"aria-labelledby":null,"aria-level":null,"aria-live":[`off`,`polite`,`assertive`],"aria-multiline":V,"aria-multiselectable":V,"aria-owns":null,"aria-posinset":null,"aria-pressed":[`true`,`false`,`mixed`,`undefined`],"aria-readonly":V,"aria-relevant":null,"aria-required":V,"aria-selected":[`true`,`false`,`undefined`],"aria-setsize":null,"aria-sort":[`ascending`,`descending`,`none`,`other`],"aria-valuemax":null,"aria-valuemin":null,"aria-valuenow":null,"aria-valuetext":null},W=`beforeunload copy cut dragstart dragover dragleave dragenter dragend drag paste focus blur change click load mousedown mouseenter mouseleave mouseup keydown keyup resize scroll unload`.split(` `).map(e=>`on`+e);for(let e of W)U[e]=null;var G=class{constructor(e,t){this.tags={...Xe,...e},this.globalAttrs={...U,...t},this.allTags=Object.keys(this.tags),this.globalAttrNames=Object.keys(this.globalAttrs)}};G.default=new G;function K(e,t,n=e.length){if(!t)return``;let r=t.firstChild,i=r&&r.getChild(`TagName`);return i?e.sliceString(i.from,Math.min(i.to,n)):``}function q(e,t=!1){for(;e;e=e.parent)if(e.name==`Element`){if(t)t=!1;else return e}return null}function J(e,t,n){return n.tags[K(e,q(t))]?.children||n.allTags}function Y(e,t){let n=[];for(let r=q(t);r&&!r.type.isTop;r=q(r.parent)){let i=K(e,r);if(i&&r.lastChild.name==`CloseTag`)break;i&&n.indexOf(i)<0&&(t.name==`EndTag`||t.from>=r.firstChild.to)&&n.push(i)}return n}var X=/^[:\-\.\w\u00b7-\uffff]*$/;function Z(e,t,n,r,i){let a=/\s*>/.test(e.sliceDoc(i,i+5))?``:`>`,o=q(n,n.name==`StartTag`||n.name==`TagName`);return{from:r,to:i,options:J(e.doc,o,t).map(e=>({label:e,type:`type`})).concat(Y(e.doc,n).map((e,t)=>({label:`/`+e,apply:`/`+e+a,type:`type`,boost:99-t}))),validFor:/^\/?[:\-\.\w\u00b7-\uffff]*$/}}function Q(e,t,n,r){let i=/\s*>/.test(e.sliceDoc(r,r+5))?``:`>`;return{from:n,to:r,options:Y(e.doc,t).map((e,t)=>({label:e,apply:e+i,type:`type`,boost:99-t})),validFor:X}}function Ze(e,t,n,r){let i=[],a=0;for(let r of J(e.doc,n,t))i.push({label:`<`+r,type:`type`});for(let t of Y(e.doc,n))i.push({label:`</`+t+`>`,type:`type`,boost:99-a++});return{from:r,to:r,options:i,validFor:/^<\/?[:\-\.\w\u00b7-\uffff]*$/}}function Qe(e,t,n,r,i){let a=q(n),o=a?t.tags[K(e.doc,a)]:null,s=o&&o.attrs?Object.keys(o.attrs):[];return{from:r,to:i,options:(o&&o.globalAttrs===!1?s:s.length?s.concat(t.globalAttrNames):t.globalAttrNames).map(e=>({label:e,type:`property`})),validFor:X}}function $e(e,t,n,r,i){let a=n.parent?.getChild(`AttributeName`),o=[],s;if(a){let c=e.sliceDoc(a.from,a.to),l=t.globalAttrs[c];if(!l){let r=q(n),i=r?t.tags[K(e.doc,r)]:null;l=i?.attrs&&i.attrs[c]}if(l){let t=e.sliceDoc(r,i).toLowerCase(),n=`"`,a=`"`;/^['"]/.test(t)?(s=t[0]==`"`?/^[^"]*$/:/^[^']*$/,n=``,a=e.sliceDoc(i,i+1)==t[0]?``:t[0],t=t.slice(1),r++):s=/^[^\s<>='"]*$/;for(let e of l)o.push({label:e,apply:n+e+a,type:`constant`})}}return{from:r,to:i,options:o,validFor:s}}function et(e,t){let{state:n,pos:i}=t,a=r(n).resolveInner(i,-1),o=a.resolve(i);for(let e=i,t;o==a&&(t=a.childBefore(e));){let n=t.lastChild;if(!n||!n.type.isError||n.from<n.to)break;o=a=t,e=n.from}return a.name==`TagName`?a.parent&&/CloseTag$/.test(a.parent.name)?Q(n,a,a.from,i):Z(n,e,a,a.from,i):a.name==`StartTag`||a.name==`IncompleteTag`?Z(n,e,a,i,i):a.name==`StartCloseTag`||a.name==`IncompleteCloseTag`?Q(n,a,i,i):a.name==`OpenTag`||a.name==`SelfClosingTag`||a.name==`AttributeName`?Qe(n,e,a,a.name==`AttributeName`?a.from:i,i):a.name==`Is`||a.name==`AttributeValue`||a.name==`UnquotedAttributeValue`?$e(n,e,a,a.name==`Is`?i:a.from,i):t.explicit&&(o.name==`Element`||o.name==`Text`||o.name==`Document`)?Ze(n,e,a,i):null}function tt(e){return et(G.default,e)}function nt(e){let{extraTags:t,extraGlobalAttributes:n}=e,r=n||t?new G(t,n):G.default;return e=>et(r,e)}var rt=d.parser.configure({top:`SingleExpression`}),it=[{tag:`script`,attrs:e=>e.type==`text/typescript`||e.lang==`ts`,parser:le.parser},{tag:`script`,attrs:e=>e.type==`text/babel`||e.type==`text/jsx`,parser:se.parser},{tag:`script`,attrs:e=>e.type==`text/typescript-jsx`,parser:oe.parser},{tag:`script`,attrs(e){return/^(importmap|speculationrules|application\/(.+\+)?json)$/i.test(e.type)},parser:rt},{tag:`script`,attrs(e){return!e.type||/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(e.type)},parser:d.parser},{tag:`style`,attrs(e){return(!e.lang||e.lang==`css`)&&(!e.type||/^(text\/)?(x-)?(stylesheet|css)$/i.test(e.type))},parser:u.parser}],at=[{name:`style`,parser:u.parser.configure({top:`Styles`})}].concat(W.map(e=>({name:e,parser:d.parser}))),ot=te.define({name:`html`,parser:qe.configure({props:[n.add({Element(e){let t=/^(\s*)(<\/)?/.exec(e.textAfter);return e.node.to<=e.pos+t[0].length?e.continue():e.lineIndent(e.node.from)+(t[2]?0:e.unit)},"OpenTag CloseTag SelfClosingTag"(e){return e.column(e.node.from)+e.unit},Document(e){if(e.pos+/\s*/.exec(e.textAfter)[0].length<e.node.to)return e.continue();let t=null,n;for(let n=e.node;;){let e=n.lastChild;if(!e||e.name!=`Element`||e.to!=n.to)break;t=n=e}return t&&!((n=t.lastChild)&&(n.name==`CloseTag`||n.name==`SelfClosingTag`))?e.lineIndent(t.from)+e.unit:null}}),t.add({Element(e){let t=e.firstChild,n=e.lastChild;return!t||t.name!=`OpenTag`?null:{from:t.to,to:n.name==`CloseTag`?n.from:e.to}}}),c.add({"OpenTag CloseTag":e=>e.getChild(`TagName`)})]}),languageData:{commentTokens:{block:{open:`<!--`,close:`-->`}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:`-_`}}),$=ot.configure({wrap:I(it,at)});function st(e={}){let t=``,n;e.matchClosingTags===!1&&(t=`noMatch`),e.selfClosingTags===!0&&(t=(t?t+` `:``)+`selfClosing`),(e.nestedLanguages&&e.nestedLanguages.length||e.nestedAttributes&&e.nestedAttributes.length)&&(n=I((e.nestedLanguages||[]).concat(it),(e.nestedAttributes||[]).concat(at)));let r=n?ot.configure({wrap:n,dialect:t}):t?$.configure({dialect:t}):$;return new re(r,[$.data.of({autocomplete:nt(e)}),e.autoCloseTags===!1?[]:ut,ce().support,ae().support])}var ct=new Set(`area base br col command embed frame hr img input keygen link meta param source track wbr menuitem`.split(` `));function lt(e,t,n){for(;;){if(t.lastChild?.name!=`CloseTag`)return!1;let r=t.parent;if(!r||K(e,r)!=n)return!0;t=r}}var ut=s.inputHandler.of((e,t,n,i,a)=>{if(e.composing||e.state.readOnly||t!=n||i!=`>`&&i!=`/`||!$.isActiveAt(e.state,t,-1))return!1;let o=a(),{state:s}=o,c=s.changeByRange(e=>{let t=s.doc.sliceString(e.from-1,e.to)==i,{head:n}=e,a=r(s).resolveInner(n,-1),o;if(t&&i==`>`&&a.name==`EndTag`){let t=a.parent;if((o=K(s.doc,t.parent,n))&&!ct.has(o)&&!lt(s.doc,t.parent,o))return{range:e,changes:{from:n,to:n+ +(s.doc.sliceString(n,n+1)===`>`),insert:`</${o}>`}}}else if(t&&i==`/`&&a.name==`IncompleteCloseTag`){let e=a.parent;if(a.from==n-2&&e.lastChild?.name!=`CloseTag`&&(o=K(s.doc,e,n))&&!ct.has(o)){let e=n+ +(s.doc.sliceString(n,n+1)===`>`),t=`${o}>`;return{range:ie.cursor(n+t.length,-1),changes:{from:n,to:e,insert:t}}}}return{range:e}});return!c.changes.empty&&(e.dispatch([o,s.update(c,{userEvent:`input.complete`,scrollIntoView:!0})]),!0)});export{st as n,tt as r,Ye as t};
|
|
1
|
+
import{o as e}from"./index-IAuwD22j.js";import{C as t,D as n,F as r,L as i,R as a,Ut as o,V as s,m as c,n as l,r as ee,s as te,t as ne,u as re,vt as ie}from"./dist-CYzOYk_e.js";import{n as u,t as ae}from"./dist-u_oAKIhZ.js";import{a as oe,i as se,n as ce,o as le,r as d}from"./dist-DKduisGW.js";var ue=55,de=1,fe=56,pe=2,me=57,he=3,f=4,ge=5,p=6,m=7,h=8,g=9,_=10,_e=11,ve=12,ye=13,v=58,be=14,xe=15,y=59,b=21,Se=23,x=24,Ce=25,S=27,C=28,we=29,Te=32,Ee=35,De=37,Oe=38,ke=0,Ae=1,je={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},Me={dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},w={dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}};function Ne(e){return e==45||e==46||e==58||e>=65&&e<=90||e==95||e>=97&&e<=122||e>=161}var T=null,E=null,D=0;function O(e,t){let n=e.pos+t;if(D==n&&E==e)return T;let r=e.peek(t),i=``;for(;Ne(r);)i+=String.fromCharCode(r),r=e.peek(++t);return E=e,D=n,T=i?i.toLowerCase():r==Pe||r==Fe?void 0:null}var k=60,A=62,j=47,Pe=63,Fe=33,Ie=45;function M(e,t){this.name=e,this.parent=t}var Le=[p,_,m,h,g],Re=new ne({start:null,shift(e,t,n,r){return Le.indexOf(t)>-1?new M(O(r,1)||``,e):e},reduce(e,t){return t==b&&e?e.parent:e},reuse(e,t,n,r){let i=t.type.id;return i==p||i==De?new M(O(r,1)||``,e):e},strict:!1}),ze=new l((e,t)=>{if(e.next!=k){e.next<0&&t.context&&e.acceptToken(v);return}e.advance();let n=e.next==j;n&&e.advance();let r=O(e,0);if(r===void 0)return;if(!r)return e.acceptToken(n?xe:be);let i=t.context?t.context.name:null;if(n){if(r==i)return e.acceptToken(_e);if(i&&Me[i])return e.acceptToken(v,-2);if(t.dialectEnabled(ke))return e.acceptToken(ve);for(let e=t.context;e;e=e.parent)if(e.name==r)return;e.acceptToken(ye)}else{if(r==`script`)return e.acceptToken(m);if(r==`style`)return e.acceptToken(h);if(r==`textarea`)return e.acceptToken(g);if(je.hasOwnProperty(r))return e.acceptToken(_);i&&w[i]&&w[i][r]?e.acceptToken(v,-1):e.acceptToken(p)}},{contextual:!0}),Be=new l(e=>{for(let t=0,n=0;;n++){if(e.next<0){n&&e.acceptToken(y);break}if(e.next==Ie)t++;else if(e.next==A&&t>=2){n>=3&&e.acceptToken(y,-2);break}else t=0;e.advance()}});function Ve(e){for(;e;e=e.parent)if(e.name==`svg`||e.name==`math`)return!0;return!1}var He=new l((e,t)=>{if(e.next==j&&e.peek(1)==A){let n=t.dialectEnabled(Ae)||Ve(t.context);e.acceptToken(n?ge:f,2)}else e.next==A&&e.acceptToken(f,1)});function N(e,t,n){let r=2+e.length;return new l(i=>{for(let a=0,o=0,s=0;;s++){if(i.next<0){s&&i.acceptToken(t);break}if(a==0&&i.next==k||a==1&&i.next==j||a>=2&&a<r&&i.next==e.charCodeAt(a-2))a++,o++;else if(a==r&&i.next==A){s>o?i.acceptToken(t,-o):i.acceptToken(n,-(o-2));break}else if((i.next==10||i.next==13)&&s){i.acceptToken(t,1);break}else a=o=0;i.advance()}})}var Ue=N(`script`,ue,de),We=N(`style`,fe,pe),Ge=N(`textarea`,me,he),Ke=i({"Text RawText IncompleteTag IncompleteCloseTag":a.content,"StartTag StartCloseTag SelfClosingEndTag EndTag":a.angleBracket,TagName:a.tagName,"MismatchedCloseTag/TagName":[a.tagName,a.invalid],AttributeName:a.attributeName,"AttributeValue UnquotedAttributeValue":a.attributeValue,Is:a.definitionOperator,"EntityReference CharacterReference":a.character,Comment:a.blockComment,ProcessingInst:a.processingInstruction,DoctypeDecl:a.documentMeta}),qe=ee.deserialize({version:14,states:",xOVO!rOOO!ZQ#tO'#CrO!`Q#tO'#C{O!eQ#tO'#DOO!jQ#tO'#DRO!oQ#tO'#DTO!tOaO'#CqO#PObO'#CqO#[OdO'#CqO$kO!rO'#CqOOO`'#Cq'#CqO$rO$fO'#DUO$zQ#tO'#DWO%PQ#tO'#DXOOO`'#Dl'#DlOOO`'#DZ'#DZQVO!rOOO%UQ&rO,59^O%aQ&rO,59gO%lQ&rO,59jO%wQ&rO,59mO&SQ&rO,59oOOOa'#D_'#D_O&_OaO'#CyO&jOaO,59]OOOb'#D`'#D`O&rObO'#C|O&}ObO,59]OOOd'#Da'#DaO'VOdO'#DPO'bOdO,59]OOO`'#Db'#DbO'jO!rO,59]O'qQ#tO'#DSOOO`,59],59]OOOp'#Dc'#DcO'vO$fO,59pOOO`,59p,59pO(OQ#|O,59rO(TQ#|O,59sOOO`-E7X-E7XO(YQ&rO'#CtOOQW'#D['#D[O(hQ&rO1G.xOOOa1G.x1G.xOOO`1G/Z1G/ZO(sQ&rO1G/ROOOb1G/R1G/RO)OQ&rO1G/UOOOd1G/U1G/UO)ZQ&rO1G/XOOO`1G/X1G/XO)fQ&rO1G/ZOOOa-E7]-E7]O)qQ#tO'#CzOOO`1G.w1G.wOOOb-E7^-E7^O)vQ#tO'#C}OOOd-E7_-E7_O){Q#tO'#DQOOO`-E7`-E7`O*QQ#|O,59nOOOp-E7a-E7aOOO`1G/[1G/[OOO`1G/^1G/^OOO`1G/_1G/_O*VQ,UO,59`OOQW-E7Y-E7YOOOa7+$d7+$dOOO`7+$u7+$uOOOb7+$m7+$mOOOd7+$p7+$pOOO`7+$s7+$sO*bQ#|O,59fO*gQ#|O,59iO*lQ#|O,59lOOO`1G/Y1G/YO*qO7[O'#CwO+SOMhO'#CwOOQW1G.z1G.zOOO`1G/Q1G/QOOO`1G/T1G/TOOO`1G/W1G/WOOOO'#D]'#D]O+eO7[O,59cOOQW,59c,59cOOOO'#D^'#D^O+vOMhO,59cOOOO-E7Z-E7ZOOQW1G.}1G.}OOOO-E7[-E7[",stateData:`,c~O!_OS~OUSOVPOWQOXROYTO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O|_O!eZO~OgaO~OgbO~OgcO~OgdO~OgeO~O!XfOPmP![mP~O!YiOQpP![pP~O!ZlORsP![sP~OUSOVPOWQOXROYTOZqO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O!eZO~O![rO~P#gO!]sO!fuO~OgvO~OgwO~OS|OT}OiyO~OS!POT}OiyO~OS!ROT}OiyO~OS!TOT}OiyO~OS}OT}OiyO~O!XfOPmX![mX~OP!WO![!XO~O!YiOQpX![pX~OQ!ZO![!XO~O!ZlORsX![sX~OR!]O![!XO~O![!XO~P#gOg!_O~O!]sO!f!aO~OS!bO~OS!cO~Oj!dOShXThXihX~OS!fOT!gOiyO~OS!hOT!gOiyO~OS!iOT!gOiyO~OS!jOT!gOiyO~OS!gOT!gOiyO~Og!kO~Og!lO~Og!mO~OS!nO~Ol!qO!a!oO!c!pO~OS!rO~OS!sO~OS!tO~Ob!uOc!uOd!uO!a!wO!b!uO~Ob!xOc!xOd!xO!c!wO!d!xO~Ob!uOc!uOd!uO!a!{O!b!uO~Ob!xOc!xOd!xO!c!{O!d!xO~OT~cbd!ey|!e~`,goto:"%q!aPPPPPPPPPPPPPPPPPPPPP!b!hP!nPP!zP!}#Q#T#Z#^#a#g#j#m#s#y!bP!b!bP$P$V$m$s$y%P%V%]%cPPPPPPPP%iX^OX`pXUOX`pezabcde{!O!Q!S!UR!q!dRhUR!XhXVOX`pRkVR!XkXWOX`pRnWR!XnXXOX`pQrXR!XpXYOX`pQ`ORx`Q{aQ!ObQ!QcQ!SdQ!UeZ!e{!O!Q!S!UQ!v!oR!z!vQ!y!pR!|!yQgUR!VgQjVR!YjQmWR![mQpXR!^pQtZR!`tS_O`ToXp",nodeNames:`⚠ StartCloseTag StartCloseTag StartCloseTag EndTag SelfClosingEndTag StartTag StartTag StartTag StartTag StartTag StartCloseTag StartCloseTag StartCloseTag IncompleteTag IncompleteCloseTag Document Text EntityReference CharacterReference InvalidEntity Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue ScriptText CloseTag OpenTag StyleText CloseTag OpenTag TextareaText CloseTag OpenTag CloseTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag CloseTag DoctypeDecl`,maxTerm:68,context:Re,nodeProps:[[`closedBy`,-10,1,2,3,7,8,9,10,11,12,13,`EndTag`,6,`EndTag SelfClosingEndTag`,-4,22,31,34,37,`CloseTag`],[`openedBy`,4,`StartTag StartCloseTag`,5,`StartTag`,-4,30,33,36,38,`OpenTag`],[`group`,-10,14,15,18,19,20,21,40,41,42,43,`Entity`,17,`Entity TextContent`,-3,29,32,35,`TextContent Entity`],[`isolate`,-11,22,30,31,33,34,36,37,38,39,42,43,`ltr`,-3,27,28,40,``]],propSources:[Ke],skippedNodes:[0],repeatNodeCount:9,tokenData:"!<p!aR!YOX$qXY,QYZ,QZ[$q[]&X]^,Q^p$qpq,Qqr-_rs3_sv-_vw3}wxHYx}-_}!OH{!O!P-_!P!Q$q!Q![-_![!]Mz!]!^-_!^!_!$S!_!`!;x!`!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4U-_4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!Z$|caPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr$qrs&}sv$qvw+Pwx(tx!^$q!^!_*V!_!a&X!a#S$q#S#T&X#T;'S$q;'S;=`+z<%lO$q!R&bXaP!b`!dpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&Xq'UVaP!dpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}P'pTaPOv'kw!^'k!_;'S'k;'S;=`(P<%lO'kP(SP;=`<%l'kp([S!dpOv(Vx;'S(V;'S;=`(h<%lO(Vp(kP;=`<%l(Vq(qP;=`<%l&}a({WaP!b`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t`)jT!b`Or)esv)ew;'S)e;'S;=`)y<%lO)e`)|P;=`<%l)ea*SP;=`<%l(t!Q*^V!b`!dpOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!Q*vP;=`<%l*V!R*|P;=`<%l&XW+UYlWOX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+PW+wP;=`<%l+P!Z+}P;=`<%l$q!a,]`aP!b`!dp!_^OX&XXY,QYZ,QZ]&X]^,Q^p&Xpq,Qqr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!_-ljiSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q[/ebiSlWOX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+PS0rXiSqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0mS1bP;=`<%l0m[1hP;=`<%l/^!V1vciSaP!b`!dpOq&Xqr1krs&}sv1kvw0mwx(tx!P1k!P!Q&X!Q!^1k!^!_*V!_!a&X!a#s1k#s$f&X$f;'S1k;'S;=`3R<%l?Ah1k?Ah?BY&X?BY?Mn1k?MnO&X!V3UP;=`<%l1k!_3[P;=`<%l-_!Z3hV!ahaP!dpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}!_4WiiSlWd!ROX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst>]tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^/^!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!Z5zblWOX5uXZ7SZ[5u[^7S^p5uqr5urs7Sst+Ptw5uwx7Sx!]5u!]!^7w!^!a7S!a#S5u#S#T7S#T;'S5u;'S;=`8n<%lO5u!R7VVOp7Sqs7St!]7S!]!^7l!^;'S7S;'S;=`7q<%lO7S!R7qOb!R!R7tP;=`<%l7S!Z8OYlWb!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!Z8qP;=`<%l5u!_8{iiSlWOX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst/^tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^:j!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!_:sbiSlWb!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!V<QciSOp7Sqr;{rs7Sst0mtw;{wx7Sx!P;{!P!Q7S!Q!];{!]!^=]!^!a7S!a#s;{#s$f7S$f;'S;{;'S;=`>P<%l?Ah;{?Ah?BY7S?BY?Mn;{?MnO7S!V=dXiSb!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!V>SP;=`<%l;{!_>YP;=`<%l8t!_>dhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^/^!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!Z@TalWOX@OXZAYZ[@O[^AY^p@Oqr@OrsAYsw@OwxAYx!]@O!]!^Az!^!aAY!a#S@O#S#TAY#T;'S@O;'S;=`Bq<%lO@O!RA]UOpAYq!]AY!]!^Ao!^;'SAY;'S;=`At<%lOAY!RAtOc!R!RAwP;=`<%lAY!ZBRYlWc!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!ZBtP;=`<%l@O!_COhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^Dj!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!_DsbiSlWc!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VFQbiSOpAYqrE{rsAYswE{wxAYx!PE{!P!QAY!Q!]E{!]!^GY!^!aAY!a#sE{#s$fAY$f;'SE{;'S;=`G|<%l?AhE{?Ah?BYAY?BY?MnE{?MnOAY!VGaXiSc!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!VHPP;=`<%lE{!_HVP;=`<%lBw!ZHcW!cxaP!b`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t!aIYliSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OKQ!O!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!aK_kiSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!`&X!`!aMS!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!TM_XaP!b`!dp!fQOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!aNZ!ZiSgQaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OMz!O!PMz!P!Q$q!Q![Mz![!]Mz!]!^-_!^!_*V!_!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f$}-_$}%OMz%O%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4UMz4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Je-_$Je$JgMz$Jg$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!a!$PP;=`<%lMz!R!$ZY!b`!dpOq*Vqr!$yrs(Vsv*Vwx)ex!a*V!a!b!4t!b;'S*V;'S;=`*s<%lO*V!R!%Q]!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!%y!O!f*V!f!g!']!g#W*V#W#X!0`#X;'S*V;'S;=`*s<%lO*V!R!&QX!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!&m!O;'S*V;'S;=`*s<%lO*V!R!&vV!b`!dp!ePOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!'dX!b`!dpOr*Vrs(Vsv*Vwx)ex!q*V!q!r!(P!r;'S*V;'S;=`*s<%lO*V!R!(WX!b`!dpOr*Vrs(Vsv*Vwx)ex!e*V!e!f!(s!f;'S*V;'S;=`*s<%lO*V!R!(zX!b`!dpOr*Vrs(Vsv*Vwx)ex!v*V!v!w!)g!w;'S*V;'S;=`*s<%lO*V!R!)nX!b`!dpOr*Vrs(Vsv*Vwx)ex!{*V!{!|!*Z!|;'S*V;'S;=`*s<%lO*V!R!*bX!b`!dpOr*Vrs(Vsv*Vwx)ex!r*V!r!s!*}!s;'S*V;'S;=`*s<%lO*V!R!+UX!b`!dpOr*Vrs(Vsv*Vwx)ex!g*V!g!h!+q!h;'S*V;'S;=`*s<%lO*V!R!+xY!b`!dpOr!+qrs!,hsv!+qvw!-Swx!.[x!`!+q!`!a!/j!a;'S!+q;'S;=`!0Y<%lO!+qq!,mV!dpOv!,hvx!-Sx!`!,h!`!a!-q!a;'S!,h;'S;=`!.U<%lO!,hP!-VTO!`!-S!`!a!-f!a;'S!-S;'S;=`!-k<%lO!-SP!-kO|PP!-nP;=`<%l!-Sq!-xS!dp|POv(Vx;'S(V;'S;=`(h<%lO(Vq!.XP;=`<%l!,ha!.aX!b`Or!.[rs!-Ssv!.[vw!-Sw!`!.[!`!a!.|!a;'S!.[;'S;=`!/d<%lO!.[a!/TT!b`|POr)esv)ew;'S)e;'S;=`)y<%lO)ea!/gP;=`<%l!.[!R!/sV!b`!dp|POr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!0]P;=`<%l!+q!R!0gX!b`!dpOr*Vrs(Vsv*Vwx)ex#c*V#c#d!1S#d;'S*V;'S;=`*s<%lO*V!R!1ZX!b`!dpOr*Vrs(Vsv*Vwx)ex#V*V#V#W!1v#W;'S*V;'S;=`*s<%lO*V!R!1}X!b`!dpOr*Vrs(Vsv*Vwx)ex#h*V#h#i!2j#i;'S*V;'S;=`*s<%lO*V!R!2qX!b`!dpOr*Vrs(Vsv*Vwx)ex#m*V#m#n!3^#n;'S*V;'S;=`*s<%lO*V!R!3eX!b`!dpOr*Vrs(Vsv*Vwx)ex#d*V#d#e!4Q#e;'S*V;'S;=`*s<%lO*V!R!4XX!b`!dpOr*Vrs(Vsv*Vwx)ex#X*V#X#Y!+q#Y;'S*V;'S;=`*s<%lO*V!R!4{Y!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!a!4t!a!b!:]!b;'S!4t;'S;=`!;r<%lO!4tq!5pV!dpOv!5kvx!6Vx!a!5k!a!b!7W!b;'S!5k;'S;=`!8V<%lO!5kP!6YTO!a!6V!a!b!6i!b;'S!6V;'S;=`!7Q<%lO!6VP!6lTO!`!6V!`!a!6{!a;'S!6V;'S;=`!7Q<%lO!6VP!7QOyPP!7TP;=`<%l!6Vq!7]V!dpOv!5kvx!6Vx!`!5k!`!a!7r!a;'S!5k;'S;=`!8V<%lO!5kq!7yS!dpyPOv(Vx;'S(V;'S;=`(h<%lO(Vq!8YP;=`<%l!5ka!8bX!b`Or!8]rs!6Vsv!8]vw!6Vw!a!8]!a!b!8}!b;'S!8];'S;=`!:V<%lO!8]a!9SX!b`Or!8]rs!6Vsv!8]vw!6Vw!`!8]!`!a!9o!a;'S!8];'S;=`!:V<%lO!8]a!9vT!b`yPOr)esv)ew;'S)e;'S;=`)y<%lO)ea!:YP;=`<%l!8]!R!:dY!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!`!4t!`!a!;S!a;'S!4t;'S;=`!;r<%lO!4t!R!;]V!b`!dpyPOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!;uP;=`<%l!4t!V!<TXjSaP!b`!dpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X",tokenizers:[Ue,We,Ge,He,ze,Be,0,1,2,3,4,5],topRules:{Document:[0,16]},dialects:{noMatch:0,selfClosing:515},tokenPrec:517});function P(e,t){let n=Object.create(null);for(let r of e.getChildren(x)){let e=r.getChild(Ce),i=r.getChild(S)||r.getChild(C);e&&(n[t.read(e.from,e.to)]=i?i.type.id==S?t.read(i.from+1,i.to-1):t.read(i.from,i.to):``)}return n}function Je(e,t){let n=e.getChild(Se);return n?t.read(n.from,n.to):` `}function F(e,t,n){let r;for(let i of n)if(!i.attrs||i.attrs(r||=P(e.node.parent.firstChild,t)))return{parser:i.parser,bracketed:!0};return null}function I(e=[],t=[]){let n=[],r=[],i=[],a=[];for(let t of e)(t.tag==`script`?n:t.tag==`style`?r:t.tag==`textarea`?i:a).push(t);let s=t.length?Object.create(null):null;for(let e of t)(s[e.name]||(s[e.name]=[])).push(e);return o((e,t)=>{let o=e.type.id;if(o==we)return F(e,t,n);if(o==Te)return F(e,t,r);if(o==Ee)return F(e,t,i);if(o==b&&a.length){let n=e.node,r=n.firstChild,i=r&&Je(r,t),o;if(i){for(let e of a)if(e.tag==i&&(!e.attrs||e.attrs(o||=P(r,t)))){let t=n.lastChild,i=t.type.id==Oe?t.from:n.to;if(i>r.to)return{parser:e.parser,overlay:[{from:r.to,to:i}]}}}}if(s&&o==x){let n=e.node,r;if(r=n.firstChild){let e=s[t.read(r.from,r.to)];if(e)for(let r of e){if(r.tagName&&r.tagName!=Je(n.parent,t))continue;let e=n.lastChild;if(e.type.id==S){let t=e.from+1,n=e.lastChild,i=e.to-(n&&n.isError?0:1);if(i>t)return{parser:r.parser,overlay:[{from:t,to:i}],bracketed:!0}}else if(e.type.id==C)return{parser:r.parser,overlay:[{from:e.from,to:e.to}]}}}}return null})}var Ye=e({autoCloseTags:()=>ut,html:()=>st,htmlCompletionSource:()=>tt,htmlCompletionSourceWith:()=>nt,htmlLanguage:()=>$}),L=[`_blank`,`_self`,`_top`,`_parent`],R=[`ascii`,`utf-8`,`utf-16`,`latin1`,`latin1`],z=[`get`,`post`,`put`,`delete`],B=[`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`],V=[`true`,`false`],H={},Xe={a:{attrs:{href:null,ping:null,type:null,media:null,target:L,hreflang:null}},abbr:H,address:H,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:null,hreflang:null,type:null,shape:[`default`,`rect`,`circle`,`poly`]}},article:H,aside:H,audio:{attrs:{src:null,mediagroup:null,crossorigin:[`anonymous`,`use-credentials`],preload:[`none`,`metadata`,`auto`],autoplay:[`autoplay`],loop:[`loop`],controls:[`controls`]}},b:H,base:{attrs:{href:null,target:L}},bdi:H,bdo:H,blockquote:{attrs:{cite:null}},body:H,br:H,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:[`autofocus`],disabled:[`autofocus`],formenctype:B,formmethod:z,formnovalidate:[`novalidate`],formtarget:L,type:[`submit`,`reset`,`button`]}},canvas:{attrs:{width:null,height:null}},caption:H,center:H,cite:H,code:H,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:[`command`,`checkbox`,`radio`],label:null,icon:null,radiogroup:null,command:null,title:null,disabled:[`disabled`],checked:[`checked`]}},data:{attrs:{value:null}},datagrid:{attrs:{disabled:[`disabled`],multiple:[`multiple`]}},datalist:{attrs:{data:null}},dd:H,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:[`open`]}},dfn:H,div:H,dl:H,dt:H,em:H,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:[`disabled`],form:null,name:null}},figcaption:H,figure:H,footer:H,form:{attrs:{action:null,name:null,"accept-charset":R,autocomplete:[`on`,`off`],enctype:B,method:z,novalidate:[`novalidate`],target:L}},h1:H,h2:H,h3:H,h4:H,h5:H,h6:H,head:{children:[`title`,`base`,`link`,`style`,`meta`,`script`,`noscript`,`command`]},header:H,hgroup:H,hr:H,html:{attrs:{manifest:null}},i:H,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:[`allow-top-navigation`,`allow-same-origin`,`allow-forms`,`allow-scripts`],seamless:[`seamless`]}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,width:null,height:null,crossorigin:[`anonymous`,`use-credentials`]}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:[`audio/*`,`video/*`,`image/*`],autocomplete:[`on`,`off`],autofocus:[`autofocus`],checked:[`checked`],disabled:[`disabled`],formenctype:B,formmethod:z,formnovalidate:[`novalidate`],formtarget:L,multiple:[`multiple`],readonly:[`readonly`],required:[`required`],type:[`hidden`,`text`,`search`,`tel`,`url`,`email`,`password`,`datetime`,`date`,`month`,`week`,`time`,`datetime-local`,`number`,`range`,`color`,`checkbox`,`radio`,`file`,`submit`,`image`,`reset`,`button`]}},ins:{attrs:{cite:null,datetime:null}},kbd:H,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:[`autofocus`],disabled:[`disabled`],keytype:[`RSA`]}},label:{attrs:{for:null,form:null}},legend:H,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,hreflang:null,media:null,sizes:[`all`,`16x16`,`16x16 32x32`,`16x16 32x32 64x64`]}},map:{attrs:{name:null}},mark:H,menu:{attrs:{label:null,type:[`list`,`context`,`toolbar`]}},meta:{attrs:{content:null,charset:R,name:[`viewport`,`application-name`,`author`,`description`,`generator`,`keywords`],"http-equiv":[`content-language`,`content-type`,`default-style`,`refresh`]}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:H,noscript:H,object:{attrs:{data:null,type:null,name:null,usemap:null,form:null,width:null,height:null,typemustmatch:[`typemustmatch`]}},ol:{attrs:{reversed:[`reversed`],start:null,type:[`1`,`a`,`A`,`i`,`I`]},children:[`li`,`script`,`template`,`ul`,`ol`]},optgroup:{attrs:{disabled:[`disabled`],label:null}},option:{attrs:{disabled:[`disabled`],label:null,selected:[`selected`],value:null}},output:{attrs:{for:null,form:null,name:null}},p:H,param:{attrs:{name:null,value:null}},pre:H,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:H,rt:H,ruby:H,samp:H,script:{attrs:{type:[`text/javascript`],src:null,async:[`async`],defer:[`defer`],charset:R}},section:H,select:{attrs:{form:null,name:null,size:null,autofocus:[`autofocus`],disabled:[`disabled`],multiple:[`multiple`]}},slot:{attrs:{name:null}},small:H,source:{attrs:{src:null,type:null,media:null}},span:H,strong:H,style:{attrs:{type:[`text/css`],media:null,scoped:null}},sub:H,summary:H,sup:H,table:H,tbody:H,td:{attrs:{colspan:null,rowspan:null,headers:null}},template:H,textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,cols:null,autofocus:[`autofocus`],disabled:[`disabled`],readonly:[`readonly`],required:[`required`],wrap:[`soft`,`hard`]}},tfoot:H,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:[`row`,`col`,`rowgroup`,`colgroup`]}},thead:H,time:{attrs:{datetime:null}},title:H,tr:H,track:{attrs:{src:null,label:null,default:null,kind:[`subtitles`,`captions`,`descriptions`,`chapters`,`metadata`],srclang:null}},ul:{children:[`li`,`script`,`template`,`ul`,`ol`]},var:H,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:[`anonymous`,`use-credentials`],preload:[`auto`,`metadata`,`none`],autoplay:[`autoplay`],mediagroup:[`movie`],muted:[`muted`],controls:[`controls`]}},wbr:H},U={accesskey:null,class:null,contenteditable:V,contextmenu:null,dir:[`ltr`,`rtl`,`auto`],draggable:[`true`,`false`,`auto`],dropzone:[`copy`,`move`,`link`,`string:`,`file:`],hidden:[`hidden`],id:null,inert:[`inert`],itemid:null,itemprop:null,itemref:null,itemscope:[`itemscope`],itemtype:null,lang:[`ar`,`bn`,`de`,`en-GB`,`en-US`,`es`,`fr`,`hi`,`id`,`ja`,`pa`,`pt`,`ru`,`tr`,`zh`],spellcheck:V,autocorrect:V,autocapitalize:V,style:null,tabindex:null,title:null,translate:[`yes`,`no`],rel:[`stylesheet`,`alternate`,`author`,`bookmark`,`help`,`license`,`next`,`nofollow`,`noreferrer`,`prefetch`,`prev`,`search`,`tag`],role:`alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer`.split(` `),"aria-activedescendant":null,"aria-atomic":V,"aria-autocomplete":[`inline`,`list`,`both`,`none`],"aria-busy":V,"aria-checked":[`true`,`false`,`mixed`,`undefined`],"aria-controls":null,"aria-describedby":null,"aria-disabled":V,"aria-dropeffect":null,"aria-expanded":[`true`,`false`,`undefined`],"aria-flowto":null,"aria-grabbed":[`true`,`false`,`undefined`],"aria-haspopup":V,"aria-hidden":V,"aria-invalid":[`true`,`false`,`grammar`,`spelling`],"aria-label":null,"aria-labelledby":null,"aria-level":null,"aria-live":[`off`,`polite`,`assertive`],"aria-multiline":V,"aria-multiselectable":V,"aria-owns":null,"aria-posinset":null,"aria-pressed":[`true`,`false`,`mixed`,`undefined`],"aria-readonly":V,"aria-relevant":null,"aria-required":V,"aria-selected":[`true`,`false`,`undefined`],"aria-setsize":null,"aria-sort":[`ascending`,`descending`,`none`,`other`],"aria-valuemax":null,"aria-valuemin":null,"aria-valuenow":null,"aria-valuetext":null},W=`beforeunload copy cut dragstart dragover dragleave dragenter dragend drag paste focus blur change click load mousedown mouseenter mouseleave mouseup keydown keyup resize scroll unload`.split(` `).map(e=>`on`+e);for(let e of W)U[e]=null;var G=class{constructor(e,t){this.tags={...Xe,...e},this.globalAttrs={...U,...t},this.allTags=Object.keys(this.tags),this.globalAttrNames=Object.keys(this.globalAttrs)}};G.default=new G;function K(e,t,n=e.length){if(!t)return``;let r=t.firstChild,i=r&&r.getChild(`TagName`);return i?e.sliceString(i.from,Math.min(i.to,n)):``}function q(e,t=!1){for(;e;e=e.parent)if(e.name==`Element`){if(t)t=!1;else return e}return null}function J(e,t,n){return n.tags[K(e,q(t))]?.children||n.allTags}function Y(e,t){let n=[];for(let r=q(t);r&&!r.type.isTop;r=q(r.parent)){let i=K(e,r);if(i&&r.lastChild.name==`CloseTag`)break;i&&n.indexOf(i)<0&&(t.name==`EndTag`||t.from>=r.firstChild.to)&&n.push(i)}return n}var X=/^[:\-\.\w\u00b7-\uffff]*$/;function Z(e,t,n,r,i){let a=/\s*>/.test(e.sliceDoc(i,i+5))?``:`>`,o=q(n,n.name==`StartTag`||n.name==`TagName`);return{from:r,to:i,options:J(e.doc,o,t).map(e=>({label:e,type:`type`})).concat(Y(e.doc,n).map((e,t)=>({label:`/`+e,apply:`/`+e+a,type:`type`,boost:99-t}))),validFor:/^\/?[:\-\.\w\u00b7-\uffff]*$/}}function Q(e,t,n,r){let i=/\s*>/.test(e.sliceDoc(r,r+5))?``:`>`;return{from:n,to:r,options:Y(e.doc,t).map((e,t)=>({label:e,apply:e+i,type:`type`,boost:99-t})),validFor:X}}function Ze(e,t,n,r){let i=[],a=0;for(let r of J(e.doc,n,t))i.push({label:`<`+r,type:`type`});for(let t of Y(e.doc,n))i.push({label:`</`+t+`>`,type:`type`,boost:99-a++});return{from:r,to:r,options:i,validFor:/^<\/?[:\-\.\w\u00b7-\uffff]*$/}}function Qe(e,t,n,r,i){let a=q(n),o=a?t.tags[K(e.doc,a)]:null,s=o&&o.attrs?Object.keys(o.attrs):[];return{from:r,to:i,options:(o&&o.globalAttrs===!1?s:s.length?s.concat(t.globalAttrNames):t.globalAttrNames).map(e=>({label:e,type:`property`})),validFor:X}}function $e(e,t,n,r,i){let a=n.parent?.getChild(`AttributeName`),o=[],s;if(a){let c=e.sliceDoc(a.from,a.to),l=t.globalAttrs[c];if(!l){let r=q(n),i=r?t.tags[K(e.doc,r)]:null;l=i?.attrs&&i.attrs[c]}if(l){let t=e.sliceDoc(r,i).toLowerCase(),n=`"`,a=`"`;/^['"]/.test(t)?(s=t[0]==`"`?/^[^"]*$/:/^[^']*$/,n=``,a=e.sliceDoc(i,i+1)==t[0]?``:t[0],t=t.slice(1),r++):s=/^[^\s<>='"]*$/;for(let e of l)o.push({label:e,apply:n+e+a,type:`constant`})}}return{from:r,to:i,options:o,validFor:s}}function et(e,t){let{state:n,pos:i}=t,a=r(n).resolveInner(i,-1),o=a.resolve(i);for(let e=i,t;o==a&&(t=a.childBefore(e));){let n=t.lastChild;if(!n||!n.type.isError||n.from<n.to)break;o=a=t,e=n.from}return a.name==`TagName`?a.parent&&/CloseTag$/.test(a.parent.name)?Q(n,a,a.from,i):Z(n,e,a,a.from,i):a.name==`StartTag`||a.name==`IncompleteTag`?Z(n,e,a,i,i):a.name==`StartCloseTag`||a.name==`IncompleteCloseTag`?Q(n,a,i,i):a.name==`OpenTag`||a.name==`SelfClosingTag`||a.name==`AttributeName`?Qe(n,e,a,a.name==`AttributeName`?a.from:i,i):a.name==`Is`||a.name==`AttributeValue`||a.name==`UnquotedAttributeValue`?$e(n,e,a,a.name==`Is`?i:a.from,i):t.explicit&&(o.name==`Element`||o.name==`Text`||o.name==`Document`)?Ze(n,e,a,i):null}function tt(e){return et(G.default,e)}function nt(e){let{extraTags:t,extraGlobalAttributes:n}=e,r=n||t?new G(t,n):G.default;return e=>et(r,e)}var rt=d.parser.configure({top:`SingleExpression`}),it=[{tag:`script`,attrs:e=>e.type==`text/typescript`||e.lang==`ts`,parser:le.parser},{tag:`script`,attrs:e=>e.type==`text/babel`||e.type==`text/jsx`,parser:se.parser},{tag:`script`,attrs:e=>e.type==`text/typescript-jsx`,parser:oe.parser},{tag:`script`,attrs(e){return/^(importmap|speculationrules|application\/(.+\+)?json)$/i.test(e.type)},parser:rt},{tag:`script`,attrs(e){return!e.type||/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(e.type)},parser:d.parser},{tag:`style`,attrs(e){return(!e.lang||e.lang==`css`)&&(!e.type||/^(text\/)?(x-)?(stylesheet|css)$/i.test(e.type))},parser:u.parser}],at=[{name:`style`,parser:u.parser.configure({top:`Styles`})}].concat(W.map(e=>({name:e,parser:d.parser}))),ot=te.define({name:`html`,parser:qe.configure({props:[n.add({Element(e){let t=/^(\s*)(<\/)?/.exec(e.textAfter);return e.node.to<=e.pos+t[0].length?e.continue():e.lineIndent(e.node.from)+(t[2]?0:e.unit)},"OpenTag CloseTag SelfClosingTag"(e){return e.column(e.node.from)+e.unit},Document(e){if(e.pos+/\s*/.exec(e.textAfter)[0].length<e.node.to)return e.continue();let t=null,n;for(let n=e.node;;){let e=n.lastChild;if(!e||e.name!=`Element`||e.to!=n.to)break;t=n=e}return t&&!((n=t.lastChild)&&(n.name==`CloseTag`||n.name==`SelfClosingTag`))?e.lineIndent(t.from)+e.unit:null}}),t.add({Element(e){let t=e.firstChild,n=e.lastChild;return!t||t.name!=`OpenTag`?null:{from:t.to,to:n.name==`CloseTag`?n.from:e.to}}}),c.add({"OpenTag CloseTag":e=>e.getChild(`TagName`)})]}),languageData:{commentTokens:{block:{open:`<!--`,close:`-->`}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:`-_`}}),$=ot.configure({wrap:I(it,at)});function st(e={}){let t=``,n;e.matchClosingTags===!1&&(t=`noMatch`),e.selfClosingTags===!0&&(t=(t?t+` `:``)+`selfClosing`),(e.nestedLanguages&&e.nestedLanguages.length||e.nestedAttributes&&e.nestedAttributes.length)&&(n=I((e.nestedLanguages||[]).concat(it),(e.nestedAttributes||[]).concat(at)));let r=n?ot.configure({wrap:n,dialect:t}):t?$.configure({dialect:t}):$;return new re(r,[$.data.of({autocomplete:nt(e)}),e.autoCloseTags===!1?[]:ut,ce().support,ae().support])}var ct=new Set(`area base br col command embed frame hr img input keygen link meta param source track wbr menuitem`.split(` `));function lt(e,t,n){for(;;){if(t.lastChild?.name!=`CloseTag`)return!1;let r=t.parent;if(!r||K(e,r)!=n)return!0;t=r}}var ut=s.inputHandler.of((e,t,n,i,a)=>{if(e.composing||e.state.readOnly||t!=n||i!=`>`&&i!=`/`||!$.isActiveAt(e.state,t,-1))return!1;let o=a(),{state:s}=o,c=s.changeByRange(e=>{let t=s.doc.sliceString(e.from-1,e.to)==i,{head:n}=e,a=r(s).resolveInner(n,-1),o;if(t&&i==`>`&&a.name==`EndTag`){let t=a.parent;if((o=K(s.doc,t.parent,n))&&!ct.has(o)&&!lt(s.doc,t.parent,o))return{range:e,changes:{from:n,to:n+ +(s.doc.sliceString(n,n+1)===`>`),insert:`</${o}>`}}}else if(t&&i==`/`&&a.name==`IncompleteCloseTag`){let e=a.parent;if(a.from==n-2&&e.lastChild?.name!=`CloseTag`&&(o=K(s.doc,e,n))&&!ct.has(o)){let e=n+ +(s.doc.sliceString(n,n+1)===`>`),t=`${o}>`;return{range:ie.cursor(n+t.length,-1),changes:{from:n,to:e,insert:t}}}}return{range:e}});return!c.changes.empty&&(e.dispatch([o,s.update(c,{userEvent:`input.complete`,scrollIntoView:!0})]),!0)});export{st as n,tt as r,Ye as t};
|