@wordpress/block-library 9.28.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/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/index.js +2 -1
- package/build/cover/index.js.map +1 -1
- package/build/freeform/edit.js +6 -0
- package/build/freeform/edit.js.map +1 -1
- package/build/index.js +10 -0
- package/build/index.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/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 +56 -41
- 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-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/index.js +2 -1
- package/build-module/cover/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/index.js +10 -0
- package/build-module/index.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/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 +57 -42
- 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-style/accordions/style-rtl.css +223 -0
- package/build-style/accordions/style.css +223 -0
- package/build-style/style-rtl.css +88 -0
- package/build-style/style.css +88 -0
- 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 +16 -14
- package/src/cover/block.json +2 -1
- package/src/file/index.php +28 -22
- package/src/freeform/edit.js +7 -0
- package/src/index.js +12 -0
- package/src/media-text/media-container.js +1 -0
- package/src/media-text/transforms.js +5 -1
- package/src/post-excerpt/index.php +16 -12
- 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 +33 -12
- package/src/site-title/edit.js +24 -16
- package/src/social-link/index.php +1 -1
- package/src/style.scss +1 -0
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://schemas.wp.org/trunk/block.json",
|
|
3
|
+
"apiVersion": 3,
|
|
4
|
+
"name": "core/accordions",
|
|
5
|
+
"title": "Accordions",
|
|
6
|
+
"category": "design",
|
|
7
|
+
"description": "A group of Accordion headers and associated expandable content.",
|
|
8
|
+
"example": {},
|
|
9
|
+
"__experimental": true,
|
|
10
|
+
"supports": {
|
|
11
|
+
"html": false,
|
|
12
|
+
"align": [ "wide", "full" ],
|
|
13
|
+
"background": {
|
|
14
|
+
"backgroundImage": true,
|
|
15
|
+
"backgroundSize": true,
|
|
16
|
+
"__experimentalDefaultControls": {
|
|
17
|
+
"backgroundImage": true
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"color": {
|
|
21
|
+
"background": true,
|
|
22
|
+
"gradient": 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
|
+
"spacing": {
|
|
37
|
+
"padding": true,
|
|
38
|
+
"margin": [ "top", "bottom" ],
|
|
39
|
+
"blockGap": true
|
|
40
|
+
},
|
|
41
|
+
"shadow": true,
|
|
42
|
+
"layout": true,
|
|
43
|
+
"interactivity": true
|
|
44
|
+
},
|
|
45
|
+
"attributes": {
|
|
46
|
+
"iconPosition": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"default": "right"
|
|
49
|
+
},
|
|
50
|
+
"showIcon": {
|
|
51
|
+
"type": "boolean",
|
|
52
|
+
"default": true
|
|
53
|
+
},
|
|
54
|
+
"autoclose": {
|
|
55
|
+
"type": "boolean",
|
|
56
|
+
"default": false
|
|
57
|
+
},
|
|
58
|
+
"allowedBlocks": {
|
|
59
|
+
"type": "array"
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"providesContext": {
|
|
63
|
+
"core/accordion-icon-position": "iconPosition",
|
|
64
|
+
"core/accordion-show-icon": "showIcon"
|
|
65
|
+
},
|
|
66
|
+
"allowedBlocks": [ "core/accordion-item" ],
|
|
67
|
+
"textdomain": "default",
|
|
68
|
+
"style": "wp-block-accordions"
|
|
69
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import {
|
|
5
|
+
useBlockProps,
|
|
6
|
+
useInnerBlocksProps,
|
|
7
|
+
InspectorControls,
|
|
8
|
+
} from '@wordpress/block-editor';
|
|
9
|
+
import { __ } from '@wordpress/i18n';
|
|
10
|
+
import {
|
|
11
|
+
ToggleControl,
|
|
12
|
+
__experimentalToggleGroupControl as ToggleGroupControl,
|
|
13
|
+
__experimentalToggleGroupControlOption as ToggleGroupControlOption,
|
|
14
|
+
__experimentalToolsPanel as ToolsPanel,
|
|
15
|
+
__experimentalToolsPanelItem as ToolsPanelItem,
|
|
16
|
+
} from '@wordpress/components';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Internal dependencies
|
|
20
|
+
*/
|
|
21
|
+
import { useToolsPanelDropdownMenuProps } from '../utils/hooks';
|
|
22
|
+
|
|
23
|
+
const ACCORDION_BLOCK_NAME = 'core/accordion-item';
|
|
24
|
+
const ACCORDION_BLOCK = {
|
|
25
|
+
name: ACCORDION_BLOCK_NAME,
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export default function Edit( {
|
|
29
|
+
attributes: { autoclose, iconPosition, showIcon },
|
|
30
|
+
setAttributes,
|
|
31
|
+
} ) {
|
|
32
|
+
const blockProps = useBlockProps();
|
|
33
|
+
const dropdownMenuProps = useToolsPanelDropdownMenuProps();
|
|
34
|
+
|
|
35
|
+
const innerBlocksProps = useInnerBlocksProps( blockProps, {
|
|
36
|
+
template: [ [ ACCORDION_BLOCK_NAME ], [ ACCORDION_BLOCK_NAME ] ],
|
|
37
|
+
defaultBlock: ACCORDION_BLOCK,
|
|
38
|
+
directInsert: true,
|
|
39
|
+
templateInsertUpdatesSelection: true,
|
|
40
|
+
} );
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<>
|
|
44
|
+
<InspectorControls key="setting">
|
|
45
|
+
<ToolsPanel
|
|
46
|
+
label={ __( 'Settings' ) }
|
|
47
|
+
resetAll={ () => {
|
|
48
|
+
setAttributes( {
|
|
49
|
+
autoclose: false,
|
|
50
|
+
showIcon: true,
|
|
51
|
+
iconPosition: 'right',
|
|
52
|
+
} );
|
|
53
|
+
} }
|
|
54
|
+
dropdownMenuProps={ dropdownMenuProps }
|
|
55
|
+
>
|
|
56
|
+
<ToolsPanelItem
|
|
57
|
+
label={ __( 'Auto-close' ) }
|
|
58
|
+
isShownByDefault
|
|
59
|
+
hasValue={ () => !! autoclose }
|
|
60
|
+
onDeselect={ () =>
|
|
61
|
+
setAttributes( { autoclose: false } )
|
|
62
|
+
}
|
|
63
|
+
>
|
|
64
|
+
<ToggleControl
|
|
65
|
+
isBlock
|
|
66
|
+
__nextHasNoMarginBottom
|
|
67
|
+
label={ __( 'Auto-close' ) }
|
|
68
|
+
onChange={ ( value ) => {
|
|
69
|
+
setAttributes( {
|
|
70
|
+
autoclose: value,
|
|
71
|
+
} );
|
|
72
|
+
} }
|
|
73
|
+
checked={ autoclose }
|
|
74
|
+
help={ __(
|
|
75
|
+
'Automatically close accordions when a new one is opened.'
|
|
76
|
+
) }
|
|
77
|
+
/>
|
|
78
|
+
</ToolsPanelItem>
|
|
79
|
+
<ToolsPanelItem
|
|
80
|
+
label={ __( 'Show icon' ) }
|
|
81
|
+
isShownByDefault
|
|
82
|
+
hasValue={ () => ! showIcon }
|
|
83
|
+
onDeselect={ () => setAttributes( { showIcon: true } ) }
|
|
84
|
+
>
|
|
85
|
+
<ToggleControl
|
|
86
|
+
isBlock
|
|
87
|
+
__nextHasNoMarginBottom
|
|
88
|
+
label={ __( 'Show icon' ) }
|
|
89
|
+
onChange={ ( value ) => {
|
|
90
|
+
setAttributes( {
|
|
91
|
+
showIcon: value,
|
|
92
|
+
} );
|
|
93
|
+
} }
|
|
94
|
+
checked={ showIcon }
|
|
95
|
+
help={ __(
|
|
96
|
+
'Display a plus icon next to the accordion header.'
|
|
97
|
+
) }
|
|
98
|
+
/>
|
|
99
|
+
</ToolsPanelItem>
|
|
100
|
+
<ToolsPanelItem
|
|
101
|
+
label={ __( 'Icon Position' ) }
|
|
102
|
+
isShownByDefault
|
|
103
|
+
hasValue={ () => iconPosition !== 'right' }
|
|
104
|
+
onDeselect={ () =>
|
|
105
|
+
setAttributes( { iconPosition: 'right' } )
|
|
106
|
+
}
|
|
107
|
+
>
|
|
108
|
+
<ToggleGroupControl
|
|
109
|
+
__nextHasNoMarginBottom
|
|
110
|
+
__next40pxDefaultSize
|
|
111
|
+
isBlock
|
|
112
|
+
label={ __( 'Icon Position' ) }
|
|
113
|
+
value={ iconPosition }
|
|
114
|
+
onChange={ ( value ) => {
|
|
115
|
+
setAttributes( { iconPosition: value } );
|
|
116
|
+
} }
|
|
117
|
+
>
|
|
118
|
+
<ToggleGroupControlOption
|
|
119
|
+
label={ __( 'Left' ) }
|
|
120
|
+
value="left"
|
|
121
|
+
/>
|
|
122
|
+
<ToggleGroupControlOption
|
|
123
|
+
label={ __( 'Right' ) }
|
|
124
|
+
value="right"
|
|
125
|
+
/>
|
|
126
|
+
</ToggleGroupControl>
|
|
127
|
+
</ToolsPanelItem>
|
|
128
|
+
</ToolsPanel>
|
|
129
|
+
</InspectorControls>
|
|
130
|
+
<div { ...innerBlocksProps } />
|
|
131
|
+
</>
|
|
132
|
+
);
|
|
133
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { accordion } 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: accordion,
|
|
19
|
+
example: {},
|
|
20
|
+
edit,
|
|
21
|
+
save,
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const init = () => initBlock( { name, metadata, settings } );
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
/**
|
|
3
|
+
* Server-side rendering of the `core/accordions` block.
|
|
4
|
+
*
|
|
5
|
+
* @package WordPress
|
|
6
|
+
* @since 6.6.0
|
|
7
|
+
*
|
|
8
|
+
* @param array $attributes The block attributes.
|
|
9
|
+
* @param string $content The block content.
|
|
10
|
+
*
|
|
11
|
+
* @return string Returns the updated markup.
|
|
12
|
+
*/
|
|
13
|
+
function render_block_core_accordions( $attributes, $content ) {
|
|
14
|
+
if ( ! $content ) {
|
|
15
|
+
return $content;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
$suffix = wp_scripts_get_suffix();
|
|
19
|
+
if ( defined( 'IS_GUTENBERG_PLUGIN' ) && IS_GUTENBERG_PLUGIN ) {
|
|
20
|
+
$module_url = gutenberg_url( '/build-module/block-library/accordions/view.min.js' );
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
wp_register_script_module(
|
|
24
|
+
'@wordpress/block-library/accordions',
|
|
25
|
+
isset( $module_url ) ? $module_url : includes_url( "blocks/accordions/view{$suffix}.js" ),
|
|
26
|
+
array( '@wordpress/interactivity' ),
|
|
27
|
+
defined( 'GUTENBERG_VERSION' ) ? GUTENBERG_VERSION : get_bloginfo( 'version' )
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
wp_enqueue_script_module( '@wordpress/block-library/accordions' );
|
|
31
|
+
|
|
32
|
+
$p = new WP_HTML_Tag_Processor( $content );
|
|
33
|
+
$autoclose = $attributes['autoclose'] ? 'true' : 'false';
|
|
34
|
+
$icon = $attributes['icon'] ?? 'plus';
|
|
35
|
+
$icon_position = $attributes['iconPosition'] ?? 'right';
|
|
36
|
+
|
|
37
|
+
if ( $p->next_tag( array( 'class_name' => 'wp-block-accordions' ) ) ) {
|
|
38
|
+
$p->set_attribute( 'data-wp-interactive', 'core/accordion' );
|
|
39
|
+
$p->set_attribute( 'data-wp-context', '{ "autoclose": ' . $autoclose . ', "isOpen": [], "icon": "' . $icon . '", "iconPosition": "' . $icon_position . '" }' );
|
|
40
|
+
|
|
41
|
+
// Only modify content if directives have been set.
|
|
42
|
+
$content = $p->get_updated_html();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return $content;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Registers the `core/accordions` block on server.
|
|
50
|
+
*
|
|
51
|
+
* @since 6.6.0
|
|
52
|
+
*/
|
|
53
|
+
function register_block_core_accordions() {
|
|
54
|
+
register_block_type_from_metadata(
|
|
55
|
+
__DIR__ . '/accordions',
|
|
56
|
+
array(
|
|
57
|
+
'render_callback' => 'render_block_core_accordions',
|
|
58
|
+
)
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
add_action( 'init', 'register_block_core_accordions' );
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import clsx from 'clsx';
|
|
5
|
+
/**
|
|
6
|
+
* WordPress dependencies
|
|
7
|
+
*/
|
|
8
|
+
import { useBlockProps, useInnerBlocksProps } from '@wordpress/block-editor';
|
|
9
|
+
|
|
10
|
+
export default function save( { attributes } ) {
|
|
11
|
+
const { iconPosition } = attributes;
|
|
12
|
+
const blockProps = useBlockProps.save();
|
|
13
|
+
const className = clsx(
|
|
14
|
+
{
|
|
15
|
+
'icon-position-left': iconPosition === 'left',
|
|
16
|
+
},
|
|
17
|
+
blockProps.className
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
return (
|
|
21
|
+
<div { ...useInnerBlocksProps.save( { ...blockProps, className } ) } />
|
|
22
|
+
);
|
|
23
|
+
}
|