{
  "version": 3,
  "sources": ["../../src/api/utils.ts"],
  "sourcesContent": ["/**\n * External dependencies\n */\nimport { colord, extend } from 'colord';\nimport namesPlugin from 'colord/plugins/names';\nimport a11yPlugin from 'colord/plugins/a11y';\n\n/**\n * WordPress dependencies\n */\nimport { Component, isValidElement } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport { RichTextData } from '@wordpress/rich-text';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport { BLOCK_ICON_DEFAULT } from './constants';\nimport { getBlockType, getDefaultBlockName } from './registration';\nimport type {\n\tBlock,\n\tBlockType,\n\tBlockTypeIcon,\n\tBlockTypeIconDescriptor,\n\tBlockTypeIconRender,\n\tBlockAttribute,\n} from '../types';\n\nextend( [ namesPlugin, a11yPlugin ] );\n\n/**\n * Array of icon colors containing a color to be used if the icon color\n * was not explicitly set but the icon background color was.\n */\nconst ICON_COLORS = [ '#191e23', '#f8f9f9' ];\n\n/**\n * Determines whether the block's attributes are equal to the default attributes\n * which means the block is unmodified.\n *\n * @param block Block Object.\n * @param role  Optional role to filter attributes for modification check.\n *\n * @return Whether the block is an unmodified block.\n */\nexport function isUnmodifiedBlock( block: Block, role?: string ): boolean {\n\tconst blockAttributes = getBlockType( block.name )?.attributes ?? {};\n\n\t// Filter attributes by role if a role is provided.\n\tconst attributesByRole: Array< [ string, BlockAttribute ] > = role\n\t\t? Object.entries( blockAttributes ).filter( ( [ key, definition ] ) => {\n\t\t\t\t// A special case for the metadata attribute.\n\t\t\t\t// It can include block bindings that serve as a source of content,\n\t\t\t\t// without directly modifying content attributes.\n\t\t\t\tif ( role === 'content' && key === 'metadata' ) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\tObject.keys(\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tblock.attributes[ key ] as Record<\n\t\t\t\t\t\t\t\t\tstring,\n\t\t\t\t\t\t\t\t\tunknown\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t )?.bindings ?? {}\n\t\t\t\t\t\t).length > 0\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\tdefinition.role === role ||\n\t\t\t\t\tdefinition.__experimentalRole === role\n\t\t\t\t);\n\t\t  } )\n\t\t: [];\n\t// Fallback to all attributes if no attributes match the role.\n\tconst attributesToCheck: Array< [ string, BlockAttribute ] > =\n\t\t!! attributesByRole.length\n\t\t\t? attributesByRole\n\t\t\t: Object.entries( blockAttributes );\n\n\treturn attributesToCheck.every( ( [ key, definition ] ) => {\n\t\tconst value = block.attributes[ key ];\n\n\t\t// Every attribute that has a default must match the default.\n\t\tif ( definition.hasOwnProperty( 'default' ) ) {\n\t\t\treturn value === definition.default;\n\t\t}\n\n\t\t// The rich text type is a bit different from the rest because it\n\t\t// has an implicit default value of an empty RichTextData instance,\n\t\t// so check the length of the value.\n\t\tif ( definition.type === 'rich-text' ) {\n\t\t\treturn ! ( value as RichTextData )?.length;\n\t\t}\n\n\t\t// Every attribute that doesn't have a default should be undefined.\n\t\treturn value === undefined;\n\t} );\n}\n\n/**\n * Determines whether the block is a default block and its attributes are equal\n * to the default attributes which means the block is unmodified.\n *\n * @param block Block Object\n * @param role  Optional role to filter attributes for modification check.\n *\n * @return Whether the block is an unmodified default block.\n */\nexport function isUnmodifiedDefaultBlock(\n\tblock: Block,\n\trole?: string\n): boolean {\n\treturn (\n\t\tblock.name === getDefaultBlockName() && isUnmodifiedBlock( block, role )\n\t);\n}\n\n/**\n * Function that checks if the parameter is a valid icon.\n *\n * @param icon Parameter to be checked.\n *\n * @return True if the parameter is a valid icon and false otherwise.\n */\nexport function isValidIcon( icon: unknown ): boolean {\n\treturn (\n\t\t!! icon &&\n\t\t( typeof icon === 'string' ||\n\t\t\tisValidElement( icon ) ||\n\t\t\ttypeof icon === 'function' ||\n\t\t\ticon instanceof Component )\n\t);\n}\n\n/**\n * Function that receives an icon as set by the blocks during the registration\n * and returns a new icon object that is normalized so we can rely on just on possible icon structure\n * in the codebase.\n *\n * @param icon Render behavior of a block type icon;\n *             one of a Dashicon slug, an element, or a component.\n *\n * @return Object describing the icon.\n */\nexport function normalizeIconObject(\n\ticon: BlockTypeIcon | undefined\n): BlockTypeIconDescriptor {\n\tconst resolvedIcon: BlockTypeIcon = icon || BLOCK_ICON_DEFAULT;\n\tif ( isValidIcon( resolvedIcon ) ) {\n\t\treturn { src: resolvedIcon as BlockTypeIconRender };\n\t}\n\n\tconst iconDescriptor = resolvedIcon as BlockTypeIconDescriptor;\n\tif ( 'background' in iconDescriptor ) {\n\t\tconst colordBgColor = colord( iconDescriptor.background! );\n\t\tconst getColorContrast = ( iconColor: string ) =>\n\t\t\tcolordBgColor.contrast( iconColor );\n\t\tconst maxContrast = Math.max( ...ICON_COLORS.map( getColorContrast ) );\n\n\t\treturn {\n\t\t\t...iconDescriptor,\n\t\t\tforeground: iconDescriptor.foreground\n\t\t\t\t? iconDescriptor.foreground\n\t\t\t\t: ICON_COLORS.find(\n\t\t\t\t\t\t( iconColor ) =>\n\t\t\t\t\t\t\tgetColorContrast( iconColor ) === maxContrast\n\t\t\t\t  ),\n\t\t\tshadowColor: colordBgColor.alpha( 0.3 ).toRgbString(),\n\t\t};\n\t}\n\n\treturn iconDescriptor;\n}\n\n/**\n * Normalizes block type passed as param. When string is passed then\n * it converts it to the matching block type object.\n * It passes the original object otherwise.\n *\n * @param blockTypeOrName Block type or name.\n *\n * @return Block type.\n */\nexport function normalizeBlockType(\n\tblockTypeOrName: string | BlockType\n): BlockType | undefined {\n\tif ( typeof blockTypeOrName === 'string' ) {\n\t\treturn getBlockType( blockTypeOrName );\n\t}\n\n\treturn blockTypeOrName;\n}\n\n/**\n * Get the label for the block, usually this is either the block title,\n * or the value of the block's `label` function when that's specified.\n *\n * @param blockType  The block type.\n * @param attributes The values of the block's attributes.\n * @param context    The intended use for the label.\n *\n * @return The block label.\n */\nexport function getBlockLabel(\n\tblockType: BlockType,\n\tattributes: Record< string, unknown >,\n\tcontext: string = 'visual'\n): string {\n\tconst { __experimentalLabel: getLabel, title } = blockType;\n\n\tconst label = getLabel && getLabel( attributes, { context } );\n\n\tif ( ! label ) {\n\t\treturn title;\n\t}\n\n\tif ( ( label as unknown as RichTextData ).toPlainText ) {\n\t\treturn ( label as unknown as RichTextData ).toPlainText();\n\t}\n\n\t// Strip any HTML (i.e. RichText formatting) before returning.\n\treturn stripHTML( label as string );\n}\n\n/**\n * Get a label for the block for use by screenreaders, this is more descriptive\n * than the visual label and includes the block title and the value of the\n * `getLabel` function if it's specified.\n *\n * @param blockType  The block type.\n * @param attributes The values of the block's attributes.\n * @param position   The position of the block in the block list.\n * @param direction  The direction of the block layout.\n *\n * @return The block label.\n */\nexport function getAccessibleBlockLabel(\n\tblockType: BlockType | undefined | null,\n\tattributes: Record< string, unknown >,\n\tposition?: number,\n\tdirection: string = 'vertical'\n): string {\n\t// `title` is already localized, `label` is a user-supplied value.\n\tconst title = blockType?.title ?? '';\n\tconst label = blockType\n\t\t? getBlockLabel( blockType, attributes, 'accessibility' )\n\t\t: '';\n\tconst hasPosition = position !== undefined;\n\n\t// getBlockLabel returns the block title as a fallback when there's no label,\n\t// if it did return the title, this function needs to avoid adding the\n\t// title twice within the accessible label. Use this `hasLabel` boolean to\n\t// handle that.\n\tconst hasLabel = label && label !== title;\n\n\tif ( hasPosition && direction === 'vertical' ) {\n\t\tif ( hasLabel ) {\n\t\t\treturn sprintf(\n\t\t\t\t/* translators: accessibility text. 1: The block title. 2: The block row number. 3: The block label.. */\n\t\t\t\t__( '%1$s Block. Row %2$d. %3$s' ),\n\t\t\t\ttitle,\n\t\t\t\tposition,\n\t\t\t\tlabel\n\t\t\t);\n\t\t}\n\n\t\treturn sprintf(\n\t\t\t/* translators: accessibility text. 1: The block title. 2: The block row number. */\n\t\t\t__( '%1$s Block. Row %2$d' ),\n\t\t\ttitle,\n\t\t\tposition\n\t\t);\n\t} else if ( hasPosition && direction === 'horizontal' ) {\n\t\tif ( hasLabel ) {\n\t\t\treturn sprintf(\n\t\t\t\t/* translators: accessibility text. 1: The block title. 2: The block column number. 3: The block label.. */\n\t\t\t\t__( '%1$s Block. Column %2$d. %3$s' ),\n\t\t\t\ttitle,\n\t\t\t\tposition,\n\t\t\t\tlabel\n\t\t\t);\n\t\t}\n\n\t\treturn sprintf(\n\t\t\t/* translators: accessibility text. 1: The block title. 2: The block column number. */\n\t\t\t__( '%1$s Block. Column %2$d' ),\n\t\t\ttitle,\n\t\t\tposition\n\t\t);\n\t}\n\n\tif ( hasLabel ) {\n\t\treturn sprintf(\n\t\t\t/* translators: accessibility text. 1: The block title. 2: The block label. */\n\t\t\t__( '%1$s Block. %2$s' ),\n\t\t\ttitle,\n\t\t\tlabel\n\t\t);\n\t}\n\n\treturn sprintf(\n\t\t/* translators: accessibility text. %s: The block title. */\n\t\t__( '%s Block' ),\n\t\ttitle\n\t);\n}\n\nexport function getDefault( attributeSchema: BlockAttribute ): unknown {\n\tif ( attributeSchema.default !== undefined ) {\n\t\treturn attributeSchema.default;\n\t}\n\n\tif ( attributeSchema.type === 'rich-text' ) {\n\t\treturn new RichTextData();\n\t}\n\n\treturn undefined;\n}\n\n/**\n * Check if a block is registered.\n *\n * @param name The block's name.\n *\n * @return Whether the block is registered.\n */\nexport function isBlockRegistered( name: string ): boolean {\n\treturn getBlockType( name ) !== undefined;\n}\n\n/**\n * Ensure attributes contains only values defined by block type, and merge\n * default values for missing attributes.\n *\n * @param name       The block's name.\n * @param attributes The block's attributes.\n * @return The sanitized attributes.\n */\nexport function __experimentalSanitizeBlockAttributes(\n\tname: string,\n\tattributes: Record< string, unknown >\n): Record< string, unknown > {\n\t// Get the type definition associated with a registered block.\n\tconst blockType = getBlockType( name );\n\n\tif ( undefined === blockType ) {\n\t\tthrow new Error( `Block type '${ name }' is not registered.` );\n\t}\n\n\treturn Object.entries( blockType.attributes ).reduce(\n\t\t( accumulator: Record< string, unknown >, [ key, schema ] ) => {\n\t\t\tconst value = attributes[ key ];\n\n\t\t\tif ( undefined !== value ) {\n\t\t\t\tif ( schema.type === 'rich-text' ) {\n\t\t\t\t\tif ( value instanceof RichTextData ) {\n\t\t\t\t\t\taccumulator[ key ] = value;\n\t\t\t\t\t} else if ( typeof value === 'string' ) {\n\t\t\t\t\t\taccumulator[ key ] =\n\t\t\t\t\t\t\tRichTextData.fromHTMLString( value );\n\t\t\t\t\t}\n\t\t\t\t} else if (\n\t\t\t\t\tschema.type === 'string' &&\n\t\t\t\t\tvalue instanceof RichTextData\n\t\t\t\t) {\n\t\t\t\t\taccumulator[ key ] = value.toHTMLString();\n\t\t\t\t} else {\n\t\t\t\t\taccumulator[ key ] = value;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst _default = getDefault( schema );\n\t\t\t\tif ( undefined !== _default ) {\n\t\t\t\t\taccumulator[ key ] = _default;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t[ 'node', 'children' ].indexOf( schema.source ?? '' ) !== -1\n\t\t\t) {\n\t\t\t\t// Ensure value passed is always an array, which we're expecting in\n\t\t\t\t// the RichText component to handle the deprecated value.\n\t\t\t\tif ( typeof accumulator[ key ] === 'string' ) {\n\t\t\t\t\taccumulator[ key ] = [ accumulator[ key ] ];\n\t\t\t\t} else if ( ! Array.isArray( accumulator[ key ] ) ) {\n\t\t\t\t\taccumulator[ key ] = [];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn accumulator;\n\t\t},\n\t\t{}\n\t);\n}\n\n/**\n * Filter block attributes by `role` and return their names.\n *\n * @param name Block attribute's name.\n * @param role The role of a block attribute.\n *\n * @return The attribute names that have the provided role.\n */\nexport function getBlockAttributesNamesByRole(\n\tname: string,\n\trole?: string\n): string[] {\n\tconst attributes = getBlockType( name )?.attributes;\n\tif ( ! attributes ) {\n\t\treturn [];\n\t}\n\tconst attributesNames = Object.keys( attributes );\n\tif ( ! role ) {\n\t\treturn attributesNames;\n\t}\n\n\treturn attributesNames.filter( ( attributeName ) => {\n\t\tconst attribute = attributes[ attributeName ];\n\t\tif ( attribute?.role === role ) {\n\t\t\treturn true;\n\t\t}\n\t\tif ( attribute?.__experimentalRole === role ) {\n\t\t\tdeprecated( '__experimentalRole attribute', {\n\t\t\t\tsince: '6.7',\n\t\t\t\tversion: '6.8',\n\t\t\t\talternative: 'role attribute',\n\t\t\t\thint: `Check the block.json of the ${ name } block.`,\n\t\t\t} );\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t} );\n}\n\nexport const __experimentalGetBlockAttributesNamesByRole = (\n\t...args: Parameters< typeof getBlockAttributesNamesByRole >\n): string[] => {\n\tdeprecated( '__experimentalGetBlockAttributesNamesByRole', {\n\t\tsince: '6.7',\n\t\tversion: '6.8',\n\t\talternative: 'getBlockAttributesNamesByRole',\n\t} );\n\treturn getBlockAttributesNamesByRole( ...args );\n};\n\n/**\n * Checks if a block is a content block by examining its attributes.\n * A block is considered a content block if it has at least one attribute\n * with a role of 'content'.\n *\n * @param name The name of the block to check.\n * @return Whether the block is a content block.\n */\nexport function isContentBlock( name: string ): boolean {\n\tconst blockType = getBlockType( name );\n\tconst attributes = blockType?.attributes;\n\t// Not all blocks have attributes but they may support contentRole instead.\n\tconst supportsContentRole = (\n\t\tblockType?.supports as Record< string, unknown >\n\t )?.contentRole;\n\n\tif ( supportsContentRole ) {\n\t\treturn true;\n\t}\n\tif ( ! attributes ) {\n\t\treturn false;\n\t}\n\n\treturn !! Object.keys( attributes )?.some( ( attributeKey ) => {\n\t\tconst attribute = attributes[ attributeKey ];\n\t\treturn (\n\t\t\tattribute?.role === 'content' ||\n\t\t\tattribute?.__experimentalRole === 'content'\n\t\t);\n\t} );\n}\n\n/**\n * Return a new object with the specified keys omitted.\n *\n * @param object Original object.\n * @param keys   Keys to be omitted.\n *\n * @return Object with omitted keys.\n */\nexport function omit< T extends Record< string, unknown > >(\n\tobject: T,\n\tkeys: string | string[]\n): T {\n\tconst keysArray = Array.isArray( keys ) ? keys : [ keys ];\n\treturn Object.fromEntries(\n\t\tObject.entries( object ).filter(\n\t\t\t( [ key ] ) => ! keysArray.includes( key )\n\t\t)\n\t) as T;\n}\n"],
  "mappings": "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",
  "names": ["namesPlugin", "a11yPlugin", "stripHTML", "deprecated"]
}
