@wordpress/block-library 10.1.1-next.v.202607070741.0 → 10.3.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 +25 -0
- package/build/accordion/block.json +1 -0
- package/build/accordion-panel/block.json +1 -0
- package/build/button/edit.cjs +18 -8
- package/build/button/edit.cjs.map +2 -2
- package/build/code/edit.cjs +3 -1
- package/build/code/edit.cjs.map +2 -2
- package/build/cover/block.json +12 -0
- package/build/cover/edit/block-controls.cjs +14 -5
- package/build/cover/edit/block-controls.cjs.map +2 -2
- package/build/cover/edit/embed-video-url-input.cjs +5 -3
- package/build/cover/edit/embed-video-url-input.cjs.map +3 -3
- package/build/cover/edit/index.cjs +76 -32
- package/build/cover/edit/index.cjs.map +2 -2
- package/build/cover/embed-video-utils.cjs +17 -7
- package/build/cover/embed-video-utils.cjs.map +2 -2
- package/build/details/transforms.cjs +1 -3
- package/build/details/transforms.cjs.map +2 -2
- package/build/embed/edit.cjs +1 -1
- package/build/embed/edit.cjs.map +2 -2
- package/build/embed/embed-placeholder.cjs +1 -2
- package/build/embed/embed-placeholder.cjs.map +2 -2
- package/build/file/edit.cjs +4 -3
- package/build/file/edit.cjs.map +2 -2
- package/build/file/transforms.cjs +25 -60
- package/build/file/transforms.cjs.map +2 -2
- package/build/gallery/block.json +4 -2
- package/build/gallery/dynamic-gallery.cjs +104 -61
- package/build/gallery/dynamic-gallery.cjs.map +3 -3
- package/build/gallery/edit.cjs +1 -1
- package/build/gallery/edit.cjs.map +3 -3
- package/build/gallery/gap-styles.cjs +49 -13
- package/build/gallery/gap-styles.cjs.map +3 -3
- package/build/gallery/use-dynamic-gallery.cjs +15 -8
- package/build/gallery/use-dynamic-gallery.cjs.map +2 -2
- package/build/group/transforms.cjs +1 -1
- package/build/group/transforms.cjs.map +2 -2
- package/build/heading/edit.cjs +1 -1
- package/build/heading/edit.cjs.map +2 -2
- package/build/html/modal.cjs +63 -54
- package/build/html/modal.cjs.map +3 -3
- package/build/icon/block.json +5 -3
- package/build/icon/components/custom-inserter/icon-grid.cjs +25 -12
- package/build/icon/components/custom-inserter/icon-grid.cjs.map +2 -2
- package/build/icon/components/custom-inserter/index.cjs +100 -31
- package/build/icon/components/custom-inserter/index.cjs.map +3 -3
- package/build/icon/edit.cjs +11 -12
- package/build/icon/edit.cjs.map +2 -2
- package/build/image/block.json +1 -1
- package/build/image/edit.cjs +1 -35
- package/build/image/edit.cjs.map +2 -2
- package/build/image/image.cjs +23 -18
- package/build/image/image.cjs.map +3 -3
- package/build/image/transforms.cjs +78 -0
- package/build/image/transforms.cjs.map +3 -3
- package/build/image/use-open-image-media-editor-modal.cjs +6 -2
- package/build/image/use-open-image-media-editor-modal.cjs.map +2 -2
- package/build/index.cjs +18 -8
- package/build/index.cjs.map +2 -2
- package/build/latest-posts/edit.cjs +5 -8
- package/build/latest-posts/edit.cjs.map +2 -2
- package/build/list-item/edit.cjs +1 -1
- package/build/list-item/edit.cjs.map +2 -2
- package/build/list-item/hooks/use-enter.cjs +14 -17
- package/build/list-item/hooks/use-enter.cjs.map +3 -3
- package/build/list-item/hooks/use-indent-list-item.cjs +10 -2
- package/build/list-item/hooks/use-indent-list-item.cjs.map +2 -2
- package/build/list-item/hooks/use-space.cjs +3 -2
- package/build/list-item/hooks/use-space.cjs.map +3 -3
- package/build/math/edit.cjs +39 -56
- package/build/math/edit.cjs.map +3 -3
- package/build/media-text/edit.cjs +2 -1
- package/build/media-text/edit.cjs.map +2 -2
- package/build/more/edit.cjs +2 -2
- package/build/more/edit.cjs.map +2 -2
- package/build/navigation/edit/index.cjs +30 -16
- package/build/navigation/edit/index.cjs.map +3 -3
- package/build/navigation/edit/use-layout-custom-properties.cjs +72 -0
- package/build/navigation/edit/use-layout-custom-properties.cjs.map +7 -0
- package/build/navigation/view.cjs +9 -6
- package/build/navigation/view.cjs.map +2 -2
- package/build/navigation-link/edit.cjs +3 -3
- package/build/navigation-link/edit.cjs.map +2 -2
- package/build/navigation-link/link-ui/index.cjs +2 -2
- package/build/navigation-link/link-ui/index.cjs.map +2 -2
- package/build/paragraph/edit.cjs +5 -2
- package/build/paragraph/edit.cjs.map +3 -3
- package/build/paragraph/index.cjs +4 -1
- package/build/paragraph/index.cjs.map +2 -2
- package/build/paragraph/use-enter.cjs +3 -7
- package/build/paragraph/use-enter.cjs.map +3 -3
- package/build/playlist/block.json +29 -10
- package/build/playlist/context.cjs +2 -1
- package/build/playlist/context.cjs.map +2 -2
- package/build/playlist/edit.cjs +328 -39
- package/build/playlist/edit.cjs.map +3 -3
- package/build/playlist/index.cjs +1 -1
- package/build/playlist/index.cjs.map +2 -2
- package/build/playlist/utils.cjs +37 -8
- package/build/playlist/utils.cjs.map +2 -2
- package/build/playlist/view.cjs +83 -13
- package/build/playlist/view.cjs.map +2 -2
- package/build/playlist-track/block.json +4 -2
- package/build/playlist-track/edit.cjs +115 -70
- package/build/playlist-track/edit.cjs.map +2 -2
- package/build/post-content/block.json +1 -0
- package/build/post-content/edit.cjs +36 -15
- package/build/post-content/edit.cjs.map +2 -2
- package/build/post-featured-image/edit.cjs +3 -2
- package/build/post-featured-image/edit.cjs.map +2 -2
- package/build/post-template/block.json +2 -1
- package/build/post-template/edit.cjs +10 -1
- package/build/post-template/edit.cjs.map +2 -2
- package/build/post-terms/edit.cjs +2 -2
- package/build/post-terms/edit.cjs.map +2 -2
- package/build/post-title/edit.cjs +2 -2
- package/build/post-title/edit.cjs.map +2 -2
- package/build/preformatted/edit.cjs +3 -1
- package/build/preformatted/edit.cjs.map +2 -2
- package/build/pullquote/block.json +3 -1
- package/build/pullquote/edit.cjs +5 -3
- package/build/pullquote/edit.cjs.map +2 -2
- package/build/query/block.json +3 -2
- package/build/query/edit/inspector-controls/index.cjs +42 -5
- package/build/query/edit/inspector-controls/index.cjs.map +2 -2
- package/build/query/edit/inspector-controls/offset-controls.cjs +1 -2
- package/build/query/edit/inspector-controls/offset-controls.cjs.map +2 -2
- package/build/query/edit/inspector-controls/pages-control.cjs +0 -1
- package/build/query/edit/inspector-controls/pages-control.cjs.map +2 -2
- package/build/query/edit/query-content.cjs +10 -3
- package/build/query/edit/query-content.cjs.map +2 -2
- package/build/query/index.cjs +2 -1
- package/build/query/index.cjs.map +2 -2
- package/build/quote/block.json +3 -1
- package/build/quote/transforms.cjs +1 -3
- package/build/quote/transforms.cjs.map +2 -2
- package/build/read-more/edit.cjs +3 -1
- package/build/read-more/edit.cjs.map +2 -2
- package/build/rss/edit.cjs +0 -1
- package/build/rss/edit.cjs.map +2 -2
- package/build/site-tagline/edit.cjs +3 -1
- package/build/site-tagline/edit.cjs.map +2 -2
- package/build/site-title/edit.cjs +3 -1
- package/build/site-title/edit.cjs.map +2 -2
- package/build/social-links/edit.cjs +11 -4
- package/build/social-links/edit.cjs.map +2 -2
- package/build/tab-list/block.json +4 -3
- package/build/tab-list/edit.cjs +67 -11
- package/build/tab-list/edit.cjs.map +3 -3
- package/build/tab-list/tab-movers.cjs +87 -0
- package/build/tab-list/tab-movers.cjs.map +7 -0
- package/build/tab-panel/block.json +1 -6
- package/build/tab-panel/edit.cjs +16 -24
- package/build/tab-panel/edit.cjs.map +2 -2
- package/build/tab-panels/block.json +0 -1
- package/build/table/edit.cjs +1 -1
- package/build/table/edit.cjs.map +2 -2
- package/build/tabs/block.json +0 -5
- package/build/tabs/edit.cjs +4 -39
- package/build/tabs/edit.cjs.map +3 -3
- package/build/tabs/use-tab-actions.cjs +23 -1
- package/build/tabs/use-tab-actions.cjs.map +2 -2
- package/build/tabs/use-tab-list-items-sync.cjs +19 -1
- package/build/tabs/use-tab-list-items-sync.cjs.map +2 -2
- package/build/term-name/block.json +1 -3
- package/build/term-name/deprecated.cjs +105 -0
- package/build/term-name/deprecated.cjs.map +7 -0
- package/build/term-name/edit.cjs +11 -37
- package/build/term-name/edit.cjs.map +3 -3
- package/build/term-name/index.cjs +3 -1
- package/build/term-name/index.cjs.map +3 -3
- package/build/utils/caption.cjs +2 -2
- package/build/utils/caption.cjs.map +2 -2
- package/build/utils/waveform-player.cjs +138 -22
- package/build/utils/waveform-player.cjs.map +2 -2
- package/build/utils/waveform-utils.cjs +315 -17
- package/build/utils/waveform-utils.cjs.map +2 -2
- package/build/verse/edit.cjs +3 -1
- package/build/verse/edit.cjs.map +2 -2
- package/build/video/edit.cjs +2 -11
- package/build/video/edit.cjs.map +3 -3
- package/build/video/tracks-editor.cjs +0 -1
- package/build/video/tracks-editor.cjs.map +2 -2
- package/build-module/accordion/block.json +1 -0
- package/build-module/accordion-panel/block.json +1 -0
- package/build-module/button/edit.mjs +19 -14
- package/build-module/button/edit.mjs.map +2 -2
- package/build-module/code/edit.mjs +3 -1
- package/build-module/code/edit.mjs.map +2 -2
- package/build-module/cover/block.json +12 -0
- package/build-module/cover/edit/block-controls.mjs +14 -5
- package/build-module/cover/edit/block-controls.mjs.map +2 -2
- package/build-module/cover/edit/embed-video-url-input.mjs +5 -4
- package/build-module/cover/edit/embed-video-url-input.mjs.map +2 -2
- package/build-module/cover/edit/index.mjs +79 -35
- package/build-module/cover/edit/index.mjs.map +2 -2
- package/build-module/cover/embed-video-utils.mjs +16 -7
- package/build-module/cover/embed-video-utils.mjs.map +2 -2
- package/build-module/details/transforms.mjs +2 -7
- package/build-module/details/transforms.mjs.map +2 -2
- package/build-module/embed/edit.mjs +1 -1
- package/build-module/embed/edit.mjs.map +2 -2
- package/build-module/embed/embed-placeholder.mjs +1 -2
- package/build-module/embed/embed-placeholder.mjs.map +2 -2
- package/build-module/file/edit.mjs +4 -3
- package/build-module/file/edit.mjs.map +2 -2
- package/build-module/file/transforms.mjs +25 -60
- package/build-module/file/transforms.mjs.map +2 -2
- package/build-module/gallery/block.json +4 -2
- package/build-module/gallery/dynamic-gallery.mjs +104 -61
- package/build-module/gallery/dynamic-gallery.mjs.map +2 -2
- package/build-module/gallery/edit.mjs +3 -3
- package/build-module/gallery/edit.mjs.map +2 -2
- package/build-module/gallery/gap-styles.mjs +53 -14
- package/build-module/gallery/gap-styles.mjs.map +2 -2
- package/build-module/gallery/use-dynamic-gallery.mjs +16 -9
- package/build-module/gallery/use-dynamic-gallery.mjs.map +2 -2
- package/build-module/group/transforms.mjs +2 -5
- package/build-module/group/transforms.mjs.map +2 -2
- package/build-module/heading/edit.mjs +1 -1
- package/build-module/heading/edit.mjs.map +2 -2
- package/build-module/html/modal.mjs +68 -55
- package/build-module/html/modal.mjs.map +2 -2
- package/build-module/icon/block.json +5 -3
- package/build-module/icon/components/custom-inserter/icon-grid.mjs +25 -12
- package/build-module/icon/components/custom-inserter/icon-grid.mjs.map +2 -2
- package/build-module/icon/components/custom-inserter/index.mjs +102 -33
- package/build-module/icon/components/custom-inserter/index.mjs.map +2 -2
- package/build-module/icon/edit.mjs +11 -12
- package/build-module/icon/edit.mjs.map +2 -2
- package/build-module/image/block.json +1 -1
- package/build-module/image/edit.mjs +1 -35
- package/build-module/image/edit.mjs.map +2 -2
- package/build-module/image/image.mjs +23 -18
- package/build-module/image/image.mjs.map +2 -2
- package/build-module/image/transforms.mjs +78 -0
- package/build-module/image/transforms.mjs.map +2 -2
- package/build-module/image/use-open-image-media-editor-modal.mjs +6 -2
- package/build-module/image/use-open-image-media-editor-modal.mjs.map +2 -2
- package/build-module/index.mjs +18 -8
- package/build-module/index.mjs.map +2 -2
- package/build-module/latest-posts/edit.mjs +5 -8
- package/build-module/latest-posts/edit.mjs.map +2 -2
- package/build-module/list-item/edit.mjs +1 -1
- package/build-module/list-item/edit.mjs.map +2 -2
- package/build-module/list-item/hooks/use-enter.mjs +15 -21
- package/build-module/list-item/hooks/use-enter.mjs.map +2 -2
- package/build-module/list-item/hooks/use-indent-list-item.mjs +10 -2
- package/build-module/list-item/hooks/use-indent-list-item.mjs.map +2 -2
- package/build-module/list-item/hooks/use-space.mjs +4 -6
- package/build-module/list-item/hooks/use-space.mjs.map +2 -2
- package/build-module/math/edit.mjs +41 -60
- package/build-module/math/edit.mjs.map +2 -2
- package/build-module/media-text/edit.mjs +2 -1
- package/build-module/media-text/edit.mjs.map +2 -2
- package/build-module/more/edit.mjs +2 -2
- package/build-module/more/edit.mjs.map +2 -2
- package/build-module/navigation/edit/index.mjs +30 -16
- package/build-module/navigation/edit/index.mjs.map +2 -2
- package/build-module/navigation/edit/use-layout-custom-properties.mjs +51 -0
- package/build-module/navigation/edit/use-layout-custom-properties.mjs.map +7 -0
- package/build-module/navigation/view.mjs +9 -6
- package/build-module/navigation/view.mjs.map +2 -2
- package/build-module/navigation-link/edit.mjs +3 -3
- package/build-module/navigation-link/edit.mjs.map +2 -2
- package/build-module/navigation-link/link-ui/index.mjs +2 -2
- package/build-module/navigation-link/link-ui/index.mjs.map +2 -2
- package/build-module/paragraph/edit.mjs +6 -2
- package/build-module/paragraph/edit.mjs.map +2 -2
- package/build-module/paragraph/index.mjs +4 -1
- package/build-module/paragraph/index.mjs.map +2 -2
- package/build-module/paragraph/use-enter.mjs +4 -11
- package/build-module/paragraph/use-enter.mjs.map +2 -2
- package/build-module/playlist/block.json +29 -10
- package/build-module/playlist/context.mjs +2 -1
- package/build-module/playlist/context.mjs.map +2 -2
- package/build-module/playlist/edit.mjs +331 -41
- package/build-module/playlist/edit.mjs.map +2 -2
- package/build-module/playlist/index.mjs +1 -1
- package/build-module/playlist/index.mjs.map +2 -2
- package/build-module/playlist/utils.mjs +35 -7
- package/build-module/playlist/utils.mjs.map +2 -2
- package/build-module/playlist/view.mjs +89 -14
- package/build-module/playlist/view.mjs.map +2 -2
- package/build-module/playlist-track/block.json +4 -2
- package/build-module/playlist-track/edit.mjs +117 -71
- package/build-module/playlist-track/edit.mjs.map +2 -2
- package/build-module/post-content/block.json +1 -0
- package/build-module/post-content/edit.mjs +37 -15
- package/build-module/post-content/edit.mjs.map +2 -2
- package/build-module/post-featured-image/edit.mjs +3 -2
- package/build-module/post-featured-image/edit.mjs.map +2 -2
- package/build-module/post-template/block.json +2 -1
- package/build-module/post-template/edit.mjs +10 -1
- package/build-module/post-template/edit.mjs.map +2 -2
- package/build-module/post-terms/edit.mjs +2 -2
- package/build-module/post-terms/edit.mjs.map +2 -2
- package/build-module/post-title/edit.mjs +2 -2
- package/build-module/post-title/edit.mjs.map +2 -2
- package/build-module/preformatted/edit.mjs +3 -1
- package/build-module/preformatted/edit.mjs.map +2 -2
- package/build-module/pullquote/block.json +3 -1
- package/build-module/pullquote/edit.mjs +5 -3
- package/build-module/pullquote/edit.mjs.map +2 -2
- package/build-module/query/block.json +3 -2
- package/build-module/query/edit/inspector-controls/index.mjs +44 -6
- package/build-module/query/edit/inspector-controls/index.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/offset-controls.mjs +2 -3
- package/build-module/query/edit/inspector-controls/offset-controls.mjs.map +2 -2
- package/build-module/query/edit/inspector-controls/pages-control.mjs +0 -1
- package/build-module/query/edit/inspector-controls/pages-control.mjs.map +2 -2
- package/build-module/query/edit/query-content.mjs +10 -3
- package/build-module/query/edit/query-content.mjs.map +2 -2
- package/build-module/query/index.mjs +2 -1
- package/build-module/query/index.mjs.map +2 -2
- package/build-module/quote/block.json +3 -1
- package/build-module/quote/transforms.mjs +2 -4
- package/build-module/quote/transforms.mjs.map +2 -2
- package/build-module/read-more/edit.mjs +3 -1
- package/build-module/read-more/edit.mjs.map +2 -2
- package/build-module/rss/edit.mjs +0 -1
- package/build-module/rss/edit.mjs.map +2 -2
- package/build-module/site-tagline/edit.mjs +3 -1
- package/build-module/site-tagline/edit.mjs.map +2 -2
- package/build-module/site-title/edit.mjs +3 -1
- package/build-module/site-title/edit.mjs.map +2 -2
- package/build-module/social-links/edit.mjs +11 -4
- package/build-module/social-links/edit.mjs.map +2 -2
- package/build-module/tab-list/block.json +4 -3
- package/build-module/tab-list/edit.mjs +74 -13
- package/build-module/tab-list/edit.mjs.map +2 -2
- package/build-module/tab-list/tab-movers.mjs +59 -0
- package/build-module/tab-list/tab-movers.mjs.map +7 -0
- package/build-module/tab-panel/block.json +1 -6
- package/build-module/tab-panel/edit.mjs +17 -25
- package/build-module/tab-panel/edit.mjs.map +2 -2
- package/build-module/tab-panels/block.json +0 -1
- package/build-module/table/edit.mjs +1 -1
- package/build-module/table/edit.mjs.map +2 -2
- package/build-module/tabs/block.json +0 -5
- package/build-module/tabs/edit.mjs +5 -45
- package/build-module/tabs/edit.mjs.map +2 -2
- package/build-module/tabs/use-tab-actions.mjs +23 -1
- package/build-module/tabs/use-tab-actions.mjs.map +2 -2
- package/build-module/tabs/use-tab-list-items-sync.mjs +19 -1
- package/build-module/tabs/use-tab-list-items-sync.mjs.map +2 -2
- package/build-module/term-name/block.json +1 -3
- package/build-module/term-name/deprecated.mjs +74 -0
- package/build-module/term-name/deprecated.mjs.map +7 -0
- package/build-module/term-name/edit.mjs +11 -28
- package/build-module/term-name/edit.mjs.map +2 -2
- package/build-module/term-name/index.mjs +3 -1
- package/build-module/term-name/index.mjs.map +2 -2
- package/build-module/utils/caption.mjs +2 -2
- package/build-module/utils/caption.mjs.map +2 -2
- package/build-module/utils/waveform-player.mjs +144 -23
- package/build-module/utils/waveform-player.mjs.map +2 -2
- package/build-module/utils/waveform-utils.mjs +310 -16
- package/build-module/utils/waveform-utils.mjs.map +2 -2
- package/build-module/verse/edit.mjs +3 -1
- package/build-module/verse/edit.mjs.map +2 -2
- package/build-module/video/edit.mjs +2 -11
- package/build-module/video/edit.mjs.map +2 -2
- package/build-module/video/tracks-editor.mjs +0 -1
- package/build-module/video/tracks-editor.mjs.map +2 -2
- package/build-style/cover/editor-rtl.css +3 -0
- package/build-style/cover/editor.css +3 -0
- package/build-style/editor-rtl.css +61 -59
- package/build-style/editor.css +61 -59
- package/build-style/icon/editor-rtl.css +80 -10
- package/build-style/icon/editor.css +80 -10
- package/build-style/image/editor-rtl.css +3 -32
- package/build-style/image/editor.css +3 -32
- package/build-style/more/editor-rtl.css +2 -2
- package/build-style/more/editor.css +2 -2
- package/build-style/navigation/editor-rtl.css +3 -4
- package/build-style/navigation/editor.css +3 -4
- package/build-style/navigation-link/editor-rtl.css +1 -1
- package/build-style/navigation-link/editor.css +1 -1
- package/build-style/nextpage/editor-rtl.css +2 -2
- package/build-style/nextpage/editor.css +2 -2
- package/build-style/playlist/editor-rtl.css +4 -3
- package/build-style/playlist/editor.css +4 -3
- package/build-style/playlist/style-rtl.css +81 -5
- package/build-style/playlist/style.css +81 -5
- package/build-style/playlist-track/style-rtl.css +10 -0
- package/build-style/playlist-track/style.css +10 -0
- package/build-style/pullquote/editor-rtl.css +4 -0
- package/build-style/pullquote/editor.css +4 -0
- package/build-style/style-rtl.css +91 -5
- package/build-style/style.css +91 -5
- package/build-style/tab-list/editor-rtl.css +101 -0
- package/build-style/tab-list/editor.css +101 -0
- package/build-style/video/editor-rtl.css +1 -1
- package/build-style/video/editor.css +1 -1
- package/build-types/table-of-contents/list.d.ts +1 -1
- package/build-types/table-of-contents/list.d.ts.map +1 -1
- package/package.json +47 -45
- package/src/accordion/README.md +1 -0
- package/src/accordion/block.json +1 -0
- package/src/accordion-panel/block.json +1 -0
- package/src/breadcrumbs/index.php +3 -1
- package/src/button/edit.js +21 -15
- package/src/button/index.php +1 -1
- package/src/code/edit.js +7 -2
- package/src/cover/README.md +60 -0
- package/src/cover/block.json +12 -0
- package/src/cover/edit/block-controls.js +26 -11
- package/src/cover/edit/embed-video-url-input.js +5 -4
- package/src/cover/edit/index.js +109 -46
- package/src/cover/editor.scss +6 -0
- package/src/cover/embed-video-utils.js +38 -13
- package/src/cover/index.php +9 -2
- package/src/details/transforms.js +2 -7
- package/src/editor.scss +1 -0
- package/src/embed/edit.js +3 -1
- package/src/embed/embed-placeholder.js +9 -8
- package/src/file/edit.js +8 -8
- package/src/file/transforms.js +28 -60
- package/src/form/index.php +6 -4
- package/src/gallery/README.md +1 -1
- package/src/gallery/block.json +4 -2
- package/src/gallery/dynamic-gallery.js +133 -74
- package/src/gallery/edit.js +3 -3
- package/src/gallery/gap-styles.js +79 -20
- package/src/gallery/index.php +103 -43
- package/src/gallery/use-dynamic-gallery.js +27 -12
- package/src/group/transforms.js +2 -5
- package/src/heading/edit.js +1 -1
- package/src/html/modal.js +13 -2
- package/src/icon/README.md +1 -3
- package/src/icon/block.json +5 -3
- package/src/icon/components/custom-inserter/icon-grid.js +40 -11
- package/src/icon/components/custom-inserter/index.js +98 -25
- package/src/icon/edit.js +11 -17
- package/src/icon/editor.scss +33 -11
- package/src/image/README.md +1 -1
- package/src/image/block.json +1 -1
- package/src/image/edit.js +1 -57
- package/src/image/editor.scss +6 -44
- package/src/image/image.js +56 -27
- package/src/image/test/use-open-image-media-editor-modal.js +37 -1
- package/src/image/transforms.js +128 -0
- package/src/image/use-open-image-media-editor-modal.js +8 -1
- package/src/index.js +19 -7
- package/src/latest-posts/edit.js +5 -8
- package/src/latest-posts/index.php +49 -18
- package/src/list-item/edit.js +1 -1
- package/src/list-item/hooks/use-enter.js +15 -22
- package/src/list-item/hooks/use-indent-list-item.js +10 -1
- package/src/list-item/hooks/use-space.js +4 -6
- package/src/math/edit.js +42 -59
- package/src/media-text/edit.js +1 -0
- package/src/media-text/editor.scss +1 -0
- package/src/media-text/index.php +11 -2
- package/src/more/edit.js +7 -4
- package/src/more/editor.scss +1 -1
- package/src/navigation/edit/index.js +52 -36
- package/src/navigation/edit/test/layout-custom-properties.js +138 -0
- package/src/navigation/edit/use-layout-custom-properties.js +84 -0
- package/src/navigation/editor.scss +1 -2
- package/src/navigation/index.php +123 -12
- package/src/navigation/test/view.js +51 -0
- package/src/navigation/view.js +15 -14
- package/src/navigation-link/edit.js +11 -7
- package/src/navigation-link/editor.scss +1 -1
- package/src/navigation-link/index.php +70 -3
- package/src/navigation-link/link-ui/index.js +2 -1
- package/src/navigation-link/test/__snapshots__/hooks.js.snap +1 -1
- package/src/navigation-submenu/index.php +6 -3
- package/src/nextpage/editor.scss +1 -1
- package/src/page-list/index.php +4 -3
- package/src/paragraph/edit.js +9 -2
- package/src/paragraph/index.js +4 -1
- package/src/paragraph/use-enter.js +4 -11
- package/src/pattern/index.php +5 -5
- package/src/playlist/README.md +17 -18
- package/src/playlist/block.json +29 -10
- package/src/playlist/context.js +1 -0
- package/src/playlist/edit.js +395 -59
- package/src/playlist/editor.scss +4 -5
- package/src/playlist/index.js +1 -1
- package/src/playlist/index.php +71 -22
- package/src/playlist/style.scss +54 -1
- package/src/playlist/test/edit-component.js +139 -0
- package/src/playlist/test/edit.js +43 -2
- package/src/playlist/utils.js +49 -10
- package/src/playlist/view.js +97 -16
- package/src/playlist-track/README.md +3 -3
- package/src/playlist-track/block.json +4 -2
- package/src/playlist-track/edit.js +116 -75
- package/src/playlist-track/index.php +26 -11
- package/src/playlist-track/style.scss +10 -0
- package/src/playlist-track/test/edit.js +253 -0
- package/src/post-content/README.md +1 -0
- package/src/post-content/block.json +1 -0
- package/src/post-content/edit.js +45 -16
- package/src/post-excerpt/index.php +4 -1
- package/src/post-featured-image/edit.js +3 -2
- package/src/post-featured-image/index.php +4 -1
- package/src/post-template/README.md +1 -0
- package/src/post-template/block.json +2 -1
- package/src/post-template/edit.js +9 -0
- package/src/post-terms/edit.js +7 -4
- package/src/post-title/edit.js +5 -3
- package/src/preformatted/edit.js +7 -2
- package/src/pullquote/README.md +1 -0
- package/src/pullquote/block.json +3 -1
- package/src/pullquote/edit.js +9 -4
- package/src/pullquote/editor.scss +6 -0
- package/src/query/README.md +2 -1
- package/src/query/block.json +3 -2
- package/src/query/edit/inspector-controls/index.js +47 -4
- package/src/query/edit/inspector-controls/offset-controls.js +2 -3
- package/src/query/edit/inspector-controls/pages-control.js +0 -1
- package/src/query/edit/query-content.js +19 -3
- package/src/query/index.js +1 -0
- package/src/quote/README.md +1 -0
- package/src/quote/block.json +3 -1
- package/src/quote/transforms.js +2 -4
- package/src/read-more/edit.js +7 -2
- package/src/rss/edit.js +0 -1
- package/src/rss/index.php +10 -4
- package/src/site-tagline/edit.js +7 -2
- package/src/site-title/edit.js +7 -2
- package/src/social-link/index.php +19 -9
- package/src/social-links/edit.js +21 -12
- package/src/tab-list/README.md +4 -5
- package/src/tab-list/block.json +4 -3
- package/src/tab-list/edit.js +92 -28
- package/src/tab-list/editor.scss +9 -0
- package/src/tab-list/index.php +9 -4
- package/src/tab-list/tab-movers.js +72 -0
- package/src/tab-panel/README.md +4 -6
- package/src/tab-panel/block.json +1 -6
- package/src/tab-panel/edit.js +20 -33
- package/src/tab-panels/README.md +5 -3
- package/src/tab-panels/block.json +0 -1
- package/src/table/edit.js +1 -1
- package/src/table-of-contents/index.php +386 -1
- package/src/tabs/README.md +18 -9
- package/src/tabs/block.json +0 -5
- package/src/tabs/edit.js +7 -64
- package/src/tabs/use-tab-actions.js +32 -3
- package/src/tabs/use-tab-list-items-sync.js +24 -4
- package/src/tag-cloud/index.php +3 -2
- package/src/template-part/index.php +3 -17
- package/src/term-name/README.md +1 -1
- package/src/term-name/block.json +1 -3
- package/src/term-name/deprecated.js +74 -0
- package/src/term-name/edit.js +2 -18
- package/src/term-name/index.js +2 -0
- package/src/utils/caption.js +7 -4
- package/src/utils/media-control.scss +1 -5
- package/src/utils/test/waveform-player.js +297 -34
- package/src/utils/test/waveform-utils.js +473 -5
- package/src/utils/waveform-player.js +189 -59
- package/src/utils/waveform-utils.js +443 -40
- package/src/verse/edit.js +7 -2
- package/src/video/edit.js +0 -8
- package/src/video/editor.scss +1 -1
- package/src/video/index.php +2 -2
- package/src/video/tracks-editor.js +0 -1
- package/build/image/animated-gif-convert-control.cjs +0 -105
- package/build/image/animated-gif-convert-control.cjs.map +0 -7
- package/build/utils/gif-conversion-attributes.cjs +0 -40
- package/build/utils/gif-conversion-attributes.cjs.map +0 -7
- package/build/video/gif-restore-control.cjs +0 -73
- package/build/video/gif-restore-control.cjs.map +0 -7
- package/build-module/image/animated-gif-convert-control.mjs +0 -87
- package/build-module/image/animated-gif-convert-control.mjs.map +0 -7
- package/build-module/utils/gif-conversion-attributes.mjs +0 -15
- package/build-module/utils/gif-conversion-attributes.mjs.map +0 -7
- package/build-module/video/gif-restore-control.mjs +0 -55
- package/build-module/video/gif-restore-control.mjs.map +0 -7
- package/src/image/animated-gif-convert-control.js +0 -135
- package/src/image/test/animated-gif-convert-control.js +0 -276
- package/src/utils/gif-conversion-attributes.js +0 -30
- package/src/utils/test/gif-conversion-attributes.js +0 -60
- package/src/video/gif-restore-control.js +0 -92
|
@@ -5,6 +5,11 @@
|
|
|
5
5
|
* @package WordPress
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* The Heading block's default level when no `level` attribute is saved.
|
|
10
|
+
*/
|
|
11
|
+
const BLOCK_CORE_TABLE_OF_CONTENTS_DEFAULT_HEADING_LEVEL = 2;
|
|
12
|
+
|
|
8
13
|
/**
|
|
9
14
|
* Adds an aria-label to the table of contents block content.
|
|
10
15
|
*
|
|
@@ -13,7 +18,7 @@
|
|
|
13
18
|
*
|
|
14
19
|
* @return string The content of the block being rendered.
|
|
15
20
|
*/
|
|
16
|
-
function
|
|
21
|
+
function block_core_table_of_contents_add_aria_label( $attributes, $content ) {
|
|
17
22
|
if ( ! $content ) {
|
|
18
23
|
return $content;
|
|
19
24
|
}
|
|
@@ -30,6 +35,386 @@ function block_core_table_of_contents_render( $attributes, $content ) {
|
|
|
30
35
|
return $p->get_updated_html();
|
|
31
36
|
}
|
|
32
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Gets the link for a heading.
|
|
40
|
+
*
|
|
41
|
+
* Headings without an id cannot be linked. Non-paginated posts can use a local
|
|
42
|
+
* fragment link. Paginated posts need a full permalink so headings on later
|
|
43
|
+
* pages link to the correct page before applying the fragment.
|
|
44
|
+
*
|
|
45
|
+
* @param string $id Heading id.
|
|
46
|
+
* @param array $context Heading resolution context used while scanning the
|
|
47
|
+
* post content.
|
|
48
|
+
*
|
|
49
|
+
* @return string Heading link.
|
|
50
|
+
*/
|
|
51
|
+
function block_core_table_of_contents_get_heading_link( $id, $context = array() ) {
|
|
52
|
+
if ( '' === $id ) {
|
|
53
|
+
return '';
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if ( empty( $context['is_paginated'] ) || empty( $context['permalink'] ) ) {
|
|
57
|
+
return '#' . $id;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
$page = isset( $context['current_page'] ) ? max( 1, (int) $context['current_page'] ) : 1;
|
|
61
|
+
$permalink = remove_query_arg( 'page', $context['permalink'] );
|
|
62
|
+
|
|
63
|
+
// Page 1 uses the canonical permalink, e.g. `/post/#intro`. Later pages use
|
|
64
|
+
// the page query arg before the fragment, e.g. `/post/?page=2#details`.
|
|
65
|
+
if ( 1 < $page ) {
|
|
66
|
+
$permalink = add_query_arg( 'page', $page, $permalink );
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return $permalink . '#' . $id;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Normalizes raw page break comments so the block processor can see them.
|
|
74
|
+
*
|
|
75
|
+
* Classic content can store page breaks as bare `<!--nextpage-->` markers, and
|
|
76
|
+
* the Page Break block also saves that marker as its inner content. Because
|
|
77
|
+
* `WP_Block_Processor` only advances through block comments, wrapping those
|
|
78
|
+
* markers as `core/nextpage` blocks lets the ToC count paginated post pages in
|
|
79
|
+
* the same pass that it scans headings.
|
|
80
|
+
*
|
|
81
|
+
* @param string $content Serialized block content.
|
|
82
|
+
*
|
|
83
|
+
* @return string Content with page breaks wrapped as nextpage blocks.
|
|
84
|
+
*/
|
|
85
|
+
function block_core_table_of_contents_normalize_nextpage_blocks( $content ) {
|
|
86
|
+
// Collapse already-wrapped nextpage blocks first so the replacement below
|
|
87
|
+
// never nests a page break inside another nextpage wrapper.
|
|
88
|
+
$content = preg_replace(
|
|
89
|
+
'/<!--\s+wp:(?:core\/)?nextpage\s+-->\s*<!--nextpage-->\s*<!--\s+\/wp:(?:core\/)?nextpage\s+-->/',
|
|
90
|
+
'<!--nextpage-->',
|
|
91
|
+
$content
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
return str_replace(
|
|
95
|
+
'<!--nextpage-->',
|
|
96
|
+
'<!-- wp:nextpage --><!--nextpage--><!-- /wp:nextpage -->',
|
|
97
|
+
$content
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Gets the heading data from a heading block.
|
|
103
|
+
*
|
|
104
|
+
* @param array $block Parsed heading block.
|
|
105
|
+
* @param int $max_level Maximum heading level to include.
|
|
106
|
+
* @param array $context Heading resolution context.
|
|
107
|
+
*
|
|
108
|
+
* @return array|null Heading data, or null when the heading should be skipped.
|
|
109
|
+
*/
|
|
110
|
+
function block_core_table_of_contents_get_heading_from_block( $block, $max_level, $context = array() ) {
|
|
111
|
+
if ( ! is_array( $block ) ) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
$level = isset( $block['attrs']['level'] )
|
|
116
|
+
? (int) $block['attrs']['level']
|
|
117
|
+
: BLOCK_CORE_TABLE_OF_CONTENTS_DEFAULT_HEADING_LEVEL;
|
|
118
|
+
|
|
119
|
+
if ( $max_level && $level > $max_level ) {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
$rendered_heading = render_block( $block );
|
|
124
|
+
$processor = new WP_HTML_Tag_Processor( $rendered_heading );
|
|
125
|
+
$heading_tags = array( 'H1', 'H2', 'H3', 'H4', 'H5', 'H6' );
|
|
126
|
+
$id = '';
|
|
127
|
+
|
|
128
|
+
while ( $processor->next_tag() ) {
|
|
129
|
+
if ( in_array( $processor->get_tag(), $heading_tags, true ) ) {
|
|
130
|
+
$id = $processor->get_attribute( 'id' );
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if ( ! is_string( $id ) ) {
|
|
136
|
+
$id = '';
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
$content = preg_replace( '/<br\s*\/?>/i', ' ', $rendered_heading );
|
|
140
|
+
// Decode entities from rendered heading HTML before the ToC escapes them
|
|
141
|
+
// once. Use html_entity_decode() because wp_specialchars_decode() only
|
|
142
|
+
// handles special HTML characters, while headings can contain other named
|
|
143
|
+
// entities.
|
|
144
|
+
$content = html_entity_decode(
|
|
145
|
+
trim( wp_strip_all_tags( $content ) ),
|
|
146
|
+
ENT_QUOTES,
|
|
147
|
+
get_option( 'blog_charset' )
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
if ( '' === $content ) {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return array(
|
|
155
|
+
'content' => $content,
|
|
156
|
+
'level' => $level,
|
|
157
|
+
'link' => block_core_table_of_contents_get_heading_link( $id, $context ),
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Normalizes heading resolution context.
|
|
163
|
+
*
|
|
164
|
+
* The context is the shared state used while walking the current post content.
|
|
165
|
+
* It tracks whether the post is paginated, which page is being scanned, which
|
|
166
|
+
* page the rendered ToC should include, and which permalink should be used for
|
|
167
|
+
* page-aware heading links. Callers can pass partial context, so this helper
|
|
168
|
+
* fills defaults and normalizes booleans and page numbers before scanning.
|
|
169
|
+
*
|
|
170
|
+
* @param string $content Serialized block content.
|
|
171
|
+
* @param array $context Heading resolution context.
|
|
172
|
+
*
|
|
173
|
+
* @return array Normalized heading resolution context.
|
|
174
|
+
*/
|
|
175
|
+
function block_core_table_of_contents_normalize_heading_context( $content, $context = array() ) {
|
|
176
|
+
$context = wp_parse_args(
|
|
177
|
+
$context,
|
|
178
|
+
array(
|
|
179
|
+
'current_page' => 1,
|
|
180
|
+
'is_paginated' => str_contains( $content, '<!--nextpage-->' ),
|
|
181
|
+
'only_include_current_page' => false,
|
|
182
|
+
'permalink' => '',
|
|
183
|
+
'target_page' => 1,
|
|
184
|
+
)
|
|
185
|
+
);
|
|
186
|
+
|
|
187
|
+
return array(
|
|
188
|
+
'current_page' => max( 1, (int) $context['current_page'] ),
|
|
189
|
+
'is_paginated' => ! empty( $context['is_paginated'] ),
|
|
190
|
+
'only_include_current_page' => ! empty( $context['only_include_current_page'] ),
|
|
191
|
+
'permalink' => $context['permalink'],
|
|
192
|
+
'target_page' => max( 1, (int) $context['target_page'] ),
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Collects heading data from block content.
|
|
198
|
+
*
|
|
199
|
+
* @param string $content Block content to scan.
|
|
200
|
+
* @param int $max_level Maximum heading level to include.
|
|
201
|
+
* @param array $context Heading resolution context.
|
|
202
|
+
*
|
|
203
|
+
* @return array Heading data.
|
|
204
|
+
*/
|
|
205
|
+
function block_core_table_of_contents_get_headings_from_content( $content, $max_level = 0, $context = array() ) {
|
|
206
|
+
if ( ! class_exists( 'WP_Block_Processor' ) || '' === trim( $content ) ) {
|
|
207
|
+
return array();
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
$content = block_core_table_of_contents_normalize_nextpage_blocks( $content );
|
|
211
|
+
$context = block_core_table_of_contents_normalize_heading_context( $content, $context );
|
|
212
|
+
$headings = array();
|
|
213
|
+
$processor = new WP_Block_Processor( $content );
|
|
214
|
+
|
|
215
|
+
while ( $processor->next_block() ) {
|
|
216
|
+
$block_type = $processor->get_block_type();
|
|
217
|
+
|
|
218
|
+
if ( 'core/nextpage' === $block_type ) {
|
|
219
|
+
++$context['current_page'];
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// `only_include_current_page` is the normalized form of the block's
|
|
224
|
+
// `onlyIncludeCurrentPage` attribute. When false, headings from every
|
|
225
|
+
// paginated page are included.
|
|
226
|
+
$include_current_page = (
|
|
227
|
+
empty( $context['only_include_current_page'] ) ||
|
|
228
|
+
$context['current_page'] === $context['target_page']
|
|
229
|
+
);
|
|
230
|
+
|
|
231
|
+
if ( 'core/heading' !== $block_type || ! $include_current_page ) {
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
$block = $processor->extract_full_block_and_advance();
|
|
236
|
+
$heading = block_core_table_of_contents_get_heading_from_block( $block, $max_level, $context );
|
|
237
|
+
|
|
238
|
+
if ( $heading ) {
|
|
239
|
+
$headings[] = $heading;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
return $headings;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Gets the current page number for paginated post content.
|
|
248
|
+
*
|
|
249
|
+
* @global int $page Current page number of the content.
|
|
250
|
+
*
|
|
251
|
+
* @return int Current page number.
|
|
252
|
+
*/
|
|
253
|
+
function block_core_table_of_contents_get_current_page_number() {
|
|
254
|
+
global $page;
|
|
255
|
+
|
|
256
|
+
$current_page = (int) get_query_var( 'page' );
|
|
257
|
+
if ( ! $current_page && isset( $page ) ) {
|
|
258
|
+
$current_page = (int) $page;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
return max( 1, $current_page );
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Converts a flat list of headings to a nested list.
|
|
266
|
+
*
|
|
267
|
+
* @param array $headings Flat heading data.
|
|
268
|
+
*
|
|
269
|
+
* @return array Nested heading data.
|
|
270
|
+
*/
|
|
271
|
+
function block_core_table_of_contents_linear_to_nested_heading_list( $headings ) {
|
|
272
|
+
$nested_headings = array();
|
|
273
|
+
|
|
274
|
+
foreach ( $headings as $index => $heading ) {
|
|
275
|
+
if (
|
|
276
|
+
'' === $heading['content'] ||
|
|
277
|
+
$heading['level'] !== $headings[0]['level']
|
|
278
|
+
) {
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
if (
|
|
283
|
+
isset( $headings[ $index + 1 ] ) &&
|
|
284
|
+
$headings[ $index + 1 ]['level'] > $heading['level']
|
|
285
|
+
) {
|
|
286
|
+
// The following headings are children until another heading at
|
|
287
|
+
// the current level appears. Slice that child run for recursion
|
|
288
|
+
// so nested nodes are not duplicated as top-level siblings.
|
|
289
|
+
$end_of_slice = count( $headings );
|
|
290
|
+
for ( $i = $index + 1; $i < count( $headings ); $i++ ) {
|
|
291
|
+
if ( $headings[ $i ]['level'] === $heading['level'] ) {
|
|
292
|
+
$end_of_slice = $i;
|
|
293
|
+
break;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// The child slice starts after the current heading, so each
|
|
298
|
+
// recursive call receives fewer headings than its caller.
|
|
299
|
+
$child_headings = array_slice(
|
|
300
|
+
$headings,
|
|
301
|
+
$index + 1,
|
|
302
|
+
$end_of_slice - $index - 1
|
|
303
|
+
);
|
|
304
|
+
$nested_headings[] = array(
|
|
305
|
+
'heading' => $heading,
|
|
306
|
+
'children' => block_core_table_of_contents_linear_to_nested_heading_list( $child_headings ),
|
|
307
|
+
);
|
|
308
|
+
} else {
|
|
309
|
+
$nested_headings[] = array(
|
|
310
|
+
'heading' => $heading,
|
|
311
|
+
'children' => null,
|
|
312
|
+
);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
return $nested_headings;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
* Builds the table of contents list items.
|
|
321
|
+
*
|
|
322
|
+
* @param array $nested_headings Nested heading data.
|
|
323
|
+
* @param string $list_tag List tag name.
|
|
324
|
+
*
|
|
325
|
+
* @return string List item markup.
|
|
326
|
+
*/
|
|
327
|
+
function block_core_table_of_contents_build_list_items( $nested_headings, $list_tag ) {
|
|
328
|
+
$list = '';
|
|
329
|
+
|
|
330
|
+
foreach ( $nested_headings as $node ) {
|
|
331
|
+
$heading = $node['heading'];
|
|
332
|
+
$content = esc_html( $heading['content'] );
|
|
333
|
+
|
|
334
|
+
if ( '' !== $heading['link'] ) {
|
|
335
|
+
$entry = sprintf(
|
|
336
|
+
'<a class="wp-block-table-of-contents__entry" href="%1$s">%2$s</a>',
|
|
337
|
+
esc_url( $heading['link'] ),
|
|
338
|
+
$content
|
|
339
|
+
);
|
|
340
|
+
} else {
|
|
341
|
+
$entry = sprintf(
|
|
342
|
+
'<span class="wp-block-table-of-contents__entry">%s</span>',
|
|
343
|
+
$content
|
|
344
|
+
);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
$list .= '<li>' . $entry;
|
|
348
|
+
|
|
349
|
+
if ( ! empty( $node['children'] ) ) {
|
|
350
|
+
$list .= sprintf(
|
|
351
|
+
'<%1$s>%2$s</%1$s>',
|
|
352
|
+
$list_tag,
|
|
353
|
+
block_core_table_of_contents_build_list_items( $node['children'], $list_tag )
|
|
354
|
+
);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
$list .= '</li>';
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
return $list;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* Renders the table of contents block from current post headings.
|
|
365
|
+
*
|
|
366
|
+
* @param array $attributes Attributes of the block being rendered.
|
|
367
|
+
* @param string $content Content of the block being rendered.
|
|
368
|
+
*
|
|
369
|
+
* @return string The content of the block being rendered.
|
|
370
|
+
*/
|
|
371
|
+
function block_core_table_of_contents_render( $attributes, $content ) {
|
|
372
|
+
global $wp_current_filter;
|
|
373
|
+
|
|
374
|
+
if ( ! is_array( $wp_current_filter ) || ! in_array( 'the_content', $wp_current_filter, true ) ) {
|
|
375
|
+
return block_core_table_of_contents_add_aria_label( $attributes, $content );
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
$post = get_post();
|
|
379
|
+
if ( ! $post ) {
|
|
380
|
+
return '';
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
$max_level = isset( $attributes['maxLevel'] ) ? (int) $attributes['maxLevel'] : 0;
|
|
384
|
+
// Heading context records the current pagination state so collection can
|
|
385
|
+
// skip headings outside the rendered page and build page-aware links.
|
|
386
|
+
$context = block_core_table_of_contents_normalize_heading_context(
|
|
387
|
+
$post->post_content,
|
|
388
|
+
array(
|
|
389
|
+
'only_include_current_page' => ! empty( $attributes['onlyIncludeCurrentPage'] ),
|
|
390
|
+
'permalink' => get_permalink( $post ),
|
|
391
|
+
'target_page' => block_core_table_of_contents_get_current_page_number(),
|
|
392
|
+
)
|
|
393
|
+
);
|
|
394
|
+
$headings = block_core_table_of_contents_get_headings_from_content( $post->post_content, $max_level, $context );
|
|
395
|
+
|
|
396
|
+
if ( empty( $headings ) ) {
|
|
397
|
+
return '';
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
$ordered = array_key_exists( 'ordered', $attributes )
|
|
401
|
+
? (bool) $attributes['ordered']
|
|
402
|
+
: true;
|
|
403
|
+
$list_tag = $ordered ? 'ol' : 'ul';
|
|
404
|
+
$wrapper_attributes = get_block_wrapper_attributes();
|
|
405
|
+
$content = sprintf(
|
|
406
|
+
'<nav %1$s><%2$s>%3$s</%2$s></nav>',
|
|
407
|
+
$wrapper_attributes,
|
|
408
|
+
$list_tag,
|
|
409
|
+
block_core_table_of_contents_build_list_items(
|
|
410
|
+
block_core_table_of_contents_linear_to_nested_heading_list( $headings ),
|
|
411
|
+
$list_tag
|
|
412
|
+
)
|
|
413
|
+
);
|
|
414
|
+
|
|
415
|
+
return block_core_table_of_contents_add_aria_label( $attributes, $content );
|
|
416
|
+
}
|
|
417
|
+
|
|
33
418
|
/**
|
|
34
419
|
* Registers the `core/table-of-contents` block on the server.
|
|
35
420
|
*/
|
package/src/tabs/README.md
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# Tabs
|
|
2
2
|
|
|
3
3
|
<!-- START TOKEN(Autogenerated block API docs) -->
|
|
4
|
-
<div class="callout callout-warning">This block is <strong>experimental</strong> and may change or be removed without notice.</div>
|
|
5
|
-
|
|
6
4
|
Display content in a tabbed interface to help users navigate detailed content with ease.
|
|
7
5
|
|
|
8
6
|
- **Name:** `core/tabs`
|
|
@@ -54,18 +52,29 @@ _Defined via the [`usesContext` and `providesContext`](https://developer.wordpre
|
|
|
54
52
|
- `core/tabs-list`
|
|
55
53
|
- `core/tabs-id`
|
|
56
54
|
|
|
57
|
-
**Provides context:**
|
|
58
|
-
|
|
59
|
-
- `core/tabs-activeTabIndex` → attribute `activeTabIndex`
|
|
60
|
-
- `core/tabs-editorActiveTabIndex` → attribute `editorActiveTabIndex`
|
|
61
|
-
|
|
62
55
|
## Block Markup
|
|
63
56
|
|
|
64
57
|
This is a [**hybrid block**](https://developer.wordpress.org/block-editor/getting-started/fundamentals/static-dynamic-rendering/). It saves static markup that the server may enhance during rendering.
|
|
65
58
|
|
|
66
59
|
```html
|
|
67
|
-
<!-- wp:tabs
|
|
68
|
-
|
|
60
|
+
<!-- wp:tabs -->
|
|
61
|
+
<div class="wp-block-tabs"><!-- wp:tab-list -->
|
|
62
|
+
<div role="tablist" class="wp-block-tab-list"><button type="button" role="tab">Tab 1</button><button type="button" role="tab">Tab 2</button></div>
|
|
63
|
+
<!-- /wp:tab-list -->
|
|
64
|
+
|
|
65
|
+
<!-- wp:tab-panels -->
|
|
66
|
+
<div class="wp-block-tab-panels"><!-- wp:tab-panel {"label":"Tab 1"} -->
|
|
67
|
+
<section role="tabpanel" tabindex="0" class="wp-block-tab-panel"><!-- wp:paragraph -->
|
|
68
|
+
<p>Panel 1</p>
|
|
69
|
+
<!-- /wp:paragraph --></section>
|
|
70
|
+
<!-- /wp:tab-panel -->
|
|
71
|
+
|
|
72
|
+
<!-- wp:tab-panel {"label":"Tab 2"} -->
|
|
73
|
+
<section role="tabpanel" tabindex="0" class="wp-block-tab-panel"><!-- wp:paragraph -->
|
|
74
|
+
<p>Panel 2</p>
|
|
75
|
+
<!-- /wp:paragraph --></section>
|
|
76
|
+
<!-- /wp:tab-panel --></div>
|
|
77
|
+
<!-- /wp:tab-panels --></div>
|
|
69
78
|
<!-- /wp:tabs -->
|
|
70
79
|
```
|
|
71
80
|
|
package/src/tabs/block.json
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://schemas.wp.org/trunk/block.json",
|
|
3
|
-
"__experimental": true,
|
|
4
3
|
"apiVersion": 3,
|
|
5
4
|
"name": "core/tabs",
|
|
6
5
|
"title": "Tabs",
|
|
@@ -44,10 +43,6 @@
|
|
|
44
43
|
"__experimentalFontFamily": true
|
|
45
44
|
}
|
|
46
45
|
},
|
|
47
|
-
"providesContext": {
|
|
48
|
-
"core/tabs-activeTabIndex": "activeTabIndex",
|
|
49
|
-
"core/tabs-editorActiveTabIndex": "editorActiveTabIndex"
|
|
50
|
-
},
|
|
51
46
|
"usesContext": [ "core/tabs-list", "core/tabs-id" ],
|
|
52
47
|
"style": "wp-block-tabs",
|
|
53
48
|
"viewScriptModule": "@wordpress/block-library/tabs/view"
|
package/src/tabs/edit.js
CHANGED
|
@@ -1,14 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WordPress dependencies
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
useBlockProps,
|
|
6
|
-
useInnerBlocksProps,
|
|
7
|
-
BlockContextProvider,
|
|
8
|
-
store as blockEditorStore,
|
|
9
|
-
} from '@wordpress/block-editor';
|
|
10
|
-
import { useSelect } from '@wordpress/data';
|
|
11
|
-
import { useMemo } from '@wordpress/element';
|
|
4
|
+
import { useBlockProps, useInnerBlocksProps } from '@wordpress/block-editor';
|
|
12
5
|
|
|
13
6
|
/**
|
|
14
7
|
* Internal dependencies
|
|
@@ -16,8 +9,6 @@ import { useMemo } from '@wordpress/element';
|
|
|
16
9
|
import TabToolbarControls from './tab-toolbar-controls';
|
|
17
10
|
import useTabListItemsSync from './use-tab-list-items-sync';
|
|
18
11
|
|
|
19
|
-
const EMPTY_ARRAY = [];
|
|
20
|
-
|
|
21
12
|
/**
|
|
22
13
|
* Only the two structural child blocks are specified here — without inner
|
|
23
14
|
* block entries for core/tab-list or core/tab-panels.
|
|
@@ -32,54 +23,8 @@ const EMPTY_ARRAY = [];
|
|
|
32
23
|
*/
|
|
33
24
|
const TABS_TEMPLATE = [ [ 'core/tab-list' ], [ 'core/tab-panels' ] ];
|
|
34
25
|
|
|
35
|
-
function Edit( { clientId
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const { tabPanels, tabListClientId } = useSelect(
|
|
39
|
-
( select ) => {
|
|
40
|
-
const { getBlocks } = select( blockEditorStore );
|
|
41
|
-
const innerBlocks = getBlocks( clientId );
|
|
42
|
-
|
|
43
|
-
const tabPanelsBlock = innerBlocks.find(
|
|
44
|
-
( block ) => block.name === 'core/tab-panels'
|
|
45
|
-
);
|
|
46
|
-
const tabList = innerBlocks.find(
|
|
47
|
-
( block ) => block.name === 'core/tab-list'
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
return {
|
|
51
|
-
tabPanels: tabPanelsBlock?.innerBlocks ?? EMPTY_ARRAY,
|
|
52
|
-
tabListClientId: tabList?.clientId ?? null,
|
|
53
|
-
};
|
|
54
|
-
},
|
|
55
|
-
[ clientId ]
|
|
56
|
-
);
|
|
57
|
-
|
|
58
|
-
useTabListItemsSync( { tabPanels, tabListClientId } );
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Memoize context value to prevent unnecessary re-renders.
|
|
62
|
-
*/
|
|
63
|
-
const contextValue = useMemo( () => {
|
|
64
|
-
/**
|
|
65
|
-
* Compute tabs list from innerblocks to provide via context.
|
|
66
|
-
* This traverses the tab-panels block to find all tab-panel blocks
|
|
67
|
-
* and extracts their label and anchor for the tab-list to consume.
|
|
68
|
-
*/
|
|
69
|
-
const tabList = tabPanels.map( ( tab, index ) => ( {
|
|
70
|
-
id: tab.attributes.anchor || `tab-${ index }`,
|
|
71
|
-
label: tab.attributes.label || '',
|
|
72
|
-
clientId: tab.clientId,
|
|
73
|
-
index,
|
|
74
|
-
} ) );
|
|
75
|
-
|
|
76
|
-
return {
|
|
77
|
-
'core/tabs-list': tabList,
|
|
78
|
-
'core/tabs-id': anchor,
|
|
79
|
-
'core/tabs-activeTabIndex': activeTabIndex,
|
|
80
|
-
'core/tabs-editorActiveTabIndex': editorActiveTabIndex,
|
|
81
|
-
};
|
|
82
|
-
}, [ tabPanels, anchor, activeTabIndex, editorActiveTabIndex ] );
|
|
26
|
+
function Edit( { clientId } ) {
|
|
27
|
+
useTabListItemsSync( clientId );
|
|
83
28
|
|
|
84
29
|
const blockProps = useBlockProps();
|
|
85
30
|
|
|
@@ -91,12 +36,10 @@ function Edit( { clientId, attributes } ) {
|
|
|
91
36
|
} );
|
|
92
37
|
|
|
93
38
|
return (
|
|
94
|
-
<
|
|
95
|
-
<
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
</div>
|
|
99
|
-
</BlockContextProvider>
|
|
39
|
+
<div { ...innerBlockProps }>
|
|
40
|
+
<TabToolbarControls tabsClientId={ clientId } />
|
|
41
|
+
{ innerBlockProps.children }
|
|
42
|
+
</div>
|
|
100
43
|
);
|
|
101
44
|
}
|
|
102
45
|
|
|
@@ -7,20 +7,21 @@ import { store as blockEditorStore } from '@wordpress/block-editor';
|
|
|
7
7
|
import { useDispatch, useRegistry } from '@wordpress/data';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
* Provides callbacks to insert and
|
|
10
|
+
* Provides callbacks to insert, remove and move tabs for a tabs block.
|
|
11
11
|
*
|
|
12
12
|
* The hook intentionally avoids subscribing to the store: all data is derived
|
|
13
13
|
* lazily inside the callbacks via `registry.select`, so consumers don't
|
|
14
14
|
* re-render when the tab structure changes.
|
|
15
15
|
*
|
|
16
16
|
* @param {string|null} tabsClientId The client ID of the parent tabs block.
|
|
17
|
-
* @return {{ insertTab: Function, removeTab: Function }} Tab action callbacks.
|
|
17
|
+
* @return {{ insertTab: Function, removeTab: Function, moveTab: Function }} Tab action callbacks.
|
|
18
18
|
*/
|
|
19
19
|
export default function useTabActions( tabsClientId ) {
|
|
20
20
|
const registry = useRegistry();
|
|
21
21
|
const {
|
|
22
22
|
insertBlock,
|
|
23
23
|
removeBlock,
|
|
24
|
+
moveBlocksToPosition,
|
|
24
25
|
updateBlockAttributes,
|
|
25
26
|
__unstableMarkNextChangeAsNotPersistent,
|
|
26
27
|
} = useDispatch( blockEditorStore );
|
|
@@ -98,5 +99,33 @@ export default function useTabActions( tabsClientId ) {
|
|
|
98
99
|
removeBlock( target.clientId, false );
|
|
99
100
|
};
|
|
100
101
|
|
|
101
|
-
|
|
102
|
+
// Move the active tab one position left or right by reordering the
|
|
103
|
+
// underlying tab-panel. The tab-list labels follow their panel
|
|
104
|
+
// automatically via useTabListItemsSync.
|
|
105
|
+
const moveTab = ( direction ) => {
|
|
106
|
+
const { tabPanelsClientId, tabPanelBlocks, activeIndex } =
|
|
107
|
+
getTabsState();
|
|
108
|
+
if ( ! tabPanelsClientId ) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const toIndex = activeIndex + direction;
|
|
113
|
+
const target = tabPanelBlocks[ activeIndex ];
|
|
114
|
+
if ( ! target || toIndex < 0 || toIndex >= tabPanelBlocks.length ) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
__unstableMarkNextChangeAsNotPersistent();
|
|
119
|
+
updateBlockAttributes( tabsClientId, {
|
|
120
|
+
editorActiveTabIndex: toIndex,
|
|
121
|
+
} );
|
|
122
|
+
moveBlocksToPosition(
|
|
123
|
+
[ target.clientId ],
|
|
124
|
+
tabPanelsClientId,
|
|
125
|
+
tabPanelsClientId,
|
|
126
|
+
toIndex
|
|
127
|
+
);
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
return { insertTab, removeTab, moveTab };
|
|
102
131
|
}
|
|
@@ -5,6 +5,8 @@ import { store as blockEditorStore } from '@wordpress/block-editor';
|
|
|
5
5
|
import { useDispatch, useSelect } from '@wordpress/data';
|
|
6
6
|
import { useEffect } from '@wordpress/element';
|
|
7
7
|
|
|
8
|
+
const EMPTY_ARRAY = [];
|
|
9
|
+
|
|
8
10
|
/**
|
|
9
11
|
* Keep the tab-list block's `tabs` attribute in sync with the tab-panel blocks.
|
|
10
12
|
*
|
|
@@ -12,11 +14,29 @@ import { useEffect } from '@wordpress/element';
|
|
|
12
14
|
* label edit), this hook updates the `tabs` attribute on the core/tab-list
|
|
13
15
|
* block so that save.js can render the correct buttons.
|
|
14
16
|
*
|
|
15
|
-
* @param {
|
|
16
|
-
* @param {Array} props.tabPanels Raw core/tab-panel block objects.
|
|
17
|
-
* @param {string|null} props.tabListClientId Client ID of the core/tab-list block.
|
|
17
|
+
* @param {string} tabsClientId Client ID of the core/tabs block.
|
|
18
18
|
*/
|
|
19
|
-
export default function useTabListItemsSync(
|
|
19
|
+
export default function useTabListItemsSync( tabsClientId ) {
|
|
20
|
+
const { tabPanels, tabListClientId } = useSelect(
|
|
21
|
+
( select ) => {
|
|
22
|
+
const { getBlocks } = select( blockEditorStore );
|
|
23
|
+
const innerBlocks = getBlocks( tabsClientId );
|
|
24
|
+
|
|
25
|
+
const tabPanelsBlock = innerBlocks.find(
|
|
26
|
+
( block ) => block.name === 'core/tab-panels'
|
|
27
|
+
);
|
|
28
|
+
const tabList = innerBlocks.find(
|
|
29
|
+
( block ) => block.name === 'core/tab-list'
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
return {
|
|
33
|
+
tabPanels: tabPanelsBlock?.innerBlocks ?? EMPTY_ARRAY,
|
|
34
|
+
tabListClientId: tabList?.clientId ?? null,
|
|
35
|
+
};
|
|
36
|
+
},
|
|
37
|
+
[ tabsClientId ]
|
|
38
|
+
);
|
|
39
|
+
|
|
20
40
|
const { updateBlockAttributes, __unstableMarkNextChangeAsNotPersistent } =
|
|
21
41
|
useDispatch( blockEditorStore );
|
|
22
42
|
const { getBlockAttributes } = useSelect( blockEditorStore );
|
package/src/tag-cloud/index.php
CHANGED
|
@@ -15,8 +15,9 @@
|
|
|
15
15
|
* @return string Returns the tag cloud for selected taxonomy.
|
|
16
16
|
*/
|
|
17
17
|
function render_block_core_tag_cloud( $attributes ) {
|
|
18
|
-
$
|
|
19
|
-
$
|
|
18
|
+
$smallest_font_size_attr = $attributes['smallestFontSize'] ?? null;
|
|
19
|
+
$smallest_font_size = is_string( $smallest_font_size_attr ) ? $smallest_font_size_attr : '';
|
|
20
|
+
$unit = preg_match( '/^[0-9.]+(?P<unit>[a-z%]+)$/i', $smallest_font_size, $m ) ? $m['unit'] : 'pt';
|
|
20
21
|
|
|
21
22
|
$args = array(
|
|
22
23
|
'echo' => false,
|