@linloir/limr 0.1.0 → 1.0.1

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.
Files changed (97) hide show
  1. package/README.en.md +151 -0
  2. package/README.md +80 -127
  3. package/benchmarks/results/layout.json +2593 -0
  4. package/benchmarks/results/markstream-code.json +1823 -0
  5. package/benchmarks/results/markstream-reading-repeat.json +1152 -0
  6. package/benchmarks/results/markstream.json +12486 -0
  7. package/benchmarks/results/streaming-browser.json +77 -0
  8. package/benchmarks/results/streaming.json +357 -0
  9. package/dist/base.css +93 -10
  10. package/dist/{chunk-7JF5HHVF.js → chunk-BG5QUQFR.js} +340 -72
  11. package/dist/chunk-BG5QUQFR.js.map +1 -0
  12. package/dist/chunk-BVHHOVMT.js +179 -0
  13. package/dist/chunk-BVHHOVMT.js.map +1 -0
  14. package/dist/chunk-FJZCQY2S.js +155 -0
  15. package/dist/chunk-FJZCQY2S.js.map +1 -0
  16. package/dist/chunk-FSI5OTBW.js +1 -0
  17. package/dist/{chunk-ETHLPBKQ.js → chunk-GU2RPESF.js} +238 -131
  18. package/dist/chunk-GU2RPESF.js.map +1 -0
  19. package/dist/{chunk-65V5OZ4G.js → chunk-SUAAUGAX.js} +1350 -511
  20. package/dist/chunk-SUAAUGAX.js.map +1 -0
  21. package/dist/core/index.d.ts +6 -3
  22. package/dist/core/index.js +15 -5
  23. package/dist/extensions/index.d.ts +30 -5
  24. package/dist/extensions/index.js +15 -3
  25. package/dist/index.d.ts +4 -4
  26. package/dist/index.js +31 -8
  27. package/dist/{engine-43u8B4yt.d.ts → knuth-plass-C8mgFm7W.d.ts} +67 -1
  28. package/dist/knuth-plass-layout-CHQCWKB5.js +449 -0
  29. package/dist/knuth-plass-layout-CHQCWKB5.js.map +1 -0
  30. package/dist/react/index.d.ts +7 -5
  31. package/dist/react/index.js +7 -3
  32. package/dist/styles.css +93 -10
  33. package/dist/{translations-BliabrPd.d.ts → translations-BXzSwLBJ.d.ts} +49 -4
  34. package/docs/README.md +13 -0
  35. package/docs/api.md +5 -158
  36. package/docs/assets/rendered.svg +9 -0
  37. package/docs/assets/source.svg +9 -0
  38. package/docs/en/README.md +28 -0
  39. package/docs/en/ai-skills.md +57 -0
  40. package/docs/en/annotations.md +86 -0
  41. package/docs/en/api.md +115 -0
  42. package/docs/en/architecture.md +41 -0
  43. package/docs/en/extensions.md +208 -0
  44. package/docs/en/getting-started.md +69 -0
  45. package/docs/en/integration.md +154 -0
  46. package/docs/en/modules.md +84 -0
  47. package/docs/en/performance.md +93 -0
  48. package/docs/en/plugin-packages.md +68 -0
  49. package/docs/en/styles.md +99 -0
  50. package/docs/en/syntax.md +455 -0
  51. package/docs/extensions.md +5 -306
  52. package/docs/implementation.md +5 -76
  53. package/docs/performance.md +5 -81
  54. package/docs/screenshots/blocks.png +0 -0
  55. package/docs/screenshots/dark.png +0 -0
  56. package/docs/screenshots/desktop.png +0 -0
  57. package/docs/screenshots/plugin-mobile.png +0 -0
  58. package/docs/styles.md +5 -100
  59. package/docs/visual-upgrade.md +5 -145
  60. package/docs/zh-CN/README.md +28 -0
  61. package/docs/zh-CN/ai-skills.md +57 -0
  62. package/docs/zh-CN/annotations.md +86 -0
  63. package/docs/zh-CN/api.md +115 -0
  64. package/docs/zh-CN/architecture.md +41 -0
  65. package/docs/zh-CN/extensions.md +210 -0
  66. package/docs/zh-CN/getting-started.md +69 -0
  67. package/docs/zh-CN/integration.md +154 -0
  68. package/docs/zh-CN/modules.md +84 -0
  69. package/docs/zh-CN/performance.md +93 -0
  70. package/docs/zh-CN/plugin-packages.md +68 -0
  71. package/docs/zh-CN/styles.md +99 -0
  72. package/docs/zh-CN/syntax.md +457 -0
  73. package/examples/notes.tsx +18 -11
  74. package/examples/packages/paper-theme/index.css +25 -0
  75. package/examples/packages/paper-theme/package.json +7 -0
  76. package/examples/packages/reading-tools/index.d.ts +2 -0
  77. package/examples/packages/reading-tools/index.js +25 -0
  78. package/examples/packages/reading-tools/package.json +16 -0
  79. package/package.json +17 -5
  80. package/skills/limr-plugin-development/SKILL.md +22 -0
  81. package/skills/limr-plugin-development/agents/openai.yaml +4 -0
  82. package/skills/limr-plugin-development/assets/plugin-template/README.md +30 -0
  83. package/skills/limr-plugin-development/assets/plugin-template/package.json +36 -0
  84. package/skills/limr-plugin-development/assets/plugin-template/src/index.tsx +50 -0
  85. package/skills/limr-plugin-development/assets/plugin-template/src/styles.css +9 -0
  86. package/skills/limr-plugin-development/assets/plugin-template/tsconfig.json +20 -0
  87. package/skills/limr-plugin-development/assets/plugin-template/tsup.config.ts +8 -0
  88. package/skills/limr-plugin-development/references/contract.md +51 -0
  89. package/skills/limr-use/SKILL.md +23 -0
  90. package/skills/limr-use/agents/openai.yaml +4 -0
  91. package/skills/limr-use/references/integration.md +49 -0
  92. package/skills/limr-use/references/syntax.md +20 -0
  93. package/dist/chunk-65V5OZ4G.js.map +0 -1
  94. package/dist/chunk-7JF5HHVF.js.map +0 -1
  95. package/dist/chunk-ETHLPBKQ.js.map +0 -1
  96. package/dist/chunk-V2OG4Y3F.js +0 -1
  97. /package/dist/{chunk-V2OG4Y3F.js.map → chunk-FSI5OTBW.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Reader.tsx","../src/components/TableOfContents.tsx","../src/react/overflow-fade.ts","../src/components/AnnotationSidebar.tsx","../src/components/AnnotationContent.tsx","../src/components/annotation-reference.ts","../src/components/AnnotationOverlay.tsx","../src/components/card-motion.ts","../src/components/SelectionToolbar.tsx","../src/components/ToolFaces.tsx"],"sourcesContent":["import { useEffect, useId, useRef, useState, type CSSProperties } from 'react';\nimport { useAppearance, DocumentProvider, useIsomorphicLayoutEffect, useLocale, useRuntime, useStoreSelector, useTheme, type DocumentProviderProps } from '../react/context';\nimport { Markdown } from '../react/Markdown';\nimport type { SelectionAction, StyledProps } from '../react/types';\nimport { TableOfContents } from './TableOfContents';\nimport { AnnotationSidebar } from './AnnotationSidebar';\nimport { AnnotationOverlay } from './AnnotationOverlay';\nimport { SelectionToolbar } from './SelectionToolbar';\nimport { Collapse } from './Collapse';\nimport { useOverflowFade } from '../react/overflow-fade';\n\nexport interface ReaderProps extends Omit<DocumentProviderProps, 'children'>, StyledProps {\n actions?: readonly SelectionAction[];\n toc?: boolean;\n sidebar?: boolean;\n followOutput?: boolean;\n sidebarBreakpoint?: number;\n /** Fill unused viewport height without deriving the layout from annotations. */\n fillHeight?: boolean;\n}\nexport function Reader({ actions, toc = true, sidebar = true, followOutput = false, sidebarBreakpoint = 1120, fillHeight = true, className, style, ...provider }: ReaderProps) {\n return <DocumentProvider {...provider}><ReaderLayout actions={actions} toc={toc} sidebar={sidebar} followOutput={followOutput} sidebarBreakpoint={sidebarBreakpoint} fillHeight={fillHeight} className={className} style={style} /></DocumentProvider>;\n}\nfunction ReaderLayout({ actions, toc, sidebar, followOutput, sidebarBreakpoint, fillHeight, className, style }: Pick<ReaderProps, 'actions' | 'toc' | 'sidebar' | 'followOutput' | 'className' | 'style' | 'fillHeight'> & { sidebarBreakpoint: number }) {\n const runtime = useRuntime();\n const scrollRoot = useStoreSelector(runtime.configuration, config => config.scrollRoot);\n const layout = useStoreSelector(runtime.layout, value => value);\n const appearance = useAppearance();\n const theme = useTheme();\n const ref = useRef<HTMLDivElement>(null);\n const tocRail = useRef<HTMLDivElement>(null);\n const content = useRef<HTMLElement>(null);\n useOverflowFade(content, runtime, ':scope > .limr-prose');\n const [width, setWidth] = useState(0);\n const [availableHeight, setAvailableHeight] = useState(0);\n useIsomorphicLayoutEffect(() => {\n if (!fillHeight || !ref.current) return;\n // Use the origin in scroll coordinates. Scrolling must not grow/shrink the\n // reading canvas and feed back into the page's scroll range.\n const origin = ref.current.getBoundingClientRect().top - runtime.getViewportTop() - (scrollRoot?.clientTop ?? 0) + runtime.getScrollTop();\n setAvailableHeight(Math.max(0, (scrollRoot?.clientHeight ?? window.innerHeight) - origin));\n }, [runtime, scrollRoot, fillHeight, layout, width]);\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n const observer = new ResizeObserver(() => { setWidth(element.clientWidth); runtime.requestLayout(); });\n observer.observe(element);\n if (scrollRoot) observer.observe(scrollRoot);\n if (element.parentElement) observer.observe(element.parentElement);\n setWidth(element.clientWidth);\n return () => observer.disconnect();\n }, [runtime, scrollRoot, sidebarBreakpoint]);\n useIsomorphicLayoutEffect(() => {\n const rail = tocRail.current;\n if (!rail) return;\n let frame = 0;\n const measure = () => {\n frame = 0;\n if (!rail.clientWidth) return;\n const viewport = window.visualViewport;\n let top = viewport?.offsetTop ?? 0, bottom = top + (viewport?.height ?? window.innerHeight);\n if (scrollRoot) {\n const origin = scrollRoot.getBoundingClientRect().top + scrollRoot.clientTop;\n top = Math.max(top, origin); bottom = Math.min(bottom, origin + scrollRoot.clientHeight);\n }\n const reader = ref.current!.getBoundingClientRect();\n // A reader that has left the viewport must not cover the next reader.\n rail.toggleAttribute('inert', reader.bottom <= top || reader.top >= bottom);\n const height = `${Math.max(0, bottom - Math.max(top, rail.getBoundingClientRect().top)).toFixed(2)}px`;\n if (rail.style.getPropertyValue('--limr-toc-available-height') !== height) rail.style.setProperty('--limr-toc-available-height', height);\n };\n const schedule = () => { if (!frame) frame = requestAnimationFrame(measure); };\n const unsubscribe = [runtime.layout.subscribe(schedule), runtime.viewport.subscribe(schedule)];\n window.addEventListener('scroll', schedule, { passive: true });\n window.addEventListener('resize', schedule);\n window.visualViewport?.addEventListener('resize', schedule);\n window.visualViewport?.addEventListener('scroll', schedule);\n measure();\n return () => {\n cancelAnimationFrame(frame); unsubscribe.forEach(fn => fn());\n window.removeEventListener('scroll', schedule); window.removeEventListener('resize', schedule);\n window.visualViewport?.removeEventListener('resize', schedule); window.visualViewport?.removeEventListener('scroll', schedule);\n rail.removeAttribute('inert'); rail.style.removeProperty('--limr-toc-available-height');\n };\n }, [runtime, scrollRoot, toc]);\n const sidebarVisible = !!sidebar && width >= sidebarBreakpoint;\n return <div ref={ref} className={`limr-reader ${className ?? ''}`} style={{ '--limr-reader-available-height': fillHeight ? `${availableHeight}px` : undefined, ...style } as CSSProperties} data-fill-height={fillHeight || undefined} data-sidebar={sidebarVisible || undefined} data-toc={toc && width >= 800 || undefined} data-limr-theme={theme} data-limr-appearance={appearance}>\n {toc && <><div ref={tocRail} className=\"limr-reader-toc\"><TableOfContents /></div><MobileContents /></>}\n <main ref={content} className=\"limr-reader-content\"><Markdown followOutput={followOutput} /></main>\n {sidebarVisible && <AnnotationSidebar />}\n <AnnotationOverlay disabled={sidebarVisible} />\n <SelectionToolbar actions={actions} />\n </div>;\n}\n\nfunction MobileContents() {\n const locale = useLocale();\n const [open, setOpen] = useState(false);\n const id = useId();\n return <div className=\"limr-reader-mobile-toc\">\n <button type=\"button\" className=\"limr-mobile-toc-toggle\" aria-expanded={open} aria-controls={id} onClick={() => setOpen(value => !value)}>\n <span>{locale.contents}</span><svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\"><path d=\"m6 8 4 4 4-4\" /></svg>\n </button>\n <div id={id}><Collapse open={open} keepMounted><TableOfContents /></Collapse></div>\n </div>;\n}\n","import { useEffect, useRef } from 'react';\nimport { useAppearance, useDocumentSelector, useLocale, useRuntime, useStoreSelector, useTheme } from '../react/context';\nimport type { StyledProps } from '../react/types';\nimport { scrollWithMotion } from '../react/motion';\nimport { useOverflowFade } from '../react/overflow-fade';\n\nexport interface TableOfContentsProps extends StyledProps { title?: string; maxDepth?: number; followActive?: boolean; topInset?: number; updateHash?: boolean }\nexport function TableOfContents({ title, maxDepth = 6, followActive = true, topInset = 24, updateHash = false, className, style }: TableOfContentsProps) {\n const runtime = useRuntime();\n const appearance = useAppearance();\n const theme = useTheme(), locale = useLocale();\n const headings = useDocumentSelector(doc => doc.headings);\n useStoreSelector(runtime.layout, value => value);\n const active = useStoreSelector(runtime.interaction, state => state.activeHeading);\n const list = useRef<HTMLDivElement>(null);\n useOverflowFade(list, runtime, ':scope > ol');\n const manualUntil = useRef(0);\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const visible = headings.filter(heading => heading.level <= maxDepth && !runtime.headings.get(heading.id)?.closest('[inert]'));\n visible.sort((a, b) => {\n const left = runtime.headings.get(a.id), right = runtime.headings.get(b.id);\n return left && right && left !== right ? left.compareDocumentPosition(right) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1 : 0;\n });\n const minimum = Math.min(...visible.map(heading => heading.level), 6);\n useEffect(() => {\n if (!followActive || !active) return;\n const follow = () => {\n const container = list.current;\n if (!container || container.clientHeight === 0) return;\n const element = Array.from(container.querySelectorAll<HTMLElement>('[data-heading]')).find(item => item.dataset.heading === active);\n if (!element) return;\n const top = element.getBoundingClientRect().top - container.getBoundingClientRect().top + container.scrollTop - topInset;\n const target = Math.max(0, Math.min(top, container.scrollHeight - container.clientHeight));\n if (Math.abs(target - container.scrollTop) > 1) scrollWithMotion(container, target);\n };\n const delay = Math.max(0, manualUntil.current - Date.now());\n timer.current = setTimeout(follow, delay);\n return () => clearTimeout(timer.current);\n }, [active, headings, followActive, topInset]);\n const manual = () => { manualUntil.current = Date.now() + 1200; clearTimeout(timer.current); };\n return <nav className={`limr-toc ${className ?? ''}`} style={style} data-limr-theme={theme} data-limr-appearance={appearance} aria-label={title ?? locale.contents}>\n <div className=\"limr-toc-title\">{title ?? locale.contents}</div>\n <div className=\"limr-toc-scroll\" ref={list} onWheel={manual} onTouchStart={manual} onKeyDown={manual} tabIndex={0}>\n <ol>{visible.map(heading => <li key={heading.id}><a data-heading={heading.id} href={`#${heading.id}`} aria-current={heading.id === active ? 'location' : undefined}\n style={{ paddingInlineStart: 12 + Math.min(heading.level - minimum, 4) * 14 }}\n onClick={event => { event.preventDefault(); runtime.scrollToHeading(heading.id); if (updateHash) history.replaceState(history.state, '', `#${heading.id}`); }}><span className=\"limr-underline\">{heading.text}</span></a></li>)}</ol>\n </div>\n </nav>;\n}\n","import { useEffect, type RefObject } from 'react';\nimport type { ReaderRuntime } from './runtime';\n\n/** Follow actual clipping edges, including a nested viewport and in-flight\n * document/card motion. Masks never reserve space or change scroll geometry. */\nexport function useOverflowFade(ref: RefObject<HTMLElement | null>, runtime: ReaderRuntime, contentSelector: string, beforeMeasure?: () => void) {\n useEffect(() => {\n const host = ref.current;\n if (!host) return;\n let frame = 0;\n const transitions = new Map<Element, Map<string, number>>();\n const measure = () => {\n frame = 0;\n // Constraint-driven cards must finish positioning with this frame's\n // heights before clipping is tested. Even a transient mask toggle can\n // invalidate the composited layer while a footer card grows upward.\n beforeMeasure?.();\n const box = host.getBoundingClientRect();\n const viewport = window.visualViewport;\n let top = Math.max(box.top, viewport?.offsetTop ?? 0);\n let bottom = Math.min(box.bottom, (viewport?.offsetTop ?? 0) + (viewport?.height ?? innerHeight));\n const root = runtime.configuration.get().scrollRoot;\n if (root) { const bounds = root.getBoundingClientRect(); top = Math.max(top, bounds.top + root.clientTop); bottom = Math.min(bottom, bounds.top + root.clientTop + root.clientHeight); }\n const contents = [...host.querySelectorAll<HTMLElement>(contentSelector)].map(element => element.getBoundingClientRect());\n const clipsTop = bottom > top && contents.some(rect => rect.top < top - .5);\n const clipsBottom = bottom > top && contents.some(rect => rect.bottom > bottom + .5);\n host.toggleAttribute('data-overflow-top', clipsTop);\n host.toggleAttribute('data-overflow-bottom', clipsBottom);\n const set = (name: string, value: number) => { const css = `${Math.max(0, value).toFixed(2)}px`; if (host.style.getPropertyValue(name) !== css) host.style.setProperty(name, css); };\n set('--limr-fade-start', top - box.top);\n set('--limr-fade-end', bottom - box.top);\n const now = performance.now();\n for (const [target, properties] of transitions) {\n for (const [property, end] of properties) if (end <= now || !host.contains(target)) properties.delete(property);\n if (!properties.size) transitions.delete(target);\n }\n // Enumerating animations across the entire subtree forces style/layout\n // after the mask writes above, once per frame. Track geometry transitions\n // from their lifecycle events instead; detached nodes expire as well.\n if (transitions.size) schedule();\n };\n const schedule = () => { if (!frame) frame = requestAnimationFrame(measure); };\n const refresh = () => { cancelAnimationFrame(frame); measure(); };\n const start = (event: TransitionEvent) => {\n const target = event.target;\n if (!(target instanceof Element) || !/^(top|bottom|left|right|height|max-height|min-height|width|max-width|transform|translate|grid-template-rows|padding.*|margin.*)$/.test(event.propertyName)) return;\n const css = getComputedStyle(target), properties = css.transitionProperty.split(',').map(value => value.trim());\n const index = Math.max(0, properties.indexOf(event.propertyName));\n const milliseconds = (value: string) => { const list = value.split(','); const item = list[index % list.length].trim(); return parseFloat(item) * (item.endsWith('ms') ? 1 : 1000); };\n const pending = transitions.get(target) ?? new Map<string, number>();\n pending.set(event.propertyName, performance.now() + milliseconds(css.transitionDuration) + milliseconds(css.transitionDelay) + 34);\n transitions.set(target, pending); schedule();\n };\n const end = (event: TransitionEvent) => {\n if (event.target instanceof Element) transitions.get(event.target)?.delete(event.propertyName);\n schedule();\n };\n host.addEventListener('transitionrun', start);\n host.addEventListener('transitionend', end);\n host.addEventListener('transitioncancel', end);\n const resize = new ResizeObserver(refresh); resize.observe(host);\n const mutation = new MutationObserver(records => {\n // ResizeObserver can synchronously reposition growing sidebar cards.\n // Read that committed geometry before paint, not on the next frame after\n // their CSS heights have advanced again and outrun the stored positions.\n if (records.some(record => {\n const element = record.target instanceof Element ? record.target : record.target.parentElement;\n return element && element !== host && !element.closest('.limr-highlight-layer,.limr-paint-layer');\n })) {\n if (beforeMeasure) refresh(); else schedule();\n }\n });\n mutation.observe(host, { subtree: true, childList: true, characterData: true, attributes: true, attributeFilter: ['style', 'class'] });\n const unsubscribe = [runtime.layout.subscribe(schedule), runtime.viewport.subscribe(refresh), runtime.documentOffset.subscribe(schedule), runtime.configuration.subscribe(schedule)];\n const scroll = (event: Event) => {\n const target = event.target;\n if (target === window.document || target === window || target instanceof Element && target.contains(host)) refresh();\n };\n // Capture nested scrolling directly; routing it through the runtime's frame\n // notification and then another rAF makes a viewport-fixed fade trail text.\n window.addEventListener('scroll', scroll, { capture: true, passive: true });\n window.addEventListener('resize', schedule);\n window.visualViewport?.addEventListener('resize', schedule);\n window.visualViewport?.addEventListener('scroll', refresh);\n schedule();\n return () => {\n cancelAnimationFrame(frame); resize.disconnect(); mutation.disconnect(); unsubscribe.forEach(fn => fn());\n host.removeEventListener('transitionrun', start); host.removeEventListener('transitionend', end); host.removeEventListener('transitioncancel', end);\n window.removeEventListener('scroll', scroll, true); window.removeEventListener('resize', schedule);\n window.visualViewport?.removeEventListener('resize', schedule); window.visualViewport?.removeEventListener('scroll', refresh);\n host.removeAttribute('data-overflow-top'); host.removeAttribute('data-overflow-bottom');\n host.style.removeProperty('--limr-fade-start'); host.style.removeProperty('--limr-fade-end');\n };\n }, [ref, runtime, contentSelector, beforeMeasure]);\n}\n","import { memo, useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore, type CSSProperties, type ReactNode } from 'react';\nimport { flushSync } from 'react-dom';\nimport { useAppearance, useDocument, useIsomorphicLayoutEffect, useLocale, useRuntime, useStoreSelector, useTheme } from '../react/context';\nimport type { Annotation, AnnotationOccurrence } from '../core';\nimport type { AnnotationSidebarPreviewProps, StyledProps } from '../react/types';\nimport type { ComponentType } from 'react';\nimport { AnnotationGroup } from './AnnotationContent';\nimport { Collapse } from './Collapse';\nimport { annotationReferenceText } from './annotation-reference';\nimport { sourceRangeStartRect } from '../react/source-geometry';\nimport { useOverflowFade } from '../react/overflow-fade';\n\n/** anchorTop is the first referenced text line, falling back to the marker. */\nexport interface SidebarItem { id: string; anchorTop: number; height: number }\nexport type SidebarPositioner = (items: readonly SidebarItem[], context: { activeId: string | null; gap: number; height?: number; prioritizeActive?: boolean }) => ReadonlyMap<string, number>;\nexport const alignSidebar: SidebarPositioner = (items, { activeId, gap, height, prioritizeActive }) => {\n const positions = items.map(item => item.anchorTop);\n const activeIndex = items.findIndex(item => item.id === activeId);\n const pivot = activeIndex < 0 ? 0 : activeIndex;\n if (!items.length) return new Map();\n positions[pivot] = height === undefined ? items[pivot].anchorTop : Math.max(0, Math.min(items[pivot].anchorTop, height - items[pivot].height));\n for (let i = pivot - 1; i >= 0; i--) positions[i] = Math.min(items[i].anchorTop, positions[i + 1] - items[i].height - gap);\n // Earlier cards may move above the clipped rail. Keeping them above zero\n // would push a late active card away from its anchor in a short document.\n for (let i = pivot + 1; i < items.length; i++) positions[i] = Math.max(items[i].anchorTop, positions[i - 1] + items[i - 1].height + gap);\n if (height !== undefined && items.reduce((sum, item) => sum + item.height, gap * (items.length - 1)) <= height) {\n // With enough total room, borrow unused space above the final cards.\n // Earlier cards intentionally clipped by the focused pivot must stay there:\n // restoring the top boundary would push that card away from its reference.\n const start = prioritizeActive && activeIndex >= 0 ? pivot + 1 : 0;\n for (let i = items.length - 1; i >= start; i--) positions[i] = Math.min(positions[i], (i === items.length - 1 ? height : positions[i + 1] - gap) - items[i].height);\n if (start || activeIndex < 0 || positions[0] >= 0) for (let i = start; i < items.length; i++) positions[i] = Math.max(positions[i], i === 0 ? 0 : positions[i - 1] + items[i - 1].height + gap);\n }\n return new Map(items.map((item, index) => [item.id, positions[index]]));\n};\n\nexport interface AnnotationSidebarProps extends StyledProps {\n sync?: 'document' | 'none';\n gap?: number;\n positioner?: SidebarPositioner;\n renderCard?: (props: { occurrence: AnnotationOccurrence; active: boolean; activate: () => void }) => ReactNode;\n}\n/** Position changes on scroll do not change a card's content. Keep its nested\n * renderer, disclosure controls and plugin preview out of the scroll render. */\nconst SidebarCardBody = memo(function SidebarCardBody({ occurrence, annotation, annotations, reference, active, title, toggleLabel, Preview, activate }: {\n occurrence: AnnotationOccurrence; annotation?: Annotation; annotations: readonly Annotation[]; reference: string; active: boolean; title: string; toggleLabel: string;\n Preview?: ComponentType<AnnotationSidebarPreviewProps<any>> | false; activate: (id: string) => void;\n}) {\n return <>\n {reference && <div className=\"limr-sidebar-reference\" title={reference}><p className=\"limr-sidebar-excerpt\">{reference}</p></div>}\n <div className=\"limr-sidebar-card-body\">\n <button type=\"button\" className=\"limr-sidebar-card-heading\" onClick={() => activate(occurrence.id)} aria-expanded={active}>{title}<span className=\"limr-sidebar-toggle\"><span key={String(active)} className=\"limr-button-label limr-underline\">{toggleLabel}</span></span></button>\n {Preview && annotation && <Collapse open={!active} keepMounted className=\"limr-sidebar-preview-panel\"><div className=\"limr-sidebar-preview\"><Preview annotation={annotation} data={annotation.data} occurrence={occurrence} annotations={annotations} referenceText={reference} /></div></Collapse>}\n <Collapse open={active} className=\"limr-sidebar-expansion\"><div className=\"limr-sidebar-card-content\"><AnnotationGroup occurrence={occurrence} presentation=\"sidebar\" enabled={active} /></div></Collapse>\n </div>\n </>;\n});\nexport function AnnotationSidebar({ sync = 'document', gap = 14, positioner = alignSidebar, renderCard, className, style }: AnnotationSidebarProps) {\n const runtime = useRuntime();\n const document = useDocument();\n const appearance = useAppearance();\n const theme = useTheme(), locale = useLocale();\n const decorations = useStoreSelector(runtime.decorations, value => value);\n const active = useStoreSelector(runtime.interaction, state => state.active);\n const hovered = useStoreSelector(runtime.interaction, state => state.hovered);\n const hoverSource = useStoreSelector(runtime.interaction, state => state.hoverSource);\n const activeSource = useStoreSelector(runtime.interaction, state => state.activeSource);\n useSyncExternalStore(runtime.configuration.subscribe, runtime.configuration.get, runtime.configuration.get);\n const layout = useSyncExternalStore(runtime.layout.subscribe, runtime.layout.get, runtime.layout.get);\n const viewport = useSyncExternalStore(runtime.viewport.subscribe, runtime.viewport.get, runtime.viewport.get);\n const rail = useRef<HTMLElement>(null);\n const cards = useRef(new Map<string, HTMLDivElement>());\n const [sizes, setSizes] = useState<Map<string, number>>(new Map());\n const [minimumSizes, setMinimumSizes] = useState<Map<string, number>>(new Map());\n const [anchorTops, setAnchorTops] = useState<Map<string, number>>(new Map());\n const [railHeight, setRailHeight] = useState(0);\n const measured = useRef({ sizes: new Map<string, number>(), minimum: new Map<string, number>(), height: 0 });\n const resizeFrame = useRef(0);\n const [viewportTop, setViewportTop] = useState(0);\n const [viewportHeight, setViewportHeight] = useState(0);\n const [cardLock, setCardLock] = useState<{ id: string; top: number } | null>(null);\n const lastFocus = useRef<{ id: string; top?: number } | null>(null);\n const [release, setRelease] = useState<{ id: string; top?: number; progress: number } | null>(null);\n const occurrences = useMemo(() => {\n const values = [...decorations.occurrences].sort((a, b) => a.range.start - b.range.start || a.range.end - b.range.end || a.id.localeCompare(b.id));\n if (sync === 'none') for (const annotation of decorations.annotations.values()) if (annotation.type !== 'highlight' && !values.some(item => item.annotationIds.includes(annotation.id))) values.push({ id: `unanchored-${annotation.id}`, range: { start: 0, end: 0 }, annotationIds: [annotation.id] });\n return values;\n }, [decorations, sync]);\n const references = useMemo(() => new Map(occurrences.map(occurrence => [occurrence.id, annotationReferenceText(document, occurrence)])), [document, occurrences]);\n const annotationGroups = useMemo(() => new Map(occurrences.map(occurrence => [occurrence.id, occurrence.annotationIds.flatMap(id => { const annotation = decorations.annotations.get(id); return annotation ? [annotation] : []; })])), [decorations, occurrences]);\n const measure = useCallback((beforePaint = false) => {\n const next = new Map<string, number>();\n const minimum = new Map<string, number>();\n cards.current.forEach((element, id) => {\n const height = element.getBoundingClientRect().height;\n next.set(id, height);\n const panels = [...element.querySelectorAll<HTMLElement>(':scope > .limr-sidebar-card-body > .limr-collapse')];\n minimum.set(id, height - panels.reduce((sum, panel) => sum + panel.getBoundingClientRect().height, 0));\n });\n // Keep the rail and card bounds in the same subpixel coordinate system.\n // Rounded clientHeight can put a bottom-aligned card outside the mask.\n const height = rail.current?.getBoundingClientRect().height ?? 0;\n const old = measured.current;\n if (old.height === height && old.sizes.size === next.size && [...next].every(([id, size]) => size === old.sizes.get(id) && Math.abs(minimum.get(id)! - (old.minimum.get(id) ?? 0)) < .5)) return;\n measured.current = { sizes: next, minimum, height };\n const update = () => { setSizes(next); setMinimumSizes(minimum); setRailHeight(height); };\n if (!beforePaint) { update(); return; }\n // The heights already contain the collapse animation's easing. Applying a\n // second top transition makes neighbors chase them and overlap the card.\n const element = rail.current;\n element?.setAttribute('data-resizing', '');\n flushSync(update);\n cancelAnimationFrame(resizeFrame.current);\n resizeFrame.current = requestAnimationFrame(() => {\n resizeFrame.current = requestAnimationFrame(() => element?.removeAttribute('data-resizing'));\n });\n }, []);\n const prepareFade = useCallback(() => measure(true), [measure]);\n useOverflowFade(rail, runtime, ':scope > .limr-sidebar-card', prepareFade);\n useEffect(() => {\n const observer = new ResizeObserver(() => measure(true));\n if (rail.current) observer.observe(rail.current);\n cards.current.forEach(element => observer.observe(element));\n measure();\n return () => observer.disconnect();\n }, [occurrences, measure, anchorTops]);\n useEffect(() => () => cancelAnimationFrame(resizeFrame.current), []);\n useIsomorphicLayoutEffect(() => {\n if (sync === 'none' || !rail.current) return;\n const top = rail.current.getBoundingClientRect().top;\n const values = new Map<string, number>();\n const displacement = runtime.getContentOffset();\n for (const occurrence of occurrences) {\n const marker = runtime.anchors.get(occurrence.id);\n if (!marker || marker.closest('[inert]')) continue;\n const rect = sourceRangeStartRect(runtime, decorations.referenceRanges.get(occurrence.id) ?? occurrence.range);\n values.set(occurrence.id, (rect || marker.getBoundingClientRect()).top - top - displacement);\n }\n setAnchorTops(old => old.size === values.size && [...values].every(([id, value]) => Math.abs(value - (old.get(id) ?? -Infinity)) < .5) ? old : values);\n }, [runtime, decorations.referenceRanges, occurrences, layout, sync]);\n useIsomorphicLayoutEffect(() => {\n if (sync !== 'document' || !rail.current) return;\n const root = runtime.configuration.get().scrollRoot;\n const bounds = rail.current.getBoundingClientRect();\n const top = Math.max(bounds.top, runtime.getViewportTop() + (root?.clientTop ?? 0), window.visualViewport?.offsetTop ?? 0);\n const bottom = Math.min(bounds.bottom, root ? runtime.getViewportTop() + root.clientTop + root.clientHeight : Infinity, (window.visualViewport?.offsetTop ?? 0) + (window.visualViewport?.height ?? innerHeight));\n setViewportTop(Math.max(0, top - bounds.top + (runtime.configuration.get().scrollOffset ?? 24)));\n setViewportHeight(Math.max(0, bottom - top));\n }, [runtime, layout, viewport, sync]);\n useEffect(() => {\n const dismiss = (event: PointerEvent) => {\n if (event.button !== 0) return;\n const target = event.target;\n if (!(target instanceof Element)) return;\n const card = target.closest('.limr-sidebar-card');\n const marker = target.closest<HTMLElement>('[data-limr-anchor]');\n if ((card && rail.current?.contains(card)) || (marker && runtime.anchors.get(marker.dataset.limrAnchor!) === marker)) return;\n // Floating module UI and selection actions keep their own dismissal rules.\n if (target.closest('.limr-overlay-positioner,.limr-selection-toolbar')) return;\n const { active, hovered } = runtime.interaction.get();\n if (active || hovered) runtime.activate(null);\n };\n const escape = (event: KeyboardEvent) => {\n if (event.key !== 'Escape' || event.defaultPrevented || !runtime.interaction.get().active) return;\n const anchor = runtime.anchors.get(runtime.interaction.get().active!);\n anchor?.focus({ preventScroll: true });\n runtime.activate(null);\n };\n window.document.addEventListener('pointerdown', dismiss);\n window.document.addEventListener('keydown', escape);\n return () => { window.document.removeEventListener('pointerdown', dismiss); window.document.removeEventListener('keydown', escape); if (sync === 'document') runtime.documentOffset.set(0); };\n }, [runtime, sync]);\n const items = occurrences.filter(item => sync === 'none' || anchorTops.has(item.id));\n // Extensions may present source subtrees in another order (e.g. translation\n // before original). Aligned cards follow their rendered anchors.\n if (sync !== 'none') items.sort((a, b) => (anchorTops.get(a.id) ?? 0) - (anchorTops.get(b.id) ?? 0));\n const readingId = items.find(item => (anchorTops.get(item.id) ?? 0) >= viewportTop)?.id ?? items.at(-1)?.id ?? null;\n const alignmentId = hovered ?? active ?? readingId;\n const focusedId = hovered ?? active;\n const source = hovered ? hoverSource : active ? activeSource : null;\n const locked = source === 'sidebar' && cardLock?.id === alignmentId ? cardLock : null;\n const lockedTop = locked?.top;\n useIsomorphicLayoutEffect(() => {\n const previous = lastFocus.current;\n lastFocus.current = focusedId ? { id: focusedId, top: lockedTop } : null;\n if (focusedId || sync !== 'document' || !rail.current || matchMedia('(prefers-reduced-motion: reduce)').matches) { setRelease(null); return; }\n if (!previous) return;\n const style = getComputedStyle(rail.current), value = style.getPropertyValue('--limr-motion-slow').trim();\n const milliseconds = parseFloat(value) * (value.endsWith('ms') ? 1 : 1000);\n const duration = Number.isFinite(milliseconds) ? Math.max(0, milliseconds) : 460;\n if (!duration) { setRelease(null); return; }\n // Use the skin's timing as a clock. Interpolate two layouts computed with\n // the SAME current card heights, so collapse and repacking share an easing\n // without a second CSS top transition making neighbors collide.\n const motion = rail.current.animate([{}, {}], { duration, easing: style.getPropertyValue('--limr-ease').trim() || 'ease-out' });\n setRelease({ ...previous, progress: 0 });\n let frame = 0;\n const step = () => {\n if (motion.playState === 'finished') { setRelease(null); return; }\n setRelease({ ...previous, progress: motion.effect?.getComputedTiming().progress ?? 0 });\n frame = requestAnimationFrame(step);\n };\n frame = requestAnimationFrame(step);\n return () => { cancelAnimationFrame(frame); motion.cancel(); };\n }, [focusedId, lockedTop, sync]);\n const sidebarItems = items.map(item => ({ id: item.id, anchorTop: anchorTops.get(item.id) ?? 0, height: sizes.get(item.id) ?? 80 }));\n const positionContext = { activeId: alignmentId, gap, height: sync === 'document' && railHeight > 0 ? railHeight : undefined, prioritizeActive: !!(hovered || active) };\n const positions = new Map(positioner(locked ? sidebarItems.map(item => item.id === locked.id ? { ...item, anchorTop: locked.top } : item) : sidebarItems, positionContext));\n const releasing = !focusedId && release;\n if (releasing) {\n const origin = positioner(sidebarItems.map(item => item.id === releasing.id && releasing.top !== undefined ? { ...item, anchorTop: releasing.top } : item), { ...positionContext, activeId: releasing.id, prioritizeActive: true });\n for (const [id, top] of positions) positions.set(id, top + ((origin.get(id) ?? top) - top) * (1 - releasing.progress));\n }\n const lockedAnchor = locked ? anchorTops.get(locked.id) ?? locked.top : 0;\n // Footer packing must not disable reverse alignment. Keep the hovered card\n // under the pointer and move its referenced text, even at the rail boundary.\n const displacement = sync === 'document' && locked ? (positions.get(locked.id) ?? locked.top) - lockedAnchor : 0;\n useIsomorphicLayoutEffect(() => { if (sync === 'document') runtime.documentOffset.set(displacement); }, [runtime, displacement, sync]);\n const lockCard = useCallback((id: string) => {\n // Keep the original resting position while this card is hovered or active.\n // Relocking its boundary-raised top would prevent a collapse from moving\n // back down, then jump when pointer leave releases the new lock.\n if (locked?.id === id) return;\n const card = cards.current.get(id);\n if (card && rail.current) {\n const origin = rail.current.getBoundingClientRect().top;\n const top = card.getBoundingClientRect().top - origin;\n setCardLock({ id, top });\n }\n }, [locked?.id]);\n const activateCard = useCallback((id: string) => {\n const state = runtime.interaction.get();\n const hovering = state.hovered === id || cards.current.get(id)?.matches(':hover');\n lockCard(id);\n runtime.activate(state.active === id ? null : id, 'sidebar');\n if (hovering) runtime.hover(id, 'sidebar');\n }, [runtime, lockCard]);\n return <aside ref={rail} aria-label={locale.annotations} className={`limr-sidebar ${className ?? ''}`} data-sync={sync} data-releasing={releasing ? '' : undefined} data-limr-theme={theme} data-limr-appearance={appearance} style={style}>\n {items.map(occurrence => {\n const annotation = decorations.annotations.get(occurrence.annotationIds[0]);\n const definition = runtime.annotationTypes.get(annotation?.type ?? 'citation');\n const isActive = active === occurrence.id;\n const palette = definition?.sidebar;\n const Preview = palette?.Preview;\n // A marker at the end of the article can align its collapsed card by\n // giving the reference/title priority over the optional summary. Expanded\n // content is bounded by the viewport and scrolls inside the card.\n const available = source === 'marker' && alignmentId === occurrence.id && !isActive\n ? Math.max(minimumSizes.get(occurrence.id) ?? 80, railHeight - (anchorTops.get(occurrence.id) ?? 0)) : railHeight;\n const cardHeight = isActive ? Math.min(available, Math.max(minimumSizes.get(occurrence.id) ?? 80, viewportHeight || railHeight)) : available;\n const cardStyle = {\n '--limr-annotation-color': palette?.color ?? definition?.color,\n '--limr-annotation-border': palette?.borderColor,\n '--limr-annotation-title': palette?.titleColor,\n '--limr-annotation-text': palette?.textColor,\n '--limr-annotation-excerpt': palette?.excerptColor,\n '--limr-annotation-preview': palette?.previewColor,\n '--limr-sidebar-preview-lines': String(Math.max(1, Math.floor(palette?.previewLines ?? 2))),\n ...(sync === 'document' ? {\n position: 'absolute', top: positions.get(occurrence.id) ?? 0, insetInline: 0,\n '--limr-sidebar-card-height': `${cardHeight}px`,\n } : { marginBlockEnd: gap }),\n } as CSSProperties & { [token: `--${string}`]: string | undefined };\n // A mixed card must not dismiss a conversation because a citation opted in.\n const collapseOnContentClick = occurrence.annotationIds.every(id => runtime.annotationTypes.get(decorations.annotations.get(id)?.type ?? '')?.sidebar?.collapseOnContentClick);\n const activate = () => activateCard(occurrence.id);\n return <div key={occurrence.id} ref={element => { if (element) cards.current.set(occurrence.id, element); else cards.current.delete(occurrence.id); }}\n className=\"limr-sidebar-card\" data-type={annotation?.type} data-locked={locked?.id === occurrence.id || undefined} data-active={isActive || hovered === occurrence.id || undefined} data-expanded={isActive || undefined} data-default-card={!renderCard || undefined} data-content-toggle={collapseOnContentClick || undefined} data-citations={occurrence.annotationIds.every(id => decorations.annotations.get(id)?.type === 'citation') || undefined} data-occurrence={occurrence.id}\n style={cardStyle}\n onPointerEnter={event => { if (event.pointerType !== 'touch') { lockCard(occurrence.id); runtime.hover(occurrence.id, 'sidebar'); } }} onPointerLeave={() => { if (runtime.interaction.get().hovered === occurrence.id && runtime.interaction.get().hoverSource === 'sidebar') runtime.hover(null); }}\n onClick={event => {\n if ((!isActive || collapseOnContentClick) && !renderCard && !event.defaultPrevented && !(event.target as Element).closest('button,a,input,select,textarea,summary,[role=\"button\"],[role=\"link\"],[contenteditable=\"true\"],[data-limr-card-interactive]') && window.getSelection()?.isCollapsed !== false) activate();\n }}>\n {renderCard ? renderCard({ occurrence, active: isActive, activate }) : <SidebarCardBody occurrence={occurrence} annotation={annotation} annotations={annotationGroups.get(occurrence.id)!} reference={references.get(occurrence.id) ?? ''} active={isActive} title={definition?.label ?? annotation?.type ?? 'Reference'} toggleLabel={isActive ? locale.collapse : locale.expand} Preview={Preview} activate={activateCard} />}\n </div>;\n })}\n </aside>;\n}\n","import { useEffect, useState } from 'react';\nimport { useRuntime, useStoreSelector } from '../react/context';\nimport type { Annotation, AnnotationOccurrence } from '../core';\nimport type { AnnotationPresentation } from '../react/types';\n\nexport function AnnotationContent({ annotationId, presentation, expanded = true, enabled = true }: { annotationId: string; presentation: AnnotationPresentation; expanded?: boolean; enabled?: boolean }) {\n const runtime = useRuntime();\n const annotation = useStoreSelector(runtime.decorations, state => state.annotations.get(annotationId));\n const editing = useStoreSelector(runtime.interaction, state => state.editing === annotationId);\n const definition = useStoreSelector(runtime.configuration, () => runtime.annotationTypes.get(annotation?.type ?? 'citation'));\n const version = useStoreSelector(runtime.resourceVersions, versions => versions.get(annotationId) ?? 0);\n const [loaded, setLoaded] = useState<{ id: string; data?: unknown; loading: boolean; error: Error | null }>({ id: annotationId, loading: !!definition?.load, error: null });\n useEffect(() => {\n if (!definition?.load || !annotation || !enabled) return;\n let disposed = false;\n setLoaded({ id: annotationId, loading: true, error: null });\n const request = runtime.resources.acquire(runtime.getResourceKey(annotation), signal => definition.load!(annotation, { signal }));\n request.promise.then(data => { if (!disposed) setLoaded({ id: annotationId, data, loading: false, error: null }); }).catch(error => { if (!disposed) setLoaded({ id: annotationId, loading: false, error: error instanceof Error ? error : new Error(String(error)) }); });\n return () => { disposed = true; request.release(); };\n }, [runtime, annotation, annotationId, definition, version, enabled]);\n const retry = () => runtime.invalidateAnnotation(annotationId);\n const Content = definition?.Content;\n const current = loaded.id === annotationId ? loaded : { loading: !!definition?.load, error: null, data: undefined };\n if (!annotation) return <span className=\"limr-muted\">{runtime.locale.unavailable} · {annotationId}</span>;\n if (!Content) return <span className=\"limr-muted\">{runtime.locale.unavailable} · {annotation.type}</span>;\n return <Content editing={editing} annotation={annotation} data={definition?.load ? current.data ?? annotation.data : annotation.data} loading={definition?.load ? current.loading : false} error={current.error} retry={retry} presentation={presentation} expanded={expanded} />;\n}\n\nexport function AnnotationGroup({ occurrence, presentation, expanded = true, enabled = true }: { occurrence: AnnotationOccurrence; presentation: AnnotationPresentation; expanded?: boolean; enabled?: boolean }) {\n return <>{occurrence.annotationIds.map(id => <div key={id} className=\"limr-annotation-entry\"><AnnotationContent annotationId={id} presentation={presentation} expanded={expanded} enabled={enabled} /></div>)}</>;\n}\n","import { annotationReferenceRange, mapText, type AnnotationOccurrence, type DocumentSnapshot, type MarkdownNode } from '../core';\nimport { intersects, rangeOf } from '../core/tree';\n\n/** Render the anchored text, without exposing Markdown syntax or <ref> tags. */\nexport function annotationReferenceText(document: DocumentSnapshot, occurrence: AnnotationOccurrence): string {\n const referenceRange = annotationReferenceRange(document, occurrence);\n const blocks = document.blocks.filter(block => intersects(block.range, referenceRange));\n let reference = '';\n const visit = (node: MarkdownNode) => {\n const range = rangeOf(node);\n if (!intersects(range, referenceRange) || ['annotationReference', 'footnoteReference', 'annotationDefinition', 'definition'].includes(node.type)) return;\n if (node.value !== undefined) {\n const mapping = mapText(document.source, node.value, range);\n reference += node.value.split('').filter((_, index) => mapping.ends[index] > referenceRange.start && mapping.starts[index] < referenceRange.end).join('');\n } else if (node.type === 'image') reference += String(node.alt ?? '');\n else node.children?.forEach(visit);\n };\n blocks.forEach((block, index) => { if (index) reference += ' '; visit(block.node); });\n if (!occurrence.embedded) reference ||= occurrence.quote ?? document.source.slice(referenceRange.start, referenceRange.end);\n return reference.replace(/\\s+/g, ' ').trim();\n}\n","import { useEffect, useState, useSyncExternalStore, type CSSProperties } from 'react';\nimport { autoUpdate, flip, FloatingFocusManager, FloatingOverlay, FloatingPortal, offset, shift, size, useDismiss, useFloating, useInteractions, useRole } from '@floating-ui/react';\nimport { useAppearance, useIsomorphicLayoutEffect, useLocale, useRuntime, useStoreSelector, useTheme } from '../react/context';\nimport { AnnotationGroup } from './AnnotationContent';\nimport { useCardMotion } from './card-motion';\nimport { AnnotationCard } from './AnnotationCard';\nimport type { AnnotationOccurrence } from '../core';\nimport type { AnnotationOverlayCardProps } from '../react/types';\n\nexport interface AnnotationOverlayProps { disabled?: boolean; portalRoot?: HTMLElement | null; previewWidth?: number; maxHeight?: string }\nconst length = (value: number | string) => typeof value === 'number' ? `${value}px` : value;\nconst idleSubscribe = () => () => {};\nexport function AnnotationOverlay({ disabled = false, portalRoot, previewWidth = 340, maxHeight = '80dvh' }: AnnotationOverlayProps) {\n const runtime = useRuntime();\n const appearance = useAppearance();\n const theme = useTheme(), locale = useLocale();\n const editing = useStoreSelector(runtime.interaction, state => state.editing);\n const active = useStoreSelector(runtime.interaction, state => state.active);\n const hovered = useStoreSelector(runtime.interaction, state => state.hovered);\n const occurrences = useStoreSelector(runtime.decorations, state => state.occurrences);\n useSyncExternalStore(runtime.layout.subscribe, runtime.layout.get, runtime.layout.get);\n const [preview, setPreview] = useState<string | null>(null);\n const [collapsedId, setCollapsedId] = useState<string | null>(null);\n const [, setViewportTick] = useState(0);\n useEffect(() => {\n if (active || disabled) { setPreview(null); return; }\n if (hovered) { setPreview(hovered); return; }\n const timer = setTimeout(() => setPreview(null), 90);\n return () => clearTimeout(timer);\n }, [hovered, active, disabled]);\n useEffect(() => {\n const update = () => setViewportTick(value => value + 1);\n window.visualViewport?.addEventListener('resize', update);\n window.visualViewport?.addEventListener('scroll', update);\n window.addEventListener('resize', update);\n return () => { window.visualViewport?.removeEventListener('resize', update); window.visualViewport?.removeEventListener('scroll', update); window.removeEventListener('resize', update); };\n }, []);\n const wantedId = active ?? preview;\n const wanted = occurrences.find(item => item.id === wantedId);\n const [retained, setRetained] = useState<AnnotationOccurrence | null>(null);\n const occurrence = wanted ?? retained;\n const id = occurrence?.id;\n const annotation = useStoreSelector(runtime.decorations, state => state.annotations.get(occurrence?.annotationIds[0] ?? ''));\n const definition = useStoreSelector(runtime.configuration, () => runtime.annotationTypes.get(annotation?.type ?? 'citation'));\n const policy = definition?.overlay?.expand;\n const expansion = typeof policy === 'function' ? annotation && policy(annotation) : policy;\n const pinned = active === id;\n const expanded = pinned && !!expansion && collapsedId !== id;\n const [lastExpanded, setLastExpanded] = useState(false);\n const [lastPinned, setLastPinned] = useState(false);\n const open = !!wanted && !disabled;\n useSyncExternalStore(open ? runtime.viewport.subscribe : idleSubscribe, runtime.viewport.get, runtime.viewport.get);\n useEffect(() => {\n if (open) { setRetained(wanted!); setLastExpanded(expanded); setLastPinned(pinned); }\n }, [wanted, open, expanded, pinned]);\n const close = () => {\n const anchor = id ? runtime.anchors.get(id) : null;\n anchor?.focus({ preventScroll: true });\n runtime.activate(null); runtime.hover(null); setPreview(null);\n };\n const anchor = id ? runtime.anchors.get(id) : undefined;\n const [previewGeometry, setPreviewGeometry] = useState<{ id?: string; rect: DOMRect; placement: string } | null>(null);\n const fromPreview = previewGeometry?.id === id ? previewGeometry : null;\n const requestedExpanded = open ? expanded : lastExpanded;\n // Even a toolbar/touch opening first measures the real module preview at\n // its anchor. It stays hidden for this layout pass, and is never duplicated.\n const measuringPreview = open && requestedExpanded && !fromPreview;\n const shownExpanded = requestedExpanded && !measuringPreview;\n const shownPinned = open ? pinned : lastPinned;\n const centered = shownExpanded && expansion && expansion.placement === 'center';\n const anchoredExpansion = shownExpanded && !centered && fromPreview;\n const { refs, update, floatingStyles, context, isPositioned, placement, middlewareData } = useFloating({ open, elements: { reference: anchor ?? null }, onOpenChange: next => { if (!next) close(); }, strategy: 'fixed', transform: false, placement: 'bottom-start', whileElementsMounted: autoUpdate, middleware: [offset(8), flip({ padding: 12 }), shift({ padding: 12 }), size({ padding: 12, apply: ({ availableHeight, elements }) => {\n if (!shownExpanded) elements.floating.style.maxHeight = `${Math.max(0, Math.floor(Math.min(360, availableHeight)))}px`;\n else if (!centered && !fromPreview) elements.floating.style.maxHeight = `min(${length(expansion && expansion.maxHeight || maxHeight)}, ${Math.max(0, Math.floor(availableHeight))}px)`;\n } }, [shownExpanded, !!centered, !!fromPreview, expansion && expansion.maxHeight, maxHeight]), {\n name: 'limrAnchor',\n options: shownExpanded,\n fn: ({ elements }) => ({ data: { id: (elements.reference as HTMLElement).dataset?.limrAnchor, expanded: shownExpanded } }),\n }] });\n useIsomorphicLayoutEffect(() => {\n // A retained surface never remounts when an exit is reversed. Floating UI\n // resets isPositioned on close, so explicitly remeasure that same surface.\n if (open && anchor) update();\n }, [anchor, update, open, shownExpanded]);\n const dismiss = useDismiss(context, { escapeKey: true, outsidePress: true });\n const role = useRole(context, { role: 'dialog' });\n const { getFloatingProps } = useInteractions([dismiss, role]);\n const ready = !!centered || !!anchoredExpansion || !open || isPositioned && middlewareData.limrAnchor?.id === id && middlewareData.limrAnchor?.expanded === shownExpanded;\n const [surface, setSurface] = useState<HTMLDivElement | null>(null);\n const edge = (shownExpanded ? fromPreview?.placement ?? 'bottom' : placement).startsWith('top') ? 'bottom' : 'top';\n useCardMotion(surface, refs.floating.current, anchor, open, shownExpanded, ready && !measuringPreview, id, edge, fromPreview?.rect, () => { setRetained(null); setCollapsedId(null); setPreviewGeometry(null); });\n useIsomorphicLayoutEffect(() => {\n if (!shownExpanded && open && ready && refs.floating.current) {\n const rect = refs.floating.current.getBoundingClientRect();\n if (!fromPreview || fromPreview.placement !== placement || (['x', 'y', 'width', 'height'] as const).some(key => Math.abs(rect[key] - fromPreview.rect[key]) > .5)) setPreviewGeometry({ id, rect, placement });\n }\n });\n if (!occurrence || disabled) return null;\n const visual = window.visualViewport;\n const viewLeft = visual?.offsetLeft ?? 0, viewTop = visual?.offsetTop ?? 0;\n const availableWidth = visual?.width ?? window.innerWidth, availableHeight = visual?.height ?? window.innerHeight;\n // Portalled dialogs belong to the whole visible page, including when the\n // reader lives in an offset column or a nested scroll container.\n const top = viewTop + 12;\n const bottom = viewTop + availableHeight - 12;\n const heightLimit = Math.max(0, bottom - top);\n const settings = shownExpanded && expansion ? expansion : undefined;\n const width = `min(${length(settings?.width ?? (centered ? 640 : definition?.overlay?.previewWidth ?? previewWidth))}, ${Math.max(0, availableWidth - 24)}px)`;\n let style: CSSProperties = { ...floatingStyles, width, maxHeight: Math.min(360, availableHeight - 24) };\n if (settings) {\n style = { ...style, height: settings.height === undefined ? undefined : `min(${length(settings.height)}, ${heightLimit}px)`, maxHeight: `min(${length(settings.maxHeight ?? maxHeight)}, ${heightLimit}px)` };\n if (centered) style = { ...style, left: viewLeft + availableWidth / 2, top: viewTop + availableHeight / 2, transform: 'translate(-50%, -50%)' };\n else if (fromPreview) {\n const upward = fromPreview.placement.startsWith('top');\n const room = Math.max(0, upward ? fromPreview.rect.bottom - top : bottom - fromPreview.rect.top);\n style = { ...style, left: fromPreview.rect.left, top: upward ? fromPreview.rect.bottom : fromPreview.rect.top, transform: upward ? 'translateY(-100%)' : 'none', maxWidth: viewLeft + availableWidth - 12 - fromPreview.rect.left, maxHeight: `min(${length(settings.maxHeight ?? maxHeight)}, ${room}px)` };\n }\n }\n const Card = definition?.overlay?.Card;\n const cardProps: AnnotationOverlayCardProps = {\n annotation: annotation ?? { id: occurrence.annotationIds[0], type: 'unknown' }, occurrence,\n presentation: shownExpanded ? 'expanded' : 'preview', expanded: shownExpanded, pinned: shownPinned,\n canExpand: !!expansion,\n expand: () => { setCollapsedId(null); runtime.activate(occurrence.id); },\n collapse: () => { setCollapsedId(occurrence.id); runtime.activate(occurrence.id); },\n close,\n children: <AnnotationGroup occurrence={occurrence} presentation={shownExpanded ? 'expanded' : 'preview'} expanded={shownExpanded} />,\n };\n const modal = open && !!centered;\n const card = <FloatingFocusManager context={context} modal={modal} disabled={!open || !pinned || measuringPreview} initialFocus={editing ? -1 : refs.floating} returnFocus={false}>\n <div ref={refs.setFloating} {...getFloatingProps()} tabIndex={-1} aria-label={definition?.label ?? locale.annotations} className=\"limr-overlay-positioner\" style={{ ...style, pointerEvents: open ? 'auto' : 'none', visibility: ready && !measuringPreview ? 'visible' : 'hidden' }}>\n <div ref={setSurface} className={`limr-annotation-overlay ${shownExpanded ? 'limr-annotation-expanded' : 'limr-annotation-preview'}`} style={{ '--limr-annotation-color': definition?.color } as CSSProperties} data-type={annotation?.type} data-state={open ? 'open' : 'closing'} data-pinned={shownPinned || undefined} data-placement={centered ? 'center' : anchoredExpansion ? fromPreview.placement : placement} data-limr-theme={theme} data-limr-appearance={appearance}\n onPointerEnter={event => { if (!pinned && event.pointerType !== 'touch') runtime.hover(occurrence.id); }} onPointerLeave={() => { if (!pinned) runtime.hover(null); }}>\n <div className=\"limr-overlay-surface\" aria-hidden=\"true\" />\n <div className=\"limr-overlay-card\">{Card && annotation ? <Card {...cardProps} /> : <AnnotationCard {...cardProps} title={definition?.label ?? annotation?.type ?? locale.annotations} />}</div>\n </div>\n </div>\n </FloatingFocusManager>;\n return <FloatingPortal root={portalRoot}><FloatingOverlay className=\"limr-backdrop\" data-expanded={modal || undefined} lockScroll={modal} style={{ pointerEvents: modal ? 'auto' : 'none' }}>{card}</FloatingOverlay></FloatingPortal>;\n}\n","import { useRef } from 'react';\nimport { useIsomorphicLayoutEffect } from '../react/context';\n\nconst moving = (animation: Animation | null) => animation?.playState === 'running' || animation?.playState === 'paused';\nconst durationOf = (value: string, fallback: number) => {\n const duration = parseFloat(value) * (value.endsWith('ms') ? 1 : 1000);\n return Number.isFinite(duration) && duration > 0 ? duration : fallback;\n};\n/** Measure a stationary host, and animate its surface from the live frame.\n * Each direction starts a fresh easing curve: reversing an ease-out entrance would\n * otherwise leave the card apparently motionless at the start of its exit. */\nexport function useCardMotion(element: HTMLElement | null, host: HTMLElement | null, anchor: HTMLElement | undefined, open: boolean, expanded: boolean, ready: boolean, id: string | undefined, edge: 'top' | 'bottom', previewRect: DOMRect | undefined, onExit: () => void) {\n const previous = useRef<DOMRect | null>(null);\n const reveal = useRef<Animation | null>(null);\n const content = useRef<Animation | null>(null);\n const hero = useRef<Animation | null>(null);\n const shape = useRef<Animation | null>(null);\n const state = useRef<{ id?: string; expanded: boolean; open: boolean } | null>(null);\n const latest = useRef({ open, onExit });\n latest.current = { open, onExit };\n useIsomorphicLayoutEffect(() => {\n if (!element || !host || !ready) return;\n const sameCard = state.current?.id === id;\n const presentationChanged = sameCard && state.current?.expanded !== expanded;\n const intentChanged = !sameCard || state.current?.open !== open || presentationChanged;\n const reduced = matchMedia('(prefers-reduced-motion: reduce)').matches;\n if (!intentChanged && !reduced) return;\n const computed = getComputedStyle(element);\n const shell = element.querySelector<HTMLElement>('.limr-overlay-surface');\n const card = element.querySelector<HTMLElement>('.limr-overlay-card');\n const previousBody = sameCard ? (content.current?.effect as KeyframeEffect | null)?.target as HTMLElement | null : null;\n const body = presentationChanged || expanded ? card : previousBody?.isConnected ? previousBody : element.querySelector<HTMLElement>('[data-limr-card-body], .limr-overlay-content');\n const bodyStyle = body ? getComputedStyle(body) : null;\n // Snapshot before cancelling any effects; interruption never jumps to an\n // endpoint, even during a preview-to-dialog morph or an unfinished exit.\n const liveSurface = { opacity: computed.opacity, clipPath: computed.clipPath };\n const liveTransform = computed.transform;\n const liveBody = { opacity: bodyStyle?.opacity ?? '1', transform: bodyStyle?.transform ?? 'none', clipPath: bodyStyle?.clipPath ?? 'none' };\n let before = sameCard ? previous.current : expanded ? previewRect ?? null : null;\n // React has moved the host; apply the live transform to its OLD rectangle.\n if (before && sameCard && hero.current && computed.transform !== 'none') {\n const matrix = new DOMMatrixReadOnly(computed.transform);\n before = new DOMRect(before.x + matrix.m41, before.y + matrix.m42, before.width, before.height);\n }\n if (before && sameCard && shell && shape.current) {\n const matrix = new DOMMatrixReadOnly(getComputedStyle(shell).transform);\n before = new DOMRect(before.x, before.y, before.width * matrix.a, before.height * matrix.d);\n }\n const target = host.getBoundingClientRect();\n const anchorRect = anchor?.getBoundingClientRect() ?? target;\n const originX = Math.max(0, Math.min(100, ((anchorRect.left + anchorRect.right) / 2 - target.left) / Math.max(1, target.width) * 100));\n const radius = computed.borderRadius || '8px';\n const collapsed = `inset(${edge === 'bottom' ? 100 : 0}% ${100 - originX}% ${edge === 'bottom' ? 0 : 100}% ${originX}% round ${radius})`;\n // Leave room for the old, larger shell while it shrinks to a preview.\n const overflow = Math.max(48, (before?.width ?? 0) - target.width + 48, (before?.height ?? 0) - target.height + 48);\n const revealed = `inset(-${overflow}px -${overflow}px -${overflow}px -${overflow}px round ${radius})`;\n const cancel = () => {\n reveal.current?.cancel(); content.current?.cancel(); hero.current?.cancel(); shape.current?.cancel();\n reveal.current = content.current = hero.current = shape.current = null;\n };\n cancel();\n state.current = { id, expanded, open };\n previous.current = target;\n if (reduced || !open && !sameCard) {\n delete element.dataset.motion;\n if (!open) latest.current.onExit();\n return;\n }\n const previewDuration = durationOf((computed.getPropertyValue('--limr-overlay-duration') || computed.getPropertyValue('--limr-overlay-enter-duration')).trim(), 560);\n const morphDuration = durationOf(computed.getPropertyValue('--limr-overlay-morph-duration').trim(), 480);\n const morph = open && !!before && (presentationChanged || !sameCard && expanded);\n const returning = !open && expanded && !!previewRect;\n const destination = returning ? previewRect : target;\n const duration = morph || expanded ? morphDuration : previewDuration;\n const easing = computed.getPropertyValue('--limr-overlay-ease').trim() || 'cubic-bezier(.22,1,.36,1)';\n element.dataset.motion = !open ? 'closing' : morph ? 'morphing' : 'opening';\n reveal.current = element.animate([\n sameCard ? { ...liveSurface, ...(morph ? { clipPath: revealed } : {}) } : { opacity: 0, clipPath: morph ? revealed : collapsed },\n { opacity: open ? 1 : 0, clipPath: open || returning ? revealed : collapsed },\n ], { duration, easing, fill: 'both' });\n if (before && (morph || liveTransform !== 'none' || returning)) {\n const x = before.left - target.left, y = before.top - target.top;\n const sx = before.width / Math.max(1, target.width), sy = before.height / Math.max(1, target.height);\n hero.current = element.animate([\n { transform: `translate(${x}px, ${y}px)` },\n { transform: `translate(${destination.left - target.left}px, ${destination.top - target.top}px)` },\n ], { duration, easing, fill: 'both' });\n // Only the painted background changes scale. The entire module UI,\n // including titles, inputs and controls, retains its natural text metrics.\n shape.current = shell?.animate([\n { transform: `scale(${sx}, ${sy})` },\n { transform: `scale(${destination.width / Math.max(1, target.width)}, ${destination.height / Math.max(1, target.height)})` },\n ], { duration, easing, fill: 'both' }) ?? null;\n }\n const delay = open ? morph ? 50 : !sameCard ? 35 : 0 : 0;\n content.current = body?.animate([\n sameCard && !morph ? liveBody : { opacity: 0, transform: 'translateY(6px)', clipPath: morph ? `inset(0px ${Math.max(0, target.width - before!.width)}px ${Math.max(0, target.height - before!.height)}px 0px)` : 'inset(0px)' },\n { opacity: open ? 1 : 0, transform: open ? 'translateY(0px)' : 'translateY(-4px)', clipPath: returning ? `inset(0px ${Math.max(0, target.width - destination.width)}px ${Math.max(0, target.height - destination.height)}px 0px)` : 'inset(0px)' },\n ], {\n // Content and surface settle together in either direction.\n duration: duration - delay, delay, easing, fill: 'both',\n }) ?? null;\n const current = reveal.current;\n const finish = () => {\n if (reveal.current !== current) return;\n if (![reveal.current, content.current, hero.current, shape.current].some(moving)) {\n delete element.dataset.motion;\n if (!latest.current.open) latest.current.onExit();\n else previous.current = host.getBoundingClientRect();\n }\n };\n for (const animation of [reveal.current, content.current, hero.current, shape.current]) if (animation) animation.onfinish = finish;\n finish();\n }, [element, host, anchor, open, expanded, ready, id, edge, previewRect]);\n useIsomorphicLayoutEffect(() => {\n if (host && open && ready && !moving(hero.current)) previous.current = host.getBoundingClientRect();\n });\n useIsomorphicLayoutEffect(() => {\n if (!host || !open) return;\n const observer = new ResizeObserver(() => { if (!moving(hero.current)) previous.current = host.getBoundingClientRect(); });\n observer.observe(host);\n return () => observer.disconnect();\n }, [host, open, id]);\n useIsomorphicLayoutEffect(() => () => {\n reveal.current?.cancel(); content.current?.cancel(); hero.current?.cancel(); shape.current?.cancel();\n reveal.current = content.current = hero.current = shape.current = null;\n state.current = null; previous.current = null;\n if (element) delete element.dataset.motion;\n }, [element]);\n}\n","import { useEffect, useId, useMemo, useRef, useState, type CSSProperties, type ReactNode } from 'react';\nimport { autoUpdate, FloatingPortal, offset, shift, useFloating } from '@floating-ui/react';\nimport { defaultHighlight, resolveAnnotationAnchors, sameRange, selectionFromRange, type Annotation, type HighlightData } from '../core';\nimport { copyText, deleteAnnotations, highlightPalette, highlightSelection } from '../extensions/actions';\nimport { useAppearance, useRuntime, useSelection, useStoreSelector, useTheme } from '../react/context';\nimport type { ActionContext, SelectionAction, StyledProps, ToolbarActionContext } from '../react/types';\nimport { annotationReferenceText } from './annotation-reference';\nimport { OverlayScrollArea } from './OverlayScrollArea';\nimport { Collapse } from './Collapse';\nimport { atomicSelectionText } from '../react/source-geometry';\nimport { ToolFaces } from './ToolFaces';\n\nexport interface SelectionToolbarProps extends StyledProps {\n /** Replaces the built-in actions. Extension actions are added. */\n actions?: readonly SelectionAction[];\n portalRoot?: HTMLElement | null;\n /** Maximum panel body height in pixels; plugins inherit the available space. */\n maxPanelHeight?: number;\n render?: (props: { context: ActionContext; actions: readonly SelectionAction[]; run: (action: SelectionAction) => Promise<void> }) => ReactNode;\n}\nconst defaults = [highlightPalette(), highlightSelection(), copyText(), deleteAnnotations()];\n\nexport function SelectionToolbar({ actions, portalRoot, maxPanelHeight = 260, className = '', style, render }: SelectionToolbarProps) {\n const runtime = useRuntime();\n const appearance = useAppearance(), theme = useTheme();\n const selection = useSelection();\n const interaction = useStoreSelector(runtime.interaction, value => value);\n const decorations = useStoreSelector(runtime.decorations, value => value);\n const config = useStoreSelector(runtime.configuration, value => value);\n const paint = interaction.activeHighlight ? decorations.highlights.get(interaction.activeHighlight) : null;\n const active = decorations.occurrences.find(item => item.id === interaction.active);\n const hiddenActive = active && [...decorations.highlights.values()].some(item => item.hidden && sameRange(item.range, active.range));\n const combined = useMemo(() => {\n const map = new Map((actions ?? defaults).map(action => [action.id, action]));\n config.extensions?.forEach(extension => extension.actions?.forEach(action => map.set(action.id, action)));\n actions?.forEach(action => map.set(action.id, action));\n const order = (action: SelectionAction) => action.placement === 'start' ? -1 : action.placement === 'end' ? 1 : 0;\n return [...map.values()].sort((a, b) => order(a) - order(b));\n }, [config.extensions, actions]);\n const [busy, setBusy] = useState<string | null>(null);\n const busyRef = useRef(false);\n const [error, setError] = useState<string | null>(null);\n const [expanded, setExpanded] = useState<string | null>(null);\n const [success, setSuccess] = useState<string | null>(null);\n const [deleteHintOpen, setDeleteHintOpen] = useState(false);\n const [preferredHighlight, setPreferredHighlight] = useState<HighlightData>(defaultHighlight);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const successTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const panelId = useId();\n const documentSnapshot = runtime.document.getSnapshot();\n const effectiveSelection = useMemo(() => {\n if (selection) return selection;\n // Dismissed annotations can retain their edit state for later resumption.\n // Only the active annotation's editor suppresses highlight actions.\n if (interaction.editing && active?.annotationIds.includes(interaction.editing)) return null;\n const range = paint?.range ?? (hiddenActive ? active?.range : undefined);\n return range ? selectionFromRange(documentSnapshot, range, {\n text: atomicSelectionText(runtime, [range]) ?? (paint ? runtime.highlightReference?.text ?? annotationReferenceText(documentSnapshot, { id: paint.id, annotationIds: [], range }) : annotationReferenceText(documentSnapshot, active!)),\n }) : null;\n }, [documentSnapshot, paint, active, selection, interaction.editing, hiddenActive]);\n const blockReference = useMemo(() => {\n const ranges = effectiveSelection?.raw.ranges;\n if (ranges?.length !== 1) return null;\n const { start, end } = ranges[0];\n // Atomic source selection can start in one tiny SVG label or math glyph.\n // Anchor to the whole block, including when reopening its saved highlight.\n return runtime.content?.querySelector<HTMLElement>(`[data-limr-atomic=\"block\"][data-source-start=\"${start}\"][data-source-end=\"${end}\"]`) ?? null;\n }, [runtime, effectiveSelection]);\n const annotations = useMemo(() => effectiveSelection ? [...decorations.annotations.values()].filter(annotation =>\n resolveAnnotationAnchors(annotation, documentSnapshot).some(anchor => [...effectiveSelection.raw.ranges, ...effectiveSelection.syntax.ranges].some(range => sameRange(anchor.range, range)))) : [], [decorations, effectiveSelection, documentSnapshot]);\n const highlight = (paint ? decorations.annotations.get(paint.annotationId) : annotations.find(annotation => annotation.type === 'highlight')) as Annotation<HighlightData> | undefined;\n const highlightAppearance = highlight?.data ?? preferredHighlight;\n const context: ActionContext | null = effectiveSelection ? {\n ...runtime.commands, selection: effectiveSelection, annotations, highlight: highlight ?? null, locale: runtime.locale,\n addAnnotation: (annotation, options) => runtime.commands.addAnnotation(annotation, { highlight: highlightAppearance, ...options }),\n document: documentSnapshot, signal: runtime.signal, clearSelection: () => runtime.clearSelection(),\n } : null;\n const readOnly = highlight?.data?.readOnly === true;\n const available = context ? readOnly ? [defaults[2]] : combined.filter(action => action.visible?.(context) ?? true) : [];\n const expandedAction = available.find(action => action.id === expanded && action.renderExpanded);\n const hasPanels = available.some(action => action.renderExpanded);\n const open = !!context && effectiveSelection!.settled && available.length > 0;\n const { refs, floatingStyles, placement, isPositioned } = useFloating({\n open, strategy: 'fixed', placement: 'bottom',\n middleware: [offset(10), { name: 'toolbarSpace', options: { hasPanels, maxPanelHeight, blockReference }, fn({ rects, placement, elements }) {\n const viewport = window.visualViewport;\n const root = runtime.configuration.get().scrollRoot?.getBoundingClientRect();\n const top = Math.max(viewport?.offsetTop ?? 0, root?.top ?? 0);\n const bottom = Math.min((viewport?.offsetTop ?? 0) + (viewport?.height ?? window.innerHeight), root?.bottom ?? Infinity);\n const above = Math.max(0, rects.reference.y - top - 20), below = Math.max(0, bottom - rects.reference.y - rects.reference.height - 20);\n const row = (elements.floating.querySelector('.limr-toolbar-actions')?.getBoundingClientRect().height ?? 34) + (elements.floating.querySelector('.limr-toolbar-delete-hint,.limr-toolbar-readonly-hint')?.getBoundingClientRect().height ?? 0);\n const limit = Math.max(0, parseFloat(getComputedStyle(elements.floating).getPropertyValue('--limr-toolbar-panel-max-height')) || maxPanelHeight);\n const needed = row + (hasPanels ? limit : 0) + 24;\n // Reserve the same budget while closed or expanded, so hover never moves the action row.\n const next = blockReference || below >= needed || below >= above ? 'bottom' : 'top';\n const room = next === 'bottom' ? below : above;\n elements.floating.style.setProperty('--limr-toolbar-panel-height', `${Math.max(0, Math.min(limit, room - row - 24))}px`);\n elements.floating.style.setProperty('--limr-toolbar-available-height', `${room}px`);\n return placement !== next ? { reset: { placement: next } } : {};\n } }, shift({ padding: 10 })], whileElementsMounted: autoUpdate,\n });\n useEffect(() => {\n const reference = blockReference ?? (selection ? runtime.selectionRange : paint ? runtime.highlightReference : active ? runtime.anchors.get(active.id) : null);\n if (reference) refs.setPositionReference({ getBoundingClientRect: () => reference.getBoundingClientRect(), getClientRects: () => reference.getClientRects(), contextElement: blockReference ?? runtime.content ?? undefined });\n }, [runtime, refs, blockReference, selection, paint, active]);\n const selectionKey = effectiveSelection?.raw.ranges.map(range => `${range.start}-${range.end}`).join(',') ?? '';\n useEffect(() => { setError(null); setExpanded(null); setSuccess(null); setDeleteHintOpen(false); clearTimeout(closeTimer.current); clearTimeout(successTimer.current); }, [selectionKey, open]);\n useEffect(() => () => { clearTimeout(closeTimer.current); clearTimeout(successTimer.current); }, []);\n const dismiss = () => { runtime.clearSelection(); runtime.activate(null); };\n useEffect(() => {\n if (!open) return;\n const down = (event: PointerEvent) => {\n if (event.target instanceof Element && event.target.closest('[data-limr-selection-ui],.limr-sidebar-card,.limr-overlay-positioner,[data-limr-anchor]')) return;\n if (runtime.interaction.get().activeHighlight) runtime.clearSelection();\n };\n const key = (event: KeyboardEvent) => {\n if (event.key !== 'Escape' || event.defaultPrevented) return;\n if (expanded) {\n setExpanded(null);\n refs.floating.current?.querySelector<HTMLButtonElement>(`[data-action-id=\"${CSS.escape(expanded)}\"] button`)?.focus();\n } else dismiss();\n event.preventDefault();\n };\n document.addEventListener('pointerdown', down); document.addEventListener('keydown', key);\n return () => { document.removeEventListener('pointerdown', down); document.removeEventListener('keydown', key); };\n }, [open, expanded, runtime, refs]);\n const expand = (id: string) => { clearTimeout(closeTimer.current); setExpanded(id); };\n const execute = async (action: SelectionAction, operation: () => void | Promise<void>) => {\n if (!context || busyRef.current || action.disabled?.(context)) return;\n busyRef.current = true; setBusy(action.id); setError(null);\n try { await operation(); }\n catch (cause) { if (!runtime.signal.aborted) setError(cause instanceof Error ? cause.message : String(cause)); }\n finally { busyRef.current = false; if (!runtime.signal.aborted) setBusy(null); }\n };\n const actionContext = (action: SelectionAction): ToolbarActionContext => ({\n ...context!, busy: !!busy, expanded: expanded === action.id, highlightAppearance, setHighlightAppearance: setPreferredHighlight,\n expand: () => expand(action.id), collapse: () => setExpanded(null),\n run: operation => execute(action, () => operation(context!)),\n });\n const run = (action: SelectionAction) => execute(action, async () => {\n if (action.run) await action.run(actionContext(action));\n else if (action.renderExpanded) expanded === action.id ? setExpanded(null) : expand(action.id);\n if (action.successLabel && !runtime.signal.aborted) {\n setSuccess(action.id); clearTimeout(successTimer.current);\n successTimer.current = setTimeout(() => setSuccess(null), 2400);\n }\n });\n if (!open || !context) return null;\n const label = (action: SelectionAction) => {\n const value = success === action.id && action.successLabel ? action.successLabel : action.label;\n return typeof value === 'function' ? value(context) : value;\n };\n const annotationCount = annotations.filter(annotation => annotation.type !== 'highlight').length;\n const hint = available.some(action => action.id === 'delete-annotations') && annotationCount > 1 ? context.locale.deleteAnnotationsHint.replace('{count}', String(annotationCount)) : null;\n return <FloatingPortal root={portalRoot}><div ref={refs.setFloating} className={`limr-selection-toolbar ${className}`} style={{ ...style, ...floatingStyles, visibility: isPositioned ? undefined : 'hidden' }} role=\"toolbar\" aria-label=\"Text actions\" data-limr-selection-ui=\"true\" data-limr-theme={theme} data-limr-appearance={appearance} data-placement={placement} data-highlight={highlight?.id} data-readonly={readOnly || undefined} data-expanded={expandedAction?.id}\n onMouseDown={event => { if (!(event.target instanceof Element) || !event.target.closest('input,textarea,select,[contenteditable]')) event.preventDefault(); }}\n onPointerEnter={() => clearTimeout(closeTimer.current)}\n onPointerLeave={event => {\n if (event.pointerType !== 'mouse' || event.currentTarget.contains(document.activeElement)) return;\n closeTimer.current = setTimeout(() => setExpanded(null), 200);\n }}\n onBlur={event => { if (!event.currentTarget.contains(event.relatedTarget) && !event.currentTarget.matches(':hover')) setExpanded(null); }}\n onKeyDown={event => {\n if (event.target instanceof Element && event.target.closest('.limr-toolbar-panel')) return;\n if (!['ArrowRight', 'ArrowLeft', 'Home', 'End', 'ArrowDown', 'ArrowUp'].includes(event.key)) return;\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n const id = (event.target as Element).closest<HTMLElement>('[data-action-id]')?.dataset.actionId;\n const action = available.find(item => item.id === id);\n if (action?.renderExpanded) { expand(action.id); requestAnimationFrame(() => refs.floating.current?.querySelector<HTMLElement>('.limr-toolbar-panel button,.limr-toolbar-panel input,.limr-toolbar-panel textarea')?.focus()); }\n } else {\n const buttons = Array.from(event.currentTarget.querySelectorAll<HTMLButtonElement>('.limr-toolbar-actions button:not(:disabled)'));\n const current = buttons.indexOf(document.activeElement as HTMLButtonElement);\n const index = event.key === 'Home' ? 0 : event.key === 'End' ? buttons.length - 1 : (current + (event.key === 'ArrowRight' ? 1 : buttons.length - 1)) % buttons.length;\n buttons[index]?.focus();\n }\n event.preventDefault();\n }}>\n <div className=\"limr-toolbar-surface\" key={selectionKey} data-ready={isPositioned || undefined}>\n <div className=\"limr-toolbar-actions\">{render && !readOnly ? render({ context, actions: available, run }) : available.map((action, index) => <div className=\"limr-toolbar-item\" key={action.id} data-action-id={action.id} data-active={expanded === action.id || undefined} data-tone={action.tone} data-status={success === action.id ? 'success' : undefined} style={{ '--limr-tool-index': index } as CSSProperties}\n onPointerEnter={event => {\n if (event.pointerType !== 'mouse' || busy || action.disabled?.(context)) return;\n if (expandedAction && expandedAction.id !== action.id && refs.floating.current?.querySelector('.limr-toolbar-panel')?.contains(document.activeElement)) return;\n clearTimeout(closeTimer.current);\n if (action.renderExpanded) expand(action.id); else setExpanded(null);\n try { action.onHover?.(actionContext(action)); }\n catch (cause) { setError(cause instanceof Error ? cause.message : String(cause)); }\n }}>\n {action.render ? action.render(actionContext(action)) : <button className=\"limr-toolbar-action\" type=\"button\" disabled={!!busy || action.disabled?.(context)} onClick={() => void run(action)} aria-label={label(action)} aria-busy={busy === action.id} aria-expanded={action.renderExpanded ? expanded === action.id : undefined} aria-controls={action.renderExpanded && expanded === action.id ? panelId : undefined}\n aria-describedby={action.id === 'delete-annotations' && hint && deleteHintOpen ? `${panelId}-delete` : undefined}\n onPointerEnter={event => { if (action.id === 'delete-annotations' && event.pointerType !== 'touch') setDeleteHintOpen(true); }}\n onPointerLeave={event => { if (action.id === 'delete-annotations') setDeleteHintOpen(event.currentTarget.matches(':focus-visible')); }}\n onFocus={event => { if (action.id === 'delete-annotations' && event.currentTarget.matches(':focus-visible')) setDeleteHintOpen(true); }}\n onBlur={event => { if (action.id === 'delete-annotations' && !event.currentTarget.matches(':hover')) setDeleteHintOpen(false); }}>\n <ToolFaces state={label(action)}><span className=\"limr-tool-face\" data-visible={success !== action.id || undefined} aria-hidden=\"true\">\n <span className=\"limr-tool-icon\" key={typeof action.label === 'function' ? action.label(context) : action.label}>{typeof action.icon === 'function' ? action.icon(context) : action.icon}</span><span className=\"limr-tool-label limr-underline\">{typeof action.label === 'function' ? action.label(context) : action.label}</span>\n </span>\n {action.successLabel && <span className=\"limr-tool-face\" data-visible={success === action.id || undefined} aria-hidden=\"true\">\n <span className=\"limr-tool-icon\">{action.successIcon ?? (typeof action.icon === 'function' ? action.icon(context) : action.icon)}</span><span className=\"limr-tool-label limr-underline\">{typeof action.successLabel === 'function' ? action.successLabel(context) : action.successLabel}</span>\n </span>}</ToolFaces>\n </button>}\n </div>)}</div>\n {readOnly && <p className=\"limr-toolbar-readonly-hint\">{context.locale.inlineHighlightHint ?? 'Markdown inline highlight, editing unavailable'}</p>}\n {expandedAction && <div id={panelId} className=\"limr-toolbar-panel\" key={expandedAction.id} role=\"group\" aria-label={label(expandedAction)}><OverlayScrollArea active label={label(expandedAction)}>{expandedAction.renderExpanded!(actionContext(expandedAction))}</OverlayScrollArea></div>}\n {hint && <Collapse open={deleteHintOpen} keepMounted className=\"limr-toolbar-delete-warning\"><p id={`${panelId}-delete`} className=\"limr-toolbar-delete-hint\">{hint}</p></Collapse>}\n {error && <span role=\"alert\" className=\"limr-action-error\">{error}</span>}\n </div>\n </div></FloatingPortal>;\n}\n","import { useRef, useState, type ReactNode } from 'react';\nimport { useIsomorphicLayoutEffect } from '../react/context';\n\n/** Keep both faces measurable during a crossfade; only the active face sets\n * the width. CSS animates real geometry, including an interrupted reversal. */\nexport function ToolFaces({ state, children }: { state: string; children: ReactNode }) {\n const ref = useRef<HTMLSpanElement>(null);\n const [width, setWidth] = useState<number>();\n useIsomorphicLayoutEffect(() => {\n const element = ref.current; if (!element) return;\n const faces = [...element.querySelectorAll<HTMLElement>('.limr-tool-face')];\n const measure = () => {\n const face = faces.find(face => face.hasAttribute('data-visible'));\n if (face) setWidth(face.offsetWidth);\n };\n measure();\n const observer = new ResizeObserver(measure); faces.forEach(face => observer.observe(face));\n return () => observer.disconnect();\n }, [state]);\n return <span className=\"limr-tool-faces\" ref={ref} style={{ width }}>{children}</span>;\n}\n"],"mappings":"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","names":["useEffect","useId","useRef","useState","useEffect","end","useEffect","useEffect","useRef","useState","useEffect","jsx","jsxs","useEffect","document","Fragment","jsx","jsxs","SidebarCardBody","document","useRef","useState","element","height","size","useEffect","displacement","active","hovered","style","useEffect","useState","useSyncExternalStore","useRef","useRef","jsx","jsxs","useSyncExternalStore","useState","useEffect","update","anchor","availableHeight","useEffect","useMemo","useRef","useState","autoUpdate","FloatingPortal","offset","shift","useFloating","useRef","useState","jsx","useRef","useState","face","jsx","jsxs","useMemo","useState","useRef","useFloating","offset","placement","shift","autoUpdate","useEffect","FloatingPortal","Fragment","jsx","jsxs","useRef","useState","useEffect","useId"]}