@wordpress/block-library 9.38.0 → 9.39.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/block/block.json +2 -1
- package/build/breadcrumbs/edit.cjs +15 -5
- package/build/breadcrumbs/edit.cjs.map +2 -2
- package/build/breadcrumbs/index.cjs +1 -0
- package/build/breadcrumbs/index.cjs.map +2 -2
- package/build/button/index.cjs +3 -0
- package/build/button/index.cjs.map +2 -2
- package/build/comment-date/block.json +1 -0
- package/build/comment-edit-link/block.json +1 -3
- package/build/comment-edit-link/deprecated.cjs +91 -0
- package/build/comment-edit-link/deprecated.cjs.map +7 -0
- package/build/comment-edit-link/edit.cjs +6 -18
- package/build/comment-edit-link/edit.cjs.map +3 -3
- package/build/comment-edit-link/index.cjs +2 -0
- package/build/comment-edit-link/index.cjs.map +3 -3
- package/build/comment-reply-link/block.json +1 -5
- package/build/comment-reply-link/deprecated.cjs +84 -0
- package/build/comment-reply-link/deprecated.cjs.map +7 -0
- package/build/comment-reply-link/edit.cjs +10 -23
- package/build/comment-reply-link/edit.cjs.map +3 -3
- package/build/comment-reply-link/index.cjs +2 -0
- package/build/comment-reply-link/index.cjs.map +3 -3
- package/build/comments-title/block.json +1 -3
- package/build/comments-title/deprecated.cjs +148 -24
- package/build/comments-title/deprecated.cjs.map +3 -3
- package/build/comments-title/edit.cjs +17 -31
- package/build/comments-title/edit.cjs.map +3 -3
- package/build/cover/edit/block-controls.cjs +10 -2
- package/build/cover/edit/block-controls.cjs.map +2 -2
- package/build/cover/edit/embed-video-url-input.cjs +6 -2
- package/build/cover/edit/embed-video-url-input.cjs.map +2 -2
- package/build/cover/edit/inspector-controls.cjs +1 -1
- package/build/cover/edit/inspector-controls.cjs.map +2 -2
- package/build/details/index.cjs +3 -0
- package/build/details/index.cjs.map +2 -2
- package/build/embed/util.cjs +9 -0
- package/build/embed/util.cjs.map +2 -2
- package/build/freeform/block.json +2 -1
- package/build/heading/index.cjs +3 -0
- package/build/heading/index.cjs.map +2 -2
- package/build/html/block.json +2 -1
- package/build/image/image.cjs +43 -9
- package/build/image/image.cjs.map +2 -2
- package/build/image/index.cjs +1 -1
- package/build/image/index.cjs.map +2 -2
- package/build/index.cjs +6 -0
- package/build/index.cjs.map +2 -2
- package/build/list-item/index.cjs +12 -1
- package/build/list-item/index.cjs.map +2 -2
- package/build/missing/block.json +2 -1
- package/build/more/block.json +2 -1
- package/build/more/index.cjs +1 -1
- package/build/more/index.cjs.map +2 -2
- package/build/navigation/block.json +5 -4
- package/build/navigation/deprecated.cjs +133 -5
- package/build/navigation/deprecated.cjs.map +2 -2
- package/build/navigation/edit/deleted-overlay-warning.cjs +70 -0
- package/build/navigation/edit/deleted-overlay-warning.cjs.map +7 -0
- package/build/navigation/edit/index.cjs +143 -65
- package/build/navigation/edit/index.cjs.map +3 -3
- package/build/navigation/edit/overlay-panel.cjs +10 -1
- package/build/navigation/edit/overlay-panel.cjs.map +3 -3
- package/build/navigation/edit/overlay-preview.cjs +120 -0
- package/build/navigation/edit/overlay-preview.cjs.map +7 -0
- package/build/navigation/edit/overlay-template-part-selector.cjs +59 -24
- package/build/navigation/edit/overlay-template-part-selector.cjs.map +3 -3
- package/build/navigation/edit/responsive-wrapper.cjs +12 -1
- package/build/navigation/edit/responsive-wrapper.cjs.map +3 -3
- package/build/navigation/edit/use-create-overlay.cjs +19 -2
- package/build/navigation/edit/use-create-overlay.cjs.map +3 -3
- package/build/navigation/utils/get-submenu-visibility.cjs +37 -0
- package/build/navigation/utils/get-submenu-visibility.cjs.map +7 -0
- package/build/navigation-link/edit.cjs +2 -40
- package/build/navigation-link/edit.cjs.map +2 -2
- package/build/navigation-link/shared/index.cjs +6 -0
- package/build/navigation-link/shared/index.cjs.map +2 -2
- package/build/navigation-link/shared/select-label-text.cjs +40 -0
- package/build/navigation-link/shared/select-label-text.cjs.map +7 -0
- package/build/navigation-link/shared/use-is-dragging-within.cjs +59 -0
- package/build/navigation-link/shared/use-is-dragging-within.cjs.map +7 -0
- package/build/navigation-submenu/block.json +1 -1
- package/build/navigation-submenu/edit.cjs +8 -47
- package/build/navigation-submenu/edit.cjs.map +2 -2
- package/build/navigation-submenu/index.cjs +2 -2
- package/build/navigation-submenu/index.cjs.map +2 -2
- package/build/nextpage/block.json +2 -1
- package/build/paragraph/block.json +1 -0
- package/build/paragraph/index.cjs +1 -1
- package/build/paragraph/index.cjs.map +2 -2
- package/build/post-excerpt/edit.cjs +1 -1
- package/build/post-excerpt/edit.cjs.map +2 -2
- package/build/shortcode/block.json +2 -1
- package/build/tab/add-tab-toolbar-control.cjs +31 -9
- package/build/tab/add-tab-toolbar-control.cjs.map +2 -2
- package/build/tab/block.json +18 -4
- package/build/tab/controls.cjs +4 -8
- package/build/tab/controls.cjs.map +3 -3
- package/build/tab/edit.cjs +46 -118
- package/build/tab/edit.cjs.map +3 -3
- package/build/tab/remove-tab-toolbar-control.cjs +91 -0
- package/build/tab/remove-tab-toolbar-control.cjs.map +7 -0
- package/build/tab/save.cjs +2 -2
- package/build/tab/save.cjs.map +2 -2
- package/build/tab-panels/block.json +70 -0
- package/build/tab-panels/edit.cjs +63 -0
- package/build/tab-panels/edit.cjs.map +7 -0
- package/build/tab-panels/icon.cjs +29 -0
- package/build/tab-panels/icon.cjs.map +7 -0
- package/build/tab-panels/index.cjs +58 -0
- package/build/tab-panels/index.cjs.map +7 -0
- package/build/tab-panels/save.cjs +33 -0
- package/build/tab-panels/save.cjs.map +7 -0
- package/build/tabs/block.json +61 -90
- package/build/tabs/controls.cjs +19 -221
- package/build/tabs/controls.cjs.map +3 -3
- package/build/tabs/deprecated.cjs +179 -0
- package/build/tabs/deprecated.cjs.map +7 -0
- package/build/tabs/edit.cjs +84 -62
- package/build/tabs/edit.cjs.map +3 -3
- package/build/tabs/index.cjs +3 -1
- package/build/tabs/index.cjs.map +3 -3
- package/build/tabs/save.cjs +6 -9
- package/build/tabs/save.cjs.map +2 -2
- package/build/tabs-menu/block.json +77 -0
- package/build/tabs-menu/edit.cjs +204 -0
- package/build/tabs-menu/edit.cjs.map +7 -0
- package/build/tabs-menu/icon.cjs +29 -0
- package/build/tabs-menu/icon.cjs.map +7 -0
- package/build/tabs-menu/index.cjs +58 -0
- package/build/tabs-menu/index.cjs.map +7 -0
- package/build/tabs-menu/save.cjs +35 -0
- package/build/tabs-menu/save.cjs.map +7 -0
- package/build/tabs-menu-item/block.json +98 -0
- package/build/tabs-menu-item/controls.cjs +247 -0
- package/build/tabs-menu-item/controls.cjs.map +7 -0
- package/build/tabs-menu-item/edit.cjs +272 -0
- package/build/tabs-menu-item/edit.cjs.map +7 -0
- package/build/tabs-menu-item/icon.cjs +29 -0
- package/build/tabs-menu-item/icon.cjs.map +7 -0
- package/build/tabs-menu-item/index.cjs +58 -0
- package/build/tabs-menu-item/index.cjs.map +7 -0
- package/build/tabs-menu-item/save.cjs +50 -0
- package/build/tabs-menu-item/save.cjs.map +7 -0
- package/build/template-part/edit/index.cjs +2 -2
- package/build/template-part/edit/index.cjs.map +2 -2
- package/build/utils/caption.cjs +4 -6
- package/build/utils/caption.cjs.map +3 -3
- package/build/verse/block.json +1 -3
- package/build/verse/deprecated.cjs +74 -5
- package/build/verse/deprecated.cjs.map +3 -3
- package/build/verse/edit.cjs +33 -48
- package/build/verse/edit.cjs.map +3 -3
- package/build/verse/save.cjs +2 -16
- package/build/verse/save.cjs.map +3 -3
- package/build/video/edit.cjs +4 -2
- package/build/video/edit.cjs.map +2 -2
- package/build-module/block/block.json +2 -1
- package/build-module/breadcrumbs/edit.mjs +15 -5
- package/build-module/breadcrumbs/edit.mjs.map +2 -2
- package/build-module/breadcrumbs/index.mjs +1 -0
- package/build-module/breadcrumbs/index.mjs.map +2 -2
- package/build-module/button/index.mjs +3 -0
- package/build-module/button/index.mjs.map +2 -2
- package/build-module/comment-date/block.json +1 -0
- package/build-module/comment-edit-link/block.json +1 -3
- package/build-module/comment-edit-link/deprecated.mjs +60 -0
- package/build-module/comment-edit-link/deprecated.mjs.map +7 -0
- package/build-module/comment-edit-link/edit.mjs +7 -24
- package/build-module/comment-edit-link/edit.mjs.map +2 -2
- package/build-module/comment-edit-link/index.mjs +2 -0
- package/build-module/comment-edit-link/index.mjs.map +2 -2
- package/build-module/comment-reply-link/block.json +1 -5
- package/build-module/comment-reply-link/deprecated.mjs +53 -0
- package/build-module/comment-reply-link/deprecated.mjs.map +7 -0
- package/build-module/comment-reply-link/edit.mjs +12 -29
- package/build-module/comment-reply-link/edit.mjs.map +2 -2
- package/build-module/comment-reply-link/index.mjs +2 -0
- package/build-module/comment-reply-link/index.mjs.map +2 -2
- package/build-module/comments-title/block.json +1 -3
- package/build-module/comments-title/deprecated.mjs +148 -24
- package/build-module/comments-title/deprecated.mjs.map +2 -2
- package/build-module/comments-title/edit.mjs +17 -32
- package/build-module/comments-title/edit.mjs.map +2 -2
- package/build-module/cover/edit/block-controls.mjs +11 -3
- package/build-module/cover/edit/block-controls.mjs.map +2 -2
- package/build-module/cover/edit/embed-video-url-input.mjs +6 -2
- package/build-module/cover/edit/embed-video-url-input.mjs.map +2 -2
- package/build-module/cover/edit/inspector-controls.mjs +1 -1
- package/build-module/cover/edit/inspector-controls.mjs.map +2 -2
- package/build-module/details/index.mjs +3 -0
- package/build-module/details/index.mjs.map +2 -2
- package/build-module/embed/util.mjs +8 -0
- package/build-module/embed/util.mjs.map +2 -2
- package/build-module/freeform/block.json +2 -1
- package/build-module/heading/index.mjs +3 -0
- package/build-module/heading/index.mjs.map +2 -2
- package/build-module/html/block.json +2 -1
- package/build-module/image/image.mjs +43 -9
- package/build-module/image/image.mjs.map +2 -2
- package/build-module/image/index.mjs +1 -1
- package/build-module/image/index.mjs.map +2 -2
- package/build-module/index.mjs +6 -0
- package/build-module/index.mjs.map +2 -2
- package/build-module/list-item/index.mjs +12 -1
- package/build-module/list-item/index.mjs.map +2 -2
- package/build-module/missing/block.json +2 -1
- package/build-module/more/block.json +2 -1
- package/build-module/more/index.mjs +1 -1
- package/build-module/more/index.mjs.map +2 -2
- package/build-module/navigation/block.json +5 -4
- package/build-module/navigation/deprecated.mjs +133 -5
- package/build-module/navigation/deprecated.mjs.map +2 -2
- package/build-module/navigation/edit/deleted-overlay-warning.mjs +49 -0
- package/build-module/navigation/edit/deleted-overlay-warning.mjs.map +7 -0
- package/build-module/navigation/edit/index.mjs +145 -65
- package/build-module/navigation/edit/index.mjs.map +2 -2
- package/build-module/navigation/edit/overlay-panel.mjs +10 -1
- package/build-module/navigation/edit/overlay-panel.mjs.map +2 -2
- package/build-module/navigation/edit/overlay-preview.mjs +99 -0
- package/build-module/navigation/edit/overlay-preview.mjs.map +7 -0
- package/build-module/navigation/edit/overlay-template-part-selector.mjs +61 -26
- package/build-module/navigation/edit/overlay-template-part-selector.mjs.map +2 -2
- package/build-module/navigation/edit/responsive-wrapper.mjs +12 -1
- package/build-module/navigation/edit/responsive-wrapper.mjs.map +2 -2
- package/build-module/navigation/edit/use-create-overlay.mjs +21 -4
- package/build-module/navigation/edit/use-create-overlay.mjs.map +2 -2
- package/build-module/navigation/utils/get-submenu-visibility.mjs +12 -0
- package/build-module/navigation/utils/get-submenu-visibility.mjs.map +7 -0
- package/build-module/navigation-link/edit.mjs +4 -40
- package/build-module/navigation-link/edit.mjs.map +2 -2
- package/build-module/navigation-link/shared/index.mjs +4 -0
- package/build-module/navigation-link/shared/index.mjs.map +2 -2
- package/build-module/navigation-link/shared/select-label-text.mjs +15 -0
- package/build-module/navigation-link/shared/select-label-text.mjs.map +7 -0
- package/build-module/navigation-link/shared/use-is-dragging-within.mjs +34 -0
- package/build-module/navigation-link/shared/use-is-dragging-within.mjs.map +7 -0
- package/build-module/navigation-submenu/block.json +1 -1
- package/build-module/navigation-submenu/edit.mjs +10 -47
- package/build-module/navigation-submenu/edit.mjs.map +2 -2
- package/build-module/navigation-submenu/index.mjs +2 -2
- package/build-module/navigation-submenu/index.mjs.map +2 -2
- package/build-module/nextpage/block.json +2 -1
- package/build-module/paragraph/block.json +1 -0
- package/build-module/paragraph/index.mjs +1 -1
- package/build-module/paragraph/index.mjs.map +2 -2
- package/build-module/post-excerpt/edit.mjs +1 -1
- package/build-module/post-excerpt/edit.mjs.map +2 -2
- package/build-module/shortcode/block.json +2 -1
- package/build-module/tab/add-tab-toolbar-control.mjs +32 -10
- package/build-module/tab/add-tab-toolbar-control.mjs.map +2 -2
- package/build-module/tab/block.json +18 -4
- package/build-module/tab/controls.mjs +4 -8
- package/build-module/tab/controls.mjs.map +2 -2
- package/build-module/tab/edit.mjs +48 -128
- package/build-module/tab/edit.mjs.map +2 -2
- package/build-module/tab/remove-tab-toolbar-control.mjs +73 -0
- package/build-module/tab/remove-tab-toolbar-control.mjs.map +7 -0
- package/build-module/tab/save.mjs +2 -2
- package/build-module/tab/save.mjs.map +2 -2
- package/build-module/tab-panels/block.json +70 -0
- package/build-module/tab-panels/edit.mjs +36 -0
- package/build-module/tab-panels/edit.mjs.map +7 -0
- package/build-module/tab-panels/icon.mjs +8 -0
- package/build-module/tab-panels/icon.mjs.map +7 -0
- package/build-module/tab-panels/index.mjs +20 -0
- package/build-module/tab-panels/index.mjs.map +7 -0
- package/build-module/tab-panels/save.mjs +12 -0
- package/build-module/tab-panels/save.mjs.map +7 -0
- package/build-module/tabs/block.json +61 -90
- package/build-module/tabs/controls.mjs +21 -228
- package/build-module/tabs/controls.mjs.map +2 -2
- package/build-module/tabs/deprecated.mjs +158 -0
- package/build-module/tabs/deprecated.mjs.map +7 -0
- package/build-module/tabs/edit.mjs +87 -64
- package/build-module/tabs/edit.mjs.map +2 -2
- package/build-module/tabs/index.mjs +3 -1
- package/build-module/tabs/index.mjs.map +2 -2
- package/build-module/tabs/save.mjs +7 -10
- package/build-module/tabs/save.mjs.map +2 -2
- package/build-module/tabs-menu/block.json +77 -0
- package/build-module/tabs-menu/edit.mjs +186 -0
- package/build-module/tabs-menu/edit.mjs.map +7 -0
- package/build-module/tabs-menu/icon.mjs +8 -0
- package/build-module/tabs-menu/icon.mjs.map +7 -0
- package/build-module/tabs-menu/index.mjs +20 -0
- package/build-module/tabs-menu/index.mjs.map +7 -0
- package/build-module/tabs-menu/save.mjs +14 -0
- package/build-module/tabs-menu/save.mjs.map +7 -0
- package/build-module/tabs-menu-item/block.json +98 -0
- package/build-module/tabs-menu-item/controls.mjs +227 -0
- package/build-module/tabs-menu-item/controls.mjs.map +7 -0
- package/build-module/tabs-menu-item/edit.mjs +253 -0
- package/build-module/tabs-menu-item/edit.mjs.map +7 -0
- package/build-module/tabs-menu-item/icon.mjs +8 -0
- package/build-module/tabs-menu-item/icon.mjs.map +7 -0
- package/build-module/tabs-menu-item/index.mjs +20 -0
- package/build-module/tabs-menu-item/index.mjs.map +7 -0
- package/build-module/tabs-menu-item/save.mjs +29 -0
- package/build-module/tabs-menu-item/save.mjs.map +7 -0
- package/build-module/template-part/edit/index.mjs +2 -2
- package/build-module/template-part/edit/index.mjs.map +2 -2
- package/build-module/utils/caption.mjs +1 -3
- package/build-module/utils/caption.mjs.map +2 -2
- package/build-module/verse/block.json +1 -3
- package/build-module/verse/deprecated.mjs +74 -5
- package/build-module/verse/deprecated.mjs.map +2 -2
- package/build-module/verse/edit.mjs +35 -55
- package/build-module/verse/edit.mjs.map +2 -2
- package/build-module/verse/save.mjs +2 -6
- package/build-module/verse/save.mjs.map +2 -2
- package/build-module/video/edit.mjs +4 -2
- package/build-module/video/edit.mjs.map +2 -2
- package/build-style/editor-rtl.css +64 -21
- package/build-style/editor.css +64 -21
- package/build-style/gallery/style-rtl.css +1 -1
- package/build-style/gallery/style.css +1 -1
- package/build-style/media-text/style-rtl.css +2 -0
- package/build-style/media-text/style.css +2 -0
- package/build-style/navigation/editor-rtl.css +48 -0
- package/build-style/navigation/editor.css +48 -0
- package/build-style/navigation/style-rtl.css +64 -18
- package/build-style/navigation/style.css +64 -18
- package/build-style/style-rtl.css +109 -171
- package/build-style/style.css +109 -171
- package/build-style/tab/style-rtl.css +7 -1
- package/build-style/tab/style.css +7 -1
- package/build-style/tab-panels/style-rtl.css +4 -0
- package/build-style/tab-panels/style.css +4 -0
- package/build-style/tabs/style-rtl.css +1 -167
- package/build-style/tabs/style.css +1 -167
- package/build-style/tabs-menu/editor-rtl.css +4 -0
- package/build-style/tabs-menu/editor.css +4 -0
- package/build-style/tabs-menu/style-rtl.css +8 -0
- package/build-style/tabs-menu/style.css +8 -0
- package/build-style/tabs-menu-item/editor-rtl.css +16 -0
- package/build-style/tabs-menu-item/editor.css +16 -0
- package/build-style/tabs-menu-item/style-rtl.css +34 -0
- package/build-style/tabs-menu-item/style.css +34 -0
- package/build-style/verse/style-rtl.css +1 -0
- package/build-style/verse/style.css +1 -0
- package/package.json +37 -37
- package/src/block/block.json +2 -1
- package/src/breadcrumbs/edit.js +10 -2
- package/src/breadcrumbs/index.js +1 -0
- package/src/button/index.js +4 -0
- package/src/categories/index.php +5 -1
- package/src/comment-date/block.json +1 -0
- package/src/comment-edit-link/block.json +1 -3
- package/src/comment-edit-link/deprecated.js +63 -0
- package/src/comment-edit-link/edit.js +7 -31
- package/src/comment-edit-link/index.js +2 -0
- package/src/comment-reply-link/block.json +1 -5
- package/src/comment-reply-link/deprecated.js +56 -0
- package/src/comment-reply-link/edit.js +6 -35
- package/src/comment-reply-link/index.js +2 -0
- package/src/comments-title/block.json +1 -3
- package/src/comments-title/deprecated.js +153 -23
- package/src/comments-title/edit.js +9 -25
- package/src/cover/edit/block-controls.js +14 -3
- package/src/cover/edit/embed-video-url-input.js +6 -2
- package/src/cover/edit/inspector-controls.js +1 -3
- package/src/details/index.js +4 -0
- package/src/editor.scss +2 -1
- package/src/embed/test/index.js +49 -0
- package/src/embed/util.js +21 -0
- package/src/freeform/block.json +2 -1
- package/src/gallery/style.scss +1 -1
- package/src/heading/index.js +4 -0
- package/src/html/block.json +2 -1
- package/src/image/image.js +63 -11
- package/src/image/index.js +4 -1
- package/src/index.js +6 -0
- package/src/list-item/index.js +16 -0
- package/src/media-text/style.scss +2 -0
- package/src/missing/block.json +2 -1
- package/src/more/block.json +2 -1
- package/src/more/index.js +4 -1
- package/src/navigation/block.json +5 -4
- package/src/navigation/deprecated.js +144 -5
- package/src/navigation/edit/deleted-overlay-warning.js +56 -0
- package/src/navigation/edit/index.js +181 -70
- package/src/navigation/edit/overlay-panel.js +10 -0
- package/src/navigation/edit/overlay-preview.js +133 -0
- package/src/navigation/edit/overlay-template-part-selector.js +76 -26
- package/src/navigation/edit/responsive-wrapper.js +14 -1
- package/src/navigation/edit/test/overlay-template-part-selector.js +24 -16
- package/src/navigation/edit/test/responsive-wrapper.js +179 -0
- package/src/navigation/edit/test/use-create-overlay.js +129 -2
- package/src/navigation/edit/use-create-overlay.js +26 -4
- package/src/navigation/editor.scss +51 -0
- package/src/navigation/index.php +59 -11
- package/src/navigation/style.scss +140 -76
- package/src/navigation/utils/get-submenu-visibility.js +27 -0
- package/src/navigation/utils/test/get-submenu-visibility.js +47 -0
- package/src/navigation-link/edit.js +3 -67
- package/src/navigation-link/shared/index.js +2 -0
- package/src/navigation-link/shared/select-label-text.js +16 -0
- package/src/navigation-link/shared/use-is-dragging-within.js +55 -0
- package/src/navigation-submenu/block.json +1 -1
- package/src/navigation-submenu/edit.js +10 -73
- package/src/navigation-submenu/index.js +6 -3
- package/src/navigation-submenu/index.php +36 -5
- package/src/nextpage/block.json +2 -1
- package/src/paragraph/block.json +1 -0
- package/src/paragraph/index.js +4 -1
- package/src/post-excerpt/edit.js +1 -1
- package/src/post-excerpt/index.php +39 -16
- package/src/shortcode/block.json +2 -1
- package/src/style.scss +3 -0
- package/src/tab/add-tab-toolbar-control.js +36 -11
- package/src/tab/block.json +18 -4
- package/src/tab/controls.js +4 -5
- package/src/tab/edit.js +75 -150
- package/src/tab/index.php +5 -63
- package/src/tab/remove-tab-toolbar-control.js +103 -0
- package/src/tab/save.js +1 -3
- package/src/tab/style.scss +8 -1
- package/src/tab-panels/block.json +70 -0
- package/src/tab-panels/edit.js +44 -0
- package/src/tab-panels/icon.js +10 -0
- package/src/tab-panels/index.js +21 -0
- package/src/tab-panels/save.js +11 -0
- package/src/tab-panels/style.scss +4 -0
- package/src/tabs/block.json +61 -90
- package/src/tabs/controls.js +7 -221
- package/src/tabs/deprecated.js +214 -0
- package/src/tabs/edit.js +108 -68
- package/src/tabs/index.js +2 -0
- package/src/tabs/index.php +86 -191
- package/src/tabs/save.js +6 -13
- package/src/tabs/style.scss +1 -187
- package/src/tabs-menu/block.json +77 -0
- package/src/tabs-menu/edit.js +251 -0
- package/src/tabs-menu/editor.scss +6 -0
- package/src/tabs-menu/icon.js +10 -0
- package/src/tabs-menu/index.js +21 -0
- package/src/tabs-menu/index.php +74 -0
- package/src/tabs-menu/save.js +18 -0
- package/src/tabs-menu/style.scss +8 -0
- package/src/tabs-menu-item/block.json +98 -0
- package/src/tabs-menu-item/controls.js +262 -0
- package/src/tabs-menu-item/edit.js +322 -0
- package/src/tabs-menu-item/editor.scss +20 -0
- package/src/tabs-menu-item/icon.js +10 -0
- package/src/tabs-menu-item/index.js +21 -0
- package/src/tabs-menu-item/index.php +82 -0
- package/src/tabs-menu-item/save.js +44 -0
- package/src/tabs-menu-item/style.scss +42 -0
- package/src/template-part/edit/index.js +2 -4
- package/src/utils/caption.js +1 -7
- package/src/verse/block.json +1 -3
- package/src/verse/deprecated.js +83 -4
- package/src/verse/edit.js +37 -56
- package/src/verse/save.js +2 -11
- package/src/verse/style.scss +1 -0
- package/src/video/edit.js +4 -2
- package/build/tab/tabs-list.cjs +0 -132
- package/build/tab/tabs-list.cjs.map +0 -7
- package/build/tabs/style-engine.cjs +0 -119
- package/build/tabs/style-engine.cjs.map +0 -7
- package/build-module/tab/tabs-list.mjs +0 -101
- package/build-module/tab/tabs-list.mjs.map +0 -7
- package/build-module/tabs/style-engine.mjs +0 -101
- package/build-module/tabs/style-engine.mjs.map +0 -7
- package/build-style/tabs/editor-rtl.css +0 -26
- package/build-style/tabs/editor.css +0 -26
- package/src/tab/tabs-list.js +0 -122
- package/src/tabs/editor.scss +0 -30
- package/src/tabs/style-engine.js +0 -164
|
@@ -29,12 +29,13 @@ import {
|
|
|
29
29
|
BlockControls,
|
|
30
30
|
} from '@wordpress/block-editor';
|
|
31
31
|
import { EntityProvider, store as coreStore } from '@wordpress/core-data';
|
|
32
|
-
|
|
33
32
|
import { useDispatch, useSelect } from '@wordpress/data';
|
|
34
33
|
import {
|
|
35
34
|
__experimentalToolsPanel as ToolsPanel,
|
|
36
35
|
__experimentalToolsPanelItem as ToolsPanelItem,
|
|
37
36
|
ToggleControl,
|
|
37
|
+
__experimentalToggleGroupControl as ToggleGroupControl,
|
|
38
|
+
__experimentalToggleGroupControlOption as ToggleGroupControlOption,
|
|
38
39
|
Spinner,
|
|
39
40
|
Notice,
|
|
40
41
|
ToolbarButton,
|
|
@@ -77,7 +78,9 @@ import AccessibleDescription from './accessible-description';
|
|
|
77
78
|
import AccessibleMenuDescription from './accessible-menu-description';
|
|
78
79
|
import { unlock } from '../../lock-unlock';
|
|
79
80
|
import { useToolsPanelDropdownMenuProps } from '../../utils/hooks';
|
|
81
|
+
import { isWithinNavigationOverlay } from '../../utils/is-within-overlay';
|
|
80
82
|
import { DEFAULT_BLOCK } from '../constants';
|
|
83
|
+
import { getSubmenuVisibility } from '../utils/get-submenu-visibility';
|
|
81
84
|
|
|
82
85
|
/**
|
|
83
86
|
* Component that renders the Add page button for the Navigation block.
|
|
@@ -139,6 +142,10 @@ function ColorTools( {
|
|
|
139
142
|
setDetectedOverlayBackgroundColor,
|
|
140
143
|
] = useState();
|
|
141
144
|
const [ detectedOverlayColor, setDetectedOverlayColor ] = useState();
|
|
145
|
+
|
|
146
|
+
// Detect if we're editing inside an overlay template part.
|
|
147
|
+
const isWithinOverlay = useSelect( () => isWithinNavigationOverlay(), [] );
|
|
148
|
+
|
|
142
149
|
// Turn on contrast checker for web only since it's not supported on mobile yet.
|
|
143
150
|
const enableContrastChecking = Platform.OS === 'web';
|
|
144
151
|
useEffect( () => {
|
|
@@ -179,48 +186,57 @@ function ColorTools( {
|
|
|
179
186
|
if ( ! colorGradientSettings.hasColorsOrGradients ) {
|
|
180
187
|
return null;
|
|
181
188
|
}
|
|
189
|
+
|
|
190
|
+
const colorSettings = [
|
|
191
|
+
{
|
|
192
|
+
colorValue: textColor.color,
|
|
193
|
+
label: __( 'Text' ),
|
|
194
|
+
onColorChange: setTextColor,
|
|
195
|
+
resetAllFilter: () => setTextColor(),
|
|
196
|
+
clearable: true,
|
|
197
|
+
enableAlpha: true,
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
colorValue: backgroundColor.color,
|
|
201
|
+
label: __( 'Background' ),
|
|
202
|
+
onColorChange: setBackgroundColor,
|
|
203
|
+
resetAllFilter: () => setBackgroundColor(),
|
|
204
|
+
clearable: true,
|
|
205
|
+
enableAlpha: true,
|
|
206
|
+
},
|
|
207
|
+
];
|
|
208
|
+
|
|
209
|
+
// Only show overlay controls when not in an overlay template.
|
|
210
|
+
colorSettings.push(
|
|
211
|
+
{
|
|
212
|
+
colorValue: overlayTextColor.color,
|
|
213
|
+
label:
|
|
214
|
+
hasCustomOverlay || isWithinOverlay
|
|
215
|
+
? __( 'Submenu text' )
|
|
216
|
+
: __( 'Submenu & overlay text' ),
|
|
217
|
+
onColorChange: setOverlayTextColor,
|
|
218
|
+
resetAllFilter: () => setOverlayTextColor(),
|
|
219
|
+
clearable: true,
|
|
220
|
+
enableAlpha: true,
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
colorValue: overlayBackgroundColor.color,
|
|
224
|
+
label:
|
|
225
|
+
hasCustomOverlay || isWithinOverlay
|
|
226
|
+
? __( 'Submenu background' )
|
|
227
|
+
: __( 'Submenu & overlay background' ),
|
|
228
|
+
onColorChange: setOverlayBackgroundColor,
|
|
229
|
+
resetAllFilter: () => setOverlayBackgroundColor(),
|
|
230
|
+
clearable: true,
|
|
231
|
+
enableAlpha: true,
|
|
232
|
+
}
|
|
233
|
+
);
|
|
234
|
+
|
|
182
235
|
return (
|
|
183
236
|
<>
|
|
184
237
|
<ColorGradientSettingsDropdown
|
|
185
238
|
__experimentalIsRenderedInSidebar
|
|
186
|
-
settings={
|
|
187
|
-
{
|
|
188
|
-
colorValue: textColor.color,
|
|
189
|
-
label: __( 'Text' ),
|
|
190
|
-
onColorChange: setTextColor,
|
|
191
|
-
resetAllFilter: () => setTextColor(),
|
|
192
|
-
clearable: true,
|
|
193
|
-
enableAlpha: true,
|
|
194
|
-
},
|
|
195
|
-
{
|
|
196
|
-
colorValue: backgroundColor.color,
|
|
197
|
-
label: __( 'Background' ),
|
|
198
|
-
onColorChange: setBackgroundColor,
|
|
199
|
-
resetAllFilter: () => setBackgroundColor(),
|
|
200
|
-
clearable: true,
|
|
201
|
-
enableAlpha: true,
|
|
202
|
-
},
|
|
203
|
-
{
|
|
204
|
-
colorValue: overlayTextColor.color,
|
|
205
|
-
label: hasCustomOverlay
|
|
206
|
-
? __( 'Submenu text' )
|
|
207
|
-
: __( 'Submenu & overlay text' ),
|
|
208
|
-
onColorChange: setOverlayTextColor,
|
|
209
|
-
resetAllFilter: () => setOverlayTextColor(),
|
|
210
|
-
clearable: true,
|
|
211
|
-
enableAlpha: true,
|
|
212
|
-
},
|
|
213
|
-
{
|
|
214
|
-
colorValue: overlayBackgroundColor.color,
|
|
215
|
-
label: hasCustomOverlay
|
|
216
|
-
? __( 'Submenu background' )
|
|
217
|
-
: __( 'Submenu & overlay background' ),
|
|
218
|
-
onColorChange: setOverlayBackgroundColor,
|
|
219
|
-
resetAllFilter: () => setOverlayBackgroundColor(),
|
|
220
|
-
clearable: true,
|
|
221
|
-
enableAlpha: true,
|
|
222
|
-
},
|
|
223
|
-
] }
|
|
239
|
+
settings={ colorSettings }
|
|
224
240
|
panelId={ clientId }
|
|
225
241
|
{ ...colorGradientSettings }
|
|
226
242
|
gradients={ [] }
|
|
@@ -263,7 +279,7 @@ function Navigation( {
|
|
|
263
279
|
__unstableLayoutClassNames: layoutClassNames,
|
|
264
280
|
} ) {
|
|
265
281
|
const {
|
|
266
|
-
|
|
282
|
+
submenuVisibility,
|
|
267
283
|
overlayMenu,
|
|
268
284
|
overlay,
|
|
269
285
|
showSubmenuIcon,
|
|
@@ -286,18 +302,36 @@ function Navigation( {
|
|
|
286
302
|
[ setAttributes ]
|
|
287
303
|
);
|
|
288
304
|
|
|
305
|
+
// Reset submenuVisibility to default if orientation changes to horizontal while "always" is selected
|
|
306
|
+
useEffect( () => {
|
|
307
|
+
if ( orientation === 'horizontal' && submenuVisibility === 'always' ) {
|
|
308
|
+
setAttributes( {
|
|
309
|
+
submenuVisibility: 'hover',
|
|
310
|
+
showSubmenuIcon: true,
|
|
311
|
+
} );
|
|
312
|
+
}
|
|
313
|
+
}, [ orientation, submenuVisibility, setAttributes ] );
|
|
314
|
+
|
|
289
315
|
const recursionId = `navigationMenu/${ ref }`;
|
|
290
|
-
const hasAlreadyRendered = useHasRecursion( recursionId );
|
|
291
316
|
|
|
292
|
-
|
|
317
|
+
// Skip recursion check when in preview mode.
|
|
318
|
+
const recursionDetected = useHasRecursion( recursionId );
|
|
319
|
+
const { isPreviewMode, onNavigateToEntityRecord, currentTheme } = useSelect(
|
|
320
|
+
( select ) => {
|
|
321
|
+
const { getSettings } = select( blockEditorStore );
|
|
322
|
+
const settings = getSettings();
|
|
323
|
+
return {
|
|
324
|
+
isPreviewMode: settings.isPreviewMode,
|
|
325
|
+
onNavigateToEntityRecord: settings?.onNavigateToEntityRecord,
|
|
326
|
+
// Needed to construct the template part ID for the overlay preview.
|
|
327
|
+
currentTheme: select( coreStore ).getCurrentTheme()?.stylesheet,
|
|
328
|
+
};
|
|
329
|
+
},
|
|
330
|
+
[]
|
|
331
|
+
);
|
|
332
|
+
const hasAlreadyRendered = isPreviewMode ? false : recursionDetected;
|
|
293
333
|
|
|
294
|
-
const
|
|
295
|
-
const { getSettings } = select( blockEditorStore );
|
|
296
|
-
const settings = getSettings();
|
|
297
|
-
return {
|
|
298
|
-
onNavigateToEntityRecord: settings?.onNavigateToEntityRecord,
|
|
299
|
-
};
|
|
300
|
-
}, [] );
|
|
334
|
+
const blockEditingMode = useBlockEditingMode();
|
|
301
335
|
|
|
302
336
|
const isOverlayExperimentEnabled =
|
|
303
337
|
typeof window !== 'undefined' &&
|
|
@@ -440,8 +474,12 @@ function Navigation( {
|
|
|
440
474
|
|
|
441
475
|
const navRef = useRef();
|
|
442
476
|
|
|
443
|
-
//
|
|
444
|
-
const
|
|
477
|
+
// Detect if we're editing inside an overlay template part.
|
|
478
|
+
const isWithinOverlay = useSelect( () => isWithinNavigationOverlay(), [] );
|
|
479
|
+
|
|
480
|
+
// Use div wrapper if this navigation block is within an overlay template part.
|
|
481
|
+
// Otherwise, use nav as the standard HTML5 tag.
|
|
482
|
+
const TagName = isWithinOverlay ? 'div' : 'nav';
|
|
445
483
|
|
|
446
484
|
// "placeholder" shown if:
|
|
447
485
|
// - there is no ref attribute pointing to a Navigation Post.
|
|
@@ -477,6 +515,39 @@ function Navigation( {
|
|
|
477
515
|
),
|
|
478
516
|
[ clientId ]
|
|
479
517
|
);
|
|
518
|
+
|
|
519
|
+
// Configure navigation blocks in overlay templates.
|
|
520
|
+
const hasSetOverlayDefault = useRef( false );
|
|
521
|
+
useEffect( () => {
|
|
522
|
+
if ( ! isWithinOverlay ) {
|
|
523
|
+
return;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
// Prevent nested overlays.
|
|
527
|
+
if ( overlayMenu !== 'never' ) {
|
|
528
|
+
setAttributes( { overlayMenu: 'never' } );
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
// Set vertical orientation and always-open submenus for new blocks.
|
|
532
|
+
if ( ! hasSetOverlayDefault.current && ! ref ) {
|
|
533
|
+
hasSetOverlayDefault.current = true;
|
|
534
|
+
setAttributes( {
|
|
535
|
+
submenuVisibility: 'always',
|
|
536
|
+
layout: {
|
|
537
|
+
...attributes.layout,
|
|
538
|
+
orientation: 'vertical',
|
|
539
|
+
},
|
|
540
|
+
showSubmenuIcon: false,
|
|
541
|
+
} );
|
|
542
|
+
}
|
|
543
|
+
}, [
|
|
544
|
+
attributes.layout,
|
|
545
|
+
isWithinOverlay,
|
|
546
|
+
overlayMenu,
|
|
547
|
+
ref,
|
|
548
|
+
setAttributes,
|
|
549
|
+
] );
|
|
550
|
+
|
|
480
551
|
const isResponsive = 'never' !== overlayMenu;
|
|
481
552
|
const blockProps = useBlockProps( {
|
|
482
553
|
ref: navRef,
|
|
@@ -634,8 +705,12 @@ function Navigation( {
|
|
|
634
705
|
{ open: overlayMenuPreview }
|
|
635
706
|
);
|
|
636
707
|
|
|
708
|
+
const computedSubmenuVisibility = getSubmenuVisibility( attributes );
|
|
709
|
+
|
|
637
710
|
const submenuAccessibilityNotice =
|
|
638
|
-
! showSubmenuIcon &&
|
|
711
|
+
! showSubmenuIcon &&
|
|
712
|
+
computedSubmenuVisibility !== 'click' &&
|
|
713
|
+
computedSubmenuVisibility !== 'always'
|
|
639
714
|
? __(
|
|
640
715
|
'The current menu options offer reduced accessibility for users and are not recommended. Enabling either "Open on Click" or "Show arrow" offers enhanced accessibility by allowing keyboard users to browse submenus selectively.'
|
|
641
716
|
)
|
|
@@ -665,7 +740,7 @@ function Navigation( {
|
|
|
665
740
|
resetAll={ () => {
|
|
666
741
|
setAttributes( {
|
|
667
742
|
showSubmenuIcon: true,
|
|
668
|
-
|
|
743
|
+
submenuVisibility: 'hover',
|
|
669
744
|
overlayMenu: 'mobile',
|
|
670
745
|
hasIcon: true,
|
|
671
746
|
icon: 'handle',
|
|
@@ -723,28 +798,59 @@ function Navigation( {
|
|
|
723
798
|
{ __( 'Submenus' ) }
|
|
724
799
|
</h3>
|
|
725
800
|
<ToolsPanelItem
|
|
726
|
-
hasValue={ () =>
|
|
727
|
-
|
|
801
|
+
hasValue={ () =>
|
|
802
|
+
submenuVisibility !== 'hover'
|
|
803
|
+
}
|
|
804
|
+
label={ __( 'Submenu Visibility' ) }
|
|
728
805
|
onDeselect={ () =>
|
|
729
806
|
setAttributes( {
|
|
730
|
-
|
|
731
|
-
showSubmenuIcon: true,
|
|
807
|
+
submenuVisibility: 'hover',
|
|
732
808
|
} )
|
|
733
809
|
}
|
|
734
810
|
isShownByDefault
|
|
735
811
|
>
|
|
736
|
-
<
|
|
737
|
-
|
|
812
|
+
<ToggleGroupControl
|
|
813
|
+
__nextHasNoMarginBottom
|
|
814
|
+
__next40pxDefaultSize
|
|
815
|
+
label={ __( 'Submenu Visibility' ) }
|
|
816
|
+
value={ submenuVisibility }
|
|
738
817
|
onChange={ ( value ) => {
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
818
|
+
const newAttributes = {
|
|
819
|
+
submenuVisibility: value,
|
|
820
|
+
};
|
|
821
|
+
const prevSubmenuVisibility =
|
|
822
|
+
submenuVisibility;
|
|
823
|
+
// If "always" is selected, hide the arrow because the formatting is broken for it when using center alignment.
|
|
824
|
+
if ( value === 'always' ) {
|
|
825
|
+
newAttributes.showSubmenuIcon = false;
|
|
826
|
+
} else if (
|
|
827
|
+
value === 'click' ||
|
|
828
|
+
prevSubmenuVisibility ===
|
|
829
|
+
'always'
|
|
830
|
+
) {
|
|
831
|
+
// When switching to "click" or away from "always", show the arrow
|
|
832
|
+
newAttributes.showSubmenuIcon = true;
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
setAttributes( newAttributes );
|
|
745
836
|
} }
|
|
746
|
-
|
|
747
|
-
|
|
837
|
+
isBlock
|
|
838
|
+
>
|
|
839
|
+
<ToggleGroupControlOption
|
|
840
|
+
value="hover"
|
|
841
|
+
label={ __( 'Hover' ) }
|
|
842
|
+
/>
|
|
843
|
+
<ToggleGroupControlOption
|
|
844
|
+
value="click"
|
|
845
|
+
label={ __( 'Click' ) }
|
|
846
|
+
/>
|
|
847
|
+
{ orientation === 'vertical' && (
|
|
848
|
+
<ToggleGroupControlOption
|
|
849
|
+
value="always"
|
|
850
|
+
label={ __( 'Always' ) }
|
|
851
|
+
/>
|
|
852
|
+
) }
|
|
853
|
+
</ToggleGroupControl>
|
|
748
854
|
</ToolsPanelItem>
|
|
749
855
|
|
|
750
856
|
<ToolsPanelItem
|
|
@@ -756,7 +862,8 @@ function Navigation( {
|
|
|
756
862
|
} )
|
|
757
863
|
}
|
|
758
864
|
isDisabled={
|
|
759
|
-
|
|
865
|
+
computedSubmenuVisibility === 'click' ||
|
|
866
|
+
computedSubmenuVisibility === 'always'
|
|
760
867
|
}
|
|
761
868
|
isShownByDefault
|
|
762
869
|
>
|
|
@@ -768,7 +875,10 @@ function Navigation( {
|
|
|
768
875
|
} );
|
|
769
876
|
} }
|
|
770
877
|
disabled={
|
|
771
|
-
|
|
878
|
+
computedSubmenuVisibility ===
|
|
879
|
+
'click' ||
|
|
880
|
+
computedSubmenuVisibility ===
|
|
881
|
+
'always'
|
|
772
882
|
}
|
|
773
883
|
label={ __( 'Show arrow' ) }
|
|
774
884
|
/>
|
|
@@ -789,7 +899,7 @@ function Navigation( {
|
|
|
789
899
|
</ToolsPanel>
|
|
790
900
|
) }
|
|
791
901
|
</InspectorControls>
|
|
792
|
-
{ isOverlayExperimentEnabled && (
|
|
902
|
+
{ isOverlayExperimentEnabled && ! isWithinOverlay && (
|
|
793
903
|
<InspectorControls>
|
|
794
904
|
<OverlayPanel
|
|
795
905
|
overlayMenu={ overlayMenu }
|
|
@@ -803,6 +913,7 @@ function Navigation( {
|
|
|
803
913
|
overlayMenuPreviewClasses={ overlayMenuPreviewClasses }
|
|
804
914
|
overlayMenuPreviewId={ overlayMenuPreviewId }
|
|
805
915
|
isResponsive={ isResponsive }
|
|
916
|
+
currentTheme={ currentTheme }
|
|
806
917
|
/>
|
|
807
918
|
</InspectorControls>
|
|
808
919
|
) }
|
|
@@ -13,6 +13,7 @@ import { __ } from '@wordpress/i18n';
|
|
|
13
13
|
import OverlayTemplatePartSelector from './overlay-template-part-selector';
|
|
14
14
|
import OverlayVisibilityControl from './overlay-visibility-control';
|
|
15
15
|
import OverlayMenuPreviewButton from './overlay-menu-preview-button';
|
|
16
|
+
import OverlayPreview from './overlay-preview';
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
19
|
* Overlay Panel component for Navigation block.
|
|
@@ -29,6 +30,7 @@ import OverlayMenuPreviewButton from './overlay-menu-preview-button';
|
|
|
29
30
|
* @param {string} props.overlayMenuPreviewClasses CSS classes for overlay menu preview button.
|
|
30
31
|
* @param {string} props.overlayMenuPreviewId ID for overlay menu preview.
|
|
31
32
|
* @param {boolean} props.isResponsive Whether overlay menu is responsive.
|
|
33
|
+
* @param {string} props.currentTheme Current theme stylesheet name.
|
|
32
34
|
* @return {JSX.Element|null} The overlay panel component or null if overlay is disabled.
|
|
33
35
|
*/
|
|
34
36
|
export default function OverlayPanel( {
|
|
@@ -43,6 +45,7 @@ export default function OverlayPanel( {
|
|
|
43
45
|
overlayMenuPreviewClasses,
|
|
44
46
|
overlayMenuPreviewId,
|
|
45
47
|
isResponsive,
|
|
48
|
+
currentTheme,
|
|
46
49
|
} ) {
|
|
47
50
|
return (
|
|
48
51
|
<PanelBody title={ __( 'Overlay' ) } initialOpen>
|
|
@@ -72,6 +75,13 @@ export default function OverlayPanel( {
|
|
|
72
75
|
onNavigateToEntityRecord={ onNavigateToEntityRecord }
|
|
73
76
|
/>
|
|
74
77
|
) }
|
|
78
|
+
|
|
79
|
+
{ overlayMenu !== 'never' && overlay && (
|
|
80
|
+
<OverlayPreview
|
|
81
|
+
overlay={ overlay }
|
|
82
|
+
currentTheme={ currentTheme }
|
|
83
|
+
/>
|
|
84
|
+
) }
|
|
75
85
|
</VStack>
|
|
76
86
|
</PanelBody>
|
|
77
87
|
);
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useSelect } from '@wordpress/data';
|
|
5
|
+
import { store as coreStore } from '@wordpress/core-data';
|
|
6
|
+
import { useMemo } from '@wordpress/element';
|
|
7
|
+
import { parse } from '@wordpress/blocks';
|
|
8
|
+
import { Spinner } from '@wordpress/components';
|
|
9
|
+
import { __ } from '@wordpress/i18n';
|
|
10
|
+
import { BlockPreview } from '@wordpress/block-editor';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Internal dependencies
|
|
14
|
+
*/
|
|
15
|
+
import { createTemplatePartId } from '../../template-part/edit/utils/create-template-part-id';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Component that displays a read-only visual preview of the selected overlay template part.
|
|
19
|
+
*
|
|
20
|
+
* @param {Object} props Component props.
|
|
21
|
+
* @param {string} props.overlay The overlay template part slug.
|
|
22
|
+
* @param {string} props.currentTheme The current theme stylesheet name.
|
|
23
|
+
* @return {JSX.Element|null} The overlay preview component or null if no overlay is selected.
|
|
24
|
+
*/
|
|
25
|
+
export default function OverlayPreview( { overlay, currentTheme } ) {
|
|
26
|
+
const templatePartId = useMemo( () => {
|
|
27
|
+
if ( ! overlay || ! currentTheme ) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return createTemplatePartId( currentTheme, overlay );
|
|
31
|
+
}, [ currentTheme, overlay ] );
|
|
32
|
+
|
|
33
|
+
const { content, editedBlocks, hasResolved, recordExists } = useSelect(
|
|
34
|
+
( select ) => {
|
|
35
|
+
if ( ! templatePartId ) {
|
|
36
|
+
return {
|
|
37
|
+
content: null,
|
|
38
|
+
editedBlocks: null,
|
|
39
|
+
hasResolved: true,
|
|
40
|
+
recordExists: false,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const { getEditedEntityRecord, hasFinishedResolution } =
|
|
45
|
+
select( coreStore );
|
|
46
|
+
|
|
47
|
+
const editedRecord = getEditedEntityRecord(
|
|
48
|
+
'postType',
|
|
49
|
+
'wp_template_part',
|
|
50
|
+
templatePartId,
|
|
51
|
+
{ context: 'view' }
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
return {
|
|
55
|
+
content: editedRecord?.content,
|
|
56
|
+
editedBlocks: editedRecord?.blocks,
|
|
57
|
+
hasResolved: hasFinishedResolution( 'getEditedEntityRecord', [
|
|
58
|
+
'postType',
|
|
59
|
+
'wp_template_part',
|
|
60
|
+
templatePartId,
|
|
61
|
+
{ context: 'view' },
|
|
62
|
+
] ),
|
|
63
|
+
recordExists: !! editedRecord,
|
|
64
|
+
};
|
|
65
|
+
},
|
|
66
|
+
[ templatePartId ]
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
const blocks = useMemo( () => {
|
|
70
|
+
if ( ! templatePartId ) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if ( editedBlocks && editedBlocks.length > 0 ) {
|
|
75
|
+
return editedBlocks;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if ( content && typeof content === 'string' ) {
|
|
79
|
+
return parse( content );
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return [];
|
|
83
|
+
}, [ templatePartId, editedBlocks, content ] );
|
|
84
|
+
|
|
85
|
+
if ( ! overlay ) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if ( ! hasResolved ) {
|
|
90
|
+
return (
|
|
91
|
+
<div className="wp-block-navigation__overlay-preview-loading">
|
|
92
|
+
<Spinner />
|
|
93
|
+
</div>
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Show message if the overlay template part has been deleted.
|
|
98
|
+
if ( hasResolved && ! recordExists ) {
|
|
99
|
+
return (
|
|
100
|
+
<div className="wp-block-navigation__overlay-preview-empty">
|
|
101
|
+
{ __( 'This overlay template part no longer exists.' ) }
|
|
102
|
+
</div>
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if ( ! blocks || blocks.length === 0 ) {
|
|
107
|
+
return (
|
|
108
|
+
<div className="wp-block-navigation__overlay-preview-empty">
|
|
109
|
+
{ __( 'This overlay is empty.' ) }
|
|
110
|
+
</div>
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return (
|
|
115
|
+
<div
|
|
116
|
+
className="wp-block-navigation__overlay-preview"
|
|
117
|
+
aria-label={ __( 'Navigation Overlay template part preview' ) }
|
|
118
|
+
role="region"
|
|
119
|
+
>
|
|
120
|
+
<BlockPreview.Async
|
|
121
|
+
placeholder={
|
|
122
|
+
<div className="wp-block-navigation__overlay-preview-placeholder" />
|
|
123
|
+
}
|
|
124
|
+
>
|
|
125
|
+
<BlockPreview
|
|
126
|
+
blocks={ blocks }
|
|
127
|
+
viewportWidth={ 400 }
|
|
128
|
+
minHeight={ 200 }
|
|
129
|
+
/>
|
|
130
|
+
</BlockPreview.Async>
|
|
131
|
+
</div>
|
|
132
|
+
);
|
|
133
|
+
}
|