@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.
- package/lib/features/agent-chat/NativeAgentChat.js +21 -4
- package/lib/features/agent-chat/NativeAgentChat.js.map +1 -1
- package/lib/features/chat/ApprovalCard.js +353 -0
- package/lib/features/chat/ApprovalCard.js.map +1 -0
- package/lib/features/chat/AskUserCard.js +9 -2
- package/lib/features/chat/AskUserCard.js.map +1 -1
- package/lib/features/chat/askUser.js +25 -3
- package/lib/features/chat/askUser.js.map +1 -1
- package/lib/features/chat/queuedFollowUpRows.js +13 -0
- package/lib/features/chat/queuedFollowUpRows.js.map +1 -0
- package/lib/features/discover/DiscoverArticle.js +105 -92
- package/lib/features/discover/DiscoverArticle.js.map +1 -1
- package/lib/features/discover/DiscoverFeed.js +97 -48
- package/lib/features/discover/DiscoverFeed.js.map +1 -1
- package/lib/features/discover/DiscoverFollowUp.js +135 -0
- package/lib/features/discover/DiscoverFollowUp.js.map +1 -0
- package/lib/features/discover/DiscoverSidebar.js +555 -0
- package/lib/features/discover/DiscoverSidebar.js.map +1 -0
- package/lib/features/discover/DiscoverSkeletons.js +123 -0
- package/lib/features/discover/DiscoverSkeletons.js.map +1 -0
- package/lib/features/discover/DiscoverStoryCards.js +193 -87
- package/lib/features/discover/DiscoverStoryCards.js.map +1 -1
- package/lib/features/discover/followUpQuery.js +42 -0
- package/lib/features/discover/followUpQuery.js.map +1 -0
- package/lib/features/discover/markets.js +37 -0
- package/lib/features/discover/markets.js.map +1 -0
- package/lib/features/discover/useDiscoverSidebar.js +148 -0
- package/lib/features/discover/useDiscoverSidebar.js.map +1 -0
- package/lib/features/discover/weather.js +42 -0
- package/lib/features/discover/weather.js.map +1 -0
- package/lib/features/expenses/ExpensesAgentChatPane.js +1 -1
- package/lib/features/expenses/ExpensesAgentChatPane.js.map +1 -1
- package/lib/features/inbox/InboxAgentChatPane.js +1 -1
- package/lib/features/inbox/InboxAgentChatPane.js.map +1 -1
- package/lib/features/job-search/JobSearchAgentChatPane.js +1 -0
- package/lib/features/job-search/JobSearchAgentChatPane.js.map +1 -1
- package/lib/features/local-services/LocalServicesAgentChatPane.js +1 -1
- package/lib/features/local-services/LocalServicesAgentChatPane.js.map +1 -1
- package/lib/features/movies/MoviesAgentChatPane.js +1 -1
- package/lib/features/movies/MoviesAgentChatPane.js.map +1 -1
- package/lib/features/notion/NotionBlockSheets.js +206 -0
- package/lib/features/notion/NotionBlockSheets.js.map +1 -0
- package/lib/features/notion/NotionBlockView.js +36 -0
- package/lib/features/notion/NotionBlockView.js.map +1 -0
- package/lib/features/notion/NotionCommentsSheet.js +461 -0
- package/lib/features/notion/NotionCommentsSheet.js.map +1 -0
- package/lib/features/notion/NotionConnectionsSheet.js +244 -0
- package/lib/features/notion/NotionConnectionsSheet.js.map +1 -0
- package/lib/features/notion/NotionHistorySheet.js +439 -0
- package/lib/features/notion/NotionHistorySheet.js.map +1 -0
- package/lib/features/notion/NotionMediaBlocks.js +803 -0
- package/lib/features/notion/NotionMediaBlocks.js.map +1 -0
- package/lib/features/notion/NotionMentionSheet.js +279 -0
- package/lib/features/notion/NotionMentionSheet.js.map +1 -0
- package/lib/features/notion/NotionPageMenu.js +585 -0
- package/lib/features/notion/NotionPageMenu.js.map +1 -0
- package/lib/features/notion/NotionPageTree.js +220 -0
- package/lib/features/notion/NotionPageTree.js.map +1 -0
- package/lib/features/notion/NotionPageView.js +1253 -152
- package/lib/features/notion/NotionPageView.js.map +1 -1
- package/lib/features/notion/NotionShareSheet.js +606 -0
- package/lib/features/notion/NotionShareSheet.js.map +1 -0
- package/lib/features/notion/NotionSheets.js +87 -15
- package/lib/features/notion/NotionSheets.js.map +1 -1
- package/lib/features/notion/NotionSidebarSections.js +492 -0
- package/lib/features/notion/NotionSidebarSections.js.map +1 -0
- package/lib/features/notion/NotionWorkspaceAdmin.js +659 -0
- package/lib/features/notion/NotionWorkspaceAdmin.js.map +1 -0
- package/lib/features/notion/NotionWorkspaceView.js +257 -45
- package/lib/features/notion/NotionWorkspaceView.js.map +1 -1
- package/lib/features/notion/database/DatabaseCells.js +554 -0
- package/lib/features/notion/database/DatabaseCells.js.map +1 -0
- package/lib/features/notion/database/DatabaseDateLayouts.js +792 -0
- package/lib/features/notion/database/DatabaseDateLayouts.js.map +1 -0
- package/lib/features/notion/database/DatabaseLayouts.js +461 -0
- package/lib/features/notion/database/DatabaseLayouts.js.map +1 -0
- package/lib/features/notion/database/DatabaseSheets.js +791 -0
- package/lib/features/notion/database/DatabaseSheets.js.map +1 -0
- package/lib/features/notion/database/NotionDatabaseView.js +817 -0
- package/lib/features/notion/database/NotionDatabaseView.js.map +1 -0
- package/lib/features/notion/database/RowPropertiesPanel.js +162 -0
- package/lib/features/notion/database/RowPropertiesPanel.js.map +1 -0
- package/lib/features/notion/database/chartData.js +89 -0
- package/lib/features/notion/database/chartData.js.map +1 -0
- package/lib/features/notion/database/chartView.js +112 -0
- package/lib/features/notion/database/chartView.js.map +1 -0
- package/lib/features/notion/database/connectorButton.js +33 -0
- package/lib/features/notion/database/connectorButton.js.map +1 -0
- package/lib/features/notion/database/databaseCalc.js +208 -0
- package/lib/features/notion/database/databaseCalc.js.map +1 -0
- package/lib/features/notion/database/databaseCalendar.js +157 -0
- package/lib/features/notion/database/databaseCalendar.js.map +1 -0
- package/lib/features/notion/database/databaseCsv.js +98 -0
- package/lib/features/notion/database/databaseCsv.js.map +1 -0
- package/lib/features/notion/database/databaseCsvActions.js +58 -0
- package/lib/features/notion/database/databaseCsvActions.js.map +1 -0
- package/lib/features/notion/database/databaseFilter.js +473 -0
- package/lib/features/notion/database/databaseFilter.js.map +1 -0
- package/lib/features/notion/database/databaseFormula.js +1072 -0
- package/lib/features/notion/database/databaseFormula.js.map +1 -0
- package/lib/features/notion/database/databaseGroup.js +151 -0
- package/lib/features/notion/database/databaseGroup.js.map +1 -0
- package/lib/features/notion/database/databaseRollup.js +58 -0
- package/lib/features/notion/database/databaseRollup.js.map +1 -0
- package/lib/features/notion/database/databaseTimeline.js +156 -0
- package/lib/features/notion/database/databaseTimeline.js.map +1 -0
- package/lib/features/notion/database/databaseView.js +1188 -0
- package/lib/features/notion/database/databaseView.js.map +1 -0
- package/lib/features/notion/database/databaseViews.js +310 -0
- package/lib/features/notion/database/databaseViews.js.map +1 -0
- package/lib/features/notion/database/relationSource.js +92 -0
- package/lib/features/notion/database/relationSource.js.map +1 -0
- package/lib/features/notion/database/uniqueId.js +17 -0
- package/lib/features/notion/database/uniqueId.js.map +1 -0
- package/lib/features/notion/database/useNotionDatabase.js +617 -0
- package/lib/features/notion/database/useNotionDatabase.js.map +1 -0
- package/lib/features/notion/notionAgentRunStatus.js +39 -0
- package/lib/features/notion/notionAgentRunStatus.js.map +1 -0
- package/lib/features/notion/notionCodeLanguages.js +112 -0
- package/lib/features/notion/notionCodeLanguages.js.map +1 -0
- package/lib/features/notion/notionComments.js +86 -0
- package/lib/features/notion/notionComments.js.map +1 -0
- package/lib/features/notion/notionConnections.js +74 -0
- package/lib/features/notion/notionConnections.js.map +1 -0
- package/lib/features/notion/notionDocuments.js +453 -1
- package/lib/features/notion/notionDocuments.js.map +1 -1
- package/lib/features/notion/notionEditorModel.js +142 -7
- package/lib/features/notion/notionEditorModel.js.map +1 -1
- package/lib/features/notion/notionMarkdownShortcuts.js +51 -0
- package/lib/features/notion/notionMarkdownShortcuts.js.map +1 -0
- package/lib/features/notion/notionMedia.js +119 -0
- package/lib/features/notion/notionMedia.js.map +1 -0
- package/lib/features/notion/notionMentionDate.js +32 -0
- package/lib/features/notion/notionMentionDate.js.map +1 -0
- package/lib/features/notion/notionMentionOptions.js +162 -0
- package/lib/features/notion/notionMentionOptions.js.map +1 -0
- package/lib/features/notion/notionNotesAgent.js +445 -0
- package/lib/features/notion/notionNotesAgent.js.map +1 -0
- package/lib/features/notion/notionPageAccess.js +168 -0
- package/lib/features/notion/notionPageAccess.js.map +1 -0
- package/lib/features/notion/notionPageActions.js +138 -0
- package/lib/features/notion/notionPageActions.js.map +1 -0
- package/lib/features/notion/notionPageHistory.js +154 -0
- package/lib/features/notion/notionPageHistory.js.map +1 -0
- package/lib/features/notion/notionPageKinds.js +200 -0
- package/lib/features/notion/notionPageKinds.js.map +1 -0
- package/lib/features/notion/notionRecents.js +48 -0
- package/lib/features/notion/notionRecents.js.map +1 -0
- package/lib/features/notion/notionRichText.js +177 -0
- package/lib/features/notion/notionRichText.js.map +1 -0
- package/lib/features/notion/notionRichTitle.js +336 -0
- package/lib/features/notion/notionRichTitle.js.map +1 -0
- package/lib/features/notion/useNotionWorkspace.js +272 -13
- package/lib/features/notion/useNotionWorkspace.js.map +1 -1
- package/lib/features/notion/usePageActions.js +155 -0
- package/lib/features/notion/usePageActions.js.map +1 -0
- package/lib/features/resume/ResumeAgentChatPane.js +1 -1
- package/lib/features/resume/ResumeAgentChatPane.js.map +1 -1
- package/lib/features/shopping/ShoppingAgentChatPane.js +1 -1
- package/lib/features/shopping/ShoppingAgentChatPane.js.map +1 -1
- package/lib/features/study/StudyAgentChatPane.js +1 -1
- package/lib/features/study/StudyAgentChatPane.js.map +1 -1
- package/lib/features/travel/TravelAgentChatPane.js +1 -1
- package/lib/features/travel/TravelAgentChatPane.js.map +1 -1
- package/lib/features/webbuilder/WebBuilderExperience.js +40 -8
- package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
- package/lib/features/webbuilder/buildFragments.js +1 -1
- package/lib/features/webbuilder/buildFragments.js.map +1 -1
- package/lib/features/webbuilder/codeFiles.js +302 -0
- package/lib/features/webbuilder/codeFiles.js.map +1 -0
- package/lib/features/webbuilder/codeHighlight.js +209 -0
- package/lib/features/webbuilder/codeHighlight.js.map +1 -0
- package/lib/features/webbuilder/components/CodeView.js +682 -52
- package/lib/features/webbuilder/components/CodeView.js.map +1 -1
- package/lib/features/webbuilder/components/PreviewScreen.js +59 -38
- package/lib/features/webbuilder/components/PreviewScreen.js.map +1 -1
- package/lib/features/webbuilder/components/ProjectChat.js +3 -3
- package/lib/features/webbuilder/components/ProjectChat.js.map +1 -1
- package/lib/features/webbuilder/stepLabels.js +68 -0
- package/lib/features/webbuilder/stepLabels.js.map +1 -0
- package/lib/hooks/useHostChatSteering.js +45 -0
- package/lib/hooks/useHostChatSteering.js.map +1 -0
- package/lib/screens/Chat/index.js +2 -12
- package/lib/screens/Chat/index.js.map +1 -1
- package/lib/screens/ExpensesNative/useExpensesHostChat.js +25 -5
- package/lib/screens/ExpensesNative/useExpensesHostChat.js.map +1 -1
- package/lib/screens/InboxNative/useInboxHostChat.js +25 -5
- package/lib/screens/InboxNative/useInboxHostChat.js.map +1 -1
- package/lib/screens/JobSearchNative/useJobSearchHostChat.js +25 -5
- package/lib/screens/JobSearchNative/useJobSearchHostChat.js.map +1 -1
- package/lib/screens/LocalServicesNative/useLocalServicesHostChat.js +25 -5
- package/lib/screens/LocalServicesNative/useLocalServicesHostChat.js.map +1 -1
- package/lib/screens/MoviesNative/useMoviesHostChat.js +25 -5
- package/lib/screens/MoviesNative/useMoviesHostChat.js.map +1 -1
- package/lib/screens/NotionPage/index.js +2 -2
- package/lib/screens/NotionPage/index.js.map +1 -1
- package/lib/screens/ResumeNative/useResumeHostChat.js +25 -5
- package/lib/screens/ResumeNative/useResumeHostChat.js.map +1 -1
- package/lib/screens/ShoppingNative/useShoppingHostChat.js +25 -5
- package/lib/screens/ShoppingNative/useShoppingHostChat.js.map +1 -1
- package/lib/screens/StudyNative/useStudyHostChat.js +25 -5
- package/lib/screens/StudyNative/useStudyHostChat.js.map +1 -1
- package/lib/screens/TravelNative/useTravelHostChat.js +25 -5
- package/lib/screens/TravelNative/useTravelHostChat.js.map +1 -1
- package/lib/screens/WebBuilderNative/codeWorkspaceApi.js +222 -0
- package/lib/screens/WebBuilderNative/codeWorkspaceApi.js.map +1 -0
- package/lib/screens/WebBuilderNative/index.js +1 -1
- package/lib/screens/WebBuilderNative/index.js.map +1 -1
- package/lib/screens/WebBuilderNative/sandboxProxyApi.js +126 -4
- package/lib/screens/WebBuilderNative/sandboxProxyApi.js.map +1 -1
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js +120 -11
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
- 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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"}
|