@annotorious/react 3.0.0 → 3.0.2
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/Annotorious.d.ts +6 -6
- package/dist/Annotorious.d.ts.map +1 -1
- package/dist/AnnotoriousPlugin.d.ts +6 -3
- package/dist/AnnotoriousPlugin.d.ts.map +1 -1
- package/dist/ImageAnnotationPopup.d.ts +9 -0
- package/dist/ImageAnnotationPopup.d.ts.map +1 -0
- package/dist/ImageAnnotator.d.ts +2 -2
- package/dist/ImageAnnotator.d.ts.map +1 -1
- package/dist/PopupProps.d.ts +10 -0
- package/dist/PopupProps.d.ts.map +1 -0
- package/dist/annotorious-react.es.js +20 -20
- package/dist/annotorious-react.es.js.map +1 -1
- package/dist/annotorious-react.es11.js +3 -3
- package/dist/annotorious-react.es13.js +264 -126
- package/dist/annotorious-react.es13.js.map +1 -1
- package/dist/annotorious-react.es14.js +9 -32
- package/dist/annotorious-react.es14.js.map +1 -1
- package/dist/annotorious-react.es15.js +193 -2
- package/dist/annotorious-react.es15.js.map +1 -1
- package/dist/annotorious-react.es16.js +368 -25
- package/dist/annotorious-react.es16.js.map +1 -1
- package/dist/annotorious-react.es17.js +10 -605
- package/dist/annotorious-react.es17.js.map +1 -1
- package/dist/annotorious-react.es18.js +2 -2
- package/dist/annotorious-react.es19.js +26 -2
- package/dist/annotorious-react.es19.js.map +1 -1
- package/dist/annotorious-react.es2.js.map +1 -1
- package/dist/annotorious-react.es20.js +609 -0
- package/dist/annotorious-react.es20.js.map +1 -0
- package/dist/annotorious-react.es21.js +129 -0
- package/dist/annotorious-react.es21.js.map +1 -0
- package/dist/annotorious-react.es22.js +5 -0
- package/dist/annotorious-react.es22.js.map +1 -0
- package/dist/annotorious-react.es23.js +5 -0
- package/dist/annotorious-react.es23.js.map +1 -0
- package/dist/annotorious-react.es24.js +10 -0
- package/dist/annotorious-react.es24.js.map +1 -0
- package/dist/annotorious-react.es25.js +8 -0
- package/dist/annotorious-react.es25.js.map +1 -0
- package/dist/annotorious-react.es26.js +10 -0
- package/dist/annotorious-react.es26.js.map +1 -0
- package/dist/annotorious-react.es27.js +129 -0
- package/dist/annotorious-react.es27.js.map +1 -0
- package/dist/annotorious-react.es28.js +466 -0
- package/dist/annotorious-react.es28.js.map +1 -0
- package/dist/annotorious-react.es3.js +12 -12
- package/dist/annotorious-react.es3.js.map +1 -1
- package/dist/annotorious-react.es4.js +96 -12
- package/dist/annotorious-react.es4.js.map +1 -1
- package/dist/annotorious-react.es5.js +15 -13
- package/dist/annotorious-react.es5.js.map +1 -1
- package/dist/annotorious-react.es8.js.map +1 -1
- package/dist/annotorious-react.es9.js +105 -32
- package/dist/annotorious-react.es9.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/openseadragon/OpenSeadragonAnnotationPopup.d.ts +9 -0
- package/dist/openseadragon/OpenSeadragonAnnotationPopup.d.ts.map +1 -0
- package/dist/openseadragon/OpenSeadragonAnnotator.d.ts +5 -6
- package/dist/openseadragon/OpenSeadragonAnnotator.d.ts.map +1 -1
- package/dist/openseadragon/index.d.ts +1 -1
- package/dist/openseadragon/index.d.ts.map +1 -1
- package/dist/utils/toClientRects.d.ts +6 -0
- package/dist/utils/toClientRects.d.ts.map +1 -0
- package/package.json +7 -7
- package/dist/AnnotoriousPopup.d.ts +0 -16
- package/dist/AnnotoriousPopup.d.ts.map +0 -1
- package/dist/openseadragon/OpenSeadragonPopup.d.ts +0 -11
- package/dist/openseadragon/OpenSeadragonPopup.d.ts.map +0 -1
|
@@ -1,19 +1,103 @@
|
|
|
1
|
-
import { j as
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { j as g } from "./annotorious-react.es11.js";
|
|
2
|
+
import { useState as E, useRef as C, useEffect as A } from "react";
|
|
3
|
+
import { useFloating as D, FloatingArrow as O } from "./annotorious-react.es13.js";
|
|
4
|
+
import { useAnnotator as j, useSelection as L } from "./annotorious-react.es2.js";
|
|
5
|
+
import { toClientRects as S } from "./annotorious-react.es14.js";
|
|
6
|
+
import { inline as U, offset as F, flip as M, shift as b, arrow as k } from "./annotorious-react.es15.js";
|
|
7
|
+
import { autoUpdate as z } from "./annotorious-react.es16.js";
|
|
8
|
+
import w from "./annotorious-react.es17.js";
|
|
9
|
+
const H = (a, t) => {
|
|
10
|
+
const n = t.querySelector("img"), { left: i, top: d } = n.getBoundingClientRect(), s = n.offsetWidth / n.naturalWidth, c = n.offsetHeight / n.naturalHeight, { minX: o, minY: l, maxX: p, maxY: m } = a.bounds;
|
|
11
|
+
return new DOMRect(
|
|
12
|
+
i + s * o,
|
|
13
|
+
d + c * l,
|
|
14
|
+
s * (p - o),
|
|
15
|
+
c * (m - l)
|
|
16
|
+
);
|
|
17
|
+
}, K = (a) => {
|
|
18
|
+
var u, f;
|
|
19
|
+
const t = j(), [n, i] = E(!1), d = C(null), { selected: s, event: c } = L(), o = (u = s[0]) == null ? void 0 : u.annotation, l = (f = s[0]) == null ? void 0 : f.editable, { refs: p, floatingStyles: m, context: h, update: I } = D({
|
|
20
|
+
open: n,
|
|
21
|
+
onOpenChange: i,
|
|
22
|
+
middleware: [
|
|
23
|
+
U(),
|
|
24
|
+
F(10),
|
|
25
|
+
M({ crossAxis: !0 }),
|
|
26
|
+
b({
|
|
27
|
+
crossAxis: !0,
|
|
28
|
+
padding: { right: 5, left: 5, top: 10, bottom: 10 }
|
|
29
|
+
}),
|
|
30
|
+
k({
|
|
31
|
+
element: d,
|
|
32
|
+
padding: 5
|
|
33
|
+
})
|
|
34
|
+
],
|
|
35
|
+
whileElementsMounted: z
|
|
36
|
+
});
|
|
37
|
+
A(() => {
|
|
38
|
+
if (s.length === 0)
|
|
39
|
+
i(!1);
|
|
40
|
+
else {
|
|
41
|
+
const e = () => {
|
|
42
|
+
const r = H(o.target.selector.geometry, t.element);
|
|
43
|
+
p.setReference({
|
|
44
|
+
getBoundingClientRect: () => r,
|
|
45
|
+
getClientRects: () => S(r)
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
return window.addEventListener("scroll", e, !0), window.addEventListener("resize", e), e(), i(!0), () => {
|
|
49
|
+
window.removeEventListener("scroll", e, !0), window.removeEventListener("resize", e);
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}, [t, a.popup, s]);
|
|
53
|
+
const x = (e) => {
|
|
54
|
+
const r = e.id || w();
|
|
55
|
+
t.state.store.addBody({
|
|
56
|
+
...e,
|
|
57
|
+
id: r,
|
|
58
|
+
annotation: o.id,
|
|
59
|
+
created: e.created || /* @__PURE__ */ new Date(),
|
|
60
|
+
creator: t.getUser()
|
|
61
|
+
});
|
|
62
|
+
}, y = (e) => {
|
|
63
|
+
t.state.store.deleteBody({ id: e, annotation: o.id });
|
|
64
|
+
}, R = (e, r) => {
|
|
65
|
+
const v = r.id || w(), B = {
|
|
66
|
+
updated: /* @__PURE__ */ new Date(),
|
|
67
|
+
updatedBy: t.getUser(),
|
|
68
|
+
...r,
|
|
69
|
+
id: v,
|
|
70
|
+
annotation: o.id
|
|
71
|
+
};
|
|
72
|
+
t.state.store.updateBody(e, B);
|
|
73
|
+
};
|
|
74
|
+
return n && o && /* @__PURE__ */ g.jsxs(
|
|
7
75
|
"div",
|
|
8
76
|
{
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
style:
|
|
12
|
-
children:
|
|
77
|
+
className: "a9s-popup a9s-image-popup",
|
|
78
|
+
ref: p.setFloating,
|
|
79
|
+
style: m,
|
|
80
|
+
children: [
|
|
81
|
+
/* @__PURE__ */ g.jsx(
|
|
82
|
+
O,
|
|
83
|
+
{
|
|
84
|
+
ref: d,
|
|
85
|
+
context: h
|
|
86
|
+
}
|
|
87
|
+
),
|
|
88
|
+
a.popup({
|
|
89
|
+
annotation: o,
|
|
90
|
+
editable: l,
|
|
91
|
+
event: c,
|
|
92
|
+
onCreateBody: x,
|
|
93
|
+
onDeleteBody: y,
|
|
94
|
+
onUpdateBody: R
|
|
95
|
+
})
|
|
96
|
+
]
|
|
13
97
|
}
|
|
14
98
|
);
|
|
15
|
-
}
|
|
99
|
+
};
|
|
16
100
|
export {
|
|
17
|
-
|
|
101
|
+
K as ImageAnnotationPopup
|
|
18
102
|
};
|
|
19
103
|
//# sourceMappingURL=annotorious-react.es4.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"annotorious-react.es4.js","sources":["../src/
|
|
1
|
+
{"version":3,"file":"annotorious-react.es4.js","sources":["../src/ImageAnnotationPopup.tsx"],"sourcesContent":["import { ReactNode, useEffect, useRef, useState } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\nimport { AnnotationBody, Geometry } from '@annotorious/annotorious';\nimport {\n useFloating,\n arrow,\n shift,\n inline,\n autoUpdate,\n flip,\n offset,\n FloatingArrow\n} from '@floating-ui/react';\nimport { useAnnotator, useSelection } from './Annotorious';\nimport { PopupProps } from './PopupProps';\nimport { toClientRects } from './utils/toClientRects';\nimport { AnnotoriousImageAnnotator } from '@annotorious/openseadragon';\n\nconst toDOMRect = (geometry: Geometry, container: HTMLDivElement) => {\n const img = container.querySelector('img');\n\n const { left, top } = img.getBoundingClientRect();\n\n const kx = img.offsetWidth / img.naturalWidth;\n const ky = img.offsetHeight / img.naturalHeight;\n\n const { minX, minY, maxX, maxY } = geometry.bounds;\n\n return new DOMRect(\n left + kx * minX,\n top + ky * minY,\n kx * (maxX - minX),\n ky * (maxY - minY)\n );\n}\n\ninterface ImageAnnotationPopupProps {\n\n arrow?: boolean;\n\n popup: (props: PopupProps) => ReactNode;\n\n}\n\nexport const ImageAnnotationPopup = (props: ImageAnnotationPopupProps) => {\n\n const anno = useAnnotator<AnnotoriousImageAnnotator>();\n\n const [isOpen, setIsOpen] = useState(false);\n\n const arrowRef = useRef(null);\n\n const { selected, event } = useSelection();\n\n const annotation = selected[0]?.annotation;\n\n const editable = selected[0]?.editable;\n\n const { refs, floatingStyles, context, update } = useFloating({\n open: isOpen,\n onOpenChange: setIsOpen,\n middleware: [\n inline(), \n offset(10),\n flip({ crossAxis: true }),\n shift({ \n crossAxis: true,\n padding: { right: 5, left: 5, top: 10, bottom: 10 }\n }),\n arrow({\n element: arrowRef,\n padding: 5\n })\n ],\n whileElementsMounted: autoUpdate\n });\n\n useEffect(() => {\n if (selected.length === 0) {\n setIsOpen(false);\n } else {\n const setPosition = () => { \n const rect = toDOMRect(annotation.target.selector.geometry, anno.element);\n\n refs.setReference({\n getBoundingClientRect: () => rect,\n getClientRects: () => toClientRects(rect)\n });\n }\n\n window.addEventListener('scroll', setPosition, true);\n window.addEventListener('resize', setPosition);\n\n setPosition();\n\n setIsOpen(true);\n\n return () => {\n window.removeEventListener('scroll', setPosition, true);\n window.removeEventListener('resize', setPosition);\n };\n }\n }, [anno, props.popup, selected]);\n\n const onCreateBody = (body: Partial<AnnotationBody>) => {\n const id = body.id || uuidv4();\n \n anno.state.store.addBody({\n ...body,\n id,\n annotation: annotation.id,\n created: body.created || new Date(),\n creator: anno.getUser()\n });\n }\n\n const onDeleteBody = (id: string) => {\n anno.state.store.deleteBody({ id, annotation: annotation.id });\n }\n\n const onUpdateBody = (current: AnnotationBody, next: AnnotationBody) => {\n const id = next.id || uuidv4();\n\n const updated: AnnotationBody = {\n updated: new Date(),\n updatedBy: anno.getUser(),\n ...next,\n id,\n annotation: annotation.id\n }\n\n anno.state.store.updateBody(current, updated);\n }\n\n return isOpen && annotation && (\n <div\n className=\"a9s-popup a9s-image-popup\"\n ref={refs.setFloating}\n style={floatingStyles}>\n\n <FloatingArrow \n ref={arrowRef} \n context={context} />\n\n {props.popup({ \n annotation, \n editable, \n event,\n onCreateBody,\n onDeleteBody,\n onUpdateBody\n })}\n </div>\n )\n\n}"],"names":["toDOMRect","geometry","container","img","left","top","kx","ky","minX","minY","maxX","maxY","ImageAnnotationPopup","props","anno","useAnnotator","isOpen","setIsOpen","useState","arrowRef","useRef","selected","event","useSelection","annotation","_a","editable","_b","refs","floatingStyles","context","update","useFloating","inline","offset","flip","shift","arrow","autoUpdate","useEffect","setPosition","rect","toClientRects","onCreateBody","body","id","uuidv4","onDeleteBody","onUpdateBody","current","next","updated","jsxs","jsx","FloatingArrow"],"mappings":"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"}
|
|
@@ -1,25 +1,27 @@
|
|
|
1
|
-
import { j as
|
|
2
|
-
import { Children as u, useContext as x, useEffect as
|
|
1
|
+
import { j as o } from "./annotorious-react.es11.js";
|
|
2
|
+
import { Children as u, useContext as x, useEffect as n, cloneElement as A } from "react";
|
|
3
3
|
import { createImageAnnotator as g } from "@annotorious/annotorious";
|
|
4
|
-
import { AnnotoriousContext as
|
|
5
|
-
const
|
|
6
|
-
const { children: i, tool:
|
|
4
|
+
import { AnnotoriousContext as C } from "./annotorious-react.es2.js";
|
|
5
|
+
const j = (t) => {
|
|
6
|
+
const { children: i, tool: d, ...l } = t, c = u.only(i), { anno: e, setAnno: a } = x(C), r = (s) => {
|
|
7
7
|
if (!e) {
|
|
8
|
-
const
|
|
9
|
-
|
|
8
|
+
const m = s.target, f = g(m, l);
|
|
9
|
+
a(f);
|
|
10
10
|
}
|
|
11
11
|
};
|
|
12
|
-
return
|
|
12
|
+
return n(() => {
|
|
13
|
+
!e || !t.containerClassName || (e.element.className = t.containerClassName);
|
|
14
|
+
}, [t.containerClassName, e]), n(() => {
|
|
13
15
|
t.tool && e && e.setDrawingTool(t.tool);
|
|
14
|
-
}, [t.tool, e]),
|
|
16
|
+
}, [t.tool, e]), n(() => {
|
|
15
17
|
e && e.setFilter(t.filter);
|
|
16
|
-
}, [t.filter]),
|
|
18
|
+
}, [t.filter]), n(() => {
|
|
17
19
|
e && e.setStyle(t.style);
|
|
18
|
-
}, [t.style]),
|
|
20
|
+
}, [t.style]), n(() => {
|
|
19
21
|
e && e.setUserSelectAction(t.userSelectAction);
|
|
20
|
-
}, [t.userSelectAction]), /* @__PURE__ */
|
|
22
|
+
}, [t.userSelectAction]), /* @__PURE__ */ o.jsx(o.Fragment, { children: A(c, { onLoad: r }) });
|
|
21
23
|
};
|
|
22
24
|
export {
|
|
23
|
-
|
|
25
|
+
j as ImageAnnotator
|
|
24
26
|
};
|
|
25
27
|
//# sourceMappingURL=annotorious-react.es5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"annotorious-react.es5.js","sources":["../src/ImageAnnotator.tsx"],"sourcesContent":["import { Children, ReactElement, cloneElement, useContext, useEffect } from 'react';\nimport { AnnotoriousOpts, createImageAnnotator } from '@annotorious/annotorious';\nimport type {
|
|
1
|
+
{"version":3,"file":"annotorious-react.es5.js","sources":["../src/ImageAnnotator.tsx"],"sourcesContent":["import { Children, ReactElement, cloneElement, useContext, useEffect } from 'react';\nimport { AnnotoriousOpts, createImageAnnotator } from '@annotorious/annotorious';\nimport type { DrawingTool, Filter, ImageAnnotation } from '@annotorious/annotorious';\nimport { AnnotoriousContext } from './Annotorious';\n\nexport interface ImageAnnotatorProps<E extends unknown> extends AnnotoriousOpts<ImageAnnotation, E> {\n\n children: ReactElement<HTMLImageElement>;\n\n containerClassName?: string;\n\n filter?: Filter<ImageAnnotation>;\n\n tool?: DrawingTool;\n\n}\n\nexport const ImageAnnotator = <E extends unknown>(props: ImageAnnotatorProps<E>) => {\n\n const { children, tool, ...opts } = props;\n\n const child = Children.only(children);\n\n const { anno, setAnno } = useContext(AnnotoriousContext);\n\n const onLoad = (evt: Event) => {\n if (!anno) {\n const img = evt.target as HTMLImageElement;\n\n const next = createImageAnnotator(img, opts);\n setAnno(next); \n }\n };\n\n useEffect(() => {\n if (!anno || !props.containerClassName) return;\n anno.element.className = props.containerClassName;\n }, [props.containerClassName, anno]);\n\n useEffect(() => {\n if (props.tool && anno) anno.setDrawingTool(props.tool);\n }, [props.tool, anno]);\n\n useEffect(() => {\n if (anno) anno.setFilter(props.filter);\n }, [props.filter]);\n\n useEffect(() => {\n if (anno) anno.setStyle(props.style);\n }, [props.style]);\n\n useEffect(() => {\n if (anno) anno.setUserSelectAction(props.userSelectAction);\n }, [props.userSelectAction]);\n \n return <>{cloneElement(child, { onLoad } as Partial<HTMLImageElement>)}</>\n\n}\n"],"names":["ImageAnnotator","props","children","tool","opts","child","Children","anno","setAnno","useContext","AnnotoriousContext","onLoad","evt","img","next","createImageAnnotator","useEffect","cloneElement"],"mappings":";;;;AAiBa,MAAAA,IAAiB,CAAoBC,MAAkC;AAElF,QAAM,EAAE,UAAAC,GAAU,MAAAC,GAAM,GAAGC,MAASH,GAE9BI,IAAQC,EAAS,KAAKJ,CAAQ,GAE9B,EAAE,MAAAK,GAAM,SAAAC,EAAQ,IAAIC,EAAWC,CAAkB,GAEjDC,IAAS,CAACC,MAAe;AAC7B,QAAI,CAACL,GAAM;AACT,YAAMM,IAAMD,EAAI,QAEVE,IAAOC,EAAqBF,GAAKT,CAAI;AAC3C,MAAAI,EAAQM,CAAI;AAAA,IACd;AAAA,EAAA;AAGF,SAAAE,EAAU,MAAM;AACd,IAAI,CAACT,KAAQ,CAACN,EAAM,uBACfM,EAAA,QAAQ,YAAYN,EAAM;AAAA,EAC9B,GAAA,CAACA,EAAM,oBAAoBM,CAAI,CAAC,GAEnCS,EAAU,MAAM;AACd,IAAIf,EAAM,QAAQM,KAAWA,EAAA,eAAeN,EAAM,IAAI;AAAA,EACrD,GAAA,CAACA,EAAM,MAAMM,CAAI,CAAC,GAErBS,EAAU,MAAM;AACd,IAAIT,KAAMA,EAAK,UAAUN,EAAM,MAAM;AAAA,EAAA,GACpC,CAACA,EAAM,MAAM,CAAC,GAEjBe,EAAU,MAAM;AACd,IAAIT,KAAMA,EAAK,SAASN,EAAM,KAAK;AAAA,EAAA,GAClC,CAACA,EAAM,KAAK,CAAC,GAEhBe,EAAU,MAAM;AACd,IAAIT,KAAMA,EAAK,oBAAoBN,EAAM,gBAAgB;AAAA,EAAA,GACxD,CAACA,EAAM,gBAAgB,CAAC,uCAEjB,UAAagB,EAAAZ,GAAO,EAAE,QAAAM,GAAsC,EAAE,CAAA;AAE1E;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"annotorious-react.es8.js","sources":["../src/openseadragon/OpenSeadragonAnnotator.tsx"],"sourcesContent":["import { createContext, ReactNode, useContext, useEffect, useState } from 'react';\nimport OpenSeadragon from 'openseadragon';\nimport { createOSDAnnotator } from '@annotorious/openseadragon';\nimport { AnnotoriousOpts, DrawingStyle, Filter, ImageAnnotation } from '@annotorious/annotorious';\nimport { AnnotoriousContext } from '../Annotorious';\n\nexport const OpenSeadragonAnnotatorContext = createContext<{ \n viewer: OpenSeadragon.Viewer,\n setViewer(viewer: OpenSeadragon.Viewer): void\n}>({ viewer: null, setViewer: null });\n\nexport type OpenSeadragonAnnotatorProps<E extends unknown> = AnnotoriousOpts<
|
|
1
|
+
{"version":3,"file":"annotorious-react.es8.js","sources":["../src/openseadragon/OpenSeadragonAnnotator.tsx"],"sourcesContent":["import { createContext, ReactNode, useContext, useEffect, useState } from 'react';\nimport OpenSeadragon from 'openseadragon';\nimport { createOSDAnnotator } from '@annotorious/openseadragon';\nimport { Annotation, AnnotoriousOpts, DrawingStyle, Filter, ImageAnnotation } from '@annotorious/annotorious';\nimport { AnnotoriousContext } from '../Annotorious';\n\nexport const OpenSeadragonAnnotatorContext = createContext<{ \n viewer: OpenSeadragon.Viewer,\n setViewer(viewer: OpenSeadragon.Viewer): void\n}>({ viewer: null, setViewer: null });\n\nexport type OpenSeadragonAnnotatorProps<I extends Annotation, E extends unknown> = AnnotoriousOpts<I, E> & {\n\n children?: ReactNode;\n\n filter?: Filter<I>;\n\n style?: DrawingStyle | ((annotation: I) => DrawingStyle);\n\n tool?: string | null;\n\n}\n\nexport const OpenSeadragonAnnotator = <I extends Annotation, E extends unknown>(props: OpenSeadragonAnnotatorProps<I, E>) => {\n\n const { children, tool, ...opts } = props;\n\n const [viewer, setViewer] = useState<OpenSeadragon.Viewer>();\n\n const { anno, setAnno } = useContext(AnnotoriousContext);\n\n useEffect(() => {\n if (viewer) {\n const anno = createOSDAnnotator<I, E>(viewer, opts as AnnotoriousOpts<I, E>);\n\n if (props.drawingEnabled !== undefined) anno.setDrawingEnabled(props.drawingEnabled);\n if (props.filter) anno.setFilter(props.filter);\n if (props.style) anno.setStyle(props.style);\n if (props.tool) anno.setDrawingTool(props.tool);\n\n setAnno(anno);\n\n return () => {\n anno.destroy();\n setAnno(undefined);\n }\n }\n }, [viewer]);\n\n useEffect(() => {\n if (anno) anno.setDrawingEnabled(props.drawingEnabled);\n }, [props.drawingEnabled]);\n\n useEffect(() => {\n if (anno) anno.setFilter(props.filter);\n }, [props.filter]);\n\n useEffect(() => {\n if (anno) anno.setStyle(props.style);\n }, [props.style]);\n\n useEffect(() => {\n if (anno) anno.setDrawingTool(tool);\n }, [tool]);\n\n return (\n <OpenSeadragonAnnotatorContext.Provider value={{ viewer, setViewer }}>\n {props.children}\n </OpenSeadragonAnnotatorContext.Provider>\n )\n\n}\n\nexport const useViewer = () => {\n const { viewer } = useContext(OpenSeadragonAnnotatorContext);\n return viewer;\n}"],"names":["OpenSeadragonAnnotatorContext","createContext","OpenSeadragonAnnotator","props","children","tool","opts","viewer","setViewer","useState","anno","setAnno","useContext","AnnotoriousContext","useEffect","createOSDAnnotator","jsx","useViewer"],"mappings":";;;;AAMO,MAAMA,IAAgCC,EAG1C,EAAE,QAAQ,MAAM,WAAW,MAAM,GAcvBC,IAAyB,CAA0CC,MAA6C;AAE3H,QAAM,EAAE,UAAAC,GAAU,MAAAC,GAAM,GAAGC,MAASH,GAE9B,CAACI,GAAQC,CAAS,IAAIC,EAA+B,GAErD,EAAE,MAAAC,GAAM,SAAAC,EAAQ,IAAIC,EAAWC,CAAkB;AAEvD,SAAAC,EAAU,MAAM;AACd,QAAIP,GAAQ;AACJG,YAAAA,IAAOK,EAAyBR,GAAQD,CAA6B;AAE3E,aAAIH,EAAM,mBAAmB,UAAWO,EAAK,kBAAkBP,EAAM,cAAc,GAC/EA,EAAM,UAAQO,EAAK,UAAUP,EAAM,MAAM,GACzCA,EAAM,SAAOO,EAAK,SAASP,EAAM,KAAK,GACtCA,EAAM,QAAMO,EAAK,eAAeP,EAAM,IAAI,GAE9CQ,EAAQD,CAAI,GAEL,MAAM;AACXA,QAAAA,EAAK,QAAQ,GACbC,EAAQ,MAAS;AAAA,MAAA;AAAA,IAErB;AAAA,EAAA,GACC,CAACJ,CAAM,CAAC,GAEXO,EAAU,MAAM;AACd,IAAIJ,KAAMA,EAAK,kBAAkBP,EAAM,cAAc;AAAA,EAAA,GACpD,CAACA,EAAM,cAAc,CAAC,GAEzBW,EAAU,MAAM;AACd,IAAIJ,KAAMA,EAAK,UAAUP,EAAM,MAAM;AAAA,EAAA,GACpC,CAACA,EAAM,MAAM,CAAC,GAEjBW,EAAU,MAAM;AACd,IAAIJ,KAAMA,EAAK,SAASP,EAAM,KAAK;AAAA,EAAA,GAClC,CAACA,EAAM,KAAK,CAAC,GAEhBW,EAAU,MAAM;AACV,IAAAJ,KAAWA,EAAA,eAAeL,CAAI;AAAA,EAAA,GACjC,CAACA,CAAI,CAAC,GAGPW,gBAAAA,MAAChB,EAA8B,UAA9B,EAAuC,OAAO,EAAE,QAAAO,GAAQ,WAAAC,EACtD,GAAA,UAAAL,EAAM,SACT,CAAA;AAGJ,GAEac,IAAY,MAAM;AAC7B,QAAM,EAAE,QAAAV,EAAA,IAAWK,EAAWZ,CAA6B;AACpD,SAAAO;AACT;"}
|
|
@@ -1,38 +1,111 @@
|
|
|
1
|
-
import { j as
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
import { j as g } from "./annotorious-react.es11.js";
|
|
2
|
+
import { useState as O, useRef as A, useEffect as D } from "react";
|
|
3
|
+
import w from "openseadragon";
|
|
4
|
+
import { useAnnotator as L, useSelection as S } from "./annotorious-react.es2.js";
|
|
5
|
+
/* empty css */
|
|
6
|
+
/* empty css */
|
|
7
|
+
import "@annotorious/core";
|
|
8
|
+
import "@annotorious/annotorious";
|
|
9
|
+
import { toClientRects as b } from "./annotorious-react.es14.js";
|
|
10
|
+
import { useFloating as j, FloatingArrow as P } from "./annotorious-react.es13.js";
|
|
11
|
+
import { useViewer as U } from "./annotorious-react.es8.js";
|
|
12
|
+
import { inline as F, offset as M, flip as V, shift as z, arrow as H } from "./annotorious-react.es15.js";
|
|
13
|
+
import { autoUpdate as T } from "./annotorious-react.es16.js";
|
|
14
|
+
import x from "./annotorious-react.es17.js";
|
|
15
|
+
const X = (i, n) => {
|
|
16
|
+
const { minX: d, minY: a, maxX: o, maxY: p } = n.bounds, { top: s, left: l } = i.element.getBoundingClientRect(), t = i.viewport.imageToViewerElementCoordinates(new w.Point(d, a)), m = i.viewport.imageToViewerElementCoordinates(new w.Point(o, p));
|
|
17
|
+
return new DOMRect(
|
|
18
|
+
t.x + l,
|
|
19
|
+
t.y + s,
|
|
20
|
+
m.x - t.x,
|
|
21
|
+
m.y - t.y
|
|
22
|
+
);
|
|
23
|
+
}, te = (i) => {
|
|
24
|
+
var u, f;
|
|
25
|
+
const n = L(), [d, a] = O(!1), o = U(), p = A(null), { selected: s, event: l } = S(), t = (u = s[0]) == null ? void 0 : u.annotation, m = (f = s[0]) == null ? void 0 : f.editable, { refs: c, floatingStyles: y, context: v } = j({
|
|
26
|
+
open: d,
|
|
27
|
+
onOpenChange: a,
|
|
28
|
+
middleware: [
|
|
29
|
+
F(),
|
|
30
|
+
M(10),
|
|
31
|
+
V({ crossAxis: !0 }),
|
|
32
|
+
z({
|
|
33
|
+
crossAxis: !0,
|
|
34
|
+
boundary: o == null ? void 0 : o.element,
|
|
35
|
+
padding: { right: 5, left: 5, top: 10, bottom: 10 }
|
|
36
|
+
}),
|
|
37
|
+
H({
|
|
38
|
+
element: p,
|
|
39
|
+
padding: 5
|
|
40
|
+
})
|
|
41
|
+
],
|
|
42
|
+
whileElementsMounted: T
|
|
43
|
+
});
|
|
44
|
+
D(() => {
|
|
45
|
+
if (s.length === 0)
|
|
46
|
+
a(!1);
|
|
47
|
+
else {
|
|
48
|
+
const e = () => {
|
|
49
|
+
const r = X(o, t.target.selector.geometry);
|
|
50
|
+
c.setReference({
|
|
51
|
+
getBoundingClientRect: () => r,
|
|
52
|
+
getClientRects: () => b(r)
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
return window.addEventListener("scroll", e, !0), window.addEventListener("resize", e), o.addHandler("update-viewport", e), e(), a(!0), () => {
|
|
56
|
+
window.removeEventListener("scroll", e, !0), window.removeEventListener("resize", e), o.removeHandler("update-viewport", e);
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}, [i.popup, s, o]);
|
|
60
|
+
const R = (e) => {
|
|
61
|
+
const r = e.id || x();
|
|
62
|
+
n.state.store.addBody({
|
|
63
|
+
...e,
|
|
64
|
+
id: r,
|
|
65
|
+
annotation: t.id,
|
|
66
|
+
created: e.created || /* @__PURE__ */ new Date(),
|
|
67
|
+
creator: n.getUser()
|
|
68
|
+
});
|
|
69
|
+
}, B = (e) => {
|
|
70
|
+
n.state.store.deleteBody({ id: e, annotation: t.id });
|
|
71
|
+
}, E = (e, r) => {
|
|
72
|
+
const C = r.id || x(), h = {
|
|
73
|
+
updated: /* @__PURE__ */ new Date(),
|
|
74
|
+
updatedBy: n.getUser(),
|
|
75
|
+
...r,
|
|
76
|
+
id: C,
|
|
77
|
+
annotation: t.id
|
|
20
78
|
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
x,
|
|
79
|
+
n.state.store.updateBody(e, h);
|
|
80
|
+
};
|
|
81
|
+
return d && t && /* @__PURE__ */ g.jsxs(
|
|
82
|
+
"div",
|
|
26
83
|
{
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
children:
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
84
|
+
className: "a9s-popup a9s-image-popup",
|
|
85
|
+
ref: c.setFloating,
|
|
86
|
+
style: y,
|
|
87
|
+
children: [
|
|
88
|
+
/* @__PURE__ */ g.jsx(
|
|
89
|
+
P,
|
|
90
|
+
{
|
|
91
|
+
ref: p,
|
|
92
|
+
context: v,
|
|
93
|
+
fill: "#fff"
|
|
94
|
+
}
|
|
95
|
+
),
|
|
96
|
+
i.popup({
|
|
97
|
+
annotation: t,
|
|
98
|
+
editable: m,
|
|
99
|
+
event: l,
|
|
100
|
+
onCreateBody: R,
|
|
101
|
+
onDeleteBody: B,
|
|
102
|
+
onUpdateBody: E
|
|
103
|
+
})
|
|
104
|
+
]
|
|
105
|
+
}
|
|
106
|
+
);
|
|
34
107
|
};
|
|
35
108
|
export {
|
|
36
|
-
|
|
109
|
+
te as OpenSeadragonAnnotationPopup
|
|
37
110
|
};
|
|
38
111
|
//# sourceMappingURL=annotorious-react.es9.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"annotorious-react.es9.js","sources":["../src/openseadragon/
|
|
1
|
+
{"version":3,"file":"annotorious-react.es9.js","sources":["../src/openseadragon/OpenSeadragonAnnotationPopup.tsx"],"sourcesContent":["import { ReactNode, useEffect, useRef, useState } from 'react';\nimport OpenSeadragon from 'openseadragon';\nimport { v4 as uuidv4 } from 'uuid';\nimport { useAnnotator, useSelection, useViewer} from '@annotorious/react';\nimport type { PopupProps } from '@annotorious/react';\nimport type { AnnotationBody, Annotator, Geometry, ImageAnnotation } from '@annotorious/annotorious';\nimport { toClientRects } from '../utils/toClientRects';\nimport {\n useFloating,\n arrow,\n shift,\n inline,\n autoUpdate,\n flip,\n offset,\n FloatingArrow\n} from '@floating-ui/react';\n\nconst toDOMRect = (viewer: OpenSeadragon.Viewer, geometry: Geometry) => {\n const { minX, minY, maxX, maxY } = geometry.bounds;\n\n const { top, left } = viewer.element.getBoundingClientRect();\n\n const topLeft = viewer.viewport.imageToViewerElementCoordinates(new OpenSeadragon.Point(minX, minY));\n const bottomRight = viewer.viewport.imageToViewerElementCoordinates(new OpenSeadragon.Point(maxX, maxY));\n\n return new DOMRect(\n topLeft.x + left,\n topLeft.y + top,\n bottomRight.x - topLeft.x,\n bottomRight.y - topLeft.y\n );\n}\n\ninterface OpenSeadragonAnnotationPopupProps {\n\n arrow?: boolean;\n\n popup: (props: PopupProps) => ReactNode;\n\n}\n\nexport const OpenSeadragonAnnotationPopup = (props: OpenSeadragonAnnotationPopupProps) => {\n \n const anno = useAnnotator<Annotator<ImageAnnotation>>();\n\n const [isOpen, setIsOpen] = useState(false);\n\n const viewer = useViewer();\n\n const arrowRef = useRef(null);\n\n const { selected, event } = useSelection();\n\n const annotation = selected[0]?.annotation;\n\n const editable = selected[0]?.editable;\n\n const { refs, floatingStyles, context } = useFloating({\n open: isOpen,\n onOpenChange: setIsOpen,\n middleware: [\n inline(), \n offset(10),\n flip({ crossAxis: true }),\n shift({ \n crossAxis: true,\n boundary: viewer?.element,\n padding: { right: 5, left: 5, top: 10, bottom: 10 }\n }),\n arrow({\n element: arrowRef,\n padding: 5\n })\n ],\n whileElementsMounted: autoUpdate\n });\n\n useEffect(() => {\n if (selected.length === 0) {\n setIsOpen(false);\n } else { \n const setPosition = () => { \n const rect = toDOMRect(viewer, annotation.target.selector.geometry);\n \n refs.setReference({\n getBoundingClientRect: () => rect,\n getClientRects: () => toClientRects(rect)\n });\n }\n\n window.addEventListener('scroll', setPosition, true);\n window.addEventListener('resize', setPosition);\n viewer.addHandler('update-viewport', setPosition);\n\n setPosition();\n\n setIsOpen(true);\n\n return () => {\n window.removeEventListener('scroll', setPosition, true);\n window.removeEventListener('resize', setPosition);\n viewer.removeHandler('update-viewport', setPosition);\n };\n }\n }, [props.popup, selected, viewer]);\n\n const onCreateBody = (body: Partial<AnnotationBody>) => {\n const id = body.id || uuidv4();\n \n anno.state.store.addBody({\n ...body,\n id,\n annotation: annotation.id,\n created: body.created || new Date(),\n creator: anno.getUser()\n });\n }\n\n const onDeleteBody = (id: string) => {\n anno.state.store.deleteBody({ id, annotation: annotation.id });\n }\n\n const onUpdateBody = (current: AnnotationBody, next: AnnotationBody) => {\n const id = next.id || uuidv4();\n\n const updated: AnnotationBody = {\n updated: new Date(),\n updatedBy: anno.getUser(),\n ...next,\n id,\n annotation: annotation.id\n }\n\n anno.state.store.updateBody(current, updated);\n }\n\n return isOpen && annotation && (\n <div\n className=\"a9s-popup a9s-image-popup\"\n ref={refs.setFloating}\n style={floatingStyles}>\n\n <FloatingArrow \n ref={arrowRef} \n context={context} \n fill=\"#fff\" />\n\n {props.popup({ \n annotation, \n editable, \n event,\n onCreateBody,\n onDeleteBody,\n onUpdateBody\n })}\n </div>\n )\n\n}"],"names":["toDOMRect","viewer","geometry","minX","minY","maxX","maxY","top","left","topLeft","OpenSeadragon","bottomRight","OpenSeadragonAnnotationPopup","props","anno","useAnnotator","isOpen","setIsOpen","useState","useViewer","arrowRef","useRef","selected","event","useSelection","annotation","_a","editable","_b","refs","floatingStyles","context","useFloating","inline","offset","flip","shift","arrow","autoUpdate","useEffect","setPosition","rect","toClientRects","onCreateBody","body","id","uuidv4","onDeleteBody","onUpdateBody","current","next","updated","jsxs","jsx","FloatingArrow"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,8 +2,9 @@ import { createAnonymousGuest as _createAnonymousGuest, createBody as _createBod
|
|
|
2
2
|
import { ShapeType as _ShapeType } from '@annotorious/annotorious';
|
|
3
3
|
export * from './Annotorious';
|
|
4
4
|
export * from './AnnotoriousPlugin';
|
|
5
|
-
export * from './
|
|
5
|
+
export * from './ImageAnnotationPopup';
|
|
6
6
|
export * from './ImageAnnotator';
|
|
7
|
+
export * from './PopupProps';
|
|
7
8
|
export * from './openseadragon';
|
|
8
9
|
export type { Annotation, AnnotationBody, AnnotationState, AnnotationTarget, Annotator, AnnotatorState, Appearance, AppearanceProvider, Color, DrawingStyle, DrawingStyleExpression, Filter, FormatAdapter, HoverState, LifecycleEvents, ParseResult, PresentUser, Selection, SelectionState, Store, StoreChangeEvent, StoreObserver, User, W3CAnnotation, W3CAnnotationBody, W3CAnnotationTarget } from '@annotorious/core';
|
|
9
10
|
export { _createAnonymousGuest as createAnonymousGuest };
|
|
@@ -12,7 +13,7 @@ export { _defaultColorProvider as defaultColorProvider };
|
|
|
12
13
|
export { _Origin as Origin };
|
|
13
14
|
export { _UserSelectAction as UserSelectAction };
|
|
14
15
|
export type { AnnotoriousOpts, DrawingMode, DrawingTool, FragmentSelector, ImageAnnotator as AnnotoriousImageAnnotator, ImageAnnotation, ImageAnnotatorState, Polygon, PolygonGeometry, Rectangle, RectangleGeometry, Shape, SVGSelector, W3CImageAnnotation, W3CImageAnnotationTarget, W3CImageFormatAdapter, W3CImageFormatAdapterOpts } from '@annotorious/annotorious';
|
|
15
|
-
export declare const createImageAnnotator: <E extends unknown = import('@annotorious/annotorious').ImageAnnotation>(image: string | HTMLImageElement | HTMLCanvasElement, options?: import('@annotorious/annotorious').AnnotoriousOpts<
|
|
16
|
+
export declare const createImageAnnotator: <I extends import('@annotorious/core').Annotation = import('@annotorious/annotorious').ImageAnnotation, E extends unknown = import('@annotorious/annotorious').ImageAnnotation>(image: string | HTMLImageElement | HTMLCanvasElement, options?: import('@annotorious/annotorious').AnnotoriousOpts<I, E>) => import('@annotorious/annotorious').ImageAnnotator<I, E>;
|
|
16
17
|
export declare const ShapeType: typeof _ShapeType;
|
|
17
18
|
export declare const W3CImageFormat: (source: string, opts?: import('@annotorious/annotorious').W3CImageFormatAdapterOpts) => import('@annotorious/annotorious').W3CImageFormatAdapter;
|
|
18
19
|
export type { OpenSeadragonAnnotator as AnnotoriousOpenSeadragonAnnotator } from '@annotorious/openseadragon';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAE7B,cAAc,iBAAiB,CAAC;AAGhC,OAAO,0CAA0C,CAAC;AAClD,OAAO,0DAA0D,CAAC;AAGlE,YAAY,EACV,UAAU,EACV,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,KAAK,EACL,YAAY,EACZ,sBAAsB,EACtB,MAAM,EACN,aAAa,EACb,UAAU,EACV,eAAe,EACf,WAAW,EACX,WAAW,EACX,SAAS,EACT,cAAc,EACd,KAAK,EACL,gBAAgB,EAChB,aAAa,EACb,IAAI,EACJ,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,oBAAoB,IAAI,qBAAqB,EAC7C,UAAU,IAAI,WAAW,EACzB,oBAAoB,IAAI,qBAAqB,EAC7C,MAAM,IAAI,OAAO,EACjB,gBAAgB,IAAI,iBAAiB,EACtC,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,qBAAqB,IAAI,oBAAoB,EAAE,CAAC;AACzD,OAAO,EAAE,WAAW,IAAI,UAAU,EAAE,CAAC;AACrC,OAAO,EAAE,qBAAqB,IAAI,oBAAoB,EAAE,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,CAAC;AAC7B,OAAO,EAAE,iBAAiB,IAAI,gBAAgB,EAAE,CAAC;AAGjD,YAAY,EACV,eAAe,EACf,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,cAAc,IAAI,yBAAyB,EAC3C,eAAe,EACf,mBAAmB,EACnB,OAAO,EACP,eAAe,EACf,SAAS,EACT,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,yBAAyB,EAC1B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAEL,SAAS,IAAI,UAAU,EAExB,MAAM,0BAA0B,CAAC;AAElC,eAAO,MAAM,oBAAoB,sWAAwB,CAAC;AAC1D,eAAO,MAAM,SAAS,mBAAa,CAAC;AACpC,eAAO,MAAM,cAAc,mJAAkB,CAAC;AAG9C,YAAY,EACV,sBAAsB,IAAI,iCAAiC,EAC5D,MAAM,4BAA4B,CAAC;AAEpC,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { PopupProps } from '../index.ts';
|
|
3
|
+
interface OpenSeadragonAnnotationPopupProps {
|
|
4
|
+
arrow?: boolean;
|
|
5
|
+
popup: (props: PopupProps) => ReactNode;
|
|
6
|
+
}
|
|
7
|
+
export declare const OpenSeadragonAnnotationPopup: (props: OpenSeadragonAnnotationPopupProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=OpenSeadragonAnnotationPopup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpenSeadragonAnnotationPopup.d.ts","sourceRoot":"","sources":["../../src/openseadragon/OpenSeadragonAnnotationPopup.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA+B,MAAM,OAAO,CAAC;AAI/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AA8BrD,UAAU,iCAAiC;IAEzC,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,SAAS,CAAC;CAEzC;AAED,eAAO,MAAM,4BAA4B,UAAW,iCAAiC,4CAqHpF,CAAA"}
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
import { default as OpenSeadragon } from 'openseadragon';
|
|
3
|
-
import { AnnotoriousOpts, DrawingStyle, Filter
|
|
3
|
+
import { Annotation, AnnotoriousOpts, DrawingStyle, Filter } from '@annotorious/annotorious';
|
|
4
4
|
export declare const OpenSeadragonAnnotatorContext: import('react').Context<{
|
|
5
5
|
viewer: OpenSeadragon.Viewer;
|
|
6
6
|
setViewer(viewer: OpenSeadragon.Viewer): void;
|
|
7
7
|
}>;
|
|
8
|
-
export type OpenSeadragonAnnotatorProps<E extends unknown> = AnnotoriousOpts<
|
|
8
|
+
export type OpenSeadragonAnnotatorProps<I extends Annotation, E extends unknown> = AnnotoriousOpts<I, E> & {
|
|
9
9
|
children?: ReactNode;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
style?: DrawingStyle | ((annotation: ImageAnnotation) => DrawingStyle);
|
|
10
|
+
filter?: Filter<I>;
|
|
11
|
+
style?: DrawingStyle | ((annotation: I) => DrawingStyle);
|
|
13
12
|
tool?: string | null;
|
|
14
13
|
};
|
|
15
|
-
export declare const OpenSeadragonAnnotator: <E extends unknown>(props: OpenSeadragonAnnotatorProps<E>) => import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export declare const OpenSeadragonAnnotator: <I extends Annotation, E extends unknown>(props: OpenSeadragonAnnotatorProps<I, E>) => import("react/jsx-runtime").JSX.Element;
|
|
16
15
|
export declare const useViewer: () => OpenSeadragon.Viewer;
|
|
17
16
|
//# sourceMappingURL=OpenSeadragonAnnotator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenSeadragonAnnotator.d.ts","sourceRoot":"","sources":["../../src/openseadragon/OpenSeadragonAnnotator.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,SAAS,EAAmC,MAAM,OAAO,CAAC;AAClF,OAAO,aAAa,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"OpenSeadragonAnnotator.d.ts","sourceRoot":"","sources":["../../src/openseadragon/OpenSeadragonAnnotator.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,SAAS,EAAmC,MAAM,OAAO,CAAC;AAClF,OAAO,aAAa,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,EAAmB,MAAM,0BAA0B,CAAC;AAG9G,eAAO,MAAM,6BAA6B;YAChC,aAAa,CAAC,MAAM;sBACV,aAAa,CAAC,MAAM,GAAG,IAAI;EACV,CAAC;AAEtC,MAAM,MAAM,2BAA2B,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,OAAO,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;IAEzG,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAEnB,KAAK,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,YAAY,CAAC,CAAC;IAEzD,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAEtB,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,OAAO,SAAS,2BAA2B,CAAC,CAAC,EAAE,CAAC,CAAC,4CAgDvH,CAAA;AAED,eAAO,MAAM,SAAS,4BAGrB,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { OpenSeadragonAnnotator, useViewer } from './OpenSeadragonAnnotator';
|
|
2
2
|
export type { OpenSeadragonAnnotatorProps } from './OpenSeadragonAnnotator';
|
|
3
|
-
export {
|
|
3
|
+
export { OpenSeadragonAnnotationPopup, } from './OpenSeadragonAnnotationPopup';
|
|
4
4
|
export * from './OpenSeadragonViewer';
|
|
5
5
|
export type { OpenSeadragonAnnotator as AnnotoriousOpenSeadragonAnnotator } from '@annotorious/openseadragon';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/openseadragon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,SAAS,EACV,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,2BAA2B,EAC5B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/openseadragon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,SAAS,EACV,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,2BAA2B,EAC5B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,4BAA4B,GAC7B,MAAM,gCAAgC,CAAC;AAExC,cAAc,uBAAuB,CAAC;AAGtC,YAAY,EACV,sBAAsB,IAAI,iCAAiC,EAC5D,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toClientRects.d.ts","sourceRoot":"","sources":["../../src/utils/toClientRects.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,aAAa,SAAU,OAAO,gBAO1B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@annotorious/react",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.2",
|
|
4
4
|
"description": "Annotorious React bindings",
|
|
5
5
|
"author": "Rainer Simon",
|
|
6
6
|
"license": "BSD-3-Clause",
|
|
7
|
-
"homepage": "https://annotorious.
|
|
7
|
+
"homepage": "https://annotorious.dev",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"scripts": {
|
|
10
10
|
"start": "vite",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"./annotorious-react.css": "./dist/annotorious-react.css"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@types/react": "^18.3.
|
|
27
|
+
"@types/react": "^18.3.5",
|
|
28
28
|
"@types/react-dom": "^18.3.0",
|
|
29
29
|
"@vitejs/plugin-react": "^4.3.1",
|
|
30
30
|
"typescript": "5.5.4",
|
|
@@ -43,10 +43,10 @@
|
|
|
43
43
|
}
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@annotorious/
|
|
47
|
-
"@annotorious/
|
|
48
|
-
"@annotorious/openseadragon": "3.0.
|
|
49
|
-
"@
|
|
46
|
+
"@annotorious/annotorious": "3.0.2",
|
|
47
|
+
"@annotorious/core": "3.0.2",
|
|
48
|
+
"@annotorious/openseadragon": "3.0.2",
|
|
49
|
+
"@floating-ui/react": "^0.26.23"
|
|
50
50
|
},
|
|
51
51
|
"sideEffects": false
|
|
52
52
|
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { ReactNode } from 'react';
|
|
2
|
-
import { ImageAnnotation } from '@annotorious/annotorious';
|
|
3
|
-
export interface AnnotoriousPopupProps {
|
|
4
|
-
selected: {
|
|
5
|
-
annotation: ImageAnnotation;
|
|
6
|
-
editable?: boolean;
|
|
7
|
-
}[];
|
|
8
|
-
}
|
|
9
|
-
export interface DraggableProps {
|
|
10
|
-
children: ReactNode;
|
|
11
|
-
className?: string;
|
|
12
|
-
onDragStart?(): void;
|
|
13
|
-
onDragEnd?(): void;
|
|
14
|
-
}
|
|
15
|
-
export declare const Draggable: import('react').ForwardRefExoticComponent<DraggableProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
16
|
-
//# sourceMappingURL=AnnotoriousPopup.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AnnotoriousPopup.d.ts","sourceRoot":"","sources":["../src/AnnotoriousPopup.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,SAAS,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAG3D,MAAM,WAAW,qBAAqB;IAEpC,QAAQ,EAAE;QAAE,UAAU,EAAE,eAAe,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CAEjE;AAED,MAAM,WAAW,cAAc;IAE7B,QAAQ,EAAE,SAAS,CAAC;IAEpB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,WAAW,CAAC,IAAI,IAAI,CAAC;IAErB,SAAS,CAAC,IAAI,IAAI,CAAC;CAEpB;AAED,eAAO,MAAM,SAAS,2GAepB,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { ReactNode } from 'react';
|
|
2
|
-
import { default as OpenSeadragon } from 'openseadragon';
|
|
3
|
-
import { AnnotoriousPopupProps } from '../AnnotoriousPopup';
|
|
4
|
-
export type OpenSeadragonPopupProps = AnnotoriousPopupProps & {
|
|
5
|
-
viewer: OpenSeadragon.Viewer;
|
|
6
|
-
};
|
|
7
|
-
export type OpenSeadragonPopupContainerProps = {
|
|
8
|
-
popup(props: OpenSeadragonPopupProps): ReactNode;
|
|
9
|
-
};
|
|
10
|
-
export declare const OpenSeadragonPopup: (props: OpenSeadragonPopupContainerProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
-
//# sourceMappingURL=OpenSeadragonPopup.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OpenSeadragonPopup.d.ts","sourceRoot":"","sources":["../../src/openseadragon/OpenSeadragonPopup.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA+B,MAAM,OAAO,CAAC;AAE/D,OAAO,aAAa,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAa,MAAM,qBAAqB,CAAC;AAKvE,MAAM,MAAM,uBAAuB,GAAG,qBAAqB,GAAG;IAE5D,MAAM,EAAE,aAAa,CAAC,MAAM,CAAA;CAE7B,CAAA;AAED,MAAM,MAAM,gCAAgC,GAAG;IAE7C,KAAK,CAAC,KAAK,EAAE,uBAAuB,GAAG,SAAS,CAAA;CAEjD,CAAA;AAED,eAAO,MAAM,kBAAkB,UAAW,gCAAgC,4CA6DzE,CAAA"}
|