@burdenoff/microfe-workspaces 2026.510.50
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/README.md +88 -0
- package/dist/WorkspacesRoot.d.ts +35 -0
- package/dist/WorkspacesRoot.d.ts.map +1 -0
- package/dist/WorkspacesRoot.js +71 -0
- package/dist/WorkspacesRoot.js.map +1 -0
- package/dist/WorkspacesRoutes.d.ts +10 -0
- package/dist/WorkspacesRoutes.d.ts.map +1 -0
- package/dist/WorkspacesRoutes.js +111 -0
- package/dist/WorkspacesRoutes.js.map +1 -0
- package/dist/components/CreateProjectDialog.d.ts +6 -0
- package/dist/components/CreateProjectDialog.d.ts.map +1 -0
- package/dist/components/CreateProjectDialog.js +115 -0
- package/dist/components/CreateProjectDialog.js.map +1 -0
- package/dist/components/CreateWorkspaceDialog.d.ts +2 -0
- package/dist/components/CreateWorkspaceDialog.d.ts.map +1 -0
- package/dist/components/CreateWorkspaceDialog.js +172 -0
- package/dist/components/CreateWorkspaceDialog.js.map +1 -0
- package/dist/components/InviteMemberDialog.d.ts +7 -0
- package/dist/components/InviteMemberDialog.d.ts.map +1 -0
- package/dist/components/InviteMemberDialog.js +148 -0
- package/dist/components/InviteMemberDialog.js.map +1 -0
- package/dist/components/MemberListItem.d.ts +11 -0
- package/dist/components/MemberListItem.d.ts.map +1 -0
- package/dist/components/MemberListItem.js +118 -0
- package/dist/components/MemberListItem.js.map +1 -0
- package/dist/components/ProjectCard.d.ts +13 -0
- package/dist/components/ProjectCard.d.ts.map +1 -0
- package/dist/components/ProjectCard.js +150 -0
- package/dist/components/ProjectCard.js.map +1 -0
- package/dist/components/WorkspaceCard.d.ts +8 -0
- package/dist/components/WorkspaceCard.d.ts.map +1 -0
- package/dist/components/WorkspaceCard.js +79 -0
- package/dist/components/WorkspaceCard.js.map +1 -0
- package/dist/components/WorkspacesErrorBoundary.d.ts +27 -0
- package/dist/components/WorkspacesErrorBoundary.d.ts.map +1 -0
- package/dist/components/WorkspacesErrorBoundary.js +136 -0
- package/dist/components/WorkspacesErrorBoundary.js.map +1 -0
- package/dist/components/index.d.ts +8 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +7 -0
- package/dist/constants/permissions.d.ts +33 -0
- package/dist/constants/permissions.d.ts.map +1 -0
- package/dist/constants/permissions.js +31 -0
- package/dist/constants/permissions.js.map +1 -0
- package/dist/generated/global-operations.d.ts +279 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-operations.js +103 -0
- package/dist/generated/global-operations.js.map +1 -0
- package/dist/generated/global-types.d.ts +20714 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/wspace-operations.d.ts +2209 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-operations.js +576 -0
- package/dist/generated/wspace-operations.js.map +1 -0
- package/dist/generated/wspace-types.d.ts +54990 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +7 -0
- package/dist/hooks/useMemberMutations.d.ts +61 -0
- package/dist/hooks/useMemberMutations.d.ts.map +1 -0
- package/dist/hooks/useMemberMutations.js +263 -0
- package/dist/hooks/useMemberMutations.js.map +1 -0
- package/dist/hooks/useProjectMutations.d.ts +26 -0
- package/dist/hooks/useProjectMutations.d.ts.map +1 -0
- package/dist/hooks/useProjectMutations.js +127 -0
- package/dist/hooks/useProjectMutations.js.map +1 -0
- package/dist/hooks/useProjects.d.ts +16 -0
- package/dist/hooks/useProjects.d.ts.map +1 -0
- package/dist/hooks/useProjects.js +103 -0
- package/dist/hooks/useProjects.js.map +1 -0
- package/dist/hooks/useScopedNavigation.d.ts +4 -0
- package/dist/hooks/useScopedNavigation.d.ts.map +1 -0
- package/dist/hooks/useScopedNavigation.js +11 -0
- package/dist/hooks/useScopedNavigation.js.map +1 -0
- package/dist/hooks/useTenants.d.ts +13 -0
- package/dist/hooks/useTenants.d.ts.map +1 -0
- package/dist/hooks/useTenants.js +47 -0
- package/dist/hooks/useTenants.js.map +1 -0
- package/dist/hooks/useWorkspaceActivity.d.ts +12 -0
- package/dist/hooks/useWorkspaceActivity.d.ts.map +1 -0
- package/dist/hooks/useWorkspaceActivity.js +31 -0
- package/dist/hooks/useWorkspaceActivity.js.map +1 -0
- package/dist/hooks/useWorkspaceMembers.d.ts +24 -0
- package/dist/hooks/useWorkspaceMembers.d.ts.map +1 -0
- package/dist/hooks/useWorkspaceMembers.js +130 -0
- package/dist/hooks/useWorkspaceMembers.js.map +1 -0
- package/dist/hooks/useWorkspaceMutations.d.ts +36 -0
- package/dist/hooks/useWorkspaceMutations.d.ts.map +1 -0
- package/dist/hooks/useWorkspaceMutations.js +119 -0
- package/dist/hooks/useWorkspaceMutations.js.map +1 -0
- package/dist/hooks/useWorkspacePermissions.d.ts +29 -0
- package/dist/hooks/useWorkspacePermissions.d.ts.map +1 -0
- package/dist/hooks/useWorkspacePermissions.js +33 -0
- package/dist/hooks/useWorkspacePermissions.js.map +1 -0
- package/dist/hooks/useWorkspaceRoles.d.ts +8 -0
- package/dist/hooks/useWorkspaceRoles.d.ts.map +1 -0
- package/dist/hooks/useWorkspaceRoles.js +31 -0
- package/dist/hooks/useWorkspaceRoles.js.map +1 -0
- package/dist/hooks/useWorkspaces.d.ts +21 -0
- package/dist/hooks/useWorkspaces.d.ts.map +1 -0
- package/dist/hooks/useWorkspaces.js +75 -0
- package/dist/hooks/useWorkspaces.js.map +1 -0
- package/dist/hooks/useWorkspacesEventEmitter.d.ts +14 -0
- package/dist/hooks/useWorkspacesEventEmitter.d.ts.map +1 -0
- package/dist/hooks/useWorkspacesEventEmitter.js +14 -0
- package/dist/hooks/useWorkspacesEventEmitter.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/pages/ActivityListPage.d.ts +2 -0
- package/dist/pages/ActivityListPage.d.ts.map +1 -0
- package/dist/pages/ActivityListPage.js +119 -0
- package/dist/pages/ActivityListPage.js.map +1 -0
- package/dist/pages/CreateWorkspacePage.d.ts +2 -0
- package/dist/pages/CreateWorkspacePage.d.ts.map +1 -0
- package/dist/pages/CreateWorkspacePage.js +264 -0
- package/dist/pages/CreateWorkspacePage.js.map +1 -0
- package/dist/pages/InviteAcceptancePage.d.ts +6 -0
- package/dist/pages/InviteAcceptancePage.d.ts.map +1 -0
- package/dist/pages/InviteAcceptancePage.js +495 -0
- package/dist/pages/InviteAcceptancePage.js.map +1 -0
- package/dist/pages/MembersListPage.d.ts +2 -0
- package/dist/pages/MembersListPage.d.ts.map +1 -0
- package/dist/pages/MembersListPage.js +420 -0
- package/dist/pages/MembersListPage.js.map +1 -0
- package/dist/pages/ProjectDetailPage.d.ts +2 -0
- package/dist/pages/ProjectDetailPage.d.ts.map +1 -0
- package/dist/pages/ProjectDetailPage.js +361 -0
- package/dist/pages/ProjectDetailPage.js.map +1 -0
- package/dist/pages/ProjectsListPage.d.ts +2 -0
- package/dist/pages/ProjectsListPage.d.ts.map +1 -0
- package/dist/pages/ProjectsListPage.js +398 -0
- package/dist/pages/ProjectsListPage.js.map +1 -0
- package/dist/pages/WorkspaceDetailPage.d.ts +2 -0
- package/dist/pages/WorkspaceDetailPage.d.ts.map +1 -0
- package/dist/pages/WorkspaceDetailPage.js +230 -0
- package/dist/pages/WorkspaceDetailPage.js.map +1 -0
- package/dist/pages/WorkspaceSettingsPage.d.ts +2 -0
- package/dist/pages/WorkspaceSettingsPage.d.ts.map +1 -0
- package/dist/pages/WorkspaceSettingsPage.js +157 -0
- package/dist/pages/WorkspaceSettingsPage.js.map +1 -0
- package/dist/pages/WorkspacesListPage.d.ts +2 -0
- package/dist/pages/WorkspacesListPage.d.ts.map +1 -0
- package/dist/pages/WorkspacesListPage.js +186 -0
- package/dist/pages/WorkspacesListPage.js.map +1 -0
- package/dist/pages/dashboard/DashboardCustomizer.d.ts +12 -0
- package/dist/pages/dashboard/DashboardCustomizer.d.ts.map +1 -0
- package/dist/pages/dashboard/DashboardCustomizer.js +136 -0
- package/dist/pages/dashboard/DashboardCustomizer.js.map +1 -0
- package/dist/pages/dashboard/DashboardGrid.d.ts +8 -0
- package/dist/pages/dashboard/DashboardGrid.d.ts.map +1 -0
- package/dist/pages/dashboard/DashboardGrid.js +58 -0
- package/dist/pages/dashboard/DashboardGrid.js.map +1 -0
- package/dist/pages/dashboard/DashboardPage.d.ts +14 -0
- package/dist/pages/dashboard/DashboardPage.d.ts.map +1 -0
- package/dist/pages/dashboard/DashboardPage.js +136 -0
- package/dist/pages/dashboard/DashboardPage.js.map +1 -0
- package/dist/pages/dashboard/WidgetWrapper.d.ts +17 -0
- package/dist/pages/dashboard/WidgetWrapper.d.ts.map +1 -0
- package/dist/pages/dashboard/WidgetWrapper.js +72 -0
- package/dist/pages/dashboard/WidgetWrapper.js.map +1 -0
- package/dist/pages/dashboard/config.d.ts +9 -0
- package/dist/pages/dashboard/config.d.ts.map +1 -0
- package/dist/pages/dashboard/config.js +214 -0
- package/dist/pages/dashboard/config.js.map +1 -0
- package/dist/pages/dashboard/hooks/useDashboardData.d.ts +9 -0
- package/dist/pages/dashboard/hooks/useDashboardData.d.ts.map +1 -0
- package/dist/pages/dashboard/hooks/useDashboardData.js +118 -0
- package/dist/pages/dashboard/hooks/useDashboardData.js.map +1 -0
- package/dist/pages/dashboard/hooks/useDashboardPreferences.d.ts +4 -0
- package/dist/pages/dashboard/hooks/useDashboardPreferences.d.ts.map +1 -0
- package/dist/pages/dashboard/hooks/useDashboardPreferences.js +32 -0
- package/dist/pages/dashboard/hooks/useDashboardPreferences.js.map +1 -0
- package/dist/pages/dashboard/types.d.ts +145 -0
- package/dist/pages/dashboard/types.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/GroupsWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/GroupsWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/GroupsWidget.js +59 -0
- package/dist/pages/dashboard/widgets/GroupsWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/MembersWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/MembersWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/MembersWidget.js +65 -0
- package/dist/pages/dashboard/widgets/MembersWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/ProjectsWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/ProjectsWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/ProjectsWidget.js +91 -0
- package/dist/pages/dashboard/widgets/ProjectsWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/QuickActionsWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/QuickActionsWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/QuickActionsWidget.js +80 -0
- package/dist/pages/dashboard/widgets/QuickActionsWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/RecentActivityWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/RecentActivityWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/RecentActivityWidget.js +81 -0
- package/dist/pages/dashboard/widgets/RecentActivityWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/StorageWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/StorageWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/StorageWidget.js +69 -0
- package/dist/pages/dashboard/widgets/StorageWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/SystemHealthWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/SystemHealthWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/SystemHealthWidget.js +59 -0
- package/dist/pages/dashboard/widgets/SystemHealthWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/TagCloudWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/TagCloudWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/TagCloudWidget.js +61 -0
- package/dist/pages/dashboard/widgets/TagCloudWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/TipsWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/TipsWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/TipsWidget.js +67 -0
- package/dist/pages/dashboard/widgets/TipsWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/UpcomingEventsWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/UpcomingEventsWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/UpcomingEventsWidget.js +83 -0
- package/dist/pages/dashboard/widgets/UpcomingEventsWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/WelcomeWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/WelcomeWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/WelcomeWidget.js +71 -0
- package/dist/pages/dashboard/widgets/WelcomeWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/WorkflowStatsWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/WorkflowStatsWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/WorkflowStatsWidget.js +97 -0
- package/dist/pages/dashboard/widgets/WorkflowStatsWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/WorkspacesWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/WorkspacesWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/WorkspacesWidget.js +67 -0
- package/dist/pages/dashboard/widgets/WorkspacesWidget.js.map +1 -0
- package/dist/providers/WorkspacesProvider.d.ts +13 -0
- package/dist/providers/WorkspacesProvider.d.ts.map +1 -0
- package/dist/providers/WorkspacesProvider.js +24 -0
- package/dist/providers/WorkspacesProvider.js.map +1 -0
- package/dist/store/workspacesStore.d.ts +82 -0
- package/dist/store/workspacesStore.d.ts.map +1 -0
- package/dist/store/workspacesStore.js +92 -0
- package/dist/store/workspacesStore.js.map +1 -0
- package/dist/types/index.d.ts +280 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/utils/formatters.d.ts +60 -0
- package/dist/utils/formatters.d.ts.map +1 -0
- package/dist/utils/formatters.js +61 -0
- package/dist/utils/formatters.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/nativeBridge.d.ts +3 -0
- package/dist/utils/nativeBridge.d.ts.map +1 -0
- package/dist/utils/nativeBridge.js +2 -0
- package/dist/utils/projectTags.d.ts +6 -0
- package/dist/utils/projectTags.d.ts.map +1 -0
- package/dist/utils/projectTags.js +49 -0
- package/dist/utils/projectTags.js.map +1 -0
- package/dist/utils/slug.d.ts +13 -0
- package/dist/utils/slug.d.ts.map +1 -0
- package/dist/utils/slug.js +8 -0
- package/dist/utils/slug.js.map +1 -0
- package/dist/utils/tokenHelpers.d.ts +114 -0
- package/dist/utils/tokenHelpers.d.ts.map +1 -0
- package/dist/utils/tokenHelpers.js +80 -0
- package/dist/utils/tokenHelpers.js.map +1 -0
- package/package.json +113 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dashboard Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for the comprehensive workspace dashboard.
|
|
5
|
+
*/
|
|
6
|
+
export type WidgetSize = 'small' | 'medium' | 'large';
|
|
7
|
+
export interface WidgetConfig {
|
|
8
|
+
widgetId: string;
|
|
9
|
+
enabled: boolean;
|
|
10
|
+
order: number;
|
|
11
|
+
size: WidgetSize;
|
|
12
|
+
}
|
|
13
|
+
export interface WidgetDefinition {
|
|
14
|
+
id: string;
|
|
15
|
+
title: string;
|
|
16
|
+
description: string;
|
|
17
|
+
icon: string;
|
|
18
|
+
defaultSize: WidgetSize;
|
|
19
|
+
/** Whether this widget can be removed from the dashboard */
|
|
20
|
+
removable: boolean;
|
|
21
|
+
/** Minimum data source needed: 'workspace' | 'global' | 'static' */
|
|
22
|
+
dataSource: 'workspace' | 'global' | 'static';
|
|
23
|
+
}
|
|
24
|
+
export interface WorkspaceSummary {
|
|
25
|
+
id: string;
|
|
26
|
+
name: string;
|
|
27
|
+
status: string;
|
|
28
|
+
type: string;
|
|
29
|
+
createdAt: string;
|
|
30
|
+
}
|
|
31
|
+
export interface ProjectSummary {
|
|
32
|
+
id: string;
|
|
33
|
+
name: string;
|
|
34
|
+
key: string;
|
|
35
|
+
status: string;
|
|
36
|
+
workspaceId: string;
|
|
37
|
+
createdAt: string;
|
|
38
|
+
}
|
|
39
|
+
export interface ActivityItem {
|
|
40
|
+
id: string;
|
|
41
|
+
action: string;
|
|
42
|
+
resourceType: string;
|
|
43
|
+
resourceId: string;
|
|
44
|
+
userId: string;
|
|
45
|
+
description?: string;
|
|
46
|
+
details?: Record<string, unknown>;
|
|
47
|
+
timestamp: string;
|
|
48
|
+
}
|
|
49
|
+
export interface CalendarEventSummary {
|
|
50
|
+
id: string;
|
|
51
|
+
title: string;
|
|
52
|
+
startTime: string;
|
|
53
|
+
endTime: string;
|
|
54
|
+
calendarId: string;
|
|
55
|
+
allDay?: boolean;
|
|
56
|
+
}
|
|
57
|
+
export interface TagSummary {
|
|
58
|
+
id: string;
|
|
59
|
+
label: string;
|
|
60
|
+
key: string;
|
|
61
|
+
vocabularyId?: string;
|
|
62
|
+
}
|
|
63
|
+
export interface GroupSummary {
|
|
64
|
+
id: string;
|
|
65
|
+
name: string;
|
|
66
|
+
description?: string;
|
|
67
|
+
memberCount?: number;
|
|
68
|
+
}
|
|
69
|
+
export interface WorkflowStatsSummary {
|
|
70
|
+
activeWorkflowsCount: number;
|
|
71
|
+
archivedWorkflowsCount: number;
|
|
72
|
+
recentRuns: Array<{
|
|
73
|
+
id: string;
|
|
74
|
+
status: string;
|
|
75
|
+
workflowKey: string;
|
|
76
|
+
startedAt: string;
|
|
77
|
+
}>;
|
|
78
|
+
}
|
|
79
|
+
export interface StorageInfo {
|
|
80
|
+
usedBytes: number;
|
|
81
|
+
totalBytes: number;
|
|
82
|
+
fileCount?: number | null;
|
|
83
|
+
}
|
|
84
|
+
export interface WorkspaceDashboardData {
|
|
85
|
+
workspaces: {
|
|
86
|
+
items: WorkspaceSummary[];
|
|
87
|
+
total: number;
|
|
88
|
+
};
|
|
89
|
+
projects: {
|
|
90
|
+
items: ProjectSummary[];
|
|
91
|
+
total: number;
|
|
92
|
+
};
|
|
93
|
+
recentActivities: ActivityItem[];
|
|
94
|
+
upcomingEvents: CalendarEventSummary[];
|
|
95
|
+
tags: {
|
|
96
|
+
items: TagSummary[];
|
|
97
|
+
total: number;
|
|
98
|
+
};
|
|
99
|
+
groups: {
|
|
100
|
+
items: GroupSummary[];
|
|
101
|
+
totalCount: number;
|
|
102
|
+
};
|
|
103
|
+
workflowStats: WorkflowStatsSummary | null;
|
|
104
|
+
storageUsage: StorageInfo | null;
|
|
105
|
+
}
|
|
106
|
+
export interface CurrentUserInfo {
|
|
107
|
+
id: string;
|
|
108
|
+
email: string;
|
|
109
|
+
firstName?: string;
|
|
110
|
+
lastName?: string;
|
|
111
|
+
name?: string;
|
|
112
|
+
role?: string;
|
|
113
|
+
createdAt?: string;
|
|
114
|
+
}
|
|
115
|
+
export interface GlobalDashboardData {
|
|
116
|
+
currentUser: CurrentUserInfo | null;
|
|
117
|
+
dashboardPreferences: DashboardPreferences | null;
|
|
118
|
+
/** Workspaces from the global tenant service (where data actually lives) */
|
|
119
|
+
workspaces: {
|
|
120
|
+
items: WorkspaceSummary[];
|
|
121
|
+
total: number;
|
|
122
|
+
};
|
|
123
|
+
/** Organizations from the global tenant service */
|
|
124
|
+
organizations: {
|
|
125
|
+
items: Array<{
|
|
126
|
+
id: string;
|
|
127
|
+
name: string;
|
|
128
|
+
status: string;
|
|
129
|
+
type: string;
|
|
130
|
+
createdAt: string;
|
|
131
|
+
}>;
|
|
132
|
+
total: number;
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
export interface DashboardPreferences {
|
|
136
|
+
widgets: WidgetConfig[];
|
|
137
|
+
updatedAt?: string;
|
|
138
|
+
}
|
|
139
|
+
export interface WidgetProps {
|
|
140
|
+
workspaceData: WorkspaceDashboardData | null;
|
|
141
|
+
globalData: GlobalDashboardData | null;
|
|
142
|
+
isLoading: boolean;
|
|
143
|
+
navigate: (path: string) => void;
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/pages/dashboard/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupsWidget.d.ts","sourceRoot":"","sources":["../../../../src/pages/dashboard/widgets/GroupsWidget.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,wBAAgB,YAAY,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,WAAW,2CAiD/E"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { WidgetWrapper as e } from "../WidgetWrapper.js";
|
|
2
|
+
import { ArrowRight as t, Users as n } from "lucide-react";
|
|
3
|
+
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
4
|
+
import { Button as a } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
//#region src/pages/dashboard/widgets/GroupsWidget.tsx
|
|
6
|
+
function o({ workspaceData: o, isLoading: s, navigate: c }) {
|
|
7
|
+
let l = o?.groups.items ?? [], u = o?.groups.totalCount ?? 0;
|
|
8
|
+
return /* @__PURE__ */ r(e, {
|
|
9
|
+
title: "Groups",
|
|
10
|
+
icon: /* @__PURE__ */ r(n, { className: "h-4 w-4" }),
|
|
11
|
+
size: "small",
|
|
12
|
+
isLoading: s,
|
|
13
|
+
unavailable: !o,
|
|
14
|
+
headerAction: /* @__PURE__ */ r(a, {
|
|
15
|
+
variant: "ghost",
|
|
16
|
+
size: "sm",
|
|
17
|
+
className: "text-xs",
|
|
18
|
+
onClick: () => c("/groups"),
|
|
19
|
+
children: /* @__PURE__ */ r(t, { className: "h-3 w-3" })
|
|
20
|
+
}),
|
|
21
|
+
children: l.length === 0 ? /* @__PURE__ */ r("div", {
|
|
22
|
+
className: "text-center py-3",
|
|
23
|
+
children: /* @__PURE__ */ r("p", {
|
|
24
|
+
className: "text-xs text-muted-foreground",
|
|
25
|
+
children: "No groups yet"
|
|
26
|
+
})
|
|
27
|
+
}) : /* @__PURE__ */ i("div", {
|
|
28
|
+
className: "space-y-1.5",
|
|
29
|
+
children: [l.slice(0, 4).map((e) => /* @__PURE__ */ i("div", {
|
|
30
|
+
className: "flex items-center gap-2 p-1.5 rounded hover:bg-accent/5 cursor-pointer transition-colors",
|
|
31
|
+
onClick: () => c("/groups"),
|
|
32
|
+
children: [/* @__PURE__ */ r("div", {
|
|
33
|
+
className: "h-7 w-7 rounded-full bg-accent-purple-subtle text-accent-purple flex items-center justify-center text-xs font-bold shrink-0",
|
|
34
|
+
children: e.name.charAt(0).toUpperCase()
|
|
35
|
+
}), /* @__PURE__ */ i("div", {
|
|
36
|
+
className: "min-w-0",
|
|
37
|
+
children: [/* @__PURE__ */ r("p", {
|
|
38
|
+
className: "text-sm font-medium text-text-primary truncate",
|
|
39
|
+
children: e.name
|
|
40
|
+
}), e.description && /* @__PURE__ */ r("p", {
|
|
41
|
+
className: "text-[11px] text-muted-foreground truncate",
|
|
42
|
+
children: e.description
|
|
43
|
+
})]
|
|
44
|
+
})]
|
|
45
|
+
}, e.id)), u > 4 && /* @__PURE__ */ i("p", {
|
|
46
|
+
className: "text-[11px] text-muted-foreground text-center",
|
|
47
|
+
children: [
|
|
48
|
+
"+",
|
|
49
|
+
u - 4,
|
|
50
|
+
" more groups"
|
|
51
|
+
]
|
|
52
|
+
})]
|
|
53
|
+
})
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//#endregion
|
|
57
|
+
export { o as GroupsWidget };
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=GroupsWidget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupsWidget.js","names":[],"sources":["../../../../src/pages/dashboard/widgets/GroupsWidget.tsx"],"sourcesContent":["import { Users, ArrowRight } from 'lucide-react';\nimport { Button } from '@burdenoff/fe-libs/ui';\nimport { WidgetWrapper } from '../WidgetWrapper';\nimport type { WidgetProps } from '../types';\n\nexport function GroupsWidget({ workspaceData, isLoading, navigate }: WidgetProps) {\n const groups = workspaceData?.groups.items ?? [];\n const total = workspaceData?.groups.totalCount ?? 0;\n\n return (\n <WidgetWrapper\n title=\"Groups\"\n icon={<Users className=\"h-4 w-4\" />}\n size=\"small\"\n isLoading={isLoading}\n unavailable={!workspaceData}\n headerAction={\n <Button variant=\"ghost\" size=\"sm\" className=\"text-xs\" onClick={() => navigate('/groups')}>\n <ArrowRight className=\"h-3 w-3\" />\n </Button>\n }\n >\n {groups.length === 0 ? (\n <div className=\"text-center py-3\">\n <p className=\"text-xs text-muted-foreground\">No groups yet</p>\n </div>\n ) : (\n <div className=\"space-y-1.5\">\n {groups.slice(0, 4).map((group) => (\n <div\n key={group.id}\n className=\"flex items-center gap-2 p-1.5 rounded hover:bg-accent/5 cursor-pointer transition-colors\"\n onClick={() => navigate('/groups')}\n >\n <div className=\"h-7 w-7 rounded-full bg-accent-purple-subtle text-accent-purple flex items-center justify-center text-xs font-bold shrink-0\">\n {group.name.charAt(0).toUpperCase()}\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium text-text-primary truncate\">{group.name}</p>\n {group.description && (\n <p className=\"text-[11px] text-muted-foreground truncate\">{group.description}</p>\n )}\n </div>\n </div>\n ))}\n {total > 4 && (\n <p className=\"text-[11px] text-muted-foreground text-center\">\n +{total - 4} more groups\n </p>\n )}\n </div>\n )}\n </WidgetWrapper>\n );\n}\n"],"mappings":";;;;;AAKA,SAAgB,EAAa,EAAE,kBAAe,cAAW,eAAyB;CAChF,IAAM,IAAS,GAAe,OAAO,SAAS,EAAE,EAC1C,IAAQ,GAAe,OAAO,cAAc;AAElD,QACE,kBAAC,GAAD;EACE,OAAM;EACN,MAAM,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;EACnC,MAAK;EACM;EACX,aAAa,CAAC;EACd,cACE,kBAAC,GAAD;GAAQ,SAAQ;GAAQ,MAAK;GAAK,WAAU;GAAU,eAAe,EAAS,UAAU;aACtF,kBAAC,GAAD,EAAY,WAAU,WAAY,CAAA;GAC3B,CAAA;YAGV,EAAO,WAAW,IACjB,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,KAAD;IAAG,WAAU;cAAgC;IAAiB,CAAA;GAC1D,CAAA,GAEN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACG,EAAO,MAAM,GAAG,EAAE,CAAC,KAAK,MACvB,kBAAC,OAAD;IAEE,WAAU;IACV,eAAe,EAAS,UAAU;cAHpC,CAKE,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAM,KAAK,OAAO,EAAE,CAAC,aAAa;KAC/B,CAAA,EACN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,KAAD;MAAG,WAAU;gBAAkD,EAAM;MAAS,CAAA,EAC7E,EAAM,eACL,kBAAC,KAAD;MAAG,WAAU;gBAA8C,EAAM;MAAgB,CAAA,CAE/E;OACF;MAbC,EAAM,GAaP,CACN,EACD,IAAQ,KACP,kBAAC,KAAD;IAAG,WAAU;cAAb;KAA6D;KACzD,IAAQ;KAAE;KACV;MAEF;;EAEM,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MembersWidget.d.ts","sourceRoot":"","sources":["../../../../src/pages/dashboard/widgets/MembersWidget.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,wBAAgB,aAAa,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,WAAW,2CAiE5F"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { WidgetWrapper as e } from "../WidgetWrapper.js";
|
|
2
|
+
import { ArrowRight as t, UserPlus as n, Users as r } from "lucide-react";
|
|
3
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
4
|
+
import { Button as o } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
//#region src/pages/dashboard/widgets/MembersWidget.tsx
|
|
6
|
+
function s({ workspaceData: s, globalData: c, isLoading: l, navigate: u }) {
|
|
7
|
+
let d = c?.workspaces?.items ?? s?.workspaces.items ?? [], f = d.reduce((e, t) => e + (t.memberCount ?? 0), 0), p = c?.workspaces?.total ?? s?.workspaces.total ?? 0;
|
|
8
|
+
return /* @__PURE__ */ i(e, {
|
|
9
|
+
title: "Members",
|
|
10
|
+
icon: /* @__PURE__ */ i(r, { className: "h-4 w-4" }),
|
|
11
|
+
size: "small",
|
|
12
|
+
isLoading: l,
|
|
13
|
+
unavailable: !s && !c,
|
|
14
|
+
headerAction: /* @__PURE__ */ i(o, {
|
|
15
|
+
variant: "ghost",
|
|
16
|
+
size: "sm",
|
|
17
|
+
className: "text-xs",
|
|
18
|
+
onClick: () => u("/workspaces/members"),
|
|
19
|
+
children: /* @__PURE__ */ i(t, { className: "h-3 w-3" })
|
|
20
|
+
}),
|
|
21
|
+
children: /* @__PURE__ */ a("div", {
|
|
22
|
+
className: "space-y-3",
|
|
23
|
+
children: [
|
|
24
|
+
/* @__PURE__ */ a("div", {
|
|
25
|
+
className: "text-center",
|
|
26
|
+
children: [/* @__PURE__ */ i("p", {
|
|
27
|
+
className: "text-3xl font-bold text-text-primary",
|
|
28
|
+
children: f
|
|
29
|
+
}), /* @__PURE__ */ a("p", {
|
|
30
|
+
className: "text-xs text-muted-foreground",
|
|
31
|
+
children: [
|
|
32
|
+
f === 1 ? "Member" : "Members",
|
|
33
|
+
" across ",
|
|
34
|
+
p,
|
|
35
|
+
" ",
|
|
36
|
+
p === 1 ? "workspace" : "workspaces"
|
|
37
|
+
]
|
|
38
|
+
})]
|
|
39
|
+
}),
|
|
40
|
+
/* @__PURE__ */ a(o, {
|
|
41
|
+
variant: "outline",
|
|
42
|
+
size: "sm",
|
|
43
|
+
className: "w-full text-xs",
|
|
44
|
+
onClick: () => u("/workspaces/members"),
|
|
45
|
+
children: [/* @__PURE__ */ i(n, { className: "h-3 w-3 mr-1.5" }), "Invite a member"]
|
|
46
|
+
}),
|
|
47
|
+
d.length > 0 && /* @__PURE__ */ a("div", {
|
|
48
|
+
className: "flex -space-x-2 justify-center",
|
|
49
|
+
children: [d.slice(0, 5).map((e) => /* @__PURE__ */ i("div", {
|
|
50
|
+
className: "h-8 w-8 rounded-full bg-primary/10 text-primary flex items-center justify-center text-xs font-bold border-2 border-bg-surface",
|
|
51
|
+
title: e.name,
|
|
52
|
+
children: e.name.charAt(0).toUpperCase()
|
|
53
|
+
}, e.id)), p > 5 && /* @__PURE__ */ a("div", {
|
|
54
|
+
className: "h-8 w-8 rounded-full bg-muted text-muted-foreground flex items-center justify-center text-xs font-bold border-2 border-bg-surface",
|
|
55
|
+
children: ["+", p - 5]
|
|
56
|
+
})]
|
|
57
|
+
})
|
|
58
|
+
]
|
|
59
|
+
})
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//#endregion
|
|
63
|
+
export { s as MembersWidget };
|
|
64
|
+
|
|
65
|
+
//# sourceMappingURL=MembersWidget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MembersWidget.js","names":[],"sources":["../../../../src/pages/dashboard/widgets/MembersWidget.tsx"],"sourcesContent":["import { Users, UserPlus, ArrowRight } from 'lucide-react';\nimport { Button } from '@burdenoff/fe-libs/ui';\nimport { WidgetWrapper } from '../WidgetWrapper';\nimport type { WidgetProps } from '../types';\n\nexport function MembersWidget({ workspaceData, globalData, isLoading, navigate }: WidgetProps) {\n // Member count comes from globalData.workspaces (each workspace has memberCount)\n const workspaces = globalData?.workspaces?.items ?? workspaceData?.workspaces.items ?? [];\n const totalMembers = workspaces.reduce(\n (sum, ws) => sum + ((ws as { memberCount?: number }).memberCount ?? 0),\n 0\n );\n const totalWorkspaces = globalData?.workspaces?.total ?? workspaceData?.workspaces.total ?? 0;\n\n return (\n <WidgetWrapper\n title=\"Members\"\n icon={<Users className=\"h-4 w-4\" />}\n size=\"small\"\n isLoading={isLoading}\n unavailable={!workspaceData && !globalData}\n headerAction={\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-xs\"\n onClick={() => navigate('/workspaces/members')}\n >\n <ArrowRight className=\"h-3 w-3\" />\n </Button>\n }\n >\n <div className=\"space-y-3\">\n <div className=\"text-center\">\n <p className=\"text-3xl font-bold text-text-primary\">{totalMembers}</p>\n <p className=\"text-xs text-muted-foreground\">\n {totalMembers === 1 ? 'Member' : 'Members'} across {totalWorkspaces}{' '}\n {totalWorkspaces === 1 ? 'workspace' : 'workspaces'}\n </p>\n </div>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"w-full text-xs\"\n onClick={() => navigate('/workspaces/members')}\n >\n <UserPlus className=\"h-3 w-3 mr-1.5\" />\n Invite a member\n </Button>\n {workspaces.length > 0 && (\n <div className=\"flex -space-x-2 justify-center\">\n {workspaces.slice(0, 5).map((ws) => (\n <div\n key={ws.id}\n className=\"h-8 w-8 rounded-full bg-primary/10 text-primary flex items-center justify-center text-xs font-bold border-2 border-bg-surface\"\n title={ws.name}\n >\n {ws.name.charAt(0).toUpperCase()}\n </div>\n ))}\n {totalWorkspaces > 5 && (\n <div className=\"h-8 w-8 rounded-full bg-muted text-muted-foreground flex items-center justify-center text-xs font-bold border-2 border-bg-surface\">\n +{totalWorkspaces - 5}\n </div>\n )}\n </div>\n )}\n </div>\n </WidgetWrapper>\n );\n}\n"],"mappings":";;;;;AAKA,SAAgB,EAAc,EAAE,kBAAe,eAAY,cAAW,eAAyB;CAE7F,IAAM,IAAa,GAAY,YAAY,SAAS,GAAe,WAAW,SAAS,EAAE,EACnF,IAAe,EAAW,QAC7B,GAAK,MAAO,KAAQ,EAAgC,eAAe,IACpE,EACD,EACK,IAAkB,GAAY,YAAY,SAAS,GAAe,WAAW,SAAS;AAE5F,QACE,kBAAC,GAAD;EACE,OAAM;EACN,MAAM,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;EACnC,MAAK;EACM;EACX,aAAa,CAAC,KAAiB,CAAC;EAChC,cACE,kBAAC,GAAD;GACE,SAAQ;GACR,MAAK;GACL,WAAU;GACV,eAAe,EAAS,sBAAsB;aAE9C,kBAAC,GAAD,EAAY,WAAU,WAAY,CAAA;GAC3B,CAAA;YAGX,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,KAAD;MAAG,WAAU;gBAAwC;MAAiB,CAAA,EACtE,kBAAC,KAAD;MAAG,WAAU;gBAAb;OACG,MAAiB,IAAI,WAAW;OAAU;OAAS;OAAiB;OACpE,MAAoB,IAAI,cAAc;OACrC;QACA;;IACN,kBAAC,GAAD;KACE,SAAQ;KACR,MAAK;KACL,WAAU;KACV,eAAe,EAAS,sBAAsB;eAJhD,CAME,kBAAC,GAAD,EAAU,WAAU,kBAAmB,CAAA,EAAA,kBAEhC;;IACR,EAAW,SAAS,KACnB,kBAAC,OAAD;KAAK,WAAU;eAAf,CACG,EAAW,MAAM,GAAG,EAAE,CAAC,KAAK,MAC3B,kBAAC,OAAD;MAEE,WAAU;MACV,OAAO,EAAG;gBAET,EAAG,KAAK,OAAO,EAAE,CAAC,aAAa;MAC5B,EALC,EAAG,GAKJ,CACN,EACD,IAAkB,KACjB,kBAAC,OAAD;MAAK,WAAU;gBAAf,CAAmJ,KAC/I,IAAkB,EAChB;QAEJ;;IAEJ;;EACQ,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectsWidget.d.ts","sourceRoot":"","sources":["../../../../src/pages/dashboard/widgets/ProjectsWidget.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAc5C,wBAAgB,cAAc,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,WAAW,2CA8EjF"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { WidgetWrapper as e } from "../WidgetWrapper.js";
|
|
2
|
+
import { ArrowRight as t, Circle as n, FolderKanban as r } from "lucide-react";
|
|
3
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
4
|
+
import { Badge as o, Button as s } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
//#region src/pages/dashboard/widgets/ProjectsWidget.tsx
|
|
6
|
+
var c = {
|
|
7
|
+
ACTIVE: "bg-status-success-bg",
|
|
8
|
+
INACTIVE: "bg-text-tertiary",
|
|
9
|
+
ARCHIVED: "bg-status-warning-bg"
|
|
10
|
+
}, l = {
|
|
11
|
+
ACTIVE: "default",
|
|
12
|
+
INACTIVE: "secondary",
|
|
13
|
+
ARCHIVED: "outline"
|
|
14
|
+
};
|
|
15
|
+
function u({ workspaceData: u, isLoading: d, navigate: f }) {
|
|
16
|
+
let p = u?.projects.items ?? [], m = u?.projects.total ?? 0, h = p.filter((e) => e.status === "ACTIVE").length, g = p.filter((e) => e.status === "INACTIVE").length;
|
|
17
|
+
return /* @__PURE__ */ i(e, {
|
|
18
|
+
title: "Projects",
|
|
19
|
+
icon: /* @__PURE__ */ i(r, { className: "h-4 w-4" }),
|
|
20
|
+
size: "medium",
|
|
21
|
+
isLoading: d,
|
|
22
|
+
unavailable: !u,
|
|
23
|
+
headerAction: /* @__PURE__ */ a(s, {
|
|
24
|
+
variant: "ghost",
|
|
25
|
+
size: "sm",
|
|
26
|
+
className: "text-xs",
|
|
27
|
+
onClick: () => f("/workspaces/projects"),
|
|
28
|
+
children: ["View all ", /* @__PURE__ */ i(t, { className: "ml-1 h-3 w-3" })]
|
|
29
|
+
}),
|
|
30
|
+
children: p.length === 0 ? /* @__PURE__ */ a("div", {
|
|
31
|
+
className: "text-center py-4",
|
|
32
|
+
children: [/* @__PURE__ */ i("p", {
|
|
33
|
+
className: "text-sm text-muted-foreground mb-2",
|
|
34
|
+
children: "No projects yet"
|
|
35
|
+
}), /* @__PURE__ */ i(s, {
|
|
36
|
+
variant: "outline",
|
|
37
|
+
size: "sm",
|
|
38
|
+
onClick: () => f("/workspaces/projects"),
|
|
39
|
+
children: "Create a project"
|
|
40
|
+
})]
|
|
41
|
+
}) : /* @__PURE__ */ a("div", {
|
|
42
|
+
className: "space-y-3",
|
|
43
|
+
children: [m > 0 && /* @__PURE__ */ a("div", {
|
|
44
|
+
className: "flex items-center gap-3 text-xs text-muted-foreground",
|
|
45
|
+
children: [
|
|
46
|
+
/* @__PURE__ */ a("span", {
|
|
47
|
+
className: "flex items-center gap-1",
|
|
48
|
+
children: [
|
|
49
|
+
/* @__PURE__ */ i(n, { className: "h-2 w-2 fill-status-success-bg text-status-success-bg" }),
|
|
50
|
+
h,
|
|
51
|
+
" active"
|
|
52
|
+
]
|
|
53
|
+
}),
|
|
54
|
+
g > 0 && /* @__PURE__ */ a("span", {
|
|
55
|
+
className: "flex items-center gap-1",
|
|
56
|
+
children: [
|
|
57
|
+
/* @__PURE__ */ i(n, { className: "h-2 w-2 fill-text-tertiary text-text-tertiary" }),
|
|
58
|
+
g,
|
|
59
|
+
" inactive"
|
|
60
|
+
]
|
|
61
|
+
}),
|
|
62
|
+
/* @__PURE__ */ a("span", {
|
|
63
|
+
className: "ml-auto font-medium",
|
|
64
|
+
children: [m, " total"]
|
|
65
|
+
})
|
|
66
|
+
]
|
|
67
|
+
}), /* @__PURE__ */ i("div", {
|
|
68
|
+
className: "space-y-2",
|
|
69
|
+
children: p.slice(0, 4).map((e) => /* @__PURE__ */ a("div", {
|
|
70
|
+
className: "flex items-center justify-between p-2 rounded-md hover:bg-accent/5 cursor-pointer transition-colors",
|
|
71
|
+
onClick: () => f(`/workspaces/${e.workspaceId}/projects`),
|
|
72
|
+
children: [/* @__PURE__ */ a("div", {
|
|
73
|
+
className: "flex items-center gap-2 min-w-0",
|
|
74
|
+
children: [/* @__PURE__ */ i(n, { className: `h-2 w-2 ${c[e.status] || "bg-text-tertiary"} fill-current` }), /* @__PURE__ */ i("span", {
|
|
75
|
+
className: "text-sm font-medium text-text-primary truncate",
|
|
76
|
+
children: e.name
|
|
77
|
+
})]
|
|
78
|
+
}), /* @__PURE__ */ i(o, {
|
|
79
|
+
variant: l[e.status] || "outline",
|
|
80
|
+
className: "text-[10px] shrink-0",
|
|
81
|
+
children: e.key
|
|
82
|
+
})]
|
|
83
|
+
}, e.id))
|
|
84
|
+
})]
|
|
85
|
+
})
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
//#endregion
|
|
89
|
+
export { u as ProjectsWidget };
|
|
90
|
+
|
|
91
|
+
//# sourceMappingURL=ProjectsWidget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectsWidget.js","names":[],"sources":["../../../../src/pages/dashboard/widgets/ProjectsWidget.tsx"],"sourcesContent":["import { FolderKanban, ArrowRight, Circle } from 'lucide-react';\nimport { Badge, Button } from '@burdenoff/fe-libs/ui';\nimport { WidgetWrapper } from '../WidgetWrapper';\nimport type { WidgetProps } from '../types';\n\nconst statusColors: Record<string, string> = {\n ACTIVE: 'bg-status-success-bg',\n INACTIVE: 'bg-text-tertiary',\n ARCHIVED: 'bg-status-warning-bg',\n};\n\nconst statusVariant: Record<string, 'default' | 'secondary' | 'outline'> = {\n ACTIVE: 'default',\n INACTIVE: 'secondary',\n ARCHIVED: 'outline',\n};\n\nexport function ProjectsWidget({ workspaceData, isLoading, navigate }: WidgetProps) {\n const projects = workspaceData?.projects.items ?? [];\n const total = workspaceData?.projects.total ?? 0;\n\n // Status breakdown\n const activeCount = projects.filter((p) => p.status === 'ACTIVE').length;\n const inactiveCount = projects.filter((p) => p.status === 'INACTIVE').length;\n\n return (\n <WidgetWrapper\n title=\"Projects\"\n icon={<FolderKanban className=\"h-4 w-4\" />}\n size=\"medium\"\n isLoading={isLoading}\n unavailable={!workspaceData}\n headerAction={\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-xs\"\n onClick={() => navigate('/workspaces/projects')}\n >\n View all <ArrowRight className=\"ml-1 h-3 w-3\" />\n </Button>\n }\n >\n {projects.length === 0 ? (\n <div className=\"text-center py-4\">\n <p className=\"text-sm text-muted-foreground mb-2\">No projects yet</p>\n <Button variant=\"outline\" size=\"sm\" onClick={() => navigate('/workspaces/projects')}>\n Create a project\n </Button>\n </div>\n ) : (\n <div className=\"space-y-3\">\n {total > 0 && (\n <div className=\"flex items-center gap-3 text-xs text-muted-foreground\">\n <span className=\"flex items-center gap-1\">\n <Circle className=\"h-2 w-2 fill-status-success-bg text-status-success-bg\" />\n {activeCount} active\n </span>\n {inactiveCount > 0 && (\n <span className=\"flex items-center gap-1\">\n <Circle className=\"h-2 w-2 fill-text-tertiary text-text-tertiary\" />\n {inactiveCount} inactive\n </span>\n )}\n <span className=\"ml-auto font-medium\">{total} total</span>\n </div>\n )}\n <div className=\"space-y-2\">\n {projects.slice(0, 4).map((proj) => (\n <div\n key={proj.id}\n className=\"flex items-center justify-between p-2 rounded-md hover:bg-accent/5 cursor-pointer transition-colors\"\n onClick={() => navigate(`/workspaces/${proj.workspaceId}/projects`)}\n >\n <div className=\"flex items-center gap-2 min-w-0\">\n <Circle\n className={`h-2 w-2 ${statusColors[proj.status] || 'bg-text-tertiary'} fill-current`}\n />\n <span className=\"text-sm font-medium text-text-primary truncate\">\n {proj.name}\n </span>\n </div>\n <Badge\n variant={statusVariant[proj.status] || 'outline'}\n className=\"text-[10px] shrink-0\"\n >\n {proj.key}\n </Badge>\n </div>\n ))}\n </div>\n </div>\n )}\n </WidgetWrapper>\n );\n}\n"],"mappings":";;;;;AAKA,IAAM,IAAuC;CAC3C,QAAQ;CACR,UAAU;CACV,UAAU;CACX,EAEK,IAAqE;CACzE,QAAQ;CACR,UAAU;CACV,UAAU;CACX;AAED,SAAgB,EAAe,EAAE,kBAAe,cAAW,eAAyB;CAClF,IAAM,IAAW,GAAe,SAAS,SAAS,EAAE,EAC9C,IAAQ,GAAe,SAAS,SAAS,GAGzC,IAAc,EAAS,QAAQ,MAAM,EAAE,WAAW,SAAS,CAAC,QAC5D,IAAgB,EAAS,QAAQ,MAAM,EAAE,WAAW,WAAW,CAAC;AAEtE,QACE,kBAAC,GAAD;EACE,OAAM;EACN,MAAM,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA;EAC1C,MAAK;EACM;EACX,aAAa,CAAC;EACd,cACE,kBAAC,GAAD;GACE,SAAQ;GACR,MAAK;GACL,WAAU;GACV,eAAe,EAAS,uBAAuB;aAJjD,CAKC,aACU,kBAAC,GAAD,EAAY,WAAU,gBAAiB,CAAA,CACzC;;YAGV,EAAS,WAAW,IACnB,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,KAAD;IAAG,WAAU;cAAqC;IAAmB,CAAA,EACrE,kBAAC,GAAD;IAAQ,SAAQ;IAAU,MAAK;IAAK,eAAe,EAAS,uBAAuB;cAAE;IAE5E,CAAA,CACL;OAEN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACG,IAAQ,KACP,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,QAAD;MAAM,WAAU;gBAAhB;OACE,kBAAC,GAAD,EAAQ,WAAU,yDAA0D,CAAA;OAC3E;OAAY;OACR;;KACN,IAAgB,KACf,kBAAC,QAAD;MAAM,WAAU;gBAAhB;OACE,kBAAC,GAAD,EAAQ,WAAU,iDAAkD,CAAA;OACnE;OAAc;OACV;;KAET,kBAAC,QAAD;MAAM,WAAU;gBAAhB,CAAuC,GAAM,SAAa;;KACtD;OAER,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAS,MAAM,GAAG,EAAE,CAAC,KAAK,MACzB,kBAAC,OAAD;KAEE,WAAU;KACV,eAAe,EAAS,eAAe,EAAK,YAAY,WAAW;eAHrE,CAKE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD,EACE,WAAW,WAAW,EAAa,EAAK,WAAW,mBAAmB,gBACtE,CAAA,EACF,kBAAC,QAAD;OAAM,WAAU;iBACb,EAAK;OACD,CAAA,CACH;SACN,kBAAC,GAAD;MACE,SAAS,EAAc,EAAK,WAAW;MACvC,WAAU;gBAET,EAAK;MACA,CAAA,CACJ;OAlBC,EAAK,GAkBN,CACN;IACE,CAAA,CACF;;EAEM,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuickActionsWidget.d.ts","sourceRoot":"","sources":["../../../../src/pages/dashboard/widgets/QuickActionsWidget.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAgD5C,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,WAAW,2CAuBtE"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { WidgetWrapper as e } from "../WidgetWrapper.js";
|
|
2
|
+
import { Calendar as t, FileText as n, FolderKanban as r, Plus as i, Tags as a, Upload as o, UserPlus as s, Zap as c } from "lucide-react";
|
|
3
|
+
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
4
|
+
import { Button as d } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
//#region src/pages/dashboard/widgets/QuickActionsWidget.tsx
|
|
6
|
+
var f = [
|
|
7
|
+
{
|
|
8
|
+
id: "create-workspace",
|
|
9
|
+
label: "New Workspace",
|
|
10
|
+
icon: i,
|
|
11
|
+
path: "/workspaces/list",
|
|
12
|
+
color: "text-accent-blue"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
id: "create-project",
|
|
16
|
+
label: "New Project",
|
|
17
|
+
icon: r,
|
|
18
|
+
path: "/workspaces/projects",
|
|
19
|
+
color: "text-status-success-text"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: "invite-member",
|
|
23
|
+
label: "Invite Member",
|
|
24
|
+
icon: s,
|
|
25
|
+
path: "/workspaces/members",
|
|
26
|
+
color: "text-accent-purple"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: "upload-file",
|
|
30
|
+
label: "Upload File",
|
|
31
|
+
icon: o,
|
|
32
|
+
path: "/files",
|
|
33
|
+
color: "text-status-warning-text"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
id: "new-event",
|
|
37
|
+
label: "New Event",
|
|
38
|
+
icon: t,
|
|
39
|
+
path: "/calendar",
|
|
40
|
+
color: "text-accent-pink"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
id: "manage-tags",
|
|
44
|
+
label: "Manage Tags",
|
|
45
|
+
icon: a,
|
|
46
|
+
path: "/tags",
|
|
47
|
+
color: "text-accent-cyan"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
id: "view-workflows",
|
|
51
|
+
label: "Workflows",
|
|
52
|
+
icon: n,
|
|
53
|
+
path: "/workflows",
|
|
54
|
+
color: "text-accent-orange"
|
|
55
|
+
}
|
|
56
|
+
];
|
|
57
|
+
function p({ navigate: t, isLoading: n }) {
|
|
58
|
+
return /* @__PURE__ */ l(e, {
|
|
59
|
+
title: "Quick Actions",
|
|
60
|
+
icon: /* @__PURE__ */ l(c, { className: "h-4 w-4" }),
|
|
61
|
+
size: "medium",
|
|
62
|
+
isLoading: n,
|
|
63
|
+
children: /* @__PURE__ */ l("div", {
|
|
64
|
+
className: "grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-2",
|
|
65
|
+
children: f.map((e) => /* @__PURE__ */ u(d, {
|
|
66
|
+
variant: "outline",
|
|
67
|
+
className: "flex flex-col items-center gap-1.5 h-auto py-3 px-2 text-xs hover:bg-accent/5 transition-colors",
|
|
68
|
+
onClick: () => t(e.path),
|
|
69
|
+
children: [/* @__PURE__ */ l(e.icon, { className: `h-5 w-5 ${e.color}` }), /* @__PURE__ */ l("span", {
|
|
70
|
+
className: "text-text-secondary font-medium",
|
|
71
|
+
children: e.label
|
|
72
|
+
})]
|
|
73
|
+
}, e.id))
|
|
74
|
+
})
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
//#endregion
|
|
78
|
+
export { p as QuickActionsWidget };
|
|
79
|
+
|
|
80
|
+
//# sourceMappingURL=QuickActionsWidget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuickActionsWidget.js","names":[],"sources":["../../../../src/pages/dashboard/widgets/QuickActionsWidget.tsx"],"sourcesContent":["import { Zap, Plus, Upload, UserPlus, FolderKanban, Calendar, FileText, Tags } from 'lucide-react';\nimport { Button } from '@burdenoff/fe-libs/ui';\nimport { WidgetWrapper } from '../WidgetWrapper';\nimport type { WidgetProps } from '../types';\n\nconst QUICK_ACTIONS = [\n {\n id: 'create-workspace',\n label: 'New Workspace',\n icon: Plus,\n path: '/workspaces/list',\n color: 'text-accent-blue',\n },\n {\n id: 'create-project',\n label: 'New Project',\n icon: FolderKanban,\n path: '/workspaces/projects',\n color: 'text-status-success-text',\n },\n {\n id: 'invite-member',\n label: 'Invite Member',\n icon: UserPlus,\n path: '/workspaces/members',\n color: 'text-accent-purple',\n },\n {\n id: 'upload-file',\n label: 'Upload File',\n icon: Upload,\n path: '/files',\n color: 'text-status-warning-text',\n },\n {\n id: 'new-event',\n label: 'New Event',\n icon: Calendar,\n path: '/calendar',\n color: 'text-accent-pink',\n },\n { id: 'manage-tags', label: 'Manage Tags', icon: Tags, path: '/tags', color: 'text-accent-cyan' },\n {\n id: 'view-workflows',\n label: 'Workflows',\n icon: FileText,\n path: '/workflows',\n color: 'text-accent-orange',\n },\n];\n\nexport function QuickActionsWidget({ navigate, isLoading }: WidgetProps) {\n return (\n <WidgetWrapper\n title=\"Quick Actions\"\n icon={<Zap className=\"h-4 w-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 {QUICK_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={`h-5 w-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":";;;;;AAKA,IAAM,IAAgB;CACpB;EACE,IAAI;EACJ,OAAO;EACP,MAAM;EACN,MAAM;EACN,OAAO;EACR;CACD;EACE,IAAI;EACJ,OAAO;EACP,MAAM;EACN,MAAM;EACN,OAAO;EACR;CACD;EACE,IAAI;EACJ,OAAO;EACP,MAAM;EACN,MAAM;EACN,OAAO;EACR;CACD;EACE,IAAI;EACJ,OAAO;EACP,MAAM;EACN,MAAM;EACN,OAAO;EACR;CACD;EACE,IAAI;EACJ,OAAO;EACP,MAAM;EACN,MAAM;EACN,OAAO;EACR;CACD;EAAE,IAAI;EAAe,OAAO;EAAe,MAAM;EAAM,MAAM;EAAS,OAAO;EAAoB;CACjG;EACE,IAAI;EACJ,OAAO;EACP,MAAM;EACN,MAAM;EACN,OAAO;EACR;CACF;AAED,SAAgB,EAAmB,EAAE,aAAU,gBAA0B;AACvE,QACE,kBAAC,GAAD;EACE,OAAM;EACN,MAAM,kBAAC,GAAD,EAAK,WAAU,WAAY,CAAA;EACjC,MAAK;EACM;YAEX,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAc,KAAK,MAClB,kBAAC,GAAD;IAEE,SAAQ;IACR,WAAU;IACV,eAAe,EAAS,EAAO,KAAK;cAJtC,CAME,kBAAC,EAAO,MAAR,EAAa,WAAW,WAAW,EAAO,SAAW,CAAA,EACrD,kBAAC,QAAD;KAAM,WAAU;eAAmC,EAAO;KAAa,CAAA,CAChE;MAPF,EAAO,GAOL,CACT;GACE,CAAA;EACQ,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecentActivityWidget.d.ts","sourceRoot":"","sources":["../../../../src/pages/dashboard/widgets/RecentActivityWidget.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AA6B5C,wBAAgB,oBAAoB,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,WAAW,2CAyDvF"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { WidgetWrapper as e } from "../WidgetWrapper.js";
|
|
2
|
+
import { Activity as t, ArrowRight as n } from "lucide-react";
|
|
3
|
+
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
4
|
+
import { Button as a } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
import { formatRelativeTime as o } from "@burdenoff/fe-libs/shared/utils";
|
|
6
|
+
//#region src/pages/dashboard/widgets/RecentActivityWidget.tsx
|
|
7
|
+
var s = {
|
|
8
|
+
"workspace.created": "Created workspace",
|
|
9
|
+
"workspace.updated": "Updated workspace",
|
|
10
|
+
"project.created": "Created project",
|
|
11
|
+
"project.updated": "Updated project",
|
|
12
|
+
"member.added": "Added member",
|
|
13
|
+
"member.removed": "Removed member",
|
|
14
|
+
"file.uploaded": "Uploaded file",
|
|
15
|
+
"tag.created": "Created tag",
|
|
16
|
+
"tag.assigned": "Assigned tag",
|
|
17
|
+
"workflow.started": "Started workflow",
|
|
18
|
+
"workflow.completed": "Completed workflow",
|
|
19
|
+
"event.created": "Created event",
|
|
20
|
+
"comment.added": "Added comment"
|
|
21
|
+
}, c = {
|
|
22
|
+
workspace: "bg-status-info-bg-subtle text-status-info-text",
|
|
23
|
+
project: "bg-status-success-bg-subtle text-status-success-text",
|
|
24
|
+
member: "bg-accent-purple-subtle text-accent-purple",
|
|
25
|
+
file: "bg-status-warning-bg-subtle text-status-warning-text",
|
|
26
|
+
tag: "bg-accent-cyan-subtle text-accent-cyan",
|
|
27
|
+
workflow: "bg-accent-orange-subtle text-accent-orange",
|
|
28
|
+
calendar: "bg-accent-pink-subtle text-accent-pink"
|
|
29
|
+
};
|
|
30
|
+
function l({ workspaceData: l, isLoading: u, navigate: d }) {
|
|
31
|
+
let f = l?.recentActivities ?? [];
|
|
32
|
+
return /* @__PURE__ */ r(e, {
|
|
33
|
+
title: "Recent Activity",
|
|
34
|
+
icon: /* @__PURE__ */ r(t, { className: "h-4 w-4" }),
|
|
35
|
+
size: "large",
|
|
36
|
+
isLoading: u,
|
|
37
|
+
unavailable: !l,
|
|
38
|
+
headerAction: /* @__PURE__ */ i(a, {
|
|
39
|
+
variant: "ghost",
|
|
40
|
+
size: "sm",
|
|
41
|
+
className: "text-xs",
|
|
42
|
+
onClick: () => d("/workspaces/activity"),
|
|
43
|
+
children: ["View all ", /* @__PURE__ */ r(n, { className: "ml-1 h-3 w-3" })]
|
|
44
|
+
}),
|
|
45
|
+
children: f.length === 0 ? /* @__PURE__ */ i("div", {
|
|
46
|
+
className: "text-center py-6",
|
|
47
|
+
children: [/* @__PURE__ */ r("p", {
|
|
48
|
+
className: "text-sm text-muted-foreground",
|
|
49
|
+
children: "No recent activity"
|
|
50
|
+
}), /* @__PURE__ */ r("p", {
|
|
51
|
+
className: "text-xs text-muted-foreground mt-1",
|
|
52
|
+
children: "Activity will appear here as you use the platform"
|
|
53
|
+
})]
|
|
54
|
+
}) : /* @__PURE__ */ r("div", {
|
|
55
|
+
className: "space-y-1",
|
|
56
|
+
children: f.map((e, t) => {
|
|
57
|
+
let n = e.resourceType || "workspace", a = c[n] || "bg-bg-sunken text-text-secondary", l = o(new Date(e.timestamp));
|
|
58
|
+
return /* @__PURE__ */ i("div", {
|
|
59
|
+
className: "flex items-start gap-3 p-2 rounded-md hover:bg-accent/5 transition-colors",
|
|
60
|
+
children: [/* @__PURE__ */ r("div", {
|
|
61
|
+
className: `rounded-full h-7 w-7 flex items-center justify-center text-xs font-bold shrink-0 ${a}`,
|
|
62
|
+
children: n.charAt(0).toUpperCase()
|
|
63
|
+
}), /* @__PURE__ */ i("div", {
|
|
64
|
+
className: "min-w-0 flex-1",
|
|
65
|
+
children: [/* @__PURE__ */ r("p", {
|
|
66
|
+
className: "text-sm text-text-primary truncate",
|
|
67
|
+
children: e.description || s[e.action] || e.action
|
|
68
|
+
}), /* @__PURE__ */ r("p", {
|
|
69
|
+
className: "text-xs text-muted-foreground",
|
|
70
|
+
children: l
|
|
71
|
+
})]
|
|
72
|
+
})]
|
|
73
|
+
}, e.id || t);
|
|
74
|
+
})
|
|
75
|
+
})
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
//#endregion
|
|
79
|
+
export { l as RecentActivityWidget };
|
|
80
|
+
|
|
81
|
+
//# sourceMappingURL=RecentActivityWidget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecentActivityWidget.js","names":[],"sources":["../../../../src/pages/dashboard/widgets/RecentActivityWidget.tsx"],"sourcesContent":["import { Activity, ArrowRight } from 'lucide-react';\nimport { Button } from '@burdenoff/fe-libs/ui';\nimport { WidgetWrapper } from '../WidgetWrapper';\nimport type { WidgetProps } from '../types';\nimport { formatRelativeTime } from '@burdenoff/fe-libs/shared/utils';\n\nconst actionLabels: Record<string, string> = {\n 'workspace.created': 'Created workspace',\n 'workspace.updated': 'Updated workspace',\n 'project.created': 'Created project',\n 'project.updated': 'Updated project',\n 'member.added': 'Added member',\n 'member.removed': 'Removed member',\n 'file.uploaded': 'Uploaded file',\n 'tag.created': 'Created tag',\n 'tag.assigned': 'Assigned tag',\n 'workflow.started': 'Started workflow',\n 'workflow.completed': 'Completed workflow',\n 'event.created': 'Created event',\n 'comment.added': 'Added comment',\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 activities = workspaceData?.recentActivities ?? [];\n\n return (\n <WidgetWrapper\n title=\"Recent Activity\"\n icon={<Activity className=\"h-4 w-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 View all <ArrowRight className=\"ml-1 h-3 w-3\" />\n </Button>\n }\n >\n {activities.length === 0 ? (\n <div className=\"text-center py-6\">\n <p className=\"text-sm text-muted-foreground\">No recent activity</p>\n <p className=\"text-xs text-muted-foreground mt-1\">\n Activity will appear here as you use the platform\n </p>\n </div>\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 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 h-7 w-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 || actionLabels[activity.action] || activity.action}\n </p>\n <p className=\"text-xs text-muted-foreground\">{timeAgo}</p>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </WidgetWrapper>\n );\n}\n"],"mappings":";;;;;;AAMA,IAAM,IAAuC;CAC3C,qBAAqB;CACrB,qBAAqB;CACrB,mBAAmB;CACnB,mBAAmB;CACnB,gBAAgB;CAChB,kBAAkB;CAClB,iBAAiB;CACjB,eAAe;CACf,gBAAgB;CAChB,oBAAoB;CACpB,sBAAsB;CACtB,iBAAiB;CACjB,iBAAiB;CAClB,EAEK,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,IAAa,GAAe,oBAAoB,EAAE;AAExD,QACE,kBAAC,GAAD;EACE,OAAM;EACN,MAAM,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA;EACtC,MAAK;EACM;EACX,aAAa,CAAC;EACd,cACE,kBAAC,GAAD;GACE,SAAQ;GACR,MAAK;GACL,WAAU;GACV,eAAe,EAAS,uBAAuB;aAJjD,CAKC,aACU,kBAAC,GAAD,EAAY,WAAU,gBAAiB,CAAA,CACzC;;YAGV,EAAW,WAAW,IACrB,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,KAAD;IAAG,WAAU;cAAgC;IAAsB,CAAA,EACnE,kBAAC,KAAD;IAAG,WAAU;cAAqC;IAE9C,CAAA,CACA;OAEN,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;AAChE,WACE,kBAAC,OAAD;KAEE,WAAU;eAFZ,CAIE,kBAAC,OAAD;MACE,WAAW,oFAAoF;gBAE9F,EAAa,OAAO,EAAE,CAAC,aAAa;MACjC,CAAA,EACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,KAAD;OAAG,WAAU;iBACV,EAAS,eAAe,EAAa,EAAS,WAAW,EAAS;OACjE,CAAA,EACJ,kBAAC,KAAD;OAAG,WAAU;iBAAiC;OAAY,CAAA,CACtD;QACF;OAdC,EAAS,MAAM,EAchB;KAER;GACE,CAAA;EAEM,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StorageWidget.d.ts","sourceRoot":"","sources":["../../../../src/pages/dashboard/widgets/StorageWidget.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAU5C,wBAAgB,aAAa,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,WAAW,2CAsDtE"}
|