@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.
@@ -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 { Tabs as h } from "@burdenoff/fe-libs/chrome";
10
- import { Button as g } from "@burdenoff/fe-libs/ui";
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(g, {
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(h, {
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(g, {
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(g, {
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 d = [
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 f() {
58
- let n = e(), i = t(() => d.map((e) => ({
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__ */ u("div", {
64
+ return /* @__PURE__ */ l("div", {
64
65
  className: "flex flex-col h-full",
65
- children: [/* @__PURE__ */ l("div", {
66
- className: "border-b border-border-subtle px-6 py-4",
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: "flex items-center gap-3",
69
- children: [/* @__PURE__ */ l("div", {
70
- className: "p-2 rounded-md bg-bg-sunken",
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-md bg-bg-sunken text-text-secondary group-hover:text-text-primary",
92
- children: e.icon
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: "flex-1 min-w-0",
95
- children: [/* @__PURE__ */ u("div", {
96
- className: "flex items-center justify-between gap-2",
97
- children: [/* @__PURE__ */ l("span", {
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-xs text-text-secondary",
106
- children: e.description
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
- }, e.id))
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 { f as AdminConversationsLandingPage };
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=\"border-b border-border-subtle px-6 py-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"p-2 rounded-md bg-bg-sunken\">\n <MessageCircle\n className=\"size-5 text-text-secondary\"\n aria-hidden=\"true\"\n />\n </div>\n <div>\n <h1 className=\"text-lg font-semibold text-text-primary\">\n {tr(\"conversations.admin.landingTitle\", \"Conversations admin\")}\n </h1>\n <p className=\"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 </div>\n <div className=\"flex-1 min-h-0 overflow-auto p-6\">\n <div className=\"grid gap-3 sm:grid-cols-2 max-w-3xl\">\n {sections.map((section) => (\n <Link\n key={section.id}\n to={section.path}\n 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\"\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 </Link>\n ))}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;AAgCA,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;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,GAAD;MACE,WAAU;MACV,eAAY;MACZ,CAAA;KACE,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;KAAI,WAAU;eACX,EAAG,oCAAoC,sBAAsB;KAC3D,CAAA,EACL,kBAAC,KAAD;KAAG,WAAU;eACV,EACC,0CACA,oFACD;KACC,CAAA,CACA,EAAA,CAAA,CACF;;GACF,CAAA,EACN,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAS,KAAK,MACb,kBAAC,GAAD;KAEE,IAAI,EAAQ;KACZ,WAAU;eAHZ,CAKE,kBAAC,OAAD;MAAK,WAAU;gBACZ,EAAQ;MACL,CAAA,EACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBACb,EAAQ;QACJ,CAAA,EACP,kBAAC,GAAD;QACE,WAAU;QACV,eAAY;QACZ,CAAA,CACE;UACN,kBAAC,KAAD;OAAG,WAAU;iBACV,EAAQ;OACP,CAAA,CACA;QACD;OArBA,EAAQ,GAqBR,CACP;IACE,CAAA;GACF,CAAA,CACF"}
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"}