@pie-element/extended-text-entry 13.4.1-next.3 → 14.0.0-beta.1

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 (48) hide show
  1. package/CHANGELOG.md +0 -17
  2. package/configure/CHANGELOG.md +0 -11
  3. package/configure/lib/defaults.js +2 -3
  4. package/configure/lib/defaults.js.map +1 -1
  5. package/configure/lib/index.js +97 -151
  6. package/configure/lib/index.js.map +1 -1
  7. package/configure/lib/main.js +223 -298
  8. package/configure/lib/main.js.map +1 -1
  9. package/configure/package.json +9 -6
  10. package/controller/CHANGELOG.md +0 -11
  11. package/controller/lib/defaults.js +2 -3
  12. package/controller/lib/defaults.js.map +1 -1
  13. package/controller/lib/index.js +73 -170
  14. package/controller/lib/index.js.map +1 -1
  15. package/controller/package.json +2 -2
  16. package/lib/annotation/annotation-editor.js +493 -566
  17. package/lib/annotation/annotation-editor.js.map +1 -1
  18. package/lib/annotation/annotation-menu.js +131 -190
  19. package/lib/annotation/annotation-menu.js.map +1 -1
  20. package/lib/annotation/annotation-utils.js +77 -121
  21. package/lib/annotation/annotation-utils.js.map +1 -1
  22. package/lib/annotation/freeform-editor.js +202 -227
  23. package/lib/annotation/freeform-editor.js.map +1 -1
  24. package/lib/index.js +77 -131
  25. package/lib/index.js.map +1 -1
  26. package/lib/main.js +179 -243
  27. package/lib/main.js.map +1 -1
  28. package/lib/print.js +45 -87
  29. package/lib/print.js.map +1 -1
  30. package/package.json +13 -19
  31. package/esm/configure.js +0 -9412
  32. package/esm/configure.js.map +0 -1
  33. package/esm/controller.js +0 -905
  34. package/esm/controller.js.map +0 -1
  35. package/esm/element.js +0 -21631
  36. package/esm/element.js.map +0 -1
  37. package/esm/package.json +0 -3
  38. package/esm/print.js +0 -21600
  39. package/esm/print.js.map +0 -1
  40. package/module/configure.js +0 -1
  41. package/module/controller.js +0 -139
  42. package/module/demo.js +0 -38
  43. package/module/element.js +0 -1
  44. package/module/index.html +0 -21
  45. package/module/manifest.json +0 -22
  46. package/module/print-demo.js +0 -76
  47. package/module/print.html +0 -18
  48. package/module/print.js +0 -1
@@ -1,56 +1,42 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
8
6
  exports.wrapRange = exports.removeElemsWrapping = exports.isSideLabel = exports.getRangeDetails = exports.getLabelElement = exports.getDOMNodes = exports.getAnnotationElements = exports.clearSelection = void 0;
9
-
10
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
-
12
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
-
14
7
  // returns DOM Nodes before the stopOffset
15
- var getAllTextNodesBeforePosition = function getAllTextNodesBeforePosition(node, stopOffset, nodeArray) {
16
- var nodes = nodeArray ? nodeArray : [];
17
- var offset = nodes.reduce(function (acc, node) {
18
- return acc + node.textContent.length;
19
- }, 0);
20
- var keepWalking = true;
21
-
8
+ const getAllTextNodesBeforePosition = (node, stopOffset, nodeArray) => {
9
+ const nodes = nodeArray ? nodeArray : [];
10
+ const offset = nodes.reduce((acc, node) => acc + node.textContent.length, 0);
11
+ let keepWalking = true;
22
12
  if (offset > stopOffset) {
23
13
  return false;
24
14
  }
25
-
26
15
  if (node) {
27
16
  // 3 = HTML DOM node value for text nodes
28
17
  if (node.nodeType === 3 && node.parentNode && !node.parentNode.hasAttribute('data-ann-id')) {
29
18
  nodes.push(node);
30
19
  }
31
-
32
20
  node = node.firstChild;
33
21
  }
34
-
35
22
  while (node && keepWalking) {
36
23
  keepWalking = getAllTextNodesBeforePosition(node, stopOffset, nodes);
37
24
  node = node.nextSibling;
38
25
  }
39
-
40
26
  return nodes;
41
- }; // returns DOM Nodes that overlap the start or end position
42
-
27
+ };
43
28
 
44
- var getDOMNodes = function getDOMNodes(startOffset, endOffset, rootNode) {
45
- var textNodesToEnd = getAllTextNodesBeforePosition(rootNode, endOffset);
46
- var domNodes = [];
47
- var start = 0;
48
- textNodesToEnd.forEach(function (node) {
49
- var end = start + node.textContent.length;
50
- [startOffset, endOffset].forEach(function (offset) {
29
+ // returns DOM Nodes that overlap the start or end position
30
+ const getDOMNodes = (startOffset, endOffset, rootNode) => {
31
+ const textNodesToEnd = getAllTextNodesBeforePosition(rootNode, endOffset);
32
+ const domNodes = [];
33
+ let start = 0;
34
+ textNodesToEnd.forEach(node => {
35
+ const end = start + node.textContent.length;
36
+ [startOffset, endOffset].forEach(offset => {
51
37
  if (start <= offset && offset < end) {
52
38
  domNodes.push({
53
- node: node,
39
+ node,
54
40
  offset: offset - start
55
41
  });
56
42
  }
@@ -58,45 +44,43 @@ var getDOMNodes = function getDOMNodes(startOffset, endOffset, rootNode) {
58
44
  start = end;
59
45
  });
60
46
  return domNodes;
61
- }; // returns [ textNodes, text ]
47
+ };
48
+
49
+ // returns [ textNodes, text ]
62
50
  // textNodes = DOM Text Nodes between start range and end range node
63
51
  // text = plain text in range
64
-
65
-
66
52
  exports.getDOMNodes = getDOMNodes;
67
-
68
- var getTextNodesBetween = function getTextNodesBetween(range) {
69
- var rootNode = range.commonAncestorContainer,
70
- startNode = range.startContainer,
71
- endNode = range.endContainer,
72
- startOffset = range.startOffset,
73
- endOffset = range.endOffset;
74
- var textNodes = [];
75
- var pastStartNode = false;
76
- var reachedEndNode = false;
77
- var text = '';
78
-
79
- var getTextNodes = function getTextNodes(node) {
80
- var value = node.nodeValue,
81
- childNodes = node.childNodes;
82
-
53
+ const getTextNodesBetween = range => {
54
+ const {
55
+ commonAncestorContainer: rootNode,
56
+ startContainer: startNode,
57
+ endContainer: endNode,
58
+ startOffset,
59
+ endOffset
60
+ } = range;
61
+ const textNodes = [];
62
+ let pastStartNode = false;
63
+ let reachedEndNode = false;
64
+ let text = '';
65
+ const getTextNodes = node => {
66
+ const {
67
+ nodeValue: value,
68
+ childNodes
69
+ } = node;
83
70
  if (node === startNode && node === endNode) {
84
71
  if (value) {
85
72
  text += value.substring(startOffset, endOffset);
86
73
  }
87
-
88
74
  pastStartNode = reachedEndNode = true;
89
75
  } else if (node === startNode) {
90
76
  if (value) {
91
77
  text += value.substring(startOffset);
92
78
  }
93
-
94
79
  pastStartNode = true;
95
80
  } else if (node === endNode) {
96
81
  if (value) {
97
82
  text += value.substring(0, endOffset);
98
83
  }
99
-
100
84
  reachedEndNode = true;
101
85
  } else if (node && node.nodeType === 3 && node.parentNode && !node.parentNode.hasAttribute('data-ann-id')) {
102
86
  // 3 = HTML DOM node value for text nodes
@@ -105,8 +89,7 @@ var getTextNodesBetween = function getTextNodesBetween(range) {
105
89
  textNodes.push(node);
106
90
  }
107
91
  }
108
-
109
- childNodes.forEach(function (childNode) {
92
+ childNodes.forEach(childNode => {
110
93
  if (!reachedEndNode) {
111
94
  getTextNodes(childNode);
112
95
  } else {
@@ -114,98 +97,83 @@ var getTextNodesBetween = function getTextNodesBetween(range) {
114
97
  }
115
98
  });
116
99
  };
117
-
118
100
  getTextNodes(rootNode);
119
101
  return [textNodes, text];
120
102
  };
121
-
122
- var surroundContent = function surroundContent(range) {
123
- var wrapper = document.createElement('SPAN');
103
+ const surroundContent = range => {
104
+ const wrapper = document.createElement('SPAN');
124
105
  range.surroundContents(wrapper);
125
106
  return wrapper;
126
- }; // wrap each DOM Text Node in range into a span
127
-
107
+ };
128
108
 
129
- var wrapRange = function wrapRange(range) {
109
+ // wrap each DOM Text Node in range into a span
110
+ const wrapRange = range => {
130
111
  if (range.startContainer === range.endContainer) {
131
112
  return [surroundContent(range)];
132
113
  }
114
+ const [nodesBetween] = getTextNodesBetween(range);
133
115
 
134
- var _getTextNodesBetween = getTextNodesBetween(range),
135
- _getTextNodesBetween2 = (0, _slicedToArray2["default"])(_getTextNodesBetween, 1),
136
- nodesBetween = _getTextNodesBetween2[0]; // wrap the start node
137
-
138
-
139
- var startRange = document.createRange();
116
+ // wrap the start node
117
+ const startRange = document.createRange();
140
118
  startRange.selectNodeContents(range.startContainer);
141
119
  startRange.setStart(range.startContainer, range.startOffset);
142
- var startWrapper = surroundContent(startRange); // wrap the end node
120
+ const startWrapper = surroundContent(startRange);
143
121
 
144
- var endRange = document.createRange();
122
+ // wrap the end node
123
+ const endRange = document.createRange();
145
124
  endRange.selectNode(range.endContainer);
146
125
  endRange.setEnd(range.endContainer, range.endOffset);
147
- var endWrapper = surroundContent(endRange); // wrap the nodes between start and end nodes, if any
126
+ const endWrapper = surroundContent(endRange);
148
127
 
149
- var centerWrappers = nodesBetween.map(function (node) {
150
- var wrapper = document.createElement('SPAN');
128
+ // wrap the nodes between start and end nodes, if any
129
+ const centerWrappers = nodesBetween.map(node => {
130
+ const wrapper = document.createElement('SPAN');
151
131
  node.parentNode.insertBefore(wrapper, node);
152
132
  wrapper.appendChild(node);
153
133
  return wrapper;
154
134
  });
155
- return [startWrapper].concat((0, _toConsumableArray2["default"])(centerWrappers), [endWrapper]);
156
- }; // returns text in range with start and end position in rootNode
157
-
135
+ return [startWrapper, ...centerWrappers, endWrapper];
136
+ };
158
137
 
138
+ // returns text in range with start and end position in rootNode
159
139
  exports.wrapRange = wrapRange;
160
-
161
- var getRangeDetails = function getRangeDetails(range, rootNode) {
162
- var rangeBefore = document.createRange();
140
+ const getRangeDetails = (range, rootNode) => {
141
+ const rangeBefore = document.createRange();
163
142
  rangeBefore.setStart(rootNode, 0);
164
143
  rangeBefore.setEnd(range.startContainer, range.startOffset);
165
-
166
- var _getTextNodesBetween3 = getTextNodesBetween(rangeBefore),
167
- _getTextNodesBetween4 = (0, _slicedToArray2["default"])(_getTextNodesBetween3, 2),
168
- text = _getTextNodesBetween4[1];
169
-
170
- var _getTextNodesBetween5 = getTextNodesBetween(range),
171
- _getTextNodesBetween6 = (0, _slicedToArray2["default"])(_getTextNodesBetween5, 2),
172
- textSelected = _getTextNodesBetween6[1];
173
-
174
- var start = text.length;
175
- var end = start + textSelected.length;
144
+ const [, text] = getTextNodesBetween(rangeBefore);
145
+ const [, textSelected] = getTextNodesBetween(range);
146
+ const start = text.length;
147
+ const end = start + textSelected.length;
176
148
  return {
177
149
  quote: textSelected,
178
- start: start,
179
- end: end
150
+ start,
151
+ end
180
152
  };
181
- }; // removes the annotation spans without changing the content inside
182
-
153
+ };
183
154
 
155
+ // removes the annotation spans without changing the content inside
184
156
  exports.getRangeDetails = getRangeDetails;
185
-
186
- var removeElemsWrapping = function removeElemsWrapping(elems, container) {
187
- (elems || []).forEach(function (elem) {
188
- var parent = elem.parentNode;
189
- var childNodes = elem.childNodes;
190
- var childNodesLength = childNodes.length;
191
-
157
+ const removeElemsWrapping = (elems, container) => {
158
+ (elems || []).forEach(elem => {
159
+ const parent = elem.parentNode;
160
+ const childNodes = elem.childNodes;
161
+ const childNodesLength = childNodes.length;
192
162
  if (childNodesLength > 0) {
193
- for (var i = 0; i < childNodesLength; i++) {
163
+ for (let i = 0; i < childNodesLength; i++) {
194
164
  parent.insertBefore(childNodes[0], elem);
195
165
  }
196
166
  } else {
197
167
  parent.insertBefore(document.createTextNode(elem.textContent), elem);
198
168
  }
199
-
200
169
  parent.removeChild(elem);
201
170
  });
202
171
  container.normalize();
203
- }; // also used in select-text
204
-
172
+ };
205
173
 
174
+ // also used in select-text
206
175
  exports.removeElemsWrapping = removeElemsWrapping;
207
-
208
- var clearSelection = function clearSelection() {
176
+ const clearSelection = () => {
209
177
  if (document.getSelection) {
210
178
  // for all new browsers (IE9+, Chrome, Firefox)
211
179
  document.getSelection().removeAllRanges();
@@ -224,26 +192,14 @@ var clearSelection = function clearSelection() {
224
192
  // IE8-
225
193
  document.selection.empty();
226
194
  }
227
- }; // check if annotation label contains line breaks or its length >= 20 characters
228
-
229
-
230
- exports.clearSelection = clearSelection;
231
-
232
- var isSideLabel = function isSideLabel(text) {
233
- return text.length >= 20 || text.search(/\n|\r|\r\n/) !== -1;
234
195
  };
235
196
 
197
+ // check if annotation label contains line breaks or its length >= 20 characters
198
+ exports.clearSelection = clearSelection;
199
+ const isSideLabel = text => text.length >= 20 || text.search(/\n|\r|\r\n/) !== -1;
236
200
  exports.isSideLabel = isSideLabel;
237
-
238
- var getAnnotationElements = function getAnnotationElements(id) {
239
- return Array.from(document.querySelectorAll("[data-id='".concat(id, "']")));
240
- };
241
-
201
+ const getAnnotationElements = id => Array.from(document.querySelectorAll(`[data-id='${id}']`));
242
202
  exports.getAnnotationElements = getAnnotationElements;
243
-
244
- var getLabelElement = function getLabelElement(id) {
245
- return document.querySelector("[data-ann-id='".concat(id, "']"));
246
- };
247
-
203
+ const getLabelElement = id => document.querySelector(`[data-ann-id='${id}']`);
248
204
  exports.getLabelElement = getLabelElement;
249
205
  //# sourceMappingURL=annotation-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/annotation/annotation-utils.js"],"names":["getAllTextNodesBeforePosition","node","stopOffset","nodeArray","nodes","offset","reduce","acc","textContent","length","keepWalking","nodeType","parentNode","hasAttribute","push","firstChild","nextSibling","getDOMNodes","startOffset","endOffset","rootNode","textNodesToEnd","domNodes","start","forEach","end","getTextNodesBetween","range","commonAncestorContainer","startNode","startContainer","endNode","endContainer","textNodes","pastStartNode","reachedEndNode","text","getTextNodes","value","nodeValue","childNodes","substring","childNode","surroundContent","wrapper","document","createElement","surroundContents","wrapRange","nodesBetween","startRange","createRange","selectNodeContents","setStart","startWrapper","endRange","selectNode","setEnd","endWrapper","centerWrappers","map","insertBefore","appendChild","getRangeDetails","rangeBefore","textSelected","quote","removeElemsWrapping","elems","container","elem","parent","childNodesLength","i","createTextNode","removeChild","normalize","clearSelection","getSelection","removeAllRanges","addRange","window","empty","selection","isSideLabel","search","getAnnotationElements","id","Array","from","querySelectorAll","getLabelElement","querySelector"],"mappings":"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","sourcesContent":["// returns DOM Nodes before the stopOffset\nconst getAllTextNodesBeforePosition = (node, stopOffset, nodeArray) => {\n const nodes = nodeArray ? nodeArray : [];\n const offset = nodes.reduce((acc, node) => acc + node.textContent.length, 0);\n let keepWalking = true;\n\n if (offset > stopOffset) {\n return false;\n }\n\n if (node) {\n // 3 = HTML DOM node value for text nodes\n if (node.nodeType === 3 && node.parentNode && !node.parentNode.hasAttribute('data-ann-id')) {\n nodes.push(node);\n }\n\n node = node.firstChild;\n }\n\n while (node && keepWalking) {\n keepWalking = getAllTextNodesBeforePosition(node, stopOffset, nodes);\n node = node.nextSibling;\n }\n\n return nodes;\n};\n\n// returns DOM Nodes that overlap the start or end position\nexport const getDOMNodes = (startOffset, endOffset, rootNode) => {\n const textNodesToEnd = getAllTextNodesBeforePosition(rootNode, endOffset);\n const domNodes = [];\n let start = 0;\n\n textNodesToEnd.forEach((node) => {\n const end = start + node.textContent.length;\n\n [startOffset, endOffset].forEach((offset) => {\n if (start <= offset && offset < end) {\n domNodes.push({\n node,\n offset: offset - start,\n });\n }\n });\n\n start = end;\n });\n\n return domNodes;\n};\n\n// returns [ textNodes, text ]\n// textNodes = DOM Text Nodes between start range and end range node\n// text = plain text in range\nconst getTextNodesBetween = (range) => {\n const {\n commonAncestorContainer: rootNode,\n startContainer: startNode,\n endContainer: endNode,\n startOffset,\n endOffset,\n } = range;\n const textNodes = [];\n let pastStartNode = false;\n let reachedEndNode = false;\n let text = '';\n\n const getTextNodes = (node) => {\n const { nodeValue: value, childNodes } = node;\n\n if (node === startNode && node === endNode) {\n if (value) {\n text += value.substring(startOffset, endOffset);\n }\n\n pastStartNode = reachedEndNode = true;\n } else if (node === startNode) {\n if (value) {\n text += value.substring(startOffset);\n }\n\n pastStartNode = true;\n } else if (node === endNode) {\n if (value) {\n text += value.substring(0, endOffset);\n }\n\n reachedEndNode = true;\n } else if (node && node.nodeType === 3 && node.parentNode && !node.parentNode.hasAttribute('data-ann-id')) {\n // 3 = HTML DOM node value for text nodes\n if (value && pastStartNode && !reachedEndNode) {\n text += value;\n textNodes.push(node);\n }\n }\n\n childNodes.forEach((childNode) => {\n if (!reachedEndNode) {\n getTextNodes(childNode);\n } else {\n return;\n }\n });\n };\n\n getTextNodes(rootNode);\n\n return [textNodes, text];\n};\n\nconst surroundContent = (range) => {\n const wrapper = document.createElement('SPAN');\n\n range.surroundContents(wrapper);\n\n return wrapper;\n};\n\n// wrap each DOM Text Node in range into a span\nexport const wrapRange = (range) => {\n if (range.startContainer === range.endContainer) {\n return [surroundContent(range)];\n }\n\n const [nodesBetween] = getTextNodesBetween(range);\n\n // wrap the start node\n const startRange = document.createRange();\n\n startRange.selectNodeContents(range.startContainer);\n startRange.setStart(range.startContainer, range.startOffset);\n\n const startWrapper = surroundContent(startRange);\n\n // wrap the end node\n const endRange = document.createRange();\n\n endRange.selectNode(range.endContainer);\n endRange.setEnd(range.endContainer, range.endOffset);\n\n const endWrapper = surroundContent(endRange);\n\n // wrap the nodes between start and end nodes, if any\n const centerWrappers = nodesBetween.map((node) => {\n const wrapper = document.createElement('SPAN');\n\n node.parentNode.insertBefore(wrapper, node);\n wrapper.appendChild(node);\n\n return wrapper;\n });\n\n return [startWrapper, ...centerWrappers, endWrapper];\n};\n\n// returns text in range with start and end position in rootNode\nexport const getRangeDetails = (range, rootNode) => {\n const rangeBefore = document.createRange();\n\n rangeBefore.setStart(rootNode, 0);\n rangeBefore.setEnd(range.startContainer, range.startOffset);\n\n const [, text] = getTextNodesBetween(rangeBefore);\n const [, textSelected] = getTextNodesBetween(range);\n const start = text.length;\n const end = start + textSelected.length;\n\n return {\n quote: textSelected,\n start,\n end,\n };\n};\n\n// removes the annotation spans without changing the content inside\nexport const removeElemsWrapping = (elems, container) => {\n (elems || []).forEach((elem) => {\n const parent = elem.parentNode;\n const childNodes = elem.childNodes;\n const childNodesLength = childNodes.length;\n\n if (childNodesLength > 0) {\n for (let i = 0; i < childNodesLength; i++) {\n parent.insertBefore(childNodes[0], elem);\n }\n } else {\n parent.insertBefore(document.createTextNode(elem.textContent), elem);\n }\n\n parent.removeChild(elem);\n });\n\n container.normalize();\n};\n\n// also used in select-text\nexport const clearSelection = () => {\n if (document.getSelection) {\n // for all new browsers (IE9+, Chrome, Firefox)\n document.getSelection().removeAllRanges();\n document.getSelection().addRange(document.createRange());\n } else if (window.getSelection) {\n // equals with the document.getSelection (MSDN info)\n if (window.getSelection().removeAllRanges) {\n // for all new browsers (IE9+, Chrome, Firefox)\n window.getSelection().removeAllRanges();\n window.getSelection().addRange(document.createRange());\n } else if (window.getSelection().empty) {\n // Chrome supports this as well\n window.getSelection().empty();\n }\n } else if (document.selection) {\n // IE8-\n document.selection.empty();\n }\n};\n\n// check if annotation label contains line breaks or its length >= 20 characters\nexport const isSideLabel = (text) => text.length >= 20 || text.search(/\\n|\\r|\\r\\n/) !== -1;\n\nexport const getAnnotationElements = (id) => Array.from(document.querySelectorAll(`[data-id='${id}']`));\n\nexport const getLabelElement = (id) => document.querySelector(`[data-ann-id='${id}']`);\n"],"file":"annotation-utils.js"}
1
+ {"version":3,"file":"annotation-utils.js","names":["getAllTextNodesBeforePosition","node","stopOffset","nodeArray","nodes","offset","reduce","acc","textContent","length","keepWalking","nodeType","parentNode","hasAttribute","push","firstChild","nextSibling","getDOMNodes","startOffset","endOffset","rootNode","textNodesToEnd","domNodes","start","forEach","end","exports","getTextNodesBetween","range","commonAncestorContainer","startContainer","startNode","endContainer","endNode","textNodes","pastStartNode","reachedEndNode","text","getTextNodes","nodeValue","value","childNodes","substring","childNode","surroundContent","wrapper","document","createElement","surroundContents","wrapRange","nodesBetween","startRange","createRange","selectNodeContents","setStart","startWrapper","endRange","selectNode","setEnd","endWrapper","centerWrappers","map","insertBefore","appendChild","getRangeDetails","rangeBefore","textSelected","quote","removeElemsWrapping","elems","container","elem","parent","childNodesLength","i","createTextNode","removeChild","normalize","clearSelection","getSelection","removeAllRanges","addRange","window","empty","selection","isSideLabel","search","getAnnotationElements","id","Array","from","querySelectorAll","getLabelElement","querySelector"],"sources":["../../src/annotation/annotation-utils.js"],"sourcesContent":["// returns DOM Nodes before the stopOffset\nconst getAllTextNodesBeforePosition = (node, stopOffset, nodeArray) => {\n const nodes = nodeArray ? nodeArray : [];\n const offset = nodes.reduce((acc, node) => acc + node.textContent.length, 0);\n let keepWalking = true;\n\n if (offset > stopOffset) {\n return false;\n }\n\n if (node) {\n // 3 = HTML DOM node value for text nodes\n if (node.nodeType === 3 && node.parentNode && !node.parentNode.hasAttribute('data-ann-id')) {\n nodes.push(node);\n }\n\n node = node.firstChild;\n }\n\n while (node && keepWalking) {\n keepWalking = getAllTextNodesBeforePosition(node, stopOffset, nodes);\n node = node.nextSibling;\n }\n\n return nodes;\n};\n\n// returns DOM Nodes that overlap the start or end position\nexport const getDOMNodes = (startOffset, endOffset, rootNode) => {\n const textNodesToEnd = getAllTextNodesBeforePosition(rootNode, endOffset);\n const domNodes = [];\n let start = 0;\n\n textNodesToEnd.forEach((node) => {\n const end = start + node.textContent.length;\n\n [startOffset, endOffset].forEach((offset) => {\n if (start <= offset && offset < end) {\n domNodes.push({\n node,\n offset: offset - start,\n });\n }\n });\n\n start = end;\n });\n\n return domNodes;\n};\n\n// returns [ textNodes, text ]\n// textNodes = DOM Text Nodes between start range and end range node\n// text = plain text in range\nconst getTextNodesBetween = (range) => {\n const {\n commonAncestorContainer: rootNode,\n startContainer: startNode,\n endContainer: endNode,\n startOffset,\n endOffset,\n } = range;\n const textNodes = [];\n let pastStartNode = false;\n let reachedEndNode = false;\n let text = '';\n\n const getTextNodes = (node) => {\n const { nodeValue: value, childNodes } = node;\n\n if (node === startNode && node === endNode) {\n if (value) {\n text += value.substring(startOffset, endOffset);\n }\n\n pastStartNode = reachedEndNode = true;\n } else if (node === startNode) {\n if (value) {\n text += value.substring(startOffset);\n }\n\n pastStartNode = true;\n } else if (node === endNode) {\n if (value) {\n text += value.substring(0, endOffset);\n }\n\n reachedEndNode = true;\n } else if (node && node.nodeType === 3 && node.parentNode && !node.parentNode.hasAttribute('data-ann-id')) {\n // 3 = HTML DOM node value for text nodes\n if (value && pastStartNode && !reachedEndNode) {\n text += value;\n textNodes.push(node);\n }\n }\n\n childNodes.forEach((childNode) => {\n if (!reachedEndNode) {\n getTextNodes(childNode);\n } else {\n return;\n }\n });\n };\n\n getTextNodes(rootNode);\n\n return [textNodes, text];\n};\n\nconst surroundContent = (range) => {\n const wrapper = document.createElement('SPAN');\n\n range.surroundContents(wrapper);\n\n return wrapper;\n};\n\n// wrap each DOM Text Node in range into a span\nexport const wrapRange = (range) => {\n if (range.startContainer === range.endContainer) {\n return [surroundContent(range)];\n }\n\n const [nodesBetween] = getTextNodesBetween(range);\n\n // wrap the start node\n const startRange = document.createRange();\n\n startRange.selectNodeContents(range.startContainer);\n startRange.setStart(range.startContainer, range.startOffset);\n\n const startWrapper = surroundContent(startRange);\n\n // wrap the end node\n const endRange = document.createRange();\n\n endRange.selectNode(range.endContainer);\n endRange.setEnd(range.endContainer, range.endOffset);\n\n const endWrapper = surroundContent(endRange);\n\n // wrap the nodes between start and end nodes, if any\n const centerWrappers = nodesBetween.map((node) => {\n const wrapper = document.createElement('SPAN');\n\n node.parentNode.insertBefore(wrapper, node);\n wrapper.appendChild(node);\n\n return wrapper;\n });\n\n return [startWrapper, ...centerWrappers, endWrapper];\n};\n\n// returns text in range with start and end position in rootNode\nexport const getRangeDetails = (range, rootNode) => {\n const rangeBefore = document.createRange();\n\n rangeBefore.setStart(rootNode, 0);\n rangeBefore.setEnd(range.startContainer, range.startOffset);\n\n const [, text] = getTextNodesBetween(rangeBefore);\n const [, textSelected] = getTextNodesBetween(range);\n const start = text.length;\n const end = start + textSelected.length;\n\n return {\n quote: textSelected,\n start,\n end,\n };\n};\n\n// removes the annotation spans without changing the content inside\nexport const removeElemsWrapping = (elems, container) => {\n (elems || []).forEach((elem) => {\n const parent = elem.parentNode;\n const childNodes = elem.childNodes;\n const childNodesLength = childNodes.length;\n\n if (childNodesLength > 0) {\n for (let i = 0; i < childNodesLength; i++) {\n parent.insertBefore(childNodes[0], elem);\n }\n } else {\n parent.insertBefore(document.createTextNode(elem.textContent), elem);\n }\n\n parent.removeChild(elem);\n });\n\n container.normalize();\n};\n\n// also used in select-text\nexport const clearSelection = () => {\n if (document.getSelection) {\n // for all new browsers (IE9+, Chrome, Firefox)\n document.getSelection().removeAllRanges();\n document.getSelection().addRange(document.createRange());\n } else if (window.getSelection) {\n // equals with the document.getSelection (MSDN info)\n if (window.getSelection().removeAllRanges) {\n // for all new browsers (IE9+, Chrome, Firefox)\n window.getSelection().removeAllRanges();\n window.getSelection().addRange(document.createRange());\n } else if (window.getSelection().empty) {\n // Chrome supports this as well\n window.getSelection().empty();\n }\n } else if (document.selection) {\n // IE8-\n document.selection.empty();\n }\n};\n\n// check if annotation label contains line breaks or its length >= 20 characters\nexport const isSideLabel = (text) => text.length >= 20 || text.search(/\\n|\\r|\\r\\n/) !== -1;\n\nexport const getAnnotationElements = (id) => Array.from(document.querySelectorAll(`[data-id='${id}']`));\n\nexport const getLabelElement = (id) => document.querySelector(`[data-ann-id='${id}']`);\n"],"mappings":";;;;;;AAAA;AACA,MAAMA,6BAA6B,GAAGA,CAACC,IAAI,EAAEC,UAAU,EAAEC,SAAS,KAAK;EACrE,MAAMC,KAAK,GAAGD,SAAS,GAAGA,SAAS,GAAG,EAAE;EACxC,MAAME,MAAM,GAAGD,KAAK,CAACE,MAAM,CAAC,CAACC,GAAG,EAAEN,IAAI,KAAKM,GAAG,GAAGN,IAAI,CAACO,WAAW,CAACC,MAAM,EAAE,CAAC,CAAC;EAC5E,IAAIC,WAAW,GAAG,IAAI;EAEtB,IAAIL,MAAM,GAAGH,UAAU,EAAE;IACvB,OAAO,KAAK;EACd;EAEA,IAAID,IAAI,EAAE;IACR;IACA,IAAIA,IAAI,CAACU,QAAQ,KAAK,CAAC,IAAIV,IAAI,CAACW,UAAU,IAAI,CAACX,IAAI,CAACW,UAAU,CAACC,YAAY,CAAC,aAAa,CAAC,EAAE;MAC1FT,KAAK,CAACU,IAAI,CAACb,IAAI,CAAC;IAClB;IAEAA,IAAI,GAAGA,IAAI,CAACc,UAAU;EACxB;EAEA,OAAOd,IAAI,IAAIS,WAAW,EAAE;IAC1BA,WAAW,GAAGV,6BAA6B,CAACC,IAAI,EAAEC,UAAU,EAAEE,KAAK,CAAC;IACpEH,IAAI,GAAGA,IAAI,CAACe,WAAW;EACzB;EAEA,OAAOZ,KAAK;AACd,CAAC;;AAED;AACO,MAAMa,WAAW,GAAGA,CAACC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,KAAK;EAC/D,MAAMC,cAAc,GAAGrB,6BAA6B,CAACoB,QAAQ,EAAED,SAAS,CAAC;EACzE,MAAMG,QAAQ,GAAG,EAAE;EACnB,IAAIC,KAAK,GAAG,CAAC;EAEbF,cAAc,CAACG,OAAO,CAAEvB,IAAI,IAAK;IAC/B,MAAMwB,GAAG,GAAGF,KAAK,GAAGtB,IAAI,CAACO,WAAW,CAACC,MAAM;IAE3C,CAACS,WAAW,EAAEC,SAAS,CAAC,CAACK,OAAO,CAAEnB,MAAM,IAAK;MAC3C,IAAIkB,KAAK,IAAIlB,MAAM,IAAIA,MAAM,GAAGoB,GAAG,EAAE;QACnCH,QAAQ,CAACR,IAAI,CAAC;UACZb,IAAI;UACJI,MAAM,EAAEA,MAAM,GAAGkB;QACnB,CAAC,CAAC;MACJ;IACF,CAAC,CAAC;IAEFA,KAAK,GAAGE,GAAG;EACb,CAAC,CAAC;EAEF,OAAOH,QAAQ;AACjB,CAAC;;AAED;AACA;AACA;AAAAI,OAAA,CAAAT,WAAA,GAAAA,WAAA;AACA,MAAMU,mBAAmB,GAAIC,KAAK,IAAK;EACrC,MAAM;IACJC,uBAAuB,EAAET,QAAQ;IACjCU,cAAc,EAAEC,SAAS;IACzBC,YAAY,EAAEC,OAAO;IACrBf,WAAW;IACXC;EACF,CAAC,GAAGS,KAAK;EACT,MAAMM,SAAS,GAAG,EAAE;EACpB,IAAIC,aAAa,GAAG,KAAK;EACzB,IAAIC,cAAc,GAAG,KAAK;EAC1B,IAAIC,IAAI,GAAG,EAAE;EAEb,MAAMC,YAAY,GAAIrC,IAAI,IAAK;IAC7B,MAAM;MAAEsC,SAAS,EAAEC,KAAK;MAAEC;IAAW,CAAC,GAAGxC,IAAI;IAE7C,IAAIA,IAAI,KAAK8B,SAAS,IAAI9B,IAAI,KAAKgC,OAAO,EAAE;MAC1C,IAAIO,KAAK,EAAE;QACTH,IAAI,IAAIG,KAAK,CAACE,SAAS,CAACxB,WAAW,EAAEC,SAAS,CAAC;MACjD;MAEAgB,aAAa,GAAGC,cAAc,GAAG,IAAI;IACvC,CAAC,MAAM,IAAInC,IAAI,KAAK8B,SAAS,EAAE;MAC7B,IAAIS,KAAK,EAAE;QACTH,IAAI,IAAIG,KAAK,CAACE,SAAS,CAACxB,WAAW,CAAC;MACtC;MAEAiB,aAAa,GAAG,IAAI;IACtB,CAAC,MAAM,IAAIlC,IAAI,KAAKgC,OAAO,EAAE;MAC3B,IAAIO,KAAK,EAAE;QACTH,IAAI,IAAIG,KAAK,CAACE,SAAS,CAAC,CAAC,EAAEvB,SAAS,CAAC;MACvC;MAEAiB,cAAc,GAAG,IAAI;IACvB,CAAC,MAAM,IAAInC,IAAI,IAAIA,IAAI,CAACU,QAAQ,KAAK,CAAC,IAAIV,IAAI,CAACW,UAAU,IAAI,CAACX,IAAI,CAACW,UAAU,CAACC,YAAY,CAAC,aAAa,CAAC,EAAE;MACzG;MACA,IAAI2B,KAAK,IAAIL,aAAa,IAAI,CAACC,cAAc,EAAE;QAC7CC,IAAI,IAAIG,KAAK;QACbN,SAAS,CAACpB,IAAI,CAACb,IAAI,CAAC;MACtB;IACF;IAEAwC,UAAU,CAACjB,OAAO,CAAEmB,SAAS,IAAK;MAChC,IAAI,CAACP,cAAc,EAAE;QACnBE,YAAY,CAACK,SAAS,CAAC;MACzB,CAAC,MAAM;QACL;MACF;IACF,CAAC,CAAC;EACJ,CAAC;EAEDL,YAAY,CAAClB,QAAQ,CAAC;EAEtB,OAAO,CAACc,SAAS,EAAEG,IAAI,CAAC;AAC1B,CAAC;AAED,MAAMO,eAAe,GAAIhB,KAAK,IAAK;EACjC,MAAMiB,OAAO,GAAGC,QAAQ,CAACC,aAAa,CAAC,MAAM,CAAC;EAE9CnB,KAAK,CAACoB,gBAAgB,CAACH,OAAO,CAAC;EAE/B,OAAOA,OAAO;AAChB,CAAC;;AAED;AACO,MAAMI,SAAS,GAAIrB,KAAK,IAAK;EAClC,IAAIA,KAAK,CAACE,cAAc,KAAKF,KAAK,CAACI,YAAY,EAAE;IAC/C,OAAO,CAACY,eAAe,CAAChB,KAAK,CAAC,CAAC;EACjC;EAEA,MAAM,CAACsB,YAAY,CAAC,GAAGvB,mBAAmB,CAACC,KAAK,CAAC;;EAEjD;EACA,MAAMuB,UAAU,GAAGL,QAAQ,CAACM,WAAW,CAAC,CAAC;EAEzCD,UAAU,CAACE,kBAAkB,CAACzB,KAAK,CAACE,cAAc,CAAC;EACnDqB,UAAU,CAACG,QAAQ,CAAC1B,KAAK,CAACE,cAAc,EAAEF,KAAK,CAACV,WAAW,CAAC;EAE5D,MAAMqC,YAAY,GAAGX,eAAe,CAACO,UAAU,CAAC;;EAEhD;EACA,MAAMK,QAAQ,GAAGV,QAAQ,CAACM,WAAW,CAAC,CAAC;EAEvCI,QAAQ,CAACC,UAAU,CAAC7B,KAAK,CAACI,YAAY,CAAC;EACvCwB,QAAQ,CAACE,MAAM,CAAC9B,KAAK,CAACI,YAAY,EAAEJ,KAAK,CAACT,SAAS,CAAC;EAEpD,MAAMwC,UAAU,GAAGf,eAAe,CAACY,QAAQ,CAAC;;EAE5C;EACA,MAAMI,cAAc,GAAGV,YAAY,CAACW,GAAG,CAAE5D,IAAI,IAAK;IAChD,MAAM4C,OAAO,GAAGC,QAAQ,CAACC,aAAa,CAAC,MAAM,CAAC;IAE9C9C,IAAI,CAACW,UAAU,CAACkD,YAAY,CAACjB,OAAO,EAAE5C,IAAI,CAAC;IAC3C4C,OAAO,CAACkB,WAAW,CAAC9D,IAAI,CAAC;IAEzB,OAAO4C,OAAO;EAChB,CAAC,CAAC;EAEF,OAAO,CAACU,YAAY,EAAE,GAAGK,cAAc,EAAED,UAAU,CAAC;AACtD,CAAC;;AAED;AAAAjC,OAAA,CAAAuB,SAAA,GAAAA,SAAA;AACO,MAAMe,eAAe,GAAGA,CAACpC,KAAK,EAAER,QAAQ,KAAK;EAClD,MAAM6C,WAAW,GAAGnB,QAAQ,CAACM,WAAW,CAAC,CAAC;EAE1Ca,WAAW,CAACX,QAAQ,CAAClC,QAAQ,EAAE,CAAC,CAAC;EACjC6C,WAAW,CAACP,MAAM,CAAC9B,KAAK,CAACE,cAAc,EAAEF,KAAK,CAACV,WAAW,CAAC;EAE3D,MAAM,GAAGmB,IAAI,CAAC,GAAGV,mBAAmB,CAACsC,WAAW,CAAC;EACjD,MAAM,GAAGC,YAAY,CAAC,GAAGvC,mBAAmB,CAACC,KAAK,CAAC;EACnD,MAAML,KAAK,GAAGc,IAAI,CAAC5B,MAAM;EACzB,MAAMgB,GAAG,GAAGF,KAAK,GAAG2C,YAAY,CAACzD,MAAM;EAEvC,OAAO;IACL0D,KAAK,EAAED,YAAY;IACnB3C,KAAK;IACLE;EACF,CAAC;AACH,CAAC;;AAED;AAAAC,OAAA,CAAAsC,eAAA,GAAAA,eAAA;AACO,MAAMI,mBAAmB,GAAGA,CAACC,KAAK,EAAEC,SAAS,KAAK;EACvD,CAACD,KAAK,IAAI,EAAE,EAAE7C,OAAO,CAAE+C,IAAI,IAAK;IAC9B,MAAMC,MAAM,GAAGD,IAAI,CAAC3D,UAAU;IAC9B,MAAM6B,UAAU,GAAG8B,IAAI,CAAC9B,UAAU;IAClC,MAAMgC,gBAAgB,GAAGhC,UAAU,CAAChC,MAAM;IAE1C,IAAIgE,gBAAgB,GAAG,CAAC,EAAE;MACxB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,gBAAgB,EAAEC,CAAC,EAAE,EAAE;QACzCF,MAAM,CAACV,YAAY,CAACrB,UAAU,CAAC,CAAC,CAAC,EAAE8B,IAAI,CAAC;MAC1C;IACF,CAAC,MAAM;MACLC,MAAM,CAACV,YAAY,CAAChB,QAAQ,CAAC6B,cAAc,CAACJ,IAAI,CAAC/D,WAAW,CAAC,EAAE+D,IAAI,CAAC;IACtE;IAEAC,MAAM,CAACI,WAAW,CAACL,IAAI,CAAC;EAC1B,CAAC,CAAC;EAEFD,SAAS,CAACO,SAAS,CAAC,CAAC;AACvB,CAAC;;AAED;AAAAnD,OAAA,CAAA0C,mBAAA,GAAAA,mBAAA;AACO,MAAMU,cAAc,GAAGA,CAAA,KAAM;EAClC,IAAIhC,QAAQ,CAACiC,YAAY,EAAE;IACzB;IACAjC,QAAQ,CAACiC,YAAY,CAAC,CAAC,CAACC,eAAe,CAAC,CAAC;IACzClC,QAAQ,CAACiC,YAAY,CAAC,CAAC,CAACE,QAAQ,CAACnC,QAAQ,CAACM,WAAW,CAAC,CAAC,CAAC;EAC1D,CAAC,MAAM,IAAI8B,MAAM,CAACH,YAAY,EAAE;IAC9B;IACA,IAAIG,MAAM,CAACH,YAAY,CAAC,CAAC,CAACC,eAAe,EAAE;MACzC;MACAE,MAAM,CAACH,YAAY,CAAC,CAAC,CAACC,eAAe,CAAC,CAAC;MACvCE,MAAM,CAACH,YAAY,CAAC,CAAC,CAACE,QAAQ,CAACnC,QAAQ,CAACM,WAAW,CAAC,CAAC,CAAC;IACxD,CAAC,MAAM,IAAI8B,MAAM,CAACH,YAAY,CAAC,CAAC,CAACI,KAAK,EAAE;MACtC;MACAD,MAAM,CAACH,YAAY,CAAC,CAAC,CAACI,KAAK,CAAC,CAAC;IAC/B;EACF,CAAC,MAAM,IAAIrC,QAAQ,CAACsC,SAAS,EAAE;IAC7B;IACAtC,QAAQ,CAACsC,SAAS,CAACD,KAAK,CAAC,CAAC;EAC5B;AACF,CAAC;;AAED;AAAAzD,OAAA,CAAAoD,cAAA,GAAAA,cAAA;AACO,MAAMO,WAAW,GAAIhD,IAAI,IAAKA,IAAI,CAAC5B,MAAM,IAAI,EAAE,IAAI4B,IAAI,CAACiD,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAAC5D,OAAA,CAAA2D,WAAA,GAAAA,WAAA;AAEpF,MAAME,qBAAqB,GAAIC,EAAE,IAAKC,KAAK,CAACC,IAAI,CAAC5C,QAAQ,CAAC6C,gBAAgB,CAAC,aAAaH,EAAE,IAAI,CAAC,CAAC;AAAC9D,OAAA,CAAA6D,qBAAA,GAAAA,qBAAA;AAEjG,MAAMK,eAAe,GAAIJ,EAAE,IAAK1C,QAAQ,CAAC+C,aAAa,CAAC,iBAAiBL,EAAE,IAAI,CAAC;AAAC9D,OAAA,CAAAkE,eAAA,GAAAA,eAAA","ignoreList":[]}