@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 @@
|
|
|
1
|
+
{"version":3,"file":"NotionMediaBlocks.js","sources":["../../../src/features/notion/NotionMediaBlocks.tsx"],"sourcesContent":["/**\n * Media and structured blocks of the native editor, on the web BlockEditor's data\n * (see notionMedia): image, video, audio, file, bookmark, embed, equation and table.\n * Uploads use the web flow - createNotionUploadLink, PUT the bytes, saveNotionUploadedFile\n * (refType NotionImageBlock / NotionVideoBlock / NotionFileBlock / NotionAudioBlock) - and\n * uploaded files are shown through resolveNotionFileUrl. Embeds and streaming-site videos\n * open in the in-app browser rather than a WebView (native ports never host web surfaces).\n */\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { ActivityIndicator, Alert, Pressable, ScrollView, StyleSheet, Text, TextInput, View } from 'react-native';\nimport { Ionicons } from '@expo/vector-icons';\nimport { Image } from 'expo-image';\nimport { useApolloClient } from '@apollo/client';\nimport {\n NATIVE_NOTION_CREATE_UPLOAD_LINK,\n NATIVE_NOTION_OPEN_GRAPH,\n NATIVE_NOTION_RESOLVE_FILE_URL,\n NATIVE_NOTION_SAVE_UPLOADED_FILE,\n} from './notionDocuments';\nimport {\n addColumn,\n addRow,\n contentTypeForS3Put,\n externalProps,\n fileNameOf,\n hostOf,\n isStreamingSiteUrl,\n managedFileProps,\n mediaSourceOf,\n removeColumn,\n removeRow,\n setCell,\n sizeLabel,\n tableRowsOf,\n} from './notionMedia';\nimport type { NotionPalette } from './notionTheme';\nimport type { EditorBlock } from './notionEditorModel';\n\ntype Palette = NotionPalette;\ntype Patch = (props: Record<string, unknown>) => void;\n\nexport const MEDIA_TYPES: readonly string[] = [\n 'image',\n 'video',\n 'audio',\n 'file',\n 'bookmark',\n 'embed',\n 'equation',\n 'table',\n];\n\nconst REF_TYPE: Record<string, string> = {\n image: 'NotionImageBlock',\n video: 'NotionVideoBlock',\n file: 'NotionFileBlock',\n audio: 'NotionAudioBlock',\n};\n\nconst MONO = 'Menlo';\n\n// ============================================================================\n// Upload + resolve\n// ============================================================================\n\ninterface PickedFile {\n uri: string;\n name: string;\n mimeType: string;\n size?: number;\n}\n\n/** Upload a picked local file the web way; returns the block properties to store. */\nexport function useNotionUpload() {\n const client = useApolloClient();\n return useCallback(\n async (file: PickedFile, blockId: string, blockType: string) => {\n const refType = REF_TYPE[blockType] ?? 'NotionFileBlock';\n const link = await client.mutate<{\n createNotionUploadLink?: { success?: boolean; uploadUrl?: string | null; message?: string | null };\n }>({\n mutation: NATIVE_NOTION_CREATE_UPLOAD_LINK,\n variables: { input: { filename: file.name, ref: blockId, refType } },\n errorPolicy: 'none',\n });\n const uploadUrl = link.data?.createNotionUploadLink?.uploadUrl;\n if (!link.data?.createNotionUploadLink?.success || !uploadUrl) {\n throw new Error(link.data?.createNotionUploadLink?.message || 'Could not get an upload link');\n }\n const body = await (await fetch(file.uri)).blob();\n const putType = contentTypeForS3Put(file.mimeType || 'application/octet-stream', file.name);\n const put = await fetch(uploadUrl, { method: 'PUT', headers: { 'Content-Type': putType }, body });\n if (!put.ok) throw new Error(`Upload failed (${put.status})`);\n const saved = await client.mutate<{\n saveNotionUploadedFile?: {\n success?: boolean;\n message?: string;\n fileInfo?: { id: string; url: string; name: string; mimeType: string; size: number } | null;\n };\n }>({\n mutation: NATIVE_NOTION_SAVE_UPLOADED_FILE,\n variables: {\n input: {\n file: {\n name: file.name,\n url: uploadUrl.split('?')[0],\n mimeType: putType.split(';')[0].trim(),\n size: file.size ?? body.size,\n },\n ref: blockId,\n refType,\n },\n },\n errorPolicy: 'none',\n });\n const info = saved.data?.saveNotionUploadedFile?.fileInfo;\n if (!saved.data?.saveNotionUploadedFile?.success || !info) {\n throw new Error(saved.data?.saveNotionUploadedFile?.message || 'Upload failed');\n }\n return managedFileProps(info);\n },\n [client],\n );\n}\n\n/** A displayable URL for a media block (uploaded files get a short-lived signed link). */\nfunction useMediaUrl(props: Record<string, unknown>) {\n const client = useApolloClient();\n const source = mediaSourceOf(props);\n const key = source?.kind === 'managed' ? source.key : null;\n const [resolved, setResolved] = useState<{ key: string; url: string | null } | null>(null);\n useEffect(() => {\n if (!key) return undefined;\n let alive = true;\n client\n .query<{ resolveNotionFileUrl?: string | null }>({\n query: NATIVE_NOTION_RESOLVE_FILE_URL,\n variables: { s3KeyOrUrl: key, expiresIn: 3600 },\n fetchPolicy: 'no-cache',\n })\n .then((res) => alive && setResolved({ key, url: res.data?.resolveNotionFileUrl ?? null }))\n .catch(() => alive && setResolved({ key, url: null }));\n return () => {\n alive = false;\n };\n }, [client, key]);\n if (!source) return { url: null, loading: false };\n if (source.kind === 'external') return { url: source.url, loading: false };\n return { url: resolved?.key === key ? resolved.url : null, loading: resolved?.key !== key };\n}\n\nasync function pickMedia(kind: 'image' | 'video'): Promise<PickedFile | null> {\n // Required lazily like the other native features (an older host still loads the editor).\n // eslint-disable-next-line @typescript-eslint/no-require-imports, global-require\n const ImagePicker = require('expo-image-picker') as typeof import('expo-image-picker');\n const permission = await ImagePicker.requestMediaLibraryPermissionsAsync();\n if (!permission.granted) throw new Error('Allow photo access in Settings to add media.');\n const result = await ImagePicker.launchImageLibraryAsync({\n mediaTypes: [kind === 'image' ? 'images' : 'videos'],\n quality: 0.85,\n exif: false,\n });\n const asset = result.canceled ? null : result.assets?.[0];\n if (!asset?.uri) return null;\n const ext = kind === 'image' ? 'jpg' : 'mp4';\n return {\n uri: asset.uri,\n name: asset.fileName || `${kind}-${Date.now()}.${ext}`,\n mimeType: asset.mimeType || (kind === 'image' ? 'image/jpeg' : 'video/mp4'),\n size: asset.fileSize,\n };\n}\n\nasync function pickDocument(kind: 'file' | 'audio'): Promise<PickedFile | null> {\n // eslint-disable-next-line @typescript-eslint/no-require-imports, global-require\n const DocumentPicker = require('expo-document-picker') as typeof import('expo-document-picker');\n const result = await DocumentPicker.getDocumentAsync({\n type: kind === 'audio' ? 'audio/*' : '*/*',\n copyToCacheDirectory: true,\n multiple: false,\n });\n const asset = result.canceled ? null : result.assets?.[0];\n if (!asset?.uri) return null;\n return {\n uri: asset.uri,\n name: asset.name,\n mimeType: asset.mimeType || 'application/octet-stream',\n size: asset.size,\n };\n}\n\nfunction openInBrowser(url: string) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports, global-require\n const WebBrowser = require('expo-web-browser') as typeof import('expo-web-browser');\n WebBrowser.openBrowserAsync(url).catch(() => undefined);\n}\n\n// ============================================================================\n// Block\n// ============================================================================\n\nexport function MediaBlock({\n block,\n palette,\n locked,\n onPatch,\n onCaption,\n onMenu,\n}: {\n block: EditorBlock;\n palette: Palette;\n locked: boolean;\n onPatch: Patch;\n onCaption: () => void;\n onMenu?: () => void;\n}) {\n const props = block.properties;\n switch (block.type) {\n case 'image':\n case 'video':\n case 'audio':\n case 'file':\n return (\n <FileLikeBlock\n block={block}\n palette={palette}\n locked={locked}\n onPatch={onPatch}\n onCaption={onCaption}\n onMenu={onMenu}\n />\n );\n case 'bookmark':\n return <BookmarkBlock props={props} palette={palette} locked={locked} onPatch={onPatch} onMenu={onMenu} />;\n case 'embed':\n return <EmbedBlock props={props} palette={palette} locked={locked} onPatch={onPatch} onMenu={onMenu} />;\n case 'equation':\n return <EquationBlock props={props} palette={palette} locked={locked} onPatch={onPatch} onMenu={onMenu} />;\n case 'table':\n return <TableBlock props={props} palette={palette} locked={locked} onPatch={onPatch} onMenu={onMenu} />;\n default:\n return null;\n }\n}\n\nconst KIND_COPY: Record<\n string,\n { icon: React.ComponentProps<typeof Ionicons>['name']; empty: string; upload: string }\n> = {\n image: { icon: 'image-outline', empty: 'Add an image', upload: 'Upload photo' },\n video: { icon: 'videocam-outline', empty: 'Add a video', upload: 'Upload video' },\n audio: { icon: 'musical-notes-outline', empty: 'Add audio', upload: 'Upload audio' },\n file: { icon: 'document-attach-outline', empty: 'Add a file', upload: 'Upload file' },\n};\n\nfunction FileLikeBlock({\n block,\n palette,\n locked,\n onPatch,\n onCaption,\n onMenu,\n}: {\n block: EditorBlock;\n palette: Palette;\n locked: boolean;\n onPatch: Patch;\n onCaption: () => void;\n onMenu?: () => void;\n}) {\n const upload = useNotionUpload();\n const { url, loading } = useMediaUrl(block.properties);\n const [busy, setBusy] = useState(false);\n const [linking, setLinking] = useState(false);\n const [link, setLink] = useState('');\n const [error, setError] = useState<string | null>(null);\n const copy = KIND_COPY[block.type] ?? KIND_COPY.file;\n const hasSource = Boolean(mediaSourceOf(block.properties));\n\n const doUpload = async () => {\n setError(null);\n try {\n const picked =\n block.type === 'image' || block.type === 'video'\n ? await pickMedia(block.type)\n : await pickDocument(block.type === 'audio' ? 'audio' : 'file');\n if (!picked) return;\n setBusy(true);\n onPatch(await upload(picked, block.id, block.type));\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Upload failed');\n } finally {\n setBusy(false);\n }\n };\n\n const saveLink = () => {\n const u = link.trim();\n if (!/^https?:\\/\\//i.test(u)) {\n setError('Enter a link that starts with http:// or https://');\n return;\n }\n setLinking(false);\n setError(null);\n onPatch(externalProps(u));\n };\n\n if (!hasSource) {\n return (\n <Pressable onLongPress={onMenu} style={[styles.emptyCard, { backgroundColor: palette.fill }]}>\n <View style={styles.emptyHead}>\n <Ionicons name={copy.icon} size={20} color={palette.textMuted} />\n <Text style={[styles.emptyTitle, { color: palette.textMuted }]}>{copy.empty}</Text>\n </View>\n {locked ? null : linking ? (\n <View style={styles.linkRow}>\n <TextInput\n value={link}\n onChangeText={setLink}\n placeholder=\"Paste a link\"\n placeholderTextColor={palette.textFaint}\n autoCapitalize=\"none\"\n autoCorrect={false}\n keyboardType=\"url\"\n autoFocus\n onSubmitEditing={saveLink}\n style={[styles.linkInput, { color: palette.text, backgroundColor: palette.card }]}\n />\n <Pressable\n accessibilityRole=\"button\"\n onPress={saveLink}\n style={[styles.smallBtn, { backgroundColor: palette.primary }]}\n >\n <Text style={[styles.smallBtnLabel, { color: palette.onPrimary }]}>Add</Text>\n </Pressable>\n </View>\n ) : (\n <View style={styles.actionsRow}>\n <Pressable\n accessibilityRole=\"button\"\n onPress={doUpload}\n disabled={busy}\n style={[styles.smallBtn, { backgroundColor: palette.primary }]}\n >\n {busy ? (\n <ActivityIndicator size=\"small\" color={palette.onPrimary} />\n ) : (\n <Text style={[styles.smallBtnLabel, { color: palette.onPrimary }]}>{copy.upload}</Text>\n )}\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => setLinking(true)}\n style={[styles.smallBtn, { backgroundColor: palette.card }]}\n >\n <Text style={[styles.smallBtnLabel, { color: palette.text }]}>Paste a link</Text>\n </Pressable>\n </View>\n )}\n {error ? <Text style={[styles.error, { color: palette.danger }]}>{error}</Text> : null}\n </Pressable>\n );\n }\n\n const caption = block.text.trim();\n let body: React.ReactNode = null;\n if (loading) {\n body = (\n <View style={[styles.loadingBox, { backgroundColor: palette.fill }]}>\n <ActivityIndicator color={palette.textMuted} />\n </View>\n );\n } else if (!url) {\n body = (\n <View style={[styles.loadingBox, { backgroundColor: palette.fill }]}>\n <Text style={[styles.error, { color: palette.textMuted }]}>Couldn't load this {block.type}.</Text>\n </View>\n );\n } else if (block.type === 'image') {\n body = <ImageView url={url} />;\n } else if (block.type === 'video') {\n body = isStreamingSiteUrl(url) ? (\n <LinkCard\n palette={palette}\n icon=\"play-circle-outline\"\n title={hostOf(url)}\n subtitle=\"Opens in the browser\"\n onPress={() => openInBrowser(url)}\n />\n ) : (\n <VideoView url={url} />\n );\n } else if (block.type === 'audio') {\n body = <AudioView url={url} palette={palette} title={fileNameOf(block.properties)} />;\n } else {\n body = (\n <LinkCard\n palette={palette}\n icon=\"document-attach-outline\"\n title={fileNameOf(block.properties)}\n subtitle={\n sizeLabel(\n block.properties.size ?? (block.properties.file as { size?: number } | undefined)?.size,\n ) || hostOf(url)\n }\n onPress={() => openInBrowser(url)}\n />\n );\n }\n\n return (\n <Pressable onLongPress={onMenu} delayLongPress={350}>\n {body}\n {caption || !locked ? (\n <Pressable accessibilityRole=\"button\" onPress={locked ? undefined : onCaption} hitSlop={4}>\n <Text style={[styles.caption, { color: caption ? palette.textMuted : palette.textFaint }]}>\n {caption || (block.type === 'image' || block.type === 'video' ? 'Add a caption' : '')}\n </Text>\n </Pressable>\n ) : null}\n </Pressable>\n );\n}\n\nfunction ImageView({ url }: { url: string }) {\n const [ratio, setRatio] = useState(4 / 3);\n return (\n <Image\n source={{ uri: url }}\n style={[styles.image, { aspectRatio: ratio }]}\n contentFit=\"contain\"\n transition={150}\n onLoad={(e) => {\n const { width, height } = e.source;\n if (width && height) setRatio(width / height);\n }}\n />\n );\n}\n\nfunction VideoView({ url }: { url: string }) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports, global-require\n const ExpoVideo = require('expo-video') as typeof import('expo-video');\n const player = ExpoVideo.useVideoPlayer(url, (p) => {\n p.loop = false;\n });\n return (\n <ExpoVideo.VideoView\n player={player}\n style={styles.video}\n nativeControls\n allowsFullscreen\n contentFit=\"contain\"\n />\n );\n}\n\nfunction AudioView({ url, palette, title }: { url: string; palette: Palette; title: string }) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports, global-require\n const ExpoAudio = require('expo-audio') as typeof import('expo-audio');\n const player = ExpoAudio.useAudioPlayer(url);\n const status = ExpoAudio.useAudioPlayerStatus(player);\n const progress = status.duration ? Math.min(1, status.currentTime / status.duration) : 0;\n const fmt = (s: number) => `${Math.floor(s / 60)}:${String(Math.floor(s % 60)).padStart(2, '0')}`;\n return (\n <View style={[styles.audio, { backgroundColor: palette.fill }]}>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={status.playing ? 'Pause' : 'Play'}\n onPress={() => {\n if (status.playing) player.pause();\n else {\n if (status.duration && status.currentTime >= status.duration) player.seekTo(0);\n player.play();\n }\n }}\n style={[styles.playBtn, { backgroundColor: palette.primary }]}\n >\n <Ionicons name={status.playing ? 'pause' : 'play'} size={18} color={palette.onPrimary} />\n </Pressable>\n <View style={styles.audioBody}>\n <Text numberOfLines={1} style={[styles.audioTitle, { color: palette.text }]}>\n {title}\n </Text>\n <View style={[styles.track, { backgroundColor: palette.hairline }]}>\n <View\n style={[styles.trackFill, { width: `${progress * 100}%`, backgroundColor: palette.primary }]}\n />\n </View>\n <Text style={[styles.audioTime, { color: palette.textMuted }]}>\n {`${fmt(status.currentTime || 0)} / ${fmt(status.duration || 0)}`}\n </Text>\n </View>\n </View>\n );\n}\n\nfunction LinkCard({\n palette,\n icon,\n title,\n subtitle,\n image,\n description,\n onPress,\n}: {\n palette: Palette;\n icon: React.ComponentProps<typeof Ionicons>['name'];\n title: string;\n subtitle?: string;\n image?: string | null;\n description?: string;\n onPress: () => void;\n}) {\n return (\n <Pressable\n accessibilityRole=\"link\"\n onPress={onPress}\n style={({ pressed }) => [\n styles.linkCard,\n { borderColor: palette.hairline, backgroundColor: pressed ? palette.pressed : palette.card },\n ]}\n >\n <View style={styles.linkCardBody}>\n <View style={styles.linkCardHead}>\n <Ionicons name={icon} size={18} color={palette.textMuted} />\n <Text numberOfLines={2} style={[styles.linkCardTitle, { color: palette.text }]}>\n {title}\n </Text>\n </View>\n {description ? (\n <Text numberOfLines={2} style={[styles.linkCardDesc, { color: palette.textMuted }]}>\n {description}\n </Text>\n ) : null}\n {subtitle ? (\n <Text numberOfLines={1} style={[styles.linkCardSub, { color: palette.textFaint }]}>\n {subtitle}\n </Text>\n ) : null}\n </View>\n {image ? <Image source={{ uri: image }} style={styles.linkCardImage} contentFit=\"cover\" /> : null}\n </Pressable>\n );\n}\n\nfunction UrlEntry({\n palette,\n placeholder,\n onSave,\n busy,\n}: {\n palette: Palette;\n placeholder: string;\n onSave: (url: string) => void;\n busy?: boolean;\n}) {\n const [value, setValue] = useState('');\n const [error, setError] = useState<string | null>(null);\n const save = () => {\n const raw = value.trim();\n if (!raw) return;\n const url = /^[a-z]+:\\/\\//i.test(raw) ? raw : `https://${raw}`;\n if (!/^https?:\\/\\//i.test(url)) {\n setError('Enter a web link');\n return;\n }\n setError(null);\n onSave(url);\n };\n return (\n <View style={[styles.emptyCard, { backgroundColor: palette.fill }]}>\n <View style={styles.linkRow}>\n <TextInput\n value={value}\n onChangeText={setValue}\n placeholder={placeholder}\n placeholderTextColor={palette.textFaint}\n autoCapitalize=\"none\"\n autoCorrect={false}\n keyboardType=\"url\"\n onSubmitEditing={save}\n style={[styles.linkInput, { color: palette.text, backgroundColor: palette.card }]}\n />\n <Pressable\n accessibilityRole=\"button\"\n onPress={save}\n disabled={busy}\n style={[styles.smallBtn, { backgroundColor: palette.primary }]}\n >\n {busy ? (\n <ActivityIndicator size=\"small\" color={palette.onPrimary} />\n ) : (\n <Text style={[styles.smallBtnLabel, { color: palette.onPrimary }]}>Add</Text>\n )}\n </Pressable>\n </View>\n {error ? <Text style={[styles.error, { color: palette.danger }]}>{error}</Text> : null}\n </View>\n );\n}\n\nfunction plain(value: unknown): string {\n if (typeof value === 'string') return value;\n if (Array.isArray(value))\n return value\n .map((v: { plainText?: string; text?: { content?: string } }) => v?.plainText ?? v?.text?.content ?? '')\n .join('');\n return '';\n}\n\nfunction BookmarkBlock({\n props,\n palette,\n locked,\n onPatch,\n onMenu,\n}: {\n props: Record<string, unknown>;\n palette: Palette;\n locked: boolean;\n onPatch: Patch;\n onMenu?: () => void;\n}) {\n const client = useApolloClient();\n const [busy, setBusy] = useState(false);\n const url = typeof props.url === 'string' ? props.url : '';\n\n /** Web fetchPreview: keep the server's preview on the block. */\n const add = async (target: string) => {\n setBusy(true);\n onPatch({ url: target });\n try {\n const res = await client.query<{\n fetchOpenGraph?: { title?: string; description?: string; image?: string } | null;\n }>({\n query: NATIVE_NOTION_OPEN_GRAPH,\n variables: { url: target },\n fetchPolicy: 'network-only',\n });\n const og = res.data?.fetchOpenGraph;\n if (og)\n onPatch({\n url: target,\n title: og.title ?? '',\n description: og.description ?? '',\n image: og.image ?? '',\n });\n } catch {\n // No preview: the card still shows the link.\n } finally {\n setBusy(false);\n }\n };\n\n if (!url) {\n return locked ? null : (\n <UrlEntry palette={palette} placeholder=\"Paste a link to bookmark\" onSave={add} busy={busy} />\n );\n }\n const image =\n typeof props.image === 'string' ? props.image : typeof props.ogImage === 'string' ? props.ogImage : null;\n return (\n <Pressable onLongPress={onMenu} delayLongPress={350}>\n <LinkCard\n palette={palette}\n icon=\"bookmark-outline\"\n title={plain(props.title ?? props.ogTitle) || hostOf(url)}\n description={plain(props.description ?? props.ogDescription)}\n subtitle={url}\n image={image}\n onPress={() => openInBrowser(url)}\n />\n </Pressable>\n );\n}\n\nfunction EmbedBlock({\n props,\n palette,\n locked,\n onPatch,\n onMenu,\n}: {\n props: Record<string, unknown>;\n palette: Palette;\n locked: boolean;\n onPatch: Patch;\n onMenu?: () => void;\n}) {\n const url = typeof props.url === 'string' ? props.url : '';\n if (!url) {\n if (props.embedType && props.embedType !== 'url') {\n // Form-field / widget embeds (AI widgets, form fields) are web-only.\n return (\n <Pressable onLongPress={onMenu} style={[styles.emptyCard, { backgroundColor: palette.fill }]}>\n <View style={styles.emptyHead}>\n <Ionicons name=\"apps-outline\" size={18} color={palette.textMuted} />\n <Text style={[styles.emptyTitle, { color: palette.textMuted }]}>\n {String((props.fieldSchema as { title?: string } | undefined)?.title ?? 'Widget')} · open on\n the web\n </Text>\n </View>\n </Pressable>\n );\n }\n return locked ? null : (\n <UrlEntry\n palette={palette}\n placeholder=\"Paste a link to embed\"\n onSave={(u) => onPatch({ embedType: 'url', url: u })}\n />\n );\n }\n return (\n <Pressable onLongPress={onMenu} delayLongPress={350}>\n <LinkCard\n palette={palette}\n icon=\"globe-outline\"\n title={hostOf(url)}\n subtitle=\"Embed · opens in the browser\"\n onPress={() => openInBrowser(url)}\n />\n </Pressable>\n );\n}\n\nfunction EquationBlock({\n props,\n palette,\n locked,\n onPatch,\n onMenu,\n}: {\n props: Record<string, unknown>;\n palette: Palette;\n locked: boolean;\n onPatch: Patch;\n onMenu?: () => void;\n}) {\n const expression = String(props.expression ?? '');\n const [draft, setDraft] = useState(expression);\n useEffect(() => setDraft(expression), [expression]);\n return (\n <Pressable\n onLongPress={onMenu}\n delayLongPress={350}\n style={[styles.equation, { backgroundColor: palette.fill }]}\n >\n <Text style={[styles.equationLabel, { color: palette.textMuted }]}>TeX</Text>\n <TextInput\n value={draft}\n onChangeText={setDraft}\n onBlur={() => draft !== expression && onPatch({ expression: draft })}\n editable={!locked}\n multiline\n placeholder=\"E = mc^2\"\n placeholderTextColor={palette.textFaint}\n autoCapitalize=\"none\"\n autoCorrect={false}\n style={[styles.equationInput, { color: palette.text }]}\n />\n </Pressable>\n );\n}\n\nfunction TableBlock({\n props,\n palette,\n locked,\n onPatch,\n onMenu,\n}: {\n props: Record<string, unknown>;\n palette: Palette;\n locked: boolean;\n onPatch: Patch;\n onMenu?: () => void;\n}) {\n const saved = useMemo(() => tableRowsOf(props), [props]);\n const [rows, setRows] = useState(saved);\n useEffect(() => setRows(saved), [saved]);\n const header = props.hasHeaderRow === true;\n const commit = (next: string[][]) => {\n setRows(next);\n onPatch({ rows: next });\n };\n const cellMenu = (r: number, c: number) => {\n if (locked) return;\n Alert.alert('Table', undefined, [\n { text: 'Add row', onPress: () => commit(addRow(rows)) },\n { text: 'Add column', onPress: () => commit(addColumn(rows)) },\n { text: header ? 'Remove header row' : 'Header row', onPress: () => onPatch({ hasHeaderRow: !header }) },\n { text: 'Delete row', style: 'destructive', onPress: () => commit(removeRow(rows, r)) },\n { text: 'Delete column', style: 'destructive', onPress: () => commit(removeColumn(rows, c)) },\n ...(onMenu ? [{ text: 'Block actions…', onPress: onMenu }] : []),\n { text: 'Cancel', style: 'cancel' as const },\n ]);\n };\n return (\n <View>\n <ScrollView horizontal showsHorizontalScrollIndicator={false}>\n <View style={[styles.table, { borderColor: palette.hairline }]}>\n {rows.map((row, r) => (\n // eslint-disable-next-line react/no-array-index-key\n <View key={r} style={[styles.tableRow, header && r === 0 && { backgroundColor: palette.fill }]}>\n {row.map((cell, c) => (\n // eslint-disable-next-line react/no-array-index-key\n <Pressable key={c} onLongPress={() => cellMenu(r, c)} delayLongPress={350}>\n <TextInput\n value={cell}\n onChangeText={(v) => setRows((cur) => setCell(cur, r, c, v))}\n onBlur={() => {\n if (rows !== saved) onPatch({ rows });\n }}\n editable={!locked}\n multiline\n style={[\n styles.cell,\n { color: palette.text, borderColor: palette.hairline },\n header && r === 0 && styles.headerCell,\n ]}\n />\n </Pressable>\n ))}\n </View>\n ))}\n </View>\n </ScrollView>\n {locked ? null : (\n <View style={styles.tableActions}>\n <Pressable accessibilityRole=\"button\" onPress={() => commit(addRow(rows))} hitSlop={6}>\n <Text style={[styles.tableAction, { color: palette.primary }]}>+ Row</Text>\n </Pressable>\n <Pressable accessibilityRole=\"button\" onPress={() => commit(addColumn(rows))} hitSlop={6}>\n <Text style={[styles.tableAction, { color: palette.primary }]}>+ Column</Text>\n </Pressable>\n <Text style={[styles.tableHint, { color: palette.textFaint }]}>Long-press a cell for more</Text>\n </View>\n )}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n emptyCard: { borderRadius: 12, padding: 14, gap: 10 },\n emptyHead: { flexDirection: 'row', alignItems: 'center', gap: 8 },\n emptyTitle: { fontSize: 15, fontWeight: '600' },\n actionsRow: { flexDirection: 'row', gap: 8, flexWrap: 'wrap' },\n linkRow: { flexDirection: 'row', gap: 8, alignItems: 'center' },\n linkInput: { flex: 1, height: 40, paddingHorizontal: 12, borderRadius: 10, fontSize: 15 },\n smallBtn: {\n minHeight: 38,\n paddingHorizontal: 14,\n borderRadius: 10,\n alignItems: 'center',\n justifyContent: 'center',\n },\n smallBtnLabel: { fontSize: 14, fontWeight: '700' },\n error: { fontSize: 13 },\n loadingBox: { height: 160, borderRadius: 12, alignItems: 'center', justifyContent: 'center' },\n image: { width: '100%', borderRadius: 10 },\n video: { width: '100%', aspectRatio: 16 / 9, borderRadius: 10, backgroundColor: '#000' },\n caption: { fontSize: 13, marginTop: 6 },\n audio: { flexDirection: 'row', alignItems: 'center', gap: 12, padding: 12, borderRadius: 12 },\n playBtn: { width: 40, height: 40, borderRadius: 20, alignItems: 'center', justifyContent: 'center' },\n audioBody: { flex: 1, gap: 6 },\n audioTitle: { fontSize: 14, fontWeight: '600' },\n track: { height: 4, borderRadius: 2, overflow: 'hidden' },\n trackFill: { height: 4 },\n audioTime: { fontSize: 11 },\n linkCard: { flexDirection: 'row', borderWidth: StyleSheet.hairlineWidth, borderRadius: 12, overflow: 'hidden' },\n linkCardBody: { flex: 1, padding: 12, gap: 4 },\n linkCardHead: { flexDirection: 'row', alignItems: 'center', gap: 8 },\n linkCardTitle: { flex: 1, fontSize: 15, fontWeight: '600' },\n linkCardDesc: { fontSize: 13, lineHeight: 18 },\n linkCardSub: { fontSize: 12 },\n linkCardImage: { width: 96 },\n equation: { borderRadius: 10, padding: 12, gap: 4 },\n equationLabel: { fontSize: 10, fontWeight: '800', letterSpacing: 0.6 },\n equationInput: { fontFamily: MONO, fontSize: 15, padding: 0, minHeight: 24 },\n table: { borderTopWidth: StyleSheet.hairlineWidth, borderLeftWidth: StyleSheet.hairlineWidth },\n tableRow: { flexDirection: 'row' },\n cell: {\n width: 140,\n minHeight: 40,\n paddingHorizontal: 8,\n paddingVertical: 8,\n fontSize: 14,\n borderRightWidth: StyleSheet.hairlineWidth,\n borderBottomWidth: StyleSheet.hairlineWidth,\n },\n headerCell: { fontWeight: '700' },\n tableActions: { flexDirection: 'row', alignItems: 'center', gap: 16, marginTop: 8 },\n tableAction: { fontSize: 14, fontWeight: '700' },\n tableHint: { fontSize: 12, marginLeft: 'auto' },\n});\n"],"names":["_a","_b"],"mappings":"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"}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import {jsx,jsxs}from'react/jsx-runtime';import {useState,useEffect,useMemo}from'react';import {Modal,View,Text,Pressable,StyleSheet,TextInput,Switch,ScrollView}from'react-native';import {Ionicons}from'@expo/vector-icons';import {useQuery,useLazyQuery}from'@apollo/client/index.js';import {NATIVE_NOTES_VIEWER,NATIVE_NOTION_SEARCH}from'./notionDocuments.js';import {pageTitle,blockIcon}from'./notionBlocks.js';import {buildMentionSections,parseTypedDate,mentionRunFor}from'./notionMentionOptions.js';import {ui}from'./notionUi.js';var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
const ICON = {
|
|
21
|
+
date: "calendar-outline",
|
|
22
|
+
pick_date: "calendar-number-outline",
|
|
23
|
+
user: "person-circle-outline",
|
|
24
|
+
page: "document-text-outline"
|
|
25
|
+
};
|
|
26
|
+
function MentionSheet({
|
|
27
|
+
visible,
|
|
28
|
+
palette,
|
|
29
|
+
pages,
|
|
30
|
+
workspaceId,
|
|
31
|
+
people,
|
|
32
|
+
onPick,
|
|
33
|
+
onClose
|
|
34
|
+
}) {
|
|
35
|
+
const [query, setQuery] = useState("");
|
|
36
|
+
const [remind, setRemind] = useState(false);
|
|
37
|
+
const [picking, setPicking] = useState(false);
|
|
38
|
+
const [dateText, setDateText] = useState("");
|
|
39
|
+
const viewer = useQuery(NATIVE_NOTES_VIEWER, {
|
|
40
|
+
skip: !visible,
|
|
41
|
+
fetchPolicy: "cache-first"
|
|
42
|
+
});
|
|
43
|
+
const [search, {
|
|
44
|
+
data
|
|
45
|
+
}] = useLazyQuery(NATIVE_NOTION_SEARCH, {
|
|
46
|
+
fetchPolicy: "network-only"
|
|
47
|
+
});
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
if (!visible) return;
|
|
50
|
+
setQuery("");
|
|
51
|
+
setRemind(false);
|
|
52
|
+
setPicking(false);
|
|
53
|
+
setDateText("");
|
|
54
|
+
}, [visible]);
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
const q = query.trim();
|
|
57
|
+
if (!visible || q.length < 2) return void 0;
|
|
58
|
+
const t = setTimeout(() => search({
|
|
59
|
+
variables: {
|
|
60
|
+
input: __spreadValues({
|
|
61
|
+
query: q,
|
|
62
|
+
types: ["page"],
|
|
63
|
+
pageSize: 10
|
|
64
|
+
}, workspaceId ? {
|
|
65
|
+
workspaceId
|
|
66
|
+
} : {})
|
|
67
|
+
}
|
|
68
|
+
}), 250);
|
|
69
|
+
return () => clearTimeout(t);
|
|
70
|
+
}, [query, search, visible, workspaceId]);
|
|
71
|
+
const sections = useMemo(() => {
|
|
72
|
+
var _a, _b, _c, _d;
|
|
73
|
+
const q = query.trim().toLowerCase();
|
|
74
|
+
const source = q.length >= 2 ? (_b = (_a = data == null ? void 0 : data.searchBlocks) == null ? void 0 : _a.results) != null ? _b : [] : pages;
|
|
75
|
+
const candidates = source.filter((p) => (p == null ? void 0 : p.id) && !p.inTrash && (p.type === "page" || p.type === "database")).filter((p) => q.length >= 2 || !q || pageTitle(p).toLowerCase().includes(q)).map((p) => __spreadValues({
|
|
76
|
+
id: p.id,
|
|
77
|
+
title: pageTitle(p),
|
|
78
|
+
type: p.type
|
|
79
|
+
}, blockIcon(p) ? {
|
|
80
|
+
icon: blockIcon(p)
|
|
81
|
+
} : {}));
|
|
82
|
+
const me = (_c = viewer.data) == null ? void 0 : _c.notesViewer;
|
|
83
|
+
return buildMentionSections({
|
|
84
|
+
query,
|
|
85
|
+
me: me ? {
|
|
86
|
+
id: me.id,
|
|
87
|
+
name: ((_d = me.name) == null ? void 0 : _d.trim()) || me.email || "Me"
|
|
88
|
+
} : null,
|
|
89
|
+
people,
|
|
90
|
+
pages: candidates
|
|
91
|
+
});
|
|
92
|
+
}, [data, pages, people, query, viewer.data]);
|
|
93
|
+
const pick = (run) => {
|
|
94
|
+
var _a;
|
|
95
|
+
if (!run) return;
|
|
96
|
+
onPick(remind && ((_a = run.mention) == null ? void 0 : _a.type) === "date" ? __spreadProps(__spreadValues({}, run), {
|
|
97
|
+
mention: __spreadProps(__spreadValues({}, run.mention), {
|
|
98
|
+
reminder: true
|
|
99
|
+
})
|
|
100
|
+
}) : run);
|
|
101
|
+
onClose();
|
|
102
|
+
};
|
|
103
|
+
const choose = (opt) => {
|
|
104
|
+
if (opt.kind === "pick_date") {
|
|
105
|
+
setPicking(true);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
pick(mentionRunFor(opt));
|
|
109
|
+
};
|
|
110
|
+
const typedDate = parseTypedDate(dateText);
|
|
111
|
+
return /* @__PURE__ */ jsx(Modal, { visible, animationType: "slide", presentationStyle: "pageSheet", onRequestClose: onClose, children: /* @__PURE__ */ jsxs(View, { style: [ui.flex, {
|
|
112
|
+
backgroundColor: palette.bg
|
|
113
|
+
}], children: [
|
|
114
|
+
/* @__PURE__ */ jsxs(View, { style: [ui.sheetHeader, {
|
|
115
|
+
borderBottomColor: palette.hairline
|
|
116
|
+
}], children: [
|
|
117
|
+
/* @__PURE__ */ jsx(View, { style: [ui.sheetHeaderSide, ui.sheetHeaderLeft] }),
|
|
118
|
+
/* @__PURE__ */ jsx(Text, { style: [ui.sheetHeaderTitle, {
|
|
119
|
+
color: palette.text
|
|
120
|
+
}], children: "Mention" }),
|
|
121
|
+
/* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: onClose, hitSlop: 8, style: ui.sheetHeaderSide, children: /* @__PURE__ */ jsx(Text, { style: [ui.sheetHeaderDone, {
|
|
122
|
+
color: palette.primary
|
|
123
|
+
}], children: "Cancel" }) })
|
|
124
|
+
] }),
|
|
125
|
+
/* @__PURE__ */ jsxs(View, { style: [styles.search, {
|
|
126
|
+
backgroundColor: palette.fill
|
|
127
|
+
}], children: [
|
|
128
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.at, {
|
|
129
|
+
color: palette.textMuted
|
|
130
|
+
}], children: "@" }),
|
|
131
|
+
/* @__PURE__ */ jsx(TextInput, { value: query, onChangeText: setQuery, placeholder: "Search for a date, person or page", placeholderTextColor: palette.textMuted, autoFocus: true, autoCorrect: false, style: [styles.searchInput, {
|
|
132
|
+
color: palette.text
|
|
133
|
+
}] })
|
|
134
|
+
] }),
|
|
135
|
+
/* @__PURE__ */ jsxs(View, { style: [styles.remind, {
|
|
136
|
+
backgroundColor: palette.card
|
|
137
|
+
}], children: [
|
|
138
|
+
/* @__PURE__ */ jsx(Ionicons, { name: "alarm-outline", size: 18, color: palette.text }),
|
|
139
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.remindLabel, {
|
|
140
|
+
color: palette.text
|
|
141
|
+
}], children: "Remind me (dates)" }),
|
|
142
|
+
/* @__PURE__ */ jsx(Switch, { value: remind, onValueChange: setRemind, trackColor: {
|
|
143
|
+
true: palette.primary,
|
|
144
|
+
false: palette.fill
|
|
145
|
+
} })
|
|
146
|
+
] }),
|
|
147
|
+
picking ? /* @__PURE__ */ jsxs(View, { style: [styles.pickDate, {
|
|
148
|
+
backgroundColor: palette.card
|
|
149
|
+
}], children: [
|
|
150
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.sectionTitle, {
|
|
151
|
+
color: palette.textMuted
|
|
152
|
+
}], children: "Pick a date" }),
|
|
153
|
+
/* @__PURE__ */ jsx(TextInput, { value: dateText, onChangeText: setDateText, placeholder: "2027-01-23 or Jan 23 2027", placeholderTextColor: palette.textFaint, autoFocus: true, autoCorrect: false, style: [styles.dateInput, {
|
|
154
|
+
color: palette.text,
|
|
155
|
+
backgroundColor: palette.fill
|
|
156
|
+
}] }),
|
|
157
|
+
/* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", disabled: !typedDate, onPress: () => typedDate && pick(mentionRunFor({
|
|
158
|
+
kind: "pick_date"}, typedDate)), style: [ui.primaryButton, styles.block, {
|
|
159
|
+
backgroundColor: palette.primary
|
|
160
|
+
}, !typedDate && styles.disabled], children: /* @__PURE__ */ jsx(Text, { style: [ui.primaryButtonLabel, {
|
|
161
|
+
color: palette.onPrimary
|
|
162
|
+
}], children: "Insert date" }) })
|
|
163
|
+
] }) : null,
|
|
164
|
+
/* @__PURE__ */ jsx(ScrollView, { keyboardShouldPersistTaps: "handled", contentContainerStyle: styles.list, children: sections.map((section) => /* @__PURE__ */ jsxs(View, { children: [
|
|
165
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.sectionTitle, {
|
|
166
|
+
color: palette.textMuted
|
|
167
|
+
}], children: section.title }),
|
|
168
|
+
/* @__PURE__ */ jsx(View, { style: [ui.group, {
|
|
169
|
+
backgroundColor: palette.card
|
|
170
|
+
}], children: section.options.map((opt, i) => /* @__PURE__ */ jsxs(Pressable, { accessibilityRole: "button", onPress: () => choose(opt), style: ({
|
|
171
|
+
pressed
|
|
172
|
+
}) => [styles.row, pressed && {
|
|
173
|
+
backgroundColor: palette.pressed
|
|
174
|
+
}], children: [
|
|
175
|
+
opt.kind === "page" && opt.page.icon ? /* @__PURE__ */ jsx(Text, { style: styles.emoji, children: opt.page.icon }) : /* @__PURE__ */ jsx(Ionicons, { name: ICON[opt.kind], size: 19, color: palette.textMuted }),
|
|
176
|
+
/* @__PURE__ */ jsxs(View, { style: [styles.rowBody, i < section.options.length - 1 && ui.hairline, {
|
|
177
|
+
borderBottomColor: palette.hairline
|
|
178
|
+
}], children: [
|
|
179
|
+
/* @__PURE__ */ jsx(Text, { numberOfLines: 1, style: [styles.rowLabel, {
|
|
180
|
+
color: palette.text
|
|
181
|
+
}], children: opt.label }),
|
|
182
|
+
opt.kind === "date" && opt.hint ? /* @__PURE__ */ jsx(Text, { style: [styles.hint, {
|
|
183
|
+
color: palette.textMuted
|
|
184
|
+
}], children: opt.hint }) : null
|
|
185
|
+
] })
|
|
186
|
+
] }, opt.key)) })
|
|
187
|
+
] }, section.id)) })
|
|
188
|
+
] }) });
|
|
189
|
+
}
|
|
190
|
+
const styles = StyleSheet.create({
|
|
191
|
+
search: {
|
|
192
|
+
flexDirection: "row",
|
|
193
|
+
alignItems: "center",
|
|
194
|
+
gap: 6,
|
|
195
|
+
height: 44,
|
|
196
|
+
margin: 16,
|
|
197
|
+
marginBottom: 8,
|
|
198
|
+
paddingHorizontal: 12,
|
|
199
|
+
borderRadius: 12
|
|
200
|
+
},
|
|
201
|
+
at: {
|
|
202
|
+
fontSize: 18,
|
|
203
|
+
fontWeight: "700"
|
|
204
|
+
},
|
|
205
|
+
searchInput: {
|
|
206
|
+
flex: 1,
|
|
207
|
+
fontSize: 16,
|
|
208
|
+
paddingVertical: 0
|
|
209
|
+
},
|
|
210
|
+
remind: {
|
|
211
|
+
flexDirection: "row",
|
|
212
|
+
alignItems: "center",
|
|
213
|
+
gap: 10,
|
|
214
|
+
marginHorizontal: 16,
|
|
215
|
+
paddingHorizontal: 14,
|
|
216
|
+
paddingVertical: 8,
|
|
217
|
+
borderRadius: 12
|
|
218
|
+
},
|
|
219
|
+
remindLabel: {
|
|
220
|
+
flex: 1,
|
|
221
|
+
fontSize: 15
|
|
222
|
+
},
|
|
223
|
+
pickDate: {
|
|
224
|
+
margin: 16,
|
|
225
|
+
marginBottom: 0,
|
|
226
|
+
padding: 14,
|
|
227
|
+
borderRadius: 14,
|
|
228
|
+
gap: 4
|
|
229
|
+
},
|
|
230
|
+
dateInput: {
|
|
231
|
+
height: 44,
|
|
232
|
+
paddingHorizontal: 12,
|
|
233
|
+
borderRadius: 10,
|
|
234
|
+
fontSize: 16
|
|
235
|
+
},
|
|
236
|
+
block: {
|
|
237
|
+
alignSelf: "stretch"
|
|
238
|
+
},
|
|
239
|
+
disabled: {
|
|
240
|
+
opacity: 0.45
|
|
241
|
+
},
|
|
242
|
+
list: {
|
|
243
|
+
padding: 16,
|
|
244
|
+
paddingBottom: 48
|
|
245
|
+
},
|
|
246
|
+
sectionTitle: {
|
|
247
|
+
fontSize: 13,
|
|
248
|
+
fontWeight: "600",
|
|
249
|
+
marginTop: 12,
|
|
250
|
+
marginBottom: 8,
|
|
251
|
+
marginLeft: 4
|
|
252
|
+
},
|
|
253
|
+
row: {
|
|
254
|
+
flexDirection: "row",
|
|
255
|
+
alignItems: "center",
|
|
256
|
+
gap: 12,
|
|
257
|
+
paddingLeft: 14
|
|
258
|
+
},
|
|
259
|
+
rowBody: {
|
|
260
|
+
flex: 1,
|
|
261
|
+
flexDirection: "row",
|
|
262
|
+
alignItems: "center",
|
|
263
|
+
gap: 8,
|
|
264
|
+
paddingRight: 14,
|
|
265
|
+
minHeight: 48
|
|
266
|
+
},
|
|
267
|
+
rowLabel: {
|
|
268
|
+
flex: 1,
|
|
269
|
+
fontSize: 16
|
|
270
|
+
},
|
|
271
|
+
hint: {
|
|
272
|
+
fontSize: 13
|
|
273
|
+
},
|
|
274
|
+
emoji: {
|
|
275
|
+
fontSize: 18,
|
|
276
|
+
width: 20,
|
|
277
|
+
textAlign: "center"
|
|
278
|
+
}
|
|
279
|
+
});export{MentionSheet};//# sourceMappingURL=NotionMentionSheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotionMentionSheet.js","sources":["../../../src/features/notion/NotionMentionSheet.tsx"],"sourcesContent":["/**\n * The web `@` mention picker (MentionPicker) as a sheet: Date (Today / Tomorrow / Next week /\n * a typed date / Pick a date… with \"Remind me\", which feeds the Inbox), People (you, names\n * used before, a typed name) and Pages. Sections and the inserted run come from the ported\n * web utils (notionMentionOptions), so a mention made here reads the same on the web.\n */\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { Modal, Pressable, ScrollView, StyleSheet, Switch, Text, TextInput, View } from 'react-native';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useLazyQuery, useQuery } from '@apollo/client';\nimport { NATIVE_NOTES_VIEWER, NATIVE_NOTION_SEARCH } from './notionDocuments';\nimport { pageTitle, blockIcon, type NotionBlock } from './notionBlocks';\nimport {\n buildMentionSections,\n mentionRunFor,\n parseTypedDate,\n type MentionOption,\n type MentionPageCandidate,\n} from './notionMentionOptions';\nimport type { RichRun } from './notionRichTitle';\nimport type { NotionPalette } from './notionTheme';\nimport { ui } from './notionUi';\n\ntype Palette = NotionPalette;\n\nconst ICON: Record<MentionOption['kind'], React.ComponentProps<typeof Ionicons>['name']> = {\n date: 'calendar-outline',\n pick_date: 'calendar-number-outline',\n user: 'person-circle-outline',\n page: 'document-text-outline',\n};\n\nexport function MentionSheet({\n visible,\n palette,\n pages,\n workspaceId,\n people,\n onPick,\n onClose,\n}: {\n visible: boolean;\n palette: Palette;\n /** Pages to offer before searching (the workspace's top-level pages). */\n pages: NotionBlock[];\n workspaceId: string | null;\n /** Names already used in this page (web: person-property names). */\n people: string[];\n onPick: (run: RichRun) => void;\n onClose: () => void;\n}) {\n const [query, setQuery] = useState('');\n const [remind, setRemind] = useState(false);\n const [picking, setPicking] = useState(false);\n const [dateText, setDateText] = useState('');\n const viewer = useQuery<{ notesViewer?: { id: string; name?: string | null; email?: string | null } | null }>(\n NATIVE_NOTES_VIEWER,\n { skip: !visible, fetchPolicy: 'cache-first' },\n );\n const [search, { data }] = useLazyQuery<{ searchBlocks?: { results?: NotionBlock[] | null } }>(\n NATIVE_NOTION_SEARCH,\n {\n fetchPolicy: 'network-only',\n },\n );\n\n useEffect(() => {\n if (!visible) return;\n setQuery('');\n setRemind(false);\n setPicking(false);\n setDateText('');\n }, [visible]);\n\n useEffect(() => {\n const q = query.trim();\n if (!visible || q.length < 2) return undefined;\n const t = setTimeout(\n () =>\n search({\n variables: {\n input: { query: q, types: ['page'], pageSize: 10, ...(workspaceId ? { workspaceId } : {}) },\n },\n }),\n 250,\n );\n return () => clearTimeout(t);\n }, [query, search, visible, workspaceId]);\n\n const sections = useMemo(() => {\n const q = query.trim().toLowerCase();\n const source = q.length >= 2 ? (data?.searchBlocks?.results ?? []) : pages;\n const candidates: MentionPageCandidate[] = source\n .filter((p) => p?.id && !p.inTrash && (p.type === 'page' || p.type === 'database'))\n .filter((p) => q.length >= 2 || !q || pageTitle(p).toLowerCase().includes(q))\n .map((p) => ({\n id: p.id,\n title: pageTitle(p),\n type: p.type,\n ...(blockIcon(p) ? { icon: blockIcon(p)! } : {}),\n }));\n const me = viewer.data?.notesViewer;\n return buildMentionSections({\n query,\n me: me ? { id: me.id, name: me.name?.trim() || me.email || 'Me' } : null,\n people,\n pages: candidates,\n });\n }, [data, pages, people, query, viewer.data]);\n\n const pick = (run: RichRun | null) => {\n if (!run) return;\n onPick(remind && run.mention?.type === 'date' ? { ...run, mention: { ...run.mention, reminder: true } } : run);\n onClose();\n };\n\n const choose = (opt: MentionOption) => {\n if (opt.kind === 'pick_date') {\n setPicking(true);\n return;\n }\n pick(mentionRunFor(opt));\n };\n\n const typedDate = parseTypedDate(dateText);\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 }]}>Mention</Text>\n <Pressable accessibilityRole=\"button\" onPress={onClose} hitSlop={8} style={ui.sheetHeaderSide}>\n <Text style={[ui.sheetHeaderDone, { color: palette.primary }]}>Cancel</Text>\n </Pressable>\n </View>\n <View style={[styles.search, { backgroundColor: palette.fill }]}>\n <Text style={[styles.at, { color: palette.textMuted }]}>@</Text>\n <TextInput\n value={query}\n onChangeText={setQuery}\n placeholder=\"Search for a date, person or page\"\n placeholderTextColor={palette.textMuted}\n autoFocus\n autoCorrect={false}\n style={[styles.searchInput, { color: palette.text }]}\n />\n </View>\n <View style={[styles.remind, { backgroundColor: palette.card }]}>\n <Ionicons name=\"alarm-outline\" size={18} color={palette.text} />\n <Text style={[styles.remindLabel, { color: palette.text }]}>Remind me (dates)</Text>\n <Switch\n value={remind}\n onValueChange={setRemind}\n trackColor={{ true: palette.primary, false: palette.fill }}\n />\n </View>\n {picking ? (\n <View style={[styles.pickDate, { backgroundColor: palette.card }]}>\n <Text style={[styles.sectionTitle, { color: palette.textMuted }]}>Pick a date</Text>\n <TextInput\n value={dateText}\n onChangeText={setDateText}\n placeholder=\"2027-01-23 or Jan 23 2027\"\n placeholderTextColor={palette.textFaint}\n autoFocus\n autoCorrect={false}\n style={[styles.dateInput, { color: palette.text, backgroundColor: palette.fill }]}\n />\n <Pressable\n accessibilityRole=\"button\"\n disabled={!typedDate}\n onPress={() =>\n typedDate &&\n pick(mentionRunFor({ kind: 'pick_date', key: 'date:pick', label: '' }, typedDate))\n }\n style={[\n ui.primaryButton,\n styles.block,\n { backgroundColor: palette.primary },\n !typedDate && styles.disabled,\n ]}\n >\n <Text style={[ui.primaryButtonLabel, { color: palette.onPrimary }]}>Insert date</Text>\n </Pressable>\n </View>\n ) : null}\n <ScrollView keyboardShouldPersistTaps=\"handled\" contentContainerStyle={styles.list}>\n {sections.map((section) => (\n <View key={section.id}>\n <Text style={[styles.sectionTitle, { color: palette.textMuted }]}>{section.title}</Text>\n <View style={[ui.group, { backgroundColor: palette.card }]}>\n {section.options.map((opt, i) => (\n <Pressable\n key={opt.key}\n accessibilityRole=\"button\"\n onPress={() => choose(opt)}\n style={({ pressed }) => [\n styles.row,\n pressed && { backgroundColor: palette.pressed },\n ]}\n >\n {opt.kind === 'page' && opt.page.icon ? (\n <Text style={styles.emoji}>{opt.page.icon}</Text>\n ) : (\n <Ionicons name={ICON[opt.kind]} size={19} color={palette.textMuted} />\n )}\n <View\n style={[\n styles.rowBody,\n i < section.options.length - 1 && ui.hairline,\n { borderBottomColor: palette.hairline },\n ]}\n >\n <Text numberOfLines={1} style={[styles.rowLabel, { color: palette.text }]}>\n {opt.label}\n </Text>\n {opt.kind === 'date' && opt.hint ? (\n <Text style={[styles.hint, { color: palette.textMuted }]}>\n {opt.hint}\n </Text>\n ) : null}\n </View>\n </Pressable>\n ))}\n </View>\n </View>\n ))}\n </ScrollView>\n </View>\n </Modal>\n );\n}\n\nconst styles = StyleSheet.create({\n search: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n height: 44,\n margin: 16,\n marginBottom: 8,\n paddingHorizontal: 12,\n borderRadius: 12,\n },\n at: { fontSize: 18, fontWeight: '700' },\n searchInput: { flex: 1, fontSize: 16, paddingVertical: 0 },\n remind: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 10,\n marginHorizontal: 16,\n paddingHorizontal: 14,\n paddingVertical: 8,\n borderRadius: 12,\n },\n remindLabel: { flex: 1, fontSize: 15 },\n pickDate: { margin: 16, marginBottom: 0, padding: 14, borderRadius: 14, gap: 4 },\n dateInput: { height: 44, paddingHorizontal: 12, borderRadius: 10, fontSize: 16 },\n block: { alignSelf: 'stretch' },\n disabled: { opacity: 0.45 },\n list: { padding: 16, paddingBottom: 48 },\n sectionTitle: { fontSize: 13, fontWeight: '600', marginTop: 12, marginBottom: 8, marginLeft: 4 },\n row: { flexDirection: 'row', alignItems: 'center', gap: 12, paddingLeft: 14 },\n rowBody: { flex: 1, flexDirection: 'row', alignItems: 'center', gap: 8, paddingRight: 14, minHeight: 48 },\n rowLabel: { flex: 1, fontSize: 16 },\n hint: { fontSize: 13 },\n emoji: { fontSize: 18, width: 20, textAlign: 'center' },\n});\n"],"names":[],"mappings":"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"}
|