@soomo/react-text-annotator 3.1.0-staging.13 → 3.1.0-staging.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/TextAnnotatorPopup/TextAnnotatorPopup.d.ts +1 -11
- package/dist/TextAnnotatorPopup/TextAnnotatorPopup.d.ts.map +1 -1
- package/dist/hooks/index.d.ts +2 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/useAnnotationTargetIdling.d.ts +4 -0
- package/dist/hooks/useAnnotationTargetIdling.d.ts.map +1 -0
- package/dist/react-text-annotator.es.js +5 -4
- package/dist/react-text-annotator.es.js.map +1 -1
- package/dist/react-text-annotator.es11.js +483 -78
- package/dist/react-text-annotator.es11.js.map +1 -1
- package/dist/react-text-annotator.es12.js +77 -40
- package/dist/react-text-annotator.es12.js.map +1 -1
- package/dist/react-text-annotator.es13.js +45 -9
- package/dist/react-text-annotator.es13.js.map +1 -1
- package/dist/react-text-annotator.es14.js +45 -10
- package/dist/react-text-annotator.es14.js.map +1 -1
- package/dist/react-text-annotator.es15.js +12 -0
- package/dist/react-text-annotator.es15.js.map +1 -0
- package/dist/react-text-annotator.es17.js +215 -554
- package/dist/react-text-annotator.es17.js.map +1 -1
- package/dist/react-text-annotator.es18.js +585 -2
- package/dist/react-text-annotator.es18.js.map +1 -1
- package/dist/react-text-annotator.es19.js +2 -31
- package/dist/react-text-annotator.es19.js.map +1 -1
- package/dist/react-text-annotator.es2.js +2 -2
- package/dist/react-text-annotator.es20.js +20 -887
- package/dist/react-text-annotator.es20.js.map +1 -1
- package/dist/react-text-annotator.es21.js +893 -109
- package/dist/react-text-annotator.es21.js.map +1 -1
- package/dist/react-text-annotator.es22.js +2 -309
- package/dist/react-text-annotator.es22.js.map +1 -1
- package/dist/react-text-annotator.es23.js +2 -58
- package/dist/react-text-annotator.es23.js.map +1 -1
- package/dist/react-text-annotator.es24.js +113 -19
- package/dist/react-text-annotator.es24.js.map +1 -1
- package/dist/react-text-annotator.es25.js +309 -2
- package/dist/react-text-annotator.es25.js.map +1 -1
- package/dist/react-text-annotator.es26.js +58 -2
- package/dist/react-text-annotator.es26.js.map +1 -1
- package/dist/react-text-annotator.es27.js +17 -124
- package/dist/react-text-annotator.es27.js.map +1 -1
- package/dist/react-text-annotator.es28.js +107 -144
- package/dist/react-text-annotator.es28.js.map +1 -1
- package/dist/react-text-annotator.es29.js +156 -303
- package/dist/react-text-annotator.es29.js.map +1 -1
- package/dist/react-text-annotator.es3.js +2 -2
- package/dist/react-text-annotator.es30.js +308 -146
- package/dist/react-text-annotator.es30.js.map +1 -1
- package/dist/react-text-annotator.es31.js +130 -544
- package/dist/react-text-annotator.es31.js.map +1 -1
- package/dist/react-text-annotator.es32.js +566 -0
- package/dist/react-text-annotator.es32.js.map +1 -0
- package/dist/react-text-annotator.es4.js +2 -2
- package/dist/react-text-annotator.es5.js +28 -24
- package/dist/react-text-annotator.es5.js.map +1 -1
- package/dist/react-text-annotator.es6.js +23 -124
- package/dist/react-text-annotator.es6.js.map +1 -1
- package/dist/react-text-annotator.es7.js +121 -538
- package/dist/react-text-annotator.es7.js.map +1 -1
- package/dist/react-text-annotator.es8.js +545 -10
- package/dist/react-text-annotator.es8.js.map +1 -1
- package/dist/react-text-annotator.es9.js +13 -0
- package/dist/react-text-annotator.es9.js.map +1 -0
- package/package.json +11 -11
- package/dist/react-text-annotator.es10.js +0 -490
- package/dist/react-text-annotator.es10.js.map +0 -1
- package/dist/react-text-annotator.es16.js +0 -249
- package/dist/react-text-annotator.es16.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useCallback, useLayoutEffect, useMemo, useRef, useEffect } from "react";
|
|
2
2
|
import { useAnnotationStore, useSelection, Origin } from "@annotorious/react";
|
|
3
|
-
import { announce as $319e236875307eab$export$a9b970dcc4ae71a9, destroyAnnouncer as $319e236875307eab$export$d8686216b8b81b2f } from "./react-text-annotator.
|
|
4
|
-
import { exhaustiveUniqueRandom } from "./react-text-annotator.
|
|
3
|
+
import { announce as $319e236875307eab$export$a9b970dcc4ae71a9, destroyAnnouncer as $319e236875307eab$export$d8686216b8b81b2f } from "./react-text-annotator.es12.js";
|
|
4
|
+
import { exhaustiveUniqueRandom } from "./react-text-annotator.es13.js";
|
|
5
5
|
const useAnnouncePopupNavigation = (args) => {
|
|
6
6
|
const {
|
|
7
7
|
message = "Press Tab to move to Notes Dialog",
|
|
@@ -1,29 +1,33 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
const el = useRef(null);
|
|
8
|
-
const { className, children, ...opts } = props;
|
|
9
|
-
const { style, filter, user, annotatingEnabled, userSelectAction } = opts;
|
|
10
|
-
const { anno, setAnno } = useContext(AnnotoriousContext);
|
|
1
|
+
import { useAnnotationStore, Origin } from "@annotorious/react";
|
|
2
|
+
import { useState, useEffect } from "react";
|
|
3
|
+
import { Ignore } from "@annotorious/core";
|
|
4
|
+
const useAnnotationTargetIdling = (annotationId, options = { timeout: 500 }) => {
|
|
5
|
+
const store = useAnnotationStore();
|
|
6
|
+
const [isIdling, setIdling] = useState(true);
|
|
11
7
|
useEffect(() => {
|
|
12
|
-
if (!
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
8
|
+
if (!annotationId) return;
|
|
9
|
+
let idlingTimeout;
|
|
10
|
+
const scheduleSetIdling = () => {
|
|
11
|
+
setIdling(false);
|
|
12
|
+
clearTimeout(idlingTimeout);
|
|
13
|
+
idlingTimeout = setTimeout(() => setIdling(true), options.timeout);
|
|
14
|
+
};
|
|
15
|
+
store.observe(
|
|
16
|
+
scheduleSetIdling,
|
|
17
|
+
{
|
|
18
|
+
annotations: annotationId,
|
|
19
|
+
ignore: Ignore.BODY_ONLY,
|
|
20
|
+
origin: Origin.LOCAL
|
|
21
|
+
}
|
|
22
|
+
);
|
|
23
|
+
return () => {
|
|
24
|
+
clearTimeout(idlingTimeout);
|
|
25
|
+
store.unobserve(scheduleSetIdling);
|
|
26
|
+
};
|
|
27
|
+
}, [annotationId]);
|
|
28
|
+
return isIdling;
|
|
25
29
|
};
|
|
26
30
|
export {
|
|
27
|
-
|
|
31
|
+
useAnnotationTargetIdling
|
|
28
32
|
};
|
|
29
33
|
//# sourceMappingURL=react-text-annotator.es5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-text-annotator.es5.js","sources":["../src/
|
|
1
|
+
{"version":3,"file":"react-text-annotator.es5.js","sources":["../src/hooks/useAnnotationTargetIdling.ts"],"sourcesContent":["import { Origin, useAnnotationStore } from '@annotorious/react';\nimport { useEffect, useState } from 'react';\nimport { Ignore } from '@annotorious/core';\n\nexport const useAnnotationTargetIdling = (\n annotationId: string | undefined,\n options: { timeout: number } = { timeout: 500 }\n) => {\n const store = useAnnotationStore();\n\n const [isIdling, setIdling] = useState(true);\n\n useEffect(() => {\n if (!annotationId) return;\n\n let idlingTimeout: ReturnType<typeof setTimeout>;\n\n const scheduleSetIdling = () => {\n setIdling(false);\n\n clearTimeout(idlingTimeout);\n idlingTimeout = setTimeout(() => setIdling(true), options.timeout);\n };\n\n store.observe(\n scheduleSetIdling,\n {\n annotations: annotationId,\n ignore: Ignore.BODY_ONLY,\n origin: Origin.LOCAL\n }\n );\n return () => {\n clearTimeout(idlingTimeout);\n store.unobserve(scheduleSetIdling);\n };\n }, [annotationId]);\n\n return isIdling;\n};\n"],"names":[],"mappings":";;;AAIO,MAAM,4BAA4B,CACvC,cACA,UAA+B,EAAE,SAAS,UACvC;AACH,QAAM,QAAQ;AAEd,QAAM,CAAC,UAAU,SAAS,IAAI,SAAS,IAAI;AAE3C,YAAU,MAAM;AACd,QAAI,CAAC,aAAc;AAEf,QAAA;AAEJ,UAAM,oBAAoB,MAAM;AAC9B,gBAAU,KAAK;AAEf,mBAAa,aAAa;AAC1B,sBAAgB,WAAW,MAAM,UAAU,IAAI,GAAG,QAAQ,OAAO;AAAA,IAAA;AAG7D,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,QACE,aAAa;AAAA,QACb,QAAQ,OAAO;AAAA,QACf,QAAQ,OAAO;AAAA,MACjB;AAAA,IAAA;AAEF,WAAO,MAAM;AACX,mBAAa,aAAa;AAC1B,YAAM,UAAU,iBAAiB;AAAA,IAAA;AAAA,EACnC,GACC,CAAC,YAAY,CAAC;AAEV,SAAA;AACT;"}
|
|
@@ -1,130 +1,29 @@
|
|
|
1
|
-
import { j as jsxRuntimeExports } from "./react-text-annotator.
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { useAnnotator, useSelection } from "@annotorious/react";
|
|
6
|
-
import { isRevived, denormalizeRectWithOffset, toDomRectList } from "@soomo/text-annotator";
|
|
7
|
-
import { useAnnouncePopupNavigation } from "./react-text-annotator.es4.js";
|
|
1
|
+
import { j as jsxRuntimeExports } from "./react-text-annotator.es9.js";
|
|
2
|
+
import { useRef, useContext, useEffect } from "react";
|
|
3
|
+
import { AnnotoriousContext } from "@annotorious/react";
|
|
4
|
+
import { createTextAnnotator } from "@soomo/text-annotator";
|
|
8
5
|
/* empty css */
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
const {
|
|
14
|
-
const r = useAnnotator();
|
|
15
|
-
const { selected, event } = useSelection();
|
|
16
|
-
const annotation = (_a = selected[0]) == null ? void 0 : _a.annotation;
|
|
17
|
-
const [isOpen, setOpen] = useState((selected == null ? void 0 : selected.length) > 0);
|
|
18
|
-
const handleClose = () => r == null ? void 0 : r.cancelSelected();
|
|
19
|
-
const [isFocused, setFocused] = useState(false);
|
|
20
|
-
const handleFocus = useCallback(() => setFocused(true), []);
|
|
21
|
-
const handleBlur = useCallback(() => setFocused(false), []);
|
|
6
|
+
const TextAnnotator = (props) => {
|
|
7
|
+
const el = useRef(null);
|
|
8
|
+
const { className, children, ...opts } = props;
|
|
9
|
+
const { style, filter, user, annotatingEnabled, userSelectAction } = opts;
|
|
10
|
+
const { anno, setAnno } = useContext(AnnotoriousContext);
|
|
22
11
|
useEffect(() => {
|
|
23
|
-
if (!
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
inline(),
|
|
37
|
-
flip(),
|
|
38
|
-
shift({ mainAxis: false, crossAxis: true, padding: 10 })
|
|
39
|
-
],
|
|
40
|
-
whileElementsMounted: autoUpdate
|
|
41
|
-
});
|
|
42
|
-
const dismiss = useDismiss(context);
|
|
43
|
-
const role = useRole(context, { role: "dialog" });
|
|
44
|
-
const { getFloatingProps } = useInteractions([dismiss, role]);
|
|
45
|
-
useEffect(() => {
|
|
46
|
-
const annotationSelector = annotation == null ? void 0 : annotation.target.selector;
|
|
47
|
-
if (!annotationSelector) return;
|
|
48
|
-
setOpen(isRevived(annotationSelector));
|
|
49
|
-
}, [annotation]);
|
|
50
|
-
useEffect(() => {
|
|
51
|
-
if (!r) return;
|
|
52
|
-
if (isOpen && (annotation == null ? void 0 : annotation.id)) {
|
|
53
|
-
refs.setPositionReference({
|
|
54
|
-
getBoundingClientRect: () => {
|
|
55
|
-
const bounds = r.state.store.getAnnotationBounds(annotation.id);
|
|
56
|
-
return bounds ? denormalizeRectWithOffset(bounds, r.element.getBoundingClientRect()) : new DOMRect();
|
|
57
|
-
},
|
|
58
|
-
getClientRects: () => {
|
|
59
|
-
const rects = r.state.store.getAnnotationRects(annotation.id);
|
|
60
|
-
const denormalizedRects = rects.map(
|
|
61
|
-
(rect) => denormalizeRectWithOffset(rect, r.element.getBoundingClientRect())
|
|
62
|
-
);
|
|
63
|
-
return toDomRectList(denormalizedRects);
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
} else {
|
|
67
|
-
refs.setPositionReference(null);
|
|
68
|
-
}
|
|
69
|
-
}, [isOpen, annotation == null ? void 0 : annotation.id, annotation == null ? void 0 : annotation.target, r]);
|
|
70
|
-
useEffect(() => {
|
|
71
|
-
const config = { attributes: true, childList: true, subtree: true };
|
|
72
|
-
const mutationObserver = new MutationObserver(() => update());
|
|
73
|
-
mutationObserver.observe(document.body, config);
|
|
74
|
-
window.document.addEventListener("scroll", update, true);
|
|
75
|
-
return () => {
|
|
76
|
-
mutationObserver.disconnect();
|
|
77
|
-
window.document.removeEventListener("scroll", update, true);
|
|
78
|
-
};
|
|
79
|
-
}, [update]);
|
|
80
|
-
const initialFocus = useMemo(() => {
|
|
81
|
-
return (event == null ? void 0 : event.type) === "keyup" || (event == null ? void 0 : event.type) === "contextmenu" || isMobile() ? -1 : 0;
|
|
82
|
-
}, [event]);
|
|
83
|
-
useAnnouncePopupNavigation({
|
|
84
|
-
disabled: isFocused,
|
|
85
|
-
floatingOpen: isOpen,
|
|
86
|
-
message: ariaNavigationMessage
|
|
87
|
-
});
|
|
88
|
-
return isOpen && annotation ? /* @__PURE__ */ jsxRuntimeExports.jsx(FloatingPortal, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
89
|
-
FloatingFocusManager,
|
|
90
|
-
{
|
|
91
|
-
context,
|
|
92
|
-
modal: false,
|
|
93
|
-
closeOnFocusOut: true,
|
|
94
|
-
returnFocus: false,
|
|
95
|
-
initialFocus,
|
|
96
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
97
|
-
"div",
|
|
98
|
-
{
|
|
99
|
-
className: "a9s-popup r6o-popup annotation-popup r6o-text-popup not-annotatable",
|
|
100
|
-
ref: refs.setFloating,
|
|
101
|
-
style: floatingStyles,
|
|
102
|
-
...getFloatingProps({
|
|
103
|
-
onFocus: handleFocus,
|
|
104
|
-
onBlur: handleBlur,
|
|
105
|
-
...getStopEventsPropagationProps()
|
|
106
|
-
}),
|
|
107
|
-
children: [
|
|
108
|
-
popup({
|
|
109
|
-
annotation: selected[0].annotation,
|
|
110
|
-
editable: selected[0].editable,
|
|
111
|
-
event
|
|
112
|
-
}),
|
|
113
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("button", { className: "r6o-popup-sr-only", "aria-live": "assertive", onClick: handleClose, children: props.ariaCloseWarning || "Click or leave this dialog to close it." })
|
|
114
|
-
]
|
|
115
|
-
}
|
|
116
|
-
)
|
|
117
|
-
}
|
|
118
|
-
) }) : null;
|
|
12
|
+
if (!setAnno) return;
|
|
13
|
+
const adapter = typeof opts.adapter === "function" ? opts.adapter(el.current) : opts.adapter;
|
|
14
|
+
const anno2 = createTextAnnotator(el.current, { ...opts, adapter });
|
|
15
|
+
setAnno(anno2);
|
|
16
|
+
return () => anno2.destroy();
|
|
17
|
+
}, [setAnno]);
|
|
18
|
+
useEffect(() => anno == null ? void 0 : anno.setStyle(style), [anno, style]);
|
|
19
|
+
useEffect(() => anno == null ? void 0 : anno.setFilter(filter), [anno, filter]);
|
|
20
|
+
useEffect(() => anno == null ? void 0 : anno.setFilter(filter), [anno, filter]);
|
|
21
|
+
useEffect(() => anno == null ? void 0 : anno.setUserSelectAction(userSelectAction), [anno, userSelectAction]);
|
|
22
|
+
useEffect(() => anno == null ? void 0 : anno.setUser(user), [anno, user]);
|
|
23
|
+
useEffect(() => anno == null ? void 0 : anno.setAnnotatingEnabled(annotatingEnabled), [anno, annotatingEnabled]);
|
|
24
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: el, className, children });
|
|
119
25
|
};
|
|
120
|
-
const getStopEventsPropagationProps = () => ({
|
|
121
|
-
onPointerUp: (event) => event.stopPropagation(),
|
|
122
|
-
onPointerDown: (event) => event.stopPropagation(),
|
|
123
|
-
onMouseDown: (event) => event.stopPropagation(),
|
|
124
|
-
onMouseUp: (event) => event.stopPropagation()
|
|
125
|
-
});
|
|
126
26
|
export {
|
|
127
|
-
|
|
128
|
-
getStopEventsPropagationProps
|
|
27
|
+
TextAnnotator
|
|
129
28
|
};
|
|
130
29
|
//# sourceMappingURL=react-text-annotator.es6.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-text-annotator.es6.js","sources":["../src/
|
|
1
|
+
{"version":3,"file":"react-text-annotator.es6.js","sources":["../src/TextAnnotator.tsx"],"sourcesContent":["import { ReactNode, useContext, useEffect, useRef } from 'react';\nimport { AnnotoriousContext, Filter } from '@annotorious/react';\nimport type { FormatAdapter } from '@annotorious/core';\nimport type { HighlightStyleExpression, TextAnnotation, TextAnnotatorOptions } from '@soomo/text-annotator';\nimport { createTextAnnotator } from '@soomo/text-annotator';\n\nimport '@soomo/text-annotator/dist/text-annotator.css';\n\nexport interface TextAnnotatorProps<E extends unknown> extends Omit<TextAnnotatorOptions<TextAnnotation, E>, 'adapter'> {\n\n children?: ReactNode | JSX.Element;\n\n adapter?: FormatAdapter<TextAnnotation, E> | ((container: HTMLElement) => FormatAdapter<TextAnnotation, E>) | null;\n\n filter?: Filter;\n\n style?: HighlightStyleExpression;\n\n className?: string;\n\n}\n\nexport const TextAnnotator = <E extends unknown>(props: TextAnnotatorProps<E>) => {\n\n const el = useRef<HTMLDivElement>(null);\n\n const { className, children, ...opts } = props;\n const { style, filter, user, annotatingEnabled, userSelectAction } = opts;\n\n const { anno, setAnno } = useContext(AnnotoriousContext);\n\n useEffect(() => {\n if (!setAnno) return;\n\n const adapter = typeof opts.adapter === 'function' ? opts.adapter(el.current) : opts.adapter;\n\n const anno = createTextAnnotator(el.current, { ...opts, adapter });\n setAnno(anno);\n\n return () => anno.destroy();\n }, [setAnno]);\n\n useEffect(() => anno?.setStyle(style), [anno, style]);\n\n useEffect(() => anno?.setFilter(filter), [anno, filter]);\n\n useEffect(() => anno?.setFilter(filter), [anno, filter]);\n\n useEffect(() => anno?.setUserSelectAction(userSelectAction), [anno, userSelectAction]);\n\n useEffect(() => anno?.setUser(user), [anno, user]);\n\n useEffect(() => anno?.setAnnotatingEnabled(annotatingEnabled), [anno, annotatingEnabled]);\n\n return (\n <div ref={el} className={className}>\n {children}\n </div>\n );\n\n};\n"],"names":["anno","jsx"],"mappings":";;;;;AAsBa,MAAA,gBAAgB,CAAoB,UAAiC;AAE1E,QAAA,KAAK,OAAuB,IAAI;AAEtC,QAAM,EAAE,WAAW,UAAU,GAAG,SAAS;AACzC,QAAM,EAAE,OAAO,QAAQ,MAAM,mBAAmB,iBAAqB,IAAA;AAErE,QAAM,EAAE,MAAM,QAAQ,IAAI,WAAW,kBAAkB;AAEvD,YAAU,MAAM;AACd,QAAI,CAAC,QAAS;AAER,UAAA,UAAU,OAAO,KAAK,YAAY,aAAa,KAAK,QAAQ,GAAG,OAAO,IAAI,KAAK;AAE/EA,UAAAA,QAAO,oBAAoB,GAAG,SAAS,EAAE,GAAG,MAAM,SAAS;AACjE,YAAQA,KAAI;AAEL,WAAA,MAAMA,MAAK;EAAQ,GACzB,CAAC,OAAO,CAAC;AAEF,YAAA,MAAM,6BAAM,SAAS,QAAQ,CAAC,MAAM,KAAK,CAAC;AAE1C,YAAA,MAAM,6BAAM,UAAU,SAAS,CAAC,MAAM,MAAM,CAAC;AAE7C,YAAA,MAAM,6BAAM,UAAU,SAAS,CAAC,MAAM,MAAM,CAAC;AAE7C,YAAA,MAAM,6BAAM,oBAAoB,mBAAmB,CAAC,MAAM,gBAAgB,CAAC;AAE3E,YAAA,MAAM,6BAAM,QAAQ,OAAO,CAAC,MAAM,IAAI,CAAC;AAEvC,YAAA,MAAM,6BAAM,qBAAqB,oBAAoB,CAAC,MAAM,iBAAiB,CAAC;AAExF,SACGC,kCAAAA,IAAA,OAAA,EAAI,KAAK,IAAI,WACX,SACH,CAAA;AAGJ;"}
|