@adminide-stack/yantra-mobile 12.0.137 → 12.0.139
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/components/CustomDrawer.js +17 -1
- package/lib/components/CustomDrawer.js.map +1 -1
- package/lib/compute.js +106 -1
- package/lib/compute.js.map +1 -1
- package/lib/config/env-config.js +12 -0
- package/lib/config/env-config.js.map +1 -1
- package/lib/features/chat/ChatTranscript.js +2 -2
- package/lib/features/chat/ChatTranscript.js.map +1 -1
- package/lib/features/chat/surfaceNotes.js +4 -0
- package/lib/features/chat/surfaceNotes.js.map +1 -0
- package/lib/features/dictate/backgroundRecording.js.map +1 -1
- package/lib/features/dictate/useDictationRecorder.js +42 -1
- package/lib/features/dictate/useDictationRecorder.js.map +1 -1
- package/lib/features/home/useHomeWeather.js +85 -0
- package/lib/features/home/useHomeWeather.js.map +1 -0
- package/lib/features/home/weather.js +139 -0
- package/lib/features/home/weather.js.map +1 -0
- package/lib/features/notion/NotionPageView.js +819 -0
- package/lib/features/notion/NotionPageView.js.map +1 -0
- package/lib/features/notion/NotionSheets.js +452 -0
- package/lib/features/notion/NotionSheets.js.map +1 -0
- package/lib/features/notion/NotionTrashSheet.js +415 -0
- package/lib/features/notion/NotionTrashSheet.js.map +1 -0
- package/lib/features/notion/NotionWorkspaceView.js +837 -0
- package/lib/features/notion/NotionWorkspaceView.js.map +1 -0
- package/lib/features/notion/notionBlocks.js +203 -0
- package/lib/features/notion/notionBlocks.js.map +1 -0
- package/lib/features/notion/notionDocuments.js +182 -0
- package/lib/features/notion/notionDocuments.js.map +1 -0
- package/lib/features/notion/notionEditorModel.js +180 -0
- package/lib/features/notion/notionEditorModel.js.map +1 -0
- package/lib/features/notion/notionTemplates.js +406 -0
- package/lib/features/notion/notionTemplates.js.map +1 -0
- package/lib/features/notion/notionTheme.js +34 -0
- package/lib/features/notion/notionTheme.js.map +1 -0
- package/lib/features/notion/notionTrash.js +100 -0
- package/lib/features/notion/notionTrash.js.map +1 -0
- package/lib/features/notion/notionUi.js +310 -0
- package/lib/features/notion/notionUi.js.map +1 -0
- package/lib/features/notion/useNotionWorkspace.js +181 -0
- package/lib/features/notion/useNotionWorkspace.js.map +1 -0
- package/lib/features/webbuilder/buildFragments.js +15 -9
- package/lib/features/webbuilder/buildFragments.js.map +1 -1
- package/lib/features/webbuilder/buildJob.js +3 -3
- package/lib/features/webbuilder/buildJob.js.map +1 -1
- package/lib/features/webbuilder/publicSandboxDomain.js +5 -0
- package/lib/features/webbuilder/publicSandboxDomain.js.map +1 -0
- package/lib/features/webbuilder/sandboxPublicHost.js +74 -0
- package/lib/features/webbuilder/sandboxPublicHost.js.map +1 -0
- package/lib/features/webbuilder/siteAddress.js +2 -1
- package/lib/features/webbuilder/siteAddress.js.map +1 -1
- package/lib/features/webbuilder/webbuilderPrompts.js +3 -2
- package/lib/features/webbuilder/webbuilderPrompts.js.map +1 -1
- package/lib/features/webbuilder/workflow.js +2 -2
- package/lib/features/webbuilder/workflow.js.map +1 -1
- package/lib/hooks/useChatApi.js +15 -3
- package/lib/hooks/useChatApi.js.map +1 -1
- package/lib/hooks/usePrerequisiteIds.js +15 -2
- package/lib/hooks/usePrerequisiteIds.js.map +1 -1
- package/lib/routes.json +107 -0
- package/lib/screens/Home/HomeScreen.js +20 -5
- package/lib/screens/Home/HomeScreen.js.map +1 -1
- package/lib/screens/Home/components/HomeHero.js +117 -0
- package/lib/screens/Home/components/HomeHero.js.map +1 -0
- package/lib/screens/Home/components/HomeSuggestions.js +108 -85
- package/lib/screens/Home/components/HomeSuggestions.js.map +1 -1
- package/lib/screens/Home/components/HomeWash.js +44 -0
- package/lib/screens/Home/components/HomeWash.js.map +1 -0
- package/lib/screens/Home/components/homeCatalog.js +125 -0
- package/lib/screens/Home/components/homeCatalog.js.map +1 -0
- package/lib/screens/Notion/index.js +18 -0
- package/lib/screens/Notion/index.js.map +1 -0
- package/lib/screens/NotionPage/index.js +19 -0
- package/lib/screens/NotionPage/index.js.map +1 -0
- package/lib/screens/WebBuilderNative/sandboxProxyApi.js +2 -2
- package/lib/screens/WebBuilderNative/sandboxProxyApi.js.map +1 -1
- package/lib/screens/WebBuilderNative/useRestoredSandboxes.js +16 -8
- package/lib/screens/WebBuilderNative/useRestoredSandboxes.js.map +1 -1
- package/lib/screens/WebBuilderNative/useWebBuilderGallery.js +6 -5
- package/lib/screens/WebBuilderNative/useWebBuilderGallery.js.map +1 -1
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js +5 -4
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
- package/lib/screens/WebBuilderNative/webbuilderTransport.js +4 -3
- package/lib/screens/WebBuilderNative/webbuilderTransport.js.map +1 -1
- package/lib/services/savedWorkspace.js +44 -0
- package/lib/services/savedWorkspace.js.map +1 -0
- package/lib/theme/mobileTokens.js +1 -0
- package/lib/theme/mobileTokens.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotionSheets.js","sources":["../../../src/features/notion/NotionSheets.tsx"],"sourcesContent":["/**\n * The web Notion sidebar's screens as native page sheets: Inbox, Meetings,\n * All pages, Templates and Trash. Each mirrors its web container\n * (forms-stack notion-api/browser/src/containers) on the same GraphQL.\n */\nimport React, { useCallback, useMemo, useState } from 'react';\nimport {\n ActivityIndicator,\n Alert,\n FlatList,\n Pressable,\n RefreshControl,\n ScrollView,\n SectionList,\n StyleSheet,\n Text,\n TextInput,\n View,\n} from 'react-native';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useApolloClient, useQuery } from '@apollo/client';\nimport {\n NATIVE_NOTION_CHILDREN,\n NATIVE_NOTION_INBOX,\n NATIVE_NOTION_MARK_INBOX_READ,\n NATIVE_NOTION_PAGE_TREE,\n NATIVE_NOTION_RESTORE_BLOCK,\n NATIVE_NOTION_TRASH,\n} from './notionDocuments';\nimport {\n MEETING_STATUS_LABEL,\n editedLabel,\n formatMeetingWhen,\n groupMeetings,\n pageTitle,\n type MeetingRow,\n type MeetingStatus,\n type NotionBlock,\n type NotionBlockTree,\n} from './notionBlocks';\nimport {\n BUILT_IN_TEMPLATES,\n TEMPLATE_CATEGORIES,\n filterTemplates,\n templateRootFromTree,\n userTemplateEntry,\n type PageTemplate,\n} from './notionTemplates';\nimport type { NotionPalette } from './notionTheme';\nimport { EmptyState, ListRow, PageRow, Pill, SectionHeader, ui } from './notionUi';\nimport type { NotionWorkspaceState } from './useNotionWorkspace';\n\ntype Palette = NotionPalette;\n\nfunction Loading({ palette }: { palette: Palette }) {\n return (\n <View style={styles.loading}>\n <ActivityIndicator color={palette.textMuted} />\n </View>\n );\n}\n\n/** Rows rendered as one rounded group inside a FlatList. */\nfunction groupedItemStyle(palette: Palette, index: number, count: number) {\n return [\n { backgroundColor: palette.card },\n index === 0 && styles.groupTop,\n index === count - 1 && styles.groupBottom,\n ];\n}\n\nfunction SearchField({\n palette,\n value,\n onChange,\n placeholder,\n}: {\n palette: Palette;\n value: string;\n onChange: (v: string) => void;\n placeholder: string;\n}) {\n return (\n <View style={[styles.searchField, { backgroundColor: palette.fill }]}>\n <Ionicons name=\"search\" size={17} color={palette.textMuted} />\n <TextInput\n value={value}\n onChangeText={onChange}\n placeholder={placeholder}\n placeholderTextColor={palette.textMuted}\n autoCorrect={false}\n clearButtonMode=\"while-editing\"\n style={[styles.searchInput, { color: palette.text }]}\n />\n </View>\n );\n}\n\nfunction Chips<T extends string>({\n palette,\n options,\n value,\n onChange,\n}: {\n palette: Palette;\n options: Array<{ id: T; label: string }>;\n value: T;\n onChange: (v: T) => void;\n}) {\n return (\n <ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={styles.chips}>\n {options.map((o) => {\n const selected = o.id === value;\n return (\n <Pressable\n key={o.id}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected }}\n onPress={() => onChange(o.id)}\n style={[styles.chip, { backgroundColor: selected ? palette.text : palette.fill }]}\n >\n <Text style={[styles.chipLabel, { color: selected ? palette.card : palette.text }]}>\n {o.label}\n </Text>\n </Pressable>\n );\n })}\n </ScrollView>\n );\n}\n\n// ============================================================================\n// INBOX\n// ============================================================================\n\ninterface InboxItem {\n id: string;\n kind: string;\n pageId?: string | null;\n blockId: string;\n text: string;\n createdAt: string;\n dueAt?: string | null;\n showAt: string;\n readAt?: string | null;\n}\n\nconst INBOX_KIND: Record<string, { icon: React.ComponentProps<typeof Ionicons>['name']; label: string }> = {\n mention: { icon: 'at', label: 'Mentioned you' },\n reminder: { icon: 'alarm-outline', label: 'Reminder' },\n reply: { icon: 'return-down-forward', label: 'Replied' },\n comment: { icon: 'chatbubble-outline', label: 'Commented' },\n};\n\nexport function InboxSheet({ palette, onOpenPage }: { palette: Palette; onOpenPage: (id: string) => void }) {\n const client = useApolloClient();\n const { data, loading, error, refetch } = useQuery<{ notesInbox?: InboxItem[] | null }>(NATIVE_NOTION_INBOX, {\n variables: { limit: 50 },\n fetchPolicy: 'network-only',\n });\n const items = data?.notesInbox ?? [];\n const unread = items.filter((i) => !i.readAt).length;\n\n const markRead = useCallback(\n async (opts: { ids?: string[]; all?: boolean }) => {\n try {\n await client.mutate({ mutation: NATIVE_NOTION_MARK_INBOX_READ, variables: opts });\n await Promise.all([refetch(), client.refetchQueries({ include: ['NativeNotionInboxUnread'] })]);\n } catch {\n // Read state is cosmetic; the next refresh shows the truth.\n }\n },\n [client, refetch],\n );\n\n if (loading && !data) return <Loading palette={palette} />;\n return (\n <FlatList\n data={items}\n keyExtractor={(i) => i.id}\n contentContainerStyle={styles.content}\n refreshControl={<RefreshControl refreshing={false} onRefresh={() => refetch()} />}\n ListHeaderComponent={\n unread ? (\n <View style={styles.inboxHeader}>\n <Text style={[styles.note, { color: palette.textMuted }]}>{`${unread} unread`}</Text>\n <Pressable accessibilityRole=\"button\" onPress={() => markRead({ all: true })} hitSlop={8}>\n <Text style={[styles.link, { color: palette.primary }]}>Mark all read</Text>\n </Pressable>\n </View>\n ) : null\n }\n ListEmptyComponent={\n <EmptyState\n palette={palette}\n icon={error ? 'cloud-offline-outline' : 'notifications-outline'}\n title={error ? \"Couldn't load your inbox\" : \"You're all caught up\"}\n text={error ? 'Pull down to try again.' : 'Mentions of you and your @date reminders show up here.'}\n />\n }\n renderItem={({ item, index }) => {\n const kind = INBOX_KIND[item.kind] ?? INBOX_KIND.mention;\n const when = editedLabel(item.dueAt ?? item.showAt ?? item.createdAt).replace('Edited ', '');\n return (\n <View style={groupedItemStyle(palette, index, items.length)}>\n <ListRow\n palette={palette}\n icon={kind.icon}\n iconColor={item.readAt ? palette.textMuted : palette.primary}\n iconBg={item.readAt ? palette.fill : palette.primarySoft}\n title={item.text || kind.label}\n subtitle={`${kind.label}${when ? ` · ${when}` : ''}`}\n divider={index < items.length - 1}\n onPress={() => {\n if (!item.readAt) markRead({ ids: [item.id] });\n onOpenPage(item.pageId || item.blockId);\n }}\n trailing={\n item.readAt ? undefined : (\n <View style={[styles.unreadDot, { backgroundColor: palette.primary }]} />\n )\n }\n />\n </View>\n );\n }}\n />\n );\n}\n\n// ============================================================================\n// MEETINGS\n// ============================================================================\n\nconst STATUS_COLORS: Record<MeetingStatus, { fg: string; bg: string }> = {\n scheduled: { fg: '#0369a1', bg: 'rgba(14,165,233,0.12)' },\n live: { fg: '#e11d48', bg: 'rgba(244,63,94,0.14)' },\n ended: { fg: '#78716c', bg: 'rgba(120,113,108,0.12)' },\n};\n\nexport function MeetingRowView({\n row,\n palette,\n onPress,\n divider,\n}: {\n row: MeetingRow;\n palette: Palette;\n onPress: () => void;\n divider?: boolean;\n}) {\n const status = STATUS_COLORS[row.status];\n const who = row.attendees.length ? ` · ${row.attendees.join(', ')}` : '';\n return (\n <ListRow\n palette={palette}\n emoji={row.icon}\n icon=\"calendar-outline\"\n title={row.title}\n subtitle={`${formatMeetingWhen(row.startsAt)}${who}`}\n onPress={onPress}\n divider={divider}\n trailing={<Pill label={MEETING_STATUS_LABEL[row.status]} color={status.fg} bg={status.bg} />}\n />\n );\n}\n\nexport function MeetingsSheet({\n palette,\n notion,\n onOpenPage,\n}: {\n palette: Palette;\n notion: NotionWorkspaceState;\n onOpenPage: (id: string) => void;\n}) {\n const [creating, setCreating] = useState(false);\n const sections = useMemo(() => {\n const g = groupMeetings(notion.meetings);\n return [\n { title: 'Today', data: g.today },\n { title: 'Upcoming', data: g.upcoming },\n { title: 'Past', data: g.past },\n ].filter((s) => s.data.length);\n }, [notion.meetings]);\n\n const newMeeting = async () => {\n setCreating(true);\n try {\n const created = await notion.createMeeting();\n if (created?.id) onOpenPage(created.id);\n } catch (err) {\n Alert.alert(\"Couldn't create the meeting\", err instanceof Error ? err.message : undefined);\n } finally {\n setCreating(false);\n }\n };\n\n if (!sections.length) {\n return (\n <ScrollView contentContainerStyle={styles.content}>\n <EmptyState\n palette={palette}\n icon=\"calendar-outline\"\n title=\"No meetings yet\"\n text=\"A meeting page holds the agenda, attendees and AI meeting notes.\"\n action={{ label: 'New meeting', onPress: newMeeting, busy: creating }}\n />\n </ScrollView>\n );\n }\n return (\n <SectionList\n sections={sections}\n keyExtractor={(r) => r.id}\n contentContainerStyle={styles.content}\n stickySectionHeadersEnabled={false}\n ListHeaderComponent={\n <Pressable\n accessibilityRole=\"button\"\n onPress={newMeeting}\n disabled={creating}\n style={({ pressed }) => [\n styles.wideButton,\n { backgroundColor: palette.primarySoft },\n pressed && ui.pressedScale,\n ]}\n >\n {creating ? (\n <ActivityIndicator size=\"small\" color={palette.primary} />\n ) : (\n <>\n <Ionicons name=\"add\" size={18} color={palette.primary} />\n <Text style={[styles.wideButtonLabel, { color: palette.primary }]}>New meeting</Text>\n </>\n )}\n </Pressable>\n }\n renderSectionHeader={({ section }) => (\n <SectionHeader label={section.title} count={section.data.length} palette={palette} />\n )}\n renderItem={({ item, index, section }) => (\n <View style={groupedItemStyle(palette, index, section.data.length)}>\n <MeetingRowView\n row={item}\n palette={palette}\n onPress={() => onOpenPage(item.id)}\n divider={index < section.data.length - 1}\n />\n </View>\n )}\n />\n );\n}\n\n// ============================================================================\n// ALL PAGES\n// ============================================================================\n\ntype PageSort = 'edited' | 'title';\n\nexport function AllPagesSheet({\n palette,\n notion,\n onOpenPage,\n}: {\n palette: Palette;\n notion: NotionWorkspaceState;\n onOpenPage: (id: string) => void;\n}) {\n const [filter, setFilter] = useState('');\n const [sort, setSort] = useState<PageSort>('edited');\n const rows = useMemo(() => {\n const q = filter.trim().toLowerCase();\n const list = notion.pages.filter((p) => !q || pageTitle(p).toLowerCase().includes(q));\n return sort === 'title' ? [...list].sort((a, b) => pageTitle(a).localeCompare(pageTitle(b))) : list;\n }, [filter, notion.pages, sort]);\n\n return (\n <FlatList\n data={rows}\n keyExtractor={(p) => p.id}\n keyboardShouldPersistTaps=\"handled\"\n contentContainerStyle={styles.content}\n ListHeaderComponent={\n <View style={styles.toolbar}>\n <SearchField palette={palette} value={filter} onChange={setFilter} placeholder=\"Filter by title\" />\n <Chips<PageSort>\n palette={palette}\n options={[\n { id: 'edited', label: 'Last edited' },\n { id: 'title', label: 'Title A–Z' },\n ]}\n value={sort}\n onChange={setSort}\n />\n </View>\n }\n ListEmptyComponent={\n <EmptyState\n palette={palette}\n icon=\"documents-outline\"\n title={filter.trim() ? 'No matching pages' : 'No pages yet'}\n text={filter.trim() ? 'Try a different title.' : 'Pages you create show up here.'}\n />\n }\n renderItem={({ item, index }) => (\n <View style={groupedItemStyle(palette, index, rows.length)}>\n <PageRow\n page={item}\n palette={palette}\n onPress={() => onOpenPage(item.id)}\n divider={index < rows.length - 1}\n />\n </View>\n )}\n />\n );\n}\n\n// ============================================================================\n// TEMPLATES\n// ============================================================================\n\ntype TemplateCategoryId = (typeof TEMPLATE_CATEGORIES)[number]['id'];\n\nexport function TemplatesSheet({\n palette,\n notion,\n onOpenPage,\n}: {\n palette: Palette;\n notion: NotionWorkspaceState;\n onOpenPage: (id: string) => void;\n}) {\n const client = useApolloClient();\n const [category, setCategory] = useState<TemplateCategoryId>('all');\n const [query, setQuery] = useState('');\n const [using, setUsing] = useState<string | null>(null);\n\n // \"My templates\": pages saved under the workspace's hidden template library page.\n const libraryQuery = useQuery<{ getBlockChildren?: { results?: NotionBlock[] | null } | null }>(\n NATIVE_NOTION_CHILDREN,\n {\n variables: { blockId: notion.templateLibraryId ?? '', pageSize: 100 },\n skip: !notion.templateLibraryId,\n fetchPolicy: 'cache-and-network',\n },\n );\n const mine = useMemo(\n () =>\n (libraryQuery.data?.getBlockChildren?.results ?? [])\n .filter((b) => !b.inTrash && (b.type === 'page' || b.type === 'database'))\n .map(userTemplateEntry),\n [libraryQuery.data],\n );\n\n const all = useMemo(() => [...BUILT_IN_TEMPLATES, ...mine], [mine]);\n const shown = useMemo(() => filterTemplates(all, category, query), [all, category, query]);\n const sections = useMemo(() => {\n if (category !== 'all') return [{ title: '', data: shown }];\n return TEMPLATE_CATEGORIES.filter((c) => c.id !== 'all')\n .map((c) => ({ title: c.label, data: shown.filter((t) => t.category === c.id) }))\n .filter((s) => s.data.length);\n }, [category, shown]);\n\n const use = async (template: PageTemplate) => {\n if (!notion.workspace) {\n Alert.alert('Create a workspace first', 'Templates create pages inside a workspace.');\n return;\n }\n setUsing(template.id);\n try {\n let root = template.root;\n if (template.sourceBlockId) {\n const res = await client.query<{ getBlockTree?: NotionBlockTree | null }>({\n query: NATIVE_NOTION_PAGE_TREE,\n variables: { input: { blockId: template.sourceBlockId, includeChildren: true, maxDepth: 5 } },\n fetchPolicy: 'network-only',\n });\n const tree = res.data?.getBlockTree;\n if (!tree) throw new Error('Template not found');\n root = templateRootFromTree(tree as Parameters<typeof templateRootFromTree>[0]);\n }\n const created = await notion.createFromTemplate({ root });\n if (created?.failedRows) {\n Alert.alert('Some rows were not added', `${created.failedRows} database row(s) could not be created.`);\n }\n if (created?.id) onOpenPage(created.id);\n } catch (err) {\n Alert.alert(\"Couldn't use this template\", err instanceof Error ? err.message : undefined);\n } finally {\n setUsing(null);\n }\n };\n\n return (\n <SectionList\n sections={sections}\n keyExtractor={(t) => t.id}\n keyboardShouldPersistTaps=\"handled\"\n contentContainerStyle={styles.content}\n stickySectionHeadersEnabled={false}\n ListHeaderComponent={\n <View style={styles.toolbar}>\n <Text style={[styles.note, { color: palette.textMuted }]}>\n Start a page from a template, or save any page as your own from the web.\n </Text>\n <SearchField palette={palette} value={query} onChange={setQuery} placeholder=\"Search templates\" />\n <Chips<TemplateCategoryId>\n palette={palette}\n options={TEMPLATE_CATEGORIES}\n value={category}\n onChange={setCategory}\n />\n </View>\n }\n ListEmptyComponent={\n <EmptyState\n palette={palette}\n icon=\"albums-outline\"\n title={category === 'mine' ? 'No saved templates' : 'No matching templates'}\n text={\n category === 'mine'\n ? 'Save a page as a template from its ••• menu on the web.'\n : 'Try another search or category.'\n }\n />\n }\n renderSectionHeader={({ section }) =>\n section.title ? <SectionHeader label={section.title} palette={palette} /> : null\n }\n renderItem={({ item }) => (\n <TemplateCard\n template={item}\n palette={palette}\n busy={using === item.id}\n disabled={Boolean(using)}\n onUse={() => use(item)}\n />\n )}\n />\n );\n}\n\nfunction TemplateCard({\n template,\n palette,\n busy,\n disabled,\n onUse,\n}: {\n template: PageTemplate;\n palette: Palette;\n busy: boolean;\n disabled: boolean;\n onUse: () => void;\n}) {\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`Use template ${template.name}`}\n onPress={onUse}\n disabled={disabled}\n style={({ pressed }) => [\n styles.templateCard,\n { backgroundColor: pressed ? palette.pressed : palette.card },\n ui.cardShadow,\n ]}\n >\n <View style={[styles.templateIcon, { backgroundColor: palette.fill }]}>\n <Text style={styles.templateEmoji}>{template.icon}</Text>\n </View>\n <View style={ui.flex}>\n <Text numberOfLines={1} style={[styles.templateName, { color: palette.text }]}>\n {template.name}\n </Text>\n <Text numberOfLines={2} style={[styles.templateDesc, { color: palette.textMuted }]}>\n {template.description}\n </Text>\n </View>\n <View style={[styles.useButton, { backgroundColor: palette.primarySoft }]}>\n {busy ? (\n <ActivityIndicator size=\"small\" color={palette.primary} />\n ) : (\n <Text style={[styles.useLabel, { color: palette.primary }]}>Use</Text>\n )}\n </View>\n </Pressable>\n );\n}\n\nconst styles = StyleSheet.create({\n loading: { paddingVertical: 48, alignItems: 'center' },\n content: { padding: 16, paddingBottom: 48 },\n groupTop: { borderTopLeftRadius: 16, borderTopRightRadius: 16 },\n groupBottom: { borderBottomLeftRadius: 16, borderBottomRightRadius: 16 },\n note: { fontSize: 14, lineHeight: 20 },\n link: { fontSize: 15, fontWeight: '600' },\n toolbar: { gap: 12, marginBottom: 12 },\n inboxHeader: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', marginBottom: 12 },\n unreadDot: { width: 9, height: 9, borderRadius: 5 },\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 chips: { gap: 8 },\n chip: { paddingHorizontal: 14, paddingVertical: 8, borderRadius: 999 },\n chipLabel: { fontSize: 14, fontWeight: '600' },\n wideButton: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 6,\n minHeight: 48,\n borderRadius: 14,\n },\n wideButtonLabel: { fontSize: 16, fontWeight: '700' },\n templateCard: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n padding: 14,\n borderRadius: 16,\n marginBottom: 10,\n },\n templateIcon: { width: 44, height: 44, borderRadius: 12, alignItems: 'center', justifyContent: 'center' },\n templateEmoji: { fontSize: 22 },\n templateName: { fontSize: 16, fontWeight: '700' },\n templateDesc: { fontSize: 13, lineHeight: 18, marginTop: 2 },\n useButton: {\n minWidth: 64,\n paddingHorizontal: 12,\n paddingVertical: 7,\n borderRadius: 999,\n alignItems: 'center',\n },\n useLabel: { fontSize: 13, fontWeight: '700' },\n});\n"],"names":["_a"],"mappings":"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"}
|
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {useState,useMemo,useCallback}from'react';import {Alert,View,StyleSheet,ActivityIndicator,SectionList,Text,TextInput,Pressable,RefreshControl}from'react-native';import {Ionicons}from'@expo/vector-icons';import {useApolloClient,useQuery}from'@apollo/client/index.js';import {NATIVE_NOTION_TRASH,NATIVE_NOTION_RESTORE_BLOCK,NATIVE_NOTION_PERMANENTLY_DELETE}from'./notionDocuments.js';import {pageTitle,editedLabel}from'./notionBlocks.js';import {ui,EmptyState}from'./notionUi.js';import {trashItemsOf,filterTrash,groupTrash,pluralize}from'./notionTrash.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 typeLabel = (type) => (type || "block").replace(/_/g, " ").replace(/^\w/, (c) => c.toUpperCase());
|
|
21
|
+
function TrashSheet({
|
|
22
|
+
palette,
|
|
23
|
+
notion,
|
|
24
|
+
onOpenPage
|
|
25
|
+
}) {
|
|
26
|
+
var _a, _b, _c;
|
|
27
|
+
const client = useApolloClient();
|
|
28
|
+
const workspaceId = (_b = (_a = notion.workspace) == null ? void 0 : _a.id) != null ? _b : null;
|
|
29
|
+
const {
|
|
30
|
+
data,
|
|
31
|
+
loading,
|
|
32
|
+
error,
|
|
33
|
+
refetch
|
|
34
|
+
} = useQuery(NATIVE_NOTION_TRASH, {
|
|
35
|
+
variables: {
|
|
36
|
+
workspaceId: workspaceId != null ? workspaceId : void 0
|
|
37
|
+
},
|
|
38
|
+
fetchPolicy: "network-only"
|
|
39
|
+
});
|
|
40
|
+
const [query, setQuery] = useState("");
|
|
41
|
+
const [selecting, setSelecting] = useState(false);
|
|
42
|
+
const [selected, setSelected] = useState(/* @__PURE__ */ new Set());
|
|
43
|
+
const [busy, setBusy] = useState(/* @__PURE__ */ new Set());
|
|
44
|
+
const [hidden, setHidden] = useState(/* @__PURE__ */ new Set());
|
|
45
|
+
const items = useMemo(() => trashItemsOf(data == null ? void 0 : data.listTrash).filter((i) => !hidden.has(i.id)), [data, hidden]);
|
|
46
|
+
if (__DEV__) {
|
|
47
|
+
const odd = ((_c = data == null ? void 0 : data.listTrash) != null ? _c : []).find((b) => !(b == null ? void 0 : b.id) || !(b == null ? void 0 : b.type));
|
|
48
|
+
if (odd) console.warn("[NotionTrash] incomplete listTrash record", JSON.stringify(odd));
|
|
49
|
+
}
|
|
50
|
+
const shown = useMemo(() => filterTrash(items, query), [items, query]);
|
|
51
|
+
const filtering = Boolean(query.trim());
|
|
52
|
+
const pageTitles = useMemo(() => {
|
|
53
|
+
const out = {};
|
|
54
|
+
notion.pages.forEach((p) => {
|
|
55
|
+
out[p.id] = pageTitle(p);
|
|
56
|
+
});
|
|
57
|
+
return out;
|
|
58
|
+
}, [notion.pages]);
|
|
59
|
+
const groups = useMemo(() => groupTrash(shown, pageTitles), [shown, pageTitles]);
|
|
60
|
+
const sections = useMemo(() => groups.map((g) => ({
|
|
61
|
+
group: g,
|
|
62
|
+
data: [...g.page ? [{
|
|
63
|
+
item: g.page,
|
|
64
|
+
depth: 0,
|
|
65
|
+
isPage: true
|
|
66
|
+
}] : [], ...g.blocks.map((b) => __spreadProps(__spreadValues({}, b), {
|
|
67
|
+
depth: b.depth + (g.page ? 1 : 0),
|
|
68
|
+
isPage: false
|
|
69
|
+
}))]
|
|
70
|
+
})), [groups]);
|
|
71
|
+
const runMany = useCallback(async (ids, kind) => {
|
|
72
|
+
if (!ids.length) return;
|
|
73
|
+
setHidden((h) => /* @__PURE__ */ new Set([...h, ...ids]));
|
|
74
|
+
setBusy((b) => /* @__PURE__ */ new Set([...b, ...ids]));
|
|
75
|
+
setSelected(/* @__PURE__ */ new Set());
|
|
76
|
+
const mutation = kind === "restore" ? NATIVE_NOTION_RESTORE_BLOCK : NATIVE_NOTION_PERMANENTLY_DELETE;
|
|
77
|
+
const results = await Promise.allSettled(ids.map((blockId) => client.mutate({
|
|
78
|
+
mutation,
|
|
79
|
+
variables: {
|
|
80
|
+
blockId
|
|
81
|
+
},
|
|
82
|
+
errorPolicy: "none"
|
|
83
|
+
})));
|
|
84
|
+
const failed = ids.filter((_, i) => results[i].status === "rejected");
|
|
85
|
+
setBusy((b) => new Set([...b].filter((id) => !ids.includes(id))));
|
|
86
|
+
setHidden((h) => new Set([...h].filter((id) => !failed.includes(id))));
|
|
87
|
+
await refetch().catch(() => void 0);
|
|
88
|
+
if (kind === "restore") client.refetchQueries({
|
|
89
|
+
include: ["NativeNotionChildren"]
|
|
90
|
+
}).catch(() => void 0);
|
|
91
|
+
setHidden((h) => new Set([...h].filter((id) => !ids.includes(id) || failed.includes(id))));
|
|
92
|
+
if (failed.length) {
|
|
93
|
+
const verb = kind === "restore" ? "Restored" : "Deleted";
|
|
94
|
+
Alert.alert(`${verb} ${ids.length - failed.length} of ${ids.length}`, `${pluralize(failed.length, "item")} failed.`, [{
|
|
95
|
+
text: "Close",
|
|
96
|
+
style: "cancel"
|
|
97
|
+
}, {
|
|
98
|
+
text: "Retry",
|
|
99
|
+
onPress: () => runMany(failed, kind)
|
|
100
|
+
}]);
|
|
101
|
+
}
|
|
102
|
+
}, [client, refetch]);
|
|
103
|
+
const confirmDelete = useCallback((ids, what) => {
|
|
104
|
+
if (!ids.length) return;
|
|
105
|
+
Alert.alert("Delete forever?", `${what != null ? what : pluralize(ids.length, "item")} will be deleted permanently. This can't be undone.`, [{
|
|
106
|
+
text: "Cancel",
|
|
107
|
+
style: "cancel"
|
|
108
|
+
}, {
|
|
109
|
+
text: "Delete forever",
|
|
110
|
+
style: "destructive",
|
|
111
|
+
onPress: () => runMany(ids, "delete")
|
|
112
|
+
}]);
|
|
113
|
+
}, [runMany]);
|
|
114
|
+
const toggle = (id) => setSelected((s) => {
|
|
115
|
+
const next = new Set(s);
|
|
116
|
+
if (next.has(id)) next.delete(id);
|
|
117
|
+
else next.add(id);
|
|
118
|
+
return next;
|
|
119
|
+
});
|
|
120
|
+
const allShownSelected = shown.length > 0 && shown.every((i) => selected.has(i.id));
|
|
121
|
+
if (loading && !data) {
|
|
122
|
+
return /* @__PURE__ */ jsx(View, { style: styles.loading, children: /* @__PURE__ */ jsx(ActivityIndicator, { color: palette.textMuted }) });
|
|
123
|
+
}
|
|
124
|
+
return /* @__PURE__ */ jsxs(View, { style: ui.flex, children: [
|
|
125
|
+
/* @__PURE__ */ jsx(SectionList, { sections, keyExtractor: (r) => r.item.id, keyboardShouldPersistTaps: "handled", stickySectionHeadersEnabled: false, contentContainerStyle: styles.content, refreshControl: /* @__PURE__ */ jsx(RefreshControl, { refreshing: false, onRefresh: () => refetch() }), ListHeaderComponent: items.length ? /* @__PURE__ */ jsxs(View, { style: styles.toolbar, children: [
|
|
126
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.note, {
|
|
127
|
+
color: palette.textMuted
|
|
128
|
+
}], children: "Restore deleted pages and blocks, or delete them permanently." }),
|
|
129
|
+
/* @__PURE__ */ jsxs(View, { style: [styles.searchField, {
|
|
130
|
+
backgroundColor: palette.fill
|
|
131
|
+
}], children: [
|
|
132
|
+
/* @__PURE__ */ jsx(Ionicons, { name: "search", size: 17, color: palette.textMuted }),
|
|
133
|
+
/* @__PURE__ */ jsx(TextInput, { value: query, onChangeText: setQuery, placeholder: "Search trash\u2026", placeholderTextColor: palette.textMuted, autoCorrect: false, clearButtonMode: "while-editing", style: [styles.searchInput, {
|
|
134
|
+
color: palette.text
|
|
135
|
+
}] })
|
|
136
|
+
] }),
|
|
137
|
+
/* @__PURE__ */ jsxs(View, { style: styles.countRow, children: [
|
|
138
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.count, {
|
|
139
|
+
color: palette.textMuted
|
|
140
|
+
}], children: filtering ? `${shown.length} of ${pluralize(items.length, "item")}` : pluralize(items.length, "item") }),
|
|
141
|
+
/* @__PURE__ */ jsx(View, { style: ui.flex }),
|
|
142
|
+
selecting ? /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: () => setSelected(allShownSelected ? /* @__PURE__ */ new Set() : new Set(shown.map((i) => i.id))), hitSlop: 8, children: /* @__PURE__ */ jsx(Text, { style: [styles.link, {
|
|
143
|
+
color: palette.primary
|
|
144
|
+
}], children: allShownSelected ? "Deselect all" : "Select all" }) }) : shown.length ? /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: () => confirmDelete(shown.map((i) => i.id), filtering ? `The ${pluralize(shown.length, "item")} shown` : `Everything in Trash (${pluralize(shown.length, "item")})`), hitSlop: 8, children: /* @__PURE__ */ jsx(Text, { style: [styles.link, {
|
|
145
|
+
color: palette.danger
|
|
146
|
+
}], children: filtering ? `Delete ${shown.length} shown` : "Empty trash" }) }) : null,
|
|
147
|
+
/* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: () => {
|
|
148
|
+
setSelecting((v) => !v);
|
|
149
|
+
setSelected(/* @__PURE__ */ new Set());
|
|
150
|
+
}, hitSlop: 8, style: styles.selectToggle, children: /* @__PURE__ */ jsx(Text, { style: [styles.link, {
|
|
151
|
+
color: palette.primary
|
|
152
|
+
}], children: selecting ? "Cancel" : "Select" }) })
|
|
153
|
+
] })
|
|
154
|
+
] }) : null, ListEmptyComponent: /* @__PURE__ */ jsx(EmptyState, { palette, icon: error ? "cloud-offline-outline" : "trash-outline", title: error ? "Couldn't load the trash" : filtering ? "Nothing matches" : "Trash is empty", text: error ? "Pull down to try again." : filtering ? "Try a different search." : "Pages and blocks you delete stay here until you remove them for good." }), renderSectionHeader: ({
|
|
155
|
+
section
|
|
156
|
+
}) => /* @__PURE__ */ jsx(GroupHeader, { group: section.group, palette, selecting, selected: section.group.ids.every((id) => selected.has(id)), onToggle: () => setSelected((s) => {
|
|
157
|
+
const next = new Set(s);
|
|
158
|
+
const all = section.group.ids.every((id) => next.has(id));
|
|
159
|
+
section.group.ids.forEach((id) => all ? next.delete(id) : next.add(id));
|
|
160
|
+
return next;
|
|
161
|
+
}), onRestoreAll: () => runMany(section.group.ids, "restore"), onDeleteAll: () => confirmDelete(section.group.ids, `\u201C${section.group.label}\u201D and its ${pluralize(section.group.ids.length, "item")}`) }), renderItem: ({
|
|
162
|
+
item: row,
|
|
163
|
+
index,
|
|
164
|
+
section
|
|
165
|
+
}) => /* @__PURE__ */ jsx(View, { style: [{
|
|
166
|
+
backgroundColor: palette.card
|
|
167
|
+
}, index === 0 && styles.groupTop, index === section.data.length - 1 && styles.groupBottom], children: /* @__PURE__ */ jsx(TrashRow, { row, palette, divider: index < section.data.length - 1, selecting, selected: selected.has(row.item.id), busy: busy.has(row.item.id), onToggle: () => toggle(row.item.id), onRestore: () => runMany([row.item.id], "restore"), onDelete: () => confirmDelete([row.item.id], `\u201C${row.item.title || typeLabel(row.item.type)}\u201D`), onOpen: row.isPage ? () => onOpenPage(row.item.id) : void 0 }) }) }),
|
|
168
|
+
selecting && selected.size ? /* @__PURE__ */ jsxs(View, { style: [styles.bulkBar, {
|
|
169
|
+
backgroundColor: palette.card,
|
|
170
|
+
borderTopColor: palette.hairline
|
|
171
|
+
}], children: [
|
|
172
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.bulkCount, {
|
|
173
|
+
color: palette.text
|
|
174
|
+
}], children: `${selected.size} selected` }),
|
|
175
|
+
/* @__PURE__ */ jsx(View, { style: ui.flex }),
|
|
176
|
+
/* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: () => runMany([...selected], "restore"), style: [styles.bulkButton, {
|
|
177
|
+
backgroundColor: palette.primarySoft
|
|
178
|
+
}], children: /* @__PURE__ */ jsx(Text, { style: [styles.bulkLabel, {
|
|
179
|
+
color: palette.primary
|
|
180
|
+
}], children: "Restore" }) }),
|
|
181
|
+
/* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: () => confirmDelete([...selected]), style: [styles.bulkButton, {
|
|
182
|
+
backgroundColor: palette.dangerSoft
|
|
183
|
+
}], children: /* @__PURE__ */ jsx(Text, { style: [styles.bulkLabel, {
|
|
184
|
+
color: palette.danger
|
|
185
|
+
}], children: "Delete" }) })
|
|
186
|
+
] }) : null
|
|
187
|
+
] });
|
|
188
|
+
}
|
|
189
|
+
function GroupHeader({
|
|
190
|
+
group,
|
|
191
|
+
palette,
|
|
192
|
+
selecting,
|
|
193
|
+
selected,
|
|
194
|
+
onToggle,
|
|
195
|
+
onRestoreAll,
|
|
196
|
+
onDeleteAll
|
|
197
|
+
}) {
|
|
198
|
+
const blockCount = group.blocks.length;
|
|
199
|
+
let detail = "";
|
|
200
|
+
if (group.page) detail = blockCount ? `Page \xB7 ${pluralize(blockCount, "block")}` : "Page";
|
|
201
|
+
else detail = pluralize(blockCount, "block");
|
|
202
|
+
return /* @__PURE__ */ jsxs(View, { style: styles.groupHeader, children: [
|
|
203
|
+
selecting ? /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "checkbox", accessibilityState: {
|
|
204
|
+
checked: selected
|
|
205
|
+
}, onPress: onToggle, hitSlop: 8, children: /* @__PURE__ */ jsx(Ionicons, { name: selected ? "checkbox" : "square-outline", size: 22, color: selected ? palette.primary : palette.textMuted }) }) : null,
|
|
206
|
+
/* @__PURE__ */ jsxs(View, { style: ui.flex, children: [
|
|
207
|
+
/* @__PURE__ */ jsx(Text, { numberOfLines: 1, style: [styles.groupTitle, {
|
|
208
|
+
color: palette.text
|
|
209
|
+
}], children: group.label }),
|
|
210
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.groupDetail, {
|
|
211
|
+
color: palette.textMuted
|
|
212
|
+
}], children: detail })
|
|
213
|
+
] }),
|
|
214
|
+
!selecting ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
215
|
+
/* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: onRestoreAll, hitSlop: 6, children: /* @__PURE__ */ jsx(Text, { style: [styles.link, {
|
|
216
|
+
color: palette.primary
|
|
217
|
+
}], children: "Restore all" }) }),
|
|
218
|
+
/* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: onDeleteAll, hitSlop: 6, children: /* @__PURE__ */ jsx(Text, { style: [styles.link, {
|
|
219
|
+
color: palette.danger
|
|
220
|
+
}], children: "Delete all" }) })
|
|
221
|
+
] }) : null
|
|
222
|
+
] });
|
|
223
|
+
}
|
|
224
|
+
function TrashRow({
|
|
225
|
+
row,
|
|
226
|
+
palette,
|
|
227
|
+
divider,
|
|
228
|
+
selecting,
|
|
229
|
+
selected,
|
|
230
|
+
busy,
|
|
231
|
+
onToggle,
|
|
232
|
+
onRestore,
|
|
233
|
+
onDelete,
|
|
234
|
+
onOpen
|
|
235
|
+
}) {
|
|
236
|
+
const {
|
|
237
|
+
item,
|
|
238
|
+
depth
|
|
239
|
+
} = row;
|
|
240
|
+
const when = editedLabel(item.deletedTime).replace("Edited", "Deleted");
|
|
241
|
+
const title = item.title || (row.isPage ? "Untitled" : typeLabel(item.type));
|
|
242
|
+
return /* @__PURE__ */ jsxs(Pressable, { accessibilityRole: "button", onPress: selecting ? onToggle : onOpen, disabled: !selecting && !onOpen, style: ({
|
|
243
|
+
pressed
|
|
244
|
+
}) => [styles.row, {
|
|
245
|
+
paddingLeft: 14 + depth * 18
|
|
246
|
+
}, pressed && {
|
|
247
|
+
backgroundColor: palette.pressed
|
|
248
|
+
}], children: [
|
|
249
|
+
selecting ? /* @__PURE__ */ jsx(Ionicons, { name: selected ? "checkbox" : "square-outline", size: 22, color: selected ? palette.primary : palette.textMuted }) : null,
|
|
250
|
+
/* @__PURE__ */ jsx(View, { style: [styles.rowIcon, {
|
|
251
|
+
backgroundColor: palette.fill
|
|
252
|
+
}], children: item.icon ? /* @__PURE__ */ jsx(Text, { style: styles.rowEmoji, children: item.icon }) : /* @__PURE__ */ jsx(Ionicons, { name: row.isPage ? "document-text-outline" : "reorder-two-outline", size: 17, color: palette.textMuted }) }),
|
|
253
|
+
/* @__PURE__ */ jsxs(View, { style: [styles.rowBody, divider && ui.hairline, divider && {
|
|
254
|
+
borderBottomColor: palette.hairline
|
|
255
|
+
}], children: [
|
|
256
|
+
/* @__PURE__ */ jsxs(View, { style: ui.flex, children: [
|
|
257
|
+
/* @__PURE__ */ jsx(Text, { numberOfLines: 1, style: [styles.rowTitle, {
|
|
258
|
+
color: palette.text
|
|
259
|
+
}], children: title }),
|
|
260
|
+
/* @__PURE__ */ jsx(Text, { numberOfLines: 1, style: [styles.rowMeta, {
|
|
261
|
+
color: palette.textMuted
|
|
262
|
+
}], children: [row.isPage ? "Page" : typeLabel(item.type), when].filter(Boolean).join(" \xB7 ") })
|
|
263
|
+
] }),
|
|
264
|
+
busy ? /* @__PURE__ */ jsx(ActivityIndicator, { size: "small", color: palette.textMuted }) : null,
|
|
265
|
+
!selecting && !busy ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
266
|
+
/* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", accessibilityLabel: `Restore ${title}`, onPress: onRestore, hitSlop: 6, style: [styles.pill, {
|
|
267
|
+
backgroundColor: palette.primarySoft
|
|
268
|
+
}], children: /* @__PURE__ */ jsx(Text, { style: [styles.pillLabel, {
|
|
269
|
+
color: palette.primary
|
|
270
|
+
}], children: "Restore" }) }),
|
|
271
|
+
/* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", accessibilityLabel: `Delete ${title} forever`, onPress: onDelete, hitSlop: 6, style: [styles.iconPill, {
|
|
272
|
+
backgroundColor: palette.dangerSoft
|
|
273
|
+
}], children: /* @__PURE__ */ jsx(Ionicons, { name: "trash-outline", size: 16, color: palette.danger }) })
|
|
274
|
+
] }) : null
|
|
275
|
+
] })
|
|
276
|
+
] });
|
|
277
|
+
}
|
|
278
|
+
const styles = StyleSheet.create({
|
|
279
|
+
loading: {
|
|
280
|
+
paddingVertical: 48,
|
|
281
|
+
alignItems: "center"
|
|
282
|
+
},
|
|
283
|
+
content: {
|
|
284
|
+
padding: 16,
|
|
285
|
+
paddingBottom: 96
|
|
286
|
+
},
|
|
287
|
+
toolbar: {
|
|
288
|
+
gap: 12,
|
|
289
|
+
marginBottom: 4
|
|
290
|
+
},
|
|
291
|
+
note: {
|
|
292
|
+
fontSize: 14,
|
|
293
|
+
lineHeight: 20
|
|
294
|
+
},
|
|
295
|
+
searchField: {
|
|
296
|
+
flexDirection: "row",
|
|
297
|
+
alignItems: "center",
|
|
298
|
+
gap: 8,
|
|
299
|
+
height: 40,
|
|
300
|
+
paddingHorizontal: 12,
|
|
301
|
+
borderRadius: 12
|
|
302
|
+
},
|
|
303
|
+
searchInput: {
|
|
304
|
+
flex: 1,
|
|
305
|
+
fontSize: 16,
|
|
306
|
+
paddingVertical: 0
|
|
307
|
+
},
|
|
308
|
+
countRow: {
|
|
309
|
+
flexDirection: "row",
|
|
310
|
+
alignItems: "center",
|
|
311
|
+
gap: 16
|
|
312
|
+
},
|
|
313
|
+
count: {
|
|
314
|
+
fontSize: 14
|
|
315
|
+
},
|
|
316
|
+
link: {
|
|
317
|
+
fontSize: 15,
|
|
318
|
+
fontWeight: "600"
|
|
319
|
+
},
|
|
320
|
+
selectToggle: {
|
|
321
|
+
marginLeft: 4
|
|
322
|
+
},
|
|
323
|
+
groupHeader: {
|
|
324
|
+
flexDirection: "row",
|
|
325
|
+
alignItems: "center",
|
|
326
|
+
gap: 12,
|
|
327
|
+
marginTop: 20,
|
|
328
|
+
marginBottom: 8
|
|
329
|
+
},
|
|
330
|
+
groupTitle: {
|
|
331
|
+
fontSize: 17,
|
|
332
|
+
fontWeight: "700"
|
|
333
|
+
},
|
|
334
|
+
groupDetail: {
|
|
335
|
+
fontSize: 13,
|
|
336
|
+
marginTop: 1
|
|
337
|
+
},
|
|
338
|
+
groupTop: {
|
|
339
|
+
borderTopLeftRadius: 16,
|
|
340
|
+
borderTopRightRadius: 16
|
|
341
|
+
},
|
|
342
|
+
groupBottom: {
|
|
343
|
+
borderBottomLeftRadius: 16,
|
|
344
|
+
borderBottomRightRadius: 16
|
|
345
|
+
},
|
|
346
|
+
row: {
|
|
347
|
+
flexDirection: "row",
|
|
348
|
+
alignItems: "center",
|
|
349
|
+
gap: 10
|
|
350
|
+
},
|
|
351
|
+
rowIcon: {
|
|
352
|
+
width: 34,
|
|
353
|
+
height: 34,
|
|
354
|
+
borderRadius: 10,
|
|
355
|
+
alignItems: "center",
|
|
356
|
+
justifyContent: "center"
|
|
357
|
+
},
|
|
358
|
+
rowEmoji: {
|
|
359
|
+
fontSize: 17
|
|
360
|
+
},
|
|
361
|
+
rowBody: {
|
|
362
|
+
flex: 1,
|
|
363
|
+
flexDirection: "row",
|
|
364
|
+
alignItems: "center",
|
|
365
|
+
gap: 8,
|
|
366
|
+
paddingRight: 12,
|
|
367
|
+
paddingVertical: 12
|
|
368
|
+
},
|
|
369
|
+
rowTitle: {
|
|
370
|
+
fontSize: 15,
|
|
371
|
+
fontWeight: "600"
|
|
372
|
+
},
|
|
373
|
+
rowMeta: {
|
|
374
|
+
fontSize: 12,
|
|
375
|
+
marginTop: 2
|
|
376
|
+
},
|
|
377
|
+
pill: {
|
|
378
|
+
paddingHorizontal: 10,
|
|
379
|
+
paddingVertical: 6,
|
|
380
|
+
borderRadius: 999
|
|
381
|
+
},
|
|
382
|
+
pillLabel: {
|
|
383
|
+
fontSize: 13,
|
|
384
|
+
fontWeight: "700"
|
|
385
|
+
},
|
|
386
|
+
iconPill: {
|
|
387
|
+
width: 32,
|
|
388
|
+
height: 30,
|
|
389
|
+
borderRadius: 999,
|
|
390
|
+
alignItems: "center",
|
|
391
|
+
justifyContent: "center"
|
|
392
|
+
},
|
|
393
|
+
bulkBar: {
|
|
394
|
+
flexDirection: "row",
|
|
395
|
+
alignItems: "center",
|
|
396
|
+
gap: 8,
|
|
397
|
+
paddingHorizontal: 16,
|
|
398
|
+
paddingTop: 10,
|
|
399
|
+
paddingBottom: 28,
|
|
400
|
+
borderTopWidth: StyleSheet.hairlineWidth
|
|
401
|
+
},
|
|
402
|
+
bulkCount: {
|
|
403
|
+
fontSize: 15,
|
|
404
|
+
fontWeight: "600"
|
|
405
|
+
},
|
|
406
|
+
bulkButton: {
|
|
407
|
+
paddingHorizontal: 16,
|
|
408
|
+
paddingVertical: 10,
|
|
409
|
+
borderRadius: 12
|
|
410
|
+
},
|
|
411
|
+
bulkLabel: {
|
|
412
|
+
fontSize: 15,
|
|
413
|
+
fontWeight: "700"
|
|
414
|
+
}
|
|
415
|
+
});export{TrashSheet};//# sourceMappingURL=NotionTrashSheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotionTrashSheet.js","sources":["../../../src/features/notion/NotionTrashSheet.tsx"],"sourcesContent":["/**\n * Native Trash - the web TrashView / TrashPage on a phone:\n * - search (\"Search trash…\"), item count, \"Empty trash\" (or \"Delete N shown\" while searching)\n * - one section per page (a trashed page, or the live page a trashed block lived in),\n * with \"Restore all\" / \"Delete all\"\n * - per row: Restore, Delete forever (confirmed)\n * - Select mode: checkboxes + a bar \"N selected · Restore · Delete\" (bulk)\n * Restore never asks (trashing again undoes it); permanent deletes always confirm with the count.\n * Bulk actions report partial failures and offer Retry for exactly the failed ids, like the web toast.\n */\nimport React, { useCallback, useMemo, useState } from 'react';\nimport {\n ActivityIndicator,\n Alert,\n Pressable,\n RefreshControl,\n SectionList,\n StyleSheet,\n Text,\n TextInput,\n View,\n} from 'react-native';\nimport { Ionicons } from '@expo/vector-icons';\nimport { useApolloClient, useQuery } from '@apollo/client';\nimport { NATIVE_NOTION_PERMANENTLY_DELETE, NATIVE_NOTION_RESTORE_BLOCK, NATIVE_NOTION_TRASH } from './notionDocuments';\nimport { editedLabel, pageTitle, type NotionBlock } from './notionBlocks';\nimport type { NotionPalette } from './notionTheme';\nimport { EmptyState, ui } from './notionUi';\nimport { filterTrash, groupTrash, pluralize, trashItemsOf, type TrashGroup, type TrashItem } from './notionTrash';\nimport type { NotionWorkspaceState } from './useNotionWorkspace';\n\ntype Palette = NotionPalette;\ntype Row = { item: TrashItem; depth: number; isPage: boolean };\n\nconst typeLabel = (type: string | null | undefined) =>\n (type || 'block').replace(/_/g, ' ').replace(/^\\w/, (c) => c.toUpperCase());\n\nexport function TrashSheet({\n palette,\n notion,\n onOpenPage,\n}: {\n palette: Palette;\n notion: NotionWorkspaceState;\n onOpenPage: (id: string) => void;\n}) {\n const client = useApolloClient();\n const workspaceId = notion.workspace?.id ?? null;\n const { data, loading, error, refetch } = useQuery<{ listTrash?: NotionBlock[] | null }>(NATIVE_NOTION_TRASH, {\n variables: { workspaceId: workspaceId ?? undefined },\n fetchPolicy: 'network-only',\n });\n const [query, setQuery] = useState('');\n const [selecting, setSelecting] = useState(false);\n const [selected, setSelected] = useState<Set<string>>(new Set());\n const [busy, setBusy] = useState<Set<string>>(new Set());\n /** Removed optimistically while their request runs (put back on failure). */\n const [hidden, setHidden] = useState<Set<string>>(new Set());\n\n const items = useMemo(() => trashItemsOf(data?.listTrash).filter((i) => !hidden.has(i.id)), [data, hidden]);\n if (__DEV__) {\n const odd = (data?.listTrash ?? []).find((b) => !b?.id || !b?.type);\n if (odd) console.warn('[NotionTrash] incomplete listTrash record', JSON.stringify(odd));\n }\n const shown = useMemo(() => filterTrash(items, query), [items, query]);\n const filtering = Boolean(query.trim());\n\n // Live pages name the sections of blocks trashed out of them.\n const pageTitles = useMemo(() => {\n const out: Record<string, string> = {};\n notion.pages.forEach((p) => {\n out[p.id] = pageTitle(p);\n });\n return out;\n }, [notion.pages]);\n const groups = useMemo(() => groupTrash(shown, pageTitles), [shown, pageTitles]);\n const sections = useMemo(\n () =>\n groups.map((g) => ({\n group: g,\n data: [\n ...(g.page ? [{ item: g.page, depth: 0, isPage: true }] : []),\n ...g.blocks.map((b) => ({ ...b, depth: b.depth + (g.page ? 1 : 0), isPage: false })),\n ] as Row[],\n })),\n [groups],\n );\n\n /**\n * Run one mutation per id, hiding them at once; failed ids come back and the\n * summary offers Retry for exactly those (web: \"Deleted 8 of 10 — 2 failed · Retry\").\n */\n const runMany = useCallback(\n async (ids: string[], kind: 'restore' | 'delete') => {\n if (!ids.length) return;\n setHidden((h) => new Set([...h, ...ids]));\n setBusy((b) => new Set([...b, ...ids]));\n setSelected(new Set());\n const mutation = kind === 'restore' ? NATIVE_NOTION_RESTORE_BLOCK : NATIVE_NOTION_PERMANENTLY_DELETE;\n const results = await Promise.allSettled(\n ids.map((blockId) => client.mutate({ mutation, variables: { blockId }, errorPolicy: 'none' })),\n );\n const failed = ids.filter((_, i) => results[i].status === 'rejected');\n setBusy((b) => new Set([...b].filter((id) => !ids.includes(id))));\n setHidden((h) => new Set([...h].filter((id) => !failed.includes(id))));\n await refetch().catch(() => undefined);\n if (kind === 'restore') client.refetchQueries({ include: ['NativeNotionChildren'] }).catch(() => undefined);\n setHidden((h) => new Set([...h].filter((id) => !ids.includes(id) || failed.includes(id))));\n if (failed.length) {\n const verb = kind === 'restore' ? 'Restored' : 'Deleted';\n Alert.alert(\n `${verb} ${ids.length - failed.length} of ${ids.length}`,\n `${pluralize(failed.length, 'item')} failed.`,\n [\n { text: 'Close', style: 'cancel' },\n { text: 'Retry', onPress: () => runMany(failed, kind) },\n ],\n );\n }\n },\n [client, refetch],\n );\n\n const confirmDelete = useCallback(\n (ids: string[], what?: string) => {\n if (!ids.length) return;\n Alert.alert(\n 'Delete forever?',\n `${what ?? pluralize(ids.length, 'item')} will be deleted permanently. This can't be undone.`,\n [\n { text: 'Cancel', style: 'cancel' },\n { text: 'Delete forever', style: 'destructive', onPress: () => runMany(ids, 'delete') },\n ],\n );\n },\n [runMany],\n );\n\n const toggle = (id: string) =>\n setSelected((s) => {\n const next = new Set(s);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n\n const allShownSelected = shown.length > 0 && shown.every((i) => selected.has(i.id));\n\n if (loading && !data) {\n return (\n <View style={styles.loading}>\n <ActivityIndicator color={palette.textMuted} />\n </View>\n );\n }\n\n return (\n <View style={ui.flex}>\n <SectionList\n sections={sections}\n keyExtractor={(r) => r.item.id}\n keyboardShouldPersistTaps=\"handled\"\n stickySectionHeadersEnabled={false}\n contentContainerStyle={styles.content}\n refreshControl={<RefreshControl refreshing={false} onRefresh={() => refetch()} />}\n ListHeaderComponent={\n items.length ? (\n <View style={styles.toolbar}>\n <Text style={[styles.note, { color: palette.textMuted }]}>\n Restore deleted pages and blocks, or delete them permanently.\n </Text>\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 trash…\"\n placeholderTextColor={palette.textMuted}\n autoCorrect={false}\n clearButtonMode=\"while-editing\"\n style={[styles.searchInput, { color: palette.text }]}\n />\n </View>\n <View style={styles.countRow}>\n <Text style={[styles.count, { color: palette.textMuted }]}>\n {filtering\n ? `${shown.length} of ${pluralize(items.length, 'item')}`\n : pluralize(items.length, 'item')}\n </Text>\n <View style={ui.flex} />\n {selecting ? (\n <Pressable\n accessibilityRole=\"button\"\n onPress={() =>\n setSelected(allShownSelected ? new Set() : new Set(shown.map((i) => i.id)))\n }\n hitSlop={8}\n >\n <Text style={[styles.link, { color: palette.primary }]}>\n {allShownSelected ? 'Deselect all' : 'Select all'}\n </Text>\n </Pressable>\n ) : shown.length ? (\n <Pressable\n accessibilityRole=\"button\"\n onPress={() =>\n confirmDelete(\n shown.map((i) => i.id),\n filtering\n ? `The ${pluralize(shown.length, 'item')} shown`\n : `Everything in Trash (${pluralize(shown.length, 'item')})`,\n )\n }\n hitSlop={8}\n >\n <Text style={[styles.link, { color: palette.danger }]}>\n {filtering ? `Delete ${shown.length} shown` : 'Empty trash'}\n </Text>\n </Pressable>\n ) : null}\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => {\n setSelecting((v) => !v);\n setSelected(new Set());\n }}\n hitSlop={8}\n style={styles.selectToggle}\n >\n <Text style={[styles.link, { color: palette.primary }]}>\n {selecting ? 'Cancel' : 'Select'}\n </Text>\n </Pressable>\n </View>\n </View>\n ) : null\n }\n ListEmptyComponent={\n <EmptyState\n palette={palette}\n icon={error ? 'cloud-offline-outline' : 'trash-outline'}\n title={error ? \"Couldn't load the trash\" : filtering ? 'Nothing matches' : 'Trash is empty'}\n text={\n error\n ? 'Pull down to try again.'\n : filtering\n ? 'Try a different search.'\n : 'Pages and blocks you delete stay here until you remove them for good.'\n }\n />\n }\n renderSectionHeader={({ section }) => (\n <GroupHeader\n group={section.group}\n palette={palette}\n selecting={selecting}\n selected={section.group.ids.every((id) => selected.has(id))}\n onToggle={() =>\n setSelected((s) => {\n const next = new Set(s);\n const all = section.group.ids.every((id) => next.has(id));\n section.group.ids.forEach((id) => (all ? next.delete(id) : next.add(id)));\n return next;\n })\n }\n onRestoreAll={() => runMany(section.group.ids, 'restore')}\n onDeleteAll={() =>\n confirmDelete(\n section.group.ids,\n `“${section.group.label}” and its ${pluralize(section.group.ids.length, 'item')}`,\n )\n }\n />\n )}\n renderItem={({ item: row, index, section }) => (\n <View\n style={[\n { backgroundColor: palette.card },\n index === 0 && styles.groupTop,\n index === section.data.length - 1 && styles.groupBottom,\n ]}\n >\n <TrashRow\n row={row}\n palette={palette}\n divider={index < section.data.length - 1}\n selecting={selecting}\n selected={selected.has(row.item.id)}\n busy={busy.has(row.item.id)}\n onToggle={() => toggle(row.item.id)}\n onRestore={() => runMany([row.item.id], 'restore')}\n onDelete={() =>\n confirmDelete([row.item.id], `“${row.item.title || typeLabel(row.item.type)}”`)\n }\n onOpen={row.isPage ? () => onOpenPage(row.item.id) : undefined}\n />\n </View>\n )}\n />\n {selecting && selected.size ? (\n <View style={[styles.bulkBar, { backgroundColor: palette.card, borderTopColor: palette.hairline }]}>\n <Text style={[styles.bulkCount, { color: palette.text }]}>{`${selected.size} selected`}</Text>\n <View style={ui.flex} />\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => runMany([...selected], 'restore')}\n style={[styles.bulkButton, { backgroundColor: palette.primarySoft }]}\n >\n <Text style={[styles.bulkLabel, { color: palette.primary }]}>Restore</Text>\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => confirmDelete([...selected])}\n style={[styles.bulkButton, { backgroundColor: palette.dangerSoft }]}\n >\n <Text style={[styles.bulkLabel, { color: palette.danger }]}>Delete</Text>\n </Pressable>\n </View>\n ) : null}\n </View>\n );\n}\n\nfunction GroupHeader({\n group,\n palette,\n selecting,\n selected,\n onToggle,\n onRestoreAll,\n onDeleteAll,\n}: {\n group: TrashGroup;\n palette: Palette;\n selecting: boolean;\n selected: boolean;\n onToggle: () => void;\n onRestoreAll: () => void;\n onDeleteAll: () => void;\n}) {\n const blockCount = group.blocks.length;\n let detail = '';\n if (group.page) detail = blockCount ? `Page · ${pluralize(blockCount, 'block')}` : 'Page';\n else detail = pluralize(blockCount, 'block');\n return (\n <View style={styles.groupHeader}>\n {selecting ? (\n <Pressable\n accessibilityRole=\"checkbox\"\n accessibilityState={{ checked: selected }}\n onPress={onToggle}\n hitSlop={8}\n >\n <Ionicons\n name={selected ? 'checkbox' : 'square-outline'}\n size={22}\n color={selected ? palette.primary : palette.textMuted}\n />\n </Pressable>\n ) : null}\n <View style={ui.flex}>\n <Text numberOfLines={1} style={[styles.groupTitle, { color: palette.text }]}>\n {group.label}\n </Text>\n <Text style={[styles.groupDetail, { color: palette.textMuted }]}>{detail}</Text>\n </View>\n {!selecting ? (\n <>\n <Pressable accessibilityRole=\"button\" onPress={onRestoreAll} hitSlop={6}>\n <Text style={[styles.link, { color: palette.primary }]}>Restore all</Text>\n </Pressable>\n <Pressable accessibilityRole=\"button\" onPress={onDeleteAll} hitSlop={6}>\n <Text style={[styles.link, { color: palette.danger }]}>Delete all</Text>\n </Pressable>\n </>\n ) : null}\n </View>\n );\n}\n\nfunction TrashRow({\n row,\n palette,\n divider,\n selecting,\n selected,\n busy,\n onToggle,\n onRestore,\n onDelete,\n onOpen,\n}: {\n row: Row;\n palette: Palette;\n divider: boolean;\n selecting: boolean;\n selected: boolean;\n busy: boolean;\n onToggle: () => void;\n onRestore: () => void;\n onDelete: () => void;\n onOpen?: () => void;\n}) {\n const { item, depth } = row;\n const when = editedLabel(item.deletedTime).replace('Edited', 'Deleted');\n const title = item.title || (row.isPage ? 'Untitled' : typeLabel(item.type));\n return (\n <Pressable\n accessibilityRole=\"button\"\n onPress={selecting ? onToggle : onOpen}\n disabled={!selecting && !onOpen}\n style={({ pressed }) => [\n styles.row,\n { paddingLeft: 14 + depth * 18 },\n pressed && { backgroundColor: palette.pressed },\n ]}\n >\n {selecting ? (\n <Ionicons\n name={selected ? 'checkbox' : 'square-outline'}\n size={22}\n color={selected ? palette.primary : palette.textMuted}\n />\n ) : null}\n <View style={[styles.rowIcon, { backgroundColor: palette.fill }]}>\n {item.icon ? (\n <Text style={styles.rowEmoji}>{item.icon}</Text>\n ) : (\n <Ionicons\n name={row.isPage ? 'document-text-outline' : 'reorder-two-outline'}\n size={17}\n color={palette.textMuted}\n />\n )}\n </View>\n <View style={[styles.rowBody, divider && ui.hairline, divider && { borderBottomColor: palette.hairline }]}>\n <View style={ui.flex}>\n <Text numberOfLines={1} style={[styles.rowTitle, { color: palette.text }]}>\n {title}\n </Text>\n <Text numberOfLines={1} style={[styles.rowMeta, { color: palette.textMuted }]}>\n {[row.isPage ? 'Page' : typeLabel(item.type), when].filter(Boolean).join(' · ')}\n </Text>\n </View>\n {busy ? <ActivityIndicator size=\"small\" color={palette.textMuted} /> : null}\n {!selecting && !busy ? (\n <>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`Restore ${title}`}\n onPress={onRestore}\n hitSlop={6}\n style={[styles.pill, { backgroundColor: palette.primarySoft }]}\n >\n <Text style={[styles.pillLabel, { color: palette.primary }]}>Restore</Text>\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`Delete ${title} forever`}\n onPress={onDelete}\n hitSlop={6}\n style={[styles.iconPill, { backgroundColor: palette.dangerSoft }]}\n >\n <Ionicons name=\"trash-outline\" size={16} color={palette.danger} />\n </Pressable>\n </>\n ) : null}\n </View>\n </Pressable>\n );\n}\n\nconst styles = StyleSheet.create({\n loading: { paddingVertical: 48, alignItems: 'center' },\n content: { padding: 16, paddingBottom: 96 },\n toolbar: { gap: 12, marginBottom: 4 },\n note: { fontSize: 14, lineHeight: 20 },\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 countRow: { flexDirection: 'row', alignItems: 'center', gap: 16 },\n count: { fontSize: 14 },\n link: { fontSize: 15, fontWeight: '600' },\n selectToggle: { marginLeft: 4 },\n groupHeader: { flexDirection: 'row', alignItems: 'center', gap: 12, marginTop: 20, marginBottom: 8 },\n groupTitle: { fontSize: 17, fontWeight: '700' },\n groupDetail: { fontSize: 13, marginTop: 1 },\n groupTop: { borderTopLeftRadius: 16, borderTopRightRadius: 16 },\n groupBottom: { borderBottomLeftRadius: 16, borderBottomRightRadius: 16 },\n row: { flexDirection: 'row', alignItems: 'center', gap: 10 },\n rowIcon: { width: 34, height: 34, borderRadius: 10, alignItems: 'center', justifyContent: 'center' },\n rowEmoji: { fontSize: 17 },\n rowBody: { flex: 1, flexDirection: 'row', alignItems: 'center', gap: 8, paddingRight: 12, paddingVertical: 12 },\n rowTitle: { fontSize: 15, fontWeight: '600' },\n rowMeta: { fontSize: 12, marginTop: 2 },\n pill: { paddingHorizontal: 10, paddingVertical: 6, borderRadius: 999 },\n pillLabel: { fontSize: 13, fontWeight: '700' },\n iconPill: { width: 32, height: 30, borderRadius: 999, alignItems: 'center', justifyContent: 'center' },\n bulkBar: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n paddingHorizontal: 16,\n paddingTop: 10,\n paddingBottom: 28,\n borderTopWidth: StyleSheet.hairlineWidth,\n },\n bulkCount: { fontSize: 15, fontWeight: '600' },\n bulkButton: { paddingHorizontal: 16, paddingVertical: 10, borderRadius: 12 },\n bulkLabel: { fontSize: 15, fontWeight: '700' },\n});\n"],"names":[],"mappings":"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"}
|