@wordpress/block-library 8.13.0 → 8.14.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/archives/index.js +5 -1
- package/build/archives/index.js.map +1 -1
- package/build/audio/index.js +5 -1
- package/build/audio/index.js.map +1 -1
- package/build/avatar/index.js +1 -1
- package/build/block/edit.js +1 -1
- package/build/block/edit.js.map +1 -1
- package/build/block/edit.native.js +6 -9
- package/build/block/edit.native.js.map +1 -1
- package/build/buttons/edit.js +5 -1
- package/build/buttons/edit.js.map +1 -1
- package/build/categories/index.js +5 -1
- package/build/categories/index.js.map +1 -1
- package/build/code/index.js +5 -1
- package/build/code/index.js.map +1 -1
- package/build/column/index.js +1 -0
- package/build/column/index.js.map +1 -1
- package/build/comments/index.js +1 -0
- package/build/comments/index.js.map +1 -1
- package/build/cover/edit/inspector-controls.js +2 -1
- package/build/cover/edit/inspector-controls.js.map +1 -1
- package/build/cover/index.js +1 -0
- package/build/cover/index.js.map +1 -1
- package/build/details/index.js +5 -1
- package/build/details/index.js.map +1 -1
- package/build/embed/util.js +9 -8
- package/build/embed/util.js.map +1 -1
- package/build/file/index.js +2 -1
- package/build/file/index.js.map +1 -1
- package/build/file/view.js +15 -1
- package/build/file/view.js.map +1 -1
- package/build/gallery/index.js +3 -1
- package/build/gallery/index.js.map +1 -1
- package/build/group/index.js +1 -0
- package/build/group/index.js.map +1 -1
- package/build/heading/index.js +5 -1
- package/build/heading/index.js.map +1 -1
- package/build/heading/transforms.js +5 -1
- package/build/heading/transforms.js.map +1 -1
- package/build/image/deprecated.js +453 -175
- package/build/image/deprecated.js.map +1 -1
- package/build/image/edit.js +0 -4
- package/build/image/edit.js.map +1 -1
- package/build/image/image.js +96 -43
- package/build/image/image.js.map +1 -1
- package/build/image/index.js +6 -0
- package/build/image/index.js.map +1 -1
- package/build/image/save.js +8 -1
- package/build/image/save.js.map +1 -1
- package/build/image/utils.js +18 -0
- package/build/image/utils.js.map +1 -1
- package/build/image/{interactivity.js → view-interactivity.js} +86 -44
- package/build/image/view-interactivity.js.map +1 -0
- package/build/index.js +12 -3
- package/build/index.js.map +1 -1
- package/build/list/index.js +5 -1
- package/build/list/index.js.map +1 -1
- package/build/list-item/utils.js +6 -1
- package/build/list-item/utils.js.map +1 -1
- package/build/media-text/index.js +1 -0
- package/build/media-text/index.js.map +1 -1
- package/build/missing/edit.js +22 -8
- package/build/missing/edit.js.map +1 -1
- package/build/navigation/edit/index.js +1 -1
- package/build/navigation/edit/index.js.map +1 -1
- package/build/navigation/edit/menu-inspector-controls.js +0 -1
- package/build/navigation/edit/menu-inspector-controls.js.map +1 -1
- package/build/navigation/index.js +3 -2
- package/build/navigation/index.js.map +1 -1
- package/build/navigation/view.js +174 -50
- package/build/navigation/view.js.map +1 -1
- package/build/navigation-link/edit.js +0 -11
- package/build/navigation-link/edit.js.map +1 -1
- package/build/navigation-link/link-ui.js +12 -2
- package/build/navigation-link/link-ui.js.map +1 -1
- package/build/page-list/convert-to-links-modal.js +3 -3
- package/build/page-list/convert-to-links-modal.js.map +1 -1
- package/build/page-list/edit.js +34 -39
- package/build/page-list/edit.js.map +1 -1
- package/build/page-list/use-convert-to-navigation-links.js +2 -15
- package/build/page-list/use-convert-to-navigation-links.js.map +1 -1
- package/build/paragraph/index.js +1 -0
- package/build/paragraph/index.js.map +1 -1
- package/build/paragraph/transforms.js +1 -0
- package/build/paragraph/transforms.js.map +1 -1
- package/build/post-comments-form/index.js +1 -0
- package/build/post-comments-form/index.js.map +1 -1
- package/build/post-navigation-link/index.js +1 -0
- package/build/post-navigation-link/index.js.map +1 -1
- package/build/post-time-to-read/index.js +5 -1
- package/build/post-time-to-read/index.js.map +1 -1
- package/build/query-pagination-numbers/index.js +1 -1
- package/build/quote/index.js +1 -0
- package/build/quote/index.js.map +1 -1
- package/build/site-logo/index.js +5 -1
- package/build/site-logo/index.js.map +1 -1
- package/build/site-tagline/icon.js +1 -1
- package/build/site-tagline/icon.js.map +1 -1
- package/build/site-tagline/index.js +5 -1
- package/build/site-tagline/index.js.map +1 -1
- package/build/site-title/index.js +5 -1
- package/build/site-title/index.js.map +1 -1
- package/build/social-links/index.js +3 -1
- package/build/social-links/index.js.map +1 -1
- package/build/table/index.js +5 -1
- package/build/table/index.js.map +1 -1
- package/build/term-description/index.js +1 -0
- package/build/term-description/index.js.map +1 -1
- package/build/verse/index.js +5 -1
- package/build/verse/index.js.map +1 -1
- package/build/video/deprecated.js +5 -1
- package/build/video/deprecated.js.map +1 -1
- package/build/video/index.js +5 -1
- package/build/video/index.js.map +1 -1
- package/build-module/archives/index.js +5 -1
- package/build-module/archives/index.js.map +1 -1
- package/build-module/audio/index.js +5 -1
- package/build-module/audio/index.js.map +1 -1
- package/build-module/avatar/index.js +1 -1
- package/build-module/block/edit.js +1 -1
- package/build-module/block/edit.js.map +1 -1
- package/build-module/block/edit.native.js +7 -9
- package/build-module/block/edit.native.js.map +1 -1
- package/build-module/buttons/edit.js +5 -1
- package/build-module/buttons/edit.js.map +1 -1
- package/build-module/categories/index.js +5 -1
- package/build-module/categories/index.js.map +1 -1
- package/build-module/code/index.js +5 -1
- package/build-module/code/index.js.map +1 -1
- package/build-module/column/index.js +1 -0
- package/build-module/column/index.js.map +1 -1
- package/build-module/comments/index.js +1 -0
- package/build-module/comments/index.js.map +1 -1
- package/build-module/cover/edit/inspector-controls.js +2 -1
- package/build-module/cover/edit/inspector-controls.js.map +1 -1
- package/build-module/cover/index.js +1 -0
- package/build-module/cover/index.js.map +1 -1
- package/build-module/details/index.js +5 -1
- package/build-module/details/index.js.map +1 -1
- package/build-module/embed/util.js +6 -6
- package/build-module/embed/util.js.map +1 -1
- package/build-module/file/index.js +2 -1
- package/build-module/file/index.js.map +1 -1
- package/build-module/file/view.js +15 -2
- package/build-module/file/view.js.map +1 -1
- package/build-module/gallery/index.js +3 -1
- package/build-module/gallery/index.js.map +1 -1
- package/build-module/group/index.js +1 -0
- package/build-module/group/index.js.map +1 -1
- package/build-module/heading/index.js +5 -1
- package/build-module/heading/index.js.map +1 -1
- package/build-module/heading/transforms.js +5 -1
- package/build-module/heading/transforms.js.map +1 -1
- package/build-module/image/deprecated.js +454 -176
- package/build-module/image/deprecated.js.map +1 -1
- package/build-module/image/edit.js +0 -4
- package/build-module/image/edit.js.map +1 -1
- package/build-module/image/image.js +96 -46
- package/build-module/image/image.js.map +1 -1
- package/build-module/image/index.js +6 -0
- package/build-module/image/index.js.map +1 -1
- package/build-module/image/save.js +8 -1
- package/build-module/image/save.js.map +1 -1
- package/build-module/image/utils.js +16 -0
- package/build-module/image/utils.js.map +1 -1
- package/build-module/image/{interactivity.js → view-interactivity.js} +86 -44
- package/build-module/image/view-interactivity.js.map +1 -0
- package/build-module/index.js +12 -3
- package/build-module/index.js.map +1 -1
- package/build-module/list/index.js +5 -1
- package/build-module/list/index.js.map +1 -1
- package/build-module/list-item/utils.js +6 -1
- package/build-module/list-item/utils.js.map +1 -1
- package/build-module/media-text/index.js +1 -0
- package/build-module/media-text/index.js.map +1 -1
- package/build-module/missing/edit.js +22 -8
- package/build-module/missing/edit.js.map +1 -1
- package/build-module/navigation/edit/index.js +1 -1
- package/build-module/navigation/edit/index.js.map +1 -1
- package/build-module/navigation/edit/menu-inspector-controls.js +0 -1
- package/build-module/navigation/edit/menu-inspector-controls.js.map +1 -1
- package/build-module/navigation/index.js +3 -2
- package/build-module/navigation/index.js.map +1 -1
- package/build-module/navigation/view.js +173 -50
- package/build-module/navigation/view.js.map +1 -1
- package/build-module/navigation-link/edit.js +1 -12
- package/build-module/navigation-link/edit.js.map +1 -1
- package/build-module/navigation-link/link-ui.js +13 -3
- package/build-module/navigation-link/link-ui.js.map +1 -1
- package/build-module/page-list/convert-to-links-modal.js +3 -3
- package/build-module/page-list/convert-to-links-modal.js.map +1 -1
- package/build-module/page-list/edit.js +34 -39
- package/build-module/page-list/edit.js.map +1 -1
- package/build-module/page-list/use-convert-to-navigation-links.js +3 -16
- package/build-module/page-list/use-convert-to-navigation-links.js.map +1 -1
- package/build-module/paragraph/index.js +1 -0
- package/build-module/paragraph/index.js.map +1 -1
- package/build-module/paragraph/transforms.js +1 -0
- package/build-module/paragraph/transforms.js.map +1 -1
- package/build-module/post-comments-form/index.js +1 -0
- package/build-module/post-comments-form/index.js.map +1 -1
- package/build-module/post-navigation-link/index.js +1 -0
- package/build-module/post-navigation-link/index.js.map +1 -1
- package/build-module/post-time-to-read/index.js +5 -1
- package/build-module/post-time-to-read/index.js.map +1 -1
- package/build-module/query-pagination-numbers/index.js +1 -1
- package/build-module/quote/index.js +1 -0
- package/build-module/quote/index.js.map +1 -1
- package/build-module/site-logo/index.js +5 -1
- package/build-module/site-logo/index.js.map +1 -1
- package/build-module/site-tagline/icon.js +1 -1
- package/build-module/site-tagline/icon.js.map +1 -1
- package/build-module/site-tagline/index.js +5 -1
- package/build-module/site-tagline/index.js.map +1 -1
- package/build-module/site-title/index.js +5 -1
- package/build-module/site-title/index.js.map +1 -1
- package/build-module/social-links/index.js +3 -1
- package/build-module/social-links/index.js.map +1 -1
- package/build-module/table/index.js +5 -1
- package/build-module/table/index.js.map +1 -1
- package/build-module/term-description/index.js +1 -0
- package/build-module/term-description/index.js.map +1 -1
- package/build-module/verse/index.js +5 -1
- package/build-module/verse/index.js.map +1 -1
- package/build-module/video/deprecated.js +5 -1
- package/build-module/video/deprecated.js.map +1 -1
- package/build-module/video/index.js +5 -1
- package/build-module/video/index.js.map +1 -1
- package/build-style/footnotes/style-rtl.css +2 -2
- package/build-style/footnotes/style.css +2 -2
- package/build-style/image/style-rtl.css +16 -2
- package/build-style/image/style.css +16 -2
- package/build-style/style-rtl.css +18 -4
- package/build-style/style.css +18 -4
- package/package.json +33 -38
- package/src/archives/block.json +5 -1
- package/src/audio/block.json +5 -1
- package/src/avatar/block.json +1 -1
- package/src/block/edit.js +2 -2
- package/src/block/edit.native.js +8 -12
- package/src/block/test/edit.native.js +4 -4
- package/src/buttons/edit.js +2 -2
- package/src/categories/block.json +5 -1
- package/src/code/block.json +5 -1
- package/src/column/block.json +1 -0
- package/src/comments/block.json +1 -0
- package/src/cover/block.json +1 -0
- package/src/cover/edit/inspector-controls.js +1 -0
- package/src/details/block.json +5 -1
- package/src/embed/util.js +4 -6
- package/src/file/block.json +2 -1
- package/src/file/index.php +0 -17
- package/src/file/view.js +14 -5
- package/src/footnotes/index.php +11 -9
- package/src/footnotes/style.scss +2 -2
- package/src/gallery/block.json +3 -1
- package/src/group/block.json +1 -0
- package/src/heading/block.json +5 -1
- package/src/heading/test/index.native.js +18 -0
- package/src/image/block.json +6 -0
- package/src/image/deprecated.js +597 -320
- package/src/image/edit.js +0 -4
- package/src/image/image.js +131 -62
- package/src/image/save.js +9 -1
- package/src/image/style.scss +15 -2
- package/src/image/utils.js +16 -0
- package/src/image/{interactivity.js → view-interactivity.js} +99 -50
- package/src/index.js +18 -1
- package/src/latest-posts/index.php +1 -1
- package/src/list/block.json +5 -1
- package/src/media-text/block.json +1 -0
- package/src/missing/edit.js +31 -11
- package/src/navigation/block.json +3 -2
- package/src/navigation/edit/index.js +1 -2
- package/src/navigation/edit/menu-inspector-controls.js +0 -1
- package/src/navigation/index.php +39 -30
- package/src/navigation/view.js +189 -67
- package/src/navigation-link/edit.js +1 -15
- package/src/navigation-link/link-ui.js +14 -2
- package/src/navigation-submenu/index.php +2 -12
- package/src/page-list/convert-to-links-modal.js +3 -3
- package/src/page-list/edit.js +65 -62
- package/src/page-list/use-convert-to-navigation-links.js +3 -20
- package/src/paragraph/block.json +1 -0
- package/src/post-comments-form/block.json +1 -0
- package/src/post-navigation-link/block.json +1 -0
- package/src/post-time-to-read/block.json +5 -1
- package/src/query-pagination-numbers/block.json +1 -1
- package/src/quote/block.json +1 -0
- package/src/site-logo/block.json +5 -1
- package/src/site-tagline/block.json +5 -1
- package/src/site-tagline/icon.js +1 -1
- package/src/site-title/block.json +5 -1
- package/src/social-links/block.json +3 -1
- package/src/table/block.json +5 -1
- package/src/term-description/block.json +1 -0
- package/src/verse/block.json +5 -1
- package/src/video/block.json +5 -1
- package/build/file/interactivity.js +0 -19
- package/build/file/interactivity.js.map +0 -1
- package/build/heading/heading-level-icon.js +0 -61
- package/build/heading/heading-level-icon.js.map +0 -1
- package/build/image/interactivity.js.map +0 -1
- package/build/navigation/interactivity.js +0 -167
- package/build/navigation/interactivity.js.map +0 -1
- package/build/navigation/view-modal.js +0 -64
- package/build/navigation/view-modal.js.map +0 -1
- package/build/utils/interactivity/constants.js +0 -9
- package/build/utils/interactivity/constants.js.map +0 -1
- package/build/utils/interactivity/directives.js +0 -222
- package/build/utils/interactivity/directives.js.map +0 -1
- package/build/utils/interactivity/hooks.js +0 -159
- package/build/utils/interactivity/hooks.js.map +0 -1
- package/build/utils/interactivity/hydration.js +0 -34
- package/build/utils/interactivity/hydration.js.map +0 -1
- package/build/utils/interactivity/index.js +0 -32
- package/build/utils/interactivity/index.js.map +0 -1
- package/build/utils/interactivity/portals.js +0 -108
- package/build/utils/interactivity/portals.js.map +0 -1
- package/build/utils/interactivity/store.js +0 -66
- package/build/utils/interactivity/store.js.map +0 -1
- package/build/utils/interactivity/utils.js +0 -87
- package/build/utils/interactivity/utils.js.map +0 -1
- package/build/utils/interactivity/vdom.js +0 -119
- package/build/utils/interactivity/vdom.js.map +0 -1
- package/build-module/file/interactivity.js +0 -15
- package/build-module/file/interactivity.js.map +0 -1
- package/build-module/heading/heading-level-icon.js +0 -53
- package/build-module/heading/heading-level-icon.js.map +0 -1
- package/build-module/image/interactivity.js.map +0 -1
- package/build-module/navigation/interactivity.js +0 -164
- package/build-module/navigation/interactivity.js.map +0 -1
- package/build-module/navigation/view-modal.js +0 -58
- package/build-module/navigation/view-modal.js.map +0 -1
- package/build-module/utils/interactivity/constants.js +0 -2
- package/build-module/utils/interactivity/constants.js.map +0 -1
- package/build-module/utils/interactivity/directives.js +0 -209
- package/build-module/utils/interactivity/directives.js.map +0 -1
- package/build-module/utils/interactivity/hooks.js +0 -145
- package/build-module/utils/interactivity/hooks.js.map +0 -1
- package/build-module/utils/interactivity/hydration.js +0 -21
- package/build-module/utils/interactivity/hydration.js.map +0 -1
- package/build-module/utils/interactivity/index.js +0 -15
- package/build-module/utils/interactivity/index.js.map +0 -1
- package/build-module/utils/interactivity/portals.js +0 -100
- package/build-module/utils/interactivity/portals.js.map +0 -1
- package/build-module/utils/interactivity/store.js +0 -55
- package/build-module/utils/interactivity/store.js.map +0 -1
- package/build-module/utils/interactivity/utils.js +0 -75
- package/build-module/utils/interactivity/utils.js.map +0 -1
- package/build-module/utils/interactivity/vdom.js +0 -107
- package/build-module/utils/interactivity/vdom.js.map +0 -1
- package/src/file/interactivity.js +0 -15
- package/src/heading/heading-level-icon.js +0 -48
- package/src/navigation/interactivity.js +0 -169
- package/src/navigation/view-modal.js +0 -78
- package/src/utils/interactivity/constants.js +0 -1
- package/src/utils/interactivity/directives.js +0 -200
- package/src/utils/interactivity/hooks.js +0 -145
- package/src/utils/interactivity/hydration.js +0 -22
- package/src/utils/interactivity/index.js +0 -15
- package/src/utils/interactivity/portals.js +0 -98
- package/src/utils/interactivity/store.js +0 -45
- package/src/utils/interactivity/utils.js +0 -66
- package/src/utils/interactivity/vdom.js +0 -111
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-library/src/image/image.js"],"names":["isBlobURL","ExternalLink","PanelBody","ResizableBox","Spinner","TextareaControl","TextControl","ToolbarButton","ToolbarGroup","useViewportMatch","usePrevious","useSelect","useDispatch","BlockControls","InspectorControls","RichText","__experimentalImageSizeControl","ImageSizeControl","__experimentalImageURLInputUI","ImageURLInputUI","MediaReplaceFlow","store","blockEditorStore","BlockAlignmentControl","__experimentalImageEditor","ImageEditor","__experimentalGetElementClassName","__experimentalUseBorderProps","useBorderProps","useEffect","useMemo","useState","useRef","useCallback","__","sprintf","isRTL","getFilename","createBlock","getDefaultBlockName","switchToBlockType","crop","overlayText","upload","caption","captionIcon","noticesStore","coreStore","createUpgradedEmbedBlock","useClientWidth","isExternalImage","MIN_SIZE","ALLOWED_MEDIA_TYPES","Image","temporaryURL","attributes","setAttributes","isSelected","insertBlocksAfter","onReplace","onSelectImage","onSelectURL","onUploadError","containerRef","context","clientId","blockEditingMode","url","alt","align","id","href","rel","linkClass","linkDestination","title","width","height","linkTarget","sizeSlug","imageRef","prevCaption","showCaption","setShowCaption","allowResize","getBlock","image","multiImageSelection","select","getMedia","getMultiSelectedBlockClientIds","getBlockName","multiSelectedClientIds","length","every","_clientId","canInsertCover","imageEditing","imageSizes","maxWidth","mediaUpload","getBlockRootClientId","getSettings","canInsertBlockType","rootClientId","settings","replaceBlocks","toggleSelection","createErrorNotice","createSuccessNotice","isLargeViewport","isWideAligned","includes","loadedNaturalWidth","loadedNaturalHeight","setLoadedNaturalSize","isEditingImage","setIsEditingImage","externalBlob","setExternalBlob","clientWidth","hasNonContentControls","isResizable","imageSizeOptions","filter","slug","media_details","sizes","source_url","map","name","value","label","canUploadMedia","window","fetch","then","response","blob","catch","captionRef","node","focus","naturalWidth","naturalHeight","current","undefined","complete","onResizeStart","onResizeStop","onImageError","embedBlock","onSetHref","props","onSetTitle","updateAlt","newAlt","updateImage","newSizeSlug","newUrl","uploadExternal","filesList","onFileChange","img","type","allowedTypes","onError","message","updateAlignment","nextAlign","extraUpdatedAttributes","canEditImage","allowCrop","switchToCover","controls","link","filename","defaultedAlt","borderProps","isRounded","className","hasCustomBorder","style","Object","keys","event","target","imageWidthWithinContainer","imageHeightWithinContainer","exceedMaxWidth","ratio","fallbackClientWidth","imageAttributes","currentWidth","currentHeight","minWidth","minHeight","maxWidthBuffer","showRightHandle","showLeftHandle","top","right","bottom","left","direction","elt","delta","parseInt","isEmpty"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,SAAT,QAA0B,iBAA1B;AACA,SACCC,YADD,EAECC,SAFD,EAGCC,YAHD,EAICC,OAJD,EAKCC,eALD,EAMCC,WAND,EAOCC,aAPD,EAQCC,YARD,QASO,uBATP;AAUA,SAASC,gBAAT,EAA2BC,WAA3B,QAA8C,oBAA9C;AACA,SAASC,SAAT,EAAoBC,WAApB,QAAuC,iBAAvC;AACA,SACCC,aADD,EAECC,iBAFD,EAGCC,QAHD,EAICC,8BAA8B,IAAIC,gBAJnC,EAKCC,6BAA6B,IAAIC,eALlC,EAMCC,gBAND,EAOCC,KAAK,IAAIC,gBAPV,EAQCC,qBARD,EASCC,yBAAyB,IAAIC,WAT9B,EAUCC,iCAVD,EAWCC,4BAA4B,IAAIC,cAXjC,QAYO,yBAZP;AAaA,SACCC,SADD,EAECC,OAFD,EAGCC,QAHD,EAICC,MAJD,EAKCC,WALD,QAMO,oBANP;AAOA,SAASC,EAAT,EAAaC,OAAb,EAAsBC,KAAtB,QAAmC,iBAAnC;AACA,SAASC,WAAT,QAA4B,gBAA5B;AACA,SACCC,WADD,EAECC,mBAFD,EAGCC,iBAHD,QAIO,mBAJP;AAKA,SACCC,IADD,EAECC,WAFD,EAGCC,MAHD,EAICC,OAAO,IAAIC,WAJZ,QAKO,kBALP;AAMA,SAASxB,KAAK,IAAIyB,YAAlB,QAAsC,oBAAtC;AACA,SAASzB,KAAK,IAAI0B,SAAlB,QAAmC,sBAAnC;AAEA;AACA;AACA;;AACA,SAASC,wBAAT,QAAyC,eAAzC;AACA,OAAOC,cAAP,MAA2B,oBAA3B;AACA,SAASC,eAAT,QAAgC,QAAhC;AAEA;AACA;AACA;;AACA,SAASC,QAAT,EAAmBC,mBAAnB,QAA8C,aAA9C;AAEA,eAAe,SAASC,KAAT,CAAgB;AAC9BC,EAAAA,YAD8B;AAE9BC,EAAAA,UAF8B;AAG9BC,EAAAA,aAH8B;AAI9BC,EAAAA,UAJ8B;AAK9BC,EAAAA,iBAL8B;AAM9BC,EAAAA,SAN8B;AAO9BC,EAAAA,aAP8B;AAQ9BC,EAAAA,WAR8B;AAS9BC,EAAAA,aAT8B;AAU9BC,EAAAA,YAV8B;AAW9BC,EAAAA,OAX8B;AAY9BC,EAAAA,QAZ8B;AAa9BC,EAAAA;AAb8B,CAAhB,EAcX;AACH,QAAM;AACLC,IAAAA,GAAG,GAAG,EADD;AAELC,IAAAA,GAFK;AAGLxB,IAAAA,OAHK;AAILyB,IAAAA,KAJK;AAKLC,IAAAA,EALK;AAMLC,IAAAA,IANK;AAOLC,IAAAA,GAPK;AAQLC,IAAAA,SARK;AASLC,IAAAA,eATK;AAULC,IAAAA,KAVK;AAWLC,IAAAA,KAXK;AAYLC,IAAAA,MAZK;AAaLC,IAAAA,UAbK;AAcLC,IAAAA;AAdK,MAeFxB,UAfJ;AAgBA,QAAMyB,QAAQ,GAAGhD,MAAM,EAAvB;AACA,QAAMiD,WAAW,GAAGvE,WAAW,CAAEkC,OAAF,CAA/B;AACA,QAAM,CAAEsC,WAAF,EAAeC,cAAf,IAAkCpD,QAAQ,CAAE,CAAC,CAAEa,OAAL,CAAhD;AACA,QAAM;AAAEwC,IAAAA,WAAW,GAAG;AAAhB,MAAyBpB,OAA/B;AACA,QAAM;AAAEqB,IAAAA;AAAF,MAAe1E,SAAS,CAAEW,gBAAF,CAA9B;AAEA,QAAM;AAAEgE,IAAAA,KAAF;AAASC,IAAAA;AAAT,MAAiC5E,SAAS,CAC7C6E,MAAF,IAAc;AACb,UAAM;AAAEC,MAAAA;AAAF,QAAeD,MAAM,CAAEzC,SAAF,CAA3B;AACA,UAAM;AAAE2C,MAAAA,8BAAF;AAAkCC,MAAAA;AAAlC,QACLH,MAAM,CAAElE,gBAAF,CADP;AAEA,UAAMsE,sBAAsB,GAAGF,8BAA8B,EAA7D;AACA,WAAO;AACNJ,MAAAA,KAAK,EACJhB,EAAE,IAAIb,UAAN,GACGgC,QAAQ,CAAEnB,EAAF,EAAM;AAAEN,QAAAA,OAAO,EAAE;AAAX,OAAN,CADX,GAEG,IAJE;AAKNuB,MAAAA,mBAAmB,EAClBK,sBAAsB,CAACC,MAAvB,IACAD,sBAAsB,CAACE,KAAvB,CACGC,SAAF,IACCJ,YAAY,CAAEI,SAAF,CAAZ,KAA8B,YAFhC;AAPK,KAAP;AAYA,GAlB8C,EAmB/C,CAAEzB,EAAF,EAAMb,UAAN,CAnB+C,CAAhD;AAqBA,QAAM;AAAEuC,IAAAA,cAAF;AAAkBC,IAAAA,YAAlB;AAAgCC,IAAAA,UAAhC;AAA4CC,IAAAA,QAA5C;AAAsDC,IAAAA;AAAtD,MACLzF,SAAS,CACN6E,MAAF,IAAc;AACb,UAAM;AACLa,MAAAA,oBADK;AAELC,MAAAA,WAFK;AAGLC,MAAAA;AAHK,QAIFf,MAAM,CAAElE,gBAAF,CAJV;AAMA,UAAMkF,YAAY,GAAGH,oBAAoB,CAAEpC,QAAF,CAAzC;AACA,UAAMwC,QAAQ,GAAGH,WAAW,EAA5B;AAEA,WAAO;AACNL,MAAAA,YAAY,EAAEQ,QAAQ,CAACR,YADjB;AAENC,MAAAA,UAAU,EAAEO,QAAQ,CAACP,UAFf;AAGNC,MAAAA,QAAQ,EAAEM,QAAQ,CAACN,QAHb;AAINC,MAAAA,WAAW,EAAEK,QAAQ,CAACL,WAJhB;AAKNJ,MAAAA,cAAc,EAAEO,kBAAkB,CACjC,YADiC,EAEjCC,YAFiC;AAL5B,KAAP;AAUA,GArBO,EAsBR,CAAEvC,QAAF,CAtBQ,CADV;AAyBA,QAAM;AAAEyC,IAAAA,aAAF;AAAiBC,IAAAA;AAAjB,MAAqC/F,WAAW,CAAEU,gBAAF,CAAtD;AACA,QAAM;AAAEsF,IAAAA,iBAAF;AAAqBC,IAAAA;AAArB,MACLjG,WAAW,CAAEkC,YAAF,CADZ;AAEA,QAAMgE,eAAe,GAAGrG,gBAAgB,CAAE,QAAF,CAAxC;AACA,QAAMsG,aAAa,GAAG,CAAE,MAAF,EAAU,MAAV,EAAmBC,QAAnB,CAA6B3C,KAA7B,CAAtB;AACA,QAAM,CACL;AAAE4C,IAAAA,kBAAF;AAAsBC,IAAAA;AAAtB,GADK,EAELC,oBAFK,IAGFpF,QAAQ,CAAE,EAAF,CAHZ;AAIA,QAAM,CAAEqF,cAAF,EAAkBC,iBAAlB,IAAwCtF,QAAQ,CAAE,KAAF,CAAtD;AACA,QAAM,CAAEuF,YAAF,EAAgBC,eAAhB,IAAoCxF,QAAQ,EAAlD;AACA,QAAMyF,WAAW,GAAGvE,cAAc,CAAEc,YAAF,EAAgB,CAAEM,KAAF,CAAhB,CAAlC;AACA,QAAMoD,qBAAqB,GAAGvD,gBAAgB,KAAK,SAAnD;AACA,QAAMwD,WAAW,GAChBtC,WAAW,IACXqC,qBADA,IAEA,EAAIV,aAAa,IAAID,eAArB,CAHD;AAIA,QAAMa,gBAAgB,GAAGzB,UAAU,CACjC0B,MADuB,CAEvB,CAAE;AAAEC,IAAAA;AAAF,GAAF,KAAgBvC,KAAK,EAAEwC,aAAP,EAAsBC,KAAtB,GAA+BF,IAA/B,GAAuCG,UAFhC,EAIvBC,GAJuB,CAIlB,CAAE;AAAEC,IAAAA,IAAF;AAAQL,IAAAA;AAAR,GAAF,MAAwB;AAAEM,IAAAA,KAAK,EAAEN,IAAT;AAAeO,IAAAA,KAAK,EAAEF;AAAtB,GAAxB,CAJkB,CAAzB;AAKA,QAAMG,cAAc,GAAG,CAAC,CAAEjC,WAA1B,CA3FG,CA6FH;AACA;AACA;;AACAvE,EAAAA,SAAS,CAAE,MAAM;AAChB,QACC,CAAEqB,eAAe,CAAEoB,EAAF,EAAMH,GAAN,CAAjB,IACA,CAAEV,UADF,IAEA,CAAE4E,cAHH,EAIE;AACDd,MAAAA,eAAe;AACf;AACA;;AAED,QAAKD,YAAL,EAAoB;AAEpBgB,IAAAA,MAAM,CACL;AADK,KAEJC,KAFF,CAESpE,GAAG,CAAC6C,QAAJ,CAAc,GAAd,IAAsB7C,GAAtB,GAA4BA,GAAG,GAAG,GAF3C,EAGEqE,IAHF,CAGUC,QAAF,IAAgBA,QAAQ,CAACC,IAAT,EAHxB,EAIEF,IAJF,CAIUE,IAAF,IAAYnB,eAAe,CAAEmB,IAAF,CAJnC,EAKC;AALD,KAMEC,KANF,CAMS,MAAM,CAAE,CANjB;AAOA,GAnBQ,EAmBN,CAAErE,EAAF,EAAMH,GAAN,EAAWV,UAAX,EAAuB6D,YAAvB,EAAqCe,cAArC,CAnBM,CAAT,CAhGG,CAqHH;AACA;;AACAxG,EAAAA,SAAS,CAAE,MAAM;AAChB,QAAKe,OAAO,IAAI,CAAEqC,WAAlB,EAAgC;AAC/BE,MAAAA,cAAc,CAAE,IAAF,CAAd;AACA;AACD,GAJQ,EAIN,CAAEvC,OAAF,EAAWqC,WAAX,CAJM,CAAT,CAvHG,CA6HH;;AACA,QAAM2D,UAAU,GAAG3G,WAAW,CAC3B4G,IAAF,IAAY;AACX,QAAKA,IAAI,IAAI,CAAEjG,OAAf,EAAyB;AACxBiG,MAAAA,IAAI,CAACC,KAAL;AACA;AACD,GAL4B,EAM7B,CAAElG,OAAF,CAN6B,CAA9B,CA9HG,CAuIH;AACA;AACA;AACA;;AACA,QAAM;AAAEmG,IAAAA,YAAF;AAAgBC,IAAAA;AAAhB,MAAkClH,OAAO,CAAE,MAAM;AACtD,WAAO;AACNiH,MAAAA,YAAY,EACX/D,QAAQ,CAACiE,OAAT,EAAkBF,YAAlB,IACA9B,kBADA,IAEAiC,SAJK;AAKNF,MAAAA,aAAa,EACZhE,QAAQ,CAACiE,OAAT,EAAkBD,aAAlB,IACA9B,mBADA,IAEAgC;AARK,KAAP;AAUA,GAX8C,EAW5C,CACFjC,kBADE,EAEFC,mBAFE,EAGFlC,QAAQ,CAACiE,OAAT,EAAkBE,QAHhB,CAX4C,CAA/C;;AAiBA,WAASC,aAAT,GAAyB;AACxBzC,IAAAA,eAAe,CAAE,KAAF,CAAf;AACA;;AAED,WAAS0C,YAAT,GAAwB;AACvB1C,IAAAA,eAAe,CAAE,IAAF,CAAf;AACA;;AAED,WAAS2C,YAAT,GAAwB;AACvB;AACA;AACA,UAAMC,UAAU,GAAGvG,wBAAwB,CAAE;AAAEO,MAAAA,UAAU,EAAE;AAAEY,QAAAA;AAAF;AAAd,KAAF,CAA3C;;AAEA,QAAK+E,SAAS,KAAKK,UAAnB,EAAgC;AAC/B5F,MAAAA,SAAS,CAAE4F,UAAF,CAAT;AACA;AACD;;AAED,WAASC,SAAT,CAAoBC,KAApB,EAA4B;AAC3BjG,IAAAA,aAAa,CAAEiG,KAAF,CAAb;AACA;;AAED,WAASC,UAAT,CAAqBvB,KAArB,EAA6B;AAC5B;AACA;AACA3E,IAAAA,aAAa,CAAE;AAAEmB,MAAAA,KAAK,EAAEwD;AAAT,KAAF,CAAb;AACA;;AAED,WAASwB,SAAT,CAAoBC,MAApB,EAA6B;AAC5BpG,IAAAA,aAAa,CAAE;AAAEY,MAAAA,GAAG,EAAEwF;AAAP,KAAF,CAAb;AACA;;AAED,WAASC,WAAT,CAAsBC,WAAtB,EAAoC;AACnC,UAAMC,MAAM,GAAGzE,KAAK,EAAEwC,aAAP,EAAsBC,KAAtB,GAA+B+B,WAA/B,GAA8C9B,UAA7D;;AACA,QAAK,CAAE+B,MAAP,EAAgB;AACf,aAAO,IAAP;AACA;;AAEDvG,IAAAA,aAAa,CAAE;AACdW,MAAAA,GAAG,EAAE4F,MADS;AAEdnF,MAAAA,KAAK,EAAEsE,SAFO;AAGdrE,MAAAA,MAAM,EAAEqE,SAHM;AAIdnE,MAAAA,QAAQ,EAAE+E;AAJI,KAAF,CAAb;AAMA;;AAED,WAASE,cAAT,GAA0B;AACzB5D,IAAAA,WAAW,CAAE;AACZ6D,MAAAA,SAAS,EAAE,CAAE3C,YAAF,CADC;;AAEZ4C,MAAAA,YAAY,CAAE,CAAEC,GAAF,CAAF,EAAY;AACvBvG,QAAAA,aAAa,CAAEuG,GAAF,CAAb;;AAEA,YAAKnK,SAAS,CAAEmK,GAAG,CAAChG,GAAN,CAAd,EAA4B;AAC3B;AACA;;AAEDoD,QAAAA,eAAe;AACfV,QAAAA,mBAAmB,CAAE3E,EAAE,CAAE,iBAAF,CAAJ,EAA2B;AAC7CkI,UAAAA,IAAI,EAAE;AADuC,SAA3B,CAAnB;AAGA,OAbW;;AAcZC,MAAAA,YAAY,EAAEjH,mBAdF;;AAeZkH,MAAAA,OAAO,CAAEC,OAAF,EAAY;AAClB3D,QAAAA,iBAAiB,CAAE2D,OAAF,EAAW;AAAEH,UAAAA,IAAI,EAAE;AAAR,SAAX,CAAjB;AACA;;AAjBW,KAAF,CAAX;AAmBA;;AAED,WAASI,eAAT,CAA0BC,SAA1B,EAAsC;AACrC,UAAMC,sBAAsB,GAAG,CAAE,MAAF,EAAU,MAAV,EAAmB1D,QAAnB,CAA6ByD,SAA7B,IAC5B;AAAE7F,MAAAA,KAAK,EAAEsE,SAAT;AAAoBrE,MAAAA,MAAM,EAAEqE;AAA5B,KAD4B,GAE5B,EAFH;AAGA1F,IAAAA,aAAa,CAAE,EACd,GAAGkH,sBADW;AAEdrG,MAAAA,KAAK,EAAEoG;AAFO,KAAF,CAAb;AAIA;;AAED5I,EAAAA,SAAS,CAAE,MAAM;AAChB,QAAK,CAAE4B,UAAP,EAAoB;AACnB4D,MAAAA,iBAAiB,CAAE,KAAF,CAAjB;;AACA,UAAK,CAAEzE,OAAP,EAAiB;AAChBuC,QAAAA,cAAc,CAAE,KAAF,CAAd;AACA;AACD;AACD,GAPQ,EAON,CAAE1B,UAAF,EAAcb,OAAd,CAPM,CAAT;AASA,QAAM+H,YAAY,GAAGrG,EAAE,IAAIyE,YAAN,IAAsBC,aAAtB,IAAuC/C,YAA5D;AACA,QAAM2E,SAAS,GAAG,CAAErF,mBAAF,IAAyBoF,YAAzB,IAAyC,CAAEvD,cAA7D;;AAEA,WAASyD,aAAT,GAAyB;AACxBnE,IAAAA,aAAa,CACZzC,QADY,EAEZzB,iBAAiB,CAAE6C,QAAQ,CAAEpB,QAAF,CAAV,EAAwB,YAAxB,CAFL,CAAb;AAIA;;AAED,QAAM6G,QAAQ,GACb,8BACC,cAAC,aAAD;AAAe,IAAA,KAAK,EAAC;AAArB,KACGrD,qBAAqB,IACtB,cAAC,qBAAD;AACC,IAAA,KAAK,EAAGpD,KADT;AAEC,IAAA,QAAQ,EAAGmG;AAFZ,IAFF,EAOG/C,qBAAqB,IACtB,cAAC,aAAD;AACC,IAAA,OAAO,EAAG,MAAM;AACftC,MAAAA,cAAc,CAAE,CAAED,WAAJ,CAAd;;AACA,UAAKA,WAAW,IAAItC,OAApB,EAA8B;AAC7BY,QAAAA,aAAa,CAAE;AAAEZ,UAAAA,OAAO,EAAEsG;AAAX,SAAF,CAAb;AACA;AACD,KANF;AAOC,IAAA,IAAI,EAAGrG,WAPR;AAQC,IAAA,SAAS,EAAGqC,WARb;AASC,IAAA,KAAK,EACJA,WAAW,GACRhD,EAAE,CAAE,gBAAF,CADM,GAERA,EAAE,CAAE,aAAF;AAZP,IARF,EAwBG,CAAEqD,mBAAF,IAAyB,CAAE6B,cAA3B,IACD,cAAC,eAAD;AACC,IAAA,GAAG,EAAG7C,IAAI,IAAI,EADf;AAEC,IAAA,WAAW,EAAGiF,SAFf;AAGC,IAAA,eAAe,EAAG9E,eAHnB;AAIC,IAAA,QAAQ,EAAKY,KAAK,IAAIA,KAAK,CAAC0C,UAAjB,IAAiC7D,GAJ7C;AAKC,IAAA,SAAS,EAAGmB,KAAK,IAAIA,KAAK,CAACyF,IAL5B;AAMC,IAAA,UAAU,EAAGjG,UANd;AAOC,IAAA,SAAS,EAAGL,SAPb;AAQC,IAAA,GAAG,EAAGD;AARP,IAzBF,EAoCGoG,SAAS,IACV,cAAC,aAAD;AACC,IAAA,OAAO,EAAG,MAAMvD,iBAAiB,CAAE,IAAF,CADlC;AAEC,IAAA,IAAI,EAAG5E,IAFR;AAGC,IAAA,KAAK,EAAGP,EAAE,CAAE,MAAF;AAHX,IArCF,EA2CG,CAAEqD,mBAAF,IAAyBS,cAAzB,IACD,cAAC,aAAD;AACC,IAAA,IAAI,EAAGtD,WADR;AAEC,IAAA,KAAK,EAAGR,EAAE,CAAE,qBAAF,CAFX;AAGC,IAAA,OAAO,EAAG2I;AAHX,IA5CF,CADD,EAoDG,CAAEtF,mBAAF,IAAyB,CAAE6B,cAA3B,IACD,cAAC,aAAD;AAAe,IAAA,KAAK,EAAC;AAArB,KACC,cAAC,gBAAD;AACC,IAAA,OAAO,EAAG9C,EADX;AAEC,IAAA,QAAQ,EAAGH,GAFZ;AAGC,IAAA,YAAY,EAAGf,mBAHhB;AAIC,IAAA,MAAM,EAAC,SAJR;AAKC,IAAA,QAAQ,EAAGQ,aALZ;AAMC,IAAA,WAAW,EAAGC,WANf;AAOC,IAAA,OAAO,EAAGC;AAPX,IADD,CArDF,EAiEG,CAAEyB,mBAAF,IAAyB+B,YAAzB,IACD,cAAC,aAAD,QACC,cAAC,YAAD,QACC,cAAC,aAAD;AACC,IAAA,OAAO,EAAG0C,cADX;AAEC,IAAA,IAAI,EAAGrH,MAFR;AAGC,IAAA,KAAK,EAAGT,EAAE,CAAE,uBAAF;AAHX,IADD,CADD,CAlEF,EA4EC,cAAC,iBAAD,QACC,cAAC,SAAD;AAAW,IAAA,KAAK,EAAGA,EAAE,CAAE,UAAF;AAArB,KACG,CAAEqD,mBAAF,IACD,cAAC,eAAD;AACC,IAAA,uBAAuB,MADxB;AAEC,IAAA,KAAK,EAAGrD,EAAE,CAAE,kBAAF,CAFX;AAGC,IAAA,KAAK,EAAGkC,GAHT;AAIC,IAAA,QAAQ,EAAGuF,SAJZ;AAKC,IAAA,IAAI,EACH,8BACC,cAAC,YAAD;AAAc,MAAA,IAAI,EAAC;AAAnB,OACGzH,EAAE,CACH,oCADG,CADL,CADD,EAMC,yBAND,EAOGA,EAAE,CAAE,4BAAF,CAPL;AANF,IAFF,EAoBC,cAAC,gBAAD;AACC,IAAA,aAAa,EAAG2H,WADjB;AAEC,IAAA,QAAQ,EAAK1B,KAAF,IAAa3E,aAAa,CAAE2E,KAAF,CAFtC;AAGC,IAAA,IAAI,EAAGpD,QAHR;AAIC,IAAA,KAAK,EAAGH,KAJT;AAKC,IAAA,MAAM,EAAGC,MALV;AAMC,IAAA,gBAAgB,EAAG8C,gBANpB;AAOC,IAAA,WAAW,EAAGD,WAPf;AAQC,IAAA,UAAU,EAAGqB,YARd;AASC,IAAA,WAAW,EAAGC,aATf;AAUC,IAAA,aAAa,EAAG9G,EAAE,CACjB,sCADiB;AAVnB,IApBD,CADD,CA5ED,EAiHC,cAAC,iBAAD;AAAmB,IAAA,KAAK,EAAC;AAAzB,KACC,cAAC,WAAD;AACC,IAAA,uBAAuB,MADxB;AAEC,IAAA,KAAK,EAAGA,EAAE,CAAE,iBAAF,CAFX;AAGC,IAAA,KAAK,EAAGyC,KAAK,IAAI,EAHlB;AAIC,IAAA,QAAQ,EAAG+E,UAJZ;AAKC,IAAA,IAAI,EACH,8BACGxH,EAAE,CACH,8CADG,CADL,EAIC,cAAC,YAAD;AAAc,MAAA,IAAI,EAAC;AAAnB,OACGA,EAAE,CACH,6DADG,CADL,CAJD;AANF,IADD,CAjHD,CADD;AAyIA,QAAM8I,QAAQ,GAAG3I,WAAW,CAAE8B,GAAF,CAA5B;AACA,MAAI8G,YAAJ;;AAEA,MAAK7G,GAAL,EAAW;AACV6G,IAAAA,YAAY,GAAG7G,GAAf;AACA,GAFD,MAEO,IAAK4G,QAAL,EAAgB;AACtBC,IAAAA,YAAY,GAAG9I,OAAO;AACrB;AACAD,IAAAA,EAAE,CAAE,4DAAF,CAFmB,EAGrB8I,QAHqB,CAAtB;AAKA,GANM,MAMA;AACNC,IAAAA,YAAY,GAAG/I,EAAE,CAAE,uCAAF,CAAjB;AACA;;AAED,QAAMgJ,WAAW,GAAGtJ,cAAc,CAAE2B,UAAF,CAAlC;AACA,QAAM4H,SAAS,GAAG5H,UAAU,CAAC6H,SAAX,EAAsBpE,QAAtB,CAAgC,kBAAhC,CAAlB;AACA,QAAMqE,eAAe,GACpB,CAAC,CAAEH,WAAW,CAACE,SAAf,IACEF,WAAW,CAACI,KAAZ,IAAqBC,MAAM,CAACC,IAAP,CAAaN,WAAW,CAACI,KAAzB,EAAiCzF,MAAjC,GAA0C,CAFlE;AAIA,MAAIsE,GAAG,GACN;AACA;;AACA;AACA,gCACC;AACC,IAAA,GAAG,EAAG7G,YAAY,IAAIa,GADvB;AAEC,IAAA,GAAG,EAAG8G,YAFP;AAGC,IAAA,OAAO,EAAG,MAAM3B,YAAY,EAH7B;AAIC,IAAA,MAAM,EAAKmC,KAAF,IAAa;AACrBtE,MAAAA,oBAAoB,CAAE;AACrBF,QAAAA,kBAAkB,EAAEwE,KAAK,CAACC,MAAN,EAAc3C,YADb;AAErB7B,QAAAA,mBAAmB,EAAEuE,KAAK,CAACC,MAAN,EAAc1C;AAFd,OAAF,CAApB;AAIA,KATF;AAUC,IAAA,GAAG,EAAGhE,QAVP;AAWC,IAAA,SAAS,EAAGkG,WAAW,CAACE,SAXzB;AAYC,IAAA,KAAK,EAAGF,WAAW,CAACI;AAZrB,IADD,EAeGhI,YAAY,IAAI,cAAC,OAAD,OAfnB;AAiBA;AArBD;AAwBA,MAAIqI,yBAAJ;AACA,MAAIC,0BAAJ;;AAEA,MAAKpE,WAAW,IAAIuB,YAAf,IAA+BC,aAApC,EAAoD;AACnD,UAAM6C,cAAc,GAAG9C,YAAY,GAAGvB,WAAtC;AACA,UAAMsE,KAAK,GAAG9C,aAAa,GAAGD,YAA9B;AACA4C,IAAAA,yBAAyB,GAAGE,cAAc,GAAGrE,WAAH,GAAiBuB,YAA3D;AACA6C,IAAAA,0BAA0B,GAAGC,cAAc,GACxCrE,WAAW,GAAGsE,KAD0B,GAExC9C,aAFH;AAGA,GA7bE,CA+bH;AACA;;;AACA,QAAM+C,mBAAmB,GAAG/G,QAAQ,CAACiE,OAAT,EAAkBrE,KAAlB,IAA2B4C,WAAvD;;AAEA,MAAKmD,YAAY,IAAIvD,cAArB,EAAsC;AACrC+C,IAAAA,GAAG,GACF,cAAC,WAAD;AACC,MAAA,EAAE,EAAG7F,EADN;AAEC,MAAA,GAAG,EAAGH,GAFP;AAGC,MAAA,KAAK,EAAGS,KAHT;AAIC,MAAA,MAAM,EAAGC,MAJV;AAKC,MAAA,WAAW,EAAGkH,mBALf;AAMC,MAAA,aAAa,EAAG/C,aANjB;AAOC,MAAA,YAAY,EAAGD,YAPhB;AAQC,MAAA,WAAW,EAAKiD,eAAF,IACbxI,aAAa,CAAEwI,eAAF,CATf;AAWC,MAAA,eAAe,EAAG,MAAM;AACvB3E,QAAAA,iBAAiB,CAAE,KAAF,CAAjB;AACA,OAbF;AAcC,MAAA,WAAW,EAAG8D,SAAS,GAAGjC,SAAH,GAAegC;AAdvC,MADD;AAkBA,GAnBD,MAmBO,IAAK,CAAExD,WAAF,IAAiB,CAAEiE,yBAAxB,EAAoD;AAC1DxB,IAAAA,GAAG,GAAG;AAAK,MAAA,KAAK,EAAG;AAAEvF,QAAAA,KAAF;AAASC,QAAAA;AAAT;AAAb,OAAmCsF,GAAnC,CAAN;AACA,GAFM,MAEA;AACN,UAAM8B,YAAY,GAAGrH,KAAK,IAAI+G,yBAA9B;AACA,UAAMO,aAAa,GAAGrH,MAAM,IAAI+G,0BAAhC;AAEA,UAAME,KAAK,GAAG/C,YAAY,GAAGC,aAA7B;AACA,UAAMmD,QAAQ,GACbpD,YAAY,GAAGC,aAAf,GAA+B7F,QAA/B,GAA0CA,QAAQ,GAAG2I,KADtD;AAEA,UAAMM,SAAS,GACdpD,aAAa,GAAGD,YAAhB,GAA+B5F,QAA/B,GAA0CA,QAAQ,GAAG2I,KADtD,CAPM,CAUN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,UAAMO,cAAc,GAAGlG,QAAQ,GAAG,GAAlC;AAEA,QAAImG,eAAe,GAAG,KAAtB;AACA,QAAIC,cAAc,GAAG,KAArB;AAEA;AACA;;AACA,QAAKlI,KAAK,KAAK,QAAf,EAA0B;AACzB;AACAiI,MAAAA,eAAe,GAAG,IAAlB;AACAC,MAAAA,cAAc,GAAG,IAAjB;AACA,KAJD,MAIO,IAAKnK,KAAK,EAAV,EAAe;AACrB;AACA;AACA;AACA,UAAKiC,KAAK,KAAK,MAAf,EAAwB;AACvBiI,QAAAA,eAAe,GAAG,IAAlB;AACA,OAFD,MAEO;AACNC,QAAAA,cAAc,GAAG,IAAjB;AACA;AACD,KATM,MASA;AACN;AACA;AACA,UAAKlI,KAAK,KAAK,OAAf,EAAyB;AACxBkI,QAAAA,cAAc,GAAG,IAAjB;AACA,OAFD,MAEO;AACND,QAAAA,eAAe,GAAG,IAAlB;AACA;AACD;AACD;;;AAEAnC,IAAAA,GAAG,GACF,cAAC,YAAD;AACC,MAAA,IAAI,EAAG;AACNvF,QAAAA,KAAK,EAAEA,KAAF,aAAEA,KAAF,cAAEA,KAAF,GAAW,MADV;AAENC,QAAAA,MAAM,EAAEA,MAAM,IAAI,CAAEwG,eAAZ,GAA8BxG,MAA9B,GAAuC;AAFzC,OADR;AAKC,MAAA,UAAU,EAAGpB,UALd;AAMC,MAAA,QAAQ,EAAG0I,QANZ;AAOC,MAAA,QAAQ,EAAGE,cAPZ;AAQC,MAAA,SAAS,EAAGD,SARb;AASC,MAAA,SAAS,EAAGC,cAAc,GAAGP,KAT9B;AAUC,MAAA,eAAe,MAVhB;AAWC,MAAA,MAAM,EAAG;AACRU,QAAAA,GAAG,EAAE,KADG;AAERC,QAAAA,KAAK,EAAEH,eAFC;AAGRI,QAAAA,MAAM,EAAE,IAHA;AAIRC,QAAAA,IAAI,EAAEJ;AAJE,OAXV;AAiBC,MAAA,aAAa,EAAGnD,aAjBjB;AAkBC,MAAA,YAAY,EAAG,CAAEqC,KAAF,EAASmB,SAAT,EAAoBC,GAApB,EAAyBC,KAAzB,KAAoC;AAClDzD,QAAAA,YAAY;AACZ7F,QAAAA,aAAa,CAAE;AACdoB,UAAAA,KAAK,EAAEmI,QAAQ,CAAEd,YAAY,GAAGa,KAAK,CAAClI,KAAvB,EAA8B,EAA9B,CADD;AAEdC,UAAAA,MAAM,EAAEkI,QAAQ,CAAEb,aAAa,GAAGY,KAAK,CAACjI,MAAxB,EAAgC,EAAhC;AAFF,SAAF,CAAb;AAIA,OAxBF;AAyBC,MAAA,WAAW,EAAGR,KAAK,KAAK,QAAV,GAAqB,CAArB,GAAyB;AAzBxC,OA2BG8F,GA3BH,CADD;AA+BA;;AAED,SACC,8BAGG,CAAE7G,YAAF,IAAkBwH,QAHrB,EAIGX,GAJH,EAKGjF,WAAW,KACV,CAAEnE,QAAQ,CAACiM,OAAT,CAAkBpK,OAAlB,CAAF,IAAiCa,UADvB,CAAX,IAEA,cAAC,QAAD;AACC,IAAA,UAAU,EAAC,SADZ;AAEC,IAAA,SAAS,EAAG/B,iCAAiC,CAC5C,SAD4C,CAF9C;AAKC,IAAA,GAAG,EAAGkH,UALP;AAMC,IAAA,OAAO,EAAC,YANT;AAOC,kBAAa1G,EAAE,CAAE,oBAAF,CAPhB;AAQC,IAAA,WAAW,EAAGA,EAAE,CAAE,aAAF,CARjB;AASC,IAAA,KAAK,EAAGU,OATT;AAUC,IAAA,QAAQ,EAAKuF,KAAF,IACV3E,aAAa,CAAE;AAAEZ,MAAAA,OAAO,EAAEuF;AAAX,KAAF,CAXf;AAaC,IAAA,aAAa,MAbd;AAcC,IAAA,sBAAsB,EAAG,MACxBzE,iBAAiB,CAChBpB,WAAW,CAAEC,mBAAmB,EAArB,CADK;AAfnB,IAPH,CADD;AA+BA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { isBlobURL } from '@wordpress/blob';\nimport {\n\tExternalLink,\n\tPanelBody,\n\tResizableBox,\n\tSpinner,\n\tTextareaControl,\n\tTextControl,\n\tToolbarButton,\n\tToolbarGroup,\n} from '@wordpress/components';\nimport { useViewportMatch, usePrevious } from '@wordpress/compose';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\t__experimentalImageSizeControl as ImageSizeControl,\n\t__experimentalImageURLInputUI as ImageURLInputUI,\n\tMediaReplaceFlow,\n\tstore as blockEditorStore,\n\tBlockAlignmentControl,\n\t__experimentalImageEditor as ImageEditor,\n\t__experimentalGetElementClassName,\n\t__experimentalUseBorderProps as useBorderProps,\n} from '@wordpress/block-editor';\nimport {\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n\tuseRef,\n\tuseCallback,\n} from '@wordpress/element';\nimport { __, sprintf, isRTL } from '@wordpress/i18n';\nimport { getFilename } from '@wordpress/url';\nimport {\n\tcreateBlock,\n\tgetDefaultBlockName,\n\tswitchToBlockType,\n} from '@wordpress/blocks';\nimport {\n\tcrop,\n\toverlayText,\n\tupload,\n\tcaption as captionIcon,\n} from '@wordpress/icons';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { createUpgradedEmbedBlock } from '../embed/util';\nimport useClientWidth from './use-client-width';\nimport { isExternalImage } from './edit';\n\n/**\n * Module constants\n */\nimport { MIN_SIZE, ALLOWED_MEDIA_TYPES } from './constants';\n\nexport default function Image( {\n\ttemporaryURL,\n\tattributes,\n\tsetAttributes,\n\tisSelected,\n\tinsertBlocksAfter,\n\tonReplace,\n\tonSelectImage,\n\tonSelectURL,\n\tonUploadError,\n\tcontainerRef,\n\tcontext,\n\tclientId,\n\tblockEditingMode,\n} ) {\n\tconst {\n\t\turl = '',\n\t\talt,\n\t\tcaption,\n\t\talign,\n\t\tid,\n\t\thref,\n\t\trel,\n\t\tlinkClass,\n\t\tlinkDestination,\n\t\ttitle,\n\t\twidth,\n\t\theight,\n\t\tlinkTarget,\n\t\tsizeSlug,\n\t} = attributes;\n\tconst imageRef = useRef();\n\tconst prevCaption = usePrevious( caption );\n\tconst [ showCaption, setShowCaption ] = useState( !! caption );\n\tconst { allowResize = true } = context;\n\tconst { getBlock } = useSelect( blockEditorStore );\n\n\tconst { image, multiImageSelection } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getMedia } = select( coreStore );\n\t\t\tconst { getMultiSelectedBlockClientIds, getBlockName } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst multiSelectedClientIds = getMultiSelectedBlockClientIds();\n\t\t\treturn {\n\t\t\t\timage:\n\t\t\t\t\tid && isSelected\n\t\t\t\t\t\t? getMedia( id, { context: 'view' } )\n\t\t\t\t\t\t: null,\n\t\t\t\tmultiImageSelection:\n\t\t\t\t\tmultiSelectedClientIds.length &&\n\t\t\t\t\tmultiSelectedClientIds.every(\n\t\t\t\t\t\t( _clientId ) =>\n\t\t\t\t\t\t\tgetBlockName( _clientId ) === 'core/image'\n\t\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ id, isSelected ]\n\t);\n\tconst { canInsertCover, imageEditing, imageSizes, maxWidth, mediaUpload } =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst {\n\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\tgetSettings,\n\t\t\t\t\tcanInsertBlockType,\n\t\t\t\t} = select( blockEditorStore );\n\n\t\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\t\tconst settings = getSettings();\n\n\t\t\t\treturn {\n\t\t\t\t\timageEditing: settings.imageEditing,\n\t\t\t\t\timageSizes: settings.imageSizes,\n\t\t\t\t\tmaxWidth: settings.maxWidth,\n\t\t\t\t\tmediaUpload: settings.mediaUpload,\n\t\t\t\t\tcanInsertCover: canInsertBlockType(\n\t\t\t\t\t\t'core/cover',\n\t\t\t\t\t\trootClientId\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ clientId ]\n\t\t);\n\tconst { replaceBlocks, toggleSelection } = useDispatch( blockEditorStore );\n\tconst { createErrorNotice, createSuccessNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst isLargeViewport = useViewportMatch( 'medium' );\n\tconst isWideAligned = [ 'wide', 'full' ].includes( align );\n\tconst [\n\t\t{ loadedNaturalWidth, loadedNaturalHeight },\n\t\tsetLoadedNaturalSize,\n\t] = useState( {} );\n\tconst [ isEditingImage, setIsEditingImage ] = useState( false );\n\tconst [ externalBlob, setExternalBlob ] = useState();\n\tconst clientWidth = useClientWidth( containerRef, [ align ] );\n\tconst hasNonContentControls = blockEditingMode === 'default';\n\tconst isResizable =\n\t\tallowResize &&\n\t\thasNonContentControls &&\n\t\t! ( isWideAligned && isLargeViewport );\n\tconst imageSizeOptions = imageSizes\n\t\t.filter(\n\t\t\t( { slug } ) => image?.media_details?.sizes?.[ slug ]?.source_url\n\t\t)\n\t\t.map( ( { name, slug } ) => ( { value: slug, label: name } ) );\n\tconst canUploadMedia = !! mediaUpload;\n\n\t// If an image is externally hosted, try to fetch the image data. This may\n\t// fail if the image host doesn't allow CORS with the domain. If it works,\n\t// we can enable a button in the toolbar to upload the image.\n\tuseEffect( () => {\n\t\tif (\n\t\t\t! isExternalImage( id, url ) ||\n\t\t\t! isSelected ||\n\t\t\t! canUploadMedia\n\t\t) {\n\t\t\tsetExternalBlob();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( externalBlob ) return;\n\n\t\twindow\n\t\t\t// Avoid cache, which seems to help avoid CORS problems.\n\t\t\t.fetch( url.includes( '?' ) ? url : url + '?' )\n\t\t\t.then( ( response ) => response.blob() )\n\t\t\t.then( ( blob ) => setExternalBlob( blob ) )\n\t\t\t// Do nothing, cannot upload.\n\t\t\t.catch( () => {} );\n\t}, [ id, url, isSelected, externalBlob, canUploadMedia ] );\n\n\t// We need to show the caption when changes come from\n\t// history navigation(undo/redo).\n\tuseEffect( () => {\n\t\tif ( caption && ! prevCaption ) {\n\t\t\tsetShowCaption( true );\n\t\t}\n\t}, [ caption, prevCaption ] );\n\n\t// Focus the caption when we click to add one.\n\tconst captionRef = useCallback(\n\t\t( node ) => {\n\t\t\tif ( node && ! caption ) {\n\t\t\t\tnode.focus();\n\t\t\t}\n\t\t},\n\t\t[ caption ]\n\t);\n\n\t// Get naturalWidth and naturalHeight from image ref, and fall back to loaded natural\n\t// width and height. This resolves an issue in Safari where the loaded natural\n\t// width and height is otherwise lost when switching between alignments.\n\t// See: https://github.com/WordPress/gutenberg/pull/37210.\n\tconst { naturalWidth, naturalHeight } = useMemo( () => {\n\t\treturn {\n\t\t\tnaturalWidth:\n\t\t\t\timageRef.current?.naturalWidth ||\n\t\t\t\tloadedNaturalWidth ||\n\t\t\t\tundefined,\n\t\t\tnaturalHeight:\n\t\t\t\timageRef.current?.naturalHeight ||\n\t\t\t\tloadedNaturalHeight ||\n\t\t\t\tundefined,\n\t\t};\n\t}, [\n\t\tloadedNaturalWidth,\n\t\tloadedNaturalHeight,\n\t\timageRef.current?.complete,\n\t] );\n\n\tfunction onResizeStart() {\n\t\ttoggleSelection( false );\n\t}\n\n\tfunction onResizeStop() {\n\t\ttoggleSelection( true );\n\t}\n\n\tfunction onImageError() {\n\t\t// Check if there's an embed block that handles this URL, e.g., instagram URL.\n\t\t// See: https://github.com/WordPress/gutenberg/pull/11472\n\t\tconst embedBlock = createUpgradedEmbedBlock( { attributes: { url } } );\n\n\t\tif ( undefined !== embedBlock ) {\n\t\t\tonReplace( embedBlock );\n\t\t}\n\t}\n\n\tfunction onSetHref( props ) {\n\t\tsetAttributes( props );\n\t}\n\n\tfunction onSetTitle( value ) {\n\t\t// This is the HTML title attribute, separate from the media object\n\t\t// title.\n\t\tsetAttributes( { title: value } );\n\t}\n\n\tfunction updateAlt( newAlt ) {\n\t\tsetAttributes( { alt: newAlt } );\n\t}\n\n\tfunction updateImage( newSizeSlug ) {\n\t\tconst newUrl = image?.media_details?.sizes?.[ newSizeSlug ]?.source_url;\n\t\tif ( ! newUrl ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tsetAttributes( {\n\t\t\turl: newUrl,\n\t\t\twidth: undefined,\n\t\t\theight: undefined,\n\t\t\tsizeSlug: newSizeSlug,\n\t\t} );\n\t}\n\n\tfunction uploadExternal() {\n\t\tmediaUpload( {\n\t\t\tfilesList: [ externalBlob ],\n\t\t\tonFileChange( [ img ] ) {\n\t\t\t\tonSelectImage( img );\n\n\t\t\t\tif ( isBlobURL( img.url ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetExternalBlob();\n\t\t\t\tcreateSuccessNotice( __( 'Image uploaded.' ), {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t} );\n\t\t\t},\n\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\tonError( message ) {\n\t\t\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\t\t},\n\t\t} );\n\t}\n\n\tfunction updateAlignment( nextAlign ) {\n\t\tconst extraUpdatedAttributes = [ 'wide', 'full' ].includes( nextAlign )\n\t\t\t? { width: undefined, height: undefined }\n\t\t\t: {};\n\t\tsetAttributes( {\n\t\t\t...extraUpdatedAttributes,\n\t\t\talign: nextAlign,\n\t\t} );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsEditingImage( false );\n\t\t\tif ( ! caption ) {\n\t\t\t\tsetShowCaption( false );\n\t\t\t}\n\t\t}\n\t}, [ isSelected, caption ] );\n\n\tconst canEditImage = id && naturalWidth && naturalHeight && imageEditing;\n\tconst allowCrop = ! multiImageSelection && canEditImage && ! isEditingImage;\n\n\tfunction switchToCover() {\n\t\treplaceBlocks(\n\t\t\tclientId,\n\t\t\tswitchToBlockType( getBlock( clientId ), 'core/cover' )\n\t\t);\n\t}\n\n\tconst controls = (\n\t\t<>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t{ hasNonContentControls && (\n\t\t\t\t\t<BlockAlignmentControl\n\t\t\t\t\t\tvalue={ align }\n\t\t\t\t\t\tonChange={ updateAlignment }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ hasNonContentControls && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tsetShowCaption( ! showCaption );\n\t\t\t\t\t\t\tif ( showCaption && caption ) {\n\t\t\t\t\t\t\t\tsetAttributes( { caption: undefined } );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t\ticon={ captionIcon }\n\t\t\t\t\t\tisPressed={ showCaption }\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\tshowCaption\n\t\t\t\t\t\t\t\t? __( 'Remove caption' )\n\t\t\t\t\t\t\t\t: __( 'Add caption' )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! multiImageSelection && ! isEditingImage && (\n\t\t\t\t\t<ImageURLInputUI\n\t\t\t\t\t\turl={ href || '' }\n\t\t\t\t\t\tonChangeUrl={ onSetHref }\n\t\t\t\t\t\tlinkDestination={ linkDestination }\n\t\t\t\t\t\tmediaUrl={ ( image && image.source_url ) || url }\n\t\t\t\t\t\tmediaLink={ image && image.link }\n\t\t\t\t\t\tlinkTarget={ linkTarget }\n\t\t\t\t\t\tlinkClass={ linkClass }\n\t\t\t\t\t\trel={ rel }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ allowCrop && (\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\t{ ! multiImageSelection && canInsertCover && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\ticon={ overlayText }\n\t\t\t\t\t\tlabel={ __( 'Add text over image' ) }\n\t\t\t\t\t\tonClick={ switchToCover }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</BlockControls>\n\t\t\t{ ! multiImageSelection && ! isEditingImage && (\n\t\t\t\t<BlockControls group=\"other\">\n\t\t\t\t\t<MediaReplaceFlow\n\t\t\t\t\t\tmediaId={ id }\n\t\t\t\t\t\tmediaURL={ url }\n\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\taccept=\"image/*\"\n\t\t\t\t\t\tonSelect={ onSelectImage }\n\t\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t{ ! multiImageSelection && externalBlob && (\n\t\t\t\t<BlockControls>\n\t\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\tonClick={ uploadExternal }\n\t\t\t\t\t\t\ticon={ upload }\n\t\t\t\t\t\t\tlabel={ __( 'Upload external image' ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolbarGroup>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody title={ __( 'Settings' ) }>\n\t\t\t\t\t{ ! multiImageSelection && (\n\t\t\t\t\t\t<TextareaControl\n\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\tlabel={ __( 'Alternative text' ) }\n\t\t\t\t\t\t\tvalue={ alt }\n\t\t\t\t\t\t\tonChange={ updateAlt }\n\t\t\t\t\t\t\thelp={\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<ExternalLink href=\"https://www.w3.org/WAI/tutorials/images/decision-tree\">\n\t\t\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t\t\t'Describe the purpose of the image.'\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t\t{ __( 'Leave empty if decorative.' ) }\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\t<ImageSizeControl\n\t\t\t\t\t\tonChangeImage={ updateImage }\n\t\t\t\t\t\tonChange={ ( value ) => setAttributes( value ) }\n\t\t\t\t\t\tslug={ sizeSlug }\n\t\t\t\t\t\twidth={ width }\n\t\t\t\t\t\theight={ height }\n\t\t\t\t\t\timageSizeOptions={ imageSizeOptions }\n\t\t\t\t\t\tisResizable={ isResizable }\n\t\t\t\t\t\timageWidth={ naturalWidth }\n\t\t\t\t\t\timageHeight={ naturalHeight }\n\t\t\t\t\t\timageSizeHelp={ __(\n\t\t\t\t\t\t\t'Select the size of the source image.'\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<InspectorControls group=\"advanced\">\n\t\t\t\t<TextControl\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tlabel={ __( 'Title attribute' ) }\n\t\t\t\t\tvalue={ title || '' }\n\t\t\t\t\tonChange={ onSetTitle }\n\t\t\t\t\thelp={\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Describe the role of this image on the page.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t<ExternalLink href=\"https://www.w3.org/TR/html52/dom.html#the-title-attribute\">\n\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t'(Note: many devices and browsers do not display this text.)'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t</>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t</>\n\t);\n\n\tconst filename = getFilename( url );\n\tlet defaultedAlt;\n\n\tif ( alt ) {\n\t\tdefaultedAlt = alt;\n\t} else if ( filename ) {\n\t\tdefaultedAlt = sprintf(\n\t\t\t/* translators: %s: file name */\n\t\t\t__( 'This image has an empty alt attribute; its file name is %s' ),\n\t\t\tfilename\n\t\t);\n\t} else {\n\t\tdefaultedAlt = __( 'This image has an empty alt attribute' );\n\t}\n\n\tconst borderProps = useBorderProps( attributes );\n\tconst isRounded = attributes.className?.includes( 'is-style-rounded' );\n\tconst hasCustomBorder =\n\t\t!! borderProps.className ||\n\t\t( borderProps.style && Object.keys( borderProps.style ).length > 0 );\n\n\tlet img = (\n\t\t// Disable reason: Image itself is not meant to be interactive, but\n\t\t// should direct focus to block.\n\t\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t\t<>\n\t\t\t<img\n\t\t\t\tsrc={ temporaryURL || url }\n\t\t\t\talt={ defaultedAlt }\n\t\t\t\tonError={ () => onImageError() }\n\t\t\t\tonLoad={ ( event ) => {\n\t\t\t\t\tsetLoadedNaturalSize( {\n\t\t\t\t\t\tloadedNaturalWidth: event.target?.naturalWidth,\n\t\t\t\t\t\tloadedNaturalHeight: event.target?.naturalHeight,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tref={ imageRef }\n\t\t\t\tclassName={ borderProps.className }\n\t\t\t\tstyle={ borderProps.style }\n\t\t\t/>\n\t\t\t{ temporaryURL && <Spinner /> }\n\t\t</>\n\t\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t);\n\n\tlet imageWidthWithinContainer;\n\tlet imageHeightWithinContainer;\n\n\tif ( clientWidth && naturalWidth && naturalHeight ) {\n\t\tconst exceedMaxWidth = naturalWidth > clientWidth;\n\t\tconst ratio = naturalHeight / naturalWidth;\n\t\timageWidthWithinContainer = exceedMaxWidth ? clientWidth : naturalWidth;\n\t\timageHeightWithinContainer = exceedMaxWidth\n\t\t\t? clientWidth * ratio\n\t\t\t: naturalHeight;\n\t}\n\n\t// clientWidth needs to be a number for the image Cropper to work, but sometimes it's 0\n\t// So we try using the imageRef width first and fallback to clientWidth.\n\tconst fallbackClientWidth = imageRef.current?.width || clientWidth;\n\n\tif ( canEditImage && isEditingImage ) {\n\t\timg = (\n\t\t\t<ImageEditor\n\t\t\t\tid={ id }\n\t\t\t\turl={ url }\n\t\t\t\twidth={ width }\n\t\t\t\theight={ height }\n\t\t\t\tclientWidth={ fallbackClientWidth }\n\t\t\t\tnaturalHeight={ naturalHeight }\n\t\t\t\tnaturalWidth={ naturalWidth }\n\t\t\t\tonSaveImage={ ( imageAttributes ) =>\n\t\t\t\t\tsetAttributes( imageAttributes )\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\tborderProps={ isRounded ? undefined : borderProps }\n\t\t\t/>\n\t\t);\n\t} else if ( ! isResizable || ! imageWidthWithinContainer ) {\n\t\timg = <div style={ { width, height } }>{ img }</div>;\n\t} else {\n\t\tconst currentWidth = width || imageWidthWithinContainer;\n\t\tconst currentHeight = height || imageHeightWithinContainer;\n\n\t\tconst ratio = naturalWidth / naturalHeight;\n\t\tconst minWidth =\n\t\t\tnaturalWidth < naturalHeight ? MIN_SIZE : MIN_SIZE * ratio;\n\t\tconst minHeight =\n\t\t\tnaturalHeight < naturalWidth ? MIN_SIZE : MIN_SIZE / ratio;\n\n\t\t// With the current implementation of ResizableBox, an image needs an\n\t\t// explicit pixel value for the max-width. In absence of being able to\n\t\t// set the content-width, this max-width is currently dictated by the\n\t\t// vanilla editor style. The following variable adds a buffer to this\n\t\t// vanilla style, so 3rd party themes have some wiggleroom. This does,\n\t\t// in most cases, allow you to scale the image beyond the width of the\n\t\t// main column, though not infinitely.\n\t\t// @todo It would be good to revisit this once a content-width variable\n\t\t// becomes available.\n\t\tconst maxWidthBuffer = maxWidth * 2.5;\n\n\t\tlet showRightHandle = false;\n\t\tlet showLeftHandle = false;\n\n\t\t/* eslint-disable no-lonely-if */\n\t\t// See https://github.com/WordPress/gutenberg/issues/7584.\n\t\tif ( align === 'center' ) {\n\t\t\t// When the image is centered, show both handles.\n\t\t\tshowRightHandle = true;\n\t\t\tshowLeftHandle = true;\n\t\t} else if ( isRTL() ) {\n\t\t\t// In RTL mode the image is on the right by default.\n\t\t\t// Show the right handle and hide the left handle only when it is\n\t\t\t// aligned left. Otherwise always show the left handle.\n\t\t\tif ( align === 'left' ) {\n\t\t\t\tshowRightHandle = true;\n\t\t\t} else {\n\t\t\t\tshowLeftHandle = true;\n\t\t\t}\n\t\t} else {\n\t\t\t// Show the left handle and hide the right handle only when the\n\t\t\t// image is aligned right. Otherwise always show the right handle.\n\t\t\tif ( align === 'right' ) {\n\t\t\t\tshowLeftHandle = true;\n\t\t\t} else {\n\t\t\t\tshowRightHandle = true;\n\t\t\t}\n\t\t}\n\t\t/* eslint-enable no-lonely-if */\n\n\t\timg = (\n\t\t\t<ResizableBox\n\t\t\t\tsize={ {\n\t\t\t\t\twidth: width ?? 'auto',\n\t\t\t\t\theight: height && ! hasCustomBorder ? height : 'auto',\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\tresizeRatio={ align === 'center' ? 2 : 1 }\n\t\t\t>\n\t\t\t\t{ img }\n\t\t\t</ResizableBox>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ /* Hide controls during upload to avoid component remount,\n\t\t\t\twhich causes duplicated image upload. */ }\n\t\t\t{ ! temporaryURL && controls }\n\t\t\t{ img }\n\t\t\t{ showCaption &&\n\t\t\t\t( ! RichText.isEmpty( caption ) || isSelected ) && (\n\t\t\t\t\t<RichText\n\t\t\t\t\t\tidentifier=\"caption\"\n\t\t\t\t\t\tclassName={ __experimentalGetElementClassName(\n\t\t\t\t\t\t\t'caption'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tref={ captionRef }\n\t\t\t\t\t\ttagName=\"figcaption\"\n\t\t\t\t\t\taria-label={ __( 'Image caption text' ) }\n\t\t\t\t\t\tplaceholder={ __( 'Add caption' ) }\n\t\t\t\t\t\tvalue={ caption }\n\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\tsetAttributes( { caption: value } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinlineToolbar\n\t\t\t\t\t\t__unstableOnSplitAtEnd={ () =>\n\t\t\t\t\t\t\tinsertBlocksAfter(\n\t\t\t\t\t\t\t\tcreateBlock( getDefaultBlockName() )\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</>\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-library/src/image/image.js"],"names":["isBlobURL","ExternalLink","ResizableBox","Spinner","TextareaControl","TextControl","ToolbarButton","ToolbarGroup","__experimentalToolsPanel","ToolsPanel","__experimentalToolsPanelItem","ToolsPanelItem","__experimentalUseCustomUnits","useCustomUnits","useViewportMatch","usePrevious","useSelect","useDispatch","BlockControls","InspectorControls","RichText","__experimentalImageURLInputUI","ImageURLInputUI","MediaReplaceFlow","store","blockEditorStore","BlockAlignmentControl","__experimentalImageEditor","ImageEditor","__experimentalGetElementClassName","__experimentalUseBorderProps","useBorderProps","privateApis","blockEditorPrivateApis","useEffect","useMemo","useState","useRef","useCallback","__","_x","sprintf","isRTL","getFilename","createBlock","getDefaultBlockName","switchToBlockType","crop","overlayText","upload","caption","captionIcon","noticesStore","coreStore","unlock","createUpgradedEmbedBlock","useClientWidth","isExternalImage","MIN_SIZE","ALLOWED_MEDIA_TYPES","evalAspectRatio","DimensionsTool","ResolutionTool","scaleOptions","value","label","help","Image","temporaryURL","attributes","setAttributes","isSelected","insertBlocksAfter","onReplace","onSelectImage","onSelectURL","onUploadError","containerRef","context","clientId","blockEditingMode","url","alt","align","id","href","rel","linkClass","linkDestination","title","width","height","aspectRatio","scale","linkTarget","sizeSlug","imageRef","prevCaption","showCaption","setShowCaption","allowResize","getBlock","image","multiImageSelection","select","getMedia","getMultiSelectedBlockClientIds","getBlockName","multiSelectedClientIds","length","every","_clientId","canInsertCover","imageEditing","imageSizes","maxWidth","mediaUpload","getBlockRootClientId","getSettings","canInsertBlockType","rootClientId","settings","replaceBlocks","toggleSelection","createErrorNotice","createSuccessNotice","isLargeViewport","isWideAligned","includes","loadedNaturalWidth","loadedNaturalHeight","setLoadedNaturalSize","isEditingImage","setIsEditingImage","externalBlob","setExternalBlob","clientWidth","hasNonContentControls","isResizable","imageSizeOptions","filter","slug","media_details","sizes","source_url","map","name","canUploadMedia","window","fetch","then","response","blob","catch","captionRef","node","focus","naturalWidth","naturalHeight","current","undefined","complete","onResizeStart","onResizeStop","onImageError","embedBlock","onSetHref","props","onSetTitle","updateAlt","newAlt","updateImage","newSizeSlug","newUrl","uploadExternal","filesList","onFileChange","img","type","allowedTypes","onError","message","updateAlignment","nextAlign","extraUpdatedAttributes","canEditImage","allowCrop","switchToCover","dimensionsUnitsOptions","availableUnits","controls","link","newValue","parseInt","filename","defaultedAlt","borderProps","isRounded","className","event","target","objectFit","style","fallbackClientWidth","imageAttributes","ratio","currentWidth","currentHeight","minWidth","minHeight","maxWidthBuffer","showRightHandle","showLeftHandle","display","top","right","bottom","left","direction","elt","offsetWidth","offsetHeight","isEmpty"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { isBlobURL } from '@wordpress/blob';\nimport {\n\tExternalLink,\n\tResizableBox,\n\tSpinner,\n\tTextareaControl,\n\tTextControl,\n\tToolbarButton,\n\tToolbarGroup,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalUseCustomUnits as useCustomUnits,\n} from '@wordpress/components';\nimport { useViewportMatch, usePrevious } from '@wordpress/compose';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\t__experimentalImageURLInputUI as ImageURLInputUI,\n\tMediaReplaceFlow,\n\tstore as blockEditorStore,\n\tBlockAlignmentControl,\n\t__experimentalImageEditor as ImageEditor,\n\t__experimentalGetElementClassName,\n\t__experimentalUseBorderProps as useBorderProps,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\nimport {\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n\tuseRef,\n\tuseCallback,\n} from '@wordpress/element';\nimport { __, _x, sprintf, isRTL } from '@wordpress/i18n';\nimport { getFilename } from '@wordpress/url';\nimport {\n\tcreateBlock,\n\tgetDefaultBlockName,\n\tswitchToBlockType,\n} from '@wordpress/blocks';\nimport {\n\tcrop,\n\toverlayText,\n\tupload,\n\tcaption as captionIcon,\n} from '@wordpress/icons';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as coreStore } from '@wordpress/core-data';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../lock-unlock';\nimport { createUpgradedEmbedBlock } from '../embed/util';\nimport useClientWidth from './use-client-width';\nimport { isExternalImage } from './edit';\n\n/**\n * Module constants\n */\nimport { MIN_SIZE, ALLOWED_MEDIA_TYPES } from './constants';\nimport { evalAspectRatio } from './utils';\n\nconst { DimensionsTool, ResolutionTool } = unlock( blockEditorPrivateApis );\n\nconst scaleOptions = [\n\t{\n\t\tvalue: 'cover',\n\t\tlabel: _x( 'Cover', 'Scale option for dimensions control' ),\n\t\thelp: __( 'Image covers the space evenly.' ),\n\t},\n\t{\n\t\tvalue: 'contain',\n\t\tlabel: _x( 'Contain', 'Scale option for dimensions control' ),\n\t\thelp: __( 'Image is contained without distortion.' ),\n\t},\n];\n\nexport default function Image( {\n\ttemporaryURL,\n\tattributes,\n\tsetAttributes,\n\tisSelected,\n\tinsertBlocksAfter,\n\tonReplace,\n\tonSelectImage,\n\tonSelectURL,\n\tonUploadError,\n\tcontainerRef,\n\tcontext,\n\tclientId,\n\tblockEditingMode,\n} ) {\n\tconst {\n\t\turl = '',\n\t\talt,\n\t\tcaption,\n\t\talign,\n\t\tid,\n\t\thref,\n\t\trel,\n\t\tlinkClass,\n\t\tlinkDestination,\n\t\ttitle,\n\t\twidth,\n\t\theight,\n\t\taspectRatio,\n\t\tscale,\n\t\tlinkTarget,\n\t\tsizeSlug,\n\t} = attributes;\n\tconst imageRef = useRef();\n\tconst prevCaption = usePrevious( caption );\n\tconst [ showCaption, setShowCaption ] = useState( !! caption );\n\tconst { allowResize = true } = context;\n\tconst { getBlock } = useSelect( blockEditorStore );\n\n\tconst { image, multiImageSelection } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getMedia } = select( coreStore );\n\t\t\tconst { getMultiSelectedBlockClientIds, getBlockName } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst multiSelectedClientIds = getMultiSelectedBlockClientIds();\n\t\t\treturn {\n\t\t\t\timage:\n\t\t\t\t\tid && isSelected\n\t\t\t\t\t\t? getMedia( id, { context: 'view' } )\n\t\t\t\t\t\t: null,\n\t\t\t\tmultiImageSelection:\n\t\t\t\t\tmultiSelectedClientIds.length &&\n\t\t\t\t\tmultiSelectedClientIds.every(\n\t\t\t\t\t\t( _clientId ) =>\n\t\t\t\t\t\t\tgetBlockName( _clientId ) === 'core/image'\n\t\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ id, isSelected ]\n\t);\n\tconst { canInsertCover, imageEditing, imageSizes, maxWidth, mediaUpload } =\n\t\tuseSelect(\n\t\t\t( select ) => {\n\t\t\t\tconst {\n\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\tgetSettings,\n\t\t\t\t\tcanInsertBlockType,\n\t\t\t\t} = select( blockEditorStore );\n\n\t\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\t\tconst settings = getSettings();\n\n\t\t\t\treturn {\n\t\t\t\t\timageEditing: settings.imageEditing,\n\t\t\t\t\timageSizes: settings.imageSizes,\n\t\t\t\t\tmaxWidth: settings.maxWidth,\n\t\t\t\t\tmediaUpload: settings.mediaUpload,\n\t\t\t\t\tcanInsertCover: canInsertBlockType(\n\t\t\t\t\t\t'core/cover',\n\t\t\t\t\t\trootClientId\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[ clientId ]\n\t\t);\n\tconst { replaceBlocks, toggleSelection } = useDispatch( blockEditorStore );\n\tconst { createErrorNotice, createSuccessNotice } =\n\t\tuseDispatch( noticesStore );\n\tconst isLargeViewport = useViewportMatch( 'medium' );\n\tconst isWideAligned = [ 'wide', 'full' ].includes( align );\n\tconst [\n\t\t{ loadedNaturalWidth, loadedNaturalHeight },\n\t\tsetLoadedNaturalSize,\n\t] = useState( {} );\n\tconst [ isEditingImage, setIsEditingImage ] = useState( false );\n\tconst [ externalBlob, setExternalBlob ] = useState();\n\tconst clientWidth = useClientWidth( containerRef, [ align ] );\n\tconst hasNonContentControls = blockEditingMode === 'default';\n\tconst isResizable =\n\t\tallowResize &&\n\t\thasNonContentControls &&\n\t\t! ( isWideAligned && isLargeViewport );\n\tconst imageSizeOptions = imageSizes\n\t\t.filter(\n\t\t\t( { slug } ) => image?.media_details?.sizes?.[ slug ]?.source_url\n\t\t)\n\t\t.map( ( { name, slug } ) => ( { value: slug, label: name } ) );\n\tconst canUploadMedia = !! mediaUpload;\n\n\t// If an image is externally hosted, try to fetch the image data. This may\n\t// fail if the image host doesn't allow CORS with the domain. If it works,\n\t// we can enable a button in the toolbar to upload the image.\n\tuseEffect( () => {\n\t\tif (\n\t\t\t! isExternalImage( id, url ) ||\n\t\t\t! isSelected ||\n\t\t\t! canUploadMedia\n\t\t) {\n\t\t\tsetExternalBlob();\n\t\t\treturn;\n\t\t}\n\n\t\tif ( externalBlob ) return;\n\n\t\twindow\n\t\t\t// Avoid cache, which seems to help avoid CORS problems.\n\t\t\t.fetch( url.includes( '?' ) ? url : url + '?' )\n\t\t\t.then( ( response ) => response.blob() )\n\t\t\t.then( ( blob ) => setExternalBlob( blob ) )\n\t\t\t// Do nothing, cannot upload.\n\t\t\t.catch( () => {} );\n\t}, [ id, url, isSelected, externalBlob, canUploadMedia ] );\n\n\t// We need to show the caption when changes come from\n\t// history navigation(undo/redo).\n\tuseEffect( () => {\n\t\tif ( caption && ! prevCaption ) {\n\t\t\tsetShowCaption( true );\n\t\t}\n\t}, [ caption, prevCaption ] );\n\n\t// Focus the caption when we click to add one.\n\tconst captionRef = useCallback(\n\t\t( node ) => {\n\t\t\tif ( node && ! caption ) {\n\t\t\t\tnode.focus();\n\t\t\t}\n\t\t},\n\t\t[ caption ]\n\t);\n\n\t// Get naturalWidth and naturalHeight from image ref, and fall back to loaded natural\n\t// width and height. This resolves an issue in Safari where the loaded natural\n\t// width and height is otherwise lost when switching between alignments.\n\t// See: https://github.com/WordPress/gutenberg/pull/37210.\n\tconst { naturalWidth, naturalHeight } = useMemo( () => {\n\t\treturn {\n\t\t\tnaturalWidth:\n\t\t\t\timageRef.current?.naturalWidth ||\n\t\t\t\tloadedNaturalWidth ||\n\t\t\t\tundefined,\n\t\t\tnaturalHeight:\n\t\t\t\timageRef.current?.naturalHeight ||\n\t\t\t\tloadedNaturalHeight ||\n\t\t\t\tundefined,\n\t\t};\n\t}, [\n\t\tloadedNaturalWidth,\n\t\tloadedNaturalHeight,\n\t\timageRef.current?.complete,\n\t] );\n\n\tfunction onResizeStart() {\n\t\ttoggleSelection( false );\n\t}\n\n\tfunction onResizeStop() {\n\t\ttoggleSelection( true );\n\t}\n\n\tfunction onImageError() {\n\t\t// Check if there's an embed block that handles this URL, e.g., instagram URL.\n\t\t// See: https://github.com/WordPress/gutenberg/pull/11472\n\t\tconst embedBlock = createUpgradedEmbedBlock( { attributes: { url } } );\n\n\t\tif ( undefined !== embedBlock ) {\n\t\t\tonReplace( embedBlock );\n\t\t}\n\t}\n\n\tfunction onSetHref( props ) {\n\t\tsetAttributes( props );\n\t}\n\n\tfunction onSetTitle( value ) {\n\t\t// This is the HTML title attribute, separate from the media object\n\t\t// title.\n\t\tsetAttributes( { title: value } );\n\t}\n\n\tfunction updateAlt( newAlt ) {\n\t\tsetAttributes( { alt: newAlt } );\n\t}\n\n\tfunction updateImage( newSizeSlug ) {\n\t\tconst newUrl = image?.media_details?.sizes?.[ newSizeSlug ]?.source_url;\n\t\tif ( ! newUrl ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tsetAttributes( {\n\t\t\turl: newUrl,\n\t\t\tsizeSlug: newSizeSlug,\n\t\t} );\n\t}\n\n\tfunction uploadExternal() {\n\t\tmediaUpload( {\n\t\t\tfilesList: [ externalBlob ],\n\t\t\tonFileChange( [ img ] ) {\n\t\t\t\tonSelectImage( img );\n\n\t\t\t\tif ( isBlobURL( img.url ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetExternalBlob();\n\t\t\t\tcreateSuccessNotice( __( 'Image uploaded.' ), {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t} );\n\t\t\t},\n\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\tonError( message ) {\n\t\t\t\tcreateErrorNotice( message, { type: 'snackbar' } );\n\t\t\t},\n\t\t} );\n\t}\n\n\tfunction updateAlignment( nextAlign ) {\n\t\tconst extraUpdatedAttributes = [ 'wide', 'full' ].includes( nextAlign )\n\t\t\t? { width: undefined, height: undefined }\n\t\t\t: {};\n\t\tsetAttributes( {\n\t\t\t...extraUpdatedAttributes,\n\t\t\talign: nextAlign,\n\t\t} );\n\t}\n\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsEditingImage( false );\n\t\t\tif ( ! caption ) {\n\t\t\t\tsetShowCaption( false );\n\t\t\t}\n\t\t}\n\t}, [ isSelected, caption ] );\n\n\tconst canEditImage = id && naturalWidth && naturalHeight && imageEditing;\n\tconst allowCrop = ! multiImageSelection && canEditImage && ! isEditingImage;\n\n\tfunction switchToCover() {\n\t\treplaceBlocks(\n\t\t\tclientId,\n\t\t\tswitchToBlockType( getBlock( clientId ), 'core/cover' )\n\t\t);\n\t}\n\n\t// TODO: Can allow more units after figuring out how they should interact\n\t// with the ResizableBox and ImageEditor components. Calculations later on\n\t// for those components are currently assuming px units.\n\tconst dimensionsUnitsOptions = useCustomUnits( {\n\t\tavailableUnits: [ 'px' ],\n\t} );\n\n\tconst controls = (\n\t\t<>\n\t\t\t<BlockControls group=\"block\">\n\t\t\t\t{ hasNonContentControls && (\n\t\t\t\t\t<BlockAlignmentControl\n\t\t\t\t\t\tvalue={ align }\n\t\t\t\t\t\tonChange={ updateAlignment }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ hasNonContentControls && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\tsetShowCaption( ! showCaption );\n\t\t\t\t\t\t\tif ( showCaption && caption ) {\n\t\t\t\t\t\t\t\tsetAttributes( { caption: undefined } );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} }\n\t\t\t\t\t\ticon={ captionIcon }\n\t\t\t\t\t\tisPressed={ showCaption }\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\tshowCaption\n\t\t\t\t\t\t\t\t? __( 'Remove caption' )\n\t\t\t\t\t\t\t\t: __( 'Add caption' )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! multiImageSelection && ! isEditingImage && (\n\t\t\t\t\t<ImageURLInputUI\n\t\t\t\t\t\turl={ href || '' }\n\t\t\t\t\t\tonChangeUrl={ onSetHref }\n\t\t\t\t\t\tlinkDestination={ linkDestination }\n\t\t\t\t\t\tmediaUrl={ ( image && image.source_url ) || url }\n\t\t\t\t\t\tmediaLink={ image && image.link }\n\t\t\t\t\t\tlinkTarget={ linkTarget }\n\t\t\t\t\t\tlinkClass={ linkClass }\n\t\t\t\t\t\trel={ rel }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ allowCrop && (\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\t{ ! multiImageSelection && canInsertCover && (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\ticon={ overlayText }\n\t\t\t\t\t\tlabel={ __( 'Add text over image' ) }\n\t\t\t\t\t\tonClick={ switchToCover }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</BlockControls>\n\t\t\t{ ! multiImageSelection && ! isEditingImage && (\n\t\t\t\t<BlockControls group=\"other\">\n\t\t\t\t\t<MediaReplaceFlow\n\t\t\t\t\t\tmediaId={ id }\n\t\t\t\t\t\tmediaURL={ url }\n\t\t\t\t\t\tallowedTypes={ ALLOWED_MEDIA_TYPES }\n\t\t\t\t\t\taccept=\"image/*\"\n\t\t\t\t\t\tonSelect={ onSelectImage }\n\t\t\t\t\t\tonSelectURL={ onSelectURL }\n\t\t\t\t\t\tonError={ onUploadError }\n\t\t\t\t\t/>\n\t\t\t\t</BlockControls>\n\t\t\t) }\n\t\t\t{ ! multiImageSelection && externalBlob && (\n\t\t\t\t<BlockControls>\n\t\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\tonClick={ uploadExternal }\n\t\t\t\t\t\t\ticon={ upload }\n\t\t\t\t\t\t\tlabel={ __( 'Upload external image' ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ToolbarGroup>\n\t\t\t\t</BlockControls>\n\t\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\twidth: undefined,\n\t\t\t\t\t\t\theight: undefined,\n\t\t\t\t\t\t\tscale: undefined,\n\t\t\t\t\t\t\taspectRatio: undefined,\n\t\t\t\t\t\t} )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{ ! multiImageSelection && (\n\t\t\t\t\t\t<ToolsPanelItem\n\t\t\t\t\t\t\tlabel={ __( 'Alternative text' ) }\n\t\t\t\t\t\t\tisShownByDefault={ true }\n\t\t\t\t\t\t\thasValue={ () => alt !== '' }\n\t\t\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\t\t\tsetAttributes( { alt: undefined } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<TextareaControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Alternative text' ) }\n\t\t\t\t\t\t\t\tvalue={ alt }\n\t\t\t\t\t\t\t\tonChange={ updateAlt }\n\t\t\t\t\t\t\t\thelp={\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t<ExternalLink href=\"https://www.w3.org/WAI/tutorials/images/decision-tree\">\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'Describe the purpose of the image.'\n\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t\t\t{ __( 'Leave empty if decorative.' ) }\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\t__nextHasNoMarginBottom\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<DimensionsTool\n\t\t\t\t\t\tvalue={ {\n\t\t\t\t\t\t\twidth: width && `${ width }px`,\n\t\t\t\t\t\t\theight: height && `${ height }px`,\n\t\t\t\t\t\t\tscale,\n\t\t\t\t\t\t\taspectRatio,\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\t// Rebuilding the object forces setting `undefined`\n\t\t\t\t\t\t\t// for values that are removed since setAttributes\n\t\t\t\t\t\t\t// doesn't do anything with keys that aren't set.\n\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\twidth:\n\t\t\t\t\t\t\t\t\tnewValue.width &&\n\t\t\t\t\t\t\t\t\tparseInt( newValue.width, 10 ),\n\t\t\t\t\t\t\t\theight:\n\t\t\t\t\t\t\t\t\tnewValue.height &&\n\t\t\t\t\t\t\t\t\tparseInt( newValue.height, 10 ),\n\t\t\t\t\t\t\t\tscale: newValue.scale,\n\t\t\t\t\t\t\t\taspectRatio: newValue.aspectRatio,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tdefaultScale=\"cover\"\n\t\t\t\t\t\tdefaultAspectRatio=\"auto\"\n\t\t\t\t\t\tscaleOptions={ scaleOptions }\n\t\t\t\t\t\tunitsOptions={ dimensionsUnitsOptions }\n\t\t\t\t\t/>\n\t\t\t\t\t<ResolutionTool\n\t\t\t\t\t\tvalue={ sizeSlug }\n\t\t\t\t\t\tonChange={ updateImage }\n\t\t\t\t\t\toptions={ imageSizeOptions }\n\t\t\t\t\t/>\n\t\t\t\t</ToolsPanel>\n\t\t\t</InspectorControls>\n\t\t\t<InspectorControls group=\"advanced\">\n\t\t\t\t<TextControl\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tlabel={ __( 'Title attribute' ) }\n\t\t\t\t\tvalue={ title || '' }\n\t\t\t\t\tonChange={ onSetTitle }\n\t\t\t\t\thelp={\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Describe the role of this image on the page.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t<ExternalLink href=\"https://www.w3.org/TR/html52/dom.html#the-title-attribute\">\n\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t'(Note: many devices and browsers do not display this text.)'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</ExternalLink>\n\t\t\t\t\t\t</>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t</>\n\t);\n\n\tconst filename = getFilename( url );\n\tlet defaultedAlt;\n\n\tif ( alt ) {\n\t\tdefaultedAlt = alt;\n\t} else if ( filename ) {\n\t\tdefaultedAlt = sprintf(\n\t\t\t/* translators: %s: file name */\n\t\t\t__( 'This image has an empty alt attribute; its file name is %s' ),\n\t\t\tfilename\n\t\t);\n\t} else {\n\t\tdefaultedAlt = __( 'This image has an empty alt attribute' );\n\t}\n\n\tconst borderProps = useBorderProps( attributes );\n\tconst isRounded = attributes.className?.includes( 'is-style-rounded' );\n\n\tlet img = (\n\t\t// Disable reason: Image itself is not meant to be interactive, but\n\t\t// should direct focus to block.\n\t\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t\t<>\n\t\t\t<img\n\t\t\t\tsrc={ temporaryURL || url }\n\t\t\t\talt={ defaultedAlt }\n\t\t\t\tonError={ () => onImageError() }\n\t\t\t\tonLoad={ ( event ) => {\n\t\t\t\t\tsetLoadedNaturalSize( {\n\t\t\t\t\t\tloadedNaturalWidth: event.target?.naturalWidth,\n\t\t\t\t\t\tloadedNaturalHeight: event.target?.naturalHeight,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tref={ imageRef }\n\t\t\t\tclassName={ borderProps.className }\n\t\t\t\tstyle={ {\n\t\t\t\t\twidth:\n\t\t\t\t\t\t( width && height ) || aspectRatio ? '100%' : 'inherit',\n\t\t\t\t\theight:\n\t\t\t\t\t\t( width && height ) || aspectRatio ? '100%' : 'inherit',\n\t\t\t\t\tobjectFit: scale,\n\t\t\t\t\t...borderProps.style,\n\t\t\t\t} }\n\t\t\t/>\n\t\t\t{ temporaryURL && <Spinner /> }\n\t\t</>\n\t\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */\n\t);\n\n\t// clientWidth needs to be a number for the image Cropper to work, but sometimes it's 0\n\t// So we try using the imageRef width first and fallback to clientWidth.\n\tconst fallbackClientWidth = imageRef.current?.width || clientWidth;\n\n\tif ( canEditImage && isEditingImage ) {\n\t\timg = (\n\t\t\t<ImageEditor\n\t\t\t\tid={ id }\n\t\t\t\turl={ url }\n\t\t\t\twidth={ width }\n\t\t\t\theight={ height }\n\t\t\t\tclientWidth={ fallbackClientWidth }\n\t\t\t\tnaturalHeight={ naturalHeight }\n\t\t\t\tnaturalWidth={ naturalWidth }\n\t\t\t\tonSaveImage={ ( imageAttributes ) =>\n\t\t\t\t\tsetAttributes( imageAttributes )\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\tborderProps={ isRounded ? undefined : borderProps }\n\t\t\t/>\n\t\t);\n\t} else if ( ! isResizable ) {\n\t\timg = <div style={ { width, height, aspectRatio } }>{ img }</div>;\n\t} else {\n\t\tconst ratio =\n\t\t\t( aspectRatio && evalAspectRatio( aspectRatio ) ) ||\n\t\t\t( width && height && width / height ) ||\n\t\t\tnaturalWidth / naturalHeight ||\n\t\t\t1;\n\n\t\tconst currentWidth = ! width && height ? height * ratio : width;\n\t\tconst currentHeight = ! height && width ? width / ratio : height;\n\n\t\tconst minWidth =\n\t\t\tnaturalWidth < naturalHeight ? MIN_SIZE : MIN_SIZE * ratio;\n\t\tconst minHeight =\n\t\t\tnaturalHeight < naturalWidth ? MIN_SIZE : MIN_SIZE / ratio;\n\n\t\t// With the current implementation of ResizableBox, an image needs an\n\t\t// explicit pixel value for the max-width. In absence of being able to\n\t\t// set the content-width, this max-width is currently dictated by the\n\t\t// vanilla editor style. The following variable adds a buffer to this\n\t\t// vanilla style, so 3rd party themes have some wiggleroom. This does,\n\t\t// in most cases, allow you to scale the image beyond the width of the\n\t\t// main column, though not infinitely.\n\t\t// @todo It would be good to revisit this once a content-width variable\n\t\t// becomes available.\n\t\tconst maxWidthBuffer = maxWidth * 2.5;\n\n\t\tlet showRightHandle = false;\n\t\tlet showLeftHandle = false;\n\n\t\t/* eslint-disable no-lonely-if */\n\t\t// See https://github.com/WordPress/gutenberg/issues/7584.\n\t\tif ( align === 'center' ) {\n\t\t\t// When the image is centered, show both handles.\n\t\t\tshowRightHandle = true;\n\t\t\tshowLeftHandle = true;\n\t\t} else if ( isRTL() ) {\n\t\t\t// In RTL mode the image is on the right by default.\n\t\t\t// Show the right handle and hide the left handle only when it is\n\t\t\t// aligned left. Otherwise always show the left handle.\n\t\t\tif ( align === 'left' ) {\n\t\t\t\tshowRightHandle = true;\n\t\t\t} else {\n\t\t\t\tshowLeftHandle = true;\n\t\t\t}\n\t\t} else {\n\t\t\t// Show the left handle and hide the right handle only when the\n\t\t\t// image is aligned right. Otherwise always show the right handle.\n\t\t\tif ( align === 'right' ) {\n\t\t\t\tshowLeftHandle = true;\n\t\t\t} else {\n\t\t\t\tshowRightHandle = true;\n\t\t\t}\n\t\t}\n\t\t/* eslint-enable no-lonely-if */\n\n\t\timg = (\n\t\t\t<ResizableBox\n\t\t\t\tstyle={ {\n\t\t\t\t\tdisplay: 'block',\n\t\t\t\t\tobjectFit: scale,\n\t\t\t\t\taspectRatio:\n\t\t\t\t\t\t! width && ! height && aspectRatio\n\t\t\t\t\t\t\t? aspectRatio\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t} }\n\t\t\t\tsize={ {\n\t\t\t\t\twidth: currentWidth ?? 'auto',\n\t\t\t\t\theight: currentHeight ?? 'auto',\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={ ratio }\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 ) => {\n\t\t\t\t\tonResizeStop();\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\twidth: elt.offsetWidth,\n\t\t\t\t\t\theight: elt.offsetHeight,\n\t\t\t\t\t\taspectRatio: undefined,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tresizeRatio={ align === 'center' ? 2 : 1 }\n\t\t\t>\n\t\t\t\t{ img }\n\t\t\t</ResizableBox>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{ /* Hide controls during upload to avoid component remount,\n\t\t\t\twhich causes duplicated image upload. */ }\n\t\t\t{ ! temporaryURL && controls }\n\t\t\t{ img }\n\t\t\t{ showCaption &&\n\t\t\t\t( ! RichText.isEmpty( caption ) || isSelected ) && (\n\t\t\t\t\t<RichText\n\t\t\t\t\t\tidentifier=\"caption\"\n\t\t\t\t\t\tclassName={ __experimentalGetElementClassName(\n\t\t\t\t\t\t\t'caption'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\tref={ captionRef }\n\t\t\t\t\t\ttagName=\"figcaption\"\n\t\t\t\t\t\taria-label={ __( 'Image caption text' ) }\n\t\t\t\t\t\tplaceholder={ __( 'Add caption' ) }\n\t\t\t\t\t\tvalue={ caption }\n\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\tsetAttributes( { caption: value } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinlineToolbar\n\t\t\t\t\t\t__unstableOnSplitAtEnd={ () =>\n\t\t\t\t\t\t\tinsertBlocksAfter(\n\t\t\t\t\t\t\t\tcreateBlock( getDefaultBlockName() )\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</>\n\t);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-library/src/image/index.js"],"names":["__","image","icon","initBlock","deprecated","edit","save","transforms","name","metadata","settings","example","attributes","sizeSlug","url","caption","__experimentalLabel","context","alt","getEditWrapperProps","align","init"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,EAAT,QAAmB,iBAAnB;AACA,SAASC,KAAK,IAAIC,IAAlB,QAA8B,kBAA9B;AAEA;AACA;AACA;;AACA,OAAOC,SAAP,MAAsB,qBAAtB;AACA,OAAOC,UAAP,MAAuB,cAAvB;AACA,OAAOC,IAAP,MAAiB,QAAjB
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-library/src/image/index.js"],"names":["__","image","icon","initBlock","deprecated","edit","save","transforms","name","metadata","settings","example","attributes","sizeSlug","url","caption","__experimentalLabel","context","alt","getEditWrapperProps","align","init"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,EAAT,QAAmB,iBAAnB;AACA,SAASC,KAAK,IAAIC,IAAlB,QAA8B,kBAA9B;AAEA;AACA;AACA;;AACA,OAAOC,SAAP,MAAsB,qBAAtB;AACA,OAAOC,UAAP,MAAuB,cAAvB;AACA,OAAOC,IAAP,MAAiB,QAAjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,OAAOC,IAAP,MAAiB,QAAjB;AACA,OAAOC,UAAP,MAAuB,cAAvB;AAEA,MAAM;AAAEC,EAAAA;AAAF,IAAWC,QAAjB;AAEA,SAASA,QAAT,EAAmBD,IAAnB;AAEA,OAAO,MAAME,QAAQ,GAAG;AACvBR,EAAAA,IADuB;AAEvBS,EAAAA,OAAO,EAAE;AACRC,IAAAA,UAAU,EAAE;AACXC,MAAAA,QAAQ,EAAE,OADC;AAEXC,MAAAA,GAAG,EAAE,8CAFM;AAGX;AACAC,MAAAA,OAAO,EAAEf,EAAE,CAAE,8CAAF;AAJA;AADJ,GAFc;;AAUvBgB,EAAAA,mBAAmB,CAAEJ,UAAF,EAAc;AAAEK,IAAAA;AAAF,GAAd,EAA4B;AAC9C,QAAKA,OAAO,KAAK,eAAjB,EAAmC;AAClC,YAAM;AAAEF,QAAAA,OAAF;AAAWG,QAAAA,GAAX;AAAgBJ,QAAAA;AAAhB,UAAwBF,UAA9B;;AAEA,UAAK,CAAEE,GAAP,EAAa;AACZ,eAAOd,EAAE,CAAE,OAAF,CAAT;AACA;;AAED,UAAK,CAAEkB,GAAP,EAAa;AACZ,eAAOH,OAAO,IAAI,EAAlB;AACA,OATiC,CAWlC;AACA;;;AACA,aAAOG,GAAG,IAAKH,OAAO,GAAG,OAAOA,OAAV,GAAoB,EAAhC,CAAV;AACA;AACD,GA1BsB;;AA2BvBI,EAAAA,mBAAmB,CAAEP,UAAF,EAAe;AACjC,WAAO;AACN,oBAAcA,UAAU,CAACQ;AADnB,KAAP;AAGA,GA/BsB;;AAgCvBb,EAAAA,UAhCuB;AAiCvBF,EAAAA,IAjCuB;AAkCvBC,EAAAA,IAlCuB;AAmCvBF,EAAAA;AAnCuB,CAAjB;AAsCP,OAAO,MAAMiB,IAAI,GAAG,MAAMlB,SAAS,CAAE;AAAEK,EAAAA,IAAF;AAAQC,EAAAA,QAAR;AAAkBC,EAAAA;AAAlB,CAAF,CAA5B","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { image as icon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport initBlock from '../utils/init-block';\nimport deprecated from './deprecated';\nimport edit from './edit';\nimport metadata from './block.json';\nimport save from './save';\nimport transforms from './transforms';\n\nconst { name } = metadata;\n\nexport { metadata, name };\n\nexport const settings = {\n\ticon,\n\texample: {\n\t\tattributes: {\n\t\t\tsizeSlug: 'large',\n\t\t\turl: 'https://s.w.org/images/core/5.3/MtBlanc1.jpg',\n\t\t\t// translators: Caption accompanying an image of the Mont Blanc, which serves as an example for the Image block.\n\t\t\tcaption: __( 'Mont Blanc appears—still, snowy, and serene.' ),\n\t\t},\n\t},\n\t__experimentalLabel( attributes, { context } ) {\n\t\tif ( context === 'accessibility' ) {\n\t\t\tconst { caption, alt, url } = attributes;\n\n\t\t\tif ( ! url ) {\n\t\t\t\treturn __( 'Empty' );\n\t\t\t}\n\n\t\t\tif ( ! alt ) {\n\t\t\t\treturn caption || '';\n\t\t\t}\n\n\t\t\t// This is intended to be read by a screen reader.\n\t\t\t// A period simply means a pause, no need to translate it.\n\t\t\treturn alt + ( caption ? '. ' + caption : '' );\n\t\t}\n\t},\n\tgetEditWrapperProps( attributes ) {\n\t\treturn {\n\t\t\t'data-align': attributes.align,\n\t\t};\n\t},\n\ttransforms,\n\tedit,\n\tsave,\n\tdeprecated,\n};\n\nexport const init = () => initBlock( { name, metadata, settings } );\n"]}
|
|
@@ -22,6 +22,8 @@ export default function save({
|
|
|
22
22
|
linkClass,
|
|
23
23
|
width,
|
|
24
24
|
height,
|
|
25
|
+
aspectRatio,
|
|
26
|
+
scale,
|
|
25
27
|
id,
|
|
26
28
|
linkTarget,
|
|
27
29
|
sizeSlug,
|
|
@@ -42,7 +44,12 @@ export default function save({
|
|
|
42
44
|
src: url,
|
|
43
45
|
alt: alt,
|
|
44
46
|
className: imageClasses || undefined,
|
|
45
|
-
style: borderProps.style,
|
|
47
|
+
style: { ...borderProps.style,
|
|
48
|
+
aspectRatio,
|
|
49
|
+
objectFit: scale,
|
|
50
|
+
width,
|
|
51
|
+
height
|
|
52
|
+
},
|
|
46
53
|
width: width,
|
|
47
54
|
height: height,
|
|
48
55
|
title: title
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-library/src/image/save.js"],"names":["classnames","RichText","useBlockProps","__experimentalGetElementClassName","__experimentalGetBorderClassesAndStyles","getBorderClassesAndStyles","save","attributes","url","alt","caption","align","href","rel","linkClass","width","height","id","linkTarget","sizeSlug","title","newRel","undefined","borderProps","classes","className","style","Object","keys","length","imageClasses","image","figure","isEmpty"],"mappings":";;AAAA;AACA;AACA;AACA,OAAOA,UAAP,MAAuB,YAAvB;AAEA;AACA;AACA;;AACA,SACCC,QADD,EAECC,aAFD,EAGCC,iCAHD,EAICC,uCAAuC,IAAIC,yBAJ5C,QAKO,yBALP;AAOA,eAAe,SAASC,IAAT,CAAe;AAAEC,EAAAA;AAAF,CAAf,EAAgC;AAC9C,QAAM;AACLC,IAAAA,GADK;AAELC,IAAAA,GAFK;AAGLC,IAAAA,OAHK;AAILC,IAAAA,KAJK;AAKLC,IAAAA,IALK;AAMLC,IAAAA,GANK;AAOLC,IAAAA,SAPK;AAQLC,IAAAA,KARK;AASLC,IAAAA,MATK;AAULC,IAAAA,
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-library/src/image/save.js"],"names":["classnames","RichText","useBlockProps","__experimentalGetElementClassName","__experimentalGetBorderClassesAndStyles","getBorderClassesAndStyles","save","attributes","url","alt","caption","align","href","rel","linkClass","width","height","aspectRatio","scale","id","linkTarget","sizeSlug","title","newRel","undefined","borderProps","classes","className","style","Object","keys","length","imageClasses","image","objectFit","figure","isEmpty"],"mappings":";;AAAA;AACA;AACA;AACA,OAAOA,UAAP,MAAuB,YAAvB;AAEA;AACA;AACA;;AACA,SACCC,QADD,EAECC,aAFD,EAGCC,iCAHD,EAICC,uCAAuC,IAAIC,yBAJ5C,QAKO,yBALP;AAOA,eAAe,SAASC,IAAT,CAAe;AAAEC,EAAAA;AAAF,CAAf,EAAgC;AAC9C,QAAM;AACLC,IAAAA,GADK;AAELC,IAAAA,GAFK;AAGLC,IAAAA,OAHK;AAILC,IAAAA,KAJK;AAKLC,IAAAA,IALK;AAMLC,IAAAA,GANK;AAOLC,IAAAA,SAPK;AAQLC,IAAAA,KARK;AASLC,IAAAA,MATK;AAULC,IAAAA,WAVK;AAWLC,IAAAA,KAXK;AAYLC,IAAAA,EAZK;AAaLC,IAAAA,UAbK;AAcLC,IAAAA,QAdK;AAeLC,IAAAA;AAfK,MAgBFf,UAhBJ;AAkBA,QAAMgB,MAAM,GAAG,CAAEV,GAAF,GAAQW,SAAR,GAAoBX,GAAnC;AACA,QAAMY,WAAW,GAAGpB,yBAAyB,CAAEE,UAAF,CAA7C;AAEA,QAAMmB,OAAO,GAAG1B,UAAU,CAAE;AAC3B,KAAG,QAAQW,KAAO,EAAlB,GAAuBA,KADI;AAE3B,KAAG,QAAQU,QAAU,EAArB,GAA0BA,QAFC;AAG3B,kBAAcN,KAAK,IAAIC,MAHI;AAI3B,yBACC,CAAC,CAAES,WAAW,CAACE,SAAf,IACEF,WAAW,CAACG,KAAZ,IACDC,MAAM,CAACC,IAAP,CAAaL,WAAW,CAACG,KAAzB,EAAiCG,MAAjC,GAA0C;AAPjB,GAAF,CAA1B;AAUA,QAAMC,YAAY,GAAGhC,UAAU,CAAEyB,WAAW,CAACE,SAAd,EAAyB;AACvD,KAAG,YAAYR,EAAI,EAAnB,GAAwB,CAAC,CAAEA;AAD4B,GAAzB,CAA/B;AAIA,QAAMc,KAAK,GACV;AACC,IAAA,GAAG,EAAGzB,GADP;AAEC,IAAA,GAAG,EAAGC,GAFP;AAGC,IAAA,SAAS,EAAGuB,YAAY,IAAIR,SAH7B;AAIC,IAAA,KAAK,EAAG,EACP,GAAGC,WAAW,CAACG,KADR;AAEPX,MAAAA,WAFO;AAGPiB,MAAAA,SAAS,EAAEhB,KAHJ;AAIPH,MAAAA,KAJO;AAKPC,MAAAA;AALO,KAJT;AAWC,IAAA,KAAK,EAAGD,KAXT;AAYC,IAAA,MAAM,EAAGC,MAZV;AAaC,IAAA,KAAK,EAAGM;AAbT,IADD;AAkBA,QAAMa,MAAM,GACX,8BACGvB,IAAI,GACL;AACC,IAAA,SAAS,EAAGE,SADb;AAEC,IAAA,IAAI,EAAGF,IAFR;AAGC,IAAA,MAAM,EAAGQ,UAHV;AAIC,IAAA,GAAG,EAAGG;AAJP,KAMGU,KANH,CADK,GAULA,KAXF,EAaG,CAAEhC,QAAQ,CAACmC,OAAT,CAAkB1B,OAAlB,CAAF,IACD,cAAC,QAAD,CAAU,OAAV;AACC,IAAA,SAAS,EAAGP,iCAAiC,CAAE,SAAF,CAD9C;AAEC,IAAA,OAAO,EAAC,YAFT;AAGC,IAAA,KAAK,EAAGO;AAHT,IAdF,CADD;AAwBA,SACC,6BAAaR,aAAa,CAACI,IAAd,CAAoB;AAAEqB,MAAAA,SAAS,EAAED;AAAb,KAApB;AAAb,KACGS,MADH,CADD;AAKA","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tRichText,\n\tuseBlockProps,\n\t__experimentalGetElementClassName,\n\t__experimentalGetBorderClassesAndStyles as getBorderClassesAndStyles,\n} from '@wordpress/block-editor';\n\nexport default function save( { attributes } ) {\n\tconst {\n\t\turl,\n\t\talt,\n\t\tcaption,\n\t\talign,\n\t\thref,\n\t\trel,\n\t\tlinkClass,\n\t\twidth,\n\t\theight,\n\t\taspectRatio,\n\t\tscale,\n\t\tid,\n\t\tlinkTarget,\n\t\tsizeSlug,\n\t\ttitle,\n\t} = attributes;\n\n\tconst newRel = ! rel ? undefined : rel;\n\tconst borderProps = getBorderClassesAndStyles( attributes );\n\n\tconst classes = classnames( {\n\t\t[ `align${ align }` ]: align,\n\t\t[ `size-${ sizeSlug }` ]: sizeSlug,\n\t\t'is-resized': width || height,\n\t\t'has-custom-border':\n\t\t\t!! borderProps.className ||\n\t\t\t( borderProps.style &&\n\t\t\t\tObject.keys( borderProps.style ).length > 0 ),\n\t} );\n\n\tconst imageClasses = classnames( borderProps.className, {\n\t\t[ `wp-image-${ id }` ]: !! id,\n\t} );\n\n\tconst image = (\n\t\t<img\n\t\t\tsrc={ url }\n\t\t\talt={ alt }\n\t\t\tclassName={ imageClasses || undefined }\n\t\t\tstyle={ {\n\t\t\t\t...borderProps.style,\n\t\t\t\taspectRatio,\n\t\t\t\tobjectFit: scale,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t} }\n\t\t\twidth={ width }\n\t\t\theight={ height }\n\t\t\ttitle={ title }\n\t\t/>\n\t);\n\n\tconst figure = (\n\t\t<>\n\t\t\t{ href ? (\n\t\t\t\t<a\n\t\t\t\t\tclassName={ linkClass }\n\t\t\t\t\thref={ href }\n\t\t\t\t\ttarget={ linkTarget }\n\t\t\t\t\trel={ newRel }\n\t\t\t\t>\n\t\t\t\t\t{ image }\n\t\t\t\t</a>\n\t\t\t) : (\n\t\t\t\timage\n\t\t\t) }\n\t\t\t{ ! RichText.isEmpty( caption ) && (\n\t\t\t\t<RichText.Content\n\t\t\t\t\tclassName={ __experimentalGetElementClassName( 'caption' ) }\n\t\t\t\t\ttagName=\"figcaption\"\n\t\t\t\t\tvalue={ caption }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n\n\treturn (\n\t\t<figure { ...useBlockProps.save( { className: classes } ) }>\n\t\t\t{ figure }\n\t\t</figure>\n\t);\n}\n"]}
|
|
@@ -2,6 +2,22 @@
|
|
|
2
2
|
* Internal dependencies
|
|
3
3
|
*/
|
|
4
4
|
import { NEW_TAB_REL } from './constants';
|
|
5
|
+
/**
|
|
6
|
+
* Evaluates a CSS aspect-ratio property value as a number.
|
|
7
|
+
*
|
|
8
|
+
* Degenerate or invalid ratios behave as 'auto'. And 'auto' ratios return NaN.
|
|
9
|
+
*
|
|
10
|
+
* @see https://drafts.csswg.org/css-sizing-4/#aspect-ratio
|
|
11
|
+
*
|
|
12
|
+
* @param {string} value CSS aspect-ratio property value.
|
|
13
|
+
* @return {number} Numerical aspect ratio or NaN if invalid.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
export function evalAspectRatio(value) {
|
|
17
|
+
const [width, height = 1] = value.split('/').map(Number);
|
|
18
|
+
const aspectRatio = width / height;
|
|
19
|
+
return aspectRatio === Infinity || aspectRatio === 0 ? NaN : aspectRatio;
|
|
20
|
+
}
|
|
5
21
|
export function removeNewTabRel(currentRel) {
|
|
6
22
|
let newRel = currentRel;
|
|
7
23
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-library/src/image/utils.js"],"names":["NEW_TAB_REL","removeNewTabRel","currentRel","newRel","undefined","forEach","relVal","regExp","RegExp","replace","trim","getUpdatedLinkTargetSettings","
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-library/src/image/utils.js"],"names":["NEW_TAB_REL","evalAspectRatio","value","width","height","split","map","Number","aspectRatio","Infinity","NaN","removeNewTabRel","currentRel","newRel","undefined","forEach","relVal","regExp","RegExp","replace","trim","getUpdatedLinkTargetSettings","rel","linkTarget","updatedRel","getImageSizeAttributes","image","size","url","media_details","sizes","source_url","sizeSlug"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,WAAT,QAA4B,aAA5B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,eAAT,CAA0BC,KAA1B,EAAkC;AACxC,QAAM,CAAEC,KAAF,EAASC,MAAM,GAAG,CAAlB,IAAwBF,KAAK,CAACG,KAAN,CAAa,GAAb,EAAmBC,GAAnB,CAAwBC,MAAxB,CAA9B;AACA,QAAMC,WAAW,GAAGL,KAAK,GAAGC,MAA5B;AACA,SAAOI,WAAW,KAAKC,QAAhB,IAA4BD,WAAW,KAAK,CAA5C,GAAgDE,GAAhD,GAAsDF,WAA7D;AACA;AAED,OAAO,SAASG,eAAT,CAA0BC,UAA1B,EAAuC;AAC7C,MAAIC,MAAM,GAAGD,UAAb;;AAEA,MAAKA,UAAU,KAAKE,SAAf,IAA4BD,MAAjC,EAA0C;AACzCb,IAAAA,WAAW,CAACe,OAAZ,CAAuBC,MAAF,IAAc;AAClC,YAAMC,MAAM,GAAG,IAAIC,MAAJ,CAAY,QAAQF,MAAR,GAAiB,KAA7B,EAAoC,IAApC,CAAf;AACAH,MAAAA,MAAM,GAAGA,MAAM,CAACM,OAAP,CAAgBF,MAAhB,EAAwB,EAAxB,CAAT;AACA,KAHD,EADyC,CAMzC;;AACA,QAAKJ,MAAM,KAAKD,UAAhB,EAA6B;AAC5BC,MAAAA,MAAM,GAAGA,MAAM,CAACO,IAAP,EAAT;AACA;;AAED,QAAK,CAAEP,MAAP,EAAgB;AACfA,MAAAA,MAAM,GAAGC,SAAT;AACA;AACD;;AAED,SAAOD,MAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASQ,4BAAT,CAAuCnB,KAAvC,EAA8C;AAAEoB,EAAAA;AAAF,CAA9C,EAAwD;AAC9D,QAAMC,UAAU,GAAGrB,KAAK,GAAG,QAAH,GAAcY,SAAtC;AAEA,MAAIU,UAAJ;;AACA,MAAK,CAAED,UAAF,IAAgB,CAAED,GAAvB,EAA6B;AAC5BE,IAAAA,UAAU,GAAGV,SAAb;AACA,GAFD,MAEO;AACNU,IAAAA,UAAU,GAAGb,eAAe,CAAEW,GAAF,CAA5B;AACA;;AAED,SAAO;AACNC,IAAAA,UADM;AAEND,IAAAA,GAAG,EAAEE;AAFC,GAAP;AAIA;AAED;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,sBAAT,CAAiCC,KAAjC,EAAwCC,IAAxC,EAA+C;AACrD,QAAMC,GAAG,GAAGF,KAAK,EAAEG,aAAP,EAAsBC,KAAtB,GAA+BH,IAA/B,GAAuCI,UAAnD;;AAEA,MAAKH,GAAL,EAAW;AACV,WAAO;AAAEA,MAAAA,GAAF;AAAOzB,MAAAA,KAAK,EAAEW,SAAd;AAAyBV,MAAAA,MAAM,EAAEU,SAAjC;AAA4CkB,MAAAA,QAAQ,EAAEL;AAAtD,KAAP;AACA;;AAED,SAAO,EAAP;AACA","sourcesContent":["/**\n * Internal dependencies\n */\nimport { NEW_TAB_REL } from './constants';\n\n/**\n * Evaluates a CSS aspect-ratio property value as a number.\n *\n * Degenerate or invalid ratios behave as 'auto'. And 'auto' ratios return NaN.\n *\n * @see https://drafts.csswg.org/css-sizing-4/#aspect-ratio\n *\n * @param {string} value CSS aspect-ratio property value.\n * @return {number} Numerical aspect ratio or NaN if invalid.\n */\nexport function evalAspectRatio( value ) {\n\tconst [ width, height = 1 ] = value.split( '/' ).map( Number );\n\tconst aspectRatio = width / height;\n\treturn aspectRatio === Infinity || aspectRatio === 0 ? NaN : aspectRatio;\n}\n\nexport function removeNewTabRel( currentRel ) {\n\tlet newRel = currentRel;\n\n\tif ( currentRel !== undefined && newRel ) {\n\t\tNEW_TAB_REL.forEach( ( relVal ) => {\n\t\t\tconst regExp = new RegExp( '\\\\b' + relVal + '\\\\b', 'gi' );\n\t\t\tnewRel = newRel.replace( regExp, '' );\n\t\t} );\n\n\t\t// Only trim if NEW_TAB_REL values was replaced.\n\t\tif ( newRel !== currentRel ) {\n\t\t\tnewRel = newRel.trim();\n\t\t}\n\n\t\tif ( ! newRel ) {\n\t\t\tnewRel = undefined;\n\t\t}\n\t}\n\n\treturn newRel;\n}\n\n/**\n * Helper to get the link target settings to be stored.\n *\n * @param {boolean} value The new link target value.\n * @param {Object} attributes Block attributes.\n * @param {Object} attributes.rel Image block's rel attribute.\n *\n * @return {Object} Updated link target settings.\n */\nexport function getUpdatedLinkTargetSettings( value, { rel } ) {\n\tconst linkTarget = value ? '_blank' : undefined;\n\n\tlet updatedRel;\n\tif ( ! linkTarget && ! rel ) {\n\t\tupdatedRel = undefined;\n\t} else {\n\t\tupdatedRel = removeNewTabRel( rel );\n\t}\n\n\treturn {\n\t\tlinkTarget,\n\t\trel: updatedRel,\n\t};\n}\n\n/**\n * Determines new Image block attributes size selection.\n *\n * @param {Object} image Media file object for gallery image.\n * @param {string} size Selected size slug to apply.\n */\nexport function getImageSizeAttributes( image, size ) {\n\tconst url = image?.media_details?.sizes?.[ size ]?.source_url;\n\n\tif ( url ) {\n\t\treturn { url, width: undefined, height: undefined, sizeSlug: size };\n\t}\n\n\treturn {};\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
|
-
import { store } from '
|
|
4
|
+
import { store } from '@wordpress/interactivity';
|
|
5
5
|
const focusableSelectors = ['a[href]', 'area[href]', 'input:not([disabled]):not([type="hidden"]):not([aria-hidden])', 'select:not([disabled]):not([aria-hidden])', 'textarea:not([disabled]):not([aria-hidden])', 'button:not([disabled]):not([aria-hidden])', 'iframe', 'object', 'embed', '[contenteditable]', '[tabindex]:not([tabindex^="-"])'];
|
|
6
6
|
store({
|
|
7
7
|
actions: {
|
|
@@ -11,30 +11,36 @@ store({
|
|
|
11
11
|
context,
|
|
12
12
|
event
|
|
13
13
|
}) => {
|
|
14
|
+
// We can't initialize the lightbox until the reference
|
|
15
|
+
// image is loaded, otherwise the UX is broken.
|
|
16
|
+
if (!context.core.image.imageLoaded) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
|
|
14
20
|
context.core.image.initialized = true;
|
|
15
21
|
context.core.image.lastFocusedElement = window.document.activeElement;
|
|
16
|
-
context.core.image.scrollDelta = 0;
|
|
22
|
+
context.core.image.scrollDelta = 0;
|
|
23
|
+
context.core.image.lightboxEnabled = true;
|
|
24
|
+
|
|
25
|
+
if (context.core.image.lightboxAnimation === 'zoom') {
|
|
26
|
+
setZoomStyles(event.target.nextElementSibling, context, event);
|
|
27
|
+
} // Hide overflow only when the animation is in progress,
|
|
28
|
+
// otherwise the removal of the scrollbars will draw attention
|
|
29
|
+
// to itself and look like an error
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
document.documentElement.classList.add('has-lightbox-open'); // Since the img is hidden and its src not loaded until
|
|
17
33
|
// the lightbox is opened, let's create an img element on the fly
|
|
18
34
|
// so we can get the dimensions we need to calculate the styles
|
|
19
35
|
|
|
36
|
+
context.core.image.preloadInitialized = true;
|
|
20
37
|
const imgDom = document.createElement('img');
|
|
21
38
|
|
|
22
39
|
imgDom.onload = function () {
|
|
23
|
-
|
|
24
|
-
// is loaded to prevent flashing of unstyled content
|
|
25
|
-
context.core.image.lightboxEnabled = true;
|
|
26
|
-
|
|
27
|
-
if (context.core.image.lightboxAnimation === 'zoom') {
|
|
28
|
-
setZoomStyles(imgDom, context, event);
|
|
29
|
-
} // Hide overflow only when the animation is in progress,
|
|
30
|
-
// otherwise the removal of the scrollbars will draw attention
|
|
31
|
-
// to itself and look like an error
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
document.documentElement.classList.add('has-lightbox-open');
|
|
40
|
+
context.core.image.activateLargeImage = true;
|
|
35
41
|
};
|
|
36
42
|
|
|
37
|
-
imgDom.setAttribute('src', context.core.image.
|
|
43
|
+
imgDom.setAttribute('src', context.core.image.imageUploadedSrc);
|
|
38
44
|
},
|
|
39
45
|
hideLightbox: async ({
|
|
40
46
|
context,
|
|
@@ -95,6 +101,15 @@ store({
|
|
|
95
101
|
});
|
|
96
102
|
}
|
|
97
103
|
}
|
|
104
|
+
},
|
|
105
|
+
preloadLightboxImage: ({
|
|
106
|
+
context
|
|
107
|
+
}) => {
|
|
108
|
+
if (!context.core.image.preloadInitialized) {
|
|
109
|
+
context.core.image.preloadInitialized = true;
|
|
110
|
+
const imgDom = document.createElement('img');
|
|
111
|
+
imgDom.setAttribute('src', context.core.image.imageUploadedSrc);
|
|
112
|
+
}
|
|
98
113
|
}
|
|
99
114
|
}
|
|
100
115
|
}
|
|
@@ -107,10 +122,15 @@ store({
|
|
|
107
122
|
}) => {
|
|
108
123
|
return context.core.image.lightboxEnabled ? 'dialog' : '';
|
|
109
124
|
},
|
|
110
|
-
|
|
125
|
+
responsiveImgSrc: ({
|
|
111
126
|
context
|
|
112
127
|
}) => {
|
|
113
|
-
return context.core.image.
|
|
128
|
+
return context.core.image.activateLargeImage && context.core.image.hideAnimationEnabled ? '' : context.core.image.imageCurrentSrc;
|
|
129
|
+
},
|
|
130
|
+
enlargedImgSrc: ({
|
|
131
|
+
context
|
|
132
|
+
}) => {
|
|
133
|
+
return context.core.image.initialized ? context.core.image.imageUploadedSrc : '';
|
|
114
134
|
}
|
|
115
135
|
}
|
|
116
136
|
}
|
|
@@ -118,6 +138,20 @@ store({
|
|
|
118
138
|
effects: {
|
|
119
139
|
core: {
|
|
120
140
|
image: {
|
|
141
|
+
setCurrentSrc: ({
|
|
142
|
+
context,
|
|
143
|
+
ref
|
|
144
|
+
}) => {
|
|
145
|
+
if (ref.complete) {
|
|
146
|
+
context.core.image.imageLoaded = true;
|
|
147
|
+
context.core.image.imageCurrentSrc = ref.currentSrc;
|
|
148
|
+
} else {
|
|
149
|
+
ref.addEventListener('load', function () {
|
|
150
|
+
context.core.image.imageLoaded = true;
|
|
151
|
+
context.core.image.imageCurrentSrc = this.currentSrc;
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
},
|
|
121
155
|
initLightbox: async ({
|
|
122
156
|
context,
|
|
123
157
|
ref
|
|
@@ -138,37 +172,45 @@ store({
|
|
|
138
172
|
});
|
|
139
173
|
|
|
140
174
|
function setZoomStyles(imgDom, context, event) {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
//
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
//
|
|
149
|
-
//
|
|
150
|
-
|
|
175
|
+
// Typically, we use the image's full-sized dimensions. If those
|
|
176
|
+
// dimensions have not been set (i.e. an external image with only one size),
|
|
177
|
+
// the image's dimensions in the lightbox are the same
|
|
178
|
+
// as those of the image in the content.
|
|
179
|
+
let targetWidth = context.core.image.targetWidth !== 'none' ? context.core.image.targetWidth : event.target.nextElementSibling.naturalWidth;
|
|
180
|
+
let targetHeight = context.core.image.targetHeight !== 'none' ? context.core.image.targetHeight : event.target.nextElementSibling.naturalHeight; // Since the lightbox image has `position:absolute`, it
|
|
181
|
+
// ignores its parent's padding, so we need to set padding here
|
|
182
|
+
// to calculate dimensions and positioning.
|
|
183
|
+
// As per the design, let's constrain the height with fixed padding
|
|
184
|
+
|
|
185
|
+
const containerOuterHeight = window.innerHeight;
|
|
186
|
+
const verticalPadding = 40;
|
|
187
|
+
const containerInnerHeight = containerOuterHeight - verticalPadding * 2; // Let's set a variable horizontal padding based on the container width
|
|
188
|
+
|
|
189
|
+
const containerOuterWidth = window.innerWidth;
|
|
151
190
|
let horizontalPadding = 0;
|
|
152
191
|
|
|
153
|
-
if (
|
|
192
|
+
if (containerOuterWidth > 480) {
|
|
154
193
|
horizontalPadding = 40;
|
|
155
|
-
} else if (
|
|
194
|
+
} else if (containerOuterWidth > 1920) {
|
|
156
195
|
horizontalPadding = 80;
|
|
157
196
|
}
|
|
158
197
|
|
|
159
|
-
const
|
|
198
|
+
const containerInnerWidth = containerOuterWidth - horizontalPadding * 2; // Check difference between the image and figure dimensions
|
|
160
199
|
|
|
161
|
-
const widthOverflow = Math.abs(Math.min(
|
|
162
|
-
const heightOverflow = Math.abs(Math.min(
|
|
163
|
-
//
|
|
200
|
+
const widthOverflow = Math.abs(Math.min(containerInnerWidth - targetWidth, 0));
|
|
201
|
+
const heightOverflow = Math.abs(Math.min(containerInnerHeight - targetHeight, 0)); // If the image is larger than the container, let's resize
|
|
202
|
+
// it along the greater axis relative to the container
|
|
164
203
|
|
|
165
204
|
if (widthOverflow > 0 || heightOverflow > 0) {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
205
|
+
const containerInnerAspectRatio = containerInnerWidth / containerInnerHeight;
|
|
206
|
+
const imageAspectRatio = targetWidth / targetHeight;
|
|
207
|
+
|
|
208
|
+
if (imageAspectRatio > containerInnerAspectRatio) {
|
|
209
|
+
targetWidth = containerInnerWidth;
|
|
210
|
+
targetHeight = targetWidth * imgDom.naturalHeight / imgDom.naturalWidth;
|
|
169
211
|
} else {
|
|
170
|
-
targetHeight =
|
|
171
|
-
targetWidth = imgDom.naturalWidth
|
|
212
|
+
targetHeight = containerInnerHeight;
|
|
213
|
+
targetWidth = targetHeight * imgDom.naturalWidth / imgDom.naturalHeight;
|
|
172
214
|
}
|
|
173
215
|
} // The reference img element lies adjacent to the event target button in the DOM
|
|
174
216
|
|
|
@@ -182,18 +224,18 @@ function setZoomStyles(imgDom, context, event) {
|
|
|
182
224
|
|
|
183
225
|
let targetLeft = 0;
|
|
184
226
|
|
|
185
|
-
if (targetWidth >=
|
|
227
|
+
if (targetWidth >= containerInnerWidth) {
|
|
186
228
|
targetLeft = horizontalPadding;
|
|
187
229
|
} else {
|
|
188
|
-
targetLeft = (
|
|
230
|
+
targetLeft = (containerOuterWidth - targetWidth) / 2;
|
|
189
231
|
}
|
|
190
232
|
|
|
191
233
|
let targetTop = 0;
|
|
192
234
|
|
|
193
|
-
if (targetHeight >=
|
|
235
|
+
if (targetHeight >= containerInnerHeight) {
|
|
194
236
|
targetTop = verticalPadding;
|
|
195
237
|
} else {
|
|
196
|
-
targetTop = (
|
|
238
|
+
targetTop = (containerOuterHeight - targetHeight) / 2;
|
|
197
239
|
}
|
|
198
240
|
|
|
199
241
|
const root = document.documentElement;
|
|
@@ -206,4 +248,4 @@ function setZoomStyles(imgDom, context, event) {
|
|
|
206
248
|
root.style.setProperty('--lightbox-target-left-position', targetLeft + 'px');
|
|
207
249
|
root.style.setProperty('--lightbox-target-top-position', targetTop + 'px');
|
|
208
250
|
}
|
|
209
|
-
//# sourceMappingURL=interactivity.js.map
|
|
251
|
+
//# sourceMappingURL=view-interactivity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-library/src/image/view-interactivity.js"],"names":["store","focusableSelectors","actions","core","image","showLightbox","context","event","imageLoaded","initialized","lastFocusedElement","window","document","activeElement","scrollDelta","lightboxEnabled","lightboxAnimation","setZoomStyles","target","nextElementSibling","documentElement","classList","add","preloadInitialized","imgDom","createElement","onload","activateLargeImage","setAttribute","imageUploadedSrc","hideLightbox","hideAnimationEnabled","deltaY","type","Math","abs","scrollY","scrollTop","pageYOffset","scrollLeft","pageXOffset","onscroll","scrollTo","setTimeout","remove","focus","handleKeydown","key","keyCode","shiftKey","firstFocusableElement","preventDefault","lastFocusableElement","preloadLightboxImage","selectors","roleAttribute","responsiveImgSrc","imageCurrentSrc","enlargedImgSrc","effects","setCurrentSrc","ref","complete","currentSrc","addEventListener","initLightbox","figureRef","querySelector","imageRef","focusableElements","querySelectorAll","length","targetWidth","naturalWidth","targetHeight","naturalHeight","containerOuterHeight","innerHeight","verticalPadding","containerInnerHeight","containerOuterWidth","innerWidth","horizontalPadding","containerInnerWidth","widthOverflow","min","heightOverflow","containerInnerAspectRatio","imageAspectRatio","x","originLeft","y","originTop","getBoundingClientRect","scaleWidth","offsetWidth","scaleHeight","offsetHeight","targetLeft","targetTop","root","style","setProperty"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { store } from '@wordpress/interactivity';\n\nconst focusableSelectors = [\n\t'a[href]',\n\t'area[href]',\n\t'input:not([disabled]):not([type=\"hidden\"]):not([aria-hidden])',\n\t'select:not([disabled]):not([aria-hidden])',\n\t'textarea:not([disabled]):not([aria-hidden])',\n\t'button:not([disabled]):not([aria-hidden])',\n\t'iframe',\n\t'object',\n\t'embed',\n\t'[contenteditable]',\n\t'[tabindex]:not([tabindex^=\"-\"])',\n];\n\nstore( {\n\tactions: {\n\t\tcore: {\n\t\t\timage: {\n\t\t\t\tshowLightbox: ( { context, event } ) => {\n\t\t\t\t\t// We can't initialize the lightbox until the reference\n\t\t\t\t\t// image is loaded, otherwise the UX is broken.\n\t\t\t\t\tif ( ! context.core.image.imageLoaded ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcontext.core.image.initialized = true;\n\t\t\t\t\tcontext.core.image.lastFocusedElement =\n\t\t\t\t\t\twindow.document.activeElement;\n\t\t\t\t\tcontext.core.image.scrollDelta = 0;\n\n\t\t\t\t\tcontext.core.image.lightboxEnabled = true;\n\t\t\t\t\tif ( context.core.image.lightboxAnimation === 'zoom' ) {\n\t\t\t\t\t\tsetZoomStyles(\n\t\t\t\t\t\t\tevent.target.nextElementSibling,\n\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\tevent\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Hide overflow only when the animation is in progress,\n\t\t\t\t\t// otherwise the removal of the scrollbars will draw attention\n\t\t\t\t\t// to itself and look like an error\n\t\t\t\t\tdocument.documentElement.classList.add(\n\t\t\t\t\t\t'has-lightbox-open'\n\t\t\t\t\t);\n\n\t\t\t\t\t// Since the img is hidden and its src not loaded until\n\t\t\t\t\t// the lightbox is opened, let's create an img element on the fly\n\t\t\t\t\t// so we can get the dimensions we need to calculate the styles\n\t\t\t\t\tcontext.core.image.preloadInitialized = true;\n\t\t\t\t\tconst imgDom = document.createElement( 'img' );\n\t\t\t\t\timgDom.onload = function () {\n\t\t\t\t\t\tcontext.core.image.activateLargeImage = true;\n\t\t\t\t\t};\n\t\t\t\t\timgDom.setAttribute(\n\t\t\t\t\t\t'src',\n\t\t\t\t\t\tcontext.core.image.imageUploadedSrc\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\thideLightbox: async ( { context, event } ) => {\n\t\t\t\t\tcontext.core.image.hideAnimationEnabled = true;\n\t\t\t\t\tif ( context.core.image.lightboxEnabled ) {\n\t\t\t\t\t\t// If scrolling, wait a moment before closing the lightbox.\n\t\t\t\t\t\tif ( context.core.image.lightboxAnimation === 'fade' ) {\n\t\t\t\t\t\t\tcontext.core.image.scrollDelta += event.deltaY;\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tevent.type === 'mousewheel' &&\n\t\t\t\t\t\t\t\tMath.abs(\n\t\t\t\t\t\t\t\t\twindow.scrollY -\n\t\t\t\t\t\t\t\t\t\tcontext.core.image.scrollDelta\n\t\t\t\t\t\t\t\t) < 10\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tcontext.core.image.lightboxAnimation === 'zoom'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// Disable scroll until the zoom animation ends.\n\t\t\t\t\t\t\t// Get the current page scroll position\n\t\t\t\t\t\t\tconst scrollTop =\n\t\t\t\t\t\t\t\twindow.pageYOffset ||\n\t\t\t\t\t\t\t\tdocument.documentElement.scrollTop;\n\t\t\t\t\t\t\tconst scrollLeft =\n\t\t\t\t\t\t\t\twindow.pageXOffset ||\n\t\t\t\t\t\t\t\tdocument.documentElement.scrollLeft;\n\t\t\t\t\t\t\t// if any scroll is attempted, set this to the previous value.\n\t\t\t\t\t\t\twindow.onscroll = function () {\n\t\t\t\t\t\t\t\twindow.scrollTo( scrollLeft, scrollTop );\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t// Enable scrolling after the animation finishes\n\t\t\t\t\t\t\tsetTimeout( function () {\n\t\t\t\t\t\t\t\twindow.onscroll = function () {};\n\t\t\t\t\t\t\t}, 400 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdocument.documentElement.classList.remove(\n\t\t\t\t\t\t\t'has-lightbox-open'\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tcontext.core.image.lightboxEnabled = false;\n\t\t\t\t\t\tcontext.core.image.lastFocusedElement.focus();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\thandleKeydown: ( { context, actions, event } ) => {\n\t\t\t\t\tif ( context.core.image.lightboxEnabled ) {\n\t\t\t\t\t\tif ( event.key === 'Tab' || event.keyCode === 9 ) {\n\t\t\t\t\t\t\t// If shift + tab it change the direction\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tevent.shiftKey &&\n\t\t\t\t\t\t\t\twindow.document.activeElement ===\n\t\t\t\t\t\t\t\t\tcontext.core.image.firstFocusableElement\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tcontext.core.image.lastFocusableElement.focus();\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t! event.shiftKey &&\n\t\t\t\t\t\t\t\twindow.document.activeElement ===\n\t\t\t\t\t\t\t\t\tcontext.core.image.lastFocusableElement\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tcontext.core.image.firstFocusableElement.focus();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( event.key === 'Escape' || event.keyCode === 27 ) {\n\t\t\t\t\t\t\tactions.core.image.hideLightbox( {\n\t\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\t\tevent,\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\tpreloadLightboxImage: ( { context } ) => {\n\t\t\t\t\tif ( ! context.core.image.preloadInitialized ) {\n\t\t\t\t\t\tcontext.core.image.preloadInitialized = true;\n\t\t\t\t\t\tconst imgDom = document.createElement( 'img' );\n\t\t\t\t\t\timgDom.setAttribute(\n\t\t\t\t\t\t\t'src',\n\t\t\t\t\t\t\tcontext.core.image.imageUploadedSrc\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},\n\t},\n\tselectors: {\n\t\tcore: {\n\t\t\timage: {\n\t\t\t\troleAttribute: ( { context } ) => {\n\t\t\t\t\treturn context.core.image.lightboxEnabled ? 'dialog' : '';\n\t\t\t\t},\n\t\t\t\tresponsiveImgSrc: ( { context } ) => {\n\t\t\t\t\treturn context.core.image.activateLargeImage &&\n\t\t\t\t\t\tcontext.core.image.hideAnimationEnabled\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: context.core.image.imageCurrentSrc;\n\t\t\t\t},\n\t\t\t\tenlargedImgSrc: ( { context } ) => {\n\t\t\t\t\treturn context.core.image.initialized\n\t\t\t\t\t\t? context.core.image.imageUploadedSrc\n\t\t\t\t\t\t: '';\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\teffects: {\n\t\tcore: {\n\t\t\timage: {\n\t\t\t\tsetCurrentSrc: ( { context, ref } ) => {\n\t\t\t\t\tif ( ref.complete ) {\n\t\t\t\t\t\tcontext.core.image.imageLoaded = true;\n\t\t\t\t\t\tcontext.core.image.imageCurrentSrc = ref.currentSrc;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tref.addEventListener( 'load', function () {\n\t\t\t\t\t\t\tcontext.core.image.imageLoaded = true;\n\t\t\t\t\t\t\tcontext.core.image.imageCurrentSrc =\n\t\t\t\t\t\t\t\tthis.currentSrc;\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tinitLightbox: async ( { context, ref } ) => {\n\t\t\t\t\tcontext.core.image.figureRef =\n\t\t\t\t\t\tref.querySelector( 'figure' );\n\t\t\t\t\tcontext.core.image.imageRef = ref.querySelector( 'img' );\n\t\t\t\t\tif ( context.core.image.lightboxEnabled ) {\n\t\t\t\t\t\tconst focusableElements =\n\t\t\t\t\t\t\tref.querySelectorAll( focusableSelectors );\n\t\t\t\t\t\tcontext.core.image.firstFocusableElement =\n\t\t\t\t\t\t\tfocusableElements[ 0 ];\n\t\t\t\t\t\tcontext.core.image.lastFocusableElement =\n\t\t\t\t\t\t\tfocusableElements[ focusableElements.length - 1 ];\n\n\t\t\t\t\t\tref.querySelector( '.close-button' ).focus();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} );\n\nfunction setZoomStyles( imgDom, context, event ) {\n\t// Typically, we use the image's full-sized dimensions. If those\n\t// dimensions have not been set (i.e. an external image with only one size),\n\t// the image's dimensions in the lightbox are the same\n\t// as those of the image in the content.\n\tlet targetWidth =\n\t\tcontext.core.image.targetWidth !== 'none'\n\t\t\t? context.core.image.targetWidth\n\t\t\t: event.target.nextElementSibling.naturalWidth;\n\tlet targetHeight =\n\t\tcontext.core.image.targetHeight !== 'none'\n\t\t\t? context.core.image.targetHeight\n\t\t\t: event.target.nextElementSibling.naturalHeight;\n\n\t// Since the lightbox image has `position:absolute`, it\n\t// ignores its parent's padding, so we need to set padding here\n\t// to calculate dimensions and positioning.\n\n\t// As per the design, let's constrain the height with fixed padding\n\tconst containerOuterHeight = window.innerHeight;\n\tconst verticalPadding = 40;\n\tconst containerInnerHeight = containerOuterHeight - verticalPadding * 2;\n\n\t// Let's set a variable horizontal padding based on the container width\n\tconst containerOuterWidth = window.innerWidth;\n\tlet horizontalPadding = 0;\n\tif ( containerOuterWidth > 480 ) {\n\t\thorizontalPadding = 40;\n\t} else if ( containerOuterWidth > 1920 ) {\n\t\thorizontalPadding = 80;\n\t}\n\tconst containerInnerWidth = containerOuterWidth - horizontalPadding * 2;\n\n\t// Check difference between the image and figure dimensions\n\tconst widthOverflow = Math.abs(\n\t\tMath.min( containerInnerWidth - targetWidth, 0 )\n\t);\n\tconst heightOverflow = Math.abs(\n\t\tMath.min( containerInnerHeight - targetHeight, 0 )\n\t);\n\n\t// If the image is larger than the container, let's resize\n\t// it along the greater axis relative to the container\n\tif ( widthOverflow > 0 || heightOverflow > 0 ) {\n\t\tconst containerInnerAspectRatio =\n\t\t\tcontainerInnerWidth / containerInnerHeight;\n\t\tconst imageAspectRatio = targetWidth / targetHeight;\n\n\t\tif ( imageAspectRatio > containerInnerAspectRatio ) {\n\t\t\ttargetWidth = containerInnerWidth;\n\t\t\ttargetHeight =\n\t\t\t\t( targetWidth * imgDom.naturalHeight ) / imgDom.naturalWidth;\n\t\t} else {\n\t\t\ttargetHeight = containerInnerHeight;\n\t\t\ttargetWidth =\n\t\t\t\t( targetHeight * imgDom.naturalWidth ) / imgDom.naturalHeight;\n\t\t}\n\t}\n\n\t// The reference img element lies adjacent to the event target button in the DOM\n\tconst { x: originLeft, y: originTop } =\n\t\tevent.target.nextElementSibling.getBoundingClientRect();\n\tconst scaleWidth =\n\t\tevent.target.nextElementSibling.offsetWidth / targetWidth;\n\tconst scaleHeight =\n\t\tevent.target.nextElementSibling.offsetHeight / targetHeight;\n\n\t// Get values used to center the image\n\tlet targetLeft = 0;\n\tif ( targetWidth >= containerInnerWidth ) {\n\t\ttargetLeft = horizontalPadding;\n\t} else {\n\t\ttargetLeft = ( containerOuterWidth - targetWidth ) / 2;\n\t}\n\tlet targetTop = 0;\n\tif ( targetHeight >= containerInnerHeight ) {\n\t\ttargetTop = verticalPadding;\n\t} else {\n\t\ttargetTop = ( containerOuterHeight - targetHeight ) / 2;\n\t}\n\n\tconst root = document.documentElement;\n\troot.style.setProperty( '--lightbox-scale-width', scaleWidth );\n\troot.style.setProperty( '--lightbox-scale-height', scaleHeight );\n\troot.style.setProperty( '--lightbox-image-max-width', targetWidth + 'px' );\n\troot.style.setProperty(\n\t\t'--lightbox-image-max-height',\n\t\ttargetHeight + 'px'\n\t);\n\troot.style.setProperty(\n\t\t'--lightbox-initial-left-position',\n\t\toriginLeft + 'px'\n\t);\n\troot.style.setProperty(\n\t\t'--lightbox-initial-top-position',\n\t\toriginTop + 'px'\n\t);\n\troot.style.setProperty(\n\t\t'--lightbox-target-left-position',\n\t\ttargetLeft + 'px'\n\t);\n\troot.style.setProperty(\n\t\t'--lightbox-target-top-position',\n\t\ttargetTop + 'px'\n\t);\n}\n"]}
|