@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.
Files changed (260) hide show
  1. package/README.md +88 -0
  2. package/dist/WorkspacesRoot.d.ts +35 -0
  3. package/dist/WorkspacesRoot.d.ts.map +1 -0
  4. package/dist/WorkspacesRoot.js +71 -0
  5. package/dist/WorkspacesRoot.js.map +1 -0
  6. package/dist/WorkspacesRoutes.d.ts +10 -0
  7. package/dist/WorkspacesRoutes.d.ts.map +1 -0
  8. package/dist/WorkspacesRoutes.js +111 -0
  9. package/dist/WorkspacesRoutes.js.map +1 -0
  10. package/dist/components/CreateProjectDialog.d.ts +6 -0
  11. package/dist/components/CreateProjectDialog.d.ts.map +1 -0
  12. package/dist/components/CreateProjectDialog.js +115 -0
  13. package/dist/components/CreateProjectDialog.js.map +1 -0
  14. package/dist/components/CreateWorkspaceDialog.d.ts +2 -0
  15. package/dist/components/CreateWorkspaceDialog.d.ts.map +1 -0
  16. package/dist/components/CreateWorkspaceDialog.js +172 -0
  17. package/dist/components/CreateWorkspaceDialog.js.map +1 -0
  18. package/dist/components/InviteMemberDialog.d.ts +7 -0
  19. package/dist/components/InviteMemberDialog.d.ts.map +1 -0
  20. package/dist/components/InviteMemberDialog.js +148 -0
  21. package/dist/components/InviteMemberDialog.js.map +1 -0
  22. package/dist/components/MemberListItem.d.ts +11 -0
  23. package/dist/components/MemberListItem.d.ts.map +1 -0
  24. package/dist/components/MemberListItem.js +118 -0
  25. package/dist/components/MemberListItem.js.map +1 -0
  26. package/dist/components/ProjectCard.d.ts +13 -0
  27. package/dist/components/ProjectCard.d.ts.map +1 -0
  28. package/dist/components/ProjectCard.js +150 -0
  29. package/dist/components/ProjectCard.js.map +1 -0
  30. package/dist/components/WorkspaceCard.d.ts +8 -0
  31. package/dist/components/WorkspaceCard.d.ts.map +1 -0
  32. package/dist/components/WorkspaceCard.js +79 -0
  33. package/dist/components/WorkspaceCard.js.map +1 -0
  34. package/dist/components/WorkspacesErrorBoundary.d.ts +27 -0
  35. package/dist/components/WorkspacesErrorBoundary.d.ts.map +1 -0
  36. package/dist/components/WorkspacesErrorBoundary.js +136 -0
  37. package/dist/components/WorkspacesErrorBoundary.js.map +1 -0
  38. package/dist/components/index.d.ts +8 -0
  39. package/dist/components/index.d.ts.map +1 -0
  40. package/dist/components/index.js +7 -0
  41. package/dist/constants/permissions.d.ts +33 -0
  42. package/dist/constants/permissions.d.ts.map +1 -0
  43. package/dist/constants/permissions.js +31 -0
  44. package/dist/constants/permissions.js.map +1 -0
  45. package/dist/generated/global-operations.d.ts +279 -0
  46. package/dist/generated/global-operations.d.ts.map +1 -0
  47. package/dist/generated/global-operations.js +103 -0
  48. package/dist/generated/global-operations.js.map +1 -0
  49. package/dist/generated/global-types.d.ts +20714 -0
  50. package/dist/generated/global-types.d.ts.map +1 -0
  51. package/dist/generated/wspace-operations.d.ts +2209 -0
  52. package/dist/generated/wspace-operations.d.ts.map +1 -0
  53. package/dist/generated/wspace-operations.js +576 -0
  54. package/dist/generated/wspace-operations.js.map +1 -0
  55. package/dist/generated/wspace-types.d.ts +54990 -0
  56. package/dist/generated/wspace-types.d.ts.map +1 -0
  57. package/dist/hooks/index.d.ts +8 -0
  58. package/dist/hooks/index.d.ts.map +1 -0
  59. package/dist/hooks/index.js +7 -0
  60. package/dist/hooks/useMemberMutations.d.ts +61 -0
  61. package/dist/hooks/useMemberMutations.d.ts.map +1 -0
  62. package/dist/hooks/useMemberMutations.js +263 -0
  63. package/dist/hooks/useMemberMutations.js.map +1 -0
  64. package/dist/hooks/useProjectMutations.d.ts +26 -0
  65. package/dist/hooks/useProjectMutations.d.ts.map +1 -0
  66. package/dist/hooks/useProjectMutations.js +127 -0
  67. package/dist/hooks/useProjectMutations.js.map +1 -0
  68. package/dist/hooks/useProjects.d.ts +16 -0
  69. package/dist/hooks/useProjects.d.ts.map +1 -0
  70. package/dist/hooks/useProjects.js +103 -0
  71. package/dist/hooks/useProjects.js.map +1 -0
  72. package/dist/hooks/useScopedNavigation.d.ts +4 -0
  73. package/dist/hooks/useScopedNavigation.d.ts.map +1 -0
  74. package/dist/hooks/useScopedNavigation.js +11 -0
  75. package/dist/hooks/useScopedNavigation.js.map +1 -0
  76. package/dist/hooks/useTenants.d.ts +13 -0
  77. package/dist/hooks/useTenants.d.ts.map +1 -0
  78. package/dist/hooks/useTenants.js +47 -0
  79. package/dist/hooks/useTenants.js.map +1 -0
  80. package/dist/hooks/useWorkspaceActivity.d.ts +12 -0
  81. package/dist/hooks/useWorkspaceActivity.d.ts.map +1 -0
  82. package/dist/hooks/useWorkspaceActivity.js +31 -0
  83. package/dist/hooks/useWorkspaceActivity.js.map +1 -0
  84. package/dist/hooks/useWorkspaceMembers.d.ts +24 -0
  85. package/dist/hooks/useWorkspaceMembers.d.ts.map +1 -0
  86. package/dist/hooks/useWorkspaceMembers.js +130 -0
  87. package/dist/hooks/useWorkspaceMembers.js.map +1 -0
  88. package/dist/hooks/useWorkspaceMutations.d.ts +36 -0
  89. package/dist/hooks/useWorkspaceMutations.d.ts.map +1 -0
  90. package/dist/hooks/useWorkspaceMutations.js +119 -0
  91. package/dist/hooks/useWorkspaceMutations.js.map +1 -0
  92. package/dist/hooks/useWorkspacePermissions.d.ts +29 -0
  93. package/dist/hooks/useWorkspacePermissions.d.ts.map +1 -0
  94. package/dist/hooks/useWorkspacePermissions.js +33 -0
  95. package/dist/hooks/useWorkspacePermissions.js.map +1 -0
  96. package/dist/hooks/useWorkspaceRoles.d.ts +8 -0
  97. package/dist/hooks/useWorkspaceRoles.d.ts.map +1 -0
  98. package/dist/hooks/useWorkspaceRoles.js +31 -0
  99. package/dist/hooks/useWorkspaceRoles.js.map +1 -0
  100. package/dist/hooks/useWorkspaces.d.ts +21 -0
  101. package/dist/hooks/useWorkspaces.d.ts.map +1 -0
  102. package/dist/hooks/useWorkspaces.js +75 -0
  103. package/dist/hooks/useWorkspaces.js.map +1 -0
  104. package/dist/hooks/useWorkspacesEventEmitter.d.ts +14 -0
  105. package/dist/hooks/useWorkspacesEventEmitter.d.ts.map +1 -0
  106. package/dist/hooks/useWorkspacesEventEmitter.js +14 -0
  107. package/dist/hooks/useWorkspacesEventEmitter.js.map +1 -0
  108. package/dist/index.d.ts +33 -0
  109. package/dist/index.d.ts.map +1 -0
  110. package/dist/index.js +24 -0
  111. package/dist/pages/ActivityListPage.d.ts +2 -0
  112. package/dist/pages/ActivityListPage.d.ts.map +1 -0
  113. package/dist/pages/ActivityListPage.js +119 -0
  114. package/dist/pages/ActivityListPage.js.map +1 -0
  115. package/dist/pages/CreateWorkspacePage.d.ts +2 -0
  116. package/dist/pages/CreateWorkspacePage.d.ts.map +1 -0
  117. package/dist/pages/CreateWorkspacePage.js +264 -0
  118. package/dist/pages/CreateWorkspacePage.js.map +1 -0
  119. package/dist/pages/InviteAcceptancePage.d.ts +6 -0
  120. package/dist/pages/InviteAcceptancePage.d.ts.map +1 -0
  121. package/dist/pages/InviteAcceptancePage.js +495 -0
  122. package/dist/pages/InviteAcceptancePage.js.map +1 -0
  123. package/dist/pages/MembersListPage.d.ts +2 -0
  124. package/dist/pages/MembersListPage.d.ts.map +1 -0
  125. package/dist/pages/MembersListPage.js +420 -0
  126. package/dist/pages/MembersListPage.js.map +1 -0
  127. package/dist/pages/ProjectDetailPage.d.ts +2 -0
  128. package/dist/pages/ProjectDetailPage.d.ts.map +1 -0
  129. package/dist/pages/ProjectDetailPage.js +361 -0
  130. package/dist/pages/ProjectDetailPage.js.map +1 -0
  131. package/dist/pages/ProjectsListPage.d.ts +2 -0
  132. package/dist/pages/ProjectsListPage.d.ts.map +1 -0
  133. package/dist/pages/ProjectsListPage.js +398 -0
  134. package/dist/pages/ProjectsListPage.js.map +1 -0
  135. package/dist/pages/WorkspaceDetailPage.d.ts +2 -0
  136. package/dist/pages/WorkspaceDetailPage.d.ts.map +1 -0
  137. package/dist/pages/WorkspaceDetailPage.js +230 -0
  138. package/dist/pages/WorkspaceDetailPage.js.map +1 -0
  139. package/dist/pages/WorkspaceSettingsPage.d.ts +2 -0
  140. package/dist/pages/WorkspaceSettingsPage.d.ts.map +1 -0
  141. package/dist/pages/WorkspaceSettingsPage.js +157 -0
  142. package/dist/pages/WorkspaceSettingsPage.js.map +1 -0
  143. package/dist/pages/WorkspacesListPage.d.ts +2 -0
  144. package/dist/pages/WorkspacesListPage.d.ts.map +1 -0
  145. package/dist/pages/WorkspacesListPage.js +186 -0
  146. package/dist/pages/WorkspacesListPage.js.map +1 -0
  147. package/dist/pages/dashboard/DashboardCustomizer.d.ts +12 -0
  148. package/dist/pages/dashboard/DashboardCustomizer.d.ts.map +1 -0
  149. package/dist/pages/dashboard/DashboardCustomizer.js +136 -0
  150. package/dist/pages/dashboard/DashboardCustomizer.js.map +1 -0
  151. package/dist/pages/dashboard/DashboardGrid.d.ts +8 -0
  152. package/dist/pages/dashboard/DashboardGrid.d.ts.map +1 -0
  153. package/dist/pages/dashboard/DashboardGrid.js +58 -0
  154. package/dist/pages/dashboard/DashboardGrid.js.map +1 -0
  155. package/dist/pages/dashboard/DashboardPage.d.ts +14 -0
  156. package/dist/pages/dashboard/DashboardPage.d.ts.map +1 -0
  157. package/dist/pages/dashboard/DashboardPage.js +136 -0
  158. package/dist/pages/dashboard/DashboardPage.js.map +1 -0
  159. package/dist/pages/dashboard/WidgetWrapper.d.ts +17 -0
  160. package/dist/pages/dashboard/WidgetWrapper.d.ts.map +1 -0
  161. package/dist/pages/dashboard/WidgetWrapper.js +72 -0
  162. package/dist/pages/dashboard/WidgetWrapper.js.map +1 -0
  163. package/dist/pages/dashboard/config.d.ts +9 -0
  164. package/dist/pages/dashboard/config.d.ts.map +1 -0
  165. package/dist/pages/dashboard/config.js +214 -0
  166. package/dist/pages/dashboard/config.js.map +1 -0
  167. package/dist/pages/dashboard/hooks/useDashboardData.d.ts +9 -0
  168. package/dist/pages/dashboard/hooks/useDashboardData.d.ts.map +1 -0
  169. package/dist/pages/dashboard/hooks/useDashboardData.js +118 -0
  170. package/dist/pages/dashboard/hooks/useDashboardData.js.map +1 -0
  171. package/dist/pages/dashboard/hooks/useDashboardPreferences.d.ts +4 -0
  172. package/dist/pages/dashboard/hooks/useDashboardPreferences.d.ts.map +1 -0
  173. package/dist/pages/dashboard/hooks/useDashboardPreferences.js +32 -0
  174. package/dist/pages/dashboard/hooks/useDashboardPreferences.js.map +1 -0
  175. package/dist/pages/dashboard/types.d.ts +145 -0
  176. package/dist/pages/dashboard/types.d.ts.map +1 -0
  177. package/dist/pages/dashboard/widgets/GroupsWidget.d.ts +4 -0
  178. package/dist/pages/dashboard/widgets/GroupsWidget.d.ts.map +1 -0
  179. package/dist/pages/dashboard/widgets/GroupsWidget.js +59 -0
  180. package/dist/pages/dashboard/widgets/GroupsWidget.js.map +1 -0
  181. package/dist/pages/dashboard/widgets/MembersWidget.d.ts +4 -0
  182. package/dist/pages/dashboard/widgets/MembersWidget.d.ts.map +1 -0
  183. package/dist/pages/dashboard/widgets/MembersWidget.js +65 -0
  184. package/dist/pages/dashboard/widgets/MembersWidget.js.map +1 -0
  185. package/dist/pages/dashboard/widgets/ProjectsWidget.d.ts +4 -0
  186. package/dist/pages/dashboard/widgets/ProjectsWidget.d.ts.map +1 -0
  187. package/dist/pages/dashboard/widgets/ProjectsWidget.js +91 -0
  188. package/dist/pages/dashboard/widgets/ProjectsWidget.js.map +1 -0
  189. package/dist/pages/dashboard/widgets/QuickActionsWidget.d.ts +4 -0
  190. package/dist/pages/dashboard/widgets/QuickActionsWidget.d.ts.map +1 -0
  191. package/dist/pages/dashboard/widgets/QuickActionsWidget.js +80 -0
  192. package/dist/pages/dashboard/widgets/QuickActionsWidget.js.map +1 -0
  193. package/dist/pages/dashboard/widgets/RecentActivityWidget.d.ts +4 -0
  194. package/dist/pages/dashboard/widgets/RecentActivityWidget.d.ts.map +1 -0
  195. package/dist/pages/dashboard/widgets/RecentActivityWidget.js +81 -0
  196. package/dist/pages/dashboard/widgets/RecentActivityWidget.js.map +1 -0
  197. package/dist/pages/dashboard/widgets/StorageWidget.d.ts +4 -0
  198. package/dist/pages/dashboard/widgets/StorageWidget.d.ts.map +1 -0
  199. package/dist/pages/dashboard/widgets/StorageWidget.js +69 -0
  200. package/dist/pages/dashboard/widgets/StorageWidget.js.map +1 -0
  201. package/dist/pages/dashboard/widgets/SystemHealthWidget.d.ts +4 -0
  202. package/dist/pages/dashboard/widgets/SystemHealthWidget.d.ts.map +1 -0
  203. package/dist/pages/dashboard/widgets/SystemHealthWidget.js +59 -0
  204. package/dist/pages/dashboard/widgets/SystemHealthWidget.js.map +1 -0
  205. package/dist/pages/dashboard/widgets/TagCloudWidget.d.ts +4 -0
  206. package/dist/pages/dashboard/widgets/TagCloudWidget.d.ts.map +1 -0
  207. package/dist/pages/dashboard/widgets/TagCloudWidget.js +61 -0
  208. package/dist/pages/dashboard/widgets/TagCloudWidget.js.map +1 -0
  209. package/dist/pages/dashboard/widgets/TipsWidget.d.ts +4 -0
  210. package/dist/pages/dashboard/widgets/TipsWidget.d.ts.map +1 -0
  211. package/dist/pages/dashboard/widgets/TipsWidget.js +67 -0
  212. package/dist/pages/dashboard/widgets/TipsWidget.js.map +1 -0
  213. package/dist/pages/dashboard/widgets/UpcomingEventsWidget.d.ts +4 -0
  214. package/dist/pages/dashboard/widgets/UpcomingEventsWidget.d.ts.map +1 -0
  215. package/dist/pages/dashboard/widgets/UpcomingEventsWidget.js +83 -0
  216. package/dist/pages/dashboard/widgets/UpcomingEventsWidget.js.map +1 -0
  217. package/dist/pages/dashboard/widgets/WelcomeWidget.d.ts +4 -0
  218. package/dist/pages/dashboard/widgets/WelcomeWidget.d.ts.map +1 -0
  219. package/dist/pages/dashboard/widgets/WelcomeWidget.js +71 -0
  220. package/dist/pages/dashboard/widgets/WelcomeWidget.js.map +1 -0
  221. package/dist/pages/dashboard/widgets/WorkflowStatsWidget.d.ts +4 -0
  222. package/dist/pages/dashboard/widgets/WorkflowStatsWidget.d.ts.map +1 -0
  223. package/dist/pages/dashboard/widgets/WorkflowStatsWidget.js +97 -0
  224. package/dist/pages/dashboard/widgets/WorkflowStatsWidget.js.map +1 -0
  225. package/dist/pages/dashboard/widgets/WorkspacesWidget.d.ts +4 -0
  226. package/dist/pages/dashboard/widgets/WorkspacesWidget.d.ts.map +1 -0
  227. package/dist/pages/dashboard/widgets/WorkspacesWidget.js +67 -0
  228. package/dist/pages/dashboard/widgets/WorkspacesWidget.js.map +1 -0
  229. package/dist/providers/WorkspacesProvider.d.ts +13 -0
  230. package/dist/providers/WorkspacesProvider.d.ts.map +1 -0
  231. package/dist/providers/WorkspacesProvider.js +24 -0
  232. package/dist/providers/WorkspacesProvider.js.map +1 -0
  233. package/dist/store/workspacesStore.d.ts +82 -0
  234. package/dist/store/workspacesStore.d.ts.map +1 -0
  235. package/dist/store/workspacesStore.js +92 -0
  236. package/dist/store/workspacesStore.js.map +1 -0
  237. package/dist/types/index.d.ts +280 -0
  238. package/dist/types/index.d.ts.map +1 -0
  239. package/dist/utils/formatters.d.ts +60 -0
  240. package/dist/utils/formatters.d.ts.map +1 -0
  241. package/dist/utils/formatters.js +61 -0
  242. package/dist/utils/formatters.js.map +1 -0
  243. package/dist/utils/index.d.ts +3 -0
  244. package/dist/utils/index.d.ts.map +1 -0
  245. package/dist/utils/nativeBridge.d.ts +3 -0
  246. package/dist/utils/nativeBridge.d.ts.map +1 -0
  247. package/dist/utils/nativeBridge.js +2 -0
  248. package/dist/utils/projectTags.d.ts +6 -0
  249. package/dist/utils/projectTags.d.ts.map +1 -0
  250. package/dist/utils/projectTags.js +49 -0
  251. package/dist/utils/projectTags.js.map +1 -0
  252. package/dist/utils/slug.d.ts +13 -0
  253. package/dist/utils/slug.d.ts.map +1 -0
  254. package/dist/utils/slug.js +8 -0
  255. package/dist/utils/slug.js.map +1 -0
  256. package/dist/utils/tokenHelpers.d.ts +114 -0
  257. package/dist/utils/tokenHelpers.d.ts.map +1 -0
  258. package/dist/utils/tokenHelpers.js +80 -0
  259. package/dist/utils/tokenHelpers.js.map +1 -0
  260. 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,4 @@
1
+ import { WidgetProps } from '../types';
2
+
3
+ export declare function GroupsWidget({ workspaceData, isLoading, navigate }: WidgetProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=GroupsWidget.d.ts.map
@@ -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,4 @@
1
+ import { WidgetProps } from '../types';
2
+
3
+ export declare function MembersWidget({ workspaceData, globalData, isLoading, navigate }: WidgetProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=MembersWidget.d.ts.map
@@ -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,4 @@
1
+ import { WidgetProps } from '../types';
2
+
3
+ export declare function ProjectsWidget({ workspaceData, isLoading, navigate }: WidgetProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=ProjectsWidget.d.ts.map
@@ -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,4 @@
1
+ import { WidgetProps } from '../types';
2
+
3
+ export declare function QuickActionsWidget({ navigate, isLoading }: WidgetProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=QuickActionsWidget.d.ts.map
@@ -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,4 @@
1
+ import { WidgetProps } from '../types';
2
+
3
+ export declare function RecentActivityWidget({ workspaceData, isLoading, navigate }: WidgetProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=RecentActivityWidget.d.ts.map
@@ -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,4 @@
1
+ import { WidgetProps } from '../types';
2
+
3
+ export declare function StorageWidget({ workspaceData, isLoading }: WidgetProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=StorageWidget.d.ts.map
@@ -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"}