@burdenoff/microfe-botmanor 2026.813.1 → 2026.819.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.
@@ -1,88 +1,72 @@
1
1
  import { useBotlit as e } from "../providers/BotlitProvider.js";
2
2
  import { useBots as t } from "../hooks/useBots.js";
3
3
  import { useAgents as n } from "../hooks/useAgents.js";
4
- import { useConversations as r } from "../hooks/useConversations.js";
5
- import { formatNumber as i, formatRelativeTime as a } from "../utils/formatters.js";
6
- import { PageLayout as o } from "../components/PageLayout.js";
7
- import { Card as s, CardContent as c, CardHeader as l, CardTitle as u } from "../components/Card.js";
8
- import { Button as d } from "../components/Button.js";
9
- import { StatusBadge as f } from "../components/Badge.js";
10
- import { GlassCard as p, GradientText as m, PagePurpose as h } from "@burdenoff/fe-libs/ui";
11
- import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
12
- import { Link as y } from "react-router";
13
- import { AppWindow as b, ArrowRight as x, BookOpen as S, Bot as C, Clock as w, MessageSquare as T, Plus as E, Zap as D } from "lucide-react";
14
- import { useI18n as O } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
4
+ import { formatNumber as r } from "../utils/formatters.js";
5
+ import { PageLayout as i } from "../components/PageLayout.js";
6
+ import { Card as a, CardContent as o, CardHeader as s, CardTitle as c } from "../components/Card.js";
7
+ import { Button as l } from "../components/Button.js";
8
+ import { StatusBadge as u } from "../components/Badge.js";
9
+ import { GlassCard as d, GradientText as f, PagePurpose as p } from "@burdenoff/fe-libs/ui";
10
+ import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
11
+ import { Link as _ } from "react-router";
12
+ import { AppWindow as v, ArrowRight as y, BookOpen as b, Bot as x, Plus as S, Zap as C } from "lucide-react";
13
+ import { useI18n as w } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
15
14
  //#region src/botlit/pages/DashboardPage.tsx
16
- var k = () => {
17
- let { t: k } = O(), A = (e, t) => {
18
- let n = k(e);
15
+ var T = () => {
16
+ let { t: T } = w(), E = (e, t) => {
17
+ let n = T(e);
19
18
  return n === e ? t : n;
20
- }, { currentUser: j, navigateTo: M, getPath: N } = e(), { data: P, loading: F } = t(), { data: I, loading: L } = n(), { data: R, loading: z } = r(), B = [
21
- {
22
- label: A("botlit.dashboard.stats.totalBots", "Total Bots"),
23
- value: P?.length || 0,
24
- icon: /* @__PURE__ */ _(b, { className: "h-5 w-5" }),
25
- hero: !0
26
- },
27
- {
28
- label: A("botlit.dashboard.stats.activeAgents", "Active Agents"),
29
- value: I?.filter((e) => e.status === "ACTIVE").length || 0,
30
- icon: /* @__PURE__ */ _(C, { className: "h-5 w-5" }),
31
- hero: !1
32
- },
33
- {
34
- label: A("botlit.dashboard.stats.conversations", "Conversations"),
35
- value: R?.length || 0,
36
- icon: /* @__PURE__ */ _(T, { className: "h-5 w-5" }),
37
- hero: !1
38
- },
39
- {
40
- label: A("botlit.dashboard.stats.avgResponse", "Avg Response"),
41
- value: "1.2s",
42
- icon: /* @__PURE__ */ _(w, { className: "h-5 w-5" }),
43
- hero: !1
44
- }
45
- ], V = j?.name ? j.name.split(" ")[0] : "";
46
- return /* @__PURE__ */ _(o, {
19
+ }, { currentUser: D, navigateTo: O, getPath: k } = e(), { data: A, loading: j } = t(), { data: M, loading: N } = n(), P = [{
20
+ label: E("botlit.dashboard.stats.totalBots", "Total Bots"),
21
+ value: A?.length || 0,
22
+ icon: /* @__PURE__ */ h(v, { className: "h-5 w-5" }),
23
+ hero: !0
24
+ }, {
25
+ label: E("botlit.dashboard.stats.activeAgents", "Active Agents"),
26
+ value: M?.filter((e) => e.status === "ACTIVE").length || 0,
27
+ icon: /* @__PURE__ */ h(x, { className: "h-5 w-5" }),
28
+ hero: !1
29
+ }], F = D?.name ? D.name.split(" ")[0] : "";
30
+ return /* @__PURE__ */ h(i, {
47
31
  hero: !0,
48
- title: /* @__PURE__ */ v(g, { children: [A("botlit.dashboard.title", "Welcome back"), V ? /* @__PURE__ */ v(g, { children: [", ", /* @__PURE__ */ _(m, { children: V })] }) : null] }),
49
- description: A("botlit.dashboard.description", "Here's an overview of your AI agents and bots"),
50
- actions: /* @__PURE__ */ v("div", {
32
+ title: /* @__PURE__ */ g(m, { children: [E("botlit.dashboard.title", "Welcome back"), F ? /* @__PURE__ */ g(m, { children: [", ", /* @__PURE__ */ h(f, { children: F })] }) : null] }),
33
+ description: E("botlit.dashboard.description", "Here's an overview of your AI agents and bots"),
34
+ actions: /* @__PURE__ */ g("div", {
51
35
  className: "flex gap-2",
52
- children: [/* @__PURE__ */ _(d, {
36
+ children: [/* @__PURE__ */ h(l, {
53
37
  variant: "outline",
54
- leftIcon: /* @__PURE__ */ _(E, { size: 16 }),
55
- onClick: () => M("bots/new"),
56
- children: A("botlit.dashboard.actions.newBot", "New Bot")
57
- }), /* @__PURE__ */ _(d, {
58
- leftIcon: /* @__PURE__ */ _(C, { size: 16 }),
59
- onClick: () => M("agents/new"),
60
- children: A("botlit.dashboard.actions.createAgent", "Create Agent")
38
+ leftIcon: /* @__PURE__ */ h(S, { size: 16 }),
39
+ onClick: () => O("bots/new"),
40
+ children: E("botlit.dashboard.actions.newBot", "New Bot")
41
+ }), /* @__PURE__ */ h(l, {
42
+ leftIcon: /* @__PURE__ */ h(x, { size: 16 }),
43
+ onClick: () => O("agents/new"),
44
+ children: E("botlit.dashboard.actions.createAgent", "Create Agent")
61
45
  })]
62
46
  }),
63
- children: /* @__PURE__ */ v("div", {
47
+ children: /* @__PURE__ */ g("div", {
64
48
  className: "space-y-6",
65
49
  children: [
66
- /* @__PURE__ */ _(h, {
67
- icon: /* @__PURE__ */ _(D, { size: 18 }),
68
- children: A("botlit.dashboard.purpose", "This is your home base — a quick pulse on every bot, agent and conversation in your workspace. Glance at the headline numbers, jump back into recent work, and use the quick actions below to start something new. If you are just getting started, create your first agent and connect it to a bot.")
50
+ /* @__PURE__ */ h(p, {
51
+ icon: /* @__PURE__ */ h(C, { size: 18 }),
52
+ children: E("botlit.dashboard.purpose", "This is your home base — a quick pulse on every bot and agent in your workspace. Glance at the headline numbers, jump back into recent work, and use the quick actions below to start something new. If you are just getting started, create your first agent and connect it to a bot.")
69
53
  }),
70
- /* @__PURE__ */ _("div", {
71
- className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4",
72
- children: B.map((e) => /* @__PURE__ */ _(s, {
54
+ /* @__PURE__ */ h("div", {
55
+ className: "grid grid-cols-1 md:grid-cols-2 gap-4",
56
+ children: P.map((e) => /* @__PURE__ */ h(a, {
73
57
  treatment: e.hero ? "glass" : "metric",
74
58
  glow: e.hero,
75
- children: /* @__PURE__ */ _(c, {
59
+ children: /* @__PURE__ */ h(o, {
76
60
  className: "pt-6",
77
- children: /* @__PURE__ */ v("div", {
61
+ children: /* @__PURE__ */ g("div", {
78
62
  className: "flex items-center gap-4",
79
- children: [/* @__PURE__ */ _("div", {
63
+ children: [/* @__PURE__ */ h("div", {
80
64
  className: "p-3 rounded-lg bg-[var(--color-accent-soft)] text-text-primary [&>svg]:text-text-primary",
81
65
  children: e.icon
82
- }), /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
66
+ }), /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("p", {
83
67
  className: "text-2xl font-bold text-text-primary tabular-nums",
84
68
  children: e.value
85
- }), /* @__PURE__ */ _("p", {
69
+ }), /* @__PURE__ */ h("p", {
86
70
  className: "text-sm text-text-secondary",
87
71
  children: e.label
88
72
  })] })]
@@ -90,219 +74,159 @@ var k = () => {
90
74
  })
91
75
  }, e.label))
92
76
  }),
93
- /* @__PURE__ */ v("div", {
77
+ /* @__PURE__ */ g("div", {
94
78
  className: "grid grid-cols-1 lg:grid-cols-2 gap-6",
95
- children: [
96
- /* @__PURE__ */ v(s, {
97
- treatment: "insight",
98
- children: [/* @__PURE__ */ v(l, {
99
- className: "flex flex-row items-center justify-between",
100
- children: [/* @__PURE__ */ _(u, { children: A("botlit.dashboard.recentBots.title", "Recent Bots") }), /* @__PURE__ */ _(d, {
101
- variant: "ghost",
102
- size: "sm",
103
- rightIcon: /* @__PURE__ */ _(x, { size: 16 }),
104
- onClick: () => M("bots"),
105
- children: A("botlit.common.viewAll", "View All")
106
- })]
107
- }), /* @__PURE__ */ _(c, { children: F ? /* @__PURE__ */ _("div", {
108
- className: "space-y-3",
109
- children: [
110
- 1,
111
- 2,
112
- 3
113
- ].map((e) => /* @__PURE__ */ _("div", { className: "h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer" }, e))
114
- }) : P && P.length > 0 ? /* @__PURE__ */ _("div", {
115
- className: "space-y-3",
116
- children: P.slice(0, 4).map((e) => /* @__PURE__ */ v(y, {
117
- to: N(`bots/${e.id}`),
118
- className: "flex items-center justify-between p-3 rounded-lg border border-border-seam hover:border-border-strong hover:bg-accent transition-colors",
119
- children: [/* @__PURE__ */ v("div", {
120
- className: "flex items-center gap-3",
121
- children: [/* @__PURE__ */ _("span", {
122
- className: "text-2xl",
123
- children: e.icon || "🤖"
124
- }), /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
125
- className: "font-medium text-text-primary",
126
- children: e.name
127
- }), /* @__PURE__ */ v("p", {
128
- className: "text-xs text-text-secondary",
129
- children: [
130
- e.executionCount || 0,
131
- " ",
132
- A("botlit.common.executions", "executions")
133
- ]
134
- })] })]
135
- }), /* @__PURE__ */ _(f, { status: e.status })]
136
- }, e.id))
137
- }) : /* @__PURE__ */ v("div", {
138
- className: "text-center py-8 text-text-secondary",
139
- children: [
140
- /* @__PURE__ */ _(b, { className: "h-8 w-8 mx-auto mb-2 opacity-50" }),
141
- /* @__PURE__ */ _("p", { children: A("botlit.dashboard.recentBots.emptyTitle", "No bots yet") }),
142
- /* @__PURE__ */ _(d, {
143
- variant: "outline",
144
- size: "sm",
145
- className: "mt-3",
146
- onClick: () => M("bots/new"),
147
- children: A("botlit.dashboard.recentBots.emptyAction", "Create your first bot")
148
- })
149
- ]
150
- }) })]
151
- }),
152
- /* @__PURE__ */ v(s, {
153
- treatment: "insight",
154
- children: [/* @__PURE__ */ v(l, {
155
- className: "flex flex-row items-center justify-between",
156
- children: [/* @__PURE__ */ _(u, { children: A("botlit.dashboard.activeAgents.title", "Active Agents") }), /* @__PURE__ */ _(d, {
157
- variant: "ghost",
158
- size: "sm",
159
- rightIcon: /* @__PURE__ */ _(x, { size: 16 }),
160
- onClick: () => M("agents"),
161
- children: A("botlit.common.viewAll", "View All")
162
- })]
163
- }), /* @__PURE__ */ _(c, { children: L ? /* @__PURE__ */ _("div", {
164
- className: "space-y-3",
165
- children: [
166
- 1,
167
- 2,
168
- 3
169
- ].map((e) => /* @__PURE__ */ _("div", { className: "h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer" }, e))
170
- }) : I && I.length > 0 ? /* @__PURE__ */ _("div", {
171
- className: "space-y-3",
172
- children: I.filter((e) => e.status === "ACTIVE").slice(0, 4).map((e) => /* @__PURE__ */ _(y, {
173
- to: N(`agents/${e.id}`),
174
- className: "flex items-center justify-between p-3 rounded-lg border border-border-seam hover:border-border-strong hover:bg-accent transition-colors",
175
- children: /* @__PURE__ */ v("div", {
176
- className: "flex items-center gap-3",
177
- children: [/* @__PURE__ */ v("span", {
178
- className: "relative text-2xl",
179
- children: ["🤖", /* @__PURE__ */ _("span", { className: "absolute -right-0.5 -top-0.5 size-2 rounded-full bg-status-success-text motion-safe:animate-vc-glow-pulse" })]
180
- }), /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
181
- className: "font-medium text-text-primary",
182
- children: e.name
183
- }), /* @__PURE__ */ v("p", {
184
- className: "text-xs text-text-secondary",
185
- children: [
186
- i(e.executionCount ?? 0),
187
- " ",
188
- A("botlit.common.executions", "executions")
189
- ]
190
- })] })]
191
- })
192
- }, e.id))
193
- }) : /* @__PURE__ */ v("div", {
194
- className: "text-center py-8 text-text-secondary",
195
- children: [
196
- /* @__PURE__ */ _(C, { className: "h-8 w-8 mx-auto mb-2 opacity-50" }),
197
- /* @__PURE__ */ _("p", { children: A("botlit.dashboard.activeAgents.emptyTitle", "No active agents") }),
198
- /* @__PURE__ */ _(d, {
199
- variant: "outline",
200
- size: "sm",
201
- className: "mt-3",
202
- onClick: () => M("agents/new"),
203
- children: A("botlit.dashboard.activeAgents.emptyAction", "Create your first agent")
204
- })
205
- ]
206
- }) })]
207
- }),
208
- /* @__PURE__ */ v(s, {
209
- className: "lg:col-span-2",
210
- treatment: "insight",
211
- children: [/* @__PURE__ */ v(l, {
212
- className: "flex flex-row items-center justify-between",
213
- children: [/* @__PURE__ */ _(u, { children: A("botlit.dashboard.recentConversations.title", "Recent Conversations") }), /* @__PURE__ */ _(d, {
214
- variant: "ghost",
79
+ children: [/* @__PURE__ */ g(a, {
80
+ treatment: "insight",
81
+ children: [/* @__PURE__ */ g(s, {
82
+ className: "flex flex-row items-center justify-between",
83
+ children: [/* @__PURE__ */ h(c, { children: E("botlit.dashboard.recentBots.title", "Recent Bots") }), /* @__PURE__ */ h(l, {
84
+ variant: "ghost",
85
+ size: "sm",
86
+ rightIcon: /* @__PURE__ */ h(y, { size: 16 }),
87
+ onClick: () => O("bots"),
88
+ children: E("botlit.common.viewAll", "View All")
89
+ })]
90
+ }), /* @__PURE__ */ h(o, { children: j ? /* @__PURE__ */ h("div", {
91
+ className: "space-y-3",
92
+ children: [
93
+ 1,
94
+ 2,
95
+ 3
96
+ ].map((e) => /* @__PURE__ */ h("div", { className: "h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer" }, e))
97
+ }) : A && A.length > 0 ? /* @__PURE__ */ h("div", {
98
+ className: "space-y-3",
99
+ children: A.slice(0, 4).map((e) => /* @__PURE__ */ g(_, {
100
+ to: k(`bots/${e.id}`),
101
+ className: "flex items-center justify-between p-3 rounded-lg border border-border-seam hover:border-border-strong hover:bg-accent transition-colors",
102
+ children: [/* @__PURE__ */ g("div", {
103
+ className: "flex items-center gap-3",
104
+ children: [/* @__PURE__ */ h("span", {
105
+ className: "text-2xl",
106
+ children: e.icon || "🤖"
107
+ }), /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("p", {
108
+ className: "font-medium text-text-primary",
109
+ children: e.name
110
+ }), /* @__PURE__ */ g("p", {
111
+ className: "text-xs text-text-secondary",
112
+ children: [
113
+ e.executionCount || 0,
114
+ " ",
115
+ E("botlit.common.executions", "executions")
116
+ ]
117
+ })] })]
118
+ }), /* @__PURE__ */ h(u, { status: e.status })]
119
+ }, e.id))
120
+ }) : /* @__PURE__ */ g("div", {
121
+ className: "text-center py-8 text-text-secondary",
122
+ children: [
123
+ /* @__PURE__ */ h(v, { className: "h-8 w-8 mx-auto mb-2 opacity-50" }),
124
+ /* @__PURE__ */ h("p", { children: E("botlit.dashboard.recentBots.emptyTitle", "No bots yet") }),
125
+ /* @__PURE__ */ h(l, {
126
+ variant: "outline",
215
127
  size: "sm",
216
- rightIcon: /* @__PURE__ */ _(x, { size: 16 }),
217
- onClick: () => window.location.href = "/conversations",
218
- children: A("botlit.common.viewAll", "View All")
219
- })]
220
- }), /* @__PURE__ */ _(c, { children: z ? /* @__PURE__ */ _("div", {
221
- className: "space-y-3",
222
- children: [
223
- 1,
224
- 2,
225
- 3
226
- ].map((e) => /* @__PURE__ */ _("div", { className: "h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer" }, e))
227
- }) : R && R.length > 0 ? /* @__PURE__ */ _("div", {
228
- className: "space-y-3",
229
- children: R.slice(0, 5).map((e) => /* @__PURE__ */ v("a", {
230
- href: `/conversations/${e.id}`,
231
- className: "flex items-center justify-between p-3 rounded-lg border border-border-seam hover:border-border-strong hover:bg-accent transition-colors",
232
- children: [/* @__PURE__ */ v("div", {
233
- className: "flex items-center gap-3",
234
- children: [/* @__PURE__ */ _("div", {
235
- className: "p-2 rounded-full bg-action-primary-bg/10",
236
- children: /* @__PURE__ */ _(T, { className: "h-4 w-4 text-primary" })
237
- }), /* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
238
- className: "font-medium text-text-primary",
239
- children: e.title
240
- }), /* @__PURE__ */ v("p", {
241
- className: "text-xs text-text-secondary",
242
- children: [
243
- e.messages.length,
244
- " ",
245
- A("botlit.common.messages", "messages")
246
- ]
247
- })] })]
248
- }), /* @__PURE__ */ _("div", {
128
+ className: "mt-3",
129
+ onClick: () => O("bots/new"),
130
+ children: E("botlit.dashboard.recentBots.emptyAction", "Create your first bot")
131
+ })
132
+ ]
133
+ }) })]
134
+ }), /* @__PURE__ */ g(a, {
135
+ treatment: "insight",
136
+ children: [/* @__PURE__ */ g(s, {
137
+ className: "flex flex-row items-center justify-between",
138
+ children: [/* @__PURE__ */ h(c, { children: E("botlit.dashboard.activeAgents.title", "Active Agents") }), /* @__PURE__ */ h(l, {
139
+ variant: "ghost",
140
+ size: "sm",
141
+ rightIcon: /* @__PURE__ */ h(y, { size: 16 }),
142
+ onClick: () => O("agents"),
143
+ children: E("botlit.common.viewAll", "View All")
144
+ })]
145
+ }), /* @__PURE__ */ h(o, { children: N ? /* @__PURE__ */ h("div", {
146
+ className: "space-y-3",
147
+ children: [
148
+ 1,
149
+ 2,
150
+ 3
151
+ ].map((e) => /* @__PURE__ */ h("div", { className: "h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer" }, e))
152
+ }) : M && M.length > 0 ? /* @__PURE__ */ h("div", {
153
+ className: "space-y-3",
154
+ children: M.filter((e) => e.status === "ACTIVE").slice(0, 4).map((e) => /* @__PURE__ */ h(_, {
155
+ to: k(`agents/${e.id}`),
156
+ className: "flex items-center justify-between p-3 rounded-lg border border-border-seam hover:border-border-strong hover:bg-accent transition-colors",
157
+ children: /* @__PURE__ */ g("div", {
158
+ className: "flex items-center gap-3",
159
+ children: [/* @__PURE__ */ g("span", {
160
+ className: "relative text-2xl",
161
+ children: ["🤖", /* @__PURE__ */ h("span", { className: "absolute -right-0.5 -top-0.5 size-2 rounded-full bg-status-success-text motion-safe:animate-vc-glow-pulse" })]
162
+ }), /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("p", {
163
+ className: "font-medium text-text-primary",
164
+ children: e.name
165
+ }), /* @__PURE__ */ g("p", {
249
166
  className: "text-xs text-text-secondary",
250
- children: a(e.updatedAt)
251
- })]
252
- }, e.id))
253
- }) : /* @__PURE__ */ v("div", {
254
- className: "text-center py-8 text-text-secondary",
255
- children: [
256
- /* @__PURE__ */ _(T, { className: "h-8 w-8 mx-auto mb-2 opacity-50" }),
257
- /* @__PURE__ */ _("p", { children: A("botlit.dashboard.recentConversations.emptyTitle", "No conversations yet") }),
258
- /* @__PURE__ */ _("p", {
259
- className: "text-xs mt-1",
260
- children: A("botlit.dashboard.recentConversations.emptyDescription", "Start chatting with an agent to see conversations here")
261
- })
262
- ]
263
- }) })]
264
- })
265
- ]
167
+ children: [
168
+ r(e.executionCount ?? 0),
169
+ " ",
170
+ E("botlit.common.executions", "executions")
171
+ ]
172
+ })] })]
173
+ })
174
+ }, e.id))
175
+ }) : /* @__PURE__ */ g("div", {
176
+ className: "text-center py-8 text-text-secondary",
177
+ children: [
178
+ /* @__PURE__ */ h(x, { className: "h-8 w-8 mx-auto mb-2 opacity-50" }),
179
+ /* @__PURE__ */ h("p", { children: E("botlit.dashboard.activeAgents.emptyTitle", "No active agents") }),
180
+ /* @__PURE__ */ h(l, {
181
+ variant: "outline",
182
+ size: "sm",
183
+ className: "mt-3",
184
+ onClick: () => O("agents/new"),
185
+ children: E("botlit.dashboard.activeAgents.emptyAction", "Create your first agent")
186
+ })
187
+ ]
188
+ }) })]
189
+ })]
266
190
  }),
267
- /* @__PURE__ */ v(p, {
191
+ /* @__PURE__ */ g(d, {
268
192
  treatment: "plain",
269
193
  className: "border-border-seam p-6",
270
- children: [/* @__PURE__ */ _("h2", {
194
+ children: [/* @__PURE__ */ h("h2", {
271
195
  className: "text-lg font-semibold tracking-tight text-text-primary",
272
- children: A("botlit.dashboard.quickActions.title", "Quick Actions")
273
- }), /* @__PURE__ */ v("div", {
196
+ children: E("botlit.dashboard.quickActions.title", "Quick Actions")
197
+ }), /* @__PURE__ */ g("div", {
274
198
  className: "mt-4 grid grid-cols-2 md:grid-cols-4 gap-4",
275
199
  children: [
276
- /* @__PURE__ */ v(y, {
277
- to: N("bots/new"),
200
+ /* @__PURE__ */ g(_, {
201
+ to: k("bots/new"),
278
202
  className: "flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]",
279
- children: [/* @__PURE__ */ _(b, { className: "h-8 w-8 text-text-secondary" }), /* @__PURE__ */ _("span", {
203
+ children: [/* @__PURE__ */ h(v, { className: "h-8 w-8 text-text-secondary" }), /* @__PURE__ */ h("span", {
280
204
  className: "text-sm font-medium",
281
- children: A("botlit.dashboard.quickActions.createBot", "Create Bot")
205
+ children: E("botlit.dashboard.quickActions.createBot", "Create Bot")
282
206
  })]
283
207
  }),
284
- /* @__PURE__ */ v(y, {
285
- to: N("agents/new"),
208
+ /* @__PURE__ */ g(_, {
209
+ to: k("agents/new"),
286
210
  className: "flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]",
287
- children: [/* @__PURE__ */ _(C, { className: "h-8 w-8 text-text-secondary" }), /* @__PURE__ */ _("span", {
211
+ children: [/* @__PURE__ */ h(x, { className: "h-8 w-8 text-text-secondary" }), /* @__PURE__ */ h("span", {
288
212
  className: "text-sm font-medium",
289
- children: A("botlit.dashboard.quickActions.buildAgent", "Build Agent")
213
+ children: E("botlit.dashboard.quickActions.buildAgent", "Build Agent")
290
214
  })]
291
215
  }),
292
- /* @__PURE__ */ v(y, {
293
- to: N("knowledge/new"),
216
+ /* @__PURE__ */ g(_, {
217
+ to: k("knowledge/new"),
294
218
  className: "flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]",
295
- children: [/* @__PURE__ */ _(S, { className: "h-8 w-8 text-text-secondary" }), /* @__PURE__ */ _("span", {
219
+ children: [/* @__PURE__ */ h(b, { className: "h-8 w-8 text-text-secondary" }), /* @__PURE__ */ h("span", {
296
220
  className: "text-sm font-medium",
297
- children: A("botlit.dashboard.quickActions.addKnowledge", "Add Knowledge")
221
+ children: E("botlit.dashboard.quickActions.addKnowledge", "Add Knowledge")
298
222
  })]
299
223
  }),
300
- /* @__PURE__ */ v("a", {
224
+ /* @__PURE__ */ g("a", {
301
225
  href: "/conversations",
302
226
  className: "flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]",
303
- children: [/* @__PURE__ */ _(D, { className: "h-8 w-8 text-text-secondary" }), /* @__PURE__ */ _("span", {
227
+ children: [/* @__PURE__ */ h(C, { className: "h-8 w-8 text-text-secondary" }), /* @__PURE__ */ h("span", {
304
228
  className: "text-sm font-medium",
305
- children: A("botlit.dashboard.quickActions.quickChat", "Quick Chat")
229
+ children: E("botlit.dashboard.quickActions.quickChat", "Quick Chat")
306
230
  })]
307
231
  })
308
232
  ]
@@ -313,6 +237,6 @@ var k = () => {
313
237
  });
314
238
  };
315
239
  //#endregion
316
- export { k as DashboardPage };
240
+ export { T as DashboardPage };
317
241
 
318
242
  //# sourceMappingURL=DashboardPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardPage.js","names":[],"sources":["../../../src/botlit/pages/DashboardPage.tsx"],"sourcesContent":["/**\n * Dashboard Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { Link } from 'react-router';\nimport {\n AppWindow,\n Bot,\n MessageSquare,\n BookOpen,\n Clock,\n Zap,\n ArrowRight,\n Plus,\n} from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { GradientText, GlassCard, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { Card, CardHeader, CardTitle, CardContent } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { StatusBadge } from '../components/Badge';\nimport { useBots } from '../hooks/useBots';\nimport { useAgents } from '../hooks/useAgents';\nimport { useConversations } from '../hooks/useConversations';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { formatRelativeTime, formatNumber } from '../utils/formatters';\n\nexport const DashboardPage: FC = () => {\n const { t: translate } = useI18n();\n const t = (key: string, fallback: string) => {\n const value = translate(key);\n return value === key ? fallback : value;\n };\n const { currentUser, navigateTo, getPath } = useBotlit();\n const { data: bots, loading: botsLoading } = useBots();\n const { data: agents, loading: agentsLoading } = useAgents();\n const { data: conversations, loading: conversationsLoading } = useConversations();\n\n const stats = [\n {\n label: t('botlit.dashboard.stats.totalBots', 'Total Bots'),\n value: bots?.length || 0,\n icon: <AppWindow className=\"h-5 w-5\" />,\n hero: true,\n },\n {\n label: t('botlit.dashboard.stats.activeAgents', 'Active Agents'),\n value: agents?.filter((a: { status: string }) => a.status === 'ACTIVE').length || 0,\n icon: <Bot className=\"h-5 w-5\" />,\n hero: false,\n },\n {\n label: t('botlit.dashboard.stats.conversations', 'Conversations'),\n value: conversations?.length || 0,\n icon: <MessageSquare className=\"h-5 w-5\" />,\n hero: false,\n },\n {\n label: t('botlit.dashboard.stats.avgResponse', 'Avg Response'),\n value: '1.2s',\n icon: <Clock className=\"h-5 w-5\" />,\n hero: false,\n },\n ];\n\n const firstName = currentUser?.name ? currentUser.name.split(' ')[0] : '';\n\n return (\n <PageLayout\n hero\n title={\n <>\n {t('botlit.dashboard.title', 'Welcome back')}\n {firstName ? (\n <>\n , <GradientText>{firstName}</GradientText>\n </>\n ) : null}\n </>\n }\n description={t(\n 'botlit.dashboard.description',\n \"Here's an overview of your AI agents and bots\"\n )}\n actions={\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n leftIcon={<Plus size={16} />}\n onClick={() => navigateTo('bots/new')}\n >\n {t('botlit.dashboard.actions.newBot', 'New Bot')}\n </Button>\n <Button leftIcon={<Bot size={16} />} onClick={() => navigateTo('agents/new')}>\n {t('botlit.dashboard.actions.createAgent', 'Create Agent')}\n </Button>\n </div>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Zap size={18} />}>\n {t(\n 'botlit.dashboard.purpose',\n 'This is your home base — a quick pulse on every bot, agent and conversation in your workspace. Glance at the headline numbers, jump back into recent work, and use the quick actions below to start something new. If you are just getting started, create your first agent and connect it to a bot.'\n )}\n </PagePurpose>\n\n {/* Stats Grid */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4\">\n {stats.map((stat) => (\n <Card key={stat.label} treatment={stat.hero ? 'glass' : 'metric'} glow={stat.hero}>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center gap-4\">\n <div className=\"p-3 rounded-lg bg-[var(--color-accent-soft)] text-text-primary [&>svg]:text-text-primary\">\n {stat.icon}\n </div>\n <div>\n <p className=\"text-2xl font-bold text-text-primary tabular-nums\">\n {stat.value}\n </p>\n <p className=\"text-sm text-text-secondary\">{stat.label}</p>\n </div>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n {/* Main Content Grid */}\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n {/* Recent Bots */}\n <Card treatment=\"insight\">\n <CardHeader className=\"flex flex-row items-center justify-between\">\n <CardTitle>{t('botlit.dashboard.recentBots.title', 'Recent Bots')}</CardTitle>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n rightIcon={<ArrowRight size={16} />}\n onClick={() => navigateTo('bots')}\n >\n {t('botlit.common.viewAll', 'View All')}\n </Button>\n </CardHeader>\n <CardContent>\n {botsLoading ? (\n <div className=\"space-y-3\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer\"\n />\n ))}\n </div>\n ) : bots && bots.length > 0 ? (\n <div className=\"space-y-3\">\n {bots.slice(0, 4).map((bot) => (\n <Link\n key={bot.id}\n to={getPath(`bots/${bot.id}`)}\n className=\"flex items-center justify-between p-3 rounded-lg border border-border-seam hover:border-border-strong hover:bg-accent transition-colors\"\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"text-2xl\">{bot.icon || '🤖'}</span>\n <div>\n <p className=\"font-medium text-text-primary\">{bot.name}</p>\n <p className=\"text-xs text-text-secondary\">\n {bot.executionCount || 0} {t('botlit.common.executions', 'executions')}\n </p>\n </div>\n </div>\n <StatusBadge status={bot.status} />\n </Link>\n ))}\n </div>\n ) : (\n <div className=\"text-center py-8 text-text-secondary\">\n <AppWindow className=\"h-8 w-8 mx-auto mb-2 opacity-50\" />\n <p>{t('botlit.dashboard.recentBots.emptyTitle', 'No bots yet')}</p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-3\"\n onClick={() => navigateTo('bots/new')}\n >\n {t('botlit.dashboard.recentBots.emptyAction', 'Create your first bot')}\n </Button>\n </div>\n )}\n </CardContent>\n </Card>\n\n {/* Active Agents */}\n <Card treatment=\"insight\">\n <CardHeader className=\"flex flex-row items-center justify-between\">\n <CardTitle>{t('botlit.dashboard.activeAgents.title', 'Active Agents')}</CardTitle>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n rightIcon={<ArrowRight size={16} />}\n onClick={() => navigateTo('agents')}\n >\n {t('botlit.common.viewAll', 'View All')}\n </Button>\n </CardHeader>\n <CardContent>\n {agentsLoading ? (\n <div className=\"space-y-3\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer\"\n />\n ))}\n </div>\n ) : agents && agents.length > 0 ? (\n <div className=\"space-y-3\">\n {agents\n .filter((a) => a.status === 'ACTIVE')\n .slice(0, 4)\n .map((agent) => (\n <Link\n key={agent.id}\n to={getPath(`agents/${agent.id}`)}\n className=\"flex items-center justify-between p-3 rounded-lg border border-border-seam hover:border-border-strong hover:bg-accent transition-colors\"\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"relative text-2xl\">\n 🤖\n <span className=\"absolute -right-0.5 -top-0.5 size-2 rounded-full bg-status-success-text motion-safe:animate-vc-glow-pulse\" />\n </span>\n <div>\n <p className=\"font-medium text-text-primary\">{agent.name}</p>\n <p className=\"text-xs text-text-secondary\">\n {formatNumber(agent.executionCount ?? 0)}{' '}\n {t('botlit.common.executions', 'executions')}\n </p>\n </div>\n </div>\n </Link>\n ))}\n </div>\n ) : (\n <div className=\"text-center py-8 text-text-secondary\">\n <Bot className=\"h-8 w-8 mx-auto mb-2 opacity-50\" />\n <p>{t('botlit.dashboard.activeAgents.emptyTitle', 'No active agents')}</p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-3\"\n onClick={() => navigateTo('agents/new')}\n >\n {t('botlit.dashboard.activeAgents.emptyAction', 'Create your first agent')}\n </Button>\n </div>\n )}\n </CardContent>\n </Card>\n\n {/* Recent Conversations */}\n <Card className=\"lg:col-span-2\" treatment=\"insight\">\n <CardHeader className=\"flex flex-row items-center justify-between\">\n <CardTitle>\n {t('botlit.dashboard.recentConversations.title', 'Recent Conversations')}\n </CardTitle>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n rightIcon={<ArrowRight size={16} />}\n onClick={() => (window.location.href = '/conversations')}\n >\n {t('botlit.common.viewAll', 'View All')}\n </Button>\n </CardHeader>\n <CardContent>\n {conversationsLoading ? (\n <div className=\"space-y-3\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer\"\n />\n ))}\n </div>\n ) : conversations && conversations.length > 0 ? (\n <div className=\"space-y-3\">\n {conversations.slice(0, 5).map((conv) => (\n <a\n key={conv.id}\n href={`/conversations/${conv.id}`}\n className=\"flex items-center justify-between p-3 rounded-lg border border-border-seam hover:border-border-strong hover:bg-accent transition-colors\"\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"p-2 rounded-full bg-action-primary-bg/10\">\n <MessageSquare className=\"h-4 w-4 text-primary\" />\n </div>\n <div>\n <p className=\"font-medium text-text-primary\">{conv.title}</p>\n <p className=\"text-xs text-text-secondary\">\n {conv.messages.length} {t('botlit.common.messages', 'messages')}\n </p>\n </div>\n </div>\n <div className=\"text-xs text-text-secondary\">\n {formatRelativeTime(conv.updatedAt)}\n </div>\n </a>\n ))}\n </div>\n ) : (\n <div className=\"text-center py-8 text-text-secondary\">\n <MessageSquare className=\"h-8 w-8 mx-auto mb-2 opacity-50\" />\n <p>\n {t('botlit.dashboard.recentConversations.emptyTitle', 'No conversations yet')}\n </p>\n <p className=\"text-xs mt-1\">\n {t(\n 'botlit.dashboard.recentConversations.emptyDescription',\n 'Start chatting with an agent to see conversations here'\n )}\n </p>\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n\n {/* Quick Actions */}\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-6\">\n <h2 className=\"text-lg font-semibold tracking-tight text-text-primary\">\n {t('botlit.dashboard.quickActions.title', 'Quick Actions')}\n </h2>\n <div className=\"mt-4 grid grid-cols-2 md:grid-cols-4 gap-4\">\n <Link\n to={getPath('bots/new')}\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <AppWindow className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.createBot', 'Create Bot')}\n </span>\n </Link>\n <Link\n to={getPath('agents/new')}\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <Bot className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.buildAgent', 'Build Agent')}\n </span>\n </Link>\n <Link\n to={getPath('knowledge/new')}\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <BookOpen className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.addKnowledge', 'Add Knowledge')}\n </span>\n </Link>\n <a\n href=\"/conversations\"\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <Zap className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.quickChat', 'Quick Chat')}\n </span>\n </a>\n </div>\n </GlassCard>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;AA6BA,IAAa,UAA0B;CACrC,IAAM,EAAE,GAAG,MAAc,GAAS,EAC5B,KAAK,GAAa,MAAqB;EAC3C,IAAM,IAAQ,EAAU,EAAI;AAC5B,SAAO,MAAU,IAAM,IAAW;IAE9B,EAAE,gBAAa,eAAY,eAAY,GAAW,EAClD,EAAE,MAAM,GAAM,SAAS,MAAgB,GAAS,EAChD,EAAE,MAAM,GAAQ,SAAS,MAAkB,GAAW,EACtD,EAAE,MAAM,GAAe,SAAS,MAAyB,GAAkB,EAE3E,IAAQ;EACZ;GACE,OAAO,EAAE,oCAAoC,aAAa;GAC1D,OAAO,GAAM,UAAU;GACvB,MAAM,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA;GACvC,MAAM;GACP;EACD;GACE,OAAO,EAAE,uCAAuC,gBAAgB;GAChE,OAAO,GAAQ,QAAQ,MAA0B,EAAE,WAAW,SAAS,CAAC,UAAU;GAClF,MAAM,kBAAC,GAAD,EAAK,WAAU,WAAY,CAAA;GACjC,MAAM;GACP;EACD;GACE,OAAO,EAAE,wCAAwC,gBAAgB;GACjE,OAAO,GAAe,UAAU;GAChC,MAAM,kBAAC,GAAD,EAAe,WAAU,WAAY,CAAA;GAC3C,MAAM;GACP;EACD;GACE,OAAO,EAAE,sCAAsC,eAAe;GAC9D,OAAO;GACP,MAAM,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;GACnC,MAAM;GACP;EACF,EAEK,IAAY,GAAa,OAAO,EAAY,KAAK,MAAM,IAAI,CAAC,KAAK;AAEvE,QACE,kBAAC,GAAD;EACE,MAAA;EACA,OACE,kBAAA,GAAA,EAAA,UAAA,CACG,EAAE,0BAA0B,eAAe,EAC3C,IACC,kBAAA,GAAA,EAAA,UAAA,CAAE,MACE,kBAAC,GAAD,EAAA,UAAe,GAAyB,CAAA,CACzC,EAAA,CAAA,GACD,KACH,EAAA,CAAA;EAEL,aAAa,EACX,gCACA,gDACD;EACD,SACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,GAAD;IACE,SAAQ;IACR,UAAU,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA;IAC5B,eAAe,EAAW,WAAW;cAEpC,EAAE,mCAAmC,UAAU;IACzC,CAAA,EACT,kBAAC,GAAD;IAAQ,UAAU,kBAAC,GAAD,EAAK,MAAM,IAAM,CAAA;IAAE,eAAe,EAAW,aAAa;cACzE,EAAE,wCAAwC,eAAe;IACnD,CAAA,CACL;;YAGR,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,GAAD;KAAa,MAAM,kBAAC,GAAD,EAAK,MAAM,IAAM,CAAA;eACjC,EACC,4BACA,uSACD;KACW,CAAA;IAGd,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAM,KAAK,MACV,kBAAC,GAAD;MAAuB,WAAW,EAAK,OAAO,UAAU;MAAU,MAAM,EAAK;gBAC3E,kBAAC,GAAD;OAAa,WAAU;iBACrB,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,OAAD;SAAK,WAAU;mBACZ,EAAK;SACF,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;SAAG,WAAU;mBACV,EAAK;SACJ,CAAA,EACJ,kBAAC,KAAD;SAAG,WAAU;mBAA+B,EAAK;SAAU,CAAA,CACvD,EAAA,CAAA,CACF;;OACM,CAAA;MACT,EAdI,EAAK,MAcT,CACP;KACE,CAAA;IAGN,kBAAC,OAAD;KAAK,WAAU;eAAf;MAEE,kBAAC,GAAD;OAAM,WAAU;iBAAhB,CACE,kBAAC,GAAD;QAAY,WAAU;kBAAtB,CACE,kBAAC,GAAD,EAAA,UAAY,EAAE,qCAAqC,cAAc,EAAa,CAAA,EAC9E,kBAAC,GAAD;SACE,SAAQ;SACR,MAAK;SACL,WAAW,kBAAC,GAAD,EAAY,MAAM,IAAM,CAAA;SACnC,eAAe,EAAW,OAAO;mBAEhC,EAAE,yBAAyB,WAAW;SAChC,CAAA,CACE;WACb,kBAAC,GAAD,EAAA,UACG,IACC,kBAAC,OAAD;QAAK,WAAU;kBACZ;SAAC;SAAG;SAAG;SAAE,CAAC,KAAK,MACd,kBAAC,OAAD,EAEE,WAAU,+DACV,EAFK,EAEL,CACF;QACE,CAAA,GACJ,KAAQ,EAAK,SAAS,IACxB,kBAAC,OAAD;QAAK,WAAU;kBACZ,EAAK,MAAM,GAAG,EAAE,CAAC,KAAK,MACrB,kBAAC,GAAD;SAEE,IAAI,EAAQ,QAAQ,EAAI,KAAK;SAC7B,WAAU;mBAHZ,CAKE,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,QAAD;WAAM,WAAU;qBAAY,EAAI,QAAQ;WAAY,CAAA,EACpD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAiC,EAAI;WAAS,CAAA,EAC3D,kBAAC,KAAD;WAAG,WAAU;qBAAb;YACG,EAAI,kBAAkB;YAAE;YAAE,EAAE,4BAA4B,aAAa;YACpE;aACA,EAAA,CAAA,CACF;aACN,kBAAC,GAAD,EAAa,QAAQ,EAAI,QAAU,CAAA,CAC9B;WAdA,EAAI,GAcJ,CACP;QACE,CAAA,GAEN,kBAAC,OAAD;QAAK,WAAU;kBAAf;SACE,kBAAC,GAAD,EAAW,WAAU,mCAAoC,CAAA;SACzD,kBAAC,KAAD,EAAA,UAAI,EAAE,0CAA0C,cAAc,EAAK,CAAA;SACnE,kBAAC,GAAD;UACE,SAAQ;UACR,MAAK;UACL,WAAU;UACV,eAAe,EAAW,WAAW;oBAEpC,EAAE,2CAA2C,wBAAwB;UAC/D,CAAA;SACL;WAEI,CAAA,CACT;;MAGP,kBAAC,GAAD;OAAM,WAAU;iBAAhB,CACE,kBAAC,GAAD;QAAY,WAAU;kBAAtB,CACE,kBAAC,GAAD,EAAA,UAAY,EAAE,uCAAuC,gBAAgB,EAAa,CAAA,EAClF,kBAAC,GAAD;SACE,SAAQ;SACR,MAAK;SACL,WAAW,kBAAC,GAAD,EAAY,MAAM,IAAM,CAAA;SACnC,eAAe,EAAW,SAAS;mBAElC,EAAE,yBAAyB,WAAW;SAChC,CAAA,CACE;WACb,kBAAC,GAAD,EAAA,UACG,IACC,kBAAC,OAAD;QAAK,WAAU;kBACZ;SAAC;SAAG;SAAG;SAAE,CAAC,KAAK,MACd,kBAAC,OAAD,EAEE,WAAU,+DACV,EAFK,EAEL,CACF;QACE,CAAA,GACJ,KAAU,EAAO,SAAS,IAC5B,kBAAC,OAAD;QAAK,WAAU;kBACZ,EACE,QAAQ,MAAM,EAAE,WAAW,SAAS,CACpC,MAAM,GAAG,EAAE,CACX,KAAK,MACJ,kBAAC,GAAD;SAEE,IAAI,EAAQ,UAAU,EAAM,KAAK;SACjC,WAAU;mBAEV,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,QAAD;WAAM,WAAU;qBAAhB,CAAoC,MAElC,kBAAC,QAAD,EAAM,WAAU,6GAA8G,CAAA,CACzH;cACP,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAiC,EAAM;WAAS,CAAA,EAC7D,kBAAC,KAAD;WAAG,WAAU;qBAAb;YACG,EAAa,EAAM,kBAAkB,EAAE;YAAE;YACzC,EAAE,4BAA4B,aAAa;YAC1C;aACA,EAAA,CAAA,CACF;;SACD,EAjBA,EAAM,GAiBN,CACP;QACA,CAAA,GAEN,kBAAC,OAAD;QAAK,WAAU;kBAAf;SACE,kBAAC,GAAD,EAAK,WAAU,mCAAoC,CAAA;SACnD,kBAAC,KAAD,EAAA,UAAI,EAAE,4CAA4C,mBAAmB,EAAK,CAAA;SAC1E,kBAAC,GAAD;UACE,SAAQ;UACR,MAAK;UACL,WAAU;UACV,eAAe,EAAW,aAAa;oBAEtC,EAAE,6CAA6C,0BAA0B;UACnE,CAAA;SACL;WAEI,CAAA,CACT;;MAGP,kBAAC,GAAD;OAAM,WAAU;OAAgB,WAAU;iBAA1C,CACE,kBAAC,GAAD;QAAY,WAAU;kBAAtB,CACE,kBAAC,GAAD,EAAA,UACG,EAAE,8CAA8C,uBAAuB,EAC9D,CAAA,EACZ,kBAAC,GAAD;SACE,SAAQ;SACR,MAAK;SACL,WAAW,kBAAC,GAAD,EAAY,MAAM,IAAM,CAAA;SACnC,eAAgB,OAAO,SAAS,OAAO;mBAEtC,EAAE,yBAAyB,WAAW;SAChC,CAAA,CACE;WACb,kBAAC,GAAD,EAAA,UACG,IACC,kBAAC,OAAD;QAAK,WAAU;kBACZ;SAAC;SAAG;SAAG;SAAE,CAAC,KAAK,MACd,kBAAC,OAAD,EAEE,WAAU,+DACV,EAFK,EAEL,CACF;QACE,CAAA,GACJ,KAAiB,EAAc,SAAS,IAC1C,kBAAC,OAAD;QAAK,WAAU;kBACZ,EAAc,MAAM,GAAG,EAAE,CAAC,KAAK,MAC9B,kBAAC,KAAD;SAEE,MAAM,kBAAkB,EAAK;SAC7B,WAAU;mBAHZ,CAKE,kBAAC,OAAD;UAAK,WAAU;oBAAf,CACE,kBAAC,OAAD;WAAK,WAAU;qBACb,kBAAC,GAAD,EAAe,WAAU,wBAAyB,CAAA;WAC9C,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;WAAG,WAAU;qBAAiC,EAAK;WAAU,CAAA,EAC7D,kBAAC,KAAD;WAAG,WAAU;qBAAb;YACG,EAAK,SAAS;YAAO;YAAE,EAAE,0BAA0B,WAAW;YAC7D;aACA,EAAA,CAAA,CACF;aACN,kBAAC,OAAD;UAAK,WAAU;oBACZ,EAAmB,EAAK,UAAU;UAC/B,CAAA,CACJ;WAlBG,EAAK,GAkBR,CACJ;QACE,CAAA,GAEN,kBAAC,OAAD;QAAK,WAAU;kBAAf;SACE,kBAAC,GAAD,EAAe,WAAU,mCAAoC,CAAA;SAC7D,kBAAC,KAAD,EAAA,UACG,EAAE,mDAAmD,uBAAuB,EAC3E,CAAA;SACJ,kBAAC,KAAD;UAAG,WAAU;oBACV,EACC,yDACA,yDACD;UACC,CAAA;SACA;WAEI,CAAA,CACT;;MACH;;IAGN,kBAAC,GAAD;KAAW,WAAU;KAAQ,WAAU;eAAvC,CACE,kBAAC,MAAD;MAAI,WAAU;gBACX,EAAE,uCAAuC,gBAAgB;MACvD,CAAA,EACL,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,GAAD;QACE,IAAI,EAAQ,WAAW;QACvB,WAAU;kBAFZ,CAIE,kBAAC,GAAD,EAAW,WAAU,+BAAgC,CAAA,EACrD,kBAAC,QAAD;SAAM,WAAU;mBACb,EAAE,2CAA2C,aAAa;SACtD,CAAA,CACF;;OACP,kBAAC,GAAD;QACE,IAAI,EAAQ,aAAa;QACzB,WAAU;kBAFZ,CAIE,kBAAC,GAAD,EAAK,WAAU,+BAAgC,CAAA,EAC/C,kBAAC,QAAD;SAAM,WAAU;mBACb,EAAE,4CAA4C,cAAc;SACxD,CAAA,CACF;;OACP,kBAAC,GAAD;QACE,IAAI,EAAQ,gBAAgB;QAC5B,WAAU;kBAFZ,CAIE,kBAAC,GAAD,EAAU,WAAU,+BAAgC,CAAA,EACpD,kBAAC,QAAD;SAAM,WAAU;mBACb,EAAE,8CAA8C,gBAAgB;SAC5D,CAAA,CACF;;OACP,kBAAC,KAAD;QACE,MAAK;QACL,WAAU;kBAFZ,CAIE,kBAAC,GAAD,EAAK,WAAU,+BAAgC,CAAA,EAC/C,kBAAC,QAAD;SAAM,WAAU;mBACb,EAAE,2CAA2C,aAAa;SACtD,CAAA,CACL;;OACA;QACI;;IACR;;EACK,CAAA"}
1
+ {"version":3,"file":"DashboardPage.js","names":[],"sources":["../../../src/botlit/pages/DashboardPage.tsx"],"sourcesContent":["/**\n * Dashboard Page\n * @module botlit/pages\n */\n\nimport type { FC } from 'react';\nimport { Link } from 'react-router';\nimport { AppWindow, Bot, BookOpen, Zap, ArrowRight, Plus } from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { GradientText, GlassCard, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../components/PageLayout';\nimport { Card, CardHeader, CardTitle, CardContent } from '../components/Card';\nimport { Button } from '../components/Button';\nimport { StatusBadge } from '../components/Badge';\nimport { useBots } from '../hooks/useBots';\nimport { useAgents } from '../hooks/useAgents';\nimport { useBotlit } from '../providers/BotlitProvider';\nimport { formatNumber } from '../utils/formatters';\n\nexport const DashboardPage: FC = () => {\n const { t: translate } = useI18n();\n const t = (key: string, fallback: string) => {\n const value = translate(key);\n return value === key ? fallback : value;\n };\n const { currentUser, navigateTo, getPath } = useBotlit();\n const { data: bots, loading: botsLoading } = useBots();\n const { data: agents, loading: agentsLoading } = useAgents();\n\n const stats = [\n {\n label: t('botlit.dashboard.stats.totalBots', 'Total Bots'),\n value: bots?.length || 0,\n icon: <AppWindow className=\"h-5 w-5\" />,\n hero: true,\n },\n {\n label: t('botlit.dashboard.stats.activeAgents', 'Active Agents'),\n value: agents?.filter((a: { status: string }) => a.status === 'ACTIVE').length || 0,\n icon: <Bot className=\"h-5 w-5\" />,\n hero: false,\n },\n ];\n\n const firstName = currentUser?.name ? currentUser.name.split(' ')[0] : '';\n\n return (\n <PageLayout\n hero\n title={\n <>\n {t('botlit.dashboard.title', 'Welcome back')}\n {firstName ? (\n <>\n , <GradientText>{firstName}</GradientText>\n </>\n ) : null}\n </>\n }\n description={t(\n 'botlit.dashboard.description',\n \"Here's an overview of your AI agents and bots\"\n )}\n actions={\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n leftIcon={<Plus size={16} />}\n onClick={() => navigateTo('bots/new')}\n >\n {t('botlit.dashboard.actions.newBot', 'New Bot')}\n </Button>\n <Button leftIcon={<Bot size={16} />} onClick={() => navigateTo('agents/new')}>\n {t('botlit.dashboard.actions.createAgent', 'Create Agent')}\n </Button>\n </div>\n }\n >\n <div className=\"space-y-6\">\n <PagePurpose icon={<Zap size={18} />}>\n {t(\n 'botlit.dashboard.purpose',\n 'This is your home base — a quick pulse on every bot and agent in your workspace. Glance at the headline numbers, jump back into recent work, and use the quick actions below to start something new. If you are just getting started, create your first agent and connect it to a bot.'\n )}\n </PagePurpose>\n\n {/* Stats Grid */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {stats.map((stat) => (\n <Card key={stat.label} treatment={stat.hero ? 'glass' : 'metric'} glow={stat.hero}>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center gap-4\">\n <div className=\"p-3 rounded-lg bg-[var(--color-accent-soft)] text-text-primary [&>svg]:text-text-primary\">\n {stat.icon}\n </div>\n <div>\n <p className=\"text-2xl font-bold text-text-primary tabular-nums\">\n {stat.value}\n </p>\n <p className=\"text-sm text-text-secondary\">{stat.label}</p>\n </div>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n {/* Main Content Grid */}\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n {/* Recent Bots */}\n <Card treatment=\"insight\">\n <CardHeader className=\"flex flex-row items-center justify-between\">\n <CardTitle>{t('botlit.dashboard.recentBots.title', 'Recent Bots')}</CardTitle>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n rightIcon={<ArrowRight size={16} />}\n onClick={() => navigateTo('bots')}\n >\n {t('botlit.common.viewAll', 'View All')}\n </Button>\n </CardHeader>\n <CardContent>\n {botsLoading ? (\n <div className=\"space-y-3\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer\"\n />\n ))}\n </div>\n ) : bots && bots.length > 0 ? (\n <div className=\"space-y-3\">\n {bots.slice(0, 4).map((bot) => (\n <Link\n key={bot.id}\n to={getPath(`bots/${bot.id}`)}\n className=\"flex items-center justify-between p-3 rounded-lg border border-border-seam hover:border-border-strong hover:bg-accent transition-colors\"\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"text-2xl\">{bot.icon || '🤖'}</span>\n <div>\n <p className=\"font-medium text-text-primary\">{bot.name}</p>\n <p className=\"text-xs text-text-secondary\">\n {bot.executionCount || 0} {t('botlit.common.executions', 'executions')}\n </p>\n </div>\n </div>\n <StatusBadge status={bot.status} />\n </Link>\n ))}\n </div>\n ) : (\n <div className=\"text-center py-8 text-text-secondary\">\n <AppWindow className=\"h-8 w-8 mx-auto mb-2 opacity-50\" />\n <p>{t('botlit.dashboard.recentBots.emptyTitle', 'No bots yet')}</p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-3\"\n onClick={() => navigateTo('bots/new')}\n >\n {t('botlit.dashboard.recentBots.emptyAction', 'Create your first bot')}\n </Button>\n </div>\n )}\n </CardContent>\n </Card>\n\n {/* Active Agents */}\n <Card treatment=\"insight\">\n <CardHeader className=\"flex flex-row items-center justify-between\">\n <CardTitle>{t('botlit.dashboard.activeAgents.title', 'Active Agents')}</CardTitle>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n rightIcon={<ArrowRight size={16} />}\n onClick={() => navigateTo('agents')}\n >\n {t('botlit.common.viewAll', 'View All')}\n </Button>\n </CardHeader>\n <CardContent>\n {agentsLoading ? (\n <div className=\"space-y-3\">\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n className=\"h-16 bg-bg-sunken rounded-lg motion-safe:animate-vc-shimmer\"\n />\n ))}\n </div>\n ) : agents && agents.length > 0 ? (\n <div className=\"space-y-3\">\n {agents\n .filter((a) => a.status === 'ACTIVE')\n .slice(0, 4)\n .map((agent) => (\n <Link\n key={agent.id}\n to={getPath(`agents/${agent.id}`)}\n className=\"flex items-center justify-between p-3 rounded-lg border border-border-seam hover:border-border-strong hover:bg-accent transition-colors\"\n >\n <div className=\"flex items-center gap-3\">\n <span className=\"relative text-2xl\">\n 🤖\n <span className=\"absolute -right-0.5 -top-0.5 size-2 rounded-full bg-status-success-text motion-safe:animate-vc-glow-pulse\" />\n </span>\n <div>\n <p className=\"font-medium text-text-primary\">{agent.name}</p>\n <p className=\"text-xs text-text-secondary\">\n {formatNumber(agent.executionCount ?? 0)}{' '}\n {t('botlit.common.executions', 'executions')}\n </p>\n </div>\n </div>\n </Link>\n ))}\n </div>\n ) : (\n <div className=\"text-center py-8 text-text-secondary\">\n <Bot className=\"h-8 w-8 mx-auto mb-2 opacity-50\" />\n <p>{t('botlit.dashboard.activeAgents.emptyTitle', 'No active agents')}</p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-3\"\n onClick={() => navigateTo('agents/new')}\n >\n {t('botlit.dashboard.activeAgents.emptyAction', 'Create your first agent')}\n </Button>\n </div>\n )}\n </CardContent>\n </Card>\n </div>\n\n {/* Quick Actions */}\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-6\">\n <h2 className=\"text-lg font-semibold tracking-tight text-text-primary\">\n {t('botlit.dashboard.quickActions.title', 'Quick Actions')}\n </h2>\n <div className=\"mt-4 grid grid-cols-2 md:grid-cols-4 gap-4\">\n <Link\n to={getPath('bots/new')}\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <AppWindow className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.createBot', 'Create Bot')}\n </span>\n </Link>\n <Link\n to={getPath('agents/new')}\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <Bot className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.buildAgent', 'Build Agent')}\n </span>\n </Link>\n <Link\n to={getPath('knowledge/new')}\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <BookOpen className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.addKnowledge', 'Add Knowledge')}\n </span>\n </Link>\n <a\n href=\"/conversations\"\n className=\"flex flex-col items-center gap-2 p-4 rounded-card border border-border-seam bg-bg-surface hover:border-border-strong hover:shadow-elevation-2 transition-[box-shadow,border-color]\"\n >\n <Zap className=\"h-8 w-8 text-text-secondary\" />\n <span className=\"text-sm font-medium\">\n {t('botlit.dashboard.quickActions.quickChat', 'Quick Chat')}\n </span>\n </a>\n </div>\n </GlassCard>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;AAmBA,IAAa,UAA0B;CACrC,IAAM,EAAE,GAAG,MAAc,GAAS,EAC5B,KAAK,GAAa,MAAqB;EAC3C,IAAM,IAAQ,EAAU,EAAI;AAC5B,SAAO,MAAU,IAAM,IAAW;IAE9B,EAAE,gBAAa,eAAY,eAAY,GAAW,EAClD,EAAE,MAAM,GAAM,SAAS,MAAgB,GAAS,EAChD,EAAE,MAAM,GAAQ,SAAS,MAAkB,GAAW,EAEtD,IAAQ,CACZ;EACE,OAAO,EAAE,oCAAoC,aAAa;EAC1D,OAAO,GAAM,UAAU;EACvB,MAAM,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA;EACvC,MAAM;EACP,EACD;EACE,OAAO,EAAE,uCAAuC,gBAAgB;EAChE,OAAO,GAAQ,QAAQ,MAA0B,EAAE,WAAW,SAAS,CAAC,UAAU;EAClF,MAAM,kBAAC,GAAD,EAAK,WAAU,WAAY,CAAA;EACjC,MAAM;EACP,CACF,EAEK,IAAY,GAAa,OAAO,EAAY,KAAK,MAAM,IAAI,CAAC,KAAK;AAEvE,QACE,kBAAC,GAAD;EACE,MAAA;EACA,OACE,kBAAA,GAAA,EAAA,UAAA,CACG,EAAE,0BAA0B,eAAe,EAC3C,IACC,kBAAA,GAAA,EAAA,UAAA,CAAE,MACE,kBAAC,GAAD,EAAA,UAAe,GAAyB,CAAA,CACzC,EAAA,CAAA,GACD,KACH,EAAA,CAAA;EAEL,aAAa,EACX,gCACA,gDACD;EACD,SACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,GAAD;IACE,SAAQ;IACR,UAAU,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA;IAC5B,eAAe,EAAW,WAAW;cAEpC,EAAE,mCAAmC,UAAU;IACzC,CAAA,EACT,kBAAC,GAAD;IAAQ,UAAU,kBAAC,GAAD,EAAK,MAAM,IAAM,CAAA;IAAE,eAAe,EAAW,aAAa;cACzE,EAAE,wCAAwC,eAAe;IACnD,CAAA,CACL;;YAGR,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,GAAD;KAAa,MAAM,kBAAC,GAAD,EAAK,MAAM,IAAM,CAAA;eACjC,EACC,4BACA,yRACD;KACW,CAAA;IAGd,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAM,KAAK,MACV,kBAAC,GAAD;MAAuB,WAAW,EAAK,OAAO,UAAU;MAAU,MAAM,EAAK;gBAC3E,kBAAC,GAAD;OAAa,WAAU;iBACrB,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,OAAD;SAAK,WAAU;mBACZ,EAAK;SACF,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;SAAG,WAAU;mBACV,EAAK;SACJ,CAAA,EACJ,kBAAC,KAAD;SAAG,WAAU;mBAA+B,EAAK;SAAU,CAAA,CACvD,EAAA,CAAA,CACF;;OACM,CAAA;MACT,EAdI,EAAK,MAcT,CACP;KACE,CAAA;IAGN,kBAAC,OAAD;KAAK,WAAU;eAAf,CAEE,kBAAC,GAAD;MAAM,WAAU;gBAAhB,CACE,kBAAC,GAAD;OAAY,WAAU;iBAAtB,CACE,kBAAC,GAAD,EAAA,UAAY,EAAE,qCAAqC,cAAc,EAAa,CAAA,EAC9E,kBAAC,GAAD;QACE,SAAQ;QACR,MAAK;QACL,WAAW,kBAAC,GAAD,EAAY,MAAM,IAAM,CAAA;QACnC,eAAe,EAAW,OAAO;kBAEhC,EAAE,yBAAyB,WAAW;QAChC,CAAA,CACE;UACb,kBAAC,GAAD,EAAA,UACG,IACC,kBAAC,OAAD;OAAK,WAAU;iBACZ;QAAC;QAAG;QAAG;QAAE,CAAC,KAAK,MACd,kBAAC,OAAD,EAEE,WAAU,+DACV,EAFK,EAEL,CACF;OACE,CAAA,GACJ,KAAQ,EAAK,SAAS,IACxB,kBAAC,OAAD;OAAK,WAAU;iBACZ,EAAK,MAAM,GAAG,EAAE,CAAC,KAAK,MACrB,kBAAC,GAAD;QAEE,IAAI,EAAQ,QAAQ,EAAI,KAAK;QAC7B,WAAU;kBAHZ,CAKE,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,QAAD;UAAM,WAAU;oBAAY,EAAI,QAAQ;UAAY,CAAA,EACpD,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;UAAG,WAAU;oBAAiC,EAAI;UAAS,CAAA,EAC3D,kBAAC,KAAD;UAAG,WAAU;oBAAb;WACG,EAAI,kBAAkB;WAAE;WAAE,EAAE,4BAA4B,aAAa;WACpE;YACA,EAAA,CAAA,CACF;YACN,kBAAC,GAAD,EAAa,QAAQ,EAAI,QAAU,CAAA,CAC9B;UAdA,EAAI,GAcJ,CACP;OACE,CAAA,GAEN,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,GAAD,EAAW,WAAU,mCAAoC,CAAA;QACzD,kBAAC,KAAD,EAAA,UAAI,EAAE,0CAA0C,cAAc,EAAK,CAAA;QACnE,kBAAC,GAAD;SACE,SAAQ;SACR,MAAK;SACL,WAAU;SACV,eAAe,EAAW,WAAW;mBAEpC,EAAE,2CAA2C,wBAAwB;SAC/D,CAAA;QACL;UAEI,CAAA,CACT;SAGP,kBAAC,GAAD;MAAM,WAAU;gBAAhB,CACE,kBAAC,GAAD;OAAY,WAAU;iBAAtB,CACE,kBAAC,GAAD,EAAA,UAAY,EAAE,uCAAuC,gBAAgB,EAAa,CAAA,EAClF,kBAAC,GAAD;QACE,SAAQ;QACR,MAAK;QACL,WAAW,kBAAC,GAAD,EAAY,MAAM,IAAM,CAAA;QACnC,eAAe,EAAW,SAAS;kBAElC,EAAE,yBAAyB,WAAW;QAChC,CAAA,CACE;UACb,kBAAC,GAAD,EAAA,UACG,IACC,kBAAC,OAAD;OAAK,WAAU;iBACZ;QAAC;QAAG;QAAG;QAAE,CAAC,KAAK,MACd,kBAAC,OAAD,EAEE,WAAU,+DACV,EAFK,EAEL,CACF;OACE,CAAA,GACJ,KAAU,EAAO,SAAS,IAC5B,kBAAC,OAAD;OAAK,WAAU;iBACZ,EACE,QAAQ,MAAM,EAAE,WAAW,SAAS,CACpC,MAAM,GAAG,EAAE,CACX,KAAK,MACJ,kBAAC,GAAD;QAEE,IAAI,EAAQ,UAAU,EAAM,KAAK;QACjC,WAAU;kBAEV,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,QAAD;UAAM,WAAU;oBAAhB,CAAoC,MAElC,kBAAC,QAAD,EAAM,WAAU,6GAA8G,CAAA,CACzH;aACP,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;UAAG,WAAU;oBAAiC,EAAM;UAAS,CAAA,EAC7D,kBAAC,KAAD;UAAG,WAAU;oBAAb;WACG,EAAa,EAAM,kBAAkB,EAAE;WAAE;WACzC,EAAE,4BAA4B,aAAa;WAC1C;YACA,EAAA,CAAA,CACF;;QACD,EAjBA,EAAM,GAiBN,CACP;OACA,CAAA,GAEN,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,GAAD,EAAK,WAAU,mCAAoC,CAAA;QACnD,kBAAC,KAAD,EAAA,UAAI,EAAE,4CAA4C,mBAAmB,EAAK,CAAA;QAC1E,kBAAC,GAAD;SACE,SAAQ;SACR,MAAK;SACL,WAAU;SACV,eAAe,EAAW,aAAa;mBAEtC,EAAE,6CAA6C,0BAA0B;SACnE,CAAA;QACL;UAEI,CAAA,CACT;QACH;;IAGN,kBAAC,GAAD;KAAW,WAAU;KAAQ,WAAU;eAAvC,CACE,kBAAC,MAAD;MAAI,WAAU;gBACX,EAAE,uCAAuC,gBAAgB;MACvD,CAAA,EACL,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,GAAD;QACE,IAAI,EAAQ,WAAW;QACvB,WAAU;kBAFZ,CAIE,kBAAC,GAAD,EAAW,WAAU,+BAAgC,CAAA,EACrD,kBAAC,QAAD;SAAM,WAAU;mBACb,EAAE,2CAA2C,aAAa;SACtD,CAAA,CACF;;OACP,kBAAC,GAAD;QACE,IAAI,EAAQ,aAAa;QACzB,WAAU;kBAFZ,CAIE,kBAAC,GAAD,EAAK,WAAU,+BAAgC,CAAA,EAC/C,kBAAC,QAAD;SAAM,WAAU;mBACb,EAAE,4CAA4C,cAAc;SACxD,CAAA,CACF;;OACP,kBAAC,GAAD;QACE,IAAI,EAAQ,gBAAgB;QAC5B,WAAU;kBAFZ,CAIE,kBAAC,GAAD,EAAU,WAAU,+BAAgC,CAAA,EACpD,kBAAC,QAAD;SAAM,WAAU;mBACb,EAAE,8CAA8C,gBAAgB;SAC5D,CAAA,CACF;;OACP,kBAAC,KAAD;QACE,MAAK;QACL,WAAU;kBAFZ,CAIE,kBAAC,GAAD,EAAK,WAAU,+BAAgC,CAAA,EAC/C,kBAAC,QAAD;SAAM,WAAU;mBACb,EAAE,2CAA2C,aAAa;SACtD,CAAA,CACL;;OACA;QACI;;IACR;;EACK,CAAA"}