@burdenoff/microfe-theculturepost 2026.704.2 → 2026.705.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/theculturepost/TheCulturePostRoot.js +63 -45
- package/dist/theculturepost/TheCulturePostRoot.js.map +1 -1
- package/dist/theculturepost/TheCulturePostRoutes.js +17 -9
- package/dist/theculturepost/TheCulturePostRoutes.js.map +1 -1
- package/dist/theculturepost/components/AddCitationDialog.js +131 -102
- package/dist/theculturepost/components/AddCitationDialog.js.map +1 -1
- package/dist/theculturepost/components/ArchiveItemCard.js +56 -43
- package/dist/theculturepost/components/ArchiveItemCard.js.map +1 -1
- package/dist/theculturepost/components/AudioPlayer.js +74 -0
- package/dist/theculturepost/components/AudioPlayer.js.map +1 -0
- package/dist/theculturepost/components/CitationList.js +215 -105
- package/dist/theculturepost/components/CitationList.js.map +1 -1
- package/dist/theculturepost/components/CollectionCard.js +32 -32
- package/dist/theculturepost/components/CollectionCard.js.map +1 -1
- package/dist/theculturepost/components/CreateArchiveItemDialog.js +133 -93
- package/dist/theculturepost/components/CreateArchiveItemDialog.js.map +1 -1
- package/dist/theculturepost/components/CreateCollectionDialog.js +91 -70
- package/dist/theculturepost/components/CreateCollectionDialog.js.map +1 -1
- package/dist/theculturepost/components/CreateStoryDialog.js +311 -132
- package/dist/theculturepost/components/CreateStoryDialog.js.map +1 -1
- package/dist/theculturepost/components/DecorativeCover.js +78 -0
- package/dist/theculturepost/components/DecorativeCover.js.map +1 -0
- package/dist/theculturepost/components/DecorativeDivider.js +45 -0
- package/dist/theculturepost/components/DecorativeDivider.js.map +1 -0
- package/dist/theculturepost/components/DiscussionCard.js +75 -60
- package/dist/theculturepost/components/DiscussionCard.js.map +1 -1
- package/dist/theculturepost/components/HistoryTimeline.js +115 -0
- package/dist/theculturepost/components/HistoryTimeline.js.map +1 -0
- package/dist/theculturepost/components/LifecycleStepper.js +33 -0
- package/dist/theculturepost/components/LifecycleStepper.js.map +1 -0
- package/dist/theculturepost/components/OpenDiscussionDialog.js +66 -56
- package/dist/theculturepost/components/OpenDiscussionDialog.js.map +1 -1
- package/dist/theculturepost/components/OralHistoryCard.js +6 -73
- package/dist/theculturepost/components/OverlayBadge.js +22 -0
- package/dist/theculturepost/components/OverlayBadge.js.map +1 -0
- package/dist/theculturepost/components/PageHero.js +62 -0
- package/dist/theculturepost/components/PageHero.js.map +1 -0
- package/dist/theculturepost/components/RecordOralHistoryDialog.js +306 -131
- package/dist/theculturepost/components/RecordOralHistoryDialog.js.map +1 -1
- package/dist/theculturepost/components/ReplyThread.js +268 -139
- package/dist/theculturepost/components/ReplyThread.js.map +1 -1
- package/dist/theculturepost/components/StatusBadge.js +9 -9
- package/dist/theculturepost/components/StatusBadge.js.map +1 -1
- package/dist/theculturepost/components/StoryCard.js +54 -49
- package/dist/theculturepost/components/StoryCard.js.map +1 -1
- package/dist/theculturepost/components/TopicCard.js +60 -41
- package/dist/theculturepost/components/TopicCard.js.map +1 -1
- package/dist/theculturepost/components/Waveform.js +31 -0
- package/dist/theculturepost/components/Waveform.js.map +1 -0
- package/dist/theculturepost/components/categoryMeta.js +20 -0
- package/dist/theculturepost/components/categoryMeta.js.map +1 -0
- package/dist/theculturepost/components/index.js +41 -0
- package/dist/theculturepost/components/viz/BarChart.js +53 -0
- package/dist/theculturepost/components/viz/BarChart.js.map +1 -0
- package/dist/theculturepost/components/viz/Donut.js +58 -0
- package/dist/theculturepost/components/viz/Donut.js.map +1 -0
- package/dist/theculturepost/components/viz/StatTile.js +35 -0
- package/dist/theculturepost/components/viz/StatTile.js.map +1 -0
- package/dist/theculturepost/components/viz/index.js +3 -0
- package/dist/theculturepost/pages/HomePage.js +247 -124
- package/dist/theculturepost/pages/HomePage.js.map +1 -1
- package/dist/theculturepost/pages/archive/ArchiveItemDetailPage.js +319 -127
- package/dist/theculturepost/pages/archive/ArchiveItemDetailPage.js.map +1 -1
- package/dist/theculturepost/pages/archive/ArchivePage.js +265 -180
- package/dist/theculturepost/pages/archive/ArchivePage.js.map +1 -1
- package/dist/theculturepost/pages/archive/CollectionDetailPage.js +158 -143
- package/dist/theculturepost/pages/archive/CollectionDetailPage.js.map +1 -1
- package/dist/theculturepost/pages/discussions/DiscussionDetailPage.js +155 -93
- package/dist/theculturepost/pages/discussions/DiscussionDetailPage.js.map +1 -1
- package/dist/theculturepost/pages/discussions/DiscussionsPage.js +16 -16
- package/dist/theculturepost/pages/discussions/DiscussionsPage.js.map +1 -1
- package/dist/theculturepost/pages/governance/GovernancePage.js +293 -0
- package/dist/theculturepost/pages/governance/GovernancePage.js.map +1 -0
- package/dist/theculturepost/pages/stories/StoriesPage.js +18 -18
- package/dist/theculturepost/pages/stories/StoriesPage.js.map +1 -1
- package/dist/theculturepost/pages/stories/StoryDetailPage.js +603 -285
- package/dist/theculturepost/pages/stories/StoryDetailPage.js.map +1 -1
- package/dist/theculturepost/pages/timeline/TimelinePage.js +162 -0
- package/dist/theculturepost/pages/timeline/TimelinePage.js.map +1 -0
- package/dist/theculturepost/pages/topics/TopicDetailPage.js +239 -163
- package/dist/theculturepost/pages/topics/TopicDetailPage.js.map +1 -1
- package/dist/theculturepost/pages/topics/TopicsPage.js +76 -74
- package/dist/theculturepost/pages/topics/TopicsPage.js.map +1 -1
- package/dist/theculturepost/styles/injectDisplayFont.js +11 -0
- package/dist/theculturepost/styles/injectDisplayFont.js.map +1 -0
- package/dist/theculturepost/utils/formatters.js +6 -1
- package/dist/theculturepost/utils/formatters.js.map +1 -1
- package/package.json +1 -1
- package/dist/theculturepost/components/OralHistoryCard.js.map +0 -1
|
@@ -3,125 +3,135 @@ import "../hooks/index.js";
|
|
|
3
3
|
import { describeError as n, notify as r } from "../lib/toast.js";
|
|
4
4
|
import { TagInput as i } from "./TagInput.js";
|
|
5
5
|
import { useState as a } from "react";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { MessagesSquare as o, Plus as s } from "lucide-react";
|
|
7
|
+
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
8
|
+
import { Button as u, Input as d, Label as f, ResponsiveDialog as p, ResponsiveDialogContent as m, ResponsiveDialogDescription as h, ResponsiveDialogFooter as g, ResponsiveDialogHeader as _, ResponsiveDialogTitle as v, Select as y, SelectContent as b, SelectItem as x, SelectTrigger as S, SelectValue as C, Switch as w, Textarea as T } from "@burdenoff/fe-libs/ui";
|
|
8
9
|
//#region src/theculturepost/components/OpenDiscussionDialog.tsx
|
|
9
|
-
function
|
|
10
|
-
let
|
|
10
|
+
function E({ open: E, onOpenChange: D, storyId: O, onCreated: k }) {
|
|
11
|
+
let A = e(), j = t({
|
|
11
12
|
status: "PUBLISHED",
|
|
12
13
|
pagination: { limit: 100 }
|
|
13
|
-
}), [
|
|
14
|
-
|
|
14
|
+
}), [M, N] = a(""), [P, F] = a(""), [I, L] = a(O ?? ""), [R, z] = a(!1), [B, V] = a([]), [H, U] = a(null), W = () => {
|
|
15
|
+
N(""), F(""), L(O ?? ""), z(!1), V([]), U(null);
|
|
15
16
|
};
|
|
16
|
-
return /* @__PURE__ */
|
|
17
|
-
open:
|
|
18
|
-
onOpenChange:
|
|
19
|
-
children: /* @__PURE__ */
|
|
17
|
+
return /* @__PURE__ */ c(p, {
|
|
18
|
+
open: E,
|
|
19
|
+
onOpenChange: D,
|
|
20
|
+
children: /* @__PURE__ */ l(m, {
|
|
20
21
|
className: "sm:max-w-lg",
|
|
21
22
|
children: [
|
|
22
|
-
/* @__PURE__ */
|
|
23
|
-
|
|
23
|
+
/* @__PURE__ */ l(_, { children: [/* @__PURE__ */ l(v, {
|
|
24
|
+
className: "flex items-center gap-2",
|
|
25
|
+
children: [/* @__PURE__ */ c(o, {
|
|
26
|
+
className: "h-5 w-5 text-accent",
|
|
27
|
+
"aria-hidden": "true"
|
|
28
|
+
}), " Open a discussion"]
|
|
29
|
+
}), /* @__PURE__ */ c(h, { children: "Start a respectful conversation. Replies are moderated to keep the space welcoming." })] }),
|
|
30
|
+
/* @__PURE__ */ l("div", {
|
|
24
31
|
className: "flex max-h-[60vh] flex-col gap-4 overflow-y-auto py-2",
|
|
25
32
|
children: [
|
|
26
|
-
/* @__PURE__ */
|
|
33
|
+
/* @__PURE__ */ l("div", {
|
|
27
34
|
className: "grid gap-1.5",
|
|
28
|
-
children: [/* @__PURE__ */
|
|
35
|
+
children: [/* @__PURE__ */ c(f, {
|
|
29
36
|
htmlFor: "discussion-title",
|
|
30
37
|
children: "Title"
|
|
31
|
-
}), /* @__PURE__ */
|
|
38
|
+
}), /* @__PURE__ */ c(d, {
|
|
32
39
|
id: "discussion-title",
|
|
33
|
-
value:
|
|
34
|
-
onChange: (e) =>
|
|
40
|
+
value: M,
|
|
41
|
+
onChange: (e) => N(e.target.value),
|
|
35
42
|
placeholder: "e.g. How do communities keep oral traditions alive?"
|
|
36
43
|
})]
|
|
37
44
|
}),
|
|
38
|
-
/* @__PURE__ */
|
|
45
|
+
/* @__PURE__ */ l("div", {
|
|
39
46
|
className: "grid gap-1.5",
|
|
40
|
-
children: [/* @__PURE__ */
|
|
47
|
+
children: [/* @__PURE__ */ c(f, {
|
|
41
48
|
htmlFor: "discussion-prompt",
|
|
42
49
|
children: "Prompt"
|
|
43
|
-
}), /* @__PURE__ */
|
|
50
|
+
}), /* @__PURE__ */ c(T, {
|
|
44
51
|
id: "discussion-prompt",
|
|
45
|
-
value:
|
|
46
|
-
onChange: (e) =>
|
|
52
|
+
value: P,
|
|
53
|
+
onChange: (e) => F(e.target.value),
|
|
47
54
|
placeholder: "Set the context and invite perspectives.",
|
|
48
55
|
rows: 3
|
|
49
56
|
})]
|
|
50
57
|
}),
|
|
51
|
-
!
|
|
58
|
+
!O && /* @__PURE__ */ l("div", {
|
|
52
59
|
className: "grid gap-1.5",
|
|
53
|
-
children: [/* @__PURE__ */
|
|
54
|
-
value:
|
|
55
|
-
onValueChange:
|
|
56
|
-
children: [/* @__PURE__ */
|
|
60
|
+
children: [/* @__PURE__ */ c(f, { children: "Linked story" }), /* @__PURE__ */ l(y, {
|
|
61
|
+
value: I,
|
|
62
|
+
onValueChange: L,
|
|
63
|
+
children: [/* @__PURE__ */ c(S, { children: /* @__PURE__ */ c(C, { placeholder: "Anchor to a story (optional)" }) }), /* @__PURE__ */ c(b, { children: (j.data?.items ?? []).map((e) => /* @__PURE__ */ c(x, {
|
|
57
64
|
value: e.id,
|
|
58
65
|
children: e.title
|
|
59
66
|
}, e.id)) })]
|
|
60
67
|
})]
|
|
61
68
|
}),
|
|
62
|
-
/* @__PURE__ */
|
|
69
|
+
/* @__PURE__ */ l("div", {
|
|
63
70
|
className: "grid gap-1.5",
|
|
64
|
-
children: [/* @__PURE__ */
|
|
71
|
+
children: [/* @__PURE__ */ c(f, {
|
|
65
72
|
htmlFor: "discussion-tags",
|
|
66
73
|
children: "Tags"
|
|
67
|
-
}), /* @__PURE__ */
|
|
74
|
+
}), /* @__PURE__ */ c(i, {
|
|
68
75
|
id: "discussion-tags",
|
|
69
|
-
value:
|
|
70
|
-
onChange:
|
|
76
|
+
value: B,
|
|
77
|
+
onChange: V,
|
|
71
78
|
placeholder: "Add tags…"
|
|
72
79
|
})]
|
|
73
80
|
}),
|
|
74
|
-
/* @__PURE__ */
|
|
81
|
+
/* @__PURE__ */ l("label", {
|
|
75
82
|
className: "flex items-center justify-between gap-3 rounded-xl border border-border-seam bg-bg-surface px-4 py-3",
|
|
76
|
-
children: [/* @__PURE__ */
|
|
83
|
+
children: [/* @__PURE__ */ l("span", { children: [/* @__PURE__ */ c("span", {
|
|
77
84
|
className: "block text-sm font-medium text-text-primary",
|
|
78
85
|
children: "Interfaith space"
|
|
79
|
-
}), /* @__PURE__ */
|
|
86
|
+
}), /* @__PURE__ */ c("span", {
|
|
80
87
|
className: "block text-xs text-text-secondary",
|
|
81
88
|
children: "Signals that perspectives from many traditions are welcome."
|
|
82
|
-
})] }), /* @__PURE__ */
|
|
83
|
-
checked:
|
|
84
|
-
onCheckedChange:
|
|
89
|
+
})] }), /* @__PURE__ */ c(w, {
|
|
90
|
+
checked: R,
|
|
91
|
+
onCheckedChange: z,
|
|
85
92
|
"aria-label": "Interfaith discussion"
|
|
86
93
|
})]
|
|
87
94
|
}),
|
|
88
|
-
|
|
95
|
+
H && /* @__PURE__ */ c("p", {
|
|
89
96
|
className: "text-sm text-status-error-text",
|
|
90
|
-
children:
|
|
97
|
+
children: H
|
|
91
98
|
})
|
|
92
99
|
]
|
|
93
100
|
}),
|
|
94
|
-
/* @__PURE__ */
|
|
101
|
+
/* @__PURE__ */ l(g, { children: [/* @__PURE__ */ c(u, {
|
|
95
102
|
variant: "outline",
|
|
96
|
-
onClick: () =>
|
|
103
|
+
onClick: () => D(!1),
|
|
97
104
|
children: "Cancel"
|
|
98
|
-
}), /* @__PURE__ */
|
|
105
|
+
}), /* @__PURE__ */ l(u, {
|
|
99
106
|
onClick: async () => {
|
|
100
|
-
if (!
|
|
101
|
-
|
|
107
|
+
if (!M.trim()) {
|
|
108
|
+
U("A title is required.");
|
|
102
109
|
return;
|
|
103
110
|
}
|
|
104
111
|
try {
|
|
105
|
-
let e = await
|
|
106
|
-
title:
|
|
107
|
-
prompt:
|
|
108
|
-
storyId:
|
|
109
|
-
isInterfaith:
|
|
110
|
-
tags:
|
|
112
|
+
let e = await A.mutateAsync({
|
|
113
|
+
title: M.trim(),
|
|
114
|
+
prompt: P.trim() || null,
|
|
115
|
+
storyId: I || null,
|
|
116
|
+
isInterfaith: R,
|
|
117
|
+
tags: B.length ? B : null
|
|
111
118
|
});
|
|
112
|
-
r.success("Discussion opened", e.title),
|
|
119
|
+
r.success("Discussion opened", e.title), D(!1), W(), k?.(e);
|
|
113
120
|
} catch (e) {
|
|
114
|
-
|
|
121
|
+
U(n(e));
|
|
115
122
|
}
|
|
116
123
|
},
|
|
117
|
-
disabled:
|
|
118
|
-
children:
|
|
124
|
+
disabled: A.isPending,
|
|
125
|
+
children: [/* @__PURE__ */ c(s, {
|
|
126
|
+
className: "mr-1.5 h-4 w-4",
|
|
127
|
+
"aria-hidden": "true"
|
|
128
|
+
}), " Open discussion"]
|
|
119
129
|
})] })
|
|
120
130
|
]
|
|
121
131
|
})
|
|
122
132
|
});
|
|
123
133
|
}
|
|
124
134
|
//#endregion
|
|
125
|
-
export {
|
|
135
|
+
export { E as OpenDiscussionDialog };
|
|
126
136
|
|
|
127
137
|
//# sourceMappingURL=OpenDiscussionDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenDiscussionDialog.js","names":[],"sources":["../../../src/theculturepost/components/OpenDiscussionDialog.tsx"],"sourcesContent":["/**\n * OpenDiscussionDialog — open a new community discussion.\n * @module theculturepost/components\n *\n * Writes `tcpOpenDiscussion`. An optional interfaith flag marks the space as one\n * that welcomes multiple traditions; an optional story link anchors the thread.\n */\n\nimport { useState } from 'react';\nimport {\n Button,\n Input,\n Label,\n Textarea,\n Switch,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n} from '@burdenoff/fe-libs/ui';\nimport { TagInput } from './TagInput';\nimport { useTcpOpenDiscussion, useTcpStories } from '../hooks';\nimport { notify, describeError } from '../lib/toast';\nimport type { TcpDiscussion } from '../types';\n\ninterface OpenDiscussionDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Anchor the discussion to a story (e.g. from a story detail page). */\n storyId?: string;\n onCreated?: (discussion: TcpDiscussion) => void;\n}\n\nexport function OpenDiscussionDialog({\n open,\n onOpenChange,\n storyId,\n onCreated,\n}: OpenDiscussionDialogProps) {\n const openDiscussion = useTcpOpenDiscussion();\n const storiesQuery = useTcpStories({ status: 'PUBLISHED', pagination: { limit: 100 } });\n\n const [title, setTitle] = useState('');\n const [prompt, setPrompt] = useState('');\n const [pickedStory, setPickedStory] = useState(storyId ?? '');\n const [isInterfaith, setIsInterfaith] = useState(false);\n const [tags, setTags] = useState<string[]>([]);\n const [error, setError] = useState<string | null>(null);\n\n const reset = () => {\n setTitle('');\n setPrompt('');\n setPickedStory(storyId ?? '');\n setIsInterfaith(false);\n setTags([]);\n setError(null);\n };\n\n const submit = async () => {\n if (!title.trim()) {\n setError('A title is required.');\n return;\n }\n try {\n const created = await openDiscussion.mutateAsync({\n title: title.trim(),\n prompt: prompt.trim() || null,\n storyId: pickedStory || null,\n isInterfaith,\n tags: tags.length ? tags : null,\n });\n notify.success('Discussion opened', created.title);\n onOpenChange(false);\n reset();\n onCreated?.(created);\n } catch (err) {\n setError(describeError(err));\n }\n };\n\n return (\n <ResponsiveDialog open={open} onOpenChange={onOpenChange}>\n <ResponsiveDialogContent className=\"sm:max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle
|
|
1
|
+
{"version":3,"file":"OpenDiscussionDialog.js","names":[],"sources":["../../../src/theculturepost/components/OpenDiscussionDialog.tsx"],"sourcesContent":["/**\n * OpenDiscussionDialog — open a new community discussion.\n * @module theculturepost/components\n *\n * Writes `tcpOpenDiscussion`. An optional interfaith flag marks the space as one\n * that welcomes multiple traditions; an optional story link anchors the thread.\n */\n\nimport { useState } from 'react';\nimport { MessagesSquare, Plus } from 'lucide-react';\nimport {\n Button,\n Input,\n Label,\n Textarea,\n Switch,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n} from '@burdenoff/fe-libs/ui';\nimport { TagInput } from './TagInput';\nimport { useTcpOpenDiscussion, useTcpStories } from '../hooks';\nimport { notify, describeError } from '../lib/toast';\nimport type { TcpDiscussion } from '../types';\n\ninterface OpenDiscussionDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Anchor the discussion to a story (e.g. from a story detail page). */\n storyId?: string;\n onCreated?: (discussion: TcpDiscussion) => void;\n}\n\nexport function OpenDiscussionDialog({\n open,\n onOpenChange,\n storyId,\n onCreated,\n}: OpenDiscussionDialogProps) {\n const openDiscussion = useTcpOpenDiscussion();\n const storiesQuery = useTcpStories({ status: 'PUBLISHED', pagination: { limit: 100 } });\n\n const [title, setTitle] = useState('');\n const [prompt, setPrompt] = useState('');\n const [pickedStory, setPickedStory] = useState(storyId ?? '');\n const [isInterfaith, setIsInterfaith] = useState(false);\n const [tags, setTags] = useState<string[]>([]);\n const [error, setError] = useState<string | null>(null);\n\n const reset = () => {\n setTitle('');\n setPrompt('');\n setPickedStory(storyId ?? '');\n setIsInterfaith(false);\n setTags([]);\n setError(null);\n };\n\n const submit = async () => {\n if (!title.trim()) {\n setError('A title is required.');\n return;\n }\n try {\n const created = await openDiscussion.mutateAsync({\n title: title.trim(),\n prompt: prompt.trim() || null,\n storyId: pickedStory || null,\n isInterfaith,\n tags: tags.length ? tags : null,\n });\n notify.success('Discussion opened', created.title);\n onOpenChange(false);\n reset();\n onCreated?.(created);\n } catch (err) {\n setError(describeError(err));\n }\n };\n\n return (\n <ResponsiveDialog open={open} onOpenChange={onOpenChange}>\n <ResponsiveDialogContent className=\"sm:max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle className=\"flex items-center gap-2\">\n <MessagesSquare className=\"h-5 w-5 text-accent\" aria-hidden=\"true\" /> Open a discussion\n </ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Start a respectful conversation. Replies are moderated to keep the space welcoming.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n\n <div className=\"flex max-h-[60vh] flex-col gap-4 overflow-y-auto py-2\">\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"discussion-title\">Title</Label>\n <Input\n id=\"discussion-title\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n placeholder=\"e.g. How do communities keep oral traditions alive?\"\n />\n </div>\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"discussion-prompt\">Prompt</Label>\n <Textarea\n id=\"discussion-prompt\"\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n placeholder=\"Set the context and invite perspectives.\"\n rows={3}\n />\n </div>\n {!storyId && (\n <div className=\"grid gap-1.5\">\n <Label>Linked story</Label>\n <Select value={pickedStory} onValueChange={setPickedStory}>\n <SelectTrigger>\n <SelectValue placeholder=\"Anchor to a story (optional)\" />\n </SelectTrigger>\n <SelectContent>\n {(storiesQuery.data?.items ?? []).map((story) => (\n <SelectItem key={story.id} value={story.id}>\n {story.title}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n <div className=\"grid gap-1.5\">\n <Label htmlFor=\"discussion-tags\">Tags</Label>\n <TagInput\n id=\"discussion-tags\"\n value={tags}\n onChange={setTags}\n placeholder=\"Add tags…\"\n />\n </div>\n <label className=\"flex items-center justify-between gap-3 rounded-xl border border-border-seam bg-bg-surface px-4 py-3\">\n <span>\n <span className=\"block text-sm font-medium text-text-primary\">Interfaith space</span>\n <span className=\"block text-xs text-text-secondary\">\n Signals that perspectives from many traditions are welcome.\n </span>\n </span>\n <Switch\n checked={isInterfaith}\n onCheckedChange={setIsInterfaith}\n aria-label=\"Interfaith discussion\"\n />\n </label>\n {error && <p className=\"text-sm text-status-error-text\">{error}</p>}\n </div>\n\n <ResponsiveDialogFooter>\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n Cancel\n </Button>\n <Button onClick={submit} disabled={openDiscussion.isPending}>\n <Plus className=\"mr-1.5 h-4 w-4\" aria-hidden=\"true\" /> Open discussion\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n"],"mappings":";;;;;;;;;AAyCA,SAAgB,EAAqB,EACnC,SACA,iBACA,YACA,gBAC4B;CAC5B,IAAM,IAAiB,GAAsB,EACvC,IAAe,EAAc;EAAE,QAAQ;EAAa,YAAY,EAAE,OAAO,KAAK;EAAE,CAAC,EAEjF,CAAC,GAAO,KAAY,EAAS,GAAG,EAChC,CAAC,GAAQ,KAAa,EAAS,GAAG,EAClC,CAAC,GAAa,KAAkB,EAAS,KAAW,GAAG,EACvD,CAAC,GAAc,KAAmB,EAAS,GAAM,EACjD,CAAC,GAAM,KAAW,EAAmB,EAAE,CAAC,EACxC,CAAC,GAAO,KAAY,EAAwB,KAAK,EAEjD,UAAc;AAMlB,EALA,EAAS,GAAG,EACZ,EAAU,GAAG,EACb,EAAe,KAAW,GAAG,EAC7B,EAAgB,GAAM,EACtB,EAAQ,EAAE,CAAC,EACX,EAAS,KAAK;;AAyBhB,QACE,kBAAC,GAAD;EAAwB;EAAoB;YAC1C,kBAAC,GAAD;GAAyB,WAAU;aAAnC;IACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;KAAuB,WAAU;eAAjC,CACE,kBAAC,GAAD;MAAgB,WAAU;MAAsB,eAAY;MAAS,CAAA,EAAA,qBAC/C;QACxB,kBAAC,GAAD,EAAA,UAA6B,uFAEC,CAAA,CACP,EAAA,CAAA;IAEzB,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,GAAD;QAAO,SAAQ;kBAAmB;QAAa,CAAA,EAC/C,kBAAC,GAAD;QACE,IAAG;QACH,OAAO;QACP,WAAW,MAAM,EAAS,EAAE,OAAO,MAAM;QACzC,aAAY;QACZ,CAAA,CACE;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,GAAD;QAAO,SAAQ;kBAAoB;QAAc,CAAA,EACjD,kBAAC,GAAD;QACE,IAAG;QACH,OAAO;QACP,WAAW,MAAM,EAAU,EAAE,OAAO,MAAM;QAC1C,aAAY;QACZ,MAAM;QACN,CAAA,CACE;;MACL,CAAC,KACA,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,GAAD,EAAA,UAAO,gBAAoB,CAAA,EAC3B,kBAAC,GAAD;QAAQ,OAAO;QAAa,eAAe;kBAA3C,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAa,aAAY,gCAAiC,CAAA,EAC5C,CAAA,EAChB,kBAAC,GAAD,EAAA,WACI,EAAa,MAAM,SAAS,EAAE,EAAE,KAAK,MACrC,kBAAC,GAAD;SAA2B,OAAO,EAAM;mBACrC,EAAM;SACI,EAFI,EAAM,GAEV,CACb,EACY,CAAA,CACT;UACL;;MAER,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,GAAD;QAAO,SAAQ;kBAAkB;QAAY,CAAA,EAC7C,kBAAC,GAAD;QACE,IAAG;QACH,OAAO;QACP,UAAU;QACV,aAAY;QACZ,CAAA,CACE;;MACN,kBAAC,SAAD;OAAO,WAAU;iBAAjB,CACE,kBAAC,QAAD,EAAA,UAAA,CACE,kBAAC,QAAD;QAAM,WAAU;kBAA8C;QAAuB,CAAA,EACrF,kBAAC,QAAD;QAAM,WAAU;kBAAoC;QAE7C,CAAA,CACF,EAAA,CAAA,EACP,kBAAC,GAAD;QACE,SAAS;QACT,iBAAiB;QACjB,cAAW;QACX,CAAA,CACI;;MACP,KAAS,kBAAC,KAAD;OAAG,WAAU;iBAAkC;OAAU,CAAA;MAC/D;;IAEN,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;KAAQ,SAAQ;KAAU,eAAe,EAAa,GAAM;eAAE;KAErD,CAAA,EACT,kBAAC,GAAD;KAAQ,SApGD,YAAY;AACzB,UAAI,CAAC,EAAM,MAAM,EAAE;AACjB,SAAS,uBAAuB;AAChC;;AAEF,UAAI;OACF,IAAM,IAAU,MAAM,EAAe,YAAY;QAC/C,OAAO,EAAM,MAAM;QACnB,QAAQ,EAAO,MAAM,IAAI;QACzB,SAAS,KAAe;QACxB;QACA,MAAM,EAAK,SAAS,IAAO;QAC5B,CAAC;AAIF,OAHA,EAAO,QAAQ,qBAAqB,EAAQ,MAAM,EAClD,EAAa,GAAM,EACnB,GAAO,EACP,IAAY,EAAQ;eACb,GAAK;AACZ,SAAS,EAAc,EAAI,CAAC;;;KAkFC,UAAU,EAAe;eAAlD,CACE,kBAAC,GAAD;MAAM,WAAU;MAAiB,eAAY;MAAS,CAAA,EAAA,mBAC/C;OACc,EAAA,CAAA;IACD;;EACT,CAAA"}
|
|
@@ -1,73 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
//#region src/theculturepost/components/OralHistoryCard.tsx
|
|
8
|
-
function f({ oralHistory: f }) {
|
|
9
|
-
let { data: p } = e(f.recording?.id);
|
|
10
|
-
return /* @__PURE__ */ u(d, {
|
|
11
|
-
treatment: "plain",
|
|
12
|
-
className: "flex items-start gap-4 p-4",
|
|
13
|
-
children: [/* @__PURE__ */ l("div", {
|
|
14
|
-
className: "flex h-11 w-11 shrink-0 items-center justify-center rounded-xl bg-[var(--color-accent-soft)] text-text-primary",
|
|
15
|
-
children: /* @__PURE__ */ l(i, { className: "h-5 w-5" })
|
|
16
|
-
}), /* @__PURE__ */ u("div", {
|
|
17
|
-
className: "min-w-0 flex-1",
|
|
18
|
-
children: [
|
|
19
|
-
/* @__PURE__ */ u("div", {
|
|
20
|
-
className: "flex flex-wrap items-center justify-between gap-2",
|
|
21
|
-
children: [/* @__PURE__ */ l("h3", {
|
|
22
|
-
className: "truncate text-sm font-semibold text-text-primary",
|
|
23
|
-
children: f.title
|
|
24
|
-
}), /* @__PURE__ */ l(r, { status: f.accessLevel })]
|
|
25
|
-
}),
|
|
26
|
-
f.summary && /* @__PURE__ */ l("p", {
|
|
27
|
-
className: "mt-1 line-clamp-2 text-sm text-text-secondary",
|
|
28
|
-
children: f.summary
|
|
29
|
-
}),
|
|
30
|
-
/* @__PURE__ */ u("div", {
|
|
31
|
-
className: "mt-2 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-text-tertiary",
|
|
32
|
-
children: [
|
|
33
|
-
f.narratorName && /* @__PURE__ */ u("span", {
|
|
34
|
-
className: "inline-flex items-center gap-1",
|
|
35
|
-
children: [
|
|
36
|
-
/* @__PURE__ */ l(c, { className: "h-3.5 w-3.5" }),
|
|
37
|
-
" ",
|
|
38
|
-
f.narratorName
|
|
39
|
-
]
|
|
40
|
-
}),
|
|
41
|
-
f.durationSecs > 0 && /* @__PURE__ */ u("span", {
|
|
42
|
-
className: "inline-flex items-center gap-1",
|
|
43
|
-
children: [
|
|
44
|
-
/* @__PURE__ */ l(a, { className: "h-3.5 w-3.5" }),
|
|
45
|
-
" ",
|
|
46
|
-
t(f.durationSecs)
|
|
47
|
-
]
|
|
48
|
-
}),
|
|
49
|
-
f.language && /* @__PURE__ */ u("span", {
|
|
50
|
-
className: "inline-flex items-center gap-1",
|
|
51
|
-
children: [
|
|
52
|
-
/* @__PURE__ */ l(s, { className: "h-3.5 w-3.5" }),
|
|
53
|
-
" ",
|
|
54
|
-
n(f.language)
|
|
55
|
-
]
|
|
56
|
-
}),
|
|
57
|
-
p && /* @__PURE__ */ u("a", {
|
|
58
|
-
href: p,
|
|
59
|
-
target: "_blank",
|
|
60
|
-
rel: "noreferrer noopener",
|
|
61
|
-
className: "inline-flex items-center gap-1 font-medium text-accent hover:underline",
|
|
62
|
-
children: [/* @__PURE__ */ l(o, { className: "h-3.5 w-3.5" }), " Listen"]
|
|
63
|
-
})
|
|
64
|
-
]
|
|
65
|
-
})
|
|
66
|
-
]
|
|
67
|
-
})]
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
//#endregion
|
|
71
|
-
export { f as OralHistoryCard };
|
|
72
|
-
|
|
73
|
-
//# sourceMappingURL=OralHistoryCard.js.map
|
|
1
|
+
import "../hooks/useFiles.js";
|
|
2
|
+
import "./StatusBadge.js";
|
|
3
|
+
import "./Waveform.js";
|
|
4
|
+
import "lucide-react";
|
|
5
|
+
import "react/jsx-runtime";
|
|
6
|
+
import "@burdenoff/fe-libs/ui";
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { cn as e } from "../utils/cn.js";
|
|
2
|
+
import { jsxs as t } from "react/jsx-runtime";
|
|
3
|
+
//#region src/theculturepost/components/OverlayBadge.tsx
|
|
4
|
+
var n = {
|
|
5
|
+
"top-left": "left-2 top-2",
|
|
6
|
+
"top-right": "right-2 top-2",
|
|
7
|
+
"bottom-left": "left-2 bottom-2",
|
|
8
|
+
"bottom-right": "right-2 bottom-2"
|
|
9
|
+
}, r = {
|
|
10
|
+
scrim: "bg-bg-canvas/85 text-text-primary backdrop-blur-sm",
|
|
11
|
+
solid: "bg-action-primary-bg text-action-primary-text"
|
|
12
|
+
};
|
|
13
|
+
function i({ children: i, icon: a, position: o = "top-left", variant: s = "scrim", className: c }) {
|
|
14
|
+
return /* @__PURE__ */ t("span", {
|
|
15
|
+
className: e("pointer-events-none absolute z-10 inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium shadow-sm", n[o], r[s], c),
|
|
16
|
+
children: [a, i]
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { i as OverlayBadge };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=OverlayBadge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OverlayBadge.js","names":[],"sources":["../../../src/theculturepost/components/OverlayBadge.tsx"],"sourcesContent":["/**\n * OverlayBadge — a small pill positioned over a cover image / decorative cover.\n * @module theculturepost/components\n *\n * Sits absolutely in a corner of a `relative` cover wrapper. A frosted\n * bg-canvas/scrim keeps it legible over arbitrary imagery while staying on\n * semantic tokens. Icon + label. Purely presentational (non-interactive).\n */\n\nimport type { ReactNode } from 'react';\nimport { cn } from '../utils/cn';\n\ntype OverlayPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\ninterface OverlayBadgeProps {\n children: ReactNode;\n /** Leading icon (already sized, e.g. `<Play className=\"h-3 w-3\" />`). */\n icon?: ReactNode;\n position?: OverlayPosition;\n /** Emphasis: `solid` uses the accent action token; `scrim` uses a frosted canvas. */\n variant?: 'scrim' | 'solid';\n className?: string;\n}\n\nconst POSITION: Record<OverlayPosition, string> = {\n 'top-left': 'left-2 top-2',\n 'top-right': 'right-2 top-2',\n 'bottom-left': 'left-2 bottom-2',\n 'bottom-right': 'right-2 bottom-2',\n};\n\nconst VARIANT = {\n scrim: 'bg-bg-canvas/85 text-text-primary backdrop-blur-sm',\n solid: 'bg-action-primary-bg text-action-primary-text',\n} as const;\n\nexport function OverlayBadge({\n children,\n icon,\n position = 'top-left',\n variant = 'scrim',\n className,\n}: OverlayBadgeProps) {\n return (\n <span\n className={cn(\n 'pointer-events-none absolute z-10 inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium shadow-sm',\n POSITION[position],\n VARIANT[variant],\n className\n )}\n >\n {icon}\n {children}\n </span>\n );\n}\n"],"mappings":";;;AAwBA,IAAM,IAA4C;CAChD,YAAY;CACZ,aAAa;CACb,eAAe;CACf,gBAAgB;CACjB,EAEK,IAAU;CACd,OAAO;CACP,OAAO;CACR;AAED,SAAgB,EAAa,EAC3B,aACA,SACA,cAAW,YACX,aAAU,SACV,gBACoB;AACpB,QACE,kBAAC,QAAD;EACE,WAAW,EACT,2HACA,EAAS,IACT,EAAQ,IACR,EACD;YANH,CAQG,GACA,EACI"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { cn as e } from "../utils/cn.js";
|
|
2
|
+
import { CoverImage as t } from "./CoverImage.js";
|
|
3
|
+
import { ArrowLeft as n } from "lucide-react";
|
|
4
|
+
import { Fragment as r, jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
5
|
+
import { AuroraBackground as o } from "@burdenoff/fe-libs/ui";
|
|
6
|
+
//#region src/theculturepost/components/PageHero.tsx
|
|
7
|
+
function s({ title: s, description: c, actions: l, eyebrow: u, coverFileId: d, decorative: f = !0, meta: p, backAction: m, className: h }) {
|
|
8
|
+
let g = !!d;
|
|
9
|
+
return /* @__PURE__ */ a("section", {
|
|
10
|
+
className: e("relative isolate overflow-hidden rounded-2xl border border-border-seam bg-bg-surface", h),
|
|
11
|
+
children: [g ? /* @__PURE__ */ a(r, { children: [/* @__PURE__ */ i(t, {
|
|
12
|
+
fileId: d,
|
|
13
|
+
alt: "",
|
|
14
|
+
rounded: "rounded-none",
|
|
15
|
+
className: "absolute inset-0 h-full w-full"
|
|
16
|
+
}), /* @__PURE__ */ i("div", {
|
|
17
|
+
className: "absolute inset-0 bg-gradient-to-t from-bg-canvas via-bg-canvas/85 to-bg-canvas/40",
|
|
18
|
+
"aria-hidden": "true"
|
|
19
|
+
})] }) : f && /* @__PURE__ */ i(o, { intensity: "subtle" }), /* @__PURE__ */ a("div", {
|
|
20
|
+
className: "relative flex flex-col gap-4 p-6 sm:p-8",
|
|
21
|
+
children: [m && /* @__PURE__ */ a("button", {
|
|
22
|
+
type: "button",
|
|
23
|
+
onClick: m.onClick,
|
|
24
|
+
className: "inline-flex w-fit items-center gap-1.5 text-sm font-medium text-text-secondary hover:text-text-primary",
|
|
25
|
+
children: [/* @__PURE__ */ i(n, {
|
|
26
|
+
className: "h-4 w-4",
|
|
27
|
+
"aria-hidden": "true"
|
|
28
|
+
}), m.label]
|
|
29
|
+
}), /* @__PURE__ */ a("div", {
|
|
30
|
+
className: "flex flex-col gap-4 sm:flex-row sm:items-end sm:justify-between",
|
|
31
|
+
children: [/* @__PURE__ */ a("div", {
|
|
32
|
+
className: "min-w-0 max-w-3xl",
|
|
33
|
+
children: [
|
|
34
|
+
u && /* @__PURE__ */ i("p", {
|
|
35
|
+
className: "mb-2 text-xs font-semibold uppercase tracking-[0.14em] text-accent",
|
|
36
|
+
children: u
|
|
37
|
+
}),
|
|
38
|
+
/* @__PURE__ */ i("h1", {
|
|
39
|
+
className: "font-display text-3xl font-semibold leading-[1.1] text-text-primary sm:text-4xl",
|
|
40
|
+
children: s
|
|
41
|
+
}),
|
|
42
|
+
c && /* @__PURE__ */ i("p", {
|
|
43
|
+
className: "mt-3 text-base leading-relaxed text-text-secondary",
|
|
44
|
+
children: c
|
|
45
|
+
}),
|
|
46
|
+
p && /* @__PURE__ */ i("div", {
|
|
47
|
+
className: "mt-4 flex flex-wrap items-center gap-2",
|
|
48
|
+
children: p
|
|
49
|
+
})
|
|
50
|
+
]
|
|
51
|
+
}), l && /* @__PURE__ */ i("div", {
|
|
52
|
+
className: "flex shrink-0 flex-wrap items-center gap-3",
|
|
53
|
+
children: l
|
|
54
|
+
})]
|
|
55
|
+
})]
|
|
56
|
+
})]
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
//#endregion
|
|
60
|
+
export { s as PageHero };
|
|
61
|
+
|
|
62
|
+
//# sourceMappingURL=PageHero.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageHero.js","names":[],"sources":["../../../src/theculturepost/components/PageHero.tsx"],"sourcesContent":["/**\n * PageHero — a rich editorial page header (a step up from PageLayout's bar).\n * @module theculturepost/components\n *\n * Renders one of two backdrops behind a big serif (.font-display) title:\n * - a cover-image banner (via {@link CoverImage}) with a token scrim for\n * legibility, when `coverFileId` resolves; or\n * - a token-only living-glass {@link AuroraBackground}, when `decorative` and no\n * cover is given (default). Set `decorative={false}` for a plain surface.\n *\n * Also supports an eyebrow, a back action, a meta/badge row, and a CTA slot.\n * Mobile-first: stacks under 640px, no horizontal overflow.\n */\n\nimport type { ReactNode } from 'react';\nimport { ArrowLeft } from 'lucide-react';\nimport { AuroraBackground } from '@burdenoff/fe-libs/ui';\nimport { cn } from '../utils/cn';\nimport { CoverImage } from './CoverImage';\n\nexport interface PageHeroBackAction {\n label: string;\n onClick: () => void;\n}\n\ninterface PageHeroProps {\n title: string;\n description?: string;\n /** CTA slot, right-aligned on desktop, full-width stack on mobile. */\n actions?: ReactNode;\n /** Small uppercase kicker above the title. */\n eyebrow?: string;\n /** Cover file id; when it resolves, the hero shows an image banner. */\n coverFileId?: string | null;\n /** Show the token-only aurora backdrop when there is no cover. Default true. */\n decorative?: boolean;\n /** Badge / meta row rendered under the description. */\n meta?: ReactNode;\n /** Optional back button shown above the eyebrow. */\n backAction?: PageHeroBackAction;\n className?: string;\n}\n\nexport function PageHero({\n title,\n description,\n actions,\n eyebrow,\n coverFileId,\n decorative = true,\n meta,\n backAction,\n className,\n}: PageHeroProps) {\n const hasCover = Boolean(coverFileId);\n\n return (\n <section\n className={cn(\n 'relative isolate overflow-hidden rounded-2xl border border-border-seam bg-bg-surface',\n className\n )}\n >\n {/* Backdrop */}\n {hasCover ? (\n <>\n <CoverImage\n fileId={coverFileId}\n alt=\"\"\n rounded=\"rounded-none\"\n className=\"absolute inset-0 h-full w-full\"\n />\n {/* Token scrim keeps text legible over arbitrary imagery */}\n <div\n className=\"absolute inset-0 bg-gradient-to-t from-bg-canvas via-bg-canvas/85 to-bg-canvas/40\"\n aria-hidden=\"true\"\n />\n </>\n ) : (\n decorative && <AuroraBackground intensity=\"subtle\" />\n )}\n\n <div className=\"relative flex flex-col gap-4 p-6 sm:p-8\">\n {backAction && (\n <button\n type=\"button\"\n onClick={backAction.onClick}\n className=\"inline-flex w-fit items-center gap-1.5 text-sm font-medium text-text-secondary hover:text-text-primary\"\n >\n <ArrowLeft className=\"h-4 w-4\" aria-hidden=\"true\" />\n {backAction.label}\n </button>\n )}\n\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-end sm:justify-between\">\n <div className=\"min-w-0 max-w-3xl\">\n {eyebrow && (\n <p className=\"mb-2 text-xs font-semibold uppercase tracking-[0.14em] text-accent\">\n {eyebrow}\n </p>\n )}\n <h1 className=\"font-display text-3xl font-semibold leading-[1.1] text-text-primary sm:text-4xl\">\n {title}\n </h1>\n {description && (\n <p className=\"mt-3 text-base leading-relaxed text-text-secondary\">{description}</p>\n )}\n {meta && <div className=\"mt-4 flex flex-wrap items-center gap-2\">{meta}</div>}\n </div>\n\n {actions && <div className=\"flex shrink-0 flex-wrap items-center gap-3\">{actions}</div>}\n </div>\n </div>\n </section>\n );\n}\n"],"mappings":";;;;;;AA2CA,SAAgB,EAAS,EACvB,UACA,gBACA,YACA,YACA,gBACA,gBAAa,IACb,SACA,eACA,gBACgB;CAChB,IAAM,IAAW,EAAQ;AAEzB,QACE,kBAAC,WAAD;EACE,WAAW,EACT,wFACA,EACD;YAJH,CAOG,IACC,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;GACE,QAAQ;GACR,KAAI;GACJ,SAAQ;GACR,WAAU;GACV,CAAA,EAEF,kBAAC,OAAD;GACE,WAAU;GACV,eAAY;GACZ,CAAA,CACD,EAAA,CAAA,GAEH,KAAc,kBAAC,GAAD,EAAkB,WAAU,UAAW,CAAA,EAGvD,kBAAC,OAAD;GAAK,WAAU;aAAf,CACG,KACC,kBAAC,UAAD;IACE,MAAK;IACL,SAAS,EAAW;IACpB,WAAU;cAHZ,CAKE,kBAAC,GAAD;KAAW,WAAU;KAAU,eAAY;KAAS,CAAA,EACnD,EAAW,MACL;OAGX,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf;MACG,KACC,kBAAC,KAAD;OAAG,WAAU;iBACV;OACC,CAAA;MAEN,kBAAC,MAAD;OAAI,WAAU;iBACX;OACE,CAAA;MACJ,KACC,kBAAC,KAAD;OAAG,WAAU;iBAAsD;OAAgB,CAAA;MAEpF,KAAQ,kBAAC,OAAD;OAAK,WAAU;iBAA0C;OAAW,CAAA;MACzE;QAEL,KAAW,kBAAC,OAAD;KAAK,WAAU;eAA8C;KAAc,CAAA,CACnF;MACF;KACE"}
|