@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.
Files changed (69) hide show
  1. package/dist/Annotorious.d.ts +6 -6
  2. package/dist/Annotorious.d.ts.map +1 -1
  3. package/dist/AnnotoriousPlugin.d.ts +6 -3
  4. package/dist/AnnotoriousPlugin.d.ts.map +1 -1
  5. package/dist/ImageAnnotationPopup.d.ts +9 -0
  6. package/dist/ImageAnnotationPopup.d.ts.map +1 -0
  7. package/dist/ImageAnnotator.d.ts +2 -2
  8. package/dist/ImageAnnotator.d.ts.map +1 -1
  9. package/dist/PopupProps.d.ts +10 -0
  10. package/dist/PopupProps.d.ts.map +1 -0
  11. package/dist/annotorious-react.es.js +20 -20
  12. package/dist/annotorious-react.es.js.map +1 -1
  13. package/dist/annotorious-react.es11.js +3 -3
  14. package/dist/annotorious-react.es13.js +264 -126
  15. package/dist/annotorious-react.es13.js.map +1 -1
  16. package/dist/annotorious-react.es14.js +9 -32
  17. package/dist/annotorious-react.es14.js.map +1 -1
  18. package/dist/annotorious-react.es15.js +193 -2
  19. package/dist/annotorious-react.es15.js.map +1 -1
  20. package/dist/annotorious-react.es16.js +368 -25
  21. package/dist/annotorious-react.es16.js.map +1 -1
  22. package/dist/annotorious-react.es17.js +10 -605
  23. package/dist/annotorious-react.es17.js.map +1 -1
  24. package/dist/annotorious-react.es18.js +2 -2
  25. package/dist/annotorious-react.es19.js +26 -2
  26. package/dist/annotorious-react.es19.js.map +1 -1
  27. package/dist/annotorious-react.es2.js.map +1 -1
  28. package/dist/annotorious-react.es20.js +609 -0
  29. package/dist/annotorious-react.es20.js.map +1 -0
  30. package/dist/annotorious-react.es21.js +129 -0
  31. package/dist/annotorious-react.es21.js.map +1 -0
  32. package/dist/annotorious-react.es22.js +5 -0
  33. package/dist/annotorious-react.es22.js.map +1 -0
  34. package/dist/annotorious-react.es23.js +5 -0
  35. package/dist/annotorious-react.es23.js.map +1 -0
  36. package/dist/annotorious-react.es24.js +10 -0
  37. package/dist/annotorious-react.es24.js.map +1 -0
  38. package/dist/annotorious-react.es25.js +8 -0
  39. package/dist/annotorious-react.es25.js.map +1 -0
  40. package/dist/annotorious-react.es26.js +10 -0
  41. package/dist/annotorious-react.es26.js.map +1 -0
  42. package/dist/annotorious-react.es27.js +129 -0
  43. package/dist/annotorious-react.es27.js.map +1 -0
  44. package/dist/annotorious-react.es28.js +466 -0
  45. package/dist/annotorious-react.es28.js.map +1 -0
  46. package/dist/annotorious-react.es3.js +12 -12
  47. package/dist/annotorious-react.es3.js.map +1 -1
  48. package/dist/annotorious-react.es4.js +96 -12
  49. package/dist/annotorious-react.es4.js.map +1 -1
  50. package/dist/annotorious-react.es5.js +15 -13
  51. package/dist/annotorious-react.es5.js.map +1 -1
  52. package/dist/annotorious-react.es8.js.map +1 -1
  53. package/dist/annotorious-react.es9.js +105 -32
  54. package/dist/annotorious-react.es9.js.map +1 -1
  55. package/dist/index.d.ts +3 -2
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/openseadragon/OpenSeadragonAnnotationPopup.d.ts +9 -0
  58. package/dist/openseadragon/OpenSeadragonAnnotationPopup.d.ts.map +1 -0
  59. package/dist/openseadragon/OpenSeadragonAnnotator.d.ts +5 -6
  60. package/dist/openseadragon/OpenSeadragonAnnotator.d.ts.map +1 -1
  61. package/dist/openseadragon/index.d.ts +1 -1
  62. package/dist/openseadragon/index.d.ts.map +1 -1
  63. package/dist/utils/toClientRects.d.ts +6 -0
  64. package/dist/utils/toClientRects.d.ts.map +1 -0
  65. package/package.json +7 -7
  66. package/dist/AnnotoriousPopup.d.ts +0 -16
  67. package/dist/AnnotoriousPopup.d.ts.map +0 -1
  68. package/dist/openseadragon/OpenSeadragonPopup.d.ts +0 -11
  69. package/dist/openseadragon/OpenSeadragonPopup.d.ts.map +0 -1
@@ -1,19 +1,103 @@
1
- import { j as e } from "./annotorious-react.es11.js";
2
- import { forwardRef as g } from "react";
3
- import { useDraggable as i } from "./annotorious-react.es13.js";
4
- const p = g((r, o) => {
5
- const { children: t, className: a, onDragStart: s, onDragEnd: n } = r;
6
- return i(o, { onDragStart: s, onDragEnd: n, cancel: "button, .no-drag" }), /* @__PURE__ */ e.jsx(
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
- ref: o,
10
- className: a,
11
- style: { position: "absolute" },
12
- children: t
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
- p as Draggable
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/AnnotoriousPopup.tsx"],"sourcesContent":["import { forwardRef, ReactNode } from 'react';\nimport { ImageAnnotation } from '@annotorious/annotorious';\nimport { useDraggable } from '@neodrag/react';\n\nexport interface AnnotoriousPopupProps {\n\n selected: { annotation: ImageAnnotation, editable?: boolean }[];\n\n}\n\nexport interface DraggableProps {\n\n children: ReactNode;\n\n className?: string;\n\n onDragStart?(): void;\n\n onDragEnd?(): void;\n\n}\n\nexport const Draggable = forwardRef((props: DraggableProps, ref: React.MutableRefObject<HTMLDivElement>) => {\n\n const { children, className, onDragStart, onDragEnd } = props;\n\n useDraggable(ref, { onDragStart, onDragEnd, cancel: 'button, .no-drag' });\n\n return (\n <div \n ref={ref} \n className={className} \n style={{ position: 'absolute' }}>\n {children}\n </div>\n )\n\n});"],"names":["Draggable","forwardRef","props","ref","children","className","onDragStart","onDragEnd","useDraggable","jsx"],"mappings":";;;AAsBO,MAAMA,IAAYC,EAAW,CAACC,GAAuBC,MAAiD;AAE3G,QAAM,EAAE,UAAAC,GAAU,WAAAC,GAAW,aAAAC,GAAa,WAAAC,MAAcL;AAExDM,SAAAA,EAAaL,GAAK,EAAE,aAAAG,GAAa,WAAAC,GAAW,QAAQ,oBAAoB,GAGtEE,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAN;AAAA,MACA,WAAAE;AAAA,MACA,OAAO,EAAE,UAAU,WAAW;AAAA,MAC7B,UAAAD;AAAA,IAAA;AAAA,EAAA;AAIP,CAAC;"}
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 n } from "./annotorious-react.es11.js";
2
- import { Children as u, useContext as x, useEffect as o, cloneElement as A } from "react";
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 d } from "./annotorious-react.es2.js";
5
- const E = (t) => {
6
- const { children: i, tool: h, ...l } = t, c = u.only(i), { anno: e, setAnno: r } = x(d), s = (m) => {
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 f = m.target, a = g(f, l);
9
- r(a);
8
+ const m = s.target, f = g(m, l);
9
+ a(f);
10
10
  }
11
11
  };
12
- return o(() => {
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]), o(() => {
16
+ }, [t.tool, e]), n(() => {
15
17
  e && e.setFilter(t.filter);
16
- }, [t.filter]), o(() => {
18
+ }, [t.filter]), n(() => {
17
19
  e && e.setStyle(t.style);
18
- }, [t.style]), o(() => {
20
+ }, [t.style]), n(() => {
19
21
  e && e.setUserSelectAction(t.userSelectAction);
20
- }, [t.userSelectAction]), /* @__PURE__ */ n.jsx(n.Fragment, { children: A(c, { onLoad: s }) });
22
+ }, [t.userSelectAction]), /* @__PURE__ */ o.jsx(o.Fragment, { children: A(c, { onLoad: r }) });
21
23
  };
22
24
  export {
23
- E as ImageAnnotator
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 { DrawingStyle, 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 filter?: Filter<ImageAnnotation>;\n\n style?: DrawingStyle | ((annotation: ImageAnnotation) => DrawingStyle);\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 (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,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
+ {"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<ImageAnnotation, E> & {\n\n children?: ReactNode;\n\n drawingEnabled?: boolean;\n\n filter?: Filter<ImageAnnotation>;\n\n style?: DrawingStyle | ((annotation: ImageAnnotation) => DrawingStyle);\n\n tool?: string | null;\n\n}\n\nexport const OpenSeadragonAnnotator = <E extends unknown>(props: OpenSeadragonAnnotatorProps<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<E>(viewer, opts);\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,GAgBvBC,IAAyB,CAAoBC,MAA0C;AAElG,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,EAAsBR,GAAQD,CAAI;AAE/C,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
+ {"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 v } from "./annotorious-react.es11.js";
2
- import { useRef as w, useState as d, useEffect as u } from "react";
3
- import { Draggable as x } from "./annotorious-react.es4.js";
4
- import { useViewer as S } from "./annotorious-react.es8.js";
5
- import { useSelection as j } from "./annotorious-react.es2.js";
6
- import { setPosition as D } from "./annotorious-react.es14.js";
7
- const R = (c) => {
8
- const n = w(null), o = S(), { selected: t } = j(), [l, m] = d([]), [s, i] = d(!1), f = () => i(!0), p = () => {
9
- const e = t[0].annotation;
10
- D(o, e, n.current);
11
- }, g = (e, r) => e.every((a) => r.includes(a)) && r.every((a) => e.includes(a));
12
- return u(() => {
13
- const e = t.map(({ annotation: r }) => r.id);
14
- g(l, e) || (i(!1), m(e));
15
- }, [t]), u(() => {
16
- if (!n.current) return;
17
- s || p();
18
- const e = () => {
19
- s || p();
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
- return o.addHandler("update-viewport", e), () => {
22
- o.removeHandler("update-viewport", e);
23
- };
24
- }, [t, s]), t.length > 0 ? /* @__PURE__ */ v.jsx(
25
- x,
79
+ n.state.store.updateBody(e, h);
80
+ };
81
+ return d && t && /* @__PURE__ */ g.jsxs(
82
+ "div",
26
83
  {
27
- ref: n,
28
- className: "a9s-popup a9s-osd-popup",
29
- onDragStart: f,
30
- children: c.popup({ viewer: o, selected: t })
31
- },
32
- t.map(({ annotation: e }) => e.id).join("-")
33
- ) : null;
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
- R as OpenSeadragonPopup
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/OpenSeadragonPopup.tsx"],"sourcesContent":["import { ReactNode, useEffect, useRef, useState } from 'react';\nimport { ImageAnnotation } from '@annotorious/annotorious';\nimport OpenSeadragon from 'openseadragon';\nimport { AnnotoriousPopupProps, Draggable } from '../AnnotoriousPopup';\nimport { useViewer } from './OpenSeadragonAnnotator';\nimport { useSelection } from '../Annotorious';\nimport { setPosition } from './setPosition';\n\nexport type OpenSeadragonPopupProps = AnnotoriousPopupProps & {\n\n viewer: OpenSeadragon.Viewer\n\n}\n\nexport type OpenSeadragonPopupContainerProps = {\n\n popup(props: OpenSeadragonPopupProps): ReactNode\n\n}\n\nexport const OpenSeadragonPopup = (props: OpenSeadragonPopupContainerProps) => {\n\n const el = useRef<HTMLDivElement>(null);\n\n const viewer = useViewer();\n\n const { selected } = useSelection<ImageAnnotation>();\n\n const [selectedIds, setSelectedIds] = useState<string[]>([]);\n\n const [dragged, setDragged] = useState(false);\n\n const onDragStart = () => setDragged(true);\n\n const updatePosition = () => {\n // Note: this popup only supports a single selection\n const annotation = selected[0].annotation;\n setPosition(viewer, annotation, el.current);\n }\n\n const equal = (a: string[], b: string[]) => \n a.every(str => b.includes(str)) && b.every(str => a.includes(str));\n\n useEffect(() => {\n // Reset drag flag if selected IDs have changed\n const nextIds = selected.map(({ annotation }) => annotation.id);\n\n if (!equal(selectedIds, nextIds)) {\n setDragged(false);\n setSelectedIds(nextIds);\n }\n }, [selected]);\n\n useEffect(() => {\n if (!el.current) return;\n\n if (!dragged) updatePosition();\n\n const onUpdateViewport = () => {\n if (!dragged) updatePosition();\n }\n\n viewer.addHandler('update-viewport', onUpdateViewport);\n\n return () => {\n viewer.removeHandler('update-viewport', onUpdateViewport);\n }\n }, [selected, dragged]);\n \n return selected.length > 0 ? (\n <Draggable \n ref={el} \n key={selected.map(({ annotation }) => annotation.id).join('-')} \n className=\"a9s-popup a9s-osd-popup\" \n onDragStart={onDragStart}>\n\n {props.popup({ viewer, selected })}\n \n </Draggable>\n ) : null;\n\n}"],"names":["OpenSeadragonPopup","props","el","useRef","viewer","useViewer","selected","useSelection","selectedIds","setSelectedIds","useState","dragged","setDragged","onDragStart","updatePosition","annotation","setPosition","equal","a","b","str","useEffect","nextIds","onUpdateViewport","jsx","Draggable"],"mappings":";;;;;;AAoBa,MAAAA,IAAqB,CAACC,MAA4C;AAEvE,QAAAC,IAAKC,EAAuB,IAAI,GAEhCC,IAASC,KAET,EAAE,UAAAC,MAAaC,KAEf,CAACC,GAAaC,CAAc,IAAIC,EAAmB,CAAE,CAAA,GAErD,CAACC,GAASC,CAAU,IAAIF,EAAS,EAAK,GAEtCG,IAAc,MAAMD,EAAW,EAAI,GAEnCE,IAAiB,MAAM;AAErB,UAAAC,IAAaT,EAAS,CAAC,EAAE;AACnB,IAAAU,EAAAZ,GAAQW,GAAYb,EAAG,OAAO;AAAA,EAAA,GAGtCe,IAAQ,CAACC,GAAaC,MAC1BD,EAAE,MAAM,OAAOC,EAAE,SAASC,CAAG,CAAC,KAAKD,EAAE,MAAM,OAAOD,EAAE,SAASE,CAAG,CAAC;AAEnE,SAAAC,EAAU,MAAM;AAER,UAAAC,IAAUhB,EAAS,IAAI,CAAC,EAAE,YAAAS,QAAiBA,EAAW,EAAE;AAE9D,IAAKE,EAAMT,GAAac,CAAO,MAC7BV,EAAW,EAAK,GAChBH,EAAea,CAAO;AAAA,EACxB,GACC,CAAChB,CAAQ,CAAC,GAEbe,EAAU,MAAM;AACV,QAAA,CAACnB,EAAG,QAAS;AAEb,IAACS,KAAwBG;AAE7B,UAAMS,IAAmB,MAAM;AACzB,MAACZ,KAAwBG;IAAA;AAGxB,WAAAV,EAAA,WAAW,mBAAmBmB,CAAgB,GAE9C,MAAM;AACJ,MAAAnB,EAAA,cAAc,mBAAmBmB,CAAgB;AAAA,IAAA;AAAA,EAC1D,GACC,CAACjB,GAAUK,CAAO,CAAC,GAEfL,EAAS,SAAS,IACvBkB,gBAAAA,EAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAKvB;AAAA,MAEL,WAAU;AAAA,MACV,aAAAW;AAAA,MAEC,UAAMZ,EAAA,MAAM,EAAE,QAAAG,GAAQ,UAAAE,GAAU;AAAA,IAAA;AAAA,IAJ5BA,EAAS,IAAI,CAAC,EAAE,YAAAS,EAAA,MAAiBA,EAAW,EAAE,EAAE,KAAK,GAAG;AAAA,EAO7D,IAAA;AAEN;"}
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 './AnnotoriousPopup';
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<import('@annotorious/annotorious').ImageAnnotation, E>) => import('@annotorious/annotorious').ImageAnnotator<E>;
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';
@@ -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,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AAEjC,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,6SAAwB,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"}
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, ImageAnnotation } from '@annotorious/annotorious';
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<ImageAnnotation, E> & {
8
+ export type OpenSeadragonAnnotatorProps<I extends Annotation, E extends unknown> = AnnotoriousOpts<I, E> & {
9
9
  children?: ReactNode;
10
- drawingEnabled?: boolean;
11
- filter?: Filter<ImageAnnotation>;
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,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGlG,eAAO,MAAM,6BAA6B;YAChC,aAAa,CAAC,MAAM;sBACV,aAAa,CAAC,MAAM,GAAG,IAAI;EACV,CAAC;AAEtC,MAAM,MAAM,2BAA2B,CAAC,CAAC,SAAS,OAAO,IAAI,eAAe,CAAC,eAAe,EAAE,CAAC,CAAC,GAAG;IAEjG,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,MAAM,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IAEjC,KAAK,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,UAAU,EAAE,eAAe,KAAK,YAAY,CAAC,CAAC;IAEvE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAEtB,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,CAAC,SAAS,OAAO,SAAS,2BAA2B,CAAC,CAAC,CAAC,4CAgD9F,CAAA;AAED,eAAO,MAAM,SAAS,4BAGrB,CAAA"}
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 { OpenSeadragonPopup, type OpenSeadragonPopupProps } from './OpenSeadragonPopup';
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,kBAAkB,EAClB,KAAK,uBAAuB,EAC7B,MAAM,sBAAsB,CAAC;AAE9B,cAAc,uBAAuB,CAAC;AAGtC,YAAY,EACV,sBAAsB,IAAI,iCAAiC,EAC5D,MAAM,4BAA4B,CAAC"}
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,6 @@
1
+ /**
2
+ * Wraps a single DOMRect into an object that properly
3
+ * implements the DOMRectList interface.
4
+ */
5
+ export declare const toClientRects: (rect: DOMRect) => DOMRectList;
6
+ //# sourceMappingURL=toClientRects.d.ts.map
@@ -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.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.github.io",
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.4",
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/core": "3.0.0",
47
- "@annotorious/annotorious": "3.0.0",
48
- "@annotorious/openseadragon": "3.0.0",
49
- "@neodrag/react": "^2.0.4"
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"}