@wordpress/block-library 10.6.1-next.v.202609031004.0 → 11.0.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 +9 -1
- package/build/audio/edit.cjs +5 -5
- package/build/audio/edit.cjs.map +2 -2
- package/build/audio/index.cjs +0 -37
- package/build/audio/index.cjs.map +3 -3
- package/build/button/index.cjs +0 -34
- package/build/button/index.cjs.map +3 -3
- package/build/code/index.cjs +0 -17
- package/build/code/index.cjs.map +3 -3
- package/build/cover/index.cjs +0 -38
- package/build/cover/index.cjs.map +3 -3
- package/build/details/index.cjs +0 -17
- package/build/details/index.cjs.map +3 -3
- package/build/file/index.cjs +0 -43
- package/build/file/index.cjs.map +3 -3
- package/build/footnotes/format.cjs +1 -1
- package/build/footnotes/format.cjs.map +2 -2
- package/build/gallery/dynamic-gallery.cjs +12 -9
- package/build/gallery/dynamic-gallery.cjs.map +2 -2
- package/build/heading/index.cjs +0 -16
- package/build/heading/index.cjs.map +3 -3
- package/build/image/image.cjs +1 -2
- package/build/image/image.cjs.map +2 -2
- package/build/image/index.cjs +0 -81
- package/build/image/index.cjs.map +3 -3
- package/build/index.cjs +0 -10
- package/build/index.cjs.map +2 -2
- package/build/list-item/edit.cjs +14 -11
- package/build/list-item/edit.cjs.map +2 -2
- package/build/list-item/hooks/index.cjs +6 -9
- package/build/list-item/hooks/index.cjs.map +2 -2
- package/build/list-item/hooks/use-enter.cjs +62 -67
- package/build/list-item/hooks/use-enter.cjs.map +3 -3
- package/build/list-item/hooks/use-merge.cjs +26 -44
- package/build/list-item/hooks/use-merge.cjs.map +3 -3
- package/build/list-item/hooks/use-multi-select-tab.cjs +80 -0
- package/build/list-item/hooks/use-multi-select-tab.cjs.map +7 -0
- package/build/list-item/hooks/use-tab.cjs +65 -0
- package/build/list-item/hooks/use-tab.cjs.map +7 -0
- package/build/list-item/index.cjs +0 -17
- package/build/list-item/index.cjs.map +3 -3
- package/build/list-item/utils.cjs +169 -0
- package/build/list-item/utils.cjs.map +7 -0
- package/build/media-text/index.cjs +0 -50
- package/build/media-text/index.cjs.map +3 -3
- package/build/media-text/media-container.cjs +16 -11
- package/build/media-text/media-container.cjs.map +2 -2
- package/build/more/index.cjs +0 -18
- package/build/more/index.cjs.map +3 -3
- package/build/navigation/constants.cjs +1 -1
- package/build/navigation/constants.cjs.map +1 -1
- package/build/navigation-link/block.json +1 -1
- package/build/navigation-link/deprecated.cjs +69 -0
- package/build/navigation-link/deprecated.cjs.map +7 -0
- package/build/navigation-link/index.cjs +6 -74
- package/build/navigation-link/index.cjs.map +4 -4
- package/build/{form-submit-button/init.cjs → navigation-link/variations.cjs} +23 -8
- package/build/navigation-link/variations.cjs.map +7 -0
- package/build/navigation-submenu/index.cjs +0 -32
- package/build/navigation-submenu/index.cjs.map +3 -3
- package/build/paragraph/index.cjs +0 -17
- package/build/paragraph/index.cjs.map +3 -3
- package/build/paragraph/use-enter.cjs +8 -4
- package/build/paragraph/use-enter.cjs.map +2 -2
- package/build/post-template/edit.cjs +3 -1
- package/build/post-template/edit.cjs.map +2 -2
- package/build/preformatted/index.cjs +0 -17
- package/build/preformatted/index.cjs.map +3 -3
- package/build/pullquote/index.cjs +0 -24
- package/build/pullquote/index.cjs.map +3 -3
- package/build/query/edit/inspector-controls/index.cjs +9 -4
- package/build/query/edit/inspector-controls/index.cjs.map +2 -2
- package/build/search/index.cjs +0 -31
- package/build/search/index.cjs.map +3 -3
- package/build/site-tagline/edit.cjs +11 -17
- package/build/site-tagline/edit.cjs.map +2 -2
- package/build/site-title/edit.cjs +12 -18
- package/build/site-title/edit.cjs.map +2 -2
- package/build/social-link/index.cjs +0 -31
- package/build/social-link/index.cjs.map +3 -3
- package/build/verse/index.cjs +0 -17
- package/build/verse/index.cjs.map +3 -3
- package/build/video/index.cjs +0 -40
- package/build/video/index.cjs.map +3 -3
- package/build/video/tracks-editor.cjs +2 -3
- package/build/video/tracks-editor.cjs.map +3 -3
- package/build-module/audio/edit.mjs +5 -5
- package/build-module/audio/edit.mjs.map +2 -2
- package/build-module/audio/index.mjs +0 -37
- package/build-module/audio/index.mjs.map +2 -2
- package/build-module/button/index.mjs +0 -34
- package/build-module/button/index.mjs.map +2 -2
- package/build-module/code/index.mjs +0 -17
- package/build-module/code/index.mjs.map +2 -2
- package/build-module/cover/index.mjs +0 -38
- package/build-module/cover/index.mjs.map +2 -2
- package/build-module/details/index.mjs +0 -17
- package/build-module/details/index.mjs.map +2 -2
- package/build-module/file/index.mjs +1 -44
- package/build-module/file/index.mjs.map +2 -2
- package/build-module/footnotes/format.mjs +1 -1
- package/build-module/footnotes/format.mjs.map +2 -2
- package/build-module/gallery/dynamic-gallery.mjs +12 -9
- package/build-module/gallery/dynamic-gallery.mjs.map +2 -2
- package/build-module/heading/index.mjs +1 -21
- package/build-module/heading/index.mjs.map +2 -2
- package/build-module/image/image.mjs +1 -2
- package/build-module/image/image.mjs.map +2 -2
- package/build-module/image/index.mjs +0 -81
- package/build-module/image/index.mjs.map +2 -2
- package/build-module/index.mjs +0 -10
- package/build-module/index.mjs.map +2 -2
- package/build-module/list-item/edit.mjs +20 -18
- package/build-module/list-item/edit.mjs.map +2 -2
- package/build-module/list-item/hooks/index.mjs +8 -10
- package/build-module/list-item/hooks/index.mjs.map +2 -2
- package/build-module/list-item/hooks/use-enter.mjs +63 -58
- package/build-module/list-item/hooks/use-enter.mjs.map +2 -2
- package/build-module/list-item/hooks/use-merge.mjs +27 -35
- package/build-module/list-item/hooks/use-merge.mjs.map +2 -2
- package/build-module/list-item/hooks/use-multi-select-tab.mjs +59 -0
- package/build-module/list-item/hooks/use-multi-select-tab.mjs.map +7 -0
- package/build-module/list-item/hooks/use-tab.mjs +44 -0
- package/build-module/list-item/hooks/use-tab.mjs.map +7 -0
- package/build-module/list-item/index.mjs +0 -17
- package/build-module/list-item/index.mjs.map +2 -2
- package/build-module/list-item/utils.mjs +140 -0
- package/build-module/list-item/utils.mjs.map +7 -0
- package/build-module/media-text/index.mjs +0 -50
- package/build-module/media-text/index.mjs.map +2 -2
- package/build-module/media-text/media-container.mjs +17 -12
- package/build-module/media-text/media-container.mjs.map +2 -2
- package/build-module/more/index.mjs +0 -18
- package/build-module/more/index.mjs.map +2 -2
- package/build-module/navigation/constants.mjs +1 -1
- package/build-module/navigation/constants.mjs.map +1 -1
- package/build-module/navigation-link/block.json +1 -1
- package/build-module/navigation-link/deprecated.mjs +48 -0
- package/build-module/navigation-link/deprecated.mjs.map +7 -0
- package/build-module/navigation-link/index.mjs +7 -75
- package/build-module/navigation-link/index.mjs.map +3 -3
- package/build-module/navigation-link/variations.mjs +22 -0
- package/build-module/navigation-link/variations.mjs.map +7 -0
- package/build-module/navigation-submenu/index.mjs +1 -33
- package/build-module/navigation-submenu/index.mjs.map +2 -2
- package/build-module/paragraph/index.mjs +0 -17
- package/build-module/paragraph/index.mjs.map +2 -2
- package/build-module/paragraph/use-enter.mjs +8 -4
- package/build-module/paragraph/use-enter.mjs.map +2 -2
- package/build-module/post-template/edit.mjs +3 -1
- package/build-module/post-template/edit.mjs.map +2 -2
- package/build-module/preformatted/index.mjs +0 -17
- package/build-module/preformatted/index.mjs.map +2 -2
- package/build-module/pullquote/index.mjs +0 -24
- package/build-module/pullquote/index.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/index.mjs +9 -4
- package/build-module/query/edit/inspector-controls/index.mjs.map +2 -2
- package/build-module/search/index.mjs +0 -31
- package/build-module/search/index.mjs.map +2 -2
- package/build-module/site-tagline/edit.mjs +13 -19
- package/build-module/site-tagline/edit.mjs.map +2 -2
- package/build-module/site-title/edit.mjs +14 -20
- package/build-module/site-title/edit.mjs.map +2 -2
- package/build-module/social-link/index.mjs +0 -31
- package/build-module/social-link/index.mjs.map +2 -2
- package/build-module/verse/index.mjs +0 -17
- package/build-module/verse/index.mjs.map +2 -2
- package/build-module/video/index.mjs +0 -40
- package/build-module/video/index.mjs.map +2 -2
- package/build-module/video/tracks-editor.mjs +3 -5
- package/build-module/video/tracks-editor.mjs.map +2 -2
- package/build-style/editor-rtl.css +8 -51
- package/build-style/editor.css +8 -51
- package/build-style/navigation/editor-rtl.css +8 -0
- package/build-style/navigation/editor.css +8 -0
- package/build-style/style-rtl.css +0 -47
- package/build-style/style.css +0 -47
- package/build-types/navigation-link/deprecated.d.ts +48 -0
- package/build-types/navigation-link/deprecated.d.ts.map +1 -0
- package/package.json +42 -43
- package/src/accordion/index.php +2 -2
- package/src/accordion-item/index.php +1 -1
- package/src/audio/edit.jsx +6 -7
- package/src/audio/index.js +0 -37
- package/src/breadcrumbs/index.php +4 -4
- package/src/button/index.js +0 -34
- package/src/button/test/get-experimental-label.jsdom.test.js +1 -0
- package/src/code/index.js +0 -18
- package/src/columns/test/transforms.jsdom.test.js +1 -0
- package/src/comment-template/index.php +2 -2
- package/src/cover/index.js +0 -39
- package/src/cover/test/edit.jsdom.test.js +18 -17
- package/src/cover/test/transforms.jsdom.test.js +1 -0
- package/src/details/index.js +0 -18
- package/src/editor.scss +0 -2
- package/src/embed/test/index.jsdom.test.js +5 -1
- package/src/file/index.js +1 -43
- package/src/footnotes/format.jsx +5 -1
- package/src/gallery/dynamic-gallery.jsx +5 -2
- package/src/gallery/test/edit.jsdom.test.js +4 -0
- package/src/gallery/test/transforms.jsdom.test.js +1 -0
- package/src/gallery/test/use-get-new-images.jsdom.test.jsx +1 -0
- package/src/group/test/placeholder.jsdom.test.jsx +1 -0
- package/src/heading/index.js +1 -22
- package/src/heading/index.php +1 -1
- package/src/home-link/index.php +2 -2
- package/src/html/test/index.jsdom.test.js +9 -0
- package/src/html/test/utils.jsdom.test.js +1 -0
- package/src/image/image.jsx +1 -4
- package/src/image/index.js +0 -80
- package/src/image/test/transforms.jsdom.test.js +1 -0
- package/src/image/test/use-open-image-media-editor-modal.jsdom.test.js +30 -29
- package/src/index.jsx +0 -11
- package/src/latest-posts/test/deprecated.jsdom.test.js +1 -0
- package/src/list/index.php +1 -1
- package/src/list-item/edit.jsx +20 -20
- package/src/list-item/hooks/index.js +2 -3
- package/src/list-item/hooks/use-enter.js +82 -70
- package/src/list-item/hooks/use-merge.js +28 -36
- package/src/list-item/hooks/use-multi-select-tab.js +83 -0
- package/src/list-item/hooks/use-tab.js +62 -0
- package/src/list-item/index.js +0 -18
- package/src/list-item/utils.js +236 -0
- package/src/media-text/index.js +0 -50
- package/src/media-text/media-container.jsx +22 -12
- package/src/more/index.js +0 -19
- package/src/navigation/constants.js +1 -1
- package/src/navigation/edit/test/layout-custom-properties.jsdom.test.js +8 -7
- package/src/navigation/edit/test/navigation-menu-selector.jsdom.test.jsx +23 -14
- package/src/navigation/edit/test/overlay-template-part-selector.jsdom.test.jsx +22 -20
- package/src/navigation/edit/test/responsive-wrapper.jsdom.test.jsx +14 -13
- package/src/navigation/edit/test/use-create-overlay.jsdom.test.js +19 -24
- package/src/navigation/editor.scss +13 -0
- package/src/navigation/index.php +14 -14
- package/src/navigation/test/menu-items-to-blocks.jsdom.test.js +3 -2
- package/src/navigation/test/use-navigation-menu.jsdom.test.js +7 -4
- package/src/navigation/test/view.jsdom.test.js +4 -2
- package/src/navigation-link/block.json +1 -1
- package/src/navigation-link/deprecated.tsx +58 -0
- package/src/navigation-link/{index.jsx → index.js} +5 -77
- package/src/navigation-link/index.php +5 -5
- package/src/navigation-link/shared/test/controls.jsdom.test.jsx +18 -18
- package/src/navigation-link/shared/test/use-enable-link-status-validation.jsdom.test.js +8 -6
- package/src/navigation-link/shared/test/use-entity-binding.jsdom.test.js +12 -11
- package/src/navigation-link/shared/test/use-handle-link-change.jsdom.test.js +23 -20
- package/src/navigation-link/shared/test/use-link-preview.jsdom.test.js +17 -14
- package/src/navigation-link/test/__snapshots__/hooks.jsdom.test.js.snap +2 -2
- package/src/navigation-link/test/hooks.jsdom.test.js +1 -0
- package/src/navigation-link/variations.js +19 -0
- package/src/navigation-submenu/index.js +1 -33
- package/src/page-list/index.php +10 -10
- package/src/page-list/test/convert-to-navigation-links.jsdom.test.js +3 -2
- package/src/paragraph/index.js +0 -18
- package/src/paragraph/use-enter.js +13 -6
- package/src/playlist/test/edit-component.jsdom.test.jsx +31 -30
- package/src/playlist/test/edit.jsdom.test.js +1 -0
- package/src/playlist/test/transforms.jsdom.test.js +1 -0
- package/src/playlist-track/test/edit.jsdom.test.jsx +20 -19
- package/src/post-author/index.php +3 -3
- package/src/post-author-biography/index.php +3 -3
- package/src/post-author-name/index.php +3 -3
- package/src/post-comments-link/index.php +4 -4
- package/src/post-date/test/edit.jsdom.test.js +1 -0
- package/src/post-template/edit.jsx +3 -1
- package/src/post-time-to-read/index.php +3 -3
- package/src/preformatted/index.js +0 -18
- package/src/pullquote/index.js +0 -24
- package/src/query/edit/inspector-controls/index.jsx +9 -4
- package/src/query/index.php +2 -2
- package/src/query/test/utils.jsdom.test.js +1 -0
- package/src/quote/test/migrate.jsdom.test.js +1 -0
- package/src/read-more/index.php +1 -1
- package/src/search/index.js +0 -30
- package/src/search/index.php +1 -1
- package/src/separator/test/edit.jsdom.test.jsx +5 -4
- package/src/site-logo/index.php +1 -1
- package/src/site-tagline/edit.jsx +18 -27
- package/src/site-title/edit.jsx +20 -27
- package/src/social-link/index.js +0 -32
- package/src/social-link/index.php +0 -1
- package/src/style.scss +0 -1
- package/src/table-of-contents/index.php +3 -3
- package/src/utils/test/style-state.jsdom.test.js +1 -0
- package/src/utils/test/waveform-player-dependency.jsdom.test.js +15 -21
- package/src/verse/index.js +0 -18
- package/src/video/index.js +0 -40
- package/src/video/tracks-editor.jsx +4 -5
- package/build/form/block.json +0 -65
- package/build/form/deprecated.cjs +0 -111
- package/build/form/deprecated.cjs.map +0 -7
- package/build/form/edit.cjs +0 -180
- package/build/form/edit.cjs.map +0 -7
- package/build/form/icons.cjs +0 -33
- package/build/form/icons.cjs.map +0 -7
- package/build/form/index.cjs +0 -118
- package/build/form/index.cjs.map +0 -7
- package/build/form/init.cjs +0 -28
- package/build/form/init.cjs.map +0 -7
- package/build/form/save.cjs +0 -40
- package/build/form/save.cjs.map +0 -7
- package/build/form/utils.cjs +0 -61
- package/build/form/utils.cjs.map +0 -7
- package/build/form/variations.cjs +0 -152
- package/build/form/variations.cjs.map +0 -7
- package/build/form/view.cjs +0 -48
- package/build/form/view.cjs.map +0 -7
- package/build/form-input/block.json +0 -72
- package/build/form-input/deprecated.cjs +0 -252
- package/build/form-input/deprecated.cjs.map +0 -7
- package/build/form-input/edit.cjs +0 -206
- package/build/form-input/edit.cjs.map +0 -7
- package/build/form-input/icons.cjs +0 -33
- package/build/form-input/icons.cjs.map +0 -7
- package/build/form-input/index.cjs +0 -63
- package/build/form-input/index.cjs.map +0 -7
- package/build/form-input/init.cjs +0 -28
- package/build/form-input/init.cjs.map +0 -7
- package/build/form-input/save.cjs +0 -88
- package/build/form-input/save.cjs.map +0 -7
- package/build/form-input/variations.cjs +0 -105
- package/build/form-input/variations.cjs.map +0 -7
- package/build/form-submission-notification/block.json +0 -19
- package/build/form-submission-notification/edit.cjs +0 -71
- package/build/form-submission-notification/edit.cjs.map +0 -7
- package/build/form-submission-notification/index.cjs +0 -73
- package/build/form-submission-notification/index.cjs.map +0 -7
- package/build/form-submission-notification/init.cjs +0 -28
- package/build/form-submission-notification/init.cjs.map +0 -7
- package/build/form-submission-notification/save.cjs +0 -54
- package/build/form-submission-notification/save.cjs.map +0 -7
- package/build/form-submission-notification/variations.cjs +0 -78
- package/build/form-submission-notification/variations.cjs.map +0 -7
- package/build/form-submit-button/block.json +0 -15
- package/build/form-submit-button/edit.cjs +0 -36
- package/build/form-submit-button/edit.cjs.map +0 -7
- package/build/form-submit-button/index.cjs +0 -75
- package/build/form-submit-button/index.cjs.map +0 -7
- package/build/form-submit-button/init.cjs.map +0 -7
- package/build/form-submit-button/save.cjs +0 -32
- package/build/form-submit-button/save.cjs.map +0 -7
- package/build/list-item/hooks/use-indent-list-item.cjs +0 -79
- package/build/list-item/hooks/use-indent-list-item.cjs.map +0 -7
- package/build/list-item/hooks/use-outdent-list-item.cjs +0 -106
- package/build/list-item/hooks/use-outdent-list-item.cjs.map +0 -7
- package/build/list-item/hooks/use-space.cjs +0 -83
- package/build/list-item/hooks/use-space.cjs.map +0 -7
- package/build-module/form/block.json +0 -65
- package/build-module/form/deprecated.mjs +0 -96
- package/build-module/form/deprecated.mjs.map +0 -7
- package/build-module/form/edit.mjs +0 -170
- package/build-module/form/edit.mjs.map +0 -7
- package/build-module/form/icons.mjs +0 -8
- package/build-module/form/icons.mjs.map +0 -7
- package/build-module/form/index.mjs +0 -83
- package/build-module/form/index.mjs.map +0 -7
- package/build-module/form/init.mjs +0 -7
- package/build-module/form/init.mjs.map +0 -7
- package/build-module/form/save.mjs +0 -19
- package/build-module/form/save.mjs.map +0 -7
- package/build-module/form/utils.mjs +0 -35
- package/build-module/form/utils.mjs.map +0 -7
- package/build-module/form/variations.mjs +0 -134
- package/build-module/form/variations.mjs.map +0 -7
- package/build-module/form/view.mjs +0 -46
- package/build-module/form/view.mjs.map +0 -7
- package/build-module/form-input/block.json +0 -72
- package/build-module/form-input/deprecated.mjs +0 -226
- package/build-module/form-input/deprecated.mjs.map +0 -7
- package/build-module/form-input/edit.mjs +0 -186
- package/build-module/form-input/edit.mjs.map +0 -7
- package/build-module/form-input/icons.mjs +0 -8
- package/build-module/form-input/icons.mjs.map +0 -7
- package/build-module/form-input/index.mjs +0 -25
- package/build-module/form-input/index.mjs.map +0 -7
- package/build-module/form-input/init.mjs +0 -7
- package/build-module/form-input/init.mjs.map +0 -7
- package/build-module/form-input/save.mjs +0 -62
- package/build-module/form-input/save.mjs.map +0 -7
- package/build-module/form-input/variations.mjs +0 -84
- package/build-module/form-input/variations.mjs.map +0 -7
- package/build-module/form-submission-notification/block.json +0 -19
- package/build-module/form-submission-notification/edit.mjs +0 -45
- package/build-module/form-submission-notification/edit.mjs.map +0 -7
- package/build-module/form-submission-notification/index.mjs +0 -35
- package/build-module/form-submission-notification/index.mjs.map +0 -7
- package/build-module/form-submission-notification/init.mjs +0 -7
- package/build-module/form-submission-notification/init.mjs.map +0 -7
- package/build-module/form-submission-notification/save.mjs +0 -23
- package/build-module/form-submission-notification/save.mjs.map +0 -7
- package/build-module/form-submission-notification/variations.mjs +0 -57
- package/build-module/form-submission-notification/variations.mjs.map +0 -7
- package/build-module/form-submit-button/block.json +0 -15
- package/build-module/form-submit-button/edit.mjs +0 -15
- package/build-module/form-submit-button/edit.mjs.map +0 -7
- package/build-module/form-submit-button/index.mjs +0 -37
- package/build-module/form-submit-button/index.mjs.map +0 -7
- package/build-module/form-submit-button/init.mjs +0 -7
- package/build-module/form-submit-button/init.mjs.map +0 -7
- package/build-module/form-submit-button/save.mjs +0 -11
- package/build-module/form-submit-button/save.mjs.map +0 -7
- package/build-module/list-item/hooks/use-indent-list-item.mjs +0 -58
- package/build-module/list-item/hooks/use-indent-list-item.mjs.map +0 -7
- package/build-module/list-item/hooks/use-outdent-list-item.mjs +0 -85
- package/build-module/list-item/hooks/use-outdent-list-item.mjs.map +0 -7
- package/build-module/list-item/hooks/use-space.mjs +0 -52
- package/build-module/list-item/hooks/use-space.mjs.map +0 -7
- package/build-style/form-input/editor-rtl.css +0 -19
- package/build-style/form-input/editor.css +0 -19
- package/build-style/form-input/style-rtl.css +0 -46
- package/build-style/form-input/style.css +0 -46
- package/build-style/form-submission-notification/editor-rtl.css +0 -30
- package/build-style/form-submission-notification/editor.css +0 -30
- package/build-style/form-submit-button/style-rtl.css +0 -3
- package/build-style/form-submit-button/style.css +0 -3
- package/src/form/README.md +0 -90
- package/src/form/block.json +0 -65
- package/src/form/deprecated.jsx +0 -93
- package/src/form/edit.jsx +0 -169
- package/src/form/icons.jsx +0 -7
- package/src/form/index.js +0 -91
- package/src/form/index.php +0 -197
- package/src/form/init.js +0 -3
- package/src/form/save.jsx +0 -15
- package/src/form/utils.js +0 -36
- package/src/form/variations.js +0 -133
- package/src/form/view.js +0 -54
- package/src/form-input/README.md +0 -74
- package/src/form-input/block.json +0 -72
- package/src/form-input/deprecated.jsx +0 -248
- package/src/form-input/edit.jsx +0 -187
- package/src/form-input/editor.scss +0 -24
- package/src/form-input/icons.jsx +0 -7
- package/src/form-input/index.js +0 -22
- package/src/form-input/index.php +0 -47
- package/src/form-input/init.js +0 -3
- package/src/form-input/save.jsx +0 -89
- package/src/form-input/style.scss +0 -64
- package/src/form-input/variations.js +0 -82
- package/src/form-submission-notification/README.md +0 -50
- package/src/form-submission-notification/block.json +0 -19
- package/src/form-submission-notification/edit.jsx +0 -44
- package/src/form-submission-notification/editor.scss +0 -45
- package/src/form-submission-notification/index.js +0 -33
- package/src/form-submission-notification/index.php +0 -48
- package/src/form-submission-notification/init.js +0 -3
- package/src/form-submission-notification/save.jsx +0 -18
- package/src/form-submission-notification/variations.js +0 -56
- package/src/form-submit-button/README.md +0 -54
- package/src/form-submit-button/block.json +0 -15
- package/src/form-submit-button/edit.jsx +0 -12
- package/src/form-submit-button/index.js +0 -35
- package/src/form-submit-button/init.js +0 -3
- package/src/form-submit-button/save.jsx +0 -10
- package/src/form-submit-button/style.scss +0 -3
- package/src/list-item/hooks/use-indent-list-item.js +0 -73
- package/src/list-item/hooks/use-outdent-list-item.js +0 -100
- package/src/list-item/hooks/use-space.js +0 -66
package/src/image/index.js
CHANGED
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
import { __ } from '@wordpress/i18n';
|
|
2
2
|
import { image as icon } from '@wordpress/icons';
|
|
3
|
-
import { privateApis as blocksPrivateApis } from '@wordpress/blocks';
|
|
4
3
|
import initBlock from '../utils/init-block';
|
|
5
4
|
import deprecated from './deprecated';
|
|
6
5
|
import edit from './edit';
|
|
7
6
|
import metadata from './block.json';
|
|
8
7
|
import save from './save';
|
|
9
8
|
import transforms from './transforms';
|
|
10
|
-
import { unlock } from '../lock-unlock';
|
|
11
|
-
|
|
12
|
-
const { fieldsKey, formKey } = unlock( blocksPrivateApis );
|
|
13
9
|
|
|
14
10
|
const { name } = metadata;
|
|
15
11
|
|
|
@@ -62,80 +58,4 @@ export const settings = {
|
|
|
62
58
|
deprecated,
|
|
63
59
|
};
|
|
64
60
|
|
|
65
|
-
if ( window.__experimentalContentOnlyInspectorFields ) {
|
|
66
|
-
settings[ fieldsKey ] = [
|
|
67
|
-
{
|
|
68
|
-
id: 'image',
|
|
69
|
-
label: __( 'Image' ),
|
|
70
|
-
type: 'media',
|
|
71
|
-
Edit: {
|
|
72
|
-
control: 'media', // TODO: replace with custom component
|
|
73
|
-
allowedTypes: [ 'image' ],
|
|
74
|
-
multiple: false,
|
|
75
|
-
},
|
|
76
|
-
getValue: ( { item } ) => ( {
|
|
77
|
-
id: item.id,
|
|
78
|
-
url: item.url,
|
|
79
|
-
alt: item.alt,
|
|
80
|
-
caption: item.caption,
|
|
81
|
-
} ),
|
|
82
|
-
setValue: ( { value } ) => ( {
|
|
83
|
-
id: value.id,
|
|
84
|
-
url: value.url,
|
|
85
|
-
alt: value.alt,
|
|
86
|
-
caption: value.caption,
|
|
87
|
-
} ),
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
id: 'link',
|
|
91
|
-
label: __( 'Link' ),
|
|
92
|
-
type: 'url',
|
|
93
|
-
Edit: 'link', // TODO: replace with custom component
|
|
94
|
-
getValue: ( { item } ) => ( {
|
|
95
|
-
url: item.href,
|
|
96
|
-
rel: item.rel,
|
|
97
|
-
linkTarget: item.linkTarget,
|
|
98
|
-
} ),
|
|
99
|
-
setValue: ( { value } ) => ( {
|
|
100
|
-
href: value.url,
|
|
101
|
-
rel: value.rel,
|
|
102
|
-
linkTarget: value.linkTarget,
|
|
103
|
-
} ),
|
|
104
|
-
isVisible: ( item ) => ! item.isDecorative,
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
id: 'caption',
|
|
108
|
-
label: __( 'Caption' ),
|
|
109
|
-
type: 'text',
|
|
110
|
-
Edit: 'rich-text', // TODO: replace with custom component
|
|
111
|
-
isVisible: ( item ) => ! item.isDecorative,
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
id: 'alt',
|
|
115
|
-
label: __( 'Alt text' ),
|
|
116
|
-
type: 'text',
|
|
117
|
-
isVisible: ( item ) => ! item.isDecorative,
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
id: 'isDecorative',
|
|
121
|
-
label: __( 'Mark as decorative' ),
|
|
122
|
-
type: 'boolean',
|
|
123
|
-
setValue: ( { value } ) => ( {
|
|
124
|
-
isDecorative: value || undefined,
|
|
125
|
-
...( value && {
|
|
126
|
-
alt: '',
|
|
127
|
-
caption: undefined,
|
|
128
|
-
href: undefined,
|
|
129
|
-
linkDestination: undefined,
|
|
130
|
-
linkTarget: undefined,
|
|
131
|
-
rel: undefined,
|
|
132
|
-
} ),
|
|
133
|
-
} ),
|
|
134
|
-
},
|
|
135
|
-
];
|
|
136
|
-
settings[ formKey ] = {
|
|
137
|
-
fields: [ 'image', 'link', 'caption', 'alt', 'isDecorative' ],
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
|
|
141
61
|
export const init = () => initBlock( { name, metadata, settings } );
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
1
2
|
import { act, renderHook } from '@testing-library/react';
|
|
2
3
|
import { useRegistry, useSelect } from '@wordpress/data';
|
|
3
4
|
import {
|
|
@@ -9,22 +10,22 @@ import {
|
|
|
9
10
|
|
|
10
11
|
const mockOpenMediaEditorModalKey = 'openMediaEditorModal';
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
vi.mock( import( '@wordpress/core-data' ), () => ( {
|
|
13
14
|
store: {},
|
|
14
15
|
} ) );
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
useRegistry:
|
|
18
|
-
useSelect:
|
|
17
|
+
vi.mock( import( '@wordpress/data' ), () => ( {
|
|
18
|
+
useRegistry: vi.fn(),
|
|
19
|
+
useSelect: vi.fn(),
|
|
19
20
|
} ) );
|
|
20
21
|
|
|
21
|
-
|
|
22
|
+
vi.mock( import( '@wordpress/block-editor' ), () => ( {
|
|
22
23
|
privateApis: {},
|
|
23
24
|
store: {},
|
|
24
25
|
} ) );
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
unlock:
|
|
27
|
+
vi.mock( import( '../../lock-unlock' ), () => ( {
|
|
28
|
+
unlock: vi.fn( () => ( {
|
|
28
29
|
openMediaEditorModalKey: 'openMediaEditorModal',
|
|
29
30
|
} ) ),
|
|
30
31
|
} ) );
|
|
@@ -34,14 +35,14 @@ function createRegistry( {
|
|
|
34
35
|
resolveGetEntityRecord = () => undefined,
|
|
35
36
|
} = {} ) {
|
|
36
37
|
const actions = {
|
|
37
|
-
invalidateResolution:
|
|
38
|
+
invalidateResolution: vi.fn(),
|
|
38
39
|
};
|
|
39
40
|
return {
|
|
40
|
-
select:
|
|
41
|
+
select: vi.fn( () => ( {
|
|
41
42
|
getEditedEntityRecord,
|
|
42
43
|
} ) ),
|
|
43
|
-
dispatch:
|
|
44
|
-
resolveSelect:
|
|
44
|
+
dispatch: vi.fn( () => actions ),
|
|
45
|
+
resolveSelect: vi.fn( () => ( {
|
|
45
46
|
getEntityRecord: resolveGetEntityRecord,
|
|
46
47
|
} ) ),
|
|
47
48
|
actions,
|
|
@@ -74,8 +75,8 @@ async function runModalUpdate( {
|
|
|
74
75
|
} ) {
|
|
75
76
|
const registry = createRegistry( registryOptions );
|
|
76
77
|
useRegistry.mockReturnValue( registry );
|
|
77
|
-
const setAttributes =
|
|
78
|
-
const openMediaEditorModal =
|
|
78
|
+
const setAttributes = vi.fn();
|
|
79
|
+
const openMediaEditorModal = vi.fn();
|
|
79
80
|
mockMediaEditorModalSetting( openMediaEditorModal );
|
|
80
81
|
const { result } = renderHook( () =>
|
|
81
82
|
useOpenImageMediaEditorModal( {
|
|
@@ -151,11 +152,11 @@ function croppedAttachmentRecords( { hasOriginal = true } = {} ) {
|
|
|
151
152
|
|
|
152
153
|
describe( 'useOpenImageMediaEditorModal', () => {
|
|
153
154
|
beforeEach( () => {
|
|
154
|
-
|
|
155
|
+
vi.clearAllMocks();
|
|
155
156
|
} );
|
|
156
157
|
|
|
157
158
|
it( 'notifies onUrlChange when the update switches to a new attachment URL', async () => {
|
|
158
|
-
const onUrlChange =
|
|
159
|
+
const onUrlChange = vi.fn();
|
|
159
160
|
await runModalUpdate( {
|
|
160
161
|
attributes: { id: 1, url: 'original.jpg', alt: '', caption: '' },
|
|
161
162
|
updatePayload: { id: 2, url: 'updated.jpg' },
|
|
@@ -166,7 +167,7 @@ describe( 'useOpenImageMediaEditorModal', () => {
|
|
|
166
167
|
} );
|
|
167
168
|
|
|
168
169
|
it( 'does not notify onUrlChange for a same-attachment update', async () => {
|
|
169
|
-
const onUrlChange =
|
|
170
|
+
const onUrlChange = vi.fn();
|
|
170
171
|
await runModalUpdate( {
|
|
171
172
|
attributes: { id: 1, url: 'original.jpg', alt: '', caption: '' },
|
|
172
173
|
updatePayload: { id: 1, url: 'original.jpg' },
|
|
@@ -176,7 +177,7 @@ describe( 'useOpenImageMediaEditorModal', () => {
|
|
|
176
177
|
} );
|
|
177
178
|
|
|
178
179
|
it( 'does not notify onUrlChange when the update carries no URL', async () => {
|
|
179
|
-
const onUrlChange =
|
|
180
|
+
const onUrlChange = vi.fn();
|
|
180
181
|
await runModalUpdate( {
|
|
181
182
|
attributes: { id: 1, url: 'original.jpg', alt: '', caption: '' },
|
|
182
183
|
updatePayload: { id: 2 },
|
|
@@ -197,7 +198,7 @@ describe( 'useOpenImageMediaEditorModal', () => {
|
|
|
197
198
|
alt: '',
|
|
198
199
|
caption: '',
|
|
199
200
|
},
|
|
200
|
-
setAttributes:
|
|
201
|
+
setAttributes: vi.fn(),
|
|
201
202
|
} )
|
|
202
203
|
);
|
|
203
204
|
|
|
@@ -210,8 +211,8 @@ describe( 'useOpenImageMediaEditorModal', () => {
|
|
|
210
211
|
document.body.append( cropButton, otherButton );
|
|
211
212
|
const registry = createRegistry();
|
|
212
213
|
useRegistry.mockReturnValue( registry );
|
|
213
|
-
const setAttributes =
|
|
214
|
-
const openMediaEditorModal =
|
|
214
|
+
const setAttributes = vi.fn();
|
|
215
|
+
const openMediaEditorModal = vi.fn();
|
|
215
216
|
mockMediaEditorModalSetting( openMediaEditorModal );
|
|
216
217
|
const onClose = () => cropButton.focus();
|
|
217
218
|
const { result } = renderHook( () =>
|
|
@@ -294,7 +295,7 @@ describe( 'useOpenImageMediaEditorModal', () => {
|
|
|
294
295
|
alt_text: 'Updated alt',
|
|
295
296
|
caption: { raw: 'Updated caption' },
|
|
296
297
|
};
|
|
297
|
-
const resolveGetEntityRecord =
|
|
298
|
+
const resolveGetEntityRecord = vi
|
|
298
299
|
.fn()
|
|
299
300
|
.mockResolvedValueOnce( originalAttachment )
|
|
300
301
|
.mockResolvedValueOnce( updatedAttachment );
|
|
@@ -336,7 +337,7 @@ describe( 'useOpenImageMediaEditorModal', () => {
|
|
|
336
337
|
alt_text: '',
|
|
337
338
|
caption: { raw: 'Updated attachment caption' },
|
|
338
339
|
};
|
|
339
|
-
const resolveGetEntityRecord =
|
|
340
|
+
const resolveGetEntityRecord = vi
|
|
340
341
|
.fn()
|
|
341
342
|
.mockResolvedValueOnce( originalAttachment )
|
|
342
343
|
.mockResolvedValueOnce( updatedAttachment );
|
|
@@ -377,7 +378,7 @@ describe( 'useOpenImageMediaEditorModal', () => {
|
|
|
377
378
|
alt_text: '',
|
|
378
379
|
caption: { raw: 'Updated attachment caption' },
|
|
379
380
|
};
|
|
380
|
-
const resolveGetEntityRecord =
|
|
381
|
+
const resolveGetEntityRecord = vi
|
|
381
382
|
.fn()
|
|
382
383
|
.mockResolvedValueOnce( originalAttachment )
|
|
383
384
|
.mockResolvedValueOnce( updatedAttachment );
|
|
@@ -448,7 +449,7 @@ describe( 'useOpenImageMediaEditorModal', () => {
|
|
|
448
449
|
} );
|
|
449
450
|
|
|
450
451
|
it( 'keeps the selected image size when the edit created a new attachment', async () => {
|
|
451
|
-
const onUrlChange =
|
|
452
|
+
const onUrlChange = vi.fn();
|
|
452
453
|
const { setAttributes } = await runModalUpdate( {
|
|
453
454
|
attributes: {
|
|
454
455
|
id: 1,
|
|
@@ -581,8 +582,8 @@ describe( 'useOpenImageMediaEditorModal', () => {
|
|
|
581
582
|
attachmentId === 2 ? deferredAttachment.promise : undefined,
|
|
582
583
|
} );
|
|
583
584
|
useRegistry.mockReturnValue( registry );
|
|
584
|
-
const setAttributes =
|
|
585
|
-
const openMediaEditorModal =
|
|
585
|
+
const setAttributes = vi.fn();
|
|
586
|
+
const openMediaEditorModal = vi.fn();
|
|
586
587
|
mockMediaEditorModalSetting( openMediaEditorModal );
|
|
587
588
|
const { result } = renderHook(
|
|
588
589
|
( { attributes } ) =>
|
|
@@ -693,7 +694,7 @@ describe( 'useOpenImageMediaEditorModal', () => {
|
|
|
693
694
|
} );
|
|
694
695
|
|
|
695
696
|
it( 'syncs metadata from an empty block when the original attachment is not cached', async () => {
|
|
696
|
-
const resolveGetEntityRecord =
|
|
697
|
+
const resolveGetEntityRecord = vi
|
|
697
698
|
.fn()
|
|
698
699
|
.mockResolvedValueOnce( {
|
|
699
700
|
id: 1,
|
|
@@ -815,8 +816,8 @@ describe( 'useOpenImageMediaEditorModal', () => {
|
|
|
815
816
|
resolveGetEntityRecord: () => deferredAttachment.promise,
|
|
816
817
|
} );
|
|
817
818
|
useRegistry.mockReturnValue( registry );
|
|
818
|
-
const setAttributes =
|
|
819
|
-
const openMediaEditorModal =
|
|
819
|
+
const setAttributes = vi.fn();
|
|
820
|
+
const openMediaEditorModal = vi.fn();
|
|
820
821
|
mockMediaEditorModalSetting( openMediaEditorModal );
|
|
821
822
|
const { result, rerender } = renderHook(
|
|
822
823
|
( { attributes } ) =>
|
package/src/index.jsx
CHANGED
|
@@ -49,10 +49,6 @@ import * as cover from './cover';
|
|
|
49
49
|
import * as details from './details';
|
|
50
50
|
import * as embed from './embed';
|
|
51
51
|
import * as file from './file';
|
|
52
|
-
import * as form from './form';
|
|
53
|
-
import * as formInput from './form-input';
|
|
54
|
-
import * as formSubmitButton from './form-submit-button';
|
|
55
|
-
import * as formSubmissionNotification from './form-submission-notification';
|
|
56
52
|
import * as gallery from './gallery';
|
|
57
53
|
import * as group from './group';
|
|
58
54
|
import * as heading from './heading';
|
|
@@ -267,13 +263,6 @@ const getAllBlocks = () => {
|
|
|
267
263
|
breadcrumbs,
|
|
268
264
|
];
|
|
269
265
|
|
|
270
|
-
if ( window?.__experimentalEnableFormBlocks ) {
|
|
271
|
-
blocks.push( form );
|
|
272
|
-
blocks.push( formInput );
|
|
273
|
-
blocks.push( formSubmitButton );
|
|
274
|
-
blocks.push( formSubmissionNotification );
|
|
275
|
-
}
|
|
276
|
-
|
|
277
266
|
if ( window?.__experimentalEnableBlockExperiments ) {
|
|
278
267
|
// Blocks added here are only registered when the "Block experiments"
|
|
279
268
|
// option is enabled in the Gutenberg > Experiments settings page.
|
package/src/list/index.php
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* @see https://github.com/WordPress/gutenberg/issues/12420
|
|
16
16
|
*
|
|
17
17
|
* @param array $attributes Attributes of the block being rendered.
|
|
18
|
-
* @param string $content
|
|
18
|
+
* @param string $content Content of the block being rendered.
|
|
19
19
|
*
|
|
20
20
|
* @return string The content of the block being rendered.
|
|
21
21
|
*/
|
package/src/list-item/edit.jsx
CHANGED
|
@@ -14,29 +14,24 @@ import {
|
|
|
14
14
|
formatIndent,
|
|
15
15
|
} from '@wordpress/icons';
|
|
16
16
|
import { useMergeRefs } from '@wordpress/compose';
|
|
17
|
-
import { useSelect } from '@wordpress/data';
|
|
17
|
+
import { useSelect, useRegistry } from '@wordpress/data';
|
|
18
18
|
import { displayShortcut } from '@wordpress/keycodes';
|
|
19
|
+
import { useEnter, useTab, useMultiSelectTab, useMerge } from './hooks';
|
|
19
20
|
import {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
} from './hooks';
|
|
21
|
+
indentListItems,
|
|
22
|
+
outdentListItems,
|
|
23
|
+
getIndentTarget,
|
|
24
|
+
getOutdentTarget,
|
|
25
|
+
} from './utils';
|
|
26
26
|
|
|
27
27
|
export function IndentUI( { clientId } ) {
|
|
28
|
-
const
|
|
29
|
-
const outdentListItem = useOutdentListItem();
|
|
28
|
+
const registry = useRegistry();
|
|
30
29
|
const { canIndent, canOutdent } = useSelect(
|
|
31
30
|
( select ) => {
|
|
32
|
-
const
|
|
33
|
-
select( blockEditorStore );
|
|
31
|
+
const storeSelect = select( blockEditorStore );
|
|
34
32
|
return {
|
|
35
|
-
canIndent:
|
|
36
|
-
canOutdent:
|
|
37
|
-
getBlockName(
|
|
38
|
-
getBlockRootClientId( getBlockRootClientId( clientId ) )
|
|
39
|
-
) === 'core/list-item',
|
|
33
|
+
canIndent: !! getIndentTarget( storeSelect, clientId ),
|
|
34
|
+
canOutdent: !! getOutdentTarget( storeSelect, clientId ),
|
|
40
35
|
};
|
|
41
36
|
},
|
|
42
37
|
[ clientId ]
|
|
@@ -50,7 +45,7 @@ export function IndentUI( { clientId } ) {
|
|
|
50
45
|
shortcut={ displayShortcut.shift( 'Tab' ) }
|
|
51
46
|
description={ __( 'Outdent list item' ) }
|
|
52
47
|
disabled={ ! canOutdent }
|
|
53
|
-
onClick={ () =>
|
|
48
|
+
onClick={ () => outdentListItems( registry ) }
|
|
54
49
|
/>
|
|
55
50
|
<ToolbarButton
|
|
56
51
|
icon={ isRTL() ? formatIndentRTL : formatIndent }
|
|
@@ -58,7 +53,7 @@ export function IndentUI( { clientId } ) {
|
|
|
58
53
|
shortcut="Tab"
|
|
59
54
|
description={ __( 'Indent list item' ) }
|
|
60
55
|
disabled={ ! canIndent }
|
|
61
|
-
onClick={ () =>
|
|
56
|
+
onClick={ () => indentListItems( registry, clientId ) }
|
|
62
57
|
/>
|
|
63
58
|
</>
|
|
64
59
|
);
|
|
@@ -77,13 +72,18 @@ export default function ListItemEdit( {
|
|
|
77
72
|
__unstableDisableDropZone: true,
|
|
78
73
|
} );
|
|
79
74
|
const useEnterRef = useEnter( clientId );
|
|
80
|
-
const
|
|
75
|
+
const useTabRef = useTab();
|
|
76
|
+
const useMultiSelectTabRef = useMultiSelectTab( clientId );
|
|
81
77
|
const onMerge = useMerge( clientId, mergeBlocks );
|
|
82
78
|
return (
|
|
83
79
|
<>
|
|
84
80
|
<li { ...innerBlocksProps }>
|
|
85
81
|
<RichText
|
|
86
|
-
ref={ useMergeRefs( [
|
|
82
|
+
ref={ useMergeRefs( [
|
|
83
|
+
useEnterRef,
|
|
84
|
+
useTabRef,
|
|
85
|
+
useMultiSelectTabRef,
|
|
86
|
+
] ) }
|
|
87
87
|
identifier="content"
|
|
88
88
|
tagName="div"
|
|
89
89
|
onChange={ ( nextContent ) =>
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
export { default as useOutdentListItem } from './use-outdent-list-item';
|
|
2
|
-
export { default as useIndentListItem } from './use-indent-list-item';
|
|
3
1
|
export { default as useEnter } from './use-enter';
|
|
4
|
-
export { default as
|
|
2
|
+
export { default as useTab } from './use-tab';
|
|
3
|
+
export { default as useMultiSelectTab } from './use-multi-select-tab';
|
|
5
4
|
export { default as useMerge } from './use-merge';
|
|
@@ -5,82 +5,94 @@ import {
|
|
|
5
5
|
} from '@wordpress/blocks';
|
|
6
6
|
import { useRefEffect } from '@wordpress/compose';
|
|
7
7
|
import { privateApis as richTextPrivateApis } from '@wordpress/rich-text';
|
|
8
|
-
import {
|
|
9
|
-
import { useSelect, useDispatch } from '@wordpress/data';
|
|
8
|
+
import { useRegistry } from '@wordpress/data';
|
|
10
9
|
import { store as blockEditorStore } from '@wordpress/block-editor';
|
|
11
|
-
import
|
|
10
|
+
import { outdentListItems, getOutdentTarget } from '../utils';
|
|
12
11
|
import { unlock } from '../../lock-unlock';
|
|
13
12
|
|
|
14
13
|
const { subscribeOwnedListener } = unlock( richTextPrivateApis );
|
|
15
14
|
|
|
16
15
|
export default function useEnter( clientId ) {
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
16
|
+
const registry = useRegistry();
|
|
17
|
+
return useRefEffect(
|
|
18
|
+
( element ) => {
|
|
19
|
+
function onBeforeInput( event ) {
|
|
20
|
+
if (
|
|
21
|
+
event.defaultPrevented ||
|
|
22
|
+
event.inputType !== 'insertParagraph'
|
|
23
|
+
) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const select = registry.select( blockEditorStore );
|
|
27
|
+
const {
|
|
28
|
+
getBlock,
|
|
29
|
+
getBlockAttributes,
|
|
30
|
+
getBlockRootClientId,
|
|
31
|
+
getBlockIndex,
|
|
32
|
+
} = select;
|
|
33
|
+
const { replaceBlocks, selectionChange } =
|
|
34
|
+
registry.dispatch( blockEditorStore );
|
|
35
|
+
|
|
36
|
+
const { content } = getBlockAttributes( clientId ) ?? {};
|
|
37
|
+
if ( content?.length ) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
event.preventDefault();
|
|
41
|
+
const canOutdent = !! getOutdentTarget( select, clientId );
|
|
42
|
+
if ( canOutdent ) {
|
|
43
|
+
outdentListItems( registry );
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
// Here we are in top level list so we need to split.
|
|
47
|
+
const topParentListBlock = getBlock(
|
|
48
|
+
getBlockRootClientId( clientId )
|
|
49
|
+
);
|
|
50
|
+
const blockIndex = getBlockIndex( clientId );
|
|
51
|
+
const head = cloneBlock( {
|
|
52
|
+
...topParentListBlock,
|
|
53
|
+
innerBlocks: topParentListBlock.innerBlocks.slice(
|
|
54
|
+
0,
|
|
55
|
+
blockIndex
|
|
56
|
+
),
|
|
57
|
+
} );
|
|
58
|
+
const middle = createBlock( getDefaultBlockName() );
|
|
59
|
+
// Last list item might contain a `list` block innerBlock
|
|
60
|
+
// In that case append remaining innerBlocks blocks.
|
|
61
|
+
const after = [
|
|
62
|
+
...( topParentListBlock.innerBlocks[ blockIndex ]
|
|
63
|
+
.innerBlocks[ 0 ]?.innerBlocks || [] ),
|
|
64
|
+
...topParentListBlock.innerBlocks.slice( blockIndex + 1 ),
|
|
65
|
+
];
|
|
66
|
+
const tail = after.length
|
|
67
|
+
? [
|
|
68
|
+
cloneBlock( {
|
|
69
|
+
...topParentListBlock,
|
|
70
|
+
innerBlocks: after,
|
|
71
|
+
} ),
|
|
72
|
+
]
|
|
73
|
+
: [];
|
|
74
|
+
replaceBlocks(
|
|
75
|
+
topParentListBlock.clientId,
|
|
76
|
+
[ head, middle, ...tail ],
|
|
77
|
+
1
|
|
78
|
+
);
|
|
79
|
+
// We manually change the selection here because we are replacing
|
|
80
|
+
// a different block than the selected one.
|
|
81
|
+
selectionChange( middle.clientId );
|
|
43
82
|
}
|
|
44
|
-
// Here we are in top level list so we need to split.
|
|
45
|
-
const topParentListBlock = getBlock(
|
|
46
|
-
getBlockRootClientId( clientId )
|
|
47
|
-
);
|
|
48
|
-
const blockIndex = getBlockIndex( clientId );
|
|
49
|
-
const head = cloneBlock( {
|
|
50
|
-
...topParentListBlock,
|
|
51
|
-
innerBlocks: topParentListBlock.innerBlocks.slice(
|
|
52
|
-
0,
|
|
53
|
-
blockIndex
|
|
54
|
-
),
|
|
55
|
-
} );
|
|
56
|
-
const middle = createBlock( getDefaultBlockName() );
|
|
57
|
-
// Last list item might contain a `list` block innerBlock
|
|
58
|
-
// In that case append remaining innerBlocks blocks.
|
|
59
|
-
const after = [
|
|
60
|
-
...( topParentListBlock.innerBlocks[ blockIndex ]
|
|
61
|
-
.innerBlocks[ 0 ]?.innerBlocks || [] ),
|
|
62
|
-
...topParentListBlock.innerBlocks.slice( blockIndex + 1 ),
|
|
63
|
-
];
|
|
64
|
-
const tail = after.length
|
|
65
|
-
? [
|
|
66
|
-
cloneBlock( {
|
|
67
|
-
...topParentListBlock,
|
|
68
|
-
innerBlocks: after,
|
|
69
|
-
} ),
|
|
70
|
-
]
|
|
71
|
-
: [];
|
|
72
|
-
replaceBlocks(
|
|
73
|
-
topParentListBlock.clientId,
|
|
74
|
-
[ head, middle, ...tail ],
|
|
75
|
-
1
|
|
76
|
-
);
|
|
77
|
-
// We manually change the selection here because we are replacing
|
|
78
|
-
// a different block than the selected one.
|
|
79
|
-
selectionChange( middle.clientId );
|
|
80
|
-
}
|
|
81
83
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
84
|
+
// Enter is handled on beforeinput: moving focus while the
|
|
85
|
+
// keydown is still being handled leaves the iOS keyboard's
|
|
86
|
+
// auto-capitalization stale. Capture phase so we run before
|
|
87
|
+
// writing-flow's ancestor-bubble handler that gates on
|
|
88
|
+
// `event.defaultPrevented`.
|
|
89
|
+
return subscribeOwnedListener(
|
|
90
|
+
element,
|
|
91
|
+
'beforeinput',
|
|
92
|
+
onBeforeInput,
|
|
93
|
+
true
|
|
94
|
+
);
|
|
95
|
+
},
|
|
96
|
+
[ clientId, registry ]
|
|
97
|
+
);
|
|
86
98
|
}
|
|
@@ -1,46 +1,35 @@
|
|
|
1
|
-
import { useRegistry
|
|
1
|
+
import { useRegistry } from '@wordpress/data';
|
|
2
2
|
import { store as blockEditorStore } from '@wordpress/block-editor';
|
|
3
3
|
import { isUnmodifiedBlock, switchToBlockType } from '@wordpress/blocks';
|
|
4
|
-
import
|
|
4
|
+
import { outdentListItems, getOutdentTarget } from '../utils';
|
|
5
5
|
|
|
6
6
|
export default function useMerge( clientId, onMerge ) {
|
|
7
7
|
const registry = useRegistry();
|
|
8
|
-
const {
|
|
9
|
-
getPreviousBlockClientId,
|
|
10
|
-
getNextBlockClientId,
|
|
11
|
-
getBlockOrder,
|
|
12
|
-
getBlockIndex,
|
|
13
|
-
getBlockRootClientId,
|
|
14
|
-
getBlockName,
|
|
15
|
-
getBlock,
|
|
16
|
-
} = useSelect( blockEditorStore );
|
|
17
|
-
const { mergeBlocks, moveBlocksToPosition, removeBlock, insertBlocks } =
|
|
18
|
-
useDispatch( blockEditorStore );
|
|
19
|
-
const outdentListItem = useOutdentListItem();
|
|
20
8
|
|
|
21
|
-
|
|
22
|
-
const
|
|
9
|
+
return ( forward ) => {
|
|
10
|
+
const select = registry.select( blockEditorStore );
|
|
11
|
+
const {
|
|
12
|
+
getPreviousBlockClientId,
|
|
13
|
+
getNextBlockClientId,
|
|
14
|
+
getBlockOrder,
|
|
15
|
+
getBlockIndex,
|
|
16
|
+
getBlockRootClientId,
|
|
17
|
+
getBlockName,
|
|
18
|
+
getBlock,
|
|
19
|
+
} = select;
|
|
20
|
+
const { mergeBlocks, moveBlocksToPosition, removeBlock, insertBlocks } =
|
|
21
|
+
registry.dispatch( blockEditorStore );
|
|
23
22
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
23
|
+
function getTrailingId( id ) {
|
|
24
|
+
const order = getBlockOrder( id );
|
|
27
25
|
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
if ( ! order.length ) {
|
|
27
|
+
return id;
|
|
28
|
+
}
|
|
30
29
|
|
|
31
|
-
|
|
32
|
-
const listId = getBlockRootClientId( id );
|
|
33
|
-
const parentListItemId = getBlockRootClientId( listId );
|
|
34
|
-
if ( ! parentListItemId ) {
|
|
35
|
-
return;
|
|
30
|
+
return getTrailingId( order[ order.length - 1 ] );
|
|
36
31
|
}
|
|
37
|
-
if ( getBlockName( parentListItemId ) !== 'core/list-item' ) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
return parentListItemId;
|
|
41
|
-
}
|
|
42
32
|
|
|
43
|
-
return ( forward ) => {
|
|
44
33
|
function mergeWithNested( clientIdA, clientIdB ) {
|
|
45
34
|
registry.batch( () => {
|
|
46
35
|
// When merging a sub list item with a higher next list item, we
|
|
@@ -62,7 +51,7 @@ export default function useMerge( clientId, onMerge ) {
|
|
|
62
51
|
clientIdA
|
|
63
52
|
);
|
|
64
53
|
} else if (
|
|
65
|
-
|
|
54
|
+
getOutdentTarget( select, clientIdB ) === clientIdA
|
|
66
55
|
) {
|
|
67
56
|
// Merging into the parent item's own line: the
|
|
68
57
|
// children take the item's place in its list, one
|
|
@@ -104,7 +93,7 @@ export default function useMerge( clientId, onMerge ) {
|
|
|
104
93
|
while (
|
|
105
94
|
! ( nextBlockClientId = getNextBlockClientId( listItemId ) )
|
|
106
95
|
) {
|
|
107
|
-
const parentLi =
|
|
96
|
+
const parentLi = getOutdentTarget( select, listItemId );
|
|
108
97
|
if ( ! parentLi ) {
|
|
109
98
|
break;
|
|
110
99
|
}
|
|
@@ -158,7 +147,7 @@ export default function useMerge( clientId, onMerge ) {
|
|
|
158
147
|
mergeWithNested( trailingId, clientId );
|
|
159
148
|
return;
|
|
160
149
|
}
|
|
161
|
-
const parentListItemId =
|
|
150
|
+
const parentListItemId = getOutdentTarget( select, clientId );
|
|
162
151
|
if ( parentListItemId ) {
|
|
163
152
|
mergeWithNested( parentListItemId, clientId );
|
|
164
153
|
return;
|
|
@@ -170,7 +159,10 @@ export default function useMerge( clientId, onMerge ) {
|
|
|
170
159
|
blockOrder.length > 0
|
|
171
160
|
) {
|
|
172
161
|
registry.batch( () => {
|
|
173
|
-
|
|
162
|
+
outdentListItems(
|
|
163
|
+
registry,
|
|
164
|
+
getBlockOrder( blockOrder[ 0 ] )
|
|
165
|
+
);
|
|
174
166
|
removeBlock( clientId, true );
|
|
175
167
|
} );
|
|
176
168
|
} else {
|