@wordpress/block-library 11.0.2-next.v.202609171837.0 → 11.2.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 +44 -1
- package/build/accordion/block.json +4 -1
- package/build/accordion-heading/block.json +1 -0
- package/build/accordion-item/block.json +7 -1
- package/build/accordion-panel/block.json +9 -1
- package/build/archives/block.json +12 -0
- package/build/audio/block.json +8 -0
- package/build/audio/edit.cjs +2 -1
- package/build/audio/edit.cjs.map +2 -2
- package/build/avatar/block.json +4 -0
- package/build/avatar/edit.cjs +31 -1
- package/build/avatar/edit.cjs.map +3 -3
- package/build/breadcrumbs/block.json +3 -0
- package/build/breadcrumbs/edit.cjs.map +3 -3
- package/build/button/block.json +6 -0
- package/build/button/edit.cjs +9 -6
- package/build/button/edit.cjs.map +2 -2
- package/build/buttons/block.json +15 -1
- package/build/categories/block.json +12 -1
- package/build/code/block.json +13 -0
- package/build/column/block.json +9 -0
- package/build/column/edit.cjs +5 -0
- package/build/column/edit.cjs.map +2 -2
- package/build/columns/block.json +13 -0
- package/build/columns/edit.cjs +21 -112
- package/build/columns/edit.cjs.map +3 -3
- package/build/comment-author-name/block.json +3 -0
- package/build/comment-content/block.json +5 -0
- package/build/comment-date/block.json +3 -0
- package/build/comment-edit-link/block.json +3 -0
- package/build/comment-reply-link/block.json +3 -0
- package/build/comments/block.json +10 -0
- package/build/comments/edit/placeholder.cjs +95 -87
- package/build/comments/edit/placeholder.cjs.map +2 -2
- package/build/comments-pagination/block.json +14 -0
- package/build/comments-pagination-next/block.json +3 -0
- package/build/comments-pagination-numbers/block.json +3 -0
- package/build/comments-pagination-previous/block.json +6 -0
- package/build/comments-title/block.json +3 -0
- package/build/cover/block.json +2 -1
- package/build/cover/edit/index.cjs +30 -6
- package/build/cover/edit/index.cjs.map +2 -2
- package/build/cover/edit/inspector-controls.cjs +56 -14
- package/build/cover/edit/inspector-controls.cjs.map +2 -2
- package/build/cover/embed-video-utils.cjs +9 -8
- package/build/cover/embed-video-utils.cjs.map +2 -2
- package/build/cover/view.cjs +21 -0
- package/build/cover/view.cjs.map +7 -0
- package/build/details/block.json +14 -0
- package/build/embed/block.json +6 -1
- package/build/file/block.json +14 -0
- package/build/footnotes/block.json +13 -0
- package/build/gallery/block.json +22 -0
- package/build/gallery/dynamic-gallery.cjs +32 -93
- package/build/gallery/dynamic-gallery.cjs.map +3 -3
- package/build/gallery/edit.cjs +104 -42
- package/build/gallery/edit.cjs.map +2 -2
- package/build/gallery/order-controls.cjs +107 -0
- package/build/gallery/order-controls.cjs.map +7 -0
- package/build/gallery/order-images.cjs +92 -0
- package/build/gallery/order-images.cjs.map +7 -0
- package/build/gallery/order-options.cjs +62 -0
- package/build/gallery/order-options.cjs.map +7 -0
- package/build/gallery/use-dynamic-gallery.cjs +1 -7
- package/build/gallery/use-dynamic-gallery.cjs.map +2 -2
- package/build/gallery/use-get-media.cjs +2 -3
- package/build/gallery/use-get-media.cjs.map +2 -2
- package/build/group/block.json +1 -0
- package/build/group/edit.cjs +3 -3
- package/build/group/edit.cjs.map +2 -2
- package/build/heading/block.json +14 -0
- package/build/home-link/block.json +30 -0
- package/build/home-link/edit.cjs.map +3 -3
- package/build/icon/components/custom-inserter/index.cjs +3 -1
- package/build/icon/components/custom-inserter/index.cjs.map +2 -2
- package/build/icon/edit.cjs +49 -5
- package/build/icon/edit.cjs.map +2 -2
- package/build/image/image.cjs +10 -8
- package/build/image/image.cjs.map +3 -3
- package/build/image/use-open-image-media-editor-modal.cjs +32 -8
- package/build/image/use-open-image-media-editor-modal.cjs.map +2 -2
- package/build/image/view.cjs +44 -50
- package/build/image/view.cjs.map +2 -2
- package/build/latest-comments/block.json +20 -0
- package/build/latest-posts/block.json +14 -0
- package/build/list/block.json +12 -1
- package/build/list-item/block.json +8 -1
- package/build/list-item/index.cjs +4 -0
- package/build/list-item/index.cjs.map +3 -3
- package/build/loginout/block.json +14 -0
- package/build/math/block.json +14 -0
- package/build/media-text/block.json +19 -0
- package/build/navigation/edit/index.cjs +1 -4
- package/build/navigation/edit/index.cjs.map +2 -2
- package/build/navigation-link/link-ui/index.cjs +33 -19
- package/build/navigation-link/link-ui/index.cjs.map +2 -2
- package/build/navigation-link/link-ui/page-creator.cjs.map +3 -3
- package/build/navigation-link/shared/controls.cjs.map +3 -3
- package/build/navigation-link/shared/index.cjs +5 -0
- package/build/navigation-link/shared/index.cjs.map +2 -2
- package/build/navigation-link/shared/use-block-suggestions.cjs +141 -0
- package/build/navigation-link/shared/use-block-suggestions.cjs.map +7 -0
- package/build/navigation-link/shared/use-link-preview.cjs +13 -13
- package/build/navigation-link/shared/use-link-preview.cjs.map +2 -2
- package/build/navigation-overlay-close/block.json +7 -0
- package/build/navigation-submenu/block.json +6 -0
- package/build/navigation-submenu/edit.cjs +9 -1
- package/build/navigation-submenu/edit.cjs.map +3 -3
- package/build/page-list/block.json +14 -0
- package/build/paragraph/block.json +1 -0
- package/build/paragraph/edit.cjs +1 -2
- package/build/paragraph/edit.cjs.map +2 -2
- package/build/playlist/block.json +1 -0
- package/build/post-author-biography/block.json +5 -0
- package/build/post-author-name/block.json +5 -0
- package/build/post-comments-count/block.json +3 -0
- package/build/post-comments-form/block.json +15 -0
- package/build/post-content/block.json +4 -1
- package/build/post-date/block.json +3 -0
- package/build/post-excerpt/block.json +9 -0
- package/build/post-featured-image/block.json +1 -0
- package/build/post-featured-image/edit.cjs +12 -10
- package/build/post-featured-image/edit.cjs.map +2 -2
- package/build/post-navigation-link/block.json +30 -0
- package/build/post-navigation-link/edit.cjs +13 -2
- package/build/post-navigation-link/edit.cjs.map +3 -3
- package/build/post-template/block.json +13 -1
- package/build/post-terms/block.json +10 -0
- package/build/post-time-to-read/block.json +10 -0
- package/build/post-title/block.json +14 -0
- package/build/preformatted/block.json +11 -0
- package/build/pullquote/block.json +3 -1
- package/build/query-no-results/block.json +14 -2
- package/build/query-pagination/block.json +20 -0
- package/build/query-pagination-next/block.json +3 -0
- package/build/query-pagination-numbers/block.json +3 -0
- package/build/query-pagination-previous/block.json +3 -0
- package/build/query-title/block.json +3 -0
- package/build/query-total/block.json +10 -0
- package/build/quote/block.json +3 -0
- package/build/read-more/block.json +11 -0
- package/build/rss/block.json +10 -0
- package/build/search/block.json +2 -1
- package/build/site-tagline/block.json +12 -1
- package/build/site-title/block.json +11 -1
- package/build/social-links/block.json +4 -0
- package/build/social-links/edit.cjs +2 -3
- package/build/social-links/edit.cjs.map +2 -2
- package/build/tab-list/block.json +4 -0
- package/build/tab-list/edit.cjs +3 -1
- package/build/tab-list/edit.cjs.map +3 -3
- package/build/tab-list/save.cjs +3 -1
- package/build/tab-list/save.cjs.map +3 -3
- package/build/tab-panel/block.json +25 -0
- package/build/tab-panel/controls.cjs.map +3 -3
- package/build/tab-panels/block.json +21 -1
- package/build/table-of-contents/block.json +7 -0
- package/build/tabs/block.json +27 -1
- package/build/tag-cloud/block.json +19 -0
- package/build/template-part/edit/selection-modal.cjs.map +1 -1
- package/build/term-count/block.json +12 -0
- package/build/term-description/block.json +13 -0
- package/build/term-name/block.json +16 -1
- package/build/term-template/block.json +14 -1
- package/build/utils/search-patterns.cjs +7 -43
- package/build/utils/search-patterns.cjs.map +3 -3
- package/build/utils/style-state.cjs +4 -6
- package/build/utils/style-state.cjs.map +2 -2
- package/build/utils/waveform-utils.cjs +2 -2
- package/build/utils/waveform-utils.cjs.map +2 -2
- package/build/verse/block.json +4 -0
- package/build/video/block.json +12 -0
- package/build/video/edit.cjs +30 -14
- package/build/video/edit.cjs.map +3 -3
- package/build/video/index.cjs +0 -2
- package/build/video/index.cjs.map +3 -3
- package/build/video/save.cjs +5 -1
- package/build/video/save.cjs.map +3 -3
- package/build-module/accordion/block.json +4 -1
- package/build-module/accordion-heading/block.json +1 -0
- package/build-module/accordion-item/block.json +7 -1
- package/build-module/accordion-panel/block.json +9 -1
- package/build-module/archives/block.json +12 -0
- package/build-module/audio/block.json +8 -0
- package/build-module/audio/edit.mjs +2 -1
- package/build-module/audio/edit.mjs.map +2 -2
- package/build-module/avatar/block.json +4 -0
- package/build-module/avatar/edit.mjs +33 -2
- package/build-module/avatar/edit.mjs.map +2 -2
- package/build-module/breadcrumbs/block.json +3 -0
- package/build-module/breadcrumbs/edit.mjs +3 -3
- package/build-module/breadcrumbs/edit.mjs.map +2 -2
- package/build-module/button/block.json +6 -0
- package/build-module/button/edit.mjs +11 -7
- package/build-module/button/edit.mjs.map +2 -2
- package/build-module/buttons/block.json +15 -1
- package/build-module/categories/block.json +12 -1
- package/build-module/code/block.json +13 -0
- package/build-module/column/block.json +9 -0
- package/build-module/column/edit.mjs +5 -0
- package/build-module/column/edit.mjs.map +2 -2
- package/build-module/columns/block.json +13 -0
- package/build-module/columns/edit.mjs +22 -122
- package/build-module/columns/edit.mjs.map +2 -2
- package/build-module/comment-author-name/block.json +3 -0
- package/build-module/comment-content/block.json +5 -0
- package/build-module/comment-date/block.json +3 -0
- package/build-module/comment-edit-link/block.json +3 -0
- package/build-module/comment-reply-link/block.json +3 -0
- package/build-module/comments/block.json +10 -0
- package/build-module/comments/edit/placeholder.mjs +95 -87
- package/build-module/comments/edit/placeholder.mjs.map +2 -2
- package/build-module/comments-pagination/block.json +14 -0
- package/build-module/comments-pagination-next/block.json +3 -0
- package/build-module/comments-pagination-numbers/block.json +3 -0
- package/build-module/comments-pagination-previous/block.json +6 -0
- package/build-module/comments-title/block.json +3 -0
- package/build-module/cover/block.json +2 -1
- package/build-module/cover/edit/index.mjs +36 -7
- package/build-module/cover/edit/index.mjs.map +2 -2
- package/build-module/cover/edit/inspector-controls.mjs +62 -16
- package/build-module/cover/edit/inspector-controls.mjs.map +2 -2
- package/build-module/cover/embed-video-utils.mjs +9 -8
- package/build-module/cover/embed-video-utils.mjs.map +2 -2
- package/build-module/cover/view.mjs +19 -0
- package/build-module/cover/view.mjs.map +7 -0
- package/build-module/details/block.json +14 -0
- package/build-module/embed/block.json +6 -1
- package/build-module/file/block.json +14 -0
- package/build-module/footnotes/block.json +13 -0
- package/build-module/gallery/block.json +22 -0
- package/build-module/gallery/dynamic-gallery.mjs +33 -97
- package/build-module/gallery/dynamic-gallery.mjs.map +2 -2
- package/build-module/gallery/edit.mjs +111 -44
- package/build-module/gallery/edit.mjs.map +2 -2
- package/build-module/gallery/order-controls.mjs +87 -0
- package/build-module/gallery/order-controls.mjs.map +7 -0
- package/build-module/gallery/order-images.mjs +66 -0
- package/build-module/gallery/order-images.mjs.map +7 -0
- package/build-module/gallery/order-options.mjs +33 -0
- package/build-module/gallery/order-options.mjs.map +7 -0
- package/build-module/gallery/use-dynamic-gallery.mjs +1 -7
- package/build-module/gallery/use-dynamic-gallery.mjs.map +2 -2
- package/build-module/gallery/use-get-media.mjs +2 -3
- package/build-module/gallery/use-get-media.mjs.map +2 -2
- package/build-module/group/block.json +1 -0
- package/build-module/group/edit.mjs +4 -4
- package/build-module/group/edit.mjs.map +2 -2
- package/build-module/heading/block.json +14 -0
- package/build-module/home-link/block.json +30 -0
- package/build-module/home-link/edit.mjs +2 -2
- package/build-module/home-link/edit.mjs.map +2 -2
- package/build-module/icon/components/custom-inserter/index.mjs +3 -1
- package/build-module/icon/components/custom-inserter/index.mjs.map +2 -2
- package/build-module/icon/edit.mjs +50 -6
- package/build-module/icon/edit.mjs.map +2 -2
- package/build-module/image/image.mjs +12 -10
- package/build-module/image/image.mjs.map +2 -2
- package/build-module/image/use-open-image-media-editor-modal.mjs +32 -8
- package/build-module/image/use-open-image-media-editor-modal.mjs.map +2 -2
- package/build-module/image/view.mjs +44 -50
- package/build-module/image/view.mjs.map +2 -2
- package/build-module/latest-comments/block.json +20 -0
- package/build-module/latest-posts/block.json +14 -0
- package/build-module/list/block.json +12 -1
- package/build-module/list-item/block.json +8 -1
- package/build-module/list-item/index.mjs +4 -0
- package/build-module/list-item/index.mjs.map +2 -2
- package/build-module/loginout/block.json +14 -0
- package/build-module/math/block.json +14 -0
- package/build-module/media-text/block.json +19 -0
- package/build-module/navigation/edit/index.mjs +1 -4
- package/build-module/navigation/edit/index.mjs.map +2 -2
- package/build-module/navigation-link/link-ui/index.mjs +39 -20
- package/build-module/navigation-link/link-ui/index.mjs.map +2 -2
- package/build-module/navigation-link/link-ui/page-creator.mjs +2 -2
- package/build-module/navigation-link/link-ui/page-creator.mjs.map +2 -2
- package/build-module/navigation-link/shared/controls.mjs +2 -2
- package/build-module/navigation-link/shared/controls.mjs.map +2 -2
- package/build-module/navigation-link/shared/index.mjs +6 -0
- package/build-module/navigation-link/shared/index.mjs.map +2 -2
- package/build-module/navigation-link/shared/use-block-suggestions.mjs +120 -0
- package/build-module/navigation-link/shared/use-block-suggestions.mjs.map +7 -0
- package/build-module/navigation-link/shared/use-link-preview.mjs +13 -13
- package/build-module/navigation-link/shared/use-link-preview.mjs.map +2 -2
- package/build-module/navigation-overlay-close/block.json +7 -0
- package/build-module/navigation-submenu/block.json +6 -0
- package/build-module/navigation-submenu/edit.mjs +11 -2
- package/build-module/navigation-submenu/edit.mjs.map +2 -2
- package/build-module/page-list/block.json +14 -0
- package/build-module/paragraph/block.json +1 -0
- package/build-module/paragraph/edit.mjs +1 -2
- package/build-module/paragraph/edit.mjs.map +2 -2
- package/build-module/playlist/block.json +1 -0
- package/build-module/post-author-biography/block.json +5 -0
- package/build-module/post-author-name/block.json +5 -0
- package/build-module/post-comments-count/block.json +3 -0
- package/build-module/post-comments-form/block.json +15 -0
- package/build-module/post-content/block.json +4 -1
- package/build-module/post-date/block.json +3 -0
- package/build-module/post-excerpt/block.json +9 -0
- package/build-module/post-featured-image/block.json +1 -0
- package/build-module/post-featured-image/edit.mjs +12 -10
- package/build-module/post-featured-image/edit.mjs.map +2 -2
- package/build-module/post-navigation-link/block.json +30 -0
- package/build-module/post-navigation-link/edit.mjs +17 -3
- package/build-module/post-navigation-link/edit.mjs.map +2 -2
- package/build-module/post-template/block.json +13 -1
- package/build-module/post-terms/block.json +10 -0
- package/build-module/post-time-to-read/block.json +10 -0
- package/build-module/post-title/block.json +14 -0
- package/build-module/preformatted/block.json +11 -0
- package/build-module/pullquote/block.json +3 -1
- package/build-module/query-no-results/block.json +14 -2
- package/build-module/query-pagination/block.json +20 -0
- package/build-module/query-pagination-next/block.json +3 -0
- package/build-module/query-pagination-numbers/block.json +3 -0
- package/build-module/query-pagination-previous/block.json +3 -0
- package/build-module/query-title/block.json +3 -0
- package/build-module/query-total/block.json +10 -0
- package/build-module/quote/block.json +3 -0
- package/build-module/read-more/block.json +11 -0
- package/build-module/rss/block.json +10 -0
- package/build-module/search/block.json +2 -1
- package/build-module/site-tagline/block.json +12 -1
- package/build-module/site-title/block.json +11 -1
- package/build-module/social-links/block.json +4 -0
- package/build-module/social-links/edit.mjs +2 -3
- package/build-module/social-links/edit.mjs.map +2 -2
- package/build-module/tab-list/block.json +4 -0
- package/build-module/tab-list/edit.mjs +4 -1
- package/build-module/tab-list/edit.mjs.map +2 -2
- package/build-module/tab-list/save.mjs +4 -1
- package/build-module/tab-list/save.mjs.map +2 -2
- package/build-module/tab-panel/block.json +25 -0
- package/build-module/tab-panel/controls.mjs +2 -2
- package/build-module/tab-panel/controls.mjs.map +2 -2
- package/build-module/tab-panels/block.json +21 -1
- package/build-module/table-of-contents/block.json +7 -0
- package/build-module/tabs/block.json +27 -1
- package/build-module/tag-cloud/block.json +19 -0
- package/build-module/template-part/edit/selection-modal.mjs.map +1 -1
- package/build-module/term-count/block.json +12 -0
- package/build-module/term-description/block.json +13 -0
- package/build-module/term-name/block.json +16 -1
- package/build-module/term-template/block.json +14 -1
- package/build-module/utils/search-patterns.mjs +7 -32
- package/build-module/utils/search-patterns.mjs.map +2 -2
- package/build-module/utils/style-state.mjs +6 -4
- package/build-module/utils/style-state.mjs.map +2 -2
- package/build-module/utils/waveform-utils.mjs +1 -1
- package/build-module/utils/waveform-utils.mjs.map +1 -1
- package/build-module/verse/block.json +4 -0
- package/build-module/video/block.json +12 -0
- package/build-module/video/edit.mjs +32 -15
- package/build-module/video/edit.mjs.map +2 -2
- package/build-module/video/index.mjs +0 -2
- package/build-module/video/index.mjs.map +2 -2
- package/build-module/video/save.mjs +7 -2
- package/build-module/video/save.mjs.map +2 -2
- package/build-style/avatar/editor-rtl.css +4 -0
- package/build-style/avatar/editor.css +4 -0
- package/build-style/comments-pagination/style-rtl.css +3 -0
- package/build-style/comments-pagination/style.css +3 -0
- package/build-style/common-rtl.css +32 -1
- package/build-style/common.css +35 -2
- package/build-style/editor-rtl.css +23 -6
- package/build-style/editor.css +23 -6
- package/build-style/embed/style-rtl.css +4 -1
- package/build-style/embed/style.css +4 -1
- package/build-style/gallery/editor-rtl.css +1 -3
- package/build-style/gallery/editor.css +1 -3
- package/build-style/image/editor-rtl.css +6 -0
- package/build-style/image/editor.css +6 -0
- package/build-style/image/style-rtl.css +11 -2
- package/build-style/image/style.css +11 -2
- package/build-style/media-text/style-rtl.css +4 -1
- package/build-style/media-text/style.css +4 -1
- package/build-style/navigation/style-rtl.css +18 -3
- package/build-style/navigation/style.css +18 -3
- package/build-style/navigation-link/editor-rtl.css +3 -1
- package/build-style/navigation-link/editor.css +3 -1
- package/build-style/navigation-overlay-close/style-rtl.css +1 -1
- package/build-style/navigation-overlay-close/style.css +1 -1
- package/build-style/navigation-submenu/editor-rtl.css +3 -1
- package/build-style/navigation-submenu/editor.css +3 -1
- package/build-style/post-navigation-link/style-rtl.css +3 -0
- package/build-style/post-navigation-link/style.css +3 -0
- package/build-style/query-pagination/style-rtl.css +3 -0
- package/build-style/query-pagination/style.css +3 -0
- package/build-style/style-rtl.css +94 -13
- package/build-style/style.css +97 -14
- package/build-style/tab-panel/style-rtl.css +2 -0
- package/build-style/tab-panel/style.css +2 -0
- package/build-style/table/editor-rtl.css +6 -1
- package/build-style/table/editor.css +6 -1
- package/build-style/table/style-rtl.css +4 -2
- package/build-style/table/style.css +4 -2
- package/build-style/tag-cloud/style-rtl.css +1 -1
- package/build-style/tag-cloud/style.css +1 -1
- package/build-style/verse/style-rtl.css +8 -1
- package/build-style/verse/style.css +8 -1
- package/build-types/gallery/order-controls.d.ts +58 -0
- package/build-types/gallery/order-controls.d.ts.map +1 -0
- package/build-types/gallery/order-options.d.ts +67 -0
- package/build-types/gallery/order-options.d.ts.map +1 -0
- package/package.json +46 -44
- package/src/accordion/README.md +3 -0
- package/src/accordion/block.json +4 -1
- package/src/accordion-heading/README.md +1 -0
- package/src/accordion-heading/block.json +1 -0
- package/src/accordion-item/README.md +5 -0
- package/src/accordion-item/block.json +7 -1
- package/src/accordion-panel/README.md +7 -0
- package/src/accordion-panel/block.json +9 -1
- package/src/archives/README.md +6 -0
- package/src/archives/block.json +12 -0
- package/src/audio/README.md +4 -0
- package/src/audio/block.json +8 -0
- package/src/audio/edit.jsx +2 -1
- package/src/avatar/README.md +2 -0
- package/src/avatar/block.json +4 -0
- package/src/avatar/edit.jsx +48 -2
- package/src/avatar/editor.scss +4 -0
- package/src/avatar/index.php +5 -3
- package/src/breadcrumbs/README.md +2 -0
- package/src/breadcrumbs/block.json +3 -0
- package/src/breadcrumbs/edit.jsx +3 -3
- package/src/breadcrumbs/index.php +1 -1
- package/src/button/README.md +4 -0
- package/src/button/block.json +6 -0
- package/src/button/edit.jsx +47 -52
- package/src/button/index.php +47 -0
- package/src/buttons/README.md +8 -0
- package/src/buttons/block.json +15 -1
- package/src/categories/README.md +6 -0
- package/src/categories/block.json +12 -1
- package/src/code/README.md +7 -0
- package/src/code/block.json +13 -0
- package/src/column/README.md +4 -0
- package/src/column/block.json +9 -0
- package/src/column/edit.jsx +6 -0
- package/src/columns/README.md +7 -0
- package/src/columns/block.json +13 -0
- package/src/columns/edit.jsx +1 -131
- package/src/comment-author-name/README.md +2 -0
- package/src/comment-author-name/block.json +3 -0
- package/src/comment-content/README.md +4 -0
- package/src/comment-content/block.json +5 -0
- package/src/comment-date/README.md +2 -0
- package/src/comment-date/block.json +3 -0
- package/src/comment-edit-link/README.md +2 -0
- package/src/comment-edit-link/block.json +3 -0
- package/src/comment-reply-link/README.md +2 -0
- package/src/comment-reply-link/block.json +3 -0
- package/src/comments/README.md +5 -0
- package/src/comments/block.json +10 -0
- package/src/comments/edit/placeholder.jsx +5 -1
- package/src/comments-pagination/README.md +6 -0
- package/src/comments-pagination/block.json +14 -0
- package/src/comments-pagination/style.scss +3 -0
- package/src/comments-pagination-next/README.md +2 -0
- package/src/comments-pagination-next/block.json +3 -0
- package/src/comments-pagination-numbers/README.md +2 -0
- package/src/comments-pagination-numbers/block.json +3 -0
- package/src/comments-pagination-previous/README.md +2 -0
- package/src/comments-pagination-previous/block.json +6 -0
- package/src/comments-title/README.md +2 -0
- package/src/comments-title/block.json +3 -0
- package/src/common.scss +38 -0
- package/src/cover/README.md +1 -0
- package/src/cover/block.json +2 -1
- package/src/cover/edit/index.jsx +41 -6
- package/src/cover/edit/inspector-controls.jsx +74 -14
- package/src/cover/embed-video-utils.js +18 -10
- package/src/cover/index.php +44 -15
- package/src/cover/test/edit.browser.test.js +200 -4
- package/src/cover/test/embed-video-utils.test.js +48 -0
- package/src/cover/view.js +22 -0
- package/src/details/README.md +8 -0
- package/src/details/block.json +14 -0
- package/src/embed/README.md +4 -0
- package/src/embed/block.json +6 -1
- package/src/embed/style.scss +7 -1
- package/src/file/README.md +8 -0
- package/src/file/block.json +14 -0
- package/src/footnotes/README.md +7 -0
- package/src/footnotes/block.json +13 -0
- package/src/gallery/README.md +17 -0
- package/src/gallery/block.json +22 -0
- package/src/gallery/dynamic-gallery.jsx +11 -91
- package/src/gallery/edit.jsx +147 -49
- package/src/gallery/editor.scss +5 -9
- package/src/gallery/order-controls.tsx +143 -0
- package/src/gallery/order-images.js +111 -0
- package/src/gallery/order-options.ts +75 -0
- package/src/gallery/test/edit.jsdom.test.js +87 -10
- package/src/gallery/test/order-images.js +162 -0
- package/src/gallery/use-dynamic-gallery.js +1 -9
- package/src/gallery/use-get-media.js +7 -2
- package/src/group/README.md +1 -0
- package/src/group/block.json +1 -0
- package/src/group/edit.jsx +5 -5
- package/src/heading/README.md +8 -0
- package/src/heading/block.json +14 -0
- package/src/home-link/README.md +11 -0
- package/src/home-link/block.json +30 -0
- package/src/home-link/edit.jsx +2 -2
- package/src/icon/components/custom-inserter/index.jsx +5 -1
- package/src/icon/edit.jsx +68 -7
- package/src/icon/index.php +10 -1
- package/src/image/editor.scss +8 -0
- package/src/image/image.jsx +13 -11
- package/src/image/index.php +3 -4
- package/src/image/style.scss +14 -2
- package/src/image/test/use-open-image-media-editor-modal.jsdom.test.js +201 -0
- package/src/image/use-open-image-media-editor-modal.js +37 -4
- package/src/image/view.js +64 -68
- package/src/latest-comments/README.md +8 -0
- package/src/latest-comments/block.json +20 -0
- package/src/latest-posts/README.md +8 -0
- package/src/latest-posts/block.json +14 -0
- package/src/list/README.md +6 -0
- package/src/list/block.json +12 -1
- package/src/list-item/README.md +6 -0
- package/src/list-item/block.json +8 -1
- package/src/list-item/index.js +5 -0
- package/src/loginout/README.md +8 -0
- package/src/loginout/block.json +14 -0
- package/src/math/README.md +8 -0
- package/src/math/block.json +14 -0
- package/src/media-text/README.md +18 -0
- package/src/media-text/block.json +19 -0
- package/src/media-text/style.scss +5 -1
- package/src/navigation/edit/index.jsx +2 -4
- package/src/navigation/style.scss +40 -4
- package/src/navigation/test/use-navigation-menu.jsdom.test.js +1 -1
- package/src/navigation-link/README.md +1 -1
- package/src/navigation-link/editor.scss +6 -1
- package/src/navigation-link/link-ui/index.jsx +60 -27
- package/src/navigation-link/link-ui/page-creator.jsx +2 -2
- package/src/navigation-link/link-ui/test/get-suggestions-query.jsdom.test.js +67 -0
- package/src/navigation-link/shared/controls.jsx +2 -2
- package/src/navigation-link/shared/index.js +4 -0
- package/src/navigation-link/shared/test/use-block-suggestions.jsdom.test.js +158 -0
- package/src/navigation-link/shared/test/use-entity-binding.jsdom.test.js +1 -7
- package/src/navigation-link/shared/test/use-link-preview.jsdom.test.js +22 -22
- package/src/navigation-link/shared/use-block-suggestions.js +192 -0
- package/src/navigation-link/shared/use-link-preview.js +15 -14
- package/src/navigation-overlay-close/README.md +1 -0
- package/src/navigation-overlay-close/block.json +7 -0
- package/src/navigation-overlay-close/style.scss +1 -1
- package/src/navigation-submenu/README.md +7 -0
- package/src/navigation-submenu/block.json +6 -0
- package/src/navigation-submenu/edit.jsx +11 -1
- package/src/navigation-submenu/editor.scss +6 -1
- package/src/navigation-submenu/index.php +11 -0
- package/src/page-list/README.md +8 -0
- package/src/page-list/block.json +14 -0
- package/src/paragraph/README.md +1 -0
- package/src/paragraph/block.json +1 -0
- package/src/paragraph/edit.jsx +1 -3
- package/src/playlist/README.md +1 -0
- package/src/playlist/block.json +1 -0
- package/src/playlist/test/edit-component.jsdom.test.jsx +11 -11
- package/src/playlist-track/test/edit.jsdom.test.jsx +3 -3
- package/src/post-author-biography/README.md +4 -0
- package/src/post-author-biography/block.json +5 -0
- package/src/post-author-name/README.md +4 -0
- package/src/post-author-name/block.json +5 -0
- package/src/post-comments-count/README.md +2 -0
- package/src/post-comments-count/block.json +3 -0
- package/src/post-comments-form/README.md +8 -0
- package/src/post-comments-form/block.json +15 -0
- package/src/post-content/README.md +3 -0
- package/src/post-content/block.json +4 -1
- package/src/post-date/README.md +2 -0
- package/src/post-date/block.json +3 -0
- package/src/post-excerpt/README.md +7 -0
- package/src/post-excerpt/block.json +9 -0
- package/src/post-featured-image/block.json +1 -0
- package/src/post-featured-image/edit.jsx +13 -11
- package/src/post-navigation-link/README.md +12 -0
- package/src/post-navigation-link/block.json +30 -0
- package/src/post-navigation-link/edit.jsx +23 -2
- package/src/post-navigation-link/index.php +94 -5
- package/src/post-navigation-link/style.scss +2 -0
- package/src/post-template/README.md +7 -0
- package/src/post-template/block.json +13 -1
- package/src/post-terms/README.md +8 -0
- package/src/post-terms/block.json +10 -0
- package/src/post-time-to-read/README.md +8 -0
- package/src/post-time-to-read/block.json +10 -0
- package/src/post-title/README.md +8 -0
- package/src/post-title/block.json +14 -0
- package/src/preformatted/README.md +9 -0
- package/src/preformatted/block.json +11 -0
- package/src/pullquote/README.md +2 -0
- package/src/pullquote/block.json +3 -1
- package/src/query-no-results/README.md +10 -0
- package/src/query-no-results/block.json +14 -2
- package/src/query-pagination/README.md +6 -0
- package/src/query-pagination/block.json +20 -0
- package/src/query-pagination/style.scss +3 -0
- package/src/query-pagination-next/README.md +2 -0
- package/src/query-pagination-next/block.json +3 -0
- package/src/query-pagination-numbers/README.md +2 -0
- package/src/query-pagination-numbers/block.json +3 -0
- package/src/query-pagination-previous/README.md +2 -0
- package/src/query-pagination-previous/block.json +3 -0
- package/src/query-title/README.md +2 -0
- package/src/query-title/block.json +3 -0
- package/src/query-total/README.md +8 -0
- package/src/query-total/block.json +10 -0
- package/src/quote/README.md +3 -0
- package/src/quote/block.json +3 -0
- package/src/read-more/README.md +8 -0
- package/src/read-more/block.json +11 -0
- package/src/rss/README.md +8 -0
- package/src/rss/block.json +10 -0
- package/src/search/README.md +1 -0
- package/src/search/block.json +2 -1
- package/src/site-tagline/README.md +9 -0
- package/src/site-tagline/block.json +12 -1
- package/src/site-title/README.md +8 -0
- package/src/site-title/block.json +11 -1
- package/src/social-links/README.md +3 -0
- package/src/social-links/block.json +4 -0
- package/src/social-links/edit.jsx +2 -3
- package/src/tab-list/README.md +2 -0
- package/src/tab-list/block.json +4 -0
- package/src/tab-list/edit.jsx +3 -0
- package/src/tab-list/save.jsx +3 -0
- package/src/tab-panel/README.md +9 -0
- package/src/tab-panel/block.json +25 -0
- package/src/tab-panel/controls.jsx +2 -2
- package/src/tab-panel/style.scss +5 -2
- package/src/tab-panels/README.md +9 -0
- package/src/tab-panels/block.json +21 -1
- package/src/table/editor.scss +8 -2
- package/src/table/style.scss +4 -4
- package/src/table-of-contents/README.md +6 -0
- package/src/table-of-contents/block.json +7 -0
- package/src/tabs/README.md +11 -0
- package/src/tabs/block.json +27 -1
- package/src/tag-cloud/README.md +9 -0
- package/src/tag-cloud/block.json +19 -0
- package/src/tag-cloud/style.scss +1 -1
- package/src/template-part/edit/selection-modal.jsx +1 -1
- package/src/template-part/index.php +16 -3
- package/src/term-count/README.md +10 -0
- package/src/term-count/block.json +12 -0
- package/src/term-description/README.md +8 -0
- package/src/term-description/block.json +13 -0
- package/src/term-name/README.md +9 -0
- package/src/term-name/block.json +16 -1
- package/src/term-name/index.php +1 -1
- package/src/term-template/README.md +8 -0
- package/src/term-template/block.json +14 -1
- package/src/utils/search-patterns.js +9 -53
- package/src/utils/style-state.js +6 -4
- package/src/utils/test/{search-patterns.js → search-patterns.jsdom.test.js} +1 -22
- package/src/utils/test/waveform-player-auto-init.jsdom.test.js +25 -0
- package/src/utils/test/waveform-player-dependency.jsdom.test.js +7 -60
- package/src/utils/test/waveform-utils.browser.test.js +3 -15
- package/src/utils/waveform-utils.js +1 -1
- package/src/verse/README.md +4 -0
- package/src/verse/block.json +4 -0
- package/src/verse/style.scss +11 -2
- package/src/video/README.md +11 -0
- package/src/video/block.json +12 -0
- package/src/video/edit.jsx +65 -49
- package/src/video/index.js +0 -2
- package/src/video/save.jsx +10 -1
- package/build/columns/utils.cjs +0 -112
- package/build/columns/utils.cjs.map +0 -7
- package/build/video/variations.cjs +0 -75
- package/build/video/variations.cjs.map +0 -7
- package/build-module/columns/utils.mjs +0 -78
- package/build-module/columns/utils.mjs.map +0 -7
- package/build-module/video/variations.mjs +0 -50
- package/build-module/video/variations.mjs.map +0 -7
- package/src/columns/test/utils.js +0 -331
- package/src/columns/utils.js +0 -176
- package/src/video/test/variations.js +0 -63
- package/src/video/variations.js +0 -62
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { getSuggestionsQuery } from '..';
|
|
3
|
+
|
|
4
|
+
const PER_PAGE = 20;
|
|
5
|
+
|
|
6
|
+
const LINK_TYPES = [
|
|
7
|
+
[ 'page', 'post-type', { type: 'post', subtype: 'page' } ],
|
|
8
|
+
[ 'post', 'post-type', { type: 'post', subtype: 'post' } ],
|
|
9
|
+
[ 'category', 'taxonomy', { type: 'term', subtype: 'category' } ],
|
|
10
|
+
[ 'tag', 'taxonomy', { type: 'term', subtype: 'post_tag' } ],
|
|
11
|
+
[ 'post_format', 'taxonomy', { type: 'post-format' } ],
|
|
12
|
+
[ 'event', 'post-type', { type: 'post', subtype: 'event' } ],
|
|
13
|
+
[ 'genre', 'taxonomy', { type: 'term', subtype: 'genre' } ],
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
describe( 'getSuggestionsQuery', () => {
|
|
17
|
+
// A typed search is unscoped: naming no type leaves every endpoint to
|
|
18
|
+
// answer it, which is what lets a category be found from a page link.
|
|
19
|
+
it.each( LINK_TYPES )(
|
|
20
|
+
'searches every entity type from a %s link',
|
|
21
|
+
( type, kind ) => {
|
|
22
|
+
const query = getSuggestionsQuery( type, kind );
|
|
23
|
+
|
|
24
|
+
expect( query.type ).toBeUndefined();
|
|
25
|
+
expect( query.subtype ).toBeUndefined();
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
// Searching everything only helps if the link's own kind leads, so the
|
|
30
|
+
// block names it rather than narrowing to it.
|
|
31
|
+
it.each( LINK_TYPES )(
|
|
32
|
+
'ranks the %s link’s own type above the usual order',
|
|
33
|
+
( type, kind, expected ) => {
|
|
34
|
+
expect( getSuggestionsQuery( type, kind ).preferTypes ).toEqual( [
|
|
35
|
+
expected.subtype ? expected : expected.type,
|
|
36
|
+
] );
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
// Before anything is typed there is nothing to rank, so the preview is
|
|
41
|
+
// narrowed to the link's own type instead.
|
|
42
|
+
it.each( LINK_TYPES )(
|
|
43
|
+
'suggests the %s link’s own type before anything is typed',
|
|
44
|
+
( type, kind, expected ) => {
|
|
45
|
+
expect(
|
|
46
|
+
getSuggestionsQuery( type, kind )
|
|
47
|
+
.initialSuggestionsSearchOptions
|
|
48
|
+
).toEqual( { ...expected, perPage: PER_PAGE } );
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
// A custom link points at a URL, and a link just inserted has no type at
|
|
53
|
+
// all, so neither has a kind of its own to preview. Pages are the most
|
|
54
|
+
// likely thing to link to.
|
|
55
|
+
it.each( [
|
|
56
|
+
[ 'a custom link', 'custom', 'custom' ],
|
|
57
|
+
[ 'a link with no type', undefined, undefined ],
|
|
58
|
+
] )(
|
|
59
|
+
'suggests pages before anything is typed for %s',
|
|
60
|
+
( _label, type, kind ) => {
|
|
61
|
+
expect(
|
|
62
|
+
getSuggestionsQuery( type, kind )
|
|
63
|
+
.initialSuggestionsSearchOptions
|
|
64
|
+
).toEqual( { type: 'post', subtype: 'page', perPage: PER_PAGE } );
|
|
65
|
+
}
|
|
66
|
+
);
|
|
67
|
+
} );
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
Button,
|
|
3
3
|
__experimentalToolsPanel as ToolsPanel,
|
|
4
4
|
__experimentalToolsPanelItem as ToolsPanelItem,
|
|
5
|
-
CheckboxControl,
|
|
5
|
+
CheckboxControl as WCCheckboxControl,
|
|
6
6
|
TextControl,
|
|
7
7
|
TextareaControl as WCTextareaControl,
|
|
8
8
|
} from '@wordpress/components';
|
|
@@ -214,7 +214,7 @@ export function Controls( {
|
|
|
214
214
|
}
|
|
215
215
|
isShownByDefault
|
|
216
216
|
>
|
|
217
|
-
<
|
|
217
|
+
<WCCheckboxControl
|
|
218
218
|
label={ __( 'Open in new tab' ) }
|
|
219
219
|
checked={ opensInNewTab }
|
|
220
220
|
onChange={ ( value ) =>
|
|
@@ -19,3 +19,7 @@ export { useEnableLinkStatusValidation } from './use-enable-link-status-validati
|
|
|
19
19
|
export { useIsDraggingWithin } from './use-is-dragging-within';
|
|
20
20
|
export { selectLabelText } from './select-label-text';
|
|
21
21
|
export { useLinkPreview } from './use-link-preview';
|
|
22
|
+
export {
|
|
23
|
+
isBlockSuggestion,
|
|
24
|
+
useBlockSuggestions,
|
|
25
|
+
} from './use-block-suggestions';
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { BlockIcon } from '@wordpress/block-editor';
|
|
3
|
+
import {
|
|
4
|
+
addBlockSuggestions,
|
|
5
|
+
BLOCK_SUGGESTION_TYPE,
|
|
6
|
+
isBlockSuggestion,
|
|
7
|
+
} from '../use-block-suggestions';
|
|
8
|
+
|
|
9
|
+
const homeLink = {
|
|
10
|
+
id: 'core/home-link',
|
|
11
|
+
name: 'core/home-link',
|
|
12
|
+
title: 'Home Link',
|
|
13
|
+
icon: { src: 'home' },
|
|
14
|
+
};
|
|
15
|
+
const pageList = {
|
|
16
|
+
id: 'core/page-list',
|
|
17
|
+
name: 'core/page-list',
|
|
18
|
+
title: 'Page List',
|
|
19
|
+
icon: { src: 'list' },
|
|
20
|
+
keywords: [ 'menu', 'navigation' ],
|
|
21
|
+
};
|
|
22
|
+
const pageLinkVariation = {
|
|
23
|
+
id: 'core/navigation-link/page',
|
|
24
|
+
name: 'core/navigation-link',
|
|
25
|
+
title: 'Page Link',
|
|
26
|
+
icon: { src: 'page' },
|
|
27
|
+
};
|
|
28
|
+
const homePage = {
|
|
29
|
+
id: 1,
|
|
30
|
+
title: 'Home Office',
|
|
31
|
+
type: 'page',
|
|
32
|
+
kind: 'post-type',
|
|
33
|
+
url: '/home-office',
|
|
34
|
+
};
|
|
35
|
+
const menuPage = {
|
|
36
|
+
id: 2,
|
|
37
|
+
title: 'Menu',
|
|
38
|
+
type: 'page',
|
|
39
|
+
kind: 'post-type',
|
|
40
|
+
url: '/menu',
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
describe( 'addBlockSuggestions', () => {
|
|
44
|
+
it( 'describes a block as a suggestion that is not a link', () => {
|
|
45
|
+
const [ suggestion ] = addBlockSuggestions( [], [ homeLink ], 'Home' );
|
|
46
|
+
|
|
47
|
+
expect( suggestion ).toEqual( {
|
|
48
|
+
id: 'core/home-link',
|
|
49
|
+
blockItemId: 'core/home-link',
|
|
50
|
+
type: BLOCK_SUGGESTION_TYPE,
|
|
51
|
+
title: 'Home Link',
|
|
52
|
+
icon: expect.anything(),
|
|
53
|
+
typeLabel: 'Block',
|
|
54
|
+
} );
|
|
55
|
+
} );
|
|
56
|
+
|
|
57
|
+
// LinkControl renders an icon it is given as is, so the block's icon
|
|
58
|
+
// object is turned into an element here, where blocks are known about.
|
|
59
|
+
it( 'renders the block icon the way the inserter does', () => {
|
|
60
|
+
const [ suggestion ] = addBlockSuggestions( [], [ homeLink ], 'Home' );
|
|
61
|
+
|
|
62
|
+
expect( suggestion.icon.type ).toBe( BlockIcon );
|
|
63
|
+
expect( suggestion.icon.props.icon ).toBe( homeLink.icon );
|
|
64
|
+
} );
|
|
65
|
+
|
|
66
|
+
it( 'puts a block whose title starts with the search before the links', () => {
|
|
67
|
+
const suggestions = addBlockSuggestions(
|
|
68
|
+
[ homePage ],
|
|
69
|
+
[ homeLink ],
|
|
70
|
+
'home'
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
expect( suggestions.map( ( { title } ) => title ) ).toEqual( [
|
|
74
|
+
'Home Link',
|
|
75
|
+
'Home Office',
|
|
76
|
+
] );
|
|
77
|
+
} );
|
|
78
|
+
|
|
79
|
+
it( 'puts a block that matches any other way after the links', () => {
|
|
80
|
+
// Page List matches "menu" by keyword, not by title.
|
|
81
|
+
const suggestions = addBlockSuggestions(
|
|
82
|
+
[ menuPage ],
|
|
83
|
+
[ pageList ],
|
|
84
|
+
'menu'
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
expect( suggestions.map( ( { title } ) => title ) ).toEqual( [
|
|
88
|
+
'Menu',
|
|
89
|
+
'Page List',
|
|
90
|
+
] );
|
|
91
|
+
} );
|
|
92
|
+
|
|
93
|
+
it( 'leaves out the link variations, which the links already cover', () => {
|
|
94
|
+
const suggestions = addBlockSuggestions(
|
|
95
|
+
[],
|
|
96
|
+
[ pageLinkVariation ],
|
|
97
|
+
'page'
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
expect( suggestions ).toEqual( [] );
|
|
101
|
+
} );
|
|
102
|
+
|
|
103
|
+
it( 'leaves out blocks that cannot be inserted', () => {
|
|
104
|
+
const suggestions = addBlockSuggestions(
|
|
105
|
+
[],
|
|
106
|
+
[ { ...homeLink, isDisabled: true } ],
|
|
107
|
+
'home'
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
expect( suggestions ).toEqual( [] );
|
|
111
|
+
} );
|
|
112
|
+
|
|
113
|
+
it( 'adds every block that matches', () => {
|
|
114
|
+
const items = Array.from( { length: 5 }, ( _, index ) => ( {
|
|
115
|
+
id: `test/home-${ index }`,
|
|
116
|
+
name: `test/home-${ index }`,
|
|
117
|
+
title: `Home ${ index }`,
|
|
118
|
+
} ) );
|
|
119
|
+
|
|
120
|
+
expect( addBlockSuggestions( [], items, 'home' ) ).toHaveLength( 5 );
|
|
121
|
+
} );
|
|
122
|
+
|
|
123
|
+
it( 'returns the links unchanged when no block matches', () => {
|
|
124
|
+
const suggestions = [ homePage ];
|
|
125
|
+
|
|
126
|
+
expect(
|
|
127
|
+
addBlockSuggestions( suggestions, [ homeLink ], 'office' )
|
|
128
|
+
).toBe( suggestions );
|
|
129
|
+
} );
|
|
130
|
+
|
|
131
|
+
it( 'returns the links unchanged when nothing is searched', () => {
|
|
132
|
+
const suggestions = [ homePage ];
|
|
133
|
+
|
|
134
|
+
expect( addBlockSuggestions( suggestions, [ homeLink ], '' ) ).toBe(
|
|
135
|
+
suggestions
|
|
136
|
+
);
|
|
137
|
+
} );
|
|
138
|
+
|
|
139
|
+
// A site can register a post type called "block", whose results arrive
|
|
140
|
+
// with that type, so a block is recognized by something only it carries.
|
|
141
|
+
it( 'tells a block apart from a post of a type called "block"', () => {
|
|
142
|
+
const [ blockSuggestion ] = addBlockSuggestions(
|
|
143
|
+
[],
|
|
144
|
+
[ homeLink ],
|
|
145
|
+
'Home'
|
|
146
|
+
);
|
|
147
|
+
const postOfTypeBlock = {
|
|
148
|
+
id: 12,
|
|
149
|
+
title: 'Home',
|
|
150
|
+
type: 'block',
|
|
151
|
+
kind: 'post-type',
|
|
152
|
+
url: '/block/home',
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
expect( isBlockSuggestion( blockSuggestion ) ).toBe( true );
|
|
156
|
+
expect( isBlockSuggestion( postOfTypeBlock ) ).toBe( false );
|
|
157
|
+
} );
|
|
158
|
+
} );
|
|
@@ -326,10 +326,6 @@ describe( 'useEntityBinding', () => {
|
|
|
326
326
|
} );
|
|
327
327
|
|
|
328
328
|
it( 'handles invalid kind gracefully in createBinding', () => {
|
|
329
|
-
const consoleSpy = vi
|
|
330
|
-
.spyOn( console, 'warn' )
|
|
331
|
-
.mockImplementation( () => {} );
|
|
332
|
-
|
|
333
329
|
const attributes = {
|
|
334
330
|
metadata: {},
|
|
335
331
|
id: null,
|
|
@@ -347,15 +343,13 @@ describe( 'useEntityBinding', () => {
|
|
|
347
343
|
result.current.createBinding();
|
|
348
344
|
} );
|
|
349
345
|
|
|
350
|
-
expect(
|
|
346
|
+
expect( console ).toHaveWarnedWith(
|
|
351
347
|
'Failed to create entity binding:',
|
|
352
348
|
expect.stringContaining( 'Invalid kind "invalid-kind"' )
|
|
353
349
|
);
|
|
354
350
|
|
|
355
351
|
// Should not call updateBlockBindings when validation fails
|
|
356
352
|
expect( mockUpdateBlockBindings ).not.toHaveBeenCalled();
|
|
357
|
-
|
|
358
|
-
consoleSpy.mockRestore();
|
|
359
353
|
} );
|
|
360
354
|
} );
|
|
361
355
|
} );
|
|
@@ -208,7 +208,7 @@ describe( 'computeBadges', () => {
|
|
|
208
208
|
|
|
209
209
|
expect( badges ).toContainEqual( {
|
|
210
210
|
label: 'External link',
|
|
211
|
-
intent: '
|
|
211
|
+
intent: 'none',
|
|
212
212
|
} );
|
|
213
213
|
} );
|
|
214
214
|
|
|
@@ -221,7 +221,7 @@ describe( 'computeBadges', () => {
|
|
|
221
221
|
|
|
222
222
|
expect( badges ).toContainEqual( {
|
|
223
223
|
label: 'Page',
|
|
224
|
-
intent: '
|
|
224
|
+
intent: 'none',
|
|
225
225
|
} );
|
|
226
226
|
} );
|
|
227
227
|
|
|
@@ -233,7 +233,7 @@ describe( 'computeBadges', () => {
|
|
|
233
233
|
|
|
234
234
|
expect( badges ).toContainEqual( {
|
|
235
235
|
label: 'Internal link',
|
|
236
|
-
intent: '
|
|
236
|
+
intent: 'none',
|
|
237
237
|
} );
|
|
238
238
|
} );
|
|
239
239
|
|
|
@@ -245,7 +245,7 @@ describe( 'computeBadges', () => {
|
|
|
245
245
|
|
|
246
246
|
expect( badges ).toContainEqual( {
|
|
247
247
|
label: 'Homepage',
|
|
248
|
-
intent: '
|
|
248
|
+
intent: 'none',
|
|
249
249
|
} );
|
|
250
250
|
} );
|
|
251
251
|
|
|
@@ -262,7 +262,7 @@ describe( 'computeBadges', () => {
|
|
|
262
262
|
} );
|
|
263
263
|
expect( badges ).toContainEqual( {
|
|
264
264
|
label: 'Homepage',
|
|
265
|
-
intent: '
|
|
265
|
+
intent: 'none',
|
|
266
266
|
} );
|
|
267
267
|
} );
|
|
268
268
|
|
|
@@ -276,7 +276,7 @@ describe( 'computeBadges', () => {
|
|
|
276
276
|
} );
|
|
277
277
|
expect( badges ).not.toContainEqual( {
|
|
278
278
|
label: 'Homepage',
|
|
279
|
-
intent: '
|
|
279
|
+
intent: 'none',
|
|
280
280
|
} );
|
|
281
281
|
}
|
|
282
282
|
);
|
|
@@ -293,7 +293,7 @@ describe( 'computeBadges', () => {
|
|
|
293
293
|
} );
|
|
294
294
|
expect( badges ).toContainEqual( {
|
|
295
295
|
label: 'Homepage',
|
|
296
|
-
intent: '
|
|
296
|
+
intent: 'none',
|
|
297
297
|
} );
|
|
298
298
|
}
|
|
299
299
|
);
|
|
@@ -306,7 +306,7 @@ describe( 'computeBadges', () => {
|
|
|
306
306
|
|
|
307
307
|
expect( badges ).toContainEqual( {
|
|
308
308
|
label: 'Page',
|
|
309
|
-
intent: '
|
|
309
|
+
intent: 'none',
|
|
310
310
|
} );
|
|
311
311
|
} );
|
|
312
312
|
} );
|
|
@@ -319,7 +319,7 @@ describe( 'computeBadges', () => {
|
|
|
319
319
|
|
|
320
320
|
expect( badges ).toContainEqual( {
|
|
321
321
|
label: 'No link selected',
|
|
322
|
-
intent: '
|
|
322
|
+
intent: 'high',
|
|
323
323
|
} );
|
|
324
324
|
} );
|
|
325
325
|
|
|
@@ -333,7 +333,7 @@ describe( 'computeBadges', () => {
|
|
|
333
333
|
|
|
334
334
|
expect( badges ).toContainEqual( {
|
|
335
335
|
label: 'Missing page',
|
|
336
|
-
intent: '
|
|
336
|
+
intent: 'high',
|
|
337
337
|
} );
|
|
338
338
|
} );
|
|
339
339
|
|
|
@@ -346,7 +346,7 @@ describe( 'computeBadges', () => {
|
|
|
346
346
|
|
|
347
347
|
expect( badges ).toContainEqual( {
|
|
348
348
|
label: 'Published',
|
|
349
|
-
intent: '
|
|
349
|
+
intent: 'stable',
|
|
350
350
|
} );
|
|
351
351
|
} );
|
|
352
352
|
|
|
@@ -359,7 +359,7 @@ describe( 'computeBadges', () => {
|
|
|
359
359
|
|
|
360
360
|
expect( badges ).toContainEqual( {
|
|
361
361
|
label: 'Draft',
|
|
362
|
-
intent: '
|
|
362
|
+
intent: 'low',
|
|
363
363
|
} );
|
|
364
364
|
} );
|
|
365
365
|
} );
|
|
@@ -375,12 +375,12 @@ it( 'should show "Internal link" badge for hash links even when type is present'
|
|
|
375
375
|
// Should prioritize hash link detection over type
|
|
376
376
|
expect( badges ).toContainEqual( {
|
|
377
377
|
label: 'Internal link',
|
|
378
|
-
intent: '
|
|
378
|
+
intent: 'none',
|
|
379
379
|
} );
|
|
380
380
|
// Should NOT show Page badge
|
|
381
381
|
expect( badges ).not.toContainEqual( {
|
|
382
382
|
label: 'Page',
|
|
383
|
-
intent: '
|
|
383
|
+
intent: 'none',
|
|
384
384
|
} );
|
|
385
385
|
} );
|
|
386
386
|
|
|
@@ -394,12 +394,12 @@ it( 'should show "Homepage" badge for root path even when type is present', () =
|
|
|
394
394
|
// Should prioritize homepage detection over type
|
|
395
395
|
expect( badges ).toContainEqual( {
|
|
396
396
|
label: 'Homepage',
|
|
397
|
-
intent: '
|
|
397
|
+
intent: 'none',
|
|
398
398
|
} );
|
|
399
399
|
// Should NOT show Page badge
|
|
400
400
|
expect( badges ).not.toContainEqual( {
|
|
401
401
|
label: 'Page',
|
|
402
|
-
intent: '
|
|
402
|
+
intent: 'none',
|
|
403
403
|
} );
|
|
404
404
|
} );
|
|
405
405
|
|
|
@@ -420,12 +420,12 @@ test.each( [
|
|
|
420
420
|
// Should prioritize external link detection over type
|
|
421
421
|
expect( badges ).toContainEqual( {
|
|
422
422
|
label: 'External link',
|
|
423
|
-
intent: '
|
|
423
|
+
intent: 'none',
|
|
424
424
|
} );
|
|
425
425
|
// Should NOT show Page badge
|
|
426
426
|
expect( badges ).not.toContainEqual( {
|
|
427
427
|
label: 'Page',
|
|
428
|
-
intent: '
|
|
428
|
+
intent: 'none',
|
|
429
429
|
} );
|
|
430
430
|
}
|
|
431
431
|
);
|
|
@@ -440,12 +440,12 @@ it( 'should show "Page" badge for internal custom links', () => {
|
|
|
440
440
|
// Should show Page badge for internal custom links
|
|
441
441
|
expect( badges ).toContainEqual( {
|
|
442
442
|
label: 'Page',
|
|
443
|
-
intent: '
|
|
443
|
+
intent: 'none',
|
|
444
444
|
} );
|
|
445
445
|
// Should NOT show Custom badge
|
|
446
446
|
expect( badges ).not.toContainEqual( {
|
|
447
447
|
label: 'Custom',
|
|
448
|
-
intent: '
|
|
448
|
+
intent: 'none',
|
|
449
449
|
} );
|
|
450
450
|
} );
|
|
451
451
|
|
|
@@ -644,7 +644,7 @@ describe( 'useLinkPreview', () => {
|
|
|
644
644
|
|
|
645
645
|
expect( result.current.badges ).toContainEqual( {
|
|
646
646
|
label: 'No link selected',
|
|
647
|
-
intent: '
|
|
647
|
+
intent: 'high',
|
|
648
648
|
} );
|
|
649
649
|
} );
|
|
650
650
|
|
|
@@ -676,7 +676,7 @@ describe( 'useLinkPreview', () => {
|
|
|
676
676
|
|
|
677
677
|
expect( result.current.badges ).toContainEqual( {
|
|
678
678
|
label: 'Missing page',
|
|
679
|
-
intent: '
|
|
679
|
+
intent: 'high',
|
|
680
680
|
} );
|
|
681
681
|
} );
|
|
682
682
|
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { __, sprintf } from '@wordpress/i18n';
|
|
2
|
+
import { speak } from '@wordpress/a11y';
|
|
3
|
+
import { createElement, useCallback } from '@wordpress/element';
|
|
4
|
+
import { useDispatch, useSelect } from '@wordpress/data';
|
|
5
|
+
import {
|
|
6
|
+
createBlock,
|
|
7
|
+
createBlocksFromInnerBlocksTemplate,
|
|
8
|
+
} from '@wordpress/blocks';
|
|
9
|
+
import {
|
|
10
|
+
BlockIcon,
|
|
11
|
+
store as blockEditorStore,
|
|
12
|
+
privateApis as blockEditorPrivateApis,
|
|
13
|
+
} from '@wordpress/block-editor';
|
|
14
|
+
import { unlock } from '../../lock-unlock';
|
|
15
|
+
|
|
16
|
+
const { searchItems, normalizeString } = unlock( blockEditorPrivateApis );
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The `type` of a suggestion that inserts a block rather than setting a link.
|
|
20
|
+
*/
|
|
21
|
+
export const BLOCK_SUGGESTION_TYPE = 'block';
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Whether a suggestion inserts a block rather than setting a link.
|
|
25
|
+
*
|
|
26
|
+
* The `type` alone is not enough: a site can register a post type called
|
|
27
|
+
* "block", whose results arrive with that type. Only a block suggestion
|
|
28
|
+
* carries the inserter item it was made from.
|
|
29
|
+
*
|
|
30
|
+
* @param {Object} suggestion A link suggestion.
|
|
31
|
+
* @return {boolean} Whether it is a block suggestion.
|
|
32
|
+
*/
|
|
33
|
+
export function isBlockSuggestion( suggestion ) {
|
|
34
|
+
return (
|
|
35
|
+
suggestion?.type === BLOCK_SUGGESTION_TYPE &&
|
|
36
|
+
typeof suggestion.blockItemId === 'string'
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The link variations are left out: searching already finds the pages, posts
|
|
42
|
+
* and terms they would link to.
|
|
43
|
+
*/
|
|
44
|
+
const EXCLUDED_BLOCK_NAMES = [ 'core/navigation-link' ];
|
|
45
|
+
|
|
46
|
+
// Match on what a block is called, not on its description or category, which
|
|
47
|
+
// would list blocks for words that only happen to describe them.
|
|
48
|
+
const SEARCH_FIELDS = [
|
|
49
|
+
{ get: ( item ) => item.title },
|
|
50
|
+
{ get: ( item ) => item.keywords },
|
|
51
|
+
];
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Adds the blocks that match a search to the link suggestions.
|
|
55
|
+
*
|
|
56
|
+
* A block whose title starts with the search is what was asked for by name,
|
|
57
|
+
* so it goes before the links. Any other matching block goes after them.
|
|
58
|
+
*
|
|
59
|
+
* @param {Array} suggestions Link suggestions.
|
|
60
|
+
* @param {Array} blockItems Inserter items the Navigation allows.
|
|
61
|
+
* @param {string} searchTerm What the user typed.
|
|
62
|
+
* @return {Array} The suggestions, with any matching blocks added.
|
|
63
|
+
*/
|
|
64
|
+
export function addBlockSuggestions( suggestions, blockItems, searchTerm ) {
|
|
65
|
+
if ( ! searchTerm?.trim() ) {
|
|
66
|
+
return suggestions;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const matches = searchItems( blockItems, searchTerm, {
|
|
70
|
+
fields: SEARCH_FIELDS,
|
|
71
|
+
filter: ( item ) =>
|
|
72
|
+
! item.isDisabled && ! EXCLUDED_BLOCK_NAMES.includes( item.name ),
|
|
73
|
+
} );
|
|
74
|
+
|
|
75
|
+
if ( ! matches.length ) {
|
|
76
|
+
return suggestions;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const search = normalizeString( searchTerm.trim() );
|
|
80
|
+
const before = [];
|
|
81
|
+
const after = [];
|
|
82
|
+
|
|
83
|
+
for ( const item of matches ) {
|
|
84
|
+
const suggestion = {
|
|
85
|
+
id: item.id,
|
|
86
|
+
blockItemId: item.id,
|
|
87
|
+
type: BLOCK_SUGGESTION_TYPE,
|
|
88
|
+
title: item.title,
|
|
89
|
+
icon: createElement( BlockIcon, { icon: item.icon } ),
|
|
90
|
+
typeLabel: __( 'Block' ),
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
if ( normalizeString( item.title ).startsWith( search ) ) {
|
|
94
|
+
before.push( suggestion );
|
|
95
|
+
} else {
|
|
96
|
+
after.push( suggestion );
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return [ ...before, ...suggestions, ...after ];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Lists the blocks a Navigation allows in a link's search results, and
|
|
105
|
+
* inserts the one that is chosen.
|
|
106
|
+
*
|
|
107
|
+
* The allowed blocks are read when a search runs, not subscribed to, so an
|
|
108
|
+
* open link UI does no work as the editor changes.
|
|
109
|
+
*
|
|
110
|
+
* @param {Object} options Hook options.
|
|
111
|
+
* @param {string} options.clientId Client ID of the link or submenu.
|
|
112
|
+
* @param {boolean} options.isEnabled Whether to list blocks at all.
|
|
113
|
+
* @param {Function=} options.onBlockInsert Called with the inserted block by a
|
|
114
|
+
* caller that tracks the new link,
|
|
115
|
+
* such as the list view.
|
|
116
|
+
* @param {Function=} options.onClose Closes the link UI.
|
|
117
|
+
* @return {{ transformSuggestions: Function|undefined, insertBlockFromSuggestion: Function }}
|
|
118
|
+
* The `transformSuggestions` to give LinkControl, and the handler for a chosen
|
|
119
|
+
* block suggestion.
|
|
120
|
+
*/
|
|
121
|
+
export function useBlockSuggestions( {
|
|
122
|
+
clientId,
|
|
123
|
+
isEnabled,
|
|
124
|
+
onBlockInsert,
|
|
125
|
+
onClose,
|
|
126
|
+
} ) {
|
|
127
|
+
const {
|
|
128
|
+
getBlockIndex,
|
|
129
|
+
getBlockOrder,
|
|
130
|
+
getBlockRootClientId,
|
|
131
|
+
getInserterItems,
|
|
132
|
+
} = useSelect( blockEditorStore );
|
|
133
|
+
const { insertBlock, replaceBlock } = useDispatch( blockEditorStore );
|
|
134
|
+
|
|
135
|
+
const transformSuggestions = useCallback(
|
|
136
|
+
( suggestions, { isInitialSuggestions, searchTerm } ) =>
|
|
137
|
+
isInitialSuggestions
|
|
138
|
+
? suggestions
|
|
139
|
+
: addBlockSuggestions(
|
|
140
|
+
suggestions,
|
|
141
|
+
getInserterItems( getBlockRootClientId( clientId ) ),
|
|
142
|
+
searchTerm
|
|
143
|
+
),
|
|
144
|
+
[ clientId, getBlockRootClientId, getInserterItems ]
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
const insertBlockFromSuggestion = ( itemId ) => {
|
|
148
|
+
const rootClientId = getBlockRootClientId( clientId );
|
|
149
|
+
const item = getInserterItems( rootClientId ).find(
|
|
150
|
+
( { id } ) => id === itemId
|
|
151
|
+
);
|
|
152
|
+
|
|
153
|
+
if ( ! item ) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
const block = createBlock(
|
|
158
|
+
item.name,
|
|
159
|
+
item.initialAttributes,
|
|
160
|
+
createBlocksFromInnerBlocksTemplate( item.innerBlocks )
|
|
161
|
+
);
|
|
162
|
+
const index = getBlockIndex( clientId );
|
|
163
|
+
|
|
164
|
+
if ( onBlockInsert ) {
|
|
165
|
+
// A caller that tracks the new link, such as the list view, removes
|
|
166
|
+
// it itself once told about the block, as with the "Add block" pane.
|
|
167
|
+
insertBlock( block, index, rootClientId, false );
|
|
168
|
+
onBlockInsert( block );
|
|
169
|
+
} else if ( getBlockOrder( clientId ).length ) {
|
|
170
|
+
// A submenu keeps its items, so the block goes before it, where the
|
|
171
|
+
// "Add block" pane puts it.
|
|
172
|
+
insertBlock( block, index, rootClientId );
|
|
173
|
+
onClose?.();
|
|
174
|
+
} else {
|
|
175
|
+
// An empty link is replaced by the block.
|
|
176
|
+
replaceBlock( clientId, block );
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
speak(
|
|
180
|
+
sprintf(
|
|
181
|
+
/* translators: %s: The title of the block that was added. */
|
|
182
|
+
__( '%s block added.' ),
|
|
183
|
+
item.title
|
|
184
|
+
)
|
|
185
|
+
);
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
return {
|
|
189
|
+
transformSuggestions: isEnabled ? transformSuggestions : undefined,
|
|
190
|
+
insertBlockFromSuggestion,
|
|
191
|
+
};
|
|
192
|
+
}
|