@tryvitris/website-harness 1.0.2 → 1.1.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 +76 -74
- package/agent/graph.yaml +769 -764
- package/agent/refs/admin.md +11 -11
- package/agent/refs/browser.md +6 -4
- package/agent/refs/business.md +20 -9
- package/agent/refs/implement.md +8 -6
- package/agent/refs/scheduling.md +13 -0
- package/bin/api/agent/evaluate.js +3 -3
- package/bin/api/agent/grade.js +3 -3
- package/bin/api/cli/api.js +11 -11
- package/bin/api/cli.js +13 -13
- package/bin/api/engine.js +4 -4
- package/bin/api/hosting.js +5 -5
- package/bin/api/index.js +1 -1
- package/bin/chunks/{chunk-Q6FLOYHS.js → chunk-5KRJQKHB.js} +3 -3
- package/bin/chunks/{chunk-YYK6367V.js → chunk-AD7WAHW2.js} +2 -2
- package/bin/chunks/{chunk-GO3XEQBA.js → chunk-AS74YXGM.js} +3 -3
- package/bin/chunks/{chunk-GM57SNLL.js → chunk-DDJ3QCRR.js} +9 -9
- package/bin/chunks/chunk-GPS3SAGQ.js +1020 -0
- package/bin/chunks/{chunk-ATPI2YRF.js → chunk-KR5ZUZV2.js} +2 -2
- package/bin/chunks/{chunk-YYYPSFFZ.js → chunk-MAPY3YVE.js} +2 -2
- package/bin/chunks/{chunk-OQGUEQ6F.js → chunk-MYX4FET4.js} +1 -1
- package/bin/chunks/{chunk-XJTAR7KM.js → chunk-OZD7ZWDX.js} +1 -1
- package/bin/chunks/{chunk-CPQQQ5YB.js → chunk-SBOUSO3S.js} +3 -3
- package/bin/chunks/{chunk-BMD5GVUT.js → chunk-SXPLCCO7.js} +6 -6
- package/bin/chunks/{chunk-QRIYA3GJ.js → chunk-WIT6364Y.js} +3 -3
- package/bin/chunks/{chunk-JPQCUN2J.js → chunk-WK7HJI5H.js} +1 -1
- package/bin/chunks/{design-context-store-BDYBQQCO.js → design-context-store-PGXCHUOF.js} +3 -3
- package/bin/chunks/{packets-RXFWDCK2.js → packets-B7MCJ42T.js} +3 -3
- package/bin/chunks/{preparation-ETEEMB5H.js → preparation-MVKICQPD.js} +3 -3
- package/bin/types/src/build/index.d.ts +2 -0
- package/bin/types/src/cli/admin.d.ts +1 -1
- package/bin/types/src/scheduling/config.d.ts +11 -0
- package/bin/types/src/scheduling/management.d.ts +2 -0
- package/bin/types/src/scheduling/styles.d.ts +1 -0
- package/bin/types/src/scheduling/widget.d.ts +2 -0
- package/bin/vitris-art.js +3 -3
- package/bin/vitris-build.js +2 -2
- package/bin/vitris-create-site.js +5 -5
- package/bin/vitris-cursor-hook.js +3 -3
- package/bin/vitris-eval.js +5 -5
- package/bin/vitris-go.js +5 -5
- package/bin/vitris-harvest.js +4 -4
- package/bin/vitris-knowledge.js +4 -4
- package/bin/vitris-launch-preflight.js +3 -3
- package/bin/vitris-motion-view.js +3 -3
- package/bin/vitris-references.js +2 -2
- package/bin/vitris-refresh.js +4 -4
- package/bin/vitris-stock.js +1 -1
- package/bin/vitris-themes.js +3 -3
- package/bin/vitris-upgrade.js +4 -4
- package/bin/vitris-verify-browser.js +3 -3
- package/bin/vitris-verify-performance.js +2 -2
- package/bin/vitris.js +13 -13
- package/docs/ADMIN.md +85 -85
- package/docs/CLI.md +314 -312
- package/docs/SCHEDULING.md +67 -0
- package/package.json +5 -4
- package/bin/chunks/chunk-NMTFSWPK.js +0 -332
|
@@ -6,10 +6,10 @@ import {
|
|
|
6
6
|
planKitUpgrade,
|
|
7
7
|
recoverKitUpgrade,
|
|
8
8
|
rollbackKitUpgrade
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-WK7HJI5H.js";
|
|
10
10
|
import {
|
|
11
11
|
findHarnessRoot
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-WIT6364Y.js";
|
|
13
13
|
import {
|
|
14
14
|
json,
|
|
15
15
|
save
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-XL2DRAYI.js";
|
|
4
4
|
import {
|
|
5
5
|
sourceRevision
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-WK7HJI5H.js";
|
|
7
7
|
import {
|
|
8
8
|
previewServer
|
|
9
9
|
} from "./chunk-WEFDVXFX.js";
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
providerConsoleWarning,
|
|
23
23
|
readOnlyEmbedProvider,
|
|
24
24
|
unresolvedCaptureBlockers
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-WIT6364Y.js";
|
|
26
26
|
import {
|
|
27
27
|
save,
|
|
28
28
|
within
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-2NW7KSPA.js";
|
|
4
4
|
import {
|
|
5
5
|
verifyPreservedSite
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-MAPY3YVE.js";
|
|
7
7
|
import {
|
|
8
8
|
EXIT_CODES
|
|
9
9
|
} from "./chunk-JCRGE6AL.js";
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
import {
|
|
14
14
|
gradeAll,
|
|
15
15
|
sourceRevision
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-WK7HJI5H.js";
|
|
17
17
|
import {
|
|
18
18
|
parseReleaseRecord
|
|
19
19
|
} from "./chunk-M4LNHYYR.js";
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
buildVerified,
|
|
22
22
|
findHarnessRoot,
|
|
23
23
|
isPreserveSite
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-WIT6364Y.js";
|
|
25
25
|
import {
|
|
26
26
|
json,
|
|
27
27
|
save
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
prepareChange,
|
|
3
3
|
verifyChange
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-AD7WAHW2.js";
|
|
5
5
|
import {
|
|
6
6
|
deployVerifiedArtifact,
|
|
7
7
|
prepareQuickRelease,
|
|
8
8
|
prepareVerifiedRelease
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-SBOUSO3S.js";
|
|
10
10
|
import {
|
|
11
11
|
creativeRunStatus,
|
|
12
12
|
currentRunId,
|
|
@@ -14,10 +14,10 @@ import {
|
|
|
14
14
|
runCreativeProfile,
|
|
15
15
|
startDesignReview,
|
|
16
16
|
submitFeedback
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-AS74YXGM.js";
|
|
18
18
|
import {
|
|
19
19
|
verifyPreservedSite
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-MAPY3YVE.js";
|
|
21
21
|
import {
|
|
22
22
|
EXIT_CODES
|
|
23
23
|
} from "./chunk-JCRGE6AL.js";
|
|
@@ -35,7 +35,7 @@ import {
|
|
|
35
35
|
prepareRefine,
|
|
36
36
|
runWorkflow,
|
|
37
37
|
verifyRefine
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-WK7HJI5H.js";
|
|
39
39
|
import {
|
|
40
40
|
parseGraphYaml
|
|
41
41
|
} from "./chunk-BBV7PMFC.js";
|
|
@@ -49,7 +49,7 @@ import {
|
|
|
49
49
|
buildVerified,
|
|
50
50
|
findKernelRoot,
|
|
51
51
|
isPreserveSite
|
|
52
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-WIT6364Y.js";
|
|
53
53
|
import {
|
|
54
54
|
recoverPendingTransactions,
|
|
55
55
|
save
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
buildSite,
|
|
3
3
|
connectForms,
|
|
4
4
|
loadSiteDir
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-GPS3SAGQ.js";
|
|
6
6
|
import {
|
|
7
7
|
leadsJs
|
|
8
8
|
} from "./chunk-JTXFTNEA.js";
|
|
@@ -686,7 +686,7 @@ async function buildVerified(siteRoot, output = join8(siteRoot, "dist"), origin,
|
|
|
686
686
|
const local = await loadSiteDir(root);
|
|
687
687
|
if (slug) local.site = { ...local.site, slug };
|
|
688
688
|
const launch = existsSync8(join8(root, "launch.json")) ? json(join8(root, "launch.json")) : {};
|
|
689
|
-
await buildSite({ ...local, webAnalyticsToken: launch.webAnalyticsToken, forms: launch.forms, kernelOrigin: origin || process.env.VITRIS_BACKEND_ORIGIN || process.env.KERNEL_ORIGIN || launch.backendOrigin || launch.kernelOrigin || "", publicOrigin: process.env.VITRIS_PUBLIC_ORIGIN || launch.publicOrigin, outDir: stage });
|
|
689
|
+
await buildSite({ ...local, webAnalyticsToken: launch.webAnalyticsToken, scheduling: launch.scheduling, forms: launch.forms, kernelOrigin: origin || process.env.VITRIS_BACKEND_ORIGIN || process.env.KERNEL_ORIGIN || launch.backendOrigin || launch.kernelOrigin || "", publicOrigin: process.env.VITRIS_PUBLIC_ORIGIN || launch.publicOrigin, outDir: stage });
|
|
690
690
|
for (const path of ["media", "public"]) {
|
|
691
691
|
const source = within(root, path);
|
|
692
692
|
if (!existsSync8(source)) continue;
|
|
@@ -734,7 +734,7 @@ ${from} ${route.target} 301`;
|
|
|
734
734
|
save(join8(stage, "package-manifest.json"), { slug: local.site.slug || "", site: local.site });
|
|
735
735
|
const kernelParent = resolve3(import.meta.dirname, "..");
|
|
736
736
|
const kernelSource = existsSync8(join8(kernelParent, "compile")) ? kernelParent : join8(kernelParent, "src");
|
|
737
|
-
save(join8(stage, "build-evidence.json"), { version: 2, sourceHash: sourceHash(root), compilerHash: fingerprint(kernelSource, ["compile", "build", "runtime", "forms", "theme.ts", "typography.ts"]) });
|
|
737
|
+
save(join8(stage, "build-evidence.json"), { version: 2, sourceHash: sourceHash(root), compilerHash: fingerprint(kernelSource, ["compile", "build", "runtime", "forms", "scheduling", "theme.ts", "typography.ts"]) });
|
|
738
738
|
const previous = out + `.previous-${Date.now()}-${process.pid}`;
|
|
739
739
|
if (existsSync8(out)) replacePath(out, previous);
|
|
740
740
|
try {
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
loadPersistedDesignContextPacket,
|
|
4
4
|
persistDesignContextArtifacts,
|
|
5
5
|
resolveDesignContextExpansion
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-WK7HJI5H.js";
|
|
7
7
|
import "./chunk-KVMZSQ3D.js";
|
|
8
8
|
import "./chunk-WOORR67N.js";
|
|
9
9
|
import "./chunk-PRLL7B63.js";
|
|
@@ -17,8 +17,8 @@ import "./chunk-C3F7XQD2.js";
|
|
|
17
17
|
import "./chunk-BIEDSEL2.js";
|
|
18
18
|
import "./chunk-IKNMBGGD.js";
|
|
19
19
|
import "./chunk-WEFDVXFX.js";
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
20
|
+
import "./chunk-WIT6364Y.js";
|
|
21
|
+
import "./chunk-GPS3SAGQ.js";
|
|
22
22
|
import "./chunk-JTXFTNEA.js";
|
|
23
23
|
import "./chunk-GE6UUEG2.js";
|
|
24
24
|
import "./chunk-YYPYYOEV.js";
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
partitionByObligation,
|
|
11
11
|
rankEvidenceRelevance,
|
|
12
12
|
selectDiverseEvidence
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-WK7HJI5H.js";
|
|
14
14
|
import "./chunk-KVMZSQ3D.js";
|
|
15
15
|
import "./chunk-WOORR67N.js";
|
|
16
16
|
import "./chunk-PRLL7B63.js";
|
|
@@ -24,8 +24,8 @@ import "./chunk-C3F7XQD2.js";
|
|
|
24
24
|
import "./chunk-BIEDSEL2.js";
|
|
25
25
|
import "./chunk-IKNMBGGD.js";
|
|
26
26
|
import "./chunk-WEFDVXFX.js";
|
|
27
|
-
import "./chunk-
|
|
28
|
-
import "./chunk-
|
|
27
|
+
import "./chunk-WIT6364Y.js";
|
|
28
|
+
import "./chunk-GPS3SAGQ.js";
|
|
29
29
|
import "./chunk-JTXFTNEA.js";
|
|
30
30
|
import "./chunk-GE6UUEG2.js";
|
|
31
31
|
import "./chunk-YYPYYOEV.js";
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
withMutationLock,
|
|
31
31
|
withMutationLockAsync,
|
|
32
32
|
writeCommitJournal
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-WK7HJI5H.js";
|
|
34
34
|
import "./chunk-KVMZSQ3D.js";
|
|
35
35
|
import "./chunk-WOORR67N.js";
|
|
36
36
|
import "./chunk-PRLL7B63.js";
|
|
@@ -44,8 +44,8 @@ import "./chunk-C3F7XQD2.js";
|
|
|
44
44
|
import "./chunk-BIEDSEL2.js";
|
|
45
45
|
import "./chunk-IKNMBGGD.js";
|
|
46
46
|
import "./chunk-WEFDVXFX.js";
|
|
47
|
-
import "./chunk-
|
|
48
|
-
import "./chunk-
|
|
47
|
+
import "./chunk-WIT6364Y.js";
|
|
48
|
+
import "./chunk-GPS3SAGQ.js";
|
|
49
49
|
import "./chunk-JTXFTNEA.js";
|
|
50
50
|
import "./chunk-GE6UUEG2.js";
|
|
51
51
|
import "./chunk-YYPYYOEV.js";
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { SchedulingConnection } from '../scheduling/config.ts';
|
|
1
2
|
import type { Catalog, PageSource, SiteConfig, ThemeTokens } from "../types.ts";
|
|
2
3
|
import type { PublicForm } from '../forms/config.ts';
|
|
3
4
|
export type BuildSiteInput = {
|
|
@@ -12,6 +13,7 @@ export type BuildSiteInput = {
|
|
|
12
13
|
themeHref?: string;
|
|
13
14
|
publicOrigin?: string;
|
|
14
15
|
forms?: PublicForm[];
|
|
16
|
+
scheduling?: SchedulingConnection;
|
|
15
17
|
webAnalyticsToken?: string;
|
|
16
18
|
};
|
|
17
19
|
export declare function loadSiteCatalog(siteDir: string): Promise<Catalog>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface SchedulingConnection {
|
|
2
|
+
version: 1;
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
apiOrigin: string;
|
|
5
|
+
siteId: string;
|
|
6
|
+
installationId: string;
|
|
7
|
+
route: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function schedulingConnection(value: unknown): SchedulingConnection | undefined;
|
|
10
|
+
export declare function bookingOrigin(value: unknown): string;
|
|
11
|
+
export declare function bookingPage(name: string): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const bookingCss = "\n.vb-site-header{max-width:71rem;margin:0 auto;padding:1.4rem 1.5rem;border-bottom:1px solid var(--color-border,#c3cfd3)}.vb-site-header a{font-family:var(--font-body,system-ui);font-weight:650;text-decoration:none;color:var(--color-text,#1d3340)}.vb-page{max-width:71rem;margin:0 auto;padding:2.5rem 1.5rem 4rem}.vb-page>h1{font-size:clamp(2rem,4vw,3rem);line-height:1.1;margin:.5rem 0 1rem}.vb-page>.vb-eyebrow{margin:0}.vb .vb-summary summary{font-family:inherit;font-size:1.1rem;font-weight:650;cursor:pointer}.vb h2,.vb h3{font-family:inherit}\n\n.vb{--vb-accent:var(--color-accent,#234957);--vb-accent-text:var(--color-accent-text,#fff);color:var(--color-text,#172c36);font-family:var(--font-body,system-ui);font-size:1rem;line-height:1.5;max-width:68rem;margin:2rem auto;isolation:isolate}.vb *{box-sizing:border-box}.vb [hidden]{display:none!important}.vb h2{font-size:1.65rem;line-height:1.25;margin:0 0 .6rem}.vb h3{font-size:1.15rem;margin:.2rem 0}.vb p{margin:.5rem 0 1rem}.vb button,.vb input,.vb select{font:inherit}.vb button,.vb input,.vb select{min-height:48px}.vb button{border:1px solid var(--color-border,#bdc8cd);background:var(--color-surface,#fff);color:inherit;border-radius:var(--radius,8px);padding:.7rem 1rem;cursor:pointer;text-align:center}.vb button:disabled{opacity:.55;cursor:wait}.vb .vb-primary{background:var(--vb-accent);color:var(--vb-accent-text);border-color:var(--vb-accent)}.vb button:hover:not(:disabled){filter:brightness(.96)}.vb :focus-visible{outline:3px solid var(--color-focus,#246c9a);outline-offset:3px}.vb fieldset{min-width:0;border:0;padding:0;margin:0 0 1.5rem}.vb legend{font-size:1.1rem;font-weight:650;margin-bottom:.8rem}.vb input:not([type=checkbox]):not([type=radio]),.vb select{width:100%;border:1px solid var(--color-border,#a8bbc2);border-radius:var(--radius,8px);background:var(--color-bg,#fff);color:inherit;padding:.75rem}.vb label{display:grid;gap:.4rem;margin-bottom:1rem}.vb .vb-check{display:flex;align-items:flex-start;gap:.7rem}.vb .vb-check input{min-height:24px;width:24px;flex:0 0 auto;margin-top:.1rem;accent-color:var(--vb-accent)}.vb .vb-steps{display:flex;gap:1.2rem;list-style:none;padding:0 0 1.1rem;margin:0 0 1.5rem;border-bottom:1px solid var(--color-border,#c7d2d6);flex-wrap:wrap}.vb .vb-steps li{color:var(--color-muted,#50636c)}.vb .vb-steps [aria-current=step]{color:var(--color-text,#172c36);font-weight:700}.vb .vb-layout{display:grid;grid-template-columns:minmax(0,1fr) 19rem;gap:2rem}.vb .vb-panel{background:var(--color-surface,#fff);border:1px solid var(--color-border,#c7d2d6);border-radius:var(--radius-lg,12px);padding:1.6rem;min-width:0}.vb .vb-summary{height:max-content}.vb .vb-services{display:grid;gap:.8rem}.vb .vb-service{display:grid;grid-template-columns:24px minmax(0,1fr);align-items:start;border:1px solid var(--color-border,#c7d2d6);border-radius:var(--radius,8px);padding:1rem;gap:.7rem;margin:0}.vb .vb-service:has(input:checked){border-color:var(--vb-accent);box-shadow:inset 0 0 0 1px var(--vb-accent)}.vb .vb-service input{width:20px;min-height:24px;margin:.15rem 0;accent-color:var(--vb-accent)}.vb .vb-service strong,.vb .vb-service small{display:block;overflow-wrap:anywhere}.vb .vb-service small{font-size:.9rem;margin-top:.25rem}.vb .vb-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.vb .vb-times{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.6rem;margin:1.3rem 0}.vb .vb-times button{padding:.8rem .4rem}.vb .vb-times button[aria-pressed=true]{background:var(--vb-accent);color:var(--vb-accent-text);border-color:var(--vb-accent)}.vb .vb-times small{display:block;font-size:.8rem}.vb .vb-actions{display:flex;justify-content:space-between;gap:.8rem;margin-top:1.4rem;flex-wrap:wrap}.vb .vb-notice{padding:.8rem 1rem;background:var(--color-surface-2,#eef3f5);border-left:3px solid var(--vb-accent);margin-bottom:1.5rem;font-size:.92rem}.vb .vb-error{border-left:3px solid #aa3c34;padding:.8rem 1rem;background:var(--color-surface,#fff);margin:.8rem 0;overflow-wrap:anywhere}.vb .vb-policy{white-space:pre-wrap;overflow-wrap:anywhere}.vb dl{margin:.8rem 0}.vb dl div{padding:.7rem 0;border-bottom:1px solid var(--color-border,#dce2e5)}.vb dt{font-size:.85rem;opacity:.8}.vb dd{margin:.2rem 0 0;overflow-wrap:anywhere}.vb .vb-status{font-size:.9rem;font-weight:600;letter-spacing:.04em}.vb .vb-reference{font: .85rem ui-monospace,monospace;overflow-wrap:anywhere}.vb .vb-honey{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}.vb .vb-hint{font-size:.9rem}.vb-eyebrow{font-size:.8rem;letter-spacing:.13em;font-weight:700}@media(max-width:760px){.vb .vb-layout{grid-template-columns:1fr;gap:1rem}.vb .vb-summary{order:-1}.vb .vb-summary dl div{display:inline-block;margin-right:1.4rem;border:0;padding:.2rem 0}.vb .vb-panel{padding:1.2rem}.vb .vb-steps{gap:.8rem;font-size:.85rem}.vb .vb-times{grid-template-columns:repeat(2,minmax(0,1fr))}.vb .vb-grid{grid-template-columns:1fr}.vb .vb-actions button{flex:1}}@media(prefers-reduced-motion:reduce){.vb *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}\n";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/** Standard booking browser program, scoped to one explicit mount. Browser acceptance exercises this emitted JavaScript. */
|
|
2
|
+
export declare const bookingJs = "(function initializeBooking() {\n const root = document.querySelector(\"[data-vitris-booking]\");\n if (!root) return;\n const metadata = document.querySelector(\"script[data-vitris-booking-config]\");\n if (!metadata) return;\n root.classList.add(\"vb\");\n const node = (tag, text, className) => {\n const el = document.createElement(tag);\n if (text !== void 0) el.textContent = text;\n if (className) el.className = className;\n return el;\n };\n const notice = (text) => {\n const el = node(\"p\", text, \"vb-notice\");\n el.setAttribute(\"role\", \"status\");\n return el;\n };\n let connection;\n try {\n connection = JSON.parse(metadata.textContent || \"\");\n if (connection.siteOrigin !== location.origin) throw Error();\n } catch {\n root.append(notice(\"Booking is available on the approved business website. This preview is not connected.\"));\n return;\n }\n let catalog, step = 0, serviceId = \"\", locationId = \"\", providerId = \"\", day = \"\", slot = null, slots = [], revision = 0, busy = false, requestSerial = 0, error = \"\", status = \"\", customer = { name: \"\", email: \"\", phone: \"\" }, accepted = false, challengeToken = \"\", challengeId, receipt, company = \"\", attemptKey = \"\", attemptPayload = \"\", uncertain = false;\n let objectUrl = \"\";\n const api = async (path, data) => {\n const response = await fetch(connection.apiOrigin + \"/api/booking/v1\" + path, { mode: \"cors\", credentials: \"omit\", cache: \"no-store\", referrerPolicy: \"no-referrer\", signal: AbortSignal.timeout(25e3), ...data === void 0 ? {} : { method: \"POST\", headers: { \"content-type\": \"application/json\" }, body: JSON.stringify(data) } });\n const text = await response.text();\n if (text.length > 1e6) throw Error(\"The booking response could not be verified.\");\n let result;\n try {\n result = JSON.parse(text);\n } catch {\n throw Error(\"Booking is temporarily unavailable. Please contact the business.\");\n }\n if (!response.ok) {\n const failure = Object.assign(new Error(typeof result.error === \"string\" ? result.error : \"Booking could not be completed.\"), { status: response.status, code: result.code });\n throw failure;\n }\n return result;\n };\n const service = () => catalog.services.find((s) => s.id === serviceId);\n const place = () => catalog.locations.find((l) => l.id === locationId);\n const dateOf = (at, zone) => {\n const parts = new Intl.DateTimeFormat(\"en-US\", { timeZone: zone, year: \"numeric\", month: \"2-digit\", day: \"2-digit\" }).formatToParts(new Date(at)), get = (key) => parts.find((p) => p.type === key).value;\n return get(\"year\") + \"-\" + get(\"month\") + \"-\" + get(\"day\");\n };\n const addDays = (value, count) => new Date(Date.parse(value + \"T12:00:00Z\") + count * 864e5).toISOString().slice(0, 10);\n const dayStart = (value, zone) => {\n const target = Date.parse(value + \"T00:00:00Z\");\n for (let at = target - 14 * 36e5; at <= target + 14 * 36e5; at += 6e4) if (dateOf(at, zone) === value) return new Date(at).toISOString();\n throw Error(\"This date is unavailable in the selected timezone.\");\n };\n const time = (at, zone) => new Intl.DateTimeFormat(\"en-US\", { timeZone: zone, hour: \"numeric\", minute: \"2-digit\", timeZoneName: \"shortOffset\" }).format(new Date(at));\n const fullDate = (at, zone) => new Intl.DateTimeFormat(\"en-US\", { timeZone: zone, weekday: \"short\", month: \"long\", day: \"numeric\", year: \"numeric\" }).format(new Date(at));\n const price = (value) => {\n if (value.amountMinor === null) return value.label || \"Price agreed with the business\";\n try {\n const options2 = new Intl.NumberFormat(\"en-US\", { style: \"currency\", currency: value.currency }), digits = options2.resolvedOptions().maximumFractionDigits ?? 2;\n return options2.format(value.amountMinor / 10 ** digits);\n } catch {\n return value.label;\n }\n };\n const button = (label, action, primary = false) => {\n const el = node(\"button\", label, primary ? \"vb-primary\" : void 0);\n el.type = \"button\";\n el.dataset.focusKey = label;\n el.disabled = busy;\n el.addEventListener(\"click\", action);\n return el;\n };\n const field = (label, input) => {\n const el = node(\"label\");\n input.dataset.focusKey = label;\n el.append(node(\"span\", label), input);\n return el;\n };\n const detail = (list, label, value) => {\n const row = node(\"div\");\n row.append(node(\"dt\", label), node(\"dd\", value));\n list.append(row);\n };\n const move = (next) => {\n if (busy || uncertain) return;\n step = next;\n error = \"\";\n status = \"\";\n render(true);\n };\n const clearTimes = () => {\n requestSerial++;\n slots = [];\n slot = null;\n revision = 0;\n status = \"\";\n error = \"\";\n attemptKey = \"\";\n accepted = false;\n };\n const options = (select, items, value, all) => {\n if (all) {\n const opt = node(\"option\", all);\n opt.value = \"\";\n select.append(opt);\n }\n for (const item of items) {\n const opt = node(\"option\", item.name);\n opt.value = item.id;\n select.append(opt);\n }\n select.value = value;\n };\n const cleanupChallenge = () => {\n if (challengeId) {\n window.turnstile?.remove(challengeId);\n challengeId = void 0;\n }\n challengeToken = \"\";\n };\n const errorBlock = () => {\n const el = node(\"p\", error, \"vb-error\");\n el.setAttribute(\"role\", \"alert\");\n return el;\n };\n const showSummary = (panel) => {\n const disclosure = node(\"details\");\n disclosure.open = window.matchMedia(\"(min-width:761px)\").matches;\n disclosure.append(node(\"summary\", \"Your appointment\"));\n const list = node(\"dl\"), s = service();\n if (s) {\n detail(list, \"Service\", s.name);\n detail(list, \"Duration\", s.durationMinutes + \" minutes\");\n detail(list, \"Price\", price(s.price));\n detail(list, \"Confirmation\", s.bookingMode === \"approval\" ? \"Business approval required\" : \"Confirmed when booked\");\n }\n if (place()) detail(list, \"Location\", place().name);\n if (slot) {\n detail(list, \"Time\", fullDate(slot.startsAt, place().timezone) + \" \\xB7 \" + time(slot.startsAt, place().timezone));\n detail(list, \"Staff\", catalog.providers.find((p) => p.id === slot.providerId)?.name || \"Available staff\");\n }\n disclosure.append(list);\n panel.append(disclosure);\n };\n const normalizeSelection = () => {\n const s = service();\n if (!s) return;\n const places = catalog.locations.filter((l) => s.locationIds.includes(l.id));\n if (!places.some((p) => p.id === locationId)) locationId = places[0]?.id || \"\";\n const staff = catalog.providers.filter((p) => s.providerIds.includes(p.id) && p.locationIds.includes(locationId));\n if (!catalog.allowProviderChoice || !staff.some((p) => p.id === providerId)) providerId = staff.length === 1 ? staff[0].id : \"\";\n if (!day && place()) day = dateOf(Date.now() + catalog.minNoticeMinutes * 6e4, place().timezone);\n };\n const loadTimes = async (lookAhead = false) => {\n if (busy || uncertain) return;\n busy = true;\n slot = null;\n error = \"\";\n status = \"Checking availability\\u2026\";\n const serial = ++requestSerial;\n render();\n try {\n const zone = place().timezone, params = new URLSearchParams({ serviceId, locationId, startsAt: dayStart(day, zone), endsAt: dayStart(addDays(day, lookAhead ? 6 : 1), zone), ...providerId ? { providerId } : {} });\n const data = await api(\"/availability?\" + params);\n if (serial !== requestSerial) return;\n if (data.schemaVersion !== 1 || data.siteId !== connection.siteId || !Array.isArray(data.slots) || data.slots.length > 500 || !Number.isSafeInteger(data.revision)) throw Error(\"The availability response could not be verified.\");\n if (!data.terms || typeof data.policyText !== \"string\" || !data.location) throw Error(\"This service changed. Reload services before booking.\");\n const old = JSON.stringify(service());\n Object.assign(service(), data.terms);\n Object.assign(place(), data.location);\n if (catalog.policyText !== data.policyText) accepted = false;\n catalog.policyText = data.policyText;\n slots = data.slots;\n revision = data.revision;\n status = slots.length ? `${slots.length} available ${slots.length === 1 ? \"time\" : \"times\"}. ${zone}.` : \"No available times for this date. Try another day.\";\n if (old !== JSON.stringify(service())) status += \" Service details have changed; review the current price and duration.\";\n if (data.truncated) status += \" Showing the first available times; narrow the date or staff selection.\";\n } catch (failure) {\n if (serial === requestSerial) {\n slots = [];\n error = failure instanceof Error ? failure.message : \"Availability could not be loaded.\";\n status = \"\";\n }\n } finally {\n if (serial === requestSerial) {\n busy = false;\n render();\n }\n }\n };\n const mountChallenge = async (container) => {\n if (catalog.challenge.kind === \"local-fixture\") {\n container.append(notice(\"Local simulation: the security challenge is bypassed only for this isolated loopback preview.\"));\n return;\n }\n try {\n const win = window;\n if (!win.turnstile) await new Promise((resolve, reject) => {\n let script = document.querySelector(\"script[data-booking-turnstile]\");\n if (!script) {\n script = node(\"script\");\n script.src = \"https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit\";\n script.async = true;\n script.dataset.bookingTurnstile = \"\";\n document.head.append(script);\n }\n script.addEventListener(\"load\", () => resolve(), { once: true });\n script.addEventListener(\"error\", () => reject(Error(\"The security check could not load. Please retry or contact the business.\")), { once: true });\n });\n if (!container.isConnected || step !== 3) return;\n challengeId = win.turnstile.render(container, { sitekey: catalog.challenge.siteKey, action: \"booking\", callback: (value) => {\n challengeToken = value;\n }, \"expired-callback\": () => {\n challengeToken = \"\";\n }, \"error-callback\": () => {\n challengeToken = \"\";\n } });\n } catch (failure) {\n if (container.isConnected) container.append(errorBlockMessage(failure instanceof Error ? failure.message : \"Security check unavailable.\"));\n }\n };\n const errorBlockMessage = (text) => {\n const el = node(\"p\", text, \"vb-error\");\n el.setAttribute(\"role\", \"alert\");\n return el;\n };\n const submit = async () => {\n if (busy) return;\n if (!accepted) {\n error = \"Accept the booking policy before booking.\";\n render();\n return;\n }\n if (catalog.challenge.kind === \"turnstile\" && !challengeToken) {\n error = \"Complete the security check before booking.\";\n const existing = root.querySelector(\"[role=alert]\");\n if (existing) existing.textContent = error;\n else root.querySelector(\".vb-panel\")?.append(errorBlock());\n return;\n }\n const content = { revision, serviceId, locationId, providerId: slot.providerId, startsAt: slot.startsAt, customer, acceptedPolicy: true };\n const payload = JSON.stringify(content);\n if (!attemptKey || attemptPayload !== payload) {\n attemptKey = crypto.randomUUID();\n attemptPayload = payload;\n }\n busy = true;\n error = \"\";\n status = \"Saving your appointment\\u2026\";\n const token = challengeToken;\n render();\n try {\n const result = await api(\"/appointments\", { ...content, idempotencyKey: attemptKey, challengeToken: token, company });\n if (result.schemaVersion !== 1 || result.siteId !== connection.siteId || ![\"confirmed\", \"pending_approval\"].includes(result.status) || typeof result.reference !== \"string\" || typeof result.calendar?.content !== \"string\") throw Error(\"The booking response could not be verified. Keep this page open and retry the same booking.\");\n receipt = result;\n uncertain = false;\n step = 4;\n status = \"\";\n } catch (failure) {\n const f = failure;\n error = f.message || \"The booking response was interrupted.\";\n status = \"\";\n if (!f.status || f.status >= 500) {\n uncertain = true;\n error += \" Your result may still be pending. Retry this same booking; do not create another appointment.\";\n } else {\n uncertain = false;\n if (f.status === 409) {\n step = 1;\n slot = null;\n slots = [];\n revision = 0;\n attemptKey = \"\";\n accepted = false;\n status = \"Your details are saved. Find available times again.\";\n } else if (f.status === 400 && String(f.code).startsWith(\"challenge\")) {\n challengeToken = \"\";\n }\n }\n } finally {\n busy = false;\n render(true);\n }\n };\n function render(focus = false) {\n const focusKey = document.activeElement?.dataset.focusKey;\n cleanupChallenge();\n root.replaceChildren();\n root.append(notice(catalog.emailMode === \"send\" ? \"TEST BOOKING - Emails use the configured sender and allowed test recipients.\" : catalog.emailMode === \"disabled\" ? \"TEST BOOKING - Customer emails are not enabled. Keep your booking reference.\" : \"TEST BOOKING - This preview stores appointments in the admin calendar. Customer emails are captured, not sent.\"));\n const progress = node(\"ol\", void 0, \"vb-steps\");\n progress.setAttribute(\"aria-label\", \"Booking progress\");\n [\"Service\", \"Time\", \"Your details\", \"Review\", \"Receipt\"].forEach((name, index) => {\n const item = node(\"li\", index + 1 + \". \" + name);\n if (index === step) item.setAttribute(\"aria-current\", \"step\");\n progress.append(item);\n });\n root.append(progress);\n const layout = node(\"div\", void 0, \"vb-layout\"), panel = node(\"section\", void 0, \"vb-panel\"), summary = node(\"aside\", void 0, \"vb-panel vb-summary\");\n summary.setAttribute(\"aria-label\", \"Appointment summary\");\n layout.append(panel, summary);\n root.append(layout);\n showSummary(summary);\n const heading = node(\"h2\", [\"Choose a service\", \"Choose a time\", \"Your details\", \"Review your appointment\", receipt?.status === \"pending_approval\" ? \"Request received\" : \"Appointment confirmed\"][step]);\n heading.tabIndex = -1;\n panel.append(heading);\n if (error) panel.append(errorBlock());\n if (status) {\n const live = node(\"p\", status);\n live.setAttribute(\"role\", \"status\");\n panel.append(live);\n }\n if (step === 0) {\n if (!catalog.services.length) {\n panel.append(node(\"p\", \"No services are available for online booking. Please contact the business.\"));\n return;\n }\n const group = node(\"fieldset\"), legend = node(\"legend\", \"Available services\"), list = node(\"div\", void 0, \"vb-services\");\n group.append(legend, list);\n for (const s of catalog.services) {\n const radio = node(\"input\");\n radio.type = \"radio\";\n radio.name = \"booking-service\";\n radio.dataset.focusKey = \"service-\" + s.id;\n radio.value = s.id;\n radio.checked = s.id === serviceId;\n radio.addEventListener(\"change\", () => {\n serviceId = s.id;\n clearTimes();\n normalizeSelection();\n render();\n });\n const label = node(\"label\", void 0, \"vb-service\"), copy = node(\"span\");\n copy.append(node(\"strong\", s.name), node(\"small\", s.durationMinutes + \" minutes \\xB7 \" + price(s.price)), node(\"small\", s.bookingMode === \"approval\" ? \"Requires business approval\" : \"Immediate confirmation\"));\n label.append(radio, copy);\n list.append(label);\n }\n panel.append(group, button(\"Choose a time\", () => {\n normalizeSelection();\n move(1);\n }, true));\n } else if (step === 1) {\n const s = service(), grid = node(\"div\", void 0, \"vb-grid\"), places = catalog.locations.filter((l) => s.locationIds.includes(l.id));\n if (places.length > 1) {\n const select = node(\"select\");\n options(select, places, locationId);\n select.disabled = busy || uncertain;\n select.addEventListener(\"change\", () => {\n locationId = select.value;\n day = \"\";\n clearTimes();\n normalizeSelection();\n render();\n });\n grid.append(field(\"Location\", select));\n }\n const staff = catalog.providers.filter((p) => s.providerIds.includes(p.id) && p.locationIds.includes(locationId));\n if (catalog.allowProviderChoice && staff.length > 1) {\n const select = node(\"select\");\n options(select, staff, providerId, \"Any available staff\");\n select.disabled = busy || uncertain;\n select.addEventListener(\"change\", () => {\n providerId = select.value;\n clearTimes();\n render();\n });\n grid.append(field(\"Staff preference\", select));\n }\n const date = node(\"input\");\n date.type = \"date\";\n date.required = true;\n date.value = day;\n date.min = dateOf(Date.now(), place().timezone);\n date.max = dateOf(Date.now() + catalog.horizonDays * 864e5, place().timezone);\n date.disabled = busy || uncertain;\n date.addEventListener(\"change\", () => {\n if (date.value) {\n day = date.value;\n clearTimes();\n render();\n }\n });\n grid.append(field(\"Appointment date\", date));\n panel.append(grid, node(\"p\", \"Times are shown in \" + place().timezone + \". A time is reserved only after booking.\", \"vb-hint\"), button(busy ? \"Checking times\\u2026\" : \"Find available times\", () => {\n void loadTimes();\n }));\n const times = node(\"div\", void 0, \"vb-times\");\n times.setAttribute(\"aria-label\", \"Available times\");\n const seen = /* @__PURE__ */ new Set();\n for (const value of slots) {\n if (!providerId && seen.has(value.startsAt)) continue;\n seen.add(value.startsAt);\n const label = time(value.startsAt, place().timezone), b = button(label, () => {\n slot = value;\n render();\n });\n b.dataset.focusKey = value.startsAt + \"-\" + value.providerId;\n b.setAttribute(\"aria-pressed\", String(slot?.startsAt === value.startsAt && slot.providerId === value.providerId));\n b.setAttribute(\"aria-label\", fullDate(value.startsAt, place().timezone) + \" at \" + label);\n b.append(node(\"small\", fullDate(value.startsAt, place().timezone)));\n times.append(b);\n }\n panel.append(times);\n if (!slots.length && !busy) panel.append(button(\"Look ahead six days\", () => {\n void loadTimes(true);\n }));\n const actions = node(\"div\", void 0, \"vb-actions\"), next = button(\"Continue to your details\", () => move(2), true);\n next.disabled = !slot || busy;\n actions.append(button(\"Back to services\", () => move(0)), next);\n panel.append(actions);\n } else if (step === 2) {\n const form = node(\"form\");\n for (const [key, label, type, autocomplete] of [[\"name\", \"Full name\", \"text\", \"name\"], [\"email\", \"Email address\", \"email\", \"email\"], [\"phone\", \"Phone number (optional)\", \"tel\", \"tel\"]]) {\n const input = node(\"input\");\n input.name = key;\n input.type = type;\n input.autocomplete = autocomplete;\n input.required = key !== \"phone\";\n input.maxLength = key === \"email\" ? 254 : key === \"name\" ? 160 : 40;\n input.value = customer[key];\n input.addEventListener(\"input\", () => {\n customer[key] = input.value;\n });\n form.append(field(label, input));\n }\n const hidden = node(\"div\", void 0, \"vb-honey\");\n hidden.setAttribute(\"aria-hidden\", \"true\");\n const honey = node(\"input\");\n honey.name = \"company\";\n honey.tabIndex = -1;\n honey.autocomplete = \"off\";\n honey.addEventListener(\"input\", () => {\n company = honey.value;\n });\n hidden.append(field(\"Leave this field empty\", honey));\n form.append(hidden, node(\"p\", \"Your details are used to arrange this appointment. See the test email mode above before submitting.\", \"vb-hint\"));\n const actions = node(\"div\", void 0, \"vb-actions\"), next = button(\"Review appointment\", () => {\n }, true);\n next.type = \"submit\";\n actions.append(button(\"Back to times\", () => move(1)), next);\n form.append(actions);\n form.addEventListener(\"submit\", (event) => {\n event.preventDefault();\n if (form.reportValidity()) {\n customer = { name: customer.name.trim(), email: customer.email.trim(), phone: customer.phone.trim() };\n move(3);\n }\n });\n panel.append(form);\n } else if (step === 3) {\n const list = node(\"dl\");\n detail(list, \"Customer\", customer.name);\n detail(list, \"Email\", customer.email);\n if (customer.phone) detail(list, \"Phone\", customer.phone);\n panel.append(list, node(\"h3\", \"Booking policy\"), node(\"p\", catalog.policyText, \"vb-policy\"));\n if(catalog.customerManagement){const m=catalog.customerManagement;panel.append(node(\"p\",\"Online cancellation notice: \"+m.cancellationCutoffMinutes+\" minutes. Online rescheduling notice: \"+m.rescheduleCutoffMinutes+\" minutes. Zero permits changes until the appointment starts.\",\"vb-hint\"));}\n const check = node(\"input\");\n check.type = \"checkbox\";\n check.checked = accepted;\n check.disabled = busy || uncertain;\n check.addEventListener(\"change\", () => {\n accepted = check.checked;\n });\n const label = node(\"label\", void 0, \"vb-check\");\n label.append(check, node(\"span\", \"I have read and accept the booking policy.\"));\n panel.append(label);\n if (!busy) {\n const challenge = node(\"div\");\n panel.append(challenge);\n void mountChallenge(challenge);\n }\n const actions = node(\"div\", void 0, \"vb-actions\");\n if (!uncertain) actions.append(button(\"Back to your details\", () => move(2)));\n actions.append(button(busy ? \"Booking\\u2026\" : uncertain ? \"Retry same booking\" : service().bookingMode === \"approval\" ? \"Request appointment\" : \"Confirm appointment\", () => {\n void submit();\n }, true));\n panel.append(actions);\n } else if (receipt) {\n const pending = receipt.status === \"pending_approval\";\n panel.append(node(\"p\", pending ? \"The business needs to approve your request. Your time is held until the approval deadline. This request is not yet confirmed.\" : \"Your appointment is saved in the business calendar.\", \"vb-status\"));\n const list = node(\"dl\");\n detail(list, \"Service\", receipt.serviceName);\n detail(list, \"When\", fullDate(receipt.startsAt, receipt.timezone) + \" \\xB7 \" + time(receipt.startsAt, receipt.timezone));\n detail(list, \"Location\", receipt.locationName);\n detail(list, \"Staff\", receipt.providerName);\n detail(list, \"Price\", price(receipt.price));\n if (receipt.expiresAt) detail(list, \"Approval deadline\", fullDate(receipt.expiresAt, receipt.timezone) + \" \\xB7 \" + time(receipt.expiresAt, receipt.timezone));\n panel.append(list, node(\"p\", \"Booking reference\", \"vb-hint\"), node(\"p\", receipt.reference, \"vb-reference\"), node(\"p\", \"Keep this reference. \" + (receipt.emailStatus === \"captured\" ? \"Your test email is captured in the admin Customer emails inbox. Its private links can cancel or reschedule this appointment.\" : receipt.emailStatus === \"accepted\" ? \"Your email was accepted by the email provider. Check your inbox for private cancellation and rescheduling links.\" : receipt.emailStatus === \"blocked\" || receipt.emailStatus === \"unknown\" ? \"Your appointment is saved, but the email needs attention. Contact the business if you do not receive it.\" : (catalog.emailMode === \"disabled\" ? \"Customer emails are not enabled. Contact the business for appointment changes.\" : \"Open your appointment email for cancellation and rescheduling links. Email delivery may still be pending.\")) + \"\", \"vb-hint\"));\n if (objectUrl) URL.revokeObjectURL(objectUrl);\n objectUrl = URL.createObjectURL(new Blob([receipt.calendar.content], { type: \"text/calendar;charset=utf-8\" }));\n const link = node(\"a\", \"Download calendar file (.ics)\");\n link.href = objectUrl;\n link.download = \"appointment.ics\";\n panel.append(link, node(\"p\", \"A calendar file adds a copy to your calendar. It does not keep your calendar synchronized.\", \"vb-hint\"));\n }\n if (focus) heading.focus({ preventScroll: false });\n else if (focusKey) root.querySelector('[data-focus-key=\"' + CSS.escape(focusKey) + '\"]')?.focus({ preventScroll: true });\n }\n root.append(notice(\"Loading available services\\u2026\"));\n void api(\"/catalog\").then((data) => {\n if (data.schemaVersion !== 1 || data.siteId !== connection.siteId || data.installationId !== connection.installationId || data.siteOrigin !== connection.siteOrigin || data.mode !== \"test\" || !Array.isArray(data.services) || data.services.length > 128 || !Array.isArray(data.providers) || !Array.isArray(data.locations) || ![\"local-fixture\", \"turnstile\"].includes(data.challenge?.kind)) throw Error(\"This website booking connection could not be verified. Please contact the business.\");\n catalog = data;\n serviceId = new URL(location.href).searchParams.get(\"service\") || data.services[0]?.id || \"\";\n if (!data.services.some((s) => s.id === serviceId)) serviceId = data.services[0]?.id || \"\";\n normalizeSelection();\n render();\n }).catch((failure) => {\n root.replaceChildren(errorBlockMessage(failure instanceof Error ? failure.message : \"Booking is unavailable.\"));\n root.append(button(\"Try loading services again\", () => location.reload()));\n });\n window.addEventListener(\"beforeunload\", (event) => {\n if (uncertain || busy && step === 3) {\n event.preventDefault();\n event.returnValue = \"\";\n }\n });\n})();";
|
package/bin/vitris-art.js
CHANGED
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
retireProducedAsset,
|
|
13
13
|
validateAssetProduction,
|
|
14
14
|
withMutationLock
|
|
15
|
-
} from "./chunks/chunk-
|
|
15
|
+
} from "./chunks/chunk-WK7HJI5H.js";
|
|
16
16
|
import "./chunks/chunk-KVMZSQ3D.js";
|
|
17
17
|
import "./chunks/chunk-WOORR67N.js";
|
|
18
18
|
import "./chunks/chunk-PRLL7B63.js";
|
|
@@ -33,8 +33,8 @@ import "./chunks/chunk-IKNMBGGD.js";
|
|
|
33
33
|
import "./chunks/chunk-WEFDVXFX.js";
|
|
34
34
|
import {
|
|
35
35
|
findHarnessRoot
|
|
36
|
-
} from "./chunks/chunk-
|
|
37
|
-
import "./chunks/chunk-
|
|
36
|
+
} from "./chunks/chunk-WIT6364Y.js";
|
|
37
|
+
import "./chunks/chunk-GPS3SAGQ.js";
|
|
38
38
|
import "./chunks/chunk-JTXFTNEA.js";
|
|
39
39
|
import "./chunks/chunk-GE6UUEG2.js";
|
|
40
40
|
import "./chunks/chunk-YYPYYOEV.js";
|
package/bin/vitris-build.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
buildVerified
|
|
4
|
-
} from "./chunks/chunk-
|
|
5
|
-
import "./chunks/chunk-
|
|
4
|
+
} from "./chunks/chunk-WIT6364Y.js";
|
|
5
|
+
import "./chunks/chunk-GPS3SAGQ.js";
|
|
6
6
|
import "./chunks/chunk-JTXFTNEA.js";
|
|
7
7
|
import "./chunks/chunk-GE6UUEG2.js";
|
|
8
8
|
import "./chunks/chunk-YYPYYOEV.js";
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
createSite
|
|
4
|
-
} from "./chunks/chunk-
|
|
4
|
+
} from "./chunks/chunk-5KRJQKHB.js";
|
|
5
5
|
import "./chunks/chunk-34H54KEY.js";
|
|
6
6
|
import "./chunks/chunk-JCRGE6AL.js";
|
|
7
7
|
import {
|
|
8
8
|
promptSourceUrl
|
|
9
|
-
} from "./chunks/chunk-
|
|
9
|
+
} from "./chunks/chunk-OZD7ZWDX.js";
|
|
10
10
|
import "./chunks/chunk-XGTHGWPW.js";
|
|
11
11
|
import {
|
|
12
12
|
siteInputsFromArgv
|
|
13
|
-
} from "./chunks/chunk-
|
|
13
|
+
} from "./chunks/chunk-WK7HJI5H.js";
|
|
14
14
|
import "./chunks/chunk-KVMZSQ3D.js";
|
|
15
15
|
import "./chunks/chunk-WOORR67N.js";
|
|
16
16
|
import "./chunks/chunk-PRLL7B63.js";
|
|
@@ -24,8 +24,8 @@ import "./chunks/chunk-C3F7XQD2.js";
|
|
|
24
24
|
import "./chunks/chunk-BIEDSEL2.js";
|
|
25
25
|
import "./chunks/chunk-IKNMBGGD.js";
|
|
26
26
|
import "./chunks/chunk-WEFDVXFX.js";
|
|
27
|
-
import "./chunks/chunk-
|
|
28
|
-
import "./chunks/chunk-
|
|
27
|
+
import "./chunks/chunk-WIT6364Y.js";
|
|
28
|
+
import "./chunks/chunk-GPS3SAGQ.js";
|
|
29
29
|
import "./chunks/chunk-JTXFTNEA.js";
|
|
30
30
|
import "./chunks/chunk-GE6UUEG2.js";
|
|
31
31
|
import "./chunks/chunk-YYPYYOEV.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
handleCursorHook
|
|
4
|
-
} from "./chunks/chunk-
|
|
4
|
+
} from "./chunks/chunk-WK7HJI5H.js";
|
|
5
5
|
import "./chunks/chunk-KVMZSQ3D.js";
|
|
6
6
|
import "./chunks/chunk-WOORR67N.js";
|
|
7
7
|
import "./chunks/chunk-PRLL7B63.js";
|
|
@@ -15,8 +15,8 @@ import "./chunks/chunk-C3F7XQD2.js";
|
|
|
15
15
|
import "./chunks/chunk-BIEDSEL2.js";
|
|
16
16
|
import "./chunks/chunk-IKNMBGGD.js";
|
|
17
17
|
import "./chunks/chunk-WEFDVXFX.js";
|
|
18
|
-
import "./chunks/chunk-
|
|
19
|
-
import "./chunks/chunk-
|
|
18
|
+
import "./chunks/chunk-WIT6364Y.js";
|
|
19
|
+
import "./chunks/chunk-GPS3SAGQ.js";
|
|
20
20
|
import "./chunks/chunk-JTXFTNEA.js";
|
|
21
21
|
import "./chunks/chunk-GE6UUEG2.js";
|
|
22
22
|
import "./chunks/chunk-YYPYYOEV.js";
|
package/bin/vitris-eval.js
CHANGED
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
gradeAll,
|
|
4
4
|
gradeNode,
|
|
5
5
|
reviewSubject
|
|
6
|
-
} from "./chunks/chunk-
|
|
6
|
+
} from "./chunks/chunk-WK7HJI5H.js";
|
|
7
7
|
import "./chunks/chunk-KVMZSQ3D.js";
|
|
8
8
|
import "./chunks/chunk-WOORR67N.js";
|
|
9
9
|
import "./chunks/chunk-PRLL7B63.js";
|
|
@@ -17,8 +17,8 @@ import "./chunks/chunk-C3F7XQD2.js";
|
|
|
17
17
|
import "./chunks/chunk-BIEDSEL2.js";
|
|
18
18
|
import "./chunks/chunk-IKNMBGGD.js";
|
|
19
19
|
import "./chunks/chunk-WEFDVXFX.js";
|
|
20
|
-
import "./chunks/chunk-
|
|
21
|
-
import "./chunks/chunk-
|
|
20
|
+
import "./chunks/chunk-WIT6364Y.js";
|
|
21
|
+
import "./chunks/chunk-GPS3SAGQ.js";
|
|
22
22
|
import "./chunks/chunk-JTXFTNEA.js";
|
|
23
23
|
import "./chunks/chunk-GE6UUEG2.js";
|
|
24
24
|
import "./chunks/chunk-YYPYYOEV.js";
|
|
@@ -45,7 +45,7 @@ if (paths.length) {
|
|
|
45
45
|
} else if (process.argv.includes("--expand-packet")) {
|
|
46
46
|
const expId = arg("--expand-packet");
|
|
47
47
|
const manifestHash = arg("--manifest-hash");
|
|
48
|
-
const { expandPacketItem } = await import("./chunks/packets-
|
|
48
|
+
const { expandPacketItem } = await import("./chunks/packets-B7MCJ42T.js");
|
|
49
49
|
console.log(expandPacketItem(root, node || "business-review", expId, manifestHash));
|
|
50
50
|
} else if (process.argv.includes("--expand-design-context")) {
|
|
51
51
|
const preparationId = arg("--preparation");
|
|
@@ -53,7 +53,7 @@ if (paths.length) {
|
|
|
53
53
|
if (!preparationId || !expansionId || expansionId.startsWith("--")) {
|
|
54
54
|
throw new Error("Use --expand-design-context <ID> --preparation <PREP_ID> [--site PATH]");
|
|
55
55
|
}
|
|
56
|
-
const { expandDesignContextForPreparation } = await import("./chunks/design-context-store-
|
|
56
|
+
const { expandDesignContextForPreparation } = await import("./chunks/design-context-store-PGXCHUOF.js");
|
|
57
57
|
const result = expandDesignContextForPreparation(root, preparationId, expansionId);
|
|
58
58
|
if (!result.ok) {
|
|
59
59
|
console.error(result.reason);
|
package/bin/vitris-go.js
CHANGED
|
@@ -7,8 +7,8 @@ import {
|
|
|
7
7
|
runCreativeProfile,
|
|
8
8
|
runSite,
|
|
9
9
|
statusSite
|
|
10
|
-
} from "./chunks/chunk-
|
|
11
|
-
import "./chunks/chunk-
|
|
10
|
+
} from "./chunks/chunk-AS74YXGM.js";
|
|
11
|
+
import "./chunks/chunk-MAPY3YVE.js";
|
|
12
12
|
import "./chunks/chunk-34H54KEY.js";
|
|
13
13
|
import "./chunks/chunk-JCRGE6AL.js";
|
|
14
14
|
import "./chunks/chunk-XL2DRAYI.js";
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
resolveSiteInputsLive,
|
|
20
20
|
runWorkflow,
|
|
21
21
|
siteInputsFromArgv
|
|
22
|
-
} from "./chunks/chunk-
|
|
22
|
+
} from "./chunks/chunk-WK7HJI5H.js";
|
|
23
23
|
import "./chunks/chunk-KVMZSQ3D.js";
|
|
24
24
|
import "./chunks/chunk-WOORR67N.js";
|
|
25
25
|
import "./chunks/chunk-PRLL7B63.js";
|
|
@@ -35,8 +35,8 @@ import "./chunks/chunk-IKNMBGGD.js";
|
|
|
35
35
|
import "./chunks/chunk-WEFDVXFX.js";
|
|
36
36
|
import {
|
|
37
37
|
isPreserveSite
|
|
38
|
-
} from "./chunks/chunk-
|
|
39
|
-
import "./chunks/chunk-
|
|
38
|
+
} from "./chunks/chunk-WIT6364Y.js";
|
|
39
|
+
import "./chunks/chunk-GPS3SAGQ.js";
|
|
40
40
|
import "./chunks/chunk-JTXFTNEA.js";
|
|
41
41
|
import "./chunks/chunk-GE6UUEG2.js";
|
|
42
42
|
import "./chunks/chunk-YYPYYOEV.js";
|
package/bin/vitris-harvest.js
CHANGED
|
@@ -3,13 +3,13 @@ import {
|
|
|
3
3
|
gatherOnboard,
|
|
4
4
|
normalizeSourceUrl,
|
|
5
5
|
persistOnboard
|
|
6
|
-
} from "./chunks/chunk-
|
|
6
|
+
} from "./chunks/chunk-OZD7ZWDX.js";
|
|
7
7
|
import {
|
|
8
8
|
loadDevVars
|
|
9
9
|
} from "./chunks/chunk-XGTHGWPW.js";
|
|
10
10
|
import {
|
|
11
11
|
gradeHarvest
|
|
12
|
-
} from "./chunks/chunk-
|
|
12
|
+
} from "./chunks/chunk-WK7HJI5H.js";
|
|
13
13
|
import "./chunks/chunk-KVMZSQ3D.js";
|
|
14
14
|
import "./chunks/chunk-WOORR67N.js";
|
|
15
15
|
import "./chunks/chunk-PRLL7B63.js";
|
|
@@ -23,8 +23,8 @@ import "./chunks/chunk-C3F7XQD2.js";
|
|
|
23
23
|
import "./chunks/chunk-BIEDSEL2.js";
|
|
24
24
|
import "./chunks/chunk-IKNMBGGD.js";
|
|
25
25
|
import "./chunks/chunk-WEFDVXFX.js";
|
|
26
|
-
import "./chunks/chunk-
|
|
27
|
-
import "./chunks/chunk-
|
|
26
|
+
import "./chunks/chunk-WIT6364Y.js";
|
|
27
|
+
import "./chunks/chunk-GPS3SAGQ.js";
|
|
28
28
|
import "./chunks/chunk-JTXFTNEA.js";
|
|
29
29
|
import "./chunks/chunk-GE6UUEG2.js";
|
|
30
30
|
import "./chunks/chunk-YYPYYOEV.js";
|
package/bin/vitris-knowledge.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
explainStage
|
|
4
|
-
} from "./chunks/chunk-
|
|
5
|
-
import "./chunks/chunk-
|
|
4
|
+
} from "./chunks/chunk-MYX4FET4.js";
|
|
5
|
+
import "./chunks/chunk-WK7HJI5H.js";
|
|
6
6
|
import "./chunks/chunk-KVMZSQ3D.js";
|
|
7
7
|
import "./chunks/chunk-WOORR67N.js";
|
|
8
8
|
import "./chunks/chunk-PRLL7B63.js";
|
|
@@ -16,8 +16,8 @@ import "./chunks/chunk-C3F7XQD2.js";
|
|
|
16
16
|
import "./chunks/chunk-BIEDSEL2.js";
|
|
17
17
|
import "./chunks/chunk-IKNMBGGD.js";
|
|
18
18
|
import "./chunks/chunk-WEFDVXFX.js";
|
|
19
|
-
import "./chunks/chunk-
|
|
20
|
-
import "./chunks/chunk-
|
|
19
|
+
import "./chunks/chunk-WIT6364Y.js";
|
|
20
|
+
import "./chunks/chunk-GPS3SAGQ.js";
|
|
21
21
|
import "./chunks/chunk-JTXFTNEA.js";
|
|
22
22
|
import "./chunks/chunk-GE6UUEG2.js";
|
|
23
23
|
import "./chunks/chunk-YYPYYOEV.js";
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
} from "./chunks/chunk-XL2DRAYI.js";
|
|
11
11
|
import {
|
|
12
12
|
templateAdaptationFailures
|
|
13
|
-
} from "./chunks/chunk-
|
|
13
|
+
} from "./chunks/chunk-WK7HJI5H.js";
|
|
14
14
|
import "./chunks/chunk-KVMZSQ3D.js";
|
|
15
15
|
import "./chunks/chunk-WOORR67N.js";
|
|
16
16
|
import "./chunks/chunk-PRLL7B63.js";
|
|
@@ -30,8 +30,8 @@ import {
|
|
|
30
30
|
performancePolicy
|
|
31
31
|
} from "./chunks/chunk-IKNMBGGD.js";
|
|
32
32
|
import "./chunks/chunk-WEFDVXFX.js";
|
|
33
|
-
import "./chunks/chunk-
|
|
34
|
-
import "./chunks/chunk-
|
|
33
|
+
import "./chunks/chunk-WIT6364Y.js";
|
|
34
|
+
import "./chunks/chunk-GPS3SAGQ.js";
|
|
35
35
|
import {
|
|
36
36
|
COOKIE_COMPLIANCE_PATH,
|
|
37
37
|
parseFrontmatter
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
TEMPLATE_MOTION_PATH,
|
|
4
4
|
currentSelectionHash,
|
|
5
5
|
templateMotionHash
|
|
6
|
-
} from "./chunks/chunk-
|
|
6
|
+
} from "./chunks/chunk-WK7HJI5H.js";
|
|
7
7
|
import "./chunks/chunk-KVMZSQ3D.js";
|
|
8
8
|
import "./chunks/chunk-WOORR67N.js";
|
|
9
9
|
import "./chunks/chunk-PRLL7B63.js";
|
|
@@ -19,8 +19,8 @@ import "./chunks/chunk-IKNMBGGD.js";
|
|
|
19
19
|
import {
|
|
20
20
|
previewServer
|
|
21
21
|
} from "./chunks/chunk-WEFDVXFX.js";
|
|
22
|
-
import "./chunks/chunk-
|
|
23
|
-
import "./chunks/chunk-
|
|
22
|
+
import "./chunks/chunk-WIT6364Y.js";
|
|
23
|
+
import "./chunks/chunk-GPS3SAGQ.js";
|
|
24
24
|
import "./chunks/chunk-JTXFTNEA.js";
|
|
25
25
|
import "./chunks/chunk-GE6UUEG2.js";
|
|
26
26
|
import "./chunks/chunk-YYPYYOEV.js";
|
package/bin/vitris-references.js
CHANGED
|
@@ -17,8 +17,8 @@ import {
|
|
|
17
17
|
} from "./chunks/chunk-WEFDVXFX.js";
|
|
18
18
|
import {
|
|
19
19
|
buildVerified
|
|
20
|
-
} from "./chunks/chunk-
|
|
21
|
-
import "./chunks/chunk-
|
|
20
|
+
} from "./chunks/chunk-WIT6364Y.js";
|
|
21
|
+
import "./chunks/chunk-GPS3SAGQ.js";
|
|
22
22
|
import "./chunks/chunk-JTXFTNEA.js";
|
|
23
23
|
import "./chunks/chunk-GE6UUEG2.js";
|
|
24
24
|
import "./chunks/chunk-YYPYYOEV.js";
|
package/bin/vitris-refresh.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
upgradeSite
|
|
4
|
-
} from "./chunks/chunk-
|
|
4
|
+
} from "./chunks/chunk-KR5ZUZV2.js";
|
|
5
5
|
import "./chunks/chunk-JCRGE6AL.js";
|
|
6
|
-
import "./chunks/chunk-
|
|
6
|
+
import "./chunks/chunk-WK7HJI5H.js";
|
|
7
7
|
import "./chunks/chunk-KVMZSQ3D.js";
|
|
8
8
|
import "./chunks/chunk-WOORR67N.js";
|
|
9
9
|
import "./chunks/chunk-PRLL7B63.js";
|
|
@@ -17,8 +17,8 @@ import "./chunks/chunk-C3F7XQD2.js";
|
|
|
17
17
|
import "./chunks/chunk-BIEDSEL2.js";
|
|
18
18
|
import "./chunks/chunk-IKNMBGGD.js";
|
|
19
19
|
import "./chunks/chunk-WEFDVXFX.js";
|
|
20
|
-
import "./chunks/chunk-
|
|
21
|
-
import "./chunks/chunk-
|
|
20
|
+
import "./chunks/chunk-WIT6364Y.js";
|
|
21
|
+
import "./chunks/chunk-GPS3SAGQ.js";
|
|
22
22
|
import "./chunks/chunk-JTXFTNEA.js";
|
|
23
23
|
import "./chunks/chunk-GE6UUEG2.js";
|
|
24
24
|
import "./chunks/chunk-YYPYYOEV.js";
|