@burdenoff/microfe-workspaces 2026.624.2 → 2026.625.2

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 (45) hide show
  1. package/dist/WorkspacesRoutes.js +64 -63
  2. package/dist/WorkspacesRoutes.js.map +1 -1
  3. package/dist/components/CreateWorkspaceDialog.js.map +1 -1
  4. package/dist/components/MemberListItem.js +7 -6
  5. package/dist/components/MemberListItem.js.map +1 -1
  6. package/dist/components/ProjectCard.js +13 -12
  7. package/dist/components/ProjectCard.js.map +1 -1
  8. package/dist/components/WorkspaceCard.js +8 -7
  9. package/dist/components/WorkspaceCard.js.map +1 -1
  10. package/dist/components/WorkspaceContextPathSync.js +34 -0
  11. package/dist/components/WorkspaceContextPathSync.js.map +1 -0
  12. package/dist/pages/ActivityListPage.js +67 -55
  13. package/dist/pages/ActivityListPage.js.map +1 -1
  14. package/dist/pages/CreateWorkspacePage.js +5 -4
  15. package/dist/pages/CreateWorkspacePage.js.map +1 -1
  16. package/dist/pages/InviteAcceptancePage.js +45 -36
  17. package/dist/pages/InviteAcceptancePage.js.map +1 -1
  18. package/dist/pages/MembersListPage.js +2 -2
  19. package/dist/pages/MembersListPage.js.map +1 -1
  20. package/dist/pages/PendingInvitesPage.js +68 -67
  21. package/dist/pages/PendingInvitesPage.js.map +1 -1
  22. package/dist/pages/ProjectDetailPage.js +333 -302
  23. package/dist/pages/ProjectDetailPage.js.map +1 -1
  24. package/dist/pages/ProjectMembersPage.js +4 -4
  25. package/dist/pages/ProjectMembersPage.js.map +1 -1
  26. package/dist/pages/ProjectsListPage.js +234 -226
  27. package/dist/pages/ProjectsListPage.js.map +1 -1
  28. package/dist/pages/WorkspaceDetailPage.js +196 -178
  29. package/dist/pages/WorkspaceDetailPage.js.map +1 -1
  30. package/dist/pages/WorkspaceInvitePage.js +372 -353
  31. package/dist/pages/WorkspaceInvitePage.js.map +1 -1
  32. package/dist/pages/WorkspaceSettingsPage.js +98 -90
  33. package/dist/pages/WorkspaceSettingsPage.js.map +1 -1
  34. package/dist/pages/WorkspacesListPage.js +132 -121
  35. package/dist/pages/WorkspacesListPage.js.map +1 -1
  36. package/dist/pages/dashboard/WidgetWrapper.js +7 -6
  37. package/dist/pages/dashboard/WidgetWrapper.js.map +1 -1
  38. package/dist/pages/dashboard/widgets/GroupsWidget.js.map +1 -1
  39. package/dist/pages/dashboard/widgets/MembersWidget.js +1 -1
  40. package/dist/pages/dashboard/widgets/MembersWidget.js.map +1 -1
  41. package/dist/pages/dashboard/widgets/WelcomeWidget.js +45 -37
  42. package/dist/pages/dashboard/widgets/WelcomeWidget.js.map +1 -1
  43. package/dist/pages/dashboard/widgets/WorkflowStatsWidget.js +2 -2
  44. package/dist/pages/dashboard/widgets/WorkflowStatsWidget.js.map +1 -1
  45. package/package.json +2 -2
@@ -1 +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=\"size-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=\"size-3\" />\n </Button>\n }\n >\n {groups.length === 0 ? (\n <div className=\"text-center py-3\">\n <p className=\"text-xs text-text-secondary\">No groups yet</p>\n </div>\n ) : (\n <div className=\"space-y-1.5\">\n {groups.slice(0, 4).map((group) => (\n <button\n key={group.id}\n type=\"button\"\n className=\"w-full flex items-center gap-2 p-1.5 rounded hover:bg-accent/5 cursor-pointer transition-colors text-left\"\n onClick={() => navigate('/groups')}\n >\n <div className=\"size-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-text-secondary truncate\">{group.description}</p>\n )}\n </div>\n </button>\n ))}\n {total > 4 && (\n <p className=\"text-[11px] text-text-secondary 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,UAAW,CAAA;EAClC,MAAK;EACM;EACX,aAAa,CAAC;EACd,cACE,kBAAC,GAAD;GAAQ,SAAQ;GAAQ,MAAK;GAAK,WAAU;GAAU,eAAe,EAAS,UAAU;aACtF,kBAAC,GAAD,EAAY,WAAU,UAAW,CAAA;GAC1B,CAAA;YAGV,EAAO,WAAW,IACjB,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,KAAD;IAAG,WAAU;cAA8B;IAAiB,CAAA;GACxD,CAAA,GAEN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACG,EAAO,MAAM,GAAG,EAAE,CAAC,KAAK,MACvB,kBAAC,UAAD;IAEE,MAAK;IACL,WAAU;IACV,eAAe,EAAS,UAAU;cAJpC,CAME,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;gBAA4C,EAAM;MAAgB,CAAA,CAE7E;OACC;MAdF,EAAM,GAcJ,CACT,EACD,IAAQ,KACP,kBAAC,KAAD;IAAG,WAAU;cAAb;KAA2D;KACvD,IAAQ;KAAE;KACV;MAEF;;EAEM,CAAA"}
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=\"size-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=\"size-3\" />\n </Button>\n }\n >\n {groups.length === 0 ? (\n <div className=\"text-center py-3\">\n <p className=\"text-xs text-text-secondary\">No groups yet</p>\n </div>\n ) : (\n <div className=\"space-y-1.5\">\n {groups.slice(0, 4).map((group) => (\n <button\n key={group.id}\n type=\"button\"\n className=\"w-full flex items-center gap-2 p-1.5 rounded hover:bg-accent/5 cursor-pointer transition-colors text-left\"\n onClick={() => navigate('/groups')}\n >\n <div className=\"size-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-text-secondary truncate\">{group.description}</p>\n )}\n </div>\n </button>\n ))}\n {total > 4 && (\n <p className=\"text-[11px] text-text-secondary text-center\">+{total - 4} more groups</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,UAAW,CAAA;EAClC,MAAK;EACM;EACX,aAAa,CAAC;EACd,cACE,kBAAC,GAAD;GAAQ,SAAQ;GAAQ,MAAK;GAAK,WAAU;GAAU,eAAe,EAAS,UAAU;aACtF,kBAAC,GAAD,EAAY,WAAU,UAAW,CAAA;GAC1B,CAAA;YAGV,EAAO,WAAW,IACjB,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,KAAD;IAAG,WAAU;cAA8B;IAAiB,CAAA;GACxD,CAAA,GAEN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACG,EAAO,MAAM,GAAG,EAAE,CAAC,KAAK,MACvB,kBAAC,UAAD;IAEE,MAAK;IACL,WAAU;IACV,eAAe,EAAS,UAAU;cAJpC,CAME,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;gBAA4C,EAAM;MAAgB,CAAA,CAE7E;OACC;MAdF,EAAM,GAcJ,CACT,EACD,IAAQ,KACP,kBAAC,KAAD;IAAG,WAAU;cAAb;KAA2D;KAAE,IAAQ;KAAE;KAAgB;MAErF;;EAEM,CAAA"}
@@ -24,7 +24,7 @@ function s({ workspaceData: s, globalData: c, isLoading: l, navigate: u }) {
24
24
  /* @__PURE__ */ a("div", {
25
25
  className: "text-center",
26
26
  children: [/* @__PURE__ */ i("p", {
27
- className: "text-3xl font-bold text-text-primary",
27
+ className: "text-3xl font-bold text-text-primary tabular-nums",
28
28
  children: f
29
29
  }), /* @__PURE__ */ a("p", {
30
30
  className: "text-xs text-text-secondary",
@@ -1 +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=\"size-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=\"size-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-text-secondary\">\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?invite=true')}\n >\n <UserPlus className=\"size-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=\"size-8 rounded-full bg-action-primary-bg/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=\"size-8 rounded-full bg-bg-sunken text-text-secondary 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,UAAW,CAAA;EAClC,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,UAAW,CAAA;GAC1B,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,kCAAkC;eAJ5D,CAME,kBAAC,GAAD,EAAU,WAAU,iBAAkB,CAAA,EAAA,kBAE/B;;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,CAAoJ,KAChJ,IAAkB,EAChB;QAEJ;;IAEJ;;EACQ,CAAA"}
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=\"size-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=\"size-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 tabular-nums\">{totalMembers}</p>\n <p className=\"text-xs text-text-secondary\">\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?invite=true')}\n >\n <UserPlus className=\"size-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=\"size-8 rounded-full bg-action-primary-bg/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=\"size-8 rounded-full bg-bg-sunken text-text-secondary 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,UAAW,CAAA;EAClC,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,UAAW,CAAA;GAC1B,CAAA;YAGX,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,KAAD;MAAG,WAAU;gBAAqD;MAAiB,CAAA,EACnF,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,kCAAkC;eAJ5D,CAME,kBAAC,GAAD,EAAU,WAAU,iBAAkB,CAAA,EAAA,kBAE/B;;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,CAAoJ,KAChJ,IAAkB,EAChB;QAEJ;;IAEJ;;EACQ,CAAA"}
@@ -1,64 +1,72 @@
1
1
  import { WidgetWrapper as e } from "../WidgetWrapper.js";
2
2
  import { Activity as t, Building2 as n, FolderKanban as r, LayoutDashboard as i, Users as a } from "lucide-react";
3
3
  import { jsx as o, jsxs as s } from "react/jsx-runtime";
4
+ import { EmphasisPanel as c, GlassCard as l } from "@burdenoff/fe-libs/ui";
4
5
  //#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-action-primary-bg/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-text-secondary",
16
- children: t
17
- })] })]
6
+ function u({ icon: e, label: t, value: n }) {
7
+ return /* @__PURE__ */ o(l, {
8
+ treatment: "metric",
9
+ className: "p-3",
10
+ children: /* @__PURE__ */ s("div", {
11
+ className: "flex items-center gap-3",
12
+ children: [/* @__PURE__ */ o("div", {
13
+ className: "rounded-md bg-action-primary-bg/10 p-2 text-primary",
14
+ children: e
15
+ }), /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("p", {
16
+ className: "text-2xl font-bold text-text-primary tabular-nums",
17
+ children: n
18
+ }), /* @__PURE__ */ o("p", {
19
+ className: "text-xs text-text-muted",
20
+ children: t
21
+ })] })]
22
+ })
18
23
  });
19
24
  }
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;
25
+ function d({ workspaceData: l, globalData: d, isLoading: f }) {
26
+ let p = d?.currentUser, m = p?.firstName || p?.name?.split(" ")[0] || "there", h = (/* @__PURE__ */ new Date()).getHours(), g = h < 12 ? "Good morning" : h < 18 ? "Good afternoon" : "Good evening", _ = l?.workspaces.total ?? 0, v = l?.projects.total ?? 0, y = l?.groups.totalCount ?? 0, b = l?.recentActivities.length ?? 0;
22
27
  return /* @__PURE__ */ o(e, {
23
28
  title: "Dashboard",
24
29
  icon: /* @__PURE__ */ o(i, { className: "size-4" }),
25
30
  size: "large",
26
- isLoading: d,
31
+ isLoading: f,
27
32
  children: /* @__PURE__ */ s("div", {
28
33
  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-text-secondary mt-1",
39
- children: "Here's what's happening across your workspaces today."
40
- })] }), /* @__PURE__ */ s("div", {
34
+ children: [/* @__PURE__ */ s(c, {
35
+ className: "p-4",
36
+ children: [/* @__PURE__ */ s("h2", {
37
+ className: "text-xl font-bold text-text-primary",
38
+ children: [
39
+ g,
40
+ ", ",
41
+ m,
42
+ "!"
43
+ ]
44
+ }), /* @__PURE__ */ o("p", {
45
+ className: "text-sm text-text-secondary mt-1",
46
+ children: "Here's what's happening across your workspaces today."
47
+ })]
48
+ }), /* @__PURE__ */ s("div", {
41
49
  className: "grid grid-cols-2 sm:grid-cols-4 gap-3",
42
50
  children: [
43
- /* @__PURE__ */ o(c, {
51
+ /* @__PURE__ */ o(u, {
44
52
  icon: /* @__PURE__ */ o(n, { className: "size-4" }),
45
53
  label: "Workspaces",
46
- value: g
54
+ value: _
47
55
  }),
48
- /* @__PURE__ */ o(c, {
56
+ /* @__PURE__ */ o(u, {
49
57
  icon: /* @__PURE__ */ o(r, { className: "size-4" }),
50
58
  label: "Projects",
51
- value: _
59
+ value: v
52
60
  }),
53
- /* @__PURE__ */ o(c, {
61
+ /* @__PURE__ */ o(u, {
54
62
  icon: /* @__PURE__ */ o(a, { className: "size-4" }),
55
63
  label: "Groups",
56
- value: v
64
+ value: y
57
65
  }),
58
- /* @__PURE__ */ o(c, {
66
+ /* @__PURE__ */ o(u, {
59
67
  icon: /* @__PURE__ */ o(t, { className: "size-4" }),
60
68
  label: "Recent Activity",
61
- value: y
69
+ value: b
62
70
  })
63
71
  ]
64
72
  })]
@@ -66,6 +74,6 @@ function l({ workspaceData: l, globalData: u, isLoading: d }) {
66
74
  });
67
75
  }
68
76
  //#endregion
69
- export { l as WelcomeWidget };
77
+ export { d as WelcomeWidget };
70
78
 
71
79
  //# sourceMappingURL=WelcomeWidget.js.map
@@ -1 +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-action-primary-bg/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-text-secondary\">{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=\"size-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-text-secondary 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=\"size-4\" />}\n label=\"Workspaces\"\n value={totalWorkspaces}\n />\n <StatCard\n icon={<FolderKanban className=\"size-4\" />}\n label=\"Projects\"\n value={totalProjects}\n />\n <StatCard icon={<Users className=\"size-4\" />} label=\"Groups\" value={totalGroups} />\n <StatCard\n icon={<Activity className=\"size-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;aAAuD;GAAW,CAAA,EACjF,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;GAAG,WAAU;aAAwC;GAAU,CAAA,EAC/D,kBAAC,KAAD;GAAG,WAAU;aAA+B;GAAU,CAAA,CAClD,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,UAAW,CAAA;EAC5C,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;cAAmC;IAE5C,CAAA,CACA,EAAA,CAAA,EACN,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD;MACE,MAAM,kBAAC,GAAD,EAAW,WAAU,UAAW,CAAA;MACtC,OAAM;MACN,OAAO;MACP,CAAA;KACF,kBAAC,GAAD;MACE,MAAM,kBAAC,GAAD,EAAc,WAAU,UAAW,CAAA;MACzC,OAAM;MACN,OAAO;MACP,CAAA;KACF,kBAAC,GAAD;MAAU,MAAM,kBAAC,GAAD,EAAO,WAAU,UAAW,CAAA;MAAE,OAAM;MAAS,OAAO;MAAe,CAAA;KACnF,kBAAC,GAAD;MACE,MAAM,kBAAC,GAAD,EAAU,WAAU,UAAW,CAAA;MACrC,OAAM;MACN,OAAO;MACP,CAAA;KACE;MACF;;EACQ,CAAA"}
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 { GlassCard, EmphasisPanel } from '@burdenoff/fe-libs/ui';\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 <GlassCard treatment=\"metric\" className=\"p-3\">\n <div className=\"flex items-center gap-3\">\n <div className=\"rounded-md bg-action-primary-bg/10 p-2 text-primary\">{icon}</div>\n <div>\n <p className=\"text-2xl font-bold text-text-primary tabular-nums\">{value}</p>\n <p className=\"text-xs text-text-muted\">{label}</p>\n </div>\n </div>\n </GlassCard>\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=\"size-4\" />}\n size=\"large\"\n isLoading={isLoading}\n >\n <div className=\"space-y-4\">\n <EmphasisPanel className=\"p-4\">\n <h2 className=\"text-xl font-bold text-text-primary\">\n {greeting}, {firstName}!\n </h2>\n <p className=\"text-sm text-text-secondary mt-1\">\n Here's what's happening across your workspaces today.\n </p>\n </EmphasisPanel>\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-3\">\n <StatCard\n icon={<Building2 className=\"size-4\" />}\n label=\"Workspaces\"\n value={totalWorkspaces}\n />\n <StatCard\n icon={<FolderKanban className=\"size-4\" />}\n label=\"Projects\"\n value={totalProjects}\n />\n <StatCard icon={<Users className=\"size-4\" />} label=\"Groups\" value={totalGroups} />\n <StatCard\n icon={<Activity className=\"size-4\" />}\n label=\"Recent Activity\"\n value={activityCount}\n />\n </div>\n </div>\n </WidgetWrapper>\n );\n}\n"],"mappings":";;;;;AAKA,SAAS,EAAS,EAChB,SACA,UACA,YAKC;AACD,QACE,kBAAC,GAAD;EAAW,WAAU;EAAS,WAAU;YACtC,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;cAAuD;IAAW,CAAA,EACjF,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;IAAG,WAAU;cAAqD;IAAU,CAAA,EAC5E,kBAAC,KAAD;IAAG,WAAU;cAA2B;IAAU,CAAA,CAC9C,EAAA,CAAA,CACF;;EACI,CAAA;;AAIhB,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,UAAW,CAAA;EAC5C,MAAK;EACM;YAEX,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,GAAD;IAAe,WAAU;cAAzB,CACE,kBAAC,MAAD;KAAI,WAAU;eAAd;MACG;MAAS;MAAG;MAAU;MACpB;QACL,kBAAC,KAAD;KAAG,WAAU;eAAmC;KAE5C,CAAA,CACU;OAChB,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD;MACE,MAAM,kBAAC,GAAD,EAAW,WAAU,UAAW,CAAA;MACtC,OAAM;MACN,OAAO;MACP,CAAA;KACF,kBAAC,GAAD;MACE,MAAM,kBAAC,GAAD,EAAc,WAAU,UAAW,CAAA;MACzC,OAAM;MACN,OAAO;MACP,CAAA;KACF,kBAAC,GAAD;MAAU,MAAM,kBAAC,GAAD,EAAO,WAAU,UAAW,CAAA;MAAE,OAAM;MAAS,OAAO;MAAe,CAAA;KACnF,kBAAC,GAAD;MACE,MAAM,kBAAC,GAAD,EAAU,WAAU,UAAW,CAAA;MACrC,OAAM;MACN,OAAO;MACP,CAAA;KACE;MACF;;EACQ,CAAA"}
@@ -43,7 +43,7 @@ function f({ workspaceData: n, isLoading: i, navigate: a }) {
43
43
  children: [/* @__PURE__ */ c("div", {
44
44
  className: "rounded-lg bg-bg-canvas p-3 border border-border-default text-center",
45
45
  children: [/* @__PURE__ */ s("p", {
46
- className: "text-2xl font-bold text-text-primary",
46
+ className: "text-2xl font-bold text-text-primary tabular-nums",
47
47
  children: o.activeWorkflowsCount
48
48
  }), /* @__PURE__ */ s("p", {
49
49
  className: "text-xs text-text-secondary",
@@ -52,7 +52,7 @@ function f({ workspaceData: n, isLoading: i, navigate: a }) {
52
52
  }), /* @__PURE__ */ c("div", {
53
53
  className: "rounded-lg bg-bg-canvas p-3 border border-border-default text-center",
54
54
  children: [/* @__PURE__ */ s("p", {
55
- className: "text-2xl font-bold text-text-primary",
55
+ className: "text-2xl font-bold text-text-primary tabular-nums",
56
56
  children: o.archivedWorkflowsCount
57
57
  }), /* @__PURE__ */ s("p", {
58
58
  className: "text-xs text-text-secondary",
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowStatsWidget.js","names":[],"sources":["../../../../src/pages/dashboard/widgets/WorkflowStatsWidget.tsx"],"sourcesContent":["import { GitBranch, ArrowRight, Play, Pause, CheckCircle2, XCircle } from 'lucide-react';\nimport { Badge, Button } from '@burdenoff/fe-libs/ui';\nimport { WidgetWrapper } from '../WidgetWrapper';\nimport type { WidgetProps } from '../types';\n\nconst runStatusIcons: Record<string, { icon: typeof Play; color: string }> = {\n RUNNING: { icon: Play, color: 'text-accent-blue' },\n COMPLETED: { icon: CheckCircle2, color: 'text-status-success-text' },\n FAILED: { icon: XCircle, color: 'text-status-error-text' },\n PAUSED: { icon: Pause, color: 'text-status-warning-text' },\n};\n\nexport function WorkflowStatsWidget({ workspaceData, isLoading, navigate }: WidgetProps) {\n const stats = workspaceData?.workflowStats;\n\n return (\n <WidgetWrapper\n title=\"Workflows\"\n icon={<GitBranch className=\"size-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('/workflows')}\n >\n View all <ArrowRight className=\"ml-1 size-3\" />\n </Button>\n }\n >\n {!stats ? (\n <div className=\"text-center py-4\">\n <p className=\"text-sm text-text-secondary\">No workflow data available</p>\n </div>\n ) : (\n <div className=\"space-y-3\">\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"rounded-lg bg-bg-canvas p-3 border border-border-default text-center\">\n <p className=\"text-2xl font-bold text-text-primary\">{stats.activeWorkflowsCount}</p>\n <p className=\"text-xs text-text-secondary\">Active</p>\n </div>\n <div className=\"rounded-lg bg-bg-canvas p-3 border border-border-default text-center\">\n <p className=\"text-2xl font-bold text-text-primary\">{stats.archivedWorkflowsCount}</p>\n <p className=\"text-xs text-text-secondary\">Archived</p>\n </div>\n </div>\n {stats.recentRuns.length > 0 && (\n <div className=\"space-y-1.5\">\n <p className=\"text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Recent Runs\n </p>\n {stats.recentRuns.slice(0, 3).map((run) => {\n const statusInfo = runStatusIcons[run.status] || runStatusIcons.RUNNING;\n const StatusIcon = statusInfo.icon;\n return (\n <div\n key={run.id}\n className=\"flex items-center justify-between p-1.5 rounded hover:bg-accent/5 transition-colors\"\n >\n <div className=\"flex items-center gap-2 min-w-0\">\n <StatusIcon className={`size-3.5 ${statusInfo.color}`} />\n <span className=\"text-sm text-text-primary truncate\">{run.workflowKey}</span>\n </div>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {run.status}\n </Badge>\n </div>\n );\n })}\n </div>\n )}\n </div>\n )}\n </WidgetWrapper>\n );\n}\n"],"mappings":";;;;;AAKA,IAAM,IAAuE;CAC3E,SAAS;EAAE,MAAM;EAAM,OAAO;EAAoB;CAClD,WAAW;EAAE,MAAM;EAAc,OAAO;EAA4B;CACpE,QAAQ;EAAE,MAAM;EAAS,OAAO;EAA0B;CAC1D,QAAQ;EAAE,MAAM;EAAO,OAAO;EAA4B;CAC3D;AAED,SAAgB,EAAoB,EAAE,kBAAe,cAAW,eAAyB;CACvF,IAAM,IAAQ,GAAe;AAE7B,QACE,kBAAC,GAAD;EACE,OAAM;EACN,MAAM,kBAAC,GAAD,EAAW,WAAU,UAAW,CAAA;EACtC,MAAK;EACM;EACX,aAAa,CAAC;EACd,cACE,kBAAC,GAAD;GACE,SAAQ;GACR,MAAK;GACL,WAAU;GACV,eAAe,EAAS,aAAa;aAJvC,CAKC,aACU,kBAAC,GAAD,EAAY,WAAU,eAAgB,CAAA,CACxC;;YAGT,IAKA,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,KAAD;MAAG,WAAU;gBAAwC,EAAM;MAAyB,CAAA,EACpF,kBAAC,KAAD;MAAG,WAAU;gBAA8B;MAAU,CAAA,CACjD;QACN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,KAAD;MAAG,WAAU;gBAAwC,EAAM;MAA2B,CAAA,EACtF,kBAAC,KAAD;MAAG,WAAU;gBAA8B;MAAY,CAAA,CACnD;OACF;OACL,EAAM,WAAW,SAAS,KACzB,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,KAAD;KAAG,WAAU;eAAmE;KAE5E,CAAA,EACH,EAAM,WAAW,MAAM,GAAG,EAAE,CAAC,KAAK,MAAQ;KACzC,IAAM,IAAa,EAAe,EAAI,WAAW,EAAe,SAC1D,IAAa,EAAW;AAC9B,YACE,kBAAC,OAAD;MAEE,WAAU;gBAFZ,CAIE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,GAAD,EAAY,WAAW,YAAY,EAAW,SAAW,CAAA,EACzD,kBAAC,QAAD;QAAM,WAAU;kBAAsC,EAAI;QAAmB,CAAA,CACzE;UACN,kBAAC,GAAD;OAAO,SAAQ;OAAU,WAAU;iBAChC,EAAI;OACC,CAAA,CACJ;QAVC,EAAI,GAUL;MAER,CACE;MAEJ;OAxCN,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,KAAD;IAAG,WAAU;cAA8B;IAA8B,CAAA;GACrE,CAAA;EAwCM,CAAA"}
1
+ {"version":3,"file":"WorkflowStatsWidget.js","names":[],"sources":["../../../../src/pages/dashboard/widgets/WorkflowStatsWidget.tsx"],"sourcesContent":["import { GitBranch, ArrowRight, Play, Pause, CheckCircle2, XCircle } from 'lucide-react';\nimport { Badge, Button } from '@burdenoff/fe-libs/ui';\nimport { WidgetWrapper } from '../WidgetWrapper';\nimport type { WidgetProps } from '../types';\n\nconst runStatusIcons: Record<string, { icon: typeof Play; color: string }> = {\n RUNNING: { icon: Play, color: 'text-accent-blue' },\n COMPLETED: { icon: CheckCircle2, color: 'text-status-success-text' },\n FAILED: { icon: XCircle, color: 'text-status-error-text' },\n PAUSED: { icon: Pause, color: 'text-status-warning-text' },\n};\n\nexport function WorkflowStatsWidget({ workspaceData, isLoading, navigate }: WidgetProps) {\n const stats = workspaceData?.workflowStats;\n\n return (\n <WidgetWrapper\n title=\"Workflows\"\n icon={<GitBranch className=\"size-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('/workflows')}\n >\n View all <ArrowRight className=\"ml-1 size-3\" />\n </Button>\n }\n >\n {!stats ? (\n <div className=\"text-center py-4\">\n <p className=\"text-sm text-text-secondary\">No workflow data available</p>\n </div>\n ) : (\n <div className=\"space-y-3\">\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"rounded-lg bg-bg-canvas p-3 border border-border-default text-center\">\n <p className=\"text-2xl font-bold text-text-primary tabular-nums\">{stats.activeWorkflowsCount}</p>\n <p className=\"text-xs text-text-secondary\">Active</p>\n </div>\n <div className=\"rounded-lg bg-bg-canvas p-3 border border-border-default text-center\">\n <p className=\"text-2xl font-bold text-text-primary tabular-nums\">{stats.archivedWorkflowsCount}</p>\n <p className=\"text-xs text-text-secondary\">Archived</p>\n </div>\n </div>\n {stats.recentRuns.length > 0 && (\n <div className=\"space-y-1.5\">\n <p className=\"text-xs font-medium text-text-secondary uppercase tracking-wider\">\n Recent Runs\n </p>\n {stats.recentRuns.slice(0, 3).map((run) => {\n const statusInfo = runStatusIcons[run.status] || runStatusIcons.RUNNING;\n const StatusIcon = statusInfo.icon;\n return (\n <div\n key={run.id}\n className=\"flex items-center justify-between p-1.5 rounded hover:bg-accent/5 transition-colors\"\n >\n <div className=\"flex items-center gap-2 min-w-0\">\n <StatusIcon className={`size-3.5 ${statusInfo.color}`} />\n <span className=\"text-sm text-text-primary truncate\">{run.workflowKey}</span>\n </div>\n <Badge variant=\"outline\" className=\"text-[10px]\">\n {run.status}\n </Badge>\n </div>\n );\n })}\n </div>\n )}\n </div>\n )}\n </WidgetWrapper>\n );\n}\n"],"mappings":";;;;;AAKA,IAAM,IAAuE;CAC3E,SAAS;EAAE,MAAM;EAAM,OAAO;EAAoB;CAClD,WAAW;EAAE,MAAM;EAAc,OAAO;EAA4B;CACpE,QAAQ;EAAE,MAAM;EAAS,OAAO;EAA0B;CAC1D,QAAQ;EAAE,MAAM;EAAO,OAAO;EAA4B;CAC3D;AAED,SAAgB,EAAoB,EAAE,kBAAe,cAAW,eAAyB;CACvF,IAAM,IAAQ,GAAe;AAE7B,QACE,kBAAC,GAAD;EACE,OAAM;EACN,MAAM,kBAAC,GAAD,EAAW,WAAU,UAAW,CAAA;EACtC,MAAK;EACM;EACX,aAAa,CAAC;EACd,cACE,kBAAC,GAAD;GACE,SAAQ;GACR,MAAK;GACL,WAAU;GACV,eAAe,EAAS,aAAa;aAJvC,CAKC,aACU,kBAAC,GAAD,EAAY,WAAU,eAAgB,CAAA,CACxC;;YAGT,IAKA,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,KAAD;MAAG,WAAU;gBAAqD,EAAM;MAAyB,CAAA,EACjG,kBAAC,KAAD;MAAG,WAAU;gBAA8B;MAAU,CAAA,CACjD;QACN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,KAAD;MAAG,WAAU;gBAAqD,EAAM;MAA2B,CAAA,EACnG,kBAAC,KAAD;MAAG,WAAU;gBAA8B;MAAY,CAAA,CACnD;OACF;OACL,EAAM,WAAW,SAAS,KACzB,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,KAAD;KAAG,WAAU;eAAmE;KAE5E,CAAA,EACH,EAAM,WAAW,MAAM,GAAG,EAAE,CAAC,KAAK,MAAQ;KACzC,IAAM,IAAa,EAAe,EAAI,WAAW,EAAe,SAC1D,IAAa,EAAW;AAC9B,YACE,kBAAC,OAAD;MAEE,WAAU;gBAFZ,CAIE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,GAAD,EAAY,WAAW,YAAY,EAAW,SAAW,CAAA,EACzD,kBAAC,QAAD;QAAM,WAAU;kBAAsC,EAAI;QAAmB,CAAA,CACzE;UACN,kBAAC,GAAD;OAAO,SAAQ;OAAU,WAAU;iBAChC,EAAI;OACC,CAAA,CACJ;QAVC,EAAI,GAUL;MAER,CACE;MAEJ;OAxCN,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,KAAD;IAAG,WAAU;cAA8B;IAA8B,CAAA;GACrE,CAAA;EAwCM,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/microfe-workspaces",
3
- "version": "2026.624.2",
3
+ "version": "2026.625.2",
4
4
  "description": "Workspaces microfrontend for Burdenoff products",
5
5
  "type": "module",
6
6
  "files": [
@@ -44,7 +44,7 @@
44
44
  },
45
45
  "dependencies": {
46
46
  "@apollo/client": "^4.0.11",
47
- "@burdenoff/fe-libs": "2026.623.6",
47
+ "@burdenoff/fe-libs": "2026.625.1",
48
48
  "@radix-ui/react-icons": "^1.3.2",
49
49
  "@tanstack/react-query": "^5.62.13",
50
50
  "axios": "^1.15.2",