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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) 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/devices/bodyComposition.js +116 -0
  12. package/lib/features/devices/bodyComposition.js.map +1 -0
  13. package/lib/features/devices/readings.js.map +1 -1
  14. package/lib/features/devices/session.js +22 -2
  15. package/lib/features/devices/session.js.map +1 -1
  16. package/lib/features/discover/DiscoverArticle.js +105 -92
  17. package/lib/features/discover/DiscoverArticle.js.map +1 -1
  18. package/lib/features/discover/DiscoverFeed.js +97 -48
  19. package/lib/features/discover/DiscoverFeed.js.map +1 -1
  20. package/lib/features/discover/DiscoverFollowUp.js +135 -0
  21. package/lib/features/discover/DiscoverFollowUp.js.map +1 -0
  22. package/lib/features/discover/DiscoverSidebar.js +555 -0
  23. package/lib/features/discover/DiscoverSidebar.js.map +1 -0
  24. package/lib/features/discover/DiscoverSkeletons.js +123 -0
  25. package/lib/features/discover/DiscoverSkeletons.js.map +1 -0
  26. package/lib/features/discover/DiscoverStoryCards.js +193 -87
  27. package/lib/features/discover/DiscoverStoryCards.js.map +1 -1
  28. package/lib/features/discover/followUpQuery.js +42 -0
  29. package/lib/features/discover/followUpQuery.js.map +1 -0
  30. package/lib/features/discover/markets.js +37 -0
  31. package/lib/features/discover/markets.js.map +1 -0
  32. package/lib/features/discover/useDiscoverSidebar.js +148 -0
  33. package/lib/features/discover/useDiscoverSidebar.js.map +1 -0
  34. package/lib/features/discover/weather.js +42 -0
  35. package/lib/features/discover/weather.js.map +1 -0
  36. package/lib/features/expenses/ExpensesAgentChatPane.js +1 -1
  37. package/lib/features/expenses/ExpensesAgentChatPane.js.map +1 -1
  38. package/lib/features/inbox/InboxAgentChatPane.js +1 -1
  39. package/lib/features/inbox/InboxAgentChatPane.js.map +1 -1
  40. package/lib/features/job-search/JobSearchAgentChatPane.js +1 -0
  41. package/lib/features/job-search/JobSearchAgentChatPane.js.map +1 -1
  42. package/lib/features/local-services/LocalServicesAgentChatPane.js +1 -1
  43. package/lib/features/local-services/LocalServicesAgentChatPane.js.map +1 -1
  44. package/lib/features/movies/MoviesAgentChatPane.js +1 -1
  45. package/lib/features/movies/MoviesAgentChatPane.js.map +1 -1
  46. package/lib/features/notion/NotionBlockSheets.js +206 -0
  47. package/lib/features/notion/NotionBlockSheets.js.map +1 -0
  48. package/lib/features/notion/NotionBlockView.js +36 -0
  49. package/lib/features/notion/NotionBlockView.js.map +1 -0
  50. package/lib/features/notion/NotionCommentsSheet.js +461 -0
  51. package/lib/features/notion/NotionCommentsSheet.js.map +1 -0
  52. package/lib/features/notion/NotionConnectionsSheet.js +244 -0
  53. package/lib/features/notion/NotionConnectionsSheet.js.map +1 -0
  54. package/lib/features/notion/NotionHistorySheet.js +439 -0
  55. package/lib/features/notion/NotionHistorySheet.js.map +1 -0
  56. package/lib/features/notion/NotionMediaBlocks.js +803 -0
  57. package/lib/features/notion/NotionMediaBlocks.js.map +1 -0
  58. package/lib/features/notion/NotionMentionSheet.js +279 -0
  59. package/lib/features/notion/NotionMentionSheet.js.map +1 -0
  60. package/lib/features/notion/NotionPageMenu.js +585 -0
  61. package/lib/features/notion/NotionPageMenu.js.map +1 -0
  62. package/lib/features/notion/NotionPageTree.js +220 -0
  63. package/lib/features/notion/NotionPageTree.js.map +1 -0
  64. package/lib/features/notion/NotionPageView.js +1253 -152
  65. package/lib/features/notion/NotionPageView.js.map +1 -1
  66. package/lib/features/notion/NotionShareSheet.js +606 -0
  67. package/lib/features/notion/NotionShareSheet.js.map +1 -0
  68. package/lib/features/notion/NotionSheets.js +87 -15
  69. package/lib/features/notion/NotionSheets.js.map +1 -1
  70. package/lib/features/notion/NotionSidebarSections.js +492 -0
  71. package/lib/features/notion/NotionSidebarSections.js.map +1 -0
  72. package/lib/features/notion/NotionWorkspaceAdmin.js +659 -0
  73. package/lib/features/notion/NotionWorkspaceAdmin.js.map +1 -0
  74. package/lib/features/notion/NotionWorkspaceView.js +257 -45
  75. package/lib/features/notion/NotionWorkspaceView.js.map +1 -1
  76. package/lib/features/notion/database/DatabaseCells.js +554 -0
  77. package/lib/features/notion/database/DatabaseCells.js.map +1 -0
  78. package/lib/features/notion/database/DatabaseDateLayouts.js +792 -0
  79. package/lib/features/notion/database/DatabaseDateLayouts.js.map +1 -0
  80. package/lib/features/notion/database/DatabaseLayouts.js +461 -0
  81. package/lib/features/notion/database/DatabaseLayouts.js.map +1 -0
  82. package/lib/features/notion/database/DatabaseSheets.js +791 -0
  83. package/lib/features/notion/database/DatabaseSheets.js.map +1 -0
  84. package/lib/features/notion/database/NotionDatabaseView.js +817 -0
  85. package/lib/features/notion/database/NotionDatabaseView.js.map +1 -0
  86. package/lib/features/notion/database/RowPropertiesPanel.js +162 -0
  87. package/lib/features/notion/database/RowPropertiesPanel.js.map +1 -0
  88. package/lib/features/notion/database/chartData.js +89 -0
  89. package/lib/features/notion/database/chartData.js.map +1 -0
  90. package/lib/features/notion/database/chartView.js +112 -0
  91. package/lib/features/notion/database/chartView.js.map +1 -0
  92. package/lib/features/notion/database/connectorButton.js +33 -0
  93. package/lib/features/notion/database/connectorButton.js.map +1 -0
  94. package/lib/features/notion/database/databaseCalc.js +208 -0
  95. package/lib/features/notion/database/databaseCalc.js.map +1 -0
  96. package/lib/features/notion/database/databaseCalendar.js +157 -0
  97. package/lib/features/notion/database/databaseCalendar.js.map +1 -0
  98. package/lib/features/notion/database/databaseCsv.js +98 -0
  99. package/lib/features/notion/database/databaseCsv.js.map +1 -0
  100. package/lib/features/notion/database/databaseCsvActions.js +58 -0
  101. package/lib/features/notion/database/databaseCsvActions.js.map +1 -0
  102. package/lib/features/notion/database/databaseFilter.js +473 -0
  103. package/lib/features/notion/database/databaseFilter.js.map +1 -0
  104. package/lib/features/notion/database/databaseFormula.js +1072 -0
  105. package/lib/features/notion/database/databaseFormula.js.map +1 -0
  106. package/lib/features/notion/database/databaseGroup.js +151 -0
  107. package/lib/features/notion/database/databaseGroup.js.map +1 -0
  108. package/lib/features/notion/database/databaseRollup.js +58 -0
  109. package/lib/features/notion/database/databaseRollup.js.map +1 -0
  110. package/lib/features/notion/database/databaseTimeline.js +156 -0
  111. package/lib/features/notion/database/databaseTimeline.js.map +1 -0
  112. package/lib/features/notion/database/databaseView.js +1188 -0
  113. package/lib/features/notion/database/databaseView.js.map +1 -0
  114. package/lib/features/notion/database/databaseViews.js +310 -0
  115. package/lib/features/notion/database/databaseViews.js.map +1 -0
  116. package/lib/features/notion/database/relationSource.js +92 -0
  117. package/lib/features/notion/database/relationSource.js.map +1 -0
  118. package/lib/features/notion/database/uniqueId.js +17 -0
  119. package/lib/features/notion/database/uniqueId.js.map +1 -0
  120. package/lib/features/notion/database/useNotionDatabase.js +617 -0
  121. package/lib/features/notion/database/useNotionDatabase.js.map +1 -0
  122. package/lib/features/notion/notionAgentRunStatus.js +39 -0
  123. package/lib/features/notion/notionAgentRunStatus.js.map +1 -0
  124. package/lib/features/notion/notionCodeLanguages.js +112 -0
  125. package/lib/features/notion/notionCodeLanguages.js.map +1 -0
  126. package/lib/features/notion/notionComments.js +86 -0
  127. package/lib/features/notion/notionComments.js.map +1 -0
  128. package/lib/features/notion/notionConnections.js +74 -0
  129. package/lib/features/notion/notionConnections.js.map +1 -0
  130. package/lib/features/notion/notionDocuments.js +453 -1
  131. package/lib/features/notion/notionDocuments.js.map +1 -1
  132. package/lib/features/notion/notionEditorModel.js +142 -7
  133. package/lib/features/notion/notionEditorModel.js.map +1 -1
  134. package/lib/features/notion/notionMarkdownShortcuts.js +51 -0
  135. package/lib/features/notion/notionMarkdownShortcuts.js.map +1 -0
  136. package/lib/features/notion/notionMedia.js +119 -0
  137. package/lib/features/notion/notionMedia.js.map +1 -0
  138. package/lib/features/notion/notionMentionDate.js +32 -0
  139. package/lib/features/notion/notionMentionDate.js.map +1 -0
  140. package/lib/features/notion/notionMentionOptions.js +162 -0
  141. package/lib/features/notion/notionMentionOptions.js.map +1 -0
  142. package/lib/features/notion/notionNotesAgent.js +445 -0
  143. package/lib/features/notion/notionNotesAgent.js.map +1 -0
  144. package/lib/features/notion/notionPageAccess.js +168 -0
  145. package/lib/features/notion/notionPageAccess.js.map +1 -0
  146. package/lib/features/notion/notionPageActions.js +138 -0
  147. package/lib/features/notion/notionPageActions.js.map +1 -0
  148. package/lib/features/notion/notionPageHistory.js +154 -0
  149. package/lib/features/notion/notionPageHistory.js.map +1 -0
  150. package/lib/features/notion/notionPageKinds.js +200 -0
  151. package/lib/features/notion/notionPageKinds.js.map +1 -0
  152. package/lib/features/notion/notionRecents.js +48 -0
  153. package/lib/features/notion/notionRecents.js.map +1 -0
  154. package/lib/features/notion/notionRichText.js +177 -0
  155. package/lib/features/notion/notionRichText.js.map +1 -0
  156. package/lib/features/notion/notionRichTitle.js +336 -0
  157. package/lib/features/notion/notionRichTitle.js.map +1 -0
  158. package/lib/features/notion/useNotionWorkspace.js +272 -13
  159. package/lib/features/notion/useNotionWorkspace.js.map +1 -1
  160. package/lib/features/notion/usePageActions.js +155 -0
  161. package/lib/features/notion/usePageActions.js.map +1 -0
  162. package/lib/features/resume/ResumeAgentChatPane.js +1 -1
  163. package/lib/features/resume/ResumeAgentChatPane.js.map +1 -1
  164. package/lib/features/shopping/ShoppingAgentChatPane.js +1 -1
  165. package/lib/features/shopping/ShoppingAgentChatPane.js.map +1 -1
  166. package/lib/features/study/StudyAgentChatPane.js +1 -1
  167. package/lib/features/study/StudyAgentChatPane.js.map +1 -1
  168. package/lib/features/travel/TravelAgentChatPane.js +1 -1
  169. package/lib/features/travel/TravelAgentChatPane.js.map +1 -1
  170. package/lib/features/webbuilder/WebBuilderExperience.js +40 -8
  171. package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
  172. package/lib/features/webbuilder/buildFragments.js +1 -1
  173. package/lib/features/webbuilder/buildFragments.js.map +1 -1
  174. package/lib/features/webbuilder/codeFiles.js +302 -0
  175. package/lib/features/webbuilder/codeFiles.js.map +1 -0
  176. package/lib/features/webbuilder/codeHighlight.js +209 -0
  177. package/lib/features/webbuilder/codeHighlight.js.map +1 -0
  178. package/lib/features/webbuilder/components/CodeView.js +682 -52
  179. package/lib/features/webbuilder/components/CodeView.js.map +1 -1
  180. package/lib/features/webbuilder/components/PreviewScreen.js +59 -38
  181. package/lib/features/webbuilder/components/PreviewScreen.js.map +1 -1
  182. package/lib/features/webbuilder/components/ProjectChat.js +3 -3
  183. package/lib/features/webbuilder/components/ProjectChat.js.map +1 -1
  184. package/lib/features/webbuilder/stepLabels.js +68 -0
  185. package/lib/features/webbuilder/stepLabels.js.map +1 -0
  186. package/lib/hooks/useHostChatSteering.js +45 -0
  187. package/lib/hooks/useHostChatSteering.js.map +1 -0
  188. package/lib/screens/Chat/index.js +2 -12
  189. package/lib/screens/Chat/index.js.map +1 -1
  190. package/lib/screens/Devices/index.js +205 -3
  191. package/lib/screens/Devices/index.js.map +1 -1
  192. package/lib/screens/ExpensesNative/useExpensesHostChat.js +25 -5
  193. package/lib/screens/ExpensesNative/useExpensesHostChat.js.map +1 -1
  194. package/lib/screens/InboxNative/useInboxHostChat.js +25 -5
  195. package/lib/screens/InboxNative/useInboxHostChat.js.map +1 -1
  196. package/lib/screens/JobSearchNative/useJobSearchHostChat.js +25 -5
  197. package/lib/screens/JobSearchNative/useJobSearchHostChat.js.map +1 -1
  198. package/lib/screens/LocalServicesNative/useLocalServicesHostChat.js +25 -5
  199. package/lib/screens/LocalServicesNative/useLocalServicesHostChat.js.map +1 -1
  200. package/lib/screens/MoviesNative/useMoviesHostChat.js +25 -5
  201. package/lib/screens/MoviesNative/useMoviesHostChat.js.map +1 -1
  202. package/lib/screens/NotionPage/index.js +2 -2
  203. package/lib/screens/NotionPage/index.js.map +1 -1
  204. package/lib/screens/ResumeNative/useResumeHostChat.js +25 -5
  205. package/lib/screens/ResumeNative/useResumeHostChat.js.map +1 -1
  206. package/lib/screens/ShoppingNative/useShoppingHostChat.js +25 -5
  207. package/lib/screens/ShoppingNative/useShoppingHostChat.js.map +1 -1
  208. package/lib/screens/StudyNative/useStudyHostChat.js +25 -5
  209. package/lib/screens/StudyNative/useStudyHostChat.js.map +1 -1
  210. package/lib/screens/TravelNative/useTravelHostChat.js +25 -5
  211. package/lib/screens/TravelNative/useTravelHostChat.js.map +1 -1
  212. package/lib/screens/WebBuilderNative/codeWorkspaceApi.js +222 -0
  213. package/lib/screens/WebBuilderNative/codeWorkspaceApi.js.map +1 -0
  214. package/lib/screens/WebBuilderNative/index.js +1 -1
  215. package/lib/screens/WebBuilderNative/index.js.map +1 -1
  216. package/lib/screens/WebBuilderNative/sandboxProxyApi.js +126 -4
  217. package/lib/screens/WebBuilderNative/sandboxProxyApi.js.map +1 -1
  218. package/lib/screens/WebBuilderNative/useWebBuilderHost.js +120 -11
  219. package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
  220. package/package.json +4 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotionPageMenu.js","sources":["../../../src/features/notion/NotionPageMenu.tsx"],"sourcesContent":["/**\n * Page actions on a phone - the web sidebar row ••• menu and the page ••• menu\n * (PageActionsProvider / PageEditorPage) as one bottom sheet, plus the dialogs\n * they open: Rename, Move to… (searchable destination), Import Markdown, and the\n * Undo toast the web shows after destructive actions.\n */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n ActivityIndicator,\n Animated,\n FlatList,\n KeyboardAvoidingView,\n Modal,\n Platform,\n Pressable,\n ScrollView,\n StyleSheet,\n Switch,\n Text,\n TextInput,\n View,\n} from 'react-native';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useLazyQuery } from '@apollo/client';\nimport { NATIVE_NOTION_SEARCH } from './notionDocuments';\nimport { blockIcon, pageTitle, type NotionBlock } from './notionBlocks';\nimport { PAGE_FONTS, type PageFont, type PageSettings } from './notionPageActions';\nimport type { NotionPalette } from './notionTheme';\nimport { ui, type IconName } from './notionUi';\n\ntype Palette = NotionPalette;\n\nexport interface MenuAction {\n key: string;\n label: string;\n icon: IconName;\n onPress: () => void;\n destructive?: boolean;\n /** Shown on the right (e.g. \"On\"). */\n detail?: string;\n}\n\n/** Page ••• extras (editor only): display settings and the word-count footer. */\nexport interface PageMenuSettings {\n settings: PageSettings;\n onToggle: (key: 'fullWidth' | 'smallText' | 'locked') => void;\n onFont: (font: PageFont) => void;\n footer?: string;\n}\n\n// ============================================================================\n// ACTION SHEET\n// ============================================================================\n\nexport function PageActionsSheet({\n visible,\n palette,\n title,\n subtitle,\n groups,\n pageSettings,\n onClose,\n}: {\n visible: boolean;\n palette: Palette;\n title: string;\n subtitle?: string;\n groups: MenuAction[][];\n pageSettings?: PageMenuSettings;\n onClose: () => void;\n}) {\n /**\n * Close first, then act. iOS ignores a modal presented while another is still dismissing\n * (Rename / Move to… / Import would silently not open), so the action runs from the\n * sheet's onDismiss; Android has no onDismiss and runs it on the next tick. A fallback\n * timer covers a missed onDismiss.\n */\n const pendingAction = useRef<(() => void) | null>(null);\n const flushPending = () => {\n const next = pendingAction.current;\n pendingAction.current = null;\n next?.();\n };\n const run = (action: MenuAction) => {\n pendingAction.current = action.onPress;\n onClose();\n setTimeout(flushPending, Platform.OS === 'ios' ? 700 : 0);\n };\n return (\n <Modal visible={visible} transparent animationType=\"fade\" onRequestClose={onClose} onDismiss={flushPending}>\n <Pressable style={[styles.backdrop, { backgroundColor: palette.backdrop }]} onPress={onClose}>\n <Pressable style={[styles.sheet, { backgroundColor: palette.bg }]}>\n <View style={[styles.grabber, { backgroundColor: palette.hairline }]} />\n <Text numberOfLines={1} style={[styles.sheetTitle, { color: palette.text }]}>\n {title}\n </Text>\n {subtitle ? (\n <Text numberOfLines={1} style={[styles.sheetSubtitle, { color: palette.textMuted }]}>\n {subtitle}\n </Text>\n ) : null}\n <ScrollView style={styles.sheetScroll} contentContainerStyle={styles.sheetContent}>\n {pageSettings ? <SettingsGroup palette={palette} page={pageSettings} /> : null}\n {groups\n .filter((g) => g.length)\n .map((group, gi) => (\n <View key={gi} style={[styles.group, { backgroundColor: palette.card }]}>\n {group.map((a, i) => (\n <Pressable\n key={a.key}\n accessibilityRole=\"button\"\n onPress={() => run(a)}\n style={({ pressed }) => [\n styles.actionRow,\n pressed && { backgroundColor: palette.pressed },\n ]}\n >\n <Ionicons\n name={a.icon}\n size={20}\n color={a.destructive ? palette.danger : palette.text}\n />\n <View\n style={[\n styles.actionBody,\n i < group.length - 1 && ui.hairline,\n { borderBottomColor: palette.hairline },\n ]}\n >\n <Text\n style={[\n styles.actionLabel,\n { color: a.destructive ? palette.danger : palette.text },\n ]}\n >\n {a.label}\n </Text>\n {a.detail ? (\n <Text style={[styles.actionDetail, { color: palette.textMuted }]}>\n {a.detail}\n </Text>\n ) : null}\n </View>\n </Pressable>\n ))}\n </View>\n ))}\n {pageSettings?.footer ? (\n <Text style={[styles.footer, { color: palette.textFaint }]}>{pageSettings.footer}</Text>\n ) : null}\n </ScrollView>\n </Pressable>\n </Pressable>\n </Modal>\n );\n}\n\nfunction SettingsGroup({ palette, page }: { palette: Palette; page: PageMenuSettings }) {\n // Local copy so a tap shows at once; the page saves in the background and re-renders after.\n const [local, setLocal] = useState(page.settings);\n const incoming = JSON.stringify(page.settings);\n useEffect(() => {\n setLocal(JSON.parse(incoming));\n }, [incoming]);\n const toggle = (key: 'fullWidth' | 'smallText' | 'locked') => {\n setLocal((cur) => ({ ...cur, [key]: !cur[key] }));\n page.onToggle(key);\n };\n const pickFont = (font: PageFont) => {\n setLocal((cur) => ({ ...cur, font }));\n page.onFont(font);\n };\n const toggles: Array<{ key: 'smallText' | 'fullWidth' | 'locked'; label: string; icon: IconName }> = [\n { key: 'smallText', label: 'Small text', icon: 'text-outline' },\n { key: 'fullWidth', label: 'Full width (web)', icon: 'resize-outline' },\n { key: 'locked', label: 'Lock page', icon: 'lock-closed-outline' },\n ];\n return (\n <View style={[styles.group, { backgroundColor: palette.card }]}>\n <View style={styles.fontRow}>\n {PAGE_FONTS.map((f) => {\n const active = local.font === f.value;\n return (\n <Pressable\n key={f.value}\n accessibilityRole=\"button\"\n accessibilityState={{ selected: active }}\n onPress={() => pickFont(f.value)}\n style={[\n styles.fontChip,\n {\n backgroundColor: active ? palette.primarySoft : palette.fill,\n borderColor: active ? palette.primary : 'transparent',\n },\n ]}\n >\n <Text\n style={[\n styles.fontSample,\n {\n color: active ? palette.primary : palette.text,\n fontFamily: fontFamilyOf(f.value),\n },\n ]}\n >\n Ag\n </Text>\n <Text style={[styles.fontLabel, { color: active ? palette.primary : palette.textMuted }]}>\n {f.label}\n </Text>\n </Pressable>\n );\n })}\n </View>\n {toggles.map((t, i) => (\n <View key={t.key} style={styles.actionRow}>\n <Ionicons name={t.icon} size={20} color={palette.text} />\n <View\n style={[\n styles.actionBody,\n i < toggles.length - 1 && ui.hairline,\n { borderBottomColor: palette.hairline },\n ]}\n >\n <Text style={[styles.actionLabel, { color: palette.text }]}>{t.label}</Text>\n <Switch\n value={local[t.key]}\n onValueChange={() => toggle(t.key)}\n trackColor={{ true: palette.primary, false: palette.fill }}\n />\n </View>\n </View>\n ))}\n </View>\n );\n}\n\n/** Font families for the page font setting (web: sans / serif / mono). */\nexport function fontFamilyOf(font: PageFont): string | undefined {\n if (font === 'serif') return Platform.OS === 'ios' ? 'Georgia' : 'serif';\n if (font === 'mono') return Platform.OS === 'ios' ? 'Menlo' : 'monospace';\n return undefined;\n}\n\n// ============================================================================\n// TEXT DIALOG (Rename / Import Markdown)\n// ============================================================================\n\nexport function TextPromptDialog({\n visible,\n palette,\n title,\n message,\n initial = '',\n placeholder,\n confirmLabel,\n multiline,\n allowEmpty,\n onClose,\n onConfirm,\n}: {\n visible: boolean;\n palette: Palette;\n title: string;\n message?: string;\n initial?: string;\n placeholder?: string;\n confirmLabel: string;\n multiline?: boolean;\n allowEmpty?: boolean;\n onClose: () => void;\n onConfirm: (value: string) => Promise<unknown> | void;\n}) {\n const [value, setValue] = useState(initial);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n useEffect(() => {\n if (visible) {\n setValue(initial);\n setError(null);\n }\n }, [visible, initial]);\n const canSave = !busy && (allowEmpty || Boolean(value.trim()));\n\n const submit = async () => {\n if (!canSave) return;\n setBusy(true);\n setError(null);\n try {\n await onConfirm(value);\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Something went wrong');\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <Modal visible={visible} transparent animationType=\"fade\" onRequestClose={onClose}>\n <KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'padding' : undefined} style={ui.flex}>\n <Pressable style={[styles.backdrop, { backgroundColor: palette.backdrop }]} onPress={onClose}>\n <Pressable style={[styles.sheet, { backgroundColor: palette.card }]}>\n <View style={[styles.grabber, { backgroundColor: palette.hairline }]} />\n <Text style={[styles.dialogTitle, { color: palette.text }]}>{title}</Text>\n {message ? (\n <Text style={[styles.dialogText, { color: palette.textMuted }]}>{message}</Text>\n ) : null}\n <TextInput\n value={value}\n onChangeText={setValue}\n placeholder={placeholder}\n placeholderTextColor={palette.textFaint}\n autoFocus\n multiline={multiline}\n returnKeyType={multiline ? 'default' : 'done'}\n onSubmitEditing={multiline ? undefined : submit}\n style={[\n styles.dialogInput,\n multiline && styles.dialogInputMultiline,\n { color: palette.text, backgroundColor: palette.fill },\n ]}\n textAlignVertical={multiline ? 'top' : 'center'}\n />\n {error ? <Text style={[styles.dialogError, { color: palette.danger }]}>{error}</Text> : null}\n <Pressable\n accessibilityRole=\"button\"\n onPress={submit}\n disabled={!canSave}\n style={[\n ui.primaryButton,\n styles.blockButton,\n { backgroundColor: palette.primary },\n !canSave && styles.disabled,\n ]}\n >\n {busy ? (\n <ActivityIndicator size=\"small\" color={palette.onPrimary} />\n ) : (\n <Text style={[ui.primaryButtonLabel, { color: palette.onPrimary }]}>\n {confirmLabel}\n </Text>\n )}\n </Pressable>\n <Pressable accessibilityRole=\"button\" onPress={onClose} style={styles.textButton}>\n <Text style={[styles.textButtonLabel, { color: palette.textMuted }]}>Cancel</Text>\n </Pressable>\n </Pressable>\n </Pressable>\n </KeyboardAvoidingView>\n </Modal>\n );\n}\n\n// ============================================================================\n// MOVE TO… (web MoveToDialog)\n// ============================================================================\n\nexport function MoveToSheet({\n visible,\n palette,\n pageId,\n pages,\n workspaceName,\n workspaceId,\n onClose,\n onMove,\n}: {\n visible: boolean;\n palette: Palette;\n /** The page being moved (and so not a valid destination). */\n pageId: string | null;\n /** Top-level pages, shown before searching. */\n pages: NotionBlock[];\n workspaceName: string;\n workspaceId: string | null;\n onClose: () => void;\n onMove: (toPageId: string | null) => Promise<unknown>;\n}) {\n const [query, setQuery] = useState('');\n const [busy, setBusy] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [search, { data, loading }] = useLazyQuery<{ searchBlocks?: { results?: NotionBlock[] | null } }>(\n NATIVE_NOTION_SEARCH,\n { fetchPolicy: 'network-only' },\n );\n useEffect(() => {\n if (visible) {\n setQuery('');\n setError(null);\n }\n }, [visible]);\n useEffect(() => {\n const q = query.trim();\n if (!q) return undefined;\n const t = setTimeout(\n () =>\n search({\n variables: {\n input: { query: q, types: ['page'], pageSize: 30, ...(workspaceId ? { workspaceId } : {}) },\n },\n }),\n 250,\n );\n return () => clearTimeout(t);\n }, [query, search, workspaceId]);\n\n const destinations = useMemo(() => {\n const list = query.trim() ? (data?.searchBlocks?.results ?? []) : pages;\n const seen = new Set<string>();\n return list.filter((p) => {\n if (!p?.id || p.id === pageId || p.inTrash || p.type !== 'page' || seen.has(p.id)) return false;\n seen.add(p.id);\n return true;\n });\n }, [data, pageId, pages, query]);\n\n const move = async (to: string | null) => {\n setBusy(to ?? 'root');\n setError(null);\n try {\n await onMove(to);\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Couldn't move the page\");\n } finally {\n setBusy(null);\n }\n };\n\n const row = (key: string, label: string, icon: React.ReactNode, onPress: () => void, divider: boolean) => (\n <Pressable\n key={key}\n accessibilityRole=\"button\"\n onPress={onPress}\n disabled={Boolean(busy)}\n style={({ pressed }) => [styles.actionRow, pressed && { backgroundColor: palette.pressed }]}\n >\n {icon}\n <View style={[styles.actionBody, divider && ui.hairline, { borderBottomColor: palette.hairline }]}>\n <Text numberOfLines={1} style={[styles.actionLabel, { color: palette.text }]}>\n {label}\n </Text>\n {busy === key ? <ActivityIndicator size=\"small\" color={palette.textMuted} /> : null}\n </View>\n </Pressable>\n );\n\n return (\n <Modal visible={visible} animationType=\"slide\" presentationStyle=\"pageSheet\" onRequestClose={onClose}>\n <View style={[ui.flex, { backgroundColor: palette.bg }]}>\n <View style={[ui.sheetHeader, { borderBottomColor: palette.hairline }]}>\n <View style={[ui.sheetHeaderSide, ui.sheetHeaderLeft]} />\n <Text style={[ui.sheetHeaderTitle, { color: palette.text }]}>Move to…</Text>\n <Pressable accessibilityRole=\"button\" onPress={onClose} style={ui.sheetHeaderSide} hitSlop={8}>\n <Text style={[ui.sheetHeaderDone, { color: palette.primary }]}>Cancel</Text>\n </Pressable>\n </View>\n <View style={styles.moveSearch}>\n <View style={[styles.searchField, { backgroundColor: palette.fill }]}>\n <Ionicons name=\"search\" size={17} color={palette.textMuted} />\n <TextInput\n value={query}\n onChangeText={setQuery}\n placeholder=\"Search for a page\"\n placeholderTextColor={palette.textMuted}\n autoCorrect={false}\n clearButtonMode=\"while-editing\"\n style={[styles.searchInput, { color: palette.text }]}\n />\n {loading ? <ActivityIndicator size=\"small\" color={palette.textMuted} /> : null}\n </View>\n {error ? <Text style={[styles.dialogError, { color: palette.danger }]}>{error}</Text> : null}\n </View>\n <FlatList\n data={destinations}\n keyExtractor={(p) => p.id}\n keyboardShouldPersistTaps=\"handled\"\n contentContainerStyle={styles.moveList}\n ListHeaderComponent={\n <View style={[styles.group, { backgroundColor: palette.card }]}>\n {row(\n 'root',\n `${workspaceName} (top level)`,\n <Ionicons name=\"albums-outline\" size={20} color={palette.primary} />,\n () => move(null),\n false,\n )}\n </View>\n }\n ListEmptyComponent={\n <Text style={[styles.hint, { color: palette.textMuted }]}>\n {query.trim() ? (loading ? '' : 'No matching pages') : 'No other pages yet'}\n </Text>\n }\n renderItem={({ item, index }) => (\n <View\n style={[\n { backgroundColor: palette.card },\n index === 0 && styles.groupTop,\n index === destinations.length - 1 && styles.groupBottom,\n ]}\n >\n {row(\n item.id,\n pageTitle(item),\n blockIcon(item) ? (\n <Text style={styles.emoji}>{blockIcon(item)}</Text>\n ) : (\n <Ionicons name=\"document-text-outline\" size={20} color={palette.textMuted} />\n ),\n () => move(item.id),\n index < destinations.length - 1,\n )}\n </View>\n )}\n />\n </View>\n </Modal>\n );\n}\n\n// ============================================================================\n// UNDO TOAST (web NotesToast)\n// ============================================================================\n\nexport interface ToastState {\n message: string;\n actionLabel?: string;\n onAction?: () => void;\n}\n\nexport function useNotionToast() {\n const [toast, setToast] = useState<ToastState | null>(null);\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const show = useCallback((next: ToastState) => {\n if (timer.current) clearTimeout(timer.current);\n setToast(next);\n timer.current = setTimeout(() => setToast(null), 5000);\n }, []);\n const hide = useCallback(() => setToast(null), []);\n useEffect(\n () => () => {\n if (timer.current) clearTimeout(timer.current);\n },\n [],\n );\n return { toast, show, hide };\n}\n\nexport function NotionToast({\n toast,\n palette,\n onHide,\n}: {\n toast: ToastState | null;\n palette: Palette;\n onHide: () => void;\n}) {\n const opacity = useRef(new Animated.Value(0)).current;\n useEffect(() => {\n Animated.timing(opacity, { toValue: toast ? 1 : 0, duration: 180, useNativeDriver: true }).start();\n }, [opacity, toast]);\n if (!toast) return null;\n return (\n <Animated.View pointerEvents=\"box-none\" style={[styles.toastWrap, { opacity }]}>\n <View style={[styles.toast, { backgroundColor: palette.text }]}>\n <Text style={[styles.toastText, { color: palette.card }]} numberOfLines={2}>\n {toast.message}\n </Text>\n {toast.actionLabel && toast.onAction ? (\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => {\n onHide();\n toast.onAction?.();\n }}\n hitSlop={8}\n >\n <Text style={[styles.toastAction, { color: palette.primary }]}>{toast.actionLabel}</Text>\n </Pressable>\n ) : null}\n </View>\n </Animated.View>\n );\n}\n\nconst styles = StyleSheet.create({\n backdrop: { flex: 1, justifyContent: 'flex-end' },\n sheet: {\n borderTopLeftRadius: 24,\n borderTopRightRadius: 24,\n paddingHorizontal: 16,\n paddingTop: 8,\n paddingBottom: 32,\n maxHeight: '88%',\n },\n grabber: { alignSelf: 'center', width: 36, height: 5, borderRadius: 3, marginBottom: 12 },\n sheetTitle: { fontSize: 18, fontWeight: '700', marginLeft: 4 },\n sheetSubtitle: { fontSize: 13, marginLeft: 4, marginTop: 2 },\n sheetScroll: { marginTop: 12, flexGrow: 0 },\n sheetContent: { gap: 12, paddingBottom: 8 },\n group: { borderRadius: 16, overflow: 'hidden' },\n groupTop: { borderTopLeftRadius: 16, borderTopRightRadius: 16 },\n groupBottom: { borderBottomLeftRadius: 16, borderBottomRightRadius: 16 },\n actionRow: { flexDirection: 'row', alignItems: 'center', paddingLeft: 16, gap: 14 },\n actionBody: {\n flex: 1,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n paddingRight: 16,\n minHeight: 50,\n },\n actionLabel: { flex: 1, fontSize: 16 },\n actionDetail: { fontSize: 14 },\n footer: { fontSize: 12, textAlign: 'center', marginTop: 4 },\n fontRow: { flexDirection: 'row', gap: 8, padding: 12 },\n fontChip: { flex: 1, alignItems: 'center', paddingVertical: 10, borderRadius: 12, borderWidth: 1.5 },\n fontSample: { fontSize: 22, fontWeight: '600' },\n fontLabel: { fontSize: 12, fontWeight: '600', marginTop: 2 },\n dialogTitle: { fontSize: 20, fontWeight: '700', marginTop: 4 },\n dialogText: { fontSize: 14, marginTop: 6, lineHeight: 20 },\n dialogInput: { marginTop: 16, fontSize: 16, minHeight: 48, paddingHorizontal: 14, borderRadius: 12 },\n dialogInputMultiline: { height: 200, paddingTop: 12 },\n dialogError: { fontSize: 13, marginTop: 8 },\n blockButton: { alignSelf: 'stretch' },\n disabled: { opacity: 0.45 },\n textButton: { alignItems: 'center', paddingVertical: 12, marginTop: 4 },\n textButtonLabel: { fontSize: 16, fontWeight: '600' },\n moveSearch: { padding: 16, paddingBottom: 8 },\n searchField: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n height: 40,\n paddingHorizontal: 12,\n borderRadius: 12,\n },\n searchInput: { flex: 1, fontSize: 16, paddingVertical: 0 },\n moveList: { paddingHorizontal: 16, paddingBottom: 48, gap: 0 },\n hint: { textAlign: 'center', paddingVertical: 32, fontSize: 15 },\n emoji: { fontSize: 18, width: 20, textAlign: 'center' },\n toastWrap: { position: 'absolute', left: 16, right: 16, bottom: 32, alignItems: 'center' },\n toast: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 16,\n paddingHorizontal: 16,\n paddingVertical: 12,\n borderRadius: 14,\n maxWidth: 520,\n alignSelf: 'stretch',\n },\n toastText: { flex: 1, fontSize: 15, fontWeight: '500' },\n toastAction: { fontSize: 15, fontWeight: '800' },\n});\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,220 @@
1
+ import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {useState}from'react';import {View,Pressable,StyleSheet,Text,ActivityIndicator}from'react-native';import {Ionicons}from'@expo/vector-icons';import {useQuery}from'@apollo/client/index.js';import {NATIVE_NOTION_BLOCK,NATIVE_NOTION_CHILDREN}from'./notionDocuments.js';import {blockIcon,editedLabel,pageTitle,isPageBlock,isHiddenListingBlock}from'./notionBlocks.js';import {ui}from'./notionUi.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
+ var __objRest = (source, exclude) => {
18
+ var target = {};
19
+ for (var prop in source)
20
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
21
+ target[prop] = source[prop];
22
+ if (source != null && __getOwnPropSymbols)
23
+ for (var prop of __getOwnPropSymbols(source)) {
24
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
25
+ target[prop] = source[prop];
26
+ }
27
+ return target;
28
+ };
29
+ function PageTree(_a) {
30
+ var _b = _a, {
31
+ pages
32
+ } = _b, rest = __objRest(_b, [
33
+ "pages"
34
+ ]);
35
+ return /* @__PURE__ */ jsx(View, { style: [ui.group, {
36
+ backgroundColor: rest.palette.card
37
+ }, ui.cardShadow], children: pages.map((page, i) => /* @__PURE__ */ jsx(PageTreeRow, __spreadValues({ page, depth: 0, last: i === pages.length - 1 }, rest), page.id)) });
38
+ }
39
+ function PageTreeRow(_c) {
40
+ var _d = _c, {
41
+ page,
42
+ depth,
43
+ last
44
+ } = _d, rest = __objRest(_d, [
45
+ "page",
46
+ "depth",
47
+ "last"
48
+ ]);
49
+ var _a, _b;
50
+ const {
51
+ palette,
52
+ favoriteIds,
53
+ onOpenPage,
54
+ onActions
55
+ } = rest;
56
+ const [expanded, setExpanded] = useState(false);
57
+ const emoji = blockIcon(page);
58
+ const hasChildren = ((_b = (_a = page.content) == null ? void 0 : _a.length) != null ? _b : 0) > 0;
59
+ const meta = editedLabel(page.lastEditedTime);
60
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
61
+ /* @__PURE__ */ jsxs(Pressable, { accessibilityRole: "button", onPress: () => onOpenPage(page.id), onLongPress: () => onActions(page), delayLongPress: 300, style: ({
62
+ pressed
63
+ }) => [styles.row, {
64
+ paddingLeft: 6 + depth * 18
65
+ }, pressed && {
66
+ backgroundColor: palette.pressed
67
+ }], children: [
68
+ /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", accessibilityLabel: expanded ? "Collapse" : "Expand", accessibilityState: {
69
+ expanded
70
+ }, onPress: () => setExpanded((v) => !v), disabled: !hasChildren, hitSlop: 6, style: styles.chevron, children: hasChildren ? /* @__PURE__ */ jsx(Ionicons, { name: expanded ? "chevron-down" : "chevron-forward", size: 15, color: palette.textMuted }) : null }),
71
+ /* @__PURE__ */ jsx(View, { style: [styles.icon, {
72
+ backgroundColor: palette.fill
73
+ }], children: emoji ? /* @__PURE__ */ jsx(Text, { style: styles.emoji, children: emoji }) : /* @__PURE__ */ jsx(Ionicons, { name: page.type === "database" ? "grid-outline" : "document-text-outline", size: 17, color: palette.textMuted }) }),
74
+ /* @__PURE__ */ jsxs(View, { style: [styles.body, !(last && !expanded) && ui.hairline, {
75
+ borderBottomColor: palette.hairline
76
+ }], children: [
77
+ /* @__PURE__ */ jsxs(View, { style: ui.flex, children: [
78
+ /* @__PURE__ */ jsx(Text, { numberOfLines: 1, style: [styles.title, {
79
+ color: palette.text
80
+ }], children: pageTitle(page) }),
81
+ meta && depth === 0 ? /* @__PURE__ */ jsx(Text, { style: [styles.meta, {
82
+ color: palette.textMuted
83
+ }], children: meta }) : null
84
+ ] }),
85
+ favoriteIds.includes(page.id) ? /* @__PURE__ */ jsx(Ionicons, { name: "star", size: 14, color: "#eab308" }) : null,
86
+ /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", accessibilityLabel: `Actions for ${pageTitle(page)}`, onPress: () => onActions(page), hitSlop: 8, style: styles.more, children: /* @__PURE__ */ jsx(Ionicons, { name: "ellipsis-horizontal", size: 18, color: palette.textMuted }) })
87
+ ] })
88
+ ] }),
89
+ expanded ? /* @__PURE__ */ jsx(Children, __spreadValues({ parentId: page.id, depth: depth + 1, last }, rest)) : null
90
+ ] });
91
+ }
92
+ function Children(_e) {
93
+ var _f = _e, {
94
+ parentId,
95
+ depth,
96
+ last
97
+ } = _f, rest = __objRest(_f, [
98
+ "parentId",
99
+ "depth",
100
+ "last"
101
+ ]);
102
+ var _a, _b;
103
+ const {
104
+ data,
105
+ loading,
106
+ error
107
+ } = useQuery(NATIVE_NOTION_CHILDREN, {
108
+ variables: {
109
+ blockId: parentId,
110
+ pageSize: 100
111
+ },
112
+ fetchPolicy: "cache-and-network"
113
+ });
114
+ const pages = ((_b = (_a = data == null ? void 0 : data.getBlockChildren) == null ? void 0 : _a.results) != null ? _b : []).filter((b) => isPageBlock(b) && !b.inTrash && !b.archived && !isHiddenListingBlock(b.properties));
115
+ const pad = {
116
+ paddingLeft: 46 + depth * 18
117
+ };
118
+ if (loading && !data) {
119
+ return /* @__PURE__ */ jsx(View, { style: [styles.note, pad], children: /* @__PURE__ */ jsx(ActivityIndicator, { size: "small", color: rest.palette.textMuted }) });
120
+ }
121
+ if (error || !pages.length) {
122
+ return /* @__PURE__ */ jsx(View, { style: [styles.note, pad], children: /* @__PURE__ */ jsx(Text, { style: [styles.noteText, {
123
+ color: rest.palette.textFaint
124
+ }], children: error ? "Couldn't load sub-pages" : "No pages inside" }) });
125
+ }
126
+ return /* @__PURE__ */ jsx(Fragment, { children: pages.map((p, i) => /* @__PURE__ */ jsx(PageTreeRow, __spreadValues({ page: p, depth, last: last && i === pages.length - 1 }, rest), p.id)) });
127
+ }
128
+ function FavoritesList(_g) {
129
+ var _h = _g, {
130
+ ids,
131
+ pages
132
+ } = _h, rest = __objRest(_h, [
133
+ "ids",
134
+ "pages"
135
+ ]);
136
+ const byId = new Map(pages.map((p) => [p.id, p]));
137
+ return /* @__PURE__ */ jsx(View, { style: [ui.group, {
138
+ backgroundColor: rest.palette.card
139
+ }, ui.cardShadow], children: ids.map((id, i) => {
140
+ var _a;
141
+ return /* @__PURE__ */ jsx(FavoriteRow, __spreadValues({ id, known: (_a = byId.get(id)) != null ? _a : null, last: i === ids.length - 1 }, rest), id);
142
+ }) });
143
+ }
144
+ function FavoriteRow(_i) {
145
+ var _j = _i, {
146
+ id,
147
+ known,
148
+ last
149
+ } = _j, rest = __objRest(_j, [
150
+ "id",
151
+ "known",
152
+ "last"
153
+ ]);
154
+ var _a;
155
+ const {
156
+ data
157
+ } = useQuery(NATIVE_NOTION_BLOCK, {
158
+ variables: {
159
+ input: {
160
+ blockId: id
161
+ }
162
+ },
163
+ skip: Boolean(known),
164
+ fetchPolicy: "cache-first"
165
+ });
166
+ const page = (_a = known != null ? known : data == null ? void 0 : data.getBlock) != null ? _a : null;
167
+ if (!page || page.inTrash || page.archived) return null;
168
+ return /* @__PURE__ */ jsx(PageTreeRow, __spreadValues({ page, depth: 0, last }, rest));
169
+ }
170
+ const styles = StyleSheet.create({
171
+ row: {
172
+ flexDirection: "row",
173
+ alignItems: "center"
174
+ },
175
+ chevron: {
176
+ width: 26,
177
+ height: 44,
178
+ alignItems: "center",
179
+ justifyContent: "center"
180
+ },
181
+ icon: {
182
+ width: 34,
183
+ height: 34,
184
+ borderRadius: 10,
185
+ alignItems: "center",
186
+ justifyContent: "center"
187
+ },
188
+ emoji: {
189
+ fontSize: 17
190
+ },
191
+ body: {
192
+ flex: 1,
193
+ flexDirection: "row",
194
+ alignItems: "center",
195
+ gap: 8,
196
+ marginLeft: 10,
197
+ paddingRight: 8,
198
+ minHeight: 56
199
+ },
200
+ title: {
201
+ fontSize: 16,
202
+ fontWeight: "600"
203
+ },
204
+ meta: {
205
+ fontSize: 13,
206
+ marginTop: 2
207
+ },
208
+ more: {
209
+ width: 34,
210
+ height: 34,
211
+ alignItems: "center",
212
+ justifyContent: "center"
213
+ },
214
+ note: {
215
+ paddingVertical: 10
216
+ },
217
+ noteText: {
218
+ fontSize: 13
219
+ }
220
+ });export{FavoritesList,PageTree};//# sourceMappingURL=NotionPageTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotionPageTree.js","sources":["../../../src/features/notion/NotionPageTree.tsx"],"sourcesContent":["/**\n * The web sidebar page tree on a phone: each page row expands to its sub-pages\n * (loaded on demand with getBlockChildren, like the web's lazy children), tap\n * opens the page, the ••• button / long-press opens the page actions.\n */\nimport React, { useState } from 'react';\nimport { ActivityIndicator, Pressable, StyleSheet, Text, View } from 'react-native';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useQuery } from '@apollo/client';\nimport { NATIVE_NOTION_BLOCK, NATIVE_NOTION_CHILDREN } from './notionDocuments';\nimport { blockIcon, editedLabel, isHiddenListingBlock, isPageBlock, pageTitle, type NotionBlock } from './notionBlocks';\nimport type { NotionPalette } from './notionTheme';\nimport { ui } from './notionUi';\n\ntype Palette = NotionPalette;\n\ninterface TreeProps {\n palette: Palette;\n favoriteIds: readonly string[];\n onOpenPage: (id: string) => void;\n onActions: (page: NotionBlock) => void;\n}\n\nexport function PageTree({ pages, ...rest }: TreeProps & { pages: NotionBlock[] }) {\n return (\n <View style={[ui.group, { backgroundColor: rest.palette.card }, ui.cardShadow]}>\n {pages.map((page, i) => (\n <PageTreeRow key={page.id} page={page} depth={0} last={i === pages.length - 1} {...rest} />\n ))}\n </View>\n );\n}\n\nfunction PageTreeRow({ page, depth, last, ...rest }: TreeProps & { page: NotionBlock; depth: number; last: boolean }) {\n const { palette, favoriteIds, onOpenPage, onActions } = rest;\n const [expanded, setExpanded] = useState(false);\n const emoji = blockIcon(page);\n const hasChildren = (page.content?.length ?? 0) > 0;\n const meta = editedLabel(page.lastEditedTime);\n return (\n <>\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => onOpenPage(page.id)}\n onLongPress={() => onActions(page)}\n delayLongPress={300}\n style={({ pressed }) => [\n styles.row,\n { paddingLeft: 6 + depth * 18 },\n pressed && { backgroundColor: palette.pressed },\n ]}\n >\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={expanded ? 'Collapse' : 'Expand'}\n accessibilityState={{ expanded }}\n onPress={() => setExpanded((v) => !v)}\n disabled={!hasChildren}\n hitSlop={6}\n style={styles.chevron}\n >\n {hasChildren ? (\n <Ionicons\n name={expanded ? 'chevron-down' : 'chevron-forward'}\n size={15}\n color={palette.textMuted}\n />\n ) : null}\n </Pressable>\n <View style={[styles.icon, { backgroundColor: palette.fill }]}>\n {emoji ? (\n <Text style={styles.emoji}>{emoji}</Text>\n ) : (\n <Ionicons\n name={page.type === 'database' ? 'grid-outline' : 'document-text-outline'}\n size={17}\n color={palette.textMuted}\n />\n )}\n </View>\n <View\n style={[styles.body, !(last && !expanded) && ui.hairline, { borderBottomColor: palette.hairline }]}\n >\n <View style={ui.flex}>\n <Text numberOfLines={1} style={[styles.title, { color: palette.text }]}>\n {pageTitle(page)}\n </Text>\n {meta && depth === 0 ? (\n <Text style={[styles.meta, { color: palette.textMuted }]}>{meta}</Text>\n ) : null}\n </View>\n {favoriteIds.includes(page.id) ? <Ionicons name=\"star\" size={14} color=\"#eab308\" /> : null}\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`Actions for ${pageTitle(page)}`}\n onPress={() => onActions(page)}\n hitSlop={8}\n style={styles.more}\n >\n <Ionicons name=\"ellipsis-horizontal\" size={18} color={palette.textMuted} />\n </Pressable>\n </View>\n </Pressable>\n {expanded ? <Children parentId={page.id} depth={depth + 1} last={last} {...rest} /> : null}\n </>\n );\n}\n\nfunction Children({ parentId, depth, last, ...rest }: TreeProps & { parentId: string; depth: number; last: boolean }) {\n const { data, loading, error } = useQuery<{ getBlockChildren?: { results?: NotionBlock[] | null } | null }>(\n NATIVE_NOTION_CHILDREN,\n { variables: { blockId: parentId, pageSize: 100 }, fetchPolicy: 'cache-and-network' },\n );\n // Content order (the page's own order), live sub-pages only.\n const pages = (data?.getBlockChildren?.results ?? []).filter(\n (b) => isPageBlock(b) && !b.inTrash && !b.archived && !isHiddenListingBlock(b.properties),\n );\n const pad = { paddingLeft: 46 + depth * 18 };\n if (loading && !data) {\n return (\n <View style={[styles.note, pad]}>\n <ActivityIndicator size=\"small\" color={rest.palette.textMuted} />\n </View>\n );\n }\n if (error || !pages.length) {\n return (\n <View style={[styles.note, pad]}>\n <Text style={[styles.noteText, { color: rest.palette.textFaint }]}>\n {error ? \"Couldn't load sub-pages\" : 'No pages inside'}\n </Text>\n </View>\n );\n }\n return (\n <>\n {pages.map((p, i) => (\n <PageTreeRow key={p.id} page={p} depth={depth} last={last && i === pages.length - 1} {...rest} />\n ))}\n </>\n );\n}\n\n/**\n * Favorites (web sidebar ★ section). Top-level pages come from the loaded list; a\n * favorited sub-page is fetched on its own. Trashed or missing favorites are skipped.\n */\nexport function FavoritesList({ ids, pages, ...rest }: TreeProps & { ids: readonly string[]; pages: NotionBlock[] }) {\n const byId = new Map(pages.map((p) => [p.id, p]));\n return (\n <View style={[ui.group, { backgroundColor: rest.palette.card }, ui.cardShadow]}>\n {ids.map((id, i) => (\n <FavoriteRow key={id} id={id} known={byId.get(id) ?? null} last={i === ids.length - 1} {...rest} />\n ))}\n </View>\n );\n}\n\nfunction FavoriteRow({\n id,\n known,\n last,\n ...rest\n}: TreeProps & { id: string; known: NotionBlock | null; last: boolean }) {\n const { data } = useQuery<{ getBlock?: NotionBlock | null }>(NATIVE_NOTION_BLOCK, {\n variables: { input: { blockId: id } },\n skip: Boolean(known),\n fetchPolicy: 'cache-first',\n });\n const page = known ?? data?.getBlock ?? null;\n if (!page || page.inTrash || page.archived) return null;\n return <PageTreeRow page={page} depth={0} last={last} {...rest} />;\n}\n\nconst styles = StyleSheet.create({\n row: { flexDirection: 'row', alignItems: 'center' },\n chevron: { width: 26, height: 44, alignItems: 'center', justifyContent: 'center' },\n icon: { width: 34, height: 34, borderRadius: 10, alignItems: 'center', justifyContent: 'center' },\n emoji: { fontSize: 17 },\n body: {\n flex: 1,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n marginLeft: 10,\n paddingRight: 8,\n minHeight: 56,\n },\n title: { fontSize: 16, fontWeight: '600' },\n meta: { fontSize: 13, marginTop: 2 },\n more: { width: 34, height: 34, alignItems: 'center', justifyContent: 'center' },\n note: { paddingVertical: 10 },\n noteText: { fontSize: 13 },\n});\n"],"names":[],"mappings":"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"}