{"version":3,"file":"./build/rich-text/index.min.js","mappings":"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","sources":["webpack://wp/webpack/bootstrap","webpack://wp/webpack/runtime/compat get default export","webpack://wp/webpack/runtime/define property getters","webpack://wp/webpack/runtime/hasOwnProperty shorthand","webpack://wp/webpack/runtime/make namespace object","webpack://wp/external window [\"wp\",\"data\"]","../../packages/rich-text/src/store/reducer.js","../../packages/rich-text/src/store/selectors.js","../../packages/rich-text/src/store/actions.js","../../packages/rich-text/src/store/index.js","../../packages/rich-text/src/is-format-equal.js","../../packages/rich-text/src/normalise-formats.js","../../packages/rich-text/src/apply-format.js","../../packages/rich-text/src/create-element.js","../../packages/rich-text/src/special-characters.js","webpack://wp/external window [\"wp\",\"escapeHtml\"]","../../packages/rich-text/src/get-active-formats.js","../../packages/rich-text/src/get-format-type.js","../../packages/rich-text/src/to-tree.js","../../packages/rich-text/src/to-html-string.js","../../packages/rich-text/src/get-text-content.js","../../packages/rich-text/src/create.js","../../packages/rich-text/src/concat.js","../../packages/rich-text/src/get-active-format.js","../../packages/rich-text/src/get-active-object.js","../../packages/rich-text/src/is-collapsed.ts","../../packages/rich-text/src/is-empty.js","../../packages/rich-text/src/join.js","../../packages/rich-text/src/register-format-type.js","../../packages/rich-text/src/remove-format.js","../../packages/rich-text/src/insert.js","../../packages/rich-text/src/remove.js","../../packages/rich-text/src/replace.js","../../packages/rich-text/src/insert-object.js","../../packages/rich-text/src/slice.js","../../packages/rich-text/src/split.js","../../packages/rich-text/src/is-range-equal.js","../../packages/rich-text/src/to-dom.js","webpack://wp/external window [\"wp\",\"a11y\"]","webpack://wp/external window [\"wp\",\"i18n\"]","../../packages/rich-text/src/toggle-format.js","../../packages/rich-text/src/unregister-format-type.js","webpack://wp/external window [\"wp\",\"element\"]","webpack://wp/external window [\"wp\",\"deprecated\"]","../../packages/rich-text/src/component/use-anchor-ref.js","webpack://wp/external window [\"wp\",\"compose\"]","../../packages/rich-text/src/component/use-anchor.js","../../packages/rich-text/src/component/use-default-style.js","../../packages/rich-text/src/component/use-boundary-style.js","../../packages/rich-text/src/component/event-listeners/copy-handler.js","webpack://wp/external window [\"wp\",\"keycodes\"]","../../packages/rich-text/src/component/event-listeners/format-boundaries.js","../../packages/rich-text/src/component/event-listeners/input-and-selection.js","../../packages/rich-text/src/component/event-listeners/index.js","../../packages/rich-text/src/component/event-listeners/select-object.js","../../packages/rich-text/src/component/event-listeners/delete.js","../../packages/rich-text/src/update-formats.js","../../packages/rich-text/src/component/event-listeners/selection-change-compat.js","../../packages/rich-text/src/component/event-listeners/prevent-focus-capture.js","../../packages/rich-text/src/component/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"data\"];","/**\n * WordPress dependencies\n */\nimport { combineReducers } from '@wordpress/data';\n\n/**\n * Reducer managing the format types\n *\n * @param {Object} state Current state.\n * @param {Object} action Dispatched action.\n *\n * @return {Object} Updated state.\n */\nexport function formatTypes( state = {}, action ) {\n\tswitch ( action.type ) {\n\t\tcase 'ADD_FORMAT_TYPES':\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\t// Key format types by their name.\n\t\t\t\t...action.formatTypes.reduce(\n\t\t\t\t\t( newFormatTypes, type ) => ( {\n\t\t\t\t\t\t...newFormatTypes,\n\t\t\t\t\t\t[ type.name ]: type,\n\t\t\t\t\t} ),\n\t\t\t\t\t{}\n\t\t\t\t),\n\t\t\t};\n\t\tcase 'REMOVE_FORMAT_TYPES':\n\t\t\treturn Object.fromEntries(\n\t\t\t\tObject.entries( state ).filter(\n\t\t\t\t\t( [ key ] ) => ! action.names.includes( key )\n\t\t\t\t)\n\t\t\t);\n\t}\n\n\treturn state;\n}\n\nexport default combineReducers( { formatTypes } );\n","/**\n * WordPress dependencies\n */\nimport { createSelector } from '@wordpress/data';\n\n/**\n * Returns all the available format types.\n *\n * @param {Object} state Data state.\n *\n * @example\n * ```js\n * import { __, sprintf } from '@wordpress/i18n';\n * import { store as richTextStore } from '@wordpress/rich-text';\n * import { useSelect } from '@wordpress/data';\n *\n * const ExampleComponent = () => {\n * const { getFormatTypes } = useSelect(\n * ( select ) => select( richTextStore ),\n * []\n * );\n *\n * const availableFormats = getFormatTypes();\n *\n * return availableFormats ? (\n *
{ sprintf( __( 'Format name: %s' ), format.name ) }
;\n * }\n * ```\n *\n * @return {?Object} Format type.\n */\nexport function getFormatTypeForBareElement( state, bareElementTagName ) {\n\tconst formatTypes = getFormatTypes( state );\n\treturn (\n\t\tformatTypes.find( ( { className, tagName } ) => {\n\t\t\treturn className === null && bareElementTagName === tagName;\n\t\t} ) ||\n\t\tformatTypes.find( ( { className, tagName } ) => {\n\t\t\treturn className === null && '*' === tagName;\n\t\t} )\n\t);\n}\n\n/**\n * Gets the format type, if any, that can handle an element, given its classes.\n *\n * @param {Object} state Data state.\n * @param {string} elementClassName The classes of the element to find a format\n * type for.\n *\n * @example\n * ```js\n * import { __, sprintf } from '@wordpress/i18n';\n * import { store as richTextStore } from '@wordpress/rich-text';\n * import { useSelect } from '@wordpress/data';\n *\n * const ExampleComponent = () => {\n * const { getFormatTypeForClassName } = useSelect(\n * ( select ) => select( richTextStore ),\n * []\n * );\n *\n * const format = getFormatTypeForClassName( 'has-inline-color' );\n *\n * return format &&{ sprintf( __( 'Format name: %s' ), format.name ) }
;\n * };\n * ```\n *\n * @return {?Object} Format type.\n */\nexport function getFormatTypeForClassName( state, elementClassName ) {\n\treturn getFormatTypes( state ).find( ( { className } ) => {\n\t\tif ( className === null ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn ` ${ elementClassName } `.indexOf( ` ${ className } ` ) >= 0;\n\t} );\n}\n","/**\n * Returns an action object used in signalling that format types have been\n * added.\n * Ignored from documentation as registerFormatType should be used instead from @wordpress/rich-text\n *\n * @ignore\n *\n * @param {Array|Object} formatTypes Format types received.\n *\n * @return {Object} Action object.\n */\nexport function addFormatTypes( formatTypes ) {\n\treturn {\n\t\ttype: 'ADD_FORMAT_TYPES',\n\t\tformatTypes: Array.isArray( formatTypes )\n\t\t\t? formatTypes\n\t\t\t: [ formatTypes ],\n\t};\n}\n\n/**\n * Returns an action object used to remove a registered format type.\n *\n * Ignored from documentation as unregisterFormatType should be used instead from @wordpress/rich-text\n *\n * @ignore\n *\n * @param {string|Array} names Format name.\n *\n * @return {Object} Action object.\n */\nexport function removeFormatTypes( names ) {\n\treturn {\n\t\ttype: 'REMOVE_FORMAT_TYPES',\n\t\tnames: Array.isArray( names ) ? names : [ names ],\n\t};\n}\n","/**\n * WordPress dependencies\n */\nimport { createReduxStore, register } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport reducer from './reducer';\nimport * as selectors from './selectors';\nimport * as actions from './actions';\n\nconst STORE_NAME = 'core/rich-text';\n\n/**\n * Store definition for the rich-text namespace.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore\n *\n * @type {Object}\n */\nexport const store = createReduxStore( STORE_NAME, {\n\treducer,\n\tselectors,\n\tactions,\n} );\n\nregister( store );\n","/** @typedef {import('./types').RichTextFormat} RichTextFormat */\n\n/**\n * Optimised equality check for format objects.\n *\n * @param {?RichTextFormat} format1 Format to compare.\n * @param {?RichTextFormat} format2 Format to compare.\n *\n * @return {boolean} True if formats are equal, false if not.\n */\nexport function isFormatEqual( format1, format2 ) {\n\t// Both not defined.\n\tif ( format1 === format2 ) {\n\t\treturn true;\n\t}\n\n\t// Either not defined.\n\tif ( ! format1 || ! format2 ) {\n\t\treturn false;\n\t}\n\n\tif ( format1.type !== format2.type ) {\n\t\treturn false;\n\t}\n\n\tconst attributes1 = format1.attributes;\n\tconst attributes2 = format2.attributes;\n\n\t// Both not defined.\n\tif ( attributes1 === attributes2 ) {\n\t\treturn true;\n\t}\n\n\t// Either not defined.\n\tif ( ! attributes1 || ! attributes2 ) {\n\t\treturn false;\n\t}\n\n\tconst keys1 = Object.keys( attributes1 );\n\tconst keys2 = Object.keys( attributes2 );\n\n\tif ( keys1.length !== keys2.length ) {\n\t\treturn false;\n\t}\n\n\tconst length = keys1.length;\n\n\t// Optimise for speed.\n\tfor ( let i = 0; i < length; i++ ) {\n\t\tconst name = keys1[ i ];\n\n\t\tif ( attributes1[ name ] !== attributes2[ name ] ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n","/**\n * Internal dependencies\n */\n\nimport { isFormatEqual } from './is-format-equal';\n\n/** @typedef {import('./types').RichTextValue} RichTextValue */\n\n/**\n * Normalises formats: ensures subsequent adjacent equal formats have the same\n * reference.\n *\n * @param {RichTextValue} value Value to normalise formats of.\n *\n * @return {RichTextValue} New value with normalised formats.\n */\nexport function normaliseFormats( value ) {\n\tconst newFormats = value.formats.slice();\n\n\tnewFormats.forEach( ( formatsAtIndex, index ) => {\n\t\tconst formatsAtPreviousIndex = newFormats[ index - 1 ];\n\n\t\tif ( formatsAtPreviousIndex ) {\n\t\t\tconst newFormatsAtIndex = formatsAtIndex.slice();\n\n\t\t\tnewFormatsAtIndex.forEach( ( format, formatIndex ) => {\n\t\t\t\tconst previousFormat = formatsAtPreviousIndex[ formatIndex ];\n\n\t\t\t\tif ( isFormatEqual( format, previousFormat ) ) {\n\t\t\t\t\tnewFormatsAtIndex[ formatIndex ] = previousFormat;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tnewFormats[ index ] = newFormatsAtIndex;\n\t\t}\n\t} );\n\n\treturn {\n\t\t...value,\n\t\tformats: newFormats,\n\t};\n}\n","/**\n * Internal dependencies\n */\n\nimport { normaliseFormats } from './normalise-formats';\n\n/** @typedef {import('./types').RichTextValue} RichTextValue */\n/** @typedef {import('./types').RichTextFormat} RichTextFormat */\n\nfunction replace( array, index, value ) {\n\tarray = array.slice();\n\tarray[ index ] = value;\n\treturn array;\n}\n\n/**\n * Apply a format object to a Rich Text value from the given `startIndex` to the\n * given `endIndex`. Indices are retrieved from the selection if none are\n * provided.\n *\n * @param {RichTextValue} value Value to modify.\n * @param {RichTextFormat} format Format to apply.\n * @param {number} [startIndex] Start index.\n * @param {number} [endIndex] End index.\n *\n * @return {RichTextValue} A new value with the format applied.\n */\nexport function applyFormat(\n\tvalue,\n\tformat,\n\tstartIndex = value.start,\n\tendIndex = value.end\n) {\n\tconst { formats, activeFormats } = value;\n\tconst newFormats = formats.slice();\n\n\t// The selection is collapsed.\n\tif ( startIndex === endIndex ) {\n\t\tconst startFormat = newFormats[ startIndex ]?.find(\n\t\t\t( { type } ) => type === format.type\n\t\t);\n\n\t\t// If the caret is at a format of the same type, expand start and end to\n\t\t// the edges of the format. This is useful to apply new attributes.\n\t\tif ( startFormat ) {\n\t\t\tconst index = newFormats[ startIndex ].indexOf( startFormat );\n\n\t\t\twhile (\n\t\t\t\tnewFormats[ startIndex ] &&\n\t\t\t\tnewFormats[ startIndex ][ index ] === startFormat\n\t\t\t) {\n\t\t\t\tnewFormats[ startIndex ] = replace(\n\t\t\t\t\tnewFormats[ startIndex ],\n\t\t\t\t\tindex,\n\t\t\t\t\tformat\n\t\t\t\t);\n\t\t\t\tstartIndex--;\n\t\t\t}\n\n\t\t\tendIndex++;\n\n\t\t\twhile (\n\t\t\t\tnewFormats[ endIndex ] &&\n\t\t\t\tnewFormats[ endIndex ][ index ] === startFormat\n\t\t\t) {\n\t\t\t\tnewFormats[ endIndex ] = replace(\n\t\t\t\t\tnewFormats[ endIndex ],\n\t\t\t\t\tindex,\n\t\t\t\t\tformat\n\t\t\t\t);\n\t\t\t\tendIndex++;\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// Determine the highest position the new format can be inserted at.\n\t\tlet position = +Infinity;\n\n\t\tfor ( let index = startIndex; index < endIndex; index++ ) {\n\t\t\tif ( newFormats[ index ] ) {\n\t\t\t\tnewFormats[ index ] = newFormats[ index ].filter(\n\t\t\t\t\t( { type } ) => type !== format.type\n\t\t\t\t);\n\n\t\t\t\tconst length = newFormats[ index ].length;\n\n\t\t\t\tif ( length < position ) {\n\t\t\t\t\tposition = length;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnewFormats[ index ] = [];\n\t\t\t\tposition = 0;\n\t\t\t}\n\t\t}\n\n\t\tfor ( let index = startIndex; index < endIndex; index++ ) {\n\t\t\tnewFormats[ index ].splice( position, 0, format );\n\t\t}\n\t}\n\n\treturn normaliseFormats( {\n\t\t...value,\n\t\tformats: newFormats,\n\t\t// Always revise active formats. This serves as a placeholder for new\n\t\t// inputs with the format so new input appears with the format applied,\n\t\t// and ensures a format of the same type uses the latest values.\n\t\tactiveFormats: [\n\t\t\t...( activeFormats?.filter(\n\t\t\t\t( { type } ) => type !== format.type\n\t\t\t) || [] ),\n\t\t\tformat,\n\t\t],\n\t} );\n}\n","/**\n * Parse the given HTML into a body element.\n *\n * Note: The current implementation will return a shared reference, reset on\n * each call to `createElement`. Therefore, you should not hold a reference to\n * the value to operate upon asynchronously, as it may have unexpected results.\n *\n * @param {HTMLDocument} document The HTML document to use to parse.\n * @param {string} html The HTML to parse.\n *\n * @return {HTMLBodyElement} Body element with parsed HTML.\n */\nexport function createElement( { implementation }, html ) {\n\t// Because `createHTMLDocument` is an expensive operation, and with this\n\t// function being internal to `rich-text` (full control in avoiding a risk\n\t// of asynchronous operations on the shared reference), a single document\n\t// is reused and reset for each call to the function.\n\tif ( ! createElement.body ) {\n\t\tcreateElement.body = implementation.createHTMLDocument( '' ).body;\n\t}\n\n\tcreateElement.body.innerHTML = html;\n\n\treturn createElement.body;\n}\n","/**\n * Object replacement character, used as a placeholder for objects.\n */\nexport const OBJECT_REPLACEMENT_CHARACTER = '\\ufffc';\n\n/**\n * Zero width non-breaking space, used as padding in the editable DOM tree when\n * it is empty otherwise.\n */\nexport const ZWNBSP = '\\ufeff';\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"wp\"][\"escapeHtml\"];","/** @typedef {import('./types').RichTextValue} RichTextValue */\n/** @typedef {import('./types').RichTextFormatList} RichTextFormatList */\n\n/**\n * Internal dependencies\n */\nimport { isFormatEqual } from './is-format-equal';\n\n/**\n * Gets the all format objects at the start of the selection.\n *\n * @param {RichTextValue} value Value to inspect.\n * @param {Array} EMPTY_ACTIVE_FORMATS Array to return if there are no\n * active formats.\n *\n * @return {RichTextFormatList} Active format objects.\n */\nexport function getActiveFormats( value, EMPTY_ACTIVE_FORMATS = [] ) {\n\tconst { formats, start, end, activeFormats } = value;\n\tif ( start === undefined ) {\n\t\treturn EMPTY_ACTIVE_FORMATS;\n\t}\n\n\tif ( start === end ) {\n\t\t// For a collapsed caret, it is possible to override the active formats.\n\t\tif ( activeFormats ) {\n\t\t\treturn activeFormats;\n\t\t}\n\n\t\tconst formatsBefore = formats[ start - 1 ] || EMPTY_ACTIVE_FORMATS;\n\t\tconst formatsAfter = formats[ start ] || EMPTY_ACTIVE_FORMATS;\n\n\t\t// By default, select the lowest amount of formats possible (which means\n\t\t// the caret is positioned outside the format boundary). The user can\n\t\t// then use arrow keys to define `activeFormats`.\n\t\tif ( formatsBefore.length < formatsAfter.length ) {\n\t\t\treturn formatsBefore;\n\t\t}\n\n\t\treturn formatsAfter;\n\t}\n\n\t// If there's no formats at the start index, there are not active formats.\n\tif ( ! formats[ start ] ) {\n\t\treturn EMPTY_ACTIVE_FORMATS;\n\t}\n\n\tconst selectedFormats = formats.slice( start, end );\n\n\t// Clone the formats so we're not mutating the live value.\n\tconst _activeFormats = [ ...selectedFormats[ 0 ] ];\n\tlet i = selectedFormats.length;\n\n\t// For performance reasons, start from the end where it's much quicker to\n\t// realise that there are no active formats.\n\twhile ( i-- ) {\n\t\tconst formatsAtIndex = selectedFormats[ i ];\n\n\t\t// If we run into any index without formats, we're sure that there's no\n\t\t// active formats.\n\t\tif ( ! formatsAtIndex ) {\n\t\t\treturn EMPTY_ACTIVE_FORMATS;\n\t\t}\n\n\t\tlet ii = _activeFormats.length;\n\n\t\t// Loop over the active formats and remove any that are not present at\n\t\t// the current index.\n\t\twhile ( ii-- ) {\n\t\t\tconst format = _activeFormats[ ii ];\n\n\t\t\tif (\n\t\t\t\t! formatsAtIndex.find( ( _format ) =>\n\t\t\t\t\tisFormatEqual( format, _format )\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t_activeFormats.splice( ii, 1 );\n\t\t\t}\n\t\t}\n\n\t\t// If there are no active formats, we can stop.\n\t\tif ( _activeFormats.length === 0 ) {\n\t\t\treturn EMPTY_ACTIVE_FORMATS;\n\t\t}\n\t}\n\n\treturn _activeFormats || EMPTY_ACTIVE_FORMATS;\n}\n","/**\n * WordPress dependencies\n */\nimport { select } from '@wordpress/data';\n/**\n * Internal dependencies\n */\nimport { store as richTextStore } from './store';\n\n/** @typedef {import('./register-format-type').RichTextFormatType} RichTextFormatType */\n\n/**\n * Returns a registered format type.\n *\n * @param {string} name Format name.\n *\n * @return {RichTextFormatType|undefined} Format type.\n */\nexport function getFormatType( name ) {\n\treturn select( richTextStore ).getFormatType( name );\n}\n","/**\n * Internal dependencies\n */\n\nimport { getActiveFormats } from './get-active-formats';\nimport { getFormatType } from './get-format-type';\nimport { OBJECT_REPLACEMENT_CHARACTER, ZWNBSP } from './special-characters';\n\nfunction restoreOnAttributes( attributes, isEditableTree ) {\n\tif ( isEditableTree ) {\n\t\treturn attributes;\n\t}\n\n\tconst newAttributes = {};\n\n\tfor ( const key in attributes ) {\n\t\tlet newKey = key;\n\t\tif ( key.startsWith( 'data-disable-rich-text-' ) ) {\n\t\t\tnewKey = key.slice( 'data-disable-rich-text-'.length );\n\t\t}\n\n\t\tnewAttributes[ newKey ] = attributes[ key ];\n\t}\n\n\treturn newAttributes;\n}\n\n/**\n * Converts a format object to information that can be used to create an element\n * from (type, attributes and object).\n *\n * @param {Object} $1 Named parameters.\n * @param {string} $1.type The format type.\n * @param {string} $1.tagName The tag name.\n * @param {Object} $1.attributes The format attributes.\n * @param {Object} $1.unregisteredAttributes The unregistered format\n * attributes.\n * @param {boolean} $1.object Whether or not it is an object\n * format.\n * @param {boolean} $1.boundaryClass Whether or not to apply a boundary\n * class.\n * @param {boolean} $1.isEditableTree\n *\n * @return {Object} Information to be used for element creation.\n */\nfunction fromFormat( {\n\ttype,\n\ttagName,\n\tattributes,\n\tunregisteredAttributes,\n\tobject,\n\tboundaryClass,\n\tisEditableTree,\n} ) {\n\tconst formatType = getFormatType( type );\n\n\tlet elementAttributes = {};\n\n\tif ( boundaryClass && isEditableTree ) {\n\t\telementAttributes[ 'data-rich-text-format-boundary' ] = 'true';\n\t}\n\n\tif ( ! formatType ) {\n\t\tif ( attributes ) {\n\t\t\telementAttributes = { ...attributes, ...elementAttributes };\n\t\t}\n\n\t\treturn {\n\t\t\ttype,\n\t\t\tattributes: restoreOnAttributes(\n\t\t\t\telementAttributes,\n\t\t\t\tisEditableTree\n\t\t\t),\n\t\t\tobject,\n\t\t};\n\t}\n\n\telementAttributes = { ...unregisteredAttributes, ...elementAttributes };\n\n\tfor ( const name in attributes ) {\n\t\tconst key = formatType.attributes\n\t\t\t? formatType.attributes[ name ]\n\t\t\t: false;\n\n\t\tif ( key ) {\n\t\t\telementAttributes[ key ] = attributes[ name ];\n\t\t} else {\n\t\t\telementAttributes[ name ] = attributes[ name ];\n\t\t}\n\t}\n\n\tif ( formatType.className ) {\n\t\tif ( elementAttributes.class ) {\n\t\t\telementAttributes.class = `${ formatType.className } ${ elementAttributes.class }`;\n\t\t} else {\n\t\t\telementAttributes.class = formatType.className;\n\t\t}\n\t}\n\n\t// When a format is declared as non editable, make it non editable in the\n\t// editor.\n\tif ( isEditableTree && formatType.contentEditable === false ) {\n\t\telementAttributes.contenteditable = 'false';\n\t}\n\n\treturn {\n\t\ttype: tagName || formatType.tagName,\n\t\tobject: formatType.object,\n\t\tattributes: restoreOnAttributes( elementAttributes, isEditableTree ),\n\t};\n}\n\n/**\n * Checks if both arrays of formats up until a certain index are equal.\n *\n * @param {Array} a Array of formats to compare.\n * @param {Array} b Array of formats to compare.\n * @param {number} index Index to check until.\n */\nfunction isEqualUntil( a, b, index ) {\n\tdo {\n\t\tif ( a[ index ] !== b[ index ] ) {\n\t\t\treturn false;\n\t\t}\n\t} while ( index-- );\n\n\treturn true;\n}\n\nexport function toTree( {\n\tvalue,\n\tpreserveWhiteSpace,\n\tcreateEmpty,\n\tappend,\n\tgetLastChild,\n\tgetParent,\n\tisText,\n\tgetText,\n\tremove,\n\tappendText,\n\tonStartIndex,\n\tonEndIndex,\n\tisEditableTree,\n\tplaceholder,\n} ) {\n\tconst { formats, replacements, text, start, end } = value;\n\tconst formatsLength = formats.length + 1;\n\tconst tree = createEmpty();\n\tconst activeFormats = getActiveFormats( value );\n\tconst deepestActiveFormat = activeFormats[ activeFormats.length - 1 ];\n\n\tlet lastCharacterFormats;\n\tlet lastCharacter;\n\n\tappend( tree, '' );\n\n\tfor ( let i = 0; i < formatsLength; i++ ) {\n\t\tconst character = text.charAt( i );\n\t\tconst shouldInsertPadding =\n\t\t\tisEditableTree &&\n\t\t\t// Pad the line if the line is empty.\n\t\t\t( ! lastCharacter ||\n\t\t\t\t// Pad the line if the previous character is a line break, otherwise\n\t\t\t\t// the line break won't be visible.\n\t\t\t\tlastCharacter === '\\n' );\n\n\t\tconst characterFormats = formats[ i ];\n\t\tlet pointer = getLastChild( tree );\n\n\t\tif ( characterFormats ) {\n\t\t\tcharacterFormats.forEach( ( format, formatIndex ) => {\n\t\t\t\tif (\n\t\t\t\t\tpointer &&\n\t\t\t\t\tlastCharacterFormats &&\n\t\t\t\t\t// Reuse the last element if all formats remain the same.\n\t\t\t\t\tisEqualUntil(\n\t\t\t\t\t\tcharacterFormats,\n\t\t\t\t\t\tlastCharacterFormats,\n\t\t\t\t\t\tformatIndex\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tpointer = getLastChild( pointer );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst { type, tagName, attributes, unregisteredAttributes } =\n\t\t\t\t\tformat;\n\n\t\t\t\tconst boundaryClass =\n\t\t\t\t\tisEditableTree && format === deepestActiveFormat;\n\n\t\t\t\tconst parent = getParent( pointer );\n\t\t\t\tconst newNode = append(\n\t\t\t\t\tparent,\n\t\t\t\t\tfromFormat( {\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\ttagName,\n\t\t\t\t\t\tattributes,\n\t\t\t\t\t\tunregisteredAttributes,\n\t\t\t\t\t\tboundaryClass,\n\t\t\t\t\t\tisEditableTree,\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tif ( isText( pointer ) && getText( pointer ).length === 0 ) {\n\t\t\t\t\tremove( pointer );\n\t\t\t\t}\n\n\t\t\t\tpointer = append( newNode, '' );\n\t\t\t} );\n\t\t}\n\n\t\t// If there is selection at 0, handle it before characters are inserted.\n\t\tif ( i === 0 ) {\n\t\t\tif ( onStartIndex && start === 0 ) {\n\t\t\t\tonStartIndex( tree, pointer );\n\t\t\t}\n\n\t\t\tif ( onEndIndex && end === 0 ) {\n\t\t\t\tonEndIndex( tree, pointer );\n\t\t\t}\n\t\t}\n\n\t\tif ( character === OBJECT_REPLACEMENT_CHARACTER ) {\n\t\t\tconst replacement = replacements[ i ];\n\t\t\tif ( ! replacement ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst { type, attributes, innerHTML } = replacement;\n\t\t\tconst formatType = getFormatType( type );\n\n\t\t\tif ( isEditableTree && type === '#comment' ) {\n\t\t\t\tpointer = append( getParent( pointer ), {\n\t\t\t\t\ttype: 'span',\n\t\t\t\t\tattributes: {\n\t\t\t\t\t\tcontenteditable: 'false',\n\t\t\t\t\t\t'data-rich-text-comment':\n\t\t\t\t\t\t\tattributes[ 'data-rich-text-comment' ],\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t\tappend(\n\t\t\t\t\tappend( pointer, { type: 'span' } ),\n\t\t\t\t\tattributes[ 'data-rich-text-comment' ].trim()\n\t\t\t\t);\n\t\t\t} else if ( ! isEditableTree && type === 'script' ) {\n\t\t\t\tpointer = append(\n\t\t\t\t\tgetParent( pointer ),\n\t\t\t\t\tfromFormat( {\n\t\t\t\t\t\ttype: 'script',\n\t\t\t\t\t\tisEditableTree,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t\tappend( pointer, {\n\t\t\t\t\thtml: decodeURIComponent(\n\t\t\t\t\t\tattributes[ 'data-rich-text-script' ]\n\t\t\t\t\t),\n\t\t\t\t} );\n\t\t\t} else if ( formatType?.contentEditable === false ) {\n\t\t\t\t// For non editable formats, render the stored inner HTML.\n\t\t\t\tpointer = append(\n\t\t\t\t\tgetParent( pointer ),\n\t\t\t\t\tfromFormat( {\n\t\t\t\t\t\t...replacement,\n\t\t\t\t\t\tisEditableTree,\n\t\t\t\t\t\tboundaryClass: start === i && end === i + 1,\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tif ( innerHTML ) {\n\t\t\t\t\tappend( pointer, {\n\t\t\t\t\t\thtml: innerHTML,\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpointer = append(\n\t\t\t\t\tgetParent( pointer ),\n\t\t\t\t\tfromFormat( {\n\t\t\t\t\t\t...replacement,\n\t\t\t\t\t\tobject: true,\n\t\t\t\t\t\tisEditableTree,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t}\n\t\t\t// Ensure pointer is text node.\n\t\t\tpointer = append( getParent( pointer ), '' );\n\t\t} else if ( ! preserveWhiteSpace && character === '\\n' ) {\n\t\t\tpointer = append( getParent( pointer ), {\n\t\t\t\ttype: 'br',\n\t\t\t\tattributes: isEditableTree\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t'data-rich-text-line-break': 'true',\n\t\t\t\t\t }\n\t\t\t\t\t: undefined,\n\t\t\t\tobject: true,\n\t\t\t} );\n\t\t\t// Ensure pointer is text node.\n\t\t\tpointer = append( getParent( pointer ), '' );\n\t\t} else if ( ! isText( pointer ) ) {\n\t\t\tpointer = append( getParent( pointer ), character );\n\t\t} else {\n\t\t\tappendText( pointer, character );\n\t\t}\n\n\t\tif ( onStartIndex && start === i + 1 ) {\n\t\t\tonStartIndex( tree, pointer );\n\t\t}\n\n\t\tif ( onEndIndex && end === i + 1 ) {\n\t\t\tonEndIndex( tree, pointer );\n\t\t}\n\n\t\tif ( shouldInsertPadding && i === text.length ) {\n\t\t\tappend( getParent( pointer ), ZWNBSP );\n\n\t\t\t// We CANNOT use CSS to add a placeholder with pseudo elements on\n\t\t\t// the main block wrappers because that could clash with theme CSS.\n\t\t\tif ( placeholder && text.length === 0 ) {\n\t\t\t\tappend( getParent( pointer ), {\n\t\t\t\t\ttype: 'span',\n\t\t\t\t\tattributes: {\n\t\t\t\t\t\t'data-rich-text-placeholder': placeholder,\n\t\t\t\t\t\t// Necessary to prevent the placeholder from catching\n\t\t\t\t\t\t// selection and being editable.\n\t\t\t\t\t\tstyle: 'pointer-events:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;',\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\tlastCharacterFormats = characterFormats;\n\t\tlastCharacter = character;\n\t}\n\n\treturn tree;\n}\n","/**\n * WordPress dependencies\n */\n\nimport {\n\tescapeEditableHTML,\n\tescapeAttribute,\n\tisValidAttributeName,\n} from '@wordpress/escape-html';\n\n/**\n * Internal dependencies\n */\n\nimport { toTree } from './to-tree';\n\n/** @typedef {import('./types').RichTextValue} RichTextValue */\n\n/**\n * Create an HTML string from a Rich Text value.\n *\n * @param {Object} $1 Named arguments.\n * @param {RichTextValue} $1.value Rich text value.\n * @param {boolean} [$1.preserveWhiteSpace] Preserves newlines if true.\n *\n * @return {string} HTML string.\n */\nexport function toHTMLString( { value, preserveWhiteSpace } ) {\n\tconst tree = toTree( {\n\t\tvalue,\n\t\tpreserveWhiteSpace,\n\t\tcreateEmpty,\n\t\tappend,\n\t\tgetLastChild,\n\t\tgetParent,\n\t\tisText,\n\t\tgetText,\n\t\tremove,\n\t\tappendText,\n\t} );\n\n\treturn createChildrenHTML( tree.children );\n}\n\nfunction createEmpty() {\n\treturn {};\n}\n\nfunction getLastChild( { children } ) {\n\treturn children && children[ children.length - 1 ];\n}\n\nfunction append( parent, object ) {\n\tif ( typeof object === 'string' ) {\n\t\tobject = { text: object };\n\t}\n\n\tobject.parent = parent;\n\tparent.children = parent.children || [];\n\tparent.children.push( object );\n\treturn object;\n}\n\nfunction appendText( object, text ) {\n\tobject.text += text;\n}\n\nfunction getParent( { parent } ) {\n\treturn parent;\n}\n\nfunction isText( { text } ) {\n\treturn typeof text === 'string';\n}\n\nfunction getText( { text } ) {\n\treturn text;\n}\n\nfunction remove( object ) {\n\tconst index = object.parent.children.indexOf( object );\n\n\tif ( index !== -1 ) {\n\t\tobject.parent.children.splice( index, 1 );\n\t}\n\n\treturn object;\n}\n\nfunction createElementHTML( { type, attributes, object, children } ) {\n\tif ( type === '#comment' ) {\n\t\t// We can't restore the original comment delimiters, because once parsed\n\t\t// into DOM nodes, we don't have the information. But in the future we\n\t\t// could allow comment handlers to specify custom delimiters, for\n\t\t// example `{comment-content}>` for Bits, where `comment-content`\n\t\t// would be `/{bit-name}` or `__{translatable-string}` (TBD).\n\t\treturn ``;\n\t}\n\n\tlet attributeString = '';\n\n\tfor ( const key in attributes ) {\n\t\tif ( ! isValidAttributeName( key ) ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tattributeString += ` ${ key }=\"${ escapeAttribute(\n\t\t\tattributes[ key ]\n\t\t) }\"`;\n\t}\n\n\tif ( object ) {\n\t\treturn `<${ type }${ attributeString }>`;\n\t}\n\n\treturn `<${ type }${ attributeString }>${ createChildrenHTML(\n\t\tchildren\n\t) }${ type }>`;\n}\n\nfunction createChildrenHTML( children = [] ) {\n\treturn children\n\t\t.map( ( child ) => {\n\t\t\tif ( child.html !== undefined ) {\n\t\t\t\treturn child.html;\n\t\t\t}\n\n\t\t\treturn child.text === undefined\n\t\t\t\t? createElementHTML( child )\n\t\t\t\t: escapeEditableHTML( child.text );\n\t\t} )\n\t\t.join( '' );\n}\n","/**\n * Internal dependencies\n */\nimport { OBJECT_REPLACEMENT_CHARACTER } from './special-characters';\n\n/** @typedef {import('./types').RichTextValue} RichTextValue */\n\n/**\n * Get the textual content of a Rich Text value. This is similar to\n * `Element.textContent`.\n *\n * @param {RichTextValue} value Value to use.\n *\n * @return {string} The text content.\n */\nexport function getTextContent( { text } ) {\n\treturn text.replace( OBJECT_REPLACEMENT_CHARACTER, '' );\n}\n","/**\n * WordPress dependencies\n */\nimport { select } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as richTextStore } from './store';\nimport { createElement } from './create-element';\nimport { mergePair } from './concat';\nimport { OBJECT_REPLACEMENT_CHARACTER, ZWNBSP } from './special-characters';\nimport { toHTMLString } from './to-html-string';\nimport { getTextContent } from './get-text-content';\n\n/** @typedef {import('./types').RichTextValue} RichTextValue */\n\nfunction createEmptyValue() {\n\treturn {\n\t\tformats: [],\n\t\treplacements: [],\n\t\ttext: '',\n\t};\n}\n\nfunction toFormat( { tagName, attributes } ) {\n\tlet formatType;\n\n\tif ( attributes && attributes.class ) {\n\t\tformatType = select( richTextStore ).getFormatTypeForClassName(\n\t\t\tattributes.class\n\t\t);\n\n\t\tif ( formatType ) {\n\t\t\t// Preserve any additional classes.\n\t\t\tattributes.class = ` ${ attributes.class } `\n\t\t\t\t.replace( ` ${ formatType.className } `, ' ' )\n\t\t\t\t.trim();\n\n\t\t\tif ( ! attributes.class ) {\n\t\t\t\tdelete attributes.class;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( ! formatType ) {\n\t\tformatType =\n\t\t\tselect( richTextStore ).getFormatTypeForBareElement( tagName );\n\t}\n\n\tif ( ! formatType ) {\n\t\treturn attributes ? { type: tagName, attributes } : { type: tagName };\n\t}\n\n\tif (\n\t\tformatType.__experimentalCreatePrepareEditableTree &&\n\t\t! formatType.__experimentalCreateOnChangeEditableValue\n\t) {\n\t\treturn null;\n\t}\n\n\tif ( ! attributes ) {\n\t\treturn { formatType, type: formatType.name, tagName };\n\t}\n\n\tconst registeredAttributes = {};\n\tconst unregisteredAttributes = {};\n\tconst _attributes = { ...attributes };\n\n\tfor ( const key in formatType.attributes ) {\n\t\tconst name = formatType.attributes[ key ];\n\n\t\tregisteredAttributes[ key ] = _attributes[ name ];\n\n\t\t// delete the attribute and what's left is considered\n\t\t// to be unregistered.\n\t\tdelete _attributes[ name ];\n\n\t\tif ( typeof registeredAttributes[ key ] === 'undefined' ) {\n\t\t\tdelete registeredAttributes[ key ];\n\t\t}\n\t}\n\n\tfor ( const name in _attributes ) {\n\t\tunregisteredAttributes[ name ] = attributes[ name ];\n\t}\n\n\tif ( formatType.contentEditable === false ) {\n\t\tdelete unregisteredAttributes.contenteditable;\n\t}\n\n\treturn {\n\t\tformatType,\n\t\ttype: formatType.name,\n\t\ttagName,\n\t\tattributes: registeredAttributes,\n\t\tunregisteredAttributes,\n\t};\n}\n\n/**\n * The RichTextData class is used to instantiate a wrapper around rich text\n * values, with methods that can be used to transform or manipulate the data.\n *\n * - Create an empty instance: `new RichTextData()`.\n * - Create one from an HTML string: `RichTextData.fromHTMLString(\n * 'hello' )`.\n * - Create one from a wrapper HTMLElement: `RichTextData.fromHTMLElement(\n * document.querySelector( 'p' ) )`.\n * - Create one from plain text: `RichTextData.fromPlainText( '1\\n2' )`.\n * - Create one from a rich text value: `new RichTextData( { text: '...',\n * formats: [ ... ] } )`.\n *\n * @todo Add methods to manipulate the data, such as applyFormat, slice etc.\n */\nexport class RichTextData {\n\t#value;\n\n\tstatic empty() {\n\t\treturn new RichTextData();\n\t}\n\tstatic fromPlainText( text ) {\n\t\treturn new RichTextData( create( { text } ) );\n\t}\n\tstatic fromHTMLString( html ) {\n\t\treturn new RichTextData( create( { html } ) );\n\t}\n\t/**\n\t * Create a RichTextData instance from an HTML element.\n\t *\n\t * @param {HTMLElement} htmlElement The HTML element to create the instance from.\n\t * @param {{preserveWhiteSpace?: boolean}} options Options.\n\t * @return {RichTextData} The RichTextData instance.\n\t */\n\tstatic fromHTMLElement( htmlElement, options = {} ) {\n\t\tconst { preserveWhiteSpace = false } = options;\n\t\tconst element = preserveWhiteSpace\n\t\t\t? htmlElement\n\t\t\t: collapseWhiteSpace( htmlElement );\n\t\tconst richTextData = new RichTextData( create( { element } ) );\n\t\tObject.defineProperty( richTextData, 'originalHTML', {\n\t\t\tvalue: htmlElement.innerHTML,\n\t\t} );\n\t\treturn richTextData;\n\t}\n\tconstructor( init = createEmptyValue() ) {\n\t\tthis.#value = init;\n\t}\n\ttoPlainText() {\n\t\treturn getTextContent( this.#value );\n\t}\n\t// We could expose `toHTMLElement` at some point as well, but we'd only use\n\t// it internally.\n\t/**\n\t * Convert the rich text value to an HTML string.\n\t *\n\t * @param {{preserveWhiteSpace?: boolean}} options Options.\n\t * @return {string} The HTML string.\n\t */\n\ttoHTMLString( { preserveWhiteSpace } = {} ) {\n\t\treturn (\n\t\t\tthis.originalHTML ||\n\t\t\ttoHTMLString( { value: this.#value, preserveWhiteSpace } )\n\t\t);\n\t}\n\tvalueOf() {\n\t\treturn this.toHTMLString();\n\t}\n\ttoString() {\n\t\treturn this.toHTMLString();\n\t}\n\ttoJSON() {\n\t\treturn this.toHTMLString();\n\t}\n\tget length() {\n\t\treturn this.text.length;\n\t}\n\tget formats() {\n\t\treturn this.#value.formats;\n\t}\n\tget replacements() {\n\t\treturn this.#value.replacements;\n\t}\n\tget text() {\n\t\treturn this.#value.text;\n\t}\n}\n\nfor ( const name of Object.getOwnPropertyNames( String.prototype ) ) {\n\tif ( RichTextData.prototype.hasOwnProperty( name ) ) {\n\t\tcontinue;\n\t}\n\n\tObject.defineProperty( RichTextData.prototype, name, {\n\t\tvalue( ...args ) {\n\t\t\t// Should we convert back to RichTextData?\n\t\t\treturn this.toHTMLString()[ name ]( ...args );\n\t\t},\n\t} );\n}\n\n/**\n * Create a RichText value from an `Element` tree (DOM), an HTML string or a\n * plain text string, with optionally a `Range` object to set the selection. If\n * called without any input, an empty value will be created. The optional\n * functions can be used to filter out content.\n *\n * A value will have the following shape, which you are strongly encouraged not\n * to modify without the use of helper functions:\n *\n * ```js\n * {\n * text: string,\n * formats: Array,\n * replacements: Array,\n * ?start: number,\n * ?end: number,\n * }\n * ```\n *\n * As you can see, text and formatting are separated. `text` holds the text,\n * including any replacement characters for objects and lines. `formats`,\n * `objects` and `lines` are all sparse arrays of the same length as `text`. It\n * holds information about the formatting at the relevant text indices. Finally\n * `start` and `end` state which text indices are selected. They are only\n * provided if a `Range` was given.\n *\n * @param {Object} [$1] Optional named arguments.\n * @param {Element} [$1.element] Element to create value from.\n * @param {string} [$1.text] Text to create value from.\n * @param {string} [$1.html] HTML to create value from.\n * @param {Range} [$1.range] Range to create value from.\n * @param {boolean} [$1.__unstableIsEditableTree]\n * @return {RichTextValue} A rich text value.\n */\nexport function create( {\n\telement,\n\ttext,\n\thtml,\n\trange,\n\t__unstableIsEditableTree: isEditableTree,\n} = {} ) {\n\tif ( html instanceof RichTextData ) {\n\t\treturn {\n\t\t\ttext: html.text,\n\t\t\tformats: html.formats,\n\t\t\treplacements: html.replacements,\n\t\t};\n\t}\n\n\tif ( typeof text === 'string' && text.length > 0 ) {\n\t\treturn {\n\t\t\tformats: Array( text.length ),\n\t\t\treplacements: Array( text.length ),\n\t\t\ttext,\n\t\t};\n\t}\n\n\tif ( typeof html === 'string' && html.length > 0 ) {\n\t\t// It does not matter which document this is, we're just using it to\n\t\t// parse.\n\t\telement = createElement( document, html );\n\t}\n\n\tif ( typeof element !== 'object' ) {\n\t\treturn createEmptyValue();\n\t}\n\n\treturn createFromElement( {\n\t\telement,\n\t\trange,\n\t\tisEditableTree,\n\t} );\n}\n\n/**\n * Helper to accumulate the value's selection start and end from the current\n * node and range.\n *\n * @param {Object} accumulator Object to accumulate into.\n * @param {Node} node Node to create value with.\n * @param {Range} range Range to create value with.\n * @param {Object} value Value that is being accumulated.\n */\nfunction accumulateSelection( accumulator, node, range, value ) {\n\tif ( ! range ) {\n\t\treturn;\n\t}\n\n\tconst { parentNode } = node;\n\tconst { startContainer, startOffset, endContainer, endOffset } = range;\n\tconst currentLength = accumulator.text.length;\n\n\t// Selection can be extracted from value.\n\tif ( value.start !== undefined ) {\n\t\taccumulator.start = currentLength + value.start;\n\t\t// Range indicates that the current node has selection.\n\t} else if ( node === startContainer && node.nodeType === node.TEXT_NODE ) {\n\t\taccumulator.start = currentLength + startOffset;\n\t\t// Range indicates that the current node is selected.\n\t} else if (\n\t\tparentNode === startContainer &&\n\t\tnode === startContainer.childNodes[ startOffset ]\n\t) {\n\t\taccumulator.start = currentLength;\n\t\t// Range indicates that the selection is after the current node.\n\t} else if (\n\t\tparentNode === startContainer &&\n\t\tnode === startContainer.childNodes[ startOffset - 1 ]\n\t) {\n\t\taccumulator.start = currentLength + value.text.length;\n\t\t// Fallback if no child inside handled the selection.\n\t} else if ( node === startContainer ) {\n\t\taccumulator.start = currentLength;\n\t}\n\n\t// Selection can be extracted from value.\n\tif ( value.end !== undefined ) {\n\t\taccumulator.end = currentLength + value.end;\n\t\t// Range indicates that the current node has selection.\n\t} else if ( node === endContainer && node.nodeType === node.TEXT_NODE ) {\n\t\taccumulator.end = currentLength + endOffset;\n\t\t// Range indicates that the current node is selected.\n\t} else if (\n\t\tparentNode === endContainer &&\n\t\tnode === endContainer.childNodes[ endOffset - 1 ]\n\t) {\n\t\taccumulator.end = currentLength + value.text.length;\n\t\t// Range indicates that the selection is before the current node.\n\t} else if (\n\t\tparentNode === endContainer &&\n\t\tnode === endContainer.childNodes[ endOffset ]\n\t) {\n\t\taccumulator.end = currentLength;\n\t\t// Fallback if no child inside handled the selection.\n\t} else if ( node === endContainer ) {\n\t\taccumulator.end = currentLength + endOffset;\n\t}\n}\n\n/**\n * Adjusts the start and end offsets from a range based on a text filter.\n *\n * @param {Node} node Node of which the text should be filtered.\n * @param {Range} range The range to filter.\n * @param {Function} filter Function to use to filter the text.\n *\n * @return {Object|void} Object containing range properties.\n */\nfunction filterRange( node, range, filter ) {\n\tif ( ! range ) {\n\t\treturn;\n\t}\n\n\tconst { startContainer, endContainer } = range;\n\tlet { startOffset, endOffset } = range;\n\n\tif ( node === startContainer ) {\n\t\tstartOffset = filter( node.nodeValue.slice( 0, startOffset ) ).length;\n\t}\n\n\tif ( node === endContainer ) {\n\t\tendOffset = filter( node.nodeValue.slice( 0, endOffset ) ).length;\n\t}\n\n\treturn { startContainer, startOffset, endContainer, endOffset };\n}\n\n/**\n * Collapse any whitespace used for HTML formatting to one space character,\n * because it will also be displayed as such by the browser.\n *\n * We need to strip it from the content because we use white-space: pre-wrap for\n * displaying editable rich text. Without using white-space: pre-wrap, the\n * browser will litter the content with non breaking spaces, among other issues.\n * See packages/rich-text/src/component/use-default-style.js.\n *\n * @see\n * https://developer.mozilla.org/en-US/docs/Web/CSS/white-space-collapse#collapsing_of_white_space\n *\n * @param {HTMLElement} element\n * @param {boolean} isRoot\n *\n * @return {HTMLElement} New element with collapsed whitespace.\n */\nfunction collapseWhiteSpace( element, isRoot = true ) {\n\tconst clone = element.cloneNode( true );\n\tclone.normalize();\n\tArray.from( clone.childNodes ).forEach( ( node, i, nodes ) => {\n\t\tif ( node.nodeType === node.TEXT_NODE ) {\n\t\t\tlet newNodeValue = node.nodeValue;\n\n\t\t\tif ( /[\\n\\t\\r\\f]/.test( newNodeValue ) ) {\n\t\t\t\tnewNodeValue = newNodeValue.replace( /[\\n\\t\\r\\f]+/g, ' ' );\n\t\t\t}\n\n\t\t\tif ( newNodeValue.indexOf( ' ' ) !== -1 ) {\n\t\t\t\tnewNodeValue = newNodeValue.replace( / {2,}/g, ' ' );\n\t\t\t}\n\n\t\t\tif ( i === 0 && newNodeValue.startsWith( ' ' ) ) {\n\t\t\t\tnewNodeValue = newNodeValue.slice( 1 );\n\t\t\t} else if (\n\t\t\t\tisRoot &&\n\t\t\t\ti === nodes.length - 1 &&\n\t\t\t\tnewNodeValue.endsWith( ' ' )\n\t\t\t) {\n\t\t\t\tnewNodeValue = newNodeValue.slice( 0, -1 );\n\t\t\t}\n\n\t\t\tnode.nodeValue = newNodeValue;\n\t\t} else if ( node.nodeType === node.ELEMENT_NODE ) {\n\t\t\tcollapseWhiteSpace( node, false );\n\t\t}\n\t} );\n\treturn clone;\n}\n\n/**\n * We need to normalise line breaks to `\\n` so they are consistent across\n * platforms and serialised properly. Not removing \\r would cause it to\n * linger and result in double line breaks when whitespace is preserved.\n */\nconst CARRIAGE_RETURN = '\\r';\n\n/**\n * Removes reserved characters used by rich-text (zero width non breaking spaces\n * added by `toTree` and object replacement characters).\n *\n * @param {string} string\n */\nexport function removeReservedCharacters( string ) {\n\t// with the global flag, note that we should create a new regex each time OR\n\t// reset lastIndex state.\n\treturn string.replace(\n\t\tnew RegExp(\n\t\t\t`[${ ZWNBSP }${ OBJECT_REPLACEMENT_CHARACTER }${ CARRIAGE_RETURN }]`,\n\t\t\t'gu'\n\t\t),\n\t\t''\n\t);\n}\n\n/**\n * Creates a Rich Text value from a DOM element and range.\n *\n * @param {Object} $1 Named arguments.\n * @param {Element} [$1.element] Element to create value from.\n * @param {Range} [$1.range] Range to create value from.\n * @param {boolean} [$1.isEditableTree]\n *\n * @return {RichTextValue} A rich text value.\n */\nfunction createFromElement( { element, range, isEditableTree } ) {\n\tconst accumulator = createEmptyValue();\n\n\tif ( ! element ) {\n\t\treturn accumulator;\n\t}\n\n\tif ( ! element.hasChildNodes() ) {\n\t\taccumulateSelection( accumulator, element, range, createEmptyValue() );\n\t\treturn accumulator;\n\t}\n\n\tconst length = element.childNodes.length;\n\n\t// Optimise for speed.\n\tfor ( let index = 0; index < length; index++ ) {\n\t\tconst node = element.childNodes[ index ];\n\t\tconst tagName = node.nodeName.toLowerCase();\n\n\t\tif ( node.nodeType === node.TEXT_NODE ) {\n\t\t\tconst text = removeReservedCharacters( node.nodeValue );\n\t\t\trange = filterRange( node, range, removeReservedCharacters );\n\t\t\taccumulateSelection( accumulator, node, range, { text } );\n\t\t\t// Create a sparse array of the same length as `text`, in which\n\t\t\t// formats can be added.\n\t\t\taccumulator.formats.length += text.length;\n\t\t\taccumulator.replacements.length += text.length;\n\t\t\taccumulator.text += text;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (\n\t\t\tnode.nodeType === node.COMMENT_NODE ||\n\t\t\t( node.nodeType === node.ELEMENT_NODE &&\n\t\t\t\tnode.tagName === 'SPAN' &&\n\t\t\t\tnode.hasAttribute( 'data-rich-text-comment' ) )\n\t\t) {\n\t\t\tconst value = {\n\t\t\t\tformats: [ , ],\n\t\t\t\treplacements: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: '#comment',\n\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t'data-rich-text-comment':\n\t\t\t\t\t\t\t\tnode.nodeType === node.COMMENT_NODE\n\t\t\t\t\t\t\t\t\t? node.nodeValue\n\t\t\t\t\t\t\t\t\t: node.getAttribute(\n\t\t\t\t\t\t\t\t\t\t\t'data-rich-text-comment'\n\t\t\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\ttext: OBJECT_REPLACEMENT_CHARACTER,\n\t\t\t};\n\t\t\taccumulateSelection( accumulator, node, range, value );\n\t\t\tmergePair( accumulator, value );\n\t\t\tcontinue;\n\t\t}\n\n\t\tif ( node.nodeType !== node.ELEMENT_NODE ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (\n\t\t\tisEditableTree &&\n\t\t\t// Ignore any line breaks that are not inserted by us.\n\t\t\ttagName === 'br' &&\n\t\t\t! node.getAttribute( 'data-rich-text-line-break' )\n\t\t) {\n\t\t\taccumulateSelection( accumulator, node, range, createEmptyValue() );\n\t\t\tcontinue;\n\t\t}\n\n\t\tif ( tagName === 'script' ) {\n\t\t\tconst value = {\n\t\t\t\tformats: [ , ],\n\t\t\t\treplacements: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: tagName,\n\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t'data-rich-text-script':\n\t\t\t\t\t\t\t\tnode.getAttribute( 'data-rich-text-script' ) ||\n\t\t\t\t\t\t\t\tencodeURIComponent( node.innerHTML ),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\ttext: OBJECT_REPLACEMENT_CHARACTER,\n\t\t\t};\n\t\t\taccumulateSelection( accumulator, node, range, value );\n\t\t\tmergePair( accumulator, value );\n\t\t\tcontinue;\n\t\t}\n\n\t\tif ( tagName === 'br' ) {\n\t\t\taccumulateSelection( accumulator, node, range, createEmptyValue() );\n\t\t\tmergePair( accumulator, create( { text: '\\n' } ) );\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst format = toFormat( {\n\t\t\ttagName,\n\t\t\tattributes: getAttributes( { element: node } ),\n\t\t} );\n\n\t\t// When a format type is declared as not editable, replace it with an\n\t\t// object replacement character and preserve the inner HTML.\n\t\tif ( format?.formatType?.contentEditable === false ) {\n\t\t\tdelete format.formatType;\n\t\t\taccumulateSelection( accumulator, node, range, createEmptyValue() );\n\t\t\tmergePair( accumulator, {\n\t\t\t\tformats: [ , ],\n\t\t\t\treplacements: [\n\t\t\t\t\t{\n\t\t\t\t\t\t...format,\n\t\t\t\t\t\tinnerHTML: node.innerHTML,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\ttext: OBJECT_REPLACEMENT_CHARACTER,\n\t\t\t} );\n\t\t\tcontinue;\n\t\t}\n\n\t\tif ( format ) {\n\t\t\tdelete format.formatType;\n\t\t}\n\n\t\tconst value = createFromElement( {\n\t\t\telement: node,\n\t\t\trange,\n\t\t\tisEditableTree,\n\t\t} );\n\n\t\taccumulateSelection( accumulator, node, range, value );\n\n\t\t// Ignore any placeholders, but keep their content since the browser\n\t\t// might insert text inside them when the editable element is flex.\n\t\tif ( ! format || node.getAttribute( 'data-rich-text-placeholder' ) ) {\n\t\t\tmergePair( accumulator, value );\n\t\t} else if ( value.text.length === 0 ) {\n\t\t\tif ( format.attributes ) {\n\t\t\t\tmergePair( accumulator, {\n\t\t\t\t\tformats: [ , ],\n\t\t\t\t\treplacements: [ format ],\n\t\t\t\t\ttext: OBJECT_REPLACEMENT_CHARACTER,\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\t\t\t// Indices should share a reference to the same formats array.\n\t\t\t// Only create a new reference if `formats` changes.\n\t\t\tfunction mergeFormats( formats ) {\n\t\t\t\tif ( mergeFormats.formats === formats ) {\n\t\t\t\t\treturn mergeFormats.newFormats;\n\t\t\t\t}\n\n\t\t\t\tconst newFormats = formats\n\t\t\t\t\t? [ format, ...formats ]\n\t\t\t\t\t: [ format ];\n\n\t\t\t\tmergeFormats.formats = formats;\n\t\t\t\tmergeFormats.newFormats = newFormats;\n\n\t\t\t\treturn newFormats;\n\t\t\t}\n\n\t\t\t// Since the formats parameter can be `undefined`, preset\n\t\t\t// `mergeFormats` with a new reference.\n\t\t\tmergeFormats.newFormats = [ format ];\n\n\t\t\tmergePair( accumulator, {\n\t\t\t\t...value,\n\t\t\t\tformats: Array.from( value.formats, mergeFormats ),\n\t\t\t} );\n\t\t}\n\t}\n\n\treturn accumulator;\n}\n\n/**\n * Gets the attributes of an element in object shape.\n *\n * @param {Object} $1 Named arguments.\n * @param {Element} $1.element Element to get attributes from.\n *\n * @return {Object|void} Attribute object or `undefined` if the element has no\n * attributes.\n */\nfunction getAttributes( { element } ) {\n\tif ( ! element.hasAttributes() ) {\n\t\treturn;\n\t}\n\n\tconst length = element.attributes.length;\n\tlet accumulator;\n\n\t// Optimise for speed.\n\tfor ( let i = 0; i < length; i++ ) {\n\t\tconst { name, value } = element.attributes[ i ];\n\n\t\tif ( name.indexOf( 'data-rich-text-' ) === 0 ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst safeName = /^on/i.test( name )\n\t\t\t? 'data-disable-rich-text-' + name\n\t\t\t: name;\n\n\t\taccumulator = accumulator || {};\n\t\taccumulator[ safeName ] = value;\n\t}\n\n\treturn accumulator;\n}\n","/**\n * Internal dependencies\n */\n\nimport { normaliseFormats } from './normalise-formats';\nimport { create } from './create';\n\n/** @typedef {import('./types').RichTextValue} RichTextValue */\n\n/**\n * Concats a pair of rich text values. Not that this mutates `a` and does NOT\n * normalise formats!\n *\n * @param {Object} a Value to mutate.\n * @param {Object} b Value to add read from.\n *\n * @return {Object} `a`, mutated.\n */\nexport function mergePair( a, b ) {\n\ta.formats = a.formats.concat( b.formats );\n\ta.replacements = a.replacements.concat( b.replacements );\n\ta.text += b.text;\n\n\treturn a;\n}\n\n/**\n * Combine all Rich Text values into one. This is similar to\n * `String.prototype.concat`.\n *\n * @param {...RichTextValue} values Objects to combine.\n *\n * @return {RichTextValue} A new value combining all given records.\n */\nexport function concat( ...values ) {\n\treturn normaliseFormats( values.reduce( mergePair, create() ) );\n}\n","/**\n * Internal dependencies\n */\nimport { getActiveFormats } from './get-active-formats';\n\n/** @typedef {import('./types').RichTextValue} RichTextValue */\n/** @typedef {import('./types').RichTextFormat} RichTextFormat */\n\n/**\n * Gets the format object by type at the start of the selection. This can be\n * used to get e.g. the URL of a link format at the current selection, but also\n * to check if a format is active at the selection. Returns undefined if there\n * is no format at the selection.\n *\n * @param {RichTextValue} value Value to inspect.\n * @param {string} formatType Format type to look for.\n *\n * @return {RichTextFormat|undefined} Active format object of the specified\n * type, or undefined.\n */\nexport function getActiveFormat( value, formatType ) {\n\treturn getActiveFormats( value ).find(\n\t\t( { type } ) => type === formatType\n\t);\n}\n","/**\n * Internal dependencies\n */\n\nimport { OBJECT_REPLACEMENT_CHARACTER } from './special-characters';\n\n/** @typedef {import('./types').RichTextValue} RichTextValue */\n/** @typedef {import('./types').RichTextFormat} RichTextFormat */\n\n/**\n * Gets the active object, if there is any.\n *\n * @param {RichTextValue} value Value to inspect.\n *\n * @return {RichTextFormat|void} Active object, or undefined.\n */\nexport function getActiveObject( { start, end, replacements, text } ) {\n\tif ( start + 1 !== end || text[ start ] !== OBJECT_REPLACEMENT_CHARACTER ) {\n\t\treturn;\n\t}\n\n\treturn replacements[ start ];\n}\n","/**\n * Internal dependencies\n */\nimport type { RichTextValue } from './types';\n\n/**\n * Check if the selection of a Rich Text value is collapsed or not. Collapsed\n * means that no characters are selected, but there is a caret present. If there\n * is no selection, `undefined` will be returned. This is similar to\n * `window.getSelection().isCollapsed()`.\n *\n * @param props The rich text value to check.\n * @param props.start\n * @param props.end\n * @return True if the selection is collapsed, false if not, undefined if there is no selection.\n */\nexport function isCollapsed( {\n\tstart,\n\tend,\n}: RichTextValue ): boolean | undefined {\n\tif ( start === undefined || end === undefined ) {\n\t\treturn;\n\t}\n\n\treturn start === end;\n}\n","/** @typedef {import('./types').RichTextValue} RichTextValue */\n\n/**\n * Check if a Rich Text value is Empty, meaning it contains no text or any\n * objects (such as images).\n *\n * @param {RichTextValue} value Value to use.\n *\n * @return {boolean} True if the value is empty, false if not.\n */\nexport function isEmpty( { text } ) {\n\treturn text.length === 0;\n}\n","/**\n * Internal dependencies\n */\n\nimport { create } from './create';\nimport { normaliseFormats } from './normalise-formats';\n\n/** @typedef {import('./types').RichTextValue} RichTextValue */\n\n/**\n * Combine an array of Rich Text values into one, optionally separated by\n * `separator`, which can be a Rich Text value, HTML string, or plain text\n * string. This is similar to `Array.prototype.join`.\n *\n * @param {Array