@burdenoff/microfe-theculturepost 2026.705.2 → 2026.709.2

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 (234) hide show
  1. package/dist/dev/main.d.ts +2 -0
  2. package/dist/dev/main.d.ts.map +1 -0
  3. package/dist/generated/global-operations.d.ts +2 -0
  4. package/dist/generated/global-operations.d.ts.map +1 -0
  5. package/dist/generated/global-types.d.ts +18199 -0
  6. package/dist/generated/global-types.d.ts.map +1 -0
  7. package/dist/generated/wspace-operations.d.ts +2 -0
  8. package/dist/generated/wspace-operations.d.ts.map +1 -0
  9. package/dist/generated/wspace-types.d.ts +43046 -0
  10. package/dist/generated/wspace-types.d.ts.map +1 -0
  11. package/dist/index.d.ts +9 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +8 -1
  14. package/dist/services/assistantApi.d.ts +15 -0
  15. package/dist/services/assistantApi.d.ts.map +1 -0
  16. package/dist/services/assistantApi.js +204 -0
  17. package/dist/services/assistantApi.js.map +1 -0
  18. package/dist/services/createSandboxAssistantTransport.d.ts +26 -0
  19. package/dist/services/createSandboxAssistantTransport.d.ts.map +1 -0
  20. package/dist/services/createSandboxAssistantTransport.js +126 -0
  21. package/dist/services/createSandboxAssistantTransport.js.map +1 -0
  22. package/dist/theculturepost/TheCulturePostRoot.d.ts +5 -0
  23. package/dist/theculturepost/TheCulturePostRoot.d.ts.map +1 -0
  24. package/dist/theculturepost/TheCulturePostRoutes.d.ts +4 -0
  25. package/dist/theculturepost/TheCulturePostRoutes.d.ts.map +1 -0
  26. package/dist/theculturepost/TheCulturePostRoutes.js +73 -40
  27. package/dist/theculturepost/TheCulturePostRoutes.js.map +1 -1
  28. package/dist/theculturepost/components/AddCitationDialog.d.ts +11 -0
  29. package/dist/theculturepost/components/AddCitationDialog.d.ts.map +1 -0
  30. package/dist/theculturepost/components/ArchiveItemCard.d.ts +9 -0
  31. package/dist/theculturepost/components/ArchiveItemCard.d.ts.map +1 -0
  32. package/dist/theculturepost/components/AudioPlayer.d.ts +22 -0
  33. package/dist/theculturepost/components/AudioPlayer.d.ts.map +1 -0
  34. package/dist/theculturepost/components/AuthorLabel.d.ts +16 -0
  35. package/dist/theculturepost/components/AuthorLabel.d.ts.map +1 -0
  36. package/dist/theculturepost/components/AuthorLabel.js +1 -1
  37. package/dist/theculturepost/components/CitationList.d.ts +27 -0
  38. package/dist/theculturepost/components/CitationList.d.ts.map +1 -0
  39. package/dist/theculturepost/components/CollectionCard.d.ts +9 -0
  40. package/dist/theculturepost/components/CollectionCard.d.ts.map +1 -0
  41. package/dist/theculturepost/components/CoverImage.d.ts +13 -0
  42. package/dist/theculturepost/components/CoverImage.d.ts.map +1 -0
  43. package/dist/theculturepost/components/CreateArchiveItemDialog.d.ts +12 -0
  44. package/dist/theculturepost/components/CreateArchiveItemDialog.d.ts.map +1 -0
  45. package/dist/theculturepost/components/CreateCollectionDialog.d.ts +10 -0
  46. package/dist/theculturepost/components/CreateCollectionDialog.d.ts.map +1 -0
  47. package/dist/theculturepost/components/CreateStoryDialog.d.ts +12 -0
  48. package/dist/theculturepost/components/CreateStoryDialog.d.ts.map +1 -0
  49. package/dist/theculturepost/components/CreateTopicDialog.d.ts +10 -0
  50. package/dist/theculturepost/components/CreateTopicDialog.d.ts.map +1 -0
  51. package/dist/theculturepost/components/DecorativeCover.d.ts +17 -0
  52. package/dist/theculturepost/components/DecorativeCover.d.ts.map +1 -0
  53. package/dist/theculturepost/components/DecorativeDivider.d.ts +14 -0
  54. package/dist/theculturepost/components/DecorativeDivider.d.ts.map +1 -0
  55. package/dist/theculturepost/components/DiscussionCard.d.ts +9 -0
  56. package/dist/theculturepost/components/DiscussionCard.d.ts.map +1 -0
  57. package/dist/theculturepost/components/EmptyState.d.ts +18 -0
  58. package/dist/theculturepost/components/EmptyState.d.ts.map +1 -0
  59. package/dist/theculturepost/components/FileImage.d.ts +18 -0
  60. package/dist/theculturepost/components/FileImage.d.ts.map +1 -0
  61. package/dist/theculturepost/components/FileUploadField.d.ts +29 -0
  62. package/dist/theculturepost/components/FileUploadField.d.ts.map +1 -0
  63. package/dist/theculturepost/components/FilterTabs.d.ts +18 -0
  64. package/dist/theculturepost/components/FilterTabs.d.ts.map +1 -0
  65. package/dist/theculturepost/components/HistoryTimeline.d.ts +20 -0
  66. package/dist/theculturepost/components/HistoryTimeline.d.ts.map +1 -0
  67. package/dist/theculturepost/components/LifecycleStepper.d.ts +11 -0
  68. package/dist/theculturepost/components/LifecycleStepper.d.ts.map +1 -0
  69. package/dist/theculturepost/components/OpenDiscussionDialog.d.ts +12 -0
  70. package/dist/theculturepost/components/OpenDiscussionDialog.d.ts.map +1 -0
  71. package/dist/theculturepost/components/OralHistoryCard.d.ts +8 -0
  72. package/dist/theculturepost/components/OralHistoryCard.d.ts.map +1 -0
  73. package/dist/theculturepost/components/OverlayBadge.d.ts +15 -0
  74. package/dist/theculturepost/components/OverlayBadge.d.ts.map +1 -0
  75. package/dist/theculturepost/components/PageHero.d.ts +26 -0
  76. package/dist/theculturepost/components/PageHero.d.ts.map +1 -0
  77. package/dist/theculturepost/components/PageLayout.d.ts +16 -0
  78. package/dist/theculturepost/components/PageLayout.d.ts.map +1 -0
  79. package/dist/theculturepost/components/Pagination.d.ts +22 -0
  80. package/dist/theculturepost/components/Pagination.d.ts.map +1 -0
  81. package/dist/theculturepost/components/RecordOralHistoryDialog.d.ts +47 -0
  82. package/dist/theculturepost/components/RecordOralHistoryDialog.d.ts.map +1 -0
  83. package/dist/theculturepost/components/ReplyThread.d.ts +20 -0
  84. package/dist/theculturepost/components/ReplyThread.d.ts.map +1 -0
  85. package/dist/theculturepost/components/ReplyThread.js +1 -1
  86. package/dist/theculturepost/components/StateViews.d.ts +24 -0
  87. package/dist/theculturepost/components/StateViews.d.ts.map +1 -0
  88. package/dist/theculturepost/components/StatusBadge.d.ts +11 -0
  89. package/dist/theculturepost/components/StatusBadge.d.ts.map +1 -0
  90. package/dist/theculturepost/components/StoryCard.d.ts +11 -0
  91. package/dist/theculturepost/components/StoryCard.d.ts.map +1 -0
  92. package/dist/theculturepost/components/Tabs.d.ts +17 -0
  93. package/dist/theculturepost/components/Tabs.d.ts.map +1 -0
  94. package/dist/theculturepost/components/TagInput.d.ts +20 -0
  95. package/dist/theculturepost/components/TagInput.d.ts.map +1 -0
  96. package/dist/theculturepost/components/TopicCard.d.ts +9 -0
  97. package/dist/theculturepost/components/TopicCard.d.ts.map +1 -0
  98. package/dist/theculturepost/components/Waveform.d.ts +23 -0
  99. package/dist/theculturepost/components/Waveform.d.ts.map +1 -0
  100. package/dist/theculturepost/components/categoryMeta.d.ts +14 -0
  101. package/dist/theculturepost/components/categoryMeta.d.ts.map +1 -0
  102. package/dist/theculturepost/components/index.d.ts +43 -0
  103. package/dist/theculturepost/components/index.d.ts.map +1 -0
  104. package/dist/theculturepost/components/kindIcon.d.ts +7 -0
  105. package/dist/theculturepost/components/kindIcon.d.ts.map +1 -0
  106. package/dist/theculturepost/components/viz/BarChart.d.ts +23 -0
  107. package/dist/theculturepost/components/viz/BarChart.d.ts.map +1 -0
  108. package/dist/theculturepost/components/viz/Donut.d.ts +25 -0
  109. package/dist/theculturepost/components/viz/Donut.d.ts.map +1 -0
  110. package/dist/theculturepost/components/viz/StatTile.d.ts +14 -0
  111. package/dist/theculturepost/components/viz/StatTile.d.ts.map +1 -0
  112. package/dist/theculturepost/components/viz/index.d.ts +11 -0
  113. package/dist/theculturepost/components/viz/index.d.ts.map +1 -0
  114. package/dist/theculturepost/context/TheCulturePostContext.d.ts +16 -0
  115. package/dist/theculturepost/context/TheCulturePostContext.d.ts.map +1 -0
  116. package/dist/theculturepost/context/index.d.ts +6 -0
  117. package/dist/theculturepost/context/index.d.ts.map +1 -0
  118. package/dist/theculturepost/hooks/index.d.ts +10 -0
  119. package/dist/theculturepost/hooks/index.d.ts.map +1 -0
  120. package/dist/theculturepost/hooks/index.js +2 -0
  121. package/dist/theculturepost/hooks/useCursorPager.d.ts +32 -0
  122. package/dist/theculturepost/hooks/useCursorPager.d.ts.map +1 -0
  123. package/dist/theculturepost/hooks/useFiles.d.ts +31 -0
  124. package/dist/theculturepost/hooks/useFiles.d.ts.map +1 -0
  125. package/dist/theculturepost/hooks/usePageAnalytics.d.ts +9 -0
  126. package/dist/theculturepost/hooks/usePageAnalytics.d.ts.map +1 -0
  127. package/dist/theculturepost/hooks/usePageAnalytics.js +34 -0
  128. package/dist/theculturepost/hooks/usePageAnalytics.js.map +1 -0
  129. package/dist/theculturepost/hooks/useTcpApi.d.ts +74 -0
  130. package/dist/theculturepost/hooks/useTcpApi.d.ts.map +1 -0
  131. package/dist/theculturepost/hooks/useTr.d.ts +8 -0
  132. package/dist/theculturepost/hooks/useTr.d.ts.map +1 -0
  133. package/dist/theculturepost/hooks/useTr.js +14 -0
  134. package/dist/theculturepost/hooks/useTr.js.map +1 -0
  135. package/dist/theculturepost/index.d.ts +9 -0
  136. package/dist/theculturepost/index.d.ts.map +1 -0
  137. package/dist/theculturepost/index.js +2 -1
  138. package/dist/theculturepost/lib/graphql-cache.d.ts +26 -0
  139. package/dist/theculturepost/lib/graphql-cache.d.ts.map +1 -0
  140. package/dist/theculturepost/lib/toast.d.ts +23 -0
  141. package/dist/theculturepost/lib/toast.d.ts.map +1 -0
  142. package/dist/theculturepost/pages/HomePage.d.ts +16 -0
  143. package/dist/theculturepost/pages/HomePage.d.ts.map +1 -0
  144. package/dist/theculturepost/pages/HomePage.js +83 -68
  145. package/dist/theculturepost/pages/HomePage.js.map +1 -1
  146. package/dist/theculturepost/pages/archive/ArchiveItemDetailPage.d.ts +12 -0
  147. package/dist/theculturepost/pages/archive/ArchiveItemDetailPage.d.ts.map +1 -0
  148. package/dist/theculturepost/pages/archive/ArchiveItemDetailPage.js +21 -21
  149. package/dist/theculturepost/pages/archive/ArchivePage.d.ts +7 -0
  150. package/dist/theculturepost/pages/archive/ArchivePage.d.ts.map +1 -0
  151. package/dist/theculturepost/pages/archive/ArchivePage.js +144 -125
  152. package/dist/theculturepost/pages/archive/ArchivePage.js.map +1 -1
  153. package/dist/theculturepost/pages/archive/CollectionDetailPage.d.ts +12 -0
  154. package/dist/theculturepost/pages/archive/CollectionDetailPage.d.ts.map +1 -0
  155. package/dist/theculturepost/pages/discussions/DiscussionDetailPage.d.ts +12 -0
  156. package/dist/theculturepost/pages/discussions/DiscussionDetailPage.d.ts.map +1 -0
  157. package/dist/theculturepost/pages/discussions/DiscussionDetailPage.js +78 -70
  158. package/dist/theculturepost/pages/discussions/DiscussionDetailPage.js.map +1 -1
  159. package/dist/theculturepost/pages/discussions/DiscussionsPage.d.ts +10 -0
  160. package/dist/theculturepost/pages/discussions/DiscussionsPage.d.ts.map +1 -0
  161. package/dist/theculturepost/pages/discussions/DiscussionsPage.js +63 -56
  162. package/dist/theculturepost/pages/discussions/DiscussionsPage.js.map +1 -1
  163. package/dist/theculturepost/pages/governance/GovernancePage.d.ts +20 -0
  164. package/dist/theculturepost/pages/governance/GovernancePage.d.ts.map +1 -0
  165. package/dist/theculturepost/pages/stories/StoriesPage.d.ts +9 -0
  166. package/dist/theculturepost/pages/stories/StoriesPage.d.ts.map +1 -0
  167. package/dist/theculturepost/pages/stories/StoriesPage.js +65 -58
  168. package/dist/theculturepost/pages/stories/StoriesPage.js.map +1 -1
  169. package/dist/theculturepost/pages/stories/StoryDetailPage.d.ts +18 -0
  170. package/dist/theculturepost/pages/stories/StoryDetailPage.d.ts.map +1 -0
  171. package/dist/theculturepost/pages/stories/StoryDetailPage.js +249 -229
  172. package/dist/theculturepost/pages/stories/StoryDetailPage.js.map +1 -1
  173. package/dist/theculturepost/pages/timeline/TimelinePage.d.ts +17 -0
  174. package/dist/theculturepost/pages/timeline/TimelinePage.d.ts.map +1 -0
  175. package/dist/theculturepost/pages/topics/TopicDetailPage.d.ts +12 -0
  176. package/dist/theculturepost/pages/topics/TopicDetailPage.d.ts.map +1 -0
  177. package/dist/theculturepost/pages/topics/TopicsPage.d.ts +12 -0
  178. package/dist/theculturepost/pages/topics/TopicsPage.d.ts.map +1 -0
  179. package/dist/theculturepost/pages/topics/TopicsPage.js +61 -52
  180. package/dist/theculturepost/pages/topics/TopicsPage.js.map +1 -1
  181. package/dist/theculturepost/styles/injectDisplayFont.d.ts +14 -0
  182. package/dist/theculturepost/styles/injectDisplayFont.d.ts.map +1 -0
  183. package/dist/theculturepost/translations/ar.d.ts +50 -0
  184. package/dist/theculturepost/translations/ar.d.ts.map +1 -0
  185. package/dist/theculturepost/translations/ar.js +54 -0
  186. package/dist/theculturepost/translations/ar.js.map +1 -0
  187. package/dist/theculturepost/translations/en.d.ts +50 -0
  188. package/dist/theculturepost/translations/en.d.ts.map +1 -0
  189. package/dist/theculturepost/translations/en.js +54 -0
  190. package/dist/theculturepost/translations/en.js.map +1 -0
  191. package/dist/theculturepost/translations/es.d.ts +50 -0
  192. package/dist/theculturepost/translations/es.d.ts.map +1 -0
  193. package/dist/theculturepost/translations/es.js +54 -0
  194. package/dist/theculturepost/translations/es.js.map +1 -0
  195. package/dist/theculturepost/translations/hi.d.ts +50 -0
  196. package/dist/theculturepost/translations/hi.d.ts.map +1 -0
  197. package/dist/theculturepost/translations/hi.js +54 -0
  198. package/dist/theculturepost/translations/hi.js.map +1 -0
  199. package/dist/theculturepost/translations/index.d.ts +7 -0
  200. package/dist/theculturepost/translations/index.d.ts.map +1 -0
  201. package/dist/theculturepost/translations/ta.d.ts +50 -0
  202. package/dist/theculturepost/translations/ta.d.ts.map +1 -0
  203. package/dist/theculturepost/translations/ta.js +54 -0
  204. package/dist/theculturepost/translations/ta.js.map +1 -0
  205. package/dist/theculturepost/translations/zh.d.ts +50 -0
  206. package/dist/theculturepost/translations/zh.d.ts.map +1 -0
  207. package/dist/theculturepost/translations/zh.js +54 -0
  208. package/dist/theculturepost/translations/zh.js.map +1 -0
  209. package/dist/theculturepost/types/index.d.ts +333 -0
  210. package/dist/theculturepost/types/index.d.ts.map +1 -0
  211. package/dist/theculturepost/utils/cn.d.ts +4 -0
  212. package/dist/theculturepost/utils/cn.d.ts.map +1 -0
  213. package/dist/theculturepost/utils/formatters.d.ts +19 -0
  214. package/dist/theculturepost/utils/formatters.d.ts.map +1 -0
  215. package/dist/theculturepost/utils/i18n.d.ts +6 -0
  216. package/dist/theculturepost/utils/i18n.d.ts.map +1 -0
  217. package/dist/theculturepost/utils/index.d.ts +11 -0
  218. package/dist/theculturepost/utils/index.d.ts.map +1 -0
  219. package/dist/theculturepost/utils/index.js +6 -0
  220. package/dist/theculturepost/utils/nativeBridge.d.ts +47 -0
  221. package/dist/theculturepost/utils/nativeBridge.d.ts.map +1 -0
  222. package/dist/theculturepost/utils/nativeBridge.js +60 -0
  223. package/dist/theculturepost/utils/nativeBridge.js.map +1 -0
  224. package/dist/theculturepost/utils/navigation.d.ts +14 -0
  225. package/dist/theculturepost/utils/navigation.d.ts.map +1 -0
  226. package/dist/theculturepost/utils/slug.d.ts +6 -0
  227. package/dist/theculturepost/utils/slug.d.ts.map +1 -0
  228. package/dist/types/assistant.d.ts +56 -0
  229. package/dist/types/assistant.d.ts.map +1 -0
  230. package/dist/utils/pageContext.d.ts +27 -0
  231. package/dist/utils/pageContext.d.ts.map +1 -0
  232. package/dist/utils/pageContext.js +47 -0
  233. package/dist/utils/pageContext.js.map +1 -0
  234. package/package.json +29 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theculturepost/hooks/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC"}
@@ -1,3 +1,5 @@
1
+ import "./usePageAnalytics.js";
1
2
  import "./useFiles.js";
2
3
  import "./useTcpApi.js";
3
4
  import "./useCursorPager.js";
5
+ import "./useTr.js";
@@ -0,0 +1,32 @@
1
+ /**
2
+ * useCursorPager — forward/back cursor pagination for Tcp* list connections.
3
+ * @module theculturepost/hooks
4
+ *
5
+ * The svc paginates by cursor: a page must send `pagination.cursor = the
6
+ * previous page's pageInfo.cursor` to advance. This hook keeps a stack of the
7
+ * cursors that opened each visited page so Prev/Next are exact, and exposes a
8
+ * 0-indexed `page` for display.
9
+ */
10
+ export interface CursorPager {
11
+ /** 0-indexed page number for display. */
12
+ page: number;
13
+ /**
14
+ * Cursor that opens the current page — `undefined` on the first page so it is
15
+ * OMITTED from the GraphQL variables (the svc rejects an explicit `cursor: null`;
16
+ * a first page must send no cursor at all, per cursor-pagination convention).
17
+ */
18
+ cursor: string | undefined;
19
+ /** Advance to the next page using the current page's end cursor. No-op if null. */
20
+ next: (endCursor: string | null | undefined) => void;
21
+ /** Go back one page. No-op on the first page. */
22
+ prev: () => void;
23
+ /** Reset to the first page (call when filters change). */
24
+ reset: () => void;
25
+ /**
26
+ * Adapter for `<Pagination onPageChange>` — compares the requested page to the
27
+ * current one and calls next()/prev() accordingly.
28
+ */
29
+ onPageChange: (targetPage: number, endCursor: string | null | undefined) => void;
30
+ }
31
+ export declare function useCursorPager(): CursorPager;
32
+ //# sourceMappingURL=useCursorPager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCursorPager.d.ts","sourceRoot":"","sources":["../../../src/theculturepost/hooks/useCursorPager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,mFAAmF;IACnF,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,KAAK,IAAI,CAAC;IACrD,iDAAiD;IACjD,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,0DAA0D;IAC1D,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB;;;OAGG;IACH,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,KAAK,IAAI,CAAC;CAClF;AAED,wBAAgB,cAAc,IAAI,WAAW,CA4B5C"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * File hooks — covers, artifacts & recordings via wspace-files-svc (NO duplication).
3
+ * @module theculturepost/hooks
4
+ *
5
+ * TheCulturePost never stores blobs. Stories keep `coverFileId`, archive items
6
+ * keep `fileId`, citations keep `sourceFileId`, oral histories keep
7
+ * `recordingFileId` — all pointing at files owned by wspace-files-svc. Upload
8
+ * goes through the shared `uploadBlobToFiles` storage helper (presigned 3-step
9
+ * upload) against the workspace Apollo client the shell initialises; display
10
+ * resolves a file id to a presigned URL via `getFileDownloadUrl`.
11
+ */
12
+ export declare const FILE_FOLDERS: {
13
+ readonly covers: "/TheCulturePost/Covers";
14
+ readonly artifacts: "/TheCulturePost/Artifacts";
15
+ readonly recordings: "/TheCulturePost/Recordings";
16
+ };
17
+ export interface UploadedFile {
18
+ id: string;
19
+ url: string;
20
+ name: string;
21
+ }
22
+ /**
23
+ * Upload a file (image, audio, document…) to wspace-files-svc and return its id
24
+ * + a presigned URL. The caller persists the id (coverFileId / fileId /
25
+ * recordingFileId / sourceFileId) via the entity's own tcp* mutation; the URL is
26
+ * used for an immediate preview.
27
+ */
28
+ export declare function uploadImageToFiles(file: File, folderPath: string): Promise<UploadedFile>;
29
+ /** Resolve a wspace-files-svc file id to a presigned download URL for display. */
30
+ export declare function useFileUrl(fileId?: string | null): import('@tanstack/react-query').UseQueryResult<string | null, Error>;
31
+ //# sourceMappingURL=useFiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFiles.d.ts","sourceRoot":"","sources":["../../../src/theculturepost/hooks/useFiles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAgBH,eAAO,MAAM,YAAY;;;;CAIf,CAAC;AAgBX,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AASD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA+B9F;AAED,kFAAkF;AAClF,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,wEAqBhD"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Page-view analytics hook for TheCulturePost.
3
+ *
4
+ * Emits product-specific page-view events on the shared event bus. The shell's
5
+ * RybbitSink forwards allow-listed events to Rybbit Cloud; events not in the
6
+ * allowlist are dropped silently by the sink.
7
+ */
8
+ export declare function usePageAnalytics(): void;
9
+ //# sourceMappingURL=usePageAnalytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePageAnalytics.d.ts","sourceRoot":"","sources":["../../../src/theculturepost/hooks/usePageAnalytics.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoBH,wBAAgB,gBAAgB,IAAI,IAAI,CAoBvC"}
@@ -0,0 +1,34 @@
1
+ import { useTheCulturePost as e } from "../context/TheCulturePostContext.js";
2
+ import "../context/index.js";
3
+ import { useEffect as t } from "react";
4
+ import { useEventBus as n } from "@burdenoff/fe-libs/shared/events";
5
+ //#region src/theculturepost/hooks/usePageAnalytics.ts
6
+ var r = "theculturepost";
7
+ function i(e) {
8
+ let t = e.split("/").filter(Boolean), n = t[0] ?? "home";
9
+ return t.length <= 1 ? n : [
10
+ "stories",
11
+ "topics",
12
+ "discussions",
13
+ "archive"
14
+ ].includes(t[1] ?? "") ? t.length >= 3 ? `${t[1]}.detail` : t[1] ?? n : t.slice(1).join(".");
15
+ }
16
+ function a() {
17
+ let a = n(), { basePath: o } = e();
18
+ t(() => {
19
+ let e = () => {
20
+ let e = window.location.pathname, t = i(e.replace(o ?? "", "") || "/");
21
+ a.emitCustom("theculturepost.page.viewed", {
22
+ product: r,
23
+ page: t,
24
+ path: e,
25
+ referrer: typeof document < "u" ? document.referrer : void 0
26
+ });
27
+ };
28
+ return e(), window.addEventListener("popstate", e), () => window.removeEventListener("popstate", e);
29
+ }, [o, a]);
30
+ }
31
+ //#endregion
32
+ export { a as usePageAnalytics };
33
+
34
+ //# sourceMappingURL=usePageAnalytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePageAnalytics.js","names":[],"sources":["../../../src/theculturepost/hooks/usePageAnalytics.ts"],"sourcesContent":["/**\n * Page-view analytics hook for TheCulturePost.\n *\n * Emits product-specific page-view events on the shared event bus. The shell's\n * RybbitSink forwards allow-listed events to Rybbit Cloud; events not in the\n * allowlist are dropped silently by the sink.\n */\n\nimport { useEffect } from 'react';\nimport { useEventBus } from '@burdenoff/fe-libs/shared/events';\nimport { useTheCulturePost } from '#theculturepost/context';\n\nconst PRODUCT = 'theculturepost';\n\nfunction normalizePageName(pathname: string): string {\n const segments = pathname.split('/').filter(Boolean);\n const base = segments[0] ?? 'home';\n if (segments.length <= 1) return base;\n // Detail routes collapse to `{entity}.detail`\n if (['stories', 'topics', 'discussions', 'archive'].includes(segments[1] ?? '')) {\n if (segments.length >= 3) return `${segments[1]}.detail`;\n return segments[1] ?? base;\n }\n return segments.slice(1).join('.');\n}\n\nexport function usePageAnalytics(): void {\n const bus = useEventBus();\n const { basePath } = useTheCulturePost();\n\n useEffect(() => {\n const sendPageView = () => {\n const pathname = window.location.pathname;\n const pageName = normalizePageName(pathname.replace(basePath ?? '', '') || '/');\n bus.emitCustom('theculturepost.page.viewed', {\n product: PRODUCT,\n page: pageName,\n path: pathname,\n referrer: typeof document !== 'undefined' ? document.referrer : undefined,\n });\n };\n\n sendPageView();\n window.addEventListener('popstate', sendPageView);\n return () => window.removeEventListener('popstate', sendPageView);\n }, [basePath, bus]);\n}\n"],"mappings":";;;;;AAYA,IAAM,IAAU;AAEhB,SAAS,EAAkB,GAA0B;CACnD,IAAM,IAAW,EAAS,MAAM,IAAI,CAAC,OAAO,QAAQ,EAC9C,IAAO,EAAS,MAAM;AAO5B,QANI,EAAS,UAAU,IAAU,IAE7B;EAAC;EAAW;EAAU;EAAe;EAAU,CAAC,SAAS,EAAS,MAAM,GAAG,GACzE,EAAS,UAAU,IAAU,GAAG,EAAS,GAAG,WACzC,EAAS,MAAM,IAEjB,EAAS,MAAM,EAAE,CAAC,KAAK,IAAI;;AAGpC,SAAgB,IAAyB;CACvC,IAAM,IAAM,GAAa,EACnB,EAAE,gBAAa,GAAmB;AAExC,SAAgB;EACd,IAAM,UAAqB;GACzB,IAAM,IAAW,OAAO,SAAS,UAC3B,IAAW,EAAkB,EAAS,QAAQ,KAAY,IAAI,GAAG,IAAI,IAAI;AAC/E,KAAI,WAAW,8BAA8B;IAC3C,SAAS;IACT,MAAM;IACN,MAAM;IACN,UAAU,OAAO,WAAa,MAAc,SAAS,WAAW,KAAA;IACjE,CAAC;;AAKJ,SAFA,GAAc,EACd,OAAO,iBAAiB,YAAY,EAAa,QACpC,OAAO,oBAAoB,YAAY,EAAa;IAChE,CAAC,GAAU,EAAI,CAAC"}
@@ -0,0 +1,74 @@
1
+ import { TcpConnection, TcpStory, TcpStoryStatus, TcpTopic, TcpTopicCategory, TcpCitation, TcpVerificationStatus, TcpDiscussion, TcpReply, TcpModerationStatus, TcpCollection, TcpArchiveItem, TcpArchiveItemKind, TcpAccessLevel, TcpOralHistory, TcpCreateStoryInput, TcpUpdateStoryInput, TcpCreateTopicInput, TcpUpdateTopicInput, TcpCreateCitationInput, TcpCreateDiscussionInput, TcpCreateReplyInput, TcpCreateCollectionInput, TcpCreateArchiveItemInput, TcpUpdateArchiveItemInput, TcpCreateOralHistoryInput, PaginationInput } from '../types';
2
+
3
+ export interface StoryFilters {
4
+ status?: TcpStoryStatus;
5
+ topicId?: string;
6
+ pagination?: PaginationInput;
7
+ }
8
+ export declare const useTcpStories: (filters?: StoryFilters) => import('@tanstack/react-query').UseQueryResult<TcpConnection<TcpStory>, Error>;
9
+ export declare const useTcpStory: (id: string | undefined) => import('@tanstack/react-query').UseQueryResult<TcpStory | null, Error>;
10
+ export declare const useTcpCreateStory: () => import('@tanstack/react-query').UseMutationResult<TcpStory, Error, TcpCreateStoryInput, unknown>;
11
+ export declare const useTcpUpdateStory: () => import('@tanstack/react-query').UseMutationResult<TcpStory, Error, {
12
+ id: string;
13
+ input: TcpUpdateStoryInput;
14
+ }, unknown>;
15
+ export declare const useTcpTransitionStory: () => import('@tanstack/react-query').UseMutationResult<TcpStory, Error, {
16
+ id: string;
17
+ status: TcpStoryStatus;
18
+ }, unknown>;
19
+ export declare const useTcpCitations: (storyId: string | undefined) => import('@tanstack/react-query').UseQueryResult<TcpCitation[], Error>;
20
+ export declare const useTcpAddCitation: () => import('@tanstack/react-query').UseMutationResult<TcpCitation, Error, TcpCreateCitationInput, unknown>;
21
+ export declare const useTcpVerifyCitation: () => import('@tanstack/react-query').UseMutationResult<TcpCitation, Error, {
22
+ id: string;
23
+ verification: TcpVerificationStatus;
24
+ }, unknown>;
25
+ export interface TopicFilters {
26
+ category?: TcpTopicCategory;
27
+ pagination?: PaginationInput;
28
+ }
29
+ export declare const useTcpTopics: (filters?: TopicFilters) => import('@tanstack/react-query').UseQueryResult<TcpConnection<TcpTopic>, Error>;
30
+ export declare const useTcpTopic: (id: string | undefined) => import('@tanstack/react-query').UseQueryResult<TcpTopic | null, Error>;
31
+ export declare const useTcpCreateTopic: () => import('@tanstack/react-query').UseMutationResult<TcpTopic, Error, TcpCreateTopicInput, unknown>;
32
+ export declare const useTcpUpdateTopic: () => import('@tanstack/react-query').UseMutationResult<TcpTopic, Error, {
33
+ id: string;
34
+ input: TcpUpdateTopicInput;
35
+ }, unknown>;
36
+ export declare const useTcpArchiveTopic: () => import('@tanstack/react-query').UseMutationResult<boolean, Error, string, unknown>;
37
+ export interface DiscussionFilters {
38
+ status?: TcpModerationStatus;
39
+ storyId?: string;
40
+ pagination?: PaginationInput;
41
+ }
42
+ export declare const useTcpDiscussions: (filters?: DiscussionFilters) => import('@tanstack/react-query').UseQueryResult<TcpConnection<TcpDiscussion>, Error>;
43
+ export declare const useTcpDiscussion: (id: string | undefined) => import('@tanstack/react-query').UseQueryResult<TcpDiscussion | null, Error>;
44
+ export declare const useTcpReplies: (discussionId: string | undefined, status?: TcpModerationStatus) => import('@tanstack/react-query').UseQueryResult<TcpReply[], Error>;
45
+ export declare const useTcpOpenDiscussion: () => import('@tanstack/react-query').UseMutationResult<TcpDiscussion, Error, TcpCreateDiscussionInput, unknown>;
46
+ export declare const useTcpPostReply: () => import('@tanstack/react-query').UseMutationResult<TcpReply, Error, TcpCreateReplyInput, unknown>;
47
+ export declare const useTcpModerateReply: () => import('@tanstack/react-query').UseMutationResult<TcpReply, Error, {
48
+ id: string;
49
+ status: TcpModerationStatus;
50
+ }, unknown>;
51
+ export declare const useTcpLockDiscussion: () => import('@tanstack/react-query').UseMutationResult<TcpDiscussion, Error, string, unknown>;
52
+ export declare const useTcpCollections: (pagination?: PaginationInput) => import('@tanstack/react-query').UseQueryResult<TcpCollection[], Error>;
53
+ export declare const useTcpCollection: (id: string | undefined) => import('@tanstack/react-query').UseQueryResult<TcpCollection | null, Error>;
54
+ export declare const useTcpCreateCollection: () => import('@tanstack/react-query').UseMutationResult<TcpCollection, Error, TcpCreateCollectionInput, unknown>;
55
+ export interface ArchiveItemFilters {
56
+ accessLevel?: TcpAccessLevel;
57
+ collectionId?: string;
58
+ kind?: TcpArchiveItemKind;
59
+ pagination?: PaginationInput;
60
+ }
61
+ export declare const useTcpArchiveItems: (filters?: ArchiveItemFilters) => import('@tanstack/react-query').UseQueryResult<TcpConnection<TcpArchiveItem>, Error>;
62
+ export declare const useTcpArchiveItem: (id: string | undefined) => import('@tanstack/react-query').UseQueryResult<TcpArchiveItem | null, Error>;
63
+ export declare const useTcpCreateArchiveItem: () => import('@tanstack/react-query').UseMutationResult<TcpArchiveItem, Error, TcpCreateArchiveItemInput, unknown>;
64
+ export declare const useTcpUpdateArchiveItem: () => import('@tanstack/react-query').UseMutationResult<TcpArchiveItem, Error, {
65
+ id: string;
66
+ input: TcpUpdateArchiveItemInput;
67
+ }, unknown>;
68
+ export declare const useTcpArchiveArchiveItem: () => import('@tanstack/react-query').UseMutationResult<boolean, Error, {
69
+ id: string;
70
+ collectionId?: string | null;
71
+ }, unknown>;
72
+ export declare const useTcpOralHistories: (collectionId?: string) => import('@tanstack/react-query').UseQueryResult<TcpOralHistory[], Error>;
73
+ export declare const useTcpRecordOralHistory: () => import('@tanstack/react-query').UseMutationResult<TcpOralHistory, Error, TcpCreateOralHistoryInput, unknown>;
74
+ //# sourceMappingURL=useTcpApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTcpApi.d.ts","sourceRoot":"","sources":["../../../src/theculturepost/hooks/useTcpApi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Translation hook for TheCulturePost microfrontend.
3
+ *
4
+ * Wraps the shell's `useI18n()` and provides an inline English fallback plus
5
+ * simple `{{param}}` interpolation, matching the VibeControls MFE pattern.
6
+ */
7
+ export declare function useTr(): (key: string, fallback: string, params?: Record<string, string | number>) => string;
8
+ //# sourceMappingURL=useTr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTr.d.ts","sourceRoot":"","sources":["../../../src/theculturepost/hooks/useTr.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,wBAAgB,KAAK,UAIX,MAAM,YAAY,MAAM,WAAW,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KAAG,MAAM,CAYpF"}
@@ -0,0 +1,14 @@
1
+ import { useCallback as e } from "react";
2
+ import { useI18n as t } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
3
+ //#region src/theculturepost/hooks/useTr.ts
4
+ function n() {
5
+ let { t: n, locale: r } = t();
6
+ return e((e, t, r) => {
7
+ let i = n(e), a = i === e ? t : i;
8
+ return r ? Object.entries(r).reduce((e, [t, n]) => e.replace(RegExp(`\\{\\{${t}\\}\\}`, "g"), String(n)), a) : a;
9
+ }, [n, r]);
10
+ }
11
+ //#endregion
12
+ export { n as useTr };
13
+
14
+ //# sourceMappingURL=useTr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTr.js","names":[],"sources":["../../../src/theculturepost/hooks/useTr.ts"],"sourcesContent":["/**\n * Translation hook for TheCulturePost microfrontend.\n *\n * Wraps the shell's `useI18n()` and provides an inline English fallback plus\n * simple `{{param}}` interpolation, matching the VibeControls MFE pattern.\n */\n\nimport { useCallback } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\n\nexport function useTr() {\n const { t, locale } = useI18n();\n\n return useCallback(\n (key: string, fallback: string, params?: Record<string, string | number>): string => {\n const translated = t(key);\n const source = translated === key ? fallback : translated;\n if (!params) return source;\n return Object.entries(params).reduce(\n (acc, [paramKey, value]) =>\n acc.replace(new RegExp(`\\\\{\\\\{${paramKey}\\\\}\\\\}`, 'g'), String(value)),\n source\n );\n },\n [t, locale]\n );\n}\n"],"mappings":";;;AAUA,SAAgB,IAAQ;CACtB,IAAM,EAAE,MAAG,cAAW,GAAS;AAE/B,QAAO,GACJ,GAAa,GAAkB,MAAqD;EACnF,IAAM,IAAa,EAAE,EAAI,EACnB,IAAS,MAAe,IAAM,IAAW;AAE/C,SADK,IACE,OAAO,QAAQ,EAAO,CAAC,QAC3B,GAAK,CAAC,GAAU,OACf,EAAI,QAAY,OAAO,SAAS,EAAS,SAAS,IAAI,EAAE,OAAO,EAAM,CAAC,EACxE,EACD,GALmB;IAOtB,CAAC,GAAG,EAAO,CACZ"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * TheCulturePost Module Exports
3
+ * @module theculturepost
4
+ */
5
+ export { TheCulturePostRoot } from './TheCulturePostRoot';
6
+ export type { TheCulturePostRootProps, NavItem, FooterItem } from './types';
7
+ export { TheCulturePostProvider, useTheCulturePost } from './context';
8
+ export { cn, joinPath, formatDate, formatDateTime, formatRelativeTime, formatNumber, formatDuration, formatEnumLabel, tWithFallback, slugify, } from './utils';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/theculturepost/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,YAAY,EAAE,uBAAuB,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG5E,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAGtE,OAAO,EACL,EAAE,EACF,QAAQ,EACR,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,eAAe,EACf,aAAa,EACb,OAAO,GACR,MAAM,SAAS,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import "./utils/navigation.js";
2
2
  import "./context/TheCulturePostContext.js";
3
- import "./utils/cn.js";
4
3
  import "./context/index.js";
4
+ import "./utils/cn.js";
5
5
  import "./utils/formatters.js";
6
6
  import "./TheCulturePostRoot.js";
7
7
  import "./utils/i18n.js";
8
8
  import "./utils/slug.js";
9
+ import "./utils/index.js";
@@ -0,0 +1,26 @@
1
+ /**
2
+ * graphql-cache — invalidate fe-libs' imperative-fetch response cache after writes.
3
+ * @module theculturepost/lib
4
+ *
5
+ * `graphqlFetch` (from `@burdenoff/fe-libs/shared/graphql`) coalesces reads by
6
+ * caching every RESOLVED `query` response for ~15s (keyed by operationName +
7
+ * variables) and de-duping in-flight requests. A refetch issued right after a
8
+ * mutation — which is exactly what our React-Query `invalidateQueries` triggers
9
+ * — otherwise gets served the PRE-mutation response, so created/updated/deleted
10
+ * rows stay invisible until a full page reload.
11
+ *
12
+ * fe-libs' own Apollo client fixes this by calling `clearGraphqlFetchResponseCache()`
13
+ * on every mutation, but that helper is not re-exported from the package's public
14
+ * entry, and we use the raw `graphqlFetch` transport (no Apollo client). The two
15
+ * caches are plain `Map`s that fe-libs stores directly on `globalThis`
16
+ * (`getGraphqlFetchGlobalState()` returns `globalThis`), so we clear the same two
17
+ * globals here — mirroring `clearGraphqlFetchResponseCache` — to force every
18
+ * post-write read back onto the network.
19
+ */
20
+ /**
21
+ * Clear fe-libs' resolved-response cache and in-flight de-dupe map so the next
22
+ * read of any query hits the gateway. Safe to call unconditionally; a no-op
23
+ * before the caches have been created.
24
+ */
25
+ export declare function clearGraphqlResponseCache(): void;
26
+ //# sourceMappingURL=graphql-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-cache.d.ts","sourceRoot":"","sources":["../../../src/theculturepost/lib/graphql-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAOH;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAIhD"}
@@ -0,0 +1,23 @@
1
+ import { toast } from 'sonner';
2
+
3
+ /**
4
+ * Module-wide toast API. sonner is a global singleton; the matching <Toaster>
5
+ * is owned by the HOST app shell. Every page/component surfaces feedback through
6
+ * these helpers instead of hand-rolling fixed-position toast markup, so
7
+ * success/error notifications stay consistent with the rest of the platform.
8
+ *
9
+ * Durations follow the notification spec: success/info auto-dismiss, errors stay
10
+ * until the user dismisses them (sonner renders a close button and announces via
11
+ * aria-live).
12
+ */
13
+ export declare const notify: {
14
+ success(message: string, description?: string): void;
15
+ info(message: string, description?: string): void;
16
+ warning(message: string, description?: string): void;
17
+ error(message: string, description?: string): void;
18
+ dismiss(id?: string | number): void;
19
+ };
20
+ /** Normalize an unknown thrown value into a human-readable message. */
21
+ export declare function describeError(error: unknown): string;
22
+ export { toast };
23
+ //# sourceMappingURL=toast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../../../src/theculturepost/lib/toast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM;qBACA,MAAM,gBAAgB,MAAM,GAAG,IAAI;kBAGtC,MAAM,gBAAgB,MAAM,GAAG,IAAI;qBAGhC,MAAM,gBAAgB,MAAM,GAAG,IAAI;mBAGrC,MAAM,gBAAgB,MAAM,GAAG,IAAI;iBAGrC,MAAM,GAAG,MAAM,GAAG,IAAI;CAGpC,CAAC;AAEF,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIpD;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * HomePage — the editorial-magazine landing for TheCulturePost.
3
+ * @module theculturepost/pages
4
+ *
5
+ * Layout: a decorative {@link PageHero}, then a two-column magazine grid —
6
+ * - main column: "Featured topics" ({@link TopicCard}) + "Latest published
7
+ * stories" ({@link StoryCard} status:PUBLISHED)
8
+ * - right rail (compact): "Active discussions" (status:APPROVED) rows +
9
+ * "From the archive" collection thumbnails.
10
+ *
11
+ * Every surface links into its section and shows an honest empty state when it
12
+ * has no data. Only real schema fields are rendered — no fabricated metrics,
13
+ * avatars or imagery (topics/discussions use token-only decorative motifs).
14
+ */
15
+ export declare function HomePage(): import("react/jsx-runtime").JSX.Element;
16
+ //# sourceMappingURL=HomePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HomePage.d.ts","sourceRoot":"","sources":["../../../src/theculturepost/pages/HomePage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAiKH,wBAAgB,QAAQ,4CA2MvB"}
@@ -142,17 +142,20 @@ function k() {
142
142
  className: "flex-1 overflow-auto",
143
143
  children: /* @__PURE__ */ S("div", {
144
144
  className: "mx-auto flex max-w-7xl flex-col gap-8 p-4 sm:p-6",
145
- children: [/* @__PURE__ */ x(n, {
146
- eyebrow: "TheCulturePost",
147
- title: "Culture, religion, values & history — told with care",
148
- description: "A space for respectful stories and thoughtful conversations that connect us across traditions and time — grounded in the record.",
149
- actions: /* @__PURE__ */ S(C, {
150
- size: "lg",
151
- onClick: () => t("stories"),
152
- children: [/* @__PURE__ */ x(h, {
153
- className: "mr-1.5 h-4 w-4",
154
- "aria-hidden": "true"
155
- }), " Read stories"]
145
+ children: [/* @__PURE__ */ x("div", {
146
+ "data-tour": "theculturepost-home-hero",
147
+ children: /* @__PURE__ */ x(n, {
148
+ eyebrow: "TheCulturePost",
149
+ title: "Culture, religion, values & history — told with care",
150
+ description: "A space for respectful stories and thoughtful conversations that connect us across traditions and time — grounded in the record.",
151
+ actions: /* @__PURE__ */ S(C, {
152
+ size: "lg",
153
+ onClick: () => t("stories"),
154
+ children: [/* @__PURE__ */ x(h, {
155
+ className: "mr-1.5 h-4 w-4",
156
+ "aria-hidden": "true"
157
+ }), " Read stories"]
158
+ })
156
159
  })
157
160
  }), N ? /* @__PURE__ */ x(r, { label: "Loading the latest…" }) : P ? /* @__PURE__ */ x(l, {
158
161
  illustration: "onboarding",
@@ -187,16 +190,19 @@ function k() {
187
190
  label: "All topics",
188
191
  onClick: () => t("topics")
189
192
  }),
190
- children: k.length === 0 ? /* @__PURE__ */ x(l, {
191
- icon: /* @__PURE__ */ x(g, { className: "h-9 w-9" }),
192
- title: "No topics yet",
193
- description: "Curate the first topic to organise the publication."
194
- }) : /* @__PURE__ */ x("div", {
195
- className: "grid gap-4 sm:grid-cols-2",
196
- children: k.map((e) => /* @__PURE__ */ x(c, {
197
- topic: e,
198
- onOpen: () => t(`topics/${e.id}`)
199
- }, e.id))
193
+ children: /* @__PURE__ */ x("div", {
194
+ "data-tour": "theculturepost-home-topics",
195
+ children: k.length === 0 ? /* @__PURE__ */ x(l, {
196
+ icon: /* @__PURE__ */ x(g, { className: "h-9 w-9" }),
197
+ title: "No topics yet",
198
+ description: "Curate the first topic to organise the publication."
199
+ }) : /* @__PURE__ */ x("div", {
200
+ className: "grid gap-4 sm:grid-cols-2",
201
+ children: k.map((e) => /* @__PURE__ */ x(c, {
202
+ topic: e,
203
+ onOpen: () => t(`topics/${e.id}`)
204
+ }, e.id))
205
+ })
200
206
  })
201
207
  }), /* @__PURE__ */ x(T, {
202
208
  title: "Latest published stories",
@@ -205,58 +211,67 @@ function k() {
205
211
  label: "All stories",
206
212
  onClick: () => t("stories")
207
213
  }),
208
- children: A.length === 0 ? /* @__PURE__ */ x(l, {
209
- icon: /* @__PURE__ */ x(h, { className: "h-9 w-9" }),
210
- title: "No published stories yet",
211
- description: "Draft a story and move it through the editorial lifecycle to publish."
212
- }) : /* @__PURE__ */ x("div", {
213
- className: "grid gap-4 sm:grid-cols-2",
214
- children: A.map((e) => /* @__PURE__ */ x(s, {
215
- story: e,
216
- hideStatus: !0,
217
- onOpen: () => t(`stories/${e.id}`)
218
- }, e.id))
214
+ children: /* @__PURE__ */ x("div", {
215
+ "data-tour": "theculturepost-home-stories",
216
+ children: A.length === 0 ? /* @__PURE__ */ x(l, {
217
+ icon: /* @__PURE__ */ x(h, { className: "h-9 w-9" }),
218
+ title: "No published stories yet",
219
+ description: "Draft a story and move it through the editorial lifecycle to publish."
220
+ }) : /* @__PURE__ */ x("div", {
221
+ className: "grid gap-4 sm:grid-cols-2",
222
+ children: A.map((e) => /* @__PURE__ */ x(s, {
223
+ story: e,
224
+ hideStatus: !0,
225
+ onOpen: () => t(`stories/${e.id}`)
226
+ }, e.id))
227
+ })
219
228
  })
220
229
  })]
221
230
  }), /* @__PURE__ */ S("aside", {
222
231
  className: "flex flex-col gap-6",
223
- children: [/* @__PURE__ */ x(E, {
224
- title: "Active discussions",
225
- action: /* @__PURE__ */ x("button", {
226
- type: "button",
227
- onClick: () => t("discussions"),
228
- className: "text-xs font-medium text-accent hover:underline",
229
- children: "View all"
230
- }),
231
- children: j.length === 0 ? /* @__PURE__ */ x(l, {
232
- icon: /* @__PURE__ */ x(b, { className: "h-8 w-8" }),
233
- title: "No open discussions",
234
- description: "Open a discussion to invite thoughtful perspectives."
235
- }) : /* @__PURE__ */ x("div", {
236
- className: "-mx-2 flex flex-col",
237
- children: j.map((e) => /* @__PURE__ */ x(D, {
238
- discussion: e,
239
- onOpen: () => t(`discussions/${e.id}`)
240
- }, e.id))
232
+ children: [/* @__PURE__ */ x("div", {
233
+ "data-tour": "theculturepost-home-discussions",
234
+ children: /* @__PURE__ */ x(E, {
235
+ title: "Active discussions",
236
+ action: /* @__PURE__ */ x("button", {
237
+ type: "button",
238
+ onClick: () => t("discussions"),
239
+ className: "text-xs font-medium text-accent hover:underline",
240
+ children: "View all"
241
+ }),
242
+ children: j.length === 0 ? /* @__PURE__ */ x(l, {
243
+ icon: /* @__PURE__ */ x(b, { className: "h-8 w-8" }),
244
+ title: "No open discussions",
245
+ description: "Open a discussion to invite thoughtful perspectives."
246
+ }) : /* @__PURE__ */ x("div", {
247
+ className: "-mx-2 flex flex-col",
248
+ children: j.map((e) => /* @__PURE__ */ x(D, {
249
+ discussion: e,
250
+ onOpen: () => t(`discussions/${e.id}`)
251
+ }, e.id))
252
+ })
241
253
  })
242
- }), /* @__PURE__ */ x(E, {
243
- title: "From the archive",
244
- action: /* @__PURE__ */ x("button", {
245
- type: "button",
246
- onClick: () => t("archive"),
247
- className: "text-xs font-medium text-accent hover:underline",
248
- children: "View all"
249
- }),
250
- children: M.length === 0 ? /* @__PURE__ */ x(l, {
251
- icon: /* @__PURE__ */ x(y, { className: "h-8 w-8" }),
252
- title: "The archive is empty",
253
- description: "Create a collection to begin preserving heritage."
254
- }) : /* @__PURE__ */ x("div", {
255
- className: "grid grid-cols-1 gap-4 sm:grid-cols-2",
256
- children: M.map((e) => /* @__PURE__ */ x(O, {
257
- collection: e,
258
- onOpen: () => t(`archive/collections/${e.id}`)
259
- }, e.id))
254
+ }), /* @__PURE__ */ x("div", {
255
+ "data-tour": "theculturepost-home-archive",
256
+ children: /* @__PURE__ */ x(E, {
257
+ title: "From the archive",
258
+ action: /* @__PURE__ */ x("button", {
259
+ type: "button",
260
+ onClick: () => t("archive"),
261
+ className: "text-xs font-medium text-accent hover:underline",
262
+ children: "View all"
263
+ }),
264
+ children: M.length === 0 ? /* @__PURE__ */ x(l, {
265
+ icon: /* @__PURE__ */ x(y, { className: "h-8 w-8" }),
266
+ title: "The archive is empty",
267
+ description: "Create a collection to begin preserving heritage."
268
+ }) : /* @__PURE__ */ x("div", {
269
+ className: "grid grid-cols-1 gap-4 sm:grid-cols-2",
270
+ children: M.map((e) => /* @__PURE__ */ x(O, {
271
+ collection: e,
272
+ onOpen: () => t(`archive/collections/${e.id}`)
273
+ }, e.id))
274
+ })
260
275
  })
261
276
  })]
262
277
  })]