@wordpress/block-library 9.44.1-next.v.202604201441.0 → 9.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/build/accordion/edit.cjs +0 -2
- package/build/accordion/edit.cjs.map +2 -2
- package/build/accordion-item/block.json +1 -0
- package/build/categories/edit.cjs +5 -1
- package/build/categories/edit.cjs.map +2 -2
- package/build/embed/edit.cjs +38 -34
- package/build/embed/edit.cjs.map +3 -3
- package/build/embed/transforms.cjs +3 -1
- package/build/embed/transforms.cjs.map +2 -2
- package/build/embed/util.cjs +13 -2
- package/build/embed/util.cjs.map +2 -2
- package/build/form/block.json +1 -1
- package/build/form-input/block.json +1 -1
- package/build/form-submission-notification/block.json +1 -1
- package/build/form-submit-button/block.json +1 -1
- package/build/image/edit.cjs +1 -1
- package/build/image/edit.cjs.map +2 -2
- package/build/image/image.cjs +29 -10
- package/build/image/image.cjs.map +3 -3
- package/build/index.cjs +4 -4
- package/build/index.cjs.map +2 -2
- package/build/math/edit.cjs +2 -2
- package/build/math/edit.cjs.map +2 -2
- package/build/navigation/edit/accessible-description.cjs +2 -2
- package/build/navigation/edit/accessible-description.cjs.map +2 -2
- package/build/navigation/edit/overlay-template-part-selector.cjs.map +2 -2
- package/build/navigation-link/edit.cjs +2 -1
- package/build/navigation-link/edit.cjs.map +2 -2
- package/build/navigation-link/link-ui/dialog-wrapper.cjs +2 -1
- package/build/navigation-link/link-ui/dialog-wrapper.cjs.map +2 -2
- package/build/navigation-link/link-ui/index.cjs +2 -1
- package/build/navigation-link/link-ui/index.cjs.map +2 -2
- package/build/post-author/edit.cjs.map +3 -3
- package/build/post-comments-form/edit.cjs +2 -2
- package/build/post-comments-form/edit.cjs.map +2 -2
- package/build/query/edit/inspector-controls/author-control.cjs +1 -1
- package/build/query/edit/inspector-controls/author-control.cjs.map +2 -2
- package/build/query/edit/inspector-controls/format-controls.cjs +1 -1
- package/build/query/edit/inspector-controls/format-controls.cjs.map +2 -2
- package/build/query/edit/inspector-controls/parent-control.cjs +1 -1
- package/build/query/edit/inspector-controls/parent-control.cjs.map +2 -2
- package/build/query/edit/inspector-controls/taxonomy-controls.cjs +1 -1
- package/build/query/edit/inspector-controls/taxonomy-controls.cjs.map +2 -2
- package/build/site-logo/edit.cjs +32 -18
- package/build/site-logo/edit.cjs.map +2 -2
- package/build/tab/block.json +23 -23
- package/build/tab/controls.cjs +5 -48
- package/build/tab/controls.cjs.map +3 -3
- package/build/tab/edit.cjs +77 -75
- package/build/tab/edit.cjs.map +3 -3
- package/build/tab/save.cjs +3 -3
- package/build/tab/save.cjs.map +2 -2
- package/{src/tabs-menu → build/tab-list}/block.json +3 -3
- package/build/{tabs-menu → tab-list}/edit.cjs +4 -4
- package/build/tab-list/edit.cjs.map +7 -0
- package/build/{tabs-menu → tab-list}/index.cjs +5 -5
- package/build/tab-list/index.cjs.map +7 -0
- package/build/{tabs-menu → tab-list}/save.cjs +1 -1
- package/build/{tabs-menu → tab-list}/save.cjs.map +1 -1
- package/build/{tab → tab-panel}/add-tab-toolbar-control.cjs +16 -16
- package/build/tab-panel/add-tab-toolbar-control.cjs.map +7 -0
- package/build/tab-panel/block.json +27 -37
- package/build/tab-panel/controls.cjs +89 -0
- package/build/tab-panel/controls.cjs.map +7 -0
- package/build/tab-panel/edit.cjs +90 -17
- package/build/tab-panel/edit.cjs.map +3 -3
- package/build/tab-panel/index.cjs +1 -1
- package/build/tab-panel/index.cjs.map +1 -1
- package/build/{tab → tab-panel}/init.cjs +1 -1
- package/build/{tab → tab-panel}/init.cjs.map +1 -1
- package/build/{tab → tab-panel}/remove-tab-toolbar-control.cjs +16 -16
- package/build/tab-panel/remove-tab-toolbar-control.cjs.map +7 -0
- package/build/tab-panel/save.cjs +4 -2
- package/build/tab-panel/save.cjs.map +2 -2
- package/build/tab-panels/block.json +66 -0
- package/build/{tabs-menu-item/controls.cjs → tab-panels/edit.cjs} +25 -11
- package/build/tab-panels/edit.cjs.map +7 -0
- package/build/{tabs-menu-item → tab-panels}/index.cjs +5 -5
- package/build/{tabs-menu → tab-panels}/index.cjs.map +2 -2
- package/build/{tabs-menu-item → tab-panels}/save.cjs +4 -6
- package/build/tab-panels/save.cjs.map +7 -0
- package/build/tabs/block.json +1 -1
- package/build/tabs/controls.cjs +2 -2
- package/build/tabs/controls.cjs.map +1 -1
- package/build/tabs/edit.cjs +24 -19
- package/build/tabs/edit.cjs.map +3 -3
- package/build/tabs/index.cjs +5 -5
- package/build/tabs/index.cjs.map +1 -1
- package/build/tabs/{use-tab-menu-sync.cjs → use-tab-list-sync.cjs} +78 -80
- package/build/tabs/use-tab-list-sync.cjs.map +7 -0
- package/build/terms-query/edit/inspector-controls/include-control.cjs +1 -1
- package/build/terms-query/edit/inspector-controls/include-control.cjs.map +2 -2
- package/build/video/tracks-editor.cjs +2 -2
- package/build/video/tracks-editor.cjs.map +2 -2
- package/build-module/accordion/edit.mjs +0 -2
- package/build-module/accordion/edit.mjs.map +2 -2
- package/build-module/accordion-item/block.json +1 -0
- package/build-module/categories/edit.mjs +5 -2
- package/build-module/categories/edit.mjs.map +2 -2
- package/build-module/embed/edit.mjs +45 -36
- package/build-module/embed/edit.mjs.map +2 -2
- package/build-module/embed/transforms.mjs +8 -2
- package/build-module/embed/transforms.mjs.map +2 -2
- package/build-module/embed/util.mjs +11 -1
- package/build-module/embed/util.mjs.map +2 -2
- package/build-module/form/block.json +1 -1
- package/build-module/form-input/block.json +1 -1
- package/build-module/form-submission-notification/block.json +1 -1
- package/build-module/form-submit-button/block.json +1 -1
- package/build-module/image/edit.mjs +1 -1
- package/build-module/image/edit.mjs.map +2 -2
- package/build-module/image/image.mjs +29 -10
- package/build-module/image/image.mjs.map +3 -3
- package/build-module/index.mjs +4 -4
- package/build-module/index.mjs.map +2 -2
- package/build-module/math/edit.mjs +2 -2
- package/build-module/math/edit.mjs.map +2 -2
- package/build-module/navigation/edit/accessible-description.mjs +1 -1
- package/build-module/navigation/edit/accessible-description.mjs.map +1 -1
- package/build-module/navigation/edit/overlay-template-part-selector.mjs +2 -2
- package/build-module/navigation/edit/overlay-template-part-selector.mjs.map +1 -1
- package/build-module/navigation-link/edit.mjs +2 -5
- package/build-module/navigation-link/edit.mjs.map +2 -2
- package/build-module/navigation-link/link-ui/dialog-wrapper.mjs +2 -1
- package/build-module/navigation-link/link-ui/dialog-wrapper.mjs.map +2 -2
- package/build-module/navigation-link/link-ui/index.mjs +1 -1
- package/build-module/navigation-link/link-ui/index.mjs.map +2 -2
- package/build-module/post-author/edit.mjs +2 -2
- package/build-module/post-author/edit.mjs.map +2 -2
- package/build-module/post-comments-form/edit.mjs +1 -1
- package/build-module/post-comments-form/edit.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/author-control.mjs +1 -1
- package/build-module/query/edit/inspector-controls/author-control.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/format-controls.mjs +1 -1
- package/build-module/query/edit/inspector-controls/format-controls.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/parent-control.mjs +1 -1
- package/build-module/query/edit/inspector-controls/parent-control.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/taxonomy-controls.mjs +1 -1
- package/build-module/query/edit/inspector-controls/taxonomy-controls.mjs.map +2 -2
- package/build-module/site-logo/edit.mjs +32 -18
- package/build-module/site-logo/edit.mjs.map +2 -2
- package/build-module/tab/block.json +23 -23
- package/build-module/tab/controls.mjs +7 -57
- package/build-module/tab/controls.mjs.map +2 -2
- package/build-module/tab/edit.mjs +81 -79
- package/build-module/tab/edit.mjs.map +3 -3
- package/build-module/tab/save.mjs +4 -4
- package/build-module/tab/save.mjs.map +2 -2
- package/build-module/{tabs-menu → tab-list}/block.json +3 -3
- package/build-module/{tabs-menu → tab-list}/edit.mjs +4 -4
- package/build-module/tab-list/edit.mjs.map +7 -0
- package/build-module/{tabs-menu → tab-list}/index.mjs +2 -2
- package/build-module/tab-list/index.mjs.map +7 -0
- package/build-module/{tabs-menu → tab-list}/save.mjs +1 -1
- package/build-module/{tabs-menu → tab-list}/save.mjs.map +1 -1
- package/build-module/{tab → tab-panel}/add-tab-toolbar-control.mjs +16 -16
- package/build-module/tab-panel/add-tab-toolbar-control.mjs.map +7 -0
- package/build-module/tab-panel/block.json +27 -37
- package/build-module/tab-panel/controls.mjs +65 -0
- package/build-module/tab-panel/controls.mjs.map +7 -0
- package/build-module/tab-panel/edit.mjs +92 -19
- package/build-module/tab-panel/edit.mjs.map +2 -2
- package/build-module/tab-panel/index.mjs +1 -1
- package/build-module/tab-panel/index.mjs.map +1 -1
- package/build-module/{tab → tab-panel}/init.mjs +1 -1
- package/build-module/{tab → tab-panel}/init.mjs.map +1 -1
- package/build-module/{tab → tab-panel}/remove-tab-toolbar-control.mjs +16 -16
- package/build-module/tab-panel/remove-tab-toolbar-control.mjs.map +7 -0
- package/build-module/tab-panel/save.mjs +4 -2
- package/build-module/tab-panel/save.mjs.map +2 -2
- package/build-module/tab-panels/block.json +66 -0
- package/build-module/tab-panels/edit.mjs +33 -0
- package/build-module/tab-panels/edit.mjs.map +7 -0
- package/build-module/{tabs-menu-item → tab-panels}/index.mjs +2 -2
- package/build-module/{tabs-menu → tab-panels}/index.mjs.map +2 -2
- package/build-module/tab-panels/save.mjs +12 -0
- package/build-module/tab-panels/save.mjs.map +7 -0
- package/build-module/tabs/block.json +1 -1
- package/build-module/tabs/controls.mjs +2 -2
- package/build-module/tabs/controls.mjs.map +1 -1
- package/build-module/tabs/edit.mjs +24 -19
- package/build-module/tabs/edit.mjs.map +2 -2
- package/build-module/tabs/index.mjs +5 -5
- package/build-module/tabs/index.mjs.map +1 -1
- package/build-module/tabs/use-tab-list-sync.mjs +169 -0
- package/build-module/tabs/use-tab-list-sync.mjs.map +7 -0
- package/build-module/terms-query/edit/inspector-controls/include-control.mjs +1 -1
- package/build-module/terms-query/edit/inspector-controls/include-control.mjs.map +2 -2
- package/build-module/video/tracks-editor.mjs +2 -2
- package/build-module/video/tracks-editor.mjs.map +2 -2
- package/build-style/classic-rtl.css +14 -0
- package/build-style/classic.css +14 -0
- package/build-style/editor-rtl.css +9 -5
- package/build-style/editor.css +9 -5
- package/build-style/style-rtl.css +40 -40
- package/build-style/style.css +40 -40
- package/build-style/tab/editor-rtl.css +11 -0
- package/build-style/tab/editor.css +11 -0
- package/build-style/tab/style-rtl.css +29 -16
- package/build-style/tab/style.css +29 -16
- package/build-style/tab-list/editor-rtl.css +6 -0
- package/build-style/tab-list/editor.css +6 -0
- package/build-style/tab-panel/style-rtl.css +17 -1
- package/build-style/tab-panel/style.css +17 -1
- package/build-style/tab-panels/style-rtl.css +4 -0
- package/build-style/tab-panels/style.css +4 -0
- package/build-style/video/editor-rtl.css +4 -0
- package/build-style/video/editor.css +4 -0
- package/package.json +39 -38
- package/src/accordion/edit.js +0 -2
- package/src/accordion-item/block.json +1 -0
- package/src/categories/edit.js +3 -2
- package/src/classic.scss +25 -0
- package/src/editor.scss +2 -2
- package/src/embed/edit.js +61 -52
- package/src/embed/edit.native.js +71 -57
- package/src/embed/transforms.js +8 -2
- package/src/embed/util.js +17 -0
- package/src/form/block.json +1 -1
- package/src/form-input/block.json +1 -1
- package/src/form-submission-notification/block.json +1 -1
- package/src/form-submit-button/block.json +1 -1
- package/src/image/edit.js +5 -1
- package/src/image/edit.native.js +3 -3
- package/src/image/image.js +30 -5
- package/src/index.js +4 -4
- package/src/math/edit.js +3 -3
- package/src/navigation/edit/accessible-description.js +1 -1
- package/src/navigation/edit/overlay-template-part-selector.js +3 -3
- package/src/navigation-link/edit.js +2 -5
- package/src/navigation-link/link-ui/dialog-wrapper.js +2 -1
- package/src/navigation-link/link-ui/index.js +1 -1
- package/src/post-author/edit.js +3 -5
- package/src/post-comments-form/edit.js +1 -1
- package/src/query/edit/inspector-controls/author-control.js +1 -1
- package/src/query/edit/inspector-controls/format-controls.js +1 -1
- package/src/query/edit/inspector-controls/parent-control.js +1 -1
- package/src/query/edit/inspector-controls/taxonomy-controls.js +1 -1
- package/src/site-logo/edit.js +38 -18
- package/src/style.scss +1 -1
- package/src/tab/block.json +23 -23
- package/src/tab/controls.js +6 -52
- package/src/tab/edit.js +99 -103
- package/src/{tabs-menu-item → tab}/editor.scss +3 -3
- package/src/tab/index.php +32 -51
- package/src/tab/save.js +4 -4
- package/src/tab/style.scss +34 -17
- package/{build/tabs-menu → src/tab-list}/block.json +3 -3
- package/src/{tabs-menu → tab-list}/edit.js +3 -3
- package/src/{tabs-menu → tab-list}/editor.scss +2 -2
- package/src/{tabs-menu → tab-list}/index.js +1 -1
- package/src/tab-list/index.php +80 -0
- package/src/{tab → tab-panel}/add-tab-toolbar-control.js +19 -19
- package/src/tab-panel/block.json +27 -37
- package/src/tab-panel/controls.js +65 -0
- package/src/tab-panel/edit.js +123 -20
- package/src/tab-panel/index.js +1 -1
- package/src/tab-panel/index.php +88 -0
- package/src/{tab → tab-panel}/remove-tab-toolbar-control.js +20 -19
- package/src/tab-panel/save.js +4 -2
- package/src/tab-panel/style.scss +20 -1
- package/src/tab-panels/block.json +66 -0
- package/src/tab-panels/edit.js +42 -0
- package/src/{tabs-menu-item → tab-panels}/index.js +1 -1
- package/src/tab-panels/save.js +11 -0
- package/src/tab-panels/style.scss +4 -0
- package/src/tabs/block.json +1 -1
- package/src/tabs/controls.js +2 -2
- package/src/tabs/edit.js +25 -20
- package/src/tabs/index.js +5 -5
- package/src/tabs/index.php +5 -5
- package/src/tabs/use-tab-list-sync.js +237 -0
- package/src/terms-query/edit/inspector-controls/include-control.js +1 -1
- package/src/video/editor.scss +5 -0
- package/src/video/tracks-editor.js +2 -2
- package/build/tab/add-tab-toolbar-control.cjs.map +0 -7
- package/build/tab/remove-tab-toolbar-control.cjs.map +0 -7
- package/build/tabs/use-tab-menu-sync.cjs.map +0 -7
- package/build/tabs-menu/edit.cjs.map +0 -7
- package/build/tabs-menu-item/block.json +0 -56
- package/build/tabs-menu-item/controls.cjs.map +0 -7
- package/build/tabs-menu-item/edit.cjs +0 -135
- package/build/tabs-menu-item/edit.cjs.map +0 -7
- package/build/tabs-menu-item/index.cjs.map +0 -7
- package/build/tabs-menu-item/save.cjs.map +0 -7
- package/build-module/tab/add-tab-toolbar-control.mjs.map +0 -7
- package/build-module/tab/remove-tab-toolbar-control.mjs.map +0 -7
- package/build-module/tabs/use-tab-menu-sync.mjs +0 -171
- package/build-module/tabs/use-tab-menu-sync.mjs.map +0 -7
- package/build-module/tabs-menu/edit.mjs.map +0 -7
- package/build-module/tabs-menu-item/block.json +0 -56
- package/build-module/tabs-menu-item/controls.mjs +0 -15
- package/build-module/tabs-menu-item/controls.mjs.map +0 -7
- package/build-module/tabs-menu-item/edit.mjs +0 -108
- package/build-module/tabs-menu-item/edit.mjs.map +0 -7
- package/build-module/tabs-menu-item/index.mjs.map +0 -7
- package/build-module/tabs-menu-item/save.mjs +0 -14
- package/build-module/tabs-menu-item/save.mjs.map +0 -7
- package/build-style/tabs-menu/editor-rtl.css +0 -6
- package/build-style/tabs-menu/editor.css +0 -6
- package/build-style/tabs-menu-item/editor-rtl.css +0 -11
- package/build-style/tabs-menu-item/editor.css +0 -11
- package/build-style/tabs-menu-item/style-rtl.css +0 -33
- package/build-style/tabs-menu-item/style.css +0 -33
- package/src/tabs/use-tab-menu-sync.js +0 -239
- package/src/tabs-menu/index.php +0 -80
- package/src/tabs-menu-item/block.json +0 -56
- package/src/tabs-menu-item/controls.js +0 -19
- package/src/tabs-menu-item/edit.js +0 -141
- package/src/tabs-menu-item/index.php +0 -70
- package/src/tabs-menu-item/save.js +0 -13
- package/src/tabs-menu-item/style.scss +0 -40
- /package/src/{tabs-menu → tab-list}/save.js +0 -0
- /package/src/{tab → tab-panel}/init.js +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/post-author/edit.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tAlignmentControl,\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport {\n\tButton,\n\tComboboxControl,\n\tSelectControl,\n\tToggleControl,\n\t__experimentalText as Text,\n\t__experimentalVStack as VStack,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { debounce } from '@wordpress/compose';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useMemo, useState } from '@wordpress/element';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as blocksStore } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { recreateWithRecommendedBlocks } from './utils';\nimport {\n\tuseDefaultAvatar,\n\tuseToolsPanelDropdownMenuProps,\n} from '../utils/hooks';\nimport { unlock } from '../lock-unlock';\n\nconst { InspectorControlsLastItem } = unlock( blockEditorPrivateApis );\n\nconst AUTHORS_QUERY = {\n\twho: 'authors',\n\tper_page: 100,\n\t_fields: 'id,name',\n\tcontext: 'view',\n};\n\nfunction AuthorCombobox( { value, onChange } ) {\n\tconst [ filterValue, setFilterValue ] = useState( '' );\n\tconst { authors, isLoading } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getUsers, isResolving } = select( coreStore );\n\n\t\t\tconst query = { ...AUTHORS_QUERY };\n\t\t\tif ( filterValue ) {\n\t\t\t\tquery.search = filterValue;\n\t\t\t\tquery.search_columns = [ 'name' ];\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tauthors: getUsers( query ),\n\t\t\t\tisLoading: isResolving( 'getUsers', [ query ] ),\n\t\t\t};\n\t\t},\n\t\t[ filterValue ]\n\t);\n\n\tconst authorOptions = useMemo( () => {\n\t\tconst fetchedAuthors = ( authors ?? [] ).map( ( author ) => {\n\t\t\treturn {\n\t\t\t\tvalue: author.id,\n\t\t\t\tlabel: decodeEntities( author.name ),\n\t\t\t};\n\t\t} );\n\n\t\t// Ensure the current author is included in the list.\n\t\tconst foundAuthor = fetchedAuthors.findIndex(\n\t\t\t( fetchedAuthor ) => value?.id === fetchedAuthor.value\n\t\t);\n\n\t\tlet currentAuthor = [];\n\t\tif ( foundAuthor < 0 && value ) {\n\t\t\tcurrentAuthor = [\n\t\t\t\t{\n\t\t\t\t\tvalue: value.id,\n\t\t\t\t\tlabel: decodeEntities( value.name ),\n\t\t\t\t},\n\t\t\t];\n\t\t} else if ( foundAuthor < 0 && ! value ) {\n\t\t\tcurrentAuthor = [\n\t\t\t\t{\n\t\t\t\t\tvalue: 0,\n\t\t\t\t\tlabel: __( '(No author)' ),\n\t\t\t\t},\n\t\t\t];\n\t\t}\n\n\t\treturn [ ...currentAuthor, ...fetchedAuthors ];\n\t}, [ authors, value ] );\n\n\treturn (\n\t\t<ComboboxControl\n\t\t\t__next40pxDefaultSize\n\t\t\tlabel={ __( 'Author' ) }\n\t\t\toptions={ authorOptions }\n\t\t\tvalue={ value?.id }\n\t\t\tonFilterValueChange={ debounce( setFilterValue, 300 ) }\n\t\t\tonChange={ onChange }\n\t\t\tallowReset={ false }\n\t\t\tisLoading={ isLoading }\n\t\t/>\n\t);\n}\n\nfunction PostAuthorEdit( {\n\tisSelected,\n\tcontext: { postType, postId, queryId },\n\tattributes,\n\tsetAttributes,\n\tclientId,\n} ) {\n\tconst isDescendentOfQueryLoop = Number.isFinite( queryId );\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst defaultAvatar = useDefaultAvatar();\n\n\tconst { authorDetails, canAssignAuthor, supportsAuthor } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEditedEntityRecord, getUser, getPostType } =\n\t\t\t\tselect( coreStore );\n\t\t\tconst currentPost = getEditedEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\tpostType,\n\t\t\t\tpostId\n\t\t\t);\n\t\t\tconst authorId = currentPost?.author;\n\n\t\t\treturn {\n\t\t\t\tauthorDetails: authorId\n\t\t\t\t\t? getUser( authorId, { context: 'view' } )\n\t\t\t\t\t: null,\n\t\t\t\tsupportsAuthor:\n\t\t\t\t\tgetPostType( postType )?.supports?.author ?? false,\n\t\t\t\tcanAssignAuthor: currentPost?._links?.[\n\t\t\t\t\t'wp:action-assign-author'\n\t\t\t\t]\n\t\t\t\t\t? true\n\t\t\t\t\t: false,\n\t\t\t};\n\t\t},\n\t\t[ postType, postId ]\n\t);\n\tconst blockTypes = useSelect(\n\t\t( select ) => select( blocksStore ).getBlockTypes(),\n\t\t[]\n\t);\n\tconst { editEntityRecord } = useDispatch( coreStore );\n\tconst { replaceBlock } = useDispatch( blockEditorStore );\n\n\tconst {\n\t\ttextAlign,\n\t\tshowAvatar,\n\t\tshowBio,\n\t\tbyline,\n\t\tisLink,\n\t\tlinkTarget,\n\t\tavatarSize,\n\t} = attributes;\n\tconst avatarSizes = [];\n\tconst authorName = authorDetails?.name || __( 'Post Author' );\n\tif ( authorDetails?.avatar_urls ) {\n\t\tObject.keys( authorDetails.avatar_urls ).forEach( ( size ) => {\n\t\t\tavatarSizes.push( {\n\t\t\t\tvalue: size,\n\t\t\t\tlabel: `${ size } x ${ size }`,\n\t\t\t} );\n\t\t} );\n\t}\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: clsx( {\n\t\t\t[ `has-text-align-${ textAlign }` ]: textAlign,\n\t\t} ),\n\t} );\n\n\tconst handleSelect = ( nextAuthorId ) => {\n\t\teditEntityRecord( 'postType', postType, postId, {\n\t\t\tauthor: nextAuthorId,\n\t\t} );\n\t};\n\n\tconst showAuthorControl =\n\t\t!! postId && ! isDescendentOfQueryLoop && canAssignAuthor;\n\n\tif ( ! supportsAuthor && postType !== undefined ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t{ sprintf(\n\t\t\t\t\t// translators: %s: Name of the post type e.g: \"post\".\n\t\t\t\t\t__( 'This post type (%s) does not support the author.' ),\n\t\t\t\t\tpostType\n\t\t\t\t) }\n\t\t\t</div>\n\t\t);\n\t}\n\n\tfunction transformBlock() {\n\t\treplaceBlock(\n\t\t\tclientId,\n\t\t\trecreateWithRecommendedBlocks( attributes, blockTypes )\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls>\n\t\t\t\t<ToolsPanel\n\t\t\t\t\tlabel={ __( 'Settings' ) }\n\t\t\t\t\tresetAll={ () => {\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\tavatarSize: 48,\n\t\t\t\t\t\t\tshowAvatar: true,\n\t\t\t\t\t\t\tisLink: false,\n\t\t\t\t\t\t\tlinkTarget: '_self',\n\t\t\t\t\t\t} );\n\t\t\t\t\t} }\n\t\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t\t>\n\t\t\t\t\t{ showAuthorControl && (\n\t\t\t\t\t\t<div style={ { gridColumn: '1 / -1' } }>\n\t\t\t\t\t\t\t<AuthorCombobox\n\t\t\t\t\t\t\t\tvalue={ authorDetails }\n\t\t\t\t\t\t\t\tonChange={ handleSelect }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) }\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Show avatar' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => ! showAvatar }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( { showAvatar: true } )\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Show avatar' ) }\n\t\t\t\t\t\t\tchecked={ showAvatar }\n\t\t\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\tshowAvatar: ! showAvatar,\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t{ showAvatar && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tlabel={ __( 'Avatar size' ) }\n\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\thasValue={ () => avatarSize !== 48 }\n\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\tsetAttributes( { avatarSize: 48 } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<SelectControl\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\tlabel={ __( 'Avatar size' ) }\n\t\t\t\t\t\t\t\tvalue={ avatarSize }\n\t\t\t\t\t\t\t\toptions={ avatarSizes }\n\t\t\t\t\t\t\t\tonChange={ ( size ) => {\n\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\tavatarSize: Number( size ),\n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Show bio' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => !! showBio }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( { showBio: undefined } )\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Show bio' ) }\n\t\t\t\t\t\t\tchecked={ !! showBio }\n\t\t\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\t\t\tsetAttributes( { showBio: ! showBio } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Link author name to author page' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => !! isLink }\n\t\t\t\t\t\tonDeselect={ () => setAttributes( { isLink: false } ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Link author name to author page' ) }\n\t\t\t\t\t\t\tchecked={ isLink }\n\t\t\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\t\t\tsetAttributes( { isLink: ! isLink } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t{ isLink && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tlabel={ __( 'Link target' ) }\n\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\thasValue={ () => linkTarget !== '_self' }\n\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\tsetAttributes( { linkTarget: '_self' } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Open in new tab' ) }\n\t\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\tlinkTarget: value ? '_blank' : '_self',\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchecked={ linkTarget === '_blank' }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t</ToolsPanel>\n\t\t\t</InspectorControls>\n\t\t\t{ blockTypes.some(\n\t\t\t\t( blockType ) => blockType.name === 'core/group'\n\t\t\t) && (\n\t\t\t\t<InspectorControlsLastItem>\n\t\t\t\t\t<VStack\n\t\t\t\t\t\tclassName=\"wp-block-post-author__transform\"\n\t\t\t\t\t\talignment=\"left\"\n\t\t\t\t\t\tspacing={ 4 }\n\t\t\t\t\t>\n\t\t\t\t\t\t<Text as=\"p\">\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'This block is no longer supported. Recreate its design with the Avatar, Author Name and Author Biography blocks.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tonClick={ transformBlock }\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Recreate' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</VStack>\n\t\t\t\t</InspectorControlsLastItem>\n\t\t\t) }\n\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t<AlignmentControl\n\t\t\t\t\tvalue={ textAlign }\n\t\t\t\t\tonChange={ ( nextAlign ) => {\n\t\t\t\t\t\tsetAttributes( { textAlign: nextAlign } );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t</BlockControls>\n\n\t\t\t<div { ...blockProps }>\n\t\t\t\t{ showAvatar && (\n\t\t\t\t\t<div className=\"wp-block-post-author__avatar\">\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\twidth={ avatarSize }\n\t\t\t\t\t\t\tsrc={\n\t\t\t\t\t\t\t\tauthorDetails?.avatar_urls?.[ avatarSize ] ||\n\t\t\t\t\t\t\t\tdefaultAvatar\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\talt={\n\t\t\t\t\t\t\t\tauthorDetails?.name || __( 'Default Avatar' )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t\t<div className=\"wp-block-post-author__content\">\n\t\t\t\t\t{ ( ! RichText.isEmpty( byline ) || isSelected ) && (\n\t\t\t\t\t\t<RichText\n\t\t\t\t\t\t\tidentifier=\"byline\"\n\t\t\t\t\t\t\tclassName=\"wp-block-post-author__byline\"\n\t\t\t\t\t\t\taria-label={ __( 'Post author byline text' ) }\n\t\t\t\t\t\t\tplaceholder={ __( 'Write byline\u2026' ) }\n\t\t\t\t\t\t\tvalue={ byline }\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tsetAttributes( { byline: value } )\n\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<p className=\"wp-block-post-author__name\">\n\t\t\t\t\t\t{ isLink ? (\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\thref=\"#post-author-pseudo-link\"\n\t\t\t\t\t\t\t\tonClick={ ( event ) => event.preventDefault() }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ authorName }\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tauthorName\n\t\t\t\t\t\t) }\n\t\t\t\t\t</p>\n\t\t\t\t\t{ showBio && (\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tclassName=\"wp-block-post-author__bio\"\n\t\t\t\t\t\t\tdangerouslySetInnerHTML={ {\n\t\t\t\t\t\t\t\t__html: authorDetails?.description,\n\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</div>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nexport default PostAuthorEdit;\n"],
|
|
5
|
-
"mappings": "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
|
|
6
|
-
"names": ["blockEditorPrivateApis", "coreStore", "blocksStore", "blockEditorStore", "clsx", "ToolsPanel", "ToolsPanelItem", "VStack", "
|
|
4
|
+
"sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tAlignmentControl,\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport {\n\tButton,\n\tComboboxControl,\n\tSelectControl,\n\tToggleControl,\n\t__experimentalText as WCText,\n\t__experimentalVStack as VStack,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { debounce } from '@wordpress/compose';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { useMemo, useState } from '@wordpress/element';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as blocksStore } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { recreateWithRecommendedBlocks } from './utils';\nimport {\n\tuseDefaultAvatar,\n\tuseToolsPanelDropdownMenuProps,\n} from '../utils/hooks';\nimport { unlock } from '../lock-unlock';\n\nconst { InspectorControlsLastItem } = unlock( blockEditorPrivateApis );\n\nconst AUTHORS_QUERY = {\n\twho: 'authors',\n\tper_page: 100,\n\t_fields: 'id,name',\n\tcontext: 'view',\n};\n\nfunction AuthorCombobox( { value, onChange } ) {\n\tconst [ filterValue, setFilterValue ] = useState( '' );\n\tconst { authors, isLoading } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getUsers, isResolving } = select( coreStore );\n\n\t\t\tconst query = { ...AUTHORS_QUERY };\n\t\t\tif ( filterValue ) {\n\t\t\t\tquery.search = filterValue;\n\t\t\t\tquery.search_columns = [ 'name' ];\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tauthors: getUsers( query ),\n\t\t\t\tisLoading: isResolving( 'getUsers', [ query ] ),\n\t\t\t};\n\t\t},\n\t\t[ filterValue ]\n\t);\n\n\tconst authorOptions = useMemo( () => {\n\t\tconst fetchedAuthors = ( authors ?? [] ).map( ( author ) => {\n\t\t\treturn {\n\t\t\t\tvalue: author.id,\n\t\t\t\tlabel: decodeEntities( author.name ),\n\t\t\t};\n\t\t} );\n\n\t\t// Ensure the current author is included in the list.\n\t\tconst foundAuthor = fetchedAuthors.findIndex(\n\t\t\t( fetchedAuthor ) => value?.id === fetchedAuthor.value\n\t\t);\n\n\t\tlet currentAuthor = [];\n\t\tif ( foundAuthor < 0 && value ) {\n\t\t\tcurrentAuthor = [\n\t\t\t\t{\n\t\t\t\t\tvalue: value.id,\n\t\t\t\t\tlabel: decodeEntities( value.name ),\n\t\t\t\t},\n\t\t\t];\n\t\t} else if ( foundAuthor < 0 && ! value ) {\n\t\t\tcurrentAuthor = [\n\t\t\t\t{\n\t\t\t\t\tvalue: 0,\n\t\t\t\t\tlabel: __( '(No author)' ),\n\t\t\t\t},\n\t\t\t];\n\t\t}\n\n\t\treturn [ ...currentAuthor, ...fetchedAuthors ];\n\t}, [ authors, value ] );\n\n\treturn (\n\t\t<ComboboxControl\n\t\t\t__next40pxDefaultSize\n\t\t\tlabel={ __( 'Author' ) }\n\t\t\toptions={ authorOptions }\n\t\t\tvalue={ value?.id }\n\t\t\tonFilterValueChange={ debounce( setFilterValue, 300 ) }\n\t\t\tonChange={ onChange }\n\t\t\tallowReset={ false }\n\t\t\tisLoading={ isLoading }\n\t\t/>\n\t);\n}\n\nfunction PostAuthorEdit( {\n\tisSelected,\n\tcontext: { postType, postId, queryId },\n\tattributes,\n\tsetAttributes,\n\tclientId,\n} ) {\n\tconst isDescendentOfQueryLoop = Number.isFinite( queryId );\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\tconst defaultAvatar = useDefaultAvatar();\n\n\tconst { authorDetails, canAssignAuthor, supportsAuthor } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEditedEntityRecord, getUser, getPostType } =\n\t\t\t\tselect( coreStore );\n\t\t\tconst currentPost = getEditedEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\tpostType,\n\t\t\t\tpostId\n\t\t\t);\n\t\t\tconst authorId = currentPost?.author;\n\n\t\t\treturn {\n\t\t\t\tauthorDetails: authorId\n\t\t\t\t\t? getUser( authorId, { context: 'view' } )\n\t\t\t\t\t: null,\n\t\t\t\tsupportsAuthor:\n\t\t\t\t\tgetPostType( postType )?.supports?.author ?? false,\n\t\t\t\tcanAssignAuthor: currentPost?._links?.[\n\t\t\t\t\t'wp:action-assign-author'\n\t\t\t\t]\n\t\t\t\t\t? true\n\t\t\t\t\t: false,\n\t\t\t};\n\t\t},\n\t\t[ postType, postId ]\n\t);\n\tconst blockTypes = useSelect(\n\t\t( select ) => select( blocksStore ).getBlockTypes(),\n\t\t[]\n\t);\n\tconst { editEntityRecord } = useDispatch( coreStore );\n\tconst { replaceBlock } = useDispatch( blockEditorStore );\n\n\tconst {\n\t\ttextAlign,\n\t\tshowAvatar,\n\t\tshowBio,\n\t\tbyline,\n\t\tisLink,\n\t\tlinkTarget,\n\t\tavatarSize,\n\t} = attributes;\n\tconst avatarSizes = [];\n\tconst authorName = authorDetails?.name || __( 'Post Author' );\n\tif ( authorDetails?.avatar_urls ) {\n\t\tObject.keys( authorDetails.avatar_urls ).forEach( ( size ) => {\n\t\t\tavatarSizes.push( {\n\t\t\t\tvalue: size,\n\t\t\t\tlabel: `${ size } x ${ size }`,\n\t\t\t} );\n\t\t} );\n\t}\n\n\tconst blockProps = useBlockProps( {\n\t\tclassName: clsx( {\n\t\t\t[ `has-text-align-${ textAlign }` ]: textAlign,\n\t\t} ),\n\t} );\n\n\tconst handleSelect = ( nextAuthorId ) => {\n\t\teditEntityRecord( 'postType', postType, postId, {\n\t\t\tauthor: nextAuthorId,\n\t\t} );\n\t};\n\n\tconst showAuthorControl =\n\t\t!! postId && ! isDescendentOfQueryLoop && canAssignAuthor;\n\n\tif ( ! supportsAuthor && postType !== undefined ) {\n\t\treturn (\n\t\t\t<div { ...blockProps }>\n\t\t\t\t{ sprintf(\n\t\t\t\t\t// translators: %s: Name of the post type e.g: \"post\".\n\t\t\t\t\t__( 'This post type (%s) does not support the author.' ),\n\t\t\t\t\tpostType\n\t\t\t\t) }\n\t\t\t</div>\n\t\t);\n\t}\n\n\tfunction transformBlock() {\n\t\treplaceBlock(\n\t\t\tclientId,\n\t\t\trecreateWithRecommendedBlocks( attributes, blockTypes )\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls>\n\t\t\t\t<ToolsPanel\n\t\t\t\t\tlabel={ __( 'Settings' ) }\n\t\t\t\t\tresetAll={ () => {\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\tavatarSize: 48,\n\t\t\t\t\t\t\tshowAvatar: true,\n\t\t\t\t\t\t\tisLink: false,\n\t\t\t\t\t\t\tlinkTarget: '_self',\n\t\t\t\t\t\t} );\n\t\t\t\t\t} }\n\t\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t\t>\n\t\t\t\t\t{ showAuthorControl && (\n\t\t\t\t\t\t<div style={ { gridColumn: '1 / -1' } }>\n\t\t\t\t\t\t\t<AuthorCombobox\n\t\t\t\t\t\t\t\tvalue={ authorDetails }\n\t\t\t\t\t\t\t\tonChange={ handleSelect }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) }\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Show avatar' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => ! showAvatar }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( { showAvatar: true } )\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Show avatar' ) }\n\t\t\t\t\t\t\tchecked={ showAvatar }\n\t\t\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\tshowAvatar: ! showAvatar,\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t{ showAvatar && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tlabel={ __( 'Avatar size' ) }\n\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\thasValue={ () => avatarSize !== 48 }\n\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\tsetAttributes( { avatarSize: 48 } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<SelectControl\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\tlabel={ __( 'Avatar size' ) }\n\t\t\t\t\t\t\t\tvalue={ avatarSize }\n\t\t\t\t\t\t\t\toptions={ avatarSizes }\n\t\t\t\t\t\t\t\tonChange={ ( size ) => {\n\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\tavatarSize: Number( size ),\n\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Show bio' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => !! showBio }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( { showBio: undefined } )\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Show bio' ) }\n\t\t\t\t\t\t\tchecked={ !! showBio }\n\t\t\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\t\t\tsetAttributes( { showBio: ! showBio } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tlabel={ __( 'Link author name to author page' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => !! isLink }\n\t\t\t\t\t\tonDeselect={ () => setAttributes( { isLink: false } ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Link author name to author page' ) }\n\t\t\t\t\t\t\tchecked={ isLink }\n\t\t\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\t\t\tsetAttributes( { isLink: ! isLink } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t{ isLink && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tlabel={ __( 'Link target' ) }\n\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\thasValue={ () => linkTarget !== '_self' }\n\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\tsetAttributes( { linkTarget: '_self' } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Open in new tab' ) }\n\t\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\tlinkTarget: value ? '_blank' : '_self',\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchecked={ linkTarget === '_blank' }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t</ToolsPanel>\n\t\t\t</InspectorControls>\n\t\t\t{ blockTypes.some(\n\t\t\t\t( blockType ) => blockType.name === 'core/group'\n\t\t\t) && (\n\t\t\t\t<InspectorControlsLastItem>\n\t\t\t\t\t<VStack\n\t\t\t\t\t\tclassName=\"wp-block-post-author__transform\"\n\t\t\t\t\t\talignment=\"left\"\n\t\t\t\t\t\tspacing={ 4 }\n\t\t\t\t\t>\n\t\t\t\t\t\t<WCText as=\"p\">\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'This block is no longer supported. Recreate its design with the Avatar, Author Name and Author Biography blocks.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</WCText>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tonClick={ transformBlock }\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Recreate' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</VStack>\n\t\t\t\t</InspectorControlsLastItem>\n\t\t\t) }\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t<AlignmentControl\n\t\t\t\t\tvalue={ textAlign }\n\t\t\t\t\tonChange={ ( nextAlign ) => {\n\t\t\t\t\t\tsetAttributes( { textAlign: nextAlign } );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t</BlockControls>\n\t\t\t<div { ...blockProps }>\n\t\t\t\t{ showAvatar && (\n\t\t\t\t\t<div className=\"wp-block-post-author__avatar\">\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\twidth={ avatarSize }\n\t\t\t\t\t\t\tsrc={\n\t\t\t\t\t\t\t\tauthorDetails?.avatar_urls?.[ avatarSize ] ||\n\t\t\t\t\t\t\t\tdefaultAvatar\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\talt={\n\t\t\t\t\t\t\t\tauthorDetails?.name || __( 'Default Avatar' )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t) }\n\t\t\t\t<div className=\"wp-block-post-author__content\">\n\t\t\t\t\t{ ( ! RichText.isEmpty( byline ) || isSelected ) && (\n\t\t\t\t\t\t<RichText\n\t\t\t\t\t\t\tidentifier=\"byline\"\n\t\t\t\t\t\t\tclassName=\"wp-block-post-author__byline\"\n\t\t\t\t\t\t\taria-label={ __( 'Post author byline text' ) }\n\t\t\t\t\t\t\tplaceholder={ __( 'Write byline\u2026' ) }\n\t\t\t\t\t\t\tvalue={ byline }\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tsetAttributes( { byline: value } )\n\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<p className=\"wp-block-post-author__name\">\n\t\t\t\t\t\t{ isLink ? (\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\thref=\"#post-author-pseudo-link\"\n\t\t\t\t\t\t\t\tonClick={ ( event ) => event.preventDefault() }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ authorName }\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tauthorName\n\t\t\t\t\t\t) }\n\t\t\t\t\t</p>\n\t\t\t\t\t{ showBio && (\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tclassName=\"wp-block-post-author__bio\"\n\t\t\t\t\t\t\tdangerouslySetInnerHTML={ {\n\t\t\t\t\t\t\t\t__html: authorDetails?.description,\n\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</div>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nexport default PostAuthorEdit;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["blockEditorPrivateApis", "coreStore", "blocksStore", "blockEditorStore", "clsx", "ToolsPanel", "ToolsPanelItem", "VStack", "WCText"]
|
|
7
7
|
}
|
|
@@ -34,9 +34,9 @@ __export(edit_exports, {
|
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(edit_exports);
|
|
36
36
|
var import_block_editor = require("@wordpress/block-editor");
|
|
37
|
-
var import_components = require("@wordpress/components");
|
|
38
37
|
var import_compose = require("@wordpress/compose");
|
|
39
38
|
var import_i18n = require("@wordpress/i18n");
|
|
39
|
+
var import_ui = require("@wordpress/ui");
|
|
40
40
|
var import_form = __toESM(require("./form.cjs"));
|
|
41
41
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
42
42
|
function PostCommentsFormEdit({ context }) {
|
|
@@ -48,7 +48,7 @@ function PostCommentsFormEdit({ context }) {
|
|
|
48
48
|
});
|
|
49
49
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { ...blockProps, children: [
|
|
50
50
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form.default, { postId, postType }),
|
|
51
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
51
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ui.VisuallyHidden, { id: instanceIdDesc, children: (0, import_i18n.__)("Comments form disabled in editor.") })
|
|
52
52
|
] });
|
|
53
53
|
}
|
|
54
54
|
//# sourceMappingURL=edit.cjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/post-comments-form/edit.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useBlockProps } from '@wordpress/block-editor';\nimport {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,0BAA8B;AAC9B,
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useBlockProps } from '@wordpress/block-editor';\nimport { useInstanceId } from '@wordpress/compose';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { VisuallyHidden } from '@wordpress/ui';\n\n/**\n * Internal dependencies\n */\nimport CommentsForm from './form';\n\nexport default function PostCommentsFormEdit( { context } ) {\n\tconst { postId, postType } = context;\n\n\tconst instanceId = useInstanceId( PostCommentsFormEdit );\n\tconst instanceIdDesc = sprintf( 'comments-form-edit-%d-desc', instanceId );\n\n\tconst blockProps = useBlockProps( {\n\t\t'aria-describedby': instanceIdDesc,\n\t} );\n\n\treturn (\n\t\t<div { ...blockProps }>\n\t\t\t<CommentsForm postId={ postId } postType={ postType } />\n\t\t\t<VisuallyHidden id={ instanceIdDesc }>\n\t\t\t\t{ __( 'Comments form disabled in editor.' ) }\n\t\t\t</VisuallyHidden>\n\t\t</div>\n\t);\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,0BAA8B;AAC9B,qBAA8B;AAC9B,kBAA4B;AAC5B,gBAA+B;AAK/B,kBAAyB;AAavB;AAXa,SAAR,qBAAuC,EAAE,QAAQ,GAAI;AAC3D,QAAM,EAAE,QAAQ,SAAS,IAAI;AAE7B,QAAM,iBAAa,8BAAe,oBAAqB;AACvD,QAAM,qBAAiB,qBAAS,8BAA8B,UAAW;AAEzE,QAAM,iBAAa,mCAAe;AAAA,IACjC,oBAAoB;AAAA,EACrB,CAAE;AAEF,SACC,6CAAC,SAAM,GAAG,YACT;AAAA,gDAAC,YAAAA,SAAA,EAAa,QAAkB,UAAsB;AAAA,IACtD,4CAAC,4BAAe,IAAK,gBAClB,8BAAI,mCAAoC,GAC3C;AAAA,KACD;AAEF;",
|
|
6
6
|
"names": ["CommentsForm"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/query/edit/inspector-controls/author-control.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { FormTokenField } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { getEntitiesInfo } from '../../utils';\n\nconst AUTHORS_QUERY = {\n\twho: 'authors',\n\tper_page: -1,\n\t_fields: 'id,name',\n\tcontext: 'view',\n};\n\nfunction AuthorControl( { value, onChange } ) {\n\tconst authorsList = useSelect( ( select ) => {\n\t\tconst { getUsers } = select( coreStore );\n\t\treturn getUsers( AUTHORS_QUERY );\n\t}, [] );\n\n\tif ( ! authorsList ) {\n\t\treturn null;\n\t}\n\tconst authorsInfo = getEntitiesInfo( authorsList );\n\t/**\n\t * We need to normalize the value because the block operates on a\n\t * comma(`,`) separated string value and `FormTokenField` needs an\n\t * array.\n\t */\n\tconst normalizedValue = ! value ? [] : value.toString().split( ',' );\n\t// Returns only the existing authors ids. This prevents the component\n\t// from crashing in the editor, when non existing ids are provided.\n\tconst sanitizedValue = normalizedValue.reduce(\n\t\t( accumulator, authorId ) => {\n\t\t\tconst author = authorsInfo.mapById[ authorId ];\n\t\t\tif ( author ) {\n\t\t\t\taccumulator.push( {\n\t\t\t\t\tid: authorId,\n\t\t\t\t\tvalue: author.name,\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn accumulator;\n\t\t},\n\t\t[]\n\t);\n\n\tconst getIdByValue = ( entitiesMappedByName, authorValue ) => {\n\t\tconst id = authorValue?.id || entitiesMappedByName[ authorValue ]?.id;\n\t\tif ( id ) {\n\t\t\treturn id;\n\t\t}\n\t};\n\tconst onAuthorChange = ( newValue ) => {\n\t\tconst ids = Array.from(\n\t\t\tnewValue.reduce( ( accumulator, author ) => {\n\t\t\t\t// Verify that new values point to existing entities.\n\t\t\t\tconst id = getIdByValue( authorsInfo.mapByName, author );\n\t\t\t\tif ( id ) {\n\t\t\t\t\taccumulator.add( id );\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t}, new Set() )\n\t\t);\n\t\tonChange( { author: ids.join( ',' ) } );\n\t};\n\treturn (\n\t\t<FormTokenField\n\t\t\tlabel={ __( 'Authors' ) }\n\t\t\tvalue={ sanitizedValue }\n\t\t\tsuggestions={ authorsInfo.names }\n\t\t\tonChange={ onAuthorChange }\n\t\t\
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAmB;AACnB,wBAA+B;AAC/B,kBAA0B;AAC1B,uBAAmC;AAKnC,mBAAgC;AA6D9B;AA3DF,IAAM,gBAAgB;AAAA,EACrB,KAAK;AAAA,EACL,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AACV;AAEA,SAAS,cAAe,EAAE,OAAO,SAAS,GAAI;AAC7C,QAAM,kBAAc,uBAAW,CAAE,WAAY;AAC5C,UAAM,EAAE,SAAS,IAAI,OAAQ,iBAAAA,KAAU;AACvC,WAAO,SAAU,aAAc;AAAA,EAChC,GAAG,CAAC,CAAE;AAEN,MAAK,CAAE,aAAc;AACpB,WAAO;AAAA,EACR;AACA,QAAM,kBAAc,8BAAiB,WAAY;AAMjD,QAAM,kBAAkB,CAAE,QAAQ,CAAC,IAAI,MAAM,SAAS,EAAE,MAAO,GAAI;AAGnE,QAAM,iBAAiB,gBAAgB;AAAA,IACtC,CAAE,aAAa,aAAc;AAC5B,YAAM,SAAS,YAAY,QAAS,QAAS;AAC7C,UAAK,QAAS;AACb,oBAAY,KAAM;AAAA,UACjB,IAAI;AAAA,UACJ,OAAO,OAAO;AAAA,QACf,CAAE;AAAA,MACH;AACA,aAAO;AAAA,IACR;AAAA,IACA,CAAC;AAAA,EACF;AAEA,QAAM,eAAe,CAAE,sBAAsB,gBAAiB;AAC7D,UAAM,KAAK,aAAa,MAAM,qBAAsB,WAAY,GAAG;AACnE,QAAK,IAAK;AACT,aAAO;AAAA,IACR;AAAA,EACD;AACA,QAAM,iBAAiB,CAAE,aAAc;AACtC,UAAM,MAAM,MAAM;AAAA,MACjB,SAAS,OAAQ,CAAE,aAAa,WAAY;AAE3C,cAAM,KAAK,aAAc,YAAY,WAAW,MAAO;AACvD,YAAK,IAAK;AACT,sBAAY,IAAK,EAAG;AAAA,QACrB;AACA,eAAO;AAAA,MACR,GAAG,oBAAI,IAAI,CAAE;AAAA,IACd;AACA,aAAU,EAAE,QAAQ,IAAI,KAAM,GAAI,EAAE,CAAE;AAAA,EACvC;AACA,SACC;AAAA,IAAC;AAAA;AAAA,MACA,WAAQ,gBAAI,SAAU;AAAA,MACtB,OAAQ;AAAA,MACR,aAAc,YAAY;AAAA,MAC1B,UAAW;AAAA,MACX,
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { FormTokenField } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { getEntitiesInfo } from '../../utils';\n\nconst AUTHORS_QUERY = {\n\twho: 'authors',\n\tper_page: -1,\n\t_fields: 'id,name',\n\tcontext: 'view',\n};\n\nfunction AuthorControl( { value, onChange } ) {\n\tconst authorsList = useSelect( ( select ) => {\n\t\tconst { getUsers } = select( coreStore );\n\t\treturn getUsers( AUTHORS_QUERY );\n\t}, [] );\n\n\tif ( ! authorsList ) {\n\t\treturn null;\n\t}\n\tconst authorsInfo = getEntitiesInfo( authorsList );\n\t/**\n\t * We need to normalize the value because the block operates on a\n\t * comma(`,`) separated string value and `FormTokenField` needs an\n\t * array.\n\t */\n\tconst normalizedValue = ! value ? [] : value.toString().split( ',' );\n\t// Returns only the existing authors ids. This prevents the component\n\t// from crashing in the editor, when non existing ids are provided.\n\tconst sanitizedValue = normalizedValue.reduce(\n\t\t( accumulator, authorId ) => {\n\t\t\tconst author = authorsInfo.mapById[ authorId ];\n\t\t\tif ( author ) {\n\t\t\t\taccumulator.push( {\n\t\t\t\t\tid: authorId,\n\t\t\t\t\tvalue: author.name,\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn accumulator;\n\t\t},\n\t\t[]\n\t);\n\n\tconst getIdByValue = ( entitiesMappedByName, authorValue ) => {\n\t\tconst id = authorValue?.id || entitiesMappedByName[ authorValue ]?.id;\n\t\tif ( id ) {\n\t\t\treturn id;\n\t\t}\n\t};\n\tconst onAuthorChange = ( newValue ) => {\n\t\tconst ids = Array.from(\n\t\t\tnewValue.reduce( ( accumulator, author ) => {\n\t\t\t\t// Verify that new values point to existing entities.\n\t\t\t\tconst id = getIdByValue( authorsInfo.mapByName, author );\n\t\t\t\tif ( id ) {\n\t\t\t\t\taccumulator.add( id );\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t}, new Set() )\n\t\t);\n\t\tonChange( { author: ids.join( ',' ) } );\n\t};\n\treturn (\n\t\t<FormTokenField\n\t\t\tlabel={ __( 'Authors' ) }\n\t\t\tvalue={ sanitizedValue }\n\t\t\tsuggestions={ authorsInfo.names }\n\t\t\tonChange={ onAuthorChange }\n\t\t\thelp=\"\"\n\t\t\t__next40pxDefaultSize\n\t\t/>\n\t);\n}\n\nexport default AuthorControl;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAmB;AACnB,wBAA+B;AAC/B,kBAA0B;AAC1B,uBAAmC;AAKnC,mBAAgC;AA6D9B;AA3DF,IAAM,gBAAgB;AAAA,EACrB,KAAK;AAAA,EACL,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AACV;AAEA,SAAS,cAAe,EAAE,OAAO,SAAS,GAAI;AAC7C,QAAM,kBAAc,uBAAW,CAAE,WAAY;AAC5C,UAAM,EAAE,SAAS,IAAI,OAAQ,iBAAAA,KAAU;AACvC,WAAO,SAAU,aAAc;AAAA,EAChC,GAAG,CAAC,CAAE;AAEN,MAAK,CAAE,aAAc;AACpB,WAAO;AAAA,EACR;AACA,QAAM,kBAAc,8BAAiB,WAAY;AAMjD,QAAM,kBAAkB,CAAE,QAAQ,CAAC,IAAI,MAAM,SAAS,EAAE,MAAO,GAAI;AAGnE,QAAM,iBAAiB,gBAAgB;AAAA,IACtC,CAAE,aAAa,aAAc;AAC5B,YAAM,SAAS,YAAY,QAAS,QAAS;AAC7C,UAAK,QAAS;AACb,oBAAY,KAAM;AAAA,UACjB,IAAI;AAAA,UACJ,OAAO,OAAO;AAAA,QACf,CAAE;AAAA,MACH;AACA,aAAO;AAAA,IACR;AAAA,IACA,CAAC;AAAA,EACF;AAEA,QAAM,eAAe,CAAE,sBAAsB,gBAAiB;AAC7D,UAAM,KAAK,aAAa,MAAM,qBAAsB,WAAY,GAAG;AACnE,QAAK,IAAK;AACT,aAAO;AAAA,IACR;AAAA,EACD;AACA,QAAM,iBAAiB,CAAE,aAAc;AACtC,UAAM,MAAM,MAAM;AAAA,MACjB,SAAS,OAAQ,CAAE,aAAa,WAAY;AAE3C,cAAM,KAAK,aAAc,YAAY,WAAW,MAAO;AACvD,YAAK,IAAK;AACT,sBAAY,IAAK,EAAG;AAAA,QACrB;AACA,eAAO;AAAA,MACR,GAAG,oBAAI,IAAI,CAAE;AAAA,IACd;AACA,aAAU,EAAE,QAAQ,IAAI,KAAM,GAAI,EAAE,CAAE;AAAA,EACvC;AACA,SACC;AAAA,IAAC;AAAA;AAAA,MACA,WAAQ,gBAAI,SAAU;AAAA,MACtB,OAAQ;AAAA,MACR,aAAc,YAAY;AAAA,MAC1B,UAAW;AAAA,MACX,MAAK;AAAA,MACL,uBAAqB;AAAA;AAAA,EACtB;AAEF;AAEA,IAAO,yBAAQ;",
|
|
6
6
|
"names": ["coreStore"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/query/edit/inspector-controls/format-controls.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { FormTokenField } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { __ } from '@wordpress/i18n';\n\n// All WP post formats, sorted alphabetically by translated name.\n// Value is the post format slug. Label is the name.\nconst POST_FORMATS = [\n\t{ value: 'aside', label: __( 'Aside' ) },\n\t{ value: 'audio', label: __( 'Audio' ) },\n\t{ value: 'chat', label: __( 'Chat' ) },\n\t{ value: 'gallery', label: __( 'Gallery' ) },\n\t{ value: 'image', label: __( 'Image' ) },\n\t{ value: 'link', label: __( 'Link' ) },\n\t{ value: 'quote', label: __( 'Quote' ) },\n\t{ value: 'standard', label: __( 'Standard' ) },\n\t{ value: 'status', label: __( 'Status' ) },\n\t{ value: 'video', label: __( 'Video' ) },\n].sort( ( a, b ) => {\n\tconst normalizedA = a.label.toUpperCase();\n\tconst normalizedB = b.label.toUpperCase();\n\n\tif ( normalizedA < normalizedB ) {\n\t\treturn -1;\n\t}\n\tif ( normalizedA > normalizedB ) {\n\t\treturn 1;\n\t}\n\treturn 0;\n} );\n\n// A helper function to convert translatable post format names into their static values.\nfunction formatNamesToValues( names, formats ) {\n\treturn names\n\t\t.map( ( name ) => {\n\t\t\treturn formats.find(\n\t\t\t\t( item ) =>\n\t\t\t\t\titem.label.toLocaleLowerCase() === name.toLocaleLowerCase()\n\t\t\t)?.value;\n\t\t} )\n\t\t.filter( Boolean );\n}\n\nexport default function FormatControls( { onChange, query: { format } } ) {\n\t// 'format' is expected to be an array. If it is not an array, for example\n\t// if a user has manually entered an invalid value in the block markup,\n\t// convert it to an array to prevent JavaScript errors.\n\tconst normalizedFormats = Array.isArray( format ) ? format : [ format ];\n\n\tconst { supportedFormats } = useSelect( ( select ) => {\n\t\tconst themeSupports = select( coreStore ).getThemeSupports();\n\t\treturn {\n\t\t\tsupportedFormats: themeSupports.formats,\n\t\t};\n\t}, [] );\n\n\tconst formats = POST_FORMATS.filter( ( item ) =>\n\t\tsupportedFormats.includes( item.value )\n\t);\n\n\tconst values = normalizedFormats\n\t\t.map(\n\t\t\t( name ) => formats.find( ( item ) => item.value === name )?.label\n\t\t)\n\t\t.filter( Boolean );\n\n\tconst suggestions = formats\n\t\t.filter( ( item ) => ! normalizedFormats.includes( item.value ) )\n\t\t.map( ( item ) => item.label );\n\n\treturn (\n\t\t<FormTokenField\n\t\t\tlabel={ __( 'Formats' ) }\n\t\t\tvalue={ values }\n\t\t\tsuggestions={ suggestions }\n\t\t\tonChange={ ( newValues ) => {\n\t\t\t\tonChange( {\n\t\t\t\t\tformat: formatNamesToValues( newValues, formats ),\n\t\t\t\t} );\n\t\t\t} }\n\t\t\
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,wBAA+B;AAC/B,kBAA0B;AAC1B,uBAAmC;AACnC,kBAAmB;AAoEjB;AAhEF,IAAM,eAAe;AAAA,EACpB,EAAE,OAAO,SAAS,WAAO,gBAAI,OAAQ,EAAE;AAAA,EACvC,EAAE,OAAO,SAAS,WAAO,gBAAI,OAAQ,EAAE;AAAA,EACvC,EAAE,OAAO,QAAQ,WAAO,gBAAI,MAAO,EAAE;AAAA,EACrC,EAAE,OAAO,WAAW,WAAO,gBAAI,SAAU,EAAE;AAAA,EAC3C,EAAE,OAAO,SAAS,WAAO,gBAAI,OAAQ,EAAE;AAAA,EACvC,EAAE,OAAO,QAAQ,WAAO,gBAAI,MAAO,EAAE;AAAA,EACrC,EAAE,OAAO,SAAS,WAAO,gBAAI,OAAQ,EAAE;AAAA,EACvC,EAAE,OAAO,YAAY,WAAO,gBAAI,UAAW,EAAE;AAAA,EAC7C,EAAE,OAAO,UAAU,WAAO,gBAAI,QAAS,EAAE;AAAA,EACzC,EAAE,OAAO,SAAS,WAAO,gBAAI,OAAQ,EAAE;AACxC,EAAE,KAAM,CAAE,GAAG,MAAO;AACnB,QAAM,cAAc,EAAE,MAAM,YAAY;AACxC,QAAM,cAAc,EAAE,MAAM,YAAY;AAExC,MAAK,cAAc,aAAc;AAChC,WAAO;AAAA,EACR;AACA,MAAK,cAAc,aAAc;AAChC,WAAO;AAAA,EACR;AACA,SAAO;AACR,CAAE;AAGF,SAAS,oBAAqB,OAAO,SAAU;AAC9C,SAAO,MACL,IAAK,CAAE,SAAU;AACjB,WAAO,QAAQ;AAAA,MACd,CAAE,SACD,KAAK,MAAM,kBAAkB,MAAM,KAAK,kBAAkB;AAAA,IAC5D,GAAG;AAAA,EACJ,CAAE,EACD,OAAQ,OAAQ;AACnB;AAEe,SAAR,eAAiC,EAAE,UAAU,OAAO,EAAE,OAAO,EAAE,GAAI;AAIzE,QAAM,oBAAoB,MAAM,QAAS,MAAO,IAAI,SAAS,CAAE,MAAO;AAEtE,QAAM,EAAE,iBAAiB,QAAI,uBAAW,CAAE,WAAY;AACrD,UAAM,gBAAgB,OAAQ,iBAAAA,KAAU,EAAE,iBAAiB;AAC3D,WAAO;AAAA,MACN,kBAAkB,cAAc;AAAA,IACjC;AAAA,EACD,GAAG,CAAC,CAAE;AAEN,QAAM,UAAU,aAAa;AAAA,IAAQ,CAAE,SACtC,iBAAiB,SAAU,KAAK,KAAM;AAAA,EACvC;AAEA,QAAM,SAAS,kBACb;AAAA,IACA,CAAE,SAAU,QAAQ,KAAM,CAAE,SAAU,KAAK,UAAU,IAAK,GAAG;AAAA,EAC9D,EACC,OAAQ,OAAQ;AAElB,QAAM,cAAc,QAClB,OAAQ,CAAE,SAAU,CAAE,kBAAkB,SAAU,KAAK,KAAM,CAAE,EAC/D,IAAK,CAAE,SAAU,KAAK,KAAM;AAE9B,SACC;AAAA,IAAC;AAAA;AAAA,MACA,WAAQ,gBAAI,SAAU;AAAA,MACtB,OAAQ;AAAA,MACR;AAAA,MACA,UAAW,CAAE,cAAe;AAC3B,iBAAU;AAAA,UACT,QAAQ,oBAAqB,WAAW,OAAQ;AAAA,QACjD,CAAE;AAAA,MACH;AAAA,MACA,
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { FormTokenField } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { __ } from '@wordpress/i18n';\n\n// All WP post formats, sorted alphabetically by translated name.\n// Value is the post format slug. Label is the name.\nconst POST_FORMATS = [\n\t{ value: 'aside', label: __( 'Aside' ) },\n\t{ value: 'audio', label: __( 'Audio' ) },\n\t{ value: 'chat', label: __( 'Chat' ) },\n\t{ value: 'gallery', label: __( 'Gallery' ) },\n\t{ value: 'image', label: __( 'Image' ) },\n\t{ value: 'link', label: __( 'Link' ) },\n\t{ value: 'quote', label: __( 'Quote' ) },\n\t{ value: 'standard', label: __( 'Standard' ) },\n\t{ value: 'status', label: __( 'Status' ) },\n\t{ value: 'video', label: __( 'Video' ) },\n].sort( ( a, b ) => {\n\tconst normalizedA = a.label.toUpperCase();\n\tconst normalizedB = b.label.toUpperCase();\n\n\tif ( normalizedA < normalizedB ) {\n\t\treturn -1;\n\t}\n\tif ( normalizedA > normalizedB ) {\n\t\treturn 1;\n\t}\n\treturn 0;\n} );\n\n// A helper function to convert translatable post format names into their static values.\nfunction formatNamesToValues( names, formats ) {\n\treturn names\n\t\t.map( ( name ) => {\n\t\t\treturn formats.find(\n\t\t\t\t( item ) =>\n\t\t\t\t\titem.label.toLocaleLowerCase() === name.toLocaleLowerCase()\n\t\t\t)?.value;\n\t\t} )\n\t\t.filter( Boolean );\n}\n\nexport default function FormatControls( { onChange, query: { format } } ) {\n\t// 'format' is expected to be an array. If it is not an array, for example\n\t// if a user has manually entered an invalid value in the block markup,\n\t// convert it to an array to prevent JavaScript errors.\n\tconst normalizedFormats = Array.isArray( format ) ? format : [ format ];\n\n\tconst { supportedFormats } = useSelect( ( select ) => {\n\t\tconst themeSupports = select( coreStore ).getThemeSupports();\n\t\treturn {\n\t\t\tsupportedFormats: themeSupports.formats,\n\t\t};\n\t}, [] );\n\n\tconst formats = POST_FORMATS.filter( ( item ) =>\n\t\tsupportedFormats.includes( item.value )\n\t);\n\n\tconst values = normalizedFormats\n\t\t.map(\n\t\t\t( name ) => formats.find( ( item ) => item.value === name )?.label\n\t\t)\n\t\t.filter( Boolean );\n\n\tconst suggestions = formats\n\t\t.filter( ( item ) => ! normalizedFormats.includes( item.value ) )\n\t\t.map( ( item ) => item.label );\n\n\treturn (\n\t\t<FormTokenField\n\t\t\tlabel={ __( 'Formats' ) }\n\t\t\tvalue={ values }\n\t\t\tsuggestions={ suggestions }\n\t\t\tonChange={ ( newValues ) => {\n\t\t\t\tonChange( {\n\t\t\t\t\tformat: formatNamesToValues( newValues, formats ),\n\t\t\t\t} );\n\t\t\t} }\n\t\t\thelp=\"\"\n\t\t\t__experimentalExpandOnFocus\n\t\t\t__next40pxDefaultSize\n\t\t/>\n\t);\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,wBAA+B;AAC/B,kBAA0B;AAC1B,uBAAmC;AACnC,kBAAmB;AAoEjB;AAhEF,IAAM,eAAe;AAAA,EACpB,EAAE,OAAO,SAAS,WAAO,gBAAI,OAAQ,EAAE;AAAA,EACvC,EAAE,OAAO,SAAS,WAAO,gBAAI,OAAQ,EAAE;AAAA,EACvC,EAAE,OAAO,QAAQ,WAAO,gBAAI,MAAO,EAAE;AAAA,EACrC,EAAE,OAAO,WAAW,WAAO,gBAAI,SAAU,EAAE;AAAA,EAC3C,EAAE,OAAO,SAAS,WAAO,gBAAI,OAAQ,EAAE;AAAA,EACvC,EAAE,OAAO,QAAQ,WAAO,gBAAI,MAAO,EAAE;AAAA,EACrC,EAAE,OAAO,SAAS,WAAO,gBAAI,OAAQ,EAAE;AAAA,EACvC,EAAE,OAAO,YAAY,WAAO,gBAAI,UAAW,EAAE;AAAA,EAC7C,EAAE,OAAO,UAAU,WAAO,gBAAI,QAAS,EAAE;AAAA,EACzC,EAAE,OAAO,SAAS,WAAO,gBAAI,OAAQ,EAAE;AACxC,EAAE,KAAM,CAAE,GAAG,MAAO;AACnB,QAAM,cAAc,EAAE,MAAM,YAAY;AACxC,QAAM,cAAc,EAAE,MAAM,YAAY;AAExC,MAAK,cAAc,aAAc;AAChC,WAAO;AAAA,EACR;AACA,MAAK,cAAc,aAAc;AAChC,WAAO;AAAA,EACR;AACA,SAAO;AACR,CAAE;AAGF,SAAS,oBAAqB,OAAO,SAAU;AAC9C,SAAO,MACL,IAAK,CAAE,SAAU;AACjB,WAAO,QAAQ;AAAA,MACd,CAAE,SACD,KAAK,MAAM,kBAAkB,MAAM,KAAK,kBAAkB;AAAA,IAC5D,GAAG;AAAA,EACJ,CAAE,EACD,OAAQ,OAAQ;AACnB;AAEe,SAAR,eAAiC,EAAE,UAAU,OAAO,EAAE,OAAO,EAAE,GAAI;AAIzE,QAAM,oBAAoB,MAAM,QAAS,MAAO,IAAI,SAAS,CAAE,MAAO;AAEtE,QAAM,EAAE,iBAAiB,QAAI,uBAAW,CAAE,WAAY;AACrD,UAAM,gBAAgB,OAAQ,iBAAAA,KAAU,EAAE,iBAAiB;AAC3D,WAAO;AAAA,MACN,kBAAkB,cAAc;AAAA,IACjC;AAAA,EACD,GAAG,CAAC,CAAE;AAEN,QAAM,UAAU,aAAa;AAAA,IAAQ,CAAE,SACtC,iBAAiB,SAAU,KAAK,KAAM;AAAA,EACvC;AAEA,QAAM,SAAS,kBACb;AAAA,IACA,CAAE,SAAU,QAAQ,KAAM,CAAE,SAAU,KAAK,UAAU,IAAK,GAAG;AAAA,EAC9D,EACC,OAAQ,OAAQ;AAElB,QAAM,cAAc,QAClB,OAAQ,CAAE,SAAU,CAAE,kBAAkB,SAAU,KAAK,KAAM,CAAE,EAC/D,IAAK,CAAE,SAAU,KAAK,KAAM;AAE9B,SACC;AAAA,IAAC;AAAA;AAAA,MACA,WAAQ,gBAAI,SAAU;AAAA,MACtB,OAAQ;AAAA,MACR;AAAA,MACA,UAAW,CAAE,cAAe;AAC3B,iBAAU;AAAA,UACT,QAAQ,oBAAqB,WAAW,OAAQ;AAAA,QACjD,CAAE;AAAA,MACH;AAAA,MACA,MAAK;AAAA,MACL,6BAA2B;AAAA,MAC3B,uBAAqB;AAAA;AAAA,EACtB;AAEF;",
|
|
6
6
|
"names": ["coreStore"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/query/edit/inspector-controls/parent-control.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { FormTokenField } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useState, useEffect, useMemo } from '@wordpress/element';\nimport { useDebounce } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { getEntitiesInfo, mapToIHasNameAndId } from '../../utils';\n\nconst EMPTY_ARRAY = [];\nconst BASE_QUERY = {\n\torder: 'asc',\n\t_fields: 'id,title',\n\tcontext: 'view',\n};\n\nfunction ParentControl( { parents, postType, onChange } ) {\n\tconst [ search, setSearch ] = useState( '' );\n\tconst [ value, setValue ] = useState( EMPTY_ARRAY );\n\tconst [ suggestions, setSuggestions ] = useState( EMPTY_ARRAY );\n\tconst debouncedSearch = useDebounce( setSearch, 250 );\n\tconst { searchResults, searchHasResolved } = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! search ) {\n\t\t\t\treturn { searchResults: EMPTY_ARRAY, searchHasResolved: true };\n\t\t\t}\n\t\t\tconst { getEntityRecords, hasFinishedResolution } =\n\t\t\t\tselect( coreStore );\n\t\t\tconst selectorArgs = [\n\t\t\t\t'postType',\n\t\t\t\tpostType,\n\t\t\t\t{\n\t\t\t\t\t...BASE_QUERY,\n\t\t\t\t\tsearch,\n\t\t\t\t\torderby: 'relevance',\n\t\t\t\t\texclude: parents,\n\t\t\t\t\tper_page: 20,\n\t\t\t\t},\n\t\t\t];\n\t\t\treturn {\n\t\t\t\tsearchResults: getEntityRecords( ...selectorArgs ),\n\t\t\t\tsearchHasResolved: hasFinishedResolution(\n\t\t\t\t\t'getEntityRecords',\n\t\t\t\t\tselectorArgs\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ search, postType, parents ]\n\t);\n\tconst currentParents = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! parents?.length ) {\n\t\t\t\treturn EMPTY_ARRAY;\n\t\t\t}\n\t\t\tconst { getEntityRecords } = select( coreStore );\n\t\t\treturn getEntityRecords( 'postType', postType, {\n\t\t\t\t...BASE_QUERY,\n\t\t\t\tinclude: parents,\n\t\t\t\tper_page: parents.length,\n\t\t\t} );\n\t\t},\n\t\t[ parents, postType ]\n\t);\n\t// Update the `value` state only after the selectors are resolved\n\t// to avoid emptying the input when we're changing parents.\n\tuseEffect( () => {\n\t\tif ( ! parents?.length ) {\n\t\t\tsetValue( EMPTY_ARRAY );\n\t\t}\n\t\tif ( ! currentParents?.length ) {\n\t\t\treturn;\n\t\t}\n\t\tconst currentParentsInfo = getEntitiesInfo(\n\t\t\tmapToIHasNameAndId( currentParents, 'title.rendered' )\n\t\t);\n\t\t// Returns only the existing entity ids. This prevents the component\n\t\t// from crashing in the editor, when non existing ids are provided.\n\t\tconst sanitizedValue = parents.reduce( ( accumulator, id ) => {\n\t\t\tconst entity = currentParentsInfo.mapById[ id ];\n\t\t\tif ( entity ) {\n\t\t\t\taccumulator.push( {\n\t\t\t\t\tid,\n\t\t\t\t\tvalue: entity.name,\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn accumulator;\n\t\t}, [] );\n\t\tsetValue( sanitizedValue );\n\t}, [ parents, currentParents ] );\n\n\tconst entitiesInfo = useMemo( () => {\n\t\tif ( ! searchResults?.length ) {\n\t\t\treturn EMPTY_ARRAY;\n\t\t}\n\t\treturn getEntitiesInfo(\n\t\t\tmapToIHasNameAndId( searchResults, 'title.rendered' )\n\t\t);\n\t}, [ searchResults ] );\n\t// Update suggestions only when the query has resolved.\n\tuseEffect( () => {\n\t\tif ( ! searchHasResolved ) {\n\t\t\treturn;\n\t\t}\n\t\tsetSuggestions( entitiesInfo.names );\n\t}, [ entitiesInfo.names, searchHasResolved ] );\n\n\tconst getIdByValue = ( entitiesMappedByName, entity ) => {\n\t\tconst id = entity?.id || entitiesMappedByName?.[ entity ]?.id;\n\t\tif ( id ) {\n\t\t\treturn id;\n\t\t}\n\t};\n\tconst onParentChange = ( newValue ) => {\n\t\tconst ids = Array.from(\n\t\t\tnewValue.reduce( ( accumulator, entity ) => {\n\t\t\t\t// Verify that new values point to existing entities.\n\t\t\t\tconst id = getIdByValue( entitiesInfo.mapByName, entity );\n\t\t\t\tif ( id ) {\n\t\t\t\t\taccumulator.add( id );\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t}, new Set() )\n\t\t);\n\t\tsetSuggestions( EMPTY_ARRAY );\n\t\tonChange( { parents: ids } );\n\t};\n\treturn (\n\t\t<FormTokenField\n\t\t\t__next40pxDefaultSize\n\t\t\tlabel={ __( 'Parents' ) }\n\t\t\tvalue={ value }\n\t\t\tonInputChange={ debouncedSearch }\n\t\t\tsuggestions={ suggestions }\n\t\t\tonChange={ onParentChange }\n\t\t\
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { FormTokenField } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useState, useEffect, useMemo } from '@wordpress/element';\nimport { useDebounce } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { getEntitiesInfo, mapToIHasNameAndId } from '../../utils';\n\nconst EMPTY_ARRAY = [];\nconst BASE_QUERY = {\n\torder: 'asc',\n\t_fields: 'id,title',\n\tcontext: 'view',\n};\n\nfunction ParentControl( { parents, postType, onChange } ) {\n\tconst [ search, setSearch ] = useState( '' );\n\tconst [ value, setValue ] = useState( EMPTY_ARRAY );\n\tconst [ suggestions, setSuggestions ] = useState( EMPTY_ARRAY );\n\tconst debouncedSearch = useDebounce( setSearch, 250 );\n\tconst { searchResults, searchHasResolved } = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! search ) {\n\t\t\t\treturn { searchResults: EMPTY_ARRAY, searchHasResolved: true };\n\t\t\t}\n\t\t\tconst { getEntityRecords, hasFinishedResolution } =\n\t\t\t\tselect( coreStore );\n\t\t\tconst selectorArgs = [\n\t\t\t\t'postType',\n\t\t\t\tpostType,\n\t\t\t\t{\n\t\t\t\t\t...BASE_QUERY,\n\t\t\t\t\tsearch,\n\t\t\t\t\torderby: 'relevance',\n\t\t\t\t\texclude: parents,\n\t\t\t\t\tper_page: 20,\n\t\t\t\t},\n\t\t\t];\n\t\t\treturn {\n\t\t\t\tsearchResults: getEntityRecords( ...selectorArgs ),\n\t\t\t\tsearchHasResolved: hasFinishedResolution(\n\t\t\t\t\t'getEntityRecords',\n\t\t\t\t\tselectorArgs\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ search, postType, parents ]\n\t);\n\tconst currentParents = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! parents?.length ) {\n\t\t\t\treturn EMPTY_ARRAY;\n\t\t\t}\n\t\t\tconst { getEntityRecords } = select( coreStore );\n\t\t\treturn getEntityRecords( 'postType', postType, {\n\t\t\t\t...BASE_QUERY,\n\t\t\t\tinclude: parents,\n\t\t\t\tper_page: parents.length,\n\t\t\t} );\n\t\t},\n\t\t[ parents, postType ]\n\t);\n\t// Update the `value` state only after the selectors are resolved\n\t// to avoid emptying the input when we're changing parents.\n\tuseEffect( () => {\n\t\tif ( ! parents?.length ) {\n\t\t\tsetValue( EMPTY_ARRAY );\n\t\t}\n\t\tif ( ! currentParents?.length ) {\n\t\t\treturn;\n\t\t}\n\t\tconst currentParentsInfo = getEntitiesInfo(\n\t\t\tmapToIHasNameAndId( currentParents, 'title.rendered' )\n\t\t);\n\t\t// Returns only the existing entity ids. This prevents the component\n\t\t// from crashing in the editor, when non existing ids are provided.\n\t\tconst sanitizedValue = parents.reduce( ( accumulator, id ) => {\n\t\t\tconst entity = currentParentsInfo.mapById[ id ];\n\t\t\tif ( entity ) {\n\t\t\t\taccumulator.push( {\n\t\t\t\t\tid,\n\t\t\t\t\tvalue: entity.name,\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn accumulator;\n\t\t}, [] );\n\t\tsetValue( sanitizedValue );\n\t}, [ parents, currentParents ] );\n\n\tconst entitiesInfo = useMemo( () => {\n\t\tif ( ! searchResults?.length ) {\n\t\t\treturn EMPTY_ARRAY;\n\t\t}\n\t\treturn getEntitiesInfo(\n\t\t\tmapToIHasNameAndId( searchResults, 'title.rendered' )\n\t\t);\n\t}, [ searchResults ] );\n\t// Update suggestions only when the query has resolved.\n\tuseEffect( () => {\n\t\tif ( ! searchHasResolved ) {\n\t\t\treturn;\n\t\t}\n\t\tsetSuggestions( entitiesInfo.names );\n\t}, [ entitiesInfo.names, searchHasResolved ] );\n\n\tconst getIdByValue = ( entitiesMappedByName, entity ) => {\n\t\tconst id = entity?.id || entitiesMappedByName?.[ entity ]?.id;\n\t\tif ( id ) {\n\t\t\treturn id;\n\t\t}\n\t};\n\tconst onParentChange = ( newValue ) => {\n\t\tconst ids = Array.from(\n\t\t\tnewValue.reduce( ( accumulator, entity ) => {\n\t\t\t\t// Verify that new values point to existing entities.\n\t\t\t\tconst id = getIdByValue( entitiesInfo.mapByName, entity );\n\t\t\t\tif ( id ) {\n\t\t\t\t\taccumulator.add( id );\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t}, new Set() )\n\t\t);\n\t\tsetSuggestions( EMPTY_ARRAY );\n\t\tonChange( { parents: ids } );\n\t};\n\treturn (\n\t\t<FormTokenField\n\t\t\t__next40pxDefaultSize\n\t\t\tlabel={ __( 'Parents' ) }\n\t\t\tvalue={ value }\n\t\t\tonInputChange={ debouncedSearch }\n\t\t\tsuggestions={ suggestions }\n\t\t\tonChange={ onParentChange }\n\t\t\thelp=\"\"\n\t\t/>\n\t);\n}\n\nexport default ParentControl;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["coreStore"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/query/edit/inspector-controls/taxonomy-controls.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\tFormTokenField,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useState, useEffect, Fragment } from '@wordpress/element';\nimport { useDebounce } from '@wordpress/compose';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { sprintf, __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useTaxonomies } from '../../utils';\n\nconst EMPTY_ARRAY = [];\nconst BASE_QUERY = {\n\torder: 'asc',\n\t_fields: 'id,name',\n\tcontext: 'view',\n};\n\n// Helper function to get the term id based on user input in terms `FormTokenField`.\nconst getTermIdByTermValue = ( terms, termValue ) => {\n\t// First we check for exact match by `term.id` or case sensitive `term.name` match.\n\tconst termId =\n\t\ttermValue?.id || terms?.find( ( term ) => term.name === termValue )?.id;\n\tif ( termId ) {\n\t\treturn termId;\n\t}\n\n\t/**\n\t * Here we make an extra check for entered terms in a non case sensitive way,\n\t * to match user expectations, due to `FormTokenField` behaviour that shows\n\t * suggestions which are case insensitive.\n\t *\n\t * Although WP tries to discourage users to add terms with the same name (case insensitive),\n\t * it's still possible if you manually change the name, as long as the terms have different slugs.\n\t * In this edge case we always apply the first match from the terms list.\n\t */\n\tconst termValueLower = termValue.toLocaleLowerCase();\n\treturn terms?.find(\n\t\t( term ) => term.name.toLocaleLowerCase() === termValueLower\n\t)?.id;\n};\n\nexport function TaxonomyControls( { onChange, query } ) {\n\tconst { postType, taxQuery } = query;\n\n\tconst taxonomies = useTaxonomies( postType );\n\tif ( ! taxonomies?.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<VStack spacing={ 4 }>\n\t\t\t{ taxonomies.map( ( taxonomy ) => {\n\t\t\t\tconst includeTermIds =\n\t\t\t\t\ttaxQuery?.include?.[ taxonomy.slug ] || [];\n\t\t\t\tconst excludeTermIds =\n\t\t\t\t\ttaxQuery?.exclude?.[ taxonomy.slug ] || [];\n\t\t\t\tconst onChangeTaxQuery = (\n\t\t\t\t\tnewTermIds,\n\t\t\t\t\t/** @type {'include'|'exclude'} */ key\n\t\t\t\t) => {\n\t\t\t\t\tconst newPartialTaxQuery = {\n\t\t\t\t\t\t...taxQuery?.[ key ],\n\t\t\t\t\t\t[ taxonomy.slug ]: newTermIds,\n\t\t\t\t\t};\n\t\t\t\t\t// Remove empty arrays from the partial `taxQuery` (include|exclude).\n\t\t\t\t\tif ( ! newTermIds.length ) {\n\t\t\t\t\t\tdelete newPartialTaxQuery[ taxonomy.slug ];\n\t\t\t\t\t}\n\t\t\t\t\tconst newTaxQuery = {\n\t\t\t\t\t\t...taxQuery,\n\t\t\t\t\t\t[ key ]: !! Object.keys( newPartialTaxQuery ).length\n\t\t\t\t\t\t\t? newPartialTaxQuery\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t};\n\t\t\t\t\tonChange( {\n\t\t\t\t\t\t// Clean up `taxQuery` if all filters are removed.\n\t\t\t\t\t\ttaxQuery: Object.values( newTaxQuery ).every(\n\t\t\t\t\t\t\t( value ) => ! value\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: newTaxQuery,\n\t\t\t\t\t} );\n\t\t\t\t};\n\t\t\t\treturn (\n\t\t\t\t\t<Fragment key={ taxonomy.slug }>\n\t\t\t\t\t\t<TaxonomyItem\n\t\t\t\t\t\t\ttaxonomy={ taxonomy }\n\t\t\t\t\t\t\ttermIds={ includeTermIds }\n\t\t\t\t\t\t\toppositeTermIds={ excludeTermIds }\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tonChangeTaxQuery( value, 'include' )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlabel={ taxonomy.name }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<TaxonomyItem\n\t\t\t\t\t\t\ttaxonomy={ taxonomy }\n\t\t\t\t\t\t\ttermIds={ excludeTermIds }\n\t\t\t\t\t\t\toppositeTermIds={ includeTermIds }\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tonChangeTaxQuery( value, 'exclude' )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t/* translators: %s: taxonomy name */\n\t\t\t\t\t\t\t\tsprintf( __( 'Exclude: %s' ), taxonomy.name )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Fragment>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</VStack>\n\t);\n}\n\n/**\n * Renders a `FormTokenField` for a given taxonomy.\n *\n * @param {Object} props The props for the component.\n * @param {Object} props.taxonomy The taxonomy object.\n * @param {number[]} props.termIds An array with the block's term ids for the given taxonomy.\n * @param {number[]} props.oppositeTermIds An array with the opposite control's term ids (to exclude from suggestions).\n * @param {Function} props.onChange Callback `onChange` function.\n * @param {string} props.label Label of the control.\n * @return {React.JSX.Element} The rendered component.\n */\nfunction TaxonomyItem( {\n\ttaxonomy,\n\ttermIds,\n\toppositeTermIds,\n\tonChange,\n\tlabel,\n} ) {\n\tconst [ search, setSearch ] = useState( '' );\n\tconst [ value, setValue ] = useState( EMPTY_ARRAY );\n\tconst [ suggestions, setSuggestions ] = useState( EMPTY_ARRAY );\n\tconst debouncedSearch = useDebounce( setSearch, 250 );\n\tconst { searchResults, searchHasResolved } = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! search ) {\n\t\t\t\treturn { searchResults: EMPTY_ARRAY, searchHasResolved: true };\n\t\t\t}\n\t\t\tconst { getEntityRecords, hasFinishedResolution } =\n\t\t\t\tselect( coreStore );\n\n\t\t\t// Combine current terms and opposite terms for exclusion, to prevent\n\t\t\t// users from selecting the same term in both include and exclude controls.\n\t\t\tconst combinedExclude = [ ...termIds, ...oppositeTermIds ];\n\n\t\t\tconst selectorArgs = [\n\t\t\t\t'taxonomy',\n\t\t\t\ttaxonomy.slug,\n\t\t\t\t{\n\t\t\t\t\t...BASE_QUERY,\n\t\t\t\t\tsearch,\n\t\t\t\t\torderby: 'name',\n\t\t\t\t\texclude: combinedExclude,\n\t\t\t\t\tper_page: 20,\n\t\t\t\t},\n\t\t\t];\n\t\t\treturn {\n\t\t\t\tsearchResults: getEntityRecords( ...selectorArgs ),\n\t\t\t\tsearchHasResolved: hasFinishedResolution(\n\t\t\t\t\t'getEntityRecords',\n\t\t\t\t\tselectorArgs\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ search, taxonomy.slug, termIds, oppositeTermIds ]\n\t);\n\t// `existingTerms` are the ones fetched from the API and their type is `{ id: number; name: string }`.\n\t// They are used to extract the terms' names to populate the `FormTokenField` properly\n\t// and to sanitize the provided `termIds`, by setting only the ones that exist.\n\tconst existingTerms = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! termIds?.length ) {\n\t\t\t\treturn EMPTY_ARRAY;\n\t\t\t}\n\t\t\tconst { getEntityRecords } = select( coreStore );\n\t\t\treturn getEntityRecords( 'taxonomy', taxonomy.slug, {\n\t\t\t\t...BASE_QUERY,\n\t\t\t\tinclude: termIds,\n\t\t\t\tper_page: termIds.length,\n\t\t\t} );\n\t\t},\n\t\t[ taxonomy.slug, termIds ]\n\t);\n\t// Update the `value` state only after the selectors are resolved\n\t// to avoid emptying the input when we're changing terms.\n\tuseEffect( () => {\n\t\tif ( ! termIds?.length ) {\n\t\t\tsetValue( EMPTY_ARRAY );\n\t\t}\n\t\tif ( ! existingTerms?.length ) {\n\t\t\treturn;\n\t\t}\n\t\t// Returns only the existing entity ids. This prevents the component\n\t\t// from crashing in the editor, when non existing ids are provided.\n\t\tconst sanitizedValue = termIds.reduce( ( accumulator, id ) => {\n\t\t\tconst entity = existingTerms.find( ( term ) => term.id === id );\n\t\t\tif ( entity ) {\n\t\t\t\taccumulator.push( {\n\t\t\t\t\tid,\n\t\t\t\t\tvalue: entity.name,\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn accumulator;\n\t\t}, [] );\n\t\tsetValue( sanitizedValue );\n\t}, [ termIds, existingTerms ] );\n\t// Update suggestions only when the query has resolved.\n\tuseEffect( () => {\n\t\tif ( ! searchHasResolved ) {\n\t\t\treturn;\n\t\t}\n\t\tsetSuggestions( searchResults.map( ( result ) => result.name ) );\n\t}, [ searchResults, searchHasResolved ] );\n\tconst onTermsChange = ( newTermValues ) => {\n\t\tconst newTermIds = new Set();\n\t\tfor ( const termValue of newTermValues ) {\n\t\t\tconst termId = getTermIdByTermValue( searchResults, termValue );\n\t\t\tif ( termId ) {\n\t\t\t\tnewTermIds.add( termId );\n\t\t\t}\n\t\t}\n\t\tsetSuggestions( EMPTY_ARRAY );\n\t\tonChange( Array.from( newTermIds ) );\n\t};\n\treturn (\n\t\t<div className=\"block-library-query-inspector__taxonomy-control\">\n\t\t\t<FormTokenField\n\t\t\t\tlabel={ label }\n\t\t\t\tvalue={ value }\n\t\t\t\tonInputChange={ debouncedSearch }\n\t\t\t\tsuggestions={ suggestions }\n\t\t\t\tdisplayTransform={ decodeEntities }\n\t\t\t\tonChange={ onTermsChange }\n\t\t\t\
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,wBAGO;AACP,kBAA0B;AAC1B,uBAAmC;AACnC,qBAA8C;AAC9C,qBAA4B;AAC5B,2BAA+B;AAC/B,kBAA4B;AAK5B,mBAA8B;AA4EzB;AA1EL,IAAM,cAAc,CAAC;AACrB,IAAM,aAAa;AAAA,EAClB,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AACV;AAGA,IAAM,uBAAuB,CAAE,OAAO,cAAe;AAEpD,QAAM,SACL,WAAW,MAAM,OAAO,KAAM,CAAE,SAAU,KAAK,SAAS,SAAU,GAAG;AACtE,MAAK,QAAS;AACb,WAAO;AAAA,EACR;AAWA,QAAM,iBAAiB,UAAU,kBAAkB;AACnD,SAAO,OAAO;AAAA,IACb,CAAE,SAAU,KAAK,KAAK,kBAAkB,MAAM;AAAA,EAC/C,GAAG;AACJ;AAEO,SAAS,iBAAkB,EAAE,UAAU,MAAM,GAAI;AACvD,QAAM,EAAE,UAAU,SAAS,IAAI;AAE/B,QAAM,iBAAa,4BAAe,QAAS;AAC3C,MAAK,CAAE,YAAY,QAAS;AAC3B,WAAO;AAAA,EACR;AAEA,SACC,4CAAC,kBAAAA,sBAAA,EAAO,SAAU,GACf,qBAAW,IAAK,CAAE,aAAc;AACjC,UAAM,iBACL,UAAU,UAAW,SAAS,IAAK,KAAK,CAAC;AAC1C,UAAM,iBACL,UAAU,UAAW,SAAS,IAAK,KAAK,CAAC;AAC1C,UAAM,mBAAmB,CACxB,YACmC,QAC/B;AACJ,YAAM,qBAAqB;AAAA,QAC1B,GAAG,WAAY,GAAI;AAAA,QACnB,CAAE,SAAS,IAAK,GAAG;AAAA,MACpB;AAEA,UAAK,CAAE,WAAW,QAAS;AAC1B,eAAO,mBAAoB,SAAS,IAAK;AAAA,MAC1C;AACA,YAAM,cAAc;AAAA,QACnB,GAAG;AAAA,QACH,CAAE,GAAI,GAAG,CAAC,CAAE,OAAO,KAAM,kBAAmB,EAAE,SAC3C,qBACA;AAAA,MACJ;AACA,eAAU;AAAA;AAAA,QAET,UAAU,OAAO,OAAQ,WAAY,EAAE;AAAA,UACtC,CAAE,UAAW,CAAE;AAAA,QAChB,IACG,SACA;AAAA,MACJ,CAAE;AAAA,IACH;AACA,WACC,6CAAC,2BACA;AAAA;AAAA,QAAC;AAAA;AAAA,UACA;AAAA,UACA,SAAU;AAAA,UACV,iBAAkB;AAAA,UAClB,UAAW,CAAE,UACZ,iBAAkB,OAAO,SAAU;AAAA,UAEpC,OAAQ,SAAS;AAAA;AAAA,MAClB;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACA;AAAA,UACA,SAAU;AAAA,UACV,iBAAkB;AAAA,UAClB,UAAW,CAAE,UACZ,iBAAkB,OAAO,SAAU;AAAA,UAEpC;AAAA;AAAA,gBAEC,yBAAS,gBAAI,aAAc,GAAG,SAAS,IAAK;AAAA;AAAA;AAAA,MAE9C;AAAA,SArBe,SAAS,IAsBzB;AAAA,EAEF,CAAE,GACH;AAEF;AAaA,SAAS,aAAc;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,QAAM,CAAE,QAAQ,SAAU,QAAI,yBAAU,EAAG;AAC3C,QAAM,CAAE,OAAO,QAAS,QAAI,yBAAU,WAAY;AAClD,QAAM,CAAE,aAAa,cAAe,QAAI,yBAAU,WAAY;AAC9D,QAAM,sBAAkB,4BAAa,WAAW,GAAI;AACpD,QAAM,EAAE,eAAe,kBAAkB,QAAI;AAAA,IAC5C,CAAE,WAAY;AACb,UAAK,CAAE,QAAS;AACf,eAAO,EAAE,eAAe,aAAa,mBAAmB,KAAK;AAAA,MAC9D;AACA,YAAM,EAAE,kBAAkB,sBAAsB,IAC/C,OAAQ,iBAAAC,KAAU;AAInB,YAAM,kBAAkB,CAAE,GAAG,SAAS,GAAG,eAAgB;AAEzD,YAAM,eAAe;AAAA,QACpB;AAAA,QACA,SAAS;AAAA,QACT;AAAA,UACC,GAAG;AAAA,UACH;AAAA,UACA,SAAS;AAAA,UACT,SAAS;AAAA,UACT,UAAU;AAAA,QACX;AAAA,MACD;AACA,aAAO;AAAA,QACN,eAAe,iBAAkB,GAAG,YAAa;AAAA,QACjD,mBAAmB;AAAA,UAClB;AAAA,UACA;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,IACA,CAAE,QAAQ,SAAS,MAAM,SAAS,eAAgB;AAAA,EACnD;AAIA,QAAM,oBAAgB;AAAA,IACrB,CAAE,WAAY;AACb,UAAK,CAAE,SAAS,QAAS;AACxB,eAAO;AAAA,MACR;AACA,YAAM,EAAE,iBAAiB,IAAI,OAAQ,iBAAAA,KAAU;AAC/C,aAAO,iBAAkB,YAAY,SAAS,MAAM;AAAA,QACnD,GAAG;AAAA,QACH,SAAS;AAAA,QACT,UAAU,QAAQ;AAAA,MACnB,CAAE;AAAA,IACH;AAAA,IACA,CAAE,SAAS,MAAM,OAAQ;AAAA,EAC1B;AAGA,gCAAW,MAAM;AAChB,QAAK,CAAE,SAAS,QAAS;AACxB,eAAU,WAAY;AAAA,IACvB;AACA,QAAK,CAAE,eAAe,QAAS;AAC9B;AAAA,IACD;AAGA,UAAM,iBAAiB,QAAQ,OAAQ,CAAE,aAAa,OAAQ;AAC7D,YAAM,SAAS,cAAc,KAAM,CAAE,SAAU,KAAK,OAAO,EAAG;AAC9D,UAAK,QAAS;AACb,oBAAY,KAAM;AAAA,UACjB;AAAA,UACA,OAAO,OAAO;AAAA,QACf,CAAE;AAAA,MACH;AACA,aAAO;AAAA,IACR,GAAG,CAAC,CAAE;AACN,aAAU,cAAe;AAAA,EAC1B,GAAG,CAAE,SAAS,aAAc,CAAE;AAE9B,gCAAW,MAAM;AAChB,QAAK,CAAE,mBAAoB;AAC1B;AAAA,IACD;AACA,mBAAgB,cAAc,IAAK,CAAE,WAAY,OAAO,IAAK,CAAE;AAAA,EAChE,GAAG,CAAE,eAAe,iBAAkB,CAAE;AACxC,QAAM,gBAAgB,CAAE,kBAAmB;AAC1C,UAAM,aAAa,oBAAI,IAAI;AAC3B,eAAY,aAAa,eAAgB;AACxC,YAAM,SAAS,qBAAsB,eAAe,SAAU;AAC9D,UAAK,QAAS;AACb,mBAAW,IAAK,MAAO;AAAA,MACxB;AAAA,IACD;AACA,mBAAgB,WAAY;AAC5B,aAAU,MAAM,KAAM,UAAW,CAAE;AAAA,EACpC;AACA,SACC,4CAAC,SAAI,WAAU,mDACd;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA,eAAgB;AAAA,MAChB;AAAA,MACA,kBAAmB;AAAA,MACnB,UAAW;AAAA,MACX,
|
|
4
|
+
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\tFormTokenField,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useState, useEffect, Fragment } from '@wordpress/element';\nimport { useDebounce } from '@wordpress/compose';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { sprintf, __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { useTaxonomies } from '../../utils';\n\nconst EMPTY_ARRAY = [];\nconst BASE_QUERY = {\n\torder: 'asc',\n\t_fields: 'id,name',\n\tcontext: 'view',\n};\n\n// Helper function to get the term id based on user input in terms `FormTokenField`.\nconst getTermIdByTermValue = ( terms, termValue ) => {\n\t// First we check for exact match by `term.id` or case sensitive `term.name` match.\n\tconst termId =\n\t\ttermValue?.id || terms?.find( ( term ) => term.name === termValue )?.id;\n\tif ( termId ) {\n\t\treturn termId;\n\t}\n\n\t/**\n\t * Here we make an extra check for entered terms in a non case sensitive way,\n\t * to match user expectations, due to `FormTokenField` behaviour that shows\n\t * suggestions which are case insensitive.\n\t *\n\t * Although WP tries to discourage users to add terms with the same name (case insensitive),\n\t * it's still possible if you manually change the name, as long as the terms have different slugs.\n\t * In this edge case we always apply the first match from the terms list.\n\t */\n\tconst termValueLower = termValue.toLocaleLowerCase();\n\treturn terms?.find(\n\t\t( term ) => term.name.toLocaleLowerCase() === termValueLower\n\t)?.id;\n};\n\nexport function TaxonomyControls( { onChange, query } ) {\n\tconst { postType, taxQuery } = query;\n\n\tconst taxonomies = useTaxonomies( postType );\n\tif ( ! taxonomies?.length ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<VStack spacing={ 4 }>\n\t\t\t{ taxonomies.map( ( taxonomy ) => {\n\t\t\t\tconst includeTermIds =\n\t\t\t\t\ttaxQuery?.include?.[ taxonomy.slug ] || [];\n\t\t\t\tconst excludeTermIds =\n\t\t\t\t\ttaxQuery?.exclude?.[ taxonomy.slug ] || [];\n\t\t\t\tconst onChangeTaxQuery = (\n\t\t\t\t\tnewTermIds,\n\t\t\t\t\t/** @type {'include'|'exclude'} */ key\n\t\t\t\t) => {\n\t\t\t\t\tconst newPartialTaxQuery = {\n\t\t\t\t\t\t...taxQuery?.[ key ],\n\t\t\t\t\t\t[ taxonomy.slug ]: newTermIds,\n\t\t\t\t\t};\n\t\t\t\t\t// Remove empty arrays from the partial `taxQuery` (include|exclude).\n\t\t\t\t\tif ( ! newTermIds.length ) {\n\t\t\t\t\t\tdelete newPartialTaxQuery[ taxonomy.slug ];\n\t\t\t\t\t}\n\t\t\t\t\tconst newTaxQuery = {\n\t\t\t\t\t\t...taxQuery,\n\t\t\t\t\t\t[ key ]: !! Object.keys( newPartialTaxQuery ).length\n\t\t\t\t\t\t\t? newPartialTaxQuery\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t};\n\t\t\t\t\tonChange( {\n\t\t\t\t\t\t// Clean up `taxQuery` if all filters are removed.\n\t\t\t\t\t\ttaxQuery: Object.values( newTaxQuery ).every(\n\t\t\t\t\t\t\t( value ) => ! value\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: newTaxQuery,\n\t\t\t\t\t} );\n\t\t\t\t};\n\t\t\t\treturn (\n\t\t\t\t\t<Fragment key={ taxonomy.slug }>\n\t\t\t\t\t\t<TaxonomyItem\n\t\t\t\t\t\t\ttaxonomy={ taxonomy }\n\t\t\t\t\t\t\ttermIds={ includeTermIds }\n\t\t\t\t\t\t\toppositeTermIds={ excludeTermIds }\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tonChangeTaxQuery( value, 'include' )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlabel={ taxonomy.name }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<TaxonomyItem\n\t\t\t\t\t\t\ttaxonomy={ taxonomy }\n\t\t\t\t\t\t\ttermIds={ excludeTermIds }\n\t\t\t\t\t\t\toppositeTermIds={ includeTermIds }\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tonChangeTaxQuery( value, 'exclude' )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t/* translators: %s: taxonomy name */\n\t\t\t\t\t\t\t\tsprintf( __( 'Exclude: %s' ), taxonomy.name )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Fragment>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</VStack>\n\t);\n}\n\n/**\n * Renders a `FormTokenField` for a given taxonomy.\n *\n * @param {Object} props The props for the component.\n * @param {Object} props.taxonomy The taxonomy object.\n * @param {number[]} props.termIds An array with the block's term ids for the given taxonomy.\n * @param {number[]} props.oppositeTermIds An array with the opposite control's term ids (to exclude from suggestions).\n * @param {Function} props.onChange Callback `onChange` function.\n * @param {string} props.label Label of the control.\n * @return {React.JSX.Element} The rendered component.\n */\nfunction TaxonomyItem( {\n\ttaxonomy,\n\ttermIds,\n\toppositeTermIds,\n\tonChange,\n\tlabel,\n} ) {\n\tconst [ search, setSearch ] = useState( '' );\n\tconst [ value, setValue ] = useState( EMPTY_ARRAY );\n\tconst [ suggestions, setSuggestions ] = useState( EMPTY_ARRAY );\n\tconst debouncedSearch = useDebounce( setSearch, 250 );\n\tconst { searchResults, searchHasResolved } = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! search ) {\n\t\t\t\treturn { searchResults: EMPTY_ARRAY, searchHasResolved: true };\n\t\t\t}\n\t\t\tconst { getEntityRecords, hasFinishedResolution } =\n\t\t\t\tselect( coreStore );\n\n\t\t\t// Combine current terms and opposite terms for exclusion, to prevent\n\t\t\t// users from selecting the same term in both include and exclude controls.\n\t\t\tconst combinedExclude = [ ...termIds, ...oppositeTermIds ];\n\n\t\t\tconst selectorArgs = [\n\t\t\t\t'taxonomy',\n\t\t\t\ttaxonomy.slug,\n\t\t\t\t{\n\t\t\t\t\t...BASE_QUERY,\n\t\t\t\t\tsearch,\n\t\t\t\t\torderby: 'name',\n\t\t\t\t\texclude: combinedExclude,\n\t\t\t\t\tper_page: 20,\n\t\t\t\t},\n\t\t\t];\n\t\t\treturn {\n\t\t\t\tsearchResults: getEntityRecords( ...selectorArgs ),\n\t\t\t\tsearchHasResolved: hasFinishedResolution(\n\t\t\t\t\t'getEntityRecords',\n\t\t\t\t\tselectorArgs\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ search, taxonomy.slug, termIds, oppositeTermIds ]\n\t);\n\t// `existingTerms` are the ones fetched from the API and their type is `{ id: number; name: string }`.\n\t// They are used to extract the terms' names to populate the `FormTokenField` properly\n\t// and to sanitize the provided `termIds`, by setting only the ones that exist.\n\tconst existingTerms = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! termIds?.length ) {\n\t\t\t\treturn EMPTY_ARRAY;\n\t\t\t}\n\t\t\tconst { getEntityRecords } = select( coreStore );\n\t\t\treturn getEntityRecords( 'taxonomy', taxonomy.slug, {\n\t\t\t\t...BASE_QUERY,\n\t\t\t\tinclude: termIds,\n\t\t\t\tper_page: termIds.length,\n\t\t\t} );\n\t\t},\n\t\t[ taxonomy.slug, termIds ]\n\t);\n\t// Update the `value` state only after the selectors are resolved\n\t// to avoid emptying the input when we're changing terms.\n\tuseEffect( () => {\n\t\tif ( ! termIds?.length ) {\n\t\t\tsetValue( EMPTY_ARRAY );\n\t\t}\n\t\tif ( ! existingTerms?.length ) {\n\t\t\treturn;\n\t\t}\n\t\t// Returns only the existing entity ids. This prevents the component\n\t\t// from crashing in the editor, when non existing ids are provided.\n\t\tconst sanitizedValue = termIds.reduce( ( accumulator, id ) => {\n\t\t\tconst entity = existingTerms.find( ( term ) => term.id === id );\n\t\t\tif ( entity ) {\n\t\t\t\taccumulator.push( {\n\t\t\t\t\tid,\n\t\t\t\t\tvalue: entity.name,\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn accumulator;\n\t\t}, [] );\n\t\tsetValue( sanitizedValue );\n\t}, [ termIds, existingTerms ] );\n\t// Update suggestions only when the query has resolved.\n\tuseEffect( () => {\n\t\tif ( ! searchHasResolved ) {\n\t\t\treturn;\n\t\t}\n\t\tsetSuggestions( searchResults.map( ( result ) => result.name ) );\n\t}, [ searchResults, searchHasResolved ] );\n\tconst onTermsChange = ( newTermValues ) => {\n\t\tconst newTermIds = new Set();\n\t\tfor ( const termValue of newTermValues ) {\n\t\t\tconst termId = getTermIdByTermValue( searchResults, termValue );\n\t\t\tif ( termId ) {\n\t\t\t\tnewTermIds.add( termId );\n\t\t\t}\n\t\t}\n\t\tsetSuggestions( EMPTY_ARRAY );\n\t\tonChange( Array.from( newTermIds ) );\n\t};\n\treturn (\n\t\t<div className=\"block-library-query-inspector__taxonomy-control\">\n\t\t\t<FormTokenField\n\t\t\t\tlabel={ label }\n\t\t\t\tvalue={ value }\n\t\t\t\tonInputChange={ debouncedSearch }\n\t\t\t\tsuggestions={ suggestions }\n\t\t\t\tdisplayTransform={ decodeEntities }\n\t\t\t\tonChange={ onTermsChange }\n\t\t\t\thelp=\"\"\n\t\t\t\t__next40pxDefaultSize\n\t\t\t/>\n\t\t</div>\n\t);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["VStack", "coreStore"]
|
|
7
7
|
}
|
package/build/site-logo/edit.cjs
CHANGED
|
@@ -50,7 +50,9 @@ var import_lock_unlock = require("../lock-unlock.cjs");
|
|
|
50
50
|
var import_hooks = require("../utils/hooks.cjs");
|
|
51
51
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
52
52
|
var ALLOWED_MEDIA_TYPES = ["image"];
|
|
53
|
-
var { mediaEditKey } = (0, import_lock_unlock.unlock)(
|
|
53
|
+
var { mediaEditKey, openMediaEditorModalKey } = (0, import_lock_unlock.unlock)(
|
|
54
|
+
import_block_editor.privateApis
|
|
55
|
+
);
|
|
54
56
|
var SiteLogo = ({
|
|
55
57
|
alt,
|
|
56
58
|
attributes: { align, width, height, isLink, linkTarget, shouldSyncIcon },
|
|
@@ -73,22 +75,26 @@ var SiteLogo = ({
|
|
|
73
75
|
const dropdownMenuProps = (0, import_hooks.useToolsPanelDropdownMenuProps)();
|
|
74
76
|
const blockEditingMode = (0, import_block_editor.useBlockEditingMode)();
|
|
75
77
|
const isContentOnlyMode = blockEditingMode === "contentOnly";
|
|
76
|
-
const {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
78
|
+
const {
|
|
79
|
+
imageEditing,
|
|
80
|
+
maxWidth,
|
|
81
|
+
title,
|
|
82
|
+
editMediaEntity,
|
|
83
|
+
openMediaEditorModal
|
|
84
|
+
} = (0, import_data.useSelect)((select) => {
|
|
85
|
+
const settings = select(import_block_editor.store).getSettings();
|
|
86
|
+
const siteEntities = select(import_core_data.store).getEntityRecord(
|
|
87
|
+
"root",
|
|
88
|
+
"__unstableBase"
|
|
89
|
+
);
|
|
90
|
+
return {
|
|
91
|
+
title: siteEntities?.name,
|
|
92
|
+
imageEditing: settings.imageEditing,
|
|
93
|
+
maxWidth: settings.maxWidth,
|
|
94
|
+
editMediaEntity: settings?.[mediaEditKey],
|
|
95
|
+
openMediaEditorModal: settings?.[openMediaEditorModalKey]
|
|
96
|
+
};
|
|
97
|
+
}, []);
|
|
92
98
|
(0, import_element.useEffect)(() => {
|
|
93
99
|
if (shouldSyncIcon && logoId !== iconId) {
|
|
94
100
|
setAttributes({ shouldSyncIcon: false });
|
|
@@ -99,6 +105,11 @@ var SiteLogo = ({
|
|
|
99
105
|
setIsEditingImage(false);
|
|
100
106
|
}
|
|
101
107
|
}, [isSelected]);
|
|
108
|
+
const handleMediaUpdate = ({ id: newId }) => {
|
|
109
|
+
if (typeof newId === "number" && newId !== logoId) {
|
|
110
|
+
setLogo(newId);
|
|
111
|
+
}
|
|
112
|
+
};
|
|
102
113
|
function onResizeStart() {
|
|
103
114
|
toggleSelection(false);
|
|
104
115
|
}
|
|
@@ -335,7 +346,10 @@ var SiteLogo = ({
|
|
|
335
346
|
canEditImage && !isEditingImage && shouldShowCropAndDimensions && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_block_editor.BlockControls, { group: "block", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
336
347
|
import_components.ToolbarButton,
|
|
337
348
|
{
|
|
338
|
-
onClick: () =>
|
|
349
|
+
onClick: openMediaEditorModal && logoId ? () => openMediaEditorModal({
|
|
350
|
+
id: logoId,
|
|
351
|
+
onUpdate: handleMediaUpdate
|
|
352
|
+
}) : () => setIsEditingImage(true),
|
|
339
353
|
icon: import_icons.crop,
|
|
340
354
|
label: (0, import_i18n.__)("Crop")
|
|
341
355
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/site-logo/edit.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { isBlobURL } from '@wordpress/blob';\nimport {\n\tcreateInterpolateElement,\n\tuseEffect,\n\tuseState,\n} from '@wordpress/element';\nimport { __, isRTL } from '@wordpress/i18n';\nimport {\n\tRangeControl,\n\tResizableBox,\n\tSpinner,\n\tToggleControl,\n\tToolbarButton,\n\tPlaceholder,\n\tButton,\n\tDropZone,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { useViewportMatch } from '@wordpress/compose';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tMediaPlaceholder,\n\tMediaReplaceFlow,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n\t__experimentalImageEditor as ImageEditor,\n\tuseBlockEditingMode,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { crop, upload } from '@wordpress/icons';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport { MIN_SIZE } from '../image/constants';\nimport { MediaControl, MediaControlPreview } from '../utils/media-control';\nimport { unlock } from '../lock-unlock';\nimport { useToolsPanelDropdownMenuProps } from '../utils/hooks';\n\nconst ALLOWED_MEDIA_TYPES = [ 'image' ];\nconst { mediaEditKey } = unlock( blockEditorPrivateApis );\n\nconst SiteLogo = ( {\n\talt,\n\tattributes: { align, width, height, isLink, linkTarget, shouldSyncIcon },\n\tisSelected,\n\tsetAttributes,\n\tsetLogo,\n\tlogoUrl,\n\tsiteUrl,\n\tlogoId,\n\ticonId,\n\tsetIcon,\n\tcanUserEdit,\n} ) => {\n\tconst isLargeViewport = useViewportMatch( 'medium' );\n\tconst isWideAligned = [ 'wide', 'full' ].includes( align );\n\tconst isResizable = ! isWideAligned && isLargeViewport;\n\tconst [ { naturalWidth, naturalHeight }, setNaturalSize ] = useState( {} );\n\tconst [ isEditingImage, setIsEditingImage ] = useState( false );\n\tconst { toggleSelection } = useDispatch( blockEditorStore );\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\n\t// Check if we're in contentOnly mode\n\tconst blockEditingMode = useBlockEditingMode();\n\tconst isContentOnlyMode = blockEditingMode === 'contentOnly';\n\n\tconst { imageEditing, maxWidth, title, editMediaEntity } = useSelect(\n\t\t( select ) => {\n\t\t\tconst settings = select( blockEditorStore ).getSettings();\n\t\t\tconst siteEntities = select( coreStore ).getEntityRecord(\n\t\t\t\t'root',\n\t\t\t\t'__unstableBase'\n\t\t\t);\n\t\t\treturn {\n\t\t\t\ttitle: siteEntities?.name,\n\t\t\t\timageEditing: settings.imageEditing,\n\t\t\t\tmaxWidth: settings.maxWidth,\n\t\t\t\teditMediaEntity: settings?.[ mediaEditKey ],\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tuseEffect( () => {\n\t\t// Turn the `Use as site icon` toggle off if it is on but the logo and icon have\n\t\t// fallen out of sync. This can happen if the toggle is saved in the `on` position,\n\t\t// but changes are later made to the site icon in the Customizer.\n\t\tif ( shouldSyncIcon && logoId !== iconId ) {\n\t\t\tsetAttributes( { shouldSyncIcon: false } );\n\t\t}\n\t}, [] );\n\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsEditingImage( false );\n\t\t}\n\t}, [ isSelected ] );\n\n\tfunction onResizeStart() {\n\t\ttoggleSelection( false );\n\t}\n\n\tfunction onResizeStop() {\n\t\ttoggleSelection( true );\n\t}\n\n\tconst img = (\n\t\t<>\n\t\t\t<img\n\t\t\t\tclassName=\"custom-logo\"\n\t\t\t\tsrc={ logoUrl }\n\t\t\t\talt={ alt }\n\t\t\t\tonLoad={ ( event ) => {\n\t\t\t\t\tsetNaturalSize( {\n\t\t\t\t\t\tnaturalWidth: event.target.naturalWidth,\n\t\t\t\t\t\tnaturalHeight: event.target.naturalHeight,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t{ isBlobURL( logoUrl ) && <Spinner /> }\n\t\t</>\n\t);\n\n\tlet imgWrapper = img;\n\tif ( isLink ) {\n\t\timgWrapper = (\n\t\t\t<a\n\t\t\t\thref={ siteUrl }\n\t\t\t\tclassName=\"custom-logo-link\"\n\t\t\t\trel=\"home\"\n\t\t\t\ttitle={ title }\n\t\t\t\tonClick={ ( event ) => event.preventDefault() }\n\t\t\t>\n\t\t\t\t{ img }\n\t\t\t</a>\n\t\t);\n\t}\n\n\tif ( ! isResizable || ! naturalWidth || ! naturalHeight ) {\n\t\treturn <div style={ { width, height } }>{ imgWrapper }</div>;\n\t}\n\n\t// Set the default width to a responsible size.\n\t// Note that this width is also set in the attached frontend CSS file.\n\tconst defaultWidth = 120;\n\n\tconst currentWidth = width || defaultWidth;\n\tconst ratio = naturalWidth / naturalHeight;\n\tconst currentHeight = currentWidth / ratio;\n\tconst minWidth =\n\t\tnaturalWidth < naturalHeight ? MIN_SIZE : Math.ceil( MIN_SIZE * ratio );\n\tconst minHeight =\n\t\tnaturalHeight < naturalWidth ? MIN_SIZE : Math.ceil( MIN_SIZE / ratio );\n\n\t// With the current implementation of ResizableBox, an image needs an\n\t// explicit pixel value for the max-width. In absence of being able to\n\t// set the content-width, this max-width is currently dictated by the\n\t// vanilla editor style. The following variable adds a buffer to this\n\t// vanilla style, so 3rd party themes have some wiggleroom. This does,\n\t// in most cases, allow you to scale the image beyond the width of the\n\t// main column, though not infinitely.\n\t// @todo It would be good to revisit this once a content-width variable\n\t// becomes available.\n\tconst maxWidthBuffer = maxWidth * 2.5;\n\n\tlet showRightHandle = false;\n\tlet showLeftHandle = false;\n\n\t/* eslint-disable no-lonely-if */\n\t// See https://github.com/WordPress/gutenberg/issues/7584.\n\tif ( align === 'center' ) {\n\t\t// When the image is centered, show both handles.\n\t\tshowRightHandle = true;\n\t\tshowLeftHandle = true;\n\t} else if ( isRTL() ) {\n\t\t// In RTL mode the image is on the right by default.\n\t\t// Show the right handle and hide the left handle only when it is\n\t\t// aligned left. Otherwise always show the left handle.\n\t\tif ( align === 'left' ) {\n\t\t\tshowRightHandle = true;\n\t\t} else {\n\t\t\tshowLeftHandle = true;\n\t\t}\n\t} else {\n\t\t// Show the left handle and hide the right handle only when the\n\t\t// image is aligned right. Otherwise always show the right handle.\n\t\tif ( align === 'right' ) {\n\t\t\tshowLeftHandle = true;\n\t\t} else {\n\t\t\tshowRightHandle = true;\n\t\t}\n\t}\n\t/* eslint-enable no-lonely-if */\n\n\tconst canEditImage =\n\t\tlogoId &&\n\t\tnaturalWidth &&\n\t\tnaturalHeight &&\n\t\timageEditing &&\n\t\t!! editMediaEntity;\n\n\t// Hide crop and dimensions editing in write mode\n\tconst shouldShowCropAndDimensions = ! isContentOnlyMode;\n\n\tlet imgEdit;\n\tif ( canEditImage && isEditingImage ) {\n\t\timgEdit = (\n\t\t\t<ImageEditor\n\t\t\t\tid={ logoId }\n\t\t\t\turl={ logoUrl }\n\t\t\t\twidth={ currentWidth }\n\t\t\t\theight={ currentHeight }\n\t\t\t\tnaturalHeight={ naturalHeight }\n\t\t\t\tnaturalWidth={ naturalWidth }\n\t\t\t\tonSaveImage={ ( imageAttributes ) => {\n\t\t\t\t\tsetLogo( imageAttributes.id );\n\t\t\t\t} }\n\t\t\t\tonFinishEditing={ () => {\n\t\t\t\t\tsetIsEditingImage( false );\n\t\t\t\t} }\n\t\t\t/>\n\t\t);\n\t} else {\n\t\t// Always render ResizableBox but disable resize functionality in contentOnly mode\n\t\timgEdit = (\n\t\t\t<ResizableBox\n\t\t\t\tsize={ {\n\t\t\t\t\twidth: currentWidth,\n\t\t\t\t\theight: currentHeight,\n\t\t\t\t} }\n\t\t\t\tshowHandle={ isSelected && shouldShowCropAndDimensions }\n\t\t\t\tminWidth={ minWidth }\n\t\t\t\tmaxWidth={ maxWidthBuffer }\n\t\t\t\tminHeight={ minHeight }\n\t\t\t\tmaxHeight={ maxWidthBuffer / ratio }\n\t\t\t\tlockAspectRatio\n\t\t\t\tenable={ {\n\t\t\t\t\ttop: false,\n\t\t\t\t\tright: showRightHandle,\n\t\t\t\t\tbottom: true,\n\t\t\t\t\tleft: showLeftHandle,\n\t\t\t\t} }\n\t\t\t\tonResizeStart={ onResizeStart }\n\t\t\t\tonResizeStop={ ( event, direction, elt, delta ) => {\n\t\t\t\t\tonResizeStop();\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\twidth: parseInt( currentWidth + delta.width, 10 ),\n\t\t\t\t\t\theight: parseInt( currentHeight + delta.height, 10 ),\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ imgWrapper }\n\t\t\t</ResizableBox>\n\t\t);\n\t}\n\n\t// Support the previous location for the Site Icon settings. To be removed\n\t// when the required WP core version for Gutenberg is >= 6.5.0.\n\tconst shouldUseNewUrl = ! window?.__experimentalUseCustomizerSiteLogoUrl;\n\n\tconst siteIconSettingsUrl = shouldUseNewUrl\n\t\t? siteUrl + '/wp-admin/options-general.php'\n\t\t: siteUrl + '/wp-admin/customize.php?autofocus[section]=title_tagline';\n\n\tconst syncSiteIconHelpText = createInterpolateElement(\n\t\t__(\n\t\t\t'Site Icons are what you see in browser tabs, bookmark bars, and within the WordPress mobile apps. To use a custom icon that is different from your site logo, use the <a>Site Icon settings</a>.'\n\t\t),\n\t\t{\n\t\t\ta: (\n\t\t\t\t// eslint-disable-next-line jsx-a11y/anchor-has-content, react/jsx-no-target-blank\n\t\t\t\t<a\n\t\t\t\t\thref={ siteIconSettingsUrl }\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener\"\n\t\t\t\t/>\n\t\t\t),\n\t\t}\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls>\n\t\t\t\t<ToolsPanel\n\t\t\t\t\tlabel={ __( 'Settings' ) }\n\t\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t\t>\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => !! width }\n\t\t\t\t\t\tlabel={ __( 'Image width' ) }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( { width: undefined } )\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<RangeControl\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\tlabel={ __( 'Image width' ) }\n\t\t\t\t\t\t\tonChange={ ( newWidth ) =>\n\t\t\t\t\t\t\t\tsetAttributes( { width: newWidth } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmin={ minWidth }\n\t\t\t\t\t\t\tmax={ maxWidthBuffer }\n\t\t\t\t\t\t\tinitialPosition={ Math.min(\n\t\t\t\t\t\t\t\tdefaultWidth,\n\t\t\t\t\t\t\t\tmaxWidthBuffer\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tvalue={ width || '' }\n\t\t\t\t\t\t\tdisabled={ ! isResizable }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => ! isLink }\n\t\t\t\t\t\tlabel={ __( 'Link image to home' ) }\n\t\t\t\t\t\tonDeselect={ () => setAttributes( { isLink: true } ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Link image to home' ) }\n\t\t\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\t\t\tsetAttributes( { isLink: ! isLink } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tchecked={ isLink }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\n\t\t\t\t\t{ isLink && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\thasValue={ () => linkTarget === '_blank' }\n\t\t\t\t\t\t\tlabel={ __( 'Open in new tab' ) }\n\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\tsetAttributes( { linkTarget: '_self' } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Open in new tab' ) }\n\t\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\tlinkTarget: value ? '_blank' : '_self',\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchecked={ linkTarget === '_blank' }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ canUserEdit && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\thasValue={ () => !! shouldSyncIcon }\n\t\t\t\t\t\t\tlabel={ __( 'Use as Site Icon' ) }\n\t\t\t\t\t\t\tonDeselect={ () => {\n\t\t\t\t\t\t\t\tsetAttributes( { shouldSyncIcon: false } );\n\t\t\t\t\t\t\t\tsetIcon( undefined );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Use as Site Icon' ) }\n\t\t\t\t\t\t\t\tonChange={ ( value ) => {\n\t\t\t\t\t\t\t\t\tsetAttributes( { shouldSyncIcon: value } );\n\t\t\t\t\t\t\t\t\tsetIcon( value ? logoId : undefined );\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tchecked={ !! shouldSyncIcon }\n\t\t\t\t\t\t\t\thelp={ syncSiteIconHelpText }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t</ToolsPanel>\n\t\t\t</InspectorControls>\n\t\t\t{ canEditImage &&\n\t\t\t\t! isEditingImage &&\n\t\t\t\tshouldShowCropAndDimensions && (\n\t\t\t\t\t<BlockControls group=\"block\">\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\tonClick={ () => setIsEditingImage( true ) }\n\t\t\t\t\t\t\ticon={ crop }\n\t\t\t\t\t\t\tlabel={ __( 'Crop' ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</BlockControls>\n\t\t\t\t) }\n\t\t\t{ imgEdit }\n\t\t</>\n\t);\n};\n\nexport default function LogoEdit( {\n\tattributes,\n\tclassName,\n\tsetAttributes,\n\tisSelected,\n} ) {\n\tconst { width, shouldSyncIcon } = attributes;\n\tconst {\n\t\tsiteLogoId,\n\t\tcanUserEdit,\n\t\turl,\n\t\tsiteIconId,\n\t\tmediaItemData,\n\t\tisRequestingMediaItem,\n\t} = useSelect( ( select ) => {\n\t\tconst { canUser, getEntityRecord, getEditedEntityRecord } =\n\t\t\tselect( coreStore );\n\t\tconst _canUserEdit = canUser( 'update', {\n\t\t\tkind: 'root',\n\t\t\tname: 'site',\n\t\t} );\n\t\tconst siteSettings = _canUserEdit\n\t\t\t? getEditedEntityRecord( 'root', 'site' )\n\t\t\t: undefined;\n\t\tconst siteData = getEntityRecord( 'root', '__unstableBase' );\n\t\tconst _siteLogoId = _canUserEdit\n\t\t\t? siteSettings?.site_logo\n\t\t\t: siteData?.site_logo;\n\t\tconst _siteIconId = siteSettings?.site_icon;\n\t\tconst mediaItem =\n\t\t\t_siteLogoId &&\n\t\t\tselect( coreStore ).getEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'attachment',\n\t\t\t\t_siteLogoId,\n\t\t\t\t{\n\t\t\t\t\tcontext: 'view',\n\t\t\t\t}\n\t\t\t);\n\t\tconst _isRequestingMediaItem =\n\t\t\t!! _siteLogoId &&\n\t\t\t! select( coreStore ).hasFinishedResolution( 'getEntityRecord', [\n\t\t\t\t'postType',\n\t\t\t\t'attachment',\n\t\t\t\t_siteLogoId,\n\t\t\t\t{ context: 'view' },\n\t\t\t] );\n\n\t\treturn {\n\t\t\tsiteLogoId: _siteLogoId,\n\t\t\tcanUserEdit: _canUserEdit,\n\t\t\turl: siteData?.home,\n\t\t\tmediaItemData: mediaItem,\n\t\t\tisRequestingMediaItem: _isRequestingMediaItem,\n\t\t\tsiteIconId: _siteIconId,\n\t\t};\n\t}, [] );\n\tconst { getSettings } = useSelect( blockEditorStore );\n\tconst [ temporaryURL, setTemporaryURL ] = useState();\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\n\tconst { editEntityRecord } = useDispatch( coreStore );\n\n\tconst setLogo = ( newValue, shouldForceSync = false ) => {\n\t\t// `shouldForceSync` is used to force syncing when the attribute\n\t\t// may not have updated yet.\n\t\tif ( shouldSyncIcon || shouldForceSync ) {\n\t\t\tsetIcon( newValue );\n\t\t}\n\n\t\teditEntityRecord( 'root', 'site', undefined, {\n\t\t\tsite_logo: newValue,\n\t\t} );\n\t};\n\n\tconst setIcon = ( newValue ) =>\n\t\t// The new value needs to be `null` to reset the Site Icon.\n\t\teditEntityRecord( 'root', 'site', undefined, {\n\t\t\tsite_icon: newValue ?? null,\n\t\t} );\n\n\tconst { alt_text: alt, source_url: logoUrl } = mediaItemData ?? {};\n\n\tconst onInitialSelectLogo = ( media ) => {\n\t\t// Initialize the syncSiteIcon toggle. If we currently have no Site logo and no\n\t\t// site icon, automatically sync the logo to the icon.\n\t\tif ( shouldSyncIcon === undefined ) {\n\t\t\tconst shouldForceSync = ! siteIconId;\n\t\t\tsetAttributes( { shouldSyncIcon: shouldForceSync } );\n\n\t\t\t// Because we cannot rely on the `shouldSyncIcon` attribute to have updated by\n\t\t\t// the time `setLogo` is called, pass an argument to force the syncing.\n\t\t\tonSelectLogo( media, shouldForceSync );\n\t\t\treturn;\n\t\t}\n\n\t\tonSelectLogo( media );\n\t};\n\n\tconst onSelectLogo = ( media, shouldForceSync = false ) => {\n\t\tif ( ! media ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! media.id && media.url ) {\n\t\t\t// This is a temporary blob image.\n\t\t\tsetTemporaryURL( media.url );\n\t\t\tsetLogo( undefined );\n\t\t\treturn;\n\t\t}\n\n\t\tsetLogo( media.id, shouldForceSync );\n\t};\n\n\tconst onRemoveLogo = () => {\n\t\tsetLogo( null );\n\t\tsetAttributes( { width: undefined } );\n\t};\n\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tconst onUploadError = ( message ) => {\n\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\tsetTemporaryURL();\n\t};\n\n\tconst onFilesDrop = ( filesList ) => {\n\t\tgetSettings().mediaUpload( {\n\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\tfilesList,\n\t\t\tonFileChange( [ image ] ) {\n\t\t\t\tif ( isBlobURL( image?.url ) ) {\n\t\t\t\t\tsetTemporaryURL( image.url );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonInitialSelectLogo( image );\n\t\t\t},\n\t\t\tonError: onUploadError,\n\t\t\tmultiple: false,\n\t\t} );\n\t};\n\n\tconst mediaReplaceFlowProps = {\n\t\tmediaURL: logoUrl,\n\t\tname: ! logoUrl ? __( 'Choose logo' ) : __( 'Replace' ),\n\t\tonSelect: onSelectLogo,\n\t\tonError: onUploadError,\n\t\tonReset: onRemoveLogo,\n\t};\n\tconst controls = canUserEdit && (\n\t\t<BlockControls group=\"other\">\n\t\t\t<MediaReplaceFlow\n\t\t\t\t{ ...mediaReplaceFlowProps }\n\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\tvariant=\"toolbar\"\n\t\t\t/>\n\t\t</BlockControls>\n\t);\n\n\tlet logoImage;\n\tconst isLoading = siteLogoId === undefined || isRequestingMediaItem;\n\tif ( isLoading ) {\n\t\tlogoImage = <Spinner />;\n\t}\n\n\t// Reset temporary url when logoUrl is available.\n\tuseEffect( () => {\n\t\tif ( logoUrl && temporaryURL ) {\n\t\t\tsetTemporaryURL();\n\t\t}\n\t}, [ logoUrl, temporaryURL ] );\n\n\tif ( !! logoUrl || !! temporaryURL ) {\n\t\tlogoImage = (\n\t\t\t<>\n\t\t\t\t<SiteLogo\n\t\t\t\t\talt={ alt }\n\t\t\t\t\tattributes={ attributes }\n\t\t\t\t\tclassName={ className }\n\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\tlogoUrl={ temporaryURL || logoUrl }\n\t\t\t\t\tsetLogo={ setLogo }\n\t\t\t\t\tlogoId={ mediaItemData?.id || siteLogoId }\n\t\t\t\t\tsiteUrl={ url }\n\t\t\t\t\tsetIcon={ setIcon }\n\t\t\t\t\ticonId={ siteIconId }\n\t\t\t\t\tcanUserEdit={ canUserEdit }\n\t\t\t\t/>\n\t\t\t\t{ canUserEdit && <DropZone onFilesDrop={ onFilesDrop } /> }\n\t\t\t</>\n\t\t);\n\t}\n\tconst placeholder = ( content ) => {\n\t\tconst placeholderClassName = clsx(\n\t\t\t'block-editor-media-placeholder',\n\t\t\tclassName\n\t\t);\n\n\t\treturn (\n\t\t\t<Placeholder\n\t\t\t\tclassName={ placeholderClassName }\n\t\t\t\tpreview={ logoImage }\n\t\t\t\twithIllustration\n\t\t\t\tstyle={ {\n\t\t\t\t\twidth,\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ content }\n\t\t\t</Placeholder>\n\t\t);\n\t};\n\n\tconst classes = clsx( className, {\n\t\t'is-default-size': ! width,\n\t\t'is-transient': temporaryURL,\n\t} );\n\n\tconst blockProps = useBlockProps( { className: classes } );\n\n\tconst mediaInspectorPanel = ( canUserEdit || logoUrl ) && (\n\t\t<InspectorControls>\n\t\t\t<ToolsPanel\n\t\t\t\tlabel={ __( 'Media' ) }\n\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t>\n\t\t\t\t{ ! canUserEdit ? (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"block-library-site-logo__inspector-media-replace-container\"\n\t\t\t\t\t\tstyle={ { gridColumn: '1 / -1' } }\n\t\t\t\t\t>\n\t\t\t\t\t\t<MediaControlPreview\n\t\t\t\t\t\t\turl={ mediaItemData?.source_url }\n\t\t\t\t\t\t\tfilename={\n\t\t\t\t\t\t\t\tmediaItemData?.media_details?.sizes?.full\n\t\t\t\t\t\t\t\t\t?.file || mediaItemData?.slug\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\titemGroupProps={ {\n\t\t\t\t\t\t\t\tisBordered: true,\n\t\t\t\t\t\t\t\tclassName:\n\t\t\t\t\t\t\t\t\t'block-library-site-logo__inspector-readonly-logo-preview',\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tclassName=\"block-library-site-logo__inspector-media-replace-title\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t) : (\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\thasValue={ () => !! logoUrl }\n\t\t\t\t\t\tlabel={ __( 'Logo' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t>\n\t\t\t\t\t\t<MediaControl\n\t\t\t\t\t\t\tmediaId={ siteLogoId }\n\t\t\t\t\t\t\tmediaUrl={ logoUrl }\n\t\t\t\t\t\t\tfilename={\n\t\t\t\t\t\t\t\tmediaItemData?.media_details?.sizes?.full\n\t\t\t\t\t\t\t\t\t?.file || mediaItemData?.slug\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\t\tonSelect={ onSelectLogo }\n\t\t\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\t\t\tonReset={ onRemoveLogo }\n\t\t\t\t\t\t\tisUploading={ !! temporaryURL }\n\t\t\t\t\t\t\temptyLabel={ __( 'Logo' ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t) }\n\t\t\t</ToolsPanel>\n\t\t</InspectorControls>\n\t);\n\n\treturn (\n\t\t<div { ...blockProps }>\n\t\t\t{ controls }\n\t\t\t{ mediaInspectorPanel }\n\t\t\t{ ( !! logoUrl || !! temporaryURL ) && logoImage }\n\t\t\t{ ( isLoading ||\n\t\t\t\t( ! temporaryURL && ! logoUrl && ! canUserEdit ) ) && (\n\t\t\t\t<Placeholder className=\"site-logo_placeholder\" withIllustration>\n\t\t\t\t\t{ isLoading && (\n\t\t\t\t\t\t<span className=\"components-placeholder__preview\">\n\t\t\t\t\t\t\t<Spinner />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) }\n\t\t\t\t</Placeholder>\n\t\t\t) }\n\t\t\t{ ! isLoading && ! temporaryURL && ! logoUrl && canUserEdit && (\n\t\t\t\t<MediaPlaceholder\n\t\t\t\t\tonSelect={ onInitialSelectLogo }\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\tplaceholder={ placeholder }\n\t\t\t\t\tmediaLibraryButton={ ( { open } ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\ticon={ upload }\n\t\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\t\tlabel={ __( 'Choose logo' ) }\n\t\t\t\t\t\t\t\tshowTooltip\n\t\t\t\t\t\t\t\ttooltipPosition=\"middle right\"\n\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\topen();\n\t\t\t\t\t\t\t\t} }\n\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) }\n\t\t</div>\n\t);\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { isBlobURL } from '@wordpress/blob';\nimport {\n\tcreateInterpolateElement,\n\tuseEffect,\n\tuseState,\n} from '@wordpress/element';\nimport { __, isRTL } from '@wordpress/i18n';\nimport {\n\tRangeControl,\n\tResizableBox,\n\tSpinner,\n\tToggleControl,\n\tToolbarButton,\n\tPlaceholder,\n\tButton,\n\tDropZone,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { useViewportMatch } from '@wordpress/compose';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tMediaPlaceholder,\n\tMediaReplaceFlow,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n\t__experimentalImageEditor as ImageEditor,\n\tuseBlockEditingMode,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { crop, upload } from '@wordpress/icons';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport { MIN_SIZE } from '../image/constants';\nimport { MediaControl, MediaControlPreview } from '../utils/media-control';\nimport { unlock } from '../lock-unlock';\nimport { useToolsPanelDropdownMenuProps } from '../utils/hooks';\n\nconst ALLOWED_MEDIA_TYPES = [ 'image' ];\nconst { mediaEditKey, openMediaEditorModalKey } = unlock(\n\tblockEditorPrivateApis\n);\n\nconst SiteLogo = ( {\n\talt,\n\tattributes: { align, width, height, isLink, linkTarget, shouldSyncIcon },\n\tisSelected,\n\tsetAttributes,\n\tsetLogo,\n\tlogoUrl,\n\tsiteUrl,\n\tlogoId,\n\ticonId,\n\tsetIcon,\n\tcanUserEdit,\n} ) => {\n\tconst isLargeViewport = useViewportMatch( 'medium' );\n\tconst isWideAligned = [ 'wide', 'full' ].includes( align );\n\tconst isResizable = ! isWideAligned && isLargeViewport;\n\tconst [ { naturalWidth, naturalHeight }, setNaturalSize ] = useState( {} );\n\tconst [ isEditingImage, setIsEditingImage ] = useState( false );\n\tconst { toggleSelection } = useDispatch( blockEditorStore );\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\n\t// Check if we're in contentOnly mode\n\tconst blockEditingMode = useBlockEditingMode();\n\tconst isContentOnlyMode = blockEditingMode === 'contentOnly';\n\n\tconst {\n\t\timageEditing,\n\t\tmaxWidth,\n\t\ttitle,\n\t\teditMediaEntity,\n\t\topenMediaEditorModal,\n\t} = useSelect( ( select ) => {\n\t\tconst settings = select( blockEditorStore ).getSettings();\n\t\tconst siteEntities = select( coreStore ).getEntityRecord(\n\t\t\t'root',\n\t\t\t'__unstableBase'\n\t\t);\n\t\treturn {\n\t\t\ttitle: siteEntities?.name,\n\t\t\timageEditing: settings.imageEditing,\n\t\t\tmaxWidth: settings.maxWidth,\n\t\t\teditMediaEntity: settings?.[ mediaEditKey ],\n\t\t\topenMediaEditorModal: settings?.[ openMediaEditorModalKey ],\n\t\t};\n\t}, [] );\n\n\tuseEffect( () => {\n\t\t// Turn the `Use as site icon` toggle off if it is on but the logo and icon have\n\t\t// fallen out of sync. This can happen if the toggle is saved in the `on` position,\n\t\t// but changes are later made to the site icon in the Customizer.\n\t\tif ( shouldSyncIcon && logoId !== iconId ) {\n\t\t\tsetAttributes( { shouldSyncIcon: false } );\n\t\t}\n\t}, [] );\n\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsEditingImage( false );\n\t\t}\n\t}, [ isSelected ] );\n\n\tconst handleMediaUpdate = ( { id: newId } ) => {\n\t\tif ( typeof newId === 'number' && newId !== logoId ) {\n\t\t\tsetLogo( newId );\n\t\t}\n\t};\n\n\tfunction onResizeStart() {\n\t\ttoggleSelection( false );\n\t}\n\n\tfunction onResizeStop() {\n\t\ttoggleSelection( true );\n\t}\n\n\tconst img = (\n\t\t<>\n\t\t\t<img\n\t\t\t\tclassName=\"custom-logo\"\n\t\t\t\tsrc={ logoUrl }\n\t\t\t\talt={ alt }\n\t\t\t\tonLoad={ ( event ) => {\n\t\t\t\t\tsetNaturalSize( {\n\t\t\t\t\t\tnaturalWidth: event.target.naturalWidth,\n\t\t\t\t\t\tnaturalHeight: event.target.naturalHeight,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t{ isBlobURL( logoUrl ) && <Spinner /> }\n\t\t</>\n\t);\n\n\tlet imgWrapper = img;\n\tif ( isLink ) {\n\t\timgWrapper = (\n\t\t\t<a\n\t\t\t\thref={ siteUrl }\n\t\t\t\tclassName=\"custom-logo-link\"\n\t\t\t\trel=\"home\"\n\t\t\t\ttitle={ title }\n\t\t\t\tonClick={ ( event ) => event.preventDefault() }\n\t\t\t>\n\t\t\t\t{ img }\n\t\t\t</a>\n\t\t);\n\t}\n\n\tif ( ! isResizable || ! naturalWidth || ! naturalHeight ) {\n\t\treturn <div style={ { width, height } }>{ imgWrapper }</div>;\n\t}\n\n\t// Set the default width to a responsible size.\n\t// Note that this width is also set in the attached frontend CSS file.\n\tconst defaultWidth = 120;\n\n\tconst currentWidth = width || defaultWidth;\n\tconst ratio = naturalWidth / naturalHeight;\n\tconst currentHeight = currentWidth / ratio;\n\tconst minWidth =\n\t\tnaturalWidth < naturalHeight ? MIN_SIZE : Math.ceil( MIN_SIZE * ratio );\n\tconst minHeight =\n\t\tnaturalHeight < naturalWidth ? MIN_SIZE : Math.ceil( MIN_SIZE / ratio );\n\n\t// With the current implementation of ResizableBox, an image needs an\n\t// explicit pixel value for the max-width. In absence of being able to\n\t// set the content-width, this max-width is currently dictated by the\n\t// vanilla editor style. The following variable adds a buffer to this\n\t// vanilla style, so 3rd party themes have some wiggleroom. This does,\n\t// in most cases, allow you to scale the image beyond the width of the\n\t// main column, though not infinitely.\n\t// @todo It would be good to revisit this once a content-width variable\n\t// becomes available.\n\tconst maxWidthBuffer = maxWidth * 2.5;\n\n\tlet showRightHandle = false;\n\tlet showLeftHandle = false;\n\n\t/* eslint-disable no-lonely-if */\n\t// See https://github.com/WordPress/gutenberg/issues/7584.\n\tif ( align === 'center' ) {\n\t\t// When the image is centered, show both handles.\n\t\tshowRightHandle = true;\n\t\tshowLeftHandle = true;\n\t} else if ( isRTL() ) {\n\t\t// In RTL mode the image is on the right by default.\n\t\t// Show the right handle and hide the left handle only when it is\n\t\t// aligned left. Otherwise always show the left handle.\n\t\tif ( align === 'left' ) {\n\t\t\tshowRightHandle = true;\n\t\t} else {\n\t\t\tshowLeftHandle = true;\n\t\t}\n\t} else {\n\t\t// Show the left handle and hide the right handle only when the\n\t\t// image is aligned right. Otherwise always show the right handle.\n\t\tif ( align === 'right' ) {\n\t\t\tshowLeftHandle = true;\n\t\t} else {\n\t\t\tshowRightHandle = true;\n\t\t}\n\t}\n\t/* eslint-enable no-lonely-if */\n\n\tconst canEditImage =\n\t\tlogoId &&\n\t\tnaturalWidth &&\n\t\tnaturalHeight &&\n\t\timageEditing &&\n\t\t!! editMediaEntity;\n\n\t// Hide crop and dimensions editing in write mode\n\tconst shouldShowCropAndDimensions = ! isContentOnlyMode;\n\n\tlet imgEdit;\n\tif ( canEditImage && isEditingImage ) {\n\t\timgEdit = (\n\t\t\t<ImageEditor\n\t\t\t\tid={ logoId }\n\t\t\t\turl={ logoUrl }\n\t\t\t\twidth={ currentWidth }\n\t\t\t\theight={ currentHeight }\n\t\t\t\tnaturalHeight={ naturalHeight }\n\t\t\t\tnaturalWidth={ naturalWidth }\n\t\t\t\tonSaveImage={ ( imageAttributes ) => {\n\t\t\t\t\tsetLogo( imageAttributes.id );\n\t\t\t\t} }\n\t\t\t\tonFinishEditing={ () => {\n\t\t\t\t\tsetIsEditingImage( false );\n\t\t\t\t} }\n\t\t\t/>\n\t\t);\n\t} else {\n\t\t// Always render ResizableBox but disable resize functionality in contentOnly mode\n\t\timgEdit = (\n\t\t\t<ResizableBox\n\t\t\t\tsize={ {\n\t\t\t\t\twidth: currentWidth,\n\t\t\t\t\theight: currentHeight,\n\t\t\t\t} }\n\t\t\t\tshowHandle={ isSelected && shouldShowCropAndDimensions }\n\t\t\t\tminWidth={ minWidth }\n\t\t\t\tmaxWidth={ maxWidthBuffer }\n\t\t\t\tminHeight={ minHeight }\n\t\t\t\tmaxHeight={ maxWidthBuffer / ratio }\n\t\t\t\tlockAspectRatio\n\t\t\t\tenable={ {\n\t\t\t\t\ttop: false,\n\t\t\t\t\tright: showRightHandle,\n\t\t\t\t\tbottom: true,\n\t\t\t\t\tleft: showLeftHandle,\n\t\t\t\t} }\n\t\t\t\tonResizeStart={ onResizeStart }\n\t\t\t\tonResizeStop={ ( event, direction, elt, delta ) => {\n\t\t\t\t\tonResizeStop();\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\twidth: parseInt( currentWidth + delta.width, 10 ),\n\t\t\t\t\t\theight: parseInt( currentHeight + delta.height, 10 ),\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ imgWrapper }\n\t\t\t</ResizableBox>\n\t\t);\n\t}\n\n\t// Support the previous location for the Site Icon settings. To be removed\n\t// when the required WP core version for Gutenberg is >= 6.5.0.\n\tconst shouldUseNewUrl = ! window?.__experimentalUseCustomizerSiteLogoUrl;\n\n\tconst siteIconSettingsUrl = shouldUseNewUrl\n\t\t? siteUrl + '/wp-admin/options-general.php'\n\t\t: siteUrl + '/wp-admin/customize.php?autofocus[section]=title_tagline';\n\n\tconst syncSiteIconHelpText = createInterpolateElement(\n\t\t__(\n\t\t\t'Site Icons are what you see in browser tabs, bookmark bars, and within the WordPress mobile apps. To use a custom icon that is different from your site logo, use the <a>Site Icon settings</a>.'\n\t\t),\n\t\t{\n\t\t\ta: (\n\t\t\t\t// eslint-disable-next-line jsx-a11y/anchor-has-content, react/jsx-no-target-blank\n\t\t\t\t<a\n\t\t\t\t\thref={ siteIconSettingsUrl }\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener\"\n\t\t\t\t/>\n\t\t\t),\n\t\t}\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls>\n\t\t\t\t<ToolsPanel\n\t\t\t\t\tlabel={ __( 'Settings' ) }\n\t\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t\t>\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => !! width }\n\t\t\t\t\t\tlabel={ __( 'Image width' ) }\n\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\tsetAttributes( { width: undefined } )\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<RangeControl\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\tlabel={ __( 'Image width' ) }\n\t\t\t\t\t\t\tonChange={ ( newWidth ) =>\n\t\t\t\t\t\t\t\tsetAttributes( { width: newWidth } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmin={ minWidth }\n\t\t\t\t\t\t\tmax={ maxWidthBuffer }\n\t\t\t\t\t\t\tinitialPosition={ Math.min(\n\t\t\t\t\t\t\t\tdefaultWidth,\n\t\t\t\t\t\t\t\tmaxWidthBuffer\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tvalue={ width || '' }\n\t\t\t\t\t\t\tdisabled={ ! isResizable }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\thasValue={ () => ! isLink }\n\t\t\t\t\t\tlabel={ __( 'Link image to home' ) }\n\t\t\t\t\t\tonDeselect={ () => setAttributes( { isLink: true } ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\tlabel={ __( 'Link image to home' ) }\n\t\t\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\t\t\tsetAttributes( { isLink: ! isLink } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tchecked={ isLink }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\n\t\t\t\t\t{ isLink && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\thasValue={ () => linkTarget === '_blank' }\n\t\t\t\t\t\t\tlabel={ __( 'Open in new tab' ) }\n\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\tsetAttributes( { linkTarget: '_self' } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Open in new tab' ) }\n\t\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\tlinkTarget: value ? '_blank' : '_self',\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchecked={ linkTarget === '_blank' }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ canUserEdit && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t\t\thasValue={ () => !! shouldSyncIcon }\n\t\t\t\t\t\t\tlabel={ __( 'Use as Site Icon' ) }\n\t\t\t\t\t\t\tonDeselect={ () => {\n\t\t\t\t\t\t\t\tsetAttributes( { shouldSyncIcon: false } );\n\t\t\t\t\t\t\t\tsetIcon( undefined );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Use as Site Icon' ) }\n\t\t\t\t\t\t\t\tonChange={ ( value ) => {\n\t\t\t\t\t\t\t\t\tsetAttributes( { shouldSyncIcon: value } );\n\t\t\t\t\t\t\t\t\tsetIcon( value ? logoId : undefined );\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tchecked={ !! shouldSyncIcon }\n\t\t\t\t\t\t\t\thelp={ syncSiteIconHelpText }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t\t) }\n\t\t\t\t</ToolsPanel>\n\t\t\t</InspectorControls>\n\t\t\t{ canEditImage &&\n\t\t\t\t! isEditingImage &&\n\t\t\t\tshouldShowCropAndDimensions && (\n\t\t\t\t\t<BlockControls group=\"block\">\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\tonClick={\n\t\t\t\t\t\t\t\topenMediaEditorModal && logoId\n\t\t\t\t\t\t\t\t\t? () =>\n\t\t\t\t\t\t\t\t\t\t\topenMediaEditorModal( {\n\t\t\t\t\t\t\t\t\t\t\t\tid: logoId,\n\t\t\t\t\t\t\t\t\t\t\t\tonUpdate: handleMediaUpdate,\n\t\t\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t: () => setIsEditingImage( true )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ticon={ crop }\n\t\t\t\t\t\t\tlabel={ __( 'Crop' ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</BlockControls>\n\t\t\t\t) }\n\t\t\t{ imgEdit }\n\t\t</>\n\t);\n};\n\nexport default function LogoEdit( {\n\tattributes,\n\tclassName,\n\tsetAttributes,\n\tisSelected,\n} ) {\n\tconst { width, shouldSyncIcon } = attributes;\n\tconst {\n\t\tsiteLogoId,\n\t\tcanUserEdit,\n\t\turl,\n\t\tsiteIconId,\n\t\tmediaItemData,\n\t\tisRequestingMediaItem,\n\t} = useSelect( ( select ) => {\n\t\tconst { canUser, getEntityRecord, getEditedEntityRecord } =\n\t\t\tselect( coreStore );\n\t\tconst _canUserEdit = canUser( 'update', {\n\t\t\tkind: 'root',\n\t\t\tname: 'site',\n\t\t} );\n\t\tconst siteSettings = _canUserEdit\n\t\t\t? getEditedEntityRecord( 'root', 'site' )\n\t\t\t: undefined;\n\t\tconst siteData = getEntityRecord( 'root', '__unstableBase' );\n\t\tconst _siteLogoId = _canUserEdit\n\t\t\t? siteSettings?.site_logo\n\t\t\t: siteData?.site_logo;\n\t\tconst _siteIconId = siteSettings?.site_icon;\n\t\tconst mediaItem =\n\t\t\t_siteLogoId &&\n\t\t\tselect( coreStore ).getEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\t'attachment',\n\t\t\t\t_siteLogoId,\n\t\t\t\t{\n\t\t\t\t\tcontext: 'view',\n\t\t\t\t}\n\t\t\t);\n\t\tconst _isRequestingMediaItem =\n\t\t\t!! _siteLogoId &&\n\t\t\t! select( coreStore ).hasFinishedResolution( 'getEntityRecord', [\n\t\t\t\t'postType',\n\t\t\t\t'attachment',\n\t\t\t\t_siteLogoId,\n\t\t\t\t{ context: 'view' },\n\t\t\t] );\n\n\t\treturn {\n\t\t\tsiteLogoId: _siteLogoId,\n\t\t\tcanUserEdit: _canUserEdit,\n\t\t\turl: siteData?.home,\n\t\t\tmediaItemData: mediaItem,\n\t\t\tisRequestingMediaItem: _isRequestingMediaItem,\n\t\t\tsiteIconId: _siteIconId,\n\t\t};\n\t}, [] );\n\tconst { getSettings } = useSelect( blockEditorStore );\n\tconst [ temporaryURL, setTemporaryURL ] = useState();\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\n\tconst { editEntityRecord } = useDispatch( coreStore );\n\n\tconst setLogo = ( newValue, shouldForceSync = false ) => {\n\t\t// `shouldForceSync` is used to force syncing when the attribute\n\t\t// may not have updated yet.\n\t\tif ( shouldSyncIcon || shouldForceSync ) {\n\t\t\tsetIcon( newValue );\n\t\t}\n\n\t\teditEntityRecord( 'root', 'site', undefined, {\n\t\t\tsite_logo: newValue,\n\t\t} );\n\t};\n\n\tconst setIcon = ( newValue ) =>\n\t\t// The new value needs to be `null` to reset the Site Icon.\n\t\teditEntityRecord( 'root', 'site', undefined, {\n\t\t\tsite_icon: newValue ?? null,\n\t\t} );\n\n\tconst { alt_text: alt, source_url: logoUrl } = mediaItemData ?? {};\n\n\tconst onInitialSelectLogo = ( media ) => {\n\t\t// Initialize the syncSiteIcon toggle. If we currently have no Site logo and no\n\t\t// site icon, automatically sync the logo to the icon.\n\t\tif ( shouldSyncIcon === undefined ) {\n\t\t\tconst shouldForceSync = ! siteIconId;\n\t\t\tsetAttributes( { shouldSyncIcon: shouldForceSync } );\n\n\t\t\t// Because we cannot rely on the `shouldSyncIcon` attribute to have updated by\n\t\t\t// the time `setLogo` is called, pass an argument to force the syncing.\n\t\t\tonSelectLogo( media, shouldForceSync );\n\t\t\treturn;\n\t\t}\n\n\t\tonSelectLogo( media );\n\t};\n\n\tconst onSelectLogo = ( media, shouldForceSync = false ) => {\n\t\tif ( ! media ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! media.id && media.url ) {\n\t\t\t// This is a temporary blob image.\n\t\t\tsetTemporaryURL( media.url );\n\t\t\tsetLogo( undefined );\n\t\t\treturn;\n\t\t}\n\n\t\tsetLogo( media.id, shouldForceSync );\n\t};\n\n\tconst onRemoveLogo = () => {\n\t\tsetLogo( null );\n\t\tsetAttributes( { width: undefined } );\n\t};\n\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\tconst onUploadError = ( message ) => {\n\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\tsetTemporaryURL();\n\t};\n\n\tconst onFilesDrop = ( filesList ) => {\n\t\tgetSettings().mediaUpload( {\n\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\tfilesList,\n\t\t\tonFileChange( [ image ] ) {\n\t\t\t\tif ( isBlobURL( image?.url ) ) {\n\t\t\t\t\tsetTemporaryURL( image.url );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonInitialSelectLogo( image );\n\t\t\t},\n\t\t\tonError: onUploadError,\n\t\t\tmultiple: false,\n\t\t} );\n\t};\n\n\tconst mediaReplaceFlowProps = {\n\t\tmediaURL: logoUrl,\n\t\tname: ! logoUrl ? __( 'Choose logo' ) : __( 'Replace' ),\n\t\tonSelect: onSelectLogo,\n\t\tonError: onUploadError,\n\t\tonReset: onRemoveLogo,\n\t};\n\tconst controls = canUserEdit && (\n\t\t<BlockControls group=\"other\">\n\t\t\t<MediaReplaceFlow\n\t\t\t\t{ ...mediaReplaceFlowProps }\n\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\tvariant=\"toolbar\"\n\t\t\t/>\n\t\t</BlockControls>\n\t);\n\n\tlet logoImage;\n\tconst isLoading = siteLogoId === undefined || isRequestingMediaItem;\n\tif ( isLoading ) {\n\t\tlogoImage = <Spinner />;\n\t}\n\n\t// Reset temporary url when logoUrl is available.\n\tuseEffect( () => {\n\t\tif ( logoUrl && temporaryURL ) {\n\t\t\tsetTemporaryURL();\n\t\t}\n\t}, [ logoUrl, temporaryURL ] );\n\n\tif ( !! logoUrl || !! temporaryURL ) {\n\t\tlogoImage = (\n\t\t\t<>\n\t\t\t\t<SiteLogo\n\t\t\t\t\talt={ alt }\n\t\t\t\t\tattributes={ attributes }\n\t\t\t\t\tclassName={ className }\n\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\tlogoUrl={ temporaryURL || logoUrl }\n\t\t\t\t\tsetLogo={ setLogo }\n\t\t\t\t\tlogoId={ mediaItemData?.id || siteLogoId }\n\t\t\t\t\tsiteUrl={ url }\n\t\t\t\t\tsetIcon={ setIcon }\n\t\t\t\t\ticonId={ siteIconId }\n\t\t\t\t\tcanUserEdit={ canUserEdit }\n\t\t\t\t/>\n\t\t\t\t{ canUserEdit && <DropZone onFilesDrop={ onFilesDrop } /> }\n\t\t\t</>\n\t\t);\n\t}\n\tconst placeholder = ( content ) => {\n\t\tconst placeholderClassName = clsx(\n\t\t\t'block-editor-media-placeholder',\n\t\t\tclassName\n\t\t);\n\n\t\treturn (\n\t\t\t<Placeholder\n\t\t\t\tclassName={ placeholderClassName }\n\t\t\t\tpreview={ logoImage }\n\t\t\t\twithIllustration\n\t\t\t\tstyle={ {\n\t\t\t\t\twidth,\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ content }\n\t\t\t</Placeholder>\n\t\t);\n\t};\n\n\tconst classes = clsx( className, {\n\t\t'is-default-size': ! width,\n\t\t'is-transient': temporaryURL,\n\t} );\n\n\tconst blockProps = useBlockProps( { className: classes } );\n\n\tconst mediaInspectorPanel = ( canUserEdit || logoUrl ) && (\n\t\t<InspectorControls>\n\t\t\t<ToolsPanel\n\t\t\t\tlabel={ __( 'Media' ) }\n\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t>\n\t\t\t\t{ ! canUserEdit ? (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"block-library-site-logo__inspector-media-replace-container\"\n\t\t\t\t\t\tstyle={ { gridColumn: '1 / -1' } }\n\t\t\t\t\t>\n\t\t\t\t\t\t<MediaControlPreview\n\t\t\t\t\t\t\turl={ mediaItemData?.source_url }\n\t\t\t\t\t\t\tfilename={\n\t\t\t\t\t\t\t\tmediaItemData?.media_details?.sizes?.full\n\t\t\t\t\t\t\t\t\t?.file || mediaItemData?.slug\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\titemGroupProps={ {\n\t\t\t\t\t\t\t\tisBordered: true,\n\t\t\t\t\t\t\t\tclassName:\n\t\t\t\t\t\t\t\t\t'block-library-site-logo__inspector-readonly-logo-preview',\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tclassName=\"block-library-site-logo__inspector-media-replace-title\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t) : (\n\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\thasValue={ () => !! logoUrl }\n\t\t\t\t\t\tlabel={ __( 'Logo' ) }\n\t\t\t\t\t\tisShownByDefault\n\t\t\t\t\t>\n\t\t\t\t\t\t<MediaControl\n\t\t\t\t\t\t\tmediaId={ siteLogoId }\n\t\t\t\t\t\t\tmediaUrl={ logoUrl }\n\t\t\t\t\t\t\tfilename={\n\t\t\t\t\t\t\t\tmediaItemData?.media_details?.sizes?.full\n\t\t\t\t\t\t\t\t\t?.file || mediaItemData?.slug\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\t\tonSelect={ onSelectLogo }\n\t\t\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\t\t\tonReset={ onRemoveLogo }\n\t\t\t\t\t\t\tisUploading={ !! temporaryURL }\n\t\t\t\t\t\t\temptyLabel={ __( 'Logo' ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolsPanelItem>\n\t\t\t\t) }\n\t\t\t</ToolsPanel>\n\t\t</InspectorControls>\n\t);\n\n\treturn (\n\t\t<div { ...blockProps }>\n\t\t\t{ controls }\n\t\t\t{ mediaInspectorPanel }\n\t\t\t{ ( !! logoUrl || !! temporaryURL ) && logoImage }\n\t\t\t{ ( isLoading ||\n\t\t\t\t( ! temporaryURL && ! logoUrl && ! canUserEdit ) ) && (\n\t\t\t\t<Placeholder className=\"site-logo_placeholder\" withIllustration>\n\t\t\t\t\t{ isLoading && (\n\t\t\t\t\t\t<span className=\"components-placeholder__preview\">\n\t\t\t\t\t\t\t<Spinner />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) }\n\t\t\t\t</Placeholder>\n\t\t\t) }\n\t\t\t{ ! isLoading && ! temporaryURL && ! logoUrl && canUserEdit && (\n\t\t\t\t<MediaPlaceholder\n\t\t\t\t\tonSelect={ onInitialSelectLogo }\n\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\tplaceholder={ placeholder }\n\t\t\t\t\tmediaLibraryButton={ ( { open } ) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\ticon={ upload }\n\t\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\t\tlabel={ __( 'Choose logo' ) }\n\t\t\t\t\t\t\t\tshowTooltip\n\t\t\t\t\t\t\t\ttooltipPosition=\"middle right\"\n\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\topen();\n\t\t\t\t\t\t\t\t} }\n\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) }\n\t\t</div>\n\t);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["blockEditorPrivateApis", "blockEditorStore", "coreStore", "ImageEditor", "ToolsPanel", "ToolsPanelItem", "noticesStore", "clsx"]
|
|
7
7
|
}
|