@burdenoff/microfe-theculturepost 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.
- package/README.md +12 -0
- package/dist/dev/main.d.ts +2 -0
- package/dist/dev/main.d.ts.map +1 -0
- package/dist/generated/global-operations.d.ts +2 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-types.d.ts +18199 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/wspace-operations.d.ts +2 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-types.d.ts +43046 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/theculturepost/TheCulturePostRoot.d.ts +5 -0
- package/dist/theculturepost/TheCulturePostRoot.d.ts.map +1 -0
- package/dist/theculturepost/TheCulturePostRoot.js +179 -0
- package/dist/theculturepost/TheCulturePostRoot.js.map +1 -0
- package/dist/theculturepost/TheCulturePostRoutes.d.ts +2 -0
- package/dist/theculturepost/TheCulturePostRoutes.d.ts.map +1 -0
- package/dist/theculturepost/TheCulturePostRoutes.js +87 -0
- package/dist/theculturepost/TheCulturePostRoutes.js.map +1 -0
- package/dist/theculturepost/index.d.ts +5 -0
- package/dist/theculturepost/index.d.ts.map +1 -0
- package/dist/theculturepost/index.js +3 -0
- package/dist/theculturepost/pages/AnalyticsPage.d.ts +2 -0
- package/dist/theculturepost/pages/AnalyticsPage.d.ts.map +1 -0
- package/dist/theculturepost/pages/AnalyticsPage.js +97 -0
- package/dist/theculturepost/pages/AnalyticsPage.js.map +1 -0
- package/dist/theculturepost/pages/CommunityPage.d.ts +2 -0
- package/dist/theculturepost/pages/CommunityPage.d.ts.map +1 -0
- package/dist/theculturepost/pages/CommunityPage.js +166 -0
- package/dist/theculturepost/pages/CommunityPage.js.map +1 -0
- package/dist/theculturepost/pages/ContributionsPage.d.ts +2 -0
- package/dist/theculturepost/pages/ContributionsPage.d.ts.map +1 -0
- package/dist/theculturepost/pages/ContributionsPage.js +129 -0
- package/dist/theculturepost/pages/ContributionsPage.js.map +1 -0
- package/dist/theculturepost/pages/CulturalRepositoryGraphqlPage.d.ts +2 -0
- package/dist/theculturepost/pages/CulturalRepositoryGraphqlPage.d.ts.map +1 -0
- package/dist/theculturepost/pages/CulturalRepositoryGraphqlPage.js +149 -0
- package/dist/theculturepost/pages/CulturalRepositoryGraphqlPage.js.map +1 -0
- package/dist/theculturepost/pages/CulturalRepositoryPage.d.ts +2 -0
- package/dist/theculturepost/pages/CulturalRepositoryPage.d.ts.map +1 -0
- package/dist/theculturepost/pages/CulturalRepositoryPage.js +214 -0
- package/dist/theculturepost/pages/CulturalRepositoryPage.js.map +1 -0
- package/dist/theculturepost/pages/DashboardPage.d.ts +2 -0
- package/dist/theculturepost/pages/DashboardPage.d.ts.map +1 -0
- package/dist/theculturepost/pages/DashboardPage.js +192 -0
- package/dist/theculturepost/pages/DashboardPage.js.map +1 -0
- package/dist/theculturepost/pages/DiscoveryPage.d.ts +2 -0
- package/dist/theculturepost/pages/DiscoveryPage.d.ts.map +1 -0
- package/dist/theculturepost/pages/DiscoveryPage.js +93 -0
- package/dist/theculturepost/pages/DiscoveryPage.js.map +1 -0
- package/dist/theculturepost/pages/DiscussionsPage.d.ts +2 -0
- package/dist/theculturepost/pages/DiscussionsPage.d.ts.map +1 -0
- package/dist/theculturepost/pages/DiscussionsPage.js +113 -0
- package/dist/theculturepost/pages/DiscussionsPage.js.map +1 -0
- package/dist/theculturepost/pages/EventsPage.d.ts +2 -0
- package/dist/theculturepost/pages/EventsPage.d.ts.map +1 -0
- package/dist/theculturepost/pages/EventsPage.js +90 -0
- package/dist/theculturepost/pages/EventsPage.js.map +1 -0
- package/dist/theculturepost/pages/HeritagePage.d.ts +2 -0
- package/dist/theculturepost/pages/HeritagePage.d.ts.map +1 -0
- package/dist/theculturepost/pages/HeritagePage.js +167 -0
- package/dist/theculturepost/pages/HeritagePage.js.map +1 -0
- package/dist/theculturepost/pages/LearningPage.d.ts +2 -0
- package/dist/theculturepost/pages/LearningPage.d.ts.map +1 -0
- package/dist/theculturepost/pages/LearningPage.js +191 -0
- package/dist/theculturepost/pages/LearningPage.js.map +1 -0
- package/dist/theculturepost/pages/MapPage.d.ts +2 -0
- package/dist/theculturepost/pages/MapPage.d.ts.map +1 -0
- package/dist/theculturepost/pages/MapPage.js +99 -0
- package/dist/theculturepost/pages/MapPage.js.map +1 -0
- package/dist/theculturepost/pages/MarketplacePage.d.ts +2 -0
- package/dist/theculturepost/pages/MarketplacePage.d.ts.map +1 -0
- package/dist/theculturepost/pages/MarketplacePage.js +102 -0
- package/dist/theculturepost/pages/MarketplacePage.js.map +1 -0
- package/dist/theculturepost/pages/ResourcesPage.d.ts +2 -0
- package/dist/theculturepost/pages/ResourcesPage.d.ts.map +1 -0
- package/dist/theculturepost/pages/ResourcesPage.js +90 -0
- package/dist/theculturepost/pages/ResourcesPage.js.map +1 -0
- package/dist/theculturepost/providers/TheCulturePostProvider.d.ts +6 -0
- package/dist/theculturepost/providers/TheCulturePostProvider.d.ts.map +1 -0
- package/dist/theculturepost/providers/TheCulturePostProvider.js +27 -0
- package/dist/theculturepost/providers/TheCulturePostProvider.js.map +1 -0
- package/dist/theculturepost/store/theculturepostStore.d.ts +159 -0
- package/dist/theculturepost/store/theculturepostStore.d.ts.map +1 -0
- package/dist/theculturepost/store/theculturepostStore.js +607 -0
- package/dist/theculturepost/store/theculturepostStore.js.map +1 -0
- package/dist/theculturepost/types/index.d.ts +51 -0
- package/dist/theculturepost/types/index.d.ts.map +1 -0
- package/dist/theculturepost/utils/cn.d.ts +4 -0
- package/dist/theculturepost/utils/cn.d.ts.map +1 -0
- package/dist/theculturepost/utils/i18n.d.ts +6 -0
- package/dist/theculturepost/utils/i18n.d.ts.map +1 -0
- package/dist/theculturepost/utils/i18n.js +15 -0
- package/dist/theculturepost/utils/i18n.js.map +1 -0
- package/dist/theculturepost/utils/navigation.d.ts +2 -0
- package/dist/theculturepost/utils/navigation.d.ts.map +1 -0
- package/dist/theculturepost/utils/navigation.js +8 -0
- package/dist/theculturepost/utils/navigation.js.map +1 -0
- package/package.json +107 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { useTheCulturePostStore as e } from "../store/theculturepostStore.js";
|
|
2
|
+
import { tWithFallback as t } from "../utils/i18n.js";
|
|
3
|
+
import { useI18n as n } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
4
|
+
import { Calendar as r, MessageCircle as i, Star as a, Users as o } from "lucide-react";
|
|
5
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
6
|
+
import { Badge as l, Button as u, Card as d, CardContent as f, CardHeader as p, CardTitle as m } from "@burdenoff/fe-libs/ui";
|
|
7
|
+
//#region src/theculturepost/pages/CommunityPage.tsx
|
|
8
|
+
function h() {
|
|
9
|
+
let { t: h } = n(), g = (e, n, r) => t(h, e, n, r), { communities: _, selectedCommunityId: v, setSelectedCommunityId: y, toggleCommunityJoin: b } = e(), x = _.find((e) => e.id === v), S = (e) => g(`theculturepost.community.types.${e.toLowerCase().replace(/&/g, "and").replace(/[^a-z0-9]+/g, " ").trim().split(/\s+/).join("")}`, e);
|
|
10
|
+
return x ? /* @__PURE__ */ c("div", {
|
|
11
|
+
className: "space-y-6 p-6",
|
|
12
|
+
children: [/* @__PURE__ */ s(u, {
|
|
13
|
+
variant: "outline",
|
|
14
|
+
size: "sm",
|
|
15
|
+
onClick: () => y(null),
|
|
16
|
+
children: g("theculturepost.community.detail.back", "Back to Communities")
|
|
17
|
+
}), /* @__PURE__ */ c(d, { children: [/* @__PURE__ */ s(p, { children: /* @__PURE__ */ c("div", {
|
|
18
|
+
className: "flex items-center gap-4",
|
|
19
|
+
children: [
|
|
20
|
+
/* @__PURE__ */ s("div", {
|
|
21
|
+
className: "w-16 h-16 rounded-full bg-primary/10 flex items-center justify-center text-lg font-bold",
|
|
22
|
+
children: x.name.charAt(0)
|
|
23
|
+
}),
|
|
24
|
+
/* @__PURE__ */ c("div", {
|
|
25
|
+
className: "flex-1",
|
|
26
|
+
children: [
|
|
27
|
+
/* @__PURE__ */ s(m, {
|
|
28
|
+
className: "text-2xl",
|
|
29
|
+
children: x.name
|
|
30
|
+
}),
|
|
31
|
+
/* @__PURE__ */ s("p", {
|
|
32
|
+
className: "text-sm text-muted-foreground mt-1",
|
|
33
|
+
children: x.description
|
|
34
|
+
}),
|
|
35
|
+
/* @__PURE__ */ c("div", {
|
|
36
|
+
className: "flex items-center gap-4 mt-2",
|
|
37
|
+
children: [/* @__PURE__ */ c("span", {
|
|
38
|
+
className: "text-sm text-muted-foreground flex items-center gap-1",
|
|
39
|
+
children: [
|
|
40
|
+
/* @__PURE__ */ s(o, { className: "w-4 h-4" }),
|
|
41
|
+
" ",
|
|
42
|
+
g("theculturepost.community.detail.memberCount", "{{count}} members", { count: x.memberCount.toLocaleString() })
|
|
43
|
+
]
|
|
44
|
+
}), /* @__PURE__ */ s(l, {
|
|
45
|
+
variant: "secondary",
|
|
46
|
+
children: S(x.type)
|
|
47
|
+
})]
|
|
48
|
+
})
|
|
49
|
+
]
|
|
50
|
+
}),
|
|
51
|
+
/* @__PURE__ */ s(u, {
|
|
52
|
+
variant: x.isJoined ? "outline" : "default",
|
|
53
|
+
onClick: () => b(x.id),
|
|
54
|
+
children: x.isJoined ? g("theculturepost.community.actions.joined", "Joined") : g("theculturepost.community.actions.joinCommunity", "Join Community")
|
|
55
|
+
})
|
|
56
|
+
]
|
|
57
|
+
}) }), /* @__PURE__ */ s(f, { children: /* @__PURE__ */ c("div", {
|
|
58
|
+
className: "grid grid-cols-1 md:grid-cols-3 gap-4",
|
|
59
|
+
children: [
|
|
60
|
+
/* @__PURE__ */ c(d, { children: [/* @__PURE__ */ s(p, {
|
|
61
|
+
className: "pb-3",
|
|
62
|
+
children: /* @__PURE__ */ c(m, {
|
|
63
|
+
className: "text-base flex items-center gap-2",
|
|
64
|
+
children: [
|
|
65
|
+
/* @__PURE__ */ s(i, { className: "w-5 h-5" }),
|
|
66
|
+
" ",
|
|
67
|
+
g("theculturepost.community.detail.cards.discussions.title", "Discussions")
|
|
68
|
+
]
|
|
69
|
+
})
|
|
70
|
+
}), /* @__PURE__ */ s(f, { children: /* @__PURE__ */ s("p", {
|
|
71
|
+
className: "text-sm text-muted-foreground",
|
|
72
|
+
children: g("theculturepost.community.detail.cards.discussions.description", "Join ongoing conversations about cultural preservation.")
|
|
73
|
+
}) })] }),
|
|
74
|
+
/* @__PURE__ */ c(d, { children: [/* @__PURE__ */ s(p, {
|
|
75
|
+
className: "pb-3",
|
|
76
|
+
children: /* @__PURE__ */ c(m, {
|
|
77
|
+
className: "text-base flex items-center gap-2",
|
|
78
|
+
children: [
|
|
79
|
+
/* @__PURE__ */ s(r, { className: "w-5 h-5" }),
|
|
80
|
+
" ",
|
|
81
|
+
g("theculturepost.community.detail.cards.events.title", "Events")
|
|
82
|
+
]
|
|
83
|
+
})
|
|
84
|
+
}), /* @__PURE__ */ s(f, { children: /* @__PURE__ */ s("p", {
|
|
85
|
+
className: "text-sm text-muted-foreground",
|
|
86
|
+
children: g("theculturepost.community.detail.cards.events.description", "Participate in community events and learning sessions.")
|
|
87
|
+
}) })] }),
|
|
88
|
+
/* @__PURE__ */ c(d, { children: [/* @__PURE__ */ s(p, {
|
|
89
|
+
className: "pb-3",
|
|
90
|
+
children: /* @__PURE__ */ c(m, {
|
|
91
|
+
className: "text-base flex items-center gap-2",
|
|
92
|
+
children: [
|
|
93
|
+
/* @__PURE__ */ s(a, { className: "w-5 h-5" }),
|
|
94
|
+
" ",
|
|
95
|
+
g("theculturepost.community.detail.cards.knowledge.title", "Knowledge")
|
|
96
|
+
]
|
|
97
|
+
})
|
|
98
|
+
}), /* @__PURE__ */ s(f, { children: /* @__PURE__ */ s("p", {
|
|
99
|
+
className: "text-sm text-muted-foreground",
|
|
100
|
+
children: g("theculturepost.community.detail.cards.knowledge.description", "Access community-shared knowledge, stories, and teachings.")
|
|
101
|
+
}) })] })
|
|
102
|
+
]
|
|
103
|
+
}) })] })]
|
|
104
|
+
}) : /* @__PURE__ */ c("div", {
|
|
105
|
+
className: "space-y-6 p-6",
|
|
106
|
+
children: [/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("h1", {
|
|
107
|
+
className: "text-2xl font-semibold",
|
|
108
|
+
children: g("theculturepost.community.title", "Cultural Communities")
|
|
109
|
+
}), /* @__PURE__ */ s("p", {
|
|
110
|
+
className: "text-sm text-muted-foreground mt-1",
|
|
111
|
+
children: g("theculturepost.community.subtitle", "Connect with cultural communities, share knowledge, and participate in respectful dialogue")
|
|
112
|
+
})] }), /* @__PURE__ */ s("div", {
|
|
113
|
+
className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",
|
|
114
|
+
children: _.map((e) => /* @__PURE__ */ c(d, {
|
|
115
|
+
className: "hover:shadow-md transition-shadow",
|
|
116
|
+
children: [/* @__PURE__ */ c(p, { children: [/* @__PURE__ */ c("div", {
|
|
117
|
+
className: "flex items-center gap-3",
|
|
118
|
+
children: [/* @__PURE__ */ s("div", {
|
|
119
|
+
className: "w-10 h-10 rounded-full bg-primary/10 flex items-center justify-center font-bold",
|
|
120
|
+
children: e.name.charAt(0)
|
|
121
|
+
}), /* @__PURE__ */ c("div", {
|
|
122
|
+
className: "flex-1 min-w-0",
|
|
123
|
+
children: [/* @__PURE__ */ s(m, {
|
|
124
|
+
className: "text-lg truncate",
|
|
125
|
+
children: e.name
|
|
126
|
+
}), /* @__PURE__ */ c("div", {
|
|
127
|
+
className: "flex items-center gap-2 mt-1",
|
|
128
|
+
children: [/* @__PURE__ */ s("span", {
|
|
129
|
+
className: "text-sm text-muted-foreground",
|
|
130
|
+
children: g("theculturepost.community.card.memberCount", "{{count}} members", { count: e.memberCount.toLocaleString() })
|
|
131
|
+
}), /* @__PURE__ */ s(l, {
|
|
132
|
+
variant: "secondary",
|
|
133
|
+
className: "text-xs",
|
|
134
|
+
children: S(e.type)
|
|
135
|
+
})]
|
|
136
|
+
})]
|
|
137
|
+
})]
|
|
138
|
+
}), /* @__PURE__ */ s("p", {
|
|
139
|
+
className: "text-sm text-muted-foreground line-clamp-2 mt-2",
|
|
140
|
+
children: e.description
|
|
141
|
+
})] }), /* @__PURE__ */ s(f, {
|
|
142
|
+
className: "pt-0",
|
|
143
|
+
children: /* @__PURE__ */ c("div", {
|
|
144
|
+
className: "flex gap-2",
|
|
145
|
+
children: [/* @__PURE__ */ s(u, {
|
|
146
|
+
size: "sm",
|
|
147
|
+
variant: e.isJoined ? "outline" : "default",
|
|
148
|
+
className: "flex-1",
|
|
149
|
+
onClick: () => b(e.id),
|
|
150
|
+
children: e.isJoined ? g("theculturepost.community.actions.joined", "Joined") : g("theculturepost.community.actions.join", "Join")
|
|
151
|
+
}), /* @__PURE__ */ s(u, {
|
|
152
|
+
size: "sm",
|
|
153
|
+
variant: "outline",
|
|
154
|
+
onClick: () => y(e.id),
|
|
155
|
+
children: g("theculturepost.community.actions.view", "View")
|
|
156
|
+
})]
|
|
157
|
+
})
|
|
158
|
+
})]
|
|
159
|
+
}, e.id))
|
|
160
|
+
})]
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
//#endregion
|
|
164
|
+
export { h as CommunityPage };
|
|
165
|
+
|
|
166
|
+
//# sourceMappingURL=CommunityPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommunityPage.js","names":[],"sources":["../../../src/theculturepost/pages/CommunityPage.tsx"],"sourcesContent":["import { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Card, CardContent, CardHeader, CardTitle, Badge, Button } from '@burdenoff/fe-libs/ui';\nimport { Users, MessageCircle, Calendar, Star } from 'lucide-react';\nimport { useTheCulturePostStore } from '../store/theculturepostStore';\nimport { tWithFallback } from '../utils/i18n';\n\nexport function CommunityPage() {\n const { t } = useI18n();\n const tr = (key: string, fallback: string, params?: Record<string, string | number>): string =>\n tWithFallback(t, key, fallback, params);\n const { communities, selectedCommunityId, setSelectedCommunityId, toggleCommunityJoin } =\n useTheCulturePostStore();\n const selectedCommunity = communities.find((c) => c.id === selectedCommunityId);\n const communityTypeLabel = (type: string): string => {\n const typeKey = type\n .toLowerCase()\n .replace(/&/g, 'and')\n .replace(/[^a-z0-9]+/g, ' ')\n .trim()\n .split(/\\s+/)\n .join('');\n\n return tr(`theculturepost.community.types.${typeKey}`, type);\n };\n\n if (selectedCommunity) {\n return (\n <div className=\"space-y-6 p-6\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => setSelectedCommunityId(null)}>\n {tr('theculturepost.community.detail.back', 'Back to Communities')}\n </Button>\n <Card>\n <CardHeader>\n <div className=\"flex items-center gap-4\">\n <div className=\"w-16 h-16 rounded-full bg-primary/10 flex items-center justify-center text-lg font-bold\">\n {selectedCommunity.name.charAt(0)}\n </div>\n <div className=\"flex-1\">\n <CardTitle className=\"text-2xl\">{selectedCommunity.name}</CardTitle>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {selectedCommunity.description}\n </p>\n <div className=\"flex items-center gap-4 mt-2\">\n <span className=\"text-sm text-muted-foreground flex items-center gap-1\">\n <Users className=\"w-4 h-4\" />{' '}\n {tr('theculturepost.community.detail.memberCount', '{{count}} members', {\n count: selectedCommunity.memberCount.toLocaleString(),\n })}\n </span>\n <Badge variant=\"secondary\">{communityTypeLabel(selectedCommunity.type)}</Badge>\n </div>\n </div>\n <Button\n variant={selectedCommunity.isJoined ? 'outline' : 'default'}\n onClick={() => toggleCommunityJoin(selectedCommunity.id)}\n >\n {selectedCommunity.isJoined\n ? tr('theculturepost.community.actions.joined', 'Joined')\n : tr('theculturepost.community.actions.joinCommunity', 'Join Community')}\n </Button>\n </div>\n </CardHeader>\n <CardContent>\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n <Card>\n <CardHeader className=\"pb-3\">\n <CardTitle className=\"text-base flex items-center gap-2\">\n <MessageCircle className=\"w-5 h-5\" />{' '}\n {tr('theculturepost.community.detail.cards.discussions.title', 'Discussions')}\n </CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'theculturepost.community.detail.cards.discussions.description',\n 'Join ongoing conversations about cultural preservation.'\n )}\n </p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-3\">\n <CardTitle className=\"text-base flex items-center gap-2\">\n <Calendar className=\"w-5 h-5\" />{' '}\n {tr('theculturepost.community.detail.cards.events.title', 'Events')}\n </CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'theculturepost.community.detail.cards.events.description',\n 'Participate in community events and learning sessions.'\n )}\n </p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-3\">\n <CardTitle className=\"text-base flex items-center gap-2\">\n <Star className=\"w-5 h-5\" />{' '}\n {tr('theculturepost.community.detail.cards.knowledge.title', 'Knowledge')}\n </CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm text-muted-foreground\">\n {tr(\n 'theculturepost.community.detail.cards.knowledge.description',\n 'Access community-shared knowledge, stories, and teachings.'\n )}\n </p>\n </CardContent>\n </Card>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <h1 className=\"text-2xl font-semibold\">\n {tr('theculturepost.community.title', 'Cultural Communities')}\n </h1>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {tr(\n 'theculturepost.community.subtitle',\n 'Connect with cultural communities, share knowledge, and participate in respectful dialogue'\n )}\n </p>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {communities.map((community) => (\n <Card key={community.id} className=\"hover:shadow-md transition-shadow\">\n <CardHeader>\n <div className=\"flex items-center gap-3\">\n <div className=\"w-10 h-10 rounded-full bg-primary/10 flex items-center justify-center font-bold\">\n {community.name.charAt(0)}\n </div>\n <div className=\"flex-1 min-w-0\">\n <CardTitle className=\"text-lg truncate\">{community.name}</CardTitle>\n <div className=\"flex items-center gap-2 mt-1\">\n <span className=\"text-sm text-muted-foreground\">\n {tr('theculturepost.community.card.memberCount', '{{count}} members', {\n count: community.memberCount.toLocaleString(),\n })}\n </span>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {communityTypeLabel(community.type)}\n </Badge>\n </div>\n </div>\n </div>\n <p className=\"text-sm text-muted-foreground line-clamp-2 mt-2\">\n {community.description}\n </p>\n </CardHeader>\n <CardContent className=\"pt-0\">\n <div className=\"flex gap-2\">\n <Button\n size=\"sm\"\n variant={community.isJoined ? 'outline' : 'default'}\n className=\"flex-1\"\n onClick={() => toggleCommunityJoin(community.id)}\n >\n {community.isJoined\n ? tr('theculturepost.community.actions.joined', 'Joined')\n : tr('theculturepost.community.actions.join', 'Join')}\n </Button>\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => setSelectedCommunityId(community.id)}\n >\n {tr('theculturepost.community.actions.view', 'View')}\n </Button>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContributionsPage.d.ts","sourceRoot":"","sources":["../../../src/theculturepost/pages/ContributionsPage.tsx"],"names":[],"mappings":"AAgBA,wBAAgB,iBAAiB,4CA0GhC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { useTheCulturePostStore as e } from "../store/theculturepostStore.js";
|
|
2
|
+
import { Check as t, Clock as n, Plus as r, Upload as i, XCircle as a } from "lucide-react";
|
|
3
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
4
|
+
import { Badge as c, Button as l, Card as u, CardContent as d, CardHeader as f, CardTitle as p } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
//#region src/theculturepost/pages/ContributionsPage.tsx
|
|
6
|
+
var m = {
|
|
7
|
+
approved: t,
|
|
8
|
+
pending: n,
|
|
9
|
+
rejected: a
|
|
10
|
+
}, h = {
|
|
11
|
+
approved: "text-green-600",
|
|
12
|
+
pending: "text-orange-600",
|
|
13
|
+
rejected: "text-red-600"
|
|
14
|
+
};
|
|
15
|
+
function g() {
|
|
16
|
+
let { contributions: t, contributionStats: a } = e();
|
|
17
|
+
return /* @__PURE__ */ s("div", {
|
|
18
|
+
className: "space-y-6 p-6",
|
|
19
|
+
children: [
|
|
20
|
+
/* @__PURE__ */ s("div", {
|
|
21
|
+
className: "flex items-center justify-between",
|
|
22
|
+
children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("h1", {
|
|
23
|
+
className: "text-2xl font-semibold",
|
|
24
|
+
children: "My Contributions"
|
|
25
|
+
}), /* @__PURE__ */ o("p", {
|
|
26
|
+
className: "text-sm text-muted-foreground mt-1",
|
|
27
|
+
children: "Track and manage your cultural content contributions"
|
|
28
|
+
})] }), /* @__PURE__ */ s(l, {
|
|
29
|
+
size: "sm",
|
|
30
|
+
children: [/* @__PURE__ */ o(r, { className: "h-4 w-4 mr-2" }), " New Contribution"]
|
|
31
|
+
})]
|
|
32
|
+
}),
|
|
33
|
+
/* @__PURE__ */ s("div", {
|
|
34
|
+
className: "grid gap-4 md:grid-cols-4",
|
|
35
|
+
children: [
|
|
36
|
+
/* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o(f, {
|
|
37
|
+
className: "pb-2",
|
|
38
|
+
children: /* @__PURE__ */ o(p, {
|
|
39
|
+
className: "text-sm font-medium",
|
|
40
|
+
children: "Total"
|
|
41
|
+
})
|
|
42
|
+
}), /* @__PURE__ */ o(d, { children: /* @__PURE__ */ o("p", {
|
|
43
|
+
className: "text-2xl font-bold",
|
|
44
|
+
children: a.total
|
|
45
|
+
}) })] }),
|
|
46
|
+
/* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o(f, {
|
|
47
|
+
className: "pb-2",
|
|
48
|
+
children: /* @__PURE__ */ o(p, {
|
|
49
|
+
className: "text-sm font-medium",
|
|
50
|
+
children: "Approved"
|
|
51
|
+
})
|
|
52
|
+
}), /* @__PURE__ */ o(d, { children: /* @__PURE__ */ o("p", {
|
|
53
|
+
className: "text-2xl font-bold text-green-600",
|
|
54
|
+
children: a.approved
|
|
55
|
+
}) })] }),
|
|
56
|
+
/* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o(f, {
|
|
57
|
+
className: "pb-2",
|
|
58
|
+
children: /* @__PURE__ */ o(p, {
|
|
59
|
+
className: "text-sm font-medium",
|
|
60
|
+
children: "Pending"
|
|
61
|
+
})
|
|
62
|
+
}), /* @__PURE__ */ o(d, { children: /* @__PURE__ */ o("p", {
|
|
63
|
+
className: "text-2xl font-bold text-orange-600",
|
|
64
|
+
children: a.pending
|
|
65
|
+
}) })] }),
|
|
66
|
+
/* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o(f, {
|
|
67
|
+
className: "pb-2",
|
|
68
|
+
children: /* @__PURE__ */ o(p, {
|
|
69
|
+
className: "text-sm font-medium",
|
|
70
|
+
children: "Rejected"
|
|
71
|
+
})
|
|
72
|
+
}), /* @__PURE__ */ o(d, { children: /* @__PURE__ */ o("p", {
|
|
73
|
+
className: "text-2xl font-bold text-red-600",
|
|
74
|
+
children: a.rejected
|
|
75
|
+
}) })] })
|
|
76
|
+
]
|
|
77
|
+
}),
|
|
78
|
+
/* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o(f, { children: /* @__PURE__ */ o(p, { children: "Recent Contributions" }) }), /* @__PURE__ */ o(d, { children: /* @__PURE__ */ o("div", {
|
|
79
|
+
className: "space-y-4",
|
|
80
|
+
children: t.map((e) => {
|
|
81
|
+
let t = m[e.status] ?? n;
|
|
82
|
+
return /* @__PURE__ */ s("div", {
|
|
83
|
+
className: "flex items-center justify-between p-4 rounded-lg border hover:bg-muted/50 transition-colors",
|
|
84
|
+
children: [/* @__PURE__ */ s("div", {
|
|
85
|
+
className: "flex items-center gap-4 flex-1",
|
|
86
|
+
children: [/* @__PURE__ */ o("div", {
|
|
87
|
+
className: "w-12 h-12 rounded-lg bg-primary/10 flex items-center justify-center",
|
|
88
|
+
children: /* @__PURE__ */ o(i, { className: "h-6 w-6 text-primary" })
|
|
89
|
+
}), /* @__PURE__ */ s("div", {
|
|
90
|
+
className: "flex-1",
|
|
91
|
+
children: [/* @__PURE__ */ o("h3", {
|
|
92
|
+
className: "font-medium",
|
|
93
|
+
children: e.title
|
|
94
|
+
}), /* @__PURE__ */ s("div", {
|
|
95
|
+
className: "flex items-center gap-2 mt-1 flex-wrap",
|
|
96
|
+
children: [
|
|
97
|
+
/* @__PURE__ */ o(c, {
|
|
98
|
+
variant: "secondary",
|
|
99
|
+
className: "text-xs",
|
|
100
|
+
children: e.type
|
|
101
|
+
}),
|
|
102
|
+
/* @__PURE__ */ o("span", {
|
|
103
|
+
className: "text-sm text-muted-foreground",
|
|
104
|
+
children: e.date
|
|
105
|
+
}),
|
|
106
|
+
e.views > 0 && /* @__PURE__ */ s("span", {
|
|
107
|
+
className: "text-sm text-muted-foreground",
|
|
108
|
+
children: [e.views, " views"]
|
|
109
|
+
})
|
|
110
|
+
]
|
|
111
|
+
})]
|
|
112
|
+
})]
|
|
113
|
+
}), /* @__PURE__ */ s("div", {
|
|
114
|
+
className: "flex items-center gap-2",
|
|
115
|
+
children: [/* @__PURE__ */ o(t, { className: `h-4 w-4 ${h[e.status]}` }), /* @__PURE__ */ o(c, {
|
|
116
|
+
variant: e.status === "approved" ? "default" : e.status === "pending" ? "secondary" : "destructive",
|
|
117
|
+
children: e.status
|
|
118
|
+
})]
|
|
119
|
+
})]
|
|
120
|
+
}, e.id);
|
|
121
|
+
})
|
|
122
|
+
}) })] })
|
|
123
|
+
]
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
//#endregion
|
|
127
|
+
export { g as ContributionsPage };
|
|
128
|
+
|
|
129
|
+
//# sourceMappingURL=ContributionsPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContributionsPage.js","names":[],"sources":["../../../src/theculturepost/pages/ContributionsPage.tsx"],"sourcesContent":["import { Card, CardContent, CardHeader, CardTitle, Badge, Button } from '@burdenoff/fe-libs/ui';\nimport { Plus, Upload, Check, Clock, XCircle } from 'lucide-react';\nimport { useTheCulturePostStore } from '../store/theculturepostStore';\n\nconst statusIcons: Record<string, typeof Check> = {\n approved: Check,\n pending: Clock,\n rejected: XCircle,\n};\n\nconst statusColors: Record<string, string> = {\n approved: 'text-green-600',\n pending: 'text-orange-600',\n rejected: 'text-red-600',\n};\n\nexport function ContributionsPage() {\n const { contributions, contributionStats } = useTheCulturePostStore();\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">My Contributions</h1>\n <p className=\"text-sm text-muted-foreground mt-1\">\n Track and manage your cultural content contributions\n </p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"h-4 w-4 mr-2\" /> New Contribution\n </Button>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <Card>\n <CardHeader className=\"pb-2\">\n <CardTitle className=\"text-sm font-medium\">Total</CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-2xl font-bold\">{contributionStats.total}</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-2\">\n <CardTitle className=\"text-sm font-medium\">Approved</CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-2xl font-bold text-green-600\">{contributionStats.approved}</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-2\">\n <CardTitle className=\"text-sm font-medium\">Pending</CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-2xl font-bold text-orange-600\">{contributionStats.pending}</p>\n </CardContent>\n </Card>\n <Card>\n <CardHeader className=\"pb-2\">\n <CardTitle className=\"text-sm font-medium\">Rejected</CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-2xl font-bold text-red-600\">{contributionStats.rejected}</p>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Recent Contributions</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-4\">\n {contributions.map((contribution) => {\n const StatusIcon = statusIcons[contribution.status] ?? Clock;\n return (\n <div\n key={contribution.id}\n className=\"flex items-center justify-between p-4 rounded-lg border hover:bg-muted/50 transition-colors\"\n >\n <div className=\"flex items-center gap-4 flex-1\">\n <div className=\"w-12 h-12 rounded-lg bg-primary/10 flex items-center justify-center\">\n <Upload className=\"h-6 w-6 text-primary\" />\n </div>\n <div className=\"flex-1\">\n <h3 className=\"font-medium\">{contribution.title}</h3>\n <div className=\"flex items-center gap-2 mt-1 flex-wrap\">\n <Badge variant=\"secondary\" className=\"text-xs\">\n {contribution.type}\n </Badge>\n <span className=\"text-sm text-muted-foreground\">{contribution.date}</span>\n {contribution.views > 0 && (\n <span className=\"text-sm text-muted-foreground\">\n {contribution.views} views\n </span>\n )}\n </div>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <StatusIcon className={`h-4 w-4 ${statusColors[contribution.status]}`} />\n <Badge\n variant={\n contribution.status === 'approved'\n ? 'default'\n : contribution.status === 'pending'\n ? 'secondary'\n : 'destructive'\n }\n >\n {contribution.status}\n </Badge>\n </div>\n </div>\n );\n })}\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CulturalRepositoryGraphqlPage.d.ts","sourceRoot":"","sources":["../../../src/theculturepost/pages/CulturalRepositoryGraphqlPage.tsx"],"names":[],"mappings":"AAuDA,wBAAgB,6BAA6B,4CAuF5C"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { useState as e } from "react";
|
|
2
|
+
import { AlertCircle as t, Database as n, Globe as r, RefreshCw as i, Search as a } from "lucide-react";
|
|
3
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
4
|
+
import { Badge as c, Button as l, Card as u, CardContent as d, Input as f } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
//#region src/theculturepost/pages/CulturalRepositoryGraphqlPage.tsx
|
|
6
|
+
var p = [
|
|
7
|
+
{
|
|
8
|
+
id: "gql-1",
|
|
9
|
+
title: "Ancestral Puebloan Cliff Dwellings",
|
|
10
|
+
category: "Architecture",
|
|
11
|
+
culturalContext: "Ancestral Puebloan",
|
|
12
|
+
verified: !0,
|
|
13
|
+
source: "UNESCO Registry"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "gql-2",
|
|
17
|
+
title: "Balinese Gamelan Musical Tradition",
|
|
18
|
+
category: "Music & Performance",
|
|
19
|
+
culturalContext: "Balinese / Indonesian",
|
|
20
|
+
verified: !0,
|
|
21
|
+
source: "Cultural Ministry of Indonesia"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
id: "gql-3",
|
|
25
|
+
title: "Inuit Throat Singing",
|
|
26
|
+
category: "Music & Performance",
|
|
27
|
+
culturalContext: "Inuit",
|
|
28
|
+
verified: !0,
|
|
29
|
+
source: "Canadian Heritage Council"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: "gql-4",
|
|
33
|
+
title: "Yoruba Orisha Worship Practices",
|
|
34
|
+
category: "Spiritual Practices",
|
|
35
|
+
culturalContext: "Yoruba / West African",
|
|
36
|
+
verified: !1,
|
|
37
|
+
source: "Community Submission"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
id: "gql-5",
|
|
41
|
+
title: "Tibetan Sand Mandala Creation",
|
|
42
|
+
category: "Sacred Art",
|
|
43
|
+
culturalContext: "Tibetan Buddhist",
|
|
44
|
+
verified: !0,
|
|
45
|
+
source: "Dalai Lama Foundation"
|
|
46
|
+
}
|
|
47
|
+
];
|
|
48
|
+
function m() {
|
|
49
|
+
let [m, h] = e(""), [g, _] = e(!1), v = m ? p.filter((e) => e.title.toLowerCase().includes(m.toLowerCase()) || e.culturalContext.toLowerCase().includes(m.toLowerCase())) : p;
|
|
50
|
+
return /* @__PURE__ */ s("div", {
|
|
51
|
+
className: "space-y-6 p-6",
|
|
52
|
+
children: [
|
|
53
|
+
/* @__PURE__ */ s("div", {
|
|
54
|
+
className: "flex items-start justify-between",
|
|
55
|
+
children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ s("h1", {
|
|
56
|
+
className: "text-2xl font-semibold flex items-center gap-2",
|
|
57
|
+
children: [/* @__PURE__ */ o(n, { className: "h-6 w-6 text-indigo-600" }), " Cultural Repository (GraphQL)"]
|
|
58
|
+
}), /* @__PURE__ */ o("p", {
|
|
59
|
+
className: "text-sm text-muted-foreground mt-1",
|
|
60
|
+
children: "Federated cultural data from verified sources via GraphQL API"
|
|
61
|
+
})] }), /* @__PURE__ */ s(l, {
|
|
62
|
+
variant: "outline",
|
|
63
|
+
size: "sm",
|
|
64
|
+
onClick: () => {
|
|
65
|
+
_(!0), setTimeout(() => _(!1), 1e3);
|
|
66
|
+
},
|
|
67
|
+
disabled: g,
|
|
68
|
+
children: [/* @__PURE__ */ o(i, { className: `h-4 w-4 mr-2 ${g ? "animate-spin" : ""}` }), " Refresh"]
|
|
69
|
+
})]
|
|
70
|
+
}),
|
|
71
|
+
/* @__PURE__ */ o(u, {
|
|
72
|
+
className: "border-indigo-200 bg-indigo-50/50",
|
|
73
|
+
children: /* @__PURE__ */ s(d, {
|
|
74
|
+
className: "pt-6",
|
|
75
|
+
children: [/* @__PURE__ */ s("div", {
|
|
76
|
+
className: "flex items-center gap-2 text-sm text-indigo-700 mb-3",
|
|
77
|
+
children: [/* @__PURE__ */ o(n, { className: "h-4 w-4" }), /* @__PURE__ */ s("span", { children: [
|
|
78
|
+
"Connected to Cultural Heritage GraphQL Federation | ",
|
|
79
|
+
v.length,
|
|
80
|
+
" results from",
|
|
81
|
+
" ",
|
|
82
|
+
p.length,
|
|
83
|
+
" records"
|
|
84
|
+
] })]
|
|
85
|
+
}), /* @__PURE__ */ s("div", {
|
|
86
|
+
className: "relative",
|
|
87
|
+
children: [/* @__PURE__ */ o(a, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" }), /* @__PURE__ */ o(f, {
|
|
88
|
+
placeholder: "Query cultural content...",
|
|
89
|
+
className: "pl-10",
|
|
90
|
+
value: m,
|
|
91
|
+
onChange: (e) => h(e.target.value)
|
|
92
|
+
})]
|
|
93
|
+
})]
|
|
94
|
+
})
|
|
95
|
+
}),
|
|
96
|
+
/* @__PURE__ */ o("div", {
|
|
97
|
+
className: "space-y-4",
|
|
98
|
+
children: v.map((e) => /* @__PURE__ */ o(u, {
|
|
99
|
+
className: "hover:shadow-md transition-shadow",
|
|
100
|
+
children: /* @__PURE__ */ o(d, {
|
|
101
|
+
className: "p-6",
|
|
102
|
+
children: /* @__PURE__ */ s("div", {
|
|
103
|
+
className: "flex items-start justify-between",
|
|
104
|
+
children: [/* @__PURE__ */ s("div", {
|
|
105
|
+
className: "flex-1",
|
|
106
|
+
children: [
|
|
107
|
+
/* @__PURE__ */ o("h3", {
|
|
108
|
+
className: "font-semibold text-lg",
|
|
109
|
+
children: e.title
|
|
110
|
+
}),
|
|
111
|
+
/* @__PURE__ */ s("p", {
|
|
112
|
+
className: "text-sm text-muted-foreground mt-1 flex items-center gap-1",
|
|
113
|
+
children: [
|
|
114
|
+
/* @__PURE__ */ o(r, { className: "h-3 w-3" }),
|
|
115
|
+
" ",
|
|
116
|
+
e.culturalContext
|
|
117
|
+
]
|
|
118
|
+
}),
|
|
119
|
+
/* @__PURE__ */ o("div", {
|
|
120
|
+
className: "flex items-center gap-3 mt-3 text-sm text-muted-foreground",
|
|
121
|
+
children: /* @__PURE__ */ s("span", { children: ["Source: ", e.source] })
|
|
122
|
+
})
|
|
123
|
+
]
|
|
124
|
+
}), /* @__PURE__ */ s("div", {
|
|
125
|
+
className: "flex flex-col items-end gap-2",
|
|
126
|
+
children: [/* @__PURE__ */ o(c, {
|
|
127
|
+
variant: "outline",
|
|
128
|
+
children: e.category
|
|
129
|
+
}), e.verified ? /* @__PURE__ */ o(c, {
|
|
130
|
+
variant: "default",
|
|
131
|
+
className: "bg-emerald-600",
|
|
132
|
+
children: "Verified"
|
|
133
|
+
}) : /* @__PURE__ */ s(c, {
|
|
134
|
+
variant: "secondary",
|
|
135
|
+
className: "flex items-center gap-1",
|
|
136
|
+
children: [/* @__PURE__ */ o(t, { className: "h-3 w-3" }), " Unverified"]
|
|
137
|
+
})]
|
|
138
|
+
})]
|
|
139
|
+
})
|
|
140
|
+
})
|
|
141
|
+
}, e.id))
|
|
142
|
+
})
|
|
143
|
+
]
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
//#endregion
|
|
147
|
+
export { m as CulturalRepositoryGraphqlPage };
|
|
148
|
+
|
|
149
|
+
//# sourceMappingURL=CulturalRepositoryGraphqlPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CulturalRepositoryGraphqlPage.js","names":[],"sources":["../../../src/theculturepost/pages/CulturalRepositoryGraphqlPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Badge,\n Input,\n Button,\n} from '@burdenoff/fe-libs/ui';\nimport { Search, Globe, Database, RefreshCw, AlertCircle } from 'lucide-react';\n\nconst mockGqlItems = [\n {\n id: 'gql-1',\n title: 'Ancestral Puebloan Cliff Dwellings',\n category: 'Architecture',\n culturalContext: 'Ancestral Puebloan',\n verified: true,\n source: 'UNESCO Registry',\n },\n {\n id: 'gql-2',\n title: 'Balinese Gamelan Musical Tradition',\n category: 'Music & Performance',\n culturalContext: 'Balinese / Indonesian',\n verified: true,\n source: 'Cultural Ministry of Indonesia',\n },\n {\n id: 'gql-3',\n title: 'Inuit Throat Singing',\n category: 'Music & Performance',\n culturalContext: 'Inuit',\n verified: true,\n source: 'Canadian Heritage Council',\n },\n {\n id: 'gql-4',\n title: 'Yoruba Orisha Worship Practices',\n category: 'Spiritual Practices',\n culturalContext: 'Yoruba / West African',\n verified: false,\n source: 'Community Submission',\n },\n {\n id: 'gql-5',\n title: 'Tibetan Sand Mandala Creation',\n category: 'Sacred Art',\n culturalContext: 'Tibetan Buddhist',\n verified: true,\n source: 'Dalai Lama Foundation',\n },\n];\n\nexport function CulturalRepositoryGraphqlPage() {\n const [searchQuery, setSearchQuery] = useState('');\n const [isRefreshing, setIsRefreshing] = useState(false);\n\n const filtered = searchQuery\n ? mockGqlItems.filter(\n (item) =>\n item.title.toLowerCase().includes(searchQuery.toLowerCase()) ||\n item.culturalContext.toLowerCase().includes(searchQuery.toLowerCase())\n )\n : mockGqlItems;\n\n const handleRefresh = () => {\n setIsRefreshing(true);\n setTimeout(() => setIsRefreshing(false), 1000);\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-start justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold flex items-center gap-2\">\n <Database className=\"h-6 w-6 text-indigo-600\" /> Cultural Repository (GraphQL)\n </h1>\n <p className=\"text-sm text-muted-foreground mt-1\">\n Federated cultural data from verified sources via GraphQL API\n </p>\n </div>\n <Button variant=\"outline\" size=\"sm\" onClick={handleRefresh} disabled={isRefreshing}>\n <RefreshCw className={`h-4 w-4 mr-2 ${isRefreshing ? 'animate-spin' : ''}`} /> Refresh\n </Button>\n </div>\n\n <Card className=\"border-indigo-200 bg-indigo-50/50\">\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center gap-2 text-sm text-indigo-700 mb-3\">\n <Database className=\"h-4 w-4\" />\n <span>\n Connected to Cultural Heritage GraphQL Federation | {filtered.length} results from{' '}\n {mockGqlItems.length} records\n </span>\n </div>\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground\" />\n <Input\n placeholder=\"Query cultural content...\"\n className=\"pl-10\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n </div>\n </CardContent>\n </Card>\n\n <div className=\"space-y-4\">\n {filtered.map((item) => (\n <Card key={item.id} className=\"hover:shadow-md transition-shadow\">\n <CardContent className=\"p-6\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex-1\">\n <h3 className=\"font-semibold text-lg\">{item.title}</h3>\n <p className=\"text-sm text-muted-foreground mt-1 flex items-center gap-1\">\n <Globe className=\"h-3 w-3\" /> {item.culturalContext}\n </p>\n <div className=\"flex items-center gap-3 mt-3 text-sm text-muted-foreground\">\n <span>Source: {item.source}</span>\n </div>\n </div>\n <div className=\"flex flex-col items-end gap-2\">\n <Badge variant=\"outline\">{item.category}</Badge>\n {item.verified ? (\n <Badge variant=\"default\" className=\"bg-emerald-600\">\n Verified\n </Badge>\n ) : (\n <Badge variant=\"secondary\" className=\"flex items-center gap-1\">\n <AlertCircle className=\"h-3 w-3\" /> Unverified\n </Badge>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CulturalRepositoryPage.d.ts","sourceRoot":"","sources":["../../../src/theculturepost/pages/CulturalRepositoryPage.tsx"],"names":[],"mappings":"AA0EA,wBAAgB,sBAAsB,4CA6IrC"}
|