@burdenoff/microfe-ecoimpacthub 2026.509.101

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 (70) hide show
  1. package/README.md +12 -0
  2. package/dist/dev/main.d.ts +2 -0
  3. package/dist/dev/main.d.ts.map +1 -0
  4. package/dist/ecoimpacthub/EcoImpactHubRoot.d.ts +5 -0
  5. package/dist/ecoimpacthub/EcoImpactHubRoot.d.ts.map +1 -0
  6. package/dist/ecoimpacthub/EcoImpactHubRoot.js +126 -0
  7. package/dist/ecoimpacthub/EcoImpactHubRoot.js.map +1 -0
  8. package/dist/ecoimpacthub/EcoImpactHubRoutes.d.ts +2 -0
  9. package/dist/ecoimpacthub/EcoImpactHubRoutes.d.ts.map +1 -0
  10. package/dist/ecoimpacthub/EcoImpactHubRoutes.js +55 -0
  11. package/dist/ecoimpacthub/EcoImpactHubRoutes.js.map +1 -0
  12. package/dist/ecoimpacthub/index.d.ts +5 -0
  13. package/dist/ecoimpacthub/index.d.ts.map +1 -0
  14. package/dist/ecoimpacthub/index.js +3 -0
  15. package/dist/ecoimpacthub/pages/ActionTrackerPage.d.ts +2 -0
  16. package/dist/ecoimpacthub/pages/ActionTrackerPage.d.ts.map +1 -0
  17. package/dist/ecoimpacthub/pages/ActionTrackerPage.js +449 -0
  18. package/dist/ecoimpacthub/pages/ActionTrackerPage.js.map +1 -0
  19. package/dist/ecoimpacthub/pages/ChallengesPage.d.ts +2 -0
  20. package/dist/ecoimpacthub/pages/ChallengesPage.d.ts.map +1 -0
  21. package/dist/ecoimpacthub/pages/ChallengesPage.js +242 -0
  22. package/dist/ecoimpacthub/pages/ChallengesPage.js.map +1 -0
  23. package/dist/ecoimpacthub/pages/CitizenSciencePage.d.ts +2 -0
  24. package/dist/ecoimpacthub/pages/CitizenSciencePage.d.ts.map +1 -0
  25. package/dist/ecoimpacthub/pages/CitizenSciencePage.js +443 -0
  26. package/dist/ecoimpacthub/pages/CitizenSciencePage.js.map +1 -0
  27. package/dist/ecoimpacthub/pages/CommunityPage.d.ts +2 -0
  28. package/dist/ecoimpacthub/pages/CommunityPage.d.ts.map +1 -0
  29. package/dist/ecoimpacthub/pages/CommunityPage.js +377 -0
  30. package/dist/ecoimpacthub/pages/CommunityPage.js.map +1 -0
  31. package/dist/ecoimpacthub/pages/DashboardPage.d.ts +2 -0
  32. package/dist/ecoimpacthub/pages/DashboardPage.d.ts.map +1 -0
  33. package/dist/ecoimpacthub/pages/DashboardPage.js +380 -0
  34. package/dist/ecoimpacthub/pages/DashboardPage.js.map +1 -0
  35. package/dist/ecoimpacthub/pages/LearningPage.d.ts +2 -0
  36. package/dist/ecoimpacthub/pages/LearningPage.d.ts.map +1 -0
  37. package/dist/ecoimpacthub/pages/LearningPage.js +276 -0
  38. package/dist/ecoimpacthub/pages/LearningPage.js.map +1 -0
  39. package/dist/ecoimpacthub/providers/EcoImpactHubProvider.d.ts +6 -0
  40. package/dist/ecoimpacthub/providers/EcoImpactHubProvider.d.ts.map +1 -0
  41. package/dist/ecoimpacthub/providers/EcoImpactHubProvider.js +27 -0
  42. package/dist/ecoimpacthub/providers/EcoImpactHubProvider.js.map +1 -0
  43. package/dist/ecoimpacthub/store/ecoimpacthubStore.d.ts +135 -0
  44. package/dist/ecoimpacthub/store/ecoimpacthubStore.d.ts.map +1 -0
  45. package/dist/ecoimpacthub/store/ecoimpacthubStore.js +551 -0
  46. package/dist/ecoimpacthub/store/ecoimpacthubStore.js.map +1 -0
  47. package/dist/ecoimpacthub/types/index.d.ts +51 -0
  48. package/dist/ecoimpacthub/types/index.d.ts.map +1 -0
  49. package/dist/ecoimpacthub/utils/cn.d.ts +4 -0
  50. package/dist/ecoimpacthub/utils/cn.d.ts.map +1 -0
  51. package/dist/ecoimpacthub/utils/i18n.d.ts +6 -0
  52. package/dist/ecoimpacthub/utils/i18n.d.ts.map +1 -0
  53. package/dist/ecoimpacthub/utils/i18n.js +15 -0
  54. package/dist/ecoimpacthub/utils/i18n.js.map +1 -0
  55. package/dist/ecoimpacthub/utils/navigation.d.ts +2 -0
  56. package/dist/ecoimpacthub/utils/navigation.d.ts.map +1 -0
  57. package/dist/ecoimpacthub/utils/navigation.js +8 -0
  58. package/dist/ecoimpacthub/utils/navigation.js.map +1 -0
  59. package/dist/generated/global-operations.d.ts +2 -0
  60. package/dist/generated/global-operations.d.ts.map +1 -0
  61. package/dist/generated/global-types.d.ts +18199 -0
  62. package/dist/generated/global-types.d.ts.map +1 -0
  63. package/dist/generated/wspace-operations.d.ts +2 -0
  64. package/dist/generated/wspace-operations.d.ts.map +1 -0
  65. package/dist/generated/wspace-types.d.ts +43046 -0
  66. package/dist/generated/wspace-types.d.ts.map +1 -0
  67. package/dist/index.d.ts +2 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +5 -0
  70. package/package.json +107 -0
@@ -0,0 +1,380 @@
1
+ import { useEcoImpactHub as e } from "../providers/EcoImpactHubProvider.js";
2
+ import { useEcoImpactHubStore as t } from "../store/ecoimpacthubStore.js";
3
+ import { tWithFallback as n } from "../utils/i18n.js";
4
+ import { useState as r } from "react";
5
+ import { Activity as i, BarChart3 as a, Calendar as o, CheckSquare as s, Leaf as c, Star as l, Target as u, TrendingUp as d, Trophy as f, Users as p } from "lucide-react";
6
+ import { useI18n as m } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
7
+ import { Badge as h, Button as g, Card as _, CardContent as v, CardHeader as y, CardTitle as b } from "@burdenoff/fe-libs/ui";
8
+ import { jsx as x, jsxs as S } from "react/jsx-runtime";
9
+ //#region src/ecoimpacthub/pages/DashboardPage.tsx
10
+ function C() {
11
+ let { t: C } = m(), { currentUser: w } = e(), { metrics: T, carbonBreakdown: E, challenges: D, workItems: O } = t(), [k, A] = r("month"), j = (e, t, r) => n(C, e, t, r), M = [
12
+ {
13
+ title: j("ecoimpacthub.dashboard.stats.carbonFootprint.title", "Carbon Footprint"),
14
+ value: "2.1 tons",
15
+ change: j("ecoimpacthub.dashboard.stats.carbonFootprint.change", "-15% this month"),
16
+ icon: c,
17
+ color: "text-green-600"
18
+ },
19
+ {
20
+ title: j("ecoimpacthub.dashboard.stats.actionsCompleted.title", "Actions Completed"),
21
+ value: "28",
22
+ change: j("ecoimpacthub.dashboard.stats.actionsCompleted.change", "+12 this week"),
23
+ icon: s,
24
+ color: "text-blue-600"
25
+ },
26
+ {
27
+ title: j("ecoimpacthub.dashboard.stats.communityRank.title", "Community Rank"),
28
+ value: "#147",
29
+ change: j("ecoimpacthub.dashboard.stats.communityRank.change", "+23 positions"),
30
+ icon: f,
31
+ color: "text-amber-600"
32
+ },
33
+ {
34
+ title: j("ecoimpacthub.dashboard.stats.impactScore.title", "Impact Score"),
35
+ value: "87",
36
+ change: j("ecoimpacthub.dashboard.stats.impactScore.change", "+5 points"),
37
+ icon: l,
38
+ color: "text-purple-600"
39
+ }
40
+ ], N = [
41
+ {
42
+ id: "1",
43
+ type: j("ecoimpacthub.dashboard.activity.achievement.badge", "achievement"),
44
+ title: j("ecoimpacthub.dashboard.activity.achievement.title", "Carbon Champion"),
45
+ description: j("ecoimpacthub.dashboard.activity.achievement.description", "Saved 500kg CO2 through your actions"),
46
+ timestamp: j("ecoimpacthub.dashboard.activity.achievement.timestamp", "2 hours ago"),
47
+ icon: "🏆"
48
+ },
49
+ {
50
+ id: "2",
51
+ type: j("ecoimpacthub.dashboard.activity.action.badge", "action"),
52
+ title: j("ecoimpacthub.dashboard.activity.action.title", "Switched to Renewable Energy"),
53
+ description: j("ecoimpacthub.dashboard.activity.action.description", "Completed energy transition action"),
54
+ timestamp: j("ecoimpacthub.dashboard.activity.action.timestamp", "1 day ago"),
55
+ icon: "⚡"
56
+ },
57
+ {
58
+ id: "3",
59
+ type: j("ecoimpacthub.dashboard.activity.challenge.badge", "challenge"),
60
+ title: j("ecoimpacthub.dashboard.activity.challenge.title", "Plastic-Free Week"),
61
+ description: j("ecoimpacthub.dashboard.activity.challenge.description", "Reached 85% completion"),
62
+ timestamp: j("ecoimpacthub.dashboard.activity.challenge.timestamp", "2 days ago"),
63
+ icon: "♻️"
64
+ },
65
+ {
66
+ id: "4",
67
+ type: j("ecoimpacthub.dashboard.activity.community.badge", "community"),
68
+ title: j("ecoimpacthub.dashboard.activity.community.title", "Joined Urban Gardeners"),
69
+ description: j("ecoimpacthub.dashboard.activity.community.description", "Connected with 8.9K eco-warriors"),
70
+ timestamp: j("ecoimpacthub.dashboard.activity.community.timestamp", "3 days ago"),
71
+ icon: "🌱"
72
+ }
73
+ ], P = [
74
+ {
75
+ label: j("ecoimpacthub.dashboard.weeklyGoals.reduceEnergyUsage", "Reduce Energy Usage"),
76
+ progress: 75,
77
+ color: "bg-green-500"
78
+ },
79
+ {
80
+ label: j("ecoimpacthub.dashboard.weeklyGoals.completeActions", "Complete 3 Actions"),
81
+ progress: 67,
82
+ display: "2/3",
83
+ color: "bg-blue-500"
84
+ },
85
+ {
86
+ label: j("ecoimpacthub.dashboard.weeklyGoals.communityEngagement", "Community Engagement"),
87
+ progress: 40,
88
+ color: "bg-purple-500"
89
+ }
90
+ ], F = D.filter((e) => e.status === "active").slice(0, 2), I = w?.firstName ?? w?.name ?? w?.email?.split("@")[0] ?? j("ecoimpacthub.dashboard.userFallback", "User"), L = k === "week" ? j("ecoimpacthub.dashboard.timeRange.thisWeek", "this week") : k === "month" ? j("ecoimpacthub.dashboard.timeRange.thisMonth", "this month") : j("ecoimpacthub.dashboard.timeRange.thisYear", "this year"), R = (e) => {
91
+ switch (e) {
92
+ case "week": return j("ecoimpacthub.dashboard.filters.week", "Week");
93
+ case "month": return j("ecoimpacthub.dashboard.filters.month", "Month");
94
+ case "year": return j("ecoimpacthub.dashboard.filters.year", "Year");
95
+ default: return e;
96
+ }
97
+ };
98
+ return /* @__PURE__ */ x("div", {
99
+ className: "min-h-screen p-4",
100
+ children: /* @__PURE__ */ S("div", {
101
+ className: "mx-auto max-w-7xl space-y-8",
102
+ children: [
103
+ /* @__PURE__ */ S("div", {
104
+ className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
105
+ children: [/* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("h1", {
106
+ className: "text-3xl font-bold",
107
+ children: j("ecoimpacthub.dashboard.title", "Welcome back, {{name}}", { name: I })
108
+ }), /* @__PURE__ */ x("p", {
109
+ className: "mt-1 text-muted-foreground",
110
+ children: j("ecoimpacthub.dashboard.subtitle", "Here's your environmental impact dashboard for {{timeRange}}", { timeRange: L })
111
+ })] }), /* @__PURE__ */ x("div", {
112
+ className: "flex gap-2",
113
+ children: [
114
+ "week",
115
+ "month",
116
+ "year"
117
+ ].map((e) => /* @__PURE__ */ x(g, {
118
+ variant: k === e ? "default" : "outline",
119
+ size: "sm",
120
+ onClick: () => A(e),
121
+ children: R(e)
122
+ }, e))
123
+ })]
124
+ }),
125
+ /* @__PURE__ */ x("div", {
126
+ className: "grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-4",
127
+ children: M.map((e) => {
128
+ let t = e.icon;
129
+ return /* @__PURE__ */ x(_, { children: /* @__PURE__ */ S(v, {
130
+ className: "space-y-3 p-6",
131
+ children: [/* @__PURE__ */ S("div", {
132
+ className: "flex items-center justify-between",
133
+ children: [/* @__PURE__ */ x("div", {
134
+ className: `rounded-lg bg-muted/50 p-2 ${e.color}`,
135
+ children: /* @__PURE__ */ x(t, { className: "h-5 w-5" })
136
+ }), /* @__PURE__ */ x(d, { className: "h-4 w-4 text-green-600" })]
137
+ }), /* @__PURE__ */ S("div", { children: [
138
+ /* @__PURE__ */ x("h3", {
139
+ className: "text-2xl font-bold",
140
+ children: e.value
141
+ }),
142
+ /* @__PURE__ */ x("p", {
143
+ className: "text-sm font-medium text-muted-foreground",
144
+ children: e.title
145
+ }),
146
+ /* @__PURE__ */ x("p", {
147
+ className: "mt-1 text-xs text-muted-foreground",
148
+ children: e.change
149
+ })
150
+ ] })]
151
+ }) }, e.title);
152
+ })
153
+ }),
154
+ /* @__PURE__ */ S("div", {
155
+ className: "grid grid-cols-1 gap-8 lg:grid-cols-3",
156
+ children: [/* @__PURE__ */ S("div", {
157
+ className: "space-y-8 lg:col-span-2",
158
+ children: [/* @__PURE__ */ S(_, { children: [/* @__PURE__ */ x(y, { children: /* @__PURE__ */ S("div", {
159
+ className: "flex items-center justify-between",
160
+ children: [/* @__PURE__ */ x(b, { children: j("ecoimpacthub.dashboard.sections.impactByCategory", "Impact by Category") }), /* @__PURE__ */ S(g, {
161
+ variant: "outline",
162
+ size: "sm",
163
+ children: [/* @__PURE__ */ x(a, { className: "mr-2 h-4 w-4" }), j("ecoimpacthub.dashboard.actions.viewDetails", "View Details")]
164
+ })]
165
+ }) }), /* @__PURE__ */ x(v, {
166
+ className: "space-y-4",
167
+ children: E.map((e) => /* @__PURE__ */ S("div", {
168
+ className: "space-y-2",
169
+ children: [/* @__PURE__ */ S("div", {
170
+ className: "flex items-center justify-between",
171
+ children: [/* @__PURE__ */ x("span", {
172
+ className: "text-sm font-medium",
173
+ children: e.label
174
+ }), /* @__PURE__ */ S("span", {
175
+ className: "text-sm text-muted-foreground",
176
+ children: [e.value, "%"]
177
+ })]
178
+ }), /* @__PURE__ */ x("div", {
179
+ className: "h-2 w-full rounded-full bg-muted",
180
+ children: /* @__PURE__ */ x("div", {
181
+ className: `h-2 rounded-full transition-all ${e.color}`,
182
+ style: { width: `${e.value}%` }
183
+ })
184
+ })]
185
+ }, e.id))
186
+ })] }), /* @__PURE__ */ S(_, { children: [/* @__PURE__ */ x(y, { children: /* @__PURE__ */ S("div", {
187
+ className: "flex items-center justify-between",
188
+ children: [/* @__PURE__ */ x(b, { children: j("ecoimpacthub.dashboard.sections.activeChallenges", "Active Challenges") }), /* @__PURE__ */ x(g, {
189
+ variant: "outline",
190
+ size: "sm",
191
+ children: j("ecoimpacthub.dashboard.actions.viewAll", "View All")
192
+ })]
193
+ }) }), /* @__PURE__ */ x(v, {
194
+ className: "space-y-4",
195
+ children: F.map((e) => /* @__PURE__ */ S("div", {
196
+ className: "space-y-3 rounded-lg border p-4",
197
+ children: [
198
+ /* @__PURE__ */ S("div", {
199
+ className: "flex items-start justify-between",
200
+ children: [/* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("h3", {
201
+ className: "font-semibold",
202
+ children: e.title
203
+ }), /* @__PURE__ */ x("p", {
204
+ className: "line-clamp-2 text-sm text-muted-foreground",
205
+ children: e.description
206
+ })] }), /* @__PURE__ */ x(h, {
207
+ variant: "outline",
208
+ children: j("ecoimpacthub.dashboard.challenge.points", "{{points}} pts", { points: e.points })
209
+ })]
210
+ }),
211
+ e.progress !== void 0 && /* @__PURE__ */ S("div", {
212
+ className: "space-y-2",
213
+ children: [/* @__PURE__ */ S("div", {
214
+ className: "flex justify-between text-sm",
215
+ children: [/* @__PURE__ */ x("span", { children: j("ecoimpacthub.dashboard.challenge.progress", "Progress") }), /* @__PURE__ */ S("span", { children: [e.progress, "%"] })]
216
+ }), /* @__PURE__ */ x("div", {
217
+ className: "h-2 w-full rounded-full bg-muted",
218
+ children: /* @__PURE__ */ x("div", {
219
+ className: "h-2 rounded-full bg-primary transition-all",
220
+ style: { width: `${e.progress}%` }
221
+ })
222
+ })]
223
+ }),
224
+ /* @__PURE__ */ S("div", {
225
+ className: "flex items-center justify-between text-sm text-muted-foreground",
226
+ children: [/* @__PURE__ */ S("div", {
227
+ className: "flex items-center gap-1",
228
+ children: [/* @__PURE__ */ x(p, { className: "h-3 w-3" }), /* @__PURE__ */ x("span", { children: j("ecoimpacthub.dashboard.challenge.participants", "{{count}} participants", { count: e.participants }) })]
229
+ }), /* @__PURE__ */ S("div", {
230
+ className: "flex items-center gap-1",
231
+ children: [/* @__PURE__ */ x(o, { className: "h-3 w-3" }), /* @__PURE__ */ x("span", { children: j("ecoimpacthub.dashboard.challenge.ends", "Ends {{date}}", { date: new Date(e.endDate).toLocaleDateString() }) })]
232
+ })]
233
+ })
234
+ ]
235
+ }, e.id))
236
+ })] })]
237
+ }), /* @__PURE__ */ S("div", {
238
+ className: "space-y-6",
239
+ children: [
240
+ /* @__PURE__ */ S(_, { children: [/* @__PURE__ */ x(y, { children: /* @__PURE__ */ x(b, {
241
+ className: "text-lg",
242
+ children: j("ecoimpacthub.dashboard.sections.quickActions", "Quick Actions")
243
+ }) }), /* @__PURE__ */ x(v, { children: /* @__PURE__ */ S("div", {
244
+ className: "grid grid-cols-2 gap-3",
245
+ children: [
246
+ /* @__PURE__ */ S(g, {
247
+ variant: "outline",
248
+ size: "sm",
249
+ className: "h-16 flex-col gap-1",
250
+ children: [/* @__PURE__ */ x(s, { className: "h-5 w-5" }), /* @__PURE__ */ x("span", {
251
+ className: "text-xs",
252
+ children: j("ecoimpacthub.dashboard.quickActions.logAction", "Log Action")
253
+ })]
254
+ }),
255
+ /* @__PURE__ */ S(g, {
256
+ variant: "outline",
257
+ size: "sm",
258
+ className: "h-16 flex-col gap-1",
259
+ children: [/* @__PURE__ */ x(f, { className: "h-5 w-5" }), /* @__PURE__ */ x("span", {
260
+ className: "text-xs",
261
+ children: j("ecoimpacthub.dashboard.quickActions.joinChallenge", "Join Challenge")
262
+ })]
263
+ }),
264
+ /* @__PURE__ */ S(g, {
265
+ variant: "outline",
266
+ size: "sm",
267
+ className: "h-16 flex-col gap-1",
268
+ children: [/* @__PURE__ */ x(p, { className: "h-5 w-5" }), /* @__PURE__ */ x("span", {
269
+ className: "text-xs",
270
+ children: j("ecoimpacthub.dashboard.quickActions.findCommunity", "Find Community")
271
+ })]
272
+ }),
273
+ /* @__PURE__ */ S(g, {
274
+ variant: "outline",
275
+ size: "sm",
276
+ className: "h-16 flex-col gap-1",
277
+ children: [/* @__PURE__ */ x(u, { className: "h-5 w-5" }), /* @__PURE__ */ x("span", {
278
+ className: "text-xs",
279
+ children: j("ecoimpacthub.dashboard.quickActions.setGoal", "Set Goal")
280
+ })]
281
+ })
282
+ ]
283
+ }) })] }),
284
+ /* @__PURE__ */ S(_, { children: [/* @__PURE__ */ x(y, { children: /* @__PURE__ */ x(b, {
285
+ className: "text-lg",
286
+ children: j("ecoimpacthub.dashboard.sections.recentActivity", "Recent Activity")
287
+ }) }), /* @__PURE__ */ S(v, {
288
+ className: "space-y-3",
289
+ children: [N.map((e) => /* @__PURE__ */ S("div", {
290
+ className: "flex items-start gap-3",
291
+ children: [/* @__PURE__ */ x("div", {
292
+ className: "flex-shrink-0 text-lg",
293
+ children: e.icon
294
+ }), /* @__PURE__ */ S("div", {
295
+ className: "min-w-0 flex-1",
296
+ children: [
297
+ /* @__PURE__ */ S("div", {
298
+ className: "mb-1 flex items-center gap-2",
299
+ children: [/* @__PURE__ */ x("p", {
300
+ className: "truncate text-sm font-medium",
301
+ children: e.title
302
+ }), /* @__PURE__ */ x(h, {
303
+ variant: "secondary",
304
+ className: "text-xs",
305
+ children: e.type
306
+ })]
307
+ }),
308
+ /* @__PURE__ */ x("p", {
309
+ className: "line-clamp-2 text-xs text-muted-foreground",
310
+ children: e.description
311
+ }),
312
+ /* @__PURE__ */ x("p", {
313
+ className: "mt-1 text-xs text-muted-foreground",
314
+ children: e.timestamp
315
+ })
316
+ ]
317
+ })]
318
+ }, e.id)), /* @__PURE__ */ x(g, {
319
+ variant: "outline",
320
+ size: "sm",
321
+ className: "mt-4 w-full",
322
+ children: j("ecoimpacthub.dashboard.actions.viewAllActivity", "View All Activity")
323
+ })]
324
+ })] }),
325
+ /* @__PURE__ */ S(_, { children: [/* @__PURE__ */ x(y, { children: /* @__PURE__ */ x(b, {
326
+ className: "text-lg",
327
+ children: j("ecoimpacthub.dashboard.sections.weeklyGoals", "This Week's Goals")
328
+ }) }), /* @__PURE__ */ x(v, {
329
+ className: "space-y-4",
330
+ children: P.map((e) => /* @__PURE__ */ S("div", {
331
+ className: "space-y-2",
332
+ children: [/* @__PURE__ */ S("div", {
333
+ className: "flex justify-between text-sm",
334
+ children: [/* @__PURE__ */ x("span", { children: e.label }), /* @__PURE__ */ x("span", { children: e.display ?? `${e.progress}%` })]
335
+ }), /* @__PURE__ */ x("div", {
336
+ className: "h-2 w-full rounded-full bg-muted",
337
+ children: /* @__PURE__ */ x("div", {
338
+ className: `h-2 rounded-full ${e.color}`,
339
+ style: { width: `${e.progress}%` }
340
+ })
341
+ })]
342
+ }, e.label))
343
+ })] }),
344
+ /* @__PURE__ */ S(_, { children: [/* @__PURE__ */ x(y, { children: /* @__PURE__ */ x(b, {
345
+ className: "text-lg",
346
+ children: j("ecoimpacthub.dashboard.sections.liveMetrics", "Live Metrics")
347
+ }) }), /* @__PURE__ */ S(v, {
348
+ className: "space-y-3 text-sm text-muted-foreground",
349
+ children: [
350
+ T.slice(0, 3).map((e) => /* @__PURE__ */ S("div", {
351
+ className: "flex items-center justify-between",
352
+ children: [/* @__PURE__ */ x("span", { children: e.label }), /* @__PURE__ */ x("span", {
353
+ className: "font-medium text-foreground",
354
+ children: e.value
355
+ })]
356
+ }, e.label)),
357
+ /* @__PURE__ */ S("div", {
358
+ className: "flex items-center justify-between",
359
+ children: [/* @__PURE__ */ x("span", { children: j("ecoimpacthub.dashboard.metrics.workItems", "Work Items") }), /* @__PURE__ */ x("span", {
360
+ className: "font-medium text-foreground",
361
+ children: O.length
362
+ })]
363
+ }),
364
+ /* @__PURE__ */ S("div", {
365
+ className: "flex items-center gap-2 pt-2 text-xs",
366
+ children: [/* @__PURE__ */ x(i, { className: "h-4 w-4" }), /* @__PURE__ */ x("span", { children: j("ecoimpacthub.dashboard.metrics.synced", "Synced with your latest activity") })]
367
+ })
368
+ ]
369
+ })] })
370
+ ]
371
+ })]
372
+ })
373
+ ]
374
+ })
375
+ });
376
+ }
377
+ //#endregion
378
+ export { C as DashboardPage };
379
+
380
+ //# sourceMappingURL=DashboardPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardPage.js","names":[],"sources":["../../../src/ecoimpacthub/pages/DashboardPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { Badge, Button, Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n Leaf,\n TrendingUp,\n Users,\n Trophy,\n Star,\n CheckSquare,\n Target,\n Calendar,\n Activity,\n BarChart3,\n} from 'lucide-react';\nimport { useEcoImpactHub } from '../providers/EcoImpactHubProvider';\nimport { useEcoImpactHubStore } from '../store/ecoimpacthubStore';\nimport { tWithFallback } from '../utils/i18n';\n\nexport function DashboardPage() {\n const { t } = useI18n();\n const { currentUser } = useEcoImpactHub();\n const { metrics, carbonBreakdown, challenges, workItems } = useEcoImpactHubStore();\n const [timeRange, setTimeRange] = useState<'week' | 'month' | 'year'>('month');\n const translate = (key: string, fallback: string, params?: Record<string, string | number>) =>\n tWithFallback(t, key, fallback, params);\n\n const dashboardStats = [\n {\n title: translate('ecoimpacthub.dashboard.stats.carbonFootprint.title', 'Carbon Footprint'),\n value: '2.1 tons',\n change: translate('ecoimpacthub.dashboard.stats.carbonFootprint.change', '-15% this month'),\n icon: Leaf,\n color: 'text-green-600',\n },\n {\n title: translate('ecoimpacthub.dashboard.stats.actionsCompleted.title', 'Actions Completed'),\n value: '28',\n change: translate('ecoimpacthub.dashboard.stats.actionsCompleted.change', '+12 this week'),\n icon: CheckSquare,\n color: 'text-blue-600',\n },\n {\n title: translate('ecoimpacthub.dashboard.stats.communityRank.title', 'Community Rank'),\n value: '#147',\n change: translate('ecoimpacthub.dashboard.stats.communityRank.change', '+23 positions'),\n icon: Trophy,\n color: 'text-amber-600',\n },\n {\n title: translate('ecoimpacthub.dashboard.stats.impactScore.title', 'Impact Score'),\n value: '87',\n change: translate('ecoimpacthub.dashboard.stats.impactScore.change', '+5 points'),\n icon: Star,\n color: 'text-purple-600',\n },\n ];\n\n const recentActivities = [\n {\n id: '1',\n type: translate('ecoimpacthub.dashboard.activity.achievement.badge', 'achievement'),\n title: translate('ecoimpacthub.dashboard.activity.achievement.title', 'Carbon Champion'),\n description: translate(\n 'ecoimpacthub.dashboard.activity.achievement.description',\n 'Saved 500kg CO2 through your actions'\n ),\n timestamp: translate('ecoimpacthub.dashboard.activity.achievement.timestamp', '2 hours ago'),\n icon: '🏆',\n },\n {\n id: '2',\n type: translate('ecoimpacthub.dashboard.activity.action.badge', 'action'),\n title: translate(\n 'ecoimpacthub.dashboard.activity.action.title',\n 'Switched to Renewable Energy'\n ),\n description: translate(\n 'ecoimpacthub.dashboard.activity.action.description',\n 'Completed energy transition action'\n ),\n timestamp: translate('ecoimpacthub.dashboard.activity.action.timestamp', '1 day ago'),\n icon: '⚡',\n },\n {\n id: '3',\n type: translate('ecoimpacthub.dashboard.activity.challenge.badge', 'challenge'),\n title: translate('ecoimpacthub.dashboard.activity.challenge.title', 'Plastic-Free Week'),\n description: translate(\n 'ecoimpacthub.dashboard.activity.challenge.description',\n 'Reached 85% completion'\n ),\n timestamp: translate('ecoimpacthub.dashboard.activity.challenge.timestamp', '2 days ago'),\n icon: '♻️',\n },\n {\n id: '4',\n type: translate('ecoimpacthub.dashboard.activity.community.badge', 'community'),\n title: translate('ecoimpacthub.dashboard.activity.community.title', 'Joined Urban Gardeners'),\n description: translate(\n 'ecoimpacthub.dashboard.activity.community.description',\n 'Connected with 8.9K eco-warriors'\n ),\n timestamp: translate('ecoimpacthub.dashboard.activity.community.timestamp', '3 days ago'),\n icon: '🌱',\n },\n ];\n\n const weeklyGoals = [\n {\n label: translate(\n 'ecoimpacthub.dashboard.weeklyGoals.reduceEnergyUsage',\n 'Reduce Energy Usage'\n ),\n progress: 75,\n color: 'bg-green-500',\n },\n {\n label: translate('ecoimpacthub.dashboard.weeklyGoals.completeActions', 'Complete 3 Actions'),\n progress: 67,\n display: '2/3',\n color: 'bg-blue-500',\n },\n {\n label: translate(\n 'ecoimpacthub.dashboard.weeklyGoals.communityEngagement',\n 'Community Engagement'\n ),\n progress: 40,\n color: 'bg-purple-500',\n },\n ];\n\n const activeChallenges = challenges.filter((c) => c.status === 'active').slice(0, 2);\n\n const userName =\n currentUser?.firstName ??\n currentUser?.name ??\n currentUser?.email?.split('@')[0] ??\n translate('ecoimpacthub.dashboard.userFallback', 'User');\n\n const timeRangeLabel =\n timeRange === 'week'\n ? translate('ecoimpacthub.dashboard.timeRange.thisWeek', 'this week')\n : timeRange === 'month'\n ? translate('ecoimpacthub.dashboard.timeRange.thisMonth', 'this month')\n : translate('ecoimpacthub.dashboard.timeRange.thisYear', 'this year');\n\n const getRangeLabel = (range: 'week' | 'month' | 'year') => {\n switch (range) {\n case 'week':\n return translate('ecoimpacthub.dashboard.filters.week', 'Week');\n case 'month':\n return translate('ecoimpacthub.dashboard.filters.month', 'Month');\n case 'year':\n return translate('ecoimpacthub.dashboard.filters.year', 'Year');\n default:\n return range;\n }\n };\n\n return (\n <div className=\"min-h-screen p-4\">\n <div className=\"mx-auto max-w-7xl space-y-8\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <h1 className=\"text-3xl font-bold\">\n {translate('ecoimpacthub.dashboard.title', 'Welcome back, {{name}}', {\n name: userName,\n })}\n </h1>\n <p className=\"mt-1 text-muted-foreground\">\n {translate(\n 'ecoimpacthub.dashboard.subtitle',\n \"Here's your environmental impact dashboard for {{timeRange}}\",\n { timeRange: timeRangeLabel }\n )}\n </p>\n </div>\n <div className=\"flex gap-2\">\n {(['week', 'month', 'year'] as const).map((range) => (\n <Button\n key={range}\n variant={timeRange === range ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => setTimeRange(range)}\n >\n {getRangeLabel(range)}\n </Button>\n ))}\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-4\">\n {dashboardStats.map((stat) => {\n const Icon = stat.icon;\n return (\n <Card key={stat.title}>\n <CardContent className=\"space-y-3 p-6\">\n <div className=\"flex items-center justify-between\">\n <div className={`rounded-lg bg-muted/50 p-2 ${stat.color}`}>\n <Icon className=\"h-5 w-5\" />\n </div>\n <TrendingUp className=\"h-4 w-4 text-green-600\" />\n </div>\n <div>\n <h3 className=\"text-2xl font-bold\">{stat.value}</h3>\n <p className=\"text-sm font-medium text-muted-foreground\">{stat.title}</p>\n <p className=\"mt-1 text-xs text-muted-foreground\">{stat.change}</p>\n </div>\n </CardContent>\n </Card>\n );\n })}\n </div>\n\n <div className=\"grid grid-cols-1 gap-8 lg:grid-cols-3\">\n <div className=\"space-y-8 lg:col-span-2\">\n <Card>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle>\n {translate(\n 'ecoimpacthub.dashboard.sections.impactByCategory',\n 'Impact by Category'\n )}\n </CardTitle>\n <Button variant=\"outline\" size=\"sm\">\n <BarChart3 className=\"mr-2 h-4 w-4\" />\n {translate('ecoimpacthub.dashboard.actions.viewDetails', 'View Details')}\n </Button>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {carbonBreakdown.map((item) => (\n <div key={item.id} className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-medium\">{item.label}</span>\n <span className=\"text-sm text-muted-foreground\">{item.value}%</span>\n </div>\n <div className=\"h-2 w-full rounded-full bg-muted\">\n <div\n className={`h-2 rounded-full transition-all ${item.color}`}\n style={{ width: `${item.value}%` }}\n />\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <CardTitle>\n {translate(\n 'ecoimpacthub.dashboard.sections.activeChallenges',\n 'Active Challenges'\n )}\n </CardTitle>\n <Button variant=\"outline\" size=\"sm\">\n {translate('ecoimpacthub.dashboard.actions.viewAll', 'View All')}\n </Button>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {activeChallenges.map((challenge) => (\n <div key={challenge.id} className=\"space-y-3 rounded-lg border p-4\">\n <div className=\"flex items-start justify-between\">\n <div>\n <h3 className=\"font-semibold\">{challenge.title}</h3>\n <p className=\"line-clamp-2 text-sm text-muted-foreground\">\n {challenge.description}\n </p>\n </div>\n <Badge variant=\"outline\">\n {translate('ecoimpacthub.dashboard.challenge.points', '{{points}} pts', {\n points: challenge.points,\n })}\n </Badge>\n </div>\n {challenge.progress !== undefined && (\n <div className=\"space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span>\n {translate('ecoimpacthub.dashboard.challenge.progress', 'Progress')}\n </span>\n <span>{challenge.progress}%</span>\n </div>\n <div className=\"h-2 w-full rounded-full bg-muted\">\n <div\n className=\"h-2 rounded-full bg-primary transition-all\"\n style={{ width: `${challenge.progress}%` }}\n />\n </div>\n </div>\n )}\n <div className=\"flex items-center justify-between text-sm text-muted-foreground\">\n <div className=\"flex items-center gap-1\">\n <Users className=\"h-3 w-3\" />\n <span>\n {translate(\n 'ecoimpacthub.dashboard.challenge.participants',\n '{{count}} participants',\n { count: challenge.participants }\n )}\n </span>\n </div>\n <div className=\"flex items-center gap-1\">\n <Calendar className=\"h-3 w-3\" />\n <span>\n {translate('ecoimpacthub.dashboard.challenge.ends', 'Ends {{date}}', {\n date: new Date(challenge.endDate).toLocaleDateString(),\n })}\n </span>\n </div>\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n </div>\n\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">\n {translate('ecoimpacthub.dashboard.sections.quickActions', 'Quick Actions')}\n </CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-2 gap-3\">\n <Button variant=\"outline\" size=\"sm\" className=\"h-16 flex-col gap-1\">\n <CheckSquare className=\"h-5 w-5\" />\n <span className=\"text-xs\">\n {translate('ecoimpacthub.dashboard.quickActions.logAction', 'Log Action')}\n </span>\n </Button>\n <Button variant=\"outline\" size=\"sm\" className=\"h-16 flex-col gap-1\">\n <Trophy className=\"h-5 w-5\" />\n <span className=\"text-xs\">\n {translate(\n 'ecoimpacthub.dashboard.quickActions.joinChallenge',\n 'Join Challenge'\n )}\n </span>\n </Button>\n <Button variant=\"outline\" size=\"sm\" className=\"h-16 flex-col gap-1\">\n <Users className=\"h-5 w-5\" />\n <span className=\"text-xs\">\n {translate(\n 'ecoimpacthub.dashboard.quickActions.findCommunity',\n 'Find Community'\n )}\n </span>\n </Button>\n <Button variant=\"outline\" size=\"sm\" className=\"h-16 flex-col gap-1\">\n <Target className=\"h-5 w-5\" />\n <span className=\"text-xs\">\n {translate('ecoimpacthub.dashboard.quickActions.setGoal', 'Set Goal')}\n </span>\n </Button>\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">\n {translate('ecoimpacthub.dashboard.sections.recentActivity', 'Recent Activity')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {recentActivities.map((act) => (\n <div key={act.id} className=\"flex items-start gap-3\">\n <div className=\"flex-shrink-0 text-lg\">{act.icon}</div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"mb-1 flex items-center gap-2\">\n <p className=\"truncate text-sm font-medium\">{act.title}</p>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {act.type}\n </Badge>\n </div>\n <p className=\"line-clamp-2 text-xs text-muted-foreground\">\n {act.description}\n </p>\n <p className=\"mt-1 text-xs text-muted-foreground\">{act.timestamp}</p>\n </div>\n </div>\n ))}\n <Button variant=\"outline\" size=\"sm\" className=\"mt-4 w-full\">\n {translate('ecoimpacthub.dashboard.actions.viewAllActivity', 'View All Activity')}\n </Button>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">\n {translate('ecoimpacthub.dashboard.sections.weeklyGoals', \"This Week's Goals\")}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {weeklyGoals.map((goal) => (\n <div key={goal.label} className=\"space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span>{goal.label}</span>\n <span>{goal.display ?? `${goal.progress}%`}</span>\n </div>\n <div className=\"h-2 w-full rounded-full bg-muted\">\n <div\n className={`h-2 rounded-full ${goal.color}`}\n style={{ width: `${goal.progress}%` }}\n />\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-lg\">\n {translate('ecoimpacthub.dashboard.sections.liveMetrics', 'Live Metrics')}\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3 text-sm text-muted-foreground\">\n {metrics.slice(0, 3).map((metric) => (\n <div key={metric.label} className=\"flex items-center justify-between\">\n <span>{metric.label}</span>\n <span className=\"font-medium text-foreground\">{metric.value}</span>\n </div>\n ))}\n <div className=\"flex items-center justify-between\">\n <span>{translate('ecoimpacthub.dashboard.metrics.workItems', 'Work Items')}</span>\n <span className=\"font-medium text-foreground\">{workItems.length}</span>\n </div>\n <div className=\"flex items-center gap-2 pt-2 text-xs\">\n <Activity className=\"h-4 w-4\" />\n <span>\n {translate(\n 'ecoimpacthub.dashboard.metrics.synced',\n 'Synced with your latest activity'\n )}\n </span>\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function LearningPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=LearningPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LearningPage.d.ts","sourceRoot":"","sources":["../../../src/ecoimpacthub/pages/LearningPage.tsx"],"names":[],"mappings":"AA4BA,wBAAgB,YAAY,4CAwQ3B"}