zreader 0.1.0 → 0.2.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/react/components/ui/tooltip.tsx","../../src/react/link.tsx","../../src/react/components/ui/sonner.tsx","../../src/react/context.tsx","../../src/react/components/ui/button.tsx","../../src/react/components/ui/drawer.tsx","../../src/react/components/ui/progress.tsx","../../src/react/components/ui/resizable.tsx","../../src/react/components/ui/toggle.tsx","../../src/react/components/ui/badge.tsx","../../src/react/components/ui/input.tsx","../../src/react/components/ui/scroll-area.tsx","../../src/react/components/ui/sheet.tsx","../../src/react/components/ui/tabs.tsx","../../src/react/parts.ts","../../src/react/tokens.ts","../../src/react/components/contents-sheet.tsx","../../src/react/components/ui/label.tsx","../../src/react/components/ui/textarea.tsx","../../src/react/components/ui/toggle-group.tsx","../../src/react/components/ui/dialog.tsx","../../src/react/components/responsive-panel.tsx","../../src/react/components/highlight-panel.tsx","../../src/react/components/ui/dropdown-menu.tsx","../../src/react/components/ui/skeleton.tsx","../../src/react/download.ts","../../src/react/components/scratchpad-panel.tsx","../../src/react/components/ui/popover.tsx","../../src/react/components/ui/separator.tsx","../../src/react/components/selection-toolbar.tsx","../../src/react/components/ui/alert.tsx","../../src/react/components/ui/switch.tsx","../../src/react/components/settings-panel.tsx","../../src/react/useChapterEngine.ts","../../src/react/Reader.tsx","../../src/react/components/ui/card.tsx","../../src/react/components/book-nav.tsx","../../src/react/components/mdx.tsx"],"names":["TooltipPrimitive","DefaultLink","jsx","Sonner","jsxs","cn","DrawerPrimitive","ProgressPrimitive","cva","TogglePrimitive","Slot","ScrollAreaPrimitive","SheetPrimitive","TabsPrimitive","useState","useMemo","LabelPrimitive","ToggleGroupPrimitive","DialogPrimitive","XIcon","useEffect","Trash2Icon","DropdownMenuPrimitive","CopyIcon","PopoverPrimitive","Separator","SeparatorPrimitive","useRef","QuoteIcon","SwitchPrimitive","useTheme","toast","DownloadIcon","useSyncExternalStore","opts","createContext","useContext","useCallback","BLOCK_ATTR","CheckIcon","CheckCircle2Icon","CircleIcon","ChevronLeftIcon"],"mappings":"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","file":"index.js","sourcesContent":["import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\"\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md bg-foreground px-3 py-1.5 text-xs text-balance text-background fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import { forwardRef, type AnchorHTMLAttributes, type ComponentType, type ReactNode } from \"react\";\n\n/** Any router link with an `href` (e.g. next/link). */\nexport type LinkComponent = ComponentType<AnchorHTMLAttributes<HTMLAnchorElement> & { href: string; children?: ReactNode }>;\n\nexport const DefaultLink = forwardRef<HTMLAnchorElement, AnchorHTMLAttributes<HTMLAnchorElement> & { href: string }>(\n function DefaultLink(props, ref) {\n return <a ref={ref} {...props} />;\n },\n);\n\n/** `${basePath}/${bookId}/${chapterId}#${hash}` */\nexport function defaultHref(basePath: string, bookId: string, chapterId?: string, hash?: string): string {\n const base = basePath.replace(/\\/+$/, \"\");\n const path = chapterId ? `${base}/${encodeURIComponent(bookId)}/${encodeURIComponent(chapterId)}` : `${base}/${encodeURIComponent(bookId)}`;\n return hash ? `${path}#${encodeURIComponent(hash)}` : path;\n}\n","import {\n CircleCheckIcon,\n InfoIcon,\n Loader2Icon,\n OctagonXIcon,\n TriangleAlertIcon,\n} from \"lucide-react\"\nimport { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\"\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = \"system\" } = useTheme()\n\n return (\n <Sonner\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n icons={{\n success: <CircleCheckIcon className=\"size-4\" />,\n info: <InfoIcon className=\"size-4\" />,\n warning: <TriangleAlertIcon className=\"size-4\" />,\n error: <OctagonXIcon className=\"size-4\" />,\n loading: <Loader2Icon className=\"size-4 animate-spin\" />,\n }}\n style={\n {\n \"--normal-bg\": \"var(--popover)\",\n \"--normal-text\": \"var(--popover-foreground)\",\n \"--normal-border\": \"var(--border)\",\n \"--border-radius\": \"var(--radius)\",\n } as React.CSSProperties\n }\n {...props}\n />\n )\n}\n\nexport { Toaster }\n","import {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n useSyncExternalStore,\n type ReactNode,\n} from \"react\";\nimport { ThemeProvider } from \"next-themes\";\nimport {\n DEFAULT_CLIENT_OPTIONS,\n createLocalStorageAdapter,\n createReaderStore,\n type Cell,\n type ReaderStore,\n type StorageAdapter,\n type Bookmark,\n type BookProgress,\n type Highlight,\n type Pad,\n type PadScope,\n type ReaderClientOptions,\n type ReaderSettings,\n} from \"zreader\";\nimport { TooltipProvider } from \"@/components/ui/tooltip\";\nimport type { BookMeta } from \"zreader\";\nimport { DefaultLink, defaultHref, type LinkComponent } from \"./link\";\nimport { Toaster } from \"@/components/ui/sonner\";\n\ntype DeepPartial<T> = T extends unknown[] ? T : T extends object ? { [K in keyof T]?: DeepPartial<T[K]> } : T;\n\nfunction isPlainObject(x: unknown): x is Record<string, unknown> {\n if (typeof x !== \"object\" || x === null || Array.isArray(x)) return false;\n const proto = Object.getPrototypeOf(x);\n return proto === Object.prototype || proto === null;\n}\n\n/** Deep merge for client options (arrays replace). Kept here so zod stays out of the client bundle. */\nexport function mergeOptions<T>(base: T, ...overrides: unknown[]): T {\n const merge = (a: unknown, b: unknown): unknown => {\n if (b === undefined || b === null) return a;\n if (isPlainObject(a) && isPlainObject(b)) {\n const out: Record<string, unknown> = { ...a };\n for (const [k, v] of Object.entries(b)) out[k] = merge(a[k], v);\n return out;\n }\n return b;\n };\n return overrides.reduce<unknown>(merge, base) as T;\n}\n\n/** Builds a link into the reader. `chapterId` omitted = the book's contents page. */\nexport type HrefFor = (bookId: string, chapterId?: string, hash?: string) => string;\n\n/** What the reader shows in the middle of its top bar. */\nexport type HeaderSlot = ReactNode | ((ctx: { book: BookMeta; chapter: { id: string; title: string } }) => ReactNode);\n\nexport interface Library {\n /** Every book known to the provider (from `books`). */\n books: BookMeta[];\n getBook(id: string): BookMeta | undefined;\n Link: LinkComponent;\n href: HrefFor;\n headerSlot?: HeaderSlot;\n}\n\ninterface ReaderContextValue {\n store: ReaderStore;\n options: ReaderClientOptions;\n library: Library;\n}\n\nconst ReaderContext = createContext<ReaderContextValue | null>(null);\n\nexport interface ReaderProviderProps {\n /** Usually `config.reader` from reader.config.ts (see <ReaderRoot>). */\n options?: DeepPartial<ReaderClientOptions>;\n /** Inline overrides, merged on top of `options`. */\n overrides?: DeepPartial<ReaderClientOptions>;\n adapter?: StorageAdapter;\n /** Provide your own store (advanced; e.g. tests). */\n store?: ReaderStore;\n onStorageError?: (error: unknown) => void;\n /**\n * Manage the colour theme with next-themes (class on <html>, no-flash script).\n * Set to `false` if your app already renders a next-themes <ThemeProvider>.\n */\n manageTheme?: boolean;\n /** Render a sonner <Toaster>. Set to `false` if your app already has one. */\n toaster?: boolean;\n /**\n * The catalogue: lets <BookShelf />, <BookHome book=\"id\" /> and\n * <Reader book=\"id\" chapter=\"id\" /> work from ids alone.\n */\n books?: BookMeta[];\n /** Router link used by every component (e.g. next/link). Defaults to <a>. */\n Link?: LinkComponent;\n /** URL builder. Defaults to `${basePath}/${bookId}/${chapterId}#hash`. */\n hrefFor?: HrefFor;\n /**\n * Default content for the middle of the reader's top bar: text, your logo,\n * or any component. Omit to show the book and chapter titles.\n */\n headerSlot?: HeaderSlot;\n children: ReactNode;\n}\n\nexport function ReaderProvider({\n options,\n overrides,\n adapter,\n store: external,\n onStorageError,\n manageTheme = true,\n toaster = true,\n books,\n Link,\n hrefFor,\n headerSlot,\n children,\n}: ReaderProviderProps) {\n const key = JSON.stringify([options ?? null, overrides ?? null]);\n const resolved = useMemo(\n () => mergeOptions(DEFAULT_CLIENT_OPTIONS, options, overrides),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [key],\n );\n const [store] = useState<ReaderStore>(\n () =>\n external ??\n createReaderStore({ adapter: adapter ?? createLocalStorageAdapter(), options: resolved, onError: onStorageError }),\n );\n useEffect(() => store.connect(), [store]);\n const library = useMemo<Library>(() => {\n const list = books ?? [];\n const byId = new Map(list.map((b) => [b.id, b]));\n return {\n books: list,\n getBook: (id) => byId.get(id),\n Link: Link ?? DefaultLink,\n href: hrefFor ?? ((b, c, h) => defaultHref(resolved.basePath, b, c, h)),\n headerSlot,\n };\n }, [books, Link, hrefFor, headerSlot, resolved.basePath]);\n const value = useMemo(() => ({ store, options: resolved, library }), [store, resolved, library]);\n\n const tree = (\n <ReaderContext.Provider value={value}>\n <TooltipProvider delayDuration={400}>\n {children}\n {toaster && <Toaster position=\"top-center\" />}\n </TooltipProvider>\n </ReaderContext.Provider>\n );\n\n if (!manageTheme) return tree;\n return (\n <ThemeProvider\n attribute=\"class\"\n themes={resolved.themes.filter((t) => t !== \"system\")}\n enableSystem={resolved.themes.includes(\"system\")}\n defaultTheme={resolved.defaultTheme}\n storageKey={`${resolved.storagePrefix}:v1:theme`}\n disableTransitionOnChange\n >\n {tree}\n </ThemeProvider>\n );\n}\n\nexport function useReader(): ReaderContextValue {\n const ctx = useContext(ReaderContext);\n if (!ctx) throw new Error(\"zreader: wrap your tree in <ReaderProvider> (or <ReaderRoot>).\");\n return ctx;\n}\n\n/** The provider's catalogue, link component and URL builder. */\nexport function useLibrary(): Library {\n return useReader().library;\n}\n\n/**\n * Resolve a book given as an id (looked up in the provider's `books`) or as\n * metadata. Throws a descriptive error when an id is unknown.\n */\nexport function useBook(book: BookMeta | string): BookMeta {\n const { getBook, books } = useLibrary();\n if (typeof book !== \"string\") return book;\n const found = getBook(book);\n if (!found) {\n throw new Error(\n books.length\n ? `zreader: no book with id \"${book}\" in <ReaderProvider books>. Known: ${books.map((b) => b.id).join(\", \")}.`\n : `zreader: <… book=\"${book}\"> needs the catalogue. Pass books to <ReaderProvider books={…}> (or use <ReaderRoot>, which loads them).`,\n );\n }\n return found;\n}\n\nexport function useReaderStore(): ReaderStore {\n return useReader().store;\n}\n\nfunction useCell<T>(cell: Cell<T>, serverValue: T): T {\n return useSyncExternalStore(cell.subscribe, cell.get, () => serverValue);\n}\n\nconst noopSubscribe = () => () => {};\n/** `false` during SSR and hydration, `true` afterwards. */\nexport function useHydrated(): boolean {\n return useSyncExternalStore(\n noopSubscribe,\n () => true,\n () => false,\n );\n}\n\nexport function useSettings(): [ReaderSettings, ReaderStore[\"updateSettings\"]] {\n const store = useReaderStore();\n const settings = useCell(store.settings(), store.server.settings);\n return [settings, store.updateSettings];\n}\n\nexport function useHighlights(bookId: string, chapterId?: string): Highlight[] {\n const store = useReaderStore();\n const all = useCell(store.highlights(bookId), store.server.list as Highlight[]);\n return useMemo(() => (chapterId ? all.filter((h) => h.chapterId === chapterId) : all), [all, chapterId]);\n}\n\nexport function useBookmarks(bookId: string): Bookmark[] {\n const store = useReaderStore();\n return useCell(store.bookmarks(bookId), store.server.list as Bookmark[]);\n}\n\nexport function useProgress(bookId: string): BookProgress {\n const store = useReaderStore();\n return useCell(store.progress(bookId), store.server.progress(bookId));\n}\n\nexport function usePad(scope: PadScope): Pad {\n const store = useReaderStore();\n return useCell(store.pad(scope), store.server.pad);\n}\n\nexport function useMediaQuery(query: string, serverValue = false): boolean {\n return useSyncExternalStore(\n (cb) => {\n if (typeof window === \"undefined\" || !window.matchMedia) return () => {};\n const mql = window.matchMedia(query);\n mql.addEventListener(\"change\", cb);\n return () => mql.removeEventListener(\"change\", cb);\n },\n () => (typeof window !== \"undefined\" && window.matchMedia ? window.matchMedia(query).matches : serverValue),\n () => serverValue,\n );\n}\n\n/** Desktop layout breakpoint (Tailwind `lg`). Mobile-first: `false` on the server. */\nexport function useIsDesktop(): boolean {\n return useMediaQuery(\"(min-width: 1024px)\", false);\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"cn\"\nimport { Slot } from \"radix-ui\"\n\nconst buttonVariants = cva(\n \"inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n xs: \"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-xs\": \"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Drawer as DrawerPrimitive } from \"vaul\"\n\nfunction Drawer({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) {\n return <DrawerPrimitive.Root data-slot=\"drawer\" {...props} />\n}\n\nfunction DrawerTrigger({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {\n return <DrawerPrimitive.Trigger data-slot=\"drawer-trigger\" {...props} />\n}\n\nfunction DrawerPortal({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Portal>) {\n return <DrawerPrimitive.Portal data-slot=\"drawer-portal\" {...props} />\n}\n\nfunction DrawerClose({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Close>) {\n return <DrawerPrimitive.Close data-slot=\"drawer-close\" {...props} />\n}\n\nfunction DrawerOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {\n return (\n <DrawerPrimitive.Overlay\n data-slot=\"drawer-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Content>) {\n return (\n <DrawerPortal data-slot=\"drawer-portal\">\n <DrawerOverlay />\n <DrawerPrimitive.Content\n data-slot=\"drawer-content\"\n className={cn(\n \"group/drawer-content fixed z-50 flex h-auto flex-col bg-background\",\n \"data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b\",\n \"data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t\",\n \"data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:sm:max-w-sm\",\n \"data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:sm:max-w-sm\",\n className\n )}\n {...props}\n >\n <div className=\"mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full bg-muted group-data-[vaul-drawer-direction=bottom]/drawer-content:block\" />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n )\n}\n\nfunction DrawerHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-header\"\n className={cn(\n \"flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-left\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Title>) {\n return (\n <DrawerPrimitive.Title\n data-slot=\"drawer-title\"\n className={cn(\"font-semibold text-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Description>) {\n return (\n <DrawerPrimitive.Description\n data-slot=\"drawer-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n}\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Progress as ProgressPrimitive } from \"radix-ui\"\n\nfunction Progress({\n className,\n value,\n ...props\n}: React.ComponentProps<typeof ProgressPrimitive.Root>) {\n return (\n <ProgressPrimitive.Root\n data-slot=\"progress\"\n className={cn(\n \"relative h-2 w-full overflow-hidden rounded-full bg-primary/20\",\n className\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className=\"h-full w-full flex-1 bg-primary transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n )\n}\n\nexport { Progress }\n","\"use client\"\n\nimport { cn } from \"cn\"\nimport { GripVerticalIcon } from \"lucide-react\"\nimport * as ResizablePrimitive from \"react-resizable-panels\"\n\nfunction ResizablePanelGroup({\n className,\n ...props\n}: ResizablePrimitive.GroupProps) {\n return (\n <ResizablePrimitive.Group\n data-slot=\"resizable-panel-group\"\n className={cn(\n \"flex h-full w-full aria-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ResizablePanel({ ...props }: ResizablePrimitive.PanelProps) {\n return <ResizablePrimitive.Panel data-slot=\"resizable-panel\" {...props} />\n}\n\nfunction ResizableHandle({\n withHandle,\n className,\n ...props\n}: ResizablePrimitive.SeparatorProps & {\n withHandle?: boolean\n}) {\n return (\n <ResizablePrimitive.Separator\n data-slot=\"resizable-handle\"\n className={cn(\n \"relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:outline-hidden aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 [&[aria-orientation=horizontal]>div]:rotate-90\",\n className\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"z-10 flex h-4 w-3 items-center justify-center rounded-xs border bg-border\">\n <GripVerticalIcon className=\"size-2.5\" />\n </div>\n )}\n </ResizablePrimitive.Separator>\n )\n}\n\nexport { ResizableHandle, ResizablePanel, ResizablePanelGroup }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"cn\"\nimport { Toggle as TogglePrimitive } from \"radix-ui\"\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-muted hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline:\n \"border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground\",\n },\n size: {\n default: \"h-9 min-w-9 px-2\",\n sm: \"h-8 min-w-8 px-1.5\",\n lg: \"h-10 min-w-10 px-2.5\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Toggle({\n className,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> &\n VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Toggle, toggleVariants }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"cn\"\nimport { Slot } from \"radix-ui\"\n\nconst badgeVariants = cva(\n \"inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90\",\n outline:\n \"border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n ghost: \"[a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 [a&]:hover:underline\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30\",\n \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n \"aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { ScrollArea as ScrollAreaPrimitive } from \"radix-ui\"\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"relative flex-1 rounded-full bg-border\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { XIcon } from \"lucide-react\"\nimport { Dialog as SheetPrimitive } from \"radix-ui\"\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n showCloseButton?: boolean\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"fixed z-50 flex flex-col gap-4 bg-background shadow-lg transition ease-in-out data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:animate-in data-[state=open]:duration-500\",\n side === \"right\" &&\n \"inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm\",\n side === \"left\" &&\n \"inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm\",\n side === \"top\" &&\n \"inset-x-0 top-0 h-auto border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n side === \"bottom\" &&\n \"inset-x-0 bottom-0 h-auto border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close className=\"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-secondary\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"font-semibold text-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"cn\"\nimport { Tabs as TabsPrimitive } from \"radix-ui\"\n\nfunction Tabs({\n className,\n orientation = \"horizontal\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n orientation={orientation}\n className={cn(\n \"group/tabs flex gap-2 data-[orientation=horizontal]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst tabsListVariants = cva(\n \"group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-[orientation=horizontal]/tabs:h-9 group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col data-[variant=line]:rounded-none\",\n {\n variants: {\n variant: {\n default: \"bg-muted\",\n line: \"gap-1 bg-transparent\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction TabsList({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List> &\n VariantProps<typeof tabsListVariants>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n data-variant={variant}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction TabsTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n \"relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none dark:text-muted-foreground dark:hover:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n \"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent\",\n \"data-[state=active]:bg-background data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 dark:data-[state=active]:text-foreground\",\n \"after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsContent({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\"flex-1 outline-none\", className)}\n {...props}\n />\n )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants }\n","import type { ChapterMeta } from \"zreader\";\n\nexport interface PartGroup {\n part: string | null;\n items: Array<{ chapter: ChapterMeta; index: number }>;\n}\n\n/** Consecutive chapters sharing a `part` are grouped; books without parts yield one group. */\nexport function groupByPart(chapters: ChapterMeta[]): PartGroup[] {\n const groups: PartGroup[] = [];\n chapters.forEach((chapter, index) => {\n const part = chapter.part ?? null;\n const last = groups[groups.length - 1];\n if (last && last.part === part) last.items.push({ chapter, index });\n else groups.push({ part, items: [{ chapter, index }] });\n });\n return groups;\n}\n\n/** Short list marker: frontmatter `number`, else the 1-based position. */\nexport function chapterMarker(chapter: ChapterMeta, index: number): string {\n return chapter.number ?? (chapter.part || chapter.label ? \"\" : String(index + 1));\n}\n","import type { FontFamily, HighlightColor, Leading, Measure, TextSize } from \"zreader\";\n\n/**\n * Settings → literal Tailwind classes. Keeping every class as a full string\n * literal lets Tailwind see them at build time; nothing is styled inline.\n */\nexport const TEXT_SIZE_CLASS: Record<TextSize, string> = {\n sm: \"prose-sm\",\n base: \"prose-base\",\n lg: \"prose-lg\",\n xl: \"prose-xl\",\n \"2xl\": \"prose-2xl\",\n};\n\nexport const LEADING_CLASS: Record<Leading, string> = {\n tight: \"prose-p:leading-snug prose-li:leading-snug\",\n normal: \"prose-p:leading-normal prose-li:leading-normal\",\n relaxed: \"prose-p:leading-relaxed prose-li:leading-relaxed\",\n};\n\nexport const MEASURE_CLASS: Record<Measure, string> = {\n narrow: \"max-w-[58ch]\",\n normal: \"max-w-[68ch]\",\n wide: \"max-w-[82ch]\",\n};\n\nexport const FONT_CLASS: Record<FontFamily, string> = {\n serif: \"font-serif\",\n sans: \"font-sans\",\n mono: \"font-mono\",\n};\n\nexport const SWATCH_CLASS: Record<HighlightColor, string> = {\n yellow: \"bg-yellow-300 dark:bg-yellow-400/70\",\n green: \"bg-green-300 dark:bg-green-400/60\",\n blue: \"bg-sky-300 dark:bg-sky-400/60\",\n pink: \"bg-pink-300 dark:bg-pink-400/60\",\n purple: \"bg-violet-300 dark:bg-violet-400/60\",\n orange: \"bg-orange-300 dark:bg-orange-400/60\",\n};\n\nexport const QUOTE_BORDER_CLASS: Record<HighlightColor, string> = {\n yellow: \"border-yellow-400\",\n green: \"border-green-400\",\n blue: \"border-sky-400\",\n pink: \"border-pink-400\",\n purple: \"border-violet-400\",\n orange: \"border-orange-400\",\n};\n\nexport function swatchClass(color: string): string {\n return SWATCH_CLASS[color as HighlightColor] ?? SWATCH_CLASS.yellow;\n}\n\nexport function quoteBorderClass(color: string): string {\n return QUOTE_BORDER_CLASS[color as HighlightColor] ?? QUOTE_BORDER_CLASS.yellow;\n}\n\n/** Shared typography for chapter content: shadcn tokens via typography modifiers. */\nexport const PROSE_CLASS =\n \"prose max-w-none text-foreground prose-headings:text-foreground prose-headings:scroll-mt-20 prose-p:text-foreground prose-li:text-foreground prose-strong:text-foreground prose-a:text-primary prose-a:underline-offset-4 prose-blockquote:border-l-border prose-blockquote:text-muted-foreground prose-code:text-foreground prose-pre:bg-muted prose-pre:text-foreground prose-hr:border-border prose-th:text-foreground prose-td:text-foreground prose-figcaption:text-muted-foreground prose-img:rounded-lg prose-table:block prose-table:max-w-full prose-table:overflow-x-auto prose-th:align-bottom prose-td:align-top\";\n","import { useMemo, useState } from \"react\";\nimport { cn } from \"cn\";\nimport { CheckCircle2Icon, SearchIcon, Trash2Icon } from \"lucide-react\";\nimport type { BookMeta, Highlight, TocEntry } from \"zreader\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { ScrollArea } from \"@/components/ui/scroll-area\";\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from \"@/components/ui/sheet\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport { useBookmarks, useHighlights, useProgress, useReaderStore } from \"../context\";\nimport type { LinkComponent } from \"../link\";\nimport { chapterMarker, groupByPart } from \"../parts\";\nimport { quoteBorderClass } from \"../tokens\";\n\nexport type ContentsTab = \"contents\" | \"highlights\" | \"bookmarks\";\n\nexport interface ContentsSheetProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n tab: ContentsTab;\n onTabChange: (tab: ContentsTab) => void;\n book: BookMeta;\n chapterId: string;\n toc: TocEntry[];\n hrefFor: (chapterId: string, hash?: string) => string;\n Link: LinkComponent;\n orphanedIds: ReadonlySet<string>;\n onJumpHighlight: (id: string) => void;\n onJumpBlock: (blockId: string) => void;\n onJumpHeading: (id: string) => void;\n}\n\nconst dateFmt = (iso: string) => new Date(iso).toLocaleDateString(undefined, { month: \"short\", day: \"numeric\" });\n\nexport function ContentsSheet(p: ContentsSheetProps) {\n const { book, chapterId, Link } = p;\n const store = useReaderStore();\n const highlights = useHighlights(book.id);\n const bookmarks = useBookmarks(book.id);\n const progress = useProgress(book.id);\n const [query, setQuery] = useState(\"\");\n\n const titles = useMemo(() => new Map(book.chapters.map((c) => [c.id, c.title])), [book.chapters]);\n const order = useMemo(() => new Map(book.chapters.map((c, i) => [c.id, i])), [book.chapters]);\n\n const grouped = useMemo(() => {\n const q = query.trim().toLowerCase();\n const groups = new Map<string, Highlight[]>();\n highlights\n .filter((h) => !q || h.anchor.exact.toLowerCase().includes(q) || h.note?.toLowerCase().includes(q))\n .sort((a, b) => (order.get(a.chapterId) ?? 0) - (order.get(b.chapterId) ?? 0) || a.anchor.start - b.anchor.start)\n .forEach((h) => groups.set(h.chapterId, [...(groups.get(h.chapterId) ?? []), h]));\n return groups;\n }, [highlights, query, order]);\n\n const sortedBookmarks = useMemo(\n () => [...bookmarks].sort((a, b) => (order.get(a.chapterId) ?? 0) - (order.get(b.chapterId) ?? 0)),\n [bookmarks, order],\n );\n\n const close = () => p.onOpenChange(false);\n /** Same-chapter targets scroll in place; others navigate. */\n const jumpOr = (targetChapter: string, inPage: () => void) => (e: React.MouseEvent) => {\n if (targetChapter !== chapterId) return close();\n e.preventDefault();\n close();\n inPage();\n };\n\n return (\n <Sheet open={p.open} onOpenChange={p.onOpenChange}>\n <SheetContent side=\"left\" className=\"w-[88vw] gap-0 p-0 sm:max-w-sm\">\n <SheetHeader className=\"border-b\">\n <SheetTitle className=\"line-clamp-2\">{book.title}</SheetTitle>\n {book.authors.length > 0 && <SheetDescription>{book.authors.join(\", \")}</SheetDescription>}\n </SheetHeader>\n <Tabs value={p.tab} onValueChange={(v) => p.onTabChange(v as ContentsTab)} className=\"min-h-0 flex-1 gap-0\">\n <div className=\"px-4 pt-3\">\n <TabsList className=\"w-full\">\n <TabsTrigger value=\"contents\">Contents</TabsTrigger>\n <TabsTrigger value=\"highlights\">\n Highlights\n {highlights.length > 0 && <Badge variant=\"secondary\">{highlights.length}</Badge>}\n </TabsTrigger>\n <TabsTrigger value=\"bookmarks\">\n Bookmarks\n {bookmarks.length > 0 && <Badge variant=\"secondary\">{bookmarks.length}</Badge>}\n </TabsTrigger>\n </TabsList>\n </div>\n\n <TabsContent value=\"contents\" className=\"min-h-0\">\n <ScrollArea className=\"h-full\">\n <div className=\"flex flex-col gap-3 p-2\">\n {groupByPart(book.chapters).map((group) => (\n <section key={group.part ?? \"_\"} className=\"flex flex-col gap-0.5\">\n {group.part && <h3 className=\"px-3 pt-2 pb-1 text-xs font-medium tracking-wide text-muted-foreground uppercase\">{group.part}</h3>}\n <ol className=\"flex flex-col gap-0.5\">\n {group.items.map(({ chapter: c, index: i }) => {\n const pr = progress.chapters[c.id];\n const current = c.id === chapterId;\n return (\n <li key={c.id}>\n <Button asChild variant={current ? \"secondary\" : \"ghost\"} className=\"h-auto w-full justify-start gap-3 py-2 text-left whitespace-normal\">\n <Link href={p.hrefFor(c.id)} aria-current={current ? \"page\" : undefined} onClick={close}>\n <span className=\"w-5 shrink-0 text-xs text-muted-foreground tabular-nums\">{chapterMarker(c, i)}</span>\n <span className=\"flex-1\">{c.title}</span>\n {pr?.completed ? (\n <CheckCircle2Icon className=\"text-primary\" aria-label=\"Completed\" />\n ) : pr ? (\n <span className=\"text-xs text-muted-foreground tabular-nums\">{Math.round(pr.percent * 100)}%</span>\n ) : null}\n </Link>\n </Button>\n {current && p.toc.length > 0 && (\n <ol className=\"my-1 ml-8 flex flex-col border-l\">\n {p.toc.map((t) => (\n <li key={t.id}>\n <Button\n asChild\n variant=\"link\"\n size=\"sm\"\n className={cn(\"h-auto w-full justify-start py-1.5 text-left whitespace-normal text-muted-foreground\", t.depth > 2 && \"pl-6\")}\n >\n <a href={`#${t.id}`} onClick={jumpOr(chapterId, () => p.onJumpHeading(t.id))}>\n {t.text}\n </a>\n </Button>\n </li>\n ))}\n </ol>\n )}\n </li>\n );\n })}\n </ol>\n </section>\n ))}\n </div>\n </ScrollArea>\n </TabsContent>\n\n <TabsContent value=\"highlights\" className=\"flex min-h-0 flex-col\">\n {highlights.length > 3 && (\n <div className=\"px-4 pt-3\">\n <div className=\"relative\">\n <SearchIcon className=\"pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground\" />\n <Input type=\"search\" value={query} onChange={(e) => setQuery(e.target.value)} placeholder=\"Search highlights and notes\" aria-label=\"Search highlights\" className=\"pl-8\" />\n </div>\n </div>\n )}\n <ScrollArea className=\"min-h-0 flex-1\">\n <div className=\"flex flex-col gap-4 p-4\">\n {grouped.size === 0 && (\n <p className=\"text-sm text-muted-foreground\">\n {highlights.length ? \"No matches.\" : \"Select text — or turn on highlight mode and tap a sentence — to highlight it.\"}\n </p>\n )}\n {[...grouped].map(([cid, list]) => (\n <section key={cid} className=\"flex flex-col gap-2\">\n <h3 className=\"text-xs font-medium tracking-wide text-muted-foreground uppercase\">{titles.get(cid) ?? cid}</h3>\n <ul className=\"flex flex-col gap-2\">\n {list.map((h) => (\n <li key={h.id} className=\"group flex items-start gap-1\">\n <Link\n href={p.hrefFor(cid, `hl-${h.id}`)}\n onClick={jumpOr(cid, () => p.onJumpHighlight(h.id))}\n className={cn(\"flex-1 rounded-md border-l-4 bg-muted/40 px-3 py-2 text-sm transition-colors hover:bg-muted\", quoteBorderClass(h.color))}\n >\n <span className=\"line-clamp-3 font-serif\">{h.anchor.exact}</span>\n {h.note && <span className=\"mt-1 line-clamp-2 block text-muted-foreground\">{h.note}</span>}\n <span className=\"mt-1 flex items-center gap-2 text-xs text-muted-foreground\">\n {dateFmt(h.updatedAt)}\n {cid === chapterId && p.orphanedIds.has(h.id) && (\n <Badge variant=\"outline\" title=\"The passage changed and this highlight could not be placed\">\n Unplaced\n </Badge>\n )}\n </span>\n </Link>\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" aria-label=\"Delete highlight\" onClick={() => store.removeHighlight(book.id, h.id)}>\n <Trash2Icon />\n </Button>\n </li>\n ))}\n </ul>\n </section>\n ))}\n </div>\n </ScrollArea>\n </TabsContent>\n\n <TabsContent value=\"bookmarks\" className=\"min-h-0\">\n <ScrollArea className=\"h-full\">\n <ul className=\"flex flex-col gap-2 p-4\">\n {sortedBookmarks.length === 0 && <li className=\"text-sm text-muted-foreground\">Use the bookmark button to save your place.</li>}\n {sortedBookmarks.map((b) => (\n <li key={b.id} className=\"flex items-start gap-1\">\n <Link\n href={p.hrefFor(b.chapterId, b.blockId ? `b-${b.blockId}` : undefined)}\n onClick={b.blockId ? jumpOr(b.chapterId, () => p.onJumpBlock(b.blockId!)) : close}\n className=\"flex-1 rounded-md bg-muted/40 px-3 py-2 text-sm transition-colors hover:bg-muted\"\n >\n <span className=\"block font-medium\">{b.label ?? titles.get(b.chapterId) ?? b.chapterId}</span>\n {b.excerpt && <span className=\"mt-0.5 line-clamp-2 block text-muted-foreground\">{b.excerpt}</span>}\n <span className=\"mt-1 block text-xs text-muted-foreground\">{dateFmt(b.createdAt)}</span>\n </Link>\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" aria-label=\"Remove bookmark\" onClick={() => store.removeBookmark(book.id, b.id)}>\n <Trash2Icon />\n </Button>\n </li>\n ))}\n </ul>\n </ScrollArea>\n </TabsContent>\n </Tabs>\n </SheetContent>\n </Sheet>\n );\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Label as LabelPrimitive } from \"radix-ui\"\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"flex field-sizing-content min-h-16 w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:ring-destructive/40\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","import * as React from \"react\"\nimport { type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"cn\"\nimport { ToggleGroup as ToggleGroupPrimitive } from \"radix-ui\"\n\nimport { toggleVariants } from \"@/components/ui/toggle\"\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n }\n>({\n size: \"default\",\n variant: \"default\",\n spacing: 0,\n})\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n spacing = 0,\n children,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n }) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n style={{ \"--gap\": spacing } as React.CSSProperties}\n className={cn(\n \"group/toggle-group flex w-fit items-center gap-[--spacing(var(--gap))] rounded-md data-[spacing=default]:data-[variant=outline]:shadow-xs\",\n className\n )}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size, spacing }}>\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n )\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\n VariantProps<typeof toggleVariants>) {\n const context = React.useContext(ToggleGroupContext)\n\n return (\n <ToggleGroupPrimitive.Item\n data-slot=\"toggle-group-item\"\n data-variant={context.variant || variant}\n data-size={context.size || size}\n data-spacing={context.spacing}\n className={cn(\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n \"w-auto min-w-0 shrink-0 px-3 focus:z-10 focus-visible:z-10\",\n \"data-[spacing=0]:rounded-none data-[spacing=0]:shadow-none data-[spacing=0]:first:rounded-l-md data-[spacing=0]:last:rounded-r-md data-[spacing=0]:data-[variant=outline]:border-l-0 data-[spacing=0]:data-[variant=outline]:first:border-l\",\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n )\n}\n\nexport { ToggleGroup, ToggleGroupItem }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { XIcon } from \"lucide-react\"\nimport { Dialog as DialogPrimitive } from \"radix-ui\"\n\nimport { Button } from \"@/components/ui/button\"\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"outline\">Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","import type { ReactNode } from \"react\";\nimport { cn } from \"cn\";\nimport { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from \"@/components/ui/dialog\";\nimport { Drawer, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle } from \"@/components/ui/drawer\";\nimport { ScrollArea } from \"@/components/ui/scroll-area\";\nimport { Sheet, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle } from \"@/components/ui/sheet\";\nimport { useIsDesktop } from \"../context\";\n\nexport interface ResponsivePanelProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: ReactNode;\n description?: ReactNode;\n /** Desktop surface. Mobile is always a bottom drawer. */\n desktop?: \"dialog\" | \"sheet-left\" | \"sheet-right\";\n /** Hide the header visually (still announced to assistive tech). */\n hideHeader?: boolean;\n footer?: ReactNode;\n className?: string;\n children: ReactNode;\n}\n\n/**\n * shadcn \"responsive dialog\" pattern: a vaul Drawer on mobile, a Dialog or\n * Sheet on desktop. Mobile-first: renders the Drawer during SSR.\n */\nexport function ResponsivePanel({\n open,\n onOpenChange,\n title,\n description,\n desktop = \"dialog\",\n hideHeader,\n footer,\n className,\n children,\n}: ResponsivePanelProps) {\n const isDesktop = useIsDesktop();\n const headerClass = hideHeader ? \"sr-only\" : undefined;\n\n if (isDesktop && desktop === \"dialog\") {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className={cn(\"sm:max-w-lg\", className)}>\n <DialogHeader className={headerClass}>\n <DialogTitle>{title}</DialogTitle>\n {description ? <DialogDescription>{description}</DialogDescription> : null}\n </DialogHeader>\n {children}\n {footer ? <DialogFooter>{footer}</DialogFooter> : null}\n </DialogContent>\n </Dialog>\n );\n }\n\n if (isDesktop) {\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent side={desktop === \"sheet-left\" ? \"left\" : \"right\"} className={cn(\"w-full gap-0 sm:max-w-md\", className)}>\n <SheetHeader className={headerClass}>\n <SheetTitle>{title}</SheetTitle>\n {description ? <SheetDescription>{description}</SheetDescription> : null}\n </SheetHeader>\n <ScrollArea className=\"min-h-0 flex-1\">\n <div className=\"px-4 pb-4\">{children}</div>\n </ScrollArea>\n {footer ? <SheetFooter>{footer}</SheetFooter> : null}\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <Drawer open={open} onOpenChange={onOpenChange}>\n <DrawerContent className={cn(\"max-h-[92svh]\", className)}>\n <DrawerHeader className={cn(\"text-left\", headerClass)}>\n <DrawerTitle>{title}</DrawerTitle>\n {description ? <DrawerDescription>{description}</DrawerDescription> : null}\n </DrawerHeader>\n <div className=\"min-h-0 flex-1 overflow-y-auto overscroll-contain px-4 pb-4\">{children}</div>\n {footer ? <DrawerFooter className=\"pb-[max(1rem,env(safe-area-inset-bottom))]\">{footer}</DrawerFooter> : null}\n </DrawerContent>\n </Drawer>\n );\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { cn } from \"cn\";\nimport { CopyIcon, QuoteIcon, Trash2Icon } from \"lucide-react\";\nimport type { Highlight } from \"zreader\";\nimport { Button } from \"@/components/ui/button\";\nimport { Label } from \"@/components/ui/label\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport { ToggleGroup, ToggleGroupItem } from \"@/components/ui/toggle-group\";\nimport { ResponsivePanel } from \"./responsive-panel\";\nimport { quoteBorderClass, swatchClass } from \"../tokens\";\n\nexport interface HighlightPanelProps {\n highlight: Highlight | null;\n colors: string[];\n focusNote?: boolean;\n onColor: (color: string) => void;\n onNote: (note: string) => void;\n onDelete: () => void;\n onQuote?: () => void;\n onCopy?: () => void;\n onClose: () => void;\n}\n\nexport function HighlightPanel({ highlight, colors, focusNote, onColor, onNote, onDelete, onQuote, onCopy, onClose }: HighlightPanelProps) {\n const [note, setNote] = useState(highlight?.note ?? \"\");\n const saved = useRef(highlight?.note ?? \"\");\n const textRef = useRef<HTMLTextAreaElement>(null);\n const id = highlight?.id;\n\n useEffect(() => {\n setNote(highlight?.note ?? \"\");\n saved.current = highlight?.note ?? \"\";\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id]);\n\n // Debounced autosave.\n useEffect(() => {\n if (note === saved.current) return;\n const t = setTimeout(() => {\n saved.current = note;\n onNote(note);\n }, 400);\n return () => clearTimeout(t);\n }, [note, onNote]);\n\n useEffect(() => {\n if (!focusNote || !id) return;\n const t = setTimeout(() => textRef.current?.focus(), 250);\n return () => clearTimeout(t);\n }, [focusNote, id]);\n\n const flush = () => {\n if (note !== saved.current) {\n saved.current = note;\n onNote(note);\n }\n };\n\n const exact = highlight?.anchor.exact ?? \"\";\n\n return (\n <ResponsivePanel\n open={!!highlight}\n onOpenChange={(open) => {\n if (!open) {\n flush();\n onClose();\n }\n }}\n title=\"Highlight\"\n description=\"Change the colour, add a note, or remove it.\"\n footer={\n <div className=\"flex flex-wrap gap-2\">\n {onCopy && (\n <Button type=\"button\" variant=\"outline\" onClick={onCopy}>\n <CopyIcon /> Copy\n </Button>\n )}\n {onQuote && (\n <Button type=\"button\" variant=\"outline\" onClick={onQuote}>\n <QuoteIcon /> To scratchpad\n </Button>\n )}\n <Button type=\"button\" variant=\"destructive\" onClick={onDelete}>\n <Trash2Icon /> Delete\n </Button>\n </div>\n }\n >\n {highlight && (\n <div className=\"flex flex-col gap-4\">\n <blockquote className={cn(\"line-clamp-6 border-l-4 pl-3 font-serif text-sm text-muted-foreground\", quoteBorderClass(highlight.color))}>\n {exact}\n </blockquote>\n <ToggleGroup\n type=\"single\"\n variant=\"outline\"\n value={highlight.color}\n onValueChange={(v) => v && onColor(v)}\n aria-label=\"Highlight colour\"\n className=\"justify-start\"\n >\n {colors.map((c) => (\n <ToggleGroupItem key={c} value={c} aria-label={c}>\n <span className={cn(\"size-4 rounded-full ring-1 ring-foreground/15\", swatchClass(c))} />\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n <div className=\"grid gap-2\">\n <Label htmlFor={`zr-note-${highlight.id}`}>Note</Label>\n <Textarea\n id={`zr-note-${highlight.id}`}\n ref={textRef}\n rows={4}\n value={note}\n placeholder=\"Add a note…\"\n onChange={(e) => setNote(e.target.value)}\n onBlur={flush}\n />\n </div>\n </div>\n )}\n </ResponsivePanel>\n );\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"cn\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\"\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","import { cn } from \"cn\"\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"animate-pulse rounded-md bg-accent\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","/** Trigger a client-side file download. */\nexport function downloadFile(filename: string, content: string, type = \"application/json\") {\n const url = URL.createObjectURL(new Blob([content], { type }));\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n a.remove();\n setTimeout(() => URL.revokeObjectURL(url), 1000);\n}\n\nexport async function copyText(text: string): Promise<boolean> {\n try {\n await navigator.clipboard.writeText(text);\n return true;\n } catch {\n return false;\n }\n}\n","import { Component, lazy, Suspense, useMemo, type ReactNode } from \"react\";\nimport { toast } from \"sonner\";\nimport { CopyIcon, DownloadIcon, EllipsisIcon, Trash2Icon, XIcon } from \"lucide-react\";\nimport type { PadScope, PadScopeKind } from \"zreader\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { Tabs, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport { usePad, useReader } from \"../context\";\nimport { copyText, downloadFile } from \"../download\";\n\nconst ScratchpadEditor = lazy(() => import(\"zreader/editor\").then((m) => ({ default: m.ScratchpadEditor })));\n\nconst SCOPE_LABEL: Record<PadScopeKind, string> = { chapter: \"Chapter\", book: \"Book\", global: \"All books\" };\n\nexport function scopeFor(kind: PadScopeKind, bookId: string, chapterId: string): PadScope {\n if (kind === \"global\") return { kind };\n if (kind === \"book\") return { kind, bookId };\n return { kind, bookId, chapterId };\n}\n\nexport function scopeKey(scope: PadScope): string {\n return scope.kind === \"global\" ? \"global\" : scope.kind === \"book\" ? `book:${scope.bookId}` : `chapter:${scope.bookId}:${scope.chapterId}`;\n}\n\nclass EditorBoundary extends Component<{ fallback: ReactNode; children: ReactNode }, { failed: boolean }> {\n state = { failed: false };\n static getDerivedStateFromError() {\n return { failed: true };\n }\n render() {\n return this.state.failed ? this.props.fallback : this.props.children;\n }\n}\n\nexport interface ScratchpadPanelProps {\n bookId: string;\n chapterId: string;\n kind: PadScopeKind;\n onKindChange: (kind: PadScopeKind) => void;\n onClose?: () => void;\n onEditorFocus?: () => void;\n /** Filename stem for exports. */\n title?: string;\n}\n\nfunction PlainEditor({ scope, onFocus }: { scope: PadScope; onFocus?: () => void }) {\n const { store } = useReader();\n const pad = usePad(scope);\n return (\n <Textarea\n value={pad.markdown}\n onChange={(e) => store.savePad(scope, e.target.value)}\n onFocus={onFocus}\n placeholder=\"Write in markdown. - [ ] makes a checklist item.\"\n className=\"h-full min-h-48 flex-1 resize-none font-mono text-sm\"\n aria-label=\"Scratchpad (markdown)\"\n />\n );\n}\n\nexport function ScratchpadPanel({ bookId, chapterId, kind, onKindChange, onClose, onEditorFocus, title }: ScratchpadPanelProps) {\n const { store, options } = useReader();\n const scope = useMemo(() => scopeFor(kind, bookId, chapterId), [kind, bookId, chapterId]);\n const pad = usePad(scope);\n const scopes = options.scratchpad.scopes;\n const stem = `${title ?? bookId}-${kind}-notes`.replace(/[^a-z0-9-]+/gi, \"-\").toLowerCase();\n\n return (\n <div className=\"flex h-full min-h-0 flex-col\">\n <div className=\"flex items-center gap-2 border-b px-3 py-2\">\n {scopes.length > 1 ? (\n <Tabs value={kind} onValueChange={(v) => onKindChange(v as PadScopeKind)} className=\"min-w-0 flex-1\">\n <TabsList className=\"w-full\">\n {scopes.map((s) => (\n <TabsTrigger key={s} value={s}>\n {SCOPE_LABEL[s]}\n </TabsTrigger>\n ))}\n </TabsList>\n </Tabs>\n ) : (\n <h2 className=\"flex-1 text-sm font-medium\">Scratchpad</h2>\n )}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" aria-label=\"Scratchpad options\">\n <EllipsisIcon />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onSelect={() => downloadFile(`${stem}.md`, pad.markdown, \"text/markdown\")} disabled={!pad.markdown.trim()}>\n <DownloadIcon /> Download .md\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={async () => toast((await copyText(pad.markdown)) ? \"Markdown copied\" : \"Could not copy\")}\n disabled={!pad.markdown.trim()}\n >\n <CopyIcon /> Copy markdown\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n variant=\"destructive\"\n disabled={!pad.markdown.trim()}\n onSelect={() => {\n const previous = pad;\n store.clearPad(scope);\n toast(\"Scratchpad cleared\", {\n action: { label: \"Undo\", onClick: () => store.savePad(scope, previous.markdown, previous.json) },\n });\n }}\n >\n <Trash2Icon /> Clear\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n {onClose && (\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" aria-label=\"Close scratchpad\" onClick={onClose}>\n <XIcon />\n </Button>\n )}\n </div>\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <EditorBoundary key={scopeKey(scope)} fallback={<div className=\"flex flex-1 flex-col p-3\"><PlainEditor scope={scope} onFocus={onEditorFocus} /></div>}>\n <Suspense\n fallback={\n <div className=\"flex flex-col gap-3 p-4\">\n <Skeleton className=\"h-8 w-full\" />\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-4 w-1/2\" />\n </div>\n }\n >\n <ScratchpadEditor key={scopeKey(scope)} scope={scope} onFocus={onEditorFocus} />\n </Suspense>\n </EditorBoundary>\n </div>\n </div>\n );\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Popover as PopoverPrimitive } from \"radix-ui\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"popover-header\"\n className={cn(\"flex flex-col gap-1 text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <div\n data-slot=\"popover-title\"\n className={cn(\"font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverDescription({\n className,\n ...props\n}: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"popover-description\"\n className={cn(\"text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n PopoverHeader,\n PopoverTitle,\n PopoverDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Separator as SeparatorPrimitive } from \"radix-ui\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","import { useMemo, useRef } from \"react\";\nimport { cn } from \"cn\";\nimport { CopyIcon, MessageSquarePlusIcon, QuoteIcon, TextSelectIcon, XIcon } from \"lucide-react\";\nimport type { TextSpan } from \"zreader\";\nimport { Button } from \"@/components/ui/button\";\nimport { Popover, PopoverAnchor, PopoverContent } from \"@/components/ui/popover\";\nimport { Separator } from \"@/components/ui/separator\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"@/components/ui/tooltip\";\nimport { useIsDesktop } from \"../context\";\nimport { swatchClass } from \"../tokens\";\nimport type { SelectionState } from \"../useChapterEngine\";\n\nexport interface SelectionToolbarProps {\n selection: SelectionState | null;\n colors: string[];\n onHighlight: (span: TextSpan, color: string) => void;\n onNote: (span: TextSpan) => void;\n onSentence: (span: TextSpan) => void;\n onQuote?: (span: TextSpan, text: string) => void;\n onCopy?: (text: string) => void;\n onDismiss: () => void;\n}\n\nfunction Action({ label, onSelect, children }: { label: string; onSelect: () => void; children: React.ReactNode }) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button type=\"button\" variant=\"ghost\" size=\"icon\" aria-label={label} onClick={onSelect}>\n {children}\n </Button>\n </TooltipTrigger>\n <TooltipContent>{label}</TooltipContent>\n </Tooltip>\n );\n}\n\n/**\n * Actions for the current text selection. Desktop: a Popover anchored to the\n * selection (virtual anchor). Mobile: docked above the safe area, out of the\n * way of the native selection callout.\n */\nexport function SelectionToolbar({ selection, colors, onHighlight, onNote, onSentence, onQuote, onCopy, onDismiss }: SelectionToolbarProps) {\n const isDesktop = useIsDesktop();\n // Keep the last selection: on touch devices it can collapse before `click`.\n const last = useRef<SelectionState | null>(null);\n if (selection) last.current = selection;\n const current = () => last.current;\n\n const anchorRef = useMemo(\n () => ({\n current: {\n getBoundingClientRect: () => {\n const r = last.current?.rect;\n return DOMRect.fromRect(r ? { x: r.left, y: r.top, width: r.width, height: r.height } : undefined);\n },\n },\n }),\n [],\n );\n\n const keepSelection = (e: React.PointerEvent | React.MouseEvent) => e.preventDefault();\n\n const actions = (\n <div className=\"flex items-center gap-0.5\" role=\"toolbar\" aria-label=\"Selection actions\" onPointerDown={keepSelection} onMouseDown={keepSelection}>\n <div className=\"flex items-center gap-1 px-1\">\n {colors.map((c) => (\n <Button\n key={c}\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label={`Highlight ${c}`}\n onClick={() => current() && onHighlight(current()!.span, c)}\n >\n <span className={cn(\"size-5 rounded-full ring-1 ring-foreground/15\", swatchClass(c))} />\n </Button>\n ))}\n </div>\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n <Action label=\"Whole sentence\" onSelect={() => current() && onSentence(current()!.span)}>\n <TextSelectIcon />\n </Action>\n <Action label=\"Add note\" onSelect={() => current() && onNote(current()!.span)}>\n <MessageSquarePlusIcon />\n </Action>\n {onQuote && (\n <Action label=\"Quote to scratchpad\" onSelect={() => current() && onQuote(current()!.span, current()!.text)}>\n <QuoteIcon />\n </Action>\n )}\n {onCopy && (\n <Action label=\"Copy\" onSelect={() => current() && onCopy(current()!.text)}>\n <CopyIcon />\n </Action>\n )}\n {!isDesktop && (\n <Action label=\"Dismiss\" onSelect={onDismiss}>\n <XIcon />\n </Action>\n )}\n </div>\n );\n\n if (isDesktop) {\n return (\n <Popover open={!!selection} modal={false}>\n <PopoverAnchor virtualRef={anchorRef} />\n <PopoverContent\n side=\"top\"\n align=\"center\"\n sideOffset={10}\n className=\"w-auto p-1\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n onCloseAutoFocus={(e) => e.preventDefault()}\n onEscapeKeyDown={onDismiss}\n >\n {actions}\n </PopoverContent>\n </Popover>\n );\n }\n\n if (!selection) return null;\n return (\n <div className=\"fixed inset-x-2 bottom-[max(0.75rem,env(safe-area-inset-bottom))] z-40 flex justify-center animate-in fade-in-0 slide-in-from-bottom-2\">\n <div className=\"max-w-full overflow-x-auto rounded-xl border bg-popover p-1 text-popover-foreground shadow-lg\">{actions}</div>\n </div>\n );\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"cn\"\n\nconst alertVariants = cva(\n \"relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\",\n {\n variants: {\n variant: {\n default: \"bg-card text-card-foreground\",\n destructive:\n \"bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-current\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"col-start-2 grid justify-items-start gap-1 text-sm text-muted-foreground [&_p]:leading-relaxed\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Alert, AlertTitle, AlertDescription }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Switch as SwitchPrimitive } from \"radix-ui\"\n\nfunction Switch({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n \"peer group/switch inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground\"\n )}\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","import { useId, useRef, useState, type ReactNode } from \"react\";\nimport { useTheme } from \"next-themes\";\nimport { toast } from \"sonner\";\nimport { DownloadIcon, HardDriveIcon, RotateCcwIcon, UploadIcon } from \"lucide-react\";\nimport {\n FONT_FAMILIES,\n LEADINGS,\n MEASURES,\n TEXT_SIZES,\n exportBackup,\n highlightsToMarkdown,\n importBackup,\n requestPersistentStorage,\n type BookMeta,\n type FontFamily,\n type Leading,\n type Measure,\n type TextSize,\n type ThemeName,\n} from \"zreader\";\nimport { Alert, AlertDescription, AlertTitle } from \"@/components/ui/alert\";\nimport { Button } from \"@/components/ui/button\";\nimport { Label } from \"@/components/ui/label\";\nimport { Separator } from \"@/components/ui/separator\";\nimport { Switch } from \"@/components/ui/switch\";\nimport { ToggleGroup, ToggleGroupItem } from \"@/components/ui/toggle-group\";\nimport { useHighlights, useHydrated, useReader, useSettings } from \"../context\";\nimport { downloadFile } from \"../download\";\nimport { ResponsivePanel } from \"./responsive-panel\";\n\nconst THEME_LABEL: Record<ThemeName, string> = { system: \"Auto\", light: \"Light\", sepia: \"Sepia\", dark: \"Dark\" };\nconst SIZE_LABEL: Record<TextSize, string> = { sm: \"S\", base: \"M\", lg: \"L\", xl: \"XL\", \"2xl\": \"2XL\" };\nconst LEADING_LABEL: Record<Leading, string> = { tight: \"Tight\", normal: \"Normal\", relaxed: \"Relaxed\" };\nconst MEASURE_LABEL: Record<Measure, string> = { narrow: \"Narrow\", normal: \"Normal\", wide: \"Wide\" };\nconst FONT_LABEL: Record<FontFamily, string> = { serif: \"Serif\", sans: \"Sans\", mono: \"Mono\" };\n\nfunction Choice<T extends string>({\n label,\n value,\n values,\n labels,\n onChange,\n}: {\n label: string;\n value: T;\n values: readonly T[];\n labels: Record<T, ReactNode>;\n onChange: (v: T) => void;\n}) {\n const id = useId();\n return (\n <div className=\"grid gap-2\">\n <Label id={id}>{label}</Label>\n <ToggleGroup\n type=\"single\"\n variant=\"outline\"\n value={value}\n onValueChange={(v) => v && onChange(v as T)}\n aria-labelledby={id}\n className=\"w-full\"\n >\n {values.map((v) => (\n <ToggleGroupItem key={v} value={v} className=\"flex-1\">\n {labels[v]}\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n </div>\n );\n}\n\nexport interface SettingsPanelProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n book?: BookMeta;\n}\n\nexport function SettingsPanel({ open, onOpenChange, book }: SettingsPanelProps) {\n const { store, options } = useReader();\n const [settings, update] = useSettings();\n const { theme, setTheme } = useTheme();\n const hydrated = useHydrated();\n const highlights = useHighlights(book?.id ?? \"\");\n const fileRef = useRef<HTMLInputElement>(null);\n const [replace, setReplace] = useState(false);\n const modeId = useId();\n const hlModeId = useId();\n\n const stamp = new Date().toISOString().slice(0, 10);\n\n const onImport = async (file: File) => {\n try {\n const res = importBackup(store, await file.text(), { mode: replace ? \"replace\" : \"merge\" });\n toast.success(`Imported ${res.imported} record${res.imported === 1 ? \"\" : \"s\"}`, {\n description: res.skipped ? `${res.skipped} skipped` : undefined,\n });\n } catch (e) {\n toast.error(\"Import failed\", { description: (e as Error).message });\n }\n };\n\n return (\n <ResponsivePanel open={open} onOpenChange={onOpenChange} title=\"Reading settings\" desktop=\"sheet-right\">\n <div className=\"flex flex-col gap-5\">\n {hydrated && (\n <Choice<ThemeName>\n label=\"Theme\"\n value={(theme as ThemeName) ?? options.defaultTheme}\n values={options.themes}\n labels={THEME_LABEL}\n onChange={setTheme}\n />\n )}\n <Choice<TextSize> label=\"Text size\" value={settings.textSize} values={TEXT_SIZES} labels={SIZE_LABEL} onChange={(textSize) => update({ textSize })} />\n <Choice<Leading> label=\"Line spacing\" value={settings.leading} values={LEADINGS} labels={LEADING_LABEL} onChange={(leading) => update({ leading })} />\n <Choice<Measure> label=\"Line width\" value={settings.measure} values={MEASURES} labels={MEASURE_LABEL} onChange={(measure) => update({ measure })} />\n <Choice<FontFamily> label=\"Font\" value={settings.fontFamily} values={FONT_FAMILIES} labels={FONT_LABEL} onChange={(fontFamily) => update({ fontFamily })} />\n\n <div className=\"flex items-start justify-between gap-4 rounded-lg border p-3\">\n <div className=\"grid gap-1\">\n <Label htmlFor={hlModeId}>Highlight mode</Label>\n <p className=\"text-sm text-muted-foreground\">Tap any sentence to highlight it.</p>\n </div>\n <Switch id={hlModeId} checked={settings.highlightMode} onCheckedChange={(highlightMode) => update({ highlightMode })} />\n </div>\n\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" className=\"self-start\" onClick={() => store.resetSettings()}>\n <RotateCcwIcon /> Reset reading settings\n </Button>\n\n <Separator />\n\n <section className=\"flex flex-col gap-3\" aria-labelledby={`${modeId}-title`}>\n <h3 id={`${modeId}-title`} className=\"text-sm font-medium\">\n Your data\n </h3>\n {options.backupReminder && (\n <Alert>\n <HardDriveIcon />\n <AlertTitle>Stored only in this browser</AlertTitle>\n <AlertDescription>Highlights, notes, bookmarks and scratchpads are removed if site data is cleared. Export a backup now and then.</AlertDescription>\n </Alert>\n )}\n <div className=\"flex flex-wrap gap-2\">\n <Button type=\"button\" variant=\"outline\" onClick={() => downloadFile(`reader-backup-${stamp}.json`, JSON.stringify(exportBackup(store), null, 2))}>\n <DownloadIcon /> Export backup\n </Button>\n <Button type=\"button\" variant=\"outline\" onClick={() => fileRef.current?.click()}>\n <UploadIcon /> Import backup\n </Button>\n {book && highlights.length > 0 && (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => {\n const titles = new Map(book.chapters.map((c) => [c.id, c.title]));\n downloadFile(`${book.id}-highlights.md`, highlightsToMarkdown(book.title, highlights, (id) => titles.get(id) ?? id), \"text/markdown\");\n }}\n >\n <DownloadIcon /> Highlights (.md)\n </Button>\n )}\n </div>\n <div className=\"flex items-center gap-3\">\n <Switch id={modeId} checked={replace} onCheckedChange={setReplace} />\n <Label htmlFor={modeId} className=\"font-normal\">\n Replace existing data on import\n </Label>\n </div>\n <input\n ref={fileRef}\n type=\"file\"\n accept=\"application/json,.json\"\n className=\"hidden\"\n onChange={(e) => {\n const f = e.target.files?.[0];\n if (f) void onImport(f);\n e.target.value = \"\";\n }}\n />\n <Button\n type=\"button\"\n variant=\"link\"\n className=\"self-start px-0\"\n onClick={async () =>\n (await requestPersistentStorage())\n ? toast.success(\"This browser will keep your reader data.\")\n : toast.info(\"The browser did not grant persistent storage.\")\n }\n >\n Ask the browser to keep this data\n </Button>\n </section>\n </div>\n </ResponsivePanel>\n );\n}\n","import { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from \"react\";\nimport {\n buildTextIndex,\n collectToc,\n describeSpan,\n ensureBlockIds,\n expandSpanToSentences,\n findBlock,\n highlightAtOffset,\n offsetFromPoint,\n paintHighlights,\n resolveAnchor,\n selectionSpan,\n sentenceSpanAt,\n spanToRange,\n BLOCK_ATTR,\n IGNORE_ATTR,\n type Highlight,\n type ResolvedHighlight,\n type TextIndex,\n type TextSpan,\n type TocEntry,\n} from \"zreader\";\nimport { useHighlights, useReader, useSettings } from \"./context\";\n\nexport interface SelectionRect {\n top: number;\n left: number;\n bottom: number;\n right: number;\n width: number;\n height: number;\n}\n\nexport interface SelectionState {\n span: TextSpan;\n text: string;\n rect: SelectionRect;\n}\n\nexport interface ResumeState {\n blockId: string;\n percent: number;\n}\n\nexport interface ChapterEngineOptions {\n bookId: string;\n chapterId: string;\n contentHash?: string;\n /** The chapter root element (pass callback-ref state so remounts re-bind). */\n root: HTMLElement | null;\n /** Scrolling element. `null` = the window (mobile layout). */\n scroller?: HTMLElement | null;\n /** px reserved at the top of the scroll viewport (sticky header). */\n topOffset?: number;\n onHighlightTap?: (id: string) => void;\n}\n\nconst INTERACTIVE = `a,button,input,textarea,select,summary,label,video,audio,iframe,[contenteditable],[${IGNORE_ATTR}]`;\n\nfunction prefersReducedMotion() {\n return typeof matchMedia !== \"undefined\" && matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\n/** Tiny external store so only <ReadingProgress> re-renders while scrolling. */\nfunction createValueStore(initial: number) {\n let value = initial;\n const listeners = new Set<() => void>();\n return {\n get: () => value,\n set(v: number) {\n if (Math.abs(v - value) < 0.001) return;\n value = v;\n listeners.forEach((l) => l());\n },\n subscribe(l: () => void) {\n listeners.add(l);\n return () => listeners.delete(l);\n },\n };\n}\nexport type ValueStore = ReturnType<typeof createValueStore>;\n\nexport function useValueStore(store: ValueStore): number {\n return useSyncExternalStore(store.subscribe, store.get, () => 0);\n}\n\nexport function useChapterEngine(opts: ChapterEngineOptions) {\n const { bookId, chapterId, contentHash, root: rootEl, scroller: scrollEl = null, topOffset = 64 } = opts;\n const rootRef = useRef(rootEl);\n rootRef.current = rootEl;\n const { store, options } = useReader();\n const [settings] = useSettings();\n const highlights = useHighlights(bookId, chapterId);\n\n const indexRef = useRef<TextIndex | null>(null);\n const [version, setVersion] = useState(0);\n const [selection, setSelection] = useState<SelectionState | null>(null);\n const [activeId, setActiveId] = useState<string | null>(null);\n const [resume, setResume] = useState<ResumeState | null>(null);\n const [percentStore] = useState(() => createValueStore(0));\n /** Headings found in the rendered content (used when no `toc` prop is given). */\n const [domToc, setDomToc] = useState<TocEntry[]>([]);\n const onTapRef = useRef(opts.onHighlightTap);\n onTapRef.current = opts.onHighlightTap;\n\n // --------------------------------------------------------- scroll helpers\n const scroller = useCallback(() => scrollEl, [scrollEl]);\n const viewportTop = useCallback(() => scroller()?.getBoundingClientRect().top ?? 0, [scroller]);\n const viewportHeight = useCallback(() => scroller()?.clientHeight ?? window.innerHeight, [scroller]);\n const scrollTop = useCallback(() => scroller()?.scrollTop ?? window.scrollY, [scroller]);\n const scrollToY = useCallback(\n (y: number, smooth = true) => {\n const opts: ScrollToOptions = { top: Math.max(0, y), behavior: smooth && !prefersReducedMotion() ? \"smooth\" : \"auto\" };\n const el = scroller();\n if (el) el.scrollTo(opts);\n else window.scrollTo(opts);\n },\n [scroller],\n );\n /** Convert a viewport-relative `top` into a scroll position that puts it under the header. */\n const targetFor = useCallback(\n (rectTop: number, extra = 8) => scrollTop() + rectTop - viewportTop() - topOffset - extra,\n [scrollTop, viewportTop, topOffset],\n );\n\n // ------------------------------------------------------------ text index\n useEffect(() => {\n const root = rootEl;\n if (!root) return;\n const rebuild = () => {\n // Content rendered without the rehype plugin gets the same ids here.\n ensureBlockIds(root);\n setDomToc((prev) => {\n const next = collectToc(root);\n return JSON.stringify(prev) === JSON.stringify(next) ? prev : next;\n });\n indexRef.current = buildTextIndex(root);\n setVersion((v) => v + 1);\n };\n rebuild();\n let t: ReturnType<typeof setTimeout> | undefined;\n const mo = new MutationObserver(() => {\n clearTimeout(t);\n t = setTimeout(rebuild, 60);\n });\n // Attribute changes (our own ids) are deliberately not observed.\n mo.observe(root, { childList: true, subtree: true, characterData: true });\n return () => {\n mo.disconnect();\n clearTimeout(t);\n };\n }, [rootEl, chapterId]);\n\n const getIndex = useCallback(() => {\n const root = rootRef.current;\n if (root && (!indexRef.current || indexRef.current.root !== root)) indexRef.current = buildTextIndex(root);\n return indexRef.current;\n }, []);\n\n // -------------------------------------------------------------- resolve\n const { resolved, orphaned } = useMemo(() => {\n const index = indexRef.current;\n const ok: ResolvedHighlight[] = [];\n const lost: Highlight[] = [];\n if (index) {\n for (const h of highlights) {\n const span = resolveAnchor(index, h.anchor);\n const range = span ? spanToRange(index, span) : null;\n if (span && range) ok.push({ highlight: h, span, range });\n else lost.push(h);\n }\n }\n return { resolved: ok, orphaned: lost };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [highlights, version]);\n const resolvedRef = useRef(resolved);\n resolvedRef.current = resolved;\n\n // Self-heal anchors that moved because the chapter was edited.\n useEffect(() => {\n const index = indexRef.current;\n if (!index) return;\n for (const r of resolved) {\n const a = r.highlight.anchor;\n if (a.start === r.span.start && a.end === r.span.end) continue;\n const fresh = describeSpan(index, r.span, contentHash);\n if (fresh) store.updateHighlight(bookId, r.highlight.id, { anchor: fresh });\n }\n }, [resolved, bookId, contentHash, store]);\n\n // ---------------------------------------------------------------- paint\n useEffect(() => paintHighlights(resolved, { activeId }), [resolved, activeId]);\n\n // ------------------------------------------------------------ selection\n useEffect(() => {\n let t: ReturnType<typeof setTimeout> | undefined;\n const update = () => {\n const index = getIndex();\n const sel = document.getSelection();\n const span = index ? selectionSpan(index, sel) : null;\n if (!index || !span || !sel || sel.rangeCount === 0) {\n setSelection(null);\n return;\n }\n const r = sel.getRangeAt(0).getBoundingClientRect();\n setSelection({\n span,\n text: index.text.slice(span.start, span.end),\n rect: { top: r.top, left: r.left, bottom: r.bottom, right: r.right, width: r.width, height: r.height },\n });\n };\n const onChange = () => {\n clearTimeout(t);\n t = setTimeout(update, 120);\n };\n document.addEventListener(\"selectionchange\", onChange);\n return () => {\n document.removeEventListener(\"selectionchange\", onChange);\n clearTimeout(t);\n };\n }, [getIndex]);\n\n const clearSelection = useCallback(() => {\n document.getSelection()?.removeAllRanges();\n setSelection(null);\n }, []);\n\n const selectSpan = useCallback(\n (span: TextSpan) => {\n const index = getIndex();\n const range = index && spanToRange(index, span);\n const sel = document.getSelection();\n if (!range || !sel) return;\n sel.removeAllRanges();\n sel.addRange(range);\n },\n [getIndex],\n );\n\n const expandSelectionToSentences = useCallback(\n (span?: TextSpan) => {\n const index = getIndex();\n const base = span ?? selection?.span;\n if (!index || !base) return;\n selectSpan(expandSpanToSentences(index, base, document.documentElement.lang || undefined));\n },\n [getIndex, selection, selectSpan],\n );\n\n const createHighlight = useCallback(\n (span: TextSpan, color?: string, note?: string): Highlight | null => {\n const index = getIndex();\n if (!index) return null;\n const anchor = describeSpan(index, span, contentHash);\n if (!anchor) return null;\n const dup = highlights.find((h) => h.anchor.start === anchor.start && h.anchor.end === anchor.end);\n if (dup) {\n if (color && dup.color !== color) store.updateHighlight(bookId, dup.id, { color });\n return dup;\n }\n return store.addHighlight({ bookId, chapterId, anchor, color, note });\n },\n [getIndex, contentHash, highlights, store, bookId, chapterId],\n );\n\n // ------------------------------------------------------------- tapping\n const highlightModeRef = useRef(settings.highlightMode);\n highlightModeRef.current = settings.highlightMode;\n const createRef = useRef(createHighlight);\n createRef.current = createHighlight;\n\n useEffect(() => {\n const root = rootEl;\n if (!root) return;\n const onClick = (e: MouseEvent) => {\n const sel = document.getSelection();\n if (sel && !sel.isCollapsed) return;\n if ((e.target as Element).closest?.(INTERACTIVE)) return;\n const index = getIndex();\n if (!index) return;\n const offset = offsetFromPoint(index, e.clientX, e.clientY);\n if (offset == null) return;\n const hit = highlightAtOffset(resolvedRef.current, offset);\n if (hit) {\n setActiveId(hit.highlight.id);\n onTapRef.current?.(hit.highlight.id);\n return;\n }\n if (highlightModeRef.current) {\n const span = sentenceSpanAt(index, offset, document.documentElement.lang || undefined);\n if (span && createRef.current(span)) navigator.vibrate?.(8);\n }\n };\n root.addEventListener(\"click\", onClick);\n return () => root.removeEventListener(\"click\", onClick);\n }, [rootEl, getIndex]);\n\n // ----------------------------------------------------------- navigation\n const scrollToSpan = useCallback(\n (span: TextSpan, smooth = true) => {\n const index = getIndex();\n const range = index && spanToRange(index, span);\n if (!range) return false;\n scrollToY(targetFor(range.getBoundingClientRect().top, viewportHeight() * 0.15), smooth);\n return true;\n },\n [getIndex, scrollToY, targetFor, viewportHeight],\n );\n\n const scrollToHighlight = useCallback(\n (id: string, smooth = true) => {\n const r = resolvedRef.current.find((x) => x.highlight.id === id);\n if (!r) return false;\n setActiveId(id);\n return scrollToSpan(r.span, smooth);\n },\n [scrollToSpan],\n );\n\n const scrollToElement = useCallback(\n (el: Element | null, smooth = true) => {\n if (!el) return false;\n scrollToY(targetFor(el.getBoundingClientRect().top), smooth);\n return true;\n },\n [scrollToY, targetFor],\n );\n\n const scrollToBlock = useCallback(\n (blockId: string, smooth = true) => {\n const root = rootRef.current;\n return scrollToElement(root && findBlock(root, blockId), smooth);\n },\n [scrollToElement],\n );\n\n const scrollToHeading = useCallback(\n (id: string, smooth = true) => scrollToElement(rootRef.current?.ownerDocument.getElementById(id) ?? null, smooth),\n [scrollToElement],\n );\n\n const scrollToTop = useCallback(() => scrollToY(0), [scrollToY]);\n\n /** Block at the top of the reading viewport. */\n const getTopBlock = useCallback((): Element | null => {\n const root = rootRef.current;\n if (!root) return null;\n const line = viewportTop() + topOffset + 8;\n for (const el of Array.from(root.querySelectorAll(`[${BLOCK_ATTR}]`))) {\n if (el.getBoundingClientRect().bottom > line) return el;\n }\n return null;\n }, [viewportTop, topOffset]);\n\n // -------------------------------------------------------------- progress\n useEffect(() => {\n const root = rootEl;\n if (!root) return;\n const target: HTMLElement | Window = scroller() ?? window;\n let raf = 0;\n let lastSave = 0;\n let pending: ReturnType<typeof setTimeout> | undefined;\n const compute = () => {\n const box = root.getBoundingClientRect();\n const top = box.top - viewportTop();\n const total = box.height - viewportHeight() + topOffset;\n const percent = total <= 0 ? 1 : Math.max(0, Math.min(1, (topOffset - top) / total));\n percentStore.set(percent);\n return percent;\n };\n const save = () => {\n const percent = compute();\n const block = getTopBlock();\n store.recordProgress(bookId, chapterId, { blockId: block?.getAttribute(BLOCK_ATTR) ?? undefined, percent });\n lastSave = Date.now();\n };\n const onScroll = () => {\n cancelAnimationFrame(raf);\n raf = requestAnimationFrame(() => {\n compute();\n clearTimeout(pending);\n pending = setTimeout(save, Math.max(0, options.progress.saveIntervalMs - (Date.now() - lastSave)));\n });\n };\n compute();\n target.addEventListener(\"scroll\", onScroll, { passive: true });\n window.addEventListener(\"resize\", onScroll, { passive: true });\n window.addEventListener(\"pagehide\", save);\n return () => {\n target.removeEventListener(\"scroll\", onScroll);\n window.removeEventListener(\"resize\", onScroll);\n window.removeEventListener(\"pagehide\", save);\n cancelAnimationFrame(raf);\n clearTimeout(pending);\n };\n }, [rootEl, scroller, viewportTop, viewportHeight, bookId, chapterId, store, options.progress.saveIntervalMs, getTopBlock, topOffset, percentStore]);\n\n // ---------------------------------------------------------------- resume\n // Restoration is async (fonts) and the root may remount in between (layout\n // switch after hydration), so `run` always reads the latest callbacks.\n const latest = useRef({ scrollToHighlight, scrollToBlock, scrollToHeading, scrollTop });\n latest.current = { scrollToHighlight, scrollToBlock, scrollToHeading, scrollTop };\n const restoredFor = useRef<string | null>(null);\n useEffect(() => {\n if (!rootEl || version === 0 || restoredFor.current === chapterId) return;\n restoredFor.current = chapterId;\n const hash = decodeURIComponent(window.location.hash.slice(1));\n const run = () => {\n const l = latest.current;\n if (hash.startsWith(\"hl-\")) {\n if (l.scrollToHighlight(hash.slice(3), false)) return;\n } else if (hash.startsWith(\"b-\")) {\n if (l.scrollToBlock(hash.slice(2), false)) return;\n } else if (hash) {\n l.scrollToHeading(hash, false);\n return;\n }\n const saved = store.progress(bookId).get().chapters[chapterId];\n if (saved?.blockId && saved.percent > 0.03 && saved.percent < 0.98 && l.scrollTop() < 40) {\n if (l.scrollToBlock(saved.blockId, false)) setResume({ blockId: saved.blockId, percent: saved.percent });\n }\n };\n const fonts = (document as Document & { fonts?: FontFaceSet }).fonts;\n const go = () => requestAnimationFrame(() => requestAnimationFrame(run));\n if (fonts?.ready) void fonts.ready.then(go);\n else go();\n }, [version, chapterId, bookId, store, rootEl]);\n\n const dismissResume = useCallback(() => setResume(null), []);\n\n return {\n highlights,\n resolved,\n orphaned,\n selection,\n activeId,\n setActiveId,\n resume,\n dismissResume,\n percentStore,\n domToc,\n clearSelection,\n selectSpan,\n expandSelectionToSentences,\n createHighlight,\n scrollToHighlight,\n scrollToBlock,\n scrollToHeading,\n scrollToTop,\n getTopBlock,\n getIndex,\n };\n}\n\nexport type ChapterEngine = ReturnType<typeof useChapterEngine>;\n","import { createContext, useCallback, useContext, useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { cn } from \"cn\";\nimport { toast } from \"sonner\";\nimport { usePanelRef, useDefaultLayout } from \"react-resizable-panels\";\nimport {\n ArrowLeftIcon,\n ArrowRightIcon,\n BookmarkIcon,\n CheckIcon,\n ChevronLeftIcon,\n HighlighterIcon,\n ListIcon,\n NotebookPenIcon,\n TypeIcon,\n} from \"lucide-react\";\nimport {\n highlightToMarkdown,\n quoteToMarkdown,\n supportsHighlightApi,\n BLOCK_ATTR,\n type BookMeta,\n type ChapterMeta,\n type PadScopeKind,\n type TextSpan,\n type TocEntry,\n} from \"zreader\";\nimport { Button } from \"@/components/ui/button\";\nimport { Drawer, DrawerContent, DrawerDescription, DrawerTitle } from \"@/components/ui/drawer\";\nimport { Progress } from \"@/components/ui/progress\";\nimport { ResizableHandle, ResizablePanel, ResizablePanelGroup } from \"@/components/ui/resizable\";\nimport { Toggle } from \"@/components/ui/toggle\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"@/components/ui/tooltip\";\nimport { ContentsSheet, type ContentsTab } from \"./components/contents-sheet\";\nimport { HighlightPanel } from \"./components/highlight-panel\";\nimport { ScratchpadPanel, scopeFor } from \"./components/scratchpad-panel\";\nimport { SelectionToolbar } from \"./components/selection-toolbar\";\nimport { SettingsPanel } from \"./components/settings-panel\";\nimport { useBook, useBookmarks, useIsDesktop, useLibrary, useProgress, useReader, useSettings, type HeaderSlot, type HrefFor } from \"./context\";\nimport { copyText } from \"./download\";\nimport type { LinkComponent } from \"./link\";\nimport { FONT_CLASS, LEADING_CLASS, MEASURE_CLASS, PROSE_CLASS, TEXT_SIZE_CLASS } from \"./tokens\";\nimport { useChapterEngine, useValueStore, type ValueStore } from \"./useChapterEngine\";\n\nexport interface ReaderProps {\n /** A book id from the provider's catalogue, or the book's metadata. */\n book: BookMeta | string;\n /** A chapter id of that book, or the chapter's metadata. */\n chapter: ChapterMeta | string;\n /** Defaults to the neighbouring chapters in the book. Pass `null` to hide. */\n prev?: ChapterMeta | null;\n next?: ChapterMeta | null;\n /** Contents of this chapter. Defaults to the h2/h3 headings found in the rendered content. */\n toc?: TocEntry[];\n contentHash?: string;\n /** Sanitized chapter HTML (from `renderChapter()` / `renderHtml()` on the server). */\n html?: string;\n /** Or render the chapter yourself (e.g. an MDX component). */\n children?: ReactNode;\n /** Router link, e.g. `next/link`. Defaults to the provider's. */\n Link?: LinkComponent;\n /** Override URL building. Defaults to the provider's. */\n hrefFor?: HrefFor;\n /**\n * Middle of the top bar: a string (shown as text), any element (your logo,\n * a description…), or a function of `{ book, chapter }`. Defaults to the\n * provider's `headerSlot`, then to <ReaderTitle />. Combine freely, e.g.\n * `<><Logo /><ReaderTitle /></>`.\n */\n header?: HeaderSlot;\n /** Where the back button goes. Defaults to the book page. */\n backHref?: string;\n className?: string;\n}\n\nconst ReaderChapterContext = createContext<{ book: BookMeta; chapter: ChapterMeta } | null>(null);\n\n/** The book and chapter of the surrounding <Reader> (for custom header content). */\nexport function useReaderChapter(): { book: BookMeta; chapter: ChapterMeta } {\n const ctx = useContext(ReaderChapterContext);\n if (!ctx) throw new Error(\"zreader: useReaderChapter() must be used inside <Reader>.\");\n return ctx;\n}\n\n/** The default header content: book title over chapter title. */\nexport function ReaderTitle({ className }: { className?: string }) {\n const { book, chapter } = useReaderChapter();\n return (\n <div className={cn(\"min-w-0\", className)}>\n <p className=\"truncate text-xs text-muted-foreground\">{book.title}</p>\n <p className=\"truncate text-sm font-medium\">{chapter.title}</p>\n </div>\n );\n}\n\nfunction HeaderContent({ slot, book, chapter }: { slot: HeaderSlot | undefined; book: BookMeta; chapter: ChapterMeta }) {\n const content = typeof slot === \"function\" ? slot({ book, chapter }) : slot;\n if (content === undefined) return <ReaderTitle />;\n if (typeof content === \"string\" || typeof content === \"number\") {\n return <p className=\"truncate text-sm font-medium\">{content}</p>;\n }\n return <>{content}</>;\n}\n\nfunction ReadingProgress({ store, className }: { store: ValueStore; className?: string }) {\n const value = useValueStore(store);\n return <Progress value={Math.round(value * 100)} aria-label=\"Chapter progress\" className={cn(\"h-0.5 rounded-none bg-transparent\", className)} />;\n}\n\nfunction IconAction({ label, children, ...props }: React.ComponentProps<typeof Button> & { label: string }) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button type=\"button\" variant=\"ghost\" size=\"icon\" aria-label={label} {...props}>\n {children}\n </Button>\n </TooltipTrigger>\n <TooltipContent>{label}</TooltipContent>\n </Tooltip>\n );\n}\n\nfunction IconToggle({ label, children, ...props }: React.ComponentProps<typeof Toggle> & { label: string }) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Toggle aria-label={label} {...props}>\n {children}\n </Toggle>\n </TooltipTrigger>\n <TooltipContent>{label}</TooltipContent>\n </Tooltip>\n );\n}\n\n/** Hide the header while scrolling down (mobile, window scroll). */\nfunction useAutoHide(enabled: boolean) {\n const [hidden, setHidden] = useState(false);\n useEffect(() => {\n if (!enabled) {\n setHidden(false);\n return;\n }\n let last = window.scrollY;\n let raf = 0;\n const onScroll = () => {\n cancelAnimationFrame(raf);\n raf = requestAnimationFrame(() => {\n const y = window.scrollY;\n if (Math.abs(y - last) < 8) return;\n setHidden(y > last && y > 80);\n last = y;\n });\n };\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n return () => {\n window.removeEventListener(\"scroll\", onScroll);\n cancelAnimationFrame(raf);\n };\n }, [enabled]);\n return hidden;\n}\n\nconst isEditable = (el: Element | null) => !!el?.closest(\"input,textarea,select,[contenteditable='true']\");\n\nexport function Reader({\n book: bookArg,\n chapter: chapterArg,\n prev: prevArg,\n next: nextArg,\n toc: tocProp,\n contentHash,\n html,\n children,\n Link: LinkProp,\n hrefFor,\n header,\n backHref,\n className,\n}: ReaderProps) {\n const { store, options } = useReader();\n const library = useLibrary();\n const book = useBook(bookArg);\n const chapterIndex = book.chapters.findIndex((c) => c.id === (typeof chapterArg === \"string\" ? chapterArg : chapterArg.id));\n const chapter: ChapterMeta | undefined = typeof chapterArg === \"string\" ? book.chapters[chapterIndex] : chapterArg;\n if (!chapter) {\n throw new Error(`zreader: book \"${book.id}\" has no chapter \"${String(chapterArg)}\".`);\n }\n const prev = prevArg !== undefined ? prevArg : (book.chapters[chapterIndex - 1] ?? null);\n const next = nextArg !== undefined ? nextArg : chapterIndex >= 0 ? (book.chapters[chapterIndex + 1] ?? null) : null;\n const Link = LinkProp ?? library.Link;\n const slot = header !== undefined ? header : library.headerSlot;\n const chapterCtx = useMemo(() => ({ book, chapter }), [book, chapter]);\n const [settings, updateSettings] = useSettings();\n const isDesktop = useIsDesktop();\n const bookmarks = useBookmarks(book.id);\n const progress = useProgress(book.id);\n\n const build = hrefFor ?? library.href;\n const href = useCallback((chapterId?: string, hash?: string) => build(book.id, chapterId, hash), [build, book.id]);\n\n // Callback-ref state: the article remounts when the layout switches (mobile ↔ desktop).\n const [rootEl, setRootEl] = useState<HTMLElement | null>(null);\n const [scrollEl, setScrollEl] = useState<HTMLDivElement | null>(null);\n const [contentsOpen, setContentsOpen] = useState(false);\n const [contentsTab, setContentsTab] = useState<ContentsTab>(\"contents\");\n const [settingsOpen, setSettingsOpen] = useState(false);\n const [padOpen, setPadOpen] = useState(false);\n const [padKind, setPadKind] = useState<PadScopeKind>(options.scratchpad.scopes[0] ?? \"chapter\");\n const [padSnap, setPadSnap] = useState<number | string | null>(0.55);\n const [openHighlightId, setOpenHighlightId] = useState<string | null>(null);\n const [focusNote, setFocusNote] = useState(false);\n\n const engine = useChapterEngine({\n bookId: book.id,\n chapterId: chapter.id,\n contentHash,\n root: rootEl,\n scroller: isDesktop ? scrollEl : null,\n topOffset: isDesktop ? 16 : 64,\n onHighlightTap: (id) => {\n setFocusNote(false);\n setOpenHighlightId(id);\n },\n });\n\n // Prefer the build-time TOC; otherwise use the headings found in the rendered content.\n const toc = tocProp && tocProp.length > 0 ? tocProp : engine.domToc;\n\n const headerHidden = useAutoHide(!isDesktop && !engine.selection);\n const chapterBookmarks = useMemo(() => bookmarks.filter((b) => b.chapterId === chapter.id), [bookmarks, chapter.id]);\n const completed = progress.chapters[chapter.id]?.completed ?? false;\n const openHighlight = engine.highlights.find((h) => h.id === openHighlightId) ?? null;\n const orphanedIds = useMemo(() => new Set(engine.orphaned.map((h) => h.id)), [engine.orphaned]);\n const padEnabled = options.scratchpad.enabled;\n\n // ------------------------------------------------------------ one-offs\n useEffect(() => {\n if (!supportsHighlightApi()) {\n toast.info(\"Highlights can't be drawn in this browser\", { description: \"They are still saved and listed under Contents → Highlights.\" });\n }\n }, []);\n\n useEffect(() => {\n if (!engine.resume) return;\n toast(`Resumed at ${Math.round(engine.resume.percent * 100)}%`, {\n id: `zr-resume-${chapter.id}`,\n action: { label: \"Start from top\", onClick: () => engine.scrollToTop() },\n });\n engine.dismissResume();\n }, [engine.resume, engine, chapter.id]);\n\n // ------------------------------------------------------------- actions\n const openPad = useCallback(() => {\n setPadOpen(true);\n setPadSnap(0.55);\n }, []);\n\n const quoteToPad = useCallback(\n (markdown: string) => {\n store.appendToPad(scopeFor(padKind, book.id, chapter.id), markdown);\n openPad();\n toast.success(\"Added to scratchpad\");\n },\n [store, padKind, book.id, chapter.id, openPad],\n );\n\n const quoteSpan = (span: TextSpan, text: string) => {\n const h = engine.createHighlight(span);\n engine.clearSelection();\n quoteToPad(h ? highlightToMarkdown(h, href(chapter.id, `hl-${h.id}`)) : quoteToMarkdown(text));\n };\n\n const copy = async (text: string) => {\n toast((await copyText(text)) ? \"Copied\" : \"Could not copy\");\n };\n\n const toggleBookmark = () => {\n if (chapterBookmarks.length) {\n const removed = chapterBookmarks;\n removed.forEach((b) => store.removeBookmark(book.id, b.id));\n toast(\"Bookmark removed\", {\n action: {\n label: \"Undo\",\n onClick: () =>\n removed.forEach((b) =>\n store.addBookmark({ bookId: b.bookId, chapterId: b.chapterId, blockId: b.blockId, label: b.label, excerpt: b.excerpt }),\n ),\n },\n });\n return;\n }\n const block = engine.getTopBlock();\n store.addBookmark({\n bookId: book.id,\n chapterId: chapter.id,\n ...(block ? { blockId: block.getAttribute(BLOCK_ATTR) ?? undefined, excerpt: block.textContent?.trim().slice(0, 120) } : {}),\n label: chapter.title,\n });\n toast.success(\"Bookmarked\", { description: \"Find it under Contents → Bookmarks.\" });\n };\n\n // Keyboard: with a selection, `h` highlights and `n` adds a note.\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (!engine.selection || e.metaKey || e.ctrlKey || e.altKey || isEditable(document.activeElement)) return;\n if (e.key === \"h\") {\n e.preventDefault();\n engine.createHighlight(engine.selection.span);\n engine.clearSelection();\n } else if (e.key === \"n\") {\n e.preventDefault();\n const h = engine.createHighlight(engine.selection.span);\n engine.clearSelection();\n if (h) {\n setFocusNote(true);\n setOpenHighlightId(h.id);\n }\n }\n };\n document.addEventListener(\"keydown\", onKey);\n return () => document.removeEventListener(\"keydown\", onKey);\n }, [engine]);\n\n // --------------------------------------------------------------- pieces\n const topBar = (\n <header\n className={cn(\n \"sticky top-0 z-30 border-b bg-background/85 backdrop-blur-md transition-transform duration-200 supports-[backdrop-filter]:bg-background/70\",\n headerHidden && \"-translate-y-full\",\n )}\n >\n <div className=\"flex h-14 items-center gap-1 px-2 pt-[env(safe-area-inset-top)] sm:px-3\">\n <Tooltip>\n <TooltipTrigger asChild>\n <Button asChild variant=\"ghost\" size=\"icon\" aria-label=\"Back to book\">\n <Link href={backHref ?? href()}>\n <ChevronLeftIcon />\n </Link>\n </Button>\n </TooltipTrigger>\n <TooltipContent>Back to book</TooltipContent>\n </Tooltip>\n <IconAction label=\"Contents, highlights and bookmarks\" onClick={() => setContentsOpen(true)}>\n <ListIcon />\n </IconAction>\n <div className=\"flex min-w-0 flex-1 items-center gap-2 px-1\">\n <HeaderContent slot={slot} book={book} chapter={chapter} />\n </div>\n <IconToggle label={chapterBookmarks.length ? \"Remove bookmark\" : \"Bookmark this place\"} pressed={chapterBookmarks.length > 0} onPressedChange={toggleBookmark} className=\"data-[state=on]:[&_svg]:fill-current\">\n <BookmarkIcon />\n </IconToggle>\n <IconToggle label=\"Highlight mode: tap a sentence\" pressed={settings.highlightMode} onPressedChange={(highlightMode) => updateSettings({ highlightMode })}>\n <HighlighterIcon />\n </IconToggle>\n <IconAction label=\"Reading settings\" onClick={() => setSettingsOpen(true)}>\n <TypeIcon />\n </IconAction>\n {padEnabled && (\n <IconToggle label=\"Scratchpad\" pressed={padOpen} onPressedChange={(open) => (open ? openPad() : setPadOpen(false))}>\n <NotebookPenIcon />\n </IconToggle>\n )}\n </div>\n <ReadingProgress store={engine.percentStore} className=\"absolute inset-x-0 bottom-0\" />\n </header>\n );\n\n const body = (\n <div className={cn(\"mx-auto w-full px-5 pt-8 pb-[calc(7rem+env(safe-area-inset-bottom))] sm:px-8 lg:pt-12\", MEASURE_CLASS[settings.measure])}>\n <p className=\"flex flex-wrap items-center gap-x-2 text-sm text-muted-foreground\">\n {chapter.part && <span>{chapter.part}</span>}\n {chapter.part && <span aria-hidden=\"true\">·</span>}\n <span>{chapter.label ?? `Chapter ${chapterIndex + 1} of ${book.chapters.length}`}</span>\n </p>\n <h1 className={cn(\"mt-1 text-3xl font-semibold tracking-tight text-balance sm:text-4xl\", FONT_CLASS[settings.fontFamily])}>{chapter.title}</h1>\n <article\n ref={setRootEl}\n className={cn(\"mt-8\", PROSE_CLASS, TEXT_SIZE_CLASS[settings.textSize], LEADING_CLASS[settings.leading], FONT_CLASS[settings.fontFamily], settings.highlightMode && \"cursor-pointer\")}\n aria-label={chapter.title}\n >\n {html !== undefined ? <div dangerouslySetInnerHTML={{ __html: html }} /> : children}\n </article>\n\n <footer className=\"mt-16 flex flex-col gap-4 border-t pt-8\">\n {!completed && (\n <Button type=\"button\" variant=\"outline\" className=\"self-center\" onClick={() => store.markChapterComplete(book.id, chapter.id)}>\n <CheckIcon /> Mark chapter as read\n </Button>\n )}\n <nav aria-label=\"Chapters\" className=\"grid grid-cols-2 gap-3\">\n {prev ? (\n <Button asChild variant=\"ghost\" className=\"h-auto flex-col items-start gap-1 py-3 text-left whitespace-normal\">\n <Link href={href(prev.id)}>\n <span className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n <ArrowLeftIcon /> Previous\n </span>\n <span className=\"line-clamp-2 font-medium\">{prev.title}</span>\n </Link>\n </Button>\n ) : (\n <span />\n )}\n {next ? (\n <Button asChild variant=\"secondary\" className=\"col-start-2 h-auto flex-col items-end gap-1 py-3 text-right whitespace-normal\">\n <Link href={href(next.id)}>\n <span className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n Next <ArrowRightIcon />\n </span>\n <span className=\"line-clamp-2 font-medium\">{next.title}</span>\n </Link>\n </Button>\n ) : null}\n </nav>\n </footer>\n </div>\n );\n\n const pad = (onClose: () => void) => (\n <ScratchpadPanel\n bookId={book.id}\n chapterId={chapter.id}\n kind={padKind}\n onKindChange={setPadKind}\n onClose={onClose}\n onEditorFocus={() => setPadSnap(0.95)}\n title={book.id}\n />\n );\n\n const padPanelRef = usePanelRef();\n // Persist the desktop split through the reader's own (SSR-safe) storage adapter.\n const layoutStorage = useMemo(\n () => ({ getItem: (k: string) => store.adapter.get(k), setItem: (k: string, v: string) => store.adapter.set(k, v) }),\n [store],\n );\n const layout = useDefaultLayout({ id: `${options.storagePrefix}:v1:layout`, panelIds: [\"content\", \"pad\"], storage: layoutStorage });\n useEffect(() => {\n const p = padPanelRef.current;\n if (!isDesktop || !p) return;\n if (padOpen && p.isCollapsed()) p.expand();\n if (!padOpen && !p.isCollapsed()) p.collapse();\n }, [padOpen, isDesktop, padPanelRef]);\n\n return (\n <ReaderChapterContext.Provider value={chapterCtx}>\n <div data-zr-reader=\"\" className={cn(\"min-h-svh bg-background text-foreground\", isDesktop && \"flex h-svh flex-col overflow-hidden\", className)}>\n {topBar}\n\n {isDesktop ? (\n <ResizablePanelGroup orientation=\"horizontal\" className=\"min-h-0 flex-1\" defaultLayout={layout.defaultLayout} onLayoutChanged={layout.onLayoutChanged}>\n <ResizablePanel id=\"content\" minSize=\"40%\">\n <div ref={setScrollEl} className=\"h-full overflow-y-auto overscroll-contain\">\n {body}\n </div>\n </ResizablePanel>\n {padEnabled && (\n <>\n <ResizableHandle withHandle className={cn(!padOpen && \"hidden\")} />\n <ResizablePanel\n id=\"pad\"\n panelRef={padPanelRef}\n collapsible\n collapsedSize=\"0%\"\n defaultSize={padOpen ? \"32%\" : \"0%\"}\n minSize=\"22%\"\n maxSize=\"55%\"\n onResize={(size) => setPadOpen(size.asPercentage > 0)}\n className=\"bg-background\"\n >\n {padOpen && pad(() => setPadOpen(false))}\n </ResizablePanel>\n </>\n )}\n </ResizablePanelGroup>\n ) : (\n <main>{body}</main>\n )}\n\n {!isDesktop && padEnabled && (\n <Drawer open={padOpen} onOpenChange={setPadOpen} snapPoints={[0.55, 0.95]} activeSnapPoint={padSnap} setActiveSnapPoint={setPadSnap} repositionInputs={false}>\n <DrawerContent className=\"h-[95svh] max-h-[95svh]\">\n <DrawerTitle className=\"sr-only\">Scratchpad</DrawerTitle>\n <DrawerDescription className=\"sr-only\">Notes and checklists saved in this browser.</DrawerDescription>\n <div className=\"flex min-h-0 flex-1 flex-col pb-[env(safe-area-inset-bottom)]\">{pad(() => setPadOpen(false))}</div>\n </DrawerContent>\n </Drawer>\n )}\n\n <SelectionToolbar\n selection={openHighlightId || settingsOpen || contentsOpen ? null : engine.selection}\n colors={options.highlightColors}\n onHighlight={(span, color) => {\n engine.createHighlight(span, color);\n engine.clearSelection();\n }}\n onSentence={(span) => engine.expandSelectionToSentences(span)}\n onNote={(span) => {\n const h = engine.createHighlight(span);\n engine.clearSelection();\n if (h) {\n setFocusNote(true);\n setOpenHighlightId(h.id);\n }\n }}\n onQuote={padEnabled ? quoteSpan : undefined}\n onCopy={(text) => {\n void copy(text);\n engine.clearSelection();\n }}\n onDismiss={engine.clearSelection}\n />\n\n <HighlightPanel\n highlight={openHighlight}\n colors={options.highlightColors}\n focusNote={focusNote}\n onColor={(color) => openHighlight && store.updateHighlight(book.id, openHighlight.id, { color })}\n onNote={(note) => openHighlight && store.updateHighlight(book.id, openHighlight.id, { note })}\n onDelete={() => {\n if (!openHighlight) return;\n const removed = openHighlight;\n store.removeHighlight(book.id, removed.id);\n setOpenHighlightId(null);\n engine.setActiveId(null);\n toast(\"Highlight deleted\", {\n action: {\n label: \"Undo\",\n onClick: () => store.addHighlight({ bookId: removed.bookId, chapterId: removed.chapterId, anchor: removed.anchor, color: removed.color, note: removed.note }),\n },\n });\n }}\n onQuote={padEnabled && openHighlight ? () => quoteToPad(highlightToMarkdown(openHighlight, href(chapter.id, `hl-${openHighlight.id}`))) : undefined}\n onCopy={openHighlight ? () => void copy(openHighlight.anchor.exact) : undefined}\n onClose={() => {\n setOpenHighlightId(null);\n setFocusNote(false);\n engine.setActiveId(null);\n }}\n />\n\n <ContentsSheet\n open={contentsOpen}\n onOpenChange={setContentsOpen}\n tab={contentsTab}\n onTabChange={setContentsTab}\n book={book}\n chapterId={chapter.id}\n toc={toc}\n hrefFor={(c, h) => href(c, h)}\n Link={Link}\n orphanedIds={orphanedIds}\n onJumpHighlight={(id) => engine.scrollToHighlight(id)}\n onJumpBlock={(id) => engine.scrollToBlock(id)}\n onJumpHeading={(id) => engine.scrollToHeading(id)}\n />\n\n <SettingsPanel open={settingsOpen} onOpenChange={setSettingsOpen} book={book} />\n </div>\n </ReaderChapterContext.Provider>\n );\n}\n","import * as React from \"react\"\nimport { cn } from \"cn\"\n\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card\"\n className={cn(\n \"flex flex-col gap-6 rounded-xl border bg-card py-6 text-card-foreground shadow-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center px-6 [.border-t]:pt-6\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","import { cn } from \"cn\";\nimport { BookOpenIcon, CheckCircle2Icon, ChevronLeftIcon, CircleIcon } from \"lucide-react\";\nimport type { BookMeta } from \"zreader\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Progress } from \"@/components/ui/progress\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { useBook, useBookmarks, useHighlights, useHydrated, useLibrary, useProgress, type HrefFor } from \"../context\";\nimport type { LinkComponent } from \"../link\";\nimport { chapterMarker, groupByPart } from \"../parts\";\n\nexport interface BookNavProps {\n /** A book id from the provider's catalogue, or the book's metadata. */\n book: BookMeta | string;\n /** Overrides the provider's link component. */\n Link?: LinkComponent;\n /** Overrides the provider's URL builder. */\n hrefFor?: HrefFor;\n className?: string;\n}\n\n/** Resolve the book plus link/URL helpers: explicit props win over the provider. */\nfunction useNav(bookArg: BookMeta | string, LinkProp?: LinkComponent, hrefFor?: HrefFor) {\n const library = useLibrary();\n const book = useBook(bookArg);\n const build = hrefFor ?? library.href;\n return {\n book,\n Link: LinkProp ?? library.Link,\n href: (chapterId?: string, hash?: string) => build(book.id, chapterId, hash),\n };\n}\n\n/** \"Start reading\" / \"Continue: Chapter 3 · 42%\" card for a book page. */\nexport function ContinueReading({ book: bookArg, Link: LinkProp, hrefFor, className }: BookNavProps) {\n const { book, Link, href } = useNav(bookArg, LinkProp, hrefFor);\n const hydrated = useHydrated();\n const progress = useProgress(book.id);\n const highlights = useHighlights(book.id);\n const bookmarks = useBookmarks(book.id);\n\n const first = book.chapters[0];\n const lastId = progress.last?.chapterId;\n const last = book.chapters.find((c) => c.id === lastId);\n const done = book.chapters.filter((c) => progress.chapters[c.id]?.completed).length;\n const overall = book.chapters.length ? done / book.chapters.length : 0;\n const lastPct = last ? Math.round((progress.chapters[last.id]?.percent ?? 0) * 100) : 0;\n\n if (!first) return null;\n\n return (\n <Card className={cn(\"gap-4\", className)}>\n <CardHeader>\n <CardTitle>{last ? \"Continue reading\" : \"Start reading\"}</CardTitle>\n <CardDescription>\n {!hydrated ? <Skeleton className=\"h-4 w-40\" /> : last ? `${last.title} · ${lastPct}%` : `${book.chapters.length} chapters`}\n </CardDescription>\n </CardHeader>\n {hydrated && (done > 0 || highlights.length > 0 || bookmarks.length > 0) && (\n <CardContent className=\"flex flex-col gap-3\">\n <Progress value={Math.round(overall * 100)} aria-label=\"Book progress\" />\n <div className=\"flex flex-wrap gap-2 text-sm text-muted-foreground\">\n <Badge variant=\"secondary\">\n {done}/{book.chapters.length} chapters read\n </Badge>\n {highlights.length > 0 && <Badge variant=\"secondary\">{highlights.length} highlights</Badge>}\n {bookmarks.length > 0 && <Badge variant=\"secondary\">{bookmarks.length} bookmarks</Badge>}\n </div>\n </CardContent>\n )}\n <CardFooter>\n <Button asChild className=\"w-full sm:w-auto\">\n <Link href={last ? href(last.id, progress.last?.blockId ? `b-${progress.last.blockId}` : undefined) : href(first.id)}>\n <BookOpenIcon /> {last ? \"Continue\" : \"Start\"}\n </Link>\n </Button>\n </CardFooter>\n </Card>\n );\n}\n\n/** Chapter list with read state, grouped by `part` when chapters declare one. */\nexport function ChapterList({ book: bookArg, Link: LinkProp, hrefFor, className }: BookNavProps) {\n const { book, Link, href } = useNav(bookArg, LinkProp, hrefFor);\n const hydrated = useHydrated();\n const progress = useProgress(book.id);\n return (\n <div className={cn(\"flex flex-col gap-6\", className)}>\n {groupByPart(book.chapters).map((group) => (\n <section key={group.part ?? \"_\"} className=\"flex flex-col gap-2\">\n {group.part && <h3 className=\"text-sm font-medium text-muted-foreground\">{group.part}</h3>}\n <ol className=\"flex flex-col divide-y overflow-hidden rounded-xl border\">\n {group.items.map(({ chapter: c, index: i }) => {\n const pr = hydrated ? progress.chapters[c.id] : undefined;\n return (\n <li key={c.id}>\n <Button asChild variant=\"ghost\" className=\"h-auto w-full justify-start gap-4 rounded-none px-4 py-3 text-left whitespace-normal\">\n <Link href={href(c.id)}>\n <span className=\"w-6 shrink-0 text-sm text-muted-foreground tabular-nums\">{chapterMarker(c, i)}</span>\n <span className=\"flex flex-1 flex-col gap-0.5\">\n <span className=\"font-medium\">{c.title}</span>\n {c.description && <span className=\"text-sm font-normal text-muted-foreground\">{c.description}</span>}\n </span>\n {pr?.completed ? (\n <CheckCircle2Icon className=\"text-primary\" aria-label=\"Read\" />\n ) : pr ? (\n <span className=\"text-xs text-muted-foreground tabular-nums\">{Math.round(pr.percent * 100)}%</span>\n ) : (\n <CircleIcon className=\"text-muted-foreground/40\" aria-hidden />\n )}\n </Link>\n </Button>\n </li>\n );\n })}\n </ol>\n </section>\n ))}\n </div>\n );\n}\n\nexport interface BookShelfProps {\n /** Defaults to the provider's catalogue (<ReaderProvider books>). */\n books?: BookMeta[];\n Link?: LinkComponent;\n hrefFor?: HrefFor;\n title?: string;\n description?: string;\n /**\n * Render only the grid, without the full-page shell (background, padding,\n * title), for embedding inside a host site's own page layout.\n */\n embedded?: boolean;\n className?: string;\n}\n\n/** Grid of book cards linking to each book's home. */\nexport function BookShelf({ books: booksProp, Link: LinkProp, hrefFor, title = \"Books\", description, embedded, className }: BookShelfProps) {\n const library = useLibrary();\n const books = booksProp ?? library.books;\n const Link = LinkProp ?? library.Link;\n const build = hrefFor ?? library.href;\n const hydrated = useHydrated();\n const grid =\n books.length === 0 ? (\n <p className=\"text-muted-foreground\">No books published yet.</p>\n ) : (\n <ul className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {books.map((book) => (\n <li key={book.id}>\n <BookCard book={book} Link={Link} href={build(book.id)} hydrated={hydrated} />\n </li>\n ))}\n </ul>\n );\n\n if (embedded) {\n return (\n <div data-zr-reader=\"\" className={cn(\"text-foreground\", className)}>\n {grid}\n </div>\n );\n }\n\n return (\n <div data-zr-reader=\"\" className={cn(\"min-h-svh bg-background text-foreground\", className)}>\n <div className=\"mx-auto flex max-w-5xl flex-col gap-8 px-5 py-10 sm:px-8 sm:py-16\">\n <header className=\"flex flex-col gap-2\">\n <h1 className=\"font-serif text-3xl font-semibold tracking-tight sm:text-4xl\">{title}</h1>\n {description && <p className=\"max-w-prose text-muted-foreground\">{description}</p>}\n </header>\n {grid}\n </div>\n </div>\n );\n}\n\nfunction BookCard({ book, Link, href, hydrated }: { book: BookMeta; Link: LinkComponent; href: string; hydrated: boolean }) {\n const progress = useProgress(book.id);\n const done = hydrated ? book.chapters.filter((c) => progress.chapters[c.id]?.completed).length : 0;\n return (\n <Card className=\"relative h-full gap-4 transition-shadow hover:shadow-md\">\n <CardHeader>\n <CardTitle className=\"font-serif text-xl\">\n <Link href={href} className=\"after:absolute after:inset-0 focus-visible:outline-none\">\n {book.title}\n </Link>\n </CardTitle>\n {book.authors.length > 0 && <CardDescription>{book.authors.join(\", \")}</CardDescription>}\n </CardHeader>\n {book.description && (\n <CardContent>\n <p className=\"line-clamp-3 text-sm text-muted-foreground\">{book.description}</p>\n </CardContent>\n )}\n <CardFooter className=\"mt-auto flex items-center justify-between gap-2 text-sm text-muted-foreground\">\n <span>{book.chapters.length} chapters</span>\n {done > 0 && <Badge variant=\"secondary\">{done === book.chapters.length ? \"Finished\" : `${done} read`}</Badge>}\n </CardFooter>\n </Card>\n );\n}\n\nexport interface BookHomeProps extends BookNavProps {\n /** Back link (e.g. to the shelf). */\n backHref?: string;\n backLabel?: string;\n /**\n * Render only the continue card and chapter list, without the full-page shell\n * or title block, for embedding inside a host site's own page layout.\n */\n embedded?: boolean;\n}\n\n/** A book's contents page: title, authors, continue card and chapter list. */\nexport function BookHome({ book: bookArg, Link: LinkProp, hrefFor, backHref, backLabel = \"All books\", embedded, className }: BookHomeProps) {\n const { book, Link } = useNav(bookArg, LinkProp, hrefFor);\n if (embedded) {\n return (\n <div data-zr-reader=\"\" className={cn(\"flex flex-col gap-8 text-foreground\", className)}>\n <ContinueReading book={book} Link={Link} hrefFor={hrefFor} />\n <section className=\"flex flex-col gap-3\" aria-labelledby=\"zr-chapters\">\n <h2 id=\"zr-chapters\" className=\"text-sm font-medium tracking-wide text-muted-foreground uppercase\">\n Chapters\n </h2>\n <ChapterList book={book} Link={Link} hrefFor={hrefFor} />\n </section>\n </div>\n );\n }\n return (\n <div data-zr-reader=\"\" className={cn(\"min-h-svh bg-background text-foreground\", className)}>\n <div className=\"mx-auto flex max-w-3xl flex-col gap-8 px-5 py-8 sm:px-8 sm:py-14\">\n {backHref && (\n <Button asChild variant=\"ghost\" size=\"sm\" className=\"self-start\">\n <Link href={backHref}>\n <ChevronLeftIcon /> {backLabel}\n </Link>\n </Button>\n )}\n <header className=\"flex flex-col gap-3\">\n <h1 className=\"font-serif text-3xl font-semibold tracking-tight text-balance sm:text-5xl\">{book.title}</h1>\n {book.subtitle && <p className=\"font-serif text-xl text-balance text-foreground/80 sm:text-2xl\">{book.subtitle}</p>}\n {book.authors.length > 0 && <p className=\"text-muted-foreground\">{book.authors.join(\", \")}</p>}\n {book.description && <p className=\"max-w-prose text-lg text-foreground/80\">{book.description}</p>}\n </header>\n <ContinueReading book={book} Link={Link} hrefFor={hrefFor} />\n <section className=\"flex flex-col gap-3\" aria-labelledby=\"zr-chapters\">\n <h2 id=\"zr-chapters\" className=\"text-sm font-medium tracking-wide text-muted-foreground uppercase\">\n Chapters\n </h2>\n <ChapterList book={book} Link={Link} hrefFor={hrefFor} />\n </section>\n </div>\n </div>\n );\n}\n\n/** Alias of <BookHome>: a book's contents page. */\nexport const BookContents = BookHome;\nexport type BookContentsProps = BookHomeProps;\n","import type { ReactNode } from \"react\";\nimport { LightbulbIcon } from \"lucide-react\";\nimport { Alert, AlertDescription, AlertTitle } from \"@/components/ui/alert\";\n\nexport interface CalloutProps {\n title?: string;\n children?: ReactNode;\n}\n\n/** `<Callout title=\"…\">…</Callout>` for MDX chapters. Ignored by highlighting. */\nexport function Callout({ title, children }: CalloutProps) {\n return (\n <Alert className=\"not-prose my-6\" data-zr-ignore=\"\">\n <LightbulbIcon />\n {title && <AlertTitle>{title}</AlertTitle>}\n <AlertDescription>{children}</AlertDescription>\n </Alert>\n );\n}\n"]}
1
+ {"version":3,"sources":["../../src/react/components/ui/tooltip.tsx","../../src/react/link.tsx","../../src/react/components/ui/sonner.tsx","../../src/react/context.tsx","../../src/react/components/ui/button.tsx","../../src/react/components/ui/drawer.tsx","../../src/react/components/ui/progress.tsx","../../src/react/components/ui/resizable.tsx","../../src/react/components/ui/toggle.tsx","../../src/react/components/ui/badge.tsx","../../src/react/components/ui/input.tsx","../../src/react/components/ui/scroll-area.tsx","../../src/react/components/ui/sheet.tsx","../../src/react/components/ui/tabs.tsx","../../src/react/parts.ts","../../src/react/tokens.ts","../../src/react/components/contents-sheet.tsx","../../src/react/components/ui/label.tsx","../../src/react/components/ui/textarea.tsx","../../src/react/components/ui/toggle-group.tsx","../../src/react/components/ui/dialog.tsx","../../src/react/components/responsive-panel.tsx","../../src/react/components/highlight-panel.tsx","../../src/react/components/ui/dropdown-menu.tsx","../../src/react/components/ui/skeleton.tsx","../../src/react/download.ts","../../src/react/components/scratchpad-panel.tsx","../../src/react/components/ui/popover.tsx","../../src/react/components/ui/separator.tsx","../../src/react/components/selection-toolbar.tsx","../../src/react/components/ui/alert.tsx","../../src/react/components/ui/switch.tsx","../../src/react/components/settings-panel.tsx","../../src/react/useChapterEngine.ts","../../src/react/Reader.tsx","../../src/react/components/ui/card.tsx","../../src/react/components/book-nav.tsx","../../src/react/components/mdx.tsx"],"names":["TooltipPrimitive","DefaultLink","jsx","Sonner","jsxs","cn","DrawerPrimitive","ProgressPrimitive","cva","TogglePrimitive","Slot","ScrollAreaPrimitive","SheetPrimitive","TabsPrimitive","useState","useMemo","LabelPrimitive","ToggleGroupPrimitive","DialogPrimitive","XIcon","useEffect","Trash2Icon","DropdownMenuPrimitive","CopyIcon","PopoverPrimitive","Separator","SeparatorPrimitive","useRef","QuoteIcon","SwitchPrimitive","useTheme","toast","DownloadIcon","useSyncExternalStore","opts","createContext","useContext","useCallback","BLOCK_ATTR","CheckIcon","CheckCircle2Icon","CircleIcon","ChevronLeftIcon"],"mappings":"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","file":"index.js","sourcesContent":["import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\"\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n}\n\nfunction TooltipTrigger({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md bg-foreground px-3 py-1.5 text-xs text-balance text-background fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import { forwardRef, type AnchorHTMLAttributes, type ComponentType, type ReactNode } from \"react\";\n\n/** Any router link with an `href` (e.g. next/link). */\nexport type LinkComponent = ComponentType<AnchorHTMLAttributes<HTMLAnchorElement> & { href: string; children?: ReactNode }>;\n\nexport const DefaultLink = forwardRef<HTMLAnchorElement, AnchorHTMLAttributes<HTMLAnchorElement> & { href: string }>(\n function DefaultLink(props, ref) {\n return <a ref={ref} {...props} />;\n },\n);\n\n/** `${basePath}/${bookId}/${chapterId}#${hash}` */\nexport function defaultHref(basePath: string, bookId: string, chapterId?: string, hash?: string): string {\n const base = basePath.replace(/\\/+$/, \"\");\n const path = chapterId ? `${base}/${encodeURIComponent(bookId)}/${encodeURIComponent(chapterId)}` : `${base}/${encodeURIComponent(bookId)}`;\n return hash ? `${path}#${encodeURIComponent(hash)}` : path;\n}\n","import {\n CircleCheckIcon,\n InfoIcon,\n Loader2Icon,\n OctagonXIcon,\n TriangleAlertIcon,\n} from \"lucide-react\"\nimport { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, type ToasterProps } from \"sonner\"\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = \"system\" } = useTheme()\n\n return (\n <Sonner\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n icons={{\n success: <CircleCheckIcon className=\"size-4\" />,\n info: <InfoIcon className=\"size-4\" />,\n warning: <TriangleAlertIcon className=\"size-4\" />,\n error: <OctagonXIcon className=\"size-4\" />,\n loading: <Loader2Icon className=\"size-4 animate-spin\" />,\n }}\n style={\n {\n \"--normal-bg\": \"var(--popover)\",\n \"--normal-text\": \"var(--popover-foreground)\",\n \"--normal-border\": \"var(--border)\",\n \"--border-radius\": \"var(--radius)\",\n } as React.CSSProperties\n }\n {...props}\n />\n )\n}\n\nexport { Toaster }\n","import {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n useSyncExternalStore,\n type ReactNode,\n} from \"react\";\nimport { ThemeProvider } from \"next-themes\";\nimport {\n DEFAULT_CLIENT_OPTIONS,\n createLocalStorageAdapter,\n createReaderStore,\n type Cell,\n type ReaderStore,\n type StorageAdapter,\n type Bookmark,\n type BookProgress,\n type Highlight,\n type Pad,\n type PadScope,\n type ReaderClientOptions,\n type ReaderSettings,\n} from \"zreader\";\nimport { TooltipProvider } from \"@/components/ui/tooltip\";\nimport type { BookMeta } from \"zreader\";\nimport { DefaultLink, defaultHref, type LinkComponent } from \"./link\";\nimport { Toaster } from \"@/components/ui/sonner\";\n\ntype DeepPartial<T> = T extends unknown[] ? T : T extends object ? { [K in keyof T]?: DeepPartial<T[K]> } : T;\n\nfunction isPlainObject(x: unknown): x is Record<string, unknown> {\n if (typeof x !== \"object\" || x === null || Array.isArray(x)) return false;\n const proto = Object.getPrototypeOf(x);\n return proto === Object.prototype || proto === null;\n}\n\n/** Deep merge for client options (arrays replace). Kept here so zod stays out of the client bundle. */\nexport function mergeOptions<T>(base: T, ...overrides: unknown[]): T {\n const merge = (a: unknown, b: unknown): unknown => {\n if (b === undefined || b === null) return a;\n if (isPlainObject(a) && isPlainObject(b)) {\n const out: Record<string, unknown> = { ...a };\n for (const [k, v] of Object.entries(b)) out[k] = merge(a[k], v);\n return out;\n }\n return b;\n };\n return overrides.reduce<unknown>(merge, base) as T;\n}\n\n/** Builds a link into the reader. `chapterId` omitted = the book's contents page. */\nexport type HrefFor = (bookId: string, chapterId?: string, hash?: string) => string;\n\n/** What the reader shows in the middle of its top bar. */\nexport type HeaderSlot = ReactNode | ((ctx: { book: BookMeta; chapter: { id: string; title: string } }) => ReactNode);\n\nexport interface Library {\n /** Every book known to the provider (from `books`). */\n books: BookMeta[];\n getBook(id: string): BookMeta | undefined;\n Link: LinkComponent;\n href: HrefFor;\n headerSlot?: HeaderSlot;\n readerActions?: ReactNode;\n}\n\ninterface ReaderContextValue {\n store: ReaderStore;\n options: ReaderClientOptions;\n library: Library;\n}\n\nconst ReaderContext = createContext<ReaderContextValue | null>(null);\n\nexport interface ReaderProviderProps {\n /** Usually `config.reader` from reader.config.ts (see <ReaderRoot>). */\n options?: DeepPartial<ReaderClientOptions>;\n /** Inline overrides, merged on top of `options`. */\n overrides?: DeepPartial<ReaderClientOptions>;\n adapter?: StorageAdapter;\n /** Provide your own store (advanced; e.g. tests). */\n store?: ReaderStore;\n onStorageError?: (error: unknown) => void;\n /**\n * Manage the colour theme with next-themes (class on <html>, no-flash script).\n * Set to `false` if your app already renders a next-themes <ThemeProvider>.\n */\n manageTheme?: boolean;\n /** Render a sonner <Toaster>. Set to `false` if your app already has one. */\n toaster?: boolean;\n /**\n * The catalogue: lets <BookShelf />, <BookHome book=\"id\" /> and\n * <Reader book=\"id\" chapter=\"id\" /> work from ids alone.\n */\n books?: BookMeta[];\n /** Router link used by every component (e.g. next/link). Defaults to <a>. */\n Link?: LinkComponent;\n /** URL builder. Defaults to `${basePath}/${bookId}/${chapterId}#hash`. */\n hrefFor?: HrefFor;\n /**\n * Default content for the middle of the reader's top bar: text, your logo,\n * or any component. Omit to show the book and chapter titles.\n */\n headerSlot?: HeaderSlot;\n /**\n * Default buttons for the right of the reader's top bar (before the bookmark\n * toggle), e.g. `<CopyReference markdown />`. A <Reader>'s `actions` replaces\n * them; `actions={null}` hides them for that chapter.\n */\n readerActions?: ReactNode;\n children: ReactNode;\n}\n\nexport function ReaderProvider({\n options,\n overrides,\n adapter,\n store: external,\n onStorageError,\n manageTheme = true,\n toaster = true,\n books,\n Link,\n hrefFor,\n headerSlot,\n readerActions,\n children,\n}: ReaderProviderProps) {\n const key = JSON.stringify([options ?? null, overrides ?? null]);\n const resolved = useMemo(\n () => mergeOptions(DEFAULT_CLIENT_OPTIONS, options, overrides),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [key],\n );\n const [store] = useState<ReaderStore>(\n () =>\n external ??\n createReaderStore({ adapter: adapter ?? createLocalStorageAdapter(), options: resolved, onError: onStorageError }),\n );\n useEffect(() => store.connect(), [store]);\n const library = useMemo<Library>(() => {\n const list = books ?? [];\n const byId = new Map(list.map((b) => [b.id, b]));\n return {\n books: list,\n getBook: (id) => byId.get(id),\n Link: Link ?? DefaultLink,\n href: hrefFor ?? ((b, c, h) => defaultHref(resolved.basePath, b, c, h)),\n headerSlot,\n readerActions,\n };\n }, [books, Link, hrefFor, headerSlot, readerActions, resolved.basePath]);\n const value = useMemo(() => ({ store, options: resolved, library }), [store, resolved, library]);\n\n const tree = (\n <ReaderContext.Provider value={value}>\n <TooltipProvider delayDuration={400}>\n {children}\n {toaster && <Toaster position=\"top-center\" />}\n </TooltipProvider>\n </ReaderContext.Provider>\n );\n\n if (!manageTheme) return tree;\n return (\n <ThemeProvider\n attribute=\"class\"\n themes={resolved.themes.filter((t) => t !== \"system\")}\n enableSystem={resolved.themes.includes(\"system\")}\n defaultTheme={resolved.defaultTheme}\n storageKey={`${resolved.storagePrefix}:v1:theme`}\n disableTransitionOnChange\n >\n {tree}\n </ThemeProvider>\n );\n}\n\nexport function useReader(): ReaderContextValue {\n const ctx = useContext(ReaderContext);\n if (!ctx) throw new Error(\"zreader: wrap your tree in <ReaderProvider> (or <ReaderRoot>).\");\n return ctx;\n}\n\n/** The provider's catalogue, link component and URL builder. */\nexport function useLibrary(): Library {\n return useReader().library;\n}\n\n/**\n * Resolve a book given as an id (looked up in the provider's `books`) or as\n * metadata. Throws a descriptive error when an id is unknown.\n */\nexport function useBook(book: BookMeta | string): BookMeta {\n const { getBook, books } = useLibrary();\n if (typeof book !== \"string\") return book;\n const found = getBook(book);\n if (!found) {\n throw new Error(\n books.length\n ? `zreader: no book with id \"${book}\" in <ReaderProvider books>. Known: ${books.map((b) => b.id).join(\", \")}.`\n : `zreader: <… book=\"${book}\"> needs the catalogue. Pass books to <ReaderProvider books={…}> (or use <ReaderRoot>, which loads them).`,\n );\n }\n return found;\n}\n\nexport function useReaderStore(): ReaderStore {\n return useReader().store;\n}\n\nfunction useCell<T>(cell: Cell<T>, serverValue: T): T {\n return useSyncExternalStore(cell.subscribe, cell.get, () => serverValue);\n}\n\nconst noopSubscribe = () => () => {};\n/** `false` during SSR and hydration, `true` afterwards. */\nexport function useHydrated(): boolean {\n return useSyncExternalStore(\n noopSubscribe,\n () => true,\n () => false,\n );\n}\n\nexport function useSettings(): [ReaderSettings, ReaderStore[\"updateSettings\"]] {\n const store = useReaderStore();\n const settings = useCell(store.settings(), store.server.settings);\n return [settings, store.updateSettings];\n}\n\nexport function useHighlights(bookId: string, chapterId?: string): Highlight[] {\n const store = useReaderStore();\n const all = useCell(store.highlights(bookId), store.server.list as Highlight[]);\n return useMemo(() => (chapterId ? all.filter((h) => h.chapterId === chapterId) : all), [all, chapterId]);\n}\n\nexport function useBookmarks(bookId: string): Bookmark[] {\n const store = useReaderStore();\n return useCell(store.bookmarks(bookId), store.server.list as Bookmark[]);\n}\n\nexport function useProgress(bookId: string): BookProgress {\n const store = useReaderStore();\n return useCell(store.progress(bookId), store.server.progress(bookId));\n}\n\nexport function usePad(scope: PadScope): Pad {\n const store = useReaderStore();\n return useCell(store.pad(scope), store.server.pad);\n}\n\nexport function useMediaQuery(query: string, serverValue = false): boolean {\n return useSyncExternalStore(\n (cb) => {\n if (typeof window === \"undefined\" || !window.matchMedia) return () => {};\n const mql = window.matchMedia(query);\n mql.addEventListener(\"change\", cb);\n return () => mql.removeEventListener(\"change\", cb);\n },\n () => (typeof window !== \"undefined\" && window.matchMedia ? window.matchMedia(query).matches : serverValue),\n () => serverValue,\n );\n}\n\n/** Desktop layout breakpoint (Tailwind `lg`). Mobile-first: `false` on the server. */\nexport function useIsDesktop(): boolean {\n return useMediaQuery(\"(min-width: 1024px)\", false);\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"cn\"\nimport { Slot } from \"radix-ui\"\n\nconst buttonVariants = cva(\n \"inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n xs: \"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-xs\": \"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Drawer as DrawerPrimitive } from \"vaul\"\n\nfunction Drawer({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) {\n return <DrawerPrimitive.Root data-slot=\"drawer\" {...props} />\n}\n\nfunction DrawerTrigger({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {\n return <DrawerPrimitive.Trigger data-slot=\"drawer-trigger\" {...props} />\n}\n\nfunction DrawerPortal({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Portal>) {\n return <DrawerPrimitive.Portal data-slot=\"drawer-portal\" {...props} />\n}\n\nfunction DrawerClose({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Close>) {\n return <DrawerPrimitive.Close data-slot=\"drawer-close\" {...props} />\n}\n\nfunction DrawerOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {\n return (\n <DrawerPrimitive.Overlay\n data-slot=\"drawer-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Content>) {\n return (\n <DrawerPortal data-slot=\"drawer-portal\">\n <DrawerOverlay />\n <DrawerPrimitive.Content\n data-slot=\"drawer-content\"\n className={cn(\n \"group/drawer-content fixed z-50 flex h-auto flex-col bg-background\",\n \"data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b\",\n \"data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t\",\n \"data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:sm:max-w-sm\",\n \"data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:sm:max-w-sm\",\n className\n )}\n {...props}\n >\n <div className=\"mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full bg-muted group-data-[vaul-drawer-direction=bottom]/drawer-content:block\" />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n )\n}\n\nfunction DrawerHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-header\"\n className={cn(\n \"flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-left\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Title>) {\n return (\n <DrawerPrimitive.Title\n data-slot=\"drawer-title\"\n className={cn(\"font-semibold text-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Description>) {\n return (\n <DrawerPrimitive.Description\n data-slot=\"drawer-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n}\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Progress as ProgressPrimitive } from \"radix-ui\"\n\nfunction Progress({\n className,\n value,\n ...props\n}: React.ComponentProps<typeof ProgressPrimitive.Root>) {\n return (\n <ProgressPrimitive.Root\n data-slot=\"progress\"\n className={cn(\n \"relative h-2 w-full overflow-hidden rounded-full bg-primary/20\",\n className\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className=\"h-full w-full flex-1 bg-primary transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n )\n}\n\nexport { Progress }\n","\"use client\"\n\nimport { cn } from \"cn\"\nimport { GripVerticalIcon } from \"lucide-react\"\nimport * as ResizablePrimitive from \"react-resizable-panels\"\n\nfunction ResizablePanelGroup({\n className,\n ...props\n}: ResizablePrimitive.GroupProps) {\n return (\n <ResizablePrimitive.Group\n data-slot=\"resizable-panel-group\"\n className={cn(\n \"flex h-full w-full aria-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ResizablePanel({ ...props }: ResizablePrimitive.PanelProps) {\n return <ResizablePrimitive.Panel data-slot=\"resizable-panel\" {...props} />\n}\n\nfunction ResizableHandle({\n withHandle,\n className,\n ...props\n}: ResizablePrimitive.SeparatorProps & {\n withHandle?: boolean\n}) {\n return (\n <ResizablePrimitive.Separator\n data-slot=\"resizable-handle\"\n className={cn(\n \"relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:outline-hidden aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 [&[aria-orientation=horizontal]>div]:rotate-90\",\n className\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"z-10 flex h-4 w-3 items-center justify-center rounded-xs border bg-border\">\n <GripVerticalIcon className=\"size-2.5\" />\n </div>\n )}\n </ResizablePrimitive.Separator>\n )\n}\n\nexport { ResizableHandle, ResizablePanel, ResizablePanelGroup }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"cn\"\nimport { Toggle as TogglePrimitive } from \"radix-ui\"\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-muted hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline:\n \"border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground\",\n },\n size: {\n default: \"h-9 min-w-9 px-2\",\n sm: \"h-8 min-w-8 px-1.5\",\n lg: \"h-10 min-w-10 px-2.5\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Toggle({\n className,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> &\n VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Toggle, toggleVariants }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"cn\"\nimport { Slot } from \"radix-ui\"\n\nconst badgeVariants = cva(\n \"inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground [a&]:hover:bg-primary/90\",\n secondary:\n \"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90\",\n destructive:\n \"bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90\",\n outline:\n \"border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n ghost: \"[a&]:hover:bg-accent [a&]:hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 [a&]:hover:underline\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30\",\n \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n \"aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { ScrollArea as ScrollAreaPrimitive } from \"radix-ui\"\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"relative flex-1 rounded-full bg-border\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { XIcon } from \"lucide-react\"\nimport { Dialog as SheetPrimitive } from \"radix-ui\"\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n showCloseButton?: boolean\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"fixed z-50 flex flex-col gap-4 bg-background shadow-lg transition ease-in-out data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:animate-in data-[state=open]:duration-500\",\n side === \"right\" &&\n \"inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm\",\n side === \"left\" &&\n \"inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm\",\n side === \"top\" &&\n \"inset-x-0 top-0 h-auto border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n side === \"bottom\" &&\n \"inset-x-0 bottom-0 h-auto border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close className=\"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-secondary\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"font-semibold text-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"cn\"\nimport { Tabs as TabsPrimitive } from \"radix-ui\"\n\nfunction Tabs({\n className,\n orientation = \"horizontal\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n orientation={orientation}\n className={cn(\n \"group/tabs flex gap-2 data-[orientation=horizontal]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst tabsListVariants = cva(\n \"group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-[orientation=horizontal]/tabs:h-9 group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col data-[variant=line]:rounded-none\",\n {\n variants: {\n variant: {\n default: \"bg-muted\",\n line: \"gap-1 bg-transparent\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction TabsList({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List> &\n VariantProps<typeof tabsListVariants>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n data-variant={variant}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction TabsTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n \"relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none dark:text-muted-foreground dark:hover:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n \"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent\",\n \"data-[state=active]:bg-background data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 dark:data-[state=active]:text-foreground\",\n \"after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsContent({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\"flex-1 outline-none\", className)}\n {...props}\n />\n )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants }\n","import type { ChapterMeta } from \"zreader\";\n\nexport interface PartGroup {\n part: string | null;\n items: Array<{ chapter: ChapterMeta; index: number }>;\n}\n\n/** Consecutive chapters sharing a `part` are grouped; books without parts yield one group. */\nexport function groupByPart(chapters: ChapterMeta[]): PartGroup[] {\n const groups: PartGroup[] = [];\n chapters.forEach((chapter, index) => {\n const part = chapter.part ?? null;\n const last = groups[groups.length - 1];\n if (last && last.part === part) last.items.push({ chapter, index });\n else groups.push({ part, items: [{ chapter, index }] });\n });\n return groups;\n}\n\n/** Short list marker: frontmatter `number`, else the 1-based position. */\nexport function chapterMarker(chapter: ChapterMeta, index: number): string {\n return chapter.number ?? (chapter.part || chapter.label ? \"\" : String(index + 1));\n}\n","import type { FontFamily, HighlightColor, Leading, Measure, TextSize } from \"zreader\";\n\n/**\n * Settings → literal Tailwind classes. Keeping every class as a full string\n * literal lets Tailwind see them at build time; nothing is styled inline.\n */\nexport const TEXT_SIZE_CLASS: Record<TextSize, string> = {\n sm: \"prose-sm\",\n base: \"prose-base\",\n lg: \"prose-lg\",\n xl: \"prose-xl\",\n \"2xl\": \"prose-2xl\",\n};\n\nexport const LEADING_CLASS: Record<Leading, string> = {\n tight: \"prose-p:leading-snug prose-li:leading-snug\",\n normal: \"prose-p:leading-normal prose-li:leading-normal\",\n relaxed: \"prose-p:leading-relaxed prose-li:leading-relaxed\",\n};\n\nexport const MEASURE_CLASS: Record<Measure, string> = {\n narrow: \"max-w-[58ch]\",\n normal: \"max-w-[68ch]\",\n wide: \"max-w-[82ch]\",\n};\n\nexport const FONT_CLASS: Record<FontFamily, string> = {\n serif: \"font-serif\",\n sans: \"font-sans\",\n mono: \"font-mono\",\n};\n\nexport const SWATCH_CLASS: Record<HighlightColor, string> = {\n yellow: \"bg-yellow-300 dark:bg-yellow-400/70\",\n green: \"bg-green-300 dark:bg-green-400/60\",\n blue: \"bg-sky-300 dark:bg-sky-400/60\",\n pink: \"bg-pink-300 dark:bg-pink-400/60\",\n purple: \"bg-violet-300 dark:bg-violet-400/60\",\n orange: \"bg-orange-300 dark:bg-orange-400/60\",\n};\n\nexport const QUOTE_BORDER_CLASS: Record<HighlightColor, string> = {\n yellow: \"border-yellow-400\",\n green: \"border-green-400\",\n blue: \"border-sky-400\",\n pink: \"border-pink-400\",\n purple: \"border-violet-400\",\n orange: \"border-orange-400\",\n};\n\nexport function swatchClass(color: string): string {\n return SWATCH_CLASS[color as HighlightColor] ?? SWATCH_CLASS.yellow;\n}\n\nexport function quoteBorderClass(color: string): string {\n return QUOTE_BORDER_CLASS[color as HighlightColor] ?? QUOTE_BORDER_CLASS.yellow;\n}\n\n/** Shared typography for chapter content: shadcn tokens via typography modifiers. */\nexport const PROSE_CLASS =\n \"prose max-w-none text-foreground prose-headings:text-foreground prose-headings:scroll-mt-20 prose-p:text-foreground prose-li:text-foreground prose-strong:text-foreground prose-a:text-primary prose-a:underline-offset-4 prose-blockquote:border-l-border prose-blockquote:text-muted-foreground prose-code:text-foreground prose-pre:bg-muted prose-pre:text-foreground prose-hr:border-border prose-th:text-foreground prose-td:text-foreground prose-figcaption:text-muted-foreground prose-img:rounded-lg prose-table:block prose-table:max-w-full prose-table:overflow-x-auto prose-th:align-bottom prose-td:align-top\";\n","import { useMemo, useState } from \"react\";\nimport { cn } from \"cn\";\nimport { CheckCircle2Icon, SearchIcon, Trash2Icon } from \"lucide-react\";\nimport type { BookMeta, Highlight, TocEntry } from \"zreader\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { ScrollArea } from \"@/components/ui/scroll-area\";\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from \"@/components/ui/sheet\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport { useBookmarks, useHighlights, useProgress, useReaderStore } from \"../context\";\nimport type { LinkComponent } from \"../link\";\nimport { chapterMarker, groupByPart } from \"../parts\";\nimport { quoteBorderClass } from \"../tokens\";\n\nexport type ContentsTab = \"contents\" | \"highlights\" | \"bookmarks\";\n\nexport interface ContentsSheetProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n tab: ContentsTab;\n onTabChange: (tab: ContentsTab) => void;\n book: BookMeta;\n chapterId: string;\n toc: TocEntry[];\n hrefFor: (chapterId: string, hash?: string) => string;\n Link: LinkComponent;\n orphanedIds: ReadonlySet<string>;\n onJumpHighlight: (id: string) => void;\n onJumpBlock: (blockId: string) => void;\n onJumpHeading: (id: string) => void;\n}\n\nconst dateFmt = (iso: string) => new Date(iso).toLocaleDateString(undefined, { month: \"short\", day: \"numeric\" });\n\nexport function ContentsSheet(p: ContentsSheetProps) {\n const { book, chapterId, Link } = p;\n const store = useReaderStore();\n const highlights = useHighlights(book.id);\n const bookmarks = useBookmarks(book.id);\n const progress = useProgress(book.id);\n const [query, setQuery] = useState(\"\");\n\n const titles = useMemo(() => new Map(book.chapters.map((c) => [c.id, c.title])), [book.chapters]);\n const order = useMemo(() => new Map(book.chapters.map((c, i) => [c.id, i])), [book.chapters]);\n\n const grouped = useMemo(() => {\n const q = query.trim().toLowerCase();\n const groups = new Map<string, Highlight[]>();\n highlights\n .filter((h) => !q || h.anchor.exact.toLowerCase().includes(q) || h.note?.toLowerCase().includes(q))\n .sort((a, b) => (order.get(a.chapterId) ?? 0) - (order.get(b.chapterId) ?? 0) || a.anchor.start - b.anchor.start)\n .forEach((h) => groups.set(h.chapterId, [...(groups.get(h.chapterId) ?? []), h]));\n return groups;\n }, [highlights, query, order]);\n\n const sortedBookmarks = useMemo(\n () => [...bookmarks].sort((a, b) => (order.get(a.chapterId) ?? 0) - (order.get(b.chapterId) ?? 0)),\n [bookmarks, order],\n );\n\n const close = () => p.onOpenChange(false);\n /** Same-chapter targets scroll in place; others navigate. */\n const jumpOr = (targetChapter: string, inPage: () => void) => (e: React.MouseEvent) => {\n if (targetChapter !== chapterId) return close();\n e.preventDefault();\n close();\n inPage();\n };\n\n return (\n <Sheet open={p.open} onOpenChange={p.onOpenChange}>\n <SheetContent side=\"left\" className=\"w-[88vw] gap-0 p-0 sm:max-w-sm\">\n <SheetHeader className=\"border-b\">\n <SheetTitle className=\"line-clamp-2\">{book.title}</SheetTitle>\n {book.authors.length > 0 && <SheetDescription>{book.authors.join(\", \")}</SheetDescription>}\n </SheetHeader>\n <Tabs value={p.tab} onValueChange={(v) => p.onTabChange(v as ContentsTab)} className=\"min-h-0 flex-1 gap-0\">\n <div className=\"px-4 pt-3\">\n <TabsList className=\"w-full\">\n <TabsTrigger value=\"contents\">Contents</TabsTrigger>\n <TabsTrigger value=\"highlights\">\n Highlights\n {highlights.length > 0 && <Badge variant=\"secondary\">{highlights.length}</Badge>}\n </TabsTrigger>\n <TabsTrigger value=\"bookmarks\">\n Bookmarks\n {bookmarks.length > 0 && <Badge variant=\"secondary\">{bookmarks.length}</Badge>}\n </TabsTrigger>\n </TabsList>\n </div>\n\n <TabsContent value=\"contents\" className=\"min-h-0\">\n <ScrollArea className=\"h-full\">\n <div className=\"flex flex-col gap-3 p-2\">\n {groupByPart(book.chapters).map((group) => (\n <section key={group.part ?? \"_\"} className=\"flex flex-col gap-0.5\">\n {group.part && <h3 className=\"px-3 pt-2 pb-1 text-xs font-medium tracking-wide text-muted-foreground uppercase\">{group.part}</h3>}\n <ol className=\"flex flex-col gap-0.5\">\n {group.items.map(({ chapter: c, index: i }) => {\n const pr = progress.chapters[c.id];\n const current = c.id === chapterId;\n return (\n <li key={c.id}>\n <Button asChild variant={current ? \"secondary\" : \"ghost\"} className=\"h-auto w-full justify-start gap-3 py-2 text-left whitespace-normal\">\n <Link href={p.hrefFor(c.id)} aria-current={current ? \"page\" : undefined} onClick={close}>\n <span className=\"w-5 shrink-0 text-xs text-muted-foreground tabular-nums\">{chapterMarker(c, i)}</span>\n <span className=\"flex-1\">{c.title}</span>\n {pr?.completed ? (\n <CheckCircle2Icon className=\"text-primary\" aria-label=\"Completed\" />\n ) : pr ? (\n <span className=\"text-xs text-muted-foreground tabular-nums\">{Math.round(pr.percent * 100)}%</span>\n ) : null}\n </Link>\n </Button>\n {current && p.toc.length > 0 && (\n <ol className=\"my-1 ml-8 flex flex-col border-l\">\n {p.toc.map((t) => (\n <li key={t.id}>\n <Button\n asChild\n variant=\"link\"\n size=\"sm\"\n className={cn(\"h-auto w-full justify-start py-1.5 text-left whitespace-normal text-muted-foreground\", t.depth > 2 && \"pl-6\")}\n >\n <a href={`#${t.id}`} onClick={jumpOr(chapterId, () => p.onJumpHeading(t.id))}>\n {t.text}\n </a>\n </Button>\n </li>\n ))}\n </ol>\n )}\n </li>\n );\n })}\n </ol>\n </section>\n ))}\n </div>\n </ScrollArea>\n </TabsContent>\n\n <TabsContent value=\"highlights\" className=\"flex min-h-0 flex-col\">\n {highlights.length > 3 && (\n <div className=\"px-4 pt-3\">\n <div className=\"relative\">\n <SearchIcon className=\"pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground\" />\n <Input type=\"search\" value={query} onChange={(e) => setQuery(e.target.value)} placeholder=\"Search highlights and notes\" aria-label=\"Search highlights\" className=\"pl-8\" />\n </div>\n </div>\n )}\n <ScrollArea className=\"min-h-0 flex-1\">\n <div className=\"flex flex-col gap-4 p-4\">\n {grouped.size === 0 && (\n <p className=\"text-sm text-muted-foreground\">\n {highlights.length ? \"No matches.\" : \"Select text — or turn on highlight mode and tap a sentence — to highlight it.\"}\n </p>\n )}\n {[...grouped].map(([cid, list]) => (\n <section key={cid} className=\"flex flex-col gap-2\">\n <h3 className=\"text-xs font-medium tracking-wide text-muted-foreground uppercase\">{titles.get(cid) ?? cid}</h3>\n <ul className=\"flex flex-col gap-2\">\n {list.map((h) => (\n <li key={h.id} className=\"group flex items-start gap-1\">\n <Link\n href={p.hrefFor(cid, `hl-${h.id}`)}\n onClick={jumpOr(cid, () => p.onJumpHighlight(h.id))}\n className={cn(\"flex-1 rounded-md border-l-4 bg-muted/40 px-3 py-2 text-sm transition-colors hover:bg-muted\", quoteBorderClass(h.color))}\n >\n <span className=\"line-clamp-3 font-serif\">{h.anchor.exact}</span>\n {h.note && <span className=\"mt-1 line-clamp-2 block text-muted-foreground\">{h.note}</span>}\n <span className=\"mt-1 flex items-center gap-2 text-xs text-muted-foreground\">\n {dateFmt(h.updatedAt)}\n {cid === chapterId && p.orphanedIds.has(h.id) && (\n <Badge variant=\"outline\" title=\"The passage changed and this highlight could not be placed\">\n Unplaced\n </Badge>\n )}\n </span>\n </Link>\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" aria-label=\"Delete highlight\" onClick={() => store.removeHighlight(book.id, h.id)}>\n <Trash2Icon />\n </Button>\n </li>\n ))}\n </ul>\n </section>\n ))}\n </div>\n </ScrollArea>\n </TabsContent>\n\n <TabsContent value=\"bookmarks\" className=\"min-h-0\">\n <ScrollArea className=\"h-full\">\n <ul className=\"flex flex-col gap-2 p-4\">\n {sortedBookmarks.length === 0 && <li className=\"text-sm text-muted-foreground\">Use the bookmark button to save your place.</li>}\n {sortedBookmarks.map((b) => (\n <li key={b.id} className=\"flex items-start gap-1\">\n <Link\n href={p.hrefFor(b.chapterId, b.blockId ? `b-${b.blockId}` : undefined)}\n onClick={b.blockId ? jumpOr(b.chapterId, () => p.onJumpBlock(b.blockId!)) : close}\n className=\"flex-1 rounded-md bg-muted/40 px-3 py-2 text-sm transition-colors hover:bg-muted\"\n >\n <span className=\"block font-medium\">{b.label ?? titles.get(b.chapterId) ?? b.chapterId}</span>\n {b.excerpt && <span className=\"mt-0.5 line-clamp-2 block text-muted-foreground\">{b.excerpt}</span>}\n <span className=\"mt-1 block text-xs text-muted-foreground\">{dateFmt(b.createdAt)}</span>\n </Link>\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" aria-label=\"Remove bookmark\" onClick={() => store.removeBookmark(book.id, b.id)}>\n <Trash2Icon />\n </Button>\n </li>\n ))}\n </ul>\n </ScrollArea>\n </TabsContent>\n </Tabs>\n </SheetContent>\n </Sheet>\n );\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Label as LabelPrimitive } from \"radix-ui\"\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"flex field-sizing-content min-h-16 w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:ring-destructive/40\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","import * as React from \"react\"\nimport { type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"cn\"\nimport { ToggleGroup as ToggleGroupPrimitive } from \"radix-ui\"\n\nimport { toggleVariants } from \"@/components/ui/toggle\"\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n }\n>({\n size: \"default\",\n variant: \"default\",\n spacing: 0,\n})\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n spacing = 0,\n children,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n }) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n style={{ \"--gap\": spacing } as React.CSSProperties}\n className={cn(\n \"group/toggle-group flex w-fit items-center gap-[--spacing(var(--gap))] rounded-md data-[spacing=default]:data-[variant=outline]:shadow-xs\",\n className\n )}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size, spacing }}>\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n )\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\n VariantProps<typeof toggleVariants>) {\n const context = React.useContext(ToggleGroupContext)\n\n return (\n <ToggleGroupPrimitive.Item\n data-slot=\"toggle-group-item\"\n data-variant={context.variant || variant}\n data-size={context.size || size}\n data-spacing={context.spacing}\n className={cn(\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n \"w-auto min-w-0 shrink-0 px-3 focus:z-10 focus-visible:z-10\",\n \"data-[spacing=0]:rounded-none data-[spacing=0]:shadow-none data-[spacing=0]:first:rounded-l-md data-[spacing=0]:last:rounded-r-md data-[spacing=0]:data-[variant=outline]:border-l-0 data-[spacing=0]:data-[variant=outline]:first:border-l\",\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n )\n}\n\nexport { ToggleGroup, ToggleGroupItem }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { XIcon } from \"lucide-react\"\nimport { Dialog as DialogPrimitive } from \"radix-ui\"\n\nimport { Button } from \"@/components/ui/button\"\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"outline\">Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","import type { ReactNode } from \"react\";\nimport { cn } from \"cn\";\nimport { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from \"@/components/ui/dialog\";\nimport { Drawer, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle } from \"@/components/ui/drawer\";\nimport { ScrollArea } from \"@/components/ui/scroll-area\";\nimport { Sheet, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle } from \"@/components/ui/sheet\";\nimport { useIsDesktop } from \"../context\";\n\nexport interface ResponsivePanelProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: ReactNode;\n description?: ReactNode;\n /** Desktop surface. Mobile is always a bottom drawer. */\n desktop?: \"dialog\" | \"sheet-left\" | \"sheet-right\";\n /** Hide the header visually (still announced to assistive tech). */\n hideHeader?: boolean;\n footer?: ReactNode;\n className?: string;\n children: ReactNode;\n}\n\n/**\n * shadcn \"responsive dialog\" pattern: a vaul Drawer on mobile, a Dialog or\n * Sheet on desktop. Mobile-first: renders the Drawer during SSR.\n */\nexport function ResponsivePanel({\n open,\n onOpenChange,\n title,\n description,\n desktop = \"dialog\",\n hideHeader,\n footer,\n className,\n children,\n}: ResponsivePanelProps) {\n const isDesktop = useIsDesktop();\n const headerClass = hideHeader ? \"sr-only\" : undefined;\n\n if (isDesktop && desktop === \"dialog\") {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className={cn(\"sm:max-w-lg\", className)}>\n <DialogHeader className={headerClass}>\n <DialogTitle>{title}</DialogTitle>\n {description ? <DialogDescription>{description}</DialogDescription> : null}\n </DialogHeader>\n {children}\n {footer ? <DialogFooter>{footer}</DialogFooter> : null}\n </DialogContent>\n </Dialog>\n );\n }\n\n if (isDesktop) {\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent side={desktop === \"sheet-left\" ? \"left\" : \"right\"} className={cn(\"w-full gap-0 sm:max-w-md\", className)}>\n <SheetHeader className={headerClass}>\n <SheetTitle>{title}</SheetTitle>\n {description ? <SheetDescription>{description}</SheetDescription> : null}\n </SheetHeader>\n <ScrollArea className=\"min-h-0 flex-1\">\n <div className=\"px-4 pb-4\">{children}</div>\n </ScrollArea>\n {footer ? <SheetFooter>{footer}</SheetFooter> : null}\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <Drawer open={open} onOpenChange={onOpenChange}>\n <DrawerContent className={cn(\"max-h-[92svh]\", className)}>\n <DrawerHeader className={cn(\"text-left\", headerClass)}>\n <DrawerTitle>{title}</DrawerTitle>\n {description ? <DrawerDescription>{description}</DrawerDescription> : null}\n </DrawerHeader>\n <div className=\"min-h-0 flex-1 overflow-y-auto overscroll-contain px-4 pb-4\">{children}</div>\n {footer ? <DrawerFooter className=\"pb-[max(1rem,env(safe-area-inset-bottom))]\">{footer}</DrawerFooter> : null}\n </DrawerContent>\n </Drawer>\n );\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { cn } from \"cn\";\nimport { CopyIcon, QuoteIcon, Trash2Icon } from \"lucide-react\";\nimport type { Highlight } from \"zreader\";\nimport { Button } from \"@/components/ui/button\";\nimport { Label } from \"@/components/ui/label\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport { ToggleGroup, ToggleGroupItem } from \"@/components/ui/toggle-group\";\nimport { ResponsivePanel } from \"./responsive-panel\";\nimport { quoteBorderClass, swatchClass } from \"../tokens\";\n\nexport interface HighlightPanelProps {\n highlight: Highlight | null;\n colors: string[];\n focusNote?: boolean;\n onColor: (color: string) => void;\n onNote: (note: string) => void;\n onDelete: () => void;\n onQuote?: () => void;\n onCopy?: () => void;\n onClose: () => void;\n}\n\nexport function HighlightPanel({ highlight, colors, focusNote, onColor, onNote, onDelete, onQuote, onCopy, onClose }: HighlightPanelProps) {\n const [note, setNote] = useState(highlight?.note ?? \"\");\n const saved = useRef(highlight?.note ?? \"\");\n const textRef = useRef<HTMLTextAreaElement>(null);\n const id = highlight?.id;\n\n useEffect(() => {\n setNote(highlight?.note ?? \"\");\n saved.current = highlight?.note ?? \"\";\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id]);\n\n // Debounced autosave.\n useEffect(() => {\n if (note === saved.current) return;\n const t = setTimeout(() => {\n saved.current = note;\n onNote(note);\n }, 400);\n return () => clearTimeout(t);\n }, [note, onNote]);\n\n useEffect(() => {\n if (!focusNote || !id) return;\n const t = setTimeout(() => textRef.current?.focus(), 250);\n return () => clearTimeout(t);\n }, [focusNote, id]);\n\n const flush = () => {\n if (note !== saved.current) {\n saved.current = note;\n onNote(note);\n }\n };\n\n const exact = highlight?.anchor.exact ?? \"\";\n\n return (\n <ResponsivePanel\n open={!!highlight}\n onOpenChange={(open) => {\n if (!open) {\n flush();\n onClose();\n }\n }}\n title=\"Highlight\"\n description=\"Change the colour, add a note, or remove it.\"\n footer={\n <div className=\"flex flex-wrap gap-2\">\n {onCopy && (\n <Button type=\"button\" variant=\"outline\" onClick={onCopy}>\n <CopyIcon /> Copy\n </Button>\n )}\n {onQuote && (\n <Button type=\"button\" variant=\"outline\" onClick={onQuote}>\n <QuoteIcon /> To scratchpad\n </Button>\n )}\n <Button type=\"button\" variant=\"destructive\" onClick={onDelete}>\n <Trash2Icon /> Delete\n </Button>\n </div>\n }\n >\n {highlight && (\n <div className=\"flex flex-col gap-4\">\n <blockquote className={cn(\"line-clamp-6 border-l-4 pl-3 font-serif text-sm text-muted-foreground\", quoteBorderClass(highlight.color))}>\n {exact}\n </blockquote>\n <ToggleGroup\n type=\"single\"\n variant=\"outline\"\n value={highlight.color}\n onValueChange={(v) => v && onColor(v)}\n aria-label=\"Highlight colour\"\n className=\"justify-start\"\n >\n {colors.map((c) => (\n <ToggleGroupItem key={c} value={c} aria-label={c}>\n <span className={cn(\"size-4 rounded-full ring-1 ring-foreground/15\", swatchClass(c))} />\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n <div className=\"grid gap-2\">\n <Label htmlFor={`zr-note-${highlight.id}`}>Note</Label>\n <Textarea\n id={`zr-note-${highlight.id}`}\n ref={textRef}\n rows={4}\n value={note}\n placeholder=\"Add a note…\"\n onChange={(e) => setNote(e.target.value)}\n onBlur={flush}\n />\n </div>\n </div>\n )}\n </ResponsivePanel>\n );\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"cn\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\"\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"ml-auto text-xs tracking-widest text-muted-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","import { cn } from \"cn\"\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"animate-pulse rounded-md bg-accent\", className)}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","/** Trigger a client-side file download. */\nexport function downloadFile(filename: string, content: string, type = \"application/json\") {\n const url = URL.createObjectURL(new Blob([content], { type }));\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n a.remove();\n setTimeout(() => URL.revokeObjectURL(url), 1000);\n}\n\nexport async function copyText(text: string): Promise<boolean> {\n try {\n await navigator.clipboard.writeText(text);\n return true;\n } catch {\n return false;\n }\n}\n","import { Component, lazy, Suspense, useMemo, type ReactNode } from \"react\";\nimport { toast } from \"sonner\";\nimport { CopyIcon, DownloadIcon, EllipsisIcon, Trash2Icon, XIcon } from \"lucide-react\";\nimport type { PadScope, PadScopeKind } from \"zreader\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { Tabs, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport { usePad, useReader } from \"../context\";\nimport { copyText, downloadFile } from \"../download\";\n\nconst ScratchpadEditor = lazy(() => import(\"zreader/editor\").then((m) => ({ default: m.ScratchpadEditor })));\n\nconst SCOPE_LABEL: Record<PadScopeKind, string> = { chapter: \"Chapter\", book: \"Book\", global: \"All books\" };\n\nexport function scopeFor(kind: PadScopeKind, bookId: string, chapterId: string): PadScope {\n if (kind === \"global\") return { kind };\n if (kind === \"book\") return { kind, bookId };\n return { kind, bookId, chapterId };\n}\n\nexport function scopeKey(scope: PadScope): string {\n return scope.kind === \"global\" ? \"global\" : scope.kind === \"book\" ? `book:${scope.bookId}` : `chapter:${scope.bookId}:${scope.chapterId}`;\n}\n\nclass EditorBoundary extends Component<{ fallback: ReactNode; children: ReactNode }, { failed: boolean }> {\n state = { failed: false };\n static getDerivedStateFromError() {\n return { failed: true };\n }\n render() {\n return this.state.failed ? this.props.fallback : this.props.children;\n }\n}\n\nexport interface ScratchpadPanelProps {\n bookId: string;\n chapterId: string;\n kind: PadScopeKind;\n onKindChange: (kind: PadScopeKind) => void;\n onClose?: () => void;\n onEditorFocus?: () => void;\n /** Filename stem for exports. */\n title?: string;\n}\n\nfunction PlainEditor({ scope, onFocus }: { scope: PadScope; onFocus?: () => void }) {\n const { store } = useReader();\n const pad = usePad(scope);\n return (\n <Textarea\n value={pad.markdown}\n onChange={(e) => store.savePad(scope, e.target.value)}\n onFocus={onFocus}\n placeholder=\"Write in markdown. - [ ] makes a checklist item.\"\n className=\"h-full min-h-48 flex-1 resize-none font-mono text-sm\"\n aria-label=\"Scratchpad (markdown)\"\n />\n );\n}\n\nexport function ScratchpadPanel({ bookId, chapterId, kind, onKindChange, onClose, onEditorFocus, title }: ScratchpadPanelProps) {\n const { store, options } = useReader();\n const scope = useMemo(() => scopeFor(kind, bookId, chapterId), [kind, bookId, chapterId]);\n const pad = usePad(scope);\n const scopes = options.scratchpad.scopes;\n const stem = `${title ?? bookId}-${kind}-notes`.replace(/[^a-z0-9-]+/gi, \"-\").toLowerCase();\n\n return (\n <div className=\"flex h-full min-h-0 flex-col\">\n <div className=\"flex items-center gap-2 border-b px-3 py-2\">\n {scopes.length > 1 ? (\n <Tabs value={kind} onValueChange={(v) => onKindChange(v as PadScopeKind)} className=\"min-w-0 flex-1\">\n <TabsList className=\"w-full\">\n {scopes.map((s) => (\n <TabsTrigger key={s} value={s}>\n {SCOPE_LABEL[s]}\n </TabsTrigger>\n ))}\n </TabsList>\n </Tabs>\n ) : (\n <h2 className=\"flex-1 text-sm font-medium\">Scratchpad</h2>\n )}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" aria-label=\"Scratchpad options\">\n <EllipsisIcon />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onSelect={() => downloadFile(`${stem}.md`, pad.markdown, \"text/markdown\")} disabled={!pad.markdown.trim()}>\n <DownloadIcon /> Download .md\n </DropdownMenuItem>\n <DropdownMenuItem\n onSelect={async () => toast((await copyText(pad.markdown)) ? \"Markdown copied\" : \"Could not copy\")}\n disabled={!pad.markdown.trim()}\n >\n <CopyIcon /> Copy markdown\n </DropdownMenuItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n variant=\"destructive\"\n disabled={!pad.markdown.trim()}\n onSelect={() => {\n const previous = pad;\n store.clearPad(scope);\n toast(\"Scratchpad cleared\", {\n action: { label: \"Undo\", onClick: () => store.savePad(scope, previous.markdown, previous.json) },\n });\n }}\n >\n <Trash2Icon /> Clear\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n {onClose && (\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" aria-label=\"Close scratchpad\" onClick={onClose}>\n <XIcon />\n </Button>\n )}\n </div>\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <EditorBoundary key={scopeKey(scope)} fallback={<div className=\"flex flex-1 flex-col p-3\"><PlainEditor scope={scope} onFocus={onEditorFocus} /></div>}>\n <Suspense\n fallback={\n <div className=\"flex flex-col gap-3 p-4\">\n <Skeleton className=\"h-8 w-full\" />\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-4 w-1/2\" />\n </div>\n }\n >\n <ScratchpadEditor key={scopeKey(scope)} scope={scope} onFocus={onEditorFocus} />\n </Suspense>\n </EditorBoundary>\n </div>\n </div>\n );\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Popover as PopoverPrimitive } from \"radix-ui\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"popover-header\"\n className={cn(\"flex flex-col gap-1 text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <div\n data-slot=\"popover-title\"\n className={cn(\"font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverDescription({\n className,\n ...props\n}: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"popover-description\"\n className={cn(\"text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n PopoverHeader,\n PopoverTitle,\n PopoverDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Separator as SeparatorPrimitive } from \"radix-ui\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","import { useMemo, useRef } from \"react\";\nimport { cn } from \"cn\";\nimport { CopyIcon, MessageSquarePlusIcon, QuoteIcon, TextSelectIcon, XIcon } from \"lucide-react\";\nimport type { TextSpan } from \"zreader\";\nimport { Button } from \"@/components/ui/button\";\nimport { Popover, PopoverAnchor, PopoverContent } from \"@/components/ui/popover\";\nimport { Separator } from \"@/components/ui/separator\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"@/components/ui/tooltip\";\nimport { useIsDesktop } from \"../context\";\nimport { swatchClass } from \"../tokens\";\nimport type { SelectionState } from \"../useChapterEngine\";\n\nexport interface SelectionToolbarProps {\n selection: SelectionState | null;\n colors: string[];\n onHighlight: (span: TextSpan, color: string) => void;\n onNote: (span: TextSpan) => void;\n onSentence: (span: TextSpan) => void;\n onQuote?: (span: TextSpan, text: string) => void;\n onCopy?: (text: string) => void;\n onDismiss: () => void;\n}\n\nfunction Action({ label, onSelect, children }: { label: string; onSelect: () => void; children: React.ReactNode }) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button type=\"button\" variant=\"ghost\" size=\"icon\" aria-label={label} onClick={onSelect}>\n {children}\n </Button>\n </TooltipTrigger>\n <TooltipContent>{label}</TooltipContent>\n </Tooltip>\n );\n}\n\n/**\n * Actions for the current text selection. Desktop: a Popover anchored to the\n * selection (virtual anchor). Mobile: docked above the safe area, out of the\n * way of the native selection callout.\n */\nexport function SelectionToolbar({ selection, colors, onHighlight, onNote, onSentence, onQuote, onCopy, onDismiss }: SelectionToolbarProps) {\n const isDesktop = useIsDesktop();\n // Keep the last selection: on touch devices it can collapse before `click`.\n const last = useRef<SelectionState | null>(null);\n if (selection) last.current = selection;\n const current = () => last.current;\n\n const anchorRef = useMemo(\n () => ({\n current: {\n getBoundingClientRect: () => {\n const r = last.current?.rect;\n return DOMRect.fromRect(r ? { x: r.left, y: r.top, width: r.width, height: r.height } : undefined);\n },\n },\n }),\n [],\n );\n\n const keepSelection = (e: React.PointerEvent | React.MouseEvent) => e.preventDefault();\n\n const actions = (\n <div className=\"flex items-center gap-0.5\" role=\"toolbar\" aria-label=\"Selection actions\" onPointerDown={keepSelection} onMouseDown={keepSelection}>\n <div className=\"flex items-center gap-1 px-1\">\n {colors.map((c) => (\n <Button\n key={c}\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label={`Highlight ${c}`}\n onClick={() => current() && onHighlight(current()!.span, c)}\n >\n <span className={cn(\"size-5 rounded-full ring-1 ring-foreground/15\", swatchClass(c))} />\n </Button>\n ))}\n </div>\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n <Action label=\"Whole sentence\" onSelect={() => current() && onSentence(current()!.span)}>\n <TextSelectIcon />\n </Action>\n <Action label=\"Add note\" onSelect={() => current() && onNote(current()!.span)}>\n <MessageSquarePlusIcon />\n </Action>\n {onQuote && (\n <Action label=\"Quote to scratchpad\" onSelect={() => current() && onQuote(current()!.span, current()!.text)}>\n <QuoteIcon />\n </Action>\n )}\n {onCopy && (\n <Action label=\"Copy\" onSelect={() => current() && onCopy(current()!.text)}>\n <CopyIcon />\n </Action>\n )}\n {!isDesktop && (\n <Action label=\"Dismiss\" onSelect={onDismiss}>\n <XIcon />\n </Action>\n )}\n </div>\n );\n\n if (isDesktop) {\n return (\n <Popover open={!!selection} modal={false}>\n <PopoverAnchor virtualRef={anchorRef} />\n <PopoverContent\n side=\"top\"\n align=\"center\"\n sideOffset={10}\n className=\"w-auto p-1\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n onCloseAutoFocus={(e) => e.preventDefault()}\n onEscapeKeyDown={onDismiss}\n >\n {actions}\n </PopoverContent>\n </Popover>\n );\n }\n\n if (!selection) return null;\n return (\n <div className=\"fixed inset-x-2 bottom-[max(0.75rem,env(safe-area-inset-bottom))] z-40 flex justify-center animate-in fade-in-0 slide-in-from-bottom-2\">\n <div className=\"max-w-full overflow-x-auto rounded-xl border bg-popover p-1 text-popover-foreground shadow-lg\">{actions}</div>\n </div>\n );\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"cn\"\n\nconst alertVariants = cva(\n \"relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\",\n {\n variants: {\n variant: {\n default: \"bg-card text-card-foreground\",\n destructive:\n \"bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-current\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn(\n \"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDescription({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n \"col-start-2 grid justify-items-start gap-1 text-sm text-muted-foreground [&_p]:leading-relaxed\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Alert, AlertTitle, AlertDescription }\n","import * as React from \"react\"\nimport { cn } from \"cn\"\nimport { Switch as SwitchPrimitive } from \"radix-ui\"\n\nfunction Switch({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n \"peer group/switch inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground\"\n )}\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","import { useId, useRef, useState, type ReactNode } from \"react\";\nimport { useTheme } from \"next-themes\";\nimport { toast } from \"sonner\";\nimport { DownloadIcon, HardDriveIcon, RotateCcwIcon, UploadIcon } from \"lucide-react\";\nimport {\n FONT_FAMILIES,\n LEADINGS,\n MEASURES,\n TEXT_SIZES,\n exportBackup,\n highlightsToMarkdown,\n importBackup,\n requestPersistentStorage,\n type BookMeta,\n type FontFamily,\n type Leading,\n type Measure,\n type TextSize,\n type ThemeName,\n} from \"zreader\";\nimport { Alert, AlertDescription, AlertTitle } from \"@/components/ui/alert\";\nimport { Button } from \"@/components/ui/button\";\nimport { Label } from \"@/components/ui/label\";\nimport { Separator } from \"@/components/ui/separator\";\nimport { Switch } from \"@/components/ui/switch\";\nimport { ToggleGroup, ToggleGroupItem } from \"@/components/ui/toggle-group\";\nimport { useHighlights, useHydrated, useReader, useSettings } from \"../context\";\nimport { downloadFile } from \"../download\";\nimport { ResponsivePanel } from \"./responsive-panel\";\n\nconst THEME_LABEL: Record<ThemeName, string> = { system: \"Auto\", light: \"Light\", sepia: \"Sepia\", dark: \"Dark\" };\nconst SIZE_LABEL: Record<TextSize, string> = { sm: \"S\", base: \"M\", lg: \"L\", xl: \"XL\", \"2xl\": \"2XL\" };\nconst LEADING_LABEL: Record<Leading, string> = { tight: \"Tight\", normal: \"Normal\", relaxed: \"Relaxed\" };\nconst MEASURE_LABEL: Record<Measure, string> = { narrow: \"Narrow\", normal: \"Normal\", wide: \"Wide\" };\nconst FONT_LABEL: Record<FontFamily, string> = { serif: \"Serif\", sans: \"Sans\", mono: \"Mono\" };\n\nfunction Choice<T extends string>({\n label,\n value,\n values,\n labels,\n onChange,\n}: {\n label: string;\n value: T;\n values: readonly T[];\n labels: Record<T, ReactNode>;\n onChange: (v: T) => void;\n}) {\n const id = useId();\n return (\n <div className=\"grid gap-2\">\n <Label id={id}>{label}</Label>\n <ToggleGroup\n type=\"single\"\n variant=\"outline\"\n value={value}\n onValueChange={(v) => v && onChange(v as T)}\n aria-labelledby={id}\n className=\"w-full\"\n >\n {values.map((v) => (\n <ToggleGroupItem key={v} value={v} className=\"flex-1\">\n {labels[v]}\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n </div>\n );\n}\n\nexport interface SettingsPanelProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n book?: BookMeta;\n}\n\nexport function SettingsPanel({ open, onOpenChange, book }: SettingsPanelProps) {\n const { store, options } = useReader();\n const [settings, update] = useSettings();\n const { theme, setTheme } = useTheme();\n const hydrated = useHydrated();\n const highlights = useHighlights(book?.id ?? \"\");\n const fileRef = useRef<HTMLInputElement>(null);\n const [replace, setReplace] = useState(false);\n const modeId = useId();\n const hlModeId = useId();\n\n const stamp = new Date().toISOString().slice(0, 10);\n\n const onImport = async (file: File) => {\n try {\n const res = importBackup(store, await file.text(), { mode: replace ? \"replace\" : \"merge\" });\n toast.success(`Imported ${res.imported} record${res.imported === 1 ? \"\" : \"s\"}`, {\n description: res.skipped ? `${res.skipped} skipped` : undefined,\n });\n } catch (e) {\n toast.error(\"Import failed\", { description: (e as Error).message });\n }\n };\n\n return (\n <ResponsivePanel open={open} onOpenChange={onOpenChange} title=\"Reading settings\" desktop=\"sheet-right\">\n <div className=\"flex flex-col gap-5\">\n {hydrated && (\n <Choice<ThemeName>\n label=\"Theme\"\n value={(theme as ThemeName) ?? options.defaultTheme}\n values={options.themes}\n labels={THEME_LABEL}\n onChange={setTheme}\n />\n )}\n <Choice<TextSize> label=\"Text size\" value={settings.textSize} values={TEXT_SIZES} labels={SIZE_LABEL} onChange={(textSize) => update({ textSize })} />\n <Choice<Leading> label=\"Line spacing\" value={settings.leading} values={LEADINGS} labels={LEADING_LABEL} onChange={(leading) => update({ leading })} />\n <Choice<Measure> label=\"Line width\" value={settings.measure} values={MEASURES} labels={MEASURE_LABEL} onChange={(measure) => update({ measure })} />\n <Choice<FontFamily> label=\"Font\" value={settings.fontFamily} values={FONT_FAMILIES} labels={FONT_LABEL} onChange={(fontFamily) => update({ fontFamily })} />\n\n <div className=\"flex items-start justify-between gap-4 rounded-lg border p-3\">\n <div className=\"grid gap-1\">\n <Label htmlFor={hlModeId}>Highlight mode</Label>\n <p className=\"text-sm text-muted-foreground\">Tap any sentence to highlight it.</p>\n </div>\n <Switch id={hlModeId} checked={settings.highlightMode} onCheckedChange={(highlightMode) => update({ highlightMode })} />\n </div>\n\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" className=\"self-start\" onClick={() => store.resetSettings()}>\n <RotateCcwIcon /> Reset reading settings\n </Button>\n\n <Separator />\n\n <section className=\"flex flex-col gap-3\" aria-labelledby={`${modeId}-title`}>\n <h3 id={`${modeId}-title`} className=\"text-sm font-medium\">\n Your data\n </h3>\n {options.backupReminder && (\n <Alert>\n <HardDriveIcon />\n <AlertTitle>Stored only in this browser</AlertTitle>\n <AlertDescription>Highlights, notes, bookmarks and scratchpads are removed if site data is cleared. Export a backup now and then.</AlertDescription>\n </Alert>\n )}\n <div className=\"flex flex-wrap gap-2\">\n <Button type=\"button\" variant=\"outline\" onClick={() => downloadFile(`reader-backup-${stamp}.json`, JSON.stringify(exportBackup(store), null, 2))}>\n <DownloadIcon /> Export backup\n </Button>\n <Button type=\"button\" variant=\"outline\" onClick={() => fileRef.current?.click()}>\n <UploadIcon /> Import backup\n </Button>\n {book && highlights.length > 0 && (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => {\n const titles = new Map(book.chapters.map((c) => [c.id, c.title]));\n downloadFile(`${book.id}-highlights.md`, highlightsToMarkdown(book.title, highlights, (id) => titles.get(id) ?? id), \"text/markdown\");\n }}\n >\n <DownloadIcon /> Highlights (.md)\n </Button>\n )}\n </div>\n <div className=\"flex items-center gap-3\">\n <Switch id={modeId} checked={replace} onCheckedChange={setReplace} />\n <Label htmlFor={modeId} className=\"font-normal\">\n Replace existing data on import\n </Label>\n </div>\n <input\n ref={fileRef}\n type=\"file\"\n accept=\"application/json,.json\"\n className=\"hidden\"\n onChange={(e) => {\n const f = e.target.files?.[0];\n if (f) void onImport(f);\n e.target.value = \"\";\n }}\n />\n <Button\n type=\"button\"\n variant=\"link\"\n className=\"self-start px-0\"\n onClick={async () =>\n (await requestPersistentStorage())\n ? toast.success(\"This browser will keep your reader data.\")\n : toast.info(\"The browser did not grant persistent storage.\")\n }\n >\n Ask the browser to keep this data\n </Button>\n </section>\n </div>\n </ResponsivePanel>\n );\n}\n","import { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from \"react\";\nimport {\n buildTextIndex,\n collectToc,\n describeSpan,\n ensureBlockIds,\n expandSpanToSentences,\n findBlock,\n highlightAtOffset,\n offsetFromPoint,\n paintHighlights,\n resolveAnchor,\n selectionSpan,\n sentenceSpanAt,\n spanToRange,\n BLOCK_ATTR,\n IGNORE_ATTR,\n type Highlight,\n type ResolvedHighlight,\n type TextIndex,\n type TextSpan,\n type TocEntry,\n} from \"zreader\";\nimport { useHighlights, useReader, useSettings } from \"./context\";\n\nexport interface SelectionRect {\n top: number;\n left: number;\n bottom: number;\n right: number;\n width: number;\n height: number;\n}\n\nexport interface SelectionState {\n span: TextSpan;\n text: string;\n rect: SelectionRect;\n}\n\nexport interface ResumeState {\n blockId: string;\n percent: number;\n}\n\nexport interface ChapterEngineOptions {\n bookId: string;\n chapterId: string;\n contentHash?: string;\n /** The chapter root element (pass callback-ref state so remounts re-bind). */\n root: HTMLElement | null;\n /** Scrolling element. `null` = the window (mobile layout). */\n scroller?: HTMLElement | null;\n /** px reserved at the top of the scroll viewport (sticky header). */\n topOffset?: number;\n onHighlightTap?: (id: string) => void;\n}\n\nconst INTERACTIVE = `a,button,input,textarea,select,summary,label,video,audio,iframe,[contenteditable],[${IGNORE_ATTR}]`;\n\nfunction prefersReducedMotion() {\n return typeof matchMedia !== \"undefined\" && matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\n/** Tiny external store so only <ReadingProgress> re-renders while scrolling. */\nfunction createValueStore(initial: number) {\n let value = initial;\n const listeners = new Set<() => void>();\n return {\n get: () => value,\n set(v: number) {\n if (Math.abs(v - value) < 0.001) return;\n value = v;\n listeners.forEach((l) => l());\n },\n subscribe(l: () => void) {\n listeners.add(l);\n return () => listeners.delete(l);\n },\n };\n}\nexport type ValueStore = ReturnType<typeof createValueStore>;\n\nexport function useValueStore(store: ValueStore): number {\n return useSyncExternalStore(store.subscribe, store.get, () => 0);\n}\n\nexport function useChapterEngine(opts: ChapterEngineOptions) {\n const { bookId, chapterId, contentHash, root: rootEl, scroller: scrollEl = null, topOffset = 64 } = opts;\n const rootRef = useRef(rootEl);\n rootRef.current = rootEl;\n const { store, options } = useReader();\n const [settings] = useSettings();\n const highlights = useHighlights(bookId, chapterId);\n\n const indexRef = useRef<TextIndex | null>(null);\n const [version, setVersion] = useState(0);\n const [selection, setSelection] = useState<SelectionState | null>(null);\n const [activeId, setActiveId] = useState<string | null>(null);\n const [resume, setResume] = useState<ResumeState | null>(null);\n const [percentStore] = useState(() => createValueStore(0));\n /** Headings found in the rendered content (used when no `toc` prop is given). */\n const [domToc, setDomToc] = useState<TocEntry[]>([]);\n const onTapRef = useRef(opts.onHighlightTap);\n onTapRef.current = opts.onHighlightTap;\n\n // --------------------------------------------------------- scroll helpers\n const scroller = useCallback(() => scrollEl, [scrollEl]);\n const viewportTop = useCallback(() => scroller()?.getBoundingClientRect().top ?? 0, [scroller]);\n const viewportHeight = useCallback(() => scroller()?.clientHeight ?? window.innerHeight, [scroller]);\n const scrollTop = useCallback(() => scroller()?.scrollTop ?? window.scrollY, [scroller]);\n const scrollToY = useCallback(\n (y: number, smooth = true) => {\n const opts: ScrollToOptions = { top: Math.max(0, y), behavior: smooth && !prefersReducedMotion() ? \"smooth\" : \"auto\" };\n const el = scroller();\n if (el) el.scrollTo(opts);\n else window.scrollTo(opts);\n },\n [scroller],\n );\n /** Convert a viewport-relative `top` into a scroll position that puts it under the header. */\n const targetFor = useCallback(\n (rectTop: number, extra = 8) => scrollTop() + rectTop - viewportTop() - topOffset - extra,\n [scrollTop, viewportTop, topOffset],\n );\n\n // ------------------------------------------------------------ text index\n useEffect(() => {\n const root = rootEl;\n if (!root) return;\n const rebuild = () => {\n // Content rendered without the rehype plugin gets the same ids here.\n ensureBlockIds(root);\n setDomToc((prev) => {\n const next = collectToc(root);\n return JSON.stringify(prev) === JSON.stringify(next) ? prev : next;\n });\n indexRef.current = buildTextIndex(root);\n setVersion((v) => v + 1);\n };\n rebuild();\n let t: ReturnType<typeof setTimeout> | undefined;\n const mo = new MutationObserver(() => {\n clearTimeout(t);\n t = setTimeout(rebuild, 60);\n });\n // Attribute changes (our own ids) are deliberately not observed.\n mo.observe(root, { childList: true, subtree: true, characterData: true });\n return () => {\n mo.disconnect();\n clearTimeout(t);\n };\n }, [rootEl, chapterId]);\n\n const getIndex = useCallback(() => {\n const root = rootRef.current;\n if (root && (!indexRef.current || indexRef.current.root !== root)) indexRef.current = buildTextIndex(root);\n return indexRef.current;\n }, []);\n\n // -------------------------------------------------------------- resolve\n const { resolved, orphaned } = useMemo(() => {\n const index = indexRef.current;\n const ok: ResolvedHighlight[] = [];\n const lost: Highlight[] = [];\n if (index) {\n for (const h of highlights) {\n const span = resolveAnchor(index, h.anchor);\n const range = span ? spanToRange(index, span) : null;\n if (span && range) ok.push({ highlight: h, span, range });\n else lost.push(h);\n }\n }\n return { resolved: ok, orphaned: lost };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [highlights, version]);\n const resolvedRef = useRef(resolved);\n resolvedRef.current = resolved;\n\n // Self-heal anchors that moved because the chapter was edited.\n useEffect(() => {\n const index = indexRef.current;\n if (!index) return;\n for (const r of resolved) {\n const a = r.highlight.anchor;\n if (a.start === r.span.start && a.end === r.span.end) continue;\n const fresh = describeSpan(index, r.span, contentHash);\n if (fresh) store.updateHighlight(bookId, r.highlight.id, { anchor: fresh });\n }\n }, [resolved, bookId, contentHash, store]);\n\n // ---------------------------------------------------------------- paint\n useEffect(() => paintHighlights(resolved, { activeId }), [resolved, activeId]);\n\n // ------------------------------------------------------------ selection\n useEffect(() => {\n let t: ReturnType<typeof setTimeout> | undefined;\n const update = () => {\n const index = getIndex();\n const sel = document.getSelection();\n const span = index ? selectionSpan(index, sel) : null;\n if (!index || !span || !sel || sel.rangeCount === 0) {\n setSelection(null);\n return;\n }\n const r = sel.getRangeAt(0).getBoundingClientRect();\n setSelection({\n span,\n text: index.text.slice(span.start, span.end),\n rect: { top: r.top, left: r.left, bottom: r.bottom, right: r.right, width: r.width, height: r.height },\n });\n };\n const onChange = () => {\n clearTimeout(t);\n t = setTimeout(update, 120);\n };\n document.addEventListener(\"selectionchange\", onChange);\n return () => {\n document.removeEventListener(\"selectionchange\", onChange);\n clearTimeout(t);\n };\n }, [getIndex]);\n\n const clearSelection = useCallback(() => {\n document.getSelection()?.removeAllRanges();\n setSelection(null);\n }, []);\n\n const selectSpan = useCallback(\n (span: TextSpan) => {\n const index = getIndex();\n const range = index && spanToRange(index, span);\n const sel = document.getSelection();\n if (!range || !sel) return;\n sel.removeAllRanges();\n sel.addRange(range);\n },\n [getIndex],\n );\n\n const expandSelectionToSentences = useCallback(\n (span?: TextSpan) => {\n const index = getIndex();\n const base = span ?? selection?.span;\n if (!index || !base) return;\n selectSpan(expandSpanToSentences(index, base, document.documentElement.lang || undefined));\n },\n [getIndex, selection, selectSpan],\n );\n\n const createHighlight = useCallback(\n (span: TextSpan, color?: string, note?: string): Highlight | null => {\n const index = getIndex();\n if (!index) return null;\n const anchor = describeSpan(index, span, contentHash);\n if (!anchor) return null;\n const dup = highlights.find((h) => h.anchor.start === anchor.start && h.anchor.end === anchor.end);\n if (dup) {\n if (color && dup.color !== color) store.updateHighlight(bookId, dup.id, { color });\n return dup;\n }\n return store.addHighlight({ bookId, chapterId, anchor, color, note });\n },\n [getIndex, contentHash, highlights, store, bookId, chapterId],\n );\n\n // ------------------------------------------------------------- tapping\n const highlightModeRef = useRef(settings.highlightMode);\n highlightModeRef.current = settings.highlightMode;\n const createRef = useRef(createHighlight);\n createRef.current = createHighlight;\n\n useEffect(() => {\n const root = rootEl;\n if (!root) return;\n const onClick = (e: MouseEvent) => {\n const sel = document.getSelection();\n if (sel && !sel.isCollapsed) return;\n if ((e.target as Element).closest?.(INTERACTIVE)) return;\n const index = getIndex();\n if (!index) return;\n const offset = offsetFromPoint(index, e.clientX, e.clientY);\n if (offset == null) return;\n const hit = highlightAtOffset(resolvedRef.current, offset);\n if (hit) {\n setActiveId(hit.highlight.id);\n onTapRef.current?.(hit.highlight.id);\n return;\n }\n if (highlightModeRef.current) {\n const span = sentenceSpanAt(index, offset, document.documentElement.lang || undefined);\n if (span && createRef.current(span)) navigator.vibrate?.(8);\n }\n };\n root.addEventListener(\"click\", onClick);\n return () => root.removeEventListener(\"click\", onClick);\n }, [rootEl, getIndex]);\n\n // ----------------------------------------------------------- navigation\n const scrollToSpan = useCallback(\n (span: TextSpan, smooth = true) => {\n const index = getIndex();\n const range = index && spanToRange(index, span);\n if (!range) return false;\n scrollToY(targetFor(range.getBoundingClientRect().top, viewportHeight() * 0.15), smooth);\n return true;\n },\n [getIndex, scrollToY, targetFor, viewportHeight],\n );\n\n const scrollToHighlight = useCallback(\n (id: string, smooth = true) => {\n const r = resolvedRef.current.find((x) => x.highlight.id === id);\n if (!r) return false;\n setActiveId(id);\n return scrollToSpan(r.span, smooth);\n },\n [scrollToSpan],\n );\n\n const scrollToElement = useCallback(\n (el: Element | null, smooth = true) => {\n if (!el) return false;\n scrollToY(targetFor(el.getBoundingClientRect().top), smooth);\n return true;\n },\n [scrollToY, targetFor],\n );\n\n const scrollToBlock = useCallback(\n (blockId: string, smooth = true) => {\n const root = rootRef.current;\n return scrollToElement(root && findBlock(root, blockId), smooth);\n },\n [scrollToElement],\n );\n\n const scrollToHeading = useCallback(\n (id: string, smooth = true) => scrollToElement(rootRef.current?.ownerDocument.getElementById(id) ?? null, smooth),\n [scrollToElement],\n );\n\n const scrollToTop = useCallback(() => scrollToY(0), [scrollToY]);\n\n /** Block at the top of the reading viewport. */\n const getTopBlock = useCallback((): Element | null => {\n const root = rootRef.current;\n if (!root) return null;\n const line = viewportTop() + topOffset + 8;\n for (const el of Array.from(root.querySelectorAll(`[${BLOCK_ATTR}]`))) {\n if (el.getBoundingClientRect().bottom > line) return el;\n }\n return null;\n }, [viewportTop, topOffset]);\n\n // -------------------------------------------------------------- progress\n useEffect(() => {\n const root = rootEl;\n if (!root) return;\n const target: HTMLElement | Window = scroller() ?? window;\n let raf = 0;\n let lastSave = 0;\n let pending: ReturnType<typeof setTimeout> | undefined;\n const compute = () => {\n const box = root.getBoundingClientRect();\n const top = box.top - viewportTop();\n const total = box.height - viewportHeight() + topOffset;\n const percent = total <= 0 ? 1 : Math.max(0, Math.min(1, (topOffset - top) / total));\n percentStore.set(percent);\n return percent;\n };\n const save = () => {\n const percent = compute();\n const block = getTopBlock();\n store.recordProgress(bookId, chapterId, { blockId: block?.getAttribute(BLOCK_ATTR) ?? undefined, percent });\n lastSave = Date.now();\n };\n const onScroll = () => {\n cancelAnimationFrame(raf);\n raf = requestAnimationFrame(() => {\n compute();\n clearTimeout(pending);\n pending = setTimeout(save, Math.max(0, options.progress.saveIntervalMs - (Date.now() - lastSave)));\n });\n };\n compute();\n target.addEventListener(\"scroll\", onScroll, { passive: true });\n window.addEventListener(\"resize\", onScroll, { passive: true });\n window.addEventListener(\"pagehide\", save);\n return () => {\n target.removeEventListener(\"scroll\", onScroll);\n window.removeEventListener(\"resize\", onScroll);\n window.removeEventListener(\"pagehide\", save);\n cancelAnimationFrame(raf);\n clearTimeout(pending);\n };\n }, [rootEl, scroller, viewportTop, viewportHeight, bookId, chapterId, store, options.progress.saveIntervalMs, getTopBlock, topOffset, percentStore]);\n\n // ---------------------------------------------------------------- resume\n // Restoration is async (fonts) and the root may remount in between (layout\n // switch after hydration), so `run` always reads the latest callbacks.\n const latest = useRef({ scrollToHighlight, scrollToBlock, scrollToHeading, scrollTop });\n latest.current = { scrollToHighlight, scrollToBlock, scrollToHeading, scrollTop };\n const restoredFor = useRef<string | null>(null);\n useEffect(() => {\n if (!rootEl || version === 0 || restoredFor.current === chapterId) return;\n restoredFor.current = chapterId;\n const hash = decodeURIComponent(window.location.hash.slice(1));\n const run = () => {\n const l = latest.current;\n if (hash.startsWith(\"hl-\")) {\n if (l.scrollToHighlight(hash.slice(3), false)) return;\n } else if (hash.startsWith(\"b-\")) {\n if (l.scrollToBlock(hash.slice(2), false)) return;\n } else if (hash) {\n l.scrollToHeading(hash, false);\n return;\n }\n const saved = store.progress(bookId).get().chapters[chapterId];\n if (saved?.blockId && saved.percent > 0.03 && saved.percent < 0.98 && l.scrollTop() < 40) {\n if (l.scrollToBlock(saved.blockId, false)) setResume({ blockId: saved.blockId, percent: saved.percent });\n }\n };\n const fonts = (document as Document & { fonts?: FontFaceSet }).fonts;\n const go = () => requestAnimationFrame(() => requestAnimationFrame(run));\n if (fonts?.ready) void fonts.ready.then(go);\n else go();\n }, [version, chapterId, bookId, store, rootEl]);\n\n const dismissResume = useCallback(() => setResume(null), []);\n\n return {\n highlights,\n resolved,\n orphaned,\n selection,\n activeId,\n setActiveId,\n resume,\n dismissResume,\n percentStore,\n domToc,\n clearSelection,\n selectSpan,\n expandSelectionToSentences,\n createHighlight,\n scrollToHighlight,\n scrollToBlock,\n scrollToHeading,\n scrollToTop,\n getTopBlock,\n getIndex,\n };\n}\n\nexport type ChapterEngine = ReturnType<typeof useChapterEngine>;\n","import { createContext, useCallback, useContext, useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { cn } from \"cn\";\nimport { toast } from \"sonner\";\nimport { usePanelRef, useDefaultLayout } from \"react-resizable-panels\";\nimport {\n ArrowLeftIcon,\n ArrowRightIcon,\n BookmarkIcon,\n CheckIcon,\n ChevronLeftIcon,\n HighlighterIcon,\n ListIcon,\n NotebookPenIcon,\n TypeIcon,\n} from \"lucide-react\";\nimport {\n highlightToMarkdown,\n quoteToMarkdown,\n supportsHighlightApi,\n BLOCK_ATTR,\n type BookMeta,\n type ChapterMeta,\n type PadScopeKind,\n type TextSpan,\n type TocEntry,\n} from \"zreader\";\nimport { Button } from \"@/components/ui/button\";\nimport { Drawer, DrawerContent, DrawerDescription, DrawerTitle } from \"@/components/ui/drawer\";\nimport { Progress } from \"@/components/ui/progress\";\nimport { ResizableHandle, ResizablePanel, ResizablePanelGroup } from \"@/components/ui/resizable\";\nimport { Toggle } from \"@/components/ui/toggle\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"@/components/ui/tooltip\";\nimport { ContentsSheet, type ContentsTab } from \"./components/contents-sheet\";\nimport { HighlightPanel } from \"./components/highlight-panel\";\nimport { ScratchpadPanel, scopeFor } from \"./components/scratchpad-panel\";\nimport { SelectionToolbar } from \"./components/selection-toolbar\";\nimport { SettingsPanel } from \"./components/settings-panel\";\nimport { useBook, useBookmarks, useIsDesktop, useLibrary, useProgress, useReader, useSettings, type HeaderSlot, type HrefFor } from \"./context\";\nimport { copyText } from \"./download\";\nimport type { LinkComponent } from \"./link\";\nimport { FONT_CLASS, LEADING_CLASS, MEASURE_CLASS, PROSE_CLASS, TEXT_SIZE_CLASS } from \"./tokens\";\nimport { useChapterEngine, useValueStore, type ValueStore } from \"./useChapterEngine\";\n\nexport interface ReaderProps {\n /** A book id from the provider's catalogue, or the book's metadata. */\n book: BookMeta | string;\n /** A chapter id of that book, or the chapter's metadata. */\n chapter: ChapterMeta | string;\n /** Defaults to the neighbouring chapters in the book. Pass `null` to hide. */\n prev?: ChapterMeta | null;\n next?: ChapterMeta | null;\n /** Contents of this chapter. Defaults to the h2/h3 headings found in the rendered content. */\n toc?: TocEntry[];\n contentHash?: string;\n /** Sanitized chapter HTML (from `renderChapter()` / `renderHtml()` on the server). */\n html?: string;\n /** Or render the chapter yourself (e.g. an MDX component). */\n children?: ReactNode;\n /** Router link, e.g. `next/link`. Defaults to the provider's. */\n Link?: LinkComponent;\n /** Override URL building. Defaults to the provider's. */\n hrefFor?: HrefFor;\n /**\n * Middle of the top bar: a string (shown as text), any element (your logo,\n * a description…), or a function of `{ book, chapter }`. Defaults to the\n * provider's `headerSlot`, then to <ReaderTitle />. Combine freely, e.g.\n * `<><Logo /><ReaderTitle /></>`.\n */\n header?: HeaderSlot;\n /**\n * Buttons for the right side of the top bar, before the bookmark toggle,\n * e.g. `<CopyReference />` from `zreader/agent/react`. Defaults to the\n * provider's `readerActions`; `null` hides them.\n */\n actions?: ReactNode;\n /** Where the back button goes. Defaults to the book page. */\n backHref?: string;\n className?: string;\n}\n\nexport interface ReaderChapterValue {\n book: BookMeta;\n chapter: ChapterMeta;\n /** Page URL within this book (the reader's `hrefFor`): `href()` is the book, `href(chapterId)` a chapter. */\n href: (chapterId?: string, hash?: string) => string;\n}\n\nconst ReaderChapterContext = createContext<ReaderChapterValue | null>(null);\n\n/** The book and chapter of the surrounding <Reader> (for custom header content and actions). */\nexport function useReaderChapter(): ReaderChapterValue {\n const ctx = useContext(ReaderChapterContext);\n if (!ctx) throw new Error(\"zreader: useReaderChapter() must be used inside <Reader>.\");\n return ctx;\n}\n\n/** The default header content: book title over chapter title. */\nexport function ReaderTitle({ className }: { className?: string }) {\n const { book, chapter } = useReaderChapter();\n return (\n <div className={cn(\"min-w-0\", className)}>\n <p className=\"truncate text-xs text-muted-foreground\">{book.title}</p>\n <p className=\"truncate text-sm font-medium\">{chapter.title}</p>\n </div>\n );\n}\n\nfunction HeaderContent({ slot, book, chapter }: { slot: HeaderSlot | undefined; book: BookMeta; chapter: ChapterMeta }) {\n const content = typeof slot === \"function\" ? slot({ book, chapter }) : slot;\n if (content === undefined) return <ReaderTitle />;\n if (typeof content === \"string\" || typeof content === \"number\") {\n return <p className=\"truncate text-sm font-medium\">{content}</p>;\n }\n return <>{content}</>;\n}\n\nfunction ReadingProgress({ store, className }: { store: ValueStore; className?: string }) {\n const value = useValueStore(store);\n return <Progress value={Math.round(value * 100)} aria-label=\"Chapter progress\" className={cn(\"h-0.5 rounded-none bg-transparent\", className)} />;\n}\n\nfunction IconAction({ label, children, ...props }: React.ComponentProps<typeof Button> & { label: string }) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button type=\"button\" variant=\"ghost\" size=\"icon\" aria-label={label} {...props}>\n {children}\n </Button>\n </TooltipTrigger>\n <TooltipContent>{label}</TooltipContent>\n </Tooltip>\n );\n}\n\nfunction IconToggle({ label, children, ...props }: React.ComponentProps<typeof Toggle> & { label: string }) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Toggle aria-label={label} {...props}>\n {children}\n </Toggle>\n </TooltipTrigger>\n <TooltipContent>{label}</TooltipContent>\n </Tooltip>\n );\n}\n\n/** Hide the header while scrolling down (mobile, window scroll). */\nfunction useAutoHide(enabled: boolean) {\n const [hidden, setHidden] = useState(false);\n useEffect(() => {\n if (!enabled) {\n setHidden(false);\n return;\n }\n let last = window.scrollY;\n let raf = 0;\n const onScroll = () => {\n cancelAnimationFrame(raf);\n raf = requestAnimationFrame(() => {\n const y = window.scrollY;\n if (Math.abs(y - last) < 8) return;\n setHidden(y > last && y > 80);\n last = y;\n });\n };\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n return () => {\n window.removeEventListener(\"scroll\", onScroll);\n cancelAnimationFrame(raf);\n };\n }, [enabled]);\n return hidden;\n}\n\nconst isEditable = (el: Element | null) => !!el?.closest(\"input,textarea,select,[contenteditable='true']\");\n\nexport function Reader({\n book: bookArg,\n chapter: chapterArg,\n prev: prevArg,\n next: nextArg,\n toc: tocProp,\n contentHash,\n html,\n children,\n Link: LinkProp,\n hrefFor,\n header,\n actions,\n backHref,\n className,\n}: ReaderProps) {\n const { store, options } = useReader();\n const library = useLibrary();\n const book = useBook(bookArg);\n const chapterIndex = book.chapters.findIndex((c) => c.id === (typeof chapterArg === \"string\" ? chapterArg : chapterArg.id));\n const chapter: ChapterMeta | undefined = typeof chapterArg === \"string\" ? book.chapters[chapterIndex] : chapterArg;\n if (!chapter) {\n throw new Error(`zreader: book \"${book.id}\" has no chapter \"${String(chapterArg)}\".`);\n }\n const prev = prevArg !== undefined ? prevArg : (book.chapters[chapterIndex - 1] ?? null);\n const next = nextArg !== undefined ? nextArg : chapterIndex >= 0 ? (book.chapters[chapterIndex + 1] ?? null) : null;\n const Link = LinkProp ?? library.Link;\n const slot = header !== undefined ? header : library.headerSlot;\n const topActions = actions !== undefined ? actions : library.readerActions;\n const [settings, updateSettings] = useSettings();\n const isDesktop = useIsDesktop();\n const bookmarks = useBookmarks(book.id);\n const progress = useProgress(book.id);\n\n const build = hrefFor ?? library.href;\n const href = useCallback((chapterId?: string, hash?: string) => build(book.id, chapterId, hash), [build, book.id]);\n const chapterCtx = useMemo<ReaderChapterValue>(() => ({ book, chapter, href }), [book, chapter, href]);\n\n // Callback-ref state: the article remounts when the layout switches (mobile ↔ desktop).\n const [rootEl, setRootEl] = useState<HTMLElement | null>(null);\n const [scrollEl, setScrollEl] = useState<HTMLDivElement | null>(null);\n const [contentsOpen, setContentsOpen] = useState(false);\n const [contentsTab, setContentsTab] = useState<ContentsTab>(\"contents\");\n const [settingsOpen, setSettingsOpen] = useState(false);\n const [padOpen, setPadOpen] = useState(false);\n const [padKind, setPadKind] = useState<PadScopeKind>(options.scratchpad.scopes[0] ?? \"chapter\");\n const [padSnap, setPadSnap] = useState<number | string | null>(0.55);\n const [openHighlightId, setOpenHighlightId] = useState<string | null>(null);\n const [focusNote, setFocusNote] = useState(false);\n\n const engine = useChapterEngine({\n bookId: book.id,\n chapterId: chapter.id,\n contentHash,\n root: rootEl,\n scroller: isDesktop ? scrollEl : null,\n topOffset: isDesktop ? 16 : 64,\n onHighlightTap: (id) => {\n setFocusNote(false);\n setOpenHighlightId(id);\n },\n });\n\n // Prefer the build-time TOC; otherwise use the headings found in the rendered content.\n const toc = tocProp && tocProp.length > 0 ? tocProp : engine.domToc;\n\n const headerHidden = useAutoHide(!isDesktop && !engine.selection);\n const chapterBookmarks = useMemo(() => bookmarks.filter((b) => b.chapterId === chapter.id), [bookmarks, chapter.id]);\n const completed = progress.chapters[chapter.id]?.completed ?? false;\n const openHighlight = engine.highlights.find((h) => h.id === openHighlightId) ?? null;\n const orphanedIds = useMemo(() => new Set(engine.orphaned.map((h) => h.id)), [engine.orphaned]);\n const padEnabled = options.scratchpad.enabled;\n\n // ------------------------------------------------------------ one-offs\n useEffect(() => {\n if (!supportsHighlightApi()) {\n toast.info(\"Highlights can't be drawn in this browser\", { description: \"They are still saved and listed under Contents → Highlights.\" });\n }\n }, []);\n\n useEffect(() => {\n if (!engine.resume) return;\n toast(`Resumed at ${Math.round(engine.resume.percent * 100)}%`, {\n id: `zr-resume-${chapter.id}`,\n action: { label: \"Start from top\", onClick: () => engine.scrollToTop() },\n });\n engine.dismissResume();\n }, [engine.resume, engine, chapter.id]);\n\n // ------------------------------------------------------------- actions\n const openPad = useCallback(() => {\n setPadOpen(true);\n setPadSnap(0.55);\n }, []);\n\n const quoteToPad = useCallback(\n (markdown: string) => {\n store.appendToPad(scopeFor(padKind, book.id, chapter.id), markdown);\n openPad();\n toast.success(\"Added to scratchpad\");\n },\n [store, padKind, book.id, chapter.id, openPad],\n );\n\n const quoteSpan = (span: TextSpan, text: string) => {\n const h = engine.createHighlight(span);\n engine.clearSelection();\n quoteToPad(h ? highlightToMarkdown(h, href(chapter.id, `hl-${h.id}`)) : quoteToMarkdown(text));\n };\n\n const copy = async (text: string) => {\n toast((await copyText(text)) ? \"Copied\" : \"Could not copy\");\n };\n\n const toggleBookmark = () => {\n if (chapterBookmarks.length) {\n const removed = chapterBookmarks;\n removed.forEach((b) => store.removeBookmark(book.id, b.id));\n toast(\"Bookmark removed\", {\n action: {\n label: \"Undo\",\n onClick: () =>\n removed.forEach((b) =>\n store.addBookmark({ bookId: b.bookId, chapterId: b.chapterId, blockId: b.blockId, label: b.label, excerpt: b.excerpt }),\n ),\n },\n });\n return;\n }\n const block = engine.getTopBlock();\n store.addBookmark({\n bookId: book.id,\n chapterId: chapter.id,\n ...(block ? { blockId: block.getAttribute(BLOCK_ATTR) ?? undefined, excerpt: block.textContent?.trim().slice(0, 120) } : {}),\n label: chapter.title,\n });\n toast.success(\"Bookmarked\", { description: \"Find it under Contents → Bookmarks.\" });\n };\n\n // Keyboard: with a selection, `h` highlights and `n` adds a note.\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (!engine.selection || e.metaKey || e.ctrlKey || e.altKey || isEditable(document.activeElement)) return;\n if (e.key === \"h\") {\n e.preventDefault();\n engine.createHighlight(engine.selection.span);\n engine.clearSelection();\n } else if (e.key === \"n\") {\n e.preventDefault();\n const h = engine.createHighlight(engine.selection.span);\n engine.clearSelection();\n if (h) {\n setFocusNote(true);\n setOpenHighlightId(h.id);\n }\n }\n };\n document.addEventListener(\"keydown\", onKey);\n return () => document.removeEventListener(\"keydown\", onKey);\n }, [engine]);\n\n // --------------------------------------------------------------- pieces\n const topBar = (\n <header\n className={cn(\n \"sticky top-0 z-30 border-b bg-background/85 backdrop-blur-md transition-transform duration-200 supports-[backdrop-filter]:bg-background/70\",\n headerHidden && \"-translate-y-full\",\n )}\n >\n <div className=\"flex h-14 items-center gap-1 px-2 pt-[env(safe-area-inset-top)] sm:px-3\">\n <Tooltip>\n <TooltipTrigger asChild>\n <Button asChild variant=\"ghost\" size=\"icon\" aria-label=\"Back to book\">\n <Link href={backHref ?? href()}>\n <ChevronLeftIcon />\n </Link>\n </Button>\n </TooltipTrigger>\n <TooltipContent>Back to book</TooltipContent>\n </Tooltip>\n <IconAction label=\"Contents, highlights and bookmarks\" onClick={() => setContentsOpen(true)}>\n <ListIcon />\n </IconAction>\n <div className=\"flex min-w-0 flex-1 items-center gap-2 px-1\">\n <HeaderContent slot={slot} book={book} chapter={chapter} />\n </div>\n {topActions}\n <IconToggle label={chapterBookmarks.length ? \"Remove bookmark\" : \"Bookmark this place\"} pressed={chapterBookmarks.length > 0} onPressedChange={toggleBookmark} className=\"data-[state=on]:[&_svg]:fill-current\">\n <BookmarkIcon />\n </IconToggle>\n <IconToggle label=\"Highlight mode: tap a sentence\" pressed={settings.highlightMode} onPressedChange={(highlightMode) => updateSettings({ highlightMode })}>\n <HighlighterIcon />\n </IconToggle>\n <IconAction label=\"Reading settings\" onClick={() => setSettingsOpen(true)}>\n <TypeIcon />\n </IconAction>\n {padEnabled && (\n <IconToggle label=\"Scratchpad\" pressed={padOpen} onPressedChange={(open) => (open ? openPad() : setPadOpen(false))}>\n <NotebookPenIcon />\n </IconToggle>\n )}\n </div>\n <ReadingProgress store={engine.percentStore} className=\"absolute inset-x-0 bottom-0\" />\n </header>\n );\n\n const body = (\n <div className={cn(\"mx-auto w-full px-5 pt-8 pb-[calc(7rem+env(safe-area-inset-bottom))] sm:px-8 lg:pt-12\", MEASURE_CLASS[settings.measure])}>\n <p className=\"flex flex-wrap items-center gap-x-2 text-sm text-muted-foreground\">\n {chapter.part && <span>{chapter.part}</span>}\n {chapter.part && <span aria-hidden=\"true\">·</span>}\n <span>{chapter.label ?? `Chapter ${chapterIndex + 1} of ${book.chapters.length}`}</span>\n </p>\n <h1 className={cn(\"mt-1 text-3xl font-semibold tracking-tight text-balance sm:text-4xl\", FONT_CLASS[settings.fontFamily])}>{chapter.title}</h1>\n <article\n ref={setRootEl}\n className={cn(\"mt-8\", PROSE_CLASS, TEXT_SIZE_CLASS[settings.textSize], LEADING_CLASS[settings.leading], FONT_CLASS[settings.fontFamily], settings.highlightMode && \"cursor-pointer\")}\n aria-label={chapter.title}\n >\n {html !== undefined ? <div dangerouslySetInnerHTML={{ __html: html }} /> : children}\n </article>\n\n <footer className=\"mt-16 flex flex-col gap-4 border-t pt-8\">\n {!completed && (\n <Button type=\"button\" variant=\"outline\" className=\"self-center\" onClick={() => store.markChapterComplete(book.id, chapter.id)}>\n <CheckIcon /> Mark chapter as read\n </Button>\n )}\n <nav aria-label=\"Chapters\" className=\"grid grid-cols-2 gap-3\">\n {prev ? (\n <Button asChild variant=\"ghost\" className=\"h-auto flex-col items-start gap-1 py-3 text-left whitespace-normal\">\n <Link href={href(prev.id)}>\n <span className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n <ArrowLeftIcon /> Previous\n </span>\n <span className=\"line-clamp-2 font-medium\">{prev.title}</span>\n </Link>\n </Button>\n ) : (\n <span />\n )}\n {next ? (\n <Button asChild variant=\"secondary\" className=\"col-start-2 h-auto flex-col items-end gap-1 py-3 text-right whitespace-normal\">\n <Link href={href(next.id)}>\n <span className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n Next <ArrowRightIcon />\n </span>\n <span className=\"line-clamp-2 font-medium\">{next.title}</span>\n </Link>\n </Button>\n ) : null}\n </nav>\n </footer>\n </div>\n );\n\n const pad = (onClose: () => void) => (\n <ScratchpadPanel\n bookId={book.id}\n chapterId={chapter.id}\n kind={padKind}\n onKindChange={setPadKind}\n onClose={onClose}\n onEditorFocus={() => setPadSnap(0.95)}\n title={book.id}\n />\n );\n\n const padPanelRef = usePanelRef();\n // Persist the desktop split through the reader's own (SSR-safe) storage adapter.\n const layoutStorage = useMemo(\n () => ({ getItem: (k: string) => store.adapter.get(k), setItem: (k: string, v: string) => store.adapter.set(k, v) }),\n [store],\n );\n const layout = useDefaultLayout({ id: `${options.storagePrefix}:v1:layout`, panelIds: [\"content\", \"pad\"], storage: layoutStorage });\n useEffect(() => {\n const p = padPanelRef.current;\n if (!isDesktop || !p) return;\n if (padOpen && p.isCollapsed()) p.expand();\n if (!padOpen && !p.isCollapsed()) p.collapse();\n }, [padOpen, isDesktop, padPanelRef]);\n\n return (\n <ReaderChapterContext.Provider value={chapterCtx}>\n <div data-zr-reader=\"\" className={cn(\"min-h-svh bg-background text-foreground\", isDesktop && \"flex h-svh flex-col overflow-hidden\", className)}>\n {topBar}\n\n {isDesktop ? (\n <ResizablePanelGroup orientation=\"horizontal\" className=\"min-h-0 flex-1\" defaultLayout={layout.defaultLayout} onLayoutChanged={layout.onLayoutChanged}>\n <ResizablePanel id=\"content\" minSize=\"40%\">\n <div ref={setScrollEl} className=\"h-full overflow-y-auto overscroll-contain\">\n {body}\n </div>\n </ResizablePanel>\n {padEnabled && (\n <>\n <ResizableHandle withHandle className={cn(!padOpen && \"hidden\")} />\n <ResizablePanel\n id=\"pad\"\n panelRef={padPanelRef}\n collapsible\n collapsedSize=\"0%\"\n defaultSize={padOpen ? \"32%\" : \"0%\"}\n minSize=\"22%\"\n maxSize=\"55%\"\n onResize={(size) => setPadOpen(size.asPercentage > 0)}\n className=\"bg-background\"\n >\n {padOpen && pad(() => setPadOpen(false))}\n </ResizablePanel>\n </>\n )}\n </ResizablePanelGroup>\n ) : (\n <main>{body}</main>\n )}\n\n {!isDesktop && padEnabled && (\n <Drawer open={padOpen} onOpenChange={setPadOpen} snapPoints={[0.55, 0.95]} activeSnapPoint={padSnap} setActiveSnapPoint={setPadSnap} repositionInputs={false}>\n <DrawerContent className=\"h-[95svh] max-h-[95svh]\">\n <DrawerTitle className=\"sr-only\">Scratchpad</DrawerTitle>\n <DrawerDescription className=\"sr-only\">Notes and checklists saved in this browser.</DrawerDescription>\n <div className=\"flex min-h-0 flex-1 flex-col pb-[env(safe-area-inset-bottom)]\">{pad(() => setPadOpen(false))}</div>\n </DrawerContent>\n </Drawer>\n )}\n\n <SelectionToolbar\n selection={openHighlightId || settingsOpen || contentsOpen ? null : engine.selection}\n colors={options.highlightColors}\n onHighlight={(span, color) => {\n engine.createHighlight(span, color);\n engine.clearSelection();\n }}\n onSentence={(span) => engine.expandSelectionToSentences(span)}\n onNote={(span) => {\n const h = engine.createHighlight(span);\n engine.clearSelection();\n if (h) {\n setFocusNote(true);\n setOpenHighlightId(h.id);\n }\n }}\n onQuote={padEnabled ? quoteSpan : undefined}\n onCopy={(text) => {\n void copy(text);\n engine.clearSelection();\n }}\n onDismiss={engine.clearSelection}\n />\n\n <HighlightPanel\n highlight={openHighlight}\n colors={options.highlightColors}\n focusNote={focusNote}\n onColor={(color) => openHighlight && store.updateHighlight(book.id, openHighlight.id, { color })}\n onNote={(note) => openHighlight && store.updateHighlight(book.id, openHighlight.id, { note })}\n onDelete={() => {\n if (!openHighlight) return;\n const removed = openHighlight;\n store.removeHighlight(book.id, removed.id);\n setOpenHighlightId(null);\n engine.setActiveId(null);\n toast(\"Highlight deleted\", {\n action: {\n label: \"Undo\",\n onClick: () => store.addHighlight({ bookId: removed.bookId, chapterId: removed.chapterId, anchor: removed.anchor, color: removed.color, note: removed.note }),\n },\n });\n }}\n onQuote={padEnabled && openHighlight ? () => quoteToPad(highlightToMarkdown(openHighlight, href(chapter.id, `hl-${openHighlight.id}`))) : undefined}\n onCopy={openHighlight ? () => void copy(openHighlight.anchor.exact) : undefined}\n onClose={() => {\n setOpenHighlightId(null);\n setFocusNote(false);\n engine.setActiveId(null);\n }}\n />\n\n <ContentsSheet\n open={contentsOpen}\n onOpenChange={setContentsOpen}\n tab={contentsTab}\n onTabChange={setContentsTab}\n book={book}\n chapterId={chapter.id}\n toc={toc}\n hrefFor={(c, h) => href(c, h)}\n Link={Link}\n orphanedIds={orphanedIds}\n onJumpHighlight={(id) => engine.scrollToHighlight(id)}\n onJumpBlock={(id) => engine.scrollToBlock(id)}\n onJumpHeading={(id) => engine.scrollToHeading(id)}\n />\n\n <SettingsPanel open={settingsOpen} onOpenChange={setSettingsOpen} book={book} />\n </div>\n </ReaderChapterContext.Provider>\n );\n}\n","import * as React from \"react\"\nimport { cn } from \"cn\"\n\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card\"\n className={cn(\n \"flex flex-col gap-6 rounded-xl border bg-card py-6 text-card-foreground shadow-sm\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center px-6 [.border-t]:pt-6\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","import { cn } from \"cn\";\nimport { BookOpenIcon, CheckCircle2Icon, ChevronLeftIcon, CircleIcon } from \"lucide-react\";\nimport type { BookMeta } from \"zreader\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Progress } from \"@/components/ui/progress\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport { useBook, useBookmarks, useHighlights, useHydrated, useLibrary, useProgress, type HrefFor } from \"../context\";\nimport type { LinkComponent } from \"../link\";\nimport { chapterMarker, groupByPart } from \"../parts\";\n\nexport interface BookNavProps {\n /** A book id from the provider's catalogue, or the book's metadata. */\n book: BookMeta | string;\n /** Overrides the provider's link component. */\n Link?: LinkComponent;\n /** Overrides the provider's URL builder. */\n hrefFor?: HrefFor;\n className?: string;\n}\n\n/** Resolve the book plus link/URL helpers: explicit props win over the provider. */\nfunction useNav(bookArg: BookMeta | string, LinkProp?: LinkComponent, hrefFor?: HrefFor) {\n const library = useLibrary();\n const book = useBook(bookArg);\n const build = hrefFor ?? library.href;\n return {\n book,\n Link: LinkProp ?? library.Link,\n href: (chapterId?: string, hash?: string) => build(book.id, chapterId, hash),\n };\n}\n\n/** \"Start reading\" / \"Continue: Chapter 3 · 42%\" card for a book page. */\nexport function ContinueReading({ book: bookArg, Link: LinkProp, hrefFor, className }: BookNavProps) {\n const { book, Link, href } = useNav(bookArg, LinkProp, hrefFor);\n const hydrated = useHydrated();\n const progress = useProgress(book.id);\n const highlights = useHighlights(book.id);\n const bookmarks = useBookmarks(book.id);\n\n const first = book.chapters[0];\n const lastId = progress.last?.chapterId;\n const last = book.chapters.find((c) => c.id === lastId);\n const done = book.chapters.filter((c) => progress.chapters[c.id]?.completed).length;\n const overall = book.chapters.length ? done / book.chapters.length : 0;\n const lastPct = last ? Math.round((progress.chapters[last.id]?.percent ?? 0) * 100) : 0;\n\n if (!first) return null;\n\n return (\n <Card className={cn(\"gap-4\", className)}>\n <CardHeader>\n <CardTitle>{last ? \"Continue reading\" : \"Start reading\"}</CardTitle>\n <CardDescription>\n {!hydrated ? <Skeleton className=\"h-4 w-40\" /> : last ? `${last.title} · ${lastPct}%` : `${book.chapters.length} chapters`}\n </CardDescription>\n </CardHeader>\n {hydrated && (done > 0 || highlights.length > 0 || bookmarks.length > 0) && (\n <CardContent className=\"flex flex-col gap-3\">\n <Progress value={Math.round(overall * 100)} aria-label=\"Book progress\" />\n <div className=\"flex flex-wrap gap-2 text-sm text-muted-foreground\">\n <Badge variant=\"secondary\">\n {done}/{book.chapters.length} chapters read\n </Badge>\n {highlights.length > 0 && <Badge variant=\"secondary\">{highlights.length} highlights</Badge>}\n {bookmarks.length > 0 && <Badge variant=\"secondary\">{bookmarks.length} bookmarks</Badge>}\n </div>\n </CardContent>\n )}\n <CardFooter>\n <Button asChild className=\"w-full sm:w-auto\">\n <Link href={last ? href(last.id, progress.last?.blockId ? `b-${progress.last.blockId}` : undefined) : href(first.id)}>\n <BookOpenIcon /> {last ? \"Continue\" : \"Start\"}\n </Link>\n </Button>\n </CardFooter>\n </Card>\n );\n}\n\n/** Chapter list with read state, grouped by `part` when chapters declare one. */\nexport function ChapterList({ book: bookArg, Link: LinkProp, hrefFor, className }: BookNavProps) {\n const { book, Link, href } = useNav(bookArg, LinkProp, hrefFor);\n const hydrated = useHydrated();\n const progress = useProgress(book.id);\n return (\n <div className={cn(\"flex flex-col gap-6\", className)}>\n {groupByPart(book.chapters).map((group) => (\n <section key={group.part ?? \"_\"} className=\"flex flex-col gap-2\">\n {group.part && <h3 className=\"text-sm font-medium text-muted-foreground\">{group.part}</h3>}\n <ol className=\"flex flex-col divide-y overflow-hidden rounded-xl border\">\n {group.items.map(({ chapter: c, index: i }) => {\n const pr = hydrated ? progress.chapters[c.id] : undefined;\n return (\n <li key={c.id}>\n <Button asChild variant=\"ghost\" className=\"h-auto w-full justify-start gap-4 rounded-none px-4 py-3 text-left whitespace-normal\">\n <Link href={href(c.id)}>\n <span className=\"w-6 shrink-0 text-sm text-muted-foreground tabular-nums\">{chapterMarker(c, i)}</span>\n <span className=\"flex flex-1 flex-col gap-0.5\">\n <span className=\"font-medium\">{c.title}</span>\n {c.description && <span className=\"text-sm font-normal text-muted-foreground\">{c.description}</span>}\n </span>\n {pr?.completed ? (\n <CheckCircle2Icon className=\"text-primary\" aria-label=\"Read\" />\n ) : pr ? (\n <span className=\"text-xs text-muted-foreground tabular-nums\">{Math.round(pr.percent * 100)}%</span>\n ) : (\n <CircleIcon className=\"text-muted-foreground/40\" aria-hidden />\n )}\n </Link>\n </Button>\n </li>\n );\n })}\n </ol>\n </section>\n ))}\n </div>\n );\n}\n\nexport interface BookShelfProps {\n /** Defaults to the provider's catalogue (<ReaderProvider books>). */\n books?: BookMeta[];\n Link?: LinkComponent;\n hrefFor?: HrefFor;\n title?: string;\n description?: string;\n /**\n * Render only the grid, without the full-page shell (background, padding,\n * title), for embedding inside a host site's own page layout.\n */\n embedded?: boolean;\n className?: string;\n}\n\n/** Grid of book cards linking to each book's home. */\nexport function BookShelf({ books: booksProp, Link: LinkProp, hrefFor, title = \"Books\", description, embedded, className }: BookShelfProps) {\n const library = useLibrary();\n const books = booksProp ?? library.books;\n const Link = LinkProp ?? library.Link;\n const build = hrefFor ?? library.href;\n const hydrated = useHydrated();\n const grid =\n books.length === 0 ? (\n <p className=\"text-muted-foreground\">No books published yet.</p>\n ) : (\n <ul className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {books.map((book) => (\n <li key={book.id}>\n <BookCard book={book} Link={Link} href={build(book.id)} hydrated={hydrated} />\n </li>\n ))}\n </ul>\n );\n\n if (embedded) {\n return (\n <div data-zr-reader=\"\" className={cn(\"text-foreground\", className)}>\n {grid}\n </div>\n );\n }\n\n return (\n <div data-zr-reader=\"\" className={cn(\"min-h-svh bg-background text-foreground\", className)}>\n <div className=\"mx-auto flex max-w-5xl flex-col gap-8 px-5 py-10 sm:px-8 sm:py-16\">\n <header className=\"flex flex-col gap-2\">\n <h1 className=\"font-serif text-3xl font-semibold tracking-tight sm:text-4xl\">{title}</h1>\n {description && <p className=\"max-w-prose text-muted-foreground\">{description}</p>}\n </header>\n {grid}\n </div>\n </div>\n );\n}\n\nfunction BookCard({ book, Link, href, hydrated }: { book: BookMeta; Link: LinkComponent; href: string; hydrated: boolean }) {\n const progress = useProgress(book.id);\n const done = hydrated ? book.chapters.filter((c) => progress.chapters[c.id]?.completed).length : 0;\n return (\n <Card className=\"relative h-full gap-4 transition-shadow hover:shadow-md\">\n <CardHeader>\n <CardTitle className=\"font-serif text-xl\">\n <Link href={href} className=\"after:absolute after:inset-0 focus-visible:outline-none\">\n {book.title}\n </Link>\n </CardTitle>\n {book.authors.length > 0 && <CardDescription>{book.authors.join(\", \")}</CardDescription>}\n </CardHeader>\n {book.description && (\n <CardContent>\n <p className=\"line-clamp-3 text-sm text-muted-foreground\">{book.description}</p>\n </CardContent>\n )}\n <CardFooter className=\"mt-auto flex items-center justify-between gap-2 text-sm text-muted-foreground\">\n <span>{book.chapters.length} chapters</span>\n {done > 0 && <Badge variant=\"secondary\">{done === book.chapters.length ? \"Finished\" : `${done} read`}</Badge>}\n </CardFooter>\n </Card>\n );\n}\n\nexport interface BookHomeProps extends BookNavProps {\n /** Back link (e.g. to the shelf). */\n backHref?: string;\n backLabel?: string;\n /**\n * Render only the continue card and chapter list, without the full-page shell\n * or title block, for embedding inside a host site's own page layout.\n */\n embedded?: boolean;\n}\n\n/** A book's contents page: title, authors, continue card and chapter list. */\nexport function BookHome({ book: bookArg, Link: LinkProp, hrefFor, backHref, backLabel = \"All books\", embedded, className }: BookHomeProps) {\n const { book, Link } = useNav(bookArg, LinkProp, hrefFor);\n if (embedded) {\n return (\n <div data-zr-reader=\"\" className={cn(\"flex flex-col gap-8 text-foreground\", className)}>\n <ContinueReading book={book} Link={Link} hrefFor={hrefFor} />\n <section className=\"flex flex-col gap-3\" aria-labelledby=\"zr-chapters\">\n <h2 id=\"zr-chapters\" className=\"text-sm font-medium tracking-wide text-muted-foreground uppercase\">\n Chapters\n </h2>\n <ChapterList book={book} Link={Link} hrefFor={hrefFor} />\n </section>\n </div>\n );\n }\n return (\n <div data-zr-reader=\"\" className={cn(\"min-h-svh bg-background text-foreground\", className)}>\n <div className=\"mx-auto flex max-w-3xl flex-col gap-8 px-5 py-8 sm:px-8 sm:py-14\">\n {backHref && (\n <Button asChild variant=\"ghost\" size=\"sm\" className=\"self-start\">\n <Link href={backHref}>\n <ChevronLeftIcon /> {backLabel}\n </Link>\n </Button>\n )}\n <header className=\"flex flex-col gap-3\">\n <h1 className=\"font-serif text-3xl font-semibold tracking-tight text-balance sm:text-5xl\">{book.title}</h1>\n {book.subtitle && <p className=\"font-serif text-xl text-balance text-foreground/80 sm:text-2xl\">{book.subtitle}</p>}\n {book.authors.length > 0 && <p className=\"text-muted-foreground\">{book.authors.join(\", \")}</p>}\n {book.description && <p className=\"max-w-prose text-lg text-foreground/80\">{book.description}</p>}\n </header>\n <ContinueReading book={book} Link={Link} hrefFor={hrefFor} />\n <section className=\"flex flex-col gap-3\" aria-labelledby=\"zr-chapters\">\n <h2 id=\"zr-chapters\" className=\"text-sm font-medium tracking-wide text-muted-foreground uppercase\">\n Chapters\n </h2>\n <ChapterList book={book} Link={Link} hrefFor={hrefFor} />\n </section>\n </div>\n </div>\n );\n}\n\n/** Alias of <BookHome>: a book's contents page. */\nexport const BookContents = BookHome;\nexport type BookContentsProps = BookHomeProps;\n","import type { ReactNode } from \"react\";\nimport { LightbulbIcon } from \"lucide-react\";\nimport { Alert, AlertDescription, AlertTitle } from \"@/components/ui/alert\";\n\nexport interface CalloutProps {\n title?: string;\n children?: ReactNode;\n}\n\n/** `<Callout title=\"…\">…</Callout>` for MDX chapters. Ignored by highlighting. */\nexport function Callout({ title, children }: CalloutProps) {\n return (\n <Alert className=\"not-prose my-6\" data-zr-ignore=\"\">\n <LightbulbIcon />\n {title && <AlertTitle>{title}</AlertTitle>}\n <AlertDescription>{children}</AlertDescription>\n </Alert>\n );\n}\n"]}