@recogito/text-annotator 4.0.1-beta → 4.0.2-beta

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 +1 @@
1
- {"version":3,"file":"text-annotator.umd.js","sources":["../../../node_modules/uuid/dist/stringify.js","../../../node_modules/uuid/dist/rng.js","../../../node_modules/uuid/dist/v4.js","../src/utils/dom/device.ts","../src/utils/dom/is-not-annotatable.ts","../src/utils/dom/is-whitespace-or-empty.ts","../src/utils/dom/merge-ranges.ts","../src/utils/dom/programmatically-focusable.ts","../src/utils/dom/split-annotatable-ranges.ts","../src/utils/dom/trim-range-to-container.ts","../src/utils/annotation/get-quote-context.ts","../src/utils/annotation/range-to-selector.ts","../src/utils/annotation/revive-annotation.ts","../src/utils/annotation/scroll-into-view.ts","../../../node_modules/@annotorious/core/dist/annotorious-core.es.js","../src/model/w3c/w3c-text-format-adapter.ts","../../../node_modules/nanoevents/index.js","../src/utils/events/cancel-single-click-events.ts","../src/utils/events/clone-events.ts","../src/utils/events/debounce.ts","../src/rendering/base-renderer.ts","../../../node_modules/colord/index.mjs","../src/rendering/highlight-style.ts","../../../node_modules/dequal/lite/index.mjs","../src/utils/highlight/compute-z-index.ts","../src/utils/highlight/get-highlight-client-rects.ts","../src/utils/highlight/merge-client-rects.ts","../src/utils/highlight/rects-to-bounds.ts","../src/rendering/renderer-spans/spans-renderer.ts","../src/rendering/viewport.ts","../../../node_modules/quickselect/index.js","../../../node_modules/rbush/index.js","../src/state/spatial-tree.ts","../src/state/text-annotator-state.ts","../../../node_modules/debounce/index.js","../../../node_modules/hotkeys-js/dist/hotkeys.esm.js","../../../node_modules/poll/dist/poll.js","../src/selection-handler.ts","../src/rendering/renderer-css-highlight/css-highlight-renderer.ts","../src/text-annotator-options.ts","../src/text-annotator.ts"],"sourcesContent":["import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","const rnds8 = new Uint8Array(16);\nexport default function rng() {\n return crypto.getRandomValues(rnds8);\n}\n","import rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (!buf && !options && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n return _v4(options, buf, offset);\n}\nfunction _v4(options, buf, offset) {\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n","// Simple macOS detection without external dependencies\n// navigator.platform returns \"MacIntel\" or \"MacPPC\" on macOS\nexport const isMac = typeof navigator !== 'undefined' && navigator.platform.startsWith('Mac');\n","export const NOT_ANNOTATABLE_CLASS = 'not-annotatable';\n\nexport const NOT_ANNOTATABLE_SELECTOR = `.${NOT_ANNOTATABLE_CLASS}`;\n\nexport const isNotAnnotatable = (container: Node, node: Node): boolean => {\n if (!container.contains(node)) return true;\n\n const closestNotAnnotatable = node instanceof HTMLElement\n ? node.closest(NOT_ANNOTATABLE_SELECTOR)\n : node.parentElement?.closest(NOT_ANNOTATABLE_SELECTOR);\n return Boolean(closestNotAnnotatable);\n}\n\nexport const isRangeAnnotatable = (container: Node, range: Range): boolean => {\n const ancestor = range.commonAncestorContainer;\n return !isNotAnnotatable(container, ancestor);\n}","export const whitespaceOrEmptyRegex = /^\\s*$/;\n\nexport const isRangeWhitespaceOrEmpty = (range: Range): boolean => \n whitespaceOrEmptyRegex.test(range.toString())\n\nexport const isNodeWhitespaceOrEmpty = (node: Node): boolean =>\n whitespaceOrEmptyRegex.test(node.textContent || '');\n","export const mergeRanges = (ranges: Range[]): Range[] => {\n if (ranges.length === 0) return [];\n if (ranges.length === 1) return [ranges[0]];\n\n // Sort by start position\n ranges.sort((a, b) => {\n const cmp = a.compareBoundaryPoints(Range.START_TO_START, b);\n if (cmp !== 0) return cmp;\n\n // If equal, sort by end position\n return a.compareBoundaryPoints(Range.END_TO_END, b);\n });\n\n const [first, ...rest] = ranges;\n\n const result = rest.reduce<{ merged: Range[], current: Range }>((acc, next) => {\n // Check if current and next overlap or are adjacent (current.end >= next.start)\n const comparison = acc.current.compareBoundaryPoints(Range.START_TO_END, next);\n\n if (comparison >= 0) {\n // Ranges overlap/touch - merge\n const endComparison = acc.current.compareBoundaryPoints(Range.END_TO_END, next);\n if (endComparison < 0) {\n // Next extends beyond current - extend current's end\n acc.current.setEnd(next.endContainer, next.endOffset);\n }\n\n // Otherwise current already encompasses next, no change needed\n return acc;\n } else {\n // Disjoint - save current and start new range\n acc.merged.push(acc.current);\n acc.current = next.cloneRange();\n return acc;\n }\n }, { merged: [], current: first.cloneRange() });\n\n return [...result.merged, result.current];\n}","/**\n * Makes an element programmatically focusable by adding a `tabindex=\"-1\"` attribute.\n * Or does nothing if the element is already focusable 🤷🏻\n * It's required to process keyboard events on an element that is not natively focusable.\n */\nexport const programmaticallyFocusable = (container: HTMLElement) => {\n if (!container.hasAttribute('tabindex') || container.tabIndex < -1) {\n container.setAttribute('tabindex', '-1');\n }\n\n container.classList.add('no-focus-outline');\n};\n","import { isRangeAnnotatable, NOT_ANNOTATABLE_CLASS, NOT_ANNOTATABLE_SELECTOR } from '../dom';\n\nconst iterateNotAnnotatableElements = function*(range: Range): Generator<HTMLElement> {\n const notAnnotatableIterator = document.createNodeIterator(\n range.commonAncestorContainer,\n NodeFilter.SHOW_ELEMENT,\n (node) =>\n node instanceof HTMLElement // Only elements that can have the class applied\n && node.classList.contains(NOT_ANNOTATABLE_CLASS) // Only elements that are not annotatable\n && !node.parentElement.closest(NOT_ANNOTATABLE_SELECTOR) // Only elements that are not descendants of a not annotatable element\n && range.intersectsNode(node) // Only elements that are within the range\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_SKIP\n );\n\n let notAnnotatableNode: Node | null;\n\n while ((notAnnotatableNode = notAnnotatableIterator.nextNode())) {\n if (notAnnotatableNode instanceof HTMLElement) {\n yield notAnnotatableNode;\n }\n }\n}\n\n/**\n * Splits a DOM Range into one or more ranges that span annotatable content only.\n */\nexport const splitAnnotatableRanges = (container: Node, range: Range): Range[] => {\n if (!isRangeAnnotatable(container, range)) return [];\n\n const annotatableRanges: Range[] = [];\n\n let prevNotAnnotatable: HTMLElement | null = null;\n\n for (const notAnnotatable of iterateNotAnnotatableElements(range)) {\n let subRange: Range;\n\n // From the start of the range to the not annotatable element.\n // If selection starts on the non-annotatable element, a collapsed range will be created and ignored.\n if (!prevNotAnnotatable) {\n subRange = range.cloneRange();\n subRange.setEndBefore(notAnnotatable);\n } else {\n // From the previous not annotatable element to the current not annotatable element\n subRange = document.createRange();\n subRange.setStartAfter(prevNotAnnotatable);\n subRange.setEndBefore(notAnnotatable);\n }\n\n if (!subRange.collapsed)\n annotatableRanges.push(subRange);\n\n prevNotAnnotatable = notAnnotatable;\n }\n\n // From the last not annotatable element to the end of the parent range\n if (prevNotAnnotatable) {\n const lastRange = range.cloneRange();\n lastRange.setStartAfter(prevNotAnnotatable);\n if (!lastRange.collapsed) {\n annotatableRanges.push(lastRange);\n }\n }\n\n return annotatableRanges.length > 0 ? annotatableRanges : [range];\n}\n\nexport const getRangeAnnotatableContents = (range: Range): DocumentFragment => {\n const contents = range.cloneContents();\n contents.querySelectorAll(NOT_ANNOTATABLE_SELECTOR).forEach((el) => el.remove());\n return contents;\n}\n","export const trimRangeToContainer = (\n range: Range,\n container: HTMLElement\n): Range => {\n const trimmedRange = range.cloneRange();\n\n /**\n * If the range starts outside the container -\n * trim it to the start of the container\n */\n if (!container.contains(trimmedRange.startContainer)) {\n trimmedRange.setStart(container, 0);\n }\n\n /**\n * If the range ends outside the container -\n * trim it to the end of the container\n */\n if (!container.contains(trimmedRange.endContainer)) {\n trimmedRange.setEnd(container, container.childNodes.length);\n }\n\n return trimmedRange;\n}\n","import { getRangeAnnotatableContents } from '../dom';\n\nconst segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n\nexport const getQuoteContext = (\n range: Range,\n container: HTMLElement,\n length = 10,\n offsetReferenceSelector?: string\n) => {\n const offsetReference: HTMLElement = offsetReferenceSelector\n ? (range.startContainer.parentElement as HTMLElement).closest(offsetReferenceSelector)!\n : container;\n\n const rangeBefore = document.createRange();\n rangeBefore.setStart(offsetReference, 0);\n rangeBefore.setEnd(range.startContainer, range.startOffset);\n\n const before = getRangeAnnotatableContents(rangeBefore).textContent;\n\n const rangeAfter = document.createRange();\n rangeAfter.setStart(range.endContainer, range.endOffset);\n\n if (offsetReference === document.body)\n rangeAfter.setEnd(offsetReference, offsetReference.childNodes.length);\n else\n rangeAfter.setEndAfter(offsetReference);\n\n const after = getRangeAnnotatableContents(rangeAfter).textContent;\n\n const prefixGraphemes = [...segmenter.segment(before)];\n const suffixGraphemes = [...segmenter.segment(after)];\n\n return {\n prefix: prefixGraphemes.slice(-length).map(s => s.segment).join(''),\n suffix: suffixGraphemes.slice(0, length).map(s => s.segment).join('')\n };\n}\n","import type { TextSelector } from '../../model';\nimport { getRangeAnnotatableContents } from '../dom';\n\nexport const rangeToSelector = (\n range: Range,\n container: HTMLElement,\n offsetReferenceSelector?: string\n): TextSelector => {\n const rangeBefore = document.createRange();\n\n const offsetReference: HTMLElement = offsetReferenceSelector\n ? (range.startContainer.parentElement as HTMLElement).closest(offsetReferenceSelector)!\n : container;\n\n // A helper range from the start of the container to the start of the selection\n rangeBefore.setStart(offsetReference, 0);\n rangeBefore.setEnd(range.startContainer, range.startOffset);\n\n // A content range before content w/o not annotatable elements\n const before = getRangeAnnotatableContents(rangeBefore).textContent;\n\n const quote = range.toString();\n const start = before.length || 0;\n const end = start + quote.length;\n\n return offsetReferenceSelector\n ? { quote, start, end, range, offsetReference }\n : { quote, start, end, range };\n}\n","import type { TextAnnotation, TextAnnotationTarget, TextSelector } from '../../model';\nimport { NOT_ANNOTATABLE_SELECTOR } from '../dom';\n\nexport const isRevived = (selector: TextSelector[]) =>\n selector.every(s => s.range instanceof Range && !s.range.collapsed);\n\n/**\n * Creates a new selector object with the revived DOM range from the given text annotation position\n * Only the annotatable elements are processed and counted towards the range\n *\n * @param selector annotation selector with start and end positions\n * @param container the HTML container of the annotated content\n *\n * @returns the revived selector\n */\nexport const reviveSelector = <T extends TextSelector>(selector: T, container: HTMLElement): T => {\n\n const { start, end } = selector;\n\n const offsetReference = selector.offsetReference || container;\n\n const iterator = document.createNodeIterator(container, NodeFilter.SHOW_TEXT, (node) =>\n node.parentElement?.closest(NOT_ANNOTATABLE_SELECTOR)\n ? NodeFilter.FILTER_SKIP\n : NodeFilter.FILTER_ACCEPT\n );\n\n // Position that contains the length of the preceding annotatable text nodes\n let runningOffset = 0;\n\n const range = document.createRange();\n\n let n = iterator.nextNode();\n if (n === null) console.error('Could not revive annotation target. Content missing.');\n\n // If there's no offset reference, start immediately\n let startCounting = !offsetReference;\n while (n !== null) {\n startCounting ||= (typeof offsetReference?.contains === 'function') ? offsetReference.contains(n) : false;\n\n if (startCounting) {\n const len = n.textContent?.length || 0;\n\n if (runningOffset + len > start) {\n range.setStart(n, start - runningOffset);\n break;\n }\n\n runningOffset += len;\n }\n\n n = iterator.nextNode();\n }\n\n // set range end\n while (n !== null) {\n const len = n.textContent?.length || 0;\n\n if (runningOffset + len >= end) {\n range.setEnd(n, end - runningOffset);\n break;\n }\n\n runningOffset += len;\n\n n = iterator.nextNode();\n }\n \n return {\n ...selector,\n range\n }\n\n}\n\n\nexport const reviveTarget = <T extends TextAnnotationTarget = TextAnnotationTarget>(target: T, container: HTMLElement): T =>\n isRevived(target.selector)\n ? target\n : ({\n ...target,\n selector: target.selector.map(s => s.range instanceof Range && !s.range.collapsed ? s : reviveSelector(s, container))\n });\n\nexport const reviveAnnotation = <T extends TextAnnotation>(annotation: T, container: HTMLElement): T =>\n isRevived(annotation.target.selector)\n ? annotation\n : ({ ...annotation, target: reviveTarget(annotation.target, container) });","import type { TextAnnotationStore } from '../../state';\nimport type { TextAnnotation } from '../../model';\nimport { reviveTarget } from '../annotation';\n\nconst getScrollParent = (el: Element) => {\n if (!el)\n return document.scrollingElement;\n\n const { overflowY } = window.getComputedStyle(el);\n const isScrollable = overflowY !== 'visible' && overflowY !== 'hidden';\n\n // Cf. discussion https://stackoverflow.com/questions/35939886/find-first-scrollable-parent\n if (isScrollable && el.scrollHeight > el.clientHeight)\n return el;\n else\n return getScrollParent(el.parentElement);\n};\n\n// Executes scroll on an annotation with a valid DOM range selector\nconst scroll = <I extends TextAnnotation = TextAnnotation>(\n store: TextAnnotationStore<I>,\n target: I['target'],\n scrollParent: Element\n) => {\n // Parent bounds and client (= visible) height\n const parentBounds = scrollParent.getBoundingClientRect();\n const parentHeight = scrollParent.clientHeight;\n const parentWidth = scrollParent.clientWidth;\n\n // Position of the annotation relative to viewport\n const annotationBounds = target.selector[0].range.getBoundingClientRect();\n\n /*\n Note: `getBoundingClientRect` seems to return the wrong height!\n (Includes block elements?)\n Instead, the normalized height is used from the spatial index!\n */\n const { width, height } = store.getAnnotationBounds(target.annotation);\n\n // Position of the annotation relative to scrollParent\n const offsetTop = annotationBounds.top - parentBounds.top;\n const offsetLeft = annotationBounds.left - parentBounds.left;\n\n const scrollTop = scrollParent.parentElement ? scrollParent.scrollTop : 0;\n const scrollLeft = scrollParent.parentElement ? scrollParent.scrollLeft : 0;\n\n // Scroll the annotation to the center of the viewport\n const top = offsetTop + scrollTop - (parentHeight - height) / 2;\n const left = offsetLeft + scrollLeft - (parentWidth - width) / 2;\n\n scrollParent.scroll({ top, left, behavior: 'smooth' });\n};\n\nexport const scrollIntoView = <I extends TextAnnotation = TextAnnotation>(\n container: HTMLElement, store: TextAnnotationStore<I>\n) => <E extends Element = Element>(\n annotationOrId: string | I, scrollParentOrId?: string | E\n) => {\n const id =\n typeof annotationOrId === 'string' ? annotationOrId : annotationOrId.id;\n\n const scrollParent = scrollParentOrId\n ? typeof scrollParentOrId === 'string' ? document.getElementById(scrollParentOrId) : scrollParentOrId\n : getScrollParent(container);\n\n\n if (!scrollParent) {\n console.warn(`The scroll parent is missing for the annotation: ${id}`, { container });\n return false;\n }\n\n // Get curren version of the annotation from the store\n const current = store.getAnnotation(id);\n if (!current) {\n console.warn(`The annotation is missing in the store: ${id}`);\n return false;\n }\n\n // The first selector is the topmost one as well\n const { range: annoRange } = current.target.selector[0];\n if (annoRange && !annoRange.collapsed) {\n scroll(store, current.target, scrollParent);\n return true;\n }\n\n // Try reviving to account for lazy rendering\n const revived = reviveTarget(current.target, container);\n const { range: revivedAnnoRange } = revived.selector[0];\n if (revivedAnnoRange && !revivedAnnoRange.collapsed) {\n scroll(store, revived, scrollParent);\n return true;\n }\n\n return false;\n};\n","var G = Object.prototype.hasOwnProperty;\nfunction $(e, t) {\n var n, o;\n if (e === t) return !0;\n if (e && t && (n = e.constructor) === t.constructor) {\n if (n === Date) return e.getTime() === t.getTime();\n if (n === RegExp) return e.toString() === t.toString();\n if (n === Array) {\n if ((o = e.length) === t.length)\n for (; o-- && $(e[o], t[o]); ) ;\n return o === -1;\n }\n if (!n || typeof e == \"object\") {\n o = 0;\n for (n in e)\n if (G.call(e, n) && ++o && !G.call(t, n) || !(n in t) || !$(e[n], t[n])) return !1;\n return Object.keys(t).length === o;\n }\n }\n return e !== e && t !== t;\n}\nconst X = Symbol(\"clean\");\nlet N = [], _ = 0;\nconst z = 4, Z = globalThis.nanostoresGlobal || (globalThis.nanostoresGlobal = { epoch: 0 }), M = /* @__NO_SIDE_EFFECTS__ */ (e) => {\n let t = [], n = {\n get() {\n return n.lc || n.listen(() => {\n })(), n.value;\n },\n init: e,\n lc: 0,\n listen(o) {\n return n.lc = t.push(o), () => {\n for (let f = _ + z; f < N.length; )\n N[f] === o ? N.splice(f, z) : f += z;\n let s = t.indexOf(o);\n ~s && (t.splice(s, 1), --n.lc || n.off());\n };\n },\n notify(o, s) {\n Z.epoch++;\n let f = !N.length;\n for (let A of t)\n N.push(A, n.value, o, s);\n if (f) {\n for (_ = 0; _ < N.length; _ += z)\n N[_](\n N[_ + 1],\n N[_ + 2],\n N[_ + 3]\n );\n N.length = 0;\n }\n },\n /* It will be called on last listener unsubscribing.\n We will redefine it in onMount and onStop. */\n off() {\n },\n set(o) {\n let s = n.value;\n s !== o && (n.value = o, n.notify(s));\n },\n subscribe(o) {\n let s = n.listen(o);\n return o(n.value), s;\n },\n value: e\n };\n return process.env.NODE_ENV !== \"production\" && (n[X] = () => {\n t = [], n.lc = 0, n.off();\n }), n;\n}, Oe = (e) => {\n const t = /* @__PURE__ */ M(null);\n return e.observe(({ changes: n }) => {\n const o = t.get();\n if (o) {\n (n.deleted || []).some((A) => A.id === o) && t.set(null);\n const f = (n.updated || []).find(({ oldValue: A }) => A.id === o);\n f && t.set(f.newValue.id);\n }\n }), {\n get current() {\n return t.get();\n },\n subscribe: t.subscribe.bind(t),\n set: t.set.bind(t)\n };\n};\nvar F = /* @__PURE__ */ ((e) => (e.EDIT = \"EDIT\", e.SELECT = \"SELECT\", e.NONE = \"NONE\", e))(F || {});\nconst P = { selected: [] }, Be = (e, t, n) => {\n const o = /* @__PURE__ */ M(P);\n let s = t;\n const f = () => {\n $(o.get(), P) || o.set(P);\n }, A = () => {\n var g;\n return ((g = o.get().selected) == null ? void 0 : g.length) === 0;\n }, w = (g) => {\n if (A())\n return !1;\n const b = typeof g == \"string\" ? g : g.id;\n return o.get().selected.some((L) => L.id === b);\n }, C = (g, b) => {\n let L;\n if (Array.isArray(g)) {\n if (L = g.map((i) => e.getAnnotation(i)).filter(Boolean), L.length < g.length) {\n console.warn(\"Invalid selection: \" + g.filter((i) => !L.some((u) => u.id === i)));\n return;\n }\n } else {\n const i = e.getAnnotation(g);\n if (!i) {\n console.warn(\"Invalid selection: \" + g);\n return;\n }\n L = [i];\n }\n const B = L.reduce((i, u) => {\n const h = v(u);\n return h === \"EDIT\" ? [...i, { id: u.id, editable: !0 }] : h === \"SELECT\" ? [...i, { id: u.id }] : i;\n }, []);\n o.set({ selected: B, event: b });\n }, m = (g, b) => {\n const L = Array.isArray(g) ? g : [g], B = L.map((i) => e.getAnnotation(i)).filter((i) => !!i);\n o.set({\n selected: B.map((i) => {\n const u = b === void 0 ? v(i) === \"EDIT\" : b;\n return { id: i.id, editable: u };\n })\n }), B.length !== L.length && console.warn(\"Invalid selection\", g);\n }, T = (g) => {\n if (A())\n return !1;\n const { selected: b } = o.get();\n b.some(({ id: B }) => g.includes(B)) && o.set({ selected: b.filter(({ id: B }) => !g.includes(B)) });\n }, l = (g) => {\n s = g, m(o.get().selected.map(({ id: b }) => b));\n }, v = (g) => K(g, s, n);\n return e.observe(\n ({ changes: g }) => T((g.deleted || []).map((b) => b.id))\n ), {\n get event() {\n const g = o.get();\n return g ? g.event : null;\n },\n get selected() {\n const g = o.get();\n return g ? [...g.selected] : null;\n },\n get userSelectAction() {\n return s;\n },\n clear: f,\n evalSelectAction: v,\n isEmpty: A,\n isSelected: w,\n setSelected: m,\n setUserSelectAction: l,\n subscribe: o.subscribe.bind(o),\n userSelect: C\n };\n}, K = (e, t, n) => {\n const o = n ? n.serialize(e) : e;\n return typeof t == \"function\" ? t(o) : t || \"EDIT\";\n}, R = [];\nfor (let e = 0; e < 256; ++e)\n R.push((e + 256).toString(16).slice(1));\nfunction ee(e, t = 0) {\n return (R[e[t + 0]] + R[e[t + 1]] + R[e[t + 2]] + R[e[t + 3]] + \"-\" + R[e[t + 4]] + R[e[t + 5]] + \"-\" + R[e[t + 6]] + R[e[t + 7]] + \"-\" + R[e[t + 8]] + R[e[t + 9]] + \"-\" + R[e[t + 10]] + R[e[t + 11]] + R[e[t + 12]] + R[e[t + 13]] + R[e[t + 14]] + R[e[t + 15]]).toLowerCase();\n}\nconst te = new Uint8Array(16);\nfunction ne() {\n return crypto.getRandomValues(te);\n}\nfunction H(e, t, n) {\n return crypto.randomUUID ? crypto.randomUUID() : oe(e);\n}\nfunction oe(e, t, n) {\n var s;\n e = e || {};\n const o = e.random ?? ((s = e.rng) == null ? void 0 : s.call(e)) ?? ne();\n if (o.length < 16)\n throw new Error(\"Random bytes length must be >= 16\");\n return o[6] = o[6] & 15 | 64, o[8] = o[8] & 63 | 128, ee(o);\n}\nconst De = (e) => {\n const { creator: t, updatedBy: n } = e.target, o = e.bodies.reduce((s, f) => [...s, f.creator, f.updatedBy].filter(Boolean), []);\n return [\n t,\n n,\n ...o\n ].filter((s) => s);\n}, V = (e) => {\n const t = (n) => {\n const o = { ...n };\n return n.created && typeof n.created == \"string\" && (o.created = new Date(n.created)), n.updated && typeof n.updated == \"string\" && (o.updated = new Date(n.updated)), o;\n };\n return {\n ...e,\n bodies: (e.bodies || []).map(t),\n target: t(e.target)\n };\n}, Re = (e, t, n, o) => ({\n id: H(),\n annotation: typeof e == \"string\" ? e : e.id,\n created: n || /* @__PURE__ */ new Date(),\n creator: o,\n ...t\n}), se = (e, t) => {\n const n = new Set(e.bodies.map((o) => o.id));\n return t.bodies.filter((o) => !n.has(o.id));\n}, ie = (e, t) => {\n const n = new Set(t.bodies.map((o) => o.id));\n return e.bodies.filter((o) => !n.has(o.id));\n}, de = (e, t) => t.bodies.map((n) => {\n const o = e.bodies.find((s) => s.id === n.id);\n return { newBody: n, oldBody: o && !$(o, n) ? o : void 0 };\n}).filter(({ oldBody: n }) => n).map(({ oldBody: n, newBody: o }) => ({ oldBody: n, newBody: o })), re = (e, t) => !$(e.target, t.target), W = (e, t) => {\n const n = se(e, t), o = ie(e, t), s = de(e, t);\n return {\n oldValue: e,\n newValue: t,\n bodiesCreated: n.length > 0 ? n : void 0,\n bodiesDeleted: o.length > 0 ? o : void 0,\n bodiesUpdated: s.length > 0 ? s : void 0,\n targetUpdated: re(e, t) ? { oldTarget: e.target, newTarget: t.target } : void 0\n };\n};\nvar ae = /* @__PURE__ */ ((e) => (e.BODY_ONLY = \"BODY_ONLY\", e.TARGET_ONLY = \"TARGET_ONLY\", e))(ae || {}), O = /* @__PURE__ */ ((e) => (e.LOCAL = \"LOCAL\", e.REMOTE = \"REMOTE\", e.SILENT = \"SILENT\", e))(O || {});\nconst ce = (e, t) => {\n var f, A;\n const { changes: n, origin: o } = t;\n if (!(e.options.origin ? e.options.origin === o : o !== \"SILENT\"))\n return !1;\n if (e.options.ignore) {\n const { ignore: w } = e.options, C = (T) => T && T.length > 0;\n if (!(C(n.created) || C(n.deleted))) {\n const T = (f = n.updated) == null ? void 0 : f.some((v) => C(v.bodiesCreated) || C(v.bodiesDeleted) || C(v.bodiesUpdated)), l = (A = n.updated) == null ? void 0 : A.some((v) => v.targetUpdated);\n if (w === \"BODY_ONLY\" && T && !l || w === \"TARGET_ONLY\" && l && !T)\n return !1;\n }\n }\n if (e.options.annotations) {\n const w = /* @__PURE__ */ new Set([\n ...(n.created || []).map((m) => m.id),\n ...(n.deleted || []).map((m) => m.id),\n ...(n.updated || []).map(({ oldValue: m }) => m.id)\n ]);\n return !!(Array.isArray(e.options.annotations) ? e.options.annotations : [e.options.annotations]).find((m) => w.has(m));\n } else\n return !0;\n}, le = (e, t) => {\n const n = new Set((e.created || []).map((l) => l.id)), o = new Set((e.updated || []).map(({ newValue: l }) => l.id)), s = new Set((t.created || []).map((l) => l.id)), f = new Set((t.deleted || []).map((l) => l.id)), A = new Set((t.updated || []).map(({ oldValue: l }) => l.id)), w = new Set((t.updated || []).filter(({ oldValue: l }) => n.has(l.id) || o.has(l.id)).map(({ oldValue: l }) => l.id)), C = [\n ...(e.created || []).filter((l) => !f.has(l.id)).map((l) => A.has(l.id) ? t.updated.find(({ oldValue: v }) => v.id === l.id).newValue : l),\n ...t.created || []\n ], m = [\n ...(e.deleted || []).filter((l) => !s.has(l.id)),\n ...(t.deleted || []).filter((l) => !n.has(l.id))\n ], T = [\n ...(e.updated || []).filter(({ newValue: l }) => !f.has(l.id)).map((l) => {\n const { oldValue: v, newValue: g } = l;\n if (A.has(g.id)) {\n const b = t.updated.find((L) => L.oldValue.id === g.id).newValue;\n return W(v, b);\n } else\n return l;\n }),\n ...(t.updated || []).filter(({ oldValue: l }) => !w.has(l.id))\n ];\n return { created: C, deleted: m, updated: T };\n}, Y = (e) => {\n const t = e.id === void 0 ? H() : e.id;\n return {\n ...e,\n id: t,\n bodies: e.bodies === void 0 ? [] : e.bodies.map((n) => ({\n ...n,\n annotation: t\n })),\n target: {\n ...e.target,\n annotation: t\n }\n };\n}, ue = (e) => e.id !== void 0, xe = () => {\n const e = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Map(), n = [], o = (d, r = {}) => {\n n.push({ onChange: d, options: r });\n }, s = (d) => {\n const r = n.findIndex((c) => c.onChange == d);\n r > -1 && n.splice(r, 1);\n }, f = (d, r) => {\n const c = {\n origin: d,\n changes: {\n created: r.created || [],\n updated: r.updated || [],\n deleted: r.deleted || []\n },\n state: [...e.values()]\n };\n n.forEach((p) => {\n ce(p, c) && p.onChange(c);\n });\n }, A = (d, r = O.LOCAL) => {\n if (d.id && e.get(d.id))\n throw Error(`Cannot add annotation ${d.id} - exists already`);\n {\n const p = Y(d);\n e.set(p.id, p), p.bodies.forEach((U) => t.set(U.id, p.id)), f(r, { created: [p] });\n }\n }, w = (d, r) => {\n const c = Y(typeof d == \"string\" ? r : d), p = typeof d == \"string\" ? d : d.id, U = p && e.get(p);\n if (U) {\n const y = W(U, c);\n return p === c.id ? e.set(p, c) : (e.delete(p), e.set(c.id, c)), U.bodies.forEach((D) => t.delete(D.id)), c.bodies.forEach((D) => t.set(D.id, c.id)), y;\n } else\n console.warn(`Cannot update annotation ${p} - does not exist`);\n }, C = (d, r = O.LOCAL, c = O.LOCAL) => {\n const p = ue(r) ? c : r, U = w(d, r);\n U && f(p, { updated: [U] });\n }, m = (d, r = O.LOCAL) => {\n !!e.get(d.id) ? C(d, r) : A(d, r);\n }, T = (d, r = O.LOCAL) => {\n const c = d.reduce((p, U) => {\n const y = w(U);\n return y ? [...p, y] : p;\n }, []);\n c.length > 0 && f(r, { updated: c });\n }, l = (d, r = O.LOCAL) => {\n const c = d.map(Y), { toAdd: p, toUpdate: U } = c.reduce((D, I) => e.get(I.id) ? { ...D, toUpdate: [...D.toUpdate, I] } : { ...D, toAdd: [...D.toAdd, I] }, { toAdd: [], toUpdate: [] }), y = U.map((D) => w(D, r)).filter(Boolean);\n p.forEach((D) => {\n e.set(D.id, D), D.bodies.forEach((I) => t.set(I.id, D.id));\n }), f(r, { created: p, updated: y });\n }, v = (d, r = O.LOCAL) => {\n const c = e.get(d.annotation);\n if (c) {\n const p = {\n ...c,\n bodies: [...c.bodies, d]\n };\n e.set(c.id, p), t.set(d.id, p.id), f(r, { updated: [{\n oldValue: c,\n newValue: p,\n bodiesCreated: [d]\n }] });\n } else\n console.warn(`Attempt to add body to missing annotation: ${d.annotation}`);\n }, g = () => [...e.values()], b = (d = O.LOCAL) => {\n const r = [...e.values()];\n e.clear(), t.clear(), f(d, { deleted: r });\n }, L = (d, r = !0, c = O.LOCAL) => {\n const p = d.map(Y);\n if (r) {\n const U = [...e.values()];\n e.clear(), t.clear(), p.forEach((y) => {\n e.set(y.id, y), y.bodies.forEach((D) => t.set(D.id, y.id));\n }), f(c, { created: p, deleted: U });\n } else {\n const U = d.reduce((y, D) => {\n const I = D.id && e.get(D.id);\n return I ? [...y, I] : y;\n }, []);\n if (U.length > 0)\n throw Error(`Bulk insert would overwrite the following annotations: ${U.map((y) => y.id).join(\", \")}`);\n p.forEach((y) => {\n e.set(y.id, y), y.bodies.forEach((D) => t.set(D.id, y.id));\n }), f(c, { created: p });\n }\n }, B = (d) => {\n const r = typeof d == \"string\" ? d : d.id, c = e.get(r);\n if (c)\n return e.delete(r), c.bodies.forEach((p) => t.delete(p.id)), c;\n console.warn(`Attempt to delete missing annotation: ${r}`);\n }, i = (d, r = O.LOCAL) => {\n const c = B(d);\n c && f(r, { deleted: [c] });\n }, u = (d, r = O.LOCAL) => {\n const c = d.reduce((p, U) => {\n const y = B(U);\n return y ? [...p, y] : p;\n }, []);\n c.length > 0 && f(r, { deleted: c });\n }, h = (d) => {\n const r = e.get(d.annotation);\n if (r) {\n const c = r.bodies.find((p) => p.id === d.id);\n if (c) {\n t.delete(c.id);\n const p = {\n ...r,\n bodies: r.bodies.filter((y) => y.id !== d.id)\n };\n return e.set(r.id, p), {\n oldValue: r,\n newValue: p,\n bodiesDeleted: [c]\n };\n } else\n console.warn(`Attempt to delete missing body ${d.id} from annotation ${d.annotation}`);\n } else\n console.warn(`Attempt to delete body from missing annotation ${d.annotation}`);\n }, E = (d, r = O.LOCAL) => {\n const c = h(d);\n c && f(r, { updated: [c] });\n }, a = (d, r = O.LOCAL) => {\n const c = d.map((p) => h(p)).filter(Boolean);\n c.length > 0 && f(r, { updated: c });\n }, S = (d) => {\n const r = e.get(d);\n return r ? { ...r } : void 0;\n }, x = (d) => {\n const r = t.get(d);\n if (r) {\n const p = S(r).bodies.find((U) => U.id === d);\n if (p)\n return p;\n console.error(`Store integrity error: body ${d} in index, but not in annotation`);\n } else\n console.warn(`Attempt to retrieve missing body: ${d}`);\n }, k = (d, r) => {\n if (d.annotation !== r.annotation)\n throw \"Annotation integrity violation: annotation ID must be the same when updating bodies\";\n const c = e.get(d.annotation);\n if (c) {\n const p = c.bodies.find((y) => y.id === d.id), U = {\n ...c,\n bodies: c.bodies.map((y) => y.id === p.id ? r : y)\n };\n return e.set(c.id, U), p.id !== r.id && (t.delete(p.id), t.set(r.id, U.id)), {\n oldValue: c,\n newValue: U,\n bodiesUpdated: [{ oldBody: p, newBody: r }]\n };\n } else\n console.warn(`Attempt to add body to missing annotation ${d.annotation}`);\n }, Q = (d, r, c = O.LOCAL) => {\n const p = k(d, r);\n p && f(c, { updated: [p] });\n }, J = (d, r = O.LOCAL) => {\n const c = d.map((p) => k({ id: p.id, annotation: p.annotation }, p)).filter(Boolean);\n f(r, { updated: c });\n }, j = (d) => {\n const r = e.get(d.annotation);\n if (r) {\n const c = {\n ...r,\n target: {\n ...r.target,\n ...d\n }\n };\n return e.set(r.id, c), {\n oldValue: r,\n newValue: c,\n targetUpdated: {\n oldTarget: r.target,\n newTarget: d\n }\n };\n } else\n console.warn(`Attempt to update target on missing annotation: ${d.annotation}`);\n };\n return {\n addAnnotation: A,\n addBody: v,\n all: g,\n bulkAddAnnotations: L,\n bulkDeleteAnnotations: u,\n bulkDeleteBodies: a,\n bulkUpdateAnnotations: T,\n bulkUpdateBodies: J,\n bulkUpdateTargets: (d, r = O.LOCAL) => {\n const c = d.map((p) => j(p)).filter(Boolean);\n c.length > 0 && f(r, { updated: c });\n },\n bulkUpsertAnnotations: l,\n clear: b,\n deleteAnnotation: i,\n deleteBody: E,\n getAnnotation: S,\n getBody: x,\n observe: o,\n unobserve: s,\n updateAnnotation: C,\n updateBody: Q,\n updateTarget: (d, r = O.LOCAL) => {\n const c = j(d);\n c && f(r, { updated: [c] });\n },\n upsertAnnotation: m\n };\n};\nlet q = () => ({\n emit(e, ...t) {\n for (let n = this.events[e] || [], o = 0, s = n.length; o < s; o++)\n n[o](...t);\n },\n events: {},\n on(e, t) {\n var n;\n return ((n = this.events)[e] || (n[e] = [])).push(t), () => {\n var o;\n this.events[e] = (o = this.events[e]) == null ? void 0 : o.filter((s) => t !== s);\n };\n }\n});\nconst fe = 250, Ne = (e, t) => {\n const n = q(), o = (t == null ? void 0 : t.changes) || [];\n let s = t ? t.pointer : -1, f = !1, A = 0;\n const w = (a) => {\n if (!f) {\n const { changes: S } = a, x = performance.now();\n if (x - A > fe)\n o.splice(s + 1), o.push(S), s = o.length - 1;\n else {\n const k = o.length - 1;\n o[k] = le(o[k], S);\n }\n A = x;\n }\n f = !1;\n };\n e.observe(w, { origin: O.LOCAL });\n const C = (a) => a && a.length > 0 && e.bulkDeleteAnnotations(a), m = (a) => a && a.length > 0 && e.bulkAddAnnotations(a, !1), T = (a) => a && a.length > 0 && e.bulkUpdateAnnotations(a.map(({ oldValue: S }) => S)), l = (a) => a && a.length > 0 && e.bulkUpdateAnnotations(a.map(({ newValue: S }) => S)), v = (a) => a && a.length > 0 && e.bulkAddAnnotations(a, !1), g = (a) => a && a.length > 0 && e.bulkDeleteAnnotations(a);\n return {\n canRedo: () => o.length - 1 > s,\n canUndo: () => s > -1,\n destroy: () => e.unobserve(w),\n getHistory: () => ({ changes: [...o], pointer: s }),\n on: (a, S) => n.on(a, S),\n redo: () => {\n if (o.length - 1 > s) {\n f = !0;\n const { created: a, updated: S, deleted: x } = o[s + 1];\n m(a), l(S), g(x), n.emit(\"redo\", o[s + 1]), s += 1;\n }\n },\n undo: () => {\n if (s > -1) {\n f = !0;\n const { created: a, updated: S, deleted: x } = o[s];\n C(a), T(S), v(x), n.emit(\"undo\", o[s]), s -= 1;\n }\n }\n };\n}, ke = () => {\n const e = /* @__PURE__ */ M([]);\n return {\n subscribe: e.subscribe.bind(e),\n set: e.set.bind(e)\n };\n}, Ie = (e, t, n, o) => {\n const { hover: s, selection: f, store: A, viewport: w } = e, C = /* @__PURE__ */ new Map();\n let m = [], T, l;\n const v = (i, u) => {\n C.has(i) ? C.get(i).push(u) : C.set(i, [u]);\n }, g = (i, u) => {\n const h = C.get(i);\n if (h) {\n const E = h.indexOf(u);\n E !== -1 && h.splice(E, 1);\n }\n }, b = (i, u, h) => {\n C.has(i) && setTimeout(() => {\n C.get(i).forEach((E) => {\n if (n) {\n const a = Array.isArray(u) ? u.map((x) => n.serialize(x)) : n.serialize(u), S = h ? h instanceof PointerEvent ? h : n.serialize(h) : void 0;\n E(a, S);\n } else\n E(u, h);\n });\n }, 1);\n }, L = () => {\n const { selected: i } = f, u = (i || []).map(({ id: h }) => A.getAnnotation(h));\n u.forEach((h) => {\n const E = m.find((a) => a.id === h.id);\n (!E || !$(E, h)) && b(\"updateAnnotation\", h, E);\n }), m = m.map((h) => {\n const E = u.find(({ id: a }) => a === h.id);\n return E || h;\n });\n };\n f.subscribe(({ selected: i }) => {\n if (!(m.length === 0 && i.length === 0)) {\n if (m.length === 0 && i.length > 0)\n m = i.map(({ id: u }) => A.getAnnotation(u));\n else if (m.length > 0 && i.length === 0)\n m.forEach((u) => {\n const h = A.getAnnotation(u.id);\n h && !$(h, u) && b(\"updateAnnotation\", h, u);\n }), m = [];\n else {\n const u = new Set(m.map((a) => a.id)), h = new Set(i.map(({ id: a }) => a));\n m.filter((a) => !h.has(a.id)).forEach((a) => {\n const S = A.getAnnotation(a.id);\n S && !$(S, a) && b(\"updateAnnotation\", S, a);\n }), m = [\n // Remove annotations that were deselected\n ...m.filter((a) => h.has(a.id)),\n // Add editable annotations that were selected\n ...i.filter(({ id: a }) => !u.has(a)).map(({ id: a }) => A.getAnnotation(a))\n ];\n }\n b(\"selectionChanged\", m);\n }\n }), s.subscribe((i) => {\n !T && i ? b(\"mouseEnterAnnotation\", A.getAnnotation(i)) : T && !i ? b(\"mouseLeaveAnnotation\", A.getAnnotation(T)) : T && i && (b(\"mouseLeaveAnnotation\", A.getAnnotation(T)), b(\"mouseEnterAnnotation\", A.getAnnotation(i))), T = i;\n }), w == null || w.subscribe((i) => b(\"viewportIntersect\", i.map((u) => A.getAnnotation(u)))), A.observe((i) => {\n o && (l && clearTimeout(l), l = setTimeout(L, 1e3));\n const { created: u, deleted: h } = i.changes;\n (u || []).forEach((a) => b(\"createAnnotation\", a)), (h || []).forEach((a) => b(\"deleteAnnotation\", a)), (i.changes.updated || []).filter((a) => [\n ...a.bodiesCreated || [],\n ...a.bodiesDeleted || [],\n ...a.bodiesUpdated || []\n ].length > 0).forEach(({ oldValue: a, newValue: S }) => {\n const x = m.find((k) => k.id === a.id) || a;\n m = m.map((k) => k.id === a.id ? S : k), b(\"updateAnnotation\", S, x);\n });\n }, { origin: O.LOCAL }), A.observe((i) => {\n if (m) {\n const u = new Set(m.map((E) => E.id)), h = (i.changes.updated || []).filter(({ newValue: E }) => u.has(E.id)).map(({ newValue: E }) => E);\n h.length > 0 && (m = m.map((E) => {\n const a = h.find((S) => S.id === E.id);\n return a || E;\n }));\n }\n }, { origin: O.REMOTE });\n const B = (i) => (u) => {\n const { updated: h } = u;\n i ? (h || []).forEach((E) => b(\"updateAnnotation\", E.oldValue, E.newValue)) : (h || []).forEach((E) => b(\"updateAnnotation\", E.newValue, E.oldValue));\n };\n return t.on(\"undo\", B(!0)), t.on(\"redo\", B(!1)), { on: v, off: g, emit: b };\n}, _e = (e) => (t) => t.map((n) => e.serialize(n)), pe = (e) => (t) => t.reduce((n, o) => {\n const { parsed: s, error: f } = e.parse(o);\n return f ? {\n parsed: n.parsed,\n failed: [...n.failed, o]\n } : s ? {\n parsed: [...n.parsed, s],\n failed: n.failed\n } : {\n ...n\n };\n}, { parsed: [], failed: [] }), $e = (e, t, n) => {\n const { store: o, selection: s } = e, f = (i) => {\n if (n) {\n const { parsed: u, error: h } = n.parse(i);\n u ? o.addAnnotation(u, O.REMOTE) : console.error(h);\n } else\n o.addAnnotation(V(i), O.REMOTE);\n }, A = () => s.clear(), w = () => o.clear(), C = (i) => {\n const u = o.getAnnotation(i);\n return n && u ? n.serialize(u) : u;\n }, m = () => n ? o.all().map(n.serialize) : o.all(), T = () => {\n var h;\n const u = (((h = s.selected) == null ? void 0 : h.map((E) => E.id)) || []).map((E) => o.getAnnotation(E)).filter(Boolean);\n return n ? u.map(n.serialize) : u;\n }, l = (i, u = !0) => fetch(i).then((h) => h.json()).then((h) => (g(h, u), h)), v = (i) => {\n if (typeof i == \"string\") {\n const u = o.getAnnotation(i);\n if (o.deleteAnnotation(i), u)\n return n ? n.serialize(u) : u;\n } else {\n const u = n ? n.parse(i).parsed : i;\n if (u)\n return o.deleteAnnotation(u), i;\n }\n }, g = (i, u = !0) => {\n if (n) {\n const h = n.parseAll || pe(n), { parsed: E, failed: a } = h(i);\n a.length > 0 && console.warn(`Discarded ${a.length} invalid annotations`, a), o.bulkAddAnnotations(E, u, O.REMOTE);\n } else\n o.bulkAddAnnotations(i.map(V), u, O.REMOTE);\n }, b = (i, u) => {\n i ? s.setSelected(i, u) : s.clear();\n }, L = (i) => {\n s.setUserSelectAction(i);\n }, B = (i) => {\n if (n) {\n const u = n.parse(i).parsed, h = n.serialize(o.getAnnotation(u.id));\n return o.updateAnnotation(u), h;\n } else {\n const u = o.getAnnotation(i.id);\n return o.updateAnnotation(V(i)), u;\n }\n };\n return {\n addAnnotation: f,\n cancelSelected: A,\n canRedo: t.canRedo,\n canUndo: t.canUndo,\n clearAnnotations: w,\n getAnnotationById: C,\n getAnnotations: m,\n getHistory: t.getHistory,\n getSelected: T,\n loadAnnotations: l,\n redo: t.redo,\n removeAnnotation: v,\n setAnnotations: g,\n setSelected: b,\n setUserSelectAction: L,\n undo: t.undo,\n updateAnnotation: B\n };\n}, Ye = (e, t, n) => typeof t == \"function\" ? t(e, n) : t, ze = (e, t) => typeof e != \"function\" && typeof t != \"function\" ? {\n ...e || {},\n ...t || {}\n} : (n, o) => {\n const s = typeof e == \"function\" ? e(n, o) : e, f = typeof t == \"function\" ? t(n, o) : t;\n return {\n ...s || {},\n ...f || {}\n };\n};\nlet ge = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\", he = (e) => crypto.getRandomValues(new Uint8Array(e)), Ae = (e, t, n) => {\n let o = 256 - 256 % e.length;\n if (o === 256) {\n let f = e.length - 1;\n return (A = t) => {\n if (!A) return \"\";\n let w = \"\";\n for (; ; ) {\n let C = n(A), m = A;\n for (; m--; )\n if (w += e[C[m] & f], w.length >= A) return w;\n }\n };\n }\n let s = Math.ceil(1.6 * 256 * t / o);\n return (f = t) => {\n if (!f) return \"\";\n let A = \"\";\n for (; ; ) {\n let w = n(s), C = s;\n for (; C--; )\n if (w[C] < o && (A += e[w[C] % e.length], A.length >= f))\n return A;\n }\n };\n}, me = (e, t = 21) => Ae(e, t | 0, he), be = (e = 21) => {\n let t = \"\", n = crypto.getRandomValues(new Uint8Array(e |= 0));\n for (; e--; )\n t += ge[n[e] & 63];\n return t;\n};\nconst Pe = () => ({ isGuest: !0, id: me(\"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_\", 20)() }), ve = (e) => {\n const t = JSON.stringify(e);\n let n = 0;\n for (let o = 0, s = t.length; o < s; o++) {\n let f = t.charCodeAt(o);\n n = (n << 5) - n + f, n |= 0;\n }\n return `${n}`;\n}, Ee = (e) => e ? typeof e == \"object\" ? { ...e } : e : void 0, Ve = (e, t) => (Array.isArray(e) ? e : [e]).map((n) => {\n const { id: o, type: s, purpose: f, value: A, created: w, modified: C, creator: m, ...T } = n;\n return {\n id: o || `temp-${ve(n)}`,\n annotation: t,\n type: s,\n purpose: f,\n value: A,\n creator: Ee(m),\n created: w ? new Date(w) : void 0,\n updated: C ? new Date(C) : void 0,\n ...T\n };\n}), Me = (e) => e.map((t) => {\n var w;\n const { annotation: n, created: o, updated: s, ...f } = t, A = {\n ...f,\n created: o == null ? void 0 : o.toISOString(),\n modified: s == null ? void 0 : s.toISOString()\n };\n return (w = A.id) != null && w.startsWith(\"temp-\") && delete A.id, A;\n}), je = (e) => \"@context\" in e && \"creator\" in e && \"body\" in e, we = [\n \"#ff7c00\",\n // orange\n \"#1ac938\",\n // green\n \"#e8000b\",\n // red\n \"#8b2be2\",\n // purple\n \"#9f4800\",\n // brown\n \"#f14cc1\",\n // pink\n \"#ffc400\",\n // khaki\n \"#00d7ff\",\n // cyan\n \"#023eff\"\n // blue\n], Ce = () => {\n const e = [...we];\n return { assignRandomColor: () => {\n const o = Math.floor(Math.random() * e.length), s = e[o];\n return e.splice(o, 1), s;\n }, releaseColor: (o) => e.push(o) };\n}, Le = () => {\n const e = Ce();\n return { addUser: (o, s) => {\n const f = e.assignRandomColor();\n return {\n label: s.name || s.id,\n avatar: s.avatar,\n color: f\n };\n }, removeUser: (o) => e.releaseColor(o.appearance.color) };\n}, ye = (e, t) => e.every((n) => e.includes(n)) && t.every((n) => e.includes(n)), Ge = be(), He = (e = Le()) => {\n const t = q(), n = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), s = (l, v) => {\n if (n.has(l)) {\n console.warn(\"Attempt to add user that is already present\", l, v);\n return;\n }\n const g = e.addUser(l, v);\n n.set(l, {\n ...v,\n presenceKey: l,\n appearance: g\n });\n }, f = (l) => {\n const v = n.get(l);\n if (!v) {\n console.warn(\"Attempt to remove user that is not present\", l);\n return;\n }\n e.removeUser(v), n.delete(l);\n }, A = (l) => {\n const v = new Set(l.map((L) => L.presenceKey)), g = l.filter(({ presenceKey: L }) => !n.has(L)), b = Array.from(n.values()).filter((L) => !v.has(L.presenceKey));\n g.forEach(({ presenceKey: L, user: B }) => s(L, B)), b.forEach((L) => {\n const { presenceKey: B } = L;\n o.has(B) && t.emit(\"selectionChange\", L, null), f(B);\n }), (g.length > 0 || b.length > 0) && t.emit(\"presence\", m());\n }, w = (l, v) => {\n const g = n.get(l);\n if (!g) {\n console.warn(\"Activity notification from user that is not present\");\n return;\n }\n const b = o.get(l);\n (!b || !ye(b, v)) && (o.set(l, v), t.emit(\"selectionChange\", g, v));\n }, C = (l, v) => {\n const g = n.get(l);\n if (!g) {\n console.warn(\"Selection change for user that is not present\", l);\n return;\n }\n v ? o.set(l, v) : o.delete(l), t.emit(\"selectionChange\", g, v);\n }, m = () => [...Array.from(n.values())];\n return {\n getPresentUsers: m,\n notifyActivity: w,\n on: (l, v) => t.on(l, v),\n syncUsers: A,\n updateSelection: C\n };\n};\nexport {\n ae as Ignore,\n O as Origin,\n Ge as PRESENCE_KEY,\n F as UserSelectAction,\n ze as chainStyles,\n Ye as computeStyle,\n Pe as createAnonymousGuest,\n $e as createBaseAnnotator,\n Re as createBody,\n Le as createDefaultAppearanceProvider,\n Oe as createHoverState,\n Ie as createLifecycleObserver,\n He as createPresenceState,\n Be as createSelectionState,\n xe as createStore,\n Ne as createUndoStack,\n ke as createViewportState,\n Ce as defaultColorProvider,\n W as diffAnnotations,\n De as getContributors,\n je as isW3CAnnotation,\n le as mergeChanges,\n K as onUserSelect,\n pe as parseAll,\n Ve as parseW3CBodies,\n Ee as parseW3CUser,\n V as reviveDates,\n _e as serializeAll,\n Me as serializeW3CBodies,\n ce as shouldNotify\n};\n//# sourceMappingURL=annotorious-core.es.js.map\n","import { v4 as uuidv4 } from 'uuid';\nimport type { TextAnnotation, TextAnnotationTarget, TextSelector } from '../core';\nimport type { W3CTextAnnotation, W3CTextAnnotationTarget, W3CTextSelector } from './';\nimport { getQuoteContext } from '../../utils/annotation';\nimport {\n type FormatAdapter,\n type ParseResult,\n parseW3CBodies,\n parseW3CUser,\n serializeW3CBodies\n} from '@annotorious/core';\n\nexport type W3CTextFormatAdapter<I extends TextAnnotation = TextAnnotation, E extends W3CTextAnnotation = W3CTextAnnotation> = FormatAdapter<I, E>;\n\n/**\n * @param source - the IRI of the annotated content\n * @param container - the HTML container of the annotated content,\n * Required to locate the content's `range` within the DOM\n */\nexport const W3CTextFormat =<I extends TextAnnotation = TextAnnotation, E extends W3CTextAnnotation = W3CTextAnnotation>(\n source: string,\n container?: HTMLElement\n): W3CTextFormatAdapter<I, E> => ({\n parse: (serialized) => parseW3CTextAnnotation(serialized),\n serialize: (annotation) => serializeW3CTextAnnotation(annotation, source, container)\n});\n\nconst isTextSelector = (selector: Partial<TextSelector>): selector is TextSelector =>\n selector.quote !== undefined && selector.start !== undefined && selector.end !== undefined;\n\nconst parseW3CTextTargets = (annotation: W3CTextAnnotation) => {\n const {\n id: annotationId,\n creator,\n created,\n modified,\n target\n } = annotation;\n\n const w3cTargets = Array.isArray(target) ? target : [target];\n if (w3cTargets.length === 0) {\n return { error: Error(`No targets found for annotation: ${annotation.id}`) };\n }\n\n const parsed: TextAnnotationTarget = {\n creator: parseW3CUser(creator),\n created: created ? new Date(created) : undefined,\n updated: modified ? new Date(modified) : undefined,\n annotation: annotationId,\n selector: [],\n // @ts-expect-error: `styleClass` is not part of the core `TextAnnotationTarget` type\n styleClass: 'styleClass' in w3cTargets[0] ? w3cTargets[0].styleClass : undefined\n };\n\n for (const w3cTarget of w3cTargets) {\n const w3cSelectors = Array.isArray(w3cTarget.selector) ? w3cTarget.selector : [w3cTarget.selector];\n\n const selector = w3cSelectors.reduce<Partial<TextSelector>>((s, w3cSelector) => {\n switch (w3cSelector.type) {\n case 'TextQuoteSelector':\n s.quote = w3cSelector.exact;\n break;\n case 'TextPositionSelector':\n s.start = w3cSelector.start;\n s.end = w3cSelector.end;\n break;\n }\n return s;\n }, {});\n\n if (isTextSelector(selector)) {\n parsed.selector.push(\n {\n ...selector,\n id: w3cTarget.id,\n // @ts-expect-error: `scope` is not part of the core `TextSelector` type\n scope: w3cTarget.scope\n }\n );\n } else {\n const missingTypes = [\n !selector.start ? 'TextPositionSelector' : undefined,\n !selector.quote ? 'TextQuoteSelector' : undefined\n ].filter(Boolean);\n\n return { error: Error(`Missing selector types: ${missingTypes.join(' and ')} for annotation: ${annotation.id}`) };\n }\n }\n\n return { parsed };\n};\n\nexport const parseW3CTextAnnotation = <I extends TextAnnotation = TextAnnotation, E extends W3CTextAnnotation = W3CTextAnnotation>(\n annotation: E\n): ParseResult<I> => {\n const annotationId = annotation.id || uuidv4();\n\n const {\n creator,\n created,\n modified,\n body,\n ...rest\n } = annotation;\n\n const bodies = parseW3CBodies(body, annotationId);\n const target = parseW3CTextTargets(annotation);\n\n const parseResult = 'error' in target\n ? { error: target.error }\n : {\n parsed: {\n ...rest,\n id: annotationId,\n bodies,\n target: target.parsed\n }\n };\n\n return parseResult as ParseResult<I>;\n\n};\n\nexport const serializeW3CTextAnnotation = <I extends TextAnnotation = TextAnnotation, E extends W3CTextAnnotation = W3CTextAnnotation>(\n annotation: I,\n source: string,\n container?: HTMLElement\n): E => {\n const { bodies, target, ...rest } = annotation;\n\n const {\n selector,\n creator,\n created,\n updated,\n ...targetRest\n } = target;\n\n const w3cTargets = selector.map((s): W3CTextAnnotationTarget => {\n const { id, quote, start, end, range } = s;\n\n const quoteSelector: W3CTextSelector = {\n type: 'TextQuoteSelector',\n exact: quote\n }\n\n if (container) {\n const { prefix, suffix } = getQuoteContext(range, container);\n quoteSelector.prefix = prefix;\n quoteSelector.suffix = suffix;\n }\n\n const positionSelector: W3CTextSelector = {\n type: 'TextPositionSelector',\n start,\n end\n }\n\n return {\n ...targetRest,\n id,\n // @ts-expect-error: `scope` is not part of the core `TextSelector` type\n scope: 'scope' in s ? s.scope : undefined,\n source,\n selector: [quoteSelector, positionSelector]\n };\n });\n\n return {\n ...rest,\n '@context': 'http://www.w3.org/ns/anno.jsonld',\n id: annotation.id,\n type: 'Annotation',\n body: serializeW3CBodies(annotation.bodies),\n creator,\n created: created?.toISOString(),\n modified: updated?.toISOString(),\n target: w3cTargets\n } as unknown as E;\n\n};\n","export let createNanoEvents = () => ({\n emit(event, ...args) {\n for (\n let callbacks = this.events[event] || [],\n i = 0,\n length = callbacks.length;\n i < length;\n i++\n ) {\n callbacks[i](...args)\n }\n },\n events: {},\n on(event, cb) {\n ;(this.events[event] ||= []).push(cb)\n return () => {\n this.events[event] = this.events[event]?.filter(i => cb !== i)\n }\n }\n})\n","import { NOT_ANNOTATABLE_SELECTOR } from '../dom';\n\n/**\n * Calls .preventDefault() on click events in annotable areas, in order\n * to prevent problematic default browser behavior. (Specifically: keep\n * Chrome Android from triggering word selection on single click.)\n */\nexport const cancelSingleClickEvents = (container: HTMLElement) =>\n container.addEventListener('click', event => {\n const targetElement = event.target as HTMLElement;\n\n const shouldPrevent =\n // Allow clicks within not-annotatable elements\n !targetElement.closest(NOT_ANNOTATABLE_SELECTOR)\n // Allow clicks on links\n && !(event.target as Element).closest('a');\n\n if (shouldPrevent)\n event.preventDefault();\n });\n","/**\n * Events need to be manually mapped into new objects:\n * 1. It preserves the `target` and `currentTarget` properties.\n * Otherwise, they will be `null` when the event is read beyond the handler.\n * 2. Spread operator can copy only own enumerable properties, not inherited ones.\n * Therefore, we need to manually copy the props we're interested in.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget\n * @see https://github.com/recogito/text-annotator-js/commit/65d13f3108c429311cf8c2523f6babbbc946013d#r144041390\n */\n\nexport const clonePointerEvent = (event: PointerEvent): PointerEvent => ({\n ...event,\n type: event.type,\n x: event.x,\n y: event.y,\n clientX: event.clientX,\n clientY: event.clientY,\n offsetX: event.offsetX,\n offsetY: event.offsetY,\n screenX: event.screenX,\n screenY: event.screenY,\n isPrimary: event.isPrimary,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n button: event.button,\n buttons: event.buttons,\n currentTarget: event.currentTarget,\n target: event.target,\n defaultPrevented: event.defaultPrevented,\n detail: event.detail,\n eventPhase: event.eventPhase,\n pointerId: event.pointerId,\n pointerType: event.pointerType,\n timeStamp: event.timeStamp\n})\n\nexport const cloneKeyboardEvent = (event: KeyboardEvent): KeyboardEvent => ({\n ...event,\n type: event.type,\n key: event.key,\n code: event.code,\n location: event.location,\n repeat: event.repeat,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n currentTarget: event.currentTarget,\n target: event.target,\n defaultPrevented: event.defaultPrevented,\n detail: event.detail,\n timeStamp: event.timeStamp\n})\n","export const debounce = <T extends (...args: any[]) => void>(func: T, delay = 10): T => {\n\tlet timeoutId: ReturnType<typeof setTimeout>;\n\n\treturn ((...args: any[]) => {\n\t\tclearTimeout(timeoutId);\n\t\ttimeoutId = setTimeout(() => func.apply(this, args), delay);\n\t}) as T;\n}","import { createNanoEvents, type Unsubscribe } from 'nanoevents';\nimport { UserSelectAction, type Filter, type ViewportState } from '@annotorious/core';\nimport type { TextAnnotation } from '../model';\nimport type { TextAnnotatorState } from '../state';\nimport { \n type Highlight,\n type HighlightStyleExpression,\n type ViewportBounds,\n getViewportBounds, \n trackViewport \n} from './';\n// Note that the debounce npm package has the same issue as below under\n// some circumstances:\n// https://github.com/agentcooper/react-pdf-highlighter/issues/276\nimport { debounce } from '../utils/events';\n\n/**\n * The renderer runtime interface.\n */\nexport interface Renderer {\n\n destroy(): void;\n\n on: <E extends keyof RendererEvents>(event: E, callback: RendererEvents[E]) => Unsubscribe;\n\n redraw(force?: boolean): void;\n\n setStyle(style?: HighlightStyleExpression, id?: string): void;\n\n setFilter(filter?: Filter): void;\n\n setVisible(visible: boolean): void;\n\n}\n\nexport interface RendererEvents {\n\n onRedraw(): void;\n\n}\n\nexport type RendererFactory = (\n\n container: HTMLElement,\n\n state: TextAnnotatorState<TextAnnotation, unknown>,\n\n viewport: ViewportState\n\n) => Renderer;\n\n/**\n * A utility interface. Instead of implementing a Renderer from scratch,\n * implementers can simply implement a painter, and wrap it in the\n * BaseRenderer, which will handle common concerns.\n */\nexport interface Painter {\n\n destroy(): void;\n\n redraw(\n highlights:Highlight[], \n bounds: ViewportBounds, \n style?: HighlightStyleExpression,\n styleOverrides?: Map<string, HighlightStyleExpression>,\n force?: boolean\n ): void;\n\n setVisible(visible: boolean): void;\n\n}\n\nexport const createRenderer = <T extends TextAnnotatorState = TextAnnotatorState> (\n painter: Painter,\n container: HTMLElement, \n state: T,\n viewport: ViewportState,\n): Renderer => {\n const { store, selection, hover } = state;\n\n const emitter = createNanoEvents<RendererEvents>();\n\n let currentStyle: HighlightStyleExpression | undefined;\n\n const styleOverrides = new Map<string, HighlightStyleExpression>();\n\n let currentFilter: Filter | undefined;\n\n const onDraw = trackViewport(viewport);\n\n const onPointerMove = (event: PointerEvent) => {\n const {x, y} = container.getBoundingClientRect();\n\n // TODO this may be a bit of an edge case... but ideally we'd retrieve the whole \n // stack of annotations, and then evaluate if ANY of them is clickable.\n const hit = store.getAt(event.clientX - x, event.clientY - y, false, currentFilter);\n if (hit && state.selection.evalSelectAction(hit) !== UserSelectAction.NONE) {\n if (hover.current !== hit.id) {\n container.classList.add('hovered');\n hover.set(hit.id);\n }\n } else {\n if (hover.current) {\n container.classList.remove('hovered');\n hover.set(null);\n }\n }\n }\n\n container.addEventListener('pointermove', onPointerMove);\n\n const redraw = debounce((force: boolean = false) => requestAnimationFrame(() => {\n const bounds = getViewportBounds(container); \n\n const { minX, minY, maxX, maxY } = bounds;\n \n const annotationsInView = currentFilter\n ? store.getIntersecting(minX, minY, maxX, maxY).filter(({ annotation }) => currentFilter(annotation))\n : store.getIntersecting(minX, minY, maxX, maxY);\n\n const selectedIds = selection.selected.map(({ id }) => id);\n\n const highlights: Highlight[] = annotationsInView.map(({ annotation, rects }) => {\n const selected = selectedIds.includes(annotation.id);\n const hovered = annotation.id === hover.current;\n\n return {\n annotation,\n rects,\n state: { selected, hovered }\n };\n });\n\n painter.redraw(highlights, bounds, currentStyle, styleOverrides, force);\n\n setTimeout(() => {\n onDraw(annotationsInView.map(({ annotation }) => annotation));\n emitter.emit('onRedraw')\n }, 1);\n }), 10);\n\n const setStyle = (style?: HighlightStyleExpression, id?: string) => {\n if (id) {\n if (style)\n styleOverrides.set(id, style);\n else\n styleOverrides.delete(id);\n } else {\n currentStyle = style;\n }\n\n // console.log('[base-renderer] redrawing style change');\n redraw(true);\n }\n\n const setFilter = (filter?: Filter) => {\n currentFilter = filter;\n // console.log('[base-renderer] redrawing filter change');\n redraw(false);\n } \n\n const on = <E extends keyof RendererEvents>(event: E, callback: RendererEvents[E]): Unsubscribe => \n emitter.on(event, callback);\n\n // Refresh on store change\n const onStoreChange = () => {\n // console.log('[base-renderer] redrawing store change');\n redraw();\n }\n\n store.observe(onStoreChange);\n\n // Refresh on selection change\n const unsubscribeSelection = selection.subscribe(() => {\n // console.log('[base-renderer] redrawing selection change');\n redraw();\n });\n\n // Refresh on hover change\n const unsubscribeHover = hover.subscribe(() => {\n // console.log('[base-renderer] redrawing hover change');\n redraw()\n });\n\n // Refresh on scroll\n const onScroll = () => {\n // console.log('[base-renderer] redrawing scroll');\n redraw(true);\n }\n\n document.addEventListener('scroll', onScroll, { capture: true, passive: true });\n\n // Refresh on resize\n const onResize = debounce(() => {\n store.recalculatePositions();\n // console.log('[base-renderer] redrawing resize');\n redraw();\n }, 10);\n\n window.addEventListener('resize', onResize);\n\n const resizeObserver = new ResizeObserver(onResize);\n resizeObserver.observe(container);\n\n // This is an extra precaution. The position of the container\n // might shift (without resizing) due to layout changes higher-up\n // in the DOM. (This happens in Recogito for example)\n const config: MutationObserverInit = { attributes: true, childList: true, subtree: true };\n\n const mutationObserver = new MutationObserver(debounce((records: MutationRecord[]) => {\n const isInternal = records\n .every(record => record.target === container || container.contains(record.target));\n\n if (!isInternal) {\n // console.log('[base-renderer] redrawing mutation');\n redraw(true);\n }\n }, 150));\n\n mutationObserver.observe(document.body, config);\n\n const destroy = () => {\n container.removeEventListener('pointermove', onPointerMove);\n \n painter.destroy();\n \n store.unobserve(onStoreChange);\n\n unsubscribeSelection();\n unsubscribeHover();\n\n document.removeEventListener('scroll', onScroll);\n\n // onResize.clear();\n window.removeEventListener('resize', onResize);\n resizeObserver.disconnect();\n\n mutationObserver.disconnect();\n }\n\n return {\n destroy,\n on,\n redraw,\n setStyle,\n setFilter,\n setVisible: painter.setVisible.bind(painter)\n }\n\n}\n","var r={grad:.9,turn:360,rad:360/(2*Math.PI)},t=function(r){return\"string\"==typeof r?r.length>0:\"number\"==typeof r},n=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=Math.pow(10,t)),Math.round(n*r)/n+0},e=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=1),r>n?n:r>t?r:t},u=function(r){return(r=isFinite(r)?r%360:0)>0?r:r+360},a=function(r){return{r:e(r.r,0,255),g:e(r.g,0,255),b:e(r.b,0,255),a:e(r.a)}},o=function(r){return{r:n(r.r),g:n(r.g),b:n(r.b),a:n(r.a,3)}},i=/^#([0-9a-f]{3,8})$/i,s=function(r){var t=r.toString(16);return t.length<2?\"0\"+t:t},h=function(r){var t=r.r,n=r.g,e=r.b,u=r.a,a=Math.max(t,n,e),o=a-Math.min(t,n,e),i=o?a===t?(n-e)/o:a===n?2+(e-t)/o:4+(t-n)/o:0;return{h:60*(i<0?i+6:i),s:a?o/a*100:0,v:a/255*100,a:u}},b=function(r){var t=r.h,n=r.s,e=r.v,u=r.a;t=t/360*6,n/=100,e/=100;var a=Math.floor(t),o=e*(1-n),i=e*(1-(t-a)*n),s=e*(1-(1-t+a)*n),h=a%6;return{r:255*[e,i,o,o,s,e][h],g:255*[s,e,e,i,o,o][h],b:255*[o,o,s,e,e,i][h],a:u}},g=function(r){return{h:u(r.h),s:e(r.s,0,100),l:e(r.l,0,100),a:e(r.a)}},d=function(r){return{h:n(r.h),s:n(r.s),l:n(r.l),a:n(r.a,3)}},f=function(r){return b((n=(t=r).s,{h:t.h,s:(n*=((e=t.l)<50?e:100-e)/100)>0?2*n/(e+n)*100:0,v:e+n,a:t.a}));var t,n,e},c=function(r){return{h:(t=h(r)).h,s:(u=(200-(n=t.s))*(e=t.v)/100)>0&&u<200?n*e/100/(u<=100?u:200-u)*100:0,l:u/2,a:t.a};var t,n,e,u},l=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,p=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s+([+-]?\\d*\\.?\\d+)%\\s+([+-]?\\d*\\.?\\d+)%\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,v=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,m=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,y={string:[[function(r){var t=i.exec(r);return t?(r=t[1]).length<=4?{r:parseInt(r[0]+r[0],16),g:parseInt(r[1]+r[1],16),b:parseInt(r[2]+r[2],16),a:4===r.length?n(parseInt(r[3]+r[3],16)/255,2):1}:6===r.length||8===r.length?{r:parseInt(r.substr(0,2),16),g:parseInt(r.substr(2,2),16),b:parseInt(r.substr(4,2),16),a:8===r.length?n(parseInt(r.substr(6,2),16)/255,2):1}:null:null},\"hex\"],[function(r){var t=v.exec(r)||m.exec(r);return t?t[2]!==t[4]||t[4]!==t[6]?null:a({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:void 0===t[7]?1:Number(t[7])/(t[8]?100:1)}):null},\"rgb\"],[function(t){var n=l.exec(t)||p.exec(t);if(!n)return null;var e,u,a=g({h:(e=n[1],u=n[2],void 0===u&&(u=\"deg\"),Number(e)*(r[u]||1)),s:Number(n[3]),l:Number(n[4]),a:void 0===n[5]?1:Number(n[5])/(n[6]?100:1)});return f(a)},\"hsl\"]],object:[[function(r){var n=r.r,e=r.g,u=r.b,o=r.a,i=void 0===o?1:o;return t(n)&&t(e)&&t(u)?a({r:Number(n),g:Number(e),b:Number(u),a:Number(i)}):null},\"rgb\"],[function(r){var n=r.h,e=r.s,u=r.l,a=r.a,o=void 0===a?1:a;if(!t(n)||!t(e)||!t(u))return null;var i=g({h:Number(n),s:Number(e),l:Number(u),a:Number(o)});return f(i)},\"hsl\"],[function(r){var n=r.h,a=r.s,o=r.v,i=r.a,s=void 0===i?1:i;if(!t(n)||!t(a)||!t(o))return null;var h=function(r){return{h:u(r.h),s:e(r.s,0,100),v:e(r.v,0,100),a:e(r.a)}}({h:Number(n),s:Number(a),v:Number(o),a:Number(s)});return b(h)},\"hsv\"]]},N=function(r,t){for(var n=0;n<t.length;n++){var e=t[n][0](r);if(e)return[e,t[n][1]]}return[null,void 0]},x=function(r){return\"string\"==typeof r?N(r.trim(),y.string):\"object\"==typeof r&&null!==r?N(r,y.object):[null,void 0]},I=function(r){return x(r)[1]},M=function(r,t){var n=c(r);return{h:n.h,s:e(n.s+100*t,0,100),l:n.l,a:n.a}},H=function(r){return(299*r.r+587*r.g+114*r.b)/1e3/255},$=function(r,t){var n=c(r);return{h:n.h,s:n.s,l:e(n.l+100*t,0,100),a:n.a}},j=function(){function r(r){this.parsed=x(r)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return r.prototype.isValid=function(){return null!==this.parsed},r.prototype.brightness=function(){return n(H(this.rgba),2)},r.prototype.isDark=function(){return H(this.rgba)<.5},r.prototype.isLight=function(){return H(this.rgba)>=.5},r.prototype.toHex=function(){return r=o(this.rgba),t=r.r,e=r.g,u=r.b,i=(a=r.a)<1?s(n(255*a)):\"\",\"#\"+s(t)+s(e)+s(u)+i;var r,t,e,u,a,i},r.prototype.toRgb=function(){return o(this.rgba)},r.prototype.toRgbString=function(){return r=o(this.rgba),t=r.r,n=r.g,e=r.b,(u=r.a)<1?\"rgba(\"+t+\", \"+n+\", \"+e+\", \"+u+\")\":\"rgb(\"+t+\", \"+n+\", \"+e+\")\";var r,t,n,e,u},r.prototype.toHsl=function(){return d(c(this.rgba))},r.prototype.toHslString=function(){return r=d(c(this.rgba)),t=r.h,n=r.s,e=r.l,(u=r.a)<1?\"hsla(\"+t+\", \"+n+\"%, \"+e+\"%, \"+u+\")\":\"hsl(\"+t+\", \"+n+\"%, \"+e+\"%)\";var r,t,n,e,u},r.prototype.toHsv=function(){return r=h(this.rgba),{h:n(r.h),s:n(r.s),v:n(r.v),a:n(r.a,3)};var r},r.prototype.invert=function(){return w({r:255-(r=this.rgba).r,g:255-r.g,b:255-r.b,a:r.a});var r},r.prototype.saturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,r))},r.prototype.desaturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,-r))},r.prototype.grayscale=function(){return w(M(this.rgba,-1))},r.prototype.lighten=function(r){return void 0===r&&(r=.1),w($(this.rgba,r))},r.prototype.darken=function(r){return void 0===r&&(r=.1),w($(this.rgba,-r))},r.prototype.rotate=function(r){return void 0===r&&(r=15),this.hue(this.hue()+r)},r.prototype.alpha=function(r){return\"number\"==typeof r?w({r:(t=this.rgba).r,g:t.g,b:t.b,a:r}):n(this.rgba.a,3);var t},r.prototype.hue=function(r){var t=c(this.rgba);return\"number\"==typeof r?w({h:r,s:t.s,l:t.l,a:t.a}):n(t.h)},r.prototype.isEqual=function(r){return this.toHex()===w(r).toHex()},r}(),w=function(r){return r instanceof j?r:new j(r)},S=[],k=function(r){r.forEach(function(r){S.indexOf(r)<0&&(r(j,y),S.push(r))})},E=function(){return new j({r:255*Math.random(),g:255*Math.random(),b:255*Math.random()})};export{j as Colord,w as colord,k as extend,I as getFormat,E as random};\n","import { colord } from 'colord';\nimport type { AnnotationState, Color, DrawingStyle } from '@annotorious/core';\nimport type { TextAnnotation } from '../model';\nimport type { Highlight } from './';\n\nexport interface HighlightStyle extends Pick<DrawingStyle, 'fill' | 'fillOpacity'> {\n\n underlineStyle?: string;\n\n underlineColor?: Color;\n\n underlineOffset?: number;\n\n underlineThickness?: number;\n \n}\n\nexport type HighlightStyleExpression = HighlightStyle \n | (<I extends TextAnnotation = TextAnnotation>(annotation: I, state: AnnotationState, zIndex?: number) => HighlightStyle | undefined);\n\nexport const DEFAULT_STYLE: HighlightStyle = { \n fill: 'rgb(0, 128, 255)', \n fillOpacity: 0.18\n};\n\nexport const DEFAULT_SELECTED_STYLE: HighlightStyle = { \n fill: 'rgb(0, 128, 255)', \n fillOpacity: 0.45 \n};\n\nexport const getBackgroundColor = (style?: HighlightStyle) => {\n if (style?.fillOpacity !== undefined) {\n // User-defined opacity: compute with user-defined fill or default\n return colord(style?.fill || DEFAULT_STYLE.fill)\n .alpha(style.fillOpacity)\n .toHex();\n } else if (!style?.fill) {\n // Neither fill nor opacity - default\n return colord(DEFAULT_STYLE.fill).alpha(DEFAULT_STYLE.fillOpacity).toHex();\n } else {\n // User defined fill, no opacity. Just pass through whatever the user \n // provided (incl. oklch colors, etc.)\n return style.fill;\n }\n}\n\nexport const computeStyle = (highlight: Highlight, style?: HighlightStyleExpression, z?: number): HighlightStyle =>\n style \n ? typeof style === 'function'\n ? style(highlight.annotation, highlight.state, z) || (\n highlight.state?.selected ? DEFAULT_SELECTED_STYLE : DEFAULT_STYLE\n )\n : style \n : highlight.state?.selected \n ? DEFAULT_SELECTED_STYLE \n : DEFAULT_STYLE;\n","var has = Object.prototype.hasOwnProperty;\n\nexport function dequal(foo, bar) {\n\tvar ctor, len;\n\tif (foo === bar) return true;\n\n\tif (foo && bar && (ctor=foo.constructor) === bar.constructor) {\n\t\tif (ctor === Date) return foo.getTime() === bar.getTime();\n\t\tif (ctor === RegExp) return foo.toString() === bar.toString();\n\n\t\tif (ctor === Array) {\n\t\t\tif ((len=foo.length) === bar.length) {\n\t\t\t\twhile (len-- && dequal(foo[len], bar[len]));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (!ctor || typeof foo === 'object') {\n\t\t\tlen = 0;\n\t\t\tfor (ctor in foo) {\n\t\t\t\tif (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n\t\t\t\tif (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;\n\t\t\t}\n\t\t\treturn Object.keys(bar).length === len;\n\t\t}\n\t}\n\n\treturn foo !== foo && bar !== bar;\n}\n","import type { Highlight } from '../../rendering';\nimport type { Rect } from '../../state';\n\nexport const computeZIndex = (rect: Rect, all: Highlight[]): number => {\n const intersects = (a: Rect, b: Rect): boolean => (\n a.x <= b.x + b.width && a.x + a.width >= b.x &&\n a.y <= b.y + b.height && a.y + a.height >= b.y\n )\n\n const getLength = (h: Highlight) => \n h.rects.reduce((total, rect) => total + rect.width, 0);\n\n // Any highlights that intersect this rect, sorted by total length\n const intersecting = all.filter(({ rects }) => rects.some(r => intersects(rect, r)));\n intersecting.sort((a, b) => getLength(b) - getLength(a));\n\n return intersecting.findIndex(h => h.rects.includes(rect));\n}","export const getHighlightClientRects = (range: Range) => {\n const textNodes: Text[] = [];\n\n // Get all text nodes inside the range's commonAncestorContainer\n const it = document.createNodeIterator(\n range.commonAncestorContainer, \n NodeFilter.SHOW_TEXT);\n\n /*\n Filter text nodes that intersect the range. Note that we could\n also include this filter in the node iterator directly.\n But the while loop is faster (!) - possibly due to a function call overhead.\n */\n let currentNode: Text | undefined;\n \n while ((currentNode = it.nextNode() as Text)) {\n if (range.intersectsNode(currentNode)) {\n textNodes.push(currentNode);\n }\n }\n\n if (textNodes.length < 2) {\n // Trivial case: selection is inside a single text node\n // or empty (shouldn't happen!) - no need to create our own ranges.\n return Array.from(range.getClientRects());\n } else {\n const first = textNodes[0];\n const last = textNodes[textNodes.length - 1];\n\n const firstRange = document.createRange();\n firstRange.selectNode(first);\n if (range.startContainer.nodeType === Node.TEXT_NODE) {\n firstRange.setStart(first, range.startOffset);\n } else {\n const childNode = range.startContainer.childNodes[range.startOffset];\n if (childNode) {\n firstRange.setStartBefore(childNode);\n } else {\n firstRange.setStartAfter(range.startContainer);\n }\n }\n\n const lastRange = document.createRange();\n lastRange.selectNode(last);\n if (range.endContainer.nodeType === Node.TEXT_NODE) {\n lastRange.setEnd(last, range.endOffset);\n } else {\n const childNode = range.endContainer.childNodes[range.endOffset];\n if (childNode)\n lastRange.setEndBefore(childNode);\n else \n lastRange.setEndAfter(range.endContainer);\n }\n\n // Text nodes have no .getClientRects()!\n const getTextClientRects = (t: Text) => {\n const r = document.createRange();\n r.selectNode(t);\n return Array.from(r.getClientRects());\n }\n\n return [\n ...Array.from(firstRange.getClientRects()),\n ...textNodes.slice(1, -1).flatMap(getTextClientRects),\n ...Array.from(lastRange.getClientRects())\n ];\n }\n}\n","// The three topological relations we'll check for\ntype Relation =\n // Inline elements, same height, directly adjacent\n 'inline-adjacent' |\n // Inline elements, A fully contains B\n 'inline-contains' |\n // Inline elements, A is fully contained inside B\n 'inline-is-contained' |\n // At least one block element, A fully contains B\n 'block-contains' |\n // At least one block element, A is fully contained in B\n 'block-is-contained';\n\n// Note that this is not a general topology test. Takes a \n// few shortcuts to test ONLY the situations we'll encounter\n// with text selections.\nconst getRelation = (\n rectA: DOMRect, \n rectB: DOMRect, \n hTolerance: number, \n vTolerance: number\n): Relation | undefined => {\n const round = (num: number) => Math.round(num * 10) / 10;\n\n // Some browsers have fractional pixel differences (looking at you FF!)\n const a = {\n top: round(rectA.top),\n bottom: round(rectA.bottom),\n left: round(rectA.left),\n right: round(rectA.right)\n };\n\n const b = {\n top: round(rectB.top),\n bottom: round(rectB.bottom),\n left: round(rectB.left),\n right: round(rectB.right)\n };\n\n if (Math.abs(a.top - b.top) < vTolerance && Math.abs(a.bottom - b.bottom) < vTolerance) {\n // Same height - check for containment and adjacency\n if (Math.abs(a.left - b.right) < hTolerance || Math.abs(a.right - b.left) < hTolerance)\n return 'inline-adjacent';\n\n if (a.left >= b.left && a.right <= b.right)\n return 'inline-is-contained';\n\n if (a.left <= b.left && a.right >= b.right)\n return 'inline-contains';\n } else {\n // Different heights - check for containment\n if (a.top <= b.top && a.bottom >= b.bottom) {\n if (a.left <= b.left && a.right >= b.right) {\n return 'block-contains';\n }\n } else if (a.top >= b.top && a.bottom <= b.bottom) {\n if (a.left >= b.left && a.right <= b.right) {\n return 'block-is-contained';\n }\n }\n }\n}\n\nconst union = (a: DOMRect, b: DOMRect): DOMRect => {\n const left = Math.min(a.left, b.left);\n const right = Math.max(a.right, b.right);\n const top = Math.min(a.top, b.top);\n const bottom = Math.max(a.bottom, b.bottom);\n\n return new DOMRect(left, top, right - left, bottom - top);\n}\n\nexport const mergeClientRects = (\n rects: DOMRect[], \n hTolerance = 0.5, \n vTolerance = 0.5\n) => rects.reduce<DOMRect[]>((merged, rectA) => {\n // Some browser report empty rects - discard\n if (rectA.width === 0 || rectA.height === 0)\n return merged;\n\n let next = [...merged];\n\n let wasMerged = false;\n\n for (const rectB of merged) {\n const relation = getRelation(rectA, rectB, hTolerance, vTolerance);\n\n if (relation === 'inline-adjacent') {\n // A and B are adjacent - remove B and keep union\n next = next.map(r => r === rectB ? union(rectA, rectB) : r);\n wasMerged = true;\n break;\n } else if (relation === 'inline-contains') {\n // A contains B - remove B and keep A\n next = next.map(r => r === rectB ? rectA : r);\n wasMerged = true;\n break;\n } else if (relation === 'inline-is-contained') {\n // B contains A - skip A\n wasMerged = true;\n break;\n } else if (relation === 'block-contains' || relation === 'block-is-contained') {\n // Block containment - keep the element with a smaller width\n if (rectA.width < rectB.width)\n next = next.map(r => r === rectB ? rectA : r);\n\n // When the width is the same, keep the element with a smaller height\n if (rectA.width === rectB.width && rectA.height < rectB.width)\n next = next.map(r => r === rectB ? rectA : r);\n\n wasMerged = true;\n break;\n }\n }\n\n return wasMerged ? next : [...next, rectA];\n}, []);\n\nexport const toDomRectList = (rects: DOMRect[]): DOMRectList => ({\n length: rects.length,\n item: (index) => rects[index],\n [Symbol.iterator]: function* (): ArrayIterator<DOMRect> {\n for (let i = 0; i < this.length; i++)\n yield this.item(i)!;\n }\n});","/**\n * Offsets the given rect relative to the offset parent.\n */\nexport const toParentBounds = (rect: DOMRect, offset: DOMRect): DOMRect => {\n const { left, top, right, bottom } = rect;\n return new DOMRect(left - offset.left, top - offset.top, right - left, bottom - top);\n};\n\n/**\n * Inverse: translates the given relative rect back into viewport bounds.\n */\nexport const toViewportBounds = (rect: DOMRect, offset: DOMRect): DOMRect => {\n const { left, top, right, bottom } = rect;\n return new DOMRect(left + offset.left, top + offset.top, right - left, bottom - top);\n}\n","import { dequal } from 'dequal/lite';\nimport type { ViewportState } from '@annotorious/core';\nimport type { TextAnnotation } from '../../model';\nimport type { TextAnnotatorState } from '../../state';\nimport { computeZIndex } from '../../utils/highlight/';\nimport { \n computeStyle,\n createRenderer,\n getBackgroundColor,\n type Highlight, \n type HighlightStyleExpression,\n type Painter, \n type RendererFactory, \n type ViewportBounds \n} from '../';\n\nimport './spans-renderer.css';\n\nconst createSpansPainter = (container: HTMLElement): Painter => {\n container.classList.add('r6o-annotatable');\n\n const highlightLayer = document.createElement('div');\n highlightLayer.className = 'r6o-span-highlight-layer';\n\n container.appendChild(highlightLayer);\n\n // Currently rendered highlights\n let currentRendered: Highlight[] = [];\n\n const redraw = (\n highlights: Highlight[], \n _: ViewportBounds, \n currentStyle?: HighlightStyleExpression,\n styleOverrides?: Map<string, HighlightStyleExpression>,\n force?: boolean\n ) => {\n const noChanges = dequal(currentRendered, highlights);\n\n // If there are no changes and rendering is set to lazy\n // Don't redraw the SPANs - but redraw the painter, if any!\n const shouldRedraw = !noChanges || force;\n if (!shouldRedraw) return;\n\n highlightLayer.innerHTML = '';\n\n /**\n * Highlights rendering in the span highlight layer is an order-sensitive operation.\n * The later the highlight is rendered, the higher it will be in the visual stack.\n *\n * By default, we should expect that the newer highlight\n * will be rendered over the older one\n */\n const sorted = [...highlights].sort((highlightA, highlightB) => {\n const { annotation: { target: { created: createdA } } } = highlightA;\n const { annotation: { target: { created: createdB } } } = highlightB;\n return createdA && createdB ? createdA.getTime() - createdB.getTime() : 0;\n });\n\n sorted.forEach(highlight => {\n const style = styleOverrides.get(highlight.annotation.id) || currentStyle;\n\n highlight.rects.map(rect => {\n const z = computeZIndex(rect, highlights);\n const computedStyle = computeStyle(highlight, style, z);\n\n const span = document.createElement('span');\n span.className = 'r6o-annotation';\n span.dataset.annotation = highlight.annotation.id;\n\n span.style.left = `${rect.x}px`;\n span.style.top = `${rect.y}px`;\n span.style.width = `${rect.width}px`;\n span.style.height = `${rect.height}px`;\n\n span.style.backgroundColor = getBackgroundColor(computedStyle);\n\n if (computedStyle.underlineStyle)\n span.style.borderStyle = computedStyle.underlineStyle;\n\n if (computedStyle.underlineColor)\n span.style.borderColor = computedStyle.underlineColor;\n\n if (computedStyle.underlineThickness)\n span.style.borderBottomWidth = `${computedStyle.underlineThickness}px`;\n\n if (computedStyle.underlineOffset)\n span.style.paddingBottom = `${computedStyle.underlineOffset}px`;\n\n highlightLayer.appendChild(span);\n });\n });\n\n currentRendered = highlights;\n }\n\n const setVisible = (visible: boolean) => {\n if (visible)\n highlightLayer.classList.remove('hidden');\n else\n highlightLayer.classList.add('hidden');\n }\n\n const destroy = () => {\n highlightLayer.remove();\n }\n\n return {\n destroy,\n redraw,\n setVisible\n };\n\n}\n\nexport const createSpansRenderer: RendererFactory = (\n container: HTMLElement,\n state: TextAnnotatorState<TextAnnotation, unknown>,\n viewport: ViewportState\n) => createRenderer(createSpansPainter(container), container, state, viewport);\n","import type { ViewportState } from '@annotorious/core';\nimport type { TextAnnotation } from '../model';\n\nexport interface ViewportBounds {\n\n top: number;\n\n left: number;\n\n minX: number;\n\n minY: number;\n \n maxX: number;\n \n maxY: number;\n\n}\n\nexport const getViewportBounds = (container: HTMLElement): ViewportBounds => {\n const { top, left } = container.getBoundingClientRect();\n\n const { innerWidth, innerHeight } = window;\n\n const minX = - left;\n const minY = - top;\n const maxX = innerWidth - left;\n const maxY = innerHeight - top;\n\n return { top, left, minX, minY, maxX, maxY };\n}\n\nexport const trackViewport = (viewport: ViewportState) => {\n let visible = new Set<string>();\n\n const onDraw = (annotations: TextAnnotation[]) => {\n const ids = annotations.map(a => a.id);\n\n if (visible.size !== ids.length || ids.some(id => !visible.has(id))) {\n viewport.set(ids);\n } \n\n visible = new Set(ids);\n }\n\n return onDraw;\n\n}","\n/**\n * Rearranges items so that all items in the [left, k] are the smallest.\n * The k-th element will have the (k - left + 1)-th smallest value in [left, right].\n *\n * @template T\n * @param {T[]} arr the array to partially sort (in place)\n * @param {number} k middle index for partial sorting (as defined above)\n * @param {number} [left=0] left index of the range to sort\n * @param {number} [right=arr.length-1] right index\n * @param {(a: T, b: T) => number} [compare = (a, b) => a - b] compare function\n */\nexport default function quickselect(arr, k, left = 0, right = arr.length - 1, compare = defaultCompare) {\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(arr, k, newLeft, newRight, compare);\n }\n\n const t = arr[k];\n let i = left;\n /** @type {number} */\n let j = right;\n\n swap(arr, left, k);\n if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n while (i < j) {\n swap(arr, i, j);\n i++;\n j--;\n while (compare(arr[i], t) < 0) i++;\n while (compare(arr[j], t) > 0) j--;\n }\n\n if (compare(arr[left], t) === 0) swap(arr, left, j);\n else {\n j++;\n swap(arr, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n}\n\n/**\n * @template T\n * @param {T[]} arr\n * @param {number} i\n * @param {number} j\n */\nfunction swap(arr, i, j) {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\n/**\n * @template T\n * @param {T} a\n * @param {T} b\n * @returns {number}\n */\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n","import quickselect from 'quickselect';\n\nexport default class RBush {\n constructor(maxEntries = 9) {\n // max entries in a node is 9 by default; min node fill is 40% for best performance\n this._maxEntries = Math.max(4, maxEntries);\n this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n this.clear();\n }\n\n all() {\n return this._all(this.data, []);\n }\n\n search(bbox) {\n let node = this.data;\n const result = [];\n\n if (!intersects(bbox, node)) return result;\n\n const toBBox = this.toBBox;\n const nodesToSearch = [];\n\n while (node) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const childBBox = node.leaf ? toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf) result.push(child);\n else if (contains(bbox, childBBox)) this._all(child, result);\n else nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return result;\n }\n\n collides(bbox) {\n let node = this.data;\n\n if (!intersects(bbox, node)) return false;\n\n const nodesToSearch = [];\n while (node) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const childBBox = node.leaf ? this.toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf || contains(bbox, childBBox)) return true;\n nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return false;\n }\n\n load(data) {\n if (!(data && data.length)) return this;\n\n if (data.length < this._minEntries) {\n for (let i = 0; i < data.length; i++) {\n this.insert(data[i]);\n }\n return this;\n }\n\n // recursively build the tree with the given data from scratch using OMT algorithm\n let node = this._build(data.slice(), 0, data.length - 1, 0);\n\n if (!this.data.children.length) {\n // save as is if tree is empty\n this.data = node;\n\n } else if (this.data.height === node.height) {\n // split root if trees have the same height\n this._splitRoot(this.data, node);\n\n } else {\n if (this.data.height < node.height) {\n // swap trees if inserted one is bigger\n const tmpNode = this.data;\n this.data = node;\n node = tmpNode;\n }\n\n // insert the small tree into the large tree at appropriate level\n this._insert(node, this.data.height - node.height - 1, true);\n }\n\n return this;\n }\n\n insert(item) {\n if (item) this._insert(item, this.data.height - 1);\n return this;\n }\n\n clear() {\n this.data = createNode([]);\n return this;\n }\n\n remove(item, equalsFn) {\n if (!item) return this;\n\n let node = this.data;\n const bbox = this.toBBox(item);\n const path = [];\n const indexes = [];\n let i, parent, goingUp;\n\n // depth-first iterative tree traversal\n while (node || path.length) {\n\n if (!node) { // go up\n node = path.pop();\n parent = path[path.length - 1];\n i = indexes.pop();\n goingUp = true;\n }\n\n if (node.leaf) { // check current node\n const index = findItem(item, node.children, equalsFn);\n\n if (index !== -1) {\n // item found, remove the item and condense tree upwards\n node.children.splice(index, 1);\n path.push(node);\n this._condense(path);\n return this;\n }\n }\n\n if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\n path.push(node);\n indexes.push(i);\n i = 0;\n parent = node;\n node = node.children[0];\n\n } else if (parent) { // go right\n i++;\n node = parent.children[i];\n goingUp = false;\n\n } else node = null; // nothing found\n }\n\n return this;\n }\n\n toBBox(item) { return item; }\n\n compareMinX(a, b) { return a.minX - b.minX; }\n compareMinY(a, b) { return a.minY - b.minY; }\n\n toJSON() { return this.data; }\n\n fromJSON(data) {\n this.data = data;\n return this;\n }\n\n _all(node, result) {\n const nodesToSearch = [];\n while (node) {\n if (node.leaf) result.push(...node.children);\n else nodesToSearch.push(...node.children);\n\n node = nodesToSearch.pop();\n }\n return result;\n }\n\n _build(items, left, right, height) {\n\n const N = right - left + 1;\n let M = this._maxEntries;\n let node;\n\n if (N <= M) {\n // reached leaf level; return leaf\n node = createNode(items.slice(left, right + 1));\n calcBBox(node, this.toBBox);\n return node;\n }\n\n if (!height) {\n // target height of the bulk-loaded tree\n height = Math.ceil(Math.log(N) / Math.log(M));\n\n // target number of root entries to maximize storage utilization\n M = Math.ceil(N / Math.pow(M, height - 1));\n }\n\n node = createNode([]);\n node.leaf = false;\n node.height = height;\n\n // split the items into M mostly square tiles\n\n const N2 = Math.ceil(N / M);\n const N1 = N2 * Math.ceil(Math.sqrt(M));\n\n multiSelect(items, left, right, N1, this.compareMinX);\n\n for (let i = left; i <= right; i += N1) {\n\n const right2 = Math.min(i + N1 - 1, right);\n\n multiSelect(items, i, right2, N2, this.compareMinY);\n\n for (let j = i; j <= right2; j += N2) {\n\n const right3 = Math.min(j + N2 - 1, right2);\n\n // pack each entry recursively\n node.children.push(this._build(items, j, right3, height - 1));\n }\n }\n\n calcBBox(node, this.toBBox);\n\n return node;\n }\n\n _chooseSubtree(bbox, node, level, path) {\n while (true) {\n path.push(node);\n\n if (node.leaf || path.length - 1 === level) break;\n\n let minArea = Infinity;\n let minEnlargement = Infinity;\n let targetNode;\n\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const area = bboxArea(child);\n const enlargement = enlargedArea(bbox, child) - area;\n\n // choose entry with the least area enlargement\n if (enlargement < minEnlargement) {\n minEnlargement = enlargement;\n minArea = area < minArea ? area : minArea;\n targetNode = child;\n\n } else if (enlargement === minEnlargement) {\n // otherwise choose one with the smallest area\n if (area < minArea) {\n minArea = area;\n targetNode = child;\n }\n }\n }\n\n node = targetNode || node.children[0];\n }\n\n return node;\n }\n\n _insert(item, level, isNode) {\n const bbox = isNode ? item : this.toBBox(item);\n const insertPath = [];\n\n // find the best node for accommodating the item, saving all nodes along the path too\n const node = this._chooseSubtree(bbox, this.data, level, insertPath);\n\n // put the item into the node\n node.children.push(item);\n extend(node, bbox);\n\n // split on node overflow; propagate upwards if necessary\n while (level >= 0) {\n if (insertPath[level].children.length > this._maxEntries) {\n this._split(insertPath, level);\n level--;\n } else break;\n }\n\n // adjust bboxes along the insertion path\n this._adjustParentBBoxes(bbox, insertPath, level);\n }\n\n // split overflowed node into two\n _split(insertPath, level) {\n const node = insertPath[level];\n const M = node.children.length;\n const m = this._minEntries;\n\n this._chooseSplitAxis(node, m, M);\n\n const splitIndex = this._chooseSplitIndex(node, m, M);\n\n const newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n newNode.height = node.height;\n newNode.leaf = node.leaf;\n\n calcBBox(node, this.toBBox);\n calcBBox(newNode, this.toBBox);\n\n if (level) insertPath[level - 1].children.push(newNode);\n else this._splitRoot(node, newNode);\n }\n\n _splitRoot(node, newNode) {\n // split root node\n this.data = createNode([node, newNode]);\n this.data.height = node.height + 1;\n this.data.leaf = false;\n calcBBox(this.data, this.toBBox);\n }\n\n _chooseSplitIndex(node, m, M) {\n let index;\n let minOverlap = Infinity;\n let minArea = Infinity;\n\n for (let i = m; i <= M - m; i++) {\n const bbox1 = distBBox(node, 0, i, this.toBBox);\n const bbox2 = distBBox(node, i, M, this.toBBox);\n\n const overlap = intersectionArea(bbox1, bbox2);\n const area = bboxArea(bbox1) + bboxArea(bbox2);\n\n // choose distribution with minimum overlap\n if (overlap < minOverlap) {\n minOverlap = overlap;\n index = i;\n\n minArea = area < minArea ? area : minArea;\n\n } else if (overlap === minOverlap) {\n // otherwise choose distribution with minimum area\n if (area < minArea) {\n minArea = area;\n index = i;\n }\n }\n }\n\n return index || M - m;\n }\n\n // sorts node children by the best axis for split\n _chooseSplitAxis(node, m, M) {\n const compareMinX = node.leaf ? this.compareMinX : compareNodeMinX;\n const compareMinY = node.leaf ? this.compareMinY : compareNodeMinY;\n const xMargin = this._allDistMargin(node, m, M, compareMinX);\n const yMargin = this._allDistMargin(node, m, M, compareMinY);\n\n // if total distributions margin value is minimal for x, sort by minX,\n // otherwise it's already sorted by minY\n if (xMargin < yMargin) node.children.sort(compareMinX);\n }\n\n // total margin of all possible split distributions where each node is at least m full\n _allDistMargin(node, m, M, compare) {\n node.children.sort(compare);\n\n const toBBox = this.toBBox;\n const leftBBox = distBBox(node, 0, m, toBBox);\n const rightBBox = distBBox(node, M - m, M, toBBox);\n let margin = bboxMargin(leftBBox) + bboxMargin(rightBBox);\n\n for (let i = m; i < M - m; i++) {\n const child = node.children[i];\n extend(leftBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(leftBBox);\n }\n\n for (let i = M - m - 1; i >= m; i--) {\n const child = node.children[i];\n extend(rightBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(rightBBox);\n }\n\n return margin;\n }\n\n _adjustParentBBoxes(bbox, path, level) {\n // adjust bboxes along the given tree path\n for (let i = level; i >= 0; i--) {\n extend(path[i], bbox);\n }\n }\n\n _condense(path) {\n // go through the path, removing empty nodes and updating bboxes\n for (let i = path.length - 1, siblings; i >= 0; i--) {\n if (path[i].children.length === 0) {\n if (i > 0) {\n siblings = path[i - 1].children;\n siblings.splice(siblings.indexOf(path[i]), 1);\n\n } else this.clear();\n\n } else calcBBox(path[i], this.toBBox);\n }\n }\n}\n\nfunction findItem(item, items, equalsFn) {\n if (!equalsFn) return items.indexOf(item);\n\n for (let i = 0; i < items.length; i++) {\n if (equalsFn(item, items[i])) return i;\n }\n return -1;\n}\n\n// calculate node's bbox from bboxes of its children\nfunction calcBBox(node, toBBox) {\n distBBox(node, 0, node.children.length, toBBox, node);\n}\n\n// min bounding rectangle of node children from k to p-1\nfunction distBBox(node, k, p, toBBox, destNode) {\n if (!destNode) destNode = createNode(null);\n destNode.minX = Infinity;\n destNode.minY = Infinity;\n destNode.maxX = -Infinity;\n destNode.maxY = -Infinity;\n\n for (let i = k; i < p; i++) {\n const child = node.children[i];\n extend(destNode, node.leaf ? toBBox(child) : child);\n }\n\n return destNode;\n}\n\nfunction extend(a, b) {\n a.minX = Math.min(a.minX, b.minX);\n a.minY = Math.min(a.minY, b.minY);\n a.maxX = Math.max(a.maxX, b.maxX);\n a.maxY = Math.max(a.maxY, b.maxY);\n return a;\n}\n\nfunction compareNodeMinX(a, b) { return a.minX - b.minX; }\nfunction compareNodeMinY(a, b) { return a.minY - b.minY; }\n\nfunction bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); }\nfunction bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }\n\nfunction enlargedArea(a, b) {\n return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n}\n\nfunction intersectionArea(a, b) {\n const minX = Math.max(a.minX, b.minX);\n const minY = Math.max(a.minY, b.minY);\n const maxX = Math.min(a.maxX, b.maxX);\n const maxY = Math.min(a.maxY, b.maxY);\n\n return Math.max(0, maxX - minX) *\n Math.max(0, maxY - minY);\n}\n\nfunction contains(a, b) {\n return a.minX <= b.minX &&\n a.minY <= b.minY &&\n b.maxX <= a.maxX &&\n b.maxY <= a.maxY;\n}\n\nfunction intersects(a, b) {\n return b.minX <= a.maxX &&\n b.minY <= a.maxY &&\n b.maxX >= a.minX &&\n b.maxY >= a.minY;\n}\n\nfunction createNode(children) {\n return {\n children,\n height: 1,\n leaf: true,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n };\n}\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nfunction multiSelect(arr, left, right, n, compare) {\n const stack = [left, right];\n\n while (stack.length) {\n right = stack.pop();\n left = stack.pop();\n\n if (right - left <= n) continue;\n\n const mid = left + Math.ceil((right - left) / n / 2) * n;\n quickselect(arr, mid, left, right, compare);\n\n stack.push(left, mid, mid, right);\n }\n}\n","import RBush from 'rbush';\nimport type { Store } from '@annotorious/core';\nimport { createNanoEvents, type Unsubscribe } from 'nanoevents';\nimport type { TextAnnotation, TextAnnotationTarget } from '../model';\nimport type { AnnotationRects } from '../state/text-annotation-store';\nimport { isRevived, reviveSelector } from '../utils/annotation';\nimport { mergeClientRects, getHighlightClientRects, toParentBounds } from '../utils/highlight'; \n\ninterface IndexedHighlightRect {\n\n minX: number;\n\n minY: number;\n\n maxX: number;\n\n maxY: number;\n\n annotation: {\n \n id: string;\n\n rects: DOMRect[];\n\n }\n\n}\n\nexport interface SpatialTreeEvents {\n\n recalculate(): void;\n\n}\n\nexport const createSpatialTree = <T extends TextAnnotation>(\n store: Store<T>,\n container: HTMLElement,\n hMergeTolerance?: number,\n vMergeTolerance?: number\n) => {\n\n const tree = new RBush<IndexedHighlightRect>();\n\n const index = new Map<string, IndexedHighlightRect[]>();\n\n const emitter = createNanoEvents<SpatialTreeEvents>();\n\n // Helper: converts a single text annotation target to a list of hightlight rects\n const toItems = (target: TextAnnotationTarget, offset: DOMRect): IndexedHighlightRect[] => {\n const rects = target.selector.flatMap(s => {\n const revivedRange = isRevived([s]) ? s.range : reviveSelector(s, container).range;\n return getHighlightClientRects(revivedRange);\n });\n\n /**\n * Offset the merged client rects so that coords\n * are relative to the parent container\n */\n const merged = mergeClientRects(rects, hMergeTolerance, vMergeTolerance)\n .map(rect => toParentBounds(rect, offset));\n\n return merged.map(rect => {\n const { x, y, width, height } = rect;\n\n return {\n minX: x,\n minY: y,\n maxX: x + width,\n maxY: y + height,\n annotation: {\n id: target.annotation,\n rects: merged\n }\n }\n });\n }\n\n const all = () => [...index.values()];\n\n const clear = () => {\n tree.clear();\n index.clear();\n }\n\n const insert = (target: TextAnnotationTarget) => {\n const rects = toItems(target, container.getBoundingClientRect());\n if (rects.length === 0) return;\n\n rects.forEach(rect => tree.insert(rect));\n index.set(target.annotation, rects);\n }\n\n const remove = (target: TextAnnotationTarget) => {\n const rects = index.get(target.annotation);\n if (rects) {\n rects.forEach(rect => tree.remove(rect));\n index.delete(target.annotation);\n }\n }\n\n const update = (target: TextAnnotationTarget) => {\n remove(target);\n insert(target);\n }\n\n const set = (targets: TextAnnotationTarget[], replace: boolean = true) => {\n if (replace)\n clear();\n\n const offset = container.getBoundingClientRect();\n\n const rectsByTarget = targets.map(target => ({ target, rects: toItems(target, offset) }));\n rectsByTarget.forEach(({ target, rects }) => {\n if (rects.length > 0)\n index.set(target.annotation, rects)\n });\n\n const allRects = rectsByTarget.flatMap(({ rects }) => rects);\n tree.load(allRects);\n }\n\n const getAt = (x: number, y: number, all = false): string[] => {\n const hits = tree.search({\n minX: x,\n minY: y,\n maxX: x,\n maxY: y\n });\n\n const area = (rect: IndexedHighlightRect) =>\n rect.annotation.rects.reduce((area, r) =>\n area + r.width * r.height, 0);\n \n // Get smallest rect\n if (hits.length > 0) {\n hits.sort((a, b) => area(a) - area(b));\n return all ? hits.map(h => h.annotation.id) : [ hits[0].annotation.id ];\n } else {\n return [];\n }\n }\n\n const getAnnotationBounds = (id: string): DOMRect => {\n const rects = getAnnotationRects(id);\n\n if (rects.length === 0)\n return undefined;\n\n let left = rects[0].left;\n let top = rects[0].top;\n let right = rects[0].right;\n let bottom = rects[0].bottom;\n\n for (let i = 1; i < rects.length; i++) {\n const rect = rects[i];\n\n left = Math.min(left, rect.left);\n top = Math.min(top, rect.top);\n right = Math.max(right, rect.right);\n bottom = Math.max(bottom, rect.bottom);\n }\n\n return new DOMRect(left, top, right - left, bottom - top);\n }\n\n const getAnnotationRects = (id: string): DOMRect[] => {\n const indexed = index.get(id);\n if (indexed) {\n // Reminder: *each* IndexedHighlightRect stores *all*\n // DOMRects for the annotation for convenience\n return indexed[0].annotation.rects;\n } else {\n return [];\n }\n }\n\n const getIntersecting = (\n minX: number, \n minY: number, \n maxX: number, \n maxY: number,\n ): AnnotationRects<T>[] => {\n // All rects in this area, regardless of annotation\n const rects = tree.search({ minX, minY, maxX, maxY });\n\n // Distinct annotation IDs\n const annotationIds = new Set(rects.map(rect => rect.annotation.id));\n\n // Resolve annotation IDs. Note that the tree could be slightly out of sync (because \n // it updates by listening to changes, just like anyone else)\n return Array.from(annotationIds).map(annotationId => ({\n annotation: store.getAnnotation(annotationId),\n rects: getAnnotationRects(annotationId)\n })).filter(t => Boolean(t.annotation));\n }\n\n const size = () => tree.all().length;\n\n const recalculate = () => {\n set(store.all().map(a => a.target), true);\n emitter.emit('recalculate');\n };\n\n const on = <E extends keyof SpatialTreeEvents>(event: E, callback: SpatialTreeEvents[E]): Unsubscribe => emitter.on(event, callback);\n\n return {\n all,\n clear,\n getAt,\n getAnnotationBounds,\n getAnnotationRects,\n getIntersecting,\n insert,\n recalculate,\n remove,\n set,\n size,\n update,\n on\n }\n\n}\n","import type { Filter, Store, ViewportState } from '@annotorious/core';\nimport { \n createHoverState, \n createSelectionState, \n createStore, \n Origin,\n createViewportState\n} from '@annotorious/core';\nimport type { \n AnnotatorState, \n SelectionState, \n HoverState, \n} from '@annotorious/core';\nimport type { TextAnnotation, TextAnnotationTarget } from '../model';\nimport { createSpatialTree, type SpatialTreeEvents } from '../state/spatial-tree';\nimport type { AnnotationRects, TextAnnotationStore } from '../state/text-annotation-store';\nimport { isRevived, reviveAnnotation, reviveTarget } from '../utils/annotation';\nimport type { TextAnnotatorOptions } from '../text-annotator-options';\n\nexport interface TextAnnotatorState<I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation> extends AnnotatorState<I, E> {\n\n store: TextAnnotationStore<I>;\n\n selection: SelectionState<I, E>;\n\n hover: HoverState<I>;\n\n viewport: ViewportState;\n\n}\n\nexport const createTextAnnotatorState = <I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation>(\n container: HTMLElement,\n opts: TextAnnotatorOptions<I, E>\n): TextAnnotatorState<I, E> => {\n\n const store: Store<I> = createStore<I>();\n\n const tree = createSpatialTree(store, container, opts.mergeHighlights?.horizontalTolerance, opts.mergeHighlights?.verticalTolerance);\n\n const selection = createSelectionState<I, E>(store, opts.userSelectAction, opts.adapter);\n\n const hover = createHoverState(store);\n\n const viewport = createViewportState();\n\n // Wrap store interface to intercept annotations and revive DOM ranges, if needed\n const addAnnotation = (annotation: I, origin = Origin.LOCAL): boolean => {\n const revived = reviveAnnotation(annotation, container);\n\n const isValid = isRevived(revived.target.selector);\n if (isValid)\n store.addAnnotation(revived, origin); \n\n return isValid;\n }\n\n const bulkAddAnnotations = (\n annotations: I[], \n replace = true, \n origin = Origin.LOCAL\n ): I[] => {\n const revived = annotations.map(a => reviveAnnotation<I>(a, container));\n\n // Initial page load might take some time. Retry for more robustness.\n const couldNotRevive = revived.filter(a => !isRevived(a.target.selector));\n store.bulkAddAnnotations(revived, replace, origin);\n\n return couldNotRevive;\n }\n \n const bulkUpsertAnnotations = (\n annotations: I[], \n origin = Origin.LOCAL\n ): I[] => {\n const revived = annotations.map(a => reviveAnnotation(a, container));\n\n // Initial page load might take some time. Retry for more robustness.\n const couldNotRevive = revived.filter(a => !isRevived(a.target.selector));\n \n revived.forEach(a => {\n if (store.getAnnotation(a.id))\n store.updateAnnotation(a, origin);\n else \n store.addAnnotation(a, origin);\n })\n\n return couldNotRevive;\n }\n\n const updateTarget = (target: TextAnnotationTarget, origin = Origin.LOCAL) => {\n const revived = reviveTarget(target, container);\n store.updateTarget(revived, origin);\n }\n\n const bulkUpdateTargets = (targets: TextAnnotationTarget[], origin = Origin.LOCAL) => {\n const revived = targets.map(t => reviveTarget(t, container));\n store.bulkUpdateTargets(revived, origin);\n }\n\n function getAt(x: number, y: number, all: true, filter?: Filter): I[] | undefined;\n function getAt(x: number, y: number, all: false, filter?: Filter): I | undefined;\n function getAt(x: number, y: number, all?: boolean, filter?: Filter): I | I[] | undefined {\n const getAll = all || Boolean(filter);\n\n const annotations = tree.getAt(x, y, getAll).map(id => store.getAnnotation(id));\n\n const filtered = filter ? annotations.filter(filter) : annotations;\n\n if (filtered.length === 0)\n return undefined;\n\n return all ? filtered : filtered[0];\n }\n\n const getAnnotationBounds = (id: string): DOMRect | undefined => {\n const rects = tree.getAnnotationRects(id);\n return rects.length > 0 ? tree.getAnnotationBounds(id) : undefined;\n }\n\n const getIntersecting = (\n minX: number,\n minY: number,\n maxX: number,\n maxY: number,\n ): AnnotationRects<I>[] => tree.getIntersecting(minX, minY, maxX, maxY);\n\n const getAnnotationRects = (id: string): DOMRect[] => tree.getAnnotationRects(id);\n\n const recalculatePositions = () => tree.recalculate();\n const onRecalculatePositions = (callback: SpatialTreeEvents['recalculate']) => tree.on('recalculate', callback);\n\n store.observe(({ changes }) => {\n const deleted = (changes.deleted || []).filter(a => isRevived(a.target.selector));\n const created = (changes.created || []).filter(a => isRevived(a.target.selector));\n const updated = (changes.updated || []).filter(u => isRevived(u.newValue.target.selector));\n\n if (deleted?.length > 0)\n deleted.forEach(a => tree.remove(a.target));\n\n if (created.length > 0)\n tree.set(created.map(a => a.target), false);\n\n if (updated?.length > 0)\n updated.forEach(({ newValue }) => tree.update(newValue.target));\n });\n\n return {\n store: {\n ...store,\n addAnnotation,\n bulkAddAnnotations,\n bulkUpdateTargets,\n bulkUpsertAnnotations,\n getAnnotationBounds,\n getAnnotationRects,\n getIntersecting,\n getAt,\n recalculatePositions,\n onRecalculatePositions,\n updateTarget\n },\n selection,\n hover,\n viewport\n }\n\n}\n","export default function debounce(function_, wait = 100, options = {}) {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError(`Expected the first parameter to be a function, got \\`${typeof function_}\\`.`);\n\t}\n\n\tif (wait < 0) {\n\t\tthrow new RangeError('`wait` must not be negative.');\n\t}\n\n\tif (typeof options === 'boolean') {\n\t\tthrow new TypeError('The `options` parameter must be an object, not a boolean. Use `{immediate: true}` instead.');\n\t}\n\n\tconst {immediate} = options;\n\n\tlet storedContext;\n\tlet storedArguments;\n\tlet timeoutId;\n\tlet timestamp;\n\tlet result;\n\n\tfunction run() {\n\t\tconst callContext = storedContext;\n\t\tconst callArguments = storedArguments;\n\t\tstoredContext = undefined;\n\t\tstoredArguments = undefined;\n\t\tresult = function_.apply(callContext, callArguments);\n\t\treturn result;\n\t}\n\n\tfunction later() {\n\t\tconst last = Date.now() - timestamp;\n\n\t\tif (last < wait && last >= 0) {\n\t\t\ttimeoutId = setTimeout(later, wait - last);\n\t\t} else {\n\t\t\ttimeoutId = undefined;\n\n\t\t\tif (!immediate) {\n\t\t\t\tresult = run();\n\t\t\t}\n\t\t}\n\t}\n\n\tconst debounced = function (...arguments_) {\n\t\tif (\n\t\t\tstoredContext\n\t\t\t&& this !== storedContext\n\t\t\t&& Object.getPrototypeOf(this) === Object.getPrototypeOf(storedContext)\n\t\t) {\n\t\t\tthrow new Error('Debounced method called with different contexts of the same prototype.');\n\t\t}\n\n\t\tstoredContext = this; // eslint-disable-line unicorn/no-this-assignment\n\t\tstoredArguments = arguments_;\n\t\ttimestamp = Date.now();\n\n\t\tconst callNow = immediate && !timeoutId;\n\n\t\tif (!timeoutId) {\n\t\t\ttimeoutId = setTimeout(later, wait);\n\t\t}\n\n\t\tif (callNow) {\n\t\t\tresult = run();\n\t\t\treturn result;\n\t\t}\n\n\t\treturn undefined;\n\t};\n\n\tObject.defineProperty(debounced, 'isPending', {\n\t\tget() {\n\t\t\treturn timeoutId !== undefined;\n\t\t},\n\t});\n\n\tdebounced.clear = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout(timeoutId);\n\t\ttimeoutId = undefined;\n\t\tstoredContext = undefined;\n\t\tstoredArguments = undefined;\n\t};\n\n\tdebounced.flush = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tdebounced.trigger();\n\t};\n\n\tdebounced.trigger = () => {\n\t\tresult = run();\n\n\t\tdebounced.clear();\n\t};\n\n\treturn debounced;\n}\n","/**! \n * hotkeys-js v3.13.15 \n * A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies. \n * \n * Copyright (c) 2025 kenny wong <wowohoo@qq.com> \n * https://github.com/jaywcjlove/hotkeys-js.git \n * \n * @website: https://jaywcjlove.github.io/hotkeys-js\n \n * Licensed under the MIT license \n */\n\nconst isff = typeof navigator !== 'undefined' ? navigator.userAgent.toLowerCase().indexOf('firefox') > 0 : false;\n\n/** Bind event */\nfunction addEvent(object, event, method, useCapture) {\n if (object.addEventListener) {\n object.addEventListener(event, method, useCapture);\n } else if (object.attachEvent) {\n object.attachEvent(\"on\".concat(event), method);\n }\n}\nfunction removeEvent(object, event, method, useCapture) {\n if (object.removeEventListener) {\n object.removeEventListener(event, method, useCapture);\n } else if (object.detachEvent) {\n object.detachEvent(\"on\".concat(event), method);\n }\n}\n\n/** Convert modifier keys to their corresponding key codes */\nfunction getMods(modifier, key) {\n const mods = key.slice(0, key.length - 1);\n for (let i = 0; i < mods.length; i++) mods[i] = modifier[mods[i].toLowerCase()];\n return mods;\n}\n\n/** Process the input key string and convert it to an array */\nfunction getKeys(key) {\n if (typeof key !== 'string') key = '';\n key = key.replace(/\\s/g, ''); // Match any whitespace character, including spaces, tabs, form feeds, etc.\n const keys = key.split(','); // Allow multiple shortcuts separated by ','\n let index = keys.lastIndexOf('');\n\n // Shortcut may include ',' — special handling needed\n for (; index >= 0;) {\n keys[index - 1] += ',';\n keys.splice(index, 1);\n index = keys.lastIndexOf('');\n }\n return keys;\n}\n\n/** Compare arrays of modifier keys */\nfunction compareArray(a1, a2) {\n const arr1 = a1.length >= a2.length ? a1 : a2;\n const arr2 = a1.length >= a2.length ? a2 : a1;\n let isIndex = true;\n for (let i = 0; i < arr1.length; i++) {\n if (arr2.indexOf(arr1[i]) === -1) isIndex = false;\n }\n return isIndex;\n}\n\n// Special Keys\nconst _keyMap = {\n backspace: 8,\n '⌫': 8,\n tab: 9,\n clear: 12,\n enter: 13,\n '↩': 13,\n return: 13,\n esc: 27,\n escape: 27,\n space: 32,\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n /// https://w3c.github.io/uievents/#events-keyboard-key-location\n arrowup: 38,\n arrowdown: 40,\n arrowleft: 37,\n arrowright: 39,\n del: 46,\n delete: 46,\n ins: 45,\n insert: 45,\n home: 36,\n end: 35,\n pageup: 33,\n pagedown: 34,\n capslock: 20,\n num_0: 96,\n num_1: 97,\n num_2: 98,\n num_3: 99,\n num_4: 100,\n num_5: 101,\n num_6: 102,\n num_7: 103,\n num_8: 104,\n num_9: 105,\n num_multiply: 106,\n num_add: 107,\n num_enter: 108,\n num_subtract: 109,\n num_decimal: 110,\n num_divide: 111,\n '⇪': 20,\n ',': 188,\n '.': 190,\n '/': 191,\n '`': 192,\n '-': isff ? 173 : 189,\n '=': isff ? 61 : 187,\n ';': isff ? 59 : 186,\n '\\'': 222,\n '{': 219,\n '}': 221,\n '[': 219,\n ']': 221,\n '\\\\': 220\n};\n\n// Modifier Keys\nconst _modifier = {\n // shiftKey\n '⇧': 16,\n shift: 16,\n // altKey\n '⌥': 18,\n alt: 18,\n option: 18,\n // ctrlKey\n '⌃': 17,\n ctrl: 17,\n control: 17,\n // metaKey\n '⌘': 91,\n cmd: 91,\n meta: 91,\n command: 91\n};\nconst modifierMap = {\n 16: 'shiftKey',\n 18: 'altKey',\n 17: 'ctrlKey',\n 91: 'metaKey',\n shiftKey: 16,\n ctrlKey: 17,\n altKey: 18,\n metaKey: 91\n};\nconst _mods = {\n 16: false,\n 18: false,\n 17: false,\n 91: false\n};\nconst _handlers = {};\n\n// F1~F12 special key\nfor (let k = 1; k < 20; k++) {\n _keyMap[\"f\".concat(k)] = 111 + k;\n}\n\n/** Record the pressed keys */\nlet _downKeys = [];\n/** Whether the window has already listened to the focus event */\nlet winListendFocus = null;\n/** Default hotkey scope */\nlet _scope = 'all';\n/** Map to record elements with bound events */\nconst elementEventMap = new Map();\n\n/** Return key code */\nconst code = x => _keyMap[x.toLowerCase()] || _modifier[x.toLowerCase()] || x.toUpperCase().charCodeAt(0);\nconst getKey = x => Object.keys(_keyMap).find(k => _keyMap[k] === x);\nconst getModifier = x => Object.keys(_modifier).find(k => _modifier[k] === x);\n\n/** Set or get the current scope (defaults to 'all') */\nfunction setScope(scope) {\n _scope = scope || 'all';\n}\n/** Get the current scope */\nfunction getScope() {\n return _scope || 'all';\n}\n/** Get the key codes of the currently pressed keys */\nfunction getPressedKeyCodes() {\n return _downKeys.slice(0);\n}\nfunction getPressedKeyString() {\n return _downKeys.map(c => getKey(c) || getModifier(c) || String.fromCharCode(c));\n}\nfunction getAllKeyCodes() {\n const result = [];\n Object.keys(_handlers).forEach(k => {\n _handlers[k].forEach(_ref => {\n let {\n key,\n scope,\n mods,\n shortcut\n } = _ref;\n result.push({\n scope,\n shortcut,\n mods,\n keys: key.split('+').map(v => code(v))\n });\n });\n });\n return result;\n}\n\n/** hotkey is effective only when filter return true */\nfunction filter(event) {\n const target = event.target || event.srcElement;\n const {\n tagName\n } = target;\n let flag = true;\n const isInput = tagName === 'INPUT' && !['checkbox', 'radio', 'range', 'button', 'file', 'reset', 'submit', 'color'].includes(target.type);\n // ignore: isContentEditable === 'true', <input> and <textarea> when readOnly state is false, <select>\n if (target.isContentEditable || (isInput || tagName === 'TEXTAREA' || tagName === 'SELECT') && !target.readOnly) {\n flag = false;\n }\n return flag;\n}\n\n/** Determine whether the pressed key matches a specific key, returns true or false */\nfunction isPressed(keyCode) {\n if (typeof keyCode === 'string') {\n keyCode = code(keyCode); // Convert to key code\n }\n return _downKeys.indexOf(keyCode) !== -1;\n}\n\n/** Loop through and delete all handlers with the specified scope */\nfunction deleteScope(scope, newScope) {\n let handlers;\n let i;\n\n // If no scope is specified, get the current scope\n if (!scope) scope = getScope();\n for (const key in _handlers) {\n if (Object.prototype.hasOwnProperty.call(_handlers, key)) {\n handlers = _handlers[key];\n for (i = 0; i < handlers.length;) {\n if (handlers[i].scope === scope) {\n const deleteItems = handlers.splice(i, 1);\n deleteItems.forEach(_ref2 => {\n let {\n element\n } = _ref2;\n return removeKeyEvent(element);\n });\n } else {\n i++;\n }\n }\n }\n }\n\n // If the current scope has been deleted, reset the scope to 'all'\n if (getScope() === scope) setScope(newScope || 'all');\n}\n\n/** Clear modifier keys */\nfunction clearModifier(event) {\n let key = event.keyCode || event.which || event.charCode;\n if (event.key && event.key.toLowerCase() === 'capslock') {\n // Ensure that when capturing keystrokes in modern browsers,\n // uppercase and lowercase letters (such as R and r) return the same key value.\n // https://github.com/jaywcjlove/hotkeys-js/pull/514\n // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key\n key = code(event.key);\n }\n const i = _downKeys.indexOf(key);\n\n // Remove the pressed key from the list\n if (i >= 0) {\n _downKeys.splice(i, 1);\n }\n // Special handling for the command key: fix the issue where keyup only triggers once for command combos\n if (event.key && event.key.toLowerCase() === 'meta') {\n _downKeys.splice(0, _downKeys.length);\n }\n\n // Clear modifier keys: shiftKey, altKey, ctrlKey, (command || metaKey)\n if (key === 93 || key === 224) key = 91;\n if (key in _mods) {\n _mods[key] = false;\n\n // Reset the modifier key status to false\n for (const k in _modifier) if (_modifier[k] === key) hotkeys[k] = false;\n }\n}\nfunction unbind(keysInfo) {\n // unbind(), unbind all keys\n if (typeof keysInfo === 'undefined') {\n Object.keys(_handlers).forEach(key => {\n Array.isArray(_handlers[key]) && _handlers[key].forEach(info => eachUnbind(info));\n delete _handlers[key];\n });\n removeKeyEvent(null);\n } else if (Array.isArray(keysInfo)) {\n // support like : unbind([{key: 'ctrl+a', scope: 's1'}, {key: 'ctrl-a', scope: 's2', splitKey: '-'}])\n keysInfo.forEach(info => {\n if (info.key) eachUnbind(info);\n });\n } else if (typeof keysInfo === 'object') {\n // support like unbind({key: 'ctrl+a, ctrl+b', scope:'abc'})\n if (keysInfo.key) eachUnbind(keysInfo);\n } else if (typeof keysInfo === 'string') {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n // support old method\n // eslint-disable-line\n let [scope, method] = args;\n if (typeof scope === 'function') {\n method = scope;\n scope = '';\n }\n eachUnbind({\n key: keysInfo,\n scope,\n method,\n splitKey: '+'\n });\n }\n}\n\n/** Unbind hotkeys for a specific scope */\nconst eachUnbind = _ref3 => {\n let {\n key,\n scope,\n method,\n splitKey = '+'\n } = _ref3;\n const multipleKeys = getKeys(key);\n multipleKeys.forEach(originKey => {\n const unbindKeys = originKey.split(splitKey);\n const len = unbindKeys.length;\n const lastKey = unbindKeys[len - 1];\n const keyCode = lastKey === '*' ? '*' : code(lastKey);\n if (!_handlers[keyCode]) return;\n // If scope is not provided, get the current scope\n if (!scope) scope = getScope();\n const mods = len > 1 ? getMods(_modifier, unbindKeys) : [];\n const unbindElements = [];\n _handlers[keyCode] = _handlers[keyCode].filter(record => {\n // Check if the method matches; if method is provided, must be equal to unbind\n const isMatchingMethod = method ? record.method === method : true;\n const isUnbind = isMatchingMethod && record.scope === scope && compareArray(record.mods, mods);\n if (isUnbind) unbindElements.push(record.element);\n return !isUnbind;\n });\n unbindElements.forEach(element => removeKeyEvent(element));\n });\n};\n\n/** Handle the callback function for the corresponding hotkey */\nfunction eventHandler(event, handler, scope, element) {\n if (handler.element !== element) {\n return;\n }\n let modifiersMatch;\n\n // Check if it is within the current scope\n if (handler.scope === scope || handler.scope === 'all') {\n // Check whether modifier keys match (returns true if they do)\n modifiersMatch = handler.mods.length > 0;\n for (const y in _mods) {\n if (Object.prototype.hasOwnProperty.call(_mods, y)) {\n if (!_mods[y] && handler.mods.indexOf(+y) > -1 || _mods[y] && handler.mods.indexOf(+y) === -1) {\n modifiersMatch = false;\n }\n }\n }\n\n // Call the handler function; ignore if it's only a modifier key\n if (handler.mods.length === 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91] || modifiersMatch || handler.shortcut === '*') {\n handler.keys = [];\n handler.keys = handler.keys.concat(_downKeys);\n if (handler.method(event, handler) === false) {\n if (event.preventDefault) event.preventDefault();else event.returnValue = false;\n if (event.stopPropagation) event.stopPropagation();\n if (event.cancelBubble) event.cancelBubble = true;\n }\n }\n }\n}\n\n/** Handle the keydown event */\nfunction dispatch(event, element) {\n const asterisk = _handlers['*'];\n let key = event.keyCode || event.which || event.charCode;\n // Ensure that when capturing keystrokes in modern browsers,\n // uppercase and lowercase letters (such as R and r) return the same key value.\n // https://github.com/jaywcjlove/hotkeys-js/pull/514\n // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key\n // CapsLock key\n // There's an issue where `keydown` and `keyup` events are not triggered after CapsLock is enabled to activate uppercase.\n if (event.key && event.key.toLowerCase() === 'capslock') {\n return;\n }\n // Form control filter: by default, shortcut keys are not triggered in form elements\n if (!hotkeys.filter.call(this, event)) return;\n\n // In Gecko (Firefox), the command key code is 224; unify it with WebKit (Chrome)\n // In WebKit, left and right command keys have different codes\n if (key === 93 || key === 224) key = 91;\n\n /**\n * Collect bound keys\n * If an Input Method Editor is processing key input and the event is keydown, return 229.\n * https://stackoverflow.com/questions/25043934/is-it-ok-to-ignore-keydown-events-with-keycode-229\n * http://lists.w3.org/Archives/Public/www-dom/2010JulSep/att-0182/keyCode-spec.html\n */\n if (_downKeys.indexOf(key) === -1 && key !== 229) _downKeys.push(key);\n /**\n * Jest test cases are required.\n * ===============================\n */\n ['metaKey', 'ctrlKey', 'altKey', 'shiftKey'].forEach(keyName => {\n const keyNum = modifierMap[keyName];\n if (event[keyName] && _downKeys.indexOf(keyNum) === -1) {\n _downKeys.push(keyNum);\n } else if (!event[keyName] && _downKeys.indexOf(keyNum) > -1) {\n _downKeys.splice(_downKeys.indexOf(keyNum), 1);\n } else if (keyName === 'metaKey' && event[keyName]) {\n // If the command key is pressed, clear all non-modifier keys except the current event key.\n // This is because keyup for non-modifier keys will NEVER be triggered when command is pressed.\n // This is a known browser limitation.\n _downKeys = _downKeys.filter(k => k in modifierMap || k === key);\n }\n });\n /**\n * -------------------------------\n */\n if (key in _mods) {\n _mods[key] = true;\n // Register special modifier keys to the `hotkeys` object\n for (const k in _modifier) {\n if (Object.prototype.hasOwnProperty.call(_modifier, k)) {\n const eventKey = modifierMap[_modifier[k]];\n hotkeys[k] = event[eventKey];\n }\n }\n if (!asterisk) return;\n }\n\n // Bind the modifier keys in modifierMap to the event\n for (const e in _mods) {\n if (Object.prototype.hasOwnProperty.call(_mods, e)) {\n _mods[e] = event[modifierMap[e]];\n }\n }\n /**\n * https://github.com/jaywcjlove/hotkeys/pull/129\n * This solves the issue in Firefox on Windows where hotkeys corresponding to special characters would not trigger.\n * An example of this is ctrl+alt+m on a Swedish keyboard which is used to type μ.\n * Browser support: https://caniuse.com/#feat=keyboardevent-getmodifierstate\n */\n if (event.getModifierState && !(event.altKey && !event.ctrlKey) && event.getModifierState('AltGraph')) {\n if (_downKeys.indexOf(17) === -1) {\n _downKeys.push(17);\n }\n if (_downKeys.indexOf(18) === -1) {\n _downKeys.push(18);\n }\n _mods[17] = true;\n _mods[18] = true;\n }\n\n // Get the current scope (defaults to 'all')\n const scope = getScope();\n // Handle any hotkeys registered as '*'\n if (asterisk) {\n for (let i = 0; i < asterisk.length; i++) {\n if (asterisk[i].scope === scope && (event.type === 'keydown' && asterisk[i].keydown || event.type === 'keyup' && asterisk[i].keyup)) {\n eventHandler(event, asterisk[i], scope, element);\n }\n }\n }\n // If the key is not registered, return\n if (!(key in _handlers)) return;\n const handlerKey = _handlers[key];\n const keyLen = handlerKey.length;\n for (let i = 0; i < keyLen; i++) {\n if (event.type === 'keydown' && handlerKey[i].keydown || event.type === 'keyup' && handlerKey[i].keyup) {\n if (handlerKey[i].key) {\n const record = handlerKey[i];\n const {\n splitKey\n } = record;\n const keyShortcut = record.key.split(splitKey);\n const _downKeysCurrent = []; // Store the current key codes\n for (let a = 0; a < keyShortcut.length; a++) {\n _downKeysCurrent.push(code(keyShortcut[a]));\n }\n if (_downKeysCurrent.sort().join('') === _downKeys.sort().join('')) {\n // Match found, call the handler\n eventHandler(event, record, scope, element);\n }\n }\n }\n }\n}\nfunction hotkeys(key, option, method) {\n _downKeys = [];\n /** List of hotkeys to handle */\n const keys = getKeys(key);\n let mods = [];\n /** Default scope is 'all', meaning effective in all scopes */\n let scope = 'all';\n /** Element to which the hotkey events are bound */\n let element = document;\n let i = 0;\n let keyup = false;\n let keydown = true;\n let splitKey = '+';\n let capture = false;\n /** Allow only a single callback */\n let single = false;\n\n // Determine if the second argument is a function (no options provided)\n if (method === undefined && typeof option === 'function') {\n method = option;\n }\n\n // Parse options object\n if (Object.prototype.toString.call(option) === '[object Object]') {\n if (option.scope) scope = option.scope; // Set scope\n if (option.element) element = option.element; // Set binding element\n if (option.keyup) keyup = option.keyup;\n if (option.keydown !== undefined) keydown = option.keydown;\n if (option.capture !== undefined) capture = option.capture;\n if (typeof option.splitKey === 'string') splitKey = option.splitKey;\n if (option.single === true) single = true;\n }\n if (typeof option === 'string') scope = option;\n\n // If only one callback is allowed, unbind the existing one first\n if (single) unbind(key, scope);\n\n // Handle each hotkey\n for (; i < keys.length; i++) {\n key = keys[i].split(splitKey); // Split into individual keys\n mods = [];\n\n // If it's a combination, extract modifier keys\n if (key.length > 1) mods = getMods(_modifier, key);\n\n // Convert non-modifier key to key code\n key = key[key.length - 1];\n key = key === '*' ? '*' : code(key); // '*' means match all hotkeys\n\n // Initialize handler array if this key has no handlers yet\n if (!(key in _handlers)) _handlers[key] = [];\n _handlers[key].push({\n keyup,\n keydown,\n scope,\n mods,\n shortcut: keys[i],\n method,\n key: keys[i],\n splitKey,\n element\n });\n }\n // Register hotkey event listeners on the global document\n if (typeof element !== 'undefined' && window) {\n if (!elementEventMap.has(element)) {\n const keydownListener = function () {\n let event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.event;\n return dispatch(event, element);\n };\n const keyupListenr = function () {\n let event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.event;\n dispatch(event, element);\n clearModifier(event);\n };\n elementEventMap.set(element, {\n keydownListener,\n keyupListenr,\n capture\n });\n addEvent(element, 'keydown', keydownListener, capture);\n addEvent(element, 'keyup', keyupListenr, capture);\n }\n // Register focus event listener once to clear pressed keys on window focus\n if (!winListendFocus) {\n const listener = () => {\n _downKeys = [];\n };\n winListendFocus = {\n listener,\n capture\n };\n addEvent(window, 'focus', listener, capture);\n }\n }\n}\nfunction trigger(shortcut) {\n let scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'all';\n Object.keys(_handlers).forEach(key => {\n const dataList = _handlers[key].filter(item => item.scope === scope && item.shortcut === shortcut);\n dataList.forEach(data => {\n if (data && data.method) {\n data.method();\n }\n });\n });\n}\n\n/** Clean up event listeners. After unbinding, check whether the element still has any hotkeys bound. If not, remove its event listeners. */\nfunction removeKeyEvent(element) {\n const values = Object.values(_handlers).flat();\n const findindex = values.findIndex(_ref4 => {\n let {\n element: el\n } = _ref4;\n return el === element;\n });\n if (findindex < 0) {\n const {\n keydownListener,\n keyupListenr,\n capture\n } = elementEventMap.get(element) || {};\n if (keydownListener && keyupListenr) {\n removeEvent(element, 'keyup', keyupListenr, capture);\n removeEvent(element, 'keydown', keydownListener, capture);\n elementEventMap.delete(element);\n }\n }\n if (values.length <= 0 || elementEventMap.size <= 0) {\n // Remove all event listeners from all elements\n const eventKeys = Object.keys(elementEventMap);\n eventKeys.forEach(el => {\n const {\n keydownListener,\n keyupListenr,\n capture\n } = elementEventMap.get(el) || {};\n if (keydownListener && keyupListenr) {\n removeEvent(el, 'keyup', keyupListenr, capture);\n removeEvent(el, 'keydown', keydownListener, capture);\n elementEventMap.delete(el);\n }\n });\n // Clear the elementEventMap\n elementEventMap.clear();\n // Clear all handlers\n Object.keys(_handlers).forEach(key => delete _handlers[key]);\n // Remove the global window focus event listener\n if (winListendFocus) {\n const {\n listener,\n capture\n } = winListendFocus;\n removeEvent(window, 'focus', listener, capture);\n winListendFocus = null;\n }\n }\n}\nconst _api = {\n getPressedKeyString,\n setScope,\n getScope,\n deleteScope,\n getPressedKeyCodes,\n getAllKeyCodes,\n isPressed,\n filter,\n trigger,\n unbind,\n keyMap: _keyMap,\n modifier: _modifier,\n modifierMap\n};\nfor (const a in _api) {\n if (Object.prototype.hasOwnProperty.call(_api, a)) {\n hotkeys[a] = _api[a];\n }\n}\nif (typeof window !== 'undefined') {\n const _hotkeys = window.hotkeys;\n hotkeys.noConflict = deep => {\n if (deep && window.hotkeys === hotkeys) {\n window.hotkeys = _hotkeys;\n }\n return hotkeys;\n };\n window.hotkeys = hotkeys;\n}\n\nexport { hotkeys as default };\n","async function a(a,t,e=(()=>!1)){do{if(await a(),await e())break;const i=\"number\"==typeof t?t:t();await new Promise((a=>setTimeout(a,Math.max(0,i))))}while(!await e())}export{a as poll};\n","import debounce from 'debounce';\nimport { v4 as uuidv4 } from 'uuid';\nimport hotkeys from 'hotkeys-js';\nimport { poll } from 'poll';\nimport { Origin } from '@annotorious/core';\nimport type { Filter, Lifecycle, Selection, User } from '@annotorious/core';\nimport type { TextAnnotatorState } from './state';\nimport type { TextAnnotation, TextAnnotationTarget } from './model';\nimport type { AnnotatingMode } from './text-annotator';\nimport type { TextAnnotatorOptions } from './text-annotator-options';\nimport { rangeToSelector } from './utils/annotation';\nimport { clonePointerEvent, cloneKeyboardEvent } from './utils/events';\nimport { \n isMac,\n isNotAnnotatable,\n isRangeAnnotatable,\n isRangeWhitespaceOrEmpty,\n mergeRanges,\n splitAnnotatableRanges,\n trimRangeToContainer\n} from './utils/dom';\n\nconst CLICK_TIMEOUT = 300;\n\nconst ARROW_KEYS = ['up', 'down', 'left', 'right'];\n\nconst SELECT_ALL = isMac ? '⌘+a' : 'ctrl+a';\n\nconst SELECTION_KEYS = [\n ...ARROW_KEYS.map(key => `shift+${key}`),\n SELECT_ALL\n];\n\nexport const createSelectionHandler = (\n container: HTMLElement,\n state: TextAnnotatorState<TextAnnotation, unknown>,\n lifecycle: Lifecycle<TextAnnotation, unknown>,\n options: TextAnnotatorOptions<TextAnnotation, unknown>\n) => {\n const { store, selection } = state;\n\n let currentUser: User | undefined;\n\n const {\n annotatingEnabled,\n offsetReferenceSelector,\n selectionMode,\n dismissOnNotAnnotatable = 'NEVER'\n } = options;\n\n let currentFilter: Filter | undefined;\n\n let currentAnnotatingEnabled = annotatingEnabled;\n\n let annotatingMode: AnnotatingMode = 'CREATE_NEW';\n\n let currentTarget: TextAnnotationTarget | undefined;\n\n // Only used if allowModifierSelect === true or if\n // annotatingMode === 'ADD_TO_CURRENT' | 'REPLACE_CURRENT'\n let targetToModify: TextAnnotationTarget | undefined;\n\n let isLeftClick: boolean | undefined;\n\n let lastDownEvent: Selection['event'] | undefined;\n\n const setAnnotatingEnabled = (enabled: boolean) => {\n currentAnnotatingEnabled = enabled;\n onSelectionChange.clear();\n\n if (!enabled) {\n targetToModify = undefined;\n currentTarget = undefined;\n isLeftClick = undefined;\n lastDownEvent = undefined;\n }\n }\n\n const setAnnotatingMode = (mode?: AnnotatingMode) => annotatingMode = mode || 'CREATE_NEW';\n\n const setFilter = (filter?: Filter) => currentFilter = filter;\n \n const setUser = (user?: User) => currentUser = user;\n\n const isAddToCurrentSelect = (evt: Event) => {\n if (annotatingMode === 'ADD_TO_CURRENT')\n return true;\n\n if (options.allowModifierSelect) {\n const asPtr = evt as PointerEvent;\n return isMac ? asPtr.metaKey : asPtr.ctrlKey;\n } else {\n return false;\n }\n }\n\n const onSelectStart = () => {\n if (!currentAnnotatingEnabled) return;\n\n if (isLeftClick === false) return;\n\n const { selected } = selection;\n\n // Will this selection modify an existing annotation?\n const isModifyExisting = (\n isAddToCurrentSelect(lastDownEvent) || annotatingMode === 'REPLACE_CURRENT'\n ) && selected.length === 1\n && selected[0].editable;\n\n if (isModifyExisting) {\n const existing = store.getAnnotation(selected[0].id);\n\n if (existing?.target) {\n targetToModify = existing.target;\n\n currentTarget = {\n annotation: existing.id,\n selector: [],\n created: targetToModify.created,\n creator: targetToModify.creator,\n updated: new Date(),\n updatedBy: currentUser\n };\n\n return;\n }\n }\n\n targetToModify = undefined;\n\n currentTarget = {\n annotation: uuidv4(),\n selector: [],\n created: new Date(),\n creator: currentUser\n };\n };\n\n const onSelectionChange = debounce((evt: Event) => {\n if (!currentAnnotatingEnabled) return;\n\n const sel = document.getSelection();\n\n /**\n * In iOS when a user clicks on a button, the `selectionchange` event is fired.\n * However, the generated selection is empty and the `anchorNode` is `null`. That\n * doesn't give us information about whether the selection is in the annotatable area\n * or whether the previously selected text was dismissed. Therefore we should bail\n * out from such a range processing.\n *\n * @see https://github.com/recogito/text-annotator-js/pull/164#issuecomment-2416961473\n */\n if (!sel?.anchorNode) return;\n\n const selectionRanges =\n Array.from(Array(sel.rangeCount).keys()).map(idx => sel.getRangeAt(idx));\n\n /**\n * This is to handle cases where the selection is \"hijacked\" by\n * another element in a not-annotatable area. A rare case in practice.\n * But rich text editors like Quill will do it!\n */\n if (selectionRanges.every(r => !isRangeAnnotatable(container, r))) {\n currentTarget = undefined;\n return;\n }\n\n const timeDifference = evt.timeStamp - (lastDownEvent?.timeStamp || evt.timeStamp);\n\n /**\n * The selection start needs to be emulated for some platforms, but only \n * for the pointer events! (Keyboard events fire consistently on desktops \n * and the `timeDifference` will always be <10ms between `keydown` and\n * `selectionchange`)\n */\n if (lastDownEvent?.type === 'pointerdown') {\n if (timeDifference < 1000 && !currentTarget) {\n // Chrome/iOS does not reliably fire the 'selectstart' event!\n onSelectStart();\n } else if (sel.isCollapsed && timeDifference < CLICK_TIMEOUT) {\n // Firefox doesn't fire the 'selectstart' when user clicks\n // over the text, which collapses the selection\n onSelectStart();\n }\n }\n\n /*\n Let's assume the user drags the selection from outside the annotatable area\n over the annotatable area (intersection!). Then drags it out again\n (no intersection!), then in again (intersection). Because the\n currentTarget will have been cleared, meanwhile, execution will stop.\n\n But we don't want this - instead, processing should continue as normal,\n and a new currentTarget should be computed when the user drags the\n selection into the annotatable area a second time.\n */\n if (!currentTarget) {\n onSelectStart();\n\n // If the currentTarget is still missing -> bail out\n if (!currentTarget) return;\n }\n\n if (sel.isCollapsed) {\n /**\n * The selection range got collapsed during the selecting process. Unless this\n * is intentional (CTRL + select, modifying existing annotations), the previously \n * created annotation isn't relevant anymore and can be discarded\n *\n * @see https://github.com/recogito/text-annotator-js/issues/139\n */\n if (store.getAnnotation(currentTarget.annotation) && !(\n isAddToCurrentSelect(lastDownEvent) || annotatingMode === 'REPLACE_CURRENT'\n )) {\n selection.clear();\n store.deleteAnnotation(currentTarget.annotation);\n }\n\n return;\n }\n\n const containedRanges =\n selectionRanges.map(r => trimRangeToContainer(r, container));\n\n // The selection should be captured only within the annotatable container\n if (containedRanges.every(r => isRangeWhitespaceOrEmpty(r))) return;\n\n const annotatableRanges = containedRanges.flatMap(r => splitAnnotatableRanges(container, r.cloneRange()));\n\n const hasChanged =\n (annotatableRanges.length > 0 && !currentTarget) ||\n annotatableRanges.length !== currentTarget.selector.length ||\n annotatableRanges.some((r, i) => r.toString() !== currentTarget.selector[i]?.quote);\n\n if (!hasChanged) return;\n\n /** \n * The annotatable ranges are:\n * - the current annotatable ranges\n * - the ranges of the existing annotatation IFF we are adding to the current\n */\n const combinedRanges = (isAddToCurrentSelect(lastDownEvent) && targetToModify) ? mergeRanges([ \n ...(targetToModify.selector.map(s => s.range)),\n ...annotatableRanges\n ]) : annotatableRanges;\n\n currentTarget = {\n ...currentTarget,\n selector: combinedRanges.map(r => rangeToSelector(r, container, offsetReferenceSelector)),\n updated: new Date()\n };\n\n /** \n * If we're modifying (adding to/replacing) an existing annotation, we don't \n * need to perform the steps below.\n * \n * - We don't want to clear the selection\n * - We don't want to update the target until mouse-up\n * \n * CAVEAT: this won't work with keyboard selection yet. Ideally, we'd need an explicit\n * \"isKeyboardSelection\" flag to handle this case correctly.\n */\n if (isAddToCurrentSelect(lastDownEvent) || annotatingMode === 'REPLACE_CURRENT') return;\n\n /**\n * During mouse selection on the desktop, the annotation won't usually exist while the selection is being edited.\n * But it'll be typical during selection via the keyboard or mobile's handlebars.\n */\n if (store.getAnnotation(currentTarget.annotation)) {\n store.updateTarget(currentTarget, Origin.LOCAL);\n } else {\n // Proper lifecycle management: clear the previous selection first\n selection.clear();\n }\n }, 10);\n\n /**\n * Select events don't carry information about the mouse button.\n * Therefore, to prevent right-click selection, we need to listen\n * to the initial pointerdown event and remember the button\n */\n const onPointerDown = (evt: PointerEvent) => {\n /**\n * Cloning the event to prevent it from accidentally being `undefined`\n * @see https://github.com/recogito/text-annotator-js/commit/65d13f3108c429311cf8c2523f6babbbc946013d#r144033948\n */\n lastDownEvent = clonePointerEvent(evt);\n isLeftClick = lastDownEvent.button === 0;\n };\n\n const onPointerUp = async (evt: PointerEvent) => {\n if (!isLeftClick) return;\n\n const lastUpEvent = clonePointerEvent(evt);\n\n // Logic for selecting an existing annotation\n const clickSelect = () => {\n const { x, y } = container.getBoundingClientRect();\n\n if (isNotAnnotatable(container, lastUpEvent.target as Node)) {\n const shouldDismissSelection = typeof dismissOnNotAnnotatable === 'function'\n ? dismissOnNotAnnotatable(lastUpEvent, container)\n : dismissOnNotAnnotatable === 'ALWAYS';\n if (shouldDismissSelection) {\n selection.clear();\n }\n return;\n }\n\n const hovered =\n lastUpEvent.target instanceof Node &&\n container.contains(lastUpEvent.target) &&\n store.getAt(\n lastUpEvent.clientX - x,\n lastUpEvent.clientY - y,\n selectionMode === 'all',\n currentFilter\n );\n\n if (hovered) {\n const { selected } = selection;\n\n const currentIds = new Set(selected.map(s => s.id));\n const nextIds = Array.isArray(hovered) ? hovered.map(a => a.id) : [hovered.id];\n\n const hasChanged =\n currentIds.size !== nextIds.length ||\n !nextIds.every(id => currentIds.has(id));\n\n if (hasChanged) {\n lifecycle.emit('clickAnnotation', hovered);\n selection.userSelect(nextIds, lastUpEvent);\n }\n } else {\n selection.clear();\n }\n };\n\n const timeDifference = lastUpEvent.timeStamp - lastDownEvent.timeStamp;\n if (timeDifference < CLICK_TIMEOUT) {\n await pollSelectionCollapsed();\n\n const sel = document.getSelection();\n\n const isDownOnNotAnnotatable =\n isNotAnnotatable(container, lastDownEvent.target as Node);\n\n const isUpOnNotAnnotatable = \n isNotAnnotatable(container, lastUpEvent.target as Node);\n\n /**\n * Route to `clickSelect` if selection is collapsed OR the click happened\n * entirely over a not-annotatable element.\n *\n * The latter allows preventing re-selection of an existing annotation\n * when a user clicks on not-annotatable controls. For example, a click\n * on a `button` element doesn't make the selection collapse, but it still \n * needs to be processed with `clickSelect`.\n */\n if (sel?.isCollapsed || (isDownOnNotAnnotatable && isUpOnNotAnnotatable)) {\n currentTarget = undefined;\n clickSelect();\n return;\n }\n }\n\n if (currentTarget && currentTarget.selector.length > 0) {\n upsertCurrentTarget();\n selection.userSelect(currentTarget.annotation, lastUpEvent);\n }\n }\n\n /**\n * We must check the `isCollapsed` after an unspecified timeout\n * to handle the annotation dismissal after a click properly.\n *\n * Otherwise, the `isCollapsed` will return an obsolete `false` value,\n * click won't be processed, and the annotation will get falsely re-selected.\n *\n * @see https://github.com/recogito/text-annotator-js/issues/136#issue-2465915707\n * @see https://github.com/recogito/text-annotator-js/issues/136#issuecomment-2413773804\n */\n const pollSelectionCollapsed = async () => {\n const sel = document.getSelection();\n\n let stopPolling = false;\n let isCollapsed = sel?.isCollapsed;\n const shouldStopPolling = () => isCollapsed || stopPolling;\n\n const pollingDelayMs = 1;\n const stopPollingInMs = 50;\n setTimeout(() => stopPolling = true, stopPollingInMs);\n\n return poll(() => isCollapsed = sel?.isCollapsed, pollingDelayMs, shouldStopPolling);\n }\n\n const onContextMenu = (evt: PointerEvent) => {\n const sel = document.getSelection();\n\n if (sel?.isCollapsed) return;\n\n /**\n * When selecting the initial word, Chrome Android\n * fires `contextmenu`before `selectionchange`\n */\n if (!currentTarget || currentTarget.selector.length === 0) {\n onSelectionChange(evt);\n }\n \n /**\n * The selection couldn't be initiated - might span over a not-annotatable element.\n */\n if (!currentTarget) return;\n upsertCurrentTarget();\n\n selection.userSelect(currentTarget.annotation, clonePointerEvent(evt));\n }\n\n /**\n * Handles the completion of keyboard-based text selection when the Shift key is released.\n *\n * When a non-collapsed selection exists upon Shift key release, this handler persists\n * the annotation to the store and programmatically selects it.\n *\n * Event handling is restricted to:\n * - Annotatable elements within the container\n * - The document body (which receives focus during Tab navigation in Firefox and Safari)\n *\n * @see https://github.com/recogito/text-annotator-js/issues/247\n */\n const onKeyup = (evt: KeyboardEvent) => {\n if (!currentAnnotatingEnabled) return;\n\n if (\n evt.repeat ||\n (\n evt.target instanceof Node && isNotAnnotatable(container, evt.target) &&\n evt.target !== document.body\n )\n ) {\n return;\n }\n\n if (evt.key === 'Shift' && currentTarget) {\n const sel = document.getSelection();\n if (!sel.isCollapsed) {\n upsertCurrentTarget();\n selection.userSelect(currentTarget.annotation, cloneKeyboardEvent(evt));\n }\n }\n }\n\n const onSelectAll = (evt: KeyboardEvent) => {\n\n const onSelected = () => setTimeout(() => {\n if (currentTarget?.selector.length > 0) {\n selection.clear();\n\n store.addAnnotation({\n id: currentTarget.annotation,\n bodies: [],\n target: currentTarget\n });\n\n selection.userSelect(currentTarget.annotation, cloneKeyboardEvent(evt));\n }\n \n document.removeEventListener('selectionchange', onSelected);\n\n // Sigh... this needs a delay to work. But doesn't seem reliable.\n }, 100);\n\n // Listen to the change event that follows\n document.addEventListener('selectionchange', onSelected);\n\n // Start selection!\n onSelectStart();\n }\n\n hotkeys(SELECTION_KEYS.join(','), { element: container, keydown: true, keyup: false }, evt => {\n if (!evt.repeat)\n lastDownEvent = cloneKeyboardEvent(evt);\n });\n\n hotkeys(SELECT_ALL, { keydown: true, keyup: false }, evt => {\n lastDownEvent = cloneKeyboardEvent(evt);\n onSelectAll(evt);\n });\n\n /**\n * Clears the current annotation selection when the user moves the text caret using arrow keys.\n *\n * This handler resets the selection state to ensure that free caret navigation through the text\n * does not inadvertently maintain an active annotation selection.\n *\n * Event handling is restricted to:\n * - Annotatable elements within the container\n * - The document body (which receives focus when the popup is closed or when interacting\n * with elements that become unmounted, such as a \"Close\" button)\n */\n const handleArrowKeyPress = (evt: KeyboardEvent) => {\n if (\n evt.repeat ||\n (\n evt.target instanceof Node && isNotAnnotatable(container, evt.target) &&\n evt.target !== document.body\n )\n ) {\n return;\n }\n\n currentTarget = undefined;\n selection.clear();\n };\n\n hotkeys(ARROW_KEYS.join(','), { keydown: true, keyup: false }, handleArrowKeyPress);\n\n // Helper\n const upsertCurrentTarget = () => {\n const existingAnnotation = store.getAnnotation(currentTarget.annotation);\n if (!existingAnnotation) {\n store.addAnnotation({\n id: currentTarget.annotation,\n bodies: [],\n target: currentTarget\n });\n } else {\n const { target: { updated: existingTargetUpdated } } = existingAnnotation;\n const { updated: currentTargetUpdated } = currentTarget;\n\n if (\n !existingTargetUpdated ||\n !currentTargetUpdated ||\n existingTargetUpdated < currentTargetUpdated\n ) {\n store.updateTarget(currentTarget);\n }\n }\n };\n\n document.addEventListener('pointerdown', onPointerDown);\n document.addEventListener('pointerup', onPointerUp);\n document.addEventListener('contextmenu', onContextMenu);\n\n document.addEventListener('keyup', onKeyup);\n container.addEventListener('selectstart', onSelectStart);\n document.addEventListener('selectionchange', onSelectionChange);\n\n const destroy = () => {\n currentTarget = undefined;\n targetToModify = undefined;\n isLeftClick = undefined;\n lastDownEvent = undefined;\n\n onSelectionChange.clear();\n\n document.removeEventListener('pointerdown', onPointerDown);\n document.removeEventListener('pointerup', onPointerUp);\n document.removeEventListener('contextmenu', onContextMenu);\n\n document.removeEventListener('keyup', onKeyup);\n container.removeEventListener('selectstart', onSelectStart);\n document.removeEventListener('selectionchange', onSelectionChange);\n\n hotkeys.unbind();\n };\n\n return {\n destroy,\n setFilter,\n setUser,\n setAnnotatingEnabled,\n setAnnotatingMode\n }\n\n}\n\n","import type { ViewportState } from '@annotorious/core';\nimport { colord } from 'colord';\nimport type { TextAnnotation } from '../../model';\nimport type { TextAnnotatorState } from '../../state';\nimport { \n computeStyle,\n createRenderer,\n DEFAULT_SELECTED_STYLE,\n DEFAULT_STYLE,\n type Highlight,\n type HighlightStyle,\n type HighlightStyleExpression,\n type Painter, \n type RendererFactory, \n type ViewportBounds \n} from '../';\n\nconst toCSS = (s?: HighlightStyle) => {\n const backgroundColor = colord(s?.fill || DEFAULT_STYLE.fill)\n .alpha(s?.fillOpacity === undefined ? DEFAULT_STYLE.fillOpacity : s.fillOpacity)\n .toHex();\n\n const rules = [\n `background-color:${backgroundColor}`,\n s?.underlineThickness ? `text-decoration:underline` : undefined,\n s?.underlineColor ? `text-decoration-color:${s.underlineColor}` : undefined,\n s?.underlineOffset ? `text-underline-offset:${s.underlineOffset}px` : undefined,\n s?.underlineThickness ? `text-decoration-thickness:${s.underlineThickness}px` : undefined\n ].filter(Boolean);\n\n return rules.join(';');\n}\n\n/**\n * EXPERIMENTAL!\n */\nexport const createCSSHighlightPainter = (): Painter => {\n const elem = document.createElement('style');\n document.getElementsByTagName('head')[0].appendChild(elem);\n\n let currentRendered = new Set<string>();\n\n const redraw = (\n highlights:Highlight[], \n viewportBounds: ViewportBounds,\n currentStyle?: HighlightStyleExpression,\n styleOverrides?: Map<string, HighlightStyleExpression>,\n force?: boolean\n ) => {\n // Next set of rendered annotation IDs and selections\n const nextRendered = new Set(highlights.map(h => h.annotation.id));\n\n // Annotations currently in this stylesheet that no longer need rendering\n const toRemove = Array.from(currentRendered).filter(id => !nextRendered.has(id));\n\n // For simplicity, re-generate the whole stylesheet\n const updatedCSS = highlights.map(h => {\n const base = currentStyle\n ? typeof currentStyle === 'function'\n ? currentStyle(h.annotation, h.state)\n : currentStyle\n : h.state?.selected ? DEFAULT_SELECTED_STYLE : DEFAULT_STYLE;\n\n // Trigger the custom painter (if any) as a side-effect\n const style = computeStyle(h, currentStyle);\n\n return `::highlight(_${h.annotation.id}) { ${toCSS(style)} }`;\n });\n\n elem.innerHTML = updatedCSS.join('\\n');\n\n // After we have the styles, we need to update the Highlights.\n // Note that the (experimental) CSS Custom Highlight API is not yet\n // available in TypeScript!\n\n // @ts-ignore\n CSS.highlights.clear();\n // toRemove.forEach(id => CSS.highlights.delete(`_${id}`));\n\n // Could be improved further by (re-)setting only annotations that\n // have changes.\n highlights.forEach(({ annotation }) => {\n const ranges = annotation.target.selector.map(s => s.range);\n\n // @ts-ignore\n const highlights = new Highlight(...ranges);\n\n // @ts-ignore\n CSS.highlights.set(`_${annotation.id}`, highlights);\n });\n\n currentRendered = nextRendered;\n }\n\n const setVisible = (visible: boolean) => {\n console.log('setVisible not implemented on CSS Custom Highlights renderer');\n }\n\n const destroy = () => {\n // Clear all highlights from the Highlight Registry\n // @ts-ignore\n CSS.highlights.clear();\n\n // Remove the stylesheet\n elem.remove();\n }\n\n return {\n destroy,\n setVisible,\n redraw\n };\n\n}\n\nexport const createCSSHighlightRenderer: RendererFactory = (\n container: HTMLElement,\n state: TextAnnotatorState<TextAnnotation, unknown>,\n viewport: ViewportState\n) => createRenderer(createCSSHighlightPainter(), container, state, viewport);","import type { FormatAdapter, UserSelectActionExpression, User } from '@annotorious/core';\nimport type { HighlightStyleExpression, RendererFactory } from './rendering';\nimport type { TextAnnotation } from './model';\n\nexport interface TextAnnotatorOptions<I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation> {\n\n adapter?: FormatAdapter<I, E> | null;\n\n allowModifierSelect?: boolean;\n\n annotatingEnabled?: boolean;\n\n /**\n * Determines whether an active selection should be dismissed\n * when a user ends their interaction (click, selection)\n * on a non-annotatable element.\n * - NEVER - don't dismiss the selection, ignore the action.\n * - ALWAYS - dismiss the selection.\n * - function - a custom matcher that takes an event and container as arguments.\n * Returns `true` if the selection should be dismissed.\n *\n * @defaut NEVER\n */\n dismissOnNotAnnotatable?: DismissOnNotAnnotatableExpression;\n\n mergeHighlights?: {\n\n horizontalTolerance?: number;\n\n verticalTolerance?: number;\n\n }\n\n offsetReferenceSelector?: string;\n \n renderer?: RendererType | RendererFactory;\n\n selectionMode?: 'shortest' | 'all';\n\n style?: HighlightStyleExpression;\n\n user?: User;\n\n userSelectAction?: UserSelectActionExpression<E>,\n\n}\n\nexport type RendererType = 'SPANS' | 'CSS_HIGHLIGHTS';\n\nexport type DismissOnNotAnnotatableExpression = 'NEVER'| 'ALWAYS' | ((event: Event, container: HTMLElement) => boolean)\n\nexport const fillDefaults = <I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation>(\n opts: TextAnnotatorOptions<I, E>,\n defaults: TextAnnotatorOptions<I, E>\n): TextAnnotatorOptions<I, E> => ({\n ...opts,\n annotatingEnabled: opts.annotatingEnabled ?? defaults.annotatingEnabled,\n user: opts.user || defaults.user\n});\n","import { \n type Annotator, \n type Filter, \n type User,\n createAnonymousGuest, \n createBaseAnnotator,\n createLifecycleObserver,\n createUndoStack \n} from '@annotorious/core';\nimport type { HighlightStyleExpression, Renderer, RendererFactory } from './rendering';\nimport { createSpansRenderer } from './rendering/renderer-spans';\nimport { createCSSHighlightRenderer } from './rendering/renderer-css-highlight';\nimport type { TextAnnotation } from './model';\nimport { \n type TextAnnotationStore, \n type TextAnnotatorState, \n createTextAnnotatorState \n} from './state';\nimport { scrollIntoView } from './utils/annotation';\nimport { programmaticallyFocusable } from './utils/dom';\nimport { cancelSingleClickEvents } from './utils/events';\nimport { createSelectionHandler } from './selection-handler';\nimport { \n type RendererType, \n type TextAnnotatorOptions,\n fillDefaults\n} from './text-annotator-options';\n\nimport './text-annotator.css';\n\nconst USE_DEFAULT_RENDERER: RendererType = 'SPANS';\n\nexport interface TextAnnotator<I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation> extends Annotator<I, E> {\n\n element: HTMLElement;\n\n renderer: Renderer;\n\n setStyle(style?: HighlightStyleExpression, id?: string): void;\n\n // Returns true if successful (or false if the annotation is not currently rendered)\n scrollIntoView(annotationOrId: I | string, scrollParentOrId?: string | Element): boolean;\n\n setAnnotatingEnabled(enabled?: boolean): void;\n\n setAnnotatingMode(mode?: AnnotatingMode): void;\n\n state: TextAnnotatorState<I, E>;\n\n}\n\nexport type AnnotatingMode = 'CREATE_NEW' | 'ADD_TO_CURRENT' | 'REPLACE_CURRENT';\n\nexport const createTextAnnotator = <I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation>(\n container: HTMLElement,\n options: TextAnnotatorOptions<I, E> = {}\n): TextAnnotator<I, E> => {\n // Prevent mobile browsers from triggering word selection on single click.\n cancelSingleClickEvents(container);\n\n // Make sure that the container is focusable and can receive both pointer and keyboard events\n programmaticallyFocusable(container);\n\n const opts = fillDefaults<I, E>(options, {\n annotatingEnabled: true,\n user: createAnonymousGuest()\n });\n\n const state: TextAnnotatorState<I, E> = createTextAnnotatorState<I, E>(container, opts);\n\n const { selection, viewport } = state;\n\n const store: TextAnnotationStore<I> = state.store;\n\n const undoStack = createUndoStack<I>(store);\n\n const lifecycle = createLifecycleObserver<I, E>(state, undoStack, opts.adapter);\n\n let currentUser: User = opts.user;\n\n // Use the selected built-in renderer, or fall back to default. If \n // CSS_HIGHLIGHT is selected, check if CSS Custom Highlights are \n // supported, and fall back to default renderer if not.\n const useBuiltInRenderer: RendererType | null =\n typeof opts.renderer !== 'function' ? \n opts.renderer === 'CSS_HIGHLIGHTS'\n ? Boolean(CSS.highlights) ? 'CSS_HIGHLIGHTS' : USE_DEFAULT_RENDERER\n : opts.renderer || USE_DEFAULT_RENDERER :\n null;\n\n const renderer =\n useBuiltInRenderer === null ? (opts.renderer as RendererFactory)(container, state, viewport) :\n useBuiltInRenderer === 'SPANS' ? createSpansRenderer(container, state, viewport) :\n useBuiltInRenderer === 'CSS_HIGHLIGHTS' ? createCSSHighlightRenderer(container, state, viewport) :\n undefined;\n\n if (!renderer)\n throw `Unknown renderer implementation: ${opts.renderer}`;\n\n if (useBuiltInRenderer)\n console.debug(`Using ${useBuiltInRenderer} renderer`);\n else \n console.debug('Using custom renderer implementation');\n\n if (opts.style)\n renderer.setStyle(opts.style);\n\n const selectionHandler = createSelectionHandler(container, state, lifecycle, opts);\n selectionHandler.setUser(currentUser);\n\n /*************************/\n /* External API */\n /******++++++*************/\n\n // Most of the external API functions are covered in the base annotator\n const base = createBaseAnnotator<I, E>(state, undoStack, opts.adapter);\n\n const getUser = () => currentUser;\n\n const setAnnotatingEnabled = (enabled?: boolean) => {\n selectionHandler.setAnnotatingEnabled(\n enabled === undefined ? true : enabled\n );\n }\n\n const setAnnotatingMode = (mode?: AnnotatingMode) => {\n selectionHandler.setAnnotatingMode(mode);\n }\n\n const setFilter = (filter?: Filter<I>) => {\n renderer.setFilter(filter);\n selectionHandler.setFilter(filter);\n }\n\n const setUser = (user: User) => {\n currentUser = user;\n selectionHandler.setUser(user);\n }\n\n const setSelected = (arg?: string | string[]) => {\n if (arg) {\n selection.setSelected(arg);\n } else {\n selection.clear();\n }\n }\n\n const destroy = () => {\n renderer.destroy();\n selectionHandler.destroy();\n\n // Other cleanup actions\n undoStack.destroy();\n }\n\n return {\n ...base,\n destroy,\n element: container,\n getUser,\n renderer,\n setAnnotatingEnabled,\n setAnnotatingMode,\n setFilter,\n setStyle: renderer.setStyle.bind(renderer),\n setUser,\n setSelected,\n setVisible: renderer.setVisible.bind(renderer),\n on: lifecycle.on,\n off: lifecycle.off,\n scrollIntoView: scrollIntoView(container, store),\n state\n }\n\n}\n"],"names":["byteToHex","i","unsafeStringify","arr","offset","rnds8","rng","v4","options","buf","_v4","rnds","isMac","NOT_ANNOTATABLE_CLASS","NOT_ANNOTATABLE_SELECTOR","isNotAnnotatable","container","node","isRangeAnnotatable","range","ancestor","whitespaceOrEmptyRegex","isRangeWhitespaceOrEmpty","isNodeWhitespaceOrEmpty","mergeRanges","ranges","a","b","cmp","first","rest","result","acc","next","programmaticallyFocusable","iterateNotAnnotatableElements","notAnnotatableIterator","notAnnotatableNode","splitAnnotatableRanges","annotatableRanges","prevNotAnnotatable","notAnnotatable","subRange","lastRange","getRangeAnnotatableContents","contents","el","trimRangeToContainer","trimmedRange","segmenter","getQuoteContext","length","offsetReferenceSelector","offsetReference","rangeBefore","before","rangeAfter","after","prefixGraphemes","suffixGraphemes","s","rangeToSelector","quote","start","end","isRevived","selector","reviveSelector","iterator","runningOffset","n","startCounting","len","reviveTarget","target","reviveAnnotation","annotation","getScrollParent","overflowY","scroll","store","scrollParent","parentBounds","parentHeight","parentWidth","annotationBounds","width","height","offsetTop","offsetLeft","scrollTop","scrollLeft","top","left","scrollIntoView","annotationOrId","scrollParentOrId","id","current","annoRange","revived","revivedAnnoRange","G","$","X","N","_","z","Z","M","f","A","Oe","F","P","Be","w","L","C","u","B","h","v","m","T","l","K","R","ee","te","ne","H","oe","o","V","Re","se","ie","de","re","W","O","ce","le","Y","ue","xe","d","r","c","p","U","y","D","I","E","S","x","Q","J","j","q","fe","Ne","k","ke","Ie","g","pe","$e","ge","he","Ae","me","be","Pe","ve","Ee","Ve","Me","W3CTextFormat","source","serialized","parseW3CTextAnnotation","serializeW3CTextAnnotation","isTextSelector","parseW3CTextTargets","annotationId","creator","created","modified","w3cTargets","parsed","parseW3CUser","w3cTarget","w3cSelector","missingTypes","uuidv4","body","bodies","parseW3CBodies","updated","targetRest","quoteSelector","prefix","suffix","positionSelector","serializeW3CBodies","createNanoEvents","event","args","callbacks","cb","cancelSingleClickEvents","clonePointerEvent","cloneKeyboardEvent","debounce","func","delay","timeoutId","createRenderer","painter","state","viewport","selection","hover","emitter","currentStyle","styleOverrides","currentFilter","onDraw","trackViewport","onPointerMove","hit","UserSelectAction","redraw","force","bounds","getViewportBounds","minX","minY","maxX","maxY","annotationsInView","selectedIds","highlights","rects","selected","hovered","setStyle","style","setFilter","filter","on","callback","onStoreChange","unsubscribeSelection","unsubscribeHover","onScroll","onResize","resizeObserver","config","mutationObserver","records","record","t","e","DEFAULT_STYLE","DEFAULT_SELECTED_STYLE","getBackgroundColor","colord","computeStyle","highlight","has","dequal","foo","bar","ctor","computeZIndex","rect","all","intersects","getLength","total","intersecting","getHighlightClientRects","textNodes","it","currentNode","last","firstRange","childNode","getTextClientRects","getRelation","rectA","rectB","hTolerance","vTolerance","round","num","union","right","bottom","mergeClientRects","merged","wasMerged","relation","toDomRectList","index","toParentBounds","toViewportBounds","createSpansPainter","highlightLayer","currentRendered","highlightA","highlightB","createdA","createdB","computedStyle","span","visible","createSpansRenderer","innerWidth","innerHeight","annotations","ids","quickselect","compare","defaultCompare","sd","newLeft","newRight","swap","tmp","RBush","maxEntries","bbox","toBBox","nodesToSearch","child","childBBox","contains","data","tmpNode","item","createNode","equalsFn","path","indexes","parent","goingUp","findItem","items","calcBBox","N2","N1","multiSelect","right2","right3","level","minArea","minEnlargement","targetNode","area","bboxArea","enlargement","enlargedArea","isNode","insertPath","extend","splitIndex","newNode","minOverlap","bbox1","distBBox","bbox2","overlap","intersectionArea","compareMinX","compareNodeMinX","compareMinY","compareNodeMinY","xMargin","yMargin","leftBBox","rightBBox","margin","bboxMargin","siblings","destNode","children","stack","mid","createSpatialTree","hMergeTolerance","vMergeTolerance","tree","toItems","revivedRange","clear","insert","remove","update","set","targets","replace","rectsByTarget","allRects","getAt","hits","getAnnotationBounds","getAnnotationRects","indexed","annotationIds","createTextAnnotatorState","opts","createStore","createSelectionState","createHoverState","createViewportState","addAnnotation","origin","Origin","isValid","bulkAddAnnotations","couldNotRevive","bulkUpsertAnnotations","updateTarget","bulkUpdateTargets","getAll","filtered","getIntersecting","recalculatePositions","onRecalculatePositions","changes","deleted","newValue","function_","wait","immediate","storedContext","storedArguments","timestamp","run","callContext","callArguments","later","debounced","arguments_","callNow","isff","addEvent","object","method","useCapture","removeEvent","getMods","modifier","key","mods","getKeys","keys","compareArray","a1","a2","arr1","arr2","isIndex","_keyMap","_modifier","modifierMap","_mods","_handlers","_downKeys","winListendFocus","_scope","elementEventMap","code","getKey","getModifier","setScope","scope","getScope","getPressedKeyCodes","getPressedKeyString","getAllKeyCodes","_ref","shortcut","tagName","flag","isInput","isPressed","keyCode","deleteScope","newScope","handlers","_ref2","element","removeKeyEvent","clearModifier","hotkeys","unbind","keysInfo","info","eachUnbind","_len","_key","_ref3","splitKey","originKey","unbindKeys","lastKey","unbindElements","isUnbind","eventHandler","handler","modifiersMatch","dispatch","asterisk","keyName","keyNum","eventKey","handlerKey","keyLen","keyShortcut","_downKeysCurrent","option","keyup","keydown","capture","single","keydownListener","keyupListenr","listener","trigger","values","_ref4","_api","_hotkeys","deep","CLICK_TIMEOUT","ARROW_KEYS","SELECT_ALL","SELECTION_KEYS","createSelectionHandler","lifecycle","currentUser","annotatingEnabled","selectionMode","dismissOnNotAnnotatable","currentAnnotatingEnabled","annotatingMode","currentTarget","targetToModify","isLeftClick","lastDownEvent","setAnnotatingEnabled","enabled","onSelectionChange","setAnnotatingMode","mode","setUser","user","isAddToCurrentSelect","evt","asPtr","onSelectStart","existing","sel","selectionRanges","idx","timeDifference","containedRanges","combinedRanges","onPointerDown","onPointerUp","lastUpEvent","clickSelect","currentIds","nextIds","pollSelectionCollapsed","isDownOnNotAnnotatable","isUpOnNotAnnotatable","upsertCurrentTarget","stopPolling","isCollapsed","shouldStopPolling","pollingDelayMs","poll","onContextMenu","onKeyup","onSelectAll","onSelected","handleArrowKeyPress","existingAnnotation","existingTargetUpdated","currentTargetUpdated","toCSS","createCSSHighlightPainter","elem","viewportBounds","nextRendered","updatedCSS","createCSSHighlightRenderer","fillDefaults","defaults","USE_DEFAULT_RENDERER","createTextAnnotator","createAnonymousGuest","undoStack","createUndoStack","createLifecycleObserver","useBuiltInRenderer","renderer","selectionHandler","base","createBaseAnnotator","getUser","setSelected","arg"],"mappings":"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","x_google_ignoreList":[0,1,2,14,16,21,23,30,31,34,35,36]}
1
+ {"version":3,"file":"text-annotator.umd.js","sources":["../../../node_modules/uuid/dist/stringify.js","../../../node_modules/uuid/dist/rng.js","../../../node_modules/uuid/dist/v4.js","../src/utils/dom/device.ts","../src/utils/dom/is-not-annotatable.ts","../src/utils/dom/is-whitespace-or-empty.ts","../src/utils/dom/merge-ranges.ts","../src/utils/dom/programmatically-focusable.ts","../src/utils/dom/split-annotatable-ranges.ts","../src/utils/dom/trim-range-to-container.ts","../src/utils/annotation/get-quote-context.ts","../src/utils/annotation/range-to-selector.ts","../src/utils/annotation/revive-annotation.ts","../src/utils/annotation/scroll-into-view.ts","../../../node_modules/@annotorious/core/dist/annotorious-core.es.js","../src/model/w3c/w3c-text-format-adapter.ts","../../../node_modules/nanoevents/index.js","../src/utils/events/cancel-single-click-events.ts","../src/utils/events/clone-events.ts","../src/utils/events/debounce.ts","../src/rendering/base-renderer.ts","../../../node_modules/colord/index.mjs","../src/rendering/highlight-style.ts","../../../node_modules/dequal/lite/index.mjs","../src/utils/highlight/compute-z-index.ts","../src/utils/highlight/get-highlight-client-rects.ts","../src/utils/highlight/merge-client-rects.ts","../src/utils/highlight/rects-to-bounds.ts","../src/rendering/renderer-spans/spans-renderer.ts","../src/rendering/viewport.ts","../../../node_modules/quickselect/index.js","../../../node_modules/rbush/index.js","../src/state/spatial-tree.ts","../src/state/text-annotator-state.ts","../../../node_modules/debounce/index.js","../../../node_modules/hotkeys-js/dist/hotkeys-js.js","../../../node_modules/poll/dist/poll.js","../src/selection-handler.ts","../src/rendering/renderer-css-highlight/css-highlight-renderer.ts","../src/text-annotator-options.ts","../src/text-annotator.ts"],"sourcesContent":["import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","const rnds8 = new Uint8Array(16);\nexport default function rng() {\n return crypto.getRandomValues(rnds8);\n}\n","import rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (!buf && !options && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n return _v4(options, buf, offset);\n}\nfunction _v4(options, buf, offset) {\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n","// Simple macOS detection without external dependencies\n// navigator.platform returns \"MacIntel\" or \"MacPPC\" on macOS\nexport const isMac = typeof navigator !== 'undefined' && navigator.platform.startsWith('Mac');\n","export const NOT_ANNOTATABLE_CLASS = 'not-annotatable';\n\nexport const NOT_ANNOTATABLE_SELECTOR = `.${NOT_ANNOTATABLE_CLASS}`;\n\nexport const isNotAnnotatable = (container: Node, node: Node): boolean => {\n if (!container.contains(node)) return true;\n\n const closestNotAnnotatable = node instanceof HTMLElement\n ? node.closest(NOT_ANNOTATABLE_SELECTOR)\n : node.parentElement?.closest(NOT_ANNOTATABLE_SELECTOR);\n return Boolean(closestNotAnnotatable);\n}\n\nexport const isRangeAnnotatable = (container: Node, range: Range): boolean => {\n const ancestor = range.commonAncestorContainer;\n return !isNotAnnotatable(container, ancestor);\n}","export const whitespaceOrEmptyRegex = /^\\s*$/;\n\nexport const isRangeWhitespaceOrEmpty = (range: Range): boolean => \n whitespaceOrEmptyRegex.test(range.toString())\n\nexport const isNodeWhitespaceOrEmpty = (node: Node): boolean =>\n whitespaceOrEmptyRegex.test(node.textContent || '');\n","export const mergeRanges = (ranges: Range[]): Range[] => {\n if (ranges.length === 0) return [];\n if (ranges.length === 1) return [ranges[0]];\n\n // Sort by start position\n ranges.sort((a, b) => {\n const cmp = a.compareBoundaryPoints(Range.START_TO_START, b);\n if (cmp !== 0) return cmp;\n\n // If equal, sort by end position\n return a.compareBoundaryPoints(Range.END_TO_END, b);\n });\n\n const [first, ...rest] = ranges;\n\n const result = rest.reduce<{ merged: Range[], current: Range }>((acc, next) => {\n // Check if current and next overlap or are adjacent (current.end >= next.start)\n const comparison = acc.current.compareBoundaryPoints(Range.START_TO_END, next);\n\n if (comparison >= 0) {\n // Ranges overlap/touch - merge\n const endComparison = acc.current.compareBoundaryPoints(Range.END_TO_END, next);\n if (endComparison < 0) {\n // Next extends beyond current - extend current's end\n acc.current.setEnd(next.endContainer, next.endOffset);\n }\n\n // Otherwise current already encompasses next, no change needed\n return acc;\n } else {\n // Disjoint - save current and start new range\n acc.merged.push(acc.current);\n acc.current = next.cloneRange();\n return acc;\n }\n }, { merged: [], current: first.cloneRange() });\n\n return [...result.merged, result.current];\n}","/**\n * Makes an element programmatically focusable by adding a `tabindex=\"-1\"` attribute.\n * Or does nothing if the element is already focusable 🤷🏻\n * It's required to process keyboard events on an element that is not natively focusable.\n */\nexport const programmaticallyFocusable = (container: HTMLElement) => {\n if (!container.hasAttribute('tabindex') || container.tabIndex < -1) {\n container.setAttribute('tabindex', '-1');\n }\n\n container.classList.add('no-focus-outline');\n};\n","import { isRangeAnnotatable, NOT_ANNOTATABLE_CLASS, NOT_ANNOTATABLE_SELECTOR } from '../dom';\n\nconst iterateNotAnnotatableElements = function*(range: Range): Generator<HTMLElement> {\n const notAnnotatableIterator = document.createNodeIterator(\n range.commonAncestorContainer,\n NodeFilter.SHOW_ELEMENT,\n (node) =>\n node instanceof HTMLElement // Only elements that can have the class applied\n && node.classList.contains(NOT_ANNOTATABLE_CLASS) // Only elements that are not annotatable\n && !node.parentElement?.closest(NOT_ANNOTATABLE_SELECTOR) // Only elements that are not descendants of a not annotatable element\n && range.intersectsNode(node) // Only elements that are within the range\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_SKIP\n );\n\n let notAnnotatableNode: Node | null;\n\n while ((notAnnotatableNode = notAnnotatableIterator.nextNode())) {\n if (notAnnotatableNode instanceof HTMLElement) {\n yield notAnnotatableNode;\n }\n }\n}\n\n/**\n * Splits a DOM Range into one or more ranges that span annotatable content only.\n */\nexport const splitAnnotatableRanges = (container: Node, range: Range): Range[] => {\n if (!isRangeAnnotatable(container, range)) return [];\n\n const annotatableRanges: Range[] = [];\n\n let prevNotAnnotatable: HTMLElement | null = null;\n\n for (const notAnnotatable of iterateNotAnnotatableElements(range)) {\n let subRange: Range;\n\n // From the start of the range to the not annotatable element.\n // If selection starts on the non-annotatable element, a collapsed range will be created and ignored.\n if (!prevNotAnnotatable) {\n subRange = range.cloneRange();\n subRange.setEndBefore(notAnnotatable);\n } else {\n // From the previous not annotatable element to the current not annotatable element\n subRange = document.createRange();\n subRange.setStartAfter(prevNotAnnotatable);\n subRange.setEndBefore(notAnnotatable);\n }\n\n if (!subRange.collapsed)\n annotatableRanges.push(subRange);\n\n prevNotAnnotatable = notAnnotatable;\n }\n\n // From the last not annotatable element to the end of the parent range\n if (prevNotAnnotatable) {\n const lastRange = range.cloneRange();\n lastRange.setStartAfter(prevNotAnnotatable);\n if (!lastRange.collapsed) {\n annotatableRanges.push(lastRange);\n }\n }\n\n return annotatableRanges.length > 0 ? annotatableRanges : [range];\n}\n\nexport const getRangeAnnotatableContents = (range: Range): DocumentFragment => {\n const contents = range.cloneContents();\n contents.querySelectorAll(NOT_ANNOTATABLE_SELECTOR).forEach((el) => el.remove());\n return contents;\n}\n","export const trimRangeToContainer = (\n range: Range,\n container: HTMLElement\n): Range => {\n const trimmedRange = range.cloneRange();\n\n /**\n * If the range starts outside the container -\n * trim it to the start of the container\n */\n if (!container.contains(trimmedRange.startContainer)) {\n trimmedRange.setStart(container, 0);\n }\n\n /**\n * If the range ends outside the container -\n * trim it to the end of the container\n */\n if (!container.contains(trimmedRange.endContainer)) {\n trimmedRange.setEnd(container, container.childNodes.length);\n }\n\n return trimmedRange;\n}\n","import { getRangeAnnotatableContents } from '../dom';\n\nconst segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n\nexport const getQuoteContext = (\n range: Range,\n container: HTMLElement,\n length = 10,\n offsetReferenceSelector?: string\n) => {\n const offsetReference: HTMLElement = offsetReferenceSelector\n ? (range.startContainer.parentElement as HTMLElement).closest(offsetReferenceSelector)!\n : container;\n\n const rangeBefore = document.createRange();\n rangeBefore.setStart(offsetReference, 0);\n rangeBefore.setEnd(range.startContainer, range.startOffset);\n\n const before = getRangeAnnotatableContents(rangeBefore).textContent;\n\n const rangeAfter = document.createRange();\n rangeAfter.setStart(range.endContainer, range.endOffset);\n\n if (offsetReference === document.body)\n rangeAfter.setEnd(offsetReference, offsetReference.childNodes.length);\n else\n rangeAfter.setEndAfter(offsetReference);\n\n const after = getRangeAnnotatableContents(rangeAfter).textContent;\n\n const prefixGraphemes = [...segmenter.segment(before)];\n const suffixGraphemes = [...segmenter.segment(after)];\n\n return {\n prefix: prefixGraphemes.slice(-length).map(s => s.segment).join(''),\n suffix: suffixGraphemes.slice(0, length).map(s => s.segment).join('')\n };\n}\n","import type { TextSelector } from '../../model';\nimport { getRangeAnnotatableContents } from '../dom';\n\nexport const rangeToSelector = (\n range: Range,\n container: HTMLElement,\n offsetReferenceSelector?: string\n): TextSelector => {\n const rangeBefore = document.createRange();\n\n const offsetReference: HTMLElement = offsetReferenceSelector\n ? (range.startContainer.parentElement as HTMLElement).closest(offsetReferenceSelector)!\n : container;\n\n // A helper range from the start of the container to the start of the selection\n rangeBefore.setStart(offsetReference, 0);\n rangeBefore.setEnd(range.startContainer, range.startOffset);\n\n // A content range before content w/o not annotatable elements\n const before = getRangeAnnotatableContents(rangeBefore).textContent;\n\n const quote = range.toString();\n const start = before.length || 0;\n const end = start + quote.length;\n\n return offsetReferenceSelector\n ? { quote, start, end, range, offsetReference }\n : { quote, start, end, range };\n}\n","import type { TextAnnotation, TextAnnotationTarget, TextSelector } from '../../model';\nimport { NOT_ANNOTATABLE_SELECTOR } from '../dom';\n\nexport const isRevived = (selector: TextSelector[]) =>\n selector.every(s => s.range instanceof Range && !s.range.collapsed);\n\n/**\n * Creates a new selector object with the revived DOM range from the given text annotation position\n * Only the annotatable elements are processed and counted towards the range\n *\n * @param selector annotation selector with start and end positions\n * @param container the HTML container of the annotated content\n *\n * @returns the revived selector\n */\nexport const reviveSelector = <T extends TextSelector>(selector: T, container: HTMLElement): T => {\n\n const { start, end } = selector;\n\n const offsetReference = selector.offsetReference || container;\n\n const iterator = document.createNodeIterator(container, NodeFilter.SHOW_TEXT, (node) =>\n node.parentElement?.closest(NOT_ANNOTATABLE_SELECTOR)\n ? NodeFilter.FILTER_SKIP\n : NodeFilter.FILTER_ACCEPT\n );\n\n // Position that contains the length of the preceding annotatable text nodes\n let runningOffset = 0;\n\n const range = document.createRange();\n\n let n = iterator.nextNode();\n if (n === null) console.error('Could not revive annotation target. Content missing.');\n\n // If there's no offset reference, start immediately\n let startCounting = !offsetReference;\n while (n !== null) {\n startCounting ||= (typeof offsetReference?.contains === 'function') ? offsetReference.contains(n) : false;\n\n if (startCounting) {\n const len = n.textContent?.length || 0;\n\n if (runningOffset + len > start) {\n range.setStart(n, start - runningOffset);\n break;\n }\n\n runningOffset += len;\n }\n\n n = iterator.nextNode();\n }\n\n // set range end\n while (n !== null) {\n const len = n.textContent?.length || 0;\n\n if (runningOffset + len >= end) {\n range.setEnd(n, end - runningOffset);\n break;\n }\n\n runningOffset += len;\n\n n = iterator.nextNode();\n }\n \n return {\n ...selector,\n range\n }\n\n}\n\n\nexport const reviveTarget = <T extends TextAnnotationTarget = TextAnnotationTarget>(target: T, container: HTMLElement): T =>\n isRevived(target.selector)\n ? target\n : ({\n ...target,\n selector: target.selector.map(s => s.range instanceof Range && !s.range.collapsed ? s : reviveSelector(s, container))\n });\n\nexport const reviveAnnotation = <T extends TextAnnotation>(annotation: T, container: HTMLElement): T =>\n isRevived(annotation.target.selector)\n ? annotation\n : ({ ...annotation, target: reviveTarget(annotation.target, container) });","import type { TextAnnotationStore } from '../../state';\nimport type { TextAnnotation } from '../../model';\nimport { reviveTarget } from '../annotation';\n\nconst getScrollParent = (el?: Element | null) => {\n if (!el)\n return document.scrollingElement;\n\n const { overflowY } = window.getComputedStyle(el);\n const isScrollable = overflowY !== 'visible' && overflowY !== 'hidden';\n\n // Cf. discussion https://stackoverflow.com/questions/35939886/find-first-scrollable-parent\n if (isScrollable && el.scrollHeight > el.clientHeight)\n return el;\n else\n return getScrollParent(el.parentElement);\n};\n\n// Executes scroll on an annotation with a valid DOM range selector\nconst scroll = <I extends TextAnnotation = TextAnnotation>(\n store: TextAnnotationStore<I>,\n target: I['target'],\n scrollParent: Element\n) => {\n // Parent bounds and client (= visible) height\n const parentBounds = scrollParent.getBoundingClientRect();\n const parentHeight = scrollParent.clientHeight;\n const parentWidth = scrollParent.clientWidth;\n\n // Position of the annotation relative to viewport\n const annotationBounds = target.selector[0].range.getBoundingClientRect();\n\n /*\n Note: `getBoundingClientRect` seems to return the wrong height!\n (Includes block elements?)\n Instead, the normalized height is used from the spatial index!\n */\n const { width, height } = store.getAnnotationBounds(target.annotation)!;\n\n // Position of the annotation relative to scrollParent\n const offsetTop = annotationBounds.top - parentBounds.top;\n const offsetLeft = annotationBounds.left - parentBounds.left;\n\n const scrollTop = scrollParent.parentElement ? scrollParent.scrollTop : 0;\n const scrollLeft = scrollParent.parentElement ? scrollParent.scrollLeft : 0;\n\n // Scroll the annotation to the center of the viewport\n const top = offsetTop + scrollTop - (parentHeight - height) / 2;\n const left = offsetLeft + scrollLeft - (parentWidth - width) / 2;\n\n scrollParent.scroll({ top, left, behavior: 'smooth' });\n};\n\nexport const scrollIntoView = <I extends TextAnnotation = TextAnnotation>(\n container: HTMLElement, store: TextAnnotationStore<I>\n) => <E extends Element = Element>(\n annotationOrId: string | I, scrollParentOrId?: string | E\n) => {\n const id =\n typeof annotationOrId === 'string' ? annotationOrId : annotationOrId.id;\n\n const scrollParent = scrollParentOrId\n ? typeof scrollParentOrId === 'string' ? document.getElementById(scrollParentOrId) : scrollParentOrId\n : getScrollParent(container);\n\n\n if (!scrollParent) {\n console.warn(`The scroll parent is missing for the annotation: ${id}`, { container });\n return false;\n }\n\n // Get curren version of the annotation from the store\n const current = store.getAnnotation(id);\n if (!current) {\n console.warn(`The annotation is missing in the store: ${id}`);\n return false;\n }\n\n // The first selector is the topmost one as well\n const { range: annoRange } = current.target.selector[0];\n if (annoRange && !annoRange.collapsed) {\n scroll(store, current.target, scrollParent);\n return true;\n }\n\n // Try reviving to account for lazy rendering\n const revived = reviveTarget(current.target, container);\n const { range: revivedAnnoRange } = revived.selector[0];\n if (revivedAnnoRange && !revivedAnnoRange.collapsed) {\n scroll(store, revived, scrollParent);\n return true;\n }\n\n return false;\n};\n","var G = Object.prototype.hasOwnProperty;\nfunction $(e, t) {\n var n, o;\n if (e === t) return !0;\n if (e && t && (n = e.constructor) === t.constructor) {\n if (n === Date) return e.getTime() === t.getTime();\n if (n === RegExp) return e.toString() === t.toString();\n if (n === Array) {\n if ((o = e.length) === t.length)\n for (; o-- && $(e[o], t[o]); ) ;\n return o === -1;\n }\n if (!n || typeof e == \"object\") {\n o = 0;\n for (n in e)\n if (G.call(e, n) && ++o && !G.call(t, n) || !(n in t) || !$(e[n], t[n])) return !1;\n return Object.keys(t).length === o;\n }\n }\n return e !== e && t !== t;\n}\nconst X = Symbol(\"clean\");\nlet N = [], _ = 0;\nconst z = 4, Z = globalThis.nanostoresGlobal || (globalThis.nanostoresGlobal = { epoch: 0 }), M = /* @__NO_SIDE_EFFECTS__ */ (e) => {\n let t = [], n = {\n get() {\n return n.lc || n.listen(() => {\n })(), n.value;\n },\n init: e,\n lc: 0,\n listen(o) {\n return n.lc = t.push(o), () => {\n for (let f = _ + z; f < N.length; )\n N[f] === o ? N.splice(f, z) : f += z;\n let s = t.indexOf(o);\n ~s && (t.splice(s, 1), --n.lc || n.off());\n };\n },\n notify(o, s) {\n Z.epoch++;\n let f = !N.length;\n for (let A of t)\n N.push(A, n.value, o, s);\n if (f) {\n for (_ = 0; _ < N.length; _ += z)\n N[_](\n N[_ + 1],\n N[_ + 2],\n N[_ + 3]\n );\n N.length = 0;\n }\n },\n /* It will be called on last listener unsubscribing.\n We will redefine it in onMount and onStop. */\n off() {\n },\n set(o) {\n let s = n.value;\n s !== o && (n.value = o, n.notify(s));\n },\n subscribe(o) {\n let s = n.listen(o);\n return o(n.value), s;\n },\n value: e\n };\n return process.env.NODE_ENV !== \"production\" && (n[X] = () => {\n t = [], n.lc = 0, n.off();\n }), n;\n}, Oe = (e) => {\n const t = /* @__PURE__ */ M(null);\n return e.observe(({ changes: n }) => {\n const o = t.get();\n if (o) {\n (n.deleted || []).some((A) => A.id === o) && t.set(null);\n const f = (n.updated || []).find(({ oldValue: A }) => A.id === o);\n f && t.set(f.newValue.id);\n }\n }), {\n get current() {\n return t.get();\n },\n subscribe: t.subscribe.bind(t),\n set: t.set.bind(t)\n };\n};\nvar F = /* @__PURE__ */ ((e) => (e.EDIT = \"EDIT\", e.SELECT = \"SELECT\", e.NONE = \"NONE\", e))(F || {});\nconst P = { selected: [] }, Be = (e, t, n) => {\n const o = /* @__PURE__ */ M(P);\n let s = t;\n const f = () => {\n $(o.get(), P) || o.set(P);\n }, A = () => {\n var g;\n return ((g = o.get().selected) == null ? void 0 : g.length) === 0;\n }, w = (g) => {\n if (A())\n return !1;\n const b = typeof g == \"string\" ? g : g.id;\n return o.get().selected.some((L) => L.id === b);\n }, C = (g, b) => {\n let L;\n if (Array.isArray(g)) {\n if (L = g.map((i) => e.getAnnotation(i)).filter(Boolean), L.length < g.length) {\n console.warn(\"Invalid selection: \" + g.filter((i) => !L.some((u) => u.id === i)));\n return;\n }\n } else {\n const i = e.getAnnotation(g);\n if (!i) {\n console.warn(\"Invalid selection: \" + g);\n return;\n }\n L = [i];\n }\n const B = L.reduce((i, u) => {\n const h = v(u);\n return h === \"EDIT\" ? [...i, { id: u.id, editable: !0 }] : h === \"SELECT\" ? [...i, { id: u.id }] : i;\n }, []);\n o.set({ selected: B, event: b });\n }, m = (g, b) => {\n const L = Array.isArray(g) ? g : [g], B = L.map((i) => e.getAnnotation(i)).filter((i) => !!i);\n o.set({\n selected: B.map((i) => {\n const u = b === void 0 ? v(i) === \"EDIT\" : b;\n return { id: i.id, editable: u };\n })\n }), B.length !== L.length && console.warn(\"Invalid selection\", g);\n }, T = (g) => {\n if (A())\n return !1;\n const { selected: b } = o.get();\n b.some(({ id: B }) => g.includes(B)) && o.set({ selected: b.filter(({ id: B }) => !g.includes(B)) });\n }, l = (g) => {\n s = g, m(o.get().selected.map(({ id: b }) => b));\n }, v = (g) => K(g, s, n);\n return e.observe(\n ({ changes: g }) => T((g.deleted || []).map((b) => b.id))\n ), {\n get event() {\n const g = o.get();\n return g ? g.event : null;\n },\n get selected() {\n const g = o.get();\n return g ? [...g.selected] : null;\n },\n get userSelectAction() {\n return s;\n },\n clear: f,\n evalSelectAction: v,\n isEmpty: A,\n isSelected: w,\n setSelected: m,\n setUserSelectAction: l,\n subscribe: o.subscribe.bind(o),\n userSelect: C\n };\n}, K = (e, t, n) => {\n const o = n ? n.serialize(e) : e;\n return typeof t == \"function\" ? t(o) : t || \"EDIT\";\n}, R = [];\nfor (let e = 0; e < 256; ++e)\n R.push((e + 256).toString(16).slice(1));\nfunction ee(e, t = 0) {\n return (R[e[t + 0]] + R[e[t + 1]] + R[e[t + 2]] + R[e[t + 3]] + \"-\" + R[e[t + 4]] + R[e[t + 5]] + \"-\" + R[e[t + 6]] + R[e[t + 7]] + \"-\" + R[e[t + 8]] + R[e[t + 9]] + \"-\" + R[e[t + 10]] + R[e[t + 11]] + R[e[t + 12]] + R[e[t + 13]] + R[e[t + 14]] + R[e[t + 15]]).toLowerCase();\n}\nconst te = new Uint8Array(16);\nfunction ne() {\n return crypto.getRandomValues(te);\n}\nfunction H(e, t, n) {\n return crypto.randomUUID ? crypto.randomUUID() : oe(e);\n}\nfunction oe(e, t, n) {\n var s;\n e = e || {};\n const o = e.random ?? ((s = e.rng) == null ? void 0 : s.call(e)) ?? ne();\n if (o.length < 16)\n throw new Error(\"Random bytes length must be >= 16\");\n return o[6] = o[6] & 15 | 64, o[8] = o[8] & 63 | 128, ee(o);\n}\nconst De = (e) => {\n const { creator: t, updatedBy: n } = e.target, o = e.bodies.reduce((s, f) => [...s, f.creator, f.updatedBy].filter(Boolean), []);\n return [\n t,\n n,\n ...o\n ].filter((s) => s);\n}, V = (e) => {\n const t = (n) => {\n const o = { ...n };\n return n.created && typeof n.created == \"string\" && (o.created = new Date(n.created)), n.updated && typeof n.updated == \"string\" && (o.updated = new Date(n.updated)), o;\n };\n return {\n ...e,\n bodies: (e.bodies || []).map(t),\n target: t(e.target)\n };\n}, Re = (e, t, n, o) => ({\n id: H(),\n annotation: typeof e == \"string\" ? e : e.id,\n created: n || /* @__PURE__ */ new Date(),\n creator: o,\n ...t\n}), se = (e, t) => {\n const n = new Set(e.bodies.map((o) => o.id));\n return t.bodies.filter((o) => !n.has(o.id));\n}, ie = (e, t) => {\n const n = new Set(t.bodies.map((o) => o.id));\n return e.bodies.filter((o) => !n.has(o.id));\n}, de = (e, t) => t.bodies.map((n) => {\n const o = e.bodies.find((s) => s.id === n.id);\n return { newBody: n, oldBody: o && !$(o, n) ? o : void 0 };\n}).filter(({ oldBody: n }) => n).map(({ oldBody: n, newBody: o }) => ({ oldBody: n, newBody: o })), re = (e, t) => !$(e.target, t.target), W = (e, t) => {\n const n = se(e, t), o = ie(e, t), s = de(e, t);\n return {\n oldValue: e,\n newValue: t,\n bodiesCreated: n.length > 0 ? n : void 0,\n bodiesDeleted: o.length > 0 ? o : void 0,\n bodiesUpdated: s.length > 0 ? s : void 0,\n targetUpdated: re(e, t) ? { oldTarget: e.target, newTarget: t.target } : void 0\n };\n};\nvar ae = /* @__PURE__ */ ((e) => (e.BODY_ONLY = \"BODY_ONLY\", e.TARGET_ONLY = \"TARGET_ONLY\", e))(ae || {}), O = /* @__PURE__ */ ((e) => (e.LOCAL = \"LOCAL\", e.REMOTE = \"REMOTE\", e.SILENT = \"SILENT\", e))(O || {});\nconst ce = (e, t) => {\n var f, A;\n const { changes: n, origin: o } = t;\n if (!(e.options.origin ? e.options.origin === o : o !== \"SILENT\"))\n return !1;\n if (e.options.ignore) {\n const { ignore: w } = e.options, C = (T) => T && T.length > 0;\n if (!(C(n.created) || C(n.deleted))) {\n const T = (f = n.updated) == null ? void 0 : f.some((v) => C(v.bodiesCreated) || C(v.bodiesDeleted) || C(v.bodiesUpdated)), l = (A = n.updated) == null ? void 0 : A.some((v) => v.targetUpdated);\n if (w === \"BODY_ONLY\" && T && !l || w === \"TARGET_ONLY\" && l && !T)\n return !1;\n }\n }\n if (e.options.annotations) {\n const w = /* @__PURE__ */ new Set([\n ...(n.created || []).map((m) => m.id),\n ...(n.deleted || []).map((m) => m.id),\n ...(n.updated || []).map(({ oldValue: m }) => m.id)\n ]);\n return !!(Array.isArray(e.options.annotations) ? e.options.annotations : [e.options.annotations]).find((m) => w.has(m));\n } else\n return !0;\n}, le = (e, t) => {\n const n = new Set((e.created || []).map((l) => l.id)), o = new Set((e.updated || []).map(({ newValue: l }) => l.id)), s = new Set((t.created || []).map((l) => l.id)), f = new Set((t.deleted || []).map((l) => l.id)), A = new Set((t.updated || []).map(({ oldValue: l }) => l.id)), w = new Set((t.updated || []).filter(({ oldValue: l }) => n.has(l.id) || o.has(l.id)).map(({ oldValue: l }) => l.id)), C = [\n ...(e.created || []).filter((l) => !f.has(l.id)).map((l) => A.has(l.id) ? t.updated.find(({ oldValue: v }) => v.id === l.id).newValue : l),\n ...t.created || []\n ], m = [\n ...(e.deleted || []).filter((l) => !s.has(l.id)),\n ...(t.deleted || []).filter((l) => !n.has(l.id))\n ], T = [\n ...(e.updated || []).filter(({ newValue: l }) => !f.has(l.id)).map((l) => {\n const { oldValue: v, newValue: g } = l;\n if (A.has(g.id)) {\n const b = t.updated.find((L) => L.oldValue.id === g.id).newValue;\n return W(v, b);\n } else\n return l;\n }),\n ...(t.updated || []).filter(({ oldValue: l }) => !w.has(l.id))\n ];\n return { created: C, deleted: m, updated: T };\n}, Y = (e) => {\n const t = e.id === void 0 ? H() : e.id;\n return {\n ...e,\n id: t,\n bodies: e.bodies === void 0 ? [] : e.bodies.map((n) => ({\n ...n,\n annotation: t\n })),\n target: {\n ...e.target,\n annotation: t\n }\n };\n}, ue = (e) => e.id !== void 0, xe = () => {\n const e = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Map(), n = [], o = (d, r = {}) => {\n n.push({ onChange: d, options: r });\n }, s = (d) => {\n const r = n.findIndex((c) => c.onChange == d);\n r > -1 && n.splice(r, 1);\n }, f = (d, r) => {\n const c = {\n origin: d,\n changes: {\n created: r.created || [],\n updated: r.updated || [],\n deleted: r.deleted || []\n },\n state: [...e.values()]\n };\n n.forEach((p) => {\n ce(p, c) && p.onChange(c);\n });\n }, A = (d, r = O.LOCAL) => {\n if (d.id && e.get(d.id))\n throw Error(`Cannot add annotation ${d.id} - exists already`);\n {\n const p = Y(d);\n e.set(p.id, p), p.bodies.forEach((U) => t.set(U.id, p.id)), f(r, { created: [p] });\n }\n }, w = (d, r) => {\n const c = Y(typeof d == \"string\" ? r : d), p = typeof d == \"string\" ? d : d.id, U = p && e.get(p);\n if (U) {\n const y = W(U, c);\n return p === c.id ? e.set(p, c) : (e.delete(p), e.set(c.id, c)), U.bodies.forEach((D) => t.delete(D.id)), c.bodies.forEach((D) => t.set(D.id, c.id)), y;\n } else\n console.warn(`Cannot update annotation ${p} - does not exist`);\n }, C = (d, r = O.LOCAL, c = O.LOCAL) => {\n const p = ue(r) ? c : r, U = w(d, r);\n U && f(p, { updated: [U] });\n }, m = (d, r = O.LOCAL) => {\n !!e.get(d.id) ? C(d, r) : A(d, r);\n }, T = (d, r = O.LOCAL) => {\n const c = d.reduce((p, U) => {\n const y = w(U);\n return y ? [...p, y] : p;\n }, []);\n c.length > 0 && f(r, { updated: c });\n }, l = (d, r = O.LOCAL) => {\n const c = d.map(Y), { toAdd: p, toUpdate: U } = c.reduce((D, I) => e.get(I.id) ? { ...D, toUpdate: [...D.toUpdate, I] } : { ...D, toAdd: [...D.toAdd, I] }, { toAdd: [], toUpdate: [] }), y = U.map((D) => w(D, r)).filter(Boolean);\n p.forEach((D) => {\n e.set(D.id, D), D.bodies.forEach((I) => t.set(I.id, D.id));\n }), f(r, { created: p, updated: y });\n }, v = (d, r = O.LOCAL) => {\n const c = e.get(d.annotation);\n if (c) {\n const p = {\n ...c,\n bodies: [...c.bodies, d]\n };\n e.set(c.id, p), t.set(d.id, p.id), f(r, { updated: [{\n oldValue: c,\n newValue: p,\n bodiesCreated: [d]\n }] });\n } else\n console.warn(`Attempt to add body to missing annotation: ${d.annotation}`);\n }, g = () => [...e.values()], b = (d = O.LOCAL) => {\n const r = [...e.values()];\n e.clear(), t.clear(), f(d, { deleted: r });\n }, L = (d, r = !0, c = O.LOCAL) => {\n const p = d.map(Y);\n if (r) {\n const U = [...e.values()];\n e.clear(), t.clear(), p.forEach((y) => {\n e.set(y.id, y), y.bodies.forEach((D) => t.set(D.id, y.id));\n }), f(c, { created: p, deleted: U });\n } else {\n const U = d.reduce((y, D) => {\n const I = D.id && e.get(D.id);\n return I ? [...y, I] : y;\n }, []);\n if (U.length > 0)\n throw Error(`Bulk insert would overwrite the following annotations: ${U.map((y) => y.id).join(\", \")}`);\n p.forEach((y) => {\n e.set(y.id, y), y.bodies.forEach((D) => t.set(D.id, y.id));\n }), f(c, { created: p });\n }\n }, B = (d) => {\n const r = typeof d == \"string\" ? d : d.id, c = e.get(r);\n if (c)\n return e.delete(r), c.bodies.forEach((p) => t.delete(p.id)), c;\n console.warn(`Attempt to delete missing annotation: ${r}`);\n }, i = (d, r = O.LOCAL) => {\n const c = B(d);\n c && f(r, { deleted: [c] });\n }, u = (d, r = O.LOCAL) => {\n const c = d.reduce((p, U) => {\n const y = B(U);\n return y ? [...p, y] : p;\n }, []);\n c.length > 0 && f(r, { deleted: c });\n }, h = (d) => {\n const r = e.get(d.annotation);\n if (r) {\n const c = r.bodies.find((p) => p.id === d.id);\n if (c) {\n t.delete(c.id);\n const p = {\n ...r,\n bodies: r.bodies.filter((y) => y.id !== d.id)\n };\n return e.set(r.id, p), {\n oldValue: r,\n newValue: p,\n bodiesDeleted: [c]\n };\n } else\n console.warn(`Attempt to delete missing body ${d.id} from annotation ${d.annotation}`);\n } else\n console.warn(`Attempt to delete body from missing annotation ${d.annotation}`);\n }, E = (d, r = O.LOCAL) => {\n const c = h(d);\n c && f(r, { updated: [c] });\n }, a = (d, r = O.LOCAL) => {\n const c = d.map((p) => h(p)).filter(Boolean);\n c.length > 0 && f(r, { updated: c });\n }, S = (d) => {\n const r = e.get(d);\n return r ? { ...r } : void 0;\n }, x = (d) => {\n const r = t.get(d);\n if (r) {\n const p = S(r).bodies.find((U) => U.id === d);\n if (p)\n return p;\n console.error(`Store integrity error: body ${d} in index, but not in annotation`);\n } else\n console.warn(`Attempt to retrieve missing body: ${d}`);\n }, k = (d, r) => {\n if (d.annotation !== r.annotation)\n throw \"Annotation integrity violation: annotation ID must be the same when updating bodies\";\n const c = e.get(d.annotation);\n if (c) {\n const p = c.bodies.find((y) => y.id === d.id), U = {\n ...c,\n bodies: c.bodies.map((y) => y.id === p.id ? r : y)\n };\n return e.set(c.id, U), p.id !== r.id && (t.delete(p.id), t.set(r.id, U.id)), {\n oldValue: c,\n newValue: U,\n bodiesUpdated: [{ oldBody: p, newBody: r }]\n };\n } else\n console.warn(`Attempt to add body to missing annotation ${d.annotation}`);\n }, Q = (d, r, c = O.LOCAL) => {\n const p = k(d, r);\n p && f(c, { updated: [p] });\n }, J = (d, r = O.LOCAL) => {\n const c = d.map((p) => k({ id: p.id, annotation: p.annotation }, p)).filter(Boolean);\n f(r, { updated: c });\n }, j = (d) => {\n const r = e.get(d.annotation);\n if (r) {\n const c = {\n ...r,\n target: {\n ...r.target,\n ...d\n }\n };\n return e.set(r.id, c), {\n oldValue: r,\n newValue: c,\n targetUpdated: {\n oldTarget: r.target,\n newTarget: d\n }\n };\n } else\n console.warn(`Attempt to update target on missing annotation: ${d.annotation}`);\n };\n return {\n addAnnotation: A,\n addBody: v,\n all: g,\n bulkAddAnnotations: L,\n bulkDeleteAnnotations: u,\n bulkDeleteBodies: a,\n bulkUpdateAnnotations: T,\n bulkUpdateBodies: J,\n bulkUpdateTargets: (d, r = O.LOCAL) => {\n const c = d.map((p) => j(p)).filter(Boolean);\n c.length > 0 && f(r, { updated: c });\n },\n bulkUpsertAnnotations: l,\n clear: b,\n deleteAnnotation: i,\n deleteBody: E,\n getAnnotation: S,\n getBody: x,\n observe: o,\n unobserve: s,\n updateAnnotation: C,\n updateBody: Q,\n updateTarget: (d, r = O.LOCAL) => {\n const c = j(d);\n c && f(r, { updated: [c] });\n },\n upsertAnnotation: m\n };\n};\nlet q = () => ({\n emit(e, ...t) {\n for (let n = this.events[e] || [], o = 0, s = n.length; o < s; o++)\n n[o](...t);\n },\n events: {},\n on(e, t) {\n var n;\n return ((n = this.events)[e] || (n[e] = [])).push(t), () => {\n var o;\n this.events[e] = (o = this.events[e]) == null ? void 0 : o.filter((s) => t !== s);\n };\n }\n});\nconst fe = 250, Ne = (e, t) => {\n const n = q(), o = (t == null ? void 0 : t.changes) || [];\n let s = t ? t.pointer : -1, f = !1, A = 0;\n const w = (a) => {\n if (!f) {\n const { changes: S } = a, x = performance.now();\n if (x - A > fe)\n o.splice(s + 1), o.push(S), s = o.length - 1;\n else {\n const k = o.length - 1;\n o[k] = le(o[k], S);\n }\n A = x;\n }\n f = !1;\n };\n e.observe(w, { origin: O.LOCAL });\n const C = (a) => a && a.length > 0 && e.bulkDeleteAnnotations(a), m = (a) => a && a.length > 0 && e.bulkAddAnnotations(a, !1), T = (a) => a && a.length > 0 && e.bulkUpdateAnnotations(a.map(({ oldValue: S }) => S)), l = (a) => a && a.length > 0 && e.bulkUpdateAnnotations(a.map(({ newValue: S }) => S)), v = (a) => a && a.length > 0 && e.bulkAddAnnotations(a, !1), g = (a) => a && a.length > 0 && e.bulkDeleteAnnotations(a);\n return {\n canRedo: () => o.length - 1 > s,\n canUndo: () => s > -1,\n destroy: () => e.unobserve(w),\n getHistory: () => ({ changes: [...o], pointer: s }),\n on: (a, S) => n.on(a, S),\n redo: () => {\n if (o.length - 1 > s) {\n f = !0;\n const { created: a, updated: S, deleted: x } = o[s + 1];\n m(a), l(S), g(x), n.emit(\"redo\", o[s + 1]), s += 1;\n }\n },\n undo: () => {\n if (s > -1) {\n f = !0;\n const { created: a, updated: S, deleted: x } = o[s];\n C(a), T(S), v(x), n.emit(\"undo\", o[s]), s -= 1;\n }\n }\n };\n}, ke = () => {\n const e = /* @__PURE__ */ M([]);\n return {\n subscribe: e.subscribe.bind(e),\n set: e.set.bind(e)\n };\n}, Ie = (e, t, n, o) => {\n const { hover: s, selection: f, store: A, viewport: w } = e, C = /* @__PURE__ */ new Map();\n let m = [], T, l;\n const v = (i, u) => {\n C.has(i) ? C.get(i).push(u) : C.set(i, [u]);\n }, g = (i, u) => {\n const h = C.get(i);\n if (h) {\n const E = h.indexOf(u);\n E !== -1 && h.splice(E, 1);\n }\n }, b = (i, u, h) => {\n C.has(i) && setTimeout(() => {\n C.get(i).forEach((E) => {\n if (n) {\n const a = Array.isArray(u) ? u.map((x) => n.serialize(x)) : n.serialize(u), S = h ? h instanceof PointerEvent ? h : n.serialize(h) : void 0;\n E(a, S);\n } else\n E(u, h);\n });\n }, 1);\n }, L = () => {\n const { selected: i } = f, u = (i || []).map(({ id: h }) => A.getAnnotation(h));\n u.forEach((h) => {\n const E = m.find((a) => a.id === h.id);\n (!E || !$(E, h)) && b(\"updateAnnotation\", h, E);\n }), m = m.map((h) => {\n const E = u.find(({ id: a }) => a === h.id);\n return E || h;\n });\n };\n f.subscribe(({ selected: i }) => {\n if (!(m.length === 0 && i.length === 0)) {\n if (m.length === 0 && i.length > 0)\n m = i.map(({ id: u }) => A.getAnnotation(u));\n else if (m.length > 0 && i.length === 0)\n m.forEach((u) => {\n const h = A.getAnnotation(u.id);\n h && !$(h, u) && b(\"updateAnnotation\", h, u);\n }), m = [];\n else {\n const u = new Set(m.map((a) => a.id)), h = new Set(i.map(({ id: a }) => a));\n m.filter((a) => !h.has(a.id)).forEach((a) => {\n const S = A.getAnnotation(a.id);\n S && !$(S, a) && b(\"updateAnnotation\", S, a);\n }), m = [\n // Remove annotations that were deselected\n ...m.filter((a) => h.has(a.id)),\n // Add editable annotations that were selected\n ...i.filter(({ id: a }) => !u.has(a)).map(({ id: a }) => A.getAnnotation(a))\n ];\n }\n b(\"selectionChanged\", m);\n }\n }), s.subscribe((i) => {\n !T && i ? b(\"mouseEnterAnnotation\", A.getAnnotation(i)) : T && !i ? b(\"mouseLeaveAnnotation\", A.getAnnotation(T)) : T && i && (b(\"mouseLeaveAnnotation\", A.getAnnotation(T)), b(\"mouseEnterAnnotation\", A.getAnnotation(i))), T = i;\n }), w == null || w.subscribe((i) => b(\"viewportIntersect\", i.map((u) => A.getAnnotation(u)))), A.observe((i) => {\n o && (l && clearTimeout(l), l = setTimeout(L, 1e3));\n const { created: u, deleted: h } = i.changes;\n (u || []).forEach((a) => b(\"createAnnotation\", a)), (h || []).forEach((a) => b(\"deleteAnnotation\", a)), (i.changes.updated || []).filter((a) => [\n ...a.bodiesCreated || [],\n ...a.bodiesDeleted || [],\n ...a.bodiesUpdated || []\n ].length > 0).forEach(({ oldValue: a, newValue: S }) => {\n const x = m.find((k) => k.id === a.id) || a;\n m = m.map((k) => k.id === a.id ? S : k), b(\"updateAnnotation\", S, x);\n });\n }, { origin: O.LOCAL }), A.observe((i) => {\n if (m) {\n const u = new Set(m.map((E) => E.id)), h = (i.changes.updated || []).filter(({ newValue: E }) => u.has(E.id)).map(({ newValue: E }) => E);\n h.length > 0 && (m = m.map((E) => {\n const a = h.find((S) => S.id === E.id);\n return a || E;\n }));\n }\n }, { origin: O.REMOTE });\n const B = (i) => (u) => {\n const { updated: h } = u;\n i ? (h || []).forEach((E) => b(\"updateAnnotation\", E.oldValue, E.newValue)) : (h || []).forEach((E) => b(\"updateAnnotation\", E.newValue, E.oldValue));\n };\n return t.on(\"undo\", B(!0)), t.on(\"redo\", B(!1)), { on: v, off: g, emit: b };\n}, _e = (e) => (t) => t.map((n) => e.serialize(n)), pe = (e) => (t) => t.reduce((n, o) => {\n const { parsed: s, error: f } = e.parse(o);\n return f ? {\n parsed: n.parsed,\n failed: [...n.failed, o]\n } : s ? {\n parsed: [...n.parsed, s],\n failed: n.failed\n } : {\n ...n\n };\n}, { parsed: [], failed: [] }), $e = (e, t, n) => {\n const { store: o, selection: s } = e, f = (i) => {\n if (n) {\n const { parsed: u, error: h } = n.parse(i);\n u ? o.addAnnotation(u, O.REMOTE) : console.error(h);\n } else\n o.addAnnotation(V(i), O.REMOTE);\n }, A = () => s.clear(), w = () => o.clear(), C = (i) => {\n const u = o.getAnnotation(i);\n return n && u ? n.serialize(u) : u;\n }, m = () => n ? o.all().map(n.serialize) : o.all(), T = () => {\n var h;\n const u = (((h = s.selected) == null ? void 0 : h.map((E) => E.id)) || []).map((E) => o.getAnnotation(E)).filter(Boolean);\n return n ? u.map(n.serialize) : u;\n }, l = (i, u = !0) => fetch(i).then((h) => h.json()).then((h) => (g(h, u), h)), v = (i) => {\n if (typeof i == \"string\") {\n const u = o.getAnnotation(i);\n if (o.deleteAnnotation(i), u)\n return n ? n.serialize(u) : u;\n } else {\n const u = n ? n.parse(i).parsed : i;\n if (u)\n return o.deleteAnnotation(u), i;\n }\n }, g = (i, u = !0) => {\n if (n) {\n const h = n.parseAll || pe(n), { parsed: E, failed: a } = h(i);\n a.length > 0 && console.warn(`Discarded ${a.length} invalid annotations`, a), o.bulkAddAnnotations(E, u, O.REMOTE);\n } else\n o.bulkAddAnnotations(i.map(V), u, O.REMOTE);\n }, b = (i, u) => {\n i ? s.setSelected(i, u) : s.clear();\n }, L = (i) => {\n s.setUserSelectAction(i);\n }, B = (i) => {\n if (n) {\n const u = n.parse(i).parsed, h = n.serialize(o.getAnnotation(u.id));\n return o.updateAnnotation(u), h;\n } else {\n const u = o.getAnnotation(i.id);\n return o.updateAnnotation(V(i)), u;\n }\n };\n return {\n addAnnotation: f,\n cancelSelected: A,\n canRedo: t.canRedo,\n canUndo: t.canUndo,\n clearAnnotations: w,\n getAnnotationById: C,\n getAnnotations: m,\n getHistory: t.getHistory,\n getSelected: T,\n loadAnnotations: l,\n redo: t.redo,\n removeAnnotation: v,\n setAnnotations: g,\n setSelected: b,\n setUserSelectAction: L,\n undo: t.undo,\n updateAnnotation: B\n };\n}, Ye = (e, t, n) => typeof t == \"function\" ? t(e, n) : t, ze = (e, t) => typeof e != \"function\" && typeof t != \"function\" ? {\n ...e || {},\n ...t || {}\n} : (n, o) => {\n const s = typeof e == \"function\" ? e(n, o) : e, f = typeof t == \"function\" ? t(n, o) : t;\n return {\n ...s || {},\n ...f || {}\n };\n};\nlet ge = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\", he = (e) => crypto.getRandomValues(new Uint8Array(e)), Ae = (e, t, n) => {\n let o = 256 - 256 % e.length;\n if (o === 256) {\n let f = e.length - 1;\n return (A = t) => {\n if (!A) return \"\";\n let w = \"\";\n for (; ; ) {\n let C = n(A), m = A;\n for (; m--; )\n if (w += e[C[m] & f], w.length >= A) return w;\n }\n };\n }\n let s = Math.ceil(1.6 * 256 * t / o);\n return (f = t) => {\n if (!f) return \"\";\n let A = \"\";\n for (; ; ) {\n let w = n(s), C = s;\n for (; C--; )\n if (w[C] < o && (A += e[w[C] % e.length], A.length >= f))\n return A;\n }\n };\n}, me = (e, t = 21) => Ae(e, t | 0, he), be = (e = 21) => {\n let t = \"\", n = crypto.getRandomValues(new Uint8Array(e |= 0));\n for (; e--; )\n t += ge[n[e] & 63];\n return t;\n};\nconst Pe = () => ({ isGuest: !0, id: me(\"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_\", 20)() }), ve = (e) => {\n const t = JSON.stringify(e);\n let n = 0;\n for (let o = 0, s = t.length; o < s; o++) {\n let f = t.charCodeAt(o);\n n = (n << 5) - n + f, n |= 0;\n }\n return `${n}`;\n}, Ee = (e) => e ? typeof e == \"object\" ? { ...e } : e : void 0, Ve = (e, t) => (Array.isArray(e) ? e : [e]).map((n) => {\n const { id: o, type: s, purpose: f, value: A, created: w, modified: C, creator: m, ...T } = n;\n return {\n id: o || `temp-${ve(n)}`,\n annotation: t,\n type: s,\n purpose: f,\n value: A,\n creator: Ee(m),\n created: w ? new Date(w) : void 0,\n updated: C ? new Date(C) : void 0,\n ...T\n };\n}), Me = (e) => e.map((t) => {\n var w;\n const { annotation: n, created: o, updated: s, ...f } = t, A = {\n ...f,\n created: o == null ? void 0 : o.toISOString(),\n modified: s == null ? void 0 : s.toISOString()\n };\n return (w = A.id) != null && w.startsWith(\"temp-\") && delete A.id, A;\n}), je = (e) => \"@context\" in e && \"creator\" in e && \"body\" in e, we = [\n \"#ff7c00\",\n // orange\n \"#1ac938\",\n // green\n \"#e8000b\",\n // red\n \"#8b2be2\",\n // purple\n \"#9f4800\",\n // brown\n \"#f14cc1\",\n // pink\n \"#ffc400\",\n // khaki\n \"#00d7ff\",\n // cyan\n \"#023eff\"\n // blue\n], Ce = () => {\n const e = [...we];\n return { assignRandomColor: () => {\n const o = Math.floor(Math.random() * e.length), s = e[o];\n return e.splice(o, 1), s;\n }, releaseColor: (o) => e.push(o) };\n}, Le = () => {\n const e = Ce();\n return { addUser: (o, s) => {\n const f = e.assignRandomColor();\n return {\n label: s.name || s.id,\n avatar: s.avatar,\n color: f\n };\n }, removeUser: (o) => e.releaseColor(o.appearance.color) };\n}, ye = (e, t) => e.every((n) => e.includes(n)) && t.every((n) => e.includes(n)), Ge = be(), He = (e = Le()) => {\n const t = q(), n = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), s = (l, v) => {\n if (n.has(l)) {\n console.warn(\"Attempt to add user that is already present\", l, v);\n return;\n }\n const g = e.addUser(l, v);\n n.set(l, {\n ...v,\n presenceKey: l,\n appearance: g\n });\n }, f = (l) => {\n const v = n.get(l);\n if (!v) {\n console.warn(\"Attempt to remove user that is not present\", l);\n return;\n }\n e.removeUser(v), n.delete(l);\n }, A = (l) => {\n const v = new Set(l.map((L) => L.presenceKey)), g = l.filter(({ presenceKey: L }) => !n.has(L)), b = Array.from(n.values()).filter((L) => !v.has(L.presenceKey));\n g.forEach(({ presenceKey: L, user: B }) => s(L, B)), b.forEach((L) => {\n const { presenceKey: B } = L;\n o.has(B) && t.emit(\"selectionChange\", L, null), f(B);\n }), (g.length > 0 || b.length > 0) && t.emit(\"presence\", m());\n }, w = (l, v) => {\n const g = n.get(l);\n if (!g) {\n console.warn(\"Activity notification from user that is not present\");\n return;\n }\n const b = o.get(l);\n (!b || !ye(b, v)) && (o.set(l, v), t.emit(\"selectionChange\", g, v));\n }, C = (l, v) => {\n const g = n.get(l);\n if (!g) {\n console.warn(\"Selection change for user that is not present\", l);\n return;\n }\n v ? o.set(l, v) : o.delete(l), t.emit(\"selectionChange\", g, v);\n }, m = () => [...Array.from(n.values())];\n return {\n getPresentUsers: m,\n notifyActivity: w,\n on: (l, v) => t.on(l, v),\n syncUsers: A,\n updateSelection: C\n };\n};\nexport {\n ae as Ignore,\n O as Origin,\n Ge as PRESENCE_KEY,\n F as UserSelectAction,\n ze as chainStyles,\n Ye as computeStyle,\n Pe as createAnonymousGuest,\n $e as createBaseAnnotator,\n Re as createBody,\n Le as createDefaultAppearanceProvider,\n Oe as createHoverState,\n Ie as createLifecycleObserver,\n He as createPresenceState,\n Be as createSelectionState,\n xe as createStore,\n Ne as createUndoStack,\n ke as createViewportState,\n Ce as defaultColorProvider,\n W as diffAnnotations,\n De as getContributors,\n je as isW3CAnnotation,\n le as mergeChanges,\n K as onUserSelect,\n pe as parseAll,\n Ve as parseW3CBodies,\n Ee as parseW3CUser,\n V as reviveDates,\n _e as serializeAll,\n Me as serializeW3CBodies,\n ce as shouldNotify\n};\n//# sourceMappingURL=annotorious-core.es.js.map\n","import { v4 as uuidv4 } from 'uuid';\nimport type { TextAnnotation, TextAnnotationTarget, TextSelector } from '../core';\nimport type { W3CTextAnnotation, W3CTextAnnotationTarget, W3CTextSelector } from './';\nimport { getQuoteContext } from '../../utils/annotation';\nimport {\n type FormatAdapter,\n type ParseResult,\n parseW3CBodies,\n parseW3CUser,\n serializeW3CBodies\n} from '@annotorious/core';\n\nexport type W3CTextFormatAdapter<I extends TextAnnotation = TextAnnotation, E extends W3CTextAnnotation = W3CTextAnnotation> = FormatAdapter<I, E>;\n\n/**\n * @param source - the IRI of the annotated content\n * @param container - the HTML container of the annotated content,\n * Required to locate the content's `range` within the DOM\n */\nexport const W3CTextFormat =<I extends TextAnnotation = TextAnnotation, E extends W3CTextAnnotation = W3CTextAnnotation>(\n source: string,\n container?: HTMLElement\n): W3CTextFormatAdapter<I, E> => ({\n parse: (serialized) => parseW3CTextAnnotation(serialized),\n serialize: (annotation) => serializeW3CTextAnnotation(annotation, source, container)\n});\n\nconst isTextSelector = (selector: Partial<TextSelector>): selector is TextSelector =>\n selector.quote !== undefined && selector.start !== undefined && selector.end !== undefined;\n\nconst parseW3CTextTargets = (annotation: W3CTextAnnotation) => {\n const {\n id: annotationId,\n creator,\n created,\n modified,\n target\n } = annotation;\n\n const w3cTargets = Array.isArray(target) ? target : [target];\n if (w3cTargets.length === 0) {\n return { error: Error(`No targets found for annotation: ${annotation.id}`) };\n }\n\n const parsed: TextAnnotationTarget = {\n creator: parseW3CUser(creator),\n created: created ? new Date(created) : undefined,\n updated: modified ? new Date(modified) : undefined,\n annotation: annotationId,\n selector: [],\n // @ts-expect-error: `styleClass` is not part of the core `TextAnnotationTarget` type\n styleClass: 'styleClass' in w3cTargets[0] ? w3cTargets[0].styleClass : undefined\n };\n\n for (const w3cTarget of w3cTargets) {\n const w3cSelectors = Array.isArray(w3cTarget.selector) ? w3cTarget.selector : [w3cTarget.selector];\n\n const selector = w3cSelectors.reduce<Partial<TextSelector>>((s, w3cSelector) => {\n switch (w3cSelector.type) {\n case 'TextQuoteSelector':\n s.quote = w3cSelector.exact;\n break;\n case 'TextPositionSelector':\n s.start = w3cSelector.start;\n s.end = w3cSelector.end;\n break;\n }\n return s;\n }, {});\n\n if (isTextSelector(selector)) {\n parsed.selector.push(\n {\n ...selector,\n id: w3cTarget.id,\n // @ts-expect-error: `scope` is not part of the core `TextSelector` type\n scope: w3cTarget.scope\n }\n );\n } else {\n const missingTypes = [\n !selector.start ? 'TextPositionSelector' : undefined,\n !selector.quote ? 'TextQuoteSelector' : undefined\n ].filter(Boolean);\n\n return { error: Error(`Missing selector types: ${missingTypes.join(' and ')} for annotation: ${annotation.id}`) };\n }\n }\n\n return { parsed };\n};\n\nexport const parseW3CTextAnnotation = <I extends TextAnnotation = TextAnnotation, E extends W3CTextAnnotation = W3CTextAnnotation>(\n annotation: E\n): ParseResult<I> => {\n const annotationId = annotation.id || uuidv4();\n\n const {\n creator,\n created,\n modified,\n body,\n ...rest\n } = annotation;\n\n const bodies = parseW3CBodies(body, annotationId);\n const target = parseW3CTextTargets(annotation);\n\n const parseResult = 'error' in target\n ? { error: target.error }\n : {\n parsed: {\n ...rest,\n id: annotationId,\n bodies,\n target: target.parsed\n }\n };\n\n return parseResult as ParseResult<I>;\n\n};\n\nexport const serializeW3CTextAnnotation = <I extends TextAnnotation = TextAnnotation, E extends W3CTextAnnotation = W3CTextAnnotation>(\n annotation: I,\n source: string,\n container?: HTMLElement\n): E => {\n const { bodies, target, ...rest } = annotation;\n\n const {\n selector,\n creator,\n created,\n updated,\n ...targetRest\n } = target;\n\n const w3cTargets = selector.map((s): W3CTextAnnotationTarget => {\n const { id, quote, start, end, range } = s;\n\n const quoteSelector: W3CTextSelector = {\n type: 'TextQuoteSelector',\n exact: quote\n }\n\n if (container) {\n const { prefix, suffix } = getQuoteContext(range, container);\n quoteSelector.prefix = prefix;\n quoteSelector.suffix = suffix;\n }\n\n const positionSelector: W3CTextSelector = {\n type: 'TextPositionSelector',\n start,\n end\n }\n\n return {\n ...targetRest,\n id,\n // @ts-expect-error: `scope` is not part of the core `TextSelector` type\n scope: 'scope' in s ? s.scope : undefined,\n source,\n selector: [quoteSelector, positionSelector]\n };\n });\n\n return {\n ...rest,\n '@context': 'http://www.w3.org/ns/anno.jsonld',\n id: annotation.id,\n type: 'Annotation',\n body: serializeW3CBodies(annotation.bodies),\n creator,\n created: created?.toISOString(),\n modified: updated?.toISOString(),\n target: w3cTargets\n } as unknown as E;\n\n};\n","export let createNanoEvents = () => ({\n emit(event, ...args) {\n for (\n let callbacks = this.events[event] || [],\n i = 0,\n length = callbacks.length;\n i < length;\n i++\n ) {\n callbacks[i](...args)\n }\n },\n events: {},\n on(event, cb) {\n ;(this.events[event] ||= []).push(cb)\n return () => {\n this.events[event] = this.events[event]?.filter(i => cb !== i)\n }\n }\n})\n","import { NOT_ANNOTATABLE_SELECTOR } from '../dom';\n\n/**\n * Calls .preventDefault() on click events in annotable areas, in order\n * to prevent problematic default browser behavior. (Specifically: keep\n * Chrome Android from triggering word selection on single click.)\n */\nexport const cancelSingleClickEvents = (container: HTMLElement) =>\n container.addEventListener('click', event => {\n const targetElement = event.target as HTMLElement;\n\n const shouldPrevent =\n // Allow clicks within not-annotatable elements\n !targetElement.closest(NOT_ANNOTATABLE_SELECTOR)\n // Allow clicks on links\n && !(event.target as Element).closest('a');\n\n if (shouldPrevent)\n event.preventDefault();\n });\n","/**\n * Events need to be manually mapped into new objects:\n * 1. It preserves the `target` and `currentTarget` properties.\n * Otherwise, they will be `null` when the event is read beyond the handler.\n * 2. Spread operator can copy only own enumerable properties, not inherited ones.\n * Therefore, we need to manually copy the props we're interested in.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget\n * @see https://github.com/recogito/text-annotator-js/commit/65d13f3108c429311cf8c2523f6babbbc946013d#r144041390\n */\n\nexport const clonePointerEvent = (event: PointerEvent): PointerEvent => ({\n ...event,\n type: event.type,\n x: event.x,\n y: event.y,\n clientX: event.clientX,\n clientY: event.clientY,\n offsetX: event.offsetX,\n offsetY: event.offsetY,\n screenX: event.screenX,\n screenY: event.screenY,\n isPrimary: event.isPrimary,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n button: event.button,\n buttons: event.buttons,\n currentTarget: event.currentTarget,\n target: event.target,\n defaultPrevented: event.defaultPrevented,\n detail: event.detail,\n eventPhase: event.eventPhase,\n pointerId: event.pointerId,\n pointerType: event.pointerType,\n timeStamp: event.timeStamp\n})\n\nexport const cloneKeyboardEvent = (event: KeyboardEvent): KeyboardEvent => ({\n ...event,\n type: event.type,\n key: event.key,\n code: event.code,\n location: event.location,\n repeat: event.repeat,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n currentTarget: event.currentTarget,\n target: event.target,\n defaultPrevented: event.defaultPrevented,\n detail: event.detail,\n timeStamp: event.timeStamp\n})\n","export const debounce = <T extends (...args: any[]) => void>(func: T, delay = 10): T => {\n\tlet timeoutId: ReturnType<typeof setTimeout>;\n\n\treturn ((...args: any[]) => {\n\t\tclearTimeout(timeoutId);\n\t\ttimeoutId = setTimeout(() => func.apply(this, args), delay);\n\t}) as T;\n}","import { createNanoEvents, type Unsubscribe } from 'nanoevents';\nimport { UserSelectAction, type Filter, type ViewportState } from '@annotorious/core';\nimport type { TextAnnotation } from '../model';\nimport type { TextAnnotatorState } from '../state';\nimport { \n type Highlight,\n type HighlightStyleExpression,\n type ViewportBounds,\n getViewportBounds, \n trackViewport \n} from './';\n// Note that the debounce npm package has the same issue as below under\n// some circumstances:\n// https://github.com/agentcooper/react-pdf-highlighter/issues/276\nimport { debounce } from '../utils/events';\n\n/**\n * The renderer runtime interface.\n */\nexport interface Renderer {\n\n destroy(): void;\n\n on: <E extends keyof RendererEvents>(event: E, callback: RendererEvents[E]) => Unsubscribe;\n\n redraw(force?: boolean): void;\n\n setStyle(style?: HighlightStyleExpression, id?: string): void;\n\n setFilter(filter?: Filter<any>): void;\n\n setVisible(visible: boolean): void;\n\n}\n\nexport interface RendererEvents {\n\n onRedraw(): void;\n\n}\n\nexport type RendererFactory<T extends TextAnnotation> = (\n\n container: HTMLElement,\n\n state: TextAnnotatorState<T, any>,\n\n viewport: ViewportState\n\n) => Renderer;\n\n/**\n * A utility interface. Instead of implementing a Renderer from scratch,\n * implementers can simply implement a painter, and wrap it in the\n * BaseRenderer, which will handle common concerns.\n */\nexport interface Painter {\n\n destroy(): void;\n\n redraw(\n highlights:Highlight[], \n bounds: ViewportBounds, \n style?: HighlightStyleExpression,\n styleOverrides?: Map<string, HighlightStyleExpression>,\n force?: boolean\n ): void;\n\n setVisible(visible: boolean): void;\n\n}\n\nexport const createRenderer = <T extends TextAnnotatorState = TextAnnotatorState<TextAnnotation, any>> (\n painter: Painter,\n container: HTMLElement, \n state: T,\n viewport: ViewportState,\n): Renderer => {\n const { store, selection, hover } = state;\n\n const emitter = createNanoEvents<RendererEvents>();\n\n let currentStyle: HighlightStyleExpression | undefined;\n\n const styleOverrides = new Map<string, HighlightStyleExpression>();\n\n let currentFilter: Filter | undefined;\n\n const onDraw = trackViewport(viewport);\n\n const onPointerMove = (event: PointerEvent) => {\n const {x, y} = container.getBoundingClientRect();\n\n // TODO this may be a bit of an edge case... but ideally we'd retrieve the whole \n // stack of annotations, and then evaluate if ANY of them is clickable.\n const hit = store.getAt(event.clientX - x, event.clientY - y, false, currentFilter);\n if (hit && state.selection.evalSelectAction(hit) !== UserSelectAction.NONE) {\n if (hover.current !== hit.id) {\n container.classList.add('hovered');\n hover.set(hit.id);\n }\n } else {\n if (hover.current) {\n container.classList.remove('hovered');\n hover.set(null);\n }\n }\n }\n\n container.addEventListener('pointermove', onPointerMove);\n\n const redraw = debounce((force: boolean = false) => requestAnimationFrame(() => {\n const bounds = getViewportBounds(container); \n\n const { minX, minY, maxX, maxY } = bounds;\n \n const annotationsInView = currentFilter\n ? store.getIntersecting(minX, minY, maxX, maxY).filter(({ annotation }) => currentFilter?.(annotation))\n : store.getIntersecting(minX, minY, maxX, maxY);\n\n const selectedIds = selection.selected.map(({ id }) => id);\n\n const highlights: Highlight[] = annotationsInView.map(({ annotation, rects }) => {\n const selected = selectedIds.includes(annotation.id);\n const hovered = annotation.id === hover.current;\n\n return {\n annotation,\n rects,\n state: { selected, hovered }\n };\n });\n\n painter.redraw(highlights, bounds, currentStyle, styleOverrides, force);\n\n setTimeout(() => {\n onDraw(annotationsInView.map(({ annotation }) => annotation));\n emitter.emit('onRedraw')\n }, 1);\n }), 10);\n\n const setStyle = (style?: HighlightStyleExpression, id?: string) => {\n if (id) {\n if (style)\n styleOverrides.set(id, style);\n else\n styleOverrides.delete(id);\n } else {\n currentStyle = style;\n }\n\n // console.log('[base-renderer] redrawing style change');\n redraw(true);\n }\n\n const setFilter = (filter?: Filter<any>) => {\n currentFilter = filter;\n // console.log('[base-renderer] redrawing filter change');\n redraw(false);\n } \n\n const on = <E extends keyof RendererEvents>(event: E, callback: RendererEvents[E]): Unsubscribe => \n emitter.on(event, callback);\n\n // Refresh on store change\n const onStoreChange = () => {\n // console.log('[base-renderer] redrawing store change');\n redraw();\n }\n\n store.observe(onStoreChange);\n\n // Refresh on selection change\n const unsubscribeSelection = selection.subscribe(() => {\n // console.log('[base-renderer] redrawing selection change');\n redraw();\n });\n\n // Refresh on hover change\n const unsubscribeHover = hover.subscribe(() => {\n // console.log('[base-renderer] redrawing hover change');\n redraw()\n });\n\n // Refresh on scroll\n const onScroll = () => {\n // console.log('[base-renderer] redrawing scroll');\n redraw(true);\n }\n\n document.addEventListener('scroll', onScroll, { capture: true, passive: true });\n\n // Refresh on resize\n const onResize = debounce(() => {\n store.recalculatePositions();\n // console.log('[base-renderer] redrawing resize');\n redraw();\n }, 10);\n\n window.addEventListener('resize', onResize);\n\n const resizeObserver = new ResizeObserver(onResize);\n resizeObserver.observe(container);\n\n // This is an extra precaution. The position of the container\n // might shift (without resizing) due to layout changes higher-up\n // in the DOM. (This happens in Recogito for example)\n const config: MutationObserverInit = { attributes: true, childList: true, subtree: true };\n\n const mutationObserver = new MutationObserver(debounce((records: MutationRecord[]) => {\n const isInternal = records\n .every(record => record.target === container || container.contains(record.target));\n\n if (!isInternal) {\n // console.log('[base-renderer] redrawing mutation');\n redraw(true);\n }\n }, 150));\n\n mutationObserver.observe(document.body, config);\n\n const destroy = () => {\n container.removeEventListener('pointermove', onPointerMove);\n \n painter.destroy();\n \n store.unobserve(onStoreChange);\n\n unsubscribeSelection();\n unsubscribeHover();\n\n document.removeEventListener('scroll', onScroll);\n\n // onResize.clear();\n window.removeEventListener('resize', onResize);\n resizeObserver.disconnect();\n\n mutationObserver.disconnect();\n }\n\n return {\n destroy,\n on,\n redraw,\n setStyle,\n setFilter,\n setVisible: painter.setVisible.bind(painter)\n }\n\n}\n","var r={grad:.9,turn:360,rad:360/(2*Math.PI)},t=function(r){return\"string\"==typeof r?r.length>0:\"number\"==typeof r},n=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=Math.pow(10,t)),Math.round(n*r)/n+0},e=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=1),r>n?n:r>t?r:t},u=function(r){return(r=isFinite(r)?r%360:0)>0?r:r+360},a=function(r){return{r:e(r.r,0,255),g:e(r.g,0,255),b:e(r.b,0,255),a:e(r.a)}},o=function(r){return{r:n(r.r),g:n(r.g),b:n(r.b),a:n(r.a,3)}},i=/^#([0-9a-f]{3,8})$/i,s=function(r){var t=r.toString(16);return t.length<2?\"0\"+t:t},h=function(r){var t=r.r,n=r.g,e=r.b,u=r.a,a=Math.max(t,n,e),o=a-Math.min(t,n,e),i=o?a===t?(n-e)/o:a===n?2+(e-t)/o:4+(t-n)/o:0;return{h:60*(i<0?i+6:i),s:a?o/a*100:0,v:a/255*100,a:u}},b=function(r){var t=r.h,n=r.s,e=r.v,u=r.a;t=t/360*6,n/=100,e/=100;var a=Math.floor(t),o=e*(1-n),i=e*(1-(t-a)*n),s=e*(1-(1-t+a)*n),h=a%6;return{r:255*[e,i,o,o,s,e][h],g:255*[s,e,e,i,o,o][h],b:255*[o,o,s,e,e,i][h],a:u}},g=function(r){return{h:u(r.h),s:e(r.s,0,100),l:e(r.l,0,100),a:e(r.a)}},d=function(r){return{h:n(r.h),s:n(r.s),l:n(r.l),a:n(r.a,3)}},f=function(r){return b((n=(t=r).s,{h:t.h,s:(n*=((e=t.l)<50?e:100-e)/100)>0?2*n/(e+n)*100:0,v:e+n,a:t.a}));var t,n,e},c=function(r){return{h:(t=h(r)).h,s:(u=(200-(n=t.s))*(e=t.v)/100)>0&&u<200?n*e/100/(u<=100?u:200-u)*100:0,l:u/2,a:t.a};var t,n,e,u},l=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,p=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s+([+-]?\\d*\\.?\\d+)%\\s+([+-]?\\d*\\.?\\d+)%\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,v=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,m=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,y={string:[[function(r){var t=i.exec(r);return t?(r=t[1]).length<=4?{r:parseInt(r[0]+r[0],16),g:parseInt(r[1]+r[1],16),b:parseInt(r[2]+r[2],16),a:4===r.length?n(parseInt(r[3]+r[3],16)/255,2):1}:6===r.length||8===r.length?{r:parseInt(r.substr(0,2),16),g:parseInt(r.substr(2,2),16),b:parseInt(r.substr(4,2),16),a:8===r.length?n(parseInt(r.substr(6,2),16)/255,2):1}:null:null},\"hex\"],[function(r){var t=v.exec(r)||m.exec(r);return t?t[2]!==t[4]||t[4]!==t[6]?null:a({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:void 0===t[7]?1:Number(t[7])/(t[8]?100:1)}):null},\"rgb\"],[function(t){var n=l.exec(t)||p.exec(t);if(!n)return null;var e,u,a=g({h:(e=n[1],u=n[2],void 0===u&&(u=\"deg\"),Number(e)*(r[u]||1)),s:Number(n[3]),l:Number(n[4]),a:void 0===n[5]?1:Number(n[5])/(n[6]?100:1)});return f(a)},\"hsl\"]],object:[[function(r){var n=r.r,e=r.g,u=r.b,o=r.a,i=void 0===o?1:o;return t(n)&&t(e)&&t(u)?a({r:Number(n),g:Number(e),b:Number(u),a:Number(i)}):null},\"rgb\"],[function(r){var n=r.h,e=r.s,u=r.l,a=r.a,o=void 0===a?1:a;if(!t(n)||!t(e)||!t(u))return null;var i=g({h:Number(n),s:Number(e),l:Number(u),a:Number(o)});return f(i)},\"hsl\"],[function(r){var n=r.h,a=r.s,o=r.v,i=r.a,s=void 0===i?1:i;if(!t(n)||!t(a)||!t(o))return null;var h=function(r){return{h:u(r.h),s:e(r.s,0,100),v:e(r.v,0,100),a:e(r.a)}}({h:Number(n),s:Number(a),v:Number(o),a:Number(s)});return b(h)},\"hsv\"]]},N=function(r,t){for(var n=0;n<t.length;n++){var e=t[n][0](r);if(e)return[e,t[n][1]]}return[null,void 0]},x=function(r){return\"string\"==typeof r?N(r.trim(),y.string):\"object\"==typeof r&&null!==r?N(r,y.object):[null,void 0]},I=function(r){return x(r)[1]},M=function(r,t){var n=c(r);return{h:n.h,s:e(n.s+100*t,0,100),l:n.l,a:n.a}},H=function(r){return(299*r.r+587*r.g+114*r.b)/1e3/255},$=function(r,t){var n=c(r);return{h:n.h,s:n.s,l:e(n.l+100*t,0,100),a:n.a}},j=function(){function r(r){this.parsed=x(r)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return r.prototype.isValid=function(){return null!==this.parsed},r.prototype.brightness=function(){return n(H(this.rgba),2)},r.prototype.isDark=function(){return H(this.rgba)<.5},r.prototype.isLight=function(){return H(this.rgba)>=.5},r.prototype.toHex=function(){return r=o(this.rgba),t=r.r,e=r.g,u=r.b,i=(a=r.a)<1?s(n(255*a)):\"\",\"#\"+s(t)+s(e)+s(u)+i;var r,t,e,u,a,i},r.prototype.toRgb=function(){return o(this.rgba)},r.prototype.toRgbString=function(){return r=o(this.rgba),t=r.r,n=r.g,e=r.b,(u=r.a)<1?\"rgba(\"+t+\", \"+n+\", \"+e+\", \"+u+\")\":\"rgb(\"+t+\", \"+n+\", \"+e+\")\";var r,t,n,e,u},r.prototype.toHsl=function(){return d(c(this.rgba))},r.prototype.toHslString=function(){return r=d(c(this.rgba)),t=r.h,n=r.s,e=r.l,(u=r.a)<1?\"hsla(\"+t+\", \"+n+\"%, \"+e+\"%, \"+u+\")\":\"hsl(\"+t+\", \"+n+\"%, \"+e+\"%)\";var r,t,n,e,u},r.prototype.toHsv=function(){return r=h(this.rgba),{h:n(r.h),s:n(r.s),v:n(r.v),a:n(r.a,3)};var r},r.prototype.invert=function(){return w({r:255-(r=this.rgba).r,g:255-r.g,b:255-r.b,a:r.a});var r},r.prototype.saturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,r))},r.prototype.desaturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,-r))},r.prototype.grayscale=function(){return w(M(this.rgba,-1))},r.prototype.lighten=function(r){return void 0===r&&(r=.1),w($(this.rgba,r))},r.prototype.darken=function(r){return void 0===r&&(r=.1),w($(this.rgba,-r))},r.prototype.rotate=function(r){return void 0===r&&(r=15),this.hue(this.hue()+r)},r.prototype.alpha=function(r){return\"number\"==typeof r?w({r:(t=this.rgba).r,g:t.g,b:t.b,a:r}):n(this.rgba.a,3);var t},r.prototype.hue=function(r){var t=c(this.rgba);return\"number\"==typeof r?w({h:r,s:t.s,l:t.l,a:t.a}):n(t.h)},r.prototype.isEqual=function(r){return this.toHex()===w(r).toHex()},r}(),w=function(r){return r instanceof j?r:new j(r)},S=[],k=function(r){r.forEach(function(r){S.indexOf(r)<0&&(r(j,y),S.push(r))})},E=function(){return new j({r:255*Math.random(),g:255*Math.random(),b:255*Math.random()})};export{j as Colord,w as colord,k as extend,I as getFormat,E as random};\n","import { colord, type AnyColor } from 'colord';\nimport type { AnnotationState, Color, DrawingStyle } from '@annotorious/core';\nimport type { TextAnnotation } from '../model';\nimport type { Highlight } from './';\n\nexport interface HighlightStyle extends Pick<DrawingStyle, 'fill' | 'fillOpacity'> {\n\n underlineStyle?: string;\n\n underlineColor?: Color;\n\n underlineOffset?: number;\n\n underlineThickness?: number;\n \n}\n\nexport type HighlightStyleExpression = HighlightStyle \n | (<I extends TextAnnotation = TextAnnotation>(annotation: I, state: AnnotationState, zIndex?: number) => HighlightStyle | undefined);\n\nexport const DEFAULT_STYLE: HighlightStyle = { \n fill: 'rgb(0, 128, 255)', \n fillOpacity: 0.18\n};\n\nexport const DEFAULT_SELECTED_STYLE: HighlightStyle = { \n fill: 'rgb(0, 128, 255)', \n fillOpacity: 0.45 \n};\n\nexport const getBackgroundColor = (style?: HighlightStyle) => {\n if (style?.fillOpacity !== undefined) {\n // User-defined opacity: compute with user-defined fill or default\n return colord(style?.fill || DEFAULT_STYLE.fill as AnyColor)\n .alpha(style.fillOpacity)\n .toHex();\n } else if (!style?.fill) {\n // Neither fill nor opacity - default\n return colord(DEFAULT_STYLE.fill as AnyColor).alpha(DEFAULT_STYLE.fillOpacity as number).toHex();\n } else {\n // User defined fill, no opacity. Just pass through whatever the user \n // provided (incl. oklch colors, etc.)\n return style.fill;\n }\n}\n\nexport const computeStyle = (highlight: Highlight, style?: HighlightStyleExpression, z?: number): HighlightStyle =>\n style \n ? typeof style === 'function'\n ? style(highlight.annotation, highlight.state, z) || (\n highlight.state?.selected ? DEFAULT_SELECTED_STYLE : DEFAULT_STYLE\n )\n : style \n : highlight.state?.selected \n ? DEFAULT_SELECTED_STYLE \n : DEFAULT_STYLE;\n","var has = Object.prototype.hasOwnProperty;\n\nexport function dequal(foo, bar) {\n\tvar ctor, len;\n\tif (foo === bar) return true;\n\n\tif (foo && bar && (ctor=foo.constructor) === bar.constructor) {\n\t\tif (ctor === Date) return foo.getTime() === bar.getTime();\n\t\tif (ctor === RegExp) return foo.toString() === bar.toString();\n\n\t\tif (ctor === Array) {\n\t\t\tif ((len=foo.length) === bar.length) {\n\t\t\t\twhile (len-- && dequal(foo[len], bar[len]));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (!ctor || typeof foo === 'object') {\n\t\t\tlen = 0;\n\t\t\tfor (ctor in foo) {\n\t\t\t\tif (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n\t\t\t\tif (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;\n\t\t\t}\n\t\t\treturn Object.keys(bar).length === len;\n\t\t}\n\t}\n\n\treturn foo !== foo && bar !== bar;\n}\n","import type { Highlight } from '../../rendering';\nimport type { Rect } from '../../state';\n\nexport const computeZIndex = (rect: Rect, all: Highlight[]): number => {\n const intersects = (a: Rect, b: Rect): boolean => (\n a.x <= b.x + b.width && a.x + a.width >= b.x &&\n a.y <= b.y + b.height && a.y + a.height >= b.y\n )\n\n const getLength = (h: Highlight) => \n h.rects.reduce((total, rect) => total + rect.width, 0);\n\n // Any highlights that intersect this rect, sorted by total length\n const intersecting = all.filter(({ rects }) => rects.some(r => intersects(rect, r)));\n intersecting.sort((a, b) => getLength(b) - getLength(a));\n\n return intersecting.findIndex(h => h.rects.includes(rect));\n}","export const getHighlightClientRects = (range: Range) => {\n const textNodes: Text[] = [];\n\n // Get all text nodes inside the range's commonAncestorContainer\n const it = document.createNodeIterator(\n range.commonAncestorContainer, \n NodeFilter.SHOW_TEXT);\n\n /*\n Filter text nodes that intersect the range. Note that we could\n also include this filter in the node iterator directly.\n But the while loop is faster (!) - possibly due to a function call overhead.\n */\n let currentNode: Text | undefined;\n \n while ((currentNode = it.nextNode() as Text)) {\n if (range.intersectsNode(currentNode)) {\n textNodes.push(currentNode);\n }\n }\n\n if (textNodes.length < 2) {\n // Trivial case: selection is inside a single text node\n // or empty (shouldn't happen!) - no need to create our own ranges.\n return Array.from(range.getClientRects());\n } else {\n const first = textNodes[0];\n const last = textNodes[textNodes.length - 1];\n\n const firstRange = document.createRange();\n firstRange.selectNode(first);\n if (range.startContainer.nodeType === Node.TEXT_NODE) {\n firstRange.setStart(first, range.startOffset);\n } else {\n const childNode = range.startContainer.childNodes[range.startOffset];\n if (childNode) {\n firstRange.setStartBefore(childNode);\n } else {\n firstRange.setStartAfter(range.startContainer);\n }\n }\n\n const lastRange = document.createRange();\n lastRange.selectNode(last);\n if (range.endContainer.nodeType === Node.TEXT_NODE) {\n lastRange.setEnd(last, range.endOffset);\n } else {\n const childNode = range.endContainer.childNodes[range.endOffset];\n if (childNode)\n lastRange.setEndBefore(childNode);\n else \n lastRange.setEndAfter(range.endContainer);\n }\n\n // Text nodes have no .getClientRects()!\n const getTextClientRects = (t: Text) => {\n const r = document.createRange();\n r.selectNode(t);\n return Array.from(r.getClientRects());\n }\n\n return [\n ...Array.from(firstRange.getClientRects()),\n ...textNodes.slice(1, -1).flatMap(getTextClientRects),\n ...Array.from(lastRange.getClientRects())\n ];\n }\n}\n","// The three topological relations we'll check for\ntype Relation =\n // Inline elements, same height, directly adjacent\n 'inline-adjacent' |\n // Inline elements, A fully contains B\n 'inline-contains' |\n // Inline elements, A is fully contained inside B\n 'inline-is-contained' |\n // At least one block element, A fully contains B\n 'block-contains' |\n // At least one block element, A is fully contained in B\n 'block-is-contained';\n\n// Note that this is not a general topology test. Takes a \n// few shortcuts to test ONLY the situations we'll encounter\n// with text selections.\nconst getRelation = (\n rectA: DOMRect, \n rectB: DOMRect, \n hTolerance: number, \n vTolerance: number\n): Relation | undefined => {\n const round = (num: number) => Math.round(num * 10) / 10;\n\n // Some browsers have fractional pixel differences (looking at you FF!)\n const a = {\n top: round(rectA.top),\n bottom: round(rectA.bottom),\n left: round(rectA.left),\n right: round(rectA.right)\n };\n\n const b = {\n top: round(rectB.top),\n bottom: round(rectB.bottom),\n left: round(rectB.left),\n right: round(rectB.right)\n };\n\n if (Math.abs(a.top - b.top) < vTolerance && Math.abs(a.bottom - b.bottom) < vTolerance) {\n // Same height - check for containment and adjacency\n if (Math.abs(a.left - b.right) < hTolerance || Math.abs(a.right - b.left) < hTolerance)\n return 'inline-adjacent';\n\n if (a.left >= b.left && a.right <= b.right)\n return 'inline-is-contained';\n\n if (a.left <= b.left && a.right >= b.right)\n return 'inline-contains';\n } else {\n // Different heights - check for containment\n if (a.top <= b.top && a.bottom >= b.bottom) {\n if (a.left <= b.left && a.right >= b.right) {\n return 'block-contains';\n }\n } else if (a.top >= b.top && a.bottom <= b.bottom) {\n if (a.left >= b.left && a.right <= b.right) {\n return 'block-is-contained';\n }\n }\n }\n}\n\nconst union = (a: DOMRect, b: DOMRect): DOMRect => {\n const left = Math.min(a.left, b.left);\n const right = Math.max(a.right, b.right);\n const top = Math.min(a.top, b.top);\n const bottom = Math.max(a.bottom, b.bottom);\n\n return new DOMRect(left, top, right - left, bottom - top);\n}\n\nexport const mergeClientRects = (\n rects: DOMRect[], \n hTolerance = 0.5, \n vTolerance = 0.5\n) => rects.reduce<DOMRect[]>((merged, rectA) => {\n // Some browser report empty rects - discard\n if (rectA.width === 0 || rectA.height === 0)\n return merged;\n\n let next = [...merged];\n\n let wasMerged = false;\n\n for (const rectB of merged) {\n const relation = getRelation(rectA, rectB, hTolerance, vTolerance);\n\n if (relation === 'inline-adjacent') {\n // A and B are adjacent - remove B and keep union\n next = next.map(r => r === rectB ? union(rectA, rectB) : r);\n wasMerged = true;\n break;\n } else if (relation === 'inline-contains') {\n // A contains B - remove B and keep A\n next = next.map(r => r === rectB ? rectA : r);\n wasMerged = true;\n break;\n } else if (relation === 'inline-is-contained') {\n // B contains A - skip A\n wasMerged = true;\n break;\n } else if (relation === 'block-contains' || relation === 'block-is-contained') {\n // Block containment - keep the element with a smaller width\n if (rectA.width < rectB.width)\n next = next.map(r => r === rectB ? rectA : r);\n\n // When the width is the same, keep the element with a smaller height\n if (rectA.width === rectB.width && rectA.height < rectB.width)\n next = next.map(r => r === rectB ? rectA : r);\n\n wasMerged = true;\n break;\n }\n }\n\n return wasMerged ? next : [...next, rectA];\n}, []);\n\nexport const toDomRectList = (rects: DOMRect[]): DOMRectList => ({\n length: rects.length,\n item: (index) => rects[index],\n [Symbol.iterator]: function* (): ArrayIterator<DOMRect> {\n for (let i = 0; i < this.length; i++)\n yield this.item(i)!;\n }\n});","/**\n * Offsets the given rect relative to the offset parent.\n */\nexport const toParentBounds = (rect: DOMRect, offset: DOMRect): DOMRect => {\n const { left, top, right, bottom } = rect;\n return new DOMRect(left - offset.left, top - offset.top, right - left, bottom - top);\n};\n\n/**\n * Inverse: translates the given relative rect back into viewport bounds.\n */\nexport const toViewportBounds = (rect: DOMRect, offset: DOMRect): DOMRect => {\n const { left, top, right, bottom } = rect;\n return new DOMRect(left + offset.left, top + offset.top, right - left, bottom - top);\n}\n","import { dequal } from 'dequal/lite';\nimport type { ViewportState } from '@annotorious/core';\nimport type { TextAnnotation } from '../../model';\nimport type { TextAnnotatorState } from '../../state';\nimport { computeZIndex } from '../../utils/highlight/';\nimport { \n computeStyle,\n createRenderer,\n getBackgroundColor,\n type Highlight, \n type HighlightStyleExpression,\n type Painter, \n type RendererFactory, \n type ViewportBounds \n} from '../';\n\nimport './spans-renderer.css';\n\nconst createSpansPainter = (container: HTMLElement): Painter => {\n container.classList.add('r6o-annotatable');\n\n const highlightLayer = document.createElement('div');\n highlightLayer.className = 'r6o-span-highlight-layer';\n\n container.appendChild(highlightLayer);\n\n // Currently rendered highlights\n let currentRendered: Highlight[] = [];\n\n const redraw = (\n highlights: Highlight[], \n _: ViewportBounds, \n currentStyle?: HighlightStyleExpression,\n styleOverrides?: Map<string, HighlightStyleExpression>,\n force?: boolean\n ) => {\n const noChanges = dequal(currentRendered, highlights);\n\n // If there are no changes and rendering is set to lazy\n // Don't redraw the SPANs - but redraw the painter, if any!\n const shouldRedraw = !noChanges || force;\n if (!shouldRedraw) return;\n\n highlightLayer.innerHTML = '';\n\n /**\n * Highlights rendering in the span highlight layer is an order-sensitive operation.\n * The later the highlight is rendered, the higher it will be in the visual stack.\n *\n * By default, we should expect that the newer highlight\n * will be rendered over the older one\n */\n const sorted = [...highlights].sort((highlightA, highlightB) => {\n const { annotation: { target: { created: createdA } } } = highlightA;\n const { annotation: { target: { created: createdB } } } = highlightB;\n return createdA && createdB ? createdA.getTime() - createdB.getTime() : 0;\n });\n\n sorted.forEach(highlight => {\n const style = styleOverrides?.get(highlight.annotation.id) || currentStyle;\n\n highlight.rects.map(rect => {\n const z = computeZIndex(rect, highlights);\n const computedStyle = computeStyle(highlight, style, z);\n\n const span = document.createElement('span');\n span.className = 'r6o-annotation';\n span.dataset.annotation = highlight.annotation.id;\n\n span.style.left = `${rect.x}px`;\n span.style.top = `${rect.y}px`;\n span.style.width = `${rect.width}px`;\n span.style.height = `${rect.height}px`;\n\n span.style.backgroundColor = getBackgroundColor(computedStyle);\n\n if (computedStyle.underlineStyle)\n span.style.borderStyle = computedStyle.underlineStyle;\n\n if (computedStyle.underlineColor)\n span.style.borderColor = computedStyle.underlineColor;\n\n if (computedStyle.underlineThickness)\n span.style.borderBottomWidth = `${computedStyle.underlineThickness}px`;\n\n if (computedStyle.underlineOffset)\n span.style.paddingBottom = `${computedStyle.underlineOffset}px`;\n\n highlightLayer.appendChild(span);\n });\n });\n\n currentRendered = highlights;\n }\n\n const setVisible = (visible: boolean) => {\n if (visible)\n highlightLayer.classList.remove('hidden');\n else\n highlightLayer.classList.add('hidden');\n }\n\n const destroy = () => {\n highlightLayer.remove();\n }\n\n return {\n destroy,\n redraw,\n setVisible\n };\n\n}\n\nexport const createSpansRenderer: RendererFactory<TextAnnotation> = (\n container: HTMLElement,\n state: TextAnnotatorState<TextAnnotation, any>,\n viewport: ViewportState\n) => createRenderer(createSpansPainter(container), container, state, viewport);\n","import type { ViewportState } from '@annotorious/core';\nimport type { TextAnnotation } from '../model';\n\nexport interface ViewportBounds {\n\n top: number;\n\n left: number;\n\n minX: number;\n\n minY: number;\n \n maxX: number;\n \n maxY: number;\n\n}\n\nexport const getViewportBounds = (container: HTMLElement): ViewportBounds => {\n const { top, left } = container.getBoundingClientRect();\n\n const { innerWidth, innerHeight } = window;\n\n const minX = - left;\n const minY = - top;\n const maxX = innerWidth - left;\n const maxY = innerHeight - top;\n\n return { top, left, minX, minY, maxX, maxY };\n}\n\nexport const trackViewport = (viewport: ViewportState) => {\n let visible = new Set<string>();\n\n const onDraw = (annotations: TextAnnotation[]) => {\n const ids = annotations.map(a => a.id);\n\n if (visible.size !== ids.length || ids.some(id => !visible.has(id))) {\n viewport.set(ids);\n } \n\n visible = new Set(ids);\n }\n\n return onDraw;\n\n}","\n/**\n * Rearranges items so that all items in the [left, k] are the smallest.\n * The k-th element will have the (k - left + 1)-th smallest value in [left, right].\n *\n * @template T\n * @param {T[]} arr the array to partially sort (in place)\n * @param {number} k middle index for partial sorting (as defined above)\n * @param {number} [left=0] left index of the range to sort\n * @param {number} [right=arr.length-1] right index\n * @param {(a: T, b: T) => number} [compare = (a, b) => a - b] compare function\n */\nexport default function quickselect(arr, k, left = 0, right = arr.length - 1, compare = defaultCompare) {\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(arr, k, newLeft, newRight, compare);\n }\n\n const t = arr[k];\n let i = left;\n /** @type {number} */\n let j = right;\n\n swap(arr, left, k);\n if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n while (i < j) {\n swap(arr, i, j);\n i++;\n j--;\n while (compare(arr[i], t) < 0) i++;\n while (compare(arr[j], t) > 0) j--;\n }\n\n if (compare(arr[left], t) === 0) swap(arr, left, j);\n else {\n j++;\n swap(arr, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n}\n\n/**\n * @template T\n * @param {T[]} arr\n * @param {number} i\n * @param {number} j\n */\nfunction swap(arr, i, j) {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\n/**\n * @template T\n * @param {T} a\n * @param {T} b\n * @returns {number}\n */\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n","import quickselect from 'quickselect';\n\nexport default class RBush {\n constructor(maxEntries = 9) {\n // max entries in a node is 9 by default; min node fill is 40% for best performance\n this._maxEntries = Math.max(4, maxEntries);\n this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n this.clear();\n }\n\n all() {\n return this._all(this.data, []);\n }\n\n search(bbox) {\n let node = this.data;\n const result = [];\n\n if (!intersects(bbox, node)) return result;\n\n const toBBox = this.toBBox;\n const nodesToSearch = [];\n\n while (node) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const childBBox = node.leaf ? toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf) result.push(child);\n else if (contains(bbox, childBBox)) this._all(child, result);\n else nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return result;\n }\n\n collides(bbox) {\n let node = this.data;\n\n if (!intersects(bbox, node)) return false;\n\n const nodesToSearch = [];\n while (node) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const childBBox = node.leaf ? this.toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf || contains(bbox, childBBox)) return true;\n nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return false;\n }\n\n load(data) {\n if (!(data && data.length)) return this;\n\n if (data.length < this._minEntries) {\n for (let i = 0; i < data.length; i++) {\n this.insert(data[i]);\n }\n return this;\n }\n\n // recursively build the tree with the given data from scratch using OMT algorithm\n let node = this._build(data.slice(), 0, data.length - 1, 0);\n\n if (!this.data.children.length) {\n // save as is if tree is empty\n this.data = node;\n\n } else if (this.data.height === node.height) {\n // split root if trees have the same height\n this._splitRoot(this.data, node);\n\n } else {\n if (this.data.height < node.height) {\n // swap trees if inserted one is bigger\n const tmpNode = this.data;\n this.data = node;\n node = tmpNode;\n }\n\n // insert the small tree into the large tree at appropriate level\n this._insert(node, this.data.height - node.height - 1, true);\n }\n\n return this;\n }\n\n insert(item) {\n if (item) this._insert(item, this.data.height - 1);\n return this;\n }\n\n clear() {\n this.data = createNode([]);\n return this;\n }\n\n remove(item, equalsFn) {\n if (!item) return this;\n\n let node = this.data;\n const bbox = this.toBBox(item);\n const path = [];\n const indexes = [];\n let i, parent, goingUp;\n\n // depth-first iterative tree traversal\n while (node || path.length) {\n\n if (!node) { // go up\n node = path.pop();\n parent = path[path.length - 1];\n i = indexes.pop();\n goingUp = true;\n }\n\n if (node.leaf) { // check current node\n const index = findItem(item, node.children, equalsFn);\n\n if (index !== -1) {\n // item found, remove the item and condense tree upwards\n node.children.splice(index, 1);\n path.push(node);\n this._condense(path);\n return this;\n }\n }\n\n if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\n path.push(node);\n indexes.push(i);\n i = 0;\n parent = node;\n node = node.children[0];\n\n } else if (parent) { // go right\n i++;\n node = parent.children[i];\n goingUp = false;\n\n } else node = null; // nothing found\n }\n\n return this;\n }\n\n toBBox(item) { return item; }\n\n compareMinX(a, b) { return a.minX - b.minX; }\n compareMinY(a, b) { return a.minY - b.minY; }\n\n toJSON() { return this.data; }\n\n fromJSON(data) {\n this.data = data;\n return this;\n }\n\n _all(node, result) {\n const nodesToSearch = [];\n while (node) {\n if (node.leaf) result.push(...node.children);\n else nodesToSearch.push(...node.children);\n\n node = nodesToSearch.pop();\n }\n return result;\n }\n\n _build(items, left, right, height) {\n\n const N = right - left + 1;\n let M = this._maxEntries;\n let node;\n\n if (N <= M) {\n // reached leaf level; return leaf\n node = createNode(items.slice(left, right + 1));\n calcBBox(node, this.toBBox);\n return node;\n }\n\n if (!height) {\n // target height of the bulk-loaded tree\n height = Math.ceil(Math.log(N) / Math.log(M));\n\n // target number of root entries to maximize storage utilization\n M = Math.ceil(N / Math.pow(M, height - 1));\n }\n\n node = createNode([]);\n node.leaf = false;\n node.height = height;\n\n // split the items into M mostly square tiles\n\n const N2 = Math.ceil(N / M);\n const N1 = N2 * Math.ceil(Math.sqrt(M));\n\n multiSelect(items, left, right, N1, this.compareMinX);\n\n for (let i = left; i <= right; i += N1) {\n\n const right2 = Math.min(i + N1 - 1, right);\n\n multiSelect(items, i, right2, N2, this.compareMinY);\n\n for (let j = i; j <= right2; j += N2) {\n\n const right3 = Math.min(j + N2 - 1, right2);\n\n // pack each entry recursively\n node.children.push(this._build(items, j, right3, height - 1));\n }\n }\n\n calcBBox(node, this.toBBox);\n\n return node;\n }\n\n _chooseSubtree(bbox, node, level, path) {\n while (true) {\n path.push(node);\n\n if (node.leaf || path.length - 1 === level) break;\n\n let minArea = Infinity;\n let minEnlargement = Infinity;\n let targetNode;\n\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const area = bboxArea(child);\n const enlargement = enlargedArea(bbox, child) - area;\n\n // choose entry with the least area enlargement\n if (enlargement < minEnlargement) {\n minEnlargement = enlargement;\n minArea = area < minArea ? area : minArea;\n targetNode = child;\n\n } else if (enlargement === minEnlargement) {\n // otherwise choose one with the smallest area\n if (area < minArea) {\n minArea = area;\n targetNode = child;\n }\n }\n }\n\n node = targetNode || node.children[0];\n }\n\n return node;\n }\n\n _insert(item, level, isNode) {\n const bbox = isNode ? item : this.toBBox(item);\n const insertPath = [];\n\n // find the best node for accommodating the item, saving all nodes along the path too\n const node = this._chooseSubtree(bbox, this.data, level, insertPath);\n\n // put the item into the node\n node.children.push(item);\n extend(node, bbox);\n\n // split on node overflow; propagate upwards if necessary\n while (level >= 0) {\n if (insertPath[level].children.length > this._maxEntries) {\n this._split(insertPath, level);\n level--;\n } else break;\n }\n\n // adjust bboxes along the insertion path\n this._adjustParentBBoxes(bbox, insertPath, level);\n }\n\n // split overflowed node into two\n _split(insertPath, level) {\n const node = insertPath[level];\n const M = node.children.length;\n const m = this._minEntries;\n\n this._chooseSplitAxis(node, m, M);\n\n const splitIndex = this._chooseSplitIndex(node, m, M);\n\n const newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n newNode.height = node.height;\n newNode.leaf = node.leaf;\n\n calcBBox(node, this.toBBox);\n calcBBox(newNode, this.toBBox);\n\n if (level) insertPath[level - 1].children.push(newNode);\n else this._splitRoot(node, newNode);\n }\n\n _splitRoot(node, newNode) {\n // split root node\n this.data = createNode([node, newNode]);\n this.data.height = node.height + 1;\n this.data.leaf = false;\n calcBBox(this.data, this.toBBox);\n }\n\n _chooseSplitIndex(node, m, M) {\n let index;\n let minOverlap = Infinity;\n let minArea = Infinity;\n\n for (let i = m; i <= M - m; i++) {\n const bbox1 = distBBox(node, 0, i, this.toBBox);\n const bbox2 = distBBox(node, i, M, this.toBBox);\n\n const overlap = intersectionArea(bbox1, bbox2);\n const area = bboxArea(bbox1) + bboxArea(bbox2);\n\n // choose distribution with minimum overlap\n if (overlap < minOverlap) {\n minOverlap = overlap;\n index = i;\n\n minArea = area < minArea ? area : minArea;\n\n } else if (overlap === minOverlap) {\n // otherwise choose distribution with minimum area\n if (area < minArea) {\n minArea = area;\n index = i;\n }\n }\n }\n\n return index || M - m;\n }\n\n // sorts node children by the best axis for split\n _chooseSplitAxis(node, m, M) {\n const compareMinX = node.leaf ? this.compareMinX : compareNodeMinX;\n const compareMinY = node.leaf ? this.compareMinY : compareNodeMinY;\n const xMargin = this._allDistMargin(node, m, M, compareMinX);\n const yMargin = this._allDistMargin(node, m, M, compareMinY);\n\n // if total distributions margin value is minimal for x, sort by minX,\n // otherwise it's already sorted by minY\n if (xMargin < yMargin) node.children.sort(compareMinX);\n }\n\n // total margin of all possible split distributions where each node is at least m full\n _allDistMargin(node, m, M, compare) {\n node.children.sort(compare);\n\n const toBBox = this.toBBox;\n const leftBBox = distBBox(node, 0, m, toBBox);\n const rightBBox = distBBox(node, M - m, M, toBBox);\n let margin = bboxMargin(leftBBox) + bboxMargin(rightBBox);\n\n for (let i = m; i < M - m; i++) {\n const child = node.children[i];\n extend(leftBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(leftBBox);\n }\n\n for (let i = M - m - 1; i >= m; i--) {\n const child = node.children[i];\n extend(rightBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(rightBBox);\n }\n\n return margin;\n }\n\n _adjustParentBBoxes(bbox, path, level) {\n // adjust bboxes along the given tree path\n for (let i = level; i >= 0; i--) {\n extend(path[i], bbox);\n }\n }\n\n _condense(path) {\n // go through the path, removing empty nodes and updating bboxes\n for (let i = path.length - 1, siblings; i >= 0; i--) {\n if (path[i].children.length === 0) {\n if (i > 0) {\n siblings = path[i - 1].children;\n siblings.splice(siblings.indexOf(path[i]), 1);\n\n } else this.clear();\n\n } else calcBBox(path[i], this.toBBox);\n }\n }\n}\n\nfunction findItem(item, items, equalsFn) {\n if (!equalsFn) return items.indexOf(item);\n\n for (let i = 0; i < items.length; i++) {\n if (equalsFn(item, items[i])) return i;\n }\n return -1;\n}\n\n// calculate node's bbox from bboxes of its children\nfunction calcBBox(node, toBBox) {\n distBBox(node, 0, node.children.length, toBBox, node);\n}\n\n// min bounding rectangle of node children from k to p-1\nfunction distBBox(node, k, p, toBBox, destNode) {\n if (!destNode) destNode = createNode(null);\n destNode.minX = Infinity;\n destNode.minY = Infinity;\n destNode.maxX = -Infinity;\n destNode.maxY = -Infinity;\n\n for (let i = k; i < p; i++) {\n const child = node.children[i];\n extend(destNode, node.leaf ? toBBox(child) : child);\n }\n\n return destNode;\n}\n\nfunction extend(a, b) {\n a.minX = Math.min(a.minX, b.minX);\n a.minY = Math.min(a.minY, b.minY);\n a.maxX = Math.max(a.maxX, b.maxX);\n a.maxY = Math.max(a.maxY, b.maxY);\n return a;\n}\n\nfunction compareNodeMinX(a, b) { return a.minX - b.minX; }\nfunction compareNodeMinY(a, b) { return a.minY - b.minY; }\n\nfunction bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); }\nfunction bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }\n\nfunction enlargedArea(a, b) {\n return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n}\n\nfunction intersectionArea(a, b) {\n const minX = Math.max(a.minX, b.minX);\n const minY = Math.max(a.minY, b.minY);\n const maxX = Math.min(a.maxX, b.maxX);\n const maxY = Math.min(a.maxY, b.maxY);\n\n return Math.max(0, maxX - minX) *\n Math.max(0, maxY - minY);\n}\n\nfunction contains(a, b) {\n return a.minX <= b.minX &&\n a.minY <= b.minY &&\n b.maxX <= a.maxX &&\n b.maxY <= a.maxY;\n}\n\nfunction intersects(a, b) {\n return b.minX <= a.maxX &&\n b.minY <= a.maxY &&\n b.maxX >= a.minX &&\n b.maxY >= a.minY;\n}\n\nfunction createNode(children) {\n return {\n children,\n height: 1,\n leaf: true,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n };\n}\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nfunction multiSelect(arr, left, right, n, compare) {\n const stack = [left, right];\n\n while (stack.length) {\n right = stack.pop();\n left = stack.pop();\n\n if (right - left <= n) continue;\n\n const mid = left + Math.ceil((right - left) / n / 2) * n;\n quickselect(arr, mid, left, right, compare);\n\n stack.push(left, mid, mid, right);\n }\n}\n","import RBush from 'rbush';\nimport type { Store } from '@annotorious/core';\nimport { createNanoEvents, type Unsubscribe } from 'nanoevents';\nimport type { TextAnnotation, TextAnnotationTarget } from '../model';\nimport type { AnnotationRects } from '../state/text-annotation-store';\nimport { isRevived, reviveSelector } from '../utils/annotation';\nimport { mergeClientRects, getHighlightClientRects, toParentBounds } from '../utils/highlight'; \n\ninterface IndexedHighlightRect {\n\n minX: number;\n\n minY: number;\n\n maxX: number;\n\n maxY: number;\n\n annotation: {\n \n id: string;\n\n rects: DOMRect[];\n\n }\n\n}\n\nexport interface SpatialTreeEvents {\n\n recalculate(): void;\n\n}\n\nexport const createSpatialTree = <T extends TextAnnotation>(\n store: Store<T>,\n container: HTMLElement,\n hMergeTolerance?: number,\n vMergeTolerance?: number\n) => {\n\n const tree = new RBush<IndexedHighlightRect>();\n\n const index = new Map<string, IndexedHighlightRect[]>();\n\n const emitter = createNanoEvents<SpatialTreeEvents>();\n\n // Helper: converts a single text annotation target to a list of hightlight rects\n const toItems = (target: TextAnnotationTarget, offset: DOMRect): IndexedHighlightRect[] => {\n const rects = target.selector.flatMap(s => {\n const revivedRange = isRevived([s]) ? s.range : reviveSelector(s, container).range;\n return getHighlightClientRects(revivedRange);\n });\n\n /**\n * Offset the merged client rects so that coords\n * are relative to the parent container\n */\n const merged = mergeClientRects(rects, hMergeTolerance, vMergeTolerance)\n .map(rect => toParentBounds(rect, offset));\n\n return merged.map(rect => {\n const { x, y, width, height } = rect;\n\n return {\n minX: x,\n minY: y,\n maxX: x + width,\n maxY: y + height,\n annotation: {\n id: target.annotation,\n rects: merged\n }\n }\n });\n }\n\n const all = () => [...index.values()];\n\n const clear = () => {\n tree.clear();\n index.clear();\n }\n\n const insert = (target: TextAnnotationTarget) => {\n const rects = toItems(target, container.getBoundingClientRect());\n if (rects.length === 0) return;\n\n rects.forEach(rect => tree.insert(rect));\n index.set(target.annotation, rects);\n }\n\n const remove = (target: TextAnnotationTarget) => {\n const rects = index.get(target.annotation);\n if (rects) {\n rects.forEach(rect => tree.remove(rect));\n index.delete(target.annotation);\n }\n }\n\n const update = (target: TextAnnotationTarget) => {\n remove(target);\n insert(target);\n }\n\n const set = (targets: TextAnnotationTarget[], replace: boolean = true) => {\n if (replace)\n clear();\n\n const offset = container.getBoundingClientRect();\n\n const rectsByTarget = targets.map(target => ({ target, rects: toItems(target, offset) }));\n rectsByTarget.forEach(({ target, rects }) => {\n if (rects.length > 0)\n index.set(target.annotation, rects)\n });\n\n const allRects = rectsByTarget.flatMap(({ rects }) => rects);\n tree.load(allRects);\n }\n\n const getAt = (x: number, y: number, all = false): string[] => {\n const hits = tree.search({\n minX: x,\n minY: y,\n maxX: x,\n maxY: y\n });\n\n const area = (rect: IndexedHighlightRect) =>\n rect.annotation.rects.reduce((area, r) =>\n area + r.width * r.height, 0);\n \n // Get smallest rect\n if (hits.length > 0) {\n hits.sort((a, b) => area(a) - area(b));\n return all ? hits.map(h => h.annotation.id) : [ hits[0].annotation.id ];\n } else {\n return [];\n }\n }\n\n const getAnnotationBounds = (id: string): DOMRect | undefined => {\n const rects = getAnnotationRects(id);\n\n if (rects.length === 0)\n return;\n\n let left = rects[0].left;\n let top = rects[0].top;\n let right = rects[0].right;\n let bottom = rects[0].bottom;\n\n for (let i = 1; i < rects.length; i++) {\n const rect = rects[i];\n\n left = Math.min(left, rect.left);\n top = Math.min(top, rect.top);\n right = Math.max(right, rect.right);\n bottom = Math.max(bottom, rect.bottom);\n }\n\n return new DOMRect(left, top, right - left, bottom - top);\n }\n\n const getAnnotationRects = (id: string): DOMRect[] => {\n const indexed = index.get(id);\n if (indexed) {\n // Reminder: *each* IndexedHighlightRect stores *all*\n // DOMRects for the annotation for convenience\n return indexed[0].annotation.rects;\n } else {\n return [];\n }\n }\n\n const getIntersecting = (\n minX: number, \n minY: number, \n maxX: number, \n maxY: number,\n ): AnnotationRects<T>[] => {\n // All rects in this area, regardless of annotation\n const rects = tree.search({ minX, minY, maxX, maxY });\n\n // Distinct annotation IDs\n const annotationIds = new Set(rects.map(rect => rect.annotation.id));\n\n // Resolve annotation IDs. Note that the tree could be slightly out of sync (because \n // it updates by listening to changes, just like anyone else)\n return Array.from(annotationIds).map(annotationId => ({\n annotation: store.getAnnotation(annotationId)!,\n rects: getAnnotationRects(annotationId)\n })).filter(t => Boolean(t.annotation));\n }\n\n const size = () => tree.all().length;\n\n const recalculate = () => {\n set(store.all().map(a => a.target), true);\n emitter.emit('recalculate');\n };\n\n const on = <E extends keyof SpatialTreeEvents>(event: E, callback: SpatialTreeEvents[E]): Unsubscribe => emitter.on(event, callback);\n\n return {\n all,\n clear,\n getAt,\n getAnnotationBounds,\n getAnnotationRects,\n getIntersecting,\n insert,\n recalculate,\n remove,\n set,\n size,\n update,\n on\n }\n\n}\n","import type { Filter, Store, ViewportState } from '@annotorious/core';\nimport { \n createHoverState, \n createSelectionState, \n createStore, \n Origin,\n createViewportState\n} from '@annotorious/core';\nimport type { \n AnnotatorState, \n SelectionState, \n HoverState, \n} from '@annotorious/core';\nimport type { TextAnnotation, TextAnnotationTarget } from '../model';\nimport { createSpatialTree, type SpatialTreeEvents } from '../state/spatial-tree';\nimport type { AnnotationRects, TextAnnotationStore } from '../state/text-annotation-store';\nimport { isRevived, reviveAnnotation, reviveTarget } from '../utils/annotation';\nimport type { TextAnnotatorOptions } from '../text-annotator-options';\n\nexport interface TextAnnotatorState<I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation> \n extends Omit<AnnotatorState<I, E>, 'store'> {\n\n store: TextAnnotationStore<I>;\n\n selection: SelectionState<I, E>;\n\n hover: HoverState<I>;\n\n viewport: ViewportState;\n\n}\n\nexport const createTextAnnotatorState = <I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation>(\n container: HTMLElement,\n opts: TextAnnotatorOptions<I, E>\n): TextAnnotatorState<I, E> => {\n\n const store: Store<I> = createStore<I>();\n\n const tree = createSpatialTree(store, container, opts.mergeHighlights?.horizontalTolerance, opts.mergeHighlights?.verticalTolerance);\n\n const selection = createSelectionState<I, E>(store, opts.userSelectAction, opts.adapter);\n\n const hover = createHoverState(store);\n\n const viewport = createViewportState();\n\n // Wrap store interface to intercept annotations and revive DOM ranges, if needed\n const addAnnotation = (annotation: I, origin = Origin.LOCAL): boolean => {\n const revived = reviveAnnotation(annotation, container);\n\n const isValid = isRevived(revived.target.selector);\n if (isValid)\n store.addAnnotation(revived, origin); \n\n return isValid;\n }\n\n const bulkAddAnnotations = (\n annotations: I[], \n replace = true, \n origin = Origin.LOCAL\n ): I[] => {\n const revived = annotations.map(a => reviveAnnotation<I>(a, container));\n\n // Initial page load might take some time. Retry for more robustness.\n const couldNotRevive = revived.filter(a => !isRevived(a.target.selector));\n store.bulkAddAnnotations(revived, replace, origin);\n\n return couldNotRevive;\n }\n \n const bulkUpsertAnnotations = (\n annotations: I[], \n origin = Origin.LOCAL\n ): I[] => {\n const revived = annotations.map(a => reviveAnnotation(a, container));\n\n // Initial page load might take some time. Retry for more robustness.\n const couldNotRevive = revived.filter(a => !isRevived(a.target.selector));\n \n revived.forEach(a => {\n if (store.getAnnotation(a.id))\n store.updateAnnotation(a, origin);\n else \n store.addAnnotation(a, origin);\n })\n\n return couldNotRevive;\n }\n\n const updateTarget = (target: TextAnnotationTarget, origin = Origin.LOCAL) => {\n const revived = reviveTarget(target, container);\n store.updateTarget(revived, origin);\n }\n\n const bulkUpdateTargets = (targets: TextAnnotationTarget[], origin = Origin.LOCAL) => {\n const revived = targets.map(t => reviveTarget(t, container));\n store.bulkUpdateTargets(revived, origin);\n }\n\n function getAt(x: number, y: number, all: true, filter?: Filter): I[] | undefined;\n function getAt(x: number, y: number, all: false, filter?: Filter): I | undefined;\n function getAt(x: number, y: number, all?: boolean, filter?: Filter): I | I[] | undefined {\n const getAll = all || Boolean(filter);\n\n const annotations = tree.getAt(x, y, getAll).map(id => store.getAnnotation(id)!).filter(Boolean);\n\n const filtered = filter ? annotations.filter(filter) : annotations;\n\n if (filtered.length === 0)\n return undefined;\n\n return all ? filtered : filtered[0];\n }\n\n const getAnnotationBounds = (id: string): DOMRect | undefined => {\n const rects = tree.getAnnotationRects(id);\n return rects.length > 0 ? tree.getAnnotationBounds(id) : undefined;\n }\n\n const getIntersecting = (\n minX: number,\n minY: number,\n maxX: number,\n maxY: number,\n ): AnnotationRects<I>[] => tree.getIntersecting(minX, minY, maxX, maxY);\n\n const getAnnotationRects = (id: string): DOMRect[] => tree.getAnnotationRects(id);\n\n const recalculatePositions = () => tree.recalculate();\n const onRecalculatePositions = (callback: SpatialTreeEvents['recalculate']) => tree.on('recalculate', callback);\n\n store.observe(({ changes }) => {\n const deleted = (changes.deleted || []).filter(a => isRevived(a.target.selector));\n const created = (changes.created || []).filter(a => isRevived(a.target.selector));\n const updated = (changes.updated || []).filter(u => isRevived(u.newValue.target.selector));\n\n if (deleted?.length > 0)\n deleted.forEach(a => tree.remove(a.target));\n\n if (created.length > 0)\n tree.set(created.map(a => a.target), false);\n\n if (updated?.length > 0)\n updated.forEach(({ newValue }) => tree.update(newValue.target));\n });\n\n return {\n store: {\n ...store,\n addAnnotation,\n bulkAddAnnotations,\n bulkUpdateTargets,\n bulkUpsertAnnotations,\n getAnnotationBounds,\n getAnnotationRects,\n getIntersecting,\n getAt,\n recalculatePositions,\n onRecalculatePositions,\n updateTarget\n },\n selection,\n hover,\n viewport\n }\n\n}\n","export default function debounce(function_, wait = 100, options = {}) {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError(`Expected the first parameter to be a function, got \\`${typeof function_}\\`.`);\n\t}\n\n\tif (wait < 0) {\n\t\tthrow new RangeError('`wait` must not be negative.');\n\t}\n\n\tif (typeof options === 'boolean') {\n\t\tthrow new TypeError('The `options` parameter must be an object, not a boolean. Use `{immediate: true}` instead.');\n\t}\n\n\tconst {immediate} = options;\n\n\tlet storedContext;\n\tlet storedArguments;\n\tlet timeoutId;\n\tlet timestamp;\n\tlet result;\n\n\tfunction run() {\n\t\tconst callContext = storedContext;\n\t\tconst callArguments = storedArguments;\n\t\tstoredContext = undefined;\n\t\tstoredArguments = undefined;\n\t\tresult = function_.apply(callContext, callArguments);\n\t\treturn result;\n\t}\n\n\tfunction later() {\n\t\tconst last = Date.now() - timestamp;\n\n\t\tif (last < wait && last >= 0) {\n\t\t\ttimeoutId = setTimeout(later, wait - last);\n\t\t} else {\n\t\t\ttimeoutId = undefined;\n\n\t\t\tif (!immediate) {\n\t\t\t\tresult = run();\n\t\t\t}\n\t\t}\n\t}\n\n\tconst debounced = function (...arguments_) {\n\t\tif (\n\t\t\tstoredContext\n\t\t\t&& this !== storedContext\n\t\t\t&& Object.getPrototypeOf(this) === Object.getPrototypeOf(storedContext)\n\t\t) {\n\t\t\tthrow new Error('Debounced method called with different contexts of the same prototype.');\n\t\t}\n\n\t\tstoredContext = this; // eslint-disable-line unicorn/no-this-assignment\n\t\tstoredArguments = arguments_;\n\t\ttimestamp = Date.now();\n\n\t\tconst callNow = immediate && !timeoutId;\n\n\t\tif (!timeoutId) {\n\t\t\ttimeoutId = setTimeout(later, wait);\n\t\t}\n\n\t\tif (callNow) {\n\t\t\tresult = run();\n\t\t\treturn result;\n\t\t}\n\n\t\treturn undefined;\n\t};\n\n\tObject.defineProperty(debounced, 'isPending', {\n\t\tget() {\n\t\t\treturn timeoutId !== undefined;\n\t\t},\n\t});\n\n\tdebounced.clear = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout(timeoutId);\n\t\ttimeoutId = undefined;\n\t\tstoredContext = undefined;\n\t\tstoredArguments = undefined;\n\t};\n\n\tdebounced.flush = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tdebounced.trigger();\n\t};\n\n\tdebounced.trigger = () => {\n\t\tresult = run();\n\n\t\tdebounced.clear();\n\t};\n\n\treturn debounced;\n}\n","/*!\n * hotkeys-js v4.0.4\n * A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies.\n * \n * @author kenny wong <wowohoo@qq.com>\n * @license MIT\n * @homepage https://jaywcjlove.github.io/hotkeys-js\n */\nconst isff = typeof navigator !== \"undefined\" ? navigator.userAgent.toLowerCase().indexOf(\"firefox\") > 0 : false;\nfunction addEvent(object, event, method, useCapture) {\n if (object.addEventListener) {\n object.addEventListener(event, method, useCapture);\n } else if (object.attachEvent) {\n object.attachEvent(`on${event}`, method);\n }\n}\nfunction removeEvent(object, event, method, useCapture) {\n if (!object) return;\n if (object.removeEventListener) {\n object.removeEventListener(event, method, useCapture);\n } else if (object.detachEvent) {\n object.detachEvent(`on${event}`, method);\n }\n}\nfunction getMods(modifier, key) {\n const modsKeys = key.slice(0, key.length - 1);\n const modsCodes = [];\n for (let i = 0; i < modsKeys.length; i++) {\n modsCodes.push(modifier[modsKeys[i].toLowerCase()]);\n }\n return modsCodes;\n}\nfunction getKeys(key) {\n if (typeof key !== \"string\") key = \"\";\n key = key.replace(/\\s/g, \"\");\n const keys = key.split(\",\");\n let index = keys.lastIndexOf(\"\");\n for (; index >= 0; ) {\n keys[index - 1] += \",\";\n keys.splice(index, 1);\n index = keys.lastIndexOf(\"\");\n }\n return keys;\n}\nfunction compareArray(a1, a2) {\n const arr1 = a1.length >= a2.length ? a1 : a2;\n const arr2 = a1.length >= a2.length ? a2 : a1;\n let isIndex = true;\n for (let i = 0; i < arr1.length; i++) {\n if (arr2.indexOf(arr1[i]) === -1) isIndex = false;\n }\n return isIndex;\n}\nfunction getLayoutIndependentKeyCode(event) {\n let key = event.keyCode || event.which || event.charCode;\n if (event.key && /^[a-z]$/i.test(event.key)) {\n return event.key.toUpperCase().charCodeAt(0);\n }\n if (event.code && /^Key[A-Z]$/.test(event.code)) {\n key = event.code.charCodeAt(3);\n }\n return key;\n}\nconst _keyMap = {\n backspace: 8,\n \"⌫\": 8,\n tab: 9,\n clear: 12,\n enter: 13,\n \"↩\": 13,\n return: 13,\n esc: 27,\n escape: 27,\n space: 32,\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n /// https://w3c.github.io/uievents/#events-keyboard-key-location\n arrowup: 38,\n arrowdown: 40,\n arrowleft: 37,\n arrowright: 39,\n del: 46,\n delete: 46,\n ins: 45,\n insert: 45,\n home: 36,\n end: 35,\n pageup: 33,\n pagedown: 34,\n capslock: 20,\n num_0: 96,\n num_1: 97,\n num_2: 98,\n num_3: 99,\n num_4: 100,\n num_5: 101,\n num_6: 102,\n num_7: 103,\n num_8: 104,\n num_9: 105,\n num_multiply: 106,\n num_add: 107,\n num_enter: 108,\n num_subtract: 109,\n num_decimal: 110,\n num_divide: 111,\n \"⇪\": 20,\n \",\": 188,\n \".\": 190,\n \"/\": 191,\n \"`\": 192,\n \"-\": isff ? 173 : 189,\n \"=\": isff ? 61 : 187,\n \";\": isff ? 59 : 186,\n \"'\": 222,\n \"{\": 219,\n \"}\": 221,\n \"[\": 219,\n \"]\": 221,\n \"\\\\\": 220\n};\nconst _modifier = {\n // shiftKey\n \"⇧\": 16,\n shift: 16,\n // altKey\n \"⌥\": 18,\n alt: 18,\n option: 18,\n // ctrlKey\n \"⌃\": 17,\n ctrl: 17,\n control: 17,\n // metaKey\n \"⌘\": 91,\n cmd: 91,\n meta: 91,\n command: 91\n};\nconst modifierMap = {\n 16: \"shiftKey\",\n 18: \"altKey\",\n 17: \"ctrlKey\",\n 91: \"metaKey\",\n shiftKey: 16,\n ctrlKey: 17,\n altKey: 18,\n metaKey: 91\n};\nconst _mods = {\n 16: false,\n 18: false,\n 17: false,\n 91: false\n};\nconst _handlers = {};\nfor (let k = 1; k < 20; k++) {\n _keyMap[`f${k}`] = 111 + k;\n}\nlet _downKeys = [];\nlet winListendFocus = null;\nlet winListendFullscreen = null;\nlet _scope = \"all\";\nconst elementEventMap = /* @__PURE__ */ new Map();\nconst code = (x) => _keyMap[x.toLowerCase()] || _modifier[x.toLowerCase()] || x.toUpperCase().charCodeAt(0);\nconst getKey = (x) => Object.keys(_keyMap).find((k) => _keyMap[k] === x);\nconst getModifier = (x) => Object.keys(_modifier).find((k) => _modifier[k] === x);\nconst setScope = (scope) => {\n _scope = scope || \"all\";\n};\nconst getScope = () => {\n return _scope || \"all\";\n};\nconst getPressedKeyCodes = () => {\n return _downKeys.slice(0);\n};\nconst getPressedKeyString = () => {\n return _downKeys.map(\n (c) => getKey(c) || getModifier(c) || String.fromCharCode(c)\n );\n};\nconst getAllKeyCodes = () => {\n const result = [];\n Object.keys(_handlers).forEach((k) => {\n _handlers[k].forEach(({ key, scope, mods, shortcut }) => {\n result.push({\n scope,\n shortcut,\n mods,\n keys: key.split(\"+\").map((v) => code(v))\n });\n });\n });\n return result;\n};\nconst filter = (event) => {\n const target = event.target || event.srcElement;\n const { tagName } = target;\n let flag = true;\n const isInput = tagName === \"INPUT\" && ![\n \"checkbox\",\n \"radio\",\n \"range\",\n \"button\",\n \"file\",\n \"reset\",\n \"submit\",\n \"color\"\n ].includes(target.type);\n if (target.isContentEditable || (isInput || tagName === \"TEXTAREA\" || tagName === \"SELECT\") && !target.readOnly) {\n flag = false;\n }\n return flag;\n};\nconst isPressed = (keyCode) => {\n if (typeof keyCode === \"string\") {\n keyCode = code(keyCode);\n }\n return _downKeys.indexOf(keyCode) !== -1;\n};\nconst deleteScope = (scope, newScope) => {\n let handlers;\n let i;\n if (!scope) scope = getScope();\n for (const key in _handlers) {\n if (Object.prototype.hasOwnProperty.call(_handlers, key)) {\n handlers = _handlers[key];\n for (i = 0; i < handlers.length; ) {\n if (handlers[i].scope === scope) {\n const deleteItems = handlers.splice(i, 1);\n deleteItems.forEach(({ element }) => removeKeyEvent(element));\n } else {\n i++;\n }\n }\n }\n }\n if (getScope() === scope) setScope(newScope || \"all\");\n};\nfunction clearModifier(event) {\n let key = getLayoutIndependentKeyCode(event);\n if (event.key && event.key.toLowerCase() === \"capslock\") {\n key = code(event.key);\n }\n const i = _downKeys.indexOf(key);\n if (i >= 0) {\n _downKeys.splice(i, 1);\n }\n if (event.key && event.key.toLowerCase() === \"meta\") {\n _downKeys.splice(0, _downKeys.length);\n }\n if (key === 93 || key === 224) key = 91;\n if (key in _mods) {\n _mods[key] = false;\n for (const k in _modifier)\n if (_modifier[k] === key) hotkeys[k] = false;\n }\n}\nconst unbind = (keysInfo, ...args) => {\n if (typeof keysInfo === \"undefined\") {\n Object.keys(_handlers).forEach((key) => {\n if (Array.isArray(_handlers[key])) {\n _handlers[key].forEach((info) => eachUnbind(info));\n }\n delete _handlers[key];\n });\n removeKeyEvent(null);\n } else if (Array.isArray(keysInfo)) {\n keysInfo.forEach((info) => {\n if (info.key) eachUnbind(info);\n });\n } else if (typeof keysInfo === \"object\") {\n if (keysInfo.key) eachUnbind(keysInfo);\n } else if (typeof keysInfo === \"string\") {\n let [scope, method] = args;\n if (typeof scope === \"function\") {\n method = scope;\n scope = \"\";\n }\n eachUnbind({\n key: keysInfo,\n scope,\n method,\n splitKey: \"+\"\n });\n }\n};\nconst eachUnbind = ({\n key,\n scope,\n method,\n splitKey = \"+\"\n}) => {\n const multipleKeys = getKeys(key);\n multipleKeys.forEach((originKey) => {\n const unbindKeys = originKey.split(splitKey);\n const len = unbindKeys.length;\n const lastKey = unbindKeys[len - 1];\n const keyCode = lastKey === \"*\" ? \"*\" : code(lastKey);\n if (!_handlers[keyCode]) return;\n if (!scope) scope = getScope();\n const mods = len > 1 ? getMods(_modifier, unbindKeys) : [];\n const unbindElements = [];\n _handlers[keyCode] = _handlers[keyCode].filter((record) => {\n const isMatchingMethod = method ? record.method === method : true;\n const isUnbind = isMatchingMethod && record.scope === scope && compareArray(record.mods, mods);\n if (isUnbind) unbindElements.push(record.element);\n return !isUnbind;\n });\n unbindElements.forEach((element) => removeKeyEvent(element));\n });\n};\nfunction eventHandler(event, handler, scope, element) {\n if (handler.element !== element) {\n return;\n }\n let modifiersMatch;\n if (handler.scope === scope || handler.scope === \"all\") {\n modifiersMatch = handler.mods.length > 0;\n for (const y in _mods) {\n if (Object.prototype.hasOwnProperty.call(_mods, y)) {\n if (!_mods[y] && handler.mods.indexOf(+y) > -1 || _mods[y] && handler.mods.indexOf(+y) === -1) {\n modifiersMatch = false;\n }\n }\n }\n if (handler.mods.length === 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91] || modifiersMatch || handler.shortcut === \"*\") {\n handler.keys = [];\n handler.keys = handler.keys.concat(_downKeys);\n if (handler.method(event, handler) === false) {\n if (event.preventDefault) event.preventDefault();\n else event.returnValue = false;\n if (event.stopPropagation) event.stopPropagation();\n if (event.cancelBubble) event.cancelBubble = true;\n }\n }\n }\n}\nfunction dispatch(event, element) {\n const asterisk = _handlers[\"*\"];\n let key = getLayoutIndependentKeyCode(event);\n if (event.key && event.key.toLowerCase() === \"capslock\") {\n return;\n }\n const filterFn = hotkeys.filter || filter;\n if (!filterFn.call(this, event)) return;\n if (key === 93 || key === 224) key = 91;\n if (_downKeys.indexOf(key) === -1 && key !== 229) _downKeys.push(key);\n [\"metaKey\", \"ctrlKey\", \"altKey\", \"shiftKey\"].forEach((keyName) => {\n const keyNum = modifierMap[keyName];\n if (event[keyName] && _downKeys.indexOf(keyNum) === -1) {\n _downKeys.push(keyNum);\n } else if (!event[keyName] && _downKeys.indexOf(keyNum) > -1) {\n _downKeys.splice(_downKeys.indexOf(keyNum), 1);\n } else if (keyName === \"metaKey\" && event[keyName]) {\n _downKeys = _downKeys.filter((k) => k in modifierMap || k === key);\n }\n });\n if (key in _mods) {\n _mods[key] = true;\n for (const k in _modifier) {\n if (Object.prototype.hasOwnProperty.call(_modifier, k)) {\n const eventKey = modifierMap[_modifier[k]];\n hotkeys[k] = event[eventKey];\n }\n }\n if (!asterisk) return;\n }\n for (const e in _mods) {\n if (Object.prototype.hasOwnProperty.call(_mods, e)) {\n _mods[e] = event[modifierMap[e]];\n }\n }\n if (event.getModifierState && !(event.altKey && !event.ctrlKey) && event.getModifierState(\"AltGraph\")) {\n if (_downKeys.indexOf(17) === -1) {\n _downKeys.push(17);\n }\n if (_downKeys.indexOf(18) === -1) {\n _downKeys.push(18);\n }\n _mods[17] = true;\n _mods[18] = true;\n }\n const scope = getScope();\n if (asterisk) {\n for (let i = 0; i < asterisk.length; i++) {\n if (asterisk[i].scope === scope && (event.type === \"keydown\" && asterisk[i].keydown || event.type === \"keyup\" && asterisk[i].keyup)) {\n eventHandler(event, asterisk[i], scope, element);\n }\n }\n }\n if (!(key in _handlers)) return;\n const handlerKey = _handlers[key];\n const keyLen = handlerKey.length;\n for (let i = 0; i < keyLen; i++) {\n if (event.type === \"keydown\" && handlerKey[i].keydown || event.type === \"keyup\" && handlerKey[i].keyup) {\n if (handlerKey[i].key) {\n const record = handlerKey[i];\n const { splitKey } = record;\n const keyShortcut = record.key.split(splitKey);\n const _downKeysCurrent = [];\n for (let a = 0; a < keyShortcut.length; a++) {\n _downKeysCurrent.push(code(keyShortcut[a]));\n }\n if (_downKeysCurrent.sort().join(\"\") === _downKeys.sort().join(\"\")) {\n eventHandler(event, record, scope, element);\n }\n }\n }\n }\n}\nconst hotkeys = function hotkeys2(key, option, method) {\n _downKeys = [];\n const keys = getKeys(key);\n let mods = [];\n let scope = \"all\";\n let element = document;\n let i = 0;\n let keyup = false;\n let keydown = true;\n let splitKey = \"+\";\n let capture = false;\n let single = false;\n if (method === void 0 && typeof option === \"function\") {\n method = option;\n }\n if (Object.prototype.toString.call(option) === \"[object Object]\") {\n const opts = option;\n if (opts.scope) scope = opts.scope;\n if (opts.element) element = opts.element;\n if (opts.keyup) keyup = opts.keyup;\n if (opts.keydown !== void 0) keydown = opts.keydown;\n if (opts.capture !== void 0) capture = opts.capture;\n if (typeof opts.splitKey === \"string\") splitKey = opts.splitKey;\n if (opts.single === true) single = true;\n }\n if (typeof option === \"string\") scope = option;\n if (single) unbind(key, scope);\n for (; i < keys.length; i++) {\n const currentKey = keys[i].split(splitKey);\n mods = [];\n if (currentKey.length > 1) mods = getMods(_modifier, currentKey);\n let finalKey = currentKey[currentKey.length - 1];\n finalKey = finalKey === \"*\" ? \"*\" : code(finalKey);\n if (!(finalKey in _handlers)) _handlers[finalKey] = [];\n _handlers[finalKey].push({\n keyup,\n keydown,\n scope,\n mods,\n shortcut: keys[i],\n method,\n key: keys[i],\n splitKey,\n element\n });\n }\n if (typeof element !== \"undefined\" && typeof window !== \"undefined\") {\n if (!elementEventMap.has(element)) {\n const keydownListener = (event = window.event) => dispatch(event, element);\n const keyupListenr = (event = window.event) => {\n dispatch(event, element);\n clearModifier(event);\n };\n elementEventMap.set(element, { keydownListener, keyupListenr, capture });\n addEvent(element, \"keydown\", keydownListener, capture);\n addEvent(element, \"keyup\", keyupListenr, capture);\n }\n if (!winListendFocus) {\n const listener = () => {\n _downKeys = [];\n };\n winListendFocus = { listener, capture };\n addEvent(window, \"focus\", listener, capture);\n }\n if (!winListendFullscreen && typeof document !== \"undefined\") {\n const onFullscreenChange = () => {\n _downKeys = [];\n for (const k in _mods) _mods[k] = false;\n for (const k in _modifier) hotkeys2[k] = false;\n };\n const fullscreenListener = onFullscreenChange;\n const webkitListener = onFullscreenChange;\n document.addEventListener(\"fullscreenchange\", fullscreenListener);\n document.addEventListener(\"webkitfullscreenchange\", webkitListener);\n winListendFullscreen = { fullscreen: fullscreenListener, webkit: webkitListener };\n }\n }\n};\nfunction trigger(shortcut, scope = \"all\") {\n Object.keys(_handlers).forEach((key) => {\n const dataList = _handlers[key].filter(\n (item) => item.scope === scope && item.shortcut === shortcut\n );\n dataList.forEach((data) => {\n if (data && data.method) {\n data.method({}, data);\n }\n });\n });\n}\nfunction removeKeyEvent(element) {\n const values = Object.values(_handlers).flat();\n const findindex = values.findIndex(({ element: el }) => el === element);\n if (findindex < 0 && element) {\n const { keydownListener, keyupListenr, capture } = elementEventMap.get(element) || {};\n if (keydownListener && keyupListenr) {\n removeEvent(element, \"keyup\", keyupListenr, capture);\n removeEvent(element, \"keydown\", keydownListener, capture);\n elementEventMap.delete(element);\n }\n }\n if (values.length <= 0 || elementEventMap.size <= 0) {\n const eventKeys = Array.from(elementEventMap.keys());\n eventKeys.forEach((el) => {\n const { keydownListener, keyupListenr, capture } = elementEventMap.get(el) || {};\n if (keydownListener && keyupListenr) {\n removeEvent(el, \"keyup\", keyupListenr, capture);\n removeEvent(el, \"keydown\", keydownListener, capture);\n elementEventMap.delete(el);\n }\n });\n elementEventMap.clear();\n Object.keys(_handlers).forEach((key) => delete _handlers[key]);\n if (winListendFocus) {\n const { listener, capture } = winListendFocus;\n removeEvent(window, \"focus\", listener, capture);\n winListendFocus = null;\n }\n if (winListendFullscreen && typeof document !== \"undefined\") {\n document.removeEventListener(\"fullscreenchange\", winListendFullscreen.fullscreen);\n document.removeEventListener(\"webkitfullscreenchange\", winListendFullscreen.webkit);\n winListendFullscreen = null;\n }\n }\n}\nconst _api = {\n getPressedKeyString,\n setScope,\n getScope,\n deleteScope,\n getPressedKeyCodes,\n getAllKeyCodes,\n isPressed,\n filter,\n trigger,\n unbind,\n keyMap: _keyMap,\n modifier: _modifier,\n modifierMap\n};\nfor (const a in _api) {\n const key = a;\n if (Object.prototype.hasOwnProperty.call(_api, key)) {\n hotkeys[key] = _api[key];\n }\n}\nif (typeof window !== \"undefined\") {\n const _hotkeys = window.hotkeys;\n hotkeys.noConflict = (deep) => {\n if (deep && window.hotkeys === hotkeys) {\n window.hotkeys = _hotkeys;\n }\n return hotkeys;\n };\n window.hotkeys = hotkeys;\n}\nexport {\n hotkeys as default\n};\n//# sourceMappingURL=hotkeys-js.js.map\n","async function a(a,t,e=(()=>!1)){do{if(await a(),await e())break;const i=\"number\"==typeof t?t:t();await new Promise((a=>setTimeout(a,Math.max(0,i))))}while(!await e())}export{a as poll};\n","import debounce from 'debounce';\nimport { v4 as uuidv4 } from 'uuid';\nimport hotkeys from 'hotkeys-js';\nimport { poll } from 'poll';\nimport { Origin } from '@annotorious/core';\nimport type { Filter, Lifecycle, Selection, User } from '@annotorious/core';\nimport type { TextAnnotatorState } from './state';\nimport type { TextAnnotation, TextAnnotationTarget } from './model';\nimport type { AnnotatingMode } from './text-annotator';\nimport type { TextAnnotatorOptions } from './text-annotator-options';\nimport { rangeToSelector } from './utils/annotation';\nimport { clonePointerEvent, cloneKeyboardEvent } from './utils/events';\nimport { \n isMac,\n isNotAnnotatable,\n isRangeAnnotatable,\n isRangeWhitespaceOrEmpty,\n mergeRanges,\n splitAnnotatableRanges,\n trimRangeToContainer\n} from './utils/dom';\n\nconst CLICK_TIMEOUT = 300;\n\nconst ARROW_KEYS = ['up', 'down', 'left', 'right'];\n\nconst SELECT_ALL = isMac ? '⌘+a' : 'ctrl+a';\n\nconst SELECTION_KEYS = [\n ...ARROW_KEYS.map(key => `shift+${key}`),\n SELECT_ALL\n];\n\nexport const createSelectionHandler = <T extends TextAnnotation>(\n container: HTMLElement,\n state: TextAnnotatorState<TextAnnotation, any>,\n lifecycle: Lifecycle<TextAnnotation, any>,\n options: TextAnnotatorOptions<TextAnnotation, any>\n) => {\n const { store, selection } = state;\n\n let currentUser: User | undefined;\n\n const {\n annotatingEnabled,\n offsetReferenceSelector,\n selectionMode,\n dismissOnNotAnnotatable = 'NEVER'\n } = options;\n\n let currentFilter: Filter | undefined;\n\n let currentAnnotatingEnabled = annotatingEnabled;\n\n let annotatingMode: AnnotatingMode = 'CREATE_NEW';\n\n let currentTarget: TextAnnotationTarget | undefined;\n\n // Only used if allowModifierSelect === true or if\n // annotatingMode === 'ADD_TO_CURRENT' | 'REPLACE_CURRENT'\n let targetToModify: TextAnnotationTarget | undefined;\n\n let isLeftClick: boolean | undefined;\n\n let lastDownEvent: Selection['event'] | undefined;\n\n const setAnnotatingEnabled = (enabled: boolean) => {\n currentAnnotatingEnabled = enabled;\n onSelectionChange.clear();\n\n if (!enabled) {\n targetToModify = undefined;\n currentTarget = undefined;\n isLeftClick = undefined;\n lastDownEvent = undefined;\n }\n }\n\n const setAnnotatingMode = (mode?: AnnotatingMode) => annotatingMode = mode || 'CREATE_NEW';\n\n const setFilter = (filter?: Filter<any>) => currentFilter = filter;\n \n const setUser = (user?: User) => currentUser = user;\n\n const isAddToCurrentSelect = (evt: Selection['event']) => {\n if (annotatingMode === 'ADD_TO_CURRENT')\n return true;\n\n if (options.allowModifierSelect) {\n const asPtr = evt as PointerEvent;\n return isMac ? asPtr.metaKey : asPtr.ctrlKey;\n } else {\n return false;\n }\n }\n\n const onSelectStart = () => {\n if (!currentAnnotatingEnabled) return;\n\n if (isLeftClick === false) return;\n\n const { selected } = selection;\n\n // Will this selection modify an existing annotation?\n const isModifyExisting = (\n isAddToCurrentSelect(lastDownEvent) || annotatingMode === 'REPLACE_CURRENT'\n ) && selected.length === 1\n && selected[0].editable;\n\n if (isModifyExisting) {\n const existing = store.getAnnotation(selected[0].id);\n\n if (existing?.target) {\n targetToModify = existing.target;\n\n currentTarget = {\n annotation: existing.id,\n selector: [],\n created: targetToModify.created,\n creator: targetToModify.creator,\n updated: new Date(),\n updatedBy: currentUser\n };\n\n return;\n }\n }\n\n targetToModify = undefined;\n\n currentTarget = {\n annotation: uuidv4(),\n selector: [],\n created: new Date(),\n creator: currentUser\n };\n };\n\n const onSelectionChange = debounce((evt: Event) => {\n if (!currentAnnotatingEnabled) return;\n\n const sel = document.getSelection();\n\n /**\n * In iOS when a user clicks on a button, the `selectionchange` event is fired.\n * However, the generated selection is empty and the `anchorNode` is `null`. That\n * doesn't give us information about whether the selection is in the annotatable area\n * or whether the previously selected text was dismissed. Therefore we should bail\n * out from such a range processing.\n *\n * @see https://github.com/recogito/text-annotator-js/pull/164#issuecomment-2416961473\n */\n if (!sel?.anchorNode) return;\n\n const selectionRanges =\n Array.from(Array(sel.rangeCount).keys()).map(idx => sel.getRangeAt(idx));\n\n /**\n * This is to handle cases where the selection is \"hijacked\" by\n * another element in a not-annotatable area. A rare case in practice.\n * But rich text editors like Quill will do it!\n */\n if (selectionRanges.every(r => !isRangeAnnotatable(container, r))) {\n currentTarget = undefined;\n return;\n }\n\n const timeDifference = evt.timeStamp - (lastDownEvent?.timeStamp || evt.timeStamp);\n\n /**\n * The selection start needs to be emulated for some platforms, but only \n * for the pointer events! (Keyboard events fire consistently on desktops \n * and the `timeDifference` will always be <10ms between `keydown` and\n * `selectionchange`)\n */\n if (lastDownEvent?.type === 'pointerdown') {\n if (timeDifference < 1000 && !currentTarget) {\n // Chrome/iOS does not reliably fire the 'selectstart' event!\n onSelectStart();\n } else if (sel.isCollapsed && timeDifference < CLICK_TIMEOUT) {\n // Firefox doesn't fire the 'selectstart' when user clicks\n // over the text, which collapses the selection\n onSelectStart();\n }\n }\n\n /*\n Let's assume the user drags the selection from outside the annotatable area\n over the annotatable area (intersection!). Then drags it out again\n (no intersection!), then in again (intersection). Because the\n currentTarget will have been cleared, meanwhile, execution will stop.\n\n But we don't want this - instead, processing should continue as normal,\n and a new currentTarget should be computed when the user drags the\n selection into the annotatable area a second time.\n */\n if (!currentTarget) {\n onSelectStart();\n\n // If the currentTarget is still missing -> bail out\n if (!currentTarget) return;\n }\n\n if (sel.isCollapsed) {\n /**\n * The selection range got collapsed during the selecting process. Unless this\n * is intentional (CTRL + select, modifying existing annotations), the previously \n * created annotation isn't relevant anymore and can be discarded\n *\n * @see https://github.com/recogito/text-annotator-js/issues/139\n */\n if (store.getAnnotation(currentTarget.annotation) && !(\n isAddToCurrentSelect(lastDownEvent) || annotatingMode === 'REPLACE_CURRENT'\n )) {\n selection.clear();\n store.deleteAnnotation(currentTarget.annotation);\n }\n\n return;\n }\n\n const containedRanges =\n selectionRanges.map(r => trimRangeToContainer(r, container));\n\n // The selection should be captured only within the annotatable container\n if (containedRanges.every(r => isRangeWhitespaceOrEmpty(r))) return;\n\n const annotatableRanges = containedRanges.flatMap(r => splitAnnotatableRanges(container, r.cloneRange()));\n\n const hasChanged =\n (annotatableRanges.length > 0 && !currentTarget) ||\n annotatableRanges.length !== currentTarget.selector.length ||\n annotatableRanges.some((r, i) => r.toString() !== currentTarget?.selector[i]?.quote);\n\n if (!hasChanged) return;\n\n /** \n * The annotatable ranges are:\n * - the current annotatable ranges\n * - the ranges of the existing annotatation IFF we are adding to the current\n */\n const combinedRanges = (isAddToCurrentSelect(lastDownEvent) && targetToModify) ? mergeRanges([ \n ...(targetToModify.selector.map(s => s.range)),\n ...annotatableRanges\n ]) : annotatableRanges;\n\n currentTarget = {\n ...currentTarget,\n selector: combinedRanges.map(r => rangeToSelector(r, container, offsetReferenceSelector)),\n updated: new Date()\n };\n\n /** \n * If we're modifying (adding to/replacing) an existing annotation, we don't \n * need to perform the steps below.\n * \n * - We don't want to clear the selection\n * - We don't want to update the target until mouse-up\n * \n * CAVEAT: this won't work with keyboard selection yet. Ideally, we'd need an explicit\n * \"isKeyboardSelection\" flag to handle this case correctly.\n */\n if (isAddToCurrentSelect(lastDownEvent) || annotatingMode === 'REPLACE_CURRENT') return;\n\n /**\n * During mouse selection on the desktop, the annotation won't usually exist while the selection is being edited.\n * But it'll be typical during selection via the keyboard or mobile's handlebars.\n */\n if (store.getAnnotation(currentTarget.annotation)) {\n store.updateTarget(currentTarget, Origin.LOCAL);\n } else {\n // Proper lifecycle management: clear the previous selection first\n selection.clear();\n }\n }, 10);\n\n /**\n * Select events don't carry information about the mouse button.\n * Therefore, to prevent right-click selection, we need to listen\n * to the initial pointerdown event and remember the button\n */\n const onPointerDown = (evt: PointerEvent) => {\n /**\n * Cloning the event to prevent it from accidentally being `undefined`\n * @see https://github.com/recogito/text-annotator-js/commit/65d13f3108c429311cf8c2523f6babbbc946013d#r144033948\n */\n lastDownEvent = clonePointerEvent(evt);\n isLeftClick = lastDownEvent.button === 0;\n };\n\n const onPointerUp = async (evt: PointerEvent) => {\n if (!isLeftClick) return;\n\n const lastUpEvent = clonePointerEvent(evt);\n\n // Logic for selecting an existing annotation\n const clickSelect = () => {\n const { x, y } = container.getBoundingClientRect();\n\n if (isNotAnnotatable(container, lastUpEvent.target as Node)) {\n const shouldDismissSelection = typeof dismissOnNotAnnotatable === 'function'\n ? dismissOnNotAnnotatable(lastUpEvent, container)\n : dismissOnNotAnnotatable === 'ALWAYS';\n if (shouldDismissSelection) {\n selection.clear();\n }\n return;\n }\n\n const hovered =\n lastUpEvent.target instanceof Node &&\n container.contains(lastUpEvent.target) &&\n store.getAt(\n lastUpEvent.clientX - x,\n lastUpEvent.clientY - y,\n selectionMode === 'all',\n currentFilter\n );\n\n if (hovered) {\n const { selected } = selection;\n\n const currentIds = new Set(selected.map(s => s.id));\n const nextIds = Array.isArray(hovered) ? hovered.map(a => a.id) : [hovered.id];\n\n const hasChanged =\n currentIds.size !== nextIds.length ||\n !nextIds.every(id => currentIds.has(id));\n\n if (hasChanged) {\n lifecycle.emit('clickAnnotation', hovered);\n selection.userSelect(nextIds, lastUpEvent);\n }\n } else {\n selection.clear();\n }\n };\n\n const timeDifference = lastUpEvent.timeStamp - (lastDownEvent?.timeStamp || 0);\n if (timeDifference < CLICK_TIMEOUT) {\n await pollSelectionCollapsed();\n\n const sel = document.getSelection();\n\n const isDownOnNotAnnotatable =\n isNotAnnotatable(container, lastDownEvent?.target as Node);\n\n const isUpOnNotAnnotatable = \n isNotAnnotatable(container, lastUpEvent.target as Node);\n\n /**\n * Route to `clickSelect` if selection is collapsed OR the click happened\n * entirely over a not-annotatable element.\n *\n * The latter allows preventing re-selection of an existing annotation\n * when a user clicks on not-annotatable controls. For example, a click\n * on a `button` element doesn't make the selection collapse, but it still \n * needs to be processed with `clickSelect`.\n */\n if (sel?.isCollapsed || (isDownOnNotAnnotatable && isUpOnNotAnnotatable)) {\n currentTarget = undefined;\n clickSelect();\n return;\n }\n }\n\n if (currentTarget && currentTarget.selector.length > 0) {\n upsertCurrentTarget();\n selection.userSelect(currentTarget.annotation, lastUpEvent);\n }\n }\n\n /**\n * We must check the `isCollapsed` after an unspecified timeout\n * to handle the annotation dismissal after a click properly.\n *\n * Otherwise, the `isCollapsed` will return an obsolete `false` value,\n * click won't be processed, and the annotation will get falsely re-selected.\n *\n * @see https://github.com/recogito/text-annotator-js/issues/136#issue-2465915707\n * @see https://github.com/recogito/text-annotator-js/issues/136#issuecomment-2413773804\n */\n const pollSelectionCollapsed = async () => {\n const sel = document.getSelection();\n\n let stopPolling = false;\n let isCollapsed = sel?.isCollapsed;\n const shouldStopPolling = () => isCollapsed || stopPolling;\n\n const pollingDelayMs = 1;\n const stopPollingInMs = 50;\n setTimeout(() => stopPolling = true, stopPollingInMs);\n\n return poll(() => isCollapsed = sel?.isCollapsed, pollingDelayMs, shouldStopPolling);\n }\n\n const onContextMenu = (evt: PointerEvent) => {\n const sel = document.getSelection();\n\n if (sel?.isCollapsed) return;\n\n /**\n * When selecting the initial word, Chrome Android\n * fires `contextmenu`before `selectionchange`\n */\n if (!currentTarget || currentTarget.selector.length === 0) {\n onSelectionChange(evt);\n }\n \n /**\n * The selection couldn't be initiated - might span over a not-annotatable element.\n */\n if (!currentTarget) return;\n upsertCurrentTarget();\n\n selection.userSelect(currentTarget.annotation, clonePointerEvent(evt));\n }\n\n /**\n * Handles the completion of keyboard-based text selection when the Shift key is released.\n *\n * When a non-collapsed selection exists upon Shift key release, this handler persists\n * the annotation to the store and programmatically selects it.\n *\n * Event handling is restricted to:\n * - Annotatable elements within the container\n * - The document body (which receives focus during Tab navigation in Firefox and Safari)\n *\n * @see https://github.com/recogito/text-annotator-js/issues/247\n */\n const onKeyup = (evt: KeyboardEvent) => {\n if (!currentAnnotatingEnabled) return;\n\n if (\n evt.repeat ||\n (\n evt.target instanceof Node && isNotAnnotatable(container, evt.target) &&\n evt.target !== document.body\n )\n ) {\n return;\n }\n\n if (evt.key === 'Shift' && currentTarget) {\n const sel = document.getSelection();\n if (sel && !sel.isCollapsed) {\n upsertCurrentTarget();\n selection.userSelect(currentTarget.annotation, cloneKeyboardEvent(evt));\n }\n }\n }\n\n const onSelectAll = (evt: KeyboardEvent) => {\n\n const onSelected = () => setTimeout(() => {\n if (!currentTarget) return;\n\n if (currentTarget.selector.length > 0) {\n selection.clear();\n\n store.addAnnotation({\n id: currentTarget.annotation,\n bodies: [],\n target: currentTarget\n });\n\n selection.userSelect(currentTarget.annotation, cloneKeyboardEvent(evt));\n }\n \n document.removeEventListener('selectionchange', onSelected);\n\n // Sigh... this needs a delay to work. But doesn't seem reliable.\n }, 100);\n\n // Listen to the change event that follows\n document.addEventListener('selectionchange', onSelected);\n\n // Start selection!\n onSelectStart();\n }\n\n hotkeys(SELECTION_KEYS.join(','), { element: container, keydown: true, keyup: false }, evt => {\n if (!evt.repeat)\n lastDownEvent = cloneKeyboardEvent(evt);\n });\n\n hotkeys(SELECT_ALL, { keydown: true, keyup: false }, evt => {\n lastDownEvent = cloneKeyboardEvent(evt);\n onSelectAll(evt);\n });\n\n /**\n * Clears the current annotation selection when the user moves the text caret using arrow keys.\n *\n * This handler resets the selection state to ensure that free caret navigation through the text\n * does not inadvertently maintain an active annotation selection.\n *\n * Event handling is restricted to:\n * - Annotatable elements within the container\n * - The document body (which receives focus when the popup is closed or when interacting\n * with elements that become unmounted, such as a \"Close\" button)\n */\n const handleArrowKeyPress = (evt: KeyboardEvent) => {\n if (\n evt.repeat ||\n (\n evt.target instanceof Node && isNotAnnotatable(container, evt.target) &&\n evt.target !== document.body\n )\n ) {\n return;\n }\n\n currentTarget = undefined;\n selection.clear();\n };\n\n hotkeys(ARROW_KEYS.join(','), { keydown: true, keyup: false }, handleArrowKeyPress);\n\n // Helper\n const upsertCurrentTarget = () => {\n if (!currentTarget) return;\n const existingAnnotation = store.getAnnotation(currentTarget.annotation);\n if (!existingAnnotation) {\n store.addAnnotation({\n id: currentTarget.annotation,\n bodies: [],\n target: currentTarget\n });\n } else {\n const { target: { updated: existingTargetUpdated } } = existingAnnotation;\n const { updated: currentTargetUpdated } = currentTarget;\n\n if (\n !existingTargetUpdated ||\n !currentTargetUpdated ||\n existingTargetUpdated < currentTargetUpdated\n ) {\n store.updateTarget(currentTarget);\n }\n }\n };\n\n document.addEventListener('pointerdown', onPointerDown);\n document.addEventListener('pointerup', onPointerUp);\n document.addEventListener('contextmenu', onContextMenu);\n\n document.addEventListener('keyup', onKeyup);\n container.addEventListener('selectstart', onSelectStart);\n document.addEventListener('selectionchange', onSelectionChange);\n\n const destroy = () => {\n currentTarget = undefined;\n targetToModify = undefined;\n isLeftClick = undefined;\n lastDownEvent = undefined;\n\n onSelectionChange.clear();\n\n document.removeEventListener('pointerdown', onPointerDown);\n document.removeEventListener('pointerup', onPointerUp);\n document.removeEventListener('contextmenu', onContextMenu);\n\n document.removeEventListener('keyup', onKeyup);\n container.removeEventListener('selectstart', onSelectStart);\n document.removeEventListener('selectionchange', onSelectionChange);\n\n hotkeys.unbind();\n };\n\n return {\n destroy,\n setFilter,\n setUser,\n setAnnotatingEnabled,\n setAnnotatingMode\n }\n\n}\n\n","import type { ViewportState } from '@annotorious/core';\nimport { colord, type AnyColor } from 'colord';\nimport type { TextAnnotation } from '../../model';\nimport type { TextAnnotatorState } from '../../state';\nimport { \n computeStyle,\n createRenderer,\n DEFAULT_SELECTED_STYLE,\n DEFAULT_STYLE,\n type Highlight,\n type HighlightStyle,\n type HighlightStyleExpression,\n type Painter, \n type RendererFactory, \n type ViewportBounds \n} from '../';\n\nconst toCSS = (s?: HighlightStyle) => {\n const backgroundColor = colord(s?.fill || DEFAULT_STYLE.fill as AnyColor)\n .alpha((s?.fillOpacity === undefined ? DEFAULT_STYLE.fillOpacity : s.fillOpacity) as number)\n .toHex();\n\n const rules = [\n `background-color:${backgroundColor}`,\n s?.underlineThickness ? `text-decoration:underline` : undefined,\n s?.underlineColor ? `text-decoration-color:${s.underlineColor}` : undefined,\n s?.underlineOffset ? `text-underline-offset:${s.underlineOffset}px` : undefined,\n s?.underlineThickness ? `text-decoration-thickness:${s.underlineThickness}px` : undefined\n ].filter(Boolean);\n\n return rules.join(';');\n}\n\n/**\n * EXPERIMENTAL!\n */\nexport const createCSSHighlightPainter = (): Painter => {\n const elem = document.createElement('style');\n document.getElementsByTagName('head')[0].appendChild(elem);\n\n let currentRendered = new Set<string>();\n\n const redraw = (\n highlights:Highlight[], \n viewportBounds: ViewportBounds,\n currentStyle?: HighlightStyleExpression,\n styleOverrides?: Map<string, HighlightStyleExpression>,\n force?: boolean\n ) => {\n // Next set of rendered annotation IDs and selections\n const nextRendered = new Set(highlights.map(h => h.annotation.id));\n\n // Annotations currently in this stylesheet that no longer need rendering\n const toRemove = Array.from(currentRendered).filter(id => !nextRendered.has(id));\n\n // For simplicity, re-generate the whole stylesheet\n const updatedCSS = highlights.map(h => {\n const base = currentStyle\n ? typeof currentStyle === 'function'\n ? currentStyle(h.annotation, h.state)\n : currentStyle\n : h.state?.selected ? DEFAULT_SELECTED_STYLE : DEFAULT_STYLE;\n\n // Trigger the custom painter (if any) as a side-effect\n const style = computeStyle(h, currentStyle);\n\n return `::highlight(_${h.annotation.id}) { ${toCSS(style)} }`;\n });\n\n elem.innerHTML = updatedCSS.join('\\n');\n\n // After we have the styles, we need to update the Highlights.\n // Note that the (experimental) CSS Custom Highlight API is not yet\n // available in TypeScript!\n\n // @ts-ignore\n CSS.highlights.clear();\n // toRemove.forEach(id => CSS.highlights.delete(`_${id}`));\n\n // Could be improved further by (re-)setting only annotations that\n // have changes.\n highlights.forEach(({ annotation }) => {\n const ranges = annotation.target.selector.map(s => s.range);\n\n // @ts-ignore\n const highlights = new Highlight(...ranges);\n\n // @ts-ignore\n CSS.highlights.set(`_${annotation.id}`, highlights);\n });\n\n currentRendered = nextRendered;\n }\n\n const setVisible = (visible: boolean) => {\n console.log('setVisible not implemented on CSS Custom Highlights renderer');\n }\n\n const destroy = () => {\n // Clear all highlights from the Highlight Registry\n // @ts-ignore\n CSS.highlights.clear();\n\n // Remove the stylesheet\n elem.remove();\n }\n\n return {\n destroy,\n setVisible,\n redraw\n };\n\n}\n\nexport const createCSSHighlightRenderer: RendererFactory<TextAnnotation> = (\n container: HTMLElement,\n state: TextAnnotatorState<TextAnnotation, any>,\n viewport: ViewportState\n) => createRenderer(createCSSHighlightPainter(), container, state, viewport);","import type { FormatAdapter, UserSelectActionExpression, User } from '@annotorious/core';\nimport type { HighlightStyleExpression, RendererFactory } from './rendering';\nimport type { TextAnnotation } from './model';\n\nexport interface TextAnnotatorOptions<I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation> {\n\n adapter?: FormatAdapter<I, E>;\n\n allowModifierSelect?: boolean;\n\n annotatingEnabled?: boolean;\n\n /**\n * Determines whether an active selection should be dismissed\n * when a user ends their interaction (click, selection)\n * on a non-annotatable element.\n * - NEVER - don't dismiss the selection, ignore the action.\n * - ALWAYS - dismiss the selection.\n * - function - a custom matcher that takes an event and container as arguments.\n * Returns `true` if the selection should be dismissed.\n *\n * @defaut NEVER\n */\n dismissOnNotAnnotatable?: DismissOnNotAnnotatableExpression;\n\n mergeHighlights?: {\n\n horizontalTolerance?: number;\n\n verticalTolerance?: number;\n\n }\n\n offsetReferenceSelector?: string;\n \n renderer?: RendererType | RendererFactory<I>;\n\n selectionMode?: 'shortest' | 'all';\n\n style?: HighlightStyleExpression;\n\n user?: User;\n\n userSelectAction?: UserSelectActionExpression<E>,\n\n}\n\nexport type RendererType = 'SPANS' | 'CSS_HIGHLIGHTS';\n\nexport type DismissOnNotAnnotatableExpression = 'NEVER'| 'ALWAYS' | ((event: Event, container: HTMLElement) => boolean)\n\nexport const fillDefaults = <I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation>(\n opts: TextAnnotatorOptions<I, E>,\n defaults: TextAnnotatorOptions<I, E>\n): TextAnnotatorOptions<I, E> => ({\n ...opts,\n annotatingEnabled: opts.annotatingEnabled ?? defaults.annotatingEnabled,\n user: opts.user || defaults.user\n});\n","import { \n type Annotator, \n type AnnotatorState, \n type Filter, \n type Lifecycle, \n type Store, \n type User,\n createAnonymousGuest, \n createBaseAnnotator,\n createLifecycleObserver,\n createUndoStack \n} from '@annotorious/core';\nimport type { HighlightStyleExpression, Renderer, RendererFactory } from './rendering';\nimport { createSpansRenderer } from './rendering/renderer-spans';\nimport { createCSSHighlightRenderer } from './rendering/renderer-css-highlight';\nimport type { TextAnnotation } from './model';\nimport { \n type TextAnnotationStore, \n type TextAnnotatorState, \n createTextAnnotatorState \n} from './state';\nimport { scrollIntoView } from './utils/annotation';\nimport { programmaticallyFocusable } from './utils/dom';\nimport { cancelSingleClickEvents } from './utils/events';\nimport { createSelectionHandler } from './selection-handler';\nimport { \n type RendererType, \n type TextAnnotatorOptions,\n fillDefaults\n} from './text-annotator-options';\n\nimport './text-annotator.css';\n\nconst USE_DEFAULT_RENDERER: RendererType = 'SPANS';\n\nexport interface TextAnnotator<I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation> \n extends Omit<Annotator<I, E>, 'setStyle' | 'state'> {\n\n element: HTMLElement;\n\n renderer: Renderer;\n\n setStyle(style?: HighlightStyleExpression, id?: string): void;\n\n // Returns true if successful (or false if the annotation is not currently rendered)\n scrollIntoView(annotationOrId: I | string, scrollParentOrId?: string | Element): boolean;\n\n setAnnotatingEnabled(enabled?: boolean): void;\n\n setAnnotatingMode(mode?: AnnotatingMode): void;\n\n state: TextAnnotatorState<I, E>;\n\n}\n\nexport type AnnotatingMode = 'CREATE_NEW' | 'ADD_TO_CURRENT' | 'REPLACE_CURRENT';\n\nexport const createTextAnnotator = <I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation>(\n container: HTMLElement,\n options: TextAnnotatorOptions<I, E> = {}\n): TextAnnotator<I, E> => {\n // Prevent mobile browsers from triggering word selection on single click.\n cancelSingleClickEvents(container);\n\n // Make sure that the container is focusable and can receive both pointer and keyboard events\n programmaticallyFocusable(container);\n\n const opts = fillDefaults<I, E>(options, {\n annotatingEnabled: true,\n user: createAnonymousGuest()\n });\n\n const state: TextAnnotatorState<I, E> = createTextAnnotatorState<I, E>(container, opts);\n\n const { selection, viewport } = state;\n\n const store: TextAnnotationStore<I> = state.store;\n\n const undoStack = createUndoStack<I>(store as unknown as Store<I>);\n\n // Not an ideal cast... but not sure what the best approach would be \n const lifecycle = \n createLifecycleObserver<I, E>(state as unknown as AnnotatorState<I, E>, undoStack, opts.adapter);\n\n let currentUser: User = opts.user!;\n\n // Use the selected built-in renderer, or fall back to default. If \n // CSS_HIGHLIGHT is selected, check if CSS Custom Highlights are \n // supported, and fall back to default renderer if not.\n const useBuiltInRenderer: RendererType | null =\n typeof opts.renderer !== 'function' ? \n opts.renderer === 'CSS_HIGHLIGHTS'\n ? Boolean(CSS.highlights) ? 'CSS_HIGHLIGHTS' : USE_DEFAULT_RENDERER\n : opts.renderer || USE_DEFAULT_RENDERER :\n null;\n\n // Likewise: not an ideal cast...\n const renderer =\n useBuiltInRenderer === null ? (opts.renderer as RendererFactory<I>)(\n container, \n state as unknown as TextAnnotatorState<I, E>, \n viewport) :\n useBuiltInRenderer === 'SPANS' ? createSpansRenderer(\n container, \n state as unknown as TextAnnotatorState<TextAnnotation, E>, \n viewport) :\n useBuiltInRenderer === 'CSS_HIGHLIGHTS' ? createCSSHighlightRenderer(\n container, \n state as unknown as TextAnnotatorState<TextAnnotation, E>, \n viewport) :\n undefined;\n\n if (!renderer)\n throw `Unknown renderer implementation: ${opts.renderer}`;\n\n if (useBuiltInRenderer)\n console.debug(`Using ${useBuiltInRenderer} renderer`);\n else \n console.debug('Using custom renderer implementation');\n\n if (opts.style)\n renderer.setStyle(opts.style);\n\n // Likewise: not ideal casts...\n const selectionHandler = createSelectionHandler(\n container, \n state as unknown as TextAnnotatorState<TextAnnotation, E>, \n lifecycle as Lifecycle<TextAnnotation, E>,\n opts as unknown as TextAnnotatorOptions<TextAnnotation, E>);\n\n selectionHandler.setUser(currentUser);\n\n /*************************/\n /* External API */\n /******++++++*************/\n\n // Most of the external API functions are covered in the base annotator\n const base = createBaseAnnotator<I, E>(state as unknown as AnnotatorState<I, E>, undoStack, opts.adapter);\n\n const getUser = () => currentUser;\n\n const setAnnotatingEnabled = (enabled?: boolean) => {\n selectionHandler.setAnnotatingEnabled(\n enabled === undefined ? true : enabled\n );\n }\n\n const setAnnotatingMode = (mode?: AnnotatingMode) => {\n selectionHandler.setAnnotatingMode(mode);\n }\n\n const setFilter = (filter?: Filter<I>) => {\n renderer.setFilter(filter);\n selectionHandler.setFilter(filter);\n }\n\n const setUser = (user: User) => {\n currentUser = user;\n selectionHandler.setUser(user);\n }\n\n const setSelected = (arg?: string | string[]) => {\n if (arg) {\n selection.setSelected(arg);\n } else {\n selection.clear();\n }\n }\n\n const destroy = () => {\n renderer.destroy();\n selectionHandler.destroy();\n\n // Other cleanup actions\n undoStack.destroy();\n }\n\n return {\n ...base,\n destroy,\n element: container,\n getUser,\n renderer,\n setAnnotatingEnabled,\n setAnnotatingMode,\n setFilter,\n setStyle: renderer.setStyle.bind(renderer),\n setUser,\n setSelected,\n setVisible: renderer.setVisible.bind(renderer),\n on: lifecycle.on,\n off: lifecycle.off,\n scrollIntoView: scrollIntoView(container, store),\n state\n }\n\n}\n"],"names":["byteToHex","i","unsafeStringify","arr","offset","rnds8","rng","v4","options","buf","_v4","rnds","isMac","NOT_ANNOTATABLE_CLASS","NOT_ANNOTATABLE_SELECTOR","isNotAnnotatable","container","node","isRangeAnnotatable","range","ancestor","whitespaceOrEmptyRegex","isRangeWhitespaceOrEmpty","isNodeWhitespaceOrEmpty","mergeRanges","ranges","a","b","cmp","first","rest","result","acc","next","programmaticallyFocusable","iterateNotAnnotatableElements","notAnnotatableIterator","notAnnotatableNode","splitAnnotatableRanges","annotatableRanges","prevNotAnnotatable","notAnnotatable","subRange","lastRange","getRangeAnnotatableContents","contents","el","trimRangeToContainer","trimmedRange","segmenter","getQuoteContext","length","offsetReferenceSelector","offsetReference","rangeBefore","before","rangeAfter","after","prefixGraphemes","suffixGraphemes","s","rangeToSelector","quote","start","end","isRevived","selector","reviveSelector","iterator","runningOffset","n","startCounting","len","reviveTarget","target","reviveAnnotation","annotation","getScrollParent","overflowY","scroll","store","scrollParent","parentBounds","parentHeight","parentWidth","annotationBounds","width","height","offsetTop","offsetLeft","scrollTop","scrollLeft","top","left","scrollIntoView","annotationOrId","scrollParentOrId","id","current","annoRange","revived","revivedAnnoRange","G","$","X","N","_","z","Z","M","f","A","Oe","F","P","Be","g","w","L","C","B","h","v","m","T","l","K","R","ee","te","ne","H","oe","o","V","Re","se","ie","de","re","W","O","ce","le","Y","ue","xe","d","r","c","p","U","y","D","I","E","S","x","k","Q","J","j","q","fe","Ne","ke","Ie","u","pe","$e","ge","he","Ae","me","be","Pe","ve","Ee","Ve","Me","W3CTextFormat","source","serialized","parseW3CTextAnnotation","serializeW3CTextAnnotation","isTextSelector","parseW3CTextTargets","annotationId","creator","created","modified","w3cTargets","parsed","parseW3CUser","w3cTarget","w3cSelector","missingTypes","uuidv4","body","bodies","parseW3CBodies","updated","targetRest","quoteSelector","prefix","suffix","positionSelector","serializeW3CBodies","createNanoEvents","event","args","callbacks","cb","cancelSingleClickEvents","clonePointerEvent","cloneKeyboardEvent","debounce","func","delay","timeoutId","createRenderer","painter","state","viewport","selection","hover","emitter","currentStyle","styleOverrides","currentFilter","onDraw","trackViewport","onPointerMove","hit","UserSelectAction","redraw","force","bounds","getViewportBounds","minX","minY","maxX","maxY","annotationsInView","selectedIds","highlights","rects","selected","hovered","setStyle","style","setFilter","filter","on","callback","onStoreChange","unsubscribeSelection","unsubscribeHover","onScroll","onResize","resizeObserver","config","mutationObserver","records","record","t","e","DEFAULT_STYLE","DEFAULT_SELECTED_STYLE","getBackgroundColor","colord","computeStyle","highlight","has","dequal","foo","bar","ctor","computeZIndex","rect","all","intersects","getLength","total","intersecting","getHighlightClientRects","textNodes","it","currentNode","last","firstRange","childNode","getTextClientRects","getRelation","rectA","rectB","hTolerance","vTolerance","round","num","union","right","bottom","mergeClientRects","merged","wasMerged","relation","toDomRectList","index","toParentBounds","toViewportBounds","createSpansPainter","highlightLayer","currentRendered","highlightA","highlightB","createdA","createdB","computedStyle","span","visible","createSpansRenderer","innerWidth","innerHeight","annotations","ids","quickselect","compare","defaultCompare","sd","newLeft","newRight","swap","tmp","RBush","maxEntries","bbox","toBBox","nodesToSearch","child","childBBox","contains","data","tmpNode","item","createNode","equalsFn","path","indexes","parent","goingUp","findItem","items","calcBBox","N2","N1","multiSelect","right2","right3","level","minArea","minEnlargement","targetNode","area","bboxArea","enlargement","enlargedArea","isNode","insertPath","extend","splitIndex","newNode","minOverlap","bbox1","distBBox","bbox2","overlap","intersectionArea","compareMinX","compareNodeMinX","compareMinY","compareNodeMinY","xMargin","yMargin","leftBBox","rightBBox","margin","bboxMargin","siblings","destNode","children","stack","mid","createSpatialTree","hMergeTolerance","vMergeTolerance","tree","toItems","revivedRange","clear","insert","remove","update","set","targets","replace","rectsByTarget","allRects","getAt","hits","getAnnotationBounds","getAnnotationRects","indexed","annotationIds","createTextAnnotatorState","opts","createStore","createSelectionState","createHoverState","createViewportState","addAnnotation","origin","Origin","isValid","bulkAddAnnotations","couldNotRevive","bulkUpsertAnnotations","updateTarget","bulkUpdateTargets","getAll","filtered","getIntersecting","recalculatePositions","onRecalculatePositions","changes","deleted","newValue","function_","wait","immediate","storedContext","storedArguments","timestamp","run","callContext","callArguments","later","debounced","arguments_","callNow","isff","addEvent","object","method","useCapture","removeEvent","getMods","modifier","key","modsKeys","modsCodes","getKeys","keys","compareArray","a1","a2","arr1","arr2","isIndex","getLayoutIndependentKeyCode","_keyMap","_modifier","modifierMap","_mods","_handlers","_downKeys","winListendFocus","winListendFullscreen","_scope","elementEventMap","code","getKey","getModifier","setScope","scope","getScope","getPressedKeyCodes","getPressedKeyString","getAllKeyCodes","mods","shortcut","tagName","flag","isInput","isPressed","keyCode","deleteScope","newScope","handlers","element","removeKeyEvent","clearModifier","hotkeys","unbind","keysInfo","info","eachUnbind","splitKey","originKey","unbindKeys","lastKey","unbindElements","isUnbind","eventHandler","handler","modifiersMatch","dispatch","asterisk","keyName","keyNum","eventKey","handlerKey","keyLen","keyShortcut","_downKeysCurrent","hotkeys2","option","keyup","keydown","capture","single","currentKey","finalKey","keydownListener","keyupListenr","listener","onFullscreenChange","fullscreenListener","webkitListener","trigger","values","_api","_hotkeys","deep","CLICK_TIMEOUT","ARROW_KEYS","SELECT_ALL","SELECTION_KEYS","createSelectionHandler","lifecycle","currentUser","annotatingEnabled","selectionMode","dismissOnNotAnnotatable","currentAnnotatingEnabled","annotatingMode","currentTarget","targetToModify","isLeftClick","lastDownEvent","setAnnotatingEnabled","enabled","onSelectionChange","setAnnotatingMode","mode","setUser","user","isAddToCurrentSelect","evt","asPtr","onSelectStart","existing","sel","selectionRanges","idx","timeDifference","containedRanges","combinedRanges","onPointerDown","onPointerUp","lastUpEvent","clickSelect","currentIds","nextIds","pollSelectionCollapsed","isDownOnNotAnnotatable","isUpOnNotAnnotatable","upsertCurrentTarget","stopPolling","isCollapsed","shouldStopPolling","pollingDelayMs","poll","onContextMenu","onKeyup","onSelectAll","onSelected","handleArrowKeyPress","existingAnnotation","existingTargetUpdated","currentTargetUpdated","toCSS","createCSSHighlightPainter","elem","viewportBounds","nextRendered","updatedCSS","createCSSHighlightRenderer","fillDefaults","defaults","USE_DEFAULT_RENDERER","createTextAnnotator","createAnonymousGuest","undoStack","createUndoStack","createLifecycleObserver","useBuiltInRenderer","renderer","selectionHandler","base","createBaseAnnotator","getUser","setSelected","arg"],"mappings":"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","x_google_ignoreList":[0,1,2,14,16,21,23,30,31,34,35,36]}