@burdenoff/microfe-workspaces 2026.802.1 → 2026.829.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/generated/global-operations.js +44 -1
- package/dist/generated/global-operations.js.map +1 -1
- package/dist/generated/wspace-operations.js +18 -18
- package/dist/generated/wspace-operations.js.map +1 -1
- package/dist/hooks/useWorkspaceMutations.js +84 -61
- package/dist/hooks/useWorkspaceMutations.js.map +1 -1
- package/dist/pages/MembersListPage.js +3 -3
- package/dist/pages/MembersListPage.js.map +1 -1
- package/dist/pages/ProjectsListPage.js +3 -3
- package/dist/pages/ProjectsListPage.js.map +1 -1
- package/dist/pages/WorkspaceDetailPage.js +152 -114
- package/dist/pages/WorkspaceDetailPage.js.map +1 -1
- package/dist/pages/WorkspaceInvitePage.js +2 -2
- package/dist/pages/WorkspaceInvitePage.js.map +1 -1
- package/dist/pages/dashboard/DashboardCustomizer.js +62 -62
- package/dist/pages/dashboard/DashboardCustomizer.js.map +1 -1
- package/dist/pages/dashboard/DashboardPage.js +88 -69
- package/dist/pages/dashboard/DashboardPage.js.map +1 -1
- package/dist/pages/dashboard/config.js +77 -1
- package/dist/pages/dashboard/config.js.map +1 -1
- package/dist/pages/dashboard/widgets/AgentsWidget.js +56 -54
- package/dist/pages/dashboard/widgets/AgentsWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/GroupsWidget.js +29 -31
- package/dist/pages/dashboard/widgets/GroupsWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/MembersWidget.js +33 -33
- package/dist/pages/dashboard/widgets/MembersWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/ProjectsWidget.js +42 -44
- package/dist/pages/dashboard/widgets/ProjectsWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/QuickActionsWidget.js +171 -161
- package/dist/pages/dashboard/widgets/QuickActionsWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/RecentActivityWidget.js +54 -44
- package/dist/pages/dashboard/widgets/RecentActivityWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/SessionsWidget.js +57 -41
- package/dist/pages/dashboard/widgets/SessionsWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/StorageWidget.js +52 -54
- package/dist/pages/dashboard/widgets/StorageWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/TagCloudWidget.js +28 -30
- package/dist/pages/dashboard/widgets/TagCloudWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/TipsWidget.js +141 -131
- package/dist/pages/dashboard/widgets/TipsWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/UpcomingEventsWidget.js +46 -40
- package/dist/pages/dashboard/widgets/UpcomingEventsWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/VibesWidget.js +44 -34
- package/dist/pages/dashboard/widgets/VibesWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/WelcomeWidget.js +43 -41
- package/dist/pages/dashboard/widgets/WelcomeWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/WorkflowRunsWidget.js +68 -62
- package/dist/pages/dashboard/widgets/WorkflowRunsWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/WorkflowStatsWidget.js +50 -44
- package/dist/pages/dashboard/widgets/WorkflowStatsWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/WorkflowsOverviewWidget.js +59 -49
- package/dist/pages/dashboard/widgets/WorkflowsOverviewWidget.js.map +1 -1
- package/dist/pages/dashboard/widgets/WorkspacesWidget.js +35 -33
- package/dist/pages/dashboard/widgets/WorkspacesWidget.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,169 +1,179 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { tWithFallback as e } from "../../../utils/i18n.js";
|
|
2
|
+
import { WidgetWrapper as t } from "../WidgetWrapper.js";
|
|
3
|
+
import { Bot as n, Calendar as r, Cog as i, FileText as a, FolderKanban as o, GitBranch as s, LayoutTemplate as c, PlayCircle as l, Plus as u, Sparkles as d, Tags as f, Terminal as p, Upload as m, UserPlus as h, Zap as g } from "lucide-react";
|
|
4
|
+
import { jsx as _, jsxs as v } from "react/jsx-runtime";
|
|
5
|
+
import { Button as y } from "@burdenoff/fe-libs/ui";
|
|
6
|
+
import { useI18n as b } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
5
7
|
//#region src/pages/dashboard/widgets/QuickActionsWidget.tsx
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
id: "new-vibe",
|
|
66
|
-
label: "New Vibe",
|
|
67
|
-
icon: u,
|
|
68
|
-
path: "/vibecontrols/vibes/new",
|
|
69
|
-
color: "text-accent-blue"
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
id: "view-sessions",
|
|
73
|
-
label: "Sessions",
|
|
74
|
-
icon: f,
|
|
75
|
-
path: "/vibecontrols/sessions",
|
|
76
|
-
color: "text-status-success-text"
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
id: "connect-agent",
|
|
80
|
-
label: "Connect Agent",
|
|
81
|
-
icon: t,
|
|
82
|
-
path: "/vibecontrols/agents/new",
|
|
83
|
-
color: "text-accent-purple"
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
id: "invite-member",
|
|
87
|
-
label: "Invite Member",
|
|
88
|
-
icon: m,
|
|
89
|
-
path: "/workspaces/members",
|
|
90
|
-
color: "text-accent-pink"
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
id: "upload-file",
|
|
94
|
-
label: "Upload File",
|
|
95
|
-
icon: p,
|
|
96
|
-
path: "/files",
|
|
97
|
-
color: "text-status-warning-text"
|
|
98
|
-
},
|
|
99
|
-
{
|
|
100
|
-
id: "settings",
|
|
101
|
-
label: "Settings",
|
|
102
|
-
icon: r,
|
|
103
|
-
path: "/settings",
|
|
104
|
-
color: "text-accent-cyan"
|
|
105
|
-
}
|
|
106
|
-
], x = [
|
|
107
|
-
{
|
|
108
|
-
id: "new-workflow",
|
|
109
|
-
label: "New Workflow",
|
|
110
|
-
icon: o,
|
|
111
|
-
path: "/workflows/new",
|
|
112
|
-
color: "text-accent-blue"
|
|
113
|
-
},
|
|
114
|
-
{
|
|
115
|
-
id: "view-runs",
|
|
116
|
-
label: "View Runs",
|
|
117
|
-
icon: c,
|
|
118
|
-
path: "/workflows/runs",
|
|
119
|
-
color: "text-status-success-text"
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
id: "browse-templates",
|
|
123
|
-
label: "Templates",
|
|
124
|
-
icon: s,
|
|
125
|
-
path: "/workflows/templates",
|
|
126
|
-
color: "text-accent-purple"
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
id: "invite-member",
|
|
130
|
-
label: "Invite Member",
|
|
131
|
-
icon: m,
|
|
132
|
-
path: "/workspaces/members",
|
|
133
|
-
color: "text-accent-pink"
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
id: "upload-file",
|
|
137
|
-
label: "Upload File",
|
|
138
|
-
icon: p,
|
|
139
|
-
path: "/files",
|
|
140
|
-
color: "text-status-warning-text"
|
|
141
|
-
},
|
|
142
|
-
{
|
|
143
|
-
id: "settings",
|
|
144
|
-
label: "Settings",
|
|
145
|
-
icon: r,
|
|
146
|
-
path: "/settings",
|
|
147
|
-
color: "text-accent-cyan"
|
|
148
|
-
}
|
|
149
|
-
];
|
|
150
|
-
function S(e) {
|
|
151
|
-
return e === "vibecontrols" ? b : e === "fluidgrids" ? x : y;
|
|
8
|
+
function x(t) {
|
|
9
|
+
return [
|
|
10
|
+
{
|
|
11
|
+
id: "create-workspace",
|
|
12
|
+
label: e(t, "dashboard.quickActions.newWorkspace", "New Workspace"),
|
|
13
|
+
icon: u,
|
|
14
|
+
path: "/workspaces/list",
|
|
15
|
+
color: "text-accent-blue"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
id: "create-project",
|
|
19
|
+
label: e(t, "dashboard.quickActions.newProject", "New Project"),
|
|
20
|
+
icon: o,
|
|
21
|
+
path: "/workspaces/projects",
|
|
22
|
+
color: "text-status-success-text"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: "invite-member",
|
|
26
|
+
label: e(t, "dashboard.quickActions.inviteMember", "Invite Member"),
|
|
27
|
+
icon: h,
|
|
28
|
+
path: "/workspaces/members",
|
|
29
|
+
color: "text-accent-purple"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: "upload-file",
|
|
33
|
+
label: e(t, "dashboard.quickActions.uploadFile", "Upload File"),
|
|
34
|
+
icon: m,
|
|
35
|
+
path: "/files",
|
|
36
|
+
color: "text-status-warning-text"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: "new-event",
|
|
40
|
+
label: e(t, "dashboard.quickActions.newEvent", "New Event"),
|
|
41
|
+
icon: r,
|
|
42
|
+
path: "/calendar",
|
|
43
|
+
color: "text-accent-pink"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
id: "manage-tags",
|
|
47
|
+
label: e(t, "dashboard.quickActions.manageTags", "Manage Tags"),
|
|
48
|
+
icon: f,
|
|
49
|
+
path: "/tags",
|
|
50
|
+
color: "text-accent-cyan"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
id: "view-workflows",
|
|
54
|
+
label: e(t, "dashboard.quickActions.workflows", "Workflows"),
|
|
55
|
+
icon: a,
|
|
56
|
+
path: "/workflows",
|
|
57
|
+
color: "text-accent-orange"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
id: "settings",
|
|
61
|
+
label: e(t, "dashboard.quickActions.settings", "Settings"),
|
|
62
|
+
icon: i,
|
|
63
|
+
path: "/settings",
|
|
64
|
+
color: "text-text-secondary"
|
|
65
|
+
}
|
|
66
|
+
];
|
|
152
67
|
}
|
|
153
|
-
function
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
68
|
+
function S(t) {
|
|
69
|
+
return [
|
|
70
|
+
{
|
|
71
|
+
id: "new-vibe",
|
|
72
|
+
label: e(t, "dashboard.quickActions.newVibe", "New Vibe"),
|
|
73
|
+
icon: d,
|
|
74
|
+
path: "/vibecontrols/vibes/new",
|
|
75
|
+
color: "text-accent-blue"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
id: "view-sessions",
|
|
79
|
+
label: e(t, "dashboard.quickActions.sessions", "Sessions"),
|
|
80
|
+
icon: p,
|
|
81
|
+
path: "/vibecontrols/sessions",
|
|
82
|
+
color: "text-status-success-text"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
id: "connect-agent",
|
|
86
|
+
label: e(t, "dashboard.quickActions.connectAgent", "Connect Agent"),
|
|
87
|
+
icon: n,
|
|
88
|
+
path: "/vibecontrols/agents/new",
|
|
89
|
+
color: "text-accent-purple"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
id: "invite-member",
|
|
93
|
+
label: e(t, "dashboard.quickActions.inviteMember", "Invite Member"),
|
|
94
|
+
icon: h,
|
|
95
|
+
path: "/workspaces/members",
|
|
96
|
+
color: "text-accent-pink"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
id: "upload-file",
|
|
100
|
+
label: e(t, "dashboard.quickActions.uploadFile", "Upload File"),
|
|
101
|
+
icon: m,
|
|
102
|
+
path: "/files",
|
|
103
|
+
color: "text-status-warning-text"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
id: "settings",
|
|
107
|
+
label: e(t, "dashboard.quickActions.settings", "Settings"),
|
|
108
|
+
icon: i,
|
|
109
|
+
path: "/settings",
|
|
110
|
+
color: "text-accent-cyan"
|
|
111
|
+
}
|
|
112
|
+
];
|
|
113
|
+
}
|
|
114
|
+
function C(t) {
|
|
115
|
+
return [
|
|
116
|
+
{
|
|
117
|
+
id: "new-workflow",
|
|
118
|
+
label: e(t, "dashboard.quickActions.newWorkflow", "New Workflow"),
|
|
119
|
+
icon: s,
|
|
120
|
+
path: "/workflows/new",
|
|
121
|
+
color: "text-accent-blue"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
id: "view-runs",
|
|
125
|
+
label: e(t, "dashboard.quickActions.viewRuns", "View Runs"),
|
|
126
|
+
icon: l,
|
|
127
|
+
path: "/workflows/runs",
|
|
128
|
+
color: "text-status-success-text"
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
id: "browse-templates",
|
|
132
|
+
label: e(t, "dashboard.quickActions.templates", "Templates"),
|
|
133
|
+
icon: c,
|
|
134
|
+
path: "/workflows/templates",
|
|
135
|
+
color: "text-accent-purple"
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
id: "invite-member",
|
|
139
|
+
label: e(t, "dashboard.quickActions.inviteMember", "Invite Member"),
|
|
140
|
+
icon: h,
|
|
141
|
+
path: "/workspaces/members",
|
|
142
|
+
color: "text-accent-pink"
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
id: "upload-file",
|
|
146
|
+
label: e(t, "dashboard.quickActions.uploadFile", "Upload File"),
|
|
147
|
+
icon: m,
|
|
148
|
+
path: "/files",
|
|
149
|
+
color: "text-status-warning-text"
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
id: "settings",
|
|
153
|
+
label: e(t, "dashboard.quickActions.settings", "Settings"),
|
|
154
|
+
icon: i,
|
|
155
|
+
path: "/settings",
|
|
156
|
+
color: "text-accent-cyan"
|
|
157
|
+
}
|
|
158
|
+
];
|
|
159
|
+
}
|
|
160
|
+
function w(e, t) {
|
|
161
|
+
return t === "vibecontrols" ? S(e) : t === "fluidgrids" ? C(e) : x(e);
|
|
162
|
+
}
|
|
163
|
+
function T({ navigate: n, isLoading: r, productId: i }) {
|
|
164
|
+
let { t: a } = b(), o = w(a, i);
|
|
165
|
+
return /* @__PURE__ */ _(t, {
|
|
166
|
+
title: e(a, "dashboard.quickActions.title", "Quick Actions"),
|
|
167
|
+
icon: /* @__PURE__ */ _(g, { className: "size-4" }),
|
|
158
168
|
size: "medium",
|
|
159
|
-
isLoading:
|
|
160
|
-
children: /* @__PURE__ */
|
|
169
|
+
isLoading: r,
|
|
170
|
+
children: /* @__PURE__ */ _("div", {
|
|
161
171
|
className: "grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-2",
|
|
162
|
-
children:
|
|
172
|
+
children: o.map((e) => /* @__PURE__ */ v(y, {
|
|
163
173
|
variant: "outline",
|
|
164
174
|
className: "flex flex-col items-center gap-1.5 h-auto py-3 px-2 text-xs hover:bg-accent/5 transition-colors",
|
|
165
|
-
onClick: () =>
|
|
166
|
-
children: [/* @__PURE__ */
|
|
175
|
+
onClick: () => n(e.path),
|
|
176
|
+
children: [/* @__PURE__ */ _(e.icon, { className: `size-5 ${e.color}` }), /* @__PURE__ */ _("span", {
|
|
167
177
|
className: "text-text-secondary font-medium",
|
|
168
178
|
children: e.label
|
|
169
179
|
})]
|
|
@@ -172,6 +182,6 @@ function C({ navigate: t, isLoading: n, productId: r }) {
|
|
|
172
182
|
});
|
|
173
183
|
}
|
|
174
184
|
//#endregion
|
|
175
|
-
export {
|
|
185
|
+
export { T as QuickActionsWidget };
|
|
176
186
|
|
|
177
187
|
//# sourceMappingURL=QuickActionsWidget.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuickActionsWidget.js","names":[],"sources":["../../../../src/pages/dashboard/widgets/QuickActionsWidget.tsx"],"sourcesContent":["import type { LucideIcon } from 'lucide-react';\nimport {\n Zap,\n Plus,\n Upload,\n UserPlus,\n FolderKanban,\n Calendar,\n FileText,\n Tags,\n Bot,\n Terminal,\n Sparkles,\n Cog,\n GitBranch,\n PlayCircle,\n LayoutTemplate,\n} from 'lucide-react';\nimport { Button } from '@burdenoff/fe-libs/ui';\nimport { WidgetWrapper } from '../WidgetWrapper';\nimport type { WidgetProps } from '../types';\n\ninterface QuickAction {\n id: string;\n label: string;\n icon: LucideIcon;\n path: string;\n color: string;\n}\n\
|
|
1
|
+
{"version":3,"file":"QuickActionsWidget.js","names":[],"sources":["../../../../src/pages/dashboard/widgets/QuickActionsWidget.tsx"],"sourcesContent":["import type { LucideIcon } from 'lucide-react';\nimport {\n Zap,\n Plus,\n Upload,\n UserPlus,\n FolderKanban,\n Calendar,\n FileText,\n Tags,\n Bot,\n Terminal,\n Sparkles,\n Cog,\n GitBranch,\n PlayCircle,\n LayoutTemplate,\n} from 'lucide-react';\nimport { Button } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport type { I18nContextValue } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { WidgetWrapper } from '../WidgetWrapper';\nimport { tWithFallback } from '../../../utils/i18n';\nimport type { WidgetProps } from '../types';\n\ntype Translate = I18nContextValue['t'];\n\ninterface QuickAction {\n id: string;\n label: string;\n icon: LucideIcon;\n path: string;\n color: string;\n}\n\nfunction workspacesQuickActions(t: Translate): QuickAction[] {\n return [\n {\n id: 'create-workspace',\n label: tWithFallback(t, 'dashboard.quickActions.newWorkspace', 'New Workspace'),\n icon: Plus,\n path: '/workspaces/list',\n color: 'text-accent-blue',\n },\n {\n id: 'create-project',\n label: tWithFallback(t, 'dashboard.quickActions.newProject', 'New Project'),\n icon: FolderKanban,\n path: '/workspaces/projects',\n color: 'text-status-success-text',\n },\n {\n id: 'invite-member',\n label: tWithFallback(t, 'dashboard.quickActions.inviteMember', 'Invite Member'),\n icon: UserPlus,\n path: '/workspaces/members',\n color: 'text-accent-purple',\n },\n {\n id: 'upload-file',\n label: tWithFallback(t, 'dashboard.quickActions.uploadFile', 'Upload File'),\n icon: Upload,\n path: '/files',\n color: 'text-status-warning-text',\n },\n {\n id: 'new-event',\n label: tWithFallback(t, 'dashboard.quickActions.newEvent', 'New Event'),\n icon: Calendar,\n path: '/calendar',\n color: 'text-accent-pink',\n },\n {\n id: 'manage-tags',\n label: tWithFallback(t, 'dashboard.quickActions.manageTags', 'Manage Tags'),\n icon: Tags,\n path: '/tags',\n color: 'text-accent-cyan',\n },\n {\n id: 'view-workflows',\n label: tWithFallback(t, 'dashboard.quickActions.workflows', 'Workflows'),\n icon: FileText,\n path: '/workflows',\n color: 'text-accent-orange',\n },\n {\n id: 'settings',\n label: tWithFallback(t, 'dashboard.quickActions.settings', 'Settings'),\n icon: Cog,\n path: '/settings',\n color: 'text-text-secondary',\n },\n ];\n}\n\nfunction vibecontrolsQuickActions(t: Translate): QuickAction[] {\n return [\n {\n id: 'new-vibe',\n label: tWithFallback(t, 'dashboard.quickActions.newVibe', 'New Vibe'),\n icon: Sparkles,\n path: '/vibecontrols/vibes/new',\n color: 'text-accent-blue',\n },\n {\n id: 'view-sessions',\n label: tWithFallback(t, 'dashboard.quickActions.sessions', 'Sessions'),\n icon: Terminal,\n path: '/vibecontrols/sessions',\n color: 'text-status-success-text',\n },\n {\n id: 'connect-agent',\n label: tWithFallback(t, 'dashboard.quickActions.connectAgent', 'Connect Agent'),\n icon: Bot,\n path: '/vibecontrols/agents/new',\n color: 'text-accent-purple',\n },\n {\n id: 'invite-member',\n label: tWithFallback(t, 'dashboard.quickActions.inviteMember', 'Invite Member'),\n icon: UserPlus,\n path: '/workspaces/members',\n color: 'text-accent-pink',\n },\n {\n id: 'upload-file',\n label: tWithFallback(t, 'dashboard.quickActions.uploadFile', 'Upload File'),\n icon: Upload,\n path: '/files',\n color: 'text-status-warning-text',\n },\n {\n id: 'settings',\n label: tWithFallback(t, 'dashboard.quickActions.settings', 'Settings'),\n icon: Cog,\n path: '/settings',\n color: 'text-accent-cyan',\n },\n ];\n}\n\nfunction fluidgridsQuickActions(t: Translate): QuickAction[] {\n return [\n {\n id: 'new-workflow',\n label: tWithFallback(t, 'dashboard.quickActions.newWorkflow', 'New Workflow'),\n icon: GitBranch,\n path: '/workflows/new',\n color: 'text-accent-blue',\n },\n {\n id: 'view-runs',\n label: tWithFallback(t, 'dashboard.quickActions.viewRuns', 'View Runs'),\n icon: PlayCircle,\n path: '/workflows/runs',\n color: 'text-status-success-text',\n },\n {\n id: 'browse-templates',\n label: tWithFallback(t, 'dashboard.quickActions.templates', 'Templates'),\n icon: LayoutTemplate,\n path: '/workflows/templates',\n color: 'text-accent-purple',\n },\n {\n id: 'invite-member',\n label: tWithFallback(t, 'dashboard.quickActions.inviteMember', 'Invite Member'),\n icon: UserPlus,\n path: '/workspaces/members',\n color: 'text-accent-pink',\n },\n {\n id: 'upload-file',\n label: tWithFallback(t, 'dashboard.quickActions.uploadFile', 'Upload File'),\n icon: Upload,\n path: '/files',\n color: 'text-status-warning-text',\n },\n {\n id: 'settings',\n label: tWithFallback(t, 'dashboard.quickActions.settings', 'Settings'),\n icon: Cog,\n path: '/settings',\n color: 'text-accent-cyan',\n },\n ];\n}\n\nfunction pickActions(t: Translate, productId?: string): QuickAction[] {\n if (productId === 'vibecontrols') return vibecontrolsQuickActions(t);\n if (productId === 'fluidgrids') return fluidgridsQuickActions(t);\n return workspacesQuickActions(t);\n}\n\nexport function QuickActionsWidget({ navigate, isLoading, productId }: WidgetProps) {\n const { t } = useI18n();\n const actions = pickActions(t, productId);\n return (\n <WidgetWrapper\n title={tWithFallback(t, 'dashboard.quickActions.title', 'Quick Actions')}\n icon={<Zap className=\"size-4\" />}\n size=\"medium\"\n isLoading={isLoading}\n >\n <div className=\"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-2\">\n {actions.map((action) => (\n <Button\n key={action.id}\n variant=\"outline\"\n className=\"flex flex-col items-center gap-1.5 h-auto py-3 px-2 text-xs hover:bg-accent/5 transition-colors\"\n onClick={() => navigate(action.path)}\n >\n <action.icon className={`size-5 ${action.color}`} />\n <span className=\"text-text-secondary font-medium\">{action.label}</span>\n </Button>\n ))}\n </div>\n </WidgetWrapper>\n );\n}\n"],"mappings":";;;;;;;AAmCA,SAAS,EAAuB,GAA6B;AAC3D,QAAO;EACL;GACE,IAAI;GACJ,OAAO,EAAc,GAAG,uCAAuC,gBAAgB;GAC/E,MAAM;GACN,MAAM;GACN,OAAO;GACR;EACD;GACE,IAAI;GACJ,OAAO,EAAc,GAAG,qCAAqC,cAAc;GAC3E,MAAM;GACN,MAAM;GACN,OAAO;GACR;EACD;GACE,IAAI;GACJ,OAAO,EAAc,GAAG,uCAAuC,gBAAgB;GAC/E,MAAM;GACN,MAAM;GACN,OAAO;GACR;EACD;GACE,IAAI;GACJ,OAAO,EAAc,GAAG,qCAAqC,cAAc;GAC3E,MAAM;GACN,MAAM;GACN,OAAO;GACR;EACD;GACE,IAAI;GACJ,OAAO,EAAc,GAAG,mCAAmC,YAAY;GACvE,MAAM;GACN,MAAM;GACN,OAAO;GACR;EACD;GACE,IAAI;GACJ,OAAO,EAAc,GAAG,qCAAqC,cAAc;GAC3E,MAAM;GACN,MAAM;GACN,OAAO;GACR;EACD;GACE,IAAI;GACJ,OAAO,EAAc,GAAG,oCAAoC,YAAY;GACxE,MAAM;GACN,MAAM;GACN,OAAO;GACR;EACD;GACE,IAAI;GACJ,OAAO,EAAc,GAAG,mCAAmC,WAAW;GACtE,MAAM;GACN,MAAM;GACN,OAAO;GACR;EACF;;AAGH,SAAS,EAAyB,GAA6B;AAC7D,QAAO;EACL;GACE,IAAI;GACJ,OAAO,EAAc,GAAG,kCAAkC,WAAW;GACrE,MAAM;GACN,MAAM;GACN,OAAO;GACR;EACD;GACE,IAAI;GACJ,OAAO,EAAc,GAAG,mCAAmC,WAAW;GACtE,MAAM;GACN,MAAM;GACN,OAAO;GACR;EACD;GACE,IAAI;GACJ,OAAO,EAAc,GAAG,uCAAuC,gBAAgB;GAC/E,MAAM;GACN,MAAM;GACN,OAAO;GACR;EACD;GACE,IAAI;GACJ,OAAO,EAAc,GAAG,uCAAuC,gBAAgB;GAC/E,MAAM;GACN,MAAM;GACN,OAAO;GACR;EACD;GACE,IAAI;GACJ,OAAO,EAAc,GAAG,qCAAqC,cAAc;GAC3E,MAAM;GACN,MAAM;GACN,OAAO;GACR;EACD;GACE,IAAI;GACJ,OAAO,EAAc,GAAG,mCAAmC,WAAW;GACtE,MAAM;GACN,MAAM;GACN,OAAO;GACR;EACF;;AAGH,SAAS,EAAuB,GAA6B;AAC3D,QAAO;EACL;GACE,IAAI;GACJ,OAAO,EAAc,GAAG,sCAAsC,eAAe;GAC7E,MAAM;GACN,MAAM;GACN,OAAO;GACR;EACD;GACE,IAAI;GACJ,OAAO,EAAc,GAAG,mCAAmC,YAAY;GACvE,MAAM;GACN,MAAM;GACN,OAAO;GACR;EACD;GACE,IAAI;GACJ,OAAO,EAAc,GAAG,oCAAoC,YAAY;GACxE,MAAM;GACN,MAAM;GACN,OAAO;GACR;EACD;GACE,IAAI;GACJ,OAAO,EAAc,GAAG,uCAAuC,gBAAgB;GAC/E,MAAM;GACN,MAAM;GACN,OAAO;GACR;EACD;GACE,IAAI;GACJ,OAAO,EAAc,GAAG,qCAAqC,cAAc;GAC3E,MAAM;GACN,MAAM;GACN,OAAO;GACR;EACD;GACE,IAAI;GACJ,OAAO,EAAc,GAAG,mCAAmC,WAAW;GACtE,MAAM;GACN,MAAM;GACN,OAAO;GACR;EACF;;AAGH,SAAS,EAAY,GAAc,GAAmC;AAGpE,QAFI,MAAc,iBAAuB,EAAyB,EAAE,GAChE,MAAc,eAAqB,EAAuB,EAAE,GACzD,EAAuB,EAAE;;AAGlC,SAAgB,EAAmB,EAAE,aAAU,cAAW,gBAA0B;CAClF,IAAM,EAAE,SAAM,GAAS,EACjB,IAAU,EAAY,GAAG,EAAU;AACzC,QACE,kBAAC,GAAD;EACE,OAAO,EAAc,GAAG,gCAAgC,gBAAgB;EACxE,MAAM,kBAAC,GAAD,EAAK,WAAU,UAAW,CAAA;EAChC,MAAK;EACM;YAEX,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAQ,KAAK,MACZ,kBAAC,GAAD;IAEE,SAAQ;IACR,WAAU;IACV,eAAe,EAAS,EAAO,KAAK;cAJtC,CAME,kBAAC,EAAO,MAAR,EAAa,WAAW,UAAU,EAAO,SAAW,CAAA,EACpD,kBAAC,QAAD;KAAM,WAAU;eAAmC,EAAO;KAAa,CAAA,CAChE;MAPF,EAAO,GAOL,CACT;GACE,CAAA;EACQ,CAAA"}
|
|
@@ -1,24 +1,30 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { tWithFallback as e } from "../../../utils/i18n.js";
|
|
2
|
+
import { WidgetWrapper as t } from "../WidgetWrapper.js";
|
|
3
|
+
import { Activity as n, ArrowRight as r } from "lucide-react";
|
|
4
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
5
|
+
import { Button as o, IllustratedEmptyState as s } from "@burdenoff/fe-libs/ui";
|
|
6
|
+
import { formatRelativeTime as c } from "@burdenoff/fe-libs/shared/utils";
|
|
7
|
+
import { useI18n as l } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
6
8
|
//#region src/pages/dashboard/widgets/RecentActivityWidget.tsx
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
9
|
+
function u(t, n) {
|
|
10
|
+
switch (n) {
|
|
11
|
+
case "workspace.created": return e(t, "dashboard.recentActivity.workspaceCreated", "Created workspace");
|
|
12
|
+
case "workspace.updated": return e(t, "dashboard.recentActivity.workspaceUpdated", "Updated workspace");
|
|
13
|
+
case "project.created": return e(t, "dashboard.recentActivity.projectCreated", "Created project");
|
|
14
|
+
case "project.updated": return e(t, "dashboard.recentActivity.projectUpdated", "Updated project");
|
|
15
|
+
case "member.added": return e(t, "dashboard.recentActivity.memberAdded", "Added member");
|
|
16
|
+
case "member.removed": return e(t, "dashboard.recentActivity.memberRemoved", "Removed member");
|
|
17
|
+
case "file.uploaded": return e(t, "dashboard.recentActivity.fileUploaded", "Uploaded file");
|
|
18
|
+
case "tag.created": return e(t, "dashboard.recentActivity.tagCreated", "Created tag");
|
|
19
|
+
case "tag.assigned": return e(t, "dashboard.recentActivity.tagAssigned", "Assigned tag");
|
|
20
|
+
case "workflow.started": return e(t, "dashboard.recentActivity.workflowStarted", "Started workflow");
|
|
21
|
+
case "workflow.completed": return e(t, "dashboard.recentActivity.workflowCompleted", "Completed workflow");
|
|
22
|
+
case "event.created": return e(t, "dashboard.recentActivity.eventCreated", "Created event");
|
|
23
|
+
case "comment.added": return e(t, "dashboard.recentActivity.commentAdded", "Added comment");
|
|
24
|
+
default: return;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
var d = {
|
|
22
28
|
workspace: "bg-status-info-bg-subtle text-status-info-text",
|
|
23
29
|
project: "bg-status-success-bg-subtle text-status-success-text",
|
|
24
30
|
member: "bg-accent-purple-subtle text-accent-purple",
|
|
@@ -27,41 +33,45 @@ var c = {
|
|
|
27
33
|
workflow: "bg-accent-orange-subtle text-accent-orange",
|
|
28
34
|
calendar: "bg-accent-pink-subtle text-accent-pink"
|
|
29
35
|
};
|
|
30
|
-
function
|
|
31
|
-
let
|
|
32
|
-
return /* @__PURE__ */
|
|
33
|
-
title: "Recent Activity",
|
|
34
|
-
icon: /* @__PURE__ */
|
|
36
|
+
function f({ workspaceData: f, isLoading: p, navigate: m }) {
|
|
37
|
+
let { t: h } = l(), g = f?.recentActivities ?? [];
|
|
38
|
+
return /* @__PURE__ */ i(t, {
|
|
39
|
+
title: e(h, "dashboard.recentActivity.title", "Recent Activity"),
|
|
40
|
+
icon: /* @__PURE__ */ i(n, { className: "size-4" }),
|
|
35
41
|
size: "large",
|
|
36
|
-
isLoading:
|
|
37
|
-
unavailable: !
|
|
38
|
-
headerAction: /* @__PURE__ */
|
|
42
|
+
isLoading: p,
|
|
43
|
+
unavailable: !f,
|
|
44
|
+
headerAction: /* @__PURE__ */ a(o, {
|
|
39
45
|
variant: "ghost",
|
|
40
46
|
size: "sm",
|
|
41
47
|
className: "text-xs",
|
|
42
|
-
onClick: () =>
|
|
43
|
-
children: [
|
|
48
|
+
onClick: () => m("/workspaces/activity"),
|
|
49
|
+
children: [
|
|
50
|
+
e(h, "dashboard.recentActivity.viewAll", "View all"),
|
|
51
|
+
" ",
|
|
52
|
+
/* @__PURE__ */ i(r, { className: "ml-1 size-3" })
|
|
53
|
+
]
|
|
44
54
|
}),
|
|
45
|
-
children:
|
|
55
|
+
children: g.length === 0 ? /* @__PURE__ */ i(s, {
|
|
46
56
|
illustration: "empty-data",
|
|
47
|
-
title: "No recent activity",
|
|
48
|
-
description: "Activity will appear here as you use the platform",
|
|
57
|
+
title: e(h, "dashboard.recentActivity.emptyTitle", "No recent activity"),
|
|
58
|
+
description: e(h, "dashboard.recentActivity.emptyDescription", "Activity will appear here as you use the platform"),
|
|
49
59
|
className: "py-6"
|
|
50
|
-
}) : /* @__PURE__ */
|
|
60
|
+
}) : /* @__PURE__ */ i("div", {
|
|
51
61
|
className: "space-y-1",
|
|
52
|
-
children:
|
|
53
|
-
let n = e.resourceType || "workspace",
|
|
54
|
-
return /* @__PURE__ */
|
|
62
|
+
children: g.map((e, t) => {
|
|
63
|
+
let n = e.resourceType || "workspace", r = d[n] || "bg-bg-sunken text-text-secondary", o = c(new Date(e.timestamp)), s = u(h, e.action);
|
|
64
|
+
return /* @__PURE__ */ a("div", {
|
|
55
65
|
className: "flex items-start gap-3 p-2 rounded-md hover:bg-accent/5 transition-colors",
|
|
56
|
-
children: [/* @__PURE__ */
|
|
57
|
-
className: `rounded-full size-7 flex items-center justify-center text-xs font-bold shrink-0 ${
|
|
66
|
+
children: [/* @__PURE__ */ i("div", {
|
|
67
|
+
className: `rounded-full size-7 flex items-center justify-center text-xs font-bold shrink-0 ${r}`,
|
|
58
68
|
children: n.charAt(0).toUpperCase()
|
|
59
|
-
}), /* @__PURE__ */
|
|
69
|
+
}), /* @__PURE__ */ a("div", {
|
|
60
70
|
className: "min-w-0 flex-1",
|
|
61
|
-
children: [/* @__PURE__ */
|
|
71
|
+
children: [/* @__PURE__ */ i("p", {
|
|
62
72
|
className: "text-sm text-text-primary truncate",
|
|
63
|
-
children: e.description ||
|
|
64
|
-
}), /* @__PURE__ */
|
|
73
|
+
children: e.description || s || e.action
|
|
74
|
+
}), /* @__PURE__ */ i("p", {
|
|
65
75
|
className: "text-xs text-text-secondary",
|
|
66
76
|
children: o
|
|
67
77
|
})]
|
|
@@ -72,6 +82,6 @@ function u({ workspaceData: u, isLoading: d, navigate: f }) {
|
|
|
72
82
|
});
|
|
73
83
|
}
|
|
74
84
|
//#endregion
|
|
75
|
-
export {
|
|
85
|
+
export { f as RecentActivityWidget };
|
|
76
86
|
|
|
77
87
|
//# sourceMappingURL=RecentActivityWidget.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecentActivityWidget.js","names":[],"sources":["../../../../src/pages/dashboard/widgets/RecentActivityWidget.tsx"],"sourcesContent":["import { Activity, ArrowRight } from 'lucide-react';\nimport { Button, IllustratedEmptyState } from '@burdenoff/fe-libs/ui';\nimport { WidgetWrapper } from '../WidgetWrapper';\nimport type { WidgetProps } from '../types';\nimport { formatRelativeTime } from '@burdenoff/fe-libs/shared/utils';\n\
|
|
1
|
+
{"version":3,"file":"RecentActivityWidget.js","names":[],"sources":["../../../../src/pages/dashboard/widgets/RecentActivityWidget.tsx"],"sourcesContent":["import { Activity, ArrowRight } from 'lucide-react';\nimport { Button, IllustratedEmptyState } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport type { I18nContextValue } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { WidgetWrapper } from '../WidgetWrapper';\nimport { tWithFallback } from '../../../utils/i18n';\nimport type { WidgetProps } from '../types';\nimport { formatRelativeTime } from '@burdenoff/fe-libs/shared/utils';\n\n/**\n * Human-readable label for an audit action, resolved through i18n with\n * **literal** keys.\n *\n * This used to be a `Record<string, string>` of English labels. A record\n * lookup can only ever produce a *computed* key, and the key extractor\n * (fluidgrids-app/scripts/extract-i18n-keys.ts) collects string literals only\n * — so those labels could never be extracted or seeded, and would render in\n * English in every locale forever. Spelling each action out gives the\n * extractor something to find. Unknown actions return `undefined`, exactly as\n * the record lookup did, so the caller still falls back to the raw action id.\n * [BOFF-5997]\n */\nfunction resolveActionLabel(t: I18nContextValue['t'], action: string): string | undefined {\n switch (action) {\n case 'workspace.created':\n return tWithFallback(t, 'dashboard.recentActivity.workspaceCreated', 'Created workspace');\n case 'workspace.updated':\n return tWithFallback(t, 'dashboard.recentActivity.workspaceUpdated', 'Updated workspace');\n case 'project.created':\n return tWithFallback(t, 'dashboard.recentActivity.projectCreated', 'Created project');\n case 'project.updated':\n return tWithFallback(t, 'dashboard.recentActivity.projectUpdated', 'Updated project');\n case 'member.added':\n return tWithFallback(t, 'dashboard.recentActivity.memberAdded', 'Added member');\n case 'member.removed':\n return tWithFallback(t, 'dashboard.recentActivity.memberRemoved', 'Removed member');\n case 'file.uploaded':\n return tWithFallback(t, 'dashboard.recentActivity.fileUploaded', 'Uploaded file');\n case 'tag.created':\n return tWithFallback(t, 'dashboard.recentActivity.tagCreated', 'Created tag');\n case 'tag.assigned':\n return tWithFallback(t, 'dashboard.recentActivity.tagAssigned', 'Assigned tag');\n case 'workflow.started':\n return tWithFallback(t, 'dashboard.recentActivity.workflowStarted', 'Started workflow');\n case 'workflow.completed':\n return tWithFallback(t, 'dashboard.recentActivity.workflowCompleted', 'Completed workflow');\n case 'event.created':\n return tWithFallback(t, 'dashboard.recentActivity.eventCreated', 'Created event');\n case 'comment.added':\n return tWithFallback(t, 'dashboard.recentActivity.commentAdded', 'Added comment');\n default:\n return undefined;\n }\n}\n\nconst entityIcons: Record<string, string> = {\n workspace: 'bg-status-info-bg-subtle text-status-info-text',\n project: 'bg-status-success-bg-subtle text-status-success-text',\n member: 'bg-accent-purple-subtle text-accent-purple',\n file: 'bg-status-warning-bg-subtle text-status-warning-text',\n tag: 'bg-accent-cyan-subtle text-accent-cyan',\n workflow: 'bg-accent-orange-subtle text-accent-orange',\n calendar: 'bg-accent-pink-subtle text-accent-pink',\n};\n\nexport function RecentActivityWidget({ workspaceData, isLoading, navigate }: WidgetProps) {\n const { t } = useI18n();\n const activities = workspaceData?.recentActivities ?? [];\n\n return (\n <WidgetWrapper\n title={tWithFallback(t, 'dashboard.recentActivity.title', 'Recent Activity')}\n icon={<Activity className=\"size-4\" />}\n size=\"large\"\n isLoading={isLoading}\n unavailable={!workspaceData}\n headerAction={\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-xs\"\n onClick={() => navigate('/workspaces/activity')}\n >\n {tWithFallback(t, 'dashboard.recentActivity.viewAll', 'View all')}{' '}\n <ArrowRight className=\"ml-1 size-3\" />\n </Button>\n }\n >\n {activities.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={tWithFallback(t, 'dashboard.recentActivity.emptyTitle', 'No recent activity')}\n description={tWithFallback(\n t,\n 'dashboard.recentActivity.emptyDescription',\n 'Activity will appear here as you use the platform'\n )}\n className=\"py-6\"\n />\n ) : (\n <div className=\"space-y-1\">\n {activities.map((activity, idx) => {\n const resourceType = activity.resourceType || 'workspace';\n const colorClass = entityIcons[resourceType] || 'bg-bg-sunken text-text-secondary';\n const timeAgo = formatRelativeTime(new Date(activity.timestamp));\n const actionLabel = resolveActionLabel(t, activity.action);\n return (\n <div\n key={activity.id || idx}\n className=\"flex items-start gap-3 p-2 rounded-md hover:bg-accent/5 transition-colors\"\n >\n <div\n className={`rounded-full size-7 flex items-center justify-center text-xs font-bold shrink-0 ${colorClass}`}\n >\n {resourceType.charAt(0).toUpperCase()}\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm text-text-primary truncate\">\n {activity.description || actionLabel || activity.action}\n </p>\n <p className=\"text-xs text-text-secondary\">{timeAgo}</p>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </WidgetWrapper>\n );\n}\n"],"mappings":";;;;;;;;AAsBA,SAAS,EAAmB,GAA0B,GAAoC;AACxF,SAAQ,GAAR;EACE,KAAK,oBACH,QAAO,EAAc,GAAG,6CAA6C,oBAAoB;EAC3F,KAAK,oBACH,QAAO,EAAc,GAAG,6CAA6C,oBAAoB;EAC3F,KAAK,kBACH,QAAO,EAAc,GAAG,2CAA2C,kBAAkB;EACvF,KAAK,kBACH,QAAO,EAAc,GAAG,2CAA2C,kBAAkB;EACvF,KAAK,eACH,QAAO,EAAc,GAAG,wCAAwC,eAAe;EACjF,KAAK,iBACH,QAAO,EAAc,GAAG,0CAA0C,iBAAiB;EACrF,KAAK,gBACH,QAAO,EAAc,GAAG,yCAAyC,gBAAgB;EACnF,KAAK,cACH,QAAO,EAAc,GAAG,uCAAuC,cAAc;EAC/E,KAAK,eACH,QAAO,EAAc,GAAG,wCAAwC,eAAe;EACjF,KAAK,mBACH,QAAO,EAAc,GAAG,4CAA4C,mBAAmB;EACzF,KAAK,qBACH,QAAO,EAAc,GAAG,8CAA8C,qBAAqB;EAC7F,KAAK,gBACH,QAAO,EAAc,GAAG,yCAAyC,gBAAgB;EACnF,KAAK,gBACH,QAAO,EAAc,GAAG,yCAAyC,gBAAgB;EACnF,QACE;;;AAIN,IAAM,IAAsC;CAC1C,WAAW;CACX,SAAS;CACT,QAAQ;CACR,MAAM;CACN,KAAK;CACL,UAAU;CACV,UAAU;CACX;AAED,SAAgB,EAAqB,EAAE,kBAAe,cAAW,eAAyB;CACxF,IAAM,EAAE,SAAM,GAAS,EACjB,IAAa,GAAe,oBAAoB,EAAE;AAExD,QACE,kBAAC,GAAD;EACE,OAAO,EAAc,GAAG,kCAAkC,kBAAkB;EAC5E,MAAM,kBAAC,GAAD,EAAU,WAAU,UAAW,CAAA;EACrC,MAAK;EACM;EACX,aAAa,CAAC;EACd,cACE,kBAAC,GAAD;GACE,SAAQ;GACR,MAAK;GACL,WAAU;GACV,eAAe,EAAS,uBAAuB;aAJjD;IAMG,EAAc,GAAG,oCAAoC,WAAW;IAAE;IACnE,kBAAC,GAAD,EAAY,WAAU,eAAgB,CAAA;IAC/B;;YAGV,EAAW,WAAW,IACrB,kBAAC,GAAD;GACE,cAAa;GACb,OAAO,EAAc,GAAG,uCAAuC,qBAAqB;GACpF,aAAa,EACX,GACA,6CACA,oDACD;GACD,WAAU;GACV,CAAA,GAEF,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAW,KAAK,GAAU,MAAQ;IACjC,IAAM,IAAe,EAAS,gBAAgB,aACxC,IAAa,EAAY,MAAiB,oCAC1C,IAAU,EAAmB,IAAI,KAAK,EAAS,UAAU,CAAC,EAC1D,IAAc,EAAmB,GAAG,EAAS,OAAO;AAC1D,WACE,kBAAC,OAAD;KAEE,WAAU;eAFZ,CAIE,kBAAC,OAAD;MACE,WAAW,mFAAmF;gBAE7F,EAAa,OAAO,EAAE,CAAC,aAAa;MACjC,CAAA,EACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,KAAD;OAAG,WAAU;iBACV,EAAS,eAAe,KAAe,EAAS;OAC/C,CAAA,EACJ,kBAAC,KAAD;OAAG,WAAU;iBAA+B;OAAY,CAAA,CACpD;QACF;OAdC,EAAS,MAAM,EAchB;KAER;GACE,CAAA;EAEM,CAAA"}
|