@burdenoff/microfe-timecampus 2026.624.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 +2 -2
  2. package/dist/timecampus/components/ErrorBoundary.js.map +1 -1
  3. package/dist/timecampus/components/LoadingSkeleton.js +1 -1
  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 +19 -16
  8. package/dist/timecampus/components/StatCard.js.map +1 -1
  9. package/dist/timecampus/pages/HomePage.js +169 -149
  10. package/dist/timecampus/pages/HomePage.js.map +1 -1
  11. package/dist/timecampus/pages/applets/AppletStorePage.js +11 -11
  12. package/dist/timecampus/pages/applets/AppletStorePage.js.map +1 -1
  13. package/dist/timecampus/pages/applets/InstalledAppletsPage.js +11 -11
  14. package/dist/timecampus/pages/applets/InstalledAppletsPage.js.map +1 -1
  15. package/dist/timecampus/pages/application-usage/ApplicationUsagePage.js +19 -19
  16. package/dist/timecampus/pages/application-usage/ApplicationUsagePage.js.map +1 -1
  17. package/dist/timecampus/pages/application-usage/ApplicationUsageSettingsPage.js +10 -10
  18. package/dist/timecampus/pages/application-usage/ApplicationUsageSettingsPage.js.map +1 -1
  19. package/dist/timecampus/pages/channels/ChannelsPage.js +11 -11
  20. package/dist/timecampus/pages/channels/ChannelsPage.js.map +1 -1
  21. package/dist/timecampus/pages/client-portal/ClientPortalPage.js +15 -15
  22. package/dist/timecampus/pages/client-portal/ClientPortalPage.js.map +1 -1
  23. package/dist/timecampus/pages/dashboard/AnalyticsPage.js +11 -11
  24. package/dist/timecampus/pages/dashboard/AnalyticsPage.js.map +1 -1
  25. package/dist/timecampus/pages/dashboard/ReportsPage.js +11 -11
  26. package/dist/timecampus/pages/dashboard/ReportsPage.js.map +1 -1
  27. package/dist/timecampus/pages/email-tracking/EmailAnalyticsPage.js +14 -14
  28. package/dist/timecampus/pages/email-tracking/EmailAnalyticsPage.js.map +1 -1
  29. package/dist/timecampus/pages/email-tracking/EmailSettingsPage.js +10 -10
  30. package/dist/timecampus/pages/email-tracking/EmailSettingsPage.js.map +1 -1
  31. package/dist/timecampus/pages/email-tracking/EmailTrackingPage.js +7 -7
  32. package/dist/timecampus/pages/email-tracking/EmailTrackingPage.js.map +1 -1
  33. package/dist/timecampus/pages/expense-tracking/ExpenseTrackingPage.js +15 -15
  34. package/dist/timecampus/pages/expense-tracking/ExpenseTrackingPage.js.map +1 -1
  35. package/dist/timecampus/pages/focus-score/FocusScorePage.js +21 -21
  36. package/dist/timecampus/pages/focus-score/FocusScorePage.js.map +1 -1
  37. package/dist/timecampus/pages/focus-score/FocusScoreSettingsPage.js +10 -10
  38. package/dist/timecampus/pages/focus-score/FocusScoreSettingsPage.js.map +1 -1
  39. package/dist/timecampus/pages/geofencing/GeofencingPage.js +10 -10
  40. package/dist/timecampus/pages/geofencing/GeofencingPage.js.map +1 -1
  41. package/dist/timecampus/pages/geofencing/GeofencingSettingsPage.js +10 -10
  42. package/dist/timecampus/pages/geofencing/GeofencingSettingsPage.js.map +1 -1
  43. package/dist/timecampus/pages/industry-solutions/IndustrySolutionsPage.js +10 -10
  44. package/dist/timecampus/pages/industry-solutions/IndustrySolutionsPage.js.map +1 -1
  45. package/dist/timecampus/pages/location-tracking/LocationPrivacySettingsPage.js +10 -10
  46. package/dist/timecampus/pages/location-tracking/LocationPrivacySettingsPage.js.map +1 -1
  47. package/dist/timecampus/pages/location-tracking/LocationTrackingPage.js +15 -15
  48. package/dist/timecampus/pages/location-tracking/LocationTrackingPage.js.map +1 -1
  49. package/dist/timecampus/pages/meetings/MeetingAnalyticsPage.js +15 -15
  50. package/dist/timecampus/pages/meetings/MeetingAnalyticsPage.js.map +1 -1
  51. package/dist/timecampus/pages/meetings/MeetingCreatePage.js +5 -5
  52. package/dist/timecampus/pages/meetings/MeetingCreatePage.js.map +1 -1
  53. package/dist/timecampus/pages/meetings/MeetingDetailPage.js +16 -16
  54. package/dist/timecampus/pages/meetings/MeetingDetailPage.js.map +1 -1
  55. package/dist/timecampus/pages/meetings/MeetingsPage.js +10 -10
  56. package/dist/timecampus/pages/meetings/MeetingsPage.js.map +1 -1
  57. package/dist/timecampus/pages/pomodoro/PomodoroAnalyticsPage.js +17 -17
  58. package/dist/timecampus/pages/pomodoro/PomodoroAnalyticsPage.js.map +1 -1
  59. package/dist/timecampus/pages/pomodoro/PomodoroPage.js +16 -16
  60. package/dist/timecampus/pages/pomodoro/PomodoroPage.js.map +1 -1
  61. package/dist/timecampus/pages/pomodoro/PomodoroSettingsPage.js +12 -12
  62. package/dist/timecampus/pages/pomodoro/PomodoroSettingsPage.js.map +1 -1
  63. package/dist/timecampus/pages/projects/ProjectCreatePage.js +6 -6
  64. package/dist/timecampus/pages/projects/ProjectCreatePage.js.map +1 -1
  65. package/dist/timecampus/pages/projects/ProjectDetailPage.js +17 -17
  66. package/dist/timecampus/pages/projects/ProjectDetailPage.js.map +1 -1
  67. package/dist/timecampus/pages/projects/ProjectsPage.js +10 -10
  68. package/dist/timecampus/pages/projects/ProjectsPage.js.map +1 -1
  69. package/dist/timecampus/pages/projects/TasksPage.js +10 -10
  70. package/dist/timecampus/pages/projects/TasksPage.js.map +1 -1
  71. package/dist/timecampus/pages/resource-planning/ResourcePlanningPage.js +18 -18
  72. package/dist/timecampus/pages/resource-planning/ResourcePlanningPage.js.map +1 -1
  73. package/dist/timecampus/pages/team/TeamAnalyticsPage.js +11 -11
  74. package/dist/timecampus/pages/team/TeamAnalyticsPage.js.map +1 -1
  75. package/dist/timecampus/pages/team/TeamMembersPage.js +12 -12
  76. package/dist/timecampus/pages/team/TeamMembersPage.js.map +1 -1
  77. package/dist/timecampus/pages/team/TeamPage.js +16 -16
  78. package/dist/timecampus/pages/team/TeamPage.js.map +1 -1
  79. package/dist/timecampus/pages/team-activity/TeamActivityPage.js +16 -16
  80. package/dist/timecampus/pages/team-activity/TeamActivityPage.js.map +1 -1
  81. package/dist/timecampus/pages/team-activity/TeamActivitySettingsPage.js +10 -10
  82. package/dist/timecampus/pages/team-activity/TeamActivitySettingsPage.js.map +1 -1
  83. package/dist/timecampus/pages/templates/TemplateApplicationPage.js +11 -11
  84. package/dist/timecampus/pages/templates/TemplateApplicationPage.js.map +1 -1
  85. package/dist/timecampus/pages/templates/TemplateDetailPage.js +12 -12
  86. package/dist/timecampus/pages/templates/TemplateDetailPage.js.map +1 -1
  87. package/dist/timecampus/pages/templates/TemplatesPage.js +11 -11
  88. package/dist/timecampus/pages/templates/TemplatesPage.js.map +1 -1
  89. package/dist/timecampus/pages/time/TimeEntriesPage.js +10 -10
  90. package/dist/timecampus/pages/time/TimeEntriesPage.js.map +1 -1
  91. package/dist/timecampus/pages/time/TimeTrackingPage.js +17 -17
  92. package/dist/timecampus/pages/time/TimeTrackingPage.js.map +1 -1
  93. package/dist/timecampus/pages/time/TimerPage.js +10 -10
  94. package/dist/timecampus/pages/time/TimerPage.js.map +1 -1
  95. package/dist/timecampus/pages/time-approval/TimeApprovalPage.js +20 -20
  96. package/dist/timecampus/pages/time-approval/TimeApprovalPage.js.map +1 -1
  97. package/dist/timecampus/pages/widgets/WidgetDetailPage.js +11 -11
  98. package/dist/timecampus/pages/widgets/WidgetDetailPage.js.map +1 -1
  99. package/dist/timecampus/pages/widgets/WidgetsPage.js +12 -12
  100. package/dist/timecampus/pages/widgets/WidgetsPage.js.map +1 -1
  101. package/dist/timecampus/pages/work-patterns/WorkPatternsPage.js +16 -16
  102. package/dist/timecampus/pages/work-patterns/WorkPatternsPage.js.map +1 -1
  103. package/dist/timecampus/pages/work-patterns/WorkPatternsSettingsPage.js +10 -10
  104. package/dist/timecampus/pages/work-patterns/WorkPatternsSettingsPage.js.map +1 -1
  105. package/dist/timecampus/pages/workflows/WorkflowsPage.js +10 -10
  106. package/dist/timecampus/pages/workflows/WorkflowsPage.js.map +1 -1
  107. package/package.json +2 -2
@@ -1,228 +1,248 @@
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-action-primary-bg text-action-primary-text hover:bg-action-primary-bg/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-subtle bg-bg-surface 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", {
96
+ children: [/* @__PURE__ */ v("div", { children: [/* @__PURE__ */ _("h3", {
78
97
  className: "text-sm font-semibold text-text-primary",
79
- children: C("timecampus.home.recentEntries.title", "Recent Time Entries")
80
- }), /* @__PURE__ */ y("p", {
98
+ children: E("timecampus.home.recentEntries.title", "Recent Time Entries")
99
+ }), /* @__PURE__ */ _("p", {
81
100
  className: "text-xs text-text-secondary",
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",
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-subtle p-3 transition-colors hover:bg-bg-sunken/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", {
119
+ children: [/* @__PURE__ */ _("p", {
101
120
  className: "text-sm font-medium text-text-primary",
102
- children: e.project?.name ?? C("timecampus.home.recentEntries.noProject", "No Project")
103
- }), /* @__PURE__ */ y("p", {
121
+ children: n.project?.name ?? E("timecampus.home.recentEntries.noProject", "No Project")
122
+ }), /* @__PURE__ */ _("p", {
104
123
  className: "text-xs text-text-secondary",
105
- children: e.description ?? C("timecampus.home.recentEntries.noDescription", "No description")
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-text-primary",
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-text-secondary 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-subtle bg-bg-surface 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", {
145
+ children: [/* @__PURE__ */ _("h3", {
127
146
  className: "text-sm font-semibold text-text-primary",
128
- children: C("timecampus.home.summary.title", "Quick Summary")
129
- }), /* @__PURE__ */ y("p", {
147
+ children: E("timecampus.home.summary.title", "Quick Summary")
148
+ }), /* @__PURE__ */ _("p", {
130
149
  className: "text-xs text-text-secondary",
131
- children: C("timecampus.home.summary.description", "Time tracking overview")
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-subtle p-3",
138
- children: [/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("p", {
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", {
139
158
  className: "text-xs font-medium text-text-secondary",
140
- children: C("timecampus.home.summary.totalHours", "Total Hours")
141
- }), /* @__PURE__ */ y("p", {
142
- className: "mt-1 text-xl font-bold text-text-primary",
143
- children: t(j?.totalHours ?? 0)
144
- })] }), /* @__PURE__ */ y(f, { className: "h-5 w-5 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-subtle p-3",
148
- children: [/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("p", {
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", {
149
168
  className: "text-xs font-medium text-text-secondary",
150
- children: C("timecampus.home.summary.billableHours", "Billable Hours")
151
- }), /* @__PURE__ */ y("p", {
152
- className: "mt-1 text-xl font-bold text-text-primary",
153
- children: t(j?.billableHours ?? 0)
154
- })] }), /* @__PURE__ */ y(g, { className: "h-5 w-5 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-subtle p-3",
158
- children: [/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("p", {
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", {
159
178
  className: "text-xs font-medium text-text-secondary",
160
- children: C("timecampus.home.summary.activeTimers", "Active Timers")
161
- }), /* @__PURE__ */ y("p", {
162
- className: "mt-1 text-xl font-bold text-text-primary",
163
- children: j?.activeTimers ?? 0
164
- })] }), /* @__PURE__ */ y(_, { className: "h-5 w-5 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-subtle bg-bg-surface 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", {
194
+ children: [/* @__PURE__ */ _("h3", {
175
195
  className: "text-sm font-semibold text-text-primary",
176
- children: C("timecampus.home.quickActions.title", "Quick Actions")
177
- }), /* @__PURE__ */ y("p", {
196
+ children: E("timecampus.home.quickActions.title", "Quick Actions")
197
+ }), /* @__PURE__ */ _("p", {
178
198
  className: "text-xs text-text-secondary",
179
- children: C("timecampus.home.quickActions.description", "Frequently used features")
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-subtle bg-bg-surface p-4 text-center transition-colors hover:bg-bg-sunken/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", {
237
+ /* @__PURE__ */ _("div", {
218
238
  className: "rounded-full bg-action-primary-bg/10 p-3",
219
- children: /* @__PURE__ */ y(t, { className: "h-5 w-5 text-primary" })
239
+ children: /* @__PURE__ */ _(t, { className: "h-5 w-5 text-primary" })
220
240
  }),
221
- /* @__PURE__ */ y("span", {
241
+ /* @__PURE__ */ _("span", {
222
242
  className: "text-sm font-medium text-text-primary",
223
243
  children: e
224
244
  }),
225
- /* @__PURE__ */ y("span", {
245
+ /* @__PURE__ */ _("span", {
226
246
  className: "text-xs text-text-secondary",
227
247
  children: n
228
248
  })
@@ -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-action-primary-bg text-action-primary-text hover:bg-action-primary-bg/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-subtle bg-bg-surface p-6\">\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=\"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-subtle 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=\"text-sm font-mono font-medium text-text-primary\">\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-text-secondary 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-subtle bg-bg-surface 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-subtle 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 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-subtle 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 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-subtle 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 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 </div>\n </div>\n\n {/* Quick Actions */}\n <div className=\"rounded-xl border border-border-subtle bg-bg-surface 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 flex-col items-center gap-2 rounded-lg border border-border-subtle bg-bg-surface p-4 text-center transition-colors hover:bg-bg-sunken/50\"\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\">\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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"}
@@ -1,27 +1,27 @@
1
1
  import { useTimeCampus as e } from "../../providers/TimeCampusProvider.js";
2
- import { PageLayout as t } from "../../components/PageLayout.js";
3
- import { LoadingSkeleton as n } from "../../components/LoadingSkeleton.js";
4
- import { useListConfigurationsQuery as r } from "../../../generated/wspace-operations.js";
2
+ import { LoadingSkeleton as t } from "../../components/LoadingSkeleton.js";
3
+ import { useListConfigurationsQuery as n } from "../../../generated/wspace-operations.js";
4
+ import { PageLayout as r } from "../../components/PageLayout.js";
5
5
  import { Download as i, Puzzle as a, Star as o } from "lucide-react";
6
6
  import { jsx as s, jsxs as c } from "react/jsx-runtime";
7
7
  //#region src/timecampus/pages/applets/AppletStorePage.tsx
8
8
  function l() {
9
- let { workspaceId: l = "" } = e(), { data: u, loading: d, error: f } = r({ variables: { scope: "WORKSPACE" } }), p = (u?.configurations ?? []).filter((e) => e.key.startsWith("applet.store."));
10
- return d ? /* @__PURE__ */ s(t, {
9
+ let { workspaceId: l = "" } = e(), { data: u, loading: d, error: f } = n({ variables: { scope: "WORKSPACE" } }), p = (u?.configurations ?? []).filter((e) => e.key.startsWith("applet.store."));
10
+ return d ? /* @__PURE__ */ s(r, {
11
11
  title: "Applet Store",
12
12
  description: "Browse and install applets to extend TimeCampus",
13
- children: /* @__PURE__ */ s(n, {
13
+ children: /* @__PURE__ */ s(t, {
14
14
  variant: "card",
15
15
  count: 6
16
16
  })
17
- }) : f ? /* @__PURE__ */ s(t, {
17
+ }) : f ? /* @__PURE__ */ s(r, {
18
18
  title: "Applet Store",
19
19
  description: "Browse and install applets to extend TimeCampus",
20
20
  children: /* @__PURE__ */ s("div", {
21
- className: "rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-700 dark:border-red-800 dark:bg-red-900/20 dark:text-red-400",
21
+ className: "rounded-lg border border-status-error-bg/40 bg-status-error-bg p-4 text-sm text-status-error-text",
22
22
  children: "Failed to load applet store data. Please try again later."
23
23
  })
24
- }) : /* @__PURE__ */ s(t, {
24
+ }) : /* @__PURE__ */ s(r, {
25
25
  title: "Applet Store",
26
26
  description: "Browse and install applets to extend TimeCampus",
27
27
  children: /* @__PURE__ */ s("div", {
@@ -34,7 +34,7 @@ function l() {
34
34
  t.category;
35
35
  let l = t.rating ?? 0, u = t.downloads ?? 0;
36
36
  return /* @__PURE__ */ c("div", {
37
- className: "rounded-xl border border-border-subtle bg-bg-surface p-5 transition-colors hover:bg-bg-sunken/50 cursor-pointer",
37
+ className: "rounded-xl border border-border-seam bg-gloss-card shadow-pop p-5 transition-colors hover:bg-bg-sunken/50 cursor-pointer",
38
38
  children: [/* @__PURE__ */ c("div", {
39
39
  className: "flex items-start gap-3",
40
40
  children: [/* @__PURE__ */ s("div", {
@@ -56,7 +56,7 @@ function l() {
56
56
  className: "flex items-center gap-3 text-xs text-text-secondary",
57
57
  children: [/* @__PURE__ */ c("div", {
58
58
  className: "flex items-center gap-1",
59
- children: [/* @__PURE__ */ s(o, { className: "h-3 w-3 fill-amber-400 text-amber-400" }), /* @__PURE__ */ s("span", { children: l })]
59
+ children: [/* @__PURE__ */ s(o, { className: "h-3 w-3 fill-amber-400 text-status-warning-text" }), /* @__PURE__ */ s("span", { children: l })]
60
60
  }), /* @__PURE__ */ c("div", {
61
61
  className: "flex items-center gap-1",
62
62
  children: [/* @__PURE__ */ s(i, { className: "h-3 w-3" }), /* @__PURE__ */ s("span", { children: u })]
@@ -1 +1 @@
1
- {"version":3,"file":"AppletStorePage.js","names":[],"sources":["../../../../src/timecampus/pages/applets/AppletStorePage.tsx"],"sourcesContent":["import { Puzzle, Star, Download } from \"lucide-react\";\nimport { PageLayout } from \"../../components/PageLayout\";\nimport { LoadingSkeleton } from \"../../components/LoadingSkeleton\";\nimport { useTimeCampus } from \"../../providers/TimeCampusProvider\";\nimport {\n useListConfigurationsQuery,\n type ConfigurationFieldsFragment,\n} from \"@/generated/wspace-operations\";\n\nexport function AppletStorePage() {\n const { workspaceId = \"\" } = useTimeCampus();\n\n const { data, loading, error } = useListConfigurationsQuery({\n variables: { scope: \"WORKSPACE\" as any },\n });\n\n const configurations = data?.configurations ?? [];\n\n // Filter configurations that represent store/available applets (key starts with 'applet.store.')\n const storeApplets = configurations.filter((c: ConfigurationFieldsFragment) =>\n c.key.startsWith(\"applet.store.\"),\n );\n\n if (loading) {\n return (\n <PageLayout\n title=\"Applet Store\"\n description=\"Browse and install applets to extend TimeCampus\"\n >\n <LoadingSkeleton variant=\"card\" count={6} />\n </PageLayout>\n );\n }\n\n if (error) {\n return (\n <PageLayout\n title=\"Applet Store\"\n description=\"Browse and install applets to extend TimeCampus\"\n >\n <div className=\"rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-700 dark:border-red-800 dark:bg-red-900/20 dark:text-red-400\">\n Failed to load applet store data. Please try again later.\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"Applet Store\"\n description=\"Browse and install applets to extend TimeCampus\"\n >\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {storeApplets.length === 0 ? (\n <div className=\"col-span-full p-8 text-center text-sm text-text-secondary\">\n No applets available in the store yet. Store applets are managed as\n workspace configurations with the \"applet.store.\" key prefix.\n </div>\n ) : (\n storeApplets.map((applet: ConfigurationFieldsFragment) => {\n const val = applet.value as Record<string, unknown>;\n const name =\n (val.name as string) ?? applet.key.replace(\"applet.store.\", \"\");\n const description =\n applet.description ?? (val.description as string) ?? \"\";\n const category = (val.category as string) ?? \"general\";\n const rating = (val.rating as number) ?? 0;\n const downloads = (val.downloads as number) ?? 0;\n\n return (\n <div\n key={applet.id}\n className=\"rounded-xl border border-border-subtle bg-bg-surface p-5 transition-colors hover:bg-bg-sunken/50 cursor-pointer\"\n >\n <div className=\"flex items-start gap-3\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-xl bg-action-primary-bg/10\">\n <Puzzle className=\"h-6 w-6 text-primary\" />\n </div>\n <div className=\"flex-1\">\n <p className=\"text-sm font-semibold text-text-primary\">\n {name}\n </p>\n <p className=\"text-xs text-text-secondary\">\n {description}\n </p>\n </div>\n </div>\n <div className=\"mt-3 flex items-center justify-between\">\n <div className=\"flex items-center gap-3 text-xs text-text-secondary\">\n <div className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3 fill-amber-400 text-amber-400\" />\n <span>{rating}</span>\n </div>\n <div className=\"flex items-center gap-1\">\n <Download className=\"h-3 w-3\" />\n <span>{downloads}</span>\n </div>\n </div>\n <button className=\"rounded-md bg-action-primary-bg px-3 py-1 text-xs font-medium text-action-primary-text hover:bg-action-primary-bg/90\">\n Install\n </button>\n </div>\n </div>\n );\n })\n )}\n </div>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;AASA,SAAgB,IAAkB;CAChC,IAAM,EAAE,iBAAc,OAAO,GAAe,EAEtC,EAAE,SAAM,YAAS,aAAU,EAA2B,EAC1D,WAAW,EAAE,OAAO,aAAoB,EACzC,CAAC,EAKI,KAHiB,GAAM,kBAAkB,EAAE,EAGb,QAAQ,MAC1C,EAAE,IAAI,WAAW,gBAAgB,CAClC;AA0BD,QAxBI,IAEA,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;YAEZ,kBAAC,GAAD;GAAiB,SAAQ;GAAO,OAAO;GAAK,CAAA;EACjC,CAAA,GAIb,IAEA,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;YAEZ,kBAAC,OAAD;GAAK,WAAU;aAA+H;GAExI,CAAA;EACK,CAAA,GAKf,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;YAEZ,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAa,WAAW,IACvB,kBAAC,OAAD;IAAK,WAAU;cAA4D;IAGrE,CAAA,GAEN,EAAa,KAAK,MAAwC;IACxD,IAAM,IAAM,EAAO,OACb,IACH,EAAI,QAAmB,EAAO,IAAI,QAAQ,iBAAiB,GAAG,EAC3D,IACJ,EAAO,eAAgB,EAAI,eAA0B;AACrC,MAAI;IACtB,IAAM,IAAU,EAAI,UAAqB,GACnC,IAAa,EAAI,aAAwB;AAE/C,WACE,kBAAC,OAAD;KAEE,WAAU;eAFZ,CAIE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,GAAD,EAAQ,WAAU,wBAAyB,CAAA;OACvC,CAAA,EACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,KAAD;QAAG,WAAU;kBACV;QACC,CAAA,EACJ,kBAAC,KAAD;QAAG,WAAU;kBACV;QACC,CAAA,CACA;SACF;SACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD,EAAM,WAAU,yCAA0C,CAAA,EAC1D,kBAAC,QAAD,EAAA,UAAO,GAAc,CAAA,CACjB;WACN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA,EAChC,kBAAC,QAAD,EAAA,UAAO,GAAiB,CAAA,CACpB;UACF;UACN,kBAAC,UAAD;OAAQ,WAAU;iBAAuH;OAEhI,CAAA,CACL;QACF;OA/BC,EAAO,GA+BR;KAER;GAEA,CAAA;EACK,CAAA"}
1
+ {"version":3,"file":"AppletStorePage.js","names":[],"sources":["../../../../src/timecampus/pages/applets/AppletStorePage.tsx"],"sourcesContent":["import { Puzzle, Star, Download } from \"lucide-react\";\nimport { PageLayout } from \"../../components/PageLayout\";\nimport { LoadingSkeleton } from \"../../components/LoadingSkeleton\";\nimport { useTimeCampus } from \"../../providers/TimeCampusProvider\";\nimport {\n useListConfigurationsQuery,\n type ConfigurationFieldsFragment,\n} from \"@/generated/wspace-operations\";\n\nexport function AppletStorePage() {\n const { workspaceId = \"\" } = useTimeCampus();\n\n const { data, loading, error } = useListConfigurationsQuery({\n variables: { scope: \"WORKSPACE\" as any },\n });\n\n const configurations = data?.configurations ?? [];\n\n // Filter configurations that represent store/available applets (key starts with 'applet.store.')\n const storeApplets = configurations.filter((c: ConfigurationFieldsFragment) =>\n c.key.startsWith(\"applet.store.\"),\n );\n\n if (loading) {\n return (\n <PageLayout\n title=\"Applet Store\"\n description=\"Browse and install applets to extend TimeCampus\"\n >\n <LoadingSkeleton variant=\"card\" count={6} />\n </PageLayout>\n );\n }\n\n if (error) {\n return (\n <PageLayout\n title=\"Applet Store\"\n description=\"Browse and install applets to extend TimeCampus\"\n >\n <div className=\"rounded-lg border border-status-error-bg/40 bg-status-error-bg p-4 text-sm text-status-error-text\">\n Failed to load applet store data. Please try again later.\n </div>\n </PageLayout>\n );\n }\n\n return (\n <PageLayout\n title=\"Applet Store\"\n description=\"Browse and install applets to extend TimeCampus\"\n >\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {storeApplets.length === 0 ? (\n <div className=\"col-span-full p-8 text-center text-sm text-text-secondary\">\n No applets available in the store yet. Store applets are managed as\n workspace configurations with the \"applet.store.\" key prefix.\n </div>\n ) : (\n storeApplets.map((applet: ConfigurationFieldsFragment) => {\n const val = applet.value as Record<string, unknown>;\n const name =\n (val.name as string) ?? applet.key.replace(\"applet.store.\", \"\");\n const description =\n applet.description ?? (val.description as string) ?? \"\";\n const category = (val.category as string) ?? \"general\";\n const rating = (val.rating as number) ?? 0;\n const downloads = (val.downloads as number) ?? 0;\n\n return (\n <div\n key={applet.id}\n className=\"rounded-xl border border-border-seam bg-gloss-card shadow-pop p-5 transition-colors hover:bg-bg-sunken/50 cursor-pointer\"\n >\n <div className=\"flex items-start gap-3\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-xl bg-action-primary-bg/10\">\n <Puzzle className=\"h-6 w-6 text-primary\" />\n </div>\n <div className=\"flex-1\">\n <p className=\"text-sm font-semibold text-text-primary\">\n {name}\n </p>\n <p className=\"text-xs text-text-secondary\">{description}</p>\n </div>\n </div>\n <div className=\"mt-3 flex items-center justify-between\">\n <div className=\"flex items-center gap-3 text-xs text-text-secondary\">\n <div className=\"flex items-center gap-1\">\n <Star className=\"h-3 w-3 fill-amber-400 text-status-warning-text\" />\n <span>{rating}</span>\n </div>\n <div className=\"flex items-center gap-1\">\n <Download className=\"h-3 w-3\" />\n <span>{downloads}</span>\n </div>\n </div>\n <button className=\"rounded-md bg-action-primary-bg px-3 py-1 text-xs font-medium text-action-primary-text hover:bg-action-primary-bg/90\">\n Install\n </button>\n </div>\n </div>\n );\n })\n )}\n </div>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;AASA,SAAgB,IAAkB;CAChC,IAAM,EAAE,iBAAc,OAAO,GAAe,EAEtC,EAAE,SAAM,YAAS,aAAU,EAA2B,EAC1D,WAAW,EAAE,OAAO,aAAoB,EACzC,CAAC,EAKI,KAHiB,GAAM,kBAAkB,EAAE,EAGb,QAAQ,MAC1C,EAAE,IAAI,WAAW,gBAAgB,CAClC;AA0BD,QAxBI,IAEA,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;YAEZ,kBAAC,GAAD;GAAiB,SAAQ;GAAO,OAAO;GAAK,CAAA;EACjC,CAAA,GAIb,IAEA,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;YAEZ,kBAAC,OAAD;GAAK,WAAU;aAAoG;GAE7G,CAAA;EACK,CAAA,GAKf,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;YAEZ,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAa,WAAW,IACvB,kBAAC,OAAD;IAAK,WAAU;cAA4D;IAGrE,CAAA,GAEN,EAAa,KAAK,MAAwC;IACxD,IAAM,IAAM,EAAO,OACb,IACH,EAAI,QAAmB,EAAO,IAAI,QAAQ,iBAAiB,GAAG,EAC3D,IACJ,EAAO,eAAgB,EAAI,eAA0B;AACrC,MAAI;IACtB,IAAM,IAAU,EAAI,UAAqB,GACnC,IAAa,EAAI,aAAwB;AAE/C,WACE,kBAAC,OAAD;KAEE,WAAU;eAFZ,CAIE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,GAAD,EAAQ,WAAU,wBAAyB,CAAA;OACvC,CAAA,EACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,KAAD;QAAG,WAAU;kBACV;QACC,CAAA,EACJ,kBAAC,KAAD;QAAG,WAAU;kBAA+B;QAAgB,CAAA,CACxD;SACF;SACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD,EAAM,WAAU,mDAAoD,CAAA,EACpE,kBAAC,QAAD,EAAA,UAAO,GAAc,CAAA,CACjB;WACN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA,EAChC,kBAAC,QAAD,EAAA,UAAO,GAAiB,CAAA,CACpB;UACF;UACN,kBAAC,UAAD;OAAQ,WAAU;iBAAuH;OAEhI,CAAA,CACL;QACF;OA7BC,EAAO,GA6BR;KAER;GAEA,CAAA;EACK,CAAA"}