@annotorious/react 3.0.0-rc.31 → 3.0.0-rc.32

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.
@@ -1,19 +1,12 @@
1
+ import { StoreObserveOptions, UserSelectActionExpression } from '@annotorious/core';
1
2
  import { ReactNode } from 'react';
2
3
  import { Annotation, Annotator, Selection as CoreSelection, Store, User } from '@annotorious/annotorious';
3
- import { StoreObserveOptions, UserSelectActionExpression } from '@annotorious/core';
4
-
5
4
  interface Selection<T extends Annotation = Annotation> extends Omit<CoreSelection, 'selected'> {
6
5
  selected: {
7
6
  annotation: T;
8
7
  editable?: boolean;
9
8
  }[];
10
9
  }
11
- export interface AnnotoriousContextState {
12
- anno: Annotator;
13
- setAnno(anno: Annotator<Annotation, unknown>): void;
14
- annotations: Annotation[];
15
- selection: Selection;
16
- }
17
10
  export declare const AnnotoriousContext: import('react').Context<{
18
11
  anno: any;
19
12
  setAnno: any;
@@ -1 +1 @@
1
- {"version":3,"file":"Annotorious.d.ts","sourceRoot":"","sources":["../src/Annotorious.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAwD,MAAM,OAAO,CAAC;AACxH,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACT,SAAS,IAAI,aAAa,EAC1B,KAAK,EAEL,IAAI,EACL,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAChC,MAAM,mBAAmB,CAAC;AAI3B,UAAU,SAAS,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,CAAE,SAAQ,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;IAE5F,QAAQ,EAAE;QAAE,UAAU,EAAE,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CAEnD;AAED,MAAM,WAAW,uBAAuB;IAEtC,IAAI,EAAE,SAAS,CAAC;IAEhB,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAEpD,WAAW,EAAE,UAAU,EAAE,CAAC;IAE1B,SAAS,EAAE,SAAS,CAAC;CAEtB;AAED,eAAO,MAAM,kBAAkB;;;;;;;EAU7B,CAAC;AAEH,eAAO,MAAM,WAAW;cAAqC,SAAS;qEAuEpE,CAAC;AAEH,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,OAAO,iCAE7B,CAChB,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,OAAO,2BAEtB,CAAC,GAAG,SACjC,CAAA;AAYD,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,UAAU,aAAa,MAAM,QACG,CAAC;AAE1E,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,UAAU,MAAM,MAAM,YAAY,IAAI,CAAC,mBAAmB,EAAE,aAAa,CAAC,MAsBjH,CAAA;AAED,eAAO,MAAM,yBAAyB,GAAI,CAAC,SAAS,UAAU,MAAM,MAAM,UAAU,0BAA0B,CAAC,CAAC,CAAC,iDAGhH,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,UAAU,OAE3B,SAAS,CAAC,CAAC,CAChC,CAAA;AAED,eAAO,MAAM,gBAAgB,QAAO,IAGnC,CAAA;AAmDD,eAAO,MAAM,gBAAgB,GAAK,CAAC,SAAS,UAAU,aAAa,MAAM,QACI,CAAC"}
1
+ {"version":3,"file":"Annotorious.d.ts","sourceRoot":"","sources":["../src/Annotorious.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,0BAA0B,EAAC,MAAM,mBAAmB,CAAC;AAExF,OAAO,EAGL,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACT,SAAS,IAAI,aAAa,EAC1B,KAAK,EAEL,IAAI,EACL,MAAM,0BAA0B,CAAC;AAElC,UAAU,SAAS,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,CAAE,SAAQ,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;IAE5F,QAAQ,EAAE;QAAE,UAAU,EAAE,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CAEnD;AAED,eAAO,MAAM,kBAAkB;;;;;;;EAU7B,CAAC;AAEH,eAAO,MAAM,WAAW;cAAqC,SAAS;qEAuEpE,CAAC;AAEH,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,OAAO,iCAE7B,CAChB,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,OAAO,2BAEtB,CAAC,GAAG,SACjC,CAAA;AAYD,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,UAAU,aAAa,MAAM,QACG,CAAC;AAE1E,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,UAAU,MAAM,MAAM,YAAY,IAAI,CAAC,mBAAmB,EAAE,aAAa,CAAC,MAsBjH,CAAA;AAED,eAAO,MAAM,yBAAyB,GAAI,CAAC,SAAS,UAAU,MAAM,MAAM,UAAU,0BAA0B,CAAC,CAAC,CAAC,iDAGhH,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,UAAU,OAE3B,SAAS,CAAC,CAAC,CAChC,CAAA;AAED,eAAO,MAAM,gBAAgB,QAAO,IAGnC,CAAA;AAmDD,eAAO,MAAM,gBAAgB,GAAK,CAAC,SAAS,UAAU,aAAa,MAAM,QACI,CAAC"}
@@ -1,5 +1,4 @@
1
1
  import { Annotator } from '@annotorious/annotorious';
2
-
3
2
  export type AnnotatorPlugin<T extends unknown = Annotator<any, unknown>> = (anno: T, opts?: Object) => ({
4
3
  unmount?: () => void;
5
4
  }) | void;
@@ -7,5 +6,7 @@ export interface AnnotoriousPluginProps<T extends unknown = Annotator<any, unkno
7
6
  plugin: AnnotatorPlugin<T>;
8
7
  opts?: Object;
9
8
  }
10
- export declare const AnnotoriousPlugin: <T extends unknown = Annotator<any, unknown>>(props: AnnotoriousPluginProps<T>) => any;
9
+ export declare const AnnotoriousPlugin: import('react').ForwardRefExoticComponent<AnnotoriousPluginProps<unknown> & import('react').RefAttributes<void | {
10
+ unmount?: () => void;
11
+ }>>;
11
12
  //# sourceMappingURL=AnnotoriousPlugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AnnotoriousPlugin.d.ts","sourceRoot":"","sources":["../src/AnnotoriousPlugin.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGrD,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,OAAO,GAAG,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,IACrE,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,CAAC;IAAE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC,GAAG,IAAI,CAAC;AAEhE,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,OAAO,GAAG,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC;IAEjF,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAE3B,IAAI,CAAC,EAAE,MAAM,CAAC;CAEf;AAED,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,OAAO,mCAAmC,sBAAsB,CAAC,CAAC,CAAC,QAiB9G,CAAC"}
1
+ {"version":3,"file":"AnnotoriousPlugin.d.ts","sourceRoot":"","sources":["../src/AnnotoriousPlugin.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGrD,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,OAAO,GAAG,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,IACrE,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,CAAC;IAAE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC,GAAG,IAAI,CAAC;AAEhE,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,OAAO,GAAG,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC;IAEjF,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAE3B,IAAI,CAAC,EAAE,MAAM,CAAC;CAEf;AAID,eAAO,MAAM,iBAAiB;cAZa,MAAM,IAAI;GAwCnD,CAAC"}
@@ -1,6 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { ImageAnnotation } from '@annotorious/annotorious';
3
-
4
3
  export interface AnnotoriousPopupProps {
5
4
  selected: {
6
5
  annotation: ImageAnnotation;
@@ -1,6 +1,5 @@
1
1
  import { ReactElement } from 'react';
2
2
  import { AnnotoriousOpts, DrawingStyle, DrawingTool, Filter, ImageAnnotation } from '@annotorious/annotorious';
3
-
4
3
  export interface ImageAnnotatorProps<E extends unknown> extends AnnotoriousOpts<ImageAnnotation, E> {
5
4
  children: ReactElement<HTMLImageElement>;
6
5
  filter?: Filter<ImageAnnotation>;
@@ -1 +1 @@
1
- canvas.a9s-gl-canvas{height:100%;left:0;position:absolute;top:0;width:100%}canvas.a9s-gl-canvas.hidden{display:none}canvas.a9s-gl-canvas.hover{cursor:pointer!important}svg.svelte-190cqdf.svelte-190cqdf{pointer-events:none}svg.drawing.svelte-190cqdf.svelte-190cqdf{pointer-events:all}svg.svelte-190cqdf .svelte-190cqdf{pointer-events:all}text.svelte-1rehw2p{fill:#fff;font-family:Arial,Helvetica,sans-serif;font-weight:600}rect.svelte-1rehw2p{stroke-width:1.2;vector-effect:non-scaling-stroke}polygon.svelte-fgq4n0{stroke-width:1.2;vector-effect:non-scaling-stroke}rect.svelte-gze948{stroke-width:1.2;vector-effect:non-scaling-stroke}svg.svelte-1krwc4m{position:absolute;top:0;left:0;width:100%;height:100%;outline:none;pointer-events:none}.a9s-touch-halo.svelte-1sgkh33{fill:transparent;stroke-width:0}.a9s-touch-halo.touched.svelte-1sgkh33{fill:#ffffff40}.a9s-annotationlayer{box-sizing:border-box;height:100%;left:0;outline:none;position:absolute;top:0;touch-action:none;width:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.a9s-annotationlayer.hidden{display:none}.a9s-annotationlayer ellipse,.a9s-annotationlayer polygon,.a9s-annotationlayer rect{fill:transparent;shape-rendering:geometricPrecision;vector-effect:non-scaling-stroke}.a9s-edge-handle{fill:transparent;stroke:transparent;stroke-width:6px}.a9s-shape-handle,.a9s-handle{cursor:move}.a9s-edge-handle-top{cursor:n-resize}.a9s-edge-handle-right{cursor:e-resize}.a9s-edge-handle-bottom{cursor:s-resize}.a9s-edge-handle-left{cursor:w-resize}.a9s-handle.a9s-corner-handle-topleft{cursor:nw-resize}.a9s-handle.a9s-corner-handle-topright{cursor:ne-resize}.a9s-handle.a9s-corner-handle-bottomright{cursor:se-resize}.a9s-handle.a9s-corner-handle-bottomleft{cursor:sw-resize}.a9s-annotationlayer .a9s-outer,div[data-theme=dark] .a9s-annotationlayer .a9s-outer{display:none}.a9s-annotationlayer .a9s-inner,div[data-theme=dark] .a9s-annotationlayer .a9s-inner{fill:#0000001f;stroke:#000;stroke-width:1px}rect.a9s-handle,div[data-theme=dark] rect.a9s-handle{fill:#000;rx:2px}rect.a9s-close-polygon-handle,div[data-theme=dark] rect.a9s-close-polygon-handle{fill:#000;rx:1px}.a9s-annotationlayer .a9s-outer,div[data-theme=light] .a9s-annotationlayer .a9s-outer{display:block;stroke:#00000040;stroke-width:3.5px}.a9s-annotationlayer .a9s-inner,div[data-theme=light] .a9s-annotationlayer .a9s-inner{fill:#ffffff26;stroke:#fff;stroke-width:1.5px}rect.a9s-handle,div[data-theme=light] rect.a9s-handle{fill:#fff;rx:1px;stroke:#00000073;stroke-width:1px}rect.a9s-close-polygon-handle,div[data-theme=light] rect.a9s-close-polygon-handle{fill:#fff;rx:1px;stroke:#00000073;stroke-width:1px}
1
+ canvas.a9s-gl-canvas{height:100%;left:0;position:absolute;top:0;width:100%}canvas.a9s-gl-canvas.hidden{display:none}canvas.a9s-gl-canvas.hover{cursor:pointer!important}svg.svelte-190cqdf.svelte-190cqdf{pointer-events:none}svg.drawing.svelte-190cqdf.svelte-190cqdf{pointer-events:all}svg.svelte-190cqdf .svelte-190cqdf{pointer-events:all}text.svelte-1rehw2p{fill:#fff;font-family:Arial,Helvetica,sans-serif;font-weight:600}rect.svelte-1rehw2p{stroke-width:1.2;vector-effect:non-scaling-stroke}polygon.svelte-fgq4n0{stroke-width:1.2;vector-effect:non-scaling-stroke}rect.svelte-gze948{stroke-width:1.2;vector-effect:non-scaling-stroke}svg.svelte-1krwc4m{position:absolute;top:0;left:0;width:100%;height:100%;outline:none;pointer-events:none}.a9s-touch-halo.svelte-1sgkh33{fill:transparent;stroke-width:0}.a9s-touch-halo.touched.svelte-1sgkh33{fill:#ffffff40}.a9s-annotationlayer{box-sizing:border-box;height:100%;left:0;outline:none;position:absolute;top:0;touch-action:none;width:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.a9s-annotationlayer.hidden{display:none}.a9s-annotationlayer .a9s-annotation{cursor:pointer}.a9s-annotationlayer ellipse,.a9s-annotationlayer polygon,.a9s-annotationlayer rect{fill:transparent;shape-rendering:geometricPrecision;vector-effect:non-scaling-stroke}.a9s-edge-handle{fill:transparent;stroke:transparent;stroke-width:6px}.a9s-shape-handle,.a9s-handle{cursor:move}.a9s-edge-handle-top{cursor:n-resize}.a9s-edge-handle-right{cursor:e-resize}.a9s-edge-handle-bottom{cursor:s-resize}.a9s-edge-handle-left{cursor:w-resize}.a9s-handle.a9s-corner-handle-topleft{cursor:nw-resize}.a9s-handle.a9s-corner-handle-topright{cursor:ne-resize}.a9s-handle.a9s-corner-handle-bottomright{cursor:se-resize}.a9s-handle.a9s-corner-handle-bottomleft{cursor:sw-resize}.a9s-annotationlayer .a9s-outer,div[data-theme=dark] .a9s-annotationlayer .a9s-outer{display:none}.a9s-annotationlayer .a9s-inner,div[data-theme=dark] .a9s-annotationlayer .a9s-inner{fill:#0000001f;stroke:#000;stroke-width:1px}rect.a9s-handle,div[data-theme=dark] rect.a9s-handle{fill:#000;rx:2px}rect.a9s-close-polygon-handle,div[data-theme=dark] rect.a9s-close-polygon-handle{fill:#000;rx:1px}.a9s-annotationlayer .a9s-outer,div[data-theme=light] .a9s-annotationlayer .a9s-outer{display:block;stroke:#00000040;stroke-width:3.5px}.a9s-annotationlayer .a9s-inner,div[data-theme=light] .a9s-annotationlayer .a9s-inner{fill:#ffffff26;stroke:#fff;stroke-width:1.5px}rect.a9s-handle,div[data-theme=light] rect.a9s-handle{fill:#fff;rx:1px;stroke:#00000073;stroke-width:1px}rect.a9s-close-polygon-handle,div[data-theme=light] rect.a9s-close-polygon-handle{fill:#fff;rx:1px;stroke:#00000073;stroke-width:1px}
@@ -1,15 +1,15 @@
1
1
  import { j as E } from "./annotorious-react.es11.js";
2
- import { createContext as I, forwardRef as O, useState as b, useImperativeHandle as R, useEffect as V, useContext as a } from "react";
3
- import { onUserSelect as H } from "@annotorious/core";
2
+ import { onUserSelect as I } from "@annotorious/core";
4
3
  import { useDebounce as _ } from "./annotorious-react.es12.js";
5
- const c = I({
4
+ import { createContext as O, forwardRef as R, useState as b, useImperativeHandle as H, useEffect as V, useContext as a } from "react";
5
+ const c = O({
6
6
  anno: void 0,
7
7
  setAnno: void 0,
8
8
  annotations: [],
9
9
  selection: { selected: [] }
10
- }), K = O((t, o) => {
10
+ }), K = R((t, o) => {
11
11
  const [n, i] = b(null), [u, s] = b([]), [d, r] = b({ selected: [] });
12
- return R(o, () => n), V(() => {
12
+ return H(o, () => n), V(() => {
13
13
  if (n) {
14
14
  const { selection: m, store: e } = n.state;
15
15
  e.all().length > 0 && s(e.all());
@@ -66,7 +66,7 @@ const c = I({
66
66
  }, []), i;
67
67
  }, N = (t, o) => {
68
68
  const n = y(t);
69
- return n ? H(n, o) : void 0;
69
+ return n ? I(n, o) : void 0;
70
70
  }, Q = () => {
71
71
  const { selection: t } = a(c);
72
72
  return t;
@@ -1 +1 @@
1
- {"version":3,"file":"annotorious-react.es2.js","sources":["../src/Annotorious.tsx"],"sourcesContent":["import { createContext, forwardRef, type ReactNode, useContext, useEffect, useImperativeHandle, useState } from 'react';\nimport type {\n Annotation,\n Annotator,\n Selection as CoreSelection,\n Store,\n StoreChangeEvent,\n User\n} from '@annotorious/annotorious';\nimport {\n onUserSelect,\n type StoreObserveOptions,\n type UserSelectActionExpression\n} from '@annotorious/core';\n\nimport { useDebounce } from './useDebounce';\n\ninterface Selection<T extends Annotation = Annotation> extends Omit<CoreSelection, 'selected'> {\n\n selected: { annotation: T, editable?: boolean }[];\n\n}\n\nexport interface AnnotoriousContextState {\n\n anno: Annotator;\n\n setAnno(anno: Annotator<Annotation, unknown>): void;\n\n annotations: Annotation[];\n\n selection: Selection;\n\n}\n\nexport const AnnotoriousContext = createContext({ \n\n anno: undefined, \n\n setAnno: undefined, \n\n annotations: [], \n\n selection: { selected: [] }\n\n});\n\nexport const Annotorious = forwardRef<Annotator, { children: ReactNode }>((props: { children: ReactNode }, ref) => {\n\n const [anno, setAnno] = useState<Annotator>(null);\n\n const [annotations, setAnnotations] = useState<Annotation[]>([]);\n\n const [selection, setSelection] = useState<Selection>({ selected: [] });\n\n useImperativeHandle(ref, () => anno);\n\n useEffect(() => {\n if (anno) {\n const { selection, store } = anno.state;\n\n // Components below <Annotorious /> may have\n // loaded annotations into the store already! \n if (store.all().length > 0)\n setAnnotations(store.all());\n\n // Keeps annotations in sync with a React state,\n // so clients can render components the usual React way.\n const onStoreChange = () => setAnnotations(() => store.all());\n\n store.observe(onStoreChange);\n\n // Keep selection in sync with a react state, and resolve them\n // from IDs to annotations automatically, for convenience\n let selectionStoreObserver: (event: StoreChangeEvent<Annotation>) => void;\n\n const unsubscribeSelection = selection.subscribe(({ selected, ...rest }) => {\n if (selectionStoreObserver) \n store.unobserve(selectionStoreObserver);\n\n const resolved = (selected || [])\n .map(({ id, editable }) => ({ annotation: store.getAnnotation(id), editable }));\n\n setSelection({ selected: resolved, ...rest });\n\n selectionStoreObserver = event => {\n const { updated } = event.changes;\n\n setSelection((selection) => ({\n ...selection,\n selected: selection.selected.map(({ annotation, editable }) => {\n const next = updated.find(u => u.oldValue.id === annotation.id);\n return next ? { annotation: next.newValue, editable } : { annotation, editable };\n })\n }));\n }\n\n store.observe(selectionStoreObserver, { annotations: selected.map(({ id }) => id) });\n });\n\n return () => {\n store.unobserve(onStoreChange);\n unsubscribeSelection();\n }\n }\n }, [anno]);\n\n return (\n <AnnotoriousContext.Provider value={{ \n anno, \n setAnno,\n annotations, \n selection \n }}>\n {props.children}\n </AnnotoriousContext.Provider>\n )\n\n});\n\nexport const useAnnotator = <T extends unknown = Annotator<any, unknown>>() => {\n const { anno } = useContext(AnnotoriousContext);\n return anno as T;\n}\n\nexport const useAnnotationStore = <T extends unknown = Store<Annotation>>() => {\n const { anno } = useContext(AnnotoriousContext);\n return anno?.state.store as T | undefined;\n}\n\nconst _useAnnotations = <T extends Annotation>() => {\n const { annotations } = useContext(AnnotoriousContext);\n return annotations as T[];\n}\n\nconst _useAnnotationsDebounced = <T extends Annotation>(debounce: number) => {\n const { annotations } = useContext(AnnotoriousContext);\n return useDebounce(annotations, debounce) as T[];\n}\n\nexport const useAnnotations = <T extends Annotation>(debounce?: number) =>\n debounce ? _useAnnotationsDebounced<T>(debounce) : _useAnnotations<T>();\n\nexport const useAnnotation = <T extends Annotation>(id: string, options?: Omit<StoreObserveOptions, 'annotations'>) => {\n const store = useAnnotationStore<Store<T>>();\n\n const [annotation, setAnnotation] = useState<T | undefined>(\n store?.getAnnotation(id)\n );\n\n useEffect(() => {\n if (!store) return;\n\n const handleChange = (event: StoreChangeEvent<T>) => {\n const updated = event.changes.updated[0];\n if (updated) {\n setAnnotation(updated.newValue);\n }\n };\n\n store.observe(handleChange, { ...options, annotations: id });\n return () => store.unobserve(handleChange);\n }, []);\n\n return annotation;\n}\n\nexport const useAnnotationSelectAction = <T extends Annotation>(id: string, action: UserSelectActionExpression<T>) => {\n const annotation = useAnnotation(id);\n return annotation ? onUserSelect(annotation, action) : undefined;\n}\n\nexport const useSelection = <T extends Annotation>() => {\n const { selection } = useContext(AnnotoriousContext);\n return selection as Selection<T>;\n}\n\nexport const useAnnotatorUser = (): User => {\n const { anno } = useContext(AnnotoriousContext);\n return anno?.getUser();\n}\n\nconst _useViewportState = <T extends Annotation>() => {\n const { anno } = useContext(AnnotoriousContext);\n\n const [inViewport, setInViewport] = useState<T[]>([]);\n\n useEffect(() => {\n if (anno) {\n const { store, viewport } = anno.state;\n\n if (!viewport)\n return;\n\n // Keep viewport annotations in sync with a react state, and resolve them\n // from IDs to annotations automatically, for convenience\n let viewportStoreObserver: (event: StoreChangeEvent<T>) => void;\n\n const unsubscribeViewport = viewport.subscribe(ids => {\n if (viewportStoreObserver) \n store.unobserve(viewportStoreObserver);\n\n const resolved = ids.map(id => store.getAnnotation(id)) as T[];\n setInViewport(resolved);\n\n viewportStoreObserver = event => {\n const { updated } = event.changes;\n\n setInViewport(annotations => annotations.map(annotation => {\n const next = updated.find(u => u.oldValue.id === annotation.id);\n return next ? next.newValue : annotation;\n }));\n }\n\n store.observe(viewportStoreObserver, { annotations: ids });\n });\n\n return () => {\n unsubscribeViewport();\n }\n }\n }, [anno]);\n\n return inViewport;\n}\n\nconst _useViewportStateDebounced = <T extends Annotation>(debounce: number) => {\n const inViewport = _useViewportState();\n return useDebounce(inViewport, debounce) as T[];\n}\n\nexport const useViewportState = <T extends Annotation>(debounce?: number) =>\n debounce ? _useViewportStateDebounced<T>(debounce) : _useViewportState<T>();\n"],"names":["AnnotoriousContext","createContext","Annotorious","forwardRef","props","ref","anno","setAnno","useState","annotations","setAnnotations","selection","setSelection","useImperativeHandle","useEffect","store","onStoreChange","selectionStoreObserver","unsubscribeSelection","selected","rest","resolved","id","editable","event","updated","annotation","next","u","jsx","useAnnotator","useContext","useAnnotationStore","_useAnnotations","_useAnnotationsDebounced","debounce","useDebounce","useAnnotations","useAnnotation","options","setAnnotation","handleChange","useAnnotationSelectAction","action","onUserSelect","useSelection","useAnnotatorUser","_useViewportState","inViewport","setInViewport","viewport","viewportStoreObserver","unsubscribeViewport","ids","_useViewportStateDebounced","useViewportState"],"mappings":"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"}
1
+ {"version":3,"file":"annotorious-react.es2.js","sources":["../src/Annotorious.tsx"],"sourcesContent":["import { onUserSelect } from '@annotorious/core';\nimport type { StoreObserveOptions, UserSelectActionExpression} from '@annotorious/core';\nimport { useDebounce } from './useDebounce';\nimport { \n createContext, \n forwardRef, \n type ReactNode, \n useContext, \n useEffect, \n useImperativeHandle, \n useState \n} from 'react';\nimport type {\n Annotation,\n Annotator,\n Selection as CoreSelection,\n Store,\n StoreChangeEvent,\n User\n} from '@annotorious/annotorious';\n\ninterface Selection<T extends Annotation = Annotation> extends Omit<CoreSelection, 'selected'> {\n\n selected: { annotation: T, editable?: boolean }[];\n\n}\n\nexport const AnnotoriousContext = createContext({ \n\n anno: undefined, \n\n setAnno: undefined, \n\n annotations: [], \n\n selection: { selected: [] }\n\n});\n\nexport const Annotorious = forwardRef<Annotator, { children: ReactNode }>((props: { children: ReactNode }, ref) => {\n\n const [anno, setAnno] = useState<Annotator>(null);\n\n const [annotations, setAnnotations] = useState<Annotation[]>([]);\n\n const [selection, setSelection] = useState<Selection>({ selected: [] });\n\n useImperativeHandle(ref, () => anno);\n\n useEffect(() => {\n if (anno) {\n const { selection, store } = anno.state;\n\n // Components below <Annotorious /> may have\n // loaded annotations into the store already! \n if (store.all().length > 0)\n setAnnotations(store.all());\n\n // Keeps annotations in sync with a React state,\n // so clients can render components the usual React way.\n const onStoreChange = () => setAnnotations(() => store.all());\n\n store.observe(onStoreChange);\n\n // Keep selection in sync with a react state, and resolve them\n // from IDs to annotations automatically, for convenience\n let selectionStoreObserver: (event: StoreChangeEvent<Annotation>) => void;\n\n const unsubscribeSelection = selection.subscribe(({ selected, ...rest }) => {\n if (selectionStoreObserver) \n store.unobserve(selectionStoreObserver);\n\n const resolved = (selected || [])\n .map(({ id, editable }) => ({ annotation: store.getAnnotation(id), editable }));\n\n setSelection({ selected: resolved, ...rest });\n\n selectionStoreObserver = event => {\n const { updated } = event.changes;\n\n setSelection((selection) => ({\n ...selection,\n selected: selection.selected.map(({ annotation, editable }) => {\n const next = updated.find(u => u.oldValue.id === annotation.id);\n return next ? { annotation: next.newValue, editable } : { annotation, editable };\n })\n }));\n }\n\n store.observe(selectionStoreObserver, { annotations: selected.map(({ id }) => id) });\n });\n\n return () => {\n store.unobserve(onStoreChange);\n unsubscribeSelection();\n }\n }\n }, [anno]);\n\n return (\n <AnnotoriousContext.Provider value={{ \n anno, \n setAnno,\n annotations, \n selection \n }}>\n {props.children}\n </AnnotoriousContext.Provider>\n )\n\n});\n\nexport const useAnnotator = <T extends unknown = Annotator<any, unknown>>() => {\n const { anno } = useContext(AnnotoriousContext);\n return anno as T;\n}\n\nexport const useAnnotationStore = <T extends unknown = Store<Annotation>>() => {\n const { anno } = useContext(AnnotoriousContext);\n return anno?.state.store as T | undefined;\n}\n\nconst _useAnnotations = <T extends Annotation>() => {\n const { annotations } = useContext(AnnotoriousContext);\n return annotations as T[];\n}\n\nconst _useAnnotationsDebounced = <T extends Annotation>(debounce: number) => {\n const { annotations } = useContext(AnnotoriousContext);\n return useDebounce(annotations, debounce) as T[];\n}\n\nexport const useAnnotations = <T extends Annotation>(debounce?: number) =>\n debounce ? _useAnnotationsDebounced<T>(debounce) : _useAnnotations<T>();\n\nexport const useAnnotation = <T extends Annotation>(id: string, options?: Omit<StoreObserveOptions, 'annotations'>) => {\n const store = useAnnotationStore<Store<T>>();\n\n const [annotation, setAnnotation] = useState<T | undefined>(\n store?.getAnnotation(id)\n );\n\n useEffect(() => {\n if (!store) return;\n\n const handleChange = (event: StoreChangeEvent<T>) => {\n const updated = event.changes.updated[0];\n if (updated) {\n setAnnotation(updated.newValue);\n }\n };\n\n store.observe(handleChange, { ...options, annotations: id });\n return () => store.unobserve(handleChange);\n }, []);\n\n return annotation;\n}\n\nexport const useAnnotationSelectAction = <T extends Annotation>(id: string, action: UserSelectActionExpression<T>) => {\n const annotation = useAnnotation(id);\n return annotation ? onUserSelect(annotation, action) : undefined;\n}\n\nexport const useSelection = <T extends Annotation>() => {\n const { selection } = useContext(AnnotoriousContext);\n return selection as Selection<T>;\n}\n\nexport const useAnnotatorUser = (): User => {\n const { anno } = useContext(AnnotoriousContext);\n return anno?.getUser();\n}\n\nconst _useViewportState = <T extends Annotation>() => {\n const { anno } = useContext(AnnotoriousContext);\n\n const [inViewport, setInViewport] = useState<T[]>([]);\n\n useEffect(() => {\n if (anno) {\n const { store, viewport } = anno.state;\n\n if (!viewport)\n return;\n\n // Keep viewport annotations in sync with a react state, and resolve them\n // from IDs to annotations automatically, for convenience\n let viewportStoreObserver: (event: StoreChangeEvent<T>) => void;\n\n const unsubscribeViewport = viewport.subscribe(ids => {\n if (viewportStoreObserver) \n store.unobserve(viewportStoreObserver);\n\n const resolved = ids.map(id => store.getAnnotation(id)) as T[];\n setInViewport(resolved);\n\n viewportStoreObserver = event => {\n const { updated } = event.changes;\n\n setInViewport(annotations => annotations.map(annotation => {\n const next = updated.find(u => u.oldValue.id === annotation.id);\n return next ? next.newValue : annotation;\n }));\n }\n\n store.observe(viewportStoreObserver, { annotations: ids });\n });\n\n return () => {\n unsubscribeViewport();\n }\n }\n }, [anno]);\n\n return inViewport;\n}\n\nconst _useViewportStateDebounced = <T extends Annotation>(debounce: number) => {\n const inViewport = _useViewportState();\n return useDebounce(inViewport, debounce) as T[];\n}\n\nexport const useViewportState = <T extends Annotation>(debounce?: number) =>\n debounce ? _useViewportStateDebounced<T>(debounce) : _useViewportState<T>();\n"],"names":["AnnotoriousContext","createContext","Annotorious","forwardRef","props","ref","anno","setAnno","useState","annotations","setAnnotations","selection","setSelection","useImperativeHandle","useEffect","store","onStoreChange","selectionStoreObserver","unsubscribeSelection","selected","rest","resolved","id","editable","event","updated","annotation","next","u","jsx","useAnnotator","useContext","useAnnotationStore","_useAnnotations","_useAnnotationsDebounced","debounce","useDebounce","useAnnotations","useAnnotation","options","setAnnotation","handleChange","useAnnotationSelectAction","action","onUserSelect","useSelection","useAnnotatorUser","_useViewportState","inViewport","setInViewport","viewport","viewportStoreObserver","unsubscribeViewport","ids","_useViewportStateDebounced","useViewportState"],"mappings":";;;;AA2BO,MAAMA,IAAqBC,EAAc;AAAA,EAE9C,MAAM;AAAA,EAEN,SAAS;AAAA,EAET,aAAa,CAAC;AAAA,EAEd,WAAW,EAAE,UAAU,GAAG;AAE5B,CAAC,GAEYC,IAAcC,EAA+C,CAACC,GAAgCC,MAAQ;AAEjH,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAAoB,IAAI,GAE1C,CAACC,GAAaC,CAAc,IAAIF,EAAuB,CAAE,CAAA,GAEzD,CAACG,GAAWC,CAAY,IAAIJ,EAAoB,EAAE,UAAU,CAAC,EAAA,CAAG;AAElD,SAAAK,EAAAR,GAAK,MAAMC,CAAI,GAEnCQ,EAAU,MAAM;AACd,QAAIR,GAAM;AACR,YAAM,EAAE,WAAAK,GAAW,OAAAI,EAAA,IAAUT,EAAK;AAI9B,MAAAS,EAAM,MAAM,SAAS,KACRL,EAAAK,EAAM,KAAK;AAI5B,YAAMC,IAAgB,MAAMN,EAAe,MAAMK,EAAM,IAAK,CAAA;AAE5D,MAAAA,EAAM,QAAQC,CAAa;AAIvB,UAAAC;AAEE,YAAAC,IAAuBP,EAAU,UAAU,CAAC,EAAE,UAAAQ,GAAU,GAAGC,QAAW;AACtE,QAAAH,KACFF,EAAM,UAAUE,CAAsB;AAExC,cAAMI,KAAYF,KAAY,CAC3B,GAAA,IAAI,CAAC,EAAE,IAAAG,GAAI,UAAAC,EAAS,OAAO,EAAE,YAAYR,EAAM,cAAcO,CAAE,GAAG,UAAAC,EAAW,EAAA;AAEhF,QAAAX,EAAa,EAAE,UAAUS,GAAU,GAAGD,EAAM,CAAA,GAE5CH,IAAyB,CAASO,MAAA;AAC1B,gBAAA,EAAE,SAAAC,EAAQ,IAAID,EAAM;AAE1B,UAAAZ,EAAa,CAACD,OAAe;AAAA,YAC3B,GAAGA;AAAAA,YACH,UAAUA,EAAU,SAAS,IAAI,CAAC,EAAE,YAAAe,GAAY,UAAAH,QAAe;AACvD,oBAAAI,IAAOF,EAAQ,KAAK,CAAAG,MAAKA,EAAE,SAAS,OAAOF,EAAW,EAAE;AACvD,qBAAAC,IAAO,EAAE,YAAYA,EAAK,UAAU,UAAAJ,MAAa,EAAE,YAAAG,GAAY,UAAAH;YAAS,CAChF;AAAA,UACD,EAAA;AAAA,QAAA,GAGJR,EAAM,QAAQE,GAAwB,EAAE,aAAaE,EAAS,IAAI,CAAC,EAAE,IAAAG,EAAG,MAAMA,CAAE,EAAG,CAAA;AAAA,MAAA,CACpF;AAED,aAAO,MAAM;AACX,QAAAP,EAAM,UAAUC,CAAa,GACRE;MAAA;AAAA,IAEzB;AAAA,EAAA,GACC,CAACZ,CAAI,CAAC,GAGNuB,gBAAAA,MAAA7B,EAAmB,UAAnB,EAA4B,OAAO;AAAA,IAClC,MAAAM;AAAA,IACA,SAAAC;AAAA,IACA,aAAAE;AAAA,IACA,WAAAE;AAAA,EACF,GACI,YAAM,SACV,CAAA;AAGJ,CAAC,GAEYmB,IAAe,MAAmD;AAC7E,QAAM,EAAE,MAAAxB,EAAA,IAASyB,EAAW/B,CAAkB;AACvC,SAAAM;AACT,GAEa0B,IAAqB,MAA6C;AAC7E,QAAM,EAAE,MAAA1B,EAAA,IAASyB,EAAW/B,CAAkB;AAC9C,SAAOM,KAAA,gBAAAA,EAAM,MAAM;AACrB,GAEM2B,IAAkB,MAA4B;AAClD,QAAM,EAAE,aAAAxB,EAAA,IAAgBsB,EAAW/B,CAAkB;AAC9C,SAAAS;AACT,GAEMyB,IAA2B,CAAuBC,MAAqB;AAC3E,QAAM,EAAE,aAAA1B,EAAA,IAAgBsB,EAAW/B,CAAkB;AAC9C,SAAAoC,EAAY3B,GAAa0B,CAAQ;AAC1C,GAEaE,IAAiB,CAAuBF,MACnDA,IAAWD,EAA4BC,CAAQ,IAAIF,EAAmB,GAE3DK,IAAgB,CAAuBhB,GAAYiB,MAAuD;AACrH,QAAMxB,IAAQiB,KAER,CAACN,GAAYc,CAAa,IAAIhC;AAAA,IAClCO,KAAA,gBAAAA,EAAO,cAAcO;AAAA,EAAE;AAGzB,SAAAR,EAAU,MAAM;AACd,QAAI,CAACC,EAAO;AAEN,UAAA0B,IAAe,CAACjB,MAA+B;AACnD,YAAMC,IAAUD,EAAM,QAAQ,QAAQ,CAAC;AACvC,MAAIC,KACFe,EAAcf,EAAQ,QAAQ;AAAA,IAChC;AAGF,WAAAV,EAAM,QAAQ0B,GAAc,EAAE,GAAGF,GAAS,aAAajB,GAAI,GACpD,MAAMP,EAAM,UAAU0B,CAAY;AAAA,EAC3C,GAAG,CAAE,CAAA,GAEEf;AACT,GAEagB,IAA4B,CAAuBpB,GAAYqB,MAA0C;AAC9G,QAAAjB,IAAaY,EAAchB,CAAE;AACnC,SAAOI,IAAakB,EAAalB,GAAYiB,CAAM,IAAI;AACzD,GAEaE,IAAe,MAA4B;AACtD,QAAM,EAAE,WAAAlC,EAAA,IAAcoB,EAAW/B,CAAkB;AAC5C,SAAAW;AACT,GAEamC,IAAmB,MAAY;AAC1C,QAAM,EAAE,MAAAxC,EAAA,IAASyB,EAAW/B,CAAkB;AAC9C,SAAOM,KAAA,gBAAAA,EAAM;AACf,GAEMyC,IAAoB,MAA4B;AACpD,QAAM,EAAE,MAAAzC,EAAA,IAASyB,EAAW/B,CAAkB,GAExC,CAACgD,GAAYC,CAAa,IAAIzC,EAAc,CAAE,CAAA;AAEpD,SAAAM,EAAU,MAAM;AACd,QAAIR,GAAM;AACR,YAAM,EAAE,OAAAS,GAAO,UAAAmC,MAAa5C,EAAK;AAEjC,UAAI,CAAC4C;AACH;AAIE,UAAAC;AAEE,YAAAC,IAAsBF,EAAS,UAAU,CAAOG,MAAA;AAChD,QAAAF,KACFpC,EAAM,UAAUoC,CAAqB;AAEvC,cAAM9B,IAAWgC,EAAI,IAAI,OAAMtC,EAAM,cAAcO,CAAE,CAAC;AACtD,QAAA2B,EAAc5B,CAAQ,GAEtB8B,IAAwB,CAAS3B,MAAA;AACzB,gBAAA,EAAE,SAAAC,EAAQ,IAAID,EAAM;AAEZ,UAAAyB,EAAA,CAAAxC,MAAeA,EAAY,IAAI,CAAciB,MAAA;AACnD,kBAAAC,IAAOF,EAAQ,KAAK,CAAAG,MAAKA,EAAE,SAAS,OAAOF,EAAW,EAAE;AACvD,mBAAAC,IAAOA,EAAK,WAAWD;AAAA,UAC/B,CAAA,CAAC;AAAA,QAAA,GAGJX,EAAM,QAAQoC,GAAuB,EAAE,aAAaE,EAAK,CAAA;AAAA,MAAA,CAC1D;AAED,aAAO,MAAM;AACS,QAAAD;MAAA;AAAA,IAExB;AAAA,EAAA,GACC,CAAC9C,CAAI,CAAC,GAEF0C;AACT,GAEMM,IAA8B,CAAuBnB,MAAqB;AAC9E,QAAMa,IAAaD;AACZ,SAAAX,EAAYY,GAAYb,CAAQ;AACzC,GAEaoB,IAAoB,CAAuBpB,MACtDA,IAAWmB,EAA8BnB,CAAQ,IAAIY,EAAqB;"}
@@ -1,15 +1,15 @@
1
- import { useEffect as i } from "react";
2
- import { useAnnotator as s } from "./annotorious-react.es2.js";
3
- const m = (t) => {
4
- const { plugin: r, opts: u } = t, n = s();
5
- return i(() => {
6
- if (!n) return;
7
- const o = r(n, u);
8
- return () => {
9
- o && "unmount" in o && o.unmount();
1
+ import { forwardRef as s, useEffect as c } from "react";
2
+ import { useAnnotator as e } from "./annotorious-react.es2.js";
3
+ const m = s((i, n) => {
4
+ const { plugin: u, opts: r } = i, t = e();
5
+ return c(() => {
6
+ if (!t) return;
7
+ const o = u(t, r);
8
+ return n && (n.current = o), () => {
9
+ o && "unmount" in o && o.unmount(), n && (n.current = null);
10
10
  };
11
- }, [n]), null;
12
- };
11
+ }, [t, u, r, n]), null;
12
+ });
13
13
  export {
14
14
  m as AnnotoriousPlugin
15
15
  };
@@ -1 +1 @@
1
- {"version":3,"file":"annotorious-react.es3.js","sources":["../src/AnnotoriousPlugin.tsx"],"sourcesContent":["import { useEffect } from 'react';\nimport { Annotator } from '@annotorious/annotorious';\nimport { useAnnotator } from './Annotorious';\n\nexport type AnnotatorPlugin<T extends unknown = Annotator<any, unknown>> =\n (anno: T, opts?: Object) => ({ unmount?: () => void }) | void;\n\nexport interface AnnotoriousPluginProps<T extends unknown = Annotator<any, unknown>> {\n\n plugin: AnnotatorPlugin<T>;\n\n opts?: Object;\n\n}\n\nexport const AnnotoriousPlugin = <T extends unknown = Annotator<any, unknown>>(props: AnnotoriousPluginProps<T>) => {\n const { plugin, opts } = props;\n\n const anno = useAnnotator<T>();\n\n useEffect(() => {\n if (!anno) return;\n\n const p = plugin(anno, opts);\n return () => {\n if (p && 'unmount' in p)\n p.unmount();\n };\n }, [anno]);\n\n return null;\n\n};\n"],"names":["AnnotoriousPlugin","props","plugin","opts","anno","useAnnotator","useEffect","p"],"mappings":";;AAea,MAAAA,IAAoB,CAA8CC,MAAqC;AAC5G,QAAA,EAAE,QAAAC,GAAQ,MAAAC,EAAS,IAAAF,GAEnBG,IAAOC;AAEb,SAAAC,EAAU,MAAM;AACd,QAAI,CAACF,EAAM;AAEL,UAAAG,IAAIL,EAAOE,GAAMD,CAAI;AAC3B,WAAO,MAAM;AACX,MAAII,KAAK,aAAaA,KACpBA,EAAE,QAAQ;AAAA,IAAA;AAAA,EACd,GACC,CAACH,CAAI,CAAC,GAEF;AAET;"}
1
+ {"version":3,"file":"annotorious-react.es3.js","sources":["../src/AnnotoriousPlugin.tsx"],"sourcesContent":["import { forwardRef, useEffect } from 'react';\nimport { Annotator } from '@annotorious/annotorious';\nimport { useAnnotator } from './Annotorious';\n\nexport type AnnotatorPlugin<T extends unknown = Annotator<any, unknown>> =\n (anno: T, opts?: Object) => ({ unmount?: () => void }) | void;\n\nexport interface AnnotoriousPluginProps<T extends unknown = Annotator<any, unknown>> {\n\n plugin: AnnotatorPlugin<T>;\n\n opts?: Object;\n\n}\n\ntype PluginReturnType<T> = ReturnType<AnnotatorPlugin<T>>;\n\nexport const AnnotoriousPlugin = forwardRef(<T extends unknown = Annotator<any, unknown>>(\n props: AnnotoriousPluginProps<T>,\n ref: React.MutableRefObject<PluginReturnType<T>>\n) => {\n const { plugin, opts } = props;\n\n const anno = useAnnotator<T>();\n\n useEffect(() => {\n if (!anno) return;\n\n const p = plugin(anno, opts);\n\n if (ref)\n ref.current = p;\n\n return () => {\n if (p && 'unmount' in p) {\n p.unmount();\n }\n\n if (ref)\n ref.current = null;\n }\n }, [anno, plugin, opts, ref]);\n\n return null;\n\n});\n"],"names":["AnnotoriousPlugin","forwardRef","props","ref","plugin","opts","anno","useAnnotator","useEffect","p"],"mappings":";;AAiBO,MAAMA,IAAoBC,EAAW,CAC1CC,GACAC,MACG;AACG,QAAA,EAAE,QAAAC,GAAQ,MAAAC,EAAS,IAAAH,GAEnBI,IAAOC;AAEb,SAAAC,EAAU,MAAM;AACd,QAAI,CAACF,EAAM;AAEL,UAAAG,IAAIL,EAAOE,GAAMD,CAAI;AAEvB,WAAAF,MACFA,EAAI,UAAUM,IAET,MAAM;AACP,MAAAA,KAAK,aAAaA,KACpBA,EAAE,QAAQ,GAGRN,MACFA,EAAI,UAAU;AAAA,IAAA;AAAA,KAEjB,CAACG,GAAMF,GAAQC,GAAMF,CAAG,CAAC,GAErB;AAET,CAAC;"}
@@ -1,7 +1,6 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { default as OpenSeadragon } from 'openseadragon';
3
3
  import { AnnotoriousOpts, DrawingStyle, Filter, ImageAnnotation } from '@annotorious/annotorious';
4
-
5
4
  export declare const OpenSeadragonAnnotatorContext: import('react').Context<{
6
5
  viewer: OpenSeadragon.Viewer;
7
6
  setViewer(viewer: OpenSeadragon.Viewer): void;
@@ -1,7 +1,6 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { default as OpenSeadragon } from 'openseadragon';
3
3
  import { AnnotoriousPopupProps } from '../AnnotoriousPopup';
4
-
5
4
  export type OpenSeadragonPopupProps = AnnotoriousPopupProps & {
6
5
  viewer: OpenSeadragon.Viewer;
7
6
  };
@@ -1,5 +1,4 @@
1
1
  import { default as OpenSeadragon } from 'openseadragon';
2
-
3
2
  export interface OpenSeadragonViewerProps {
4
3
  className?: string;
5
4
  options: OpenSeadragon.Options;
@@ -1,5 +1,4 @@
1
1
  import { ImageAnnotation } from '@annotorious/annotorious';
2
2
  import { default as OpenSeadragon } from 'openseadragon';
3
-
4
3
  export declare const setPosition: (viewer: OpenSeadragon.Viewer, annotation: ImageAnnotation, popup: HTMLElement, sideOffset?: number) => void;
5
4
  //# sourceMappingURL=setPosition.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@annotorious/react",
3
- "version": "3.0.0-rc.31",
3
+ "version": "3.0.0-rc.32",
4
4
  "description": "Annotorious React bindings",
5
5
  "author": "Rainer Simon",
6
6
  "license": "BSD-3-Clause",
@@ -24,16 +24,16 @@
24
24
  "./annotorious-react.css": "./dist/annotorious-react.css"
25
25
  },
26
26
  "devDependencies": {
27
- "@types/react": "^18.3.3",
27
+ "@types/react": "^18.3.4",
28
28
  "@types/react-dom": "^18.3.0",
29
29
  "@vitejs/plugin-react": "^4.3.1",
30
- "typescript": "5.5.3",
31
- "vite": "^5.3.5",
32
- "vite-plugin-dts": "^3.9.1",
33
- "vite-tsconfig-paths": "^4.3.2"
30
+ "typescript": "5.5.4",
31
+ "vite": "^5.4.2",
32
+ "vite-plugin-dts": "^4.0.3",
33
+ "vite-tsconfig-paths": "^5.0.1"
34
34
  },
35
35
  "peerDependencies": {
36
- "openseadragon": "^3.0.0 || ^4.0.0",
36
+ "openseadragon": "^3.0.0 || ^4.0.0 || ^5.0.0",
37
37
  "react": "16.8.0 || >=17.x || >=18.x",
38
38
  "react-dom": "16.8.0 || >=17.x || >=18.x"
39
39
  },
@@ -43,9 +43,9 @@
43
43
  }
44
44
  },
45
45
  "dependencies": {
46
- "@annotorious/core": "3.0.0-rc.31",
47
- "@annotorious/annotorious": "3.0.0-rc.31",
48
- "@annotorious/openseadragon": "3.0.0-rc.31",
46
+ "@annotorious/core": "3.0.0-rc.32",
47
+ "@annotorious/annotorious": "3.0.0-rc.32",
48
+ "@annotorious/openseadragon": "3.0.0-rc.32",
49
49
  "@neodrag/react": "^2.0.4"
50
50
  },
51
51
  "sideEffects": false