@burdenoff/microfe-vibecontrols 2026.522.4 → 2026.522.5
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/components/vibe/VibeAgentEmptyState.js +126 -18
- package/dist/components/vibe/VibeAgentEmptyState.js.map +1 -1
- package/dist/pages/VibeDetailsPage.js +449 -396
- package/dist/pages/VibeDetailsPage.js.map +1 -1
- package/dist/pages/tunnels/TunnelDetailsPage.js +1 -1
- package/dist/pages/tunnels/TunnelDetailsPage.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,29 +1,137 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { useAttachAgentToVibeMutation as e, useListAgentsQuery as t } from "../../generated/wspace-operations.js";
|
|
2
|
+
import { useVibeNavigate as n } from "../../providers/VibeControlsProvider.js";
|
|
3
|
+
import { EmptyState as r } from "../shared/EmptyState.js";
|
|
3
4
|
import "../shared/index.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
5
|
+
import { useCallback as i, useMemo as a, useState as o } from "react";
|
|
6
|
+
import { ArrowRight as s, Plus as c, Server as l } from "lucide-react";
|
|
7
|
+
import { Fragment as u, jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
6
8
|
//#region src/components/vibe/VibeAgentEmptyState.tsx
|
|
7
|
-
var
|
|
8
|
-
let
|
|
9
|
-
|
|
9
|
+
var p = ({ vibeId: p, tr: m, onAttached: h }) => {
|
|
10
|
+
let g = n(), [_, v] = o(!1), [y, b] = o(null), [x, S] = o(null), { data: C, loading: w } = t({
|
|
11
|
+
skip: !_,
|
|
12
|
+
fetchPolicy: "cache-and-network"
|
|
13
|
+
}), [T] = e(), E = a(() => C?.vibecontrolsAgents ?? [], [C]), D = i(async (e) => {
|
|
14
|
+
b(null), S(e);
|
|
15
|
+
try {
|
|
16
|
+
await T({ variables: { input: {
|
|
17
|
+
vibeId: p,
|
|
18
|
+
agentId: e
|
|
19
|
+
} } }), v(!1), h?.();
|
|
20
|
+
} catch (e) {
|
|
21
|
+
b(e instanceof Error ? e.message : String(e));
|
|
22
|
+
} finally {
|
|
23
|
+
S(null);
|
|
24
|
+
}
|
|
25
|
+
}, [
|
|
26
|
+
T,
|
|
27
|
+
p,
|
|
28
|
+
h
|
|
29
|
+
]), O = i(() => {
|
|
30
|
+
g(`/agents${p ? `?attachToVibe=${encodeURIComponent(p)}` : ""}`);
|
|
31
|
+
}, [g, p]);
|
|
32
|
+
return /* @__PURE__ */ f(u, { children: [/* @__PURE__ */ d("div", {
|
|
10
33
|
className: "rounded-lg border border-border-default bg-bg-surface",
|
|
11
|
-
children: /* @__PURE__ */
|
|
12
|
-
icon: /* @__PURE__ */
|
|
13
|
-
title:
|
|
14
|
-
description:
|
|
15
|
-
action: /* @__PURE__ */
|
|
34
|
+
children: /* @__PURE__ */ d(r, {
|
|
35
|
+
icon: /* @__PURE__ */ d(l, { className: "w-8 h-8 text-text-secondary" }),
|
|
36
|
+
title: m("vibeDetails.noAgentTitle", "No agent attached"),
|
|
37
|
+
description: m("vibeDetails.noAgentDescription", "This vibe is not attached to an agent yet. Sessions, GitOps, GraphQL playground, and git tooling all run through an agent — connect one to unlock those tabs."),
|
|
38
|
+
action: /* @__PURE__ */ f("button", {
|
|
16
39
|
type: "button",
|
|
17
|
-
onClick: () =>
|
|
18
|
-
c(`/agents${o ? `?attachToVibe=${encodeURIComponent(o)}` : ""}`);
|
|
19
|
-
},
|
|
40
|
+
onClick: () => v(!0),
|
|
20
41
|
className: "inline-flex items-center gap-1.5 px-3 py-2 text-sm font-medium rounded-md bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg-hover transition-colors",
|
|
21
|
-
children: [
|
|
42
|
+
children: [m("vibeDetails.connectAnAgent", "Connect an agent to this vibe"), /* @__PURE__ */ d(s, { className: "w-4 h-4" })]
|
|
22
43
|
})
|
|
23
44
|
})
|
|
24
|
-
})
|
|
45
|
+
}), _ && /* @__PURE__ */ d("div", {
|
|
46
|
+
role: "dialog",
|
|
47
|
+
"aria-modal": "true",
|
|
48
|
+
"aria-labelledby": "vibe-attach-agent-title",
|
|
49
|
+
className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4",
|
|
50
|
+
onClick: (e) => {
|
|
51
|
+
e.target === e.currentTarget && v(!1);
|
|
52
|
+
},
|
|
53
|
+
children: /* @__PURE__ */ f("div", {
|
|
54
|
+
className: "w-full max-w-md rounded-lg bg-bg-elevated border border-border-default shadow-xl",
|
|
55
|
+
children: [
|
|
56
|
+
/* @__PURE__ */ f("div", {
|
|
57
|
+
className: "flex items-center justify-between px-5 py-4 border-b border-border-subtle",
|
|
58
|
+
children: [/* @__PURE__ */ d("h2", {
|
|
59
|
+
id: "vibe-attach-agent-title",
|
|
60
|
+
className: "text-base font-semibold text-text-primary",
|
|
61
|
+
children: m("vibeDetails.attachAgentTitle", "Attach an agent")
|
|
62
|
+
}), /* @__PURE__ */ d("button", {
|
|
63
|
+
type: "button",
|
|
64
|
+
onClick: () => v(!1),
|
|
65
|
+
className: "text-text-secondary hover:text-text-primary transition-colors",
|
|
66
|
+
"aria-label": m("common.close", "Close"),
|
|
67
|
+
children: "✕"
|
|
68
|
+
})]
|
|
69
|
+
}),
|
|
70
|
+
/* @__PURE__ */ f("div", {
|
|
71
|
+
className: "px-5 py-4 max-h-[60vh] overflow-y-auto",
|
|
72
|
+
children: [w && E.length === 0 ? /* @__PURE__ */ d("p", {
|
|
73
|
+
className: "text-sm text-text-secondary",
|
|
74
|
+
children: m("common.loading", "Loading…")
|
|
75
|
+
}) : E.length === 0 ? /* @__PURE__ */ f("div", {
|
|
76
|
+
className: "text-sm text-text-secondary space-y-3",
|
|
77
|
+
children: [/* @__PURE__ */ d("p", { children: m("vibeDetails.noWorkspaceAgents", "No agents in this workspace yet. Register one first, then attach it to this vibe.") }), /* @__PURE__ */ f("button", {
|
|
78
|
+
type: "button",
|
|
79
|
+
onClick: O,
|
|
80
|
+
className: "inline-flex items-center gap-1.5 px-3 py-2 text-sm font-medium rounded-md bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg-hover transition-colors",
|
|
81
|
+
children: [/* @__PURE__ */ d(c, { className: "w-4 h-4" }), m("vibeDetails.registerAgent", "Register an agent")]
|
|
82
|
+
})]
|
|
83
|
+
}) : /* @__PURE__ */ d("ul", {
|
|
84
|
+
className: "space-y-2",
|
|
85
|
+
children: E.map((e) => /* @__PURE__ */ d("li", { children: /* @__PURE__ */ f("button", {
|
|
86
|
+
type: "button",
|
|
87
|
+
onClick: () => D(e.id),
|
|
88
|
+
disabled: x !== null,
|
|
89
|
+
className: "w-full flex items-center justify-between gap-3 px-3 py-2.5 rounded-md border border-border-subtle hover:border-border-default hover:bg-action-ghost-bg-hover transition-colors text-left disabled:opacity-60",
|
|
90
|
+
children: [/* @__PURE__ */ f("span", {
|
|
91
|
+
className: "flex items-center gap-3 min-w-0",
|
|
92
|
+
children: [/* @__PURE__ */ d(l, { className: "w-4 h-4 text-text-secondary flex-shrink-0" }), /* @__PURE__ */ f("span", {
|
|
93
|
+
className: "min-w-0",
|
|
94
|
+
children: [/* @__PURE__ */ d("span", {
|
|
95
|
+
className: "block text-sm font-medium text-text-primary truncate",
|
|
96
|
+
children: e.name
|
|
97
|
+
}), /* @__PURE__ */ f("span", {
|
|
98
|
+
className: "block text-xs text-text-secondary truncate",
|
|
99
|
+
children: [
|
|
100
|
+
e.hostname || "—",
|
|
101
|
+
" ",
|
|
102
|
+
e.isActive ? `· ${m("agents.active", "Active")}` : `· ${m("agents.inactive", "Inactive")}`
|
|
103
|
+
]
|
|
104
|
+
})]
|
|
105
|
+
})]
|
|
106
|
+
}), /* @__PURE__ */ d("span", {
|
|
107
|
+
className: "text-xs text-text-tertiary",
|
|
108
|
+
children: x === e.id ? m("common.attaching", "Attaching…") : m("vibeDetails.attach", "Attach")
|
|
109
|
+
})]
|
|
110
|
+
}) }, e.id))
|
|
111
|
+
}), y && /* @__PURE__ */ d("p", {
|
|
112
|
+
className: "mt-3 text-sm text-status-error-text",
|
|
113
|
+
children: y
|
|
114
|
+
})]
|
|
115
|
+
}),
|
|
116
|
+
E.length > 0 && /* @__PURE__ */ f("div", {
|
|
117
|
+
className: "flex items-center justify-between px-5 py-3 border-t border-border-subtle",
|
|
118
|
+
children: [/* @__PURE__ */ f("button", {
|
|
119
|
+
type: "button",
|
|
120
|
+
onClick: O,
|
|
121
|
+
className: "text-xs text-text-secondary hover:text-text-primary inline-flex items-center gap-1",
|
|
122
|
+
children: [/* @__PURE__ */ d(c, { className: "w-3.5 h-3.5" }), m("vibeDetails.registerAgent", "Register a new agent")]
|
|
123
|
+
}), /* @__PURE__ */ d("button", {
|
|
124
|
+
type: "button",
|
|
125
|
+
onClick: () => v(!1),
|
|
126
|
+
className: "text-sm px-3 py-1.5 rounded-md border border-border-default text-text-primary hover:bg-action-ghost-bg-hover",
|
|
127
|
+
children: m("common.cancel", "Cancel")
|
|
128
|
+
})]
|
|
129
|
+
})
|
|
130
|
+
]
|
|
131
|
+
})
|
|
132
|
+
})] });
|
|
25
133
|
};
|
|
26
134
|
//#endregion
|
|
27
|
-
export {
|
|
135
|
+
export { p as VibeAgentEmptyState };
|
|
28
136
|
|
|
29
137
|
//# sourceMappingURL=VibeAgentEmptyState.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VibeAgentEmptyState.js","names":[],"sources":["../../../src/components/vibe/VibeAgentEmptyState.tsx"],"sourcesContent":["/**\n * VibeAgentEmptyState — shown on the Vibe details page when the vibe has no\n * agent attached. Tabs that depend on an agent (sessions, gitops, GraphQL\n * playground, git) are hidden, and the user is invited to attach an agent.\n *\n * The CTA deep-links to the agents page with `?attachToVibe=<vibeId>` so the\n * agents UI can offer a direct \"attach to this vibe\" affordance and bounce\n * the user back when done.\n */\nimport type { FC } from 'react';\nimport { Server, ArrowRight } from 'lucide-react';\nimport { EmptyState } from '@/components/shared';\nimport { useVibeNavigate } from '@/providers/VibeControlsProvider';\n\nexport interface VibeAgentEmptyStateProps {\n vibeId: string;\n tr: (key: string, fallback: string) => string;\n}\n\nexport const VibeAgentEmptyState: FC<VibeAgentEmptyStateProps> = ({ vibeId, tr }) => {\n const navigate = useVibeNavigate();\n\n const handleConnect = () => {\n const query = vibeId ? `?attachToVibe=${encodeURIComponent(vibeId)}` : '';\n navigate(`/agents${query}`);\n };\n\n return (\n <div className=\"rounded-lg border border-border-default bg-bg-surface\">\n <EmptyState\n icon={<Server className=\"w-8 h-8 text-text-secondary\" />}\n title={tr('vibeDetails.noAgentTitle', 'No agent attached')}\n description={tr(\n 'vibeDetails.noAgentDescription',\n 'This vibe is not attached to an agent yet. Sessions, GitOps, GraphQL playground, and git tooling all run through an agent — connect one to unlock those tabs.'\n )}\n action={\n <button\n type=\"button\"\n onClick={handleConnect}\n className=\"inline-flex items-center gap-1.5 px-3 py-2 text-sm font-medium rounded-md bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg-hover transition-colors\"\n >\n {tr('vibeDetails.connectAnAgent', 'Connect an agent to this vibe')}\n <ArrowRight className=\"w-4 h-4\" />\n </button>\n }\n />\n </div>\n );\n};\n"],"mappings":";;;;;;AAmBA,IAAa,KAAqD,EAAE,WAAQ,YAAS;CACnF,IAAM,IAAW,GAAiB;AAOlC,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD;GACE,MAAM,kBAAC,GAAD,EAAQ,WAAU,+BAAgC,CAAA;GACxD,OAAO,EAAG,4BAA4B,oBAAoB;GAC1D,aAAa,EACX,kCACA,gKACD;GACD,QACE,kBAAC,UAAD;IACE,MAAK;IACL,eAjBkB;AAE1B,OAAS,UADK,IAAS,iBAAiB,mBAAmB,EAAO,KAAK,KAC5C;;IAgBnB,WAAU;cAHZ,CAKG,EAAG,8BAA8B,gCAAgC,EAClE,kBAAC,GAAD,EAAY,WAAU,WAAY,CAAA,CAC3B;;GAEX,CAAA;EACE,CAAA"}
|
|
1
|
+
{"version":3,"file":"VibeAgentEmptyState.js","names":[],"sources":["../../../src/components/vibe/VibeAgentEmptyState.tsx"],"sourcesContent":["/**\n * VibeAgentEmptyState — shown on the Vibe details page when the vibe has no\n * agent attached. Tabs that depend on an agent (sessions, gitops, GraphQL\n * playground, git) are hidden, and the user is invited to attach an agent.\n *\n * UX: opens an in-place modal listing the workspace's existing agents so the\n * user can attach one without leaving the vibe detail page. Falls back to\n * navigating to the agents page only if no agents exist in the workspace\n * (so the user can register their first one).\n */\nimport { useCallback, useMemo, useState } from 'react';\nimport type { FC } from 'react';\nimport { ArrowRight, Plus, Server } from 'lucide-react';\nimport { EmptyState } from '@/components/shared';\nimport { useVibeNavigate } from '@/providers/VibeControlsProvider';\nimport {\n useListAgentsQuery,\n useAttachAgentToVibeMutation,\n type ListAgentsQuery,\n} from '@/generated/wspace-operations';\n\nexport interface VibeAgentEmptyStateProps {\n vibeId: string;\n tr: (key: string, fallback: string) => string;\n /** Optional: called after a successful attach so the parent can refetch. */\n onAttached?: () => void;\n}\n\nexport const VibeAgentEmptyState: FC<VibeAgentEmptyStateProps> = ({\n vibeId,\n tr,\n onAttached,\n}) => {\n const navigate = useVibeNavigate();\n const [open, setOpen] = useState(false);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const [busyAgentId, setBusyAgentId] = useState<string | null>(null);\n\n const { data, loading } = useListAgentsQuery({\n skip: !open,\n fetchPolicy: 'cache-and-network',\n });\n const [attach] = useAttachAgentToVibeMutation();\n\n const agents = useMemo<ListAgentsQuery['vibecontrolsAgents']>(\n () => data?.vibecontrolsAgents ?? [],\n [data]\n );\n\n const handleAttach = useCallback(\n async (agentId: string) => {\n setErrorMessage(null);\n setBusyAgentId(agentId);\n try {\n await attach({ variables: { input: { vibeId, agentId } } });\n setOpen(false);\n onAttached?.();\n } catch (err) {\n setErrorMessage(err instanceof Error ? err.message : String(err));\n } finally {\n setBusyAgentId(null);\n }\n },\n [attach, vibeId, onAttached]\n );\n\n const handleRegisterNew = useCallback(() => {\n // Deep-link to the agents page with vibeId so the agents UI can offer\n // a \"register and attach to this vibe\" affordance.\n const query = vibeId ? `?attachToVibe=${encodeURIComponent(vibeId)}` : '';\n navigate(`/agents${query}`);\n }, [navigate, vibeId]);\n\n return (\n <>\n <div className=\"rounded-lg border border-border-default bg-bg-surface\">\n <EmptyState\n icon={<Server className=\"w-8 h-8 text-text-secondary\" />}\n title={tr('vibeDetails.noAgentTitle', 'No agent attached')}\n description={tr(\n 'vibeDetails.noAgentDescription',\n 'This vibe is not attached to an agent yet. Sessions, GitOps, GraphQL playground, and git tooling all run through an agent — connect one to unlock those tabs.'\n )}\n action={\n <button\n type=\"button\"\n onClick={() => setOpen(true)}\n className=\"inline-flex items-center gap-1.5 px-3 py-2 text-sm font-medium rounded-md bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg-hover transition-colors\"\n >\n {tr('vibeDetails.connectAnAgent', 'Connect an agent to this vibe')}\n <ArrowRight className=\"w-4 h-4\" />\n </button>\n }\n />\n </div>\n\n {open && (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"vibe-attach-agent-title\"\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4\"\n onClick={(e) => {\n if (e.target === e.currentTarget) setOpen(false);\n }}\n >\n <div className=\"w-full max-w-md rounded-lg bg-bg-elevated border border-border-default shadow-xl\">\n <div className=\"flex items-center justify-between px-5 py-4 border-b border-border-subtle\">\n <h2\n id=\"vibe-attach-agent-title\"\n className=\"text-base font-semibold text-text-primary\"\n >\n {tr('vibeDetails.attachAgentTitle', 'Attach an agent')}\n </h2>\n <button\n type=\"button\"\n onClick={() => setOpen(false)}\n className=\"text-text-secondary hover:text-text-primary transition-colors\"\n aria-label={tr('common.close', 'Close')}\n >\n ✕\n </button>\n </div>\n\n <div className=\"px-5 py-4 max-h-[60vh] overflow-y-auto\">\n {loading && agents.length === 0 ? (\n <p className=\"text-sm text-text-secondary\">\n {tr('common.loading', 'Loading…')}\n </p>\n ) : agents.length === 0 ? (\n <div className=\"text-sm text-text-secondary space-y-3\">\n <p>\n {tr(\n 'vibeDetails.noWorkspaceAgents',\n 'No agents in this workspace yet. Register one first, then attach it to this vibe.'\n )}\n </p>\n <button\n type=\"button\"\n onClick={handleRegisterNew}\n className=\"inline-flex items-center gap-1.5 px-3 py-2 text-sm font-medium rounded-md bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg-hover transition-colors\"\n >\n <Plus className=\"w-4 h-4\" />\n {tr('vibeDetails.registerAgent', 'Register an agent')}\n </button>\n </div>\n ) : (\n <ul className=\"space-y-2\">\n {agents.map((a) => (\n <li key={a.id}>\n <button\n type=\"button\"\n onClick={() => handleAttach(a.id)}\n disabled={busyAgentId !== null}\n className=\"w-full flex items-center justify-between gap-3 px-3 py-2.5 rounded-md border border-border-subtle hover:border-border-default hover:bg-action-ghost-bg-hover transition-colors text-left disabled:opacity-60\"\n >\n <span className=\"flex items-center gap-3 min-w-0\">\n <Server className=\"w-4 h-4 text-text-secondary flex-shrink-0\" />\n <span className=\"min-w-0\">\n <span className=\"block text-sm font-medium text-text-primary truncate\">\n {a.name}\n </span>\n <span className=\"block text-xs text-text-secondary truncate\">\n {a.hostname || '—'}{' '}\n {a.isActive\n ? `· ${tr('agents.active', 'Active')}`\n : `· ${tr('agents.inactive', 'Inactive')}`}\n </span>\n </span>\n </span>\n <span className=\"text-xs text-text-tertiary\">\n {busyAgentId === a.id\n ? tr('common.attaching', 'Attaching…')\n : tr('vibeDetails.attach', 'Attach')}\n </span>\n </button>\n </li>\n ))}\n </ul>\n )}\n\n {errorMessage && (\n <p className=\"mt-3 text-sm text-status-error-text\">{errorMessage}</p>\n )}\n </div>\n\n {agents.length > 0 && (\n <div className=\"flex items-center justify-between px-5 py-3 border-t border-border-subtle\">\n <button\n type=\"button\"\n onClick={handleRegisterNew}\n className=\"text-xs text-text-secondary hover:text-text-primary inline-flex items-center gap-1\"\n >\n <Plus className=\"w-3.5 h-3.5\" />\n {tr('vibeDetails.registerAgent', 'Register a new agent')}\n </button>\n <button\n type=\"button\"\n onClick={() => setOpen(false)}\n className=\"text-sm px-3 py-1.5 rounded-md border border-border-default text-text-primary hover:bg-action-ghost-bg-hover\"\n >\n {tr('common.cancel', 'Cancel')}\n </button>\n </div>\n )}\n </div>\n </div>\n )}\n </>\n );\n};\n"],"mappings":";;;;;;;;AA4BA,IAAa,KAAqD,EAChE,WACA,OACA,oBACI;CACJ,IAAM,IAAW,GAAiB,EAC5B,CAAC,GAAM,KAAW,EAAS,GAAM,EACjC,CAAC,GAAc,KAAmB,EAAwB,KAAK,EAC/D,CAAC,GAAa,KAAkB,EAAwB,KAAK,EAE7D,EAAE,SAAM,eAAY,EAAmB;EAC3C,MAAM,CAAC;EACP,aAAa;EACd,CAAC,EACI,CAAC,KAAU,GAA8B,EAEzC,IAAS,QACP,GAAM,sBAAsB,EAAE,EACpC,CAAC,EAAK,CACP,EAEK,IAAe,EACnB,OAAO,MAAoB;AAEzB,EADA,EAAgB,KAAK,EACrB,EAAe,EAAQ;AACvB,MAAI;AAGF,GAFA,MAAM,EAAO,EAAE,WAAW,EAAE,OAAO;IAAE;IAAQ;IAAS,EAAE,EAAE,CAAC,EAC3D,EAAQ,GAAM,EACd,KAAc;WACP,GAAK;AACZ,KAAgB,aAAe,QAAQ,EAAI,UAAU,OAAO,EAAI,CAAC;YACzD;AACR,KAAe,KAAK;;IAGxB;EAAC;EAAQ;EAAQ;EAAW,CAC7B,EAEK,IAAoB,QAAkB;AAI1C,IAAS,UADK,IAAS,iBAAiB,mBAAmB,EAAO,KAAK,KAC5C;IAC1B,CAAC,GAAU,EAAO,CAAC;AAEtB,QACE,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD;GACE,MAAM,kBAAC,GAAD,EAAQ,WAAU,+BAAgC,CAAA;GACxD,OAAO,EAAG,4BAA4B,oBAAoB;GAC1D,aAAa,EACX,kCACA,gKACD;GACD,QACE,kBAAC,UAAD;IACE,MAAK;IACL,eAAe,EAAQ,GAAK;IAC5B,WAAU;cAHZ,CAKG,EAAG,8BAA8B,gCAAgC,EAClE,kBAAC,GAAD,EAAY,WAAU,WAAY,CAAA,CAC3B;;GAEX,CAAA;EACE,CAAA,EAEL,KACC,kBAAC,OAAD;EACE,MAAK;EACL,cAAW;EACX,mBAAgB;EAChB,WAAU;EACV,UAAU,MAAM;AACd,GAAI,EAAE,WAAW,EAAE,iBAAe,EAAQ,GAAM;;YAGlD,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,MAAD;MACE,IAAG;MACH,WAAU;gBAET,EAAG,gCAAgC,kBAAkB;MACnD,CAAA,EACL,kBAAC,UAAD;MACE,MAAK;MACL,eAAe,EAAQ,GAAM;MAC7B,WAAU;MACV,cAAY,EAAG,gBAAgB,QAAQ;gBACxC;MAEQ,CAAA,CACL;;IAEN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACG,KAAW,EAAO,WAAW,IAC5B,kBAAC,KAAD;MAAG,WAAU;gBACV,EAAG,kBAAkB,WAAW;MAC/B,CAAA,GACF,EAAO,WAAW,IACpB,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,KAAD,EAAA,UACG,EACC,iCACA,oFACD,EACC,CAAA,EACJ,kBAAC,UAAD;OACE,MAAK;OACL,SAAS;OACT,WAAU;iBAHZ,CAKE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAC3B,EAAG,6BAA6B,oBAAoB,CAC9C;SACL;UAEN,kBAAC,MAAD;MAAI,WAAU;gBACX,EAAO,KAAK,MACX,kBAAC,MAAD,EAAA,UACE,kBAAC,UAAD;OACE,MAAK;OACL,eAAe,EAAa,EAAE,GAAG;OACjC,UAAU,MAAgB;OAC1B,WAAU;iBAJZ,CAME,kBAAC,QAAD;QAAM,WAAU;kBAAhB,CACE,kBAAC,GAAD,EAAQ,WAAU,6CAA8C,CAAA,EAChE,kBAAC,QAAD;SAAM,WAAU;mBAAhB,CACE,kBAAC,QAAD;UAAM,WAAU;oBACb,EAAE;UACE,CAAA,EACP,kBAAC,QAAD;UAAM,WAAU;oBAAhB;WACG,EAAE,YAAY;WAAK;WACnB,EAAE,WACC,KAAK,EAAG,iBAAiB,SAAS,KAClC,KAAK,EAAG,mBAAmB,WAAW;WACrC;YACF;WACF;WACP,kBAAC,QAAD;QAAM,WAAU;kBACb,MAAgB,EAAE,KACf,EAAG,oBAAoB,aAAa,GACpC,EAAG,sBAAsB,SAAS;QACjC,CAAA,CACA;UACN,EA3BI,EAAE,GA2BN,CACL;MACC,CAAA,EAGN,KACC,kBAAC,KAAD;MAAG,WAAU;gBAAuC;MAAiB,CAAA,CAEnE;;IAEL,EAAO,SAAS,KACf,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,UAAD;MACE,MAAK;MACL,SAAS;MACT,WAAU;gBAHZ,CAKE,kBAAC,GAAD,EAAM,WAAU,eAAgB,CAAA,EAC/B,EAAG,6BAA6B,uBAAuB,CACjD;SACT,kBAAC,UAAD;MACE,MAAK;MACL,eAAe,EAAQ,GAAM;MAC7B,WAAU;gBAET,EAAG,iBAAiB,SAAS;MACvB,CAAA,CACL;;IAEJ;;EACF,CAAA,CAEP,EAAA,CAAA"}
|