@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,69 @@
1
+ import { WidgetWrapper as e } from "../WidgetWrapper.js";
2
+ import { HardDrive as t } from "lucide-react";
3
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
+ //#region src/pages/dashboard/widgets/StorageWidget.tsx
5
+ function i(e) {
6
+ if (e === 0) return "0 B";
7
+ let t = 1024, n = [
8
+ "B",
9
+ "KB",
10
+ "MB",
11
+ "GB",
12
+ "TB"
13
+ ], r = Math.floor(Math.log(e) / Math.log(t));
14
+ return `${parseFloat((e / t ** +r).toFixed(1))} ${n[r]}`;
15
+ }
16
+ function a({ workspaceData: a, isLoading: o }) {
17
+ let s = a?.storageUsage, c = s?.usedBytes ?? 0, l = s?.totalBytes ?? 0, u = l > 0 ? Math.min(c / l * 100, 100) : 0, d = u > 80 ? "bg-status-error-bg" : u > 60 ? "bg-status-warning-bg" : "bg-status-success-bg";
18
+ return /* @__PURE__ */ n(e, {
19
+ title: "Storage",
20
+ icon: /* @__PURE__ */ n(t, { className: "h-4 w-4" }),
21
+ size: "small",
22
+ isLoading: o,
23
+ children: s ? /* @__PURE__ */ r("div", {
24
+ className: "space-y-3",
25
+ children: [/* @__PURE__ */ r("div", {
26
+ className: "space-y-1.5",
27
+ children: [
28
+ /* @__PURE__ */ r("div", {
29
+ className: "flex justify-between text-xs",
30
+ children: [/* @__PURE__ */ n("span", {
31
+ className: "text-muted-foreground",
32
+ children: "Used"
33
+ }), /* @__PURE__ */ r("span", {
34
+ className: "font-medium text-text-primary",
35
+ children: [i(c), l > 0 ? ` / ${i(l)}` : ""]
36
+ })]
37
+ }),
38
+ /* @__PURE__ */ n("div", {
39
+ className: "h-2 w-full bg-muted rounded-full overflow-hidden",
40
+ children: /* @__PURE__ */ n("div", {
41
+ className: `h-full rounded-full ${d} transition-all duration-500`,
42
+ style: { width: `${u}%` }
43
+ })
44
+ }),
45
+ /* @__PURE__ */ n("p", {
46
+ className: "text-[11px] text-muted-foreground text-right",
47
+ children: l > 0 ? `${u.toFixed(1)}% used` : "Limit unavailable"
48
+ })
49
+ ]
50
+ }), s?.fileCount != null && /* @__PURE__ */ r("div", {
51
+ className: "flex items-center justify-between text-xs",
52
+ children: [/* @__PURE__ */ n("span", {
53
+ className: "text-muted-foreground",
54
+ children: "Total files"
55
+ }), /* @__PURE__ */ n("span", {
56
+ className: "font-medium text-text-primary",
57
+ children: s.fileCount.toLocaleString()
58
+ })]
59
+ })]
60
+ }) : /* @__PURE__ */ n("p", {
61
+ className: "text-xs text-muted-foreground",
62
+ children: "Storage metrics are unavailable."
63
+ })
64
+ });
65
+ }
66
+ //#endregion
67
+ export { a as StorageWidget };
68
+
69
+ //# sourceMappingURL=StorageWidget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorageWidget.js","names":[],"sources":["../../../../src/pages/dashboard/widgets/StorageWidget.tsx"],"sourcesContent":["import { HardDrive } from 'lucide-react';\nimport { WidgetWrapper } from '../WidgetWrapper';\nimport type { WidgetProps } from '../types';\n\nfunction formatBytes(bytes: number): string {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;\n}\n\nexport function StorageWidget({ workspaceData, isLoading }: WidgetProps) {\n const storage = workspaceData?.storageUsage;\n\n const usedBytes = storage?.usedBytes ?? 0;\n const totalBytes = storage?.totalBytes ?? 0;\n const percentage = totalBytes > 0 ? Math.min((usedBytes / totalBytes) * 100, 100) : 0;\n const barColor =\n percentage > 80\n ? 'bg-status-error-bg'\n : percentage > 60\n ? 'bg-status-warning-bg'\n : 'bg-status-success-bg';\n\n return (\n <WidgetWrapper\n title=\"Storage\"\n icon={<HardDrive className=\"h-4 w-4\" />}\n size=\"small\"\n isLoading={isLoading}\n >\n {storage ? (\n <div className=\"space-y-3\">\n <div className=\"space-y-1.5\">\n <div className=\"flex justify-between text-xs\">\n <span className=\"text-muted-foreground\">Used</span>\n <span className=\"font-medium text-text-primary\">\n {formatBytes(usedBytes)}\n {totalBytes > 0 ? ` / ${formatBytes(totalBytes)}` : ''}\n </span>\n </div>\n <div className=\"h-2 w-full bg-muted rounded-full overflow-hidden\">\n <div\n className={`h-full rounded-full ${barColor} transition-all duration-500`}\n style={{ width: `${percentage}%` }}\n />\n </div>\n <p className=\"text-[11px] text-muted-foreground text-right\">\n {totalBytes > 0 ? `${percentage.toFixed(1)}% used` : 'Limit unavailable'}\n </p>\n </div>\n {storage?.fileCount != null && (\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"text-muted-foreground\">Total files</span>\n <span className=\"font-medium text-text-primary\">\n {storage.fileCount.toLocaleString()}\n </span>\n </div>\n )}\n </div>\n ) : (\n <p className=\"text-xs text-muted-foreground\">Storage metrics are unavailable.</p>\n )}\n </WidgetWrapper>\n );\n}\n"],"mappings":";;;;AAIA,SAAS,EAAY,GAAuB;AAC1C,KAAI,MAAU,EAAG,QAAO;CACxB,IAAM,IAAI,MACJ,IAAQ;EAAC;EAAK;EAAM;EAAM;EAAM;EAAK,EACrC,IAAI,KAAK,MAAM,KAAK,IAAI,EAAM,GAAG,KAAK,IAAI,EAAE,CAAC;AACnD,QAAO,GAAG,YAAY,IAAiB,MAAG,GAAI,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAM;;AAGrE,SAAgB,EAAc,EAAE,kBAAe,gBAA0B;CACvE,IAAM,IAAU,GAAe,cAEzB,IAAY,GAAS,aAAa,GAClC,IAAa,GAAS,cAAc,GACpC,IAAa,IAAa,IAAI,KAAK,IAAK,IAAY,IAAc,KAAK,IAAI,GAAG,GAC9E,IACJ,IAAa,KACT,uBACA,IAAa,KACX,yBACA;AAER,QACE,kBAAC,GAAD;EACE,OAAM;EACN,MAAM,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA;EACvC,MAAK;EACM;YAEV,IACC,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,QAAD;OAAM,WAAU;iBAAwB;OAAW,CAAA,EACnD,kBAAC,QAAD;OAAM,WAAU;iBAAhB,CACG,EAAY,EAAU,EACtB,IAAa,IAAI,MAAM,EAAY,EAAW,KAAK,GAC/C;SACH;;KACN,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,OAAD;OACE,WAAW,uBAAuB,EAAS;OAC3C,OAAO,EAAE,OAAO,GAAG,EAAW,IAAI;OAClC,CAAA;MACE,CAAA;KACN,kBAAC,KAAD;MAAG,WAAU;gBACV,IAAa,IAAI,GAAG,EAAW,QAAQ,EAAE,CAAC,UAAU;MACnD,CAAA;KACA;OACL,GAAS,aAAa,QACrB,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,QAAD;KAAM,WAAU;eAAwB;KAAkB,CAAA,EAC1D,kBAAC,QAAD;KAAM,WAAU;eACb,EAAQ,UAAU,gBAAgB;KAC9B,CAAA,CACH;MAEJ;OAEN,kBAAC,KAAD;GAAG,WAAU;aAAgC;GAAoC,CAAA;EAErE,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { WidgetProps } from '../types';
2
+
3
+ export declare function SystemHealthWidget({ workspaceData, isLoading }: WidgetProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=SystemHealthWidget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemHealthWidget.d.ts","sourceRoot":"","sources":["../../../../src/pages/dashboard/widgets/SystemHealthWidget.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAW5C,wBAAgB,kBAAkB,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,WAAW,2CA8B3E"}
@@ -0,0 +1,59 @@
1
+ import { WidgetWrapper as e } from "../WidgetWrapper.js";
2
+ import { Circle as t, HeartPulse as n } from "lucide-react";
3
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
4
+ //#region src/pages/dashboard/widgets/SystemHealthWidget.tsx
5
+ var a = [
6
+ {
7
+ name: "Workspaces",
8
+ key: "workspaces"
9
+ },
10
+ {
11
+ name: "Auth",
12
+ key: "auth"
13
+ },
14
+ {
15
+ name: "Files",
16
+ key: "files"
17
+ },
18
+ {
19
+ name: "Calendar",
20
+ key: "calendar"
21
+ },
22
+ {
23
+ name: "Workflows",
24
+ key: "workflows"
25
+ },
26
+ {
27
+ name: "Tags",
28
+ key: "tags"
29
+ }
30
+ ];
31
+ function o({ workspaceData: o, isLoading: s }) {
32
+ let c = !!o;
33
+ return /* @__PURE__ */ r(e, {
34
+ title: "System Status",
35
+ icon: /* @__PURE__ */ r(n, { className: "h-4 w-4" }),
36
+ size: "small",
37
+ isLoading: s,
38
+ children: /* @__PURE__ */ r("div", {
39
+ className: "space-y-1.5",
40
+ children: a.map((e) => /* @__PURE__ */ i("div", {
41
+ className: "flex items-center justify-between py-0.5",
42
+ children: [/* @__PURE__ */ r("span", {
43
+ className: "text-xs text-text-secondary",
44
+ children: e.name
45
+ }), /* @__PURE__ */ i("div", {
46
+ className: "flex items-center gap-1",
47
+ children: [/* @__PURE__ */ r(t, { className: `h-2 w-2 fill-current ${c ? "text-status-success-text" : "text-text-tertiary"}` }), /* @__PURE__ */ r("span", {
48
+ className: `text-[11px] ${c ? "text-status-success-text" : "text-muted-foreground"}`,
49
+ children: c ? "Healthy" : "Unknown"
50
+ })]
51
+ })]
52
+ }, e.key))
53
+ })
54
+ });
55
+ }
56
+ //#endregion
57
+ export { o as SystemHealthWidget };
58
+
59
+ //# sourceMappingURL=SystemHealthWidget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemHealthWidget.js","names":[],"sources":["../../../../src/pages/dashboard/widgets/SystemHealthWidget.tsx"],"sourcesContent":["import { HeartPulse, Circle } from 'lucide-react';\nimport { WidgetWrapper } from '../WidgetWrapper';\nimport type { WidgetProps } from '../types';\n\nconst SERVICES = [\n { name: 'Workspaces', key: 'workspaces' },\n { name: 'Auth', key: 'auth' },\n { name: 'Files', key: 'files' },\n { name: 'Calendar', key: 'calendar' },\n { name: 'Workflows', key: 'workflows' },\n { name: 'Tags', key: 'tags' },\n];\n\nexport function SystemHealthWidget({ workspaceData, isLoading }: WidgetProps) {\n // Infer health from whether data is available\n const wsAvailable = !!workspaceData;\n\n return (\n <WidgetWrapper\n title=\"System Status\"\n icon={<HeartPulse className=\"h-4 w-4\" />}\n size=\"small\"\n isLoading={isLoading}\n >\n <div className=\"space-y-1.5\">\n {SERVICES.map((svc) => (\n <div key={svc.key} className=\"flex items-center justify-between py-0.5\">\n <span className=\"text-xs text-text-secondary\">{svc.name}</span>\n <div className=\"flex items-center gap-1\">\n <Circle\n className={`h-2 w-2 fill-current ${wsAvailable ? 'text-status-success-text' : 'text-text-tertiary'}`}\n />\n <span\n className={`text-[11px] ${wsAvailable ? 'text-status-success-text' : 'text-muted-foreground'}`}\n >\n {wsAvailable ? 'Healthy' : 'Unknown'}\n </span>\n </div>\n </div>\n ))}\n </div>\n </WidgetWrapper>\n );\n}\n"],"mappings":";;;;AAIA,IAAM,IAAW;CACf;EAAE,MAAM;EAAc,KAAK;EAAc;CACzC;EAAE,MAAM;EAAQ,KAAK;EAAQ;CAC7B;EAAE,MAAM;EAAS,KAAK;EAAS;CAC/B;EAAE,MAAM;EAAY,KAAK;EAAY;CACrC;EAAE,MAAM;EAAa,KAAK;EAAa;CACvC;EAAE,MAAM;EAAQ,KAAK;EAAQ;CAC9B;AAED,SAAgB,EAAmB,EAAE,kBAAe,gBAA0B;CAE5E,IAAM,IAAc,CAAC,CAAC;AAEtB,QACE,kBAAC,GAAD;EACE,OAAM;EACN,MAAM,kBAAC,GAAD,EAAY,WAAU,WAAY,CAAA;EACxC,MAAK;EACM;YAEX,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAS,KAAK,MACb,kBAAC,OAAD;IAAmB,WAAU;cAA7B,CACE,kBAAC,QAAD;KAAM,WAAU;eAA+B,EAAI;KAAY,CAAA,EAC/D,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD,EACE,WAAW,wBAAwB,IAAc,6BAA6B,wBAC9E,CAAA,EACF,kBAAC,QAAD;MACE,WAAW,eAAe,IAAc,6BAA6B;gBAEpE,IAAc,YAAY;MACtB,CAAA,CACH;OACF;MAZI,EAAI,IAYR,CACN;GACE,CAAA;EACQ,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { WidgetProps } from '../types';
2
+
3
+ export declare function TagCloudWidget({ workspaceData, isLoading, navigate }: WidgetProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=TagCloudWidget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TagCloudWidget.d.ts","sourceRoot":"","sources":["../../../../src/pages/dashboard/widgets/TagCloudWidget.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAa5C,wBAAgB,cAAc,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,WAAW,2CA0CjF"}
@@ -0,0 +1,61 @@
1
+ import { WidgetWrapper as e } from "../WidgetWrapper.js";
2
+ import { ArrowRight as t, Tags as n } from "lucide-react";
3
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
4
+ import { Badge as a, Button as o } from "@burdenoff/fe-libs/ui";
5
+ //#region src/pages/dashboard/widgets/TagCloudWidget.tsx
6
+ var s = [
7
+ "bg-status-info-bg-subtle text-status-info-text border-border-default",
8
+ "bg-status-success-bg-subtle text-status-success-text border-border-default",
9
+ "bg-accent-purple-subtle text-accent-purple border-border-default",
10
+ "bg-status-warning-bg-subtle text-status-warning-text border-border-default",
11
+ "bg-accent-pink-subtle text-accent-pink border-border-default",
12
+ "bg-accent-cyan-subtle text-accent-cyan border-border-default",
13
+ "bg-accent-orange-subtle text-accent-orange border-border-default",
14
+ "bg-accent-rose-subtle text-accent-rose border-border-default"
15
+ ];
16
+ function c({ workspaceData: c, isLoading: l, navigate: u }) {
17
+ let d = c?.tags.items ?? [], f = c?.tags.total ?? 0;
18
+ return /* @__PURE__ */ r(e, {
19
+ title: "Tags",
20
+ icon: /* @__PURE__ */ r(n, { className: "h-4 w-4" }),
21
+ size: "small",
22
+ isLoading: l,
23
+ unavailable: !c,
24
+ headerAction: /* @__PURE__ */ r(o, {
25
+ variant: "ghost",
26
+ size: "sm",
27
+ className: "text-xs",
28
+ onClick: () => u("/tags"),
29
+ children: /* @__PURE__ */ r(t, { className: "h-3 w-3" })
30
+ }),
31
+ children: d.length === 0 ? /* @__PURE__ */ r("div", {
32
+ className: "text-center py-3",
33
+ children: /* @__PURE__ */ r("p", {
34
+ className: "text-xs text-muted-foreground",
35
+ children: "No tags created yet"
36
+ })
37
+ }) : /* @__PURE__ */ i("div", {
38
+ className: "space-y-2",
39
+ children: [/* @__PURE__ */ r("div", {
40
+ className: "flex flex-wrap gap-1.5",
41
+ children: d.slice(0, 12).map((e, t) => /* @__PURE__ */ r(a, {
42
+ variant: "outline",
43
+ className: `text-[11px] cursor-pointer hover:opacity-80 transition-opacity ${s[t % s.length]}`,
44
+ onClick: () => u("/tags"),
45
+ children: e.label
46
+ }, e.id))
47
+ }), f > 12 && /* @__PURE__ */ i("p", {
48
+ className: "text-[11px] text-muted-foreground text-center",
49
+ children: [
50
+ "+",
51
+ f - 12,
52
+ " more tags"
53
+ ]
54
+ })]
55
+ })
56
+ });
57
+ }
58
+ //#endregion
59
+ export { c as TagCloudWidget };
60
+
61
+ //# sourceMappingURL=TagCloudWidget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TagCloudWidget.js","names":[],"sources":["../../../../src/pages/dashboard/widgets/TagCloudWidget.tsx"],"sourcesContent":["import { Tags, ArrowRight } from 'lucide-react';\nimport { Badge, Button } from '@burdenoff/fe-libs/ui';\nimport { WidgetWrapper } from '../WidgetWrapper';\nimport type { WidgetProps } from '../types';\n\nconst tagColors = [\n 'bg-status-info-bg-subtle text-status-info-text border-border-default',\n 'bg-status-success-bg-subtle text-status-success-text border-border-default',\n 'bg-accent-purple-subtle text-accent-purple border-border-default',\n 'bg-status-warning-bg-subtle text-status-warning-text border-border-default',\n 'bg-accent-pink-subtle text-accent-pink border-border-default',\n 'bg-accent-cyan-subtle text-accent-cyan border-border-default',\n 'bg-accent-orange-subtle text-accent-orange border-border-default',\n 'bg-accent-rose-subtle text-accent-rose border-border-default',\n];\n\nexport function TagCloudWidget({ workspaceData, isLoading, navigate }: WidgetProps) {\n const tags = workspaceData?.tags.items ?? [];\n const total = workspaceData?.tags.total ?? 0;\n\n return (\n <WidgetWrapper\n title=\"Tags\"\n icon={<Tags 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('/tags')}>\n <ArrowRight className=\"h-3 w-3\" />\n </Button>\n }\n >\n {tags.length === 0 ? (\n <div className=\"text-center py-3\">\n <p className=\"text-xs text-muted-foreground\">No tags created yet</p>\n </div>\n ) : (\n <div className=\"space-y-2\">\n <div className=\"flex flex-wrap gap-1.5\">\n {tags.slice(0, 12).map((tag, idx) => (\n <Badge\n key={tag.id}\n variant=\"outline\"\n className={`text-[11px] cursor-pointer hover:opacity-80 transition-opacity ${tagColors[idx % tagColors.length]}`}\n onClick={() => navigate('/tags')}\n >\n {tag.label}\n </Badge>\n ))}\n </div>\n {total > 12 && (\n <p className=\"text-[11px] text-muted-foreground text-center\">+{total - 12} more tags</p>\n )}\n </div>\n )}\n </WidgetWrapper>\n );\n}\n"],"mappings":";;;;;AAKA,IAAM,IAAY;CAChB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,SAAgB,EAAe,EAAE,kBAAe,cAAW,eAAyB;CAClF,IAAM,IAAO,GAAe,KAAK,SAAS,EAAE,EACtC,IAAQ,GAAe,KAAK,SAAS;AAE3C,QACE,kBAAC,GAAD;EACE,OAAM;EACN,MAAM,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA;EAClC,MAAK;EACM;EACX,aAAa,CAAC;EACd,cACE,kBAAC,GAAD;GAAQ,SAAQ;GAAQ,MAAK;GAAK,WAAU;GAAU,eAAe,EAAS,QAAQ;aACpF,kBAAC,GAAD,EAAY,WAAU,WAAY,CAAA;GAC3B,CAAA;YAGV,EAAK,WAAW,IACf,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,KAAD;IAAG,WAAU;cAAgC;IAAuB,CAAA;GAChE,CAAA,GAEN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAK,MAAM,GAAG,GAAG,CAAC,KAAK,GAAK,MAC3B,kBAAC,GAAD;KAEE,SAAQ;KACR,WAAW,kEAAkE,EAAU,IAAM,EAAU;KACvG,eAAe,EAAS,QAAQ;eAE/B,EAAI;KACC,EAND,EAAI,GAMH,CACR;IACE,CAAA,EACL,IAAQ,MACP,kBAAC,KAAD;IAAG,WAAU;cAAb;KAA6D;KAAE,IAAQ;KAAG;KAAc;MAEtF;;EAEM,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { WidgetProps } from '../types';
2
+
3
+ export declare function TipsWidget({ navigate, isLoading }: WidgetProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=TipsWidget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TipsWidget.d.ts","sourceRoot":"","sources":["../../../../src/pages/dashboard/widgets/TipsWidget.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAiC5C,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,WAAW,2CA4B9D"}
@@ -0,0 +1,67 @@
1
+ import { WidgetWrapper as e } from "../WidgetWrapper.js";
2
+ import { BookOpen as t, ExternalLink as n, Lightbulb as r, Rocket as i, Shield as a, Workflow as o } from "lucide-react";
3
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
4
+ //#region src/pages/dashboard/widgets/TipsWidget.tsx
5
+ var l = [
6
+ {
7
+ icon: i,
8
+ title: "Create your first workspace",
9
+ description: "Organize your team with a dedicated workspace.",
10
+ path: "/workspaces/list",
11
+ color: "text-accent-blue"
12
+ },
13
+ {
14
+ icon: o,
15
+ title: "Automate with workflows",
16
+ description: "Build automation workflows to streamline your processes.",
17
+ path: "/workflows",
18
+ color: "text-status-success-text"
19
+ },
20
+ {
21
+ icon: a,
22
+ title: "Set up permissions",
23
+ description: "Configure role-based access for your workspace members.",
24
+ path: "/rbac",
25
+ color: "text-accent-purple"
26
+ },
27
+ {
28
+ icon: t,
29
+ title: "Explore the API",
30
+ description: "Check out our developer portal for API documentation.",
31
+ path: "/devportal",
32
+ color: "text-status-warning-text"
33
+ }
34
+ ];
35
+ function u({ navigate: t, isLoading: i }) {
36
+ return /* @__PURE__ */ s(e, {
37
+ title: "Tips & Resources",
38
+ icon: /* @__PURE__ */ s(r, { className: "h-4 w-4" }),
39
+ size: "small",
40
+ isLoading: i,
41
+ children: /* @__PURE__ */ s("div", {
42
+ className: "space-y-2",
43
+ children: l.map((e) => /* @__PURE__ */ c("div", {
44
+ className: "flex items-start gap-2 p-1.5 rounded hover:bg-accent/5 cursor-pointer transition-colors",
45
+ onClick: () => t(e.path),
46
+ children: [
47
+ /* @__PURE__ */ s(e.icon, { className: `h-4 w-4 mt-0.5 shrink-0 ${e.color}` }),
48
+ /* @__PURE__ */ c("div", {
49
+ className: "min-w-0",
50
+ children: [/* @__PURE__ */ s("p", {
51
+ className: "text-xs font-medium text-text-primary leading-tight",
52
+ children: e.title
53
+ }), /* @__PURE__ */ s("p", {
54
+ className: "text-[11px] text-muted-foreground leading-tight mt-0.5",
55
+ children: e.description
56
+ })]
57
+ }),
58
+ /* @__PURE__ */ s(n, { className: "h-3 w-3 text-muted-foreground shrink-0 mt-0.5" })
59
+ ]
60
+ }, e.title))
61
+ })
62
+ });
63
+ }
64
+ //#endregion
65
+ export { u as TipsWidget };
66
+
67
+ //# sourceMappingURL=TipsWidget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TipsWidget.js","names":[],"sources":["../../../../src/pages/dashboard/widgets/TipsWidget.tsx"],"sourcesContent":["import { Lightbulb, ExternalLink, BookOpen, Rocket, Shield, Workflow } from 'lucide-react';\nimport { WidgetWrapper } from '../WidgetWrapper';\nimport type { WidgetProps } from '../types';\n\nconst TIPS = [\n {\n icon: Rocket,\n title: 'Create your first workspace',\n description: 'Organize your team with a dedicated workspace.',\n path: '/workspaces/list',\n color: 'text-accent-blue',\n },\n {\n icon: Workflow,\n title: 'Automate with workflows',\n description: 'Build automation workflows to streamline your processes.',\n path: '/workflows',\n color: 'text-status-success-text',\n },\n {\n icon: Shield,\n title: 'Set up permissions',\n description: 'Configure role-based access for your workspace members.',\n path: '/rbac',\n color: 'text-accent-purple',\n },\n {\n icon: BookOpen,\n title: 'Explore the API',\n description: 'Check out our developer portal for API documentation.',\n path: '/devportal',\n color: 'text-status-warning-text',\n },\n];\n\nexport function TipsWidget({ navigate, isLoading }: WidgetProps) {\n return (\n <WidgetWrapper\n title=\"Tips & Resources\"\n icon={<Lightbulb className=\"h-4 w-4\" />}\n size=\"small\"\n isLoading={isLoading}\n >\n <div className=\"space-y-2\">\n {TIPS.map((tip) => (\n <div\n key={tip.title}\n className=\"flex items-start gap-2 p-1.5 rounded hover:bg-accent/5 cursor-pointer transition-colors\"\n onClick={() => navigate(tip.path)}\n >\n <tip.icon className={`h-4 w-4 mt-0.5 shrink-0 ${tip.color}`} />\n <div className=\"min-w-0\">\n <p className=\"text-xs font-medium text-text-primary leading-tight\">{tip.title}</p>\n <p className=\"text-[11px] text-muted-foreground leading-tight mt-0.5\">\n {tip.description}\n </p>\n </div>\n <ExternalLink className=\"h-3 w-3 text-muted-foreground shrink-0 mt-0.5\" />\n </div>\n ))}\n </div>\n </WidgetWrapper>\n );\n}\n"],"mappings":";;;;AAIA,IAAM,IAAO;CACX;EACE,MAAM;EACN,OAAO;EACP,aAAa;EACb,MAAM;EACN,OAAO;EACR;CACD;EACE,MAAM;EACN,OAAO;EACP,aAAa;EACb,MAAM;EACN,OAAO;EACR;CACD;EACE,MAAM;EACN,OAAO;EACP,aAAa;EACb,MAAM;EACN,OAAO;EACR;CACD;EACE,MAAM;EACN,OAAO;EACP,aAAa;EACb,MAAM;EACN,OAAO;EACR;CACF;AAED,SAAgB,EAAW,EAAE,aAAU,gBAA0B;AAC/D,QACE,kBAAC,GAAD;EACE,OAAM;EACN,MAAM,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA;EACvC,MAAK;EACM;YAEX,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAK,KAAK,MACT,kBAAC,OAAD;IAEE,WAAU;IACV,eAAe,EAAS,EAAI,KAAK;cAHnC;KAKE,kBAAC,EAAI,MAAL,EAAU,WAAW,2BAA2B,EAAI,SAAW,CAAA;KAC/D,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,KAAD;OAAG,WAAU;iBAAuD,EAAI;OAAU,CAAA,EAClF,kBAAC,KAAD;OAAG,WAAU;iBACV,EAAI;OACH,CAAA,CACA;;KACN,kBAAC,GAAD,EAAc,WAAU,iDAAkD,CAAA;KACtE;MAZC,EAAI,MAYL,CACN;GACE,CAAA;EACQ,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { WidgetProps } from '../types';
2
+
3
+ export declare function UpcomingEventsWidget({ workspaceData, isLoading, navigate }: WidgetProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=UpcomingEventsWidget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpcomingEventsWidget.d.ts","sourceRoot":"","sources":["../../../../src/pages/dashboard/widgets/UpcomingEventsWidget.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAsB5C,wBAAgB,oBAAoB,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,WAAW,2CAsDvF"}
@@ -0,0 +1,83 @@
1
+ import { WidgetWrapper as e } from "../WidgetWrapper.js";
2
+ import { ArrowRight as t, Calendar as n, Clock 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/UpcomingEventsWidget.tsx
6
+ function c(e) {
7
+ let t = new Date(e), n = /* @__PURE__ */ new Date(), r = t.toDateString() === n.toDateString(), i = new Date(n);
8
+ i.setDate(i.getDate() + 1);
9
+ let a = t.toDateString() === i.toDateString();
10
+ return r ? `Today at ${t.toLocaleTimeString([], {
11
+ hour: "2-digit",
12
+ minute: "2-digit"
13
+ })}` : a ? `Tomorrow at ${t.toLocaleTimeString([], {
14
+ hour: "2-digit",
15
+ minute: "2-digit"
16
+ })}` : t.toLocaleDateString([], {
17
+ month: "short",
18
+ day: "numeric",
19
+ hour: "2-digit",
20
+ minute: "2-digit"
21
+ });
22
+ }
23
+ function l({ workspaceData: l, isLoading: u, navigate: d }) {
24
+ let f = l?.upcomingEvents ?? [];
25
+ return /* @__PURE__ */ i(e, {
26
+ title: "Upcoming Events",
27
+ icon: /* @__PURE__ */ i(n, { className: "h-4 w-4" }),
28
+ size: "medium",
29
+ isLoading: u,
30
+ unavailable: !l,
31
+ headerAction: /* @__PURE__ */ a(s, {
32
+ variant: "ghost",
33
+ size: "sm",
34
+ className: "text-xs",
35
+ onClick: () => d("/calendar"),
36
+ children: ["View all ", /* @__PURE__ */ i(t, { className: "ml-1 h-3 w-3" })]
37
+ }),
38
+ children: f.length === 0 ? /* @__PURE__ */ a("div", {
39
+ className: "text-center py-4",
40
+ children: [/* @__PURE__ */ i("p", {
41
+ className: "text-sm text-muted-foreground",
42
+ children: "No upcoming events"
43
+ }), /* @__PURE__ */ i(s, {
44
+ variant: "outline",
45
+ size: "sm",
46
+ className: "mt-2",
47
+ onClick: () => d("/calendar"),
48
+ children: "Schedule an event"
49
+ })]
50
+ }) : /* @__PURE__ */ i("div", {
51
+ className: "space-y-2",
52
+ children: f.map((e) => /* @__PURE__ */ a("div", {
53
+ className: "flex items-start gap-3 p-2 rounded-md hover:bg-accent/5 cursor-pointer transition-colors",
54
+ onClick: () => d("/calendar"),
55
+ children: [
56
+ /* @__PURE__ */ i("div", {
57
+ className: "rounded-md bg-accent-pink-subtle text-accent-pink p-1.5 shrink-0",
58
+ children: /* @__PURE__ */ i(r, { className: "h-3.5 w-3.5" })
59
+ }),
60
+ /* @__PURE__ */ a("div", {
61
+ className: "min-w-0 flex-1",
62
+ children: [/* @__PURE__ */ i("p", {
63
+ className: "text-sm font-medium text-text-primary truncate",
64
+ children: e.title
65
+ }), /* @__PURE__ */ i("p", {
66
+ className: "text-xs text-muted-foreground",
67
+ children: c(e.startTime)
68
+ })]
69
+ }),
70
+ e.allDay && /* @__PURE__ */ i(o, {
71
+ variant: "secondary",
72
+ className: "text-[10px] shrink-0",
73
+ children: "All day"
74
+ })
75
+ ]
76
+ }, e.id))
77
+ })
78
+ });
79
+ }
80
+ //#endregion
81
+ export { l as UpcomingEventsWidget };
82
+
83
+ //# sourceMappingURL=UpcomingEventsWidget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpcomingEventsWidget.js","names":[],"sources":["../../../../src/pages/dashboard/widgets/UpcomingEventsWidget.tsx"],"sourcesContent":["import { Calendar, ArrowRight, Clock } from 'lucide-react';\nimport { Badge, Button } from '@burdenoff/fe-libs/ui';\nimport { WidgetWrapper } from '../WidgetWrapper';\nimport type { WidgetProps } from '../types';\n\nfunction formatEventDate(dateStr: string): string {\n const d = new Date(dateStr);\n const now = new Date();\n const isToday = d.toDateString() === now.toDateString();\n const tomorrow = new Date(now);\n tomorrow.setDate(tomorrow.getDate() + 1);\n const isTomorrow = d.toDateString() === tomorrow.toDateString();\n\n if (isToday)\n return `Today at ${d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}`;\n if (isTomorrow)\n return `Tomorrow at ${d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}`;\n return d.toLocaleDateString([], {\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n}\n\nexport function UpcomingEventsWidget({ workspaceData, isLoading, navigate }: WidgetProps) {\n const events = workspaceData?.upcomingEvents ?? [];\n\n return (\n <WidgetWrapper\n title=\"Upcoming Events\"\n icon={<Calendar className=\"h-4 w-4\" />}\n size=\"medium\"\n isLoading={isLoading}\n unavailable={!workspaceData}\n headerAction={\n <Button variant=\"ghost\" size=\"sm\" className=\"text-xs\" onClick={() => navigate('/calendar')}>\n View all <ArrowRight className=\"ml-1 h-3 w-3\" />\n </Button>\n }\n >\n {events.length === 0 ? (\n <div className=\"text-center py-4\">\n <p className=\"text-sm text-muted-foreground\">No upcoming events</p>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-2\"\n onClick={() => navigate('/calendar')}\n >\n Schedule an event\n </Button>\n </div>\n ) : (\n <div className=\"space-y-2\">\n {events.map((event) => (\n <div\n key={event.id}\n className=\"flex items-start gap-3 p-2 rounded-md hover:bg-accent/5 cursor-pointer transition-colors\"\n onClick={() => navigate('/calendar')}\n >\n <div className=\"rounded-md bg-accent-pink-subtle text-accent-pink p-1.5 shrink-0\">\n <Clock className=\"h-3.5 w-3.5\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-medium text-text-primary truncate\">{event.title}</p>\n <p className=\"text-xs text-muted-foreground\">{formatEventDate(event.startTime)}</p>\n </div>\n {event.allDay && (\n <Badge variant=\"secondary\" className=\"text-[10px] shrink-0\">\n All day\n </Badge>\n )}\n </div>\n ))}\n </div>\n )}\n </WidgetWrapper>\n );\n}\n"],"mappings":";;;;;AAKA,SAAS,EAAgB,GAAyB;CAChD,IAAM,IAAI,IAAI,KAAK,EAAQ,EACrB,oBAAM,IAAI,MAAM,EAChB,IAAU,EAAE,cAAc,KAAK,EAAI,cAAc,EACjD,IAAW,IAAI,KAAK,EAAI;AAC9B,GAAS,QAAQ,EAAS,SAAS,GAAG,EAAE;CACxC,IAAM,IAAa,EAAE,cAAc,KAAK,EAAS,cAAc;AAM/D,QAJI,IACK,YAAY,EAAE,mBAAmB,EAAE,EAAE;EAAE,MAAM;EAAW,QAAQ;EAAW,CAAC,KACjF,IACK,eAAe,EAAE,mBAAmB,EAAE,EAAE;EAAE,MAAM;EAAW,QAAQ;EAAW,CAAC,KACjF,EAAE,mBAAmB,EAAE,EAAE;EAC9B,OAAO;EACP,KAAK;EACL,MAAM;EACN,QAAQ;EACT,CAAC;;AAGJ,SAAgB,EAAqB,EAAE,kBAAe,cAAW,eAAyB;CACxF,IAAM,IAAS,GAAe,kBAAkB,EAAE;AAElD,QACE,kBAAC,GAAD;EACE,OAAM;EACN,MAAM,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA;EACtC,MAAK;EACM;EACX,aAAa,CAAC;EACd,cACE,kBAAC,GAAD;GAAQ,SAAQ;GAAQ,MAAK;GAAK,WAAU;GAAU,eAAe,EAAS,YAAY;aAA1F,CAA4F,aACjF,kBAAC,GAAD,EAAY,WAAU,gBAAiB,CAAA,CACzC;;YAGV,EAAO,WAAW,IACjB,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,KAAD;IAAG,WAAU;cAAgC;IAAsB,CAAA,EACnE,kBAAC,GAAD;IACE,SAAQ;IACR,MAAK;IACL,WAAU;IACV,eAAe,EAAS,YAAY;cACrC;IAEQ,CAAA,CACL;OAEN,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAO,KAAK,MACX,kBAAC,OAAD;IAEE,WAAU;IACV,eAAe,EAAS,YAAY;cAHtC;KAKE,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,GAAD,EAAO,WAAU,eAAgB,CAAA;MAC7B,CAAA;KACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,KAAD;OAAG,WAAU;iBAAkD,EAAM;OAAU,CAAA,EAC/E,kBAAC,KAAD;OAAG,WAAU;iBAAiC,EAAgB,EAAM,UAAU;OAAK,CAAA,CAC/E;;KACL,EAAM,UACL,kBAAC,GAAD;MAAO,SAAQ;MAAY,WAAU;gBAAuB;MAEpD,CAAA;KAEN;MAhBC,EAAM,GAgBP,CACN;GACE,CAAA;EAEM,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { WidgetProps } from '../types';
2
+
3
+ export declare function WelcomeWidget({ workspaceData, globalData, isLoading }: WidgetProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=WelcomeWidget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WelcomeWidget.d.ts","sourceRoot":"","sources":["../../../../src/pages/dashboard/widgets/WelcomeWidget.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAsB5C,wBAAgB,aAAa,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,WAAW,2CAgDlF"}
@@ -0,0 +1,71 @@
1
+ import { WidgetWrapper as e } from "../WidgetWrapper.js";
2
+ import { Activity as t, Building2 as n, FolderKanban as r, LayoutDashboard as i, Users as a } from "lucide-react";
3
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
4
+ //#region src/pages/dashboard/widgets/WelcomeWidget.tsx
5
+ function c({ icon: e, label: t, value: n }) {
6
+ return /* @__PURE__ */ s("div", {
7
+ className: "flex items-center gap-3 rounded-lg bg-bg-canvas p-3 border border-border-default",
8
+ children: [/* @__PURE__ */ o("div", {
9
+ className: "rounded-md bg-primary/10 p-2 text-primary",
10
+ children: e
11
+ }), /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("p", {
12
+ className: "text-2xl font-bold text-text-primary",
13
+ children: n
14
+ }), /* @__PURE__ */ o("p", {
15
+ className: "text-xs text-muted-foreground",
16
+ children: t
17
+ })] })]
18
+ });
19
+ }
20
+ function l({ workspaceData: l, globalData: u, isLoading: d }) {
21
+ let f = u?.currentUser, p = f?.firstName || f?.name?.split(" ")[0] || "there", m = (/* @__PURE__ */ new Date()).getHours(), h = m < 12 ? "Good morning" : m < 18 ? "Good afternoon" : "Good evening", g = l?.workspaces.total ?? 0, _ = l?.projects.total ?? 0, v = l?.groups.totalCount ?? 0, y = l?.recentActivities.length ?? 0;
22
+ return /* @__PURE__ */ o(e, {
23
+ title: "Dashboard",
24
+ icon: /* @__PURE__ */ o(i, { className: "h-4 w-4" }),
25
+ size: "large",
26
+ isLoading: d,
27
+ children: /* @__PURE__ */ s("div", {
28
+ className: "space-y-4",
29
+ children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ s("h2", {
30
+ className: "text-xl font-bold text-text-primary",
31
+ children: [
32
+ h,
33
+ ", ",
34
+ p,
35
+ "!"
36
+ ]
37
+ }), /* @__PURE__ */ o("p", {
38
+ className: "text-sm text-muted-foreground mt-1",
39
+ children: "Here's what's happening across your workspaces today."
40
+ })] }), /* @__PURE__ */ s("div", {
41
+ className: "grid grid-cols-2 sm:grid-cols-4 gap-3",
42
+ children: [
43
+ /* @__PURE__ */ o(c, {
44
+ icon: /* @__PURE__ */ o(n, { className: "h-4 w-4" }),
45
+ label: "Workspaces",
46
+ value: g
47
+ }),
48
+ /* @__PURE__ */ o(c, {
49
+ icon: /* @__PURE__ */ o(r, { className: "h-4 w-4" }),
50
+ label: "Projects",
51
+ value: _
52
+ }),
53
+ /* @__PURE__ */ o(c, {
54
+ icon: /* @__PURE__ */ o(a, { className: "h-4 w-4" }),
55
+ label: "Groups",
56
+ value: v
57
+ }),
58
+ /* @__PURE__ */ o(c, {
59
+ icon: /* @__PURE__ */ o(t, { className: "h-4 w-4" }),
60
+ label: "Recent Activity",
61
+ value: y
62
+ })
63
+ ]
64
+ })]
65
+ })
66
+ });
67
+ }
68
+ //#endregion
69
+ export { l as WelcomeWidget };
70
+
71
+ //# sourceMappingURL=WelcomeWidget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WelcomeWidget.js","names":[],"sources":["../../../../src/pages/dashboard/widgets/WelcomeWidget.tsx"],"sourcesContent":["import { LayoutDashboard, Building2, FolderKanban, Users, Activity } from 'lucide-react';\nimport { WidgetWrapper } from '../WidgetWrapper';\nimport type { WidgetProps } from '../types';\n\nfunction StatCard({\n icon,\n label,\n value,\n}: {\n icon: React.ReactNode;\n label: string;\n value: number | string;\n}) {\n return (\n <div className=\"flex items-center gap-3 rounded-lg bg-bg-canvas p-3 border border-border-default\">\n <div className=\"rounded-md bg-primary/10 p-2 text-primary\">{icon}</div>\n <div>\n <p className=\"text-2xl font-bold text-text-primary\">{value}</p>\n <p className=\"text-xs text-muted-foreground\">{label}</p>\n </div>\n </div>\n );\n}\n\nexport function WelcomeWidget({ workspaceData, globalData, isLoading }: WidgetProps) {\n const user = globalData?.currentUser;\n const firstName = user?.firstName || user?.name?.split(' ')[0] || 'there';\n const hour = new Date().getHours();\n const greeting = hour < 12 ? 'Good morning' : hour < 18 ? 'Good afternoon' : 'Good evening';\n\n const totalWorkspaces = workspaceData?.workspaces.total ?? 0;\n const totalProjects = workspaceData?.projects.total ?? 0;\n const totalGroups = workspaceData?.groups.totalCount ?? 0;\n const activityCount = workspaceData?.recentActivities.length ?? 0;\n\n return (\n <WidgetWrapper\n title=\"Dashboard\"\n icon={<LayoutDashboard className=\"h-4 w-4\" />}\n size=\"large\"\n isLoading={isLoading}\n >\n <div className=\"space-y-4\">\n <div>\n <h2 className=\"text-xl font-bold text-text-primary\">\n {greeting}, {firstName}!\n </h2>\n <p className=\"text-sm text-muted-foreground mt-1\">\n Here's what's happening across your workspaces today.\n </p>\n </div>\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-3\">\n <StatCard\n icon={<Building2 className=\"h-4 w-4\" />}\n label=\"Workspaces\"\n value={totalWorkspaces}\n />\n <StatCard\n icon={<FolderKanban className=\"h-4 w-4\" />}\n label=\"Projects\"\n value={totalProjects}\n />\n <StatCard icon={<Users className=\"h-4 w-4\" />} label=\"Groups\" value={totalGroups} />\n <StatCard\n icon={<Activity className=\"h-4 w-4\" />}\n label=\"Recent Activity\"\n value={activityCount}\n />\n </div>\n </div>\n </WidgetWrapper>\n );\n}\n"],"mappings":";;;;AAIA,SAAS,EAAS,EAChB,SACA,UACA,YAKC;AACD,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aAA6C;GAAW,CAAA,EACvE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;GAAG,WAAU;aAAwC;GAAU,CAAA,EAC/D,kBAAC,KAAD;GAAG,WAAU;aAAiC;GAAU,CAAA,CACpD,EAAA,CAAA,CACF;;;AAIV,SAAgB,EAAc,EAAE,kBAAe,eAAY,gBAA0B;CACnF,IAAM,IAAO,GAAY,aACnB,IAAY,GAAM,aAAa,GAAM,MAAM,MAAM,IAAI,CAAC,MAAM,SAC5D,qBAAO,IAAI,MAAM,EAAC,UAAU,EAC5B,IAAW,IAAO,KAAK,iBAAiB,IAAO,KAAK,mBAAmB,gBAEvE,IAAkB,GAAe,WAAW,SAAS,GACrD,IAAgB,GAAe,SAAS,SAAS,GACjD,IAAc,GAAe,OAAO,cAAc,GAClD,IAAgB,GAAe,iBAAiB,UAAU;AAEhE,QACE,kBAAC,GAAD;EACE,OAAM;EACN,MAAM,kBAAC,GAAD,EAAiB,WAAU,WAAY,CAAA;EAC7C,MAAK;EACM;YAEX,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cAAd;KACG;KAAS;KAAG;KAAU;KACpB;OACL,kBAAC,KAAD;IAAG,WAAU;cAAqC;IAE9C,CAAA,CACA,EAAA,CAAA,EACN,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD;MACE,MAAM,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA;MACvC,OAAM;MACN,OAAO;MACP,CAAA;KACF,kBAAC,GAAD;MACE,MAAM,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA;MAC1C,OAAM;MACN,OAAO;MACP,CAAA;KACF,kBAAC,GAAD;MAAU,MAAM,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;MAAE,OAAM;MAAS,OAAO;MAAe,CAAA;KACpF,kBAAC,GAAD;MACE,MAAM,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA;MACtC,OAAM;MACN,OAAO;MACP,CAAA;KACE;MACF;;EACQ,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { WidgetProps } from '../types';
2
+
3
+ export declare function WorkflowStatsWidget({ workspaceData, isLoading, navigate }: WidgetProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=WorkflowStatsWidget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowStatsWidget.d.ts","sourceRoot":"","sources":["../../../../src/pages/dashboard/widgets/WorkflowStatsWidget.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAS5C,wBAAgB,mBAAmB,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,WAAW,2CAkEtF"}
@@ -0,0 +1,97 @@
1
+ import { WidgetWrapper as e } from "../WidgetWrapper.js";
2
+ import { ArrowRight as t, CheckCircle2 as n, GitBranch as r, Pause as i, Play as a, XCircle as o } from "lucide-react";
3
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
4
+ import { Badge as l, Button as u } from "@burdenoff/fe-libs/ui";
5
+ //#region src/pages/dashboard/widgets/WorkflowStatsWidget.tsx
6
+ var d = {
7
+ RUNNING: {
8
+ icon: a,
9
+ color: "text-accent-blue"
10
+ },
11
+ COMPLETED: {
12
+ icon: n,
13
+ color: "text-status-success-text"
14
+ },
15
+ FAILED: {
16
+ icon: o,
17
+ color: "text-status-error-text"
18
+ },
19
+ PAUSED: {
20
+ icon: i,
21
+ color: "text-status-warning-text"
22
+ }
23
+ };
24
+ function f({ workspaceData: n, isLoading: i, navigate: a }) {
25
+ let o = n?.workflowStats;
26
+ return /* @__PURE__ */ s(e, {
27
+ title: "Workflows",
28
+ icon: /* @__PURE__ */ s(r, { className: "h-4 w-4" }),
29
+ size: "medium",
30
+ isLoading: i,
31
+ unavailable: !n,
32
+ headerAction: /* @__PURE__ */ c(u, {
33
+ variant: "ghost",
34
+ size: "sm",
35
+ className: "text-xs",
36
+ onClick: () => a("/workflows"),
37
+ children: ["View all ", /* @__PURE__ */ s(t, { className: "ml-1 h-3 w-3" })]
38
+ }),
39
+ children: o ? /* @__PURE__ */ c("div", {
40
+ className: "space-y-3",
41
+ children: [/* @__PURE__ */ c("div", {
42
+ className: "grid grid-cols-2 gap-3",
43
+ children: [/* @__PURE__ */ c("div", {
44
+ className: "rounded-lg bg-bg-canvas p-3 border border-border-default text-center",
45
+ children: [/* @__PURE__ */ s("p", {
46
+ className: "text-2xl font-bold text-text-primary",
47
+ children: o.activeWorkflowsCount
48
+ }), /* @__PURE__ */ s("p", {
49
+ className: "text-xs text-muted-foreground",
50
+ children: "Active"
51
+ })]
52
+ }), /* @__PURE__ */ c("div", {
53
+ className: "rounded-lg bg-bg-canvas p-3 border border-border-default text-center",
54
+ children: [/* @__PURE__ */ s("p", {
55
+ className: "text-2xl font-bold text-text-primary",
56
+ children: o.archivedWorkflowsCount
57
+ }), /* @__PURE__ */ s("p", {
58
+ className: "text-xs text-muted-foreground",
59
+ children: "Archived"
60
+ })]
61
+ })]
62
+ }), o.recentRuns.length > 0 && /* @__PURE__ */ c("div", {
63
+ className: "space-y-1.5",
64
+ children: [/* @__PURE__ */ s("p", {
65
+ className: "text-xs font-medium text-muted-foreground uppercase tracking-wider",
66
+ children: "Recent Runs"
67
+ }), o.recentRuns.slice(0, 3).map((e) => {
68
+ let t = d[e.status] || d.RUNNING, n = t.icon;
69
+ return /* @__PURE__ */ c("div", {
70
+ className: "flex items-center justify-between p-1.5 rounded hover:bg-accent/5 transition-colors",
71
+ children: [/* @__PURE__ */ c("div", {
72
+ className: "flex items-center gap-2 min-w-0",
73
+ children: [/* @__PURE__ */ s(n, { className: `h-3.5 w-3.5 ${t.color}` }), /* @__PURE__ */ s("span", {
74
+ className: "text-sm text-text-primary truncate",
75
+ children: e.workflowKey
76
+ })]
77
+ }), /* @__PURE__ */ s(l, {
78
+ variant: "outline",
79
+ className: "text-[10px]",
80
+ children: e.status
81
+ })]
82
+ }, e.id);
83
+ })]
84
+ })]
85
+ }) : /* @__PURE__ */ s("div", {
86
+ className: "text-center py-4",
87
+ children: /* @__PURE__ */ s("p", {
88
+ className: "text-sm text-muted-foreground",
89
+ children: "No workflow data available"
90
+ })
91
+ })
92
+ });
93
+ }
94
+ //#endregion
95
+ export { f as WorkflowStatsWidget };
96
+
97
+ //# sourceMappingURL=WorkflowStatsWidget.js.map