@webless/agent 0.3.0 → 0.3.2
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/dist/{chunk-MRSLWREA.js → chunk-APNF27K2.js} +57 -16
- package/dist/chunk-APNF27K2.js.map +1 -0
- package/dist/embed.cjs +70 -15
- package/dist/embed.cjs.map +1 -1
- package/dist/embed.css +4 -0
- package/dist/embed.css.map +1 -1
- package/dist/embed.js +15 -1
- package/dist/embed.js.map +1 -1
- package/dist/index.cjs +32 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +32 -7
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +56 -15
- package/dist/react.cjs.map +1 -1
- package/dist/react.css +4 -0
- package/dist/react.css.map +1 -1
- package/dist/react.d.cts +5 -3
- package/dist/react.d.ts +5 -3
- package/dist/react.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-MRSLWREA.js.map +0 -1
|
@@ -47,11 +47,12 @@ function createAgentRuntimeCapability(options) {
|
|
|
47
47
|
let pendingBootstrap;
|
|
48
48
|
const bootstrap = async () => {
|
|
49
49
|
let previewGrant;
|
|
50
|
+
const previewBuildId = options.previewBuildId?.trim();
|
|
50
51
|
if (options.version === "unpublished") {
|
|
51
|
-
previewGrant = (await options.getUnpublishedPreviewGrant?.())?.trim();
|
|
52
|
-
if (!previewGrant) {
|
|
52
|
+
previewGrant = previewBuildId ? void 0 : (await options.getUnpublishedPreviewGrant?.())?.trim();
|
|
53
|
+
if (!previewGrant && !previewBuildId) {
|
|
53
54
|
throw new Error(
|
|
54
|
-
"
|
|
55
|
+
"Unpublished preview authorization is required to use the Agent Runtime preview."
|
|
55
56
|
);
|
|
56
57
|
}
|
|
57
58
|
}
|
|
@@ -61,6 +62,7 @@ function createAgentRuntimeCapability(options) {
|
|
|
61
62
|
body: JSON.stringify({
|
|
62
63
|
clientSessionId: options.visitorSessionId,
|
|
63
64
|
indexId: options.indexId,
|
|
65
|
+
...previewBuildId ? { previewBuildId } : {},
|
|
64
66
|
...previewGrant ? { previewGrant } : {},
|
|
65
67
|
version: options.version
|
|
66
68
|
}),
|
|
@@ -380,7 +382,7 @@ function applyWorkEvent(event, handlers, workItems) {
|
|
|
380
382
|
);
|
|
381
383
|
}
|
|
382
384
|
var AgentSession = class {
|
|
383
|
-
constructor(indexId, version, runtimeOrigin, visitorSessionId, storeOptions, getUnpublishedPreviewGrant) {
|
|
385
|
+
constructor(indexId, version, runtimeOrigin, visitorSessionId, storeOptions, previewBuildId, getUnpublishedPreviewGrant) {
|
|
384
386
|
this.indexId = indexId;
|
|
385
387
|
this.version = version;
|
|
386
388
|
this.runtimeOrigin = runtimeOrigin;
|
|
@@ -389,6 +391,7 @@ var AgentSession = class {
|
|
|
389
391
|
this.capability = createAgentRuntimeCapability({
|
|
390
392
|
getUnpublishedPreviewGrant,
|
|
391
393
|
indexId,
|
|
394
|
+
previewBuildId,
|
|
392
395
|
runtimeOrigin,
|
|
393
396
|
version,
|
|
394
397
|
visitorSessionId
|
|
@@ -633,6 +636,7 @@ function createAgentClient(options) {
|
|
|
633
636
|
runtimeOrigin,
|
|
634
637
|
visitorSessionId,
|
|
635
638
|
storeOptions,
|
|
639
|
+
options.previewBuildId,
|
|
636
640
|
options.getUnpublishedPreviewGrant
|
|
637
641
|
);
|
|
638
642
|
return {
|
|
@@ -659,6 +663,16 @@ function createAgentClient(options) {
|
|
|
659
663
|
|
|
660
664
|
// src/runtime/errors.ts
|
|
661
665
|
import { ClientError as ClientError3 } from "eve/client";
|
|
666
|
+
var TRANSIENT_AGENT_ERROR_MESSAGE = "I couldn\u2019t finish that answer. Please try again.";
|
|
667
|
+
var PREVIEW_AUTHORIZATION_ERROR_MESSAGE = "This preview could not be authorized. Open the latest preview from Webless.";
|
|
668
|
+
function isTransientRuntimeMessage(message) {
|
|
669
|
+
const normalized = message.trim().toLowerCase();
|
|
670
|
+
return normalized.includes("empty response from runtime") || normalized.includes("failed to fetch") || normalized.includes("networkerror") || normalized.includes("load failed");
|
|
671
|
+
}
|
|
672
|
+
function isPreviewAuthorizationMessage(message) {
|
|
673
|
+
const normalized = message.trim().toLowerCase();
|
|
674
|
+
return normalized.includes("unpublished preview authorization") || normalized.includes("unpublished preview grant") || normalized.includes("agent studio preview grant") || normalized.includes("preview authorization");
|
|
675
|
+
}
|
|
662
676
|
function formatAgentError(error) {
|
|
663
677
|
if (error instanceof ClientError3) {
|
|
664
678
|
if (error.status === 401 && error.code === "index_required") {
|
|
@@ -670,13 +684,24 @@ function formatAgentError(error) {
|
|
|
670
684
|
if (error.status === 409 && error.code === "session_not_active") {
|
|
671
685
|
return "Session expired \u2014 send a new message to start again.";
|
|
672
686
|
}
|
|
673
|
-
|
|
687
|
+
if (error.message && isPreviewAuthorizationMessage(error.message)) {
|
|
688
|
+
return PREVIEW_AUTHORIZATION_ERROR_MESSAGE;
|
|
689
|
+
}
|
|
690
|
+
if (error.status >= 500 || error.message && isTransientRuntimeMessage(error.message)) {
|
|
691
|
+
return TRANSIENT_AGENT_ERROR_MESSAGE;
|
|
692
|
+
}
|
|
693
|
+
return error.message || "This assistant is unavailable right now.";
|
|
674
694
|
}
|
|
675
695
|
if (error instanceof DOMException && error.name === "AbortError") {
|
|
676
696
|
return "";
|
|
677
697
|
}
|
|
678
|
-
if (error instanceof Error)
|
|
679
|
-
|
|
698
|
+
if (error instanceof Error) {
|
|
699
|
+
if (isPreviewAuthorizationMessage(error.message)) {
|
|
700
|
+
return PREVIEW_AUTHORIZATION_ERROR_MESSAGE;
|
|
701
|
+
}
|
|
702
|
+
return isTransientRuntimeMessage(error.message) ? TRANSIENT_AGENT_ERROR_MESSAGE : error.message;
|
|
703
|
+
}
|
|
704
|
+
return TRANSIENT_AGENT_ERROR_MESSAGE;
|
|
680
705
|
}
|
|
681
706
|
|
|
682
707
|
// src/react/persisted-conversation.ts
|
|
@@ -785,6 +810,7 @@ function useAgentChat({
|
|
|
785
810
|
customerId,
|
|
786
811
|
getUnpublishedPreviewGrant,
|
|
787
812
|
indexId,
|
|
813
|
+
previewBuildId,
|
|
788
814
|
version,
|
|
789
815
|
runtimeOrigin,
|
|
790
816
|
visitorSessionId,
|
|
@@ -835,13 +861,14 @@ function useAgentChat({
|
|
|
835
861
|
customerId,
|
|
836
862
|
getUnpublishedPreviewGrant: resolveUnpublishedPreviewGrant,
|
|
837
863
|
indexId,
|
|
864
|
+
previewBuildId,
|
|
838
865
|
version,
|
|
839
866
|
runtimeOrigin,
|
|
840
867
|
visitorSessionId: visitorId,
|
|
841
868
|
storageKeyPrefix: resolvedStorageKeyPrefix
|
|
842
869
|
})
|
|
843
870
|
);
|
|
844
|
-
const identityKey = `${customerId ?? ""}|${indexId}|${version ?? "published"}|${runtimeOrigin ?? ""}|${resolvedStorageKeyPrefix}|${visitorId}|${greeting ?? ""}`;
|
|
871
|
+
const identityKey = `${customerId ?? ""}|${indexId}|${version ?? "published"}|${runtimeOrigin ?? ""}|${previewBuildId ?? ""}|${resolvedStorageKeyPrefix}|${visitorId}|${greeting ?? ""}`;
|
|
845
872
|
const identityRef = useRef(identityKey);
|
|
846
873
|
useEffect(() => {
|
|
847
874
|
if (identityRef.current === identityKey) {
|
|
@@ -854,6 +881,7 @@ function useAgentChat({
|
|
|
854
881
|
customerId,
|
|
855
882
|
getUnpublishedPreviewGrant: resolveUnpublishedPreviewGrant,
|
|
856
883
|
indexId,
|
|
884
|
+
previewBuildId,
|
|
857
885
|
version,
|
|
858
886
|
runtimeOrigin,
|
|
859
887
|
visitorSessionId: visitorId,
|
|
@@ -870,6 +898,7 @@ function useAgentChat({
|
|
|
870
898
|
identityKey,
|
|
871
899
|
indexId,
|
|
872
900
|
initialState,
|
|
901
|
+
previewBuildId,
|
|
873
902
|
runtimeOrigin,
|
|
874
903
|
resolvedStorageKeyPrefix,
|
|
875
904
|
version,
|
|
@@ -973,8 +1002,8 @@ function useAgentChat({
|
|
|
973
1002
|
if (!message) return;
|
|
974
1003
|
setState((prev) => ({
|
|
975
1004
|
...prev,
|
|
976
|
-
phase: "
|
|
977
|
-
toolSteps: prev.toolSteps.map(
|
|
1005
|
+
phase: "error",
|
|
1006
|
+
toolSteps: prev.toolSteps.length === 1 && prev.toolSteps[0]?.kind === "planning" ? [] : prev.toolSteps.map(
|
|
978
1007
|
(step) => step.state === "active" ? {
|
|
979
1008
|
...step,
|
|
980
1009
|
detail: "Couldn\u2019t complete this step",
|
|
@@ -1117,11 +1146,12 @@ import { useEffect as useEffect2, useRef as useRef3 } from "react";
|
|
|
1117
1146
|
|
|
1118
1147
|
// src/react/components/AgentActivityBubble/AgentActivityBubble.tsx
|
|
1119
1148
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
1120
|
-
function workSummary(steps) {
|
|
1149
|
+
function workSummary(steps, failed) {
|
|
1121
1150
|
const active = [...steps].reverse().find((step) => step.state === "active");
|
|
1122
1151
|
if (active?.kind === "specialist") return `Working with ${active.label}`;
|
|
1123
1152
|
if (active?.kind === "search") return "Searching this site";
|
|
1124
1153
|
if (active) return active.label;
|
|
1154
|
+
if (failed) return "Couldn\u2019t complete this request";
|
|
1125
1155
|
const hasError = steps.some((step) => step.state === "error");
|
|
1126
1156
|
const specialists = steps.filter(
|
|
1127
1157
|
(step) => step.kind === "specialist" && step.state === "completed"
|
|
@@ -1136,18 +1166,21 @@ function workSummary(steps) {
|
|
|
1136
1166
|
if (searched) return "Searched this site";
|
|
1137
1167
|
return "Prepared a response";
|
|
1138
1168
|
}
|
|
1139
|
-
function AgentActivityBubble({
|
|
1169
|
+
function AgentActivityBubble({
|
|
1170
|
+
failed = false,
|
|
1171
|
+
steps
|
|
1172
|
+
}) {
|
|
1140
1173
|
const active = steps.some((step) => step.state === "active");
|
|
1141
1174
|
return /* @__PURE__ */ jsxs("article", { className: "agent-activity-bubble", children: [
|
|
1142
1175
|
/* @__PURE__ */ jsxs("p", { className: "agent-activity-bubble__status", "aria-live": "polite", children: [
|
|
1143
1176
|
/* @__PURE__ */ jsx(
|
|
1144
1177
|
"span",
|
|
1145
1178
|
{
|
|
1146
|
-
className: `agent-activity-bubble__pulse${active ? " is-active" : ""}`,
|
|
1179
|
+
className: `agent-activity-bubble__pulse${active ? " is-active" : failed ? " is-error" : ""}`,
|
|
1147
1180
|
"aria-hidden": "true"
|
|
1148
1181
|
}
|
|
1149
1182
|
),
|
|
1150
|
-
workSummary(steps)
|
|
1183
|
+
workSummary(steps, failed)
|
|
1151
1184
|
] }),
|
|
1152
1185
|
/* @__PURE__ */ jsxs("details", { className: "agent-activity-bubble__details", open: active, children: [
|
|
1153
1186
|
/* @__PURE__ */ jsx("summary", { children: "Work details" }),
|
|
@@ -1455,7 +1488,13 @@ function AgentRail({
|
|
|
1455
1488
|
/* @__PURE__ */ jsxs4("div", { ref: transcriptRef, className: "agent-rail__transcript", children: [
|
|
1456
1489
|
state.messages.map((message) => /* @__PURE__ */ jsx5(MessageBubble, { message }, message.id)),
|
|
1457
1490
|
streamingMessage ? /* @__PURE__ */ jsx5(MessageBubble, { message: streamingMessage }) : null,
|
|
1458
|
-
showActivity ? /* @__PURE__ */ jsx5(
|
|
1491
|
+
showActivity ? /* @__PURE__ */ jsx5(
|
|
1492
|
+
AgentActivityBubble,
|
|
1493
|
+
{
|
|
1494
|
+
failed: state.phase === "error",
|
|
1495
|
+
steps: state.toolSteps
|
|
1496
|
+
}
|
|
1497
|
+
) : null,
|
|
1459
1498
|
!expanded && showIdleFollowUps ? /* @__PURE__ */ jsx5("div", { className: "agent-rail__followups-slot", children: /* @__PURE__ */ jsx5(
|
|
1460
1499
|
FollowUpChips,
|
|
1461
1500
|
{
|
|
@@ -1781,6 +1820,7 @@ function AgentWidget({
|
|
|
1781
1820
|
indexId,
|
|
1782
1821
|
customerId,
|
|
1783
1822
|
getUnpublishedPreviewGrant,
|
|
1823
|
+
previewBuildId,
|
|
1784
1824
|
version,
|
|
1785
1825
|
runtimeOrigin,
|
|
1786
1826
|
placement: placementInput,
|
|
@@ -1808,6 +1848,7 @@ function AgentWidget({
|
|
|
1808
1848
|
customerId,
|
|
1809
1849
|
getUnpublishedPreviewGrant,
|
|
1810
1850
|
indexId,
|
|
1851
|
+
previewBuildId,
|
|
1811
1852
|
version,
|
|
1812
1853
|
runtimeOrigin,
|
|
1813
1854
|
greeting: branding?.greeting
|
|
@@ -1929,4 +1970,4 @@ export {
|
|
|
1929
1970
|
AssistEdgeTab,
|
|
1930
1971
|
AgentWidget
|
|
1931
1972
|
};
|
|
1932
|
-
//# sourceMappingURL=chunk-
|
|
1973
|
+
//# sourceMappingURL=chunk-APNF27K2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/react/hooks/useAgentChat.ts","../src/runtime/client.ts","../src/runtime/capability.ts","../src/runtime/config.ts","../src/runtime/session-store.ts","../src/runtime/errors.ts","../src/react/persisted-conversation.ts","../src/react/placement.ts","../src/react/types/conversation.ts","../src/react/components/AgentRail/AgentRail.tsx","../src/react/components/AgentActivityBubble/AgentActivityBubble.tsx","../src/react/components/Composer/Composer.tsx","../src/react/components/FollowUpChips/FollowUpChips.tsx","../src/react/components/MessageBubble/MessageBubble.tsx","../src/react/components/AssistEdgeTab/AssistEdgeTab.tsx","../src/react/components/AgentWidget/AgentWidget.tsx","../src/react/page-shift.ts","../src/react/hooks/useIsMobile.ts","../src/react/panel-controller.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { createAgentClient } from \"../../runtime/client\";\nimport { formatAgentError } from \"../../runtime/errors\";\nimport type { AgentIndexVersion, AgentWorkItem } from \"../../runtime/types\";\nimport {\n buildAgentStorageKeyPrefix,\n getOrCreateVisitorSessionId,\n} from \"../../runtime/session-store\";\nimport {\n clearPersistedAgentConversation,\n loadPersistedAgentConversation,\n savePersistedAgentConversation,\n type PersistedAgentConversation,\n} from \"../persisted-conversation\";\nimport type {\n AgentRailPhase,\n AgentRailState,\n ConversationMessage,\n FollowUpSuggestion,\n ToolStep,\n} from \"../types/conversation\";\n\nconst DEFAULT_GREETING =\n \"Hi! I can search this site or bring in a specialist when it helps. What would you like to know?\";\n\nfunction createInitialState(greeting = DEFAULT_GREETING): AgentRailState {\n return {\n phase: \"idle\",\n messages: [\n {\n id: \"greeting\",\n role: \"agent\",\n text: greeting,\n createdAt: 0,\n },\n ],\n toolSteps: [],\n journey: null,\n followUps: [],\n streamingText: \"\",\n error: null,\n };\n}\n\nfunction stateFromConversation(\n conversation: PersistedAgentConversation | null,\n initialState: AgentRailState\n): AgentRailState {\n if (!conversation || conversation.messages.length === 0) return initialState;\n return {\n ...initialState,\n messages: conversation.messages,\n phase: conversation.pending\n ? conversation.streamingText\n ? \"streaming\"\n : \"thinking\"\n : \"complete\",\n streamingText: conversation.streamingText,\n };\n}\n\nfunction upsertToolStep(\n steps: readonly ToolStep[],\n item: AgentWorkItem\n): ToolStep[] {\n const next = {\n id: item.id,\n kind: item.kind,\n label: item.label,\n state: item.state,\n ...(item.detail ? { detail: item.detail } : {}),\n } satisfies ToolStep;\n const index = steps.findIndex((step) => step.id === item.id);\n if (index < 0) return [...steps, next];\n return steps.map((step, stepIndex) => (stepIndex === index ? next : step));\n}\n\nfunction completeActivePlanning(steps: readonly ToolStep[]): ToolStep[] {\n return steps.map((step) =>\n step.kind === \"planning\" && step.state === \"active\"\n ? {\n ...step,\n detail: \"Prepared a response\",\n state: \"completed\" as const,\n }\n : step\n );\n}\n\nexport type UseAgentChatOptions = {\n customerId?: string;\n getUnpublishedPreviewGrant?: () => Promise<string>;\n indexId: string;\n previewBuildId?: string;\n version?: AgentIndexVersion;\n runtimeOrigin?: string;\n visitorSessionId?: string;\n storageKeyPrefix?: string;\n greeting?: string;\n};\n\nexport function useAgentChat({\n customerId,\n getUnpublishedPreviewGrant,\n indexId,\n previewBuildId,\n version,\n runtimeOrigin,\n visitorSessionId,\n storageKeyPrefix,\n greeting,\n}: UseAgentChatOptions) {\n const initialState = useMemo(\n () => createInitialState(greeting?.trim() || DEFAULT_GREETING),\n [greeting]\n );\n const previewGrantProviderRef = useRef(getUnpublishedPreviewGrant);\n previewGrantProviderRef.current = getUnpublishedPreviewGrant;\n const resolveUnpublishedPreviewGrant = () => {\n const provider = previewGrantProviderRef.current;\n if (!provider) {\n return Promise.reject(\n new Error(\n \"An unpublished preview grant is required to use the Agent Runtime preview.\"\n )\n );\n }\n return provider();\n };\n const resolvedStorageKeyPrefix = useMemo(\n () =>\n storageKeyPrefix?.trim() ||\n buildAgentStorageKeyPrefix({\n customerId,\n indexId,\n version,\n runtimeOrigin,\n }),\n [customerId, indexId, runtimeOrigin, storageKeyPrefix, version]\n );\n const visitorId = useMemo(\n () =>\n visitorSessionId?.trim() ||\n getOrCreateVisitorSessionId({\n storageKeyPrefix: resolvedStorageKeyPrefix,\n }),\n [resolvedStorageKeyPrefix, visitorSessionId]\n );\n const [state, setState] = useState<AgentRailState>(() =>\n stateFromConversation(\n loadPersistedAgentConversation(resolvedStorageKeyPrefix, visitorId),\n initialState\n )\n );\n const runRef = useRef<AbortController | null>(null);\n const clientRef = useRef(\n createAgentClient({\n customerId,\n getUnpublishedPreviewGrant: resolveUnpublishedPreviewGrant,\n indexId,\n previewBuildId,\n version,\n runtimeOrigin,\n visitorSessionId: visitorId,\n storageKeyPrefix: resolvedStorageKeyPrefix,\n })\n );\n const identityKey = `${customerId ?? \"\"}|${indexId}|${\n version ?? \"published\"\n }|${runtimeOrigin ?? \"\"}|${\n previewBuildId ?? \"\"\n }|${resolvedStorageKeyPrefix}|${visitorId}|${greeting ?? \"\"}`;\n const identityRef = useRef(identityKey);\n\n useEffect(() => {\n if (identityRef.current === identityKey) {\n return;\n }\n\n identityRef.current = identityKey;\n runRef.current?.abort();\n runRef.current = null;\n clientRef.current = createAgentClient({\n customerId,\n getUnpublishedPreviewGrant: resolveUnpublishedPreviewGrant,\n indexId,\n previewBuildId,\n version,\n runtimeOrigin,\n visitorSessionId: visitorId,\n storageKeyPrefix: resolvedStorageKeyPrefix,\n });\n setState(\n stateFromConversation(\n loadPersistedAgentConversation(resolvedStorageKeyPrefix, visitorId),\n initialState\n )\n );\n }, [\n customerId,\n identityKey,\n indexId,\n initialState,\n previewBuildId,\n runtimeOrigin,\n resolvedStorageKeyPrefix,\n version,\n visitorId,\n ]);\n\n useEffect(() => {\n if (!hasVisitorMessages(state.messages)) return;\n savePersistedAgentConversation(resolvedStorageKeyPrefix, visitorId, {\n messages: state.messages,\n pending: isAgentBusy(state.phase),\n streamingText: state.streamingText,\n });\n }, [\n resolvedStorageKeyPrefix,\n state.messages,\n state.phase,\n state.streamingText,\n visitorId,\n ]);\n\n const reset = useCallback(() => {\n runRef.current?.abort();\n runRef.current = null;\n clientRef.current.reset();\n clearPersistedAgentConversation(resolvedStorageKeyPrefix, visitorId);\n setState(initialState);\n }, [initialState, resolvedStorageKeyPrefix, visitorId]);\n\n const runTurn = useCallback(\n async (input: {\n controller: AbortController;\n initialText?: string;\n resume: boolean;\n visitorText: string;\n }) => {\n const { controller, initialText = \"\", resume, visitorText } = input;\n const { signal } = controller;\n const isActiveRun = () =>\n runRef.current === controller && !signal.aborted;\n\n try {\n let streamStarted = Boolean(initialText);\n let streamed = initialText;\n const handlers = {\n onWork: (item: AgentWorkItem) => {\n if (!isActiveRun()) return;\n setState((prev) => ({\n ...prev,\n phase: item.state === \"active\" ? \"running-tools\" : prev.phase,\n toolSteps: upsertToolStep(prev.toolSteps, item),\n }));\n },\n onDelta: (delta: string) => {\n if (!isActiveRun()) return;\n if (!streamStarted) {\n streamStarted = true;\n setState((prev) => ({\n ...prev,\n phase: \"streaming\",\n toolSteps: completeActivePlanning(prev.toolSteps),\n streamingText: \"\",\n }));\n }\n streamed += delta;\n setState((prev) => ({\n ...prev,\n phase: \"streaming\",\n streamingText: streamed,\n }));\n },\n onComplete: () => {\n if (!isActiveRun()) return;\n streamStarted = true;\n },\n };\n\n let finalText = resume\n ? await clientRef.current.resumeTurn({\n handlers,\n initialText,\n message: visitorText,\n signal,\n })\n : await clientRef.current.sendTurn(visitorText, { handlers, signal });\n\n if (resume && finalText === null) {\n finalText = await clientRef.current.sendTurn(visitorText, {\n handlers,\n signal,\n });\n }\n\n if (!isActiveRun() || finalText === null) return;\n\n const agentMessage: ConversationMessage = {\n id: `agent-${Date.now()}`,\n role: \"agent\",\n text: finalText,\n createdAt: Date.now(),\n };\n\n setState((prev) => ({\n ...prev,\n phase: \"complete\",\n messages: [...prev.messages, agentMessage],\n toolSteps: completeActivePlanning(prev.toolSteps),\n streamingText: \"\",\n followUps: [],\n journey: null,\n }));\n runRef.current = null;\n } catch (error) {\n if (error instanceof DOMException && error.name === \"AbortError\")\n return;\n if (!isActiveRun()) return;\n const message = formatAgentError(error);\n if (!message) return;\n setState((prev) => ({\n ...prev,\n phase: \"error\",\n toolSteps:\n prev.toolSteps.length === 1 &&\n prev.toolSteps[0]?.kind === \"planning\"\n ? []\n : prev.toolSteps.map((step) =>\n step.state === \"active\"\n ? {\n ...step,\n detail: \"Couldn’t complete this step\",\n state: \"error\" as const,\n }\n : step\n ),\n streamingText: \"\",\n error: message,\n }));\n runRef.current = null;\n }\n },\n []\n );\n\n const submit = useCallback(\n async (visitorText: string) => {\n if (runRef.current) {\n runRef.current.abort();\n clientRef.current.cancelActive();\n }\n const controller = new AbortController();\n runRef.current = controller;\n\n const visitorMessage: ConversationMessage = {\n id: `visitor-${Date.now()}`,\n role: \"visitor\",\n text: visitorText,\n createdAt: Date.now(),\n };\n\n setState((prev) => ({\n ...prev,\n phase: \"thinking\",\n messages: [...prev.messages, visitorMessage],\n toolSteps: [\n {\n id: \"planning\",\n kind: \"planning\",\n label: \"Understanding your question\",\n state: \"active\",\n },\n ],\n journey: null,\n followUps: [],\n streamingText: \"\",\n error: null,\n }));\n await runTurn({ controller, resume: false, visitorText });\n },\n [runTurn]\n );\n\n useEffect(() => {\n const conversation = loadPersistedAgentConversation(\n resolvedStorageKeyPrefix,\n visitorId\n );\n if (!conversation?.pending) return;\n const visitorMessage = [...conversation.messages]\n .reverse()\n .find((message) => message.role === \"visitor\");\n if (!visitorMessage) return;\n\n const controller = new AbortController();\n runRef.current = controller;\n void runTurn({\n controller,\n initialText: conversation.streamingText,\n resume: true,\n visitorText: visitorMessage.text,\n });\n\n return () => {\n if (runRef.current === controller) {\n runRef.current = null;\n }\n controller.abort();\n };\n }, [identityKey, resolvedStorageKeyPrefix, runTurn, visitorId]);\n\n useEffect(() => {\n return () => {\n runRef.current?.abort();\n runRef.current = null;\n };\n }, []);\n\n return {\n state,\n reset,\n submit,\n visitorSessionId: visitorId,\n sessionId: clientRef.current.getActiveSessionId(),\n };\n}\n\nexport function hasVisitorMessages(messages: ConversationMessage[]) {\n return messages.some((message) => message.role === \"visitor\");\n}\n\nexport function createIdleSuggestions(): FollowUpSuggestion[] {\n return [\n { id: \"idle-1\", label: \"Hello — what can you do?\" },\n { id: \"idle-2\", label: \"Help me evaluate this product\" },\n { id: \"idle-3\", label: \"What should I ask you?\" },\n ];\n}\n\nexport function isAgentBusy(phase: AgentRailPhase) {\n return (\n phase === \"thinking\" || phase === \"running-tools\" || phase === \"streaming\"\n );\n}\n","import {\n Client,\n ClientError,\n type ClientSession,\n type MessageResponse,\n type MessageStreamEvent,\n} from \"eve/client\";\nimport {\n createAgentRuntimeCapability,\n type AgentRuntimeCapability,\n withCapabilityRefresh,\n} from \"./capability\";\nimport { resolveAgentRuntimeConfig } from \"./config\";\nimport {\n buildAgentStorageKeyPrefix,\n clearPersistedAgentSession,\n getOrCreateVisitorSessionId,\n loadPersistedAgentSession,\n savePersistedAgentSession,\n type SessionStoreOptions,\n} from \"./session-store\";\nimport type {\n AgentClient,\n AgentClientOptions,\n AgentIndexVersion,\n AgentResumeTurnOptions,\n AgentSendTurnOptions,\n AgentStreamHandlers,\n AgentWorkItem,\n} from \"./types\";\n\nfunction isTurnBoundary(event: MessageStreamEvent) {\n return (\n event.type === \"session.waiting\" ||\n event.type === \"session.completed\" ||\n event.type === \"session.failed\"\n );\n}\n\nfunction applyMessageEvent(\n event: MessageStreamEvent,\n rendered: string,\n handlers: AgentStreamHandlers,\n workItems: Map<string, AgentWorkItem>\n) {\n applyWorkEvent(event, handlers, workItems);\n\n if (event.type === \"session.failed\") {\n throw new Error(event.data.message || event.data.code);\n }\n\n if (event.type === \"message.completed\") {\n handlers.onComplete?.();\n }\n\n if (event.type !== \"message.appended\") return rendered;\n\n const { messageDelta, messageSoFar } = event.data;\n let delta = messageDelta;\n let next = rendered;\n if (messageSoFar.startsWith(rendered)) {\n delta = messageSoFar.slice(rendered.length);\n next = messageSoFar;\n } else if (messageDelta) {\n next += messageDelta;\n }\n if (delta) handlers.onDelta(delta);\n return next;\n}\n\nfunction latestTurnEvents(events: readonly MessageStreamEvent[]) {\n let startIndex = -1;\n for (let index = events.length - 1; index >= 0; index -= 1) {\n if (events[index]?.type === \"message.received\") {\n startIndex = index;\n break;\n }\n }\n return startIndex >= 0 ? events.slice(startIndex) : [];\n}\n\nfunction renderTurn(events: readonly MessageStreamEvent[]) {\n let rendered = \"\";\n for (const event of events) {\n if (event.type !== \"message.appended\") continue;\n const { messageDelta, messageSoFar } = event.data;\n if (messageSoFar.startsWith(rendered)) {\n rendered = messageSoFar;\n } else if (messageDelta) {\n rendered += messageDelta;\n }\n }\n return rendered;\n}\n\nfunction emitWorkItem(\n item: AgentWorkItem,\n handlers: AgentStreamHandlers,\n workItems: Map<string, AgentWorkItem>\n) {\n workItems.set(item.id, item);\n handlers.onWork?.(item);\n handlers.onStep?.(item.label, item.detail);\n}\n\nfunction completePlanning(\n handlers: AgentStreamHandlers,\n workItems: Map<string, AgentWorkItem>\n) {\n const planning = workItems.get(\"planning\");\n if (!planning || planning.state !== \"active\") return;\n emitWorkItem(\n {\n ...planning,\n detail: \"Picked the best way to help\",\n state: \"completed\",\n },\n handlers,\n workItems\n );\n}\n\nfunction specialistNameFromInput(input: Readonly<Record<string, unknown>>) {\n const message = input.message;\n if (typeof message !== \"string\") return undefined;\n const match = /^Webless-Agent-Name:\\s*(.+)$/imu.exec(message);\n return match?.[1]?.trim() || undefined;\n}\n\nfunction requestedWorkItem(\n action: Extract<\n Extract<\n MessageStreamEvent,\n { type: \"actions.requested\" }\n >[\"data\"][\"actions\"][number],\n { callId: string }\n >\n): AgentWorkItem | null {\n if (action.kind === \"tool-call\" && action.toolName === \"search_discovery\") {\n return {\n id: action.callId,\n kind: \"search\",\n label: \"Search & Discovery\",\n detail: \"Searching this site\",\n state: \"active\",\n };\n }\n\n if (\n action.kind === \"subagent-call\" ||\n action.kind === \"remote-agent-call\" ||\n (action.kind === \"tool-call\" && action.toolName === \"agent\")\n ) {\n const name = specialistNameFromInput(action.input) ?? \"Specialist\";\n return {\n id: action.callId,\n kind: \"specialist\",\n label: name,\n detail: \"Reviewing your question\",\n state: \"active\",\n };\n }\n\n return null;\n}\n\nexport function applyWorkEvent(\n event: MessageStreamEvent,\n handlers: AgentStreamHandlers,\n workItems: Map<string, AgentWorkItem>\n) {\n if (event.type === \"step.started\" && workItems.size === 0) {\n emitWorkItem(\n {\n id: \"planning\",\n kind: \"planning\",\n label: \"Understanding your question\",\n state: \"active\",\n },\n handlers,\n workItems\n );\n return;\n }\n\n if (event.type === \"actions.requested\") {\n completePlanning(handlers, workItems);\n for (const action of event.data.actions) {\n const item = requestedWorkItem(action);\n if (item) emitWorkItem(item, handlers, workItems);\n }\n return;\n }\n\n if (event.type === \"subagent.called\") {\n completePlanning(handlers, workItems);\n const current = workItems.get(event.data.callId);\n if (!current) {\n emitWorkItem(\n {\n id: event.data.callId,\n kind: \"specialist\",\n label: event.data.name || \"Specialist\",\n detail: \"Reviewing your question\",\n state: \"active\",\n },\n handlers,\n workItems\n );\n }\n return;\n }\n\n if (event.type === \"subagent.completed\") {\n const current = workItems.get(event.data.callId);\n if (!current) return;\n emitWorkItem(\n {\n ...current,\n detail: \"Guidance received\",\n state: \"completed\",\n },\n handlers,\n workItems\n );\n return;\n }\n\n if (event.type !== \"action.result\") return;\n const { result, status } = event.data;\n const current = workItems.get(result.callId);\n if (!current) return;\n const failed = status !== \"completed\" || result.isError === true;\n emitWorkItem(\n {\n ...current,\n detail: failed\n ? \"Couldn’t complete; continuing with available information\"\n : current.kind === \"search\"\n ? \"Found relevant site content\"\n : \"Guidance received\",\n state: failed ? \"error\" : \"completed\",\n },\n handlers,\n workItems\n );\n}\n\nclass AgentSession {\n private client: Client | undefined;\n private clientHost: string | undefined;\n private session: ClientSession | undefined;\n private activeResponse: MessageResponse | undefined;\n private readonly capability: AgentRuntimeCapability;\n\n constructor(\n private readonly indexId: string,\n private readonly version: AgentIndexVersion,\n private readonly runtimeOrigin: string,\n private readonly visitorSessionId: string,\n private readonly storeOptions: SessionStoreOptions,\n previewBuildId?: string,\n getUnpublishedPreviewGrant?: () => Promise<string>\n ) {\n this.capability = createAgentRuntimeCapability({\n getUnpublishedPreviewGrant,\n indexId,\n previewBuildId,\n runtimeOrigin,\n version,\n visitorSessionId,\n });\n }\n\n getActiveSessionId(): string | undefined {\n return (\n this.session?.state.sessionId ??\n loadPersistedAgentSession(this.visitorSessionId, this.storeOptions)\n ?.sessionId\n );\n }\n\n reset() {\n if (this.activeResponse) {\n void this.activeResponse.cancel().catch(() => {});\n } else {\n void this.session?.cancel().catch(() => {});\n }\n this.activeResponse = undefined;\n this.session = undefined;\n this.capability.invalidate();\n clearPersistedAgentSession(this.visitorSessionId, this.storeOptions);\n }\n\n private persistSessionCursor(session: ClientSession) {\n savePersistedAgentSession(\n this.visitorSessionId,\n session.state.sessionId,\n session.state.streamIndex,\n this.storeOptions\n );\n }\n\n private ensureClient(): Client {\n const config = resolveAgentRuntimeConfig({\n indexId: this.indexId,\n version: this.version,\n runtimeOrigin: this.runtimeOrigin,\n });\n if (!config.indexId) {\n throw new Error(\"indexId is required.\");\n }\n\n if (this.client && this.clientHost === config.host) {\n return this.client;\n }\n\n this.activeResponse = undefined;\n this.session = undefined;\n this.client = new Client({\n auth: { bearer: () => this.capability.getAccessToken() },\n host: config.host,\n redirect: \"error\",\n });\n this.clientHost = config.host;\n return this.client;\n }\n\n private attachPersistedSession(client: Client): ClientSession | undefined {\n const persisted = loadPersistedAgentSession(\n this.visitorSessionId,\n this.storeOptions\n );\n if (!persisted?.sessionId) return undefined;\n\n return client.sessions.attach(persisted.sessionId, {\n streamIndex: persisted.streamIndex,\n });\n }\n\n async sendTurn(\n message: string,\n signal: AbortSignal,\n handlers: AgentStreamHandlers\n ): Promise<string> {\n const client = this.ensureClient();\n let response: MessageResponse | undefined;\n let session = this.session ?? this.attachPersistedSession(client);\n\n if (session) {\n this.session = session;\n try {\n const activeSession = session;\n response = await withCapabilityRefresh(this.capability, () =>\n activeSession.send(message, { signal })\n );\n } catch (error) {\n if (\n error instanceof ClientError &&\n error.status === 409 &&\n error.code === \"session_not_active\"\n ) {\n clearPersistedAgentSession(this.visitorSessionId, this.storeOptions);\n this.session = undefined;\n session = undefined;\n } else {\n throw error;\n }\n }\n }\n\n if (!response) {\n const created = await withCapabilityRefresh(this.capability, () =>\n client.sessions.create({ message, signal })\n );\n response = created.response;\n session = created.session;\n this.session = session;\n this.persistSessionCursor(session);\n }\n\n this.activeResponse = response;\n let streamIndex = session?.state.streamIndex ?? 0;\n let rendered = \"\";\n const workItems = new Map<string, AgentWorkItem>();\n\n try {\n for await (const event of response) {\n if (signal.aborted) break;\n rendered = applyMessageEvent(event, rendered, handlers, workItems);\n streamIndex += 1;\n if (session) {\n savePersistedAgentSession(\n this.visitorSessionId,\n session.state.sessionId,\n streamIndex,\n this.storeOptions\n );\n }\n }\n } finally {\n this.activeResponse = undefined;\n if (session) {\n this.persistSessionCursor(session);\n }\n }\n\n if (!rendered.trim() && !signal.aborted) {\n throw new Error(\"Empty response from runtime\");\n }\n\n return rendered.trim();\n }\n\n async resumeTurn(\n message: string,\n signal: AbortSignal,\n handlers: AgentStreamHandlers,\n initialText = \"\"\n ): Promise<string | null> {\n const persisted = loadPersistedAgentSession(\n this.visitorSessionId,\n this.storeOptions\n );\n if (!persisted) return null;\n\n const client = this.ensureClient();\n const attached = client.sessions.attach(persisted.sessionId, {\n streamIndex: persisted.streamIndex,\n });\n const snapshot = await withCapabilityRefresh(this.capability, () =>\n attached.snapshot({ signal })\n );\n const turnEvents = latestTurnEvents(snapshot.events);\n const received = turnEvents[0];\n if (\n received?.type !== \"message.received\" ||\n received.data.message !== message\n ) {\n return null;\n }\n let rendered = renderTurn(turnEvents);\n const workItems = new Map<string, AgentWorkItem>();\n for (const event of turnEvents) {\n applyWorkEvent(event, handlers, workItems);\n }\n\n if (rendered.startsWith(initialText)) {\n const missedText = rendered.slice(initialText.length);\n if (missedText) handlers.onDelta(missedText);\n } else if (initialText.startsWith(rendered)) {\n rendered = initialText;\n } else if (!initialText.startsWith(rendered)) {\n rendered = initialText + rendered;\n }\n\n let session = client.sessions.attach(snapshot.session.sessionId, {\n streamIndex: snapshot.session.streamIndex,\n });\n this.session = session;\n this.persistSessionCursor(session);\n\n let snapshotBoundary: MessageStreamEvent | undefined;\n for (let index = turnEvents.length - 1; index >= 0; index -= 1) {\n const event = turnEvents[index];\n if (event && isTurnBoundary(event)) {\n snapshotBoundary = event;\n break;\n }\n }\n if (snapshotBoundary) {\n if (snapshotBoundary.type === \"session.failed\") {\n throw new Error(\n snapshotBoundary.data.message || snapshotBoundary.data.code\n );\n }\n handlers.onComplete?.();\n if (!rendered.trim()) throw new Error(\"Empty response from runtime\");\n return rendered.trim();\n }\n\n let streamIndex = snapshot.session.streamIndex;\n for await (const event of session.stream({ signal })) {\n if (signal.aborted) break;\n rendered = applyMessageEvent(event, rendered, handlers, workItems);\n streamIndex += 1;\n savePersistedAgentSession(\n this.visitorSessionId,\n session.state.sessionId,\n streamIndex,\n this.storeOptions\n );\n if (isTurnBoundary(event)) break;\n }\n\n session = client.sessions.attach(session.state.sessionId, { streamIndex });\n this.session = session;\n this.persistSessionCursor(session);\n\n if (!rendered.trim() && !signal.aborted) {\n throw new Error(\"Empty response from runtime\");\n }\n return rendered.trim();\n }\n\n cancelActive() {\n if (this.activeResponse) {\n this.activeResponse.cancel().catch(() => {});\n } else {\n this.session?.cancel().catch(() => {});\n }\n }\n}\n\nexport function createAgentClient(options: AgentClientOptions): AgentClient {\n const indexId = options.indexId.trim();\n if (!indexId) {\n throw new Error(\"indexId is required.\");\n }\n\n const version = options.version ?? \"published\";\n const runtimeOrigin = resolveAgentRuntimeConfig({\n indexId,\n runtimeOrigin: options.runtimeOrigin,\n version,\n }).origin;\n const storeOptions: SessionStoreOptions = {\n storageKeyPrefix:\n options.storageKeyPrefix?.trim() ||\n buildAgentStorageKeyPrefix({\n customerId: options.customerId,\n indexId,\n version,\n runtimeOrigin,\n }),\n };\n const visitorSessionId =\n options.visitorSessionId?.trim() ||\n getOrCreateVisitorSessionId(storeOptions);\n\n const session = new AgentSession(\n indexId,\n version,\n runtimeOrigin,\n visitorSessionId,\n storeOptions,\n options.previewBuildId,\n options.getUnpublishedPreviewGrant\n );\n\n return {\n indexId,\n version,\n runtimeOrigin,\n visitorSessionId,\n sendTurn: (message, sendOptions: AgentSendTurnOptions) =>\n session.sendTurn(\n message,\n sendOptions.signal ?? new AbortController().signal,\n sendOptions.handlers\n ),\n resumeTurn: (resumeOptions: AgentResumeTurnOptions) =>\n session.resumeTurn(\n resumeOptions.message,\n resumeOptions.signal ?? new AbortController().signal,\n resumeOptions.handlers,\n resumeOptions.initialText\n ),\n reset: () => session.reset(),\n cancelActive: () => session.cancelActive(),\n getActiveSessionId: () => session.getActiveSessionId(),\n };\n}\n","import { ClientError } from \"eve/client\";\nimport type { AgentIndexVersion } from \"./types\";\n\ntype RuntimeCapability = {\n accessToken: string;\n refreshAt: number;\n};\n\ntype AgentRuntimeCapabilityOptions = {\n getUnpublishedPreviewGrant?: () => Promise<string>;\n indexId: string;\n previewBuildId?: string;\n runtimeOrigin: string;\n version: AgentIndexVersion;\n visitorSessionId: string;\n fetchImplementation?: typeof fetch;\n now?: () => number;\n};\n\nconst MAX_REFRESH_SKEW_MS = 30_000;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction parseBootstrapResponse(\n value: unknown,\n indexId: string,\n now: number\n): RuntimeCapability {\n if (\n !isRecord(value) ||\n value.apiVersion !== \"webless.ai/agent-runtime-bootstrap/v1\" ||\n typeof value.accessToken !== \"string\" ||\n !value.accessToken ||\n typeof value.expiresAt !== \"string\" ||\n !isRecord(value.identity) ||\n value.identity.indexId !== indexId ||\n typeof value.identity.revision !== \"string\" ||\n !value.identity.revision ||\n typeof value.identity.tenantId !== \"string\" ||\n !value.identity.tenantId ||\n typeof value.origin !== \"string\" ||\n !value.origin ||\n value.tokenType !== \"Bearer\" ||\n typeof value.visitorSubject !== \"string\" ||\n !value.visitorSubject\n ) {\n throw new Error(\"Agent Runtime returned an invalid access response.\");\n }\n\n const expiresAt = Date.parse(value.expiresAt);\n if (!Number.isFinite(expiresAt) || expiresAt <= now) {\n throw new Error(\"Agent Runtime returned an expired access response.\");\n }\n\n const refreshSkew = Math.min(\n MAX_REFRESH_SKEW_MS,\n Math.floor((expiresAt - now) / 10)\n );\n return {\n accessToken: value.accessToken,\n refreshAt: expiresAt - refreshSkew,\n };\n}\n\nasync function readBootstrapError(response: Response): Promise<string> {\n const fallback = `Agent Runtime is unavailable (${response.status}).`;\n try {\n const value: unknown = await response.json();\n return isRecord(value) && typeof value.error === \"string\" && value.error\n ? value.error\n : fallback;\n } catch {\n return fallback;\n }\n}\n\nexport function createAgentRuntimeCapability(\n options: AgentRuntimeCapabilityOptions\n) {\n const fetchImplementation = options.fetchImplementation ?? fetch;\n const now = options.now ?? Date.now;\n let capability: RuntimeCapability | undefined;\n let generation = 0;\n let pendingBootstrap: Promise<RuntimeCapability> | undefined;\n\n const bootstrap = async (): Promise<RuntimeCapability> => {\n let previewGrant: string | undefined;\n const previewBuildId = options.previewBuildId?.trim();\n if (options.version === \"unpublished\") {\n previewGrant = previewBuildId\n ? undefined\n : (await options.getUnpublishedPreviewGrant?.())?.trim();\n if (!previewGrant && !previewBuildId) {\n throw new Error(\n \"Unpublished preview authorization is required to use the Agent Runtime preview.\"\n );\n }\n }\n\n const response = await fetchImplementation(\n `${options.runtimeOrigin}/webless/v1/bootstrap`,\n {\n body: JSON.stringify({\n clientSessionId: options.visitorSessionId,\n indexId: options.indexId,\n ...(previewBuildId ? { previewBuildId } : {}),\n ...(previewGrant ? { previewGrant } : {}),\n version: options.version,\n }),\n headers: { \"content-type\": \"application/json\" },\n method: \"POST\",\n }\n );\n if (!response.ok) {\n throw new Error(await readBootstrapError(response));\n }\n\n let value: unknown;\n try {\n value = await response.json();\n } catch {\n throw new Error(\"Agent Runtime returned an invalid access response.\");\n }\n return parseBootstrapResponse(value, options.indexId, now());\n };\n\n const getAccessToken = async (): Promise<string> => {\n if (capability && capability.refreshAt > now()) {\n return capability.accessToken;\n }\n\n const requestedGeneration = generation;\n if (!pendingBootstrap) {\n const trackedBootstrap = bootstrap().finally(() => {\n if (pendingBootstrap === trackedBootstrap) {\n pendingBootstrap = undefined;\n }\n });\n pendingBootstrap = trackedBootstrap;\n }\n\n const nextCapability = await pendingBootstrap;\n if (requestedGeneration !== generation) {\n return getAccessToken();\n }\n\n capability = nextCapability;\n return capability.accessToken;\n };\n\n return {\n getAccessToken,\n invalidate: () => {\n capability = undefined;\n generation += 1;\n pendingBootstrap = undefined;\n },\n };\n}\n\nexport type AgentRuntimeCapability = ReturnType<\n typeof createAgentRuntimeCapability\n>;\n\nexport async function withCapabilityRefresh<T>(\n capability: AgentRuntimeCapability,\n request: () => Promise<T>\n): Promise<T> {\n try {\n return await request();\n } catch (error) {\n if (!(error instanceof ClientError) || error.status !== 401) {\n throw error;\n }\n capability.invalidate();\n return await request();\n }\n}\n","import type { AgentIndexVersion, AgentRuntimeConfig } from \"./types\";\n\nexport const DEFAULT_RUNTIME_ORIGIN = \"https://runtime.staging.webless.ai\";\n\nconst trimTrailingSlash = (value: string) => value.replace(/\\/+$/, \"\");\n\nexport function buildEveHost(\n origin: string,\n indexId: string,\n version: AgentIndexVersion = \"published\",\n): string {\n const base = trimTrailingSlash(origin);\n const searchParams = new URLSearchParams({ indexId: indexId.trim() });\n if (version === \"unpublished\") {\n searchParams.set(\"version\", version);\n }\n return `${base}?${searchParams.toString()}`;\n}\n\nexport function resolveAgentRuntimeConfig(input: {\n indexId: string;\n runtimeOrigin?: string;\n version?: AgentIndexVersion;\n}): AgentRuntimeConfig {\n const origin = trimTrailingSlash(input.runtimeOrigin?.trim() || DEFAULT_RUNTIME_ORIGIN);\n const resolvedIndexId = input.indexId.trim();\n const version = input.version ?? \"published\";\n\n return {\n origin,\n indexId: resolvedIndexId,\n version,\n host: resolvedIndexId ? buildEveHost(origin, resolvedIndexId, version) : origin,\n };\n}\n\nexport function agentHealthUrl(runtimeOrigin?: string): string {\n const origin = trimTrailingSlash(runtimeOrigin?.trim() || DEFAULT_RUNTIME_ORIGIN);\n return `${origin}/eve/v1/health`;\n}\n","import type { AgentIndexVersion, PersistedAgentSession } from \"./types\";\n\nconst DEFAULT_STORAGE_KEY_PREFIX = \"webless:agent\";\n\nexport type SessionStoreOptions = {\n storageKeyPrefix?: string;\n};\n\nfunction normalizeRuntimeOrigin(runtimeOrigin?: string) {\n const trimmed = runtimeOrigin?.trim();\n if (!trimmed) return \"_\";\n return trimmed.replace(/\\/+$/, \"\");\n}\n\nexport function buildAgentStorageKeyPrefix(input: {\n customerId?: string;\n indexId: string;\n runtimeOrigin?: string;\n version?: AgentIndexVersion;\n}) {\n const customerId = input.customerId?.trim() || \"_\";\n const indexId = input.indexId.trim();\n if (!indexId) {\n throw new Error(\"indexId is required to build agent storage keys.\");\n }\n\n const versionSuffix = input.version === \"unpublished\" ? \":unpublished\" : \"\";\n return `${DEFAULT_STORAGE_KEY_PREFIX}:${customerId}:${indexId}${versionSuffix}:${normalizeRuntimeOrigin(input.runtimeOrigin)}`;\n}\n\nfunction createSessionId(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n return `sess_${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`;\n}\n\nfunction resolvePrefix(options?: SessionStoreOptions) {\n return options?.storageKeyPrefix?.trim() || DEFAULT_STORAGE_KEY_PREFIX;\n}\n\nexport function getOrCreateVisitorSessionId(options?: SessionStoreOptions): string {\n const prefix = resolvePrefix(options);\n const visitorKey = `${prefix}:visitorSessionId`;\n\n if (typeof sessionStorage === \"undefined\") {\n return createSessionId();\n }\n\n const existing = sessionStorage.getItem(visitorKey)?.trim();\n if (existing) return existing;\n\n const next = createSessionId();\n sessionStorage.setItem(visitorKey, next);\n return next;\n}\n\nexport function clearVisitorSessionId(options?: SessionStoreOptions) {\n if (typeof sessionStorage === \"undefined\") return;\n\n const prefix = resolvePrefix(options);\n sessionStorage.removeItem(`${prefix}:visitorSessionId`);\n}\n\nfunction runtimeSessionIdKey(visitorSessionId: string, prefix: string) {\n return `${prefix}:eve:${visitorSessionId}:sessionId`;\n}\n\nfunction runtimeStreamIndexKey(visitorSessionId: string, prefix: string) {\n return `${prefix}:eve:${visitorSessionId}:streamIndex`;\n}\n\nexport function loadPersistedAgentSession(\n visitorSessionId: string,\n options?: SessionStoreOptions,\n): PersistedAgentSession | null {\n if (typeof sessionStorage === \"undefined\" || !visitorSessionId.trim()) return null;\n\n const prefix = resolvePrefix(options);\n const sessionId = sessionStorage.getItem(runtimeSessionIdKey(visitorSessionId, prefix))?.trim();\n if (!sessionId) return null;\n\n const rawIndex = sessionStorage.getItem(runtimeStreamIndexKey(visitorSessionId, prefix));\n const streamIndex = rawIndex ? Number.parseInt(rawIndex, 10) : 0;\n\n return {\n sessionId,\n streamIndex: Number.isFinite(streamIndex) && streamIndex >= 0 ? streamIndex : 0,\n };\n}\n\nexport function savePersistedAgentSession(\n visitorSessionId: string,\n sessionId: string,\n streamIndex: number,\n options?: SessionStoreOptions,\n) {\n if (typeof sessionStorage === \"undefined\" || !visitorSessionId.trim() || !sessionId.trim()) {\n return;\n }\n\n const prefix = resolvePrefix(options);\n sessionStorage.setItem(runtimeSessionIdKey(visitorSessionId, prefix), sessionId);\n sessionStorage.setItem(\n runtimeStreamIndexKey(visitorSessionId, prefix),\n String(Math.max(0, streamIndex)),\n );\n}\n\nexport function clearPersistedAgentSession(\n visitorSessionId: string,\n options?: SessionStoreOptions,\n) {\n if (typeof sessionStorage === \"undefined\" || !visitorSessionId.trim()) return;\n const prefix = resolvePrefix(options);\n sessionStorage.removeItem(runtimeSessionIdKey(visitorSessionId, prefix));\n sessionStorage.removeItem(runtimeStreamIndexKey(visitorSessionId, prefix));\n}\n","import { ClientError } from \"eve/client\";\n\nconst TRANSIENT_AGENT_ERROR_MESSAGE =\n \"I couldn’t finish that answer. Please try again.\";\nconst PREVIEW_AUTHORIZATION_ERROR_MESSAGE =\n \"This preview could not be authorized. Open the latest preview from Webless.\";\n\nfunction isTransientRuntimeMessage(message: string) {\n const normalized = message.trim().toLowerCase();\n return (\n normalized.includes(\"empty response from runtime\") ||\n normalized.includes(\"failed to fetch\") ||\n normalized.includes(\"networkerror\") ||\n normalized.includes(\"load failed\")\n );\n}\n\nfunction isPreviewAuthorizationMessage(message: string) {\n const normalized = message.trim().toLowerCase();\n return (\n normalized.includes(\"unpublished preview authorization\") ||\n normalized.includes(\"unpublished preview grant\") ||\n normalized.includes(\"agent studio preview grant\") ||\n normalized.includes(\"preview authorization\")\n );\n}\n\nexport function formatAgentError(error: unknown): string {\n if (error instanceof ClientError) {\n if (error.status === 401 && error.code === \"index_required\") {\n return \"Missing indexId — pass a published index id to createAgentClient().\";\n }\n if (error.status === 403 && error.code === \"agent_unavailable\") {\n return \"Agent unavailable for this index (disabled or unpublished).\";\n }\n if (error.status === 409 && error.code === \"session_not_active\") {\n return \"Session expired — send a new message to start again.\";\n }\n if (error.message && isPreviewAuthorizationMessage(error.message)) {\n return PREVIEW_AUTHORIZATION_ERROR_MESSAGE;\n }\n if (\n error.status >= 500 ||\n (error.message && isTransientRuntimeMessage(error.message))\n ) {\n return TRANSIENT_AGENT_ERROR_MESSAGE;\n }\n return error.message || \"This assistant is unavailable right now.\";\n }\n if (error instanceof DOMException && error.name === \"AbortError\") {\n return \"\";\n }\n if (error instanceof Error) {\n if (isPreviewAuthorizationMessage(error.message)) {\n return PREVIEW_AUTHORIZATION_ERROR_MESSAGE;\n }\n return isTransientRuntimeMessage(error.message)\n ? TRANSIENT_AGENT_ERROR_MESSAGE\n : error.message;\n }\n return TRANSIENT_AGENT_ERROR_MESSAGE;\n}\n","import type { ConversationMessage } from \"./types/conversation\";\n\nconst CONVERSATION_VERSION = 1;\n\nexport type PersistedAgentConversation = {\n messages: ConversationMessage[];\n pending: boolean;\n streamingText: string;\n};\n\nfunction conversationKey(storageKeyPrefix: string, visitorSessionId: string) {\n return `${storageKeyPrefix}:conversation:${visitorSessionId}`;\n}\n\nfunction parseMessage(value: unknown): ConversationMessage | null {\n if (typeof value !== \"object\" || value === null) return null;\n const record = value as Record<string, unknown>;\n if (\n typeof record.id !== \"string\" ||\n (record.role !== \"agent\" && record.role !== \"visitor\") ||\n typeof record.text !== \"string\" ||\n typeof record.createdAt !== \"number\" ||\n !Number.isFinite(record.createdAt)\n ) {\n return null;\n }\n return {\n id: record.id,\n role: record.role,\n text: record.text,\n createdAt: record.createdAt,\n };\n}\n\nexport function loadPersistedAgentConversation(\n storageKeyPrefix: string,\n visitorSessionId: string,\n): PersistedAgentConversation | null {\n if (typeof sessionStorage === \"undefined\") return null;\n const raw = sessionStorage.getItem(conversationKey(storageKeyPrefix, visitorSessionId));\n if (!raw) return null;\n\n try {\n const value: unknown = JSON.parse(raw);\n if (typeof value !== \"object\" || value === null) return null;\n const record = value as Record<string, unknown>;\n if (\n record.version !== CONVERSATION_VERSION ||\n !Array.isArray(record.messages) ||\n typeof record.pending !== \"boolean\" ||\n typeof record.streamingText !== \"string\"\n ) {\n return null;\n }\n const messages = record.messages.map(parseMessage);\n if (messages.some((message) => message === null)) return null;\n return {\n messages: messages.filter((message): message is ConversationMessage => message !== null),\n pending: record.pending,\n streamingText: record.streamingText,\n };\n } catch {\n return null;\n }\n}\n\nexport function savePersistedAgentConversation(\n storageKeyPrefix: string,\n visitorSessionId: string,\n conversation: PersistedAgentConversation,\n) {\n if (typeof sessionStorage === \"undefined\") return;\n sessionStorage.setItem(\n conversationKey(storageKeyPrefix, visitorSessionId),\n JSON.stringify({ version: CONVERSATION_VERSION, ...conversation }),\n );\n}\n\nexport function clearPersistedAgentConversation(\n storageKeyPrefix: string,\n visitorSessionId: string,\n) {\n if (typeof sessionStorage === \"undefined\") return;\n sessionStorage.removeItem(conversationKey(storageKeyPrefix, visitorSessionId));\n}\n","import type { AssistTabSide, AssistTabVariant } from \"./components/AssistEdgeTab/AssistEdgeTab\";\n\nexport type AgentPlacementConfig = {\n side: AssistTabSide;\n along: number;\n inset: number;\n variant: AssistTabVariant;\n};\n\nexport const DEFAULT_AGENT_PLACEMENT: AgentPlacementConfig = {\n side: \"right\",\n along: 50,\n inset: 0,\n variant: \"outline\",\n};\n\nexport function normalizeAgentPlacement(\n placement?: Partial<AgentPlacementConfig>,\n): AgentPlacementConfig {\n const along = placement?.along ?? DEFAULT_AGENT_PLACEMENT.along;\n return {\n side: placement?.side ?? DEFAULT_AGENT_PLACEMENT.side,\n along: Math.min(100, Math.max(0, along)),\n inset: Math.max(0, placement?.inset ?? DEFAULT_AGENT_PLACEMENT.inset),\n variant: placement?.variant ?? DEFAULT_AGENT_PLACEMENT.variant,\n };\n}\n","export type ToolStepState = \"completed\" | \"active\" | \"pending\" | \"error\";\n\nexport type ToolStep = {\n id: string;\n kind: \"planning\" | \"search\" | \"specialist\";\n label: string;\n state: ToolStepState;\n detail?: string;\n};\n\nexport type Citation = {\n id: string;\n label: string;\n url: string;\n};\n\nexport type FollowUpSuggestion = {\n id: string;\n label: string;\n};\n\nexport type JourneyContext = {\n id: string;\n name: string;\n currentStep?: number;\n totalSteps?: number;\n stepLabel?: string;\n};\n\nexport type ConversationMessage =\n | {\n id: string;\n role: \"visitor\";\n text: string;\n createdAt: number;\n }\n | {\n id: string;\n role: \"agent\";\n text: string;\n createdAt: number;\n citations?: Citation[];\n toolReceipts?: string[];\n streaming?: boolean;\n };\n\nexport type AgentRailPhase =\n | \"idle\"\n | \"thinking\"\n | \"running-tools\"\n | \"streaming\"\n | \"error\"\n | \"complete\";\n\nexport type AgentRailState = {\n phase: AgentRailPhase;\n messages: ConversationMessage[];\n toolSteps: ToolStep[];\n journey: JourneyContext | null;\n followUps: FollowUpSuggestion[];\n streamingText: string;\n error: string | null;\n};\n\nexport type AgentRailTheme = {\n railMaxWidth: string;\n brand: string;\n brandSoft: string;\n brandDeep: string;\n surface: string;\n surfaceMuted: string;\n text: string;\n textMuted: string;\n textSubtle: string;\n border: string;\n visitorBubble: string;\n visitorText: string;\n success: string;\n danger: string;\n fontBody: string;\n fontDisplay: string;\n};\n\nexport const defaultAgentRailTheme: AgentRailTheme = {\n railMaxWidth: \"450px\",\n brand: \"#6f16ff\",\n brandSoft: \"#f3edff\",\n brandDeep: \"#12043e\",\n surface: \"#ffffff\",\n surfaceMuted: \"#f4f6fb\",\n text: \"#171b2a\",\n textMuted: \"#5a6378\",\n textSubtle: \"#8a94a8\",\n border: \"rgb(42 51 70 / 0.1)\",\n visitorBubble: \"#6f16ff\",\n visitorText: \"#ffffff\",\n success: \"#18794e\",\n danger: \"#c94b63\",\n fontBody: '\"Mulish\", \"Avenir Next\", \"Segoe UI\", sans-serif',\n fontDisplay: '\"Space Grotesk\", sans-serif',\n};\n","import { useEffect, useRef, type CSSProperties } from \"react\";\nimport {\n defaultAgentRailTheme,\n type AgentRailState,\n type AgentRailTheme,\n} from \"../../types/conversation\";\nimport { AgentActivityBubble } from \"../AgentActivityBubble/AgentActivityBubble\";\nimport { Composer } from \"../Composer/Composer\";\nimport { FollowUpChips } from \"../FollowUpChips/FollowUpChips\";\nimport { MessageBubble } from \"../MessageBubble/MessageBubble\";\nimport \"./AgentRail.css\";\n\nfunction MinimizeIcon() {\n return (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M3.5 8h9\"\n stroke=\"currentColor\"\n strokeWidth=\"1.7\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\nfunction ExpandIcon() {\n return (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M6 3.5H3.5V6M10 3.5h2.5V6M10 12.5h2.5V10M6 12.5H3.5V10\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction RestoreIcon() {\n return (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M5.5 5.5H3.5V7.5M10.5 5.5h2V7.5M10.5 10.5h2V8.5M5.5 10.5H3.5V8.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport type AgentRailProps = {\n state: AgentRailState;\n theme?: Partial<AgentRailTheme>;\n brandLabel?: string;\n brandLogoUrl?: string;\n poweredByLabel?: string;\n composerPlaceholder?: string;\n mobileFullscreen?: boolean;\n expanded?: boolean;\n onCollapse?: () => void;\n onClose?: () => void;\n onExpandToggle?: () => void;\n onSubmit?: (message: string) => void;\n onFollowUpSelect?: (label: string) => void;\n};\n\nexport function AgentRail({\n state,\n theme,\n brandLabel = \"Webless Assist\",\n brandLogoUrl,\n poweredByLabel = \"Powered by Webless\",\n composerPlaceholder = \"Ask anything…\",\n mobileFullscreen = false,\n expanded = false,\n onCollapse,\n onClose,\n onExpandToggle,\n onSubmit,\n onFollowUpSelect,\n}: AgentRailProps) {\n const transcriptRef = useRef<HTMLDivElement>(null);\n const resolvedTheme = { ...defaultAgentRailTheme, ...theme };\n const railStyle = {\n \"--rail-width\": resolvedTheme.railMaxWidth,\n \"--as-rail-max-width\": resolvedTheme.railMaxWidth,\n \"--as-brand\": resolvedTheme.brand,\n \"--as-brand-soft\": resolvedTheme.brandSoft,\n \"--as-brand-deep\": resolvedTheme.brandDeep,\n \"--as-surface\": resolvedTheme.surface,\n \"--as-surface-muted\": resolvedTheme.surfaceMuted,\n \"--as-text\": resolvedTheme.text,\n \"--as-text-muted\": resolvedTheme.textMuted,\n \"--as-text-subtle\": resolvedTheme.textSubtle,\n \"--as-border\": resolvedTheme.border,\n \"--as-visitor-bubble\": resolvedTheme.visitorBubble,\n \"--as-visitor-text\": resolvedTheme.visitorText,\n \"--as-success\": resolvedTheme.success,\n \"--as-danger\": resolvedTheme.danger,\n \"--as-font-body\": resolvedTheme.fontBody,\n \"--as-font-display\": resolvedTheme.fontDisplay,\n } as CSSProperties;\n\n const isBusy =\n state.phase === \"thinking\" ||\n state.phase === \"running-tools\" ||\n state.phase === \"streaming\";\n\n const showActivity = state.toolSteps.length > 0;\n\n const hasVisitorMessages = state.messages.some(\n (message) => message.role === \"visitor\"\n );\n const showIdleFollowUps = !hasVisitorMessages && state.followUps.length > 0;\n const showDockFollowUps = expanded && showIdleFollowUps;\n const streamingMessage =\n state.phase === \"streaming\" && state.streamingText\n ? {\n createdAt: 0,\n id: \"streaming-response\",\n role: \"agent\" as const,\n streaming: true,\n text: state.streamingText,\n }\n : null;\n\n useEffect(() => {\n const node = transcriptRef.current;\n if (!node) return;\n node.scrollTop = node.scrollHeight;\n }, [\n state.messages,\n state.toolSteps,\n state.streamingText,\n state.followUps,\n state.journey,\n ]);\n\n return (\n <aside\n className={`agent-rail${\n mobileFullscreen ? \" agent-rail--mobile-fullscreen\" : \"\"\n }${expanded ? \" agent-rail--expanded\" : \"\"}`}\n style={railStyle}\n aria-label=\"Agent conversation\"\n >\n <header className=\"agent-rail__header\">\n <div className=\"agent-rail__brand-row\">\n {onCollapse ? (\n <button\n type=\"button\"\n className=\"agent-rail__collapse\"\n aria-label=\"Collapse assist\"\n onClick={onCollapse}\n >\n <MinimizeIcon />\n </button>\n ) : onClose ? (\n <button\n type=\"button\"\n className=\"agent-rail__close\"\n aria-label=\"Close agent\"\n onClick={onClose}\n >\n <MinimizeIcon />\n </button>\n ) : (\n <span className=\"agent-rail__brand-spacer\" aria-hidden=\"true\" />\n )}\n <span className=\"agent-rail__identity\">\n <span className=\"agent-rail__brand-mark\" aria-hidden=\"true\">\n {brandLabel.slice(0, 1).toUpperCase()}\n {brandLogoUrl ? (\n <img\n className=\"agent-rail__brand-logo\"\n src={brandLogoUrl}\n alt=\"\"\n onError={(event) => {\n event.currentTarget.hidden = true;\n }}\n />\n ) : null}\n </span>\n <span className=\"agent-rail__brand-label\">{brandLabel}</span>\n </span>\n {onExpandToggle ? (\n <button\n type=\"button\"\n className=\"agent-rail__expand\"\n aria-label={\n expanded ? \"Restore assist panel\" : \"Expand assist panel\"\n }\n onClick={onExpandToggle}\n >\n {expanded ? <RestoreIcon /> : <ExpandIcon />}\n </button>\n ) : (\n <span className=\"agent-rail__brand-spacer\" aria-hidden=\"true\" />\n )}\n </div>\n </header>\n\n <div ref={transcriptRef} className=\"agent-rail__transcript\">\n {state.messages.map((message) => (\n <MessageBubble key={message.id} message={message} />\n ))}\n\n {streamingMessage ? <MessageBubble message={streamingMessage} /> : null}\n\n {showActivity ? (\n <AgentActivityBubble\n failed={state.phase === \"error\"}\n steps={state.toolSteps}\n />\n ) : null}\n\n {!expanded && showIdleFollowUps ? (\n <div className=\"agent-rail__followups-slot\">\n <FollowUpChips\n suggestions={state.followUps}\n disabled={isBusy}\n label=\"Try asking\"\n onSelect={(suggestion) => onFollowUpSelect?.(suggestion.label)}\n />\n </div>\n ) : null}\n\n {state.error ? (\n <p\n role=\"alert\"\n style={{ fontSize: 13, color: \"var(--as-danger)\", margin: 0 }}\n >\n {state.error}\n </p>\n ) : null}\n </div>\n\n {expanded ? (\n <div className=\"agent-rail__dock-wrap\">\n {showDockFollowUps ? (\n <div className=\"agent-rail__dock-followups\">\n <FollowUpChips\n variant=\"dock\"\n suggestions={state.followUps}\n disabled={isBusy}\n onSelect={(suggestion) => onFollowUpSelect?.(suggestion.label)}\n />\n </div>\n ) : null}\n <div className=\"agent-rail__dock\">\n <Composer\n variant=\"dock\"\n disabled={isBusy}\n placeholder={composerPlaceholder}\n onSubmit={onSubmit}\n />\n </div>\n <div className=\"agent-rail__footer\">\n <p className=\"agent-rail__footer-disclaimer\">\n AI can make mistakes. Check important info.\n </p>\n <p className=\"agent-rail__footer-note\">{poweredByLabel}</p>\n </div>\n </div>\n ) : (\n <div className=\"agent-rail__composer-wrap\">\n <Composer\n disabled={isBusy}\n placeholder={composerPlaceholder}\n onSubmit={onSubmit}\n />\n <div className=\"agent-rail__footer\">\n <p className=\"agent-rail__footer-disclaimer\">\n AI can make mistakes. Check important info.\n </p>\n <p className=\"agent-rail__footer-note\">{poweredByLabel}</p>\n </div>\n </div>\n )}\n </aside>\n );\n}\n","import type { ToolStep } from \"../../types/conversation\";\nimport \"./AgentActivityBubble.css\";\n\nfunction workSummary(steps: readonly ToolStep[], failed: boolean) {\n const active = [...steps].reverse().find((step) => step.state === \"active\");\n if (active?.kind === \"specialist\") return `Working with ${active.label}`;\n if (active?.kind === \"search\") return \"Searching this site\";\n if (active) return active.label;\n\n if (failed) return \"Couldn’t complete this request\";\n\n const hasError = steps.some((step) => step.state === \"error\");\n const specialists = steps.filter(\n (step) => step.kind === \"specialist\" && step.state === \"completed\"\n );\n const searched = steps.some(\n (step) => step.kind === \"search\" && step.state === \"completed\"\n );\n if (hasError) return \"Answered with available information\";\n if (specialists.length > 1)\n return `Consulted ${specialists.length} specialists`;\n if (specialists.length === 1) return `Consulted ${specialists[0]?.label}`;\n if (searched) return \"Searched this site\";\n return \"Prepared a response\";\n}\n\nexport function AgentActivityBubble({\n failed = false,\n steps,\n}: {\n failed?: boolean;\n steps: ToolStep[];\n}) {\n const active = steps.some((step) => step.state === \"active\");\n return (\n <article className=\"agent-activity-bubble\">\n <p className=\"agent-activity-bubble__status\" aria-live=\"polite\">\n <span\n className={`agent-activity-bubble__pulse${\n active ? \" is-active\" : failed ? \" is-error\" : \"\"\n }`}\n aria-hidden=\"true\"\n />\n {workSummary(steps, failed)}\n </p>\n <details className=\"agent-activity-bubble__details\" open={active}>\n <summary>Work details</summary>\n <ol className=\"agent-activity-bubble__steps\">\n {steps.map((step) => (\n <li\n key={step.id}\n className=\"agent-activity-bubble__step\"\n data-state={step.state}\n >\n <span\n className=\"agent-activity-bubble__step-icon\"\n aria-hidden=\"true\"\n >\n {step.state === \"completed\"\n ? \"✓\"\n : step.state === \"error\"\n ? \"!\"\n : \"\"}\n </span>\n <span className=\"agent-activity-bubble__step-copy\">\n <strong>{step.label}</strong>\n {step.detail ? <small>{step.detail}</small> : null}\n </span>\n </li>\n ))}\n </ol>\n </details>\n </article>\n );\n}\n","import { useRef, useState, type FormEvent, type KeyboardEvent } from \"react\";\nimport \"./Composer.css\";\n\nfunction SendIcon() {\n return (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M8 12V4M8 4l-3 3M8 4l3 3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nexport function Composer({\n disabled = false,\n placeholder = \"Ask anything…\",\n variant = \"default\",\n onSubmit,\n}: {\n disabled?: boolean;\n placeholder?: string;\n variant?: \"default\" | \"dock\";\n onSubmit?: (message: string) => void;\n}) {\n const [value, setValue] = useState(\"\");\n const inputRef = useRef<HTMLTextAreaElement>(null);\n\n function submitCurrent() {\n const trimmed = value.trim();\n if (!trimmed || disabled) return;\n onSubmit?.(trimmed);\n setValue(\"\");\n inputRef.current?.focus();\n }\n\n function handleSubmit(event: FormEvent) {\n event.preventDefault();\n submitCurrent();\n }\n\n function handleKeyDown(event: KeyboardEvent<HTMLTextAreaElement>) {\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n submitCurrent();\n }\n }\n\n return (\n <form className={`composer${variant === \"dock\" ? \" composer--dock\" : \"\"}`} onSubmit={handleSubmit}>\n <div className=\"composer__field\">\n <textarea\n ref={inputRef}\n className=\"composer__input\"\n rows={1}\n value={value}\n placeholder={placeholder}\n disabled={disabled}\n aria-label=\"Message\"\n onChange={(event) => setValue(event.target.value)}\n onKeyDown={handleKeyDown}\n />\n <button\n type=\"submit\"\n className=\"composer__send\"\n disabled={disabled || !value.trim()}\n aria-label=\"Send message\"\n >\n <SendIcon />\n </button>\n </div>\n </form>\n );\n}\n","import type { FollowUpSuggestion } from \"../../types/conversation\";\nimport \"./FollowUpChips.css\";\n\nexport function FollowUpChips({\n suggestions,\n disabled = false,\n label = \"Follow up\",\n variant = \"default\",\n onSelect,\n}: {\n suggestions: FollowUpSuggestion[];\n disabled?: boolean;\n label?: string;\n variant?: \"default\" | \"dock\";\n onSelect?: (suggestion: FollowUpSuggestion) => void;\n}) {\n if (suggestions.length === 0) return null;\n\n if (variant === \"dock\") {\n return (\n <div className=\"followups followups--dock\">\n <div className=\"followups__scroll\">\n {suggestions.map((suggestion) => (\n <button\n key={suggestion.id}\n type=\"button\"\n className=\"followups__chip followups__chip--dock\"\n disabled={disabled}\n onClick={() => onSelect?.(suggestion)}\n >\n {suggestion.label}\n </button>\n ))}\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"followups\">\n <span className=\"followups__label\">{label}</span>\n <div className=\"followups__list\">\n {suggestions.map((suggestion) => (\n <button\n key={suggestion.id}\n type=\"button\"\n className=\"followups__chip\"\n disabled={disabled}\n onClick={() => onSelect?.(suggestion)}\n >\n {suggestion.label}\n </button>\n ))}\n </div>\n </div>\n );\n}\n","import type { ConversationMessage } from \"../../types/conversation\";\nimport { Streamdown } from \"streamdown\";\nimport \"streamdown/styles.css\";\nimport \"./MessageBubble.css\";\n\nexport function MessageBubble({ message }: { message: ConversationMessage }) {\n if (message.role === \"visitor\") {\n return (\n <article className=\"message-bubble message-bubble--visitor\">\n <p className=\"message-bubble__text\">{message.text}</p>\n </article>\n );\n }\n\n return (\n <article className=\"message-bubble message-bubble--agent\">\n <div className=\"message-bubble__text\">\n <Streamdown\n animated\n caret=\"circle\"\n className=\"message-bubble__markdown\"\n controls={false}\n isAnimating={message.streaming}\n linkSafety={{ enabled: false }}\n mode={message.streaming ? \"streaming\" : \"static\"}\n skipHtml\n >\n {message.text}\n </Streamdown>\n </div>\n </article>\n );\n}\n","import type { CSSProperties } from \"react\";\nimport \"./AssistEdgeTab.css\";\n\nexport type AssistTabVariant = \"outline\" | \"ask\" | \"fill\";\nexport type AssistTabSide = \"right\" | \"left\" | \"top\" | \"bottom\";\n\nfunction SparklesIcon() {\n return (\n <svg\n className=\"assist-edge-tab__sparkles\"\n viewBox=\"0 0 18 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M8 1.2l.95 2.7 2.85.05-2.25 1.75.8 2.75L8 6.7 5.65 8.45l.8-2.75L4.2 3.95l2.85-.05L8 1.2z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M14.2 6.4l.55 1.55 1.65.03-1.3 1 .46 1.58-1.36-1-1.36 1 .46-1.58-1.3-1 1.65-.03.55-1.55z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M3.1 9.1l.4 1.15 1.22.02-.96.74.34 1.17-1-.74-1 .74.34-1.17-.96-.74 1.22-.02.4-1.15z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n\nfunction ChevronLeftIcon() {\n return (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M10 4L6 8l4 4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction ChevronDownIcon() {\n return (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M4 6l4 4 4-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction DragDots() {\n return (\n <span className=\"assist-edge-tab__dots\" aria-hidden=\"true\">\n {Array.from({ length: 12 }, (_, index) => (\n <i key={index} />\n ))}\n </span>\n );\n}\n\nconst VARIANT_COPY: Record<AssistTabVariant, { label: string; aria: string }> =\n {\n outline: { label: \"Assist\", aria: \"Open Assist\" },\n ask: { label: \"Ask anything\", aria: \"Ask anything\" },\n fill: { label: \"Assist\", aria: \"Open Assist\" },\n };\n\nexport function AssistEdgeTab({\n variant,\n side,\n along,\n inset,\n visible,\n label,\n logoUrl,\n brandColor,\n fontFamily,\n onOpen,\n}: {\n variant: AssistTabVariant;\n side: AssistTabSide;\n along: number;\n inset: number;\n visible: boolean;\n label?: string;\n logoUrl?: string;\n brandColor?: string;\n fontFamily?: string;\n onOpen: () => void;\n}) {\n const copy = VARIANT_COPY[variant];\n const visibleLabel = label?.trim() || copy.label;\n const style = {\n \"--tab-along\": `${along}%`,\n \"--tab-inset\": `${inset}px`,\n ...(brandColor ? { \"--as-brand\": brandColor } : {}),\n ...(fontFamily ? { \"--as-font-display\": fontFamily } : {}),\n } as CSSProperties;\n\n return (\n <button\n type=\"button\"\n className={`assist-edge-tab assist-edge-tab--${variant} assist-edge-tab--${side}${\n visible ? \" is-visible\" : \"\"\n }`}\n style={style}\n aria-label={`Open ${visibleLabel}`}\n aria-hidden={!visible}\n tabIndex={visible ? 0 : -1}\n onClick={onOpen}\n >\n {variant === \"outline\" ? (\n <>\n <span className=\"assist-edge-tab__mark\" aria-hidden=\"true\">\n <SparklesIcon />\n {logoUrl ? (\n <img\n className=\"assist-edge-tab__logo\"\n src={logoUrl}\n alt=\"\"\n onError={(event) => {\n event.currentTarget.hidden = true;\n }}\n />\n ) : null}\n </span>\n <span className=\"assist-edge-tab__label\">{visibleLabel}</span>\n <ChevronDownIcon />\n </>\n ) : null}\n\n {variant === \"ask\" ? (\n <>\n <ChevronLeftIcon />\n <span className=\"assist-edge-tab__label\">{visibleLabel}</span>\n <DragDots />\n </>\n ) : null}\n\n {variant === \"fill\" ? (\n <>\n <span className=\"assist-edge-tab__mark\" aria-hidden=\"true\">\n <SparklesIcon />\n {logoUrl ? (\n <img\n className=\"assist-edge-tab__logo\"\n src={logoUrl}\n alt=\"\"\n onError={(event) => {\n event.currentTarget.hidden = true;\n }}\n />\n ) : null}\n </span>\n <span className=\"assist-edge-tab__label\">{visibleLabel}</span>\n <ChevronLeftIcon />\n </>\n ) : null}\n </button>\n );\n}\n","import \"../../styles/all.css\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { shouldApplyPageShift, usePageShift } from \"../../page-shift\";\nimport {\n createIdleSuggestions,\n hasVisitorMessages,\n useAgentChat,\n} from \"../../hooks/useAgentChat\";\nimport { useIsMobile } from \"../../hooks/useIsMobile\";\nimport type { AgentIndexVersion } from \"../../../runtime/types\";\nimport {\n normalizeAgentPlacement,\n type AgentPlacementConfig,\n} from \"../../placement\";\nimport {\n registerAgentPanelController,\n unregisterAgentPanelController,\n} from \"../../panel-controller\";\nimport { AgentRail } from \"../AgentRail\";\nimport { AssistEdgeTab } from \"../AssistEdgeTab/AssistEdgeTab\";\nimport type { AgentBrandingConfig } from \"../../../embed/manifest\";\nimport type { AgentRailTheme } from \"../../types/conversation\";\n\nexport type AgentWidgetProps = {\n indexId: string;\n customerId: string;\n getUnpublishedPreviewGrant?: () => Promise<string>;\n previewBuildId?: string;\n version?: AgentIndexVersion;\n runtimeOrigin?: string;\n placement?: Partial<AgentPlacementConfig>;\n defaultCollapsed?: boolean;\n pageShift?: boolean;\n registerPanelController?: boolean;\n branding?: AgentBrandingConfig;\n};\n\nexport function AgentWidget({\n indexId,\n customerId,\n getUnpublishedPreviewGrant,\n previewBuildId,\n version,\n runtimeOrigin,\n placement: placementInput,\n defaultCollapsed = true,\n pageShift = true,\n registerPanelController = false,\n branding,\n}: AgentWidgetProps) {\n const isMobile = useIsMobile();\n const placement = normalizeAgentPlacement(placementInput);\n const railSlotRef = useRef<HTMLDivElement>(null);\n const [railCollapsed, setRailCollapsed] = useState(defaultCollapsed);\n const [railExpanded, setRailExpanded] = useState(false);\n const pageShiftActive = shouldApplyPageShift({\n pageShift,\n isMobile,\n railCollapsed,\n railExpanded,\n });\n\n usePageShift({\n active: pageShiftActive,\n railSlotRef,\n });\n const { state, submit } = useAgentChat({\n customerId,\n getUnpublishedPreviewGrant,\n indexId,\n previewBuildId,\n version,\n runtimeOrigin,\n greeting: branding?.greeting,\n });\n\n const agentName = branding?.agentName ?? \"Webless Guide\";\n const theme: Partial<AgentRailTheme> = {\n ...(branding?.fontFamily\n ? { fontBody: branding.fontFamily, fontDisplay: branding.fontFamily }\n : {}),\n ...(branding?.colors?.primary\n ? {\n brand: branding.colors.primary,\n visitorBubble: branding.colors.primary,\n }\n : {}),\n ...(branding?.colors?.primarySoft\n ? { brandSoft: branding.colors.primarySoft }\n : {}),\n ...(branding?.colors?.primaryForeground\n ? { visitorText: branding.colors.primaryForeground }\n : {}),\n ...(branding?.colors?.surface ? { surface: branding.colors.surface } : {}),\n ...(branding?.colors?.surfaceMuted\n ? { surfaceMuted: branding.colors.surfaceMuted }\n : {}),\n ...(branding?.colors?.text ? { text: branding.colors.text } : {}),\n ...(branding?.colors?.textMuted\n ? {\n textMuted: branding.colors.textMuted,\n textSubtle: branding.colors.textMuted,\n }\n : {}),\n ...(branding?.colors?.border ? { border: branding.colors.border } : {}),\n };\n\n const idle = state.phase === \"idle\" && !hasVisitorMessages(state.messages);\n\n useEffect(() => {\n if (!registerPanelController) return;\n\n registerAgentPanelController(customerId, {\n open: () => setRailCollapsed(false),\n close: () => {\n setRailCollapsed(true);\n setRailExpanded(false);\n },\n });\n\n return () => unregisterAgentPanelController(customerId);\n }, [customerId, registerPanelController]);\n\n async function handleSubmit(message: string) {\n if (isMobile) setRailCollapsed(false);\n await submit(message);\n }\n\n return (\n <div className=\"webless-agent-root\">\n <div\n className={`webless-agent-root__shell${\n railCollapsed ? \" webless-agent-root__shell--collapsed\" : \"\"\n }${railExpanded ? \" webless-agent-root__shell--expanded\" : \"\"}`}\n >\n <div\n ref={railSlotRef}\n className=\"webless-agent-root__rail-slot\"\n inert={railCollapsed || undefined}\n aria-hidden={railCollapsed}\n >\n <AgentRail\n theme={theme}\n brandLabel={agentName}\n brandLogoUrl={branding?.logoUrl}\n composerPlaceholder={\n branding?.composerPlaceholder ?? `Ask ${agentName}…`\n }\n poweredByLabel={branding?.poweredByLabel ?? \"Powered by Webless\"}\n state={\n idle\n ? {\n ...state,\n followUps: createIdleSuggestions(),\n }\n : state\n }\n mobileFullscreen={isMobile && !railCollapsed}\n expanded={railExpanded}\n onCollapse={!isMobile ? () => setRailCollapsed(true) : undefined}\n onClose={isMobile ? () => setRailCollapsed(true) : undefined}\n onExpandToggle={\n !isMobile\n ? () => setRailExpanded((current) => !current)\n : undefined\n }\n onSubmit={handleSubmit}\n onFollowUpSelect={(label) => void handleSubmit(label)}\n />\n </div>\n {!isMobile && railExpanded && !railCollapsed ? (\n <button\n type=\"button\"\n className=\"webless-agent-root__backdrop\"\n tabIndex={-1}\n aria-label=\"Close expanded assist\"\n onClick={() => setRailExpanded(false)}\n />\n ) : null}\n </div>\n\n {railCollapsed ? (\n <AssistEdgeTab\n variant={placement.variant}\n side={placement.side}\n along={placement.along}\n inset={placement.inset}\n visible\n label={agentName}\n logoUrl={branding?.logoUrl}\n brandColor={branding?.colors?.primary}\n fontFamily={branding?.fontFamily}\n onOpen={() => setRailCollapsed(false)}\n />\n ) : null}\n </div>\n );\n}\n","import { useEffect, type RefObject } from \"react\";\n\nexport const PAGE_SHIFT_CLASS = \"webless-agent-page-shift\";\nconst DEFAULT_RAIL_WIDTH_PX = 450;\n\nexport function shouldApplyPageShift(input: {\n pageShift: boolean;\n isMobile: boolean;\n railCollapsed: boolean;\n railExpanded: boolean;\n}) {\n return input.pageShift && !input.isMobile && !input.railCollapsed && !input.railExpanded;\n}\n\nexport function resolvePageShiftWidth(railWidth: number | null | undefined) {\n if (typeof railWidth === \"number\" && railWidth > 0) {\n return railWidth;\n }\n\n if (typeof document !== \"undefined\") {\n const token = getComputedStyle(document.documentElement)\n .getPropertyValue(\"--as-rail-max-width\")\n .trim();\n const parsed = Number.parseFloat(token);\n if (Number.isFinite(parsed) && parsed > 0) {\n return parsed;\n }\n }\n\n return DEFAULT_RAIL_WIDTH_PX;\n}\n\ntype PageMarginSnapshot = {\n value: string;\n priority: string;\n};\n\nexport type PageMarginStyle = Pick<\n CSSStyleDeclaration,\n \"getPropertyValue\" | \"getPropertyPriority\" | \"setProperty\" | \"removeProperty\"\n>;\n\nlet savedPageMargin: PageMarginSnapshot | null = null;\n\nexport function readPageMarginSnapshot(style: PageMarginStyle): PageMarginSnapshot {\n return {\n value: style.getPropertyValue(\"margin-right\"),\n priority: style.getPropertyPriority(\"margin-right\"),\n };\n}\n\nexport function restorePageMargin(style: PageMarginStyle, snapshot: PageMarginSnapshot) {\n if (snapshot.value) {\n style.setProperty(\"margin-right\", snapshot.value, snapshot.priority || undefined);\n return;\n }\n\n style.removeProperty(\"margin-right\");\n}\n\nfunction snapshotPageMarginIfNeeded() {\n if (savedPageMargin !== null) {\n return;\n }\n\n savedPageMargin = readPageMarginSnapshot(document.documentElement.style);\n}\n\nfunction setPageMargin(margin: string) {\n snapshotPageMarginIfNeeded();\n document.documentElement.style.setProperty(\"margin-right\", margin, \"important\");\n}\n\nfunction clearPageMargin() {\n if (savedPageMargin === null) {\n return;\n }\n\n restorePageMargin(document.documentElement.style, savedPageMargin);\n savedPageMargin = null;\n}\n\nexport function usePageShift(input: {\n active: boolean;\n railSlotRef: RefObject<HTMLElement | null>;\n}) {\n const { active, railSlotRef } = input;\n\n useEffect(() => {\n if (typeof document === \"undefined\") {\n return;\n }\n\n if (!active) {\n document.documentElement.classList.remove(PAGE_SHIFT_CLASS);\n clearPageMargin();\n return;\n }\n\n document.documentElement.classList.add(PAGE_SHIFT_CLASS);\n\n function applyMargin() {\n const rail = railSlotRef.current?.querySelector(\".agent-rail\");\n const width = resolvePageShiftWidth(\n rail instanceof HTMLElement ? rail.offsetWidth : null,\n );\n setPageMargin(`${width}px`);\n }\n\n applyMargin();\n const frame = requestAnimationFrame(applyMargin);\n\n return () => {\n cancelAnimationFrame(frame);\n document.documentElement.classList.remove(PAGE_SHIFT_CLASS);\n clearPageMargin();\n };\n }, [active, railSlotRef]);\n}\n","import { useEffect, useState } from \"react\";\n\nexport function useIsMobile(breakpoint = 767) {\n const [isMobile, setIsMobile] = useState(\n () => typeof window !== \"undefined\" && window.matchMedia(`(max-width: ${breakpoint}px)`).matches,\n );\n\n useEffect(() => {\n const media = window.matchMedia(`(max-width: ${breakpoint}px)`);\n const onChange = () => setIsMobile(media.matches);\n onChange();\n media.addEventListener(\"change\", onChange);\n return () => media.removeEventListener(\"change\", onChange);\n }, [breakpoint]);\n\n return isMobile;\n}\n","type AgentPanelController = {\n open: () => void;\n close: () => void;\n};\n\nconst controllers = new Map<string, AgentPanelController>();\n\nexport function registerAgentPanelController(customerId: string, controller: AgentPanelController) {\n controllers.set(customerId, controller);\n}\n\nexport function unregisterAgentPanelController(customerId: string) {\n controllers.delete(customerId);\n}\n\nexport function openAgentPanel(customerId: string) {\n controllers.get(customerId)?.open();\n}\n\nexport function closeAgentPanel(customerId: string) {\n controllers.get(customerId)?.close();\n}\n"],"mappings":";AAAA,SAAS,aAAa,WAAW,SAAS,QAAQ,gBAAgB;;;ACAlE;AAAA,EACE;AAAA,EACA,eAAAA;AAAA,OAIK;;;ACNP,SAAS,mBAAmB;AAmB5B,IAAM,sBAAsB;AAE5B,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,uBACP,OACA,SACA,KACmB;AACnB,MACE,CAAC,SAAS,KAAK,KACf,MAAM,eAAe,2CACrB,OAAO,MAAM,gBAAgB,YAC7B,CAAC,MAAM,eACP,OAAO,MAAM,cAAc,YAC3B,CAAC,SAAS,MAAM,QAAQ,KACxB,MAAM,SAAS,YAAY,WAC3B,OAAO,MAAM,SAAS,aAAa,YACnC,CAAC,MAAM,SAAS,YAChB,OAAO,MAAM,SAAS,aAAa,YACnC,CAAC,MAAM,SAAS,YAChB,OAAO,MAAM,WAAW,YACxB,CAAC,MAAM,UACP,MAAM,cAAc,YACpB,OAAO,MAAM,mBAAmB,YAChC,CAAC,MAAM,gBACP;AACA,UAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AAEA,QAAM,YAAY,KAAK,MAAM,MAAM,SAAS;AAC5C,MAAI,CAAC,OAAO,SAAS,SAAS,KAAK,aAAa,KAAK;AACnD,UAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AAEA,QAAM,cAAc,KAAK;AAAA,IACvB;AAAA,IACA,KAAK,OAAO,YAAY,OAAO,EAAE;AAAA,EACnC;AACA,SAAO;AAAA,IACL,aAAa,MAAM;AAAA,IACnB,WAAW,YAAY;AAAA,EACzB;AACF;AAEA,eAAe,mBAAmB,UAAqC;AACrE,QAAM,WAAW,iCAAiC,SAAS,MAAM;AACjE,MAAI;AACF,UAAM,QAAiB,MAAM,SAAS,KAAK;AAC3C,WAAO,SAAS,KAAK,KAAK,OAAO,MAAM,UAAU,YAAY,MAAM,QAC/D,MAAM,QACN;AAAA,EACN,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,6BACd,SACA;AACA,QAAM,sBAAsB,QAAQ,uBAAuB;AAC3D,QAAM,MAAM,QAAQ,OAAO,KAAK;AAChC,MAAI;AACJ,MAAI,aAAa;AACjB,MAAI;AAEJ,QAAM,YAAY,YAAwC;AACxD,QAAI;AACJ,UAAM,iBAAiB,QAAQ,gBAAgB,KAAK;AACpD,QAAI,QAAQ,YAAY,eAAe;AACrC,qBAAe,iBACX,UACC,MAAM,QAAQ,6BAA6B,IAAI,KAAK;AACzD,UAAI,CAAC,gBAAgB,CAAC,gBAAgB;AACpC,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAW,MAAM;AAAA,MACrB,GAAG,QAAQ,aAAa;AAAA,MACxB;AAAA,QACE,MAAM,KAAK,UAAU;AAAA,UACnB,iBAAiB,QAAQ;AAAA,UACzB,SAAS,QAAQ;AAAA,UACjB,GAAI,iBAAiB,EAAE,eAAe,IAAI,CAAC;AAAA,UAC3C,GAAI,eAAe,EAAE,aAAa,IAAI,CAAC;AAAA,UACvC,SAAS,QAAQ;AAAA,QACnB,CAAC;AAAA,QACD,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,QAC9C,QAAQ;AAAA,MACV;AAAA,IACF;AACA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,MAAM,MAAM,mBAAmB,QAAQ,CAAC;AAAA,IACpD;AAEA,QAAI;AACJ,QAAI;AACF,cAAQ,MAAM,SAAS,KAAK;AAAA,IAC9B,QAAQ;AACN,YAAM,IAAI,MAAM,oDAAoD;AAAA,IACtE;AACA,WAAO,uBAAuB,OAAO,QAAQ,SAAS,IAAI,CAAC;AAAA,EAC7D;AAEA,QAAM,iBAAiB,YAA6B;AAClD,QAAI,cAAc,WAAW,YAAY,IAAI,GAAG;AAC9C,aAAO,WAAW;AAAA,IACpB;AAEA,UAAM,sBAAsB;AAC5B,QAAI,CAAC,kBAAkB;AACrB,YAAM,mBAAmB,UAAU,EAAE,QAAQ,MAAM;AACjD,YAAI,qBAAqB,kBAAkB;AACzC,6BAAmB;AAAA,QACrB;AAAA,MACF,CAAC;AACD,yBAAmB;AAAA,IACrB;AAEA,UAAM,iBAAiB,MAAM;AAC7B,QAAI,wBAAwB,YAAY;AACtC,aAAO,eAAe;AAAA,IACxB;AAEA,iBAAa;AACb,WAAO,WAAW;AAAA,EACpB;AAEA,SAAO;AAAA,IACL;AAAA,IACA,YAAY,MAAM;AAChB,mBAAa;AACb,oBAAc;AACd,yBAAmB;AAAA,IACrB;AAAA,EACF;AACF;AAMA,eAAsB,sBACpB,YACA,SACY;AACZ,MAAI;AACF,WAAO,MAAM,QAAQ;AAAA,EACvB,SAAS,OAAO;AACd,QAAI,EAAE,iBAAiB,gBAAgB,MAAM,WAAW,KAAK;AAC3D,YAAM;AAAA,IACR;AACA,eAAW,WAAW;AACtB,WAAO,MAAM,QAAQ;AAAA,EACvB;AACF;;;ACjLO,IAAM,yBAAyB;AAEtC,IAAM,oBAAoB,CAAC,UAAkB,MAAM,QAAQ,QAAQ,EAAE;AAE9D,SAAS,aACd,QACA,SACA,UAA6B,aACrB;AACR,QAAM,OAAO,kBAAkB,MAAM;AACrC,QAAM,eAAe,IAAI,gBAAgB,EAAE,SAAS,QAAQ,KAAK,EAAE,CAAC;AACpE,MAAI,YAAY,eAAe;AAC7B,iBAAa,IAAI,WAAW,OAAO;AAAA,EACrC;AACA,SAAO,GAAG,IAAI,IAAI,aAAa,SAAS,CAAC;AAC3C;AAEO,SAAS,0BAA0B,OAInB;AACrB,QAAM,SAAS,kBAAkB,MAAM,eAAe,KAAK,KAAK,sBAAsB;AACtF,QAAM,kBAAkB,MAAM,QAAQ,KAAK;AAC3C,QAAM,UAAU,MAAM,WAAW;AAEjC,SAAO;AAAA,IACL;AAAA,IACA,SAAS;AAAA,IACT;AAAA,IACA,MAAM,kBAAkB,aAAa,QAAQ,iBAAiB,OAAO,IAAI;AAAA,EAC3E;AACF;;;AChCA,IAAM,6BAA6B;AAMnC,SAAS,uBAAuB,eAAwB;AACtD,QAAM,UAAU,eAAe,KAAK;AACpC,MAAI,CAAC,QAAS,QAAO;AACrB,SAAO,QAAQ,QAAQ,QAAQ,EAAE;AACnC;AAEO,SAAS,2BAA2B,OAKxC;AACD,QAAM,aAAa,MAAM,YAAY,KAAK,KAAK;AAC/C,QAAM,UAAU,MAAM,QAAQ,KAAK;AACnC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE;AAEA,QAAM,gBAAgB,MAAM,YAAY,gBAAgB,iBAAiB;AACzE,SAAO,GAAG,0BAA0B,IAAI,UAAU,IAAI,OAAO,GAAG,aAAa,IAAI,uBAAuB,MAAM,aAAa,CAAC;AAC9H;AAEA,SAAS,kBAA0B;AACjC,MAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,YAAY;AAC5E,WAAO,OAAO,WAAW;AAAA,EAC3B;AACA,SAAO,QAAQ,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,EAAE,SAAS,EAAE,CAAC;AAC9E;AAEA,SAAS,cAAc,SAA+B;AACpD,SAAO,SAAS,kBAAkB,KAAK,KAAK;AAC9C;AAEO,SAAS,4BAA4B,SAAuC;AACjF,QAAM,SAAS,cAAc,OAAO;AACpC,QAAM,aAAa,GAAG,MAAM;AAE5B,MAAI,OAAO,mBAAmB,aAAa;AACzC,WAAO,gBAAgB;AAAA,EACzB;AAEA,QAAM,WAAW,eAAe,QAAQ,UAAU,GAAG,KAAK;AAC1D,MAAI,SAAU,QAAO;AAErB,QAAM,OAAO,gBAAgB;AAC7B,iBAAe,QAAQ,YAAY,IAAI;AACvC,SAAO;AACT;AASA,SAAS,oBAAoB,kBAA0B,QAAgB;AACrE,SAAO,GAAG,MAAM,QAAQ,gBAAgB;AAC1C;AAEA,SAAS,sBAAsB,kBAA0B,QAAgB;AACvE,SAAO,GAAG,MAAM,QAAQ,gBAAgB;AAC1C;AAEO,SAAS,0BACd,kBACA,SAC8B;AAC9B,MAAI,OAAO,mBAAmB,eAAe,CAAC,iBAAiB,KAAK,EAAG,QAAO;AAE9E,QAAM,SAAS,cAAc,OAAO;AACpC,QAAM,YAAY,eAAe,QAAQ,oBAAoB,kBAAkB,MAAM,CAAC,GAAG,KAAK;AAC9F,MAAI,CAAC,UAAW,QAAO;AAEvB,QAAM,WAAW,eAAe,QAAQ,sBAAsB,kBAAkB,MAAM,CAAC;AACvF,QAAM,cAAc,WAAW,OAAO,SAAS,UAAU,EAAE,IAAI;AAE/D,SAAO;AAAA,IACL;AAAA,IACA,aAAa,OAAO,SAAS,WAAW,KAAK,eAAe,IAAI,cAAc;AAAA,EAChF;AACF;AAEO,SAAS,0BACd,kBACA,WACA,aACA,SACA;AACA,MAAI,OAAO,mBAAmB,eAAe,CAAC,iBAAiB,KAAK,KAAK,CAAC,UAAU,KAAK,GAAG;AAC1F;AAAA,EACF;AAEA,QAAM,SAAS,cAAc,OAAO;AACpC,iBAAe,QAAQ,oBAAoB,kBAAkB,MAAM,GAAG,SAAS;AAC/E,iBAAe;AAAA,IACb,sBAAsB,kBAAkB,MAAM;AAAA,IAC9C,OAAO,KAAK,IAAI,GAAG,WAAW,CAAC;AAAA,EACjC;AACF;AAEO,SAAS,2BACd,kBACA,SACA;AACA,MAAI,OAAO,mBAAmB,eAAe,CAAC,iBAAiB,KAAK,EAAG;AACvE,QAAM,SAAS,cAAc,OAAO;AACpC,iBAAe,WAAW,oBAAoB,kBAAkB,MAAM,CAAC;AACvE,iBAAe,WAAW,sBAAsB,kBAAkB,MAAM,CAAC;AAC3E;;;AHtFA,SAAS,eAAe,OAA2B;AACjD,SACE,MAAM,SAAS,qBACf,MAAM,SAAS,uBACf,MAAM,SAAS;AAEnB;AAEA,SAAS,kBACP,OACA,UACA,UACA,WACA;AACA,iBAAe,OAAO,UAAU,SAAS;AAEzC,MAAI,MAAM,SAAS,kBAAkB;AACnC,UAAM,IAAI,MAAM,MAAM,KAAK,WAAW,MAAM,KAAK,IAAI;AAAA,EACvD;AAEA,MAAI,MAAM,SAAS,qBAAqB;AACtC,aAAS,aAAa;AAAA,EACxB;AAEA,MAAI,MAAM,SAAS,mBAAoB,QAAO;AAE9C,QAAM,EAAE,cAAc,aAAa,IAAI,MAAM;AAC7C,MAAI,QAAQ;AACZ,MAAI,OAAO;AACX,MAAI,aAAa,WAAW,QAAQ,GAAG;AACrC,YAAQ,aAAa,MAAM,SAAS,MAAM;AAC1C,WAAO;AAAA,EACT,WAAW,cAAc;AACvB,YAAQ;AAAA,EACV;AACA,MAAI,MAAO,UAAS,QAAQ,KAAK;AACjC,SAAO;AACT;AAEA,SAAS,iBAAiB,QAAuC;AAC/D,MAAI,aAAa;AACjB,WAAS,QAAQ,OAAO,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;AAC1D,QAAI,OAAO,KAAK,GAAG,SAAS,oBAAoB;AAC9C,mBAAa;AACb;AAAA,IACF;AAAA,EACF;AACA,SAAO,cAAc,IAAI,OAAO,MAAM,UAAU,IAAI,CAAC;AACvD;AAEA,SAAS,WAAW,QAAuC;AACzD,MAAI,WAAW;AACf,aAAW,SAAS,QAAQ;AAC1B,QAAI,MAAM,SAAS,mBAAoB;AACvC,UAAM,EAAE,cAAc,aAAa,IAAI,MAAM;AAC7C,QAAI,aAAa,WAAW,QAAQ,GAAG;AACrC,iBAAW;AAAA,IACb,WAAW,cAAc;AACvB,kBAAY;AAAA,IACd;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,aACP,MACA,UACA,WACA;AACA,YAAU,IAAI,KAAK,IAAI,IAAI;AAC3B,WAAS,SAAS,IAAI;AACtB,WAAS,SAAS,KAAK,OAAO,KAAK,MAAM;AAC3C;AAEA,SAAS,iBACP,UACA,WACA;AACA,QAAM,WAAW,UAAU,IAAI,UAAU;AACzC,MAAI,CAAC,YAAY,SAAS,UAAU,SAAU;AAC9C;AAAA,IACE;AAAA,MACE,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,wBAAwB,OAA0C;AACzE,QAAM,UAAU,MAAM;AACtB,MAAI,OAAO,YAAY,SAAU,QAAO;AACxC,QAAM,QAAQ,kCAAkC,KAAK,OAAO;AAC5D,SAAO,QAAQ,CAAC,GAAG,KAAK,KAAK;AAC/B;AAEA,SAAS,kBACP,QAOsB;AACtB,MAAI,OAAO,SAAS,eAAe,OAAO,aAAa,oBAAoB;AACzE,WAAO;AAAA,MACL,IAAI,OAAO;AAAA,MACX,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF;AAEA,MACE,OAAO,SAAS,mBAChB,OAAO,SAAS,uBACf,OAAO,SAAS,eAAe,OAAO,aAAa,SACpD;AACA,UAAM,OAAO,wBAAwB,OAAO,KAAK,KAAK;AACtD,WAAO;AAAA,MACL,IAAI,OAAO;AAAA,MACX,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,eACd,OACA,UACA,WACA;AACA,MAAI,MAAM,SAAS,kBAAkB,UAAU,SAAS,GAAG;AACzD;AAAA,MACE;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,qBAAqB;AACtC,qBAAiB,UAAU,SAAS;AACpC,eAAW,UAAU,MAAM,KAAK,SAAS;AACvC,YAAM,OAAO,kBAAkB,MAAM;AACrC,UAAI,KAAM,cAAa,MAAM,UAAU,SAAS;AAAA,IAClD;AACA;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,mBAAmB;AACpC,qBAAiB,UAAU,SAAS;AACpC,UAAMC,WAAU,UAAU,IAAI,MAAM,KAAK,MAAM;AAC/C,QAAI,CAACA,UAAS;AACZ;AAAA,QACE;AAAA,UACE,IAAI,MAAM,KAAK;AAAA,UACf,MAAM;AAAA,UACN,OAAO,MAAM,KAAK,QAAQ;AAAA,UAC1B,QAAQ;AAAA,UACR,OAAO;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,sBAAsB;AACvC,UAAMA,WAAU,UAAU,IAAI,MAAM,KAAK,MAAM;AAC/C,QAAI,CAACA,SAAS;AACd;AAAA,MACE;AAAA,QACE,GAAGA;AAAA,QACH,QAAQ;AAAA,QACR,OAAO;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,gBAAiB;AACpC,QAAM,EAAE,QAAQ,OAAO,IAAI,MAAM;AACjC,QAAM,UAAU,UAAU,IAAI,OAAO,MAAM;AAC3C,MAAI,CAAC,QAAS;AACd,QAAM,SAAS,WAAW,eAAe,OAAO,YAAY;AAC5D;AAAA,IACE;AAAA,MACE,GAAG;AAAA,MACH,QAAQ,SACJ,kEACA,QAAQ,SAAS,WACjB,gCACA;AAAA,MACJ,OAAO,SAAS,UAAU;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,IAAM,eAAN,MAAmB;AAAA,EAOjB,YACmB,SACA,SACA,eACA,kBACA,cACjB,gBACA,4BACA;AAPiB;AACA;AACA;AACA;AACA;AAIjB,SAAK,aAAa,6BAA6B;AAAA,MAC7C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAhBmB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAXX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACS;AAAA,EAqBjB,qBAAyC;AACvC,WACE,KAAK,SAAS,MAAM,aACpB,0BAA0B,KAAK,kBAAkB,KAAK,YAAY,GAC9D;AAAA,EAER;AAAA,EAEA,QAAQ;AACN,QAAI,KAAK,gBAAgB;AACvB,WAAK,KAAK,eAAe,OAAO,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAClD,OAAO;AACL,WAAK,KAAK,SAAS,OAAO,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAC5C;AACA,SAAK,iBAAiB;AACtB,SAAK,UAAU;AACf,SAAK,WAAW,WAAW;AAC3B,+BAA2B,KAAK,kBAAkB,KAAK,YAAY;AAAA,EACrE;AAAA,EAEQ,qBAAqB,SAAwB;AACnD;AAAA,MACE,KAAK;AAAA,MACL,QAAQ,MAAM;AAAA,MACd,QAAQ,MAAM;AAAA,MACd,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EAEQ,eAAuB;AAC7B,UAAM,SAAS,0BAA0B;AAAA,MACvC,SAAS,KAAK;AAAA,MACd,SAAS,KAAK;AAAA,MACd,eAAe,KAAK;AAAA,IACtB,CAAC;AACD,QAAI,CAAC,OAAO,SAAS;AACnB,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAEA,QAAI,KAAK,UAAU,KAAK,eAAe,OAAO,MAAM;AAClD,aAAO,KAAK;AAAA,IACd;AAEA,SAAK,iBAAiB;AACtB,SAAK,UAAU;AACf,SAAK,SAAS,IAAI,OAAO;AAAA,MACvB,MAAM,EAAE,QAAQ,MAAM,KAAK,WAAW,eAAe,EAAE;AAAA,MACvD,MAAM,OAAO;AAAA,MACb,UAAU;AAAA,IACZ,CAAC;AACD,SAAK,aAAa,OAAO;AACzB,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,uBAAuB,QAA2C;AACxE,UAAM,YAAY;AAAA,MAChB,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AACA,QAAI,CAAC,WAAW,UAAW,QAAO;AAElC,WAAO,OAAO,SAAS,OAAO,UAAU,WAAW;AAAA,MACjD,aAAa,UAAU;AAAA,IACzB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,SACJ,SACA,QACA,UACiB;AACjB,UAAM,SAAS,KAAK,aAAa;AACjC,QAAI;AACJ,QAAI,UAAU,KAAK,WAAW,KAAK,uBAAuB,MAAM;AAEhE,QAAI,SAAS;AACX,WAAK,UAAU;AACf,UAAI;AACF,cAAM,gBAAgB;AACtB,mBAAW,MAAM;AAAA,UAAsB,KAAK;AAAA,UAAY,MACtD,cAAc,KAAK,SAAS,EAAE,OAAO,CAAC;AAAA,QACxC;AAAA,MACF,SAAS,OAAO;AACd,YACE,iBAAiBC,gBACjB,MAAM,WAAW,OACjB,MAAM,SAAS,sBACf;AACA,qCAA2B,KAAK,kBAAkB,KAAK,YAAY;AACnE,eAAK,UAAU;AACf,oBAAU;AAAA,QACZ,OAAO;AACL,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,UAAU;AACb,YAAM,UAAU,MAAM;AAAA,QAAsB,KAAK;AAAA,QAAY,MAC3D,OAAO,SAAS,OAAO,EAAE,SAAS,OAAO,CAAC;AAAA,MAC5C;AACA,iBAAW,QAAQ;AACnB,gBAAU,QAAQ;AAClB,WAAK,UAAU;AACf,WAAK,qBAAqB,OAAO;AAAA,IACnC;AAEA,SAAK,iBAAiB;AACtB,QAAI,cAAc,SAAS,MAAM,eAAe;AAChD,QAAI,WAAW;AACf,UAAM,YAAY,oBAAI,IAA2B;AAEjD,QAAI;AACF,uBAAiB,SAAS,UAAU;AAClC,YAAI,OAAO,QAAS;AACpB,mBAAW,kBAAkB,OAAO,UAAU,UAAU,SAAS;AACjE,uBAAe;AACf,YAAI,SAAS;AACX;AAAA,YACE,KAAK;AAAA,YACL,QAAQ,MAAM;AAAA,YACd;AAAA,YACA,KAAK;AAAA,UACP;AAAA,QACF;AAAA,MACF;AAAA,IACF,UAAE;AACA,WAAK,iBAAiB;AACtB,UAAI,SAAS;AACX,aAAK,qBAAqB,OAAO;AAAA,MACnC;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,KAAK,KAAK,CAAC,OAAO,SAAS;AACvC,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AAEA,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,WACJ,SACA,QACA,UACA,cAAc,IACU;AACxB,UAAM,YAAY;AAAA,MAChB,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AACA,QAAI,CAAC,UAAW,QAAO;AAEvB,UAAM,SAAS,KAAK,aAAa;AACjC,UAAM,WAAW,OAAO,SAAS,OAAO,UAAU,WAAW;AAAA,MAC3D,aAAa,UAAU;AAAA,IACzB,CAAC;AACD,UAAM,WAAW,MAAM;AAAA,MAAsB,KAAK;AAAA,MAAY,MAC5D,SAAS,SAAS,EAAE,OAAO,CAAC;AAAA,IAC9B;AACA,UAAM,aAAa,iBAAiB,SAAS,MAAM;AACnD,UAAM,WAAW,WAAW,CAAC;AAC7B,QACE,UAAU,SAAS,sBACnB,SAAS,KAAK,YAAY,SAC1B;AACA,aAAO;AAAA,IACT;AACA,QAAI,WAAW,WAAW,UAAU;AACpC,UAAM,YAAY,oBAAI,IAA2B;AACjD,eAAW,SAAS,YAAY;AAC9B,qBAAe,OAAO,UAAU,SAAS;AAAA,IAC3C;AAEA,QAAI,SAAS,WAAW,WAAW,GAAG;AACpC,YAAM,aAAa,SAAS,MAAM,YAAY,MAAM;AACpD,UAAI,WAAY,UAAS,QAAQ,UAAU;AAAA,IAC7C,WAAW,YAAY,WAAW,QAAQ,GAAG;AAC3C,iBAAW;AAAA,IACb,WAAW,CAAC,YAAY,WAAW,QAAQ,GAAG;AAC5C,iBAAW,cAAc;AAAA,IAC3B;AAEA,QAAI,UAAU,OAAO,SAAS,OAAO,SAAS,QAAQ,WAAW;AAAA,MAC/D,aAAa,SAAS,QAAQ;AAAA,IAChC,CAAC;AACD,SAAK,UAAU;AACf,SAAK,qBAAqB,OAAO;AAEjC,QAAI;AACJ,aAAS,QAAQ,WAAW,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;AAC9D,YAAM,QAAQ,WAAW,KAAK;AAC9B,UAAI,SAAS,eAAe,KAAK,GAAG;AAClC,2BAAmB;AACnB;AAAA,MACF;AAAA,IACF;AACA,QAAI,kBAAkB;AACpB,UAAI,iBAAiB,SAAS,kBAAkB;AAC9C,cAAM,IAAI;AAAA,UACR,iBAAiB,KAAK,WAAW,iBAAiB,KAAK;AAAA,QACzD;AAAA,MACF;AACA,eAAS,aAAa;AACtB,UAAI,CAAC,SAAS,KAAK,EAAG,OAAM,IAAI,MAAM,6BAA6B;AACnE,aAAO,SAAS,KAAK;AAAA,IACvB;AAEA,QAAI,cAAc,SAAS,QAAQ;AACnC,qBAAiB,SAAS,QAAQ,OAAO,EAAE,OAAO,CAAC,GAAG;AACpD,UAAI,OAAO,QAAS;AACpB,iBAAW,kBAAkB,OAAO,UAAU,UAAU,SAAS;AACjE,qBAAe;AACf;AAAA,QACE,KAAK;AAAA,QACL,QAAQ,MAAM;AAAA,QACd;AAAA,QACA,KAAK;AAAA,MACP;AACA,UAAI,eAAe,KAAK,EAAG;AAAA,IAC7B;AAEA,cAAU,OAAO,SAAS,OAAO,QAAQ,MAAM,WAAW,EAAE,YAAY,CAAC;AACzE,SAAK,UAAU;AACf,SAAK,qBAAqB,OAAO;AAEjC,QAAI,CAAC,SAAS,KAAK,KAAK,CAAC,OAAO,SAAS;AACvC,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AACA,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EAEA,eAAe;AACb,QAAI,KAAK,gBAAgB;AACvB,WAAK,eAAe,OAAO,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAC7C,OAAO;AACL,WAAK,SAAS,OAAO,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IACvC;AAAA,EACF;AACF;AAEO,SAAS,kBAAkB,SAA0C;AAC1E,QAAM,UAAU,QAAQ,QAAQ,KAAK;AACrC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,sBAAsB;AAAA,EACxC;AAEA,QAAM,UAAU,QAAQ,WAAW;AACnC,QAAM,gBAAgB,0BAA0B;AAAA,IAC9C;AAAA,IACA,eAAe,QAAQ;AAAA,IACvB;AAAA,EACF,CAAC,EAAE;AACH,QAAM,eAAoC;AAAA,IACxC,kBACE,QAAQ,kBAAkB,KAAK,KAC/B,2BAA2B;AAAA,MACzB,YAAY,QAAQ;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACL;AACA,QAAM,mBACJ,QAAQ,kBAAkB,KAAK,KAC/B,4BAA4B,YAAY;AAE1C,QAAM,UAAU,IAAI;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,CAAC,SAAS,gBAClB,QAAQ;AAAA,MACN;AAAA,MACA,YAAY,UAAU,IAAI,gBAAgB,EAAE;AAAA,MAC5C,YAAY;AAAA,IACd;AAAA,IACF,YAAY,CAAC,kBACX,QAAQ;AAAA,MACN,cAAc;AAAA,MACd,cAAc,UAAU,IAAI,gBAAgB,EAAE;AAAA,MAC9C,cAAc;AAAA,MACd,cAAc;AAAA,IAChB;AAAA,IACF,OAAO,MAAM,QAAQ,MAAM;AAAA,IAC3B,cAAc,MAAM,QAAQ,aAAa;AAAA,IACzC,oBAAoB,MAAM,QAAQ,mBAAmB;AAAA,EACvD;AACF;;;AI5jBA,SAAS,eAAAC,oBAAmB;AAE5B,IAAM,gCACJ;AACF,IAAM,sCACJ;AAEF,SAAS,0BAA0B,SAAiB;AAClD,QAAM,aAAa,QAAQ,KAAK,EAAE,YAAY;AAC9C,SACE,WAAW,SAAS,6BAA6B,KACjD,WAAW,SAAS,iBAAiB,KACrC,WAAW,SAAS,cAAc,KAClC,WAAW,SAAS,aAAa;AAErC;AAEA,SAAS,8BAA8B,SAAiB;AACtD,QAAM,aAAa,QAAQ,KAAK,EAAE,YAAY;AAC9C,SACE,WAAW,SAAS,mCAAmC,KACvD,WAAW,SAAS,2BAA2B,KAC/C,WAAW,SAAS,4BAA4B,KAChD,WAAW,SAAS,uBAAuB;AAE/C;AAEO,SAAS,iBAAiB,OAAwB;AACvD,MAAI,iBAAiBA,cAAa;AAChC,QAAI,MAAM,WAAW,OAAO,MAAM,SAAS,kBAAkB;AAC3D,aAAO;AAAA,IACT;AACA,QAAI,MAAM,WAAW,OAAO,MAAM,SAAS,qBAAqB;AAC9D,aAAO;AAAA,IACT;AACA,QAAI,MAAM,WAAW,OAAO,MAAM,SAAS,sBAAsB;AAC/D,aAAO;AAAA,IACT;AACA,QAAI,MAAM,WAAW,8BAA8B,MAAM,OAAO,GAAG;AACjE,aAAO;AAAA,IACT;AACA,QACE,MAAM,UAAU,OACf,MAAM,WAAW,0BAA0B,MAAM,OAAO,GACzD;AACA,aAAO;AAAA,IACT;AACA,WAAO,MAAM,WAAW;AAAA,EAC1B;AACA,MAAI,iBAAiB,gBAAgB,MAAM,SAAS,cAAc;AAChE,WAAO;AAAA,EACT;AACA,MAAI,iBAAiB,OAAO;AAC1B,QAAI,8BAA8B,MAAM,OAAO,GAAG;AAChD,aAAO;AAAA,IACT;AACA,WAAO,0BAA0B,MAAM,OAAO,IAC1C,gCACA,MAAM;AAAA,EACZ;AACA,SAAO;AACT;;;AC3DA,IAAM,uBAAuB;AAQ7B,SAAS,gBAAgB,kBAA0B,kBAA0B;AAC3E,SAAO,GAAG,gBAAgB,iBAAiB,gBAAgB;AAC7D;AAEA,SAAS,aAAa,OAA4C;AAChE,MAAI,OAAO,UAAU,YAAY,UAAU,KAAM,QAAO;AACxD,QAAM,SAAS;AACf,MACE,OAAO,OAAO,OAAO,YACpB,OAAO,SAAS,WAAW,OAAO,SAAS,aAC5C,OAAO,OAAO,SAAS,YACvB,OAAO,OAAO,cAAc,YAC5B,CAAC,OAAO,SAAS,OAAO,SAAS,GACjC;AACA,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,IAAI,OAAO;AAAA,IACX,MAAM,OAAO;AAAA,IACb,MAAM,OAAO;AAAA,IACb,WAAW,OAAO;AAAA,EACpB;AACF;AAEO,SAAS,+BACd,kBACA,kBACmC;AACnC,MAAI,OAAO,mBAAmB,YAAa,QAAO;AAClD,QAAM,MAAM,eAAe,QAAQ,gBAAgB,kBAAkB,gBAAgB,CAAC;AACtF,MAAI,CAAC,IAAK,QAAO;AAEjB,MAAI;AACF,UAAM,QAAiB,KAAK,MAAM,GAAG;AACrC,QAAI,OAAO,UAAU,YAAY,UAAU,KAAM,QAAO;AACxD,UAAM,SAAS;AACf,QACE,OAAO,YAAY,wBACnB,CAAC,MAAM,QAAQ,OAAO,QAAQ,KAC9B,OAAO,OAAO,YAAY,aAC1B,OAAO,OAAO,kBAAkB,UAChC;AACA,aAAO;AAAA,IACT;AACA,UAAM,WAAW,OAAO,SAAS,IAAI,YAAY;AACjD,QAAI,SAAS,KAAK,CAAC,YAAY,YAAY,IAAI,EAAG,QAAO;AACzD,WAAO;AAAA,MACL,UAAU,SAAS,OAAO,CAAC,YAA4C,YAAY,IAAI;AAAA,MACvF,SAAS,OAAO;AAAA,MAChB,eAAe,OAAO;AAAA,IACxB;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,+BACd,kBACA,kBACA,cACA;AACA,MAAI,OAAO,mBAAmB,YAAa;AAC3C,iBAAe;AAAA,IACb,gBAAgB,kBAAkB,gBAAgB;AAAA,IAClD,KAAK,UAAU,EAAE,SAAS,sBAAsB,GAAG,aAAa,CAAC;AAAA,EACnE;AACF;AAEO,SAAS,gCACd,kBACA,kBACA;AACA,MAAI,OAAO,mBAAmB,YAAa;AAC3C,iBAAe,WAAW,gBAAgB,kBAAkB,gBAAgB,CAAC;AAC/E;;;AN9DA,IAAM,mBACJ;AAEF,SAAS,mBAAmB,WAAW,kBAAkC;AACvE,SAAO;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,MACR;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IACA,WAAW,CAAC;AAAA,IACZ,SAAS;AAAA,IACT,WAAW,CAAC;AAAA,IACZ,eAAe;AAAA,IACf,OAAO;AAAA,EACT;AACF;AAEA,SAAS,sBACP,cACA,cACgB;AAChB,MAAI,CAAC,gBAAgB,aAAa,SAAS,WAAW,EAAG,QAAO;AAChE,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU,aAAa;AAAA,IACvB,OAAO,aAAa,UAChB,aAAa,gBACX,cACA,aACF;AAAA,IACJ,eAAe,aAAa;AAAA,EAC9B;AACF;AAEA,SAAS,eACP,OACA,MACY;AACZ,QAAM,OAAO;AAAA,IACX,IAAI,KAAK;AAAA,IACT,MAAM,KAAK;AAAA,IACX,OAAO,KAAK;AAAA,IACZ,OAAO,KAAK;AAAA,IACZ,GAAI,KAAK,SAAS,EAAE,QAAQ,KAAK,OAAO,IAAI,CAAC;AAAA,EAC/C;AACA,QAAM,QAAQ,MAAM,UAAU,CAAC,SAAS,KAAK,OAAO,KAAK,EAAE;AAC3D,MAAI,QAAQ,EAAG,QAAO,CAAC,GAAG,OAAO,IAAI;AACrC,SAAO,MAAM,IAAI,CAAC,MAAM,cAAe,cAAc,QAAQ,OAAO,IAAK;AAC3E;AAEA,SAAS,uBAAuB,OAAwC;AACtE,SAAO,MAAM;AAAA,IAAI,CAAC,SAChB,KAAK,SAAS,cAAc,KAAK,UAAU,WACvC;AAAA,MACE,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,OAAO;AAAA,IACT,IACA;AAAA,EACN;AACF;AAcO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAwB;AACtB,QAAM,eAAe;AAAA,IACnB,MAAM,mBAAmB,UAAU,KAAK,KAAK,gBAAgB;AAAA,IAC7D,CAAC,QAAQ;AAAA,EACX;AACA,QAAM,0BAA0B,OAAO,0BAA0B;AACjE,0BAAwB,UAAU;AAClC,QAAM,iCAAiC,MAAM;AAC3C,UAAM,WAAW,wBAAwB;AACzC,QAAI,CAAC,UAAU;AACb,aAAO,QAAQ;AAAA,QACb,IAAI;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO,SAAS;AAAA,EAClB;AACA,QAAM,2BAA2B;AAAA,IAC/B,MACE,kBAAkB,KAAK,KACvB,2BAA2B;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH,CAAC,YAAY,SAAS,eAAe,kBAAkB,OAAO;AAAA,EAChE;AACA,QAAM,YAAY;AAAA,IAChB,MACE,kBAAkB,KAAK,KACvB,4BAA4B;AAAA,MAC1B,kBAAkB;AAAA,IACpB,CAAC;AAAA,IACH,CAAC,0BAA0B,gBAAgB;AAAA,EAC7C;AACA,QAAM,CAAC,OAAO,QAAQ,IAAI;AAAA,IAAyB,MACjD;AAAA,MACE,+BAA+B,0BAA0B,SAAS;AAAA,MAClE;AAAA,IACF;AAAA,EACF;AACA,QAAM,SAAS,OAA+B,IAAI;AAClD,QAAM,YAAY;AAAA,IAChB,kBAAkB;AAAA,MAChB;AAAA,MACA,4BAA4B;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,IACpB,CAAC;AAAA,EACH;AACA,QAAM,cAAc,GAAG,cAAc,EAAE,IAAI,OAAO,IAChD,WAAW,WACb,IAAI,iBAAiB,EAAE,IACrB,kBAAkB,EACpB,IAAI,wBAAwB,IAAI,SAAS,IAAI,YAAY,EAAE;AAC3D,QAAM,cAAc,OAAO,WAAW;AAEtC,YAAU,MAAM;AACd,QAAI,YAAY,YAAY,aAAa;AACvC;AAAA,IACF;AAEA,gBAAY,UAAU;AACtB,WAAO,SAAS,MAAM;AACtB,WAAO,UAAU;AACjB,cAAU,UAAU,kBAAkB;AAAA,MACpC;AAAA,MACA,4BAA4B;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,IACpB,CAAC;AACD;AAAA,MACE;AAAA,QACE,+BAA+B,0BAA0B,SAAS;AAAA,QAClE;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,YAAU,MAAM;AACd,QAAI,CAAC,mBAAmB,MAAM,QAAQ,EAAG;AACzC,mCAA+B,0BAA0B,WAAW;AAAA,MAClE,UAAU,MAAM;AAAA,MAChB,SAAS,YAAY,MAAM,KAAK;AAAA,MAChC,eAAe,MAAM;AAAA,IACvB,CAAC;AAAA,EACH,GAAG;AAAA,IACD;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN;AAAA,EACF,CAAC;AAED,QAAM,QAAQ,YAAY,MAAM;AAC9B,WAAO,SAAS,MAAM;AACtB,WAAO,UAAU;AACjB,cAAU,QAAQ,MAAM;AACxB,oCAAgC,0BAA0B,SAAS;AACnE,aAAS,YAAY;AAAA,EACvB,GAAG,CAAC,cAAc,0BAA0B,SAAS,CAAC;AAEtD,QAAM,UAAU;AAAA,IACd,OAAO,UAKD;AACJ,YAAM,EAAE,YAAY,cAAc,IAAI,QAAQ,YAAY,IAAI;AAC9D,YAAM,EAAE,OAAO,IAAI;AACnB,YAAM,cAAc,MAClB,OAAO,YAAY,cAAc,CAAC,OAAO;AAE3C,UAAI;AACF,YAAI,gBAAgB,QAAQ,WAAW;AACvC,YAAI,WAAW;AACf,cAAM,WAAW;AAAA,UACf,QAAQ,CAAC,SAAwB;AAC/B,gBAAI,CAAC,YAAY,EAAG;AACpB,qBAAS,CAAC,UAAU;AAAA,cAClB,GAAG;AAAA,cACH,OAAO,KAAK,UAAU,WAAW,kBAAkB,KAAK;AAAA,cACxD,WAAW,eAAe,KAAK,WAAW,IAAI;AAAA,YAChD,EAAE;AAAA,UACJ;AAAA,UACA,SAAS,CAAC,UAAkB;AAC1B,gBAAI,CAAC,YAAY,EAAG;AACpB,gBAAI,CAAC,eAAe;AAClB,8BAAgB;AAChB,uBAAS,CAAC,UAAU;AAAA,gBAClB,GAAG;AAAA,gBACH,OAAO;AAAA,gBACP,WAAW,uBAAuB,KAAK,SAAS;AAAA,gBAChD,eAAe;AAAA,cACjB,EAAE;AAAA,YACJ;AACA,wBAAY;AACZ,qBAAS,CAAC,UAAU;AAAA,cAClB,GAAG;AAAA,cACH,OAAO;AAAA,cACP,eAAe;AAAA,YACjB,EAAE;AAAA,UACJ;AAAA,UACA,YAAY,MAAM;AAChB,gBAAI,CAAC,YAAY,EAAG;AACpB,4BAAgB;AAAA,UAClB;AAAA,QACF;AAEA,YAAI,YAAY,SACZ,MAAM,UAAU,QAAQ,WAAW;AAAA,UACjC;AAAA,UACA;AAAA,UACA,SAAS;AAAA,UACT;AAAA,QACF,CAAC,IACD,MAAM,UAAU,QAAQ,SAAS,aAAa,EAAE,UAAU,OAAO,CAAC;AAEtE,YAAI,UAAU,cAAc,MAAM;AAChC,sBAAY,MAAM,UAAU,QAAQ,SAAS,aAAa;AAAA,YACxD;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AAEA,YAAI,CAAC,YAAY,KAAK,cAAc,KAAM;AAE1C,cAAM,eAAoC;AAAA,UACxC,IAAI,SAAS,KAAK,IAAI,CAAC;AAAA,UACvB,MAAM;AAAA,UACN,MAAM;AAAA,UACN,WAAW,KAAK,IAAI;AAAA,QACtB;AAEA,iBAAS,CAAC,UAAU;AAAA,UAClB,GAAG;AAAA,UACH,OAAO;AAAA,UACP,UAAU,CAAC,GAAG,KAAK,UAAU,YAAY;AAAA,UACzC,WAAW,uBAAuB,KAAK,SAAS;AAAA,UAChD,eAAe;AAAA,UACf,WAAW,CAAC;AAAA,UACZ,SAAS;AAAA,QACX,EAAE;AACF,eAAO,UAAU;AAAA,MACnB,SAAS,OAAO;AACd,YAAI,iBAAiB,gBAAgB,MAAM,SAAS;AAClD;AACF,YAAI,CAAC,YAAY,EAAG;AACpB,cAAM,UAAU,iBAAiB,KAAK;AACtC,YAAI,CAAC,QAAS;AACd,iBAAS,CAAC,UAAU;AAAA,UAClB,GAAG;AAAA,UACH,OAAO;AAAA,UACP,WACE,KAAK,UAAU,WAAW,KAC1B,KAAK,UAAU,CAAC,GAAG,SAAS,aACxB,CAAC,IACD,KAAK,UAAU;AAAA,YAAI,CAAC,SAClB,KAAK,UAAU,WACX;AAAA,cACE,GAAG;AAAA,cACH,QAAQ;AAAA,cACR,OAAO;AAAA,YACT,IACA;AAAA,UACN;AAAA,UACN,eAAe;AAAA,UACf,OAAO;AAAA,QACT,EAAE;AACF,eAAO,UAAU;AAAA,MACnB;AAAA,IACF;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,SAAS;AAAA,IACb,OAAO,gBAAwB;AAC7B,UAAI,OAAO,SAAS;AAClB,eAAO,QAAQ,MAAM;AACrB,kBAAU,QAAQ,aAAa;AAAA,MACjC;AACA,YAAM,aAAa,IAAI,gBAAgB;AACvC,aAAO,UAAU;AAEjB,YAAM,iBAAsC;AAAA,QAC1C,IAAI,WAAW,KAAK,IAAI,CAAC;AAAA,QACzB,MAAM;AAAA,QACN,MAAM;AAAA,QACN,WAAW,KAAK,IAAI;AAAA,MACtB;AAEA,eAAS,CAAC,UAAU;AAAA,QAClB,GAAG;AAAA,QACH,OAAO;AAAA,QACP,UAAU,CAAC,GAAG,KAAK,UAAU,cAAc;AAAA,QAC3C,WAAW;AAAA,UACT;AAAA,YACE,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,OAAO;AAAA,YACP,OAAO;AAAA,UACT;AAAA,QACF;AAAA,QACA,SAAS;AAAA,QACT,WAAW,CAAC;AAAA,QACZ,eAAe;AAAA,QACf,OAAO;AAAA,MACT,EAAE;AACF,YAAM,QAAQ,EAAE,YAAY,QAAQ,OAAO,YAAY,CAAC;AAAA,IAC1D;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AAEA,YAAU,MAAM;AACd,UAAM,eAAe;AAAA,MACnB;AAAA,MACA;AAAA,IACF;AACA,QAAI,CAAC,cAAc,QAAS;AAC5B,UAAM,iBAAiB,CAAC,GAAG,aAAa,QAAQ,EAC7C,QAAQ,EACR,KAAK,CAAC,YAAY,QAAQ,SAAS,SAAS;AAC/C,QAAI,CAAC,eAAgB;AAErB,UAAM,aAAa,IAAI,gBAAgB;AACvC,WAAO,UAAU;AACjB,SAAK,QAAQ;AAAA,MACX;AAAA,MACA,aAAa,aAAa;AAAA,MAC1B,QAAQ;AAAA,MACR,aAAa,eAAe;AAAA,IAC9B,CAAC;AAED,WAAO,MAAM;AACX,UAAI,OAAO,YAAY,YAAY;AACjC,eAAO,UAAU;AAAA,MACnB;AACA,iBAAW,MAAM;AAAA,IACnB;AAAA,EACF,GAAG,CAAC,aAAa,0BAA0B,SAAS,SAAS,CAAC;AAE9D,YAAU,MAAM;AACd,WAAO,MAAM;AACX,aAAO,SAAS,MAAM;AACtB,aAAO,UAAU;AAAA,IACnB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB,WAAW,UAAU,QAAQ,mBAAmB;AAAA,EAClD;AACF;AAEO,SAAS,mBAAmB,UAAiC;AAClE,SAAO,SAAS,KAAK,CAAC,YAAY,QAAQ,SAAS,SAAS;AAC9D;AAEO,SAAS,wBAA8C;AAC5D,SAAO;AAAA,IACL,EAAE,IAAI,UAAU,OAAO,gCAA2B;AAAA,IAClD,EAAE,IAAI,UAAU,OAAO,gCAAgC;AAAA,IACvD,EAAE,IAAI,UAAU,OAAO,yBAAyB;AAAA,EAClD;AACF;AAEO,SAAS,YAAY,OAAuB;AACjD,SACE,UAAU,cAAc,UAAU,mBAAmB,UAAU;AAEnE;;;AOpbO,IAAM,0BAAgD;AAAA,EAC3D,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,SAAS;AACX;AAEO,SAAS,wBACd,WACsB;AACtB,QAAM,QAAQ,WAAW,SAAS,wBAAwB;AAC1D,SAAO;AAAA,IACL,MAAM,WAAW,QAAQ,wBAAwB;AAAA,IACjD,OAAO,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,CAAC;AAAA,IACvC,OAAO,KAAK,IAAI,GAAG,WAAW,SAAS,wBAAwB,KAAK;AAAA,IACpE,SAAS,WAAW,WAAW,wBAAwB;AAAA,EACzD;AACF;;;ACyDO,IAAM,wBAAwC;AAAA,EACnD,cAAc;AAAA,EACd,OAAO;AAAA,EACP,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS;AAAA,EACT,cAAc;AAAA,EACd,MAAM;AAAA,EACN,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,aAAa;AAAA,EACb,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,aAAa;AACf;;;ACpGA,SAAS,aAAAC,YAAW,UAAAC,eAAkC;;;ACoChD,SACE,KADF;AAjCN,SAAS,YAAY,OAA4B,QAAiB;AAChE,QAAM,SAAS,CAAC,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,KAAK,UAAU,QAAQ;AAC1E,MAAI,QAAQ,SAAS,aAAc,QAAO,gBAAgB,OAAO,KAAK;AACtE,MAAI,QAAQ,SAAS,SAAU,QAAO;AACtC,MAAI,OAAQ,QAAO,OAAO;AAE1B,MAAI,OAAQ,QAAO;AAEnB,QAAM,WAAW,MAAM,KAAK,CAAC,SAAS,KAAK,UAAU,OAAO;AAC5D,QAAM,cAAc,MAAM;AAAA,IACxB,CAAC,SAAS,KAAK,SAAS,gBAAgB,KAAK,UAAU;AAAA,EACzD;AACA,QAAM,WAAW,MAAM;AAAA,IACrB,CAAC,SAAS,KAAK,SAAS,YAAY,KAAK,UAAU;AAAA,EACrD;AACA,MAAI,SAAU,QAAO;AACrB,MAAI,YAAY,SAAS;AACvB,WAAO,aAAa,YAAY,MAAM;AACxC,MAAI,YAAY,WAAW,EAAG,QAAO,aAAa,YAAY,CAAC,GAAG,KAAK;AACvE,MAAI,SAAU,QAAO;AACrB,SAAO;AACT;AAEO,SAAS,oBAAoB;AAAA,EAClC,SAAS;AAAA,EACT;AACF,GAGG;AACD,QAAM,SAAS,MAAM,KAAK,CAAC,SAAS,KAAK,UAAU,QAAQ;AAC3D,SACE,qBAAC,aAAQ,WAAU,yBACjB;AAAA,yBAAC,OAAE,WAAU,iCAAgC,aAAU,UACrD;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,+BACT,SAAS,eAAe,SAAS,cAAc,EACjD;AAAA,UACA,eAAY;AAAA;AAAA,MACd;AAAA,MACC,YAAY,OAAO,MAAM;AAAA,OAC5B;AAAA,IACA,qBAAC,aAAQ,WAAU,kCAAiC,MAAM,QACxD;AAAA,0BAAC,aAAQ,0BAAY;AAAA,MACrB,oBAAC,QAAG,WAAU,gCACX,gBAAM,IAAI,CAAC,SACV;AAAA,QAAC;AAAA;AAAA,UAEC,WAAU;AAAA,UACV,cAAY,KAAK;AAAA,UAEjB;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,eAAY;AAAA,gBAEX,eAAK,UAAU,cACZ,WACA,KAAK,UAAU,UACf,MACA;AAAA;AAAA,YACN;AAAA,YACA,qBAAC,UAAK,WAAU,oCACd;AAAA,kCAAC,YAAQ,eAAK,OAAM;AAAA,cACnB,KAAK,SAAS,oBAAC,WAAO,eAAK,QAAO,IAAW;AAAA,eAChD;AAAA;AAAA;AAAA,QAjBK,KAAK;AAAA,MAkBZ,CACD,GACH;AAAA,OACF;AAAA,KACF;AAEJ;;;AC1EA,SAAS,UAAAC,SAAQ,YAAAC,iBAAoD;AAM/D,gBAAAC,MAyCA,QAAAC,aAzCA;AAHN,SAAS,WAAW;AAClB,SACE,gBAAAD,KAAC,SAAI,SAAQ,aAAY,MAAK,QAAO,eAAY,QAC/C,0BAAAA,KAAC,UAAK,GAAE,4BAA2B,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ,gBAAe,SAAQ,GAC1H;AAEJ;AAEO,SAAS,SAAS;AAAA,EACvB,WAAW;AAAA,EACX,cAAc;AAAA,EACd,UAAU;AAAA,EACV;AACF,GAKG;AACD,QAAM,CAAC,OAAO,QAAQ,IAAIE,UAAS,EAAE;AACrC,QAAM,WAAWC,QAA4B,IAAI;AAEjD,WAAS,gBAAgB;AACvB,UAAM,UAAU,MAAM,KAAK;AAC3B,QAAI,CAAC,WAAW,SAAU;AAC1B,eAAW,OAAO;AAClB,aAAS,EAAE;AACX,aAAS,SAAS,MAAM;AAAA,EAC1B;AAEA,WAAS,aAAa,OAAkB;AACtC,UAAM,eAAe;AACrB,kBAAc;AAAA,EAChB;AAEA,WAAS,cAAc,OAA2C;AAChE,QAAI,MAAM,QAAQ,WAAW,CAAC,MAAM,UAAU;AAC5C,YAAM,eAAe;AACrB,oBAAc;AAAA,IAChB;AAAA,EACF;AAEA,SACE,gBAAAH,KAAC,UAAK,WAAW,WAAW,YAAY,SAAS,oBAAoB,EAAE,IAAI,UAAU,cACnF,0BAAAC,MAAC,SAAI,WAAU,mBACb;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,WAAU;AAAA,QACV,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAW;AAAA,QACX,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAK;AAAA,QAChD,WAAW;AAAA;AAAA,IACb;AAAA,IACA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAU;AAAA,QACV,UAAU,YAAY,CAAC,MAAM,KAAK;AAAA,QAClC,cAAW;AAAA,QAEX,0BAAAA,KAAC,YAAS;AAAA;AAAA,IACZ;AAAA,KACF,GACF;AAEJ;;;AC/CY,gBAAAI,MAgBR,QAAAC,aAhBQ;AApBL,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,UAAU;AAAA,EACV;AACF,GAMG;AACD,MAAI,YAAY,WAAW,EAAG,QAAO;AAErC,MAAI,YAAY,QAAQ;AACtB,WACE,gBAAAD,KAAC,SAAI,WAAU,6BACb,0BAAAA,KAAC,SAAI,WAAU,qBACZ,sBAAY,IAAI,CAAC,eAChB,gBAAAA;AAAA,MAAC;AAAA;AAAA,QAEC,MAAK;AAAA,QACL,WAAU;AAAA,QACV;AAAA,QACA,SAAS,MAAM,WAAW,UAAU;AAAA,QAEnC,qBAAW;AAAA;AAAA,MANP,WAAW;AAAA,IAOlB,CACD,GACH,GACF;AAAA,EAEJ;AAEA,SACE,gBAAAC,MAAC,SAAI,WAAU,aACb;AAAA,oBAAAD,KAAC,UAAK,WAAU,oBAAoB,iBAAM;AAAA,IAC1C,gBAAAA,KAAC,SAAI,WAAU,mBACZ,sBAAY,IAAI,CAAC,eAChB,gBAAAA;AAAA,MAAC;AAAA;AAAA,QAEC,MAAK;AAAA,QACL,WAAU;AAAA,QACV;AAAA,QACA,SAAS,MAAM,WAAW,UAAU;AAAA,QAEnC,qBAAW;AAAA;AAAA,MANP,WAAW;AAAA,IAOlB,CACD,GACH;AAAA,KACF;AAEJ;;;ACvDA,SAAS,kBAAkB;AAC3B,OAAO;AAOC,gBAAAE,YAAA;AAJD,SAAS,cAAc,EAAE,QAAQ,GAAqC;AAC3E,MAAI,QAAQ,SAAS,WAAW;AAC9B,WACE,gBAAAA,KAAC,aAAQ,WAAU,0CACjB,0BAAAA,KAAC,OAAE,WAAU,wBAAwB,kBAAQ,MAAK,GACpD;AAAA,EAEJ;AAEA,SACE,gBAAAA,KAAC,aAAQ,WAAU,wCACjB,0BAAAA,KAAC,SAAI,WAAU,wBACb,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC,UAAQ;AAAA,MACR,OAAM;AAAA,MACN,WAAU;AAAA,MACV,UAAU;AAAA,MACV,aAAa,QAAQ;AAAA,MACrB,YAAY,EAAE,SAAS,MAAM;AAAA,MAC7B,MAAM,QAAQ,YAAY,cAAc;AAAA,MACxC,UAAQ;AAAA,MAEP,kBAAQ;AAAA;AAAA,EACX,GACF,GACF;AAEJ;;;AJjBM,gBAAAC,MA8JM,QAAAC,aA9JN;AAHN,SAAS,eAAe;AACtB,SACE,gBAAAD,KAAC,SAAI,SAAQ,aAAY,MAAK,QAAO,eAAY,QAC/C,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC,GAAE;AAAA,MACF,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA;AAAA,EAChB,GACF;AAEJ;AAEA,SAAS,aAAa;AACpB,SACE,gBAAAA,KAAC,SAAI,SAAQ,aAAY,MAAK,QAAO,eAAY,QAC/C,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC,GAAE;AAAA,MACF,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA;AAAA,EACjB,GACF;AAEJ;AAEA,SAAS,cAAc;AACrB,SACE,gBAAAA,KAAC,SAAI,SAAQ,aAAY,MAAK,QAAO,eAAY,QAC/C,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC,GAAE;AAAA,MACF,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA;AAAA,EACjB,GACF;AAEJ;AAkBO,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA,iBAAiB;AAAA,EACjB,sBAAsB;AAAA,EACtB,mBAAmB;AAAA,EACnB,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAmB;AACjB,QAAM,gBAAgBE,QAAuB,IAAI;AACjD,QAAM,gBAAgB,EAAE,GAAG,uBAAuB,GAAG,MAAM;AAC3D,QAAM,YAAY;AAAA,IAChB,gBAAgB,cAAc;AAAA,IAC9B,uBAAuB,cAAc;AAAA,IACrC,cAAc,cAAc;AAAA,IAC5B,mBAAmB,cAAc;AAAA,IACjC,mBAAmB,cAAc;AAAA,IACjC,gBAAgB,cAAc;AAAA,IAC9B,sBAAsB,cAAc;AAAA,IACpC,aAAa,cAAc;AAAA,IAC3B,mBAAmB,cAAc;AAAA,IACjC,oBAAoB,cAAc;AAAA,IAClC,eAAe,cAAc;AAAA,IAC7B,uBAAuB,cAAc;AAAA,IACrC,qBAAqB,cAAc;AAAA,IACnC,gBAAgB,cAAc;AAAA,IAC9B,eAAe,cAAc;AAAA,IAC7B,kBAAkB,cAAc;AAAA,IAChC,qBAAqB,cAAc;AAAA,EACrC;AAEA,QAAM,SACJ,MAAM,UAAU,cAChB,MAAM,UAAU,mBAChB,MAAM,UAAU;AAElB,QAAM,eAAe,MAAM,UAAU,SAAS;AAE9C,QAAMC,sBAAqB,MAAM,SAAS;AAAA,IACxC,CAAC,YAAY,QAAQ,SAAS;AAAA,EAChC;AACA,QAAM,oBAAoB,CAACA,uBAAsB,MAAM,UAAU,SAAS;AAC1E,QAAM,oBAAoB,YAAY;AACtC,QAAM,mBACJ,MAAM,UAAU,eAAe,MAAM,gBACjC;AAAA,IACE,WAAW;AAAA,IACX,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,WAAW;AAAA,IACX,MAAM,MAAM;AAAA,EACd,IACA;AAEN,EAAAC,WAAU,MAAM;AACd,UAAM,OAAO,cAAc;AAC3B,QAAI,CAAC,KAAM;AACX,SAAK,YAAY,KAAK;AAAA,EACxB,GAAG;AAAA,IACD,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACR,CAAC;AAED,SACE,gBAAAH;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,aACT,mBAAmB,mCAAmC,EACxD,GAAG,WAAW,0BAA0B,EAAE;AAAA,MAC1C,OAAO;AAAA,MACP,cAAW;AAAA,MAEX;AAAA,wBAAAD,KAAC,YAAO,WAAU,sBAChB,0BAAAC,MAAC,SAAI,WAAU,yBACZ;AAAA,uBACC,gBAAAD;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,cAAW;AAAA,cACX,SAAS;AAAA,cAET,0BAAAA,KAAC,gBAAa;AAAA;AAAA,UAChB,IACE,UACF,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,cAAW;AAAA,cACX,SAAS;AAAA,cAET,0BAAAA,KAAC,gBAAa;AAAA;AAAA,UAChB,IAEA,gBAAAA,KAAC,UAAK,WAAU,4BAA2B,eAAY,QAAO;AAAA,UAEhE,gBAAAC,MAAC,UAAK,WAAU,wBACd;AAAA,4BAAAA,MAAC,UAAK,WAAU,0BAAyB,eAAY,QAClD;AAAA,yBAAW,MAAM,GAAG,CAAC,EAAE,YAAY;AAAA,cACnC,eACC,gBAAAD;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAU;AAAA,kBACV,KAAK;AAAA,kBACL,KAAI;AAAA,kBACJ,SAAS,CAAC,UAAU;AAClB,0BAAM,cAAc,SAAS;AAAA,kBAC/B;AAAA;AAAA,cACF,IACE;AAAA,eACN;AAAA,YACA,gBAAAA,KAAC,UAAK,WAAU,2BAA2B,sBAAW;AAAA,aACxD;AAAA,UACC,iBACC,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,cACE,WAAW,yBAAyB;AAAA,cAEtC,SAAS;AAAA,cAER,qBAAW,gBAAAA,KAAC,eAAY,IAAK,gBAAAA,KAAC,cAAW;AAAA;AAAA,UAC5C,IAEA,gBAAAA,KAAC,UAAK,WAAU,4BAA2B,eAAY,QAAO;AAAA,WAElE,GACF;AAAA,QAEA,gBAAAC,MAAC,SAAI,KAAK,eAAe,WAAU,0BAChC;AAAA,gBAAM,SAAS,IAAI,CAAC,YACnB,gBAAAD,KAAC,iBAA+B,WAAZ,QAAQ,EAAsB,CACnD;AAAA,UAEA,mBAAmB,gBAAAA,KAAC,iBAAc,SAAS,kBAAkB,IAAK;AAAA,UAElE,eACC,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,QAAQ,MAAM,UAAU;AAAA,cACxB,OAAO,MAAM;AAAA;AAAA,UACf,IACE;AAAA,UAEH,CAAC,YAAY,oBACZ,gBAAAA,KAAC,SAAI,WAAU,8BACb,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,aAAa,MAAM;AAAA,cACnB,UAAU;AAAA,cACV,OAAM;AAAA,cACN,UAAU,CAAC,eAAe,mBAAmB,WAAW,KAAK;AAAA;AAAA,UAC/D,GACF,IACE;AAAA,UAEH,MAAM,QACL,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAO,EAAE,UAAU,IAAI,OAAO,oBAAoB,QAAQ,EAAE;AAAA,cAE3D,gBAAM;AAAA;AAAA,UACT,IACE;AAAA,WACN;AAAA,QAEC,WACC,gBAAAC,MAAC,SAAI,WAAU,yBACZ;AAAA,8BACC,gBAAAD,KAAC,SAAI,WAAU,8BACb,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,aAAa,MAAM;AAAA,cACnB,UAAU;AAAA,cACV,UAAU,CAAC,eAAe,mBAAmB,WAAW,KAAK;AAAA;AAAA,UAC/D,GACF,IACE;AAAA,UACJ,gBAAAA,KAAC,SAAI,WAAU,oBACb,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,UAAU;AAAA,cACV,aAAa;AAAA,cACb;AAAA;AAAA,UACF,GACF;AAAA,UACA,gBAAAC,MAAC,SAAI,WAAU,sBACb;AAAA,4BAAAD,KAAC,OAAE,WAAU,iCAAgC,yDAE7C;AAAA,YACA,gBAAAA,KAAC,OAAE,WAAU,2BAA2B,0BAAe;AAAA,aACzD;AAAA,WACF,IAEA,gBAAAC,MAAC,SAAI,WAAU,6BACb;AAAA,0BAAAD;AAAA,YAAC;AAAA;AAAA,cACC,UAAU;AAAA,cACV,aAAa;AAAA,cACb;AAAA;AAAA,UACF;AAAA,UACA,gBAAAC,MAAC,SAAI,WAAU,sBACb;AAAA,4BAAAD,KAAC,OAAE,WAAU,iCAAgC,yDAE7C;AAAA,YACA,gBAAAA,KAAC,OAAE,WAAU,2BAA2B,0BAAe;AAAA,aACzD;AAAA,WACF;AAAA;AAAA;AAAA,EAEJ;AAEJ;;;AKpRI,SAgHI,UA1GF,OAAAK,MANF,QAAAC,aAAA;AAFJ,SAAS,eAAe;AACtB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,eAAY;AAAA,MAEZ;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,MAAK;AAAA;AAAA,QACP;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,MAAK;AAAA;AAAA,QACP;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,MAAK;AAAA;AAAA,QACP;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,kBAAkB;AACzB,SACE,gBAAAA,KAAC,SAAI,SAAQ,aAAY,MAAK,QAAO,eAAY,QAC/C,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC,GAAE;AAAA,MACF,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA;AAAA,EACjB,GACF;AAEJ;AAEA,SAAS,kBAAkB;AACzB,SACE,gBAAAA,KAAC,SAAI,SAAQ,aAAY,MAAK,QAAO,eAAY,QAC/C,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC,GAAE;AAAA,MACF,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA;AAAA,EACjB,GACF;AAEJ;AAEA,SAAS,WAAW;AAClB,SACE,gBAAAA,KAAC,UAAK,WAAU,yBAAwB,eAAY,QACjD,gBAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,GAAG,UAC9B,gBAAAA,KAAC,SAAO,KAAO,CAChB,GACH;AAEJ;AAEA,IAAM,eACJ;AAAA,EACE,SAAS,EAAE,OAAO,UAAU,MAAM,cAAc;AAAA,EAChD,KAAK,EAAE,OAAO,gBAAgB,MAAM,eAAe;AAAA,EACnD,MAAM,EAAE,OAAO,UAAU,MAAM,cAAc;AAC/C;AAEK,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAWG;AACD,QAAM,OAAO,aAAa,OAAO;AACjC,QAAM,eAAe,OAAO,KAAK,KAAK,KAAK;AAC3C,QAAM,QAAQ;AAAA,IACZ,eAAe,GAAG,KAAK;AAAA,IACvB,eAAe,GAAG,KAAK;AAAA,IACvB,GAAI,aAAa,EAAE,cAAc,WAAW,IAAI,CAAC;AAAA,IACjD,GAAI,aAAa,EAAE,qBAAqB,WAAW,IAAI,CAAC;AAAA,EAC1D;AAEA,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAW,oCAAoC,OAAO,qBAAqB,IAAI,GAC7E,UAAU,gBAAgB,EAC5B;AAAA,MACA;AAAA,MACA,cAAY,QAAQ,YAAY;AAAA,MAChC,eAAa,CAAC;AAAA,MACd,UAAU,UAAU,IAAI;AAAA,MACxB,SAAS;AAAA,MAER;AAAA,oBAAY,YACX,gBAAAA,MAAA,YACE;AAAA,0BAAAA,MAAC,UAAK,WAAU,yBAAwB,eAAY,QAClD;AAAA,4BAAAD,KAAC,gBAAa;AAAA,YACb,UACC,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,KAAK;AAAA,gBACL,KAAI;AAAA,gBACJ,SAAS,CAAC,UAAU;AAClB,wBAAM,cAAc,SAAS;AAAA,gBAC/B;AAAA;AAAA,YACF,IACE;AAAA,aACN;AAAA,UACA,gBAAAA,KAAC,UAAK,WAAU,0BAA0B,wBAAa;AAAA,UACvD,gBAAAA,KAAC,mBAAgB;AAAA,WACnB,IACE;AAAA,QAEH,YAAY,QACX,gBAAAC,MAAA,YACE;AAAA,0BAAAD,KAAC,mBAAgB;AAAA,UACjB,gBAAAA,KAAC,UAAK,WAAU,0BAA0B,wBAAa;AAAA,UACvD,gBAAAA,KAAC,YAAS;AAAA,WACZ,IACE;AAAA,QAEH,YAAY,SACX,gBAAAC,MAAA,YACE;AAAA,0BAAAA,MAAC,UAAK,WAAU,yBAAwB,eAAY,QAClD;AAAA,4BAAAD,KAAC,gBAAa;AAAA,YACb,UACC,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,KAAK;AAAA,gBACL,KAAI;AAAA,gBACJ,SAAS,CAAC,UAAU;AAClB,wBAAM,cAAc,SAAS;AAAA,gBAC/B;AAAA;AAAA,YACF,IACE;AAAA,aACN;AAAA,UACA,gBAAAA,KAAC,UAAK,WAAU,0BAA0B,wBAAa;AAAA,UACvD,gBAAAA,KAAC,mBAAgB;AAAA,WACnB,IACE;AAAA;AAAA;AAAA,EACN;AAEJ;;;ACvKA,SAAS,aAAAE,YAAW,UAAAC,SAAQ,YAAAC,iBAAgB;;;ACD5C,SAAS,aAAAC,kBAAiC;AAEnC,IAAM,mBAAmB;AAChC,IAAM,wBAAwB;AAEvB,SAAS,qBAAqB,OAKlC;AACD,SAAO,MAAM,aAAa,CAAC,MAAM,YAAY,CAAC,MAAM,iBAAiB,CAAC,MAAM;AAC9E;AAEO,SAAS,sBAAsB,WAAsC;AAC1E,MAAI,OAAO,cAAc,YAAY,YAAY,GAAG;AAClD,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,aAAa,aAAa;AACnC,UAAM,QAAQ,iBAAiB,SAAS,eAAe,EACpD,iBAAiB,qBAAqB,EACtC,KAAK;AACR,UAAM,SAAS,OAAO,WAAW,KAAK;AACtC,QAAI,OAAO,SAAS,MAAM,KAAK,SAAS,GAAG;AACzC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAYA,IAAI,kBAA6C;AAE1C,SAAS,uBAAuB,OAA4C;AACjF,SAAO;AAAA,IACL,OAAO,MAAM,iBAAiB,cAAc;AAAA,IAC5C,UAAU,MAAM,oBAAoB,cAAc;AAAA,EACpD;AACF;AAEO,SAAS,kBAAkB,OAAwB,UAA8B;AACtF,MAAI,SAAS,OAAO;AAClB,UAAM,YAAY,gBAAgB,SAAS,OAAO,SAAS,YAAY,MAAS;AAChF;AAAA,EACF;AAEA,QAAM,eAAe,cAAc;AACrC;AAEA,SAAS,6BAA6B;AACpC,MAAI,oBAAoB,MAAM;AAC5B;AAAA,EACF;AAEA,oBAAkB,uBAAuB,SAAS,gBAAgB,KAAK;AACzE;AAEA,SAAS,cAAc,QAAgB;AACrC,6BAA2B;AAC3B,WAAS,gBAAgB,MAAM,YAAY,gBAAgB,QAAQ,WAAW;AAChF;AAEA,SAAS,kBAAkB;AACzB,MAAI,oBAAoB,MAAM;AAC5B;AAAA,EACF;AAEA,oBAAkB,SAAS,gBAAgB,OAAO,eAAe;AACjE,oBAAkB;AACpB;AAEO,SAAS,aAAa,OAG1B;AACD,QAAM,EAAE,QAAQ,YAAY,IAAI;AAEhC,EAAAA,WAAU,MAAM;AACd,QAAI,OAAO,aAAa,aAAa;AACnC;AAAA,IACF;AAEA,QAAI,CAAC,QAAQ;AACX,eAAS,gBAAgB,UAAU,OAAO,gBAAgB;AAC1D,sBAAgB;AAChB;AAAA,IACF;AAEA,aAAS,gBAAgB,UAAU,IAAI,gBAAgB;AAEvD,aAAS,cAAc;AACrB,YAAM,OAAO,YAAY,SAAS,cAAc,aAAa;AAC7D,YAAM,QAAQ;AAAA,QACZ,gBAAgB,cAAc,KAAK,cAAc;AAAA,MACnD;AACA,oBAAc,GAAG,KAAK,IAAI;AAAA,IAC5B;AAEA,gBAAY;AACZ,UAAM,QAAQ,sBAAsB,WAAW;AAE/C,WAAO,MAAM;AACX,2BAAqB,KAAK;AAC1B,eAAS,gBAAgB,UAAU,OAAO,gBAAgB;AAC1D,sBAAgB;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,QAAQ,WAAW,CAAC;AAC1B;;;ACtHA,SAAS,aAAAC,YAAW,YAAAC,iBAAgB;AAE7B,SAAS,YAAY,aAAa,KAAK;AAC5C,QAAM,CAAC,UAAU,WAAW,IAAIA;AAAA,IAC9B,MAAM,OAAO,WAAW,eAAe,OAAO,WAAW,eAAe,UAAU,KAAK,EAAE;AAAA,EAC3F;AAEA,EAAAD,WAAU,MAAM;AACd,UAAM,QAAQ,OAAO,WAAW,eAAe,UAAU,KAAK;AAC9D,UAAM,WAAW,MAAM,YAAY,MAAM,OAAO;AAChD,aAAS;AACT,UAAM,iBAAiB,UAAU,QAAQ;AACzC,WAAO,MAAM,MAAM,oBAAoB,UAAU,QAAQ;AAAA,EAC3D,GAAG,CAAC,UAAU,CAAC;AAEf,SAAO;AACT;;;ACXA,IAAM,cAAc,oBAAI,IAAkC;AAEnD,SAAS,6BAA6B,YAAoB,YAAkC;AACjG,cAAY,IAAI,YAAY,UAAU;AACxC;AAEO,SAAS,+BAA+B,YAAoB;AACjE,cAAY,OAAO,UAAU;AAC/B;AAEO,SAAS,eAAe,YAAoB;AACjD,cAAY,IAAI,UAAU,GAAG,KAAK;AACpC;AAEO,SAAS,gBAAgB,YAAoB;AAClD,cAAY,IAAI,UAAU,GAAG,MAAM;AACrC;;;AH6GM,SAWI,OAAAE,MAXJ,QAAAC,aAAA;AA7FC,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,YAAY;AAAA,EACZ,0BAA0B;AAAA,EAC1B;AACF,GAAqB;AACnB,QAAM,WAAW,YAAY;AAC7B,QAAM,YAAY,wBAAwB,cAAc;AACxD,QAAM,cAAcC,QAAuB,IAAI;AAC/C,QAAM,CAAC,eAAe,gBAAgB,IAAIC,UAAS,gBAAgB;AACnE,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAS,KAAK;AACtD,QAAM,kBAAkB,qBAAqB;AAAA,IAC3C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,eAAa;AAAA,IACX,QAAQ;AAAA,IACR;AAAA,EACF,CAAC;AACD,QAAM,EAAE,OAAO,OAAO,IAAI,aAAa;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,UAAU;AAAA,EACtB,CAAC;AAED,QAAM,YAAY,UAAU,aAAa;AACzC,QAAM,QAAiC;AAAA,IACrC,GAAI,UAAU,aACV,EAAE,UAAU,SAAS,YAAY,aAAa,SAAS,WAAW,IAClE,CAAC;AAAA,IACL,GAAI,UAAU,QAAQ,UAClB;AAAA,MACE,OAAO,SAAS,OAAO;AAAA,MACvB,eAAe,SAAS,OAAO;AAAA,IACjC,IACA,CAAC;AAAA,IACL,GAAI,UAAU,QAAQ,cAClB,EAAE,WAAW,SAAS,OAAO,YAAY,IACzC,CAAC;AAAA,IACL,GAAI,UAAU,QAAQ,oBAClB,EAAE,aAAa,SAAS,OAAO,kBAAkB,IACjD,CAAC;AAAA,IACL,GAAI,UAAU,QAAQ,UAAU,EAAE,SAAS,SAAS,OAAO,QAAQ,IAAI,CAAC;AAAA,IACxE,GAAI,UAAU,QAAQ,eAClB,EAAE,cAAc,SAAS,OAAO,aAAa,IAC7C,CAAC;AAAA,IACL,GAAI,UAAU,QAAQ,OAAO,EAAE,MAAM,SAAS,OAAO,KAAK,IAAI,CAAC;AAAA,IAC/D,GAAI,UAAU,QAAQ,YAClB;AAAA,MACE,WAAW,SAAS,OAAO;AAAA,MAC3B,YAAY,SAAS,OAAO;AAAA,IAC9B,IACA,CAAC;AAAA,IACL,GAAI,UAAU,QAAQ,SAAS,EAAE,QAAQ,SAAS,OAAO,OAAO,IAAI,CAAC;AAAA,EACvE;AAEA,QAAM,OAAO,MAAM,UAAU,UAAU,CAAC,mBAAmB,MAAM,QAAQ;AAEzE,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,wBAAyB;AAE9B,iCAA6B,YAAY;AAAA,MACvC,MAAM,MAAM,iBAAiB,KAAK;AAAA,MAClC,OAAO,MAAM;AACX,yBAAiB,IAAI;AACrB,wBAAgB,KAAK;AAAA,MACvB;AAAA,IACF,CAAC;AAED,WAAO,MAAM,+BAA+B,UAAU;AAAA,EACxD,GAAG,CAAC,YAAY,uBAAuB,CAAC;AAExC,iBAAe,aAAa,SAAiB;AAC3C,QAAI,SAAU,kBAAiB,KAAK;AACpC,UAAM,OAAO,OAAO;AAAA,EACtB;AAEA,SACE,gBAAAH,MAAC,SAAI,WAAU,sBACb;AAAA,oBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,4BACT,gBAAgB,0CAA0C,EAC5D,GAAG,eAAe,yCAAyC,EAAE;AAAA,QAE7D;AAAA,0BAAAD;AAAA,YAAC;AAAA;AAAA,cACC,KAAK;AAAA,cACL,WAAU;AAAA,cACV,OAAO,iBAAiB;AAAA,cACxB,eAAa;AAAA,cAEb,0BAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC;AAAA,kBACA,YAAY;AAAA,kBACZ,cAAc,UAAU;AAAA,kBACxB,qBACE,UAAU,uBAAuB,OAAO,SAAS;AAAA,kBAEnD,gBAAgB,UAAU,kBAAkB;AAAA,kBAC5C,OACE,OACI;AAAA,oBACE,GAAG;AAAA,oBACH,WAAW,sBAAsB;AAAA,kBACnC,IACA;AAAA,kBAEN,kBAAkB,YAAY,CAAC;AAAA,kBAC/B,UAAU;AAAA,kBACV,YAAY,CAAC,WAAW,MAAM,iBAAiB,IAAI,IAAI;AAAA,kBACvD,SAAS,WAAW,MAAM,iBAAiB,IAAI,IAAI;AAAA,kBACnD,gBACE,CAAC,WACG,MAAM,gBAAgB,CAAC,YAAY,CAAC,OAAO,IAC3C;AAAA,kBAEN,UAAU;AAAA,kBACV,kBAAkB,CAAC,UAAU,KAAK,aAAa,KAAK;AAAA;AAAA,cACtD;AAAA;AAAA,UACF;AAAA,UACC,CAAC,YAAY,gBAAgB,CAAC,gBAC7B,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,UAAU;AAAA,cACV,cAAW;AAAA,cACX,SAAS,MAAM,gBAAgB,KAAK;AAAA;AAAA,UACtC,IACE;AAAA;AAAA;AAAA,IACN;AAAA,IAEC,gBACC,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,UAAU;AAAA,QACnB,MAAM,UAAU;AAAA,QAChB,OAAO,UAAU;AAAA,QACjB,OAAO,UAAU;AAAA,QACjB,SAAO;AAAA,QACP,OAAO;AAAA,QACP,SAAS,UAAU;AAAA,QACnB,YAAY,UAAU,QAAQ;AAAA,QAC9B,YAAY,UAAU;AAAA,QACtB,QAAQ,MAAM,iBAAiB,KAAK;AAAA;AAAA,IACtC,IACE;AAAA,KACN;AAEJ;","names":["ClientError","current","ClientError","ClientError","useEffect","useRef","useRef","useState","jsx","jsxs","useState","useRef","jsx","jsxs","jsx","jsx","jsxs","useRef","hasVisitorMessages","useEffect","jsx","jsxs","useEffect","useRef","useState","useEffect","useEffect","useState","jsx","jsxs","useRef","useState","useEffect"]}
|