@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
|
@@ -6,16 +6,17 @@ import { renderHook, act } from '@testing-library/react';
|
|
|
6
6
|
/**
|
|
7
7
|
* WordPress dependencies
|
|
8
8
|
*/
|
|
9
|
-
import { useDispatch } from '@wordpress/data';
|
|
9
|
+
import { useDispatch, useSelect } from '@wordpress/data';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Internal dependencies
|
|
13
13
|
*/
|
|
14
14
|
import useCreateOverlayTemplatePart from '../use-create-overlay';
|
|
15
15
|
|
|
16
|
-
// Mock useDispatch
|
|
16
|
+
// Mock useDispatch and useSelect
|
|
17
17
|
jest.mock( '@wordpress/data', () => ( {
|
|
18
18
|
useDispatch: jest.fn(),
|
|
19
|
+
useSelect: jest.fn(),
|
|
19
20
|
} ) );
|
|
20
21
|
|
|
21
22
|
// Mock coreStore
|
|
@@ -23,9 +24,27 @@ jest.mock( '@wordpress/core-data', () => ( {
|
|
|
23
24
|
store: {},
|
|
24
25
|
} ) );
|
|
25
26
|
|
|
27
|
+
// Mock blockEditorStore
|
|
28
|
+
jest.mock( '@wordpress/block-editor', () => ( {
|
|
29
|
+
store: {},
|
|
30
|
+
} ) );
|
|
31
|
+
|
|
26
32
|
// Mock @wordpress/blocks
|
|
27
33
|
jest.mock( '@wordpress/blocks', () => ( {
|
|
28
34
|
serialize: jest.fn( ( blocks ) => JSON.stringify( blocks ) ),
|
|
35
|
+
parse: jest.fn( ( content ) => {
|
|
36
|
+
// Return mock blocks when parsing pattern content
|
|
37
|
+
if ( content && typeof content === 'string' ) {
|
|
38
|
+
return [
|
|
39
|
+
{
|
|
40
|
+
name: 'core/group',
|
|
41
|
+
attributes: {},
|
|
42
|
+
innerBlocks: [],
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
}
|
|
46
|
+
return [];
|
|
47
|
+
} ),
|
|
29
48
|
createBlock: jest.fn( ( name ) => ( {
|
|
30
49
|
name,
|
|
31
50
|
attributes: {},
|
|
@@ -33,14 +52,42 @@ jest.mock( '@wordpress/blocks', () => ( {
|
|
|
33
52
|
} ) ),
|
|
34
53
|
} ) );
|
|
35
54
|
|
|
55
|
+
// Mock lock-unlock
|
|
56
|
+
const mockUnlock = jest.fn();
|
|
57
|
+
jest.mock( '../../../lock-unlock', () => ( {
|
|
58
|
+
unlock: ( select ) => mockUnlock( select ),
|
|
59
|
+
} ) );
|
|
60
|
+
|
|
36
61
|
describe( 'useCreateOverlayTemplatePart', () => {
|
|
37
62
|
const mockSaveEntityRecord = jest.fn();
|
|
63
|
+
const mockGetPatternBySlug = jest.fn();
|
|
38
64
|
|
|
39
65
|
beforeEach( () => {
|
|
40
66
|
jest.clearAllMocks();
|
|
41
67
|
useDispatch.mockReturnValue( {
|
|
42
68
|
saveEntityRecord: mockSaveEntityRecord,
|
|
43
69
|
} );
|
|
70
|
+
|
|
71
|
+
mockUnlock.mockReturnValue( {
|
|
72
|
+
getPatternBySlug: mockGetPatternBySlug,
|
|
73
|
+
} );
|
|
74
|
+
|
|
75
|
+
useSelect.mockImplementation( ( selector ) => {
|
|
76
|
+
const mockSelect = jest.fn( ( store ) => {
|
|
77
|
+
if ( store === require( '@wordpress/block-editor' ).store ) {
|
|
78
|
+
return {}; // Return mock block editor store
|
|
79
|
+
}
|
|
80
|
+
return {};
|
|
81
|
+
} );
|
|
82
|
+
return selector( mockSelect );
|
|
83
|
+
} );
|
|
84
|
+
|
|
85
|
+
mockGetPatternBySlug.mockReturnValue( {
|
|
86
|
+
name: 'gutenberg/navigation-overlay',
|
|
87
|
+
title: 'Navigation Overlay',
|
|
88
|
+
content:
|
|
89
|
+
'<!-- wp:group --><div class="wp-block-group"><!-- wp:navigation-overlay-close /--><!-- wp:navigation /--></div><!-- /wp:group -->',
|
|
90
|
+
} );
|
|
44
91
|
} );
|
|
45
92
|
|
|
46
93
|
it( 'should save a new overlay with correct parameters when no overlays exist', async () => {
|
|
@@ -125,6 +172,86 @@ describe( 'useCreateOverlayTemplatePart', () => {
|
|
|
125
172
|
);
|
|
126
173
|
} );
|
|
127
174
|
|
|
175
|
+
it( 'should use pattern content when pattern is found', async () => {
|
|
176
|
+
const overlayTemplateParts = [];
|
|
177
|
+
const createdOverlay = {
|
|
178
|
+
id: 'twentytwentyfive//overlay',
|
|
179
|
+
theme: 'twentytwentyfive',
|
|
180
|
+
slug: 'overlay',
|
|
181
|
+
title: {
|
|
182
|
+
rendered: 'Overlay',
|
|
183
|
+
},
|
|
184
|
+
area: 'navigation-overlay',
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
mockSaveEntityRecord.mockResolvedValue( createdOverlay );
|
|
188
|
+
|
|
189
|
+
// Import mocked functions
|
|
190
|
+
const blocksModule = require( '@wordpress/blocks' );
|
|
191
|
+
const { parse, serialize } = blocksModule;
|
|
192
|
+
|
|
193
|
+
const { result: createOverlayTemplatePart } = renderHook( () =>
|
|
194
|
+
useCreateOverlayTemplatePart( overlayTemplateParts )
|
|
195
|
+
);
|
|
196
|
+
|
|
197
|
+
await act( async () => {
|
|
198
|
+
await createOverlayTemplatePart.current();
|
|
199
|
+
} );
|
|
200
|
+
|
|
201
|
+
expect( mockGetPatternBySlug ).toHaveBeenCalledWith(
|
|
202
|
+
'gutenberg/navigation-overlay'
|
|
203
|
+
);
|
|
204
|
+
|
|
205
|
+
expect( parse ).toHaveBeenCalledWith( mockGetPatternBySlug().content, {
|
|
206
|
+
__unstableSkipMigrationLogs: true,
|
|
207
|
+
} );
|
|
208
|
+
|
|
209
|
+
expect( serialize ).toHaveBeenCalled();
|
|
210
|
+
} );
|
|
211
|
+
|
|
212
|
+
it( 'should use empty paragraph when pattern is not found', async () => {
|
|
213
|
+
const overlayTemplateParts = [];
|
|
214
|
+
const createdOverlay = {
|
|
215
|
+
id: 'twentytwentyfive//overlay',
|
|
216
|
+
theme: 'twentytwentyfive',
|
|
217
|
+
slug: 'overlay',
|
|
218
|
+
title: {
|
|
219
|
+
rendered: 'Overlay',
|
|
220
|
+
},
|
|
221
|
+
area: 'navigation-overlay',
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
mockSaveEntityRecord.mockResolvedValue( createdOverlay );
|
|
225
|
+
mockGetPatternBySlug.mockReturnValue( null );
|
|
226
|
+
|
|
227
|
+
// Import mocked functions
|
|
228
|
+
const blocksModule = require( '@wordpress/blocks' );
|
|
229
|
+
const { createBlock, serialize } = blocksModule;
|
|
230
|
+
|
|
231
|
+
const { result: createOverlayTemplatePart } = renderHook( () =>
|
|
232
|
+
useCreateOverlayTemplatePart( overlayTemplateParts )
|
|
233
|
+
);
|
|
234
|
+
|
|
235
|
+
await act( async () => {
|
|
236
|
+
await createOverlayTemplatePart.current();
|
|
237
|
+
} );
|
|
238
|
+
|
|
239
|
+
expect( createBlock ).toHaveBeenCalledWith( 'core/paragraph' );
|
|
240
|
+
|
|
241
|
+
expect( serialize ).toHaveBeenCalledWith( [
|
|
242
|
+
expect.objectContaining( { name: 'core/paragraph' } ),
|
|
243
|
+
] );
|
|
244
|
+
|
|
245
|
+
expect( mockSaveEntityRecord ).toHaveBeenCalledWith(
|
|
246
|
+
'postType',
|
|
247
|
+
'wp_template_part',
|
|
248
|
+
expect.objectContaining( {
|
|
249
|
+
content: expect.any( String ),
|
|
250
|
+
} ),
|
|
251
|
+
{ throwOnError: true }
|
|
252
|
+
);
|
|
253
|
+
} );
|
|
254
|
+
|
|
128
255
|
it( 'should throw errors when save fails', async () => {
|
|
129
256
|
const overlayTemplateParts = [];
|
|
130
257
|
const error = new Error( 'Failed to save' );
|
|
@@ -2,16 +2,18 @@
|
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
4
|
import { useCallback } from '@wordpress/element';
|
|
5
|
-
import { useDispatch } from '@wordpress/data';
|
|
5
|
+
import { useDispatch, useSelect } from '@wordpress/data';
|
|
6
6
|
import { store as coreStore } from '@wordpress/core-data';
|
|
7
|
+
import { store as blockEditorStore } from '@wordpress/block-editor';
|
|
7
8
|
import { __ } from '@wordpress/i18n';
|
|
8
|
-
import { serialize, createBlock } from '@wordpress/blocks';
|
|
9
|
+
import { parse, serialize, createBlock } from '@wordpress/blocks';
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* Internal dependencies
|
|
12
13
|
*/
|
|
13
14
|
import { getUniqueTemplatePartTitle, getCleanTemplatePartSlug } from './utils';
|
|
14
15
|
import { NAVIGATION_OVERLAY_TEMPLATE_PART_AREA } from '../constants';
|
|
16
|
+
import { unlock } from '../../lock-unlock';
|
|
15
17
|
|
|
16
18
|
/**
|
|
17
19
|
* Hook to create a new overlay template part.
|
|
@@ -22,6 +24,13 @@ import { NAVIGATION_OVERLAY_TEMPLATE_PART_AREA } from '../constants';
|
|
|
22
24
|
*/
|
|
23
25
|
export default function useCreateOverlayTemplatePart( overlayTemplateParts ) {
|
|
24
26
|
const { saveEntityRecord } = useDispatch( coreStore );
|
|
27
|
+
const pattern = useSelect(
|
|
28
|
+
( select ) =>
|
|
29
|
+
unlock( select( blockEditorStore ) ).getPatternBySlug(
|
|
30
|
+
'gutenberg/navigation-overlay'
|
|
31
|
+
),
|
|
32
|
+
[]
|
|
33
|
+
);
|
|
25
34
|
|
|
26
35
|
const createOverlayTemplatePart = useCallback( async () => {
|
|
27
36
|
// Generate unique name using only overlay area template parts
|
|
@@ -35,6 +44,19 @@ export default function useCreateOverlayTemplatePart( overlayTemplateParts ) {
|
|
|
35
44
|
);
|
|
36
45
|
const cleanSlug = getCleanTemplatePartSlug( uniqueTitle );
|
|
37
46
|
|
|
47
|
+
let initialContent = '';
|
|
48
|
+
|
|
49
|
+
if ( pattern?.content ) {
|
|
50
|
+
// Parse the pattern content into blocks and serialize it
|
|
51
|
+
const blocks = parse( pattern.content, {
|
|
52
|
+
__unstableSkipMigrationLogs: true,
|
|
53
|
+
} );
|
|
54
|
+
initialContent = serialize( blocks );
|
|
55
|
+
} else {
|
|
56
|
+
// Fallback to empty paragraph if pattern is not found
|
|
57
|
+
initialContent = serialize( [ createBlock( 'core/paragraph' ) ] );
|
|
58
|
+
}
|
|
59
|
+
|
|
38
60
|
// Create the template part
|
|
39
61
|
const templatePart = await saveEntityRecord(
|
|
40
62
|
'postType',
|
|
@@ -42,14 +64,14 @@ export default function useCreateOverlayTemplatePart( overlayTemplateParts ) {
|
|
|
42
64
|
{
|
|
43
65
|
slug: cleanSlug,
|
|
44
66
|
title: uniqueTitle,
|
|
45
|
-
content:
|
|
67
|
+
content: initialContent,
|
|
46
68
|
area: NAVIGATION_OVERLAY_TEMPLATE_PART_AREA,
|
|
47
69
|
},
|
|
48
70
|
{ throwOnError: true }
|
|
49
71
|
);
|
|
50
72
|
|
|
51
73
|
return templatePart;
|
|
52
|
-
}, [ overlayTemplateParts, saveEntityRecord ] );
|
|
74
|
+
}, [ overlayTemplateParts, saveEntityRecord, pattern ] );
|
|
53
75
|
|
|
54
76
|
return createOverlayTemplatePart;
|
|
55
77
|
}
|
|
@@ -669,3 +669,54 @@ body.editor-styles-wrapper .wp-block-navigation__responsive-container.is-menu-op
|
|
|
669
669
|
right: 0;
|
|
670
670
|
z-index: 1;
|
|
671
671
|
}
|
|
672
|
+
|
|
673
|
+
// Overlay Preview styles
|
|
674
|
+
.wp-block-navigation__overlay-preview {
|
|
675
|
+
margin-top: $grid-unit-20;
|
|
676
|
+
border: 1px solid $gray-300;
|
|
677
|
+
border-radius: 2px;
|
|
678
|
+
overflow-y: auto;
|
|
679
|
+
max-height: 200px;
|
|
680
|
+
background: $white;
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
.wp-block-navigation__overlay-preview-loading {
|
|
684
|
+
display: flex;
|
|
685
|
+
align-items: center;
|
|
686
|
+
justify-content: center;
|
|
687
|
+
min-height: 200px;
|
|
688
|
+
background: $gray-100;
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
.wp-block-navigation__overlay-preview-empty {
|
|
692
|
+
display: flex;
|
|
693
|
+
align-items: center;
|
|
694
|
+
justify-content: center;
|
|
695
|
+
min-height: 200px;
|
|
696
|
+
padding: $grid-unit-20;
|
|
697
|
+
text-align: center;
|
|
698
|
+
color: $gray-700;
|
|
699
|
+
background: $gray-100;
|
|
700
|
+
font-style: italic;
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
.wp-block-navigation__overlay-preview-placeholder {
|
|
704
|
+
width: 100%;
|
|
705
|
+
height: 200px;
|
|
706
|
+
background: $gray-100;
|
|
707
|
+
animation: wp-block-navigation-overlay-preview-pulse 1.5s ease-in-out infinite;
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
@keyframes wp-block-navigation-overlay-preview-pulse {
|
|
711
|
+
0%,
|
|
712
|
+
100% {
|
|
713
|
+
opacity: 1;
|
|
714
|
+
}
|
|
715
|
+
50% {
|
|
716
|
+
opacity: 0.5;
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
.wp-block-navigation__deleted-overlay-warning {
|
|
721
|
+
margin-top: $grid-unit-15;
|
|
722
|
+
}
|
package/src/navigation/index.php
CHANGED
|
@@ -5,6 +5,37 @@
|
|
|
5
5
|
* @package WordPress
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Returns the submenu visibility value with backward compatibility
|
|
10
|
+
* for the deprecated openSubmenusOnClick attribute.
|
|
11
|
+
*
|
|
12
|
+
* NOTE: Keep this function in sync with getSubmenuVisibility in
|
|
13
|
+
* packages/block-library/src/navigation/utils/get-submenu-visibility.js
|
|
14
|
+
*
|
|
15
|
+
* This function centralizes the migration logic from the boolean
|
|
16
|
+
* openSubmenusOnClick to the new submenuVisibility enum.
|
|
17
|
+
*
|
|
18
|
+
* @since 6.9.0
|
|
19
|
+
*
|
|
20
|
+
* @param array $attributes Block attributes containing submenuVisibility and/or openSubmenusOnClick.
|
|
21
|
+
* @return string The visibility mode: 'hover', 'click', or 'always'.
|
|
22
|
+
*/
|
|
23
|
+
function block_core_navigation_get_submenu_visibility( $attributes ) {
|
|
24
|
+
$submenu_visibility = isset( $attributes['submenuVisibility'] ) ? $attributes['submenuVisibility'] : null;
|
|
25
|
+
$open_submenus_on_click = isset( $attributes['openSubmenusOnClick'] ) ? $attributes['openSubmenusOnClick'] : null;
|
|
26
|
+
|
|
27
|
+
// If new attribute is set, use it.
|
|
28
|
+
if ( null !== $submenu_visibility ) {
|
|
29
|
+
return $submenu_visibility;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Fall back to old attribute for backward compatibility.
|
|
33
|
+
// openSubmenusOnClick: true -> 'click'
|
|
34
|
+
// openSubmenusOnClick: false -> 'hover'
|
|
35
|
+
// openSubmenusOnClick: null -> 'hover' (default)
|
|
36
|
+
return ! empty( $open_submenus_on_click ) ? 'click' : 'hover';
|
|
37
|
+
}
|
|
38
|
+
|
|
8
39
|
/**
|
|
9
40
|
* Helper functions used to render the navigation block.
|
|
10
41
|
*
|
|
@@ -119,9 +150,12 @@ class WP_Navigation_Block_Renderer {
|
|
|
119
150
|
* @return bool Returns whether or not to load the view script.
|
|
120
151
|
*/
|
|
121
152
|
private static function is_interactive( $attributes, $inner_blocks ) {
|
|
122
|
-
$has_submenus
|
|
123
|
-
$is_responsive_menu
|
|
124
|
-
|
|
153
|
+
$has_submenus = static::has_submenus( $inner_blocks );
|
|
154
|
+
$is_responsive_menu = static::is_responsive( $attributes );
|
|
155
|
+
$computed_visibility = block_core_navigation_get_submenu_visibility( $attributes );
|
|
156
|
+
$open_on_click = 'click' === $computed_visibility;
|
|
157
|
+
$show_submenu_icon = ! empty( $attributes['showSubmenuIcon'] );
|
|
158
|
+
return ( $has_submenus && ( $open_on_click || $show_submenu_icon ) ) || $is_responsive_menu;
|
|
125
159
|
}
|
|
126
160
|
|
|
127
161
|
/**
|
|
@@ -354,14 +388,18 @@ class WP_Navigation_Block_Renderer {
|
|
|
354
388
|
}
|
|
355
389
|
|
|
356
390
|
// Parse the template part ID (format: "theme//slug").
|
|
391
|
+
// If it's just a slug, construct the full ID using the current theme.
|
|
357
392
|
$parts = explode( '//', $overlay_template_part_id, 2 );
|
|
358
|
-
if ( count( $parts )
|
|
359
|
-
|
|
393
|
+
if ( count( $parts ) === 2 ) {
|
|
394
|
+
// Already in "theme//slug" format (backward compatibility).
|
|
395
|
+
$theme = $parts[0];
|
|
396
|
+
$slug = $parts[1];
|
|
397
|
+
} else {
|
|
398
|
+
// Just a slug, use current theme.
|
|
399
|
+
$theme = get_stylesheet();
|
|
400
|
+
$slug = $overlay_template_part_id;
|
|
360
401
|
}
|
|
361
402
|
|
|
362
|
-
$theme = $parts[0];
|
|
363
|
-
$slug = $parts[1];
|
|
364
|
-
|
|
365
403
|
// Only query for template parts from the active theme.
|
|
366
404
|
if ( get_stylesheet() !== $theme ) {
|
|
367
405
|
return new WP_Block_List( array(), $attributes );
|
|
@@ -390,7 +428,9 @@ class WP_Navigation_Block_Renderer {
|
|
|
390
428
|
|
|
391
429
|
if ( ! $template_part_post ) {
|
|
392
430
|
// Try to get from theme file if not in database.
|
|
393
|
-
|
|
431
|
+
// Construct the full template part ID for get_block_file_template.
|
|
432
|
+
$full_template_part_id = $theme . '//' . $slug;
|
|
433
|
+
$block_template = get_block_file_template( $full_template_part_id, 'wp_template_part' );
|
|
394
434
|
if ( isset( $block_template->content ) ) {
|
|
395
435
|
$parsed_blocks = parse_blocks( $block_template->content );
|
|
396
436
|
$blocks = block_core_navigation_filter_out_empty_blocks( $parsed_blocks );
|
|
@@ -962,8 +1002,13 @@ class WP_Navigation_Block_Renderer {
|
|
|
962
1002
|
|
|
963
1003
|
static::handle_view_script_module_loading( $attributes, $block, $inner_blocks );
|
|
964
1004
|
|
|
1005
|
+
// Use div wrapper if this navigation block is within an overlay template part.
|
|
1006
|
+
$is_within_overlay = $attributes['_isWithinOverlayTemplatePart'] ?? false;
|
|
1007
|
+
$tag_name = $is_within_overlay ? 'div' : 'nav';
|
|
1008
|
+
|
|
965
1009
|
return sprintf(
|
|
966
|
-
'
|
|
1010
|
+
'<%1$s %2$s>%3$s</%1$s>',
|
|
1011
|
+
$tag_name,
|
|
967
1012
|
static::get_nav_attributes( $attributes, $inner_blocks ),
|
|
968
1013
|
static::get_inner_block_markup( $attributes, $inner_blocks )
|
|
969
1014
|
);
|
|
@@ -1109,7 +1154,10 @@ function block_core_navigation_add_directives_to_submenu( $tags, $block_attribut
|
|
|
1109
1154
|
// event.
|
|
1110
1155
|
$tags->set_attribute( 'tabindex', '-1' );
|
|
1111
1156
|
|
|
1112
|
-
|
|
1157
|
+
$computed_visibility = block_core_navigation_get_submenu_visibility( $block_attributes );
|
|
1158
|
+
$open_on_hover = 'hover' === $computed_visibility;
|
|
1159
|
+
|
|
1160
|
+
if ( $open_on_hover ) {
|
|
1113
1161
|
$tags->set_attribute( 'data-wp-on--mouseenter', 'actions.openMenuOnHover' );
|
|
1114
1162
|
$tags->set_attribute( 'data-wp-on--mouseleave', 'actions.closeMenuOnHover' );
|
|
1115
1163
|
}
|
|
@@ -237,19 +237,76 @@ $navigation-icon-size: 24px;
|
|
|
237
237
|
}
|
|
238
238
|
|
|
239
239
|
// Custom menu items.
|
|
240
|
+
// Mixin for showing submenu containers
|
|
241
|
+
@mixin show-submenu {
|
|
242
|
+
visibility: visible;
|
|
243
|
+
overflow: visible;
|
|
244
|
+
opacity: 1;
|
|
245
|
+
width: auto;
|
|
246
|
+
height: auto;
|
|
247
|
+
}
|
|
248
|
+
|
|
240
249
|
// Show submenus on hover unless they open on click.
|
|
241
250
|
&:not(.open-on-click):hover > .wp-block-navigation__submenu-container,
|
|
242
251
|
// Keep submenus open when focus is within.
|
|
243
252
|
&:not(.open-on-click):not(.open-on-hover-click):focus-within > .wp-block-navigation__submenu-container,
|
|
244
253
|
// Show submenus on click.
|
|
245
254
|
.wp-block-navigation-submenu__toggle[aria-expanded="true"] ~ .wp-block-navigation__submenu-container {
|
|
246
|
-
|
|
247
|
-
overflow: visible;
|
|
248
|
-
opacity: 1;
|
|
249
|
-
width: auto;
|
|
250
|
-
height: auto;
|
|
255
|
+
@include show-submenu;
|
|
251
256
|
min-width: 200px;
|
|
252
257
|
}
|
|
258
|
+
|
|
259
|
+
// Always show submenus when open-always class is present
|
|
260
|
+
&.open-always {
|
|
261
|
+
flex-wrap: var(--navigation-layout-wrap, wrap);
|
|
262
|
+
flex-direction: var(--navigation-layout-direction, initial);
|
|
263
|
+
justify-content: var(--navigation-layout-justify, initial);
|
|
264
|
+
align-items: var(--navigation-layout-align, initial);
|
|
265
|
+
gap: var(--wp--style--block-gap, 2em);
|
|
266
|
+
|
|
267
|
+
.wp-block-navigation-item {
|
|
268
|
+
justify-content: var(--navigation-layout-justify, initial);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Reset gap for submenus so they can rely on consistent gap spacing between items.
|
|
272
|
+
&.wp-block-navigation-submenu,
|
|
273
|
+
.wp-block-navigation__submenu-container {
|
|
274
|
+
gap: var(--wp--style--block-gap, 2em);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// Reset padding top for submenus so they can rely on consistent gap spacing between items.
|
|
278
|
+
&.wp-block-navigation-submenu,
|
|
279
|
+
.wp-block-navigation__submenu-container,
|
|
280
|
+
.wp-block-navigation-item {
|
|
281
|
+
padding-top: 0;
|
|
282
|
+
padding-bottom: 0;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// Give auto indention for submenus sized by the gap spacing
|
|
286
|
+
.wp-block-navigation__submenu-container {
|
|
287
|
+
padding-left: var(--wp--style--block-gap, 2em);
|
|
288
|
+
padding-right: var(--wp--style--block-gap, 2em);
|
|
289
|
+
|
|
290
|
+
// Padding reset
|
|
291
|
+
.wp-block-navigation-item__content {
|
|
292
|
+
padding: 0;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
> .wp-block-navigation-item__content,
|
|
297
|
+
.wp-block-navigation__submenu-container > .wp-block-navigation-item > .wp-block-navigation-item__content {
|
|
298
|
+
flex-grow: 0;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
> .wp-block-navigation__submenu-container {
|
|
302
|
+
@include show-submenu;
|
|
303
|
+
flex-basis: 100%;
|
|
304
|
+
position: static;
|
|
305
|
+
border: none;
|
|
306
|
+
background-color: transparent;
|
|
307
|
+
color: inherit;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
253
310
|
}
|
|
254
311
|
|
|
255
312
|
// Submenu indentation when there's a background.
|
|
@@ -527,89 +584,92 @@ button.wp-block-navigation-item__content {
|
|
|
527
584
|
padding-top: calc(2rem + #{ $navigation-icon-size });
|
|
528
585
|
}
|
|
529
586
|
|
|
530
|
-
.
|
|
531
|
-
// Don't crop the focus style.
|
|
532
|
-
overflow: visible;
|
|
533
|
-
|
|
534
|
-
// Override the container flex layout settings
|
|
535
|
-
// because we want overlay menu to always display
|
|
536
|
-
// as a column.
|
|
537
|
-
display: flex;
|
|
538
|
-
flex-direction: column;
|
|
539
|
-
flex-wrap: nowrap;
|
|
540
|
-
|
|
541
|
-
// Inherit alignment settings from container.
|
|
542
|
-
align-items: var(--navigation-layout-justification-setting, inherit);
|
|
543
|
-
|
|
544
|
-
// Always align the contents of the menu to the top.
|
|
545
|
-
&,
|
|
546
|
-
.wp-block-page-list,
|
|
547
|
-
.wp-block-navigation__container {
|
|
548
|
-
justify-content: flex-start;
|
|
549
|
-
}
|
|
587
|
+
&:where(:not(.disable-default-overlay)) {
|
|
550
588
|
|
|
551
|
-
.wp-block-
|
|
552
|
-
|
|
553
|
-
|
|
589
|
+
.wp-block-navigation__responsive-container-content {
|
|
590
|
+
// Don't crop the focus style.
|
|
591
|
+
overflow: visible;
|
|
554
592
|
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
//
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
width: auto;
|
|
562
|
-
overflow: initial;
|
|
563
|
-
min-width: 200px;
|
|
564
|
-
|
|
565
|
-
// Position and style.
|
|
566
|
-
position: static;
|
|
567
|
-
border: none;
|
|
568
|
-
padding-left: 2rem;
|
|
569
|
-
padding-right: 2rem;
|
|
570
|
-
}
|
|
593
|
+
// Override the container flex layout settings
|
|
594
|
+
// because we want overlay menu to always display
|
|
595
|
+
// as a column.
|
|
596
|
+
display: flex;
|
|
597
|
+
flex-direction: column;
|
|
598
|
+
flex-wrap: nowrap;
|
|
571
599
|
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
.wp-block-navigation__container {
|
|
575
|
-
gap: inherit;
|
|
576
|
-
}
|
|
600
|
+
// Inherit alignment settings from container.
|
|
601
|
+
align-items: var(--navigation-layout-justification-setting, inherit);
|
|
577
602
|
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
603
|
+
// Always align the contents of the menu to the top.
|
|
604
|
+
&,
|
|
605
|
+
.wp-block-page-list,
|
|
606
|
+
.wp-block-navigation__container {
|
|
607
|
+
justify-content: flex-start;
|
|
608
|
+
}
|
|
582
609
|
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
610
|
+
.wp-block-navigation__submenu-icon {
|
|
611
|
+
display: none;
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
// Always expand/unfold submenus inside the modal.
|
|
615
|
+
.has-child .wp-block-navigation__submenu-container {
|
|
616
|
+
// Unset CSS that hides dropdown menus.
|
|
617
|
+
opacity: 1;
|
|
618
|
+
visibility: visible;
|
|
619
|
+
height: auto;
|
|
620
|
+
width: auto;
|
|
621
|
+
overflow: initial;
|
|
622
|
+
min-width: 200px;
|
|
623
|
+
|
|
624
|
+
// Position and style.
|
|
625
|
+
position: static;
|
|
626
|
+
border: none;
|
|
627
|
+
padding-left: 2rem;
|
|
628
|
+
padding-right: 2rem;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
// Space unfolded items using gap and padding for submenus.
|
|
632
|
+
.wp-block-navigation__submenu-container,
|
|
633
|
+
.wp-block-navigation__container {
|
|
634
|
+
gap: inherit;
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
// Apply top padding to nested submenus.
|
|
638
|
+
.wp-block-navigation__submenu-container {
|
|
639
|
+
padding-top: var(--wp--style--block-gap, 2em);
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
// A default padding is added to submenu items. It's not appropriate inside the modal.
|
|
643
|
+
.wp-block-navigation-item__content {
|
|
644
|
+
padding: 0;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
// Default column display for overlay menu contents.
|
|
648
|
+
.wp-block-navigation__container,
|
|
649
|
+
.wp-block-navigation-item,
|
|
650
|
+
.wp-block-page-list {
|
|
651
|
+
display: flex;
|
|
652
|
+
flex-direction: column;
|
|
653
|
+
// Inherit alignment settings from container.
|
|
654
|
+
align-items: var(--navigation-layout-justification-setting, initial);
|
|
655
|
+
}
|
|
586
656
|
}
|
|
587
657
|
|
|
588
|
-
//
|
|
658
|
+
// Remove background colors for items inside the overlay menu.
|
|
659
|
+
// Has to be !important to override global styles.
|
|
660
|
+
.wp-block-navigation-item .wp-block-navigation__submenu-container,
|
|
589
661
|
.wp-block-navigation__container,
|
|
590
662
|
.wp-block-navigation-item,
|
|
591
663
|
.wp-block-page-list {
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
// Inherit alignment settings from container.
|
|
595
|
-
align-items: var(--navigation-layout-justification-setting, initial);
|
|
664
|
+
color: inherit !important;
|
|
665
|
+
background: transparent !important;
|
|
596
666
|
}
|
|
597
|
-
}
|
|
598
667
|
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
.wp-block-page-list {
|
|
605
|
-
color: inherit !important;
|
|
606
|
-
background: transparent !important;
|
|
607
|
-
}
|
|
608
|
-
|
|
609
|
-
// Override justification dropdown menu positioning rules.
|
|
610
|
-
.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container {
|
|
611
|
-
right: auto;
|
|
612
|
-
left: auto;
|
|
668
|
+
// Override justification dropdown menu positioning rules.
|
|
669
|
+
.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container {
|
|
670
|
+
right: auto;
|
|
671
|
+
left: auto;
|
|
672
|
+
}
|
|
613
673
|
}
|
|
614
674
|
}
|
|
615
675
|
|
|
@@ -621,6 +681,10 @@ button.wp-block-navigation-item__content {
|
|
|
621
681
|
width: 100%;
|
|
622
682
|
}
|
|
623
683
|
|
|
684
|
+
.wp-block-navigation__responsive-close {
|
|
685
|
+
max-width: none;
|
|
686
|
+
}
|
|
687
|
+
|
|
624
688
|
// When menu is open with custom overlay, hide default navigation and show overlay.
|
|
625
689
|
&.is-menu-open {
|
|
626
690
|
.wp-block-navigation__responsive-container-content {
|