UNPKG

@wordpress/block-editor

Version:
8 lines (7 loc) 9.49 kB
{ "version": 3, "sources": ["../../../src/components/global-styles/shadow-panel-components.js"], "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\t__experimentalVStack as VStack,\n\t__experimentalHeading as Heading,\n\t__experimentalHStack as HStack,\n\t__experimentalDropdownContentWrapper as DropdownContentWrapper,\n\tButton,\n\tFlexItem,\n\tDropdown,\n\tComposite,\n\tTooltip,\n} from '@wordpress/components';\nimport { useMemo, useRef } from '@wordpress/element';\nimport { shadow as shadowIcon, Icon, check, reset } from '@wordpress/icons';\n\n/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * Shared reference to an empty array for cases where it is important to avoid\n * returning a new array reference on every invocation.\n *\n * @type {Array}\n */\nconst EMPTY_ARRAY = [];\n\nexport function ShadowPopoverContainer( { shadow, onShadowChange, settings } ) {\n\tconst shadows = useShadowPresets( settings );\n\n\treturn (\n\t\t<div className=\"block-editor-global-styles__shadow-popover-container\">\n\t\t\t<VStack spacing={ 4 }>\n\t\t\t\t<Heading level={ 5 }>{ __( 'Drop shadow' ) }</Heading>\n\t\t\t\t<ShadowPresets\n\t\t\t\t\tpresets={ shadows }\n\t\t\t\t\tactiveShadow={ shadow }\n\t\t\t\t\tonSelect={ onShadowChange }\n\t\t\t\t/>\n\t\t\t\t<div className=\"block-editor-global-styles__clear-shadow\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\tonClick={ () => onShadowChange( undefined ) }\n\t\t\t\t\t\tdisabled={ ! shadow }\n\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Clear' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</VStack>\n\t\t</div>\n\t);\n}\n\nexport function ShadowPresets( { presets, activeShadow, onSelect } ) {\n\treturn ! presets ? null : (\n\t\t<Composite\n\t\t\trole=\"listbox\"\n\t\t\tclassName=\"block-editor-global-styles__shadow__list\"\n\t\t\taria-label={ __( 'Drop shadows' ) }\n\t\t>\n\t\t\t{ presets.map( ( { name, slug, shadow } ) => (\n\t\t\t\t<ShadowIndicator\n\t\t\t\t\tkey={ slug }\n\t\t\t\t\tlabel={ name }\n\t\t\t\t\tisActive={ shadow === activeShadow }\n\t\t\t\t\ttype={ slug === 'unset' ? 'unset' : 'preset' }\n\t\t\t\t\tonSelect={ () =>\n\t\t\t\t\t\tonSelect( shadow === activeShadow ? undefined : shadow )\n\t\t\t\t\t}\n\t\t\t\t\tshadow={ shadow }\n\t\t\t\t/>\n\t\t\t) ) }\n\t\t</Composite>\n\t);\n}\n\nexport function ShadowIndicator( { type, label, isActive, onSelect, shadow } ) {\n\treturn (\n\t\t<Tooltip text={ label }>\n\t\t\t<Composite.Item\n\t\t\t\trole=\"option\"\n\t\t\t\taria-label={ label }\n\t\t\t\taria-selected={ isActive }\n\t\t\t\tclassName={ clsx( 'block-editor-global-styles__shadow__item', {\n\t\t\t\t\t'is-active': isActive,\n\t\t\t\t} ) }\n\t\t\t\trender={\n\t\t\t\t\t<button\n\t\t\t\t\t\tclassName={ clsx(\n\t\t\t\t\t\t\t'block-editor-global-styles__shadow-indicator',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tunset: type === 'unset',\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tonClick={ onSelect }\n\t\t\t\t\t\tstyle={ { boxShadow: shadow } }\n\t\t\t\t\t\taria-label={ label }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ isActive && <Icon icon={ check } /> }\n\t\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t/>\n\t\t</Tooltip>\n\t);\n}\n\nexport function ShadowPopover( { shadow, onShadowChange, settings } ) {\n\tconst popoverProps = {\n\t\tplacement: 'left-start',\n\t\toffset: 36,\n\t\tshift: true,\n\t};\n\n\treturn (\n\t\t<Dropdown\n\t\t\tpopoverProps={ popoverProps }\n\t\t\tclassName=\"block-editor-global-styles__shadow-dropdown\"\n\t\t\trenderToggle={ renderShadowToggle( shadow, onShadowChange ) }\n\t\t\trenderContent={ () => (\n\t\t\t\t<DropdownContentWrapper paddingSize=\"medium\">\n\t\t\t\t\t<ShadowPopoverContainer\n\t\t\t\t\t\tshadow={ shadow }\n\t\t\t\t\t\tonShadowChange={ onShadowChange }\n\t\t\t\t\t\tsettings={ settings }\n\t\t\t\t\t/>\n\t\t\t\t</DropdownContentWrapper>\n\t\t\t) }\n\t\t/>\n\t);\n}\n\nfunction renderShadowToggle( shadow, onShadowChange ) {\n\treturn ( { onToggle, isOpen } ) => {\n\t\tconst shadowButtonRef = useRef( undefined );\n\n\t\tconst toggleProps = {\n\t\t\tonClick: onToggle,\n\t\t\tclassName: clsx(\n\t\t\t\t'block-editor-global-styles__shadow-dropdown-toggle',\n\t\t\t\t{ 'is-open': isOpen }\n\t\t\t),\n\t\t\t'aria-expanded': isOpen,\n\t\t\tref: shadowButtonRef,\n\t\t};\n\n\t\tconst removeButtonProps = {\n\t\t\tonClick: () => {\n\t\t\t\tif ( isOpen ) {\n\t\t\t\t\tonToggle();\n\t\t\t\t}\n\t\t\t\tonShadowChange( undefined );\n\t\t\t\t// Return focus to parent button.\n\t\t\t\tshadowButtonRef.current?.focus();\n\t\t\t},\n\t\t\tclassName: clsx(\n\t\t\t\t'block-editor-global-styles__shadow-editor__remove-button',\n\t\t\t\t{ 'is-open': isOpen }\n\t\t\t),\n\t\t\tlabel: __( 'Remove' ),\n\t\t};\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<Button __next40pxDefaultSize { ...toggleProps }>\n\t\t\t\t\t<HStack justify=\"flex-start\">\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\tclassName=\"block-editor-global-styles__toggle-icon\"\n\t\t\t\t\t\t\ticon={ shadowIcon }\n\t\t\t\t\t\t\tsize={ 24 }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<FlexItem>{ __( 'Drop shadow' ) }</FlexItem>\n\t\t\t\t\t</HStack>\n\t\t\t\t</Button>\n\t\t\t\t{ !! shadow && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\ticon={ reset }\n\t\t\t\t\t\t{ ...removeButtonProps }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</>\n\t\t);\n\t};\n}\n\nexport function useShadowPresets( settings ) {\n\treturn useMemo( () => {\n\t\tif ( ! settings?.shadow ) {\n\t\t\treturn EMPTY_ARRAY;\n\t\t}\n\n\t\tconst defaultPresetsEnabled = settings?.shadow?.defaultPresets;\n\t\tconst {\n\t\t\tdefault: defaultShadows,\n\t\t\ttheme: themeShadows,\n\t\t\tcustom: customShadows,\n\t\t} = settings?.shadow?.presets ?? {};\n\t\tconst unsetShadow = {\n\t\t\tname: __( 'Unset' ),\n\t\t\tslug: 'unset',\n\t\t\tshadow: 'none',\n\t\t};\n\n\t\tconst shadowPresets = [\n\t\t\t...( ( defaultPresetsEnabled && defaultShadows ) || EMPTY_ARRAY ),\n\t\t\t...( themeShadows || EMPTY_ARRAY ),\n\t\t\t...( customShadows || EMPTY_ARRAY ),\n\t\t];\n\t\tif ( shadowPresets.length ) {\n\t\t\tshadowPresets.unshift( unsetShadow );\n\t\t}\n\n\t\treturn shadowPresets;\n\t}, [ settings ] );\n}\n"], "mappings": "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", "names": ["VStack", "Heading", "clsx", "DropdownContentWrapper", "HStack", "shadowIcon"] }