@burdenoff/microfe-conversations 2026.624.1 → 2026.625.1
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/conversations/components/InboxLayout.js +6 -6
- package/dist/conversations/pages/AdminConversationsLandingPage.js +53 -45
- package/dist/conversations/pages/AdminConversationsLandingPage.js.map +1 -1
- package/dist/conversations/pages/ConversationAdminPages.js +174 -150
- package/dist/conversations/pages/ConversationAdminPages.js.map +1 -1
- package/dist/conversations/pages/ConversationDetailPage.js +3 -3
- package/dist/conversations/pages/ConversationDetailPage.js.map +1 -1
- package/dist/conversations/pages/ConversationsSettingsPage.js +87 -83
- package/dist/conversations/pages/ConversationsSettingsPage.js.map +1 -1
- package/package.json +2 -2
|
@@ -6,8 +6,8 @@ import { useCallback as i, useMemo as a } from "react";
|
|
|
6
6
|
import { ArrowLeft as o, MessageSquarePlus as s, Search as c, X as l } from "lucide-react";
|
|
7
7
|
import { useLocation as u, useNavigate as d, useParams as f } from "react-router-dom";
|
|
8
8
|
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
9
|
+
import { Button as h } from "@burdenoff/fe-libs/ui";
|
|
10
|
+
import { Tabs as g } from "@burdenoff/fe-libs/chrome";
|
|
11
11
|
//#region src/conversations/components/InboxLayout.tsx
|
|
12
12
|
function _({ activeTab: _, onTabChange: y, archivedEnabled: b = !0, searchQuery: x, onSearchChange: S, filterChips: C, listSlot: w, detailSlot: T, emptyDetailSlot: E }) {
|
|
13
13
|
let D = d(), O = t(), { basePath: k } = e(), { setActiveConversationId: A } = r(), j = f(), M = u(), N = !!j.conversationId && !!T, P = a(() => {
|
|
@@ -62,7 +62,7 @@ function _({ activeTab: _, onTabChange: y, archivedEnabled: b = !0, searchQuery:
|
|
|
62
62
|
children: [/* @__PURE__ */ p("h1", {
|
|
63
63
|
className: "text-base font-semibold text-text-primary",
|
|
64
64
|
children: O("conversations.title", "Conversations")
|
|
65
|
-
}), /* @__PURE__ */ m(
|
|
65
|
+
}), /* @__PURE__ */ m(h, {
|
|
66
66
|
"data-tour": "conversation-new-button",
|
|
67
67
|
type: "button",
|
|
68
68
|
size: "sm",
|
|
@@ -102,7 +102,7 @@ function _({ activeTab: _, onTabChange: y, archivedEnabled: b = !0, searchQuery:
|
|
|
102
102
|
}),
|
|
103
103
|
/* @__PURE__ */ p("div", {
|
|
104
104
|
"data-tour": "conversations-tabs",
|
|
105
|
-
children: /* @__PURE__ */ p(
|
|
105
|
+
children: /* @__PURE__ */ p(g, {
|
|
106
106
|
items: P,
|
|
107
107
|
activeTabId: _,
|
|
108
108
|
onTabChange: (e) => y(e),
|
|
@@ -132,7 +132,7 @@ function _({ activeTab: _, onTabChange: y, archivedEnabled: b = !0, searchQuery:
|
|
|
132
132
|
className: n("flex flex-col min-h-0 flex-1 min-w-0 bg-bg-surface", N ? "flex" : "hidden md:flex"),
|
|
133
133
|
children: [N && /* @__PURE__ */ p("div", {
|
|
134
134
|
className: "md:hidden border-b border-border-subtle px-3 py-2",
|
|
135
|
-
children: /* @__PURE__ */ m(
|
|
135
|
+
children: /* @__PURE__ */ m(h, {
|
|
136
136
|
variant: "ghost",
|
|
137
137
|
size: "sm",
|
|
138
138
|
onClick: I,
|
|
@@ -173,7 +173,7 @@ function v({ title: e, description: t, newLabel: n, onNew: r }) {
|
|
|
173
173
|
className: "text-sm text-text-secondary",
|
|
174
174
|
children: t
|
|
175
175
|
}),
|
|
176
|
-
/* @__PURE__ */ m(
|
|
176
|
+
/* @__PURE__ */ m(h, {
|
|
177
177
|
type: "button",
|
|
178
178
|
onClick: r,
|
|
179
179
|
className: "mt-2",
|
|
@@ -3,8 +3,9 @@ import { useMemo as t } from "react";
|
|
|
3
3
|
import { Activity as n, ChevronRight as r, ListChecks as i, MessageCircle as a, Package as o, ShieldCheck as s } from "lucide-react";
|
|
4
4
|
import { Link as c } from "react-router-dom";
|
|
5
5
|
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
6
|
+
import { EmphasisPanel as d, GlassCard as f } from "@burdenoff/fe-libs/ui";
|
|
6
7
|
//#region src/conversations/pages/AdminConversationsLandingPage.tsx
|
|
7
|
-
var
|
|
8
|
+
var p = [
|
|
8
9
|
{
|
|
9
10
|
id: "moderation",
|
|
10
11
|
labelKey: "conversations.admin.moderation",
|
|
@@ -54,64 +55,71 @@ var d = [
|
|
|
54
55
|
})
|
|
55
56
|
}
|
|
56
57
|
];
|
|
57
|
-
function
|
|
58
|
-
let n = e(), i = t(() =>
|
|
58
|
+
function m() {
|
|
59
|
+
let n = e(), i = t(() => p.map((e) => ({
|
|
59
60
|
...e,
|
|
60
61
|
label: n(e.labelKey, e.labelFallback),
|
|
61
62
|
description: n(e.descriptionKey, e.descriptionFallback)
|
|
62
63
|
})), [n]);
|
|
63
|
-
return /* @__PURE__ */
|
|
64
|
+
return /* @__PURE__ */ l("div", {
|
|
64
65
|
className: "flex flex-col h-full",
|
|
65
|
-
children:
|
|
66
|
-
className: "
|
|
66
|
+
children: /* @__PURE__ */ l("div", {
|
|
67
|
+
className: "flex-1 min-h-0 overflow-auto p-4 sm:p-6",
|
|
67
68
|
children: /* @__PURE__ */ u("div", {
|
|
68
|
-
className: "
|
|
69
|
-
children: [/* @__PURE__ */ l("div", {
|
|
70
|
-
className: "
|
|
71
|
-
children: /* @__PURE__ */ l(a, {
|
|
72
|
-
className: "size-5 text-text-secondary",
|
|
73
|
-
"aria-hidden": "true"
|
|
74
|
-
})
|
|
75
|
-
}), /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("h1", {
|
|
76
|
-
className: "text-lg font-semibold text-text-primary",
|
|
77
|
-
children: n("conversations.admin.landingTitle", "Conversations admin")
|
|
78
|
-
}), /* @__PURE__ */ l("p", {
|
|
79
|
-
className: "text-sm text-text-secondary",
|
|
80
|
-
children: n("conversations.admin.landingDescription", "Governance tools for workspace conversations. Select a section below to continue.")
|
|
81
|
-
})] })]
|
|
82
|
-
})
|
|
83
|
-
}), /* @__PURE__ */ l("div", {
|
|
84
|
-
className: "flex-1 min-h-0 overflow-auto p-6",
|
|
85
|
-
children: /* @__PURE__ */ l("div", {
|
|
86
|
-
className: "grid gap-3 sm:grid-cols-2 max-w-3xl",
|
|
87
|
-
children: i.map((e) => /* @__PURE__ */ u(c, {
|
|
88
|
-
to: e.path,
|
|
89
|
-
className: "group flex items-start gap-3 rounded-lg border border-border-subtle bg-bg-surface p-4 transition-colors hover:border-border-subtle hover:bg-accent",
|
|
69
|
+
className: "mx-auto w-full max-w-3xl space-y-6",
|
|
70
|
+
children: [/* @__PURE__ */ l(d, { children: /* @__PURE__ */ u("div", {
|
|
71
|
+
className: "flex items-start gap-3",
|
|
90
72
|
children: [/* @__PURE__ */ l("div", {
|
|
91
|
-
className: "p-2 rounded-
|
|
92
|
-
children:
|
|
73
|
+
className: "p-2 rounded-lg bg-gloss-card text-text-secondary border border-border-seam",
|
|
74
|
+
children: /* @__PURE__ */ l(a, {
|
|
75
|
+
className: "size-5",
|
|
76
|
+
"aria-hidden": "true"
|
|
77
|
+
})
|
|
93
78
|
}), /* @__PURE__ */ u("div", {
|
|
94
|
-
className: "
|
|
95
|
-
children: [/* @__PURE__ */
|
|
96
|
-
className: "
|
|
97
|
-
children:
|
|
98
|
-
className: "text-sm font-medium text-text-primary",
|
|
99
|
-
children: e.label
|
|
100
|
-
}), /* @__PURE__ */ l(r, {
|
|
101
|
-
className: "size-4 text-text-secondary",
|
|
102
|
-
"aria-hidden": "true"
|
|
103
|
-
})]
|
|
79
|
+
className: "min-w-0",
|
|
80
|
+
children: [/* @__PURE__ */ l("h1", {
|
|
81
|
+
className: "text-lg font-semibold text-text-primary",
|
|
82
|
+
children: n("conversations.admin.landingTitle", "Conversations admin")
|
|
104
83
|
}), /* @__PURE__ */ l("p", {
|
|
105
|
-
className: "mt-1 text-
|
|
106
|
-
children:
|
|
84
|
+
className: "mt-1 text-sm text-text-secondary",
|
|
85
|
+
children: n("conversations.admin.landingDescription", "Governance tools for workspace conversations. Select a section below to continue.")
|
|
107
86
|
})]
|
|
108
87
|
})]
|
|
109
|
-
},
|
|
88
|
+
}) }), /* @__PURE__ */ l("div", {
|
|
89
|
+
className: "grid gap-3 sm:grid-cols-2",
|
|
90
|
+
children: i.map((e) => /* @__PURE__ */ l(c, {
|
|
91
|
+
to: e.path,
|
|
92
|
+
className: "group rounded-xl focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]",
|
|
93
|
+
children: /* @__PURE__ */ u(f, {
|
|
94
|
+
treatment: "glass",
|
|
95
|
+
className: "flex items-start gap-3 border-border-seam p-4 shadow-[var(--shadow-pop)]",
|
|
96
|
+
children: [/* @__PURE__ */ l("div", {
|
|
97
|
+
className: "p-2 rounded-md bg-bg-sunken text-text-secondary group-hover:text-text-primary",
|
|
98
|
+
children: e.icon
|
|
99
|
+
}), /* @__PURE__ */ u("div", {
|
|
100
|
+
className: "flex-1 min-w-0",
|
|
101
|
+
children: [/* @__PURE__ */ u("div", {
|
|
102
|
+
className: "flex items-center justify-between gap-2",
|
|
103
|
+
children: [/* @__PURE__ */ l("span", {
|
|
104
|
+
className: "text-sm font-medium text-text-primary",
|
|
105
|
+
children: e.label
|
|
106
|
+
}), /* @__PURE__ */ l(r, {
|
|
107
|
+
className: "size-4 text-text-secondary",
|
|
108
|
+
"aria-hidden": "true"
|
|
109
|
+
})]
|
|
110
|
+
}), /* @__PURE__ */ l("p", {
|
|
111
|
+
className: "mt-1 text-xs text-text-secondary",
|
|
112
|
+
children: e.description
|
|
113
|
+
})]
|
|
114
|
+
})]
|
|
115
|
+
})
|
|
116
|
+
}, e.id))
|
|
117
|
+
})]
|
|
110
118
|
})
|
|
111
|
-
})
|
|
119
|
+
})
|
|
112
120
|
});
|
|
113
121
|
}
|
|
114
122
|
//#endregion
|
|
115
|
-
export {
|
|
123
|
+
export { m as AdminConversationsLandingPage };
|
|
116
124
|
|
|
117
125
|
//# sourceMappingURL=AdminConversationsLandingPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminConversationsLandingPage.js","names":[],"sources":["../../../src/conversations/pages/AdminConversationsLandingPage.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { useMemo } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport {\n MessageCircle,\n ShieldCheck,\n ListChecks,\n Activity,\n Package,\n ChevronRight,\n} from \"lucide-react\";\nimport { useTr } from \"../utils/i18n\";\n\ninterface AdminSectionDefinition {\n id: string;\n /** i18n key used for the card label */\n labelKey: string;\n /** English fallback rendered when the i18n key is not resolved */\n labelFallback: string;\n /** i18n key used for the card description */\n descriptionKey: string;\n /** English fallback for the description */\n descriptionFallback: string;\n /** Route path relative to the admin basePath */\n path: string;\n icon: ReactNode;\n}\n\n// Module-scoped section catalogue. The icon JSX is stable (purely presentational,\n// no context or dynamic props) so constructing once at parse time avoids rebuilding\n// four lucide nodes on every render. If icons ever need to respond to context\n// (theme, RBAC), move the icon field into the useMemo mapper below.\nconst SECTION_DEFINITIONS: AdminSectionDefinition[] = [\n {\n id: \"moderation\",\n labelKey: \"conversations.admin.moderation\",\n labelFallback: \"Moderation\",\n descriptionKey: \"conversations.admin.moderationDescription\",\n descriptionFallback:\n \"Reported and flagged messages, moderation actions, and reviewer assignments.\",\n path: \"moderation\",\n icon: <ShieldCheck className=\"size-5\" aria-hidden=\"true\" />,\n },\n {\n id: \"bulk\",\n labelKey: \"conversations.admin.bulkOperations\",\n labelFallback: \"Bulk Operations\",\n descriptionKey: \"conversations.admin.bulkOperationsDescription\",\n descriptionFallback:\n \"Bulk archive / unarchive, participant edits, and cross-conversation actions.\",\n path: \"bulk\",\n icon: <ListChecks className=\"size-5\" aria-hidden=\"true\" />,\n },\n {\n id: \"audit\",\n labelKey: \"conversations.admin.auditLog\",\n labelFallback: \"Audit Log\",\n descriptionKey: \"conversations.admin.auditLogDescription\",\n descriptionFallback:\n \"Activity stream for admin / moderator actions on workspace conversations.\",\n path: \"audit\",\n icon: <Activity className=\"size-5\" aria-hidden=\"true\" />,\n },\n {\n id: \"apps\",\n labelKey: \"conversations.admin.appInstallations\",\n labelFallback: \"App Installations\",\n descriptionKey: \"conversations.admin.appInstallationsDescription\",\n descriptionFallback:\n \"Install, configure, and remove conversation apps and integrations.\",\n path: \"apps\",\n icon: <Package className=\"size-5\" aria-hidden=\"true\" />,\n },\n];\n\n/**\n * Admin-facing landing page for the Conversations microfrontend.\n *\n * Lightweight overview + section directory. Each card links to its canonical\n * sub-route (`/moderation`, `/bulk`, `/audit`, `/apps`) for the API-backed\n * admin surfaces.\n */\nexport function AdminConversationsLandingPage() {\n const tr = useTr();\n\n const sections = useMemo(\n () =>\n SECTION_DEFINITIONS.map((section) => ({\n ...section,\n label: tr(section.labelKey, section.labelFallback),\n description: tr(section.descriptionKey, section.descriptionFallback),\n })),\n [tr],\n );\n\n return (\n <div className=\"flex flex-col h-full\">\n <div className=\"
|
|
1
|
+
{"version":3,"file":"AdminConversationsLandingPage.js","names":[],"sources":["../../../src/conversations/pages/AdminConversationsLandingPage.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { useMemo } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport {\n MessageCircle,\n ShieldCheck,\n ListChecks,\n Activity,\n Package,\n ChevronRight,\n} from \"lucide-react\";\nimport { GlassCard, EmphasisPanel } from \"@burdenoff/fe-libs/ui\";\nimport { useTr } from \"../utils/i18n\";\n\ninterface AdminSectionDefinition {\n id: string;\n /** i18n key used for the card label */\n labelKey: string;\n /** English fallback rendered when the i18n key is not resolved */\n labelFallback: string;\n /** i18n key used for the card description */\n descriptionKey: string;\n /** English fallback for the description */\n descriptionFallback: string;\n /** Route path relative to the admin basePath */\n path: string;\n icon: ReactNode;\n}\n\n// Module-scoped section catalogue. The icon JSX is stable (purely presentational,\n// no context or dynamic props) so constructing once at parse time avoids rebuilding\n// four lucide nodes on every render. If icons ever need to respond to context\n// (theme, RBAC), move the icon field into the useMemo mapper below.\nconst SECTION_DEFINITIONS: AdminSectionDefinition[] = [\n {\n id: \"moderation\",\n labelKey: \"conversations.admin.moderation\",\n labelFallback: \"Moderation\",\n descriptionKey: \"conversations.admin.moderationDescription\",\n descriptionFallback:\n \"Reported and flagged messages, moderation actions, and reviewer assignments.\",\n path: \"moderation\",\n icon: <ShieldCheck className=\"size-5\" aria-hidden=\"true\" />,\n },\n {\n id: \"bulk\",\n labelKey: \"conversations.admin.bulkOperations\",\n labelFallback: \"Bulk Operations\",\n descriptionKey: \"conversations.admin.bulkOperationsDescription\",\n descriptionFallback:\n \"Bulk archive / unarchive, participant edits, and cross-conversation actions.\",\n path: \"bulk\",\n icon: <ListChecks className=\"size-5\" aria-hidden=\"true\" />,\n },\n {\n id: \"audit\",\n labelKey: \"conversations.admin.auditLog\",\n labelFallback: \"Audit Log\",\n descriptionKey: \"conversations.admin.auditLogDescription\",\n descriptionFallback:\n \"Activity stream for admin / moderator actions on workspace conversations.\",\n path: \"audit\",\n icon: <Activity className=\"size-5\" aria-hidden=\"true\" />,\n },\n {\n id: \"apps\",\n labelKey: \"conversations.admin.appInstallations\",\n labelFallback: \"App Installations\",\n descriptionKey: \"conversations.admin.appInstallationsDescription\",\n descriptionFallback:\n \"Install, configure, and remove conversation apps and integrations.\",\n path: \"apps\",\n icon: <Package className=\"size-5\" aria-hidden=\"true\" />,\n },\n];\n\n/**\n * Admin-facing landing page for the Conversations microfrontend.\n *\n * Lightweight overview + section directory. Each card links to its canonical\n * sub-route (`/moderation`, `/bulk`, `/audit`, `/apps`) for the API-backed\n * admin surfaces.\n */\nexport function AdminConversationsLandingPage() {\n const tr = useTr();\n\n const sections = useMemo(\n () =>\n SECTION_DEFINITIONS.map((section) => ({\n ...section,\n label: tr(section.labelKey, section.labelFallback),\n description: tr(section.descriptionKey, section.descriptionFallback),\n })),\n [tr],\n );\n\n return (\n <div className=\"flex flex-col h-full\">\n <div className=\"flex-1 min-h-0 overflow-auto p-4 sm:p-6\">\n <div className=\"mx-auto w-full max-w-3xl space-y-6\">\n {/* Hero / summary zone — the single emphasis panel on this page. */}\n <EmphasisPanel>\n <div className=\"flex items-start gap-3\">\n <div className=\"p-2 rounded-lg bg-gloss-card text-text-secondary border border-border-seam\">\n <MessageCircle className=\"size-5\" aria-hidden=\"true\" />\n </div>\n <div className=\"min-w-0\">\n <h1 className=\"text-lg font-semibold text-text-primary\">\n {tr(\n \"conversations.admin.landingTitle\",\n \"Conversations admin\",\n )}\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {tr(\n \"conversations.admin.landingDescription\",\n \"Governance tools for workspace conversations. Select a section below to continue.\",\n )}\n </p>\n </div>\n </div>\n </EmphasisPanel>\n\n <div className=\"grid gap-3 sm:grid-cols-2\">\n {sections.map((section) => (\n <Link\n key={section.id}\n to={section.path}\n className=\"group rounded-xl focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n <GlassCard\n treatment=\"glass\"\n className=\"flex items-start gap-3 border-border-seam p-4 shadow-[var(--shadow-pop)]\"\n >\n <div className=\"p-2 rounded-md bg-bg-sunken text-text-secondary group-hover:text-text-primary\">\n {section.icon}\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-sm font-medium text-text-primary\">\n {section.label}\n </span>\n <ChevronRight\n className=\"size-4 text-text-secondary\"\n aria-hidden=\"true\"\n />\n </div>\n <p className=\"mt-1 text-xs text-text-secondary\">\n {section.description}\n </p>\n </div>\n </GlassCard>\n </Link>\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;AAiCA,IAAM,IAAgD;CACpD;EACE,IAAI;EACJ,UAAU;EACV,eAAe;EACf,gBAAgB;EAChB,qBACE;EACF,MAAM;EACN,MAAM,kBAAC,GAAD;GAAa,WAAU;GAAS,eAAY;GAAS,CAAA;EAC5D;CACD;EACE,IAAI;EACJ,UAAU;EACV,eAAe;EACf,gBAAgB;EAChB,qBACE;EACF,MAAM;EACN,MAAM,kBAAC,GAAD;GAAY,WAAU;GAAS,eAAY;GAAS,CAAA;EAC3D;CACD;EACE,IAAI;EACJ,UAAU;EACV,eAAe;EACf,gBAAgB;EAChB,qBACE;EACF,MAAM;EACN,MAAM,kBAAC,GAAD;GAAU,WAAU;GAAS,eAAY;GAAS,CAAA;EACzD;CACD;EACE,IAAI;EACJ,UAAU;EACV,eAAe;EACf,gBAAgB;EAChB,qBACE;EACF,MAAM;EACN,MAAM,kBAAC,GAAD;GAAS,WAAU;GAAS,eAAY;GAAS,CAAA;EACxD;CACF;AASD,SAAgB,IAAgC;CAC9C,IAAM,IAAK,GAAO,EAEZ,IAAW,QAEb,EAAoB,KAAK,OAAa;EACpC,GAAG;EACH,OAAO,EAAG,EAAQ,UAAU,EAAQ,cAAc;EAClD,aAAa,EAAG,EAAQ,gBAAgB,EAAQ,oBAAoB;EACrE,EAAE,EACL,CAAC,EAAG,CACL;AAED,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD;IAAK,WAAU;cAAf,CAEE,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,GAAD;OAAe,WAAU;OAAS,eAAY;OAAS,CAAA;MACnD,CAAA,EACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,MAAD;OAAI,WAAU;iBACX,EACC,oCACA,sBACD;OACE,CAAA,EACL,kBAAC,KAAD;OAAG,WAAU;iBACV,EACC,0CACA,oFACD;OACC,CAAA,CACA;QACF;QACQ,CAAA,EAEhB,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAS,KAAK,MACb,kBAAC,GAAD;MAEE,IAAI,EAAQ;MACZ,WAAU;gBAEV,kBAAC,GAAD;OACE,WAAU;OACV,WAAU;iBAFZ,CAIE,kBAAC,OAAD;QAAK,WAAU;kBACZ,EAAQ;QACL,CAAA,EACN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,QAAD;UAAM,WAAU;oBACb,EAAQ;UACJ,CAAA,EACP,kBAAC,GAAD;UACE,WAAU;UACV,eAAY;UACZ,CAAA,CACE;YACN,kBAAC,KAAD;SAAG,WAAU;mBACV,EAAQ;SACP,CAAA,CACA;UACI;;MACP,EA1BA,EAAQ,GA0BR,CACP;KACE,CAAA,CACF;;GACF,CAAA;EACF,CAAA"}
|