@papyrus-sdk/ui-react-native 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/index.d.mts +46 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.js +2912 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2890 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../components/Viewer.tsx","../components/PageRenderer.tsx","../components/Topbar.tsx","../icons.tsx","../components/ToolDock.tsx","../strings.ts","../components/RightSheet.tsx","../components/AnnotationEditor.tsx","../components/BottomBar.tsx","../components/SettingsSheet.tsx"],"sourcesContent":["import React, { useMemo, useRef, useEffect, useCallback } from 'react';\r\nimport { FlatList, ScrollView, StyleSheet, View, useWindowDimensions, type ViewToken } from 'react-native';\r\nimport { useViewerStore } from '@papyrus-sdk/core';\r\nimport { DocumentEngine } from '@papyrus-sdk/types';\r\nimport PageRenderer from './PageRenderer';\r\n\r\ninterface ViewerProps {\r\n engine: DocumentEngine;\r\n}\r\n\r\nconst Viewer: React.FC<ViewerProps> = ({ engine }) => {\r\n const { pageCount, currentPage, scrollToPageSignal, setDocumentState, uiTheme, viewMode } = useViewerStore();\r\n const listRef = useRef<FlatList<any>>(null);\r\n const isDark = uiTheme === 'dark';\r\n const { width: windowWidth } = useWindowDimensions();\r\n const isDouble = viewMode === 'double';\r\n const isSingle = viewMode === 'single';\r\n\r\n const pages = useMemo(() => Array.from({ length: pageCount }).map((_, i) => i), [pageCount]);\r\n const rows = useMemo(() => {\r\n if (!isDouble) return [];\r\n const result: Array<{ left: number; right: number | null }> = [];\r\n for (let i = 0; i < pageCount; i += 2) {\r\n result.push({ left: i, right: i + 1 < pageCount ? i + 1 : null });\r\n }\r\n return result;\r\n }, [isDouble, pageCount]);\r\n\r\n useEffect(() => {\r\n if (scrollToPageSignal === null) return;\r\n if (pageCount === 0) return;\r\n if (scrollToPageSignal < 0 || scrollToPageSignal >= pageCount) return;\r\n if (isSingle) {\r\n setDocumentState({ currentPage: scrollToPageSignal + 1, scrollToPageSignal: null });\r\n return;\r\n }\r\n const targetIndex = isDouble ? Math.floor(scrollToPageSignal / 2) : scrollToPageSignal;\r\n listRef.current?.scrollToIndex({ index: targetIndex, animated: true });\r\n setDocumentState({ scrollToPageSignal: null });\r\n }, [scrollToPageSignal, pageCount, setDocumentState, isDouble, isSingle]);\r\n\r\n const onViewableItemsChanged = useCallback(\r\n ({ viewableItems }: { viewableItems: Array<ViewToken> }) => {\r\n const first = viewableItems[0];\r\n if (!first) return;\r\n if (isDouble) {\r\n const item = first.item as { left: number; right: number | null } | undefined;\r\n if (!item) return;\r\n const page = item.left + 1;\r\n if (page !== currentPage) {\r\n setDocumentState({ currentPage: page });\r\n }\r\n return;\r\n }\r\n\r\n if (first.index !== null && first.index !== undefined) {\r\n const page = first.index + 1;\r\n if (page !== currentPage) {\r\n setDocumentState({ currentPage: page });\r\n }\r\n }\r\n },\r\n [currentPage, isDouble, setDocumentState]\r\n );\r\n\r\n if (isSingle) {\r\n return (\r\n <View style={[styles.container, isDark && styles.containerDark]}>\r\n <ScrollView\r\n contentContainerStyle={styles.singleContent}\r\n showsVerticalScrollIndicator={false}\r\n scrollEnabled\r\n >\r\n <PageRenderer engine={engine} pageIndex={Math.max(0, currentPage - 1)} spacing={32} />\r\n </ScrollView>\r\n </View>\r\n );\r\n }\r\n\r\n const columnGap = 12;\r\n const horizontalPadding = 16;\r\n const columnWidth = isDouble\r\n ? (windowWidth - horizontalPadding * 2 - columnGap) / 2\r\n : windowWidth;\r\n\r\n return (\r\n <View style={[styles.container, isDark && styles.containerDark]}>\r\n <FlatList\r\n ref={listRef}\r\n data={isDouble ? rows : pages}\r\n keyExtractor={(item) => (isDouble ? `row-${item.left}` : `page-${item}`)}\r\n contentContainerStyle={styles.listContent}\r\n renderItem={({ item }) =>\r\n isDouble ? (\r\n <View style={[styles.row, { paddingHorizontal: horizontalPadding }]}>\r\n <View style={{ width: columnWidth }}>\r\n <PageRenderer\r\n engine={engine}\r\n pageIndex={item.left}\r\n availableWidth={columnWidth}\r\n horizontalPadding={8}\r\n spacing={20}\r\n />\r\n </View>\r\n {item.right !== null ? (\r\n <View style={{ width: columnWidth }}>\r\n <PageRenderer\r\n engine={engine}\r\n pageIndex={item.right}\r\n availableWidth={columnWidth}\r\n horizontalPadding={8}\r\n spacing={20}\r\n />\r\n </View>\r\n ) : (\r\n <View style={{ width: columnWidth }} />\r\n )}\r\n </View>\r\n ) : (\r\n <PageRenderer engine={engine} pageIndex={item} spacing={28} />\r\n )\r\n }\r\n onViewableItemsChanged={onViewableItemsChanged}\r\n viewabilityConfig={{ itemVisiblePercentThreshold: 60 }}\r\n scrollEnabled\r\n onScrollToIndexFailed={({ index, averageItemLength }) => {\r\n if (index < 0 || index >= pageCount) return;\r\n const offset = Math.max(0, averageItemLength * index);\r\n listRef.current?.scrollToOffset({ offset, animated: true });\r\n }}\r\n showsVerticalScrollIndicator={false}\r\n />\r\n </View>\r\n );\r\n};\r\n\r\nconst styles = StyleSheet.create({\r\n container: {\r\n flex: 1,\r\n backgroundColor: '#e9ecef',\r\n },\r\n containerDark: {\r\n backgroundColor: '#0f1115',\r\n },\r\n listContent: {\r\n paddingTop: 18,\r\n paddingBottom: 120,\r\n },\r\n singleContent: {\r\n paddingTop: 18,\r\n paddingBottom: 140,\r\n },\r\n row: {\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n },\r\n});\r\n\r\nexport default Viewer;\r\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\r\nimport {\r\n View,\r\n StyleSheet,\r\n Pressable,\r\n ScrollView,\r\n PanResponder,\r\n Platform,\r\n findNodeHandle,\r\n useWindowDimensions,\r\n type LayoutChangeEvent,\r\n type GestureResponderEvent,\r\n} from 'react-native';\r\nimport { useViewerStore } from '@papyrus-sdk/core';\r\nimport { Annotation, DocumentEngine, TextSelection } from '@papyrus-sdk/types';\r\nimport { PapyrusPageView, type PapyrusPageViewProps } from '@papyrus-sdk/engine-native';\r\n\r\ntype PageViewComponentType = React.ComponentType<PapyrusPageViewProps & React.RefAttributes<any>>;\n\ninterface PageRendererProps {\n engine: DocumentEngine;\n pageIndex: number;\n scale?: number;\n PageViewComponent?: PageViewComponentType;\n availableWidth?: number;\n horizontalPadding?: number;\n spacing?: number;\n}\n\r\nconst PageRenderer: React.FC<PageRendererProps> = ({\n engine,\n pageIndex,\n scale = 1,\n PageViewComponent = PapyrusPageView as PageViewComponentType,\n availableWidth,\n horizontalPadding = 16,\n spacing = 24,\n}) => {\n const viewRef = useRef<any>(null);\r\n const [layout, setLayout] = useState({ width: 0, height: 0 });\r\n const [pageSize, setPageSize] = useState<{ width: number; height: number } | null>(null);\r\n const { width: windowWidth } = useWindowDimensions();\r\n const isAndroid = Platform.OS === 'android';\r\n const isNative = Platform.OS === 'android' || Platform.OS === 'ios';\r\n\r\n const {\r\n zoom,\r\n rotation,\r\n pageTheme,\r\n annotations,\r\n annotationColor,\r\n addAnnotation,\r\n setDocumentState,\r\n accentColor,\r\n selectedAnnotationId,\r\n setSelectedAnnotation,\r\n removeAnnotation,\r\n searchResults,\r\n activeSearchIndex,\r\n setSelectionActive,\r\n } = useViewerStore();\r\n\r\n const pageAnnotations = useMemo(\r\n () => annotations.filter((ann) => ann.pageIndex === pageIndex),\r\n [annotations, pageIndex]\r\n );\r\n\r\n const pageSearchHits = useMemo(\r\n () =>\r\n searchResults\r\n .map((result, index) => ({ result, index }))\r\n .filter(({ result }) => result.pageIndex === pageIndex),\r\n [searchResults, pageIndex]\r\n );\r\n\r\n const [selectionRect, setSelectionRect] = useState<{ x: number; y: number; width: number; height: number } | null>(null);\r\n const [selectionRects, setSelectionRects] = useState<Array<{ x: number; y: number; width: number; height: number }>>([]);\r\n const [selectionBounds, setSelectionBounds] = useState<{ x: number; y: number; width: number; height: number } | null>(null);\r\n const [selectionText, setSelectionText] = useState('');\r\n const [isSelecting, setIsSelecting] = useState(false);\r\n const selectionStart = useRef<{ x: number; y: number } | null>(null);\r\n const selectionRectRef = useRef<{ x: number; y: number; width: number; height: number } | null>(null);\r\n const selectionBoundsRef = useRef<{ x: number; y: number; width: number; height: number } | null>(null);\r\n const selectionBoundsStart = useRef<{ x: number; y: number; width: number; height: number } | null>(null);\r\n const lastTapRef = useRef<{ time: number; x: number; y: number } | null>(null);\r\n const pinchRef = useRef<{ distance: number; zoom: number } | null>(null);\r\n\r\n useEffect(() => {\r\n if (!layout.width || !layout.height) return;\r\n const viewTag = findNodeHandle(viewRef.current);\r\n if (viewTag) {\r\n const renderScale = isAndroid ? scale / Math.max(zoom, 0.5) : scale;\r\n void engine.renderPage(pageIndex, viewTag, renderScale);\r\n }\r\n }, [engine, pageIndex, scale, zoom, rotation, layout.width, layout.height, isAndroid]);\r\n\r\n useEffect(() => {\r\n let active = true;\r\n const loadDimensions = async () => {\r\n const dims = await engine.getPageDimensions(pageIndex);\r\n if (!active) return;\r\n if (dims.width > 0 && dims.height > 0) {\r\n setPageSize({ width: dims.width, height: dims.height });\r\n }\r\n };\r\n void loadDimensions();\r\n return () => {\r\n active = false;\r\n };\r\n }, [engine, pageIndex]);\r\n\r\n const handleLayout = (event: LayoutChangeEvent) => {\r\n const { width, height } = event.nativeEvent.layout;\r\n if (width !== layout.width || height !== layout.height) {\r\n setLayout({ width, height });\r\n }\r\n };\r\n\r\n const addAnnotationAt = (x: number, y: number, width: number, height: number, type: Annotation['type']) => {\r\n addAnnotation({\r\n id: Math.random().toString(36).slice(2, 9),\r\n pageIndex,\r\n type,\r\n rect: { x, y, width, height },\r\n color: annotationColor,\r\n content: type === 'text' || type === 'comment' ? '' : undefined,\r\n createdAt: Date.now(),\r\n });\r\n };\r\n\r\n const clamp = (value: number, min: number, max: number) => Math.min(max, Math.max(min, value));\r\n\r\n const getBoundsFromRects = (rects: Array<{ x: number; y: number; width: number; height: number }>) => {\r\n let minX = 1;\r\n let minY = 1;\r\n let maxX = 0;\r\n let maxY = 0;\r\n rects.forEach((rect) => {\r\n minX = Math.min(minX, rect.x);\r\n minY = Math.min(minY, rect.y);\r\n maxX = Math.max(maxX, rect.x + rect.width);\r\n maxY = Math.max(maxY, rect.y + rect.height);\r\n });\r\n if (maxX <= minX || maxY <= minY) return null;\r\n return {\r\n x: clamp(minX, 0, 1),\r\n y: clamp(minY, 0, 1),\r\n width: clamp(maxX - minX, 0, 1),\r\n height: clamp(maxY - minY, 0, 1),\r\n };\r\n };\r\n\r\n const clearSelection = () => {\r\n setSelectionRect(null);\r\n selectionRectRef.current = null;\r\n setSelectionRects([]);\r\n setSelectionBounds(null);\r\n selectionBoundsRef.current = null;\r\n setSelectionText('');\r\n setIsSelecting(false);\r\n selectionStart.current = null;\r\n selectionBoundsStart.current = null;\r\n setSelectionActive(false);\r\n };\r\n\r\n const applySelectionResult = (selection: TextSelection | null) => {\r\n if (!selection || !selection.rects || selection.rects.length === 0) {\r\n clearSelection();\r\n return;\r\n }\r\n setSelectionRects(selection.rects);\r\n setSelectionText(selection.text || '');\r\n const bounds = getBoundsFromRects(selection.rects);\r\n if (!bounds) {\r\n clearSelection();\r\n return;\r\n }\r\n setSelectionBounds(bounds);\r\n selectionBoundsRef.current = bounds;\r\n setSelectionActive(true);\r\n };\r\n\r\n const selectFromBounds = async (bounds: { x: number; y: number; width: number; height: number }) => {\r\n const selection = await engine.selectText?.(pageIndex, bounds);\r\n applySelectionResult(selection ?? null);\r\n };\r\n\r\n const selectAtPoint = async (x: number, y: number) => {\r\n if (!layout.width || !layout.height) return;\r\n const size = 26;\r\n const half = size / 2;\r\n const left = clamp(x - half, 0, Math.max(0, layout.width - size));\r\n const top = clamp(y - half, 0, Math.max(0, layout.height - size));\r\n const bounds = {\r\n x: left / layout.width,\r\n y: top / layout.height,\r\n width: size / layout.width,\r\n height: size / layout.height,\r\n };\r\n await selectFromBounds(bounds);\r\n };\r\n\r\n const getTouchDistance = (touches: Array<{ pageX: number; pageY: number }>) => {\r\n if (touches.length < 2) return 0;\r\n const [a, b] = touches;\r\n return Math.hypot(b.pageX - a.pageX, b.pageY - a.pageY);\r\n };\r\n\r\n const shouldHandlePinch = (touches: Array<{ pageX: number; pageY: number }>) => isNative && touches.length === 2;\r\n\r\n const handlePinchStart = (touches: Array<{ pageX: number; pageY: number }>) => {\r\n if (!shouldHandlePinch(touches)) return;\r\n pinchRef.current = { distance: getTouchDistance(touches), zoom };\r\n };\r\n\r\n const handlePinchMove = (touches: Array<{ pageX: number; pageY: number }>) => {\r\n if (!shouldHandlePinch(touches) || !pinchRef.current) return;\r\n const distance = getTouchDistance(touches);\r\n if (!distance) return;\r\n const scale = distance / pinchRef.current.distance;\r\n const nextZoom = clamp(pinchRef.current.zoom * scale, 0.5, 4.0);\r\n setDocumentState({ zoom: nextZoom });\r\n engine.setZoom(nextZoom);\r\n };\r\n\r\n const handlePinchEnd = () => {\r\n pinchRef.current = null;\r\n };\r\n\r\n const handlePress = (event: GestureResponderEvent) => {\r\n if (!layout.width || !layout.height) return;\r\n if (selectionRects.length > 0 || selectionBounds) {\r\n clearSelection();\r\n return;\r\n }\r\n setSelectedAnnotation(null);\r\n if (!isNative) return;\r\n\r\n const { locationX, locationY } = event.nativeEvent;\r\n const now = Date.now();\r\n const lastTap = lastTapRef.current;\r\n lastTapRef.current = { time: now, x: locationX, y: locationY };\r\n\r\n if (!lastTap) return;\r\n const timeDelta = now - lastTap.time;\r\n const distance = Math.hypot(locationX - lastTap.x, locationY - lastTap.y);\r\n if (timeDelta < 280 && distance < 24) {\r\n void selectAtPoint(locationX, locationY);\r\n }\r\n };\r\n\r\n const selectionEnabled = Platform.OS === 'web';\r\n void selectionText;\r\n\r\n const panResponder = useMemo(\r\n () =>\r\n PanResponder.create({\r\n onStartShouldSetPanResponder: () => selectionEnabled,\r\n onMoveShouldSetPanResponder: () => selectionEnabled,\r\n onPanResponderGrant: (event) => {\r\n if (!selectionEnabled || !layout.width || !layout.height) return;\r\n const { locationX, locationY } = event.nativeEvent;\r\n selectionStart.current = { x: locationX, y: locationY };\r\n setIsSelecting(true);\r\n const rect = { x: locationX, y: locationY, width: 0, height: 0 };\r\n selectionRectRef.current = rect;\r\n setSelectionRect(rect);\r\n },\r\n onPanResponderMove: (_, gestureState) => {\r\n if (!selectionEnabled || !selectionStart.current) return;\r\n const start = selectionStart.current;\r\n const currentX = start.x + gestureState.dx;\r\n const currentY = start.y + gestureState.dy;\r\n const left = Math.max(0, Math.min(start.x, currentX));\r\n const top = Math.max(0, Math.min(start.y, currentY));\r\n const right = Math.min(layout.width, Math.max(start.x, currentX));\r\n const bottom = Math.min(layout.height, Math.max(start.y, currentY));\r\n const rect = { x: left, y: top, width: right - left, height: bottom - top };\r\n selectionRectRef.current = rect;\r\n setSelectionRect(rect);\r\n },\r\n onPanResponderRelease: async () => {\r\n const rect = selectionRectRef.current;\r\n if (!selectionEnabled || !rect || !layout.width || !layout.height) {\r\n setIsSelecting(false);\r\n selectionStart.current = null;\r\n return;\r\n }\r\n setIsSelecting(false);\r\n selectionStart.current = null;\r\n\r\n const minSize = 6;\r\n if (rect.width < minSize || rect.height < minSize) {\r\n clearSelection();\r\n return;\r\n }\r\n\r\n const normalized = {\r\n x: rect.x / layout.width,\r\n y: rect.y / layout.height,\r\n width: rect.width / layout.width,\r\n height: rect.height / layout.height,\r\n };\r\n\r\n await selectFromBounds(normalized);\r\n setSelectionRect(null);\r\n },\r\n }),\r\n [selectionEnabled, layout.width, layout.height, engine, pageIndex]\r\n );\r\n\r\n const selectionBoundsPx = useMemo(() => {\r\n if (!selectionBounds || !layout.width || !layout.height) return null;\r\n return {\r\n x: selectionBounds.x * layout.width,\r\n y: selectionBounds.y * layout.height,\r\n width: selectionBounds.width * layout.width,\r\n height: selectionBounds.height * layout.height,\r\n };\r\n }, [selectionBounds, layout.width, layout.height]);\r\n\r\n const createHandleResponder = (handle: 'start' | 'end') =>\r\n PanResponder.create({\r\n onStartShouldSetPanResponder: () => true,\r\n onMoveShouldSetPanResponder: () => true,\r\n onPanResponderGrant: () => {\r\n selectionBoundsStart.current = selectionBoundsRef.current;\r\n },\r\n onPanResponderMove: (_, gestureState) => {\r\n const start = selectionBoundsStart.current;\r\n if (!start || !layout.width || !layout.height) return;\r\n const dx = gestureState.dx / layout.width;\r\n const dy = gestureState.dy / layout.height;\r\n const minSize = 0.01;\r\n let next = { ...start };\r\n\r\n if (handle === 'start') {\r\n const newX = clamp(start.x + dx, 0, start.x + start.width - minSize);\r\n const newY = clamp(start.y + dy, 0, start.y + start.height - minSize);\r\n next = {\r\n x: newX,\r\n y: newY,\r\n width: start.x + start.width - newX,\r\n height: start.y + start.height - newY,\r\n };\r\n } else {\r\n const maxX = clamp(start.x + start.width + dx, start.x + minSize, 1);\r\n const maxY = clamp(start.y + start.height + dy, start.y + minSize, 1);\r\n next = {\r\n x: start.x,\r\n y: start.y,\r\n width: maxX - start.x,\r\n height: maxY - start.y,\r\n };\r\n }\r\n\r\n selectionBoundsRef.current = next;\r\n setSelectionBounds(next);\r\n },\r\n onPanResponderRelease: async () => {\r\n const next = selectionBoundsRef.current;\r\n selectionBoundsStart.current = null;\r\n if (!next) return;\r\n await selectFromBounds(next);\r\n },\r\n onPanResponderTerminate: () => {\r\n selectionBoundsStart.current = null;\r\n },\r\n });\r\n\r\n const startHandleResponder = useMemo(\r\n () => createHandleResponder('start'),\r\n [layout.width, layout.height, engine, pageIndex]\r\n );\r\n\r\n const endHandleResponder = useMemo(\r\n () => createHandleResponder('end'),\r\n [layout.width, layout.height, engine, pageIndex]\r\n );\r\n\r\n const applySelection = (type: 'highlight' | 'strikeout' | 'comment') => {\r\n if (selectionRects.length === 0) return;\r\n\r\n if (type === 'comment') {\r\n const first = selectionRects[0];\r\n addAnnotationAt(first.x, first.y, Math.max(0.08, first.width), Math.max(0.06, first.height), 'comment');\r\n clearSelection();\r\n return;\r\n }\r\n\r\n selectionRects.forEach((rect) => {\r\n addAnnotationAt(rect.x, rect.y, rect.width, rect.height, type);\r\n });\r\n clearSelection();\r\n };\r\n\r\n const themeOverlayStyle = useMemo(() => {\r\n switch (pageTheme) {\r\n case 'sepia':\r\n return styles.themeSepia;\r\n case 'dark':\r\n return styles.themeDark;\r\n case 'high-contrast':\r\n return styles.themeContrast;\r\n default:\r\n return styles.themeNone;\r\n }\r\n }, [pageTheme]);\r\n\r\n const aspectRatio =\r\n pageSize && pageSize.width > 0 && pageSize.height > 0 ? pageSize.width / pageSize.height : 0.77;\r\n const containerWidth = availableWidth ?? windowWidth;\r\n const baseWidth = containerWidth * 0.92;\r\n const pageWidth = isAndroid ? baseWidth * zoom : baseWidth;\r\n const pageHeight = pageWidth / aspectRatio;\r\n const scrollEnabled = isAndroid && zoom > 1;\r\n\r\n return (\r\n <ScrollView\r\n horizontal\r\n scrollEnabled={scrollEnabled}\r\n showsHorizontalScrollIndicator={false}\r\n contentContainerStyle={[styles.scrollContent, { paddingHorizontal: horizontalPadding }]}\r\n >\r\n <Pressable\r\n {...panResponder.panHandlers}\r\n style={[styles.container, { width: pageWidth, height: pageHeight, marginBottom: spacing }]}\r\n onLayout={handleLayout}\r\n onPress={handlePress}\r\n onStartShouldSetResponder={(event) => shouldHandlePinch(event.nativeEvent.touches)}\r\n onMoveShouldSetResponder={(event) => shouldHandlePinch(event.nativeEvent.touches)}\r\n onResponderGrant={(event) => handlePinchStart(event.nativeEvent.touches)}\r\n onResponderMove={(event) => handlePinchMove(event.nativeEvent.touches)}\r\n onResponderRelease={handlePinchEnd}\r\n onResponderTerminate={handlePinchEnd}\r\n >\r\n <PageViewComponent ref={viewRef} style={styles.page} />\r\n <View pointerEvents=\"none\" style={[styles.themeOverlay, themeOverlayStyle]} />\r\n <View pointerEvents=\"box-none\" style={styles.selectionLayer}>\r\n <View pointerEvents=\"none\">\r\n {selectionRects.map((rect, index) => {\r\n const style = {\r\n left: `${rect.x * 100}%`,\r\n top: `${rect.y * 100}%`,\r\n width: `${rect.width * 100}%`,\r\n height: `${rect.height * 100}%`,\r\n } as const;\r\n return <View key={`sel-${index}`} style={[styles.selectionHighlight, style]} />;\r\n })}\r\n </View>\r\n {selectionBoundsPx ? (\r\n <View\r\n pointerEvents=\"box-none\"\r\n style={[\r\n styles.selectionOutline,\r\n {\r\n left: selectionBoundsPx.x,\r\n top: selectionBoundsPx.y,\r\n width: selectionBoundsPx.width,\r\n height: selectionBoundsPx.height,\r\n borderColor: accentColor,\r\n },\r\n ]}\r\n >\r\n <View\r\n {...startHandleResponder.panHandlers}\r\n style={[styles.selectionHandle, { left: -8, top: -8, borderColor: accentColor }]}\r\n />\r\n <View\r\n {...endHandleResponder.panHandlers}\r\n style={[styles.selectionHandle, { right: -8, bottom: -8, borderColor: accentColor }]}\r\n />\r\n </View>\r\n ) : null}\r\n {isSelecting && selectionRect ? (\r\n <View\r\n pointerEvents=\"none\"\r\n style={[\r\n styles.selectionOutline,\r\n {\r\n left: selectionRect.x,\r\n top: selectionRect.y,\r\n width: selectionRect.width,\r\n height: selectionRect.height,\r\n borderColor: accentColor,\r\n },\r\n ]}\r\n />\r\n ) : null}\r\n </View>\r\n <View pointerEvents=\"none\" style={styles.searchLayer}>\r\n {pageSearchHits.map(({ result, index }) => {\r\n if (!result.rects || result.rects.length === 0) return null;\r\n return result.rects.map((rect, rectIndex) => {\r\n if (rect.width <= 0 || rect.height <= 0) return null;\r\n const isActive = index === activeSearchIndex;\r\n const highlightStyle = {\r\n left: `${rect.x * 100}%`,\r\n top: `${rect.y * 100}%`,\r\n width: `${rect.width * 100}%`,\r\n height: `${rect.height * 100}%`,\r\n } as const;\r\n return (\r\n <View\r\n key={`${index}-${rectIndex}`}\r\n style={[\r\n styles.searchHighlight,\r\n { borderColor: accentColor, backgroundColor: `${accentColor}26` },\r\n isActive && styles.searchHighlightActive,\r\n isActive && { borderColor: accentColor, backgroundColor: `${accentColor}40` },\r\n highlightStyle,\r\n ]}\r\n />\r\n );\r\n });\r\n })}\r\n </View>\r\n <View pointerEvents=\"box-none\" style={styles.annotationLayer}>\r\n {pageAnnotations.map((ann) => {\r\n const isSelected = selectedAnnotationId === ann.id;\r\n const style = {\r\n left: `${ann.rect.x * 100}%`,\r\n top: `${ann.rect.y * 100}%`,\r\n width: `${ann.rect.width * 100}%`,\r\n height: `${ann.rect.height * 100}%`,\r\n backgroundColor: ann.type === 'highlight' ? `${ann.color}66` : 'transparent',\r\n borderBottomWidth: ann.type === 'strikeout' ? 3 : 0,\r\n borderBottomColor: ann.type === 'strikeout' ? ann.color : 'transparent',\r\n } as const;\r\n\r\n return (\r\n <Pressable\r\n key={ann.id}\r\n onPress={() => setSelectedAnnotation(ann.id)}\r\n style={[\r\n styles.annotation,\r\n style,\r\n isSelected && styles.annotationSelected,\r\n isSelected && { borderColor: accentColor },\r\n ]}\r\n >\r\n {(ann.type === 'comment' || ann.type === 'text') && (\r\n <View style={[styles.annotationBadge, { borderColor: ann.color }]}>\r\n <View style={[styles.annotationDot, { backgroundColor: ann.color }]} />\r\n </View>\r\n )}\r\n {isSelected && (\r\n <Pressable onPress={() => removeAnnotation(ann.id)} style={styles.deleteButton}>\r\n <View style={styles.deleteDot} />\r\n </Pressable>\r\n )}\r\n </Pressable>\r\n );\r\n })}\r\n </View>\r\n {selectionRects.length > 0 && selectionBoundsPx ? (\r\n <View\r\n pointerEvents=\"box-none\"\r\n style={[\r\n styles.selectionToolbar,\r\n {\r\n left: selectionBoundsPx.x,\r\n top:\r\n selectionBoundsPx.y + selectionBoundsPx.height + 8 > layout.height - 56\r\n ? Math.max(8, selectionBoundsPx.y - 52)\r\n : selectionBoundsPx.y + selectionBoundsPx.height + 8,\r\n },\r\n ]}\r\n >\r\n <Pressable onPress={() => applySelection('comment')} style={styles.selectionAction}>\r\n <View style={styles.selectionActionDot} />\r\n </Pressable>\r\n <Pressable onPress={() => applySelection('highlight')} style={styles.selectionAction}>\r\n <View style={[styles.selectionSwatch, { backgroundColor: annotationColor }]} />\r\n </Pressable>\r\n <Pressable onPress={() => applySelection('strikeout')} style={[styles.selectionAction, styles.selectionActionLast]}>\r\n <View style={[styles.selectionStrike, { backgroundColor: annotationColor }]} />\r\n </Pressable>\r\n </View>\r\n ) : null}\r\n </Pressable>\r\n </ScrollView>\r\n );\r\n};\r\n\r\nconst styles = StyleSheet.create({\r\n scrollContent: {\r\n alignItems: 'center',\r\n },\r\n container: {\r\n alignSelf: 'center',\r\n borderRadius: 14,\r\n backgroundColor: '#ffffff',\r\n shadowColor: '#000000',\r\n shadowOpacity: 0.12,\r\n shadowRadius: 12,\r\n shadowOffset: { width: 0, height: 6 },\r\n elevation: 4,\r\n },\r\n page: {\r\n ...StyleSheet.absoluteFillObject,\r\n backgroundColor: '#ffffff',\r\n borderRadius: 14,\r\n overflow: 'hidden',\r\n },\r\n annotationLayer: {\r\n position: 'absolute',\r\n left: 0,\r\n top: 0,\r\n right: 0,\r\n bottom: 0,\r\n },\r\n searchLayer: {\r\n position: 'absolute',\r\n left: 0,\r\n top: 0,\r\n right: 0,\r\n bottom: 0,\r\n },\r\n selectionLayer: {\r\n position: 'absolute',\r\n left: 0,\r\n top: 0,\r\n right: 0,\r\n bottom: 0,\r\n },\r\n selectionHighlight: {\r\n position: 'absolute',\r\n backgroundColor: 'rgba(245, 158, 11, 0.28)',\r\n borderRadius: 4,\r\n },\r\n selectionOutline: {\r\n position: 'absolute',\r\n borderWidth: 2,\r\n borderStyle: 'dashed',\r\n borderColor: 'rgba(37, 99, 235, 0.9)',\r\n borderRadius: 6,\r\n },\r\n selectionHandle: {\r\n position: 'absolute',\r\n width: 16,\r\n height: 16,\r\n borderRadius: 8,\r\n backgroundColor: '#ffffff',\r\n borderWidth: 2,\r\n borderColor: '#2563eb',\r\n },\r\n searchHighlight: {\r\n position: 'absolute',\r\n backgroundColor: 'rgba(59, 130, 246, 0.2)',\r\n borderWidth: 1,\r\n borderColor: 'rgba(59, 130, 246, 0.35)',\r\n borderRadius: 4,\r\n },\r\n searchHighlightActive: {\r\n backgroundColor: 'rgba(59, 130, 246, 0.35)',\r\n borderColor: '#3b82f6',\r\n },\r\n themeOverlay: {\r\n ...StyleSheet.absoluteFillObject,\r\n borderRadius: 14,\r\n },\r\n themeNone: {\r\n backgroundColor: 'transparent',\r\n },\r\n themeSepia: {\r\n backgroundColor: 'rgba(244, 236, 216, 0.35)',\r\n },\r\n themeDark: {\r\n backgroundColor: 'rgba(0, 0, 0, 0.2)',\r\n },\r\n themeContrast: {\r\n backgroundColor: 'rgba(0, 0, 0, 0.35)',\r\n },\r\n annotation: {\r\n position: 'absolute',\r\n },\r\n annotationSelected: {\r\n borderWidth: 1,\r\n borderColor: '#3b82f6',\r\n },\r\n annotationBadge: {\r\n position: 'absolute',\r\n left: 4,\r\n top: 4,\r\n width: 14,\r\n height: 14,\r\n borderRadius: 7,\r\n borderWidth: 1,\r\n backgroundColor: '#ffffff',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n annotationDot: {\r\n width: 6,\r\n height: 6,\r\n borderRadius: 3,\r\n },\r\n deleteButton: {\r\n position: 'absolute',\r\n right: -8,\r\n top: -8,\r\n width: 20,\r\n height: 20,\r\n borderRadius: 10,\r\n backgroundColor: '#ef4444',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n deleteDot: {\r\n width: 8,\r\n height: 2,\r\n backgroundColor: '#ffffff',\r\n borderRadius: 2,\r\n },\r\n selectionToolbar: {\r\n position: 'absolute',\r\n paddingHorizontal: 10,\r\n paddingVertical: 8,\r\n borderRadius: 14,\r\n backgroundColor: '#111827',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n },\r\n selectionAction: {\r\n width: 28,\r\n height: 28,\r\n borderRadius: 10,\r\n backgroundColor: '#1f2937',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginRight: 10,\r\n },\r\n selectionActionLast: {\r\n marginRight: 0,\r\n },\r\n selectionActionDot: {\r\n width: 8,\r\n height: 8,\r\n borderRadius: 4,\r\n backgroundColor: '#f9fafb',\r\n },\r\n selectionSwatch: {\r\n width: 14,\r\n height: 14,\r\n borderRadius: 7,\r\n borderWidth: 1,\r\n borderColor: '#ffffff',\r\n },\r\n selectionStrike: {\r\n width: 14,\r\n height: 3,\r\n borderRadius: 3,\r\n },\r\n});\r\n\r\nexport default PageRenderer;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { View, Text, Pressable, StyleSheet } from 'react-native';\r\nimport { useViewerStore } from '@papyrus-sdk/core';\r\nimport { IconSettings, IconChevronLeft, IconChevronRight } from '../icons';\r\nimport { DocumentEngine } from '@papyrus-sdk/types';\r\n\r\ninterface TopbarProps {\r\n engine: DocumentEngine;\r\n onOpenSettings?: () => void;\r\n}\r\n\r\nconst Topbar: React.FC<TopbarProps> = ({ engine, onOpenSettings }) => {\r\n const {\r\n currentPage,\r\n pageCount,\r\n uiTheme,\r\n setDocumentState,\r\n triggerScrollToPage,\r\n accentColor,\r\n } = useViewerStore();\r\n const [pageLabel, setPageLabel] = useState(`${currentPage}`);\r\n const isDark = uiTheme === 'dark';\r\n const navIconColor = isDark ? '#e5e7eb' : '#111827';\r\n\r\n useEffect(() => {\r\n setPageLabel(`${currentPage}`);\r\n }, [currentPage]);\r\n\r\n const handlePageChange = (delta: number) => {\r\n const next = Math.max(1, Math.min(pageCount, currentPage + delta));\r\n engine.goToPage(next);\r\n setDocumentState({ currentPage: next });\r\n triggerScrollToPage(next - 1);\r\n };\r\n\r\n return (\r\n <View style={[styles.container, isDark && styles.containerDark]}>\r\n <View style={styles.leftGroup}>\r\n <View style={[styles.logoBadge, { backgroundColor: accentColor }]}>\r\n <Text style={styles.logoText}>P</Text>\r\n </View>\r\n <Text style={[styles.brandText, isDark && styles.brandTextDark]}>Papyrus</Text>\r\n </View>\r\n\r\n <View style={styles.pageGroup}>\r\n <Pressable onPress={() => handlePageChange(-1)} style={[styles.pageButton, isDark && styles.pageButtonDark]}>\r\n <IconChevronLeft size={16} color={navIconColor} />\r\n </Pressable>\r\n <Text style={[styles.pageIndicator, isDark && styles.pageIndicatorDark]}>\r\n {pageLabel}/{pageCount}\r\n </Text>\r\n <Pressable onPress={() => handlePageChange(1)} style={[styles.pageButton, isDark && styles.pageButtonDark]}>\r\n <IconChevronRight size={16} color={navIconColor} />\r\n </Pressable>\r\n </View>\r\n\r\n <View style={styles.rightGroup}>\r\n <Pressable\r\n onPress={() => onOpenSettings?.()}\r\n style={[styles.iconButton, isDark && styles.iconButtonDark]}\r\n >\r\n <IconSettings size={16} color={isDark ? '#e5e7eb' : '#111827'} />\r\n </Pressable>\r\n </View>\r\n </View>\r\n );\r\n};\r\n\r\nconst styles = StyleSheet.create({\r\n container: {\r\n paddingHorizontal: 14,\r\n paddingVertical: 8,\r\n backgroundColor: '#ffffff',\r\n borderBottomWidth: 1,\r\n borderBottomColor: '#e5e7eb',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n },\r\n containerDark: {\r\n backgroundColor: '#0f1115',\r\n borderBottomColor: '#1f2937',\r\n },\r\n leftGroup: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n flex: 1,\r\n },\r\n logoBadge: {\r\n width: 26,\r\n height: 26,\r\n borderRadius: 8,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor: '#2563eb',\r\n marginRight: 8,\r\n },\r\n logoText: {\r\n color: '#ffffff',\r\n fontWeight: '800',\r\n fontSize: 13,\r\n },\r\n brandText: {\r\n fontSize: 14,\r\n fontWeight: '800',\r\n color: '#111827',\r\n },\r\n brandTextDark: {\r\n color: '#f9fafb',\r\n },\r\n pageGroup: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n flex: 1,\r\n justifyContent: 'center',\r\n },\r\n pageButton: {\r\n width: 26,\r\n height: 26,\r\n borderRadius: 10,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor: '#f3f4f6',\r\n },\r\n pageButtonDark: {\r\n backgroundColor: '#111827',\r\n },\r\n pageButtonText: {\r\n fontSize: 11,\r\n fontWeight: '600',\r\n color: '#111827',\r\n },\r\n pageButtonTextDark: {\r\n color: '#e5e7eb',\r\n },\r\n pageIndicator: {\r\n fontSize: 12,\r\n color: '#374151',\r\n minWidth: 52,\r\n textAlign: 'center',\r\n marginHorizontal: 6,\r\n fontWeight: '700',\r\n },\r\n pageIndicatorDark: {\r\n color: '#d1d5db',\r\n },\r\n rightGroup: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n flex: 1,\r\n },\r\n iconButton: {\r\n paddingHorizontal: 10,\r\n paddingVertical: 6,\r\n borderRadius: 10,\r\n backgroundColor: '#f3f4f6',\r\n marginLeft: 6,\r\n },\r\n iconButtonDark: {\r\n backgroundColor: '#111827',\r\n },\r\n iconButtonActive: {\r\n backgroundColor: '#2563eb',\r\n },\r\n iconButtonText: {\r\n fontSize: 11,\r\n fontWeight: '700',\r\n color: '#111827',\r\n },\r\n iconButtonTextDark: {\r\n color: '#e5e7eb',\r\n },\r\n iconButtonTextActive: {\r\n color: '#ffffff',\r\n },\r\n iconRow: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n },\r\n iconRowSpacer: {\r\n width: 6,\r\n },\r\n});\r\n\r\nexport default Topbar;\r\n","import React from 'react';\nimport Svg, { Path } from 'react-native-svg';\n\ntype IconProps = {\n size?: number;\n color?: string;\n strokeWidth?: number;\n};\n\nconst defaultColor = '#111827';\n\nexport const IconDocument: React.FC<IconProps> = ({ size = 20, color = defaultColor, strokeWidth = 2 }) => (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n <Path\n d=\"M10 3v4a1 1 0 0 1-1 1H5m14-4v16a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V7.914a1 1 0 0 1 .293-.707l3.914-3.914A1 1 0 0 1 9.914 3H18a1 1 0 0 1 1 1Z\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinejoin=\"round\"\n />\n </Svg>\n);\n\nexport const IconGrid: React.FC<IconProps> = ({ size = 20, color = defaultColor, strokeWidth = 2 }) => (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n <Path\n d=\"M9.143 4H4.857A.857.857 0 0 0 4 4.857v4.286c0 .473.384.857.857.857h4.286A.857.857 0 0 0 10 9.143V4.857A.857.857 0 0 0 9.143 4Zm10 0h-4.286a.857.857 0 0 0-.857.857v4.286c0 .473.384.857.857.857h4.286A.857.857 0 0 0 20 9.143V4.857A.857.857 0 0 0 19.143 4Zm-10 10H4.857a.857.857 0 0 0-.857.857v4.286c0 .473.384.857.857.857h4.286a.857.857 0 0 0 .857-.857v-4.286A.857.857 0 0 0 9.143 14Zm10 0h-4.286a.857.857 0 0 0-.857.857v4.286c0 .473.384.857.857.857h4.286a.857.857 0 0 0 .857-.857v-4.286a.857.857 0 0 0-.857-.857Z\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n);\n\nexport const IconSearch: React.FC<IconProps> = ({ size = 20, color = defaultColor, strokeWidth = 2 }) => (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n <Path\n d=\"m21 21-3.5-3.5M17 10a7 7 0 1 1-14 0 7 7 0 0 1 14 0Z\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n />\n </Svg>\n);\n\nexport const IconZoomIn: React.FC<IconProps> = ({ size = 18, color = defaultColor, strokeWidth = 2 }) => (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n <Path d=\"M5 12h14m-7 7V5\" stroke={color} strokeWidth={strokeWidth} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </Svg>\n);\n\nexport const IconZoomOut: React.FC<IconProps> = ({ size = 18, color = defaultColor, strokeWidth = 2 }) => (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n <Path d=\"M5 12h14\" stroke={color} strokeWidth={strokeWidth} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </Svg>\n);\n\nexport const IconSettings: React.FC<IconProps> = ({ size = 20, color = defaultColor, strokeWidth = 2 }) => (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n <Path\n d=\"M21 13v-2a1 1 0 0 0-1-1h-.757l-.707-1.707.535-.536a1 1 0 0 0 0-1.414l-1.414-1.414a1 1 0 0 0-1.414 0l-.536.535L14 4.757V4a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1v.757l-1.707.707-.536-.535a1 1 0 0 0-1.414 0L4.929 6.343a1 1 0 0 0 0 1.414l.536.536L4.757 10H4a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h.757l.707 1.707-.535.536a1 1 0 0 0 0 1.414l1.414 1.414a1 1 0 0 0 1.414 0l.536-.535 1.707.707V20a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-.757l1.707-.708.536.536a1 1 0 0 0 1.414 0l1.414-1.414a1 1 0 0 0 0-1.414l-.535-.536.707-1.707H20a1 1 0 0 0 1-1Z\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <Path\n d=\"M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n);\n\nexport const IconComment: React.FC<IconProps> = ({ size = 20, color = defaultColor, strokeWidth = 2 }) => (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n <Path\n d=\"M7.556 8.5h8m-8 3.5H12m7.111-7H4.89a.896.896 0 0 0-.629.256.868.868 0 0 0-.26.619v9.25c0 .232.094.455.26.619A.896.896 0 0 0 4.89 16H9l3 4 3-4h4.111a.896.896 0 0 0 .629-.256.868.868 0 0 0 .26-.619v-9.25a.868.868 0 0 0-.26-.619.896.896 0 0 0-.63-.256Z\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n);\n\nexport const IconCursor: React.FC<IconProps> = ({ size = 20, color = defaultColor, strokeWidth = 2 }) => (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n <Path\n d=\"M9 20H5.5c-.27614 0-.5-.2239-.5-.5v-3c0-.2761.22386-.5.5-.5h13c.2761 0 .5.2239.5.5v3c0 .2761-.2239.5-.5.5H18m-6-1 1.42 1.8933c.04.0534.12.0534.16 0L15 19m-7-6 3.9072-9.76789c.0335-.08381.1521-.08381.1856 0L16 13m-8 0H7m1 0h1.5m6.5 0h-1.5m1.5 0h1m-7-3.00001h4\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n />\n </Svg>\n);\n\nexport const IconPalette: React.FC<IconProps> = ({ size = 20, color = defaultColor, strokeWidth = 2 }) => (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n <Path\n d=\"M12 7h.01m3.486 1.513h.01m-6.978 0h.01M6.99 12H7m9 4h2.706a1.957 1.957 0 0 0 1.883-1.325A9 9 0 1 0 3.043 12.89 9.1 9.1 0 0 0 8.2 20.1a8.62 8.62 0 0 0 3.769.9 2.013 2.013 0 0 0 2.03-2v-.857A2.036 2.036 0 0 1 16 16Z\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n);\n\nexport const IconTrash: React.FC<IconProps> = ({ size = 20, color = defaultColor, strokeWidth = 2 }) => (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n <Path\n d=\"M5 7h14m-9 3v8m4-8v8M10 3h4a1 1 0 0 1 1 1v3H9V4a1 1 0 0 1 1-1ZM6 7h12v13a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V7Z\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n);\n\nexport const IconLink: React.FC<IconProps> = ({ size = 20, color = defaultColor, strokeWidth = 2 }) => (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n <Path\n d=\"M13.213 9.787a3.391 3.391 0 0 0-4.795 0l-3.425 3.426a3.39 3.39 0 0 0 4.795 4.794l.321-.304m-.321-4.49a3.39 3.39 0 0 0 4.795 0l3.424-3.426a3.39 3.39 0 0 0-4.794-4.795l-1.028.961\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n);\n\nexport const IconEdit: React.FC<{ size?: number; color?: string }> = ({ size = 18, color = defaultColor }) => (\n <Svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\">\n <Path\n d=\"M5 1a2 2 0 0 0-2 2v9.998a2 2 0 0 0 2 2h1.046l.25-1H5a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1h3v2.5A1.5 1.5 0 0 0 9.498 6h2.5v1.44a2.535 2.535 0 0 1 1-.405V5.413a1.5 1.5 0 0 0-.44-1.06L9.645 1.439A1.5 1.5 0 0 0 8.585 1H5Zm6.791 4H9.5a.5.5 0 0 1-.5-.5V2.206l2.792 2.792Zm1.207 3.06a1.56 1.56 0 0 0-.662.394L8.05 12.74a2.777 2.777 0 0 0-.722 1.257l-.009.033l-.302 1.211a.61.61 0 0 0 .738.74l1.211-.303a2.776 2.776 0 0 0 1.29-.73l4.288-4.288a1.56 1.56 0 0 0-1.545-2.6Z\"\n fill={color}\n />\n </Svg>\n);\n\nexport const IconChevronRight: React.FC<IconProps> = ({ size = 18, color = defaultColor, strokeWidth = 2 }) => (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n <Path\n d=\"m9 5 7 7-7 7\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n);\n\nexport const IconChevronLeft: React.FC<IconProps> = ({ size = 18, color = defaultColor, strokeWidth = 2 }) => (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n <Path\n d=\"m15 19-7-7 7-7\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n);\n\nexport const IconHand: React.FC<{ size?: number; color?: string }> = ({ size = 20, color = '#111827' }) => (\n <Svg width={size} height={size} viewBox=\"0 0 56 56\" fill=\"none\">\n <Path\n d=\"M25.129 53.512c8.25 0 14.039-4.477 17.156-13.266l4.125-11.602c1.031-2.93.094-5.343-2.344-6.234c-2.18-.797-4.336.14-5.367 2.555l-1.523 3.75c-.047.094-.117.164-.211.164c-.117 0-.164-.094-.164-.211V9.871c0-2.742-1.711-4.453-4.336-4.453c-.961 0-1.828.328-2.485.938c-.304-2.391-1.851-3.868-4.171-3.868c-2.274 0-3.868 1.524-4.22 3.82c-.585-.585-1.429-.89-2.273-.89c-2.437 0-4.054 1.688-4.054 4.29v2.6c-.633-.656-1.57-1.007-2.578-1.007c-2.438 0-4.125 1.804-4.125 4.43v20.132c0 10.969 6.656 17.649 16.57 17.649m-.117-3.258c-8.297 0-13.36-5.32-13.36-14.766v-19.43c0-.984.633-1.687 1.618-1.687c.96 0 1.664.703 1.664 1.688v11.976c0 .867.703 1.453 1.453 1.453c.797 0 1.523-.586 1.523-1.453V10.13c0-1.008.633-1.688 1.594-1.688c.984 0 1.664.68 1.664 1.688v16.71c0 .868.703 1.454 1.477 1.454c.796 0 1.523-.586 1.523-1.453V7.223c0-.985.656-1.711 1.64-1.711c.938 0 1.618.726 1.618 1.71V26.84c0 .82.656 1.453 1.476 1.453c.797 0 1.5-.633 1.5-1.453V10.129c0-1.008.68-1.688 1.641-1.688c.984 0 1.64.68 1.64 1.688V33.19c0 1.078.68 1.852 1.665 1.852c.843 0 1.547-.375 2.086-1.547l3.187-7.125c.422-1.008 1.266-1.523 2.133-1.195c.937.375 1.266 1.265.82 2.484l-4.148 11.578c-2.86 7.993-7.875 11.016-14.414 11.016\"\n fill={color}\n />\n </Svg>\n);\n","import React from 'react';\r\nimport { View, Text, Pressable, StyleSheet } from 'react-native';\r\nimport { useViewerStore } from '@papyrus-sdk/core';\r\nimport { getStrings } from '../strings';\r\n\r\nconst COLOR_SWATCHES = [\r\n '#fbbf24',\r\n '#f97316',\r\n '#ef4444',\r\n '#10b981',\r\n '#22d3ee',\r\n '#3b82f6',\r\n '#8b5cf6',\r\n '#ec4899',\r\n '#f3f4f6',\r\n '#111827',\r\n];\r\n\r\nconst ToolDock: React.FC = () => {\r\n const { selectionActive, uiTheme, locale, annotationColor, setAnnotationColor, accentColor } = useViewerStore();\r\n const isDark = uiTheme === 'dark';\r\n const isVisible = selectionActive;\r\n const t = getStrings(locale);\r\n\r\n if (!isVisible) return null;\r\n\r\n return (\r\n <View style={[styles.container, isDark && styles.containerDark]}>\r\n <Text style={[styles.title, isDark && styles.titleDark]}>{t.highlight}</Text>\r\n <View style={styles.paletteRow}>\r\n {COLOR_SWATCHES.map((color) => {\r\n const isSelected = annotationColor === color;\r\n return (\r\n <Pressable\r\n key={color}\r\n onPress={() => setAnnotationColor(color)}\r\n style={[\r\n styles.swatch,\r\n { backgroundColor: color },\r\n isSelected && styles.swatchSelected,\r\n isSelected && { borderColor: accentColor },\r\n ]}\r\n />\r\n );\r\n })}\r\n </View>\r\n </View>\r\n );\r\n};\r\n\r\nconst styles = StyleSheet.create({\r\n container: {\r\n position: 'absolute',\r\n left: 16,\r\n right: 16,\r\n bottom: 72,\r\n paddingVertical: 10,\r\n paddingHorizontal: 12,\r\n borderRadius: 16,\r\n backgroundColor: '#ffffff',\r\n borderWidth: 1,\r\n borderColor: '#e5e7eb',\r\n shadowColor: '#000000',\r\n shadowOpacity: 0.15,\r\n shadowRadius: 14,\r\n shadowOffset: { width: 0, height: 6 },\r\n elevation: 6,\r\n },\r\n containerDark: {\r\n backgroundColor: '#0f1115',\r\n borderColor: '#1f2937',\r\n },\r\n title: {\r\n fontSize: 11,\r\n fontWeight: '800',\r\n color: '#111827',\r\n marginBottom: 8,\r\n },\r\n titleDark: {\r\n color: '#e5e7eb',\r\n },\r\n paletteRow: {\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n },\r\n swatch: {\r\n width: 20,\r\n height: 20,\r\n borderRadius: 10,\r\n marginRight: 8,\r\n marginBottom: 8,\r\n borderWidth: 1,\r\n borderColor: '#e5e7eb',\r\n },\r\n swatchSelected: {\r\n borderColor: '#2563eb',\r\n borderWidth: 2,\r\n },\r\n});\r\n\r\nexport default ToolDock;\r\n","import { Locale } from '@papyrus-sdk/types';\r\n\r\ntype Strings = {\r\n pages: string;\r\n search: string;\r\n notes: string;\r\n read: string;\r\n edit: string;\r\n done: string;\r\n page: string;\r\n summary: string;\r\n pagesTab: string;\r\n summaryTab: string;\r\n searchPlaceholder: string;\r\n searchGo: string;\r\n results: string;\r\n searching: string;\r\n noResults: string;\r\n noSummary: string;\r\n noAnnotations: string;\r\n untitled: string;\r\n pageTransition: string;\r\n continuous: string;\r\n pageByPage: string;\r\n layout: string;\r\n singlePage: string;\r\n doublePage: string;\r\n rotate: string;\r\n clockwise: string;\r\n counterclockwise: string;\r\n zoom: string;\r\n highlight: string;\r\n strike: string;\r\n text: string;\r\n note: string;\r\n editNote: string;\r\n notePlaceholder: string;\r\n cancel: string;\r\n save: string;\r\n language: string;\r\n english: string;\r\n portuguese: string;\r\n appearance: string;\r\n light: string;\r\n dark: string;\r\n pageTheme: string;\r\n themeOriginal: string;\r\n themeSepia: string;\r\n themeDark: string;\r\n themeContrast: string;\r\n};\r\n\r\nconst STRINGS: Record<Locale, Strings> = {\r\n en: {\r\n pages: 'Pages',\r\n search: 'Search',\r\n notes: 'Notes',\r\n read: 'Read',\r\n edit: 'Edit',\r\n done: 'Done',\r\n page: 'Page',\r\n summary: 'Summary',\r\n pagesTab: 'Pages',\r\n summaryTab: 'Summary',\r\n searchPlaceholder: 'Search text...',\r\n searchGo: 'Go',\r\n results: 'results',\r\n searching: 'Searching...',\r\n noResults: 'No results yet.',\r\n noSummary: 'No summary available.',\r\n noAnnotations: 'No annotations yet.',\r\n untitled: 'Untitled',\r\n pageTransition: 'Page transition',\r\n continuous: 'Continuous',\r\n pageByPage: 'Page by page',\r\n layout: 'Layout',\r\n singlePage: 'Single page',\r\n doublePage: 'Double page',\r\n rotate: 'Rotate',\r\n clockwise: 'Clockwise',\r\n counterclockwise: 'Counterclockwise',\r\n zoom: 'Zoom',\r\n highlight: 'Highlight',\r\n strike: 'Strike',\r\n text: 'Text',\r\n note: 'Note',\r\n editNote: 'Edit note',\r\n notePlaceholder: 'Write your note...',\r\n cancel: 'Cancel',\r\n save: 'Save',\r\n language: 'Language',\r\n english: 'English',\r\n portuguese: 'Portuguese (BR)',\r\n appearance: 'Appearance',\r\n light: 'Light',\r\n dark: 'Dark',\r\n pageTheme: 'Page theme',\r\n themeOriginal: 'Original',\r\n themeSepia: 'Sepia',\r\n themeDark: 'Dark',\r\n themeContrast: 'High contrast',\r\n },\r\n 'pt-BR': {\r\n pages: 'Paginas',\r\n search: 'Buscar',\r\n notes: 'Notas',\r\n read: 'Ler',\r\n edit: 'Editar',\r\n done: 'Concluir',\r\n page: 'Pagina',\r\n summary: 'Sumario',\r\n pagesTab: 'Paginas',\r\n summaryTab: 'Sumario',\r\n searchPlaceholder: 'Pesquisar texto...',\r\n searchGo: 'Buscar',\r\n results: 'resultados',\r\n searching: 'Pesquisando...',\r\n noResults: 'Nenhum resultado.',\r\n noSummary: 'Sem sumario.',\r\n noAnnotations: 'Sem anotacoes.',\r\n untitled: 'Sem titulo',\r\n pageTransition: 'Transicao de pagina',\r\n continuous: 'Continuo',\r\n pageByPage: 'Pagina por pagina',\r\n layout: 'Layout',\r\n singlePage: 'Pagina unica',\r\n doublePage: 'Pagina dupla',\r\n rotate: 'Girar',\r\n clockwise: 'Sentido horario',\r\n counterclockwise: 'Sentido anti-horario',\r\n zoom: 'Zoom',\r\n highlight: 'Marca texto',\r\n strike: 'Risco',\r\n text: 'Texto',\r\n note: 'Nota',\r\n editNote: 'Editar nota',\r\n notePlaceholder: 'Escreva sua nota...',\r\n cancel: 'Cancelar',\r\n save: 'Salvar',\r\n language: 'Idioma',\r\n english: 'Ingles',\r\n portuguese: 'Portugues (BR)',\r\n appearance: 'Aparencia',\r\n light: 'Claro',\r\n dark: 'Escuro',\r\n pageTheme: 'Tema da pagina',\r\n themeOriginal: 'Original',\r\n themeSepia: 'Sepia',\r\n themeDark: 'Escuro',\r\n themeContrast: 'Contraste',\r\n },\r\n};\r\n\r\nexport const getStrings = (locale: Locale | undefined) => STRINGS[locale ?? 'en'] ?? STRINGS.en;\r\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\r\nimport {\r\n Modal,\r\n View,\r\n Text,\r\n Pressable,\r\n TextInput,\r\n StyleSheet,\r\n ScrollView,\r\n ActivityIndicator,\r\n FlatList,\r\n Dimensions,\r\n findNodeHandle,\r\n type LayoutChangeEvent,\r\n} from 'react-native';\r\nimport { useViewerStore, SearchService } from '@papyrus-sdk/core';\r\nimport { DocumentEngine, OutlineItem } from '@papyrus-sdk/types';\r\nimport { PapyrusPageView } from '@papyrus-sdk/engine-native';\r\nimport { getStrings } from '../strings';\r\nimport { IconChevronLeft, IconChevronRight } from '../icons';\r\n\r\ninterface RightSheetProps {\r\n engine: DocumentEngine;\r\n}\r\n\r\nconst withAlpha = (hex: string, alpha: number) => {\r\n const normalized = hex.replace('#', '').trim();\r\n const value =\r\n normalized.length === 3\r\n ? normalized\r\n .split('')\r\n .map((c) => c + c)\r\n .join('')\r\n : normalized;\r\n if (value.length !== 6) return hex;\r\n const r = parseInt(value.slice(0, 2), 16);\r\n const g = parseInt(value.slice(2, 4), 16);\r\n const b = parseInt(value.slice(4, 6), 16);\r\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\r\n};\r\n\r\nconst PageThumbnail: React.FC<{\r\n engine: DocumentEngine;\r\n pageIndex: number;\r\n isActive: boolean;\r\n isDark: boolean;\r\n zoom: number;\r\n cardWidth: number;\r\n frameWidth: number;\r\n frameHeight: number;\r\n accentColor: string;\r\n onPress: () => void;\r\n}> = ({ engine, pageIndex, isActive, isDark, zoom, cardWidth, frameWidth, frameHeight, accentColor, onPress }) => {\r\n const viewRef = useRef<any>(null);\r\n const [layoutReady, setLayoutReady] = useState(false);\r\n\r\n useEffect(() => {\r\n if (!layoutReady) return;\r\n const viewTag = findNodeHandle(viewRef.current);\r\n if (!viewTag) return;\r\n const renderScale = 2.0 / Math.max(zoom, 0.5);\r\n void engine.renderPage(pageIndex, viewTag, renderScale);\r\n }, [engine, pageIndex, layoutReady, zoom]);\r\n\r\n const handleLayout = (event: LayoutChangeEvent) => {\r\n if (event.nativeEvent.layout.width && event.nativeEvent.layout.height) {\r\n setLayoutReady(true);\r\n }\r\n };\r\n\r\n return (\r\n <Pressable\r\n onPress={onPress}\r\n style={[\r\n styles.thumbCard,\r\n { width: cardWidth },\r\n isDark && styles.thumbCardDark,\r\n isActive && styles.thumbCardActive,\r\n isActive && { borderColor: accentColor },\r\n ]}\r\n >\r\n <View onLayout={handleLayout} style={[styles.thumbFrame, { width: frameWidth, height: frameHeight }]}>\r\n <PapyrusPageView ref={viewRef} style={styles.thumbView} />\r\n </View>\r\n <Text style={[styles.thumbLabel, isDark && styles.thumbLabelDark]}>{pageIndex + 1}</Text>\r\n </Pressable>\r\n );\r\n};\r\n\r\nconst OutlineNode: React.FC<{\r\n item: OutlineItem;\r\n depth?: number;\r\n isDark: boolean;\r\n onSelect: (pageIndex: number) => void;\r\n untitledLabel: string;\r\n}> = ({ item, depth = 0, isDark, onSelect, untitledLabel }) => {\r\n const hasChildren = item.children && item.children.length > 0;\r\n const isClickable = item.pageIndex >= 0;\r\n\r\n return (\r\n <View>\r\n <Pressable\r\n onPress={() => {\r\n if (isClickable) onSelect(item.pageIndex);\r\n }}\r\n style={[styles.outlineRow, { paddingLeft: 12 + depth * 12 }]}\r\n >\r\n <Text\r\n style={[\r\n styles.outlineText,\r\n isDark && styles.outlineTextDark,\r\n !isClickable && styles.outlineTextMuted,\r\n ]}\r\n numberOfLines={2}\r\n >\r\n {item.title || untitledLabel}\r\n </Text>\r\n </Pressable>\r\n {hasChildren &&\n item.children!.map((child, index) => (\n <OutlineNode\n key={`${child.title}-${index}`}\n item={child}\n depth={depth + 1}\n isDark={isDark}\n onSelect={onSelect}\n untitledLabel={untitledLabel}\n />\n ))}\n </View>\n );\n};\n\r\nconst RightSheet: React.FC<RightSheetProps> = ({ engine }) => {\r\n const {\r\n sidebarRightOpen,\r\n sidebarRightTab,\r\n toggleSidebarRight,\r\n outline,\r\n searchResults,\r\n searchQuery,\r\n activeSearchIndex,\r\n nextSearchResult,\r\n prevSearchResult,\r\n annotations,\r\n uiTheme,\r\n setSearch,\r\n setDocumentState,\r\n triggerScrollToPage,\r\n setSelectedAnnotation,\r\n pageCount,\r\n currentPage,\r\n zoom,\r\n locale,\r\n accentColor,\r\n } = useViewerStore();\r\n const [pagesMode, setPagesMode] = useState<'thumbnails' | 'summary'>('thumbnails');\r\n const [query, setQuery] = useState('');\r\n const [isSearching, setIsSearching] = useState(false);\r\n const searchService = useMemo(() => new SearchService(engine), [engine]);\r\n const isDark = uiTheme === 'dark';\r\n const accentSoft = withAlpha(accentColor, 0.2);\r\n const accentStrong = withAlpha(accentColor, 0.35);\r\n const t = getStrings(locale);\r\n const sheetHeight = Math.min(640, Dimensions.get('window').height * 0.72);\r\n const windowWidth = Dimensions.get('window').width;\r\n const gridGutter = 12;\r\n const gridPadding = 16;\r\n const cardWidth = (windowWidth - gridPadding * 2 - gridGutter) / 2;\r\n const frameWidth = cardWidth - 16;\r\n const frameHeight = frameWidth * 1.28;\r\n\r\n const closeSheet = () => toggleSidebarRight();\r\n\r\n const handleSearch = async () => {\r\n const trimmed = query.trim();\r\n if (!trimmed) {\r\n setSearch('', []);\r\n return;\r\n }\r\n setIsSearching(true);\r\n try {\r\n const results = await searchService.search(trimmed);\r\n setSearch(trimmed, results);\r\n } finally {\r\n setIsSearching(false);\r\n }\r\n };\r\n\r\n const pages = useMemo(() => Array.from({ length: pageCount }, (_, i) => i), [pageCount]);\r\n\r\n const renderHighlightedSnippet = (text: string, isActive: boolean) => {\r\n const trimmedQuery = searchQuery.trim();\r\n if (trimmedQuery.length < 2) {\r\n return (\r\n <Text\r\n style={[\r\n styles.resultText,\r\n isDark && styles.resultTextDark,\r\n isActive && styles.resultTextActive,\r\n isActive && { color: accentColor },\r\n ]}\r\n >\r\n ...{text}...\r\n </Text>\r\n );\r\n }\r\n\r\n const lowerText = text.toLowerCase();\r\n const lowerQuery = trimmedQuery.toLowerCase();\r\n const parts: Array<{ text: string; match: boolean }> = [];\r\n let cursor = 0;\r\n\r\n while (cursor < text.length) {\r\n const index = lowerText.indexOf(lowerQuery, cursor);\r\n if (index === -1) {\r\n parts.push({ text: text.slice(cursor), match: false });\r\n break;\r\n }\r\n if (index > cursor) {\r\n parts.push({ text: text.slice(cursor, index), match: false });\r\n }\r\n parts.push({ text: text.slice(index, index + trimmedQuery.length), match: true });\r\n cursor = index + trimmedQuery.length;\r\n }\r\n\r\n return (\r\n <Text\r\n style={[\r\n styles.resultText,\r\n isDark && styles.resultTextDark,\r\n isActive && styles.resultTextActive,\r\n isActive && { color: accentColor },\r\n ]}\r\n >\r\n {parts.map((part, idx) => (\r\n <Text\r\n key={`${idx}-${part.text}`}\r\n style={[\r\n part.match && styles.matchText,\r\n part.match && isDark && styles.matchTextDark,\r\n part.match && isActive && styles.matchTextActive,\r\n part.match && isActive && { backgroundColor: accentStrong, color: accentColor },\r\n ]}\r\n >\r\n {part.text}\r\n </Text>\r\n ))}\r\n </Text>\r\n );\r\n };\r\n\r\n if (!sidebarRightOpen) return null;\r\n\r\n return (\r\n <Modal visible transparent animationType=\"slide\" onRequestClose={closeSheet}>\r\n <View style={styles.modalRoot}>\r\n <Pressable style={styles.backdrop} onPress={closeSheet} />\r\n <View style={[styles.sheet, { height: sheetHeight }, isDark && styles.sheetDark]}>\r\n <View style={[styles.handle, isDark && styles.handleDark]} />\r\n <View style={styles.tabs}>\r\n {['pages', 'search', 'annotations'].map((tab) => (\r\n <Pressable\r\n key={tab}\r\n onPress={() => toggleSidebarRight(tab as 'pages' | 'search' | 'annotations')}\r\n style={[\r\n styles.tabButton,\r\n isDark && styles.tabButtonDark,\r\n sidebarRightTab === tab && styles.tabButtonActive,\r\n sidebarRightTab === tab && { backgroundColor: accentColor },\r\n ]}\r\n >\r\n <Text\r\n style={[\r\n styles.tabText,\r\n isDark && styles.tabTextDark,\r\n sidebarRightTab === tab && styles.tabTextActive,\r\n ]}\r\n >\r\n {tab === 'pages' ? t.pages : tab === 'search' ? t.search : t.notes}\r\n </Text>\r\n </Pressable>\r\n ))}\r\n </View>\r\n\r\n {sidebarRightTab === 'pages' ? (\r\n <View style={styles.pagesContent}>\r\n <View style={styles.pageHeader}>\r\n <Text style={[styles.pageStatus, isDark && styles.pageStatusDark]}>\r\n {t.page} {currentPage} / {pageCount}\r\n </Text>\r\n <View style={[styles.segmented, isDark && styles.segmentedDark]}>\r\n <Pressable\r\n onPress={() => setPagesMode('thumbnails')}\r\n style={[\r\n styles.segmentButton,\r\n pagesMode === 'thumbnails' && styles.segmentButtonActive,\r\n pagesMode === 'thumbnails' && { backgroundColor: accentColor },\r\n ]}\r\n >\r\n <Text\r\n style={[\r\n styles.segmentText,\r\n isDark && styles.segmentTextDark,\r\n pagesMode === 'thumbnails' && styles.segmentTextActive,\r\n ]}\r\n >\r\n {t.pagesTab}\r\n </Text>\r\n </Pressable>\r\n <Pressable\r\n onPress={() => setPagesMode('summary')}\r\n style={[\r\n styles.segmentButton,\r\n pagesMode === 'summary' && styles.segmentButtonActive,\r\n pagesMode === 'summary' && { backgroundColor: accentColor },\r\n ]}\r\n >\r\n <Text\r\n style={[\r\n styles.segmentText,\r\n isDark && styles.segmentTextDark,\r\n pagesMode === 'summary' && styles.segmentTextActive,\r\n ]}\r\n >\r\n {t.summaryTab}\r\n </Text>\r\n </Pressable>\r\n </View>\r\n </View>\r\n {pagesMode === 'thumbnails' ? (\r\n <FlatList\r\n data={pages}\r\n keyExtractor={(item) => `thumb-${item}`}\r\n numColumns={2}\r\n contentContainerStyle={styles.thumbGrid}\r\n columnWrapperStyle={styles.thumbRow}\r\n showsVerticalScrollIndicator={false}\r\n initialNumToRender={6}\r\n renderItem={({ item }) => (\r\n <PageThumbnail\r\n engine={engine}\r\n pageIndex={item}\r\n isActive={item + 1 === currentPage}\r\n isDark={isDark}\r\n zoom={zoom}\r\n cardWidth={cardWidth}\r\n frameWidth={frameWidth}\r\n frameHeight={frameHeight}\r\n accentColor={accentColor}\r\n onPress={() => {\r\n engine.goToPage(item + 1);\r\n setDocumentState({ currentPage: item + 1 });\r\n triggerScrollToPage(item);\r\n closeSheet();\r\n }}\r\n />\r\n )}\r\n />\r\n ) : (\r\n <ScrollView contentContainerStyle={styles.summaryContent} showsVerticalScrollIndicator={false}>\r\n {outline.length === 0 ? (\r\n <Text style={[styles.emptyText, isDark && styles.emptyTextDark]}>\r\n {t.noSummary}\r\n </Text>\r\n ) : (\r\n outline.map((item, index) => (\r\n <OutlineNode\r\n key={`${item.title}-${index}`}\r\n item={item}\r\n isDark={isDark}\r\n untitledLabel={t.untitled}\r\n onSelect={(pageIndex) => {\r\n engine.goToPage(pageIndex + 1);\r\n setDocumentState({ currentPage: pageIndex + 1 });\r\n triggerScrollToPage(pageIndex);\r\n closeSheet();\r\n }}\r\n />\r\n ))\r\n )}\r\n </ScrollView>\r\n )}\r\n </View>\r\n ) : (\r\n <ScrollView contentContainerStyle={styles.content} showsVerticalScrollIndicator={false}>\r\n {sidebarRightTab === 'search' ? (\r\n <View>\r\n <View style={[styles.searchBox, isDark && styles.searchBoxDark]}>\r\n <TextInput\r\n value={query}\r\n onChangeText={setQuery}\r\n placeholder={t.searchPlaceholder}\r\n placeholderTextColor={isDark ? '#9ca3af' : '#6b7280'}\r\n style={[styles.searchInput, isDark && styles.searchInputDark]}\r\n onSubmitEditing={handleSearch}\r\n returnKeyType=\"search\"\r\n />\r\n <Pressable onPress={handleSearch} style={[styles.searchButton, { backgroundColor: accentColor }]}>\r\n <Text style={styles.searchButtonText}>{t.searchGo}</Text>\r\n </Pressable>\r\n </View>\r\n\r\n <View style={styles.searchMeta}>\r\n <Text style={[styles.searchCount, isDark && styles.searchCountDark, { color: accentColor }]}>\r\n {searchResults.length} {t.results}\r\n </Text>\r\n <View style={styles.searchNav}>\r\n <Pressable\r\n onPress={prevSearchResult}\r\n disabled={searchResults.length === 0}\r\n style={[\r\n styles.searchNavButton,\r\n isDark && styles.searchNavButtonDark,\r\n searchResults.length === 0 && styles.searchNavButtonDisabled,\r\n ]}\r\n >\r\n <IconChevronLeft size={14} color={isDark ? '#e5e7eb' : '#111827'} />\r\n </Pressable>\r\n <Pressable\r\n onPress={nextSearchResult}\r\n disabled={searchResults.length === 0}\r\n style={[\r\n styles.searchNavButton,\r\n isDark && styles.searchNavButtonDark,\r\n searchResults.length === 0 && styles.searchNavButtonDisabled,\r\n ]}\r\n >\r\n <IconChevronRight size={14} color={isDark ? '#e5e7eb' : '#111827'} />\r\n </Pressable>\r\n </View>\r\n </View>\r\n\r\n {isSearching && (\r\n <View style={styles.searchStatus}>\r\n <ActivityIndicator size=\"small\" color={accentColor} />\r\n <Text style={[styles.searchStatusText, isDark && styles.searchStatusTextDark]}>\r\n {t.searching}\r\n </Text>\r\n </View>\r\n )}\r\n\r\n {!isSearching && searchResults.length === 0 && (\r\n <Text style={[styles.emptyText, isDark && styles.emptyTextDark]}>\r\n {t.noResults}\r\n </Text>\r\n )}\r\n\r\n {!isSearching &&\r\n searchResults.map((res, idx) => {\r\n const isActive = idx === activeSearchIndex;\r\n return (\r\n <Pressable\r\n key={`${res.pageIndex}-${idx}`}\r\n onPress={() => {\r\n setDocumentState({ activeSearchIndex: idx });\r\n triggerScrollToPage(res.pageIndex);\r\n closeSheet();\r\n }}\r\n style={[\r\n styles.resultCard,\r\n isDark && styles.resultCardDark,\r\n isActive && styles.resultCardActive,\r\n isActive && { borderColor: accentColor },\r\n ]}\r\n >\r\n <Text style={[styles.resultPage, isDark && styles.resultPageDark, { color: accentColor }]}>\r\n {t.page} {res.pageIndex + 1}\r\n </Text>\r\n {renderHighlightedSnippet(res.text, isActive)}\r\n </Pressable>\r\n );\r\n })}\r\n </View>\r\n ) : (\r\n <View>\r\n {annotations.length === 0 ? (\r\n <Text style={[styles.emptyText, isDark && styles.emptyTextDark]}>\r\n {t.noAnnotations}\r\n </Text>\r\n ) : (\r\n annotations.map((ann) => (\r\n <Pressable\r\n key={ann.id}\r\n onPress={() => {\r\n setSelectedAnnotation(ann.id);\r\n triggerScrollToPage(ann.pageIndex);\r\n closeSheet();\r\n }}\r\n style={[styles.noteCard, isDark && styles.noteCardDark]}\r\n >\r\n <View style={styles.noteHeader}>\r\n <View style={[styles.noteDot, { backgroundColor: ann.color }]} />\r\n <Text style={[styles.noteTitle, isDark && styles.noteTitleDark]}>\r\n {t.page} {ann.pageIndex + 1}\r\n </Text>\r\n </View>\r\n <Text style={[styles.noteType, isDark && styles.noteTypeDark, { color: accentColor }]}>\r\n {ann.type === 'comment' || ann.type === 'text' ? t.note.toUpperCase() : ann.type.toUpperCase()}\r\n </Text>\r\n {ann.content ? (\r\n <Text style={[styles.noteContent, isDark && styles.noteContentDark]}>\r\n {ann.content}\r\n </Text>\r\n ) : null}\r\n </Pressable>\r\n ))\r\n )}\r\n </View>\r\n )}\r\n </ScrollView>\r\n )}\r\n </View>\r\n </View>\r\n </Modal>\r\n );\r\n};\r\n\r\nconst styles = StyleSheet.create({\r\n modalRoot: {\r\n flex: 1,\r\n backgroundColor: 'transparent',\r\n },\r\n backdrop: {\r\n ...StyleSheet.absoluteFillObject,\r\n backgroundColor: 'rgba(0, 0, 0, 0.4)',\r\n },\r\n sheet: {\r\n position: 'absolute',\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n backgroundColor: '#ffffff',\r\n borderTopLeftRadius: 20,\r\n borderTopRightRadius: 20,\r\n borderTopWidth: 1,\r\n borderTopColor: '#e5e7eb',\r\n paddingBottom: 16,\r\n },\r\n sheetDark: {\r\n backgroundColor: '#0f1115',\r\n borderTopColor: '#1f2937',\r\n },\r\n handle: {\r\n width: 44,\r\n height: 4,\r\n borderRadius: 999,\r\n backgroundColor: '#cbd5f5',\r\n alignSelf: 'center',\r\n marginTop: 10,\r\n marginBottom: 12,\r\n },\r\n handleDark: {\r\n backgroundColor: '#374151',\r\n },\r\n tabs: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n paddingHorizontal: 16,\r\n marginBottom: 10,\r\n },\r\n tabButton: {\r\n paddingVertical: 6,\r\n paddingHorizontal: 14,\r\n borderRadius: 999,\r\n marginRight: 8,\r\n backgroundColor: '#e5e7eb',\r\n },\r\n tabButtonDark: {\r\n backgroundColor: '#111827',\r\n },\r\n tabButtonActive: {\r\n backgroundColor: '#2563eb',\r\n },\r\n tabText: {\r\n fontSize: 12,\r\n fontWeight: '700',\r\n color: '#111827',\r\n },\r\n tabTextDark: {\r\n color: '#e5e7eb',\r\n },\r\n tabTextActive: {\r\n color: '#ffffff',\r\n },\r\n pagesContent: {\r\n paddingHorizontal: 16,\r\n flex: 1,\r\n },\r\n pageHeader: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n marginBottom: 10,\r\n },\r\n pageStatus: {\r\n fontSize: 12,\r\n fontWeight: '700',\r\n color: '#111827',\r\n },\r\n pageStatusDark: {\r\n color: '#e5e7eb',\r\n },\r\n segmented: {\r\n flexDirection: 'row',\r\n backgroundColor: '#e5e7eb',\r\n borderRadius: 999,\r\n padding: 2,\r\n },\r\n segmentedDark: {\r\n backgroundColor: '#111827',\r\n },\r\n segmentButton: {\r\n paddingHorizontal: 10,\r\n paddingVertical: 5,\r\n borderRadius: 999,\r\n },\r\n segmentButtonActive: {\r\n backgroundColor: '#2563eb',\r\n },\r\n segmentText: {\r\n fontSize: 11,\r\n fontWeight: '700',\r\n color: '#111827',\r\n },\r\n segmentTextDark: {\r\n color: '#e5e7eb',\r\n },\r\n segmentTextActive: {\r\n color: '#ffffff',\r\n },\r\n thumbGrid: {\r\n paddingHorizontal: 16,\r\n paddingBottom: 16,\r\n },\r\n thumbRow: {\r\n justifyContent: 'space-between',\r\n marginBottom: 12,\r\n },\r\n thumbCard: {\r\n padding: 8,\r\n borderRadius: 14,\r\n backgroundColor: '#f9fafb',\r\n borderWidth: 1,\r\n borderColor: '#e5e7eb',\r\n alignItems: 'center',\r\n },\r\n thumbCardDark: {\r\n backgroundColor: '#111827',\r\n borderColor: '#1f2937',\r\n },\r\n thumbCardActive: {\r\n borderColor: '#2563eb',\r\n },\r\n thumbFrame: {\r\n borderRadius: 10,\r\n backgroundColor: '#ffffff',\r\n overflow: 'hidden',\r\n },\r\n thumbView: {\r\n width: '100%',\r\n height: '100%',\r\n },\r\n thumbLabel: {\r\n marginTop: 6,\r\n fontSize: 11,\r\n fontWeight: '700',\r\n color: '#111827',\r\n },\r\n thumbLabelDark: {\r\n color: '#e5e7eb',\r\n },\r\n content: {\r\n paddingHorizontal: 16,\r\n paddingBottom: 16,\r\n },\r\n summaryContent: {\r\n paddingBottom: 24,\r\n },\r\n outlineRow: {\r\n paddingVertical: 8,\r\n borderBottomWidth: 1,\r\n borderBottomColor: 'rgba(148, 163, 184, 0.18)',\r\n },\r\n outlineText: {\r\n fontSize: 12,\r\n fontWeight: '600',\r\n color: '#111827',\r\n },\r\n outlineTextDark: {\r\n color: '#e5e7eb',\r\n },\r\n outlineTextMuted: {\r\n color: '#9ca3af',\r\n },\r\n searchBox: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n borderRadius: 10,\r\n backgroundColor: '#f3f4f6',\r\n paddingHorizontal: 12,\r\n paddingVertical: 8,\r\n borderWidth: 1,\r\n borderColor: '#e5e7eb',\r\n },\r\n searchBoxDark: {\r\n backgroundColor: '#111827',\r\n borderColor: '#1f2937',\r\n },\r\n searchInput: {\r\n flex: 1,\r\n fontSize: 12,\r\n color: '#111827',\r\n },\r\n searchInputDark: {\r\n color: '#e5e7eb',\r\n },\r\n searchButton: {\r\n paddingHorizontal: 10,\r\n paddingVertical: 4,\r\n borderRadius: 6,\r\n backgroundColor: '#2563eb',\r\n },\r\n searchButtonText: {\r\n fontSize: 11,\r\n fontWeight: '700',\r\n color: '#ffffff',\r\n },\r\n searchStatus: {\r\n marginTop: 12,\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n },\r\n searchStatusText: {\r\n marginLeft: 8,\r\n fontSize: 11,\r\n color: '#4b5563',\r\n },\r\n searchStatusTextDark: {\r\n color: '#9ca3af',\r\n },\r\n searchMeta: {\r\n marginTop: 12,\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n },\r\n searchCount: {\r\n fontSize: 11,\r\n fontWeight: '700',\r\n color: '#2563eb',\r\n },\r\n searchCountDark: {\r\n color: '#60a5fa',\r\n },\r\n searchNav: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n },\r\n searchNavButton: {\r\n width: 28,\r\n height: 28,\r\n borderRadius: 10,\r\n backgroundColor: '#e5e7eb',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginLeft: 6,\r\n },\r\n searchNavButtonDark: {\r\n backgroundColor: '#111827',\r\n },\r\n searchNavButtonDisabled: {\r\n opacity: 0.5,\r\n },\r\n emptyText: {\r\n marginTop: 16,\r\n fontSize: 12,\r\n color: '#6b7280',\r\n },\r\n emptyTextDark: {\r\n color: '#9ca3af',\r\n },\r\n resultCard: {\r\n marginTop: 12,\r\n padding: 12,\r\n borderRadius: 12,\r\n backgroundColor: '#f9fafb',\r\n borderWidth: 1,\r\n borderColor: '#e5e7eb',\r\n },\r\n resultCardDark: {\r\n backgroundColor: '#111827',\r\n borderColor: '#1f2937',\r\n },\r\n resultCardActive: {\r\n borderColor: '#2563eb',\r\n },\r\n resultPage: {\r\n fontSize: 10,\r\n fontWeight: '800',\r\n color: '#2563eb',\r\n marginBottom: 6,\r\n },\r\n resultPageDark: {\r\n color: '#60a5fa',\r\n },\r\n resultText: {\r\n fontSize: 11,\r\n color: '#374151',\r\n },\r\n resultTextDark: {\r\n color: '#d1d5db',\r\n },\r\n resultTextActive: {\r\n color: '#1d4ed8',\r\n },\r\n matchText: {\r\n backgroundColor: 'rgba(245, 158, 11, 0.3)',\r\n color: '#111827',\r\n fontWeight: '700',\r\n },\r\n matchTextDark: {\r\n backgroundColor: 'rgba(245, 158, 11, 0.25)',\r\n color: '#fde68a',\r\n },\r\n matchTextActive: {\r\n backgroundColor: 'rgba(59, 130, 246, 0.35)',\r\n color: '#1d4ed8',\r\n },\r\n noteCard: {\r\n padding: 12,\r\n borderRadius: 12,\r\n backgroundColor: '#f9fafb',\r\n borderWidth: 1,\r\n borderColor: '#e5e7eb',\r\n marginBottom: 12,\r\n },\r\n noteCardDark: {\r\n backgroundColor: '#111827',\r\n borderColor: '#1f2937',\r\n },\r\n noteHeader: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n marginBottom: 6,\r\n },\r\n noteDot: {\r\n width: 8,\r\n height: 8,\r\n borderRadius: 4,\r\n marginRight: 6,\r\n },\r\n noteTitle: {\r\n fontSize: 11,\r\n fontWeight: '700',\r\n color: '#111827',\r\n },\r\n noteTitleDark: {\r\n color: '#e5e7eb',\r\n },\r\n noteType: {\r\n fontSize: 10,\r\n fontWeight: '800',\r\n color: '#2563eb',\r\n },\r\n noteTypeDark: {\r\n color: '#60a5fa',\r\n },\r\n noteContent: {\r\n marginTop: 6,\r\n fontSize: 11,\r\n color: '#4b5563',\r\n },\r\n noteContentDark: {\r\n color: '#9ca3af',\r\n },\r\n});\r\n\r\nexport default RightSheet;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Modal, View, Text, TextInput, Pressable, StyleSheet } from 'react-native';\r\nimport { useViewerStore } from '@papyrus-sdk/core';\r\nimport { getStrings } from '../strings';\r\n\r\nconst AnnotationEditor: React.FC = () => {\r\n const { annotations, selectedAnnotationId, updateAnnotation, setSelectedAnnotation, uiTheme, locale, accentColor } =\r\n useViewerStore();\r\n const annotation = annotations.find((ann) => ann.id === selectedAnnotationId);\r\n const isEditable = annotation && (annotation.type === 'text' || annotation.type === 'comment');\r\n const [draft, setDraft] = useState('');\r\n const isDark = uiTheme === 'dark';\r\n const t = getStrings(locale);\r\n\r\n useEffect(() => {\r\n if (isEditable) {\r\n setDraft(annotation?.content ?? '');\r\n }\r\n }, [annotation?.id, isEditable]);\r\n\r\n if (!isEditable || !annotation) return null;\r\n\r\n const handleClose = () => setSelectedAnnotation(null);\r\n const handleSave = () => {\r\n updateAnnotation(annotation.id, { content: draft });\r\n setSelectedAnnotation(null);\r\n };\r\n\r\n return (\r\n <Modal visible transparent animationType=\"fade\" onRequestClose={handleClose}>\r\n <View style={styles.overlay}>\r\n <View style={[styles.card, isDark && styles.cardDark]}>\r\n <Text style={[styles.title, isDark && styles.titleDark]}>{t.editNote}</Text>\r\n <TextInput\r\n style={[styles.input, isDark && styles.inputDark]}\r\n value={draft}\r\n onChangeText={setDraft}\r\n placeholder={t.notePlaceholder}\r\n placeholderTextColor={isDark ? '#9ca3af' : '#6b7280'}\r\n multiline\r\n />\r\n <View style={styles.actions}>\r\n <Pressable onPress={handleClose} style={[styles.actionButton, styles.actionCancel]}>\r\n <Text style={styles.actionText}>{t.cancel}</Text>\r\n </Pressable>\r\n <Pressable onPress={handleSave} style={[styles.actionButton, styles.actionSave, { backgroundColor: accentColor }]}>\r\n <Text style={[styles.actionText, styles.actionTextLight]}>{t.save}</Text>\r\n </Pressable>\r\n </View>\r\n </View>\r\n </View>\r\n </Modal>\r\n );\r\n};\r\n\r\nconst styles = StyleSheet.create({\r\n overlay: {\r\n flex: 1,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor: 'rgba(0, 0, 0, 0.4)',\r\n padding: 24,\r\n },\r\n card: {\r\n width: '100%',\r\n borderRadius: 16,\r\n padding: 16,\r\n backgroundColor: '#ffffff',\r\n borderWidth: 1,\r\n borderColor: '#e5e7eb',\r\n },\r\n cardDark: {\r\n backgroundColor: '#0f1115',\r\n borderColor: '#1f2937',\r\n },\r\n title: {\r\n fontSize: 14,\r\n fontWeight: '700',\r\n color: '#111827',\r\n marginBottom: 12,\r\n },\r\n titleDark: {\r\n color: '#f9fafb',\r\n },\r\n input: {\r\n minHeight: 100,\r\n borderRadius: 12,\r\n padding: 12,\r\n backgroundColor: '#f3f4f6',\r\n color: '#111827',\r\n fontSize: 12,\r\n },\r\n inputDark: {\r\n backgroundColor: '#111827',\r\n color: '#e5e7eb',\r\n },\r\n actions: {\r\n marginTop: 16,\r\n flexDirection: 'row',\r\n justifyContent: 'flex-end',\r\n },\r\n actionButton: {\r\n paddingHorizontal: 12,\r\n paddingVertical: 8,\r\n borderRadius: 8,\r\n marginLeft: 8,\r\n },\r\n actionCancel: {\r\n backgroundColor: '#e5e7eb',\r\n },\r\n actionSave: {\r\n backgroundColor: '#2563eb',\r\n },\r\n actionText: {\r\n fontSize: 11,\r\n fontWeight: '700',\r\n color: '#111827',\r\n },\r\n actionTextLight: {\r\n color: '#ffffff',\r\n },\r\n});\r\n\r\nexport default AnnotationEditor;\r\n","import React from 'react';\r\nimport { View, Text, Pressable, StyleSheet } from 'react-native';\r\nimport { useViewerStore } from '@papyrus-sdk/core';\r\nimport { getStrings } from '../strings';\r\nimport { IconDocument, IconGrid, IconSearch, IconComment } from '../icons';\r\n\r\nconst BottomBar: React.FC = () => {\r\n const { sidebarRightOpen, sidebarRightTab, toggleSidebarRight, setDocumentState, uiTheme, locale, accentColor } = useViewerStore();\r\n const isDark = uiTheme === 'dark';\r\n const t = getStrings(locale);\r\n\r\n const isActive = (tab: 'pages' | 'search' | 'annotations') =>\r\n sidebarRightOpen && sidebarRightTab === tab;\r\n\r\n const iconColor = (active: boolean) => {\r\n if (active) return '#ffffff';\r\n return isDark ? '#e5e7eb' : '#111827';\r\n };\r\n\r\n return (\r\n <View style={[styles.container, isDark && styles.containerDark]}>\r\n <Pressable\r\n onPress={() => toggleSidebarRight('pages')}\r\n style={[styles.item, isActive('pages') && styles.itemActive]}\r\n >\r\n <View\r\n style={[\r\n styles.itemIcon,\r\n isDark && styles.itemIconDark,\r\n isActive('pages') && styles.itemIconActive,\r\n isActive('pages') && { backgroundColor: accentColor },\r\n ]}\r\n >\r\n <IconGrid size={16} color={iconColor(isActive('pages'))} />\r\n </View>\r\n <Text\r\n style={[\r\n styles.itemLabel,\r\n isDark && styles.itemLabelDark,\r\n isActive('pages') && styles.itemLabelActive,\r\n isActive('pages') && { color: accentColor },\r\n ]}\r\n >\r\n {t.pages}\r\n </Text>\r\n </Pressable>\r\n\r\n <Pressable\r\n onPress={() => toggleSidebarRight('search')}\r\n style={[styles.item, isActive('search') && styles.itemActive]}\r\n >\r\n <View\r\n style={[\r\n styles.itemIcon,\r\n isDark && styles.itemIconDark,\r\n isActive('search') && styles.itemIconActive,\r\n isActive('search') && { backgroundColor: accentColor },\r\n ]}\r\n >\r\n <IconSearch size={16} color={iconColor(isActive('search'))} />\r\n </View>\r\n <Text\r\n style={[\r\n styles.itemLabel,\r\n isDark && styles.itemLabelDark,\r\n isActive('search') && styles.itemLabelActive,\r\n isActive('search') && { color: accentColor },\r\n ]}\r\n >\r\n {t.search}\r\n </Text>\r\n </Pressable>\r\n\r\n <Pressable\r\n onPress={() => setDocumentState({ sidebarRightOpen: false })}\r\n style={[styles.item, !sidebarRightOpen && styles.itemActive]}\r\n >\r\n <View\r\n style={[\r\n styles.itemIcon,\r\n isDark && styles.itemIconDark,\r\n !sidebarRightOpen && styles.itemIconActive,\r\n !sidebarRightOpen && { backgroundColor: accentColor },\r\n ]}\r\n >\r\n <IconDocument size={16} color={iconColor(!sidebarRightOpen)} />\r\n </View>\r\n <Text\r\n style={[\r\n styles.itemLabel,\r\n isDark && styles.itemLabelDark,\r\n !sidebarRightOpen && styles.itemLabelActive,\r\n !sidebarRightOpen && { color: accentColor },\r\n ]}\r\n >\r\n {t.read}\r\n </Text>\r\n </Pressable>\r\n\r\n <Pressable\r\n onPress={() => toggleSidebarRight('annotations')}\r\n style={[styles.item, isActive('annotations') && styles.itemActive]}\r\n >\r\n <View\r\n style={[\r\n styles.itemIcon,\r\n isDark && styles.itemIconDark,\r\n isActive('annotations') && styles.itemIconActive,\r\n isActive('annotations') && { backgroundColor: accentColor },\r\n ]}\r\n >\r\n <IconComment size={16} color={iconColor(isActive('annotations'))} />\r\n </View>\r\n <Text\r\n style={[\r\n styles.itemLabel,\r\n isDark && styles.itemLabelDark,\r\n isActive('annotations') && styles.itemLabelActive,\r\n isActive('annotations') && { color: accentColor },\r\n ]}\r\n >\r\n {t.notes}\r\n </Text>\r\n </Pressable>\r\n </View>\r\n );\r\n};\r\n\r\nconst styles = StyleSheet.create({\r\n container: {\r\n flexDirection: 'row',\r\n justifyContent: 'space-around',\r\n alignItems: 'center',\r\n paddingVertical: 10,\r\n paddingHorizontal: 12,\r\n backgroundColor: '#ffffff',\r\n borderTopWidth: 1,\r\n borderTopColor: '#e5e7eb',\r\n },\r\n containerDark: {\r\n backgroundColor: '#0f1115',\r\n borderTopColor: '#1f2937',\r\n },\r\n item: {\r\n alignItems: 'center',\r\n paddingHorizontal: 6,\r\n },\r\n itemActive: {\r\n transform: [{ translateY: -2 }],\r\n },\r\n itemIcon: {\r\n width: 28,\r\n height: 28,\r\n borderRadius: 10,\r\n backgroundColor: '#e5e7eb',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginBottom: 4,\r\n },\r\n itemIconDark: {\r\n backgroundColor: '#111827',\r\n color: '#e5e7eb',\r\n },\r\n itemIconActive: {\r\n backgroundColor: '#2563eb',\r\n color: '#ffffff',\r\n },\r\n itemLabel: {\r\n fontSize: 10,\r\n fontWeight: '700',\r\n color: '#6b7280',\r\n },\r\n itemLabelDark: {\r\n color: '#9ca3af',\r\n },\r\n itemLabelActive: {\r\n color: '#2563eb',\r\n },\r\n});\r\n\r\nexport default BottomBar;\r\n","import React from 'react';\r\nimport { Modal, View, Text, Pressable, StyleSheet } from 'react-native';\r\nimport { useViewerStore } from '@papyrus-sdk/core';\r\nimport { DocumentEngine } from '@papyrus-sdk/types';\r\nimport { getStrings } from '../strings';\r\nimport { IconZoomIn, IconZoomOut } from '../icons';\r\n\r\ninterface SettingsSheetProps {\r\n engine: DocumentEngine;\r\n visible: boolean;\r\n onClose: () => void;\r\n}\r\n\r\nconst SettingsSheet: React.FC<SettingsSheetProps> = ({ engine, visible, onClose }) => {\r\n const { viewMode, uiTheme, zoom, setDocumentState, locale, accentColor, pageTheme } = useViewerStore();\r\n const isDark = uiTheme === 'dark';\r\n const isPaged = viewMode === 'single';\r\n const isDouble = viewMode === 'double';\r\n const t = getStrings(locale);\r\n\r\n const handleTransition = (mode: 'continuous' | 'paged') => {\r\n if (mode === 'paged') {\r\n setDocumentState({ viewMode: 'single' });\r\n return;\r\n }\r\n setDocumentState({ viewMode: isDouble ? 'double' : 'continuous' });\r\n };\r\n\r\n const handleLayout = (layout: 'single' | 'double') => {\r\n if (layout === 'double') {\r\n setDocumentState({ viewMode: 'double' });\r\n return;\r\n }\r\n if (viewMode === 'double') {\r\n setDocumentState({ viewMode: 'continuous' });\r\n }\r\n };\r\n\r\n const handleRotate = (direction: 'clockwise' | 'counterclockwise') => {\r\n engine.rotate(direction);\r\n setDocumentState({ rotation: engine.getRotation() });\r\n };\r\n\r\n const handleZoom = (delta: number) => {\r\n const next = Math.max(0.5, Math.min(4, zoom + delta));\r\n engine.setZoom(next);\r\n setDocumentState({ zoom: next });\r\n };\r\n\r\n if (!visible) return null;\r\n\r\n return (\r\n <Modal visible transparent animationType=\"slide\" onRequestClose={onClose}>\r\n <View style={styles.modalRoot}>\r\n <Pressable style={styles.backdrop} onPress={onClose} />\r\n <View style={[styles.sheet, isDark && styles.sheetDark]}>\r\n <View style={[styles.handle, isDark && styles.handleDark]} />\r\n\r\n <View style={styles.section}>\r\n <Text style={[styles.sectionTitle, isDark && styles.sectionTitleDark]}>{t.appearance}</Text>\r\n <View style={styles.optionRow}>\r\n <Pressable\r\n onPress={() => setDocumentState({ uiTheme: 'light' })}\r\n style={[\r\n styles.optionButton,\r\n isDark && styles.optionButtonDark,\r\n uiTheme === 'light' && styles.optionButtonActive,\r\n uiTheme === 'light' && { backgroundColor: accentColor },\r\n ]}\r\n >\r\n <Text\r\n style={[\r\n styles.optionText,\r\n isDark && styles.optionTextDark,\r\n uiTheme === 'light' && styles.optionTextActive,\r\n ]}\r\n >\r\n {t.light}\r\n </Text>\r\n </Pressable>\r\n <Pressable\r\n onPress={() => setDocumentState({ uiTheme: 'dark' })}\r\n style={[\r\n styles.optionButton,\r\n isDark && styles.optionButtonDark,\r\n uiTheme === 'dark' && styles.optionButtonActive,\r\n uiTheme === 'dark' && { backgroundColor: accentColor },\r\n ]}\r\n >\r\n <Text\r\n style={[\r\n styles.optionText,\r\n isDark && styles.optionTextDark,\r\n uiTheme === 'dark' && styles.optionTextActive,\r\n ]}\r\n >\r\n {t.dark}\r\n </Text>\r\n </Pressable>\r\n </View>\r\n </View>\r\n\r\n <View style={styles.section}>\r\n <Text style={[styles.sectionTitle, isDark && styles.sectionTitleDark]}>{t.pageTheme}</Text>\r\n <View style={styles.optionRow}>\r\n <Pressable\r\n onPress={() => setDocumentState({ pageTheme: 'normal' })}\r\n style={[\r\n styles.optionButton,\r\n isDark && styles.optionButtonDark,\r\n pageTheme === 'normal' && styles.optionButtonActive,\r\n pageTheme === 'normal' && { backgroundColor: accentColor },\r\n ]}\r\n >\r\n <Text\r\n style={[\r\n styles.optionText,\r\n isDark && styles.optionTextDark,\r\n pageTheme === 'normal' && styles.optionTextActive,\r\n ]}\r\n >\r\n {t.themeOriginal}\r\n </Text>\r\n </Pressable>\r\n <Pressable\r\n onPress={() => setDocumentState({ pageTheme: 'sepia' })}\r\n style={[\r\n styles.optionButton,\r\n isDark && styles.optionButtonDark,\r\n pageTheme === 'sepia' && styles.optionButtonActive,\r\n pageTheme === 'sepia' && { backgroundColor: accentColor },\r\n ]}\r\n >\r\n <Text\r\n style={[\r\n styles.optionText,\r\n isDark && styles.optionTextDark,\r\n pageTheme === 'sepia' && styles.optionTextActive,\r\n ]}\r\n >\r\n {t.themeSepia}\r\n </Text>\r\n </Pressable>\r\n <Pressable\r\n onPress={() => setDocumentState({ pageTheme: 'dark' })}\r\n style={[\r\n styles.optionButton,\r\n isDark && styles.optionButtonDark,\r\n pageTheme === 'dark' && styles.optionButtonActive,\r\n pageTheme === 'dark' && { backgroundColor: accentColor },\r\n ]}\r\n >\r\n <Text\r\n style={[\r\n styles.optionText,\r\n isDark && styles.optionTextDark,\r\n pageTheme === 'dark' && styles.optionTextActive,\r\n ]}\r\n >\r\n {t.themeDark}\r\n </Text>\r\n </Pressable>\r\n <Pressable\r\n onPress={() => setDocumentState({ pageTheme: 'high-contrast' })}\r\n style={[\r\n styles.optionButton,\r\n isDark && styles.optionButtonDark,\r\n pageTheme === 'high-contrast' && styles.optionButtonActive,\r\n pageTheme === 'high-contrast' && { backgroundColor: accentColor },\r\n ]}\r\n >\r\n <Text\r\n style={[\r\n styles.optionText,\r\n isDark && styles.optionTextDark,\r\n pageTheme === 'high-contrast' && styles.optionTextActive,\r\n ]}\r\n >\r\n {t.themeContrast}\r\n </Text>\r\n </Pressable>\r\n </View>\r\n </View>\r\n\r\n <View style={styles.section}>\r\n <Text style={[styles.sectionTitle, isDark && styles.sectionTitleDark]}>{t.pageTransition}</Text>\r\n <View style={styles.optionRow}>\r\n <Pressable\r\n onPress={() => handleTransition('continuous')}\r\n style={[\r\n styles.optionButton,\r\n isDark && styles.optionButtonDark,\r\n (!isPaged || isDouble) && styles.optionButtonActive,\r\n (!isPaged || isDouble) && { backgroundColor: accentColor },\r\n ]}\r\n >\r\n <Text\r\n style={[\r\n styles.optionText,\r\n isDark && styles.optionTextDark,\r\n (!isPaged || isDouble) && styles.optionTextActive,\r\n ]}\r\n >\r\n {t.continuous}\r\n </Text>\r\n </Pressable>\r\n <Pressable\r\n onPress={() => handleTransition('paged')}\r\n style={[\r\n styles.optionButton,\r\n isDark && styles.optionButtonDark,\r\n isPaged && styles.optionButtonActive,\r\n isPaged && { backgroundColor: accentColor },\r\n ]}\r\n >\r\n <Text\r\n style={[\r\n styles.optionText,\r\n isDark && styles.optionTextDark,\r\n isPaged && styles.optionTextActive,\r\n ]}\r\n >\r\n {t.pageByPage}\r\n </Text>\r\n </Pressable>\r\n </View>\r\n </View>\r\n\r\n <View style={styles.section}>\r\n <Text style={[styles.sectionTitle, isDark && styles.sectionTitleDark]}>{t.layout}</Text>\r\n <View style={styles.optionRow}>\r\n <Pressable\r\n onPress={() => handleLayout('single')}\r\n style={[\r\n styles.optionButton,\r\n isDark && styles.optionButtonDark,\r\n !isDouble && styles.optionButtonActive,\r\n !isDouble && { backgroundColor: accentColor },\r\n ]}\r\n >\r\n <Text\r\n style={[\r\n styles.optionText,\r\n isDark && styles.optionTextDark,\r\n !isDouble && styles.optionTextActive,\r\n ]}\r\n >\r\n {t.singlePage}\r\n </Text>\r\n </Pressable>\r\n <Pressable\r\n onPress={() => handleLayout('double')}\r\n style={[\r\n styles.optionButton,\r\n isDark && styles.optionButtonDark,\r\n isDouble && styles.optionButtonActive,\r\n isDouble && { backgroundColor: accentColor },\r\n ]}\r\n >\r\n <Text\r\n style={[\r\n styles.optionText,\r\n isDark && styles.optionTextDark,\r\n isDouble && styles.optionTextActive,\r\n ]}\r\n >\r\n {t.doublePage}\r\n </Text>\r\n </Pressable>\r\n </View>\r\n </View>\r\n\r\n <View style={styles.section}>\r\n <Text style={[styles.sectionTitle, isDark && styles.sectionTitleDark]}>{t.rotate}</Text>\r\n <View style={styles.optionRow}>\r\n <Pressable\r\n onPress={() => handleRotate('counterclockwise')}\r\n style={[styles.optionButton, isDark && styles.optionButtonDark]}\r\n >\r\n <Text style={[styles.optionText, isDark && styles.optionTextDark]}>{t.counterclockwise}</Text>\r\n </Pressable>\r\n <Pressable\r\n onPress={() => handleRotate('clockwise')}\r\n style={[styles.optionButton, isDark && styles.optionButtonDark]}\r\n >\r\n <Text style={[styles.optionText, isDark && styles.optionTextDark]}>{t.clockwise}</Text>\r\n </Pressable>\r\n </View>\r\n </View>\r\n\r\n <View style={styles.section}>\r\n <Text style={[styles.sectionTitle, isDark && styles.sectionTitleDark]}>{t.zoom}</Text>\r\n <View style={styles.optionRow}>\r\n <Pressable onPress={() => handleZoom(-0.1)} style={[styles.optionButton, isDark && styles.optionButtonDark]}>\r\n <IconZoomOut size={16} color={isDark ? '#e5e7eb' : '#111827'} />\r\n </Pressable>\r\n <View style={styles.zoomValue}>\r\n <Text style={[styles.zoomText, isDark && styles.zoomTextDark]}>\r\n {Math.round(zoom * 100)}%\r\n </Text>\r\n </View>\r\n <Pressable onPress={() => handleZoom(0.1)} style={[styles.optionButton, isDark && styles.optionButtonDark]}>\r\n <IconZoomIn size={16} color={isDark ? '#e5e7eb' : '#111827'} />\r\n </Pressable>\r\n </View>\r\n </View>\r\n\r\n <View style={styles.section}>\r\n <Text style={[styles.sectionTitle, isDark && styles.sectionTitleDark]}>{t.language}</Text>\r\n <View style={styles.optionRow}>\r\n <Pressable\r\n onPress={() => setDocumentState({ locale: 'en' })}\r\n style={[\r\n styles.optionButton,\r\n isDark && styles.optionButtonDark,\r\n locale === 'en' && styles.optionButtonActive,\r\n locale === 'en' && { backgroundColor: accentColor },\r\n ]}\r\n >\r\n <Text\r\n style={[\r\n styles.optionText,\r\n isDark && styles.optionTextDark,\r\n locale === 'en' && styles.optionTextActive,\r\n ]}\r\n >\r\n {t.english}\r\n </Text>\r\n </Pressable>\r\n <Pressable\r\n onPress={() => setDocumentState({ locale: 'pt-BR' })}\r\n style={[\r\n styles.optionButton,\r\n isDark && styles.optionButtonDark,\r\n locale === 'pt-BR' && styles.optionButtonActive,\r\n locale === 'pt-BR' && { backgroundColor: accentColor },\r\n ]}\r\n >\r\n <Text\r\n style={[\r\n styles.optionText,\r\n isDark && styles.optionTextDark,\r\n locale === 'pt-BR' && styles.optionTextActive,\r\n ]}\r\n >\r\n {t.portuguese}\r\n </Text>\r\n </Pressable>\r\n </View>\r\n </View>\r\n </View>\r\n </View>\r\n </Modal>\r\n );\r\n};\r\n\r\nconst styles = StyleSheet.create({\r\n modalRoot: {\r\n flex: 1,\r\n backgroundColor: 'transparent',\r\n },\r\n backdrop: {\r\n ...StyleSheet.absoluteFillObject,\r\n backgroundColor: 'rgba(0, 0, 0, 0.45)',\r\n },\r\n sheet: {\r\n position: 'absolute',\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n paddingHorizontal: 18,\r\n paddingBottom: 24,\r\n backgroundColor: '#ffffff',\r\n borderTopLeftRadius: 24,\r\n borderTopRightRadius: 24,\r\n borderTopWidth: 1,\r\n borderTopColor: '#e5e7eb',\r\n },\r\n sheetDark: {\r\n backgroundColor: '#0f1115',\r\n borderTopColor: '#1f2937',\r\n },\r\n handle: {\r\n width: 44,\r\n height: 4,\r\n borderRadius: 999,\r\n backgroundColor: '#cbd5f5',\r\n alignSelf: 'center',\r\n marginTop: 10,\r\n marginBottom: 12,\r\n },\r\n handleDark: {\r\n backgroundColor: '#374151',\r\n },\r\n section: {\r\n marginBottom: 16,\r\n },\r\n sectionTitle: {\r\n fontSize: 12,\r\n fontWeight: '800',\r\n color: '#111827',\r\n marginBottom: 8,\r\n },\r\n sectionTitleDark: {\r\n color: '#e5e7eb',\r\n },\r\n optionRow: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n flexWrap: 'wrap',\r\n },\r\n optionButton: {\r\n paddingHorizontal: 12,\r\n paddingVertical: 8,\r\n borderRadius: 12,\r\n backgroundColor: '#e5e7eb',\r\n marginRight: 8,\r\n marginBottom: 8,\r\n },\r\n optionButtonDark: {\r\n backgroundColor: '#111827',\r\n },\r\n optionButtonActive: {\r\n backgroundColor: '#2563eb',\r\n },\r\n optionText: {\r\n fontSize: 11,\r\n fontWeight: '700',\r\n color: '#111827',\r\n },\r\n optionTextDark: {\r\n color: '#e5e7eb',\r\n },\r\n optionTextActive: {\r\n color: '#ffffff',\r\n },\r\n zoomValue: {\r\n minWidth: 52,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n zoomText: {\r\n fontSize: 12,\r\n fontWeight: '700',\r\n color: '#111827',\r\n },\r\n zoomTextDark: {\r\n color: '#e5e7eb',\r\n },\r\n});\r\n\r\nexport default SettingsSheet;\r\n"],"mappings":"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","names":["useMemo","useRef","useEffect","ScrollView","StyleSheet","View","useWindowDimensions","useViewerStore","scale","jsx","jsxs","useViewerStore","useRef","useWindowDimensions","useMemo","useEffect","View","styles","ScrollView","StyleSheet","useEffect","useState","View","Pressable","StyleSheet","useViewerStore","jsx","jsxs","jsx","jsx","jsxs","useViewerStore","useState","useEffect","View","styles","Pressable","StyleSheet","View","Text","Pressable","StyleSheet","useViewerStore","jsx","jsxs","useViewerStore","View","styles","Text","Pressable","StyleSheet","useEffect","useMemo","useRef","useState","View","Text","Pressable","StyleSheet","ScrollView","FlatList","findNodeHandle","useViewerStore","PapyrusPageView","jsx","jsxs","useRef","useState","useEffect","findNodeHandle","Pressable","styles","View","PapyrusPageView","Text","useViewerStore","useMemo","FlatList","ScrollView","StyleSheet","useEffect","useState","Modal","View","Text","TextInput","Pressable","StyleSheet","useViewerStore","jsx","jsxs","useViewerStore","useState","useEffect","Modal","View","styles","Text","TextInput","Pressable","StyleSheet","View","Text","Pressable","StyleSheet","useViewerStore","jsx","jsxs","useViewerStore","View","styles","Pressable","Text","StyleSheet","Modal","View","Text","Pressable","StyleSheet","useViewerStore","jsx","jsxs","useViewerStore","Modal","View","styles","Pressable","Text","StyleSheet"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@papyrus-sdk/ui-react-native",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"main": "dist/index.cjs",
|
|
5
|
+
"module": "dist/index.mjs",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"import": "./dist/index.mjs",
|
|
11
|
+
"require": "./dist/index.cjs"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"publishConfig": {
|
|
18
|
+
"access": "public"
|
|
19
|
+
},
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"@papyrus-sdk/core": "0.1.0",
|
|
22
|
+
"@papyrus-sdk/types": "0.1.0",
|
|
23
|
+
"@papyrus-sdk/engine-native": "0.1.0",
|
|
24
|
+
"react-native-svg": "^15.5.0"
|
|
25
|
+
},
|
|
26
|
+
"peerDependencies": {
|
|
27
|
+
"react": ">=18.2.0 <20",
|
|
28
|
+
"react-native": ">=0.76.0"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"react": "^18.2.0",
|
|
32
|
+
"react-native": "^0.76.0"
|
|
33
|
+
},
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build": "tsup index.ts --dts --format cjs,esm --out-dir dist --clean --sourcemap"
|
|
36
|
+
}
|
|
37
|
+
}
|