@ckeditor/ckeditor5-clipboard 48.3.1 → 48.4.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["index.js","../src/utils/plaintexttohtml.ts","../src/clipboardobserver.ts","../src/utils/normalizeclipboarddata.ts","../src/utils/viewtoplaintext.ts","../src/clipboardmarkersutils.ts","../src/clipboardpipeline.ts","../src/lineview.ts","../src/dragdroptarget.ts","../src/dragdropblocktoolbar.ts","../src/dragdrop.ts","../src/pasteplaintext.ts","../src/clipboard.ts"],"names":[],"mappings":"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","file":"index.js.map","sourcesContent":["import { Plugin } from \"@ckeditor/ckeditor5-core\";\nimport { DomEmitterMixin, EventInfo, Rect, ResizeObserver, createElement, delay, env, getRangeFromMouseEvent, global, toUnit, uid } from \"@ckeditor/ckeditor5-utils\";\nimport { DomEventObserver, ModelLiveRange, ModelRange, PointerObserver, ViewDataTransfer } from \"@ckeditor/ckeditor5-engine\";\nimport { mapValues, throttle } from \"es-toolkit/compat\";\nimport { Widget, isWidget } from \"@ckeditor/ckeditor5-widget\";\nimport { View } from \"@ckeditor/ckeditor5-ui\";\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/utils/plaintexttohtml\n*/\n/**\n* Converts plain text to its HTML-ized version.\n*\n* @param text The plain text to convert.\n* @returns HTML generated from the plain text.\n*/\nfunction plainTextToHtml(text) {\n\ttext = text.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\\r?\\n\\r?\\n/g, \"</p><p>\").replace(/\\r?\\n/g, \"<br>\").replace(/\\t/g, \"&nbsp;&nbsp;&nbsp;&nbsp;\").replace(/^\\s/, \"&nbsp;\").replace(/\\s$/, \"&nbsp;\").replace(/\\s\\s/g, \" &nbsp;\");\n\tif (text.includes(\"</p><p>\") || text.includes(\"<br>\")) text = `<p>${text}</p>`;\n\treturn text;\n}\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/clipboardobserver\n*/\n/**\n* Clipboard events observer.\n*\n* Fires the following events:\n*\n* * {@link module:engine/view/document~ViewDocument#event:clipboardInput},\n* * {@link module:engine/view/document~ViewDocument#event:paste},\n* * {@link module:engine/view/document~ViewDocument#event:copy},\n* * {@link module:engine/view/document~ViewDocument#event:cut},\n* * {@link module:engine/view/document~ViewDocument#event:drop},\n* * {@link module:engine/view/document~ViewDocument#event:dragover},\n* * {@link module:engine/view/document~ViewDocument#event:dragging},\n* * {@link module:engine/view/document~ViewDocument#event:dragstart},\n* * {@link module:engine/view/document~ViewDocument#event:dragend},\n* * {@link module:engine/view/document~ViewDocument#event:dragenter},\n* * {@link module:engine/view/document~ViewDocument#event:dragleave}.\n*\n* **Note**: This observer is not available by default (ckeditor5-engine does not add it on its own).\n* To make it available, it needs to be added to {@link module:engine/view/document~ViewDocument} by using\n* the {@link module:engine/view/view~EditingView#addObserver `View#addObserver()`} method. Alternatively, you can load the\n* {@link module:clipboard/clipboard~Clipboard} plugin which adds this observer automatically (because it uses it).\n*/\nvar ClipboardObserver = class extends DomEventObserver {\n\tdomEventType = [\n\t\t\"paste\",\n\t\t\"copy\",\n\t\t\"cut\",\n\t\t\"drop\",\n\t\t\"dragover\",\n\t\t\"dragstart\",\n\t\t\"dragend\",\n\t\t\"dragenter\",\n\t\t\"dragleave\"\n\t];\n\tconstructor(view) {\n\t\tsuper(view);\n\t\tconst viewDocument = this.document;\n\t\tthis.listenTo(viewDocument, \"paste\", handleInput(\"clipboardInput\"), { priority: \"low\" });\n\t\tthis.listenTo(viewDocument, \"drop\", handleInput(\"clipboardInput\"), { priority: \"low\" });\n\t\tthis.listenTo(viewDocument, \"dragover\", handleInput(\"dragging\"), { priority: \"low\" });\n\t\tfunction handleInput(type) {\n\t\t\treturn (evt, data) => {\n\t\t\t\tdata.preventDefault();\n\t\t\t\tconst targetRanges = data.dropRange ? [data.dropRange] : null;\n\t\t\t\tconst dataTransfer = data.dataTransfer;\n\t\t\t\tconst eventInfo = new EventInfo(viewDocument, type);\n\t\t\t\tlet content = \"\";\n\t\t\t\tif (dataTransfer.getData(\"text/html\")) content = dataTransfer.getData(\"text/html\");\n\t\t\t\telse if (dataTransfer.getData(\"text/plain\")) content = plainTextToHtml(dataTransfer.getData(\"text/plain\"));\n\t\t\t\tviewDocument.fire(eventInfo, {\n\t\t\t\t\tdataTransfer,\n\t\t\t\t\tcontent,\n\t\t\t\t\tmethod: evt.name,\n\t\t\t\t\ttargetRanges,\n\t\t\t\t\ttarget: data.target,\n\t\t\t\t\tdomEvent: data.domEvent\n\t\t\t\t});\n\t\t\t\tif (eventInfo.stop.called) data.stopPropagation();\n\t\t\t};\n\t\t}\n\t}\n\tonDomEvent(domEvent) {\n\t\tconst evtData = { dataTransfer: new ViewDataTransfer(\"clipboardData\" in domEvent ? domEvent.clipboardData : domEvent.dataTransfer, { cacheFiles: domEvent.type == \"drop\" || domEvent.type == \"paste\" }) };\n\t\tif (domEvent.type == \"drop\" || domEvent.type == \"dragover\") {\n\t\t\tconst domRange = getRangeFromMouseEvent(domEvent);\n\t\t\tevtData.dropRange = domRange && this.view.domConverter.domRangeToView(domRange);\n\t\t}\n\t\tthis.fire(domEvent.type, domEvent, evtData);\n\t}\n};\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/utils/normalizeclipboarddata\n*/\n/**\n* Removes some popular browser quirks out of the clipboard data (HTML).\n* Removes all HTML comments. These are considered an internal thing and it makes little sense if they leak into the editor data.\n*\n* @param data The HTML data to normalize.\n* @returns Normalized HTML.\n* @internal\n*/\nfunction normalizeClipboardData(data) {\n\treturn data.replace(/<span(?: class=\"Apple-converted-space\"|)>(\\s+)<\\/span>/g, (fullMatch, spaces) => {\n\t\tif (spaces.length == 1) return \" \";\n\t\treturn spaces;\n\t}).replace(/<!--[\\s\\S]*?-->/g, \"\");\n}\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\nconst smallPaddingElements = [\"figcaption\", \"li\"];\nconst listElements = [\"ol\", \"ul\"];\n/**\n* Converts {@link module:engine/view/item~ViewItem view item} and all of its children to plain text.\n*\n* @param converter The converter instance.\n* @param viewItem View item to convert.\n* @returns Plain text representation of `viewItem`.\n*/\nfunction viewToPlainText(converter, viewItem) {\n\tif (viewItem.is(\"$text\") || viewItem.is(\"$textProxy\")) return viewItem.data;\n\tif (viewItem.is(\"element\", \"img\") && viewItem.hasAttribute(\"alt\")) return viewItem.getAttribute(\"alt\");\n\tif (viewItem.is(\"element\", \"br\")) return \"\\n\";\n\t/**\n\t* Item is a document fragment, attribute element or container element. It doesn't\n\t* have it's own text value, so we need to convert its children elements.\n\t*/\n\tlet text = \"\";\n\tlet prev = null;\n\tfor (const child of viewItem.getChildren()) {\n\t\ttext += newLinePadding(child, prev) + viewToPlainText(converter, child);\n\t\tprev = child;\n\t}\n\tif (viewItem.is(\"rawElement\")) {\n\t\tconst tempElement = document.implementation.createHTMLDocument(\"\").createElement(\"div\");\n\t\tviewItem.render(tempElement, converter);\n\t\ttext += domElementToPlainText(tempElement);\n\t}\n\treturn text;\n}\n/**\n* Recursively converts DOM element and all of its children to plain text.\n*/\nfunction domElementToPlainText(element) {\n\tlet text = \"\";\n\tif (element.nodeType === Node.TEXT_NODE) return element.textContent;\n\telse if (element.tagName === \"BR\") return \"\\n\";\n\tfor (const child of element.childNodes) text += domElementToPlainText(child);\n\treturn text;\n}\n/**\n* Returns new line padding to prefix the given elements with.\n*/\nfunction newLinePadding(element, previous) {\n\tif (!previous) return \"\";\n\tif (element.is(\"element\", \"li\") && !element.isEmpty && element.getChild(0).is(\"containerElement\")) return \"\\n\\n\";\n\tif (listElements.includes(element.name) && listElements.includes(previous.name))\n /**\n\t* Because `<ul>` and `<ol>` are ViewAttributeElements, two consecutive lists will not have any padding between\n\t* them (see the `if` statement below). To fix this, we need to make an exception for this case.\n\t*/\n\treturn \"\\n\\n\";\n\tif (!element.is(\"containerElement\") && !previous.is(\"containerElement\")) return \"\";\n\tif (smallPaddingElements.includes(element.name) || smallPaddingElements.includes(previous.name)) return \"\\n\";\n\tif (element.is(\"element\") && element.getCustomProperty(\"dataPipeline:transparentRendering\") || previous.is(\"element\") && previous.getCustomProperty(\"dataPipeline:transparentRendering\")) return \"\";\n\treturn \"\\n\\n\";\n}\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/clipboardmarkersutils\n*/\n/**\n* Part of the clipboard logic. Responsible for collecting markers from selected fragments\n* and restoring them with proper positions in pasted elements.\n*\n* @internal\n*/\nvar ClipboardMarkersUtils = class extends Plugin {\n\t/**\n\t* Map of marker names that can be copied.\n\t*\n\t* @internal\n\t*/\n\t_markersToCopy = /* @__PURE__ */ new Map();\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"ClipboardMarkersUtils\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\n\t}\n\t/**\n\t* Registers marker name as copyable in clipboard pipeline.\n\t*\n\t* @param markerName Name of marker that can be copied.\n\t* @param config Configuration that describes what can be performed on specified marker.\n\t* @internal\n\t*/\n\t_registerMarkerToCopy(markerName, config) {\n\t\tthis._markersToCopy.set(markerName, config);\n\t}\n\t/**\n\t* Performs copy markers on provided selection and paste it to fragment returned from `getCopiedFragment`.\n\t*\n\t* \t1. Picks all markers in provided selection.\n\t* \t2. Inserts fake markers to document.\n\t* \t3. Gets copied selection fragment from document.\n\t* \t4. Removes fake elements from fragment and document.\n\t* \t5. Inserts markers in the place of removed fake markers.\n\t*\n\t* Due to selection modification, when inserting items, `getCopiedFragment` must *always* operate on `writer.model.document.selection'.\n\t* Do not use any other custom selection object within callback, as this will lead to out-of-bounds exceptions in rare scenarios.\n\t*\n\t* @param action Type of clipboard action.\n\t* @param selection Selection to be checked.\n\t* @param getCopiedFragment\tCallback that performs copy of selection and returns it as fragment.\n\t* @internal\n\t*/\n\t_copySelectedFragmentWithMarkers(action, selection, getCopiedFragment = (writer) => writer.model.getSelectedContent(writer.model.document.selection)) {\n\t\treturn this.editor.model.change((writer) => {\n\t\t\tconst oldSelection = writer.model.document.selection;\n\t\t\twriter.setSelection(selection);\n\t\t\tconst sourceSelectionInsertedMarkers = this._insertFakeMarkersIntoSelection(writer, writer.model.document.selection, action);\n\t\t\tconst fragment = getCopiedFragment(writer);\n\t\t\tconst fakeMarkersRangesInsideRange = this._removeFakeMarkersInsideElement(writer, fragment);\n\t\t\tfor (const [markerName, elements] of Object.entries(sourceSelectionInsertedMarkers)) {\n\t\t\t\tfakeMarkersRangesInsideRange[markerName] ||= writer.createRangeIn(fragment);\n\t\t\t\tfor (const element of elements) writer.remove(element);\n\t\t\t}\n\t\t\tfragment.markers.clear();\n\t\t\tfor (const [markerName, range] of Object.entries(fakeMarkersRangesInsideRange)) fragment.markers.set(markerName, range);\n\t\t\twriter.setSelection(oldSelection);\n\t\t\treturn fragment;\n\t\t});\n\t}\n\t/**\n\t* Performs paste of markers on already pasted element.\n\t*\n\t* \t1. Inserts fake markers that are present in fragment element (such fragment will be processed in `getPastedDocumentElement`).\n\t* \t2. Calls `getPastedDocumentElement` and gets element that is inserted into root model.\n\t* \t3. Removes all fake markers present in transformed element.\n\t* \t4. Inserts new markers with removed fake markers ranges into pasted fragment.\n\t*\n\t* There are multiple edge cases that have to be considered before calling this function:\n\t*\n\t* \t* `markers` are inserted into the same element that must be later transformed inside `getPastedDocumentElement`.\n\t* \t* Fake marker elements inside `getPastedDocumentElement` can be cloned, but their ranges cannot overlap.\n\t* \t* If `duplicateOnPaste` is `true` in marker config then associated marker ID is regenerated before pasting.\n\t*\n\t* @param markers Object that maps marker name to corresponding range.\n\t* @param getPastedDocumentElement Getter used to get target markers element.\n\t* @internal\n\t*/\n\t_pasteMarkersIntoTransformedElement(markers, getPastedDocumentElement) {\n\t\tconst pasteMarkers = this._getPasteMarkersFromRangeMap(markers);\n\t\treturn this.editor.model.change((writer) => {\n\t\t\tconst sourceFragmentFakeMarkers = this._insertFakeMarkersElements(writer, pasteMarkers);\n\t\t\tconst transformedElement = getPastedDocumentElement(writer);\n\t\t\tconst removedFakeMarkers = this._removeFakeMarkersInsideElement(writer, transformedElement);\n\t\t\tfor (const element of Object.values(sourceFragmentFakeMarkers).flat()) writer.remove(element);\n\t\t\tfor (const [markerName, range] of Object.entries(removedFakeMarkers)) if (!writer.model.markers.has(markerName)) writer.addMarker(markerName, {\n\t\t\t\tusingOperation: true,\n\t\t\t\taffectsData: true,\n\t\t\t\trange\n\t\t\t});\n\t\t\treturn transformedElement;\n\t\t});\n\t}\n\t/**\n\t* Pastes document fragment with markers to document.\n\t* If `duplicateOnPaste` is `true` in marker config then associated markers IDs\n\t* are regenerated before pasting to avoid markers duplications in content.\n\t*\n\t* @param fragment Document fragment that should contain already processed by pipeline markers.\n\t* @internal\n\t*/\n\t_pasteFragmentWithMarkers(fragment) {\n\t\tconst pasteMarkers = this._getPasteMarkersFromRangeMap(fragment.markers);\n\t\tfragment.markers.clear();\n\t\tfor (const copyableMarker of pasteMarkers) fragment.markers.set(copyableMarker.name, copyableMarker.range);\n\t\treturn this.editor.model.insertContent(fragment);\n\t}\n\t/**\n\t* In some situations we have to perform copy on selected fragment with certain markers. This function allows to temporarily bypass\n\t* restrictions on markers that we want to copy.\n\t*\n\t* This function executes `executor()` callback. For the duration of the callback, if the clipboard pipeline is used to copy\n\t* content, markers with the specified name will be copied to the clipboard as well.\n\t*\n\t* @param markerName Which markers should be copied.\n\t* @param executor Callback executed.\n\t* @param config Optional configuration flags used to copy (such like partial copy flag).\n\t* @internal\n\t*/\n\t_forceMarkersCopy(markerName, executor, config = {\n\t\tallowedActions: \"all\",\n\t\tcopyPartiallySelected: true,\n\t\tduplicateOnPaste: true\n\t}) {\n\t\tconst before = this._markersToCopy.get(markerName);\n\t\tthis._markersToCopy.set(markerName, config);\n\t\texecutor();\n\t\tif (before) this._markersToCopy.set(markerName, before);\n\t\telse this._markersToCopy.delete(markerName);\n\t}\n\t/**\n\t* Checks if marker can be copied.\n\t*\n\t* @param markerName Name of checked marker.\n\t* @param action Type of clipboard action. If null then checks only if marker is registered as copyable.\n\t* @internal\n\t*/\n\t_isMarkerCopyable(markerName, action) {\n\t\tconst config = this._getMarkerClipboardConfig(markerName);\n\t\tif (!config) return false;\n\t\tif (!action) return true;\n\t\tconst { allowedActions } = config;\n\t\treturn allowedActions === \"all\" || allowedActions.includes(action);\n\t}\n\t/**\n\t* Checks if marker has any clipboard copy behavior configuration.\n\t*\n\t* @param markerName Name of checked marker.\n\t*/\n\t_hasMarkerConfiguration(markerName) {\n\t\treturn !!this._getMarkerClipboardConfig(markerName);\n\t}\n\t/**\n\t* Returns marker's configuration flags passed during registration.\n\t*\n\t* @param markerName Name of marker that should be returned.\n\t* @internal\n\t*/\n\t_getMarkerClipboardConfig(markerName) {\n\t\tconst [markerNamePrefix] = markerName.split(\":\");\n\t\treturn this._markersToCopy.get(markerNamePrefix) || null;\n\t}\n\t/**\n\t* First step of copying markers. It looks for markers intersecting with given selection and inserts `$marker` elements\n\t* at positions where document markers start or end. This way `$marker` elements can be easily copied together with\n\t* the rest of the content of the selection.\n\t*\n\t* @param writer An instance of the model writer.\n\t* @param selection Selection to be checked.\n\t* @param action Type of clipboard action.\n\t*/\n\t_insertFakeMarkersIntoSelection(writer, selection, action) {\n\t\tconst copyableMarkers = this._getCopyableMarkersFromSelection(writer, selection, action);\n\t\treturn this._insertFakeMarkersElements(writer, copyableMarkers);\n\t}\n\t/**\n\t* Returns array of markers that can be copied in specified selection.\n\t*\n\t* If marker cannot be copied partially (according to `copyPartiallySelected` configuration flag) and\n\t* is not present entirely in any selection range then it will be skipped.\n\t*\n\t* @param writer An instance of the model writer.\n\t* @param selection Selection which will be checked.\n\t* @param action Type of clipboard action. If null then checks only if marker is registered as copyable.\n\t*/\n\t_getCopyableMarkersFromSelection(writer, selection, action) {\n\t\tconst selectionRanges = Array.from(selection.getRanges());\n\t\tconst markersInRanges = new Set(selectionRanges.flatMap((selectionRange) => Array.from(writer.model.markers.getMarkersIntersectingRange(selectionRange))));\n\t\tconst isSelectionMarkerCopyable = (marker) => {\n\t\t\tif (!this._isMarkerCopyable(marker.name, action)) return false;\n\t\t\tconst { copyPartiallySelected } = this._getMarkerClipboardConfig(marker.name);\n\t\t\tif (!copyPartiallySelected) {\n\t\t\t\tconst markerRange = marker.getRange();\n\t\t\t\treturn selectionRanges.some((selectionRange) => selectionRange.containsRange(markerRange, true));\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t\treturn Array.from(markersInRanges).filter(isSelectionMarkerCopyable).map((copyableMarker) => {\n\t\t\treturn {\n\t\t\t\tname: action === \"dragstart\" ? this._getUniqueMarkerName(copyableMarker.name) : copyableMarker.name,\n\t\t\t\trange: copyableMarker.getRange()\n\t\t\t};\n\t\t});\n\t}\n\t/**\n\t* Picks all markers from markers map that can be pasted.\n\t* If `duplicateOnPaste` is `true`, it regenerates their IDs to ensure uniqueness.\n\t* If marker is not registered, it will be kept in the array anyway.\n\t*\n\t* @param markers Object that maps marker name to corresponding range.\n\t* @param action Type of clipboard action. If null then checks only if marker is registered as copyable.\n\t*/\n\t_getPasteMarkersFromRangeMap(markers, action = null) {\n\t\tconst { model } = this.editor;\n\t\treturn (markers instanceof Map ? Array.from(markers.entries()) : Object.entries(markers)).flatMap(([markerName, range]) => {\n\t\t\tif (!this._hasMarkerConfiguration(markerName)) return [{\n\t\t\t\tname: markerName,\n\t\t\t\trange\n\t\t\t}];\n\t\t\tif (this._isMarkerCopyable(markerName, action)) {\n\t\t\t\tconst copyMarkerConfig = this._getMarkerClipboardConfig(markerName);\n\t\t\t\tconst isInGraveyard = model.markers.has(markerName) && model.markers.get(markerName).getRange().root.rootName === \"$graveyard\";\n\t\t\t\tif (copyMarkerConfig.duplicateOnPaste || isInGraveyard) markerName = this._getUniqueMarkerName(markerName);\n\t\t\t\treturn [{\n\t\t\t\t\tname: markerName,\n\t\t\t\t\trange\n\t\t\t\t}];\n\t\t\t}\n\t\t\treturn [];\n\t\t});\n\t}\n\t/**\n\t* Inserts specified array of fake markers elements to document and assigns them `type` and `name` attributes.\n\t* Fake markers elements are used to calculate position of markers on pasted fragment that were transformed during\n\t* steps between copy and paste.\n\t*\n\t* @param writer An instance of the model writer.\n\t* @param markers Array of markers that will be inserted.\n\t*/\n\t_insertFakeMarkersElements(writer, markers) {\n\t\tconst mappedMarkers = {};\n\t\tconst sortedMarkers = markers.flatMap((marker) => {\n\t\t\tconst { start, end } = marker.range;\n\t\t\treturn [{\n\t\t\t\tposition: start,\n\t\t\t\tmarker,\n\t\t\t\ttype: \"start\"\n\t\t\t}, {\n\t\t\t\tposition: end,\n\t\t\t\tmarker,\n\t\t\t\ttype: \"end\"\n\t\t\t}];\n\t\t}).sort(({ position: posA }, { position: posB }) => posA.isBefore(posB) ? 1 : -1);\n\t\tfor (const { position, marker, type } of sortedMarkers) {\n\t\t\tconst fakeMarker = writer.createElement(\"$marker\", {\n\t\t\t\t\"data-name\": marker.name,\n\t\t\t\t\"data-type\": type\n\t\t\t});\n\t\t\tif (!mappedMarkers[marker.name]) mappedMarkers[marker.name] = [];\n\t\t\tmappedMarkers[marker.name].push(fakeMarker);\n\t\t\twriter.insert(fakeMarker, position);\n\t\t}\n\t\treturn mappedMarkers;\n\t}\n\t/**\n\t* Removes all `$marker` elements from the given document fragment.\n\t*\n\t* Returns an object where keys are marker names, and values are ranges corresponding to positions\n\t* where `$marker` elements were inserted.\n\t*\n\t* If the document fragment had only one `$marker` element for given marker (start or end) the other boundary is set automatically\n\t* (to the end or start of the document fragment, respectively).\n\t*\n\t* @param writer An instance of the model writer.\n\t* @param rootElement The element to be checked.\n\t*/\n\t_removeFakeMarkersInsideElement(writer, rootElement) {\n\t\treturn mapValues(this._getAllFakeMarkersFromElement(writer, rootElement).reduce((acc, fakeMarker) => {\n\t\t\tconst position = fakeMarker.markerElement && writer.createPositionBefore(fakeMarker.markerElement);\n\t\t\tlet prevFakeMarker = acc[fakeMarker.name];\n\t\t\tlet skipAssign = false;\n\t\t\tif (prevFakeMarker?.start && prevFakeMarker?.end) {\n\t\t\t\tif (this._getMarkerClipboardConfig(fakeMarker.name).duplicateOnPaste) acc[this._getUniqueMarkerName(fakeMarker.name)] = acc[fakeMarker.name];\n\t\t\t\telse skipAssign = true;\n\t\t\t\tprevFakeMarker = null;\n\t\t\t}\n\t\t\tif (!skipAssign) acc[fakeMarker.name] = {\n\t\t\t\t...prevFakeMarker,\n\t\t\t\t[fakeMarker.type]: position\n\t\t\t};\n\t\t\tif (fakeMarker.markerElement) writer.remove(fakeMarker.markerElement);\n\t\t\treturn acc;\n\t\t}, {}), (range) => new ModelRange(range.start || writer.createPositionFromPath(rootElement, [0]), range.end || writer.createPositionAt(rootElement, \"end\")));\n\t}\n\t/**\n\t* Returns array that contains list of fake markers with corresponding `$marker` elements.\n\t*\n\t* For each marker, there can be two `$marker` elements or only one (if the document fragment contained\n\t* only the beginning or only the end of a marker).\n\t*\n\t* @param writer An instance of the model writer.\n\t* @param rootElement The element to be checked.\n\t*/\n\t_getAllFakeMarkersFromElement(writer, rootElement) {\n\t\tconst foundFakeMarkers = Array.from(writer.createRangeIn(rootElement)).flatMap(({ item }) => {\n\t\t\tif (!item.is(\"element\", \"$marker\")) return [];\n\t\t\treturn [{\n\t\t\t\tmarkerElement: item,\n\t\t\t\tname: item.getAttribute(\"data-name\"),\n\t\t\t\ttype: item.getAttribute(\"data-type\")\n\t\t\t}];\n\t\t});\n\t\tconst prependFakeMarkers = [];\n\t\tconst appendFakeMarkers = [];\n\t\tfor (const fakeMarker of foundFakeMarkers) {\n\t\t\tif (fakeMarker.type === \"end\") {\n\t\t\t\tif (!foundFakeMarkers.some((otherFakeMarker) => otherFakeMarker.name === fakeMarker.name && otherFakeMarker.type === \"start\")) prependFakeMarkers.push({\n\t\t\t\t\tmarkerElement: null,\n\t\t\t\t\tname: fakeMarker.name,\n\t\t\t\t\ttype: \"start\"\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (fakeMarker.type === \"start\") {\n\t\t\t\tif (!foundFakeMarkers.some((otherFakeMarker) => otherFakeMarker.name === fakeMarker.name && otherFakeMarker.type === \"end\")) appendFakeMarkers.unshift({\n\t\t\t\t\tmarkerElement: null,\n\t\t\t\t\tname: fakeMarker.name,\n\t\t\t\t\ttype: \"end\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn [\n\t\t\t...prependFakeMarkers,\n\t\t\t...foundFakeMarkers,\n\t\t\t...appendFakeMarkers\n\t\t];\n\t}\n\t/**\n\t* When copy of markers occurs we have to make sure that pasted markers have different names\n\t* than source markers. This functions helps with assigning unique part to marker name to\n\t* prevent duplicated markers error.\n\t*\n\t* @param name Name of marker\n\t*/\n\t_getUniqueMarkerName(name) {\n\t\tconst parts = name.split(\":\");\n\t\tconst newId = uid().substring(1, 6);\n\t\tif (parts.length === 3) return `${parts.slice(0, 2).join(\":\")}:${newId}`;\n\t\treturn `${parts.join(\":\")}:${newId}`;\n\t}\n};\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/clipboardpipeline\n*/\n/**\n* The clipboard pipeline feature. It is responsible for intercepting the `paste` and `drop` events and\n* passing the pasted content through a series of events in order to insert it into the editor's content.\n* It also handles the `cut` and `copy` events to fill the native clipboard with the serialized editor's data.\n*\n* # Input pipeline\n*\n* The behavior of the default handlers (all at a `low` priority):\n*\n* ## Event: `paste` or `drop`\n*\n* 1. Translates the event data.\n* 2. Fires the {@link module:engine/view/document~ViewDocument#event:clipboardInput `view.Document#clipboardInput`} event.\n*\n* ## Event: `view.Document#clipboardInput`\n*\n* 1. If the `data.content` event field is already set (by some listener on a higher priority), it takes this content and fires the event\n* from the last point.\n* 2. Otherwise, it retrieves `text/html` or `text/plain` from `data.dataTransfer`.\n* 3. Normalizes the raw data by applying simple filters on string data.\n* 4. Processes the raw data to {@link module:engine/view/documentfragment~ViewDocumentFragment `view.DocumentFragment`} with the\n* {@link module:engine/controller/datacontroller~DataController#htmlProcessor `DataController#htmlProcessor`}.\n* 5. Fires the {@link module:clipboard/clipboardpipeline~ClipboardPipeline#event:inputTransformation\n* `ClipboardPipeline#inputTransformation`} event with the view document fragment in the `data.content` event field.\n*\n* ## Event: `ClipboardPipeline#inputTransformation`\n*\n* 1. Converts {@link module:engine/view/documentfragment~ViewDocumentFragment `view.DocumentFragment`} from the `data.content` field to\n* {@link module:engine/model/documentfragment~ModelDocumentFragment `model.DocumentFragment`}.\n* 2. Fires the {@link module:clipboard/clipboardpipeline~ClipboardPipeline#event:contentInsertion `ClipboardPipeline#contentInsertion`}\n* event with the model document fragment in the `data.content` event field.\n* **Note**: The `ClipboardPipeline#contentInsertion` event is fired within a model change block to allow other handlers\n* to run in the same block without post-fixers called in between (i.e., the selection post-fixer).\n*\n* ## Event: `ClipboardPipeline#contentInsertion`\n*\n* 1. Calls {@link module:engine/model/model~Model#insertContent `model.insertContent()`} to insert `data.content`\n* at the current selection position.\n*\n* # Output pipeline\n*\n* The behavior of the default handlers (all at a `low` priority):\n*\n* ## Event: `copy`, `cut` or `dragstart`\n*\n* 1. Retrieves the selected {@link module:engine/model/documentfragment~ModelDocumentFragment `model.DocumentFragment`} by calling\n* {@link module:engine/model/model~Model#getSelectedContent `model#getSelectedContent()`}.\n* 2. Converts the model document fragment to {@link module:engine/view/documentfragment~ViewDocumentFragment `view.DocumentFragment`}.\n* 3. Fires the {@link module:engine/view/document~ViewDocument#event:clipboardOutput `view.Document#clipboardOutput`} event\n* with the view document fragment in the `data.content` event field.\n*\n* ## Event: `view.Document#clipboardOutput`\n*\n* 1. Processes `data.content` to HTML and plain text with the\n* {@link module:engine/controller/datacontroller~DataController#htmlProcessor `DataController#htmlProcessor`}.\n* 2. Updates the `data.dataTransfer` data for `text/html` and `text/plain` with the processed data.\n* 3. For the `cut` method, calls {@link module:engine/model/model~Model#deleteContent `model.deleteContent()`}\n* on the current selection.\n*\n* Read more about the clipboard integration in the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n*/\nvar ClipboardPipeline = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"ClipboardPipeline\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get requires() {\n\t\treturn [ClipboardMarkersUtils];\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tinit() {\n\t\tthis.editor.editing.view.addObserver(ClipboardObserver);\n\t\tthis._setupPasteDrop();\n\t\tthis._setupCopyCut();\n\t}\n\t/**\n\t* Fires Clipboard `'outputTransformation'` event for given parameters.\n\t*\n\t* @internal\n\t*/\n\t_fireOutputTransformationEvent(dataTransfer, selection, method) {\n\t\tconst clipboardMarkersUtils = this.editor.plugins.get(\"ClipboardMarkersUtils\");\n\t\tthis.editor.model.enqueueChange({ isUndoable: method === \"cut\" }, () => {\n\t\t\tconst documentFragment = clipboardMarkersUtils._copySelectedFragmentWithMarkers(method, selection);\n\t\t\tthis.fire(\"outputTransformation\", {\n\t\t\t\tdataTransfer,\n\t\t\t\tcontent: documentFragment,\n\t\t\t\tmethod\n\t\t\t});\n\t\t});\n\t}\n\t/**\n\t* The clipboard paste pipeline.\n\t*/\n\t_setupPasteDrop() {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst view = editor.editing.view;\n\t\tconst viewDocument = view.document;\n\t\tconst clipboardMarkersUtils = this.editor.plugins.get(\"ClipboardMarkersUtils\");\n\t\tthis.listenTo(viewDocument, \"clipboardInput\", (evt, data) => {\n\t\t\tif (data.method == \"paste\" && !editor.model.canEditAt(editor.model.document.selection)) evt.stop();\n\t\t}, { priority: \"highest\" });\n\t\tthis.listenTo(viewDocument, \"clipboardInput\", (evt, data) => {\n\t\t\tconst dataTransfer = data.dataTransfer;\n\t\t\tconst eventInfo = new EventInfo(this, \"inputTransformation\");\n\t\t\tconst sourceEditorId = dataTransfer.getData(\"application/ckeditor5-editor-id\") || null;\n\t\t\tconst content = typeof data.content == \"string\" ? this.editor.data.htmlProcessor.toView(normalizeClipboardData(data.content)) : data.content;\n\t\t\tthis.fire(eventInfo, {\n\t\t\t\tcontent,\n\t\t\t\tdataTransfer,\n\t\t\t\tsourceEditorId,\n\t\t\t\textraContent: data.extraContent,\n\t\t\t\ttargetRanges: data.targetRanges,\n\t\t\t\tmethod: data.method\n\t\t\t});\n\t\t\tif (eventInfo.stop.called) evt.stop();\n\t\t\tview.scrollToTheSelection();\n\t\t}, { priority: \"low\" });\n\t\tthis.listenTo(this, \"inputTransformation\", (evt, data) => {\n\t\t\tif (data.content.isEmpty) return;\n\t\t\tconst modelFragment = this.editor.data.toModel(data.content, \"$clipboardHolder\");\n\t\t\tif (modelFragment.childCount == 0) return;\n\t\t\tevt.stop();\n\t\t\tmodel.change(() => {\n\t\t\t\tthis.fire(\"contentInsertion\", {\n\t\t\t\t\tcontent: modelFragment,\n\t\t\t\t\tmethod: data.method,\n\t\t\t\t\tsourceEditorId: data.sourceEditorId,\n\t\t\t\t\tdataTransfer: data.dataTransfer,\n\t\t\t\t\ttargetRanges: data.targetRanges\n\t\t\t\t});\n\t\t\t});\n\t\t}, { priority: \"low\" });\n\t\tthis.listenTo(this, \"contentInsertion\", (evt, data) => {\n\t\t\tdata.resultRange = clipboardMarkersUtils._pasteFragmentWithMarkers(data.content);\n\t\t}, { priority: \"low\" });\n\t}\n\t/**\n\t* The clipboard copy/cut pipeline.\n\t*/\n\t_setupCopyCut() {\n\t\tconst editor = this.editor;\n\t\tconst modelDocument = editor.model.document;\n\t\tconst viewDocument = editor.editing.view.document;\n\t\tconst onCopyCut = (evt, data) => {\n\t\t\tconst dataTransfer = data.dataTransfer;\n\t\t\tdata.preventDefault();\n\t\t\tthis._fireOutputTransformationEvent(dataTransfer, modelDocument.selection, evt.name);\n\t\t};\n\t\tthis.listenTo(viewDocument, \"copy\", onCopyCut, { priority: \"low\" });\n\t\tthis.listenTo(viewDocument, \"cut\", (evt, data) => {\n\t\t\tif (!editor.model.canEditAt(editor.model.document.selection)) data.preventDefault();\n\t\t\telse onCopyCut(evt, data);\n\t\t}, { priority: \"low\" });\n\t\tthis.listenTo(this, \"outputTransformation\", (evt, data) => {\n\t\t\tconst content = editor.data.toView(data.content, { isClipboardPipeline: true });\n\t\t\tviewDocument.fire(\"clipboardOutput\", {\n\t\t\t\tdataTransfer: data.dataTransfer,\n\t\t\t\tcontent,\n\t\t\t\tmethod: data.method\n\t\t\t});\n\t\t}, { priority: \"low\" });\n\t\tthis.listenTo(viewDocument, \"clipboardOutput\", (evt, data) => {\n\t\t\tif (!data.content.isEmpty) {\n\t\t\t\tdata.dataTransfer.setData(\"text/html\", this.editor.data.htmlProcessor.toData(data.content));\n\t\t\t\tdata.dataTransfer.setData(\"text/plain\", viewToPlainText(editor.data.htmlProcessor.domConverter, data.content));\n\t\t\t\tdata.dataTransfer.setData(\"application/ckeditor5-editor-id\", this.editor.id);\n\t\t\t}\n\t\t\tif (data.method == \"cut\") editor.model.deleteContent(modelDocument.selection);\n\t\t}, { priority: \"low\" });\n\t}\n};\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/lineview\n*/\n/* istanbul ignore file -- @preserve */\nconst toPx = /* #__PURE__ */ toUnit(\"px\");\n/**\n* The horizontal drop target line view.\n*\n* @internal\n*/\nvar LineView = class extends View {\n\t/**\n\t* @inheritDoc\n\t*/\n\tconstructor() {\n\t\tsuper();\n\t\tconst bind = this.bindTemplate;\n\t\tthis.set({\n\t\t\tisVisible: false,\n\t\t\tleft: null,\n\t\t\ttop: null,\n\t\t\twidth: null\n\t\t});\n\t\tthis.setTemplate({\n\t\t\ttag: \"div\",\n\t\t\tattributes: {\n\t\t\t\tclass: [\n\t\t\t\t\t\"ck\",\n\t\t\t\t\t\"ck-clipboard-drop-target-line\",\n\t\t\t\t\tbind.if(\"isVisible\", \"ck-hidden\", (value) => !value)\n\t\t\t\t],\n\t\t\t\tstyle: {\n\t\t\t\t\tleft: bind.to(\"left\", (left) => toPx(left)),\n\t\t\t\t\ttop: bind.to(\"top\", (top) => toPx(top)),\n\t\t\t\t\twidth: bind.to(\"width\", (width) => toPx(width))\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/dragdroptarget\n*/\n/**\n* Part of the Drag and Drop handling. Responsible for finding and displaying the drop target.\n*\n* @internal\n*/\nvar DragDropTarget = class extends Plugin {\n\t/**\n\t* A delayed callback removing the drop marker.\n\t*\n\t* @internal\n\t*/\n\tremoveDropMarkerDelayed = delay(() => this.removeDropMarker(), 40);\n\t/**\n\t* A throttled callback updating the drop marker.\n\t*/\n\t_updateDropMarkerThrottled = throttle((targetRange) => this._updateDropMarker(targetRange), 40);\n\t/**\n\t* A throttled callback reconverting the drop parker.\n\t*/\n\t_reconvertMarkerThrottled = throttle(() => {\n\t\tif (this.editor.model.markers.has(\"drop-target\")) this.editor.editing.reconvertMarker(\"drop-target\");\n\t}, 0);\n\t/**\n\t* The horizontal drop target line view.\n\t*/\n\t_dropTargetLineView = new LineView();\n\t/**\n\t* DOM Emitter.\n\t*/\n\t_domEmitter = new (DomEmitterMixin())();\n\t/**\n\t* Map of document scrollable elements.\n\t*/\n\t_scrollables = /* @__PURE__ */ new Map();\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"DragDropTarget\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tinit() {\n\t\tthis._setupDropMarker();\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tdestroy() {\n\t\tthis._domEmitter.stopListening();\n\t\tfor (const { resizeObserver } of this._scrollables.values()) resizeObserver.destroy();\n\t\tthis._updateDropMarkerThrottled.cancel();\n\t\tthis.removeDropMarkerDelayed.cancel();\n\t\tthis._reconvertMarkerThrottled.cancel();\n\t\treturn super.destroy();\n\t}\n\t/**\n\t* Finds the drop target range and updates the drop marker.\n\t*\n\t* @return The updated drop target range or null if no valid range was found.\n\t* @internal\n\t*/\n\tupdateDropMarker(targetViewElement, targetViewRanges, clientX, clientY, blockMode, draggedRange) {\n\t\tthis.removeDropMarkerDelayed.cancel();\n\t\tconst targetRange = findDropTargetRange(this.editor, targetViewElement, targetViewRanges, clientX, clientY, blockMode, draggedRange);\n\t\t/* istanbul ignore next -- @preserve */\n\t\tif (!targetRange) return null;\n\t\tif (draggedRange && draggedRange.containsRange(targetRange)) {\n\t\t\tthis.removeDropMarker();\n\t\t\treturn null;\n\t\t}\n\t\tif (targetRange && !this.editor.model.canEditAt(targetRange)) {\n\t\t\tthis.removeDropMarker();\n\t\t\treturn null;\n\t\t}\n\t\tthis._updateDropMarkerThrottled(targetRange);\n\t\treturn targetRange;\n\t}\n\t/**\n\t* Finds the final drop target range.\n\t*\n\t* @internal\n\t*/\n\tgetFinalDropRange(targetViewElement, targetViewRanges, clientX, clientY, blockMode, draggedRange) {\n\t\tconst targetRange = findDropTargetRange(this.editor, targetViewElement, targetViewRanges, clientX, clientY, blockMode, draggedRange);\n\t\tthis.removeDropMarker();\n\t\treturn targetRange;\n\t}\n\t/**\n\t* Removes the drop target marker.\n\t*\n\t* @internal\n\t*/\n\tremoveDropMarker() {\n\t\tconst model = this.editor.model;\n\t\tthis.removeDropMarkerDelayed.cancel();\n\t\tthis._updateDropMarkerThrottled.cancel();\n\t\tthis._dropTargetLineView.isVisible = false;\n\t\tif (model.markers.has(\"drop-target\")) model.change((writer) => {\n\t\t\twriter.removeMarker(\"drop-target\");\n\t\t});\n\t}\n\t/**\n\t* Creates downcast conversion for the drop target marker.\n\t*/\n\t_setupDropMarker() {\n\t\tconst editor = this.editor;\n\t\teditor.ui.view.body.add(this._dropTargetLineView);\n\t\teditor.conversion.for(\"editingDowncast\").markerToHighlight({\n\t\t\tmodel: \"drop-target\",\n\t\t\tview: { classes: [\"ck-clipboard-drop-target-range\"] }\n\t\t});\n\t\teditor.conversion.for(\"editingDowncast\").markerToElement({\n\t\t\tmodel: \"drop-target\",\n\t\t\tview: (data, { writer }) => {\n\t\t\t\tif (editor.model.schema.checkChild(data.markerRange.start, \"$text\")) {\n\t\t\t\t\tthis._dropTargetLineView.isVisible = false;\n\t\t\t\t\treturn this._createDropTargetPosition(writer);\n\t\t\t\t} else if (data.markerRange.isCollapsed) this._updateDropTargetLine(data.markerRange);\n\t\t\t\telse this._dropTargetLineView.isVisible = false;\n\t\t\t}\n\t\t});\n\t}\n\t/**\n\t* Updates the drop target marker to the provided range.\n\t*\n\t* @param targetRange The range to set the marker to.\n\t*/\n\t_updateDropMarker(targetRange) {\n\t\tconst editor = this.editor;\n\t\tconst markers = editor.model.markers;\n\t\teditor.model.change((writer) => {\n\t\t\tif (markers.has(\"drop-target\")) {\n\t\t\t\tif (!markers.get(\"drop-target\").getRange().isEqual(targetRange)) writer.updateMarker(\"drop-target\", { range: targetRange });\n\t\t\t} else writer.addMarker(\"drop-target\", {\n\t\t\t\trange: targetRange,\n\t\t\t\tusingOperation: false,\n\t\t\t\taffectsData: false\n\t\t\t});\n\t\t});\n\t}\n\t/**\n\t* Creates the UI element for vertical (in-line) drop target.\n\t*/\n\t_createDropTargetPosition(writer) {\n\t\treturn writer.createUIElement(\"span\", { class: \"ck ck-clipboard-drop-target-position\" }, function(domDocument) {\n\t\t\tconst domElement = this.toDomElement(domDocument);\n\t\t\tdomElement.append(\"⁠\", domDocument.createElement(\"span\"), \"⁠\");\n\t\t\treturn domElement;\n\t\t});\n\t}\n\t/**\n\t* Updates the horizontal drop target line.\n\t*/\n\t_updateDropTargetLine(range) {\n\t\tconst editing = this.editor.editing;\n\t\tconst nodeBefore = range.start.nodeBefore;\n\t\tconst nodeAfter = range.start.nodeAfter;\n\t\tconst nodeParent = range.start.parent;\n\t\tconst viewElementBefore = nodeBefore ? editing.mapper.toViewElement(nodeBefore) : null;\n\t\tconst domElementBefore = viewElementBefore ? editing.view.domConverter.mapViewToDom(viewElementBefore) : null;\n\t\tconst viewElementAfter = nodeAfter ? editing.mapper.toViewElement(nodeAfter) : null;\n\t\tconst domElementAfter = viewElementAfter ? editing.view.domConverter.mapViewToDom(viewElementAfter) : null;\n\t\tconst viewElementParent = editing.mapper.toViewElement(nodeParent);\n\t\tif (!viewElementParent) return;\n\t\tconst domElementParent = editing.view.domConverter.mapViewToDom(viewElementParent);\n\t\tconst domScrollableRect = this._getScrollableRect(viewElementParent);\n\t\tconst { scrollX, scrollY } = global.window;\n\t\tconst rectBefore = domElementBefore ? new Rect(domElementBefore) : null;\n\t\tconst rectAfter = domElementAfter ? new Rect(domElementAfter) : null;\n\t\tconst rectParent = new Rect(domElementParent).excludeScrollbarsAndBorders();\n\t\tconst above = rectBefore ? rectBefore.bottom : rectParent.top;\n\t\tconst below = rectAfter ? rectAfter.top : rectParent.bottom;\n\t\tconst parentStyle = global.window.getComputedStyle(domElementParent);\n\t\tconst top = above <= below ? (above + below) / 2 : below;\n\t\tif (domScrollableRect.top < top && top < domScrollableRect.bottom) {\n\t\t\tconst left = rectParent.left + parseFloat(parentStyle.paddingLeft);\n\t\t\tconst right = rectParent.right - parseFloat(parentStyle.paddingRight);\n\t\t\tconst leftClamped = Math.max(left + scrollX, domScrollableRect.left);\n\t\t\tconst rightClamped = Math.min(right + scrollX, domScrollableRect.right);\n\t\t\tthis._dropTargetLineView.set({\n\t\t\t\tisVisible: true,\n\t\t\t\tleft: leftClamped,\n\t\t\t\ttop: top + scrollY,\n\t\t\t\twidth: rightClamped - leftClamped\n\t\t\t});\n\t\t} else this._dropTargetLineView.isVisible = false;\n\t}\n\t/**\n\t* Finds the closest scrollable element rect for the given view element.\n\t*/\n\t_getScrollableRect(viewElement) {\n\t\tconst rootName = viewElement.root.rootName;\n\t\tlet domScrollable;\n\t\tif (this._scrollables.has(rootName)) domScrollable = this._scrollables.get(rootName).domElement;\n\t\telse {\n\t\t\tdomScrollable = findScrollableElement(this.editor.editing.view.domConverter.mapViewToDom(viewElement));\n\t\t\tthis._domEmitter.listenTo(domScrollable, \"scroll\", this._reconvertMarkerThrottled, { usePassive: true });\n\t\t\tconst resizeObserver = new ResizeObserver(domScrollable, this._reconvertMarkerThrottled);\n\t\t\tthis._scrollables.set(rootName, {\n\t\t\t\tdomElement: domScrollable,\n\t\t\t\tresizeObserver\n\t\t\t});\n\t\t}\n\t\treturn new Rect(domScrollable).excludeScrollbarsAndBorders();\n\t}\n};\n/**\n* Returns fixed selection range for given position and target element.\n*/\nfunction findDropTargetRange(editor, targetViewElement, targetViewRanges, clientX, clientY, blockMode, draggedRange) {\n\tconst model = editor.model;\n\tconst mapper = editor.editing.mapper;\n\tlet modelElement = getClosestMappedModelElement(editor, targetViewElement);\n\twhile (modelElement) {\n\t\tif (!blockMode) {\n\t\t\tif (model.schema.checkChild(modelElement, \"$text\")) {\n\t\t\t\tif (targetViewRanges) {\n\t\t\t\t\tconst targetViewPosition = targetViewRanges[0].start;\n\t\t\t\t\tconst targetModelPosition = mapper.toModelPosition(targetViewPosition);\n\t\t\t\t\tif (!draggedRange || Array.from(draggedRange.getItems({ shallow: true })).some((item) => model.schema.checkChild(targetModelPosition, item))) {\n\t\t\t\t\t\tif (model.schema.checkChild(targetModelPosition, \"$text\")) return model.createRange(targetModelPosition);\n\t\t\t\t\t\telse if (targetViewPosition) return findDropTargetRangeForElement(editor, getClosestMappedModelElement(editor, targetViewPosition.parent), clientX, clientY);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (model.schema.isInline(modelElement)) return findDropTargetRangeForElement(editor, modelElement, clientX, clientY);\n\t\t}\n\t\tif (model.schema.isBlock(modelElement)) return findDropTargetRangeForElement(editor, modelElement, clientX, clientY);\n\t\telse if (model.schema.checkChild(modelElement, \"$block\")) {\n\t\t\tconst childNodes = Array.from(modelElement.getChildren()).filter((node) => node.is(\"element\") && !shouldIgnoreElement(editor, node));\n\t\t\tlet startIndex = 0;\n\t\t\tlet endIndex = childNodes.length;\n\t\t\tif (endIndex == 0) return model.createRange(model.createPositionAt(modelElement, \"end\"));\n\t\t\twhile (startIndex < endIndex - 1) {\n\t\t\t\tconst middleIndex = Math.floor((startIndex + endIndex) / 2);\n\t\t\t\tif (findElementSide(editor, childNodes[middleIndex], clientX, clientY) == \"before\") endIndex = middleIndex;\n\t\t\t\telse startIndex = middleIndex;\n\t\t\t}\n\t\t\treturn findDropTargetRangeForElement(editor, childNodes[startIndex], clientX, clientY);\n\t\t}\n\t\tmodelElement = modelElement.parent;\n\t}\n\treturn null;\n}\n/**\n* Returns true for elements which should be ignored.\n*/\nfunction shouldIgnoreElement(editor, modelElement) {\n\tconst mapper = editor.editing.mapper;\n\tconst domConverter = editor.editing.view.domConverter;\n\tconst viewElement = mapper.toViewElement(modelElement);\n\tif (!viewElement) return true;\n\tconst domElement = domConverter.mapViewToDom(viewElement);\n\treturn global.window.getComputedStyle(domElement).float != \"none\";\n}\n/**\n* Returns target range relative to the given element.\n*/\nfunction findDropTargetRangeForElement(editor, modelElement, clientX, clientY) {\n\tconst model = editor.model;\n\treturn model.createRange(model.createPositionAt(modelElement, findElementSide(editor, modelElement, clientX, clientY)));\n}\n/**\n* Resolves whether drop marker should be before or after the given element.\n*/\nfunction findElementSide(editor, modelElement, clientX, clientY) {\n\tconst mapper = editor.editing.mapper;\n\tconst domConverter = editor.editing.view.domConverter;\n\tconst viewElement = mapper.toViewElement(modelElement);\n\tconst rect = new Rect(domConverter.mapViewToDom(viewElement));\n\tif (editor.model.schema.isInline(modelElement)) return clientX < (rect.left + rect.right) / 2 ? \"before\" : \"after\";\n\telse return clientY < (rect.top + rect.bottom) / 2 ? \"before\" : \"after\";\n}\n/**\n* Returns the closest model element for the specified view element.\n*/\nfunction getClosestMappedModelElement(editor, element) {\n\tconst mapper = editor.editing.mapper;\n\tconst view = editor.editing.view;\n\tconst targetModelElement = mapper.toModelElement(element);\n\tif (targetModelElement) return targetModelElement;\n\tconst viewPosition = view.createPositionBefore(element);\n\tconst viewElement = mapper.findMappedViewAncestor(viewPosition);\n\treturn mapper.toModelElement(viewElement);\n}\n/**\n* Returns the closest scrollable ancestor DOM element.\n*\n* It is assumed that `domNode` is attached to the document.\n*/\nfunction findScrollableElement(domNode) {\n\tlet domElement = domNode;\n\tdo {\n\t\tdomElement = domElement.parentElement;\n\t\tconst overflow = global.window.getComputedStyle(domElement).overflowY;\n\t\tif (overflow == \"auto\" || overflow == \"scroll\") break;\n\t} while (domElement.tagName != \"BODY\");\n\treturn domElement;\n}\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/dragdropblocktoolbar\n*/\n/**\n* Integration of a block Drag and Drop support with the block toolbar.\n*\n* @internal\n*/\nvar DragDropBlockToolbar = class extends Plugin {\n\t/**\n\t* Whether current dragging is started by block toolbar button dragging.\n\t*/\n\t_isBlockDragging = false;\n\t/**\n\t* DOM Emitter.\n\t*/\n\t_domEmitter = new (DomEmitterMixin())();\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"DragDropBlockToolbar\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tinit() {\n\t\tconst editor = this.editor;\n\t\tthis.listenTo(editor, \"change:isReadOnly\", (evt, name, isReadOnly) => {\n\t\t\tif (isReadOnly) {\n\t\t\t\tthis.forceDisabled(\"readOnlyMode\");\n\t\t\t\tthis._isBlockDragging = false;\n\t\t\t} else this.clearForceDisabled(\"readOnlyMode\");\n\t\t});\n\t\tif (env.isAndroid) this.forceDisabled(\"noAndroidSupport\");\n\t\tif (editor.plugins.has(\"BlockToolbar\")) {\n\t\t\tconst element = editor.plugins.get(\"BlockToolbar\").buttonView.element;\n\t\t\tthis._domEmitter.listenTo(element, \"dragstart\", (evt, data) => this._handleBlockDragStart(data));\n\t\t\tthis._domEmitter.listenTo(global.document, \"dragover\", (evt, data) => this._handleBlockDragging(data));\n\t\t\tthis._domEmitter.listenTo(global.document, \"drop\", (evt, data) => this._handleBlockDragging(data));\n\t\t\tthis._domEmitter.listenTo(global.document, \"dragend\", () => this._handleBlockDragEnd(), { useCapture: true });\n\t\t\tif (this.isEnabled) element.setAttribute(\"draggable\", \"true\");\n\t\t\tthis.on(\"change:isEnabled\", (evt, name, isEnabled) => {\n\t\t\t\telement.setAttribute(\"draggable\", isEnabled ? \"true\" : \"false\");\n\t\t\t});\n\t\t}\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tdestroy() {\n\t\tthis._domEmitter.stopListening();\n\t\treturn super.destroy();\n\t}\n\t/**\n\t* The `dragstart` event handler.\n\t*/\n\t_handleBlockDragStart(domEvent) {\n\t\tif (!this.isEnabled) return;\n\t\tconst model = this.editor.model;\n\t\tconst selection = model.document.selection;\n\t\tconst view = this.editor.editing.view;\n\t\tconst blocks = Array.from(selection.getSelectedBlocks());\n\t\tconst draggedRange = model.createRange(model.createPositionBefore(blocks[0]), model.createPositionAfter(blocks[blocks.length - 1]));\n\t\tmodel.change((writer) => writer.setSelection(draggedRange));\n\t\tthis._isBlockDragging = true;\n\t\tview.focus();\n\t\tview.getObserver(ClipboardObserver).onDomEvent(domEvent);\n\t}\n\t/**\n\t* The `dragover` and `drop` event handler.\n\t*/\n\t_handleBlockDragging(domEvent) {\n\t\tif (!this.isEnabled || !this._isBlockDragging) return;\n\t\tconst clientX = domEvent.clientX + (this.editor.locale.contentLanguageDirection == \"ltr\" ? 100 : -100);\n\t\tconst clientY = domEvent.clientY;\n\t\tconst target = document.elementFromPoint(clientX, clientY);\n\t\tconst view = this.editor.editing.view;\n\t\tif (!target || !target.closest(\".ck-editor__editable\")) return;\n\t\tview.getObserver(ClipboardObserver).onDomEvent({\n\t\t\t...domEvent,\n\t\t\ttype: domEvent.type,\n\t\t\tdataTransfer: domEvent.dataTransfer,\n\t\t\ttarget,\n\t\t\tclientX,\n\t\t\tclientY,\n\t\t\tpreventDefault: () => domEvent.preventDefault(),\n\t\t\tstopPropagation: () => domEvent.stopPropagation()\n\t\t});\n\t}\n\t/**\n\t* The `dragend` event handler.\n\t*/\n\t_handleBlockDragEnd() {\n\t\tthis._isBlockDragging = false;\n\t}\n};\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/dragdrop\n*/\n/**\n* The drag and drop feature. It works on top of the {@link module:clipboard/clipboardpipeline~ClipboardPipeline}.\n*\n* Read more about the clipboard integration in the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n*\n* @internal\n*/\nvar DragDrop = class extends Plugin {\n\t/**\n\t* The live range over the original content that is being dragged.\n\t*/\n\t_draggedRange;\n\t/**\n\t* The UID of current dragging that is used to verify if the drop started in the same editor as the drag start.\n\t*\n\t* **Note**: This is a workaround for broken 'dragend' events (they are not fired if the source text node got removed).\n\t*/\n\t_draggingUid;\n\t/**\n\t* The reference to the model element that currently has a `draggable` attribute set (it is set while dragging).\n\t*/\n\t_draggableElement;\n\t/**\n\t* A delayed callback removing draggable attributes.\n\t*/\n\t_clearDraggableAttributesDelayed = delay(() => this._clearDraggableAttributes(), 40);\n\t/**\n\t* Whether the dragged content can be dropped only in block context.\n\t*/\n\t_blockMode = false;\n\t/**\n\t* DOM Emitter.\n\t*/\n\t_domEmitter = new (DomEmitterMixin())();\n\t/**\n\t* The DOM element used to generate dragged preview image.\n\t*/\n\t_previewContainer;\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"DragDrop\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get requires() {\n\t\treturn [\n\t\t\tClipboardPipeline,\n\t\t\tWidget,\n\t\t\tDragDropTarget,\n\t\t\tDragDropBlockToolbar\n\t\t];\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tinit() {\n\t\tconst editor = this.editor;\n\t\tconst view = editor.editing.view;\n\t\tthis._draggedRange = null;\n\t\tthis._draggingUid = \"\";\n\t\tthis._draggableElement = null;\n\t\tview.addObserver(ClipboardObserver);\n\t\tview.addObserver(PointerObserver);\n\t\tthis._setupDragging();\n\t\tthis._setupContentInsertionIntegration();\n\t\tthis._setupClipboardInputIntegration();\n\t\tthis._setupDraggableAttributeHandling();\n\t\tthis.listenTo(editor, \"change:isReadOnly\", (evt, name, isReadOnly) => {\n\t\t\tif (isReadOnly) this.forceDisabled(\"readOnlyMode\");\n\t\t\telse this.clearForceDisabled(\"readOnlyMode\");\n\t\t});\n\t\tthis.on(\"change:isEnabled\", (evt, name, isEnabled) => {\n\t\t\tif (!isEnabled) this._finalizeDragging(false);\n\t\t});\n\t\tif (env.isAndroid) this.forceDisabled(\"noAndroidSupport\");\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tdestroy() {\n\t\tif (this._draggedRange) {\n\t\t\tthis._draggedRange.detach();\n\t\t\tthis._draggedRange = null;\n\t\t}\n\t\tif (this._previewContainer) this._previewContainer.remove();\n\t\tthis._domEmitter.stopListening();\n\t\tthis._clearDraggableAttributesDelayed.cancel();\n\t\treturn super.destroy();\n\t}\n\t/**\n\t* Drag and drop events handling.\n\t*/\n\t_setupDragging() {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst view = editor.editing.view;\n\t\tconst viewDocument = view.document;\n\t\tconst dragDropTarget = editor.plugins.get(DragDropTarget);\n\t\tthis.listenTo(viewDocument, \"dragstart\", (evt, data) => {\n\t\t\tif (data.target?.is(\"editableElement\")) {\n\t\t\t\tdata.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._prepareDraggedRange(data.target);\n\t\t\tif (!this._draggedRange) {\n\t\t\t\tdata.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._draggingUid = uid();\n\t\t\tconst canEditAtDraggedRange = this.isEnabled && editor.model.canEditAt(this._draggedRange);\n\t\t\tdata.dataTransfer.effectAllowed = canEditAtDraggedRange ? \"copyMove\" : \"copy\";\n\t\t\tdata.dataTransfer.setData(\"application/ckeditor5-dragging-uid\", this._draggingUid);\n\t\t\tconst draggedSelection = model.createSelection(this._draggedRange.toRange());\n\t\t\tthis.editor.plugins.get(\"ClipboardPipeline\")._fireOutputTransformationEvent(data.dataTransfer, draggedSelection, \"dragstart\");\n\t\t\tconst { dataTransfer, domTarget, domEvent } = data;\n\t\t\tconst { clientX } = domEvent;\n\t\t\tthis._updatePreview({\n\t\t\t\tdataTransfer,\n\t\t\t\tdomTarget,\n\t\t\t\tclientX\n\t\t\t});\n\t\t\tdata.stopPropagation();\n\t\t\tif (!canEditAtDraggedRange) {\n\t\t\t\tthis._draggedRange.detach();\n\t\t\t\tthis._draggedRange = null;\n\t\t\t\tthis._draggingUid = \"\";\n\t\t\t}\n\t\t}, { priority: \"low\" });\n\t\tthis.listenTo(viewDocument, \"dragend\", (evt, data) => {\n\t\t\tthis._finalizeDragging(!data.dataTransfer.isCanceled && data.dataTransfer.dropEffect == \"move\");\n\t\t}, { priority: \"low\" });\n\t\tthis._domEmitter.listenTo(global.document, \"dragend\", () => {\n\t\t\tthis._blockMode = false;\n\t\t}, { useCapture: true });\n\t\tthis.listenTo(viewDocument, \"dragenter\", () => {\n\t\t\tif (!this.isEnabled) return;\n\t\t\tview.focus();\n\t\t});\n\t\tthis.listenTo(viewDocument, \"dragleave\", () => {\n\t\t\tdragDropTarget.removeDropMarkerDelayed();\n\t\t});\n\t\tthis.listenTo(viewDocument, \"dragging\", (evt, data) => {\n\t\t\tif (!this.isEnabled) {\n\t\t\t\tdata.dataTransfer.dropEffect = \"none\";\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { clientX, clientY } = data.domEvent;\n\t\t\tif (!dragDropTarget.updateDropMarker(data.target, data.targetRanges, clientX, clientY, this._blockMode, this._draggedRange)) {\n\t\t\t\tdata.dataTransfer.dropEffect = \"none\";\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!this._draggedRange) data.dataTransfer.dropEffect = \"copy\";\n\t\t\tif (!env.isGecko) {\n\t\t\t\tif (data.dataTransfer.effectAllowed == \"copy\") data.dataTransfer.dropEffect = \"copy\";\n\t\t\t\telse if ([\"all\", \"copyMove\"].includes(data.dataTransfer.effectAllowed)) data.dataTransfer.dropEffect = \"move\";\n\t\t\t}\n\t\t\tevt.stop();\n\t\t}, { priority: \"low\" });\n\t}\n\t/**\n\t* Integration with the `clipboardInput` event.\n\t*/\n\t_setupClipboardInputIntegration() {\n\t\tconst editor = this.editor;\n\t\tconst viewDocument = editor.editing.view.document;\n\t\tconst dragDropTarget = editor.plugins.get(DragDropTarget);\n\t\tthis.listenTo(viewDocument, \"clipboardInput\", (evt, data) => {\n\t\t\tif (data.method != \"drop\") return;\n\t\t\tconst { clientX, clientY } = data.domEvent;\n\t\t\tconst targetRange = dragDropTarget.getFinalDropRange(data.target, data.targetRanges, clientX, clientY, this._blockMode, this._draggedRange);\n\t\t\tif (!targetRange) {\n\t\t\t\tthis._finalizeDragging(false);\n\t\t\t\tevt.stop();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this._draggedRange && this._draggingUid != data.dataTransfer.getData(\"application/ckeditor5-dragging-uid\")) {\n\t\t\t\tthis._draggedRange.detach();\n\t\t\t\tthis._draggedRange = null;\n\t\t\t\tthis._draggingUid = \"\";\n\t\t\t}\n\t\t\tif (getFinalDropEffect(data.dataTransfer) == \"move\" && this._draggedRange && this._draggedRange.containsRange(targetRange, true)) {\n\t\t\t\tthis._finalizeDragging(false);\n\t\t\t\tevt.stop();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdata.targetRanges = [editor.editing.mapper.toViewRange(targetRange)];\n\t\t}, { priority: \"high\" });\n\t}\n\t/**\n\t* Integration with the `contentInsertion` event of the clipboard pipeline.\n\t*/\n\t_setupContentInsertionIntegration() {\n\t\tconst clipboardPipeline = this.editor.plugins.get(ClipboardPipeline);\n\t\tclipboardPipeline.on(\"contentInsertion\", (evt, data) => {\n\t\t\tif (!this.isEnabled || data.method !== \"drop\") return;\n\t\t\tconst ranges = data.targetRanges.map((viewRange) => this.editor.editing.mapper.toModelRange(viewRange));\n\t\t\tthis.editor.model.change((writer) => writer.setSelection(ranges));\n\t\t}, { priority: \"high\" });\n\t\tclipboardPipeline.on(\"contentInsertion\", (evt, data) => {\n\t\t\tif (!this.isEnabled || data.method !== \"drop\") return;\n\t\t\tconst isMove = getFinalDropEffect(data.dataTransfer) == \"move\";\n\t\t\tconst isSuccess = !data.resultRange || !data.resultRange.isCollapsed;\n\t\t\tthis._finalizeDragging(isSuccess && isMove);\n\t\t}, { priority: \"lowest\" });\n\t}\n\t/**\n\t* Adds listeners that add the `draggable` attribute to the elements while the mouse button is down so the dragging could start.\n\t*/\n\t_setupDraggableAttributeHandling() {\n\t\tconst editor = this.editor;\n\t\tconst view = editor.editing.view;\n\t\tconst viewDocument = view.document;\n\t\tthis.listenTo(viewDocument, \"pointerdown\", (evt, data) => {\n\t\t\tif (env.isAndroid || !data) return;\n\t\t\tthis._clearDraggableAttributesDelayed.cancel();\n\t\t\tlet draggableElement = findDraggableWidget(data.target);\n\t\t\tif (env.isBlink && !editor.isReadOnly && !draggableElement && !viewDocument.selection.isCollapsed) {\n\t\t\t\tconst selectedElement = viewDocument.selection.getSelectedElement();\n\t\t\t\tif (!selectedElement || !isWidget(selectedElement)) draggableElement = viewDocument.selection.editableElement;\n\t\t\t}\n\t\t\tif (draggableElement) {\n\t\t\t\tview.change((writer) => {\n\t\t\t\t\twriter.setAttribute(\"draggable\", \"true\", draggableElement);\n\t\t\t\t});\n\t\t\t\tthis._draggableElement = editor.editing.mapper.toModelElement(draggableElement);\n\t\t\t}\n\t\t});\n\t\tthis.listenTo(viewDocument, \"pointerup\", () => {\n\t\t\tif (!env.isAndroid) this._clearDraggableAttributesDelayed();\n\t\t});\n\t}\n\t/**\n\t* Removes the `draggable` attribute from the element that was used for dragging.\n\t*/\n\t_clearDraggableAttributes() {\n\t\tconst editing = this.editor.editing;\n\t\tediting.view.change((writer) => {\n\t\t\tif (this._draggableElement && this._draggableElement.root.rootName != \"$graveyard\") writer.removeAttribute(\"draggable\", editing.mapper.toViewElement(this._draggableElement));\n\t\t\tthis._draggableElement = null;\n\t\t});\n\t}\n\t/**\n\t* Deletes the dragged content from its original range and clears the dragging state.\n\t*\n\t* @param moved Whether the move succeeded.\n\t*/\n\t_finalizeDragging(moved) {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\teditor.plugins.get(DragDropTarget).removeDropMarker();\n\t\tthis._clearDraggableAttributes();\n\t\tif (editor.plugins.has(\"WidgetToolbarRepository\")) editor.plugins.get(\"WidgetToolbarRepository\").clearForceDisabled(\"dragDrop\");\n\t\tthis._draggingUid = \"\";\n\t\tif (this._previewContainer) {\n\t\t\tthis._previewContainer.remove();\n\t\t\tthis._previewContainer = void 0;\n\t\t}\n\t\tif (!this._draggedRange) return;\n\t\tif (moved && this.isEnabled) model.change((writer) => {\n\t\t\tconst selection = model.createSelection(this._draggedRange);\n\t\t\tmodel.deleteContent(selection, { doNotAutoparagraph: true });\n\t\t\tconst selectionParent = selection.getFirstPosition().parent;\n\t\t\tif (selectionParent.isEmpty && !model.schema.checkChild(selectionParent, \"$text\") && model.schema.checkChild(selectionParent, \"paragraph\")) writer.insertElement(\"paragraph\", selectionParent, 0);\n\t\t});\n\t\tthis._draggedRange.detach();\n\t\tthis._draggedRange = null;\n\t}\n\t/**\n\t* Sets the dragged source range based on event target and document selection.\n\t*/\n\t_prepareDraggedRange(target) {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst selection = model.document.selection;\n\t\tconst draggableWidget = target ? findDraggableWidget(target) : null;\n\t\tif (draggableWidget) {\n\t\t\tconst modelElement = editor.editing.mapper.toModelElement(draggableWidget);\n\t\t\tthis._draggedRange = ModelLiveRange.fromRange(model.createRangeOn(modelElement));\n\t\t\tthis._blockMode = model.schema.isBlock(modelElement);\n\t\t\tif (editor.plugins.has(\"WidgetToolbarRepository\")) editor.plugins.get(\"WidgetToolbarRepository\").forceDisabled(\"dragDrop\");\n\t\t\treturn;\n\t\t}\n\t\tif (selection.isCollapsed && !selection.getFirstPosition().parent.isEmpty) return;\n\t\tconst blocks = Array.from(selection.getSelectedBlocks());\n\t\tconst draggedRange = selection.getFirstRange();\n\t\tif (blocks.length == 0) {\n\t\t\tthis._draggedRange = ModelLiveRange.fromRange(draggedRange);\n\t\t\treturn;\n\t\t}\n\t\tconst blockRange = getRangeIncludingFullySelectedParents(model, blocks);\n\t\tif (blocks.length > 1) {\n\t\t\tthis._draggedRange = ModelLiveRange.fromRange(blockRange);\n\t\t\tthis._blockMode = true;\n\t\t} else if (blocks.length == 1) {\n\t\t\tconst touchesBlockEdges = draggedRange.start.isTouching(blockRange.start) && draggedRange.end.isTouching(blockRange.end);\n\t\t\tthis._draggedRange = ModelLiveRange.fromRange(touchesBlockEdges ? blockRange : draggedRange);\n\t\t\tthis._blockMode = touchesBlockEdges;\n\t\t}\n\t\tmodel.change((writer) => writer.setSelection(this._draggedRange.toRange()));\n\t}\n\t/**\n\t* Updates the dragged preview image.\n\t*/\n\t_updatePreview({ dataTransfer, domTarget, clientX }) {\n\t\tconst view = this.editor.editing.view;\n\t\tconst editable = view.document.selection.editableElement;\n\t\tconst domEditable = view.domConverter.mapViewToDom(editable);\n\t\tconst computedStyle = global.window.getComputedStyle(domEditable);\n\t\tif (!this._previewContainer) {\n\t\t\tthis._previewContainer = createElement(global.document, \"div\", { style: \"position: fixed; left: -999999px;\" });\n\t\t\tglobal.document.body.appendChild(this._previewContainer);\n\t\t} else if (this._previewContainer.firstElementChild) this._previewContainer.removeChild(this._previewContainer.firstElementChild);\n\t\tconst preview = createElement(global.document, \"div\");\n\t\tpreview.className = \"ck ck-content ck-clipboard-preview\";\n\t\tconst domRect = new Rect(domEditable);\n\t\tconst domEditablePaddingLeft = parseFloat(computedStyle.paddingLeft);\n\t\tconst domEditablePaddingRight = parseFloat(computedStyle.paddingRight);\n\t\tconst editableWidth = parseFloat(computedStyle.width) - domEditablePaddingLeft - domEditablePaddingRight;\n\t\tif (!domEditable.contains(domTarget)) if (!env.isiOS) {\n\t\t\tconst offsetLeft = domRect.left - clientX + domEditablePaddingLeft;\n\t\t\tpreview.style.width = `${editableWidth + offsetLeft}px`;\n\t\t\tpreview.style.paddingLeft = `${offsetLeft}px`;\n\t\t} else {\n\t\t\tpreview.style.width = `${editableWidth}px`;\n\t\t\tpreview.style.backgroundColor = \"var(--ck-color-base-background)\";\n\t\t}\n\t\telse if (env.isiOS) {\n\t\t\tpreview.style.maxWidth = `${editableWidth}px`;\n\t\t\tpreview.style.padding = \"10px\";\n\t\t\tpreview.style.minWidth = \"200px\";\n\t\t\tpreview.style.minHeight = \"20px\";\n\t\t\tpreview.style.boxSizing = \"border-box\";\n\t\t\tpreview.style.backgroundColor = \"var(--ck-color-base-background)\";\n\t\t} else return;\n\t\tview.domConverter.setContentOf(preview, dataTransfer.getData(\"text/html\"));\n\t\tdataTransfer.setDragImage(preview, 0, 0);\n\t\tthis._previewContainer.appendChild(preview);\n\t}\n};\n/**\n* Returns the drop effect that should be a result of dragging the content.\n* This function is handling a quirk when checking the effect in the 'drop' DOM event.\n*/\nfunction getFinalDropEffect(dataTransfer) {\n\tif (env.isGecko) return dataTransfer.dropEffect;\n\treturn [\"all\", \"copyMove\"].includes(dataTransfer.effectAllowed) ? \"move\" : \"copy\";\n}\n/**\n* Returns a widget element that should be dragged.\n*/\nfunction findDraggableWidget(target) {\n\tif (target.is(\"editableElement\")) return null;\n\tif (target.hasClass(\"ck-widget__selection-handle\")) return target.findAncestor(isWidget);\n\tif (isWidget(target)) return target;\n\tconst ancestor = target.findAncestor((node) => isWidget(node) || node.is(\"editableElement\"));\n\tif (isWidget(ancestor)) return ancestor;\n\treturn null;\n}\n/**\n* Recursively checks if common parent of provided elements doesn't have any other children. If that's the case,\n* it returns range including this parent. Otherwise, it returns only the range from first to last element.\n*\n* Example:\n*\n* <blockQuote>\n* <paragraph>[Test 1</paragraph>\n* <paragraph>Test 2</paragraph>\n* <paragraph>Test 3]</paragraph>\n* <blockQuote>\n*\n* Because all elements inside the `blockQuote` are selected, the range is extended to include the `blockQuote` too.\n* If only first and second paragraphs would be selected, the range would not include it.\n*/\nfunction getRangeIncludingFullySelectedParents(model, elements) {\n\tconst firstElement = elements[0];\n\tconst lastElement = elements[elements.length - 1];\n\tconst parent = firstElement.getCommonAncestor(lastElement);\n\tconst startPosition = model.createPositionBefore(firstElement);\n\tconst endPosition = model.createPositionAfter(lastElement);\n\tif (parent && parent.is(\"element\") && !model.schema.isLimit(parent)) {\n\t\tconst parentRange = model.createRangeOn(parent);\n\t\tconst touchesStart = startPosition.isTouching(parentRange.start);\n\t\tconst touchesEnd = endPosition.isTouching(parentRange.end);\n\t\tif (touchesStart && touchesEnd) return getRangeIncludingFullySelectedParents(model, [parent]);\n\t}\n\treturn model.createRange(startPosition, endPosition);\n}\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/pasteplaintext\n*/\n/**\n* The plugin detects the user's intention to paste plain text.\n*\n* For example, it detects the <kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>V</kbd> keystroke.\n*/\nvar PastePlainText = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"PastePlainText\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get requires() {\n\t\treturn [ClipboardPipeline];\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tinit() {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst view = editor.editing.view;\n\t\tconst selection = model.document.selection;\n\t\tview.addObserver(ClipboardObserver);\n\t\teditor.plugins.get(ClipboardPipeline).on(\"contentInsertion\", (evt, data) => {\n\t\t\tif (!isUnformattedInlineContent(data.content, model)) return;\n\t\t\tmodel.change((writer) => {\n\t\t\t\tconst textAttributes = Array.from(selection.getAttributes()).filter(([key]) => model.schema.getAttributeProperties(key).isFormatting);\n\t\t\t\tif (!selection.isCollapsed) model.deleteContent(selection, { doNotAutoparagraph: true });\n\t\t\t\ttextAttributes.push(...selection.getAttributes());\n\t\t\t\tconst range = writer.createRangeIn(data.content);\n\t\t\t\tfor (const item of range.getItems()) for (const attribute of textAttributes) if (model.schema.checkAttribute(item, attribute[0])) writer.setAttribute(attribute[0], attribute[1], item);\n\t\t\t});\n\t\t});\n\t}\n};\n/**\n* Returns true if specified `documentFragment` represents the unformatted inline content.\n*/\nfunction isUnformattedInlineContent(documentFragment, model) {\n\tlet range = model.createRangeIn(documentFragment);\n\tif (documentFragment.childCount == 1) {\n\t\tconst child = documentFragment.getChild(0);\n\t\tif (child.is(\"element\") && model.schema.isBlock(child) && !model.schema.isObject(child) && !model.schema.isLimit(child)) range = model.createRangeIn(child);\n\t}\n\tfor (const child of range.getItems()) {\n\t\tif (!model.schema.isInline(child)) return false;\n\t\tif (Array.from(child.getAttributeKeys()).find((key) => model.schema.getAttributeProperties(key).isFormatting)) return false;\n\t}\n\treturn true;\n}\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/clipboard\n*/\n/**\n* The clipboard feature.\n*\n* Read more about the clipboard integration in the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n*\n* This is a \"glue\" plugin which loads the following plugins:\n* * {@link module:clipboard/clipboardpipeline~ClipboardPipeline}\n* * {@link module:clipboard/dragdrop~DragDrop}\n* * {@link module:clipboard/pasteplaintext~PastePlainText}\n*/\nvar Clipboard = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"Clipboard\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get requires() {\n\t\treturn [\n\t\t\tClipboardMarkersUtils,\n\t\t\tClipboardPipeline,\n\t\t\tDragDrop,\n\t\t\tPastePlainText\n\t\t];\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tinit() {\n\t\tconst editor = this.editor;\n\t\tconst t = this.editor.t;\n\t\teditor.accessibility.addKeystrokeInfos({ keystrokes: [\n\t\t\t{\n\t\t\t\tlabel: t(\"Copy selected content\"),\n\t\t\t\tkeystroke: \"CTRL+C\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: t(\"Paste content\"),\n\t\t\t\tkeystroke: \"CTRL+V\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: t(\"Paste content as plain text\"),\n\t\t\t\tkeystroke: \"CTRL+SHIFT+V\"\n\t\t\t}\n\t\t] });\n\t}\n};\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n\nexport { Clipboard, ClipboardMarkersUtils, ClipboardObserver, ClipboardPipeline, DragDrop, DragDrop as _DragDrop, DragDropBlockToolbar, DragDropBlockToolbar as _DragDropBlockToolbar, DragDropTarget, DragDropTarget as _DragDropTarget, PastePlainText, LineView as _ClipboardLineView, normalizeClipboardData as _normalizeClipboardData, plainTextToHtml, viewToPlainText };\n//# sourceMappingURL=index.js.map","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/utils/plaintexttohtml\n */\n\n/**\n * Converts plain text to its HTML-ized version.\n *\n * @param text The plain text to convert.\n * @returns HTML generated from the plain text.\n */\nexport function plainTextToHtml( text: string ): string {\n\ttext = text\n\t\t// Encode &.\n\t\t.replace( /&/g, '&amp;' )\n\t\t// Encode <>.\n\t\t.replace( /</g, '&lt;' )\n\t\t.replace( />/g, '&gt;' )\n\t\t// Creates a paragraph for each double line break.\n\t\t.replace( /\\r?\\n\\r?\\n/g, '</p><p>' )\n\t\t// Creates a line break for each single line break.\n\t\t.replace( /\\r?\\n/g, '<br>' )\n\t\t// Replace tabs with four spaces.\n\t\t.replace( /\\t/g, '&nbsp;&nbsp;&nbsp;&nbsp;' )\n\t\t// Preserve trailing spaces (only the first and last one – the rest is handled below).\n\t\t.replace( /^\\s/, '&nbsp;' )\n\t\t.replace( /\\s$/, '&nbsp;' )\n\t\t// Preserve other subsequent spaces now.\n\t\t.replace( /\\s\\s/g, ' &nbsp;' );\n\n\tif ( text.includes( '</p><p>' ) || text.includes( '<br>' ) ) {\n\t\t// If we created paragraphs above, add the trailing ones.\n\t\ttext = `<p>${ text }</p>`;\n\t}\n\n\t// TODO:\n\t// * What about '\\nfoo' vs ' foo'?\n\n\treturn text;\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/clipboardobserver\n */\n\nimport { EventInfo, getRangeFromMouseEvent } from '@ckeditor/ckeditor5-utils';\n\nimport {\n\tViewDataTransfer,\n\tDomEventObserver,\n\ttype ViewDocumentDomEventData,\n\ttype EditingView,\n\ttype ViewDocumentFragment,\n\ttype ViewElement,\n\ttype ViewRange\n} from '@ckeditor/ckeditor5-engine';\n\nimport { plainTextToHtml } from './utils/plaintexttohtml.js';\n\n/**\n * Clipboard events observer.\n *\n * Fires the following events:\n *\n * * {@link module:engine/view/document~ViewDocument#event:clipboardInput},\n * * {@link module:engine/view/document~ViewDocument#event:paste},\n * * {@link module:engine/view/document~ViewDocument#event:copy},\n * * {@link module:engine/view/document~ViewDocument#event:cut},\n * * {@link module:engine/view/document~ViewDocument#event:drop},\n * * {@link module:engine/view/document~ViewDocument#event:dragover},\n * * {@link module:engine/view/document~ViewDocument#event:dragging},\n * * {@link module:engine/view/document~ViewDocument#event:dragstart},\n * * {@link module:engine/view/document~ViewDocument#event:dragend},\n * * {@link module:engine/view/document~ViewDocument#event:dragenter},\n * * {@link module:engine/view/document~ViewDocument#event:dragleave}.\n *\n * **Note**: This observer is not available by default (ckeditor5-engine does not add it on its own).\n * To make it available, it needs to be added to {@link module:engine/view/document~ViewDocument} by using\n * the {@link module:engine/view/view~EditingView#addObserver `View#addObserver()`} method. Alternatively, you can load the\n * {@link module:clipboard/clipboard~Clipboard} plugin which adds this observer automatically (because it uses it).\n */\nexport class ClipboardObserver extends DomEventObserver<\n\t'paste' | 'copy' | 'cut' | 'drop' | 'dragover' | 'dragstart' | 'dragend' | 'dragenter' | 'dragleave',\n\tClipboardEventData\n> {\n\tpublic readonly domEventType = [\n\t\t'paste', 'copy', 'cut', 'drop', 'dragover', 'dragstart', 'dragend', 'dragenter', 'dragleave'\n\t] as const;\n\n\tconstructor( view: EditingView ) {\n\t\tsuper( view );\n\n\t\tconst viewDocument = this.document;\n\n\t\tthis.listenTo<ViewDocumentPasteEvent>( viewDocument, 'paste', handleInput( 'clipboardInput' ), { priority: 'low' } );\n\t\tthis.listenTo<ViewDocumentDropEvent>( viewDocument, 'drop', handleInput( 'clipboardInput' ), { priority: 'low' } );\n\t\tthis.listenTo<ViewDocumentDragOverEvent>( viewDocument, 'dragover', handleInput( 'dragging' ), { priority: 'low' } );\n\n\t\tfunction handleInput( type: 'clipboardInput' | 'dragging' ) {\n\t\t\treturn ( evt: EventInfo, data: ViewDocumentDomEventData & ClipboardEventData ) => {\n\t\t\t\tdata.preventDefault();\n\n\t\t\t\tconst targetRanges = data.dropRange ? [ data.dropRange ] : null;\n\t\t\t\tconst dataTransfer = data.dataTransfer;\n\t\t\t\tconst eventInfo = new EventInfo( viewDocument, type );\n\n\t\t\t\tlet content = '';\n\n\t\t\t\tif ( dataTransfer.getData( 'text/html' ) ) {\n\t\t\t\t\tcontent = dataTransfer.getData( 'text/html' );\n\t\t\t\t} else if ( dataTransfer.getData( 'text/plain' ) ) {\n\t\t\t\t\tcontent = plainTextToHtml( dataTransfer.getData( 'text/plain' ) );\n\t\t\t\t}\n\n\t\t\t\tviewDocument.fire( eventInfo, {\n\t\t\t\t\tdataTransfer,\n\t\t\t\t\tcontent,\n\t\t\t\t\tmethod: evt.name,\n\t\t\t\t\ttargetRanges,\n\t\t\t\t\ttarget: data.target,\n\t\t\t\t\tdomEvent: data.domEvent\n\t\t\t\t} );\n\n\t\t\t\t// If CKEditor handled the input, do not bubble the original event any further.\n\t\t\t\t// This helps external integrations recognize that fact and act accordingly.\n\t\t\t\t// https://github.com/ckeditor/ckeditor5-upload/issues/92\n\t\t\t\tif ( eventInfo.stop.called ) {\n\t\t\t\t\tdata.stopPropagation();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}\n\n\tpublic onDomEvent( domEvent: ClipboardEvent | DragEvent ): void {\n\t\tconst nativeDataTransfer = 'clipboardData' in domEvent ? domEvent.clipboardData! : domEvent.dataTransfer!;\n\t\tconst cacheFiles = domEvent.type == 'drop' || domEvent.type == 'paste';\n\n\t\tconst evtData: ClipboardEventData = {\n\t\t\tdataTransfer: new ViewDataTransfer( nativeDataTransfer, { cacheFiles } )\n\t\t};\n\n\t\tif ( domEvent.type == 'drop' || domEvent.type == 'dragover' ) {\n\t\t\tconst domRange = getRangeFromMouseEvent( domEvent as DragEvent );\n\n\t\t\tevtData.dropRange = domRange && this.view.domConverter.domRangeToView( domRange );\n\t\t}\n\n\t\tthis.fire( domEvent.type, domEvent, evtData );\n\t}\n}\n\n/**\n * The data of 'paste', 'copy', 'cut', 'drop', 'dragover', 'dragstart', 'dragend', 'dragenter' and 'dragleave' events.\n */\nexport interface ClipboardEventData {\n\n\t/**\n\t * The data transfer instance.\n\t */\n\tdataTransfer: ViewDataTransfer;\n\n\t/**\n\t * The position into which the content is dropped.\n\t */\n\tdropRange?: ViewRange | null;\n}\n\n/**\n * Fired as a continuation of the {@link module:engine/view/document~ViewDocument#event:paste} and\n * {@link module:engine/view/document~ViewDocument#event:drop} events.\n *\n * It is a part of the {@glink framework/deep-dive/clipboard#input-pipeline clipboard input pipeline}.\n *\n * This event carries a `dataTransfer` object which comes from the clipboard and whose content should be processed\n * and inserted into the editor.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the {@link module:clipboard/clipboard~Clipboard}\n * plugin, but if for some reason it is not loaded, the observer must be added manually.\n *\n * @see module:clipboard/clipboardobserver~ClipboardObserver\n * @see module:clipboard/clipboard~Clipboard\n *\n * @eventName module:engine/view/document~ViewDocument#clipboardInput\n * @param data The event data.\n */\nexport type ViewDocumentClipboardInputEvent = {\n\tname: 'clipboardInput';\n\targs: [ data: ViewDocumentDomEventData<ClipboardEvent | DragEvent> & ClipboardInputEventData ];\n};\n\n/**\n * The value of the {@link module:engine/view/document~ViewDocument#event:paste},\n * {@link module:engine/view/document~ViewDocument#event:copy} and {@link module:engine/view/document~ViewDocument#event:cut} events.\n *\n * In order to access the clipboard data, use the `dataTransfer` property.\n */\nexport interface ClipboardInputEventData {\n\n\t/**\n\t * Data transfer instance.\n\t */\n\tdataTransfer: ViewDataTransfer;\n\n\t/**\n\t * Whether the event was triggered by a paste or a drop operation.\n\t */\n\tmethod: 'paste' | 'drop';\n\n\t/**\n\t * The tree view element representing the target.\n\t */\n\ttarget: ViewElement;\n\n\t/**\n\t * The ranges which are the target of the operation (usually – into which the content should be inserted).\n\t * If the clipboard input was triggered by a paste operation, this property is not set. If by a drop operation,\n\t * then it is the drop position (which can be different than the selection at the moment of the drop).\n\t */\n\ttargetRanges: Array<ViewRange> | null;\n\n\t/**\n\t * The content of clipboard input. Defaults to `text/html`. Falls-back to `text/plain`.\n\t */\n\tcontent: string | ViewDocumentFragment;\n\n\t/**\n\t * Custom data stored by the `clipboardInput` event handlers. Custom properties of this object can be defined and use to\n\t * pass parameters between listeners. Content of this property is passed to the `inputTransformation` event.\n\t */\n\textraContent?: unknown;\n}\n\n/**\n * Fired when the user drags the content over one of the editing roots of the editor.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the {@link module:clipboard/clipboard~Clipboard}\n * plugin, but if for some reason it is not loaded, the observer must be added manually.\n *\n * @see module:engine/view/document~ViewDocument#event:clipboardInput\n *\n * @eventName module:engine/view/document~ViewDocument#dragover\n * @param data The event data.\n */\nexport type ViewDocumentDragOverEvent = {\n\tname: 'dragover';\n\targs: [ data: ViewDocumentDomEventData<DragEvent> & ClipboardEventData ];\n};\n\n/**\n * Fired when the user dropped the content into one of the editing roots of the editor.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the {@link module:clipboard/clipboard~Clipboard}\n * plugin, but if for some reason it is not loaded, the observer must be added manually.\n *\n * @see module:engine/view/document~ViewDocument#event:clipboardInput\n *\n * @eventName module:engine/view/document~ViewDocument#drop\n * @param data The event data.\n */\nexport type ViewDocumentDropEvent = {\n\tname: 'drop';\n\targs: [ data: ViewDocumentDomEventData<DragEvent> & ClipboardEventData ];\n};\n\n/**\n * Fired when the user pasted the content into one of the editing roots of the editor.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the {@link module:clipboard/clipboard~Clipboard}\n * plugin, but if for some reason it is not loaded, the observer must be added manually.\n *\n * @see module:engine/view/document~ViewDocument#event:clipboardInput\n *\n * @eventName module:engine/view/document~ViewDocument#paste\n * @param {module:clipboard/clipboardobserver~ClipboardEventData} data The event data.\n */\nexport type ViewDocumentPasteEvent = {\n\tname: 'paste';\n\targs: [ data: ViewDocumentDomEventData<ClipboardEvent> & ClipboardEventData ];\n};\n\n/**\n * Fired when the user copied the content from one of the editing roots of the editor.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the {@link module:clipboard/clipboard~Clipboard}\n * plugin, but if for some reason it is not loaded, the observer must be added manually.\n *\n * @see module:clipboard/clipboardobserver~ClipboardObserver\n *\n * @eventName module:engine/view/document~ViewDocument#copy\n * @param data The event data.\n */\nexport type ViewDocumentCopyEvent = {\n\tname: 'copy';\n\targs: [ data: ViewDocumentDomEventData<ClipboardEvent> & ClipboardEventData ];\n};\n\n/**\n * Fired when the user cut the content from one of the editing roots of the editor.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the {@link module:clipboard/clipboard~Clipboard}\n * plugin, but if for some reason it is not loaded, the observer must be added manually.\n *\n * @see module:clipboard/clipboardobserver~ClipboardObserver\n *\n * @eventName module:engine/view/document~ViewDocument#cut\n * @param data The event data.\n */\nexport type ViewDocumentCutEvent = {\n\tname: 'cut';\n\targs: [ data: ViewDocumentDomEventData<ClipboardEvent> & ClipboardEventData ];\n};\n\n/**\n * Fired as a continuation of the {@link module:engine/view/document~ViewDocument#event:dragover} event.\n *\n * It is a part of the {@glink framework/deep-dive/clipboard#input-pipeline clipboard input pipeline}.\n *\n * This event carries a `dataTransfer` object which comes from the clipboard and whose content should be processed\n * and inserted into the editor.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the\n * {@link module:clipboard/clipboard~Clipboard} plugin, but if for some reason it is not loaded,\n * the observer must be added manually.\n *\n * @see module:clipboard/clipboardobserver~ClipboardObserver\n * @see module:clipboard/clipboard~Clipboard\n *\n * @eventName module:engine/view/document~ViewDocument#dragging\n * @param data The event data.\n */\nexport type ViewDocumentDraggingEvent = {\n\tname: 'dragging';\n\targs: [ data: ViewDocumentDomEventData<DragEvent> & DraggingEventData ];\n};\n\nexport interface DraggingEventData {\n\n\t/**\n\t * The data transfer instance.\n\t */\n\tdataTransfer: ViewDataTransfer;\n\n\t/**\n\t * Whether the event was triggered by a paste or a drop operation.\n\t */\n\tmethod: 'dragover';\n\n\t/**\n\t * The tree view element representing the target.\n\t */\n\ttarget: Element;\n\n\t/**\n\t * Ranges which are the target of the operation (usually – into which the content should be inserted).\n\t * It is the drop position (which can be different than the selection at the moment of drop).\n\t */\n\ttargetRanges: Array<ViewRange> | null;\n}\n\n/**\n * Fired when the user starts dragging the content in one of the editing roots of the editor.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the {@link module:clipboard/clipboard~Clipboard}\n * plugin, but if for some reason it is not loaded, the observer must be added manually.\n *\n * @see module:engine/view/document~ViewDocument#event:clipboardInput\n *\n * @eventName module:engine/view/document~ViewDocument#dragstart\n * @param data The event data.\n */\nexport type ViewDocumentDragStartEvent = {\n\tname: 'dragstart';\n\targs: [ data: ViewDocumentDomEventData<DragEvent> & ClipboardEventData ];\n};\n\n/**\n * Fired when the user ended dragging the content.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the {@link module:clipboard/clipboard~Clipboard}\n * plugin, but if for some reason it is not loaded, the observer must be added manually.\n *\n * @see module:engine/view/document~ViewDocument#event:clipboardInput\n *\n * @eventName module:engine/view/document~ViewDocument#dragend\n * @param data The event data.\n */\nexport type ViewDocumentDragEndEvent = {\n\tname: 'dragend';\n\targs: [ data: ViewDocumentDomEventData<DragEvent> & ClipboardEventData ];\n};\n\n/**\n * Fired when the user drags the content into one of the editing roots of the editor.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the {@link module:clipboard/clipboard~Clipboard}\n * plugin, but if for some reason it is not loaded, the observer must be added manually.\n *\n * @see module:engine/view/document~ViewDocument#event:clipboardInput\n *\n * @eventName module:engine/view/document~ViewDocument#dragenter\n * @param data The event data.\n */\nexport type ViewDocumentDragEnterEvent = {\n\tname: 'dragenter';\n\targs: [ data: ViewDocumentDomEventData<DragEvent> & ClipboardEventData ];\n};\n\n/**\n * Fired when the user drags the content out of one of the editing roots of the editor.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the {@link module:clipboard/clipboard~Clipboard}\n * plugin, but if for some reason it is not loaded, the observer must be added manually.\n *\n * @see module:engine/view/document~ViewDocument#event:clipboardInput\n *\n * @eventName module:engine/view/document~ViewDocument#dragleave\n * @param data The event data.\n */\nexport type ViewDocumentDragLeaveEvent = {\n\tname: 'dragleave';\n\targs: [ data: ViewDocumentDomEventData<DragEvent> & ClipboardEventData ];\n};\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/utils/normalizeclipboarddata\n */\n\n/**\n * Removes some popular browser quirks out of the clipboard data (HTML).\n * Removes all HTML comments. These are considered an internal thing and it makes little sense if they leak into the editor data.\n *\n * @param data The HTML data to normalize.\n * @returns Normalized HTML.\n * @internal\n */\nexport function normalizeClipboardData( data: string ): string {\n\treturn data\n\t\t.replace( /<span(?: class=\"Apple-converted-space\"|)>(\\s+)<\\/span>/g, ( fullMatch, spaces ) => {\n\t\t\t// Handle the most popular and problematic case when even a single space becomes an nbsp;.\n\t\t\t// Decode those to normal spaces. Read more in https://github.com/ckeditor/ckeditor5-clipboard/issues/2.\n\t\t\tif ( spaces.length == 1 ) {\n\t\t\t\treturn ' ';\n\t\t\t}\n\n\t\t\treturn spaces;\n\t\t} )\n\t\t// Remove all HTML comments.\n\t\t.replace( /<!--[\\s\\S]*?-->/g, '' );\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/utils/viewtoplaintext\n */\n\nimport type { ViewDomConverter, ViewDocumentFragment, ViewElement, ViewItem } from '@ckeditor/ckeditor5-engine';\n\n// Elements which should not have empty-line padding.\n// Most `view.ContainerElement` want to be separate by new-line, but some are creating one structure\n// together (like `<li>`) so it is better to separate them by only one \"\\n\".\nconst smallPaddingElements = [ 'figcaption', 'li' ];\n\nconst listElements = [ 'ol', 'ul' ];\n\n/**\n * Converts {@link module:engine/view/item~ViewItem view item} and all of its children to plain text.\n *\n * @param converter The converter instance.\n * @param viewItem View item to convert.\n * @returns Plain text representation of `viewItem`.\n */\nexport function viewToPlainText(\n\tconverter: ViewDomConverter,\n\tviewItem: ViewItem | ViewDocumentFragment\n): string {\n\tif ( viewItem.is( '$text' ) || viewItem.is( '$textProxy' ) ) {\n\t\treturn viewItem.data;\n\t}\n\n\tif ( viewItem.is( 'element', 'img' ) && viewItem.hasAttribute( 'alt' ) ) {\n\t\treturn viewItem.getAttribute( 'alt' )!;\n\t}\n\n\tif ( viewItem.is( 'element', 'br' ) ) {\n\t\treturn '\\n'; // Convert soft breaks to single line break (https://github.com/ckeditor/ckeditor5/issues/8045).\n\t}\n\n\t/**\n\t * Item is a document fragment, attribute element or container element. It doesn't\n\t * have it's own text value, so we need to convert its children elements.\n\t */\n\n\tlet text = '';\n\tlet prev: ViewElement | null = null;\n\n\tfor ( const child of ( viewItem as ViewElement | ViewDocumentFragment ).getChildren() ) {\n\t\ttext += newLinePadding( child as ViewElement, prev ) + viewToPlainText( converter, child );\n\t\tprev = child as ViewElement;\n\t}\n\n\t// If item is a raw element, the only way to get its content is to render it and read the text directly from DOM.\n\tif ( viewItem.is( 'rawElement' ) ) {\n\t\tconst doc = document.implementation.createHTMLDocument( '' );\n\t\tconst tempElement = doc.createElement( 'div' );\n\n\t\tviewItem.render( tempElement, converter );\n\n\t\ttext += domElementToPlainText( tempElement );\n\t}\n\n\treturn text;\n}\n\n/**\n * Recursively converts DOM element and all of its children to plain text.\n */\nfunction domElementToPlainText( element: HTMLElement ): string {\n\tlet text = '';\n\n\tif ( element.nodeType === Node.TEXT_NODE ) {\n\t\treturn element.textContent!;\n\t} else if ( element.tagName === 'BR' ) {\n\t\treturn '\\n';\n\t}\n\n\tfor ( const child of element.childNodes ) {\n\t\ttext += domElementToPlainText( child as HTMLElement );\n\t}\n\n\treturn text;\n}\n\n/**\n * Returns new line padding to prefix the given elements with.\n */\nfunction newLinePadding(\n\telement: ViewElement,\n\tprevious: ViewElement | null\n): string {\n\tif ( !previous ) {\n\t\t// Don't add padding to first elements in a level.\n\t\treturn '';\n\t}\n\n\tif ( element.is( 'element', 'li' ) && !element.isEmpty && element.getChild( 0 )!.is( 'containerElement' ) ) {\n\t\t// Separate document list items with empty lines.\n\t\treturn '\\n\\n';\n\t}\n\n\tif ( listElements.includes( element.name ) && listElements.includes( previous.name ) ) {\n\t\t/**\n\t\t * Because `<ul>` and `<ol>` are ViewAttributeElements, two consecutive lists will not have any padding between\n\t\t * them (see the `if` statement below). To fix this, we need to make an exception for this case.\n\t\t */\n\t\treturn '\\n\\n';\n\t}\n\n\tif ( !element.is( 'containerElement' ) && !previous.is( 'containerElement' ) ) {\n\t\t// Don't add padding between non-container elements.\n\t\treturn '';\n\t}\n\n\tif ( smallPaddingElements.includes( element.name ) || smallPaddingElements.includes( previous.name ) ) {\n\t\t// Add small padding between selected container elements.\n\t\treturn '\\n';\n\t}\n\n\t// Do not add padding around the elements that won't be rendered.\n\tif (\n\t\telement.is( 'element' ) && element.getCustomProperty( 'dataPipeline:transparentRendering' ) ||\n\t\tprevious.is( 'element' ) && previous.getCustomProperty( 'dataPipeline:transparentRendering' )\n\t) {\n\t\treturn '';\n\t}\n\n\t// Add empty lines between container elements.\n\treturn '\\n\\n';\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/clipboardmarkersutils\n */\nimport { mapValues } from 'es-toolkit/compat';\n\nimport { uid } from '@ckeditor/ckeditor5-utils';\nimport { Plugin, type NonEmptyArray } from '@ckeditor/ckeditor5-core';\n\nimport {\n\tModelRange,\n\ttype ModelDocumentFragment,\n\ttype ModelPosition,\n\ttype ModelElement,\n\ttype ModelDocumentSelection,\n\ttype ModelSelection,\n\ttype ModelWriter,\n\ttype Marker\n} from '@ckeditor/ckeditor5-engine';\n\n/**\n * Part of the clipboard logic. Responsible for collecting markers from selected fragments\n * and restoring them with proper positions in pasted elements.\n *\n * @internal\n */\nexport class ClipboardMarkersUtils extends Plugin {\n\t/**\n\t * Map of marker names that can be copied.\n\t *\n\t * @internal\n\t */\n\tprivate _markersToCopy: Map<string, ClipboardMarkerConfiguration> = new Map();\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'ClipboardMarkersUtils' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * Registers marker name as copyable in clipboard pipeline.\n\t *\n\t * @param markerName Name of marker that can be copied.\n\t * @param config Configuration that describes what can be performed on specified marker.\n\t * @internal\n\t */\n\tpublic _registerMarkerToCopy( markerName: string, config: ClipboardMarkerConfiguration ): void {\n\t\tthis._markersToCopy.set( markerName, config );\n\t}\n\n\t/**\n\t * Performs copy markers on provided selection and paste it to fragment returned from `getCopiedFragment`.\n\t *\n\t * \t1. Picks all markers in provided selection.\n\t * \t2. Inserts fake markers to document.\n\t * \t3. Gets copied selection fragment from document.\n\t * \t4. Removes fake elements from fragment and document.\n\t * \t5. Inserts markers in the place of removed fake markers.\n\t *\n\t * Due to selection modification, when inserting items, `getCopiedFragment` must *always* operate on `writer.model.document.selection'.\n\t * Do not use any other custom selection object within callback, as this will lead to out-of-bounds exceptions in rare scenarios.\n\t *\n\t * @param action Type of clipboard action.\n\t * @param selection Selection to be checked.\n\t * @param getCopiedFragment\tCallback that performs copy of selection and returns it as fragment.\n\t * @internal\n\t */\n\tpublic _copySelectedFragmentWithMarkers(\n\t\taction: ClipboardMarkerRestrictedAction,\n\t\tselection: ModelSelection | ModelDocumentSelection,\n\t\tgetCopiedFragment: ( writer: ModelWriter ) => ModelDocumentFragment = writer =>\n\t\t\twriter.model.getSelectedContent( writer.model.document.selection )\n\t): ModelDocumentFragment {\n\t\treturn this.editor.model.change( writer => {\n\t\t\tconst oldSelection = writer.model.document.selection;\n\n\t\t\t// In some scenarios, such like in drag & drop, passed `selection` parameter is not actually\n\t\t\t// the same `selection` as the `writer.model.document.selection` which means that `_insertFakeMarkersToSelection`\n\t\t\t// is not affecting passed `selection` `start` and `end` positions but rather modifies `writer.model.document.selection`.\n\t\t\t//\n\t\t\t// It is critical due to fact that when we have selection that starts [ 0, 0 ] and ends at [ 1, 0 ]\n\t\t\t// and after inserting fake marker it will point to such marker instead of new widget position at start: [ 1, 0 ] end: [2, 0 ].\n\t\t\t// `writer.insert` modifies only original `writer.model.document.selection`.\n\t\t\twriter.setSelection( selection );\n\n\t\t\tconst sourceSelectionInsertedMarkers = this._insertFakeMarkersIntoSelection( writer, writer.model.document.selection, action );\n\t\t\tconst fragment = getCopiedFragment( writer );\n\t\t\tconst fakeMarkersRangesInsideRange = this._removeFakeMarkersInsideElement( writer, fragment );\n\n\t\t\t// <fake-marker> [Foo] Bar</fake-marker>\n\t\t\t// ^ ^\n\t\t\t// In `_insertFakeMarkersIntoSelection` call we inserted fake marker just before first element.\n\t\t\t// The problem is that the first element can be start position of selection so insertion fake-marker\n\t\t\t// before such element shifts selection (so selection that was at [0, 0] now is at [0, 1]).\n\t\t\t// It means that inserted fake-marker is no longer present inside such selection and is orphaned.\n\t\t\t// This function checks special case of such problem. Markers that are orphaned at the start position\n\t\t\t// and end position in the same time. Basically it means that they overlaps whole element.\n\t\t\tfor ( const [ markerName, elements ] of Object.entries( sourceSelectionInsertedMarkers ) ) {\n\t\t\t\tfakeMarkersRangesInsideRange[ markerName ] ||= writer.createRangeIn( fragment );\n\n\t\t\t\tfor ( const element of elements ) {\n\t\t\t\t\twriter.remove( element );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfragment.markers.clear();\n\n\t\t\tfor ( const [ markerName, range ] of Object.entries( fakeMarkersRangesInsideRange ) ) {\n\t\t\t\tfragment.markers.set( markerName, range );\n\t\t\t}\n\n\t\t\t// Revert back selection to previous one.\n\t\t\twriter.setSelection( oldSelection );\n\n\t\t\treturn fragment;\n\t\t} );\n\t}\n\n\t/**\n\t * Performs paste of markers on already pasted element.\n\t *\n\t * \t1. Inserts fake markers that are present in fragment element (such fragment will be processed in `getPastedDocumentElement`).\n\t * \t2. Calls `getPastedDocumentElement` and gets element that is inserted into root model.\n\t * \t3. Removes all fake markers present in transformed element.\n\t * \t4. Inserts new markers with removed fake markers ranges into pasted fragment.\n\t *\n\t * There are multiple edge cases that have to be considered before calling this function:\n\t *\n\t * \t* `markers` are inserted into the same element that must be later transformed inside `getPastedDocumentElement`.\n\t * \t* Fake marker elements inside `getPastedDocumentElement` can be cloned, but their ranges cannot overlap.\n\t * \t* If `duplicateOnPaste` is `true` in marker config then associated marker ID is regenerated before pasting.\n\t *\n\t * @param markers Object that maps marker name to corresponding range.\n\t * @param getPastedDocumentElement Getter used to get target markers element.\n\t * @internal\n\t */\n\tpublic _pasteMarkersIntoTransformedElement(\n\t\tmarkers: Record<string, ModelRange> | Map<string, ModelRange>,\n\t\tgetPastedDocumentElement: ( writer: ModelWriter ) => ModelElement\n\t): ModelElement {\n\t\tconst pasteMarkers = this._getPasteMarkersFromRangeMap( markers );\n\n\t\treturn this.editor.model.change( writer => {\n\t\t\t// Inserts fake markers into source fragment / element that is later transformed inside `getPastedDocumentElement`.\n\t\t\tconst sourceFragmentFakeMarkers = this._insertFakeMarkersElements( writer, pasteMarkers );\n\n\t\t\t// Modifies document fragment (for example, cloning table cells) and then inserts it into the document.\n\t\t\tconst transformedElement = getPastedDocumentElement( writer );\n\n\t\t\t// Removes markers in pasted and transformed fragment in root document.\n\t\t\tconst removedFakeMarkers = this._removeFakeMarkersInsideElement( writer, transformedElement );\n\n\t\t\t// Cleans up fake markers inserted into source fragment (that one before transformation which is not pasted).\n\t\t\tfor ( const element of Object.values( sourceFragmentFakeMarkers ).flat() ) {\n\t\t\t\twriter.remove( element );\n\t\t\t}\n\n\t\t\t// Inserts to root document fake markers.\n\t\t\tfor ( const [ markerName, range ] of Object.entries( removedFakeMarkers ) ) {\n\t\t\t\tif ( !writer.model.markers.has( markerName ) ) {\n\t\t\t\t\twriter.addMarker( markerName, {\n\t\t\t\t\t\tusingOperation: true,\n\t\t\t\t\t\taffectsData: true,\n\t\t\t\t\t\trange\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn transformedElement;\n\t\t} );\n\t}\n\n\t/**\n\t * Pastes document fragment with markers to document.\n\t * If `duplicateOnPaste` is `true` in marker config then associated markers IDs\n\t * are regenerated before pasting to avoid markers duplications in content.\n\t *\n\t * @param fragment Document fragment that should contain already processed by pipeline markers.\n\t * @internal\n\t */\n\tpublic _pasteFragmentWithMarkers( fragment: ModelDocumentFragment ): ModelRange {\n\t\tconst pasteMarkers = this._getPasteMarkersFromRangeMap( fragment.markers );\n\n\t\tfragment.markers.clear();\n\n\t\tfor ( const copyableMarker of pasteMarkers ) {\n\t\t\tfragment.markers.set( copyableMarker.name, copyableMarker.range );\n\t\t}\n\n\t\treturn this.editor.model.insertContent( fragment );\n\t}\n\n\t/**\n\t * In some situations we have to perform copy on selected fragment with certain markers. This function allows to temporarily bypass\n\t * restrictions on markers that we want to copy.\n\t *\n\t * This function executes `executor()` callback. For the duration of the callback, if the clipboard pipeline is used to copy\n\t * content, markers with the specified name will be copied to the clipboard as well.\n\t *\n\t * @param markerName Which markers should be copied.\n\t * @param executor Callback executed.\n\t * @param config Optional configuration flags used to copy (such like partial copy flag).\n\t * @internal\n\t */\n\tpublic _forceMarkersCopy(\n\t\tmarkerName: string,\n\t\texecutor: VoidFunction,\n\t\tconfig: ClipboardMarkerConfiguration = {\n\t\t\tallowedActions: 'all',\n\t\t\tcopyPartiallySelected: true,\n\t\t\tduplicateOnPaste: true\n\t\t}\n\t): void {\n\t\tconst before = this._markersToCopy.get( markerName );\n\n\t\tthis._markersToCopy.set( markerName, config );\n\n\t\texecutor();\n\n\t\tif ( before ) {\n\t\t\tthis._markersToCopy.set( markerName, before );\n\t\t} else {\n\t\t\tthis._markersToCopy.delete( markerName );\n\t\t}\n\t}\n\n\t/**\n\t * Checks if marker can be copied.\n\t *\n\t * @param markerName Name of checked marker.\n\t * @param action Type of clipboard action. If null then checks only if marker is registered as copyable.\n\t * @internal\n\t */\n\tpublic _isMarkerCopyable( markerName: string, action: ClipboardMarkerRestrictedAction | null ): boolean {\n\t\tconst config = this._getMarkerClipboardConfig( markerName );\n\n\t\tif ( !config ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If there is no action provided then only presence of marker is checked.\n\t\tif ( !action ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst { allowedActions } = config;\n\n\t\treturn allowedActions === 'all' || allowedActions.includes( action );\n\t}\n\n\t/**\n\t * Checks if marker has any clipboard copy behavior configuration.\n\t *\n\t * @param markerName Name of checked marker.\n\t */\n\tpublic _hasMarkerConfiguration( markerName: string ): boolean {\n\t\treturn !!this._getMarkerClipboardConfig( markerName );\n\t}\n\n\t/**\n\t * Returns marker's configuration flags passed during registration.\n\t *\n\t * @param markerName Name of marker that should be returned.\n\t * @internal\n\t */\n\tpublic _getMarkerClipboardConfig( markerName: string ): ClipboardMarkerConfiguration | null {\n\t\tconst [ markerNamePrefix ] = markerName.split( ':' );\n\n\t\treturn this._markersToCopy.get( markerNamePrefix ) || null;\n\t}\n\n\t/**\n\t * First step of copying markers. It looks for markers intersecting with given selection and inserts `$marker` elements\n\t * at positions where document markers start or end. This way `$marker` elements can be easily copied together with\n\t * the rest of the content of the selection.\n\t *\n\t * @param writer An instance of the model writer.\n\t * @param selection Selection to be checked.\n\t * @param action Type of clipboard action.\n\t */\n\tprivate _insertFakeMarkersIntoSelection(\n\t\twriter: ModelWriter,\n\t\tselection: ModelSelection | ModelDocumentSelection,\n\t\taction: ClipboardMarkerRestrictedAction\n\t): Record<string, Array<ModelElement>> {\n\t\tconst copyableMarkers = this._getCopyableMarkersFromSelection( writer, selection, action );\n\n\t\treturn this._insertFakeMarkersElements( writer, copyableMarkers );\n\t}\n\n\t/**\n\t * Returns array of markers that can be copied in specified selection.\n\t *\n\t * If marker cannot be copied partially (according to `copyPartiallySelected` configuration flag) and\n\t * is not present entirely in any selection range then it will be skipped.\n\t *\n\t * @param writer An instance of the model writer.\n\t * @param selection Selection which will be checked.\n\t * @param action Type of clipboard action. If null then checks only if marker is registered as copyable.\n\t */\n\tprivate _getCopyableMarkersFromSelection(\n\t\twriter: ModelWriter,\n\t\tselection: ModelSelection | ModelDocumentSelection,\n\t\taction: ClipboardMarkerRestrictedAction | null\n\t): Array<CopyableMarker> {\n\t\tconst selectionRanges = Array.from( selection.getRanges()! );\n\n\t\t// Picks all markers in provided ranges. Ensures that there are no duplications if\n\t\t// there are multiple ranges that intersects with the same marker.\n\t\tconst markersInRanges = new Set(\n\t\t\tselectionRanges.flatMap(\n\t\t\t\tselectionRange => Array.from( writer.model.markers.getMarkersIntersectingRange( selectionRange ) )\n\t\t\t)\n\t\t);\n\n\t\tconst isSelectionMarkerCopyable = ( marker: Marker ) => {\n\t\t\t// Check if marker exists in configuration and provided action can be performed on it.\n\t\t\tconst isCopyable = this._isMarkerCopyable( marker.name, action );\n\n\t\t\tif ( !isCopyable ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Checks if configuration disallows to copy marker only if part of its content is selected.\n\t\t\t//\n\t\t\t// Example:\n\t\t\t// \t<marker-a> Hello [ World ] </marker-a>\n\t\t\t//\t\t\t\t\t\t^ selection\n\t\t\t//\n\t\t\t// In this scenario `marker-a` won't be copied because selection doesn't overlap its content entirely.\n\t\t\tconst { copyPartiallySelected } = this._getMarkerClipboardConfig( marker.name )!;\n\n\t\t\tif ( !copyPartiallySelected ) {\n\t\t\t\tconst markerRange = marker.getRange();\n\n\t\t\t\treturn selectionRanges.some( selectionRange => selectionRange.containsRange( markerRange, true ) );\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\t\treturn Array\n\t\t\t.from( markersInRanges )\n\t\t\t.filter( isSelectionMarkerCopyable )\n\t\t\t.map( ( copyableMarker ): CopyableMarker => {\n\t\t\t\t// During `dragstart` event original marker is still present in tree.\n\t\t\t\t// It is removed after the clipboard drop event, so none of the copied markers are inserted at the end.\n\t\t\t\t// It happens because there already markers with specified `marker.name` when clipboard is trying to insert data\n\t\t\t\t// and it aborts inserting.\n\t\t\t\tconst name = action === 'dragstart' ? this._getUniqueMarkerName( copyableMarker.name ) : copyableMarker.name;\n\n\t\t\t\treturn {\n\t\t\t\t\tname,\n\t\t\t\t\trange: copyableMarker.getRange()\n\t\t\t\t};\n\t\t\t} );\n\t}\n\n\t/**\n\t * Picks all markers from markers map that can be pasted.\n\t * If `duplicateOnPaste` is `true`, it regenerates their IDs to ensure uniqueness.\n\t * If marker is not registered, it will be kept in the array anyway.\n\t *\n\t * @param markers Object that maps marker name to corresponding range.\n\t * @param action Type of clipboard action. If null then checks only if marker is registered as copyable.\n\t */\n\tprivate _getPasteMarkersFromRangeMap(\n\t\tmarkers: Record<string, ModelRange> | Map<string, ModelRange>,\n\t\taction: ClipboardMarkerRestrictedAction | null = null\n\t): Array<CopyableMarker> {\n\t\tconst { model } = this.editor;\n\t\tconst entries = markers instanceof Map ? Array.from( markers.entries() ) : Object.entries( markers );\n\n\t\treturn entries.flatMap( ( [ markerName, range ] ): Array<CopyableMarker> => {\n\t\t\tif ( !this._hasMarkerConfiguration( markerName ) ) {\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: markerName,\n\t\t\t\t\t\trange\n\t\t\t\t\t}\n\t\t\t\t];\n\t\t\t}\n\n\t\t\tif ( this._isMarkerCopyable( markerName, action ) ) {\n\t\t\t\tconst copyMarkerConfig = this._getMarkerClipboardConfig( markerName )!;\n\t\t\t\tconst isInGraveyard = model.markers.has( markerName ) &&\n\t\t\t\t\tmodel.markers.get( markerName )!.getRange().root.rootName === '$graveyard';\n\n\t\t\t\tif ( copyMarkerConfig.duplicateOnPaste || isInGraveyard ) {\n\t\t\t\t\tmarkerName = this._getUniqueMarkerName( markerName );\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: markerName,\n\t\t\t\t\t\trange\n\t\t\t\t\t}\n\t\t\t\t];\n\t\t\t}\n\n\t\t\treturn [];\n\t\t} );\n\t}\n\n\t/**\n\t * Inserts specified array of fake markers elements to document and assigns them `type` and `name` attributes.\n\t * Fake markers elements are used to calculate position of markers on pasted fragment that were transformed during\n\t * steps between copy and paste.\n\t *\n\t * @param writer An instance of the model writer.\n\t * @param markers Array of markers that will be inserted.\n\t */\n\tprivate _insertFakeMarkersElements( writer: ModelWriter, markers: Array<CopyableMarker> ): Record<string, Array<ModelElement>> {\n\t\tconst mappedMarkers: Record<string, Array<ModelElement>> = {};\n\t\tconst sortedMarkers = markers\n\t\t\t.flatMap( marker => {\n\t\t\t\tconst { start, end } = marker.range;\n\n\t\t\t\treturn [\n\t\t\t\t\t{ position: start, marker, type: 'start' },\n\t\t\t\t\t{ position: end, marker, type: 'end' }\n\t\t\t\t];\n\t\t\t} )\n\t\t\t// Markers position is sorted backwards to ensure that the insertion of fake markers will not change\n\t\t\t// the position of the next markers.\n\t\t\t.sort( ( { position: posA }, { position: posB } ) => posA.isBefore( posB ) ? 1 : -1 );\n\n\t\tfor ( const { position, marker, type } of sortedMarkers ) {\n\t\t\tconst fakeMarker = writer.createElement( '$marker', {\n\t\t\t\t'data-name': marker.name,\n\t\t\t\t'data-type': type\n\t\t\t} );\n\n\t\t\tif ( !mappedMarkers[ marker.name ] ) {\n\t\t\t\tmappedMarkers[ marker.name ] = [];\n\t\t\t}\n\n\t\t\tmappedMarkers[ marker.name ]!.push( fakeMarker );\n\t\t\twriter.insert( fakeMarker, position );\n\t\t}\n\n\t\treturn mappedMarkers;\n\t}\n\n\t/**\n\t * Removes all `$marker` elements from the given document fragment.\n\t *\n\t * Returns an object where keys are marker names, and values are ranges corresponding to positions\n\t * where `$marker` elements were inserted.\n\t *\n\t * If the document fragment had only one `$marker` element for given marker (start or end) the other boundary is set automatically\n\t * (to the end or start of the document fragment, respectively).\n\t *\n\t * @param writer An instance of the model writer.\n\t * @param rootElement The element to be checked.\n\t */\n\tprivate _removeFakeMarkersInsideElement(\n\t\twriter: ModelWriter,\n\t\trootElement: ModelElement | ModelDocumentFragment\n\t): Record<string, ModelRange> {\n\t\tconst fakeMarkersElements = this._getAllFakeMarkersFromElement( writer, rootElement );\n\t\tconst fakeMarkersRanges = fakeMarkersElements.reduce<Record<string, FakeMarkerRangeConstruct>>( ( acc, fakeMarker ) => {\n\t\t\tconst position = fakeMarker.markerElement && writer.createPositionBefore( fakeMarker.markerElement );\n\t\t\tlet prevFakeMarker: FakeMarkerRangeConstruct | null = acc[ fakeMarker.name ];\n\n\t\t\t// Handle scenario when tables clone cells with the same fake node. Example:\n\t\t\t//\n\t\t\t// <cell><fake-marker-a></cell> <cell><fake-marker-a></cell> <cell><fake-marker-a></cell>\n\t\t\t// ^ cloned ^ cloned\n\t\t\t//\n\t\t\t// The easiest way to bypass this issue is to rename already existing in map nodes and\n\t\t\t// set them new unique name.\n\t\t\tlet skipAssign = false;\n\n\t\t\tif ( prevFakeMarker?.start && prevFakeMarker?.end ) {\n\t\t\t\tconst config = this._getMarkerClipboardConfig( fakeMarker.name )!;\n\n\t\t\t\tif ( config.duplicateOnPaste ) {\n\t\t\t\t\tacc[ this._getUniqueMarkerName( fakeMarker.name ) ] = acc[ fakeMarker.name ];\n\t\t\t\t} else {\n\t\t\t\t\tskipAssign = true;\n\t\t\t\t}\n\n\t\t\t\tprevFakeMarker = null;\n\t\t\t}\n\n\t\t\tif ( !skipAssign ) {\n\t\t\t\tacc[ fakeMarker.name ] = {\n\t\t\t\t\t...prevFakeMarker!,\n\t\t\t\t\t[ fakeMarker.type ]: position\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif ( fakeMarker.markerElement ) {\n\t\t\t\twriter.remove( fakeMarker.markerElement );\n\t\t\t}\n\n\t\t\treturn acc;\n\t\t}, {} );\n\n\t\t// We cannot construct ranges directly in previous reduce because element ranges can overlap.\n\t\t// In other words lets assume we have such scenario:\n\n\t\t// <fake-marker-start /> <paragraph /> <fake-marker-2-start /> <fake-marker-end /> <fake-marker-2-end />\n\t\t//\n\t\t// We have to remove `fake-marker-start` firstly and then remove `fake-marker-2-start`.\n\t\t// Removal of `fake-marker-2-start` affects `fake-marker-end` position so we cannot create\n\t\t// connection between `fake-marker-start` and `fake-marker-end` without iterating whole set firstly.\n\t\treturn mapValues(\n\t\t\tfakeMarkersRanges,\n\t\t\trange => new ModelRange(\n\t\t\t\trange.start || writer.createPositionFromPath( rootElement, [ 0 ] ),\n\t\t\t\trange.end || writer.createPositionAt( rootElement, 'end' )\n\t\t\t)\n\t\t);\n\t}\n\n\t/**\n\t * Returns array that contains list of fake markers with corresponding `$marker` elements.\n\t *\n\t * For each marker, there can be two `$marker` elements or only one (if the document fragment contained\n\t * only the beginning or only the end of a marker).\n\t *\n\t * @param writer An instance of the model writer.\n\t * @param rootElement The element to be checked.\n\t */\n\tprivate _getAllFakeMarkersFromElement( writer: ModelWriter, rootElement: ModelElement | ModelDocumentFragment ): Array<FakeMarker> {\n\t\tconst foundFakeMarkers = Array\n\t\t\t.from( writer.createRangeIn( rootElement ) )\n\t\t\t.flatMap( ( { item } ): Array<FakeMarker> => {\n\t\t\t\tif ( !item.is( 'element', '$marker' ) ) {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\n\t\t\t\tconst name = item.getAttribute( 'data-name' ) as string;\n\t\t\t\tconst type = item.getAttribute( 'data-type' ) as 'start' | 'end';\n\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\tmarkerElement: item,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\ttype\n\t\t\t\t\t}\n\t\t\t\t];\n\t\t\t} );\n\n\t\tconst prependFakeMarkers: Array<FakeMarker> = [];\n\t\tconst appendFakeMarkers: Array<FakeMarker> = [];\n\n\t\tfor ( const fakeMarker of foundFakeMarkers ) {\n\t\t\tif ( fakeMarker.type === 'end' ) {\n\t\t\t\t// <fake-marker> [ phrase</fake-marker> phrase ]\n\t\t\t\t// ^\n\t\t\t\t// Handle case when marker is just before start of selection.\n\t\t\t\t// Only end marker is inside selection.\n\n\t\t\t\tconst hasMatchingStartMarker = foundFakeMarkers.some(\n\t\t\t\t\totherFakeMarker => otherFakeMarker.name === fakeMarker.name && otherFakeMarker.type === 'start'\n\t\t\t\t);\n\n\t\t\t\tif ( !hasMatchingStartMarker ) {\n\t\t\t\t\tprependFakeMarkers.push( {\n\t\t\t\t\t\tmarkerElement: null,\n\t\t\t\t\t\tname: fakeMarker.name,\n\t\t\t\t\t\ttype: 'start'\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( fakeMarker.type === 'start' ) {\n\t\t\t\t// [<fake-marker>phrase]</fake-marker>\n\t\t\t\t// ^\n\t\t\t\t// Handle case when fake marker is after selection.\n\t\t\t\t// Only start marker is inside selection.\n\n\t\t\t\tconst hasMatchingEndMarker = foundFakeMarkers.some(\n\t\t\t\t\totherFakeMarker => otherFakeMarker.name === fakeMarker.name && otherFakeMarker.type === 'end'\n\t\t\t\t);\n\n\t\t\t\tif ( !hasMatchingEndMarker ) {\n\t\t\t\t\tappendFakeMarkers.unshift( {\n\t\t\t\t\t\tmarkerElement: null,\n\t\t\t\t\t\tname: fakeMarker.name,\n\t\t\t\t\t\ttype: 'end'\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn [\n\t\t\t...prependFakeMarkers,\n\t\t\t...foundFakeMarkers,\n\t\t\t...appendFakeMarkers\n\t\t];\n\t}\n\n\t/**\n\t * When copy of markers occurs we have to make sure that pasted markers have different names\n\t * than source markers. This functions helps with assigning unique part to marker name to\n\t * prevent duplicated markers error.\n\t *\n\t * @param name Name of marker\n\t */\n\tprivate _getUniqueMarkerName( name: string ) {\n\t\tconst parts = name.split( ':' );\n\t\tconst newId = uid().substring( 1, 6 );\n\n\t\t// It looks like the marker already is UID marker so in this scenario just swap\n\t\t// last part of marker name and assign new UID.\n\t\t//\n\t\t// example: comment:{ threadId }:{ id } => comment:{ threadId }:{ newId }\n\t\tif ( parts.length === 3 ) {\n\t\t\treturn `${ parts.slice( 0, 2 ).join( ':' ) }:${ newId }`;\n\t\t}\n\n\t\t// Assign new segment to marker name with id.\n\t\t//\n\t\t// example: comment => comment:{ newId }\n\t\treturn `${ parts.join( ':' ) }:${ newId }`;\n\t}\n}\n\n/**\n * Specifies which action is performed during clipboard event.\n *\n * @internal\n */\nexport type ClipboardMarkerRestrictedAction = 'copy' | 'cut' | 'dragstart';\n\n/**\n * Specifies behavior of markers during clipboard actions.\n *\n * @internal\n */\nexport type ClipboardMarkerConfiguration = {\n\tallowedActions: NonEmptyArray<ClipboardMarkerRestrictedAction> | 'all';\n\n\t// If `false`, do not copy marker when only part of its content is selected.\n\tcopyPartiallySelected?: boolean;\n\n\t// If `true` then every marker that is present in clipboard document fragment element obtain new generated ID just before pasting.\n\t// It means that it is possible to perform copy once and then paste it multiple times wherever we want.\n\t//\n\t// On the other hand if it has false value the marker will be not pasted because ID already exists in the document.\n\t//\n\t// This flag is ignored in `cut` and `dragstart` actions because source marker is moved to graveyard and\n\t// it is still present in `model.markers`. Pasted marker id must be regenerated to avoid duplications.\n\tduplicateOnPaste?: boolean;\n};\n\n/**\n * Marker descriptor type used to revert markers into tree node.\n *\n * @internal\n */\ntype FakeMarker = {\n\ttype: 'start' | 'end';\n\tname: string;\n\tmarkerElement: ModelElement | null;\n};\n\n/**\n * Range used to construct real markers from fake markers. Every property must be optional\n * because real marker range is constructed using iteration over markers that represent `start`\n * and then `end`. Usually `start` is set firstly then after few nodes `end` is set.\n *\n * @internal\n */\ntype FakeMarkerRangeConstruct = {\n\tstart: ModelPosition | null;\n\tend: ModelPosition | null;\n};\n\n/**\n * Structure used to describe marker that has to be copied.\n *\n * @internal\n */\ntype CopyableMarker = {\n\tname: string;\n\trange: ModelRange;\n};\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/clipboardpipeline\n */\n\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\n\nimport { EventInfo } from '@ckeditor/ckeditor5-utils';\n\nimport type {\n\tViewDataTransfer,\n\tModelDocumentFragment,\n\tViewDocumentDomEventData,\n\tModelRange,\n\tViewDocumentFragment,\n\tViewRange,\n\tModelSelection,\n\tModelDocumentSelection\n} from '@ckeditor/ckeditor5-engine';\n\nimport {\n\tClipboardObserver,\n\ttype ClipboardEventData,\n\ttype ViewDocumentCopyEvent,\n\ttype ViewDocumentCutEvent,\n\ttype ViewDocumentClipboardInputEvent\n} from './clipboardobserver.js';\n\nimport { normalizeClipboardData } from './utils/normalizeclipboarddata.js';\nimport { viewToPlainText } from './utils/viewtoplaintext.js';\nimport { ClipboardMarkersUtils } from './clipboardmarkersutils.js';\n\n// Input pipeline events overview:\n//\n// ┌──────────────────────┐ ┌──────────────────────┐\n// │ view.Document │ │ view.Document │\n// │ paste │ │ drop │\n// └───────────┬──────────┘ └───────────┬──────────┘\n// │ │\n// └────────────────┌────────────────┘\n// │\n// ┌─────────V────────┐\n// │ view.Document │ Retrieves text/html or text/plain from data.dataTransfer\n// │ clipboardInput │ and processes it to view.DocumentFragment.\n// └─────────┬────────┘\n// │\n// ┌───────────V───────────┐\n// │ ClipboardPipeline │ Converts view.DocumentFragment to model.DocumentFragment.\n// │ inputTransformation │\n// └───────────┬───────────┘\n// │\n// ┌──────────V──────────┐\n// │ ClipboardPipeline │ Calls model.insertContent().\n// │ contentInsertion │\n// └─────────────────────┘\n//\n//\n// Output pipeline events overview:\n//\n// ┌──────────────────────┐ ┌──────────────────────┐\n// │ view.Document │ │ view.Document │ Retrieves the selected model.DocumentFragment\n// │ copy │ │ cut │ and fires the `outputTransformation` event.\n// └───────────┬──────────┘ └───────────┬──────────┘\n// │ │\n// └────────────────┌────────────────┘\n// │\n// ┌───────────V───────────┐\n// │ ClipboardPipeline │ Processes model.DocumentFragment and converts it to\n// │ outputTransformation │ view.DocumentFragment.\n// └───────────┬───────────┘\n// │\n// ┌─────────V────────┐\n// │ view.Document │ Processes view.DocumentFragment to text/html and text/plain\n// │ clipboardOutput │ and stores the results in data.dataTransfer.\n// └──────────────────┘\n//\n\n/**\n * The clipboard pipeline feature. It is responsible for intercepting the `paste` and `drop` events and\n * passing the pasted content through a series of events in order to insert it into the editor's content.\n * It also handles the `cut` and `copy` events to fill the native clipboard with the serialized editor's data.\n *\n * # Input pipeline\n *\n * The behavior of the default handlers (all at a `low` priority):\n *\n * ## Event: `paste` or `drop`\n *\n * 1. Translates the event data.\n * 2. Fires the {@link module:engine/view/document~ViewDocument#event:clipboardInput `view.Document#clipboardInput`} event.\n *\n * ## Event: `view.Document#clipboardInput`\n *\n * 1. If the `data.content` event field is already set (by some listener on a higher priority), it takes this content and fires the event\n * from the last point.\n * 2. Otherwise, it retrieves `text/html` or `text/plain` from `data.dataTransfer`.\n * 3. Normalizes the raw data by applying simple filters on string data.\n * 4. Processes the raw data to {@link module:engine/view/documentfragment~ViewDocumentFragment `view.DocumentFragment`} with the\n * {@link module:engine/controller/datacontroller~DataController#htmlProcessor `DataController#htmlProcessor`}.\n * 5. Fires the {@link module:clipboard/clipboardpipeline~ClipboardPipeline#event:inputTransformation\n * `ClipboardPipeline#inputTransformation`} event with the view document fragment in the `data.content` event field.\n *\n * ## Event: `ClipboardPipeline#inputTransformation`\n *\n * 1. Converts {@link module:engine/view/documentfragment~ViewDocumentFragment `view.DocumentFragment`} from the `data.content` field to\n * {@link module:engine/model/documentfragment~ModelDocumentFragment `model.DocumentFragment`}.\n * 2. Fires the {@link module:clipboard/clipboardpipeline~ClipboardPipeline#event:contentInsertion `ClipboardPipeline#contentInsertion`}\n * event with the model document fragment in the `data.content` event field.\n * **Note**: The `ClipboardPipeline#contentInsertion` event is fired within a model change block to allow other handlers\n * to run in the same block without post-fixers called in between (i.e., the selection post-fixer).\n *\n * ## Event: `ClipboardPipeline#contentInsertion`\n *\n * 1. Calls {@link module:engine/model/model~Model#insertContent `model.insertContent()`} to insert `data.content`\n * at the current selection position.\n *\n * # Output pipeline\n *\n * The behavior of the default handlers (all at a `low` priority):\n *\n * ## Event: `copy`, `cut` or `dragstart`\n *\n * 1. Retrieves the selected {@link module:engine/model/documentfragment~ModelDocumentFragment `model.DocumentFragment`} by calling\n * {@link module:engine/model/model~Model#getSelectedContent `model#getSelectedContent()`}.\n * 2. Converts the model document fragment to {@link module:engine/view/documentfragment~ViewDocumentFragment `view.DocumentFragment`}.\n * 3. Fires the {@link module:engine/view/document~ViewDocument#event:clipboardOutput `view.Document#clipboardOutput`} event\n * with the view document fragment in the `data.content` event field.\n *\n * ## Event: `view.Document#clipboardOutput`\n *\n * 1. Processes `data.content` to HTML and plain text with the\n * {@link module:engine/controller/datacontroller~DataController#htmlProcessor `DataController#htmlProcessor`}.\n * 2. Updates the `data.dataTransfer` data for `text/html` and `text/plain` with the processed data.\n * 3. For the `cut` method, calls {@link module:engine/model/model~Model#deleteContent `model.deleteContent()`}\n * on the current selection.\n *\n * Read more about the clipboard integration in the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n */\nexport class ClipboardPipeline extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'ClipboardPipeline' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ ClipboardMarkersUtils ]> {\n\t\treturn [ ClipboardMarkersUtils ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\t\tconst view = editor.editing.view;\n\n\t\tview.addObserver( ClipboardObserver );\n\n\t\tthis._setupPasteDrop();\n\t\tthis._setupCopyCut();\n\t}\n\n\t/**\n\t * Fires Clipboard `'outputTransformation'` event for given parameters.\n\t *\n\t * @internal\n\t */\n\tpublic _fireOutputTransformationEvent(\n\t\tdataTransfer: ViewDataTransfer,\n\t\tselection: ModelSelection | ModelDocumentSelection,\n\t\tmethod: 'copy' | 'cut' | 'dragstart'\n\t): void {\n\t\tconst clipboardMarkersUtils: ClipboardMarkersUtils = this.editor.plugins.get( 'ClipboardMarkersUtils' );\n\n\t\tthis.editor.model.enqueueChange( { isUndoable: method === 'cut' }, () => {\n\t\t\tconst documentFragment = clipboardMarkersUtils._copySelectedFragmentWithMarkers( method, selection );\n\n\t\t\tthis.fire<ClipboardOutputTransformationEvent>( 'outputTransformation', {\n\t\t\t\tdataTransfer,\n\t\t\t\tcontent: documentFragment,\n\t\t\t\tmethod\n\t\t\t} );\n\t\t} );\n\t}\n\n\t/**\n\t * The clipboard paste pipeline.\n\t */\n\tprivate _setupPasteDrop(): void {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst view = editor.editing.view;\n\t\tconst viewDocument = view.document;\n\t\tconst clipboardMarkersUtils: ClipboardMarkersUtils = this.editor.plugins.get( 'ClipboardMarkersUtils' );\n\n\t\t// Pasting is disabled when selection is in non-editable place.\n\t\t// Dropping is disabled in drag and drop handler.\n\t\tthis.listenTo<ViewDocumentClipboardInputEvent>( viewDocument, 'clipboardInput', ( evt, data ) => {\n\t\t\tif ( data.method == 'paste' && !editor.model.canEditAt( editor.model.document.selection ) ) {\n\t\t\t\tevt.stop();\n\t\t\t}\n\t\t}, { priority: 'highest' } );\n\n\t\tthis.listenTo<ViewDocumentClipboardInputEvent>( viewDocument, 'clipboardInput', ( evt, data ) => {\n\t\t\tconst dataTransfer = data.dataTransfer;\n\n\t\t\tconst eventInfo = new EventInfo( this, 'inputTransformation' );\n\t\t\tconst sourceEditorId = dataTransfer.getData( 'application/ckeditor5-editor-id' ) || null;\n\n\t\t\t// Some feature could already inject content in the higher priority event handler (i.e., codeBlock, paste from office).\n\t\t\tconst content = typeof data.content == 'string' ?\n\t\t\t\tthis.editor.data.htmlProcessor.toView( normalizeClipboardData( data.content ) ) :\n\t\t\t\tdata.content;\n\n\t\t\tthis.fire<ClipboardInputTransformationEvent>( eventInfo, {\n\t\t\t\tcontent,\n\t\t\t\tdataTransfer,\n\t\t\t\tsourceEditorId,\n\t\t\t\textraContent: data.extraContent,\n\t\t\t\ttargetRanges: data.targetRanges,\n\t\t\t\tmethod: data.method as 'paste' | 'drop'\n\t\t\t} );\n\n\t\t\t// If CKEditor handled the input, do not bubble the original event any further.\n\t\t\t// This helps external integrations recognize this fact and act accordingly.\n\t\t\t// https://github.com/ckeditor/ckeditor5-upload/issues/92\n\t\t\tif ( eventInfo.stop.called ) {\n\t\t\t\tevt.stop();\n\t\t\t}\n\n\t\t\tview.scrollToTheSelection();\n\t\t}, { priority: 'low' } );\n\n\t\tthis.listenTo<ClipboardInputTransformationEvent>( this, 'inputTransformation', ( evt, data ) => {\n\t\t\tif ( data.content.isEmpty ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst dataController = this.editor.data;\n\n\t\t\t// Convert the pasted content into a model document fragment.\n\t\t\t// The conversion is contextual, but in this case an \"all allowed\" context is needed\n\t\t\t// and for that we use the $clipboardHolder item.\n\t\t\tconst modelFragment = dataController.toModel( data.content, '$clipboardHolder' );\n\n\t\t\tif ( modelFragment.childCount == 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tevt.stop();\n\n\t\t\t// Fire content insertion event in a single change block to allow other handlers to run in the same block\n\t\t\t// without post-fixers called in between (i.e., the selection post-fixer).\n\t\t\tmodel.change( () => {\n\t\t\t\tthis.fire<ClipboardContentInsertionEvent>( 'contentInsertion', {\n\t\t\t\t\tcontent: modelFragment,\n\t\t\t\t\tmethod: data.method,\n\t\t\t\t\tsourceEditorId: data.sourceEditorId,\n\t\t\t\t\tdataTransfer: data.dataTransfer,\n\t\t\t\t\ttargetRanges: data.targetRanges\n\t\t\t\t} );\n\t\t\t} );\n\t\t}, { priority: 'low' } );\n\n\t\tthis.listenTo<ClipboardContentInsertionEvent>( this, 'contentInsertion', ( evt, data ) => {\n\t\t\tdata.resultRange = clipboardMarkersUtils._pasteFragmentWithMarkers( data.content );\n\t\t}, { priority: 'low' } );\n\t}\n\n\t/**\n\t * The clipboard copy/cut pipeline.\n\t */\n\tprivate _setupCopyCut(): void {\n\t\tconst editor = this.editor;\n\t\tconst modelDocument = editor.model.document;\n\t\tconst view = editor.editing.view;\n\t\tconst viewDocument = view.document;\n\n\t\tconst onCopyCut = ( evt: EventInfo<'copy' | 'cut'>, data: ViewDocumentDomEventData<ClipboardEvent> & ClipboardEventData ) => {\n\t\t\tconst dataTransfer = data.dataTransfer;\n\n\t\t\tdata.preventDefault();\n\n\t\t\tthis._fireOutputTransformationEvent( dataTransfer, modelDocument.selection, evt.name );\n\t\t};\n\n\t\tthis.listenTo<ViewDocumentCopyEvent>( viewDocument, 'copy', onCopyCut, { priority: 'low' } );\n\t\tthis.listenTo<ViewDocumentCutEvent>( viewDocument, 'cut', ( evt, data ) => {\n\t\t\t// Cutting is disabled when selection is in non-editable place.\n\t\t\t// See: https://github.com/ckeditor/ckeditor5-clipboard/issues/26.\n\t\t\tif ( !editor.model.canEditAt( editor.model.document.selection ) ) {\n\t\t\t\tdata.preventDefault();\n\t\t\t} else {\n\t\t\t\tonCopyCut( evt, data );\n\t\t\t}\n\t\t}, { priority: 'low' } );\n\n\t\tthis.listenTo<ClipboardOutputTransformationEvent>( this, 'outputTransformation', ( evt, data ) => {\n\t\t\tconst content = editor.data.toView( data.content, { isClipboardPipeline: true } );\n\n\t\t\tviewDocument.fire<ViewDocumentClipboardOutputEvent>( 'clipboardOutput', {\n\t\t\t\tdataTransfer: data.dataTransfer,\n\t\t\t\tcontent,\n\t\t\t\tmethod: data.method\n\t\t\t} );\n\t\t}, { priority: 'low' } );\n\n\t\tthis.listenTo<ViewDocumentClipboardOutputEvent>( viewDocument, 'clipboardOutput', ( evt, data ) => {\n\t\t\tif ( !data.content.isEmpty ) {\n\t\t\t\tdata.dataTransfer.setData( 'text/html', this.editor.data.htmlProcessor.toData( data.content ) );\n\t\t\t\tdata.dataTransfer.setData( 'text/plain', viewToPlainText( editor.data.htmlProcessor.domConverter, data.content ) );\n\t\t\t\tdata.dataTransfer.setData( 'application/ckeditor5-editor-id', this.editor.id );\n\t\t\t}\n\n\t\t\tif ( data.method == 'cut' ) {\n\t\t\t\teditor.model.deleteContent( modelDocument.selection );\n\t\t\t}\n\t\t}, { priority: 'low' } );\n\t}\n}\n\n/**\n * Fired with the `content`, `dataTransfer`, `method`, and `targetRanges` properties:\n *\n * * The `content` which comes from the clipboard (it was pasted or dropped) should be processed in order to be inserted into the editor.\n * * The `dataTransfer` object is available in case the transformation functions need access to the raw clipboard data.\n * * The `method` indicates the original DOM event (for example `'drop'` or `'paste'`).\n * * The `targetRanges` property is an array of view ranges (it is available only for `'drop'`).\n *\n * It is a part of the {@glink framework/deep-dive/clipboard#input-pipeline clipboard input pipeline}.\n *\n * **Note**: You should not stop this event if you want to change the input data. You should modify the `content` property instead.\n *\n * @see module:clipboard/clipboardobserver~ClipboardObserver\n * @see module:clipboard/clipboardpipeline~ClipboardPipeline\n *\n * @eventName ~ClipboardPipeline#inputTransformation\n * @param data The event data.\n */\nexport type ClipboardInputTransformationEvent = {\n\tname: 'inputTransformation';\n\targs: [ data: ClipboardInputTransformationData ];\n};\n\n/**\n * The data of 'inputTransformation' event.\n */\nexport interface ClipboardInputTransformationData {\n\n\t/**\n\t * The event data.\n\t * The content to be inserted into the editor. It can be modified by event listeners. Read more about the clipboard pipelines in\n\t * the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n\t */\n\tcontent: ViewDocumentFragment;\n\n\t/**\n\t * Custom data stored by the `clipboardInput` event handlers. Content of this property is passed from the `clipboardInput` event.\n\t */\n\textraContent?: unknown;\n\n\t/**\n\t * The data transfer instance.\n\t */\n\tdataTransfer: ViewDataTransfer;\n\n\t/**\n\t * The target drop ranges.\n\t */\n\ttargetRanges: Array<ViewRange> | null;\n\n\t/**\n\t * Whether the event was triggered by a paste or a drop operation.\n\t */\n\tmethod: 'paste' | 'drop';\n\n\t/**\n\t * ID of the editor instance from which the content was copied.\n\t */\n\tsourceEditorId: string | null;\n}\n\n/**\n * Fired with the `content`, `dataTransfer`, `method`, and `targetRanges` properties:\n *\n * * The `content` which comes from the clipboard (was pasted or dropped) should be processed in order to be inserted into the editor.\n * * The `dataTransfer` object is available in case the transformation functions need access to the raw clipboard data.\n * * The `method` indicates the original DOM event (for example `'drop'` or `'paste'`).\n * * The `targetRanges` property is an array of view ranges (it is available only for `'drop'`).\n *\n * Event handlers can modify the content according to the final insertion position.\n *\n * It is a part of the {@glink framework/deep-dive/clipboard#input-pipeline clipboard input pipeline}.\n *\n * **Note**: You should not stop this event if you want to change the input data. You should modify the `content` property instead.\n *\n * @see module:clipboard/clipboardobserver~ClipboardObserver\n * @see module:clipboard/clipboardpipeline~ClipboardPipeline\n * @see module:clipboard/clipboardpipeline~ClipboardPipeline#event:inputTransformation\n *\n * @eventName ~ClipboardPipeline#contentInsertion\n * @param data The event data.\n */\nexport type ClipboardContentInsertionEvent = {\n\tname: 'contentInsertion';\n\targs: [ data: ClipboardContentInsertionData ];\n};\n\n/**\n * The data of 'contentInsertion' event.\n */\nexport interface ClipboardContentInsertionData {\n\n\t/**\n\t * The content to be inserted into the editor.\n\t * Read more about the clipboard pipelines in the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n\t */\n\tcontent: ModelDocumentFragment;\n\n\t/**\n\t * Whether the event was triggered by a paste or a drop operation.\n\t */\n\tmethod: 'paste' | 'drop';\n\n\t/**\n\t * The ID of the editor instance from which the content was copied.\n\t */\n\tsourceEditorId: string | null;\n\n\t/**\n\t * The data transfer instance.\n\t */\n\n\tdataTransfer: ViewDataTransfer;\n\n\t/**\n\t * The target drop ranges.\n\t */\n\ttargetRanges: Array<ViewRange> | null;\n\n\t/**\n\t * The result of the `model.insertContent()` call\n\t * (inserted by the event handler at a low priority).\n\t */\n\tresultRange?: ModelRange;\n}\n\n/**\n * Fired on {@link module:engine/view/document~ViewDocument#event:copy} and {@link module:engine/view/document~ViewDocument#event:cut}\n * with a copy of the selected content. The content can be processed before it ends up in the clipboard.\n *\n * It is a part of the {@glink framework/deep-dive/clipboard#output-pipeline clipboard output pipeline}.\n *\n * @see module:clipboard/clipboardobserver~ClipboardObserver\n * @see module:clipboard/clipboardpipeline~ClipboardPipeline\n *\n * @eventName module:engine/view/document~ViewDocument#clipboardOutput\n * @param data The event data.\n */\nexport type ViewDocumentClipboardOutputEvent = {\n\tname: 'clipboardOutput';\n\targs: [ data: ViewDocumentClipboardOutputEventData ];\n};\n\n/**\n * The value of the 'clipboardOutput' event.\n */\nexport interface ViewDocumentClipboardOutputEventData {\n\n\t/**\n\t * The data transfer instance.\n\t *\n\t * @readonly\n\t */\n\tdataTransfer: ViewDataTransfer;\n\n\t/**\n\t * Content to be put into the clipboard. It can be modified by the event listeners.\n\t * Read more about the clipboard pipelines in the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n\t */\n\tcontent: ViewDocumentFragment;\n\n\t/**\n\t * Whether the event was triggered by a copy or cut operation.\n\t */\n\tmethod: 'copy' | 'cut' | 'dragstart';\n}\n\n/**\n * Fired on {@link module:engine/view/document~ViewDocument#event:copy}, {@link module:engine/view/document~ViewDocument#event:cut}\n * and {@link module:engine/view/document~ViewDocument#event:dragstart}. The content can be processed before it ends up in the clipboard.\n *\n * It is a part of the {@glink framework/deep-dive/clipboard#output-pipeline clipboard output pipeline}.\n *\n * @eventName ~ClipboardPipeline#outputTransformation\n * @param data The event data.\n */\nexport type ClipboardOutputTransformationEvent = {\n\tname: 'outputTransformation';\n\targs: [ data: ClipboardOutputTransformationData ];\n};\n\n/**\n * The value of the 'outputTransformation' event.\n */\nexport interface ClipboardOutputTransformationData {\n\n\t/**\n\t * The data transfer instance.\n\t *\n\t * @readonly\n\t */\n\tdataTransfer: ViewDataTransfer;\n\n\t/**\n\t * Content to be put into the clipboard. It can be modified by the event listeners.\n\t * Read more about the clipboard pipelines in the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n\t */\n\tcontent: ModelDocumentFragment;\n\n\t/**\n\t * Whether the event was triggered by a copy or cut operation.\n\t */\n\tmethod: 'copy' | 'cut' | 'dragstart';\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/lineview\n */\n\n/* istanbul ignore file -- @preserve */\n\nimport { View } from '@ckeditor/ckeditor5-ui';\nimport { toUnit } from '@ckeditor/ckeditor5-utils';\n\nconst toPx = /* #__PURE__ */ toUnit( 'px' );\n\n/**\n * The horizontal drop target line view.\n *\n * @internal\n */\nexport class LineView extends View {\n\t/**\n\t * Controls whether the line is visible.\n\t *\n\t * @observable\n\t * @default false\n\t */\n\tdeclare public isVisible: boolean;\n\n\t/**\n\t * Controls the line position x coordinate.\n\t *\n\t * @observable\n\t * @default null\n\t */\n\tdeclare public left: number | null;\n\n\t/**\n\t * Controls the line width.\n\t *\n\t * @observable\n\t * @default null\n\t */\n\tdeclare public width: number | null;\n\n\t/**\n\t * Controls the line position y coordinate.\n\t *\n\t * @observable\n\t * @default null\n\t */\n\tdeclare public top: number | null;\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor() {\n\t\tsuper();\n\n\t\tconst bind = this.bindTemplate;\n\n\t\tthis.set( {\n\t\t\tisVisible: false,\n\t\t\tleft: null,\n\t\t\ttop: null,\n\t\t\twidth: null\n\t\t} );\n\n\t\tthis.setTemplate( {\n\t\t\ttag: 'div',\n\t\t\tattributes: {\n\t\t\t\tclass: [\n\t\t\t\t\t'ck',\n\t\t\t\t\t'ck-clipboard-drop-target-line',\n\t\t\t\t\tbind.if( 'isVisible', 'ck-hidden', value => !value )\n\t\t\t\t],\n\t\t\t\tstyle: {\n\t\t\t\t\tleft: bind.to( 'left', left => toPx( left! ) ),\n\t\t\t\t\ttop: bind.to( 'top', top => toPx( top! ) ),\n\t\t\t\t\twidth: bind.to( 'width', width => toPx( width! ) )\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/dragdroptarget\n */\n\nimport {\n\tPlugin,\n\ttype Editor\n} from '@ckeditor/ckeditor5-core';\n\nimport {\n\ttype ModelNode,\n\ttype ModelElement,\n\ttype ModelRange,\n\ttype ModelLiveRange,\n\ttype ViewElement,\n\ttype ViewRange,\n\ttype ViewDowncastWriter,\n\ttype ViewRootEditableElement\n} from '@ckeditor/ckeditor5-engine';\n\nimport {\n\tglobal,\n\tRect,\n\tDomEmitterMixin,\n\tdelay,\n\tResizeObserver,\n\ttype DomEmitter\n} from '@ckeditor/ckeditor5-utils';\n\nimport { LineView } from './lineview.js';\n\nimport { throttle } from 'es-toolkit/compat';\n\n/**\n * Part of the Drag and Drop handling. Responsible for finding and displaying the drop target.\n *\n * @internal\n */\nexport class DragDropTarget extends Plugin {\n\t/**\n\t * A delayed callback removing the drop marker.\n\t *\n\t * @internal\n\t */\n\tpublic readonly removeDropMarkerDelayed: ReturnType<typeof delay> = delay( () => this.removeDropMarker(), 40 );\n\n\t/**\n\t * A throttled callback updating the drop marker.\n\t */\n\tprivate readonly _updateDropMarkerThrottled = throttle(\n\t\ttargetRange => this._updateDropMarker( targetRange ), 40\n\t);\n\n\t/**\n\t * A throttled callback reconverting the drop parker.\n\t */\n\tprivate readonly _reconvertMarkerThrottled = throttle( () => {\n\t\tif ( this.editor.model.markers.has( 'drop-target' ) ) {\n\t\t\tthis.editor.editing.reconvertMarker( 'drop-target' );\n\t\t}\n\t}, 0 );\n\n\t/**\n\t * The horizontal drop target line view.\n\t */\n\tprivate _dropTargetLineView = new LineView();\n\n\t/**\n\t * DOM Emitter.\n\t */\n\tprivate _domEmitter: DomEmitter = new ( DomEmitterMixin() )();\n\n\t/**\n\t * Map of document scrollable elements.\n\t */\n\tprivate _scrollables = new Map<string, {\n\t\tdomElement: HTMLElement;\n\t\tresizeObserver: ResizeObserver;\n\t}>();\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'DragDropTarget' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tthis._setupDropMarker();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override destroy(): void {\n\t\tthis._domEmitter.stopListening();\n\n\t\tfor ( const { resizeObserver } of this._scrollables.values() ) {\n\t\t\tresizeObserver.destroy();\n\t\t}\n\n\t\tthis._updateDropMarkerThrottled.cancel();\n\t\tthis.removeDropMarkerDelayed.cancel();\n\t\tthis._reconvertMarkerThrottled.cancel();\n\n\t\treturn super.destroy();\n\t}\n\n\t/**\n\t * Finds the drop target range and updates the drop marker.\n\t *\n\t * @return The updated drop target range or null if no valid range was found.\n\t * @internal\n\t */\n\tpublic updateDropMarker(\n\t\ttargetViewElement: ViewElement,\n\t\ttargetViewRanges: Array<ViewRange> | null,\n\t\tclientX: number,\n\t\tclientY: number,\n\t\tblockMode: boolean,\n\t\tdraggedRange: ModelLiveRange | null\n\t): ModelRange | null {\n\t\tthis.removeDropMarkerDelayed.cancel();\n\n\t\tconst targetRange = findDropTargetRange(\n\t\t\tthis.editor,\n\t\t\ttargetViewElement,\n\t\t\ttargetViewRanges,\n\t\t\tclientX,\n\t\t\tclientY,\n\t\t\tblockMode,\n\t\t\tdraggedRange\n\t\t);\n\n\t\t/* istanbul ignore next -- @preserve */\n\t\tif ( !targetRange ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( draggedRange && draggedRange.containsRange( targetRange ) ) {\n\t\t\t// Target range is inside the dragged range.\n\t\t\tthis.removeDropMarker();\n\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( targetRange && !this.editor.model.canEditAt( targetRange ) ) {\n\t\t\t// Do not show drop marker if target place is not editable.\n\t\t\tthis.removeDropMarker();\n\n\t\t\treturn null;\n\t\t}\n\n\t\tthis._updateDropMarkerThrottled( targetRange );\n\n\t\treturn targetRange;\n\t}\n\n\t/**\n\t * Finds the final drop target range.\n\t *\n\t * @internal\n\t */\n\tpublic getFinalDropRange(\n\t\ttargetViewElement: ViewElement,\n\t\ttargetViewRanges: Array<ViewRange> | null,\n\t\tclientX: number,\n\t\tclientY: number,\n\t\tblockMode: boolean,\n\t\tdraggedRange: ModelLiveRange | null\n\t): ModelRange | null {\n\t\tconst targetRange = findDropTargetRange(\n\t\t\tthis.editor,\n\t\t\ttargetViewElement,\n\t\t\ttargetViewRanges,\n\t\t\tclientX,\n\t\t\tclientY,\n\t\t\tblockMode,\n\t\t\tdraggedRange\n\t\t);\n\t\t// The dragging markers must be removed after searching for the target range because sometimes\n\t\t// the target lands on the marker itself.\n\t\tthis.removeDropMarker();\n\n\t\treturn targetRange;\n\t}\n\n\t/**\n\t * Removes the drop target marker.\n\t *\n\t * @internal\n\t */\n\tpublic removeDropMarker(): void {\n\t\tconst model = this.editor.model;\n\n\t\tthis.removeDropMarkerDelayed.cancel();\n\t\tthis._updateDropMarkerThrottled.cancel();\n\t\tthis._dropTargetLineView.isVisible = false;\n\n\t\tif ( model.markers.has( 'drop-target' ) ) {\n\t\t\tmodel.change( writer => {\n\t\t\t\twriter.removeMarker( 'drop-target' );\n\t\t\t} );\n\t\t}\n\t}\n\n\t/**\n\t * Creates downcast conversion for the drop target marker.\n\t */\n\tprivate _setupDropMarker(): void {\n\t\tconst editor = this.editor;\n\n\t\teditor.ui.view.body.add( this._dropTargetLineView );\n\n\t\t// Drop marker conversion for hovering over widgets.\n\t\teditor.conversion.for( 'editingDowncast' ).markerToHighlight( {\n\t\t\tmodel: 'drop-target',\n\t\t\tview: {\n\t\t\t\tclasses: [ 'ck-clipboard-drop-target-range' ]\n\t\t\t}\n\t\t} );\n\n\t\t// Drop marker conversion for in text and block drop target.\n\t\teditor.conversion.for( 'editingDowncast' ).markerToElement( {\n\t\t\tmodel: 'drop-target',\n\t\t\tview: ( data, { writer } ) => {\n\t\t\t\t// Inline drop.\n\t\t\t\tif ( editor.model.schema.checkChild( data.markerRange.start, '$text' ) ) {\n\t\t\t\t\tthis._dropTargetLineView.isVisible = false;\n\n\t\t\t\t\treturn this._createDropTargetPosition( writer );\n\t\t\t\t}\n\t\t\t\t// Block drop.\n\t\t\t\telse {\n\t\t\t\t\tif ( data.markerRange.isCollapsed ) {\n\t\t\t\t\t\tthis._updateDropTargetLine( data.markerRange );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._dropTargetLineView.isVisible = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\n\t/**\n\t * Updates the drop target marker to the provided range.\n\t *\n\t * @param targetRange The range to set the marker to.\n\t */\n\tprivate _updateDropMarker( targetRange: ModelRange ): void {\n\t\tconst editor = this.editor;\n\t\tconst markers = editor.model.markers;\n\n\t\teditor.model.change( writer => {\n\t\t\tif ( markers.has( 'drop-target' ) ) {\n\t\t\t\tif ( !markers.get( 'drop-target' )!.getRange().isEqual( targetRange ) ) {\n\t\t\t\t\twriter.updateMarker( 'drop-target', { range: targetRange } );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twriter.addMarker( 'drop-target', {\n\t\t\t\t\trange: targetRange,\n\t\t\t\t\tusingOperation: false,\n\t\t\t\t\taffectsData: false\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t}\n\n\t/**\n\t * Creates the UI element for vertical (in-line) drop target.\n\t */\n\tprivate _createDropTargetPosition( writer: ViewDowncastWriter ): ViewElement {\n\t\treturn writer.createUIElement( 'span', { class: 'ck ck-clipboard-drop-target-position' }, function( domDocument ) {\n\t\t\tconst domElement = this.toDomElement( domDocument );\n\n\t\t\t// Using word joiner to make this marker as high as text and also making text not break on marker.\n\t\t\tdomElement.append( '\\u2060', domDocument.createElement( 'span' ), '\\u2060' );\n\n\t\t\treturn domElement;\n\t\t} );\n\t}\n\n\t/**\n\t * Updates the horizontal drop target line.\n\t */\n\tprivate _updateDropTargetLine( range: ModelRange ): void {\n\t\tconst editing = this.editor.editing;\n\n\t\tconst nodeBefore = range.start.nodeBefore as ModelElement | null;\n\t\tconst nodeAfter = range.start.nodeAfter as ModelElement | null;\n\t\tconst nodeParent = range.start.parent as ModelElement;\n\n\t\tconst viewElementBefore = nodeBefore ? editing.mapper.toViewElement( nodeBefore ) : null;\n\t\tconst domElementBefore = viewElementBefore ? editing.view.domConverter.mapViewToDom( viewElementBefore ) : null;\n\n\t\tconst viewElementAfter = nodeAfter ? editing.mapper.toViewElement( nodeAfter )! : null;\n\t\tconst domElementAfter = viewElementAfter ? editing.view.domConverter.mapViewToDom( viewElementAfter ) : null;\n\n\t\tconst viewElementParent = editing.mapper.toViewElement( nodeParent )!;\n\n\t\tif ( !viewElementParent ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst domElementParent = editing.view.domConverter.mapViewToDom( viewElementParent )!;\n\n\t\tconst domScrollableRect = this._getScrollableRect( viewElementParent );\n\n\t\tconst { scrollX, scrollY } = global.window;\n\t\tconst rectBefore = domElementBefore ? new Rect( domElementBefore ) : null;\n\t\tconst rectAfter = domElementAfter ? new Rect( domElementAfter ) : null;\n\t\tconst rectParent = new Rect( domElementParent ).excludeScrollbarsAndBorders();\n\n\t\tconst above = rectBefore ? rectBefore.bottom : rectParent.top;\n\t\tconst below = rectAfter ? rectAfter.top : rectParent.bottom;\n\n\t\tconst parentStyle = global.window.getComputedStyle( domElementParent );\n\t\tconst top = ( above <= below ? ( above + below ) / 2 : below );\n\n\t\tif ( domScrollableRect.top < top && top < domScrollableRect.bottom ) {\n\t\t\tconst left = rectParent.left + parseFloat( parentStyle.paddingLeft );\n\t\t\tconst right = rectParent.right - parseFloat( parentStyle.paddingRight );\n\n\t\t\tconst leftClamped = Math.max( left + scrollX, domScrollableRect.left );\n\t\t\tconst rightClamped = Math.min( right + scrollX, domScrollableRect.right );\n\n\t\t\tthis._dropTargetLineView.set( {\n\t\t\t\tisVisible: true,\n\t\t\t\tleft: leftClamped,\n\t\t\t\ttop: top + scrollY,\n\t\t\t\twidth: rightClamped - leftClamped\n\t\t\t} );\n\t\t} else {\n\t\t\tthis._dropTargetLineView.isVisible = false;\n\t\t}\n\t}\n\n\t/**\n\t * Finds the closest scrollable element rect for the given view element.\n\t */\n\tprivate _getScrollableRect( viewElement: ViewElement ): Rect {\n\t\tconst rootName = ( viewElement.root as ViewRootEditableElement ).rootName;\n\n\t\tlet domScrollable;\n\n\t\tif ( this._scrollables.has( rootName ) ) {\n\t\t\tdomScrollable = this._scrollables.get( rootName )!.domElement;\n\t\t} else {\n\t\t\tconst domElement = this.editor.editing.view.domConverter.mapViewToDom( viewElement )!;\n\n\t\t\tdomScrollable = findScrollableElement( domElement );\n\n\t\t\tthis._domEmitter.listenTo( domScrollable, 'scroll', this._reconvertMarkerThrottled, { usePassive: true } );\n\t\t\tconst resizeObserver = new ResizeObserver( domScrollable, this._reconvertMarkerThrottled );\n\n\t\t\tthis._scrollables.set( rootName, {\n\t\t\t\tdomElement: domScrollable,\n\t\t\t\tresizeObserver\n\t\t\t} );\n\t\t}\n\n\t\treturn new Rect( domScrollable ).excludeScrollbarsAndBorders();\n\t}\n}\n\n/**\n * Returns fixed selection range for given position and target element.\n */\nfunction findDropTargetRange(\n\teditor: Editor,\n\ttargetViewElement: ViewElement,\n\ttargetViewRanges: Array<ViewRange> | null,\n\tclientX: number,\n\tclientY: number,\n\tblockMode: boolean,\n\tdraggedRange: ModelLiveRange | null\n): ModelRange | null {\n\tconst model = editor.model;\n\tconst mapper = editor.editing.mapper;\n\n\tconst targetModelElement = getClosestMappedModelElement( editor, targetViewElement );\n\tlet modelElement = targetModelElement;\n\n\twhile ( modelElement ) {\n\t\tif ( !blockMode ) {\n\t\t\tif ( model.schema.checkChild( modelElement, '$text' ) ) {\n\t\t\t\tif ( targetViewRanges ) {\n\t\t\t\t\tconst targetViewPosition = targetViewRanges[ 0 ].start;\n\t\t\t\t\tconst targetModelPosition = mapper.toModelPosition( targetViewPosition );\n\t\t\t\t\tconst canDropOnPosition = !draggedRange || Array\n\t\t\t\t\t\t.from( draggedRange.getItems( { shallow: true } ) )\n\t\t\t\t\t\t.some( item => model.schema.checkChild( targetModelPosition, item as ModelNode ) );\n\n\t\t\t\t\tif ( canDropOnPosition ) {\n\t\t\t\t\t\tif ( model.schema.checkChild( targetModelPosition, '$text' ) ) {\n\t\t\t\t\t\t\treturn model.createRange( targetModelPosition );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t/* v8 ignore else -- @preserve */\n\t\t\t\t\t\t\tif ( targetViewPosition ) {\n\t\t\t\t\t\t\t\t// This is the case of dropping inside a span wrapper of an inline image.\n\t\t\t\t\t\t\t\treturn findDropTargetRangeForElement(\n\t\t\t\t\t\t\t\t\teditor,\n\t\t\t\t\t\t\t\t\tgetClosestMappedModelElement( editor, targetViewPosition.parent as ViewElement ),\n\t\t\t\t\t\t\t\t\tclientX,\n\t\t\t\t\t\t\t\t\tclientY\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( model.schema.isInline( modelElement ) ) {\n\t\t\t\treturn findDropTargetRangeForElement( editor, modelElement, clientX, clientY );\n\t\t\t}\n\t\t}\n\n\t\tif ( model.schema.isBlock( modelElement ) ) {\n\t\t\treturn findDropTargetRangeForElement( editor, modelElement, clientX, clientY );\n\t\t}\n\t\telse if ( model.schema.checkChild( modelElement, '$block' ) ) {\n\t\t\tconst childNodes = Array.from( modelElement.getChildren() )\n\t\t\t\t.filter( ( node ): node is ModelElement => node.is( 'element' ) && !shouldIgnoreElement( editor, node ) );\n\n\t\t\tlet startIndex = 0;\n\t\t\tlet endIndex = childNodes.length;\n\n\t\t\tif ( endIndex == 0 ) {\n\t\t\t\treturn model.createRange( model.createPositionAt( modelElement as ModelElement, 'end' ) );\n\t\t\t}\n\n\t\t\twhile ( startIndex < endIndex - 1 ) {\n\t\t\t\tconst middleIndex = Math.floor( ( startIndex + endIndex ) / 2 );\n\t\t\t\tconst side = findElementSide( editor, childNodes[ middleIndex ], clientX, clientY );\n\n\t\t\t\tif ( side == 'before' ) {\n\t\t\t\t\tendIndex = middleIndex;\n\t\t\t\t} else {\n\t\t\t\t\tstartIndex = middleIndex;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn findDropTargetRangeForElement( editor, childNodes[ startIndex ], clientX, clientY );\n\t\t}\n\n\t\tmodelElement = modelElement.parent as ModelElement;\n\t}\n\n\treturn null;\n}\n\n/**\n * Returns true for elements which should be ignored.\n */\nfunction shouldIgnoreElement( editor: Editor, modelElement: ModelElement ): boolean {\n\tconst mapper = editor.editing.mapper;\n\tconst domConverter = editor.editing.view.domConverter;\n\n\tconst viewElement = mapper.toViewElement( modelElement )!;\n\n\tif ( !viewElement ) {\n\t\treturn true;\n\t}\n\n\tconst domElement = domConverter.mapViewToDom( viewElement )!;\n\n\treturn global.window.getComputedStyle( domElement ).float != 'none';\n}\n\n/**\n * Returns target range relative to the given element.\n */\nfunction findDropTargetRangeForElement( editor: Editor, modelElement: ModelElement, clientX: number, clientY: number ): ModelRange {\n\tconst model = editor.model;\n\n\treturn model.createRange(\n\t\tmodel.createPositionAt(\n\t\t\tmodelElement as ModelElement,\n\t\t\tfindElementSide( editor, modelElement, clientX, clientY )\n\t\t)\n\t);\n}\n\n/**\n * Resolves whether drop marker should be before or after the given element.\n */\nfunction findElementSide( editor: Editor, modelElement: ModelElement, clientX: number, clientY: number ): 'before' | 'after' {\n\tconst mapper = editor.editing.mapper;\n\tconst domConverter = editor.editing.view.domConverter;\n\n\tconst viewElement = mapper.toViewElement( modelElement )!;\n\tconst domElement = domConverter.mapViewToDom( viewElement )!;\n\tconst rect = new Rect( domElement );\n\n\tif ( editor.model.schema.isInline( modelElement ) ) {\n\t\treturn clientX < ( rect.left + rect.right ) / 2 ? 'before' : 'after';\n\t} else {\n\t\treturn clientY < ( rect.top + rect.bottom ) / 2 ? 'before' : 'after';\n\t}\n}\n\n/**\n * Returns the closest model element for the specified view element.\n */\nfunction getClosestMappedModelElement( editor: Editor, element: ViewElement ): ModelElement {\n\tconst mapper = editor.editing.mapper;\n\tconst view = editor.editing.view;\n\n\tconst targetModelElement = mapper.toModelElement( element );\n\n\tif ( targetModelElement ) {\n\t\treturn targetModelElement;\n\t}\n\n\t// Find mapped ancestor if the target is inside not mapped element (for example inline code element).\n\tconst viewPosition = view.createPositionBefore( element );\n\tconst viewElement = mapper.findMappedViewAncestor( viewPosition );\n\n\treturn mapper.toModelElement( viewElement )!;\n}\n\n/**\n * Returns the closest scrollable ancestor DOM element.\n *\n * It is assumed that `domNode` is attached to the document.\n */\nfunction findScrollableElement( domNode: HTMLElement ): HTMLElement {\n\tlet domElement: HTMLElement = domNode;\n\n\tdo {\n\t\tdomElement = domElement.parentElement!;\n\n\t\tconst overflow = global.window.getComputedStyle( domElement ).overflowY;\n\n\t\tif ( overflow == 'auto' || overflow == 'scroll' ) {\n\t\t\tbreak;\n\t\t}\n\t} while ( domElement.tagName != 'BODY' );\n\n\treturn domElement;\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/dragdropblocktoolbar\n */\n\nimport { Plugin } from '@ckeditor/ckeditor5-core';\n\nimport {\n\tenv,\n\tglobal,\n\tDomEmitterMixin,\n\ttype ObservableChangeEvent,\n\ttype DomEmitter\n} from '@ckeditor/ckeditor5-utils';\n\nimport type { BlockToolbar } from '@ckeditor/ckeditor5-ui';\n\nimport { ClipboardObserver } from './clipboardobserver.js';\n\n/**\n * Integration of a block Drag and Drop support with the block toolbar.\n *\n * @internal\n */\nexport class DragDropBlockToolbar extends Plugin {\n\t/**\n\t * Whether current dragging is started by block toolbar button dragging.\n\t */\n\tprivate _isBlockDragging = false;\n\n\t/**\n\t * DOM Emitter.\n\t */\n\tprivate _domEmitter: DomEmitter = new ( DomEmitterMixin() )();\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'DragDropBlockToolbar' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\n\t\tthis.listenTo<ObservableChangeEvent<boolean>>( editor, 'change:isReadOnly', ( evt, name, isReadOnly ) => {\n\t\t\tif ( isReadOnly ) {\n\t\t\t\tthis.forceDisabled( 'readOnlyMode' );\n\t\t\t\tthis._isBlockDragging = false;\n\t\t\t} else {\n\t\t\t\tthis.clearForceDisabled( 'readOnlyMode' );\n\t\t\t}\n\t\t} );\n\n\t\tif ( env.isAndroid ) {\n\t\t\tthis.forceDisabled( 'noAndroidSupport' );\n\t\t}\n\n\t\tif ( editor.plugins.has( 'BlockToolbar' ) ) {\n\t\t\tconst blockToolbar: BlockToolbar = editor.plugins.get( 'BlockToolbar' );\n\t\t\tconst element = blockToolbar.buttonView.element!;\n\n\t\t\tthis._domEmitter.listenTo( element, 'dragstart', ( evt, data ) => this._handleBlockDragStart( data ) );\n\t\t\tthis._domEmitter.listenTo( global.document, 'dragover', ( evt, data ) => this._handleBlockDragging( data ) );\n\t\t\tthis._domEmitter.listenTo( global.document, 'drop', ( evt, data ) => this._handleBlockDragging( data ) );\n\t\t\tthis._domEmitter.listenTo( global.document, 'dragend', () => this._handleBlockDragEnd(), { useCapture: true } );\n\n\t\t\tif ( this.isEnabled ) {\n\t\t\t\telement.setAttribute( 'draggable', 'true' );\n\t\t\t}\n\n\t\t\tthis.on<ObservableChangeEvent<boolean>>( 'change:isEnabled', ( evt, name, isEnabled ) => {\n\t\t\t\telement.setAttribute( 'draggable', isEnabled ? 'true' : 'false' );\n\t\t\t} );\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override destroy(): void {\n\t\tthis._domEmitter.stopListening();\n\n\t\treturn super.destroy();\n\t}\n\n\t/**\n\t * The `dragstart` event handler.\n\t */\n\tprivate _handleBlockDragStart( domEvent: DragEvent ): void {\n\t\tif ( !this.isEnabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst model = this.editor.model;\n\t\tconst selection = model.document.selection;\n\t\tconst view = this.editor.editing.view;\n\n\t\tconst blocks = Array.from( selection.getSelectedBlocks() );\n\t\tconst draggedRange = model.createRange(\n\t\t\tmodel.createPositionBefore( blocks[ 0 ] ),\n\t\t\tmodel.createPositionAfter( blocks[ blocks.length - 1 ] )\n\t\t);\n\n\t\tmodel.change( writer => writer.setSelection( draggedRange ) );\n\n\t\tthis._isBlockDragging = true;\n\n\t\tview.focus();\n\t\tview.getObserver( ClipboardObserver )!.onDomEvent( domEvent );\n\t}\n\n\t/**\n\t * The `dragover` and `drop` event handler.\n\t */\n\tprivate _handleBlockDragging( domEvent: DragEvent ): void {\n\t\tif ( !this.isEnabled || !this._isBlockDragging ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst clientX = domEvent.clientX + ( this.editor.locale.contentLanguageDirection == 'ltr' ? 100 : -100 );\n\t\tconst clientY = domEvent.clientY;\n\t\tconst target = document.elementFromPoint( clientX, clientY );\n\t\tconst view = this.editor.editing.view;\n\n\t\tif ( !target || !target.closest( '.ck-editor__editable' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tview.getObserver( ClipboardObserver )!.onDomEvent( {\n\t\t\t...domEvent,\n\t\t\ttype: domEvent.type,\n\t\t\tdataTransfer: domEvent.dataTransfer,\n\t\t\ttarget,\n\t\t\tclientX,\n\t\t\tclientY,\n\t\t\tpreventDefault: () => domEvent.preventDefault(),\n\t\t\tstopPropagation: () => domEvent.stopPropagation()\n\t\t} );\n\t}\n\n\t/**\n\t * The `dragend` event handler.\n\t */\n\tprivate _handleBlockDragEnd(): void {\n\t\tthis._isBlockDragging = false;\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/dragdrop\n */\n\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\n\nimport {\n\tModelLiveRange,\n\tPointerObserver,\n\ttype ViewDataTransfer,\n\ttype ModelElement,\n\ttype Model,\n\ttype ModelRange,\n\ttype ModelPosition,\n\ttype ViewElement,\n\ttype ViewDocumentDomEventData,\n\ttype ViewDocumentPointerDownEvent,\n\ttype ViewDocumentPointerUpEvent\n} from '@ckeditor/ckeditor5-engine';\n\nimport {\n\tWidget,\n\tisWidget,\n\ttype WidgetToolbarRepository\n} from '@ckeditor/ckeditor5-widget';\n\nimport {\n\tenv,\n\tuid,\n\tglobal,\n\tcreateElement,\n\tDomEmitterMixin,\n\tdelay,\n\tRect,\n\ttype DelayedFunc,\n\ttype ObservableChangeEvent,\n\ttype DomEmitter\n} from '@ckeditor/ckeditor5-utils';\n\nimport {\n\tClipboardPipeline,\n\ttype ClipboardContentInsertionEvent\n} from './clipboardpipeline.js';\n\nimport {\n\tClipboardObserver,\n\ttype ViewDocumentDragEndEvent,\n\ttype ViewDocumentDragEnterEvent,\n\ttype ViewDocumentDraggingEvent,\n\ttype ViewDocumentDragLeaveEvent,\n\ttype ViewDocumentDragStartEvent,\n\ttype ViewDocumentClipboardInputEvent\n} from './clipboardobserver.js';\n\nimport { DragDropTarget } from './dragdroptarget.js';\nimport { DragDropBlockToolbar } from './dragdropblocktoolbar.js';\n\nimport '../theme/clipboard.css';\n\n// Drag and drop events overview:\n//\n// ┌──────────────────┐\n// │ mousedown │ Sets the draggable attribute.\n// └─────────┬────────┘\n// │\n// └─────────────────────┐\n// │ │\n// │ ┌─────────V────────┐\n// │ │ mouseup │ Dragging did not start, removes the draggable attribute.\n// │ └──────────────────┘\n// │\n// ┌─────────V────────┐ Retrieves the selected model.DocumentFragment\n// │ dragstart │ and converts it to view.DocumentFragment.\n// └─────────┬────────┘\n// │\n// ┌─────────V────────┐ Processes view.DocumentFragment to text/html and text/plain\n// │ clipboardOutput │ and stores the results in data.dataTransfer.\n// └─────────┬────────┘\n// │\n// │ DOM dragover\n// ┌────────────┐\n// │ │\n// ┌─────────V────────┐ │\n// │ dragging │ │ Updates the drop target marker.\n// └─────────┬────────┘ │\n// │ │\n// ┌─────────────└────────────┘\n// │ │ │\n// │ ┌─────────V────────┐ │\n// │ │ dragleave │ │ Removes the drop target marker.\n// │ └─────────┬────────┘ │\n// │ │ │\n// ┌───│─────────────┘ │\n// │ │ │ │\n// │ │ ┌─────────V────────┐ │\n// │ │ │ dragenter │ │ Focuses the editor view.\n// │ │ └─────────┬────────┘ │\n// │ │ │ │\n// │ │ └────────────┘\n// │ │\n// │ └─────────────┐\n// │ │ │\n// │ │ ┌─────────V────────┐\n// └───┐ │ drop │ (The default handler of the clipboard pipeline).\n// │ └─────────┬────────┘\n// │ │\n// │ ┌─────────V────────┐ Resolves the final data.targetRanges.\n// │ │ clipboardInput │ Aborts if dropping on dragged content.\n// │ └─────────┬────────┘\n// │ │\n// │ ┌─────────V────────┐\n// │ │ clipboardInput │ (The default handler of the clipboard pipeline).\n// │ └─────────┬────────┘\n// │ │\n// │ ┌───────────V───────────┐\n// │ │ inputTransformation │ (The default handler of the clipboard pipeline).\n// │ └───────────┬───────────┘\n// │ │\n// │ ┌──────────V──────────┐\n// │ │ contentInsertion │ Updates the document selection to drop range.\n// │ └──────────┬──────────┘\n// │ │\n// │ ┌──────────V──────────┐\n// │ │ contentInsertion │ (The default handler of the clipboard pipeline).\n// │ └──────────┬──────────┘\n// │ │\n// │ ┌──────────V──────────┐\n// │ │ contentInsertion │ Removes the content from the original range if the insertion was successful.\n// │ └──────────┬──────────┘\n// │ │\n// └─────────────┐\n// │\n// ┌─────────V────────┐\n// │ dragend │ Removes the drop marker and cleans the state.\n// └──────────────────┘\n//\n\n/**\n * The drag and drop feature. It works on top of the {@link module:clipboard/clipboardpipeline~ClipboardPipeline}.\n *\n * Read more about the clipboard integration in the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n *\n * @internal\n */\nexport class DragDrop extends Plugin {\n\t/**\n\t * The live range over the original content that is being dragged.\n\t */\n\tprivate _draggedRange!: ModelLiveRange | null;\n\n\t/**\n\t * The UID of current dragging that is used to verify if the drop started in the same editor as the drag start.\n\t *\n\t * **Note**: This is a workaround for broken 'dragend' events (they are not fired if the source text node got removed).\n\t */\n\tprivate _draggingUid!: string;\n\n\t/**\n\t * The reference to the model element that currently has a `draggable` attribute set (it is set while dragging).\n\t */\n\tprivate _draggableElement!: ModelElement | null;\n\n\t/**\n\t * A delayed callback removing draggable attributes.\n\t */\n\tprivate _clearDraggableAttributesDelayed: DelayedFunc<() => void> = delay( () => this._clearDraggableAttributes(), 40 );\n\n\t/**\n\t * Whether the dragged content can be dropped only in block context.\n\t */\n\t// TODO handle drag from other editor instance\n\t// TODO configure to use block, inline or both\n\tprivate _blockMode: boolean = false;\n\n\t/**\n\t * DOM Emitter.\n\t */\n\tprivate _domEmitter: DomEmitter = new ( DomEmitterMixin() )();\n\n\t/**\n\t * The DOM element used to generate dragged preview image.\n\t */\n\tprivate _previewContainer?: HTMLElement;\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'DragDrop' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ ClipboardPipeline, Widget, DragDropTarget, DragDropBlockToolbar ]> {\n\t\treturn [ ClipboardPipeline, Widget, DragDropTarget, DragDropBlockToolbar ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\t\tconst view = editor.editing.view;\n\n\t\tthis._draggedRange = null;\n\t\tthis._draggingUid = '';\n\t\tthis._draggableElement = null;\n\n\t\tview.addObserver( ClipboardObserver );\n\t\tview.addObserver( PointerObserver );\n\n\t\tthis._setupDragging();\n\t\tthis._setupContentInsertionIntegration();\n\t\tthis._setupClipboardInputIntegration();\n\t\tthis._setupDraggableAttributeHandling();\n\n\t\tthis.listenTo<ObservableChangeEvent<boolean>>( editor, 'change:isReadOnly', ( evt, name, isReadOnly ) => {\n\t\t\tif ( isReadOnly ) {\n\t\t\t\tthis.forceDisabled( 'readOnlyMode' );\n\t\t\t} else {\n\t\t\t\tthis.clearForceDisabled( 'readOnlyMode' );\n\t\t\t}\n\t\t} );\n\n\t\tthis.on<ObservableChangeEvent<boolean>>( 'change:isEnabled', ( evt, name, isEnabled ) => {\n\t\t\tif ( !isEnabled ) {\n\t\t\t\tthis._finalizeDragging( false );\n\t\t\t}\n\t\t} );\n\n\t\tif ( env.isAndroid ) {\n\t\t\tthis.forceDisabled( 'noAndroidSupport' );\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override destroy(): void {\n\t\tif ( this._draggedRange ) {\n\t\t\tthis._draggedRange.detach();\n\t\t\tthis._draggedRange = null;\n\t\t}\n\n\t\tif ( this._previewContainer ) {\n\t\t\tthis._previewContainer.remove();\n\t\t}\n\n\t\tthis._domEmitter.stopListening();\n\t\tthis._clearDraggableAttributesDelayed.cancel();\n\n\t\treturn super.destroy();\n\t}\n\n\t/**\n\t * Drag and drop events handling.\n\t */\n\tprivate _setupDragging(): void {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst view = editor.editing.view;\n\t\tconst viewDocument = view.document;\n\t\tconst dragDropTarget = editor.plugins.get( DragDropTarget );\n\n\t\t// The handler for the drag start; it is responsible for setting data transfer object.\n\t\tthis.listenTo<ViewDocumentDragStartEvent>( viewDocument, 'dragstart', ( evt, data ) => {\n\t\t\t// Don't drag the editable element itself.\n\t\t\tif ( data.target?.is( 'editableElement' ) ) {\n\t\t\t\tdata.preventDefault();\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._prepareDraggedRange( data.target );\n\n\t\t\tif ( !this._draggedRange ) {\n\t\t\t\tdata.preventDefault();\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._draggingUid = uid();\n\n\t\t\tconst canEditAtDraggedRange = this.isEnabled && editor.model.canEditAt( this._draggedRange );\n\n\t\t\tdata.dataTransfer.effectAllowed = canEditAtDraggedRange ? 'copyMove' : 'copy';\n\t\t\tdata.dataTransfer.setData( 'application/ckeditor5-dragging-uid', this._draggingUid );\n\n\t\t\tconst draggedSelection = model.createSelection( this._draggedRange.toRange() );\n\t\t\tconst clipboardPipeline: ClipboardPipeline = this.editor.plugins.get( 'ClipboardPipeline' );\n\n\t\t\tclipboardPipeline._fireOutputTransformationEvent( data.dataTransfer, draggedSelection, 'dragstart' );\n\n\t\t\tconst { dataTransfer, domTarget, domEvent } = data;\n\t\t\tconst { clientX } = domEvent;\n\n\t\t\tthis._updatePreview( { dataTransfer, domTarget, clientX } );\n\n\t\t\tdata.stopPropagation();\n\n\t\t\tif ( !canEditAtDraggedRange ) {\n\t\t\t\tthis._draggedRange.detach();\n\t\t\t\tthis._draggedRange = null;\n\t\t\t\tthis._draggingUid = '';\n\t\t\t}\n\t\t}, { priority: 'low' } );\n\n\t\t// The handler for finalizing drag and drop. It should always be triggered after dragging completes\n\t\t// even if it was completed in a different application.\n\t\t// Note: This is not fired if source text node got removed while downcasting a marker.\n\t\tthis.listenTo<ViewDocumentDragEndEvent>( viewDocument, 'dragend', ( evt, data ) => {\n\t\t\tthis._finalizeDragging( !data.dataTransfer.isCanceled && data.dataTransfer.dropEffect == 'move' );\n\t\t}, { priority: 'low' } );\n\n\t\t// Reset block dragging mode even if dropped outside the editable.\n\t\tthis._domEmitter.listenTo( global.document, 'dragend', () => {\n\t\t\tthis._blockMode = false;\n\t\t}, { useCapture: true } );\n\n\t\t// Dragging over the editable.\n\t\tthis.listenTo<ViewDocumentDragEnterEvent>( viewDocument, 'dragenter', () => {\n\t\t\tif ( !this.isEnabled ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tview.focus();\n\t\t} );\n\n\t\t// Dragging out of the editable.\n\t\tthis.listenTo<ViewDocumentDragLeaveEvent>( viewDocument, 'dragleave', () => {\n\t\t\t// We do not know if the mouse left the editor or just some element in it, so let us wait a few milliseconds\n\t\t\t// to check if 'dragover' is not fired.\n\t\t\tdragDropTarget.removeDropMarkerDelayed();\n\t\t} );\n\n\t\t// Handler for moving dragged content over the target area.\n\t\tthis.listenTo<ViewDocumentDraggingEvent>( viewDocument, 'dragging', ( evt, data ) => {\n\t\t\tif ( !this.isEnabled ) {\n\t\t\t\tdata.dataTransfer.dropEffect = 'none';\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { clientX, clientY } = ( data as ViewDocumentDomEventData<DragEvent> ).domEvent;\n\n\t\t\tconst targetRange = dragDropTarget.updateDropMarker(\n\t\t\t\tdata.target,\n\t\t\t\tdata.targetRanges,\n\t\t\t\tclientX,\n\t\t\t\tclientY,\n\t\t\t\tthis._blockMode,\n\t\t\t\tthis._draggedRange\n\t\t\t);\n\n\t\t\t// Do not allow dropping if there is no valid target range (e.g., dropping on non-editable place).\n\t\t\tif ( !targetRange ) {\n\t\t\t\tdata.dataTransfer.dropEffect = 'none';\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If this is content being dragged from another editor, moving out of current editor instance\n\t\t\t// is not possible until 'dragend' event case will be fixed.\n\t\t\tif ( !this._draggedRange ) {\n\t\t\t\tdata.dataTransfer.dropEffect = 'copy';\n\t\t\t}\n\n\t\t\t// In Firefox it is already set and effect allowed remains the same as originally set.\n\t\t\tif ( !env.isGecko ) {\n\t\t\t\tif ( data.dataTransfer.effectAllowed == 'copy' ) {\n\t\t\t\t\tdata.dataTransfer.dropEffect = 'copy';\n\t\t\t\t} else if ( [ 'all', 'copyMove' ].includes( data.dataTransfer.effectAllowed ) ) {\n\t\t\t\t\tdata.dataTransfer.dropEffect = 'move';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tevt.stop();\n\t\t}, { priority: 'low' } );\n\t}\n\n\t/**\n\t * Integration with the `clipboardInput` event.\n\t */\n\tprivate _setupClipboardInputIntegration(): void {\n\t\tconst editor = this.editor;\n\t\tconst view = editor.editing.view;\n\t\tconst viewDocument = view.document;\n\t\tconst dragDropTarget = editor.plugins.get( DragDropTarget );\n\n\t\t// Update the event target ranges and abort dropping if dropping over itself.\n\t\tthis.listenTo<ViewDocumentClipboardInputEvent>( viewDocument, 'clipboardInput', ( evt, data ) => {\n\t\t\tif ( data.method != 'drop' ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { clientX, clientY } = ( data as ViewDocumentDomEventData<DragEvent> ).domEvent;\n\t\t\tconst targetRange = dragDropTarget.getFinalDropRange(\n\t\t\t\tdata.target,\n\t\t\t\tdata.targetRanges,\n\t\t\t\tclientX,\n\t\t\t\tclientY,\n\t\t\t\tthis._blockMode,\n\t\t\t\tthis._draggedRange\n\t\t\t);\n\n\t\t\tif ( !targetRange ) {\n\t\t\t\tthis._finalizeDragging( false );\n\t\t\t\tevt.stop();\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Since we cannot rely on the drag end event, we must check if the local drag range is from the current drag and drop\n\t\t\t// or it is from some previous not cleared one.\n\t\t\tif ( this._draggedRange && this._draggingUid != data.dataTransfer.getData( 'application/ckeditor5-dragging-uid' ) ) {\n\t\t\t\tthis._draggedRange.detach();\n\t\t\t\tthis._draggedRange = null;\n\t\t\t\tthis._draggingUid = '';\n\t\t\t}\n\n\t\t\t// Do not do anything if some content was dragged within the same document to the same position.\n\t\t\tconst isMove = getFinalDropEffect( data.dataTransfer ) == 'move';\n\n\t\t\tif ( isMove && this._draggedRange && this._draggedRange.containsRange( targetRange, true ) ) {\n\t\t\t\tthis._finalizeDragging( false );\n\t\t\t\tevt.stop();\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Override the target ranges with the one adjusted to the best one for a drop.\n\t\t\tdata.targetRanges = [ editor.editing.mapper.toViewRange( targetRange ) ];\n\t\t}, { priority: 'high' } );\n\t}\n\n\t/**\n\t * Integration with the `contentInsertion` event of the clipboard pipeline.\n\t */\n\tprivate _setupContentInsertionIntegration(): void {\n\t\tconst clipboardPipeline = this.editor.plugins.get( ClipboardPipeline );\n\n\t\tclipboardPipeline.on<ClipboardContentInsertionEvent>( 'contentInsertion', ( evt, data ) => {\n\t\t\tif ( !this.isEnabled || data.method !== 'drop' ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Update the selection to the target range in the same change block to avoid selection post-fixing\n\t\t\t// and to be able to clone text attributes for plain text dropping.\n\t\t\tconst ranges = data.targetRanges!.map( viewRange => this.editor.editing.mapper.toModelRange( viewRange ) );\n\n\t\t\tthis.editor.model.change( writer => writer.setSelection( ranges ) );\n\t\t}, { priority: 'high' } );\n\n\t\tclipboardPipeline.on<ClipboardContentInsertionEvent>( 'contentInsertion', ( evt, data ) => {\n\t\t\tif ( !this.isEnabled || data.method !== 'drop' ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remove dragged range content, remove markers, clean after dragging.\n\t\t\tconst isMove = getFinalDropEffect( data.dataTransfer ) == 'move';\n\n\t\t\t// Whether any content was inserted (insertion might fail if the schema is disallowing some elements\n\t\t\t// (for example an image caption allows only the content of a block but not blocks themselves.\n\t\t\t// Some integrations might not return valid range (i.e., table pasting).\n\t\t\tconst isSuccess = !data.resultRange || !data.resultRange.isCollapsed;\n\n\t\t\tthis._finalizeDragging( isSuccess && isMove );\n\t\t}, { priority: 'lowest' } );\n\t}\n\n\t/**\n\t * Adds listeners that add the `draggable` attribute to the elements while the mouse button is down so the dragging could start.\n\t */\n\tprivate _setupDraggableAttributeHandling(): void {\n\t\tconst editor = this.editor;\n\t\tconst view = editor.editing.view;\n\t\tconst viewDocument = view.document;\n\n\t\t// Add the 'draggable' attribute to the widget while pressing the selection handle.\n\t\t// This is required for widgets to be draggable. In Chrome it will enable dragging text nodes.\n\t\tthis.listenTo<ViewDocumentPointerDownEvent>( viewDocument, 'pointerdown', ( evt, data ) => {\n\t\t\t// The lack of data can be caused by editor tests firing fake mouse events. This should not occur\n\t\t\t// in real-life scenarios but this greatly simplifies editor tests that would otherwise fail a lot.\n\t\t\tif ( env.isAndroid || !data ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._clearDraggableAttributesDelayed.cancel();\n\n\t\t\t// Check if this is a mousedown over the widget (but not a nested editable).\n\t\t\tlet draggableElement = findDraggableWidget( data.target );\n\n\t\t\t// Note: There is a limitation that if more than a widget is selected (a widget and some text)\n\t\t\t// and dragging starts on the widget, then only the widget is dragged.\n\n\t\t\t// If this was not a widget then we should check if we need to drag some text content.\n\t\t\t// In Chrome set a 'draggable' attribute on closest editable to allow immediate dragging of the selected text range.\n\t\t\t// In Firefox this is not needed. In Safari it makes the whole editable draggable (not just textual content).\n\t\t\t// Disabled in read-only mode because draggable=\"true\" + contenteditable=\"false\" results\n\t\t\t// in not firing selectionchange event ever, which makes the selection stuck in read-only mode.\n\t\t\tif ( env.isBlink && !editor.isReadOnly && !draggableElement && !viewDocument.selection.isCollapsed ) {\n\t\t\t\tconst selectedElement = viewDocument.selection.getSelectedElement();\n\n\t\t\t\tif ( !selectedElement || !isWidget( selectedElement ) ) {\n\t\t\t\t\tdraggableElement = viewDocument.selection.editableElement;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( draggableElement ) {\n\t\t\t\tview.change( writer => {\n\t\t\t\t\twriter.setAttribute( 'draggable', 'true', draggableElement! );\n\t\t\t\t} );\n\n\t\t\t\t// Keep the reference to the model element in case the view element gets removed while dragging.\n\t\t\t\tthis._draggableElement = editor.editing.mapper.toModelElement( draggableElement )!;\n\t\t\t}\n\t\t} );\n\n\t\t// Remove the draggable attribute in case no dragging started (only mousedown + mouseup).\n\t\tthis.listenTo<ViewDocumentPointerUpEvent>( viewDocument, 'pointerup', () => {\n\t\t\tif ( !env.isAndroid ) {\n\t\t\t\tthis._clearDraggableAttributesDelayed();\n\t\t\t}\n\t\t} );\n\t}\n\n\t/**\n\t * Removes the `draggable` attribute from the element that was used for dragging.\n\t */\n\tprivate _clearDraggableAttributes(): void {\n\t\tconst editing = this.editor.editing;\n\n\t\tediting.view.change( writer => {\n\t\t\t// Remove 'draggable' attribute.\n\t\t\tif ( this._draggableElement && this._draggableElement.root.rootName != '$graveyard' ) {\n\t\t\t\twriter.removeAttribute( 'draggable', editing.mapper.toViewElement( this._draggableElement )! );\n\t\t\t}\n\n\t\t\tthis._draggableElement = null;\n\t\t} );\n\t}\n\n\t/**\n\t * Deletes the dragged content from its original range and clears the dragging state.\n\t *\n\t * @param moved Whether the move succeeded.\n\t */\n\tprivate _finalizeDragging( moved: boolean ): void {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst dragDropTarget = editor.plugins.get( DragDropTarget );\n\n\t\tdragDropTarget.removeDropMarker();\n\t\tthis._clearDraggableAttributes();\n\n\t\tif ( editor.plugins.has( 'WidgetToolbarRepository' ) ) {\n\t\t\tconst widgetToolbarRepository: WidgetToolbarRepository = editor.plugins.get( 'WidgetToolbarRepository' );\n\n\t\t\twidgetToolbarRepository.clearForceDisabled( 'dragDrop' );\n\t\t}\n\n\t\tthis._draggingUid = '';\n\n\t\tif ( this._previewContainer ) {\n\t\t\tthis._previewContainer.remove();\n\t\t\tthis._previewContainer = undefined;\n\t\t}\n\n\t\tif ( !this._draggedRange ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Delete moved content.\n\t\tif ( moved && this.isEnabled ) {\n\t\t\tmodel.change( writer => {\n\t\t\t\tconst selection = model.createSelection( this._draggedRange );\n\n\t\t\t\tmodel.deleteContent( selection, { doNotAutoparagraph: true } );\n\n\t\t\t\t// Check result selection if it does not require auto-paragraphing of empty container.\n\t\t\t\tconst selectionParent = selection.getFirstPosition()!.parent as ModelElement;\n\n\t\t\t\tif (\n\t\t\t\t\tselectionParent.isEmpty &&\n\t\t\t\t\t!model.schema.checkChild( selectionParent, '$text' ) &&\n\t\t\t\t\tmodel.schema.checkChild( selectionParent, 'paragraph' )\n\t\t\t\t) {\n\t\t\t\t\twriter.insertElement( 'paragraph', selectionParent, 0 );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tthis._draggedRange.detach();\n\t\tthis._draggedRange = null;\n\t}\n\n\t/**\n\t * Sets the dragged source range based on event target and document selection.\n\t */\n\tprivate _prepareDraggedRange( target: ViewElement ): void {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst selection = model.document.selection;\n\n\t\t// Check if this is dragstart over the widget (but not a nested editable).\n\t\tconst draggableWidget = target ? findDraggableWidget( target ) : null;\n\n\t\tif ( draggableWidget ) {\n\t\t\tconst modelElement = editor.editing.mapper.toModelElement( draggableWidget )!;\n\n\t\t\tthis._draggedRange = ModelLiveRange.fromRange( model.createRangeOn( modelElement ) );\n\t\t\tthis._blockMode = model.schema.isBlock( modelElement );\n\n\t\t\t// Disable toolbars so they won't obscure the drop area.\n\t\t\tif ( editor.plugins.has( 'WidgetToolbarRepository' ) ) {\n\t\t\t\tconst widgetToolbarRepository: WidgetToolbarRepository = editor.plugins.get( 'WidgetToolbarRepository' );\n\n\t\t\t\twidgetToolbarRepository.forceDisabled( 'dragDrop' );\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// If this was not a widget we should check if we need to drag some text content.\n\t\tif ( selection.isCollapsed && !( selection.getFirstPosition()!.parent as ModelElement ).isEmpty ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst blocks = Array.from( selection.getSelectedBlocks() );\n\t\tconst draggedRange = selection.getFirstRange()!;\n\n\t\tif ( blocks.length == 0 ) {\n\t\t\tthis._draggedRange = ModelLiveRange.fromRange( draggedRange );\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst blockRange = getRangeIncludingFullySelectedParents( model, blocks );\n\n\t\tif ( blocks.length > 1 ) {\n\t\t\tthis._draggedRange = ModelLiveRange.fromRange( blockRange );\n\t\t\tthis._blockMode = true;\n\t\t\t// TODO block mode for dragging from outside editor? or inline? or both?\n\t\t} else {\n\t\t\t/* v8 ignore else -- @preserve */\n\t\t\tif ( blocks.length == 1 ) {\n\t\t\t\tconst touchesBlockEdges = draggedRange.start.isTouching( blockRange.start ) &&\n\t\t\t\t\tdraggedRange.end.isTouching( blockRange.end );\n\n\t\t\t\tthis._draggedRange = ModelLiveRange.fromRange( touchesBlockEdges ? blockRange : draggedRange );\n\t\t\t\tthis._blockMode = touchesBlockEdges;\n\t\t\t}\n\t\t}\n\n\t\tmodel.change( writer => writer.setSelection( this._draggedRange!.toRange() ) );\n\t}\n\n\t/**\n\t * Updates the dragged preview image.\n\t */\n\tprivate _updatePreview( {\n\t\tdataTransfer,\n\t\tdomTarget,\n\t\tclientX\n\t}: {\n\t\tdataTransfer: ViewDataTransfer;\n\t\tdomTarget: HTMLElement;\n\t\tclientX: number;\n\t} ): void {\n\t\tconst view = this.editor.editing.view;\n\t\tconst editable = view.document.selection.editableElement!;\n\t\tconst domEditable = view.domConverter.mapViewToDom( editable )!;\n\t\tconst computedStyle = global.window.getComputedStyle( domEditable );\n\n\t\tif ( !this._previewContainer ) {\n\t\t\tthis._previewContainer = createElement( global.document, 'div', {\n\t\t\t\tstyle: 'position: fixed; left: -999999px;'\n\t\t\t} );\n\n\t\t\tglobal.document.body.appendChild( this._previewContainer );\n\t\t} else if ( this._previewContainer.firstElementChild ) {\n\t\t\tthis._previewContainer.removeChild( this._previewContainer.firstElementChild );\n\t\t}\n\n\t\tconst preview = createElement( global.document, 'div' );\n\n\t\tpreview.className = 'ck ck-content ck-clipboard-preview';\n\n\t\tconst domRect = new Rect( domEditable );\n\t\tconst domEditablePaddingLeft = parseFloat( computedStyle.paddingLeft );\n\t\tconst domEditablePaddingRight = parseFloat( computedStyle.paddingRight );\n\t\tconst editableWidth = parseFloat( computedStyle.width ) - domEditablePaddingLeft - domEditablePaddingRight;\n\n\t\t// Dragging by the drag handle outside editable element.\n\t\tif ( !domEditable.contains( domTarget ) ) {\n\t\t\tif ( !env.isiOS ) {\n\t\t\t\tconst offsetLeft = domRect.left - clientX + domEditablePaddingLeft;\n\n\t\t\t\tpreview.style.width = `${ editableWidth + offsetLeft }px`;\n\t\t\t\tpreview.style.paddingLeft = `${ offsetLeft }px`;\n\t\t\t} else {\n\t\t\t\t// Without a padding as on iOS preview have a background and padding would be visible.\n\t\t\t\tpreview.style.width = `${ editableWidth }px`;\n\t\t\t\tpreview.style.backgroundColor = 'var(--ck-color-base-background)';\n\t\t\t}\n\t\t} else if ( env.isiOS ) {\n\t\t\t// Custom preview for iOS. Note that it must have some dimensions for iOS to start dragging element.\n\t\t\tpreview.style.maxWidth = `${ editableWidth }px`;\n\t\t\tpreview.style.padding = '10px';\n\t\t\tpreview.style.minWidth = '200px';\n\t\t\tpreview.style.minHeight = '20px';\n\t\t\tpreview.style.boxSizing = 'border-box';\n\t\t\tpreview.style.backgroundColor = 'var(--ck-color-base-background)';\n\t\t} else {\n\t\t\t// If domTarget is inside the editable root, browsers will display the preview correctly by themselves.\n\t\t\treturn;\n\t\t}\n\n\t\tview.domConverter.setContentOf( preview, dataTransfer.getData( 'text/html' ) );\n\n\t\tdataTransfer.setDragImage( preview, 0, 0 );\n\n\t\tthis._previewContainer.appendChild( preview );\n\t}\n}\n\n/**\n * Returns the drop effect that should be a result of dragging the content.\n * This function is handling a quirk when checking the effect in the 'drop' DOM event.\n */\nfunction getFinalDropEffect( dataTransfer: ViewDataTransfer ): ViewDataTransfer[ 'dropEffect' ] {\n\tif ( env.isGecko ) {\n\t\treturn dataTransfer.dropEffect;\n\t}\n\n\treturn [ 'all', 'copyMove' ].includes( dataTransfer.effectAllowed ) ? 'move' : 'copy';\n}\n\n/**\n * Returns a widget element that should be dragged.\n */\nfunction findDraggableWidget( target: ViewElement ): ViewElement | null {\n\t// This is directly an editable so not a widget for sure.\n\tif ( target.is( 'editableElement' ) ) {\n\t\treturn null;\n\t}\n\n\t// TODO: Let's have a isWidgetSelectionHandleDomElement() helper in ckeditor5-widget utils.\n\tif ( target.hasClass( 'ck-widget__selection-handle' ) ) {\n\t\treturn target.findAncestor( isWidget );\n\t}\n\n\t// Direct hit on a widget.\n\tif ( isWidget( target ) ) {\n\t\treturn target;\n\t}\n\n\t// Find closest ancestor that is either a widget or an editable element...\n\tconst ancestor = target.findAncestor( node => isWidget( node ) || node.is( 'editableElement' ) )!;\n\n\t// ...and if closer was the widget then enable dragging it.\n\tif ( isWidget( ancestor ) ) {\n\t\treturn ancestor;\n\t}\n\n\treturn null;\n}\n\n/**\n * Recursively checks if common parent of provided elements doesn't have any other children. If that's the case,\n * it returns range including this parent. Otherwise, it returns only the range from first to last element.\n *\n * Example:\n *\n * <blockQuote>\n * <paragraph>[Test 1</paragraph>\n * <paragraph>Test 2</paragraph>\n * <paragraph>Test 3]</paragraph>\n * <blockQuote>\n *\n * Because all elements inside the `blockQuote` are selected, the range is extended to include the `blockQuote` too.\n * If only first and second paragraphs would be selected, the range would not include it.\n */\nfunction getRangeIncludingFullySelectedParents( model: Model, elements: Array<ModelElement> ): ModelRange {\n\tconst firstElement = elements[ 0 ];\n\tconst lastElement = elements[ elements.length - 1 ];\n\tconst parent = firstElement.getCommonAncestor( lastElement );\n\tconst startPosition: ModelPosition = model.createPositionBefore( firstElement );\n\tconst endPosition: ModelPosition = model.createPositionAfter( lastElement );\n\n\tif (\n\t\tparent &&\n\t\tparent.is( 'element' ) &&\n\t\t!model.schema.isLimit( parent )\n\t) {\n\t\tconst parentRange = model.createRangeOn( parent );\n\t\tconst touchesStart = startPosition.isTouching( parentRange.start );\n\t\tconst touchesEnd = endPosition.isTouching( parentRange.end );\n\n\t\tif ( touchesStart && touchesEnd ) {\n\t\t\t// Selection includes all elements in the parent.\n\t\t\treturn getRangeIncludingFullySelectedParents( model, [ parent ] );\n\t\t}\n\t}\n\n\treturn model.createRange( startPosition, endPosition );\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/pasteplaintext\n */\n\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\n\nimport type { ModelDocumentFragment, Model, ModelElement } from '@ckeditor/ckeditor5-engine';\n\nimport { ClipboardObserver } from './clipboardobserver.js';\nimport { ClipboardPipeline, type ClipboardContentInsertionEvent } from './clipboardpipeline.js';\n\n/**\n * The plugin detects the user's intention to paste plain text.\n *\n * For example, it detects the <kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>V</kbd> keystroke.\n */\nexport class PastePlainText extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'PastePlainText' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ ClipboardPipeline ]> {\n\t\treturn [ ClipboardPipeline ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst view = editor.editing.view;\n\t\tconst selection = model.document.selection;\n\n\t\tview.addObserver( ClipboardObserver );\n\n\t\teditor.plugins.get( ClipboardPipeline ).on<ClipboardContentInsertionEvent>( 'contentInsertion', ( evt, data ) => {\n\t\t\tif ( !isUnformattedInlineContent( data.content, model ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tmodel.change( writer => {\n\t\t\t\t// Formatting attributes should be preserved.\n\t\t\t\tconst textAttributes = Array.from( selection.getAttributes() )\n\t\t\t\t\t.filter( ( [ key ] ) => model.schema.getAttributeProperties( key ).isFormatting );\n\n\t\t\t\tif ( !selection.isCollapsed ) {\n\t\t\t\t\tmodel.deleteContent( selection, { doNotAutoparagraph: true } );\n\t\t\t\t}\n\n\t\t\t\t// Also preserve other attributes if they survived the content deletion (because they were not fully selected).\n\t\t\t\t// For example linkHref is not a formatting attribute but it should be preserved if pasted text was in the middle\n\t\t\t\t// of a link.\n\t\t\t\ttextAttributes.push( ...selection.getAttributes() );\n\n\t\t\t\tconst range = writer.createRangeIn( data.content );\n\n\t\t\t\tfor ( const item of range.getItems() ) {\n\t\t\t\t\tfor ( const attribute of textAttributes ) {\n\t\t\t\t\t\tif ( model.schema.checkAttribute( item, attribute[ 0 ] ) ) {\n\t\t\t\t\t\t\twriter.setAttribute( attribute[ 0 ], attribute[ 1 ], item );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n}\n\n/**\n * Returns true if specified `documentFragment` represents the unformatted inline content.\n */\nfunction isUnformattedInlineContent( documentFragment: ModelDocumentFragment, model: Model ): boolean {\n\tlet range = model.createRangeIn( documentFragment );\n\n\t// We consider three scenarios here. The document fragment may include:\n\t//\n\t// 1. Only text and inline objects. Then it could be unformatted inline content.\n\t// 2. Exactly one block element on top-level, eg. <p>Foobar</p> or <h2>Title</h2>.\n\t// In this case, check this element content, it could be treated as unformatted inline content.\n\t// 3. More block elements or block objects, then it is not unformatted inline content.\n\t//\n\t// We will check for scenario 2. specifically, and if it happens, we will unwrap it and follow with the regular algorithm.\n\t//\n\tif ( documentFragment.childCount == 1 ) {\n\t\tconst child = documentFragment.getChild( 0 )!;\n\n\t\tif ( child.is( 'element' ) && model.schema.isBlock( child ) && !model.schema.isObject( child ) && !model.schema.isLimit( child ) ) {\n\t\t\t// Scenario 2. as described above.\n\t\t\trange = model.createRangeIn( child as ModelElement );\n\t\t}\n\t}\n\n\tfor ( const child of range.getItems() ) {\n\t\tif ( !model.schema.isInline( child ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst attributeKeys = Array.from( child.getAttributeKeys() );\n\n\t\tif ( attributeKeys.find( key => model.schema.getAttributeProperties( key ).isFormatting ) ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/clipboard\n */\n\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\n\nimport { ClipboardPipeline } from './clipboardpipeline.js';\nimport { DragDrop } from './dragdrop.js';\nimport { PastePlainText } from './pasteplaintext.js';\nimport { ClipboardMarkersUtils } from './clipboardmarkersutils.js';\n\n/**\n * The clipboard feature.\n *\n * Read more about the clipboard integration in the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n *\n * This is a \"glue\" plugin which loads the following plugins:\n * * {@link module:clipboard/clipboardpipeline~ClipboardPipeline}\n * * {@link module:clipboard/dragdrop~DragDrop}\n * * {@link module:clipboard/pasteplaintext~PastePlainText}\n */\nexport class Clipboard extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'Clipboard' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ ClipboardMarkersUtils, ClipboardPipeline, DragDrop, PastePlainText ]> {\n\t\treturn [ ClipboardMarkersUtils, ClipboardPipeline, DragDrop, PastePlainText ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\t\tconst t = this.editor.t;\n\n\t\t// Add the information about the keystrokes to the accessibility database.\n\t\teditor.accessibility.addKeystrokeInfos( {\n\t\t\tkeystrokes: [\n\t\t\t\t{\n\t\t\t\t\tlabel: t( 'Copy selected content' ),\n\t\t\t\t\tkeystroke: 'CTRL+C'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: t( 'Paste content' ),\n\t\t\t\t\tkeystroke: 'CTRL+V'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: t( 'Paste content as plain text' ),\n\t\t\t\t\tkeystroke: 'CTRL+SHIFT+V'\n\t\t\t\t}\n\t\t\t]\n\t\t} );\n\t}\n}\n"]}
1
+ {"version":3,"sources":["index.js","../src/utils/plaintexttohtml.ts","../src/clipboardobserver.ts","../src/utils/normalizeclipboarddata.ts","../src/utils/viewtoplaintext.ts","../src/clipboardmarkersutils.ts","../src/clipboardpipeline.ts","../src/lineview.ts","../src/dragdroptarget.ts","../src/dragdropblocktoolbar.ts","../src/dragdrop.ts","../src/pasteplaintext.ts","../src/clipboard.ts"],"names":[],"mappings":"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","file":"index.js.map","sourcesContent":["import { Plugin } from \"@ckeditor/ckeditor5-core\";\nimport { DomEmitterMixin, EventInfo, Rect, ResizeObserver, createElement, delay, env, getRangeFromMouseEvent, global, toUnit, uid } from \"@ckeditor/ckeditor5-utils\";\nimport { DomEventObserver, ModelLiveRange, ModelRange, PointerObserver, ViewDataTransfer } from \"@ckeditor/ckeditor5-engine\";\nimport { mapValues, throttle } from \"es-toolkit/compat\";\nimport { Widget, isWidget } from \"@ckeditor/ckeditor5-widget\";\nimport { View } from \"@ckeditor/ckeditor5-ui\";\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/utils/plaintexttohtml\n*/\n/**\n* Converts plain text to its HTML-ized version.\n*\n* @param text The plain text to convert.\n* @returns HTML generated from the plain text.\n*/\nfunction plainTextToHtml(text) {\n\ttext = text.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\\r?\\n\\r?\\n/g, \"</p><p>\").replace(/\\r?\\n/g, \"<br>\").replace(/\\t/g, \"&nbsp;&nbsp;&nbsp;&nbsp;\").replace(/^\\s/, \"&nbsp;\").replace(/\\s$/, \"&nbsp;\").replace(/\\s\\s/g, \" &nbsp;\");\n\tif (text.includes(\"</p><p>\") || text.includes(\"<br>\")) text = `<p>${text}</p>`;\n\treturn text;\n}\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/clipboardobserver\n*/\n/**\n* Clipboard events observer.\n*\n* Fires the following events:\n*\n* * {@link module:engine/view/document~ViewDocument#event:clipboardInput},\n* * {@link module:engine/view/document~ViewDocument#event:paste},\n* * {@link module:engine/view/document~ViewDocument#event:copy},\n* * {@link module:engine/view/document~ViewDocument#event:cut},\n* * {@link module:engine/view/document~ViewDocument#event:drop},\n* * {@link module:engine/view/document~ViewDocument#event:dragover},\n* * {@link module:engine/view/document~ViewDocument#event:dragging},\n* * {@link module:engine/view/document~ViewDocument#event:dragstart},\n* * {@link module:engine/view/document~ViewDocument#event:dragend},\n* * {@link module:engine/view/document~ViewDocument#event:dragenter},\n* * {@link module:engine/view/document~ViewDocument#event:dragleave}.\n*\n* **Note**: This observer is not available by default (ckeditor5-engine does not add it on its own).\n* To make it available, it needs to be added to {@link module:engine/view/document~ViewDocument} by using\n* the {@link module:engine/view/view~EditingView#addObserver `View#addObserver()`} method. Alternatively, you can load the\n* {@link module:clipboard/clipboard~Clipboard} plugin which adds this observer automatically (because it uses it).\n*/\nvar ClipboardObserver = class extends DomEventObserver {\n\tdomEventType = [\n\t\t\"paste\",\n\t\t\"copy\",\n\t\t\"cut\",\n\t\t\"drop\",\n\t\t\"dragover\",\n\t\t\"dragstart\",\n\t\t\"dragend\",\n\t\t\"dragenter\",\n\t\t\"dragleave\"\n\t];\n\tconstructor(view) {\n\t\tsuper(view);\n\t\tconst viewDocument = this.document;\n\t\tthis.listenTo(viewDocument, \"paste\", handleInput(\"clipboardInput\"), { priority: \"low\" });\n\t\tthis.listenTo(viewDocument, \"drop\", handleInput(\"clipboardInput\"), { priority: \"low\" });\n\t\tthis.listenTo(viewDocument, \"dragover\", handleInput(\"dragging\"), { priority: \"low\" });\n\t\tfunction handleInput(type) {\n\t\t\treturn (evt, data) => {\n\t\t\t\tdata.preventDefault();\n\t\t\t\tconst targetRanges = data.dropRange ? [data.dropRange] : null;\n\t\t\t\tconst dataTransfer = data.dataTransfer;\n\t\t\t\tconst eventInfo = new EventInfo(viewDocument, type);\n\t\t\t\tlet content = \"\";\n\t\t\t\tif (dataTransfer.getData(\"text/html\")) content = dataTransfer.getData(\"text/html\");\n\t\t\t\telse if (dataTransfer.getData(\"text/plain\")) content = plainTextToHtml(dataTransfer.getData(\"text/plain\"));\n\t\t\t\tviewDocument.fire(eventInfo, {\n\t\t\t\t\tdataTransfer,\n\t\t\t\t\tcontent,\n\t\t\t\t\tmethod: evt.name,\n\t\t\t\t\ttargetRanges,\n\t\t\t\t\ttarget: data.target,\n\t\t\t\t\tdomEvent: data.domEvent\n\t\t\t\t});\n\t\t\t\tif (eventInfo.stop.called) data.stopPropagation();\n\t\t\t};\n\t\t}\n\t}\n\tonDomEvent(domEvent) {\n\t\tconst evtData = { dataTransfer: new ViewDataTransfer(\"clipboardData\" in domEvent ? domEvent.clipboardData : domEvent.dataTransfer, { cacheFiles: domEvent.type == \"drop\" || domEvent.type == \"paste\" }) };\n\t\tif (domEvent.type == \"drop\" || domEvent.type == \"dragover\") {\n\t\t\tconst domRange = getRangeFromMouseEvent(domEvent);\n\t\t\tevtData.dropRange = domRange && this.view.domConverter.domRangeToView(domRange);\n\t\t}\n\t\tthis.fire(domEvent.type, domEvent, evtData);\n\t}\n};\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/utils/normalizeclipboarddata\n*/\n/**\n* Removes some popular browser quirks out of the clipboard data (HTML).\n* Removes all HTML comments. These are considered an internal thing and it makes little sense if they leak into the editor data.\n*\n* @param data The HTML data to normalize.\n* @returns Normalized HTML.\n* @internal\n*/\nfunction normalizeClipboardData(data) {\n\treturn data.replace(/<span(?: class=\"Apple-converted-space\"|)>(\\s+)<\\/span>/g, (fullMatch, spaces) => {\n\t\tif (spaces.length == 1) return \" \";\n\t\treturn spaces;\n\t}).replace(/<!--[\\s\\S]*?-->/g, \"\");\n}\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\nconst smallPaddingElements = [\"figcaption\", \"li\"];\nconst listElements = [\"ol\", \"ul\"];\n/**\n* Converts {@link module:engine/view/item~ViewItem view item} and all of its children to plain text.\n*\n* @param converter The converter instance.\n* @param viewItem View item to convert.\n* @returns Plain text representation of `viewItem`.\n*/\nfunction viewToPlainText(converter, viewItem) {\n\tif (viewItem.is(\"$text\") || viewItem.is(\"$textProxy\")) return viewItem.data;\n\tif (viewItem.is(\"element\", \"img\") && viewItem.hasAttribute(\"alt\")) return viewItem.getAttribute(\"alt\");\n\tif (viewItem.is(\"element\", \"br\")) return \"\\n\";\n\t/**\n\t* Item is a document fragment, attribute element or container element. It doesn't\n\t* have it's own text value, so we need to convert its children elements.\n\t*/\n\tlet text = \"\";\n\tlet prev = null;\n\tfor (const child of viewItem.getChildren()) {\n\t\ttext += newLinePadding(child, prev) + viewToPlainText(converter, child);\n\t\tprev = child;\n\t}\n\tif (viewItem.is(\"rawElement\")) {\n\t\tconst tempElement = document.implementation.createHTMLDocument(\"\").createElement(\"div\");\n\t\tviewItem.render(tempElement, converter);\n\t\ttext += domElementToPlainText(tempElement);\n\t}\n\treturn text;\n}\n/**\n* Recursively converts DOM element and all of its children to plain text.\n*/\nfunction domElementToPlainText(element) {\n\tlet text = \"\";\n\tif (element.nodeType === Node.TEXT_NODE) return element.textContent;\n\telse if (element.tagName === \"BR\") return \"\\n\";\n\tfor (const child of element.childNodes) text += domElementToPlainText(child);\n\treturn text;\n}\n/**\n* Returns new line padding to prefix the given elements with.\n*/\nfunction newLinePadding(element, previous) {\n\tif (!previous) return \"\";\n\tif (element.is(\"element\", \"li\") && !element.isEmpty && element.getChild(0).is(\"containerElement\")) return \"\\n\\n\";\n\tif (listElements.includes(element.name) && listElements.includes(previous.name))\n /**\n\t* Because `<ul>` and `<ol>` are ViewAttributeElements, two consecutive lists will not have any padding between\n\t* them (see the `if` statement below). To fix this, we need to make an exception for this case.\n\t*/\n\treturn \"\\n\\n\";\n\tif (!element.is(\"containerElement\") && !previous.is(\"containerElement\")) return \"\";\n\tif (smallPaddingElements.includes(element.name) || smallPaddingElements.includes(previous.name)) return \"\\n\";\n\tif (element.is(\"element\") && element.getCustomProperty(\"dataPipeline:transparentRendering\") || previous.is(\"element\") && previous.getCustomProperty(\"dataPipeline:transparentRendering\")) return \"\";\n\treturn \"\\n\\n\";\n}\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/clipboardmarkersutils\n*/\n/**\n* Part of the clipboard logic. Responsible for collecting markers from selected fragments\n* and restoring them with proper positions in pasted elements.\n*\n* @internal\n*/\nvar ClipboardMarkersUtils = class extends Plugin {\n\t/**\n\t* Map of marker names that can be copied.\n\t*\n\t* @internal\n\t*/\n\t_markersToCopy = /* @__PURE__ */ new Map();\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"ClipboardMarkersUtils\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\n\t}\n\t/**\n\t* Registers marker name as copyable in clipboard pipeline.\n\t*\n\t* @param markerName Name of marker that can be copied.\n\t* @param config Configuration that describes what can be performed on specified marker.\n\t* @internal\n\t*/\n\t_registerMarkerToCopy(markerName, config) {\n\t\tthis._markersToCopy.set(markerName, config);\n\t}\n\t/**\n\t* Performs copy markers on provided selection and paste it to fragment returned from `getCopiedFragment`.\n\t*\n\t* \t1. Picks all markers in provided selection.\n\t* \t2. Inserts fake markers to document.\n\t* \t3. Gets copied selection fragment from document.\n\t* \t4. Removes fake elements from fragment and document.\n\t* \t5. Inserts markers in the place of removed fake markers.\n\t*\n\t* Due to selection modification, when inserting items, `getCopiedFragment` must *always* operate on `writer.model.document.selection'.\n\t* Do not use any other custom selection object within callback, as this will lead to out-of-bounds exceptions in rare scenarios.\n\t*\n\t* @param action Type of clipboard action.\n\t* @param selection Selection to be checked.\n\t* @param getCopiedFragment\tCallback that performs copy of selection and returns it as fragment.\n\t* @internal\n\t*/\n\t_copySelectedFragmentWithMarkers(action, selection, getCopiedFragment = (writer) => writer.model.getSelectedContent(writer.model.document.selection)) {\n\t\treturn this.editor.model.change((writer) => {\n\t\t\tconst oldSelection = writer.model.document.selection;\n\t\t\twriter.setSelection(selection);\n\t\t\tconst sourceSelectionInsertedMarkers = this._insertFakeMarkersIntoSelection(writer, writer.model.document.selection, action);\n\t\t\tconst fragment = getCopiedFragment(writer);\n\t\t\tconst fakeMarkersRangesInsideRange = this._removeFakeMarkersInsideElement(writer, fragment);\n\t\t\tfor (const [markerName, elements] of Object.entries(sourceSelectionInsertedMarkers)) {\n\t\t\t\tfakeMarkersRangesInsideRange[markerName] ||= writer.createRangeIn(fragment);\n\t\t\t\tfor (const element of elements) writer.remove(element);\n\t\t\t}\n\t\t\tfragment.markers.clear();\n\t\t\tfor (const [markerName, range] of Object.entries(fakeMarkersRangesInsideRange)) fragment.markers.set(markerName, range);\n\t\t\twriter.setSelection(oldSelection);\n\t\t\treturn fragment;\n\t\t});\n\t}\n\t/**\n\t* Performs paste of markers on already pasted element.\n\t*\n\t* \t1. Inserts fake markers that are present in fragment element (such fragment will be processed in `getPastedDocumentElement`).\n\t* \t2. Calls `getPastedDocumentElement` and gets element that is inserted into root model.\n\t* \t3. Removes all fake markers present in transformed element.\n\t* \t4. Inserts new markers with removed fake markers ranges into pasted fragment.\n\t*\n\t* There are multiple edge cases that have to be considered before calling this function:\n\t*\n\t* \t* `markers` are inserted into the same element that must be later transformed inside `getPastedDocumentElement`.\n\t* \t* Fake marker elements inside `getPastedDocumentElement` can be cloned, but their ranges cannot overlap.\n\t* \t* If `duplicateOnPaste` is `true` in marker config then associated marker ID is regenerated before pasting.\n\t*\n\t* @param markers Object that maps marker name to corresponding range.\n\t* @param getPastedDocumentElement Getter used to get target markers element.\n\t* @internal\n\t*/\n\t_pasteMarkersIntoTransformedElement(markers, getPastedDocumentElement) {\n\t\tconst pasteMarkers = this._getPasteMarkersFromRangeMap(markers);\n\t\treturn this.editor.model.change((writer) => {\n\t\t\tconst sourceFragmentFakeMarkers = this._insertFakeMarkersElements(writer, pasteMarkers);\n\t\t\tconst transformedElement = getPastedDocumentElement(writer);\n\t\t\tconst removedFakeMarkers = this._removeFakeMarkersInsideElement(writer, transformedElement);\n\t\t\tfor (const element of Object.values(sourceFragmentFakeMarkers).flat()) writer.remove(element);\n\t\t\tfor (const [markerName, range] of Object.entries(removedFakeMarkers)) if (!writer.model.markers.has(markerName)) writer.addMarker(markerName, {\n\t\t\t\tusingOperation: true,\n\t\t\t\taffectsData: true,\n\t\t\t\trange\n\t\t\t});\n\t\t\treturn transformedElement;\n\t\t});\n\t}\n\t/**\n\t* Pastes document fragment with markers to document.\n\t* If `duplicateOnPaste` is `true` in marker config then associated markers IDs\n\t* are regenerated before pasting to avoid markers duplications in content.\n\t*\n\t* @param fragment Document fragment that should contain already processed by pipeline markers.\n\t* @internal\n\t*/\n\t_pasteFragmentWithMarkers(fragment) {\n\t\tconst pasteMarkers = this._getPasteMarkersFromRangeMap(fragment.markers);\n\t\tfragment.markers.clear();\n\t\tfor (const copyableMarker of pasteMarkers) fragment.markers.set(copyableMarker.name, copyableMarker.range);\n\t\treturn this.editor.model.insertContent(fragment);\n\t}\n\t/**\n\t* In some situations we have to perform copy on selected fragment with certain markers. This function allows to temporarily bypass\n\t* restrictions on markers that we want to copy.\n\t*\n\t* This function executes `executor()` callback. For the duration of the callback, if the clipboard pipeline is used to copy\n\t* content, markers with the specified name will be copied to the clipboard as well.\n\t*\n\t* @param markerName Which markers should be copied.\n\t* @param executor Callback executed.\n\t* @param config Optional configuration flags used to copy (such like partial copy flag).\n\t* @internal\n\t*/\n\t_forceMarkersCopy(markerName, executor, config = {\n\t\tallowedActions: \"all\",\n\t\tcopyPartiallySelected: true,\n\t\tduplicateOnPaste: true\n\t}) {\n\t\tconst before = this._markersToCopy.get(markerName);\n\t\tthis._markersToCopy.set(markerName, config);\n\t\texecutor();\n\t\tif (before) this._markersToCopy.set(markerName, before);\n\t\telse this._markersToCopy.delete(markerName);\n\t}\n\t/**\n\t* Checks if marker can be copied.\n\t*\n\t* @param markerName Name of checked marker.\n\t* @param action Type of clipboard action. If null then checks only if marker is registered as copyable.\n\t* @internal\n\t*/\n\t_isMarkerCopyable(markerName, action) {\n\t\tconst config = this._getMarkerClipboardConfig(markerName);\n\t\tif (!config) return false;\n\t\tif (!action) return true;\n\t\tconst { allowedActions } = config;\n\t\treturn allowedActions === \"all\" || allowedActions.includes(action);\n\t}\n\t/**\n\t* Checks if marker has any clipboard copy behavior configuration.\n\t*\n\t* @param markerName Name of checked marker.\n\t*/\n\t_hasMarkerConfiguration(markerName) {\n\t\treturn !!this._getMarkerClipboardConfig(markerName);\n\t}\n\t/**\n\t* Returns marker's configuration flags passed during registration.\n\t*\n\t* @param markerName Name of marker that should be returned.\n\t* @internal\n\t*/\n\t_getMarkerClipboardConfig(markerName) {\n\t\tconst [markerNamePrefix] = markerName.split(\":\");\n\t\treturn this._markersToCopy.get(markerNamePrefix) || null;\n\t}\n\t/**\n\t* First step of copying markers. It looks for markers intersecting with given selection and inserts `$marker` elements\n\t* at positions where document markers start or end. This way `$marker` elements can be easily copied together with\n\t* the rest of the content of the selection.\n\t*\n\t* @param writer An instance of the model writer.\n\t* @param selection Selection to be checked.\n\t* @param action Type of clipboard action.\n\t*/\n\t_insertFakeMarkersIntoSelection(writer, selection, action) {\n\t\tconst copyableMarkers = this._getCopyableMarkersFromSelection(writer, selection, action);\n\t\treturn this._insertFakeMarkersElements(writer, copyableMarkers);\n\t}\n\t/**\n\t* Returns array of markers that can be copied in specified selection.\n\t*\n\t* If marker cannot be copied partially (according to `copyPartiallySelected` configuration flag) and\n\t* is not present entirely in any selection range then it will be skipped.\n\t*\n\t* @param writer An instance of the model writer.\n\t* @param selection Selection which will be checked.\n\t* @param action Type of clipboard action. If null then checks only if marker is registered as copyable.\n\t*/\n\t_getCopyableMarkersFromSelection(writer, selection, action) {\n\t\tconst selectionRanges = Array.from(selection.getRanges());\n\t\tconst markersInRanges = new Set(selectionRanges.flatMap((selectionRange) => Array.from(writer.model.markers.getMarkersIntersectingRange(selectionRange))));\n\t\tconst isSelectionMarkerCopyable = (marker) => {\n\t\t\tif (!this._isMarkerCopyable(marker.name, action)) return false;\n\t\t\tconst { copyPartiallySelected } = this._getMarkerClipboardConfig(marker.name);\n\t\t\tif (!copyPartiallySelected) {\n\t\t\t\tconst markerRange = marker.getRange();\n\t\t\t\treturn selectionRanges.some((selectionRange) => selectionRange.containsRange(markerRange, true));\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t\treturn Array.from(markersInRanges).filter(isSelectionMarkerCopyable).map((copyableMarker) => {\n\t\t\treturn {\n\t\t\t\tname: action === \"dragstart\" ? this._getUniqueMarkerName(copyableMarker.name) : copyableMarker.name,\n\t\t\t\trange: copyableMarker.getRange()\n\t\t\t};\n\t\t});\n\t}\n\t/**\n\t* Picks all markers from markers map that can be pasted.\n\t* If `duplicateOnPaste` is `true`, it regenerates their IDs to ensure uniqueness.\n\t* If marker is not registered, it will be kept in the array anyway.\n\t*\n\t* @param markers Object that maps marker name to corresponding range.\n\t* @param action Type of clipboard action. If null then checks only if marker is registered as copyable.\n\t*/\n\t_getPasteMarkersFromRangeMap(markers, action = null) {\n\t\tconst { model } = this.editor;\n\t\treturn (markers instanceof Map ? Array.from(markers.entries()) : Object.entries(markers)).flatMap(([markerName, range]) => {\n\t\t\tif (!this._hasMarkerConfiguration(markerName)) return [{\n\t\t\t\tname: markerName,\n\t\t\t\trange\n\t\t\t}];\n\t\t\tif (this._isMarkerCopyable(markerName, action)) {\n\t\t\t\tconst copyMarkerConfig = this._getMarkerClipboardConfig(markerName);\n\t\t\t\tconst isInGraveyard = model.markers.has(markerName) && model.markers.get(markerName).getRange().root.rootName === \"$graveyard\";\n\t\t\t\tif (copyMarkerConfig.duplicateOnPaste || isInGraveyard) markerName = this._getUniqueMarkerName(markerName);\n\t\t\t\treturn [{\n\t\t\t\t\tname: markerName,\n\t\t\t\t\trange\n\t\t\t\t}];\n\t\t\t}\n\t\t\treturn [];\n\t\t});\n\t}\n\t/**\n\t* Inserts specified array of fake markers elements to document and assigns them `type` and `name` attributes.\n\t* Fake markers elements are used to calculate position of markers on pasted fragment that were transformed during\n\t* steps between copy and paste.\n\t*\n\t* @param writer An instance of the model writer.\n\t* @param markers Array of markers that will be inserted.\n\t*/\n\t_insertFakeMarkersElements(writer, markers) {\n\t\tconst mappedMarkers = {};\n\t\tconst sortedMarkers = markers.flatMap((marker) => {\n\t\t\tconst { start, end } = marker.range;\n\t\t\treturn [{\n\t\t\t\tposition: start,\n\t\t\t\tmarker,\n\t\t\t\ttype: \"start\"\n\t\t\t}, {\n\t\t\t\tposition: end,\n\t\t\t\tmarker,\n\t\t\t\ttype: \"end\"\n\t\t\t}];\n\t\t}).sort(({ position: posA }, { position: posB }) => posA.isBefore(posB) ? 1 : -1);\n\t\tfor (const { position, marker, type } of sortedMarkers) {\n\t\t\tconst fakeMarker = writer.createElement(\"$marker\", {\n\t\t\t\t\"data-name\": marker.name,\n\t\t\t\t\"data-type\": type\n\t\t\t});\n\t\t\tif (!mappedMarkers[marker.name]) mappedMarkers[marker.name] = [];\n\t\t\tmappedMarkers[marker.name].push(fakeMarker);\n\t\t\twriter.insert(fakeMarker, position);\n\t\t}\n\t\treturn mappedMarkers;\n\t}\n\t/**\n\t* Removes all `$marker` elements from the given document fragment.\n\t*\n\t* Returns an object where keys are marker names, and values are ranges corresponding to positions\n\t* where `$marker` elements were inserted.\n\t*\n\t* If the document fragment had only one `$marker` element for given marker (start or end) the other boundary is set automatically\n\t* (to the end or start of the document fragment, respectively).\n\t*\n\t* @param writer An instance of the model writer.\n\t* @param rootElement The element to be checked.\n\t*/\n\t_removeFakeMarkersInsideElement(writer, rootElement) {\n\t\treturn mapValues(this._getAllFakeMarkersFromElement(writer, rootElement).reduce((acc, fakeMarker) => {\n\t\t\tconst position = fakeMarker.markerElement && writer.createPositionBefore(fakeMarker.markerElement);\n\t\t\tlet prevFakeMarker = acc[fakeMarker.name];\n\t\t\tlet skipAssign = false;\n\t\t\tif (prevFakeMarker?.start && prevFakeMarker?.end) {\n\t\t\t\tif (this._getMarkerClipboardConfig(fakeMarker.name).duplicateOnPaste) acc[this._getUniqueMarkerName(fakeMarker.name)] = acc[fakeMarker.name];\n\t\t\t\telse skipAssign = true;\n\t\t\t\tprevFakeMarker = null;\n\t\t\t}\n\t\t\tif (!skipAssign) acc[fakeMarker.name] = {\n\t\t\t\t...prevFakeMarker,\n\t\t\t\t[fakeMarker.type]: position\n\t\t\t};\n\t\t\tif (fakeMarker.markerElement) writer.remove(fakeMarker.markerElement);\n\t\t\treturn acc;\n\t\t}, {}), (range) => new ModelRange(range.start || writer.createPositionFromPath(rootElement, [0]), range.end || writer.createPositionAt(rootElement, \"end\")));\n\t}\n\t/**\n\t* Returns array that contains list of fake markers with corresponding `$marker` elements.\n\t*\n\t* For each marker, there can be two `$marker` elements or only one (if the document fragment contained\n\t* only the beginning or only the end of a marker).\n\t*\n\t* @param writer An instance of the model writer.\n\t* @param rootElement The element to be checked.\n\t*/\n\t_getAllFakeMarkersFromElement(writer, rootElement) {\n\t\tconst foundFakeMarkers = Array.from(writer.createRangeIn(rootElement)).flatMap(({ item }) => {\n\t\t\tif (!item.is(\"element\", \"$marker\")) return [];\n\t\t\treturn [{\n\t\t\t\tmarkerElement: item,\n\t\t\t\tname: item.getAttribute(\"data-name\"),\n\t\t\t\ttype: item.getAttribute(\"data-type\")\n\t\t\t}];\n\t\t});\n\t\tconst prependFakeMarkers = [];\n\t\tconst appendFakeMarkers = [];\n\t\tfor (const fakeMarker of foundFakeMarkers) {\n\t\t\tif (fakeMarker.type === \"end\") {\n\t\t\t\tif (!foundFakeMarkers.some((otherFakeMarker) => otherFakeMarker.name === fakeMarker.name && otherFakeMarker.type === \"start\")) prependFakeMarkers.push({\n\t\t\t\t\tmarkerElement: null,\n\t\t\t\t\tname: fakeMarker.name,\n\t\t\t\t\ttype: \"start\"\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (fakeMarker.type === \"start\") {\n\t\t\t\tif (!foundFakeMarkers.some((otherFakeMarker) => otherFakeMarker.name === fakeMarker.name && otherFakeMarker.type === \"end\")) appendFakeMarkers.unshift({\n\t\t\t\t\tmarkerElement: null,\n\t\t\t\t\tname: fakeMarker.name,\n\t\t\t\t\ttype: \"end\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn [\n\t\t\t...prependFakeMarkers,\n\t\t\t...foundFakeMarkers,\n\t\t\t...appendFakeMarkers\n\t\t];\n\t}\n\t/**\n\t* When copy of markers occurs we have to make sure that pasted markers have different names\n\t* than source markers. This functions helps with assigning unique part to marker name to\n\t* prevent duplicated markers error.\n\t*\n\t* @param name Name of marker\n\t*/\n\t_getUniqueMarkerName(name) {\n\t\tconst parts = name.split(\":\");\n\t\tconst newId = uid().substring(1, 6);\n\t\tif (parts.length === 3) return `${parts.slice(0, 2).join(\":\")}:${newId}`;\n\t\treturn `${parts.join(\":\")}:${newId}`;\n\t}\n};\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/clipboardpipeline\n*/\n/**\n* The clipboard pipeline feature. It is responsible for intercepting the `paste` and `drop` events and\n* passing the pasted content through a series of events in order to insert it into the editor's content.\n* It also handles the `cut` and `copy` events to fill the native clipboard with the serialized editor's data.\n*\n* # Input pipeline\n*\n* The behavior of the default handlers (all at a `low` priority):\n*\n* ## Event: `paste` or `drop`\n*\n* 1. Translates the event data.\n* 2. Fires the {@link module:engine/view/document~ViewDocument#event:clipboardInput `view.Document#clipboardInput`} event.\n*\n* ## Event: `view.Document#clipboardInput`\n*\n* 1. If the `data.content` event field is already set (by some listener on a higher priority), it takes this content and fires the event\n* from the last point.\n* 2. Otherwise, it retrieves `text/html` or `text/plain` from `data.dataTransfer`.\n* 3. Normalizes the raw data by applying simple filters on string data.\n* 4. Processes the raw data to {@link module:engine/view/documentfragment~ViewDocumentFragment `view.DocumentFragment`} with the\n* {@link module:engine/controller/datacontroller~DataController#htmlProcessor `DataController#htmlProcessor`}.\n* 5. Fires the {@link module:clipboard/clipboardpipeline~ClipboardPipeline#event:inputTransformation\n* `ClipboardPipeline#inputTransformation`} event with the view document fragment in the `data.content` event field.\n*\n* ## Event: `ClipboardPipeline#inputTransformation`\n*\n* 1. Converts {@link module:engine/view/documentfragment~ViewDocumentFragment `view.DocumentFragment`} from the `data.content` field to\n* {@link module:engine/model/documentfragment~ModelDocumentFragment `model.DocumentFragment`}.\n* 2. Fires the {@link module:clipboard/clipboardpipeline~ClipboardPipeline#event:contentInsertion `ClipboardPipeline#contentInsertion`}\n* event with the model document fragment in the `data.content` event field.\n* **Note**: The `ClipboardPipeline#contentInsertion` event is fired within a model change block to allow other handlers\n* to run in the same block without post-fixers called in between (i.e., the selection post-fixer).\n*\n* ## Event: `ClipboardPipeline#contentInsertion`\n*\n* 1. Calls {@link module:engine/model/model~Model#insertContent `model.insertContent()`} to insert `data.content`\n* at the current selection position.\n*\n* # Output pipeline\n*\n* The behavior of the default handlers (all at a `low` priority):\n*\n* ## Event: `copy`, `cut` or `dragstart`\n*\n* 1. Retrieves the selected {@link module:engine/model/documentfragment~ModelDocumentFragment `model.DocumentFragment`} by calling\n* {@link module:engine/model/model~Model#getSelectedContent `model#getSelectedContent()`}.\n* 2. Converts the model document fragment to {@link module:engine/view/documentfragment~ViewDocumentFragment `view.DocumentFragment`}.\n* 3. Fires the {@link module:engine/view/document~ViewDocument#event:clipboardOutput `view.Document#clipboardOutput`} event\n* with the view document fragment in the `data.content` event field.\n*\n* ## Event: `view.Document#clipboardOutput`\n*\n* 1. Processes `data.content` to HTML and plain text with the\n* {@link module:engine/controller/datacontroller~DataController#htmlProcessor `DataController#htmlProcessor`}.\n* 2. Updates the `data.dataTransfer` data for `text/html` and `text/plain` with the processed data.\n* 3. For the `cut` method, calls {@link module:engine/model/model~Model#deleteContent `model.deleteContent()`}\n* on the current selection.\n*\n* Read more about the clipboard integration in the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n*/\nvar ClipboardPipeline = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"ClipboardPipeline\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get requires() {\n\t\treturn [ClipboardMarkersUtils];\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tinit() {\n\t\tthis.editor.editing.view.addObserver(ClipboardObserver);\n\t\tthis._setupPasteDrop();\n\t\tthis._setupCopyCut();\n\t}\n\t/**\n\t* Fires Clipboard `'outputTransformation'` event for given parameters.\n\t*\n\t* @internal\n\t*/\n\t_fireOutputTransformationEvent(dataTransfer, selection, method) {\n\t\tconst clipboardMarkersUtils = this.editor.plugins.get(\"ClipboardMarkersUtils\");\n\t\tthis.editor.model.enqueueChange({ isUndoable: method === \"cut\" }, () => {\n\t\t\tconst documentFragment = clipboardMarkersUtils._copySelectedFragmentWithMarkers(method, selection);\n\t\t\tthis.fire(\"outputTransformation\", {\n\t\t\t\tdataTransfer,\n\t\t\t\tcontent: documentFragment,\n\t\t\t\tmethod\n\t\t\t});\n\t\t});\n\t}\n\t/**\n\t* The clipboard paste pipeline.\n\t*/\n\t_setupPasteDrop() {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst view = editor.editing.view;\n\t\tconst viewDocument = view.document;\n\t\tconst clipboardMarkersUtils = this.editor.plugins.get(\"ClipboardMarkersUtils\");\n\t\tthis.listenTo(viewDocument, \"clipboardInput\", (evt, data) => {\n\t\t\tif (data.method == \"paste\" && !editor.model.canEditAt(editor.model.document.selection)) evt.stop();\n\t\t}, { priority: \"highest\" });\n\t\tthis.listenTo(viewDocument, \"clipboardInput\", (evt, data) => {\n\t\t\tconst dataTransfer = data.dataTransfer;\n\t\t\tconst eventInfo = new EventInfo(this, \"inputTransformation\");\n\t\t\tconst sourceEditorId = dataTransfer.getData(\"application/ckeditor5-editor-id\") || null;\n\t\t\tconst content = typeof data.content == \"string\" ? this.editor.data.htmlProcessor.toView(normalizeClipboardData(data.content)) : data.content;\n\t\t\tthis.fire(eventInfo, {\n\t\t\t\tcontent,\n\t\t\t\tdataTransfer,\n\t\t\t\tsourceEditorId,\n\t\t\t\textraContent: data.extraContent,\n\t\t\t\ttargetRanges: data.targetRanges,\n\t\t\t\tmethod: data.method\n\t\t\t});\n\t\t\tif (eventInfo.stop.called) evt.stop();\n\t\t\tview.scrollToTheSelection();\n\t\t}, { priority: \"low\" });\n\t\tthis.listenTo(this, \"inputTransformation\", (evt, data) => {\n\t\t\tif (data.content.isEmpty) return;\n\t\t\tconst modelFragment = this.editor.data.toModel(data.content, \"$clipboardHolder\");\n\t\t\tif (modelFragment.childCount == 0) return;\n\t\t\tevt.stop();\n\t\t\tmodel.change(() => {\n\t\t\t\tthis.fire(\"contentInsertion\", {\n\t\t\t\t\tcontent: modelFragment,\n\t\t\t\t\tmethod: data.method,\n\t\t\t\t\tsourceEditorId: data.sourceEditorId,\n\t\t\t\t\tdataTransfer: data.dataTransfer,\n\t\t\t\t\ttargetRanges: data.targetRanges\n\t\t\t\t});\n\t\t\t});\n\t\t}, { priority: \"low\" });\n\t\tthis.listenTo(this, \"contentInsertion\", (evt, data) => {\n\t\t\tdata.resultRange = clipboardMarkersUtils._pasteFragmentWithMarkers(data.content);\n\t\t}, { priority: \"low\" });\n\t}\n\t/**\n\t* The clipboard copy/cut pipeline.\n\t*/\n\t_setupCopyCut() {\n\t\tconst editor = this.editor;\n\t\tconst modelDocument = editor.model.document;\n\t\tconst viewDocument = editor.editing.view.document;\n\t\tconst onCopyCut = (evt, data) => {\n\t\t\tconst dataTransfer = data.dataTransfer;\n\t\t\tdata.preventDefault();\n\t\t\tthis._fireOutputTransformationEvent(dataTransfer, modelDocument.selection, evt.name);\n\t\t};\n\t\tthis.listenTo(viewDocument, \"copy\", onCopyCut, { priority: \"low\" });\n\t\tthis.listenTo(viewDocument, \"cut\", (evt, data) => {\n\t\t\tif (!editor.model.canEditAt(editor.model.document.selection)) data.preventDefault();\n\t\t\telse onCopyCut(evt, data);\n\t\t}, { priority: \"low\" });\n\t\tthis.listenTo(this, \"outputTransformation\", (evt, data) => {\n\t\t\tconst content = editor.data.toView(data.content, { isClipboardPipeline: true });\n\t\t\tviewDocument.fire(\"clipboardOutput\", {\n\t\t\t\tdataTransfer: data.dataTransfer,\n\t\t\t\tcontent,\n\t\t\t\tmethod: data.method\n\t\t\t});\n\t\t}, { priority: \"low\" });\n\t\tthis.listenTo(viewDocument, \"clipboardOutput\", (evt, data) => {\n\t\t\tif (!data.content.isEmpty) {\n\t\t\t\tdata.dataTransfer.setData(\"text/html\", this.editor.data.htmlProcessor.toData(data.content));\n\t\t\t\tdata.dataTransfer.setData(\"text/plain\", viewToPlainText(editor.data.htmlProcessor.domConverter, data.content));\n\t\t\t\tdata.dataTransfer.setData(\"application/ckeditor5-editor-id\", this.editor.id);\n\t\t\t}\n\t\t\tif (data.method == \"cut\") editor.model.deleteContent(modelDocument.selection);\n\t\t}, { priority: \"low\" });\n\t}\n};\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/lineview\n*/\n/* istanbul ignore file -- @preserve */\nconst toPx = /* #__PURE__ */ toUnit(\"px\");\n/**\n* The horizontal drop target line view.\n*\n* @internal\n*/\nvar LineView = class extends View {\n\t/**\n\t* @inheritDoc\n\t*/\n\tconstructor() {\n\t\tsuper();\n\t\tconst bind = this.bindTemplate;\n\t\tthis.set({\n\t\t\tisVisible: false,\n\t\t\tleft: null,\n\t\t\ttop: null,\n\t\t\twidth: null\n\t\t});\n\t\tthis.setTemplate({\n\t\t\ttag: \"div\",\n\t\t\tattributes: {\n\t\t\t\tclass: [\n\t\t\t\t\t\"ck\",\n\t\t\t\t\t\"ck-clipboard-drop-target-line\",\n\t\t\t\t\tbind.if(\"isVisible\", \"ck-hidden\", (value) => !value)\n\t\t\t\t],\n\t\t\t\tstyle: {\n\t\t\t\t\tleft: bind.to(\"left\", (left) => toPx(left)),\n\t\t\t\t\ttop: bind.to(\"top\", (top) => toPx(top)),\n\t\t\t\t\twidth: bind.to(\"width\", (width) => toPx(width))\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/dragdroptarget\n*/\n/**\n* Part of the Drag and Drop handling. Responsible for finding and displaying the drop target.\n*\n* @internal\n*/\nvar DragDropTarget = class extends Plugin {\n\t/**\n\t* A delayed callback removing the drop marker.\n\t*\n\t* @internal\n\t*/\n\tremoveDropMarkerDelayed = delay(() => this.removeDropMarker(), 40);\n\t/**\n\t* A throttled callback updating the drop marker.\n\t*/\n\t_updateDropMarkerThrottled = throttle((targetRange) => this._updateDropMarker(targetRange), 40);\n\t/**\n\t* A throttled callback reconverting the drop parker.\n\t*/\n\t_reconvertMarkerThrottled = throttle(() => {\n\t\tif (this.editor.model.markers.has(\"drop-target\")) this.editor.editing.reconvertMarker(\"drop-target\");\n\t}, 0);\n\t/**\n\t* The horizontal drop target line view.\n\t*/\n\t_dropTargetLineView = new LineView();\n\t/**\n\t* DOM Emitter.\n\t*/\n\t_domEmitter = new (DomEmitterMixin())();\n\t/**\n\t* Map of document scrollable elements.\n\t*/\n\t_scrollables = /* @__PURE__ */ new Map();\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"DragDropTarget\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tinit() {\n\t\tthis._setupDropMarker();\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tdestroy() {\n\t\tthis._domEmitter.stopListening();\n\t\tfor (const { resizeObserver } of this._scrollables.values()) resizeObserver.destroy();\n\t\tthis._updateDropMarkerThrottled.cancel();\n\t\tthis.removeDropMarkerDelayed.cancel();\n\t\tthis._reconvertMarkerThrottled.cancel();\n\t\treturn super.destroy();\n\t}\n\t/**\n\t* Finds the drop target range and updates the drop marker.\n\t*\n\t* @return The updated drop target range or null if no valid range was found.\n\t* @internal\n\t*/\n\tupdateDropMarker(targetViewElement, targetViewRanges, clientX, clientY, blockMode, draggedRange) {\n\t\tthis.removeDropMarkerDelayed.cancel();\n\t\tconst targetRange = findDropTargetRange(this.editor, targetViewElement, targetViewRanges, clientX, clientY, blockMode, draggedRange);\n\t\t/* istanbul ignore next -- @preserve */\n\t\tif (!targetRange) return null;\n\t\tif (draggedRange && draggedRange.containsRange(targetRange)) {\n\t\t\tthis.removeDropMarker();\n\t\t\treturn null;\n\t\t}\n\t\tif (targetRange && !this.editor.model.canEditAt(targetRange)) {\n\t\t\tthis.removeDropMarker();\n\t\t\treturn null;\n\t\t}\n\t\tthis._updateDropMarkerThrottled(targetRange);\n\t\treturn targetRange;\n\t}\n\t/**\n\t* Finds the final drop target range.\n\t*\n\t* @internal\n\t*/\n\tgetFinalDropRange(targetViewElement, targetViewRanges, clientX, clientY, blockMode, draggedRange) {\n\t\tconst targetRange = findDropTargetRange(this.editor, targetViewElement, targetViewRanges, clientX, clientY, blockMode, draggedRange);\n\t\tthis.removeDropMarker();\n\t\treturn targetRange;\n\t}\n\t/**\n\t* Removes the drop target marker.\n\t*\n\t* @internal\n\t*/\n\tremoveDropMarker() {\n\t\tconst model = this.editor.model;\n\t\tthis.removeDropMarkerDelayed.cancel();\n\t\tthis._updateDropMarkerThrottled.cancel();\n\t\tthis._dropTargetLineView.isVisible = false;\n\t\tif (model.markers.has(\"drop-target\")) model.change((writer) => {\n\t\t\twriter.removeMarker(\"drop-target\");\n\t\t});\n\t}\n\t/**\n\t* Creates downcast conversion for the drop target marker.\n\t*/\n\t_setupDropMarker() {\n\t\tconst editor = this.editor;\n\t\teditor.ui.view.body.add(this._dropTargetLineView);\n\t\teditor.conversion.for(\"editingDowncast\").markerToHighlight({\n\t\t\tmodel: \"drop-target\",\n\t\t\tview: { classes: [\"ck-clipboard-drop-target-range\"] }\n\t\t});\n\t\teditor.conversion.for(\"editingDowncast\").markerToElement({\n\t\t\tmodel: \"drop-target\",\n\t\t\tview: (data, { writer }) => {\n\t\t\t\tif (editor.model.schema.checkChild(data.markerRange.start, \"$text\")) {\n\t\t\t\t\tthis._dropTargetLineView.isVisible = false;\n\t\t\t\t\treturn this._createDropTargetPosition(writer);\n\t\t\t\t} else if (data.markerRange.isCollapsed) this._updateDropTargetLine(data.markerRange);\n\t\t\t\telse this._dropTargetLineView.isVisible = false;\n\t\t\t}\n\t\t});\n\t}\n\t/**\n\t* Updates the drop target marker to the provided range.\n\t*\n\t* @param targetRange The range to set the marker to.\n\t*/\n\t_updateDropMarker(targetRange) {\n\t\tconst editor = this.editor;\n\t\tconst markers = editor.model.markers;\n\t\teditor.model.change((writer) => {\n\t\t\tif (markers.has(\"drop-target\")) {\n\t\t\t\tif (!markers.get(\"drop-target\").getRange().isEqual(targetRange)) writer.updateMarker(\"drop-target\", { range: targetRange });\n\t\t\t} else writer.addMarker(\"drop-target\", {\n\t\t\t\trange: targetRange,\n\t\t\t\tusingOperation: false,\n\t\t\t\taffectsData: false\n\t\t\t});\n\t\t});\n\t}\n\t/**\n\t* Creates the UI element for vertical (in-line) drop target.\n\t*/\n\t_createDropTargetPosition(writer) {\n\t\treturn writer.createUIElement(\"span\", { class: \"ck ck-clipboard-drop-target-position\" }, function(domDocument) {\n\t\t\tconst domElement = this.toDomElement(domDocument);\n\t\t\tdomElement.append(\"⁠\", domDocument.createElement(\"span\"), \"⁠\");\n\t\t\treturn domElement;\n\t\t});\n\t}\n\t/**\n\t* Updates the horizontal drop target line.\n\t*/\n\t_updateDropTargetLine(range) {\n\t\tconst editing = this.editor.editing;\n\t\tconst nodeBefore = range.start.nodeBefore;\n\t\tconst nodeAfter = range.start.nodeAfter;\n\t\tconst nodeParent = range.start.parent;\n\t\tconst viewElementBefore = nodeBefore ? editing.mapper.toViewElement(nodeBefore) : null;\n\t\tconst domElementBefore = viewElementBefore ? editing.view.domConverter.mapViewToDom(viewElementBefore) : null;\n\t\tconst viewElementAfter = nodeAfter ? editing.mapper.toViewElement(nodeAfter) : null;\n\t\tconst domElementAfter = viewElementAfter ? editing.view.domConverter.mapViewToDom(viewElementAfter) : null;\n\t\tconst viewElementParent = editing.mapper.toViewElement(nodeParent);\n\t\tif (!viewElementParent) return;\n\t\tconst domElementParent = editing.view.domConverter.mapViewToDom(viewElementParent);\n\t\tconst domScrollableRect = this._getScrollableRect(viewElementParent);\n\t\tconst { scrollX, scrollY } = global.window;\n\t\tconst rectBefore = domElementBefore ? new Rect(domElementBefore) : null;\n\t\tconst rectAfter = domElementAfter ? new Rect(domElementAfter) : null;\n\t\tconst rectParent = new Rect(domElementParent).excludeScrollbarsAndBorders();\n\t\tconst above = rectBefore ? rectBefore.bottom : rectParent.top;\n\t\tconst below = rectAfter ? rectAfter.top : rectParent.bottom;\n\t\tconst parentStyle = global.window.getComputedStyle(domElementParent);\n\t\tconst top = above <= below ? (above + below) / 2 : below;\n\t\tif (domScrollableRect.top < top && top < domScrollableRect.bottom) {\n\t\t\tconst left = rectParent.left + parseFloat(parentStyle.paddingLeft);\n\t\t\tconst right = rectParent.right - parseFloat(parentStyle.paddingRight);\n\t\t\tconst leftClamped = Math.max(left + scrollX, domScrollableRect.left);\n\t\t\tconst rightClamped = Math.min(right + scrollX, domScrollableRect.right);\n\t\t\tthis._dropTargetLineView.set({\n\t\t\t\tisVisible: true,\n\t\t\t\tleft: leftClamped,\n\t\t\t\ttop: top + scrollY,\n\t\t\t\twidth: rightClamped - leftClamped\n\t\t\t});\n\t\t} else this._dropTargetLineView.isVisible = false;\n\t}\n\t/**\n\t* Finds the closest scrollable element rect for the given view element.\n\t*/\n\t_getScrollableRect(viewElement) {\n\t\tconst rootName = viewElement.root.rootName;\n\t\tlet domScrollable;\n\t\tif (this._scrollables.has(rootName)) domScrollable = this._scrollables.get(rootName).domElement;\n\t\telse {\n\t\t\tdomScrollable = findScrollableElement(this.editor.editing.view.domConverter.mapViewToDom(viewElement));\n\t\t\tthis._domEmitter.listenTo(domScrollable, \"scroll\", this._reconvertMarkerThrottled, { usePassive: true });\n\t\t\tconst resizeObserver = new ResizeObserver(domScrollable, this._reconvertMarkerThrottled);\n\t\t\tthis._scrollables.set(rootName, {\n\t\t\t\tdomElement: domScrollable,\n\t\t\t\tresizeObserver\n\t\t\t});\n\t\t}\n\t\treturn new Rect(domScrollable).excludeScrollbarsAndBorders();\n\t}\n};\n/**\n* Returns fixed selection range for given position and target element.\n*/\nfunction findDropTargetRange(editor, targetViewElement, targetViewRanges, clientX, clientY, blockMode, draggedRange) {\n\tconst model = editor.model;\n\tconst mapper = editor.editing.mapper;\n\tlet modelElement = getClosestMappedModelElement(editor, targetViewElement);\n\twhile (modelElement) {\n\t\tif (!blockMode) {\n\t\t\tif (model.schema.checkChild(modelElement, \"$text\")) {\n\t\t\t\tif (targetViewRanges) {\n\t\t\t\t\tconst targetViewPosition = targetViewRanges[0].start;\n\t\t\t\t\tconst targetModelPosition = mapper.toModelPosition(targetViewPosition);\n\t\t\t\t\tif (!draggedRange || Array.from(draggedRange.getItems({ shallow: true })).some((item) => model.schema.checkChild(targetModelPosition, item))) {\n\t\t\t\t\t\tif (model.schema.checkChild(targetModelPosition, \"$text\")) return model.createRange(targetModelPosition);\n\t\t\t\t\t\telse if (targetViewPosition) return findDropTargetRangeForElement(editor, getClosestMappedModelElement(editor, targetViewPosition.parent), clientX, clientY);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (model.schema.isInline(modelElement)) return findDropTargetRangeForElement(editor, modelElement, clientX, clientY);\n\t\t}\n\t\tif (model.schema.isBlock(modelElement)) return findDropTargetRangeForElement(editor, modelElement, clientX, clientY);\n\t\telse if (model.schema.checkChild(modelElement, \"$block\")) {\n\t\t\tconst childNodes = Array.from(modelElement.getChildren()).filter((node) => node.is(\"element\") && !shouldIgnoreElement(editor, node));\n\t\t\tlet startIndex = 0;\n\t\t\tlet endIndex = childNodes.length;\n\t\t\tif (endIndex == 0) return model.createRange(model.createPositionAt(modelElement, \"end\"));\n\t\t\twhile (startIndex < endIndex - 1) {\n\t\t\t\tconst middleIndex = Math.floor((startIndex + endIndex) / 2);\n\t\t\t\tif (findElementSide(editor, childNodes[middleIndex], clientX, clientY) == \"before\") endIndex = middleIndex;\n\t\t\t\telse startIndex = middleIndex;\n\t\t\t}\n\t\t\treturn findDropTargetRangeForElement(editor, childNodes[startIndex], clientX, clientY);\n\t\t}\n\t\tmodelElement = modelElement.parent;\n\t}\n\treturn null;\n}\n/**\n* Returns true for elements which should be ignored.\n*/\nfunction shouldIgnoreElement(editor, modelElement) {\n\tconst mapper = editor.editing.mapper;\n\tconst domConverter = editor.editing.view.domConverter;\n\tconst viewElement = mapper.toViewElement(modelElement);\n\tif (!viewElement) return true;\n\tconst domElement = domConverter.mapViewToDom(viewElement);\n\treturn global.window.getComputedStyle(domElement).float != \"none\";\n}\n/**\n* Returns target range relative to the given element.\n*/\nfunction findDropTargetRangeForElement(editor, modelElement, clientX, clientY) {\n\tconst model = editor.model;\n\treturn model.createRange(model.createPositionAt(modelElement, findElementSide(editor, modelElement, clientX, clientY)));\n}\n/**\n* Resolves whether drop marker should be before or after the given element.\n*/\nfunction findElementSide(editor, modelElement, clientX, clientY) {\n\tconst mapper = editor.editing.mapper;\n\tconst domConverter = editor.editing.view.domConverter;\n\tconst viewElement = mapper.toViewElement(modelElement);\n\tconst rect = new Rect(domConverter.mapViewToDom(viewElement));\n\tif (editor.model.schema.isInline(modelElement)) return clientX < (rect.left + rect.right) / 2 ? \"before\" : \"after\";\n\telse return clientY < (rect.top + rect.bottom) / 2 ? \"before\" : \"after\";\n}\n/**\n* Returns the closest model element for the specified view element.\n*/\nfunction getClosestMappedModelElement(editor, element) {\n\tconst mapper = editor.editing.mapper;\n\tconst view = editor.editing.view;\n\tconst targetModelElement = mapper.toModelElement(element);\n\tif (targetModelElement) return targetModelElement;\n\tconst viewPosition = view.createPositionBefore(element);\n\tconst viewElement = mapper.findMappedViewAncestor(viewPosition);\n\treturn mapper.toModelElement(viewElement);\n}\n/**\n* Returns the closest scrollable ancestor DOM element.\n*\n* It is assumed that `domNode` is attached to the document.\n*/\nfunction findScrollableElement(domNode) {\n\tlet domElement = domNode;\n\tdo {\n\t\tdomElement = domElement.parentElement;\n\t\tconst overflow = global.window.getComputedStyle(domElement).overflowY;\n\t\tif (overflow == \"auto\" || overflow == \"scroll\") break;\n\t} while (domElement.tagName != \"BODY\");\n\treturn domElement;\n}\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/dragdropblocktoolbar\n*/\n/**\n* Integration of a block Drag and Drop support with the block toolbar.\n*\n* @internal\n*/\nvar DragDropBlockToolbar = class extends Plugin {\n\t/**\n\t* Whether current dragging is started by block toolbar button dragging.\n\t*/\n\t_isBlockDragging = false;\n\t/**\n\t* DOM Emitter.\n\t*/\n\t_domEmitter = new (DomEmitterMixin())();\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"DragDropBlockToolbar\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tinit() {\n\t\tconst editor = this.editor;\n\t\tthis.listenTo(editor, \"change:isReadOnly\", (evt, name, isReadOnly) => {\n\t\t\tif (isReadOnly) {\n\t\t\t\tthis.forceDisabled(\"readOnlyMode\");\n\t\t\t\tthis._isBlockDragging = false;\n\t\t\t} else this.clearForceDisabled(\"readOnlyMode\");\n\t\t});\n\t\tif (env.isAndroid) this.forceDisabled(\"noAndroidSupport\");\n\t\tif (editor.plugins.has(\"BlockToolbar\")) {\n\t\t\tconst element = editor.plugins.get(\"BlockToolbar\").buttonView.element;\n\t\t\tthis._domEmitter.listenTo(element, \"dragstart\", (evt, data) => this._handleBlockDragStart(data));\n\t\t\tthis._domEmitter.listenTo(global.document, \"dragover\", (evt, data) => this._handleBlockDragging(data));\n\t\t\tthis._domEmitter.listenTo(global.document, \"drop\", (evt, data) => this._handleBlockDragging(data));\n\t\t\tthis._domEmitter.listenTo(global.document, \"dragend\", () => this._handleBlockDragEnd(), { useCapture: true });\n\t\t\tif (this.isEnabled) element.setAttribute(\"draggable\", \"true\");\n\t\t\tthis.on(\"change:isEnabled\", (evt, name, isEnabled) => {\n\t\t\t\telement.setAttribute(\"draggable\", isEnabled ? \"true\" : \"false\");\n\t\t\t});\n\t\t}\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tdestroy() {\n\t\tthis._domEmitter.stopListening();\n\t\treturn super.destroy();\n\t}\n\t/**\n\t* The `dragstart` event handler.\n\t*/\n\t_handleBlockDragStart(domEvent) {\n\t\tif (!this.isEnabled) return;\n\t\tconst model = this.editor.model;\n\t\tconst selection = model.document.selection;\n\t\tconst view = this.editor.editing.view;\n\t\tconst blocks = Array.from(selection.getSelectedBlocks());\n\t\tconst draggedRange = model.createRange(model.createPositionBefore(blocks[0]), model.createPositionAfter(blocks[blocks.length - 1]));\n\t\tmodel.change((writer) => writer.setSelection(draggedRange));\n\t\tthis._isBlockDragging = true;\n\t\tview.focus();\n\t\tview.getObserver(ClipboardObserver).onDomEvent(domEvent);\n\t}\n\t/**\n\t* The `dragover` and `drop` event handler.\n\t*/\n\t_handleBlockDragging(domEvent) {\n\t\tif (!this.isEnabled || !this._isBlockDragging) return;\n\t\tconst clientX = domEvent.clientX + (this.editor.locale.contentLanguageDirection == \"ltr\" ? 100 : -100);\n\t\tconst clientY = domEvent.clientY;\n\t\tconst target = document.elementFromPoint(clientX, clientY);\n\t\tconst view = this.editor.editing.view;\n\t\tif (!target || !target.closest(\".ck-editor__editable\")) return;\n\t\tview.getObserver(ClipboardObserver).onDomEvent({\n\t\t\t...domEvent,\n\t\t\ttype: domEvent.type,\n\t\t\tdataTransfer: domEvent.dataTransfer,\n\t\t\ttarget,\n\t\t\tclientX,\n\t\t\tclientY,\n\t\t\tpreventDefault: () => domEvent.preventDefault(),\n\t\t\tstopPropagation: () => domEvent.stopPropagation()\n\t\t});\n\t}\n\t/**\n\t* The `dragend` event handler.\n\t*/\n\t_handleBlockDragEnd() {\n\t\tthis._isBlockDragging = false;\n\t}\n};\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/dragdrop\n*/\n/**\n* The drag and drop feature. It works on top of the {@link module:clipboard/clipboardpipeline~ClipboardPipeline}.\n*\n* Read more about the clipboard integration in the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n*\n* @internal\n*/\nvar DragDrop = class extends Plugin {\n\t/**\n\t* The live range over the original content that is being dragged.\n\t*/\n\t_draggedRange;\n\t/**\n\t* The UID of current dragging that is used to verify if the drop started in the same editor as the drag start.\n\t*\n\t* **Note**: This is a workaround for broken 'dragend' events (they are not fired if the source text node got removed).\n\t*/\n\t_draggingUid;\n\t/**\n\t* The reference to the model element that currently has a `draggable` attribute set (it is set while dragging).\n\t*/\n\t_draggableElement;\n\t/**\n\t* A delayed callback removing draggable attributes.\n\t*/\n\t_clearDraggableAttributesDelayed = delay(() => this._clearDraggableAttributes(), 40);\n\t/**\n\t* Whether the dragged content can be dropped only in block context.\n\t*/\n\t_blockMode = false;\n\t/**\n\t* DOM Emitter.\n\t*/\n\t_domEmitter = new (DomEmitterMixin())();\n\t/**\n\t* The DOM element used to generate dragged preview image.\n\t*/\n\t_previewContainer;\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"DragDrop\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get requires() {\n\t\treturn [\n\t\t\tClipboardPipeline,\n\t\t\tWidget,\n\t\t\tDragDropTarget,\n\t\t\tDragDropBlockToolbar\n\t\t];\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tinit() {\n\t\tconst editor = this.editor;\n\t\tconst view = editor.editing.view;\n\t\tthis._draggedRange = null;\n\t\tthis._draggingUid = \"\";\n\t\tthis._draggableElement = null;\n\t\tview.addObserver(ClipboardObserver);\n\t\tview.addObserver(PointerObserver);\n\t\tthis._setupDragging();\n\t\tthis._setupContentInsertionIntegration();\n\t\tthis._setupClipboardInputIntegration();\n\t\tthis._setupDraggableAttributeHandling();\n\t\tthis.listenTo(editor, \"change:isReadOnly\", (evt, name, isReadOnly) => {\n\t\t\tif (isReadOnly) this.forceDisabled(\"readOnlyMode\");\n\t\t\telse this.clearForceDisabled(\"readOnlyMode\");\n\t\t});\n\t\tthis.on(\"change:isEnabled\", (evt, name, isEnabled) => {\n\t\t\tif (!isEnabled) this._finalizeDragging(false);\n\t\t});\n\t\tif (env.isAndroid) this.forceDisabled(\"noAndroidSupport\");\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tdestroy() {\n\t\tif (this._draggedRange) {\n\t\t\tthis._draggedRange.detach();\n\t\t\tthis._draggedRange = null;\n\t\t}\n\t\tif (this._previewContainer) this._previewContainer.remove();\n\t\tthis._domEmitter.stopListening();\n\t\tthis._clearDraggableAttributesDelayed.cancel();\n\t\treturn super.destroy();\n\t}\n\t/**\n\t* Drag and drop events handling.\n\t*/\n\t_setupDragging() {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst view = editor.editing.view;\n\t\tconst viewDocument = view.document;\n\t\tconst dragDropTarget = editor.plugins.get(DragDropTarget);\n\t\tthis.listenTo(viewDocument, \"dragstart\", (evt, data) => {\n\t\t\tif (data.target?.is(\"editableElement\")) {\n\t\t\t\tdata.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._prepareDraggedRange(data.target);\n\t\t\tif (!this._draggedRange) {\n\t\t\t\tdata.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._draggingUid = uid();\n\t\t\tconst canEditAtDraggedRange = this.isEnabled && editor.model.canEditAt(this._draggedRange);\n\t\t\tdata.dataTransfer.effectAllowed = canEditAtDraggedRange ? \"copyMove\" : \"copy\";\n\t\t\tdata.dataTransfer.setData(\"application/ckeditor5-dragging-uid\", this._draggingUid);\n\t\t\tconst draggedSelection = model.createSelection(this._draggedRange.toRange());\n\t\t\tthis.editor.plugins.get(\"ClipboardPipeline\")._fireOutputTransformationEvent(data.dataTransfer, draggedSelection, \"dragstart\");\n\t\t\tconst { dataTransfer, domTarget, domEvent } = data;\n\t\t\tconst { clientX } = domEvent;\n\t\t\tthis._updatePreview({\n\t\t\t\tdataTransfer,\n\t\t\t\tdomTarget,\n\t\t\t\tclientX\n\t\t\t});\n\t\t\tdata.stopPropagation();\n\t\t\tif (!canEditAtDraggedRange) {\n\t\t\t\tthis._draggedRange.detach();\n\t\t\t\tthis._draggedRange = null;\n\t\t\t\tthis._draggingUid = \"\";\n\t\t\t}\n\t\t}, { priority: \"low\" });\n\t\tthis.listenTo(viewDocument, \"dragend\", (evt, data) => {\n\t\t\tthis._finalizeDragging(!data.dataTransfer.isCanceled && data.dataTransfer.dropEffect == \"move\");\n\t\t}, { priority: \"low\" });\n\t\tthis._domEmitter.listenTo(global.document, \"dragend\", () => {\n\t\t\tthis._blockMode = false;\n\t\t}, { useCapture: true });\n\t\tthis.listenTo(viewDocument, \"dragenter\", () => {\n\t\t\tif (!this.isEnabled) return;\n\t\t\tview.focus();\n\t\t});\n\t\tthis.listenTo(viewDocument, \"dragleave\", () => {\n\t\t\tdragDropTarget.removeDropMarkerDelayed();\n\t\t});\n\t\tthis.listenTo(viewDocument, \"dragging\", (evt, data) => {\n\t\t\tif (!this.isEnabled) {\n\t\t\t\tdata.dataTransfer.dropEffect = \"none\";\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { clientX, clientY } = data.domEvent;\n\t\t\tif (!dragDropTarget.updateDropMarker(data.target, data.targetRanges, clientX, clientY, this._blockMode, this._draggedRange)) {\n\t\t\t\tdata.dataTransfer.dropEffect = \"none\";\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!this._draggedRange) data.dataTransfer.dropEffect = \"copy\";\n\t\t\tif (!env.isGecko) {\n\t\t\t\tif (data.dataTransfer.effectAllowed == \"copy\") data.dataTransfer.dropEffect = \"copy\";\n\t\t\t\telse if ([\"all\", \"copyMove\"].includes(data.dataTransfer.effectAllowed)) data.dataTransfer.dropEffect = \"move\";\n\t\t\t}\n\t\t\tevt.stop();\n\t\t}, { priority: \"low\" });\n\t}\n\t/**\n\t* Integration with the `clipboardInput` event.\n\t*/\n\t_setupClipboardInputIntegration() {\n\t\tconst editor = this.editor;\n\t\tconst viewDocument = editor.editing.view.document;\n\t\tconst dragDropTarget = editor.plugins.get(DragDropTarget);\n\t\tthis.listenTo(viewDocument, \"clipboardInput\", (evt, data) => {\n\t\t\tif (data.method != \"drop\") return;\n\t\t\tconst { clientX, clientY } = data.domEvent;\n\t\t\tconst targetRange = dragDropTarget.getFinalDropRange(data.target, data.targetRanges, clientX, clientY, this._blockMode, this._draggedRange);\n\t\t\tif (!targetRange) {\n\t\t\t\tthis._finalizeDragging(false);\n\t\t\t\tevt.stop();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this._draggedRange && this._draggingUid != data.dataTransfer.getData(\"application/ckeditor5-dragging-uid\")) {\n\t\t\t\tthis._draggedRange.detach();\n\t\t\t\tthis._draggedRange = null;\n\t\t\t\tthis._draggingUid = \"\";\n\t\t\t}\n\t\t\tif (getFinalDropEffect(data.dataTransfer) == \"move\" && this._draggedRange && this._draggedRange.containsRange(targetRange, true)) {\n\t\t\t\tthis._finalizeDragging(false);\n\t\t\t\tevt.stop();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdata.targetRanges = [editor.editing.mapper.toViewRange(targetRange)];\n\t\t}, { priority: \"high\" });\n\t}\n\t/**\n\t* Integration with the `contentInsertion` event of the clipboard pipeline.\n\t*/\n\t_setupContentInsertionIntegration() {\n\t\tconst clipboardPipeline = this.editor.plugins.get(ClipboardPipeline);\n\t\tclipboardPipeline.on(\"contentInsertion\", (evt, data) => {\n\t\t\tif (!this.isEnabled || data.method !== \"drop\") return;\n\t\t\tconst ranges = data.targetRanges.map((viewRange) => this.editor.editing.mapper.toModelRange(viewRange));\n\t\t\tthis.editor.model.change((writer) => writer.setSelection(ranges));\n\t\t}, { priority: \"high\" });\n\t\tclipboardPipeline.on(\"contentInsertion\", (evt, data) => {\n\t\t\tif (!this.isEnabled || data.method !== \"drop\") return;\n\t\t\tconst isMove = getFinalDropEffect(data.dataTransfer) == \"move\";\n\t\t\tconst isSuccess = !data.resultRange || !data.resultRange.isCollapsed;\n\t\t\tthis._finalizeDragging(isSuccess && isMove);\n\t\t}, { priority: \"lowest\" });\n\t}\n\t/**\n\t* Adds listeners that add the `draggable` attribute to the elements while the mouse button is down so the dragging could start.\n\t*/\n\t_setupDraggableAttributeHandling() {\n\t\tconst editor = this.editor;\n\t\tconst view = editor.editing.view;\n\t\tconst viewDocument = view.document;\n\t\tthis.listenTo(viewDocument, \"pointerdown\", (evt, data) => {\n\t\t\tif (env.isAndroid || !data) return;\n\t\t\tthis._clearDraggableAttributesDelayed.cancel();\n\t\t\tlet draggableElement = findDraggableWidget(data.target);\n\t\t\tif (env.isBlink && !editor.isReadOnly && !draggableElement && !viewDocument.selection.isCollapsed) {\n\t\t\t\tconst selectedElement = viewDocument.selection.getSelectedElement();\n\t\t\t\tif (!selectedElement || !isWidget(selectedElement)) draggableElement = viewDocument.selection.editableElement;\n\t\t\t}\n\t\t\tif (draggableElement) {\n\t\t\t\tview.change((writer) => {\n\t\t\t\t\twriter.setAttribute(\"draggable\", \"true\", draggableElement);\n\t\t\t\t});\n\t\t\t\tthis._draggableElement = editor.editing.mapper.toModelElement(draggableElement);\n\t\t\t}\n\t\t});\n\t\tthis.listenTo(viewDocument, \"pointerup\", () => {\n\t\t\tif (!env.isAndroid) this._clearDraggableAttributesDelayed();\n\t\t});\n\t}\n\t/**\n\t* Removes the `draggable` attribute from the element that was used for dragging.\n\t*/\n\t_clearDraggableAttributes() {\n\t\tconst editing = this.editor.editing;\n\t\tediting.view.change((writer) => {\n\t\t\tif (this._draggableElement && this._draggableElement.root.rootName != \"$graveyard\") writer.removeAttribute(\"draggable\", editing.mapper.toViewElement(this._draggableElement));\n\t\t\tthis._draggableElement = null;\n\t\t});\n\t}\n\t/**\n\t* Deletes the dragged content from its original range and clears the dragging state.\n\t*\n\t* @param moved Whether the move succeeded.\n\t*/\n\t_finalizeDragging(moved) {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\teditor.plugins.get(DragDropTarget).removeDropMarker();\n\t\tthis._clearDraggableAttributes();\n\t\tif (editor.plugins.has(\"WidgetToolbarRepository\")) editor.plugins.get(\"WidgetToolbarRepository\").clearForceDisabled(\"dragDrop\");\n\t\tthis._draggingUid = \"\";\n\t\tif (this._previewContainer) {\n\t\t\tthis._previewContainer.remove();\n\t\t\tthis._previewContainer = void 0;\n\t\t}\n\t\tif (!this._draggedRange) return;\n\t\tif (moved && this.isEnabled) model.change((writer) => {\n\t\t\tconst selection = model.createSelection(this._draggedRange);\n\t\t\tmodel.deleteContent(selection, { doNotAutoparagraph: true });\n\t\t\tconst selectionParent = selection.getFirstPosition().parent;\n\t\t\tif (selectionParent.isEmpty && !model.schema.checkChild(selectionParent, \"$text\") && model.schema.checkChild(selectionParent, \"paragraph\")) writer.insertElement(\"paragraph\", selectionParent, 0);\n\t\t});\n\t\tthis._draggedRange.detach();\n\t\tthis._draggedRange = null;\n\t}\n\t/**\n\t* Sets the dragged source range based on event target and document selection.\n\t*/\n\t_prepareDraggedRange(target) {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst selection = model.document.selection;\n\t\tconst draggableWidget = target ? findDraggableWidget(target) : null;\n\t\tif (draggableWidget) {\n\t\t\tconst modelElement = editor.editing.mapper.toModelElement(draggableWidget);\n\t\t\tthis._draggedRange = ModelLiveRange.fromRange(model.createRangeOn(modelElement));\n\t\t\tthis._blockMode = model.schema.isBlock(modelElement);\n\t\t\tif (editor.plugins.has(\"WidgetToolbarRepository\")) editor.plugins.get(\"WidgetToolbarRepository\").forceDisabled(\"dragDrop\");\n\t\t\treturn;\n\t\t}\n\t\tif (selection.isCollapsed && !selection.getFirstPosition().parent.isEmpty) return;\n\t\tconst blocks = Array.from(selection.getSelectedBlocks());\n\t\tconst draggedRange = selection.getFirstRange();\n\t\tif (blocks.length == 0) {\n\t\t\tthis._draggedRange = ModelLiveRange.fromRange(draggedRange);\n\t\t\treturn;\n\t\t}\n\t\tconst blockRange = getRangeIncludingFullySelectedParents(model, blocks);\n\t\tif (blocks.length > 1) {\n\t\t\tthis._draggedRange = ModelLiveRange.fromRange(blockRange);\n\t\t\tthis._blockMode = true;\n\t\t} else if (blocks.length == 1) {\n\t\t\tconst touchesBlockEdges = draggedRange.start.isTouching(blockRange.start) && draggedRange.end.isTouching(blockRange.end);\n\t\t\tthis._draggedRange = ModelLiveRange.fromRange(touchesBlockEdges ? blockRange : draggedRange);\n\t\t\tthis._blockMode = touchesBlockEdges;\n\t\t}\n\t\tmodel.change((writer) => writer.setSelection(this._draggedRange.toRange()));\n\t}\n\t/**\n\t* Updates the dragged preview image.\n\t*/\n\t_updatePreview({ dataTransfer, domTarget, clientX }) {\n\t\tconst view = this.editor.editing.view;\n\t\tconst editable = view.document.selection.editableElement;\n\t\tconst domEditable = view.domConverter.mapViewToDom(editable);\n\t\tconst computedStyle = global.window.getComputedStyle(domEditable);\n\t\tif (!this._previewContainer) {\n\t\t\tthis._previewContainer = createElement(global.document, \"div\", { style: \"position: fixed; left: -999999px;\" });\n\t\t\tglobal.document.body.appendChild(this._previewContainer);\n\t\t} else if (this._previewContainer.firstElementChild) this._previewContainer.removeChild(this._previewContainer.firstElementChild);\n\t\tconst preview = createElement(global.document, \"div\");\n\t\tpreview.className = \"ck ck-content ck-clipboard-preview\";\n\t\tconst domRect = new Rect(domEditable);\n\t\tconst domEditablePaddingLeft = parseFloat(computedStyle.paddingLeft);\n\t\tconst domEditablePaddingRight = parseFloat(computedStyle.paddingRight);\n\t\tconst editableWidth = parseFloat(computedStyle.width) - domEditablePaddingLeft - domEditablePaddingRight;\n\t\tif (!domEditable.contains(domTarget)) if (!env.isiOS) {\n\t\t\tconst offsetLeft = domRect.left - clientX + domEditablePaddingLeft;\n\t\t\tpreview.style.width = `${editableWidth + offsetLeft}px`;\n\t\t\tpreview.style.paddingLeft = `${offsetLeft}px`;\n\t\t} else {\n\t\t\tpreview.style.width = `${editableWidth}px`;\n\t\t\tpreview.style.backgroundColor = \"var(--ck-color-base-background)\";\n\t\t}\n\t\telse if (env.isiOS) {\n\t\t\tpreview.style.maxWidth = `${editableWidth}px`;\n\t\t\tpreview.style.padding = \"10px\";\n\t\t\tpreview.style.minWidth = \"200px\";\n\t\t\tpreview.style.minHeight = \"20px\";\n\t\t\tpreview.style.boxSizing = \"border-box\";\n\t\t\tpreview.style.backgroundColor = \"var(--ck-color-base-background)\";\n\t\t} else return;\n\t\tview.domConverter.setContentOf(preview, dataTransfer.getData(\"text/html\"));\n\t\tdataTransfer.setDragImage(preview, 0, 0);\n\t\tthis._previewContainer.appendChild(preview);\n\t}\n};\n/**\n* Returns the drop effect that should be a result of dragging the content.\n* This function is handling a quirk when checking the effect in the 'drop' DOM event.\n*/\nfunction getFinalDropEffect(dataTransfer) {\n\tif (env.isGecko) return dataTransfer.dropEffect;\n\treturn [\"all\", \"copyMove\"].includes(dataTransfer.effectAllowed) ? \"move\" : \"copy\";\n}\n/**\n* Returns a widget element that should be dragged.\n*/\nfunction findDraggableWidget(target) {\n\tif (target.is(\"editableElement\")) return null;\n\tif (target.hasClass(\"ck-widget__selection-handle\")) return target.findAncestor(isWidget);\n\tif (isWidget(target)) return target;\n\tconst ancestor = target.findAncestor((node) => isWidget(node) || node.is(\"editableElement\"));\n\tif (isWidget(ancestor)) return ancestor;\n\treturn null;\n}\n/**\n* Recursively checks if common parent of provided elements doesn't have any other children. If that's the case,\n* it returns range including this parent. Otherwise, it returns only the range from first to last element.\n*\n* Example:\n*\n* <blockQuote>\n* <paragraph>[Test 1</paragraph>\n* <paragraph>Test 2</paragraph>\n* <paragraph>Test 3]</paragraph>\n* <blockQuote>\n*\n* Because all elements inside the `blockQuote` are selected, the range is extended to include the `blockQuote` too.\n* If only first and second paragraphs would be selected, the range would not include it.\n*/\nfunction getRangeIncludingFullySelectedParents(model, elements) {\n\tconst firstElement = elements[0];\n\tconst lastElement = elements[elements.length - 1];\n\tconst parent = firstElement.getCommonAncestor(lastElement);\n\tconst startPosition = model.createPositionBefore(firstElement);\n\tconst endPosition = model.createPositionAfter(lastElement);\n\tif (parent && parent.is(\"element\") && !model.schema.isLimit(parent)) {\n\t\tconst parentRange = model.createRangeOn(parent);\n\t\tconst touchesStart = startPosition.isTouching(parentRange.start);\n\t\tconst touchesEnd = endPosition.isTouching(parentRange.end);\n\t\tif (touchesStart && touchesEnd) return getRangeIncludingFullySelectedParents(model, [parent]);\n\t}\n\treturn model.createRange(startPosition, endPosition);\n}\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/pasteplaintext\n*/\n/**\n* The plugin detects the user's intention to paste plain text.\n*\n* For example, it detects the <kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>V</kbd> keystroke.\n*/\nvar PastePlainText = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"PastePlainText\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get requires() {\n\t\treturn [ClipboardPipeline];\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tinit() {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst view = editor.editing.view;\n\t\tconst selection = model.document.selection;\n\t\tview.addObserver(ClipboardObserver);\n\t\teditor.plugins.get(ClipboardPipeline).on(\"contentInsertion\", (evt, data) => {\n\t\t\tif (!isUnformattedInlineContent(data.content, model)) return;\n\t\t\tmodel.change((writer) => {\n\t\t\t\tconst textAttributes = Array.from(selection.getAttributes()).filter(([key]) => model.schema.getAttributeProperties(key).isFormatting);\n\t\t\t\tif (!selection.isCollapsed) model.deleteContent(selection, { doNotAutoparagraph: true });\n\t\t\t\ttextAttributes.push(...selection.getAttributes());\n\t\t\t\tconst range = writer.createRangeIn(data.content);\n\t\t\t\tfor (const item of range.getItems()) for (const attribute of textAttributes) if (model.schema.checkAttribute(item, attribute[0])) writer.setAttribute(attribute[0], attribute[1], item);\n\t\t\t});\n\t\t});\n\t}\n};\n/**\n* Returns true if specified `documentFragment` represents the unformatted inline content.\n*/\nfunction isUnformattedInlineContent(documentFragment, model) {\n\tlet range = model.createRangeIn(documentFragment);\n\tif (documentFragment.childCount == 1) {\n\t\tconst child = documentFragment.getChild(0);\n\t\tif (child.is(\"element\") && model.schema.isBlock(child) && !model.schema.isObject(child) && !model.schema.isLimit(child)) range = model.createRangeIn(child);\n\t}\n\tfor (const child of range.getItems()) {\n\t\tif (!model.schema.isInline(child)) return false;\n\t\tif (Array.from(child.getAttributeKeys()).find((key) => model.schema.getAttributeProperties(key).isFormatting)) return false;\n\t}\n\treturn true;\n}\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n/**\n* @module clipboard/clipboard\n*/\n/**\n* The clipboard feature.\n*\n* Read more about the clipboard integration in the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n*\n* This is a \"glue\" plugin which loads the following plugins:\n* * {@link module:clipboard/clipboardpipeline~ClipboardPipeline}\n* * {@link module:clipboard/dragdrop~DragDrop}\n* * {@link module:clipboard/pasteplaintext~PastePlainText}\n*/\nvar Clipboard = class extends Plugin {\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get pluginName() {\n\t\treturn \"Clipboard\";\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get isOfficialPlugin() {\n\t\treturn true;\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tstatic get requires() {\n\t\treturn [\n\t\t\tClipboardMarkersUtils,\n\t\t\tClipboardPipeline,\n\t\t\tDragDrop,\n\t\t\tPastePlainText\n\t\t];\n\t}\n\t/**\n\t* @inheritDoc\n\t*/\n\tinit() {\n\t\tconst editor = this.editor;\n\t\tconst t = this.editor.t;\n\t\teditor.accessibility.addKeystrokeInfos({ keystrokes: [\n\t\t\t{\n\t\t\t\tlabel: t(\"Copy selected content\"),\n\t\t\t\tkeystroke: \"CTRL+C\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: t(\"Paste content\"),\n\t\t\t\tkeystroke: \"CTRL+V\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: t(\"Paste content as plain text\"),\n\t\t\t\tkeystroke: \"CTRL+SHIFT+V\"\n\t\t\t}\n\t\t] });\n\t}\n};\n\n/**\n* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n*/\n\nexport { Clipboard, ClipboardMarkersUtils, ClipboardObserver, ClipboardPipeline, DragDrop, DragDrop as _DragDrop, DragDropBlockToolbar, DragDropBlockToolbar as _DragDropBlockToolbar, DragDropTarget, DragDropTarget as _DragDropTarget, PastePlainText, LineView as _ClipboardLineView, normalizeClipboardData as _normalizeClipboardData, plainTextToHtml, viewToPlainText };\n//# sourceMappingURL=index.js.map","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/utils/plaintexttohtml\n */\n\n/**\n * Converts plain text to its HTML-ized version.\n *\n * @param text The plain text to convert.\n * @returns HTML generated from the plain text.\n */\nexport function plainTextToHtml( text: string ): string {\n\ttext = text\n\t\t// Encode &.\n\t\t.replace( /&/g, '&amp;' )\n\t\t// Encode <>.\n\t\t.replace( /</g, '&lt;' )\n\t\t.replace( />/g, '&gt;' )\n\t\t// Creates a paragraph for each double line break.\n\t\t.replace( /\\r?\\n\\r?\\n/g, '</p><p>' )\n\t\t// Creates a line break for each single line break.\n\t\t.replace( /\\r?\\n/g, '<br>' )\n\t\t// Replace tabs with four spaces.\n\t\t.replace( /\\t/g, '&nbsp;&nbsp;&nbsp;&nbsp;' )\n\t\t// Preserve trailing spaces (only the first and last one – the rest is handled below).\n\t\t.replace( /^\\s/, '&nbsp;' )\n\t\t.replace( /\\s$/, '&nbsp;' )\n\t\t// Preserve other subsequent spaces now.\n\t\t.replace( /\\s\\s/g, ' &nbsp;' );\n\n\tif ( text.includes( '</p><p>' ) || text.includes( '<br>' ) ) {\n\t\t// If we created paragraphs above, add the trailing ones.\n\t\ttext = `<p>${ text }</p>`;\n\t}\n\n\t// TODO:\n\t// * What about '\\nfoo' vs ' foo'?\n\n\treturn text;\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/clipboardobserver\n */\n\nimport { EventInfo, getRangeFromMouseEvent } from '@ckeditor/ckeditor5-utils';\n\nimport {\n\tViewDataTransfer,\n\tDomEventObserver,\n\ttype ViewDocumentDomEventData,\n\ttype EditingView,\n\ttype ViewDocumentFragment,\n\ttype ViewElement,\n\ttype ViewRange\n} from '@ckeditor/ckeditor5-engine';\n\nimport { plainTextToHtml } from './utils/plaintexttohtml.js';\n\n/**\n * Clipboard events observer.\n *\n * Fires the following events:\n *\n * * {@link module:engine/view/document~ViewDocument#event:clipboardInput},\n * * {@link module:engine/view/document~ViewDocument#event:paste},\n * * {@link module:engine/view/document~ViewDocument#event:copy},\n * * {@link module:engine/view/document~ViewDocument#event:cut},\n * * {@link module:engine/view/document~ViewDocument#event:drop},\n * * {@link module:engine/view/document~ViewDocument#event:dragover},\n * * {@link module:engine/view/document~ViewDocument#event:dragging},\n * * {@link module:engine/view/document~ViewDocument#event:dragstart},\n * * {@link module:engine/view/document~ViewDocument#event:dragend},\n * * {@link module:engine/view/document~ViewDocument#event:dragenter},\n * * {@link module:engine/view/document~ViewDocument#event:dragleave}.\n *\n * **Note**: This observer is not available by default (ckeditor5-engine does not add it on its own).\n * To make it available, it needs to be added to {@link module:engine/view/document~ViewDocument} by using\n * the {@link module:engine/view/view~EditingView#addObserver `View#addObserver()`} method. Alternatively, you can load the\n * {@link module:clipboard/clipboard~Clipboard} plugin which adds this observer automatically (because it uses it).\n */\nexport class ClipboardObserver extends DomEventObserver<\n\t'paste' | 'copy' | 'cut' | 'drop' | 'dragover' | 'dragstart' | 'dragend' | 'dragenter' | 'dragleave',\n\tClipboardEventData\n> {\n\tpublic readonly domEventType = [\n\t\t'paste', 'copy', 'cut', 'drop', 'dragover', 'dragstart', 'dragend', 'dragenter', 'dragleave'\n\t] as const;\n\n\tconstructor( view: EditingView ) {\n\t\tsuper( view );\n\n\t\tconst viewDocument = this.document;\n\n\t\tthis.listenTo<ViewDocumentPasteEvent>( viewDocument, 'paste', handleInput( 'clipboardInput' ), { priority: 'low' } );\n\t\tthis.listenTo<ViewDocumentDropEvent>( viewDocument, 'drop', handleInput( 'clipboardInput' ), { priority: 'low' } );\n\t\tthis.listenTo<ViewDocumentDragOverEvent>( viewDocument, 'dragover', handleInput( 'dragging' ), { priority: 'low' } );\n\n\t\tfunction handleInput( type: 'clipboardInput' | 'dragging' ) {\n\t\t\treturn ( evt: EventInfo, data: ViewDocumentDomEventData & ClipboardEventData ) => {\n\t\t\t\tdata.preventDefault();\n\n\t\t\t\tconst targetRanges = data.dropRange ? [ data.dropRange ] : null;\n\t\t\t\tconst dataTransfer = data.dataTransfer;\n\t\t\t\tconst eventInfo = new EventInfo( viewDocument, type );\n\n\t\t\t\tlet content = '';\n\n\t\t\t\tif ( dataTransfer.getData( 'text/html' ) ) {\n\t\t\t\t\tcontent = dataTransfer.getData( 'text/html' );\n\t\t\t\t} else if ( dataTransfer.getData( 'text/plain' ) ) {\n\t\t\t\t\tcontent = plainTextToHtml( dataTransfer.getData( 'text/plain' ) );\n\t\t\t\t}\n\n\t\t\t\tviewDocument.fire( eventInfo, {\n\t\t\t\t\tdataTransfer,\n\t\t\t\t\tcontent,\n\t\t\t\t\tmethod: evt.name,\n\t\t\t\t\ttargetRanges,\n\t\t\t\t\ttarget: data.target,\n\t\t\t\t\tdomEvent: data.domEvent\n\t\t\t\t} );\n\n\t\t\t\t// If CKEditor handled the input, do not bubble the original event any further.\n\t\t\t\t// This helps external integrations recognize that fact and act accordingly.\n\t\t\t\t// https://github.com/ckeditor/ckeditor5-upload/issues/92\n\t\t\t\tif ( eventInfo.stop.called ) {\n\t\t\t\t\tdata.stopPropagation();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}\n\n\tpublic onDomEvent( domEvent: ClipboardEvent | DragEvent ): void {\n\t\tconst nativeDataTransfer = 'clipboardData' in domEvent ? domEvent.clipboardData! : domEvent.dataTransfer!;\n\t\tconst cacheFiles = domEvent.type == 'drop' || domEvent.type == 'paste';\n\n\t\tconst evtData: ClipboardEventData = {\n\t\t\tdataTransfer: new ViewDataTransfer( nativeDataTransfer, { cacheFiles } )\n\t\t};\n\n\t\tif ( domEvent.type == 'drop' || domEvent.type == 'dragover' ) {\n\t\t\tconst domRange = getRangeFromMouseEvent( domEvent as DragEvent );\n\n\t\t\tevtData.dropRange = domRange && this.view.domConverter.domRangeToView( domRange );\n\t\t}\n\n\t\tthis.fire( domEvent.type, domEvent, evtData );\n\t}\n}\n\n/**\n * The data of 'paste', 'copy', 'cut', 'drop', 'dragover', 'dragstart', 'dragend', 'dragenter' and 'dragleave' events.\n */\nexport interface ClipboardEventData {\n\n\t/**\n\t * The data transfer instance.\n\t */\n\tdataTransfer: ViewDataTransfer;\n\n\t/**\n\t * The position into which the content is dropped.\n\t */\n\tdropRange?: ViewRange | null;\n}\n\n/**\n * Fired as a continuation of the {@link module:engine/view/document~ViewDocument#event:paste} and\n * {@link module:engine/view/document~ViewDocument#event:drop} events.\n *\n * It is a part of the {@glink framework/deep-dive/clipboard#input-pipeline clipboard input pipeline}.\n *\n * This event carries a `dataTransfer` object which comes from the clipboard and whose content should be processed\n * and inserted into the editor.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the {@link module:clipboard/clipboard~Clipboard}\n * plugin, but if for some reason it is not loaded, the observer must be added manually.\n *\n * @see module:clipboard/clipboardobserver~ClipboardObserver\n * @see module:clipboard/clipboard~Clipboard\n *\n * @eventName module:engine/view/document~ViewDocument#clipboardInput\n * @param data The event data.\n */\nexport type ViewDocumentClipboardInputEvent = {\n\tname: 'clipboardInput';\n\targs: [ data: ViewDocumentDomEventData<ClipboardEvent | DragEvent> & ClipboardInputEventData ];\n};\n\n/**\n * The value of the {@link module:engine/view/document~ViewDocument#event:paste},\n * {@link module:engine/view/document~ViewDocument#event:copy} and {@link module:engine/view/document~ViewDocument#event:cut} events.\n *\n * In order to access the clipboard data, use the `dataTransfer` property.\n */\nexport interface ClipboardInputEventData {\n\n\t/**\n\t * Data transfer instance.\n\t */\n\tdataTransfer: ViewDataTransfer;\n\n\t/**\n\t * Whether the event was triggered by a paste or a drop operation.\n\t */\n\tmethod: 'paste' | 'drop';\n\n\t/**\n\t * The tree view element representing the target.\n\t */\n\ttarget: ViewElement;\n\n\t/**\n\t * The ranges which are the target of the operation (usually – into which the content should be inserted).\n\t * If the clipboard input was triggered by a paste operation, this property is not set. If by a drop operation,\n\t * then it is the drop position (which can be different than the selection at the moment of the drop).\n\t */\n\ttargetRanges: Array<ViewRange> | null;\n\n\t/**\n\t * The content of clipboard input. Defaults to `text/html`. Falls-back to `text/plain`.\n\t */\n\tcontent: string | ViewDocumentFragment;\n\n\t/**\n\t * Custom data stored by the `clipboardInput` event handlers. Custom properties of this object can be defined and use to\n\t * pass parameters between listeners. Content of this property is passed to the `inputTransformation` event.\n\t */\n\textraContent?: unknown;\n}\n\n/**\n * Fired when the user drags the content over one of the editing roots of the editor.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the {@link module:clipboard/clipboard~Clipboard}\n * plugin, but if for some reason it is not loaded, the observer must be added manually.\n *\n * @see module:engine/view/document~ViewDocument#event:clipboardInput\n *\n * @eventName module:engine/view/document~ViewDocument#dragover\n * @param data The event data.\n */\nexport type ViewDocumentDragOverEvent = {\n\tname: 'dragover';\n\targs: [ data: ViewDocumentDomEventData<DragEvent> & ClipboardEventData ];\n};\n\n/**\n * Fired when the user dropped the content into one of the editing roots of the editor.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the {@link module:clipboard/clipboard~Clipboard}\n * plugin, but if for some reason it is not loaded, the observer must be added manually.\n *\n * @see module:engine/view/document~ViewDocument#event:clipboardInput\n *\n * @eventName module:engine/view/document~ViewDocument#drop\n * @param data The event data.\n */\nexport type ViewDocumentDropEvent = {\n\tname: 'drop';\n\targs: [ data: ViewDocumentDomEventData<DragEvent> & ClipboardEventData ];\n};\n\n/**\n * Fired when the user pasted the content into one of the editing roots of the editor.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the {@link module:clipboard/clipboard~Clipboard}\n * plugin, but if for some reason it is not loaded, the observer must be added manually.\n *\n * @see module:engine/view/document~ViewDocument#event:clipboardInput\n *\n * @eventName module:engine/view/document~ViewDocument#paste\n * @param {module:clipboard/clipboardobserver~ClipboardEventData} data The event data.\n */\nexport type ViewDocumentPasteEvent = {\n\tname: 'paste';\n\targs: [ data: ViewDocumentDomEventData<ClipboardEvent> & ClipboardEventData ];\n};\n\n/**\n * Fired when the user copied the content from one of the editing roots of the editor.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the {@link module:clipboard/clipboard~Clipboard}\n * plugin, but if for some reason it is not loaded, the observer must be added manually.\n *\n * @see module:clipboard/clipboardobserver~ClipboardObserver\n *\n * @eventName module:engine/view/document~ViewDocument#copy\n * @param data The event data.\n */\nexport type ViewDocumentCopyEvent = {\n\tname: 'copy';\n\targs: [ data: ViewDocumentDomEventData<ClipboardEvent> & ClipboardEventData ];\n};\n\n/**\n * Fired when the user cut the content from one of the editing roots of the editor.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the {@link module:clipboard/clipboard~Clipboard}\n * plugin, but if for some reason it is not loaded, the observer must be added manually.\n *\n * @see module:clipboard/clipboardobserver~ClipboardObserver\n *\n * @eventName module:engine/view/document~ViewDocument#cut\n * @param data The event data.\n */\nexport type ViewDocumentCutEvent = {\n\tname: 'cut';\n\targs: [ data: ViewDocumentDomEventData<ClipboardEvent> & ClipboardEventData ];\n};\n\n/**\n * Fired as a continuation of the {@link module:engine/view/document~ViewDocument#event:dragover} event.\n *\n * It is a part of the {@glink framework/deep-dive/clipboard#input-pipeline clipboard input pipeline}.\n *\n * This event carries a `dataTransfer` object which comes from the clipboard and whose content should be processed\n * and inserted into the editor.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the\n * {@link module:clipboard/clipboard~Clipboard} plugin, but if for some reason it is not loaded,\n * the observer must be added manually.\n *\n * @see module:clipboard/clipboardobserver~ClipboardObserver\n * @see module:clipboard/clipboard~Clipboard\n *\n * @eventName module:engine/view/document~ViewDocument#dragging\n * @param data The event data.\n */\nexport type ViewDocumentDraggingEvent = {\n\tname: 'dragging';\n\targs: [ data: ViewDocumentDomEventData<DragEvent> & DraggingEventData ];\n};\n\nexport interface DraggingEventData {\n\n\t/**\n\t * The data transfer instance.\n\t */\n\tdataTransfer: ViewDataTransfer;\n\n\t/**\n\t * Whether the event was triggered by a paste or a drop operation.\n\t */\n\tmethod: 'dragover';\n\n\t/**\n\t * The tree view element representing the target.\n\t */\n\ttarget: Element;\n\n\t/**\n\t * Ranges which are the target of the operation (usually – into which the content should be inserted).\n\t * It is the drop position (which can be different than the selection at the moment of drop).\n\t */\n\ttargetRanges: Array<ViewRange> | null;\n}\n\n/**\n * Fired when the user starts dragging the content in one of the editing roots of the editor.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the {@link module:clipboard/clipboard~Clipboard}\n * plugin, but if for some reason it is not loaded, the observer must be added manually.\n *\n * @see module:engine/view/document~ViewDocument#event:clipboardInput\n *\n * @eventName module:engine/view/document~ViewDocument#dragstart\n * @param data The event data.\n */\nexport type ViewDocumentDragStartEvent = {\n\tname: 'dragstart';\n\targs: [ data: ViewDocumentDomEventData<DragEvent> & ClipboardEventData ];\n};\n\n/**\n * Fired when the user ended dragging the content.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the {@link module:clipboard/clipboard~Clipboard}\n * plugin, but if for some reason it is not loaded, the observer must be added manually.\n *\n * @see module:engine/view/document~ViewDocument#event:clipboardInput\n *\n * @eventName module:engine/view/document~ViewDocument#dragend\n * @param data The event data.\n */\nexport type ViewDocumentDragEndEvent = {\n\tname: 'dragend';\n\targs: [ data: ViewDocumentDomEventData<DragEvent> & ClipboardEventData ];\n};\n\n/**\n * Fired when the user drags the content into one of the editing roots of the editor.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the {@link module:clipboard/clipboard~Clipboard}\n * plugin, but if for some reason it is not loaded, the observer must be added manually.\n *\n * @see module:engine/view/document~ViewDocument#event:clipboardInput\n *\n * @eventName module:engine/view/document~ViewDocument#dragenter\n * @param data The event data.\n */\nexport type ViewDocumentDragEnterEvent = {\n\tname: 'dragenter';\n\targs: [ data: ViewDocumentDomEventData<DragEvent> & ClipboardEventData ];\n};\n\n/**\n * Fired when the user drags the content out of one of the editing roots of the editor.\n *\n * Introduced by {@link module:clipboard/clipboardobserver~ClipboardObserver}.\n *\n * **Note**: This event is not available by default. To make it available, {@link module:clipboard/clipboardobserver~ClipboardObserver}\n * needs to be added to the {@link module:engine/view/document~ViewDocument} by using the\n * {@link module:engine/view/view~EditingView#addObserver} method. This is usually done by the {@link module:clipboard/clipboard~Clipboard}\n * plugin, but if for some reason it is not loaded, the observer must be added manually.\n *\n * @see module:engine/view/document~ViewDocument#event:clipboardInput\n *\n * @eventName module:engine/view/document~ViewDocument#dragleave\n * @param data The event data.\n */\nexport type ViewDocumentDragLeaveEvent = {\n\tname: 'dragleave';\n\targs: [ data: ViewDocumentDomEventData<DragEvent> & ClipboardEventData ];\n};\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/utils/normalizeclipboarddata\n */\n\n/**\n * Removes some popular browser quirks out of the clipboard data (HTML).\n * Removes all HTML comments. These are considered an internal thing and it makes little sense if they leak into the editor data.\n *\n * @param data The HTML data to normalize.\n * @returns Normalized HTML.\n * @internal\n */\nexport function normalizeClipboardData( data: string ): string {\n\treturn data\n\t\t.replace( /<span(?: class=\"Apple-converted-space\"|)>(\\s+)<\\/span>/g, ( fullMatch, spaces ) => {\n\t\t\t// Handle the most popular and problematic case when even a single space becomes an nbsp;.\n\t\t\t// Decode those to normal spaces. Read more in https://github.com/ckeditor/ckeditor5-clipboard/issues/2.\n\t\t\tif ( spaces.length == 1 ) {\n\t\t\t\treturn ' ';\n\t\t\t}\n\n\t\t\treturn spaces;\n\t\t} )\n\t\t// Remove all HTML comments.\n\t\t.replace( /<!--[\\s\\S]*?-->/g, '' );\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/utils/viewtoplaintext\n */\n\nimport type { ViewDomConverter, ViewDocumentFragment, ViewElement, ViewItem } from '@ckeditor/ckeditor5-engine';\n\n// Elements which should not have empty-line padding.\n// Most `view.ContainerElement` want to be separate by new-line, but some are creating one structure\n// together (like `<li>`) so it is better to separate them by only one \"\\n\".\nconst smallPaddingElements = [ 'figcaption', 'li' ];\n\nconst listElements = [ 'ol', 'ul' ];\n\n/**\n * Converts {@link module:engine/view/item~ViewItem view item} and all of its children to plain text.\n *\n * @param converter The converter instance.\n * @param viewItem View item to convert.\n * @returns Plain text representation of `viewItem`.\n */\nexport function viewToPlainText(\n\tconverter: ViewDomConverter,\n\tviewItem: ViewItem | ViewDocumentFragment\n): string {\n\tif ( viewItem.is( '$text' ) || viewItem.is( '$textProxy' ) ) {\n\t\treturn viewItem.data;\n\t}\n\n\tif ( viewItem.is( 'element', 'img' ) && viewItem.hasAttribute( 'alt' ) ) {\n\t\treturn viewItem.getAttribute( 'alt' )!;\n\t}\n\n\tif ( viewItem.is( 'element', 'br' ) ) {\n\t\treturn '\\n'; // Convert soft breaks to single line break (https://github.com/ckeditor/ckeditor5/issues/8045).\n\t}\n\n\t/**\n\t * Item is a document fragment, attribute element or container element. It doesn't\n\t * have it's own text value, so we need to convert its children elements.\n\t */\n\n\tlet text = '';\n\tlet prev: ViewElement | null = null;\n\n\tfor ( const child of ( viewItem as ViewElement | ViewDocumentFragment ).getChildren() ) {\n\t\ttext += newLinePadding( child as ViewElement, prev ) + viewToPlainText( converter, child );\n\t\tprev = child as ViewElement;\n\t}\n\n\t// If item is a raw element, the only way to get its content is to render it and read the text directly from DOM.\n\tif ( viewItem.is( 'rawElement' ) ) {\n\t\tconst doc = document.implementation.createHTMLDocument( '' );\n\t\tconst tempElement = doc.createElement( 'div' );\n\n\t\tviewItem.render( tempElement, converter );\n\n\t\ttext += domElementToPlainText( tempElement );\n\t}\n\n\treturn text;\n}\n\n/**\n * Recursively converts DOM element and all of its children to plain text.\n */\nfunction domElementToPlainText( element: HTMLElement ): string {\n\tlet text = '';\n\n\tif ( element.nodeType === Node.TEXT_NODE ) {\n\t\treturn element.textContent!;\n\t} else if ( element.tagName === 'BR' ) {\n\t\treturn '\\n';\n\t}\n\n\tfor ( const child of element.childNodes ) {\n\t\ttext += domElementToPlainText( child as HTMLElement );\n\t}\n\n\treturn text;\n}\n\n/**\n * Returns new line padding to prefix the given elements with.\n */\nfunction newLinePadding(\n\telement: ViewElement,\n\tprevious: ViewElement | null\n): string {\n\tif ( !previous ) {\n\t\t// Don't add padding to first elements in a level.\n\t\treturn '';\n\t}\n\n\tif ( element.is( 'element', 'li' ) && !element.isEmpty && element.getChild( 0 )!.is( 'containerElement' ) ) {\n\t\t// Separate document list items with empty lines.\n\t\treturn '\\n\\n';\n\t}\n\n\tif ( listElements.includes( element.name ) && listElements.includes( previous.name ) ) {\n\t\t/**\n\t\t * Because `<ul>` and `<ol>` are ViewAttributeElements, two consecutive lists will not have any padding between\n\t\t * them (see the `if` statement below). To fix this, we need to make an exception for this case.\n\t\t */\n\t\treturn '\\n\\n';\n\t}\n\n\tif ( !element.is( 'containerElement' ) && !previous.is( 'containerElement' ) ) {\n\t\t// Don't add padding between non-container elements.\n\t\treturn '';\n\t}\n\n\tif ( smallPaddingElements.includes( element.name ) || smallPaddingElements.includes( previous.name ) ) {\n\t\t// Add small padding between selected container elements.\n\t\treturn '\\n';\n\t}\n\n\t// Do not add padding around the elements that won't be rendered.\n\tif (\n\t\telement.is( 'element' ) && element.getCustomProperty( 'dataPipeline:transparentRendering' ) ||\n\t\tprevious.is( 'element' ) && previous.getCustomProperty( 'dataPipeline:transparentRendering' )\n\t) {\n\t\treturn '';\n\t}\n\n\t// Add empty lines between container elements.\n\treturn '\\n\\n';\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/clipboardmarkersutils\n */\nimport { mapValues } from 'es-toolkit/compat';\n\nimport { uid } from '@ckeditor/ckeditor5-utils';\nimport { Plugin, type NonEmptyArray } from '@ckeditor/ckeditor5-core';\n\nimport {\n\tModelRange,\n\ttype ModelDocumentFragment,\n\ttype ModelPosition,\n\ttype ModelElement,\n\ttype ModelDocumentSelection,\n\ttype ModelSelection,\n\ttype ModelWriter,\n\ttype Marker\n} from '@ckeditor/ckeditor5-engine';\n\n/**\n * Part of the clipboard logic. Responsible for collecting markers from selected fragments\n * and restoring them with proper positions in pasted elements.\n *\n * @internal\n */\nexport class ClipboardMarkersUtils extends Plugin {\n\t/**\n\t * Map of marker names that can be copied.\n\t *\n\t * @internal\n\t */\n\tprivate _markersToCopy: Map<string, ClipboardMarkerConfiguration> = new Map();\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'ClipboardMarkersUtils' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * Registers marker name as copyable in clipboard pipeline.\n\t *\n\t * @param markerName Name of marker that can be copied.\n\t * @param config Configuration that describes what can be performed on specified marker.\n\t * @internal\n\t */\n\tpublic _registerMarkerToCopy( markerName: string, config: ClipboardMarkerConfiguration ): void {\n\t\tthis._markersToCopy.set( markerName, config );\n\t}\n\n\t/**\n\t * Performs copy markers on provided selection and paste it to fragment returned from `getCopiedFragment`.\n\t *\n\t * \t1. Picks all markers in provided selection.\n\t * \t2. Inserts fake markers to document.\n\t * \t3. Gets copied selection fragment from document.\n\t * \t4. Removes fake elements from fragment and document.\n\t * \t5. Inserts markers in the place of removed fake markers.\n\t *\n\t * Due to selection modification, when inserting items, `getCopiedFragment` must *always* operate on `writer.model.document.selection'.\n\t * Do not use any other custom selection object within callback, as this will lead to out-of-bounds exceptions in rare scenarios.\n\t *\n\t * @param action Type of clipboard action.\n\t * @param selection Selection to be checked.\n\t * @param getCopiedFragment\tCallback that performs copy of selection and returns it as fragment.\n\t * @internal\n\t */\n\tpublic _copySelectedFragmentWithMarkers(\n\t\taction: ClipboardMarkerRestrictedAction,\n\t\tselection: ModelSelection | ModelDocumentSelection,\n\t\tgetCopiedFragment: ( writer: ModelWriter ) => ModelDocumentFragment = writer =>\n\t\t\twriter.model.getSelectedContent( writer.model.document.selection )\n\t): ModelDocumentFragment {\n\t\treturn this.editor.model.change( writer => {\n\t\t\tconst oldSelection = writer.model.document.selection;\n\n\t\t\t// In some scenarios, such like in drag & drop, passed `selection` parameter is not actually\n\t\t\t// the same `selection` as the `writer.model.document.selection` which means that `_insertFakeMarkersToSelection`\n\t\t\t// is not affecting passed `selection` `start` and `end` positions but rather modifies `writer.model.document.selection`.\n\t\t\t//\n\t\t\t// It is critical due to fact that when we have selection that starts [ 0, 0 ] and ends at [ 1, 0 ]\n\t\t\t// and after inserting fake marker it will point to such marker instead of new widget position at start: [ 1, 0 ] end: [2, 0 ].\n\t\t\t// `writer.insert` modifies only original `writer.model.document.selection`.\n\t\t\twriter.setSelection( selection );\n\n\t\t\tconst sourceSelectionInsertedMarkers = this._insertFakeMarkersIntoSelection( writer, writer.model.document.selection, action );\n\t\t\tconst fragment = getCopiedFragment( writer );\n\t\t\tconst fakeMarkersRangesInsideRange = this._removeFakeMarkersInsideElement( writer, fragment );\n\n\t\t\t// <fake-marker> [Foo] Bar</fake-marker>\n\t\t\t// ^ ^\n\t\t\t// In `_insertFakeMarkersIntoSelection` call we inserted fake marker just before first element.\n\t\t\t// The problem is that the first element can be start position of selection so insertion fake-marker\n\t\t\t// before such element shifts selection (so selection that was at [0, 0] now is at [0, 1]).\n\t\t\t// It means that inserted fake-marker is no longer present inside such selection and is orphaned.\n\t\t\t// This function checks special case of such problem. Markers that are orphaned at the start position\n\t\t\t// and end position in the same time. Basically it means that they overlaps whole element.\n\t\t\tfor ( const [ markerName, elements ] of Object.entries( sourceSelectionInsertedMarkers ) ) {\n\t\t\t\tfakeMarkersRangesInsideRange[ markerName ] ||= writer.createRangeIn( fragment );\n\n\t\t\t\tfor ( const element of elements ) {\n\t\t\t\t\twriter.remove( element );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfragment.markers.clear();\n\n\t\t\tfor ( const [ markerName, range ] of Object.entries( fakeMarkersRangesInsideRange ) ) {\n\t\t\t\tfragment.markers.set( markerName, range );\n\t\t\t}\n\n\t\t\t// Revert back selection to previous one.\n\t\t\twriter.setSelection( oldSelection );\n\n\t\t\treturn fragment;\n\t\t} );\n\t}\n\n\t/**\n\t * Performs paste of markers on already pasted element.\n\t *\n\t * \t1. Inserts fake markers that are present in fragment element (such fragment will be processed in `getPastedDocumentElement`).\n\t * \t2. Calls `getPastedDocumentElement` and gets element that is inserted into root model.\n\t * \t3. Removes all fake markers present in transformed element.\n\t * \t4. Inserts new markers with removed fake markers ranges into pasted fragment.\n\t *\n\t * There are multiple edge cases that have to be considered before calling this function:\n\t *\n\t * \t* `markers` are inserted into the same element that must be later transformed inside `getPastedDocumentElement`.\n\t * \t* Fake marker elements inside `getPastedDocumentElement` can be cloned, but their ranges cannot overlap.\n\t * \t* If `duplicateOnPaste` is `true` in marker config then associated marker ID is regenerated before pasting.\n\t *\n\t * @param markers Object that maps marker name to corresponding range.\n\t * @param getPastedDocumentElement Getter used to get target markers element.\n\t * @internal\n\t */\n\tpublic _pasteMarkersIntoTransformedElement(\n\t\tmarkers: Record<string, ModelRange> | Map<string, ModelRange>,\n\t\tgetPastedDocumentElement: ( writer: ModelWriter ) => ModelElement\n\t): ModelElement {\n\t\tconst pasteMarkers = this._getPasteMarkersFromRangeMap( markers );\n\n\t\treturn this.editor.model.change( writer => {\n\t\t\t// Inserts fake markers into source fragment / element that is later transformed inside `getPastedDocumentElement`.\n\t\t\tconst sourceFragmentFakeMarkers = this._insertFakeMarkersElements( writer, pasteMarkers );\n\n\t\t\t// Modifies document fragment (for example, cloning table cells) and then inserts it into the document.\n\t\t\tconst transformedElement = getPastedDocumentElement( writer );\n\n\t\t\t// Removes markers in pasted and transformed fragment in root document.\n\t\t\tconst removedFakeMarkers = this._removeFakeMarkersInsideElement( writer, transformedElement );\n\n\t\t\t// Cleans up fake markers inserted into source fragment (that one before transformation which is not pasted).\n\t\t\tfor ( const element of Object.values( sourceFragmentFakeMarkers ).flat() ) {\n\t\t\t\twriter.remove( element );\n\t\t\t}\n\n\t\t\t// Inserts to root document fake markers.\n\t\t\tfor ( const [ markerName, range ] of Object.entries( removedFakeMarkers ) ) {\n\t\t\t\tif ( !writer.model.markers.has( markerName ) ) {\n\t\t\t\t\twriter.addMarker( markerName, {\n\t\t\t\t\t\tusingOperation: true,\n\t\t\t\t\t\taffectsData: true,\n\t\t\t\t\t\trange\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn transformedElement;\n\t\t} );\n\t}\n\n\t/**\n\t * Pastes document fragment with markers to document.\n\t * If `duplicateOnPaste` is `true` in marker config then associated markers IDs\n\t * are regenerated before pasting to avoid markers duplications in content.\n\t *\n\t * @param fragment Document fragment that should contain already processed by pipeline markers.\n\t * @internal\n\t */\n\tpublic _pasteFragmentWithMarkers( fragment: ModelDocumentFragment ): ModelRange {\n\t\tconst pasteMarkers = this._getPasteMarkersFromRangeMap( fragment.markers );\n\n\t\tfragment.markers.clear();\n\n\t\tfor ( const copyableMarker of pasteMarkers ) {\n\t\t\tfragment.markers.set( copyableMarker.name, copyableMarker.range );\n\t\t}\n\n\t\treturn this.editor.model.insertContent( fragment );\n\t}\n\n\t/**\n\t * In some situations we have to perform copy on selected fragment with certain markers. This function allows to temporarily bypass\n\t * restrictions on markers that we want to copy.\n\t *\n\t * This function executes `executor()` callback. For the duration of the callback, if the clipboard pipeline is used to copy\n\t * content, markers with the specified name will be copied to the clipboard as well.\n\t *\n\t * @param markerName Which markers should be copied.\n\t * @param executor Callback executed.\n\t * @param config Optional configuration flags used to copy (such like partial copy flag).\n\t * @internal\n\t */\n\tpublic _forceMarkersCopy(\n\t\tmarkerName: string,\n\t\texecutor: VoidFunction,\n\t\tconfig: ClipboardMarkerConfiguration = {\n\t\t\tallowedActions: 'all',\n\t\t\tcopyPartiallySelected: true,\n\t\t\tduplicateOnPaste: true\n\t\t}\n\t): void {\n\t\tconst before = this._markersToCopy.get( markerName );\n\n\t\tthis._markersToCopy.set( markerName, config );\n\n\t\texecutor();\n\n\t\tif ( before ) {\n\t\t\tthis._markersToCopy.set( markerName, before );\n\t\t} else {\n\t\t\tthis._markersToCopy.delete( markerName );\n\t\t}\n\t}\n\n\t/**\n\t * Checks if marker can be copied.\n\t *\n\t * @param markerName Name of checked marker.\n\t * @param action Type of clipboard action. If null then checks only if marker is registered as copyable.\n\t * @internal\n\t */\n\tpublic _isMarkerCopyable( markerName: string, action: ClipboardMarkerRestrictedAction | null ): boolean {\n\t\tconst config = this._getMarkerClipboardConfig( markerName );\n\n\t\tif ( !config ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If there is no action provided then only presence of marker is checked.\n\t\tif ( !action ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst { allowedActions } = config;\n\n\t\treturn allowedActions === 'all' || allowedActions.includes( action );\n\t}\n\n\t/**\n\t * Checks if marker has any clipboard copy behavior configuration.\n\t *\n\t * @param markerName Name of checked marker.\n\t */\n\tpublic _hasMarkerConfiguration( markerName: string ): boolean {\n\t\treturn !!this._getMarkerClipboardConfig( markerName );\n\t}\n\n\t/**\n\t * Returns marker's configuration flags passed during registration.\n\t *\n\t * @param markerName Name of marker that should be returned.\n\t * @internal\n\t */\n\tpublic _getMarkerClipboardConfig( markerName: string ): ClipboardMarkerConfiguration | null {\n\t\tconst [ markerNamePrefix ] = markerName.split( ':' );\n\n\t\treturn this._markersToCopy.get( markerNamePrefix ) || null;\n\t}\n\n\t/**\n\t * First step of copying markers. It looks for markers intersecting with given selection and inserts `$marker` elements\n\t * at positions where document markers start or end. This way `$marker` elements can be easily copied together with\n\t * the rest of the content of the selection.\n\t *\n\t * @param writer An instance of the model writer.\n\t * @param selection Selection to be checked.\n\t * @param action Type of clipboard action.\n\t */\n\tprivate _insertFakeMarkersIntoSelection(\n\t\twriter: ModelWriter,\n\t\tselection: ModelSelection | ModelDocumentSelection,\n\t\taction: ClipboardMarkerRestrictedAction\n\t): Record<string, Array<ModelElement>> {\n\t\tconst copyableMarkers = this._getCopyableMarkersFromSelection( writer, selection, action );\n\n\t\treturn this._insertFakeMarkersElements( writer, copyableMarkers );\n\t}\n\n\t/**\n\t * Returns array of markers that can be copied in specified selection.\n\t *\n\t * If marker cannot be copied partially (according to `copyPartiallySelected` configuration flag) and\n\t * is not present entirely in any selection range then it will be skipped.\n\t *\n\t * @param writer An instance of the model writer.\n\t * @param selection Selection which will be checked.\n\t * @param action Type of clipboard action. If null then checks only if marker is registered as copyable.\n\t */\n\tprivate _getCopyableMarkersFromSelection(\n\t\twriter: ModelWriter,\n\t\tselection: ModelSelection | ModelDocumentSelection,\n\t\taction: ClipboardMarkerRestrictedAction | null\n\t): Array<CopyableMarker> {\n\t\tconst selectionRanges = Array.from( selection.getRanges()! );\n\n\t\t// Picks all markers in provided ranges. Ensures that there are no duplications if\n\t\t// there are multiple ranges that intersects with the same marker.\n\t\tconst markersInRanges = new Set(\n\t\t\tselectionRanges.flatMap(\n\t\t\t\tselectionRange => Array.from( writer.model.markers.getMarkersIntersectingRange( selectionRange ) )\n\t\t\t)\n\t\t);\n\n\t\tconst isSelectionMarkerCopyable = ( marker: Marker ) => {\n\t\t\t// Check if marker exists in configuration and provided action can be performed on it.\n\t\t\tconst isCopyable = this._isMarkerCopyable( marker.name, action );\n\n\t\t\tif ( !isCopyable ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Checks if configuration disallows to copy marker only if part of its content is selected.\n\t\t\t//\n\t\t\t// Example:\n\t\t\t// \t<marker-a> Hello [ World ] </marker-a>\n\t\t\t//\t\t\t\t\t\t^ selection\n\t\t\t//\n\t\t\t// In this scenario `marker-a` won't be copied because selection doesn't overlap its content entirely.\n\t\t\tconst { copyPartiallySelected } = this._getMarkerClipboardConfig( marker.name )!;\n\n\t\t\tif ( !copyPartiallySelected ) {\n\t\t\t\tconst markerRange = marker.getRange();\n\n\t\t\t\treturn selectionRanges.some( selectionRange => selectionRange.containsRange( markerRange, true ) );\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\t\treturn Array\n\t\t\t.from( markersInRanges )\n\t\t\t.filter( isSelectionMarkerCopyable )\n\t\t\t.map( ( copyableMarker ): CopyableMarker => {\n\t\t\t\t// During `dragstart` event original marker is still present in tree.\n\t\t\t\t// It is removed after the clipboard drop event, so none of the copied markers are inserted at the end.\n\t\t\t\t// It happens because there already markers with specified `marker.name` when clipboard is trying to insert data\n\t\t\t\t// and it aborts inserting.\n\t\t\t\tconst name = action === 'dragstart' ? this._getUniqueMarkerName( copyableMarker.name ) : copyableMarker.name;\n\n\t\t\t\treturn {\n\t\t\t\t\tname,\n\t\t\t\t\trange: copyableMarker.getRange()\n\t\t\t\t};\n\t\t\t} );\n\t}\n\n\t/**\n\t * Picks all markers from markers map that can be pasted.\n\t * If `duplicateOnPaste` is `true`, it regenerates their IDs to ensure uniqueness.\n\t * If marker is not registered, it will be kept in the array anyway.\n\t *\n\t * @param markers Object that maps marker name to corresponding range.\n\t * @param action Type of clipboard action. If null then checks only if marker is registered as copyable.\n\t */\n\tprivate _getPasteMarkersFromRangeMap(\n\t\tmarkers: Record<string, ModelRange> | Map<string, ModelRange>,\n\t\taction: ClipboardMarkerRestrictedAction | null = null\n\t): Array<CopyableMarker> {\n\t\tconst { model } = this.editor;\n\t\tconst entries = markers instanceof Map ? Array.from( markers.entries() ) : Object.entries( markers );\n\n\t\treturn entries.flatMap( ( [ markerName, range ] ): Array<CopyableMarker> => {\n\t\t\tif ( !this._hasMarkerConfiguration( markerName ) ) {\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: markerName,\n\t\t\t\t\t\trange\n\t\t\t\t\t}\n\t\t\t\t];\n\t\t\t}\n\n\t\t\tif ( this._isMarkerCopyable( markerName, action ) ) {\n\t\t\t\tconst copyMarkerConfig = this._getMarkerClipboardConfig( markerName )!;\n\t\t\t\tconst isInGraveyard = model.markers.has( markerName ) &&\n\t\t\t\t\tmodel.markers.get( markerName )!.getRange().root.rootName === '$graveyard';\n\n\t\t\t\tif ( copyMarkerConfig.duplicateOnPaste || isInGraveyard ) {\n\t\t\t\t\tmarkerName = this._getUniqueMarkerName( markerName );\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: markerName,\n\t\t\t\t\t\trange\n\t\t\t\t\t}\n\t\t\t\t];\n\t\t\t}\n\n\t\t\treturn [];\n\t\t} );\n\t}\n\n\t/**\n\t * Inserts specified array of fake markers elements to document and assigns them `type` and `name` attributes.\n\t * Fake markers elements are used to calculate position of markers on pasted fragment that were transformed during\n\t * steps between copy and paste.\n\t *\n\t * @param writer An instance of the model writer.\n\t * @param markers Array of markers that will be inserted.\n\t */\n\tprivate _insertFakeMarkersElements( writer: ModelWriter, markers: Array<CopyableMarker> ): Record<string, Array<ModelElement>> {\n\t\tconst mappedMarkers: Record<string, Array<ModelElement>> = {};\n\t\tconst sortedMarkers = markers\n\t\t\t.flatMap( marker => {\n\t\t\t\tconst { start, end } = marker.range;\n\n\t\t\t\treturn [\n\t\t\t\t\t{ position: start, marker, type: 'start' },\n\t\t\t\t\t{ position: end, marker, type: 'end' }\n\t\t\t\t];\n\t\t\t} )\n\t\t\t// Markers position is sorted backwards to ensure that the insertion of fake markers will not change\n\t\t\t// the position of the next markers.\n\t\t\t.sort( ( { position: posA }, { position: posB } ) => posA.isBefore( posB ) ? 1 : -1 );\n\n\t\tfor ( const { position, marker, type } of sortedMarkers ) {\n\t\t\tconst fakeMarker = writer.createElement( '$marker', {\n\t\t\t\t'data-name': marker.name,\n\t\t\t\t'data-type': type\n\t\t\t} );\n\n\t\t\tif ( !mappedMarkers[ marker.name ] ) {\n\t\t\t\tmappedMarkers[ marker.name ] = [];\n\t\t\t}\n\n\t\t\tmappedMarkers[ marker.name ]!.push( fakeMarker );\n\t\t\twriter.insert( fakeMarker, position );\n\t\t}\n\n\t\treturn mappedMarkers;\n\t}\n\n\t/**\n\t * Removes all `$marker` elements from the given document fragment.\n\t *\n\t * Returns an object where keys are marker names, and values are ranges corresponding to positions\n\t * where `$marker` elements were inserted.\n\t *\n\t * If the document fragment had only one `$marker` element for given marker (start or end) the other boundary is set automatically\n\t * (to the end or start of the document fragment, respectively).\n\t *\n\t * @param writer An instance of the model writer.\n\t * @param rootElement The element to be checked.\n\t */\n\tprivate _removeFakeMarkersInsideElement(\n\t\twriter: ModelWriter,\n\t\trootElement: ModelElement | ModelDocumentFragment\n\t): Record<string, ModelRange> {\n\t\tconst fakeMarkersElements = this._getAllFakeMarkersFromElement( writer, rootElement );\n\t\tconst fakeMarkersRanges = fakeMarkersElements.reduce<Record<string, FakeMarkerRangeConstruct>>( ( acc, fakeMarker ) => {\n\t\t\tconst position = fakeMarker.markerElement && writer.createPositionBefore( fakeMarker.markerElement );\n\t\t\tlet prevFakeMarker: FakeMarkerRangeConstruct | null = acc[ fakeMarker.name ];\n\n\t\t\t// Handle scenario when tables clone cells with the same fake node. Example:\n\t\t\t//\n\t\t\t// <cell><fake-marker-a></cell> <cell><fake-marker-a></cell> <cell><fake-marker-a></cell>\n\t\t\t// ^ cloned ^ cloned\n\t\t\t//\n\t\t\t// The easiest way to bypass this issue is to rename already existing in map nodes and\n\t\t\t// set them new unique name.\n\t\t\tlet skipAssign = false;\n\n\t\t\tif ( prevFakeMarker?.start && prevFakeMarker?.end ) {\n\t\t\t\tconst config = this._getMarkerClipboardConfig( fakeMarker.name )!;\n\n\t\t\t\tif ( config.duplicateOnPaste ) {\n\t\t\t\t\tacc[ this._getUniqueMarkerName( fakeMarker.name ) ] = acc[ fakeMarker.name ];\n\t\t\t\t} else {\n\t\t\t\t\tskipAssign = true;\n\t\t\t\t}\n\n\t\t\t\tprevFakeMarker = null;\n\t\t\t}\n\n\t\t\tif ( !skipAssign ) {\n\t\t\t\tacc[ fakeMarker.name ] = {\n\t\t\t\t\t...prevFakeMarker!,\n\t\t\t\t\t[ fakeMarker.type ]: position\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif ( fakeMarker.markerElement ) {\n\t\t\t\twriter.remove( fakeMarker.markerElement );\n\t\t\t}\n\n\t\t\treturn acc;\n\t\t}, {} );\n\n\t\t// We cannot construct ranges directly in previous reduce because element ranges can overlap.\n\t\t// In other words lets assume we have such scenario:\n\n\t\t// <fake-marker-start /> <paragraph /> <fake-marker-2-start /> <fake-marker-end /> <fake-marker-2-end />\n\t\t//\n\t\t// We have to remove `fake-marker-start` firstly and then remove `fake-marker-2-start`.\n\t\t// Removal of `fake-marker-2-start` affects `fake-marker-end` position so we cannot create\n\t\t// connection between `fake-marker-start` and `fake-marker-end` without iterating whole set firstly.\n\t\treturn mapValues(\n\t\t\tfakeMarkersRanges,\n\t\t\trange => new ModelRange(\n\t\t\t\trange.start || writer.createPositionFromPath( rootElement, [ 0 ] ),\n\t\t\t\trange.end || writer.createPositionAt( rootElement, 'end' )\n\t\t\t)\n\t\t);\n\t}\n\n\t/**\n\t * Returns array that contains list of fake markers with corresponding `$marker` elements.\n\t *\n\t * For each marker, there can be two `$marker` elements or only one (if the document fragment contained\n\t * only the beginning or only the end of a marker).\n\t *\n\t * @param writer An instance of the model writer.\n\t * @param rootElement The element to be checked.\n\t */\n\tprivate _getAllFakeMarkersFromElement( writer: ModelWriter, rootElement: ModelElement | ModelDocumentFragment ): Array<FakeMarker> {\n\t\tconst foundFakeMarkers = Array\n\t\t\t.from( writer.createRangeIn( rootElement ) )\n\t\t\t.flatMap( ( { item } ): Array<FakeMarker> => {\n\t\t\t\tif ( !item.is( 'element', '$marker' ) ) {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\n\t\t\t\tconst name = item.getAttribute( 'data-name' ) as string;\n\t\t\t\tconst type = item.getAttribute( 'data-type' ) as 'start' | 'end';\n\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\tmarkerElement: item,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\ttype\n\t\t\t\t\t}\n\t\t\t\t];\n\t\t\t} );\n\n\t\tconst prependFakeMarkers: Array<FakeMarker> = [];\n\t\tconst appendFakeMarkers: Array<FakeMarker> = [];\n\n\t\tfor ( const fakeMarker of foundFakeMarkers ) {\n\t\t\tif ( fakeMarker.type === 'end' ) {\n\t\t\t\t// <fake-marker> [ phrase</fake-marker> phrase ]\n\t\t\t\t// ^\n\t\t\t\t// Handle case when marker is just before start of selection.\n\t\t\t\t// Only end marker is inside selection.\n\n\t\t\t\tconst hasMatchingStartMarker = foundFakeMarkers.some(\n\t\t\t\t\totherFakeMarker => otherFakeMarker.name === fakeMarker.name && otherFakeMarker.type === 'start'\n\t\t\t\t);\n\n\t\t\t\tif ( !hasMatchingStartMarker ) {\n\t\t\t\t\tprependFakeMarkers.push( {\n\t\t\t\t\t\tmarkerElement: null,\n\t\t\t\t\t\tname: fakeMarker.name,\n\t\t\t\t\t\ttype: 'start'\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( fakeMarker.type === 'start' ) {\n\t\t\t\t// [<fake-marker>phrase]</fake-marker>\n\t\t\t\t// ^\n\t\t\t\t// Handle case when fake marker is after selection.\n\t\t\t\t// Only start marker is inside selection.\n\n\t\t\t\tconst hasMatchingEndMarker = foundFakeMarkers.some(\n\t\t\t\t\totherFakeMarker => otherFakeMarker.name === fakeMarker.name && otherFakeMarker.type === 'end'\n\t\t\t\t);\n\n\t\t\t\tif ( !hasMatchingEndMarker ) {\n\t\t\t\t\tappendFakeMarkers.unshift( {\n\t\t\t\t\t\tmarkerElement: null,\n\t\t\t\t\t\tname: fakeMarker.name,\n\t\t\t\t\t\ttype: 'end'\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn [\n\t\t\t...prependFakeMarkers,\n\t\t\t...foundFakeMarkers,\n\t\t\t...appendFakeMarkers\n\t\t];\n\t}\n\n\t/**\n\t * When copy of markers occurs we have to make sure that pasted markers have different names\n\t * than source markers. This functions helps with assigning unique part to marker name to\n\t * prevent duplicated markers error.\n\t *\n\t * @param name Name of marker\n\t */\n\tprivate _getUniqueMarkerName( name: string ) {\n\t\tconst parts = name.split( ':' );\n\t\tconst newId = uid().substring( 1, 6 );\n\n\t\t// It looks like the marker already is UID marker so in this scenario just swap\n\t\t// last part of marker name and assign new UID.\n\t\t//\n\t\t// example: comment:{ threadId }:{ id } => comment:{ threadId }:{ newId }\n\t\tif ( parts.length === 3 ) {\n\t\t\treturn `${ parts.slice( 0, 2 ).join( ':' ) }:${ newId }`;\n\t\t}\n\n\t\t// Assign new segment to marker name with id.\n\t\t//\n\t\t// example: comment => comment:{ newId }\n\t\treturn `${ parts.join( ':' ) }:${ newId }`;\n\t}\n}\n\n/**\n * Specifies which action is performed during clipboard event.\n *\n * @internal\n */\nexport type ClipboardMarkerRestrictedAction = 'copy' | 'cut' | 'dragstart';\n\n/**\n * Specifies behavior of markers during clipboard actions.\n *\n * @internal\n */\nexport type ClipboardMarkerConfiguration = {\n\tallowedActions: NonEmptyArray<ClipboardMarkerRestrictedAction> | 'all';\n\n\t// If `false`, do not copy marker when only part of its content is selected.\n\tcopyPartiallySelected?: boolean;\n\n\t// If `true` then every marker that is present in clipboard document fragment element obtain new generated ID just before pasting.\n\t// It means that it is possible to perform copy once and then paste it multiple times wherever we want.\n\t//\n\t// On the other hand if it has false value the marker will be not pasted because ID already exists in the document.\n\t//\n\t// This flag is ignored in `cut` and `dragstart` actions because source marker is moved to graveyard and\n\t// it is still present in `model.markers`. Pasted marker id must be regenerated to avoid duplications.\n\tduplicateOnPaste?: boolean;\n};\n\n/**\n * Marker descriptor type used to revert markers into tree node.\n *\n * @internal\n */\ntype FakeMarker = {\n\ttype: 'start' | 'end';\n\tname: string;\n\tmarkerElement: ModelElement | null;\n};\n\n/**\n * Range used to construct real markers from fake markers. Every property must be optional\n * because real marker range is constructed using iteration over markers that represent `start`\n * and then `end`. Usually `start` is set firstly then after few nodes `end` is set.\n *\n * @internal\n */\ntype FakeMarkerRangeConstruct = {\n\tstart: ModelPosition | null;\n\tend: ModelPosition | null;\n};\n\n/**\n * Structure used to describe marker that has to be copied.\n *\n * @internal\n */\ntype CopyableMarker = {\n\tname: string;\n\trange: ModelRange;\n};\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/clipboardpipeline\n */\n\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\n\nimport { EventInfo } from '@ckeditor/ckeditor5-utils';\n\nimport type {\n\tViewDataTransfer,\n\tModelDocumentFragment,\n\tViewDocumentDomEventData,\n\tModelRange,\n\tViewDocumentFragment,\n\tViewRange,\n\tModelSelection,\n\tModelDocumentSelection\n} from '@ckeditor/ckeditor5-engine';\n\nimport {\n\tClipboardObserver,\n\ttype ClipboardEventData,\n\ttype ViewDocumentCopyEvent,\n\ttype ViewDocumentCutEvent,\n\ttype ViewDocumentClipboardInputEvent\n} from './clipboardobserver.js';\n\nimport { normalizeClipboardData } from './utils/normalizeclipboarddata.js';\nimport { viewToPlainText } from './utils/viewtoplaintext.js';\nimport { ClipboardMarkersUtils } from './clipboardmarkersutils.js';\n\n// Input pipeline events overview:\n//\n// ┌──────────────────────┐ ┌──────────────────────┐\n// │ view.Document │ │ view.Document │\n// │ paste │ │ drop │\n// └───────────┬──────────┘ └───────────┬──────────┘\n// │ │\n// └────────────────┌────────────────┘\n// │\n// ┌─────────V────────┐\n// │ view.Document │ Retrieves text/html or text/plain from data.dataTransfer\n// │ clipboardInput │ and processes it to view.DocumentFragment.\n// └─────────┬────────┘\n// │\n// ┌───────────V───────────┐\n// │ ClipboardPipeline │ Converts view.DocumentFragment to model.DocumentFragment.\n// │ inputTransformation │\n// └───────────┬───────────┘\n// │\n// ┌──────────V──────────┐\n// │ ClipboardPipeline │ Calls model.insertContent().\n// │ contentInsertion │\n// └─────────────────────┘\n//\n//\n// Output pipeline events overview:\n//\n// ┌──────────────────────┐ ┌──────────────────────┐\n// │ view.Document │ │ view.Document │ Retrieves the selected model.DocumentFragment\n// │ copy │ │ cut │ and fires the `outputTransformation` event.\n// └───────────┬──────────┘ └───────────┬──────────┘\n// │ │\n// └────────────────┌────────────────┘\n// │\n// ┌───────────V───────────┐\n// │ ClipboardPipeline │ Processes model.DocumentFragment and converts it to\n// │ outputTransformation │ view.DocumentFragment.\n// └───────────┬───────────┘\n// │\n// ┌─────────V────────┐\n// │ view.Document │ Processes view.DocumentFragment to text/html and text/plain\n// │ clipboardOutput │ and stores the results in data.dataTransfer.\n// └──────────────────┘\n//\n\n/**\n * The clipboard pipeline feature. It is responsible for intercepting the `paste` and `drop` events and\n * passing the pasted content through a series of events in order to insert it into the editor's content.\n * It also handles the `cut` and `copy` events to fill the native clipboard with the serialized editor's data.\n *\n * # Input pipeline\n *\n * The behavior of the default handlers (all at a `low` priority):\n *\n * ## Event: `paste` or `drop`\n *\n * 1. Translates the event data.\n * 2. Fires the {@link module:engine/view/document~ViewDocument#event:clipboardInput `view.Document#clipboardInput`} event.\n *\n * ## Event: `view.Document#clipboardInput`\n *\n * 1. If the `data.content` event field is already set (by some listener on a higher priority), it takes this content and fires the event\n * from the last point.\n * 2. Otherwise, it retrieves `text/html` or `text/plain` from `data.dataTransfer`.\n * 3. Normalizes the raw data by applying simple filters on string data.\n * 4. Processes the raw data to {@link module:engine/view/documentfragment~ViewDocumentFragment `view.DocumentFragment`} with the\n * {@link module:engine/controller/datacontroller~DataController#htmlProcessor `DataController#htmlProcessor`}.\n * 5. Fires the {@link module:clipboard/clipboardpipeline~ClipboardPipeline#event:inputTransformation\n * `ClipboardPipeline#inputTransformation`} event with the view document fragment in the `data.content` event field.\n *\n * ## Event: `ClipboardPipeline#inputTransformation`\n *\n * 1. Converts {@link module:engine/view/documentfragment~ViewDocumentFragment `view.DocumentFragment`} from the `data.content` field to\n * {@link module:engine/model/documentfragment~ModelDocumentFragment `model.DocumentFragment`}.\n * 2. Fires the {@link module:clipboard/clipboardpipeline~ClipboardPipeline#event:contentInsertion `ClipboardPipeline#contentInsertion`}\n * event with the model document fragment in the `data.content` event field.\n * **Note**: The `ClipboardPipeline#contentInsertion` event is fired within a model change block to allow other handlers\n * to run in the same block without post-fixers called in between (i.e., the selection post-fixer).\n *\n * ## Event: `ClipboardPipeline#contentInsertion`\n *\n * 1. Calls {@link module:engine/model/model~Model#insertContent `model.insertContent()`} to insert `data.content`\n * at the current selection position.\n *\n * # Output pipeline\n *\n * The behavior of the default handlers (all at a `low` priority):\n *\n * ## Event: `copy`, `cut` or `dragstart`\n *\n * 1. Retrieves the selected {@link module:engine/model/documentfragment~ModelDocumentFragment `model.DocumentFragment`} by calling\n * {@link module:engine/model/model~Model#getSelectedContent `model#getSelectedContent()`}.\n * 2. Converts the model document fragment to {@link module:engine/view/documentfragment~ViewDocumentFragment `view.DocumentFragment`}.\n * 3. Fires the {@link module:engine/view/document~ViewDocument#event:clipboardOutput `view.Document#clipboardOutput`} event\n * with the view document fragment in the `data.content` event field.\n *\n * ## Event: `view.Document#clipboardOutput`\n *\n * 1. Processes `data.content` to HTML and plain text with the\n * {@link module:engine/controller/datacontroller~DataController#htmlProcessor `DataController#htmlProcessor`}.\n * 2. Updates the `data.dataTransfer` data for `text/html` and `text/plain` with the processed data.\n * 3. For the `cut` method, calls {@link module:engine/model/model~Model#deleteContent `model.deleteContent()`}\n * on the current selection.\n *\n * Read more about the clipboard integration in the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n */\nexport class ClipboardPipeline extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'ClipboardPipeline' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ ClipboardMarkersUtils ]> {\n\t\treturn [ ClipboardMarkersUtils ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\t\tconst view = editor.editing.view;\n\n\t\tview.addObserver( ClipboardObserver );\n\n\t\tthis._setupPasteDrop();\n\t\tthis._setupCopyCut();\n\t}\n\n\t/**\n\t * Fires Clipboard `'outputTransformation'` event for given parameters.\n\t *\n\t * @internal\n\t */\n\tpublic _fireOutputTransformationEvent(\n\t\tdataTransfer: ViewDataTransfer,\n\t\tselection: ModelSelection | ModelDocumentSelection,\n\t\tmethod: 'copy' | 'cut' | 'dragstart'\n\t): void {\n\t\tconst clipboardMarkersUtils: ClipboardMarkersUtils = this.editor.plugins.get( 'ClipboardMarkersUtils' );\n\n\t\tthis.editor.model.enqueueChange( { isUndoable: method === 'cut' }, () => {\n\t\t\tconst documentFragment = clipboardMarkersUtils._copySelectedFragmentWithMarkers( method, selection );\n\n\t\t\tthis.fire<ClipboardOutputTransformationEvent>( 'outputTransformation', {\n\t\t\t\tdataTransfer,\n\t\t\t\tcontent: documentFragment,\n\t\t\t\tmethod\n\t\t\t} );\n\t\t} );\n\t}\n\n\t/**\n\t * The clipboard paste pipeline.\n\t */\n\tprivate _setupPasteDrop(): void {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst view = editor.editing.view;\n\t\tconst viewDocument = view.document;\n\t\tconst clipboardMarkersUtils: ClipboardMarkersUtils = this.editor.plugins.get( 'ClipboardMarkersUtils' );\n\n\t\t// Pasting is disabled when selection is in non-editable place.\n\t\t// Dropping is disabled in drag and drop handler.\n\t\tthis.listenTo<ViewDocumentClipboardInputEvent>( viewDocument, 'clipboardInput', ( evt, data ) => {\n\t\t\tif ( data.method == 'paste' && !editor.model.canEditAt( editor.model.document.selection ) ) {\n\t\t\t\tevt.stop();\n\t\t\t}\n\t\t}, { priority: 'highest' } );\n\n\t\tthis.listenTo<ViewDocumentClipboardInputEvent>( viewDocument, 'clipboardInput', ( evt, data ) => {\n\t\t\tconst dataTransfer = data.dataTransfer;\n\n\t\t\tconst eventInfo = new EventInfo( this, 'inputTransformation' );\n\t\t\tconst sourceEditorId = dataTransfer.getData( 'application/ckeditor5-editor-id' ) || null;\n\n\t\t\t// Some feature could already inject content in the higher priority event handler (i.e., codeBlock, paste from office).\n\t\t\tconst content = typeof data.content == 'string' ?\n\t\t\t\tthis.editor.data.htmlProcessor.toView( normalizeClipboardData( data.content ) ) :\n\t\t\t\tdata.content;\n\n\t\t\tthis.fire<ClipboardInputTransformationEvent>( eventInfo, {\n\t\t\t\tcontent,\n\t\t\t\tdataTransfer,\n\t\t\t\tsourceEditorId,\n\t\t\t\textraContent: data.extraContent,\n\t\t\t\ttargetRanges: data.targetRanges,\n\t\t\t\tmethod: data.method as 'paste' | 'drop'\n\t\t\t} );\n\n\t\t\t// If CKEditor handled the input, do not bubble the original event any further.\n\t\t\t// This helps external integrations recognize this fact and act accordingly.\n\t\t\t// https://github.com/ckeditor/ckeditor5-upload/issues/92\n\t\t\tif ( eventInfo.stop.called ) {\n\t\t\t\tevt.stop();\n\t\t\t}\n\n\t\t\tview.scrollToTheSelection();\n\t\t}, { priority: 'low' } );\n\n\t\tthis.listenTo<ClipboardInputTransformationEvent>( this, 'inputTransformation', ( evt, data ) => {\n\t\t\tif ( data.content.isEmpty ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst dataController = this.editor.data;\n\n\t\t\t// Convert the pasted content into a model document fragment.\n\t\t\t// The conversion is contextual, but in this case an \"all allowed\" context is needed\n\t\t\t// and for that we use the $clipboardHolder item.\n\t\t\tconst modelFragment = dataController.toModel( data.content, '$clipboardHolder' );\n\n\t\t\tif ( modelFragment.childCount == 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tevt.stop();\n\n\t\t\t// Fire content insertion event in a single change block to allow other handlers to run in the same block\n\t\t\t// without post-fixers called in between (i.e., the selection post-fixer).\n\t\t\tmodel.change( () => {\n\t\t\t\tthis.fire<ClipboardContentInsertionEvent>( 'contentInsertion', {\n\t\t\t\t\tcontent: modelFragment,\n\t\t\t\t\tmethod: data.method,\n\t\t\t\t\tsourceEditorId: data.sourceEditorId,\n\t\t\t\t\tdataTransfer: data.dataTransfer,\n\t\t\t\t\ttargetRanges: data.targetRanges\n\t\t\t\t} );\n\t\t\t} );\n\t\t}, { priority: 'low' } );\n\n\t\tthis.listenTo<ClipboardContentInsertionEvent>( this, 'contentInsertion', ( evt, data ) => {\n\t\t\tdata.resultRange = clipboardMarkersUtils._pasteFragmentWithMarkers( data.content );\n\t\t}, { priority: 'low' } );\n\t}\n\n\t/**\n\t * The clipboard copy/cut pipeline.\n\t */\n\tprivate _setupCopyCut(): void {\n\t\tconst editor = this.editor;\n\t\tconst modelDocument = editor.model.document;\n\t\tconst view = editor.editing.view;\n\t\tconst viewDocument = view.document;\n\n\t\tconst onCopyCut = ( evt: EventInfo<'copy' | 'cut'>, data: ViewDocumentDomEventData<ClipboardEvent> & ClipboardEventData ) => {\n\t\t\tconst dataTransfer = data.dataTransfer;\n\n\t\t\tdata.preventDefault();\n\n\t\t\tthis._fireOutputTransformationEvent( dataTransfer, modelDocument.selection, evt.name );\n\t\t};\n\n\t\tthis.listenTo<ViewDocumentCopyEvent>( viewDocument, 'copy', onCopyCut, { priority: 'low' } );\n\t\tthis.listenTo<ViewDocumentCutEvent>( viewDocument, 'cut', ( evt, data ) => {\n\t\t\t// Cutting is disabled when selection is in non-editable place.\n\t\t\t// See: https://github.com/ckeditor/ckeditor5-clipboard/issues/26.\n\t\t\tif ( !editor.model.canEditAt( editor.model.document.selection ) ) {\n\t\t\t\tdata.preventDefault();\n\t\t\t} else {\n\t\t\t\tonCopyCut( evt, data );\n\t\t\t}\n\t\t}, { priority: 'low' } );\n\n\t\tthis.listenTo<ClipboardOutputTransformationEvent>( this, 'outputTransformation', ( evt, data ) => {\n\t\t\tconst content = editor.data.toView( data.content, { isClipboardPipeline: true } );\n\n\t\t\tviewDocument.fire<ViewDocumentClipboardOutputEvent>( 'clipboardOutput', {\n\t\t\t\tdataTransfer: data.dataTransfer,\n\t\t\t\tcontent,\n\t\t\t\tmethod: data.method\n\t\t\t} );\n\t\t}, { priority: 'low' } );\n\n\t\tthis.listenTo<ViewDocumentClipboardOutputEvent>( viewDocument, 'clipboardOutput', ( evt, data ) => {\n\t\t\tif ( !data.content.isEmpty ) {\n\t\t\t\tdata.dataTransfer.setData( 'text/html', this.editor.data.htmlProcessor.toData( data.content ) );\n\t\t\t\tdata.dataTransfer.setData( 'text/plain', viewToPlainText( editor.data.htmlProcessor.domConverter, data.content ) );\n\t\t\t\tdata.dataTransfer.setData( 'application/ckeditor5-editor-id', this.editor.id );\n\t\t\t}\n\n\t\t\tif ( data.method == 'cut' ) {\n\t\t\t\teditor.model.deleteContent( modelDocument.selection );\n\t\t\t}\n\t\t}, { priority: 'low' } );\n\t}\n}\n\n/**\n * Fired with the `content`, `dataTransfer`, `method`, and `targetRanges` properties:\n *\n * * The `content` which comes from the clipboard (it was pasted or dropped) should be processed in order to be inserted into the editor.\n * * The `dataTransfer` object is available in case the transformation functions need access to the raw clipboard data.\n * * The `method` indicates the original DOM event (for example `'drop'` or `'paste'`).\n * * The `targetRanges` property is an array of view ranges (it is available only for `'drop'`).\n *\n * It is a part of the {@glink framework/deep-dive/clipboard#input-pipeline clipboard input pipeline}.\n *\n * **Note**: You should not stop this event if you want to change the input data. You should modify the `content` property instead.\n *\n * @see module:clipboard/clipboardobserver~ClipboardObserver\n * @see module:clipboard/clipboardpipeline~ClipboardPipeline\n *\n * @eventName ~ClipboardPipeline#inputTransformation\n * @param data The event data.\n */\nexport type ClipboardInputTransformationEvent = {\n\tname: 'inputTransformation';\n\targs: [ data: ClipboardInputTransformationData ];\n};\n\n/**\n * The data of 'inputTransformation' event.\n */\nexport interface ClipboardInputTransformationData {\n\n\t/**\n\t * The event data.\n\t * The content to be inserted into the editor. It can be modified by event listeners. Read more about the clipboard pipelines in\n\t * the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n\t */\n\tcontent: ViewDocumentFragment;\n\n\t/**\n\t * Custom data stored by the `clipboardInput` event handlers. Content of this property is passed from the `clipboardInput` event.\n\t */\n\textraContent?: unknown;\n\n\t/**\n\t * The data transfer instance.\n\t */\n\tdataTransfer: ViewDataTransfer;\n\n\t/**\n\t * The target drop ranges.\n\t */\n\ttargetRanges: Array<ViewRange> | null;\n\n\t/**\n\t * Whether the event was triggered by a paste or a drop operation.\n\t */\n\tmethod: 'paste' | 'drop';\n\n\t/**\n\t * ID of the editor instance from which the content was copied.\n\t */\n\tsourceEditorId: string | null;\n}\n\n/**\n * Fired with the `content`, `dataTransfer`, `method`, and `targetRanges` properties:\n *\n * * The `content` which comes from the clipboard (was pasted or dropped) should be processed in order to be inserted into the editor.\n * * The `dataTransfer` object is available in case the transformation functions need access to the raw clipboard data.\n * * The `method` indicates the original DOM event (for example `'drop'` or `'paste'`).\n * * The `targetRanges` property is an array of view ranges (it is available only for `'drop'`).\n *\n * Event handlers can modify the content according to the final insertion position.\n *\n * It is a part of the {@glink framework/deep-dive/clipboard#input-pipeline clipboard input pipeline}.\n *\n * **Note**: You should not stop this event if you want to change the input data. You should modify the `content` property instead.\n *\n * @see module:clipboard/clipboardobserver~ClipboardObserver\n * @see module:clipboard/clipboardpipeline~ClipboardPipeline\n * @see module:clipboard/clipboardpipeline~ClipboardPipeline#event:inputTransformation\n *\n * @eventName ~ClipboardPipeline#contentInsertion\n * @param data The event data.\n */\nexport type ClipboardContentInsertionEvent = {\n\tname: 'contentInsertion';\n\targs: [ data: ClipboardContentInsertionData ];\n};\n\n/**\n * The data of 'contentInsertion' event.\n */\nexport interface ClipboardContentInsertionData {\n\n\t/**\n\t * The content to be inserted into the editor.\n\t * Read more about the clipboard pipelines in the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n\t */\n\tcontent: ModelDocumentFragment;\n\n\t/**\n\t * Whether the event was triggered by a paste or a drop operation.\n\t */\n\tmethod: 'paste' | 'drop';\n\n\t/**\n\t * The ID of the editor instance from which the content was copied.\n\t */\n\tsourceEditorId: string | null;\n\n\t/**\n\t * The data transfer instance.\n\t */\n\n\tdataTransfer: ViewDataTransfer;\n\n\t/**\n\t * The target drop ranges.\n\t */\n\ttargetRanges: Array<ViewRange> | null;\n\n\t/**\n\t * The result of the `model.insertContent()` call\n\t * (inserted by the event handler at a low priority).\n\t */\n\tresultRange?: ModelRange;\n}\n\n/**\n * Fired on {@link module:engine/view/document~ViewDocument#event:copy} and {@link module:engine/view/document~ViewDocument#event:cut}\n * with a copy of the selected content. The content can be processed before it ends up in the clipboard.\n *\n * It is a part of the {@glink framework/deep-dive/clipboard#output-pipeline clipboard output pipeline}.\n *\n * @see module:clipboard/clipboardobserver~ClipboardObserver\n * @see module:clipboard/clipboardpipeline~ClipboardPipeline\n *\n * @eventName module:engine/view/document~ViewDocument#clipboardOutput\n * @param data The event data.\n */\nexport type ViewDocumentClipboardOutputEvent = {\n\tname: 'clipboardOutput';\n\targs: [ data: ViewDocumentClipboardOutputEventData ];\n};\n\n/**\n * The value of the 'clipboardOutput' event.\n */\nexport interface ViewDocumentClipboardOutputEventData {\n\n\t/**\n\t * The data transfer instance.\n\t *\n\t * @readonly\n\t */\n\tdataTransfer: ViewDataTransfer;\n\n\t/**\n\t * Content to be put into the clipboard. It can be modified by the event listeners.\n\t * Read more about the clipboard pipelines in the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n\t */\n\tcontent: ViewDocumentFragment;\n\n\t/**\n\t * Whether the event was triggered by a copy or cut operation.\n\t */\n\tmethod: 'copy' | 'cut' | 'dragstart';\n}\n\n/**\n * Fired on {@link module:engine/view/document~ViewDocument#event:copy}, {@link module:engine/view/document~ViewDocument#event:cut}\n * and {@link module:engine/view/document~ViewDocument#event:dragstart}. The content can be processed before it ends up in the clipboard.\n *\n * It is a part of the {@glink framework/deep-dive/clipboard#output-pipeline clipboard output pipeline}.\n *\n * @eventName ~ClipboardPipeline#outputTransformation\n * @param data The event data.\n */\nexport type ClipboardOutputTransformationEvent = {\n\tname: 'outputTransformation';\n\targs: [ data: ClipboardOutputTransformationData ];\n};\n\n/**\n * The value of the 'outputTransformation' event.\n */\nexport interface ClipboardOutputTransformationData {\n\n\t/**\n\t * The data transfer instance.\n\t *\n\t * @readonly\n\t */\n\tdataTransfer: ViewDataTransfer;\n\n\t/**\n\t * Content to be put into the clipboard. It can be modified by the event listeners.\n\t * Read more about the clipboard pipelines in the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n\t */\n\tcontent: ModelDocumentFragment;\n\n\t/**\n\t * Whether the event was triggered by a copy or cut operation.\n\t */\n\tmethod: 'copy' | 'cut' | 'dragstart';\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/lineview\n */\n\n/* istanbul ignore file -- @preserve */\n\nimport { View } from '@ckeditor/ckeditor5-ui';\nimport { toUnit } from '@ckeditor/ckeditor5-utils';\n\nconst toPx = /* #__PURE__ */ toUnit( 'px' );\n\n/**\n * The horizontal drop target line view.\n *\n * @internal\n */\nexport class LineView extends View {\n\t/**\n\t * Controls whether the line is visible.\n\t *\n\t * @observable\n\t * @default false\n\t */\n\tdeclare public isVisible: boolean;\n\n\t/**\n\t * Controls the line position x coordinate.\n\t *\n\t * @observable\n\t * @default null\n\t */\n\tdeclare public left: number | null;\n\n\t/**\n\t * Controls the line width.\n\t *\n\t * @observable\n\t * @default null\n\t */\n\tdeclare public width: number | null;\n\n\t/**\n\t * Controls the line position y coordinate.\n\t *\n\t * @observable\n\t * @default null\n\t */\n\tdeclare public top: number | null;\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor() {\n\t\tsuper();\n\n\t\tconst bind = this.bindTemplate;\n\n\t\tthis.set( {\n\t\t\tisVisible: false,\n\t\t\tleft: null,\n\t\t\ttop: null,\n\t\t\twidth: null\n\t\t} );\n\n\t\tthis.setTemplate( {\n\t\t\ttag: 'div',\n\t\t\tattributes: {\n\t\t\t\tclass: [\n\t\t\t\t\t'ck',\n\t\t\t\t\t'ck-clipboard-drop-target-line',\n\t\t\t\t\tbind.if( 'isVisible', 'ck-hidden', value => !value )\n\t\t\t\t],\n\t\t\t\tstyle: {\n\t\t\t\t\tleft: bind.to( 'left', left => toPx( left! ) ),\n\t\t\t\t\ttop: bind.to( 'top', top => toPx( top! ) ),\n\t\t\t\t\twidth: bind.to( 'width', width => toPx( width! ) )\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/dragdroptarget\n */\n\nimport {\n\tPlugin,\n\ttype Editor\n} from '@ckeditor/ckeditor5-core';\n\nimport {\n\ttype ModelNode,\n\ttype ModelElement,\n\ttype ModelRange,\n\ttype ModelLiveRange,\n\ttype ViewElement,\n\ttype ViewRange,\n\ttype ViewDowncastWriter,\n\ttype ViewRootEditableElement\n} from '@ckeditor/ckeditor5-engine';\n\nimport {\n\tglobal,\n\tRect,\n\tDomEmitterMixin,\n\tdelay,\n\tResizeObserver,\n\ttype DomEmitter\n} from '@ckeditor/ckeditor5-utils';\n\nimport { LineView } from './lineview.js';\n\nimport { throttle } from 'es-toolkit/compat';\n\n/**\n * Part of the Drag and Drop handling. Responsible for finding and displaying the drop target.\n *\n * @internal\n */\nexport class DragDropTarget extends Plugin {\n\t/**\n\t * A delayed callback removing the drop marker.\n\t *\n\t * @internal\n\t */\n\tpublic readonly removeDropMarkerDelayed: ReturnType<typeof delay> = delay( () => this.removeDropMarker(), 40 );\n\n\t/**\n\t * A throttled callback updating the drop marker.\n\t */\n\tprivate readonly _updateDropMarkerThrottled = throttle(\n\t\ttargetRange => this._updateDropMarker( targetRange ), 40\n\t);\n\n\t/**\n\t * A throttled callback reconverting the drop parker.\n\t */\n\tprivate readonly _reconvertMarkerThrottled = throttle( () => {\n\t\tif ( this.editor.model.markers.has( 'drop-target' ) ) {\n\t\t\tthis.editor.editing.reconvertMarker( 'drop-target' );\n\t\t}\n\t}, 0 );\n\n\t/**\n\t * The horizontal drop target line view.\n\t */\n\tprivate _dropTargetLineView = new LineView();\n\n\t/**\n\t * DOM Emitter.\n\t */\n\tprivate _domEmitter: DomEmitter = new ( DomEmitterMixin() )();\n\n\t/**\n\t * Map of document scrollable elements.\n\t */\n\tprivate _scrollables = new Map<string, {\n\t\tdomElement: HTMLElement;\n\t\tresizeObserver: ResizeObserver;\n\t}>();\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'DragDropTarget' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tthis._setupDropMarker();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override destroy(): void {\n\t\tthis._domEmitter.stopListening();\n\n\t\tfor ( const { resizeObserver } of this._scrollables.values() ) {\n\t\t\tresizeObserver.destroy();\n\t\t}\n\n\t\tthis._updateDropMarkerThrottled.cancel();\n\t\tthis.removeDropMarkerDelayed.cancel();\n\t\tthis._reconvertMarkerThrottled.cancel();\n\n\t\treturn super.destroy();\n\t}\n\n\t/**\n\t * Finds the drop target range and updates the drop marker.\n\t *\n\t * @return The updated drop target range or null if no valid range was found.\n\t * @internal\n\t */\n\tpublic updateDropMarker(\n\t\ttargetViewElement: ViewElement,\n\t\ttargetViewRanges: Array<ViewRange> | null,\n\t\tclientX: number,\n\t\tclientY: number,\n\t\tblockMode: boolean,\n\t\tdraggedRange: ModelLiveRange | null\n\t): ModelRange | null {\n\t\tthis.removeDropMarkerDelayed.cancel();\n\n\t\tconst targetRange = findDropTargetRange(\n\t\t\tthis.editor,\n\t\t\ttargetViewElement,\n\t\t\ttargetViewRanges,\n\t\t\tclientX,\n\t\t\tclientY,\n\t\t\tblockMode,\n\t\t\tdraggedRange\n\t\t);\n\n\t\t/* istanbul ignore next -- @preserve */\n\t\tif ( !targetRange ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( draggedRange && draggedRange.containsRange( targetRange ) ) {\n\t\t\t// Target range is inside the dragged range.\n\t\t\tthis.removeDropMarker();\n\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( targetRange && !this.editor.model.canEditAt( targetRange ) ) {\n\t\t\t// Do not show drop marker if target place is not editable.\n\t\t\tthis.removeDropMarker();\n\n\t\t\treturn null;\n\t\t}\n\n\t\tthis._updateDropMarkerThrottled( targetRange );\n\n\t\treturn targetRange;\n\t}\n\n\t/**\n\t * Finds the final drop target range.\n\t *\n\t * @internal\n\t */\n\tpublic getFinalDropRange(\n\t\ttargetViewElement: ViewElement,\n\t\ttargetViewRanges: Array<ViewRange> | null,\n\t\tclientX: number,\n\t\tclientY: number,\n\t\tblockMode: boolean,\n\t\tdraggedRange: ModelLiveRange | null\n\t): ModelRange | null {\n\t\tconst targetRange = findDropTargetRange(\n\t\t\tthis.editor,\n\t\t\ttargetViewElement,\n\t\t\ttargetViewRanges,\n\t\t\tclientX,\n\t\t\tclientY,\n\t\t\tblockMode,\n\t\t\tdraggedRange\n\t\t);\n\t\t// The dragging markers must be removed after searching for the target range because sometimes\n\t\t// the target lands on the marker itself.\n\t\tthis.removeDropMarker();\n\n\t\treturn targetRange;\n\t}\n\n\t/**\n\t * Removes the drop target marker.\n\t *\n\t * @internal\n\t */\n\tpublic removeDropMarker(): void {\n\t\tconst model = this.editor.model;\n\n\t\tthis.removeDropMarkerDelayed.cancel();\n\t\tthis._updateDropMarkerThrottled.cancel();\n\t\tthis._dropTargetLineView.isVisible = false;\n\n\t\tif ( model.markers.has( 'drop-target' ) ) {\n\t\t\tmodel.change( writer => {\n\t\t\t\twriter.removeMarker( 'drop-target' );\n\t\t\t} );\n\t\t}\n\t}\n\n\t/**\n\t * Creates downcast conversion for the drop target marker.\n\t */\n\tprivate _setupDropMarker(): void {\n\t\tconst editor = this.editor;\n\n\t\teditor.ui.view.body.add( this._dropTargetLineView );\n\n\t\t// Drop marker conversion for hovering over widgets.\n\t\teditor.conversion.for( 'editingDowncast' ).markerToHighlight( {\n\t\t\tmodel: 'drop-target',\n\t\t\tview: {\n\t\t\t\tclasses: [ 'ck-clipboard-drop-target-range' ]\n\t\t\t}\n\t\t} );\n\n\t\t// Drop marker conversion for in text and block drop target.\n\t\teditor.conversion.for( 'editingDowncast' ).markerToElement( {\n\t\t\tmodel: 'drop-target',\n\t\t\tview: ( data, { writer } ) => {\n\t\t\t\t// Inline drop.\n\t\t\t\tif ( editor.model.schema.checkChild( data.markerRange.start, '$text' ) ) {\n\t\t\t\t\tthis._dropTargetLineView.isVisible = false;\n\n\t\t\t\t\treturn this._createDropTargetPosition( writer );\n\t\t\t\t}\n\t\t\t\t// Block drop.\n\t\t\t\telse {\n\t\t\t\t\tif ( data.markerRange.isCollapsed ) {\n\t\t\t\t\t\tthis._updateDropTargetLine( data.markerRange );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._dropTargetLineView.isVisible = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\n\t/**\n\t * Updates the drop target marker to the provided range.\n\t *\n\t * @param targetRange The range to set the marker to.\n\t */\n\tprivate _updateDropMarker( targetRange: ModelRange ): void {\n\t\tconst editor = this.editor;\n\t\tconst markers = editor.model.markers;\n\n\t\teditor.model.change( writer => {\n\t\t\tif ( markers.has( 'drop-target' ) ) {\n\t\t\t\tif ( !markers.get( 'drop-target' )!.getRange().isEqual( targetRange ) ) {\n\t\t\t\t\twriter.updateMarker( 'drop-target', { range: targetRange } );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twriter.addMarker( 'drop-target', {\n\t\t\t\t\trange: targetRange,\n\t\t\t\t\tusingOperation: false,\n\t\t\t\t\taffectsData: false\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t}\n\n\t/**\n\t * Creates the UI element for vertical (in-line) drop target.\n\t */\n\tprivate _createDropTargetPosition( writer: ViewDowncastWriter ): ViewElement {\n\t\treturn writer.createUIElement( 'span', { class: 'ck ck-clipboard-drop-target-position' }, function( domDocument ) {\n\t\t\tconst domElement = this.toDomElement( domDocument );\n\n\t\t\t// Using word joiner to make this marker as high as text and also making text not break on marker.\n\t\t\tdomElement.append( '\\u2060', domDocument.createElement( 'span' ), '\\u2060' );\n\n\t\t\treturn domElement;\n\t\t} );\n\t}\n\n\t/**\n\t * Updates the horizontal drop target line.\n\t */\n\tprivate _updateDropTargetLine( range: ModelRange ): void {\n\t\tconst editing = this.editor.editing;\n\n\t\tconst nodeBefore = range.start.nodeBefore as ModelElement | null;\n\t\tconst nodeAfter = range.start.nodeAfter as ModelElement | null;\n\t\tconst nodeParent = range.start.parent as ModelElement;\n\n\t\tconst viewElementBefore = nodeBefore ? editing.mapper.toViewElement( nodeBefore ) : null;\n\t\tconst domElementBefore = viewElementBefore ? editing.view.domConverter.mapViewToDom( viewElementBefore ) : null;\n\n\t\tconst viewElementAfter = nodeAfter ? editing.mapper.toViewElement( nodeAfter )! : null;\n\t\tconst domElementAfter = viewElementAfter ? editing.view.domConverter.mapViewToDom( viewElementAfter ) : null;\n\n\t\tconst viewElementParent = editing.mapper.toViewElement( nodeParent )!;\n\n\t\tif ( !viewElementParent ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst domElementParent = editing.view.domConverter.mapViewToDom( viewElementParent )!;\n\n\t\tconst domScrollableRect = this._getScrollableRect( viewElementParent );\n\n\t\tconst { scrollX, scrollY } = global.window;\n\t\tconst rectBefore = domElementBefore ? new Rect( domElementBefore ) : null;\n\t\tconst rectAfter = domElementAfter ? new Rect( domElementAfter ) : null;\n\t\tconst rectParent = new Rect( domElementParent ).excludeScrollbarsAndBorders();\n\n\t\tconst above = rectBefore ? rectBefore.bottom : rectParent.top;\n\t\tconst below = rectAfter ? rectAfter.top : rectParent.bottom;\n\n\t\tconst parentStyle = global.window.getComputedStyle( domElementParent );\n\t\tconst top = ( above <= below ? ( above + below ) / 2 : below );\n\n\t\tif ( domScrollableRect.top < top && top < domScrollableRect.bottom ) {\n\t\t\tconst left = rectParent.left + parseFloat( parentStyle.paddingLeft );\n\t\t\tconst right = rectParent.right - parseFloat( parentStyle.paddingRight );\n\n\t\t\tconst leftClamped = Math.max( left + scrollX, domScrollableRect.left );\n\t\t\tconst rightClamped = Math.min( right + scrollX, domScrollableRect.right );\n\n\t\t\tthis._dropTargetLineView.set( {\n\t\t\t\tisVisible: true,\n\t\t\t\tleft: leftClamped,\n\t\t\t\ttop: top + scrollY,\n\t\t\t\twidth: rightClamped - leftClamped\n\t\t\t} );\n\t\t} else {\n\t\t\tthis._dropTargetLineView.isVisible = false;\n\t\t}\n\t}\n\n\t/**\n\t * Finds the closest scrollable element rect for the given view element.\n\t */\n\tprivate _getScrollableRect( viewElement: ViewElement ): Rect {\n\t\tconst rootName = ( viewElement.root as ViewRootEditableElement ).rootName;\n\n\t\tlet domScrollable;\n\n\t\tif ( this._scrollables.has( rootName ) ) {\n\t\t\tdomScrollable = this._scrollables.get( rootName )!.domElement;\n\t\t} else {\n\t\t\tconst domElement = this.editor.editing.view.domConverter.mapViewToDom( viewElement )!;\n\n\t\t\tdomScrollable = findScrollableElement( domElement );\n\n\t\t\tthis._domEmitter.listenTo( domScrollable, 'scroll', this._reconvertMarkerThrottled, { usePassive: true } );\n\t\t\tconst resizeObserver = new ResizeObserver( domScrollable, this._reconvertMarkerThrottled );\n\n\t\t\tthis._scrollables.set( rootName, {\n\t\t\t\tdomElement: domScrollable,\n\t\t\t\tresizeObserver\n\t\t\t} );\n\t\t}\n\n\t\treturn new Rect( domScrollable ).excludeScrollbarsAndBorders();\n\t}\n}\n\n/**\n * Returns fixed selection range for given position and target element.\n */\nfunction findDropTargetRange(\n\teditor: Editor,\n\ttargetViewElement: ViewElement,\n\ttargetViewRanges: Array<ViewRange> | null,\n\tclientX: number,\n\tclientY: number,\n\tblockMode: boolean,\n\tdraggedRange: ModelLiveRange | null\n): ModelRange | null {\n\tconst model = editor.model;\n\tconst mapper = editor.editing.mapper;\n\n\tconst targetModelElement = getClosestMappedModelElement( editor, targetViewElement );\n\tlet modelElement = targetModelElement;\n\n\twhile ( modelElement ) {\n\t\tif ( !blockMode ) {\n\t\t\tif ( model.schema.checkChild( modelElement, '$text' ) ) {\n\t\t\t\tif ( targetViewRanges ) {\n\t\t\t\t\tconst targetViewPosition = targetViewRanges[ 0 ].start;\n\t\t\t\t\tconst targetModelPosition = mapper.toModelPosition( targetViewPosition );\n\t\t\t\t\tconst canDropOnPosition = !draggedRange || Array\n\t\t\t\t\t\t.from( draggedRange.getItems( { shallow: true } ) )\n\t\t\t\t\t\t.some( item => model.schema.checkChild( targetModelPosition, item as ModelNode ) );\n\n\t\t\t\t\tif ( canDropOnPosition ) {\n\t\t\t\t\t\tif ( model.schema.checkChild( targetModelPosition, '$text' ) ) {\n\t\t\t\t\t\t\treturn model.createRange( targetModelPosition );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t/* v8 ignore else -- @preserve */\n\t\t\t\t\t\t\tif ( targetViewPosition ) {\n\t\t\t\t\t\t\t\t// This is the case of dropping inside a span wrapper of an inline image.\n\t\t\t\t\t\t\t\treturn findDropTargetRangeForElement(\n\t\t\t\t\t\t\t\t\teditor,\n\t\t\t\t\t\t\t\t\tgetClosestMappedModelElement( editor, targetViewPosition.parent as ViewElement ),\n\t\t\t\t\t\t\t\t\tclientX,\n\t\t\t\t\t\t\t\t\tclientY\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( model.schema.isInline( modelElement ) ) {\n\t\t\t\treturn findDropTargetRangeForElement( editor, modelElement, clientX, clientY );\n\t\t\t}\n\t\t}\n\n\t\tif ( model.schema.isBlock( modelElement ) ) {\n\t\t\treturn findDropTargetRangeForElement( editor, modelElement, clientX, clientY );\n\t\t}\n\t\telse if ( model.schema.checkChild( modelElement, '$block' ) ) {\n\t\t\tconst childNodes = Array.from( modelElement.getChildren() )\n\t\t\t\t.filter( ( node ): node is ModelElement => node.is( 'element' ) && !shouldIgnoreElement( editor, node ) );\n\n\t\t\tlet startIndex = 0;\n\t\t\tlet endIndex = childNodes.length;\n\n\t\t\tif ( endIndex == 0 ) {\n\t\t\t\treturn model.createRange( model.createPositionAt( modelElement as ModelElement, 'end' ) );\n\t\t\t}\n\n\t\t\twhile ( startIndex < endIndex - 1 ) {\n\t\t\t\tconst middleIndex = Math.floor( ( startIndex + endIndex ) / 2 );\n\t\t\t\tconst side = findElementSide( editor, childNodes[ middleIndex ], clientX, clientY );\n\n\t\t\t\tif ( side == 'before' ) {\n\t\t\t\t\tendIndex = middleIndex;\n\t\t\t\t} else {\n\t\t\t\t\tstartIndex = middleIndex;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn findDropTargetRangeForElement( editor, childNodes[ startIndex ], clientX, clientY );\n\t\t}\n\n\t\tmodelElement = modelElement.parent as ModelElement;\n\t}\n\n\treturn null;\n}\n\n/**\n * Returns true for elements which should be ignored.\n */\nfunction shouldIgnoreElement( editor: Editor, modelElement: ModelElement ): boolean {\n\tconst mapper = editor.editing.mapper;\n\tconst domConverter = editor.editing.view.domConverter;\n\n\tconst viewElement = mapper.toViewElement( modelElement )!;\n\n\tif ( !viewElement ) {\n\t\treturn true;\n\t}\n\n\tconst domElement = domConverter.mapViewToDom( viewElement )!;\n\n\treturn global.window.getComputedStyle( domElement ).float != 'none';\n}\n\n/**\n * Returns target range relative to the given element.\n */\nfunction findDropTargetRangeForElement( editor: Editor, modelElement: ModelElement, clientX: number, clientY: number ): ModelRange {\n\tconst model = editor.model;\n\n\treturn model.createRange(\n\t\tmodel.createPositionAt(\n\t\t\tmodelElement as ModelElement,\n\t\t\tfindElementSide( editor, modelElement, clientX, clientY )\n\t\t)\n\t);\n}\n\n/**\n * Resolves whether drop marker should be before or after the given element.\n */\nfunction findElementSide( editor: Editor, modelElement: ModelElement, clientX: number, clientY: number ): 'before' | 'after' {\n\tconst mapper = editor.editing.mapper;\n\tconst domConverter = editor.editing.view.domConverter;\n\n\tconst viewElement = mapper.toViewElement( modelElement )!;\n\tconst domElement = domConverter.mapViewToDom( viewElement )!;\n\tconst rect = new Rect( domElement );\n\n\tif ( editor.model.schema.isInline( modelElement ) ) {\n\t\treturn clientX < ( rect.left + rect.right ) / 2 ? 'before' : 'after';\n\t} else {\n\t\treturn clientY < ( rect.top + rect.bottom ) / 2 ? 'before' : 'after';\n\t}\n}\n\n/**\n * Returns the closest model element for the specified view element.\n */\nfunction getClosestMappedModelElement( editor: Editor, element: ViewElement ): ModelElement {\n\tconst mapper = editor.editing.mapper;\n\tconst view = editor.editing.view;\n\n\tconst targetModelElement = mapper.toModelElement( element );\n\n\tif ( targetModelElement ) {\n\t\treturn targetModelElement;\n\t}\n\n\t// Find mapped ancestor if the target is inside not mapped element (for example inline code element).\n\tconst viewPosition = view.createPositionBefore( element );\n\tconst viewElement = mapper.findMappedViewAncestor( viewPosition );\n\n\treturn mapper.toModelElement( viewElement )!;\n}\n\n/**\n * Returns the closest scrollable ancestor DOM element.\n *\n * It is assumed that `domNode` is attached to the document.\n */\nfunction findScrollableElement( domNode: HTMLElement ): HTMLElement {\n\tlet domElement: HTMLElement = domNode;\n\n\tdo {\n\t\tdomElement = domElement.parentElement!;\n\n\t\tconst overflow = global.window.getComputedStyle( domElement ).overflowY;\n\n\t\tif ( overflow == 'auto' || overflow == 'scroll' ) {\n\t\t\tbreak;\n\t\t}\n\t} while ( domElement.tagName != 'BODY' );\n\n\treturn domElement;\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/dragdropblocktoolbar\n */\n\nimport { Plugin } from '@ckeditor/ckeditor5-core';\n\nimport {\n\tenv,\n\tglobal,\n\tDomEmitterMixin,\n\ttype ObservableChangeEvent,\n\ttype DomEmitter\n} from '@ckeditor/ckeditor5-utils';\n\nimport type { BlockToolbar } from '@ckeditor/ckeditor5-ui';\n\nimport { ClipboardObserver } from './clipboardobserver.js';\n\n/**\n * Integration of a block Drag and Drop support with the block toolbar.\n *\n * @internal\n */\nexport class DragDropBlockToolbar extends Plugin {\n\t/**\n\t * Whether current dragging is started by block toolbar button dragging.\n\t */\n\tprivate _isBlockDragging = false;\n\n\t/**\n\t * DOM Emitter.\n\t */\n\tprivate _domEmitter: DomEmitter = new ( DomEmitterMixin() )();\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'DragDropBlockToolbar' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\n\t\tthis.listenTo<ObservableChangeEvent<boolean>>( editor, 'change:isReadOnly', ( evt, name, isReadOnly ) => {\n\t\t\tif ( isReadOnly ) {\n\t\t\t\tthis.forceDisabled( 'readOnlyMode' );\n\t\t\t\tthis._isBlockDragging = false;\n\t\t\t} else {\n\t\t\t\tthis.clearForceDisabled( 'readOnlyMode' );\n\t\t\t}\n\t\t} );\n\n\t\tif ( env.isAndroid ) {\n\t\t\tthis.forceDisabled( 'noAndroidSupport' );\n\t\t}\n\n\t\tif ( editor.plugins.has( 'BlockToolbar' ) ) {\n\t\t\tconst blockToolbar: BlockToolbar = editor.plugins.get( 'BlockToolbar' );\n\t\t\tconst element = blockToolbar.buttonView.element!;\n\n\t\t\tthis._domEmitter.listenTo( element, 'dragstart', ( evt, data ) => this._handleBlockDragStart( data ) );\n\t\t\tthis._domEmitter.listenTo( global.document, 'dragover', ( evt, data ) => this._handleBlockDragging( data ) );\n\t\t\tthis._domEmitter.listenTo( global.document, 'drop', ( evt, data ) => this._handleBlockDragging( data ) );\n\t\t\tthis._domEmitter.listenTo( global.document, 'dragend', () => this._handleBlockDragEnd(), { useCapture: true } );\n\n\t\t\tif ( this.isEnabled ) {\n\t\t\t\telement.setAttribute( 'draggable', 'true' );\n\t\t\t}\n\n\t\t\tthis.on<ObservableChangeEvent<boolean>>( 'change:isEnabled', ( evt, name, isEnabled ) => {\n\t\t\t\telement.setAttribute( 'draggable', isEnabled ? 'true' : 'false' );\n\t\t\t} );\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override destroy(): void {\n\t\tthis._domEmitter.stopListening();\n\n\t\treturn super.destroy();\n\t}\n\n\t/**\n\t * The `dragstart` event handler.\n\t */\n\tprivate _handleBlockDragStart( domEvent: DragEvent ): void {\n\t\tif ( !this.isEnabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst model = this.editor.model;\n\t\tconst selection = model.document.selection;\n\t\tconst view = this.editor.editing.view;\n\n\t\tconst blocks = Array.from( selection.getSelectedBlocks() );\n\t\tconst draggedRange = model.createRange(\n\t\t\tmodel.createPositionBefore( blocks[ 0 ] ),\n\t\t\tmodel.createPositionAfter( blocks[ blocks.length - 1 ] )\n\t\t);\n\n\t\tmodel.change( writer => writer.setSelection( draggedRange ) );\n\n\t\tthis._isBlockDragging = true;\n\n\t\tview.focus();\n\t\tview.getObserver( ClipboardObserver )!.onDomEvent( domEvent );\n\t}\n\n\t/**\n\t * The `dragover` and `drop` event handler.\n\t */\n\tprivate _handleBlockDragging( domEvent: DragEvent ): void {\n\t\tif ( !this.isEnabled || !this._isBlockDragging ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst clientX = domEvent.clientX + ( this.editor.locale.contentLanguageDirection == 'ltr' ? 100 : -100 );\n\t\tconst clientY = domEvent.clientY;\n\t\tconst target = document.elementFromPoint( clientX, clientY );\n\t\tconst view = this.editor.editing.view;\n\n\t\tif ( !target || !target.closest( '.ck-editor__editable' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tview.getObserver( ClipboardObserver )!.onDomEvent( {\n\t\t\t...domEvent,\n\t\t\ttype: domEvent.type,\n\t\t\tdataTransfer: domEvent.dataTransfer,\n\t\t\ttarget,\n\t\t\tclientX,\n\t\t\tclientY,\n\t\t\tpreventDefault: () => domEvent.preventDefault(),\n\t\t\tstopPropagation: () => domEvent.stopPropagation()\n\t\t} );\n\t}\n\n\t/**\n\t * The `dragend` event handler.\n\t */\n\tprivate _handleBlockDragEnd(): void {\n\t\tthis._isBlockDragging = false;\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/dragdrop\n */\n\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\n\nimport {\n\tModelLiveRange,\n\tPointerObserver,\n\ttype ViewDataTransfer,\n\ttype ModelElement,\n\ttype Model,\n\ttype ModelRange,\n\ttype ModelPosition,\n\ttype ViewElement,\n\ttype ViewDocumentDomEventData,\n\ttype ViewDocumentPointerDownEvent,\n\ttype ViewDocumentPointerUpEvent\n} from '@ckeditor/ckeditor5-engine';\n\nimport {\n\tWidget,\n\tisWidget,\n\ttype WidgetToolbarRepository\n} from '@ckeditor/ckeditor5-widget';\n\nimport {\n\tenv,\n\tuid,\n\tglobal,\n\tcreateElement,\n\tDomEmitterMixin,\n\tdelay,\n\tRect,\n\ttype DelayedFunc,\n\ttype ObservableChangeEvent,\n\ttype DomEmitter\n} from '@ckeditor/ckeditor5-utils';\n\nimport {\n\tClipboardPipeline,\n\ttype ClipboardContentInsertionEvent\n} from './clipboardpipeline.js';\n\nimport {\n\tClipboardObserver,\n\ttype ViewDocumentDragEndEvent,\n\ttype ViewDocumentDragEnterEvent,\n\ttype ViewDocumentDraggingEvent,\n\ttype ViewDocumentDragLeaveEvent,\n\ttype ViewDocumentDragStartEvent,\n\ttype ViewDocumentClipboardInputEvent\n} from './clipboardobserver.js';\n\nimport { DragDropTarget } from './dragdroptarget.js';\nimport { DragDropBlockToolbar } from './dragdropblocktoolbar.js';\n\n// Drag and drop events overview:\n//\n// ┌──────────────────┐\n// │ mousedown │ Sets the draggable attribute.\n// └─────────┬────────┘\n// │\n// └─────────────────────┐\n// │ │\n// │ ┌─────────V────────┐\n// │ │ mouseup │ Dragging did not start, removes the draggable attribute.\n// │ └──────────────────┘\n// │\n// ┌─────────V────────┐ Retrieves the selected model.DocumentFragment\n// │ dragstart │ and converts it to view.DocumentFragment.\n// └─────────┬────────┘\n// │\n// ┌─────────V────────┐ Processes view.DocumentFragment to text/html and text/plain\n// │ clipboardOutput │ and stores the results in data.dataTransfer.\n// └─────────┬────────┘\n// │\n// │ DOM dragover\n// ┌────────────┐\n// │ │\n// ┌─────────V────────┐ │\n// │ dragging │ │ Updates the drop target marker.\n// └─────────┬────────┘ │\n// │ │\n// ┌─────────────└────────────┘\n// │ │ │\n// │ ┌─────────V────────┐ │\n// │ │ dragleave │ │ Removes the drop target marker.\n// │ └─────────┬────────┘ │\n// │ │ │\n// ┌───│─────────────┘ │\n// │ │ │ │\n// │ │ ┌─────────V────────┐ │\n// │ │ │ dragenter │ │ Focuses the editor view.\n// │ │ └─────────┬────────┘ │\n// │ │ │ │\n// │ │ └────────────┘\n// │ │\n// │ └─────────────┐\n// │ │ │\n// │ │ ┌─────────V────────┐\n// └───┐ │ drop │ (The default handler of the clipboard pipeline).\n// │ └─────────┬────────┘\n// │ │\n// │ ┌─────────V────────┐ Resolves the final data.targetRanges.\n// │ │ clipboardInput │ Aborts if dropping on dragged content.\n// │ └─────────┬────────┘\n// │ │\n// │ ┌─────────V────────┐\n// │ │ clipboardInput │ (The default handler of the clipboard pipeline).\n// │ └─────────┬────────┘\n// │ │\n// │ ┌───────────V───────────┐\n// │ │ inputTransformation │ (The default handler of the clipboard pipeline).\n// │ └───────────┬───────────┘\n// │ │\n// │ ┌──────────V──────────┐\n// │ │ contentInsertion │ Updates the document selection to drop range.\n// │ └──────────┬──────────┘\n// │ │\n// │ ┌──────────V──────────┐\n// │ │ contentInsertion │ (The default handler of the clipboard pipeline).\n// │ └──────────┬──────────┘\n// │ │\n// │ ┌──────────V──────────┐\n// │ │ contentInsertion │ Removes the content from the original range if the insertion was successful.\n// │ └──────────┬──────────┘\n// │ │\n// └─────────────┐\n// │\n// ┌─────────V────────┐\n// │ dragend │ Removes the drop marker and cleans the state.\n// └──────────────────┘\n//\n\n/**\n * The drag and drop feature. It works on top of the {@link module:clipboard/clipboardpipeline~ClipboardPipeline}.\n *\n * Read more about the clipboard integration in the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n *\n * @internal\n */\nexport class DragDrop extends Plugin {\n\t/**\n\t * The live range over the original content that is being dragged.\n\t */\n\tprivate _draggedRange!: ModelLiveRange | null;\n\n\t/**\n\t * The UID of current dragging that is used to verify if the drop started in the same editor as the drag start.\n\t *\n\t * **Note**: This is a workaround for broken 'dragend' events (they are not fired if the source text node got removed).\n\t */\n\tprivate _draggingUid!: string;\n\n\t/**\n\t * The reference to the model element that currently has a `draggable` attribute set (it is set while dragging).\n\t */\n\tprivate _draggableElement!: ModelElement | null;\n\n\t/**\n\t * A delayed callback removing draggable attributes.\n\t */\n\tprivate _clearDraggableAttributesDelayed: DelayedFunc<() => void> = delay( () => this._clearDraggableAttributes(), 40 );\n\n\t/**\n\t * Whether the dragged content can be dropped only in block context.\n\t */\n\t// TODO handle drag from other editor instance\n\t// TODO configure to use block, inline or both\n\tprivate _blockMode: boolean = false;\n\n\t/**\n\t * DOM Emitter.\n\t */\n\tprivate _domEmitter: DomEmitter = new ( DomEmitterMixin() )();\n\n\t/**\n\t * The DOM element used to generate dragged preview image.\n\t */\n\tprivate _previewContainer?: HTMLElement;\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'DragDrop' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ ClipboardPipeline, Widget, DragDropTarget, DragDropBlockToolbar ]> {\n\t\treturn [ ClipboardPipeline, Widget, DragDropTarget, DragDropBlockToolbar ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\t\tconst view = editor.editing.view;\n\n\t\tthis._draggedRange = null;\n\t\tthis._draggingUid = '';\n\t\tthis._draggableElement = null;\n\n\t\tview.addObserver( ClipboardObserver );\n\t\tview.addObserver( PointerObserver );\n\n\t\tthis._setupDragging();\n\t\tthis._setupContentInsertionIntegration();\n\t\tthis._setupClipboardInputIntegration();\n\t\tthis._setupDraggableAttributeHandling();\n\n\t\tthis.listenTo<ObservableChangeEvent<boolean>>( editor, 'change:isReadOnly', ( evt, name, isReadOnly ) => {\n\t\t\tif ( isReadOnly ) {\n\t\t\t\tthis.forceDisabled( 'readOnlyMode' );\n\t\t\t} else {\n\t\t\t\tthis.clearForceDisabled( 'readOnlyMode' );\n\t\t\t}\n\t\t} );\n\n\t\tthis.on<ObservableChangeEvent<boolean>>( 'change:isEnabled', ( evt, name, isEnabled ) => {\n\t\t\tif ( !isEnabled ) {\n\t\t\t\tthis._finalizeDragging( false );\n\t\t\t}\n\t\t} );\n\n\t\tif ( env.isAndroid ) {\n\t\t\tthis.forceDisabled( 'noAndroidSupport' );\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override destroy(): void {\n\t\tif ( this._draggedRange ) {\n\t\t\tthis._draggedRange.detach();\n\t\t\tthis._draggedRange = null;\n\t\t}\n\n\t\tif ( this._previewContainer ) {\n\t\t\tthis._previewContainer.remove();\n\t\t}\n\n\t\tthis._domEmitter.stopListening();\n\t\tthis._clearDraggableAttributesDelayed.cancel();\n\n\t\treturn super.destroy();\n\t}\n\n\t/**\n\t * Drag and drop events handling.\n\t */\n\tprivate _setupDragging(): void {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst view = editor.editing.view;\n\t\tconst viewDocument = view.document;\n\t\tconst dragDropTarget = editor.plugins.get( DragDropTarget );\n\n\t\t// The handler for the drag start; it is responsible for setting data transfer object.\n\t\tthis.listenTo<ViewDocumentDragStartEvent>( viewDocument, 'dragstart', ( evt, data ) => {\n\t\t\t// Don't drag the editable element itself.\n\t\t\tif ( data.target?.is( 'editableElement' ) ) {\n\t\t\t\tdata.preventDefault();\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._prepareDraggedRange( data.target );\n\n\t\t\tif ( !this._draggedRange ) {\n\t\t\t\tdata.preventDefault();\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._draggingUid = uid();\n\n\t\t\tconst canEditAtDraggedRange = this.isEnabled && editor.model.canEditAt( this._draggedRange );\n\n\t\t\tdata.dataTransfer.effectAllowed = canEditAtDraggedRange ? 'copyMove' : 'copy';\n\t\t\tdata.dataTransfer.setData( 'application/ckeditor5-dragging-uid', this._draggingUid );\n\n\t\t\tconst draggedSelection = model.createSelection( this._draggedRange.toRange() );\n\t\t\tconst clipboardPipeline: ClipboardPipeline = this.editor.plugins.get( 'ClipboardPipeline' );\n\n\t\t\tclipboardPipeline._fireOutputTransformationEvent( data.dataTransfer, draggedSelection, 'dragstart' );\n\n\t\t\tconst { dataTransfer, domTarget, domEvent } = data;\n\t\t\tconst { clientX } = domEvent;\n\n\t\t\tthis._updatePreview( { dataTransfer, domTarget, clientX } );\n\n\t\t\tdata.stopPropagation();\n\n\t\t\tif ( !canEditAtDraggedRange ) {\n\t\t\t\tthis._draggedRange.detach();\n\t\t\t\tthis._draggedRange = null;\n\t\t\t\tthis._draggingUid = '';\n\t\t\t}\n\t\t}, { priority: 'low' } );\n\n\t\t// The handler for finalizing drag and drop. It should always be triggered after dragging completes\n\t\t// even if it was completed in a different application.\n\t\t// Note: This is not fired if source text node got removed while downcasting a marker.\n\t\tthis.listenTo<ViewDocumentDragEndEvent>( viewDocument, 'dragend', ( evt, data ) => {\n\t\t\tthis._finalizeDragging( !data.dataTransfer.isCanceled && data.dataTransfer.dropEffect == 'move' );\n\t\t}, { priority: 'low' } );\n\n\t\t// Reset block dragging mode even if dropped outside the editable.\n\t\tthis._domEmitter.listenTo( global.document, 'dragend', () => {\n\t\t\tthis._blockMode = false;\n\t\t}, { useCapture: true } );\n\n\t\t// Dragging over the editable.\n\t\tthis.listenTo<ViewDocumentDragEnterEvent>( viewDocument, 'dragenter', () => {\n\t\t\tif ( !this.isEnabled ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tview.focus();\n\t\t} );\n\n\t\t// Dragging out of the editable.\n\t\tthis.listenTo<ViewDocumentDragLeaveEvent>( viewDocument, 'dragleave', () => {\n\t\t\t// We do not know if the mouse left the editor or just some element in it, so let us wait a few milliseconds\n\t\t\t// to check if 'dragover' is not fired.\n\t\t\tdragDropTarget.removeDropMarkerDelayed();\n\t\t} );\n\n\t\t// Handler for moving dragged content over the target area.\n\t\tthis.listenTo<ViewDocumentDraggingEvent>( viewDocument, 'dragging', ( evt, data ) => {\n\t\t\tif ( !this.isEnabled ) {\n\t\t\t\tdata.dataTransfer.dropEffect = 'none';\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { clientX, clientY } = ( data as ViewDocumentDomEventData<DragEvent> ).domEvent;\n\n\t\t\tconst targetRange = dragDropTarget.updateDropMarker(\n\t\t\t\tdata.target,\n\t\t\t\tdata.targetRanges,\n\t\t\t\tclientX,\n\t\t\t\tclientY,\n\t\t\t\tthis._blockMode,\n\t\t\t\tthis._draggedRange\n\t\t\t);\n\n\t\t\t// Do not allow dropping if there is no valid target range (e.g., dropping on non-editable place).\n\t\t\tif ( !targetRange ) {\n\t\t\t\tdata.dataTransfer.dropEffect = 'none';\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If this is content being dragged from another editor, moving out of current editor instance\n\t\t\t// is not possible until 'dragend' event case will be fixed.\n\t\t\tif ( !this._draggedRange ) {\n\t\t\t\tdata.dataTransfer.dropEffect = 'copy';\n\t\t\t}\n\n\t\t\t// In Firefox it is already set and effect allowed remains the same as originally set.\n\t\t\tif ( !env.isGecko ) {\n\t\t\t\tif ( data.dataTransfer.effectAllowed == 'copy' ) {\n\t\t\t\t\tdata.dataTransfer.dropEffect = 'copy';\n\t\t\t\t} else if ( [ 'all', 'copyMove' ].includes( data.dataTransfer.effectAllowed ) ) {\n\t\t\t\t\tdata.dataTransfer.dropEffect = 'move';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tevt.stop();\n\t\t}, { priority: 'low' } );\n\t}\n\n\t/**\n\t * Integration with the `clipboardInput` event.\n\t */\n\tprivate _setupClipboardInputIntegration(): void {\n\t\tconst editor = this.editor;\n\t\tconst view = editor.editing.view;\n\t\tconst viewDocument = view.document;\n\t\tconst dragDropTarget = editor.plugins.get( DragDropTarget );\n\n\t\t// Update the event target ranges and abort dropping if dropping over itself.\n\t\tthis.listenTo<ViewDocumentClipboardInputEvent>( viewDocument, 'clipboardInput', ( evt, data ) => {\n\t\t\tif ( data.method != 'drop' ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { clientX, clientY } = ( data as ViewDocumentDomEventData<DragEvent> ).domEvent;\n\t\t\tconst targetRange = dragDropTarget.getFinalDropRange(\n\t\t\t\tdata.target,\n\t\t\t\tdata.targetRanges,\n\t\t\t\tclientX,\n\t\t\t\tclientY,\n\t\t\t\tthis._blockMode,\n\t\t\t\tthis._draggedRange\n\t\t\t);\n\n\t\t\tif ( !targetRange ) {\n\t\t\t\tthis._finalizeDragging( false );\n\t\t\t\tevt.stop();\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Since we cannot rely on the drag end event, we must check if the local drag range is from the current drag and drop\n\t\t\t// or it is from some previous not cleared one.\n\t\t\tif ( this._draggedRange && this._draggingUid != data.dataTransfer.getData( 'application/ckeditor5-dragging-uid' ) ) {\n\t\t\t\tthis._draggedRange.detach();\n\t\t\t\tthis._draggedRange = null;\n\t\t\t\tthis._draggingUid = '';\n\t\t\t}\n\n\t\t\t// Do not do anything if some content was dragged within the same document to the same position.\n\t\t\tconst isMove = getFinalDropEffect( data.dataTransfer ) == 'move';\n\n\t\t\tif ( isMove && this._draggedRange && this._draggedRange.containsRange( targetRange, true ) ) {\n\t\t\t\tthis._finalizeDragging( false );\n\t\t\t\tevt.stop();\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Override the target ranges with the one adjusted to the best one for a drop.\n\t\t\tdata.targetRanges = [ editor.editing.mapper.toViewRange( targetRange ) ];\n\t\t}, { priority: 'high' } );\n\t}\n\n\t/**\n\t * Integration with the `contentInsertion` event of the clipboard pipeline.\n\t */\n\tprivate _setupContentInsertionIntegration(): void {\n\t\tconst clipboardPipeline = this.editor.plugins.get( ClipboardPipeline );\n\n\t\tclipboardPipeline.on<ClipboardContentInsertionEvent>( 'contentInsertion', ( evt, data ) => {\n\t\t\tif ( !this.isEnabled || data.method !== 'drop' ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Update the selection to the target range in the same change block to avoid selection post-fixing\n\t\t\t// and to be able to clone text attributes for plain text dropping.\n\t\t\tconst ranges = data.targetRanges!.map( viewRange => this.editor.editing.mapper.toModelRange( viewRange ) );\n\n\t\t\tthis.editor.model.change( writer => writer.setSelection( ranges ) );\n\t\t}, { priority: 'high' } );\n\n\t\tclipboardPipeline.on<ClipboardContentInsertionEvent>( 'contentInsertion', ( evt, data ) => {\n\t\t\tif ( !this.isEnabled || data.method !== 'drop' ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remove dragged range content, remove markers, clean after dragging.\n\t\t\tconst isMove = getFinalDropEffect( data.dataTransfer ) == 'move';\n\n\t\t\t// Whether any content was inserted (insertion might fail if the schema is disallowing some elements\n\t\t\t// (for example an image caption allows only the content of a block but not blocks themselves.\n\t\t\t// Some integrations might not return valid range (i.e., table pasting).\n\t\t\tconst isSuccess = !data.resultRange || !data.resultRange.isCollapsed;\n\n\t\t\tthis._finalizeDragging( isSuccess && isMove );\n\t\t}, { priority: 'lowest' } );\n\t}\n\n\t/**\n\t * Adds listeners that add the `draggable` attribute to the elements while the mouse button is down so the dragging could start.\n\t */\n\tprivate _setupDraggableAttributeHandling(): void {\n\t\tconst editor = this.editor;\n\t\tconst view = editor.editing.view;\n\t\tconst viewDocument = view.document;\n\n\t\t// Add the 'draggable' attribute to the widget while pressing the selection handle.\n\t\t// This is required for widgets to be draggable. In Chrome it will enable dragging text nodes.\n\t\tthis.listenTo<ViewDocumentPointerDownEvent>( viewDocument, 'pointerdown', ( evt, data ) => {\n\t\t\t// The lack of data can be caused by editor tests firing fake mouse events. This should not occur\n\t\t\t// in real-life scenarios but this greatly simplifies editor tests that would otherwise fail a lot.\n\t\t\tif ( env.isAndroid || !data ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._clearDraggableAttributesDelayed.cancel();\n\n\t\t\t// Check if this is a mousedown over the widget (but not a nested editable).\n\t\t\tlet draggableElement = findDraggableWidget( data.target );\n\n\t\t\t// Note: There is a limitation that if more than a widget is selected (a widget and some text)\n\t\t\t// and dragging starts on the widget, then only the widget is dragged.\n\n\t\t\t// If this was not a widget then we should check if we need to drag some text content.\n\t\t\t// In Chrome set a 'draggable' attribute on closest editable to allow immediate dragging of the selected text range.\n\t\t\t// In Firefox this is not needed. In Safari it makes the whole editable draggable (not just textual content).\n\t\t\t// Disabled in read-only mode because draggable=\"true\" + contenteditable=\"false\" results\n\t\t\t// in not firing selectionchange event ever, which makes the selection stuck in read-only mode.\n\t\t\tif ( env.isBlink && !editor.isReadOnly && !draggableElement && !viewDocument.selection.isCollapsed ) {\n\t\t\t\tconst selectedElement = viewDocument.selection.getSelectedElement();\n\n\t\t\t\tif ( !selectedElement || !isWidget( selectedElement ) ) {\n\t\t\t\t\tdraggableElement = viewDocument.selection.editableElement;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( draggableElement ) {\n\t\t\t\tview.change( writer => {\n\t\t\t\t\twriter.setAttribute( 'draggable', 'true', draggableElement! );\n\t\t\t\t} );\n\n\t\t\t\t// Keep the reference to the model element in case the view element gets removed while dragging.\n\t\t\t\tthis._draggableElement = editor.editing.mapper.toModelElement( draggableElement )!;\n\t\t\t}\n\t\t} );\n\n\t\t// Remove the draggable attribute in case no dragging started (only mousedown + mouseup).\n\t\tthis.listenTo<ViewDocumentPointerUpEvent>( viewDocument, 'pointerup', () => {\n\t\t\tif ( !env.isAndroid ) {\n\t\t\t\tthis._clearDraggableAttributesDelayed();\n\t\t\t}\n\t\t} );\n\t}\n\n\t/**\n\t * Removes the `draggable` attribute from the element that was used for dragging.\n\t */\n\tprivate _clearDraggableAttributes(): void {\n\t\tconst editing = this.editor.editing;\n\n\t\tediting.view.change( writer => {\n\t\t\t// Remove 'draggable' attribute.\n\t\t\tif ( this._draggableElement && this._draggableElement.root.rootName != '$graveyard' ) {\n\t\t\t\twriter.removeAttribute( 'draggable', editing.mapper.toViewElement( this._draggableElement )! );\n\t\t\t}\n\n\t\t\tthis._draggableElement = null;\n\t\t} );\n\t}\n\n\t/**\n\t * Deletes the dragged content from its original range and clears the dragging state.\n\t *\n\t * @param moved Whether the move succeeded.\n\t */\n\tprivate _finalizeDragging( moved: boolean ): void {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst dragDropTarget = editor.plugins.get( DragDropTarget );\n\n\t\tdragDropTarget.removeDropMarker();\n\t\tthis._clearDraggableAttributes();\n\n\t\tif ( editor.plugins.has( 'WidgetToolbarRepository' ) ) {\n\t\t\tconst widgetToolbarRepository: WidgetToolbarRepository = editor.plugins.get( 'WidgetToolbarRepository' );\n\n\t\t\twidgetToolbarRepository.clearForceDisabled( 'dragDrop' );\n\t\t}\n\n\t\tthis._draggingUid = '';\n\n\t\tif ( this._previewContainer ) {\n\t\t\tthis._previewContainer.remove();\n\t\t\tthis._previewContainer = undefined;\n\t\t}\n\n\t\tif ( !this._draggedRange ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Delete moved content.\n\t\tif ( moved && this.isEnabled ) {\n\t\t\tmodel.change( writer => {\n\t\t\t\tconst selection = model.createSelection( this._draggedRange );\n\n\t\t\t\tmodel.deleteContent( selection, { doNotAutoparagraph: true } );\n\n\t\t\t\t// Check result selection if it does not require auto-paragraphing of empty container.\n\t\t\t\tconst selectionParent = selection.getFirstPosition()!.parent as ModelElement;\n\n\t\t\t\tif (\n\t\t\t\t\tselectionParent.isEmpty &&\n\t\t\t\t\t!model.schema.checkChild( selectionParent, '$text' ) &&\n\t\t\t\t\tmodel.schema.checkChild( selectionParent, 'paragraph' )\n\t\t\t\t) {\n\t\t\t\t\twriter.insertElement( 'paragraph', selectionParent, 0 );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tthis._draggedRange.detach();\n\t\tthis._draggedRange = null;\n\t}\n\n\t/**\n\t * Sets the dragged source range based on event target and document selection.\n\t */\n\tprivate _prepareDraggedRange( target: ViewElement ): void {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst selection = model.document.selection;\n\n\t\t// Check if this is dragstart over the widget (but not a nested editable).\n\t\tconst draggableWidget = target ? findDraggableWidget( target ) : null;\n\n\t\tif ( draggableWidget ) {\n\t\t\tconst modelElement = editor.editing.mapper.toModelElement( draggableWidget )!;\n\n\t\t\tthis._draggedRange = ModelLiveRange.fromRange( model.createRangeOn( modelElement ) );\n\t\t\tthis._blockMode = model.schema.isBlock( modelElement );\n\n\t\t\t// Disable toolbars so they won't obscure the drop area.\n\t\t\tif ( editor.plugins.has( 'WidgetToolbarRepository' ) ) {\n\t\t\t\tconst widgetToolbarRepository: WidgetToolbarRepository = editor.plugins.get( 'WidgetToolbarRepository' );\n\n\t\t\t\twidgetToolbarRepository.forceDisabled( 'dragDrop' );\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// If this was not a widget we should check if we need to drag some text content.\n\t\tif ( selection.isCollapsed && !( selection.getFirstPosition()!.parent as ModelElement ).isEmpty ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst blocks = Array.from( selection.getSelectedBlocks() );\n\t\tconst draggedRange = selection.getFirstRange()!;\n\n\t\tif ( blocks.length == 0 ) {\n\t\t\tthis._draggedRange = ModelLiveRange.fromRange( draggedRange );\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst blockRange = getRangeIncludingFullySelectedParents( model, blocks );\n\n\t\tif ( blocks.length > 1 ) {\n\t\t\tthis._draggedRange = ModelLiveRange.fromRange( blockRange );\n\t\t\tthis._blockMode = true;\n\t\t\t// TODO block mode for dragging from outside editor? or inline? or both?\n\t\t} else {\n\t\t\t/* v8 ignore else -- @preserve */\n\t\t\tif ( blocks.length == 1 ) {\n\t\t\t\tconst touchesBlockEdges = draggedRange.start.isTouching( blockRange.start ) &&\n\t\t\t\t\tdraggedRange.end.isTouching( blockRange.end );\n\n\t\t\t\tthis._draggedRange = ModelLiveRange.fromRange( touchesBlockEdges ? blockRange : draggedRange );\n\t\t\t\tthis._blockMode = touchesBlockEdges;\n\t\t\t}\n\t\t}\n\n\t\tmodel.change( writer => writer.setSelection( this._draggedRange!.toRange() ) );\n\t}\n\n\t/**\n\t * Updates the dragged preview image.\n\t */\n\tprivate _updatePreview( {\n\t\tdataTransfer,\n\t\tdomTarget,\n\t\tclientX\n\t}: {\n\t\tdataTransfer: ViewDataTransfer;\n\t\tdomTarget: HTMLElement;\n\t\tclientX: number;\n\t} ): void {\n\t\tconst view = this.editor.editing.view;\n\t\tconst editable = view.document.selection.editableElement!;\n\t\tconst domEditable = view.domConverter.mapViewToDom( editable )!;\n\t\tconst computedStyle = global.window.getComputedStyle( domEditable );\n\n\t\tif ( !this._previewContainer ) {\n\t\t\tthis._previewContainer = createElement( global.document, 'div', {\n\t\t\t\tstyle: 'position: fixed; left: -999999px;'\n\t\t\t} );\n\n\t\t\tglobal.document.body.appendChild( this._previewContainer );\n\t\t} else if ( this._previewContainer.firstElementChild ) {\n\t\t\tthis._previewContainer.removeChild( this._previewContainer.firstElementChild );\n\t\t}\n\n\t\tconst preview = createElement( global.document, 'div' );\n\n\t\tpreview.className = 'ck ck-content ck-clipboard-preview';\n\n\t\tconst domRect = new Rect( domEditable );\n\t\tconst domEditablePaddingLeft = parseFloat( computedStyle.paddingLeft );\n\t\tconst domEditablePaddingRight = parseFloat( computedStyle.paddingRight );\n\t\tconst editableWidth = parseFloat( computedStyle.width ) - domEditablePaddingLeft - domEditablePaddingRight;\n\n\t\t// Dragging by the drag handle outside editable element.\n\t\tif ( !domEditable.contains( domTarget ) ) {\n\t\t\tif ( !env.isiOS ) {\n\t\t\t\tconst offsetLeft = domRect.left - clientX + domEditablePaddingLeft;\n\n\t\t\t\tpreview.style.width = `${ editableWidth + offsetLeft }px`;\n\t\t\t\tpreview.style.paddingLeft = `${ offsetLeft }px`;\n\t\t\t} else {\n\t\t\t\t// Without a padding as on iOS preview have a background and padding would be visible.\n\t\t\t\tpreview.style.width = `${ editableWidth }px`;\n\t\t\t\tpreview.style.backgroundColor = 'var(--ck-color-base-background)';\n\t\t\t}\n\t\t} else if ( env.isiOS ) {\n\t\t\t// Custom preview for iOS. Note that it must have some dimensions for iOS to start dragging element.\n\t\t\tpreview.style.maxWidth = `${ editableWidth }px`;\n\t\t\tpreview.style.padding = '10px';\n\t\t\tpreview.style.minWidth = '200px';\n\t\t\tpreview.style.minHeight = '20px';\n\t\t\tpreview.style.boxSizing = 'border-box';\n\t\t\tpreview.style.backgroundColor = 'var(--ck-color-base-background)';\n\t\t} else {\n\t\t\t// If domTarget is inside the editable root, browsers will display the preview correctly by themselves.\n\t\t\treturn;\n\t\t}\n\n\t\tview.domConverter.setContentOf( preview, dataTransfer.getData( 'text/html' ) );\n\n\t\tdataTransfer.setDragImage( preview, 0, 0 );\n\n\t\tthis._previewContainer.appendChild( preview );\n\t}\n}\n\n/**\n * Returns the drop effect that should be a result of dragging the content.\n * This function is handling a quirk when checking the effect in the 'drop' DOM event.\n */\nfunction getFinalDropEffect( dataTransfer: ViewDataTransfer ): ViewDataTransfer[ 'dropEffect' ] {\n\tif ( env.isGecko ) {\n\t\treturn dataTransfer.dropEffect;\n\t}\n\n\treturn [ 'all', 'copyMove' ].includes( dataTransfer.effectAllowed ) ? 'move' : 'copy';\n}\n\n/**\n * Returns a widget element that should be dragged.\n */\nfunction findDraggableWidget( target: ViewElement ): ViewElement | null {\n\t// This is directly an editable so not a widget for sure.\n\tif ( target.is( 'editableElement' ) ) {\n\t\treturn null;\n\t}\n\n\t// TODO: Let's have a isWidgetSelectionHandleDomElement() helper in ckeditor5-widget utils.\n\tif ( target.hasClass( 'ck-widget__selection-handle' ) ) {\n\t\treturn target.findAncestor( isWidget );\n\t}\n\n\t// Direct hit on a widget.\n\tif ( isWidget( target ) ) {\n\t\treturn target;\n\t}\n\n\t// Find closest ancestor that is either a widget or an editable element...\n\tconst ancestor = target.findAncestor( node => isWidget( node ) || node.is( 'editableElement' ) )!;\n\n\t// ...and if closer was the widget then enable dragging it.\n\tif ( isWidget( ancestor ) ) {\n\t\treturn ancestor;\n\t}\n\n\treturn null;\n}\n\n/**\n * Recursively checks if common parent of provided elements doesn't have any other children. If that's the case,\n * it returns range including this parent. Otherwise, it returns only the range from first to last element.\n *\n * Example:\n *\n * <blockQuote>\n * <paragraph>[Test 1</paragraph>\n * <paragraph>Test 2</paragraph>\n * <paragraph>Test 3]</paragraph>\n * <blockQuote>\n *\n * Because all elements inside the `blockQuote` are selected, the range is extended to include the `blockQuote` too.\n * If only first and second paragraphs would be selected, the range would not include it.\n */\nfunction getRangeIncludingFullySelectedParents( model: Model, elements: Array<ModelElement> ): ModelRange {\n\tconst firstElement = elements[ 0 ];\n\tconst lastElement = elements[ elements.length - 1 ];\n\tconst parent = firstElement.getCommonAncestor( lastElement );\n\tconst startPosition: ModelPosition = model.createPositionBefore( firstElement );\n\tconst endPosition: ModelPosition = model.createPositionAfter( lastElement );\n\n\tif (\n\t\tparent &&\n\t\tparent.is( 'element' ) &&\n\t\t!model.schema.isLimit( parent )\n\t) {\n\t\tconst parentRange = model.createRangeOn( parent );\n\t\tconst touchesStart = startPosition.isTouching( parentRange.start );\n\t\tconst touchesEnd = endPosition.isTouching( parentRange.end );\n\n\t\tif ( touchesStart && touchesEnd ) {\n\t\t\t// Selection includes all elements in the parent.\n\t\t\treturn getRangeIncludingFullySelectedParents( model, [ parent ] );\n\t\t}\n\t}\n\n\treturn model.createRange( startPosition, endPosition );\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/pasteplaintext\n */\n\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\n\nimport type { ModelDocumentFragment, Model, ModelElement } from '@ckeditor/ckeditor5-engine';\n\nimport { ClipboardObserver } from './clipboardobserver.js';\nimport { ClipboardPipeline, type ClipboardContentInsertionEvent } from './clipboardpipeline.js';\n\n/**\n * The plugin detects the user's intention to paste plain text.\n *\n * For example, it detects the <kbd>Ctrl/Cmd</kbd> + <kbd>Shift</kbd> + <kbd>V</kbd> keystroke.\n */\nexport class PastePlainText extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'PastePlainText' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ ClipboardPipeline ]> {\n\t\treturn [ ClipboardPipeline ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst view = editor.editing.view;\n\t\tconst selection = model.document.selection;\n\n\t\tview.addObserver( ClipboardObserver );\n\n\t\teditor.plugins.get( ClipboardPipeline ).on<ClipboardContentInsertionEvent>( 'contentInsertion', ( evt, data ) => {\n\t\t\tif ( !isUnformattedInlineContent( data.content, model ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tmodel.change( writer => {\n\t\t\t\t// Formatting attributes should be preserved.\n\t\t\t\tconst textAttributes = Array.from( selection.getAttributes() )\n\t\t\t\t\t.filter( ( [ key ] ) => model.schema.getAttributeProperties( key ).isFormatting );\n\n\t\t\t\tif ( !selection.isCollapsed ) {\n\t\t\t\t\tmodel.deleteContent( selection, { doNotAutoparagraph: true } );\n\t\t\t\t}\n\n\t\t\t\t// Also preserve other attributes if they survived the content deletion (because they were not fully selected).\n\t\t\t\t// For example linkHref is not a formatting attribute but it should be preserved if pasted text was in the middle\n\t\t\t\t// of a link.\n\t\t\t\ttextAttributes.push( ...selection.getAttributes() );\n\n\t\t\t\tconst range = writer.createRangeIn( data.content );\n\n\t\t\t\tfor ( const item of range.getItems() ) {\n\t\t\t\t\tfor ( const attribute of textAttributes ) {\n\t\t\t\t\t\tif ( model.schema.checkAttribute( item, attribute[ 0 ] ) ) {\n\t\t\t\t\t\t\twriter.setAttribute( attribute[ 0 ], attribute[ 1 ], item );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n}\n\n/**\n * Returns true if specified `documentFragment` represents the unformatted inline content.\n */\nfunction isUnformattedInlineContent( documentFragment: ModelDocumentFragment, model: Model ): boolean {\n\tlet range = model.createRangeIn( documentFragment );\n\n\t// We consider three scenarios here. The document fragment may include:\n\t//\n\t// 1. Only text and inline objects. Then it could be unformatted inline content.\n\t// 2. Exactly one block element on top-level, eg. <p>Foobar</p> or <h2>Title</h2>.\n\t// In this case, check this element content, it could be treated as unformatted inline content.\n\t// 3. More block elements or block objects, then it is not unformatted inline content.\n\t//\n\t// We will check for scenario 2. specifically, and if it happens, we will unwrap it and follow with the regular algorithm.\n\t//\n\tif ( documentFragment.childCount == 1 ) {\n\t\tconst child = documentFragment.getChild( 0 )!;\n\n\t\tif ( child.is( 'element' ) && model.schema.isBlock( child ) && !model.schema.isObject( child ) && !model.schema.isLimit( child ) ) {\n\t\t\t// Scenario 2. as described above.\n\t\t\trange = model.createRangeIn( child as ModelElement );\n\t\t}\n\t}\n\n\tfor ( const child of range.getItems() ) {\n\t\tif ( !model.schema.isInline( child ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst attributeKeys = Array.from( child.getAttributeKeys() );\n\n\t\tif ( attributeKeys.find( key => model.schema.getAttributeProperties( key ).isFormatting ) ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module clipboard/clipboard\n */\n\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\n\nimport { ClipboardPipeline } from './clipboardpipeline.js';\nimport { DragDrop } from './dragdrop.js';\nimport { PastePlainText } from './pasteplaintext.js';\nimport { ClipboardMarkersUtils } from './clipboardmarkersutils.js';\n\n/**\n * The clipboard feature.\n *\n * Read more about the clipboard integration in the {@glink framework/deep-dive/clipboard clipboard deep-dive} guide.\n *\n * This is a \"glue\" plugin which loads the following plugins:\n * * {@link module:clipboard/clipboardpipeline~ClipboardPipeline}\n * * {@link module:clipboard/dragdrop~DragDrop}\n * * {@link module:clipboard/pasteplaintext~PastePlainText}\n */\nexport class Clipboard extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'Clipboard' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ ClipboardMarkersUtils, ClipboardPipeline, DragDrop, PastePlainText ]> {\n\t\treturn [ ClipboardMarkersUtils, ClipboardPipeline, DragDrop, PastePlainText ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\t\tconst t = this.editor.t;\n\n\t\t// Add the information about the keystrokes to the accessibility database.\n\t\teditor.accessibility.addKeystrokeInfos( {\n\t\t\tkeystrokes: [\n\t\t\t\t{\n\t\t\t\t\tlabel: t( 'Copy selected content' ),\n\t\t\t\t\tkeystroke: 'CTRL+C'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: t( 'Paste content' ),\n\t\t\t\t\tkeystroke: 'CTRL+V'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: t( 'Paste content as plain text' ),\n\t\t\t\t\tkeystroke: 'CTRL+SHIFT+V'\n\t\t\t\t}\n\t\t\t]\n\t\t} );\n\t}\n}\n"]}