@embedpdf/plugin-annotation 1.0.7 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +48 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +29 -7
- package/dist/index.d.ts +29 -7
- package/dist/index.js +51 -6
- package/dist/index.js.map +1 -1
- package/dist/preact/index.cjs +795 -148
- package/dist/preact/index.cjs.map +1 -1
- package/dist/preact/index.d.cts +4 -1
- package/dist/preact/index.d.ts +4 -1
- package/dist/preact/index.js +795 -146
- package/dist/preact/index.js.map +1 -1
- package/package.json +8 -8
package/dist/preact/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/preact/hooks/use-annotation.ts","../../src/preact/components/annotations.tsx","../../src/preact/components/selectable-container.tsx","../../src/preact/components/text-markup/highlight.tsx","../../src/preact/components/text-markup/underline.tsx","../../src/preact/components/text-markup/strikeout.tsx","../../src/preact/components/text-markup/squiggly.tsx","../../src/preact/components/text-markup.tsx","../../src/preact/components/annotation-layer.tsx"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/preact';\nimport { AnnotationPlugin } from '@embedpdf/plugin-annotation';\n\nexport const useAnnotationPlugin = () => usePlugin<AnnotationPlugin>(AnnotationPlugin.id);\nexport const useAnnotationCapability = () => useCapability<AnnotationPlugin>(AnnotationPlugin.id);\n","/** @jsxImportSource preact */\nimport { JSX } from 'preact';\nimport { PdfAnnotationObject, PdfAnnotationSubtype } from '@embedpdf/models';\nimport { PointerEventHandlers } from '@embedpdf/plugin-interaction-manager';\nimport { usePointerHandlers } from '@embedpdf/plugin-interaction-manager/preact';\nimport {\n getAnnotationsByPageIndex,\n getSelectedAnnotationByPageIndex,\n TrackedAnnotation,\n} from '@embedpdf/plugin-annotation';\nimport { useAnnotationCapability } from '../hooks';\nimport { useMemo, useState, useEffect } from 'preact/hooks';\nimport { SelectableAnnotationContainer } from './selectable-container';\nimport { Highlight } from './text-markup/highlight';\nimport { Underline } from './text-markup/underline';\nimport { Strikeout } from './text-markup/strikeout';\nimport { Squiggly } from './text-markup/squiggly';\n\ninterface AnnotationsProps {\n pageIndex: number;\n scale: number;\n}\n\nexport function Annotations({ pageIndex, scale }: AnnotationsProps) {\n const { provides: annotationProvides } = useAnnotationCapability();\n const [annotations, setAnnotations] = useState<TrackedAnnotation[]>([]);\n const { register } = usePointerHandlers({ pageIndex });\n const [selectionState, setSelectionState] = useState<TrackedAnnotation | null>(null);\n\n useEffect(() => {\n if (annotationProvides) {\n annotationProvides.onStateChange((state) => {\n setAnnotations(getAnnotationsByPageIndex(state, pageIndex));\n setSelectionState(getSelectedAnnotationByPageIndex(state, pageIndex));\n });\n }\n }, [annotationProvides]);\n\n const handlers = useMemo(\n (): PointerEventHandlers<MouseEvent> => ({\n onPointerDown: (_, pe) => {\n // Only deselect if clicking directly on the layer (not on an annotation)\n if (pe.target === pe.currentTarget && annotationProvides) {\n annotationProvides.deselectAnnotation();\n }\n },\n }),\n [annotationProvides],\n );\n\n useEffect(() => {\n return register(handlers);\n }, [register, handlers]);\n\n return (\n <>\n {annotations.map((annotation) => {\n const isSelected = selectionState?.localId === annotation.localId;\n\n switch (annotation.object.type) {\n case PdfAnnotationSubtype.UNDERLINE:\n return (\n <SelectableAnnotationContainer\n key={annotation.localId}\n trackedAnnotation={annotation}\n scale={scale}\n isSelected={isSelected}\n pageIndex={pageIndex}\n >\n <Underline\n color={annotation.object.color}\n opacity={annotation.object.opacity}\n rects={annotation.object.segmentRects}\n scale={scale}\n />\n </SelectableAnnotationContainer>\n );\n case PdfAnnotationSubtype.STRIKEOUT:\n return (\n <SelectableAnnotationContainer\n key={annotation.localId}\n trackedAnnotation={annotation}\n scale={scale}\n isSelected={isSelected}\n pageIndex={pageIndex}\n >\n <Strikeout\n color={annotation.object.color}\n opacity={annotation.object.opacity}\n rects={annotation.object.segmentRects}\n scale={scale}\n />\n </SelectableAnnotationContainer>\n );\n case PdfAnnotationSubtype.SQUIGGLY:\n return (\n <SelectableAnnotationContainer\n key={annotation.localId}\n trackedAnnotation={annotation}\n scale={scale}\n isSelected={isSelected}\n pageIndex={pageIndex}\n >\n <Squiggly\n color={annotation.object.color}\n opacity={annotation.object.opacity}\n rects={annotation.object.segmentRects}\n scale={scale}\n />\n </SelectableAnnotationContainer>\n );\n case PdfAnnotationSubtype.HIGHLIGHT:\n return (\n <SelectableAnnotationContainer\n key={annotation.localId}\n trackedAnnotation={annotation}\n scale={scale}\n isSelected={isSelected}\n pageIndex={pageIndex}\n >\n <Highlight\n color={annotation.object.color}\n opacity={annotation.object.opacity}\n rects={annotation.object.segmentRects}\n scale={scale}\n />\n </SelectableAnnotationContainer>\n );\n default:\n return null;\n }\n })}\n </>\n );\n}\n","/** @jsxImportSource preact */\nimport { ComponentChildren } from 'preact';\nimport { useCallback } from 'preact/hooks';\nimport { useAnnotationCapability } from '../hooks';\nimport { useSelectionCapability } from '@embedpdf/plugin-selection/preact';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n\ninterface SelectableAnnotationContainerProps {\n trackedAnnotation: TrackedAnnotation;\n scale: number;\n isSelected?: boolean;\n pageIndex: number;\n children: ComponentChildren;\n}\n\nexport function SelectableAnnotationContainer({\n trackedAnnotation,\n scale,\n isSelected = false,\n pageIndex,\n children,\n}: SelectableAnnotationContainerProps) {\n const { provides: annotationProvides } = useAnnotationCapability();\n const { provides: selectionProvides } = useSelectionCapability();\n const handleClick = useCallback(\n (e: MouseEvent) => {\n e.stopPropagation();\n if (annotationProvides && selectionProvides) {\n annotationProvides.selectAnnotation(pageIndex, trackedAnnotation.localId);\n selectionProvides.clear();\n }\n },\n [annotationProvides, selectionProvides, isSelected, pageIndex, trackedAnnotation.localId],\n );\n\n return (\n <>\n {children}\n <div\n className=\"markup-annotation\"\n style={{\n position: 'absolute',\n mixBlendMode: 'multiply',\n cursor: 'pointer',\n outline: isSelected ? '2px solid #007ACC' : 'none',\n outlineOffset: isSelected ? '1px' : '0px',\n left: `${trackedAnnotation.object.rect.origin.x * scale}px`,\n top: `${trackedAnnotation.object.rect.origin.y * scale}px`,\n width: `${trackedAnnotation.object.rect.size.width * scale}px`,\n height: `${trackedAnnotation.object.rect.size.height * scale}px`,\n zIndex: 1,\n }}\n onMouseDown={handleClick}\n />\n </>\n );\n}\n","/** @jsxImportSource preact */\nimport { JSX } from 'preact';\nimport { Rect } from '@embedpdf/models';\n\ninterface HighlightProps {\n color?: string;\n opacity?: number;\n rects: Rect[];\n scale: number;\n}\n\nexport function Highlight({ color = '#FFFF00', opacity = 0.5, rects, scale }: HighlightProps) {\n return (\n <>\n {rects.map((b, i) => (\n <div\n key={i}\n style={{\n position: 'absolute',\n left: b.origin.x * scale,\n top: b.origin.y * scale,\n width: b.size.width * scale,\n height: b.size.height * scale,\n background: color,\n opacity: opacity,\n pointerEvents: 'none',\n }}\n />\n ))}\n </>\n );\n}\n","/** @jsxImportSource preact */\nimport { JSX } from 'preact';\nimport { Rect } from '@embedpdf/models';\n\ninterface UnderlineProps {\n color?: string;\n opacity?: number;\n rects: Rect[];\n scale: number;\n}\n\nexport function Underline({ color = '#FFFF00', opacity = 0.5, rects, scale }: UnderlineProps) {\n const thickness = 2 * scale; // 2 CSS px at 100 % zoom\n\n return (\n <>\n {rects.map((r, i) => (\n <div\n key={i}\n style={{\n position: 'absolute',\n left: r.origin.x * scale,\n top: (r.origin.y + r.size.height) * scale - thickness,\n width: r.size.width * scale,\n height: thickness,\n background: color,\n opacity: opacity,\n pointerEvents: 'none',\n }}\n />\n ))}\n </>\n );\n}\n","/** @jsxImportSource preact */\nimport { JSX } from 'preact';\nimport { Rect } from '@embedpdf/models';\n\ninterface StrikeoutProps {\n color?: string;\n opacity?: number;\n rects: Rect[];\n scale: number;\n}\n\nexport function Strikeout({ color = '#FFFF00', opacity = 0.5, rects, scale }: StrikeoutProps) {\n const thickness = 2 * scale;\n\n return (\n <>\n {rects.map((r, i) => (\n <div\n key={i}\n style={{\n position: 'absolute',\n left: r.origin.x * scale,\n top: (r.origin.y + r.size.height / 2) * scale - thickness / 2,\n width: r.size.width * scale,\n height: thickness,\n background: color,\n opacity: opacity,\n pointerEvents: 'none',\n }}\n />\n ))}\n </>\n );\n}\n","/** @jsxImportSource preact */\nimport { JSX } from 'preact';\nimport { Rect } from '@embedpdf/models';\n\ninterface SquigglyProps {\n color?: string;\n opacity?: number;\n rects: Rect[];\n scale: number;\n}\n\nexport function Squiggly({ color = '#FFFF00', opacity = 0.5, rects, scale }: SquigglyProps) {\n const amplitude = 2 * scale; // wave height\n const period = 6 * scale; // wave length\n\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${period}\" height=\"${amplitude * 2}\" viewBox=\"0 0 ${period} ${amplitude * 2}\">\n <path d=\"M0 ${amplitude} Q ${period / 4} 0 ${period / 2} ${amplitude} T ${period} ${amplitude}\"\n fill=\"none\" stroke=\"${color}\" stroke-width=\"${amplitude}\" stroke-linecap=\"round\"/>\n </svg>`;\n\n // Completely escape the SVG markup\n const svgDataUri = `url(\"data:image/svg+xml;utf8,${encodeURIComponent(svg)}\")`;\n\n return (\n <>\n {rects.map((r, i) => (\n <div\n key={i}\n style={{\n position: 'absolute',\n left: r.origin.x * scale,\n top: (r.origin.y + r.size.height) * scale - amplitude,\n width: r.size.width * scale,\n height: amplitude * 2,\n backgroundImage: svgDataUri,\n backgroundRepeat: 'repeat-x',\n backgroundSize: `${period}px ${amplitude * 2}px`,\n opacity: opacity,\n pointerEvents: 'none',\n }}\n />\n ))}\n </>\n );\n}\n","/** @jsxImportSource preact */\nimport { JSX } from 'preact';\nimport { PdfAnnotationSubtype, Rect } from '@embedpdf/models';\nimport { ActiveTool } from '@embedpdf/plugin-annotation';\nimport { useSelectionCapability } from '@embedpdf/plugin-selection/preact';\n\nimport { useEffect, useState } from 'preact/hooks';\nimport { useAnnotationCapability } from '../hooks';\nimport { Highlight } from './text-markup/highlight';\nimport { Squiggly } from './text-markup/squiggly';\nimport { Underline } from './text-markup/underline';\nimport { Strikeout } from './text-markup/strikeout';\n\ninterface TextMarkupProps {\n pageIndex: number;\n scale: number;\n}\n\nexport function TextMarkup({ pageIndex, scale }: TextMarkupProps) {\n const { provides: selectionProvides } = useSelectionCapability();\n const { provides: annotationProvides } = useAnnotationCapability();\n const [rects, setRects] = useState<Array<Rect>>([]);\n const [activeTool, setActiveTool] = useState<ActiveTool>({ mode: null, defaults: null });\n\n useEffect(() => {\n if (!selectionProvides) return;\n\n const off = selectionProvides.onSelectionChange(() => {\n setRects(selectionProvides.getHighlightRectsForPage(pageIndex));\n });\n return off;\n }, [selectionProvides, pageIndex]);\n\n useEffect(() => {\n if (!annotationProvides) return;\n\n const off = annotationProvides.onActiveToolChange(setActiveTool);\n return off;\n }, [annotationProvides]);\n\n switch (activeTool.mode) {\n case PdfAnnotationSubtype.UNDERLINE:\n return (\n <Underline\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n rects={rects}\n scale={scale}\n />\n );\n case PdfAnnotationSubtype.HIGHLIGHT:\n return (\n <Highlight\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n rects={rects}\n scale={scale}\n />\n );\n case PdfAnnotationSubtype.STRIKEOUT:\n return (\n <Strikeout\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n rects={rects}\n scale={scale}\n />\n );\n case PdfAnnotationSubtype.SQUIGGLY:\n return (\n <Squiggly\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n rects={rects}\n scale={scale}\n />\n );\n default:\n return null;\n }\n}\n","/** @jsxImportSource preact */\nimport { JSX } from 'preact';\nimport { Annotations } from './annotations';\nimport { TextMarkup } from './text-markup';\n\ntype AnnotationLayerProps = Omit<JSX.HTMLAttributes<HTMLDivElement>, 'style'> & {\n pageIndex: number;\n scale: number;\n style?: JSX.CSSProperties;\n};\n\nexport function AnnotationLayer({ pageIndex, scale, style, ...props }: AnnotationLayerProps) {\n return (\n <div\n style={{\n ...style,\n }}\n {...props}\n >\n <Annotations pageIndex={pageIndex} scale={scale} />\n <TextMarkup pageIndex={pageIndex} scale={scale} />\n </div>\n );\n}\n"],"mappings":"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","names":["Fragment","jsx","Fragment","jsx","Fragment","jsx","Fragment","jsx","Fragment","jsx","PdfAnnotationSubtype","useSelectionCapability","useEffect","useState","jsx","useSelectionCapability","useState","useEffect","PdfAnnotationSubtype","jsx","jsxs"]}
|
|
1
|
+
{"version":3,"sources":["../../src/preact/hooks/use-annotation.ts","../../src/preact/components/annotations.tsx","../../src/preact/components/annotation-container.tsx","../../src/preact/components/text-markup/highlight.tsx","../../src/preact/components/text-markup/underline.tsx","../../src/preact/components/text-markup/strikeout.tsx","../../src/preact/components/text-markup/squiggly.tsx","../../src/preact/components/annotations/ink.tsx","../../src/shared/resize-ink.ts","../../src/preact/components/text-markup.tsx","../../src/preact/components/annotations/ink-paint.tsx","../../src/preact/components/annotation-layer.tsx"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/preact';\nimport { AnnotationPlugin } from '@embedpdf/plugin-annotation';\n\nexport const useAnnotationPlugin = () => usePlugin<AnnotationPlugin>(AnnotationPlugin.id);\nexport const useAnnotationCapability = () => useCapability<AnnotationPlugin>(AnnotationPlugin.id);\n","/** @jsxImportSource preact */\nimport { JSX } from 'preact';\nimport { PdfAnnotationSubtype, PdfInkAnnoObject } from '@embedpdf/models';\nimport { PointerEventHandlers } from '@embedpdf/plugin-interaction-manager';\nimport { usePointerHandlers } from '@embedpdf/plugin-interaction-manager/preact';\nimport {\n getAnnotationsByPageIndex,\n getSelectedAnnotationByPageIndex,\n TrackedAnnotation,\n} from '@embedpdf/plugin-annotation';\nimport { useAnnotationCapability } from '../hooks';\nimport { useMemo, useState, useEffect, useCallback } from 'preact/hooks';\nimport { AnnotationContainer } from './annotation-container';\nimport { Highlight } from './text-markup/highlight';\nimport { Underline } from './text-markup/underline';\nimport { Strikeout } from './text-markup/strikeout';\nimport { Squiggly } from './text-markup/squiggly';\nimport { Ink } from './annotations/ink';\nimport { useSelectionCapability } from '@embedpdf/plugin-selection/preact';\nimport { resizeInkAnnotation } from '../../shared/resize-ink';\n\ninterface AnnotationsProps {\n pageIndex: number;\n scale: number;\n rotation: number;\n}\n\nexport function Annotations(annotationsProps: AnnotationsProps) {\n const { pageIndex, scale } = annotationsProps;\n const { provides: annotationProvides } = useAnnotationCapability();\n const { provides: selectionProvides } = useSelectionCapability();\n const [annotations, setAnnotations] = useState<TrackedAnnotation[]>([]);\n const { register } = usePointerHandlers({ pageIndex });\n const [selectionState, setSelectionState] = useState<TrackedAnnotation | null>(null);\n\n useEffect(() => {\n if (annotationProvides) {\n annotationProvides.onStateChange((state) => {\n setAnnotations(getAnnotationsByPageIndex(state, pageIndex));\n setSelectionState(getSelectedAnnotationByPageIndex(state, pageIndex));\n });\n }\n }, [annotationProvides]);\n\n const handlers = useMemo(\n (): PointerEventHandlers<MouseEvent> => ({\n onPointerDown: (_, pe) => {\n // Only deselect if clicking directly on the layer (not on an annotation)\n if (pe.target === pe.currentTarget && annotationProvides) {\n annotationProvides.deselectAnnotation();\n }\n },\n }),\n [annotationProvides],\n );\n\n const handleClick = useCallback(\n (e: MouseEvent, annotation: TrackedAnnotation) => {\n e.stopPropagation();\n if (annotationProvides && selectionProvides) {\n annotationProvides.selectAnnotation(pageIndex, annotation.localId);\n selectionProvides.clear();\n }\n },\n [annotationProvides, selectionProvides, pageIndex],\n );\n\n useEffect(() => {\n return register(handlers);\n }, [register, handlers]);\n\n return (\n <>\n {annotations.map((annotation) => {\n const isSelected = selectionState?.localId === annotation.localId;\n\n switch (annotation.object.type) {\n case PdfAnnotationSubtype.UNDERLINE:\n return (\n <AnnotationContainer\n key={annotation.localId}\n trackedAnnotation={annotation}\n isSelected={isSelected}\n isDraggable={false}\n isResizable={false}\n style={{ mixBlendMode: 'multiply' }}\n {...annotationsProps}\n >\n <Underline\n rect={annotation.object.rect}\n color={annotation.object.color}\n opacity={annotation.object.opacity}\n rects={annotation.object.segmentRects}\n scale={scale}\n onClick={(e) => handleClick(e, annotation)}\n />\n </AnnotationContainer>\n );\n case PdfAnnotationSubtype.STRIKEOUT:\n return (\n <AnnotationContainer\n key={annotation.localId}\n trackedAnnotation={annotation}\n isSelected={isSelected}\n isDraggable={false}\n isResizable={false}\n style={{ mixBlendMode: 'multiply' }}\n {...annotationsProps}\n >\n <Strikeout\n rect={annotation.object.rect}\n color={annotation.object.color}\n opacity={annotation.object.opacity}\n rects={annotation.object.segmentRects}\n scale={scale}\n onClick={(e) => handleClick(e, annotation)}\n />\n </AnnotationContainer>\n );\n case PdfAnnotationSubtype.SQUIGGLY:\n return (\n <AnnotationContainer\n key={annotation.localId}\n trackedAnnotation={annotation}\n isSelected={isSelected}\n isDraggable={false}\n isResizable={false}\n style={{ mixBlendMode: 'multiply' }}\n {...annotationsProps}\n >\n <Squiggly\n color={annotation.object.color}\n opacity={annotation.object.opacity}\n rects={annotation.object.segmentRects}\n rect={annotation.object.rect}\n scale={scale}\n onClick={(e) => handleClick(e, annotation)}\n />\n </AnnotationContainer>\n );\n case PdfAnnotationSubtype.HIGHLIGHT:\n return (\n <AnnotationContainer\n key={annotation.localId}\n trackedAnnotation={annotation}\n isSelected={isSelected}\n isDraggable={false}\n isResizable={false}\n style={{ mixBlendMode: 'multiply' }}\n {...annotationsProps}\n >\n <Highlight\n color={annotation.object.color}\n opacity={annotation.object.opacity}\n rects={annotation.object.segmentRects}\n scale={scale}\n rect={annotation.object.rect}\n onClick={(e) => handleClick(e, annotation)}\n />\n </AnnotationContainer>\n );\n case PdfAnnotationSubtype.INK:\n return (\n <AnnotationContainer\n key={annotation.localId}\n isSelected={isSelected}\n trackedAnnotation={annotation}\n outlineOffset={6}\n computeResizePatch={resizeInkAnnotation}\n {...annotationsProps}\n >\n {(obj: PdfInkAnnoObject) => (\n <Ink\n color={obj.color}\n opacity={obj.opacity}\n strokeWidth={obj.strokeWidth}\n inkList={obj.inkList}\n rect={obj.rect}\n scale={scale}\n onClick={(e) => handleClick(e, annotation)}\n />\n )}\n </AnnotationContainer>\n );\n default:\n return null;\n }\n })}\n </>\n );\n}\n","/** @jsxImportSource preact */\nimport { ComponentChildren, JSX } from 'preact';\nimport { useEffect, useRef, useState } from 'preact/hooks';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\nimport { PdfAnnotationObject, Rect, restoreOffset, restoreRect } from '@embedpdf/models';\nimport { useAnnotationCapability } from '../hooks';\nimport { ResizeDirection } from '../../shared/types';\n\ntype AnnotationContainerProps = Omit<JSX.HTMLAttributes<HTMLDivElement>, 'style'> & {\n scale: number;\n isSelected?: boolean;\n pageIndex: number;\n rotation: number;\n trackedAnnotation: TrackedAnnotation;\n children: ComponentChildren | ((annotation: PdfAnnotationObject) => ComponentChildren);\n style?: JSX.CSSProperties;\n isDraggable?: boolean;\n isResizable?: boolean;\n outlineOffset?: number;\n computeResizePatch?: (\n original: PdfAnnotationObject,\n newRect: Rect,\n direction: ResizeDirection,\n ) => Partial<PdfAnnotationObject>;\n};\n\ntype Point = { x: number; y: number };\n\nexport function AnnotationContainer({\n scale,\n pageIndex,\n rotation,\n trackedAnnotation,\n children,\n style,\n outlineOffset = 1,\n isSelected = false,\n isDraggable = true,\n isResizable = true,\n computeResizePatch,\n ...props\n}: AnnotationContainerProps) {\n const { provides: annotationProvides } = useAnnotationCapability();\n const ref = useRef<HTMLDivElement>(null);\n const [dragState, setDragState] = useState<'idle' | 'dragging' | 'resizing'>('idle');\n const [resizeDirection, setResizeDirection] = useState<ResizeDirection | null>(null);\n const [startPos, setStartPos] = useState<Point | null>(null);\n const [startRect, setStartRect] = useState<Rect | null>(null);\n const [currentRect, setCurrentRect] = useState<Rect>(trackedAnnotation.object.rect);\n const [previewObject, setPreviewObject] = useState<Partial<PdfAnnotationObject> | null>(null);\n\n useEffect(() => {\n setCurrentRect(trackedAnnotation.object.rect);\n setPreviewObject(null);\n }, [trackedAnnotation]);\n\n const handlePointerDown = (e: PointerEvent) => {\n if (!isSelected) return;\n\n e.stopPropagation();\n e.preventDefault();\n\n const target = e.target as HTMLElement;\n\n if (isResizable && target.classList.contains('resize-handle')) {\n setDragState('resizing');\n setResizeDirection(target.dataset.direction as ResizeDirection);\n } else if (isDraggable) {\n setDragState('dragging');\n } else {\n return;\n }\n\n setStartPos({ x: e.clientX, y: e.clientY });\n setStartRect(currentRect);\n\n ref.current?.setPointerCapture(e.pointerId);\n };\n\n const handlePointerMove = (e: PointerEvent) => {\n if (dragState === 'idle' || !startPos || !startRect) return;\n\n const dispDelta = { x: e.clientX - startPos.x, y: e.clientY - startPos.y };\n const { x: dx, y: dy } = restoreOffset(dispDelta, rotation, scale);\n\n let newOriginX = startRect.origin.x;\n let newOriginY = startRect.origin.y;\n let newWidth = startRect.size.width;\n let newHeight = startRect.size.height;\n\n if (dragState === 'dragging') {\n newOriginX += dx;\n newOriginY += dy;\n } else if (dragState === 'resizing' && resizeDirection) {\n if (resizeDirection.includes('right')) {\n newWidth += dx;\n } else if (resizeDirection.includes('left')) {\n newOriginX += dx;\n newWidth -= dx;\n }\n\n if (resizeDirection.includes('bottom')) {\n newHeight += dy;\n } else if (resizeDirection.includes('top')) {\n newOriginY += dy;\n newHeight -= dy;\n }\n\n // Prevent negative dimensions\n if (newWidth < 1 || newHeight < 1) return;\n }\n\n const tentativeRect = {\n origin: { x: newOriginX, y: newOriginY },\n size: { width: newWidth, height: newHeight },\n };\n\n let previewPatch: Partial<PdfAnnotationObject> = { rect: tentativeRect };\n\n if (computeResizePatch) {\n const dir = dragState === 'resizing' ? resizeDirection : 'bottom-right';\n if (dir) {\n previewPatch = computeResizePatch(trackedAnnotation.object, tentativeRect, dir);\n }\n }\n\n setCurrentRect(previewPatch.rect || tentativeRect);\n setPreviewObject(previewPatch);\n };\n\n const handlePointerUp = (e: PointerEvent) => {\n if (dragState === 'idle') return;\n\n const usedDirection = resizeDirection || 'bottom-right';\n setDragState('idle');\n setResizeDirection(null);\n\n ref.current?.releasePointerCapture(e.pointerId);\n\n // Commit the changes\n if (annotationProvides && trackedAnnotation) {\n let patch: Partial<PdfAnnotationObject> = { rect: currentRect };\n if (computeResizePatch && usedDirection) {\n patch = computeResizePatch(trackedAnnotation.object, currentRect, usedDirection);\n }\n annotationProvides.updateAnnotation(pageIndex, trackedAnnotation.localId, patch);\n }\n\n setStartPos(null);\n setStartRect(null);\n setPreviewObject(null);\n };\n\n const currentObject = previewObject\n ? ({ ...trackedAnnotation.object, ...previewObject } as PdfAnnotationObject)\n : trackedAnnotation.object;\n\n return (\n <div\n ref={ref}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n style={{\n position: 'absolute',\n outline: isSelected ? '1px solid #007ACC' : 'none',\n outlineOffset: isSelected ? `${outlineOffset}px` : '0px',\n left: `${currentRect.origin.x * scale}px`,\n top: `${currentRect.origin.y * scale}px`,\n width: `${currentRect.size.width * scale}px`,\n height: `${currentRect.size.height * scale}px`,\n pointerEvents: isSelected ? 'auto' : 'none',\n cursor: isSelected && isDraggable ? 'move' : 'default',\n ...style,\n }}\n {...props}\n >\n {typeof children === 'function' ? children(currentObject) : children}\n {isSelected && isResizable && (\n <>\n <div\n className=\"resize-handle\"\n data-direction=\"top-left\"\n style={{\n position: 'absolute',\n top: -7 - outlineOffset,\n left: -7 - outlineOffset,\n width: 13,\n height: 13,\n background: 'blue',\n borderRadius: '50%',\n cursor: rotation % 2 ? 'nesw-resize' : 'nwse-resize',\n }}\n />\n <div\n className=\"resize-handle\"\n data-direction=\"top-right\"\n style={{\n position: 'absolute',\n top: -7 - outlineOffset,\n right: -7 - outlineOffset,\n width: 13,\n height: 13,\n background: 'blue',\n borderRadius: '50%',\n cursor: rotation % 2 ? 'nwse-resize' : 'nesw-resize',\n }}\n />\n <div\n className=\"resize-handle\"\n data-direction=\"bottom-left\"\n style={{\n position: 'absolute',\n bottom: -7 - outlineOffset,\n left: -7 - outlineOffset,\n width: 13,\n height: 13,\n background: 'blue',\n borderRadius: '50%',\n cursor: rotation % 2 ? 'nwse-resize' : 'nesw-resize',\n }}\n />\n <div\n className=\"resize-handle\"\n data-direction=\"bottom-right\"\n style={{\n position: 'absolute',\n bottom: -7 - outlineOffset,\n right: -7 - outlineOffset,\n width: 13,\n height: 13,\n background: 'blue',\n borderRadius: '50%',\n cursor: rotation % 2 ? 'nesw-resize' : 'nwse-resize',\n }}\n />\n </>\n )}\n </div>\n );\n}\n","/** @jsxImportSource preact */\nimport { JSX } from 'preact';\nimport { Rect } from '@embedpdf/models';\n\ntype HighlightProps = Omit<JSX.HTMLAttributes<HTMLDivElement>, 'style'> & {\n color?: string;\n opacity?: number;\n rects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n style?: JSX.CSSProperties;\n};\n\nexport function Highlight({\n color = '#FFFF00',\n opacity = 0.5,\n rects,\n rect,\n scale,\n onClick,\n style,\n ...props\n}: HighlightProps) {\n return (\n <>\n {rects.map((b, i) => (\n <div\n key={i}\n onMouseDown={onClick}\n style={{\n position: 'absolute',\n left: (rect ? b.origin.x - rect.origin.x : b.origin.x) * scale,\n top: (rect ? b.origin.y - rect.origin.y : b.origin.y) * scale,\n width: b.size.width * scale,\n height: b.size.height * scale,\n background: color,\n opacity: opacity,\n pointerEvents: onClick ? 'auto' : 'none',\n cursor: onClick ? 'pointer' : 'default',\n zIndex: onClick ? 1 : null,\n ...style,\n }}\n {...props}\n />\n ))}\n </>\n );\n}\n","/** @jsxImportSource preact */\nimport { JSX } from 'preact';\nimport { Rect } from '@embedpdf/models';\n\ntype UnderlineProps = Omit<JSX.HTMLAttributes<HTMLDivElement>, 'style'> & {\n color?: string;\n opacity?: number;\n rects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n style?: JSX.CSSProperties;\n};\n\nexport function Underline({\n color = '#FFFF00',\n opacity = 0.5,\n rects,\n rect,\n scale,\n onClick,\n style,\n ...props\n}: UnderlineProps) {\n const thickness = 2 * scale; // 2 CSS px at 100 % zoom\n\n return (\n <>\n {rects.map((r, i) => (\n <div\n key={i}\n onMouseDown={onClick}\n style={{\n position: 'absolute',\n left: (rect ? r.origin.x - rect.origin.x : r.origin.x) * scale,\n top: (rect ? r.origin.y - rect.origin.y : r.origin.y) * scale,\n width: r.size.width * scale,\n height: r.size.height * scale,\n background: 'transparent',\n pointerEvents: onClick ? 'auto' : 'none',\n cursor: onClick ? 'pointer' : 'default',\n zIndex: onClick ? 1 : 0,\n ...style,\n }}\n {...props}\n >\n {/* Visual underline */}\n <div\n style={{\n position: 'absolute',\n left: 0,\n bottom: 0,\n width: '100%',\n height: thickness,\n background: color,\n opacity: opacity,\n pointerEvents: 'none',\n }}\n />\n </div>\n ))}\n </>\n );\n}\n","/** @jsxImportSource preact */\nimport { JSX } from 'preact';\nimport { Rect } from '@embedpdf/models';\n\ntype StrikeoutProps = Omit<JSX.HTMLAttributes<HTMLDivElement>, 'style'> & {\n color?: string;\n opacity?: number;\n rects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n style?: JSX.CSSProperties;\n};\n\nexport function Strikeout({\n color = '#FFFF00',\n opacity = 0.5,\n rects,\n rect,\n scale,\n onClick,\n style,\n ...props\n}: StrikeoutProps) {\n const thickness = 2 * scale;\n\n return (\n <>\n {rects.map((r, i) => (\n <div\n key={i}\n onMouseDown={onClick}\n style={{\n position: 'absolute',\n left: (rect ? r.origin.x - rect.origin.x : r.origin.x) * scale,\n top: (rect ? r.origin.y - rect.origin.y : r.origin.y) * scale,\n width: r.size.width * scale,\n height: r.size.height * scale,\n background: 'transparent',\n pointerEvents: onClick ? 'auto' : 'none',\n cursor: onClick ? 'pointer' : 'default',\n zIndex: onClick ? 1 : 0,\n ...style,\n }}\n {...props}\n >\n {/* Visual strikeout line */}\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: '50%',\n width: '100%',\n height: thickness,\n background: color,\n opacity: opacity,\n transform: 'translateY(-50%)',\n pointerEvents: 'none',\n }}\n />\n </div>\n ))}\n </>\n );\n}\n","/** @jsxImportSource preact */\nimport { JSX } from 'preact';\nimport { Rect } from '@embedpdf/models';\n\ntype SquigglyProps = Omit<JSX.HTMLAttributes<HTMLDivElement>, 'style'> & {\n color?: string;\n opacity?: number;\n rects: Rect[];\n rect?: Rect;\n scale: number;\n onClick?: (e: MouseEvent) => void;\n style?: JSX.CSSProperties;\n};\n\nexport function Squiggly({\n color = '#FFFF00',\n opacity = 0.5,\n rects,\n rect,\n scale,\n onClick,\n style,\n ...props\n}: SquigglyProps) {\n const amplitude = 2 * scale; // wave height\n const period = 6 * scale; // wave length\n\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${period}\" height=\"${amplitude * 2}\" viewBox=\"0 0 ${period} ${amplitude * 2}\">\n <path d=\"M0 ${amplitude} Q ${period / 4} 0 ${period / 2} ${amplitude} T ${period} ${amplitude}\"\n fill=\"none\" stroke=\"${color}\" stroke-width=\"${amplitude}\" stroke-linecap=\"round\"/>\n </svg>`;\n\n // Completely escape the SVG markup\n const svgDataUri = `url(\"data:image/svg+xml;utf8,${encodeURIComponent(svg)}\")`;\n\n return (\n <>\n {rects.map((r, i) => (\n <div\n key={i}\n onMouseDown={onClick}\n style={{\n position: 'absolute',\n left: (rect ? r.origin.x - rect.origin.x : r.origin.x) * scale,\n top: (rect ? r.origin.y - rect.origin.y : r.origin.y) * scale,\n width: r.size.width * scale,\n height: r.size.height * scale,\n background: 'transparent',\n pointerEvents: onClick ? 'auto' : 'none',\n cursor: onClick ? 'pointer' : 'default',\n zIndex: onClick ? 1 : 0,\n ...style,\n }}\n {...props}\n >\n {/* Visual squiggly line */}\n <div\n style={{\n position: 'absolute',\n left: 0,\n bottom: 0,\n width: '100%',\n height: amplitude * 2,\n backgroundImage: svgDataUri,\n backgroundRepeat: 'repeat-x',\n backgroundSize: `${period}px ${amplitude * 2}px`,\n opacity: opacity,\n pointerEvents: 'none',\n }}\n />\n </div>\n ))}\n </>\n );\n}\n","/** @jsxImportSource preact */\nimport { JSX } from 'preact';\nimport { useMemo } from 'preact/hooks';\nimport { PdfInkListObject, Rect } from '@embedpdf/models';\n\n/* ---------------------------------------------------------------- *\\\n|* Types *|\n\\* ---------------------------------------------------------------- */\n\ninterface InkProps {\n /** Stroke colour (falls back to PDFium default black) */\n color?: string;\n /** 0 – 1 */\n opacity?: number;\n /** Line width in PDF units */\n strokeWidth: number;\n /** Array of strokes — exactly as in your JSON */\n inkList: PdfInkListObject[];\n /** Bounding box of the whole annotation */\n rect: Rect;\n /** Page zoom factor */\n scale: number;\n /** Callback for when the annotation is clicked */\n onClick?: (e: MouseEvent) => void;\n}\n\n/**\n * Renders a PDF Ink annotation (free-hand drawing) as SVG.\n */\nexport function Ink({\n color = '#000000',\n opacity = 1,\n strokeWidth,\n inkList,\n rect,\n scale,\n onClick,\n}: InkProps) {\n /* convert each stroke to an SVG <path d=\"\"> string */\n const paths = useMemo(() => {\n return inkList.map(({ points }) => {\n let d = '';\n points.forEach(({ x, y }, i) => {\n // localise to the annotation’s own bbox so viewBox can stay tidy\n const lx = x - rect.origin.x;\n const ly = y - rect.origin.y;\n d += (i === 0 ? 'M' : 'L') + lx + ' ' + ly + ' ';\n });\n return d.trim();\n });\n }, [inkList, rect]);\n\n /* absolute placement + scaling just like your text-markup components */\n const width = rect.size.width * scale;\n const height = rect.size.height * scale;\n\n return (\n <svg\n style={{\n position: 'absolute',\n width,\n height,\n pointerEvents: 'none',\n zIndex: 2,\n }}\n width={width}\n height={height}\n viewBox={`0 0 ${rect.size.width} ${rect.size.height}`}\n >\n {paths.map((d, i) => (\n <path\n key={i}\n d={d}\n fill=\"none\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n opacity={opacity}\n pointerEvents=\"visibleStroke\"\n onMouseDown={onClick}\n style={{\n cursor: 'pointer',\n }}\n />\n ))}\n </svg>\n );\n}\n","import {\n PdfAnnotationObject,\n PdfAnnotationSubtype,\n PdfInkAnnoObject,\n Rect,\n} from '@embedpdf/models';\nimport { ResizeDirection } from './types';\n\n/**\n * Computes a patch for resizing an ink annotation.\n * - Scales all points in inkList to fit the new rect.\n * - Scales strokeWidth proportionally (using average scale factor).\n * - Handles non-uniform scaling (stretch).\n * - Optionally preserves aspect ratio (set uniform=true).\n *\n * @param original The original ink annotation object.\n * @param newRect The new bounding rect after resize.\n * @param direction The resize handle direction (affects origin adjustments if needed).\n * @param uniform If true, constrains to uniform scaling (uses min scale factor).\n * @returns Partial patch { rect, inkList, strokeWidth } to apply.\n */\nexport function resizeInkAnnotation(\n original: PdfAnnotationObject, // Assumes type=INK\n newRect: Rect,\n direction: ResizeDirection,\n uniform: boolean = false,\n): Partial<PdfInkAnnoObject> {\n if (original.type !== PdfAnnotationSubtype.INK) {\n throw new Error('resizeInkAnnotation: original is not an ink annotation');\n }\n\n const oldRect = original.rect;\n let scaleX = newRect.size.width / oldRect.size.width;\n let scaleY = newRect.size.height / oldRect.size.height;\n\n // Enforce minimum size to avoid collapse\n const minSize = 10; // Arbitrary PDF units; adjust as needed\n if (newRect.size.width < minSize || newRect.size.height < minSize) {\n // Return empty patch or throw; for now, clamp\n scaleX = Math.max(scaleX, minSize / oldRect.size.width);\n scaleY = Math.max(scaleY, minSize / oldRect.size.height);\n newRect = {\n origin: newRect.origin,\n size: {\n width: oldRect.size.width * scaleX,\n height: oldRect.size.height * scaleY,\n },\n };\n }\n\n // Optional: Uniform scaling (preserve aspect ratio)\n if (uniform) {\n const minScale = Math.min(scaleX, scaleY);\n scaleX = minScale;\n scaleY = minScale;\n // Adjust newRect size accordingly (keep origin the same)\n newRect.size = {\n width: oldRect.size.width * minScale,\n height: oldRect.size.height * minScale,\n };\n }\n\n // Scale points: Normalize relative to old origin, scale, then add new origin\n const newInkList = original.inkList.map((stroke) => ({\n points: stroke.points.map((p) => ({\n x: newRect.origin.x + (p.x - oldRect.origin.x) * scaleX,\n y: newRect.origin.y + (p.y - oldRect.origin.y) * scaleY,\n })),\n }));\n\n // Scale strokeWidth: Use average scale (preserves \"thickness feel\")\n // Alternatives: Math.min(scaleX, scaleY) for conservative, or sqrt(scaleX * scaleY) for area-preserving\n const avgScale = (scaleX + scaleY) / 2;\n const newStrokeWidth = original.strokeWidth * avgScale;\n\n // Optional: Adjust based on direction (e.g., if resizing from top-left, points might need flip/recalc, but usually not needed as scaling handles it)\n\n return {\n rect: newRect,\n inkList: newInkList,\n strokeWidth: newStrokeWidth,\n };\n}\n","/** @jsxImportSource preact */\nimport { JSX } from 'preact';\nimport { PdfAnnotationSubtype, Rect } from '@embedpdf/models';\nimport { ActiveTool } from '@embedpdf/plugin-annotation';\nimport { useSelectionCapability } from '@embedpdf/plugin-selection/preact';\n\nimport { useEffect, useState } from 'preact/hooks';\nimport { useAnnotationCapability } from '../hooks';\nimport { Highlight } from './text-markup/highlight';\nimport { Squiggly } from './text-markup/squiggly';\nimport { Underline } from './text-markup/underline';\nimport { Strikeout } from './text-markup/strikeout';\n\ninterface TextMarkupProps {\n pageIndex: number;\n scale: number;\n}\n\nexport function TextMarkup({ pageIndex, scale }: TextMarkupProps) {\n const { provides: selectionProvides } = useSelectionCapability();\n const { provides: annotationProvides } = useAnnotationCapability();\n const [rects, setRects] = useState<Array<Rect>>([]);\n const [boundingRect, setBoundingRect] = useState<Rect | null>(null);\n const [activeTool, setActiveTool] = useState<ActiveTool>({ mode: null, defaults: null });\n\n useEffect(() => {\n if (!selectionProvides) return;\n\n const off = selectionProvides.onSelectionChange(() => {\n setRects(selectionProvides.getHighlightRectsForPage(pageIndex));\n setBoundingRect(selectionProvides.getBoundingRectForPage(pageIndex));\n });\n return off;\n }, [selectionProvides, pageIndex]);\n\n useEffect(() => {\n if (!annotationProvides) return;\n\n const off = annotationProvides.onActiveToolChange(setActiveTool);\n return off;\n }, [annotationProvides]);\n\n if (!boundingRect) return null;\n\n switch (activeTool.mode) {\n case PdfAnnotationSubtype.UNDERLINE:\n return (\n <div\n style={{\n mixBlendMode: 'multiply',\n pointerEvents: 'none',\n position: 'absolute',\n inset: 0,\n }}\n >\n <Underline\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n rects={rects}\n scale={scale}\n />\n </div>\n );\n case PdfAnnotationSubtype.HIGHLIGHT:\n return (\n <div\n style={{\n mixBlendMode: 'multiply',\n pointerEvents: 'none',\n position: 'absolute',\n inset: 0,\n }}\n >\n <Highlight\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n rects={rects}\n scale={scale}\n />\n </div>\n );\n case PdfAnnotationSubtype.STRIKEOUT:\n return (\n <div\n style={{\n mixBlendMode: 'multiply',\n pointerEvents: 'none',\n position: 'absolute',\n inset: 0,\n }}\n >\n <Strikeout\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n rects={rects}\n scale={scale}\n />\n </div>\n );\n case PdfAnnotationSubtype.SQUIGGLY:\n return (\n <div\n style={{\n mixBlendMode: 'multiply',\n pointerEvents: 'none',\n position: 'absolute',\n inset: 0,\n }}\n >\n <Squiggly\n color={activeTool.defaults?.color}\n opacity={activeTool.defaults?.opacity}\n rects={rects}\n scale={scale}\n />\n </div>\n );\n default:\n return null;\n }\n}\n","/** @jsxImportSource preact */\nimport { useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport type { PointerEventHandlers } from '@embedpdf/plugin-interaction-manager';\nimport { usePointerHandlers } from '@embedpdf/plugin-interaction-manager/preact';\nimport { ActiveTool } from '@embedpdf/plugin-annotation';\nimport { PdfInkListObject, Rect, PdfAnnotationSubtype, PdfInkAnnoObject } from '@embedpdf/models';\nimport { useAnnotationCapability } from '../../hooks';\n\ninterface InkPaintProps {\n /** Index of the page this layer lives on */\n pageIndex: number;\n /** Scale of the page */\n scale: number;\n /** Width of the page */\n pageWidth: number;\n /** Height of the page */\n pageHeight: number;\n}\n\nconst MAX_STROKE_WIDTH = 30;\n\n/**\n * Allows the user to draw freehand ink annotations.\n * Hook it into the interaction-manager with modeId = 'inkPaint'.\n * Supports multi-stroke annotations: if the user starts a new stroke within 3 seconds of releasing the previous one, it adds to the same annotation.\n */\nexport const InkPaint = ({ pageIndex, scale, pageWidth, pageHeight }: InkPaintProps) => {\n /* ------------------------------------------------------------------ */\n /* annotation capability */\n /* ------------------------------------------------------------------ */\n const { provides: annotationProvides } = useAnnotationCapability();\n\n /* ------------------------------------------------------------------ */\n /* active tool state */\n /* ------------------------------------------------------------------ */\n const [activeTool, setActiveTool] = useState<ActiveTool>({ mode: null, defaults: null });\n\n useEffect(() => {\n if (!annotationProvides) return;\n\n const off = annotationProvides.onActiveToolChange(setActiveTool);\n return off;\n }, [annotationProvides]);\n\n if (activeTool.mode !== PdfAnnotationSubtype.INK) return null;\n\n const toolColor = activeTool.defaults?.color ?? '#000000';\n const toolOpacity = activeTool.defaults?.opacity ?? 1;\n const toolStrokeWidth = activeTool.defaults?.strokeWidth ?? 2;\n\n /* ------------------------------------------------------------------ */\n /* integration with interaction-manager */\n /* ------------------------------------------------------------------ */\n const { register } = usePointerHandlers({ modeId: 'ink', pageIndex });\n\n /* ------------------------------------------------------------------ */\n /* helpers */\n /* ------------------------------------------------------------------ */\n const clamp = (v: number, min: number, max: number) => Math.max(min, Math.min(max, v));\n\n /* ------------------------------------------------------------------ */\n /* local state – current strokes (preview), persist timer, and drawing flag */\n /* ------------------------------------------------------------------ */\n const [currentStrokes, setCurrentStrokes] = useState<PdfInkListObject[]>([]);\n const [isDrawing, setIsDrawing] = useState(false);\n const timerRef = useRef<NodeJS.Timeout | null>(null);\n\n /* page size in **PDF-space** (unscaled) ----------------------------- */\n const pageWidthPDF = pageWidth / scale;\n const pageHeightPDF = pageHeight / scale;\n\n /* ------------------------------------------------------------------ */\n /* pointer handlers */\n /* ------------------------------------------------------------------ */\n const handlers = useMemo<PointerEventHandlers<PointerEvent>>(\n () => ({\n onPointerDown: (pos, evt) => {\n const curX = clamp(pos.x, 0, pageWidthPDF);\n const curY = clamp(pos.y, 0, pageHeightPDF);\n\n setIsDrawing(true);\n\n if (timerRef.current) {\n // Continuing the current annotation – clear timer and add new stroke\n clearTimeout(timerRef.current);\n timerRef.current = null;\n setCurrentStrokes((prev) => [...prev, { points: [{ x: curX, y: curY }] }]);\n } else {\n // Start a new annotation\n setCurrentStrokes([{ points: [{ x: curX, y: curY }] }]);\n }\n\n (evt.target as HTMLElement)?.setPointerCapture?.(evt.pointerId);\n },\n onPointerMove: (pos) => {\n if (!isDrawing) return;\n\n const curX = clamp(pos.x, 0, pageWidthPDF);\n const curY = clamp(pos.y, 0, pageHeightPDF);\n\n // Add point to the last stroke\n setCurrentStrokes((prev) => {\n if (!prev.length) return prev;\n const last = prev[prev.length - 1];\n const newLast = { points: [...last.points, { x: curX, y: curY }] };\n return [...prev.slice(0, -1), newLast];\n });\n },\n onPointerUp: (_, evt) => {\n setIsDrawing(false);\n (evt.target as HTMLElement)?.releasePointerCapture?.(evt.pointerId);\n\n // Start/restart the persist timer\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => {\n if (currentStrokes.length && annotationProvides) {\n const allPoints = currentStrokes.flatMap((s) => s.points);\n if (!allPoints.length) return;\n\n const minX = Math.min(...allPoints.map((p) => p.x));\n const minY = Math.min(...allPoints.map((p) => p.y));\n const maxX = Math.max(...allPoints.map((p) => p.x));\n const maxY = Math.max(...allPoints.map((p) => p.y));\n\n // Account for stroke width - expand rect by half stroke width on all sides\n const halfStroke = MAX_STROKE_WIDTH / 2;\n const rectMinX = minX - halfStroke;\n const rectMinY = minY - halfStroke;\n const rectMaxX = maxX + halfStroke;\n const rectMaxY = maxY + halfStroke;\n\n // Ignore tiny drawings\n if (rectMaxX - rectMinX < 1 || rectMaxY - rectMinY < 1) return;\n\n const rect: Rect = {\n origin: { x: rectMinX, y: rectMinY },\n size: { width: rectMaxX - rectMinX, height: rectMaxY - rectMinY },\n };\n\n const anno: PdfInkAnnoObject = {\n type: PdfAnnotationSubtype.INK,\n rect,\n inkList: currentStrokes,\n color: toolColor,\n opacity: toolOpacity,\n strokeWidth: toolStrokeWidth,\n pageIndex,\n id: Date.now() + Math.random(),\n };\n\n annotationProvides.createAnnotation(pageIndex, anno);\n annotationProvides.setAnnotationMode(null);\n annotationProvides.selectAnnotation(pageIndex, anno.id);\n }\n\n setCurrentStrokes([]);\n timerRef.current = null;\n }, 3000);\n },\n onPointerCancel: (_, evt) => {\n setIsDrawing(false);\n (evt.target as HTMLElement)?.releasePointerCapture?.(evt.pointerId);\n\n // Cancel – clear preview without persisting\n setCurrentStrokes([]);\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n },\n }),\n [\n pageWidthPDF,\n pageHeightPDF,\n currentStrokes,\n annotationProvides,\n pageIndex,\n toolColor,\n toolOpacity,\n toolStrokeWidth,\n isDrawing,\n ],\n );\n\n /* register with the interaction-manager */\n useEffect(() => {\n if (!register) return;\n return register(handlers);\n }, [register, handlers]);\n\n /* cleanup timer on unmount */\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, []);\n\n /* ------------------------------------------------------------------ */\n /* render preview */\n /* ------------------------------------------------------------------ */\n if (!currentStrokes.length) return null;\n\n const allPoints = currentStrokes.flatMap((s) => s.points);\n if (!allPoints.length) return null;\n\n const minX = Math.min(...allPoints.map((p) => p.x));\n const minY = Math.min(...allPoints.map((p) => p.y));\n const maxX = Math.max(...allPoints.map((p) => p.x));\n const maxY = Math.max(...allPoints.map((p) => p.y));\n\n // Account for stroke width - expand bounds by half stroke width on all sides\n const halfStroke = MAX_STROKE_WIDTH / 2;\n const svgMinX = minX - halfStroke;\n const svgMinY = minY - halfStroke;\n const svgMaxX = maxX + halfStroke;\n const svgMaxY = maxY + halfStroke;\n\n const dw = svgMaxX - svgMinX;\n const dh = svgMaxY - svgMinY;\n\n const paths = currentStrokes.map(({ points }) => {\n let d = '';\n points.forEach(({ x, y }, i) => {\n // Adjust coordinates relative to the expanded SVG bounds\n const lx = x - svgMinX;\n const ly = y - svgMinY;\n d += (i === 0 ? 'M' : 'L') + lx + ' ' + ly + ' ';\n });\n return d.trim();\n });\n\n return (\n <svg\n style={{\n position: 'absolute',\n left: svgMinX * scale,\n top: svgMinY * scale,\n width: dw * scale,\n height: dh * scale,\n pointerEvents: 'none',\n zIndex: 2,\n }}\n width={dw * scale}\n height={dh * scale}\n viewBox={`0 0 ${dw} ${dh}`}\n >\n {paths.map((d, i) => (\n <path\n key={i}\n d={d}\n fill=\"none\"\n stroke={toolColor}\n strokeWidth={toolStrokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n opacity={toolOpacity}\n />\n ))}\n </svg>\n );\n};\n","/** @jsxImportSource preact */\nimport { JSX } from 'preact';\nimport { Annotations } from './annotations';\nimport { TextMarkup } from './text-markup';\nimport { InkPaint } from './annotations/ink-paint';\n\ntype AnnotationLayerProps = Omit<JSX.HTMLAttributes<HTMLDivElement>, 'style'> & {\n pageIndex: number;\n scale: number;\n pageWidth: number;\n pageHeight: number;\n rotation: number;\n style?: JSX.CSSProperties;\n};\n\nexport function AnnotationLayer({\n pageIndex,\n scale,\n pageWidth,\n pageHeight,\n rotation,\n style,\n ...props\n}: AnnotationLayerProps) {\n return (\n <div\n style={{\n ...style,\n }}\n {...props}\n >\n <Annotations pageIndex={pageIndex} scale={scale} rotation={rotation} />\n <TextMarkup pageIndex={pageIndex} scale={scale} />\n <InkPaint pageIndex={pageIndex} scale={scale} pageWidth={pageWidth} pageHeight={pageHeight} />\n </div>\n );\n}\n"],"mappings":"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","names":["PdfAnnotationSubtype","useMemo","useState","useEffect","Fragment","jsx","Fragment","jsx","Fragment","jsx","Fragment","jsx","jsx","Fragment","jsx","useState","useEffect","useMemo","PdfAnnotationSubtype","PdfAnnotationSubtype","useSelectionCapability","useEffect","useState","jsx","useSelectionCapability","useState","useEffect","PdfAnnotationSubtype","useEffect","useMemo","useRef","useState","usePointerHandlers","PdfAnnotationSubtype","jsx","useState","useEffect","PdfAnnotationSubtype","usePointerHandlers","useRef","useMemo","allPoints","minX","minY","maxX","maxY","halfStroke","jsx","jsxs"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@embedpdf/plugin-annotation",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -18,23 +18,23 @@
|
|
|
18
18
|
}
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@embedpdf/models": "1.0.
|
|
21
|
+
"@embedpdf/models": "1.0.9"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@types/react": "^18.2.0",
|
|
25
25
|
"tsup": "^8.0.0",
|
|
26
26
|
"typescript": "^5.0.0",
|
|
27
|
-
"@embedpdf/plugin-interaction-manager": "1.0.
|
|
28
|
-
"@embedpdf/plugin-
|
|
29
|
-
"@embedpdf/plugin-
|
|
27
|
+
"@embedpdf/plugin-interaction-manager": "1.0.9",
|
|
28
|
+
"@embedpdf/plugin-history": "1.0.9",
|
|
29
|
+
"@embedpdf/plugin-selection": "1.0.9"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
32
|
"react": ">=16.8.0",
|
|
33
33
|
"react-dom": ">=16.8.0",
|
|
34
34
|
"preact": "^10.26.4",
|
|
35
|
-
"@embedpdf/
|
|
36
|
-
"@embedpdf/
|
|
37
|
-
"@embedpdf/plugin-selection": "1.0.
|
|
35
|
+
"@embedpdf/core": "1.0.9",
|
|
36
|
+
"@embedpdf/plugin-interaction-manager": "1.0.9",
|
|
37
|
+
"@embedpdf/plugin-selection": "1.0.9"
|
|
38
38
|
},
|
|
39
39
|
"files": [
|
|
40
40
|
"dist",
|