@adminide-stack/yantra-mobile 12.0.141-alpha.1 → 12.0.142-alpha.0

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 (227) 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/dictate/DictateExperience.js +59 -7
  12. package/lib/features/dictate/DictateExperience.js.map +1 -1
  13. package/lib/features/dictate/components/NoteView.js +227 -12
  14. package/lib/features/dictate/components/NoteView.js.map +1 -1
  15. package/lib/features/dictate/dictateClient.js +93 -23
  16. package/lib/features/dictate/dictateClient.js.map +1 -1
  17. package/lib/features/dictate/dictatePreference.js +19 -0
  18. package/lib/features/dictate/dictatePreference.js.map +1 -0
  19. package/lib/features/dictate/noteText.js +17 -2
  20. package/lib/features/dictate/noteText.js.map +1 -1
  21. package/lib/features/dictate/privacy.js +96 -0
  22. package/lib/features/dictate/privacy.js.map +1 -0
  23. package/lib/features/dictate/shownNote.js +24 -0
  24. package/lib/features/dictate/shownNote.js.map +1 -0
  25. package/lib/features/discover/DiscoverArticle.js +105 -92
  26. package/lib/features/discover/DiscoverArticle.js.map +1 -1
  27. package/lib/features/discover/DiscoverFeed.js +97 -48
  28. package/lib/features/discover/DiscoverFeed.js.map +1 -1
  29. package/lib/features/discover/DiscoverFollowUp.js +135 -0
  30. package/lib/features/discover/DiscoverFollowUp.js.map +1 -0
  31. package/lib/features/discover/DiscoverSidebar.js +555 -0
  32. package/lib/features/discover/DiscoverSidebar.js.map +1 -0
  33. package/lib/features/discover/DiscoverSkeletons.js +123 -0
  34. package/lib/features/discover/DiscoverSkeletons.js.map +1 -0
  35. package/lib/features/discover/DiscoverStoryCards.js +193 -87
  36. package/lib/features/discover/DiscoverStoryCards.js.map +1 -1
  37. package/lib/features/discover/followUpQuery.js +42 -0
  38. package/lib/features/discover/followUpQuery.js.map +1 -0
  39. package/lib/features/discover/markets.js +37 -0
  40. package/lib/features/discover/markets.js.map +1 -0
  41. package/lib/features/discover/useDiscoverSidebar.js +148 -0
  42. package/lib/features/discover/useDiscoverSidebar.js.map +1 -0
  43. package/lib/features/discover/weather.js +42 -0
  44. package/lib/features/discover/weather.js.map +1 -0
  45. package/lib/features/expenses/ExpensesAgentChatPane.js +1 -1
  46. package/lib/features/expenses/ExpensesAgentChatPane.js.map +1 -1
  47. package/lib/features/inbox/InboxAgentChatPane.js +1 -1
  48. package/lib/features/inbox/InboxAgentChatPane.js.map +1 -1
  49. package/lib/features/job-search/JobSearchAgentChatPane.js +1 -0
  50. package/lib/features/job-search/JobSearchAgentChatPane.js.map +1 -1
  51. package/lib/features/local-services/LocalServicesAgentChatPane.js +1 -1
  52. package/lib/features/local-services/LocalServicesAgentChatPane.js.map +1 -1
  53. package/lib/features/movies/MoviesAgentChatPane.js +1 -1
  54. package/lib/features/movies/MoviesAgentChatPane.js.map +1 -1
  55. package/lib/features/notion/NotionBlockSheets.js +206 -0
  56. package/lib/features/notion/NotionBlockSheets.js.map +1 -0
  57. package/lib/features/notion/NotionBlockView.js +36 -0
  58. package/lib/features/notion/NotionBlockView.js.map +1 -0
  59. package/lib/features/notion/NotionCommentsSheet.js +461 -0
  60. package/lib/features/notion/NotionCommentsSheet.js.map +1 -0
  61. package/lib/features/notion/NotionConnectionsSheet.js +244 -0
  62. package/lib/features/notion/NotionConnectionsSheet.js.map +1 -0
  63. package/lib/features/notion/NotionHistorySheet.js +439 -0
  64. package/lib/features/notion/NotionHistorySheet.js.map +1 -0
  65. package/lib/features/notion/NotionMediaBlocks.js +803 -0
  66. package/lib/features/notion/NotionMediaBlocks.js.map +1 -0
  67. package/lib/features/notion/NotionMentionSheet.js +279 -0
  68. package/lib/features/notion/NotionMentionSheet.js.map +1 -0
  69. package/lib/features/notion/NotionPageMenu.js +585 -0
  70. package/lib/features/notion/NotionPageMenu.js.map +1 -0
  71. package/lib/features/notion/NotionPageTree.js +220 -0
  72. package/lib/features/notion/NotionPageTree.js.map +1 -0
  73. package/lib/features/notion/NotionPageView.js +1253 -152
  74. package/lib/features/notion/NotionPageView.js.map +1 -1
  75. package/lib/features/notion/NotionShareSheet.js +606 -0
  76. package/lib/features/notion/NotionShareSheet.js.map +1 -0
  77. package/lib/features/notion/NotionSheets.js +87 -15
  78. package/lib/features/notion/NotionSheets.js.map +1 -1
  79. package/lib/features/notion/NotionSidebarSections.js +492 -0
  80. package/lib/features/notion/NotionSidebarSections.js.map +1 -0
  81. package/lib/features/notion/NotionWorkspaceAdmin.js +659 -0
  82. package/lib/features/notion/NotionWorkspaceAdmin.js.map +1 -0
  83. package/lib/features/notion/NotionWorkspaceView.js +257 -45
  84. package/lib/features/notion/NotionWorkspaceView.js.map +1 -1
  85. package/lib/features/notion/database/DatabaseCells.js +554 -0
  86. package/lib/features/notion/database/DatabaseCells.js.map +1 -0
  87. package/lib/features/notion/database/DatabaseDateLayouts.js +792 -0
  88. package/lib/features/notion/database/DatabaseDateLayouts.js.map +1 -0
  89. package/lib/features/notion/database/DatabaseLayouts.js +461 -0
  90. package/lib/features/notion/database/DatabaseLayouts.js.map +1 -0
  91. package/lib/features/notion/database/DatabaseSheets.js +791 -0
  92. package/lib/features/notion/database/DatabaseSheets.js.map +1 -0
  93. package/lib/features/notion/database/NotionDatabaseView.js +817 -0
  94. package/lib/features/notion/database/NotionDatabaseView.js.map +1 -0
  95. package/lib/features/notion/database/RowPropertiesPanel.js +162 -0
  96. package/lib/features/notion/database/RowPropertiesPanel.js.map +1 -0
  97. package/lib/features/notion/database/chartData.js +89 -0
  98. package/lib/features/notion/database/chartData.js.map +1 -0
  99. package/lib/features/notion/database/chartView.js +112 -0
  100. package/lib/features/notion/database/chartView.js.map +1 -0
  101. package/lib/features/notion/database/connectorButton.js +33 -0
  102. package/lib/features/notion/database/connectorButton.js.map +1 -0
  103. package/lib/features/notion/database/databaseCalc.js +208 -0
  104. package/lib/features/notion/database/databaseCalc.js.map +1 -0
  105. package/lib/features/notion/database/databaseCalendar.js +157 -0
  106. package/lib/features/notion/database/databaseCalendar.js.map +1 -0
  107. package/lib/features/notion/database/databaseCsv.js +98 -0
  108. package/lib/features/notion/database/databaseCsv.js.map +1 -0
  109. package/lib/features/notion/database/databaseCsvActions.js +58 -0
  110. package/lib/features/notion/database/databaseCsvActions.js.map +1 -0
  111. package/lib/features/notion/database/databaseFilter.js +473 -0
  112. package/lib/features/notion/database/databaseFilter.js.map +1 -0
  113. package/lib/features/notion/database/databaseFormula.js +1072 -0
  114. package/lib/features/notion/database/databaseFormula.js.map +1 -0
  115. package/lib/features/notion/database/databaseGroup.js +151 -0
  116. package/lib/features/notion/database/databaseGroup.js.map +1 -0
  117. package/lib/features/notion/database/databaseRollup.js +58 -0
  118. package/lib/features/notion/database/databaseRollup.js.map +1 -0
  119. package/lib/features/notion/database/databaseTimeline.js +156 -0
  120. package/lib/features/notion/database/databaseTimeline.js.map +1 -0
  121. package/lib/features/notion/database/databaseView.js +1188 -0
  122. package/lib/features/notion/database/databaseView.js.map +1 -0
  123. package/lib/features/notion/database/databaseViews.js +310 -0
  124. package/lib/features/notion/database/databaseViews.js.map +1 -0
  125. package/lib/features/notion/database/relationSource.js +92 -0
  126. package/lib/features/notion/database/relationSource.js.map +1 -0
  127. package/lib/features/notion/database/uniqueId.js +17 -0
  128. package/lib/features/notion/database/uniqueId.js.map +1 -0
  129. package/lib/features/notion/database/useNotionDatabase.js +617 -0
  130. package/lib/features/notion/database/useNotionDatabase.js.map +1 -0
  131. package/lib/features/notion/notionAgentRunStatus.js +39 -0
  132. package/lib/features/notion/notionAgentRunStatus.js.map +1 -0
  133. package/lib/features/notion/notionCodeLanguages.js +112 -0
  134. package/lib/features/notion/notionCodeLanguages.js.map +1 -0
  135. package/lib/features/notion/notionComments.js +86 -0
  136. package/lib/features/notion/notionComments.js.map +1 -0
  137. package/lib/features/notion/notionConnections.js +74 -0
  138. package/lib/features/notion/notionConnections.js.map +1 -0
  139. package/lib/features/notion/notionDocuments.js +453 -1
  140. package/lib/features/notion/notionDocuments.js.map +1 -1
  141. package/lib/features/notion/notionEditorModel.js +142 -7
  142. package/lib/features/notion/notionEditorModel.js.map +1 -1
  143. package/lib/features/notion/notionMarkdownShortcuts.js +51 -0
  144. package/lib/features/notion/notionMarkdownShortcuts.js.map +1 -0
  145. package/lib/features/notion/notionMedia.js +119 -0
  146. package/lib/features/notion/notionMedia.js.map +1 -0
  147. package/lib/features/notion/notionMentionDate.js +32 -0
  148. package/lib/features/notion/notionMentionDate.js.map +1 -0
  149. package/lib/features/notion/notionMentionOptions.js +162 -0
  150. package/lib/features/notion/notionMentionOptions.js.map +1 -0
  151. package/lib/features/notion/notionNotesAgent.js +445 -0
  152. package/lib/features/notion/notionNotesAgent.js.map +1 -0
  153. package/lib/features/notion/notionPageAccess.js +168 -0
  154. package/lib/features/notion/notionPageAccess.js.map +1 -0
  155. package/lib/features/notion/notionPageActions.js +138 -0
  156. package/lib/features/notion/notionPageActions.js.map +1 -0
  157. package/lib/features/notion/notionPageHistory.js +154 -0
  158. package/lib/features/notion/notionPageHistory.js.map +1 -0
  159. package/lib/features/notion/notionPageKinds.js +200 -0
  160. package/lib/features/notion/notionPageKinds.js.map +1 -0
  161. package/lib/features/notion/notionRecents.js +48 -0
  162. package/lib/features/notion/notionRecents.js.map +1 -0
  163. package/lib/features/notion/notionRichText.js +177 -0
  164. package/lib/features/notion/notionRichText.js.map +1 -0
  165. package/lib/features/notion/notionRichTitle.js +336 -0
  166. package/lib/features/notion/notionRichTitle.js.map +1 -0
  167. package/lib/features/notion/useNotionWorkspace.js +272 -13
  168. package/lib/features/notion/useNotionWorkspace.js.map +1 -1
  169. package/lib/features/notion/usePageActions.js +155 -0
  170. package/lib/features/notion/usePageActions.js.map +1 -0
  171. package/lib/features/resume/ResumeAgentChatPane.js +1 -1
  172. package/lib/features/resume/ResumeAgentChatPane.js.map +1 -1
  173. package/lib/features/shopping/ShoppingAgentChatPane.js +1 -1
  174. package/lib/features/shopping/ShoppingAgentChatPane.js.map +1 -1
  175. package/lib/features/study/StudyAgentChatPane.js +1 -1
  176. package/lib/features/study/StudyAgentChatPane.js.map +1 -1
  177. package/lib/features/travel/TravelAgentChatPane.js +1 -1
  178. package/lib/features/travel/TravelAgentChatPane.js.map +1 -1
  179. package/lib/features/webbuilder/WebBuilderExperience.js +40 -8
  180. package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
  181. package/lib/features/webbuilder/buildFragments.js +1 -1
  182. package/lib/features/webbuilder/buildFragments.js.map +1 -1
  183. package/lib/features/webbuilder/codeFiles.js +302 -0
  184. package/lib/features/webbuilder/codeFiles.js.map +1 -0
  185. package/lib/features/webbuilder/codeHighlight.js +209 -0
  186. package/lib/features/webbuilder/codeHighlight.js.map +1 -0
  187. package/lib/features/webbuilder/components/CodeView.js +682 -52
  188. package/lib/features/webbuilder/components/CodeView.js.map +1 -1
  189. package/lib/features/webbuilder/components/PreviewScreen.js +59 -38
  190. package/lib/features/webbuilder/components/PreviewScreen.js.map +1 -1
  191. package/lib/features/webbuilder/components/ProjectChat.js +3 -3
  192. package/lib/features/webbuilder/components/ProjectChat.js.map +1 -1
  193. package/lib/features/webbuilder/stepLabels.js +68 -0
  194. package/lib/features/webbuilder/stepLabels.js.map +1 -0
  195. package/lib/hooks/useHostChatSteering.js +45 -0
  196. package/lib/hooks/useHostChatSteering.js.map +1 -0
  197. package/lib/screens/Chat/index.js +2 -12
  198. package/lib/screens/Chat/index.js.map +1 -1
  199. package/lib/screens/ExpensesNative/useExpensesHostChat.js +25 -5
  200. package/lib/screens/ExpensesNative/useExpensesHostChat.js.map +1 -1
  201. package/lib/screens/InboxNative/useInboxHostChat.js +25 -5
  202. package/lib/screens/InboxNative/useInboxHostChat.js.map +1 -1
  203. package/lib/screens/JobSearchNative/useJobSearchHostChat.js +25 -5
  204. package/lib/screens/JobSearchNative/useJobSearchHostChat.js.map +1 -1
  205. package/lib/screens/LocalServicesNative/useLocalServicesHostChat.js +25 -5
  206. package/lib/screens/LocalServicesNative/useLocalServicesHostChat.js.map +1 -1
  207. package/lib/screens/MoviesNative/useMoviesHostChat.js +25 -5
  208. package/lib/screens/MoviesNative/useMoviesHostChat.js.map +1 -1
  209. package/lib/screens/NotionPage/index.js +2 -2
  210. package/lib/screens/NotionPage/index.js.map +1 -1
  211. package/lib/screens/ResumeNative/useResumeHostChat.js +25 -5
  212. package/lib/screens/ResumeNative/useResumeHostChat.js.map +1 -1
  213. package/lib/screens/ShoppingNative/useShoppingHostChat.js +25 -5
  214. package/lib/screens/ShoppingNative/useShoppingHostChat.js.map +1 -1
  215. package/lib/screens/StudyNative/useStudyHostChat.js +25 -5
  216. package/lib/screens/StudyNative/useStudyHostChat.js.map +1 -1
  217. package/lib/screens/TravelNative/useTravelHostChat.js +25 -5
  218. package/lib/screens/TravelNative/useTravelHostChat.js.map +1 -1
  219. package/lib/screens/WebBuilderNative/codeWorkspaceApi.js +222 -0
  220. package/lib/screens/WebBuilderNative/codeWorkspaceApi.js.map +1 -0
  221. package/lib/screens/WebBuilderNative/index.js +1 -1
  222. package/lib/screens/WebBuilderNative/index.js.map +1 -1
  223. package/lib/screens/WebBuilderNative/sandboxProxyApi.js +126 -4
  224. package/lib/screens/WebBuilderNative/sandboxProxyApi.js.map +1 -1
  225. package/lib/screens/WebBuilderNative/useWebBuilderHost.js +120 -11
  226. package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
  227. package/package.json +3 -3
@@ -0,0 +1,555 @@
1
+ import {jsxs,jsx}from'react/jsx-runtime';import {useState,useEffect}from'react';import {View,StyleSheet,Text,Pressable,ScrollView}from'react-native';import {Image}from'expo-image';import {MaterialCommunityIcons}from'@expo/vector-icons';import Svg,{Defs,RadialGradient,Stop,Rect}from'react-native-svg';import {useChatLinkOpener}from'../links/chatLinkOpener.js';import {SkeletonBlock}from'./DiscoverSkeletons.js';import {DISCOVER_SERIF,DiscoverCard}from'./DiscoverStoryCards.js';import {formatUpdatedAt,formatChange,getYahooFinanceUrl,tileHue,getStockInitials,getStockLogoUrl}from'./markets.js';import {useTemperatureUnit}from'./useDiscoverSidebar.js';import {toDegrees,skyFromSummary,skyFromCondition,isSunDown,splitHighLow}from'./weather.js';var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ const SKY_LOOK = {
18
+ clear: {
19
+ day: "weather-sunny",
20
+ night: "weather-night",
21
+ tone: "sun",
22
+ label: "Clear"
23
+ },
24
+ partly: {
25
+ day: "weather-partly-cloudy",
26
+ night: "weather-night-partly-cloudy",
27
+ tone: "sun",
28
+ label: "Partly cloudy"
29
+ },
30
+ cloudy: {
31
+ day: "weather-cloudy",
32
+ night: "weather-cloudy",
33
+ tone: "cloud",
34
+ label: "Cloudy"
35
+ },
36
+ fog: {
37
+ day: "weather-fog",
38
+ night: "weather-fog",
39
+ tone: "cloud",
40
+ label: "Fog"
41
+ },
42
+ rain: {
43
+ day: "weather-rainy",
44
+ night: "weather-rainy",
45
+ tone: "rain",
46
+ label: "Rain"
47
+ },
48
+ storm: {
49
+ day: "weather-lightning",
50
+ night: "weather-lightning",
51
+ tone: "storm",
52
+ label: "Thunderstorms"
53
+ },
54
+ snow: {
55
+ day: "weather-snowy",
56
+ night: "weather-snowy",
57
+ tone: "snow",
58
+ label: "Snow"
59
+ }
60
+ };
61
+ function useNow(intervalMs) {
62
+ const [now, setNow] = useState(() => /* @__PURE__ */ new Date());
63
+ useEffect(() => {
64
+ const timer = setInterval(() => setNow(/* @__PURE__ */ new Date()), intervalMs);
65
+ return () => clearInterval(timer);
66
+ }, [intervalMs]);
67
+ return now;
68
+ }
69
+ function UnitSwitch({
70
+ unit,
71
+ onChange,
72
+ palette
73
+ }) {
74
+ return /* @__PURE__ */ jsx(View, { accessibilityRole: "radiogroup", accessibilityLabel: "Temperature unit", style: [styles.unitSwitch, {
75
+ backgroundColor: palette.imagePlaceholder
76
+ }], children: ["C", "F"].map((option) => {
77
+ const selected = unit === option;
78
+ return /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "radio", accessibilityState: {
79
+ selected
80
+ }, accessibilityLabel: option === "C" ? "Celsius" : "Fahrenheit", onPress: () => onChange(option), hitSlop: 6, style: [styles.unitOption, selected && [styles.unitSelected, {
81
+ backgroundColor: palette.card
82
+ }]], children: /* @__PURE__ */ jsxs(Text, { style: [styles.unitLabel, {
83
+ color: selected ? palette.text : palette.textMuted
84
+ }], children: [
85
+ "\xB0",
86
+ option
87
+ ] }) }, option);
88
+ }) });
89
+ }
90
+ function SkyTint({
91
+ color,
92
+ opacity
93
+ }) {
94
+ return /* @__PURE__ */ jsxs(Svg, { style: StyleSheet.absoluteFill, pointerEvents: "none", children: [
95
+ /* @__PURE__ */ jsx(Defs, { children: /* @__PURE__ */ jsxs(RadialGradient, { id: "discover-sky", cx: "100%", cy: "0%", rx: "120%", ry: "90%", fx: "100%", fy: "0%", children: [
96
+ /* @__PURE__ */ jsx(Stop, { offset: "0", stopColor: color, stopOpacity: opacity }),
97
+ /* @__PURE__ */ jsx(Stop, { offset: "0.6", stopColor: color, stopOpacity: 0 })
98
+ ] }) }),
99
+ /* @__PURE__ */ jsx(Rect, { x: "0", y: "0", width: "100%", height: "100%", fill: "url(#discover-sky)" })
100
+ ] });
101
+ }
102
+ function WeatherSkeleton({
103
+ palette
104
+ }) {
105
+ return /* @__PURE__ */ jsxs(DiscoverCard, { palette, radius: 22, innerStyle: styles.weatherPad, children: [
106
+ /* @__PURE__ */ jsx(SkeletonBlock, { palette, style: {
107
+ height: 12,
108
+ width: 160,
109
+ borderRadius: 4
110
+ } }),
111
+ /* @__PURE__ */ jsxs(View, { style: styles.weatherMain, children: [
112
+ /* @__PURE__ */ jsxs(View, { style: {
113
+ gap: 10
114
+ }, children: [
115
+ /* @__PURE__ */ jsx(SkeletonBlock, { palette, style: {
116
+ height: 48,
117
+ width: 96,
118
+ borderRadius: 8
119
+ } }),
120
+ /* @__PURE__ */ jsx(SkeletonBlock, { palette, style: {
121
+ height: 12,
122
+ width: 112,
123
+ borderRadius: 4
124
+ } })
125
+ ] }),
126
+ /* @__PURE__ */ jsx(SkeletonBlock, { palette, style: {
127
+ height: 48,
128
+ width: 48,
129
+ borderRadius: 24
130
+ } })
131
+ ] }),
132
+ /* @__PURE__ */ jsx(View, { style: [styles.forecast, {
133
+ borderTopColor: palette.border
134
+ }], children: Array.from({
135
+ length: 5
136
+ }, (_, index) => /* @__PURE__ */ jsx(SkeletonBlock, { palette, style: {
137
+ height: 56,
138
+ width: 36,
139
+ borderRadius: 8
140
+ } }, index)) })
141
+ ] });
142
+ }
143
+ function WeatherCard({
144
+ data,
145
+ pending,
146
+ latitude,
147
+ longitude,
148
+ palette
149
+ }) {
150
+ var _a, _b;
151
+ const now = useNow(5 * 6e4);
152
+ const [unit, setUnit] = useTemperatureUnit(data.location);
153
+ const sent = data.unitLabel === "C" ? "C" : "F";
154
+ const current = toDegrees(data.temperature, sent, unit);
155
+ if (current === null) {
156
+ if (pending) return /* @__PURE__ */ jsx(WeatherSkeleton, { palette });
157
+ return /* @__PURE__ */ jsxs(DiscoverCard, { palette, radius: 22, innerStyle: [styles.weatherPad, styles.weatherOff], children: [
158
+ /* @__PURE__ */ jsx(View, { style: [styles.offIcon, {
159
+ backgroundColor: palette.imagePlaceholder
160
+ }], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "cloud-off-outline", size: 18, color: palette.textMuted }) }),
161
+ /* @__PURE__ */ jsxs(View, { style: styles.flexShrink, children: [
162
+ /* @__PURE__ */ jsx(Text, { style: [styles.offTitle, {
163
+ color: palette.text
164
+ }], children: "Weather unavailable" }),
165
+ /* @__PURE__ */ jsx(Text, { style: [styles.muted13, {
166
+ color: palette.textMuted
167
+ }], numberOfLines: 1, children: data.location })
168
+ ] })
169
+ ] });
170
+ }
171
+ const sky = (_b = skyFromSummary(data.summary)) != null ? _b : skyFromCondition((_a = data.forecast[0]) == null ? void 0 : _a.condition);
172
+ const night = latitude != null && longitude != null && (sky === "clear" || sky === "partly") && isSunDown(latitude, longitude, now);
173
+ const look = SKY_LOOK[sky];
174
+ const tone = night ? "night" : look.tone;
175
+ const highLow = splitHighLow(data.highLow);
176
+ return /* @__PURE__ */ jsxs(DiscoverCard, { palette, radius: 22, children: [
177
+ /* @__PURE__ */ jsx(SkyTint, __spreadValues({}, palette.wxTint[tone])),
178
+ /* @__PURE__ */ jsxs(View, { style: styles.weatherPad, accessibilityLabel: `Weather in ${data.location}`, children: [
179
+ /* @__PURE__ */ jsxs(View, { style: styles.weatherTop, children: [
180
+ /* @__PURE__ */ jsxs(View, { style: styles.place, children: [
181
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "map-marker-outline", size: 14, color: palette.textMuted }),
182
+ /* @__PURE__ */ jsx(Text, { style: [styles.muted13, styles.flexShrink, {
183
+ color: palette.textMuted
184
+ }], numberOfLines: 1, children: data.location })
185
+ ] }),
186
+ /* @__PURE__ */ jsx(UnitSwitch, { unit, onChange: setUnit, palette })
187
+ ] }),
188
+ /* @__PURE__ */ jsxs(View, { style: styles.weatherMain, children: [
189
+ /* @__PURE__ */ jsxs(Text, { style: [styles.temperature, {
190
+ color: palette.text
191
+ }], accessibilityLabel: `${current} degrees ${unit === "C" ? "Celsius" : "Fahrenheit"}`, children: [
192
+ current,
193
+ "\xB0"
194
+ ] }),
195
+ /* @__PURE__ */ jsxs(View, { style: styles.skyCol, children: [
196
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: night ? look.night : look.day, size: 32, color: palette.wx[tone] }),
197
+ /* @__PURE__ */ jsx(Text, { style: [styles.skySummary, {
198
+ color: palette.text
199
+ }], children: data.summary }),
200
+ highLow ? /* @__PURE__ */ jsxs(Text, { style: [styles.muted13, styles.tabular, {
201
+ color: palette.textMuted
202
+ }], children: [
203
+ "H ",
204
+ toDegrees(highLow.high, sent, unit),
205
+ "\xB0 \xB7 L ",
206
+ toDegrees(highLow.low, sent, unit),
207
+ "\xB0"
208
+ ] }) : null
209
+ ] })
210
+ ] }),
211
+ data.forecast.length > 0 ? /* @__PURE__ */ jsx(View, { style: [styles.forecast, {
212
+ borderTopColor: palette.border
213
+ }], accessibilityLabel: "Next days", children: data.forecast.map((item, index) => {
214
+ const dayLook = SKY_LOOK[skyFromCondition(item.condition)];
215
+ const degrees = toDegrees(item.temperature, sent, unit);
216
+ const day = index === 0 ? "Today" : item.day;
217
+ return /* @__PURE__ */ jsxs(View, { style: styles.forecastDay, accessible: true, accessibilityLabel: `${day}, ${dayLook.label}, ${degrees != null ? degrees : "unknown"} degrees`, children: [
218
+ /* @__PURE__ */ jsx(Text, { style: [styles.forecastLabel, index === 0 ? {
219
+ color: palette.text,
220
+ fontWeight: "500"
221
+ } : {
222
+ color: palette.textMuted
223
+ }], children: day }),
224
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: dayLook.day, size: 18, color: palette.wx[dayLook.tone] }),
225
+ /* @__PURE__ */ jsxs(Text, { style: [styles.forecastTemp, {
226
+ color: palette.text
227
+ }], children: [
228
+ degrees != null ? degrees : "\u2014",
229
+ "\xB0"
230
+ ] })
231
+ ] }, item.day);
232
+ }) }) : null
233
+ ] })
234
+ ] });
235
+ }
236
+ function StockLogo({
237
+ name,
238
+ ticker,
239
+ palette
240
+ }) {
241
+ const [failed, setFailed] = useState(false);
242
+ if (failed) {
243
+ const hue = tileHue(ticker);
244
+ return /* @__PURE__ */ jsx(View, { style: [styles.logo, {
245
+ backgroundColor: `hsl(${hue}, 62%, ${palette.tickBg}%)`
246
+ }], children: /* @__PURE__ */ jsx(Text, { style: [styles.initials, {
247
+ color: `hsl(${hue}, 48%, ${palette.tickInk}%)`
248
+ }], children: getStockInitials(name, ticker) }) });
249
+ }
250
+ return /* @__PURE__ */ jsx(View, { style: [styles.logo, styles.logoImage, {
251
+ borderColor: palette.cardBorder
252
+ }], children: /* @__PURE__ */ jsx(Image, { source: {
253
+ uri: getStockLogoUrl(ticker)
254
+ }, style: StyleSheet.absoluteFill, contentFit: "contain", onError: () => setFailed(true) }) });
255
+ }
256
+ function MarketTile({
257
+ item,
258
+ palette,
259
+ onOpen
260
+ }) {
261
+ const up = item.direction === "up";
262
+ const change = formatChange(item.changePercent, up);
263
+ return /* @__PURE__ */ jsxs(DiscoverCard, { palette, radius: 16, onPress: () => onOpen(getYahooFinanceUrl(item.ticker)), accessibilityLabel: `${item.name}, ${item.ticker}, ${item.price}, ${up ? "up" : "down"} ${change}. Opens on Yahoo Finance`, innerStyle: styles.tile, children: [
264
+ /* @__PURE__ */ jsxs(View, { style: styles.tileHead, children: [
265
+ /* @__PURE__ */ jsx(StockLogo, { name: item.name, ticker: item.ticker, palette }),
266
+ /* @__PURE__ */ jsxs(View, { style: styles.flexShrink, children: [
267
+ /* @__PURE__ */ jsx(Text, { style: [styles.tileTicker, {
268
+ color: palette.text
269
+ }], numberOfLines: 1, children: item.ticker }),
270
+ /* @__PURE__ */ jsx(Text, { style: [styles.tileName, {
271
+ color: palette.textMuted
272
+ }], numberOfLines: 1, children: item.name })
273
+ ] })
274
+ ] }),
275
+ /* @__PURE__ */ jsxs(View, { style: styles.tileFoot, children: [
276
+ /* @__PURE__ */ jsx(Text, { style: [styles.tilePrice, styles.tabular, {
277
+ color: palette.text
278
+ }], numberOfLines: 1, children: item.price }),
279
+ /* @__PURE__ */ jsx(Text, { style: [styles.change, up ? {
280
+ color: palette.up,
281
+ backgroundColor: palette.upSoft
282
+ } : {
283
+ color: palette.down,
284
+ backgroundColor: palette.downSoft
285
+ }], children: change })
286
+ ] })
287
+ ] });
288
+ }
289
+ function MarketStrip({
290
+ gainers,
291
+ trending,
292
+ pending,
293
+ palette,
294
+ onOpen
295
+ }) {
296
+ var _a;
297
+ const tabs = [{
298
+ key: "gainers",
299
+ label: "Top gainers",
300
+ items: gainers
301
+ }, {
302
+ key: "trending",
303
+ label: "Trending",
304
+ items: trending
305
+ }].filter((tab) => pending || tab.items.length > 0);
306
+ const [picked, setPicked] = useState("gainers");
307
+ const active = (_a = tabs.find((tab) => tab.key === picked)) != null ? _a : tabs[0];
308
+ if (!active) return null;
309
+ return /* @__PURE__ */ jsxs(View, { children: [
310
+ /* @__PURE__ */ jsx(View, { style: styles.marketHead, accessibilityRole: "tablist", accessibilityLabel: "Markets", children: tabs.map((tab) => {
311
+ const selected = tab.key === active.key;
312
+ return /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "tab", accessibilityState: {
313
+ selected
314
+ }, onPress: () => setPicked(tab.key), hitSlop: 4, style: [styles.marketTab, selected && {
315
+ backgroundColor: palette.primarySoft
316
+ }], children: /* @__PURE__ */ jsx(Text, { style: [styles.marketTabLabel, {
317
+ color: selected ? palette.primary : palette.textMuted
318
+ }], children: tab.label }) }, tab.key);
319
+ }) }),
320
+ /* @__PURE__ */ jsx(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: styles.marketScroll, contentContainerStyle: styles.marketRow, children: pending ? Array.from({
321
+ length: 3
322
+ }, (_, index) => /* @__PURE__ */ jsx(SkeletonBlock, { palette, style: styles.tileSkeleton }, index)) : active.items.map((item) => /* @__PURE__ */ jsx(MarketTile, { item, palette, onOpen }, item.ticker)) })
323
+ ] });
324
+ }
325
+ function DiscoverSidebar({
326
+ state,
327
+ palette
328
+ }) {
329
+ const {
330
+ sidebar,
331
+ pending,
332
+ place
333
+ } = state;
334
+ const openLink = useChatLinkOpener();
335
+ const hasMarkets = sidebar.topGainers.length > 0 || sidebar.trendingCompanies.length > 0;
336
+ const updatedAt = hasMarkets ? formatUpdatedAt(sidebar.meta.crawledAt) : null;
337
+ return /* @__PURE__ */ jsxs(View, { style: styles.sidebar, accessibilityLabel: "Weather and markets", children: [
338
+ /* @__PURE__ */ jsx(WeatherCard, { data: sidebar.weather, pending, latitude: place.latitude, longitude: place.longitude, palette }),
339
+ /* @__PURE__ */ jsx(MarketStrip, { gainers: sidebar.topGainers, trending: sidebar.trendingCompanies, pending, palette, onOpen: openLink }),
340
+ /* @__PURE__ */ jsxs(Text, { style: [styles.attribution, {
341
+ color: palette.textMuted
342
+ }], children: [
343
+ hasMarkets ? "Data from Yahoo Finance and Open-Meteo" : "Weather from Open-Meteo",
344
+ updatedAt ? ` \xB7 Updated ${updatedAt}` : ""
345
+ ] })
346
+ ] });
347
+ }
348
+ const styles = StyleSheet.create({
349
+ sidebar: {
350
+ gap: 16
351
+ },
352
+ flexShrink: {
353
+ flexShrink: 1,
354
+ minWidth: 0
355
+ },
356
+ tabular: {
357
+ fontVariant: ["tabular-nums"]
358
+ },
359
+ muted13: {
360
+ fontSize: 13,
361
+ lineHeight: 20
362
+ },
363
+ weatherPad: {
364
+ padding: 20
365
+ },
366
+ weatherOff: {
367
+ flexDirection: "row",
368
+ alignItems: "center",
369
+ gap: 12
370
+ },
371
+ offIcon: {
372
+ width: 40,
373
+ height: 40,
374
+ borderRadius: 20,
375
+ alignItems: "center",
376
+ justifyContent: "center"
377
+ },
378
+ offTitle: {
379
+ fontSize: 14,
380
+ fontWeight: "500"
381
+ },
382
+ weatherTop: {
383
+ flexDirection: "row",
384
+ alignItems: "center",
385
+ justifyContent: "space-between",
386
+ gap: 12
387
+ },
388
+ place: {
389
+ flexDirection: "row",
390
+ alignItems: "center",
391
+ gap: 6,
392
+ flexShrink: 1,
393
+ minWidth: 0
394
+ },
395
+ unitSwitch: {
396
+ flexDirection: "row",
397
+ borderRadius: 999,
398
+ padding: 2
399
+ },
400
+ unitOption: {
401
+ height: 24,
402
+ paddingHorizontal: 8,
403
+ borderRadius: 999,
404
+ justifyContent: "center"
405
+ },
406
+ unitSelected: {
407
+ shadowColor: "#000",
408
+ shadowOpacity: 0.08,
409
+ shadowRadius: 2,
410
+ shadowOffset: {
411
+ width: 0,
412
+ height: 1
413
+ },
414
+ elevation: 1
415
+ },
416
+ unitLabel: {
417
+ fontSize: 11.5,
418
+ fontWeight: "500"
419
+ },
420
+ weatherMain: {
421
+ marginTop: 16,
422
+ flexDirection: "row",
423
+ alignItems: "flex-end",
424
+ justifyContent: "space-between",
425
+ gap: 16
426
+ },
427
+ temperature: {
428
+ fontFamily: DISCOVER_SERIF,
429
+ fontSize: 64,
430
+ lineHeight: 64,
431
+ fontVariant: ["tabular-nums"]
432
+ },
433
+ skyCol: {
434
+ flexShrink: 1,
435
+ minWidth: 0,
436
+ alignItems: "flex-end"
437
+ },
438
+ skySummary: {
439
+ marginTop: 8,
440
+ fontSize: 14,
441
+ lineHeight: 20,
442
+ fontWeight: "500",
443
+ textAlign: "right"
444
+ },
445
+ forecast: {
446
+ marginTop: 16,
447
+ paddingTop: 14,
448
+ borderTopWidth: StyleSheet.hairlineWidth,
449
+ flexDirection: "row",
450
+ justifyContent: "space-between"
451
+ },
452
+ forecastDay: {
453
+ flex: 1,
454
+ alignItems: "center",
455
+ gap: 6
456
+ },
457
+ forecastLabel: {
458
+ fontSize: 12
459
+ },
460
+ forecastTemp: {
461
+ fontSize: 13.5,
462
+ fontWeight: "600",
463
+ fontVariant: ["tabular-nums"]
464
+ },
465
+ logo: {
466
+ width: 32,
467
+ height: 32,
468
+ borderRadius: 9,
469
+ alignItems: "center",
470
+ justifyContent: "center",
471
+ overflow: "hidden"
472
+ },
473
+ logoImage: {
474
+ backgroundColor: "#ffffff",
475
+ borderWidth: StyleSheet.hairlineWidth
476
+ },
477
+ initials: {
478
+ fontSize: 11.5,
479
+ fontWeight: "600",
480
+ letterSpacing: 0.4
481
+ },
482
+ change: {
483
+ marginTop: 2,
484
+ borderRadius: 6,
485
+ overflow: "hidden",
486
+ paddingHorizontal: 6,
487
+ fontSize: 12,
488
+ lineHeight: 18,
489
+ fontWeight: "600",
490
+ fontVariant: ["tabular-nums"]
491
+ },
492
+ marketHead: {
493
+ flexDirection: "row",
494
+ gap: 4
495
+ },
496
+ marketTab: {
497
+ height: 30,
498
+ paddingHorizontal: 12,
499
+ borderRadius: 999,
500
+ justifyContent: "center"
501
+ },
502
+ marketTabLabel: {
503
+ fontSize: 13,
504
+ fontWeight: "500"
505
+ },
506
+ marketScroll: {
507
+ marginHorizontal: -16,
508
+ marginTop: 8
509
+ },
510
+ marketRow: {
511
+ paddingHorizontal: 16,
512
+ paddingVertical: 6,
513
+ gap: 10
514
+ },
515
+ tile: {
516
+ width: 156,
517
+ padding: 12,
518
+ gap: 12
519
+ },
520
+ tileSkeleton: {
521
+ width: 156,
522
+ height: 104,
523
+ borderRadius: 16
524
+ },
525
+ tileHead: {
526
+ flexDirection: "row",
527
+ alignItems: "center",
528
+ gap: 10
529
+ },
530
+ tileTicker: {
531
+ fontSize: 14,
532
+ lineHeight: 18,
533
+ fontWeight: "600"
534
+ },
535
+ tileName: {
536
+ fontSize: 12,
537
+ lineHeight: 16
538
+ },
539
+ tileFoot: {
540
+ flexDirection: "row",
541
+ alignItems: "center",
542
+ justifyContent: "space-between",
543
+ gap: 6
544
+ },
545
+ tilePrice: {
546
+ flexShrink: 1,
547
+ fontSize: 14,
548
+ fontWeight: "500"
549
+ },
550
+ attribution: {
551
+ paddingHorizontal: 4,
552
+ fontSize: 11.5,
553
+ lineHeight: 18
554
+ }
555
+ });export{DiscoverSidebar};//# sourceMappingURL=DiscoverSidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DiscoverSidebar.js","sources":["../../../src/features/discover/DiscoverSidebar.tsx"],"sourcesContent":["/**\n * Discover's weather and market panel — the browser's `DiscoverSharedSidebar`.\n * On a phone it leads the feed: the weather card, then the two market lists as\n * one compact sideways strip, so the stories start right after.\n */\nimport React, { useEffect, useState } from 'react';\nimport { Pressable, ScrollView, StyleSheet, Text, View } from 'react-native';\nimport { Image } from 'expo-image';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport Svg, { Defs, RadialGradient, Rect, Stop } from 'react-native-svg';\nimport { useChatLinkOpener } from '../links/chatLinkOpener';\nimport { SkeletonBlock } from './DiscoverSkeletons';\nimport { DISCOVER_SERIF, DiscoverCard, type DiscoverPalette } from './DiscoverStoryCards';\nimport {\n formatChange,\n formatUpdatedAt,\n getStockInitials,\n getStockLogoUrl,\n getYahooFinanceUrl,\n tileHue,\n} from './markets';\nimport {\n useTemperatureUnit,\n type DiscoverSidebarState,\n type DiscoverStockItem,\n type DiscoverWeather,\n} from './useDiscoverSidebar';\nimport {\n isSunDown,\n skyFromCondition,\n skyFromSummary,\n splitHighLow,\n toDegrees,\n type Sky,\n type TemperatureUnit,\n} from './weather';\n\ntype IconName = keyof typeof MaterialCommunityIcons.glyphMap;\ntype Tone = keyof DiscoverPalette['wx'];\n\n/** Each sky's icon by day and by night, and the tone that colours it and tints the card. */\nconst SKY_LOOK: Record<Sky, { day: IconName; night: IconName; tone: Tone; label: string }> = {\n clear: { day: 'weather-sunny', night: 'weather-night', tone: 'sun', label: 'Clear' },\n partly: { day: 'weather-partly-cloudy', night: 'weather-night-partly-cloudy', tone: 'sun', label: 'Partly cloudy' },\n cloudy: { day: 'weather-cloudy', night: 'weather-cloudy', tone: 'cloud', label: 'Cloudy' },\n fog: { day: 'weather-fog', night: 'weather-fog', tone: 'cloud', label: 'Fog' },\n rain: { day: 'weather-rainy', night: 'weather-rainy', tone: 'rain', label: 'Rain' },\n storm: { day: 'weather-lightning', night: 'weather-lightning', tone: 'storm', label: 'Thunderstorms' },\n snow: { day: 'weather-snowy', night: 'weather-snowy', tone: 'snow', label: 'Snow' },\n};\n\nfunction useNow(intervalMs: number): Date {\n const [now, setNow] = useState(() => new Date());\n useEffect(() => {\n const timer = setInterval(() => setNow(new Date()), intervalMs);\n return () => clearInterval(timer);\n }, [intervalMs]);\n return now;\n}\n\nfunction UnitSwitch({\n unit,\n onChange,\n palette,\n}: {\n unit: TemperatureUnit;\n onChange: (unit: TemperatureUnit) => void;\n palette: DiscoverPalette;\n}) {\n return (\n <View\n accessibilityRole=\"radiogroup\"\n accessibilityLabel=\"Temperature unit\"\n style={[styles.unitSwitch, { backgroundColor: palette.imagePlaceholder }]}\n >\n {(['C', 'F'] as const).map((option) => {\n const selected = unit === option;\n return (\n <Pressable\n key={option}\n accessibilityRole=\"radio\"\n accessibilityState={{ selected }}\n accessibilityLabel={option === 'C' ? 'Celsius' : 'Fahrenheit'}\n onPress={() => onChange(option)}\n hitSlop={6}\n style={[\n styles.unitOption,\n selected && [styles.unitSelected, { backgroundColor: palette.card }],\n ]}\n >\n <Text style={[styles.unitLabel, { color: selected ? palette.text : palette.textMuted }]}>\n °{option}\n </Text>\n </Pressable>\n );\n })}\n </View>\n );\n}\n\n/** The sky's soft glow in the card's top-right corner (the web's `.yr-wx` radial gradient). */\nfunction SkyTint({ color, opacity }: { color: string; opacity: number }) {\n return (\n <Svg style={StyleSheet.absoluteFill} pointerEvents=\"none\">\n <Defs>\n <RadialGradient id=\"discover-sky\" cx=\"100%\" cy=\"0%\" rx=\"120%\" ry=\"90%\" fx=\"100%\" fy=\"0%\">\n <Stop offset=\"0\" stopColor={color} stopOpacity={opacity} />\n <Stop offset=\"0.6\" stopColor={color} stopOpacity={0} />\n </RadialGradient>\n </Defs>\n <Rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"url(#discover-sky)\" />\n </Svg>\n );\n}\n\nfunction WeatherSkeleton({ palette }: { palette: DiscoverPalette }) {\n return (\n <DiscoverCard palette={palette} radius={22} innerStyle={styles.weatherPad}>\n <SkeletonBlock palette={palette} style={{ height: 12, width: 160, borderRadius: 4 }} />\n <View style={styles.weatherMain}>\n <View style={{ gap: 10 }}>\n <SkeletonBlock palette={palette} style={{ height: 48, width: 96, borderRadius: 8 }} />\n <SkeletonBlock palette={palette} style={{ height: 12, width: 112, borderRadius: 4 }} />\n </View>\n <SkeletonBlock palette={palette} style={{ height: 48, width: 48, borderRadius: 24 }} />\n </View>\n <View style={[styles.forecast, { borderTopColor: palette.border }]}>\n {Array.from({ length: 5 }, (_, index) => (\n <SkeletonBlock key={index} palette={palette} style={{ height: 56, width: 36, borderRadius: 8 }} />\n ))}\n </View>\n </DiscoverCard>\n );\n}\n\nfunction WeatherCard({\n data,\n pending,\n latitude,\n longitude,\n palette,\n}: {\n data: DiscoverWeather;\n pending: boolean;\n latitude?: number;\n longitude?: number;\n palette: DiscoverPalette;\n}) {\n const now = useNow(5 * 60_000);\n const [unit, setUnit] = useTemperatureUnit(data.location);\n const sent: TemperatureUnit = data.unitLabel === 'C' ? 'C' : 'F';\n const current = toDegrees(data.temperature, sent, unit);\n\n if (current === null) {\n if (pending) return <WeatherSkeleton palette={palette} />;\n\n return (\n <DiscoverCard palette={palette} radius={22} innerStyle={[styles.weatherPad, styles.weatherOff]}>\n <View style={[styles.offIcon, { backgroundColor: palette.imagePlaceholder }]}>\n <MaterialCommunityIcons name=\"cloud-off-outline\" size={18} color={palette.textMuted} />\n </View>\n <View style={styles.flexShrink}>\n <Text style={[styles.offTitle, { color: palette.text }]}>Weather unavailable</Text>\n <Text style={[styles.muted13, { color: palette.textMuted }]} numberOfLines={1}>\n {data.location}\n </Text>\n </View>\n </DiscoverCard>\n );\n }\n\n // The summary is the sky right now; the first forecast day only stands in when it says nothing.\n const sky = skyFromSummary(data.summary) ?? skyFromCondition(data.forecast[0]?.condition);\n const night =\n latitude != null &&\n longitude != null &&\n (sky === 'clear' || sky === 'partly') &&\n isSunDown(latitude, longitude, now);\n const look = SKY_LOOK[sky];\n const tone: Tone = night ? 'night' : look.tone;\n const highLow = splitHighLow(data.highLow);\n\n return (\n <DiscoverCard palette={palette} radius={22}>\n <SkyTint {...palette.wxTint[tone]} />\n <View style={styles.weatherPad} accessibilityLabel={`Weather in ${data.location}`}>\n <View style={styles.weatherTop}>\n <View style={styles.place}>\n <MaterialCommunityIcons name=\"map-marker-outline\" size={14} color={palette.textMuted} />\n <Text\n style={[styles.muted13, styles.flexShrink, { color: palette.textMuted }]}\n numberOfLines={1}\n >\n {data.location}\n </Text>\n </View>\n <UnitSwitch unit={unit} onChange={setUnit} palette={palette} />\n </View>\n\n {/* The temperature on the left, the sky on the right, as a weather widget reads. */}\n <View style={styles.weatherMain}>\n <Text\n style={[styles.temperature, { color: palette.text }]}\n accessibilityLabel={`${current} degrees ${unit === 'C' ? 'Celsius' : 'Fahrenheit'}`}\n >\n {current}°\n </Text>\n <View style={styles.skyCol}>\n <MaterialCommunityIcons\n name={night ? look.night : look.day}\n size={32}\n color={palette.wx[tone]}\n />\n <Text style={[styles.skySummary, { color: palette.text }]}>{data.summary}</Text>\n {highLow ? (\n <Text style={[styles.muted13, styles.tabular, { color: palette.textMuted }]}>\n H {toDegrees(highLow.high, sent, unit)}° · L {toDegrees(highLow.low, sent, unit)}°\n </Text>\n ) : null}\n </View>\n </View>\n\n {data.forecast.length > 0 ? (\n <View style={[styles.forecast, { borderTopColor: palette.border }]} accessibilityLabel=\"Next days\">\n {data.forecast.map((item, index) => {\n const dayLook = SKY_LOOK[skyFromCondition(item.condition)];\n const degrees = toDegrees(item.temperature, sent, unit);\n const day = index === 0 ? 'Today' : item.day;\n return (\n <View\n key={item.day}\n style={styles.forecastDay}\n accessible\n accessibilityLabel={`${day}, ${dayLook.label}, ${degrees ?? 'unknown'} degrees`}\n >\n <Text\n style={[\n styles.forecastLabel,\n index === 0\n ? { color: palette.text, fontWeight: '500' }\n : { color: palette.textMuted },\n ]}\n >\n {day}\n </Text>\n <MaterialCommunityIcons\n name={dayLook.day}\n size={18}\n color={palette.wx[dayLook.tone]}\n />\n <Text style={[styles.forecastTemp, { color: palette.text }]}>\n {degrees ?? '—'}°\n </Text>\n </View>\n );\n })}\n </View>\n ) : null}\n </View>\n </DiscoverCard>\n );\n}\n\nfunction StockLogo({ name, ticker, palette }: { name: string; ticker: string; palette: DiscoverPalette }) {\n const [failed, setFailed] = useState(false);\n\n if (failed) {\n const hue = tileHue(ticker);\n return (\n <View style={[styles.logo, { backgroundColor: `hsl(${hue}, 62%, ${palette.tickBg}%)` }]}>\n <Text style={[styles.initials, { color: `hsl(${hue}, 48%, ${palette.tickInk}%)` }]}>\n {getStockInitials(name, ticker)}\n </Text>\n </View>\n );\n }\n\n return (\n <View style={[styles.logo, styles.logoImage, { borderColor: palette.cardBorder }]}>\n <Image\n source={{ uri: getStockLogoUrl(ticker) }}\n style={StyleSheet.absoluteFill}\n contentFit=\"contain\"\n onError={() => setFailed(true)}\n />\n </View>\n );\n}\n\n/** One market as a small card in the strip: logo and ticker, the price, and the day's move. */\nfunction MarketTile({\n item,\n palette,\n onOpen,\n}: {\n item: DiscoverStockItem;\n palette: DiscoverPalette;\n onOpen: (url: string) => void;\n}) {\n const up = item.direction === 'up';\n const change = formatChange(item.changePercent, up);\n\n return (\n <DiscoverCard\n palette={palette}\n radius={16}\n onPress={() => onOpen(getYahooFinanceUrl(item.ticker))}\n accessibilityLabel={`${item.name}, ${item.ticker}, ${item.price}, ${up ? 'up' : 'down'} ${change}. Opens on Yahoo Finance`}\n innerStyle={styles.tile}\n >\n <View style={styles.tileHead}>\n <StockLogo name={item.name} ticker={item.ticker} palette={palette} />\n <View style={styles.flexShrink}>\n <Text style={[styles.tileTicker, { color: palette.text }]} numberOfLines={1}>\n {item.ticker}\n </Text>\n <Text style={[styles.tileName, { color: palette.textMuted }]} numberOfLines={1}>\n {item.name}\n </Text>\n </View>\n </View>\n <View style={styles.tileFoot}>\n <Text style={[styles.tilePrice, styles.tabular, { color: palette.text }]} numberOfLines={1}>\n {item.price}\n </Text>\n <Text\n style={[\n styles.change,\n up\n ? { color: palette.up, backgroundColor: palette.upSoft }\n : { color: palette.down, backgroundColor: palette.downSoft },\n ]}\n >\n {change}\n </Text>\n </View>\n </DiscoverCard>\n );\n}\n\ntype MarketTab = 'gainers' | 'trending';\n\n/**\n * The web's two market lists as one compact strip: a switch between Top gainers and\n * Trending companies over a sideways row of small cards, so the stories stay in view.\n * Left out entirely once loaded with nothing to show.\n */\nfunction MarketStrip({\n gainers,\n trending,\n pending,\n palette,\n onOpen,\n}: {\n gainers: DiscoverStockItem[];\n trending: DiscoverStockItem[];\n pending: boolean;\n palette: DiscoverPalette;\n onOpen: (url: string) => void;\n}) {\n const tabs = (\n [\n { key: 'gainers', label: 'Top gainers', items: gainers },\n { key: 'trending', label: 'Trending', items: trending },\n ] as const\n ).filter((tab) => pending || tab.items.length > 0);\n const [picked, setPicked] = useState<MarketTab>('gainers');\n const active = tabs.find((tab) => tab.key === picked) ?? tabs[0];\n\n if (!active) return null;\n\n return (\n <View>\n <View style={styles.marketHead} accessibilityRole=\"tablist\" accessibilityLabel=\"Markets\">\n {tabs.map((tab) => {\n const selected = tab.key === active.key;\n return (\n <Pressable\n key={tab.key}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected }}\n onPress={() => setPicked(tab.key)}\n hitSlop={4}\n style={[styles.marketTab, selected && { backgroundColor: palette.primarySoft }]}\n >\n <Text\n style={[\n styles.marketTabLabel,\n { color: selected ? palette.primary : palette.textMuted },\n ]}\n >\n {tab.label}\n </Text>\n </Pressable>\n );\n })}\n </View>\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={styles.marketScroll}\n contentContainerStyle={styles.marketRow}\n >\n {pending\n ? Array.from({ length: 3 }, (_, index) => (\n <SkeletonBlock key={index} palette={palette} style={styles.tileSkeleton} />\n ))\n : active.items.map((item) => (\n <MarketTile key={item.ticker} item={item} palette={palette} onOpen={onOpen} />\n ))}\n </ScrollView>\n </View>\n );\n}\n\n/** `state` comes from the feed's `useDiscoverSidebar`, so switching topics keeps the panel's data. */\nexport function DiscoverSidebar({ state, palette }: { state: DiscoverSidebarState; palette: DiscoverPalette }) {\n const { sidebar, pending, place } = state;\n const openLink = useChatLinkOpener();\n const hasMarkets = sidebar.topGainers.length > 0 || sidebar.trendingCompanies.length > 0;\n const updatedAt = hasMarkets ? formatUpdatedAt(sidebar.meta.crawledAt) : null;\n\n return (\n <View style={styles.sidebar} accessibilityLabel=\"Weather and markets\">\n <WeatherCard\n data={sidebar.weather}\n pending={pending}\n latitude={place.latitude}\n longitude={place.longitude}\n palette={palette}\n />\n <MarketStrip\n gainers={sidebar.topGainers}\n trending={sidebar.trendingCompanies}\n pending={pending}\n palette={palette}\n onOpen={openLink}\n />\n <Text style={[styles.attribution, { color: palette.textMuted }]}>\n {hasMarkets ? 'Data from Yahoo Finance and Open-Meteo' : 'Weather from Open-Meteo'}\n {updatedAt ? ` · Updated ${updatedAt}` : ''}\n </Text>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n sidebar: {\n gap: 16,\n },\n flexShrink: {\n flexShrink: 1,\n minWidth: 0,\n },\n tabular: {\n fontVariant: ['tabular-nums'],\n },\n muted13: {\n fontSize: 13,\n lineHeight: 20,\n },\n weatherPad: {\n padding: 20,\n },\n weatherOff: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n },\n offIcon: {\n width: 40,\n height: 40,\n borderRadius: 20,\n alignItems: 'center',\n justifyContent: 'center',\n },\n offTitle: {\n fontSize: 14,\n fontWeight: '500',\n },\n weatherTop: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 12,\n },\n place: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n flexShrink: 1,\n minWidth: 0,\n },\n unitSwitch: {\n flexDirection: 'row',\n borderRadius: 999,\n padding: 2,\n },\n unitOption: {\n height: 24,\n paddingHorizontal: 8,\n borderRadius: 999,\n justifyContent: 'center',\n },\n unitSelected: {\n shadowColor: '#000',\n shadowOpacity: 0.08,\n shadowRadius: 2,\n shadowOffset: { width: 0, height: 1 },\n elevation: 1,\n },\n unitLabel: {\n fontSize: 11.5,\n fontWeight: '500',\n },\n weatherMain: {\n marginTop: 16,\n flexDirection: 'row',\n alignItems: 'flex-end',\n justifyContent: 'space-between',\n gap: 16,\n },\n temperature: {\n fontFamily: DISCOVER_SERIF,\n fontSize: 64,\n lineHeight: 64,\n fontVariant: ['tabular-nums'],\n },\n skyCol: {\n flexShrink: 1,\n minWidth: 0,\n alignItems: 'flex-end',\n },\n skySummary: {\n marginTop: 8,\n fontSize: 14,\n lineHeight: 20,\n fontWeight: '500',\n textAlign: 'right',\n },\n forecast: {\n marginTop: 16,\n paddingTop: 14,\n borderTopWidth: StyleSheet.hairlineWidth,\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n forecastDay: {\n flex: 1,\n alignItems: 'center',\n gap: 6,\n },\n forecastLabel: {\n fontSize: 12,\n },\n forecastTemp: {\n fontSize: 13.5,\n fontWeight: '600',\n fontVariant: ['tabular-nums'],\n },\n logo: {\n width: 32,\n height: 32,\n borderRadius: 9,\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n },\n logoImage: {\n backgroundColor: '#ffffff',\n borderWidth: StyleSheet.hairlineWidth,\n },\n initials: {\n fontSize: 11.5,\n fontWeight: '600',\n letterSpacing: 0.4,\n },\n change: {\n marginTop: 2,\n borderRadius: 6,\n overflow: 'hidden',\n paddingHorizontal: 6,\n fontSize: 12,\n lineHeight: 18,\n fontWeight: '600',\n fontVariant: ['tabular-nums'],\n },\n marketHead: {\n flexDirection: 'row',\n gap: 4,\n },\n marketTab: {\n height: 30,\n paddingHorizontal: 12,\n borderRadius: 999,\n justifyContent: 'center',\n },\n marketTabLabel: {\n fontSize: 13,\n fontWeight: '500',\n },\n marketScroll: {\n marginHorizontal: -16,\n marginTop: 8,\n },\n marketRow: {\n paddingHorizontal: 16,\n paddingVertical: 6,\n gap: 10,\n },\n tile: {\n width: 156,\n padding: 12,\n gap: 12,\n },\n tileSkeleton: {\n width: 156,\n height: 104,\n borderRadius: 16,\n },\n tileHead: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 10,\n },\n tileTicker: {\n fontSize: 14,\n lineHeight: 18,\n fontWeight: '600',\n },\n tileName: {\n fontSize: 12,\n lineHeight: 16,\n },\n tileFoot: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 6,\n },\n tilePrice: {\n flexShrink: 1,\n fontSize: 14,\n fontWeight: '500',\n },\n attribution: {\n paddingHorizontal: 4,\n fontSize: 11.5,\n lineHeight: 18,\n },\n});\n"],"names":[],"mappings":"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"}