@wordpress/block-library 9.27.1-next.46f643fa0.0 → 9.28.1-next.0f6f9d12c.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/build/accordion-header/edit.js +118 -0
- package/build/accordion-header/edit.js.map +1 -0
- package/build/accordion-header/index.js +124 -0
- package/build/accordion-header/index.js.map +1 -0
- package/build/accordion-header/init.js +12 -0
- package/build/accordion-header/init.js.map +1 -0
- package/build/accordion-header/save.js +81 -0
- package/build/accordion-header/save.js.map +1 -0
- package/build/accordion-item/edit.js +129 -0
- package/build/accordion-item/edit.js.map +1 -0
- package/build/accordion-item/icons.js +30 -0
- package/build/accordion-item/icons.js.map +1 -0
- package/build/accordion-item/index.js +79 -0
- package/build/accordion-item/index.js.map +1 -0
- package/build/accordion-item/init.js +12 -0
- package/build/accordion-item/init.js.map +1 -0
- package/build/accordion-item/save.js +37 -0
- package/build/accordion-item/save.js.map +1 -0
- package/build/accordion-panel/edit.js +59 -0
- package/build/accordion-panel/edit.js.map +1 -0
- package/build/accordion-panel/index.js +108 -0
- package/build/accordion-panel/index.js.map +1 -0
- package/build/accordion-panel/init.js +12 -0
- package/build/accordion-panel/init.js.map +1 -0
- package/build/accordion-panel/save.js +46 -0
- package/build/accordion-panel/save.js.map +1 -0
- package/build/accordions/edit.js +123 -0
- package/build/accordions/edit.js.map +1 -0
- package/build/accordions/index.js +103 -0
- package/build/accordions/index.js.map +1 -0
- package/build/accordions/init.js +12 -0
- package/build/accordions/init.js.map +1 -0
- package/build/accordions/save.js +36 -0
- package/build/accordions/save.js.map +1 -0
- package/build/accordions/view.js +49 -0
- package/build/accordions/view.js.map +1 -0
- package/build/cover/edit/index.js +1 -1
- package/build/cover/edit/index.js.map +1 -1
- package/build/cover/edit/inspector-controls.js +1 -1
- package/build/cover/edit/inspector-controls.js.map +1 -1
- package/build/cover/index.js +2 -1
- package/build/cover/index.js.map +1 -1
- package/build/file/edit.js +4 -2
- package/build/file/edit.js.map +1 -1
- package/build/file/edit.native.js +1 -1
- package/build/file/edit.native.js.map +1 -1
- package/build/file/transforms.js +6 -6
- package/build/file/transforms.js.map +1 -1
- package/build/file/utils/index.js +5 -0
- package/build/file/utils/index.js.map +1 -1
- package/build/freeform/edit.js +6 -0
- package/build/freeform/edit.js.map +1 -1
- package/build/gallery/use-get-media.js +3 -3
- package/build/gallery/use-get-media.js.map +1 -1
- package/build/gallery/use-get-media.native.js +3 -3
- package/build/gallery/use-get-media.native.js.map +1 -1
- package/build/image/edit.native.js +2 -2
- package/build/image/edit.native.js.map +1 -1
- package/build/image/image.js +1 -1
- package/build/image/image.js.map +1 -1
- package/build/index.js +10 -0
- package/build/index.js.map +1 -1
- package/build/list-item/edit.js +3 -0
- package/build/list-item/edit.js.map +1 -1
- package/build/media-text/edit.js +2 -2
- package/build/media-text/edit.js.map +1 -1
- package/build/media-text/media-container.js +2 -1
- package/build/media-text/media-container.js.map +1 -1
- package/build/media-text/transforms.js +7 -3
- package/build/media-text/transforms.js.map +1 -1
- package/build/more/edit.js +13 -28
- package/build/more/edit.js.map +1 -1
- package/build/post-comments-count/index.js +3 -0
- package/build/post-comments-count/index.js.map +1 -1
- package/build/post-comments-link/index.js +3 -0
- package/build/post-comments-link/index.js.map +1 -1
- package/build/post-featured-image/edit.js +2 -2
- package/build/post-featured-image/edit.js.map +1 -1
- package/build/query-title/edit.js +52 -2
- package/build/query-title/edit.js.map +1 -1
- package/build/query-title/index.js +1 -0
- package/build/query-title/index.js.map +1 -1
- package/build/query-title/use-post-type-label.js +42 -0
- package/build/query-title/use-post-type-label.js.map +1 -0
- package/build/query-title/variations.js +10 -0
- package/build/query-title/variations.js.map +1 -1
- package/build/site-logo/edit.js +58 -43
- package/build/site-logo/edit.js.map +1 -1
- package/build/site-title/edit.js +9 -3
- package/build/site-title/edit.js.map +1 -1
- package/build/social-link/icons/tiktok.js +2 -2
- package/build/social-link/icons/tiktok.js.map +1 -1
- package/build/utils/poster-image.js +54 -6
- package/build/utils/poster-image.js.map +1 -1
- package/build-module/accordion-header/edit.js +108 -0
- package/build-module/accordion-header/edit.js.map +1 -0
- package/build-module/accordion-header/index.js +116 -0
- package/build-module/accordion-header/index.js.map +1 -0
- package/build-module/accordion-header/init.js +6 -0
- package/build-module/accordion-header/init.js.map +1 -0
- package/build-module/accordion-header/save.js +71 -0
- package/build-module/accordion-header/save.js.map +1 -0
- package/build-module/accordion-item/edit.js +120 -0
- package/build-module/accordion-item/edit.js.map +1 -0
- package/build-module/accordion-item/icons.js +22 -0
- package/build-module/accordion-item/icons.js.map +1 -0
- package/build-module/accordion-item/index.js +71 -0
- package/build-module/accordion-item/index.js.map +1 -0
- package/build-module/accordion-item/init.js +6 -0
- package/build-module/accordion-item/init.js.map +1 -0
- package/build-module/accordion-item/save.js +28 -0
- package/build-module/accordion-item/save.js.map +1 -0
- package/build-module/accordion-panel/edit.js +50 -0
- package/build-module/accordion-panel/edit.js.map +1 -0
- package/build-module/accordion-panel/index.js +100 -0
- package/build-module/accordion-panel/index.js.map +1 -0
- package/build-module/accordion-panel/init.js +6 -0
- package/build-module/accordion-panel/init.js.map +1 -0
- package/build-module/accordion-panel/save.js +37 -0
- package/build-module/accordion-panel/save.js.map +1 -0
- package/build-module/accordions/edit.js +116 -0
- package/build-module/accordions/edit.js.map +1 -0
- package/build-module/accordions/index.js +95 -0
- package/build-module/accordions/index.js.map +1 -0
- package/build-module/accordions/init.js +6 -0
- package/build-module/accordions/init.js.map +1 -0
- package/build-module/accordions/save.js +27 -0
- package/build-module/accordions/save.js.map +1 -0
- package/build-module/accordions/view.js +46 -0
- package/build-module/accordions/view.js.map +1 -0
- package/build-module/cover/edit/index.js +1 -1
- package/build-module/cover/edit/index.js.map +1 -1
- package/build-module/cover/edit/inspector-controls.js +1 -1
- package/build-module/cover/edit/inspector-controls.js.map +1 -1
- package/build-module/cover/index.js +2 -1
- package/build-module/cover/index.js.map +1 -1
- package/build-module/file/edit.js +4 -2
- package/build-module/file/edit.js.map +1 -1
- package/build-module/file/edit.native.js +1 -1
- package/build-module/file/edit.native.js.map +1 -1
- package/build-module/file/transforms.js +6 -6
- package/build-module/file/transforms.js.map +1 -1
- package/build-module/file/utils/index.js +5 -0
- package/build-module/file/utils/index.js.map +1 -1
- package/build-module/freeform/edit.js +6 -0
- package/build-module/freeform/edit.js.map +1 -1
- package/build-module/gallery/use-get-media.js +3 -3
- package/build-module/gallery/use-get-media.js.map +1 -1
- package/build-module/gallery/use-get-media.native.js +3 -3
- package/build-module/gallery/use-get-media.native.js.map +1 -1
- package/build-module/image/edit.native.js +2 -2
- package/build-module/image/edit.native.js.map +1 -1
- package/build-module/image/image.js +1 -1
- package/build-module/image/image.js.map +1 -1
- package/build-module/index.js +10 -0
- package/build-module/index.js.map +1 -1
- package/build-module/list-item/edit.js +3 -0
- package/build-module/list-item/edit.js.map +1 -1
- package/build-module/media-text/edit.js +2 -2
- package/build-module/media-text/edit.js.map +1 -1
- package/build-module/media-text/media-container.js +2 -1
- package/build-module/media-text/media-container.js.map +1 -1
- package/build-module/media-text/transforms.js +7 -3
- package/build-module/media-text/transforms.js.map +1 -1
- package/build-module/more/edit.js +15 -29
- package/build-module/more/edit.js.map +1 -1
- package/build-module/post-comments-count/index.js +3 -0
- package/build-module/post-comments-count/index.js.map +1 -1
- package/build-module/post-comments-link/index.js +3 -0
- package/build-module/post-comments-link/index.js.map +1 -1
- package/build-module/post-featured-image/edit.js +2 -2
- package/build-module/post-featured-image/edit.js.map +1 -1
- package/build-module/query-title/edit.js +52 -2
- package/build-module/query-title/edit.js.map +1 -1
- package/build-module/query-title/index.js +1 -0
- package/build-module/query-title/index.js.map +1 -1
- package/build-module/query-title/use-post-type-label.js +36 -0
- package/build-module/query-title/use-post-type-label.js.map +1 -0
- package/build-module/query-title/variations.js +10 -0
- package/build-module/query-title/variations.js.map +1 -1
- package/build-module/site-logo/edit.js +59 -44
- package/build-module/site-logo/edit.js.map +1 -1
- package/build-module/site-title/edit.js +10 -4
- package/build-module/site-title/edit.js.map +1 -1
- package/build-module/social-link/icons/tiktok.js +2 -2
- package/build-module/social-link/icons/tiktok.js.map +1 -1
- package/build-module/utils/poster-image.js +57 -9
- package/build-module/utils/poster-image.js.map +1 -1
- package/build-style/accordions/style-rtl.css +223 -0
- package/build-style/accordions/style.css +223 -0
- package/build-style/editor-rtl.css +23 -26
- package/build-style/editor.css +23 -26
- package/build-style/gallery/style-rtl.css +1 -2
- package/build-style/gallery/style.css +1 -2
- package/build-style/image/style-rtl.css +1 -2
- package/build-style/image/style.css +1 -2
- package/build-style/more/editor-rtl.css +3 -11
- package/build-style/more/editor.css +3 -11
- package/build-style/post-featured-image/editor-rtl.css +1 -2
- package/build-style/post-featured-image/editor.css +1 -2
- package/build-style/style-rtl.css +90 -4
- package/build-style/style.css +90 -4
- package/package.json +36 -35
- package/src/accordion-header/block.json +93 -0
- package/src/accordion-header/edit.js +128 -0
- package/src/accordion-header/index.js +24 -0
- package/src/accordion-header/init.js +6 -0
- package/src/accordion-header/save.js +79 -0
- package/src/accordion-item/block.json +45 -0
- package/src/accordion-item/edit.js +149 -0
- package/src/accordion-item/icons.js +23 -0
- package/src/accordion-item/index.js +24 -0
- package/src/accordion-item/index.php +73 -0
- package/src/accordion-item/init.js +6 -0
- package/src/accordion-item/save.js +25 -0
- package/src/accordion-panel/block.json +74 -0
- package/src/accordion-panel/edit.js +61 -0
- package/src/accordion-panel/index.js +24 -0
- package/src/accordion-panel/init.js +6 -0
- package/src/accordion-panel/save.js +51 -0
- package/src/accordions/block.json +69 -0
- package/src/accordions/edit.js +133 -0
- package/src/accordions/index.js +24 -0
- package/src/accordions/index.php +61 -0
- package/src/accordions/init.js +6 -0
- package/src/accordions/save.js +23 -0
- package/src/accordions/style.scss +91 -0
- package/src/accordions/view.js +38 -0
- package/src/block/index.php +35 -20
- package/src/cover/block.json +2 -1
- package/src/cover/edit/index.js +8 -3
- package/src/cover/edit/inspector-controls.js +6 -1
- package/src/file/edit.js +9 -4
- package/src/file/edit.native.js +5 -1
- package/src/file/index.php +28 -22
- package/src/file/transforms.js +6 -6
- package/src/file/utils/index.js +5 -0
- package/src/form-input/index.php +4 -2
- package/src/freeform/edit.js +7 -0
- package/src/gallery/use-get-media.js +9 -5
- package/src/gallery/use-get-media.native.js +10 -6
- package/src/image/edit.native.js +4 -2
- package/src/image/image.js +6 -1
- package/src/image/index.php +1 -1
- package/src/image/test/edit.native.js +16 -10
- package/src/index.js +12 -0
- package/src/list-item/edit.js +3 -0
- package/src/loginout/index.php +4 -2
- package/src/media-text/edit.js +16 -6
- package/src/media-text/media-container.js +1 -0
- package/src/media-text/transforms.js +5 -1
- package/src/more/edit.js +27 -33
- package/src/more/editor.scss +3 -12
- package/src/post-comments-count/block.json +3 -0
- package/src/post-comments-link/block.json +3 -0
- package/src/post-date/index.php +28 -32
- package/src/post-excerpt/index.php +16 -12
- package/src/post-featured-image/edit.js +2 -2
- package/src/query-title/block.json +1 -0
- package/src/query-title/edit.js +58 -1
- package/src/query-title/index.php +30 -5
- package/src/query-title/use-post-type-label.js +34 -0
- package/src/query-title/variations.js +13 -0
- package/src/site-logo/edit.js +44 -16
- package/src/site-title/edit.js +24 -16
- package/src/social-link/icons/tiktok.js +2 -2
- package/src/social-link/index.php +1 -1
- package/src/style.scss +1 -0
- package/src/utils/poster-image.js +62 -17
- package/src/utils/poster-image.scss +23 -16
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import clsx from 'clsx';
|
|
5
|
+
/**
|
|
6
|
+
* WordPress dependencies
|
|
7
|
+
*/
|
|
8
|
+
import {
|
|
9
|
+
useBlockProps,
|
|
10
|
+
__experimentalGetBorderClassesAndStyles as getBorderClassesAndStyles,
|
|
11
|
+
__experimentalGetColorClassesAndStyles as getColorClassesAndStyles,
|
|
12
|
+
__experimentalGetSpacingClassesAndStyles as getSpacingClassesAndStyles,
|
|
13
|
+
__experimentalGetShadowClassesAndStyles as getShadowClassesAndStyles,
|
|
14
|
+
RichText,
|
|
15
|
+
} from '@wordpress/block-editor';
|
|
16
|
+
/**
|
|
17
|
+
* Internal dependencies
|
|
18
|
+
*/
|
|
19
|
+
import { plus } from '../accordion-item/icons';
|
|
20
|
+
|
|
21
|
+
const ICONS = {
|
|
22
|
+
plus,
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export default function save( { attributes } ) {
|
|
26
|
+
const { level, title, iconPosition, textAlign, showIcon } = attributes;
|
|
27
|
+
const TagName = 'h' + level;
|
|
28
|
+
|
|
29
|
+
const blockProps = useBlockProps.save();
|
|
30
|
+
const borderProps = getBorderClassesAndStyles( attributes );
|
|
31
|
+
const colorProps = getColorClassesAndStyles( attributes );
|
|
32
|
+
const spacingProps = getSpacingClassesAndStyles( attributes );
|
|
33
|
+
const shadowProps = getShadowClassesAndStyles( attributes );
|
|
34
|
+
|
|
35
|
+
const Icon = ICONS.plus;
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<TagName
|
|
39
|
+
{ ...blockProps }
|
|
40
|
+
className={ clsx(
|
|
41
|
+
blockProps.className,
|
|
42
|
+
colorProps.className,
|
|
43
|
+
borderProps.className,
|
|
44
|
+
'accordion-item__heading',
|
|
45
|
+
{
|
|
46
|
+
[ `has-custom-font-size` ]: blockProps?.style?.fontSize,
|
|
47
|
+
[ `icon-position-left` ]: iconPosition === 'left',
|
|
48
|
+
[ `has-text-align-${ textAlign }` ]: textAlign,
|
|
49
|
+
}
|
|
50
|
+
) }
|
|
51
|
+
style={ {
|
|
52
|
+
...borderProps.style,
|
|
53
|
+
...colorProps.style,
|
|
54
|
+
...shadowProps.style,
|
|
55
|
+
} }
|
|
56
|
+
>
|
|
57
|
+
<button
|
|
58
|
+
className={ clsx( 'accordion-item__toggle' ) }
|
|
59
|
+
style={ {
|
|
60
|
+
...spacingProps.style,
|
|
61
|
+
} }
|
|
62
|
+
>
|
|
63
|
+
<RichText.Content tagName="span" value={ title } />
|
|
64
|
+
<span
|
|
65
|
+
className={ clsx( `accordion-item__toggle-icon`, {
|
|
66
|
+
'has-icon-plus': showIcon,
|
|
67
|
+
} ) }
|
|
68
|
+
style={ {
|
|
69
|
+
// TO-DO: make this configurable
|
|
70
|
+
width: `1.2em`,
|
|
71
|
+
height: `1.2em`,
|
|
72
|
+
} }
|
|
73
|
+
>
|
|
74
|
+
{ showIcon && <Icon width="1.2em" height="1.2em" /> }
|
|
75
|
+
</span>
|
|
76
|
+
</button>
|
|
77
|
+
</TagName>
|
|
78
|
+
);
|
|
79
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://schemas.wp.org/trunk/block.json",
|
|
3
|
+
"apiVersion": 3,
|
|
4
|
+
"name": "core/accordion-item",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"title": "Accordion",
|
|
7
|
+
"category": "design",
|
|
8
|
+
"description": "A single accordion that displays a header and expandable content.",
|
|
9
|
+
"example": {},
|
|
10
|
+
"__experimental": true,
|
|
11
|
+
"parent": [ "core/accordions" ],
|
|
12
|
+
"allowedBlocks": [ "core/accordion-header", "core/accordion-panel" ],
|
|
13
|
+
"supports": {
|
|
14
|
+
"align": [ "wide", "full" ],
|
|
15
|
+
"color": {
|
|
16
|
+
"background": true,
|
|
17
|
+
"gradient": true
|
|
18
|
+
},
|
|
19
|
+
"interactivity": true,
|
|
20
|
+
"spacing": {
|
|
21
|
+
"margin": [ "top", "bottom" ],
|
|
22
|
+
"blockGap": true
|
|
23
|
+
},
|
|
24
|
+
"__experimentalBorder": {
|
|
25
|
+
"color": true,
|
|
26
|
+
"radius": true,
|
|
27
|
+
"style": true,
|
|
28
|
+
"width": true,
|
|
29
|
+
"__experimentalDefaultControls": {
|
|
30
|
+
"color": true,
|
|
31
|
+
"radius": true,
|
|
32
|
+
"style": true,
|
|
33
|
+
"width": true
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"shadow": true
|
|
37
|
+
},
|
|
38
|
+
"attributes": {
|
|
39
|
+
"openByDefault": {
|
|
40
|
+
"type": "boolean",
|
|
41
|
+
"default": false
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"textdomain": "default"
|
|
45
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __ } from '@wordpress/i18n';
|
|
5
|
+
import {
|
|
6
|
+
useBlockProps,
|
|
7
|
+
useInnerBlocksProps,
|
|
8
|
+
InspectorControls,
|
|
9
|
+
store as blockEditorStore,
|
|
10
|
+
} from '@wordpress/block-editor';
|
|
11
|
+
import { useDispatch, useSelect } from '@wordpress/data';
|
|
12
|
+
import { useEffect } from '@wordpress/element';
|
|
13
|
+
import {
|
|
14
|
+
ToggleControl,
|
|
15
|
+
__experimentalToolsPanel as ToolsPanel,
|
|
16
|
+
__experimentalToolsPanelItem as ToolsPanelItem,
|
|
17
|
+
} from '@wordpress/components';
|
|
18
|
+
/**
|
|
19
|
+
* External dependencies
|
|
20
|
+
*/
|
|
21
|
+
import clsx from 'clsx';
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Internal dependencies
|
|
25
|
+
*/
|
|
26
|
+
import { useToolsPanelDropdownMenuProps } from '../utils/hooks';
|
|
27
|
+
|
|
28
|
+
export default function Edit( {
|
|
29
|
+
attributes: { openByDefault },
|
|
30
|
+
clientId,
|
|
31
|
+
setAttributes,
|
|
32
|
+
} ) {
|
|
33
|
+
const dropdownMenuProps = useToolsPanelDropdownMenuProps();
|
|
34
|
+
|
|
35
|
+
const { isSelected, getBlockOrder } = useSelect(
|
|
36
|
+
( select ) => {
|
|
37
|
+
const {
|
|
38
|
+
isBlockSelected,
|
|
39
|
+
hasSelectedInnerBlock,
|
|
40
|
+
getBlockOrder: getBlockOrderSelector,
|
|
41
|
+
} = select( blockEditorStore );
|
|
42
|
+
return {
|
|
43
|
+
isSelected:
|
|
44
|
+
isBlockSelected( clientId ) ||
|
|
45
|
+
hasSelectedInnerBlock( clientId, true ),
|
|
46
|
+
getBlockOrder: getBlockOrderSelector,
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
[ clientId ]
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
const contentBlockClientId = getBlockOrder( clientId )[ 1 ];
|
|
53
|
+
const { updateBlockAttributes, __unstableMarkNextChangeAsNotPersistent } =
|
|
54
|
+
useDispatch( blockEditorStore );
|
|
55
|
+
|
|
56
|
+
useEffect( () => {
|
|
57
|
+
if ( contentBlockClientId ) {
|
|
58
|
+
__unstableMarkNextChangeAsNotPersistent();
|
|
59
|
+
updateBlockAttributes( contentBlockClientId, {
|
|
60
|
+
isSelected,
|
|
61
|
+
} );
|
|
62
|
+
}
|
|
63
|
+
}, [
|
|
64
|
+
isSelected,
|
|
65
|
+
contentBlockClientId,
|
|
66
|
+
__unstableMarkNextChangeAsNotPersistent,
|
|
67
|
+
updateBlockAttributes,
|
|
68
|
+
] );
|
|
69
|
+
|
|
70
|
+
const blockProps = useBlockProps();
|
|
71
|
+
const innerBlocksProps = useInnerBlocksProps(
|
|
72
|
+
{
|
|
73
|
+
...blockProps,
|
|
74
|
+
className: clsx( blockProps.className, {
|
|
75
|
+
'is-open': openByDefault || isSelected,
|
|
76
|
+
} ),
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
template: [
|
|
80
|
+
[ 'core/accordion-header', {} ],
|
|
81
|
+
[
|
|
82
|
+
'core/accordion-panel',
|
|
83
|
+
{
|
|
84
|
+
openByDefault,
|
|
85
|
+
},
|
|
86
|
+
],
|
|
87
|
+
],
|
|
88
|
+
templateLock: 'all',
|
|
89
|
+
directInsert: true,
|
|
90
|
+
templateInsertUpdatesSelection: true,
|
|
91
|
+
}
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
return (
|
|
95
|
+
<>
|
|
96
|
+
<InspectorControls key="setting">
|
|
97
|
+
<ToolsPanel
|
|
98
|
+
label={ __( 'Settings' ) }
|
|
99
|
+
resetAll={ () => {
|
|
100
|
+
setAttributes( { openByDefault: false } );
|
|
101
|
+
if ( contentBlockClientId ) {
|
|
102
|
+
updateBlockAttributes( contentBlockClientId, {
|
|
103
|
+
openByDefault: false,
|
|
104
|
+
} );
|
|
105
|
+
}
|
|
106
|
+
} }
|
|
107
|
+
dropdownMenuProps={ dropdownMenuProps }
|
|
108
|
+
>
|
|
109
|
+
<ToolsPanelItem
|
|
110
|
+
label={ __( 'Open by default' ) }
|
|
111
|
+
isShownByDefault
|
|
112
|
+
hasValue={ () => !! openByDefault }
|
|
113
|
+
onDeselect={ () => {
|
|
114
|
+
setAttributes( { openByDefault: false } );
|
|
115
|
+
if ( contentBlockClientId ) {
|
|
116
|
+
updateBlockAttributes( contentBlockClientId, {
|
|
117
|
+
openByDefault: false,
|
|
118
|
+
} );
|
|
119
|
+
}
|
|
120
|
+
} }
|
|
121
|
+
>
|
|
122
|
+
<ToggleControl
|
|
123
|
+
label={ __( 'Open by default' ) }
|
|
124
|
+
__nextHasNoMarginBottom
|
|
125
|
+
onChange={ ( value ) => {
|
|
126
|
+
setAttributes( {
|
|
127
|
+
openByDefault: value,
|
|
128
|
+
} );
|
|
129
|
+
if ( contentBlockClientId ) {
|
|
130
|
+
updateBlockAttributes(
|
|
131
|
+
contentBlockClientId,
|
|
132
|
+
{
|
|
133
|
+
openByDefault: value,
|
|
134
|
+
}
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
} }
|
|
138
|
+
checked={ openByDefault }
|
|
139
|
+
help={ __(
|
|
140
|
+
'Accordion content will be displayed by default.'
|
|
141
|
+
) }
|
|
142
|
+
/>
|
|
143
|
+
</ToolsPanelItem>
|
|
144
|
+
</ToolsPanel>
|
|
145
|
+
</InspectorControls>
|
|
146
|
+
<div { ...innerBlocksProps } />
|
|
147
|
+
</>
|
|
148
|
+
);
|
|
149
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { createElement } from '@wordpress/element';
|
|
5
|
+
|
|
6
|
+
export const plus = ( { width, height } ) => {
|
|
7
|
+
return createElement(
|
|
8
|
+
'span',
|
|
9
|
+
{
|
|
10
|
+
style: {
|
|
11
|
+
display: 'inline-block',
|
|
12
|
+
width: width || 24,
|
|
13
|
+
height: height || 24,
|
|
14
|
+
lineHeight: `${ height || 24 }px`,
|
|
15
|
+
textAlign: 'center',
|
|
16
|
+
fontSize: `${ ( height || 24 ) * 0.6 }px`,
|
|
17
|
+
fontWeight: 'bold',
|
|
18
|
+
color: 'currentColor',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
'+'
|
|
22
|
+
);
|
|
23
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { accordionItem } from '@wordpress/icons';
|
|
5
|
+
/**
|
|
6
|
+
* Internal dependencies
|
|
7
|
+
*/
|
|
8
|
+
import edit from './edit';
|
|
9
|
+
import save from './save';
|
|
10
|
+
import metadata from './block.json';
|
|
11
|
+
import initBlock from '../utils/init-block';
|
|
12
|
+
|
|
13
|
+
const { name } = metadata;
|
|
14
|
+
|
|
15
|
+
export { metadata, name };
|
|
16
|
+
|
|
17
|
+
export const settings = {
|
|
18
|
+
icon: accordionItem,
|
|
19
|
+
example: {},
|
|
20
|
+
edit,
|
|
21
|
+
save,
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const init = () => initBlock( { name, metadata, settings } );
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Server-side rendering of the `core/accordion-item` block.
|
|
5
|
+
*
|
|
6
|
+
* @package WordPress
|
|
7
|
+
* @since 6.6.0
|
|
8
|
+
*
|
|
9
|
+
* @param array $attributes The block attributes.
|
|
10
|
+
* @param string $content The block content.
|
|
11
|
+
*
|
|
12
|
+
* @return string Returns the updated markup.
|
|
13
|
+
*/
|
|
14
|
+
function block_core_accordion_item_render( $attributes, $content ) {
|
|
15
|
+
if ( ! $content ) {
|
|
16
|
+
return $content;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
$p = new WP_HTML_Tag_Processor( $content );
|
|
20
|
+
$unique_id = wp_unique_id( 'accordion-item-' );
|
|
21
|
+
|
|
22
|
+
// Initialize the state of the item on the server using a closure,
|
|
23
|
+
// since we need to get derived state based on the current context.
|
|
24
|
+
wp_interactivity_state(
|
|
25
|
+
'core/accordion',
|
|
26
|
+
array(
|
|
27
|
+
'isOpen' => function () {
|
|
28
|
+
$context = wp_interactivity_get_context();
|
|
29
|
+
return $context['openByDefault'];
|
|
30
|
+
},
|
|
31
|
+
)
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
if ( $p->next_tag( array( 'class_name' => 'wp-block-accordion-item' ) ) ) {
|
|
35
|
+
$open_by_default = $attributes['openByDefault'] ? 'true' : 'false';
|
|
36
|
+
$p->set_attribute( 'data-wp-context', '{ "id": "' . $unique_id . '", "openByDefault": ' . $open_by_default . ' }' );
|
|
37
|
+
$p->set_attribute( 'data-wp-class--is-open', 'state.isOpen' );
|
|
38
|
+
$p->set_attribute( 'data-wp-init', 'callbacks.initIsOpen' );
|
|
39
|
+
|
|
40
|
+
if ( $p->next_tag( array( 'class_name' => 'accordion-item__toggle' ) ) ) {
|
|
41
|
+
$p->set_attribute( 'data-wp-on--click', 'actions.toggle' );
|
|
42
|
+
$p->set_attribute( 'id', $unique_id );
|
|
43
|
+
$p->set_attribute( 'aria-controls', $unique_id . '-panel' );
|
|
44
|
+
$p->set_attribute( 'data-wp-bind--aria-expanded', 'state.isOpen' );
|
|
45
|
+
|
|
46
|
+
if ( $p->next_tag( array( 'class_name' => 'wp-block-accordion-panel' ) ) ) {
|
|
47
|
+
$p->set_attribute( 'id', $unique_id . '-panel' );
|
|
48
|
+
$p->set_attribute( 'aria-labelledby', $unique_id );
|
|
49
|
+
$p->set_attribute( 'data-wp-bind--inert', '!state.isOpen' );
|
|
50
|
+
|
|
51
|
+
// Only modify content if all directives have been set.
|
|
52
|
+
$content = $p->get_updated_html();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return $content;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Registers the `core/accordion-item` block on server.
|
|
62
|
+
*
|
|
63
|
+
* @since 6.6.0
|
|
64
|
+
*/
|
|
65
|
+
function register_block_core_accordion_item() {
|
|
66
|
+
register_block_type_from_metadata(
|
|
67
|
+
__DIR__ . '/accordion-item',
|
|
68
|
+
array(
|
|
69
|
+
'render_callback' => 'block_core_accordion_item_render',
|
|
70
|
+
)
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
add_action( 'init', 'register_block_core_accordion_item' );
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useBlockProps, useInnerBlocksProps } from '@wordpress/block-editor';
|
|
5
|
+
/**
|
|
6
|
+
* External dependencies
|
|
7
|
+
*/
|
|
8
|
+
import clsx from 'clsx';
|
|
9
|
+
|
|
10
|
+
export default function save( { attributes } ) {
|
|
11
|
+
const { openByDefault } = attributes;
|
|
12
|
+
const blockProps = useBlockProps.save();
|
|
13
|
+
const className = clsx(
|
|
14
|
+
{
|
|
15
|
+
'is-open': openByDefault,
|
|
16
|
+
},
|
|
17
|
+
blockProps.className
|
|
18
|
+
);
|
|
19
|
+
const innerBlocksProps = useInnerBlocksProps.save( {
|
|
20
|
+
...blockProps,
|
|
21
|
+
className,
|
|
22
|
+
} );
|
|
23
|
+
|
|
24
|
+
return <div { ...innerBlocksProps } />;
|
|
25
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://schemas.wp.org/trunk/block.json",
|
|
3
|
+
"apiVersion": 3,
|
|
4
|
+
"name": "core/accordion-panel",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"title": "Accordion Panel",
|
|
7
|
+
"category": "design",
|
|
8
|
+
"description": "Accordion Panel",
|
|
9
|
+
"example": {},
|
|
10
|
+
"__experimental": true,
|
|
11
|
+
"parent": [ "core/accordion-item" ],
|
|
12
|
+
"supports": {
|
|
13
|
+
"color": {
|
|
14
|
+
"background": true,
|
|
15
|
+
"gradient": true
|
|
16
|
+
},
|
|
17
|
+
"border": true,
|
|
18
|
+
"interactivity": true,
|
|
19
|
+
"spacing": {
|
|
20
|
+
"padding": true,
|
|
21
|
+
"margin": [ "top", "bottom" ],
|
|
22
|
+
"blockGap": true,
|
|
23
|
+
"__experimentalDefaultControls": {
|
|
24
|
+
"padding": true,
|
|
25
|
+
"blockGap": true
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"__experimentalBorder": {
|
|
29
|
+
"color": true,
|
|
30
|
+
"radius": true,
|
|
31
|
+
"style": true,
|
|
32
|
+
"width": true,
|
|
33
|
+
"__experimentalDefaultControls": {
|
|
34
|
+
"color": true,
|
|
35
|
+
"radius": true,
|
|
36
|
+
"style": true,
|
|
37
|
+
"width": true
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"typography": {
|
|
41
|
+
"fontSize": true,
|
|
42
|
+
"lineHeight": true,
|
|
43
|
+
"__experimentalFontFamily": true,
|
|
44
|
+
"__experimentalFontWeight": true,
|
|
45
|
+
"__experimentalFontStyle": true,
|
|
46
|
+
"__experimentalTextTransform": true,
|
|
47
|
+
"__experimentalTextDecoration": true,
|
|
48
|
+
"__experimentalLetterSpacing": true,
|
|
49
|
+
"__experimentalDefaultControls": {
|
|
50
|
+
"fontSize": true
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"shadow": true
|
|
54
|
+
},
|
|
55
|
+
"attributes": {
|
|
56
|
+
"allowedBlocks": {
|
|
57
|
+
"type": "array"
|
|
58
|
+
},
|
|
59
|
+
"templateLock": {
|
|
60
|
+
"type": [ "string", "boolean" ],
|
|
61
|
+
"enum": [ "all", "insert", "contentOnly", false ],
|
|
62
|
+
"default": false
|
|
63
|
+
},
|
|
64
|
+
"openByDefault": {
|
|
65
|
+
"type": "boolean",
|
|
66
|
+
"default": false
|
|
67
|
+
},
|
|
68
|
+
"isSelected": {
|
|
69
|
+
"type": "boolean",
|
|
70
|
+
"default": false
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"textdomain": "default"
|
|
74
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import {
|
|
5
|
+
useBlockProps,
|
|
6
|
+
useInnerBlocksProps,
|
|
7
|
+
__experimentalUseBorderProps as useBorderProps,
|
|
8
|
+
__experimentalUseColorProps as useColorProps,
|
|
9
|
+
__experimentalGetSpacingClassesAndStyles as useSpacingProps,
|
|
10
|
+
__experimentalGetShadowClassesAndStyles as useShadowProps,
|
|
11
|
+
} from '@wordpress/block-editor';
|
|
12
|
+
/**
|
|
13
|
+
* External dependencies
|
|
14
|
+
*/
|
|
15
|
+
import clsx from 'clsx';
|
|
16
|
+
|
|
17
|
+
export default function Edit( { attributes } ) {
|
|
18
|
+
const { allowedBlocks, templateLock, openByDefault, isSelected } =
|
|
19
|
+
attributes;
|
|
20
|
+
const borderProps = useBorderProps( attributes );
|
|
21
|
+
const colorProps = useColorProps( attributes );
|
|
22
|
+
const spacingProps = useSpacingProps( attributes );
|
|
23
|
+
const shadowProps = useShadowProps( attributes );
|
|
24
|
+
|
|
25
|
+
const blockProps = useBlockProps();
|
|
26
|
+
const innerBlocksProps = useInnerBlocksProps(
|
|
27
|
+
{
|
|
28
|
+
className: 'accordion-content__wrapper',
|
|
29
|
+
style: {
|
|
30
|
+
...spacingProps.style,
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
allowedBlocks,
|
|
35
|
+
template: [ [ 'core/paragraph', {} ] ],
|
|
36
|
+
templateLock,
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
return (
|
|
41
|
+
<div
|
|
42
|
+
{ ...blockProps }
|
|
43
|
+
className={ clsx(
|
|
44
|
+
blockProps.className,
|
|
45
|
+
colorProps.className,
|
|
46
|
+
borderProps.className,
|
|
47
|
+
{
|
|
48
|
+
[ `has-custom-font-size` ]: blockProps?.style?.fontSize,
|
|
49
|
+
}
|
|
50
|
+
) }
|
|
51
|
+
style={ {
|
|
52
|
+
...borderProps.style,
|
|
53
|
+
...colorProps.style,
|
|
54
|
+
...shadowProps.style,
|
|
55
|
+
} }
|
|
56
|
+
aria-hidden={ ! isSelected && ! openByDefault }
|
|
57
|
+
>
|
|
58
|
+
<div { ...innerBlocksProps } />
|
|
59
|
+
</div>
|
|
60
|
+
);
|
|
61
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { accordionPanel } from '@wordpress/icons';
|
|
5
|
+
/**
|
|
6
|
+
* Internal dependencies
|
|
7
|
+
*/
|
|
8
|
+
import edit from './edit';
|
|
9
|
+
import save from './save';
|
|
10
|
+
import metadata from './block.json';
|
|
11
|
+
import initBlock from '../utils/init-block';
|
|
12
|
+
|
|
13
|
+
const { name } = metadata;
|
|
14
|
+
|
|
15
|
+
export { metadata, name };
|
|
16
|
+
|
|
17
|
+
export const settings = {
|
|
18
|
+
icon: accordionPanel,
|
|
19
|
+
example: {},
|
|
20
|
+
edit,
|
|
21
|
+
save,
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const init = () => initBlock( { name, metadata, settings } );
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import {
|
|
5
|
+
InnerBlocks,
|
|
6
|
+
useBlockProps,
|
|
7
|
+
__experimentalGetBorderClassesAndStyles as getBorderClassesAndStyles,
|
|
8
|
+
__experimentalGetColorClassesAndStyles as getColorClassesAndStyles,
|
|
9
|
+
__experimentalGetSpacingClassesAndStyles as getSpacingClassesAndStyles,
|
|
10
|
+
__experimentalGetShadowClassesAndStyles as getShadowClassesAndStyles,
|
|
11
|
+
} from '@wordpress/block-editor';
|
|
12
|
+
/**
|
|
13
|
+
* External dependencies
|
|
14
|
+
*/
|
|
15
|
+
import clsx from 'clsx';
|
|
16
|
+
|
|
17
|
+
export default function save( { attributes } ) {
|
|
18
|
+
const blockProps = useBlockProps.save();
|
|
19
|
+
const borderProps = getBorderClassesAndStyles( attributes );
|
|
20
|
+
const colorProps = getColorClassesAndStyles( attributes );
|
|
21
|
+
const spacingProps = getSpacingClassesAndStyles( attributes );
|
|
22
|
+
const shadowProps = getShadowClassesAndStyles( attributes );
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
<div
|
|
26
|
+
{ ...blockProps }
|
|
27
|
+
className={ clsx(
|
|
28
|
+
blockProps.className,
|
|
29
|
+
colorProps.className,
|
|
30
|
+
borderProps.className,
|
|
31
|
+
{
|
|
32
|
+
[ `has-custom-font-size` ]: blockProps?.style?.fontSize,
|
|
33
|
+
}
|
|
34
|
+
) }
|
|
35
|
+
style={ {
|
|
36
|
+
...borderProps.style,
|
|
37
|
+
...colorProps.style,
|
|
38
|
+
...shadowProps.style,
|
|
39
|
+
} }
|
|
40
|
+
>
|
|
41
|
+
<div
|
|
42
|
+
className="accordion-content__wrapper"
|
|
43
|
+
style={ {
|
|
44
|
+
...spacingProps.style,
|
|
45
|
+
} }
|
|
46
|
+
>
|
|
47
|
+
<InnerBlocks.Content />
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
);
|
|
51
|
+
}
|