@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
|
@@ -159,9 +159,10 @@ const metadata = {
|
|
|
159
159
|
}
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
|
-
}
|
|
162
|
+
},
|
|
163
|
+
interactivity: true
|
|
163
164
|
},
|
|
164
|
-
viewScript:
|
|
165
|
+
viewScript: "file:./view.min.js",
|
|
165
166
|
editorStyle: "wp-block-navigation-editor",
|
|
166
167
|
style: "wp-block-navigation"
|
|
167
168
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-library/src/navigation/index.js"],"names":["name","metadata","settings","icon","example","attributes","overlayMenu","innerBlocks","label","url","edit","save","deprecated","init"],"mappings":";;;;;;;;;AAGA;;AACA;;AAKA;;AAEA;;AACA;;AACA;;AAbA;AACA;AACA;;AAIA;AACA;AACA
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-library/src/navigation/index.js"],"names":["name","metadata","settings","icon","example","attributes","overlayMenu","innerBlocks","label","url","edit","save","deprecated","init"],"mappings":";;;;;;;;;AAGA;;AACA;;AAKA;;AAEA;;AACA;;AACA;;AAbA;AACA;AACA;;AAIA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAM;AAAEA,EAAAA;AAAF,IAAWC,QAAjB;;AAIO,MAAMC,QAAQ,GAAG;AACvBC,EAAAA,IAAI,EAAJA,iBADuB;AAEvBC,EAAAA,OAAO,EAAE;AACRC,IAAAA,UAAU,EAAE;AACXC,MAAAA,WAAW,EAAE;AADF,KADJ;AAIRC,IAAAA,WAAW,EAAE,CACZ;AACCP,MAAAA,IAAI,EAAE,sBADP;AAECK,MAAAA,UAAU,EAAE;AACX;AACAG,QAAAA,KAAK,EAAE,cAAI,MAAJ,CAFI;AAGXC,QAAAA,GAAG,EAAE;AAHM;AAFb,KADY,EASZ;AACCT,MAAAA,IAAI,EAAE,sBADP;AAECK,MAAAA,UAAU,EAAE;AACX;AACAG,QAAAA,KAAK,EAAE,cAAI,OAAJ,CAFI;AAGXC,QAAAA,GAAG,EAAE;AAHM;AAFb,KATY,EAiBZ;AACCT,MAAAA,IAAI,EAAE,sBADP;AAECK,MAAAA,UAAU,EAAE;AACX;AACAG,QAAAA,KAAK,EAAE,cAAI,SAAJ,CAFI;AAGXC,QAAAA,GAAG,EAAE;AAHM;AAFb,KAjBY;AAJL,GAFc;AAiCvBC,EAAAA,IAAI,EAAJA,aAjCuB;AAkCvBC,EAAAA,IAAI,EAAJA,aAlCuB;AAmCvBC,EAAAA,UAAU,EAAVA;AAnCuB,CAAjB;;;AAsCA,MAAMC,IAAI,GAAG,MAAM,wBAAW;AAAEb,EAAAA,IAAF;AAAQC,EAAAA,QAAR;AAAkBC,EAAAA;AAAlB,CAAX,CAAnB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { navigation as icon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport initBlock from '../utils/init-block';\nimport metadata from './block.json';\nimport edit from './edit';\nimport save from './save';\nimport deprecated from './deprecated';\n\nconst { name } = metadata;\n\nexport { metadata, name };\n\nexport const settings = {\n\ticon,\n\texample: {\n\t\tattributes: {\n\t\t\toverlayMenu: 'never',\n\t\t},\n\t\tinnerBlocks: [\n\t\t\t{\n\t\t\t\tname: 'core/navigation-link',\n\t\t\t\tattributes: {\n\t\t\t\t\t// translators: 'Home' as in a website's home page.\n\t\t\t\t\tlabel: __( 'Home' ),\n\t\t\t\t\turl: 'https://make.wordpress.org/',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'core/navigation-link',\n\t\t\t\tattributes: {\n\t\t\t\t\t// translators: 'About' as in a website's about page.\n\t\t\t\t\tlabel: __( 'About' ),\n\t\t\t\t\turl: 'https://make.wordpress.org/',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'core/navigation-link',\n\t\t\t\tattributes: {\n\t\t\t\t\t// translators: 'Contact' as in a website's contact page.\n\t\t\t\t\tlabel: __( 'Contact' ),\n\t\t\t\t\turl: 'https://make.wordpress.org/',\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t},\n\tedit,\n\tsave,\n\tdeprecated,\n};\n\nexport const init = () => initBlock( { name, metadata, settings } );\n"]}
|
package/build/navigation/view.js
CHANGED
|
@@ -1,61 +1,185 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}); // Open submenu.
|
|
3
|
+
var _interactivity = require("@wordpress/interactivity");
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* WordPress dependencies
|
|
7
|
+
*/
|
|
8
|
+
const focusableSelectors = ['a[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])', '[contenteditable]', '[tabindex]:not([tabindex^="-"])'];
|
|
9
|
+
|
|
10
|
+
const openMenu = (store, menuOpenedOn) => {
|
|
11
|
+
const {
|
|
12
|
+
context,
|
|
13
|
+
ref,
|
|
14
|
+
selectors
|
|
15
|
+
} = store;
|
|
16
|
+
selectors.core.navigation.menuOpenedBy(store)[menuOpenedOn] = true;
|
|
17
|
+
context.core.navigation.previousFocus = ref;
|
|
18
|
+
|
|
19
|
+
if (context.core.navigation.type === 'overlay') {
|
|
20
|
+
// Add a `has-modal-open` class to the <html> root.
|
|
21
|
+
document.documentElement.classList.add('has-modal-open');
|
|
22
|
+
}
|
|
23
|
+
};
|
|
25
24
|
|
|
26
|
-
|
|
25
|
+
const closeMenu = (store, menuClosedOn) => {
|
|
26
|
+
const {
|
|
27
|
+
context,
|
|
28
|
+
selectors
|
|
29
|
+
} = store;
|
|
30
|
+
selectors.core.navigation.menuOpenedBy(store)[menuClosedOn] = false; // Check if the menu is still open or not.
|
|
31
|
+
|
|
32
|
+
if (!selectors.core.navigation.isMenuOpen(store)) {
|
|
33
|
+
if (context.core.navigation.modal?.contains(window.document.activeElement)) {
|
|
34
|
+
context.core.navigation.previousFocus.focus();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
context.core.navigation.modal = null;
|
|
38
|
+
context.core.navigation.previousFocus = null;
|
|
39
|
+
|
|
40
|
+
if (context.core.navigation.type === 'overlay') {
|
|
41
|
+
document.documentElement.classList.remove('has-modal-open');
|
|
42
|
+
}
|
|
27
43
|
}
|
|
28
|
-
}
|
|
29
|
-
// scripts could be loaded before the body.
|
|
44
|
+
};
|
|
30
45
|
|
|
46
|
+
(0, _interactivity.store)({
|
|
47
|
+
effects: {
|
|
48
|
+
core: {
|
|
49
|
+
navigation: {
|
|
50
|
+
initMenu: store => {
|
|
51
|
+
const {
|
|
52
|
+
context,
|
|
53
|
+
selectors,
|
|
54
|
+
ref
|
|
55
|
+
} = store;
|
|
31
56
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
57
|
+
if (selectors.core.navigation.isMenuOpen(store)) {
|
|
58
|
+
const focusableElements = ref.querySelectorAll(focusableSelectors);
|
|
59
|
+
context.core.navigation.modal = ref;
|
|
60
|
+
context.core.navigation.firstFocusableElement = focusableElements[0];
|
|
61
|
+
context.core.navigation.lastFocusableElement = focusableElements[focusableElements.length - 1];
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
focusFirstElement: store => {
|
|
65
|
+
const {
|
|
66
|
+
selectors,
|
|
67
|
+
ref
|
|
68
|
+
} = store;
|
|
37
69
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
closeSubmenus(block);
|
|
70
|
+
if (selectors.core.navigation.isMenuOpen(store)) {
|
|
71
|
+
ref.querySelector('.wp-block-navigation-item > *:first-child').focus();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
43
74
|
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
selectors: {
|
|
78
|
+
core: {
|
|
79
|
+
navigation: {
|
|
80
|
+
roleAttribute: store => {
|
|
81
|
+
const {
|
|
82
|
+
context,
|
|
83
|
+
selectors
|
|
84
|
+
} = store;
|
|
85
|
+
return context.core.navigation.type === 'overlay' && selectors.core.navigation.isMenuOpen(store) ? 'dialog' : '';
|
|
86
|
+
},
|
|
87
|
+
isMenuOpen: ({
|
|
88
|
+
context
|
|
89
|
+
}) => // The menu is opened if either `click`, `hover` or `focus` is true.
|
|
90
|
+
Object.values(context.core.navigation[context.core.navigation.type === 'overlay' ? 'overlayOpenedBy' : 'submenuOpenedBy']).filter(Boolean).length > 0,
|
|
91
|
+
menuOpenedBy: ({
|
|
92
|
+
context
|
|
93
|
+
}) => context.core.navigation[context.core.navigation.type === 'overlay' ? 'overlayOpenedBy' : 'submenuOpenedBy']
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
actions: {
|
|
98
|
+
core: {
|
|
99
|
+
navigation: {
|
|
100
|
+
openMenuOnHover(store) {
|
|
101
|
+
const {
|
|
102
|
+
navigation
|
|
103
|
+
} = store.context.core;
|
|
104
|
+
if (navigation.type === 'submenu' && // Only open on hover if the overlay is closed.
|
|
105
|
+
Object.values(navigation.overlayOpenedBy || {}).filter(Boolean).length === 0) openMenu(store, 'hover');
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
closeMenuOnHover(store) {
|
|
109
|
+
closeMenu(store, 'hover');
|
|
110
|
+
},
|
|
111
|
+
|
|
112
|
+
openMenuOnClick(store) {
|
|
113
|
+
openMenu(store, 'click');
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
closeMenuOnClick(store) {
|
|
117
|
+
closeMenu(store, 'click');
|
|
118
|
+
closeMenu(store, 'focus');
|
|
119
|
+
},
|
|
120
|
+
|
|
121
|
+
openMenuOnFocus(store) {
|
|
122
|
+
openMenu(store, 'focus');
|
|
123
|
+
},
|
|
124
|
+
|
|
125
|
+
toggleMenuOnClick: store => {
|
|
126
|
+
const {
|
|
127
|
+
selectors
|
|
128
|
+
} = store;
|
|
129
|
+
const menuOpenedBy = selectors.core.navigation.menuOpenedBy(store);
|
|
130
|
+
|
|
131
|
+
if (menuOpenedBy.click || menuOpenedBy.focus) {
|
|
132
|
+
closeMenu(store, 'click');
|
|
133
|
+
closeMenu(store, 'focus');
|
|
134
|
+
} else {
|
|
135
|
+
openMenu(store, 'click');
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
handleMenuKeydown: store => {
|
|
139
|
+
const {
|
|
140
|
+
context,
|
|
141
|
+
selectors,
|
|
142
|
+
event
|
|
143
|
+
} = store;
|
|
144
|
+
|
|
145
|
+
if (selectors.core.navigation.menuOpenedBy(store).click) {
|
|
146
|
+
// If Escape close the menu.
|
|
147
|
+
if (event?.key === 'Escape') {
|
|
148
|
+
closeMenu(store, 'click');
|
|
149
|
+
closeMenu(store, 'focus');
|
|
150
|
+
return;
|
|
151
|
+
} // Trap focus if it is an overlay (main menu).
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
if (context.core.navigation.type === 'overlay' && event.key === 'Tab') {
|
|
155
|
+
// If shift + tab it change the direction.
|
|
156
|
+
if (event.shiftKey && window.document.activeElement === context.core.navigation.firstFocusableElement) {
|
|
157
|
+
event.preventDefault();
|
|
158
|
+
context.core.navigation.lastFocusableElement.focus();
|
|
159
|
+
} else if (!event.shiftKey && window.document.activeElement === context.core.navigation.lastFocusableElement) {
|
|
160
|
+
event.preventDefault();
|
|
161
|
+
context.core.navigation.firstFocusableElement.focus();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
handleMenuFocusout: store => {
|
|
167
|
+
const {
|
|
168
|
+
context,
|
|
169
|
+
event
|
|
170
|
+
} = store; // If focus is outside modal, and in the document, close menu
|
|
171
|
+
// event.target === The element losing focus
|
|
172
|
+
// event.relatedTarget === The element receiving focus (if any)
|
|
173
|
+
// When focusout is outsite the document,
|
|
174
|
+
// `window.document.activeElement` doesn't change.
|
|
175
|
+
|
|
176
|
+
if (!context.core.navigation.modal?.contains(event.relatedTarget) && event.target !== window.document.activeElement) {
|
|
177
|
+
closeMenu(store, 'click');
|
|
178
|
+
closeMenu(store, 'focus');
|
|
179
|
+
}
|
|
180
|
+
}
|
|
57
181
|
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
60
184
|
});
|
|
61
185
|
//# sourceMappingURL=view.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-library/src/navigation/view.js"],"names":["closeSubmenus","element","querySelectorAll","forEach","toggle","setAttribute","toggleSubmenuOnClick","event","buttonToggle","target","closest","isSubmenuOpen","getAttribute","parentElement","navigationParent","child","window","addEventListener","submenuButtons","document","button","navigationBlocks","block","contains","submenuBlocks","key","querySelector","focus"],"mappings":";;AAAA;AACA,SAASA,aAAT,CAAwBC,OAAxB,EAAkC;AACjCA,EAAAA,OAAO,CACLC,gBADF,CACoB,wBADpB,EAEEC,OAFF,CAEW,UAAWC,MAAX,EAAoB;AAC7BA,IAAAA,MAAM,CAACC,YAAP,CAAqB,eAArB,EAAsC,OAAtC;AACA,GAJF;AAKA;;AAED,SAASC,oBAAT,CAA+BC,KAA/B,EAAuC;AACtC,QAAMC,YAAY,GAAGD,KAAK,CAACE,MAAN,CAAaC,OAAb,CAAsB,iBAAtB,CAArB;AACA,QAAMC,aAAa,GAAGH,YAAY,CAACI,YAAb,CAA2B,eAA3B,CAAtB;;AAEA,MAAKD,aAAa,KAAK,MAAvB,EAAgC;AAC/BX,IAAAA,aAAa,CAAEQ,YAAY,CAACE,OAAb,CAAsB,2BAAtB,CAAF,CAAb;AACA,GAFD,MAEO;AACN;AACA,UAAMG,aAAa,GAAGL,YAAY,CAACE,OAAb,CACrB,2BADqB,CAAtB;AAGA,UAAMI,gBAAgB,GAAGN,YAAY,CAACE,OAAb,CACxB,+FADwB,CAAzB;AAGAI,IAAAA,gBAAgB,CACdZ,gBADF,CACoB,2BADpB,EAEEC,OAFF,CAEW,UAAWY,KAAX,EAAmB;AAC5B,UAAKA,KAAK,KAAKF,aAAf,EAA+B;AAC9Bb,QAAAA,aAAa,CAAEe,KAAF,CAAb;AACA;AACD,KANF,EARM,CAeN;;AACAP,IAAAA,YAAY,CAACH,YAAb,CAA2B,eAA3B,EAA4C,MAA5C;AACA;AACD,C,CAED;AACA;;;AACAW,MAAM,CAACC,gBAAP,CAAyB,MAAzB,EAAiC,MAAM;AACtC,QAAMC,cAAc,GAAGC,QAAQ,CAACjB,gBAAT,CACtB,sCADsB,CAAvB;AAIAgB,EAAAA,cAAc,CAACf,OAAf,CAAwB,UAAWiB,MAAX,EAAoB;AAC3CA,IAAAA,MAAM,CAACH,gBAAP,CAAyB,OAAzB,EAAkCX,oBAAlC;AACA,GAFD,EALsC,CAStC;;AACAa,EAAAA,QAAQ,CAACF,gBAAT,CAA2B,OAA3B,EAAoC,UAAWV,KAAX,EAAmB;AACtD,UAAMc,gBAAgB,GAAGF,QAAQ,CAACjB,gBAAT,CACxB,sBADwB,CAAzB;AAGAmB,IAAAA,gBAAgB,CAAClB,OAAjB,CAA0B,UAAWmB,KAAX,EAAmB;AAC5C,UAAK,CAAEA,KAAK,CAACC,QAAN,CAAgBhB,KAAK,CAACE,MAAtB,CAAP,EAAwC;AACvCT,QAAAA,aAAa,CAAEsB,KAAF,CAAb;AACA;AACD,KAJD;AAKA,GATD,EAVsC,CAoBtC;;AACAH,EAAAA,QAAQ,CAACF,gBAAT,CAA2B,OAA3B,EAAoC,UAAWV,KAAX,EAAmB;AACtD,UAAMiB,aAAa,GAAGL,QAAQ,CAACjB,gBAAT,CACrB,qCADqB,CAAtB;AAGAsB,IAAAA,aAAa,CAACrB,OAAd,CAAuB,UAAWmB,KAAX,EAAmB;AACzC,UAAK,CAAEA,KAAK,CAACC,QAAN,CAAgBhB,KAAK,CAACE,MAAtB,CAAP,EAAwC;AACvCT,QAAAA,aAAa,CAAEsB,KAAF,CAAb;AACA,OAFD,MAEO,IAAKf,KAAK,CAACkB,GAAN,KAAc,QAAnB,EAA8B;AACpC,cAAMrB,MAAM,GAAGkB,KAAK,CAACI,aAAN,CAAqB,wBAArB,CAAf;AACA1B,QAAAA,aAAa,CAAEsB,KAAF,CAAb,CAFoC,CAGpC;;AACAlB,QAAAA,MAAM,EAAEuB,KAAR;AACA;AACD,KATD;AAUA,GAdD;AAeA,CApCD","sourcesContent":["// Open on click functionality.\nfunction closeSubmenus( element ) {\n\telement\n\t\t.querySelectorAll( '[aria-expanded=\"true\"]' )\n\t\t.forEach( function ( toggle ) {\n\t\t\ttoggle.setAttribute( 'aria-expanded', 'false' );\n\t\t} );\n}\n\nfunction toggleSubmenuOnClick( event ) {\n\tconst buttonToggle = event.target.closest( '[aria-expanded]' );\n\tconst isSubmenuOpen = buttonToggle.getAttribute( 'aria-expanded' );\n\n\tif ( isSubmenuOpen === 'true' ) {\n\t\tcloseSubmenus( buttonToggle.closest( '.wp-block-navigation-item' ) );\n\t} else {\n\t\t// Close all sibling submenus.\n\t\tconst parentElement = buttonToggle.closest(\n\t\t\t'.wp-block-navigation-item'\n\t\t);\n\t\tconst navigationParent = buttonToggle.closest(\n\t\t\t'.wp-block-navigation__submenu-container, .wp-block-navigation__container, .wp-block-page-list'\n\t\t);\n\t\tnavigationParent\n\t\t\t.querySelectorAll( '.wp-block-navigation-item' )\n\t\t\t.forEach( function ( child ) {\n\t\t\t\tif ( child !== parentElement ) {\n\t\t\t\t\tcloseSubmenus( child );\n\t\t\t\t}\n\t\t\t} );\n\t\t// Open submenu.\n\t\tbuttonToggle.setAttribute( 'aria-expanded', 'true' );\n\t}\n}\n\n// Necessary for some themes such as TT1 Blocks, where\n// scripts could be loaded before the body.\nwindow.addEventListener( 'load', () => {\n\tconst submenuButtons = document.querySelectorAll(\n\t\t'.wp-block-navigation-submenu__toggle'\n\t);\n\n\tsubmenuButtons.forEach( function ( button ) {\n\t\tbutton.addEventListener( 'click', toggleSubmenuOnClick );\n\t} );\n\n\t// Close on click outside.\n\tdocument.addEventListener( 'click', function ( event ) {\n\t\tconst navigationBlocks = document.querySelectorAll(\n\t\t\t'.wp-block-navigation'\n\t\t);\n\t\tnavigationBlocks.forEach( function ( block ) {\n\t\t\tif ( ! block.contains( event.target ) ) {\n\t\t\t\tcloseSubmenus( block );\n\t\t\t}\n\t\t} );\n\t} );\n\t// Close on focus outside or escape key.\n\tdocument.addEventListener( 'keyup', function ( event ) {\n\t\tconst submenuBlocks = document.querySelectorAll(\n\t\t\t'.wp-block-navigation-item.has-child'\n\t\t);\n\t\tsubmenuBlocks.forEach( function ( block ) {\n\t\t\tif ( ! block.contains( event.target ) ) {\n\t\t\t\tcloseSubmenus( block );\n\t\t\t} else if ( event.key === 'Escape' ) {\n\t\t\t\tconst toggle = block.querySelector( '[aria-expanded=\"true\"]' );\n\t\t\t\tcloseSubmenus( block );\n\t\t\t\t// Focus the submenu trigger so focus does not get trapped in the closed submenu.\n\t\t\t\ttoggle?.focus();\n\t\t\t}\n\t\t} );\n\t} );\n} );\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-library/src/navigation/view.js"],"names":["focusableSelectors","openMenu","store","menuOpenedOn","context","ref","selectors","core","navigation","menuOpenedBy","previousFocus","type","document","documentElement","classList","add","closeMenu","menuClosedOn","isMenuOpen","modal","contains","window","activeElement","focus","remove","effects","initMenu","focusableElements","querySelectorAll","firstFocusableElement","lastFocusableElement","length","focusFirstElement","querySelector","roleAttribute","Object","values","filter","Boolean","actions","openMenuOnHover","overlayOpenedBy","closeMenuOnHover","openMenuOnClick","closeMenuOnClick","openMenuOnFocus","toggleMenuOnClick","click","handleMenuKeydown","event","key","shiftKey","preventDefault","handleMenuFocusout","relatedTarget","target"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { store as wpStore } from '@wordpress/interactivity';\n\nconst focusableSelectors = [\n\t'a[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'[contenteditable]',\n\t'[tabindex]:not([tabindex^=\"-\"])',\n];\n\nconst openMenu = ( store, menuOpenedOn ) => {\n\tconst { context, ref, selectors } = store;\n\tselectors.core.navigation.menuOpenedBy( store )[ menuOpenedOn ] = true;\n\tcontext.core.navigation.previousFocus = ref;\n\tif ( context.core.navigation.type === 'overlay' ) {\n\t\t// Add a `has-modal-open` class to the <html> root.\n\t\tdocument.documentElement.classList.add( 'has-modal-open' );\n\t}\n};\n\nconst closeMenu = ( store, menuClosedOn ) => {\n\tconst { context, selectors } = store;\n\tselectors.core.navigation.menuOpenedBy( store )[ menuClosedOn ] = false;\n\t// Check if the menu is still open or not.\n\tif ( ! selectors.core.navigation.isMenuOpen( store ) ) {\n\t\tif (\n\t\t\tcontext.core.navigation.modal?.contains(\n\t\t\t\twindow.document.activeElement\n\t\t\t)\n\t\t) {\n\t\t\tcontext.core.navigation.previousFocus.focus();\n\t\t}\n\t\tcontext.core.navigation.modal = null;\n\t\tcontext.core.navigation.previousFocus = null;\n\t\tif ( context.core.navigation.type === 'overlay' ) {\n\t\t\tdocument.documentElement.classList.remove( 'has-modal-open' );\n\t\t}\n\t}\n};\n\nwpStore( {\n\teffects: {\n\t\tcore: {\n\t\t\tnavigation: {\n\t\t\t\tinitMenu: ( store ) => {\n\t\t\t\t\tconst { context, selectors, ref } = store;\n\t\t\t\t\tif ( selectors.core.navigation.isMenuOpen( store ) ) {\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.navigation.modal = ref;\n\t\t\t\t\t\tcontext.core.navigation.firstFocusableElement =\n\t\t\t\t\t\t\tfocusableElements[ 0 ];\n\t\t\t\t\t\tcontext.core.navigation.lastFocusableElement =\n\t\t\t\t\t\t\tfocusableElements[ focusableElements.length - 1 ];\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tfocusFirstElement: ( store ) => {\n\t\t\t\t\tconst { selectors, ref } = store;\n\t\t\t\t\tif ( selectors.core.navigation.isMenuOpen( store ) ) {\n\t\t\t\t\t\tref.querySelector(\n\t\t\t\t\t\t\t'.wp-block-navigation-item > *:first-child'\n\t\t\t\t\t\t).focus();\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\tnavigation: {\n\t\t\t\troleAttribute: ( store ) => {\n\t\t\t\t\tconst { context, selectors } = store;\n\t\t\t\t\treturn context.core.navigation.type === 'overlay' &&\n\t\t\t\t\t\tselectors.core.navigation.isMenuOpen( store )\n\t\t\t\t\t\t? 'dialog'\n\t\t\t\t\t\t: '';\n\t\t\t\t},\n\t\t\t\tisMenuOpen: ( { context } ) =>\n\t\t\t\t\t// The menu is opened if either `click`, `hover` or `focus` is true.\n\t\t\t\t\tObject.values(\n\t\t\t\t\t\tcontext.core.navigation[\n\t\t\t\t\t\t\tcontext.core.navigation.type === 'overlay'\n\t\t\t\t\t\t\t\t? 'overlayOpenedBy'\n\t\t\t\t\t\t\t\t: 'submenuOpenedBy'\n\t\t\t\t\t\t]\n\t\t\t\t\t).filter( Boolean ).length > 0,\n\t\t\t\tmenuOpenedBy: ( { context } ) =>\n\t\t\t\t\tcontext.core.navigation[\n\t\t\t\t\t\tcontext.core.navigation.type === 'overlay'\n\t\t\t\t\t\t\t? 'overlayOpenedBy'\n\t\t\t\t\t\t\t: 'submenuOpenedBy'\n\t\t\t\t\t],\n\t\t\t},\n\t\t},\n\t},\n\tactions: {\n\t\tcore: {\n\t\t\tnavigation: {\n\t\t\t\topenMenuOnHover( store ) {\n\t\t\t\t\tconst { navigation } = store.context.core;\n\t\t\t\t\tif (\n\t\t\t\t\t\tnavigation.type === 'submenu' &&\n\t\t\t\t\t\t// Only open on hover if the overlay is closed.\n\t\t\t\t\t\tObject.values(\n\t\t\t\t\t\t\tnavigation.overlayOpenedBy || {}\n\t\t\t\t\t\t).filter( Boolean ).length === 0\n\t\t\t\t\t)\n\t\t\t\t\t\topenMenu( store, 'hover' );\n\t\t\t\t},\n\t\t\t\tcloseMenuOnHover( store ) {\n\t\t\t\t\tcloseMenu( store, 'hover' );\n\t\t\t\t},\n\t\t\t\topenMenuOnClick( store ) {\n\t\t\t\t\topenMenu( store, 'click' );\n\t\t\t\t},\n\t\t\t\tcloseMenuOnClick( store ) {\n\t\t\t\t\tcloseMenu( store, 'click' );\n\t\t\t\t\tcloseMenu( store, 'focus' );\n\t\t\t\t},\n\t\t\t\topenMenuOnFocus( store ) {\n\t\t\t\t\topenMenu( store, 'focus' );\n\t\t\t\t},\n\t\t\t\ttoggleMenuOnClick: ( store ) => {\n\t\t\t\t\tconst { selectors } = store;\n\t\t\t\t\tconst menuOpenedBy =\n\t\t\t\t\t\tselectors.core.navigation.menuOpenedBy( store );\n\t\t\t\t\tif ( menuOpenedBy.click || menuOpenedBy.focus ) {\n\t\t\t\t\t\tcloseMenu( store, 'click' );\n\t\t\t\t\t\tcloseMenu( store, 'focus' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\topenMenu( store, 'click' );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\thandleMenuKeydown: ( store ) => {\n\t\t\t\t\tconst { context, selectors, event } = store;\n\t\t\t\t\tif (\n\t\t\t\t\t\tselectors.core.navigation.menuOpenedBy( store ).click\n\t\t\t\t\t) {\n\t\t\t\t\t\t// If Escape close the menu.\n\t\t\t\t\t\tif ( event?.key === 'Escape' ) {\n\t\t\t\t\t\t\tcloseMenu( store, 'click' );\n\t\t\t\t\t\t\tcloseMenu( store, 'focus' );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Trap focus if it is an overlay (main menu).\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tcontext.core.navigation.type === 'overlay' &&\n\t\t\t\t\t\t\tevent.key === 'Tab'\n\t\t\t\t\t\t) {\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.navigation\n\t\t\t\t\t\t\t\t\t\t.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.navigation.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.navigation.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.navigation.firstFocusableElement.focus();\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\thandleMenuFocusout: ( store ) => {\n\t\t\t\t\tconst { context, event } = store;\n\t\t\t\t\t// If focus is outside modal, and in the document, close menu\n\t\t\t\t\t// event.target === The element losing focus\n\t\t\t\t\t// event.relatedTarget === The element receiving focus (if any)\n\t\t\t\t\t// When focusout is outsite the document,\n\t\t\t\t\t// `window.document.activeElement` doesn't change.\n\t\t\t\t\tif (\n\t\t\t\t\t\t! context.core.navigation.modal?.contains(\n\t\t\t\t\t\t\tevent.relatedTarget\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\tevent.target !== window.document.activeElement\n\t\t\t\t\t) {\n\t\t\t\t\t\tcloseMenu( store, 'click' );\n\t\t\t\t\t\tcloseMenu( store, 'focus' );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} );\n"]}
|
|
@@ -263,8 +263,6 @@ function NavigationLinkEdit({
|
|
|
263
263
|
const isDraggingWithin = useIsDraggingWithin(listItemRef);
|
|
264
264
|
const itemLabelPlaceholder = (0, _i18n.__)('Add label…');
|
|
265
265
|
const ref = (0, _element.useRef)();
|
|
266
|
-
const pagesPermissions = (0, _coreData.useResourcePermissions)('pages');
|
|
267
|
-
const postsPermissions = (0, _coreData.useResourcePermissions)('posts');
|
|
268
266
|
const {
|
|
269
267
|
innerBlocks,
|
|
270
268
|
isAtMaxNesting,
|
|
@@ -381,14 +379,6 @@ function NavigationLinkEdit({
|
|
|
381
379
|
setIsLinkOpen(false);
|
|
382
380
|
}
|
|
383
381
|
|
|
384
|
-
let userCanCreate = false;
|
|
385
|
-
|
|
386
|
-
if (!type || type === 'page') {
|
|
387
|
-
userCanCreate = pagesPermissions.canCreate;
|
|
388
|
-
} else if (type === 'post') {
|
|
389
|
-
userCanCreate = postsPermissions.canCreate;
|
|
390
|
-
}
|
|
391
|
-
|
|
392
382
|
const {
|
|
393
383
|
textColor,
|
|
394
384
|
customTextColor,
|
|
@@ -563,7 +553,6 @@ function NavigationLinkEdit({
|
|
|
563
553
|
link: attributes,
|
|
564
554
|
onClose: () => setIsLinkOpen(false),
|
|
565
555
|
anchor: popoverAnchor,
|
|
566
|
-
hasCreateSuggestion: userCanCreate,
|
|
567
556
|
onRemove: removeLink,
|
|
568
557
|
onChange: updatedValue => {
|
|
569
558
|
(0, _updateAttributes.updateAttributes)(updatedValue, setAttributes, attributes);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-library/src/navigation-link/edit.js"],"names":["useIsDraggingWithin","elementRef","isDraggingWithin","setIsDraggingWithin","ownerDocument","current","handleDragStart","event","handleDragEnter","handleDragEnd","contains","target","addEventListener","removeEventListener","useIsInvalidLink","kind","type","id","isPostType","hasId","Number","isInteger","postStatus","select","getEntityRecord","coreStore","status","isInvalid","isDraft","getMissingText","missingText","NavigationLinkEdit","attributes","isSelected","setAttributes","insertBlocksAfter","mergeBlocks","onReplace","context","clientId","label","url","description","rel","title","maxNestingLevel","replaceBlock","__unstableMarkNextChangeAsNotPersistent","blockEditorStore","isLinkOpen","setIsLinkOpen","popoverAnchor","setPopoverAnchor","listItemRef","itemLabelPlaceholder","ref","pagesPermissions","postsPermissions","innerBlocks","isAtMaxNesting","isTopLevelLink","isParentOfSelectedBlock","hasChildren","getBlocks","getBlockCount","getBlockName","getBlockRootClientId","hasSelectedInnerBlock","getBlockParentsByBlockName","name","length","transformToSubmenu","newSubmenu","test","selectLabelText","focus","defaultView","selection","getSelection","range","createRange","selectNodeContents","removeAllRanges","addRange","removeLink","undefined","opensInNewTab","userCanCreate","canCreate","textColor","customTextColor","backgroundColor","customBackgroundColor","onKeyDown","isKeyboardEvent","primary","keyCode","ENTER","blockProps","className","style","color","ALLOWED_BLOCKS","DEFAULT_BLOCK","innerBlocksProps","allowedBlocks","__experimentalDefaultBlock","__experimentalDirectInsert","renderAppender","onClick","classes","placeholderText","tooltipText","linkIcon","displayShortcut","addSubmenu","labelValue","urlValue","descriptionValue","titleValue","relValue","trim","updatedValue"],"mappings":";;;;;;;;;AA8BA;;AA3BA;;AAKA;;AACA;;AACA;;AAQA;;AACA;;AACA;;AASA;;AAEA;;AAIA;;AACA;;AACA;;AAIA;;AAMA;;AACA;;AACA;;AAjDA;AACA;AACA;;AAGA;AACA;AACA;;AAoCA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,mBAAmB,GAAKC,UAAF,IAAkB;AAC7C,QAAM,CAAEC,gBAAF,EAAoBC,mBAApB,IAA4C,uBAAU,KAAV,CAAlD;AAEA,0BAAW,MAAM;AAChB,UAAM;AAAEC,MAAAA;AAAF,QAAoBH,UAAU,CAACI,OAArC;;AAEA,aAASC,eAAT,CAA0BC,KAA1B,EAAkC;AACjC;AACAC,MAAAA,eAAe,CAAED,KAAF,CAAf;AACA,KANe,CAQhB;;;AACA,aAASE,aAAT,GAAyB;AACxBN,MAAAA,mBAAmB,CAAE,KAAF,CAAnB;AACA;;AAED,aAASK,eAAT,CAA0BD,KAA1B,EAAkC;AACjC;AACA,UAAKN,UAAU,CAACI,OAAX,CAAmBK,QAAnB,CAA6BH,KAAK,CAACI,MAAnC,CAAL,EAAmD;AAClDR,QAAAA,mBAAmB,CAAE,IAAF,CAAnB;AACA,OAFD,MAEO;AACNA,QAAAA,mBAAmB,CAAE,KAAF,CAAnB;AACA;AACD,KApBe,CAsBhB;AACA;AACA;;;AACAC,IAAAA,aAAa,CAACQ,gBAAd,CAAgC,WAAhC,EAA6CN,eAA7C;AACAF,IAAAA,aAAa,CAACQ,gBAAd,CAAgC,SAAhC,EAA2CH,aAA3C;AACAL,IAAAA,aAAa,CAACQ,gBAAd,CAAgC,WAAhC,EAA6CJ,eAA7C;AAEA,WAAO,MAAM;AACZJ,MAAAA,aAAa,CAACS,mBAAd,CAAmC,WAAnC,EAAgDP,eAAhD;AACAF,MAAAA,aAAa,CAACS,mBAAd,CAAmC,SAAnC,EAA8CJ,aAA9C;AACAL,MAAAA,aAAa,CAACS,mBAAd,CAAmC,WAAnC,EAAgDL,eAAhD;AACA,KAJD;AAKA,GAlCD,EAkCG,EAlCH;AAoCA,SAAON,gBAAP;AACA,CAxCD;;AA0CA,MAAMY,gBAAgB,GAAG,CAAEC,IAAF,EAAQC,IAAR,EAAcC,EAAd,KAAsB;AAC9C,QAAMC,UAAU,GACfH,IAAI,KAAK,WAAT,IAAwBC,IAAI,KAAK,MAAjC,IAA2CA,IAAI,KAAK,MADrD;AAEA,QAAMG,KAAK,GAAGC,MAAM,CAACC,SAAP,CAAkBJ,EAAlB,CAAd;AACA,QAAMK,UAAU,GAAG,qBAChBC,MAAF,IAAc;AACb,QAAK,CAAEL,UAAP,EAAoB;AACnB,aAAO,IAAP;AACA;;AACD,UAAM;AAAEM,MAAAA;AAAF,QAAsBD,MAAM,CAAEE,eAAF,CAAlC;AACA,WAAOD,eAAe,CAAE,UAAF,EAAcR,IAAd,EAAoBC,EAApB,CAAf,EAAyCS,MAAhD;AACA,GAPiB,EAQlB,CAAER,UAAF,EAAcF,IAAd,EAAoBC,EAApB,CARkB,CAAnB,CAJ8C,CAe9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,QAAMU,SAAS,GACdT,UAAU,IAAIC,KAAd,IAAuBG,UAAvB,IAAqC,YAAYA,UADlD;AAEA,QAAMM,OAAO,GAAG,YAAYN,UAA5B;AAEA,SAAO,CAAEK,SAAF,EAAaC,OAAb,CAAP;AACA,CA5BD;;AA8BA,SAASC,cAAT,CAAyBb,IAAzB,EAAgC;AAC/B,MAAIc,WAAW,GAAG,EAAlB;;AAEA,UAASd,IAAT;AACC,SAAK,MAAL;AACC;AACAc,MAAAA,WAAW,GAAG,cAAI,aAAJ,CAAd;AACA;;AACD,SAAK,MAAL;AACC;AACAA,MAAAA,WAAW,GAAG,cAAI,aAAJ,CAAd;AACA;;AACD,SAAK,UAAL;AACC;AACAA,MAAAA,WAAW,GAAG,cAAI,iBAAJ,CAAd;AACA;;AACD,SAAK,KAAL;AACC;AACAA,MAAAA,WAAW,GAAG,cAAI,YAAJ,CAAd;AACA;;AACD;AACC;AACAA,MAAAA,WAAW,GAAG,cAAI,UAAJ,CAAd;AAnBF;;AAsBA,SAAOA,WAAP;AACA;;AAEc,SAASC,kBAAT,CAA6B;AAC3CC,EAAAA,UAD2C;AAE3CC,EAAAA,UAF2C;AAG3CC,EAAAA,aAH2C;AAI3CC,EAAAA,iBAJ2C;AAK3CC,EAAAA,WAL2C;AAM3CC,EAAAA,SAN2C;AAO3CC,EAAAA,OAP2C;AAQ3CC,EAAAA;AAR2C,CAA7B,EASX;AACH,QAAM;AAAEtB,IAAAA,EAAF;AAAMuB,IAAAA,KAAN;AAAaxB,IAAAA,IAAb;AAAmByB,IAAAA,GAAnB;AAAwBC,IAAAA,WAAxB;AAAqCC,IAAAA,GAArC;AAA0CC,IAAAA,KAA1C;AAAiD7B,IAAAA;AAAjD,MAA0DiB,UAAhE;AAEA,QAAM,CAAEL,SAAF,EAAaC,OAAb,IAAyBd,gBAAgB,CAAEC,IAAF,EAAQC,IAAR,EAAcC,EAAd,CAA/C;AACA,QAAM;AAAE4B,IAAAA;AAAF,MAAsBP,OAA5B;AAEA,QAAM;AAAEQ,IAAAA,YAAF;AAAgBC,IAAAA;AAAhB,MACL,uBAAaC,kBAAb,CADD;AAEA,QAAM,CAAEC,UAAF,EAAcC,aAAd,IAAgC,uBAAU,KAAV,CAAtC,CARG,CASH;AACA;;AACA,QAAM,CAAEC,aAAF,EAAiBC,gBAAjB,IAAsC,uBAAU,IAAV,CAA5C;AACA,QAAMC,WAAW,GAAG,qBAAQ,IAAR,CAApB;AACA,QAAMnD,gBAAgB,GAAGF,mBAAmB,CAAEqD,WAAF,CAA5C;AACA,QAAMC,oBAAoB,GAAG,cAAI,YAAJ,CAA7B;AACA,QAAMC,GAAG,GAAG,sBAAZ;AAEA,QAAMC,gBAAgB,GAAG,sCAAwB,OAAxB,CAAzB;AACA,QAAMC,gBAAgB,GAAG,sCAAwB,OAAxB,CAAzB;AAEA,QAAM;AACLC,IAAAA,WADK;AAELC,IAAAA,cAFK;AAGLC,IAAAA,cAHK;AAILC,IAAAA,uBAJK;AAKLC,IAAAA;AALK,MAMF,qBACDvC,MAAF,IAAc;AACb,UAAM;AACLwC,MAAAA,SADK;AAELC,MAAAA,aAFK;AAGLC,MAAAA,YAHK;AAILC,MAAAA,oBAJK;AAKLC,MAAAA,qBALK;AAMLC,MAAAA;AANK,QAOF7C,MAAM,CAAEyB,kBAAF,CAPV;AASA,WAAO;AACNU,MAAAA,WAAW,EAAEK,SAAS,CAAExB,QAAF,CADhB;AAENoB,MAAAA,cAAc,EACbS,0BAA0B,CAAE7B,QAAF,EAAY,CACrC8B,IADqC,EAErC,yBAFqC,CAAZ,CAA1B,CAGIC,MAHJ,IAGczB,eANT;AAONe,MAAAA,cAAc,EACbK,YAAY,CAAEC,oBAAoB,CAAE3B,QAAF,CAAtB,CAAZ,KACA,iBATK;AAUNsB,MAAAA,uBAAuB,EAAEM,qBAAqB,CAC7C5B,QAD6C,EAE7C,IAF6C,CAVxC;AAcNuB,MAAAA,WAAW,EAAE,CAAC,CAAEE,aAAa,CAAEzB,QAAF;AAdvB,KAAP;AAgBA,GA3BE,EA4BH,CAAEA,QAAF,CA5BG,CANJ;AAqCA;AACD;AACA;;AACC,WAASgC,kBAAT,GAA8B;AAC7B,UAAMC,UAAU,GAAG,yBAClB,yBADkB,EAElBxC,UAFkB,EAGlB0B,WAAW,CAACY,MAAZ,GAAqB,CAArB,GACGZ,WADH,GAEG,CAAE,yBAAa,sBAAb,CAAF,CALe,CAAnB;AAOAZ,IAAAA,YAAY,CAAEP,QAAF,EAAYiC,UAAZ,CAAZ;AACA;;AAED,0BAAW,MAAM;AAChB;AACA;AACA;AACA;AACA,QAAK,CAAE/B,GAAP,EAAa;AACZS,MAAAA,aAAa,CAAE,IAAF,CAAb;AACA;AACD,GARD,EAQG,CAAET,GAAF,CARH;AAUA,0BAAW,MAAM;AAChB;AACA,QAAKqB,WAAL,EAAmB;AAClB;AACA;AACAf,MAAAA,uCAAuC;;AACvCwB,MAAAA,kBAAkB;AAClB;AACD,GARD,EAQG,CAAET,WAAF,CARH;AAUA;AACD;AACA;AACA;;AACC,0BAAW,MAAM;AAChB,QAAK,CAAE7B,UAAP,EAAoB;AACnBiB,MAAAA,aAAa,CAAE,KAAF,CAAb;AACA;AACD,GAJD,EAIG,CAAEjB,UAAF,CAJH,EA/FG,CAqGH;;AACA,0BAAW,MAAM;AAChB,QAAKgB,UAAU,IAAIR,GAAnB,EAAyB;AACxB;AACA,UACC,gBAAO,sBAAaD,KAAb,CAAP,KACA,cAAciC,IAAd,CAAoBjC,KAApB,CAFD,EAGE;AACD;AACAkC,QAAAA,eAAe;AACf,OAND,MAMO;AACN;AACA,6CAA4BnB,GAAG,CAAClD,OAAhC,EAAyC,IAAzC;AACA;AACD;AACD,GAdD,EAcG,CAAEoC,GAAF,CAdH;AAgBA;AACD;AACA;;AACC,WAASiC,eAAT,GAA2B;AAC1BnB,IAAAA,GAAG,CAAClD,OAAJ,CAAYsE,KAAZ;AACA,UAAM;AAAEvE,MAAAA;AAAF,QAAoBmD,GAAG,CAAClD,OAA9B;AACA,UAAM;AAAEuE,MAAAA;AAAF,QAAkBxE,aAAxB;AACA,UAAMyE,SAAS,GAAGD,WAAW,CAACE,YAAZ,EAAlB;AACA,UAAMC,KAAK,GAAG3E,aAAa,CAAC4E,WAAd,EAAd,CAL0B,CAM1B;;AACAD,IAAAA,KAAK,CAACE,kBAAN,CAA0B1B,GAAG,CAAClD,OAA9B;AACAwE,IAAAA,SAAS,CAACK,eAAV;AACAL,IAAAA,SAAS,CAACM,QAAV,CAAoBJ,KAApB;AACA;AAED;AACD;AACA;;;AACC,WAASK,UAAT,GAAsB;AACrB;AACA;AACA;AACA;AACA;AACAlD,IAAAA,aAAa,CAAE;AACdO,MAAAA,GAAG,EAAE4C,SADS;AAEd7C,MAAAA,KAAK,EAAE6C,SAFO;AAGdpE,MAAAA,EAAE,EAAEoE,SAHU;AAIdtE,MAAAA,IAAI,EAAEsE,SAJQ;AAKdrE,MAAAA,IAAI,EAAEqE,SALQ;AAMdC,MAAAA,aAAa,EAAE;AAND,KAAF,CAAb,CANqB,CAerB;;AACApC,IAAAA,aAAa,CAAE,KAAF,CAAb;AACA;;AAED,MAAIqC,aAAa,GAAG,KAApB;;AACA,MAAK,CAAEvE,IAAF,IAAUA,IAAI,KAAK,MAAxB,EAAiC;AAChCuE,IAAAA,aAAa,GAAG/B,gBAAgB,CAACgC,SAAjC;AACA,GAFD,MAEO,IAAKxE,IAAI,KAAK,MAAd,EAAuB;AAC7BuE,IAAAA,aAAa,GAAG9B,gBAAgB,CAAC+B,SAAjC;AACA;;AAED,QAAM;AACLC,IAAAA,SADK;AAELC,IAAAA,eAFK;AAGLC,IAAAA,eAHK;AAILC,IAAAA;AAJK,MAKF,sBAAWtD,OAAX,EAAoB,CAAEsB,cAAtB,CALJ;;AAOA,WAASiC,SAAT,CAAoBtF,KAApB,EAA4B;AAC3B,QACCuF,0BAAgBC,OAAhB,CAAyBxF,KAAzB,EAAgC,GAAhC,KACE,CAAE,CAAEkC,GAAF,IAASb,OAAT,IAAoBD,SAAtB,KAAqCpB,KAAK,CAACyF,OAAN,KAAkBC,eAF1D,EAGE;AACD/C,MAAAA,aAAa,CAAE,IAAF,CAAb;AACA;AACD;;AAED,QAAMgD,UAAU,GAAG,gCAAe;AACjC3C,IAAAA,GAAG,EAAE,2BAAc,CAAEH,gBAAF,EAAoBC,WAApB,CAAd,CAD4B;AAEjC8C,IAAAA,SAAS,EAAE,yBAAY,0BAAZ,EAAwC;AAClD,oBAAclE,UAAU,IAAI4B,uBADsB;AAElD,4BAAsB3D,gBAF4B;AAGlD,kBAAY,CAAC,CAAEuC,GAHmC;AAIlD,mBAAaqB,WAJqC;AAKlD,wBAAkB,CAAC,CAAE2B,SAAH,IAAgB,CAAC,CAAEC,eALa;AAMlD,OAAE,oCAAmB,OAAnB,EAA4BD,SAA5B,CAAF,GAA6C,CAAC,CAAEA,SANE;AAOlD,wBAAkB,CAAC,CAAEE,eAAH,IAAsBC,qBAPU;AAQlD,OAAE,oCAAmB,kBAAnB,EAAuCD,eAAvC,CAAF,GACC,CAAC,CAAEA;AAT8C,KAAxC,CAFsB;AAajCS,IAAAA,KAAK,EAAE;AACNC,MAAAA,KAAK,EAAE,CAAEZ,SAAF,IAAeC,eADhB;AAENC,MAAAA,eAAe,EAAE,CAAEA,eAAF,IAAqBC;AAFhC,KAb0B;AAiBjCC,IAAAA;AAjBiC,GAAf,CAAnB;AAoBA,QAAMS,cAAc,GAAG,CACtB,sBADsB,EAEtB,yBAFsB,EAGtB,gBAHsB,CAAvB;AAKA,QAAMC,aAAa,GAAG;AACrBlC,IAAAA,IAAI,EAAE;AADe,GAAtB;AAIA,QAAMmC,gBAAgB,GAAG,sCACxB,EACC,GAAGN,UADJ;AAECC,IAAAA,SAAS,EAAE,gBAFZ,CAE8B;;AAF9B,GADwB,EAKxB;AACCM,IAAAA,aAAa,EAAEH,cADhB;AAECI,IAAAA,0BAA0B,EAAEH,aAF7B;AAGCI,IAAAA,0BAA0B,EAAE,IAH7B;AAICC,IAAAA,cAAc,EAAE;AAJjB,GALwB,CAAzB;;AAaA,MAAK,CAAEnE,GAAF,IAASd,SAAT,IAAsBC,OAA3B,EAAqC;AACpCsE,IAAAA,UAAU,CAACW,OAAX,GAAqB,MAAM3D,aAAa,CAAE,IAAF,CAAxC;AACA;;AAED,QAAM4D,OAAO,GAAG,yBAAY,mCAAZ,EAAiD;AAChE,6CAAyC,CAAErE,GAAF,IAASd,SAAT,IAAsBC;AADC,GAAjD,CAAhB;AAIA,QAAME,WAAW,GAAGD,cAAc,CAAEb,IAAF,CAAlC;AACA;;AACA,QAAM+F,eAAe,GAAI,IACxBpF,SAAS,GAAG,cAAI,SAAJ,CAAH,GAAqB,cAAI,OAAJ,CAC9B,GAFD;AAGA,QAAMqF,WAAW,GAChBrF,SAAS,IAAIC,OAAb,GACG,cAAI,2CAAJ,CADH,GAEG,cAAI,6BAAJ,CAHJ;AAKA,SACC,qDACC,4BAAC,0BAAD,QACC,4BAAC,wBAAD,QACC,4BAAC,yBAAD;AACC,IAAA,IAAI,EAAC,MADN;AAEC,IAAA,IAAI,EAAGqF,WAFR;AAGC,IAAA,KAAK,EAAG,cAAI,MAAJ,CAHT;AAIC,IAAA,QAAQ,EAAGC,0BAAgBnB,OAAhB,CAAyB,GAAzB,CAJZ;AAKC,IAAA,OAAO,EAAG,MAAM7C,aAAa,CAAE,IAAF;AAL9B,IADD,EAQG,CAAES,cAAF,IACD,4BAAC,yBAAD;AACC,IAAA,IAAI,EAAC,SADN;AAEC,IAAA,IAAI,EAAGwD,iBAFR;AAGC,IAAA,KAAK,EAAG,cAAI,aAAJ,CAHT;AAIC,IAAA,OAAO,EAAG5C;AAJX,IATF,CADD,CADD,EAqBC,4BAAC,8BAAD,QACC,4BAAC,qBAAD;AAAW,IAAA,KAAK,EAAG,cAAI,UAAJ;AAAnB,KACC,4BAAC,uBAAD;AACC,IAAA,uBAAuB,MADxB;AAEC,IAAA,KAAK,EAAG/B,KAAK,GAAG,8BAAWA,KAAX,CAAH,GAAwB,EAFtC;AAGC,IAAA,QAAQ,EAAK4E,UAAF,IAAkB;AAC5BlF,MAAAA,aAAa,CAAE;AAAEM,QAAAA,KAAK,EAAE4E;AAAT,OAAF,CAAb;AACA,KALF;AAMC,IAAA,KAAK,EAAG,cAAI,OAAJ,CANT;AAOC,IAAA,YAAY,EAAC;AAPd,IADD,EAUC,4BAAC,uBAAD;AACC,IAAA,uBAAuB,MADxB;AAEC,IAAA,KAAK,EAAG3E,GAAG,IAAI,EAFhB;AAGC,IAAA,QAAQ,EAAK4E,QAAF,IAAgB;AAC1B,8CACC;AAAE5E,QAAAA,GAAG,EAAE4E;AAAP,OADD,EAECnF,aAFD,EAGCF,UAHD;AAKA,KATF;AAUC,IAAA,KAAK,EAAG,cAAI,KAAJ,CAVT;AAWC,IAAA,YAAY,EAAC;AAXd,IAVD,EAuBC,4BAAC,2BAAD;AACC,IAAA,uBAAuB,MADxB;AAEC,IAAA,KAAK,EAAGU,WAAW,IAAI,EAFxB;AAGC,IAAA,QAAQ,EAAK4E,gBAAF,IAAwB;AAClCpF,MAAAA,aAAa,CAAE;AAAEQ,QAAAA,WAAW,EAAE4E;AAAf,OAAF,CAAb;AACA,KALF;AAMC,IAAA,KAAK,EAAG,cAAI,aAAJ,CANT;AAOC,IAAA,IAAI,EAAG,cACN,iFADM;AAPR,IAvBD,EAkCC,4BAAC,uBAAD;AACC,IAAA,uBAAuB,MADxB;AAEC,IAAA,KAAK,EAAG1E,KAAK,IAAI,EAFlB;AAGC,IAAA,QAAQ,EAAK2E,UAAF,IAAkB;AAC5BrF,MAAAA,aAAa,CAAE;AAAEU,QAAAA,KAAK,EAAE2E;AAAT,OAAF,CAAb;AACA,KALF;AAMC,IAAA,KAAK,EAAG,cAAI,iBAAJ,CANT;AAOC,IAAA,YAAY,EAAC,KAPd;AAQC,IAAA,IAAI,EAAG,cACN,iEADM;AARR,IAlCD,EA8CC,4BAAC,uBAAD;AACC,IAAA,uBAAuB,MADxB;AAEC,IAAA,KAAK,EAAG5E,GAAG,IAAI,EAFhB;AAGC,IAAA,QAAQ,EAAK6E,QAAF,IAAgB;AAC1BtF,MAAAA,aAAa,CAAE;AAAES,QAAAA,GAAG,EAAE6E;AAAP,OAAF,CAAb;AACA,KALF;AAMC,IAAA,KAAK,EAAG,cAAI,eAAJ,CANT;AAOC,IAAA,YAAY,EAAC,KAPd;AAQC,IAAA,IAAI,EAAG,cACN,mEADM;AARR,IA9CD,CADD,CArBD,EAkFC,wCAAUtB;AAAV,KAEC;AAAG,IAAA,SAAS,EAAGY;AAAf,KAEG,CAAErE,GAAF,GACD;AAAK,IAAA,SAAS,EAAC;AAAf,KACC,4BAAC,mBAAD;AAAS,IAAA,QAAQ,EAAC,YAAlB;AAA+B,IAAA,IAAI,EAAGuE;AAAtC,KACC,qDACC,0CAAQlF,WAAR,CADD,EAEC;AAAM,IAAA,SAAS,EAAC;AAAhB,KACGkF,WADH,CAFD,CADD,CADD,CADC,GAYD,qDACG,CAAErF,SAAF,IAAe,CAAEC,OAAjB,IACD,qDACC,4BAAC,qBAAD;AACC,IAAA,GAAG,EAAG2B,GADP;AAEC,IAAA,UAAU,EAAC,OAFZ;AAGC,IAAA,SAAS,EAAC,iCAHX;AAIC,IAAA,KAAK,EAAGf,KAJT;AAKC,IAAA,QAAQ,EAAK4E,UAAF,IACVlF,aAAa,CAAE;AACdM,MAAAA,KAAK,EAAE4E;AADO,KAAF,CANf;AAUC,IAAA,OAAO,EAAGhF,WAVX;AAWC,IAAA,SAAS,EAAGC,SAXb;AAYC,IAAA,sBAAsB,EAAG,MACxBF,iBAAiB,CAChB,yBACC,sBADD,CADgB,CAbnB;AAmBC,kBAAa,cACZ,sBADY,CAnBd;AAsBC,IAAA,WAAW,EAAGmB,oBAtBf;AAuBC,IAAA,4BAA4B,MAvB7B;AAwBC,IAAA,cAAc,EAAG,CAChB,WADgB,EAEhB,aAFgB,EAGhB,YAHgB,EAIhB,oBAJgB,CAxBlB;AA8BC,IAAA,OAAO,EAAG,MAAM;AACf,UAAK,CAAEb,GAAP,EAAa;AACZS,QAAAA,aAAa,CAAE,IAAF,CAAb;AACA;AACD;AAlCF,IADD,EAqCGR,WAAW,IACZ;AAAM,IAAA,SAAS,EAAC;AAAhB,KACGA,WADH,CAtCF,CAFF,EA8CG,CAAEf,SAAS,IAAIC,OAAf,KACD;AAAK,IAAA,SAAS,EAAC;AAAf,KACC,4BAAC,mBAAD;AACC,IAAA,QAAQ,EAAC,YADV;AAEC,IAAA,IAAI,EAAGoF;AAFR,KAIC,qDACC;AACC,kBAAa,cACZ,sBADY;AADd,KAME;AACA;AACA;AACA;AACA;AACC,KAAG,kCACHxE,KADG,CAED,IAAIuE,eAAiB,EAFxB,CAE0BU,IAF1B,EAXF,CADD,EAiBC;AAAM,IAAA,SAAS,EAAC;AAAhB,KACGT,WADH,CAjBD,CAJD,CADD,CA/CF,CAdF,EA4FG/D,UAAU,IACX,4BAAC,cAAD;AACC,IAAA,SAAS,EAAC,6CADX;AAEC,IAAA,QAAQ,EAAGV,QAFZ;AAGC,IAAA,IAAI,EAAGP,UAHR;AAIC,IAAA,OAAO,EAAG,MAAMkB,aAAa,CAAE,KAAF,CAJ9B;AAKC,IAAA,MAAM,EAAGC,aALV;AAMC,IAAA,mBAAmB,EAAGoC,aANvB;AAOC,IAAA,QAAQ,EAAGH,UAPZ;AAQC,IAAA,QAAQ,EAAKsC,YAAF,IAAoB;AAC9B,8CACCA,YADD,EAECxF,aAFD,EAGCF,UAHD;AAKA;AAdF,IA7FF,CAFD,EAiHC,wCAAUwE;AAAV,IAjHD,CAlFD,CADD;AAwMA","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { createBlock } from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tPanelBody,\n\tTextControl,\n\tTextareaControl,\n\tToolbarButton,\n\tTooltip,\n\tToolbarGroup,\n} from '@wordpress/components';\nimport { displayShortcut, isKeyboardEvent, ENTER } from '@wordpress/keycodes';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n\tgetColorClassName,\n\tuseInnerBlocksProps,\n} from '@wordpress/block-editor';\nimport { isURL, prependHTTP } from '@wordpress/url';\nimport { useState, useEffect, useRef } from '@wordpress/element';\nimport {\n\tplaceCaretAtHorizontalEdge,\n\t__unstableStripHTML as stripHTML,\n} from '@wordpress/dom';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { link as linkIcon, addSubmenu } from '@wordpress/icons';\nimport {\n\tstore as coreStore,\n\tuseResourcePermissions,\n} from '@wordpress/core-data';\nimport { useMergeRefs } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { name } from './block.json';\nimport { LinkUI } from './link-ui';\nimport { updateAttributes } from './update-attributes';\nimport { getColors } from '../navigation/edit/utils';\n\n/**\n * A React hook to determine if it's dragging within the target element.\n *\n * @typedef {import('@wordpress/element').RefObject} RefObject\n *\n * @param {RefObject<HTMLElement>} elementRef The target elementRef object.\n *\n * @return {boolean} Is dragging within the target element.\n */\nconst useIsDraggingWithin = ( elementRef ) => {\n\tconst [ isDraggingWithin, setIsDraggingWithin ] = useState( false );\n\n\tuseEffect( () => {\n\t\tconst { ownerDocument } = elementRef.current;\n\n\t\tfunction handleDragStart( event ) {\n\t\t\t// Check the first time when the dragging starts.\n\t\t\thandleDragEnter( event );\n\t\t}\n\n\t\t// Set to false whenever the user cancel the drag event by either releasing the mouse or press Escape.\n\t\tfunction handleDragEnd() {\n\t\t\tsetIsDraggingWithin( false );\n\t\t}\n\n\t\tfunction handleDragEnter( event ) {\n\t\t\t// Check if the current target is inside the item element.\n\t\t\tif ( elementRef.current.contains( event.target ) ) {\n\t\t\t\tsetIsDraggingWithin( true );\n\t\t\t} else {\n\t\t\t\tsetIsDraggingWithin( false );\n\t\t\t}\n\t\t}\n\n\t\t// Bind these events to the document to catch all drag events.\n\t\t// Ideally, we can also use `event.relatedTarget`, but sadly that\n\t\t// doesn't work in Safari.\n\t\townerDocument.addEventListener( 'dragstart', handleDragStart );\n\t\townerDocument.addEventListener( 'dragend', handleDragEnd );\n\t\townerDocument.addEventListener( 'dragenter', handleDragEnter );\n\n\t\treturn () => {\n\t\t\townerDocument.removeEventListener( 'dragstart', handleDragStart );\n\t\t\townerDocument.removeEventListener( 'dragend', handleDragEnd );\n\t\t\townerDocument.removeEventListener( 'dragenter', handleDragEnter );\n\t\t};\n\t}, [] );\n\n\treturn isDraggingWithin;\n};\n\nconst useIsInvalidLink = ( kind, type, id ) => {\n\tconst isPostType =\n\t\tkind === 'post-type' || type === 'post' || type === 'page';\n\tconst hasId = Number.isInteger( id );\n\tconst postStatus = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! isPostType ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst { getEntityRecord } = select( coreStore );\n\t\t\treturn getEntityRecord( 'postType', type, id )?.status;\n\t\t},\n\t\t[ isPostType, type, id ]\n\t);\n\n\t// Check Navigation Link validity if:\n\t// 1. Link is 'post-type'.\n\t// 2. It has an id.\n\t// 3. It's neither null, nor undefined, as valid items might be either of those while loading.\n\t// If those conditions are met, check if\n\t// 1. The post status is published.\n\t// 2. The Navigation Link item has no label.\n\t// If either of those is true, invalidate.\n\tconst isInvalid =\n\t\tisPostType && hasId && postStatus && 'trash' === postStatus;\n\tconst isDraft = 'draft' === postStatus;\n\n\treturn [ isInvalid, isDraft ];\n};\n\nfunction getMissingText( type ) {\n\tlet missingText = '';\n\n\tswitch ( type ) {\n\t\tcase 'post':\n\t\t\t/* translators: label for missing post in navigation link block */\n\t\t\tmissingText = __( 'Select post' );\n\t\t\tbreak;\n\t\tcase 'page':\n\t\t\t/* translators: label for missing page in navigation link block */\n\t\t\tmissingText = __( 'Select page' );\n\t\t\tbreak;\n\t\tcase 'category':\n\t\t\t/* translators: label for missing category in navigation link block */\n\t\t\tmissingText = __( 'Select category' );\n\t\t\tbreak;\n\t\tcase 'tag':\n\t\t\t/* translators: label for missing tag in navigation link block */\n\t\t\tmissingText = __( 'Select tag' );\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t/* translators: label for missing values in navigation link block */\n\t\t\tmissingText = __( 'Add link' );\n\t}\n\n\treturn missingText;\n}\n\nexport default function NavigationLinkEdit( {\n\tattributes,\n\tisSelected,\n\tsetAttributes,\n\tinsertBlocksAfter,\n\tmergeBlocks,\n\tonReplace,\n\tcontext,\n\tclientId,\n} ) {\n\tconst { id, label, type, url, description, rel, title, kind } = attributes;\n\n\tconst [ isInvalid, isDraft ] = useIsInvalidLink( kind, type, id );\n\tconst { maxNestingLevel } = context;\n\n\tconst { replaceBlock, __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\tconst [ isLinkOpen, setIsLinkOpen ] = useState( false );\n\t// Use internal state instead of a ref to make sure that the component\n\t// re-renders when the popover's anchor updates.\n\tconst [ popoverAnchor, setPopoverAnchor ] = useState( null );\n\tconst listItemRef = useRef( null );\n\tconst isDraggingWithin = useIsDraggingWithin( listItemRef );\n\tconst itemLabelPlaceholder = __( 'Add label…' );\n\tconst ref = useRef();\n\n\tconst pagesPermissions = useResourcePermissions( 'pages' );\n\tconst postsPermissions = useResourcePermissions( 'posts' );\n\n\tconst {\n\t\tinnerBlocks,\n\t\tisAtMaxNesting,\n\t\tisTopLevelLink,\n\t\tisParentOfSelectedBlock,\n\t\thasChildren,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlocks,\n\t\t\t\tgetBlockCount,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t\tgetBlockParentsByBlockName,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tinnerBlocks: getBlocks( clientId ),\n\t\t\t\tisAtMaxNesting:\n\t\t\t\t\tgetBlockParentsByBlockName( clientId, [\n\t\t\t\t\t\tname,\n\t\t\t\t\t\t'core/navigation-submenu',\n\t\t\t\t\t] ).length >= maxNestingLevel,\n\t\t\t\tisTopLevelLink:\n\t\t\t\t\tgetBlockName( getBlockRootClientId( clientId ) ) ===\n\t\t\t\t\t'core/navigation',\n\t\t\t\tisParentOfSelectedBlock: hasSelectedInnerBlock(\n\t\t\t\t\tclientId,\n\t\t\t\t\ttrue\n\t\t\t\t),\n\t\t\t\thasChildren: !! getBlockCount( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\t/**\n\t * Transform to submenu block.\n\t */\n\tfunction transformToSubmenu() {\n\t\tconst newSubmenu = createBlock(\n\t\t\t'core/navigation-submenu',\n\t\t\tattributes,\n\t\t\tinnerBlocks.length > 0\n\t\t\t\t? innerBlocks\n\t\t\t\t: [ createBlock( 'core/navigation-link' ) ]\n\t\t);\n\t\treplaceBlock( clientId, newSubmenu );\n\t}\n\n\tuseEffect( () => {\n\t\t// Show the LinkControl on mount if the URL is empty\n\t\t// ( When adding a new menu item)\n\t\t// This can't be done in the useState call because it conflicts\n\t\t// with the autofocus behavior of the BlockListBlock component.\n\t\tif ( ! url ) {\n\t\t\tsetIsLinkOpen( true );\n\t\t}\n\t}, [ url ] );\n\n\tuseEffect( () => {\n\t\t// If block has inner blocks, transform to Submenu.\n\t\tif ( hasChildren ) {\n\t\t\t// This side-effect should not create an undo level as those should\n\t\t\t// only be created via user interactions.\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\ttransformToSubmenu();\n\t\t}\n\t}, [ hasChildren ] );\n\n\t/**\n\t * The hook shouldn't be necessary but due to a focus loss happening\n\t * when selecting a suggestion in the link popover, we force close on block unselection.\n\t */\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsLinkOpen( false );\n\t\t}\n\t}, [ isSelected ] );\n\n\t// If the LinkControl popover is open and the URL has changed, close the LinkControl and focus the label text.\n\tuseEffect( () => {\n\t\tif ( isLinkOpen && url ) {\n\t\t\t// Does this look like a URL and have something TLD-ish?\n\t\t\tif (\n\t\t\t\tisURL( prependHTTP( label ) ) &&\n\t\t\t\t/^.+\\.[a-z]+/.test( label )\n\t\t\t) {\n\t\t\t\t// Focus and select the label text.\n\t\t\t\tselectLabelText();\n\t\t\t} else {\n\t\t\t\t// Focus it (but do not select).\n\t\t\t\tplaceCaretAtHorizontalEdge( ref.current, true );\n\t\t\t}\n\t\t}\n\t}, [ url ] );\n\n\t/**\n\t * Focus the Link label text and select it.\n\t */\n\tfunction selectLabelText() {\n\t\tref.current.focus();\n\t\tconst { ownerDocument } = ref.current;\n\t\tconst { defaultView } = ownerDocument;\n\t\tconst selection = defaultView.getSelection();\n\t\tconst range = ownerDocument.createRange();\n\t\t// Get the range of the current ref contents so we can add this range to the selection.\n\t\trange.selectNodeContents( ref.current );\n\t\tselection.removeAllRanges();\n\t\tselection.addRange( range );\n\t}\n\n\t/**\n\t * Removes the current link if set.\n\t */\n\tfunction removeLink() {\n\t\t// Reset all attributes that comprise the link.\n\t\t// It is critical that all attributes are reset\n\t\t// to their default values otherwise this may\n\t\t// in advertently trigger side effects because\n\t\t// the values will have \"changed\".\n\t\tsetAttributes( {\n\t\t\turl: undefined,\n\t\t\tlabel: undefined,\n\t\t\tid: undefined,\n\t\t\tkind: undefined,\n\t\t\ttype: undefined,\n\t\t\topensInNewTab: false,\n\t\t} );\n\n\t\t// Close the link editing UI.\n\t\tsetIsLinkOpen( false );\n\t}\n\n\tlet userCanCreate = false;\n\tif ( ! type || type === 'page' ) {\n\t\tuserCanCreate = pagesPermissions.canCreate;\n\t} else if ( type === 'post' ) {\n\t\tuserCanCreate = postsPermissions.canCreate;\n\t}\n\n\tconst {\n\t\ttextColor,\n\t\tcustomTextColor,\n\t\tbackgroundColor,\n\t\tcustomBackgroundColor,\n\t} = getColors( context, ! isTopLevelLink );\n\n\tfunction onKeyDown( event ) {\n\t\tif (\n\t\t\tisKeyboardEvent.primary( event, 'k' ) ||\n\t\t\t( ( ! url || isDraft || isInvalid ) && event.keyCode === ENTER )\n\t\t) {\n\t\t\tsetIsLinkOpen( true );\n\t\t}\n\t}\n\n\tconst blockProps = useBlockProps( {\n\t\tref: useMergeRefs( [ setPopoverAnchor, listItemRef ] ),\n\t\tclassName: classnames( 'wp-block-navigation-item', {\n\t\t\t'is-editing': isSelected || isParentOfSelectedBlock,\n\t\t\t'is-dragging-within': isDraggingWithin,\n\t\t\t'has-link': !! url,\n\t\t\t'has-child': hasChildren,\n\t\t\t'has-text-color': !! textColor || !! customTextColor,\n\t\t\t[ getColorClassName( 'color', textColor ) ]: !! textColor,\n\t\t\t'has-background': !! backgroundColor || customBackgroundColor,\n\t\t\t[ getColorClassName( 'background-color', backgroundColor ) ]:\n\t\t\t\t!! backgroundColor,\n\t\t} ),\n\t\tstyle: {\n\t\t\tcolor: ! textColor && customTextColor,\n\t\t\tbackgroundColor: ! backgroundColor && customBackgroundColor,\n\t\t},\n\t\tonKeyDown,\n\t} );\n\n\tconst ALLOWED_BLOCKS = [\n\t\t'core/navigation-link',\n\t\t'core/navigation-submenu',\n\t\t'core/page-list',\n\t];\n\tconst DEFAULT_BLOCK = {\n\t\tname: 'core/navigation-link',\n\t};\n\n\tconst innerBlocksProps = useInnerBlocksProps(\n\t\t{\n\t\t\t...blockProps,\n\t\t\tclassName: 'remove-outline', // Remove the outline from the inner blocks container.\n\t\t},\n\t\t{\n\t\t\tallowedBlocks: ALLOWED_BLOCKS,\n\t\t\t__experimentalDefaultBlock: DEFAULT_BLOCK,\n\t\t\t__experimentalDirectInsert: true,\n\t\t\trenderAppender: false,\n\t\t}\n\t);\n\n\tif ( ! url || isInvalid || isDraft ) {\n\t\tblockProps.onClick = () => setIsLinkOpen( true );\n\t}\n\n\tconst classes = classnames( 'wp-block-navigation-item__content', {\n\t\t'wp-block-navigation-link__placeholder': ! url || isInvalid || isDraft,\n\t} );\n\n\tconst missingText = getMissingText( type );\n\t/* translators: Whether the navigation link is Invalid or a Draft. */\n\tconst placeholderText = `(${\n\t\tisInvalid ? __( 'Invalid' ) : __( 'Draft' )\n\t})`;\n\tconst tooltipText =\n\t\tisInvalid || isDraft\n\t\t\t? __( 'This item has been deleted, or is a draft' )\n\t\t\t: __( 'This item is missing a link' );\n\n\treturn (\n\t\t<>\n\t\t\t<BlockControls>\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tname=\"link\"\n\t\t\t\t\t\ticon={ linkIcon }\n\t\t\t\t\t\ttitle={ __( 'Link' ) }\n\t\t\t\t\t\tshortcut={ displayShortcut.primary( 'k' ) }\n\t\t\t\t\t\tonClick={ () => setIsLinkOpen( true ) }\n\t\t\t\t\t/>\n\t\t\t\t\t{ ! isAtMaxNesting && (\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\tname=\"submenu\"\n\t\t\t\t\t\t\ticon={ addSubmenu }\n\t\t\t\t\t\t\ttitle={ __( 'Add submenu' ) }\n\t\t\t\t\t\t\tonClick={ transformToSubmenu }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</ToolbarGroup>\n\t\t\t</BlockControls>\n\t\t\t{ /* Warning, this duplicated in packages/block-library/src/navigation-submenu/edit.js */ }\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody title={ __( 'Settings' ) }>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tvalue={ label ? stripHTML( label ) : '' }\n\t\t\t\t\t\tonChange={ ( labelValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { label: labelValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tlabel={ __( 'Label' ) }\n\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t/>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tvalue={ url || '' }\n\t\t\t\t\t\tonChange={ ( urlValue ) => {\n\t\t\t\t\t\t\tupdateAttributes(\n\t\t\t\t\t\t\t\t{ url: urlValue },\n\t\t\t\t\t\t\t\tsetAttributes,\n\t\t\t\t\t\t\t\tattributes\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tlabel={ __( 'URL' ) }\n\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t/>\n\t\t\t\t\t<TextareaControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tvalue={ description || '' }\n\t\t\t\t\t\tonChange={ ( descriptionValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { description: descriptionValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tlabel={ __( 'Description' ) }\n\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t'The description will be displayed in the menu if the current theme supports it.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tvalue={ title || '' }\n\t\t\t\t\t\tonChange={ ( titleValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { title: titleValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tlabel={ __( 'Title attribute' ) }\n\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t'Additional information to help clarify the purpose of the link.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tvalue={ rel || '' }\n\t\t\t\t\t\tonChange={ ( relValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { rel: relValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tlabel={ __( 'Rel attribute' ) }\n\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t'The relationship of the linked URL as space-separated link types.'\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<div { ...blockProps }>\n\t\t\t\t{ /* eslint-disable jsx-a11y/anchor-is-valid */ }\n\t\t\t\t<a className={ classes }>\n\t\t\t\t\t{ /* eslint-enable */ }\n\t\t\t\t\t{ ! url ? (\n\t\t\t\t\t\t<div className=\"wp-block-navigation-link__placeholder-text\">\n\t\t\t\t\t\t\t<Tooltip position=\"top center\" text={ tooltipText }>\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<span>{ missingText }</span>\n\t\t\t\t\t\t\t\t\t<span className=\"wp-block-navigation-link__missing_text-tooltip\">\n\t\t\t\t\t\t\t\t\t\t{ tooltipText }\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ ! isInvalid && ! isDraft && (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<RichText\n\t\t\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\t\t\tidentifier=\"label\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"wp-block-navigation-item__label\"\n\t\t\t\t\t\t\t\t\t\tvalue={ label }\n\t\t\t\t\t\t\t\t\t\tonChange={ ( labelValue ) =>\n\t\t\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\t\t\tlabel: labelValue,\n\t\t\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonMerge={ mergeBlocks }\n\t\t\t\t\t\t\t\t\t\tonReplace={ onReplace }\n\t\t\t\t\t\t\t\t\t\t__unstableOnSplitAtEnd={ () =>\n\t\t\t\t\t\t\t\t\t\t\tinsertBlocksAfter(\n\t\t\t\t\t\t\t\t\t\t\t\tcreateBlock(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'core/navigation-link'\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\taria-label={ __(\n\t\t\t\t\t\t\t\t\t\t\t'Navigation link text'\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\tplaceholder={ itemLabelPlaceholder }\n\t\t\t\t\t\t\t\t\t\twithoutInteractiveFormatting\n\t\t\t\t\t\t\t\t\t\tallowedFormats={ [\n\t\t\t\t\t\t\t\t\t\t\t'core/bold',\n\t\t\t\t\t\t\t\t\t\t\t'core/italic',\n\t\t\t\t\t\t\t\t\t\t\t'core/image',\n\t\t\t\t\t\t\t\t\t\t\t'core/strikethrough',\n\t\t\t\t\t\t\t\t\t\t] }\n\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\tif ( ! url ) {\n\t\t\t\t\t\t\t\t\t\t\t\tsetIsLinkOpen( true );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{ description && (\n\t\t\t\t\t\t\t\t\t\t<span className=\"wp-block-navigation-item__description\">\n\t\t\t\t\t\t\t\t\t\t\t{ description }\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t{ ( isInvalid || isDraft ) && (\n\t\t\t\t\t\t\t\t<div className=\"wp-block-navigation-link__placeholder-text wp-block-navigation-link__label\">\n\t\t\t\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\t\t\t\tposition=\"top center\"\n\t\t\t\t\t\t\t\t\t\ttext={ tooltipText }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={ __(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'Navigation link text'\n\t\t\t\t\t\t\t\t\t\t\t\t) }\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{\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Some attributes are stored in an escaped form. It's a legacy issue.\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Ideally they would be stored in a raw, unescaped form.\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Unescape is used here to \"recover\" the escaped characters\n\t\t\t\t\t\t\t\t\t\t\t\t\t// so they display without encoding.\n\t\t\t\t\t\t\t\t\t\t\t\t\t// See `updateAttributes` for more details.\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${ decodeEntities(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel\n\t\t\t\t\t\t\t\t\t\t\t\t\t) } ${ placeholderText }`.trim()\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"wp-block-navigation-link__missing_text-tooltip\">\n\t\t\t\t\t\t\t\t\t\t\t\t{ tooltipText }\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t</div>\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{ isLinkOpen && (\n\t\t\t\t\t\t<LinkUI\n\t\t\t\t\t\t\tclassName=\"wp-block-navigation-link__inline-link-input\"\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t\tlink={ attributes }\n\t\t\t\t\t\t\tonClose={ () => setIsLinkOpen( false ) }\n\t\t\t\t\t\t\tanchor={ popoverAnchor }\n\t\t\t\t\t\t\thasCreateSuggestion={ userCanCreate }\n\t\t\t\t\t\t\tonRemove={ removeLink }\n\t\t\t\t\t\t\tonChange={ ( updatedValue ) => {\n\t\t\t\t\t\t\t\tupdateAttributes(\n\t\t\t\t\t\t\t\t\tupdatedValue,\n\t\t\t\t\t\t\t\t\tsetAttributes,\n\t\t\t\t\t\t\t\t\tattributes\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</a>\n\t\t\t\t<div { ...innerBlocksProps } />\n\t\t\t</div>\n\t\t</>\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-library/src/navigation-link/edit.js"],"names":["useIsDraggingWithin","elementRef","isDraggingWithin","setIsDraggingWithin","ownerDocument","current","handleDragStart","event","handleDragEnter","handleDragEnd","contains","target","addEventListener","removeEventListener","useIsInvalidLink","kind","type","id","isPostType","hasId","Number","isInteger","postStatus","select","getEntityRecord","coreStore","status","isInvalid","isDraft","getMissingText","missingText","NavigationLinkEdit","attributes","isSelected","setAttributes","insertBlocksAfter","mergeBlocks","onReplace","context","clientId","label","url","description","rel","title","maxNestingLevel","replaceBlock","__unstableMarkNextChangeAsNotPersistent","blockEditorStore","isLinkOpen","setIsLinkOpen","popoverAnchor","setPopoverAnchor","listItemRef","itemLabelPlaceholder","ref","innerBlocks","isAtMaxNesting","isTopLevelLink","isParentOfSelectedBlock","hasChildren","getBlocks","getBlockCount","getBlockName","getBlockRootClientId","hasSelectedInnerBlock","getBlockParentsByBlockName","name","length","transformToSubmenu","newSubmenu","test","selectLabelText","focus","defaultView","selection","getSelection","range","createRange","selectNodeContents","removeAllRanges","addRange","removeLink","undefined","opensInNewTab","textColor","customTextColor","backgroundColor","customBackgroundColor","onKeyDown","isKeyboardEvent","primary","keyCode","ENTER","blockProps","className","style","color","ALLOWED_BLOCKS","DEFAULT_BLOCK","innerBlocksProps","allowedBlocks","__experimentalDefaultBlock","__experimentalDirectInsert","renderAppender","onClick","classes","placeholderText","tooltipText","linkIcon","displayShortcut","addSubmenu","labelValue","urlValue","descriptionValue","titleValue","relValue","trim","updatedValue"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { createBlock } from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tPanelBody,\n\tTextControl,\n\tTextareaControl,\n\tToolbarButton,\n\tTooltip,\n\tToolbarGroup,\n} from '@wordpress/components';\nimport { displayShortcut, isKeyboardEvent, ENTER } from '@wordpress/keycodes';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tBlockControls,\n\tInspectorControls,\n\tRichText,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n\tgetColorClassName,\n\tuseInnerBlocksProps,\n} from '@wordpress/block-editor';\nimport { isURL, prependHTTP } from '@wordpress/url';\nimport { useState, useEffect, useRef } from '@wordpress/element';\nimport {\n\tplaceCaretAtHorizontalEdge,\n\t__unstableStripHTML as stripHTML,\n} from '@wordpress/dom';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { link as linkIcon, addSubmenu } from '@wordpress/icons';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useMergeRefs } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { name } from './block.json';\nimport { LinkUI } from './link-ui';\nimport { updateAttributes } from './update-attributes';\nimport { getColors } from '../navigation/edit/utils';\n\n/**\n * A React hook to determine if it's dragging within the target element.\n *\n * @typedef {import('@wordpress/element').RefObject} RefObject\n *\n * @param {RefObject<HTMLElement>} elementRef The target elementRef object.\n *\n * @return {boolean} Is dragging within the target element.\n */\nconst useIsDraggingWithin = ( elementRef ) => {\n\tconst [ isDraggingWithin, setIsDraggingWithin ] = useState( false );\n\n\tuseEffect( () => {\n\t\tconst { ownerDocument } = elementRef.current;\n\n\t\tfunction handleDragStart( event ) {\n\t\t\t// Check the first time when the dragging starts.\n\t\t\thandleDragEnter( event );\n\t\t}\n\n\t\t// Set to false whenever the user cancel the drag event by either releasing the mouse or press Escape.\n\t\tfunction handleDragEnd() {\n\t\t\tsetIsDraggingWithin( false );\n\t\t}\n\n\t\tfunction handleDragEnter( event ) {\n\t\t\t// Check if the current target is inside the item element.\n\t\t\tif ( elementRef.current.contains( event.target ) ) {\n\t\t\t\tsetIsDraggingWithin( true );\n\t\t\t} else {\n\t\t\t\tsetIsDraggingWithin( false );\n\t\t\t}\n\t\t}\n\n\t\t// Bind these events to the document to catch all drag events.\n\t\t// Ideally, we can also use `event.relatedTarget`, but sadly that\n\t\t// doesn't work in Safari.\n\t\townerDocument.addEventListener( 'dragstart', handleDragStart );\n\t\townerDocument.addEventListener( 'dragend', handleDragEnd );\n\t\townerDocument.addEventListener( 'dragenter', handleDragEnter );\n\n\t\treturn () => {\n\t\t\townerDocument.removeEventListener( 'dragstart', handleDragStart );\n\t\t\townerDocument.removeEventListener( 'dragend', handleDragEnd );\n\t\t\townerDocument.removeEventListener( 'dragenter', handleDragEnter );\n\t\t};\n\t}, [] );\n\n\treturn isDraggingWithin;\n};\n\nconst useIsInvalidLink = ( kind, type, id ) => {\n\tconst isPostType =\n\t\tkind === 'post-type' || type === 'post' || type === 'page';\n\tconst hasId = Number.isInteger( id );\n\tconst postStatus = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! isPostType ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst { getEntityRecord } = select( coreStore );\n\t\t\treturn getEntityRecord( 'postType', type, id )?.status;\n\t\t},\n\t\t[ isPostType, type, id ]\n\t);\n\n\t// Check Navigation Link validity if:\n\t// 1. Link is 'post-type'.\n\t// 2. It has an id.\n\t// 3. It's neither null, nor undefined, as valid items might be either of those while loading.\n\t// If those conditions are met, check if\n\t// 1. The post status is published.\n\t// 2. The Navigation Link item has no label.\n\t// If either of those is true, invalidate.\n\tconst isInvalid =\n\t\tisPostType && hasId && postStatus && 'trash' === postStatus;\n\tconst isDraft = 'draft' === postStatus;\n\n\treturn [ isInvalid, isDraft ];\n};\n\nfunction getMissingText( type ) {\n\tlet missingText = '';\n\n\tswitch ( type ) {\n\t\tcase 'post':\n\t\t\t/* translators: label for missing post in navigation link block */\n\t\t\tmissingText = __( 'Select post' );\n\t\t\tbreak;\n\t\tcase 'page':\n\t\t\t/* translators: label for missing page in navigation link block */\n\t\t\tmissingText = __( 'Select page' );\n\t\t\tbreak;\n\t\tcase 'category':\n\t\t\t/* translators: label for missing category in navigation link block */\n\t\t\tmissingText = __( 'Select category' );\n\t\t\tbreak;\n\t\tcase 'tag':\n\t\t\t/* translators: label for missing tag in navigation link block */\n\t\t\tmissingText = __( 'Select tag' );\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t/* translators: label for missing values in navigation link block */\n\t\t\tmissingText = __( 'Add link' );\n\t}\n\n\treturn missingText;\n}\n\nexport default function NavigationLinkEdit( {\n\tattributes,\n\tisSelected,\n\tsetAttributes,\n\tinsertBlocksAfter,\n\tmergeBlocks,\n\tonReplace,\n\tcontext,\n\tclientId,\n} ) {\n\tconst { id, label, type, url, description, rel, title, kind } = attributes;\n\n\tconst [ isInvalid, isDraft ] = useIsInvalidLink( kind, type, id );\n\tconst { maxNestingLevel } = context;\n\n\tconst { replaceBlock, __unstableMarkNextChangeAsNotPersistent } =\n\t\tuseDispatch( blockEditorStore );\n\tconst [ isLinkOpen, setIsLinkOpen ] = useState( false );\n\t// Use internal state instead of a ref to make sure that the component\n\t// re-renders when the popover's anchor updates.\n\tconst [ popoverAnchor, setPopoverAnchor ] = useState( null );\n\tconst listItemRef = useRef( null );\n\tconst isDraggingWithin = useIsDraggingWithin( listItemRef );\n\tconst itemLabelPlaceholder = __( 'Add label…' );\n\tconst ref = useRef();\n\n\tconst {\n\t\tinnerBlocks,\n\t\tisAtMaxNesting,\n\t\tisTopLevelLink,\n\t\tisParentOfSelectedBlock,\n\t\thasChildren,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlocks,\n\t\t\t\tgetBlockCount,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t\tgetBlockParentsByBlockName,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tinnerBlocks: getBlocks( clientId ),\n\t\t\t\tisAtMaxNesting:\n\t\t\t\t\tgetBlockParentsByBlockName( clientId, [\n\t\t\t\t\t\tname,\n\t\t\t\t\t\t'core/navigation-submenu',\n\t\t\t\t\t] ).length >= maxNestingLevel,\n\t\t\t\tisTopLevelLink:\n\t\t\t\t\tgetBlockName( getBlockRootClientId( clientId ) ) ===\n\t\t\t\t\t'core/navigation',\n\t\t\t\tisParentOfSelectedBlock: hasSelectedInnerBlock(\n\t\t\t\t\tclientId,\n\t\t\t\t\ttrue\n\t\t\t\t),\n\t\t\t\thasChildren: !! getBlockCount( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\t/**\n\t * Transform to submenu block.\n\t */\n\tfunction transformToSubmenu() {\n\t\tconst newSubmenu = createBlock(\n\t\t\t'core/navigation-submenu',\n\t\t\tattributes,\n\t\t\tinnerBlocks.length > 0\n\t\t\t\t? innerBlocks\n\t\t\t\t: [ createBlock( 'core/navigation-link' ) ]\n\t\t);\n\t\treplaceBlock( clientId, newSubmenu );\n\t}\n\n\tuseEffect( () => {\n\t\t// Show the LinkControl on mount if the URL is empty\n\t\t// ( When adding a new menu item)\n\t\t// This can't be done in the useState call because it conflicts\n\t\t// with the autofocus behavior of the BlockListBlock component.\n\t\tif ( ! url ) {\n\t\t\tsetIsLinkOpen( true );\n\t\t}\n\t}, [ url ] );\n\n\tuseEffect( () => {\n\t\t// If block has inner blocks, transform to Submenu.\n\t\tif ( hasChildren ) {\n\t\t\t// This side-effect should not create an undo level as those should\n\t\t\t// only be created via user interactions.\n\t\t\t__unstableMarkNextChangeAsNotPersistent();\n\t\t\ttransformToSubmenu();\n\t\t}\n\t}, [ hasChildren ] );\n\n\t/**\n\t * The hook shouldn't be necessary but due to a focus loss happening\n\t * when selecting a suggestion in the link popover, we force close on block unselection.\n\t */\n\tuseEffect( () => {\n\t\tif ( ! isSelected ) {\n\t\t\tsetIsLinkOpen( false );\n\t\t}\n\t}, [ isSelected ] );\n\n\t// If the LinkControl popover is open and the URL has changed, close the LinkControl and focus the label text.\n\tuseEffect( () => {\n\t\tif ( isLinkOpen && url ) {\n\t\t\t// Does this look like a URL and have something TLD-ish?\n\t\t\tif (\n\t\t\t\tisURL( prependHTTP( label ) ) &&\n\t\t\t\t/^.+\\.[a-z]+/.test( label )\n\t\t\t) {\n\t\t\t\t// Focus and select the label text.\n\t\t\t\tselectLabelText();\n\t\t\t} else {\n\t\t\t\t// Focus it (but do not select).\n\t\t\t\tplaceCaretAtHorizontalEdge( ref.current, true );\n\t\t\t}\n\t\t}\n\t}, [ url ] );\n\n\t/**\n\t * Focus the Link label text and select it.\n\t */\n\tfunction selectLabelText() {\n\t\tref.current.focus();\n\t\tconst { ownerDocument } = ref.current;\n\t\tconst { defaultView } = ownerDocument;\n\t\tconst selection = defaultView.getSelection();\n\t\tconst range = ownerDocument.createRange();\n\t\t// Get the range of the current ref contents so we can add this range to the selection.\n\t\trange.selectNodeContents( ref.current );\n\t\tselection.removeAllRanges();\n\t\tselection.addRange( range );\n\t}\n\n\t/**\n\t * Removes the current link if set.\n\t */\n\tfunction removeLink() {\n\t\t// Reset all attributes that comprise the link.\n\t\t// It is critical that all attributes are reset\n\t\t// to their default values otherwise this may\n\t\t// in advertently trigger side effects because\n\t\t// the values will have \"changed\".\n\t\tsetAttributes( {\n\t\t\turl: undefined,\n\t\t\tlabel: undefined,\n\t\t\tid: undefined,\n\t\t\tkind: undefined,\n\t\t\ttype: undefined,\n\t\t\topensInNewTab: false,\n\t\t} );\n\n\t\t// Close the link editing UI.\n\t\tsetIsLinkOpen( false );\n\t}\n\n\tconst {\n\t\ttextColor,\n\t\tcustomTextColor,\n\t\tbackgroundColor,\n\t\tcustomBackgroundColor,\n\t} = getColors( context, ! isTopLevelLink );\n\n\tfunction onKeyDown( event ) {\n\t\tif (\n\t\t\tisKeyboardEvent.primary( event, 'k' ) ||\n\t\t\t( ( ! url || isDraft || isInvalid ) && event.keyCode === ENTER )\n\t\t) {\n\t\t\tsetIsLinkOpen( true );\n\t\t}\n\t}\n\n\tconst blockProps = useBlockProps( {\n\t\tref: useMergeRefs( [ setPopoverAnchor, listItemRef ] ),\n\t\tclassName: classnames( 'wp-block-navigation-item', {\n\t\t\t'is-editing': isSelected || isParentOfSelectedBlock,\n\t\t\t'is-dragging-within': isDraggingWithin,\n\t\t\t'has-link': !! url,\n\t\t\t'has-child': hasChildren,\n\t\t\t'has-text-color': !! textColor || !! customTextColor,\n\t\t\t[ getColorClassName( 'color', textColor ) ]: !! textColor,\n\t\t\t'has-background': !! backgroundColor || customBackgroundColor,\n\t\t\t[ getColorClassName( 'background-color', backgroundColor ) ]:\n\t\t\t\t!! backgroundColor,\n\t\t} ),\n\t\tstyle: {\n\t\t\tcolor: ! textColor && customTextColor,\n\t\t\tbackgroundColor: ! backgroundColor && customBackgroundColor,\n\t\t},\n\t\tonKeyDown,\n\t} );\n\n\tconst ALLOWED_BLOCKS = [\n\t\t'core/navigation-link',\n\t\t'core/navigation-submenu',\n\t\t'core/page-list',\n\t];\n\tconst DEFAULT_BLOCK = {\n\t\tname: 'core/navigation-link',\n\t};\n\n\tconst innerBlocksProps = useInnerBlocksProps(\n\t\t{\n\t\t\t...blockProps,\n\t\t\tclassName: 'remove-outline', // Remove the outline from the inner blocks container.\n\t\t},\n\t\t{\n\t\t\tallowedBlocks: ALLOWED_BLOCKS,\n\t\t\t__experimentalDefaultBlock: DEFAULT_BLOCK,\n\t\t\t__experimentalDirectInsert: true,\n\t\t\trenderAppender: false,\n\t\t}\n\t);\n\n\tif ( ! url || isInvalid || isDraft ) {\n\t\tblockProps.onClick = () => setIsLinkOpen( true );\n\t}\n\n\tconst classes = classnames( 'wp-block-navigation-item__content', {\n\t\t'wp-block-navigation-link__placeholder': ! url || isInvalid || isDraft,\n\t} );\n\n\tconst missingText = getMissingText( type );\n\t/* translators: Whether the navigation link is Invalid or a Draft. */\n\tconst placeholderText = `(${\n\t\tisInvalid ? __( 'Invalid' ) : __( 'Draft' )\n\t})`;\n\tconst tooltipText =\n\t\tisInvalid || isDraft\n\t\t\t? __( 'This item has been deleted, or is a draft' )\n\t\t\t: __( 'This item is missing a link' );\n\n\treturn (\n\t\t<>\n\t\t\t<BlockControls>\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tname=\"link\"\n\t\t\t\t\t\ticon={ linkIcon }\n\t\t\t\t\t\ttitle={ __( 'Link' ) }\n\t\t\t\t\t\tshortcut={ displayShortcut.primary( 'k' ) }\n\t\t\t\t\t\tonClick={ () => setIsLinkOpen( true ) }\n\t\t\t\t\t/>\n\t\t\t\t\t{ ! isAtMaxNesting && (\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\tname=\"submenu\"\n\t\t\t\t\t\t\ticon={ addSubmenu }\n\t\t\t\t\t\t\ttitle={ __( 'Add submenu' ) }\n\t\t\t\t\t\t\tonClick={ transformToSubmenu }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</ToolbarGroup>\n\t\t\t</BlockControls>\n\t\t\t{ /* Warning, this duplicated in packages/block-library/src/navigation-submenu/edit.js */ }\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody title={ __( 'Settings' ) }>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tvalue={ label ? stripHTML( label ) : '' }\n\t\t\t\t\t\tonChange={ ( labelValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { label: labelValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tlabel={ __( 'Label' ) }\n\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t/>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tvalue={ url || '' }\n\t\t\t\t\t\tonChange={ ( urlValue ) => {\n\t\t\t\t\t\t\tupdateAttributes(\n\t\t\t\t\t\t\t\t{ url: urlValue },\n\t\t\t\t\t\t\t\tsetAttributes,\n\t\t\t\t\t\t\t\tattributes\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tlabel={ __( 'URL' ) }\n\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t/>\n\t\t\t\t\t<TextareaControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tvalue={ description || '' }\n\t\t\t\t\t\tonChange={ ( descriptionValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { description: descriptionValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tlabel={ __( 'Description' ) }\n\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t'The description will be displayed in the menu if the current theme supports it.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tvalue={ title || '' }\n\t\t\t\t\t\tonChange={ ( titleValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { title: titleValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tlabel={ __( 'Title attribute' ) }\n\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t'Additional information to help clarify the purpose of the link.'\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tvalue={ rel || '' }\n\t\t\t\t\t\tonChange={ ( relValue ) => {\n\t\t\t\t\t\t\tsetAttributes( { rel: relValue } );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tlabel={ __( 'Rel attribute' ) }\n\t\t\t\t\t\tautoComplete=\"off\"\n\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t'The relationship of the linked URL as space-separated link types.'\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<div { ...blockProps }>\n\t\t\t\t{ /* eslint-disable jsx-a11y/anchor-is-valid */ }\n\t\t\t\t<a className={ classes }>\n\t\t\t\t\t{ /* eslint-enable */ }\n\t\t\t\t\t{ ! url ? (\n\t\t\t\t\t\t<div className=\"wp-block-navigation-link__placeholder-text\">\n\t\t\t\t\t\t\t<Tooltip position=\"top center\" text={ tooltipText }>\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<span>{ missingText }</span>\n\t\t\t\t\t\t\t\t\t<span className=\"wp-block-navigation-link__missing_text-tooltip\">\n\t\t\t\t\t\t\t\t\t\t{ tooltipText }\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ ! isInvalid && ! isDraft && (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<RichText\n\t\t\t\t\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\t\t\t\t\tidentifier=\"label\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"wp-block-navigation-item__label\"\n\t\t\t\t\t\t\t\t\t\tvalue={ label }\n\t\t\t\t\t\t\t\t\t\tonChange={ ( labelValue ) =>\n\t\t\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\t\t\tlabel: labelValue,\n\t\t\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonMerge={ mergeBlocks }\n\t\t\t\t\t\t\t\t\t\tonReplace={ onReplace }\n\t\t\t\t\t\t\t\t\t\t__unstableOnSplitAtEnd={ () =>\n\t\t\t\t\t\t\t\t\t\t\tinsertBlocksAfter(\n\t\t\t\t\t\t\t\t\t\t\t\tcreateBlock(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'core/navigation-link'\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\taria-label={ __(\n\t\t\t\t\t\t\t\t\t\t\t'Navigation link text'\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\tplaceholder={ itemLabelPlaceholder }\n\t\t\t\t\t\t\t\t\t\twithoutInteractiveFormatting\n\t\t\t\t\t\t\t\t\t\tallowedFormats={ [\n\t\t\t\t\t\t\t\t\t\t\t'core/bold',\n\t\t\t\t\t\t\t\t\t\t\t'core/italic',\n\t\t\t\t\t\t\t\t\t\t\t'core/image',\n\t\t\t\t\t\t\t\t\t\t\t'core/strikethrough',\n\t\t\t\t\t\t\t\t\t\t] }\n\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\tif ( ! url ) {\n\t\t\t\t\t\t\t\t\t\t\t\tsetIsLinkOpen( true );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{ description && (\n\t\t\t\t\t\t\t\t\t\t<span className=\"wp-block-navigation-item__description\">\n\t\t\t\t\t\t\t\t\t\t\t{ description }\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t{ ( isInvalid || isDraft ) && (\n\t\t\t\t\t\t\t\t<div className=\"wp-block-navigation-link__placeholder-text wp-block-navigation-link__label\">\n\t\t\t\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\t\t\t\tposition=\"top center\"\n\t\t\t\t\t\t\t\t\t\ttext={ tooltipText }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={ __(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'Navigation link text'\n\t\t\t\t\t\t\t\t\t\t\t\t) }\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{\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Some attributes are stored in an escaped form. It's a legacy issue.\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Ideally they would be stored in a raw, unescaped form.\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Unescape is used here to \"recover\" the escaped characters\n\t\t\t\t\t\t\t\t\t\t\t\t\t// so they display without encoding.\n\t\t\t\t\t\t\t\t\t\t\t\t\t// See `updateAttributes` for more details.\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${ decodeEntities(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel\n\t\t\t\t\t\t\t\t\t\t\t\t\t) } ${ placeholderText }`.trim()\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"wp-block-navigation-link__missing_text-tooltip\">\n\t\t\t\t\t\t\t\t\t\t\t\t{ tooltipText }\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t</div>\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{ isLinkOpen && (\n\t\t\t\t\t\t<LinkUI\n\t\t\t\t\t\t\tclassName=\"wp-block-navigation-link__inline-link-input\"\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t\tlink={ attributes }\n\t\t\t\t\t\t\tonClose={ () => setIsLinkOpen( false ) }\n\t\t\t\t\t\t\tanchor={ popoverAnchor }\n\t\t\t\t\t\t\tonRemove={ removeLink }\n\t\t\t\t\t\t\tonChange={ ( updatedValue ) => {\n\t\t\t\t\t\t\t\tupdateAttributes(\n\t\t\t\t\t\t\t\t\tupdatedValue,\n\t\t\t\t\t\t\t\t\tsetAttributes,\n\t\t\t\t\t\t\t\t\tattributes\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</a>\n\t\t\t\t<div { ...innerBlocksProps } />\n\t\t\t</div>\n\t\t</>\n\t);\n}\n"]}
|
|
@@ -142,6 +142,8 @@ function LinkUI(props) {
|
|
|
142
142
|
const {
|
|
143
143
|
saveEntityRecord
|
|
144
144
|
} = (0, _data.useDispatch)(_coreData.store);
|
|
145
|
+
const pagesPermissions = (0, _coreData.useResourcePermissions)('pages');
|
|
146
|
+
const postsPermissions = (0, _coreData.useResourcePermissions)('posts');
|
|
145
147
|
|
|
146
148
|
async function handleCreate(pageTitle) {
|
|
147
149
|
const postType = props.link.type || 'page';
|
|
@@ -174,9 +176,17 @@ function LinkUI(props) {
|
|
|
174
176
|
opensInNewTab,
|
|
175
177
|
type,
|
|
176
178
|
kind
|
|
177
|
-
} = props.link;
|
|
179
|
+
} = props.link;
|
|
180
|
+
let userCanCreate = false;
|
|
181
|
+
|
|
182
|
+
if (!type || type === 'page') {
|
|
183
|
+
userCanCreate = pagesPermissions.canCreate;
|
|
184
|
+
} else if (type === 'post') {
|
|
185
|
+
userCanCreate = postsPermissions.canCreate;
|
|
186
|
+
} // Memoize link value to avoid overriding the LinkControl's internal state.
|
|
178
187
|
// This is a temporary fix. See https://github.com/WordPress/gutenberg/issues/50976#issuecomment-1568226407.
|
|
179
188
|
|
|
189
|
+
|
|
180
190
|
const link = (0, _element.useMemo)(() => ({
|
|
181
191
|
url,
|
|
182
192
|
opensInNewTab,
|
|
@@ -193,7 +203,7 @@ function LinkUI(props) {
|
|
|
193
203
|
className: props.className,
|
|
194
204
|
value: link,
|
|
195
205
|
showInitialSuggestions: true,
|
|
196
|
-
withCreateSuggestion:
|
|
206
|
+
withCreateSuggestion: userCanCreate,
|
|
197
207
|
createSuggestion: handleCreate,
|
|
198
208
|
createSuggestionButtonText: searchTerm => {
|
|
199
209
|
let format;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-library/src/navigation-link/link-ui.js"],"names":["getSuggestionsQuery","type","kind","subtype","LinkControlTransforms","clientId","getBlock","blockTransforms","select","_getBlock","getBlockRootClientId","getBlockTransformItems","blockEditorStore","replaceBlock","featuredBlocks","transforms","filter","item","includes","name","length","map","index","icon","title","LinkUI","props","saveEntityRecord","coreStore","handleCreate","pageTitle","postType","link","page","status","id","rendered","url","label","opensInNewTab","onClose","anchor","className","hasCreateSuggestion","searchTerm","format","mark","onChange","onRemove","onCancel"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport { Popover, Button } from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\t__experimentalLinkControl as LinkControl,\n\tBlockIcon,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { createInterpolateElement, useMemo } from '@wordpress/element';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { switchToBlockType } from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\n\n/**\n * Given the Link block's type attribute, return the query params to give to\n * /wp/v2/search.\n *\n * @param {string} type Link block's type attribute.\n * @param {string} kind Link block's entity of kind (post-type|taxonomy)\n * @return {{ type?: string, subtype?: string }} Search query params.\n */\nexport function getSuggestionsQuery( type, kind ) {\n\tswitch ( type ) {\n\t\tcase 'post':\n\t\tcase 'page':\n\t\t\treturn { type: 'post', subtype: type };\n\t\tcase 'category':\n\t\t\treturn { type: 'term', subtype: 'category' };\n\t\tcase 'tag':\n\t\t\treturn { type: 'term', subtype: 'post_tag' };\n\t\tcase 'post_format':\n\t\t\treturn { type: 'post-format' };\n\t\tdefault:\n\t\t\tif ( kind === 'taxonomy' ) {\n\t\t\t\treturn { type: 'term', subtype: type };\n\t\t\t}\n\t\t\tif ( kind === 'post-type' ) {\n\t\t\t\treturn { type: 'post', subtype: type };\n\t\t\t}\n\t\t\treturn {};\n\t}\n}\n\n/**\n * Add transforms to Link Control\n *\n * @param {Object} props Component props.\n * @param {string} props.clientId Block client ID.\n */\nfunction LinkControlTransforms( { clientId } ) {\n\tconst { getBlock, blockTransforms } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlock: _getBlock,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetBlockTransformItems,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tgetBlock: _getBlock,\n\t\t\t\tblockTransforms: getBlockTransformItems(\n\t\t\t\t\t_getBlock( clientId ),\n\t\t\t\t\tgetBlockRootClientId( clientId )\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst { replaceBlock } = useDispatch( blockEditorStore );\n\n\tconst featuredBlocks = [\n\t\t'core/page-list',\n\t\t'core/site-logo',\n\t\t'core/social-links',\n\t\t'core/search',\n\t];\n\n\tconst transforms = blockTransforms.filter( ( item ) => {\n\t\treturn featuredBlocks.includes( item.name );\n\t} );\n\n\tif ( ! transforms?.length ) {\n\t\treturn null;\n\t}\n\n\tif ( ! clientId ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className=\"link-control-transform\">\n\t\t\t<h3 className=\"link-control-transform__subheading\">\n\t\t\t\t{ __( 'Transform' ) }\n\t\t\t</h3>\n\t\t\t<div className=\"link-control-transform__items\">\n\t\t\t\t{ transforms.map( ( item, index ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tkey={ `transform-${ index }` }\n\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\treplaceBlock(\n\t\t\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\t\t\tswitchToBlockType(\n\t\t\t\t\t\t\t\t\t\tgetBlock( clientId ),\n\t\t\t\t\t\t\t\t\t\titem.name\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tclassName=\"link-control-transform__item\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<BlockIcon icon={ item.icon } />\n\t\t\t\t\t\t\t{ item.title }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nexport function LinkUI( props ) {\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\n\tasync function handleCreate( pageTitle ) {\n\t\tconst postType = props.link.type || 'page';\n\n\t\tconst page = await saveEntityRecord( 'postType', postType, {\n\t\t\ttitle: pageTitle,\n\t\t\tstatus: 'draft',\n\t\t} );\n\n\t\treturn {\n\t\t\tid: page.id,\n\t\t\ttype: postType,\n\t\t\t// Make `title` property consistent with that in `fetchLinkSuggestions` where the `rendered` title (containing HTML entities)\n\t\t\t// is also being decoded. By being consistent in both locations we avoid having to branch in the rendering output code.\n\t\t\t// Ideally in the future we will update both APIs to utilise the \"raw\" form of the title which is better suited to edit contexts.\n\t\t\t// e.g.\n\t\t\t// - title.raw = \"Yes & No\"\n\t\t\t// - title.rendered = \"Yes & No\"\n\t\t\t// - decodeEntities( title.rendered ) = \"Yes & No\"\n\t\t\t// See:\n\t\t\t// - https://github.com/WordPress/gutenberg/pull/41063\n\t\t\t// - https://github.com/WordPress/gutenberg/blob/a1e1fdc0e6278457e9f4fc0b31ac6d2095f5450b/packages/core-data/src/fetch/__experimental-fetch-link-suggestions.js#L212-L218\n\t\t\ttitle: decodeEntities( page.title.rendered ),\n\t\t\turl: page.link,\n\t\t\tkind: 'post-type',\n\t\t};\n\t}\n\n\tconst { label, url, opensInNewTab, type, kind } = props.link;\n\n\t// Memoize link value to avoid overriding the LinkControl's internal state.\n\t// This is a temporary fix. See https://github.com/WordPress/gutenberg/issues/50976#issuecomment-1568226407.\n\tconst link = useMemo(\n\t\t() => ( {\n\t\t\turl,\n\t\t\topensInNewTab,\n\t\t\ttitle: label && stripHTML( label ),\n\t\t} ),\n\t\t[ label, opensInNewTab, url ]\n\t);\n\n\treturn (\n\t\t<Popover\n\t\t\tplacement=\"bottom\"\n\t\t\tonClose={ props.onClose }\n\t\t\tanchor={ props.anchor }\n\t\t\tshift\n\t\t>\n\t\t\t<LinkControl\n\t\t\t\thasTextControl\n\t\t\t\thasRichPreviews\n\t\t\t\tclassName={ props.className }\n\t\t\t\tvalue={ link }\n\t\t\t\tshowInitialSuggestions={ true }\n\t\t\t\twithCreateSuggestion={ props.hasCreateSuggestion }\n\t\t\t\tcreateSuggestion={ handleCreate }\n\t\t\t\tcreateSuggestionButtonText={ ( searchTerm ) => {\n\t\t\t\t\tlet format;\n\n\t\t\t\t\tif ( type === 'post' ) {\n\t\t\t\t\t\t/* translators: %s: search term. */\n\t\t\t\t\t\tformat = __( 'Create draft post: <mark>%s</mark>' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t/* translators: %s: search term. */\n\t\t\t\t\t\tformat = __( 'Create draft page: <mark>%s</mark>' );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn createInterpolateElement(\n\t\t\t\t\t\tsprintf( format, searchTerm ),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmark: <mark />,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t\tnoDirectEntry={ !! type }\n\t\t\t\tnoURLSuggestion={ !! type }\n\t\t\t\tsuggestionsQuery={ getSuggestionsQuery( type, kind ) }\n\t\t\t\tonChange={ props.onChange }\n\t\t\t\tonRemove={ props.onRemove }\n\t\t\t\tonCancel={ props.onCancel }\n\t\t\t\trenderControlBottom={\n\t\t\t\t\t! url\n\t\t\t\t\t\t? () => (\n\t\t\t\t\t\t\t\t<LinkControlTransforms\n\t\t\t\t\t\t\t\t\tclientId={ props.clientId }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: null\n\t\t\t\t}\n\t\t\t/>\n\t\t</Popover>\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-library/src/navigation-link/link-ui.js"],"names":["getSuggestionsQuery","type","kind","subtype","LinkControlTransforms","clientId","getBlock","blockTransforms","select","_getBlock","getBlockRootClientId","getBlockTransformItems","blockEditorStore","replaceBlock","featuredBlocks","transforms","filter","item","includes","name","length","map","index","icon","title","LinkUI","props","saveEntityRecord","coreStore","pagesPermissions","postsPermissions","handleCreate","pageTitle","postType","link","page","status","id","rendered","url","label","opensInNewTab","userCanCreate","canCreate","onClose","anchor","className","searchTerm","format","mark","onChange","onRemove","onCancel"],"mappings":";;;;;;;;AAWA;;AARA;;AACA;;AACA;;AACA;;AAMA;;AAIA;;AACA;;AACA;;AAlBA;AACA;AACA;;AAkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,mBAAT,CAA8BC,IAA9B,EAAoCC,IAApC,EAA2C;AACjD,UAASD,IAAT;AACC,SAAK,MAAL;AACA,SAAK,MAAL;AACC,aAAO;AAAEA,QAAAA,IAAI,EAAE,MAAR;AAAgBE,QAAAA,OAAO,EAAEF;AAAzB,OAAP;;AACD,SAAK,UAAL;AACC,aAAO;AAAEA,QAAAA,IAAI,EAAE,MAAR;AAAgBE,QAAAA,OAAO,EAAE;AAAzB,OAAP;;AACD,SAAK,KAAL;AACC,aAAO;AAAEF,QAAAA,IAAI,EAAE,MAAR;AAAgBE,QAAAA,OAAO,EAAE;AAAzB,OAAP;;AACD,SAAK,aAAL;AACC,aAAO;AAAEF,QAAAA,IAAI,EAAE;AAAR,OAAP;;AACD;AACC,UAAKC,IAAI,KAAK,UAAd,EAA2B;AAC1B,eAAO;AAAED,UAAAA,IAAI,EAAE,MAAR;AAAgBE,UAAAA,OAAO,EAAEF;AAAzB,SAAP;AACA;;AACD,UAAKC,IAAI,KAAK,WAAd,EAA4B;AAC3B,eAAO;AAAED,UAAAA,IAAI,EAAE,MAAR;AAAgBE,UAAAA,OAAO,EAAEF;AAAzB,SAAP;AACA;;AACD,aAAO,EAAP;AAjBF;AAmBA;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASG,qBAAT,CAAgC;AAAEC,EAAAA;AAAF,CAAhC,EAA+C;AAC9C,QAAM;AAAEC,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,MAAgC,qBACnCC,MAAF,IAAc;AACb,UAAM;AACLF,MAAAA,QAAQ,EAAEG,SADL;AAELC,MAAAA,oBAFK;AAGLC,MAAAA;AAHK,QAIFH,MAAM,CAAEI,kBAAF,CAJV;AAMA,WAAO;AACNN,MAAAA,QAAQ,EAAEG,SADJ;AAENF,MAAAA,eAAe,EAAEI,sBAAsB,CACtCF,SAAS,CAAEJ,QAAF,CAD6B,EAEtCK,oBAAoB,CAAEL,QAAF,CAFkB;AAFjC,KAAP;AAOA,GAfoC,EAgBrC,CAAEA,QAAF,CAhBqC,CAAtC;AAmBA,QAAM;AAAEQ,IAAAA;AAAF,MAAmB,uBAAaD,kBAAb,CAAzB;AAEA,QAAME,cAAc,GAAG,CACtB,gBADsB,EAEtB,gBAFsB,EAGtB,mBAHsB,EAItB,aAJsB,CAAvB;AAOA,QAAMC,UAAU,GAAGR,eAAe,CAACS,MAAhB,CAA0BC,IAAF,IAAY;AACtD,WAAOH,cAAc,CAACI,QAAf,CAAyBD,IAAI,CAACE,IAA9B,CAAP;AACA,GAFkB,CAAnB;;AAIA,MAAK,CAAEJ,UAAU,EAAEK,MAAnB,EAA4B;AAC3B,WAAO,IAAP;AACA;;AAED,MAAK,CAAEf,QAAP,EAAkB;AACjB,WAAO,IAAP;AACA;;AAED,SACC;AAAK,IAAA,SAAS,EAAC;AAAf,KACC;AAAI,IAAA,SAAS,EAAC;AAAd,KACG,cAAI,WAAJ,CADH,CADD,EAIC;AAAK,IAAA,SAAS,EAAC;AAAf,KACGU,UAAU,CAACM,GAAX,CAAgB,CAAEJ,IAAF,EAAQK,KAAR,KAAmB;AACpC,WACC,4BAAC,kBAAD;AACC,MAAA,GAAG,EAAI,aAAaA,KAAO,EAD5B;AAEC,MAAA,OAAO,EAAG,MACTT,YAAY,CACXR,QADW,EAEX,+BACCC,QAAQ,CAAED,QAAF,CADT,EAECY,IAAI,CAACE,IAFN,CAFW,CAHd;AAWC,MAAA,SAAS,EAAC;AAXX,OAaC,4BAAC,sBAAD;AAAW,MAAA,IAAI,EAAGF,IAAI,CAACM;AAAvB,MAbD,EAcGN,IAAI,CAACO,KAdR,CADD;AAkBA,GAnBC,CADH,CAJD,CADD;AA6BA;;AAEM,SAASC,MAAT,CAAiBC,KAAjB,EAAyB;AAC/B,QAAM;AAAEC,IAAAA;AAAF,MAAuB,uBAAaC,eAAb,CAA7B;AACA,QAAMC,gBAAgB,GAAG,sCAAwB,OAAxB,CAAzB;AACA,QAAMC,gBAAgB,GAAG,sCAAwB,OAAxB,CAAzB;;AAEA,iBAAeC,YAAf,CAA6BC,SAA7B,EAAyC;AACxC,UAAMC,QAAQ,GAAGP,KAAK,CAACQ,IAAN,CAAWjC,IAAX,IAAmB,MAApC;AAEA,UAAMkC,IAAI,GAAG,MAAMR,gBAAgB,CAAE,UAAF,EAAcM,QAAd,EAAwB;AAC1DT,MAAAA,KAAK,EAAEQ,SADmD;AAE1DI,MAAAA,MAAM,EAAE;AAFkD,KAAxB,CAAnC;AAKA,WAAO;AACNC,MAAAA,EAAE,EAAEF,IAAI,CAACE,EADH;AAENpC,MAAAA,IAAI,EAAEgC,QAFA;AAGN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAT,MAAAA,KAAK,EAAE,kCAAgBW,IAAI,CAACX,KAAL,CAAWc,QAA3B,CAbD;AAcNC,MAAAA,GAAG,EAAEJ,IAAI,CAACD,IAdJ;AAeNhC,MAAAA,IAAI,EAAE;AAfA,KAAP;AAiBA;;AAED,QAAM;AAAEsC,IAAAA,KAAF;AAASD,IAAAA,GAAT;AAAcE,IAAAA,aAAd;AAA6BxC,IAAAA,IAA7B;AAAmCC,IAAAA;AAAnC,MAA4CwB,KAAK,CAACQ,IAAxD;AAEA,MAAIQ,aAAa,GAAG,KAApB;;AACA,MAAK,CAAEzC,IAAF,IAAUA,IAAI,KAAK,MAAxB,EAAiC;AAChCyC,IAAAA,aAAa,GAAGb,gBAAgB,CAACc,SAAjC;AACA,GAFD,MAEO,IAAK1C,IAAI,KAAK,MAAd,EAAuB;AAC7ByC,IAAAA,aAAa,GAAGZ,gBAAgB,CAACa,SAAjC;AACA,GAvC8B,CAyC/B;AACA;;;AACA,QAAMT,IAAI,GAAG,sBACZ,OAAQ;AACPK,IAAAA,GADO;AAEPE,IAAAA,aAFO;AAGPjB,IAAAA,KAAK,EAAEgB,KAAK,IAAI,8BAAWA,KAAX;AAHT,GAAR,CADY,EAMZ,CAAEA,KAAF,EAASC,aAAT,EAAwBF,GAAxB,CANY,CAAb;AASA,SACC,4BAAC,mBAAD;AACC,IAAA,SAAS,EAAC,QADX;AAEC,IAAA,OAAO,EAAGb,KAAK,CAACkB,OAFjB;AAGC,IAAA,MAAM,EAAGlB,KAAK,CAACmB,MAHhB;AAIC,IAAA,KAAK;AAJN,KAMC,4BAAC,sCAAD;AACC,IAAA,cAAc,MADf;AAEC,IAAA,eAAe,MAFhB;AAGC,IAAA,SAAS,EAAGnB,KAAK,CAACoB,SAHnB;AAIC,IAAA,KAAK,EAAGZ,IAJT;AAKC,IAAA,sBAAsB,EAAG,IAL1B;AAMC,IAAA,oBAAoB,EAAGQ,aANxB;AAOC,IAAA,gBAAgB,EAAGX,YAPpB;AAQC,IAAA,0BAA0B,EAAKgB,UAAF,IAAkB;AAC9C,UAAIC,MAAJ;;AAEA,UAAK/C,IAAI,KAAK,MAAd,EAAuB;AACtB;AACA+C,QAAAA,MAAM,GAAG,cAAI,oCAAJ,CAAT;AACA,OAHD,MAGO;AACN;AACAA,QAAAA,MAAM,GAAG,cAAI,oCAAJ,CAAT;AACA;;AAED,aAAO,uCACN,mBAASA,MAAT,EAAiBD,UAAjB,CADM,EAEN;AACCE,QAAAA,IAAI,EAAE;AADP,OAFM,CAAP;AAMA,KAzBF;AA0BC,IAAA,aAAa,EAAG,CAAC,CAAEhD,IA1BpB;AA2BC,IAAA,eAAe,EAAG,CAAC,CAAEA,IA3BtB;AA4BC,IAAA,gBAAgB,EAAGD,mBAAmB,CAAEC,IAAF,EAAQC,IAAR,CA5BvC;AA6BC,IAAA,QAAQ,EAAGwB,KAAK,CAACwB,QA7BlB;AA8BC,IAAA,QAAQ,EAAGxB,KAAK,CAACyB,QA9BlB;AA+BC,IAAA,QAAQ,EAAGzB,KAAK,CAAC0B,QA/BlB;AAgCC,IAAA,mBAAmB,EAClB,CAAEb,GAAF,GACG,MACA,4BAAC,qBAAD;AACC,MAAA,QAAQ,EAAGb,KAAK,CAACrB;AADlB,MAFH,GAMG;AAvCL,IAND,CADD;AAmDA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport { Popover, Button } from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\t__experimentalLinkControl as LinkControl,\n\tBlockIcon,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { createInterpolateElement, useMemo } from '@wordpress/element';\nimport {\n\tstore as coreStore,\n\tuseResourcePermissions,\n} from '@wordpress/core-data';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { switchToBlockType } from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\n\n/**\n * Given the Link block's type attribute, return the query params to give to\n * /wp/v2/search.\n *\n * @param {string} type Link block's type attribute.\n * @param {string} kind Link block's entity of kind (post-type|taxonomy)\n * @return {{ type?: string, subtype?: string }} Search query params.\n */\nexport function getSuggestionsQuery( type, kind ) {\n\tswitch ( type ) {\n\t\tcase 'post':\n\t\tcase 'page':\n\t\t\treturn { type: 'post', subtype: type };\n\t\tcase 'category':\n\t\t\treturn { type: 'term', subtype: 'category' };\n\t\tcase 'tag':\n\t\t\treturn { type: 'term', subtype: 'post_tag' };\n\t\tcase 'post_format':\n\t\t\treturn { type: 'post-format' };\n\t\tdefault:\n\t\t\tif ( kind === 'taxonomy' ) {\n\t\t\t\treturn { type: 'term', subtype: type };\n\t\t\t}\n\t\t\tif ( kind === 'post-type' ) {\n\t\t\t\treturn { type: 'post', subtype: type };\n\t\t\t}\n\t\t\treturn {};\n\t}\n}\n\n/**\n * Add transforms to Link Control\n *\n * @param {Object} props Component props.\n * @param {string} props.clientId Block client ID.\n */\nfunction LinkControlTransforms( { clientId } ) {\n\tconst { getBlock, blockTransforms } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlock: _getBlock,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\tgetBlockTransformItems,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tgetBlock: _getBlock,\n\t\t\t\tblockTransforms: getBlockTransformItems(\n\t\t\t\t\t_getBlock( clientId ),\n\t\t\t\t\tgetBlockRootClientId( clientId )\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst { replaceBlock } = useDispatch( blockEditorStore );\n\n\tconst featuredBlocks = [\n\t\t'core/page-list',\n\t\t'core/site-logo',\n\t\t'core/social-links',\n\t\t'core/search',\n\t];\n\n\tconst transforms = blockTransforms.filter( ( item ) => {\n\t\treturn featuredBlocks.includes( item.name );\n\t} );\n\n\tif ( ! transforms?.length ) {\n\t\treturn null;\n\t}\n\n\tif ( ! clientId ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className=\"link-control-transform\">\n\t\t\t<h3 className=\"link-control-transform__subheading\">\n\t\t\t\t{ __( 'Transform' ) }\n\t\t\t</h3>\n\t\t\t<div className=\"link-control-transform__items\">\n\t\t\t\t{ transforms.map( ( item, index ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tkey={ `transform-${ index }` }\n\t\t\t\t\t\t\tonClick={ () =>\n\t\t\t\t\t\t\t\treplaceBlock(\n\t\t\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\t\t\tswitchToBlockType(\n\t\t\t\t\t\t\t\t\t\tgetBlock( clientId ),\n\t\t\t\t\t\t\t\t\t\titem.name\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tclassName=\"link-control-transform__item\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<BlockIcon icon={ item.icon } />\n\t\t\t\t\t\t\t{ item.title }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nexport function LinkUI( props ) {\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\tconst pagesPermissions = useResourcePermissions( 'pages' );\n\tconst postsPermissions = useResourcePermissions( 'posts' );\n\n\tasync function handleCreate( pageTitle ) {\n\t\tconst postType = props.link.type || 'page';\n\n\t\tconst page = await saveEntityRecord( 'postType', postType, {\n\t\t\ttitle: pageTitle,\n\t\t\tstatus: 'draft',\n\t\t} );\n\n\t\treturn {\n\t\t\tid: page.id,\n\t\t\ttype: postType,\n\t\t\t// Make `title` property consistent with that in `fetchLinkSuggestions` where the `rendered` title (containing HTML entities)\n\t\t\t// is also being decoded. By being consistent in both locations we avoid having to branch in the rendering output code.\n\t\t\t// Ideally in the future we will update both APIs to utilise the \"raw\" form of the title which is better suited to edit contexts.\n\t\t\t// e.g.\n\t\t\t// - title.raw = \"Yes & No\"\n\t\t\t// - title.rendered = \"Yes & No\"\n\t\t\t// - decodeEntities( title.rendered ) = \"Yes & No\"\n\t\t\t// See:\n\t\t\t// - https://github.com/WordPress/gutenberg/pull/41063\n\t\t\t// - https://github.com/WordPress/gutenberg/blob/a1e1fdc0e6278457e9f4fc0b31ac6d2095f5450b/packages/core-data/src/fetch/__experimental-fetch-link-suggestions.js#L212-L218\n\t\t\ttitle: decodeEntities( page.title.rendered ),\n\t\t\turl: page.link,\n\t\t\tkind: 'post-type',\n\t\t};\n\t}\n\n\tconst { label, url, opensInNewTab, type, kind } = props.link;\n\n\tlet userCanCreate = false;\n\tif ( ! type || type === 'page' ) {\n\t\tuserCanCreate = pagesPermissions.canCreate;\n\t} else if ( type === 'post' ) {\n\t\tuserCanCreate = postsPermissions.canCreate;\n\t}\n\n\t// Memoize link value to avoid overriding the LinkControl's internal state.\n\t// This is a temporary fix. See https://github.com/WordPress/gutenberg/issues/50976#issuecomment-1568226407.\n\tconst link = useMemo(\n\t\t() => ( {\n\t\t\turl,\n\t\t\topensInNewTab,\n\t\t\ttitle: label && stripHTML( label ),\n\t\t} ),\n\t\t[ label, opensInNewTab, url ]\n\t);\n\n\treturn (\n\t\t<Popover\n\t\t\tplacement=\"bottom\"\n\t\t\tonClose={ props.onClose }\n\t\t\tanchor={ props.anchor }\n\t\t\tshift\n\t\t>\n\t\t\t<LinkControl\n\t\t\t\thasTextControl\n\t\t\t\thasRichPreviews\n\t\t\t\tclassName={ props.className }\n\t\t\t\tvalue={ link }\n\t\t\t\tshowInitialSuggestions={ true }\n\t\t\t\twithCreateSuggestion={ userCanCreate }\n\t\t\t\tcreateSuggestion={ handleCreate }\n\t\t\t\tcreateSuggestionButtonText={ ( searchTerm ) => {\n\t\t\t\t\tlet format;\n\n\t\t\t\t\tif ( type === 'post' ) {\n\t\t\t\t\t\t/* translators: %s: search term. */\n\t\t\t\t\t\tformat = __( 'Create draft post: <mark>%s</mark>' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t/* translators: %s: search term. */\n\t\t\t\t\t\tformat = __( 'Create draft page: <mark>%s</mark>' );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn createInterpolateElement(\n\t\t\t\t\t\tsprintf( format, searchTerm ),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmark: <mark />,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t\tnoDirectEntry={ !! type }\n\t\t\t\tnoURLSuggestion={ !! type }\n\t\t\t\tsuggestionsQuery={ getSuggestionsQuery( type, kind ) }\n\t\t\t\tonChange={ props.onChange }\n\t\t\t\tonRemove={ props.onRemove }\n\t\t\t\tonCancel={ props.onCancel }\n\t\t\t\trenderControlBottom={\n\t\t\t\t\t! url\n\t\t\t\t\t\t? () => (\n\t\t\t\t\t\t\t\t<LinkControlTransforms\n\t\t\t\t\t\t\t\t\tclientId={ props.clientId }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t )\n\t\t\t\t\t\t: null\n\t\t\t\t}\n\t\t\t/>\n\t\t</Popover>\n\t);\n}\n"]}
|