@adminide-stack/yantra-mobile 12.0.140 → 12.0.141

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 (213) hide show
  1. package/lib/features/agent-chat/NativeAgentChat.js +21 -4
  2. package/lib/features/agent-chat/NativeAgentChat.js.map +1 -1
  3. package/lib/features/chat/ApprovalCard.js +353 -0
  4. package/lib/features/chat/ApprovalCard.js.map +1 -0
  5. package/lib/features/chat/AskUserCard.js +9 -2
  6. package/lib/features/chat/AskUserCard.js.map +1 -1
  7. package/lib/features/chat/askUser.js +25 -3
  8. package/lib/features/chat/askUser.js.map +1 -1
  9. package/lib/features/chat/queuedFollowUpRows.js +13 -0
  10. package/lib/features/chat/queuedFollowUpRows.js.map +1 -0
  11. package/lib/features/discover/DiscoverArticle.js +105 -92
  12. package/lib/features/discover/DiscoverArticle.js.map +1 -1
  13. package/lib/features/discover/DiscoverFeed.js +97 -48
  14. package/lib/features/discover/DiscoverFeed.js.map +1 -1
  15. package/lib/features/discover/DiscoverFollowUp.js +135 -0
  16. package/lib/features/discover/DiscoverFollowUp.js.map +1 -0
  17. package/lib/features/discover/DiscoverSidebar.js +555 -0
  18. package/lib/features/discover/DiscoverSidebar.js.map +1 -0
  19. package/lib/features/discover/DiscoverSkeletons.js +123 -0
  20. package/lib/features/discover/DiscoverSkeletons.js.map +1 -0
  21. package/lib/features/discover/DiscoverStoryCards.js +193 -87
  22. package/lib/features/discover/DiscoverStoryCards.js.map +1 -1
  23. package/lib/features/discover/followUpQuery.js +42 -0
  24. package/lib/features/discover/followUpQuery.js.map +1 -0
  25. package/lib/features/discover/markets.js +37 -0
  26. package/lib/features/discover/markets.js.map +1 -0
  27. package/lib/features/discover/useDiscoverSidebar.js +148 -0
  28. package/lib/features/discover/useDiscoverSidebar.js.map +1 -0
  29. package/lib/features/discover/weather.js +42 -0
  30. package/lib/features/discover/weather.js.map +1 -0
  31. package/lib/features/expenses/ExpensesAgentChatPane.js +1 -1
  32. package/lib/features/expenses/ExpensesAgentChatPane.js.map +1 -1
  33. package/lib/features/inbox/InboxAgentChatPane.js +1 -1
  34. package/lib/features/inbox/InboxAgentChatPane.js.map +1 -1
  35. package/lib/features/job-search/JobSearchAgentChatPane.js +1 -0
  36. package/lib/features/job-search/JobSearchAgentChatPane.js.map +1 -1
  37. package/lib/features/local-services/LocalServicesAgentChatPane.js +1 -1
  38. package/lib/features/local-services/LocalServicesAgentChatPane.js.map +1 -1
  39. package/lib/features/movies/MoviesAgentChatPane.js +1 -1
  40. package/lib/features/movies/MoviesAgentChatPane.js.map +1 -1
  41. package/lib/features/notion/NotionBlockSheets.js +206 -0
  42. package/lib/features/notion/NotionBlockSheets.js.map +1 -0
  43. package/lib/features/notion/NotionBlockView.js +36 -0
  44. package/lib/features/notion/NotionBlockView.js.map +1 -0
  45. package/lib/features/notion/NotionCommentsSheet.js +461 -0
  46. package/lib/features/notion/NotionCommentsSheet.js.map +1 -0
  47. package/lib/features/notion/NotionConnectionsSheet.js +244 -0
  48. package/lib/features/notion/NotionConnectionsSheet.js.map +1 -0
  49. package/lib/features/notion/NotionHistorySheet.js +439 -0
  50. package/lib/features/notion/NotionHistorySheet.js.map +1 -0
  51. package/lib/features/notion/NotionMediaBlocks.js +803 -0
  52. package/lib/features/notion/NotionMediaBlocks.js.map +1 -0
  53. package/lib/features/notion/NotionMentionSheet.js +279 -0
  54. package/lib/features/notion/NotionMentionSheet.js.map +1 -0
  55. package/lib/features/notion/NotionPageMenu.js +585 -0
  56. package/lib/features/notion/NotionPageMenu.js.map +1 -0
  57. package/lib/features/notion/NotionPageTree.js +220 -0
  58. package/lib/features/notion/NotionPageTree.js.map +1 -0
  59. package/lib/features/notion/NotionPageView.js +1253 -152
  60. package/lib/features/notion/NotionPageView.js.map +1 -1
  61. package/lib/features/notion/NotionShareSheet.js +606 -0
  62. package/lib/features/notion/NotionShareSheet.js.map +1 -0
  63. package/lib/features/notion/NotionSheets.js +87 -15
  64. package/lib/features/notion/NotionSheets.js.map +1 -1
  65. package/lib/features/notion/NotionSidebarSections.js +492 -0
  66. package/lib/features/notion/NotionSidebarSections.js.map +1 -0
  67. package/lib/features/notion/NotionWorkspaceAdmin.js +659 -0
  68. package/lib/features/notion/NotionWorkspaceAdmin.js.map +1 -0
  69. package/lib/features/notion/NotionWorkspaceView.js +257 -45
  70. package/lib/features/notion/NotionWorkspaceView.js.map +1 -1
  71. package/lib/features/notion/database/DatabaseCells.js +554 -0
  72. package/lib/features/notion/database/DatabaseCells.js.map +1 -0
  73. package/lib/features/notion/database/DatabaseDateLayouts.js +792 -0
  74. package/lib/features/notion/database/DatabaseDateLayouts.js.map +1 -0
  75. package/lib/features/notion/database/DatabaseLayouts.js +461 -0
  76. package/lib/features/notion/database/DatabaseLayouts.js.map +1 -0
  77. package/lib/features/notion/database/DatabaseSheets.js +791 -0
  78. package/lib/features/notion/database/DatabaseSheets.js.map +1 -0
  79. package/lib/features/notion/database/NotionDatabaseView.js +817 -0
  80. package/lib/features/notion/database/NotionDatabaseView.js.map +1 -0
  81. package/lib/features/notion/database/RowPropertiesPanel.js +162 -0
  82. package/lib/features/notion/database/RowPropertiesPanel.js.map +1 -0
  83. package/lib/features/notion/database/chartData.js +89 -0
  84. package/lib/features/notion/database/chartData.js.map +1 -0
  85. package/lib/features/notion/database/chartView.js +112 -0
  86. package/lib/features/notion/database/chartView.js.map +1 -0
  87. package/lib/features/notion/database/connectorButton.js +33 -0
  88. package/lib/features/notion/database/connectorButton.js.map +1 -0
  89. package/lib/features/notion/database/databaseCalc.js +208 -0
  90. package/lib/features/notion/database/databaseCalc.js.map +1 -0
  91. package/lib/features/notion/database/databaseCalendar.js +157 -0
  92. package/lib/features/notion/database/databaseCalendar.js.map +1 -0
  93. package/lib/features/notion/database/databaseCsv.js +98 -0
  94. package/lib/features/notion/database/databaseCsv.js.map +1 -0
  95. package/lib/features/notion/database/databaseCsvActions.js +58 -0
  96. package/lib/features/notion/database/databaseCsvActions.js.map +1 -0
  97. package/lib/features/notion/database/databaseFilter.js +473 -0
  98. package/lib/features/notion/database/databaseFilter.js.map +1 -0
  99. package/lib/features/notion/database/databaseFormula.js +1072 -0
  100. package/lib/features/notion/database/databaseFormula.js.map +1 -0
  101. package/lib/features/notion/database/databaseGroup.js +151 -0
  102. package/lib/features/notion/database/databaseGroup.js.map +1 -0
  103. package/lib/features/notion/database/databaseRollup.js +58 -0
  104. package/lib/features/notion/database/databaseRollup.js.map +1 -0
  105. package/lib/features/notion/database/databaseTimeline.js +156 -0
  106. package/lib/features/notion/database/databaseTimeline.js.map +1 -0
  107. package/lib/features/notion/database/databaseView.js +1188 -0
  108. package/lib/features/notion/database/databaseView.js.map +1 -0
  109. package/lib/features/notion/database/databaseViews.js +310 -0
  110. package/lib/features/notion/database/databaseViews.js.map +1 -0
  111. package/lib/features/notion/database/relationSource.js +92 -0
  112. package/lib/features/notion/database/relationSource.js.map +1 -0
  113. package/lib/features/notion/database/uniqueId.js +17 -0
  114. package/lib/features/notion/database/uniqueId.js.map +1 -0
  115. package/lib/features/notion/database/useNotionDatabase.js +617 -0
  116. package/lib/features/notion/database/useNotionDatabase.js.map +1 -0
  117. package/lib/features/notion/notionAgentRunStatus.js +39 -0
  118. package/lib/features/notion/notionAgentRunStatus.js.map +1 -0
  119. package/lib/features/notion/notionCodeLanguages.js +112 -0
  120. package/lib/features/notion/notionCodeLanguages.js.map +1 -0
  121. package/lib/features/notion/notionComments.js +86 -0
  122. package/lib/features/notion/notionComments.js.map +1 -0
  123. package/lib/features/notion/notionConnections.js +74 -0
  124. package/lib/features/notion/notionConnections.js.map +1 -0
  125. package/lib/features/notion/notionDocuments.js +453 -1
  126. package/lib/features/notion/notionDocuments.js.map +1 -1
  127. package/lib/features/notion/notionEditorModel.js +142 -7
  128. package/lib/features/notion/notionEditorModel.js.map +1 -1
  129. package/lib/features/notion/notionMarkdownShortcuts.js +51 -0
  130. package/lib/features/notion/notionMarkdownShortcuts.js.map +1 -0
  131. package/lib/features/notion/notionMedia.js +119 -0
  132. package/lib/features/notion/notionMedia.js.map +1 -0
  133. package/lib/features/notion/notionMentionDate.js +32 -0
  134. package/lib/features/notion/notionMentionDate.js.map +1 -0
  135. package/lib/features/notion/notionMentionOptions.js +162 -0
  136. package/lib/features/notion/notionMentionOptions.js.map +1 -0
  137. package/lib/features/notion/notionNotesAgent.js +445 -0
  138. package/lib/features/notion/notionNotesAgent.js.map +1 -0
  139. package/lib/features/notion/notionPageAccess.js +168 -0
  140. package/lib/features/notion/notionPageAccess.js.map +1 -0
  141. package/lib/features/notion/notionPageActions.js +138 -0
  142. package/lib/features/notion/notionPageActions.js.map +1 -0
  143. package/lib/features/notion/notionPageHistory.js +154 -0
  144. package/lib/features/notion/notionPageHistory.js.map +1 -0
  145. package/lib/features/notion/notionPageKinds.js +200 -0
  146. package/lib/features/notion/notionPageKinds.js.map +1 -0
  147. package/lib/features/notion/notionRecents.js +48 -0
  148. package/lib/features/notion/notionRecents.js.map +1 -0
  149. package/lib/features/notion/notionRichText.js +177 -0
  150. package/lib/features/notion/notionRichText.js.map +1 -0
  151. package/lib/features/notion/notionRichTitle.js +336 -0
  152. package/lib/features/notion/notionRichTitle.js.map +1 -0
  153. package/lib/features/notion/useNotionWorkspace.js +272 -13
  154. package/lib/features/notion/useNotionWorkspace.js.map +1 -1
  155. package/lib/features/notion/usePageActions.js +155 -0
  156. package/lib/features/notion/usePageActions.js.map +1 -0
  157. package/lib/features/resume/ResumeAgentChatPane.js +1 -1
  158. package/lib/features/resume/ResumeAgentChatPane.js.map +1 -1
  159. package/lib/features/shopping/ShoppingAgentChatPane.js +1 -1
  160. package/lib/features/shopping/ShoppingAgentChatPane.js.map +1 -1
  161. package/lib/features/study/StudyAgentChatPane.js +1 -1
  162. package/lib/features/study/StudyAgentChatPane.js.map +1 -1
  163. package/lib/features/travel/TravelAgentChatPane.js +1 -1
  164. package/lib/features/travel/TravelAgentChatPane.js.map +1 -1
  165. package/lib/features/webbuilder/WebBuilderExperience.js +40 -8
  166. package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
  167. package/lib/features/webbuilder/buildFragments.js +1 -1
  168. package/lib/features/webbuilder/buildFragments.js.map +1 -1
  169. package/lib/features/webbuilder/codeFiles.js +302 -0
  170. package/lib/features/webbuilder/codeFiles.js.map +1 -0
  171. package/lib/features/webbuilder/codeHighlight.js +209 -0
  172. package/lib/features/webbuilder/codeHighlight.js.map +1 -0
  173. package/lib/features/webbuilder/components/CodeView.js +682 -52
  174. package/lib/features/webbuilder/components/CodeView.js.map +1 -1
  175. package/lib/features/webbuilder/components/PreviewScreen.js +59 -38
  176. package/lib/features/webbuilder/components/PreviewScreen.js.map +1 -1
  177. package/lib/features/webbuilder/components/ProjectChat.js +3 -3
  178. package/lib/features/webbuilder/components/ProjectChat.js.map +1 -1
  179. package/lib/features/webbuilder/stepLabels.js +68 -0
  180. package/lib/features/webbuilder/stepLabels.js.map +1 -0
  181. package/lib/hooks/useHostChatSteering.js +45 -0
  182. package/lib/hooks/useHostChatSteering.js.map +1 -0
  183. package/lib/screens/Chat/index.js +2 -12
  184. package/lib/screens/Chat/index.js.map +1 -1
  185. package/lib/screens/ExpensesNative/useExpensesHostChat.js +25 -5
  186. package/lib/screens/ExpensesNative/useExpensesHostChat.js.map +1 -1
  187. package/lib/screens/InboxNative/useInboxHostChat.js +25 -5
  188. package/lib/screens/InboxNative/useInboxHostChat.js.map +1 -1
  189. package/lib/screens/JobSearchNative/useJobSearchHostChat.js +25 -5
  190. package/lib/screens/JobSearchNative/useJobSearchHostChat.js.map +1 -1
  191. package/lib/screens/LocalServicesNative/useLocalServicesHostChat.js +25 -5
  192. package/lib/screens/LocalServicesNative/useLocalServicesHostChat.js.map +1 -1
  193. package/lib/screens/MoviesNative/useMoviesHostChat.js +25 -5
  194. package/lib/screens/MoviesNative/useMoviesHostChat.js.map +1 -1
  195. package/lib/screens/NotionPage/index.js +2 -2
  196. package/lib/screens/NotionPage/index.js.map +1 -1
  197. package/lib/screens/ResumeNative/useResumeHostChat.js +25 -5
  198. package/lib/screens/ResumeNative/useResumeHostChat.js.map +1 -1
  199. package/lib/screens/ShoppingNative/useShoppingHostChat.js +25 -5
  200. package/lib/screens/ShoppingNative/useShoppingHostChat.js.map +1 -1
  201. package/lib/screens/StudyNative/useStudyHostChat.js +25 -5
  202. package/lib/screens/StudyNative/useStudyHostChat.js.map +1 -1
  203. package/lib/screens/TravelNative/useTravelHostChat.js +25 -5
  204. package/lib/screens/TravelNative/useTravelHostChat.js.map +1 -1
  205. package/lib/screens/WebBuilderNative/codeWorkspaceApi.js +222 -0
  206. package/lib/screens/WebBuilderNative/codeWorkspaceApi.js.map +1 -0
  207. package/lib/screens/WebBuilderNative/index.js +1 -1
  208. package/lib/screens/WebBuilderNative/index.js.map +1 -1
  209. package/lib/screens/WebBuilderNative/sandboxProxyApi.js +126 -4
  210. package/lib/screens/WebBuilderNative/sandboxProxyApi.js.map +1 -1
  211. package/lib/screens/WebBuilderNative/useWebBuilderHost.js +120 -11
  212. package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
  213. package/package.json +3 -3
@@ -1,4 +1,4 @@
1
- import {jsx,jsxs}from'react/jsx-runtime';import {useMemo,useRef,useEffect,useCallback,useState}from'react';import {ActivityIndicator,View,StyleSheet,ScrollView,Text,Pressable}from'react-native';import {Image}from'expo-image';import {Ionicons}from'@expo/vector-icons';import {useNavigation}from'@react-navigation/native';import {AssistantMarkdown}from'../chat/AssistantMarkdown.js';import {useChatLinkOpener}from'../links/chatLinkOpener.js';import {normalizeSources,cleanArticleContent,formatPublishedAt,faviconUrl,getStoryId}from'./articleContent.js';import {discoverPalette,openDiscoverArticle,TagChip,DISCOVER_SERIF,CompactStoryCard}from'./DiscoverStoryCards.js';import {useNewsArticle,useNewsArticlesInfinite}from'./useDiscoverNews.js';const MAX_SOURCE_CARDS = 8;
1
+ import {jsx,jsxs}from'react/jsx-runtime';import {useMemo,useRef,useState,useEffect,useCallback}from'react';import {ScrollView,StyleSheet,View,Text,Pressable,Platform}from'react-native';import {Image}from'expo-image';import {Ionicons}from'@expo/vector-icons';import {useNavigation}from'@react-navigation/native';import {AppKeyboardAvoidingView}from'../../components/AppKeyboardAvoidingView.js';import {AssistantMarkdown}from'../chat/AssistantMarkdown.js';import {useChatLinkOpener}from'../links/chatLinkOpener.js';import {normalizeSources,cleanArticleContent,formatPublishedAt,faviconUrl,getStoryId}from'./articleContent.js';import {FOLLOW_UP_RESERVED_HEIGHT,DiscoverFollowUp}from'./DiscoverFollowUp.js';import {DiscoverArticleSkeleton}from'./DiscoverSkeletons.js';import {discoverPalette,openDiscoverArticle,TagChip,DiscoverCard,DISCOVER_SERIF,DiscoverMoreCard}from'./DiscoverStoryCards.js';import {useNewsArticle,useNewsArticlesInfinite}from'./useDiscoverNews.js';const MAX_SOURCE_CARDS = 8;
2
2
  const DISCOVER_MORE_COUNT = 4;
3
3
  function SourceFavicon({
4
4
  source,
@@ -32,12 +32,7 @@ function SourceCards({
32
32
  onOpen
33
33
  }) {
34
34
  if (sources.length === 0) return null;
35
- return /* @__PURE__ */ jsx(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: styles.sourcesScroll, contentContainerStyle: styles.sourcesContent, children: sources.slice(0, MAX_SOURCE_CARDS).map((source, index) => /* @__PURE__ */ jsxs(Pressable, { accessibilityRole: source.url ? "link" : void 0, disabled: !source.url, onPress: () => source.url && onOpen(source.url), style: ({
36
- pressed
37
- }) => [styles.sourceCard, {
38
- backgroundColor: palette.imagePlaceholder,
39
- borderColor: palette.cardBorder
40
- }, pressed && styles.pressed], children: [
35
+ return /* @__PURE__ */ jsx(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: styles.sourcesScroll, contentContainerStyle: styles.sourcesContent, children: sources.slice(0, MAX_SOURCE_CARDS).map((source, index) => /* @__PURE__ */ jsxs(DiscoverCard, { palette, radius: 16, onPress: source.url ? () => source.url && onOpen(source.url) : void 0, accessibilityLabel: [source.name, source.title].filter(Boolean).join(", "), innerStyle: styles.sourceCard, children: [
41
36
  /* @__PURE__ */ jsxs(View, { style: styles.sourceHead, children: [
42
37
  /* @__PURE__ */ jsx(SourceFavicon, { source, size: 16, palette }),
43
38
  /* @__PURE__ */ jsx(Text, { style: [styles.sourceName, {
@@ -62,16 +57,21 @@ function DiscoverMore({
62
57
  const currentId = getStoryId(article);
63
58
  const related = articles.filter((story) => getStoryId(story) !== currentId).slice(0, DISCOVER_MORE_COUNT);
64
59
  if (related.length === 0) return null;
60
+ const rows = [];
61
+ for (let index = 0; index < related.length; index += 2) rows.push(related.slice(index, index + 2));
65
62
  return /* @__PURE__ */ jsxs(View, { style: [styles.more, {
66
63
  borderTopColor: palette.border
67
64
  }], children: [
68
65
  /* @__PURE__ */ jsxs(View, { style: styles.moreHead, children: [
69
- /* @__PURE__ */ jsx(Ionicons, { name: "sparkles-outline", size: 18, color: palette.text }),
66
+ /* @__PURE__ */ jsx(Ionicons, { name: "sparkles-outline", size: 20, color: palette.primary }),
70
67
  /* @__PURE__ */ jsx(Text, { style: [styles.moreTitle, {
71
68
  color: palette.text
72
- }], children: "Discover more" })
69
+ }], accessibilityRole: "header", children: "Discover more" })
73
70
  ] }),
74
- /* @__PURE__ */ jsx(View, { style: styles.moreList, children: related.map((story) => /* @__PURE__ */ jsx(CompactStoryCard, { story, palette, onPress: onOpen }, getStoryId(story))) })
71
+ /* @__PURE__ */ jsx(View, { style: styles.moreList, children: rows.map((row) => /* @__PURE__ */ jsxs(View, { style: styles.moreRow, children: [
72
+ row.map((story) => /* @__PURE__ */ jsx(DiscoverMoreCard, { story, palette, onPress: onOpen }, getStoryId(story))),
73
+ row.length === 1 ? /* @__PURE__ */ jsx(View, { style: styles.moreSpacer }) : null
74
+ ] }, getStoryId(row[0]))) })
75
75
  ] });
76
76
  }
77
77
  function StateMessage({
@@ -97,6 +97,8 @@ function DiscoverArticle({
97
97
  const palette = useMemo(() => discoverPalette(isDark), [isDark]);
98
98
  const openLink = useChatLinkOpener();
99
99
  const scrollRef = useRef(null);
100
+ const rootRef = useRef(null);
101
+ const [topOffset, setTopOffset] = useState(0);
100
102
  const {
101
103
  article,
102
104
  loading,
@@ -118,79 +120,86 @@ function DiscoverArticle({
118
120
  return article ? cleanArticleContent(article.content, article.title, (_a = article.summary) != null ? _a : void 0, (_b = article.imageUrl) != null ? _b : void 0) : "";
119
121
  }, [article]);
120
122
  if (!article) {
121
- let body;
122
123
  if (loading) {
123
- body = /* @__PURE__ */ jsx(ActivityIndicator, { color: palette.primary });
124
- } else if (error) {
125
- body = /* @__PURE__ */ jsx(StateMessage, { title: "Unable to load article", description: "Something went wrong while fetching this article. Please try again in a moment.", palette });
126
- } else {
127
- body = /* @__PURE__ */ jsx(StateMessage, { title: "Article not found", description: "We could not find this news article. It may not be available yet or may have been removed.", palette });
124
+ return /* @__PURE__ */ jsx(ScrollView, { style: {
125
+ backgroundColor: palette.bg
126
+ }, contentContainerStyle: styles.content, children: /* @__PURE__ */ jsx(DiscoverArticleSkeleton, { palette }) });
128
127
  }
129
128
  return /* @__PURE__ */ jsx(View, { style: [styles.state, {
130
129
  backgroundColor: palette.bg
131
- }], children: body });
130
+ }], children: error ? /* @__PURE__ */ jsx(StateMessage, { title: "Unable to load article", description: "Something went wrong while fetching this article. Please try again in a moment.", palette }) : /* @__PURE__ */ jsx(StateMessage, { title: "Article not found", description: "We could not find this news article. It may not be available yet or may have been removed.", palette }) });
132
131
  }
133
132
  const publishedLabel = formatPublishedAt(article.publishedAt);
134
133
  const sourceCountLabel = article.sourceCount === 1 ? "1 source" : `${article.sourceCount || sources.length} sources`;
135
134
  const [leadSource] = sources;
136
- return /* @__PURE__ */ jsxs(ScrollView, { ref: scrollRef, style: {
135
+ return /* @__PURE__ */ jsx(AppKeyboardAvoidingView, { behavior: Platform.OS === "ios" ? "padding" : void 0, keyboardVerticalOffset: topOffset, style: [styles.root, {
137
136
  backgroundColor: palette.bg
138
- }, contentContainerStyle: styles.content, children: [
139
- /* @__PURE__ */ jsx(View, { style: styles.tagRow, children: /* @__PURE__ */ jsx(TagChip, { label: article.tag, palette }) }),
140
- /* @__PURE__ */ jsx(Text, { style: [styles.title, {
141
- color: palette.text
142
- }], accessibilityRole: "header", children: article.title }),
143
- article.summary ? /* @__PURE__ */ jsx(Text, { style: [styles.summary, {
144
- color: palette.text
145
- }], children: article.summary }) : null,
146
- leadSource ? /* @__PURE__ */ jsxs(Pressable, { accessibilityRole: leadSource.url ? "link" : void 0, disabled: !leadSource.url, onPress: () => leadSource.url && openLink(leadSource.url), style: [styles.leadPill, {
147
- backgroundColor: palette.imagePlaceholder,
148
- borderColor: palette.cardBorder
149
- }], children: [
150
- /* @__PURE__ */ jsx(SourceFavicon, { source: leadSource, size: 14, palette }),
151
- /* @__PURE__ */ jsx(Text, { style: [styles.leadPillText, {
152
- color: palette.textMuted
153
- }], numberOfLines: 1, children: leadSource.name }),
154
- sources.length > 1 ? /* @__PURE__ */ jsxs(Text, { style: [styles.leadPillText, {
155
- color: palette.textMuted
137
+ }], children: /* @__PURE__ */ jsxs(View, { ref: rootRef, style: styles.root, onLayout: () => {
138
+ var _a;
139
+ return (_a = rootRef.current) == null ? void 0 : _a.measureInWindow((_x, y) => setTopOffset(Math.max(0, y)));
140
+ }, children: [
141
+ /* @__PURE__ */ jsxs(ScrollView, { ref: scrollRef, style: {
142
+ backgroundColor: palette.bg
143
+ }, contentContainerStyle: [styles.content, {
144
+ paddingBottom: FOLLOW_UP_RESERVED_HEIGHT + 32
145
+ }], keyboardShouldPersistTaps: "handled", keyboardDismissMode: "interactive", children: [
146
+ /* @__PURE__ */ jsx(View, { style: styles.tagRow, children: /* @__PURE__ */ jsx(TagChip, { label: article.tag, palette }) }),
147
+ /* @__PURE__ */ jsx(Text, { style: [styles.title, {
148
+ color: palette.text
149
+ }], accessibilityRole: "header", children: article.title }),
150
+ article.summary ? /* @__PURE__ */ jsx(Text, { style: [styles.summary, {
151
+ color: palette.text
152
+ }], children: article.summary }) : null,
153
+ leadSource ? /* @__PURE__ */ jsxs(Pressable, { accessibilityRole: leadSource.url ? "link" : void 0, disabled: !leadSource.url, onPress: () => leadSource.url && openLink(leadSource.url), style: [styles.leadPill, {
154
+ backgroundColor: palette.imagePlaceholder,
155
+ borderColor: palette.cardBorder
156
156
  }], children: [
157
- "+",
158
- sources.length - 1
159
- ] }) : null
160
- ] }) : null,
161
- /* @__PURE__ */ jsxs(View, { style: [styles.byline, {
162
- borderBottomColor: palette.border
163
- }], children: [
164
- /* @__PURE__ */ jsxs(View, { style: styles.bylineItem, children: [
165
- /* @__PURE__ */ jsx(View, { style: [styles.bylineIcon, {
166
- backgroundColor: palette.text
167
- }], children: /* @__PURE__ */ jsx(Ionicons, { name: "layers-outline", size: 13, color: palette.bg }) }),
168
- /* @__PURE__ */ jsxs(Text, { style: [styles.bylineStrong, {
157
+ /* @__PURE__ */ jsx(SourceFavicon, { source: leadSource, size: 14, palette }),
158
+ /* @__PURE__ */ jsx(Text, { style: [styles.leadPillText, {
159
+ color: palette.textMuted
160
+ }], numberOfLines: 1, children: leadSource.name }),
161
+ sources.length > 1 ? /* @__PURE__ */ jsxs(Text, { style: [styles.leadPillText, {
169
162
  color: palette.textMuted
170
163
  }], children: [
171
- "Summarized from ",
172
- sourceCountLabel
173
- ] })
164
+ "+",
165
+ sources.length - 1
166
+ ] }) : null
167
+ ] }) : null,
168
+ /* @__PURE__ */ jsxs(View, { style: [styles.byline, {
169
+ borderBottomColor: palette.border
170
+ }], children: [
171
+ /* @__PURE__ */ jsxs(View, { style: styles.bylineItem, children: [
172
+ /* @__PURE__ */ jsx(View, { style: [styles.bylineIcon, {
173
+ backgroundColor: palette.primarySoft
174
+ }], children: /* @__PURE__ */ jsx(Ionicons, { name: "layers-outline", size: 13, color: palette.primary }) }),
175
+ /* @__PURE__ */ jsxs(Text, { style: [styles.bylineStrong, {
176
+ color: palette.textMuted
177
+ }], children: [
178
+ "Summarized from ",
179
+ sourceCountLabel
180
+ ] })
181
+ ] }),
182
+ publishedLabel ? /* @__PURE__ */ jsxs(Pressable, { accessibilityRole: "link", onPress: () => article.href && openLink(article.href), style: styles.bylineItem, children: [
183
+ /* @__PURE__ */ jsx(Ionicons, { name: "time-outline", size: 14, color: palette.textMuted }),
184
+ /* @__PURE__ */ jsx(Text, { style: [styles.bylineText, {
185
+ color: palette.textMuted
186
+ }], children: publishedLabel })
187
+ ] }) : null
174
188
  ] }),
175
- publishedLabel ? /* @__PURE__ */ jsxs(Pressable, { accessibilityRole: "link", onPress: () => article.href && openLink(article.href), style: styles.bylineItem, children: [
176
- /* @__PURE__ */ jsx(Ionicons, { name: "time-outline", size: 14, color: palette.textMuted }),
177
- /* @__PURE__ */ jsx(Text, { style: [styles.bylineText, {
178
- color: palette.textMuted
179
- }], children: publishedLabel })
180
- ] }) : null
189
+ /* @__PURE__ */ jsx(SourceCards, { sources, palette, onOpen: openLink }),
190
+ article.imageUrl ? /* @__PURE__ */ jsx(DiscoverCard, { palette, radius: 22, style: styles.hero, innerStyle: styles.heroInner, children: /* @__PURE__ */ jsx(Image, { source: {
191
+ uri: article.imageUrl
192
+ }, style: StyleSheet.absoluteFill, contentFit: "cover", transition: 150, accessibilityIgnoresInvertColors: true }) }) : null,
193
+ content ? /* @__PURE__ */ jsx(View, { style: styles.body, children: /* @__PURE__ */ jsx(AssistantMarkdown, { text: content, isDark }) }) : null,
194
+ /* @__PURE__ */ jsx(DiscoverMore, { article, palette, onOpen: onOpenStory })
181
195
  ] }),
182
- /* @__PURE__ */ jsx(SourceCards, { sources, palette, onOpen: openLink }),
183
- article.imageUrl ? /* @__PURE__ */ jsx(View, { style: [styles.hero, {
184
- backgroundColor: palette.imagePlaceholder,
185
- borderColor: palette.cardBorder
186
- }], children: /* @__PURE__ */ jsx(Image, { source: {
187
- uri: article.imageUrl
188
- }, style: StyleSheet.absoluteFill, contentFit: "cover", transition: 150, accessibilityIgnoresInvertColors: true }) }) : null,
189
- content ? /* @__PURE__ */ jsx(View, { style: styles.body, children: /* @__PURE__ */ jsx(AssistantMarkdown, { text: content, isDark }) }) : null,
190
- /* @__PURE__ */ jsx(DiscoverMore, { article, palette, onOpen: onOpenStory })
191
- ] });
196
+ /* @__PURE__ */ jsx(DiscoverFollowUp, { article, orgName, palette })
197
+ ] }) });
192
198
  }
193
199
  const styles = StyleSheet.create({
200
+ root: {
201
+ flex: 1
202
+ },
194
203
  content: {
195
204
  paddingHorizontal: 18,
196
205
  paddingTop: 18,
@@ -203,18 +212,17 @@ const styles = StyleSheet.create({
203
212
  flexDirection: "row"
204
213
  },
205
214
  title: {
206
- marginTop: 14,
215
+ marginTop: 16,
207
216
  fontFamily: DISCOVER_SERIF,
208
- fontSize: 28,
209
- lineHeight: 34,
210
- fontWeight: "700",
217
+ fontSize: 34,
218
+ lineHeight: 37,
211
219
  letterSpacing: -0.4
212
220
  },
213
221
  summary: {
214
- marginTop: 14,
215
- fontFamily: DISCOVER_SERIF,
216
- fontSize: 18,
217
- lineHeight: 27
222
+ marginTop: 20,
223
+ fontSize: 17,
224
+ lineHeight: 28,
225
+ opacity: 0.85
218
226
  },
219
227
  leadPill: {
220
228
  marginTop: 10,
@@ -267,15 +275,14 @@ const styles = StyleSheet.create({
267
275
  },
268
276
  sourcesContent: {
269
277
  paddingHorizontal: 18,
278
+ paddingVertical: 6,
270
279
  gap: 10
271
280
  },
272
281
  sourceCard: {
273
282
  width: 168,
274
- minHeight: 82,
275
- borderRadius: 12,
276
- borderWidth: StyleSheet.hairlineWidth,
277
- padding: 11,
278
- gap: 7
283
+ minHeight: 88,
284
+ padding: 12,
285
+ gap: 8
279
286
  },
280
287
  sourceHead: {
281
288
  flexDirection: "row",
@@ -297,19 +304,18 @@ const styles = StyleSheet.create({
297
304
  justifyContent: "center"
298
305
  },
299
306
  hero: {
300
- marginTop: 18,
307
+ marginTop: 18
308
+ },
309
+ heroInner: {
301
310
  width: "100%",
302
- aspectRatio: 16 / 9,
303
- borderRadius: 16,
304
- borderWidth: StyleSheet.hairlineWidth,
305
- overflow: "hidden"
311
+ aspectRatio: 16 / 9
306
312
  },
307
313
  body: {
308
314
  marginTop: 20
309
315
  },
310
316
  more: {
311
- marginTop: 32,
312
- paddingTop: 22,
317
+ marginTop: 40,
318
+ paddingTop: 28,
313
319
  borderTopWidth: StyleSheet.hairlineWidth
314
320
  },
315
321
  moreHead: {
@@ -318,13 +324,20 @@ const styles = StyleSheet.create({
318
324
  gap: 8
319
325
  },
320
326
  moreTitle: {
321
- fontSize: 19,
322
- fontWeight: "700",
323
- letterSpacing: -0.2
327
+ fontFamily: DISCOVER_SERIF,
328
+ fontSize: 26,
329
+ lineHeight: 30
324
330
  },
325
331
  moreList: {
326
- marginTop: 14,
327
- gap: 12
332
+ marginTop: 18,
333
+ gap: 16
334
+ },
335
+ moreRow: {
336
+ flexDirection: "row",
337
+ gap: 16
338
+ },
339
+ moreSpacer: {
340
+ flex: 1
328
341
  },
329
342
  state: {
330
343
  flex: 1,
@@ -1 +1 @@
1
- {"version":3,"file":"DiscoverArticle.js","sources":["../../../src/features/discover/DiscoverArticle.tsx"],"sourcesContent":["/**\n * Native Discover reader — the browser's `DiscoverArticlePage`: tag, headline,\n * summary with a lead source pill, source cards, hero, cleaned body, and\n * \"Discover more\" from the same topic. The browser's \"Ask follow-up\" box is\n * not here yet: it hands off through the web chat session store.\n */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ActivityIndicator, Pressable, ScrollView, StyleSheet, Text, View } from 'react-native';\nimport { Image } from 'expo-image';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useNavigation } from '@react-navigation/native';\nimport type { IAccountNewsArticle } from 'common';\nimport { AssistantMarkdown } from '../chat/AssistantMarkdown';\nimport { useChatLinkOpener } from '../links/chatLinkOpener';\nimport {\n cleanArticleContent,\n faviconUrl,\n formatPublishedAt,\n getStoryId,\n normalizeSources,\n type NormalizedSource,\n} from './articleContent';\nimport {\n CompactStoryCard,\n DISCOVER_SERIF,\n TagChip,\n discoverPalette,\n openDiscoverArticle,\n type DiscoverPalette,\n} from './DiscoverStoryCards';\nimport { useNewsArticle, useNewsArticlesInfinite } from './useDiscoverNews';\n\nconst MAX_SOURCE_CARDS = 8;\nconst DISCOVER_MORE_COUNT = 4;\n\nfunction SourceFavicon({\n source,\n size,\n palette,\n}: {\n source: NormalizedSource;\n size: number;\n palette: DiscoverPalette;\n}) {\n const [failed, setFailed] = useState(false);\n const letter = (source.name || source.host || '?').charAt(0).toUpperCase();\n\n if (source.host && !failed) {\n return (\n <Image\n source={{ uri: faviconUrl(source.host) }}\n style={{ width: size, height: size, borderRadius: 4 }}\n contentFit=\"contain\"\n onError={() => setFailed(true)}\n />\n );\n }\n\n return (\n <View style={[styles.faviconFallback, { width: size, height: size, backgroundColor: palette.text }]}>\n <Text style={{ color: palette.bg, fontSize: Math.round(size * 0.55), fontWeight: '700' }}>{letter}</Text>\n </View>\n );\n}\n\nfunction SourceCards({\n sources,\n palette,\n onOpen,\n}: {\n sources: NormalizedSource[];\n palette: DiscoverPalette;\n onOpen: (url: string) => void;\n}) {\n if (sources.length === 0) return null;\n return (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={styles.sourcesScroll}\n contentContainerStyle={styles.sourcesContent}\n >\n {sources.slice(0, MAX_SOURCE_CARDS).map((source, index) => (\n <Pressable\n key={`${source.name}-${index}`}\n accessibilityRole={source.url ? 'link' : undefined}\n disabled={!source.url}\n onPress={() => source.url && onOpen(source.url)}\n style={({ pressed }) => [\n styles.sourceCard,\n { backgroundColor: palette.imagePlaceholder, borderColor: palette.cardBorder },\n pressed && styles.pressed,\n ]}\n >\n <View style={styles.sourceHead}>\n <SourceFavicon source={source} size={16} palette={palette} />\n <Text style={[styles.sourceName, { color: palette.textMuted }]} numberOfLines={1}>\n {source.name}\n </Text>\n </View>\n {source.title ? (\n <Text style={[styles.sourceTitle, { color: palette.text }]} numberOfLines={2}>\n {source.title}\n </Text>\n ) : null}\n </Pressable>\n ))}\n </ScrollView>\n );\n}\n\nfunction DiscoverMore({\n article,\n palette,\n onOpen,\n}: {\n article: IAccountNewsArticle;\n palette: DiscoverPalette;\n onOpen: (story: IAccountNewsArticle) => void;\n}) {\n // Same variables as the feed's first page, so this reads the cached list.\n const { articles } = useNewsArticlesInfinite({ topic: article.topic });\n const currentId = getStoryId(article);\n const related = articles.filter((story) => getStoryId(story) !== currentId).slice(0, DISCOVER_MORE_COUNT);\n\n if (related.length === 0) return null;\n\n return (\n <View style={[styles.more, { borderTopColor: palette.border }]}>\n <View style={styles.moreHead}>\n <Ionicons name=\"sparkles-outline\" size={18} color={palette.text} />\n <Text style={[styles.moreTitle, { color: palette.text }]}>Discover more</Text>\n </View>\n <View style={styles.moreList}>\n {related.map((story) => (\n <CompactStoryCard key={getStoryId(story)} story={story} palette={palette} onPress={onOpen} />\n ))}\n </View>\n </View>\n );\n}\n\nfunction StateMessage({\n title,\n description,\n palette,\n}: {\n title: string;\n description: string;\n palette: DiscoverPalette;\n}) {\n return (\n <View style={styles.state}>\n <Text style={[styles.stateTitle, { color: palette.text }]}>{title}</Text>\n <Text style={[styles.stateDescription, { color: palette.textMuted }]}>{description}</Text>\n </View>\n );\n}\n\nexport function DiscoverArticle({\n slug,\n orgName,\n isDark,\n}: {\n slug: string | null;\n orgName: string | null;\n isDark: boolean;\n}) {\n const navigation = useNavigation();\n const palette = useMemo(() => discoverPalette(isDark), [isDark]);\n const openLink = useChatLinkOpener();\n const scrollRef = useRef<ScrollView>(null);\n const { article, loading, error } = useNewsArticle({ slug });\n\n // \"Discover more\" reopens this same route with a new slug.\n useEffect(() => {\n scrollRef.current?.scrollTo({ y: 0, animated: false });\n }, [slug]);\n\n const onOpenStory = useCallback(\n (story: IAccountNewsArticle) => openDiscoverArticle(navigation, story, orgName),\n [navigation, orgName],\n );\n\n const sources = useMemo(() => (article ? normalizeSources(article.sourceItems, article.sources) : []), [article]);\n const content = useMemo(\n () =>\n article\n ? cleanArticleContent(\n article.content,\n article.title,\n article.summary ?? undefined,\n article.imageUrl ?? undefined,\n )\n : '',\n [article],\n );\n\n if (!article) {\n let body: React.ReactElement;\n if (loading) {\n body = <ActivityIndicator color={palette.primary} />;\n } else if (error) {\n body = (\n <StateMessage\n title=\"Unable to load article\"\n description=\"Something went wrong while fetching this article. Please try again in a moment.\"\n palette={palette}\n />\n );\n } else {\n body = (\n <StateMessage\n title=\"Article not found\"\n description=\"We could not find this news article. It may not be available yet or may have been removed.\"\n palette={palette}\n />\n );\n }\n return <View style={[styles.state, { backgroundColor: palette.bg }]}>{body}</View>;\n }\n\n const publishedLabel = formatPublishedAt(article.publishedAt);\n const sourceCountLabel =\n article.sourceCount === 1 ? '1 source' : `${article.sourceCount || sources.length} sources`;\n const [leadSource] = sources;\n\n return (\n <ScrollView ref={scrollRef} style={{ backgroundColor: palette.bg }} contentContainerStyle={styles.content}>\n <View style={styles.tagRow}>\n <TagChip label={article.tag} palette={palette} />\n </View>\n\n <Text style={[styles.title, { color: palette.text }]} accessibilityRole=\"header\">\n {article.title}\n </Text>\n\n {article.summary ? <Text style={[styles.summary, { color: palette.text }]}>{article.summary}</Text> : null}\n\n {leadSource ? (\n <Pressable\n accessibilityRole={leadSource.url ? 'link' : undefined}\n disabled={!leadSource.url}\n onPress={() => leadSource.url && openLink(leadSource.url)}\n style={[\n styles.leadPill,\n { backgroundColor: palette.imagePlaceholder, borderColor: palette.cardBorder },\n ]}\n >\n <SourceFavicon source={leadSource} size={14} palette={palette} />\n <Text style={[styles.leadPillText, { color: palette.textMuted }]} numberOfLines={1}>\n {leadSource.name}\n </Text>\n {sources.length > 1 ? (\n <Text style={[styles.leadPillText, { color: palette.textMuted }]}>+{sources.length - 1}</Text>\n ) : null}\n </Pressable>\n ) : null}\n\n <View style={[styles.byline, { borderBottomColor: palette.border }]}>\n <View style={styles.bylineItem}>\n <View style={[styles.bylineIcon, { backgroundColor: palette.text }]}>\n <Ionicons name=\"layers-outline\" size={13} color={palette.bg} />\n </View>\n <Text style={[styles.bylineStrong, { color: palette.textMuted }]}>\n Summarized from {sourceCountLabel}\n </Text>\n </View>\n {publishedLabel ? (\n <Pressable\n accessibilityRole=\"link\"\n onPress={() => article.href && openLink(article.href)}\n style={styles.bylineItem}\n >\n <Ionicons name=\"time-outline\" size={14} color={palette.textMuted} />\n <Text style={[styles.bylineText, { color: palette.textMuted }]}>{publishedLabel}</Text>\n </Pressable>\n ) : null}\n </View>\n\n <SourceCards sources={sources} palette={palette} onOpen={openLink} />\n\n {article.imageUrl ? (\n <View\n style={[\n styles.hero,\n { backgroundColor: palette.imagePlaceholder, borderColor: palette.cardBorder },\n ]}\n >\n <Image\n source={{ uri: article.imageUrl }}\n style={StyleSheet.absoluteFill}\n contentFit=\"cover\"\n transition={150}\n accessibilityIgnoresInvertColors\n />\n </View>\n ) : null}\n\n {content ? (\n <View style={styles.body}>\n <AssistantMarkdown text={content} isDark={isDark} />\n </View>\n ) : null}\n\n <DiscoverMore article={article} palette={palette} onOpen={onOpenStory} />\n </ScrollView>\n );\n}\n\nconst styles = StyleSheet.create({\n content: {\n paddingHorizontal: 18,\n paddingTop: 18,\n paddingBottom: 48,\n },\n pressed: {\n opacity: 0.85,\n },\n tagRow: {\n flexDirection: 'row',\n },\n title: {\n marginTop: 14,\n fontFamily: DISCOVER_SERIF,\n fontSize: 28,\n lineHeight: 34,\n fontWeight: '700',\n letterSpacing: -0.4,\n },\n summary: {\n marginTop: 14,\n fontFamily: DISCOVER_SERIF,\n fontSize: 18,\n lineHeight: 27,\n },\n leadPill: {\n marginTop: 10,\n alignSelf: 'flex-start',\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n borderRadius: 999,\n borderWidth: StyleSheet.hairlineWidth,\n paddingHorizontal: 9,\n paddingVertical: 4,\n maxWidth: 240,\n },\n leadPillText: {\n fontSize: 12,\n fontWeight: '500',\n },\n byline: {\n marginTop: 18,\n paddingBottom: 14,\n borderBottomWidth: StyleSheet.hairlineWidth,\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 10,\n },\n bylineItem: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 7,\n },\n bylineIcon: {\n width: 22,\n height: 22,\n borderRadius: 6,\n alignItems: 'center',\n justifyContent: 'center',\n },\n bylineStrong: {\n fontSize: 14,\n fontWeight: '600',\n },\n bylineText: {\n fontSize: 13,\n },\n sourcesScroll: {\n marginTop: 16,\n marginHorizontal: -18,\n },\n sourcesContent: {\n paddingHorizontal: 18,\n gap: 10,\n },\n sourceCard: {\n width: 168,\n minHeight: 82,\n borderRadius: 12,\n borderWidth: StyleSheet.hairlineWidth,\n padding: 11,\n gap: 7,\n },\n sourceHead: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 7,\n },\n sourceName: {\n flex: 1,\n fontSize: 12,\n fontWeight: '600',\n },\n sourceTitle: {\n fontSize: 13,\n lineHeight: 18,\n },\n faviconFallback: {\n borderRadius: 4,\n alignItems: 'center',\n justifyContent: 'center',\n },\n hero: {\n marginTop: 18,\n width: '100%',\n aspectRatio: 16 / 9,\n borderRadius: 16,\n borderWidth: StyleSheet.hairlineWidth,\n overflow: 'hidden',\n },\n body: {\n marginTop: 20,\n },\n more: {\n marginTop: 32,\n paddingTop: 22,\n borderTopWidth: StyleSheet.hairlineWidth,\n },\n moreHead: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n },\n moreTitle: {\n fontSize: 19,\n fontWeight: '700',\n letterSpacing: -0.2,\n },\n moreList: {\n marginTop: 14,\n gap: 12,\n },\n state: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 28,\n gap: 8,\n },\n stateTitle: {\n fontSize: 17,\n fontWeight: '600',\n textAlign: 'center',\n },\n stateDescription: {\n fontSize: 14,\n lineHeight: 20,\n textAlign: 'center',\n },\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DiscoverArticle.js","sources":["../../../src/features/discover/DiscoverArticle.tsx"],"sourcesContent":["/**\n * Native Discover reader — the browser's `DiscoverArticlePage`: tag, headline,\n * summary with a lead source pill, source cards, hero, cleaned body,\n * \"Discover more\" from the same topic, and the pinned \"Ask follow-up\" box.\n */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { Platform, Pressable, ScrollView, StyleSheet, Text, View } from 'react-native';\nimport { Image } from 'expo-image';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useNavigation } from '@react-navigation/native';\nimport type { IAccountNewsArticle } from 'common';\nimport { AppKeyboardAvoidingView } from '../../components/AppKeyboardAvoidingView';\nimport { AssistantMarkdown } from '../chat/AssistantMarkdown';\nimport { useChatLinkOpener } from '../links/chatLinkOpener';\nimport {\n cleanArticleContent,\n faviconUrl,\n formatPublishedAt,\n getStoryId,\n normalizeSources,\n type NormalizedSource,\n} from './articleContent';\nimport { DiscoverFollowUp, FOLLOW_UP_RESERVED_HEIGHT } from './DiscoverFollowUp';\nimport { DiscoverArticleSkeleton } from './DiscoverSkeletons';\nimport {\n DISCOVER_SERIF,\n DiscoverCard,\n DiscoverMoreCard,\n TagChip,\n discoverPalette,\n openDiscoverArticle,\n type DiscoverPalette,\n} from './DiscoverStoryCards';\nimport { useNewsArticle, useNewsArticlesInfinite } from './useDiscoverNews';\n\nconst MAX_SOURCE_CARDS = 8;\nconst DISCOVER_MORE_COUNT = 4;\n\nfunction SourceFavicon({\n source,\n size,\n palette,\n}: {\n source: NormalizedSource;\n size: number;\n palette: DiscoverPalette;\n}) {\n const [failed, setFailed] = useState(false);\n const letter = (source.name || source.host || '?').charAt(0).toUpperCase();\n\n if (source.host && !failed) {\n return (\n <Image\n source={{ uri: faviconUrl(source.host) }}\n style={{ width: size, height: size, borderRadius: 4 }}\n contentFit=\"contain\"\n onError={() => setFailed(true)}\n />\n );\n }\n\n return (\n <View style={[styles.faviconFallback, { width: size, height: size, backgroundColor: palette.text }]}>\n <Text style={{ color: palette.bg, fontSize: Math.round(size * 0.55), fontWeight: '700' }}>{letter}</Text>\n </View>\n );\n}\n\nfunction SourceCards({\n sources,\n palette,\n onOpen,\n}: {\n sources: NormalizedSource[];\n palette: DiscoverPalette;\n onOpen: (url: string) => void;\n}) {\n if (sources.length === 0) return null;\n return (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={styles.sourcesScroll}\n contentContainerStyle={styles.sourcesContent}\n >\n {sources.slice(0, MAX_SOURCE_CARDS).map((source, index) => (\n <DiscoverCard\n key={`${source.name}-${index}`}\n palette={palette}\n radius={16}\n onPress={source.url ? () => source.url && onOpen(source.url) : undefined}\n accessibilityLabel={[source.name, source.title].filter(Boolean).join(', ')}\n innerStyle={styles.sourceCard}\n >\n <View style={styles.sourceHead}>\n <SourceFavicon source={source} size={16} palette={palette} />\n <Text style={[styles.sourceName, { color: palette.textMuted }]} numberOfLines={1}>\n {source.name}\n </Text>\n </View>\n {source.title ? (\n <Text style={[styles.sourceTitle, { color: palette.text }]} numberOfLines={2}>\n {source.title}\n </Text>\n ) : null}\n </DiscoverCard>\n ))}\n </ScrollView>\n );\n}\n\nfunction DiscoverMore({\n article,\n palette,\n onOpen,\n}: {\n article: IAccountNewsArticle;\n palette: DiscoverPalette;\n onOpen: (story: IAccountNewsArticle) => void;\n}) {\n // Same variables as the feed's first page, so this reads the cached list.\n const { articles } = useNewsArticlesInfinite({ topic: article.topic });\n const currentId = getStoryId(article);\n const related = articles.filter((story) => getStoryId(story) !== currentId).slice(0, DISCOVER_MORE_COUNT);\n\n if (related.length === 0) return null;\n\n // Two to a row, as the web grid sits on a phone.\n const rows: IAccountNewsArticle[][] = [];\n for (let index = 0; index < related.length; index += 2) rows.push(related.slice(index, index + 2));\n\n return (\n <View style={[styles.more, { borderTopColor: palette.border }]}>\n <View style={styles.moreHead}>\n <Ionicons name=\"sparkles-outline\" size={20} color={palette.primary} />\n <Text style={[styles.moreTitle, { color: palette.text }]} accessibilityRole=\"header\">\n Discover more\n </Text>\n </View>\n <View style={styles.moreList}>\n {rows.map((row) => (\n <View key={getStoryId(row[0])} style={styles.moreRow}>\n {row.map((story) => (\n <DiscoverMoreCard\n key={getStoryId(story)}\n story={story}\n palette={palette}\n onPress={onOpen}\n />\n ))}\n {row.length === 1 ? <View style={styles.moreSpacer} /> : null}\n </View>\n ))}\n </View>\n </View>\n );\n}\n\nfunction StateMessage({\n title,\n description,\n palette,\n}: {\n title: string;\n description: string;\n palette: DiscoverPalette;\n}) {\n return (\n <View style={styles.state}>\n <Text style={[styles.stateTitle, { color: palette.text }]}>{title}</Text>\n <Text style={[styles.stateDescription, { color: palette.textMuted }]}>{description}</Text>\n </View>\n );\n}\n\nexport function DiscoverArticle({\n slug,\n orgName,\n isDark,\n}: {\n slug: string | null;\n orgName: string | null;\n isDark: boolean;\n}) {\n const navigation = useNavigation();\n const palette = useMemo(() => discoverPalette(isDark), [isDark]);\n const openLink = useChatLinkOpener();\n const scrollRef = useRef<ScrollView>(null);\n const rootRef = useRef<View>(null);\n // The header sits above this screen; the keyboard lift has to know how far down it starts.\n const [topOffset, setTopOffset] = useState(0);\n const { article, loading, error } = useNewsArticle({ slug });\n\n // \"Discover more\" reopens this same route with a new slug.\n useEffect(() => {\n scrollRef.current?.scrollTo({ y: 0, animated: false });\n }, [slug]);\n\n const onOpenStory = useCallback(\n (story: IAccountNewsArticle) => openDiscoverArticle(navigation, story, orgName),\n [navigation, orgName],\n );\n\n const sources = useMemo(() => (article ? normalizeSources(article.sourceItems, article.sources) : []), [article]);\n const content = useMemo(\n () =>\n article\n ? cleanArticleContent(\n article.content,\n article.title,\n article.summary ?? undefined,\n article.imageUrl ?? undefined,\n )\n : '',\n [article],\n );\n\n if (!article) {\n if (loading) {\n return (\n <ScrollView style={{ backgroundColor: palette.bg }} contentContainerStyle={styles.content}>\n <DiscoverArticleSkeleton palette={palette} />\n </ScrollView>\n );\n }\n return (\n <View style={[styles.state, { backgroundColor: palette.bg }]}>\n {error ? (\n <StateMessage\n title=\"Unable to load article\"\n description=\"Something went wrong while fetching this article. Please try again in a moment.\"\n palette={palette}\n />\n ) : (\n <StateMessage\n title=\"Article not found\"\n description=\"We could not find this news article. It may not be available yet or may have been removed.\"\n palette={palette}\n />\n )}\n </View>\n );\n }\n\n const publishedLabel = formatPublishedAt(article.publishedAt);\n const sourceCountLabel =\n article.sourceCount === 1 ? '1 source' : `${article.sourceCount || sources.length} sources`;\n const [leadSource] = sources;\n\n return (\n <AppKeyboardAvoidingView\n behavior={Platform.OS === 'ios' ? 'padding' : undefined}\n keyboardVerticalOffset={topOffset}\n style={[styles.root, { backgroundColor: palette.bg }]}\n >\n <View\n ref={rootRef}\n style={styles.root}\n onLayout={() => rootRef.current?.measureInWindow((_x, y) => setTopOffset(Math.max(0, y)))}\n >\n <ScrollView\n ref={scrollRef}\n style={{ backgroundColor: palette.bg }}\n contentContainerStyle={[styles.content, { paddingBottom: FOLLOW_UP_RESERVED_HEIGHT + 32 }]}\n keyboardShouldPersistTaps=\"handled\"\n keyboardDismissMode=\"interactive\"\n >\n <View style={styles.tagRow}>\n <TagChip label={article.tag} palette={palette} />\n </View>\n\n <Text style={[styles.title, { color: palette.text }]} accessibilityRole=\"header\">\n {article.title}\n </Text>\n\n {article.summary ? (\n <Text style={[styles.summary, { color: palette.text }]}>{article.summary}</Text>\n ) : null}\n\n {leadSource ? (\n <Pressable\n accessibilityRole={leadSource.url ? 'link' : undefined}\n disabled={!leadSource.url}\n onPress={() => leadSource.url && openLink(leadSource.url)}\n style={[\n styles.leadPill,\n { backgroundColor: palette.imagePlaceholder, borderColor: palette.cardBorder },\n ]}\n >\n <SourceFavicon source={leadSource} size={14} palette={palette} />\n <Text style={[styles.leadPillText, { color: palette.textMuted }]} numberOfLines={1}>\n {leadSource.name}\n </Text>\n {sources.length > 1 ? (\n <Text style={[styles.leadPillText, { color: palette.textMuted }]}>\n +{sources.length - 1}\n </Text>\n ) : null}\n </Pressable>\n ) : null}\n\n <View style={[styles.byline, { borderBottomColor: palette.border }]}>\n <View style={styles.bylineItem}>\n <View style={[styles.bylineIcon, { backgroundColor: palette.primarySoft }]}>\n <Ionicons name=\"layers-outline\" size={13} color={palette.primary} />\n </View>\n <Text style={[styles.bylineStrong, { color: palette.textMuted }]}>\n Summarized from {sourceCountLabel}\n </Text>\n </View>\n {publishedLabel ? (\n <Pressable\n accessibilityRole=\"link\"\n onPress={() => article.href && openLink(article.href)}\n style={styles.bylineItem}\n >\n <Ionicons name=\"time-outline\" size={14} color={palette.textMuted} />\n <Text style={[styles.bylineText, { color: palette.textMuted }]}>{publishedLabel}</Text>\n </Pressable>\n ) : null}\n </View>\n\n <SourceCards sources={sources} palette={palette} onOpen={openLink} />\n\n {article.imageUrl ? (\n <DiscoverCard palette={palette} radius={22} style={styles.hero} innerStyle={styles.heroInner}>\n <Image\n source={{ uri: article.imageUrl }}\n style={StyleSheet.absoluteFill}\n contentFit=\"cover\"\n transition={150}\n accessibilityIgnoresInvertColors\n />\n </DiscoverCard>\n ) : null}\n\n {content ? (\n <View style={styles.body}>\n <AssistantMarkdown text={content} isDark={isDark} />\n </View>\n ) : null}\n\n <DiscoverMore article={article} palette={palette} onOpen={onOpenStory} />\n </ScrollView>\n <DiscoverFollowUp article={article} orgName={orgName} palette={palette} />\n </View>\n </AppKeyboardAvoidingView>\n );\n}\n\nconst styles = StyleSheet.create({\n root: {\n flex: 1,\n },\n content: {\n paddingHorizontal: 18,\n paddingTop: 18,\n paddingBottom: 48,\n },\n pressed: {\n opacity: 0.85,\n },\n tagRow: {\n flexDirection: 'row',\n },\n title: {\n marginTop: 16,\n fontFamily: DISCOVER_SERIF,\n fontSize: 34,\n lineHeight: 37,\n letterSpacing: -0.4,\n },\n summary: {\n marginTop: 20,\n fontSize: 17,\n lineHeight: 28,\n opacity: 0.85,\n },\n leadPill: {\n marginTop: 10,\n alignSelf: 'flex-start',\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n borderRadius: 999,\n borderWidth: StyleSheet.hairlineWidth,\n paddingHorizontal: 9,\n paddingVertical: 4,\n maxWidth: 240,\n },\n leadPillText: {\n fontSize: 12,\n fontWeight: '500',\n },\n byline: {\n marginTop: 18,\n paddingBottom: 14,\n borderBottomWidth: StyleSheet.hairlineWidth,\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 10,\n },\n bylineItem: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 7,\n },\n bylineIcon: {\n width: 22,\n height: 22,\n borderRadius: 6,\n alignItems: 'center',\n justifyContent: 'center',\n },\n bylineStrong: {\n fontSize: 14,\n fontWeight: '600',\n },\n bylineText: {\n fontSize: 13,\n },\n sourcesScroll: {\n marginTop: 16,\n marginHorizontal: -18,\n },\n sourcesContent: {\n paddingHorizontal: 18,\n paddingVertical: 6,\n gap: 10,\n },\n sourceCard: {\n width: 168,\n minHeight: 88,\n padding: 12,\n gap: 8,\n },\n sourceHead: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 7,\n },\n sourceName: {\n flex: 1,\n fontSize: 12,\n fontWeight: '600',\n },\n sourceTitle: {\n fontSize: 13,\n lineHeight: 18,\n },\n faviconFallback: {\n borderRadius: 4,\n alignItems: 'center',\n justifyContent: 'center',\n },\n hero: {\n marginTop: 18,\n },\n heroInner: {\n width: '100%',\n aspectRatio: 16 / 9,\n },\n body: {\n marginTop: 20,\n },\n more: {\n marginTop: 40,\n paddingTop: 28,\n borderTopWidth: StyleSheet.hairlineWidth,\n },\n moreHead: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n },\n moreTitle: {\n fontFamily: DISCOVER_SERIF,\n fontSize: 26,\n lineHeight: 30,\n },\n moreList: {\n marginTop: 18,\n gap: 16,\n },\n moreRow: {\n flexDirection: 'row',\n gap: 16,\n },\n moreSpacer: {\n flex: 1,\n },\n state: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 28,\n gap: 8,\n },\n stateTitle: {\n fontSize: 17,\n fontWeight: '600',\n textAlign: 'center',\n },\n stateDescription: {\n fontSize: 14,\n lineHeight: 20,\n textAlign: 'center',\n },\n});\n"],"names":[],"mappings":"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"}