{
  "version": 3,
  "sources": ["../../src/hook/use-format-types.js"],
  "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as richTextStore } from '../store';\n\nfunction formatTypesSelector( select ) {\n\treturn select( richTextStore ).getFormatTypes();\n}\n\n/**\n * Set of all interactive content tags.\n *\n * @see https://html.spec.whatwg.org/multipage/dom.html#interactive-content\n */\nconst interactiveContentTags = new Set( [\n\t'a',\n\t'audio',\n\t'button',\n\t'details',\n\t'embed',\n\t'iframe',\n\t'input',\n\t'label',\n\t'select',\n\t'textarea',\n\t'video',\n] );\n\nfunction prefixSelectKeys( selected, prefix ) {\n\tif ( typeof selected !== 'object' ) {\n\t\treturn { [ prefix ]: selected };\n\t}\n\treturn Object.fromEntries(\n\t\tObject.entries( selected ).map( ( [ key, value ] ) => [\n\t\t\t`${ prefix }.${ key }`,\n\t\t\tvalue,\n\t\t] )\n\t);\n}\n\nfunction getPrefixedSelectKeys( selected, prefix ) {\n\tif ( selected[ prefix ] ) {\n\t\treturn selected[ prefix ];\n\t}\n\treturn Object.keys( selected )\n\t\t.filter( ( key ) => key.startsWith( prefix + '.' ) )\n\t\t.reduce( ( accumulator, key ) => {\n\t\t\taccumulator[ key.slice( prefix.length + 1 ) ] = selected[ key ];\n\t\t\treturn accumulator;\n\t\t}, {} );\n}\n\n/**\n * This hook provides RichText with the `formatTypes` and its derived props from\n * experimental format type settings.\n *\n * @param {Object}  options                                    Options\n * @param {Array}   options.allowedFormats                     Allowed formats\n * @param {boolean} options.withoutInteractiveFormatting       Whether to clean the interactive formatting or not.\n * @param {Object}  options.__unstableFormatTypeHandlerContext Context object passed to experimental format type methods.\n */\nexport function useFormatTypes( {\n\tallowedFormats,\n\twithoutInteractiveFormatting,\n\t__unstableFormatTypeHandlerContext,\n} ) {\n\tconst allFormatTypes = useSelect( formatTypesSelector, [] );\n\tconst formatTypes = useMemo( () => {\n\t\treturn allFormatTypes.filter( ( { name, interactive, tagName } ) => {\n\t\t\tif ( allowedFormats && ! allowedFormats.includes( name ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\twithoutInteractiveFormatting &&\n\t\t\t\t( interactive || interactiveContentTags.has( tagName ) )\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} );\n\t}, [ allFormatTypes, allowedFormats, withoutInteractiveFormatting ] );\n\tconst keyedSelected = useSelect(\n\t\t( select ) =>\n\t\t\tformatTypes.reduce( ( accumulator, type ) => {\n\t\t\t\tif (\n\t\t\t\t\t! type.__experimentalGetPropsForEditableTreePreparation ||\n\t\t\t\t\t! __unstableFormatTypeHandlerContext\n\t\t\t\t) {\n\t\t\t\t\treturn accumulator;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\t...accumulator,\n\t\t\t\t\t...prefixSelectKeys(\n\t\t\t\t\t\ttype.__experimentalGetPropsForEditableTreePreparation(\n\t\t\t\t\t\t\tselect,\n\t\t\t\t\t\t\t__unstableFormatTypeHandlerContext\n\t\t\t\t\t\t),\n\t\t\t\t\t\ttype.name\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t}, {} ),\n\t\t[ formatTypes, __unstableFormatTypeHandlerContext ]\n\t);\n\tconst dispatch = useDispatch();\n\tconst prepareHandlers = [];\n\tconst valueHandlers = [];\n\tconst changeHandlers = [];\n\tconst dependencies = [];\n\n\tfor ( const key in keyedSelected ) {\n\t\tdependencies.push( keyedSelected[ key ] );\n\t}\n\n\tformatTypes.forEach( ( type ) => {\n\t\tif (\n\t\t\ttype.__experimentalCreatePrepareEditableTree &&\n\t\t\t__unstableFormatTypeHandlerContext\n\t\t) {\n\t\t\tconst handler = type.__experimentalCreatePrepareEditableTree(\n\t\t\t\tgetPrefixedSelectKeys( keyedSelected, type.name ),\n\t\t\t\t__unstableFormatTypeHandlerContext\n\t\t\t);\n\n\t\t\tif ( type.__experimentalCreateOnChangeEditableValue ) {\n\t\t\t\tvalueHandlers.push( handler );\n\t\t\t} else {\n\t\t\t\tprepareHandlers.push( handler );\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\ttype.__experimentalCreateOnChangeEditableValue &&\n\t\t\t__unstableFormatTypeHandlerContext\n\t\t) {\n\t\t\tlet dispatchers = {};\n\n\t\t\tif ( type.__experimentalGetPropsForEditableTreeChangeHandler ) {\n\t\t\t\tdispatchers =\n\t\t\t\t\ttype.__experimentalGetPropsForEditableTreeChangeHandler(\n\t\t\t\t\t\tdispatch,\n\t\t\t\t\t\t__unstableFormatTypeHandlerContext\n\t\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst selected = getPrefixedSelectKeys( keyedSelected, type.name );\n\t\t\tchangeHandlers.push(\n\t\t\t\ttype.__experimentalCreateOnChangeEditableValue(\n\t\t\t\t\t{\n\t\t\t\t\t\t...( typeof selected === 'object' ? selected : {} ),\n\t\t\t\t\t\t...dispatchers,\n\t\t\t\t\t},\n\t\t\t\t\t__unstableFormatTypeHandlerContext\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t} );\n\n\treturn {\n\t\tformatTypes,\n\t\tprepareHandlers,\n\t\tvalueHandlers,\n\t\tchangeHandlers,\n\t\tdependencies,\n\t};\n}\n"],
  "mappings": "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",
  "names": ["richTextStore"]
}
