@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,276 @@
1
+ import { useEcoImpactHubStore as e } from "../store/ecoimpacthubStore.js";
2
+ import { useState as t } from "react";
3
+ import { Award as n, BookOpen as r, ChevronRight as i, Clock as a, Droplets as o, Filter as s, Globe as c, Leaf as l, Play as u, Search as d, Star as f, Users as p, Zap as m } from "lucide-react";
4
+ import { Badge as h, Button as g, Card as _, CardContent as v, Input as y } from "@burdenoff/fe-libs/ui";
5
+ import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
6
+ //#region src/ecoimpacthub/pages/LearningPage.tsx
7
+ function C() {
8
+ let { courses: C } = e(), [w, T] = t(""), [E, D] = t("all"), [O, k] = t("all"), A = [
9
+ {
10
+ value: "all",
11
+ label: "All Categories",
12
+ icon: c
13
+ },
14
+ {
15
+ value: "climate",
16
+ label: "Climate Change",
17
+ icon: c
18
+ },
19
+ {
20
+ value: "biodiversity",
21
+ label: "Biodiversity",
22
+ icon: l
23
+ },
24
+ {
25
+ value: "sustainability",
26
+ label: "Sustainability",
27
+ icon: l
28
+ },
29
+ {
30
+ value: "renewable-energy",
31
+ label: "Renewable Energy",
32
+ icon: m
33
+ },
34
+ {
35
+ value: "conservation",
36
+ label: "Conservation",
37
+ icon: o
38
+ }
39
+ ], j = [
40
+ "all",
41
+ "beginner",
42
+ "intermediate",
43
+ "advanced"
44
+ ], M = C.filter((e) => (E === "all" || e.category === E) && (O === "all" || e.level === O) && (w === "" || e.title.toLowerCase().includes(w.toLowerCase()) || e.description.toLowerCase().includes(w.toLowerCase()) || e.tags.some((e) => e.toLowerCase().includes(w.toLowerCase())))), N = (e) => {
45
+ switch (e) {
46
+ case "beginner": return "bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300";
47
+ case "intermediate": return "bg-amber-100 text-amber-800 dark:bg-amber-900/30 dark:text-amber-300";
48
+ case "advanced": return "bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300";
49
+ default: return "bg-muted text-muted-foreground";
50
+ }
51
+ }, P = (e) => {
52
+ switch (e) {
53
+ case "course": return "bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300";
54
+ case "workshop": return "bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300";
55
+ case "webinar": return "bg-amber-100 text-amber-800 dark:bg-amber-900/30 dark:text-amber-300";
56
+ case "certification": return "bg-emerald-100 text-emerald-800 dark:bg-emerald-900/30 dark:text-emerald-300";
57
+ default: return "bg-muted text-muted-foreground";
58
+ }
59
+ };
60
+ return /* @__PURE__ */ x("div", {
61
+ className: "min-h-screen p-4",
62
+ children: /* @__PURE__ */ S("div", {
63
+ className: "mx-auto max-w-7xl space-y-8",
64
+ children: [
65
+ /* @__PURE__ */ S("div", {
66
+ className: "space-y-4 text-center",
67
+ children: [/* @__PURE__ */ x("h1", {
68
+ className: "text-4xl font-bold",
69
+ children: "Learning Hub"
70
+ }), /* @__PURE__ */ x("p", {
71
+ className: "mx-auto max-w-3xl text-xl text-muted-foreground",
72
+ children: "Expand your environmental knowledge with expert-led courses, workshops, and certifications. Learn from leading scientists, activists, and practitioners worldwide."
73
+ })]
74
+ }),
75
+ /* @__PURE__ */ x("div", {
76
+ className: "grid grid-cols-1 gap-6 md:grid-cols-4",
77
+ children: [
78
+ {
79
+ label: "Courses Completed",
80
+ value: "12",
81
+ sub: "+3 this month",
82
+ icon: r,
83
+ color: "text-primary"
84
+ },
85
+ {
86
+ label: "Learning Hours",
87
+ value: "45",
88
+ sub: "hours total",
89
+ icon: a,
90
+ color: "text-green-600"
91
+ },
92
+ {
93
+ label: "Certificates",
94
+ value: "3",
95
+ sub: "earned",
96
+ icon: n,
97
+ color: "text-blue-600"
98
+ },
99
+ {
100
+ label: "Skill Level",
101
+ value: "Intermediate",
102
+ sub: "environmental knowledge",
103
+ icon: f,
104
+ color: "text-purple-600"
105
+ }
106
+ ].map((e) => {
107
+ let t = e.icon;
108
+ return /* @__PURE__ */ x(_, { children: /* @__PURE__ */ S(v, {
109
+ className: "space-y-2 p-6",
110
+ children: [
111
+ /* @__PURE__ */ S("div", {
112
+ className: `flex items-center gap-2 ${e.color}`,
113
+ children: [/* @__PURE__ */ x(t, { className: "h-5 w-5" }), /* @__PURE__ */ x("span", {
114
+ className: "font-semibold",
115
+ children: e.label
116
+ })]
117
+ }),
118
+ /* @__PURE__ */ x("div", {
119
+ className: "text-3xl font-bold",
120
+ children: e.value
121
+ }),
122
+ /* @__PURE__ */ x("div", {
123
+ className: "text-sm text-muted-foreground",
124
+ children: e.sub
125
+ })
126
+ ]
127
+ }) }, e.label);
128
+ })
129
+ }),
130
+ /* @__PURE__ */ S("div", {
131
+ className: "space-y-4",
132
+ children: [/* @__PURE__ */ S("div", {
133
+ className: "flex flex-col gap-4 sm:flex-row",
134
+ children: [/* @__PURE__ */ S("div", {
135
+ className: "relative flex-1",
136
+ children: [/* @__PURE__ */ x(d, { className: "absolute left-3 top-3 h-4 w-4 text-muted-foreground" }), /* @__PURE__ */ x(y, {
137
+ placeholder: "Search courses, workshops, and certifications...",
138
+ value: w,
139
+ onChange: (e) => T(e.target.value),
140
+ className: "pl-10"
141
+ })]
142
+ }), /* @__PURE__ */ S(g, {
143
+ variant: "outline",
144
+ children: [/* @__PURE__ */ x(s, { className: "mr-2 h-4 w-4" }), "Filters"]
145
+ })]
146
+ }), /* @__PURE__ */ S("div", {
147
+ className: "flex flex-col gap-4 lg:flex-row",
148
+ children: [/* @__PURE__ */ x("div", {
149
+ className: "flex flex-wrap gap-2",
150
+ children: A.map(({ value: e, label: t, icon: n }) => /* @__PURE__ */ S(g, {
151
+ variant: E === e ? "default" : "outline",
152
+ size: "sm",
153
+ onClick: () => D(e),
154
+ className: "flex items-center gap-2",
155
+ children: [/* @__PURE__ */ x(n, { className: "h-4 w-4" }), t]
156
+ }, e))
157
+ }), /* @__PURE__ */ x("div", {
158
+ className: "flex gap-2",
159
+ children: j.map((e) => /* @__PURE__ */ x(g, {
160
+ variant: O === e ? "default" : "outline",
161
+ size: "sm",
162
+ onClick: () => k(e),
163
+ className: "capitalize",
164
+ children: e
165
+ }, e))
166
+ })]
167
+ })]
168
+ }),
169
+ /* @__PURE__ */ x("div", {
170
+ className: "grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3",
171
+ children: M.map((e) => /* @__PURE__ */ x(_, {
172
+ className: "overflow-hidden transition-shadow hover:shadow-lg",
173
+ children: /* @__PURE__ */ S(v, {
174
+ className: "space-y-4 p-6",
175
+ children: [
176
+ /* @__PURE__ */ S("div", {
177
+ className: "space-y-3",
178
+ children: [/* @__PURE__ */ S("div", {
179
+ className: "flex items-start justify-between",
180
+ children: [/* @__PURE__ */ x("div", {
181
+ className: "text-4xl",
182
+ children: e.thumbnail
183
+ }), /* @__PURE__ */ S("div", {
184
+ className: "flex flex-col gap-2",
185
+ children: [/* @__PURE__ */ x(h, {
186
+ className: N(e.level),
187
+ children: e.level
188
+ }), /* @__PURE__ */ x(h, {
189
+ className: P(e.type),
190
+ children: e.type
191
+ })]
192
+ })]
193
+ }), /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("h3", {
194
+ className: "line-clamp-2 text-lg font-semibold",
195
+ children: e.title
196
+ }), /* @__PURE__ */ S("p", {
197
+ className: "text-sm text-muted-foreground",
198
+ children: ["by ", e.instructor]
199
+ })] })]
200
+ }),
201
+ /* @__PURE__ */ x("p", {
202
+ className: "line-clamp-3 text-sm text-muted-foreground",
203
+ children: e.description
204
+ }),
205
+ e.progress !== void 0 && /* @__PURE__ */ S("div", {
206
+ className: "space-y-2",
207
+ children: [/* @__PURE__ */ S("div", {
208
+ className: "flex justify-between text-sm",
209
+ children: [/* @__PURE__ */ x("span", { children: "Progress" }), /* @__PURE__ */ S("span", { children: [e.progress, "% Complete"] })]
210
+ }), /* @__PURE__ */ x("div", {
211
+ className: "h-2 w-full rounded-full bg-muted",
212
+ children: /* @__PURE__ */ x("div", {
213
+ className: "h-2 rounded-full bg-primary transition-all",
214
+ style: { width: `${e.progress}%` }
215
+ })
216
+ })]
217
+ }),
218
+ /* @__PURE__ */ S("div", {
219
+ className: "flex items-center justify-between text-sm text-muted-foreground",
220
+ children: [/* @__PURE__ */ S("div", {
221
+ className: "flex items-center gap-4",
222
+ children: [/* @__PURE__ */ S("div", {
223
+ className: "flex items-center gap-1",
224
+ children: [/* @__PURE__ */ x(a, { className: "h-4 w-4" }), /* @__PURE__ */ S("span", { children: [
225
+ Math.floor(e.duration / 60),
226
+ "h ",
227
+ e.duration % 60,
228
+ "m"
229
+ ] })]
230
+ }), /* @__PURE__ */ S("div", {
231
+ className: "flex items-center gap-1",
232
+ children: [/* @__PURE__ */ x(p, { className: "h-4 w-4" }), /* @__PURE__ */ x("span", { children: e.enrolled.toLocaleString() })]
233
+ })]
234
+ }), /* @__PURE__ */ S("div", {
235
+ className: "flex items-center gap-1",
236
+ children: [/* @__PURE__ */ x(f, { className: "h-4 w-4 fill-current text-amber-500" }), /* @__PURE__ */ x("span", { children: e.rating })]
237
+ })]
238
+ }),
239
+ /* @__PURE__ */ x("div", {
240
+ className: "flex flex-wrap gap-1",
241
+ children: e.tags.slice(0, 3).map((e) => /* @__PURE__ */ x("span", {
242
+ className: "rounded bg-muted px-2 py-1 text-xs text-muted-foreground",
243
+ children: e
244
+ }, e))
245
+ }),
246
+ /* @__PURE__ */ x(g, {
247
+ className: "w-full",
248
+ variant: e.progress === void 0 ? "default" : "outline",
249
+ children: e.progress === void 0 ? /* @__PURE__ */ S(b, { children: [/* @__PURE__ */ x(u, { className: "mr-2 h-4 w-4" }), "Start Course"] }) : /* @__PURE__ */ S(b, { children: ["Continue Learning", /* @__PURE__ */ x(i, { className: "ml-2 h-4 w-4" })] })
250
+ })
251
+ ]
252
+ })
253
+ }, e.id))
254
+ }),
255
+ M.length === 0 && /* @__PURE__ */ S("div", {
256
+ className: "py-12 text-center",
257
+ children: [
258
+ /* @__PURE__ */ x(r, { className: "mx-auto mb-4 h-16 w-16 text-muted-foreground" }),
259
+ /* @__PURE__ */ x("h3", {
260
+ className: "mb-2 text-xl font-semibold",
261
+ children: "No courses found"
262
+ }),
263
+ /* @__PURE__ */ x("p", {
264
+ className: "text-muted-foreground",
265
+ children: "Try adjusting your search or filters to find the perfect learning content!"
266
+ })
267
+ ]
268
+ })
269
+ ]
270
+ })
271
+ });
272
+ }
273
+ //#endregion
274
+ export { C as LearningPage };
275
+
276
+ //# sourceMappingURL=LearningPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LearningPage.js","names":[],"sources":["../../../src/ecoimpacthub/pages/LearningPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { Badge, Button, Card, CardContent, Input } from '@burdenoff/fe-libs/ui';\nimport {\n BookOpen,\n Play,\n Clock,\n Users,\n Award,\n Star,\n ChevronRight,\n Search,\n Filter,\n Globe,\n Leaf,\n Droplets,\n Zap,\n} from 'lucide-react';\nimport { useEcoImpactHubStore } from '../store/ecoimpacthubStore';\n\ntype CourseCategory =\n | 'all'\n | 'climate'\n | 'biodiversity'\n | 'sustainability'\n | 'renewable-energy'\n | 'conservation';\ntype CourseLevel = 'all' | 'beginner' | 'intermediate' | 'advanced';\n\nexport function LearningPage() {\n const { courses } = useEcoImpactHubStore();\n const [searchTerm, setSearchTerm] = useState('');\n const [selectedCategory, setSelectedCategory] = useState<CourseCategory>('all');\n const [selectedLevel, setSelectedLevel] = useState<CourseLevel>('all');\n\n const categories: { value: CourseCategory; label: string; icon: typeof Globe }[] = [\n { value: 'all', label: 'All Categories', icon: Globe },\n { value: 'climate', label: 'Climate Change', icon: Globe },\n { value: 'biodiversity', label: 'Biodiversity', icon: Leaf },\n { value: 'sustainability', label: 'Sustainability', icon: Leaf },\n { value: 'renewable-energy', label: 'Renewable Energy', icon: Zap },\n { value: 'conservation', label: 'Conservation', icon: Droplets },\n ];\n\n const levels: CourseLevel[] = ['all', 'beginner', 'intermediate', 'advanced'];\n\n const filteredCourses = courses.filter(\n (course) =>\n (selectedCategory === 'all' || course.category === selectedCategory) &&\n (selectedLevel === 'all' || course.level === selectedLevel) &&\n (searchTerm === '' ||\n course.title.toLowerCase().includes(searchTerm.toLowerCase()) ||\n course.description.toLowerCase().includes(searchTerm.toLowerCase()) ||\n course.tags.some((tag) => tag.toLowerCase().includes(searchTerm.toLowerCase())))\n );\n\n const getLevelColor = (level: string) => {\n switch (level) {\n case 'beginner':\n return 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300';\n case 'intermediate':\n return 'bg-amber-100 text-amber-800 dark:bg-amber-900/30 dark:text-amber-300';\n case 'advanced':\n return 'bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300';\n default:\n return 'bg-muted text-muted-foreground';\n }\n };\n\n const getTypeColor = (type: string) => {\n switch (type) {\n case 'course':\n return 'bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300';\n case 'workshop':\n return 'bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300';\n case 'webinar':\n return 'bg-amber-100 text-amber-800 dark:bg-amber-900/30 dark:text-amber-300';\n case 'certification':\n return 'bg-emerald-100 text-emerald-800 dark:bg-emerald-900/30 dark:text-emerald-300';\n default:\n return 'bg-muted text-muted-foreground';\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 {/* Header */}\n <div className=\"space-y-4 text-center\">\n <h1 className=\"text-4xl font-bold\">Learning Hub</h1>\n <p className=\"mx-auto max-w-3xl text-xl text-muted-foreground\">\n Expand your environmental knowledge with expert-led courses, workshops, and\n certifications. Learn from leading scientists, activists, and practitioners worldwide.\n </p>\n </div>\n\n {/* Learning Stats */}\n <div className=\"grid grid-cols-1 gap-6 md:grid-cols-4\">\n {[\n {\n label: 'Courses Completed',\n value: '12',\n sub: '+3 this month',\n icon: BookOpen,\n color: 'text-primary',\n },\n {\n label: 'Learning Hours',\n value: '45',\n sub: 'hours total',\n icon: Clock,\n color: 'text-green-600',\n },\n {\n label: 'Certificates',\n value: '3',\n sub: 'earned',\n icon: Award,\n color: 'text-blue-600',\n },\n {\n label: 'Skill Level',\n value: 'Intermediate',\n sub: 'environmental knowledge',\n icon: Star,\n color: 'text-purple-600',\n },\n ].map((stat) => {\n const Icon = stat.icon;\n return (\n <Card key={stat.label}>\n <CardContent className=\"space-y-2 p-6\">\n <div className={`flex items-center gap-2 ${stat.color}`}>\n <Icon className=\"h-5 w-5\" />\n <span className=\"font-semibold\">{stat.label}</span>\n </div>\n <div className=\"text-3xl font-bold\">{stat.value}</div>\n <div className=\"text-sm text-muted-foreground\">{stat.sub}</div>\n </CardContent>\n </Card>\n );\n })}\n </div>\n\n {/* Search and Filters */}\n <div className=\"space-y-4\">\n <div className=\"flex flex-col gap-4 sm:flex-row\">\n <div className=\"relative flex-1\">\n <Search className=\"absolute left-3 top-3 h-4 w-4 text-muted-foreground\" />\n <Input\n placeholder=\"Search courses, workshops, and certifications...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n className=\"pl-10\"\n />\n </div>\n <Button variant=\"outline\">\n <Filter className=\"mr-2 h-4 w-4\" />\n Filters\n </Button>\n </div>\n\n <div className=\"flex flex-col gap-4 lg:flex-row\">\n <div className=\"flex flex-wrap gap-2\">\n {categories.map(({ value, label, icon: Icon }) => (\n <Button\n key={value}\n variant={selectedCategory === value ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => setSelectedCategory(value)}\n className=\"flex items-center gap-2\"\n >\n <Icon className=\"h-4 w-4\" />\n {label}\n </Button>\n ))}\n </div>\n\n <div className=\"flex gap-2\">\n {levels.map((level) => (\n <Button\n key={level}\n variant={selectedLevel === level ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => setSelectedLevel(level)}\n className=\"capitalize\"\n >\n {level}\n </Button>\n ))}\n </div>\n </div>\n </div>\n\n {/* Courses Grid */}\n <div className=\"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3\">\n {filteredCourses.map((course) => (\n <Card key={course.id} className=\"overflow-hidden transition-shadow hover:shadow-lg\">\n <CardContent className=\"space-y-4 p-6\">\n <div className=\"space-y-3\">\n <div className=\"flex items-start justify-between\">\n <div className=\"text-4xl\">{course.thumbnail}</div>\n <div className=\"flex flex-col gap-2\">\n <Badge className={getLevelColor(course.level)}>{course.level}</Badge>\n <Badge className={getTypeColor(course.type)}>{course.type}</Badge>\n </div>\n </div>\n <div>\n <h3 className=\"line-clamp-2 text-lg font-semibold\">{course.title}</h3>\n <p className=\"text-sm text-muted-foreground\">by {course.instructor}</p>\n </div>\n </div>\n\n <p className=\"line-clamp-3 text-sm text-muted-foreground\">{course.description}</p>\n\n {course.progress !== undefined && (\n <div className=\"space-y-2\">\n <div className=\"flex justify-between text-sm\">\n <span>Progress</span>\n <span>{course.progress}% Complete</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: `${course.progress}%` }}\n />\n </div>\n </div>\n )}\n\n <div className=\"flex items-center justify-between text-sm text-muted-foreground\">\n <div className=\"flex items-center gap-4\">\n <div className=\"flex items-center gap-1\">\n <Clock className=\"h-4 w-4\" />\n <span>\n {Math.floor(course.duration / 60)}h {course.duration % 60}m\n </span>\n </div>\n <div className=\"flex items-center gap-1\">\n <Users className=\"h-4 w-4\" />\n <span>{course.enrolled.toLocaleString()}</span>\n </div>\n </div>\n <div className=\"flex items-center gap-1\">\n <Star className=\"h-4 w-4 fill-current text-amber-500\" />\n <span>{course.rating}</span>\n </div>\n </div>\n\n <div className=\"flex flex-wrap gap-1\">\n {course.tags.slice(0, 3).map((tag) => (\n <span\n key={tag}\n className=\"rounded bg-muted px-2 py-1 text-xs text-muted-foreground\"\n >\n {tag}\n </span>\n ))}\n </div>\n\n <Button\n className=\"w-full\"\n variant={course.progress !== undefined ? 'outline' : 'default'}\n >\n {course.progress !== undefined ? (\n <>\n Continue Learning\n <ChevronRight className=\"ml-2 h-4 w-4\" />\n </>\n ) : (\n <>\n <Play className=\"mr-2 h-4 w-4\" />\n Start Course\n </>\n )}\n </Button>\n </CardContent>\n </Card>\n ))}\n </div>\n\n {filteredCourses.length === 0 && (\n <div className=\"py-12 text-center\">\n <BookOpen className=\"mx-auto mb-4 h-16 w-16 text-muted-foreground\" />\n <h3 className=\"mb-2 text-xl font-semibold\">No courses found</h3>\n <p className=\"text-muted-foreground\">\n Try adjusting your search or filters to find the perfect learning content!\n </p>\n </div>\n )}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { FC, PropsWithChildren } from 'react';
2
+ import { EcoImpactHubRootProps } from '../types';
3
+
4
+ export declare const useEcoImpactHub: () => EcoImpactHubRootProps;
5
+ export declare const EcoImpactHubProvider: FC<PropsWithChildren<EcoImpactHubRootProps>>;
6
+ //# sourceMappingURL=EcoImpactHubProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EcoImpactHubProvider.d.ts","sourceRoot":"","sources":["../../../src/ecoimpacthub/providers/EcoImpactHubProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAInD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAMtD,eAAO,MAAM,eAAe,6BAI3B,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,CAsB7E,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { createContext as e, useContext as t, useMemo as n } from "react";
2
+ import { MemoryRouter as r } from "react-router-dom";
3
+ import { QueryClient as i, QueryClientProvider as a } from "@tanstack/react-query";
4
+ import { jsx as o } from "react/jsx-runtime";
5
+ //#region src/ecoimpacthub/providers/EcoImpactHubProvider.tsx
6
+ var s = e(null), c = () => {
7
+ let e = t(s);
8
+ if (!e) throw Error("useEcoImpactHub must be used within EcoImpactHubProvider");
9
+ return e;
10
+ }, l = ({ children: e, ...t }) => {
11
+ let c = /* @__PURE__ */ o(a, {
12
+ client: n(() => new i({ defaultOptions: { queries: {
13
+ retry: 1,
14
+ refetchOnWindowFocus: !1,
15
+ staleTime: 300 * 1e3
16
+ } } }), []),
17
+ children: /* @__PURE__ */ o(s.Provider, {
18
+ value: t,
19
+ children: e
20
+ })
21
+ });
22
+ return t.basePath ? c : /* @__PURE__ */ o(r, { children: c });
23
+ };
24
+ //#endregion
25
+ export { l as EcoImpactHubProvider, c as useEcoImpactHub };
26
+
27
+ //# sourceMappingURL=EcoImpactHubProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EcoImpactHubProvider.js","names":[],"sources":["../../../src/ecoimpacthub/providers/EcoImpactHubProvider.tsx"],"sourcesContent":["import type { FC, PropsWithChildren } from 'react';\nimport { createContext, useContext, useMemo } from 'react';\nimport { MemoryRouter } from 'react-router-dom';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport type { EcoImpactHubRootProps } from '../types';\n\ntype EcoImpactHubContextValue = EcoImpactHubRootProps;\n\nconst EcoImpactHubContext = createContext<EcoImpactHubContextValue | null>(null);\n\nexport const useEcoImpactHub = () => {\n const context = useContext(EcoImpactHubContext);\n if (!context) throw new Error('useEcoImpactHub must be used within EcoImpactHubProvider');\n return context;\n};\n\nexport const EcoImpactHubProvider: FC<PropsWithChildren<EcoImpactHubRootProps>> = ({\n children,\n ...props\n}) => {\n const queryClient = useMemo(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: { retry: 1, refetchOnWindowFocus: false, staleTime: 5 * 60 * 1000 },\n },\n }),\n []\n );\n\n const content = (\n <QueryClientProvider client={queryClient}>\n <EcoImpactHubContext.Provider value={props}>{children}</EcoImpactHubContext.Provider>\n </QueryClientProvider>\n );\n\n if (props.basePath) return content;\n return <MemoryRouter>{content}</MemoryRouter>;\n};\n"],"mappings":";;;;;AAQA,IAAM,IAAsB,EAA+C,KAAK,EAEnE,UAAwB;CACnC,IAAM,IAAU,EAAW,EAAoB;AAC/C,KAAI,CAAC,EAAS,OAAU,MAAM,2DAA2D;AACzF,QAAO;GAGI,KAAsE,EACjF,aACA,GAAG,QACC;CAWJ,IAAM,IACJ,kBAAC,GAAD;EAAqB,QAXH,QAEhB,IAAI,EAAY,EACd,gBAAgB,EACd,SAAS;GAAE,OAAO;GAAG,sBAAsB;GAAO,WAAW,MAAS;GAAM,EAC7E,EACF,CAAC,EACJ,EAAE,CACH;YAIG,kBAAC,EAAoB,UAArB;GAA8B,OAAO;GAAQ;GAAwC,CAAA;EACjE,CAAA;AAIxB,QADI,EAAM,WAAiB,IACpB,kBAAC,GAAD,EAAA,UAAe,GAAuB,CAAA"}
@@ -0,0 +1,135 @@
1
+ import { OverviewMetric, WorkItem } from '../types';
2
+
3
+ export interface CarbonEntry {
4
+ id: string;
5
+ category: 'transportation' | 'energy' | 'waste' | 'water' | 'consumption';
6
+ value: number;
7
+ label: string;
8
+ color: string;
9
+ }
10
+ export interface EcoChallenge {
11
+ id: string;
12
+ title: string;
13
+ description: string;
14
+ category: 'individual' | 'community' | 'global';
15
+ difficulty: 'easy' | 'medium' | 'hard';
16
+ points: number;
17
+ participants: number;
18
+ endDate: string;
19
+ progress?: number;
20
+ status: 'active' | 'completed' | 'upcoming';
21
+ icon: string;
22
+ }
23
+ export interface CitizenScienceProject {
24
+ id: string;
25
+ title: string;
26
+ description: string;
27
+ category: 'biodiversity' | 'pollution' | 'climate' | 'conservation' | 'water-quality';
28
+ difficulty: 'beginner' | 'intermediate' | 'advanced';
29
+ contributors: number;
30
+ observations: number;
31
+ status: 'active' | 'completed' | 'upcoming';
32
+ icon: string;
33
+ location: string;
34
+ endDate: string;
35
+ requiredSkills: string[];
36
+ }
37
+ export interface Observation {
38
+ id: string;
39
+ title: string;
40
+ category: 'plant' | 'animal' | 'pollution' | 'weather' | 'water';
41
+ location: string;
42
+ date: string;
43
+ status: 'pending' | 'verified' | 'needs-review';
44
+ contributor: string;
45
+ image: string;
46
+ description: string;
47
+ confidence: number;
48
+ }
49
+ export interface CommunityPost {
50
+ id: string;
51
+ author: {
52
+ name: string;
53
+ avatar: string;
54
+ location: string;
55
+ level: string;
56
+ };
57
+ content: string;
58
+ timestamp: string;
59
+ likes: number;
60
+ comments: number;
61
+ shares: number;
62
+ tags: string[];
63
+ category: 'update' | 'question' | 'achievement' | 'event' | 'tip';
64
+ }
65
+ export interface CommunityGroup {
66
+ id: string;
67
+ name: string;
68
+ description: string;
69
+ members: number;
70
+ category: string;
71
+ avatar: string;
72
+ isJoined: boolean;
73
+ activity: 'high' | 'medium' | 'low';
74
+ }
75
+ export interface EcoAction {
76
+ id: string;
77
+ title: string;
78
+ description: string;
79
+ category: 'energy' | 'transportation' | 'waste' | 'water' | 'consumption' | 'advocacy';
80
+ impact: 'low' | 'medium' | 'high';
81
+ carbonSaved: number;
82
+ status: 'planned' | 'in-progress' | 'completed' | 'paused';
83
+ startDate: string;
84
+ targetDate?: string;
85
+ completedDate?: string;
86
+ frequency: 'once' | 'daily' | 'weekly' | 'monthly';
87
+ streak?: number;
88
+ points: number;
89
+ }
90
+ export interface EcoGoal {
91
+ id: string;
92
+ title: string;
93
+ description: string;
94
+ targetValue: number;
95
+ currentValue: number;
96
+ unit: string;
97
+ category: string;
98
+ deadline: string;
99
+ status: 'active' | 'completed' | 'overdue';
100
+ }
101
+ export interface LearningCourse {
102
+ id: string;
103
+ title: string;
104
+ description: string;
105
+ category: 'climate' | 'biodiversity' | 'sustainability' | 'renewable-energy' | 'conservation';
106
+ level: 'beginner' | 'intermediate' | 'advanced';
107
+ duration: number;
108
+ enrolled: number;
109
+ rating: number;
110
+ progress?: number;
111
+ instructor: string;
112
+ thumbnail: string;
113
+ type: 'course' | 'workshop' | 'webinar' | 'certification';
114
+ tags: string[];
115
+ }
116
+ interface EcoImpactHubState {
117
+ metrics: OverviewMetric[];
118
+ workItems: WorkItem[];
119
+ selectedView: string;
120
+ carbonBreakdown: CarbonEntry[];
121
+ totalCarbonSaved: number;
122
+ challenges: EcoChallenge[];
123
+ scienceProjects: CitizenScienceProject[];
124
+ observations: Observation[];
125
+ communityPosts: CommunityPost[];
126
+ communityGroups: CommunityGroup[];
127
+ actions: EcoAction[];
128
+ goals: EcoGoal[];
129
+ courses: LearningCourse[];
130
+ setSelectedView: (view: string) => void;
131
+ setWorkItems: (items: WorkItem[]) => void;
132
+ }
133
+ export declare const useEcoImpactHubStore: import('zustand').UseBoundStore<import('zustand').StoreApi<EcoImpactHubState>>;
134
+ export {};
135
+ //# sourceMappingURL=ecoimpacthubStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecoimpacthubStore.d.ts","sourceRoot":"","sources":["../../../src/ecoimpacthub/store/ecoimpacthubStore.ts"],"names":[],"mappings":"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"}