@wordpress/block-library 8.28.4 → 8.28.5

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.
Files changed (51) hide show
  1. package/build/block/deprecated.js +71 -11
  2. package/build/block/deprecated.js.map +1 -1
  3. package/build/block/edit.js +49 -24
  4. package/build/block/edit.js.map +1 -1
  5. package/build/image/edit.js +6 -3
  6. package/build/image/edit.js.map +1 -1
  7. package/build/image/image.js +11 -5
  8. package/build/image/image.js.map +1 -1
  9. package/build/list-item/edit.js +1 -3
  10. package/build/list-item/edit.js.map +1 -1
  11. package/build/list-item/hooks/index.js +0 -7
  12. package/build/list-item/hooks/index.js.map +1 -1
  13. package/build/list-item/index.js +4 -1
  14. package/build/list-item/index.js.map +1 -1
  15. package/build/site-logo/edit.js +7 -2
  16. package/build/site-logo/edit.js.map +1 -1
  17. package/build-module/block/deprecated.js +71 -11
  18. package/build-module/block/deprecated.js.map +1 -1
  19. package/build-module/block/edit.js +49 -24
  20. package/build-module/block/edit.js.map +1 -1
  21. package/build-module/image/edit.js +7 -4
  22. package/build-module/image/edit.js.map +1 -1
  23. package/build-module/image/image.js +11 -5
  24. package/build-module/image/image.js.map +1 -1
  25. package/build-module/list-item/edit.js +2 -4
  26. package/build-module/list-item/edit.js.map +1 -1
  27. package/build-module/list-item/hooks/index.js +0 -1
  28. package/build-module/list-item/hooks/index.js.map +1 -1
  29. package/build-module/list-item/index.js +4 -1
  30. package/build-module/list-item/index.js.map +1 -1
  31. package/build-module/site-logo/edit.js +7 -2
  32. package/build-module/site-logo/edit.js.map +1 -1
  33. package/build-style/common-rtl.css +1 -0
  34. package/build-style/common.css +1 -0
  35. package/package.json +13 -13
  36. package/src/block/deprecated.js +76 -11
  37. package/src/block/edit.js +64 -19
  38. package/src/block/index.php +21 -12
  39. package/src/image/edit.js +10 -3
  40. package/src/image/image.js +20 -16
  41. package/src/list-item/edit.js +1 -2
  42. package/src/list-item/hooks/index.js +0 -1
  43. package/src/list-item/index.js +3 -0
  44. package/src/navigation/index.php +1 -1
  45. package/src/search/index.php +1 -1
  46. package/src/site-logo/edit.js +10 -5
  47. package/build/list-item/hooks/use-copy.js +0 -39
  48. package/build/list-item/hooks/use-copy.js.map +0 -1
  49. package/build-module/list-item/hooks/use-copy.js +0 -32
  50. package/build-module/list-item/hooks/use-copy.js.map +0 -1
  51. package/src/list-item/hooks/use-copy.js +0 -38
@@ -1 +1 @@
1
- {"version":3,"names":["listItem","icon","initBlock","metadata","$schema","apiVersion","name","title","category","parent","allowedBlocks","description","textdomain","attributes","placeholder","type","content","source","selector","__experimentalRole","supports","className","__experimentalSelector","spacing","margin","padding","__experimentalDefaultControls","typography","fontSize","lineHeight","__experimentalFontFamily","__experimentalFontWeight","__experimentalFontStyle","__experimentalTextTransform","__experimentalTextDecoration","__experimentalLetterSpacing","interactivity","clientNavigation","edit","save","transforms","settings","merge","attributesToMerge","init"],"sources":["@wordpress/block-library/src/list-item/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { listItem as icon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport initBlock from '../utils/init-block';\nimport metadata from './block.json';\nimport edit from './edit';\nimport save from './save';\nimport transforms from './transforms';\n\nconst { name } = metadata;\n\nexport { metadata, name };\n\nexport const settings = {\n\ticon,\n\tedit,\n\tsave,\n\tmerge( attributes, attributesToMerge ) {\n\t\treturn {\n\t\t\t...attributes,\n\t\t\tcontent: attributes.content + attributesToMerge.content,\n\t\t};\n\t},\n\ttransforms,\n};\n\nexport const init = () => initBlock( { name, metadata, settings } );\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,QAAQ,IAAIC,IAAI,QAAQ,kBAAkB;;AAEnD;AACA;AACA;AACA,OAAOC,SAAS,MAAM,qBAAqB;AAAC,MAAAC,QAAA;EAAAC,OAAA;EAAAC,UAAA;EAAAC,IAAA;EAAAC,KAAA;EAAAC,QAAA;EAAAC,MAAA;EAAAC,aAAA;EAAAC,WAAA;EAAAC,UAAA;EAAAC,UAAA;IAAAC,WAAA;MAAAC,IAAA;IAAA;IAAAC,OAAA;MAAAD,IAAA;MAAAE,MAAA;MAAAC,QAAA;MAAAC,kBAAA;IAAA;EAAA;EAAAC,QAAA;IAAAC,SAAA;IAAAC,sBAAA;IAAAC,OAAA;MAAAC,MAAA;MAAAC,OAAA;MAAAC,6BAAA;QAAAF,MAAA;QAAAC,OAAA;MAAA;IAAA;IAAAE,UAAA;MAAAC,QAAA;MAAAC,UAAA;MAAAC,wBAAA;MAAAC,wBAAA;MAAAC,uBAAA;MAAAC,2BAAA;MAAAC,4BAAA;MAAAC,2BAAA;MAAAT,6BAAA;QAAAE,QAAA;MAAA;IAAA;IAAAQ,aAAA;MAAAC,gBAAA;IAAA;EAAA;AAAA;AAE5C,OAAOC,IAAI,MAAM,QAAQ;AACzB,OAAOC,IAAI,MAAM,QAAQ;AACzB,OAAOC,UAAU,MAAM,cAAc;AAErC,MAAM;EAAElC;AAAK,CAAC,GAAGH,QAAQ;AAEzB,SAASA,QAAQ,EAAEG,IAAI;AAEvB,OAAO,MAAMmC,QAAQ,GAAG;EACvBxC,IAAI;EACJqC,IAAI;EACJC,IAAI;EACJG,KAAKA,CAAE7B,UAAU,EAAE8B,iBAAiB,EAAG;IACtC,OAAO;MACN,GAAG9B,UAAU;MACbG,OAAO,EAAEH,UAAU,CAACG,OAAO,GAAG2B,iBAAiB,CAAC3B;IACjD,CAAC;EACF,CAAC;EACDwB;AACD,CAAC;AAED,OAAO,MAAMI,IAAI,GAAGA,CAAA,KAAM1C,SAAS,CAAE;EAAEI,IAAI;EAAEH,QAAQ;EAAEsC;AAAS,CAAE,CAAC"}
1
+ {"version":3,"names":["listItem","icon","privateApis","initBlock","metadata","$schema","apiVersion","name","title","category","parent","allowedBlocks","description","textdomain","attributes","placeholder","type","content","source","selector","__experimentalRole","supports","className","__experimentalSelector","spacing","margin","padding","__experimentalDefaultControls","typography","fontSize","lineHeight","__experimentalFontFamily","__experimentalFontWeight","__experimentalFontStyle","__experimentalTextTransform","__experimentalTextDecoration","__experimentalLetterSpacing","interactivity","clientNavigation","edit","save","transforms","unlock","settings","merge","attributesToMerge","requiresWrapperOnCopy","init"],"sources":["@wordpress/block-library/src/list-item/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { listItem as icon } from '@wordpress/icons';\nimport { privateApis } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport initBlock from '../utils/init-block';\nimport metadata from './block.json';\nimport edit from './edit';\nimport save from './save';\nimport transforms from './transforms';\nimport { unlock } from '../lock-unlock';\n\nconst { name } = metadata;\n\nexport { metadata, name };\n\nexport const settings = {\n\ticon,\n\tedit,\n\tsave,\n\tmerge( attributes, attributesToMerge ) {\n\t\treturn {\n\t\t\t...attributes,\n\t\t\tcontent: attributes.content + attributesToMerge.content,\n\t\t};\n\t},\n\ttransforms,\n\t[ unlock( privateApis ).requiresWrapperOnCopy ]: true,\n};\n\nexport const init = () => initBlock( { name, metadata, settings } );\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,QAAQ,IAAIC,IAAI,QAAQ,kBAAkB;AACnD,SAASC,WAAW,QAAQ,yBAAyB;;AAErD;AACA;AACA;AACA,OAAOC,SAAS,MAAM,qBAAqB;AAAC,MAAAC,QAAA;EAAAC,OAAA;EAAAC,UAAA;EAAAC,IAAA;EAAAC,KAAA;EAAAC,QAAA;EAAAC,MAAA;EAAAC,aAAA;EAAAC,WAAA;EAAAC,UAAA;EAAAC,UAAA;IAAAC,WAAA;MAAAC,IAAA;IAAA;IAAAC,OAAA;MAAAD,IAAA;MAAAE,MAAA;MAAAC,QAAA;MAAAC,kBAAA;IAAA;EAAA;EAAAC,QAAA;IAAAC,SAAA;IAAAC,sBAAA;IAAAC,OAAA;MAAAC,MAAA;MAAAC,OAAA;MAAAC,6BAAA;QAAAF,MAAA;QAAAC,OAAA;MAAA;IAAA;IAAAE,UAAA;MAAAC,QAAA;MAAAC,UAAA;MAAAC,wBAAA;MAAAC,wBAAA;MAAAC,uBAAA;MAAAC,2BAAA;MAAAC,4BAAA;MAAAC,2BAAA;MAAAT,6BAAA;QAAAE,QAAA;MAAA;IAAA;IAAAQ,aAAA;MAAAC,gBAAA;IAAA;EAAA;AAAA;AAE5C,OAAOC,IAAI,MAAM,QAAQ;AACzB,OAAOC,IAAI,MAAM,QAAQ;AACzB,OAAOC,UAAU,MAAM,cAAc;AACrC,SAASC,MAAM,QAAQ,gBAAgB;AAEvC,MAAM;EAAEnC;AAAK,CAAC,GAAGH,QAAQ;AAEzB,SAASA,QAAQ,EAAEG,IAAI;AAEvB,OAAO,MAAMoC,QAAQ,GAAG;EACvB1C,IAAI;EACJsC,IAAI;EACJC,IAAI;EACJI,KAAKA,CAAE9B,UAAU,EAAE+B,iBAAiB,EAAG;IACtC,OAAO;MACN,GAAG/B,UAAU;MACbG,OAAO,EAAEH,UAAU,CAACG,OAAO,GAAG4B,iBAAiB,CAAC5B;IACjD,CAAC;EACF,CAAC;EACDwB,UAAU;EACV,CAAEC,MAAM,CAAExC,WAAY,CAAC,CAAC4C,qBAAqB,GAAI;AAClD,CAAC;AAED,OAAO,MAAMC,IAAI,GAAGA,CAAA,KAAM5C,SAAS,CAAE;EAAEI,IAAI;EAAEH,QAAQ;EAAEuC;AAAS,CAAE,CAAC"}
@@ -228,11 +228,16 @@ const SiteLogo = ({
228
228
  });
229
229
  }
230
230
  }, imgWrapper);
231
+
232
+ // Support the previous location for the Site Icon settings. To be removed
233
+ // when the required WP core version for Gutenberg is >= 6.5.0.
234
+ const shouldUseNewUrl = !window?.__experimentalUseCustomizerSiteLogoUrl;
235
+ const siteIconSettingsUrl = shouldUseNewUrl ? siteUrl + '/wp-admin/options-general.php' : siteUrl + '/wp-admin/customize.php?autofocus[section]=title_tagline';
231
236
  const syncSiteIconHelpText = createInterpolateElement(__('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>.'), {
232
237
  a:
233
238
  // eslint-disable-next-line jsx-a11y/anchor-has-content
234
239
  createElement("a", {
235
- href: siteUrl + '/wp-admin/customize.php?autofocus[section]=title_tagline',
240
+ href: siteIconSettingsUrl,
236
241
  target: "_blank",
237
242
  rel: "noopener noreferrer"
238
243
  })
@@ -267,7 +272,7 @@ const SiteLogo = ({
267
272
  checked: linkTarget === '_blank'
268
273
  })), canUserEdit && createElement(Fragment, null, createElement(ToggleControl, {
269
274
  __nextHasNoMarginBottom: true,
270
- label: __('Use as site icon'),
275
+ label: __('Use as Site Icon'),
271
276
  onChange: value => {
272
277
  setAttributes({
273
278
  shouldSyncIcon: value
@@ -1 +1 @@
1
- {"version":3,"names":["classnames","isBlobURL","createInterpolateElement","useEffect","useState","useRef","__","isRTL","MenuItem","PanelBody","RangeControl","ResizableBox","Spinner","ToggleControl","ToolbarButton","Placeholder","Button","DropZone","FlexItem","__experimentalItemGroup","ItemGroup","__experimentalHStack","HStack","__experimentalTruncate","Truncate","useViewportMatch","BlockControls","InspectorControls","MediaPlaceholder","MediaUpload","MediaUploadCheck","MediaReplaceFlow","useBlockProps","store","blockEditorStore","__experimentalImageEditor","ImageEditor","useSelect","useDispatch","coreStore","crop","upload","noticesStore","useClientWidth","MIN_SIZE","ALLOWED_MEDIA_TYPES","ACCEPT_MEDIA_STRING","SiteLogo","alt","attributes","align","width","height","isLink","linkTarget","shouldSyncIcon","containerRef","isSelected","setAttributes","setLogo","logoUrl","siteUrl","logoId","iconId","setIcon","canUserEdit","clientWidth","isLargeViewport","isWideAligned","includes","isResizable","naturalWidth","naturalHeight","setNaturalSize","isEditingImage","setIsEditingImage","toggleSelection","classes","imageEditing","maxWidth","title","select","settings","getSettings","siteEntities","getEntityRecord","name","onResizeStart","onResizeStop","img","createElement","className","src","onLoad","event","target","imgWrapper","href","rel","onClick","preventDefault","imageWidthWithinContainer","exceedMaxWidth","style","defaultWidth","currentWidth","ratio","currentHeight","minWidth","Math","ceil","minHeight","maxWidthBuffer","showRightHandle","showLeftHandle","canEditImage","imgEdit","id","url","onSaveImage","imageAttributes","onFinishEditing","size","showHandle","maxHeight","lockAspectRatio","enable","top","right","bottom","left","direction","elt","delta","parseInt","syncSiteIconHelpText","a","Fragment","__nextHasNoMarginBottom","__next40pxDefaultSize","label","onChange","newWidth","min","max","initialPosition","value","disabled","checked","undefined","help","group","icon","SiteLogoReplaceFlow","onRemoveLogo","mediaReplaceProps","allowedTypes","accept","InspectorLogoPreview","mediaItemData","itemGroupProps","alt_text","source_url","slug","logoSlug","media_details","logoMediaDetails","logoLabel","sizes","full","file","as","justify","numberOfLines","LogoEdit","ref","siteLogoId","siteIconId","isRequestingMediaItem","canUser","getEditedEntityRecord","_canUserEdit","siteSettings","siteData","_siteLogoId","site_logo","_siteIconId","site_icon","mediaItem","getMedia","context","_isRequestingMediaItem","hasFinishedResolution","home","editEntityRecord","newValue","shouldForceSync","onInitialSelectLogo","media","onSelectLogo","createErrorNotice","onUploadError","message","type","onFilesDrop","filesList","mediaUpload","onFileChange","image","onError","mediaReplaceFlowProps","mediaURL","onSelect","controls","logoImage","isLoading","placeholder","content","placeholderClassName","preview","withIllustration","blockProps","mediaInspectorPanel","isBordered","popoverProps","render","open","variant","mediaLibraryButton","showTooltip","tooltipPosition"],"sources":["@wordpress/block-library/src/site-logo/edit.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { isBlobURL } from '@wordpress/blob';\nimport {\n\tcreateInterpolateElement,\n\tuseEffect,\n\tuseState,\n\tuseRef,\n} from '@wordpress/element';\nimport { __, isRTL } from '@wordpress/i18n';\nimport {\n\tMenuItem,\n\tPanelBody,\n\tRangeControl,\n\tResizableBox,\n\tSpinner,\n\tToggleControl,\n\tToolbarButton,\n\tPlaceholder,\n\tButton,\n\tDropZone,\n\tFlexItem,\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalHStack as HStack,\n\t__experimentalTruncate as Truncate,\n} from '@wordpress/components';\nimport { useViewportMatch } from '@wordpress/compose';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tMediaPlaceholder,\n\tMediaUpload,\n\tMediaUploadCheck,\n\tMediaReplaceFlow,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n\t__experimentalImageEditor as ImageEditor,\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 useClientWidth from '../image/use-client-width';\n\n/**\n * Module constants\n */\nimport { MIN_SIZE } from '../image/constants';\n\nconst ALLOWED_MEDIA_TYPES = [ 'image' ];\nconst ACCEPT_MEDIA_STRING = 'image/*';\n\nconst SiteLogo = ( {\n\talt,\n\tattributes: { align, width, height, isLink, linkTarget, shouldSyncIcon },\n\tcontainerRef,\n\tisSelected,\n\tsetAttributes,\n\tsetLogo,\n\tlogoUrl,\n\tsiteUrl,\n\tlogoId,\n\ticonId,\n\tsetIcon,\n\tcanUserEdit,\n} ) => {\n\tconst clientWidth = useClientWidth( containerRef, [ align ] );\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 classes = classnames( 'custom-logo-link', {\n\t\t'is-transient': isBlobURL( logoUrl ),\n\t} );\n\tconst { imageEditing, maxWidth, title } = 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};\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<img\n\t\t\tclassName=\"custom-logo\"\n\t\t\tsrc={ logoUrl }\n\t\t\talt={ alt }\n\t\t\tonLoad={ ( event ) => {\n\t\t\t\tsetNaturalSize( {\n\t\t\t\t\tnaturalWidth: event.target.naturalWidth,\n\t\t\t\t\tnaturalHeight: event.target.naturalHeight,\n\t\t\t\t} );\n\t\t\t} }\n\t\t/>\n\t);\n\n\tlet imgWrapper = img;\n\n\t// Disable reason: Image itself is not meant to be interactive, but\n\t// should direct focus to block.\n\tif ( isLink ) {\n\t\timgWrapper = (\n\t\t\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t\t\t<a\n\t\t\t\thref={ siteUrl }\n\t\t\t\tclassName={ classes }\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\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t\t);\n\t}\n\n\tlet imageWidthWithinContainer;\n\n\tif ( clientWidth && naturalWidth && naturalHeight ) {\n\t\tconst exceedMaxWidth = naturalWidth > clientWidth;\n\t\timageWidthWithinContainer = exceedMaxWidth ? clientWidth : naturalWidth;\n\t}\n\n\tif ( ! isResizable || ! imageWidthWithinContainer ) {\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 && naturalWidth && naturalHeight && imageEditing;\n\n\tconst imgEdit =\n\t\tcanEditImage && isEditingImage ? (\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\tclientWidth={ clientWidth }\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\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 }\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\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\n\t\t\t\t<a\n\t\t\t\t\thref={\n\t\t\t\t\t\tsiteUrl +\n\t\t\t\t\t\t'/wp-admin/customize.php?autofocus[section]=title_tagline'\n\t\t\t\t\t}\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener noreferrer\"\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<PanelBody title={ __( 'Settings' ) }>\n\t\t\t\t\t<RangeControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tlabel={ __( 'Image width' ) }\n\t\t\t\t\t\tonChange={ ( newWidth ) =>\n\t\t\t\t\t\t\tsetAttributes( { width: newWidth } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmin={ minWidth }\n\t\t\t\t\t\tmax={ maxWidthBuffer }\n\t\t\t\t\t\tinitialPosition={ Math.min(\n\t\t\t\t\t\t\tdefaultWidth,\n\t\t\t\t\t\t\tmaxWidthBuffer\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tvalue={ width || '' }\n\t\t\t\t\t\tdisabled={ ! isResizable }\n\t\t\t\t\t/>\n\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tlabel={ __( 'Link image to home' ) }\n\t\t\t\t\t\tonChange={ () => setAttributes( { isLink: ! isLink } ) }\n\t\t\t\t\t\tchecked={ isLink }\n\t\t\t\t\t/>\n\t\t\t\t\t{ isLink && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\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</>\n\t\t\t\t\t) }\n\t\t\t\t\t{ canUserEdit && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\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</>\n\t\t\t\t\t) }\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t{ canEditImage && ! isEditingImage && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ () => setIsEditingImage( true ) }\n\t\t\t\t\t\ticon={ crop }\n\t\t\t\t\t\tlabel={ __( 'Crop' ) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</BlockControls>\n\t\t\t{ imgEdit }\n\t\t</>\n\t);\n};\n\n// This is a light wrapper around MediaReplaceFlow because the block has two\n// different MediaReplaceFlows, one for the inspector and one for the toolbar.\nfunction SiteLogoReplaceFlow( { onRemoveLogo, ...mediaReplaceProps } ) {\n\treturn (\n\t\t<MediaReplaceFlow\n\t\t\t{ ...mediaReplaceProps }\n\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\taccept={ ACCEPT_MEDIA_STRING }\n\t\t>\n\t\t\t<MenuItem onClick={ onRemoveLogo }>{ __( 'Reset' ) }</MenuItem>\n\t\t</MediaReplaceFlow>\n\t);\n}\n\nconst InspectorLogoPreview = ( { mediaItemData = {}, itemGroupProps } ) => {\n\tconst {\n\t\talt_text: alt,\n\t\tsource_url: logoUrl,\n\t\tslug: logoSlug,\n\t\tmedia_details: logoMediaDetails,\n\t} = mediaItemData;\n\tconst logoLabel = logoMediaDetails?.sizes?.full?.file || logoSlug;\n\treturn (\n\t\t<ItemGroup { ...itemGroupProps } as=\"span\">\n\t\t\t<HStack justify=\"flex-start\" as=\"span\">\n\t\t\t\t<img src={ logoUrl } alt={ alt } />\n\t\t\t\t<FlexItem as=\"span\">\n\t\t\t\t\t<Truncate\n\t\t\t\t\t\tnumberOfLines={ 1 }\n\t\t\t\t\t\tclassName=\"block-library-site-logo__inspector-media-replace-title\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ logoLabel }\n\t\t\t\t\t</Truncate>\n\t\t\t\t</FlexItem>\n\t\t\t</HStack>\n\t\t</ItemGroup>\n\t);\n};\n\nexport default function LogoEdit( {\n\tattributes,\n\tclassName,\n\tsetAttributes,\n\tisSelected,\n} ) {\n\tconst { width, shouldSyncIcon } = attributes;\n\tconst ref = useRef();\n\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', 'settings' );\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 ).getMedia( _siteLogoId, {\n\t\t\t\tcontext: 'view',\n\t\t\t} );\n\t\tconst _isRequestingMediaItem =\n\t\t\t_siteLogoId &&\n\t\t\t! select( coreStore ).hasFinishedResolution( 'getMedia', [\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\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\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};\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\treturn;\n\t\t\t\t}\n\t\t\t\tonInitialSelectLogo( image );\n\t\t\t},\n\t\t\tonError: onUploadError,\n\t\t} );\n\t};\n\n\tconst mediaReplaceFlowProps = {\n\t\tmediaURL: logoUrl,\n\t\tonSelect: onSelectLogo,\n\t\tonError: onUploadError,\n\t\tonRemoveLogo,\n\t};\n\tconst controls = canUserEdit && logoUrl && (\n\t\t<BlockControls group=\"other\">\n\t\t\t<SiteLogoReplaceFlow { ...mediaReplaceFlowProps } />\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\tif ( !! logoUrl ) {\n\t\tlogoImage = (\n\t\t\t<SiteLogo\n\t\t\t\talt={ alt }\n\t\t\t\tattributes={ attributes }\n\t\t\t\tclassName={ className }\n\t\t\t\tcontainerRef={ ref }\n\t\t\t\tisSelected={ isSelected }\n\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\tlogoUrl={ logoUrl }\n\t\t\t\tsetLogo={ setLogo }\n\t\t\t\tlogoId={ mediaItemData?.id || siteLogoId }\n\t\t\t\tsiteUrl={ url }\n\t\t\t\tsetIcon={ setIcon }\n\t\t\t\ticonId={ siteIconId }\n\t\t\t\tcanUserEdit={ canUserEdit }\n\t\t\t/>\n\t\t);\n\t}\n\tconst placeholder = ( content ) => {\n\t\tconst placeholderClassName = classnames(\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={ true }\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 = classnames( className, {\n\t\t'is-default-size': ! width,\n\t} );\n\n\tconst blockProps = useBlockProps( {\n\t\tref,\n\t\tclassName: classes,\n\t} );\n\n\tconst label = __( 'Add a site logo' );\n\n\tconst mediaInspectorPanel = ( canUserEdit || logoUrl ) && (\n\t\t<InspectorControls>\n\t\t\t<PanelBody title={ __( 'Media' ) }>\n\t\t\t\t<div className=\"block-library-site-logo__inspector-media-replace-container\">\n\t\t\t\t\t{ ! canUserEdit && !! logoUrl && (\n\t\t\t\t\t\t<InspectorLogoPreview\n\t\t\t\t\t\t\tmediaItemData={ mediaItemData }\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/>\n\t\t\t\t\t) }\n\t\t\t\t\t{ canUserEdit && !! logoUrl && (\n\t\t\t\t\t\t<SiteLogoReplaceFlow\n\t\t\t\t\t\t\t{ ...mediaReplaceFlowProps }\n\t\t\t\t\t\t\tname={\n\t\t\t\t\t\t\t\t<InspectorLogoPreview\n\t\t\t\t\t\t\t\t\tmediaItemData={ mediaItemData }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpopoverProps={ {} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\t{ canUserEdit && ! logoUrl && (\n\t\t\t\t\t\t<MediaUploadCheck>\n\t\t\t\t\t\t\t<MediaUpload\n\t\t\t\t\t\t\t\tonSelect={ onInitialSelectLogo }\n\t\t\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\t\t\trender={ ( { open } ) => (\n\t\t\t\t\t\t\t\t\t<div className=\"block-library-site-logo__inspector-upload-container\">\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\tonClick={ open }\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{ isLoading ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<Spinner />\n\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t__( 'Add media' )\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t<DropZone onFilesDrop={ onFilesDrop } />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</MediaUploadCheck>\n\t\t\t\t\t) }\n\t\t\t\t</div>\n\t\t\t</PanelBody>\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 && logoImage }\n\t\t\t{ ! logoUrl && ! canUserEdit && (\n\t\t\t\t<Placeholder className=\"site-logo_placeholder\">\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{ ! logoUrl && canUserEdit && (\n\t\t\t\t<MediaPlaceholder\n\t\t\t\t\tonSelect={ onInitialSelectLogo }\n\t\t\t\t\taccept={ ACCEPT_MEDIA_STRING }\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\ticon={ upload }\n\t\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\t\t\tshowTooltip\n\t\t\t\t\t\t\t\ttooltipPosition=\"top center\"\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"],"mappings":"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"}
1
+ {"version":3,"names":["classnames","isBlobURL","createInterpolateElement","useEffect","useState","useRef","__","isRTL","MenuItem","PanelBody","RangeControl","ResizableBox","Spinner","ToggleControl","ToolbarButton","Placeholder","Button","DropZone","FlexItem","__experimentalItemGroup","ItemGroup","__experimentalHStack","HStack","__experimentalTruncate","Truncate","useViewportMatch","BlockControls","InspectorControls","MediaPlaceholder","MediaUpload","MediaUploadCheck","MediaReplaceFlow","useBlockProps","store","blockEditorStore","__experimentalImageEditor","ImageEditor","useSelect","useDispatch","coreStore","crop","upload","noticesStore","useClientWidth","MIN_SIZE","ALLOWED_MEDIA_TYPES","ACCEPT_MEDIA_STRING","SiteLogo","alt","attributes","align","width","height","isLink","linkTarget","shouldSyncIcon","containerRef","isSelected","setAttributes","setLogo","logoUrl","siteUrl","logoId","iconId","setIcon","canUserEdit","clientWidth","isLargeViewport","isWideAligned","includes","isResizable","naturalWidth","naturalHeight","setNaturalSize","isEditingImage","setIsEditingImage","toggleSelection","classes","imageEditing","maxWidth","title","select","settings","getSettings","siteEntities","getEntityRecord","name","onResizeStart","onResizeStop","img","createElement","className","src","onLoad","event","target","imgWrapper","href","rel","onClick","preventDefault","imageWidthWithinContainer","exceedMaxWidth","style","defaultWidth","currentWidth","ratio","currentHeight","minWidth","Math","ceil","minHeight","maxWidthBuffer","showRightHandle","showLeftHandle","canEditImage","imgEdit","id","url","onSaveImage","imageAttributes","onFinishEditing","size","showHandle","maxHeight","lockAspectRatio","enable","top","right","bottom","left","direction","elt","delta","parseInt","shouldUseNewUrl","window","__experimentalUseCustomizerSiteLogoUrl","siteIconSettingsUrl","syncSiteIconHelpText","a","Fragment","__nextHasNoMarginBottom","__next40pxDefaultSize","label","onChange","newWidth","min","max","initialPosition","value","disabled","checked","undefined","help","group","icon","SiteLogoReplaceFlow","onRemoveLogo","mediaReplaceProps","allowedTypes","accept","InspectorLogoPreview","mediaItemData","itemGroupProps","alt_text","source_url","slug","logoSlug","media_details","logoMediaDetails","logoLabel","sizes","full","file","as","justify","numberOfLines","LogoEdit","ref","siteLogoId","siteIconId","isRequestingMediaItem","canUser","getEditedEntityRecord","_canUserEdit","siteSettings","siteData","_siteLogoId","site_logo","_siteIconId","site_icon","mediaItem","getMedia","context","_isRequestingMediaItem","hasFinishedResolution","home","editEntityRecord","newValue","shouldForceSync","onInitialSelectLogo","media","onSelectLogo","createErrorNotice","onUploadError","message","type","onFilesDrop","filesList","mediaUpload","onFileChange","image","onError","mediaReplaceFlowProps","mediaURL","onSelect","controls","logoImage","isLoading","placeholder","content","placeholderClassName","preview","withIllustration","blockProps","mediaInspectorPanel","isBordered","popoverProps","render","open","variant","mediaLibraryButton","showTooltip","tooltipPosition"],"sources":["@wordpress/block-library/src/site-logo/edit.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { isBlobURL } from '@wordpress/blob';\nimport {\n\tcreateInterpolateElement,\n\tuseEffect,\n\tuseState,\n\tuseRef,\n} from '@wordpress/element';\nimport { __, isRTL } from '@wordpress/i18n';\nimport {\n\tMenuItem,\n\tPanelBody,\n\tRangeControl,\n\tResizableBox,\n\tSpinner,\n\tToggleControl,\n\tToolbarButton,\n\tPlaceholder,\n\tButton,\n\tDropZone,\n\tFlexItem,\n\t__experimentalItemGroup as ItemGroup,\n\t__experimentalHStack as HStack,\n\t__experimentalTruncate as Truncate,\n} from '@wordpress/components';\nimport { useViewportMatch } from '@wordpress/compose';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tMediaPlaceholder,\n\tMediaUpload,\n\tMediaUploadCheck,\n\tMediaReplaceFlow,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n\t__experimentalImageEditor as ImageEditor,\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 useClientWidth from '../image/use-client-width';\n\n/**\n * Module constants\n */\nimport { MIN_SIZE } from '../image/constants';\n\nconst ALLOWED_MEDIA_TYPES = [ 'image' ];\nconst ACCEPT_MEDIA_STRING = 'image/*';\n\nconst SiteLogo = ( {\n\talt,\n\tattributes: { align, width, height, isLink, linkTarget, shouldSyncIcon },\n\tcontainerRef,\n\tisSelected,\n\tsetAttributes,\n\tsetLogo,\n\tlogoUrl,\n\tsiteUrl,\n\tlogoId,\n\ticonId,\n\tsetIcon,\n\tcanUserEdit,\n} ) => {\n\tconst clientWidth = useClientWidth( containerRef, [ align ] );\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 classes = classnames( 'custom-logo-link', {\n\t\t'is-transient': isBlobURL( logoUrl ),\n\t} );\n\tconst { imageEditing, maxWidth, title } = 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};\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<img\n\t\t\tclassName=\"custom-logo\"\n\t\t\tsrc={ logoUrl }\n\t\t\talt={ alt }\n\t\t\tonLoad={ ( event ) => {\n\t\t\t\tsetNaturalSize( {\n\t\t\t\t\tnaturalWidth: event.target.naturalWidth,\n\t\t\t\t\tnaturalHeight: event.target.naturalHeight,\n\t\t\t\t} );\n\t\t\t} }\n\t\t/>\n\t);\n\n\tlet imgWrapper = img;\n\n\t// Disable reason: Image itself is not meant to be interactive, but\n\t// should direct focus to block.\n\tif ( isLink ) {\n\t\timgWrapper = (\n\t\t\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t\t\t<a\n\t\t\t\thref={ siteUrl }\n\t\t\t\tclassName={ classes }\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\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t\t);\n\t}\n\n\tlet imageWidthWithinContainer;\n\n\tif ( clientWidth && naturalWidth && naturalHeight ) {\n\t\tconst exceedMaxWidth = naturalWidth > clientWidth;\n\t\timageWidthWithinContainer = exceedMaxWidth ? clientWidth : naturalWidth;\n\t}\n\n\tif ( ! isResizable || ! imageWidthWithinContainer ) {\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 && naturalWidth && naturalHeight && imageEditing;\n\n\tconst imgEdit =\n\t\tcanEditImage && isEditingImage ? (\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\tclientWidth={ clientWidth }\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\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 }\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\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\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 noreferrer\"\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<PanelBody title={ __( 'Settings' ) }>\n\t\t\t\t\t<RangeControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tlabel={ __( 'Image width' ) }\n\t\t\t\t\t\tonChange={ ( newWidth ) =>\n\t\t\t\t\t\t\tsetAttributes( { width: newWidth } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmin={ minWidth }\n\t\t\t\t\t\tmax={ maxWidthBuffer }\n\t\t\t\t\t\tinitialPosition={ Math.min(\n\t\t\t\t\t\t\tdefaultWidth,\n\t\t\t\t\t\t\tmaxWidthBuffer\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tvalue={ width || '' }\n\t\t\t\t\t\tdisabled={ ! isResizable }\n\t\t\t\t\t/>\n\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tlabel={ __( 'Link image to home' ) }\n\t\t\t\t\t\tonChange={ () => setAttributes( { isLink: ! isLink } ) }\n\t\t\t\t\t\tchecked={ isLink }\n\t\t\t\t\t/>\n\t\t\t\t\t{ isLink && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\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</>\n\t\t\t\t\t) }\n\t\t\t\t\t{ canUserEdit && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\t__nextHasNoMarginBottom\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</>\n\t\t\t\t\t) }\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t{ canEditImage && ! isEditingImage && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ () => setIsEditingImage( true ) }\n\t\t\t\t\t\ticon={ crop }\n\t\t\t\t\t\tlabel={ __( 'Crop' ) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</BlockControls>\n\t\t\t{ imgEdit }\n\t\t</>\n\t);\n};\n\n// This is a light wrapper around MediaReplaceFlow because the block has two\n// different MediaReplaceFlows, one for the inspector and one for the toolbar.\nfunction SiteLogoReplaceFlow( { onRemoveLogo, ...mediaReplaceProps } ) {\n\treturn (\n\t\t<MediaReplaceFlow\n\t\t\t{ ...mediaReplaceProps }\n\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\taccept={ ACCEPT_MEDIA_STRING }\n\t\t>\n\t\t\t<MenuItem onClick={ onRemoveLogo }>{ __( 'Reset' ) }</MenuItem>\n\t\t</MediaReplaceFlow>\n\t);\n}\n\nconst InspectorLogoPreview = ( { mediaItemData = {}, itemGroupProps } ) => {\n\tconst {\n\t\talt_text: alt,\n\t\tsource_url: logoUrl,\n\t\tslug: logoSlug,\n\t\tmedia_details: logoMediaDetails,\n\t} = mediaItemData;\n\tconst logoLabel = logoMediaDetails?.sizes?.full?.file || logoSlug;\n\treturn (\n\t\t<ItemGroup { ...itemGroupProps } as=\"span\">\n\t\t\t<HStack justify=\"flex-start\" as=\"span\">\n\t\t\t\t<img src={ logoUrl } alt={ alt } />\n\t\t\t\t<FlexItem as=\"span\">\n\t\t\t\t\t<Truncate\n\t\t\t\t\t\tnumberOfLines={ 1 }\n\t\t\t\t\t\tclassName=\"block-library-site-logo__inspector-media-replace-title\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ logoLabel }\n\t\t\t\t\t</Truncate>\n\t\t\t\t</FlexItem>\n\t\t\t</HStack>\n\t\t</ItemGroup>\n\t);\n};\n\nexport default function LogoEdit( {\n\tattributes,\n\tclassName,\n\tsetAttributes,\n\tisSelected,\n} ) {\n\tconst { width, shouldSyncIcon } = attributes;\n\tconst ref = useRef();\n\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', 'settings' );\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 ).getMedia( _siteLogoId, {\n\t\t\t\tcontext: 'view',\n\t\t\t} );\n\t\tconst _isRequestingMediaItem =\n\t\t\t_siteLogoId &&\n\t\t\t! select( coreStore ).hasFinishedResolution( 'getMedia', [\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\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\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};\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\treturn;\n\t\t\t\t}\n\t\t\t\tonInitialSelectLogo( image );\n\t\t\t},\n\t\t\tonError: onUploadError,\n\t\t} );\n\t};\n\n\tconst mediaReplaceFlowProps = {\n\t\tmediaURL: logoUrl,\n\t\tonSelect: onSelectLogo,\n\t\tonError: onUploadError,\n\t\tonRemoveLogo,\n\t};\n\tconst controls = canUserEdit && logoUrl && (\n\t\t<BlockControls group=\"other\">\n\t\t\t<SiteLogoReplaceFlow { ...mediaReplaceFlowProps } />\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\tif ( !! logoUrl ) {\n\t\tlogoImage = (\n\t\t\t<SiteLogo\n\t\t\t\talt={ alt }\n\t\t\t\tattributes={ attributes }\n\t\t\t\tclassName={ className }\n\t\t\t\tcontainerRef={ ref }\n\t\t\t\tisSelected={ isSelected }\n\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\tlogoUrl={ logoUrl }\n\t\t\t\tsetLogo={ setLogo }\n\t\t\t\tlogoId={ mediaItemData?.id || siteLogoId }\n\t\t\t\tsiteUrl={ url }\n\t\t\t\tsetIcon={ setIcon }\n\t\t\t\ticonId={ siteIconId }\n\t\t\t\tcanUserEdit={ canUserEdit }\n\t\t\t/>\n\t\t);\n\t}\n\tconst placeholder = ( content ) => {\n\t\tconst placeholderClassName = classnames(\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={ true }\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 = classnames( className, {\n\t\t'is-default-size': ! width,\n\t} );\n\n\tconst blockProps = useBlockProps( {\n\t\tref,\n\t\tclassName: classes,\n\t} );\n\n\tconst label = __( 'Add a site logo' );\n\n\tconst mediaInspectorPanel = ( canUserEdit || logoUrl ) && (\n\t\t<InspectorControls>\n\t\t\t<PanelBody title={ __( 'Media' ) }>\n\t\t\t\t<div className=\"block-library-site-logo__inspector-media-replace-container\">\n\t\t\t\t\t{ ! canUserEdit && !! logoUrl && (\n\t\t\t\t\t\t<InspectorLogoPreview\n\t\t\t\t\t\t\tmediaItemData={ mediaItemData }\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/>\n\t\t\t\t\t) }\n\t\t\t\t\t{ canUserEdit && !! logoUrl && (\n\t\t\t\t\t\t<SiteLogoReplaceFlow\n\t\t\t\t\t\t\t{ ...mediaReplaceFlowProps }\n\t\t\t\t\t\t\tname={\n\t\t\t\t\t\t\t\t<InspectorLogoPreview\n\t\t\t\t\t\t\t\t\tmediaItemData={ mediaItemData }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpopoverProps={ {} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\t{ canUserEdit && ! logoUrl && (\n\t\t\t\t\t\t<MediaUploadCheck>\n\t\t\t\t\t\t\t<MediaUpload\n\t\t\t\t\t\t\t\tonSelect={ onInitialSelectLogo }\n\t\t\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\t\t\trender={ ( { open } ) => (\n\t\t\t\t\t\t\t\t\t<div className=\"block-library-site-logo__inspector-upload-container\">\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\tonClick={ open }\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{ isLoading ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<Spinner />\n\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t__( 'Add media' )\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t<DropZone onFilesDrop={ onFilesDrop } />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</MediaUploadCheck>\n\t\t\t\t\t) }\n\t\t\t\t</div>\n\t\t\t</PanelBody>\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 && logoImage }\n\t\t\t{ ! logoUrl && ! canUserEdit && (\n\t\t\t\t<Placeholder className=\"site-logo_placeholder\">\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{ ! logoUrl && canUserEdit && (\n\t\t\t\t<MediaPlaceholder\n\t\t\t\t\tonSelect={ onInitialSelectLogo }\n\t\t\t\t\taccept={ ACCEPT_MEDIA_STRING }\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\ticon={ upload }\n\t\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\t\t\tshowTooltip\n\t\t\t\t\t\t\t\ttooltipPosition=\"top center\"\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"],"mappings":"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"}
@@ -96,6 +96,7 @@
96
96
  --wp-admin-border-width-focus: 2px;
97
97
  --wp-block-synced-color: #7a00df;
98
98
  --wp-block-synced-color--rgb: 122, 0, 223;
99
+ --wp-bound-block-color: #9747ff;
99
100
  }
100
101
  @media (min-resolution: 192dpi) {
101
102
  :root {
@@ -96,6 +96,7 @@
96
96
  --wp-admin-border-width-focus: 2px;
97
97
  --wp-block-synced-color: #7a00df;
98
98
  --wp-block-synced-color--rgb: 122, 0, 223;
99
+ --wp-bound-block-color: #9747ff;
99
100
  }
100
101
  @media (min-resolution: 192dpi) {
101
102
  :root {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/block-library",
3
- "version": "8.28.4",
3
+ "version": "8.28.5",
4
4
  "description": "Block library for the WordPress editor.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -35,11 +35,11 @@
35
35
  "@wordpress/api-fetch": "^6.48.1",
36
36
  "@wordpress/autop": "^3.51.1",
37
37
  "@wordpress/blob": "^3.51.1",
38
- "@wordpress/block-editor": "^12.19.4",
39
- "@wordpress/blocks": "^12.28.4",
40
- "@wordpress/components": "^26.0.3",
38
+ "@wordpress/block-editor": "^12.19.5",
39
+ "@wordpress/blocks": "^12.28.5",
40
+ "@wordpress/components": "^26.0.4",
41
41
  "@wordpress/compose": "^6.28.1",
42
- "@wordpress/core-data": "^6.28.4",
42
+ "@wordpress/core-data": "^6.28.5",
43
43
  "@wordpress/data": "^9.21.1",
44
44
  "@wordpress/date": "^4.51.1",
45
45
  "@wordpress/deprecated": "^3.51.1",
@@ -49,17 +49,17 @@
49
49
  "@wordpress/hooks": "^3.51.1",
50
50
  "@wordpress/html-entities": "^3.51.1",
51
51
  "@wordpress/i18n": "^4.51.1",
52
- "@wordpress/icons": "^9.42.2",
53
- "@wordpress/interactivity": "^5.0.2",
54
- "@wordpress/interactivity-router": "^1.1.2",
52
+ "@wordpress/icons": "^9.42.3",
53
+ "@wordpress/interactivity": "^5.0.3",
54
+ "@wordpress/interactivity-router": "^1.1.3",
55
55
  "@wordpress/keycodes": "^3.51.1",
56
56
  "@wordpress/notices": "^4.19.1",
57
- "@wordpress/patterns": "^1.12.4",
57
+ "@wordpress/patterns": "^1.12.5",
58
58
  "@wordpress/primitives": "^3.49.1",
59
59
  "@wordpress/private-apis": "^0.33.1",
60
- "@wordpress/reusable-blocks": "^4.28.4",
61
- "@wordpress/rich-text": "^6.28.2",
62
- "@wordpress/server-side-render": "^4.28.4",
60
+ "@wordpress/reusable-blocks": "^4.28.5",
61
+ "@wordpress/rich-text": "^6.28.3",
62
+ "@wordpress/server-side-render": "^4.28.5",
63
63
  "@wordpress/url": "^3.52.1",
64
64
  "@wordpress/viewport": "^5.28.1",
65
65
  "@wordpress/wordcount": "^3.51.1",
@@ -80,5 +80,5 @@
80
80
  "publishConfig": {
81
81
  "access": "public"
82
82
  },
83
- "gitHead": "864c1c553cb284def3bd5c907998da45f5c143ea"
83
+ "gitHead": "4927ea437069f9aed12f696df294a79bd8e12fd5"
84
84
  }
@@ -1,4 +1,75 @@
1
- // v1: Migrate and rename the `overrides` attribute to the `content` attribute.
1
+ const isObject = ( obj ) =>
2
+ typeof obj === 'object' && ! Array.isArray( obj ) && obj !== null;
3
+
4
+ // v2: Migrate to a more condensed version of the 'content' attribute attribute.
5
+ const v2 = {
6
+ attributes: {
7
+ ref: {
8
+ type: 'number',
9
+ },
10
+ content: {
11
+ type: 'object',
12
+ },
13
+ },
14
+ supports: {
15
+ customClassName: false,
16
+ html: false,
17
+ inserter: false,
18
+ renaming: false,
19
+ },
20
+ // Force this deprecation to run whenever there's a values sub-property that's an object.
21
+ //
22
+ // This could fail in the future if a block ever has binding to a `values` attribute.
23
+ // Some extra protection is added to ensure `values` is an object, but this only reduces
24
+ // the likelihood, it doesn't solve it completely.
25
+ isEligible( { content } ) {
26
+ return (
27
+ !! content &&
28
+ Object.keys( content ).every(
29
+ ( contentKey ) =>
30
+ content[ contentKey ].values &&
31
+ isObject( content[ contentKey ].values )
32
+ )
33
+ );
34
+ },
35
+ /*
36
+ * Old attribute format:
37
+ * content: {
38
+ * "V98q_x": {
39
+ * // The attribute values are now stored as a 'values' sub-property.
40
+ * values: { content: 'My content value' },
41
+ * // ... additional metadata, like the block name can be stored here.
42
+ * }
43
+ * }
44
+ *
45
+ * New attribute format:
46
+ * content: {
47
+ * "V98q_x": {
48
+ * content: 'My content value',
49
+ * }
50
+ * }
51
+ */
52
+ migrate( attributes ) {
53
+ const { content, ...retainedAttributes } = attributes;
54
+
55
+ if ( content && Object.keys( content ).length ) {
56
+ const updatedContent = { ...content };
57
+
58
+ for ( const contentKey in content ) {
59
+ updatedContent[ contentKey ] = content[ contentKey ].values;
60
+ }
61
+
62
+ return {
63
+ ...retainedAttributes,
64
+ content: updatedContent,
65
+ };
66
+ }
67
+
68
+ return attributes;
69
+ },
70
+ };
71
+
72
+ // v1: Rename the `overrides` attribute to the `content` attribute.
2
73
  const v1 = {
3
74
  attributes: {
4
75
  ref: {
@@ -23,16 +94,12 @@ const v1 = {
23
94
  * overrides: {
24
95
  * // An key is an id that represents a block.
25
96
  * // The values are the attribute values of the block.
26
- * "V98q_x": { content: 'dwefwefwefwe' }
97
+ * "V98q_x": { content: 'My content value' }
27
98
  * }
28
99
  *
29
100
  * New attribute format:
30
101
  * content: {
31
- * "V98q_x": {
32
- * // The attribute values are now stored as a 'values' sub-property.
33
- * values: { content: 'dwefwefwefwe' },
34
- * // ... additional metadata, like the block name can be stored here.
35
- * }
102
+ * "V98q_x": { content: 'My content value' }
36
103
  * }
37
104
  *
38
105
  */
@@ -42,9 +109,7 @@ const v1 = {
42
109
  const content = {};
43
110
 
44
111
  Object.keys( overrides ).forEach( ( id ) => {
45
- content[ id ] = {
46
- values: overrides[ id ],
47
- };
112
+ content[ id ] = overrides[ id ];
48
113
  } );
49
114
 
50
115
  return {
@@ -54,4 +119,4 @@ const v1 = {
54
119
  },
55
120
  };
56
121
 
57
- export default [ v1 ];
122
+ export default [ v2, v1 ];
package/src/block/edit.js CHANGED
@@ -42,6 +42,25 @@ const { PARTIAL_SYNCING_SUPPORTED_BLOCKS } = unlock( patternsPrivateApis );
42
42
 
43
43
  const fullAlignments = [ 'full', 'wide', 'left', 'right' ];
44
44
 
45
+ function getLegacyIdMap( blocks, content, nameCount = {} ) {
46
+ let idToClientIdMap = {};
47
+ for ( const block of blocks ) {
48
+ if ( block?.innerBlocks?.length ) {
49
+ idToClientIdMap = {
50
+ ...idToClientIdMap,
51
+ ...getLegacyIdMap( block.innerBlocks, content, nameCount ),
52
+ };
53
+ }
54
+
55
+ const id = block.attributes.metadata?.id;
56
+ const clientId = block.clientId;
57
+ if ( id && content?.[ id ] ) {
58
+ idToClientIdMap[ clientId ] = id;
59
+ }
60
+ }
61
+ return idToClientIdMap;
62
+ }
63
+
45
64
  const useInferredLayout = ( blocks, parentLayout ) => {
46
65
  const initialInferredAlignmentRef = useRef();
47
66
 
@@ -101,25 +120,31 @@ function getOverridableAttributes( block ) {
101
120
  function applyInitialContentValuesToInnerBlocks(
102
121
  blocks,
103
122
  content = {},
104
- defaultValues
123
+ defaultValues,
124
+ legacyIdMap
105
125
  ) {
106
126
  return blocks.map( ( block ) => {
107
127
  const innerBlocks = applyInitialContentValuesToInnerBlocks(
108
128
  block.innerBlocks,
109
129
  content,
110
- defaultValues
130
+ defaultValues,
131
+ legacyIdMap
111
132
  );
112
- const blockId = block.attributes.metadata?.id;
113
- if ( ! hasOverridableAttributes( block ) || ! blockId )
133
+ const metadataName =
134
+ legacyIdMap?.[ block.clientId ] ?? block.attributes.metadata?.name;
135
+
136
+ if ( ! metadataName || ! hasOverridableAttributes( block ) ) {
114
137
  return { ...block, innerBlocks };
138
+ }
139
+
115
140
  const attributes = getOverridableAttributes( block );
116
141
  const newAttributes = { ...block.attributes };
117
142
  for ( const attributeKey of attributes ) {
118
- defaultValues[ blockId ] ??= {};
119
- defaultValues[ blockId ][ attributeKey ] =
143
+ defaultValues[ metadataName ] ??= {};
144
+ defaultValues[ metadataName ][ attributeKey ] =
120
145
  block.attributes[ attributeKey ];
121
146
 
122
- const contentValues = content[ blockId ]?.values;
147
+ const contentValues = content[ metadataName ];
123
148
  if ( contentValues?.[ attributeKey ] !== undefined ) {
124
149
  newAttributes[ attributeKey ] = contentValues[ attributeKey ];
125
150
  }
@@ -142,29 +167,40 @@ function isAttributeEqual( attribute1, attribute2 ) {
142
167
  return attribute1 === attribute2;
143
168
  }
144
169
 
145
- function getContentValuesFromInnerBlocks( blocks, defaultValues ) {
170
+ function getContentValuesFromInnerBlocks( blocks, defaultValues, legacyIdMap ) {
146
171
  /** @type {Record<string, { values: Record<string, unknown>}>} */
147
172
  const content = {};
148
173
  for ( const block of blocks ) {
149
174
  if ( block.name === patternBlockName ) continue;
150
- Object.assign(
151
- content,
152
- getContentValuesFromInnerBlocks( block.innerBlocks, defaultValues )
153
- );
154
- const blockId = block.attributes.metadata?.id;
155
- if ( ! hasOverridableAttributes( block ) || ! blockId ) continue;
175
+ if ( block.innerBlocks.length ) {
176
+ Object.assign(
177
+ content,
178
+ getContentValuesFromInnerBlocks(
179
+ block.innerBlocks,
180
+ defaultValues,
181
+ legacyIdMap
182
+ )
183
+ );
184
+ }
185
+ const metadataName =
186
+ legacyIdMap?.[ block.clientId ] ?? block.attributes.metadata?.name;
187
+ if ( ! metadataName || ! hasOverridableAttributes( block ) ) {
188
+ continue;
189
+ }
190
+
156
191
  const attributes = getOverridableAttributes( block );
192
+
157
193
  for ( const attributeKey of attributes ) {
158
194
  if (
159
195
  ! isAttributeEqual(
160
196
  block.attributes[ attributeKey ],
161
- defaultValues[ blockId ][ attributeKey ]
197
+ defaultValues?.[ metadataName ]?.[ attributeKey ]
162
198
  )
163
199
  ) {
164
- content[ blockId ] ??= { values: {}, blockName: block.name };
200
+ content[ metadataName ] ??= {};
165
201
  // TODO: We need a way to represent `undefined` in the serialized overrides.
166
202
  // Also see: https://github.com/WordPress/gutenberg/pull/57249#discussion_r1452987871
167
- content[ blockId ].values[ attributeKey ] =
203
+ content[ metadataName ][ attributeKey ] =
168
204
  block.attributes[ attributeKey ] === undefined
169
205
  ? // TODO: We use an empty string to represent undefined for now until
170
206
  // we support a richer format for overrides and the block binding API.
@@ -278,8 +314,15 @@ export default function ReusableBlockEdit( {
278
314
  [ editedRecord.blocks, editedRecord.content ]
279
315
  );
280
316
 
317
+ const legacyIdMap = useRef( {} );
318
+
281
319
  // Apply the initial overrides from the pattern block to the inner blocks.
282
320
  useEffect( () => {
321
+ // Build a map of clientIds to the old nano id system to provide back compat.
322
+ legacyIdMap.current = getLegacyIdMap(
323
+ initialBlocks,
324
+ initialContent.current
325
+ );
283
326
  defaultContent.current = {};
284
327
  const originalEditingMode = getBlockEditingMode( patternClientId );
285
328
  // Replace the contents of the blocks with the overrides.
@@ -291,7 +334,8 @@ export default function ReusableBlockEdit( {
291
334
  applyInitialContentValuesToInnerBlocks(
292
335
  initialBlocks,
293
336
  initialContent.current,
294
- defaultContent.current
337
+ defaultContent.current,
338
+ legacyIdMap.current
295
339
  )
296
340
  );
297
341
  } );
@@ -343,7 +387,8 @@ export default function ReusableBlockEdit( {
343
387
  setAttributes( {
344
388
  content: getContentValuesFromInnerBlocks(
345
389
  blocks,
346
- defaultContent.current
390
+ defaultContent.current,
391
+ legacyIdMap.current
347
392
  ),
348
393
  } );
349
394
  } );
@@ -46,26 +46,35 @@ function render_block_core_block( $attributes ) {
46
46
  $content = $wp_embed->run_shortcode( $reusable_block->post_content );
47
47
  $content = $wp_embed->autoembed( $content );
48
48
 
49
- // Back compat, the content attribute was previously named overrides and
50
- // had a slightly different format. For blocks that have not been migrated,
51
- // also convert the format here so that the provided `pattern/overrides`
52
- // context is correct.
53
- if ( isset( $attributes['overrides'] ) && ! isset( $attributes['content'] ) ) {
54
- $migrated_content = array();
55
- foreach ( $attributes['overrides'] as $id => $values ) {
56
- $migrated_content[ $id ] = array(
57
- 'values' => $values,
58
- );
49
+ // Back compat.
50
+ // For blocks that have not been migrated in the editor, add some back compat
51
+ // so that front-end rendering continues to work.
52
+
53
+ // This matches the `v2` deprecation. Removes the inner `values` property
54
+ // from every item.
55
+ if ( isset( $attributes['content'] ) ) {
56
+ foreach ( $attributes['content'] as &$content_data ) {
57
+ if ( isset( $content_data['values'] ) ) {
58
+ $is_assoc_array = is_array( $content_data['values'] ) && ! wp_is_numeric_array( $content_data['values'] );
59
+
60
+ if ( $is_assoc_array ) {
61
+ $content_data = $content_data['values'];
62
+ }
63
+ }
59
64
  }
60
- $attributes['content'] = $migrated_content;
61
65
  }
62
- $has_pattern_overrides = isset( $attributes['content'] );
66
+
67
+ // This matches the `v1` deprecation. Rename `overrides` to `content`.
68
+ if ( isset( $attributes['overrides'] ) && ! isset( $attributes['content'] ) ) {
69
+ $attributes['content'] = $attributes['overrides'];
70
+ }
63
71
 
64
72
  /**
65
73
  * We set the `pattern/overrides` context through the `render_block_context`
66
74
  * filter so that it is available when a pattern's inner blocks are
67
75
  * rendering via do_blocks given it only receives the inner content.
68
76
  */
77
+ $has_pattern_overrides = isset( $attributes['content'] );
69
78
  if ( $has_pattern_overrides ) {
70
79
  $filter_block_context = static function ( $context ) use ( $attributes ) {
71
80
  $context['pattern/overrides'] = $attributes['content'];