@burdenoff/microfe-timecampus 2026.608.1 → 2026.625.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/dist/timecampus/components/ErrorBoundary.js +4 -4
  2. package/dist/timecampus/components/ErrorBoundary.js.map +1 -1
  3. package/dist/timecampus/components/LoadingSkeleton.js +8 -8
  4. package/dist/timecampus/components/LoadingSkeleton.js.map +1 -1
  5. package/dist/timecampus/components/PageLayout.js +17 -13
  6. package/dist/timecampus/components/PageLayout.js.map +1 -1
  7. package/dist/timecampus/components/StatCard.js +22 -19
  8. package/dist/timecampus/components/StatCard.js.map +1 -1
  9. package/dist/timecampus/pages/HomePage.js +183 -163
  10. package/dist/timecampus/pages/HomePage.js.map +1 -1
  11. package/dist/timecampus/pages/applets/AppletStorePage.js +17 -17
  12. package/dist/timecampus/pages/applets/AppletStorePage.js.map +1 -1
  13. package/dist/timecampus/pages/applets/InstalledAppletsPage.js +18 -18
  14. package/dist/timecampus/pages/applets/InstalledAppletsPage.js.map +1 -1
  15. package/dist/timecampus/pages/application-usage/ApplicationUsagePage.js +28 -28
  16. package/dist/timecampus/pages/application-usage/ApplicationUsagePage.js.map +1 -1
  17. package/dist/timecampus/pages/application-usage/ApplicationUsageSettingsPage.js +19 -19
  18. package/dist/timecampus/pages/application-usage/ApplicationUsageSettingsPage.js.map +1 -1
  19. package/dist/timecampus/pages/channels/ChannelsPage.js +15 -15
  20. package/dist/timecampus/pages/channels/ChannelsPage.js.map +1 -1
  21. package/dist/timecampus/pages/client-portal/ClientPortalPage.js +22 -22
  22. package/dist/timecampus/pages/client-portal/ClientPortalPage.js.map +1 -1
  23. package/dist/timecampus/pages/dashboard/AnalyticsPage.js +20 -20
  24. package/dist/timecampus/pages/dashboard/AnalyticsPage.js.map +1 -1
  25. package/dist/timecampus/pages/dashboard/ReportsPage.js +20 -20
  26. package/dist/timecampus/pages/dashboard/ReportsPage.js.map +1 -1
  27. package/dist/timecampus/pages/email-tracking/EmailAnalyticsPage.js +18 -18
  28. package/dist/timecampus/pages/email-tracking/EmailAnalyticsPage.js.map +1 -1
  29. package/dist/timecampus/pages/email-tracking/EmailSettingsPage.js +22 -22
  30. package/dist/timecampus/pages/email-tracking/EmailSettingsPage.js.map +1 -1
  31. package/dist/timecampus/pages/email-tracking/EmailTrackingPage.js +14 -14
  32. package/dist/timecampus/pages/email-tracking/EmailTrackingPage.js.map +1 -1
  33. package/dist/timecampus/pages/expense-tracking/ExpenseTrackingPage.js +22 -22
  34. package/dist/timecampus/pages/expense-tracking/ExpenseTrackingPage.js.map +1 -1
  35. package/dist/timecampus/pages/focus-score/FocusScorePage.js +27 -27
  36. package/dist/timecampus/pages/focus-score/FocusScorePage.js.map +1 -1
  37. package/dist/timecampus/pages/focus-score/FocusScoreSettingsPage.js +19 -19
  38. package/dist/timecampus/pages/focus-score/FocusScoreSettingsPage.js.map +1 -1
  39. package/dist/timecampus/pages/geofencing/GeofencingPage.js +16 -16
  40. package/dist/timecampus/pages/geofencing/GeofencingPage.js.map +1 -1
  41. package/dist/timecampus/pages/geofencing/GeofencingSettingsPage.js +18 -18
  42. package/dist/timecampus/pages/geofencing/GeofencingSettingsPage.js.map +1 -1
  43. package/dist/timecampus/pages/industry-solutions/IndustrySolutionsPage.js +16 -16
  44. package/dist/timecampus/pages/industry-solutions/IndustrySolutionsPage.js.map +1 -1
  45. package/dist/timecampus/pages/location-tracking/LocationPrivacySettingsPage.js +21 -21
  46. package/dist/timecampus/pages/location-tracking/LocationPrivacySettingsPage.js.map +1 -1
  47. package/dist/timecampus/pages/location-tracking/LocationTrackingPage.js +22 -22
  48. package/dist/timecampus/pages/location-tracking/LocationTrackingPage.js.map +1 -1
  49. package/dist/timecampus/pages/meetings/MeetingAnalyticsPage.js +18 -18
  50. package/dist/timecampus/pages/meetings/MeetingAnalyticsPage.js.map +1 -1
  51. package/dist/timecampus/pages/meetings/MeetingCreatePage.js +16 -16
  52. package/dist/timecampus/pages/meetings/MeetingCreatePage.js.map +1 -1
  53. package/dist/timecampus/pages/meetings/MeetingDetailPage.js +29 -29
  54. package/dist/timecampus/pages/meetings/MeetingDetailPage.js.map +1 -1
  55. package/dist/timecampus/pages/meetings/MeetingsPage.js +20 -20
  56. package/dist/timecampus/pages/meetings/MeetingsPage.js.map +1 -1
  57. package/dist/timecampus/pages/pomodoro/PomodoroAnalyticsPage.js +23 -23
  58. package/dist/timecampus/pages/pomodoro/PomodoroAnalyticsPage.js.map +1 -1
  59. package/dist/timecampus/pages/pomodoro/PomodoroPage.js +23 -23
  60. package/dist/timecampus/pages/pomodoro/PomodoroPage.js.map +1 -1
  61. package/dist/timecampus/pages/pomodoro/PomodoroSettingsPage.js +30 -30
  62. package/dist/timecampus/pages/pomodoro/PomodoroSettingsPage.js.map +1 -1
  63. package/dist/timecampus/pages/projects/ProjectCreatePage.js +19 -19
  64. package/dist/timecampus/pages/projects/ProjectCreatePage.js.map +1 -1
  65. package/dist/timecampus/pages/projects/ProjectDetailPage.js +23 -23
  66. package/dist/timecampus/pages/projects/ProjectDetailPage.js.map +1 -1
  67. package/dist/timecampus/pages/projects/ProjectsPage.js +20 -20
  68. package/dist/timecampus/pages/projects/ProjectsPage.js.map +1 -1
  69. package/dist/timecampus/pages/projects/TasksPage.js +15 -15
  70. package/dist/timecampus/pages/projects/TasksPage.js.map +1 -1
  71. package/dist/timecampus/pages/resource-planning/ResourcePlanningPage.js +25 -25
  72. package/dist/timecampus/pages/resource-planning/ResourcePlanningPage.js.map +1 -1
  73. package/dist/timecampus/pages/team/TeamAnalyticsPage.js +19 -19
  74. package/dist/timecampus/pages/team/TeamAnalyticsPage.js.map +1 -1
  75. package/dist/timecampus/pages/team/TeamMembersPage.js +21 -21
  76. package/dist/timecampus/pages/team/TeamMembersPage.js.map +1 -1
  77. package/dist/timecampus/pages/team/TeamPage.js +19 -19
  78. package/dist/timecampus/pages/team/TeamPage.js.map +1 -1
  79. package/dist/timecampus/pages/team-activity/TeamActivityPage.js +21 -21
  80. package/dist/timecampus/pages/team-activity/TeamActivityPage.js.map +1 -1
  81. package/dist/timecampus/pages/team-activity/TeamActivitySettingsPage.js +20 -20
  82. package/dist/timecampus/pages/team-activity/TeamActivitySettingsPage.js.map +1 -1
  83. package/dist/timecampus/pages/templates/TemplateApplicationPage.js +16 -16
  84. package/dist/timecampus/pages/templates/TemplateApplicationPage.js.map +1 -1
  85. package/dist/timecampus/pages/templates/TemplateDetailPage.js +21 -21
  86. package/dist/timecampus/pages/templates/TemplateDetailPage.js.map +1 -1
  87. package/dist/timecampus/pages/templates/TemplatesPage.js +16 -16
  88. package/dist/timecampus/pages/templates/TemplatesPage.js.map +1 -1
  89. package/dist/timecampus/pages/time/TimeEntriesPage.js +25 -25
  90. package/dist/timecampus/pages/time/TimeEntriesPage.js.map +1 -1
  91. package/dist/timecampus/pages/time/TimeTrackingPage.js +24 -24
  92. package/dist/timecampus/pages/time/TimeTrackingPage.js.map +1 -1
  93. package/dist/timecampus/pages/time/TimerPage.js +20 -20
  94. package/dist/timecampus/pages/time/TimerPage.js.map +1 -1
  95. package/dist/timecampus/pages/time-approval/TimeApprovalPage.js +27 -27
  96. package/dist/timecampus/pages/time-approval/TimeApprovalPage.js.map +1 -1
  97. package/dist/timecampus/pages/widgets/WidgetDetailPage.js +20 -20
  98. package/dist/timecampus/pages/widgets/WidgetDetailPage.js.map +1 -1
  99. package/dist/timecampus/pages/widgets/WidgetsPage.js +18 -18
  100. package/dist/timecampus/pages/widgets/WidgetsPage.js.map +1 -1
  101. package/dist/timecampus/pages/work-patterns/WorkPatternsPage.js +23 -23
  102. package/dist/timecampus/pages/work-patterns/WorkPatternsPage.js.map +1 -1
  103. package/dist/timecampus/pages/work-patterns/WorkPatternsSettingsPage.js +19 -19
  104. package/dist/timecampus/pages/work-patterns/WorkPatternsSettingsPage.js.map +1 -1
  105. package/dist/timecampus/pages/workflows/WorkflowsPage.js +17 -17
  106. package/dist/timecampus/pages/workflows/WorkflowsPage.js.map +1 -1
  107. package/package.json +2 -2
@@ -1,229 +1,249 @@
1
1
  import { cn as e, formatHours as t, formatTimerDuration as n } from "../utils/helpers.js";
2
- import { PageLayout as r } from "../components/PageLayout.js";
3
- import { StatCard as i } from "../components/StatCard.js";
4
- import { LoadingSkeleton as a } from "../components/LoadingSkeleton.js";
5
- import { useTimeCampusStore as o } from "../store/timecampusStore.js";
6
- import { useGetTimeEntryStatsQuery as s, useListTimeEntriesQuery as c } from "../../generated/wspace-operations.js";
7
- import { ArrowRight as l, BarChart3 as u, CheckCircle as d, Clock as f, FolderOpen as p, Play as m, Timer as h, TrendingUp as g, Users as _ } from "lucide-react";
8
- import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
9
- import { useI18n as x } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
2
+ import { StatCard as r } from "../components/StatCard.js";
3
+ import { LoadingSkeleton as i } from "../components/LoadingSkeleton.js";
4
+ import { useTimeCampusStore as a } from "../store/timecampusStore.js";
5
+ import { useGetTimeEntryStatsQuery as o, useListTimeEntriesQuery as s } from "../../generated/wspace-operations.js";
6
+ import { ArrowRight as c, BarChart3 as l, CheckCircle as u, Clock as d, FolderOpen as f, Play as p, Timer as m, TrendingUp as h, Users as g } from "lucide-react";
7
+ import { jsx as _, jsxs as v } from "react/jsx-runtime";
8
+ import { AuroraBackground as y, CTAOverflowMenu as b, EmphasisPanel as x, GlassCard as S, GradientText as C } from "@burdenoff/fe-libs/ui";
9
+ import { useI18n as w } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
10
10
  //#region src/timecampus/pages/HomePage.tsx
11
- var S = () => {
12
- let { t: S } = x(), C = (e, t) => {
13
- let n = S(e);
11
+ var T = () => {
12
+ let { t: T } = w(), E = (e, t) => {
13
+ let n = T(e);
14
14
  return n === e ? t : n;
15
- }, { activeTimer: w, startTimer: T, stopTimer: E } = o(), { data: D, loading: O } = s(), { data: k, loading: A } = c({ variables: { limit: 4 } }), j = D?.timeEntryStats, M = k?.timeEntries?.items ?? [];
16
- return O && A ? /* @__PURE__ */ y(r, {
17
- title: C("timecampus.home.title", "Dashboard"),
18
- description: C("timecampus.home.description", "Overview of your time tracking and productivity"),
19
- children: /* @__PURE__ */ y(a, {
15
+ }, { activeTimer: D, startTimer: O, stopTimer: k } = a(), { data: A, loading: j } = o(), { data: M, loading: N } = s({ variables: { limit: 4 } }), P = A?.timeEntryStats, F = M?.timeEntries?.items ?? [], I = /* @__PURE__ */ _(b, {
16
+ primary: {
17
+ label: D ? `${n(D.seconds)} - ${E("timecampus.home.actions.stop", "Stop")}` : E("timecampus.home.actions.startTimer", "Start Timer"),
18
+ onSelect: () => D ? k() : O(),
19
+ icon: _(D ? m : p, { className: "h-4 w-4" })
20
+ },
21
+ actions: [{
22
+ label: E("timecampus.home.quickActions.viewProjects.label", "View Projects"),
23
+ onSelect: () => {},
24
+ icon: /* @__PURE__ */ _(f, { className: "h-4 w-4" })
25
+ }, {
26
+ label: E("timecampus.home.quickActions.reports.label", "Reports"),
27
+ onSelect: () => {},
28
+ icon: /* @__PURE__ */ _(l, { className: "h-4 w-4" })
29
+ }]
30
+ }), L = () => /* @__PURE__ */ v("div", {
31
+ className: "relative overflow-hidden rounded-2xl border border-border-seam bg-gloss-card p-5 sm:p-6",
32
+ children: [/* @__PURE__ */ _(y, { intensity: "subtle" }), /* @__PURE__ */ v("div", {
33
+ className: "relative flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
34
+ children: [/* @__PURE__ */ v("div", {
35
+ className: "min-w-0",
36
+ children: [/* @__PURE__ */ _("h1", {
37
+ className: "text-2xl font-bold text-text-primary",
38
+ children: /* @__PURE__ */ _(C, { children: E("timecampus.home.title", "Dashboard") })
39
+ }), /* @__PURE__ */ _("p", {
40
+ className: "mt-1 text-sm text-text-secondary",
41
+ children: E("timecampus.home.description", "Overview of your time tracking and productivity")
42
+ })]
43
+ }), I]
44
+ })]
45
+ });
46
+ return j && N ? /* @__PURE__ */ v("div", {
47
+ className: "min-h-full space-y-6 p-4 sm:p-6",
48
+ children: [L(), /* @__PURE__ */ _(i, {
20
49
  variant: "card",
21
50
  count: 4
22
- })
23
- }) : /* @__PURE__ */ b(r, {
24
- title: C("timecampus.home.title", "Dashboard"),
25
- description: C("timecampus.home.description", "Overview of your time tracking and productivity"),
26
- actions: /* @__PURE__ */ y("button", {
27
- onClick: () => w ? E() : T(),
28
- className: e("inline-flex items-center gap-2 rounded-md px-4 py-2 text-sm font-medium transition-colors", w ? "bg-red-500 text-white hover:bg-red-600" : "bg-primary text-primary-foreground hover:bg-primary/90"),
29
- children: w ? /* @__PURE__ */ b(v, { children: [
30
- /* @__PURE__ */ y(h, { className: "h-4 w-4" }),
31
- n(w.seconds),
32
- " -",
33
- " ",
34
- C("timecampus.home.actions.stop", "Stop")
35
- ] }) : /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(m, { className: "h-4 w-4" }), C("timecampus.home.actions.startTimer", "Start Timer")] })
36
- }),
51
+ })]
52
+ }) : /* @__PURE__ */ v("div", {
53
+ className: "min-h-full space-y-6 p-4 sm:p-6",
37
54
  children: [
38
- /* @__PURE__ */ b("div", {
55
+ L(),
56
+ /* @__PURE__ */ v("div", {
39
57
  className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4",
40
58
  children: [
41
- /* @__PURE__ */ y(i, {
42
- title: C("timecampus.home.stats.today", "Today"),
43
- value: t(j?.totalHours ?? 0),
44
- icon: /* @__PURE__ */ y(f, { className: "h-5 w-5" }),
59
+ /* @__PURE__ */ _(r, {
60
+ featured: !0,
61
+ title: E("timecampus.home.stats.today", "Today"),
62
+ value: t(P?.totalHours ?? 0),
63
+ icon: /* @__PURE__ */ _(d, { className: "h-5 w-5" }),
45
64
  trend: {
46
65
  value: 12.5,
47
- label: C("timecampus.home.stats.vsYesterday", "vs yesterday")
66
+ label: E("timecampus.home.stats.vsYesterday", "vs yesterday")
48
67
  }
49
68
  }),
50
- /* @__PURE__ */ y(i, {
51
- title: C("timecampus.home.stats.billable", "Billable"),
52
- value: t(j?.billableHours ?? 0),
53
- icon: /* @__PURE__ */ y(g, { className: "h-5 w-5" }),
54
- description: `${j?.totalEntries ?? 0} ${C("timecampus.home.stats.entries", "entries")}`
69
+ /* @__PURE__ */ _(r, {
70
+ title: E("timecampus.home.stats.billable", "Billable"),
71
+ value: t(P?.billableHours ?? 0),
72
+ icon: /* @__PURE__ */ _(h, { className: "h-5 w-5" }),
73
+ description: `${P?.totalEntries ?? 0} ${E("timecampus.home.stats.entries", "entries")}`
55
74
  }),
56
- /* @__PURE__ */ y(i, {
57
- title: C("timecampus.home.stats.activeTimers", "Active Timers"),
58
- value: j?.activeTimers ?? 0,
59
- icon: /* @__PURE__ */ y(p, { className: "h-5 w-5" }),
60
- description: C("timecampus.home.stats.currentlyRunning", "Currently running")
75
+ /* @__PURE__ */ _(r, {
76
+ title: E("timecampus.home.stats.activeTimers", "Active Timers"),
77
+ value: P?.activeTimers ?? 0,
78
+ icon: /* @__PURE__ */ _(f, { className: "h-5 w-5" }),
79
+ description: E("timecampus.home.stats.currentlyRunning", "Currently running")
61
80
  }),
62
- /* @__PURE__ */ y(i, {
63
- title: C("timecampus.home.stats.totalEntries", "Entries"),
64
- value: j?.totalEntries ?? 0,
65
- icon: /* @__PURE__ */ y(u, { className: "h-5 w-5" }),
66
- description: C("timecampus.home.stats.totalEntriesDescription", "Total time entries"),
67
- iconBgColor: "bg-emerald-100 text-emerald-600 dark:bg-emerald-900/30 dark:text-emerald-400"
81
+ /* @__PURE__ */ _(r, {
82
+ title: E("timecampus.home.stats.totalEntries", "Entries"),
83
+ value: P?.totalEntries ?? 0,
84
+ icon: /* @__PURE__ */ _(l, { className: "h-5 w-5" }),
85
+ description: E("timecampus.home.stats.totalEntriesDescription", "Total time entries")
68
86
  })
69
87
  ]
70
88
  }),
71
- /* @__PURE__ */ b("div", {
89
+ /* @__PURE__ */ v("div", {
72
90
  className: "grid grid-cols-1 gap-6 lg:grid-cols-3",
73
- children: [/* @__PURE__ */ b("div", {
74
- className: "lg:col-span-2 rounded-xl border border-border bg-card p-6",
75
- children: [/* @__PURE__ */ b("div", {
91
+ children: [/* @__PURE__ */ v(S, {
92
+ treatment: "plain",
93
+ className: "border-border-seam p-6 lg:col-span-2",
94
+ children: [/* @__PURE__ */ v("div", {
76
95
  className: "mb-4 flex items-center justify-between",
77
- children: [/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("h3", {
78
- className: "text-sm font-semibold text-foreground",
79
- children: C("timecampus.home.recentEntries.title", "Recent Time Entries")
80
- }), /* @__PURE__ */ y("p", {
81
- className: "text-xs text-muted-foreground",
82
- children: C("timecampus.home.recentEntries.description", "Your latest tracked activities")
83
- })] }), /* @__PURE__ */ b("button", {
84
- className: "flex items-center gap-1 text-xs text-primary hover:underline",
96
+ children: [/* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("h3", {
97
+ className: "text-sm font-semibold text-text-primary",
98
+ children: E("timecampus.home.recentEntries.title", "Recent Time Entries")
99
+ }), /* @__PURE__ */ _("p", {
100
+ className: "text-xs text-text-secondary",
101
+ children: E("timecampus.home.recentEntries.description", "Your latest tracked activities")
102
+ })] }), /* @__PURE__ */ v("button", {
103
+ className: "inline-flex min-h-[2.75rem] items-center gap-1 rounded-md px-2 text-xs font-medium text-primary transition-colors hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-action-primary-border",
85
104
  children: [
86
- C("timecampus.home.recentEntries.viewAll", "View all"),
105
+ E("timecampus.home.recentEntries.viewAll", "View all"),
87
106
  " ",
88
- /* @__PURE__ */ y(l, { className: "h-3 w-3" })
107
+ /* @__PURE__ */ _(c, { className: "h-3 w-3" })
89
108
  ]
90
109
  })]
91
- }), A ? /* @__PURE__ */ y(a, {
110
+ }), N ? /* @__PURE__ */ _(i, {
92
111
  variant: "list",
93
112
  count: 4
94
- }) : /* @__PURE__ */ b("div", {
113
+ }) : /* @__PURE__ */ v("div", {
95
114
  className: "flex flex-col gap-3",
96
- children: [M.map((e) => /* @__PURE__ */ b("div", {
97
- className: "flex items-center justify-between rounded-lg border border-border p-3 transition-colors hover:bg-muted/50",
98
- children: [/* @__PURE__ */ b("div", {
115
+ children: [F.map((n) => /* @__PURE__ */ v("div", {
116
+ className: "flex items-center justify-between rounded-lg border border-border-seam p-3 transition-colors hover:bg-bg-sunken/50",
117
+ children: [/* @__PURE__ */ v("div", {
99
118
  className: "min-w-0 flex-1",
100
- children: [/* @__PURE__ */ y("p", {
101
- className: "text-sm font-medium text-foreground",
102
- children: e.project?.name ?? C("timecampus.home.recentEntries.noProject", "No Project")
103
- }), /* @__PURE__ */ y("p", {
104
- className: "text-xs text-muted-foreground",
105
- children: e.description ?? C("timecampus.home.recentEntries.noDescription", "No description")
119
+ children: [/* @__PURE__ */ _("p", {
120
+ className: "text-sm font-medium text-text-primary",
121
+ children: n.project?.name ?? E("timecampus.home.recentEntries.noProject", "No Project")
122
+ }), /* @__PURE__ */ _("p", {
123
+ className: "text-xs text-text-secondary",
124
+ children: n.description ?? E("timecampus.home.recentEntries.noDescription", "No description")
106
125
  })]
107
- }), /* @__PURE__ */ b("div", {
126
+ }), /* @__PURE__ */ v("div", {
108
127
  className: "ml-4 text-right",
109
- children: [/* @__PURE__ */ y("p", {
110
- className: "text-sm font-mono font-medium text-foreground",
111
- children: t((e.duration ?? 0) / 3600)
112
- }), /* @__PURE__ */ y("span", {
113
- className: "inline-flex items-center rounded-full bg-emerald-100 px-2 py-0.5 text-xs font-medium text-emerald-800 dark:bg-emerald-900/30 dark:text-emerald-400",
114
- children: e.isRunning ? C("timecampus.home.recentEntries.status.running", "running") : C("timecampus.home.recentEntries.status.completed", "completed")
128
+ children: [/* @__PURE__ */ _("p", {
129
+ className: "font-mono text-sm font-medium tabular-nums text-text-primary",
130
+ children: t((n.duration ?? 0) / 3600)
131
+ }), /* @__PURE__ */ v("span", {
132
+ className: e("inline-flex items-center gap-1.5 rounded-full px-2 py-0.5 text-xs font-medium", n.isRunning ? "bg-status-info-bg text-status-info-text" : "bg-status-success-bg text-status-success-text"),
133
+ children: [n.isRunning && /* @__PURE__ */ _("span", { className: "h-1.5 w-1.5 rounded-full bg-status-info-text motion-safe:animate-vc-glow-pulse" }), n.isRunning ? E("timecampus.home.recentEntries.status.running", "running") : E("timecampus.home.recentEntries.status.completed", "completed")]
115
134
  })]
116
135
  })]
117
- }, e.id)), M.length === 0 && /* @__PURE__ */ y("p", {
118
- className: "text-center text-sm text-muted-foreground py-4",
119
- children: C("timecampus.home.recentEntries.empty", "No time entries yet")
136
+ }, n.id)), F.length === 0 && /* @__PURE__ */ _("p", {
137
+ className: "py-4 text-center text-sm text-text-secondary",
138
+ children: E("timecampus.home.recentEntries.empty", "No time entries yet")
120
139
  })]
121
140
  })]
122
- }), /* @__PURE__ */ b("div", {
123
- className: "rounded-xl border border-border bg-card p-6",
124
- children: [/* @__PURE__ */ b("div", {
141
+ }), /* @__PURE__ */ v(x, {
142
+ className: "p-6",
143
+ children: [/* @__PURE__ */ v("div", {
125
144
  className: "mb-4",
126
- children: [/* @__PURE__ */ y("h3", {
127
- className: "text-sm font-semibold text-foreground",
128
- children: C("timecampus.home.summary.title", "Quick Summary")
129
- }), /* @__PURE__ */ y("p", {
130
- className: "text-xs text-muted-foreground",
131
- children: C("timecampus.home.summary.description", "Time tracking overview")
145
+ children: [/* @__PURE__ */ _("h3", {
146
+ className: "text-sm font-semibold text-text-primary",
147
+ children: E("timecampus.home.summary.title", "Quick Summary")
148
+ }), /* @__PURE__ */ _("p", {
149
+ className: "text-xs text-text-secondary",
150
+ children: E("timecampus.home.summary.description", "Time tracking overview")
132
151
  })]
133
- }), /* @__PURE__ */ b("div", {
152
+ }), /* @__PURE__ */ v("div", {
134
153
  className: "flex flex-col gap-4",
135
154
  children: [
136
- /* @__PURE__ */ b("div", {
137
- className: "flex items-center justify-between rounded-lg border border-border p-3",
138
- children: [/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("p", {
139
- className: "text-xs font-medium text-muted-foreground",
140
- children: C("timecampus.home.summary.totalHours", "Total Hours")
141
- }), /* @__PURE__ */ y("p", {
142
- className: "mt-1 text-xl font-bold text-foreground",
143
- children: t(j?.totalHours ?? 0)
144
- })] }), /* @__PURE__ */ y(f, { className: "h-5 w-5 text-muted-foreground" })]
155
+ /* @__PURE__ */ v("div", {
156
+ className: "flex items-center justify-between rounded-lg border border-border-seam bg-bg-surface/40 p-3",
157
+ children: [/* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
158
+ className: "text-xs font-medium text-text-secondary",
159
+ children: E("timecampus.home.summary.totalHours", "Total Hours")
160
+ }), /* @__PURE__ */ _("p", {
161
+ className: "mt-1 text-xl font-bold tabular-nums text-text-primary",
162
+ children: t(P?.totalHours ?? 0)
163
+ })] }), /* @__PURE__ */ _(d, { className: "h-5 w-5 text-text-secondary" })]
145
164
  }),
146
- /* @__PURE__ */ b("div", {
147
- className: "flex items-center justify-between rounded-lg border border-border p-3",
148
- children: [/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("p", {
149
- className: "text-xs font-medium text-muted-foreground",
150
- children: C("timecampus.home.summary.billableHours", "Billable Hours")
151
- }), /* @__PURE__ */ y("p", {
152
- className: "mt-1 text-xl font-bold text-foreground",
153
- children: t(j?.billableHours ?? 0)
154
- })] }), /* @__PURE__ */ y(g, { className: "h-5 w-5 text-muted-foreground" })]
165
+ /* @__PURE__ */ v("div", {
166
+ className: "flex items-center justify-between rounded-lg border border-border-seam bg-bg-surface/40 p-3",
167
+ children: [/* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
168
+ className: "text-xs font-medium text-text-secondary",
169
+ children: E("timecampus.home.summary.billableHours", "Billable Hours")
170
+ }), /* @__PURE__ */ _("p", {
171
+ className: "mt-1 text-xl font-bold tabular-nums text-text-primary",
172
+ children: t(P?.billableHours ?? 0)
173
+ })] }), /* @__PURE__ */ _(h, { className: "h-5 w-5 text-text-secondary" })]
155
174
  }),
156
- /* @__PURE__ */ b("div", {
157
- className: "flex items-center justify-between rounded-lg border border-border p-3",
158
- children: [/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("p", {
159
- className: "text-xs font-medium text-muted-foreground",
160
- children: C("timecampus.home.summary.activeTimers", "Active Timers")
161
- }), /* @__PURE__ */ y("p", {
162
- className: "mt-1 text-xl font-bold text-foreground",
163
- children: j?.activeTimers ?? 0
164
- })] }), /* @__PURE__ */ y(_, { className: "h-5 w-5 text-muted-foreground" })]
175
+ /* @__PURE__ */ v("div", {
176
+ className: "flex items-center justify-between rounded-lg border border-border-seam bg-bg-surface/40 p-3",
177
+ children: [/* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("p", {
178
+ className: "text-xs font-medium text-text-secondary",
179
+ children: E("timecampus.home.summary.activeTimers", "Active Timers")
180
+ }), /* @__PURE__ */ _("p", {
181
+ className: "mt-1 text-xl font-bold tabular-nums text-text-primary",
182
+ children: P?.activeTimers ?? 0
183
+ })] }), /* @__PURE__ */ _(g, { className: "h-5 w-5 text-text-secondary" })]
165
184
  })
166
185
  ]
167
186
  })]
168
187
  })]
169
188
  }),
170
- /* @__PURE__ */ b("div", {
171
- className: "rounded-xl border border-border bg-card p-6",
172
- children: [/* @__PURE__ */ b("div", {
189
+ /* @__PURE__ */ v(S, {
190
+ treatment: "plain",
191
+ className: "border-border-seam p-6",
192
+ children: [/* @__PURE__ */ v("div", {
173
193
  className: "mb-4",
174
- children: [/* @__PURE__ */ y("h3", {
175
- className: "text-sm font-semibold text-foreground",
176
- children: C("timecampus.home.quickActions.title", "Quick Actions")
177
- }), /* @__PURE__ */ y("p", {
178
- className: "text-xs text-muted-foreground",
179
- children: C("timecampus.home.quickActions.description", "Frequently used features")
194
+ children: [/* @__PURE__ */ _("h3", {
195
+ className: "text-sm font-semibold text-text-primary",
196
+ children: E("timecampus.home.quickActions.title", "Quick Actions")
197
+ }), /* @__PURE__ */ _("p", {
198
+ className: "text-xs text-text-secondary",
199
+ children: E("timecampus.home.quickActions.description", "Frequently used features")
180
200
  })]
181
- }), /* @__PURE__ */ y("div", {
201
+ }), /* @__PURE__ */ _("div", {
182
202
  className: "grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-6",
183
203
  children: [
184
204
  {
185
- label: C("timecampus.home.quickActions.startTimer.label", "Start Timer"),
186
- icon: m,
187
- description: C("timecampus.home.quickActions.startTimer.description", "Track your time")
188
- },
189
- {
190
- label: C("timecampus.home.quickActions.viewProjects.label", "View Projects"),
205
+ label: E("timecampus.home.quickActions.startTimer.label", "Start Timer"),
191
206
  icon: p,
192
- description: C("timecampus.home.quickActions.viewProjects.description", "Manage projects")
207
+ description: E("timecampus.home.quickActions.startTimer.description", "Track your time")
193
208
  },
194
209
  {
195
- label: C("timecampus.home.quickActions.timeEntries.label", "Time Entries"),
210
+ label: E("timecampus.home.quickActions.viewProjects.label", "View Projects"),
196
211
  icon: f,
197
- description: C("timecampus.home.quickActions.timeEntries.description", "View all entries")
212
+ description: E("timecampus.home.quickActions.viewProjects.description", "Manage projects")
213
+ },
214
+ {
215
+ label: E("timecampus.home.quickActions.timeEntries.label", "Time Entries"),
216
+ icon: d,
217
+ description: E("timecampus.home.quickActions.timeEntries.description", "View all entries")
198
218
  },
199
219
  {
200
- label: C("timecampus.home.quickActions.teamActivity.label", "Team Activity"),
201
- icon: _,
202
- description: C("timecampus.home.quickActions.teamActivity.description", "See team status")
220
+ label: E("timecampus.home.quickActions.teamActivity.label", "Team Activity"),
221
+ icon: g,
222
+ description: E("timecampus.home.quickActions.teamActivity.description", "See team status")
203
223
  },
204
224
  {
205
- label: C("timecampus.home.quickActions.reports.label", "Reports"),
206
- icon: u,
207
- description: C("timecampus.home.quickActions.reports.description", "Generate reports")
225
+ label: E("timecampus.home.quickActions.reports.label", "Reports"),
226
+ icon: l,
227
+ description: E("timecampus.home.quickActions.reports.description", "Generate reports")
208
228
  },
209
229
  {
210
- label: C("timecampus.home.quickActions.approvals.label", "Approvals"),
211
- icon: d,
212
- description: C("timecampus.home.quickActions.approvals.description", "Review timesheets")
230
+ label: E("timecampus.home.quickActions.approvals.label", "Approvals"),
231
+ icon: u,
232
+ description: E("timecampus.home.quickActions.approvals.description", "Review timesheets")
213
233
  }
214
- ].map(({ label: e, icon: t, description: n }) => /* @__PURE__ */ b("button", {
215
- className: "flex flex-col items-center gap-2 rounded-lg border border-border bg-background p-4 text-center transition-colors hover:bg-muted/50",
234
+ ].map(({ label: e, icon: t, description: n }) => /* @__PURE__ */ v("button", {
235
+ className: "flex min-h-[2.75rem] flex-col items-center gap-2 rounded-lg border border-border-seam bg-bg-surface p-4 text-center transition-colors hover:bg-bg-sunken/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-action-primary-border",
216
236
  children: [
217
- /* @__PURE__ */ y("div", {
218
- className: "rounded-full bg-primary/10 p-3",
219
- children: /* @__PURE__ */ y(t, { className: "h-5 w-5 text-primary" })
237
+ /* @__PURE__ */ _("div", {
238
+ className: "rounded-full bg-action-primary-bg/10 p-3",
239
+ children: /* @__PURE__ */ _(t, { className: "h-5 w-5 text-primary" })
220
240
  }),
221
- /* @__PURE__ */ y("span", {
222
- className: "text-sm font-medium text-foreground",
241
+ /* @__PURE__ */ _("span", {
242
+ className: "text-sm font-medium text-text-primary",
223
243
  children: e
224
244
  }),
225
- /* @__PURE__ */ y("span", {
226
- className: "text-xs text-muted-foreground",
245
+ /* @__PURE__ */ _("span", {
246
+ className: "text-xs text-text-secondary",
227
247
  children: n
228
248
  })
229
249
  ]
@@ -234,6 +254,6 @@ var S = () => {
234
254
  });
235
255
  };
236
256
  //#endregion
237
- export { S as HomePage };
257
+ export { T as HomePage };
238
258
 
239
259
  //# sourceMappingURL=HomePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HomePage.js","names":[],"sources":["../../../src/timecampus/pages/HomePage.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport {\n Clock,\n FolderOpen,\n Users,\n TrendingUp,\n Timer,\n CheckCircle,\n BarChart3,\n Play,\n ArrowRight,\n} from \"lucide-react\";\nimport { PageLayout } from \"../components/PageLayout\";\nimport { StatCard } from \"../components/StatCard\";\nimport { LoadingSkeleton } from \"../components/LoadingSkeleton\";\nimport { cn, formatHours, formatTimerDuration } from \"../utils/helpers\";\nimport { useTimeCampusStore } from \"../store/timecampusStore\";\nimport {\n useGetTimeEntryStatsQuery,\n useListTimeEntriesQuery,\n type TimeEntryFieldsFragment,\n} from \"@/generated/wspace-operations\";\nimport { useI18n } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\n\nexport const HomePage: FC = () => {\n const { t: translate } = useI18n();\n const t = (key: string, fallback: string): string => {\n const value = translate(key);\n return value === key ? fallback : value;\n };\n const { activeTimer, startTimer, stopTimer } = useTimeCampusStore();\n\n const { data: statsData, loading: statsLoading } =\n useGetTimeEntryStatsQuery();\n const { data: entriesData, loading: entriesLoading } =\n useListTimeEntriesQuery({\n variables: { limit: 4 },\n });\n\n const stats = statsData?.timeEntryStats;\n const recentEntries = entriesData?.timeEntries?.items ?? [];\n\n if (statsLoading && entriesLoading) {\n return (\n <PageLayout\n title={t(\"timecampus.home.title\", \"Dashboard\")}\n description={t(\n \"timecampus.home.description\",\n \"Overview of your time tracking and productivity\",\n )}\n >\n <LoadingSkeleton variant=\"card\" count={4} />\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title={t(\"timecampus.home.title\", \"Dashboard\")}\n description={t(\n \"timecampus.home.description\",\n \"Overview of your time tracking and productivity\",\n )}\n actions={\n <button\n onClick={() => (activeTimer ? stopTimer() : startTimer())}\n className={cn(\n \"inline-flex items-center gap-2 rounded-md px-4 py-2 text-sm font-medium transition-colors\",\n activeTimer\n ? \"bg-red-500 text-white hover:bg-red-600\"\n : \"bg-primary text-primary-foreground hover:bg-primary/90\",\n )}\n >\n {activeTimer ? (\n <>\n <Timer className=\"h-4 w-4\" />\n {formatTimerDuration(activeTimer.seconds)} -{\" \"}\n {t(\"timecampus.home.actions.stop\", \"Stop\")}\n </>\n ) : (\n <>\n <Play className=\"h-4 w-4\" />\n {t(\"timecampus.home.actions.startTimer\", \"Start Timer\")}\n </>\n )}\n </button>\n }\n >\n {/* Stat Cards */}\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n <StatCard\n title={t(\"timecampus.home.stats.today\", \"Today\")}\n value={formatHours(stats?.totalHours ?? 0)}\n icon={<Clock className=\"h-5 w-5\" />}\n trend={{\n value: 12.5,\n label: t(\"timecampus.home.stats.vsYesterday\", \"vs yesterday\"),\n }}\n />\n <StatCard\n title={t(\"timecampus.home.stats.billable\", \"Billable\")}\n value={formatHours(stats?.billableHours ?? 0)}\n icon={<TrendingUp className=\"h-5 w-5\" />}\n description={`${stats?.totalEntries ?? 0} ${t(\"timecampus.home.stats.entries\", \"entries\")}`}\n />\n <StatCard\n title={t(\"timecampus.home.stats.activeTimers\", \"Active Timers\")}\n value={stats?.activeTimers ?? 0}\n icon={<FolderOpen className=\"h-5 w-5\" />}\n description={t(\n \"timecampus.home.stats.currentlyRunning\",\n \"Currently running\",\n )}\n />\n <StatCard\n title={t(\"timecampus.home.stats.totalEntries\", \"Entries\")}\n value={stats?.totalEntries ?? 0}\n icon={<BarChart3 className=\"h-5 w-5\" />}\n description={t(\n \"timecampus.home.stats.totalEntriesDescription\",\n \"Total time entries\",\n )}\n iconBgColor=\"bg-emerald-100 text-emerald-600 dark:bg-emerald-900/30 dark:text-emerald-400\"\n />\n </div>\n\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-3\">\n {/* Recent Time Entries */}\n <div className=\"lg:col-span-2 rounded-xl border border-border bg-card p-6\">\n <div className=\"mb-4 flex items-center justify-between\">\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">\n {t(\n \"timecampus.home.recentEntries.title\",\n \"Recent Time Entries\",\n )}\n </h3>\n <p className=\"text-xs text-muted-foreground\">\n {t(\n \"timecampus.home.recentEntries.description\",\n \"Your latest tracked activities\",\n )}\n </p>\n </div>\n <button className=\"flex items-center gap-1 text-xs text-primary hover:underline\">\n {t(\"timecampus.home.recentEntries.viewAll\", \"View all\")}{\" \"}\n <ArrowRight className=\"h-3 w-3\" />\n </button>\n </div>\n {entriesLoading ? (\n <LoadingSkeleton variant=\"list\" count={4} />\n ) : (\n <div className=\"flex flex-col gap-3\">\n {recentEntries.map((entry: TimeEntryFieldsFragment) => (\n <div\n key={entry.id}\n className=\"flex items-center justify-between rounded-lg border border-border p-3 transition-colors hover:bg-muted/50\"\n >\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-medium text-foreground\">\n {entry.project?.name ??\n t(\n \"timecampus.home.recentEntries.noProject\",\n \"No Project\",\n )}\n </p>\n <p className=\"text-xs text-muted-foreground\">\n {entry.description ??\n t(\n \"timecampus.home.recentEntries.noDescription\",\n \"No description\",\n )}\n </p>\n </div>\n <div className=\"ml-4 text-right\">\n <p className=\"text-sm font-mono font-medium text-foreground\">\n {formatHours((entry.duration ?? 0) / 3600)}\n </p>\n <span className=\"inline-flex items-center rounded-full bg-emerald-100 px-2 py-0.5 text-xs font-medium text-emerald-800 dark:bg-emerald-900/30 dark:text-emerald-400\">\n {entry.isRunning\n ? t(\n \"timecampus.home.recentEntries.status.running\",\n \"running\",\n )\n : t(\n \"timecampus.home.recentEntries.status.completed\",\n \"completed\",\n )}\n </span>\n </div>\n </div>\n ))}\n {recentEntries.length === 0 && (\n <p className=\"text-center text-sm text-muted-foreground py-4\">\n {t(\n \"timecampus.home.recentEntries.empty\",\n \"No time entries yet\",\n )}\n </p>\n )}\n </div>\n )}\n </div>\n\n {/* Quick Summary */}\n <div className=\"rounded-xl border border-border bg-card p-6\">\n <div className=\"mb-4\">\n <h3 className=\"text-sm font-semibold text-foreground\">\n {t(\"timecampus.home.summary.title\", \"Quick Summary\")}\n </h3>\n <p className=\"text-xs text-muted-foreground\">\n {t(\n \"timecampus.home.summary.description\",\n \"Time tracking overview\",\n )}\n </p>\n </div>\n <div className=\"flex flex-col gap-4\">\n <div className=\"flex items-center justify-between rounded-lg border border-border p-3\">\n <div>\n <p className=\"text-xs font-medium text-muted-foreground\">\n {t(\"timecampus.home.summary.totalHours\", \"Total Hours\")}\n </p>\n <p className=\"mt-1 text-xl font-bold text-foreground\">\n {formatHours(stats?.totalHours ?? 0)}\n </p>\n </div>\n <Clock className=\"h-5 w-5 text-muted-foreground\" />\n </div>\n <div className=\"flex items-center justify-between rounded-lg border border-border p-3\">\n <div>\n <p className=\"text-xs font-medium text-muted-foreground\">\n {t(\"timecampus.home.summary.billableHours\", \"Billable Hours\")}\n </p>\n <p className=\"mt-1 text-xl font-bold text-foreground\">\n {formatHours(stats?.billableHours ?? 0)}\n </p>\n </div>\n <TrendingUp className=\"h-5 w-5 text-muted-foreground\" />\n </div>\n <div className=\"flex items-center justify-between rounded-lg border border-border p-3\">\n <div>\n <p className=\"text-xs font-medium text-muted-foreground\">\n {t(\"timecampus.home.summary.activeTimers\", \"Active Timers\")}\n </p>\n <p className=\"mt-1 text-xl font-bold text-foreground\">\n {stats?.activeTimers ?? 0}\n </p>\n </div>\n <Users className=\"h-5 w-5 text-muted-foreground\" />\n </div>\n </div>\n </div>\n </div>\n\n {/* Quick Actions */}\n <div className=\"rounded-xl border border-border bg-card p-6\">\n <div className=\"mb-4\">\n <h3 className=\"text-sm font-semibold text-foreground\">\n {t(\"timecampus.home.quickActions.title\", \"Quick Actions\")}\n </h3>\n <p className=\"text-xs text-muted-foreground\">\n {t(\n \"timecampus.home.quickActions.description\",\n \"Frequently used features\",\n )}\n </p>\n </div>\n <div className=\"grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-6\">\n {[\n {\n label: t(\n \"timecampus.home.quickActions.startTimer.label\",\n \"Start Timer\",\n ),\n icon: Play,\n description: t(\n \"timecampus.home.quickActions.startTimer.description\",\n \"Track your time\",\n ),\n },\n {\n label: t(\n \"timecampus.home.quickActions.viewProjects.label\",\n \"View Projects\",\n ),\n icon: FolderOpen,\n description: t(\n \"timecampus.home.quickActions.viewProjects.description\",\n \"Manage projects\",\n ),\n },\n {\n label: t(\n \"timecampus.home.quickActions.timeEntries.label\",\n \"Time Entries\",\n ),\n icon: Clock,\n description: t(\n \"timecampus.home.quickActions.timeEntries.description\",\n \"View all entries\",\n ),\n },\n {\n label: t(\n \"timecampus.home.quickActions.teamActivity.label\",\n \"Team Activity\",\n ),\n icon: Users,\n description: t(\n \"timecampus.home.quickActions.teamActivity.description\",\n \"See team status\",\n ),\n },\n {\n label: t(\"timecampus.home.quickActions.reports.label\", \"Reports\"),\n icon: BarChart3,\n description: t(\n \"timecampus.home.quickActions.reports.description\",\n \"Generate reports\",\n ),\n },\n {\n label: t(\n \"timecampus.home.quickActions.approvals.label\",\n \"Approvals\",\n ),\n icon: CheckCircle,\n description: t(\n \"timecampus.home.quickActions.approvals.description\",\n \"Review timesheets\",\n ),\n },\n ].map(({ label, icon: Icon, description }) => (\n <button\n key={label}\n className=\"flex flex-col items-center gap-2 rounded-lg border border-border bg-background p-4 text-center transition-colors hover:bg-muted/50\"\n >\n <div className=\"rounded-full bg-primary/10 p-3\">\n <Icon className=\"h-5 w-5 text-primary\" />\n </div>\n <span className=\"text-sm font-medium text-foreground\">\n {label}\n </span>\n <span className=\"text-xs text-muted-foreground\">\n {description}\n </span>\n </button>\n ))}\n </div>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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E,kBAAC,MAAD;MAAI,WAAU;gBACX,EAAE,sCAAsC,gBAAgB;MACtD,CAAA,EACL,kBAAC,KAAD;MAAG,WAAU;gBACV,EACC,4CACA,2BACD;MACC,CAAA,CACA;QACN,kBAAC,OAAD;KAAK,WAAU;eACZ;MACC;OACE,OAAO,EACL,iDACA,cACD;OACD,MAAM;OACN,aAAa,EACX,uDACA,kBACD;OACF;MACD;OACE,OAAO,EACL,mDACA,gBACD;OACD,MAAM;OACN,aAAa,EACX,yDACA,kBACD;OACF;MACD;OACE,OAAO,EACL,kDACA,eACD;OACD,MAAM;OACN,aAAa,EACX,wDACA,mBACD;OACF;MACD;OACE,OAAO,EACL,mDACA,gBACD;OACD,MAAM;OACN,aAAa,EACX,yDACA,kBACD;OACF;MACD;OACE,OAAO,EAAE,8CAA8C,UAAU;OACjE,MAAM;OACN,aAAa,EACX,oDACA,mBACD;OACF;MACD;OACE,OAAO,EACL,gDACA,YACD;OACD,MAAM;OACN,aAAa,EACX,sDACA,oBACD;OACF;MACF,CAAC,KAAK,EAAE,UAAO,MAAM,GAAM,qBAC1B,kBAAC,UAAD;MAEE,WAAU;gBAFZ;OAIE,kBAAC,OAAD;QAAK,WAAU;kBACb,kBAAC,GAAD,EAAM,WAAU,wBAAyB,CAAA;QACrC,CAAA;OACN,kBAAC,QAAD;QAAM,WAAU;kBACb;QACI,CAAA;OACP,kBAAC,QAAD;QAAM,WAAU;kBACb;QACI,CAAA;OACA;QAZF,EAYE,CACT;KACE,CAAA,CACF;;GACK"}
1
+ {"version":3,"file":"HomePage.js","names":[],"sources":["../../../src/timecampus/pages/HomePage.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport {\n Clock,\n FolderOpen,\n Users,\n TrendingUp,\n Timer,\n CheckCircle,\n BarChart3,\n Play,\n ArrowRight,\n} from \"lucide-react\";\nimport {\n GlassCard,\n EmphasisPanel,\n AuroraBackground,\n GradientText,\n CTAOverflowMenu,\n} from \"@burdenoff/fe-libs/ui\";\nimport { StatCard } from \"../components/StatCard\";\nimport { LoadingSkeleton } from \"../components/LoadingSkeleton\";\nimport { cn, formatHours, formatTimerDuration } from \"../utils/helpers\";\nimport { useTimeCampusStore } from \"../store/timecampusStore\";\nimport {\n useGetTimeEntryStatsQuery,\n useListTimeEntriesQuery,\n type TimeEntryFieldsFragment,\n} from \"@/generated/wspace-operations\";\nimport { useI18n } from \"@burdenoff/fe-libs/shared/providers/shell/I18nProvider\";\n\nexport const HomePage: FC = () => {\n const { t: translate } = useI18n();\n const t = (key: string, fallback: string): string => {\n const value = translate(key);\n return value === key ? fallback : value;\n };\n const { activeTimer, startTimer, stopTimer } = useTimeCampusStore();\n\n const { data: statsData, loading: statsLoading } =\n useGetTimeEntryStatsQuery();\n const { data: entriesData, loading: entriesLoading } =\n useListTimeEntriesQuery({\n variables: { limit: 4 },\n });\n\n const stats = statsData?.timeEntryStats;\n const recentEntries = entriesData?.timeEntries?.items ?? [];\n\n const timerLabel = activeTimer\n ? `${formatTimerDuration(activeTimer.seconds)} - ${t(\"timecampus.home.actions.stop\", \"Stop\")}`\n : t(\"timecampus.home.actions.startTimer\", \"Start Timer\");\n\n const headerActions = (\n <CTAOverflowMenu\n primary={{\n label: timerLabel,\n onSelect: () => (activeTimer ? stopTimer() : startTimer()),\n icon: activeTimer ? (\n <Timer className=\"h-4 w-4\" />\n ) : (\n <Play className=\"h-4 w-4\" />\n ),\n }}\n actions={[\n {\n label: t(\n \"timecampus.home.quickActions.viewProjects.label\",\n \"View Projects\",\n ),\n onSelect: () => {},\n icon: <FolderOpen className=\"h-4 w-4\" />,\n },\n {\n label: t(\"timecampus.home.quickActions.reports.label\", \"Reports\"),\n onSelect: () => {},\n icon: <BarChart3 className=\"h-4 w-4\" />,\n },\n ]}\n />\n );\n\n const renderHeader = () => (\n <div className=\"relative overflow-hidden rounded-2xl border border-border-seam bg-gloss-card p-5 sm:p-6\">\n <AuroraBackground intensity=\"subtle\" />\n <div className=\"relative flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"min-w-0\">\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>\n {t(\"timecampus.home.title\", \"Dashboard\")}\n </GradientText>\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {t(\n \"timecampus.home.description\",\n \"Overview of your time tracking and productivity\",\n )}\n </p>\n </div>\n {headerActions}\n </div>\n </div>\n );\n\n if (statsLoading && entriesLoading) {\n return (\n <div className=\"min-h-full space-y-6 p-4 sm:p-6\">\n {renderHeader()}\n <LoadingSkeleton variant=\"card\" count={4} />\n </div>\n );\n }\n\n return (\n <div className=\"min-h-full space-y-6 p-4 sm:p-6\">\n {renderHeader()}\n\n {/* Hero metric + supporting metrics */}\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n <StatCard\n featured\n title={t(\"timecampus.home.stats.today\", \"Today\")}\n value={formatHours(stats?.totalHours ?? 0)}\n icon={<Clock className=\"h-5 w-5\" />}\n trend={{\n value: 12.5,\n label: t(\"timecampus.home.stats.vsYesterday\", \"vs yesterday\"),\n }}\n />\n <StatCard\n title={t(\"timecampus.home.stats.billable\", \"Billable\")}\n value={formatHours(stats?.billableHours ?? 0)}\n icon={<TrendingUp className=\"h-5 w-5\" />}\n description={`${stats?.totalEntries ?? 0} ${t(\"timecampus.home.stats.entries\", \"entries\")}`}\n />\n <StatCard\n title={t(\"timecampus.home.stats.activeTimers\", \"Active Timers\")}\n value={stats?.activeTimers ?? 0}\n icon={<FolderOpen className=\"h-5 w-5\" />}\n description={t(\n \"timecampus.home.stats.currentlyRunning\",\n \"Currently running\",\n )}\n />\n <StatCard\n title={t(\"timecampus.home.stats.totalEntries\", \"Entries\")}\n value={stats?.totalEntries ?? 0}\n icon={<BarChart3 className=\"h-5 w-5\" />}\n description={t(\n \"timecampus.home.stats.totalEntriesDescription\",\n \"Total time entries\",\n )}\n />\n </div>\n\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-3\">\n {/* Recent Time Entries */}\n <GlassCard\n treatment=\"plain\"\n className=\"border-border-seam p-6 lg:col-span-2\"\n >\n <div className=\"mb-4 flex items-center justify-between\">\n <div>\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {t(\n \"timecampus.home.recentEntries.title\",\n \"Recent Time Entries\",\n )}\n </h3>\n <p className=\"text-xs text-text-secondary\">\n {t(\n \"timecampus.home.recentEntries.description\",\n \"Your latest tracked activities\",\n )}\n </p>\n </div>\n <button className=\"inline-flex min-h-[2.75rem] items-center gap-1 rounded-md px-2 text-xs font-medium text-primary transition-colors hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-action-primary-border\">\n {t(\"timecampus.home.recentEntries.viewAll\", \"View all\")}{\" \"}\n <ArrowRight className=\"h-3 w-3\" />\n </button>\n </div>\n {entriesLoading ? (\n <LoadingSkeleton variant=\"list\" count={4} />\n ) : (\n <div className=\"flex flex-col gap-3\">\n {recentEntries.map((entry: TimeEntryFieldsFragment) => (\n <div\n key={entry.id}\n className=\"flex items-center justify-between rounded-lg border border-border-seam p-3 transition-colors hover:bg-bg-sunken/50\"\n >\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-medium text-text-primary\">\n {entry.project?.name ??\n t(\n \"timecampus.home.recentEntries.noProject\",\n \"No Project\",\n )}\n </p>\n <p className=\"text-xs text-text-secondary\">\n {entry.description ??\n t(\n \"timecampus.home.recentEntries.noDescription\",\n \"No description\",\n )}\n </p>\n </div>\n <div className=\"ml-4 text-right\">\n <p className=\"font-mono text-sm font-medium tabular-nums text-text-primary\">\n {formatHours((entry.duration ?? 0) / 3600)}\n </p>\n <span\n className={cn(\n \"inline-flex items-center gap-1.5 rounded-full px-2 py-0.5 text-xs font-medium\",\n entry.isRunning\n ? \"bg-status-info-bg text-status-info-text\"\n : \"bg-status-success-bg text-status-success-text\",\n )}\n >\n {entry.isRunning && (\n <span className=\"h-1.5 w-1.5 rounded-full bg-status-info-text motion-safe:animate-vc-glow-pulse\" />\n )}\n {entry.isRunning\n ? t(\n \"timecampus.home.recentEntries.status.running\",\n \"running\",\n )\n : t(\n \"timecampus.home.recentEntries.status.completed\",\n \"completed\",\n )}\n </span>\n </div>\n </div>\n ))}\n {recentEntries.length === 0 && (\n <p className=\"py-4 text-center text-sm text-text-secondary\">\n {t(\n \"timecampus.home.recentEntries.empty\",\n \"No time entries yet\",\n )}\n </p>\n )}\n </div>\n )}\n </GlassCard>\n\n {/* Quick Summary — the one emphasis zone */}\n <EmphasisPanel className=\"p-6\">\n <div className=\"mb-4\">\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {t(\"timecampus.home.summary.title\", \"Quick Summary\")}\n </h3>\n <p className=\"text-xs text-text-secondary\">\n {t(\n \"timecampus.home.summary.description\",\n \"Time tracking overview\",\n )}\n </p>\n </div>\n <div className=\"flex flex-col gap-4\">\n <div className=\"flex items-center justify-between rounded-lg border border-border-seam bg-bg-surface/40 p-3\">\n <div>\n <p className=\"text-xs font-medium text-text-secondary\">\n {t(\"timecampus.home.summary.totalHours\", \"Total Hours\")}\n </p>\n <p className=\"mt-1 text-xl font-bold tabular-nums text-text-primary\">\n {formatHours(stats?.totalHours ?? 0)}\n </p>\n </div>\n <Clock className=\"h-5 w-5 text-text-secondary\" />\n </div>\n <div className=\"flex items-center justify-between rounded-lg border border-border-seam bg-bg-surface/40 p-3\">\n <div>\n <p className=\"text-xs font-medium text-text-secondary\">\n {t(\"timecampus.home.summary.billableHours\", \"Billable Hours\")}\n </p>\n <p className=\"mt-1 text-xl font-bold tabular-nums text-text-primary\">\n {formatHours(stats?.billableHours ?? 0)}\n </p>\n </div>\n <TrendingUp className=\"h-5 w-5 text-text-secondary\" />\n </div>\n <div className=\"flex items-center justify-between rounded-lg border border-border-seam bg-bg-surface/40 p-3\">\n <div>\n <p className=\"text-xs font-medium text-text-secondary\">\n {t(\"timecampus.home.summary.activeTimers\", \"Active Timers\")}\n </p>\n <p className=\"mt-1 text-xl font-bold tabular-nums text-text-primary\">\n {stats?.activeTimers ?? 0}\n </p>\n </div>\n <Users className=\"h-5 w-5 text-text-secondary\" />\n </div>\n </div>\n </EmphasisPanel>\n </div>\n\n {/* Quick Actions */}\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-6\">\n <div className=\"mb-4\">\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {t(\"timecampus.home.quickActions.title\", \"Quick Actions\")}\n </h3>\n <p className=\"text-xs text-text-secondary\">\n {t(\n \"timecampus.home.quickActions.description\",\n \"Frequently used features\",\n )}\n </p>\n </div>\n <div className=\"grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-6\">\n {[\n {\n label: t(\n \"timecampus.home.quickActions.startTimer.label\",\n \"Start Timer\",\n ),\n icon: Play,\n description: t(\n \"timecampus.home.quickActions.startTimer.description\",\n \"Track your time\",\n ),\n },\n {\n label: t(\n \"timecampus.home.quickActions.viewProjects.label\",\n \"View Projects\",\n ),\n icon: FolderOpen,\n description: t(\n \"timecampus.home.quickActions.viewProjects.description\",\n \"Manage projects\",\n ),\n },\n {\n label: t(\n \"timecampus.home.quickActions.timeEntries.label\",\n \"Time Entries\",\n ),\n icon: Clock,\n description: t(\n \"timecampus.home.quickActions.timeEntries.description\",\n \"View all entries\",\n ),\n },\n {\n label: t(\n \"timecampus.home.quickActions.teamActivity.label\",\n \"Team Activity\",\n ),\n icon: Users,\n description: t(\n \"timecampus.home.quickActions.teamActivity.description\",\n \"See team status\",\n ),\n },\n {\n label: t(\"timecampus.home.quickActions.reports.label\", \"Reports\"),\n icon: BarChart3,\n description: t(\n \"timecampus.home.quickActions.reports.description\",\n \"Generate reports\",\n ),\n },\n {\n label: t(\n \"timecampus.home.quickActions.approvals.label\",\n \"Approvals\",\n ),\n icon: CheckCircle,\n description: t(\n \"timecampus.home.quickActions.approvals.description\",\n \"Review timesheets\",\n ),\n },\n ].map(({ label, icon: Icon, description }) => (\n <button\n key={label}\n className=\"flex min-h-[2.75rem] flex-col items-center gap-2 rounded-lg border border-border-seam bg-bg-surface p-4 text-center transition-colors hover:bg-bg-sunken/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-action-primary-border\"\n >\n <div className=\"rounded-full bg-action-primary-bg/10 p-3\">\n <Icon className=\"h-5 w-5 text-primary\" />\n </div>\n <span className=\"text-sm font-medium text-text-primary\">\n {label}\n </span>\n <span className=\"text-xs text-text-secondary\">{description}</span>\n </button>\n ))}\n </div>\n </GlassCard>\n </div>\n );\n};\n"],"mappings":"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"}