@anaralabs/lector 3.5.6 → 3.5.8
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/_tsup-dts-rollup.d.ts +11 -7
- package/dist/index.d.ts +1 -0
- package/dist/index.js +45 -32
- package/package.json +1 -1
|
@@ -46,10 +46,7 @@ export declare const AnnotationHighlightLayer: ({ className, style, renderToolti
|
|
|
46
46
|
declare interface AnnotationHighlightLayerProps {
|
|
47
47
|
className?: string;
|
|
48
48
|
style?: React.CSSProperties;
|
|
49
|
-
renderTooltipContent: (props:
|
|
50
|
-
annotation: Annotation;
|
|
51
|
-
onClose: () => void;
|
|
52
|
-
}) => React.ReactNode;
|
|
49
|
+
renderTooltipContent: (props: AnnotationTooltipContentProps) => React.ReactNode;
|
|
53
50
|
renderHoverTooltipContent: (props: {
|
|
54
51
|
annotation: Annotation;
|
|
55
52
|
onClose: () => void;
|
|
@@ -100,12 +97,18 @@ declare interface AnnotationState {
|
|
|
100
97
|
setAnnotations: (annotations: Annotation[]) => void;
|
|
101
98
|
}
|
|
102
99
|
|
|
103
|
-
export declare const AnnotationTooltip: ({ annotation, children,
|
|
100
|
+
export declare const AnnotationTooltip: ({ annotation, children, renderTooltipContent, hoverTooltipContent, onOpenChange, className, hoverClassName, isOpen: controlledIsOpen, tooltipBubbleSize, hoverIsOpen: controlledHoverIsOpen, }: AnnotationTooltipProps) => JSX.Element;
|
|
101
|
+
|
|
102
|
+
export declare type AnnotationTooltipContentProps = {
|
|
103
|
+
annotation: Annotation;
|
|
104
|
+
onClose: () => void;
|
|
105
|
+
setPosition?: (position: 'top' | 'bottom' | undefined) => void;
|
|
106
|
+
};
|
|
104
107
|
|
|
105
108
|
declare interface AnnotationTooltipProps {
|
|
106
109
|
annotation: Annotation;
|
|
107
110
|
children: React.ReactNode;
|
|
108
|
-
|
|
111
|
+
renderTooltipContent: (props: AnnotationTooltipContentProps) => React.ReactNode;
|
|
109
112
|
hoverTooltipContent?: React.ReactNode;
|
|
110
113
|
onOpenChange?: (open: boolean) => void;
|
|
111
114
|
isOpen?: boolean;
|
|
@@ -384,12 +387,13 @@ declare const useAnnotations: UseBoundStore<StoreApi<AnnotationState>>;
|
|
|
384
387
|
export { useAnnotations }
|
|
385
388
|
export { useAnnotations as useAnnotations_alias_1 }
|
|
386
389
|
|
|
387
|
-
export declare const useAnnotationTooltip: ({ annotation, onOpenChange, position, }: UseAnnotationTooltipProps) => UseAnnotationTooltipReturn;
|
|
390
|
+
export declare const useAnnotationTooltip: ({ annotation, onOpenChange, position, isOpen: controlledIsOpen, }: UseAnnotationTooltipProps) => UseAnnotationTooltipReturn;
|
|
388
391
|
|
|
389
392
|
declare interface UseAnnotationTooltipProps {
|
|
390
393
|
annotation: Annotation;
|
|
391
394
|
onOpenChange?: (open: boolean) => void;
|
|
392
395
|
position?: "top" | "bottom" | "left" | "right";
|
|
396
|
+
isOpen?: boolean;
|
|
393
397
|
}
|
|
394
398
|
|
|
395
399
|
declare interface UseAnnotationTooltipReturn {
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import React, { createContext, forwardRef, useRef, useCallback, useContext,
|
|
3
|
+
import React, { createContext, forwardRef, useRef, useState, useCallback, useContext, useEffect, cloneElement, createRef, useLayoutEffect } from 'react';
|
|
4
4
|
import { createPortal } from 'react-dom';
|
|
5
5
|
import { useFloating, autoUpdate, offset, shift, useDismiss, useInteractions, inline, flip } from '@floating-ui/react';
|
|
6
6
|
import { useVirtualizer, elementScroll, debounce } from '@tanstack/react-virtual';
|
|
@@ -134,32 +134,25 @@ var PDFStore = createZustandContext(
|
|
|
134
134
|
var usePdf = (selector) => useStore(PDFStore.useContext(), selector);
|
|
135
135
|
|
|
136
136
|
// src/hooks/useAnnotationTooltip.ts
|
|
137
|
-
var defaultRect = {
|
|
138
|
-
width: 0,
|
|
139
|
-
height: 0,
|
|
140
|
-
x: 0,
|
|
141
|
-
y: 0,
|
|
142
|
-
top: 0,
|
|
143
|
-
right: 0,
|
|
144
|
-
bottom: 0,
|
|
145
|
-
left: 0
|
|
146
|
-
};
|
|
147
137
|
var useAnnotationTooltip = ({
|
|
148
138
|
annotation,
|
|
149
139
|
onOpenChange,
|
|
150
|
-
position = "top"
|
|
140
|
+
position = "top",
|
|
141
|
+
isOpen: controlledIsOpen
|
|
151
142
|
}) => {
|
|
152
143
|
const isNewAnnotation = Date.now() - new Date(annotation.createdAt).getTime() < 1e3;
|
|
153
|
-
const [
|
|
144
|
+
const [isPositionCalculated, setIsPositionCalculated] = useState(false);
|
|
145
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
154
146
|
const viewportRef = usePdf((state) => state.viewportRef);
|
|
155
147
|
const scale = usePdf((state) => state.zoom);
|
|
148
|
+
const effectiveIsOpen = (isOpen && isPositionCalculated || controlledIsOpen) ?? false;
|
|
156
149
|
const {
|
|
157
150
|
refs,
|
|
158
151
|
floatingStyles,
|
|
159
152
|
context
|
|
160
153
|
} = useFloating({
|
|
161
154
|
placement: position,
|
|
162
|
-
open:
|
|
155
|
+
open: effectiveIsOpen,
|
|
163
156
|
onOpenChange: (open) => {
|
|
164
157
|
setIsOpen(open);
|
|
165
158
|
onOpenChange?.(open);
|
|
@@ -178,18 +171,27 @@ var useAnnotationTooltip = ({
|
|
|
178
171
|
const dismiss = useDismiss(context);
|
|
179
172
|
const { getReferenceProps, getFloatingProps } = useInteractions([dismiss]);
|
|
180
173
|
const updateTooltipPosition = useCallback(() => {
|
|
181
|
-
if (!annotation.highlights.length)
|
|
174
|
+
if (!annotation.highlights.length) {
|
|
175
|
+
setIsPositionCalculated(false);
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
182
178
|
const highlightRects = annotation.highlights;
|
|
183
179
|
let minLeft = Infinity;
|
|
184
180
|
let maxRight = -Infinity;
|
|
185
181
|
let minTop = Infinity;
|
|
186
182
|
let maxBottom = -Infinity;
|
|
183
|
+
const viewportElement = viewportRef.current;
|
|
184
|
+
if (!viewportElement) {
|
|
185
|
+
setIsPositionCalculated(false);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
const pageElement = viewportElement.querySelector(`[data-page-number="${annotation.pageNumber}"]`);
|
|
189
|
+
if (!pageElement) {
|
|
190
|
+
setIsPositionCalculated(false);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
187
193
|
refs.setReference({
|
|
188
194
|
getBoundingClientRect() {
|
|
189
|
-
const viewportElement = viewportRef.current;
|
|
190
|
-
if (!viewportElement) return defaultRect;
|
|
191
|
-
const pageElement = viewportElement.querySelector(`[data-page-number="${annotation.pageNumber}"]`);
|
|
192
|
-
if (!pageElement) return defaultRect;
|
|
193
195
|
const pageRect = pageElement.getBoundingClientRect();
|
|
194
196
|
highlightRects.forEach((highlight) => {
|
|
195
197
|
const scaledLeft = highlight.left * scale;
|
|
@@ -226,10 +228,17 @@ var useAnnotationTooltip = ({
|
|
|
226
228
|
},
|
|
227
229
|
contextElement: viewportRef.current || void 0
|
|
228
230
|
});
|
|
229
|
-
|
|
231
|
+
setIsPositionCalculated(true);
|
|
232
|
+
if (isNewAnnotation) {
|
|
233
|
+
setIsOpen(true);
|
|
234
|
+
}
|
|
235
|
+
}, [annotation.highlights, annotation.pageNumber, refs, viewportRef, scale, isNewAnnotation]);
|
|
230
236
|
useEffect(() => {
|
|
231
237
|
const viewport = viewportRef.current;
|
|
232
|
-
|
|
238
|
+
setIsPositionCalculated(false);
|
|
239
|
+
requestAnimationFrame(() => {
|
|
240
|
+
updateTooltipPosition();
|
|
241
|
+
});
|
|
233
242
|
const handleScroll = () => {
|
|
234
243
|
requestAnimationFrame(updateTooltipPosition);
|
|
235
244
|
};
|
|
@@ -248,9 +257,9 @@ var useAnnotationTooltip = ({
|
|
|
248
257
|
}
|
|
249
258
|
window.removeEventListener("resize", handleResize);
|
|
250
259
|
};
|
|
251
|
-
}, [updateTooltipPosition, viewportRef]);
|
|
260
|
+
}, [updateTooltipPosition, viewportRef, scale, controlledIsOpen]);
|
|
252
261
|
return {
|
|
253
|
-
isOpen,
|
|
262
|
+
isOpen: effectiveIsOpen,
|
|
254
263
|
setIsOpen,
|
|
255
264
|
refs,
|
|
256
265
|
floatingStyles,
|
|
@@ -261,7 +270,7 @@ var useAnnotationTooltip = ({
|
|
|
261
270
|
var AnnotationTooltip = ({
|
|
262
271
|
annotation,
|
|
263
272
|
children,
|
|
264
|
-
|
|
273
|
+
renderTooltipContent,
|
|
265
274
|
hoverTooltipContent,
|
|
266
275
|
onOpenChange,
|
|
267
276
|
className,
|
|
@@ -273,6 +282,7 @@ var AnnotationTooltip = ({
|
|
|
273
282
|
const viewportRef = usePdf((state) => state.viewportRef);
|
|
274
283
|
const closeTimeoutRef = useRef(null);
|
|
275
284
|
const isMouseInTooltipRef = useRef(false);
|
|
285
|
+
const [triggeredPosition, setTriggeredPosition] = useState();
|
|
276
286
|
const {
|
|
277
287
|
isOpen: uncontrolledIsOpen,
|
|
278
288
|
setIsOpen,
|
|
@@ -282,7 +292,9 @@ var AnnotationTooltip = ({
|
|
|
282
292
|
getReferenceProps
|
|
283
293
|
} = useAnnotationTooltip({
|
|
284
294
|
annotation,
|
|
285
|
-
onOpenChange
|
|
295
|
+
onOpenChange,
|
|
296
|
+
position: triggeredPosition,
|
|
297
|
+
isOpen: controlledIsOpen
|
|
286
298
|
});
|
|
287
299
|
const {
|
|
288
300
|
isOpen: uncontrolledHoverIsOpen,
|
|
@@ -293,7 +305,8 @@ var AnnotationTooltip = ({
|
|
|
293
305
|
getReferenceProps: getHoverReferenceProps
|
|
294
306
|
} = useAnnotationTooltip({
|
|
295
307
|
position: "bottom",
|
|
296
|
-
annotation
|
|
308
|
+
annotation,
|
|
309
|
+
isOpen: controlledHoverIsOpen
|
|
297
310
|
});
|
|
298
311
|
const isOpen = controlledIsOpen ?? uncontrolledIsOpen;
|
|
299
312
|
const hoverIsOpen = controlledHoverIsOpen || uncontrolledHoverIsOpen;
|
|
@@ -372,7 +385,11 @@ var AnnotationTooltip = ({
|
|
|
372
385
|
zIndex: 50
|
|
373
386
|
},
|
|
374
387
|
...getFloatingProps(),
|
|
375
|
-
children:
|
|
388
|
+
children: renderTooltipContent({
|
|
389
|
+
annotation,
|
|
390
|
+
onClose: () => setIsOpen(false),
|
|
391
|
+
setPosition: (position) => setTriggeredPosition(position)
|
|
392
|
+
})
|
|
376
393
|
}
|
|
377
394
|
),
|
|
378
395
|
viewportRef.current
|
|
@@ -457,11 +474,7 @@ var AnnotationHighlightLayer = ({
|
|
|
457
474
|
onAnnotationClick(annotation);
|
|
458
475
|
}
|
|
459
476
|
},
|
|
460
|
-
|
|
461
|
-
annotation,
|
|
462
|
-
onClose: () => {
|
|
463
|
-
}
|
|
464
|
-
}),
|
|
477
|
+
renderTooltipContent,
|
|
465
478
|
hoverTooltipContent: renderHoverTooltipContent({
|
|
466
479
|
annotation,
|
|
467
480
|
onClose: () => {
|