@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
|
@@ -14,6 +14,7 @@ import WaveformPlayerLib from '@arraypress/waveform-player';
|
|
|
14
14
|
* Note: DEFAULT_WAVEFORM_HEIGHT should match $waveform-player-height in style.scss.
|
|
15
15
|
*/
|
|
16
16
|
const DEFAULT_WAVEFORM_HEIGHT = 100;
|
|
17
|
+
const DEFAULT_SEEK_LABEL = 'Seek';
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
20
|
* Get computed style for an element, using ownerDocument for iframe compatibility.
|
|
@@ -25,33 +26,238 @@ function getComputedStyle( element ) {
|
|
|
25
26
|
return element.ownerDocument.defaultView.getComputedStyle( element );
|
|
26
27
|
}
|
|
27
28
|
|
|
29
|
+
function getTopLevelGradientParts( gradientValue ) {
|
|
30
|
+
const match = gradientValue?.trim().match( /^[\w-]+-gradient\((.*)\)$/i );
|
|
31
|
+
if ( ! match ) {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const parts = [];
|
|
36
|
+
let depth = 0;
|
|
37
|
+
let current = '';
|
|
38
|
+
|
|
39
|
+
for ( const character of match[ 1 ] ) {
|
|
40
|
+
if ( character === '(' ) {
|
|
41
|
+
++depth;
|
|
42
|
+
} else if ( character === ')' ) {
|
|
43
|
+
--depth;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if ( character === ',' && depth === 0 ) {
|
|
47
|
+
parts.push( current.trim() );
|
|
48
|
+
current = '';
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
current += character;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if ( current.trim() ) {
|
|
56
|
+
parts.push( current.trim() );
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return parts;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function getLeadingColorFunction( value ) {
|
|
63
|
+
const match = value.match( /^([\w-]+)\(/ );
|
|
64
|
+
if ( ! match ) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const supportedFunctions = [
|
|
69
|
+
'color',
|
|
70
|
+
'color-mix',
|
|
71
|
+
'hsl',
|
|
72
|
+
'hsla',
|
|
73
|
+
'hwb',
|
|
74
|
+
'lab',
|
|
75
|
+
'lch',
|
|
76
|
+
'oklab',
|
|
77
|
+
'oklch',
|
|
78
|
+
'rgb',
|
|
79
|
+
'rgba',
|
|
80
|
+
'var',
|
|
81
|
+
];
|
|
82
|
+
if ( ! supportedFunctions.includes( match[ 1 ].toLowerCase() ) ) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
let depth = 0;
|
|
87
|
+
let foundOpeningParenthesis = false;
|
|
88
|
+
for ( let index = 0; index < value.length; index++ ) {
|
|
89
|
+
const character = value[ index ];
|
|
90
|
+
if ( character === '(' ) {
|
|
91
|
+
foundOpeningParenthesis = true;
|
|
92
|
+
++depth;
|
|
93
|
+
} else if ( character === ')' ) {
|
|
94
|
+
--depth;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if ( foundOpeningParenthesis && depth === 0 ) {
|
|
98
|
+
return value.slice( 0, index + 1 );
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function getColorStopValue( gradientPart ) {
|
|
104
|
+
const colorFunction = getLeadingColorFunction( gradientPart );
|
|
105
|
+
if ( colorFunction ) {
|
|
106
|
+
return colorFunction;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const [ possibleColor ] = gradientPart.split( /\s+/ );
|
|
110
|
+
if ( colord( possibleColor ).isValid() ) {
|
|
111
|
+
return possibleColor;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function getWaveformGradientDirection( gradientValue ) {
|
|
116
|
+
const parts = getTopLevelGradientParts( gradientValue );
|
|
117
|
+
const direction = parts[ 0 ];
|
|
118
|
+
const angleMatch = direction?.match( /^(-?\d+(?:\.\d+)?)deg$/i );
|
|
119
|
+
if ( angleMatch ) {
|
|
120
|
+
const angle = ( ( Number( angleMatch[ 1 ] ) % 360 ) + 360 ) % 360;
|
|
121
|
+
if ( angle === 90 || angle === 270 ) {
|
|
122
|
+
return 'horizontal';
|
|
123
|
+
}
|
|
124
|
+
if ( angle === 0 || angle === 180 ) {
|
|
125
|
+
return 'vertical';
|
|
126
|
+
}
|
|
127
|
+
return 'diagonal';
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if ( ! direction?.startsWith( 'to ' ) ) {
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const sideOrCorner = direction.toLowerCase().replace( /^to\s+/, '' );
|
|
135
|
+
const hasHorizontalSide =
|
|
136
|
+
sideOrCorner.includes( 'left' ) || sideOrCorner.includes( 'right' );
|
|
137
|
+
const hasVerticalSide =
|
|
138
|
+
sideOrCorner.includes( 'top' ) || sideOrCorner.includes( 'bottom' );
|
|
139
|
+
|
|
140
|
+
if ( hasHorizontalSide && hasVerticalSide ) {
|
|
141
|
+
return 'diagonal';
|
|
142
|
+
}
|
|
143
|
+
if ( hasHorizontalSide ) {
|
|
144
|
+
return 'horizontal';
|
|
145
|
+
}
|
|
146
|
+
if ( hasVerticalSide ) {
|
|
147
|
+
return 'vertical';
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function resolveColorValue( element, colorValue ) {
|
|
152
|
+
if ( ! colorValue || colord( colorValue ).isValid() ) {
|
|
153
|
+
return colorValue;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const colorResolver = element.ownerDocument.createElement( 'span' );
|
|
157
|
+
colorResolver.style.color = colorValue;
|
|
158
|
+
if ( ! colorResolver.style.color ) {
|
|
159
|
+
return colorValue;
|
|
160
|
+
}
|
|
161
|
+
element.appendChild( colorResolver );
|
|
162
|
+
|
|
163
|
+
const resolvedColor = getComputedStyle( colorResolver ).color;
|
|
164
|
+
colorResolver.remove();
|
|
165
|
+
|
|
166
|
+
return resolvedColor && colord( resolvedColor ).isValid()
|
|
167
|
+
? resolvedColor
|
|
168
|
+
: colorValue;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function getResolvedGradientStops( element, gradientValue ) {
|
|
172
|
+
const stops = getWaveformGradientStops( gradientValue )
|
|
173
|
+
?.map( ( colorValue ) => resolveColorValue( element, colorValue ) )
|
|
174
|
+
.filter( ( colorValue ) => colord( colorValue ).isValid() );
|
|
175
|
+
|
|
176
|
+
return stops?.length > 1 ? stops : undefined;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function applyAlpha( colorValue, alpha ) {
|
|
180
|
+
if ( Array.isArray( colorValue ) ) {
|
|
181
|
+
return colorValue.map( ( color ) =>
|
|
182
|
+
colord( color ).alpha( alpha ).toRgbString()
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
return colord( colorValue ).alpha( alpha ).toRgbString();
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function getRepresentativeColor( colorValue ) {
|
|
189
|
+
if ( Array.isArray( colorValue ) ) {
|
|
190
|
+
return colorValue[ colorValue.length - 1 ];
|
|
191
|
+
}
|
|
192
|
+
return colorValue;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export function getWaveformGradientStops( gradientValue ) {
|
|
196
|
+
const stops = getTopLevelGradientParts( gradientValue )
|
|
197
|
+
.map( getColorStopValue )
|
|
198
|
+
.filter( Boolean );
|
|
199
|
+
|
|
200
|
+
return stops.length > 1 ? stops : undefined;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
function serializeColorValue( colorValue ) {
|
|
204
|
+
return Array.isArray( colorValue )
|
|
205
|
+
? JSON.stringify( colorValue )
|
|
206
|
+
: colorValue;
|
|
207
|
+
}
|
|
208
|
+
|
|
28
209
|
/**
|
|
29
210
|
* Get all colors needed for the waveform player based on the element's styles.
|
|
30
211
|
*
|
|
31
|
-
* @param {Element} element
|
|
212
|
+
* @param {Element} element - The element to derive colors from.
|
|
213
|
+
* @param {string} waveformColorValue - The base waveform color value to use.
|
|
214
|
+
* @param {string} textColorValue - The text color value to use.
|
|
215
|
+
* @param {string} waveformGradientValue - The waveform gradient value to use.
|
|
32
216
|
* @return {Object} Object containing textColor, waveformColor, progressColor.
|
|
33
217
|
*/
|
|
34
|
-
export function getWaveformColors(
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
218
|
+
export function getWaveformColors(
|
|
219
|
+
element,
|
|
220
|
+
waveformColorValue,
|
|
221
|
+
textColorValue,
|
|
222
|
+
waveformGradientValue
|
|
223
|
+
) {
|
|
224
|
+
const textColor = textColorValue || getComputedStyle( element ).color;
|
|
225
|
+
const waveformGradientStops = getResolvedGradientStops(
|
|
226
|
+
element,
|
|
227
|
+
waveformGradientValue
|
|
228
|
+
);
|
|
229
|
+
const waveformBaseColor =
|
|
230
|
+
waveformGradientStops || waveformColorValue || textColor;
|
|
231
|
+
const waveformColor = applyAlpha( waveformBaseColor, 0.3 );
|
|
232
|
+
const progressColor = applyAlpha( waveformBaseColor, 0.6 );
|
|
233
|
+
const waveformGradient = waveformGradientStops
|
|
234
|
+
? getWaveformGradientDirection( waveformGradientValue )
|
|
235
|
+
: undefined;
|
|
38
236
|
|
|
39
|
-
return {
|
|
237
|
+
return {
|
|
238
|
+
textColor,
|
|
239
|
+
waveformColor,
|
|
240
|
+
progressColor,
|
|
241
|
+
...( waveformGradient && { waveformGradient } ),
|
|
242
|
+
};
|
|
40
243
|
}
|
|
41
244
|
|
|
42
245
|
/**
|
|
43
246
|
* Create a waveform container element with the specified attributes.
|
|
44
247
|
*
|
|
45
|
-
* @param {Object} options
|
|
46
|
-
* @param {string} options.url
|
|
47
|
-
* @param {string} options.title
|
|
48
|
-
* @param {string} options.artist
|
|
49
|
-
* @param {string} options.artwork
|
|
50
|
-
* @param {string} options.waveformColor
|
|
51
|
-
* @param {string} options.progressColor
|
|
52
|
-
* @param {string} options.
|
|
53
|
-
* @param {
|
|
54
|
-
* @param {string} options.
|
|
248
|
+
* @param {Object} options - The options for the container.
|
|
249
|
+
* @param {string} options.url - The audio URL.
|
|
250
|
+
* @param {string} options.title - The track title.
|
|
251
|
+
* @param {string} options.artist - The track artist.
|
|
252
|
+
* @param {string} options.artwork - The track image URL.
|
|
253
|
+
* @param {string} options.waveformColor - The waveform bar color.
|
|
254
|
+
* @param {string} options.progressColor - The progress indicator color.
|
|
255
|
+
* @param {string} options.waveformGradient - The waveform gradient direction.
|
|
256
|
+
* @param {string} options.buttonColor - The play button color.
|
|
257
|
+
* @param {string} options.seekLabel - Accessible label for the seek control.
|
|
258
|
+
* @param {string} options.seekValueText - Accessible value-text template for the seek control (e.g. '%1$s of %2$s').
|
|
259
|
+
* @param {number} options.height - The waveform height in pixels.
|
|
260
|
+
* @param {string} options.waveformStyle - The visualization style (bars, mirror, line, blocks, dots, seekbar).
|
|
55
261
|
* @return {Element} The configured container element.
|
|
56
262
|
*/
|
|
57
263
|
export function createWaveformContainer( {
|
|
@@ -61,7 +267,10 @@ export function createWaveformContainer( {
|
|
|
61
267
|
artwork,
|
|
62
268
|
waveformColor,
|
|
63
269
|
progressColor,
|
|
270
|
+
waveformGradient,
|
|
64
271
|
buttonColor,
|
|
272
|
+
seekLabel,
|
|
273
|
+
seekValueText,
|
|
65
274
|
height = DEFAULT_WAVEFORM_HEIGHT,
|
|
66
275
|
waveformStyle = 'bars',
|
|
67
276
|
} ) {
|
|
@@ -70,16 +279,35 @@ export function createWaveformContainer( {
|
|
|
70
279
|
container.setAttribute( 'data-url', url );
|
|
71
280
|
container.setAttribute( 'data-height', String( height ) );
|
|
72
281
|
container.setAttribute( 'data-waveform-style', waveformStyle );
|
|
73
|
-
container.setAttribute(
|
|
74
|
-
|
|
282
|
+
container.setAttribute(
|
|
283
|
+
'data-waveform-color',
|
|
284
|
+
serializeColorValue( waveformColor )
|
|
285
|
+
);
|
|
286
|
+
container.setAttribute(
|
|
287
|
+
'data-progress-color',
|
|
288
|
+
serializeColorValue( progressColor )
|
|
289
|
+
);
|
|
290
|
+
if ( waveformGradient ) {
|
|
291
|
+
container.setAttribute( 'data-waveform-gradient', waveformGradient );
|
|
292
|
+
}
|
|
75
293
|
container.setAttribute( 'data-button-color', buttonColor );
|
|
294
|
+
container.setAttribute(
|
|
295
|
+
'data-seek-label',
|
|
296
|
+
getSeekControlLabel( seekLabel )
|
|
297
|
+
);
|
|
298
|
+
// The library formats the current time and duration and interpolates them
|
|
299
|
+
// into this translated template for the seek slider's aria-valuetext.
|
|
300
|
+
if ( seekValueText ) {
|
|
301
|
+
container.setAttribute( 'data-seek-value-text', seekValueText );
|
|
302
|
+
}
|
|
76
303
|
container.setAttribute( 'data-text-color', buttonColor );
|
|
77
304
|
container.setAttribute( 'data-text-secondary-color', buttonColor );
|
|
305
|
+
|
|
78
306
|
if ( title ) {
|
|
79
307
|
container.setAttribute( 'data-title', title );
|
|
80
308
|
}
|
|
81
309
|
if ( artist ) {
|
|
82
|
-
container.setAttribute( 'data-
|
|
310
|
+
container.setAttribute( 'data-artist', artist );
|
|
83
311
|
}
|
|
84
312
|
if ( artwork ) {
|
|
85
313
|
container.setAttribute( 'data-artwork', artwork );
|
|
@@ -87,12 +315,78 @@ export function createWaveformContainer( {
|
|
|
87
315
|
return container;
|
|
88
316
|
}
|
|
89
317
|
|
|
318
|
+
/**
|
|
319
|
+
* Apply custom styles to a generated waveform player.
|
|
320
|
+
*
|
|
321
|
+
* @param {Element} container - The generated player container.
|
|
322
|
+
* @param {Object} styles - The player styles.
|
|
323
|
+
* @param {string} styles.backgroundColor - The waveform area background color.
|
|
324
|
+
* @param {string} styles.backgroundGradient - The waveform area background gradient.
|
|
325
|
+
* @param {string} styles.textColor - The player text color.
|
|
326
|
+
* @param {string} styles.playButtonColor - The play button color.
|
|
327
|
+
* @param {string} styles.playButtonGradient - The play button gradient.
|
|
328
|
+
*/
|
|
329
|
+
export function applyWaveformPlayerStyles(
|
|
330
|
+
container,
|
|
331
|
+
{
|
|
332
|
+
backgroundColor,
|
|
333
|
+
backgroundGradient,
|
|
334
|
+
textColor,
|
|
335
|
+
playButtonColor,
|
|
336
|
+
playButtonGradient,
|
|
337
|
+
} = {}
|
|
338
|
+
) {
|
|
339
|
+
const waveformContainer = container.querySelector( '.waveform-container' );
|
|
340
|
+
const playButton = container.querySelector( '.waveform-btn' );
|
|
341
|
+
const playButtonBaseColor = getRepresentativeColor(
|
|
342
|
+
getResolvedGradientStops( container, playButtonGradient ) ||
|
|
343
|
+
playButtonColor
|
|
344
|
+
);
|
|
345
|
+
|
|
346
|
+
if ( playButtonBaseColor ) {
|
|
347
|
+
container.style.setProperty(
|
|
348
|
+
'--wfp-button-color',
|
|
349
|
+
playButtonBaseColor
|
|
350
|
+
);
|
|
351
|
+
} else {
|
|
352
|
+
container.style.removeProperty( '--wfp-button-color' );
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
if ( textColor ) {
|
|
356
|
+
container.style.setProperty( '--wfp-text-color', textColor );
|
|
357
|
+
container.style.setProperty( '--wfp-text-secondary-color', textColor );
|
|
358
|
+
} else {
|
|
359
|
+
container.style.removeProperty( '--wfp-text-color' );
|
|
360
|
+
container.style.removeProperty( '--wfp-text-secondary-color' );
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
if ( playButton ) {
|
|
364
|
+
if ( playButtonGradient ) {
|
|
365
|
+
playButton.style.background = playButtonGradient;
|
|
366
|
+
} else {
|
|
367
|
+
playButton.style.removeProperty( 'background' );
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
if ( waveformContainer ) {
|
|
372
|
+
if ( backgroundGradient ) {
|
|
373
|
+
waveformContainer.style.background = backgroundGradient;
|
|
374
|
+
} else if ( backgroundColor ) {
|
|
375
|
+
waveformContainer.style.removeProperty( 'background' );
|
|
376
|
+
waveformContainer.style.backgroundColor = backgroundColor;
|
|
377
|
+
} else {
|
|
378
|
+
waveformContainer.style.removeProperty( 'background' );
|
|
379
|
+
waveformContainer.style.removeProperty( 'background-color' );
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
90
384
|
/**
|
|
91
385
|
* Apply contrasting color to SVG icon paths for visibility.
|
|
92
|
-
* The icons should contrast with the button background
|
|
386
|
+
* The icons should contrast with the button background.
|
|
93
387
|
*
|
|
94
388
|
* @param {Element} container - The waveform container element.
|
|
95
|
-
* @param {string} buttonColor - The button background color
|
|
389
|
+
* @param {string} buttonColor - The button background color.
|
|
96
390
|
*/
|
|
97
391
|
export function styleSvgIcons( container, buttonColor ) {
|
|
98
392
|
// Compute a contrasting color for the icons based on button brightness.
|
|
@@ -138,6 +432,56 @@ export function setupPlayButtonAccessibility(
|
|
|
138
432
|
};
|
|
139
433
|
}
|
|
140
434
|
|
|
435
|
+
/**
|
|
436
|
+
* Get the accessible label for the waveform seek control.
|
|
437
|
+
*
|
|
438
|
+
* @param {string} label - Accessible label for the seek control.
|
|
439
|
+
* @return {string} The provided label or translated fallback.
|
|
440
|
+
*/
|
|
441
|
+
function getSeekControlLabel( label ) {
|
|
442
|
+
return label || DEFAULT_SEEK_LABEL;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
/**
|
|
446
|
+
* Update the waveform seek control label.
|
|
447
|
+
*
|
|
448
|
+
* @param {Object} instance - The WaveformPlayer instance.
|
|
449
|
+
* @param {string} label - Accessible label for the seek control.
|
|
450
|
+
*/
|
|
451
|
+
export function updateSeekControlLabel( instance, label ) {
|
|
452
|
+
const seekLabel = getSeekControlLabel( label );
|
|
453
|
+
instance.options.seekLabel = seekLabel;
|
|
454
|
+
instance.applySeekLabel?.( seekLabel );
|
|
455
|
+
|
|
456
|
+
const seekControl = instance?.container?.querySelector(
|
|
457
|
+
'.waveform-container'
|
|
458
|
+
);
|
|
459
|
+
|
|
460
|
+
if ( seekControl ) {
|
|
461
|
+
seekControl.setAttribute( 'aria-label', seekLabel );
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
/**
|
|
466
|
+
* Show the current artwork as the play button background.
|
|
467
|
+
*
|
|
468
|
+
* @param {Element} container - The waveform player container element.
|
|
469
|
+
* @param {string} artworkUrl - The track image URL.
|
|
470
|
+
*/
|
|
471
|
+
export function setupPlayButtonArtwork( container, artworkUrl ) {
|
|
472
|
+
if ( ! artworkUrl ) {
|
|
473
|
+
container.classList.remove( 'has-play-button-artwork' );
|
|
474
|
+
container.style.removeProperty( '--wp--playlist--play-button-artwork' );
|
|
475
|
+
return;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
container.classList.add( 'has-play-button-artwork' );
|
|
479
|
+
container.style.setProperty(
|
|
480
|
+
'--wp--playlist--play-button-artwork',
|
|
481
|
+
`url(${ JSON.stringify( artworkUrl ) })`
|
|
482
|
+
);
|
|
483
|
+
}
|
|
484
|
+
|
|
141
485
|
/**
|
|
142
486
|
* Log play errors, filtering out expected AbortError.
|
|
143
487
|
*
|
|
@@ -160,48 +504,107 @@ export function logPlayError( error ) {
|
|
|
160
504
|
* This is the shared core logic used by both the React component (editor)
|
|
161
505
|
* and the Interactivity API (frontend).
|
|
162
506
|
*
|
|
163
|
-
* @param {Element} element
|
|
164
|
-
* @param {Object} options
|
|
165
|
-
* @param {string} options.src
|
|
166
|
-
* @param {string} options.title
|
|
167
|
-
* @param {string} options.artist
|
|
168
|
-
* @param {string} options.image
|
|
169
|
-
* @param {
|
|
170
|
-
* @param {
|
|
171
|
-
* @param {
|
|
172
|
-
* @param {string} options.
|
|
507
|
+
* @param {Element} element - The container element (must be in DOM).
|
|
508
|
+
* @param {Object} options - Configuration options.
|
|
509
|
+
* @param {string} options.src - The audio file URL.
|
|
510
|
+
* @param {string} options.title - The track title.
|
|
511
|
+
* @param {string} options.artist - The artist name.
|
|
512
|
+
* @param {string} options.image - The track image URL.
|
|
513
|
+
* @param {string} options.imageAlt - The track image alt text.
|
|
514
|
+
* @param {string} options.waveformColor - The waveform color.
|
|
515
|
+
* @param {string} options.waveformGradient - The waveform gradient.
|
|
516
|
+
* @param {string} options.textColor - The player text color.
|
|
517
|
+
* @param {string} options.backgroundColor - The player background color.
|
|
518
|
+
* @param {string} options.backgroundGradient - The player background gradient.
|
|
519
|
+
* @param {boolean} options.autoPlay - Whether to auto-play when ready.
|
|
520
|
+
* @param {Function} options.onEnded - Callback when track ends.
|
|
521
|
+
* @param {Object} options.labels - Translated button labels.
|
|
522
|
+
* @param {string} options.waveformStyle - Waveform style (bars, mirror, line, blocks, dots, seekbar).
|
|
523
|
+
* @param {boolean} options.showPlayButtonArtwork - Whether to show artwork on the play button.
|
|
173
524
|
* @return {Object} Object with instance, container, and destroy function.
|
|
174
525
|
*/
|
|
175
526
|
export function initWaveformPlayer(
|
|
176
527
|
element,
|
|
177
|
-
{
|
|
528
|
+
{
|
|
529
|
+
src,
|
|
530
|
+
title,
|
|
531
|
+
artist,
|
|
532
|
+
image,
|
|
533
|
+
imageAlt,
|
|
534
|
+
waveformColor: waveformColorValue,
|
|
535
|
+
waveformGradient: waveformGradientValue,
|
|
536
|
+
textColor: textColorValue,
|
|
537
|
+
backgroundColor,
|
|
538
|
+
backgroundGradient,
|
|
539
|
+
autoPlay,
|
|
540
|
+
onEnded,
|
|
541
|
+
labels,
|
|
542
|
+
waveformStyle,
|
|
543
|
+
showPlayButtonArtwork = false,
|
|
544
|
+
}
|
|
178
545
|
) {
|
|
546
|
+
const playerArtwork = showPlayButtonArtwork ? undefined : image;
|
|
547
|
+
|
|
179
548
|
// Get colors from computed styles.
|
|
180
|
-
const { textColor, waveformColor, progressColor } =
|
|
181
|
-
getWaveformColors(
|
|
549
|
+
const { textColor, waveformColor, progressColor, waveformGradient } =
|
|
550
|
+
getWaveformColors(
|
|
551
|
+
element,
|
|
552
|
+
waveformColorValue,
|
|
553
|
+
textColorValue,
|
|
554
|
+
waveformGradientValue
|
|
555
|
+
);
|
|
556
|
+
const waveformGradientStops = getResolvedGradientStops(
|
|
557
|
+
element,
|
|
558
|
+
waveformGradientValue
|
|
559
|
+
);
|
|
560
|
+
const waveformButtonColor = getRepresentativeColor(
|
|
561
|
+
waveformGradientStops || waveformColorValue
|
|
562
|
+
);
|
|
182
563
|
|
|
183
564
|
// Create the waveform container.
|
|
184
565
|
const container = createWaveformContainer( {
|
|
185
566
|
url: src,
|
|
186
567
|
title,
|
|
187
568
|
artist,
|
|
188
|
-
artwork:
|
|
569
|
+
artwork: playerArtwork,
|
|
189
570
|
waveformColor,
|
|
190
571
|
progressColor,
|
|
572
|
+
waveformGradient,
|
|
191
573
|
buttonColor: textColor,
|
|
574
|
+
seekLabel: title || labels?.seek,
|
|
575
|
+
seekValueText: labels?.seekValueText,
|
|
192
576
|
waveformStyle,
|
|
193
577
|
} );
|
|
194
578
|
element.appendChild( container );
|
|
195
579
|
|
|
196
|
-
// Initialize the WaveformPlayer library.
|
|
580
|
+
// Initialize the WaveformPlayer library. The library reads the translated
|
|
581
|
+
// seek label and value-text templates from the container's data attributes
|
|
582
|
+
// and owns the seek slider's accessible label and value text.
|
|
197
583
|
const instance = new WaveformPlayerLib( container );
|
|
584
|
+
if ( instance.artworkEl ) {
|
|
585
|
+
instance.artworkEl.alt = imageAlt || '';
|
|
586
|
+
}
|
|
587
|
+
applyWaveformPlayerStyles( container, {
|
|
588
|
+
backgroundColor,
|
|
589
|
+
backgroundGradient,
|
|
590
|
+
textColor,
|
|
591
|
+
playButtonColor: showPlayButtonArtwork
|
|
592
|
+
? undefined
|
|
593
|
+
: waveformButtonColor,
|
|
594
|
+
playButtonGradient: showPlayButtonArtwork
|
|
595
|
+
? undefined
|
|
596
|
+
: waveformGradientValue,
|
|
597
|
+
} );
|
|
198
598
|
|
|
199
599
|
// Set up event handlers.
|
|
200
|
-
let
|
|
600
|
+
let cleanupPlayButtonAccessibility;
|
|
201
601
|
const handlers = {
|
|
202
602
|
ready: () => {
|
|
203
|
-
styleSvgIcons( container, textColor );
|
|
204
|
-
|
|
603
|
+
styleSvgIcons( container, waveformButtonColor || textColor );
|
|
604
|
+
if ( showPlayButtonArtwork ) {
|
|
605
|
+
setupPlayButtonArtwork( container, image );
|
|
606
|
+
}
|
|
607
|
+
cleanupPlayButtonAccessibility = setupPlayButtonAccessibility(
|
|
205
608
|
container,
|
|
206
609
|
labels
|
|
207
610
|
);
|
|
@@ -220,7 +623,7 @@ export function initWaveformPlayer(
|
|
|
220
623
|
instance,
|
|
221
624
|
container,
|
|
222
625
|
destroy: () => {
|
|
223
|
-
|
|
626
|
+
cleanupPlayButtonAccessibility?.();
|
|
224
627
|
container.removeEventListener(
|
|
225
628
|
'waveformplayer:ready',
|
|
226
629
|
handlers.ready
|
package/src/verse/edit.js
CHANGED
|
@@ -40,8 +40,13 @@ export default function VerseEdit( props ) {
|
|
|
40
40
|
onMerge={ mergeBlocks }
|
|
41
41
|
{ ...blockProps }
|
|
42
42
|
__unstablePastePlainText
|
|
43
|
-
__unstableOnSplitAtDoubleLineEnd={
|
|
44
|
-
insertBlocksAfter
|
|
43
|
+
__unstableOnSplitAtDoubleLineEnd={
|
|
44
|
+
insertBlocksAfter
|
|
45
|
+
? () =>
|
|
46
|
+
insertBlocksAfter(
|
|
47
|
+
createBlock( getDefaultBlockName() )
|
|
48
|
+
)
|
|
49
|
+
: undefined
|
|
45
50
|
}
|
|
46
51
|
/>
|
|
47
52
|
);
|
package/src/video/edit.js
CHANGED
|
@@ -42,7 +42,6 @@ import Tracks from './tracks';
|
|
|
42
42
|
import { Caption } from '../utils/caption';
|
|
43
43
|
import PosterImage from '../utils/poster-image';
|
|
44
44
|
import { isGifVariation } from './variations';
|
|
45
|
-
import GifRestoreControl from './gif-restore-control';
|
|
46
45
|
|
|
47
46
|
const ALLOWED_MEDIA_TYPES = [ 'video' ];
|
|
48
47
|
|
|
@@ -53,7 +52,6 @@ function VideoEdit( {
|
|
|
53
52
|
setAttributes,
|
|
54
53
|
insertBlocksAfter,
|
|
55
54
|
onReplace,
|
|
56
|
-
clientId,
|
|
57
55
|
} ) {
|
|
58
56
|
const videoPlayer = useRef();
|
|
59
57
|
const { id, controls, poster, src, tracks, width, height } = attributes;
|
|
@@ -225,12 +223,6 @@ function VideoEdit( {
|
|
|
225
223
|
variant="toolbar"
|
|
226
224
|
/>
|
|
227
225
|
</BlockControls>
|
|
228
|
-
{ isGif && (
|
|
229
|
-
<GifRestoreControl
|
|
230
|
-
attributes={ attributes }
|
|
231
|
-
clientId={ clientId }
|
|
232
|
-
/>
|
|
233
|
-
) }
|
|
234
226
|
</>
|
|
235
227
|
) }
|
|
236
228
|
<InspectorControls>
|
package/src/video/editor.scss
CHANGED
package/src/video/index.php
CHANGED
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
* @return string The block content with the dimensions added.
|
|
18
18
|
*/
|
|
19
19
|
function render_block_core_video( array $attributes, string $content ): string {
|
|
20
|
-
//
|
|
21
|
-
if (
|
|
20
|
+
// If the content lacks any video tag (either <video> or <VIDEO>), abort. Note that str_contains() is case-sensitive.
|
|
21
|
+
if ( stripos( $content, '<video' ) === false ) {
|
|
22
22
|
return $content;
|
|
23
23
|
}
|
|
24
24
|
|