@prose-reader/react-reader 1.201.0 → 1.202.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/dist/ReactReader.d.ts +1 -1
- package/dist/context/useReader.d.ts +2 -0
- package/dist/gallery/GalleryDialog.d.ts +4 -0
- package/dist/index.js +610 -527
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +1 -1
- package/dist/index.umd.cjs.map +1 -1
- package/dist/quickmenu/BottomBar.d.ts +1 -1
- package/dist/quickmenu/QuickMenu.d.ts +1 -1
- package/package.json +6 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/context/context.ts","../src/context/ReactReaderProvider.tsx","../src/components/ui/close-button.tsx","../src/components/ui/dialog.tsx","../src/context/useReader.ts","../src/annotations/AnnotationsDialogContent.tsx","../src/annotations/AnnotationsDialog.tsx","../src/bookmarks/Bookmarks.tsx","../src/bookmarks/BookmarksDialogContent.tsx","../src/bookmarks/BookmarksDialog.tsx","../src/components/ui/toaster.tsx","../src/help/HelpDialog.tsx","../src/pagination/usePagination.ts","../src/navigation/FloatingProgress.tsx","../src/quickmenu/TimeIndicator.tsx","../src/quickmenu/useQuickMenu.ts","../src/navigation/FloatingTime.tsx","../src/navigation/useInterceptExternalLinks.ts","../src/notifications/notifications.ts","../src/zoom/useNotifyZoom.ts","../src/notifications/useNotifications.ts","../src/components/ui/toggle-tip.tsx","../src/components/ui/progress.tsx","../src/navigation/useNavigationContext.ts","../src/quickmenu/PaginationInfoSection.tsx","../src/quickmenu/QuickBar.tsx","../src/quickmenu/ThemedSlider.tsx","../src/quickmenu/Scrubber.tsx","../src/quickmenu/BottomBar.tsx","../src/common/useFullscreen.ts","../src/quickmenu/TopBar.tsx","../src/quickmenu/QuickMenu.tsx","../src/search/SearchListItem.tsx","../src/search/SearchDialogContent.tsx","../src/search/SearchDialog.tsx","../src/toc/TableOfContentsDialogContent.tsx","../src/toc/TableOfContentsDialog.tsx","../src/ReactReader.tsx"],"sourcesContent":["import type { Reader } from \"@prose-reader/core\"\nimport { type Context, createContext } from \"react\"\nimport { type Signal, signal } from \"reactjrx\"\n\ntype ContextType = {\n reader: Reader | undefined\n quickMenuSignal: Signal<boolean, boolean, undefined>\n}\n\nexport const ReaderContext: Context<ContextType> = createContext<ContextType>({\n reader: undefined,\n quickMenuSignal: signal({ default: false }),\n})\n","import type { Reader } from \"@prose-reader/core\"\nimport { memo, useEffect, useMemo } from \"react\"\nimport { useLiveRef, useSignal, useSubscribe } from \"reactjrx\"\nimport { tap } from \"rxjs\"\nimport { ReaderContext } from \"./context\"\n\nexport const ReactReaderProvider = memo(\n ({\n children,\n reader,\n quickMenuOpen,\n onQuickMenuOpenChange,\n }: {\n children?: React.ReactNode\n reader: Reader | undefined\n quickMenuOpen: boolean\n onQuickMenuOpenChange: (open: boolean) => void\n }) => {\n const [, quickMenuSignal] = useSignal({\n default: quickMenuOpen,\n })\n const onQuickMenuOpenChangeLiveRef = useLiveRef(onQuickMenuOpenChange)\n\n const value = useMemo(\n () => ({\n quickMenuSignal,\n reader,\n }),\n [quickMenuSignal, reader],\n )\n\n useEffect(() => {\n quickMenuSignal.setValue(quickMenuOpen)\n }, [quickMenuOpen, quickMenuSignal])\n\n useSubscribe(\n () =>\n quickMenuSignal.subject.pipe(tap(onQuickMenuOpenChangeLiveRef.current)),\n [quickMenuSignal, onQuickMenuOpenChangeLiveRef],\n )\n\n return (\n <ReaderContext.Provider value={value}>{children}</ReaderContext.Provider>\n )\n },\n)\n","import type { ButtonProps } from \"@chakra-ui/react\"\nimport { IconButton as ChakraIconButton } from \"@chakra-ui/react\"\nimport * as React from \"react\"\nimport { LuX } from \"react-icons/lu\"\n\nexport type CloseButtonProps = ButtonProps\n\nexport const CloseButton = React.forwardRef<\n HTMLButtonElement,\n CloseButtonProps\n>(function CloseButton(props, ref) {\n return (\n <ChakraIconButton variant=\"ghost\" aria-label=\"Close\" ref={ref} {...props}>\n {props.children ?? <LuX />}\n </ChakraIconButton>\n )\n})\n","import { Dialog as ChakraDialog, Portal } from \"@chakra-ui/react\"\nimport { CloseButton } from \"./close-button\"\nimport * as React from \"react\"\n\ninterface DialogContentProps extends ChakraDialog.ContentProps {\n portalled?: boolean\n portalRef?: React.RefObject<HTMLElement>\n backdrop?: boolean\n}\n\nexport const DialogContent = React.forwardRef<\n HTMLDivElement,\n DialogContentProps\n>(function DialogContent(props, ref) {\n const {\n children,\n portalled = true,\n portalRef,\n backdrop = true,\n ...rest\n } = props\n\n return (\n <Portal disabled={!portalled} container={portalRef}>\n {backdrop && <ChakraDialog.Backdrop />}\n <ChakraDialog.Positioner>\n <ChakraDialog.Content ref={ref} {...rest} asChild={false}>\n {children}\n </ChakraDialog.Content>\n </ChakraDialog.Positioner>\n </Portal>\n )\n})\n\nexport const DialogCloseTrigger = React.forwardRef<\n HTMLButtonElement,\n ChakraDialog.CloseTriggerProps\n>(function DialogCloseTrigger(props, ref) {\n return (\n <ChakraDialog.CloseTrigger\n position=\"absolute\"\n top=\"2\"\n insetEnd=\"2\"\n {...props}\n asChild\n >\n <CloseButton size=\"sm\" ref={ref}>\n {props.children}\n </CloseButton>\n </ChakraDialog.CloseTrigger>\n )\n})\n\nexport const DialogRoot = ChakraDialog.Root\nexport const DialogFooter = ChakraDialog.Footer\nexport const DialogHeader = ChakraDialog.Header\nexport const DialogBody = ChakraDialog.Body\nexport const DialogBackdrop = ChakraDialog.Backdrop\nexport const DialogTitle = ChakraDialog.Title\nexport const DialogDescription = ChakraDialog.Description\nexport const DialogTrigger = ChakraDialog.Trigger\nexport const DialogActionTrigger = ChakraDialog.ActionTrigger\n","import type { Reader } from \"@prose-reader/core\"\nimport type { AnnotationsEnhancerAPI } from \"@prose-reader/enhancer-annotations\"\nimport type { BookmarksEnhancerAPI } from \"@prose-reader/enhancer-bookmarks\"\nimport type { SearchEnhancerAPI } from \"@prose-reader/enhancer-search\"\nimport { useContext } from \"react\"\nimport { ReaderContext } from \"./context\"\n\nexport const useReader = (): Reader | undefined => {\n const { reader } = useContext(ReaderContext)\n\n return reader\n}\n\nexport const hasSearchEnhancer = (\n reader?: Reader,\n): reader is Reader & SearchEnhancerAPI => {\n return !!reader && \"__PROSE_READER_ENHANCER_SEARCH\" in reader\n}\n\nexport const hasBookmarksEnhancer = (\n reader?: Reader,\n): reader is Reader & BookmarksEnhancerAPI => {\n return !!reader && \"__PROSE_READER_ENHANCER_BOOKMARKS\" in reader\n}\n\nexport const hasAnnotationsEnhancer = (\n reader?: Reader,\n): reader is Reader & AnnotationsEnhancerAPI => {\n return !!reader && \"__PROSE_READER_ENHANCER_ANNOTATIONS\" in reader\n}\n","import { Link, List, Stack, Text } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\nimport { LuNotebookPen } from \"react-icons/lu\"\nimport { useObserve } from \"reactjrx\"\nimport { switchMap } from \"rxjs\"\nimport { hasAnnotationsEnhancer, useReader } from \"../context/useReader\"\n\nexport const AnnotationsDialogContent = memo(\n ({ onNavigate }: { onNavigate: () => void }) => {\n const reader = useReader()\n const readerWithAnnotations = hasAnnotationsEnhancer(reader)\n ? reader\n : undefined\n\n const consolidatedHighlights = useObserve(\n () =>\n readerWithAnnotations?.annotations.highlights$.pipe(\n switchMap((highlights) =>\n readerWithAnnotations.pagination.locate(highlights),\n ),\n ),\n [readerWithAnnotations],\n )\n\n const mapItemToListEntry = (\n item: NonNullable<typeof consolidatedHighlights>[number],\n index: number,\n ) => (\n <List.Item key={index}>\n <Link\n href=\"#\"\n onClick={() => {\n onNavigate()\n\n reader?.navigation.goToCfi(item.cfi ?? \"\")\n }}\n >\n {(item.contents ?? [])[0] ? (\n <List.Indicator asChild>\n <LuNotebookPen />\n </List.Indicator>\n ) : (\n <List.Indicator asChild visibility=\"hidden\">\n <LuNotebookPen />\n </List.Indicator>\n )}\n <Stack gap={0}>\n <Text lineClamp={2} fontSize=\"md\">\n {item.selectionAsText ? (\n (item.selectionAsText ?? \"\")\n ) : (\n <i>\n <b>unknown (not loaded)</b>\n </i>\n )}\n </Text>\n <Text\n fontStyle=\"italic\"\n fontWeight=\"bold\"\n fontSize=\"sm\"\n >{`Book page: ${\n item.meta?.absolutePageIndex !== undefined\n ? item.meta.absolutePageIndex + 1\n : \"unknown (not loaded)\"\n }`}</Text>\n </Stack>\n </Link>\n </List.Item>\n )\n\n return (\n <List.Root overflowY=\"auto\" gap={3} pt={4} variant=\"plain\">\n {consolidatedHighlights?.map((item, index) =>\n mapItemToListEntry(item, index),\n )}\n </List.Root>\n )\n },\n)\n","import { Button } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\nimport {\n DialogActionTrigger,\n DialogBody,\n DialogCloseTrigger,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogRoot,\n DialogTitle,\n} from \"../components/ui/dialog\"\nimport { AnnotationsDialogContent } from \"./AnnotationsDialogContent\"\n\nexport const AnnotationsDialog = memo(\n ({\n open,\n setOpen,\n onNavigate,\n }: {\n open: boolean\n setOpen: (open: boolean) => void\n onNavigate: () => void\n }) => {\n return (\n <DialogRoot\n lazyMount\n placement=\"center\"\n open={open}\n onOpenChange={(e) => setOpen(e.open)}\n size={{ mdDown: \"full\", md: \"lg\" }}\n scrollBehavior=\"inside\"\n >\n <DialogContent height=\"100%\">\n <DialogHeader>\n <DialogTitle>Annotations</DialogTitle>\n </DialogHeader>\n <DialogBody flex={1}>\n <AnnotationsDialogContent onNavigate={onNavigate} />\n </DialogBody>\n <DialogFooter>\n <DialogActionTrigger asChild>\n <Button variant=\"outline\">Cancel</Button>\n </DialogActionTrigger>\n </DialogFooter>\n <DialogCloseTrigger />\n </DialogContent>\n </DialogRoot>\n )\n },\n)\n","import { Box, IconButton, Presence } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { BsBookmarkPlus, BsBookmarkXFill } from \"react-icons/bs\"\nimport { useObserve } from \"reactjrx\"\nimport { hasBookmarksEnhancer, useReader } from \"../context/useReader\"\n\nexport const Bookmarks = memo(() => {\n const reader = useReader()\n const readerWithBookmarks = hasBookmarksEnhancer(reader) ? reader : undefined\n const spineElement = useObserve(() => reader?.spine.element$, [reader])\n const pages = useObserve(\n () => readerWithBookmarks?.bookmarks.pages$,\n [readerWithBookmarks],\n )\n const bookmarks = useObserve(\n () => readerWithBookmarks?.bookmarks.bookmarks$,\n [readerWithBookmarks],\n )\n const consolidatedBookmarks = useObserve(\n () => reader?.pagination.locate(bookmarks ?? []),\n [reader, bookmarks],\n )\n\n if (!spineElement) return null\n\n return (\n <>\n {createPortal(\n pages?.map(\n (\n { isBookmarkable, absolutePosition: { left, top, width } },\n index,\n ) => {\n const bookmarkForPage = consolidatedBookmarks?.find(\n (bookmark) => bookmark.meta?.absolutePageIndex === index,\n )\n\n /**\n * Stale bookmarks means we cannot assert at the moment whether the page is marked or not.\n * In this case we just hide the bookmark button. You may want to have different UX to handle\n * this case.\n *\n * This also avoid having a flash where you show an non bookmarked icon and right away change it with\n * a valid marked page icon.\n */\n if (!isBookmarkable) return null\n\n return (\n <Presence\n key={index}\n present={true}\n lazyMount\n animationName={{ _open: \"fade-in\", _closed: \"fade-out\" }}\n animationDuration=\"moderate\"\n >\n <Box\n data-bookmark-area\n position=\"absolute\"\n left={left + width}\n transform=\"translateX(-100%)\"\n top={top}\n p={2}\n >\n {!bookmarkForPage ? (\n <IconButton\n aria-label=\"bookmark\"\n onClick={() => {\n readerWithBookmarks?.bookmarks.bookmark(index)\n }}\n size=\"lg\"\n bgColor=\"white\"\n opacity={0.5}\n _hover={{ opacity: 1 }}\n variant=\"ghost\"\n _icon={{ boxSize: \"36px\" }}\n >\n <BsBookmarkPlus />\n </IconButton>\n ) : (\n <IconButton\n aria-label=\"bookmark\"\n opacity={0.5}\n _hover={{ opacity: 1 }}\n onClick={() => {\n bookmarkForPage &&\n readerWithBookmarks?.bookmarks.delete(\n bookmarkForPage?.id,\n )\n }}\n size=\"lg\"\n variant=\"ghost\"\n _icon={{ boxSize: \"36px\" }}\n >\n <BsBookmarkXFill />\n </IconButton>\n )}\n </Box>\n </Presence>\n )\n },\n ),\n spineElement,\n )}\n </>\n )\n})\n","import { Button, Link, List, Stack, Text } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\nimport { useObserve } from \"reactjrx\"\nimport { switchMap } from \"rxjs\"\nimport { hasBookmarksEnhancer, useReader } from \"../context/useReader\"\n\nexport const BookmarksDialogContent = memo(\n ({ onNavigate }: { onNavigate: () => void }) => {\n const reader = useReader()\n const readerWithBookmarks = hasBookmarksEnhancer(reader)\n ? reader\n : undefined\n\n const consolidatedBookmarks = useObserve(\n () =>\n readerWithBookmarks?.bookmarks.bookmarks$.pipe(\n switchMap((items) => readerWithBookmarks.pagination.locate(items)),\n ),\n [readerWithBookmarks],\n )\n\n const mapItemToListEntry = (\n item: NonNullable<typeof consolidatedBookmarks>[number],\n index: number,\n ) => (\n <List.Item key={index} justifyContent=\"space-between\" alignItems=\"center\">\n <Link\n href=\"#\"\n onClick={() => {\n onNavigate()\n\n reader?.navigation.goToCfi(item.cfi ?? \"\")\n }}\n >\n <Stack gap={0}>\n <Text fontSize=\"md\">\n {`Book page: ${\n item.meta?.absolutePageIndex !== undefined\n ? item.meta.absolutePageIndex + 1\n : \"unknown\"\n }`}\n </Text>\n <Text\n fontStyle=\"italic\"\n fontWeight=\"bold\"\n fontSize=\"sm\"\n truncate\n lineClamp={2}\n >\n {item.meta?.startNode?.textContent\n ? item.meta?.startNode?.textContent\n : \"...\"}\n </Text>\n </Stack>\n </Link>\n <Button\n colorPalette=\"red\"\n variant=\"solid\"\n size=\"xs\"\n onClick={() => {\n readerWithBookmarks?.bookmarks.delete(item.id)\n }}\n >\n Delete\n </Button>\n </List.Item>\n )\n\n return (\n <List.Root overflowY=\"auto\" gap={3} variant=\"plain\" overflow=\"auto\">\n {consolidatedBookmarks?.map((item, index) =>\n mapItemToListEntry(item, index),\n )}\n </List.Root>\n )\n },\n)\n","import { Button } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\nimport {\n DialogActionTrigger,\n DialogBody,\n DialogCloseTrigger,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogRoot,\n DialogTitle,\n} from \"../components/ui/dialog\"\nimport { BookmarksDialogContent } from \"./BookmarksDialogContent\"\n\nexport const BookmarksDialog = memo(\n ({\n open,\n setOpen,\n onNavigate,\n }: {\n open: boolean\n setOpen: (open: boolean) => void\n onNavigate: () => void\n }) => {\n return (\n <DialogRoot\n lazyMount\n placement=\"center\"\n open={open}\n onOpenChange={(e) => setOpen(e.open)}\n size={{ mdDown: \"full\", md: \"lg\" }}\n scrollBehavior=\"inside\"\n >\n <DialogContent height=\"100%\">\n <DialogHeader>\n <DialogTitle>Bookmarks</DialogTitle>\n </DialogHeader>\n <DialogBody>\n <BookmarksDialogContent onNavigate={onNavigate} />\n </DialogBody>\n <DialogFooter>\n <DialogActionTrigger asChild>\n <Button variant=\"outline\">Cancel</Button>\n </DialogActionTrigger>\n </DialogFooter>\n <DialogCloseTrigger />\n </DialogContent>\n </DialogRoot>\n )\n },\n)\n","\"use client\"\n\nimport {\n Toaster as ChakraToaster,\n Portal,\n Spinner,\n Stack,\n Toast,\n createToaster,\n} from \"@chakra-ui/react\"\n\nexport const toaster = createToaster({\n placement: \"bottom-end\",\n pauseOnPageIdle: true,\n})\n\nexport const Toaster = () => {\n return (\n <Portal>\n <ChakraToaster toaster={toaster} insetInline={{ mdDown: \"4\" }}>\n {(toast) => (\n <Toast.Root width={{ md: \"sm\" }}>\n {toast.type === \"loading\" ? (\n <Spinner size=\"sm\" color=\"blue.solid\" />\n ) : (\n <Toast.Indicator />\n )}\n <Stack gap=\"1\" flex=\"1\" maxWidth=\"100%\">\n {toast.title && <Toast.Title>{toast.title}</Toast.Title>}\n {toast.description && (\n <Toast.Description>{toast.description}</Toast.Description>\n )}\n </Stack>\n {toast.action && (\n <Toast.ActionTrigger>{toast.action.label}</Toast.ActionTrigger>\n )}\n {toast.meta?.closable && <Toast.CloseTrigger />}\n </Toast.Root>\n )}\n </ChakraToaster>\n </Portal>\n )\n}\n","import { Button, HStack, Heading, Kbd, Text } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\nimport { LuArrowBigLeft, LuArrowBigRight } from \"react-icons/lu\"\nimport { name, version } from \"../../package.json\"\nimport {\n DialogActionTrigger,\n DialogBody,\n DialogCloseTrigger,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogRoot,\n DialogTitle,\n} from \"../components/ui/dialog\"\n\nexport const HelpDialog = memo(\n ({\n open,\n setOpen,\n }: {\n open: boolean\n setOpen: (open: boolean) => void\n }) => {\n return (\n <DialogRoot\n lazyMount\n placement=\"center\"\n open={open}\n onOpenChange={(e) => setOpen(e.open)}\n size={{ mdDown: \"full\", md: \"lg\" }}\n scrollBehavior=\"inside\"\n >\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Help</DialogTitle>\n </DialogHeader>\n <DialogBody overflowY=\"auto\" flex={1}>\n <Heading mb={2} as=\"h3\" size=\"lg\">\n Shortcuts\n </Heading>\n <HStack mb={1}>\n <Kbd>\n <LuArrowBigRight />\n </Kbd>{\" \"}\n <Text>Navigate to right page</Text>\n </HStack>\n <HStack mb={1}>\n <Kbd>\n <LuArrowBigLeft />\n </Kbd>{\" \"}\n <Text>Navigate to left page</Text>\n </HStack>\n <Heading mb={2} mt={4} as=\"h3\" size=\"lg\">\n About\n </Heading>\n <Text>\n {name} version: {version}\n </Text>\n </DialogBody>\n <DialogFooter>\n <DialogActionTrigger asChild>\n <Button variant=\"outline\">Cancel</Button>\n </DialogActionTrigger>\n </DialogFooter>\n <DialogCloseTrigger />\n </DialogContent>\n </DialogRoot>\n )\n },\n)\n","import type { Reader } from \"@prose-reader/core\"\nimport { useObserve } from \"reactjrx\"\nimport { NEVER, combineLatest, map } from \"rxjs\"\nimport { useReader } from \"../context/useReader\"\n\nexport const usePagination = ():\n | (Reader[\"pagination\"][\"state\"] & { hasChapters: boolean })\n | undefined => {\n const reader = useReader()\n\n return useObserve(\n () =>\n !reader\n ? NEVER\n : combineLatest([reader.pagination.state$, reader.context.state$]).pipe(\n map(([state, context]) => {\n const isOnlyImages = context.manifest?.spineItems.every((item) =>\n item.mediaType?.startsWith(\"image/\"),\n )\n\n return {\n ...state,\n hasChapters: !context.isFullyPrePaginated && !isOnlyImages,\n }\n }),\n ),\n [reader],\n )\n}\n","import { Box, Text } from \"@chakra-ui/react\"\nimport { usePagination } from \"../pagination/usePagination\"\n\nexport const FloatingProgress = () => {\n const pagination = usePagination()\n const roundedProgress = Math.floor(\n (pagination?.percentageEstimateOfBook ?? 0) * 100,\n )\n const displayableProgress = roundedProgress > 0 ? roundedProgress : 1\n\n if (pagination?.percentageEstimateOfBook === undefined) return null\n\n return (\n <Box position=\"absolute\" right={0} bottom={0} p={2} color={\"black\"}>\n <Text fontSize=\"sm\">{displayableProgress} %</Text>\n </Box>\n )\n}\n","import { Text, type TextProps } from \"@chakra-ui/react\"\nimport { useEffect, useState } from \"react\"\n\nexport const useTime = () => {\n const [time, setTime] = useState(new Date())\n\n useEffect(() => {\n const interval = setInterval(() => {\n setTime(new Date())\n }, 1000 * 60)\n\n return () => clearInterval(interval)\n }, [])\n\n return time\n}\n\nexport const TimeIndicator = (props: TextProps) => {\n const time = useTime()\n\n return (\n <Text fontSize=\"xs\" {...props}>\n {time.toLocaleTimeString(navigator.language, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n })}\n </Text>\n )\n}\n","import { useContext } from \"react\"\nimport { useSignalValue } from \"reactjrx\"\nimport { ReaderContext } from \"../context/context\"\n\nexport const useQuickMenu = () => {\n const { quickMenuSignal } = useContext(ReaderContext)\n\n const quickMenu = useSignalValue(quickMenuSignal)\n\n return [quickMenu, quickMenuSignal.setValue, quickMenuSignal] as const\n}\n","import { Box } from \"@chakra-ui/react\"\nimport { TimeIndicator } from \"../quickmenu/TimeIndicator\"\nimport { useQuickMenu } from \"../quickmenu/useQuickMenu\"\n\nexport const FloatingTime = () => {\n const [quickMenuOpen] = useQuickMenu()\n\n return (\n <Box\n position=\"absolute\"\n left={0}\n bottom={0}\n p={2}\n color={quickMenuOpen ? undefined : \"colorPalette.contrast\"}\n >\n <TimeIndicator />\n </Box>\n )\n}\n","import { isHtmlTagElement } from \"@prose-reader/core\"\nimport { useSubscribe } from \"reactjrx\"\nimport { useReader } from \"../context/useReader\"\n\nexport const useInterceptExternalLinks = () => {\n const reader = useReader()\n\n useSubscribe(\n () =>\n reader?.links$.subscribe((event) => {\n if (event.type === \"click\" && isHtmlTagElement(event.target, \"a\")) {\n if (!event.target.href) return\n\n const url = new URL(event.target.href)\n\n if (window.location.host !== url.host) {\n const response = confirm(\n `You are going to be redirected to external link`,\n )\n\n if (response) {\n window.open(event.target.href, \"__blank\")\n }\n }\n }\n }),\n [reader],\n )\n}\n","import { signal } from \"reactjrx\"\nimport type { Observable } from \"rxjs\"\n\nexport const notificationsSignal = signal<\n | {\n key?: string\n title: string\n description?: string\n duration?: number\n abort?: Observable<unknown>\n }\n | undefined\n>({\n default: undefined,\n})\n","import { useSubscribe } from \"reactjrx\"\nimport { EMPTY, NEVER, Subject, finalize, switchMap } from \"rxjs\"\nimport { useReader } from \"../context/useReader\"\nimport { notificationsSignal } from \"../notifications/notifications\"\n\nexport const useNotifyZoom = () => {\n const reader = useReader()\n\n useSubscribe(\n () =>\n reader?.zoom.isZooming$.pipe(\n switchMap((isZooming) => {\n if (!isZooming) return EMPTY\n\n const abort = new Subject<void>()\n\n notificationsSignal.setValue({\n key: \"zoom\",\n title: \"Zooming\",\n duration: 999999,\n abort: abort,\n })\n\n return NEVER.pipe(\n finalize(() => {\n abort.next()\n abort.complete()\n }),\n )\n }),\n ),\n [reader],\n )\n}\n","import { isDefined, useSubscribe } from \"reactjrx\"\nimport {\n NEVER,\n distinctUntilChanged,\n filter,\n finalize,\n first,\n map,\n merge,\n mergeMap,\n skip,\n tap,\n timer,\n} from \"rxjs\"\nimport { toaster } from \"../components/ui/toaster\"\nimport { useReader } from \"../context/useReader\"\nimport { useNotifyZoom } from \"../zoom/useNotifyZoom\"\nimport { notificationsSignal } from \"./notifications\"\n\nconst useFontScaleChangeNotification = () => {\n const reader = useReader()\n\n useSubscribe(\n () =>\n reader?.settings.values$.pipe(\n map(({ fontScale }) => fontScale),\n distinctUntilChanged(),\n skip(1),\n tap((fontScale) => {\n notificationsSignal.setValue({\n key: \"fontScaleChange\",\n title: \"Font size changed\",\n description: `${fontScale * 100} %`,\n })\n }),\n ),\n [reader],\n )\n}\n\nexport const useNotifications = () => {\n useFontScaleChangeNotification()\n useNotifyZoom()\n\n useSubscribe(() =>\n notificationsSignal.subject.pipe(\n filter(isDefined),\n mergeMap((notification) => {\n const duration = notification.duration ?? 3000\n\n const toast = toaster.create({\n title: notification.title,\n description: notification.description,\n duration,\n })\n\n const sameNotification$ = notificationsSignal.subject.pipe(\n skip(1),\n filter((n) => !!notification.key && n?.key === notification.key),\n )\n\n return merge(\n timer(duration),\n notification.abort ?? NEVER,\n sameNotification$,\n ).pipe(\n first(),\n finalize(() => {\n toaster.dismiss(toast)\n }),\n )\n }),\n ),\n )\n}\n","import { Popover as ChakraPopover, IconButton, Portal } from \"@chakra-ui/react\"\nimport * as React from \"react\"\nimport { HiOutlineInformationCircle } from \"react-icons/hi\"\n\nexport interface ToggleTipProps extends ChakraPopover.RootProps {\n showArrow?: boolean\n portalled?: boolean\n portalRef?: React.RefObject<HTMLElement>\n content?: React.ReactNode\n}\n\nexport const ToggleTip = React.forwardRef<HTMLDivElement, ToggleTipProps>(\n function ToggleTip(props, ref) {\n const {\n showArrow,\n children,\n portalled = true,\n content,\n portalRef,\n ...rest\n } = props\n\n return (\n <ChakraPopover.Root\n {...rest}\n positioning={{ ...rest.positioning, gutter: 4 }}\n >\n <ChakraPopover.Trigger asChild>{children}</ChakraPopover.Trigger>\n <Portal disabled={!portalled} container={portalRef}>\n <ChakraPopover.Positioner>\n <ChakraPopover.Content\n width=\"auto\"\n px=\"2\"\n py=\"1\"\n textStyle=\"xs\"\n rounded=\"sm\"\n ref={ref}\n >\n {showArrow && (\n <ChakraPopover.Arrow>\n <ChakraPopover.ArrowTip />\n </ChakraPopover.Arrow>\n )}\n {content}\n </ChakraPopover.Content>\n </ChakraPopover.Positioner>\n </Portal>\n </ChakraPopover.Root>\n )\n },\n)\n\nexport const InfoTip = React.forwardRef<\n HTMLDivElement,\n Partial<ToggleTipProps>\n>(function InfoTip(props, ref) {\n const { children, ...rest } = props\n return (\n <ToggleTip content={children} {...rest} ref={ref}>\n <IconButton\n variant=\"ghost\"\n aria-label=\"info\"\n size=\"2xs\"\n colorPalette=\"gray\"\n >\n <HiOutlineInformationCircle />\n </IconButton>\n </ToggleTip>\n )\n})\n","import { Progress as ChakraProgress } from \"@chakra-ui/react\"\nimport { InfoTip } from \"./toggle-tip\"\nimport * as React from \"react\"\n\nexport const ProgressBar = React.forwardRef<\n HTMLDivElement,\n ChakraProgress.TrackProps\n>(function ProgressBar(props, ref) {\n return (\n <ChakraProgress.Track {...props} ref={ref}>\n <ChakraProgress.Range />\n </ChakraProgress.Track>\n )\n})\n\nexport interface ProgressLabelProps extends ChakraProgress.LabelProps {\n info?: React.ReactNode\n}\n\nexport const ProgressLabel = React.forwardRef<\n HTMLDivElement,\n ProgressLabelProps\n>(function ProgressLabel(props, ref) {\n const { children, info, ...rest } = props\n return (\n <ChakraProgress.Label {...rest} ref={ref}>\n {children}\n {info && <InfoTip>{info}</InfoTip>}\n </ChakraProgress.Label>\n )\n})\n\nexport const ProgressRoot = ChakraProgress.Root\nexport const ProgressValueText = ChakraProgress.ValueText\n","import { usePagination } from \"../pagination/usePagination\"\n\nexport const useNavigationContext = () => {\n const pagination = usePagination()\n const hasOnlyOnePage = pagination?.numberOfTotalPages === 1\n\n const isBeginWithinChapter =\n (pagination?.beginNumberOfPagesInSpineItem ?? 0) > 1\n\n const isEndWithinChapter = (pagination?.endNumberOfPagesInSpineItem ?? 0) > 1\n\n const beginPageIndex =\n (pagination?.hasChapters\n ? pagination?.beginPageIndexInSpineItem\n : pagination?.beginAbsolutePageIndex) ?? 0\n const endPageIndex =\n (pagination?.hasChapters\n ? pagination?.endPageIndexInSpineItem\n : pagination?.endAbsolutePageIndex) ?? 0\n\n const [leftPageIndex = 0, rightPageIndex = 0] = [\n beginPageIndex,\n endPageIndex,\n ].sort((a, b) => a - b)\n\n const beginAndEndAreDifferent =\n pagination?.beginPageIndexInSpineItem !==\n pagination?.endPageIndexInSpineItem ||\n pagination?.beginSpineItemIndex !== pagination?.endSpineItemIndex\n\n const totalApproximatePages = pagination?.hasChapters\n ? pagination?.beginNumberOfPagesInSpineItem\n : pagination?.numberOfTotalPages\n\n return {\n hasOnlyOnePage,\n beginPageIndex,\n endPageIndex,\n isBeginWithinChapter,\n isEndWithinChapter,\n beginAndEndAreDifferent,\n totalApproximatePages,\n leftPageIndex,\n rightPageIndex,\n }\n}\n","import { HStack, Stack, Text } from \"@chakra-ui/react\"\nimport {\n ProgressBar,\n ProgressRoot,\n ProgressValueText,\n} from \"../components/ui/progress\"\nimport { useNavigationContext } from \"../navigation/useNavigationContext\"\nimport { usePagination } from \"../pagination/usePagination\"\n\nexport const PaginationInfoSection = () => {\n const pagination = usePagination()\n const {\n hasOnlyOnePage,\n leftPageIndex,\n rightPageIndex,\n totalApproximatePages,\n beginAndEndAreDifferent,\n } = useNavigationContext()\n const progress = Math.round((pagination?.percentageEstimateOfBook ?? 0) * 100)\n\n const buildTitleChain = (\n chapterInfo: NonNullable<typeof pagination>[\"beginChapterInfo\"],\n ): string => {\n if (chapterInfo?.subChapter) {\n return `${chapterInfo.title} / ${buildTitleChain(chapterInfo.subChapter)}`\n }\n return chapterInfo?.title || \"\"\n }\n\n const chapterTitle = buildTitleChain(pagination?.beginChapterInfo)\n\n return (\n <Stack alignItems=\"center\" gap={1} maxW=\"100%\" overflow=\"auto\">\n <ProgressRoot value={progress} size=\"xs\" width={150}>\n <HStack justifyContent=\"space-between\">\n <ProgressBar width={110} />\n <ProgressValueText>{`${progress}%`}</ProgressValueText>\n </HStack>\n </ProgressRoot>\n <Text truncate maxWidth=\"100%\" fontSize=\"sm\" mt={1}>\n {chapterTitle ? `Chapter: ${chapterTitle}` : `\\u00A0`}\n </Text>\n {!hasOnlyOnePage && (\n <HStack>\n <Text fontSize=\"xs\">\n {beginAndEndAreDifferent\n ? `${leftPageIndex + 1} - ${rightPageIndex + 1} of ${totalApproximatePages}`\n : `${leftPageIndex + 1} of ${totalApproximatePages}`}\n </Text>\n {!!pagination?.hasChapters && (\n <>\n <Text>-</Text>\n <Text fontSize=\"xs\">\n ({(pagination?.beginAbsolutePageIndex ?? 0) + 1})\n </Text>\n </>\n )}\n </HStack>\n )}\n </Stack>\n )\n}\n","import { Presence, type PresenceProps } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\n\nexport const QuickBar = memo(\n ({\n children,\n position,\n ...rest\n }: { position: \"top\" | \"bottom\" } & PresenceProps) => {\n return (\n <Presence\n display=\"flex\"\n flexDirection=\"row\"\n width=\"100%\"\n position=\"absolute\"\n {...(position === \"bottom\" ? { bottom: 0 } : { top: 0 })}\n animationName={\n position === \"bottom\"\n ? {\n _open: \"slide-from-bottom, fade-in\",\n _closed: \"slide-to-bottom, fade-out\",\n }\n : {\n _open: \"slide-from-top, fade-in\",\n _closed: \"slide-to-top, fade-out\",\n }\n }\n animationDuration=\"moderate\"\n bgColor=\"bg.panel\"\n alignItems=\"center\"\n justifyContent=\"center\"\n shadow=\"md\"\n p={4}\n {...rest}\n >\n {children}\n </Presence>\n )\n },\n)\n","import RcSlider from \"rc-slider\"\nimport { type ComponentProps, memo } from \"react\"\nimport \"rc-slider/assets/index.css\"\nimport { Box, chakra } from \"@chakra-ui/react\"\n\nconst ChakraRcSlider = chakra(RcSlider)\n\nexport const ThemedSlider = memo((props: ComponentProps<typeof RcSlider>) => {\n return (\n <Box\n display=\"contents\"\n css={{\n \"--bg\": \"colors.bg\",\n \"--bg-emphasized\": \"colors.bg.emphasized\",\n \"--color-solid\": \"colors.colorPalette.solid\",\n }}\n >\n <ChakraRcSlider\n keyboard={false}\n style={{\n padding: 0,\n }}\n css={{\n \"& > .rc-slider-handle:focus-visible\": {\n boxShadow: \"0 0 0 2px var(--color-solid) !important\",\n },\n \"& > .rc-slider-handle:active\": {\n boxShadow: \"0 0 5px var(--color-solid) !important\",\n },\n \"& > .rc-slider-handle.rc-slider-handle-dragging\": {\n boxShadow: \"0 0 0 3px var(--color-solid) !important\",\n },\n }}\n styles={{\n rail: {\n height: \"8px\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n backgroundColor: \"var(--bg-emphasized)\",\n },\n track: {\n height: \"8px\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n backgroundColor: \"var(--color-solid)\",\n },\n handle: {\n width: \"24px\",\n height: \"24px\",\n top: \"50%\",\n borderColor: \"var(--color-solid)\",\n transform: `translate(${props.reverse ? \"50%\" : \"-50%\"}, -50%)`,\n backgroundColor: \"var(--bg)\",\n marginTop: \"0px\",\n },\n }}\n {...props}\n />\n </Box>\n )\n})\n","import { Box } from \"@chakra-ui/react\"\nimport { type ComponentProps, useCallback, useEffect } from \"react\"\nimport { useObserve, useSignal, useSubscribe } from \"reactjrx\"\nimport { useReader } from \"../context/useReader\"\nimport { useNavigationContext } from \"../navigation/useNavigationContext\"\nimport { usePagination } from \"../pagination/usePagination\"\nimport { ThemedSlider } from \"./ThemedSlider\"\n\nconst useSliderValues = () => {\n const pagination = usePagination()\n const isUsingSpread = pagination?.isUsingSpread\n const { beginPageIndex: currentRealPage, totalApproximatePages = 0 } =\n useNavigationContext()\n const currentPage = isUsingSpread\n ? Math.floor((currentRealPage || 0) / 2)\n : currentRealPage\n const [value, valueSignal] = useSignal({\n default: currentPage || 0,\n })\n const min = 0\n const max = Math.max(\n 0,\n isUsingSpread\n ? Math.floor((totalApproximatePages - 1) / 2)\n : totalApproximatePages - 1,\n )\n\n useEffect(() => {\n valueSignal.setValue(currentPage || 0)\n }, [currentPage, valueSignal])\n\n return {\n value,\n valueSignal,\n min,\n max,\n }\n}\n\nexport const Scrubber = (props: ComponentProps<typeof ThemedSlider>) => {\n const reader = useReader()\n const pagination = usePagination()\n const { manifest } = useObserve(() => reader?.context.state$, [reader]) ?? {}\n const reverse = manifest?.readingDirection === \"rtl\"\n const isUsingSpread = pagination?.isUsingSpread\n const { totalApproximatePages = 0, isBeginWithinChapter } =\n useNavigationContext()\n const step = 1\n const isScrubberWithinChapter = isBeginWithinChapter\n const { value, valueSignal, min, max } = useSliderValues()\n\n const onChange: NonNullable<ComponentProps<typeof ThemedSlider>[\"onChange\"]> =\n useCallback(\n (values) => {\n const [value = 0] = Array.isArray(values) ? values : [values]\n\n valueSignal.setValue(value)\n\n const pageIndex = isUsingSpread\n ? Math.floor(value) * 2\n : Math.floor(value)\n\n if (!isScrubberWithinChapter) {\n reader?.navigation.goToAbsolutePageIndex({\n absolutePageIndex: pageIndex,\n animation: false,\n })\n } else {\n reader?.navigation.goToPageOfSpineItem({\n pageIndex,\n spineItemId: reader.pagination.getState().beginSpineItemIndex ?? 0,\n animation: false,\n })\n }\n },\n [reader, isUsingSpread, valueSignal, isScrubberWithinChapter],\n )\n\n /**\n * @note\n * Scrubber can navigate fast and without lock we may end up with\n * slowness due to the reader\n * paginating and loading items in between.\n * This is good practice (but not required) to throttle it.\n */\n useSubscribe(\n () =>\n reader?.navigation.throttleLock({\n duration: 100,\n trigger: valueSignal.subject,\n }),\n [reader, valueSignal],\n )\n\n // const marks =\n // max > 1\n // ? Array.from({ length: max + 1 }, (_, i) => i).reduce(\n // (acc: number[], val) => [...acc, val],\n // [],\n // )\n // : []\n\n const disabled =\n totalApproximatePages === 1 ||\n (isUsingSpread && totalApproximatePages === 2)\n\n // @tmp not available yet in chakra\n // if (reverse) return null\n\n if (disabled) return <Box style={props.style} />\n\n return (\n <ThemedSlider\n value={[value]}\n max={max}\n min={min}\n reverse={reverse}\n step={step}\n onChange={onChange}\n {...props}\n />\n )\n // return (\n // <Slider\n // value={[value]}\n // max={max}\n // min={min}\n // marks={marks}\n // onChange={e => {\n // debugger\n // }}\n // onValueChange={onChange}\n // // reverse={reverse}\n // orientation=\"horizontal\"\n // step={step}\n // />\n // )\n}\n","import { Collapsible, HStack, IconButton, Stack } from \"@chakra-ui/react\"\nimport { memo, useState } from \"react\"\nimport { BsBookmarks } from \"react-icons/bs\"\nimport { LuChevronDown, LuSearch } from \"react-icons/lu\"\nimport { LuTableOfContents } from \"react-icons/lu\"\nimport { LuCircleHelp, LuNotebookPen } from \"react-icons/lu\"\nimport {\n RxDoubleArrowDown,\n RxDoubleArrowLeft,\n RxDoubleArrowRight,\n RxDoubleArrowUp,\n} from \"react-icons/rx\"\nimport { useObserve } from \"reactjrx\"\nimport {\n hasAnnotationsEnhancer,\n hasBookmarksEnhancer,\n hasSearchEnhancer,\n useReader,\n} from \"../context/useReader\"\nimport { PaginationInfoSection } from \"./PaginationInfoSection\"\nimport { QuickBar } from \"./QuickBar\"\nimport { Scrubber } from \"./Scrubber\"\n\nexport const BottomBar = memo(\n ({\n open,\n onItemClick,\n }: {\n open: boolean\n onItemClick: (\n item: \"annotations\" | \"search\" | \"help\" | \"toc\" | \"bookmarks\",\n ) => void\n }) => {\n const reader = useReader()\n const navigation = useObserve(() => reader?.navigation.state$, [reader])\n const settings = useObserve(() => reader?.settings.values$, [reader])\n const isVerticalDirection =\n settings?.computedPageTurnDirection === \"vertical\"\n const [isExtraOpen, setIsExtraOpen] = useState(true)\n\n return (\n <QuickBar present={open} position=\"bottom\">\n <Stack flex={1} overflow=\"auto\">\n <HStack flex={1} alignItems=\"center\" justifyContent=\"center\">\n <IconButton\n aria-label=\"left\"\n size=\"lg\"\n variant=\"ghost\"\n flexShrink={0}\n onClick={() => reader?.navigation.goToLeftOrTopSpineItem()}\n disabled={\n !navigation?.canGoLeftSpineItem &&\n !navigation?.canGoTopSpineItem\n }\n >\n {isVerticalDirection ? (\n <RxDoubleArrowUp />\n ) : (\n <RxDoubleArrowLeft />\n )}\n </IconButton>\n <Stack\n flex={1}\n maxW={400}\n gap={2}\n alignItems=\"center\"\n overflow=\"auto\"\n px={4}\n >\n <PaginationInfoSection />\n <Scrubber\n style={{\n width: \"100%\",\n maxWidth: \"300px\",\n height: \"35px\",\n }}\n />\n </Stack>\n <IconButton\n aria-label=\"right\"\n size=\"lg\"\n flexShrink={0}\n variant=\"ghost\"\n disabled={\n !navigation?.canGoRightSpineItem &&\n !navigation?.canGoBottomSpineItem\n }\n onClick={() => {\n reader?.navigation.goToRightOrBottomSpineItem()\n }}\n >\n {isVerticalDirection ? (\n <RxDoubleArrowDown />\n ) : (\n <RxDoubleArrowRight />\n )}\n </IconButton>\n </HStack>\n <HStack alignItems=\"center\" justifyContent=\"center\">\n <Collapsible.Root\n open={isExtraOpen}\n flex={1}\n onOpenChange={({ open }) => {\n setIsExtraOpen(open)\n }}\n >\n <Collapsible.Trigger\n paddingY=\"3\"\n width=\"100%\"\n display=\"flex\"\n justifyContent=\"center\"\n >\n <LuChevronDown\n style={{\n transform: isExtraOpen ? \"rotate(0deg)\" : \"rotate(180deg)\",\n }}\n />\n </Collapsible.Trigger>\n <Collapsible.Content display=\"flex\" justifyContent=\"center\">\n <IconButton\n aria-label=\"Help\"\n size=\"lg\"\n variant=\"ghost\"\n onClick={() => onItemClick(\"help\")}\n >\n <LuCircleHelp />\n </IconButton>\n <IconButton\n aria-label=\"Table of contents\"\n size=\"lg\"\n variant=\"ghost\"\n onClick={() => onItemClick(\"toc\")}\n >\n <LuTableOfContents />\n </IconButton>\n {hasSearchEnhancer(reader) && (\n <IconButton\n aria-label=\"Search\"\n size=\"lg\"\n variant=\"ghost\"\n onClick={() => onItemClick(\"search\")}\n >\n <LuSearch />\n </IconButton>\n )}\n {hasBookmarksEnhancer(reader) && (\n <IconButton\n aria-label=\"Search\"\n size=\"lg\"\n variant=\"ghost\"\n onClick={() => onItemClick(\"bookmarks\")}\n >\n <BsBookmarks />\n </IconButton>\n )}\n {hasAnnotationsEnhancer(reader) && (\n <IconButton\n aria-label=\"Search\"\n size=\"lg\"\n variant=\"ghost\"\n onClick={() => onItemClick(\"annotations\")}\n >\n <LuNotebookPen />\n </IconButton>\n )}\n </Collapsible.Content>\n </Collapsible.Root>\n </HStack>\n </Stack>\n </QuickBar>\n )\n },\n)\n","import { useEffect } from \"react\"\n\nimport { useCallback } from \"react\"\n\nimport { useState } from \"react\"\n\nexport const useFullscreen = () => {\n const [isFullscreen, setIsFullscreen] = useState(false)\n\n const onToggleFullscreenClick = useCallback(() => {\n if (document.fullscreenElement) {\n return document\n .exitFullscreen()\n .catch(console.error)\n .then(() => {\n setIsFullscreen(false)\n })\n }\n\n return document.documentElement\n .requestFullscreen({ navigationUI: \"hide\" })\n .catch(console.error)\n .then(() => {\n setIsFullscreen(true)\n })\n }, [])\n\n useEffect(() => {\n function fullscreenchangeHandler() {\n setIsFullscreen(!!document.fullscreenElement)\n }\n\n document.addEventListener(\"fullscreenchange\", fullscreenchangeHandler)\n\n return () => {\n document.removeEventListener(\"fullscreenchange\", fullscreenchangeHandler)\n }\n }, [])\n\n return {\n isFullscreen,\n onToggleFullscreenClick,\n }\n}\n","import { HStack, IconButton, Stack, Text } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\nimport { IoIosArrowBack, IoMdMore } from \"react-icons/io\"\nimport { MdFullscreen, MdFullscreenExit } from \"react-icons/md\"\nimport { useObserve } from \"reactjrx\"\nimport { useFullscreen } from \"../common/useFullscreen\"\nimport { useReader } from \"../context/useReader\"\nimport { QuickBar } from \"./QuickBar\"\n\nexport const TopBar = memo(\n ({\n open,\n onItemClick,\n }: {\n open: boolean\n onItemClick: (item: \"more\" | \"back\") => void\n }) => {\n const reader = useReader()\n const manifest = useObserve(() => reader?.context.manifest$, [reader])\n const { isFullscreen, onToggleFullscreenClick } = useFullscreen()\n\n return (\n <QuickBar\n present={open}\n position=\"top\"\n height=\"80px\"\n justifyContent=\"space-between\"\n >\n <IconButton\n aria-label=\"left\"\n size=\"lg\"\n variant=\"ghost\"\n flexShrink={0}\n onClick={() => onItemClick(\"back\")}\n >\n <IoIosArrowBack />\n </IconButton>\n <Stack\n flex={1}\n maxW={600}\n gap={1}\n alignItems=\"center\"\n overflow=\"auto\"\n px={4}\n >\n <Text truncate maxWidth=\"100%\">\n {manifest?.title}\n </Text>\n </Stack>\n <HStack>\n <IconButton\n aria-label=\"right\"\n size=\"lg\"\n flexShrink={0}\n variant=\"ghost\"\n onClick={() => onItemClick(\"more\")}\n >\n <IoMdMore />\n </IconButton>\n <IconButton\n aria-label=\"right\"\n size=\"lg\"\n flexShrink={0}\n variant=\"ghost\"\n onClick={onToggleFullscreenClick}\n >\n {isFullscreen ? <MdFullscreenExit /> : <MdFullscreen />}\n </IconButton>\n </HStack>\n </QuickBar>\n )\n },\n)\n","import { memo } from \"react\"\nimport { BottomBar } from \"./BottomBar\"\nimport { TopBar } from \"./TopBar\"\nimport { useQuickMenu } from \"./useQuickMenu\"\n\nexport const QuickMenu = memo(\n ({\n onItemClick,\n }: {\n onItemClick: (\n item:\n | \"annotations\"\n | \"search\"\n | \"help\"\n | \"toc\"\n | \"bookmarks\"\n | \"more\"\n | \"back\",\n ) => void\n }) => {\n const [quickMenuOpen] = useQuickMenu()\n\n return (\n <>\n <TopBar open={quickMenuOpen} onItemClick={onItemClick} />\n <BottomBar open={quickMenuOpen} onItemClick={onItemClick} />\n </>\n )\n },\n)\n","import { Link, Text } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\n\nexport const SearchListItem = memo(\n ({\n contextText = \"\",\n startOffset = 0,\n text,\n cfi = \"#\",\n onClick,\n absolutePageIndex,\n }: {\n pageIndex: number | undefined\n absolutePageIndex?: number\n contextText?: string\n startOffset?: number\n text: string\n cfi?: string\n onClick: (cfi: string) => void\n }) => {\n const charsAroundText = 15\n const before = contextText.substring(\n Math.max(startOffset - charsAroundText, 0),\n Math.max(startOffset, 0),\n )\n const after = contextText.substring(\n Math.min(startOffset + text.length, contextText.length - 1),\n Math.min(\n startOffset + text.length + charsAroundText,\n contextText.length - 1,\n ),\n )\n\n return (\n <Link\n href={cfi}\n style={{ margin: 5, overflow: \"hidden\" }}\n onClick={(e) => {\n e.preventDefault()\n\n onClick(cfi)\n }}\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"flex-start\"\n gap={0}\n >\n <Text lineClamp={1} as=\"cite\" style={{ display: \"block\" }}>\n \"{before}\n <b>{text}</b>\n {after}\"\n </Text>\n <Text fontSize=\"sm\" color=\"gray.500\" style={{ textDecoration: \"none\" }}>\n {`Book page: ${absolutePageIndex !== undefined ? absolutePageIndex + 1 : \"unknown (not loaded)\"}`}\n </Text>\n </Link>\n )\n },\n)\n","import { Box, Heading, Input, Stack, Text } from \"@chakra-ui/react\"\nimport type React from \"react\"\nimport { memo, useCallback, useState } from \"react\"\nimport { useObserve } from \"reactjrx\"\nimport { map, startWith } from \"rxjs\"\nimport { hasSearchEnhancer, useReader } from \"../context/useReader\"\nimport { SearchListItem } from \"./SearchListItem\"\n\nexport const SearchDialogContent = memo(\n ({\n onNavigate,\n }: {\n onNavigate: () => void\n }) => {\n const [text, setText] = useState(\"\")\n const reader = useReader()\n const readerWithSearch = hasSearchEnhancer(reader) ? reader : undefined\n\n const onValueChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setText(e.target.value)\n }\n\n const onClick = useCallback(\n (cfi: string) => {\n onNavigate()\n reader?.navigation.goToCfi(cfi)\n },\n [reader, onNavigate],\n )\n\n const search = useObserve(\n () =>\n readerWithSearch?.search.search(text).pipe(\n map((data) => ({ type: `end` as const, data })),\n startWith({ type: `start` as const }),\n ),\n [reader, text],\n )\n const searching = search?.type === \"start\"\n const results = search?.type === \"end\" ? search.data : []\n const consolidatedResults = useObserve(\n () => reader?.pagination.locate(results.slice(0, 100)),\n [results],\n )\n\n return (\n <Stack flex={1} height=\"100%\">\n <Box px={4}>\n <Input\n placeholder=\"Type something...\"\n value={text}\n onChange={onValueChange}\n borderRadius={0}\n />\n </Box>\n <Box\n px={4}\n pb={4}\n mt={2}\n flex={1}\n style={{ overflow: \"hidden\", overflowY: \"auto\" }}\n >\n {searching && <Text>Searching ...</Text>}\n {!searching && results.length === 0 && <p>There are no results</p>}\n {!searching && results.length >= 0 && (\n <Stack>\n <Heading as=\"h2\" size=\"md\">\n {results.length} result(s)\n </Heading>\n <Stack gap={0}>\n {consolidatedResults?.map((result, j) => {\n return (\n <SearchListItem\n key={j}\n contextText={\n result.meta?.range?.startContainer.parentElement\n ?.textContent ?? \"\"\n }\n pageIndex={result.meta?.itemPageIndex}\n startOffset={result.meta?.range?.startOffset ?? 0}\n text={text}\n cfi={result.cfi}\n onClick={onClick}\n absolutePageIndex={result.meta?.absolutePageIndex}\n />\n )\n })}\n </Stack>\n </Stack>\n )}\n </Box>\n </Stack>\n )\n },\n)\n","import { Button } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\nimport {\n DialogActionTrigger,\n DialogBody,\n DialogCloseTrigger,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogRoot,\n DialogTitle,\n} from \"../components/ui/dialog\"\nimport { SearchDialogContent } from \"./SearchDialogContent\"\n\nexport const SearchDialog = memo(\n ({\n open,\n setOpen,\n onNavigate,\n }: {\n open: boolean\n setOpen: (open: boolean) => void\n onNavigate: () => void\n }) => {\n return (\n <DialogRoot\n lazyMount\n placement=\"center\"\n open={open}\n onOpenChange={(e) => setOpen(e.open)}\n size={{ mdDown: \"full\", md: \"lg\" }}\n scrollBehavior=\"inside\"\n >\n <DialogContent height=\"100%\">\n <DialogHeader>\n <DialogTitle>Search</DialogTitle>\n </DialogHeader>\n <DialogBody flex={1}>\n <SearchDialogContent onNavigate={onNavigate} />\n </DialogBody>\n <DialogFooter>\n <DialogActionTrigger asChild>\n <Button variant=\"outline\">Cancel</Button>\n </DialogActionTrigger>\n </DialogFooter>\n <DialogCloseTrigger />\n </DialogContent>\n </DialogRoot>\n )\n },\n)\n","import { Link, Stack, Text } from \"@chakra-ui/react\"\n\nimport { List } from \"@chakra-ui/react\"\nimport React, { memo } from \"react\"\nimport { LuCircleCheck } from \"react-icons/lu\"\nimport { useObserve } from \"reactjrx\"\nimport { useReader } from \"../context/useReader\"\nimport { usePagination } from \"../pagination/usePagination\"\n\nexport const TableOfContentsDialogContent = memo(\n ({\n onNavigate,\n }: {\n onNavigate: () => void\n }) => {\n const reader = useReader()\n const { manifest, assumedRenditionLayout } =\n useObserve(() => reader?.context.state$, [reader]) ?? {}\n const { nav } = manifest ?? {}\n const pagination = usePagination()\n const toc = nav?.toc || []\n const { beginSpineItemIndex, beginPageIndexInSpineItem } = pagination ?? {}\n const currentSpineItemOrChapterPageIndex =\n (assumedRenditionLayout === \"reflowable\"\n ? beginPageIndexInSpineItem\n : beginSpineItemIndex) || 0\n\n console.log({ assumedRenditionLayout, currentSpineItemOrChapterPageIndex })\n\n let currentSubChapter = pagination?.beginChapterInfo\n\n while (currentSubChapter?.subChapter) {\n currentSubChapter = currentSubChapter?.subChapter\n }\n\n const buildTocForItem = (\n tocItem: (typeof toc)[number],\n index: number,\n lvl: number,\n ) => (\n <React.Fragment key={index}>\n <List.Item\n pl={4 * (lvl + 1)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <Link\n onClick={() => {\n onNavigate()\n\n reader?.navigation.goToUrl(tocItem.href)\n }}\n href=\"#\"\n >\n {currentSubChapter?.path === tocItem.path && (\n <List.Indicator asChild>\n <LuCircleCheck />\n </List.Indicator>\n )}\n {currentSubChapter?.path !== tocItem.path && (\n <List.Indicator asChild visibility=\"hidden\">\n <LuCircleCheck />\n </List.Indicator>\n )}\n <Stack gap={0}>\n <Text fontSize=\"md\">{tocItem.title || tocItem.path}</Text>\n {currentSubChapter?.path === tocItem.path && (\n <Text\n fontStyle=\"italic\"\n fontWeight=\"bold\"\n fontSize=\"sm\"\n >{`Currently on page ${\n currentSpineItemOrChapterPageIndex + 1\n }`}</Text>\n )}\n </Stack>\n </Link>\n </List.Item>\n {tocItem.contents.length > 0 && (\n <List.Root as=\"div\" gap={2}>\n {tocItem.contents.map((tocItem, index) =>\n buildTocForItem(tocItem, index, lvl + 1),\n )}\n </List.Root>\n )}\n </React.Fragment>\n )\n\n return (\n <List.Root gap={3} overflowY=\"auto\" py={4} flex={1}>\n {nav?.toc.map((tocItem, index) => buildTocForItem(tocItem, index, 0))}\n </List.Root>\n )\n },\n)\n","import { Button } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\nimport {\n DialogActionTrigger,\n DialogBody,\n DialogCloseTrigger,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogRoot,\n DialogTitle,\n} from \"../components/ui/dialog\"\nimport { TableOfContentsDialogContent } from \"./TableOfContentsDialogContent\"\n\nexport const TableOfContentsDialog = memo(\n ({\n open,\n setOpen,\n onNavigate,\n }: {\n open: boolean\n setOpen: (open: boolean) => void\n onNavigate: () => void\n }) => {\n return (\n <DialogRoot\n lazyMount\n placement=\"center\"\n open={open}\n onOpenChange={(e) => setOpen(e.open)}\n size={{ mdDown: \"full\", md: \"lg\" }}\n scrollBehavior=\"inside\"\n >\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Table of Contents</DialogTitle>\n </DialogHeader>\n <DialogBody overflowY=\"auto\" flex={1}>\n <TableOfContentsDialogContent onNavigate={onNavigate} />\n </DialogBody>\n <DialogFooter>\n <DialogActionTrigger asChild>\n <Button variant=\"outline\">Cancel</Button>\n </DialogActionTrigger>\n </DialogFooter>\n <DialogCloseTrigger />\n </DialogContent>\n </DialogRoot>\n )\n },\n)\n","import { Presence } from \"@chakra-ui/react\"\nimport { useCallback, useState } from \"react\"\nimport { AnnotationsDialog } from \"./annotations/AnnotationsDialog\"\nimport { Bookmarks } from \"./bookmarks/Bookmarks\"\nimport { BookmarksDialog } from \"./bookmarks/BookmarksDialog\"\nimport { Toaster } from \"./components/ui/toaster\"\nimport { HelpDialog } from \"./help/HelpDialog\"\nimport { FloatingProgress } from \"./navigation/FloatingProgress\"\nimport { FloatingTime } from \"./navigation/FloatingTime\"\nimport { useInterceptExternalLinks } from \"./navigation/useInterceptExternalLinks\"\nimport { useNotifications } from \"./notifications/useNotifications\"\nimport { QuickMenu } from \"./quickmenu/QuickMenu\"\nimport { useQuickMenu } from \"./quickmenu/useQuickMenu\"\nimport { SearchDialog } from \"./search/SearchDialog\"\nimport { TableOfContentsDialog } from \"./toc/TableOfContentsDialog\"\n\nexport const ReactReader = ({\n enableFloatingTime = true,\n enableFloatingProgress = true,\n onItemClick,\n}: {\n enableFloatingTime?: boolean\n enableFloatingProgress?: boolean\n onItemClick?: (\n item:\n | \"annotations\"\n | \"search\"\n | \"help\"\n | \"toc\"\n | \"bookmarks\"\n | \"more\"\n | \"back\",\n ) => void\n}) => {\n const [isTableOfContentsOpen, setIsTableOfContentsOpen] = useState(false)\n const [isHelpOpen, setIsHelpOpen] = useState(false)\n const [isSearchOpen, setIsSearchOpen] = useState(false)\n const [isAnnotationsOpen, setIsAnnotationsOpen] = useState(false)\n const [isBookmarksOpen, setIsBookmarksOpen] = useState(false)\n const [quickMenuOpen, setQuickMenuOpen] = useQuickMenu()\n\n const onNavigate = useCallback(() => {\n setIsTableOfContentsOpen(false)\n setIsHelpOpen(false)\n setIsSearchOpen(false)\n setIsAnnotationsOpen(false)\n setIsBookmarksOpen(false)\n setQuickMenuOpen(false)\n }, [setQuickMenuOpen])\n\n const _onItemClick: NonNullable<typeof onItemClick> = useCallback(\n (item) => {\n if (item === \"annotations\") {\n setIsAnnotationsOpen(true)\n } else if (item === \"search\") {\n setIsSearchOpen(true)\n } else if (item === \"help\") {\n setIsHelpOpen(true)\n } else if (item === \"toc\") {\n setIsTableOfContentsOpen(true)\n } else if (item === \"bookmarks\") {\n setIsBookmarksOpen(true)\n }\n onItemClick?.(item)\n },\n [onItemClick],\n )\n\n useInterceptExternalLinks()\n useNotifications()\n\n return (\n <>\n {enableFloatingProgress && (\n <Presence\n present={!quickMenuOpen}\n animationName={{ _open: \"fade-in\", _closed: \"fade-out\" }}\n animationDuration=\"moderate\"\n >\n <FloatingProgress />\n </Presence>\n )}\n <QuickMenu onItemClick={_onItemClick} />\n <Bookmarks />\n <HelpDialog open={isHelpOpen} setOpen={setIsHelpOpen} />\n <TableOfContentsDialog\n open={isTableOfContentsOpen}\n setOpen={setIsTableOfContentsOpen}\n onNavigate={onNavigate}\n />\n <SearchDialog\n open={isSearchOpen}\n setOpen={setIsSearchOpen}\n onNavigate={onNavigate}\n />\n <AnnotationsDialog\n open={isAnnotationsOpen}\n setOpen={setIsAnnotationsOpen}\n onNavigate={onNavigate}\n />\n <BookmarksDialog\n open={isBookmarksOpen}\n setOpen={setIsBookmarksOpen}\n onNavigate={onNavigate}\n />\n <Presence\n present={enableFloatingTime || quickMenuOpen}\n animationName={{ _open: \"fade-in\", _closed: \"fade-out\" }}\n animationDuration=\"slow\"\n overflow=\"hidden\"\n >\n <FloatingTime />\n </Presence>\n <Toaster />\n </>\n )\n}\n"],"names":["ReaderContext","createContext","signal","ReactReaderProvider","memo","children","reader","quickMenuOpen","onQuickMenuOpenChange","quickMenuSignal","useSignal","onQuickMenuOpenChangeLiveRef","useLiveRef","value","useMemo","useEffect","useSubscribe","tap","jsx","CloseButton","React","props","ref","ChakraIconButton","LuX","DialogContent","portalled","portalRef","backdrop","rest","Portal","ChakraDialog","DialogCloseTrigger","DialogRoot","DialogFooter","DialogHeader","DialogBody","DialogTitle","DialogActionTrigger","useReader","useContext","hasSearchEnhancer","hasBookmarksEnhancer","hasAnnotationsEnhancer","AnnotationsDialogContent","onNavigate","readerWithAnnotations","consolidatedHighlights","useObserve","switchMap","highlights","mapItemToListEntry","item","index","List","jsxs","Link","LuNotebookPen","Stack","Text","_a","AnnotationsDialog","open","setOpen","e","Button","Bookmarks","readerWithBookmarks","spineElement","pages","bookmarks","consolidatedBookmarks","Fragment","createPortal","isBookmarkable","left","top","width","bookmarkForPage","bookmark","Presence","Box","IconButton","BsBookmarkXFill","BsBookmarkPlus","BookmarksDialogContent","items","_e","_d","BookmarksDialog","toaster","createToaster","Toaster","ChakraToaster","toast","Toast","Spinner","HelpDialog","Heading","HStack","Kbd","LuArrowBigRight","LuArrowBigLeft","name","version","usePagination","combineLatest","map","state","context","isOnlyImages","NEVER","FloatingProgress","pagination","roundedProgress","displayableProgress","useTime","time","setTime","useState","interval","TimeIndicator","useQuickMenu","useSignalValue","FloatingTime","useInterceptExternalLinks","event","isHtmlTagElement","url","notificationsSignal","useNotifyZoom","isZooming","EMPTY","abort","Subject","finalize","useFontScaleChangeNotification","fontScale","distinctUntilChanged","skip","useNotifications","filter","isDefined","mergeMap","notification","duration","sameNotification$","n","merge","timer","first","ToggleTip","showArrow","content","ChakraPopover","InfoTip","HiOutlineInformationCircle","ProgressBar","ChakraProgress","info","ProgressRoot","ProgressValueText","useNavigationContext","hasOnlyOnePage","isBeginWithinChapter","isEndWithinChapter","beginPageIndex","endPageIndex","leftPageIndex","rightPageIndex","a","b","beginAndEndAreDifferent","totalApproximatePages","PaginationInfoSection","progress","buildTitleChain","chapterInfo","chapterTitle","QuickBar","position","ChakraRcSlider","chakra","RcSlider","ThemedSlider","useSliderValues","isUsingSpread","currentRealPage","currentPage","valueSignal","min","max","Scrubber","manifest","reverse","step","isScrubberWithinChapter","onChange","useCallback","values","pageIndex","BottomBar","onItemClick","navigation","settings","isVerticalDirection","isExtraOpen","setIsExtraOpen","RxDoubleArrowUp","RxDoubleArrowLeft","RxDoubleArrowDown","RxDoubleArrowRight","Collapsible","LuChevronDown","LuCircleHelp","LuTableOfContents","LuSearch","BsBookmarks","useFullscreen","isFullscreen","setIsFullscreen","onToggleFullscreenClick","fullscreenchangeHandler","TopBar","IoIosArrowBack","IoMdMore","MdFullscreenExit","MdFullscreen","QuickMenu","SearchListItem","contextText","startOffset","text","cfi","onClick","absolutePageIndex","before","after","SearchDialogContent","setText","readerWithSearch","onValueChange","search","data","startWith","searching","results","consolidatedResults","Input","result","j","_c","_b","_f","_g","SearchDialog","TableOfContentsDialogContent","assumedRenditionLayout","nav","beginSpineItemIndex","beginPageIndexInSpineItem","currentSpineItemOrChapterPageIndex","currentSubChapter","buildTocForItem","tocItem","lvl","LuCircleCheck","TableOfContentsDialog","ReactReader","enableFloatingTime","enableFloatingProgress","isTableOfContentsOpen","setIsTableOfContentsOpen","isHelpOpen","setIsHelpOpen","isSearchOpen","setIsSearchOpen","isAnnotationsOpen","setIsAnnotationsOpen","isBookmarksOpen","setIsBookmarksOpen","setQuickMenuOpen","_onItemClick"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/context/context.ts","../src/context/ReactReaderProvider.tsx","../src/components/ui/close-button.tsx","../src/components/ui/dialog.tsx","../src/context/useReader.ts","../src/annotations/AnnotationsDialogContent.tsx","../src/annotations/AnnotationsDialog.tsx","../src/bookmarks/Bookmarks.tsx","../src/bookmarks/BookmarksDialogContent.tsx","../src/bookmarks/BookmarksDialog.tsx","../src/components/ui/toaster.tsx","../src/gallery/GalleryDialog.tsx","../src/help/HelpDialog.tsx","../src/pagination/usePagination.ts","../src/navigation/FloatingProgress.tsx","../src/quickmenu/TimeIndicator.tsx","../src/quickmenu/useQuickMenu.ts","../src/navigation/FloatingTime.tsx","../src/navigation/useInterceptExternalLinks.ts","../src/notifications/notifications.ts","../src/zoom/useNotifyZoom.ts","../src/notifications/useNotifications.ts","../src/components/ui/toggle-tip.tsx","../src/components/ui/progress.tsx","../src/navigation/useNavigationContext.ts","../src/quickmenu/PaginationInfoSection.tsx","../src/quickmenu/QuickBar.tsx","../src/quickmenu/ThemedSlider.tsx","../src/quickmenu/Scrubber.tsx","../src/quickmenu/BottomBar.tsx","../src/common/useFullscreen.ts","../src/quickmenu/TopBar.tsx","../src/quickmenu/QuickMenu.tsx","../src/search/SearchListItem.tsx","../src/search/SearchDialogContent.tsx","../src/search/SearchDialog.tsx","../src/toc/TableOfContentsDialogContent.tsx","../src/toc/TableOfContentsDialog.tsx","../src/ReactReader.tsx"],"sourcesContent":["import type { Reader } from \"@prose-reader/core\"\nimport { type Context, createContext } from \"react\"\nimport { type Signal, signal } from \"reactjrx\"\n\ntype ContextType = {\n reader: Reader | undefined\n quickMenuSignal: Signal<boolean, boolean, undefined>\n}\n\nexport const ReaderContext: Context<ContextType> = createContext<ContextType>({\n reader: undefined,\n quickMenuSignal: signal({ default: false }),\n})\n","import type { Reader } from \"@prose-reader/core\"\nimport { memo, useEffect, useMemo } from \"react\"\nimport { useLiveRef, useSignal, useSubscribe } from \"reactjrx\"\nimport { tap } from \"rxjs\"\nimport { ReaderContext } from \"./context\"\n\nexport const ReactReaderProvider = memo(\n ({\n children,\n reader,\n quickMenuOpen,\n onQuickMenuOpenChange,\n }: {\n children?: React.ReactNode\n reader: Reader | undefined\n quickMenuOpen: boolean\n onQuickMenuOpenChange: (open: boolean) => void\n }) => {\n const [, quickMenuSignal] = useSignal({\n default: quickMenuOpen,\n })\n const onQuickMenuOpenChangeLiveRef = useLiveRef(onQuickMenuOpenChange)\n\n const value = useMemo(\n () => ({\n quickMenuSignal,\n reader,\n }),\n [quickMenuSignal, reader],\n )\n\n useEffect(() => {\n quickMenuSignal.setValue(quickMenuOpen)\n }, [quickMenuOpen, quickMenuSignal])\n\n useSubscribe(\n () =>\n quickMenuSignal.subject.pipe(tap(onQuickMenuOpenChangeLiveRef.current)),\n [quickMenuSignal, onQuickMenuOpenChangeLiveRef],\n )\n\n return (\n <ReaderContext.Provider value={value}>{children}</ReaderContext.Provider>\n )\n },\n)\n","import type { ButtonProps } from \"@chakra-ui/react\"\nimport { IconButton as ChakraIconButton } from \"@chakra-ui/react\"\nimport * as React from \"react\"\nimport { LuX } from \"react-icons/lu\"\n\nexport type CloseButtonProps = ButtonProps\n\nexport const CloseButton = React.forwardRef<\n HTMLButtonElement,\n CloseButtonProps\n>(function CloseButton(props, ref) {\n return (\n <ChakraIconButton variant=\"ghost\" aria-label=\"Close\" ref={ref} {...props}>\n {props.children ?? <LuX />}\n </ChakraIconButton>\n )\n})\n","import { Dialog as ChakraDialog, Portal } from \"@chakra-ui/react\"\nimport { CloseButton } from \"./close-button\"\nimport * as React from \"react\"\n\ninterface DialogContentProps extends ChakraDialog.ContentProps {\n portalled?: boolean\n portalRef?: React.RefObject<HTMLElement>\n backdrop?: boolean\n}\n\nexport const DialogContent = React.forwardRef<\n HTMLDivElement,\n DialogContentProps\n>(function DialogContent(props, ref) {\n const {\n children,\n portalled = true,\n portalRef,\n backdrop = true,\n ...rest\n } = props\n\n return (\n <Portal disabled={!portalled} container={portalRef}>\n {backdrop && <ChakraDialog.Backdrop />}\n <ChakraDialog.Positioner>\n <ChakraDialog.Content ref={ref} {...rest} asChild={false}>\n {children}\n </ChakraDialog.Content>\n </ChakraDialog.Positioner>\n </Portal>\n )\n})\n\nexport const DialogCloseTrigger = React.forwardRef<\n HTMLButtonElement,\n ChakraDialog.CloseTriggerProps\n>(function DialogCloseTrigger(props, ref) {\n return (\n <ChakraDialog.CloseTrigger\n position=\"absolute\"\n top=\"2\"\n insetEnd=\"2\"\n {...props}\n asChild\n >\n <CloseButton size=\"sm\" ref={ref}>\n {props.children}\n </CloseButton>\n </ChakraDialog.CloseTrigger>\n )\n})\n\nexport const DialogRoot = ChakraDialog.Root\nexport const DialogFooter = ChakraDialog.Footer\nexport const DialogHeader = ChakraDialog.Header\nexport const DialogBody = ChakraDialog.Body\nexport const DialogBackdrop = ChakraDialog.Backdrop\nexport const DialogTitle = ChakraDialog.Title\nexport const DialogDescription = ChakraDialog.Description\nexport const DialogTrigger = ChakraDialog.Trigger\nexport const DialogActionTrigger = ChakraDialog.ActionTrigger\n","import type { Reader } from \"@prose-reader/core\"\nimport type { AnnotationsEnhancerAPI } from \"@prose-reader/enhancer-annotations\"\nimport type { BookmarksEnhancerAPI } from \"@prose-reader/enhancer-bookmarks\"\nimport type { GalleryEnhancerAPI } from \"@prose-reader/enhancer-gallery\"\nimport type { SearchEnhancerAPI } from \"@prose-reader/enhancer-search\"\nimport { useContext } from \"react\"\nimport { ReaderContext } from \"./context\"\n\nexport const useReader = (): Reader | undefined => {\n const { reader } = useContext(ReaderContext)\n\n return reader\n}\n\nexport const hasSearchEnhancer = (\n reader?: Reader,\n): reader is Reader & SearchEnhancerAPI => {\n return !!reader && \"__PROSE_READER_ENHANCER_SEARCH\" in reader\n}\n\nexport const hasBookmarksEnhancer = (\n reader?: Reader,\n): reader is Reader & BookmarksEnhancerAPI => {\n return !!reader && \"__PROSE_READER_ENHANCER_BOOKMARKS\" in reader\n}\n\nexport const hasAnnotationsEnhancer = (\n reader?: Reader,\n): reader is Reader & AnnotationsEnhancerAPI => {\n return !!reader && \"__PROSE_READER_ENHANCER_ANNOTATIONS\" in reader\n}\n\nexport const hasGalleryEnhancer = (\n reader?: Reader,\n): reader is Reader & GalleryEnhancerAPI => {\n return !!reader && \"__PROSE_READER_ENHANCER_GALLERY\" in reader\n}\n","import { Link, List, Stack, Text } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\nimport { LuNotebookPen } from \"react-icons/lu\"\nimport { useObserve } from \"reactjrx\"\nimport { switchMap } from \"rxjs\"\nimport { hasAnnotationsEnhancer, useReader } from \"../context/useReader\"\n\nexport const AnnotationsDialogContent = memo(\n ({ onNavigate }: { onNavigate: () => void }) => {\n const reader = useReader()\n const readerWithAnnotations = hasAnnotationsEnhancer(reader)\n ? reader\n : undefined\n\n const consolidatedHighlights = useObserve(\n () =>\n readerWithAnnotations?.annotations.highlights$.pipe(\n switchMap((highlights) =>\n readerWithAnnotations.pagination.locate(highlights),\n ),\n ),\n [readerWithAnnotations],\n )\n\n const mapItemToListEntry = (\n item: NonNullable<typeof consolidatedHighlights>[number],\n index: number,\n ) => (\n <List.Item key={index}>\n <Link\n href=\"#\"\n onClick={() => {\n onNavigate()\n\n reader?.navigation.goToCfi(item.cfi ?? \"\")\n }}\n >\n {(item.contents ?? [])[0] ? (\n <List.Indicator asChild>\n <LuNotebookPen />\n </List.Indicator>\n ) : (\n <List.Indicator asChild visibility=\"hidden\">\n <LuNotebookPen />\n </List.Indicator>\n )}\n <Stack gap={0}>\n <Text lineClamp={2} fontSize=\"md\">\n {item.selectionAsText ? (\n (item.selectionAsText ?? \"\")\n ) : (\n <i>\n <b>unknown (not loaded)</b>\n </i>\n )}\n </Text>\n <Text\n fontStyle=\"italic\"\n fontWeight=\"bold\"\n fontSize=\"sm\"\n >{`Book page: ${\n item.meta?.absolutePageIndex !== undefined\n ? item.meta.absolutePageIndex + 1\n : \"unknown (not loaded)\"\n }`}</Text>\n </Stack>\n </Link>\n </List.Item>\n )\n\n return (\n <List.Root overflowY=\"auto\" gap={3} pt={4} variant=\"plain\">\n {consolidatedHighlights?.map((item, index) =>\n mapItemToListEntry(item, index),\n )}\n </List.Root>\n )\n },\n)\n","import { Button } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\nimport {\n DialogActionTrigger,\n DialogBody,\n DialogCloseTrigger,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogRoot,\n DialogTitle,\n} from \"../components/ui/dialog\"\nimport { AnnotationsDialogContent } from \"./AnnotationsDialogContent\"\n\nexport const AnnotationsDialog = memo(\n ({\n open,\n setOpen,\n onNavigate,\n }: {\n open: boolean\n setOpen: (open: boolean) => void\n onNavigate: () => void\n }) => {\n return (\n <DialogRoot\n lazyMount\n placement=\"center\"\n open={open}\n onOpenChange={(e) => setOpen(e.open)}\n size={{ mdDown: \"full\", md: \"lg\" }}\n scrollBehavior=\"inside\"\n >\n <DialogContent height=\"100%\">\n <DialogHeader>\n <DialogTitle>Annotations</DialogTitle>\n </DialogHeader>\n <DialogBody flex={1}>\n <AnnotationsDialogContent onNavigate={onNavigate} />\n </DialogBody>\n <DialogFooter>\n <DialogActionTrigger asChild>\n <Button variant=\"outline\">Cancel</Button>\n </DialogActionTrigger>\n </DialogFooter>\n <DialogCloseTrigger />\n </DialogContent>\n </DialogRoot>\n )\n },\n)\n","import { Box, IconButton, Presence } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { BsBookmarkPlus, BsBookmarkXFill } from \"react-icons/bs\"\nimport { useObserve } from \"reactjrx\"\nimport { hasBookmarksEnhancer, useReader } from \"../context/useReader\"\n\nexport const Bookmarks = memo(() => {\n const reader = useReader()\n const readerWithBookmarks = hasBookmarksEnhancer(reader) ? reader : undefined\n const spineElement = useObserve(() => reader?.spine.element$, [reader])\n const pages = useObserve(\n () => readerWithBookmarks?.bookmarks.pages$,\n [readerWithBookmarks],\n )\n const bookmarks = useObserve(\n () => readerWithBookmarks?.bookmarks.bookmarks$,\n [readerWithBookmarks],\n )\n const consolidatedBookmarks = useObserve(\n () => reader?.pagination.locate(bookmarks ?? []),\n [reader, bookmarks],\n )\n\n if (!spineElement) return null\n\n return (\n <>\n {createPortal(\n pages?.map(\n (\n { isBookmarkable, absolutePosition: { left, top, width } },\n index,\n ) => {\n const bookmarkForPage = consolidatedBookmarks?.find(\n (bookmark) => bookmark.meta?.absolutePageIndex === index,\n )\n\n /**\n * Stale bookmarks means we cannot assert at the moment whether the page is marked or not.\n * In this case we just hide the bookmark button. You may want to have different UX to handle\n * this case.\n *\n * This also avoid having a flash where you show an non bookmarked icon and right away change it with\n * a valid marked page icon.\n */\n if (!isBookmarkable) return null\n\n return (\n <Presence\n key={index}\n present={true}\n lazyMount\n animationName={{ _open: \"fade-in\", _closed: \"fade-out\" }}\n animationDuration=\"moderate\"\n >\n <Box\n data-bookmark-area\n position=\"absolute\"\n left={left + width}\n transform=\"translateX(-100%)\"\n top={top}\n p={2}\n >\n {!bookmarkForPage ? (\n <IconButton\n aria-label=\"bookmark\"\n onClick={() => {\n readerWithBookmarks?.bookmarks.bookmark(index)\n }}\n size=\"lg\"\n bgColor=\"white\"\n opacity={0.5}\n _hover={{ opacity: 1 }}\n variant=\"ghost\"\n _icon={{ boxSize: \"36px\" }}\n >\n <BsBookmarkPlus />\n </IconButton>\n ) : (\n <IconButton\n aria-label=\"bookmark\"\n opacity={0.5}\n _hover={{ opacity: 1 }}\n onClick={() => {\n bookmarkForPage &&\n readerWithBookmarks?.bookmarks.delete(\n bookmarkForPage?.id,\n )\n }}\n size=\"lg\"\n variant=\"ghost\"\n _icon={{ boxSize: \"36px\" }}\n >\n <BsBookmarkXFill />\n </IconButton>\n )}\n </Box>\n </Presence>\n )\n },\n ),\n spineElement,\n )}\n </>\n )\n})\n","import { Button, Link, List, Stack, Text } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\nimport { useObserve } from \"reactjrx\"\nimport { switchMap } from \"rxjs\"\nimport { hasBookmarksEnhancer, useReader } from \"../context/useReader\"\n\nexport const BookmarksDialogContent = memo(\n ({ onNavigate }: { onNavigate: () => void }) => {\n const reader = useReader()\n const readerWithBookmarks = hasBookmarksEnhancer(reader)\n ? reader\n : undefined\n\n const consolidatedBookmarks = useObserve(\n () =>\n readerWithBookmarks?.bookmarks.bookmarks$.pipe(\n switchMap((items) => readerWithBookmarks.pagination.locate(items)),\n ),\n [readerWithBookmarks],\n )\n\n const mapItemToListEntry = (\n item: NonNullable<typeof consolidatedBookmarks>[number],\n index: number,\n ) => (\n <List.Item key={index} justifyContent=\"space-between\" alignItems=\"center\">\n <Link\n href=\"#\"\n onClick={() => {\n onNavigate()\n\n reader?.navigation.goToCfi(item.cfi ?? \"\")\n }}\n >\n <Stack gap={0}>\n <Text fontSize=\"md\">\n {`Book page: ${\n item.meta?.absolutePageIndex !== undefined\n ? item.meta.absolutePageIndex + 1\n : \"unknown\"\n }`}\n </Text>\n <Text\n fontStyle=\"italic\"\n fontWeight=\"bold\"\n fontSize=\"sm\"\n truncate\n lineClamp={2}\n >\n {item.meta?.startNode?.textContent\n ? item.meta?.startNode?.textContent\n : \"...\"}\n </Text>\n </Stack>\n </Link>\n <Button\n colorPalette=\"red\"\n variant=\"solid\"\n size=\"xs\"\n onClick={() => {\n readerWithBookmarks?.bookmarks.delete(item.id)\n }}\n >\n Delete\n </Button>\n </List.Item>\n )\n\n return (\n <List.Root overflowY=\"auto\" gap={3} variant=\"plain\" overflow=\"auto\">\n {consolidatedBookmarks?.map((item, index) =>\n mapItemToListEntry(item, index),\n )}\n </List.Root>\n )\n },\n)\n","import { Button } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\nimport {\n DialogActionTrigger,\n DialogBody,\n DialogCloseTrigger,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogRoot,\n DialogTitle,\n} from \"../components/ui/dialog\"\nimport { BookmarksDialogContent } from \"./BookmarksDialogContent\"\n\nexport const BookmarksDialog = memo(\n ({\n open,\n setOpen,\n onNavigate,\n }: {\n open: boolean\n setOpen: (open: boolean) => void\n onNavigate: () => void\n }) => {\n return (\n <DialogRoot\n lazyMount\n placement=\"center\"\n open={open}\n onOpenChange={(e) => setOpen(e.open)}\n size={{ mdDown: \"full\", md: \"lg\" }}\n scrollBehavior=\"inside\"\n >\n <DialogContent height=\"100%\">\n <DialogHeader>\n <DialogTitle>Bookmarks</DialogTitle>\n </DialogHeader>\n <DialogBody>\n <BookmarksDialogContent onNavigate={onNavigate} />\n </DialogBody>\n <DialogFooter>\n <DialogActionTrigger asChild>\n <Button variant=\"outline\">Cancel</Button>\n </DialogActionTrigger>\n </DialogFooter>\n <DialogCloseTrigger />\n </DialogContent>\n </DialogRoot>\n )\n },\n)\n","\"use client\"\n\nimport {\n Toaster as ChakraToaster,\n Portal,\n Spinner,\n Stack,\n Toast,\n createToaster,\n} from \"@chakra-ui/react\"\n\nexport const toaster = createToaster({\n placement: \"bottom-end\",\n pauseOnPageIdle: true,\n})\n\nexport const Toaster = () => {\n return (\n <Portal>\n <ChakraToaster toaster={toaster} insetInline={{ mdDown: \"4\" }}>\n {(toast) => (\n <Toast.Root width={{ md: \"sm\" }}>\n {toast.type === \"loading\" ? (\n <Spinner size=\"sm\" color=\"blue.solid\" />\n ) : (\n <Toast.Indicator />\n )}\n <Stack gap=\"1\" flex=\"1\" maxWidth=\"100%\">\n {toast.title && <Toast.Title>{toast.title}</Toast.Title>}\n {toast.description && (\n <Toast.Description>{toast.description}</Toast.Description>\n )}\n </Stack>\n {toast.action && (\n <Toast.ActionTrigger>{toast.action.label}</Toast.ActionTrigger>\n )}\n {toast.meta?.closable && <Toast.CloseTrigger />}\n </Toast.Root>\n )}\n </ChakraToaster>\n </Portal>\n )\n}\n","import { Button } from \"@chakra-ui/react\"\nimport { memo, useEffect, useState } from \"react\"\nimport { useObserve } from \"reactjrx\"\nimport {\n DialogActionTrigger,\n DialogBody,\n DialogCloseTrigger,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogRoot,\n DialogTitle,\n} from \"../components/ui/dialog\"\nimport { hasGalleryEnhancer, useReader } from \"../context/useReader\"\n\nexport const GalleryDialog = memo(\n ({\n open,\n setOpen,\n }: {\n open: boolean\n setOpen: (open: boolean) => void\n }) => {\n const reader = useReader()\n const [element, setElement] = useState<HTMLElement | null>(null)\n const readerWithGalleryEnhancer = hasGalleryEnhancer(reader)\n ? reader\n : undefined\n\n const gridItemClassName = \"prose-gallery-grid-item\"\n\n const galleryRootElement = useObserve(\n () =>\n readerWithGalleryEnhancer?.gallery.create({\n gridItemClassName,\n }),\n [readerWithGalleryEnhancer],\n )\n\n useEffect(() => {\n if (element && galleryRootElement) {\n element.innerHTML = \"\"\n element.appendChild(galleryRootElement)\n }\n }, [galleryRootElement, element])\n\n return (\n <DialogRoot\n lazyMount\n placement=\"center\"\n open={open}\n onOpenChange={(e) => setOpen(e.open)}\n size={{ mdDown: \"full\", md: \"lg\" }}\n scrollBehavior=\"inside\"\n >\n <DialogContent height=\"100%\">\n <DialogHeader>\n <DialogTitle>Gallery</DialogTitle>\n </DialogHeader>\n <DialogBody\n ref={setElement}\n css={{\n \"--prose-gallery-columns\": [\"2\", \"3\"],\n [`& .${gridItemClassName}`]: {\n border: \"1px solid red\",\n borderColor: \"border\",\n borderRadius: \"md\",\n },\n }}\n />\n <DialogFooter>\n <DialogActionTrigger asChild>\n <Button variant=\"outline\">Cancel</Button>\n </DialogActionTrigger>\n </DialogFooter>\n <DialogCloseTrigger />\n </DialogContent>\n </DialogRoot>\n )\n },\n)\n","import { Button, HStack, Heading, Kbd, Text } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\nimport { LuArrowBigLeft, LuArrowBigRight } from \"react-icons/lu\"\nimport { name, version } from \"../../package.json\"\nimport {\n DialogActionTrigger,\n DialogBody,\n DialogCloseTrigger,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogRoot,\n DialogTitle,\n} from \"../components/ui/dialog\"\n\nexport const HelpDialog = memo(\n ({\n open,\n setOpen,\n }: {\n open: boolean\n setOpen: (open: boolean) => void\n }) => {\n return (\n <DialogRoot\n lazyMount\n placement=\"center\"\n open={open}\n onOpenChange={(e) => setOpen(e.open)}\n size={{ mdDown: \"full\", md: \"lg\" }}\n scrollBehavior=\"inside\"\n >\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Help</DialogTitle>\n </DialogHeader>\n <DialogBody overflowY=\"auto\" flex={1}>\n <Heading mb={2} as=\"h3\" size=\"lg\">\n Shortcuts\n </Heading>\n <HStack mb={1}>\n <Kbd>\n <LuArrowBigRight />\n </Kbd>{\" \"}\n <Text>Navigate to right page</Text>\n </HStack>\n <HStack mb={1}>\n <Kbd>\n <LuArrowBigLeft />\n </Kbd>{\" \"}\n <Text>Navigate to left page</Text>\n </HStack>\n <Heading mb={2} mt={4} as=\"h3\" size=\"lg\">\n About\n </Heading>\n <Text>\n {name} version: {version}\n </Text>\n </DialogBody>\n <DialogFooter>\n <DialogActionTrigger asChild>\n <Button variant=\"outline\">Cancel</Button>\n </DialogActionTrigger>\n </DialogFooter>\n <DialogCloseTrigger />\n </DialogContent>\n </DialogRoot>\n )\n },\n)\n","import type { Reader } from \"@prose-reader/core\"\nimport { useObserve } from \"reactjrx\"\nimport { NEVER, combineLatest, map } from \"rxjs\"\nimport { useReader } from \"../context/useReader\"\n\nexport const usePagination = ():\n | (Reader[\"pagination\"][\"state\"] & { hasChapters: boolean })\n | undefined => {\n const reader = useReader()\n\n return useObserve(\n () =>\n !reader\n ? NEVER\n : combineLatest([reader.pagination.state$, reader.context.state$]).pipe(\n map(([state, context]) => {\n const isOnlyImages = context.manifest?.spineItems.every((item) =>\n item.mediaType?.startsWith(\"image/\"),\n )\n\n return {\n ...state,\n hasChapters: !context.isFullyPrePaginated && !isOnlyImages,\n }\n }),\n ),\n [reader],\n )\n}\n","import { Box, Text } from \"@chakra-ui/react\"\nimport { usePagination } from \"../pagination/usePagination\"\n\nexport const FloatingProgress = () => {\n const pagination = usePagination()\n const roundedProgress = Math.floor(\n (pagination?.percentageEstimateOfBook ?? 0) * 100,\n )\n const displayableProgress = roundedProgress > 0 ? roundedProgress : 1\n\n if (pagination?.percentageEstimateOfBook === undefined) return null\n\n return (\n <Box position=\"absolute\" right={0} bottom={0} p={2} color={\"black\"}>\n <Text fontSize=\"sm\">{displayableProgress} %</Text>\n </Box>\n )\n}\n","import { Text, type TextProps } from \"@chakra-ui/react\"\nimport { useEffect, useState } from \"react\"\n\nexport const useTime = () => {\n const [time, setTime] = useState(new Date())\n\n useEffect(() => {\n const interval = setInterval(() => {\n setTime(new Date())\n }, 1000 * 60)\n\n return () => clearInterval(interval)\n }, [])\n\n return time\n}\n\nexport const TimeIndicator = (props: TextProps) => {\n const time = useTime()\n\n return (\n <Text fontSize=\"xs\" {...props}>\n {time.toLocaleTimeString(navigator.language, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n })}\n </Text>\n )\n}\n","import { useContext } from \"react\"\nimport { useSignalValue } from \"reactjrx\"\nimport { ReaderContext } from \"../context/context\"\n\nexport const useQuickMenu = () => {\n const { quickMenuSignal } = useContext(ReaderContext)\n\n const quickMenu = useSignalValue(quickMenuSignal)\n\n return [quickMenu, quickMenuSignal.setValue, quickMenuSignal] as const\n}\n","import { Box } from \"@chakra-ui/react\"\nimport { TimeIndicator } from \"../quickmenu/TimeIndicator\"\nimport { useQuickMenu } from \"../quickmenu/useQuickMenu\"\n\nexport const FloatingTime = () => {\n const [quickMenuOpen] = useQuickMenu()\n\n return (\n <Box\n position=\"absolute\"\n left={0}\n bottom={0}\n p={2}\n color={quickMenuOpen ? undefined : \"colorPalette.contrast\"}\n >\n <TimeIndicator />\n </Box>\n )\n}\n","import { isHtmlTagElement } from \"@prose-reader/core\"\nimport { useSubscribe } from \"reactjrx\"\nimport { useReader } from \"../context/useReader\"\n\nexport const useInterceptExternalLinks = () => {\n const reader = useReader()\n\n useSubscribe(\n () =>\n reader?.links$.subscribe((event) => {\n if (event.type === \"click\" && isHtmlTagElement(event.target, \"a\")) {\n if (!event.target.href) return\n\n const url = new URL(event.target.href)\n\n if (window.location.host !== url.host) {\n const response = confirm(\n `You are going to be redirected to external link`,\n )\n\n if (response) {\n window.open(event.target.href, \"__blank\")\n }\n }\n }\n }),\n [reader],\n )\n}\n","import { signal } from \"reactjrx\"\nimport type { Observable } from \"rxjs\"\n\nexport const notificationsSignal = signal<\n | {\n key?: string\n title: string\n description?: string\n duration?: number\n abort?: Observable<unknown>\n }\n | undefined\n>({\n default: undefined,\n})\n","import { useSubscribe } from \"reactjrx\"\nimport { EMPTY, NEVER, Subject, finalize, switchMap } from \"rxjs\"\nimport { useReader } from \"../context/useReader\"\nimport { notificationsSignal } from \"../notifications/notifications\"\n\nexport const useNotifyZoom = () => {\n const reader = useReader()\n\n useSubscribe(\n () =>\n reader?.zoom.isZooming$.pipe(\n switchMap((isZooming) => {\n if (!isZooming) return EMPTY\n\n const abort = new Subject<void>()\n\n notificationsSignal.setValue({\n key: \"zoom\",\n title: \"Zooming\",\n duration: 999999,\n abort: abort,\n })\n\n return NEVER.pipe(\n finalize(() => {\n abort.next()\n abort.complete()\n }),\n )\n }),\n ),\n [reader],\n )\n}\n","import { isDefined, useSubscribe } from \"reactjrx\"\nimport {\n NEVER,\n distinctUntilChanged,\n filter,\n finalize,\n first,\n map,\n merge,\n mergeMap,\n skip,\n tap,\n timer,\n} from \"rxjs\"\nimport { toaster } from \"../components/ui/toaster\"\nimport { useReader } from \"../context/useReader\"\nimport { useNotifyZoom } from \"../zoom/useNotifyZoom\"\nimport { notificationsSignal } from \"./notifications\"\n\nconst useFontScaleChangeNotification = () => {\n const reader = useReader()\n\n useSubscribe(\n () =>\n reader?.settings.values$.pipe(\n map(({ fontScale }) => fontScale),\n distinctUntilChanged(),\n skip(1),\n tap((fontScale) => {\n notificationsSignal.setValue({\n key: \"fontScaleChange\",\n title: \"Font size changed\",\n description: `${fontScale * 100} %`,\n })\n }),\n ),\n [reader],\n )\n}\n\nexport const useNotifications = () => {\n useFontScaleChangeNotification()\n useNotifyZoom()\n\n useSubscribe(() =>\n notificationsSignal.subject.pipe(\n // @todo implement Signal / BehaviorSignal / ReplaySignal\n skip(1),\n filter(isDefined),\n mergeMap((notification) => {\n const duration = notification.duration ?? 3000\n\n const toast = toaster.create({\n title: notification.title,\n description: notification.description,\n duration,\n })\n\n const sameNotification$ = notificationsSignal.subject.pipe(\n skip(1),\n filter((n) => !!notification.key && n?.key === notification.key),\n )\n\n return merge(\n timer(duration),\n notification.abort ?? NEVER,\n sameNotification$,\n ).pipe(\n first(),\n finalize(() => {\n toaster.dismiss(toast)\n }),\n )\n }),\n ),\n )\n}\n","import { Popover as ChakraPopover, IconButton, Portal } from \"@chakra-ui/react\"\nimport * as React from \"react\"\nimport { HiOutlineInformationCircle } from \"react-icons/hi\"\n\nexport interface ToggleTipProps extends ChakraPopover.RootProps {\n showArrow?: boolean\n portalled?: boolean\n portalRef?: React.RefObject<HTMLElement>\n content?: React.ReactNode\n}\n\nexport const ToggleTip = React.forwardRef<HTMLDivElement, ToggleTipProps>(\n function ToggleTip(props, ref) {\n const {\n showArrow,\n children,\n portalled = true,\n content,\n portalRef,\n ...rest\n } = props\n\n return (\n <ChakraPopover.Root\n {...rest}\n positioning={{ ...rest.positioning, gutter: 4 }}\n >\n <ChakraPopover.Trigger asChild>{children}</ChakraPopover.Trigger>\n <Portal disabled={!portalled} container={portalRef}>\n <ChakraPopover.Positioner>\n <ChakraPopover.Content\n width=\"auto\"\n px=\"2\"\n py=\"1\"\n textStyle=\"xs\"\n rounded=\"sm\"\n ref={ref}\n >\n {showArrow && (\n <ChakraPopover.Arrow>\n <ChakraPopover.ArrowTip />\n </ChakraPopover.Arrow>\n )}\n {content}\n </ChakraPopover.Content>\n </ChakraPopover.Positioner>\n </Portal>\n </ChakraPopover.Root>\n )\n },\n)\n\nexport const InfoTip = React.forwardRef<\n HTMLDivElement,\n Partial<ToggleTipProps>\n>(function InfoTip(props, ref) {\n const { children, ...rest } = props\n return (\n <ToggleTip content={children} {...rest} ref={ref}>\n <IconButton\n variant=\"ghost\"\n aria-label=\"info\"\n size=\"2xs\"\n colorPalette=\"gray\"\n >\n <HiOutlineInformationCircle />\n </IconButton>\n </ToggleTip>\n )\n})\n","import { Progress as ChakraProgress } from \"@chakra-ui/react\"\nimport { InfoTip } from \"./toggle-tip\"\nimport * as React from \"react\"\n\nexport const ProgressBar = React.forwardRef<\n HTMLDivElement,\n ChakraProgress.TrackProps\n>(function ProgressBar(props, ref) {\n return (\n <ChakraProgress.Track {...props} ref={ref}>\n <ChakraProgress.Range />\n </ChakraProgress.Track>\n )\n})\n\nexport interface ProgressLabelProps extends ChakraProgress.LabelProps {\n info?: React.ReactNode\n}\n\nexport const ProgressLabel = React.forwardRef<\n HTMLDivElement,\n ProgressLabelProps\n>(function ProgressLabel(props, ref) {\n const { children, info, ...rest } = props\n return (\n <ChakraProgress.Label {...rest} ref={ref}>\n {children}\n {info && <InfoTip>{info}</InfoTip>}\n </ChakraProgress.Label>\n )\n})\n\nexport const ProgressRoot = ChakraProgress.Root\nexport const ProgressValueText = ChakraProgress.ValueText\n","import { usePagination } from \"../pagination/usePagination\"\n\nexport const useNavigationContext = () => {\n const pagination = usePagination()\n const hasOnlyOnePage = pagination?.numberOfTotalPages === 1\n\n const isBeginWithinChapter =\n (pagination?.beginNumberOfPagesInSpineItem ?? 0) > 1\n\n const isEndWithinChapter = (pagination?.endNumberOfPagesInSpineItem ?? 0) > 1\n\n const beginPageIndex =\n (pagination?.hasChapters\n ? pagination?.beginPageIndexInSpineItem\n : pagination?.beginAbsolutePageIndex) ?? 0\n const endPageIndex =\n (pagination?.hasChapters\n ? pagination?.endPageIndexInSpineItem\n : pagination?.endAbsolutePageIndex) ?? 0\n\n const [leftPageIndex = 0, rightPageIndex = 0] = [\n beginPageIndex,\n endPageIndex,\n ].sort((a, b) => a - b)\n\n const beginAndEndAreDifferent =\n pagination?.beginPageIndexInSpineItem !==\n pagination?.endPageIndexInSpineItem ||\n pagination?.beginSpineItemIndex !== pagination?.endSpineItemIndex\n\n const totalApproximatePages = pagination?.hasChapters\n ? pagination?.beginNumberOfPagesInSpineItem\n : pagination?.numberOfTotalPages\n\n return {\n hasOnlyOnePage,\n beginPageIndex,\n endPageIndex,\n isBeginWithinChapter,\n isEndWithinChapter,\n beginAndEndAreDifferent,\n totalApproximatePages,\n leftPageIndex,\n rightPageIndex,\n }\n}\n","import { HStack, Stack, Text } from \"@chakra-ui/react\"\nimport {\n ProgressBar,\n ProgressRoot,\n ProgressValueText,\n} from \"../components/ui/progress\"\nimport { useNavigationContext } from \"../navigation/useNavigationContext\"\nimport { usePagination } from \"../pagination/usePagination\"\n\nexport const PaginationInfoSection = () => {\n const pagination = usePagination()\n const {\n hasOnlyOnePage,\n leftPageIndex,\n rightPageIndex,\n totalApproximatePages,\n beginAndEndAreDifferent,\n } = useNavigationContext()\n const progress = Math.round((pagination?.percentageEstimateOfBook ?? 0) * 100)\n\n const buildTitleChain = (\n chapterInfo: NonNullable<typeof pagination>[\"beginChapterInfo\"],\n ): string => {\n if (chapterInfo?.subChapter) {\n return `${chapterInfo.title} / ${buildTitleChain(chapterInfo.subChapter)}`\n }\n return chapterInfo?.title || \"\"\n }\n\n const chapterTitle = buildTitleChain(pagination?.beginChapterInfo)\n\n return (\n <Stack alignItems=\"center\" gap={1} maxW=\"100%\" overflow=\"auto\">\n <ProgressRoot value={progress} size=\"xs\" width={150}>\n <HStack justifyContent=\"space-between\">\n <ProgressBar width={110} />\n <ProgressValueText>{`${progress}%`}</ProgressValueText>\n </HStack>\n </ProgressRoot>\n <Text truncate maxWidth=\"100%\" fontSize=\"sm\" mt={1}>\n {chapterTitle ? `Chapter: ${chapterTitle}` : `\\u00A0`}\n </Text>\n {!hasOnlyOnePage && (\n <HStack>\n <Text fontSize=\"xs\">\n {beginAndEndAreDifferent\n ? `${leftPageIndex + 1} - ${rightPageIndex + 1} of ${totalApproximatePages}`\n : `${leftPageIndex + 1} of ${totalApproximatePages}`}\n </Text>\n {!!pagination?.hasChapters && (\n <>\n <Text>-</Text>\n <Text fontSize=\"xs\">\n ({(pagination?.beginAbsolutePageIndex ?? 0) + 1})\n </Text>\n </>\n )}\n </HStack>\n )}\n </Stack>\n )\n}\n","import { Presence, type PresenceProps } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\n\nexport const QuickBar = memo(\n ({\n children,\n position,\n ...rest\n }: { position: \"top\" | \"bottom\" } & PresenceProps) => {\n return (\n <Presence\n display=\"flex\"\n flexDirection=\"row\"\n width=\"100%\"\n position=\"absolute\"\n {...(position === \"bottom\" ? { bottom: 0 } : { top: 0 })}\n animationName={\n position === \"bottom\"\n ? {\n _open: \"slide-from-bottom, fade-in\",\n _closed: \"slide-to-bottom, fade-out\",\n }\n : {\n _open: \"slide-from-top, fade-in\",\n _closed: \"slide-to-top, fade-out\",\n }\n }\n animationDuration=\"moderate\"\n bgColor=\"bg.panel\"\n alignItems=\"center\"\n justifyContent=\"center\"\n shadow=\"md\"\n p={4}\n {...rest}\n >\n {children}\n </Presence>\n )\n },\n)\n","import RcSlider from \"rc-slider\"\nimport { type ComponentProps, memo } from \"react\"\nimport \"rc-slider/assets/index.css\"\nimport { Box, chakra } from \"@chakra-ui/react\"\n\nconst ChakraRcSlider = chakra(RcSlider)\n\nexport const ThemedSlider = memo((props: ComponentProps<typeof RcSlider>) => {\n return (\n <Box\n display=\"contents\"\n css={{\n \"--bg\": \"colors.bg\",\n \"--bg-emphasized\": \"colors.bg.emphasized\",\n \"--color-solid\": \"colors.colorPalette.solid\",\n }}\n >\n <ChakraRcSlider\n keyboard={false}\n style={{\n padding: 0,\n }}\n css={{\n \"& > .rc-slider-handle:focus-visible\": {\n boxShadow: \"0 0 0 2px var(--color-solid) !important\",\n },\n \"& > .rc-slider-handle:active\": {\n boxShadow: \"0 0 5px var(--color-solid) !important\",\n },\n \"& > .rc-slider-handle.rc-slider-handle-dragging\": {\n boxShadow: \"0 0 0 3px var(--color-solid) !important\",\n },\n }}\n styles={{\n rail: {\n height: \"8px\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n backgroundColor: \"var(--bg-emphasized)\",\n },\n track: {\n height: \"8px\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n backgroundColor: \"var(--color-solid)\",\n },\n handle: {\n width: \"24px\",\n height: \"24px\",\n top: \"50%\",\n borderColor: \"var(--color-solid)\",\n transform: `translate(${props.reverse ? \"50%\" : \"-50%\"}, -50%)`,\n backgroundColor: \"var(--bg)\",\n marginTop: \"0px\",\n },\n }}\n {...props}\n />\n </Box>\n )\n})\n","import { Box } from \"@chakra-ui/react\"\nimport { type ComponentProps, useCallback, useEffect } from \"react\"\nimport { useObserve, useSignal, useSubscribe } from \"reactjrx\"\nimport { useReader } from \"../context/useReader\"\nimport { useNavigationContext } from \"../navigation/useNavigationContext\"\nimport { usePagination } from \"../pagination/usePagination\"\nimport { ThemedSlider } from \"./ThemedSlider\"\n\nconst useSliderValues = () => {\n const pagination = usePagination()\n const isUsingSpread = pagination?.isUsingSpread\n const { beginPageIndex: currentRealPage, totalApproximatePages = 0 } =\n useNavigationContext()\n const currentPage = isUsingSpread\n ? Math.floor((currentRealPage || 0) / 2)\n : currentRealPage\n const [value, valueSignal] = useSignal({\n default: currentPage || 0,\n })\n const min = 0\n const max = Math.max(\n 0,\n isUsingSpread\n ? Math.floor((totalApproximatePages - 1) / 2)\n : totalApproximatePages - 1,\n )\n\n useEffect(() => {\n valueSignal.setValue(currentPage || 0)\n }, [currentPage, valueSignal])\n\n return {\n value,\n valueSignal,\n min,\n max,\n }\n}\n\nexport const Scrubber = (props: ComponentProps<typeof ThemedSlider>) => {\n const reader = useReader()\n const pagination = usePagination()\n const { manifest } = useObserve(() => reader?.context.state$, [reader]) ?? {}\n const reverse = manifest?.readingDirection === \"rtl\"\n const isUsingSpread = pagination?.isUsingSpread\n const { totalApproximatePages = 0, isBeginWithinChapter } =\n useNavigationContext()\n const step = 1\n const isScrubberWithinChapter = isBeginWithinChapter\n const { value, valueSignal, min, max } = useSliderValues()\n\n const onChange: NonNullable<ComponentProps<typeof ThemedSlider>[\"onChange\"]> =\n useCallback(\n (values) => {\n const [value = 0] = Array.isArray(values) ? values : [values]\n\n valueSignal.setValue(value)\n\n const pageIndex = isUsingSpread\n ? Math.floor(value) * 2\n : Math.floor(value)\n\n if (!isScrubberWithinChapter) {\n reader?.navigation.goToAbsolutePageIndex({\n absolutePageIndex: pageIndex,\n animation: false,\n })\n } else {\n reader?.navigation.goToPageOfSpineItem({\n pageIndex,\n spineItemId: reader.pagination.getState().beginSpineItemIndex ?? 0,\n animation: false,\n })\n }\n },\n [reader, isUsingSpread, valueSignal, isScrubberWithinChapter],\n )\n\n /**\n * @note\n * Scrubber can navigate fast and without lock we may end up with\n * slowness due to the reader\n * paginating and loading items in between.\n * This is good practice (but not required) to throttle it.\n */\n useSubscribe(\n () =>\n reader?.navigation.throttleLock({\n duration: 100,\n trigger: valueSignal.subject,\n }),\n [reader, valueSignal],\n )\n\n // const marks =\n // max > 1\n // ? Array.from({ length: max + 1 }, (_, i) => i).reduce(\n // (acc: number[], val) => [...acc, val],\n // [],\n // )\n // : []\n\n const disabled =\n totalApproximatePages === 1 ||\n (isUsingSpread && totalApproximatePages === 2)\n\n // @tmp not available yet in chakra\n // if (reverse) return null\n\n if (disabled) return <Box style={props.style} />\n\n return (\n <ThemedSlider\n value={[value]}\n max={max}\n min={min}\n reverse={reverse}\n step={step}\n onChange={onChange}\n {...props}\n />\n )\n // return (\n // <Slider\n // value={[value]}\n // max={max}\n // min={min}\n // marks={marks}\n // onChange={e => {\n // debugger\n // }}\n // onValueChange={onChange}\n // // reverse={reverse}\n // orientation=\"horizontal\"\n // step={step}\n // />\n // )\n}\n","import { Collapsible, HStack, IconButton, Stack } from \"@chakra-ui/react\"\nimport { memo, useState } from \"react\"\nimport { BsBookmarks } from \"react-icons/bs\"\nimport { LuChevronDown, LuGalleryHorizontal, LuSearch } from \"react-icons/lu\"\nimport { LuTableOfContents } from \"react-icons/lu\"\nimport { LuCircleHelp, LuNotebookPen } from \"react-icons/lu\"\nimport { RiGalleryView2 } from \"react-icons/ri\"\nimport {\n RxDoubleArrowDown,\n RxDoubleArrowLeft,\n RxDoubleArrowRight,\n RxDoubleArrowUp,\n} from \"react-icons/rx\"\nimport { useObserve } from \"reactjrx\"\nimport {\n hasAnnotationsEnhancer,\n hasBookmarksEnhancer,\n hasGalleryEnhancer,\n hasSearchEnhancer,\n useReader,\n} from \"../context/useReader\"\nimport { PaginationInfoSection } from \"./PaginationInfoSection\"\nimport { QuickBar } from \"./QuickBar\"\nimport { Scrubber } from \"./Scrubber\"\n\nexport const BottomBar = memo(\n ({\n open,\n onItemClick,\n }: {\n open: boolean\n onItemClick: (\n item: \"annotations\" | \"search\" | \"help\" | \"toc\" | \"bookmarks\" | \"gallery\",\n ) => void\n }) => {\n const reader = useReader()\n const navigation = useObserve(() => reader?.navigation.state$, [reader])\n const settings = useObserve(() => reader?.settings.values$, [reader])\n const isVerticalDirection =\n settings?.computedPageTurnDirection === \"vertical\"\n const [isExtraOpen, setIsExtraOpen] = useState(true)\n\n return (\n <QuickBar\n present={open}\n position=\"bottom\"\n display=\"flex\"\n flexDirection=\"column\"\n overflow=\"auto\"\n pb={8}\n >\n <HStack flex={1} alignItems=\"center\" justifyContent=\"center\">\n <IconButton\n aria-label=\"left\"\n size=\"lg\"\n variant=\"ghost\"\n flexShrink={0}\n onClick={() => reader?.navigation.goToLeftOrTopSpineItem()}\n disabled={\n !navigation?.canGoLeftSpineItem && !navigation?.canGoTopSpineItem\n }\n >\n {isVerticalDirection ? <RxDoubleArrowUp /> : <RxDoubleArrowLeft />}\n </IconButton>\n <Stack\n flex={1}\n maxW={400}\n gap={2}\n alignItems=\"center\"\n overflow=\"auto\"\n px={4}\n >\n <PaginationInfoSection />\n <Scrubber\n style={{\n width: \"100%\",\n maxWidth: \"300px\",\n height: \"35px\",\n }}\n />\n </Stack>\n <IconButton\n aria-label=\"right\"\n size=\"lg\"\n flexShrink={0}\n variant=\"ghost\"\n disabled={\n !navigation?.canGoRightSpineItem &&\n !navigation?.canGoBottomSpineItem\n }\n onClick={() => {\n reader?.navigation.goToRightOrBottomSpineItem()\n }}\n >\n {isVerticalDirection ? (\n <RxDoubleArrowDown />\n ) : (\n <RxDoubleArrowRight />\n )}\n </IconButton>\n </HStack>\n <HStack alignItems=\"center\" justifyContent=\"center\">\n <Collapsible.Root\n open={isExtraOpen}\n flex={1}\n onOpenChange={({ open }) => {\n setIsExtraOpen(open)\n }}\n >\n <Collapsible.Trigger\n paddingY=\"3\"\n width=\"100%\"\n display=\"flex\"\n justifyContent=\"center\"\n >\n <LuChevronDown\n style={{\n transform: isExtraOpen ? \"rotate(0deg)\" : \"rotate(180deg)\",\n }}\n />\n </Collapsible.Trigger>\n <Collapsible.Content display=\"flex\" justifyContent=\"center\">\n <IconButton\n aria-label=\"Help\"\n size=\"lg\"\n variant=\"ghost\"\n onClick={() => onItemClick(\"help\")}\n >\n <LuCircleHelp />\n </IconButton>\n <IconButton\n aria-label=\"Table of contents\"\n size=\"lg\"\n variant=\"ghost\"\n onClick={() => onItemClick(\"toc\")}\n >\n <LuTableOfContents />\n </IconButton>\n {hasSearchEnhancer(reader) && (\n <IconButton\n aria-label=\"Search\"\n size=\"lg\"\n variant=\"ghost\"\n onClick={() => onItemClick(\"search\")}\n >\n <LuSearch />\n </IconButton>\n )}\n {hasBookmarksEnhancer(reader) && (\n <IconButton\n aria-label=\"Search\"\n size=\"lg\"\n variant=\"ghost\"\n onClick={() => onItemClick(\"bookmarks\")}\n >\n <BsBookmarks />\n </IconButton>\n )}\n {hasAnnotationsEnhancer(reader) && (\n <IconButton\n aria-label=\"Search\"\n size=\"lg\"\n variant=\"ghost\"\n onClick={() => onItemClick(\"annotations\")}\n >\n <LuNotebookPen />\n </IconButton>\n )}\n <IconButton\n aria-label=\"Thumbnails\"\n size=\"lg\"\n variant={\n reader?.settings.values.viewportMode === \"thumbnails\"\n ? \"solid\"\n : \"ghost\"\n }\n onClick={() => {\n reader?.settings.update({\n viewportMode:\n reader?.settings.values.viewportMode === \"normal\"\n ? \"thumbnails\"\n : \"normal\",\n })\n }}\n >\n <LuGalleryHorizontal />\n </IconButton>\n {hasGalleryEnhancer(reader) && (\n <IconButton\n aria-label=\"Gallery\"\n size=\"lg\"\n variant=\"ghost\"\n onClick={() => onItemClick(\"gallery\")}\n >\n <RiGalleryView2 />\n </IconButton>\n )}\n </Collapsible.Content>\n </Collapsible.Root>\n </HStack>\n </QuickBar>\n )\n },\n)\n","import { useEffect } from \"react\"\n\nimport { useCallback } from \"react\"\n\nimport { useState } from \"react\"\n\nexport const useFullscreen = () => {\n const [isFullscreen, setIsFullscreen] = useState(false)\n\n const onToggleFullscreenClick = useCallback(() => {\n if (document.fullscreenElement) {\n return document\n .exitFullscreen()\n .catch(console.error)\n .then(() => {\n setIsFullscreen(false)\n })\n }\n\n return document.documentElement\n .requestFullscreen({ navigationUI: \"hide\" })\n .catch(console.error)\n .then(() => {\n setIsFullscreen(true)\n })\n }, [])\n\n useEffect(() => {\n function fullscreenchangeHandler() {\n setIsFullscreen(!!document.fullscreenElement)\n }\n\n document.addEventListener(\"fullscreenchange\", fullscreenchangeHandler)\n\n return () => {\n document.removeEventListener(\"fullscreenchange\", fullscreenchangeHandler)\n }\n }, [])\n\n return {\n isFullscreen,\n onToggleFullscreenClick,\n }\n}\n","import { HStack, IconButton, Stack, Text } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\nimport { IoIosArrowBack, IoMdMore } from \"react-icons/io\"\nimport { MdFullscreen, MdFullscreenExit } from \"react-icons/md\"\nimport { useObserve } from \"reactjrx\"\nimport { useFullscreen } from \"../common/useFullscreen\"\nimport { useReader } from \"../context/useReader\"\nimport { QuickBar } from \"./QuickBar\"\n\nexport const TopBar = memo(\n ({\n open,\n onItemClick,\n }: {\n open: boolean\n onItemClick: (item: \"more\" | \"back\") => void\n }) => {\n const reader = useReader()\n const manifest = useObserve(() => reader?.context.manifest$, [reader])\n const { isFullscreen, onToggleFullscreenClick } = useFullscreen()\n\n return (\n <QuickBar\n present={open}\n position=\"top\"\n height=\"80px\"\n justifyContent=\"space-between\"\n >\n <IconButton\n aria-label=\"left\"\n size=\"lg\"\n variant=\"ghost\"\n flexShrink={0}\n onClick={() => onItemClick(\"back\")}\n >\n <IoIosArrowBack />\n </IconButton>\n <Stack\n flex={1}\n maxW={600}\n gap={1}\n alignItems=\"center\"\n overflow=\"auto\"\n px={4}\n >\n <Text truncate maxWidth=\"100%\">\n {manifest?.title}\n </Text>\n </Stack>\n <HStack>\n <IconButton\n aria-label=\"right\"\n size=\"lg\"\n flexShrink={0}\n variant=\"ghost\"\n onClick={() => onItemClick(\"more\")}\n >\n <IoMdMore />\n </IconButton>\n <IconButton\n aria-label=\"right\"\n size=\"lg\"\n flexShrink={0}\n variant=\"ghost\"\n onClick={onToggleFullscreenClick}\n >\n {isFullscreen ? <MdFullscreenExit /> : <MdFullscreen />}\n </IconButton>\n </HStack>\n </QuickBar>\n )\n },\n)\n","import { memo } from \"react\"\nimport { BottomBar } from \"./BottomBar\"\nimport { TopBar } from \"./TopBar\"\nimport { useQuickMenu } from \"./useQuickMenu\"\n\nexport const QuickMenu = memo(\n ({\n onItemClick,\n }: {\n onItemClick: (\n item:\n | \"annotations\"\n | \"search\"\n | \"help\"\n | \"toc\"\n | \"bookmarks\"\n | \"more\"\n | \"back\"\n | \"gallery\",\n ) => void\n }) => {\n const [quickMenuOpen] = useQuickMenu()\n\n return (\n <>\n <TopBar open={quickMenuOpen} onItemClick={onItemClick} />\n <BottomBar open={quickMenuOpen} onItemClick={onItemClick} />\n </>\n )\n },\n)\n","import { Link, Text } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\n\nexport const SearchListItem = memo(\n ({\n contextText = \"\",\n startOffset = 0,\n text,\n cfi = \"#\",\n onClick,\n absolutePageIndex,\n }: {\n pageIndex: number | undefined\n absolutePageIndex?: number\n contextText?: string\n startOffset?: number\n text: string\n cfi?: string\n onClick: (cfi: string) => void\n }) => {\n const charsAroundText = 15\n const before = contextText.substring(\n Math.max(startOffset - charsAroundText, 0),\n Math.max(startOffset, 0),\n )\n const after = contextText.substring(\n Math.min(startOffset + text.length, contextText.length - 1),\n Math.min(\n startOffset + text.length + charsAroundText,\n contextText.length - 1,\n ),\n )\n\n return (\n <Link\n href={cfi}\n style={{ margin: 5, overflow: \"hidden\" }}\n onClick={(e) => {\n e.preventDefault()\n\n onClick(cfi)\n }}\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"flex-start\"\n gap={0}\n >\n <Text lineClamp={1} as=\"cite\" style={{ display: \"block\" }}>\n \"{before}\n <b>{text}</b>\n {after}\"\n </Text>\n <Text fontSize=\"sm\" color=\"gray.500\" style={{ textDecoration: \"none\" }}>\n {`Book page: ${absolutePageIndex !== undefined ? absolutePageIndex + 1 : \"unknown (not loaded)\"}`}\n </Text>\n </Link>\n )\n },\n)\n","import { Box, Heading, Input, Stack, Text } from \"@chakra-ui/react\"\nimport type React from \"react\"\nimport { memo, useCallback, useState } from \"react\"\nimport { useObserve } from \"reactjrx\"\nimport { map, startWith } from \"rxjs\"\nimport { hasSearchEnhancer, useReader } from \"../context/useReader\"\nimport { SearchListItem } from \"./SearchListItem\"\n\nexport const SearchDialogContent = memo(\n ({\n onNavigate,\n }: {\n onNavigate: () => void\n }) => {\n const [text, setText] = useState(\"\")\n const reader = useReader()\n const readerWithSearch = hasSearchEnhancer(reader) ? reader : undefined\n\n const onValueChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setText(e.target.value)\n }\n\n const onClick = useCallback(\n (cfi: string) => {\n onNavigate()\n reader?.navigation.goToCfi(cfi)\n },\n [reader, onNavigate],\n )\n\n const search = useObserve(\n () =>\n readerWithSearch?.search.search(text).pipe(\n map((data) => ({ type: `end` as const, data })),\n startWith({ type: `start` as const }),\n ),\n [reader, text],\n )\n const searching = search?.type === \"start\"\n const results = search?.type === \"end\" ? search.data : []\n const consolidatedResults = useObserve(\n () => reader?.pagination.locate(results.slice(0, 100)),\n [results],\n )\n\n return (\n <Stack flex={1} height=\"100%\">\n <Box px={4}>\n <Input\n placeholder=\"Type something...\"\n value={text}\n onChange={onValueChange}\n borderRadius={0}\n />\n </Box>\n <Box\n px={4}\n pb={4}\n mt={2}\n flex={1}\n style={{ overflow: \"hidden\", overflowY: \"auto\" }}\n >\n {searching && <Text>Searching ...</Text>}\n {!searching && results.length === 0 && <p>There are no results</p>}\n {!searching && results.length >= 0 && (\n <Stack>\n <Heading as=\"h2\" size=\"md\">\n {results.length} result(s)\n </Heading>\n <Stack gap={0}>\n {consolidatedResults?.map((result, j) => {\n return (\n <SearchListItem\n key={j}\n contextText={\n result.meta?.range?.startContainer.parentElement\n ?.textContent ?? \"\"\n }\n pageIndex={result.meta?.itemPageIndex}\n startOffset={result.meta?.range?.startOffset ?? 0}\n text={text}\n cfi={result.cfi}\n onClick={onClick}\n absolutePageIndex={result.meta?.absolutePageIndex}\n />\n )\n })}\n </Stack>\n </Stack>\n )}\n </Box>\n </Stack>\n )\n },\n)\n","import { Button } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\nimport {\n DialogActionTrigger,\n DialogBody,\n DialogCloseTrigger,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogRoot,\n DialogTitle,\n} from \"../components/ui/dialog\"\nimport { SearchDialogContent } from \"./SearchDialogContent\"\n\nexport const SearchDialog = memo(\n ({\n open,\n setOpen,\n onNavigate,\n }: {\n open: boolean\n setOpen: (open: boolean) => void\n onNavigate: () => void\n }) => {\n return (\n <DialogRoot\n lazyMount\n placement=\"center\"\n open={open}\n onOpenChange={(e) => setOpen(e.open)}\n size={{ mdDown: \"full\", md: \"lg\" }}\n scrollBehavior=\"inside\"\n >\n <DialogContent height=\"100%\">\n <DialogHeader>\n <DialogTitle>Search</DialogTitle>\n </DialogHeader>\n <DialogBody flex={1}>\n <SearchDialogContent onNavigate={onNavigate} />\n </DialogBody>\n <DialogFooter>\n <DialogActionTrigger asChild>\n <Button variant=\"outline\">Cancel</Button>\n </DialogActionTrigger>\n </DialogFooter>\n <DialogCloseTrigger />\n </DialogContent>\n </DialogRoot>\n )\n },\n)\n","import { Link, Stack, Text } from \"@chakra-ui/react\"\n\nimport { List } from \"@chakra-ui/react\"\nimport React, { memo } from \"react\"\nimport { LuCircleCheck } from \"react-icons/lu\"\nimport { useObserve } from \"reactjrx\"\nimport { useReader } from \"../context/useReader\"\nimport { usePagination } from \"../pagination/usePagination\"\n\nexport const TableOfContentsDialogContent = memo(\n ({\n onNavigate,\n }: {\n onNavigate: () => void\n }) => {\n const reader = useReader()\n const { manifest, assumedRenditionLayout } =\n useObserve(() => reader?.context.state$, [reader]) ?? {}\n const { nav } = manifest ?? {}\n const pagination = usePagination()\n const toc = nav?.toc || []\n const { beginSpineItemIndex, beginPageIndexInSpineItem } = pagination ?? {}\n const currentSpineItemOrChapterPageIndex =\n (assumedRenditionLayout === \"reflowable\"\n ? beginPageIndexInSpineItem\n : beginSpineItemIndex) || 0\n\n console.log({ assumedRenditionLayout, currentSpineItemOrChapterPageIndex })\n\n let currentSubChapter = pagination?.beginChapterInfo\n\n while (currentSubChapter?.subChapter) {\n currentSubChapter = currentSubChapter?.subChapter\n }\n\n const buildTocForItem = (\n tocItem: (typeof toc)[number],\n index: number,\n lvl: number,\n ) => (\n <React.Fragment key={index}>\n <List.Item\n pl={4 * (lvl + 1)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <Link\n onClick={() => {\n onNavigate()\n\n reader?.navigation.goToUrl(tocItem.href)\n }}\n href=\"#\"\n >\n {currentSubChapter?.path === tocItem.path && (\n <List.Indicator asChild>\n <LuCircleCheck />\n </List.Indicator>\n )}\n {currentSubChapter?.path !== tocItem.path && (\n <List.Indicator asChild visibility=\"hidden\">\n <LuCircleCheck />\n </List.Indicator>\n )}\n <Stack gap={0}>\n <Text fontSize=\"md\">{tocItem.title || tocItem.path}</Text>\n {currentSubChapter?.path === tocItem.path && (\n <Text\n fontStyle=\"italic\"\n fontWeight=\"bold\"\n fontSize=\"sm\"\n >{`Currently on page ${\n currentSpineItemOrChapterPageIndex + 1\n }`}</Text>\n )}\n </Stack>\n </Link>\n </List.Item>\n {tocItem.contents.length > 0 && (\n <List.Root as=\"div\" gap={2}>\n {tocItem.contents.map((tocItem, index) =>\n buildTocForItem(tocItem, index, lvl + 1),\n )}\n </List.Root>\n )}\n </React.Fragment>\n )\n\n return (\n <List.Root gap={3} overflowY=\"auto\" py={4} flex={1}>\n {nav?.toc.map((tocItem, index) => buildTocForItem(tocItem, index, 0))}\n </List.Root>\n )\n },\n)\n","import { Button } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\nimport {\n DialogActionTrigger,\n DialogBody,\n DialogCloseTrigger,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogRoot,\n DialogTitle,\n} from \"../components/ui/dialog\"\nimport { TableOfContentsDialogContent } from \"./TableOfContentsDialogContent\"\n\nexport const TableOfContentsDialog = memo(\n ({\n open,\n setOpen,\n onNavigate,\n }: {\n open: boolean\n setOpen: (open: boolean) => void\n onNavigate: () => void\n }) => {\n return (\n <DialogRoot\n lazyMount\n placement=\"center\"\n open={open}\n onOpenChange={(e) => setOpen(e.open)}\n size={{ mdDown: \"full\", md: \"lg\" }}\n scrollBehavior=\"inside\"\n >\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Table of Contents</DialogTitle>\n </DialogHeader>\n <DialogBody overflowY=\"auto\" flex={1}>\n <TableOfContentsDialogContent onNavigate={onNavigate} />\n </DialogBody>\n <DialogFooter>\n <DialogActionTrigger asChild>\n <Button variant=\"outline\">Cancel</Button>\n </DialogActionTrigger>\n </DialogFooter>\n <DialogCloseTrigger />\n </DialogContent>\n </DialogRoot>\n )\n },\n)\n","import { Presence } from \"@chakra-ui/react\"\nimport { useCallback, useState } from \"react\"\nimport { AnnotationsDialog } from \"./annotations/AnnotationsDialog\"\nimport { Bookmarks } from \"./bookmarks/Bookmarks\"\nimport { BookmarksDialog } from \"./bookmarks/BookmarksDialog\"\nimport { Toaster } from \"./components/ui/toaster\"\nimport { GalleryDialog } from \"./gallery/GalleryDialog\"\nimport { HelpDialog } from \"./help/HelpDialog\"\nimport { FloatingProgress } from \"./navigation/FloatingProgress\"\nimport { FloatingTime } from \"./navigation/FloatingTime\"\nimport { useInterceptExternalLinks } from \"./navigation/useInterceptExternalLinks\"\nimport { useNotifications } from \"./notifications/useNotifications\"\nimport { QuickMenu } from \"./quickmenu/QuickMenu\"\nimport { useQuickMenu } from \"./quickmenu/useQuickMenu\"\nimport { SearchDialog } from \"./search/SearchDialog\"\nimport { TableOfContentsDialog } from \"./toc/TableOfContentsDialog\"\n\nexport const ReactReader = ({\n enableFloatingTime = true,\n enableFloatingProgress = true,\n onItemClick,\n}: {\n enableFloatingTime?: boolean\n enableFloatingProgress?: boolean\n onItemClick?: (\n item:\n | \"annotations\"\n | \"search\"\n | \"help\"\n | \"toc\"\n | \"bookmarks\"\n | \"more\"\n | \"back\"\n | \"gallery\",\n ) => void\n}) => {\n const [isTableOfContentsOpen, setIsTableOfContentsOpen] = useState(false)\n const [isHelpOpen, setIsHelpOpen] = useState(false)\n const [isSearchOpen, setIsSearchOpen] = useState(false)\n const [isAnnotationsOpen, setIsAnnotationsOpen] = useState(false)\n const [isBookmarksOpen, setIsBookmarksOpen] = useState(false)\n const [isGalleryOpen, setIsGalleryOpen] = useState(false)\n const [quickMenuOpen, setQuickMenuOpen] = useQuickMenu()\n\n const onNavigate = useCallback(() => {\n setIsTableOfContentsOpen(false)\n setIsHelpOpen(false)\n setIsSearchOpen(false)\n setIsAnnotationsOpen(false)\n setIsBookmarksOpen(false)\n setQuickMenuOpen(false)\n setIsGalleryOpen(false)\n }, [setQuickMenuOpen])\n\n const _onItemClick: NonNullable<typeof onItemClick> = useCallback(\n (item) => {\n if (item === \"annotations\") {\n setIsAnnotationsOpen(true)\n } else if (item === \"search\") {\n setIsSearchOpen(true)\n } else if (item === \"help\") {\n setIsHelpOpen(true)\n } else if (item === \"toc\") {\n setIsTableOfContentsOpen(true)\n } else if (item === \"bookmarks\") {\n setIsBookmarksOpen(true)\n } else if (item === \"gallery\") {\n setIsGalleryOpen(true)\n }\n onItemClick?.(item)\n },\n [onItemClick],\n )\n\n useInterceptExternalLinks()\n useNotifications()\n\n return (\n <>\n {enableFloatingProgress && (\n <Presence\n present={!quickMenuOpen}\n animationName={{ _open: \"fade-in\", _closed: \"fade-out\" }}\n animationDuration=\"moderate\"\n >\n <FloatingProgress />\n </Presence>\n )}\n <GalleryDialog open={isGalleryOpen} setOpen={setIsGalleryOpen} />\n <QuickMenu onItemClick={_onItemClick} />\n <Bookmarks />\n <HelpDialog open={isHelpOpen} setOpen={setIsHelpOpen} />\n <TableOfContentsDialog\n open={isTableOfContentsOpen}\n setOpen={setIsTableOfContentsOpen}\n onNavigate={onNavigate}\n />\n <SearchDialog\n open={isSearchOpen}\n setOpen={setIsSearchOpen}\n onNavigate={onNavigate}\n />\n <AnnotationsDialog\n open={isAnnotationsOpen}\n setOpen={setIsAnnotationsOpen}\n onNavigate={onNavigate}\n />\n <BookmarksDialog\n open={isBookmarksOpen}\n setOpen={setIsBookmarksOpen}\n onNavigate={onNavigate}\n />\n <Presence\n present={enableFloatingTime || quickMenuOpen}\n animationName={{ _open: \"fade-in\", _closed: \"fade-out\" }}\n animationDuration=\"slow\"\n overflow=\"hidden\"\n >\n <FloatingTime />\n </Presence>\n <Toaster />\n </>\n )\n}\n"],"names":["ReaderContext","createContext","signal","ReactReaderProvider","memo","children","reader","quickMenuOpen","onQuickMenuOpenChange","quickMenuSignal","useSignal","onQuickMenuOpenChangeLiveRef","useLiveRef","value","useMemo","useEffect","useSubscribe","tap","jsx","CloseButton","React","props","ref","ChakraIconButton","LuX","DialogContent","portalled","portalRef","backdrop","rest","Portal","ChakraDialog","DialogCloseTrigger","DialogRoot","DialogFooter","DialogHeader","DialogBody","DialogTitle","DialogActionTrigger","useReader","useContext","hasSearchEnhancer","hasBookmarksEnhancer","hasAnnotationsEnhancer","hasGalleryEnhancer","AnnotationsDialogContent","onNavigate","readerWithAnnotations","consolidatedHighlights","useObserve","switchMap","highlights","mapItemToListEntry","item","index","List","jsxs","Link","LuNotebookPen","Stack","Text","_a","AnnotationsDialog","open","setOpen","e","Button","Bookmarks","readerWithBookmarks","spineElement","pages","bookmarks","consolidatedBookmarks","Fragment","createPortal","isBookmarkable","left","top","width","bookmarkForPage","bookmark","Presence","Box","IconButton","BsBookmarkXFill","BsBookmarkPlus","BookmarksDialogContent","items","_e","_d","BookmarksDialog","toaster","createToaster","Toaster","ChakraToaster","toast","Toast","Spinner","GalleryDialog","element","setElement","useState","readerWithGalleryEnhancer","gridItemClassName","galleryRootElement","HelpDialog","Heading","HStack","Kbd","LuArrowBigRight","LuArrowBigLeft","name","version","usePagination","combineLatest","map","state","context","isOnlyImages","NEVER","FloatingProgress","pagination","roundedProgress","displayableProgress","useTime","time","setTime","interval","TimeIndicator","useQuickMenu","useSignalValue","FloatingTime","useInterceptExternalLinks","event","isHtmlTagElement","url","notificationsSignal","useNotifyZoom","isZooming","EMPTY","abort","Subject","finalize","useFontScaleChangeNotification","fontScale","distinctUntilChanged","skip","useNotifications","filter","isDefined","mergeMap","notification","duration","sameNotification$","n","merge","timer","first","ToggleTip","showArrow","content","ChakraPopover","InfoTip","HiOutlineInformationCircle","ProgressBar","ChakraProgress","info","ProgressRoot","ProgressValueText","useNavigationContext","hasOnlyOnePage","isBeginWithinChapter","isEndWithinChapter","beginPageIndex","endPageIndex","leftPageIndex","rightPageIndex","a","b","beginAndEndAreDifferent","totalApproximatePages","PaginationInfoSection","progress","buildTitleChain","chapterInfo","chapterTitle","QuickBar","position","ChakraRcSlider","chakra","RcSlider","ThemedSlider","useSliderValues","isUsingSpread","currentRealPage","currentPage","valueSignal","min","max","Scrubber","manifest","reverse","step","isScrubberWithinChapter","onChange","useCallback","values","pageIndex","BottomBar","onItemClick","navigation","settings","isVerticalDirection","isExtraOpen","setIsExtraOpen","RxDoubleArrowUp","RxDoubleArrowLeft","RxDoubleArrowDown","RxDoubleArrowRight","Collapsible","LuChevronDown","LuCircleHelp","LuTableOfContents","LuSearch","BsBookmarks","LuGalleryHorizontal","RiGalleryView2","useFullscreen","isFullscreen","setIsFullscreen","onToggleFullscreenClick","fullscreenchangeHandler","TopBar","IoIosArrowBack","IoMdMore","MdFullscreenExit","MdFullscreen","QuickMenu","SearchListItem","contextText","startOffset","text","cfi","onClick","absolutePageIndex","before","after","SearchDialogContent","setText","readerWithSearch","onValueChange","search","data","startWith","searching","results","consolidatedResults","Input","result","j","_c","_b","_f","_g","SearchDialog","TableOfContentsDialogContent","assumedRenditionLayout","nav","beginSpineItemIndex","beginPageIndexInSpineItem","currentSpineItemOrChapterPageIndex","currentSubChapter","buildTocForItem","tocItem","lvl","LuCircleCheck","TableOfContentsDialog","ReactReader","enableFloatingTime","enableFloatingProgress","isTableOfContentsOpen","setIsTableOfContentsOpen","isHelpOpen","setIsHelpOpen","isSearchOpen","setIsSearchOpen","isAnnotationsOpen","setIsAnnotationsOpen","isBookmarksOpen","setIsBookmarksOpen","isGalleryOpen","setIsGalleryOpen","setQuickMenuOpen","_onItemClick"],"mappings":"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"}
|