@wordpress/block-editor
Version:
8 lines (7 loc) • 6.59 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/components/image-editor/aspect-ratio-dropdown.js"],
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { check, aspectRatio as aspectRatioIcon } from '@wordpress/icons';\nimport { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useSettings } from '../use-settings';\nimport { POPOVER_PROPS } from './constants';\nimport { useImageEditingContext } from './context';\n\nfunction AspectRatioGroup( {\n\taspectRatios,\n\tisDisabled,\n\tlabel,\n\tonClick,\n\tvalue,\n} ) {\n\treturn (\n\t\t<MenuGroup label={ label }>\n\t\t\t{ aspectRatios.map( ( { name, slug, ratio } ) => (\n\t\t\t\t<MenuItem\n\t\t\t\t\tkey={ slug }\n\t\t\t\t\tdisabled={ isDisabled }\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tonClick( ratio );\n\t\t\t\t\t} }\n\t\t\t\t\trole=\"menuitemradio\"\n\t\t\t\t\tisSelected={ ratio === value }\n\t\t\t\t\ticon={ ratio === value ? check : undefined }\n\t\t\t\t>\n\t\t\t\t\t{ name }\n\t\t\t\t</MenuItem>\n\t\t\t) ) }\n\t\t</MenuGroup>\n\t);\n}\n\nexport function ratioToNumber( str ) {\n\t// TODO: support two-value aspect ratio?\n\t// https://css-tricks.com/almanac/properties/a/aspect-ratio/#aa-it-can-take-two-values\n\tconst [ a, b, ...rest ] = str.split( '/' ).map( Number );\n\tif (\n\t\ta <= 0 ||\n\t\tb <= 0 ||\n\t\tNumber.isNaN( a ) ||\n\t\tNumber.isNaN( b ) ||\n\t\trest.length\n\t) {\n\t\treturn NaN;\n\t}\n\treturn b ? a / b : a;\n}\n\nfunction presetRatioAsNumber( { ratio, ...rest } ) {\n\treturn {\n\t\tratio: ratioToNumber( ratio ),\n\t\t...rest,\n\t};\n}\n\nexport default function AspectRatioDropdown( { toggleProps } ) {\n\tconst { isInProgress, aspect, setAspect, defaultAspect } =\n\t\tuseImageEditingContext();\n\n\tconst [ defaultRatios, themeRatios, showDefaultRatios ] = useSettings(\n\t\t'dimensions.aspectRatios.default',\n\t\t'dimensions.aspectRatios.theme',\n\t\t'dimensions.defaultAspectRatios'\n\t);\n\n\treturn (\n\t\t<DropdownMenu\n\t\t\ticon={ aspectRatioIcon }\n\t\t\tlabel={ __( 'Aspect Ratio' ) }\n\t\t\tpopoverProps={ POPOVER_PROPS }\n\t\t\ttoggleProps={ toggleProps }\n\t\t>\n\t\t\t{ ( { onClose } ) => (\n\t\t\t\t<>\n\t\t\t\t\t<AspectRatioGroup\n\t\t\t\t\t\tisDisabled={ isInProgress }\n\t\t\t\t\t\tonClick={ ( newAspect ) => {\n\t\t\t\t\t\t\tsetAspect( newAspect );\n\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tvalue={ aspect }\n\t\t\t\t\t\taspectRatios={ [\n\t\t\t\t\t\t\t// All ratios should be mirrored in AspectRatioTool in @wordpress/block-editor.\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tslug: 'original',\n\t\t\t\t\t\t\t\tname: __( 'Original' ),\n\t\t\t\t\t\t\t\tratio: defaultAspect,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t...( showDefaultRatios\n\t\t\t\t\t\t\t\t? defaultRatios\n\t\t\t\t\t\t\t\t\t\t.map( presetRatioAsNumber )\n\t\t\t\t\t\t\t\t\t\t.filter( ( { ratio } ) => ratio === 1 )\n\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\t{ themeRatios?.length > 0 && (\n\t\t\t\t\t\t<AspectRatioGroup\n\t\t\t\t\t\t\tlabel={ __( 'Theme' ) }\n\t\t\t\t\t\t\tisDisabled={ isInProgress }\n\t\t\t\t\t\t\tonClick={ ( newAspect ) => {\n\t\t\t\t\t\t\t\tsetAspect( newAspect );\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tvalue={ aspect }\n\t\t\t\t\t\t\taspectRatios={ themeRatios }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\t{ showDefaultRatios && (\n\t\t\t\t\t\t<AspectRatioGroup\n\t\t\t\t\t\t\tlabel={ __( 'Landscape' ) }\n\t\t\t\t\t\t\tisDisabled={ isInProgress }\n\t\t\t\t\t\t\tonClick={ ( newAspect ) => {\n\t\t\t\t\t\t\t\tsetAspect( newAspect );\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tvalue={ aspect }\n\t\t\t\t\t\t\taspectRatios={ defaultRatios\n\t\t\t\t\t\t\t\t.map( presetRatioAsNumber )\n\t\t\t\t\t\t\t\t.filter( ( { ratio } ) => ratio > 1 ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\t{ showDefaultRatios && (\n\t\t\t\t\t\t<AspectRatioGroup\n\t\t\t\t\t\t\tlabel={ __( 'Portrait' ) }\n\t\t\t\t\t\t\tisDisabled={ isInProgress }\n\t\t\t\t\t\t\tonClick={ ( newAspect ) => {\n\t\t\t\t\t\t\t\tsetAspect( newAspect );\n\t\t\t\t\t\t\t\tonClose();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tvalue={ aspect }\n\t\t\t\t\t\t\taspectRatios={ defaultRatios\n\t\t\t\t\t\t\t\t.map( presetRatioAsNumber )\n\t\t\t\t\t\t\t\t.filter( ( { ratio } ) => ratio < 1 ) }\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</DropdownMenu>\n\t);\n}\n"],
"mappings": "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",
"names": ["aspectRatioIcon"]
}